/
Matteo Fortini
2024-03-28T15:14:17+00:00
Un posto dove tenere traccia di idee, eventi, pensieri, cose interessanti
mfortini
Jekyll
/programming/dsilissea/
Dsilissea
2021-06-25T00:00:00+00:00
mfortini
info@matteofortini.it
http://www.matteofortini.it/
<p>La dislessia fa parte dei disturbi specifici dell’apprendimento o DSA (manuale DSM-5) ed è una condizione caratterizzata da problemi con la lettura e la diagnosi che si formula è indipendente dall’intelligenza della persona. Diverse persone ne sono colpite in misura diversa; i problemi possono includere difficoltà nella pronuncia delle parole, nella lettura veloce, nella scrittura a mano, nella pronuncia delle parole durante la lettura ad alta voce e nella comprensione di ciò che si legge. Spesso queste difficoltà vengono notate inizialmente a scuola. In caso di compromissione totale delle capacità di lettura si parla di alessia. Le difficoltà sono involontarie e le persone con questo disturbo hanno un normale desiderio di apprendimento.</p>
<p><em>Fonte: <a href="https://it.wikipedia.org/wiki/Dislessia">Wikipedia</a></em></p>
<p>Nel brano sottostante si è voluto creare un esempio dell'esperienza di lettura di una persona affetta da questo disturbo</p>
<div id="dislessiatext">
<blockquote>
<p>“Signor curato,” disse un di que’ due, piantandogli gli occhi in faccia.</p>
<p>“Cosa comanda?” rispose subito don Abbondio, alzando i suoi dal libro, che gli restò spalancato nelle mani, come sur un leggìo.</p>
<p>“Lei ha intenzione,” proseguì l’altro, con l’atto minaccioso e iracondo di chi coglie un suo inferiore sull’intraprendere una ribalderia, “lei ha intenzione di maritar domani Renzo Tramaglino e Lucia Mondella!”</p>
<p>“Cioè...” rispose, con voce tremolante, don Abbondio: “cioè. Lor signori son uomini di mondo, e sanno benissimo come vanno queste faccende. Il povero curato non c’entra: fanno i loro pasticci tra loro, e poi... e poi, vengon da noi, come s’anderebbe a un banco a riscotere; e noi... noi siamo i servitori del comune.”</p>
<p>“Or bene,” gli disse il bravo, all’orecchio, ma in tono solenne di comando, “questo matrimonio non s’ha da fare, né domani, né mai.”</p>
</blockquote>
</div>
<p><em>Fork di <a href="https://geon.github.io/programming/2016/03/03/dsxyliea">https://geon.github.io/programming/2016/03/03/dsxyliea</a></em></p>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript">
"use strict";
$(function(){
var getTextNodesIn = function(el) {
return $(el).find(":not(iframe,script)").addBack().contents().filter(function() {
return this.nodeType == 3;
});
};
// var textNodes = getTextNodesIn($("p, h1, h2, h3"));
var textNodes = getTextNodesIn($('div[id="dislessiatext"]'));
for (var i = 0; i < textNodes.length; i++) {
var node = textNodes[i];
node.oldValue=node.nodeValue;
}
function isLetter(char) {
return /^[\d]$/.test(char);
}
var wordsInTextNodes = [];
for (var i = 0; i < textNodes.length; i++) {
var node = textNodes[i];
var words = []
var re = /\w+/g;
var match;
while ((match = re.exec(node.oldValue)) != null) {
var word = match[0];
var position = match.index;
words.push({
length: word.length,
position: position
});
}
wordsInTextNodes[i] = words;
};
function messUpWords () {
for (var i = 0; i < textNodes.length; i++) {
var node = textNodes[i];
for (var j = 0; j < wordsInTextNodes[i].length; j++) {
// Only change a tenth of the words each round.
/*if (Math.random() > 3/10) {
continue;
}*/
var wordMeta = wordsInTextNodes[i][j];
var word = node.oldValue.slice(wordMeta.position, wordMeta.position + wordMeta.length);
var before = node.nodeValue.slice(0, wordMeta.position);
var after = node.nodeValue.slice(wordMeta.position + wordMeta.length);
node.nodeValue = before + messUpWord(word) + after;
};
};
}
function messUpWord (word) {
if (word.length < 3) {
return word;
}
return word[0] + messUpMessyPart(word.slice(1, -1)) + word[word.length - 1];
}
function messUpMessyPart (messyPart) {
if (messyPart.length < 2) {
return messyPart;
}
var a, b;
while (!(a < b)) {
a = getRandomInt(0, messyPart.length - 1);
b = getRandomInt(0, messyPart.length - 1);
}
return messyPart.slice(0, a) + messyPart[b] + messyPart.slice(a+1, b) + messyPart[a] + messyPart.slice(b+1);
}
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
setInterval(messUpWords, 1000);
});
</script>
2021-06-25T00:00:00+00:00
/civic%20hacking/PASocialDayMilano/
PASocial Day a Milano
2018-06-06T00:00:00+00:00
mfortini
info@matteofortini.it
http://www.matteofortini.it/
<p>Il 6 giugno 2018 si è celebrato in Italia il primo PASocial Day, giornata dedicata alle riflessioni sul rapporto fra Pubblica Amministrazione e nuovi mezzi di comunicazione, fra cui
i più impegnativi sono sicuramente i social network.</p>
<p>Sono stato invitato all’evento di Milano, in una piccola tavola rotonda sulla comunicazione in emergenza, per raccontare sia il progetto <a href="terremotocentroitalia.info">terremotocentroitalia.info</a>,
sia il rapporto fra la comunicazione social e il mio ruolo di Assessore del Comune di Cento da quasi due anni. Qui di seguito ho riassunto quello che ho detto.</p>
<h2 id="terremotocentroitaliainfo">terremotocentroitalia.info</h2>
<p><a href="terremotocentroitalia.info">terremotocentroitalia.info</a> è nato prima di tutto da un’esigenza, che io e Matteo Tempestini abbiamo sentito con forza il mattino del 24 Agosto del 2016, mentre commentavamo (ovviamente con l’aiuto dei social network
e degli strumenti di messaggistica istantanea) i fatti che stavano accadendo e la loro gestione da parte dei mezzi di comunicazione tradizionale (giornali, radio, TV) e di quello che girava sui social network.</p>
<p>Essendo un terremotato nel cratere del terremoto del 2012 in Emilia, avevo presenti alcuni ricordi:</p>
<ul>
<li>in quei giorni molti scoprirono Twitter: le prime notizie sulla scossa (che era avvenuta alle 3 di notte) sono arrivate proprio come tweet, mentre tutto il resto taceva</li>
<li>non esistevano account da seguire, ma quello che accadde fu che pochi utenti cominciarono ad avere una leadership naturale, dovuta al fatto che si erano distinti per condividere abitualmente delle informazioni
utili e corrette.</li>
<li>abbiamo tutti imparato a conoscere <a href="www.twitter.com/ingvterremoti">@INGVterremoti</a> come fonte ufficiale, ma anche a cercare delle alternative, in quanto per dare una informazione corretta, i tweet con gli epicentri
dei terremoti sono sempre in ritardo di decine di minuti</li>
</ul>
<p>Quella mattina dell’Agosto 2016 abbiamo notato che:</p>
<ul>
<li>i canali social delle varie istituzioni statali stavano dando informazioni che non erano incoerenti, ma venivano fornite in modo spesso parziale da più account diversi,
mancava una <strong>fonte autorevole unica</strong> che potesse essere pubblicizzata ai cittadini per potere avere informazioni</li>
<li>in particolare, veniva diffuso lo schema preparato dalla Croce Rossa Italiana che spiegava cosa fare in caso di terremoto <img src="https://www.cri.it/flex/images/f/8/6/D.ab26261ec7b2499198cf/cosa_fare_in_caso_di_terremoto.jpg" alt="" />
che però contiene due raccomandazioni:
<ul>
<li>“Evita di usare il telefono e l’automobile” (in alternativa, in TV veniva pubblicizzato il numero verde della Protezione Civile del Lazio, dicendo però di contattarlo soltanto in caso di
effettiva necessità): questo contro il bisogno di tutti sia di sapere cosa stesse succedendo nei dintorni, sia di contattare parenti e amici per avere anche soltanto supporto morale. In effetti, devo
confermare che quando c’è stato il terremoto nella mia città le linee telefoniche erano inutilizzabili, mentre però funzionava bene la rete internet anche cellulare.</li>
<li>“Raggiungi le aree di attesa individuate dal piano di emergenza comunale”: messaggio correttissimo, senonché purtroppo il piano di emergenza comunale è conosciuto da una piccola parte della popolazione, e molto
frequentemente le aree di attesa non sono segnalate come dovrebbero (e l’emergenza non è il momento adatto per informarsi)</li>
</ul>
</li>
</ul>
<p>Abbiamo quindi deciso di creare prima un gruppo Facebook, poi tutta una serie di servizi che abbiamo fatto confluire nel portale <a href="terremotocentroitalia.info">terremotocentroitalia.info</a> e che è stato
portato a contatto con le popolazioni colpite dal lavoro del progetto <a href="https://www.actionaid.it/terremoto-centro-italia-nostro-intervento">SIS.M.I.CO.</a> di <a href="www.actionaid.it">Act!onAid</a>.</p>
<h3 id="gli-antefatti">Gli antefatti</h3>
<p>Con Matteo avevamo già affrontato i temi delle emergenze a partire da <a href="http://www.progetto-rena.it/hacktoscana-report/">HackToscana 2014</a>, dove era cominciato un ragionamento, anche
in confronto con la Protezione Civile, sulla possibilità di utilizzare strumenti informatici e coinvolgere la società civile, tenendo presenti due elementi:</p>
<ul>
<li>la <strong>responsabilità</strong>: la Protezione Civile è formalmente responsabile di quello che comunica, che ha sempre valenza di ufficialità. Un progetto gestito dalla società civile è autorizzato
a porre clausole che pongono la responsabilità in capo all’utente, seppur cercando di guadagnarsi una autorevolezza molto forte sul campo</li>
<li>la <strong>competenza</strong>: ci sono azioni che sono di competenza della Protezione Civile e degli altri attori legati alla gestione delle emergenze (per esempio la Croce Rossa) e che la società civile non
può compiere.</li>
</ul>
<h3 id="come-labbiamo-fatto">Come l’abbiamo fatto</h3>
<p>La prima consapevolezza è quella di <strong>essere un servizio</strong> e di dover rispondere alle <strong>esigenze concrete</strong>, aggiustando il tiro se necessario:</p>
<ul>
<li>abbiamo evitato di sviluppare nuove “app” o luoghi in cui attirare le persone</li>
<li>abbiamo cercato di sfruttare sempre servizi esistenti, perché ci permettevano sia maggiore flessibilità, sia maggiore sicurezza di continuità, che non dipendeva da noi</li>
<li>abbiamo mantenuto una linea <em>open</em>:
<ul>
<li><em>open data</em>: tutti i dati di terremotocentroitalia.info sono condivisi da subito come <em>open data</em>, in modo da poter essere utilizzati da chiunque</li>
<li><em>open source</em>: le tecnologie su cui ci siamo basati sono il più possibile <em>open source</em>, per permettere a tutti di contribuire senza problemi</li>
<li><em>open collaboration</em>: tutti potevano contribuire al progetto nei modi e nei tempi che ritenevano utili, in una sorta di grande <em>hackathon</em> distribuita</li>
</ul>
</li>
</ul>
<h2 id="cosa-sto-imparando-sulla-comunicazione-social-e-di-emergenza-nella-pa">Cosa sto imparando sulla comunicazione social e di emergenza nella PA</h2>
<p>Per prima cosa, per collegarmi al progetto terremotocentroitalia, ricordo sempre ai miei colleghi <em>civic hacker</em> che spesso la società civile è più “avanti” della PA.
Quando vengono creati strumenti innovativi e fatte proposte che abbracciano nuovissime tecnologie, è facile che non si sia compresi, non per malafede, ma per la mancanza di mezzi per comprendere.</p>
<p>Ci sono problemi legati alla:</p>
<ul>
<li>impossibilità di acquisire personale competente: le professioni legate alla comunicazione social sono molto recenti. È quindi difficile che in organico ci siano persone già esperte,
mentre l’approccio ai nuovi media da parte di chi si è sempre relazionato coi tempi e i modi
della carta stampata rischia di non avere la libertà di essere ripensato totalmente</li>
<li><strong>formazione</strong>: occorre formare le persone già all’interno dell’amministrazione. Questo richiede tempo e risorse.</li>
<li><strong>motivazione</strong>: il problema della comunicazione attraverso i nuovi media non è sempre molto sentito. Soprattutto, non è sentito come un problema di tutti, quando per esempio il sito istituzionale
oggi non è più un corpo estraneo, ma è un patrimonio (immateriale) al pari delle bacheche negli uffici</li>
<li>mancanza di consapevolezza che tutto è comunicazione e ha bisogno di una strategia integrata: dagli sportelli al cittadino, alle email, ai comunicati stampa</li>
</ul>
<h3 id="normativa-e-burocrazia">Normativa e burocrazia</h3>
<ul>
<li>la Pubblica Amministrazione si basa su atti e procedimenti, e comunica normalmente attraverso messaggi protocollati.
Tutto il mondo dei social, della messaggistica, anche dei servizi di segnalazione tramite app o web è attualmente
un canale parallelo. Se la regola è “tutte le comunicazioni che potrebbero dare avvio a un procedimento vanno
protocollate”, una segnalazione di un cittadino è quasi sempre fonte di un’azione da parte della PA e quindi
andrebbe trattata in questo modo. Il sistema di protocollazione in ingresso e in uscita naturalmente però
aggiunge tutta una serie di complicazioni e di implicazioni di responsabilità.</li>
<li>una Pubblica Amministrazione ha una serie di adempimenti che è tenuta ad assolvere, mentre ciò che esula
dalle sue competenze va sempre valutato con attenzione. Occorre quindi motivare le scelte su ciò che si fa,
anche nella comunicazione, e inserire queste azioni all’interno dei procedimenti e dei regolamenti, per evitare
che siano legati all’amministrazione corrente</li>
<li>comunicare la macchina burocratica ai cittadini, anche a quelli più attivi, è fonte di difficoltà e incomprensioni.
Occorre che da una parte ci si sforzi di rendere comprensibile tutto il procedimento, ma dall’altra parte
per interloquire con la PA bisogna imparare a parlarne il linguaggio, anche quando sembri assurdo</li>
</ul>
<h3 id="emergenze">Emergenze</h3>
<ul>
<li>Importanza della <strong>multicanalità</strong>: non fissarsi su un solo strumento, per quanto accattivante. Una sola
app, un solo sito, un solo messaggio SMS, se guasti, non raggiungono il cittadino nel momento importantissimo
dell’emergenza</li>
<li>Bisogna <strong>andare dove si trovano i cittadini</strong>: che siano i social, le chat, … L’impatto sarà tanto maggiore, quanto
più riusciremo ad andare nelle “piazze” in cui già sono</li>
<li>Il canale dev’essere continuamente testato, per assicurarsi che funzioni. No alle app che apriamo una volta all’anno,
e magari non ci eravamo accorti che non funzionavano più. Sì all’approccio delle allerte meteo,
che vengono date anche quando è “verde”: in questo modo ricevo un messaggio tutti i giorni e so
che sono collegato</li>
<li>Ci dev’essere un <em>commitment</em>, un impegno forte, nel proporre servizi o fornire dati (es. i feed delle allerte).
Non è possibile avere servizi <em>best effort</em> in caso di comunicazione di emergenza. In caso contrario, sarà più facile
che nel momento del bisogno si possa comunicare su un social network o su un altro servizio gestito da “grandi aziende”,
che hanno ovviamente interesse economico ad essere sempre attive. Questo è un elemento che può essere sfruttato.</li>
<li>Di nuovo sulle norme: dobbiamo sapere cosa possiamo utilizzare ed eventualmente lavorare per modificare le leggi
per aiutare la comunicazione in emergenza. Si diceva in un intervento precedente al mio che c’è discussione
se la comunicazione social sia o meno “servizio pubblico”. Queste due piccole parole rappresentano tante
implicazioni per chi lavori in una PA. Questa necessità vale anche per l’uso o la produzione di open data.</li>
</ul>
<h3 id="gli-strumenti-che-possiamo-prendere-da-altri-ambiti">Gli strumenti che possiamo prendere da altri ambiti</h3>
<p>La Pubblica Amministrazione non ha dovuto fare il ragionamento complesso di certificazione di qualità a cui
sono state costrette tutte le aziende anni fa. In quel frangente, per fare un esempio, le società di formazione
hanno dovuto cominciare a ragionare su quale fosse il loro “prodotto” (se la “formazione” o “lo studente”). Con questo
però hanno potuto ragionare di numeri e di strumenti.</p>
<p>Nel campo delle segnalazioni dei cittadini ci vengono proposti vari servizi, che implicano punti di vista diversi
sul rapporto PA-cittadino:</p>
<ul>
<li>sistemi di <em>ticketing</em>, dove si considera il cittadino un utente che fa segnalazioni a cui dare risposta</li>
<li>sistemi di <em>customer relationship management</em>, dove si considera ogni cittadino un cliente che può segnalare,
ma anche a cui chiedere valutazioni, commenti, su cui fare campagne di marketing</li>
</ul>
<p>Probabilmente alla base della scelta dell’uno o dell’altro strumento dovrebbe esserci un tentativo di ricondurre
le forme di fornitura di servizi di una PA nei termini usati dalle aziende del terzo settore, il che permetterebbe
più chiaramente di mutuare anche il loro modo di gestire il lavoro.</p>
2018-06-06T00:00:00+00:00
/hacking/DisplayWirelessESP32/
Un display OLED WiFi con ESP32
2018-04-10T00:00:00+00:00
mfortini
info@matteofortini.it
http://www.matteofortini.it/
Come utilizzare un modulo ESP32 + display OLED per visualizzare dati via WiFi
<p>Per monitorare il funzionamento del mio impianto fotovoltaico, ho installato da qualche anno un sistema chiamato
<a href="http://openenergymonitor.org">OpenEnergyMonitor</a>, basato su <a href="http://www.raspberrypi.org">Raspberry Pi</a> e <a href="http://www.arduino.cc">Arduino</a>.</p>
<p>Il software di gestione di OpenEnergyMonitor utilizza un broker <a href="http://mqtt.org">MQTT</a>,
chiamato <a href="https://mosquitto.org/">Mosquitto</a>, che permette ad altri software di connettersi e ricevere e trasmettere messaggi in modalità <i>publish/subscribe</i> in
modo efficiente e con ridotto consumo di banda e di energia.</p>
<p>I valori letti vengono pubblicati periodicamente, e possono essere visualizzati per esempio utilizzando l’utility <code>mosquitto_sub</code>
(le credenziali di default sono username <code>emonpi</code> e password <code>emonpimqtt2016</code>), registrandosi come <i>subscriber</i> per
il topic generico, indicato in MQTT con <code>#</code>:</p>
<pre>
$ mosquitto_sub -h emonpi -u emonpi -P emonpimqtt2016 -v -t '#'
/caldaia/barometer/t 19.14
/caldaia/barometer/p 1005.46
emon/emonpi/power1 260
emon/emonpi/power2 17
emon/emonpi/power1pluspower2 277
emon/emonpi/vrms 247.25
emon/emonpi/t1 19
emon/emonpi/t2 0
emon/emonpi/t3 0
emon/emonpi/t4 0
emon/emonpi/t5 0
emon/emonpi/t6 0
emon/emonpi/pulsecount 0
</pre>
<p>In questo caso le opzioni sono:</p>
<ul>
<li><code>-h emonpi</code> per connettersi all'host <code>emonpi</code>, che è il nome DNS di default che il sistema OpenEnergyMonitor si assegna</li>
<li><code>-u emonpi</code> per il nome utente</li>
<li><code>-P emonpimqtt2016</code> per la password</li>
<li><code>-v</code> per far stampare accanto ad ogni dato il <i>topic</i> MQTT</li>
<li><code>-t '#'</code> per iscriversi a tutti i topic pubblicati dal broker</li>
</ul>
<p>e l’output consiste in due colonne:</p>
<ul>
<li>nella prima colonna, il <i>topic</i> MQTT</li>
<li>nella seconda colonna, il valore ricevuto</li>
</ul>
<p>in questo caso, si può vedere come vengano ricevuti valori pubblicati direttamente da emonpi (es. la potenza istantanea prodotta e consumata), sia quelli che vengono inviati da un’altro dispositivo
che ho installato presso la caldaia per misurare la temperatura esterna e la pressione atmosferica.</p>
<p>Per visualizzare in tempo reale i valori del sistema, è possibile utilizzare una scheda con <a href="https://www.espressif.com/en/products/hardware/esp32/overview">ESP32</a>, un
SOM che supporta WiFi e Bluetooth Low-Energy, alla quale è collegato un display OLED. Una di queste schede è la <a href="https://www.tindie.com/products/lspoplove/wifi-packet-monitorv3-preflashed-d-duino-32-sdv2/">D-duino-32</a>,
che ha installato sulla stessa basetta un display OLED SSD1306 da 128x64 pixel, può essere alimentato con un qualsiasi alimentatore a 5V con connessione micro-USB (es. quelli dei telefoni) e ha dimensioni ridottissime: circa 6x3cm.</p>
<p>Per programmare la scheda, ho utilizzato <a href="https://micropython.org/">MicroPython</a>, nella sua versione per ESP32, che allo stato attuale è disponibile solo come <a href="http://micropython.org/download#esp32">nightly build</a>.</p>
<p>Il firmware può essere installato utilizzando il software <code>esptool.py</code> (che si può ottenere con <code>pip</code>: <code>pip install esptool</code>), con il comando</p>
<pre>
$ esptool.py --port /dev/ttyUSB0 erase_flash
$ esptool.py --port /dev/ttyUSB0 write_flash -z 0x1000 firmware.bin
</pre>
<p>A questo punto, è possibile utilizzare l’interprete Python installato sulla scheda direttamente con un emulatore di terminale seriale, come <a href="https://www.putty.org/">Putty</a> o minicom.
Per conoscere le librerie specifiche per ESP32 si può consultare la <a href="https://docs.micropython.org/en/latest/esp8266/">documentazione di Micropython</a></p>
<p>MicroPython all’avvio esegue, se presenti, prima il file <code>boot.py</code>, quindi il file <code>main.py</code>.</p>
<p>Il file possono essere caricati sulla scheda utilizzando l’utility di Adafruit <a href="https://github.com/adafruit/ampy"><code>ampy</code></a>, che può anch’esso essere installata utilizzando <code>pip</code> con il comando
<code>pip install adafruit-ampy</code>:</p>
<pre>
$ ampy --port /dev/ttyUSB0 put main.py
</pre>
<p>Occorrono inoltre la <a href="https://github.com/adafruit/micropython-adafruit-ssd1306">libreria Adafruit per il display SSD1306</a>, che può essere installata utilizzando <code>ampy</code>, e le
librerie per MQTT che si possono installare direttamente da terminale sulla scheda utilizzando <code>upip</code>:</p>
<pre>
import upip
upip.install('micropython-umqtt.simple')
upip.install('micropython-umqtt.robust')
upip.install('micropython-umqtt.simple') # Seconda chiamata identica per un bug di upip
</pre>
<p>I codici sorgenti utilizzati per visualizzare i dati si possono recuperare nel <a href="https://github.com/mfortini/ESP32Display">progetto GitHub</a>.</p>
<p>Quando il sistema viene alimentato:</p>
<ol>
<li>Per prima cosa, cerca la connessione alla rete</li>
<li>Quando la connessione è stabilita, recupera l'orario corretto via NTP</li>
<li>Si connette al server MQTT, chiedendo di iscriversi ad alcuni dei valori pubblicati (temperature, pressione, potenza istantanea)</li>
<li>Entra in un loop nel quale controlla ogni 0.5 secondi se ci sono messaggi MQTT, nel qual caso aggiorna i valori da visualizzare sul display</li>
<li>I valori visualizzati sul display vengono aggiornati</li>
<li>Se la connessione wifi cade, il sistema ritenta la connessione</li>
</ol>
<p>Purtroppo micropython utilizza un font per il display che non è particolarmente leggibile.</p>
<p>Abbiamo quindi ottenuto un display che, ovunque alimentato in copertura della rete wifi, può visualizzare i valori istantanei del nostro sistema. Il risultato è quello che si può vedere in figura.</p>
2018-04-10T00:00:00+00:00
/cento/UnaCittaInFesta/
Una città in festa
2018-03-24T00:00:00+00:00
mfortini
info@matteofortini.it
http://www.matteofortini.it/
Riapre San Biagio dopo il terremoto e nasce la sala Da Tè
<p>Ci sono giorni in cui una città festeggia come fosse una persona. Sono i giorni in cui respiri nell’aria un’atmosfera di gioia,
nei quali tutti i sensi ti dicono che sta succedendo qualcosa di speciale.</p>
<p>Ieri a Cento, dopo quasi sei lunghi anni in cui è stata chiusa “quasi come un sepolcro” - citando l’omelia dell’Arcivescovo Zuppi -
<strong>ha riaperto la chiesa di San Biagio</strong>, la più grande e importante della Città di Cento, rinata dopo che il <strong>terremoto del 2012</strong>
l’aveva resa inagibile.</p>
<p>Come però spesso si ha l’abitudine di piantare un albero quando si costruisce una casa, nella vicina via Guercino,
accanto al cinema parrocchiale Don Zucchini, è nata dal coraggio e dalla tenacia di alcune famiglie
e dalla solidarietà di tanti la <strong>sala “Da Tè”</strong>, un luogo di lavoro, di sperimentazione e di innovazione sociale e
che è stata inaugurata in un pomeriggio primaverile di sole, con nell’aria il suono delle campane di San Biagio,
anch’esse rimaste silenziose dal terremoto.</p>
<p>Una giornata piena di emozioni al limite della commozione, per la felicità di vedere tante cose belle accadere
con tutti i sensi che raccontavano la festa e per il ricordo inevitabile di coloro che di quei luoghi erano parte integrante,
come Monsignor Baviera, Alfredo il sacrestano, Cristina la perpetua, i maestri Piombini e Masarati e tanti altri.</p>
<div>
<ul class="clearing-thumbs small-block-grid-4" data-clearing="">
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeVetrina.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeVetrina-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeVescovo.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeVescovo-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeTaglioNastro.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeTaglioNastro-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTe24Marzo.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTe24Marzo-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeBancone.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeBancone-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeOrari.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeOrari-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeAromateca.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeAromateca-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeBarattoli.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeBarattoli-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeTeiere.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/DaTeTeiere-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioEntrata.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioEntrata-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioPano.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioPano-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagio2.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagio2-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioAbside.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioAbside-thumb.jpg" alt="" /></a></li>
<li><a href="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioCupola.jpg"><img src="https://www.matteofortini.it/images//images/2018-03-24-UnaCittaInFesta/SanBiagioCupola-thumb.jpg" alt="" /></a></li>
</ul>
</div>
2018-03-24T00:00:00+00:00
/civic%20hacking/rifiutiER/
Rifiuti Urbani in Emilia-Romagna 2010-2016
2017-11-29T00:00:00+00:00
mfortini
info@matteofortini.it
http://www.matteofortini.it/
Analisi dei dati pubblicati da ARPAE
<script src="data:application/x-javascript;base64,LyohIGpRdWVyeSB2MS4xMi40IHwgKGMpIGpRdWVyeSBGb3VuZGF0aW9uIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1jLnNsaWNlLGY9Yy5jb25jYXQsZz1jLnB1c2gsaD1jLmluZGV4T2YsaT17fSxqPWkudG9TdHJpbmcsaz1pLmhhc093blByb3BlcnR5LGw9e30sbT0iMS4xMi40IixuPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBuLmZuLmluaXQoYSxiKX0sbz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2cscD0vXi1tcy0vLHE9Ly0oW1xkYS16XSkvZ2kscj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O24uZm49bi5wcm90b3R5cGU9e2pxdWVyeTptLGNvbnN0cnVjdG9yOm4sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT8wPmE/dGhpc1thK3RoaXMubGVuZ3RoXTp0aGlzW2FdOmUuY2FsbCh0aGlzKX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPW4ubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxiLmNvbnRleHQ9dGhpcy5jb250ZXh0LGJ9LGVhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZWFjaCh0aGlzLGEpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpnLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbi5leHRlbmQ9bi5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG4uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihuLmlzUGxhaW5PYmplY3QoYyl8fChiPW4uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbi5pc0FycmF5KGEpP2E6W10pOmY9YSYmbi5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1uLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbi5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKG0rTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW4udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bi50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXt2YXIgYj1hJiZhLnRvU3RyaW5nKCk7cmV0dXJuIW4uaXNBcnJheShhKSYmYi1wYXJzZUZsb2F0KGIpKzE+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1uLnR5cGUoYSl8fGEubm9kZVR5cGV8fG4uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFrLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWsuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKCFsLm93bkZpcnN0KWZvcihiIGluIGEpcmV0dXJuIGsuY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxrLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aVtqLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZuLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UocCwibXMtIikucmVwbGFjZShxLHIpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTA7aWYocyhhKSl7Zm9yKGM9YS5sZW5ndGg7Yz5kO2QrKylpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShvLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihzKE9iamVjdChhKSk/bi5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zy5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGgpcmV0dXJuIGguY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGc9MCxoPVtdO2lmKHMoYSkpZm9yKGQ9YS5sZW5ndGg7ZD5nO2crKyllPWIoYVtnXSxnLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihnIGluIGEpZT1iKGFbZ10sZyxjKSxudWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGYuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9Ziksbi5pc0Z1bmN0aW9uKGEpPyhjPWUuY2FsbChhcmd1bWVudHMsMiksZD1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpKX0sZC5ndWlkPWEuZ3VpZD1hLmd1aWR8fG4uZ3VpZCsrLGQpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omx9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYobi5mbltTeW1ib2wuaXRlcmF0b3JdPWNbU3ltYm9sLml0ZXJhdG9yXSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2lbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gcyhhKXt2YXIgYj0hIWEmJiJsZW5ndGgiaW4gYSYmYS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2EoKSx6PWdhKCksQT1nYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE49IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitNKyIpKXwpIitMKyIqXFxdIixPPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTisiKSopfC4qKVxcKXwpIixQPW5ldyBSZWdFeHAoTCsiKyIsImciKSxRPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFM9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxUPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFU9bmV3IFJlZ0V4cChPKSxWPW5ldyBSZWdFeHAoIl4iK00rIiQiKSxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK04pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitPKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0wrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzooWystXXwpIitMKyIqKFxcZCspfCkpIitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitLKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xcZCopIitMKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWT0vXmhcZCQvaSxaPS9eW157XStce1xzKlxbbmF0aXZlIFx3LywkPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sXz0vWyt+XS8sYWE9Lyd8XFwvZyxiYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksY2E9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGRhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZmEoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3PWImJmIub3duZXJEb2N1bWVudCx4PWI/Yi5ub2RlVHlwZTo5O2lmKGQ9ZHx8W10sInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PXgmJjkhPT14JiYxMSE9PXgpcmV0dXJuIGQ7aWYoIWUmJigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixwKSl7aWYoMTEhPT14JiYobz0kLmV4ZWMoYSkpKWlmKGY9b1sxXSl7aWYoOT09PXgpe2lmKCEoaj1iLmdldEVsZW1lbnRCeUlkKGYpKSlyZXR1cm4gZDtpZihqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZSBpZih3JiYoaj13LmdldEVsZW1lbnRCeUlkKGYpKSYmdChiLGopJiZqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZXtpZihvWzJdKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoZj1vWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZikpLGR9aWYoYy5xc2EmJiFBW2ErIiAiXSYmKCFxfHwhcS50ZXN0KGEpKSl7aWYoMSE9PXgpdz1iLHM9YTtlbHNlIGlmKCJvYmplY3QiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoaz1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/az1rLnJlcGxhY2UoYWEsIlxcJCYiKTpiLnNldEF0dHJpYnV0ZSgiaWQiLGs9dSkscj1nKGEpLGg9ci5sZW5ndGgsbD1WLnRlc3Qoayk/IiMiK2s6IltpZD0nIitrKyInXSI7d2hpbGUoaC0tKXJbaF09bCsiICIrcWEocltoXSk7cz1yLmpvaW4oIiwiKSx3PV8udGVzdChhKSYmb2EoYi5wYXJlbnROb2RlKXx8Yn1pZihzKXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbChzKSksZH1jYXRjaCh5KXt9ZmluYWxseXtrPT09dSYmYi5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gaShhLnJlcGxhY2UoUSwiJDEiKSxiLGQsZSl9ZnVuY3Rpb24gZ2EoKXt2YXIgYT1bXTtmdW5jdGlvbiBiKGMsZSl7cmV0dXJuIGEucHVzaChjKyIgIik+ZC5jYWNoZUxlbmd0aCYmZGVsZXRlIGJbYS5zaGlmdCgpXSxiW2MrIiAiXT1lfXJldHVybiBifWZ1bmN0aW9uIGhhKGEpe3JldHVybiBhW3VdPSEwLGF9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfX1mdW5jdGlvbiBqYShhLGIpe3ZhciBjPWEuc3BsaXQoInwiKSxlPWMubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5kbGVbY1tlXV09Yn1mdW5jdGlvbiBrYShhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlwZSYmMT09PWIubm9kZVR5cGUmJih+Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxDKTtpZihkKXJldHVybiBkO2lmKGMpd2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVybi0xO3JldHVybiBhPzE6LTF9ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YyYmYi50eXBlPT09YX19ZnVuY3Rpb24gbWEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PWN8fCJidXR0b24iPT09YykmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBoYShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixoYShmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1mYS5zdXBwb3J0PXt9LGY9ZmEuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiPyJIVE1MIiE9PWIubm9kZU5hbWU6ITF9LG09ZmEuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZSxnPWE/YS5vd25lckRvY3VtZW50fHxhOnY7cmV0dXJuIGchPT1uJiY5PT09Zy5ub2RlVHlwZSYmZy5kb2N1bWVudEVsZW1lbnQ/KG49ZyxvPW4uZG9jdW1lbnRFbGVtZW50LHA9IWYobiksKGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZGEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixkYSkpLGMuYXR0cmlidXRlcz1pYShmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKG4uY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVoudGVzdChuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1pYShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYz9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT1aLnRlc3Qobi5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitMKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGlhKGZ1bmN0aW9uKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrTCsiKlsqXiR8IX5dPz0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxxLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPVoudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmaWEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwiZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgiIT0iLE8pfSkscT1xLmxlbmd0aCYmbmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oInwiKSksYj1aLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHxaLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1ufHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PW58fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxnPVthXSxoPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1uPy0xOmI9PT1uPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGthKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWcudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO3doaWxlKGdbZF09PT1oW2RdKWQrKztyZXR1cm4gZD9rYShnW2RdLGhbZF0pOmdbZF09PT12Py0xOmhbZF09PT12PzE6MH0sbik6bn0sZmEubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYShhLG51bGwsbnVsbCxiKX0sZmEubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFQsIj0nJDEnXSIpLGMubWF0Y2hlc1NlbGVjdG9yJiZwJiYhQVtiKyIgIl0mJighcnx8IXIudGVzdChiKSkmJighcXx8IXEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGZhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGZhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZmEuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGZhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZmEudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWZhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1mYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpoYSxtYXRjaDpXLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoYmEsY2EpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGJhLGNhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8ZmEuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZmEuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFcuQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVS50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZmEuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShQLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPSJvbmx5Ij09PWEmJiFvJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5maXJzdENoaWxkOnEubGFzdENoaWxkXSxnJiZzKXttPXEsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biYmalsyXSxtPW4mJnEuY2hpbGROb2Rlc1tuXTt3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigxPT09bS5ub2RlVHlwZSYmKyt0JiZtPT09Yil7a1thXT1bdyxuLHRdO2JyZWFrfX1lbHNlIGlmKHMmJihtPWIsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biksdD09PSExKXdoaWxlKG09KytuJiZtJiZtW3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKChoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpJiYrK3QmJihzJiYobD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksa1thXT1bdyx0XSksbT09PWIpKWJyZWFrO3JldHVybiB0LT1lLHQ9PT1kfHx0JWQ9PT0wJiZ0L2Q+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGEsYil7dmFyIGMsZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpP2hhKGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pZD1KKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmhhKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1oKGEucmVwbGFjZShRLCIkMSIpKTtyZXR1cm4gZFt1XT9oYShmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSxiWzBdPW51bGwsIWMucG9wKCl9fSksaGFzOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmEoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYShmdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoYmEsY2EpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBWLnRlc3QoYXx8IiIpfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIithKSxhPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIgYztkbyBpZihjPXA/Yi5sYW5nOmIuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxiLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBjPWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhPZihhKyItIik7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihiKXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7cmV0dXJuIGMmJmMuc2xpY2UoMSk9PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09b30sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNGb2N1c3x8bi5oYXNGb2N1cygpKSYmISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJvcHRpb24iPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmImJ1dHRvbiI9PT1hLnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4iaW5wdXQiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1hLnR5cGUmJihudWxsPT0oYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6bmEoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Om5hKGZ1bmN0aW9uKGEsYil7cmV0dXJuW2ItMV19KSxlcTpuYShmdW5jdGlvbihhLGIsYyl7cmV0dXJuWzA+Yz9jK2I6Y119KSxldmVuOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksb2RkOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksbHQ6bmEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7LS1kPj0wOylhLnB1c2goZCk7cmV0dXJuIGF9KSxndDpuYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBzZXVkb3MubnRoPWQucHNldWRvcy5lcTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlkLnBzZXVkb3NbYl09bGEoYik7Zm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlkLnBzZXVkb3NbYl09bWEoYik7ZnVuY3Rpb24gcGEoKXt9cGEucHJvdG90eXBlPWQuZmlsdGVycz1kLnBzZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyBwYSxnPWZhLnRva2VuaXplPWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVybiBiPzA6ay5zbGljZSgwKTtoPWEsaT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpe2MmJiEoZT1SLmV4ZWMoaCkpfHwoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1TLmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFEsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1XW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/ZmEuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBxYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHJhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGosaz1bdyxmXTtpZihnKXt3aGlsZShiPWJbZF0paWYoKDE9PT1iLm5vZGVUeXBlfHxlKSYmYShiLGMsZykpcmV0dXJuITB9ZWxzZSB3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpe2lmKGo9Ylt1XXx8KGJbdV09e30pLGk9altiLnVuaXF1ZUlEXXx8KGpbYi51bmlxdWVJRF09e30pLChoPWlbZF0pJiZoWzBdPT09dyYmaFsxXT09PWYpcmV0dXJuIGtbMl09aFsyXTtpZihpW2RdPWssa1syXT1hKGIsYyxnKSlyZXR1cm4hMH19fWZ1bmN0aW9uIHNhKGEpe3JldHVybiBhLmxlbmd0aD4xP2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0paWYoIWFbZV0oYixjLGQpKXJldHVybiExO3JldHVybiEwfTphWzBdfWZ1bmN0aW9uIHRhKGEsYixjKXtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspZmEoYSxiW2RdLGMpO3JldHVybiBjfWZ1bmN0aW9uIHVhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1udWxsIT1iO2k+aDtoKyspKGY9YVtoXSkmJihjJiYhYyhmLGQsZSl8fChnLnB1c2goZiksaiYmYi5wdXNoKGgpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gdmEoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFt1XSYmKGQ9dmEoZCkpLGUmJiFlW3VdJiYoZT12YShlLGYpKSxoYShmdW5jdGlvbihmLGcsaCxpKXt2YXIgaixrLGwsbT1bXSxuPVtdLG89Zy5sZW5ndGgscD1mfHx0YShifHwiKiIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0hYXx8IWYmJmI/cDp1YShwLG0sYSxoLGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZjKHEscixoLGkpLGQpe2o9dWEocixuKSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSkobD1qW2tdKSYmKHJbbltrXV09IShxW25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtdLGs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1bXSxqLGkpfWs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXVhKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpILmFwcGx5KGcscil9KX1mdW5jdGlvbiB3YShhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZlWyIgIl0saT1nPzE6MCxrPXJhKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD1yYShmdW5jdGlvbihhKXtyZXR1cm4gSihiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFyIGU9IWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0dXJuIGI9bnVsbCxlfV07Zj5pO2krKylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVtyYShzYShtKSxjKV07ZWxzZXtpZihjPWQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1hdGNoZXMpLGNbdV0pe2ZvcihlPSsraTtmPmU7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSlicmVhaztyZXR1cm4gdmEoaT4xJiZzYShtKSxpPjEmJnFhKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09YVtpLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoUSwiJDEiKSxjLGU+aSYmd2EoYS5zbGljZShpLGUpKSxmPmUmJndhKGE9YS5zbGljZShlKSksZj5lJiZxYShhKSl9bS5wdXNoKGMpfXJldHVybiBzYShtKX1mdW5jdGlvbiB4YShhLGIpe3ZhciBjPWIubGVuZ3RoPjAsZT1hLmxlbmd0aD4wLGY9ZnVuY3Rpb24oZixnLGgsaSxrKXt2YXIgbCxvLHEscj0wLHM9IjAiLHQ9ZiYmW10sdT1bXSx2PWoseD1mfHxlJiZkLmZpbmQuVEFHKCIqIixrKSx5PXcrPW51bGw9PXY/MTpNYXRoLnJhbmRvbSgpfHwuMSx6PXgubGVuZ3RoO2ZvcihrJiYoaj1nPT09bnx8Z3x8ayk7cyE9PXomJm51bGwhPShsPXhbc10pO3MrKyl7aWYoZSYmbCl7bz0wLGd8fGwub3duZXJEb2N1bWVudD09PW58fChtKGwpLGg9IXApO3doaWxlKHE9YVtvKytdKWlmKHEobCxnfHxuLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYmKHc9eSl9YyYmKChsPSFxJiZsKSYmci0tLGYmJnQucHVzaChsKSl9aWYocis9cyxjJiZzIT09cil7bz0wO3doaWxlKHE9YltvKytdKXEodCx1LGcsaCk7aWYoZil7aWYocj4wKXdoaWxlKHMtLSl0W3NdfHx1W3NdfHwodVtzXT1GLmNhbGwoaSkpO3U9dWEodSl9SC5hcHBseShpLHUpLGsmJiFmJiZ1Lmxlbmd0aD4wJiZyK2IubGVuZ3RoPjEmJmZhLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXksaj12KSx0fTtyZXR1cm4gYz9oYShmKTpmfXJldHVybiBoPWZhLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1BW2ErIiAiXTtpZighZil7Ynx8KGI9ZyhhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj13YShiW2NdKSxmW3VdP2QucHVzaChmKTplLnB1c2goZik7Zj1BKGEseGEoZSxkKSksZi5zZWxlY3Rvcj1hfXJldHVybiBmfSxpPWZhLnNlbGVjdD1mdW5jdGlvbihhLGIsZSxmKXt2YXIgaSxqLGssbCxtLG49ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0b3J8fGEpO2lmKGU9ZXx8W10sMT09PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxqLmxlbmd0aD4yJiYiSUQiPT09KGs9alswXSkudHlwZSYmYy5nZXRCeUlkJiY5PT09Yi5ub2RlVHlwZSYmcCYmZC5yZWxhdGl2ZVtqWzFdLnR5cGVdKXtpZihiPShkLmZpbmQuSUQoay5tYXRjaGVzWzBdLnJlcGxhY2UoYmEsY2EpLGIpfHxbXSlbMF0sIWIpcmV0dXJuIGU7biYmKGI9Yi5wYXJlbnROb2RlKSxhPWEuc2xpY2Uoai5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1XLm5lZWRzQ29udGV4dC50ZXN0KGEpPzA6ai5sZW5ndGg7d2hpbGUoaS0tKXtpZihrPWpbaV0sZC5yZWxhdGl2ZVtsPWsudHlwZV0pYnJlYWs7aWYoKG09ZC5maW5kW2xdKSYmKGY9bShrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSksXy50ZXN0KGpbMF0udHlwZSkmJm9hKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYShqKSwhYSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSwhYnx8Xy50ZXN0KGEpJiZvYShiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGphKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGphKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYShLLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYX0oYSk7bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlU29ydD1uLnVuaXF1ZT10LnVuaXF1ZVNvcnQsbi50ZXh0PXQuZ2V0VGV4dCxuLmlzWE1MRG9jPXQuaXNYTUwsbi5jb250YWlucz10LmNvbnRhaW5zO3ZhciB1PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sdj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY30sdz1uLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHg9L148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyx5PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24geihhLGIsYyl7aWYobi5pc0Z1bmN0aW9uKGIpKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih5LnRlc3QoYikpcmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIsYSl9cmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBuLmluQXJyYXkoYSxiKT4tMSE9PWN9KX1uLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9uLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm4uZmluZC5tYXRjaGVzKGEsbi5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxuLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobi5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyluLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9uLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEheih0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdy50ZXN0KGEpP24oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgQSxCPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQz1uLmZuLmluaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYz1jfHxBLCJzdHJpbmciPT10eXBlb2YgYSl7aWYoZT0iPCI9PT1hLmNoYXJBdCgwKSYmIj4iPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJmEubGVuZ3RoPj0zP1tudWxsLGEsbnVsbF06Qi5leGVjKGEpLCFlfHwhZVsxXSYmYilyZXR1cm4hYnx8Yi5qcXVlcnk/KGJ8fGMpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpO2lmKGVbMV0pe2lmKGI9YiBpbnN0YW5jZW9mIG4/YlswXTpiLG4ubWVyZ2UodGhpcyxuLnBhcnNlSFRNTChlWzFdLGImJmIubm9kZVR5cGU/Yi5vd25lckRvY3VtZW50fHxiOmQsITApKSx4LnRlc3QoZVsxXSkmJm4uaXNQbGFpbk9iamVjdChiKSlmb3IoZSBpbiBiKW4uaXNGdW5jdGlvbih0aGlzW2VdKT90aGlzW2VdKGJbZV0pOnRoaXMuYXR0cihlLGJbZV0pO3JldHVybiB0aGlzfWlmKGY9ZC5nZXRFbGVtZW50QnlJZChlWzJdKSxmJiZmLnBhcmVudE5vZGUpe2lmKGYuaWQhPT1lWzJdKXJldHVybiBBLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWZ9cmV0dXJuIHRoaXMuY29udGV4dD1kLHRoaXMuc2VsZWN0b3I9YSx0aGlzfXJldHVybiBhLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6bi5pc0Z1bmN0aW9uKGEpPyJ1bmRlZmluZWQiIT10eXBlb2YgYy5yZWFkeT9jLnJlYWR5KGEpOmEobik6KHZvaWQgMCE9PWEuc2VsZWN0b3ImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCksbi5tYWtlQXJyYXkoYSx0aGlzKSl9O0MucHJvdG90eXBlPW4uZm4sQT1uKGQpO3ZhciBEPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLEU9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07bi5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW4oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihuLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dy50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bihhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbi5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP24udW5pcXVlU29ydChmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP24uaW5BcnJheSh0aGlzWzBdLG4oYSkpOm4uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWVTb3J0KG4ubWVyZ2UodGhpcy5nZXQoKSxuKGEsYikpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWE/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pO2Z1bmN0aW9uIEYoYSxiKXtkbyBhPWFbYl07d2hpbGUoYSYmMSE9PWEubm9kZVR5cGUpO3JldHVybiBhfW4uZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmMTEhPT1iLm5vZGVUeXBlP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHUoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEYoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiB1KGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1KGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gdigoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpuLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihFW2FdfHwoZT1uLnVuaXF1ZVNvcnQoZSkpLEQudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRz0vXFMrL2c7ZnVuY3Rpb24gSChhKXt2YXIgYj17fTtyZXR1cm4gbi5lYWNoKGEubWF0Y2goRyl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/SChhKTpuLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmPVtdLGc9W10saD0tMSxpPWZ1bmN0aW9uKCl7Zm9yKGU9YS5vbmNlLGQ9Yj0hMDtnLmxlbmd0aDtoPS0xKXtjPWcuc2hpZnQoKTt3aGlsZSgrK2g8Zi5sZW5ndGgpZltoXS5hcHBseShjWzBdLGNbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2UmJihoPWYubGVuZ3RoLGM9ITEpfWEubWVtb3J5fHwoYz0hMSksYj0hMSxlJiYoZj1jP1tdOiIiKX0saj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihjJiYhYiYmKGg9Zi5sZW5ndGgtMSxnLnB1c2goYykpLGZ1bmN0aW9uIGQoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXtuLmlzRnVuY3Rpb24oYyk/YS51bmlxdWUmJmouaGFzKGMpfHxmLnB1c2goYyk6YyYmYy5sZW5ndGgmJiJzdHJpbmciIT09bi50eXBlKGMpJiZkKGMpfSl9KGFyZ3VtZW50cyksYyYmIWImJmkoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxiKXt2YXIgYzt3aGlsZSgoYz1uLmluQXJyYXkoYixmLGMpKT4tMSlmLnNwbGljZShjLDEpLGg+PWMmJmgtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9uLmluQXJyYXkoYSxmKT4tMTpmLmxlbmd0aD4wfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBmJiYoZj1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBlPWc9W10sZj1jPSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWZ9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxjfHxqLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGV8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sZy5wdXNoKGMpLGJ8fGkoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBqLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBqfSxuLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuLkRlZmVycmVkKGZ1bmN0aW9uKGMpe24uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bi5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5wcm9ncmVzcyhjLm5vdGlmeSkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP24uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbi5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1lLmNhbGwoYXJndW1lbnRzKSxkPWMubGVuZ3RoLGY9MSE9PWR8fGEmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2Q6MCxnPTE9PT1mP2E6bi5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZS5jYWxsKGFyZ3VtZW50cyk6ZCxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGQ+MSlmb3IoaT1uZXcgQXJyYXkoZCksaj1uZXcgQXJyYXkoZCksaz1uZXcgQXJyYXkoZCk7ZD5iO2IrKyljW2JdJiZuLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5wcm9ncmVzcyhoKGIsaixpKSkuZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEk7bi5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbi5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxuLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9uLnJlYWR5V2FpdCsrOm4ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXsoYT09PSEwPy0tbi5yZWFkeVdhaXQ6bi5pc1JlYWR5KXx8KG4uaXNSZWFkeT0hMCxhIT09ITAmJi0tbi5yZWFkeVdhaXQ+MHx8KEkucmVzb2x2ZVdpdGgoZCxbbl0pLG4uZm4udHJpZ2dlckhhbmRsZXImJihuKGQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG4oZCkub2ZmKCJyZWFkeSIpKSkpfX0pO2Z1bmN0aW9uIEooKXtkLmFkZEV2ZW50TGlzdGVuZXI/KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixLKSk6KGQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5kZXRhY2hFdmVudCgib25sb2FkIixLKSl9ZnVuY3Rpb24gSygpeyhkLmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWEuZXZlbnQudHlwZXx8ImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZSkmJihKKCksbi5yZWFkeSgpKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIUkpaWYoST1uLkRlZmVycmVkKCksImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09ZC5yZWFkeVN0YXRlJiYhZC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpYS5zZXRUaW1lb3V0KG4ucmVhZHkpO2Vsc2UgaWYoZC5hZGRFdmVudExpc3RlbmVyKWQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixLKTtlbHNle2QuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5hdHRhY2hFdmVudCgib25sb2FkIixLKTt2YXIgYz0hMTt0cnl7Yz1udWxsPT1hLmZyYW1lRWxlbWVudCYmZC5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZSl7fWMmJmMuZG9TY3JvbGwmJiFmdW5jdGlvbiBmKCl7aWYoIW4uaXNSZWFkeSl7dHJ5e2MuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChiKXtyZXR1cm4gYS5zZXRUaW1lb3V0KGYsNTApfUooKSxuLnJlYWR5KCl9fSgpfXJldHVybiBJLnByb21pc2UoYil9LG4ucmVhZHkucHJvbWlzZSgpO3ZhciBMO2ZvcihMIGluIG4obCkpYnJlYWs7bC5vd25GaXJzdD0iMCI9PT1MLGwuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxuKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGU7Yz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGIuc3R5bGUuem9vbSYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsbC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChlKSl9KSxmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2wuZGVsZXRlRXhwYW5kbz0hMX1hPW51bGx9KCk7dmFyIE09ZnVuY3Rpb24oYSl7dmFyIGI9bi5ub0RhdGFbKGEubm9kZU5hbWUrIiAiKS50b0xvd2VyQ2FzZSgpXSxjPSthLm5vZGVUeXBlfHwxO3JldHVybiAxIT09YyYmOSE9PWM/ITE6IWJ8fGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9LE49L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gUChhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE8sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpOLnRlc3QoYyk/bi5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bi5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwOwp9cmV0dXJuIGN9ZnVuY3Rpb24gUShhKXt2YXIgYjtmb3IoYiBpbiBhKWlmKCgiZGF0YSIhPT1ifHwhbi5pc0VtcHR5T2JqZWN0KGFbYl0pKSYmInRvSlNPTiIhPT1iKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFIoYSxiLGQsZSl7aWYoTShhKSl7dmFyIGYsZyxoPW4uZXhwYW5kbyxpPWEubm9kZVR5cGUsaj1pP24uY2FjaGU6YSxrPWk/YVtoXTphW2hdJiZoO2lmKGsmJmpba10mJihlfHxqW2tdLmRhdGEpfHx2b2lkIDAhPT1kfHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIGt8fChrPWk/YVtoXT1jLnBvcCgpfHxuLmd1aWQrKzpoKSxqW2tdfHwoaltrXT1pP3t9Ont0b0pTT046bi5ub29wfSksIm9iamVjdCIhPXR5cGVvZiBiJiYiZnVuY3Rpb24iIT10eXBlb2YgYnx8KGU/altrXT1uLmV4dGVuZChqW2tdLGIpOmpba10uZGF0YT1uLmV4dGVuZChqW2tdLmRhdGEsYikpLGc9altrXSxlfHwoZy5kYXRhfHwoZy5kYXRhPXt9KSxnPWcuZGF0YSksdm9pZCAwIT09ZCYmKGdbbi5jYW1lbENhc2UoYildPWQpLCJzdHJpbmciPT10eXBlb2YgYj8oZj1nW2JdLG51bGw9PWYmJihmPWdbbi5jYW1lbENhc2UoYildKSk6Zj1nLGZ9fWZ1bmN0aW9uIFMoYSxiLGMpe2lmKE0oYSkpe3ZhciBkLGUsZj1hLm5vZGVUeXBlLGc9Zj9uLmNhY2hlOmEsaD1mP2Fbbi5leHBhbmRvXTpuLmV4cGFuZG87aWYoZ1toXSl7aWYoYiYmKGQ9Yz9nW2hdOmdbaF0uZGF0YSkpe24uaXNBcnJheShiKT9iPWIuY29uY2F0KG4ubWFwKGIsbi5jYW1lbENhc2UpKTpiIGluIGQ/Yj1bYl06KGI9bi5jYW1lbENhc2UoYiksYj1iIGluIGQ/W2JdOmIuc3BsaXQoIiAiKSksZT1iLmxlbmd0aDt3aGlsZShlLS0pZGVsZXRlIGRbYltlXV07aWYoYz8hUShkKTohbi5pc0VtcHR5T2JqZWN0KGQpKXJldHVybn0oY3x8KGRlbGV0ZSBnW2hdLmRhdGEsUShnW2hdKSkpJiYoZj9uLmNsZWFuRGF0YShbYV0sITApOmwuZGVsZXRlRXhwYW5kb3x8ZyE9Zy53aW5kb3c/ZGVsZXRlIGdbaF06Z1toXT12b2lkIDApfX19bi5leHRlbmQoe2NhY2hlOnt9LG5vRGF0YTp7ImFwcGxldCAiOiEwLCJlbWJlZCAiOiEwLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP24uY2FjaGVbYVtuLmV4cGFuZG9dXTphW24uZXhwYW5kb10sISFhJiYhUShhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIFIoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBSKGEsYixjLCEwKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gUyhhLGIsITApfX0pLG4uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9bi5kYXRhKGYpLDE9PT1mLm5vZGVUeXBlJiYhbi5fZGF0YShmLCJwYXJzZWRBdHRycyIpKSl7Yz1nLmxlbmd0aDt3aGlsZShjLS0pZ1tjXSYmKGQ9Z1tjXS5uYW1lLDA9PT1kLmluZGV4T2YoImRhdGEtIikmJihkPW4uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLFAoZixkLGVbZF0pKSk7bi5fZGF0YShmLCJwYXJzZWRBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRhdGEodGhpcyxhKX0pOmFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRhdGEodGhpcyxhLGIpfSk6Zj9QKGYsYSxuLmRhdGEoZixhKSk6dm9pZCAwfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1uLl9kYXRhKGEsYiksYyYmKCFkfHxuLmlzQXJyYXkoYyk/ZD1uLl9kYXRhKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gbi5fZGF0YShhLGMpfHxuLl9kYXRhKGEsYyx7ZW1wdHk6bi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7bi5fcmVtb3ZlRGF0YShhLGIrInF1ZXVlIiksbi5fcmVtb3ZlRGF0YShhLGMpfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPW4uX2RhdGEoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSksZnVuY3Rpb24oKXt2YXIgYTtsLnNocmlua1dyYXBCbG9ja3M9ZnVuY3Rpb24oKXtpZihudWxsIT1hKXJldHVybiBhO2E9ITE7dmFyIGIsYyxlO3JldHVybiBjPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxjJiZjLnN0eWxlPyhiPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiLGMuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoYiksInVuZGVmaW5lZCIhPXR5cGVvZiBiLnN0eWxlLnpvb20mJihiLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MXB4O3dpZHRoOjFweDt6b29tOjEiLGIuYXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUud2lkdGg9IjVweCIsYT0zIT09Yi5vZmZzZXRXaWR0aCksYy5yZW1vdmVDaGlsZChlKSxhKTp2b2lkIDB9fSgpO3ZhciBUPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1QrIikoW2EteiVdKikkIiwiaSIpLFY9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxXPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX07ZnVuY3Rpb24gWChhLGIsYyxkKXt2YXIgZSxmPTEsZz0yMCxoPWQ/ZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXIoKX06ZnVuY3Rpb24oKXtyZXR1cm4gbi5jc3MoYSxiLCIiKX0saT1oKCksaj1jJiZjWzNdfHwobi5jc3NOdW1iZXJbYl0/IiI6InB4Iiksaz0obi5jc3NOdW1iZXJbYl18fCJweCIhPT1qJiYraSkmJlUuZXhlYyhuLmNzcyhhLGIpKTtpZihrJiZrWzNdIT09ail7aj1qfHxrWzNdLGM9Y3x8W10saz0raXx8MTtkbyBmPWZ8fCIuNSIsay89ZixuLnN0eWxlKGEsYixrK2opO3doaWxlKGYhPT0oZj1oKCkvaSkmJjEhPT1mJiYtLWcpfXJldHVybiBjJiYoaz0ra3x8K2l8fDAsZT1jWzFdP2srKGNbMV0rMSkqY1syXTorY1syXSxkJiYoZC51bml0PWosZC5zdGFydD1rLGQuZW5kPWUpKSxlfXZhciBZPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcpe3ZhciBoPTAsaT1hLmxlbmd0aCxqPW51bGw9PWM7aWYoIm9iamVjdCI9PT1uLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYylZKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEpLGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9LFo9L14oPzpjaGVja2JveHxyYWRpbykkL2ksJD0vPChbXHc6LV0rKS8sXz0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksYWE9L15ccysvLGJhPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZGlhbG9nfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1haW58bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHBpY3R1cmV8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRlbXBsYXRlfHRpbWV8dmlkZW8iO2Z1bmN0aW9uIGNhKGEpe3ZhciBiPWJhLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfSFmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1kLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxjPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTthLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixsLmxlYWRpbmdXaGl0ZXNwYWNlPTM9PT1hLmZpcnN0Q2hpbGQubm9kZVR5cGUsbC50Ym9keT0hYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsbC5odG1sU2VyaWFsaXplPSEhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxsLmh0bWw1Q2xvbmU9Ijw6bmF2PjwvOm5hdj4iIT09ZC5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCxjLnR5cGU9ImNoZWNrYm94IixjLmNoZWNrZWQ9ITAsYi5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoZWNrZWQ9Yy5jaGVja2VkLGEuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixsLm5vQ2xvbmVDaGVja2VkPSEhYS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWUsYi5hcHBlbmRDaGlsZChhKSxjPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxjLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYy5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksYy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksYS5hcHBlbmRDaGlsZChjKSxsLmNoZWNrQ2xvbmU9YS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsbC5ub0Nsb25lRXZlbnQ9ISFhLmFkZEV2ZW50TGlzdGVuZXIsYVtuLmV4cGFuZG9dPTEsbC5hdHRyaWJ1dGVzPSFhLmdldEF0dHJpYnV0ZShuLmV4cGFuZG8pfSgpO3ZhciBkYT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6bC5odG1sU2VyaWFsaXplP1swLCIiLCIiXTpbMSwiWDxkaXY+IiwiPC9kaXY+Il19O2RhLm9wdGdyb3VwPWRhLm9wdGlvbixkYS50Ym9keT1kYS50Zm9vdD1kYS5jb2xncm91cD1kYS5jYXB0aW9uPWRhLnRoZWFkLGRhLnRoPWRhLnRkO2Z1bmN0aW9uIGVhKGEsYil7dmFyIGMsZCxlPTAsZj0idW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWU/YS5nZXRFbGVtZW50c0J5VGFnTmFtZShifHwiKiIpOiJ1bmRlZmluZWQiIT10eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOnZvaWQgMDtpZighZilmb3IoZj1bXSxjPWEuY2hpbGROb2Rlc3x8YTtudWxsIT0oZD1jW2VdKTtlKyspIWJ8fG4ubm9kZU5hbWUoZCxiKT9mLnB1c2goZCk6bi5tZXJnZShmLGVhKGQsYikpO3JldHVybiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sZik6Zn1mdW5jdGlvbiBmYShhLGIpe2Zvcih2YXIgYyxkPTA7bnVsbCE9KGM9YVtkXSk7ZCsrKW4uX2RhdGEoYywiZ2xvYmFsRXZhbCIsIWJ8fG4uX2RhdGEoYltkXSwiZ2xvYmFsRXZhbCIpKX12YXIgZ2E9Lzx8JiM/XHcrOy8saGE9Lzx0Ym9keS9pO2Z1bmN0aW9uIGlhKGEpe1oudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIGphKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaCxpLGosayxtLG89YS5sZW5ndGgscD1jYShiKSxxPVtdLHI9MDtvPnI7cisrKWlmKGc9YVtyXSxnfHwwPT09ZylpZigib2JqZWN0Ij09PW4udHlwZShnKSluLm1lcmdlKHEsZy5ub2RlVHlwZT9bZ106Zyk7ZWxzZSBpZihnYS50ZXN0KGcpKXtpPWl8fHAuYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KCJkaXYiKSksaj0oJC5leGVjKGcpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLG09ZGFbal18fGRhLl9kZWZhdWx0LGkuaW5uZXJIVE1MPW1bMV0rbi5odG1sUHJlZmlsdGVyKGcpK21bMl0sZj1tWzBdO3doaWxlKGYtLSlpPWkubGFzdENoaWxkO2lmKCFsLmxlYWRpbmdXaGl0ZXNwYWNlJiZhYS50ZXN0KGcpJiZxLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShhYS5leGVjKGcpWzBdKSksIWwudGJvZHkpe2c9InRhYmxlIiE9PWp8fGhhLnRlc3QoZyk/Ijx0YWJsZT4iIT09bVsxXXx8aGEudGVzdChnKT8wOmk6aS5maXJzdENoaWxkLGY9ZyYmZy5jaGlsZE5vZGVzLmxlbmd0aDt3aGlsZShmLS0pbi5ub2RlTmFtZShrPWcuY2hpbGROb2Rlc1tmXSwidGJvZHkiKSYmIWsuY2hpbGROb2Rlcy5sZW5ndGgmJmcucmVtb3ZlQ2hpbGQoayl9bi5tZXJnZShxLGkuY2hpbGROb2RlcyksaS50ZXh0Q29udGVudD0iIjt3aGlsZShpLmZpcnN0Q2hpbGQpaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpO2k9cC5sYXN0Q2hpbGR9ZWxzZSBxLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShnKSk7aSYmcC5yZW1vdmVDaGlsZChpKSxsLmFwcGVuZENoZWNrZWR8fG4uZ3JlcChlYShxLCJpbnB1dCIpLGlhKSxyPTA7d2hpbGUoZz1xW3IrK10paWYoZCYmbi5pbkFycmF5KGcsZCk+LTEpZSYmZS5wdXNoKGcpO2Vsc2UgaWYoaD1uLmNvbnRhaW5zKGcub3duZXJEb2N1bWVudCxnKSxpPWVhKHAuYXBwZW5kQ2hpbGQoZyksInNjcmlwdCIpLGgmJmZhKGkpLGMpe2Y9MDt3aGlsZShnPWlbZisrXSlfLnRlc3QoZy50eXBlfHwiIikmJmMucHVzaChnKX1yZXR1cm4gaT1udWxsLHB9IWZ1bmN0aW9uKCl7dmFyIGIsYyxlPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGIgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSljPSJvbiIrYiwobFtiXT1jIGluIGEpfHwoZS5zZXRBdHRyaWJ1dGUoYywidCIpLGxbYl09ZS5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMSk7ZT1udWxsfSgpO3ZhciBrYT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksbGE9L15rZXkvLG1hPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxuYT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sb2E9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHBhKCl7cmV0dXJuITB9ZnVuY3Rpb24gcWEoKXtyZXR1cm4hMX1mdW5jdGlvbiByYSgpe3RyeXtyZXR1cm4gZC5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319ZnVuY3Rpb24gc2EoYSxiLGMsZCxlLGYpe3ZhciBnLGg7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXsic3RyaW5nIiE9dHlwZW9mIGMmJihkPWR8fGMsYz12b2lkIDApO2ZvcihoIGluIGIpc2EoYSxoLGMsZCxiW2hdLGYpO3JldHVybiBhfWlmKG51bGw9PWQmJm51bGw9PWU/KGU9YyxkPWM9dm9pZCAwKTpudWxsPT1lJiYoInN0cmluZyI9PXR5cGVvZiBjPyhlPWQsZD12b2lkIDApOihlPWQsZD1jLGM9dm9pZCAwKSksZT09PSExKWU9cWE7ZWxzZSBpZighZSlyZXR1cm4gYTtyZXR1cm4gMT09PWYmJihnPWUsZT1mdW5jdGlvbihhKXtyZXR1cm4gbigpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1uLmd1aWQrKykpLGEuZWFjaChmdW5jdGlvbigpe24uZXZlbnQuYWRkKHRoaXMsYixlLGQsYyl9KX1uLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPW4uX2RhdGEoYSk7aWYocil7Yy5oYW5kbGVyJiYoaT1jLGM9aS5oYW5kbGVyLGU9aS5zZWxlY3RvciksYy5ndWlkfHwoYy5ndWlkPW4uZ3VpZCsrKSwoZz1yLmV2ZW50cyl8fChnPXIuZXZlbnRzPXt9KSwoaz1yLmhhbmRsZSl8fChrPXIuaGFuZGxlPWZ1bmN0aW9uKGEpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygbnx8YSYmbi5ldmVudC50cmlnZ2VyZWQ9PT1hLnR5cGU/dm9pZCAwOm4uZXZlbnQuZGlzcGF0Y2guYXBwbHkoay5lbGVtLGFyZ3VtZW50cyl9LGsuZWxlbT1hKSxiPShifHwiIikubWF0Y2goRyl8fFsiIl0saD1iLmxlbmd0aDt3aGlsZShoLS0pZj1vYS5leGVjKGJbaF0pfHxbXSxvPXE9ZlsxXSxwPShmWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGo9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2ouZGVsZWdhdGVUeXBlOmouYmluZFR5cGUpfHxvLGo9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxsPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGkpLChtPWdbb10pfHwobT1nW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGouc2V0dXAmJmouc2V0dXAuY2FsbChhLGQscCxrKSE9PSExfHwoYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihvLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitvLGspKSksai5hZGQmJihqLmFkZC5jYWxsKGEsbCksbC5oYW5kbGVyLmd1aWR8fChsLmhhbmRsZXIuZ3VpZD1jLmd1aWQpKSxlP20uc3BsaWNlKG0uZGVsZWdhdGVDb3VudCsrLDAsbCk6bS5wdXNoKGwpLG4uZXZlbnQuZ2xvYmFsW29dPSEwKTthPW51bGx9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG8scCxxLHI9bi5oYXNEYXRhKGEpJiZuLl9kYXRhKGEpO2lmKHImJihrPXIuZXZlbnRzKSl7Yj0oYnx8IiIpLm1hdGNoKEcpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWlmKGg9b2EuZXhlYyhiW2pdKXx8W10sbz1xPWhbMV0scD0oaFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8pe2w9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLG09a1tvXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitwLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGk9Zj1tLmxlbmd0aDt3aGlsZShmLS0pZz1tW2ZdLCFlJiZxIT09Zy5vcmlnVHlwZXx8YyYmYy5ndWlkIT09Zy5ndWlkfHxoJiYhaC50ZXN0KGcubmFtZXNwYWNlKXx8ZCYmZCE9PWcuc2VsZWN0b3ImJigiKioiIT09ZHx8IWcuc2VsZWN0b3IpfHwobS5zcGxpY2UoZiwxKSxnLnNlbGVjdG9yJiZtLmRlbGVnYXRlQ291bnQtLSxsLnJlbW92ZSYmbC5yZW1vdmUuY2FsbChhLGcpKTtpJiYhbS5sZW5ndGgmJihsLnRlYXJkb3duJiZsLnRlYXJkb3duLmNhbGwoYSxwLHIuaGFuZGxlKSE9PSExfHxuLnJlbW92ZUV2ZW50KGEsbyxyLmhhbmRsZSksZGVsZXRlIGtbb10pfWVsc2UgZm9yKG8gaW4gayluLmV2ZW50LnJlbW92ZShhLG8rYltqXSxjLGQsITApO24uaXNFbXB0eU9iamVjdChrKSYmKGRlbGV0ZSByLmhhbmRsZSxuLl9yZW1vdmVEYXRhKGEsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24oYixjLGUsZil7dmFyIGcsaCxpLGosbCxtLG8scD1bZXx8ZF0scT1rLmNhbGwoYiwidHlwZSIpP2IudHlwZTpiLHI9ay5jYWxsKGIsIm5hbWVzcGFjZSIpP2IubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYoaT1tPWU9ZXx8ZCwzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJiFuYS50ZXN0KHErbi5ldmVudC50cmlnZ2VyZWQpJiYocS5pbmRleE9mKCIuIik+LTEmJihyPXEuc3BsaXQoIi4iKSxxPXIuc2hpZnQoKSxyLnNvcnQoKSksaD1xLmluZGV4T2YoIjoiKTwwJiYib24iK3EsYj1iW24uZXhwYW5kb10/YjpuZXcgbi5FdmVudChxLCJvYmplY3QiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9Zj8yOjMsYi5uYW1lc3BhY2U9ci5qb2luKCIuIiksYi5ybmFtZXNwYWNlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1lKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxsPW4uZXZlbnQuc3BlY2lhbFtxXXx8e30sZnx8IWwudHJpZ2dlcnx8bC50cmlnZ2VyLmFwcGx5KGUsYykhPT0hMSkpe2lmKCFmJiYhbC5ub0J1YmJsZSYmIW4uaXNXaW5kb3coZSkpe2ZvcihqPWwuZGVsZWdhdGVUeXBlfHxxLG5hLnRlc3QoaitxKXx8KGk9aS5wYXJlbnROb2RlKTtpO2k9aS5wYXJlbnROb2RlKXAucHVzaChpKSxtPWk7bT09PShlLm93bmVyRG9jdW1lbnR8fGQpJiZwLnB1c2gobS5kZWZhdWx0Vmlld3x8bS5wYXJlbnRXaW5kb3d8fGEpfW89MDt3aGlsZSgoaT1wW28rK10pJiYhYi5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWIudHlwZT1vPjE/ajpsLmJpbmRUeXBlfHxxLGc9KG4uX2RhdGEoaSwiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZuLl9kYXRhKGksImhhbmRsZSIpLGcmJmcuYXBwbHkoaSxjKSxnPWgmJmlbaF0sZyYmZy5hcHBseSYmTShpKSYmKGIucmVzdWx0PWcuYXBwbHkoaSxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO2lmKGIudHlwZT1xLCFmJiYhYi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKCFsLl9kZWZhdWx0fHxsLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYyk9PT0hMSkmJk0oZSkmJmgmJmVbcV0mJiFuLmlzV2luZG93KGUpKXttPWVbaF0sbSYmKGVbaF09bnVsbCksbi5ldmVudC50cmlnZ2VyZWQ9cTt0cnl7ZVtxXSgpfWNhdGNoKHMpe31uLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsbSYmKGVbaF09bSl9cmV0dXJuIGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50LmZpeChhKTt2YXIgYixjLGQsZixnLGg9W10saT1lLmNhbGwoYXJndW1lbnRzKSxqPShuLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1uLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1uLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGM9MDt3aGlsZSgoZz1mLmhhbmRsZXJzW2MrK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFjZS50ZXN0KGcubmFtZXNwYWNlKXx8KGEuaGFuZGxlT2JqPWcsYS5kYXRhPWcuZGF0YSxkPSgobi5ldmVudC5zcGVjaWFsW2cub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxnLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1kJiYoYS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoImNsaWNrIiE9PWEudHlwZXx8aXNOYU4oYS5idXR0b24pfHxhLmJ1dHRvbjwxKSlmb3IoO2khPXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpKXtmb3IoZD1bXSxjPTA7aD5jO2MrKylmPWJbY10sZT1mLnNlbGVjdG9yKyIgIix2b2lkIDA9PT1kW2VdJiYoZFtlXT1mLm5lZWRzQ29udGV4dD9uKGUsdGhpcykuaW5kZXgoaSk+LTE6bi5maW5kKGUsdGhpcyxudWxsLFtpXSkubGVuZ3RoKSxkW2VdJiZkLnB1c2goZik7ZC5sZW5ndGgmJmcucHVzaCh7ZWxlbTppLGhhbmRsZXJzOmR9KX1yZXR1cm4gaDxiLmxlbmd0aCYmZy5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6Yi5zbGljZShoKX0pLGd9LGZpeDpmdW5jdGlvbihhKXtpZihhW24uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxlLGY9YS50eXBlLGc9YSxoPXRoaXMuZml4SG9va3NbZl07aHx8KHRoaXMuZml4SG9va3NbZl09aD1tYS50ZXN0KGYpP3RoaXMubW91c2VIb29rczpsYS50ZXN0KGYpP3RoaXMua2V5SG9va3M6e30pLGU9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzLGE9bmV3IG4uRXZlbnQoZyksYj1lLmxlbmd0aDt3aGlsZShiLS0pYz1lW2JdLGFbY109Z1tjXTtyZXR1cm4gYS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGQpLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT0hIWEubWV0YUtleSxoLmZpbHRlcj9oLmZpbHRlcihhLGcpOmF9LHByb3BzOiJhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBkZXRhaWwgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGc9Yi5idXR0b24saD1iLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGQsZj1lLmRvY3VtZW50RWxlbWVudCxjPWUuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxjJiZjLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGMmJmMuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxjJiZjLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxjJiZjLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmgmJihhLnJlbGF0ZWRUYXJnZXQ9aD09PWEudGFyZ2V0P2IudG9FbGVtZW50OmgpLGEud2hpY2h8fHZvaWQgMD09PWd8fChhLndoaWNoPTEmZz8xOjImZz8zOjQmZz8yOjApLGF9fSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09cmEoKSYmdGhpcy5mb2N1cyl0cnl7cmV0dXJuIHRoaXMuZm9jdXMoKSwhMX1jYXRjaChhKXt9fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1yYSgpJiZ0aGlzLmJsdXI/KHRoaXMuYmx1cigpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiBuLm5vZGVOYW1lKHRoaXMsImlucHV0IikmJiJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2s/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbi5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW4uZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMH0pO24uZXZlbnQudHJpZ2dlcihkLG51bGwsYiksZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbi5yZW1vdmVFdmVudD1kLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYyl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKCJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXSYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0sbi5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbi5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/cGE6cWEpOnRoaXMudHlwZT1hLGImJm4uZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fG4ubm93KCksdm9pZCh0aGlzW24uZXhwYW5kb109ITApKTpuZXcgbi5FdmVudChhLGIpfSxuLkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bi5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6cWEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6cWEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cWEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cGEsYSYmKGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1wYSxhJiYhdGhpcy5pc1NpbXVsYXRlZCYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9cGEsYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybiBlJiYoZT09PWR8fG4uY29udGFpbnMoZCxlKSl8fChhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLGwuc3VibWl0fHwobi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2RlTmFtZSh0aGlzLCJmb3JtIik/ITE6dm9pZCBuLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9bi5ub2RlTmFtZShiLCJpbnB1dCIpfHxuLm5vZGVOYW1lKGIsImJ1dHRvbiIpP24ucHJvcChiLCJmb3JtIik6dm9pZCAwO2MmJiFuLl9kYXRhKGMsInN1Ym1pdCIpJiYobi5ldmVudC5hZGQoYywic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdEJ1YmJsZT0hMH0pLG4uX2RhdGEoYywic3VibWl0IiwhMCkpfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihhKXthLl9zdWJtaXRCdWJibGUmJihkZWxldGUgYS5fc3VibWl0QnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWEuaXNUcmlnZ2VyJiZuLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxhKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbi5ldmVudC5yZW1vdmUodGhpcywiLl9zdWJtaXQiKX19KSxsLmNoYW5nZXx8KG4uZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIGthLnRlc3QodGhpcy5ub2RlTmFtZSk/KCJjaGVja2JveCIhPT10aGlzLnR5cGUmJiJyYWRpbyIhPT10aGlzLnR5cGV8fChuLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXsiY2hlY2tlZCI9PT1hLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdENoYW5nZWQ9ITApfSksbi5ldmVudC5hZGQodGhpcywiY2xpY2suX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5fanVzdENoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RDaGFuZ2VkPSExKSxuLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSl9KSksITEpOnZvaWQgbi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7a2EudGVzdChiLm5vZGVOYW1lKSYmIW4uX2RhdGEoYiwiY2hhbmdlIikmJihuLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7IXRoaXMucGFyZW50Tm9kZXx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fG4uZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEpfSksbi5fZGF0YShiLCJjaGFuZ2UiLCEwKSl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O3JldHVybiB0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1iLnR5cGUmJiJjaGVja2JveCIhPT1iLnR5cGU/YS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBuLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFrYS50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGwuZm9jdXNpbnx8bi5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe24uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxuLmV2ZW50LmZpeChhKSl9O24uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1uLl9kYXRhKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksbi5fZGF0YShkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPW4uX2RhdGEoZCxiKS0xO2U/bi5fZGF0YShkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLG4uX3JlbW92ZURhdGEoZCxiKSl9fX0pLG4uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gc2EodGhpcyxhLGIsYyxkKX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBzYSh0aGlzLGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGIhPT0hMSYmImZ1bmN0aW9uIiE9dHlwZW9mIGJ8fChjPWIsYj12b2lkIDApLGM9PT0hMSYmKGM9cWEpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIHRhPS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csdWE9bmV3IFJlZ0V4cCgiPCg/OiIrYmErIilbXFxzLz5dIiwiaSIpLHZhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzotXSspW14+XSopXC8+L2dpLHdhPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLHhhPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHlhPS9edHJ1ZVwvKC4qKS8semE9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLEFhPWNhKGQpLEJhPUFhLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2Z1bmN0aW9uIENhKGEsYil7cmV0dXJuIG4ubm9kZU5hbWUoYSwidGFibGUiKSYmbi5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBEYShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09bi5maW5kLmF0dHIoYSwidHlwZSIpKSsiLyIrYS50eXBlLGF9ZnVuY3Rpb24gRWEoYSl7dmFyIGI9eWEuZXhlYyhhLnR5cGUpO3JldHVybiBiP2EudHlwZT1iWzFdOmEucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksYX1mdW5jdGlvbiBGYShhLGIpe2lmKDE9PT1iLm5vZGVUeXBlJiZuLmhhc0RhdGEoYSkpe3ZhciBjLGQsZSxmPW4uX2RhdGEoYSksZz1uLl9kYXRhKGIsZiksaD1mLmV2ZW50cztpZihoKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGMgaW4gaClmb3IoZD0wLGU9aFtjXS5sZW5ndGg7ZT5kO2QrKyluLmV2ZW50LmFkZChiLGMsaFtjXVtkXSl9Zy5kYXRhJiYoZy5kYXRhPW4uZXh0ZW5kKHt9LGcuZGF0YSkpfX1mdW5jdGlvbiBHYShhLGIpe3ZhciBjLGQsZTtpZigxPT09Yi5ub2RlVHlwZSl7aWYoYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIWwubm9DbG9uZUV2ZW50JiZiW24uZXhwYW5kb10pe2U9bi5fZGF0YShiKTtmb3IoZCBpbiBlLmV2ZW50cyluLnJlbW92ZUV2ZW50KGIsZCxlLmhhbmRsZSk7Yi5yZW1vdmVBdHRyaWJ1dGUobi5leHBhbmRvKX0ic2NyaXB0Ij09PWMmJmIudGV4dCE9PWEudGV4dD8oRGEoYikudGV4dD1hLnRleHQsRWEoYikpOiJvYmplY3QiPT09Yz8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLGwuaHRtbDVDbG9uZSYmYS5pbm5lckhUTUwmJiFuLnRyaW0oYi5pbm5lckhUTUwpJiYoYi5pbm5lckhUTUw9YS5pbm5lckhUTUwpKToiaW5wdXQiPT09YyYmWi50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOiJvcHRpb24iPT09Yz9iLmRlZmF1bHRTZWxlY3RlZD1iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOiJpbnB1dCIhPT1jJiYidGV4dGFyZWEiIT09Y3x8KGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX19ZnVuY3Rpb24gSGEoYSxiLGMsZCl7Yj1mLmFwcGx5KFtdLGIpO3ZhciBlLGcsaCxpLGosayxtPTAsbz1hLmxlbmd0aCxwPW8tMSxxPWJbMF0scj1uLmlzRnVuY3Rpb24ocSk7aWYocnx8bz4xJiYic3RyaW5nIj09dHlwZW9mIHEmJiFsLmNoZWNrQ2xvbmUmJnhhLnRlc3QocSkpcmV0dXJuIGEuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1hLmVxKGUpO3ImJihiWzBdPXEuY2FsbCh0aGlzLGUsZi5odG1sKCkpKSxIYShmLGIsYyxkKX0pO2lmKG8mJihrPWphKGIsYVswXS5vd25lckRvY3VtZW50LCExLGEsZCksZT1rLmZpcnN0Q2hpbGQsMT09PWsuY2hpbGROb2Rlcy5sZW5ndGgmJihrPWUpLGV8fGQpKXtmb3IoaT1uLm1hcChlYShrLCJzY3JpcHQiKSxEYSksaD1pLmxlbmd0aDtvPm07bSsrKWc9ayxtIT09cCYmKGc9bi5jbG9uZShnLCEwLCEwKSxoJiZuLm1lcmdlKGksZWEoZywic2NyaXB0IikpKSxjLmNhbGwoYVttXSxnLG0pO2lmKGgpZm9yKGo9aVtpLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LG4ubWFwKGksRWEpLG09MDtoPm07bSsrKWc9aVttXSxfLnRlc3QoZy50eXBlfHwiIikmJiFuLl9kYXRhKGcsImdsb2JhbEV2YWwiKSYmbi5jb250YWlucyhqLGcpJiYoZy5zcmM/bi5fZXZhbFVybCYmbi5fZXZhbFVybChnLnNyYyk6bi5nbG9iYWxFdmFsKChnLnRleHR8fGcudGV4dENvbnRlbnR8fGcuaW5uZXJIVE1MfHwiIikucmVwbGFjZSh6YSwiIikpKTtrPWU9bnVsbH1yZXR1cm4gYX1mdW5jdGlvbiBJYShhLGIsYyl7Zm9yKHZhciBkLGU9Yj9uLmZpbHRlcihiLGEpOmEsZj0wO251bGwhPShkPWVbZl0pO2YrKyljfHwxIT09ZC5ub2RlVHlwZXx8bi5jbGVhbkRhdGEoZWEoZCkpLGQucGFyZW50Tm9kZSYmKGMmJm4uY29udGFpbnMoZC5vd25lckRvY3VtZW50LGQpJiZmYShlYShkLCJzY3JpcHQiKSksZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpKTtyZXR1cm4gYX1uLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHZhLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaT1uLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZihsLmh0bWw1Q2xvbmV8fG4uaXNYTUxEb2MoYSl8fCF1YS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zj1hLmNsb25lTm9kZSghMCk6KEJhLmlubmVySFRNTD1hLm91dGVySFRNTCxCYS5yZW1vdmVDaGlsZChmPUJhLmZpcnN0Q2hpbGQpKSwhKGwubm9DbG9uZUV2ZW50JiZsLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZD1lYShmKSxoPWVhKGEpLGc9MDtudWxsIT0oZT1oW2ddKTsrK2cpZFtnXSYmR2EoZSxkW2ddKTtpZihiKWlmKGMpZm9yKGg9aHx8ZWEoYSksZD1kfHxlYShmKSxnPTA7bnVsbCE9KGU9aFtnXSk7ZysrKUZhKGUsZFtnXSk7ZWxzZSBGYShhLGYpO3JldHVybiBkPWVhKGYsInNjcmlwdCIpLGQubGVuZ3RoPjAmJmZhKGQsIWkmJmVhKGEsInNjcmlwdCIpKSxkPWg9ZT1udWxsLGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgZCxlLGYsZyxoPTAsaT1uLmV4cGFuZG8saj1uLmNhY2hlLGs9bC5hdHRyaWJ1dGVzLG09bi5ldmVudC5zcGVjaWFsO251bGwhPShkPWFbaF0pO2grKylpZigoYnx8TShkKSkmJihmPWRbaV0sZz1mJiZqW2ZdKSl7aWYoZy5ldmVudHMpZm9yKGUgaW4gZy5ldmVudHMpbVtlXT9uLmV2ZW50LnJlbW92ZShkLGUpOm4ucmVtb3ZlRXZlbnQoZCxlLGcuaGFuZGxlKTtqW2ZdJiYoZGVsZXRlIGpbZl0sa3x8InVuZGVmaW5lZCI9PXR5cGVvZiBkLnJlbW92ZUF0dHJpYnV0ZT9kW2ldPXZvaWQgMDpkLnJlbW92ZUF0dHJpYnV0ZShpKSxjLnB1c2goZikpfX19KSxuLmZuLmV4dGVuZCh7ZG9tTWFuaXA6SGEsZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiBJYSh0aGlzLGEsITApfSxyZW1vdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIElhKHRoaXMsYSl9LHRleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9uLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxkKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEhhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1DYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPUNhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKyl7MT09PWEubm9kZVR5cGUmJm4uY2xlYW5EYXRhKGVhKGEsITEpKTt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO2Eub3B0aW9ucyYmbi5ub2RlTmFtZShhLCJzZWxlY3QiKSYmKGEub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE9PT1iLm5vZGVUeXBlP2IuaW5uZXJIVE1MLnJlcGxhY2UodGEsIiIpOnZvaWQgMDtpZigic3RyaW5nIj09dHlwZW9mIGEmJiF3YS50ZXN0KGEpJiYobC5odG1sU2VyaWFsaXplfHwhdWEudGVzdChhKSkmJihsLmxlYWRpbmdXaGl0ZXNwYWNlfHwhYWEudGVzdChhKSkmJiFkYVsoJC5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1uLmh0bWxQcmVmaWx0ZXIoYSk7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEoZWEoYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm4gSGEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5wYXJlbnROb2RlO24uaW5BcnJheSh0aGlzLGEpPDAmJihuLmNsZWFuRGF0YShlYSh0aGlzKSksYyYmYy5yZXBsYWNlQ2hpbGQoYix0aGlzKSl9LGEpfX0pLG4uZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhKXtmb3IodmFyIGMsZD0wLGU9W10sZj1uKGEpLGg9Zi5sZW5ndGgtMTtoPj1kO2QrKyljPWQ9PT1oP3RoaXM6dGhpcy5jbG9uZSghMCksbihmW2RdKVtiXShjKSxnLmFwcGx5KGUsYy5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBKYSxLYT17SFRNTDoiYmxvY2siLEJPRFk6ImJsb2NrIn07ZnVuY3Rpb24gTGEoYSxiKXt2YXIgYz1uKGIuY3JlYXRlRWxlbWVudChhKSkuYXBwZW5kVG8oYi5ib2R5KSxkPW4uY3NzKGNbMF0sImRpc3BsYXkiKTtyZXR1cm4gYy5kZXRhY2goKSxkfWZ1bmN0aW9uIE1hKGEpe3ZhciBiPWQsYz1LYVthXTtyZXR1cm4gY3x8KGM9TGEoYSxiKSwibm9uZSIhPT1jJiZjfHwoSmE9KEphfHxuKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikpLmFwcGVuZFRvKGIuZG9jdW1lbnRFbGVtZW50KSxiPShKYVswXS5jb250ZW50V2luZG93fHxKYVswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGIud3JpdGUoKSxiLmNsb3NlKCksYz1MYShhLGIpLEphLmRldGFjaCgpKSxLYVthXT1jKSxjfXZhciBOYT0vXm1hcmdpbi8sT2E9bmV3IFJlZ0V4cCgiXigiK1QrIikoPyFweClbYS16JV0rJCIsImkiKSxQYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX0sUWE9ZC5kb2N1bWVudEVsZW1lbnQ7IWZ1bmN0aW9uKCl7dmFyIGIsYyxlLGYsZyxoLGk9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxqPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoai5zdHlsZSl7ai5zdHlsZS5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiLGwub3BhY2l0eT0iMC41Ij09PWouc3R5bGUub3BhY2l0eSxsLmNzc0Zsb2F0PSEhai5zdHlsZS5jc3NGbG9hdCxqLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsai5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGwuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1qLnN0eWxlLmJhY2tncm91bmRDbGlwLGk9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjhweDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7cGFkZGluZzowO21hcmdpbi10b3A6MXB4O3Bvc2l0aW9uOmFic29sdXRlIixqLmlubmVySFRNTD0iIixpLmFwcGVuZENoaWxkKGopLGwuYm94U2l6aW5nPSIiPT09ai5zdHlsZS5ib3hTaXppbmd8fCIiPT09ai5zdHlsZS5Nb3pCb3hTaXppbmd8fCIiPT09ai5zdHlsZS5XZWJraXRCb3hTaXppbmcsbi5leHRlbmQobCx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxmfSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksZX0scGl4ZWxNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksY30scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksYn0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksZ30scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWImJmsoKSxofX0pO2Z1bmN0aW9uIGsoKXt2YXIgayxsLG09ZC5kb2N1bWVudEVsZW1lbnQ7bS5hcHBlbmRDaGlsZChpKSxqLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJSIsYj1lPWg9ITEsYz1nPSEwLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGw9YS5nZXRDb21wdXRlZFN0eWxlKGopLGI9IjElIiE9PShsfHx7fSkudG9wLGg9IjJweCI9PT0obHx8e30pLm1hcmdpbkxlZnQsZT0iNHB4Ij09PShsfHx7d2lkdGg6IjRweCJ9KS53aWR0aCxqLnN0eWxlLm1hcmdpblJpZ2h0PSI1MCUiLGM9IjRweCI9PT0obHx8e21hcmdpblJpZ2h0OiI0cHgifSkubWFyZ2luUmlnaHQsaz1qLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpLGsuc3R5bGUuY3NzVGV4dD1qLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsay5zdHlsZS5tYXJnaW5SaWdodD1rLnN0eWxlLndpZHRoPSIwIixqLnN0eWxlLndpZHRoPSIxcHgiLGc9IXBhcnNlRmxvYXQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShrKXx8e30pLm1hcmdpblJpZ2h0KSxqLnJlbW92ZUNoaWxkKGspKSxqLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGY9MD09PWouZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgsZiYmKGouc3R5bGUuZGlzcGxheT0iIixqLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsai5jaGlsZE5vZGVzWzBdLnN0eWxlLmJvcmRlckNvbGxhcHNlPSJzZXBhcmF0ZSIsaz1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLGtbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSIsZj0wPT09a1swXS5vZmZzZXRIZWlnaHQsZiYmKGtbMF0uc3R5bGUuZGlzcGxheT0iIixrWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGY9MD09PWtbMF0ub2Zmc2V0SGVpZ2h0KSksbS5yZW1vdmVDaGlsZChpKX19fSgpO3ZhciBSYSxTYSxUYT0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC87YS5nZXRDb21wdXRlZFN0eWxlPyhSYT1mdW5jdGlvbihiKXt2YXIgYz1iLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIGMmJmMub3BlbmVyfHwoYz1hKSxjLmdldENvbXB1dGVkU3R5bGUoYil9LFNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmEoYSksZz1jP2MuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXTp2b2lkIDAsIiIhPT1nJiZ2b2lkIDAhPT1nfHxuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bi5zdHlsZShhLGIpKSxjJiYhbC5waXhlbE1hcmdpblJpZ2h0KCkmJk9hLnRlc3QoZykmJk5hLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9Ziksdm9pZCAwPT09Zz9nOmcrIiJ9KTpRYS5jdXJyZW50U3R5bGUmJihSYT1mdW5jdGlvbihhKXtyZXR1cm4gYS5jdXJyZW50U3R5bGV9LFNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8UmEoYSksZz1jP2NbYl06dm9pZCAwLG51bGw9PWcmJmgmJmhbYl0mJihnPWhbYl0pLE9hLnRlc3QoZykmJiFUYS50ZXN0KGIpJiYoZD1oLmxlZnQsZT1hLnJ1bnRpbWVTdHlsZSxmPWUmJmUubGVmdCxmJiYoZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGgubGVmdD0iZm9udFNpemUiPT09Yj8iMWVtIjpnLGc9aC5waXhlbExlZnQrInB4IixoLmxlZnQ9ZCxmJiYoZS5sZWZ0PWYpKSx2b2lkIDA9PT1nP2c6ZysiInx8ImF1dG8ifSk7ZnVuY3Rpb24gVWEoYSxiKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9YikuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19dmFyIFZhPS9hbHBoYVwoW14pXSpcKS9pLFdhPS9vcGFjaXR5XHMqPVxzKihbXildKikvaSxYYT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sWWE9bmV3IFJlZ0V4cCgiXigiK1QrIikoLiopJCIsImkiKSxaYT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sJGE9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LF9hPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl0sYWI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZTtmdW5jdGlvbiBiYihhKXtpZihhIGluIGFiKXJldHVybiBhO3ZhciBiPWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKSxjPV9hLmxlbmd0aDt3aGlsZShjLS0paWYoYT1fYVtjXStiLGEgaW4gYWIpcmV0dXJuIGF9ZnVuY3Rpb24gY2IoYSxiKXtmb3IodmFyIGMsZCxlLGY9W10sZz0wLGg9YS5sZW5ndGg7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGZbZ109bi5fZGF0YShkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlcoZCkmJihmW2ddPW4uX2RhdGEoZCwib2xkZGlzcGxheSIsTWEoZC5ub2RlTmFtZSkpKSk6KGU9VyhkKSwoYyYmIm5vbmUiIT09Y3x8IWUpJiZuLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGU/YzpuLmNzcyhkLCJkaXNwbGF5IikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5JiYiIiE9PWQuc3R5bGUuZGlzcGxheXx8KGQuc3R5bGUuZGlzcGxheT1iP2ZbZ118fCIiOiJub25lIikpO3JldHVybiBhfWZ1bmN0aW9uIGRiKGEsYixjKXt2YXIgZD1ZYS5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIGViKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrVltmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1ZbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrVltmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1ZbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrVltmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gZmIoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPVJhKGEpLGc9bC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1TYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLE9hLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYobC5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK2ViKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPVNhKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6bC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7aWYoYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1iYihoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLHZvaWQgMD09PWMpcmV0dXJuIGcmJiJnZXQiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQoYSwhMSxkKSk/ZTppW2JdO2lmKGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1VLmV4ZWMoYykpJiZlWzFdJiYoYz1YKGEsYixlKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiPT09ZiYmKGMrPWUmJmVbM118fChuLmNzc051bWJlcltoXT8iIjoicHgiKSksbC5jbGVhckNsb25lU3R5bGV8fCIiIT09Y3x8MCE9PWIuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwoaVtiXT0iaW5oZXJpdCIpLCEoZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpKSkpdHJ5e2lbYl09Y31jYXRjaChqKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4uY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPWJiKGgpfHxoKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sZyYmImdldCJpbiBnJiYoZj1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1mJiYoZj1TYShhLGIsZCkpLCJub3JtYWwiPT09ZiYmYiBpbiAkYSYmKGY9JGFbYl0pLCIiPT09Y3x8Yz8oZT1wYXJzZUZsb2F0KGYpLGM9PT0hMHx8aXNGaW5pdGUoZSk/ZXx8MDpmKTpmfX0pLG4uZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP1hhLnRlc3Qobi5jc3MoYSwiZGlzcGxheSIpKSYmMD09PWEub2Zmc2V0V2lkdGg/UGEoYSxaYSxmdW5jdGlvbigpe3JldHVybiBmYihhLGIsZCl9KTpmYihhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJlJhKGEpO3JldHVybiBkYihhLGMsZD9lYihhLGIsZCxsLmJveFNpemluZyYmImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksbC5vcGFjaXR5fHwobi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gV2EudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpPy4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkrIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPW4uaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrMTAwKmIrIikiOiIiLGY9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MSwoYj49MXx8IiI9PT1iKSYmIiI9PT1uLnRyaW0oZi5yZXBsYWNlKFZhLCIiKSkmJmMucmVtb3ZlQXR0cmlidXRlJiYoYy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpLCIiPT09Ynx8ZCYmIWQuZmlsdGVyKXx8KGMuZmlsdGVyPVZhLnRlc3QoZik/Zi5yZXBsYWNlKFZhLGUpOmYrIiAiK2UpfX0pLG4uY3NzSG9va3MubWFyZ2luUmlnaHQ9VWEobC5yZWxpYWJsZU1hcmdpblJpZ2h0LGZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/UGEoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sU2EsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG4uY3NzSG9va3MubWFyZ2luTGVmdD1VYShsLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihhLGIpe3JldHVybiBiPyhwYXJzZUZsb2F0KFNhKGEsIm1hcmdpbkxlZnQiKSl8fChuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKT9hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtUGEoYSx7Cm1hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSk6MCkpKyJweCI6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErVltkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSxOYS50ZXN0KGEpfHwobi5jc3NIb29rc1thK2JdLnNldD1kYil9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihuLmlzQXJyYXkoYikpe2ZvcihkPVJhKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBjYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtXKHRoaXMpP24odGhpcykuc2hvdygpOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gZ2IoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGdiLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1nYixnYi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdiLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fG4uZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPWdiLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpnYi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1nYi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOmdiLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LGdiLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1nYi5wcm90b3R5cGUsZ2IucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiAxIT09YS5lbGVtLm5vZGVUeXBlfHxudWxsIT1hLmVsZW1bYS5wcm9wXSYmbnVsbD09YS5lbGVtLnN0eWxlW2EucHJvcF0/YS5lbGVtW2EucHJvcF06KGI9bi5jc3MoYS5lbGVtLGEucHJvcCwiIiksYiYmImF1dG8iIT09Yj9iOjApfSxzZXQ6ZnVuY3Rpb24oYSl7bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0oYSk6MSE9PWEuZWxlbS5ub2RlVHlwZXx8bnVsbD09YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5wcm9wXV0mJiFuLmNzc0hvb2tzW2EucHJvcF0/YS5lbGVtW2EucHJvcF09YS5ub3c6bi5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCl9fX0sZ2IucHJvcEhvb2tzLnNjcm9sbFRvcD1nYi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LG4uZng9Z2IucHJvdG90eXBlLmluaXQsbi5meC5zdGVwPXt9O3ZhciBoYixpYixqYj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sa2I9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBsYigpe3JldHVybiBhLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtoYj12b2lkIDB9KSxoYj1uLm5vdygpfWZ1bmN0aW9uIG1iKGEsYil7dmFyIGMsZD17aGVpZ2h0OmF9LGU9MDtmb3IoYj1iPzE6MDs0PmU7ZSs9Mi1iKWM9VltlXSxkWyJtYXJnaW4iK2NdPWRbInBhZGRpbmciK2NdPWE7cmV0dXJuIGImJihkLm9wYWNpdHk9ZC53aWR0aD1hKSxkfWZ1bmN0aW9uIG5iKGEsYixjKXtmb3IodmFyIGQsZT0ocWIudHdlZW5lcnNbYl18fFtdKS5jb25jYXQocWIudHdlZW5lcnNbIioiXSksZj0wLGc9ZS5sZW5ndGg7Zz5mO2YrKylpZihkPWVbZl0uY2FsbChjLGIsYSkpcmV0dXJuIGR9ZnVuY3Rpb24gb2IoYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbT10aGlzLG89e30scD1hLnN0eWxlLHE9YS5ub2RlVHlwZSYmVyhhKSxyPW4uX2RhdGEoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLG0uYWx3YXlzKGZ1bmN0aW9uKCl7bS5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0saj1uLmNzcyhhLCJkaXNwbGF5Iiksaz0ibm9uZSI9PT1qP24uX2RhdGEoYSwib2xkZGlzcGxheSIpfHxNYShhLm5vZGVOYW1lKTpqLCJpbmxpbmUiPT09ayYmIm5vbmUiPT09bi5jc3MoYSwiZmxvYXQiKSYmKGwuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1NYShhLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIixsLnNocmlua1dyYXBCbG9ja3MoKXx8bS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PWMub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9Yy5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1jLm92ZXJmbG93WzJdfSkpO2ZvcihkIGluIGIpaWYoZT1iW2RdLGpiLmV4ZWMoZSkpe2lmKGRlbGV0ZSBiW2RdLGY9Znx8InRvZ2dsZSI9PT1lLGU9PT0ocT8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09ZXx8IXJ8fHZvaWQgMD09PXJbZF0pY29udGludWU7cT0hMH1vW2RdPXImJnJbZF18fG4uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKG4uaXNFbXB0eU9iamVjdChvKSkiaW5saW5lIj09PSgibm9uZSI9PT1qP01hKGEubm9kZU5hbWUpOmopJiYocC5kaXNwbGF5PWopO2Vsc2V7cj8iaGlkZGVuImluIHImJihxPXIuaGlkZGVuKTpyPW4uX2RhdGEoYSwiZnhzaG93Iix7fSksZiYmKHIuaGlkZGVuPSFxKSxxP24oYSkuc2hvdygpOm0uZG9uZShmdW5jdGlvbigpe24oYSkuaGlkZSgpfSksbS5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7bi5fcmVtb3ZlRGF0YShhLCJmeHNob3ciKTtmb3IoYiBpbiBvKW4uc3R5bGUoYSxiLG9bYl0pfSk7Zm9yKGQgaW4gbylnPW5iKHE/cltkXTowLGQsbSksZCBpbiByfHwocltkXT1nLnN0YXJ0LHEmJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9IndpZHRoIj09PWR8fCJoZWlnaHQiPT09ZD8xOjApKX19ZnVuY3Rpb24gcGIoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1uLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLG4uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9bi5jc3NIb29rc1tkXSxnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBxYihhLGIsYyl7dmFyIGQsZSxmPTAsZz1xYi5wcmVmaWx0ZXJzLmxlbmd0aCxoPW4uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPWhifHxsYigpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczpuLmV4dGVuZCh7fSxiKSxvcHRzOm4uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpuLmVhc2luZy5fZGVmYXVsdH0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOmhifHxsYigpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bi5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj8oaC5ub3RpZnlXaXRoKGEsW2osMSwwXSksaC5yZXNvbHZlV2l0aChhLFtqLGJdKSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcihwYihrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9cWIucHJlZmlsdGVyc1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIG4uaXNGdW5jdGlvbihkLnN0b3ApJiYobi5fcXVldWVIb29rcyhqLmVsZW0sai5vcHRzLnF1ZXVlKS5zdG9wPW4ucHJveHkoZC5zdG9wLGQpKSxkO3JldHVybiBuLm1hcChrLG5iLGopLG4uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLG4uZngudGltZXIobi5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9bi5BbmltYXRpb249bi5leHRlbmQocWIse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpO3JldHVybiBYKGMuZWxlbSxhLFUuZXhlYyhiKSxjKSxjfV19LHR3ZWVuZXI6ZnVuY3Rpb24oYSxiKXtuLmlzRnVuY3Rpb24oYSk/KGI9YSxhPVsiKiJdKTphPWEubWF0Y2goRyk7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoO2U+ZDtkKyspYz1hW2RdLHFiLnR3ZWVuZXJzW2NdPXFiLnR3ZWVuZXJzW2NdfHxbXSxxYi50d2VlbmVyc1tjXS51bnNoaWZ0KGIpfSxwcmVmaWx0ZXJzOltvYl0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9xYi5wcmVmaWx0ZXJzLnVuc2hpZnQoYSk6cWIucHJlZmlsdGVycy5wdXNoKGEpfX0pLG4uc3BlZWQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEmJiJvYmplY3QiPT10eXBlb2YgYT9uLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fG4uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhbi5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1uLmZ4Lm9mZj8wOiJudW1iZXIiPT10eXBlb2YgZC5kdXJhdGlvbj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gbi5meC5zcGVlZHM/bi5meC5zcGVlZHNbZC5kdXJhdGlvbl06bi5meC5zcGVlZHMuX2RlZmF1bHQsbnVsbCE9ZC5xdWV1ZSYmZC5xdWV1ZSE9PSEwfHwoZC5xdWV1ZT0iZngiKSxkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oKXtuLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWUmJm4uZGVxdWV1ZSh0aGlzLGQucXVldWUpfSxkfSxuLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihXKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uLmlzRW1wdHlPYmplY3QoYSksZj1uLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9cWIodGhpcyxuLmV4dGVuZCh7fSxhKSxmKTsoZXx8bi5fZGF0YSh0aGlzLCJmaW5pc2giKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihjPWIsYj1hLGE9dm9pZCAwKSxiJiZhIT09ITEmJnRoaXMucXVldWUoYXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ITAsZT1udWxsIT1hJiZhKyJxdWV1ZUhvb2tzIixmPW4udGltZXJzLGc9bi5fZGF0YSh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZrYi50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyFiJiZjfHxuLmRlcXVldWUodGhpcyxhKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1uLl9kYXRhKHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUobWIoYiwhMCksYSxkLGUpfX0pLG4uZWFjaCh7c2xpZGVEb3duOm1iKCJzaG93Iiksc2xpZGVVcDptYigiaGlkZSIpLHNsaWRlVG9nZ2xlOm1iKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxuLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPW4udGltZXJzLGM9MDtmb3IoaGI9bi5ub3coKTtjPGIubGVuZ3RoO2MrKylhPWJbY10sYSgpfHxiW2NdIT09YXx8Yi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxuLmZ4LnN0b3AoKSxoYj12b2lkIDB9LG4uZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5zdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3RhcnQ9ZnVuY3Rpb24oKXtpYnx8KGliPWEuc2V0SW50ZXJ2YWwobi5meC50aWNrLG4uZnguaW50ZXJ2YWwpKX0sbi5meC5zdG9wPWZ1bmN0aW9uKCl7YS5jbGVhckludGVydmFsKGliKSxpYj1udWxsfSxuLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxuLmZuLmRlbGF5PWZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9bi5meD9uLmZ4LnNwZWVkc1tiXXx8YjpiLGM9Y3x8ImZ4Iix0aGlzLnF1ZXVlKGMsZnVuY3Rpb24oYyxkKXt2YXIgZT1hLnNldFRpbWVvdXQoYyxiKTtkLnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFyVGltZW91dChlKX19KX0sZnVuY3Rpb24oKXt2YXIgYSxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1kLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGY9ZS5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtjPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxjLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxiLnNldEF0dHJpYnV0ZSgidHlwZSIsImNoZWNrYm94IiksYy5hcHBlbmRDaGlsZChiKSxhPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXSxhLnN0eWxlLmNzc1RleHQ9InRvcDoxcHgiLGwuZ2V0U2V0QXR0cmlidXRlPSJ0IiE9PWMuY2xhc3NOYW1lLGwuc3R5bGU9L3RvcC8udGVzdChhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksbC5ocmVmTm9ybWFsaXplZD0iL2EiPT09YS5nZXRBdHRyaWJ1dGUoImhyZWYiKSxsLmNoZWNrT249ISFiLnZhbHVlLGwub3B0U2VsZWN0ZWQ9Zi5zZWxlY3RlZCxsLmVuY3R5cGU9ISFkLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGUuZGlzYWJsZWQ9ITAsbC5vcHREaXNhYmxlZD0hZi5kaXNhYmxlZCxiPWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxiLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSxsLmlucHV0PSIiPT09Yi5nZXRBdHRyaWJ1dGUoInZhbHVlIiksYi52YWx1ZT0idCIsYi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGwucmFkaW9WYWx1ZT0idCI9PT1iLnZhbHVlfSgpO3ZhciByYj0vXHIvZyxzYj0vW1x4MjBcdFxyXG5cZl0rL2c7bi5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBkPW4uaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU7MT09PXRoaXMubm9kZVR5cGUmJihlPWQ/YS5jYWxsKHRoaXMsYyxuKHRoaXMpLnZhbCgpKTphLG51bGw9PWU/ZT0iIjoibnVtYmVyIj09dHlwZW9mIGU/ZSs9IiI6bi5pc0FycmF5KGUpJiYoZT1uLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOmErIiJ9KSksYj1uLnZhbEhvb2tzW3RoaXMudHlwZV18fG4udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYic2V0ImluIGImJnZvaWQgMCE9PWIuc2V0KHRoaXMsZSwidmFsdWUiKXx8KHRoaXMudmFsdWU9ZSkpfSk7aWYoZSlyZXR1cm4gYj1uLnZhbEhvb2tzW2UudHlwZV18fG4udmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiYiZ2V0ImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsInZhbHVlIikpP2M6KGM9ZS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIGM/Yy5yZXBsYWNlKHJiLCIiKTpudWxsPT1jPyIiOmMpfX19KSxuLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPW4uZmluZC5hdHRyKGEsInZhbHVlIik7cmV0dXJuIG51bGwhPWI/YjpuLnRyaW0obi50ZXh0KGEpKS5yZXBsYWNlKHNiLCIgIil9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPSJzZWxlY3Qtb25lIj09PWEudHlwZXx8MD5lLGc9Zj9udWxsOltdLGg9Zj9lKzE6ZC5sZW5ndGgsaT0wPmU/aDpmP2U6MDtoPmk7aSsrKWlmKGM9ZFtpXSwoYy5zZWxlY3RlZHx8aT09PWUpJiYobC5vcHREaXNhYmxlZD8hYy5kaXNhYmxlZDpudWxsPT09Yy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpJiYoIWMucGFyZW50Tm9kZS5kaXNhYmxlZHx8IW4ubm9kZU5hbWUoYy5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYoYj1uKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9bi5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0paWYoZD1lW2ddLG4uaW5BcnJheShuLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksZik+LTEpdHJ5e2Quc2VsZWN0ZWQ9Yz0hMH1jYXRjaChoKXtkLnNjcm9sbEhlaWdodH1lbHNlIGQuc2VsZWN0ZWQ9ITE7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGV9fX19KSxuLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtuLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5pc0FycmF5KGIpP2EuY2hlY2tlZD1uLmluQXJyYXkobihhKS52YWwoKSxiKT4tMTp2b2lkIDB9fSxsLmNoZWNrT258fChuLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09PWEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6YS52YWx1ZX0pfSk7dmFyIHRiLHViLHZiPW4uZXhwci5hdHRySGFuZGxlLHdiPS9eKD86Y2hlY2tlZHxzZWxlY3RlZCkkL2kseGI9bC5nZXRTZXRBdHRyaWJ1dGUseWI9bC5pbnB1dDtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBZKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZigzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYS5nZXRBdHRyaWJ1dGU/bi5wcm9wKGEsYixjKTooMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPWIudG9Mb3dlckNhc2UoKSxlPW4uYXR0ckhvb2tzW2JdfHwobi5leHByLm1hdGNoLmJvb2wudGVzdChiKT91Yjp0YikpLHZvaWQgMCE9PWM/bnVsbD09PWM/dm9pZCBuLnJlbW92ZUF0dHIoYSxiKTplJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOihkPW4uZmluZC5hdHRyKGEsYiksbnVsbD09ZD92b2lkIDA6ZCkpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFsLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1iJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPTAsZj1iJiZiLm1hdGNoKEcpO2lmKGYmJjE9PT1hLm5vZGVUeXBlKXdoaWxlKGM9ZltlKytdKWQ9bi5wcm9wRml4W2NdfHxjLG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYyk/eWImJnhifHwhd2IudGVzdChjKT9hW2RdPSExOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtkXT0hMTpuLmF0dHIoYSxjLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZSh4Yj9jOmQpfX0pLHViPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6eWImJnhifHwhd2IudGVzdChjKT9hLnNldEF0dHJpYnV0ZSgheGImJm4ucHJvcEZpeFtjXXx8YyxjKTphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYyldPWFbY109ITAsY319LG4uZWFjaChuLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPXZiW2JdfHxuLmZpbmQuYXR0cjt5YiYmeGJ8fCF3Yi50ZXN0KGIpP3ZiW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj12YltiXSx2YltiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsdmJbYl09ZiksZX06dmJbYl09ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphW24uY2FtZWxDYXNlKCJkZWZhdWx0LSIrYildP2IudG9Mb3dlckNhc2UoKTpudWxsfX0pLHliJiZ4Ynx8KG4uYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLm5vZGVOYW1lKGEsImlucHV0Iik/dm9pZChhLmRlZmF1bHRWYWx1ZT1iKTp0YiYmdGIuc2V0KGEsYixjKX19KSx4Ynx8KHRiPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZHx8YS5zZXRBdHRyaWJ1dGVOb2RlKGQ9YS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShjKSksZC52YWx1ZT1iKz0iIiwidmFsdWUiPT09Y3x8Yj09PWEuZ2V0QXR0cmlidXRlKGMpP2I6dm9pZCAwfX0sdmIuaWQ9dmIubmFtZT12Yi5jb29yZHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiYiIiE9PWQudmFsdWU/ZC52YWx1ZTpudWxsfSxuLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9jLnZhbHVlOnZvaWQgMH0sc2V0OnRiLnNldH0sbi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3RiLnNldChhLCIiPT09Yj8hMTpiLGMpfX0sbi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe24uYXR0ckhvb2tzW2JdPXtzZXQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4iIj09PWM/KGEuc2V0QXR0cmlidXRlKGIsImF1dG8iKSxjKTp2b2lkIDB9fX0pKSxsLnN0eWxlfHwobi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fHx2b2lkIDB9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KTt2YXIgemI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksQWI9L14oPzphfGFyZWEpJC9pO24uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxuLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9bi5wcm9wRml4W2FdfHxhLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPXZvaWQgMCxkZWxldGUgdGhpc1thXX1jYXRjaChiKXt9fSl9fSksbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1uLnByb3BGaXhbYl18fGIsZT1uLnByb3BIb29rc1tiXSksdm9pZCAwIT09Yz9lJiYic2V0ImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYmImdldCJpbiBlJiZudWxsIT09KGQ9ZS5nZXQoYSxiKSk/ZDphW2JdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidGFiaW5kZXgiKTtyZXR1cm4gYj9wYXJzZUludChiLDEwKTp6Yi50ZXN0KGEubm9kZU5hbWUpfHxBYi50ZXN0KGEubm9kZU5hbWUpJiZhLmhyZWY/MDotMX19fSxwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn19KSxsLmhyZWZOb3JtYWxpemVkfHxuLmVhY2goWyJocmVmIiwic3JjIl0sZnVuY3Rpb24oYSxiKXtuLnByb3BIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZShiLDQpfX19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH0sc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLG4uZWFjaChbInRhYkluZGV4IiwicmVhZE9ubHkiLCJtYXhMZW5ndGgiLCJjZWxsU3BhY2luZyIsImNlbGxQYWRkaW5nIiwicm93U3BhbiIsImNvbFNwYW4iLCJ1c2VNYXAiLCJmcmFtZUJvcmRlciIsImNvbnRlbnRFZGl0YWJsZSJdLGZ1bmN0aW9uKCl7bi5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGwuZW5jdHlwZXx8KG4ucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpO3ZhciBCYj0vW1x0XHJcblxmXS9nO2Z1bmN0aW9uIENiKGEpe3JldHVybiBuLmF0dHIoYSwiY2xhc3MiKXx8IiJ9bi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk9MDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsQ2IodGhpcykpKX0pO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKWQuaW5kZXhPZigiICIrZisiICIpPDAmJihkKz1mKyIgIik7aD1uLnRyaW0oZCksZSE9PWgmJm4uYXR0cihjLCJjbGFzcyIsaCl9fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPTA7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLENiKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPUNiKGMpLGQ9MT09PWMubm9kZVR5cGUmJigiICIrZSsiICIpLnJlcGxhY2UoQmIsIiAiKSl7Zz0wO3doaWxlKGY9YltnKytdKXdoaWxlKGQuaW5kZXhPZigiICIrZisiICIpPi0xKWQ9ZC5yZXBsYWNlKCIgIitmKyIgIiwiICIpO2g9bi50cmltKGQpLGUhPT1oJiZuLmF0dHIoYywiY2xhc3MiLGgpfX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6bi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsQ2IodGhpcyksYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixkLGUsZjtpZigic3RyaW5nIj09PWMpe2Q9MCxlPW4odGhpcyksZj1hLm1hdGNoKEcpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKX1lbHNlIHZvaWQgMCE9PWEmJiJib29sZWFuIiE9PWN8fChiPUNiKHRoaXMpLGImJm4uX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsYiksbi5hdHRyKHRoaXMsImNsYXNzIixifHxhPT09ITE/IiI6bi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPTA7Yj0iICIrYSsiICI7d2hpbGUoYz10aGlzW2QrK10paWYoMT09PWMubm9kZVR5cGUmJigiICIrQ2IoYykrIiAiKS5yZXBsYWNlKEJiLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9fSk7dmFyIERiPWEubG9jYXRpb24sRWI9bi5ub3coKSxGYj0vXD8vLEdiPS8oLCl8KFxbfHspfCh9fF0pfCIoPzpbXiJcXFxyXG5dfFxcWyJcXFwvYmZucnRdfFxcdVtcZGEtZkEtRl17NH0pKiJccyo6P3x0cnVlfGZhbHNlfG51bGx8LT8oPyEwXGQpXGQrKD86XC5cZCt8KSg/OltlRV1bKy1dP1xkK3wpL2c7bi5wYXJzZUpTT049ZnVuY3Rpb24oYil7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKyIiKTt2YXIgYyxkPW51bGwsZT1uLnRyaW0oYisiIik7cmV0dXJuIGUmJiFuLnRyaW0oZS5yZXBsYWNlKEdiLGZ1bmN0aW9uKGEsYixlLGYpe3JldHVybiBjJiZiJiYoZD0wKSwwPT09ZD9hOihjPWV8fGIsZCs9IWYtIWUsIiIpfSkpP0Z1bmN0aW9uKCJyZXR1cm4gIitlKSgpOm4uZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0sbi5wYXJzZVhNTD1mdW5jdGlvbihiKXt2YXIgYyxkO2lmKCFifHwic3RyaW5nIiE9dHlwZW9mIGIpcmV0dXJuIG51bGw7dHJ5e2EuRE9NUGFyc2VyPyhkPW5ldyBhLkRPTVBhcnNlcixjPWQucGFyc2VGcm9tU3RyaW5nKGIsInRleHQveG1sIikpOihjPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxjLmFzeW5jPSJmYWxzZSIsYy5sb2FkWE1MKGIpKX1jYXRjaChlKXtjPXZvaWQgMH1yZXR1cm4gYyYmYy5kb2N1bWVudEVsZW1lbnQmJiFjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8bi5lcnJvcigiSW52YWxpZCBYTUw6ICIrYiksY307dmFyIEhiPS8jLiokLyxJYj0vKFs/Jl0pXz1bXiZdKi8sSmI9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9nbSxLYj0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxMYj0vXig/OkdFVHxIRUFEKSQvLE1iPS9eXC9cLy8sTmI9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8sT2I9e30sUGI9e30sUWI9IiovIi5jb25jYXQoIioiKSxSYj1EYi5ocmVmLFNiPU5iLmV4ZWMoUmIudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIFRiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEcpfHxbXTtpZihuLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZC5jaGFyQXQoMCk/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gVWIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09UGI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBWYihhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYil2b2lkIDAhPT1iW2RdJiYoKGVbZF0/YTpjfHwoYz17fSkpW2RdPWJbZF0pO3JldHVybiBjJiZuLmV4dGVuZCghMCxhLGMpLGF9ZnVuY3Rpb24gV2IoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWUmJihlPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihlKWZvcihnIGluIGgpaWYoaFtnXSYmaFtnXS50ZXN0KGUpKXtpLnVuc2hpZnQoZyk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGcgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tnKyIgIitpWzBdXSl7Zj1nO2JyZWFrfWR8fChkPWcpfWY9Znx8ZH1yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gWGIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6UmIsdHlwZToiR0VUIixpc0xvY2FsOktiLnRlc3QoU2JbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6UWIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6bi5wYXJzZUpTT04sInRleHQgeG1sIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9WYihWYihhLG4uYWpheFNldHRpbmdzKSxiKTpWYihuLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjpUYihPYiksYWpheFRyYW5zcG9ydDpUYihQYiksYWpheDpmdW5jdGlvbihiLGMpeyJvYmplY3QiPT10eXBlb2YgYiYmKGM9YixiPXZvaWQgMCksYz1jfHx7fTt2YXIgZCxlLGYsZyxoLGksaixrLGw9bi5hamF4U2V0dXAoe30sYyksbT1sLmNvbnRleHR8fGwsbz1sLmNvbnRleHQmJihtLm5vZGVUeXBlfHxtLmpxdWVyeSk/bihtKTpuLmV2ZW50LHA9bi5EZWZlcnJlZCgpLHE9bi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iikscj1sLnN0YXR1c0NvZGV8fHt9LHM9e30sdD17fSx1PTAsdj0iY2FuY2VsZWQiLHc9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dSl7aWYoIWspe2s9e307d2hpbGUoYj1KYi5leGVjKGcpKWtbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9a1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT11P2c6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdXx8KGE9dFtjXT10W2NdfHxhLHNbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdXx8KGwubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dSlmb3IoYiBpbiBhKXJbYl09W3JbYl0sYVtiXV07ZWxzZSB3LmFsd2F5cyhhW3cuc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHY7cmV0dXJuIGomJmouYWJvcnQoYikseSgwLGIpLHRoaXN9fTtpZihwLnByb21pc2UodykuY29tcGxldGU9cS5hZGQsdy5zdWNjZXNzPXcuZG9uZSx3LmVycm9yPXcuZmFpbCxsLnVybD0oKGJ8fGwudXJsfHxSYikrIiIpLnJlcGxhY2UoSGIsIiIpLnJlcGxhY2UoTWIsU2JbMV0rIi8vIiksbC50eXBlPWMubWV0aG9kfHxjLnR5cGV8fGwubWV0aG9kfHxsLnR5cGUsbC5kYXRhVHlwZXM9bi50cmltKGwuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChHKXx8WyIiXSxudWxsPT1sLmNyb3NzRG9tYWluJiYoZD1OYi5leGVjKGwudXJsLnRvTG93ZXJDYXNlKCkpLGwuY3Jvc3NEb21haW49ISghZHx8ZFsxXT09PVNiWzFdJiZkWzJdPT09U2JbMl0mJihkWzNdfHwoImh0dHA6Ij09PWRbMV0/IjgwIjoiNDQzIikpPT09KFNiWzNdfHwoImh0dHA6Ij09PVNiWzFdPyI4MCI6IjQ0MyIpKSkpLGwuZGF0YSYmbC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBsLmRhdGEmJihsLmRhdGE9bi5wYXJhbShsLmRhdGEsbC50cmFkaXRpb25hbCkpLFViKE9iLGwsYyx3KSwyPT09dSlyZXR1cm4gdztpPW4uZXZlbnQmJmwuZ2xvYmFsLGkmJjA9PT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGwudHlwZT1sLnR5cGUudG9VcHBlckNhc2UoKSxsLmhhc0NvbnRlbnQ9IUxiLnRlc3QobC50eXBlKSxmPWwudXJsLGwuaGFzQ29udGVudHx8KGwuZGF0YSYmKGY9bC51cmwrPShGYi50ZXN0KGYpPyImIjoiPyIpK2wuZGF0YSxkZWxldGUgbC5kYXRhKSxsLmNhY2hlPT09ITEmJihsLnVybD1JYi50ZXN0KGYpP2YucmVwbGFjZShJYiwiJDFfPSIrRWIrKyk6ZisoRmIudGVzdChmKT8iJiI6Ij8iKSsiXz0iK0ViKyspKSxsLmlmTW9kaWZpZWQmJihuLmxhc3RNb2RpZmllZFtmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsbi5sYXN0TW9kaWZpZWRbZl0pLG4uZXRhZ1tmXSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixuLmV0YWdbZl0pKSwobC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJncuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixsLmNvbnRlbnRUeXBlKSx3LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsbC5kYXRhVHlwZXNbMF0mJmwuYWNjZXB0c1tsLmRhdGFUeXBlc1swXV0/bC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXSsoIioiIT09bC5kYXRhVHlwZXNbMF0/IiwgIitRYisiOyBxPTAuMDEiOiIiKTpsLmFjY2VwdHNbIioiXSk7Zm9yKGUgaW4gbC5oZWFkZXJzKXcuc2V0UmVxdWVzdEhlYWRlcihlLGwuaGVhZGVyc1tlXSk7aWYobC5iZWZvcmVTZW5kJiYobC5iZWZvcmVTZW5kLmNhbGwobSx3LGwpPT09ITF8fDI9PT11KSlyZXR1cm4gdy5hYm9ydCgpO3Y9ImFib3J0Ijtmb3IoZSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl3W2VdKGxbZV0pO2lmKGo9VWIoUGIsbCxjLHcpKXtpZih3LnJlYWR5U3RhdGU9MSxpJiZvLnRyaWdnZXIoImFqYXhTZW5kIixbdyxsXSksMj09PXUpcmV0dXJuIHc7bC5hc3luYyYmbC50aW1lb3V0PjAmJihoPWEuc2V0VGltZW91dChmdW5jdGlvbigpe3cuYWJvcnQoInRpbWVvdXQiKX0sbC50aW1lb3V0KSk7dHJ5e3U9MSxqLnNlbmQocyx5KX1jYXRjaCh4KXtpZighKDI+dSkpdGhyb3cgeDt5KC0xLHgpfX1lbHNlIHkoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHkoYixjLGQsZSl7dmFyIGsscyx0LHYseCx5PWM7MiE9PXUmJih1PTIsaCYmYS5jbGVhclRpbWVvdXQoaCksaj12b2lkIDAsZz1lfHwiIix3LnJlYWR5U3RhdGU9Yj4wPzQ6MCxrPWI+PTIwMCYmMzAwPmJ8fDMwND09PWIsZCYmKHY9V2IobCx3LGQpKSx2PVhiKGwsdix3LGspLGs/KGwuaWZNb2RpZmllZCYmKHg9dy5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHgmJihuLmxhc3RNb2RpZmllZFtmXT14KSx4PXcuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx4JiYobi5ldGFnW2ZdPXgpKSwyMDQ9PT1ifHwiSEVBRCI9PT1sLnR5cGU/eT0ibm9jb250ZW50IjozMDQ9PT1iP3k9Im5vdG1vZGlmaWVkIjooeT12LnN0YXRlLHM9di5kYXRhLHQ9di5lcnJvcixrPSF0KSk6KHQ9eSwhYiYmeXx8KHk9ImVycm9yIiwwPmImJihiPTApKSksdy5zdGF0dXM9Yix3LnN0YXR1c1RleHQ9KGN8fHkpKyIiLGs/cC5yZXNvbHZlV2l0aChtLFtzLHksd10pOnAucmVqZWN0V2l0aChtLFt3LHksdF0pLHcuc3RhdHVzQ29kZShyKSxyPXZvaWQgMCxpJiZvLnRyaWdnZXIoaz8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt3LGwsaz9zOnRdKSxxLmZpcmVXaXRoKG0sW3cseV0pLGkmJihvLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3csbF0pLC0tbi5hY3RpdmV8fG4uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB3fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG4uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheChuLmV4dGVuZCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0sbi5pc1BsYWluT2JqZWN0KGEpJiZhKSl9fSksbi5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gbi5hamF4KHt1cmw6YSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfSxuLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9bihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmMT09PWEuZmlyc3RDaGlsZC5ub2RlVHlwZSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPW4odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe24ubm9kZU5hbWUodGhpcywiYm9keSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KTtmdW5jdGlvbiBZYihhKXtyZXR1cm4gYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxuLmNzcyhhLCJkaXNwbGF5Iil9ZnVuY3Rpb24gWmIoYSl7aWYoIW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50fHxkLGEpKXJldHVybiEwO3doaWxlKGEmJjE9PT1hLm5vZGVUeXBlKXtpZigibm9uZSI9PT1ZYihhKXx8ImhpZGRlbiI9PT1hLnR5cGUpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9bi5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBsLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cygpP2Eub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wJiYhYS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aDpaYihhKX0sbi5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hbi5leHByLmZpbHRlcnMuaGlkZGVuKGEpfTt2YXIgJGI9LyUyMC9nLF9iPS9cW1xdJC8sYWM9L1xyP1xuL2csYmM9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGNjPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBkYyhhLGIsYyxkKXt2YXIgZTtpZihuLmlzQXJyYXkoYikpbi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxfYi50ZXN0KGEpP2QoYSxlKTpkYyhhKyJbIisoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKGN8fCJvYmplY3QiIT09bi50eXBlKGIpKWQoYSxiKTtlbHNlIGZvcihlIGluIGIpZGMoYSsiWyIrZSsiXSIsYltlXSxjLGQpfW4ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj8iIjpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtpZih2b2lkIDA9PT1iJiYoYj1uLmFqYXhTZXR0aW5ncyYmbi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLG4uaXNBcnJheShhKXx8YS5qcXVlcnkmJiFuLmlzUGxhaW5PYmplY3QoYSkpbi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGMgaW4gYSlkYyhjLGFbY10sYixlKTtyZXR1cm4gZC5qb2luKCImIikucmVwbGFjZSgkYiwiKyIpfSxuLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIG4ucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT1uLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gYT9uLm1ha2VBcnJheShhKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFuKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmY2MudGVzdCh0aGlzLm5vZGVOYW1lKSYmIWJjLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCFaLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoYWMsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGFjLCJcclxuIil9fSkuZ2V0KCl9fSksbi5hamF4U2V0dGluZ3MueGhyPXZvaWQgMCE9PWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTG9jYWw/aWMoKTpkLmRvY3VtZW50TW9kZT44P2hjKCk6L14oZ2V0fHBvc3R8aGVhZHxwdXR8ZGVsZXRlfG9wdGlvbnMpJC9pLnRlc3QodGhpcy50eXBlKSYmaGMoKXx8aWMoKX06aGM7dmFyIGVjPTAsZmM9e30sZ2M9bi5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGZjKWZjW2FdKHZvaWQgMCwhMCl9KSxsLmNvcnM9ISFnYyYmIndpdGhDcmVkZW50aWFscyJpbiBnYyxnYz1sLmFqYXg9ISFnYyxnYyYmbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGIpe2lmKCFiLmNyb3NzRG9tYWlufHxsLmNvcnMpe3ZhciBjO3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7dmFyIGYsZz1iLnhocigpLGg9KytlYztpZihnLm9wZW4oYi50eXBlLGIudXJsLGIuYXN5bmMsYi51c2VybmFtZSxiLnBhc3N3b3JkKSxiLnhockZpZWxkcylmb3IoZiBpbiBiLnhockZpZWxkcylnW2ZdPWIueGhyRmllbGRzW2ZdO2IubWltZVR5cGUmJmcub3ZlcnJpZGVNaW1lVHlwZSYmZy5vdmVycmlkZU1pbWVUeXBlKGIubWltZVR5cGUpLGIuY3Jvc3NEb21haW58fGRbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGRbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZiBpbiBkKXZvaWQgMCE9PWRbZl0mJmcuc2V0UmVxdWVzdEhlYWRlcihmLGRbZl0rIiIpO2cuc2VuZChiLmhhc0NvbnRlbnQmJmIuZGF0YXx8bnVsbCksYz1mdW5jdGlvbihhLGQpe3ZhciBmLGksajtpZihjJiYoZHx8ND09PWcucmVhZHlTdGF0ZSkpaWYoZGVsZXRlIGZjW2hdLGM9dm9pZCAwLGcub25yZWFkeXN0YXRlY2hhbmdlPW4ubm9vcCxkKTQhPT1nLnJlYWR5U3RhdGUmJmcuYWJvcnQoKTtlbHNle2o9e30sZj1nLnN0YXR1cywic3RyaW5nIj09dHlwZW9mIGcucmVzcG9uc2VUZXh0JiYoai50ZXh0PWcucmVzcG9uc2VUZXh0KTt0cnl7aT1nLnN0YXR1c1RleHR9Y2F0Y2goayl7aT0iIn1mfHwhYi5pc0xvY2FsfHxiLmNyb3NzRG9tYWluPzEyMjM9PT1mJiYoZj0yMDQpOmY9ai50ZXh0PzIwMDo0MDR9aiYmZShmLGksaixnLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKX0sYi5hc3luYz80PT09Zy5yZWFkeVN0YXRlP2Euc2V0VGltZW91dChjKTpnLm9ucmVhZHlzdGF0ZWNoYW5nZT1mY1toXT1jOmMoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtjJiZjKHZvaWQgMCwhMCl9fX19KTtmdW5jdGlvbiBoYygpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBpYygpe3RyeXtyZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChiKXt9fW4uYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjPWQuaGVhZHx8bigiaGVhZCIpWzBdfHxkLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihlLGYpe2I9ZC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLmFzeW5jPSEwLGEuc2NyaXB0Q2hhcnNldCYmKGIuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGIuc3JjPWEudXJsLGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsYyl7KGN8fCFiLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoYi5yZWFkeVN0YXRlKSkmJihiLm9ubG9hZD1iLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbCxjfHxmKDIwMCwic3VjY2VzcyIpKX0sYy5pbnNlcnRCZWZvcmUoYixjLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2ImJmIub25sb2FkKHZvaWQgMCwhMCl9fX19KTt2YXIgamM9W10sa2M9Lyg9KVw/KD89JnwkKXxcP1w/LztuLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9amMucG9wKCl8fG4uZXhwYW5kbysiXyIrRWIrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKGtjLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYwPT09KGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYma2MudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW4uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKGtjLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPShGYi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bi5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1mP24oYSkucmVtb3ZlUHJvcChlKTphW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssamMucHVzaChlKSksZyYmbi5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fGQ7dmFyIGU9eC5leGVjKGEpLGY9IWMmJltdO3JldHVybiBlP1tiLmNyZWF0ZUVsZW1lbnQoZVsxXSldOihlPWphKFthXSxiLGYpLGYmJmYubGVuZ3RoJiZuKGYpLnJlbW92ZSgpLG4ubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9O3ZhciBsYz1uLmZuLmxvYWQ7bi5mbi5sb2FkPWZ1bmN0aW9uKGEsYixjKXtpZigic3RyaW5nIiE9dHlwZW9mIGEmJmxjKXJldHVybiBsYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZigiICIpO3JldHVybiBoPi0xJiYoZD1uLnRyaW0oYS5zbGljZShoLGEubGVuZ3RoKSksYT1hLnNsaWNlKDAsaCkpLG4uaXNGdW5jdGlvbihiKT8oYz1iLGI9dm9pZCAwKTpiJiYib2JqZWN0Ij09dHlwZW9mIGImJihlPSJQT1NUIiksZy5sZW5ndGg+MCYmbi5hamF4KHt1cmw6YSx0eXBlOmV8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP24oIjxkaXY+IikuYXBwZW5kKG4ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuYWx3YXlzKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGZ1bmN0aW9uKCl7Yy5hcHBseSh0aGlzLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pfSksdGhpc30sbi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07ZnVuY3Rpb24gbWMoYSl7cmV0dXJuIG4uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1uLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW4uY3NzKGEsInBvc2l0aW9uIiksbD1uKGEpLG09e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1uLmNzcyhhLCJ0b3AiKSxpPW4uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiZuLmluQXJyYXkoImF1dG8iLFtmLGldKT4tMSxqPyhkPWwucG9zaXRpb24oKSxnPWQudG9wLGU9ZC5sZWZ0KTooZz1wYXJzZUZsb2F0KGYpfHwwLGU9cGFyc2VGbG9hdChpKXx8MCksbi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLG4uZXh0ZW5kKHt9LGgpKSksbnVsbCE9Yi50b3AmJihtLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihtLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LG4uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtuLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXt0b3A6MCxsZWZ0OjB9LGU9dGhpc1swXSxmPWUmJmUub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LG4uY29udGFpbnMoYixlKT8oInVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCYmKGQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1tYyhmKSx7dG9wOmQudG9wKyhjLnBhZ2VZT2Zmc2V0fHxiLnNjcm9sbFRvcCktKGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoYy5wYWdlWE9mZnNldHx8Yi5zY3JvbGxMZWZ0KS0oYi5jbGllbnRMZWZ0fHwwKX0pOmR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXt0b3A6MCxsZWZ0OjB9LGQ9dGhpc1swXTtyZXR1cm4iZml4ZWQiPT09bi5jc3MoZCwicG9zaXRpb24iKT9iPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6KGE9dGhpcy5vZmZzZXRQYXJlbnQoKSxiPXRoaXMub2Zmc2V0KCksbi5ub2RlTmFtZShhWzBdLCJodG1sIil8fChjPWEub2Zmc2V0KCkpLGMudG9wKz1uLmNzcyhhWzBdLCJib3JkZXJUb3BXaWR0aCIsITApLGMubGVmdCs9bi5jc3MoYVswXSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpLHt0b3A6Yi50b3AtYy50b3Atbi5jc3MoZCwibWFyZ2luVG9wIiwhMCksbGVmdDpiLmxlZnQtYy5sZWZ0LW4uY3NzKGQsIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudDt3aGlsZShhJiYhbi5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bi5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxRYX0pfX0pLG4uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihhLGIpe3ZhciBjPS9ZLy50ZXN0KGIpO24uZm5bYV09ZnVuY3Rpb24oZCl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhLGQsZSl7dmFyIGY9bWMoYSk7cmV0dXJuIHZvaWQgMD09PWU/Zj9iIGluIGY/ZltiXTpmLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/bihmKS5zY3JvbGxMZWZ0KCk6ZSxjP2U6bihmKS5zY3JvbGxUb3AoKSk6YVtkXT1lKX0sYSxkLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT1VYShsLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz1TYShhLGIpLE9hLnRlc3QoYyk/bihhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxuLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe24uZWFjaCh7CnBhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBuYz1hLmpRdWVyeSxvYz1hLiQ7cmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYmKGEuJD1vYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9bmMpLG59LGJ8fChhLmpRdWVyeT1hLiQ9biksbn0pOwo="></script>
<script src="data:application/x-javascript;base64,LyohCiAqIEJvb3RzdHJhcCB2My4zLjUgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQogKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqLwppZigidW5kZWZpbmVkIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5Iik7K2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoYlswXTwyJiZiWzFdPDl8fDE9PWJbMF0mJjk9PWJbMV0mJmJbMl08MSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5IHZlcnNpb24gMS45LjEgb3IgaGlnaGVyIil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9vdHN0cmFwIiksYj17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07Zm9yKHZhciBjIGluIGIpaWYodm9pZCAwIT09YS5zdHlsZVtjXSlyZXR1cm57ZW5kOmJbY119O3JldHVybiExfWEuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZD10aGlzO2EodGhpcykub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Yz0hMH0pO3ZhciBlPWZ1bmN0aW9uKCl7Y3x8YShkKS50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9O3JldHVybiBzZXRUaW1lb3V0KGUsYiksdGhpc30sYShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPWIoKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGEuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQ9e2JpbmRUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxkZWxlZ2F0ZVR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGhhbmRsZTpmdW5jdGlvbihiKXtyZXR1cm4gYShiLnRhcmdldCkuaXModGhpcyk/Yi5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKCJicy5hbGVydCIpO2V8fGMuZGF0YSgiYnMuYWxlcnQiLGU9bmV3IGQodGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXS5jYWxsKGMpfSl9dmFyIGM9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLGQ9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2siLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj0iMy4zLjUiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsZC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYygpe2cuZGV0YWNoKCkudHJpZ2dlcigiY2xvc2VkLmJzLmFsZXJ0IikucmVtb3ZlKCl9dmFyIGU9YSh0aGlzKSxmPWUuYXR0cigiZGF0YS10YXJnZXQiKTtmfHwoZj1lLmF0dHIoImhyZWYiKSxmPWYmJmYucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGc9YShmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdCgiLmFsZXJ0IikpLGcudHJpZ2dlcihiPWEuRXZlbnQoImNsb3NlLmJzLmFsZXJ0IikpLGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fChnLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKCJmYWRlIik/Zy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTpjKCkpfTt2YXIgZT1hLmZuLmFsZXJ0O2EuZm4uYWxlcnQ9YixhLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPWQsYS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWxlcnQ9ZSx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGkiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMuYnV0dG9uIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5idXR0b24iLGU9bmV3IGModGhpcyxmKSksInRvZ2dsZSI9PWI/ZS50b2dnbGUoKTpiJiZlLnNldFN0YXRlKGIpfSl9dmFyIGM9ZnVuY3Rpb24oYixkKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy5pc0xvYWRpbmc9ITF9O2MuVkVSU0lPTj0iMy4zLjUiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sYy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYil7dmFyIGM9ImRpc2FibGVkIixkPXRoaXMuJGVsZW1lbnQsZT1kLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIixmPWQuZGF0YSgpO2IrPSJUZXh0IixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKCJyZXNldFRleHQiLGRbZV0oKSksc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtlXShudWxsPT1mW2JdP3RoaXMub3B0aW9uc1tiXTpmW2JdKSwibG9hZGluZ1RleHQiPT1iPyh0aGlzLmlzTG9hZGluZz0hMCxkLmFkZENsYXNzKGMpLmF0dHIoYyxjKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykpfSx0aGlzKSwwKX0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGE9ITAsYj10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyk7aWYoYi5sZW5ndGgpe3ZhciBjPXRoaXMuJGVsZW1lbnQuZmluZCgiaW5wdXQiKTsicmFkaW8iPT1jLnByb3AoInR5cGUiKT8oYy5wcm9wKCJjaGVja2VkIikmJihhPSExKSxiLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiYWN0aXZlIikpOiJjaGVja2JveCI9PWMucHJvcCgidHlwZSIpJiYoYy5wcm9wKCJjaGVja2VkIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSYmKGE9ITEpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpKSxjLnByb3AoImNoZWNrZWQiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSxhJiZjLnRyaWdnZXIoImNoYW5nZSIpfWVsc2UgdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBkPWEuZm4uYnV0dG9uO2EuZm4uYnV0dG9uPWIsYS5mbi5idXR0b24uQ29uc3RydWN0b3I9YyxhLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYnV0dG9uPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKGMudGFyZ2V0KTtkLmhhc0NsYXNzKCJidG4iKXx8KGQ9ZC5jbG9zZXN0KCIuYnRuIikpLGIuY2FsbChkLCJ0b2dnbGUiKSxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0icmFkaW8iXScpfHxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0iY2hlY2tib3giXScpfHxjLnByZXZlbnREZWZhdWx0KCl9KS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmNsb3Nlc3QoIi5idG4iKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QoYi50eXBlKSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmNhcm91c2VsIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYiksZz0ic3RyaW5nIj09dHlwZW9mIGI/YjpmLnNsaWRlO2V8fGQuZGF0YSgiYnMuY2Fyb3VzZWwiLGU9bmV3IGModGhpcyxmKSksIm51bWJlciI9PXR5cGVvZiBiP2UudG8oYik6Zz9lW2ddKCk6Zi5pbnRlcnZhbCYmZS5wYXVzZSgpLmN5Y2xlKCl9KX12YXIgYz1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9Yyx0aGlzLnBhdXNlZD1udWxsLHRoaXMuc2xpZGluZz1udWxsLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzLiRhY3RpdmU9bnVsbCx0aGlzLiRpdGVtcz1udWxsLHRoaXMub3B0aW9ucy5rZXlib2FyZCYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93bi5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLCJob3ZlciI9PXRoaXMub3B0aW9ucy5wYXVzZSYmISgib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj02MDAsYy5ERUZBVUxUUz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oIi5pdGVtIiksdGhpcy4kaXRlbXMuaW5kZXgoYXx8dGhpcy4kYWN0aXZlKX0sYy5wcm90b3R5cGUuZ2V0SXRlbUZvckRpcmVjdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0SXRlbUluZGV4KGIpLGQ9InByZXYiPT1hJiYwPT09Y3x8Im5leHQiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9InByZXYiPT1hPy0xOjEsZj0oYytlKSV0aGlzLiRpdGVtcy5sZW5ndGg7cmV0dXJuIHRoaXMuJGl0ZW1zLmVxKGYpfSxjLnByb3RvdHlwZS50bz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9dGhpcy5nZXRJdGVtSW5kZXgodGhpcy4kYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIikpO3JldHVybiBhPnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHwwPmE/dm9pZCAwOnRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZC5icy5jYXJvdXNlbCIsZnVuY3Rpb24oKXtiLnRvKGEpfSk6Yz09YT90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGE+Yz8ibmV4dCI6InByZXYiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uJiYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSghMCkpLHRoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgibmV4dCIpfSxjLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgicHJldiIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksZj1kfHx0aGlzLmdldEl0ZW1Gb3JEaXJlY3Rpb24oYixlKSxnPXRoaXMuaW50ZXJ2YWwsaD0ibmV4dCI9PWI/ImxlZnQiOiJyaWdodCIsaT10aGlzO2lmKGYuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybiB0aGlzLnNsaWRpbmc9ITE7dmFyIGo9ZlswXSxrPWEuRXZlbnQoInNsaWRlLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7dmFyIGw9YSh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgoZildKTtsJiZsLmFkZENsYXNzKCJhY3RpdmUiKX12YXIgbT1hLkV2ZW50KCJzbGlkLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJzbGlkZSIpPyhmLmFkZENsYXNzKGIpLGZbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhoKSxmLmFkZENsYXNzKGgpLGUub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKSxlLnJlbW92ZUNsYXNzKFsiYWN0aXZlIixoXS5qb2luKCIgIikpLGkuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS4kZWxlbWVudC50cmlnZ2VyKG0pfSwwKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTikpOihlLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxmLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKCJkYXRhLXRhcmdldCIpfHwoZD1lLmF0dHIoImhyZWYiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSk7aWYoZi5oYXNDbGFzcygiY2Fyb3VzZWwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKCJkYXRhLXNsaWRlLXRvIik7aCYmKGcuaW50ZXJ2YWw9ITEpLGIuY2FsbChmLGcpLGgmJmYuZGF0YSgiYnMuY2Fyb3VzZWwiKS50byhoKSxjLnByZXZlbnREZWZhdWx0KCl9fTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGUpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlLXRvXSIsZSksYSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGU9ImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKTtiLmNhbGwoYyxjLmRhdGEoKSl9KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cigiZGF0YS10YXJnZXQiKXx8KGM9Yi5hdHRyKCJocmVmIikpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIik7cmV0dXJuIGEoZCl9ZnVuY3Rpb24gYyhiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YSgiYnMuY29sbGFwc2UiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTshZSYmZi50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoYikmJihmLnRvZ2dsZT0hMSksZXx8Yy5kYXRhKCJicy5jb2xsYXBzZSIsZT1uZXcgZCh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2hyZWY9IiMnK2IuaWQrJyJdLFtkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXRhcmdldD0iIycrYi5pZCsnIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07ZC5WRVJTSU9OPSIzLjMuNSIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTM1MCxkLkRFRkFVTFRTPXt0b2dnbGU6ITB9LGQucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoIndpZHRoIik7cmV0dXJuIGE/IndpZHRoIjoiaGVpZ2h0In0sZC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKCIucGFuZWwiKS5jaGlsZHJlbigiLmluLCAuY29sbGFwc2luZyIpO2lmKCEoZSYmZS5sZW5ndGgmJihiPWUuZGF0YSgiYnMuY29sbGFwc2UiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudCgic2hvdy5icy5jb2xsYXBzZSIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihmKSwhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmZS5sZW5ndGgmJihjLmNhbGwoZSwiaGlkZSIpLGJ8fGUuZGF0YSgiYnMuY29sbGFwc2UiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKVtnXSgwKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBoPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpW2ddKCIiKSx0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNob3duLmJzLmNvbGxhcHNlIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixnXS5qb2luKCItIikpO3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBiPWEuRXZlbnQoImhpZGUuYnMuY29sbGFwc2UiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBjPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudFtjXSh0aGlzLiRlbGVtZW50W2NdKCkpWzBdLm9mZnNldEhlaWdodCx0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJjb2xsYXBzaW5nIikucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLHRoaXMuJHRyaWdnZXIuYWRkQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgZT1mdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKS5hZGRDbGFzcygiY29sbGFwc2UiKS50cmlnZ2VyKCJoaWRkZW4uYnMuY29sbGFwc2UiKX07cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uP3ZvaWQgdGhpcy4kZWxlbWVudFtjXSgwKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eShlLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pOmUuY2FsbCh0aGlzKX19fSxkLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX0sZC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtcGFyZW50PSInK3RoaXMub3B0aW9ucy5wYXJlbnQrJyJdJykuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShkKTt0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhiKGUpLGUpfSx0aGlzKSkuZW5kKCl9LGQucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuaGFzQ2xhc3MoImluIik7YS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKSxiLnRvZ2dsZUNsYXNzKCJjb2xsYXBzZWQiLCFjKS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKX07dmFyIGU9YS5mbi5jb2xsYXBzZTthLmZuLmNvbGxhcHNlPWMsYS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1kLGEuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNvbGxhcHNlPWUsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmNvbGxhcHNlLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdJyxmdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2UuYXR0cigiZGF0YS10YXJnZXQiKXx8ZC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWIoZSksZz1mLmRhdGEoImJzLmNvbGxhcHNlIiksaD1nPyJ0b2dnbGUiOmUuZGF0YSgpO2MuY2FsbChmLGgpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3ZhciBjPWIuYXR0cigiZGF0YS10YXJnZXQiKTtjfHwoYz1iLmF0dHIoImhyZWYiKSxjPWMmJi8jW0EtWmEtel0vLnRlc3QoYykmJmMucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGQ9YyYmYShjKTtyZXR1cm4gZCYmZC5sZW5ndGg/ZDpiLnBhcmVudCgpfWZ1bmN0aW9uIGMoYyl7YyYmMz09PWMud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1iKGQpLGY9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS5oYXNDbGFzcygib3BlbiIpJiYoYyYmImNsaWNrIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudCgiaGlkZS5icy5kcm9wZG93biIsZikpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fChkLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUucmVtb3ZlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJoaWRkZW4uYnMuZHJvcGRvd24iLGYpKSkpfSkpfWZ1bmN0aW9uIGQoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoImJzLmRyb3Bkb3duIik7ZHx8Yy5kYXRhKCJicy5kcm9wZG93biIsZD1uZXcgZyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZkW2JdLmNhbGwoYyl9KX12YXIgZT0iLmRyb3Bkb3duLWJhY2tkcm9wIixmPSdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nLGc9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2suYnMuZHJvcGRvd24iLHRoaXMudG9nZ2xlKX07Zy5WRVJTSU9OPSIzLjMuNSIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBmPWIoZSksZz1mLmhhc0NsYXNzKCJvcGVuIik7aWYoYygpLCFnKXsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdCgiLm5hdmJhci1uYXYiKS5sZW5ndGgmJmEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJkcm9wZG93bi1iYWNrZHJvcCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIsYyk7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsaCkpLGQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2UudHJpZ2dlcigiZm9jdXMiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGYudG9nZ2xlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJzaG93bi5icy5kcm9wZG93biIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGMpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGMud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSl7dmFyIGQ9YSh0aGlzKTtpZihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhZC5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7dmFyIGU9YihkKSxnPWUuaGFzQ2xhc3MoIm9wZW4iKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoImZvY3VzIiksZC50cmlnZ2VyKCJjbGljayIpO3ZhciBoPSIgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhIixpPWUuZmluZCgiLmRyb3Bkb3duLW1lbnUiK2gpO2lmKGkubGVuZ3RoKXt2YXIgaj1pLmluZGV4KGMudGFyZ2V0KTszOD09Yy53aGljaCYmaj4wJiZqLS0sNDA9PWMud2hpY2gmJmo8aS5sZW5ndGgtMSYmaisrLH5qfHwoaj0wKSxpLmVxKGopLnRyaWdnZXIoImZvY3VzIil9fX19O3ZhciBoPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1kLGEuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9ZyxhLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5kcm9wZG93bj1oLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsYykub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsZixnLnByb3RvdHlwZS5rZXlkb3duKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93bi1tZW51IixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YSgiYnMubW9kYWwiKSxnPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZS5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoImJzLm1vZGFsIixmPW5ldyBjKHRoaXMsZykpLCJzdHJpbmciPT10eXBlb2YgYj9mW2JdKGQpOmcuc2hvdyYmZi5zaG93KGQpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbnM9Yyx0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGRpYWxvZz10aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1kaWFsb2ciKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1jb250ZW50IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoImxvYWRlZC5icy5tb2RhbCIpfSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoInNob3cuYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3dufHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoIm1vZGFsLW9wZW4iKSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuJGVsZW1lbnQub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSksZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLGQuYWRqdXN0RGlhbG9nKCksZSYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxkLiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLGQuZW5mb3JjZUZvY3VzKCk7dmFyIGY9YS5FdmVudCgic2hvd24uYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihmKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZC4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudCgiaGlkZS5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSx0aGlzLmlzU2hvd24mJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSxhKGRvY3VtZW50KS5vZmYoImZvY3VzaW4uYnMubW9kYWwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLm9mZigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIpLm9mZigibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsIiksdGhpcy4kZGlhbG9nLm9mZigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9LGMucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLm9uKCJmb2N1c2luLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMuJGVsZW1lbnRbMF09PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoYS50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpfSx0aGlzKSl9LGMucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP2Eod2luZG93KS5vbigicmVzaXplLmJzLm1vZGFsIixhLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTphKHdpbmRvdykub2ZmKCJyZXNpemUuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcygibW9kYWwtb3BlbiIpLGEucmVzZXRBZGp1c3RtZW50cygpLGEucmVzZXRTY3JvbGxiYXIoKSxhLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbi5icy5tb2RhbCIpfSl9LGMucHJvdG90eXBlLnJlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGMucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgZj1hLnN1cHBvcnQudHJhbnNpdGlvbiYmZTtpZih0aGlzLiRiYWNrZHJvcD1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygibW9kYWwtYmFja2Ryb3AgIitlKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s/dm9pZCh0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEpOnZvaWQoYS50YXJnZXQ9PT1hLmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIiksIWIpcmV0dXJuO2Y/dGhpcy4kYmFja2Ryb3Aub25lKCJic1RyYW5zaXRpb25FbmQiLGIpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6YigpfWVsc2UgaWYoIXRoaXMuaXNTaG93biYmdGhpcy4kYmFja2Ryb3Ape3RoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCJpbiIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZykuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpnKCl9ZWxzZSBiJiZiKCl9LGMucHJvdG90eXBlLmhhbmRsZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuYWRqdXN0RGlhbG9nKCl9LGMucHJvdG90eXBlLmFkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiF0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiJ9KX0sYy5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDoiIixwYWRkaW5nUmlnaHQ6IiJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0Iil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHwiIix0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZ0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxjLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9Im1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGU9ZC5hdHRyKCJocmVmIiksZj1hKGQuYXR0cigiZGF0YS10YXJnZXQiKXx8ZSYmZS5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxnPWYuZGF0YSgiYnMubW9kYWwiKT8idG9nZ2xlIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoImEiKSYmYy5wcmV2ZW50RGVmYXVsdCgpLGYub25lKCJzaG93LmJzLm1vZGFsIixmdW5jdGlvbihhKXthLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLm9uZSgiaGlkZGVuLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuaXMoIjp2aXNpYmxlIikmJmQudHJpZ2dlcigiZm9jdXMiKX0pfSksYi5jYWxsKGYsZyx0aGlzKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMudG9vbHRpcCIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnRvb2x0aXAiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KCJ0b29sdGlwIixhLGIpfTtjLlZFUlNJT049IjMuMy41IixjLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGMuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOiJib2R5IixwYWRkaW5nOjB9fSxjLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGIsYyxkKXtpZih0aGlzLmVuYWJsZWQ9ITAsdGhpcy50eXBlPWIsdGhpcy4kZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz10aGlzLmdldE9wdGlvbnMoZCksdGhpcy4kdmlld3BvcnQ9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZhKGEuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMudmlld3BvcnQpP3RoaXMub3B0aW9ucy52aWV3cG9ydC5jYWxsKHRoaXMsdGhpcy4kZWxlbWVudCk6dGhpcy5vcHRpb25zLnZpZXdwb3J0LnNlbGVjdG9yfHx0aGlzLm9wdGlvbnMudmlld3BvcnQpLHRoaXMuaW5TdGF0ZT17Y2xpY2s6ITEsaG92ZXI6ITEsZm9jdXM6ITF9LHRoaXMuJGVsZW1lbnRbMF1pbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yJiYhdGhpcy5vcHRpb25zLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcigiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgIit0aGlzLnR5cGUrIiBvbiB0aGUgd2luZG93LmRvY3VtZW50IG9iamVjdCEiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKSxmPWUubGVuZ3RoO2YtLTspe3ZhciBnPWVbZl07aWYoImNsaWNrIj09Zyl0aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZigibWFudWFsIiE9Zyl7dmFyIGg9ImhvdmVyIj09Zz8ibW91c2VlbnRlciI6ImZvY3VzaW4iLGk9ImhvdmVyIj09Zz8ibW91c2VsZWF2ZSI6ImZvY3Vzb3V0Ijt0aGlzLiRlbGVtZW50Lm9uKGgrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGkrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5maXhUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGIpe3JldHVybiBiPWEuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxiKSxiLmRlbGF5JiYibnVtYmVyIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlWyJmb2N1c2luIj09Yi50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITApLGMudGlwKCkuaGFzQ2xhc3MoImluIil8fCJpbiI9PWMuaG92ZXJTdGF0ZT92b2lkKGMuaG92ZXJTdGF0ZT0iaW4iKTooY2xlYXJUaW1lb3V0KGMudGltZW91dCksYy5ob3ZlclN0YXRlPSJpbiIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ImluIj09Yy5ob3ZlclN0YXRlJiZjLnNob3coKX0sYy5vcHRpb25zLmRlbGF5LnNob3cpKTpjLnNob3coKSl9LGMucHJvdG90eXBlLmlzSW5TdGF0ZVRydWU9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5pblN0YXRlKWlmKHRoaXMuaW5TdGF0ZVthXSlyZXR1cm4hMDtyZXR1cm4hMX0sYy5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oYil7dmFyIGM9YiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/YjphKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpO3JldHVybiBjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVsiZm9jdXNvdXQiPT1iLnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMSksYy5pc0luU3RhdGVUcnVlKCk/dm9pZCAwOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9Im91dCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuaGlkZT92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Im91dCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCkpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudCgic2hvdy5icy4iK3RoaXMudHlwZSk7aWYodGhpcy5oYXNDb250ZW50KCkmJnRoaXMuZW5hYmxlZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpO3ZhciBkPWEuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhZClyZXR1cm47dmFyIGU9dGhpcyxmPXRoaXMudGlwKCksZz10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLGYuYXR0cigiaWQiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZyksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmZi5hZGRDbGFzcygiZmFkZSIpO3ZhciBoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9ccz9hdXRvP1xzPy9pLGo9aS50ZXN0KGgpO2omJihoPWgucmVwbGFjZShpLCIiKXx8InRvcCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYWRkQ2xhc3MoaCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9mLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOmYuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJpbnNlcnRlZC5icy4iK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPSJib3R0b20iPT1oJiZrLmJvdHRvbSttPm8uYm90dG9tPyJ0b3AiOiJ0b3AiPT1oJiZrLnRvcC1tPG8udG9wPyJib3R0b20iOiJyaWdodCI9PWgmJmsucmlnaHQrbD5vLndpZHRoPyJsZWZ0IjoibGVmdCI9PWgmJmsubGVmdC1sPG8ubGVmdD8icmlnaHQiOmgsZi5yZW1vdmVDbGFzcyhuKS5hZGRDbGFzcyhoKX12YXIgcD10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoaCxrLGwsbSk7dGhpcy5hcHBseVBsYWNlbWVudChwLGgpO3ZhciBxPWZ1bmN0aW9uKCl7dmFyIGE9ZS5ob3ZlclN0YXRlO2UuJGVsZW1lbnQudHJpZ2dlcigic2hvd24uYnMuIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLCJvdXQiPT1hJiZlLmxlYXZlKGUpfTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLDEwKSxoPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tbGVmdCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wKz1nLGIubGVmdCs9aCxhLm9mZnNldC5zZXRPZmZzZXQoZFswXSxhLmV4dGVuZCh7dXNpbmc6ZnVuY3Rpb24oYSl7ZC5jc3Moe3RvcDpNYXRoLnJvdW5kKGEudG9wKSxsZWZ0Ok1hdGgucm91bmQoYS5sZWZ0KX0pfX0sYiksMCksZC5hZGRDbGFzcygiaW4iKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7InRvcCI9PWMmJmohPWYmJihiLnRvcD1iLnRvcCtmLWopO3ZhciBrPXRoaXMuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhKGMsYixpLGopO2subGVmdD9iLmxlZnQrPWsubGVmdDpiLnRvcCs9ay50b3A7dmFyIGw9L3RvcHxib3R0b20vLnRlc3QoYyksbT1sPzIqay5sZWZ0LWUraToyKmsudG9wLWYraixuPWw/Im9mZnNldFdpZHRoIjoib2Zmc2V0SGVpZ2h0IjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjPyJsZWZ0IjoidG9wIiw1MCooMS1hL2IpKyIlIikuY3NzKGM/InRvcCI6ImxlZnQiLCIiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGIpLGEucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZCgpeyJpbiIhPWUuaG92ZXJTdGF0ZSYmZi5kZXRhY2goKSxlLiRlbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKS50cmlnZ2VyKCJoaWRkZW4uYnMuIitlLnR5cGUpLGImJmIoKX12YXIgZT10aGlzLGY9YSh0aGlzLiR0aXApLGc9YS5FdmVudCgiaGlkZS5icy4iK3RoaXMudHlwZSk7cmV0dXJuIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSxnLmlzRGVmYXVsdFByZXZlbnRlZCgpP3ZvaWQgMDooZi5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5oYXNDbGFzcygiZmFkZSIpP2Yub25lKCJic1RyYW5zaXRpb25FbmQiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMpfSxjLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiBhLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSkmJmEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsYS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9IkJPRFkiPT1jLnRhZ05hbWUsZT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO251bGw9PWUud2lkdGgmJihlPWEuZXh0ZW5kKHt9LGUse3dpZHRoOmUucmlnaHQtZS5sZWZ0LGhlaWdodDplLmJvdHRvbS1lLnRvcH0pKTt2YXIgZj1kP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCksZz17c2Nyb2xsOmQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6Yi5zY3JvbGxUb3AoKX0saD1kP3t3aWR0aDphKHdpbmRvdykud2lkdGgoKSxoZWlnaHQ6YSh3aW5kb3cpLmhlaWdodCgpfTpudWxsO3JldHVybiBhLmV4dGVuZCh7fSxlLGcsaCxmKX0sYy5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4iYm90dG9tIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJ0b3AiPT1hP3t0b3A6Yi50b3AtZCxsZWZ0OmIubGVmdCtiLndpZHRoLzItYy8yfToibGVmdCI9PWE/e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdC1jfTp7dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0K2Iud2lkdGh9fSxjLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e3RvcDowLGxlZnQ6MH07aWYoIXRoaXMuJHZpZXdwb3J0KXJldHVybiBlO3ZhciBmPXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdGhpcy5vcHRpb25zLnZpZXdwb3J0LnBhZGRpbmd8fDAsZz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtpZigvcmlnaHR8bGVmdC8udGVzdChhKSl7dmFyIGg9Yi50b3AtZi1nLnNjcm9sbCxpPWIudG9wK2YtZy5zY3JvbGwrZDtoPGcudG9wP2UudG9wPWcudG9wLWg6aT5nLnRvcCtnLmhlaWdodCYmKGUudG9wPWcudG9wK2cuaGVpZ2h0LWkpfWVsc2V7dmFyIGo9Yi5sZWZ0LWYsaz1iLmxlZnQrZitjO2o8Zy5sZWZ0P2UubGVmdD1nLmxlZnQtajprPmcucmlnaHQmJihlLmxlZnQ9Zy5sZWZ0K2cud2lkdGgtayl9cmV0dXJuIGV9LGMucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIGMudGl0bGU/Yy50aXRsZS5jYWxsKGJbMF0pOmMudGl0bGUpfSxjLnByb3RvdHlwZS5nZXRVSUQ9ZnVuY3Rpb24oYSl7ZG8gYSs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpO3doaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTtyZXR1cm4gYX0sYy5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJHRpcCYmKHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSksMSE9dGhpcy4kdGlwLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZSsiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhIik7cmV0dXJuIHRoaXMuJHRpcH0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSksY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxjKSkpLGI/KGMuaW5TdGF0ZS5jbGljaz0hYy5pblN0YXRlLmNsaWNrLGMuaXNJblN0YXRlVHJ1ZSgpP2MuZW50ZXIoYyk6Yy5sZWF2ZShjKSk6Yy50aXAoKS5oYXNDbGFzcygiaW4iKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKCIuIithLnR5cGUpLnJlbW92ZURhdGEoImJzLiIrYS50eXBlKSxhLiR0aXAmJmEuJHRpcC5kZXRhY2goKSxhLiR0aXA9bnVsbCxhLiRhcnJvdz1udWxsLGEuJHZpZXdwb3J0PW51bGx9KX07dmFyIGQ9YS5mbi50b29sdGlwO2EuZm4udG9vbHRpcD1iLGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1jLGEuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udG9vbHRpcD1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMucG9wb3ZlciIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnBvcG92ZXIiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoInBvcG92ZXIiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtjLlZFUlNJT049IjMuMy41IixjLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksYy5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShiKSxhLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQiKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW3RoaXMub3B0aW9ucy5odG1sPyJzdHJpbmciPT10eXBlb2YgYz8iaHRtbCI6ImFwcGVuZCI6InRleHQiXShjKSxhLnJlbW92ZUNsYXNzKCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbiIpLGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5odG1sKCl8fGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cigiZGF0YS1jb250ZW50Iil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYi5jb250ZW50P2IuY29udGVudC5jYWxsKGFbMF0pOmIuY29udGVudCl9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi5hcnJvdyIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGMsZCl7dGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9YShhKGMpLmlzKGRvY3VtZW50LmJvZHkpP3dpbmRvdzpjKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYi5ERUZBVUxUUyxkKSx0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbigic2Nyb2xsLmJzLnNjcm9sbHNweSIsYS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpLHRoaXMucmVmcmVzaCgpLHRoaXMucHJvY2VzcygpfWZ1bmN0aW9uIGMoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLnNjcm9sbHNweSIpLGY9Im9iamVjdCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YSgiYnMuc2Nyb2xsc3B5IixlPW5ldyBiKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYyYmZVtjXSgpfSl9Yi5WRVJTSU9OPSIzLjMuNSIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPSJvZmZzZXQiLGQ9MDt0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksYS5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKXx8KGM9InBvc2l0aW9uIixkPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGU9Yi5kYXRhKCJ0YXJnZXQiKXx8Yi5hdHRyKCJocmVmIiksZj0vXiMuLy50ZXN0KGUpJiZhKGUpO3JldHVybiBmJiZmLmxlbmd0aCYmZi5pcygiOnZpc2libGUiKSYmW1tmW2NdKCkudG9wK2QsZV1dfHxudWxsfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yi5vZmZzZXRzLnB1c2godGhpc1swXSksYi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sYi5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGM9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQrYy10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGU9dGhpcy5vZmZzZXRzLGY9dGhpcy50YXJnZXRzLGc9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWMmJnRoaXMucmVmcmVzaCgpLGI+PWQpcmV0dXJuIGchPShhPWZbZi5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGEpO2lmKGcmJmI8ZVswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGE9ZS5sZW5ndGg7YS0tOylnIT1mW2FdJiZiPj1lW2FdJiYodm9pZCAwPT09ZVthKzFdfHxiPGVbYSsxXSkmJnRoaXMuYWN0aXZhdGUoZlthXSl9LGIucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIpe3RoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytiKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2IrJyJdJyxkPWEoYykucGFyZW50cygibGkiKS5hZGRDbGFzcygiYWN0aXZlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoZD1kLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSwKZC50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLnNjcm9sbHNweTthLmZuLnNjcm9sbHNweT1jLGEuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWIsYS5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnNjcm9sbHNweT1kLHRoaXN9LGEod2luZG93KS5vbigibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2MuY2FsbChiLGIuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50YWIiKTtlfHxkLmRhdGEoImJzLnRhYiIsZT1uZXcgYyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQ9YShiKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmRhdGEoInRhcmdldCIpO2lmKGR8fChkPWIuYXR0cigiaHJlZiIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwhYi5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXt2YXIgZT1jLmZpbmQoIi5hY3RpdmU6bGFzdCBhIiksZj1hLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6YlswXX0pLGc9YS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KTtpZihlLnRyaWdnZXIoZiksYi50cmlnZ2VyKGcpLCFnLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGg9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpiWzBdfSksYi50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pfSl9fX0sYy5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYixkLGUpe2Z1bmN0aW9uIGYoKXtnLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLGIuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksaD8oYlswXS5vZmZzZXRXaWR0aCxiLmFkZENsYXNzKCJpbiIpKTpiLnJlbW92ZUNsYXNzKCJmYWRlIiksYi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksZSYmZSgpfXZhciBnPWQuZmluZCgiPiAuYWN0aXZlIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKCJmYWRlIil8fCEhZC5maW5kKCI+IC5mYWRlIikubGVuZ3RoKTtnLmxlbmd0aCYmaD9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgZD1hLmZuLnRhYjthLmZuLnRhYj1iLGEuZm4udGFiLkNvbnN0cnVjdG9yPWMsYS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRhYj1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSwic2hvdyIpfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXScsZSkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0icGlsbCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmFmZml4IiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5hZmZpeCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy4kdGFyZ2V0PWEodGhpcy5vcHRpb25zLnRhcmdldCkub24oInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuUkVTRVQ9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmInRvcCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gYz5lPyJ0b3AiOiExO2lmKCJib3R0b20iPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWM/ZSt0aGlzLnVucGluPD1mLnRvcD8hMToiYm90dG9tIjphLWQ+PWUrZz8hMToiYm90dG9tIjt2YXIgaD1udWxsPT10aGlzLmFmZml4ZWQsaT1oP2U6Zi50b3Asaj1oP2c6YjtyZXR1cm4gbnVsbCE9YyYmYz49ZT8idG9wIjpudWxsIT1kJiZpK2o+PWEtZD8iYm90dG9tIjohMX0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGE9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGI9dGhpcy4kZWxlbWVudC5vZmZzZXQoKTtyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ9Yi50b3AtYX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3A9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7dmFyIGI9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1kLnRvcCxmPWQuYm90dG9tLGc9TWF0aC5tYXgoYShkb2N1bWVudCkuaGVpZ2h0KCksYShkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7Im9iamVjdCIhPXR5cGVvZiBkJiYoZj1lPWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1kLnRvcCh0aGlzLiRlbGVtZW50KSksImZ1bmN0aW9uIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoInRvcCIsIiIpO3ZhciBpPSJhZmZpeCIrKGg/Ii0iK2g6IiIpLGo9YS5FdmVudChpKyIuYnMuYWZmaXgiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj0iYm90dG9tIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZSgiYWZmaXgiLCJhZmZpeGVkIikrIi5icy5hZmZpeCIpfSJib3R0b20iPT1oJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmctYi1mfSl9fTt2YXIgZD1hLmZuLmFmZml4O2EuZm4uYWZmaXg9YixhLmZuLmFmZml4LkNvbnN0cnVjdG9yPWMsYS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWZmaXg9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7"></script>
<script src="data:application/x-javascript;base64,LyoqCiogQHByZXNlcnZlIEhUTUw1IFNoaXYgMy43LjIgfCBAYWZhcmthcyBAamRhbHRvbiBAam9uX25lYWwgQHJlbSB8IE1JVC9HUEwyIExpY2Vuc2VkCiovCi8vIE9ubHkgcnVuIHRoaXMgY29kZSBpbiBJRSA4CmlmICghIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJNU0lFIDgiKSkgewohZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGQoKXt2YXIgYT10LmVsZW1lbnRzO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT9hLnNwbGl0KCIgIik6YX1mdW5jdGlvbiBlKGEsYil7dmFyIGM9dC5lbGVtZW50czsic3RyaW5nIiE9dHlwZW9mIGMmJihjPWMuam9pbigiICIpKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEuam9pbigiICIpKSx0LmVsZW1lbnRzPWMrIiAiK2EsaihiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPXNbYVtxXV07cmV0dXJuIGJ8fChiPXt9LHIrKyxhW3FdPXIsc1tyXT1iKSxifWZ1bmN0aW9uIGcoYSxjLGQpe2lmKGN8fChjPWIpLGwpcmV0dXJuIGMuY3JlYXRlRWxlbWVudChhKTtkfHwoZD1mKGMpKTt2YXIgZTtyZXR1cm4gZT1kLmNhY2hlW2FdP2QuY2FjaGVbYV0uY2xvbmVOb2RlKCk6cC50ZXN0KGEpPyhkLmNhY2hlW2FdPWQuY3JlYXRlRWxlbShhKSkuY2xvbmVOb2RlKCk6ZC5jcmVhdGVFbGVtKGEpLCFlLmNhbkhhdmVDaGlsZHJlbnx8by50ZXN0KGEpfHxlLnRhZ1Vybj9lOmQuZnJhZy5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBoKGEsYyl7aWYoYXx8KGE9YiksbClyZXR1cm4gYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yz1jfHxmKGEpO2Zvcih2YXIgZT1jLmZyYWcuY2xvbmVOb2RlKCksZz0wLGg9ZCgpLGk9aC5sZW5ndGg7aT5nO2crKyllLmNyZWF0ZUVsZW1lbnQoaFtnXSk7cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIpe2IuY2FjaGV8fChiLmNhY2hlPXt9LGIuY3JlYXRlRWxlbT1hLmNyZWF0ZUVsZW1lbnQsYi5jcmVhdGVGcmFnPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxiLmZyYWc9Yi5jcmVhdGVGcmFnKCkpLGEuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihjKXtyZXR1cm4gdC5zaGl2TWV0aG9kcz9nKGMsYSxiKTpiLmNyZWF0ZUVsZW0oYyl9LGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD1GdW5jdGlvbigiaCxmIiwicmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49Zi5jbG9uZU5vZGUoKSxjPW4uY3JlYXRlRWxlbWVudDtoLnNoaXZNZXRob2RzJiYoIitkKCkuam9pbigpLnJlcGxhY2UoL1tcd1wtOl0rL2csZnVuY3Rpb24oYSl7cmV0dXJuIGIuY3JlYXRlRWxlbShhKSxiLmZyYWcuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKSh0LGIuZnJhZyl9ZnVuY3Rpb24gaihhKXthfHwoYT1iKTt2YXIgZD1mKGEpO3JldHVybiF0LnNoaXZDU1N8fGt8fGQuaGFzQ1NTfHwoZC5oYXNDU1M9ISFjKGEsImFydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfXRlbXBsYXRle2Rpc3BsYXk6bm9uZX0iKSksbHx8aShhLGQpLGF9dmFyIGssbCxtPSIzLjcuMiIsbj1hLmh0bWw1fHx7fSxvPS9ePHxeKD86YnV0dG9ufG1hcHxzZWxlY3R8dGV4dGFyZWF8b2JqZWN0fGlmcmFtZXxvcHRpb258b3B0Z3JvdXApJC9pLHA9L14oPzphfGJ8Y29kZXxkaXZ8ZmllbGRzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aXxsYWJlbHxsaXxvbHxwfHF8c3BhbnxzdHJvbmd8c3R5bGV8dGFibGV8dGJvZHl8dGR8dGh8dHJ8dWwpJC9pLHE9Il9odG1sNXNoaXYiLHI9MCxzPXt9OyFmdW5jdGlvbigpe3RyeXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGs9ImhpZGRlbiJpbiBhLGw9MT09YS5jaGlsZE5vZGVzLmxlbmd0aHx8ZnVuY3Rpb24oKXtiLmNyZWF0ZUVsZW1lbnQoImEiKTt2YXIgYT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuY2xvbmVOb2RlfHwidW5kZWZpbmVkIj09dHlwZW9mIGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8InVuZGVmaW5lZCI9PXR5cGVvZiBhLmNyZWF0ZUVsZW1lbnR9KCl9Y2F0Y2goYyl7az0hMCxsPSEwfX0oKTt2YXIgdD17ZWxlbWVudHM6bi5lbGVtZW50c3x8ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcGljdHVyZSBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGVtcGxhdGUgdGltZSB2aWRlbyIsdmVyc2lvbjptLHNoaXZDU1M6bi5zaGl2Q1NTIT09ITEsc3VwcG9ydHNVbmtub3duRWxlbWVudHM6bCxzaGl2TWV0aG9kczpuLnNoaXZNZXRob2RzIT09ITEsdHlwZToiZGVmYXVsdCIsc2hpdkRvY3VtZW50OmosY3JlYXRlRWxlbWVudDpnLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6aCxhZGRFbGVtZW50czplfTthLmh0bWw1PXQsaihiKX0odGhpcyxkb2N1bWVudCk7Cn07Cg=="></script>
<script src="data:application/x-javascript;base64,LyohIFJlc3BvbmQuanMgdjEuNC4yOiBtaW4vbWF4LXdpZHRoIG1lZGlhIHF1ZXJ5IHBvbHlmaWxsICogQ29weXJpZ2h0IDIwMTMgU2NvdHQgSmVobAogKiBMaWNlbnNlZCB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRqZWhsL1Jlc3BvbmQvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVQKICogICovCgovLyBPbmx5IHJ1biB0aGlzIGNvZGUgaW4gSUUgOAppZiAoISF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgiTVNJRSA4IikpIHsKIWZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLm1hdGNoTWVkaWE9YS5tYXRjaE1lZGlhfHxmdW5jdGlvbihhKXt2YXIgYixjPWEuZG9jdW1lbnRFbGVtZW50LGQ9Yy5maXJzdEVsZW1lbnRDaGlsZHx8Yy5maXJzdENoaWxkLGU9YS5jcmVhdGVFbGVtZW50KCJib2R5IiksZj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmLmlkPSJtcS10ZXN0LTEiLGYuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDBlbSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIixlLmFwcGVuZENoaWxkKGYpLGZ1bmN0aW9uKGEpe3JldHVybiBmLmlubmVySFRNTD0nJnNoeTs8c3R5bGUgbWVkaWE9IicrYSsnIj4gI21xLXRlc3QtMSB7IHdpZHRoOiA0MnB4OyB9PC9zdHlsZT4nLGMuaW5zZXJ0QmVmb3JlKGUsZCksYj00Mj09PWYub2Zmc2V0V2lkdGgsYy5yZW1vdmVDaGlsZChlKSx7bWF0Y2hlczpiLG1lZGlhOmF9fX0oYS5kb2N1bWVudCl9KHRoaXMpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dSghMCl9dmFyIGM9e307YS5yZXNwb25kPWMsYy51cGRhdGU9ZnVuY3Rpb24oKXt9O3ZhciBkPVtdLGU9ZnVuY3Rpb24oKXt2YXIgYj0hMTt0cnl7Yj1uZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChjKXtiPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSgpLGY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1lKCk7YyYmKGMub3BlbigiR0VUIixhLCEwKSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQhPT1jLnJlYWR5U3RhdGV8fDIwMCE9PWMuc3RhdHVzJiYzMDQhPT1jLnN0YXR1c3x8YihjLnJlc3BvbnNlVGV4dCl9LDQhPT1jLnJlYWR5U3RhdGUmJmMuc2VuZChudWxsKSl9O2lmKGMuYWpheD1mLGMucXVldWU9ZCxjLnJlZ2V4PXttZWRpYTovQG1lZGlhW15ce10rXHsoW15ce1x9XSpce1teXH1ce10qXH0pKy9naSxrZXlmcmFtZXM6L0AoPzpcLSg/Om98bW96fHdlYmtpdClcLSk/a2V5ZnJhbWVzW15ce10rXHsoPzpbXlx7XH1dKlx7W15cfVx7XSpcfSkrW15cfV0qXH0vZ2ksdXJsczovKHVybFwoKVsnIl0/KFteXC9cKSciXVteOlwpJyJdKylbJyJdPyhcKSkvZyxmaW5kU3R5bGVzOi9AbWVkaWEgKihbXlx7XSspXHsoW1xTXHNdKz8pJC8sb25seTovKG9ubHlccyspPyhbYS16QS1aXSspXHM/LyxtaW53Oi9cKFtcc10qbWluXC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpLyxtYXh3Oi9cKFtcc10qbWF4XC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpL30sYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQ9YS5tYXRjaE1lZGlhJiZudWxsIT09YS5tYXRjaE1lZGlhKCJvbmx5IGFsbCIpJiZhLm1hdGNoTWVkaWEoIm9ubHkgYWxsIikubWF0Y2hlcywhYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQpe3ZhciBnLGgsaSxqPWEuZG9jdW1lbnQsaz1qLmRvY3VtZW50RWxlbWVudCxsPVtdLG09W10sbj1bXSxvPXt9LHA9MzAscT1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGsscj1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0scz1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIiksdD1mdW5jdGlvbigpe3ZhciBhLGI9ai5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWouYm9keSxkPWsuc3R5bGUuZm9udFNpemUsZT1jJiZjLnN0eWxlLmZvbnRTaXplLGY9ITE7cmV0dXJuIGIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjFlbTt3aWR0aDoxZW0iLGN8fChjPWY9ai5jcmVhdGVFbGVtZW50KCJib2R5IiksYy5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIiksay5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5hcHBlbmRDaGlsZChiKSxmJiZrLmluc2VydEJlZm9yZShjLGsuZmlyc3RDaGlsZCksYT1iLm9mZnNldFdpZHRoLGY/ay5yZW1vdmVDaGlsZChjKTpjLnJlbW92ZUNoaWxkKGIpLGsuc3R5bGUuZm9udFNpemU9ZCxlJiYoYy5zdHlsZS5mb250U2l6ZT1lKSxhPWk9cGFyc2VGbG9hdChhKX0sdT1mdW5jdGlvbihiKXt2YXIgYz0iY2xpZW50V2lkdGgiLGQ9a1tjXSxlPSJDU1MxQ29tcGF0Ij09PWouY29tcGF0TW9kZSYmZHx8ai5ib2R5W2NdfHxkLGY9e30sbz1zW3MubGVuZ3RoLTFdLHI9KG5ldyBEYXRlKS5nZXRUaW1lKCk7aWYoYiYmZyYmcD5yLWcpcmV0dXJuIGEuY2xlYXJUaW1lb3V0KGgpLGg9YS5zZXRUaW1lb3V0KHUscCksdm9pZCAwO2c9cjtmb3IodmFyIHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXt2YXIgdz1sW3ZdLHg9dy5taW53LHk9dy5tYXh3LHo9bnVsbD09PXgsQT1udWxsPT09eSxCPSJlbSI7eCYmKHg9cGFyc2VGbG9hdCh4KSooeC5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSkseSYmKHk9cGFyc2VGbG9hdCh5KSooeS5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSksdy5oYXNxdWVyeSYmKHomJkF8fCEoenx8ZT49eCl8fCEoQXx8eT49ZSkpfHwoZlt3Lm1lZGlhXXx8KGZbdy5tZWRpYV09W10pLGZbdy5tZWRpYV0ucHVzaChtW3cucnVsZXNdKSl9Zm9yKHZhciBDIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShDKSYmbltDXSYmbltDXS5wYXJlbnROb2RlPT09cSYmcS5yZW1vdmVDaGlsZChuW0NdKTtuLmxlbmd0aD0wO2Zvcih2YXIgRCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoRCkpe3ZhciBFPWouY3JlYXRlRWxlbWVudCgic3R5bGUiKSxGPWZbRF0uam9pbigiXG4iKTtFLnR5cGU9InRleHQvY3NzIixFLm1lZGlhPUQscS5pbnNlcnRCZWZvcmUoRSxvLm5leHRTaWJsaW5nKSxFLnN0eWxlU2hlZXQ/RS5zdHlsZVNoZWV0LmNzc1RleHQ9RjpFLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4dE5vZGUoRikpLG4ucHVzaChFKX19LHY9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEucmVwbGFjZShjLnJlZ2V4LmtleWZyYW1lcywiIikubWF0Y2goYy5yZWdleC5tZWRpYSksZj1lJiZlLmxlbmd0aHx8MDtiPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKTt2YXIgZz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGMucmVnZXgudXJscywiJDEiK2IrIiQyJDMiKX0saD0hZiYmZDtiLmxlbmd0aCYmKGIrPSIvIiksaCYmKGY9MSk7Zm9yKHZhciBpPTA7Zj5pO2krKyl7dmFyIGosayxuLG87aD8oaj1kLG0ucHVzaChnKGEpKSk6KGo9ZVtpXS5tYXRjaChjLnJlZ2V4LmZpbmRTdHlsZXMpJiZSZWdFeHAuJDEsbS5wdXNoKFJlZ0V4cC4kMiYmZyhSZWdFeHAuJDIpKSksbj1qLnNwbGl0KCIsIiksbz1uLmxlbmd0aDtmb3IodmFyIHA9MDtvPnA7cCsrKWs9bltwXSxsLnB1c2goe21lZGlhOmsuc3BsaXQoIigiKVswXS5tYXRjaChjLnJlZ2V4Lm9ubHkpJiZSZWdFeHAuJDJ8fCJhbGwiLHJ1bGVzOm0ubGVuZ3RoLTEsaGFzcXVlcnk6ay5pbmRleE9mKCIoIik+LTEsbWludzprLm1hdGNoKGMucmVnZXgubWludykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIiksbWF4dzprLm1hdGNoKGMucmVnZXgubWF4dykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIil9KX11KCl9LHc9ZnVuY3Rpb24oKXtpZihkLmxlbmd0aCl7dmFyIGI9ZC5zaGlmdCgpO2YoYi5ocmVmLGZ1bmN0aW9uKGMpe3YoYyxiLmhyZWYsYi5tZWRpYSksb1tiLmhyZWZdPSEwLGEuc2V0VGltZW91dChmdW5jdGlvbigpe3coKX0sMCl9KX19LHg9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIGM9c1tiXSxlPWMuaHJlZixmPWMubWVkaWEsZz1jLnJlbCYmInN0eWxlc2hlZXQiPT09Yy5yZWwudG9Mb3dlckNhc2UoKTtlJiZnJiYhb1tlXSYmKGMuc3R5bGVTaGVldCYmYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQ/KHYoYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQsZSxmKSxvW2VdPSEwKTooIS9eKFthLXpBLVo6XSpcL1wvKS8udGVzdChlKSYmIXJ8fGUucmVwbGFjZShSZWdFeHAuJDEsIiIpLnNwbGl0KCIvIilbMF09PT1hLmxvY2F0aW9uLmhvc3QpJiYoIi8vIj09PWUuc3Vic3RyaW5nKDAsMikmJihlPWEubG9jYXRpb24ucHJvdG9jb2wrZSksZC5wdXNoKHtocmVmOmUsbWVkaWE6Zn0pKSl9dygpfTt4KCksYy51cGRhdGU9eCxjLmdldEVtVmFsdWU9dCxhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGIsITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixiKX19KHRoaXMpOwp9Owo="></script>
<script src="data:application/x-javascript;base64,CgovKioKICogalF1ZXJ5IFBsdWdpbjogU3RpY2t5IFRhYnMKICoKICogQGF1dGhvciBBaWRhbiBMaXN0ZXIgPGFpZGFuQHBocC5uZXQ+CiAqIGFkYXB0ZWQgYnkgUnViZW4gQXJzbGFuIHRvIGFjdGl2YXRlIHBhcmVudCB0YWJzIHRvbwogKiBodHRwOi8vd3d3LmFpZGFubGlzdGVyLmNvbS8yMDE0LzAzL3BlcnNpc3RpbmctdGhlLXRhYi1zdGF0ZS1pbi1ib290c3RyYXAvCiAqLwooZnVuY3Rpb24oJCkgewogICJ1c2Ugc3RyaWN0IjsKICAkLmZuLnJtYXJrZG93blN0aWNreVRhYnMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBjb250ZXh0ID0gdGhpczsKICAgIC8vIFNob3cgdGhlIHRhYiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGhhc2ggaW4gdGhlIFVSTCwgb3IgdGhlIGZpcnN0IHRhYgogICAgdmFyIHNob3dTdHVmZkZyb21IYXNoID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CiAgICAgIHZhciBzZWxlY3RvciA9IGhhc2ggPyAnYVtocmVmPSInICsgaGFzaCArICciXScgOiAnbGkuYWN0aXZlID4gYSc7CiAgICAgIHZhciAkc2VsZWN0b3IgPSAkKHNlbGVjdG9yLCBjb250ZXh0KTsKICAgICAgaWYoJHNlbGVjdG9yLmRhdGEoJ3RvZ2dsZScpID09PSAidGFiIikgewogICAgICAgICRzZWxlY3Rvci50YWIoJ3Nob3cnKTsKICAgICAgICAvLyB3YWxrIHVwIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBlbGVtZW50LCBzaG93IGFueSBoaWRkZW4gdGFicwogICAgICAgICRzZWxlY3Rvci5wYXJlbnRzKCcuc2VjdGlvbi50YWJzZXQnKS5lYWNoKGZ1bmN0aW9uKGksIGVsbSkgewogICAgICAgICAgdmFyIGxpbmsgPSAkKCdhW2hyZWY9IiMnICsgJChlbG0pLmF0dHIoJ2lkJykgKyAnIl0nKTsKICAgICAgICAgIGlmKGxpbmsuZGF0YSgndG9nZ2xlJykgPT09ICJ0YWIiKSB7CiAgICAgICAgICAgIGxpbmsudGFiKCJzaG93Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CgoKICAgIC8vIFNldCB0aGUgY29ycmVjdCB0YWIgd2hlbiB0aGUgcGFnZSBsb2FkcwogICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CgogICAgLy8gU2V0IHRoZSBjb3JyZWN0IHRhYiB3aGVuIGEgdXNlciB1c2VzIHRoZWlyIGJhY2svZm9yd2FyZCBidXR0b24KICAgICQod2luZG93KS5vbignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICBzaG93U3R1ZmZGcm9tSGFzaChjb250ZXh0KTsKICAgIH0pOwoKICAgIC8vIENoYW5nZSB0aGUgVVJMIHdoZW4gdGFicyBhcmUgY2xpY2tlZAogICAgJCgnYScsIGNvbnRleHQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5ocmVmKTsKICAgICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CiAgICB9KTsKCiAgICByZXR1cm4gdGhpczsKICB9Owp9KGpRdWVyeSkpOwoKd2luZG93LmJ1aWxkVGFic2V0cyA9IGZ1bmN0aW9uKHRvY0lEKSB7CgogIC8vIGJ1aWxkIGEgdGFic2V0IGZyb20gYSBzZWN0aW9uIGRpdiB3aXRoIHRoZSAudGFic2V0IGNsYXNzCiAgZnVuY3Rpb24gYnVpbGRUYWJzZXQodGFic2V0KSB7CgogICAgLy8gY2hlY2sgZm9yIGZhZGUgYW5kIHBpbGxzIG9wdGlvbnMKICAgIHZhciBmYWRlID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtZmFkZSIpOwogICAgdmFyIHBpbGxzID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtcGlsbHMiKTsKICAgIHZhciBuYXZDbGFzcyA9IHBpbGxzID8gIm5hdi1waWxscyIgOiAibmF2LXRhYnMiOwoKICAgIC8vIGRldGVybWluZSB0aGUgaGVhZGluZyBsZXZlbCBvZiB0aGUgdGFic2V0IGFuZCB0YWJzCiAgICB2YXIgbWF0Y2ggPSB0YWJzZXQuYXR0cignY2xhc3MnKS5tYXRjaCgvbGV2ZWwoXGQpIC8pOwogICAgaWYgKG1hdGNoID09PSBudWxsKQogICAgICByZXR1cm47CiAgICB2YXIgdGFic2V0TGV2ZWwgPSBOdW1iZXIobWF0Y2hbMV0pOwogICAgdmFyIHRhYkxldmVsID0gdGFic2V0TGV2ZWwgKyAxOwoKICAgIC8vIGZpbmQgYWxsIHN1YmhlYWRpbmdzIGltbWVkaWF0ZWx5IGJlbG93CiAgICB2YXIgdGFicyA9IHRhYnNldC5maW5kKCJkaXYuc2VjdGlvbi5sZXZlbCIgKyB0YWJMZXZlbCk7CiAgICBpZiAoIXRhYnMubGVuZ3RoKQogICAgICByZXR1cm47CgogICAgLy8gY3JlYXRlIHRhYmxpc3QgYW5kIHRhYi1jb250ZW50IGVsZW1lbnRzCiAgICB2YXIgdGFiTGlzdCA9ICQoJzx1bCBjbGFzcz0ibmF2ICcgKyBuYXZDbGFzcyArICciIHJvbGU9InRhYmxpc3QiPjwvdWw+Jyk7CiAgICAkKHRhYnNbMF0pLmJlZm9yZSh0YWJMaXN0KTsKICAgIHZhciB0YWJDb250ZW50ID0gJCgnPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPjwvZGl2PicpOwogICAgJCh0YWJzWzBdKS5iZWZvcmUodGFiQ29udGVudCk7CgogICAgLy8gYnVpbGQgdGhlIHRhYnNldAogICAgdmFyIGFjdGl2ZVRhYiA9IDA7CiAgICB0YWJzLmVhY2goZnVuY3Rpb24oaSkgewoKICAgICAgLy8gZ2V0IHRoZSB0YWIgZGl2CiAgICAgIHZhciB0YWIgPSAkKHRhYnNbaV0pOwoKICAgICAgLy8gZ2V0IHRoZSBpZCB0aGVuIHNhbml0aXplIGl0IGZvciB1c2Ugd2l0aCBib290c3RyYXAgdGFicwogICAgICB2YXIgaWQgPSB0YWIuYXR0cignaWQnKTsKCiAgICAgIC8vIHNlZSBpZiB0aGlzIGlzIG1hcmtlZCBhcyB0aGUgYWN0aXZlIHRhYgogICAgICBpZiAodGFiLmhhc0NsYXNzKCdhY3RpdmUnKSkKICAgICAgICBhY3RpdmVUYWIgPSBpOwoKICAgICAgLy8gcmVtb3ZlIGFueSB0YWJsZSBvZiBjb250ZW50cyBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aAogICAgICAvLyB0aGlzIElEIChzaW5jZSB3ZSdsbCBiZSByZW1vdmluZyB0aGUgaGVhZGluZyBlbGVtZW50KQogICAgICAkKCJkaXYjIiArIHRvY0lEICsgIiBsaSBhW2hyZWY9JyMiICsgaWQgKyAiJ10iKS5wYXJlbnQoKS5yZW1vdmUoKTsKCiAgICAgIC8vIHNhbml0aXplIHRoZSBpZCBmb3IgdXNlIHdpdGggYm9vdHN0cmFwIHRhYnMKICAgICAgaWQgPSBpZC5yZXBsYWNlKC9bLlwvPyYhIzw+XS9nLCAnJykucmVwbGFjZSgvXHMvZywgJ18nKTsKICAgICAgdGFiLmF0dHIoJ2lkJywgaWQpOwoKICAgICAgLy8gZ2V0IHRoZSBoZWFkaW5nIGVsZW1lbnQgd2l0aGluIGl0LCBncmFiIGl0J3MgdGV4dCwgdGhlbiByZW1vdmUgaXQKICAgICAgdmFyIGhlYWRpbmcgPSB0YWIuZmluZCgnaCcgKyB0YWJMZXZlbCArICc6Zmlyc3QnKTsKICAgICAgdmFyIGhlYWRpbmdUZXh0ID0gaGVhZGluZy5odG1sKCk7CiAgICAgIGhlYWRpbmcucmVtb3ZlKCk7CgogICAgICAvLyBidWlsZCBhbmQgYXBwZW5kIHRoZSB0YWIgbGlzdCBpdGVtCiAgICAgIHZhciBhID0gJCgnPGEgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4nICsgaGVhZGluZ1RleHQgKyAnPC9hPicpOwogICAgICBhLmF0dHIoJ2hyZWYnLCAnIycgKyBpZCk7CiAgICAgIGEuYXR0cignYXJpYS1jb250cm9scycsIGlkKTsKICAgICAgdmFyIGxpID0gJCgnPGxpIHJvbGU9InByZXNlbnRhdGlvbiI+PC9saT4nKTsKICAgICAgbGkuYXBwZW5kKGEpOwogICAgICB0YWJMaXN0LmFwcGVuZChsaSk7CgogICAgICAvLyBzZXQgaXQncyBhdHRyaWJ1dGVzCiAgICAgIHRhYi5hdHRyKCdyb2xlJywgJ3RhYnBhbmVsJyk7CiAgICAgIHRhYi5hZGRDbGFzcygndGFiLXBhbmUnKTsKICAgICAgdGFiLmFkZENsYXNzKCd0YWJiZWQtcGFuZScpOwogICAgICBpZiAoZmFkZSkKICAgICAgICB0YWIuYWRkQ2xhc3MoJ2ZhZGUnKTsKCiAgICAgIC8vIG1vdmUgaXQgaW50byB0aGUgdGFiIGNvbnRlbnQgZGl2CiAgICAgIHRhYi5kZXRhY2goKS5hcHBlbmRUbyh0YWJDb250ZW50KTsKICAgIH0pOwoKICAgIC8vIHNldCBhY3RpdmUgdGFiCiAgICAkKHRhYkxpc3QuY2hpbGRyZW4oJ2xpJylbYWN0aXZlVGFiXSkuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgdmFyIGFjdGl2ZSA9ICQodGFiQ29udGVudC5jaGlsZHJlbignZGl2LnNlY3Rpb24nKVthY3RpdmVUYWJdKTsKICAgIGFjdGl2ZS5hZGRDbGFzcygnYWN0aXZlJyk7CiAgICBpZiAoZmFkZSkKICAgICAgYWN0aXZlLmFkZENsYXNzKCdpbicpOwoKICAgIGlmICh0YWJzZXQuaGFzQ2xhc3MoInRhYnNldC1zdGlja3kiKSkKICAgICAgdGFic2V0LnJtYXJrZG93blN0aWNreVRhYnMoKTsKICB9CgogIC8vIGNvbnZlcnQgc2VjdGlvbiBkaXZzIHdpdGggdGhlIC50YWJzZXQgY2xhc3MgdG8gdGFic2V0cwogIHZhciB0YWJzZXRzID0gJCgiZGl2LnNlY3Rpb24udGFic2V0Iik7CiAgdGFic2V0cy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgIGJ1aWxkVGFic2V0KCQodGFic2V0c1tpXSkpOwogIH0pOwp9OwoK"></script>
<link href="data:text/css;charset=utf-8,pre%20%2Eoperator%2C%0Apre%20%2Eparen%20%7B%0Acolor%3A%20rgb%28104%2C%20118%2C%20135%29%0A%7D%0Apre%20%2Eliteral%20%7B%0Acolor%3A%20%23990073%0A%7D%0Apre%20%2Enumber%20%7B%0Acolor%3A%20%23099%3B%0A%7D%0Apre%20%2Ecomment%20%7B%0Acolor%3A%20%23998%3B%0Afont%2Dstyle%3A%20italic%0A%7D%0Apre%20%2Ekeyword%20%7B%0Acolor%3A%20%23900%3B%0Afont%2Dweight%3A%20bold%0A%7D%0Apre%20%2Eidentifier%20%7B%0Acolor%3A%20rgb%280%2C%200%2C%200%29%3B%0A%7D%0Apre%20%2Estring%20%7B%0Acolor%3A%20%23d14%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,dmFyIGhsanM9bmV3IGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShwKXtyZXR1cm4gcC5yZXBsYWNlKC8mL2dtLCImYW1wOyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKX1mdW5jdGlvbiBmKHIscSxwKXtyZXR1cm4gUmVnRXhwKHEsIm0iKyhyLmNJPyJpIjoiIikrKHA/ImciOiIiKSl9ZnVuY3Rpb24gYihyKXtmb3IodmFyIHA9MDtwPHIuY2hpbGROb2Rlcy5sZW5ndGg7cCsrKXt2YXIgcT1yLmNoaWxkTm9kZXNbcF07aWYocS5ub2RlTmFtZT09IkNPREUiKXtyZXR1cm4gcX1pZighKHEubm9kZVR5cGU9PTMmJnEubm9kZVZhbHVlLm1hdGNoKC9ccysvKSkpe2JyZWFrfX19ZnVuY3Rpb24gaCh0LHMpe3ZhciBwPSIiO2Zvcih2YXIgcj0wO3I8dC5jaGlsZE5vZGVzLmxlbmd0aDtyKyspe2lmKHQuY2hpbGROb2Rlc1tyXS5ub2RlVHlwZT09Myl7dmFyIHE9dC5jaGlsZE5vZGVzW3JdLm5vZGVWYWx1ZTtpZihzKXtxPXEucmVwbGFjZSgvXG4vZywiIil9cCs9cX1lbHNle2lmKHQuY2hpbGROb2Rlc1tyXS5ub2RlTmFtZT09IkJSIil7cCs9IlxuIn1lbHNle3ArPWgodC5jaGlsZE5vZGVzW3JdKX19fWlmKC9NU0lFIFs2NzhdLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXtwPXAucmVwbGFjZSgvXHIvZywiXG4iKX1yZXR1cm4gcH1mdW5jdGlvbiBhKHMpe3ZhciByPXMuY2xhc3NOYW1lLnNwbGl0KC9ccysvKTtyPXIuY29uY2F0KHMucGFyZW50Tm9kZS5jbGFzc05hbWUuc3BsaXQoL1xzKy8pKTtmb3IodmFyIHE9MDtxPHIubGVuZ3RoO3ErKyl7dmFyIHA9cltxXS5yZXBsYWNlKC9ebGFuZ3VhZ2UtLywiIik7aWYoZVtwXSl7cmV0dXJuIHB9fX1mdW5jdGlvbiBjKHEpe3ZhciBwPVtdOyhmdW5jdGlvbihzLHQpe2Zvcih2YXIgcj0wO3I8cy5jaGlsZE5vZGVzLmxlbmd0aDtyKyspe2lmKHMuY2hpbGROb2Rlc1tyXS5ub2RlVHlwZT09Myl7dCs9cy5jaGlsZE5vZGVzW3JdLm5vZGVWYWx1ZS5sZW5ndGh9ZWxzZXtpZihzLmNoaWxkTm9kZXNbcl0ubm9kZU5hbWU9PSJCUiIpe3QrPTF9ZWxzZXtpZihzLmNoaWxkTm9kZXNbcl0ubm9kZVR5cGU9PTEpe3AucHVzaCh7ZXZlbnQ6InN0YXJ0IixvZmZzZXQ6dCxub2RlOnMuY2hpbGROb2Rlc1tyXX0pO3Q9YXJndW1lbnRzLmNhbGxlZShzLmNoaWxkTm9kZXNbcl0sdCk7cC5wdXNoKHtldmVudDoic3RvcCIsb2Zmc2V0OnQsbm9kZTpzLmNoaWxkTm9kZXNbcl19KX19fX1yZXR1cm4gdH0pKHEsMCk7cmV0dXJuIHB9ZnVuY3Rpb24gayh5LHcseCl7dmFyIHE9MDt2YXIgej0iIjt2YXIgcz1bXTtmdW5jdGlvbiB1KCl7aWYoeS5sZW5ndGgmJncubGVuZ3RoKXtpZih5WzBdLm9mZnNldCE9d1swXS5vZmZzZXQpe3JldHVybih5WzBdLm9mZnNldDx3WzBdLm9mZnNldCk/eTp3fWVsc2V7cmV0dXJuIHdbMF0uZXZlbnQ9PSJzdGFydCI/eTp3fX1lbHNle3JldHVybiB5Lmxlbmd0aD95Ond9fWZ1bmN0aW9uIHQoRCl7dmFyIEE9IjwiK0Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtmb3IodmFyIEI9MDtCPEQuYXR0cmlidXRlcy5sZW5ndGg7QisrKXt2YXIgQz1ELmF0dHJpYnV0ZXNbQl07QSs9IiAiK0Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihDLnZhbHVlIT09dW5kZWZpbmVkJiZDLnZhbHVlIT09ZmFsc2UmJkMudmFsdWUhPT1udWxsKXtBKz0nPSInK20oQy52YWx1ZSkrJyInfX1yZXR1cm4gQSsiPiJ9d2hpbGUoeS5sZW5ndGh8fHcubGVuZ3RoKXt2YXIgdj11KCkuc3BsaWNlKDAsMSlbMF07eis9bSh4LnN1YnN0cihxLHYub2Zmc2V0LXEpKTtxPXYub2Zmc2V0O2lmKHYuZXZlbnQ9PSJzdGFydCIpe3orPXQodi5ub2RlKTtzLnB1c2godi5ub2RlKX1lbHNle2lmKHYuZXZlbnQ9PSJzdG9wIil7dmFyIHAscj1zLmxlbmd0aDtkb3tyLS07cD1zW3JdO3orPSgiPC8iK3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKSsiPiIpfXdoaWxlKHAhPXYubm9kZSk7cy5zcGxpY2UociwxKTt3aGlsZShyPHMubGVuZ3RoKXt6Kz10KHNbcl0pO3IrK319fX1yZXR1cm4geittKHguc3Vic3RyKHEpKX1mdW5jdGlvbiBqKCl7ZnVuY3Rpb24gcSh4LHksdil7aWYoeC5jb21waWxlZCl7cmV0dXJufXZhciB1O3ZhciBzPVtdO2lmKHguayl7eC5sUj1mKHkseC5sfHxobGpzLklSLHRydWUpO2Zvcih2YXIgdyBpbiB4Lmspe2lmKCF4LmsuaGFzT3duUHJvcGVydHkodykpe2NvbnRpbnVlfWlmKHgua1t3XSBpbnN0YW5jZW9mIE9iamVjdCl7dT14Lmtbd119ZWxzZXt1PXguazt3PSJrZXl3b3JkIn1mb3IodmFyIHIgaW4gdSl7aWYoIXUuaGFzT3duUHJvcGVydHkocikpe2NvbnRpbnVlfXgua1tyXT1bdyx1W3JdXTtzLnB1c2gocil9fX1pZighdil7aWYoeC5iV0spe3guYj0iXFxiKCIrcy5qb2luKCJ8IikrIilcXHMifXguYlI9Zih5LHguYj94LmI6IlxcQnxcXGIiKTtpZigheC5lJiYheC5lVyl7eC5lPSJcXEJ8XFxiIn1pZih4LmUpe3guZVI9Zih5LHguZSl9fWlmKHguaSl7eC5pUj1mKHkseC5pKX1pZih4LnI9PT11bmRlZmluZWQpe3gucj0xfWlmKCF4LmMpe3guYz1bXX14LmNvbXBpbGVkPXRydWU7Zm9yKHZhciB0PTA7dDx4LmMubGVuZ3RoO3QrKyl7aWYoeC5jW3RdPT0ic2VsZiIpe3guY1t0XT14fXEoeC5jW3RdLHksZmFsc2UpfWlmKHguc3RhcnRzKXtxKHguc3RhcnRzLHksZmFsc2UpfX1mb3IodmFyIHAgaW4gZSl7aWYoIWUuaGFzT3duUHJvcGVydHkocCkpe2NvbnRpbnVlfXEoZVtwXS5kTSxlW3BdLHRydWUpfX1mdW5jdGlvbiBkKEIsQyl7aWYoIWouY2FsbGVkKXtqKCk7ai5jYWxsZWQ9dHJ1ZX1mdW5jdGlvbiBxKHIsTSl7Zm9yKHZhciBMPTA7TDxNLmMubGVuZ3RoO0wrKyl7aWYoKE0uY1tMXS5iUi5leGVjKHIpfHxbbnVsbF0pWzBdPT1yKXtyZXR1cm4gTS5jW0xdfX19ZnVuY3Rpb24gdihMLHIpe2lmKERbTF0uZSYmRFtMXS5lUi50ZXN0KHIpKXtyZXR1cm4gMX1pZihEW0xdLmVXKXt2YXIgTT12KEwtMSxyKTtyZXR1cm4gTT9NKzE6MH1yZXR1cm4gMH1mdW5jdGlvbiB3KHIsTCl7cmV0dXJuIEwuaSYmTC5pUi50ZXN0KHIpfWZ1bmN0aW9uIEsoTixPKXt2YXIgTT1bXTtmb3IodmFyIEw9MDtMPE4uYy5sZW5ndGg7TCsrKXtNLnB1c2goTi5jW0xdLmIpfXZhciByPUQubGVuZ3RoLTE7ZG97aWYoRFtyXS5lKXtNLnB1c2goRFtyXS5lKX1yLS19d2hpbGUoRFtyKzFdLmVXKTtpZihOLmkpe00ucHVzaChOLmkpfXJldHVybiBmKE8sTS5qb2luKCJ8IiksdHJ1ZSl9ZnVuY3Rpb24gcChNLEwpe3ZhciBOPURbRC5sZW5ndGgtMV07aWYoIU4udCl7Ti50PUsoTixFKX1OLnQubGFzdEluZGV4PUw7dmFyIHI9Ti50LmV4ZWMoTSk7cmV0dXJuIHI/W00uc3Vic3RyKEwsci5pbmRleC1MKSxyWzBdLGZhbHNlXTpbTS5zdWJzdHIoTCksIiIsdHJ1ZV19ZnVuY3Rpb24geihOLHIpe3ZhciBMPUUuY0k/clswXS50b0xvd2VyQ2FzZSgpOnJbMF07dmFyIE09Ti5rW0xdO2lmKE0mJk0gaW5zdGFuY2VvZiBBcnJheSl7cmV0dXJuIE19cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIEYoTCxQKXtMPW0oTCk7aWYoIVAuayl7cmV0dXJuIEx9dmFyIHI9IiI7dmFyIE89MDtQLmxSLmxhc3RJbmRleD0wO3ZhciBNPVAubFIuZXhlYyhMKTt3aGlsZShNKXtyKz1MLnN1YnN0cihPLE0uaW5kZXgtTyk7dmFyIE49eihQLE0pO2lmKE4pe3grPU5bMV07cis9JzxzcGFuIGNsYXNzPSInK05bMF0rJyI+JytNWzBdKyI8L3NwYW4+In1lbHNle3IrPU1bMF19Tz1QLmxSLmxhc3RJbmRleDtNPVAubFIuZXhlYyhMKX1yZXR1cm4gcitMLnN1YnN0cihPLEwubGVuZ3RoLU8pfWZ1bmN0aW9uIEooTCxNKXtpZihNLnNMJiZlW00uc0xdKXt2YXIgcj1kKE0uc0wsTCk7eCs9ci5rZXl3b3JkX2NvdW50O3JldHVybiByLnZhbHVlfWVsc2V7cmV0dXJuIEYoTCxNKX19ZnVuY3Rpb24gSShNLHIpe3ZhciBMPU0uY04/JzxzcGFuIGNsYXNzPSInK00uY04rJyI+JzoiIjtpZihNLnJCKXt5Kz1MO00uYnVmZmVyPSIifWVsc2V7aWYoTS5lQil7eSs9bShyKStMO00uYnVmZmVyPSIifWVsc2V7eSs9TDtNLmJ1ZmZlcj1yfX1ELnB1c2goTSk7QSs9TS5yfWZ1bmN0aW9uIEcoTixNLFEpe3ZhciBSPURbRC5sZW5ndGgtMV07aWYoUSl7eSs9SihSLmJ1ZmZlcitOLFIpO3JldHVybiBmYWxzZX12YXIgUD1xKE0sUik7aWYoUCl7eSs9SihSLmJ1ZmZlcitOLFIpO0koUCxNKTtyZXR1cm4gUC5yQn12YXIgTD12KEQubGVuZ3RoLTEsTSk7aWYoTCl7dmFyIE89Ui5jTj8iPC9zcGFuPiI6IiI7aWYoUi5yRSl7eSs9SihSLmJ1ZmZlcitOLFIpK099ZWxzZXtpZihSLmVFKXt5Kz1KKFIuYnVmZmVyK04sUikrTyttKE0pfWVsc2V7eSs9SihSLmJ1ZmZlcitOK00sUikrT319d2hpbGUoTD4xKXtPPURbRC5sZW5ndGgtMl0uY04/Ijwvc3Bhbj4iOiIiO3krPU87TC0tO0QubGVuZ3RoLS19dmFyIHI9RFtELmxlbmd0aC0xXTtELmxlbmd0aC0tO0RbRC5sZW5ndGgtMV0uYnVmZmVyPSIiO2lmKHIuc3RhcnRzKXtJKHIuc3RhcnRzLCIiKX1yZXR1cm4gUi5yRX1pZih3KE0sUikpe3Rocm93IklsbGVnYWwifX12YXIgRT1lW0JdO3ZhciBEPVtFLmRNXTt2YXIgQT0wO3ZhciB4PTA7dmFyIHk9IiI7dHJ5e3ZhciBzLHU9MDtFLmRNLmJ1ZmZlcj0iIjtkb3tzPXAoQyx1KTt2YXIgdD1HKHNbMF0sc1sxXSxzWzJdKTt1Kz1zWzBdLmxlbmd0aDtpZighdCl7dSs9c1sxXS5sZW5ndGh9fXdoaWxlKCFzWzJdKTtpZihELmxlbmd0aD4xKXt0aHJvdyJJbGxlZ2FsIn1yZXR1cm57cjpBLGtleXdvcmRfY291bnQ6eCx2YWx1ZTp5fX1jYXRjaChIKXtpZihIPT0iSWxsZWdhbCIpe3JldHVybntyOjAsa2V5d29yZF9jb3VudDowLHZhbHVlOm0oQyl9fWVsc2V7dGhyb3cgSH19fWZ1bmN0aW9uIGcodCl7dmFyIHA9e2tleXdvcmRfY291bnQ6MCxyOjAsdmFsdWU6bSh0KX07dmFyIHI9cDtmb3IodmFyIHEgaW4gZSl7aWYoIWUuaGFzT3duUHJvcGVydHkocSkpe2NvbnRpbnVlfXZhciBzPWQocSx0KTtzLmxhbmd1YWdlPXE7aWYocy5rZXl3b3JkX2NvdW50K3Mucj5yLmtleXdvcmRfY291bnQrci5yKXtyPXN9aWYocy5rZXl3b3JkX2NvdW50K3Mucj5wLmtleXdvcmRfY291bnQrcC5yKXtyPXA7cD1zfX1pZihyLmxhbmd1YWdlKXtwLnNlY29uZF9iZXN0PXJ9cmV0dXJuIHB9ZnVuY3Rpb24gaShyLHEscCl7aWYocSl7cj1yLnJlcGxhY2UoL14oKDxbXj5dKz58XHQpKykvZ20sZnVuY3Rpb24odCx3LHYsdSl7cmV0dXJuIHcucmVwbGFjZSgvXHQvZyxxKX0pfWlmKHApe3I9ci5yZXBsYWNlKC9cbi9nLCI8YnI+Iil9cmV0dXJuIHJ9ZnVuY3Rpb24gbih0LHcscil7dmFyIHg9aCh0LHIpO3ZhciB2PWEodCk7dmFyIHkscztpZih2KXt5PWQodix4KX1lbHNle3JldHVybn12YXIgcT1jKHQpO2lmKHEubGVuZ3RoKXtzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpO3MuaW5uZXJIVE1MPXkudmFsdWU7eS52YWx1ZT1rKHEsYyhzKSx4KX15LnZhbHVlPWkoeS52YWx1ZSx3LHIpO3ZhciB1PXQuY2xhc3NOYW1lO2lmKCF1Lm1hdGNoKCIoXFxzfF4pKGxhbmd1YWdlLSk/Iit2KyIoXFxzfCQpIikpe3U9dT8odSsiICIrdik6dn1pZigvTVNJRSBbNjc4XS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdC50YWdOYW1lPT0iQ09ERSImJnQucGFyZW50Tm9kZS50YWdOYW1lPT0iUFJFIil7cz10LnBhcmVudE5vZGU7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cC5pbm5lckhUTUw9IjxwcmU+PGNvZGU+Iit5LnZhbHVlKyI8L2NvZGU+PC9wcmU+Ijt0PXAuZmlyc3RDaGlsZC5maXJzdENoaWxkO3AuZmlyc3RDaGlsZC5jTj1zLmNOO3MucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocC5maXJzdENoaWxkLHMpfWVsc2V7dC5pbm5lckhUTUw9eS52YWx1ZX10LmNsYXNzTmFtZT11O3QucmVzdWx0PXtsYW5ndWFnZTp2LGt3Onkua2V5d29yZF9jb3VudCxyZTp5LnJ9O2lmKHkuc2Vjb25kX2Jlc3Qpe3Quc2Vjb25kX2Jlc3Q9e2xhbmd1YWdlOnkuc2Vjb25kX2Jlc3QubGFuZ3VhZ2Usa3c6eS5zZWNvbmRfYmVzdC5rZXl3b3JkX2NvdW50LHJlOnkuc2Vjb25kX2Jlc3Qucn19fWZ1bmN0aW9uIG8oKXtpZihvLmNhbGxlZCl7cmV0dXJufW8uY2FsbGVkPXRydWU7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgcT1iKHJbcF0pO2lmKHEpe24ocSxobGpzLnRhYlJlcGxhY2UpfX19ZnVuY3Rpb24gbCgpe2lmKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsbyxmYWxzZSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG8sZmFsc2UpfWVsc2V7aWYod2luZG93LmF0dGFjaEV2ZW50KXt3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsbyl9ZWxzZXt3aW5kb3cub25sb2FkPW99fX12YXIgZT17fTt0aGlzLkxBTkdVQUdFUz1lO3RoaXMuaGlnaGxpZ2h0PWQ7dGhpcy5oaWdobGlnaHRBdXRvPWc7dGhpcy5maXhNYXJrdXA9aTt0aGlzLmhpZ2hsaWdodEJsb2NrPW47dGhpcy5pbml0SGlnaGxpZ2h0aW5nPW87dGhpcy5pbml0SGlnaGxpZ2h0aW5nT25Mb2FkPWw7dGhpcy5JUj0iW2EtekEtWl1bYS16QS1aMC05X10qIjt0aGlzLlVJUj0iW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7dGhpcy5OUj0iXFxiXFxkKyhcXC5cXGQrKT8iO3RoaXMuQ05SPSJcXGIoMFt4WF1bYS1mQS1GMC05XSt8KFxcZCsoXFwuXFxkKik/fFxcLlxcZCspKFtlRV1bLStdP1xcZCspPykiO3RoaXMuQk5SPSJcXGIoMGJbMDFdKykiO3RoaXMuUlNSPSIhfCE9fCE9PXwlfCU9fCZ8JiZ8Jj18XFwqfFxcKj18XFwrfFxcKz18LHxcXC58LXwtPXwvfC89fDp8O3w8fDw8fDw8PXw8PXw9fD09fD09PXw+fD49fD4+fD4+PXw+Pj58Pj4+PXxcXD98XFxbfFxce3xcXCh8XFxefFxcXj18XFx8fFxcfD18XFx8XFx8fH4iO3RoaXMuRVI9Iig/IVtcXHNcXFNdKSI7dGhpcy5CRT17YjoiXFxcXC4iLHI6MH07dGhpcy5BU009e2NOOiJzdHJpbmciLGI6IiciLGU6IiciLGk6IlxcbiIsYzpbdGhpcy5CRV0scjowfTt0aGlzLlFTTT17Y046InN0cmluZyIsYjonIicsZTonIicsaToiXFxuIixjOlt0aGlzLkJFXSxyOjB9O3RoaXMuQ0xDTT17Y046ImNvbW1lbnQiLGI6Ii8vIixlOiIkIn07dGhpcy5DQkxDTE09e2NOOiJjb21tZW50IixiOiIvXFwqIixlOiJcXCovIn07dGhpcy5IQ009e2NOOiJjb21tZW50IixiOiIjIixlOiIkIn07dGhpcy5OTT17Y046Im51bWJlciIsYjp0aGlzLk5SLHI6MH07dGhpcy5DTk09e2NOOiJudW1iZXIiLGI6dGhpcy5DTlIscjowfTt0aGlzLkJOTT17Y046Im51bWJlciIsYjp0aGlzLkJOUixyOjB9O3RoaXMuaW5oZXJpdD1mdW5jdGlvbihyLHMpe3ZhciBwPXt9O2Zvcih2YXIgcSBpbiByKXtwW3FdPXJbcV19aWYocyl7Zm9yKHZhciBxIGluIHMpe3BbcV09c1txXX19cmV0dXJuIHB9fSgpO2hsanMuTEFOR1VBR0VTLmJhc2g9ZnVuY3Rpb24oKXt2YXIgZT17InRydWUiOjEsImZhbHNlIjoxfTt2YXIgYj17Y046InZhcmlhYmxlIixiOiJcXCQoW2EtekEtWjAtOV9dKylcXGIifTt2YXIgYT17Y046InZhcmlhYmxlIixiOiJcXCRcXHsoKFtefV0pfChcXFxcfSkpK1xcfSIsYzpbaGxqcy5DTk1dfTt2YXIgZj17Y046InN0cmluZyIsYjonIicsZTonIicsaToiXFxuIixjOltobGpzLkJFLGIsYV0scjowfTt2YXIgYz17Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbe2I6IicnIn1dLHI6MH07dmFyIGQ9e2NOOiJ0ZXN0X2NvbmRpdGlvbiIsYjoiIixlOiIiLGM6W2YsYyxiLGEsaGxqcy5DTk1dLGs6e2xpdGVyYWw6ZX0scjowfTtyZXR1cm57ZE06e2s6e2tleXdvcmQ6eyJpZiI6MSx0aGVuOjEsImVsc2UiOjEsZmk6MSwiZm9yIjoxLCJicmVhayI6MSwiY29udGludWUiOjEsIndoaWxlIjoxLCJpbiI6MSwiZG8iOjEsZG9uZToxLGVjaG86MSxleGl0OjEsInJldHVybiI6MSxzZXQ6MSxkZWNsYXJlOjF9LGxpdGVyYWw6ZX0sYzpbe2NOOiJzaGViYW5nIixiOiIoIyFcXC9iaW5cXC9iYXNoKXwoIyFcXC9iaW5cXC9zaCkiLHI6MTB9LGIsYSxobGpzLkhDTSxobGpzLkNOTSxmLGMsaGxqcy5pbmhlcml0KGQse2I6IlxcWyAiLGU6IiBcXF0iLHI6MH0pLGhsanMuaW5oZXJpdChkLHtiOiJcXFtcXFsgIixlOiIgXFxdXFxdIn0pXX19fSgpO2hsanMuTEFOR1VBR0VTLmNwcD1mdW5jdGlvbigpe3ZhciBhPXtrZXl3b3JkOnsiZmFsc2UiOjEsImludCI6MSwiZmxvYXQiOjEsIndoaWxlIjoxLCJwcml2YXRlIjoxLCJjaGFyIjoxLCJjYXRjaCI6MSwiZXhwb3J0IjoxLHZpcnR1YWw6MSxvcGVyYXRvcjoyLHNpemVvZjoyLGR5bmFtaWNfY2FzdDoyLHR5cGVkZWY6Mixjb25zdF9jYXN0OjIsImNvbnN0IjoxLHN0cnVjdDoxLCJmb3IiOjEsc3RhdGljX2Nhc3Q6Mix1bmlvbjoxLG5hbWVzcGFjZToxLHVuc2lnbmVkOjEsImxvbmciOjEsInRocm93IjoxLCJ2b2xhdGlsZSI6Miwic3RhdGljIjoxLCJwcm90ZWN0ZWQiOjEsYm9vbDoxLHRlbXBsYXRlOjEsbXV0YWJsZToxLCJpZiI6MSwicHVibGljIjoxLGZyaWVuZDoyLCJkbyI6MSwicmV0dXJuIjoxLCJnb3RvIjoxLGF1dG86MSwidm9pZCI6MiwiZW51bSI6MSwiZWxzZSI6MSwiYnJlYWsiOjEsIm5ldyI6MSxleHRlcm46MSx1c2luZzoxLCJ0cnVlIjoxLCJjbGFzcyI6MSxhc206MSwiY2FzZSI6MSx0eXBlaWQ6MSwic2hvcnQiOjEscmVpbnRlcnByZXRfY2FzdDoyLCJkZWZhdWx0IjoxLCJkb3VibGUiOjEscmVnaXN0ZXI6MSxleHBsaWNpdDoxLHNpZ25lZDoxLHR5cGVuYW1lOjEsInRyeSI6MSwidGhpcyI6MSwic3dpdGNoIjoxLCJjb250aW51ZSI6MSx3Y2hhcl90OjEsaW5saW5lOjEsImRlbGV0ZSI6MSxhbGlnbm9mOjEsY2hhcjE2X3Q6MSxjaGFyMzJfdDoxLGNvbnN0ZXhwcjoxLGRlY2x0eXBlOjEsbm9leGNlcHQ6MSxudWxscHRyOjEsc3RhdGljX2Fzc2VydDoxLHRocmVhZF9sb2NhbDoxLHJlc3RyaWN0OjEsX0Jvb2w6MSxjb21wbGV4OjF9LGJ1aWx0X2luOntzdGQ6MSxzdHJpbmc6MSxjaW46MSxjb3V0OjEsY2VycjoxLGNsb2c6MSxzdHJpbmdzdHJlYW06MSxpc3RyaW5nc3RyZWFtOjEsb3N0cmluZ3N0cmVhbToxLGF1dG9fcHRyOjEsZGVxdWU6MSxsaXN0OjEscXVldWU6MSxzdGFjazoxLHZlY3RvcjoxLG1hcDoxLHNldDoxLGJpdHNldDoxLG11bHRpc2V0OjEsbXVsdGltYXA6MSx1bm9yZGVyZWRfc2V0OjEsdW5vcmRlcmVkX21hcDoxLHVub3JkZXJlZF9tdWx0aXNldDoxLHVub3JkZXJlZF9tdWx0aW1hcDoxLGFycmF5OjEsc2hhcmVkX3B0cjoxfX07cmV0dXJue2RNOntrOmEsaToiPC8iLGM6W2hsanMuQ0xDTSxobGpzLkNCTENMTSxobGpzLlFTTSx7Y046InN0cmluZyIsYjoiJ1xcXFw/LiIsZToiJyIsaToiLiJ9LHtjTjoibnVtYmVyIixiOiJcXGIoXFxkKyhcXC5cXGQqKT98XFwuXFxkKykodXxVfGx8THx1bHxVTHxmfEYpIn0saGxqcy5DTk0se2NOOiJwcmVwcm9jZXNzb3IiLGI6IiMiLGU6IiQifSx7Y046InN0bF9jb250YWluZXIiLGI6IlxcYihkZXF1ZXxsaXN0fHF1ZXVlfHN0YWNrfHZlY3RvcnxtYXB8c2V0fGJpdHNldHxtdWx0aXNldHxtdWx0aW1hcHx1bm9yZGVyZWRfbWFwfHVub3JkZXJlZF9zZXR8dW5vcmRlcmVkX211bHRpc2V0fHVub3JkZXJlZF9tdWx0aW1hcHxhcnJheSlcXHMqPCIsZToiPiIsazphLHI6MTAsYzpbInNlbGYiXX1dfX19KCk7aGxqcy5MQU5HVUFHRVMuY3NzPWZ1bmN0aW9uKCl7dmFyIGE9e2NOOiJmdW5jdGlvbiIsYjpobGpzLklSKyJcXCgiLGU6IlxcKSIsYzpbe2VXOnRydWUsZUU6dHJ1ZSxjOltobGpzLk5NLGhsanMuQVNNLGhsanMuUVNNXX1dfTtyZXR1cm57Y0k6dHJ1ZSxkTTp7aToiWz0vfCddIixjOltobGpzLkNCTENMTSx7Y046ImlkIixiOiJcXCNbQS1aYS16MC05Xy1dKyJ9LHtjTjoiY2xhc3MiLGI6IlxcLltBLVphLXowLTlfLV0rIixyOjB9LHtjTjoiYXR0cl9zZWxlY3RvciIsYjoiXFxbIixlOiJcXF0iLGk6IiQifSx7Y046InBzZXVkbyIsYjoiOig6KT9bYS16QS1aMC05XFxfXFwtXFwrXFwoXFwpXFxcIlxcJ10rIn0se2NOOiJhdF9ydWxlIixiOiJAKGZvbnQtZmFjZXxwYWdlKSIsbDoiW2Etei1dKyIsazp7ImZvbnQtZmFjZSI6MSxwYWdlOjF9fSx7Y046ImF0X3J1bGUiLGI6IkAiLGU6Ilt7O10iLGVFOnRydWUsazp7ImltcG9ydCI6MSxwYWdlOjEsbWVkaWE6MSxjaGFyc2V0OjF9LGM6W2EsaGxqcy5BU00saGxqcy5RU00saGxqcy5OTV19LHtjTjoidGFnIixiOmhsanMuSVIscjowfSx7Y046InJ1bGVzIixiOiJ7IixlOiJ9IixpOiJbXlxcc10iLHI6MCxjOltobGpzLkNCTENMTSx7Y046InJ1bGUiLGI6IlteXFxzXSIsckI6dHJ1ZSxlOiI7IixlVzp0cnVlLGM6W3tjTjoiYXR0cmlidXRlIixiOiJbQS1aXFxfXFwuXFwtXSsiLGU6IjoiLGVFOnRydWUsaToiW15cXHNdIixzdGFydHM6e2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxlRTp0cnVlLGM6W2EsaGxqcy5OTSxobGpzLlFTTSxobGpzLkFTTSxobGpzLkNCTENMTSx7Y046ImhleGNvbG9yIixiOiJcXCNbMC05QS1GXSsifSx7Y046ImltcG9ydGFudCIsYjoiIWltcG9ydGFudCJ9XX19XX1dfV19fX0oKTtobGpzLkxBTkdVQUdFUy5pbmk9e2NJOnRydWUsZE06e2k6IlteXFxzXSIsYzpbe2NOOiJjb21tZW50IixiOiI7IixlOiIkIn0se2NOOiJ0aXRsZSIsYjoiXlxcWyIsZToiXFxdIn0se2NOOiJzZXR0aW5nIixiOiJeW2EtejAtOV9cXFtcXF1dK1sgXFx0XSo9WyBcXHRdKiIsZToiJCIsYzpbe2NOOiJ2YWx1ZSIsZVc6dHJ1ZSxrOntvbjoxLG9mZjoxLCJ0cnVlIjoxLCJmYWxzZSI6MSx5ZXM6MSxubzoxfSxjOltobGpzLlFTTSxobGpzLk5NXX1dfV19fTtobGpzLkxBTkdVQUdFUy5wZXJsPWZ1bmN0aW9uKCl7dmFyIGQ9e2dldHB3ZW50OjEsZ2V0c2VydmVudDoxLHF1b3RlbWV0YToxLG1zZ3JjdjoxLHNjYWxhcjoxLGtpbGw6MSxkYm1jbG9zZToxLHVuZGVmOjEsbGM6MSxtYToxLHN5c3dyaXRlOjEsdHI6MSxzZW5kOjEsdW1hc2s6MSxzeXNvcGVuOjEsc2htd3JpdGU6MSx2ZWM6MSxxeDoxLHV0aW1lOjEsbG9jYWw6MSxvY3Q6MSxzZW1jdGw6MSxsb2NhbHRpbWU6MSxyZWFkcGlwZToxLCJkbyI6MSwicmV0dXJuIjoxLGZvcm1hdDoxLHJlYWQ6MSxzcHJpbnRmOjEsZGJtb3BlbjoxLHBvcDoxLGdldHBncnA6MSxub3Q6MSxnZXRwd25hbToxLHJld2luZGRpcjoxLHFxOjEsZmlsZW5vOjEscXc6MSxlbmRwcm90b2VudDoxLHdhaXQ6MSxzZXRob3N0ZW50OjEsYmxlc3M6MSxzOjAsb3BlbmRpcjoxLCJjb250aW51ZSI6MSxlYWNoOjEsc2xlZXA6MSxlbmRncmVudDoxLHNodXRkb3duOjEsZHVtcDoxLGNob21wOjEsY29ubmVjdDoxLGdldHNvY2tuYW1lOjEsZGllOjEsc29ja2V0cGFpcjoxLGNsb3NlOjEsZmxvY2s6MSxleGlzdHM6MSxpbmRleDoxLHNobWdldDoxLHN1YjoxLCJmb3IiOjEsZW5kcHdlbnQ6MSxyZWRvOjEsbHN0YXQ6MSxtc2djdGw6MSxzZXRwZ3JwOjEsYWJzOjEsZXhpdDoxLHNlbGVjdDoxLHByaW50OjEscmVmOjEsZ2V0aG9zdGJ5YWRkcjoxLHVuc2hpZnQ6MSxmY250bDoxLHN5c2NhbGw6MSwiZ290byI6MSxnZXRuZXRieWFkZHI6MSxqb2luOjEsZ210aW1lOjEsc3ltbGluazoxLHNlbWdldDoxLHNwbGljZToxLHg6MCxnZXRwZWVybmFtZToxLHJlY3Y6MSxsb2c6MSxzZXRzb2Nrb3B0OjEsY29zOjEsbGFzdDoxLHJldmVyc2U6MSxnZXRob3N0YnluYW1lOjEsZ2V0Z3JuYW06MSxzdHVkeToxLGZvcm1saW5lOjEsZW5kaG9zdGVudDoxLHRpbWVzOjEsY2hvcDoxLGxlbmd0aDoxLGdldGhvc3RlbnQ6MSxnZXRuZXRlbnQ6MSxwYWNrOjEsZ2V0cHJvdG9lbnQ6MSxnZXRzZXJ2YnluYW1lOjEscmFuZDoxLG1rZGlyOjEscG9zOjEsY2htb2Q6MSx5OjAsc3Vic3RyOjEsZW5kbmV0ZW50OjEscHJpbnRmOjEsbmV4dDoxLG9wZW46MSxtc2dzbmQ6MSxyZWFkZGlyOjEsdXNlOjEsdW5saW5rOjEsZ2V0c29ja29wdDoxLGdldHByaW9yaXR5OjEscmluZGV4OjEsd2FudGFycmF5OjEsaGV4OjEsc3lzdGVtOjEsZ2V0c2VydmJ5cG9ydDoxLGVuZHNlcnZlbnQ6MSwiaW50IjoxLGNocjoxLHVudGllOjEscm1kaXI6MSxwcm90b3R5cGU6MSx0ZWxsOjEsbGlzdGVuOjEsZm9yazoxLHNobXJlYWQ6MSx1Y2ZpcnN0OjEsc2V0cHJvdG9lbnQ6MSwiZWxzZSI6MSxzeXNzZWVrOjEsbGluazoxLGdldGdyZ2lkOjEsc2htY3RsOjEsd2FpdHBpZDoxLHVucGFjazoxLGdldG5ldGJ5bmFtZToxLHJlc2V0OjEsY2hkaXI6MSxncmVwOjEsc3BsaXQ6MSxyZXF1aXJlOjEsY2FsbGVyOjEsbGNmaXJzdDoxLHVudGlsOjEsd2FybjoxLCJ3aGlsZSI6MSx2YWx1ZXM6MSxzaGlmdDoxLHRlbGxkaXI6MSxnZXRwd3VpZDoxLG15OjEsZ2V0cHJvdG9ieW51bWJlcjoxLCJkZWxldGUiOjEsYW5kOjEsc29ydDoxLHVjOjEsZGVmaW5lZDoxLHNyYW5kOjEsYWNjZXB0OjEsInBhY2thZ2UiOjEsc2Vla2RpcjoxLGdldHByb3RvYnluYW1lOjEsc2Vtb3A6MSxvdXI6MSxyZW5hbWU6MSxzZWVrOjEsImlmIjoxLHE6MCxjaHJvb3Q6MSxzeXNyZWFkOjEsc2V0cHdlbnQ6MSxubzoxLGNyeXB0OjEsZ2V0YzoxLGNob3duOjEsc3FydDoxLHdyaXRlOjEsc2V0bmV0ZW50OjEsc2V0cHJpb3JpdHk6MSxmb3JlYWNoOjEsdGllOjEsc2luOjEsbXNnZ2V0OjEsbWFwOjEsc3RhdDoxLGdldGxvZ2luOjEsdW5sZXNzOjEsZWxzaWY6MSx0cnVuY2F0ZToxLGV4ZWM6MSxrZXlzOjEsZ2xvYjoxLHRpZWQ6MSxjbG9zZWRpcjoxLGlvY3RsOjEsc29ja2V0OjEscmVhZGxpbms6MSwiZXZhbCI6MSx4b3I6MSxyZWFkbGluZToxLGJpbm1vZGU6MSxzZXRzZXJ2ZW50OjEsZW9mOjEsb3JkOjEsYmluZDoxLGFsYXJtOjEscGlwZToxLGF0YW4yOjEsZ2V0Z3JlbnQ6MSxleHA6MSx0aW1lOjEscHVzaDoxLHNldGdyZW50OjEsZ3Q6MSxsdDoxLG9yOjEsbmU6MSxtOjB9O3ZhciBmPXtjTjoic3Vic3QiLGI6IlskQF1cXHsiLGU6IlxcfSIsazpkLHI6MTB9O3ZhciBjPXtjTjoidmFyaWFibGUiLGI6IlxcJFxcZCJ9O3ZhciBiPXtjTjoidmFyaWFibGUiLGI6IltcXCRcXCVcXEBcXCpdKFxcXlxcd1xcYnwjXFx3KyhcXDpcXDpcXHcrKSp8W15cXHNcXHd7XXx7XFx3K318XFx3KyhcXDpcXDpcXHcqKSopIn07dmFyIGg9W2hsanMuQkUsZixjLGJdO3ZhciBnPXtiOiItPiIsYzpbe2I6aGxqcy5JUn0se2I6InsiLGU6In0ifV19O3ZhciBlPXtjTjoiY29tbWVudCIsYjoiXihfX0VORF9ffF9fREFUQV9fKSIsZToiXFxuJCIscjo1fTt2YXIgYT1bYyxiLGhsanMuSENNLGUsZyx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFwoIixlOiJcXCkiLGM6aCxyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXFsiLGU6IlxcXSIsYzpoLHI6NX0se2NOOiJzdHJpbmciLGI6InFbcXd4cl0/XFxzKlxceyIsZToiXFx9IixjOmgscjo1fSx7Y046InN0cmluZyIsYjoicVtxd3hyXT9cXHMqXFx8IixlOiJcXHwiLGM6aCxyOjV9LHtjTjoic3RyaW5nIixiOiJxW3F3eHJdP1xccypcXDwiLGU6IlxcPiIsYzpoLHI6NX0se2NOOiJzdHJpbmciLGI6InF3XFxzK3EiLGU6InEiLGM6aCxyOjV9LHtjTjoic3RyaW5nIixiOiInIixlOiInIixjOltobGpzLkJFXSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOmgscjowfSx7Y046InN0cmluZyIsYjoiYCIsZToiYCIsYzpbaGxqcy5CRV19LHtjTjoic3RyaW5nIixiOiJ7XFx3K30iLHI6MH0se2NOOiJzdHJpbmciLGI6Ii0/XFx3K1xccypcXD1cXD4iLHI6MH0se2NOOiJudW1iZXIiLGI6IihcXGIwWzAtN19dKyl8KFxcYjB4WzAtOWEtZkEtRl9dKyl8KFxcYlsxLTldWzAtOV9dKihcXC5bMC05X10rKT8pfFswX11cXGIiLHI6MH0se2I6IigiK2hsanMuUlNSKyJ8XFxiKHNwbGl0fHJldHVybnxwcmludHxyZXZlcnNlfGdyZXApXFxiKVxccyoiLGs6e3NwbGl0OjEsInJldHVybiI6MSxwcmludDoxLHJldmVyc2U6MSxncmVwOjF9LHI6MCxjOltobGpzLkhDTSxlLHtjTjoicmVnZXhwIixiOiIoc3x0cnx5KS8oXFxcXC58W14vXSkqLyhcXFxcLnxbXi9dKSovW2Etel0qIixyOjEwfSx7Y046InJlZ2V4cCIsYjoiKG18cXIpPy8iLGU6Ii9bYS16XSoiLGM6W2hsanMuQkVdLHI6MH1dfSx7Y046InN1YiIsYjoiXFxic3ViXFxiIixlOiIoXFxzKlxcKC4qP1xcKSk/Wzt7XSIsazp7c3ViOjF9LHI6NX0se2NOOiJvcGVyYXRvciIsYjoiLVxcd1xcYiIscjowfSx7Y046InBvZCIsYjoiXFw9XFx3IixlOiJcXD1jdXQifV07Zi5jPWE7Zy5jWzFdLmM9YTtyZXR1cm57ZE06e2s6ZCxjOmF9fX0oKTtobGpzLkxBTkdVQUdFUy5weXRob249ZnVuY3Rpb24oKXt2YXIgYj1be2NOOiJzdHJpbmciLGI6Iih1fGIpP3I/JycnIixlOiInJyciLHI6MTB9LHtjTjoic3RyaW5nIixiOicodXxiKT9yPyIiIicsZTonIiIiJyxyOjEwfSx7Y046InN0cmluZyIsYjoiKHV8cnx1ciknIixlOiInIixjOltobGpzLkJFXSxyOjEwfSx7Y046InN0cmluZyIsYjonKHV8cnx1cikiJyxlOiciJyxjOltobGpzLkJFXSxyOjEwfSx7Y046InN0cmluZyIsYjoiKGJ8YnIpJyIsZToiJyIsYzpbaGxqcy5CRV19LHtjTjoic3RyaW5nIixiOicoYnxicikiJyxlOiciJyxjOltobGpzLkJFXX1dLmNvbmNhdChbaGxqcy5BU00saGxqcy5RU01dKTt2YXIgZD17Y046InRpdGxlIixiOmhsanMuVUlSfTt2YXIgYz17Y046InBhcmFtcyIsYjoiXFwoIixlOiJcXCkiLGM6Yi5jb25jYXQoW2hsanMuQ05NXSl9O3ZhciBhPXtiV0s6dHJ1ZSxlOiI6IixpOiJbJHtdIixjOltkLGNdLHI6MTB9O3JldHVybntkTTp7azp7a2V5d29yZDp7YW5kOjEsZWxpZjoxLGlzOjEsZ2xvYmFsOjEsYXM6MSwiaW4iOjEsImlmIjoxLGZyb206MSxyYWlzZToxLCJmb3IiOjEsZXhjZXB0OjEsImZpbmFsbHkiOjEscHJpbnQ6MSwiaW1wb3J0IjoxLHBhc3M6MSwicmV0dXJuIjoxLGV4ZWM6MSwiZWxzZSI6MSwiYnJlYWsiOjEsbm90OjEsIndpdGgiOjEsImNsYXNzIjoxLGFzc2VydDoxLHlpZWxkOjEsInRyeSI6MSwid2hpbGUiOjEsImNvbnRpbnVlIjoxLGRlbDoxLG9yOjEsZGVmOjEsbGFtYmRhOjEsbm9ubG9jYWw6MTB9LGJ1aWx0X2luOntOb25lOjEsVHJ1ZToxLEZhbHNlOjEsRWxsaXBzaXM6MSxOb3RJbXBsZW1lbnRlZDoxfX0saToiKDwvfC0+fFxcPykiLGM6Yi5jb25jYXQoW2hsanMuSENNLGhsanMuaW5oZXJpdChhLHtjTjoiZnVuY3Rpb24iLGs6e2RlZjoxfX0pLGhsanMuaW5oZXJpdChhLHtjTjoiY2xhc3MiLGs6eyJjbGFzcyI6MX19KSxobGpzLkNOTSx7Y046ImRlY29yYXRvciIsYjoiQCIsZToiJCJ9XSl9fX0oKTtobGpzLkxBTkdVQUdFUy5yPXtkTTp7YzpbaGxqcy5IQ00se2NOOiJudW1iZXIiLGI6IlxcYjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiLGU6aGxqcy5JTU1FRElBVEVfUkUscjowfSx7Y046Im51bWJlciIsYjoiXFxiXFxkKyg/OltlRV1bK1xcLV0/XFxkKik/TFxcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjB9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrXFwuKD8hXFxkKSg/OmlcXGIpPyIsZTpobGpzLklNTUVESUFURV9SRSxyOjF9LHtjTjoibnVtYmVyIixiOiJcXGJcXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjB9LHtjTjoibnVtYmVyIixiOiJcXC5cXGQrKD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjF9LHtjTjoia2V5d29yZCIsYjoiKD86dHJ5Q2F0Y2h8bGlicmFyeXxzZXRHZW5lcmljfHNldEdyb3VwR2VuZXJpYylcXGIiLGU6aGxqcy5JTU1FRElBVEVfUkUscjoxMH0se2NOOiJrZXl3b3JkIixiOiJcXC5cXC5cXC4iLGU6aGxqcy5JTU1FRElBVEVfUkUscjoxMH0se2NOOiJrZXl3b3JkIixiOiJcXC5cXC5cXGQrKD8hW1xcdy5dKSIsZTpobGpzLklNTUVESUFURV9SRSxyOjEwfSx7Y046ImtleXdvcmQiLGI6IlxcYig/OmZ1bmN0aW9uKSIsZTpobGpzLklNTUVESUFURV9SRSxyOjJ9LHtjTjoia2V5d29yZCIsYjoiKD86aWZ8aW58YnJlYWt8bmV4dHxyZXBlYXR8ZWxzZXxmb3J8cmV0dXJufHN3aXRjaHx3aGlsZXx0cnl8c3RvcHx3YXJuaW5nfHJlcXVpcmV8YXR0YWNofGRldGFjaHxzb3VyY2V8c2V0TWV0aG9kfHNldENsYXNzKVxcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjF9LHtjTjoibGl0ZXJhbCIsYjoiKD86TkF8TkFfaW50ZWdlcl98TkFfcmVhbF98TkFfY2hhcmFjdGVyX3xOQV9jb21wbGV4XylcXGIiLGU6aGxqcy5JTU1FRElBVEVfUkUscjoxMH0se2NOOiJsaXRlcmFsIixiOiIoPzpOVUxMfFRSVUV8RkFMU0V8VHxGfEluZnxOYU4pXFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MX0se2NOOiJpZGVudGlmaWVyIixiOiJbYS16QS1aLl1bYS16QS1aMC05Ll9dKlxcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjB9LHtjTjoib3BlcmF0b3IiLGI6IjxcXC0oPyFcXHMqXFxkKSIsZTpobGpzLklNTUVESUFURV9SRSxyOjJ9LHtjTjoib3BlcmF0b3IiLGI6IlxcLT58PFxcLSIsZTpobGpzLklNTUVESUFURV9SRSxyOjF9LHtjTjoib3BlcmF0b3IiLGI6IiUlfH4iLGU6aGxqcy5JTU1FRElBVEVfUkV9LHtjTjoib3BlcmF0b3IiLGI6Ij49fDw9fD09fCE9fFxcfFxcfHwmJnw9fFxcK3xcXC18XFwqfC98XFxefD58PHwhfCZ8XFx8fFxcJHw6IixlOmhsanMuSU1NRURJQVRFX1JFLHI6MH0se2NOOiJvcGVyYXRvciIsYjoiJSIsZToiJSIsaToiXFxuIixyOjF9LHtjTjoiaWRlbnRpZmllciIsYjoiYCIsZToiYCIscjowfSx7Y046InN0cmluZyIsYjonIicsZTonIicsYzpbaGxqcy5CRV0scjowfSx7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzpbaGxqcy5CRV0scjowfSx7Y046InBhcmVuIixiOiJbWyh7XFxdKX1dIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MH1dfX07aGxqcy5MQU5HVUFHRVMucnVieT1mdW5jdGlvbigpe3ZhciBhPSJbYS16QS1aX11bYS16QS1aMC05X10qKFxcIXxcXD8pPyI7dmFyIGo9IlthLXpBLVpfXVxcdypbIT89XT98Wy0rfl1cXEB8PDx8Pj58PX58PT09P3w8PT58Wzw+XT0/fFxcKlxcKnxbLS8rJV4mKn5gfF18XFxbXFxdPT8iO3ZhciBmPXtrZXl3b3JkOnthbmQ6MSwiZmFsc2UiOjEsdGhlbjoxLGRlZmluZWQ6MSxtb2R1bGU6MSwiaW4iOjEsInJldHVybiI6MSxyZWRvOjEsImlmIjoxLEJFR0lOOjEscmV0cnk6MSxlbmQ6MSwiZm9yIjoxLCJ0cnVlIjoxLHNlbGY6MSx3aGVuOjEsbmV4dDoxLHVudGlsOjEsImRvIjoxLGJlZ2luOjEsdW5sZXNzOjEsRU5EOjEscmVzY3VlOjEsbmlsOjEsImVsc2UiOjEsImJyZWFrIjoxLHVuZGVmOjEsbm90OjEsInN1cGVyIjoxLCJjbGFzcyI6MSwiY2FzZSI6MSxyZXF1aXJlOjEseWllbGQ6MSxhbGlhczoxLCJ3aGlsZSI6MSxlbnN1cmU6MSxlbHNpZjoxLG9yOjEsZGVmOjF9LGtleW1ldGhvZHM6e19faWRfXzoxLF9fc2VuZF9fOjEsYWJvcnQ6MSxhYnM6MSwiYWxsPyI6MSxhbGxvY2F0ZToxLGFuY2VzdG9yczoxLCJhbnk/IjoxLGFyaXR5OjEsYXNzb2M6MSxhdDoxLGF0X2V4aXQ6MSxhdXRvbG9hZDoxLCJhdXRvbG9hZD8iOjEsImJldHdlZW4/IjoxLGJpbmRpbmc6MSxiaW5tb2RlOjEsImJsb2NrX2dpdmVuPyI6MSxjYWxsOjEsY2FsbGNjOjEsY2FsbGVyOjEsY2FwaXRhbGl6ZToxLCJjYXBpdGFsaXplISI6MSxjYXNlY21wOjEsImNhdGNoIjoxLGNlaWw6MSxjZW50ZXI6MSxjaG9tcDoxLCJjaG9tcCEiOjEsY2hvcDoxLCJjaG9wISI6MSxjaHI6MSwiY2xhc3MiOjEsY2xhc3NfZXZhbDoxLCJjbGFzc192YXJpYWJsZV9kZWZpbmVkPyI6MSxjbGFzc192YXJpYWJsZXM6MSxjbGVhcjoxLGNsb25lOjEsY2xvc2U6MSxjbG9zZV9yZWFkOjEsY2xvc2Vfd3JpdGU6MSwiY2xvc2VkPyI6MSxjb2VyY2U6MSxjb2xsZWN0OjEsImNvbGxlY3QhIjoxLGNvbXBhY3Q6MSwiY29tcGFjdCEiOjEsY29uY2F0OjEsImNvbnN0X2RlZmluZWQ/IjoxLGNvbnN0X2dldDoxLGNvbnN0X21pc3Npbmc6MSxjb25zdF9zZXQ6MSxjb25zdGFudHM6MSxjb3VudDoxLGNyeXB0OjEsImRlZmF1bHQiOjEsZGVmYXVsdF9wcm9jOjEsImRlbGV0ZSI6MSwiZGVsZXRlISI6MSxkZWxldGVfYXQ6MSxkZWxldGVfaWY6MSxkZXRlY3Q6MSxkaXNwbGF5OjEsZGl2OjEsZGl2bW9kOjEsZG93bmNhc2U6MSwiZG93bmNhc2UhIjoxLGRvd250bzoxLGR1bXA6MSxkdXA6MSxlYWNoOjEsZWFjaF9ieXRlOjEsZWFjaF9pbmRleDoxLGVhY2hfa2V5OjEsZWFjaF9saW5lOjEsZWFjaF9wYWlyOjEsZWFjaF92YWx1ZToxLGVhY2hfd2l0aF9pbmRleDoxLCJlbXB0eT8iOjEsZW50cmllczoxLGVvZjoxLCJlb2Y/IjoxLCJlcWw/IjoxLCJlcXVhbD8iOjEsImV2YWwiOjEsZXhlYzoxLGV4aXQ6MSwiZXhpdCEiOjEsZXh0ZW5kOjEsZmFpbDoxLGZjbnRsOjEsZmV0Y2g6MSxmaWxlbm86MSxmaWxsOjEsZmluZDoxLGZpbmRfYWxsOjEsZmlyc3Q6MSxmbGF0dGVuOjEsImZsYXR0ZW4hIjoxLGZsb29yOjEsZmx1c2g6MSxmb3JfZmQ6MSxmb3JlYWNoOjEsZm9yazoxLGZvcm1hdDoxLGZyZWV6ZToxLCJmcm96ZW4/IjoxLGZzeW5jOjEsZ2V0YzoxLGdldHM6MSxnbG9iYWxfdmFyaWFibGVzOjEsZ3JlcDoxLGdzdWI6MSwiZ3N1YiEiOjEsImhhc19rZXk/IjoxLCJoYXNfdmFsdWU/IjoxLGhhc2g6MSxoZXg6MSxpZDoxLGluY2x1ZGU6MSwiaW5jbHVkZT8iOjEsaW5jbHVkZWRfbW9kdWxlczoxLGluZGV4OjEsaW5kZXhlczoxLGluZGljZXM6MSxpbmR1Y2VkX2Zyb206MSxpbmplY3Q6MSxpbnNlcnQ6MSxpbnNwZWN0OjEsaW5zdGFuY2VfZXZhbDoxLGluc3RhbmNlX21ldGhvZDoxLGluc3RhbmNlX21ldGhvZHM6MSwiaW5zdGFuY2Vfb2Y/IjoxLCJpbnN0YW5jZV92YXJpYWJsZV9kZWZpbmVkPyI6MSxpbnN0YW5jZV92YXJpYWJsZV9nZXQ6MSxpbnN0YW5jZV92YXJpYWJsZV9zZXQ6MSxpbnN0YW5jZV92YXJpYWJsZXM6MSwiaW50ZWdlcj8iOjEsaW50ZXJuOjEsaW52ZXJ0OjEsaW9jdGw6MSwiaXNfYT8iOjEsaXNhdHR5OjEsIml0ZXJhdG9yPyI6MSxqb2luOjEsImtleT8iOjEsa2V5czoxLCJraW5kX29mPyI6MSxsYW1iZGE6MSxsYXN0OjEsbGVuZ3RoOjEsbGluZW5vOjEsbGp1c3Q6MSxsb2FkOjEsbG9jYWxfdmFyaWFibGVzOjEsbG9vcDoxLGxzdHJpcDoxLCJsc3RyaXAhIjoxLG1hcDoxLCJtYXAhIjoxLG1hdGNoOjEsbWF4OjEsIm1lbWJlcj8iOjEsbWVyZ2U6MSwibWVyZ2UhIjoxLG1ldGhvZDoxLCJtZXRob2RfZGVmaW5lZD8iOjEsbWV0aG9kX21pc3Npbmc6MSxtZXRob2RzOjEsbWluOjEsbW9kdWxlX2V2YWw6MSxtb2R1bG86MSxuYW1lOjEsbmVzdGluZzoxLCJuZXciOjEsbmV4dDoxLCJuZXh0ISI6MSwibmlsPyI6MSxuaXRlbXM6MSwibm9uemVybz8iOjEsb2JqZWN0X2lkOjEsb2N0OjEsb3BlbjoxLHBhY2s6MSxwYXJ0aXRpb246MSxwaWQ6MSxwaXBlOjEscG9wOjEscG9wZW46MSxwb3M6MSxwcmVjOjEscHJlY19mOjEscHJlY19pOjEscHJpbnQ6MSxwcmludGY6MSxwcml2YXRlX2NsYXNzX21ldGhvZDoxLHByaXZhdGVfaW5zdGFuY2VfbWV0aG9kczoxLCJwcml2YXRlX21ldGhvZF9kZWZpbmVkPyI6MSxwcml2YXRlX21ldGhvZHM6MSxwcm9jOjEscHJvdGVjdGVkX2luc3RhbmNlX21ldGhvZHM6MSwicHJvdGVjdGVkX21ldGhvZF9kZWZpbmVkPyI6MSxwcm90ZWN0ZWRfbWV0aG9kczoxLHB1YmxpY19jbGFzc19tZXRob2Q6MSxwdWJsaWNfaW5zdGFuY2VfbWV0aG9kczoxLCJwdWJsaWNfbWV0aG9kX2RlZmluZWQ/IjoxLHB1YmxpY19tZXRob2RzOjEscHVzaDoxLHB1dGM6MSxwdXRzOjEscXVvOjEscmFpc2U6MSxyYW5kOjEscmFzc29jOjEscmVhZDoxLHJlYWRfbm9uYmxvY2s6MSxyZWFkY2hhcjoxLHJlYWRsaW5lOjEscmVhZGxpbmVzOjEscmVhZHBhcnRpYWw6MSxyZWhhc2g6MSxyZWplY3Q6MSwicmVqZWN0ISI6MSxyZW1haW5kZXI6MSxyZW9wZW46MSxyZXBsYWNlOjEscmVxdWlyZToxLCJyZXNwb25kX3RvPyI6MSxyZXZlcnNlOjEsInJldmVyc2UhIjoxLHJldmVyc2VfZWFjaDoxLHJld2luZDoxLHJpbmRleDoxLHJqdXN0OjEscm91bmQ6MSxyc3RyaXA6MSwicnN0cmlwISI6MSxzY2FuOjEsc2VlazoxLHNlbGVjdDoxLHNlbmQ6MSxzZXRfdHJhY2VfZnVuYzoxLHNoaWZ0OjEsc2luZ2xldG9uX21ldGhvZF9hZGRlZDoxLHNpbmdsZXRvbl9tZXRob2RzOjEsc2l6ZToxLHNsZWVwOjEsc2xpY2U6MSwic2xpY2UhIjoxLHNvcnQ6MSwic29ydCEiOjEsc29ydF9ieToxLHNwbGl0OjEsc3ByaW50ZjoxLHNxdWVlemU6MSwic3F1ZWV6ZSEiOjEsc3JhbmQ6MSxzdGF0OjEsc3RlcDoxLHN0b3JlOjEsc3RyaXA6MSwic3RyaXAhIjoxLHN1YjoxLCJzdWIhIjoxLHN1Y2M6MSwic3VjYyEiOjEsc3VtOjEsc3VwZXJjbGFzczoxLHN3YXBjYXNlOjEsInN3YXBjYXNlISI6MSxzeW5jOjEsc3lzY2FsbDoxLHN5c29wZW46MSxzeXNyZWFkOjEsc3lzc2VlazoxLHN5c3RlbToxLHN5c3dyaXRlOjEsdGFpbnQ6MSwidGFpbnRlZD8iOjEsdGVsbDoxLHRlc3Q6MSwidGhyb3ciOjEsdGltZXM6MSx0b19hOjEsdG9fYXJ5OjEsdG9fZjoxLHRvX2hhc2g6MSx0b19pOjEsdG9faW50OjEsdG9faW86MSx0b19wcm9jOjEsdG9fczoxLHRvX3N0cjoxLHRvX3N5bToxLHRyOjEsInRyISI6MSx0cl9zOjEsInRyX3MhIjoxLHRyYWNlX3ZhcjoxLHRyYW5zcG9zZToxLHRyYXA6MSx0cnVuY2F0ZToxLCJ0dHk/IjoxLHR5cGU6MSx1bmdldGM6MSx1bmlxOjEsInVuaXEhIjoxLHVucGFjazoxLHVuc2hpZnQ6MSx1bnRhaW50OjEsdW50cmFjZV92YXI6MSx1cGNhc2U6MSwidXBjYXNlISI6MSx1cGRhdGU6MSx1cHRvOjEsInZhbHVlPyI6MSx2YWx1ZXM6MSx2YWx1ZXNfYXQ6MSx3YXJuOjEsd3JpdGU6MSx3cml0ZV9ub25ibG9jazoxLCJ6ZXJvPyI6MSx6aXA6MX19O3ZhciBjPXtjTjoieWFyZG9jdGFnIixiOiJAW0EtWmEtel0rIn07dmFyIGs9W3tjTjoiY29tbWVudCIsYjoiIyIsZToiJCIsYzpbY119LHtjTjoiY29tbWVudCIsYjoiXlxcPWJlZ2luIixlOiJeXFw9ZW5kIixjOltjXSxyOjEwfSx7Y046ImNvbW1lbnQiLGI6Il5fX0VORF9fIixlOiJcXG4kIn1dO3ZhciBkPXtjTjoic3Vic3QiLGI6IiNcXHsiLGU6In0iLGw6YSxrOmZ9O3ZhciBpPVtobGpzLkJFLGRdO3ZhciBiPVt7Y046InN0cmluZyIsYjoiJyIsZToiJyIsYzppLHI6MH0se2NOOiJzdHJpbmciLGI6JyInLGU6JyInLGM6aSxyOjB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXCgiLGU6IlxcKSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT9cXFsiLGU6IlxcXSIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT97IixlOiJ9IixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPzwiLGU6Ij4iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/LyIsZToiLyIsYzppLHI6MTB9LHtjTjoic3RyaW5nIixiOiIlW3F3XT8lIixlOiIlIixjOmkscjoxMH0se2NOOiJzdHJpbmciLGI6IiVbcXddPy0iLGU6Ii0iLGM6aSxyOjEwfSx7Y046InN0cmluZyIsYjoiJVtxd10/XFx8IixlOiJcXHwiLGM6aSxyOjEwfV07dmFyIGg9e2NOOiJmdW5jdGlvbiIsYjoiXFxiZGVmXFxzKyIsZToiIHwkfDsiLGw6YSxrOmYsYzpbe2NOOiJ0aXRsZSIsYjpqLGw6YSxrOmZ9LHtjTjoicGFyYW1zIixiOiJcXCgiLGU6IlxcKSIsbDphLGs6Zn1dLmNvbmNhdChrKX07dmFyIGc9e2NOOiJpZGVudGlmaWVyIixiOmEsbDphLGs6ZixyOjB9O3ZhciBlPWsuY29uY2F0KGIuY29uY2F0KFt7Y046ImNsYXNzIixiOiJcXGIoY2xhc3N8bW9kdWxlKVxcYiIsZToiJHw7IixrOnsiY2xhc3MiOjEsbW9kdWxlOjF9LGM6W3tjTjoidGl0bGUiLGI6IltBLVphLXpfXVxcdyooOjpcXHcrKSooXFw/fFxcISk/IixyOjB9LHtjTjoiaW5oZXJpdGFuY2UiLGI6IjxcXHMqIixjOlt7Y046InBhcmVudCIsYjoiKCIraGxqcy5JUisiOjopPyIraGxqcy5JUn1dfV0uY29uY2F0KGspfSxoLHtjTjoiY29uc3RhbnQiLGI6Iig6Oik/KFtBLVpdXFx3Kig6Oik/KSsiLHI6MH0se2NOOiJzeW1ib2wiLGI6IjoiLGM6Yi5jb25jYXQoW2ddKSxyOjB9LHtjTjoibnVtYmVyIixiOiIoXFxiMFswLTdfXSspfChcXGIweFswLTlhLWZBLUZfXSspfChcXGJbMS05XVswLTlfXSooXFwuWzAtOV9dKyk/KXxbMF9dXFxiIixyOjB9LHtjTjoibnVtYmVyIixiOiJcXD9cXHcifSx7Y046InZhcmlhYmxlIixiOiIoXFwkXFxXKXwoKFxcJHxcXEBcXEA/KShcXHcrKSkifSxnLHtiOiIoIitobGpzLlJTUisiKVxccyoiLGM6ay5jb25jYXQoW3tjTjoicmVnZXhwIixiOiIvIixlOiIvW2Etel0qIixpOiJcXG4iLGM6W2hsanMuQkVdfV0pLHI6MH1dKSk7ZC5jPWU7aC5jWzFdLmM9ZTtyZXR1cm57ZE06e2w6YSxrOmYsYzplfX19KCk7aGxqcy5MQU5HVUFHRVMuc2NhbGE9ZnVuY3Rpb24oKXt2YXIgYj17Y046ImFubm90YXRpb24iLGI6IkBbQS1aYS16XSsifTt2YXIgYT17Y046InN0cmluZyIsYjondT9yPyIiIicsZTonIiIiJyxyOjEwfTtyZXR1cm57ZE06e2s6e3R5cGU6MSx5aWVsZDoxLGxhenk6MSxvdmVycmlkZToxLGRlZjoxLCJ3aXRoIjoxLHZhbDoxLCJ2YXIiOjEsImZhbHNlIjoxLCJ0cnVlIjoxLHNlYWxlZDoxLCJhYnN0cmFjdCI6MSwicHJpdmF0ZSI6MSx0cmFpdDoxLG9iamVjdDoxLCJudWxsIjoxLCJpZiI6MSwiZm9yIjoxLCJ3aGlsZSI6MSwidGhyb3ciOjEsImZpbmFsbHkiOjEsInByb3RlY3RlZCI6MSwiZXh0ZW5kcyI6MSwiaW1wb3J0IjoxLCJmaW5hbCI6MSwicmV0dXJuIjoxLCJlbHNlIjoxLCJicmVhayI6MSwibmV3IjoxLCJjYXRjaCI6MSwic3VwZXIiOjEsImNsYXNzIjoxLCJjYXNlIjoxLCJwYWNrYWdlIjoxLCJkZWZhdWx0IjoxLCJ0cnkiOjEsInRoaXMiOjEsbWF0Y2g6MSwiY29udGludWUiOjEsInRocm93cyI6MX0sYzpbe2NOOiJqYXZhZG9jIixiOiIvXFwqXFwqIixlOiJcXCovIixjOlt7Y046ImphdmFkb2N0YWciLGI6IkBbQS1aYS16XSsifV0scjoxMH0saGxqcy5DTENNLGhsanMuQ0JMQ0xNLGhsanMuQVNNLGhsanMuUVNNLGEse2NOOiJjbGFzcyIsYjoiKChjYXNlICk/Y2xhc3MgfG9iamVjdCB8dHJhaXQgKSIsZToiKHt8JCkiLGk6IjoiLGs6eyJjYXNlIjoxLCJjbGFzcyI6MSx0cmFpdDoxLG9iamVjdDoxfSxjOlt7YldLOnRydWUsazp7ImV4dGVuZHMiOjEsIndpdGgiOjF9LHI6MTB9LHtjTjoidGl0bGUiLGI6aGxqcy5VSVJ9LHtjTjoicGFyYW1zIixiOiJcXCgiLGU6IlxcKSIsYzpbaGxqcy5BU00saGxqcy5RU00sYSxiXX1dfSxobGpzLkNOTSxiXX19fSgpO2hsanMuTEFOR1VBR0VTLnNxbD17Y0k6dHJ1ZSxkTTp7aToiW15cXHNdIixjOlt7Y046Im9wZXJhdG9yIixiOiIoYmVnaW58c3RhcnR8Y29tbWl0fHJvbGxiYWNrfHNhdmVwb2ludHxsb2NrfGFsdGVyfGNyZWF0ZXxkcm9wfHJlbmFtZXxjYWxsfGRlbGV0ZXxkb3xoYW5kbGVyfGluc2VydHxsb2FkfHJlcGxhY2V8c2VsZWN0fHRydW5jYXRlfHVwZGF0ZXxzZXR8c2hvd3xwcmFnbWF8Z3JhbnQpXFxiIixlOiI7fCIraGxqcy5FUixrOntrZXl3b3JkOnthbGw6MSxwYXJ0aWFsOjEsZ2xvYmFsOjEsbW9udGg6MSxjdXJyZW50X3RpbWVzdGFtcDoxLHVzaW5nOjEsZ286MSxyZXZva2U6MSxzbWFsbGludDoxLGluZGljYXRvcjoxLCJlbmQtZXhlYyI6MSxkaXNjb25uZWN0OjEsem9uZToxLCJ3aXRoIjoxLGNoYXJhY3RlcjoxLGFzc2VydGlvbjoxLHRvOjEsYWRkOjEsY3VycmVudF91c2VyOjEsdXNhZ2U6MSxpbnB1dDoxLGxvY2FsOjEsYWx0ZXI6MSxtYXRjaDoxLGNvbGxhdGU6MSxyZWFsOjEsdGhlbjoxLHJvbGxiYWNrOjEsZ2V0OjEscmVhZDoxLHRpbWVzdGFtcDoxLHNlc3Npb25fdXNlcjoxLG5vdDoxLGludGVnZXI6MSxiaXQ6MSx1bmlxdWU6MSxkYXk6MSxtaW51dGU6MSxkZXNjOjEsaW5zZXJ0OjEsZXhlY3V0ZToxLGxpa2U6MSxpbGlrZToyLGxldmVsOjEsZGVjaW1hbDoxLGRyb3A6MSwiY29udGludWUiOjEsaXNvbGF0aW9uOjEsZm91bmQ6MSx3aGVyZToxLGNvbnN0cmFpbnRzOjEsZG9tYWluOjEscmlnaHQ6MSxuYXRpb25hbDoxLHNvbWU6MSxtb2R1bGU6MSx0cmFuc2FjdGlvbjoxLHJlbGF0aXZlOjEsc2Vjb25kOjEsY29ubmVjdDoxLGVzY2FwZToxLGNsb3NlOjEsc3lzdGVtX3VzZXI6MSwiZm9yIjoxLGRlZmVycmVkOjEsc2VjdGlvbjoxLGNhc3Q6MSxjdXJyZW50OjEsc3Fsc3RhdGU6MSxhbGxvY2F0ZToxLGludGVyc2VjdDoxLGRlYWxsb2NhdGU6MSxudW1lcmljOjEsInB1YmxpYyI6MSxwcmVzZXJ2ZToxLGZ1bGw6MSwiZ290byI6MSxpbml0aWFsbHk6MSxhc2M6MSxubzoxLGtleToxLG91dHB1dDoxLGNvbGxhdGlvbjoxLGdyb3VwOjEsYnk6MSx1bmlvbjoxLHNlc3Npb246MSxib3RoOjEsbGFzdDoxLGxhbmd1YWdlOjEsY29uc3RyYWludDoxLGNvbHVtbjoxLG9mOjEsc3BhY2U6MSxmb3JlaWduOjEsZGVmZXJyYWJsZToxLHByaW9yOjEsY29ubmVjdGlvbjoxLHVua25vd246MSxhY3Rpb246MSxjb21taXQ6MSx2aWV3OjEsb3I6MSxmaXJzdDoxLGludG86MSwiZmxvYXQiOjEseWVhcjoxLHByaW1hcnk6MSxjYXNjYWRlZDoxLGV4Y2VwdDoxLHJlc3RyaWN0OjEsc2V0OjEscmVmZXJlbmNlczoxLG5hbWVzOjEsdGFibGU6MSxvdXRlcjoxLG9wZW46MSxzZWxlY3Q6MSxzaXplOjEsYXJlOjEscm93czoxLGZyb206MSxwcmVwYXJlOjEsZGlzdGluY3Q6MSxsZWFkaW5nOjEsY3JlYXRlOjEsb25seToxLG5leHQ6MSxpbm5lcjoxLGF1dGhvcml6YXRpb246MSxzY2hlbWE6MSxjb3JyZXNwb25kaW5nOjEsb3B0aW9uOjEsZGVjbGFyZToxLHByZWNpc2lvbjoxLGltbWVkaWF0ZToxLCJlbHNlIjoxLHRpbWV6b25lX21pbnV0ZToxLGV4dGVybmFsOjEsdmFyeWluZzoxLHRyYW5zbGF0aW9uOjEsInRydWUiOjEsImNhc2UiOjEsZXhjZXB0aW9uOjEsam9pbjoxLGhvdXI6MSwiZGVmYXVsdCI6MSwiZG91YmxlIjoxLHNjcm9sbDoxLHZhbHVlOjEsY3Vyc29yOjEsZGVzY3JpcHRvcjoxLHZhbHVlczoxLGRlYzoxLGZldGNoOjEscHJvY2VkdXJlOjEsImRlbGV0ZSI6MSxhbmQ6MSwiZmFsc2UiOjEsImludCI6MSxpczoxLGRlc2NyaWJlOjEsImNoYXIiOjEsYXM6MSxhdDoxLCJpbiI6MSx2YXJjaGFyOjEsIm51bGwiOjEsdHJhaWxpbmc6MSxhbnk6MSxhYnNvbHV0ZToxLGN1cnJlbnRfdGltZToxLGVuZDoxLGdyYW50OjEscHJpdmlsZWdlczoxLHdoZW46MSxjcm9zczoxLGNoZWNrOjEsd3JpdGU6MSxjdXJyZW50X2RhdGU6MSxwYWQ6MSxiZWdpbjoxLHRlbXBvcmFyeToxLGV4ZWM6MSx0aW1lOjEsdXBkYXRlOjEsY2F0YWxvZzoxLHVzZXI6MSxzcWw6MSxkYXRlOjEsb246MSxpZGVudGl0eToxLHRpbWV6b25lX2hvdXI6MSxuYXR1cmFsOjEsd2hlbmV2ZXI6MSxpbnRlcnZhbDoxLHdvcms6MSxvcmRlcjoxLGNhc2NhZGU6MSxkaWFnbm9zdGljczoxLG5jaGFyOjEsaGF2aW5nOjEsbGVmdDoxLGNhbGw6MSwiZG8iOjEsaGFuZGxlcjoxLGxvYWQ6MSxyZXBsYWNlOjEsdHJ1bmNhdGU6MSxzdGFydDoxLGxvY2s6MSxzaG93OjEscHJhZ21hOjF9LGFnZ3JlZ2F0ZTp7Y291bnQ6MSxzdW06MSxtaW46MSxtYXg6MSxhdmc6MX19LGM6W3tjTjoic3RyaW5nIixiOiInIixlOiInIixjOltobGpzLkJFLHtiOiInJyJ9XSxyOjB9LHtjTjoic3RyaW5nIixiOiciJyxlOiciJyxjOltobGpzLkJFLHtiOiciIid9XSxyOjB9LHtjTjoic3RyaW5nIixiOiJgIixlOiJgIixjOltobGpzLkJFXX0saGxqcy5DTk1dfSxobGpzLkNCTENMTSx7Y046ImNvbW1lbnQiLGI6Ii0tIixlOiIkIn1dfX07aGxqcy5MQU5HVUFHRVMuc3Rhbj17ZE06e2M6W2hsanMuSENNLGhsanMuQ0xDTSxobGpzLlFTTSxobGpzLkNOTSx7Y046Im9wZXJhdG9yIixiOiIoPzo8LXx+fFxcfFxcfHwmJnw9PXwhPXw8PT98Pj0/fFxcK3wtfFxcLj8vfFxcXFx8XFxefFxcXnwhfCd8JXw6fCx8O3w9KVxcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjEwfSx7Y046InBhcmVuIixiOiJbWyh7XFxdKX1dIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MH0se2NOOiJmdW5jdGlvbiIsYjoiKD86UGhpfFBoaV9hcHByb3h8YWJzfGFjb3N8YWNvc2h8YXBwZW5kX2NvbHxhcHBlbmRfcm93fGFzaW58YXNpbmh8YXRhbnxhdGFuMnxhdGFuaHxiZXJub3VsbGlfY2NkZl9sb2d8YmVybm91bGxpX2NkZnxiZXJub3VsbGlfY2RmX2xvZ3xiZXJub3VsbGlfbG9nfGJlcm5vdWxsaV9sb2dpdF9sb2d8YmVybm91bGxpX3JuZ3xiZXNzZWxfZmlyc3Rfa2luZHxiZXNzZWxfc2Vjb25kX2tpbmR8YmV0YV9iaW5vbWlhbF9jY2RmX2xvZ3xiZXRhX2Jpbm9taWFsX2NkZnxiZXRhX2Jpbm9taWFsX2NkZl9sb2d8YmV0YV9iaW5vbWlhbF9sb2d8YmV0YV9iaW5vbWlhbF9ybmd8YmV0YV9jY2RmX2xvZ3xiZXRhX2NkZnxiZXRhX2NkZl9sb2d8YmV0YV9sb2d8YmV0YV9ybmd8YmluYXJ5X2xvZ19sb3NzfGJpbm9taWFsX2NjZGZfbG9nfGJpbm9taWFsX2NkZnxiaW5vbWlhbF9jZGZfbG9nfGJpbm9taWFsX2NvZWZmaWNpZW50X2xvZ3xiaW5vbWlhbF9sb2d8Ymlub21pYWxfbG9naXRfbG9nfGJpbm9taWFsX3JuZ3xibG9ja3xjYXRlZ29yaWNhbF9sb2d8Y2F0ZWdvcmljYWxfbG9naXRfbG9nfGNhdGVnb3JpY2FsX3JuZ3xjYXVjaHlfY2NkZl9sb2d8Y2F1Y2h5X2NkZnxjYXVjaHlfY2RmX2xvZ3xjYXVjaHlfbG9nfGNhdWNoeV9ybmd8Y2JydHxjZWlsfGNoaV9zcXVhcmVfY2NkZl9sb2d8Y2hpX3NxdWFyZV9jZGZ8Y2hpX3NxdWFyZV9jZGZfbG9nfGNoaV9zcXVhcmVfbG9nfGNoaV9zcXVhcmVfcm5nfGNob2xlc2t5X2RlY29tcG9zZXxjb2x8Y29sc3xjb2x1bW5zX2RvdF9wcm9kdWN0fGNvbHVtbnNfZG90X3NlbGZ8Y29zfGNvc2h8Y3Jvc3Nwcm9kfGNzcl9leHRyYWN0X3V8Y3NyX2V4dHJhY3Rfdnxjc3JfZXh0cmFjdF93fGNzcl9tYXRyaXhfdGltZXNfdmVjdG9yfGNzcl90b19kZW5zZV9tYXRyaXh8Y3VtdWxhdGl2ZV9zdW18ZGV0ZXJtaW5hbnR8ZGlhZ19tYXRyaXh8ZGlhZ19wb3N0X211bHRpcGx5fGRpYWdfcHJlX211bHRpcGx5fGRpYWdvbmFsfGRpZ2FtbWF8ZGltc3xkaXJpY2hsZXRfbG9nfGRpcmljaGxldF9ybmd8ZGlzdGFuY2V8ZG90X3Byb2R1Y3R8ZG90X3NlbGZ8ZG91YmxlX2V4cG9uZW50aWFsX2NjZGZfbG9nfGRvdWJsZV9leHBvbmVudGlhbF9jZGZ8ZG91YmxlX2V4cG9uZW50aWFsX2NkZl9sb2d8ZG91YmxlX2V4cG9uZW50aWFsX2xvZ3xkb3VibGVfZXhwb25lbnRpYWxfcm5nfGV8ZWlnZW52YWx1ZXNfc3ltfGVpZ2VudmVjdG9yc19zeW18ZXJmfGVyZmN8ZXhwfGV4cDJ8ZXhwX21vZF9ub3JtYWxfY2NkZl9sb2d8ZXhwX21vZF9ub3JtYWxfY2RmfGV4cF9tb2Rfbm9ybWFsX2NkZl9sb2d8ZXhwX21vZF9ub3JtYWxfbG9nfGV4cF9tb2Rfbm9ybWFsX3JuZ3xleHBtMXxleHBvbmVudGlhbF9jY2RmX2xvZ3xleHBvbmVudGlhbF9jZGZ8ZXhwb25lbnRpYWxfY2RmX2xvZ3xleHBvbmVudGlhbF9sb2d8ZXhwb25lbnRpYWxfcm5nfGZhYnN8ZmFsbGluZ19mYWN0b3JpYWx8ZmRpbXxmbG9vcnxmbWF8Zm1heHxmbWlufGZtb2R8ZnJlY2hldF9jY2RmX2xvZ3xmcmVjaGV0X2NkZnxmcmVjaGV0X2NkZl9sb2d8ZnJlY2hldF9sb2d8ZnJlY2hldF9ybmd8Z2FtbWFfY2NkZl9sb2d8Z2FtbWFfY2RmfGdhbW1hX2NkZl9sb2d8Z2FtbWFfbG9nfGdhbW1hX3B8Z2FtbWFfcXxnYW1tYV9ybmd8Z2F1c3NpYW5fZGxtX29ic19sb2d8Z2V0X2xwfGd1bWJlbF9jY2RmX2xvZ3xndW1iZWxfY2RmfGd1bWJlbF9jZGZfbG9nfGd1bWJlbF9sb2d8Z3VtYmVsX3JuZ3xoZWFkfGh5cGVyZ2VvbWV0cmljX2xvZ3xoeXBlcmdlb21ldHJpY19ybmd8aHlwb3R8aWZfZWxzZXxpbnRfc3RlcHxpbnZ8aW52X2NoaV9zcXVhcmVfY2NkZl9sb2d8aW52X2NoaV9zcXVhcmVfY2RmfGludl9jaGlfc3F1YXJlX2NkZl9sb2d8aW52X2NoaV9zcXVhcmVfbG9nfGludl9jaGlfc3F1YXJlX3JuZ3xpbnZfY2xvZ2xvZ3xpbnZfZ2FtbWFfY2NkZl9sb2d8aW52X2dhbW1hX2NkZnxpbnZfZ2FtbWFfY2RmX2xvZ3xpbnZfZ2FtbWFfbG9nfGludl9nYW1tYV9ybmd8aW52X2xvZ2l0fGludl9waGl8aW52X3NxcnR8aW52X3NxdWFyZXxpbnZfd2lzaGFydF9sb2d8aW52X3dpc2hhcnRfcm5nfGludmVyc2V8aW52ZXJzZV9zcGR8aXNfaW5mfGlzX25hbnxsYmV0YXxsZ2FtbWF8bGtqX2NvcnJfY2hvbGVza3lfbG9nfGxral9jb3JyX2Nob2xlc2t5X3JuZ3xsa2pfY29ycl9sb2d8bGtqX2NvcnJfcm5nfGxtZ2FtbWF8bG9nfGxvZzEwfGxvZzFtfGxvZzFtX2V4cHxsb2cxbV9pbnZfbG9naXR8bG9nMXB8bG9nMXBfZXhwfGxvZzJ8bG9nX2RldGVybWluYW50fGxvZ19kaWZmX2V4cHxsb2dfZmFsbGluZ19mYWN0b3JpYWx8bG9nX2ludl9sb2dpdHxsb2dfbWl4fGxvZ19yaXNpbmdfZmFjdG9yaWFsfGxvZ19zb2Z0bWF4fGxvZ19zdW1fZXhwfGxvZ2lzdGljX2NjZGZfbG9nfGxvZ2lzdGljX2NkZnxsb2dpc3RpY19jZGZfbG9nfGxvZ2lzdGljX2xvZ3xsb2dpc3RpY19ybmd8bG9naXR8bG9nbm9ybWFsX2NjZGZfbG9nfGxvZ25vcm1hbF9jZGZ8bG9nbm9ybWFsX2NkZl9sb2d8bG9nbm9ybWFsX2xvZ3xsb2dub3JtYWxfcm5nfG1hY2hpbmVfcHJlY2lzaW9ufG1heHxtZGl2aWRlX2xlZnRfdHJpX2xvd3xtZGl2aWRlX3JpZ2h0X3RyaV9sb3d8bWVhbnxtaW58bW9kaWZpZWRfYmVzc2VsX2ZpcnN0X2tpbmR8bW9kaWZpZWRfYmVzc2VsX3NlY29uZF9raW5kfG11bHRpX2dwX2Nob2xlc2t5X2xvZ3xtdWx0aV9ncF9sb2d8bXVsdGlfbm9ybWFsX2Nob2xlc2t5X2xvZ3xtdWx0aV9ub3JtYWxfY2hvbGVza3lfcm5nfG11bHRpX25vcm1hbF9sb2d8bXVsdGlfbm9ybWFsX3ByZWNfbG9nfG11bHRpX25vcm1hbF9ybmd8bXVsdGlfc3R1ZGVudF90X2xvZ3xtdWx0aV9zdHVkZW50X3Rfcm5nfG11bHRpbm9taWFsX2xvZ3xtdWx0aW5vbWlhbF9ybmd8bXVsdGlwbHlfbG9nfG11bHRpcGx5X2xvd2VyX3RyaV9zZWxmX3RyYW5zcG9zZXxuZWdfYmlub21pYWxfMl9jY2RmX2xvZ3xuZWdfYmlub21pYWxfMl9jZGZ8bmVnX2Jpbm9taWFsXzJfY2RmX2xvZ3xuZWdfYmlub21pYWxfMl9sb2d8bmVnX2Jpbm9taWFsXzJfbG9nX2xvZ3xuZWdfYmlub21pYWxfMl9sb2dfcm5nfG5lZ19iaW5vbWlhbF8yX3JuZ3xuZWdfYmlub21pYWxfY2NkZl9sb2d8bmVnX2Jpbm9taWFsX2NkZnxuZWdfYmlub21pYWxfY2RmX2xvZ3xuZWdfYmlub21pYWxfbG9nfG5lZ19iaW5vbWlhbF9ybmd8bmVnYXRpdmVfaW5maW5pdHl8bm9ybWFsX2NjZGZfbG9nfG5vcm1hbF9jZGZ8bm9ybWFsX2NkZl9sb2d8bm9ybWFsX2xvZ3xub3JtYWxfcm5nfG5vdF9hX251bWJlcnxudW1fZWxlbWVudHN8b3JkZXJlZF9sb2dpc3RpY19sb2d8b3JkZXJlZF9sb2dpc3RpY19ybmd8b3dlbnNfdHxwYXJldG9fY2NkZl9sb2d8cGFyZXRvX2NkZnxwYXJldG9fY2RmX2xvZ3xwYXJldG9fbG9nfHBhcmV0b19ybmd8cGFyZXRvX3R5cGVfMl9jY2RmX2xvZ3xwYXJldG9fdHlwZV8yX2NkZnxwYXJldG9fdHlwZV8yX2NkZl9sb2d8cGFyZXRvX3R5cGVfMl9sb2d8cGFyZXRvX3R5cGVfMl9ybmd8cGl8cG9pc3Nvbl9jY2RmX2xvZ3xwb2lzc29uX2NkZnxwb2lzc29uX2NkZl9sb2d8cG9pc3Nvbl9sb2d8cG9pc3Nvbl9sb2dfbG9nfHBvaXNzb25fbG9nX3JuZ3xwb2lzc29uX3JuZ3xwb3NpdGl2ZV9pbmZpbml0eXxwb3d8cHJvZHxxcl9RfHFyX1J8cXVhZF9mb3JtfHF1YWRfZm9ybV9kaWFnfHF1YWRfZm9ybV9zeW18cmFua3xyYXlsZWlnaF9jY2RmX2xvZ3xyYXlsZWlnaF9jZGZ8cmF5bGVpZ2hfY2RmX2xvZ3xyYXlsZWlnaF9sb2d8cmF5bGVpZ2hfcm5nfHJlcF9hcnJheXxyZXBfbWF0cml4fHJlcF9yb3dfdmVjdG9yfHJlcF92ZWN0b3J8cmlzaW5nX2ZhY3RvcmlhbHxyb3VuZHxyb3d8cm93c3xyb3dzX2RvdF9wcm9kdWN0fHJvd3NfZG90X3NlbGZ8c2NhbGVkX2ludl9jaGlfc3F1YXJlX2NjZGZfbG9nfHNjYWxlZF9pbnZfY2hpX3NxdWFyZV9jZGZ8c2NhbGVkX2ludl9jaGlfc3F1YXJlX2NkZl9sb2d8c2NhbGVkX2ludl9jaGlfc3F1YXJlX2xvZ3xzY2FsZWRfaW52X2NoaV9zcXVhcmVfcm5nfHNkfHNlZ21lbnR8c2lufHNpbmd1bGFyX3ZhbHVlc3xzaW5ofHNpemV8c2tld19ub3JtYWxfY2NkZl9sb2d8c2tld19ub3JtYWxfY2RmfHNrZXdfbm9ybWFsX2NkZl9sb2d8c2tld19ub3JtYWxfbG9nfHNrZXdfbm9ybWFsX3JuZ3xzb2Z0bWF4fHNvcnRfYXNjfHNvcnRfZGVzY3xzb3J0X2luZGljZXNfYXNjfHNvcnRfaW5kaWNlc19kZXNjfHNxcnR8c3FydDJ8c3F1YXJlfHNxdWFyZWRfZGlzdGFuY2V8c3RlcHxzdHVkZW50X3RfY2NkZl9sb2d8c3R1ZGVudF90X2NkZnxzdHVkZW50X3RfY2RmX2xvZ3xzdHVkZW50X3RfbG9nfHN0dWRlbnRfdF9ybmd8c3ViX2NvbHxzdWJfcm93fHN1bXx0YWlsfHRhbnx0YW5ofHRjcm9zc3Byb2R8dGdhbW1hfHRvX2FycmF5XzFkfHRvX2FycmF5XzJkfHRvX21hdHJpeHx0b19yb3dfdmVjdG9yfHRvX3ZlY3Rvcnx0cmFjZXx0cmFjZV9nZW5fcXVhZF9mb3JtfHRyYWNlX3F1YWRfZm9ybXx0cmlnYW1tYXx0cnVuY3x1bmlmb3JtX2NjZGZfbG9nfHVuaWZvcm1fY2RmfHVuaWZvcm1fY2RmX2xvZ3x1bmlmb3JtX2xvZ3x1bmlmb3JtX3JuZ3x2YXJpYW5jZXx2b25fbWlzZXNfbG9nfHZvbl9taXNlc19ybmd8d2VpYnVsbF9jY2RmX2xvZ3x3ZWlidWxsX2NkZnx3ZWlidWxsX2NkZl9sb2d8d2VpYnVsbF9sb2d8d2VpYnVsbF9ybmd8d2llbmVyX2xvZ3x3aXNoYXJ0X2xvZ3x3aXNoYXJ0X3JuZylcXGIiLGU6aGxqcy5JTU1FRElBVEVfUkUscjoxMH0se2NOOiJmdW5jdGlvbiIsYjoiKD86YmVybm91bGxpfGJlcm5vdWxsaV9sb2dpdHxiZXRhfGJldGFfYmlub21pYWx8Ymlub21pYWx8Ymlub21pYWxfbG9naXR8Y2F0ZWdvcmljYWx8Y2F0ZWdvcmljYWxfbG9naXR8Y2F1Y2h5fGNoaV9zcXVhcmV8ZGlyaWNobGV0fGRvdWJsZV9leHBvbmVudGlhbHxleHBfbW9kX25vcm1hbHxleHBvbmVudGlhbHxmcmVjaGV0fGdhbW1hfGdhdXNzaWFuX2RsbV9vYnN8Z3VtYmVsfGh5cGVyZ2VvbWV0cmljfGludl9jaGlfc3F1YXJlfGludl9nYW1tYXxpbnZfd2lzaGFydHxsa2pfY29ycnxsa2pfY29ycl9jaG9sZXNreXxsb2dpc3RpY3xsb2dub3JtYWx8bXVsdGlfZ3B8bXVsdGlfZ3BfY2hvbGVza3l8bXVsdGlfbm9ybWFsfG11bHRpX25vcm1hbF9jaG9sZXNreXxtdWx0aV9ub3JtYWxfcHJlY3xtdWx0aV9zdHVkZW50X3R8bXVsdGlub21pYWx8bmVnX2Jpbm9taWFsfG5lZ19iaW5vbWlhbF8yfG5lZ19iaW5vbWlhbF8yX2xvZ3xub3JtYWx8b3JkZXJlZF9sb2dpc3RpY3xwYXJldG98cGFyZXRvX3R5cGVfMnxwb2lzc29ufHBvaXNzb25fbG9nfHJheWxlaWdofHNjYWxlZF9pbnZfY2hpX3NxdWFyZXxza2V3X25vcm1hbHxzdHVkZW50X3R8dW5pZm9ybXx2b25fbWlzZXN8d2VpYnVsbHx3aWVuZXJ8d2lzaGFydClcXGIiLGU6aGxqcy5JTU1FRElBVEVfUkUscjoxMH0se2NOOiJrZXl3b3JkIixiOiIoPzpmb3J8aW58d2hpbGV8aWZ8dGhlbnxlbHNlfHJldHVybnxsb3dlcnx1cHBlcnxwcmludHxpbmNyZW1lbnRfbG9nX3Byb2J8aW50ZWdyYXRlX29kZXxyZWplY3QpXFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6MTB9LHtjTjoia2V5d29yZCIsYjoiKD86aW50fHJlYWx8dmVjdG9yfHNpbXBsZXh8dW5pdF92ZWN0b3J8b3JkZXJlZHxwb3NpdGl2ZV9vcmRlcmVkfHJvd192ZWN0b3J8bWF0cml4fGNob2xlc2t5X2ZhY3Rvcl9jb3Z8Y2hvbGVza3lfZmFjdG9yX2NvcnJ8Y29ycl9tYXRyaXh8Y292X21hdHJpeHx2b2lkKVxcYiIsZTpobGpzLklNTUVESUFURV9SRSxyOjV9LHtjTjoia2V5d29yZCIsYjoiKD86ZnVuY3Rpb25zfGRhdGF8dHJhbnNmb3JtZWRcXHMrZGF0YXxwYXJhbWV0ZXJzfHRyYW5zZm9ybWVkXFxzK3BhcmFtZXRlcnN8bW9kZWx8Z2VuZXJhdGVkXFxzK3F1YW50aXRpZXMpXFxiIixlOmhsanMuSU1NRURJQVRFX1JFLHI6NX1dfX07aGxqcy5MQU5HVUFHRVMueG1sPWZ1bmN0aW9uKCl7dmFyIGI9IltBLVphLXowLTlcXC5fOi1dKyI7dmFyIGE9e2VXOnRydWUsYzpbe2NOOiJhdHRyaWJ1dGUiLGI6YixyOjB9LHtiOic9IicsckI6dHJ1ZSxlOiciJyxjOlt7Y046InZhbHVlIixiOiciJyxlVzp0cnVlfV19LHtiOiI9JyIsckI6dHJ1ZSxlOiInIixjOlt7Y046InZhbHVlIixiOiInIixlVzp0cnVlfV19LHtiOiI9IixjOlt7Y046InZhbHVlIixiOiJbXlxccy8+XSsifV19XX07cmV0dXJue2NJOnRydWUsZE06e2M6W3tjTjoicGkiLGI6IjxcXD8iLGU6IlxcPz4iLHI6MTB9LHtjTjoiZG9jdHlwZSIsYjoiPCFET0NUWVBFIixlOiI+IixyOjEwLGM6W3tiOiJcXFsiLGU6IlxcXSJ9XX0se2NOOiJjb21tZW50IixiOiI8IS0tIixlOiItLT4iLHI6MTB9LHtjTjoiY2RhdGEiLGI6IjxcXCFcXFtDREFUQVxcWyIsZToiXFxdXFxdPiIscjoxMH0se2NOOiJ0YWciLGI6IjxzdHlsZSg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZTp7c3R5bGU6MX19LGM6W2FdLHN0YXJ0czp7Y046ImNzcyIsZToiPC9zdHlsZT4iLHJFOnRydWUsc0w6ImNzcyJ9fSx7Y046InRhZyIsYjoiPHNjcmlwdCg/PVxcc3w+fCQpIixlOiI+IixrOnt0aXRsZTp7c2NyaXB0OjF9fSxjOlthXSxzdGFydHM6e2NOOiJqYXZhc2NyaXB0IixlOiI8XC9zY3JpcHQ+IixyRTp0cnVlLHNMOiJqYXZhc2NyaXB0In19LHtjTjoidmJzY3JpcHQiLGI6IjwlIixlOiIlPiIsc0w6InZic2NyaXB0In0se2NOOiJ0YWciLGI6IjwvPyIsZToiLz8+IixjOlt7Y046InRpdGxlIixiOiJbXiAvPl0rIn0sYV19XX19fSgpOwpobGpzLmluaXRIaWdobGlnaHRpbmdPbkxvYWQoKTsKCg=="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gZXZhbCgiKCIgKyB0YXNrICsgIikiKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5pdFNpemluZyhlbCkgewogICAgdmFyIHNpemluZyA9IHNpemluZ1BvbGljeShlbCk7CiAgICBpZiAoIXNpemluZykKICAgICAgcmV0dXJuOwoKICAgIHZhciBjZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaHRtbHdpZGdldF9jb250YWluZXIiKTsKICAgIGlmICghY2VsKQogICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZihzaXppbmcucGFkZGluZykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubWFyZ2luID0gIjAiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmcgPSBwYWRkaW5nVG9Dc3ModW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZykpOwogICAgfQoKICAgIGlmIChzaXppbmcuZmlsbCkgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gImhpZGRlbiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgIGlmIChjZWwpIHsKICAgICAgICBjZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIHZhciBwYWQgPSB1bnBhY2tQYWRkaW5nKHNpemluZy5wYWRkaW5nKTsKICAgICAgICBjZWwuc3R5bGUudG9wID0gcGFkLnRvcCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLnJpZ2h0ID0gcGFkLnJpZ2h0ICsgInB4IjsKICAgICAgICBjZWwuc3R5bGUuYm90dG9tID0gcGFkLmJvdHRvbSArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmxlZnQgPSBwYWQubGVmdCArICJweCI7CiAgICAgICAgZWwuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2VsLm9mZnNldEhlaWdodDsgfQogICAgICB9OwoKICAgIH0gZWxzZSB7CiAgICAgIGVsLnN0eWxlLndpZHRoID0gcHgoc2l6aW5nLndpZHRoKTsKICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gcHgoc2l6aW5nLmhlaWdodCk7CgogICAgICByZXR1cm4gewogICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHsgcmV0dXJuIGVsLm9mZnNldFdpZHRoOyB9LAogICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKICAgIH0KICB9CgogIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBtZXRob2RzCiAgdmFyIGRlZmF1bHRzID0gewogICAgZmluZDogZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGwoc2NvcGUsICIuIiArIHRoaXMubmFtZSk7CiAgICB9LAogICAgcmVuZGVyRXJyb3I6IGZ1bmN0aW9uKGVsLCBlcnIpIHsKICAgICAgdmFyICRlbCA9ICQoZWwpOwoKICAgICAgdGhpcy5jbGVhckVycm9yKGVsKTsKCiAgICAgIC8vIEFkZCBhbGwgdGhlc2UgZXJyb3IgY2xhc3NlcywgYXMgU2hpbnkgZG9lcwogICAgICB2YXIgZXJyQ2xhc3MgPSAic2hpbnktb3V0cHV0LWVycm9yIjsKICAgICAgaWYgKGVyci50eXBlICE9PSBudWxsKSB7CiAgICAgICAgLy8gdXNlIHRoZSBjbGFzc2VzIG9mIHRoZSBlcnJvciBjb25kaXRpb24gYXMgQ1NTIGNsYXNzIG5hbWVzCiAgICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgIiArICQubWFwKGFzQXJyYXkoZXJyLnR5cGUpLCBmdW5jdGlvbih0eXBlKSB7CiAgICAgICAgICByZXR1cm4gZXJyQ2xhc3MgKyAiLSIgKyB0eXBlOwogICAgICAgIH0pLmpvaW4oIiAiKTsKICAgICAgfQogICAgICBlcnJDbGFzcyA9IGVyckNsYXNzICsgIiBodG1sd2lkZ2V0cy1lcnJvciI7CgogICAgICAvLyBJcyBlbCBpbmxpbmUgb3IgYmxvY2s/IElmIGlubGluZSBvciBpbmxpbmUtYmxvY2ssIGp1c3QgZGlzcGxheTpub25lIGl0CiAgICAgIC8vIGFuZCBhZGQgYW4gaW5saW5lIGVycm9yLgogICAgICB2YXIgZGlzcGxheSA9ICRlbC5jc3MoImRpc3BsYXkiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgZGlzcGxheSk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICAkZWwuaGlkZSgpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvclNwYW4gPSAkKCI8c3Bhbj4iKS5hZGRDbGFzcyhlcnJDbGFzcyk7CiAgICAgICAgICBlcnJvclNwYW4udGV4dChlcnIubWVzc2FnZSk7CiAgICAgICAgICAkZWwuYWZ0ZXIoZXJyb3JTcGFuKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZGlzcGxheSA9PT0gImJsb2NrIikgewogICAgICAgIC8vIElmIGJsb2NrLCBhZGQgYW4gZXJyb3IganVzdCBhZnRlciB0aGUgZWwsIHNldCB2aXNpYmlsaXR5Om5vbmUgb24gdGhlCiAgICAgICAgLy8gZWwsIGFuZCBwb3NpdGlvbiB0aGUgZXJyb3IgdG8gYmUgb24gdG9wIG9mIHRoZSBlbC4KICAgICAgICAvLyBNYXJrIGl0IHdpdGggYSB1bmlxdWUgSUQgYW5kIENTUyBjbGFzcyBzbyB3ZSBjYW4gcmVtb3ZlIGl0IGxhdGVyLgogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaGlkZGVuIik7CiAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAiIikgewogICAgICAgICAgdmFyIGVycm9yRGl2ID0gJCgiPGRpdj4iKS5hZGRDbGFzcyhlcnJDbGFzcykuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpCiAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgIC8vIHNldHRpbmcgd2lkdGggY2FuIHB1c2ggb3V0IHRoZSBwYWdlIHNpemUsIGZvcmNpbmcgb3RoZXJ3aXNlCiAgICAgICAgICAgIC8vIHVubmVjZXNzYXJ5IHNjcm9sbGJhcnMgdG8gYXBwZWFyIGFuZCBtYWtpbmcgaXQgaW1wb3NzaWJsZSBmb3IKICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgdG8gc2hyaW5rOyBzbyB1c2UgbWF4LXdpZHRoIGluc3RlYWQKICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgLmNzcygiaGVpZ2h0IiwgZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgICAgIGVycm9yRGl2LnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yRGl2KTsKCiAgICAgICAgICAvLyBSZWFsbHkgZHVtYiB3YXkgdG8ga2VlcCB0aGUgc2l6ZS9wb3NpdGlvbiBvZiB0aGUgZXJyb3IgaW4gc3luYyB3aXRoCiAgICAgICAgICAvLyB0aGUgcGFyZW50IGVsZW1lbnQgYXMgdGhlIHdpbmRvdyBpcyByZXNpemVkIG9yIHdoYXRldmVyLgogICAgICAgICAgdmFyIGludElkID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghZXJyb3JEaXZbMF0ucGFyZW50RWxlbWVudCkgewogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50SWQpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvckRpdgogICAgICAgICAgICAgIC5jc3MoInRvcCIsIGVsLm9mZnNldFRvcCkKICAgICAgICAgICAgICAuY3NzKCJsZWZ0IiwgZWwub2Zmc2V0TGVmdCkKICAgICAgICAgICAgICAuY3NzKCJtYXhXaWR0aCIsIGVsLm9mZnNldFdpZHRoKQogICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGNsZWFyRXJyb3I6IGZ1bmN0aW9uKGVsKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuZGF0YSgicmVzdG9yZS1kaXNwbGF5LW1vZGUiKTsKICAgICAgJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIiwgbnVsbCk7CgogICAgICBpZiAoZGlzcGxheSA9PT0gImlubGluZSIgfHwgZGlzcGxheSA9PT0gImlubGluZS1ibG9jayIpIHsKICAgICAgICBpZiAoZGlzcGxheSkKICAgICAgICAgICRlbC5jc3MoImRpc3BsYXkiLCBkaXNwbGF5KTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpewogICAgICAgICRlbC5jc3MoInZpc2liaWxpdHkiLCAiaW5oZXJpdCIpOwogICAgICAgICQoZWwubmV4dFNpYmxpbmcpLmZpbHRlcigiLmh0bWx3aWRnZXRzLWVycm9yIikucmVtb3ZlKCk7CiAgICAgIH0KICAgIH0sCiAgICBzaXppbmc6IHt9CiAgfTsKCiAgLy8gQ2FsbGVkIGJ5IHdpZGdldCBiaW5kaW5ncyB0byByZWdpc3RlciBhIG5ldyB0eXBlIG9mIHdpZGdldC4gVGhlIGRlZmluaXRpb24KICAvLyBvYmplY3QgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogIC8vIC0gbmFtZSAocmVxdWlyZWQpIC0gQSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgYmluZGluZyBuYW1lLCB3aGljaCB3aWxsIGJlCiAgLy8gICB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhlIENTUyBjbGFzc25hbWUgdG8gbG9vayBmb3IuCiAgLy8gLSBpbml0aWFsaXplIChvcHRpb25hbCkgLSBBIGZ1bmN0aW9uKGVsKSB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICB3aWRnZXQgZWxlbWVudDsgaWYgYSB2YWx1ZSBpcyByZXR1cm5lZCwgaXQgd2lsbCBiZSBwYXNzZWQgYXMgdGhlIHRoaXJkCiAgLy8gICB2YWx1ZSB0byByZW5kZXJWYWx1ZS4KICAvLyAtIHJlbmRlclZhbHVlIChyZXF1aXJlZCkgLSBBIGZ1bmN0aW9uKGVsLCBkYXRhLCBpbml0VmFsdWUpIHRoYXQgd2lsbCBiZQogIC8vICAgY2FsbGVkIHdpdGggZGF0YS4gU3RhdGljIGNvbnRleHRzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgb25jZSBwZXIKICAvLyAgIGVsZW1lbnQ7IFNoaW55IGFwcHMgd2lsbCBjYXVzZSB0aGlzIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIKICAvLyAgIGVsZW1lbnQsIGFzIHRoZSBkYXRhIGNoYW5nZXMuCiAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldCA9IGZ1bmN0aW9uKGRlZmluaXRpb24pIHsKICAgIGlmICghZGVmaW5pdGlvbi5uYW1lKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIG5hbWUiKTsKICAgIH0KICAgIGlmICghZGVmaW5pdGlvbi50eXBlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHR5cGUiKTsKICAgIH0KICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgb3V0cHV0IHdpZGdldHMKICAgIGlmIChkZWZpbml0aW9uLnR5cGUgIT09ICJvdXRwdXQiKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHdpZGdldCB0eXBlICciICsgZGVmaW5pdGlvbi50eXBlICsgIiciKTsKICAgIH0KICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IC5uYW1lIGlzIGEgdmFsaWQgQ1NTIGNsYXNzbmFtZQoKICAgIC8vIFN1cHBvcnQgbmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zLiBPbGQtc3R5bGUgY2xhc3MtYm91bmQKICAgIC8vIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldCAib2JqZWN0IiBwZXIgd2lkZ2V0IHBlciB0eXBlL2NsYXNzIG9mCiAgICAvLyB3aWRnZXQ7IHRoZSByZW5kZXJWYWx1ZSBhbmQgcmVzaXplIG1ldGhvZHMgb24gc3VjaCB3aWRnZXQgb2JqZWN0cwogICAgLy8gdGFrZSBlbCBhbmQgaW5zdGFuY2UgYXJndW1lbnRzLCBiZWNhdXNlIHRoZSB3aWRnZXQgb2JqZWN0IGNhbid0CiAgICAvLyBzdG9yZSB0aGVtLiBOZXctc3R5bGUgaW5zdGFuY2UtYm91bmQgZGVmaW5pdGlvbnMgaGF2ZSBvbmUgd2lkZ2V0CiAgICAvLyBvYmplY3QgcGVyIHdpZGdldCBpbnN0YW5jZTsgdGhlIGRlZmluaXRpb24gdGhhdCdzIHBhc3NlZCBpbiBkb2Vzbid0CiAgICAvLyBwcm92aWRlIHJlbmRlclZhbHVlIG9yIHJlc2l6ZSBtZXRob2RzIGF0IGFsbCwganVzdCB0aGUgc2luZ2xlIG1ldGhvZAogICAgLy8gICBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KQogICAgLy8gd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgdGhhdCBoYXMgcmVuZGVyVmFsdWUoeCkgYW5kIHJlc2l6ZSh3LCBoKS4KICAgIC8vIFRoaXMgZW5hYmxlcyBhIGZhciBtb3JlIG5hdHVyYWwgcHJvZ3JhbW1pbmcgc3R5bGUgZm9yIHRoZSB3aWRnZXQKICAgIC8vIGF1dGhvciwgd2hvIGNhbiBzdG9yZSBwZXItaW5zdGFuY2Ugc3RhdGUgdXNpbmcgZWl0aGVyIE9PLXN0eWxlCiAgICAvLyBpbnN0YW5jZSBmaWVsZHMgb3IgZnVuY3Rpb25hbC1zdHlsZSBjbG9zdXJlIHZhcmlhYmxlcyAoSSBndWVzcyB0aGlzCiAgICAvLyBpcyBpbiBjb250cmFzdCB0byB3aGF0IGNhbiBvbmx5IGJlIGNhbGxlZCBDLXN0eWxlIHBzZXVkby1PTyB3aGljaCBpcwogICAgLy8gd2hhdCB3ZSByZXF1aXJlZCBiZWZvcmUpLgogICAgaWYgKGRlZmluaXRpb24uZmFjdG9yeSkgewogICAgICBkZWZpbml0aW9uID0gY3JlYXRlTGVnYWN5RGVmaW5pdGlvbkFkYXB0ZXIoZGVmaW5pdGlvbik7CiAgICB9CgogICAgaWYgKCFkZWZpbml0aW9uLnJlbmRlclZhbHVlKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiV2lkZ2V0IG11c3QgaGF2ZSBhIHJlbmRlclZhbHVlIGZ1bmN0aW9uIik7CiAgICB9CgogICAgLy8gRm9yIHN0YXRpYyByZW5kZXJpbmcgKG5vbi1TaGlueSksIHVzZSBhIHNpbXBsZSB3aWRnZXQgcmVnaXN0cmF0aW9uCiAgICAvLyBzY2hlbWUuIFdlIGFsc28gdXNlIHRoaXMgc2NoZW1lIGZvciBTaGlueSBhcHBzL2RvY3VtZW50cyB0aGF0IGFsc28KICAgIC8vIGNvbnRhaW4gc3RhdGljIHdpZGdldHMuCiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgLy8gTWVyZ2UgZGVmYXVsdHMgaW50byB0aGUgZGVmaW5pdGlvbjsgZG9uJ3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uLgogICAgdmFyIHN0YXRpY0JpbmRpbmcgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKICAgIG92ZXJyaWRlTWV0aG9kKHN0YXRpY0JpbmRpbmcsICJmaW5kIiwgZnVuY3Rpb24oc3VwZXJmdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzY29wZSkgewogICAgICAgIHZhciByZXN1bHRzID0gc3VwZXJmdW5jKHNjb3BlKTsKICAgICAgICAvLyBGaWx0ZXIgb3V0IFNoaW55IG91dHB1dHMsIHdlIG9ubHkgd2FudCB0aGUgc3RhdGljIGtpbmQKICAgICAgICByZXR1cm4gZmlsdGVyQnlDbGFzcyhyZXN1bHRzLCAiaHRtbC13aWRnZXQtb3V0cHV0IiwgZmFsc2UpOwogICAgICB9OwogICAgfSk7CiAgICB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cy5wdXNoKHN0YXRpY0JpbmRpbmcpOwoKICAgIGlmIChzaGlueU1vZGUpIHsKICAgICAgLy8gU2hpbnkgaXMgcnVubmluZy4gUmVnaXN0ZXIgdGhlIGRlZmluaXRpb24gd2l0aCBhbiBvdXRwdXQgYmluZGluZy4KICAgICAgLy8gVGhlIGRlZmluaXRpb24gaXRzZWxmIHdpbGwgbm90IGJlIHRoZSBvdXRwdXQgYmluZGluZywgaW5zdGVhZAogICAgICAvLyB3ZSB3aWxsIG1ha2UgYW4gb3V0cHV0IGJpbmRpbmcgb2JqZWN0IHRoYXQgZGVsZWdhdGVzIHRvIHRoZQogICAgICAvLyBkZWZpbml0aW9uLiBUaGlzIGlzIGJlY2F1c2Ugd2UgZm9vbGlzaGx5IHVzZWQgdGhlIHNhbWUgbWV0aG9kCiAgICAgIC8vIG5hbWUgKHJlbmRlclZhbHVlKSBmb3IgaHRtbHdpZGdldHMgZGVmaW5pdGlvbiBhbmQgU2hpbnkgYmluZGluZ3MKICAgICAgLy8gYnV0IHRoZXkgYWN0dWFsbHkgaGF2ZSBxdWl0ZSBkaWZmZXJlbnQgc2VtYW50aWNzICh0aGUgU2hpbnkKICAgICAgLy8gYmluZGluZ3MgcmVjZWl2ZSBkYXRhIHRoYXQgaW5jbHVkZXMgbG90cyBvZiBtZXRhZGF0YSB0aGF0IGl0CiAgICAgIC8vIHN0cmlwcyBvZmYgYmVmb3JlIGNhbGxpbmcgaHRtbHdpZGdldHMgcmVuZGVyVmFsdWUpLiBXZSBjYW4ndAogICAgICAvLyBqdXN0IGlnbm9yZSB0aGUgZGlmZmVyZW5jZSBiZWNhdXNlIGluIHNvbWUgd2lkZ2V0cyBpdCdzIGhlbHBmdWwKICAgICAgLy8gdG8gY2FsbCB0aGlzLnJlbmRlclZhbHVlKCkgZnJvbSBpbnNpZGUgb2YgcmVzaXplKCksIGFuZCBpZgogICAgICAvLyB3ZSdyZSBub3QgZGVsZWdhdGluZywgdGhlbiB0aGF0IGNhbGwgd2lsbCBnbyB0byB0aGUgU2hpbnkKICAgICAgLy8gdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBodG1sd2lkZ2V0cyB2ZXJzaW9uLgoKICAgICAgLy8gTWVyZ2UgZGVmYXVsdHMgd2l0aCBkZWZpbml0aW9uLCB3aXRob3V0IG11dGF0aW5nIGVpdGhlci4KICAgICAgdmFyIGJpbmRpbmdEZWYgPSBleHRlbmQoe30sIGRlZmF1bHRzLCBkZWZpbml0aW9uKTsKCiAgICAgIC8vIFRoaXMgb2JqZWN0IHdpbGwgYmUgb3VyIGFjdHVhbCBTaGlueSBiaW5kaW5nLgogICAgICB2YXIgc2hpbnlCaW5kaW5nID0gbmV3IFNoaW55Lk91dHB1dEJpbmRpbmcoKTsKCiAgICAgIC8vIFdpdGggYSBmZXcgZXhjZXB0aW9ucywgd2UnbGwgd2FudCB0byBzaW1wbHkgdXNlIHRoZSBiaW5kaW5nRGVmJ3MKICAgICAgLy8gdmVyc2lvbiBvZiBtZXRob2RzIGlmIHRoZXkgYXJlIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bwogICAgICAvLyBTaGlueSdzIGRlZmF1bHRzLiBOT1RFOiBJZiBTaGlueSdzIG91dHB1dCBiaW5kaW5ncyBnYWluIGFkZGl0aW9uYWwKICAgICAgLy8gbWV0aG9kcyBpbiB0aGUgZnV0dXJlLCBhbmQgd2Ugd2FudCB0aGVtIHRvIGJlIG92ZXJyaWRlYWJsZSBieQogICAgICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcgZGVmaW5pdGlvbnMsIHRoZW4gd2UnbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGlzCiAgICAgIC8vIGxpc3QuCiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImdldElkIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVDaGFuZ2UiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAib25WYWx1ZUVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInJlbmRlckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgImNsZWFyRXJyb3IiKTsKICAgICAgZGVsZWdhdGVNZXRob2Qoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLCAic2hvd1Byb2dyZXNzIik7CgogICAgICAvLyBUaGUgZmluZCwgcmVuZGVyVmFsdWUsIGFuZCByZXNpemUgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHksIGJlY2F1c2Ugd2UKICAgICAgLy8gd2FudCB0byBhY3R1YWxseSBkZWNvcmF0ZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJpbmRpbmdEZWYgbWV0aG9kcy4KCiAgICAgIHNoaW55QmluZGluZy5maW5kID0gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IGJpbmRpbmdEZWYuZmluZChzY29wZSk7CgogICAgICAgIC8vIE9ubHkgcmV0dXJuIGVsZW1lbnRzIHRoYXQgYXJlIFNoaW55IG91dHB1dHMsIG5vdCBzdGF0aWMgb25lcwogICAgICAgIHZhciBkeW5hbWljUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKCIuaHRtbC13aWRnZXQtb3V0cHV0Iik7CgogICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB3aGF0ZXZlciBjYXVzZWQgU2hpbnkgdG8gdGhpbmsgdGhlcmUgbWlnaHQgYmUKICAgICAgICAvLyBuZXcgZHluYW1pYyBvdXRwdXRzLCBhbHNvIGNhdXNlZCB0aGVyZSB0byBiZSBuZXcgc3RhdGljIG91dHB1dHMuCiAgICAgICAgLy8gU2luY2UgdGhlcmUgbWlnaHQgYmUgbG90cyBvZiBkaWZmZXJlbnQgaHRtbHdpZGdldHMgYmluZGluZ3MsIHdlCiAgICAgICAgLy8gc2NoZWR1bGUgZXhlY3V0aW9uIGZvciBsYXRlci0tbm8gbmVlZCB0byBzdGF0aWNSZW5kZXIgbXVsdGlwbGUKICAgICAgICAvLyB0aW1lcy4KICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggIT09IGR5bmFtaWNSZXN1bHRzLmxlbmd0aCkKICAgICAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyKCk7CgogICAgICAgIHJldHVybiBkeW5hbWljUmVzdWx0czsKICAgICAgfTsKCiAgICAgIC8vIFdyYXAgcmVuZGVyVmFsdWUgdG8gaGFuZGxlIGluaXRpYWxpemF0aW9uLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzbid0CiAgICAgIC8vIHN1cHBvcnRlZCBuYXRpdmVseSBieSBTaGlueSBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCgogICAgICBzaGlueUJpbmRpbmcucmVuZGVyVmFsdWUgPSBmdW5jdGlvbihlbCwgZGF0YSkgewogICAgICAgIFNoaW55LnJlbmRlckRlcGVuZGVuY2llcyhkYXRhLmRlcHMpOwogICAgICAgIC8vIFJlc29sdmUgc3RyaW5ncyBtYXJrZWQgYXMgamF2YXNjcmlwdCBsaXRlcmFscyB0byBvYmplY3RzCiAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5ldmFscyAmJiBpIDwgZGF0YS5ldmFscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyKGRhdGEueCwgZGF0YS5ldmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICghYmluZGluZ0RlZi5yZW5kZXJPbk51bGxWYWx1ZSkgewogICAgICAgICAgaWYgKGRhdGEueCA9PT0gbnVsbCkgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnZpc2liaWxpdHkgPSAiaW5oZXJpdCI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICBpbml0U2l6aW5nKGVsKTsKCiAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIiwgdHJ1ZSk7CiAgICAgICAgICBpZiAoYmluZGluZ0RlZi5pbml0aWFsaXplKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBiaW5kaW5nRGVmLmluaXRpYWxpemUoZWwsIGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICAgIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiaW5kaW5nRGVmLnJlbmRlclZhbHVlKGVsLCBkYXRhLngsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgZXZhbEFuZFJ1bihkYXRhLmpzSG9va3MucmVuZGVyLCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiksIFtlbCwgZGF0YS54XSk7CiAgICAgIH07CgogICAgICAvLyBPbmx5IG92ZXJyaWRlIHJlc2l6ZSBpZiBiaW5kaW5nRGVmIGltcGxlbWVudHMgaXQKICAgICAgaWYgKGJpbmRpbmdEZWYucmVzaXplKSB7CiAgICAgICAgc2hpbnlCaW5kaW5nLnJlc2l6ZSA9IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAgICAgICAvLyBTaGlueSBjYW4gY2FsbCByZXNpemUgYmVmb3JlIGluaXRpYWxpemUvcmVuZGVyVmFsdWUgaGF2ZSBiZWVuCiAgICAgICAgICAvLyBjYWxsZWQsIHdoaWNoIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3Igd2lkZ2V0cy4KICAgICAgICAgIGlmIChlbGVtZW50RGF0YShlbCwgImluaXRpYWxpemVkIikpIHsKICAgICAgICAgICAgYmluZGluZ0RlZi5yZXNpemUoZWwsIHdpZHRoLCBoZWlnaHQsIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiKSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgU2hpbnkub3V0cHV0QmluZGluZ3MucmVnaXN0ZXIoc2hpbnlCaW5kaW5nLCBiaW5kaW5nRGVmLm5hbWUpOwogICAgfQogIH07CgogIHZhciBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogIGZ1bmN0aW9uIHNjaGVkdWxlU3RhdGljUmVuZGVyKCkgewogICAgaWYgKCFzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQpIHsKICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlclRpbWVySWQgPSBudWxsOwogICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIoKTsKICAgICAgfSwgMSk7CiAgICB9CiAgfQoKICAvLyBSZW5kZXIgc3RhdGljIHdpZGdldHMgYWZ0ZXIgdGhlIGRvY3VtZW50IGZpbmlzaGVzIGxvYWRpbmcKICAvLyBTdGF0aWNhbGx5IHJlbmRlciBhbGwgZWxlbWVudHMgdGhhdCBhcmUgb2YgdGhpcyB3aWRnZXQncyBjbGFzcwogIHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBiaW5kaW5ncyA9IHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXRzIHx8IFtdOwogICAgZm9yRWFjaChiaW5kaW5ncywgZnVuY3Rpb24oYmluZGluZykgewogICAgICB2YXIgbWF0Y2hlcyA9IGJpbmRpbmcuZmluZChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpOwogICAgICBmb3JFYWNoKG1hdGNoZXMsIGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgdmFyIHNpemVPYmogPSBpbml0U2l6aW5nKGVsLCBiaW5kaW5nKTsKCiAgICAgICAgaWYgKGhhc0NsYXNzKGVsLCAiaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWwuY2xhc3NOYW1lID0gZWwuY2xhc3NOYW1lICsgIiBodG1sLXdpZGdldC1zdGF0aWMtYm91bmQiOwoKICAgICAgICB2YXIgaW5pdFJlc3VsdDsKICAgICAgICBpZiAoYmluZGluZy5pbml0aWFsaXplKSB7CiAgICAgICAgICBpbml0UmVzdWx0ID0gYmluZGluZy5pbml0aWFsaXplKGVsLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICApOwogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIsIGluaXRSZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGJpbmRpbmcucmVzaXplKSB7CiAgICAgICAgICB2YXIgbGFzdFNpemUgPSB7fTsKICAgICAgICAgIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgICAgaDogc2l6ZU9iaiA/IHNpemVPYmouZ2V0SGVpZ2h0KCkgOiBlbC5vZmZzZXRIZWlnaHQKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNpemUudyA9PT0gMCAmJiBzaXplLmggPT09IDApCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSBsYXN0U2l6ZS53ICYmIHNpemUuaCA9PT0gbGFzdFNpemUuaCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGxhc3RTaXplID0gc2l6ZTsKICAgICAgICAgICAgYmluZGluZy5yZXNpemUoZWwsIHNpemUudywgc2l6ZS5oLCBpbml0UmVzdWx0KTsKICAgICAgICAgIH07CgogICAgICAgICAgb24od2luZG93LCAicmVzaXplIiwgcmVzaXplSGFuZGxlcik7CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGNhc2VzIHdoZXJlIHdlJ3JlIHJ1bm5pbmcgaW4gYSBTaGlueQogICAgICAgICAgLy8gYXBwLCBidXQgdGhlIHdpZGdldCBpdHNlbGYgaXMgbm90IGEgU2hpbnkgb3V0cHV0LCBidXQKICAgICAgICAgIC8vIHJhdGhlciBhIHNpbXBsZSBzdGF0aWMgd2lkZ2V0LiBPbmUgZXhhbXBsZSBvZiB0aGlzIGlzCiAgICAgICAgICAvLyBhbiBybWFya2Rvd24gZG9jdW1lbnQgdGhhdCBoYXMgcnVudGltZTpzaGlueSBhbmQgd2lkZ2V0CiAgICAgICAgICAvLyB0aGF0IGlzbid0IGluIGEgcmVuZGVyIGZ1bmN0aW9uLiBTaGlueSBvbmx5IGtub3dzIHRvCiAgICAgICAgICAvLyBjYWxsIHJlc2l6ZSBoYW5kbGVycyBmb3IgU2hpbnkgb3V0cHV0cywgbm90IGZvciBzdGF0aWMKICAgICAgICAgIC8vIHdpZGdldHMsIHNvIHdlIGRvIGl0IG91cnNlbHZlcy4KICAgICAgICAgIGlmICh3aW5kb3cualF1ZXJ5KSB7CiAgICAgICAgICAgIHdpbmRvdy5qUXVlcnkoZG9jdW1lbnQpLm9uKAogICAgICAgICAgICAgICJzaG93bi5odG1sd2lkZ2V0cyBzaG93bi5icy50YWIuaHRtbHdpZGdldHMgc2hvd24uYnMuY29sbGFwc2UuaHRtbHdpZGdldHMiLAogICAgICAgICAgICAgIHJlc2l6ZUhhbmRsZXIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgImhpZGRlbi5odG1sd2lkZ2V0cyBoaWRkZW4uYnMudGFiLmh0bWx3aWRnZXRzIGhpZGRlbi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiBpb3NsaWRlcywgd2hpY2gKICAgICAgICAgIC8vIGZsaXBzIHNsaWRlcyBiZXR3ZWVuIGRpc3BsYXk6bm9uZSBhbmQgZGlzcGxheTpibG9jay4KICAgICAgICAgIC8vIElkZWFsbHkgd2Ugd291bGQgbm90IGhhdmUgdG8gaGF2ZSBpb3NsaWRlLXNwZWNpZmljIGNvZGUKICAgICAgICAgIC8vIGhlcmUsIGJ1dCByYXRoZXIgaGF2ZSBpb3NsaWRlcyByYWlzZSBhIGdlbmVyaWMgZXZlbnQsCiAgICAgICAgICAvLyBidXQgdGhlIHJtYXJrZG93biBwYWNrYWdlIGp1c3Qgd2VudCB0byBDUkFOIHNvIHRoZQogICAgICAgICAgLy8gd2luZG93IHRvIGdldHRpbmcgdGhhdCBmaXhlZCBtYXkgYmUgbG9uZy4KICAgICAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgICAgICAvLyBJdCdzIE9LIHRvIGxpbWl0IHRoaXMgdG8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgLy8gYnJvd3NlcnMgYmVjYXVzZSBpb3NsaWRlcyBpdHNlbGYgb25seSBzdXBwb3J0cwogICAgICAgICAgICAvLyBzdWNoIGJyb3dzZXJzLgogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlZW50ZXIiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgICAgb24oZG9jdW1lbnQsICJzbGlkZWxlYXZlIiwgcmVzaXplSGFuZGxlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc2NyaXB0RGF0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFtkYXRhLWZvcj0nIiArIGVsLmlkICsgIiddW3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXSIpOwogICAgICAgIGlmIChzY3JpcHREYXRhKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc2NyaXB0RGF0YS50ZXh0Q29udGVudCB8fCBzY3JpcHREYXRhLnRleHQpOwogICAgICAgICAgLy8gUmVzb2x2ZSBzdHJpbmdzIG1hcmtlZCBhcyBqYXZhc2NyaXB0IGxpdGVyYWxzIHRvIG9iamVjdHMKICAgICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgZGF0YS5ldmFscyAmJiBrIDwgZGF0YS5ldmFscy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuZXZhbHVhdGVTdHJpbmdNZW1iZXIoZGF0YS54LCBkYXRhLmV2YWxzW2tdKTsKICAgICAgICAgIH0KICAgICAgICAgIGJpbmRpbmcucmVuZGVyVmFsdWUoZWwsIGRhdGEueCwgaW5pdFJlc3VsdCk7CiAgICAgICAgICBldmFsQW5kUnVuKGRhdGEuanNIb29rcy5yZW5kZXIsIGluaXRSZXN1bHQsIFtlbCwgZGF0YS54XSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGludm9rZVBvc3RSZW5kZXJIYW5kbGVycygpOwogIH0KCiAgLy8gV2FpdCB1bnRpbCBhZnRlciB0aGUgZG9jdW1lbnQgaGFzIGxvYWRlZCB0byByZW5kZXIgdGhlIHdpZGdldHMuCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gZXZhbCgiKCIgKyBvW3BhcnRdICsgIikiKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
<link href="data:text/css;charset=utf-8,%0A%2Eleaflet%2Dmap%2Dpane%2C%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%2C%0A%2Eleaflet%2Dtile%2Dpane%2C%0A%2Eleaflet%2Dtile%2Dcontainer%2C%0A%2Eleaflet%2Doverlay%2Dpane%2C%0A%2Eleaflet%2Dshadow%2Dpane%2C%0A%2Eleaflet%2Dmarker%2Dpane%2C%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Doverlay%2Dpane%20svg%2C%0A%2Eleaflet%2Dzoom%2Dbox%2C%0A%2Eleaflet%2Dimage%2Dlayer%2C%0A%2Eleaflet%2Dlayer%20%7B%0Aposition%3A%20absolute%3B%0Aleft%3A%200%3B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Aoverflow%3A%20hidden%3B%0A%2Dms%2Dtouch%2Daction%3A%20none%3B%0Atouch%2Daction%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%2Dwebkit%2Duser%2Ddrag%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dmarker%2Dicon%2C%0A%2Eleaflet%2Dmarker%2Dshadow%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%20%7B%0Amax%2Dwidth%3A%20none%20%21important%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20img%2Eleaflet%2Dimage%2Dlayer%20%7B%0Amax%2Dwidth%3A%2015000px%20%21important%3B%0A%7D%0A%2Eleaflet%2Dtile%20%7B%0Afilter%3A%20inherit%3B%0Avisibility%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dloaded%20%7B%0Avisibility%3A%20inherit%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Awidth%3A%200%3B%0Aheight%3A%200%3B%0A%7D%0A%0A%2Eleaflet%2Doverlay%2Dpane%20svg%20%7B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtile%2Dpane%20%7B%20z%2Dindex%3A%202%3B%20%7D%0A%2Eleaflet%2Dobjects%2Dpane%20%7B%20z%2Dindex%3A%203%3B%20%7D%0A%2Eleaflet%2Doverlay%2Dpane%20%7B%20z%2Dindex%3A%204%3B%20%7D%0A%2Eleaflet%2Dshadow%2Dpane%20%7B%20z%2Dindex%3A%205%3B%20%7D%0A%2Eleaflet%2Dmarker%2Dpane%20%7B%20z%2Dindex%3A%206%3B%20%7D%0A%2Eleaflet%2Dpopup%2Dpane%20%7B%20z%2Dindex%3A%207%3B%20%7D%0A%2Eleaflet%2Dvml%2Dshape%20%7B%0Awidth%3A%201px%3B%0Aheight%3A%201px%3B%0A%7D%0A%2Elvml%20%7B%0Abehavior%3A%20url%28%23default%23VML%29%3B%0Adisplay%3A%20inline%2Dblock%3B%0Aposition%3A%20absolute%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%20%7B%0Aposition%3A%20relative%3B%0Az%2Dindex%3A%207%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dtop%2C%0A%2Eleaflet%2Dbottom%20%7B%0Aposition%3A%20absolute%3B%0Az%2Dindex%3A%201000%3B%0Apointer%2Devents%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtop%20%7B%0Atop%3A%200%3B%0A%7D%0A%2Eleaflet%2Dright%20%7B%0Aright%3A%200%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%7B%0Abottom%3A%200%3B%0A%7D%0A%2Eleaflet%2Dleft%20%7B%0Aleft%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20left%3B%0Aclear%3A%20both%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Afloat%3A%20right%3B%0A%7D%0A%2Eleaflet%2Dtop%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dtop%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dleft%3A%2010px%3B%0A%7D%0A%2Eleaflet%2Dright%20%2Eleaflet%2Dcontrol%20%7B%0Amargin%2Dright%3A%2010px%3B%0A%7D%0A%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%200%3B%0A%2Dwebkit%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Dmoz%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0A%2Do%2Dtransition%3A%20opacity%200%2E2s%20linear%3B%0Atransition%3A%20opacity%200%2E2s%20linear%3B%0A%7D%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dtile%2Dloaded%2C%0A%2Eleaflet%2Dfade%2Danim%20%2Eleaflet%2Dmap%2Dpane%20%2Eleaflet%2Dpopup%20%7B%0Aopacity%3A%201%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20%2Dwebkit%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Dmoz%2Dtransition%3A%20%2Dmoz%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%2Do%2Dtransition%3A%20%2Do%2Dtransform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0Atransition%3A%20transform%200%2E25s%20cubic%2Dbezier%280%2C0%2C0%2E25%2C1%29%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dpan%2Danim%20%2Eleaflet%2Dtile%2C%0A%2Eleaflet%2Dtouching%20%2Eleaflet%2Dzoom%2Danimated%20%7B%0A%2Dwebkit%2Dtransition%3A%20none%3B%0A%2Dmoz%2Dtransition%3A%20none%3B%0A%2Do%2Dtransition%3A%20none%3B%0Atransition%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Danim%20%2Eleaflet%2Dzoom%2Dhide%20%7B%0Avisibility%3A%20hidden%3B%0A%7D%0A%0A%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%7B%0Acursor%3A%20%2Dwebkit%2Dgrab%3B%0Acursor%3A%20%2Dmoz%2Dgrab%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dpane%2C%0A%2Eleaflet%2Dcontrol%20%7B%0Acursor%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dcontainer%2C%0A%2Eleaflet%2Ddragging%20%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20move%3B%0Acursor%3A%20%2Dwebkit%2Dgrabbing%3B%0Acursor%3A%20%2Dmoz%2Dgrabbing%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Abackground%3A%20%23ddd%3B%0Aoutline%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%20%7B%0Acolor%3A%20%230078A8%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dactive%20%7B%0Aoutline%3A%202px%20solid%20orange%3B%0A%7D%0A%2Eleaflet%2Dzoom%2Dbox%20%7B%0Aborder%3A%202px%20dotted%20%2338f%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E5%29%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%7B%0Afont%3A%2012px%2F1%2E5%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0A%7D%0A%0A%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E65%29%3B%0Aborder%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23fff%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ccc%3B%0Awidth%3A%2026px%3B%0Aheight%3A%2026px%3B%0Aline%2Dheight%3A%2026px%3B%0Adisplay%3A%20block%3B%0Atext%2Dalign%3A%20center%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20black%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dposition%3A%2050%25%2050%25%3B%0Abackground%2Drepeat%3A%20no%2Drepeat%3B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Ahover%20%7B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Afirst%2Dchild%20%7B%0Aborder%2Dtop%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dtop%2Dright%2Dradius%3A%204px%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%3Alast%2Dchild%20%7B%0Aborder%2Dbottom%2Dleft%2Dradius%3A%204px%3B%0Aborder%2Dbottom%2Dright%2Dradius%3A%204px%3B%0Aborder%2Dbottom%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dbar%20a%2Eleaflet%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Abackground%2Dcolor%3A%20%23f4f4f4%3B%0Acolor%3A%20%23bbb%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20a%20%7B%0Awidth%3A%2030px%3B%0Aheight%3A%2030px%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dzoom%2Din%2C%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%3A%20bold%2018px%20%27Lucida%20Console%27%2C%20Monaco%2C%20monospace%3B%0Atext%2Dindent%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Din%20%7B%0Afont%2Dsize%3A%2022px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dzoom%2Dout%20%7B%0Afont%2Dsize%3A%2024px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontrol%2Dlayers%20%7B%0Abox%2Dshadow%3A%200%201px%205px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0Abackground%3A%20%23fff%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAVbSURBVEiJrZZfSFt3FMe%2Fv3tvbmLUZleNKSHE%2FLGRiNbGRovTtrA9lcFkpcOnMvawwhhjrb3soQ8djGFhXMQNRqEvY3R9kJVuPpRRWQebcdKYxkaHqcHchKJ2rVo1WhNz%2F%2Fz2UOLUadVuv9fvOedzfuec3x9CKcV%2B1qVLlwgAdHV17cuR7AfU29tb43a73wWAVCr1Q0dHx8T%2FCuru7i5ubGw843K5ms1mMwBgdXUV6XQ6HI1Gb3Z2dj7%2Fz6C%2Bvr6T1dXVp6xWa%2Bl2%2Buzs7PLk5OTP7e3tv70S6Pr1647q6uoOt9vtYRjmpcnouo5UKiVPTk72nj17dmpPIEmS%2BIaGhnaPx3O8tLSU3ahRSotyudzrAGAymf4ghGQ36svLy5osywOxWKxPFMX8jqBbt241ejyed%2Bx2e9nWjPL5fK2iKC2UUiMAEELWDAbDEM%2Fz41ttZ2Zmnsmy%2FOPp06ejm0DXrl2rqK2tPeNyuQ7zPL9pi5qmVaytrZ3Qdf3gdiVhGOYvo9H4O8uyc1sSI%2Bl0enR8fPzmuXPn5sjt27ff8nq9bwiCYNpSJsPa2lqzqqr1AF7eJEDnOG7MaDSGCSHKRmFhYSGXTCZ%2FZd1u93dOp3NJEAS9ICqK4snlcm%2Fpuu4EQHaBAADRdf2gqqo1hJBllmUXCsLjx4%2BL7t69e4Ztamqaffjw4QepVOr5oUOHDKqqvqkoShAAvwfA1sVrmlataVqlqqqzvb29lnA43KwoymeEUoqenp7XdF3vW11dPX7s2DHi9XpfgfHPSiaTuHfvHjWbzQMMw7SfP39%2BkUSj0ZOU0qsA%2FEtLSwiHwygpKUFraysOHDiwL0Amk8Hg4CBWVlbQ3NwMi8UCAHFCyIesw%2BH43uFwuAwGg9lkMsHj8SCfzyMUCkFRFNhsNux2YDVNQzQaRSgUgsvlwtGjR2EyvZitbDbL9Pf3H2YDgcD8xMREk67rCZvN5iSEkLKyMrjdbsiyjJGREVgslh13NzU1hf7%2Bfui6jra2NlitVhBCQCmlo6OjoYGBASWbzX5BKKW4cuWKhRDyk67rJ4LBIFNRUbEeaHZ2FpFIBDabDS0tLSgqKipkiqGhITx58gTBYBBWq3XdZ25uDpFIhLIsO8jzfPuFCxeekTt37rQCuAqgfmVlBfF4HOXl5Thy5Ah4%2FsXgUUoRj8chyzIaGhoAALFYDB6PB36%2FH4S8OAH5fB4PHjzA%2FPw8%2FH4%2FSkpKACAB4CPW6%2FXeqKysrOI4rpjnedjtdmSzWUSjURgMBgiCAEIIrFYrHA4HxsfHsbi4iNbWVtjt9nWILMsYGhpCeXk5ampqYDQaC3AyPDxcSy5evPg2IaTL6XTO%2B3y%2BNkIIAwCKoiCRSEBVVTQ1Ne3Yo0wmg%2BHhYXAcB5%2FPB4PBUJBoMpkclGW5lFJ6mVBKIYpiMYDLHMedCgQCnCAI%2FoL1wsICEokEHA4H6uvr1ydQ13WMjY1hamoKPp8PgiBshE%2Fev38%2FoyjKLwA%2BlyTp%2BabbWxTFOgDfCIKAQCAQ4DiutNCjdDqNp0%2BfIhAIAABGRkZQWVkJl8u1Xj5N01Zjsdjw3NwcBfCxJEl%2FFmL%2F6z0SRZEAeJ8QIvp8vsWqqqqWgpbL5RCPxwEAfr9%2F%2FawAwPT0dDgejxfput4D4FtJkjYF3vGFFUWxHMCXRqPxcDAYtBYXF1dtZ5fNZmcikcijbDY7DuBTSZLmt7Pb9c8gimIbIeQrm82Wqaura2EYxggAlFI1Ho8PTk9PmymlnZIkhV4WZ0%2B%2FIFEUOQCdDMO8V19fn2NZ1hCLxaimaTcAdEuSpO4WY1%2F%2FOlEUnQC%2BBkABfCJJ0qO9%2Bv4NmO9xnZob3WcAAAAASUVORK5CYII%3D%29%3B%0Awidth%3A%2036px%3B%0Aheight%3A%2036px%3B%0A%7D%0A%2Eleaflet%2Dretina%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Abackground%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAbrwAAG68BXhqRHAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAArPSURBVGiB3Zp7TFvXHce%2F916%2FeBhCDInJwDjGBhvjQHi5SclaKRL5Z1Wl%2FrEq%2FWNr11TJmkpMw900pLVrplJ1cadFarp0zdZmmpZpf3SqNrUKfSnKgwI2sQPGBmNjAsUOxCW8bGzfe8%2F%2BSEAkMfa1A5m075%2F2%2Bf3O%2BZ7X595zLkUIwf%2BT6EdRSWdnp7izs1P8KOqitnqE3n%2F%2F%2FQMajeYZAPD7%2FR8fPXr00lbWt2WGTp48qdRoNC%2Fs2bNHXVhYyALA%2FPy86Pr16wG%2F3%2F%2Fhq6%2B%2BGtqKejfdUGdnJ6XT6Q4bDIZWjUaTNLnf76fcbvdlr9d7vqura1MbsKmGTp8%2BXadWqw%2Fv3bu3UCQS8anKsixLX7t2bT4QCJw%2Ffvy4c7PasCmGTpw4Ia%2BqqnrRZDIZSkpK2ExiZ2dnRYODg%2B7R0dE%2Fv%2Fbaa4sP25aHNnT27Nkf6HS6QwaD4aF2TLfbzXu93gtHjhz5z8PkydrQqVOnKtVq9Y%2Fq6uqUubm5GY3KRopEIiKn0xkKBAJ%2FbW9v92WTI2NDnZ2dYoPB8ILRaGwoKyvjsqk0naamphiXyzXgdrs%2F7OrqSmQSm5GhM2fOHNBoNM%2FU1dVJKYoSFEgIEcVisWYAkEql%2FRRFCRpNQgjldDpjfr%2F%2F42PHjglmlyBDJ0%2BeVO7evfsndXV1FatMEaJEIqGOx%2BMHCCFyAKAoalEikVwSi8UBoTnm5%2BdFTqdzYnx8%2FC9C2JXS0CpT9Hr9gcrKypTb8HrxPJ%2B%2FsrJygOf53cn%2Bp2l6XCaTXaJpekloTp%2FPR3s8nkvp2LWhoXfffbderVYfbmhoKEjHlPVtjcVidSzLNhFCUj67URSVEIlENqlU6gQgKD%2FLsvTAwMBCIBA4%2F8orrziS5r3f0IkTJ%2BQ6ne6IyWQy7NixQ%2FCCZFm2NB6PP8Hz%2FHahMQBA0%2FR3EonkokgkCgqNmZmZEQ8ODrq9Xu%2FZ%2B9l1j6EPPvjgKZ1Od6impoYSmpzneVksFtvHcZxBaEwyMQzjlkqlPTRNrwiNGR4eJl6v98JLL73079XfKEIITp06VVlRUfHj%2Bvr6nZkwJR6P6xOJxH5CiCxTA8lEUdSKWCy%2BKpFIPEJjIpGIyOFw3JyYmDjX3t7uo86dO3fUaDQ2lJeXCzbCcdz2WCz2BM%2Fzpdk1PbVomg5KpdKLDMN8JzRmcnJS5HK5Bhi9Xv9RcXHx7V27dqUd6rtMMcfj8YOEkIKHa3bKeuQsy9bwPC9mGCZEUVTaTWNsbKzQbrc%2FRXV0dBAAMYVCcfnpp5%2BeKC4uTmrsfqY8KqVj161bt2SffPJJRTgcbgUgZVpbW3sIIQei0Wij0%2BksmZubW9DpdEsUdWdf4Hk%2BPxqNHmRZtgWA9NFZWZOU4zgdy7LFd0crDgCEEHz66aelX3zxxfcjkUg9gAmapg8zV65c8fX09PwpHo%2FzhJC22dnZ2oGBARQUFCwVFBTUxOPxQ4QQxf%2FAyD0ihBSxLFtDCCFerzdy%2Fvz5PcFg8CAhRAqgSy6XP%2Ffmm2%2BO3LNtd3R0VFEU9R6AgyKRiNfr9fS%2BffsgFj%2BS8420SiQS6Onpgcfj4VmWpQF8SQh5%2BZ133hldLSNaH%2FDss8%2BGGYYJ3Lhxg9jtdnpoaAiTk5NoampCdXX1IzewXiMjI7DZbJifn4dMJqPNZjNRqVQBjuPC68utjhA1MDDwPIDfASgG7vSGw%2BHA2NgYAEClUmH%2F%2Fv0oKip6pEbm5uZw9epV3LhxAwCg1WpRX1%2B%2FftbcAvCLhoaGjwAQyuFwGDmOOwOgNVnCcDiMvr4%2BzM3NQSaTwWg0orm5GTS9tUd6PM%2Bjv78fLpcLKysrKCoqQktLCxSKDZfzZYZhjjFarfYfKpWqmabppAslNzcXWq0WMpkMwWAQU1NTCAQCyM%2FPx7Zt27bEzMTEBD7%2F%2FHP4fD5QFIWGhgaYzWbk5uZuGMNxXPHXX39tYkwm07nh4eGZ3Nxcz%2Fbt27%2BXrDBFUVAoFNBoNIhEIggGg%2FD5fLh9%2BzaUSuWmbRqRSAQXL15EX18flpeXoVKp8OSTT0KpVGIVI8nk8%2Fn6uru7xYuLi3WrHDr07bffmvx%2Bf295eTktkUiSwlMsFkOlUqGkpAQzMzMIBoPwer0AAKVS%2BVBmHA4HvvrqK4RCIeTl5aG1tRU1NTUpO2t5eXn6s88%2BGx4fHzcDmKVp%2BjBFCMEbb7whW1xc%2FBWAXwJgKysrbS0tLY9TFCXaKBnP8xgaGoLb7QbHcSgtLcW%2BffsyNhYKhdDT04NgMAiGYWAwGFBbW5tyjRJC2L6%2Bvis%2Bn68Jd3bqt%2BVy%2BVuvv%2F76yoYcysvLi5nNZmm6Bi4sLMBmsyEUCkEsFkOv1%2BOxxx5LOw0TiQS%2B%2BeYbeDweJBIJKJVKNDU1oaAg9SNiKBRCb28vu7y8LEISDt1jqLu7ezuAt0Oh0IsjIyNUPB5HeXk5mpubIZWmfuqZmJiA3W7HysoKCgsLU7LrPqagsbERFRUVKfPHYjH09%2FdjcnISEokE1dXVUCqV%2FwLQ3tbWNvmAoe7u7ucBnMRdDrEsC6%2FXu5bAZDKhqqoq5eJMxy4BTHlAhBCMjo5icHAQqx2s0%2BkgEq2thiUAvwFwqq2tjaUuXLhQA%2BCPAL6fLOHCwgJcLhcWFxeFsADAg%2Byqra0FAAwNDQllygN55HI5jEZjqil5HcBPmerq6r%2Ft2LFjL8MwOclKSaVSlJWVQSKRIBQKwefzIRqNYufOnRsu3GTsmp6eFswUlmVht9ths9mQSCRQVVUFo9EImWzjF2OO4%2BROp1NPdXR0JAAsaLVat0ajeXzDCNyZxx6PBzdv3kROTg727t0LtVqdKgTRaBR2ux0A0NjYiJycpP22pkAggGvXrq11ml6vT7t%2Bp6en%2B10uVykhpIzq6OhoA%2FAegEqxWOxsamrKl8vllakShMNhDA8Pr1VqNpuRn5%2BfstJ0WlpaQm9v71pn1dTUpJ2S0Wh02mazTUajUTMAH4CXKUIILBaLDMAqh%2BiSkpIre%2FbsaWEYZsN5wfM8%2FH4%2FAoEAKIqCwWCAyWRKuWkkEyEEg4ODcLvdIIRArVZDo9Gk5ZDb7b4yNTW1xiEAb1mt1ns5ZLFYqnBntA5SFDVlNBqDu3btak7VoOXlZXg8HoTDYeTn56OlpUUwXEOhEPr6%2BrC0tASFQgG9Xo%2B8vLyUMeFweNDhcEg5jqsC8CWAl61Wa3IOrTP2HIDfA9iZk5PT29TUVJ6Tk7MrXeNGRkYghF0bMCWlkUQiMWe324cWFhZaAcwA%2BLnVav37%2FeU2PAq2WCyFALoAHAMQLSsrsxkMhpSPQ%2BnYJYApSeX3%2By%2BPjY3VANgG4AyATqvVOp%2BsbNrbB4vF0nw3SQPDMKP19fUxhUJhShWTjF0AMmEKAGBxcdFns9mWEolEHYABAMesVmt%2FqhhB1ykWi4UBcBzAbwHICwoKLjc2NtaKxeINX18JIZicnMTY2Bh4%2Fs6xGk3T0Gq1KC8vT7l5cBwXuX79et%2Fs7OzjAKIAfg3gtNVqTXvBltGFl8ViKQXwBwA%2FBPCdVqsd1mg0Sd90V7XKLgAZMwXAPwH8zGq1Cj7Iz%2BqO1WKxZMyudErGFKvV2p1pnqwvjbNhVzKlYko27Xroa%2F1s2LWqdEzJRpv2JUkm7BLKlGy0qZ%2FGCGFXJkzJRlvyNVYydkkkktxMmZKNtuzzsvvZBYADEEEGTMlGW%2F4B4Dp2ARkyJRv9F9vsxWD%2F43R9AAAAAElFTkSuQmCC%29%3B%0Abackground%2Dsize%3A%2026px%2026px%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Awidth%3A%2044px%3B%0Aheight%3A%2044px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%2C%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dtoggle%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%2Eleaflet%2Dcontrol%2Dlayers%2Dlist%20%7B%0Adisplay%3A%20block%3B%0Aposition%3A%20relative%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dexpanded%20%7B%0Apadding%3A%206px%2010px%206px%206px%3B%0Acolor%3A%20%23333%3B%0Abackground%3A%20%23fff%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dselector%20%7B%0Amargin%2Dtop%3A%202px%3B%0Aposition%3A%20relative%3B%0Atop%3A%201px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%20label%20%7B%0Adisplay%3A%20block%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dlayers%2Dseparator%20%7B%0Aheight%3A%200%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0Amargin%3A%205px%20%2D10px%205px%20%2D6px%3B%0A%7D%0A%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%20%7B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E7%29%3B%0Amargin%3A%200%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Apadding%3A%200%205px%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%20%7B%0Atext%2Ddecoration%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dattribution%20a%3Ahover%20%7B%0Atext%2Ddecoration%3A%20underline%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dcontainer%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Afont%2Dsize%3A%2011px%3B%0A%7D%0A%2Eleaflet%2Dleft%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dleft%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dbottom%20%2Eleaflet%2Dcontrol%2Dscale%20%7B%0Amargin%2Dbottom%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%20%7B%0Aborder%3A%202px%20solid%20%23777%3B%0Aborder%2Dtop%3A%20none%3B%0Aline%2Dheight%3A%201%2E1%3B%0Apadding%3A%202px%205px%201px%3B%0Afont%2Dsize%3A%2011px%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Aoverflow%3A%20hidden%3B%0A%2Dmoz%2Dbox%2Dsizing%3A%20content%2Dbox%3B%0Abox%2Dsizing%3A%20content%2Dbox%3B%0Abackground%3A%20%23fff%3B%0Abackground%3A%20rgba%28255%2C%20255%2C%20255%2C%200%2E5%29%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23777%3B%0Aborder%2Dbottom%3A%20none%3B%0Amargin%2Dtop%3A%20%2D2px%3B%0A%7D%0A%2Eleaflet%2Dcontrol%2Dscale%2Dline%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%20%7B%0Aborder%2Dbottom%3A%202px%20solid%20%23777%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dattribution%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Abox%2Dshadow%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Dtouch%20%2Eleaflet%2Dbar%20%7B%0Aborder%3A%202px%20solid%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0A%7D%0A%0A%2Eleaflet%2Dpopup%20%7B%0Aposition%3A%20absolute%3B%0Atext%2Dalign%3A%20center%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Apadding%3A%201px%3B%0Atext%2Dalign%3A%20left%3B%0Aborder%2Dradius%3A%2012px%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20%7B%0Amargin%3A%2013px%2019px%3B%0Aline%2Dheight%3A%201%2E4%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%20p%20%7B%0Amargin%3A%2018px%200%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%3A%200%20auto%3B%0Awidth%3A%2040px%3B%0Aheight%3A%2020px%3B%0Aposition%3A%20relative%3B%0Aoverflow%3A%20hidden%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2017px%3B%0Aheight%3A%2017px%3B%0Apadding%3A%201px%3B%0Amargin%3A%20%2D10px%20auto%200%3B%0A%2Dwebkit%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dmoz%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Dms%2Dtransform%3A%20rotate%2845deg%29%3B%0A%2Do%2Dtransform%3A%20rotate%2845deg%29%3B%0Atransform%3A%20rotate%2845deg%29%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Dpopup%2Dtip%20%7B%0Abackground%3A%20white%3B%0Abox%2Dshadow%3A%200%203px%2014px%20rgba%280%2C0%2C0%2C0%2E4%29%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%20%7B%0Aposition%3A%20absolute%3B%0Atop%3A%200%3B%0Aright%3A%200%3B%0Apadding%3A%204px%204px%200%200%3B%0Atext%2Dalign%3A%20center%3B%0Awidth%3A%2018px%3B%0Aheight%3A%2014px%3B%0Afont%3A%2016px%2F14px%20Tahoma%2C%20Verdana%2C%20sans%2Dserif%3B%0Acolor%3A%20%23c3c3c3%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Abackground%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dcontainer%20a%2Eleaflet%2Dpopup%2Dclose%2Dbutton%3Ahover%20%7B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Eleaflet%2Dpopup%2Dscrolled%20%7B%0Aoverflow%3A%20auto%3B%0Aborder%2Dbottom%3A%201px%20solid%20%23ddd%3B%0Aborder%2Dtop%3A%201px%20solid%20%23ddd%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%20%7B%0Azoom%3A%201%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Awidth%3A%2024px%3B%0Amargin%3A%200%20auto%3B%0A%2Dms%2Dfilter%3A%20%22progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%22%3B%0Afilter%3A%20progid%3ADXImageTransform%2EMicrosoft%2EMatrix%28M11%3D0%2E70710678%2C%20M12%3D0%2E70710678%2C%20M21%3D%2D0%2E70710678%2C%20M22%3D0%2E70710678%29%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%2Dcontainer%20%7B%0Amargin%2Dtop%3A%20%2D1px%3B%0A%7D%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dzoom%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dcontrol%2Dlayers%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dcontent%2Dwrapper%2C%0A%2Eleaflet%2Doldie%20%2Eleaflet%2Dpopup%2Dtip%20%7B%0Aborder%3A%201px%20solid%20%23999%3B%0A%7D%0A%0A%2Eleaflet%2Ddiv%2Dicon%20%7B%0Abackground%3A%20%23fff%3B%0Aborder%3A%201px%20solid%20%23666%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoKIExlYWZsZXQsIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBtb2JpbGUtZnJpZW5kbHkgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cDovL2xlYWZsZXRqcy5jb20KIChjKSAyMDEwLTIwMTUsIFZsYWRpbWlyIEFnYWZvbmtpbgogKGMpIDIwMTAtMjAxMSwgQ2xvdWRNYWRlCiovCiFmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5MLG89e307by52ZXJzaW9uPSIwLjcuNyIsIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bzoiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUobyksby5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuTD1uLHRoaXN9LHQuTD1vLG8uVXRpbD17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2ZvcihpPTAsbj1zLmxlbmd0aDtuPmk7aSsrKXtvPXNbaV18fHt9O2ZvcihlIGluIG8pby5oYXNPd25Qcm9wZXJ0eShlKSYmKHRbZV09b1tlXSl9cmV0dXJuIHR9LGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjI/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpOm51bGw7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxpfHxhcmd1bWVudHMpfX0sc3RhbXA6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9Il9sZWFmbGV0X2lkIjtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGlbZV09aVtlXXx8Kyt0LGlbZV19fSgpLGludm9rZUVhY2g6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG87aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTtmb3IobiBpbiB0KWUuYXBwbHkoaSxbbix0W25dXS5jb25jYXQobykpO3JldHVybiEwfXJldHVybiExfSxsaW1pdEV4ZWNCeUludGVydmFsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvO3JldHVybiBmdW5jdGlvbiBzKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuP3ZvaWQobz0hMCk6KG49ITAsc2V0VGltZW91dChmdW5jdGlvbigpe249ITEsbyYmKHMuYXBwbHkoaSxhKSxvPSExKX0sZSksdm9pZCB0LmFwcGx5KGksYSkpfX0sZmFsc2VGbjpmdW5jdGlvbigpe3JldHVybiExfSxmb3JtYXROdW06ZnVuY3Rpb24odCxlKXt2YXIgaT1NYXRoLnBvdygxMCxlfHw1KTtyZXR1cm4gTWF0aC5yb3VuZCh0KmkpL2l9LHRyaW06ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0sc3BsaXRXb3JkczpmdW5jdGlvbih0KXtyZXR1cm4gby5VdGlsLnRyaW0odCkuc3BsaXQoL1xzKy8pfSxzZXRPcHRpb25zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQub3B0aW9ucz1vLmV4dGVuZCh7fSx0Lm9wdGlvbnMsZSksdC5vcHRpb25zfSxnZXRQYXJhbVN0cmluZzpmdW5jdGlvbih0LGUsaSl7dmFyIG49W107Zm9yKHZhciBvIGluIHQpbi5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP28udG9VcHBlckNhc2UoKTpvKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHRbb10pKTtyZXR1cm4oZSYmLTEhPT1lLmluZGV4T2YoIj8iKT8iJiI6Ij8iKStuLmpvaW4oIiYiKX0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5yZXBsYWNlKC9ceyAqKFtcd19dKykgKlx9L2csZnVuY3Rpb24odCxuKXt2YXIgbz1lW25dO2lmKG89PT1pKXRocm93IG5ldyBFcnJvcigiTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlICIrdCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG8mJihvPW8oZSkpLG99KX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfSxlbXB0eUltYWdlVXJsOiJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9In0sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBpLG4sbz1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyJdO2ZvcihpPTA7aTxvLmxlbmd0aCYmIW47aSsrKW49dFtvW2ldK2VdO3JldHVybiBufWZ1bmN0aW9uIGkoZSl7dmFyIGk9K25ldyBEYXRlLG89TWF0aC5tYXgoMCwxNi0oaS1uKSk7cmV0dXJuIG49aStvLHQuc2V0VGltZW91dChlLG8pfXZhciBuPTAscz10LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8ZSgiUmVxdWVzdEFuaW1hdGlvbkZyYW1lIil8fGksYT10LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxlKCJDYW5jZWxBbmltYXRpb25GcmFtZSIpfHxlKCJDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKXx8ZnVuY3Rpb24oZSl7dC5jbGVhclRpbWVvdXQoZSl9O28uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lPWZ1bmN0aW9uKGUsbixhLHIpe3JldHVybiBlPW8uYmluZChlLG4pLGEmJnM9PT1pP3ZvaWQgZSgpOnMuY2FsbCh0LGUscil9LG8uVXRpbC5jYW5jZWxBbmltRnJhbWU9ZnVuY3Rpb24oZSl7ZSYmYS5jYWxsKHQsZSl9fSgpLG8uZXh0ZW5kPW8uVXRpbC5leHRlbmQsby5iaW5kPW8uVXRpbC5iaW5kLG8uc3RhbXA9by5VdGlsLnN0YW1wLG8uc2V0T3B0aW9ucz1vLlV0aWwuc2V0T3B0aW9ucyxvLkNsYXNzPWZ1bmN0aW9uKCl7fSxvLkNsYXNzLmV4dGVuZD1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9pbml0SG9va3MmJnRoaXMuY2FsbEluaXRIb29rcygpfSxpPWZ1bmN0aW9uKCl7fTtpLnByb3RvdHlwZT10aGlzLnByb3RvdHlwZTt2YXIgbj1uZXcgaTtuLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGU9bjtmb3IodmFyIHMgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHMpJiYicHJvdG90eXBlIiE9PXMmJihlW3NdPXRoaXNbc10pO3Quc3RhdGljcyYmKG8uZXh0ZW5kKGUsdC5zdGF0aWNzKSxkZWxldGUgdC5zdGF0aWNzKSx0LmluY2x1ZGVzJiYoby5VdGlsLmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQodC5pbmNsdWRlcykpLGRlbGV0ZSB0LmluY2x1ZGVzKSx0Lm9wdGlvbnMmJm4ub3B0aW9ucyYmKHQub3B0aW9ucz1vLmV4dGVuZCh7fSxuLm9wdGlvbnMsdC5vcHRpb25zKSksby5leHRlbmQobix0KSxuLl9pbml0SG9va3M9W107dmFyIGE9dGhpcztyZXR1cm4gZS5fX3N1cGVyX189YS5wcm90b3R5cGUsbi5jYWxsSW5pdEhvb2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRIb29rc0NhbGxlZCl7YS5wcm90b3R5cGUuY2FsbEluaXRIb29rcyYmYS5wcm90b3R5cGUuY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpLHRoaXMuX2luaXRIb29rc0NhbGxlZD0hMDtmb3IodmFyIHQ9MCxlPW4uX2luaXRIb29rcy5sZW5ndGg7ZT50O3QrKyluLl9pbml0SG9va3NbdF0uY2FsbCh0aGlzKX19LGV9LG8uQ2xhc3MuaW5jbHVkZT1mdW5jdGlvbih0KXtvLmV4dGVuZCh0aGlzLnByb3RvdHlwZSx0KX0sby5DbGFzcy5tZXJnZU9wdGlvbnM9ZnVuY3Rpb24odCl7by5leHRlbmQodGhpcy5wcm90b3R5cGUub3B0aW9ucyx0KX0sby5DbGFzcy5hZGRJbml0SG9vaz1mdW5jdGlvbih0KXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7dGhpc1t0XS5hcHBseSh0aGlzLGUpfTt0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzPXRoaXMucHJvdG90eXBlLl9pbml0SG9va3N8fFtdLHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChpKX07dmFyIHM9Il9sZWFmbGV0X2V2ZW50cyI7by5NaXhpbj17fSxvLk1peGluLkV2ZW50cz17YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoby5VdGlsLmludm9rZUVhY2godCx0aGlzLmFkZEV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuLGEscixoLGwsdSxjLGQ9dGhpc1tzXT10aGlzW3NdfHx7fSxwPWkmJmkhPT10aGlzJiZvLnN0YW1wKGkpO2Zvcih0PW8uVXRpbC5zcGxpdFdvcmRzKHQpLG49MCxhPXQubGVuZ3RoO2E+bjtuKyspcj17YWN0aW9uOmUsY29udGV4dDppfHx0aGlzfSxoPXRbbl0scD8obD1oKyJfaWR4Iix1PWwrIl9sZW4iLGM9ZFtsXT1kW2xdfHx7fSxjW3BdfHwoY1twXT1bXSxkW3VdPShkW3VdfHwwKSsxKSxjW3BdLnB1c2gocikpOihkW2hdPWRbaF18fFtdLGRbaF0ucHVzaChyKSk7cmV0dXJuIHRoaXN9LGhhc0V2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXNbc107cmV0dXJuISFlJiYodCBpbiBlJiZlW3RdLmxlbmd0aD4wfHx0KyJfaWR4ImluIGUmJmVbdCsiX2lkeF9sZW4iXT4wKX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7aWYoIXRoaXNbc10pcmV0dXJuIHRoaXM7aWYoIXQpcmV0dXJuIHRoaXMuY2xlYXJBbGxFdmVudExpc3RlbmVycygpO2lmKG8uVXRpbC5pbnZva2VFYWNoKHQsdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyLHRoaXMsZSxpKSlyZXR1cm4gdGhpczt2YXIgbixhLHIsaCxsLHUsYyxkLHAsXz10aGlzW3NdLG09aSYmaSE9PXRoaXMmJm8uc3RhbXAoaSk7Zm9yKHQ9by5VdGlsLnNwbGl0V29yZHModCksbj0wLGE9dC5sZW5ndGg7YT5uO24rKylpZihyPXRbbl0sdT1yKyJfaWR4IixjPXUrIl9sZW4iLGQ9X1t1XSxlKXtpZihoPW0mJmQ/ZFttXTpfW3JdKXtmb3IobD1oLmxlbmd0aC0xO2w+PTA7bC0tKWhbbF0uYWN0aW9uIT09ZXx8aSYmaFtsXS5jb250ZXh0IT09aXx8KHA9aC5zcGxpY2UobCwxKSxwWzBdLmFjdGlvbj1vLlV0aWwuZmFsc2VGbik7aSYmZCYmMD09PWgubGVuZ3RoJiYoZGVsZXRlIGRbbV0sX1tjXS0tKX19ZWxzZSBkZWxldGUgX1tyXSxkZWxldGUgX1t1XSxkZWxldGUgX1tjXTtyZXR1cm4gdGhpc30sY2xlYXJBbGxFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiBkZWxldGUgdGhpc1tzXSx0aGlzfSxmaXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXNFdmVudExpc3RlbmVycyh0KSlyZXR1cm4gdGhpczt2YXIgaSxuLGEscixoLGw9by5VdGlsLmV4dGVuZCh7fSxlLHt0eXBlOnQsdGFyZ2V0OnRoaXN9KSx1PXRoaXNbc107aWYodVt0XSlmb3IoaT11W3RdLnNsaWNlKCksbj0wLGE9aS5sZW5ndGg7YT5uO24rKylpW25dLmFjdGlvbi5jYWxsKGlbbl0uY29udGV4dCxsKTtyPXVbdCsiX2lkeCJdO2ZvcihoIGluIHIpaWYoaT1yW2hdLnNsaWNlKCkpZm9yKG49MCxhPWkubGVuZ3RoO2E+bjtuKyspaVtuXS5hY3Rpb24uY2FsbChpW25dLmNvbnRleHQsbCk7cmV0dXJuIHRoaXN9LGFkZE9uZVRpbWVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpKXtpZihvLlV0aWwuaW52b2tlRWFjaCh0LHRoaXMuYWRkT25lVGltZUV2ZW50TGlzdGVuZXIsdGhpcyxlLGkpKXJldHVybiB0aGlzO3ZhciBuPW8uYmluZChmdW5jdGlvbigpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsaSkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4saSl9LHRoaXMpO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodCxlLGkpLmFkZEV2ZW50TGlzdGVuZXIodCxuLGkpfX0sby5NaXhpbi5FdmVudHMub249by5NaXhpbi5FdmVudHMuYWRkRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vZmY9by5NaXhpbi5FdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcixvLk1peGluLkV2ZW50cy5vbmNlPW8uTWl4aW4uRXZlbnRzLmFkZE9uZVRpbWVFdmVudExpc3RlbmVyLG8uTWl4aW4uRXZlbnRzLmZpcmU9by5NaXhpbi5FdmVudHMuZmlyZUV2ZW50LGZ1bmN0aW9uKCl7dmFyIG49IkFjdGl2ZVhPYmplY3QiaW4gdCxzPW4mJiFlLmFkZEV2ZW50TGlzdGVuZXIsYT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkscj0tMSE9PWEuaW5kZXhPZigid2Via2l0IiksaD0tMSE9PWEuaW5kZXhPZigiY2hyb21lIiksbD0tMSE9PWEuaW5kZXhPZigicGhhbnRvbSIpLHU9LTEhPT1hLmluZGV4T2YoImFuZHJvaWQiKSxjPS0xIT09YS5zZWFyY2goImFuZHJvaWQgWzIzXSIpLGQ9LTEhPT1hLmluZGV4T2YoImdlY2tvIikscD10eXBlb2Ygb3JpZW50YXRpb24hPWkrIiIsXz0hdC5Qb2ludGVyRXZlbnQmJnQuTVNQb2ludGVyRXZlbnQsbT10LlBvaW50ZXJFdmVudCYmdC5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQmJnQubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHxfLGY9ImRldmljZVBpeGVsUmF0aW8iaW4gdCYmdC5kZXZpY2VQaXhlbFJhdGlvPjF8fCJtYXRjaE1lZGlhImluIHQmJnQubWF0Y2hNZWRpYSgiKG1pbi1yZXNvbHV0aW9uOjE0NGRwaSkiKSYmdC5tYXRjaE1lZGlhKCIobWluLXJlc29sdXRpb246MTQ0ZHBpKSIpLm1hdGNoZXMsZz1lLmRvY3VtZW50RWxlbWVudCx2PW4mJiJ0cmFuc2l0aW9uImluIGcuc3R5bGUseT0iV2ViS2l0Q1NTTWF0cml4ImluIHQmJiJtMTEiaW4gbmV3IHQuV2ViS2l0Q1NTTWF0cml4JiYhYyxQPSJNb3pQZXJzcGVjdGl2ZSJpbiBnLnN0eWxlLEw9Ik9UcmFuc2l0aW9uImluIGcuc3R5bGUseD0hdC5MX0RJU0FCTEVfM0QmJih2fHx5fHxQfHxMKSYmIWwsdz0hdC5MX05PX1RPVUNIJiYhbCYmKG18fCJvbnRvdWNoc3RhcnQiaW4gdHx8dC5Eb2N1bWVudFRvdWNoJiZlIGluc3RhbmNlb2YgdC5Eb2N1bWVudFRvdWNoKTtvLkJyb3dzZXI9e2llOm4saWVsdDk6cyx3ZWJraXQ6cixnZWNrbzpkJiYhciYmIXQub3BlcmEmJiFuLGFuZHJvaWQ6dSxhbmRyb2lkMjM6YyxjaHJvbWU6aCxpZTNkOnYsd2Via2l0M2Q6eSxnZWNrbzNkOlAsb3BlcmEzZDpMLGFueTNkOngsbW9iaWxlOnAsbW9iaWxlV2Via2l0OnAmJnIsbW9iaWxlV2Via2l0M2Q6cCYmeSxtb2JpbGVPcGVyYTpwJiZ0Lm9wZXJhLHRvdWNoOncsbXNQb2ludGVyOl8scG9pbnRlcjptLHJldGluYTpmfX0oKSxvLlBvaW50PWZ1bmN0aW9uKHQsZSxpKXt0aGlzLng9aT9NYXRoLnJvdW5kKHQpOnQsdGhpcy55PWk/TWF0aC5yb3VuZChlKTplfSxvLlBvaW50LnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uUG9pbnQodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQoby5wb2ludCh0KSl9LF9hZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXN9LHN1YnRyYWN0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KG8ucG9pbnQodCkpfSxfc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXN9LGRpdmlkZUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KHQpfSxfZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueC89dCx0aGlzLnkvPXQsdGhpc30sbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KHQpfSxfbXVsdGlwbHlCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfSxyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdW5kKCl9LF9yb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc30sZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpfSxfZmxvb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dD1vLnBvaW50KHQpO3ZhciBlPXQueC10aGlzLngsaT10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoZSplK2kqaSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLE1hdGguYWJzKHQueCk8PU1hdGguYWJzKHRoaXMueCkmJk1hdGguYWJzKHQueSk8PU1hdGguYWJzKHRoaXMueSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIlBvaW50KCIrby5VdGlsLmZvcm1hdE51bSh0aGlzLngpKyIsICIrby5VdGlsLmZvcm1hdE51bSh0aGlzLnkpKyIpIn19LG8ucG9pbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0IGluc3RhbmNlb2Ygby5Qb2ludD90Om8uVXRpbC5pc0FycmF5KHQpP25ldyBvLlBvaW50KHRbMF0sdFsxXSk6dD09PWl8fG51bGw9PT10P3Q6bmV3IG8uUG9pbnQodCxlLG4pfSxvLkJvdW5kcz1mdW5jdGlvbih0LGUpe2lmKHQpZm9yKHZhciBpPWU/W3QsZV06dCxuPTAsbz1pLmxlbmd0aDtvPm47bisrKXRoaXMuZXh0ZW5kKGlbbl0pfSxvLkJvdW5kcy5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXtyZXR1cm4gdD1vLnBvaW50KHQpLHRoaXMubWlufHx0aGlzLm1heD8odGhpcy5taW4ueD1NYXRoLm1pbih0LngsdGhpcy5taW4ueCksdGhpcy5tYXgueD1NYXRoLm1heCh0LngsdGhpcy5tYXgueCksdGhpcy5taW4ueT1NYXRoLm1pbih0LnksdGhpcy5taW4ueSksdGhpcy5tYXgueT1NYXRoLm1heCh0LnksdGhpcy5tYXgueSkpOih0aGlzLm1pbj10LmNsb25lKCksdGhpcy5tYXg9dC5jbG9uZSgpKSx0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLlBvaW50KCh0aGlzLm1pbi54K3RoaXMubWF4LngpLzIsKHRoaXMubWluLnkrdGhpcy5tYXgueSkvMix0KX0sZ2V0Qm90dG9tTGVmdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1pbi54LHRoaXMubWF4LnkpfSxnZXRUb3BSaWdodDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5Qb2ludCh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4LnN1YnRyYWN0KHRoaXMubWluKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7dmFyIGUsaTtyZXR1cm4gdD0ibnVtYmVyIj09dHlwZW9mIHRbMF18fHQgaW5zdGFuY2VvZiBvLlBvaW50P28ucG9pbnQodCk6by5ib3VuZHModCksdCBpbnN0YW5jZW9mIG8uQm91bmRzPyhlPXQubWluLGk9dC5tYXgpOmU9aT10LGUueD49dGhpcy5taW4ueCYmaS54PD10aGlzLm1heC54JiZlLnk+PXRoaXMubWluLnkmJmkueTw9dGhpcy5tYXgueX0saW50ZXJzZWN0czpmdW5jdGlvbih0KXt0PW8uYm91bmRzKHQpO3ZhciBlPXRoaXMubWluLGk9dGhpcy5tYXgsbj10Lm1pbixzPXQubWF4LGE9cy54Pj1lLngmJm4ueDw9aS54LHI9cy55Pj1lLnkmJm4ueTw9aS55O3JldHVybiBhJiZyfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5taW58fCF0aGlzLm1heCl9fSxvLmJvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5Cb3VuZHM/dDpuZXcgby5Cb3VuZHModCxlKX0sby5UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUsaSxuKXt0aGlzLl9hPXQsdGhpcy5fYj1lLHRoaXMuX2M9aSx0aGlzLl9kPW59LG8uVHJhbnNmb3JtYXRpb24ucHJvdG90eXBlPXt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHQuY2xvbmUoKSxlKX0sX3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsdC54PWUqKHRoaXMuX2EqdC54K3RoaXMuX2IpLHQueT1lKih0aGlzLl9jKnQueSt0aGlzLl9kKSx0fSx1bnRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fDEsbmV3IG8uUG9pbnQoKHQueC9lLXRoaXMuX2IpL3RoaXMuX2EsKHQueS9lLXRoaXMuX2QpL3RoaXMuX2MpfX0sby5Eb21VdGlsPXtnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2UuZ2V0RWxlbWVudEJ5SWQodCk6dH0sZ2V0U3R5bGU6ZnVuY3Rpb24odCxpKXt2YXIgbj10LnN0eWxlW2ldO2lmKCFuJiZ0LmN1cnJlbnRTdHlsZSYmKG49dC5jdXJyZW50U3R5bGVbaV0pLCghbnx8ImF1dG8iPT09bikmJmUuZGVmYXVsdFZpZXcpe3ZhciBvPWUuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO249bz9vW2ldOm51bGx9cmV0dXJuImF1dG8iPT09bj9udWxsOm59LGdldFZpZXdwb3J0T2Zmc2V0OmZ1bmN0aW9uKHQpe3ZhciBpLG49MCxzPTAsYT10LHI9ZS5ib2R5LGg9ZS5kb2N1bWVudEVsZW1lbnQ7ZG97aWYobis9YS5vZmZzZXRUb3B8fDAscys9YS5vZmZzZXRMZWZ0fHwwLG4rPXBhcnNlSW50KG8uRG9tVXRpbC5nZXRTdHlsZShhLCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCxzKz1wYXJzZUludChvLkRvbVV0aWwuZ2V0U3R5bGUoYSwiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwLGk9by5Eb21VdGlsLmdldFN0eWxlKGEsInBvc2l0aW9uIiksYS5vZmZzZXRQYXJlbnQ9PT1yJiYiYWJzb2x1dGUiPT09aSlicmVhaztpZigiZml4ZWQiPT09aSl7bis9ci5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wfHwwLHMrPXIuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0fHwwO2JyZWFrfWlmKCJyZWxhdGl2ZSI9PT1pJiYhYS5vZmZzZXRMZWZ0KXt2YXIgbD1vLkRvbVV0aWwuZ2V0U3R5bGUoYSwid2lkdGgiKSx1PW8uRG9tVXRpbC5nZXRTdHlsZShhLCJtYXgtd2lkdGgiKSxjPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7KCJub25lIiE9PWx8fCJub25lIiE9PXUpJiYocys9Yy5sZWZ0K2EuY2xpZW50TGVmdCksbis9Yy50b3ArKHIuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcHx8MCk7YnJlYWt9YT1hLm9mZnNldFBhcmVudH13aGlsZShhKTthPXQ7ZG97aWYoYT09PXIpYnJlYWs7bi09YS5zY3JvbGxUb3B8fDAscy09YS5zY3JvbGxMZWZ0fHwwLGE9YS5wYXJlbnROb2RlfXdoaWxlKGEpO3JldHVybiBuZXcgby5Qb2ludChzLG4pfSxkb2N1bWVudElzTHRyOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5fZG9jSXNMdHJDYWNoZWR8fChvLkRvbVV0aWwuX2RvY0lzTHRyQ2FjaGVkPSEwLG8uRG9tVXRpbC5fZG9jSXNMdHI9Imx0ciI9PT1vLkRvbVV0aWwuZ2V0U3R5bGUoZS5ib2R5LCJkaXJlY3Rpb24iKSksby5Eb21VdGlsLl9kb2NJc0x0cn0sY3JlYXRlOmZ1bmN0aW9uKHQsaSxuKXt2YXIgbz1lLmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIG8uY2xhc3NOYW1lPWksbiYmbi5hcHBlbmRDaGlsZChvKSxvfSxoYXNDbGFzczpmdW5jdGlvbih0LGUpe2lmKHQuY2xhc3NMaXN0IT09aSlyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoZSk7dmFyIG49by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtyZXR1cm4gbi5sZW5ndGg+MCYmbmV3IFJlZ0V4cCgiKF58XFxzKSIrZSsiKFxcc3wkKSIpLnRlc3Qobil9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7aWYodC5jbGFzc0xpc3QhPT1pKWZvcih2YXIgbj1vLlV0aWwuc3BsaXRXb3JkcyhlKSxzPTAsYT1uLmxlbmd0aDthPnM7cysrKXQuY2xhc3NMaXN0LmFkZChuW3NdKTtlbHNlIGlmKCFvLkRvbVV0aWwuaGFzQ2xhc3ModCxlKSl7dmFyIHI9by5Eb21VdGlsLl9nZXRDbGFzcyh0KTtvLkRvbVV0aWwuX3NldENsYXNzKHQsKHI/cisiICI6IiIpK2UpfX0scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlKXt0LmNsYXNzTGlzdCE9PWk/dC5jbGFzc0xpc3QucmVtb3ZlKGUpOm8uRG9tVXRpbC5fc2V0Q2xhc3ModCxvLlV0aWwudHJpbSgoIiAiK28uRG9tVXRpbC5fZ2V0Q2xhc3ModCkrIiAiKS5yZXBsYWNlKCIgIitlKyIgIiwiICIpKSl9LF9zZXRDbGFzczpmdW5jdGlvbih0LGUpe3QuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfSxfZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lLmJhc2VWYWw9PT1pP3QuY2xhc3NOYW1lOnQuY2xhc3NOYW1lLmJhc2VWYWx9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCxlKXtpZigib3BhY2l0eSJpbiB0LnN0eWxlKXQuc3R5bGUub3BhY2l0eT1lO2Vsc2UgaWYoImZpbHRlciJpbiB0LnN0eWxlKXt2YXIgaT0hMSxuPSJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSI7dHJ5e2k9dC5maWx0ZXJzLml0ZW0obil9Y2F0Y2gobyl7aWYoMT09PWUpcmV0dXJufWU9TWF0aC5yb3VuZCgxMDAqZSksaT8oaS5FbmFibGVkPTEwMCE9PWUsaS5PcGFjaXR5PWUpOnQuc3R5bGUuZmlsdGVyKz0iIHByb2dpZDoiK24rIihvcGFjaXR5PSIrZSsiKSJ9fSx0ZXN0UHJvcDpmdW5jdGlvbih0KXtmb3IodmFyIGk9ZS5kb2N1bWVudEVsZW1lbnQuc3R5bGUsbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbiBpKXJldHVybiB0W25dO3JldHVybiExfSxnZXRUcmFuc2xhdGVTdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9by5Ccm93c2VyLndlYmtpdDNkLGk9InRyYW5zbGF0ZSIrKGU/IjNkIjoiIikrIigiLG49KGU/IiwwIjoiIikrIikiO3JldHVybiBpK3QueCsicHgsIit0LnkrInB4IitufSxnZXRTY2FsZVN0cmluZzpmdW5jdGlvbih0LGUpe3ZhciBpPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoZS5hZGQoZS5tdWx0aXBseUJ5KC0xKnQpKSksbj0iIHNjYWxlKCIrdCsiKSAiO3JldHVybiBpK259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxpKXt0Ll9sZWFmbGV0X3Bvcz1lLCFpJiZvLkJyb3dzZXIuYW55M2Q/dC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT1vLkRvbVV0aWwuZ2V0VHJhbnNsYXRlU3RyaW5nKGUpOih0LnN0eWxlLmxlZnQ9ZS54KyJweCIsdC5zdHlsZS50b3A9ZS55KyJweCIpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdC5fbGVhZmxldF9wb3N9fSxvLkRvbVV0aWwuVFJBTlNGT1JNPW8uRG9tVXRpbC50ZXN0UHJvcChbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTj1vLkRvbVV0aWwudGVzdFByb3AoWyJ3ZWJraXRUcmFuc2l0aW9uIiwidHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIm1zVHJhbnNpdGlvbiJdKSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQ9IndlYmtpdFRyYW5zaXRpb24iPT09by5Eb21VdGlsLlRSQU5TSVRJT058fCJPVHJhbnNpdGlvbiI9PT1vLkRvbVV0aWwuVFJBTlNJVElPTj9vLkRvbVV0aWwuVFJBTlNJVElPTisiRW5kIjoidHJhbnNpdGlvbmVuZCIsZnVuY3Rpb24oKXtpZigib25zZWxlY3RzdGFydCJpbiBlKW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlVGV4dFNlbGVjdGlvbjpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHQsInNlbGVjdHN0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KTtlbHNle3ZhciBpPW8uRG9tVXRpbC50ZXN0UHJvcChbInVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwiT1VzZXJTZWxlY3QiLCJNb3pVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO28uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZVRleHRTZWxlY3Rpb246ZnVuY3Rpb24oKXtpZihpKXt2YXIgdD1lLmRvY3VtZW50RWxlbWVudC5zdHlsZTt0aGlzLl91c2VyU2VsZWN0PXRbaV0sdFtpXT0ibm9uZSJ9fSxlbmFibGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7aSYmKGUuZG9jdW1lbnRFbGVtZW50LnN0eWxlW2ldPXRoaXMuX3VzZXJTZWxlY3QsZGVsZXRlIHRoaXMuX3VzZXJTZWxlY3QpfX0pfW8uZXh0ZW5kKG8uRG9tVXRpbCx7ZGlzYWJsZUltYWdlRHJhZzpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX0sZW5hYmxlSW1hZ2VEcmFnOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vZmYodCwiZHJhZ3N0YXJ0IixvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KX19KX0oKSxvLkxhdExuZz1mdW5jdGlvbih0LGUsbil7aWYodD1wYXJzZUZsb2F0KHQpLGU9cGFyc2VGbG9hdChlKSxpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7dGhpcy5sYXQ9dCx0aGlzLmxuZz1lLG4hPT1pJiYodGhpcy5hbHQ9cGFyc2VGbG9hdChuKSl9LG8uZXh0ZW5kKG8uTGF0TG5nLHtERUdfVE9fUkFEOk1hdGguUEkvMTgwLFJBRF9UT19ERUc6MTgwL01hdGguUEksTUFYX01BUkdJTjoxZS05fSksby5MYXRMbmcucHJvdG90eXBlPXtlcXVhbHM6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7dD1vLmxhdExuZyh0KTt2YXIgZT1NYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTtyZXR1cm4gZTw9by5MYXRMbmcuTUFYX01BUkdJTn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIkxhdExuZygiK28uVXRpbC5mb3JtYXROdW0odGhpcy5sYXQsdCkrIiwgIitvLlV0aWwuZm9ybWF0TnVtKHRoaXMubG5nLHQpKyIpIn0sZGlzdGFuY2VUbzpmdW5jdGlvbih0KXt0PW8ubGF0TG5nKHQpO3ZhciBlPTYzNzgxMzcsaT1vLkxhdExuZy5ERUdfVE9fUkFELG49KHQubGF0LXRoaXMubGF0KSppLHM9KHQubG5nLXRoaXMubG5nKSppLGE9dGhpcy5sYXQqaSxyPXQubGF0KmksaD1NYXRoLnNpbihuLzIpLGw9TWF0aC5zaW4ocy8yKSx1PWgqaCtsKmwqTWF0aC5jb3MoYSkqTWF0aC5jb3Mocik7cmV0dXJuIDIqZSpNYXRoLmF0YW4yKE1hdGguc3FydCh1KSxNYXRoLnNxcnQoMS11KSl9LHdyYXA6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmxuZztyZXR1cm4gdD10fHwtMTgwLGU9ZXx8MTgwLGk9KGkrZSklKGUtdCkrKHQ+aXx8aT09PWU/ZTp0KSxuZXcgby5MYXRMbmcodGhpcy5sYXQsaSl9fSxvLmxhdExuZz1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygby5MYXRMbmc/dDpvLlV0aWwuaXNBcnJheSh0KT8ibnVtYmVyIj09dHlwZW9mIHRbMF18fCJzdHJpbmciPT10eXBlb2YgdFswXT9uZXcgby5MYXRMbmcodFswXSx0WzFdLHRbMl0pOm51bGw6dD09PWl8fG51bGw9PT10P3Q6Im9iamVjdCI9PXR5cGVvZiB0JiYibGF0ImluIHQ/bmV3IG8uTGF0TG5nKHQubGF0LCJsbmciaW4gdD90LmxuZzp0Lmxvbik6ZT09PWk/bnVsbDpuZXcgby5MYXRMbmcodCxlKX0sby5MYXRMbmdCb3VuZHM9ZnVuY3Rpb24odCxlKXtpZih0KWZvcih2YXIgaT1lP1t0LGVdOnQsbj0wLG89aS5sZW5ndGg7bz5uO24rKyl0aGlzLmV4dGVuZChpW25dKX0sby5MYXRMbmdCb3VuZHMucHJvdG90eXBlPXtleHRlbmQ6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIHRoaXM7dmFyIGU9by5sYXRMbmcodCk7cmV0dXJuIHQ9bnVsbCE9PWU/ZTpvLmxhdExuZ0JvdW5kcyh0KSx0IGluc3RhbmNlb2Ygby5MYXRMbmc/dGhpcy5fc291dGhXZXN0fHx0aGlzLl9ub3J0aEVhc3Q/KHRoaXMuX3NvdXRoV2VzdC5sYXQ9TWF0aC5taW4odC5sYXQsdGhpcy5fc291dGhXZXN0LmxhdCksdGhpcy5fc291dGhXZXN0LmxuZz1NYXRoLm1pbih0LmxuZyx0aGlzLl9zb3V0aFdlc3QubG5nKSx0aGlzLl9ub3J0aEVhc3QubGF0PU1hdGgubWF4KHQubGF0LHRoaXMuX25vcnRoRWFzdC5sYXQpLHRoaXMuX25vcnRoRWFzdC5sbmc9TWF0aC5tYXgodC5sbmcsdGhpcy5fbm9ydGhFYXN0LmxuZykpOih0aGlzLl9zb3V0aFdlc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IG8uTGF0TG5nKHQubGF0LHQubG5nKSk6dCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzJiYodGhpcy5leHRlbmQodC5fc291dGhXZXN0KSx0aGlzLmV4dGVuZCh0Ll9ub3J0aEVhc3QpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoZS5sYXQtaS5sYXQpKnQscz1NYXRoLmFicyhlLmxuZy1pLmxuZykqdDtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKG5ldyBvLkxhdExuZyhlLmxhdC1uLGUubG5nLXMpLG5ldyBvLkxhdExuZyhpLmxhdCtuLGkubG5nK3MpKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBvLkxhdExuZygodGhpcy5fc291dGhXZXN0LmxhdCt0aGlzLl9ub3J0aEVhc3QubGF0KS8yLCh0aGlzLl9zb3V0aFdlc3QubG5nK3RoaXMuX25vcnRoRWFzdC5sbmcpLzIpfSxnZXRTb3V0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291dGhXZXN0fSxnZXROb3J0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9ydGhFYXN0fSxnZXROb3J0aFdlc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSx0aGlzLmdldFdlc3QoKSl9LGdldFNvdXRoRWFzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgby5MYXRMbmcodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9Im51bWJlciI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2Ygby5MYXRMbmc/by5sYXRMbmcodCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGUsaSxuPXRoaXMuX3NvdXRoV2VzdCxzPXRoaXMuX25vcnRoRWFzdDtyZXR1cm4gdCBpbnN0YW5jZW9mIG8uTGF0TG5nQm91bmRzPyhlPXQuZ2V0U291dGhXZXN0KCksaT10LmdldE5vcnRoRWFzdCgpKTplPWk9dCxlLmxhdD49bi5sYXQmJmkubGF0PD1zLmxhdCYmZS5sbmc+PW4ubG5nJiZpLmxuZzw9cy5sbmd9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD1vLmxhdExuZ0JvdW5kcyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHM9dC5nZXROb3J0aEVhc3QoKSxhPXMubGF0Pj1lLmxhdCYmbi5sYXQ8PWkubGF0LHI9cy5sbmc+PWUubG5nJiZuLmxuZzw9aS5sbmc7cmV0dXJuIGEmJnJ9LHRvQkJveFN0cmluZzpmdW5jdGlvbigpe3JldHVyblt0aGlzLmdldFdlc3QoKSx0aGlzLmdldFNvdXRoKCksdGhpcy5nZXRFYXN0KCksdGhpcy5nZXROb3J0aCgpXS5qb2luKCIsIil9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdD8odD1vLmxhdExuZ0JvdW5kcyh0KSx0aGlzLl9zb3V0aFdlc3QuZXF1YWxzKHQuZ2V0U291dGhXZXN0KCkpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCkpKTohMX0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMuX3NvdXRoV2VzdHx8IXRoaXMuX25vcnRoRWFzdCl9fSxvLmxhdExuZ0JvdW5kcz1mdW5jdGlvbih0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygby5MYXRMbmdCb3VuZHM/dDpuZXcgby5MYXRMbmdCb3VuZHModCxlKX0sby5Qcm9qZWN0aW9uPXt9LG8uUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvcj17TUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1vLkxhdExuZy5ERUdfVE9fUkFELGk9dGhpcy5NQVhfTEFUSVRVREUsbj1NYXRoLm1heChNYXRoLm1pbihpLHQubGF0KSwtaSkscz10LmxuZyplLGE9biplO3JldHVybiBhPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxuZXcgby5Qb2ludChzLGEpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuUkFEX1RPX0RFRyxpPXQueCplLG49KDIqTWF0aC5hdGFuKE1hdGguZXhwKHQueSkpLU1hdGguUEkvMikqZTtyZXR1cm4gbmV3IG8uTGF0TG5nKG4saSl9fSxvLlByb2plY3Rpb24uTG9uTGF0PXtwcm9qZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Qb2ludCh0LmxuZyx0LmxhdCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uTGF0TG5nKHQueSx0LngpfX0sby5DUlM9e2xhdExuZ1RvUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxuPXRoaXMuc2NhbGUoZSk7cmV0dXJuIHRoaXMudHJhbnNmb3JtYXRpb24uX3RyYW5zZm9ybShpLG4pfSxwb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5zY2FsZShlKSxuPXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxpKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdChuKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAyNTYqTWF0aC5wb3coMix0KX0sZ2V0U2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjYWxlKHQpO3JldHVybiBvLnBvaW50KGUsZSl9fSxvLkNSUy5TaW1wbGU9by5leHRlbmQoe30sby5DUlMse3Byb2plY3Rpb246by5Qcm9qZWN0aW9uLkxvbkxhdCx0cmFuc2Zvcm1hdGlvbjpuZXcgby5UcmFuc2Zvcm1hdGlvbigxLDAsLTEsMCksc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KDIsdCl9fSksby5DUlMuRVBTRzM4NTc9by5leHRlbmQoe30sby5DUlMse2NvZGU6IkVQU0c6Mzg1NyIscHJvamVjdGlvbjpvLlByb2plY3Rpb24uU3BoZXJpY2FsTWVyY2F0b3IsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oLjUvTWF0aC5QSSwuNSwtLjUvTWF0aC5QSSwuNSkscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnByb2plY3Rpb24ucHJvamVjdCh0KSxpPTYzNzgxMzc7cmV0dXJuIGUubXVsdGlwbHlCeShpKX19KSxvLkNSUy5FUFNHOTAwOTEzPW8uZXh0ZW5kKHt9LG8uQ1JTLkVQU0czODU3LHtjb2RlOiJFUFNHOjkwMDkxMyJ9KSxvLkNSUy5FUFNHNDMyNj1vLmV4dGVuZCh7fSxvLkNSUyx7Y29kZToiRVBTRzo0MzI2Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5Mb25MYXQsdHJhbnNmb3JtYXRpb246bmV3IG8uVHJhbnNmb3JtYXRpb24oMS8zNjAsLjUsLTEvMzYwLC41KX0pLG8uTWFwPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntjcnM6by5DUlMuRVBTRzM4NTcsZmFkZUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsdHJhY2tSZXNpemU6ITAsbWFya2VyWm9vbUFuaW1hdGlvbjpvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7ZT1vLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9pbml0Q29udGFpbmVyKHQpLHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9vblJlc2l6ZT1vLmJpbmQodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksZS5jZW50ZXImJmUuem9vbSE9PWkmJnRoaXMuc2V0VmlldyhvLmxhdExuZyhlLmNlbnRlciksZS56b29tLHtyZXNldDohMH0pLHRoaXMuX2hhbmRsZXJzPVtdLHRoaXMuX2xheWVycz17fSx0aGlzLl96b29tQm91bmRMYXllcnM9e30sdGhpcy5fdGlsZUxheWVyc051bT0wLHRoaXMuY2FsbEluaXRIb29rcygpLHRoaXMuX2FkZExheWVycyhlLmxheWVycyl9LHNldFZpZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLmdldFpvb20oKTplLHRoaXMuX3Jlc2V0VmlldyhvLmxhdExuZyh0KSx0aGlzLl9saW1pdFpvb20oZSkpLHRoaXN9LHNldFpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbG9hZGVkP3RoaXMuc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLHQse3pvb206ZX0pOih0aGlzLl96b29tPXRoaXMuX2xpbWl0Wm9vbSh0KSx0aGlzKX0sem9vbUluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tKyh0fHwxKSxlKX0sem9vbU91dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fem9vbS0odHx8MSksZSl9LHNldFpvb21Bcm91bmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLHM9dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksYT10IGluc3RhbmNlb2Ygby5Qb2ludD90OnRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0KSxyPWEuc3VidHJhY3QocykubXVsdGlwbHlCeSgxLTEvbiksaD10aGlzLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocy5hZGQocikpO3JldHVybiB0aGlzLnNldFZpZXcoaCxlLHt6b29tOml9KX0sZml0Qm91bmRzOmZ1bmN0aW9uKHQsZSl7ZT1lfHx7fSx0PXQuZ2V0Qm91bmRzP3QuZ2V0Qm91bmRzKCk6by5sYXRMbmdCb3VuZHModCk7dmFyIGk9by5wb2ludChlLnBhZGRpbmdUb3BMZWZ0fHxlLnBhZGRpbmd8fFswLDBdKSxuPW8ucG9pbnQoZS5wYWRkaW5nQm90dG9tUmlnaHR8fGUucGFkZGluZ3x8WzAsMF0pLHM9dGhpcy5nZXRCb3VuZHNab29tKHQsITEsaS5hZGQobikpO3M9Im51bWJlciI9PXR5cGVvZiBlLm1heFpvb20/TWF0aC5taW4oZS5tYXhab29tLHMpOnM7dmFyIGE9bi5zdWJ0cmFjdChpKS5kaXZpZGVCeSgyKSxyPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLHMpLGg9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCkscyksbD10aGlzLnVucHJvamVjdChyLmFkZChoKS5kaXZpZGVCeSgyKS5hZGQoYSkscyk7cmV0dXJuIHRoaXMuc2V0VmlldyhsLHMsZSl9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjplfSl9LHBhbkJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHRoaXMuX3Jhd1BhbkJ5KG8ucG9pbnQodCkpLHRoaXMuZmlyZSgibW92ZSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5sYXRMbmdCb3VuZHModCksdGhpcy5vcHRpb25zLm1heEJvdW5kcz10LHQ/KHRoaXMuX2xvYWRlZCYmdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpKTp0aGlzLm9mZigibW92ZWVuZCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzLHRoaXMpfSxwYW5JbnNpZGVCb3VuZHM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmdldENlbnRlcigpLG49dGhpcy5fbGltaXRDZW50ZXIoaSx0aGlzLl96b29tLHQpO3JldHVybiBpLmVxdWFscyhuKT90aGlzOnRoaXMucGFuVG8obixlKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdP3RoaXM6KHRoaXMuX2xheWVyc1tlXT10LCF0Lm9wdGlvbnN8fGlzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5UaWxlTGF5ZXImJnQgaW5zdGFuY2VvZiBvLlRpbGVMYXllciYmKHRoaXMuX3RpbGVMYXllcnNOdW0rKyx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkKyssdC5vbigibG9hZCIsdGhpcy5fb25UaWxlTGF5ZXJMb2FkLHRoaXMpKSx0aGlzLl9sb2FkZWQmJnRoaXMuX2xheWVyQWRkKHQpLHRoaXMpfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT1vLnN0YW1wKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV0/KHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJsYXllcnJlbW92ZSIse2xheWVyOnR9KSx0aGlzLl96b29tQm91bmRMYXllcnNbZV0mJihkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2VdLHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKSksdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uVGlsZUxheWVyJiZ0IGluc3RhbmNlb2Ygby5UaWxlTGF5ZXImJih0aGlzLl90aWxlTGF5ZXJzTnVtLS0sdGhpcy5fdGlsZUxheWVyc1RvTG9hZC0tLHQub2ZmKCJsb2FkIix0aGlzLl9vblRpbGVMYXllckxvYWQsdGhpcykpLHRoaXMpOnRoaXN9LGhhc0xheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0P28uc3RhbXAodClpbiB0aGlzLl9sYXllcnM6ITF9LGVhY2hMYXllcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSBpbiB0aGlzLl9sYXllcnMpdC5jYWxsKGUsdGhpcy5fbGF5ZXJzW2ldKTtyZXR1cm4gdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PW8uZXh0ZW5kKHthbmltYXRlOiExLHBhbjohMH0sdD09PSEwP3thbmltYXRlOiEwfTp0KTt2YXIgZT10aGlzLmdldFNpemUoKTt0aGlzLl9zaXplQ2hhbmdlZD0hMCx0aGlzLl9pbml0aWFsQ2VudGVyPW51bGw7dmFyIGk9dGhpcy5nZXRTaXplKCksbj1lLmRpdmlkZUJ5KDIpLnJvdW5kKCkscz1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksYT1uLnN1YnRyYWN0KHMpO3JldHVybiBhLnh8fGEueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KGEpOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkoYSksdGhpcy5maXJlKCJtb3ZlIiksdC5kZWJvdW5jZU1vdmVlbmQ/KGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXMuX3NpemVUaW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLmZpcmUsdGhpcywibW92ZWVuZCIpLDIwMCkpOnRoaXMuZmlyZSgibW92ZWVuZCIpKSx0aGlzLmZpcmUoInJlc2l6ZSIse29sZFNpemU6ZSxuZXdTaXplOml9KSk6dGhpc30sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0aGlzO3ZhciBpPXRoaXNbdF09bmV3IGUodGhpcyk7cmV0dXJuIHRoaXMuX2hhbmRsZXJzLnB1c2goaSksdGhpcy5vcHRpb25zW3RdJiZpLmVuYWJsZSgpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX2xvYWRlZCYmdGhpcy5maXJlKCJ1bmxvYWQiKSx0aGlzLl9pbml0RXZlbnRzKCJvZmYiKTt0cnl7ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldH1jYXRjaCh0KXt0aGlzLl9jb250YWluZXIuX2xlYWZsZXQ9aX1yZXR1cm4gdGhpcy5fY2xlYXJQYW5lcygpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fY2xlYXJIYW5kbGVycygpLHRoaXN9LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja0lmTG9hZGVkKCksdGhpcy5faW5pdGlhbENlbnRlciYmIXRoaXMuX21vdmVkKCk/dGhpcy5faW5pdGlhbENlbnRlcjp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxlPXRoaXMudW5wcm9qZWN0KHQuZ2V0Qm90dG9tTGVmdCgpKSxpPXRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSk7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhlLGkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tPT09aT90aGlzLl9sYXllcnNNaW5ab29tPT09aT8wOnRoaXMuX2xheWVyc01pblpvb206dGhpcy5vcHRpb25zLm1pblpvb219LGdldE1heFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb209PT1pP3RoaXMuX2xheWVyc01heFpvb209PT1pPzEvMDp0aGlzLl9sYXllcnNNYXhab29tOnRoaXMub3B0aW9ucy5tYXhab29tfSxnZXRCb3VuZHNab29tOmZ1bmN0aW9uKHQsZSxpKXt0PW8ubGF0TG5nQm91bmRzKHQpO3ZhciBuLHM9dGhpcy5nZXRNaW5ab29tKCktKGU/MTowKSxhPXRoaXMuZ2V0TWF4Wm9vbSgpLHI9dGhpcy5nZXRTaXplKCksaD10LmdldE5vcnRoV2VzdCgpLGw9dC5nZXRTb3V0aEVhc3QoKSx1PSEwO2k9by5wb2ludChpfHxbMCwwXSk7ZG8gcysrLG49dGhpcy5wcm9qZWN0KGwscykuc3VidHJhY3QodGhpcy5wcm9qZWN0KGgscykpLmFkZChpKSx1PWU/bi54PHIueHx8bi55PHIueTpyLmNvbnRhaW5zKG4pO3doaWxlKHUmJmE+PXMpO3JldHVybiB1JiZlP251bGw6ZT9zOnMtMX0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybighdGhpcy5fc2l6ZXx8dGhpcy5fc2l6ZUNoYW5nZWQpJiYodGhpcy5fc2l6ZT1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGgsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUb3BMZWZ0UG9pbnQoKTtyZXR1cm4gbmV3IG8uQm91bmRzKHQsdC5hZGQodGhpcy5nZXRTaXplKCkpKX0sZ2V0UGl4ZWxPcmlnaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2luaXRpYWxUb3BMZWZ0UG9pbnR9LGdldFBhbmVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhbmVzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxnZXRab29tU2NhbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gZS5zY2FsZSh0KS9lLnNjYWxlKHRoaXMuX3pvb20pfSxnZXRTY2FsZVpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3pvb20rTWF0aC5sb2codCkvTWF0aC5MTjJ9LHByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KG8ubGF0TG5nKHQpLGUpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPT09aT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKG8ucG9pbnQodCksZSl9LGxheWVyUG9pbnRUb0xhdExuZzpmdW5jdGlvbih0KXt2YXIgZT1vLnBvaW50KHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdChlKX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJvamVjdChvLmxhdExuZyh0KSkuX3JvdW5kKCk7cmV0dXJuIGUuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50KHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoby5wb2ludCh0KSk7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGUpfSxsYXRMbmdUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KG8ubGF0TG5nKHQpKSl9LG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBvLkRvbUV2ZW50LmdldE1vdXNlUG9zaXRpb24odCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiTWFwIGNvbnRhaW5lciBub3QgZm91bmQuIik7aWYoZS5fbGVhZmxldCl0aHJvdyBuZXcgRXJyb3IoIk1hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4iKTtlLl9sZWFmbGV0PSEwfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjtvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jb250YWluZXIiKyhvLkJyb3dzZXIudG91Y2g/IiBsZWFmbGV0LXRvdWNoIjoiIikrKG8uQnJvd3Nlci5yZXRpbmE/IiBsZWFmbGV0LXJldGluYSI6IiIpKyhvLkJyb3dzZXIuaWVsdDk/IiBsZWFmbGV0LW9sZGllIjoiIikrKHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uPyIgbGVhZmxldC1mYWRlLWFuaW0iOiIiKSk7dmFyIGU9by5Eb21VdGlsLmdldFN0eWxlKHQsInBvc2l0aW9uIik7ImFic29sdXRlIiE9PWUmJiJyZWxhdGl2ZSIhPT1lJiYiZml4ZWQiIT09ZSYmKHQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksdGhpcy5faW5pdFBhbmVzKCksdGhpcy5faW5pdENvbnRyb2xQb3MmJnRoaXMuX2luaXRDb250cm9sUG9zKCl9LF9pbml0UGFuZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYW5lcz17fTt0aGlzLl9tYXBQYW5lPXQubWFwUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcC1wYW5lIix0aGlzLl9jb250YWluZXIpLHRoaXMuX3RpbGVQYW5lPXQudGlsZVBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC10aWxlLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQub2JqZWN0c1BhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1vYmplY3RzLXBhbmUiLHRoaXMuX21hcFBhbmUpLHQuc2hhZG93UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LXNoYWRvdy1wYW5lIiksdC5vdmVybGF5UGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW92ZXJsYXktcGFuZSIpLHQubWFya2VyUGFuZT10aGlzLl9jcmVhdGVQYW5lKCJsZWFmbGV0LW1hcmtlci1wYW5lIiksdC5wb3B1cFBhbmU9dGhpcy5fY3JlYXRlUGFuZSgibGVhZmxldC1wb3B1cC1wYW5lIik7dmFyIGU9IiBsZWFmbGV0LXpvb20taGlkZSI7dGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChvLkRvbVV0aWwuYWRkQ2xhc3ModC5tYXJrZXJQYW5lLGUpLG8uRG9tVXRpbC5hZGRDbGFzcyh0LnNoYWRvd1BhbmUsZSksby5Eb21VdGlsLmFkZENsYXNzKHQucG9wdXBQYW5lLGUpKX0sX2NyZWF0ZVBhbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5Eb21VdGlsLmNyZWF0ZSgiZGl2Iix0LGV8fHRoaXMuX3BhbmVzLm9iamVjdHNQYW5lKX0sX2NsZWFyUGFuZXM6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5fbWFwUGFuZSl9LF9hZGRMYXllcnM6ZnVuY3Rpb24odCl7dD10P28uVXRpbC5pc0FycmF5KHQpP3Q6W3RdOltdO2Zvcih2YXIgZT0wLGk9dC5sZW5ndGg7aT5lO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPXRoaXMuX3pvb20hPT1lO258fCh0aGlzLmZpcmUoIm1vdmVzdGFydCIpLHMmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IikpLHRoaXMuX3pvb209ZSx0aGlzLl9pbml0aWFsQ2VudGVyPXQsdGhpcy5faW5pdGlhbFRvcExlZnRQb2ludD10aGlzLl9nZXROZXdUb3BMZWZ0UG9pbnQodCksaT90aGlzLl9pbml0aWFsVG9wTGVmdFBvaW50Ll9hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTpvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSxuZXcgby5Qb2ludCgwLDApKSx0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkPXRoaXMuX3RpbGVMYXllcnNOdW07dmFyIGE9IXRoaXMuX2xvYWRlZDt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJ2aWV3cmVzZXQiLHtoYXJkOiFpfSksYSYmKHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuZWFjaExheWVyKHRoaXMuX2xheWVyQWRkLHRoaXMpKSx0aGlzLmZpcmUoIm1vdmUiKSwoc3x8bikmJnRoaXMuZmlyZSgiem9vbWVuZCIpLHRoaXMuZmlyZSgibW92ZWVuZCIse2hhcmQ6IWl9KX0sX3Jhd1BhbkJ5OmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KSl9LF9nZXRab29tU3BhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE1heFpvb20oKS10aGlzLmdldE1pblpvb20oKX0sX3VwZGF0ZVpvb21MZXZlbHM6ZnVuY3Rpb24oKXt2YXIgdCxlPTEvMCxuPS0oMS8wKSxvPXRoaXMuX2dldFpvb21TcGFuKCk7Zm9yKHQgaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXt2YXIgcz10aGlzLl96b29tQm91bmRMYXllcnNbdF07aXNOYU4ocy5vcHRpb25zLm1pblpvb20pfHwoZT1NYXRoLm1pbihlLHMub3B0aW9ucy5taW5ab29tKSksaXNOYU4ocy5vcHRpb25zLm1heFpvb20pfHwobj1NYXRoLm1heChuLHMub3B0aW9ucy5tYXhab29tKSl9dD09PWk/dGhpcy5fbGF5ZXJzTWF4Wm9vbT10aGlzLl9sYXllcnNNaW5ab29tPWk6KHRoaXMuX2xheWVyc01heFpvb209bix0aGlzLl9sYXllcnNNaW5ab29tPWUpLG8hPT10aGlzLl9nZXRab29tU3BhbigpJiZ0aGlzLmZpcmUoInpvb21sZXZlbHNjaGFuZ2UiKX0sX3Bhbkluc2lkZU1heEJvdW5kczpmdW5jdGlvbigpe3RoaXMucGFuSW5zaWRlQm91bmRzKHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpfSxfY2hlY2tJZkxvYWRlZDpmdW5jdGlvbigpe2lmKCF0aGlzLl9sb2FkZWQpdGhyb3cgbmV3IEVycm9yKCJTZXQgbWFwIGNlbnRlciBhbmQgem9vbSBmaXJzdC4iKX0sX2luaXRFdmVudHM6ZnVuY3Rpb24oZSl7aWYoby5Eb21FdmVudCl7ZT1lfHwib24iLG8uRG9tRXZlbnRbZV0odGhpcy5fY29udGFpbmVyLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO3ZhciBpLG4scz1bImRibGNsaWNrIiwibW91c2Vkb3duIiwibW91c2V1cCIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwibW91c2Vtb3ZlIiwiY29udGV4dG1lbnUiXTtmb3IoaT0wLG49cy5sZW5ndGg7bj5pO2krKylvLkRvbUV2ZW50W2VdKHRoaXMuX2NvbnRhaW5lcixzW2ldLHRoaXMuX2ZpcmVNb3VzZUV2ZW50LHRoaXMpO3RoaXMub3B0aW9ucy50cmFja1Jlc2l6ZSYmby5Eb21FdmVudFtlXSh0LCJyZXNpemUiLHRoaXMuX29uUmVzaXplLHRoaXMpfX0sX29uUmVzaXplOmZ1bmN0aW9uKCl7by5VdGlsLmNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZXNpemVSZXF1ZXN0KSx0aGlzLl9yZXNpemVSZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkYXRlU2l6ZSh7ZGVib3VuY2VNb3ZlZW5kOiEwfSl9LHRoaXMsITEsdGhpcy5fY29udGFpbmVyKX0sX29uTW91c2VDbGljazpmdW5jdGlvbih0KXshdGhpcy5fbG9hZGVkfHwhdC5fc2ltdWxhdGVkJiYodGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5tb3ZlZCgpfHx0aGlzLmJveFpvb20mJnRoaXMuYm94Wm9vbS5tb3ZlZCgpKXx8by5Eb21FdmVudC5fc2tpcHBlZCh0KXx8KHRoaXMuZmlyZSgicHJlY2xpY2siKSx0aGlzLl9maXJlTW91c2VFdmVudCh0KSl9LF9maXJlTW91c2VFdmVudDpmdW5jdGlvbih0KXtpZih0aGlzLl9sb2FkZWQmJiFvLkRvbUV2ZW50Ll9za2lwcGVkKHQpKXt2YXIgZT10LnR5cGU7aWYoZT0ibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZWxlYXZlIj09PWU/Im1vdXNlb3V0IjplLHRoaXMuaGFzRXZlbnRMaXN0ZW5lcnMoZSkpeyJjb250ZXh0bWVudSI9PT1lJiZvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpO3ZhciBpPXRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksbj10aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLHM9dGhpcy5sYXllclBvaW50VG9MYXRMbmcobik7dGhpcy5maXJlKGUse2xhdGxuZzpzLGxheWVyUG9pbnQ6bixjb250YWluZXJQb2ludDppLG9yaWdpbmFsRXZlbnQ6dH0pfX19LF9vblRpbGVMYXllckxvYWQ6ZnVuY3Rpb24oKXt0aGlzLl90aWxlTGF5ZXJzVG9Mb2FkLS0sdGhpcy5fdGlsZUxheWVyc051bSYmIXRoaXMuX3RpbGVMYXllcnNUb0xvYWQmJnRoaXMuZmlyZSgidGlsZWxheWVyc2xvYWQiKX0sX2NsZWFySGFuZGxlcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzLmxlbmd0aDtlPnQ7dCsrKXRoaXMuX2hhbmRsZXJzW3RdLmRpc2FibGUoKX0sd2hlblJlYWR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90LmNhbGwoZXx8dGhpcyx0aGlzKTp0aGlzLm9uKCJsb2FkIix0LGUpLHRoaXN9LF9sYXllckFkZDpmdW5jdGlvbih0KXt0Lm9uQWRkKHRoaXMpLHRoaXMuZmlyZSgibGF5ZXJhZGQiLHtsYXllcjp0fSl9LF9nZXRNYXBQYW5lUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIG8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKX0sX21vdmVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TWFwUGFuZVBvcygpO3JldHVybiB0JiYhdC5lcXVhbHMoWzAsMF0pfSxfZ2V0VG9wTGVmdFBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxfZ2V0TmV3VG9wTGVmdFBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3QoaSkuX3JvdW5kKCl9LF9sYXRMbmdUb05ld0xheWVyUG9pbnQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuX2dldE5ld1RvcExlZnRQb2ludChpLGUpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3Qobil9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsZSxpKXtpZighaSlyZXR1cm4gdDt2YXIgbj10aGlzLnByb2plY3QodCxlKSxzPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLGE9bmV3IG8uQm91bmRzKG4uc3VidHJhY3Qocyksbi5hZGQocykpLHI9dGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KGEsaSxlKTtyZXR1cm4gdGhpcy51bnByb2plY3Qobi5hZGQociksZSl9LF9saW1pdE9mZnNldDpmdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB0O3ZhciBpPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxuPW5ldyBvLkJvdW5kcyhpLm1pbi5hZGQodCksaS5tYXguYWRkKHQpKTtyZXR1cm4gdC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG4sZSkpfSxfZ2V0Qm91bmRzT2Zmc2V0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLnByb2plY3QoZS5nZXROb3J0aFdlc3QoKSxpKS5zdWJ0cmFjdCh0Lm1pbikscz10aGlzLnByb2plY3QoZS5nZXRTb3V0aEVhc3QoKSxpKS5zdWJ0cmFjdCh0Lm1heCksYT10aGlzLl9yZWJvdW5kKG4ueCwtcy54KSxyPXRoaXMuX3JlYm91bmQobi55LC1zLnkpO3JldHVybiBuZXcgby5Qb2ludChhLHIpfSxfcmVib3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiB0K2U+MD9NYXRoLnJvdW5kKHQtZSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGUpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldE1pblpvb20oKSxpPXRoaXMuZ2V0TWF4Wm9vbSgpO3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKGksdCkpfX0pLG8ubWFwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk1hcCh0LGUpfSxvLlByb2plY3Rpb24uTWVyY2F0b3I9e01BWF9MQVRJVFVERTo4NS4wODQwNTkxNTU2LFJfTUlOT1I6NjM1Njc1Mi4zMTQyNDUxNzksUl9NQUpPUjo2Mzc4MTM3LHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9by5MYXRMbmcuREVHX1RPX1JBRCxpPXRoaXMuTUFYX0xBVElUVURFLG49TWF0aC5tYXgoTWF0aC5taW4oaSx0LmxhdCksLWkpLHM9dGhpcy5SX01BSk9SLGE9dGhpcy5SX01JTk9SLHI9dC5sbmcqZSpzLGg9biplLGw9YS9zLHU9TWF0aC5zcXJ0KDEtbCpsKSxjPXUqTWF0aC5zaW4oaCk7Yz1NYXRoLnBvdygoMS1jKS8oMStjKSwuNSp1KTt2YXIgZD1NYXRoLnRhbiguNSooLjUqTWF0aC5QSS1oKSkvYztyZXR1cm4gaD0tcypNYXRoLmxvZyhkKSxuZXcgby5Qb2ludChyLGgpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9by5MYXRMbmcuUkFEX1RPX0RFRyxuPXRoaXMuUl9NQUpPUixzPXRoaXMuUl9NSU5PUixhPXQueCppL24scj1zL24saD1NYXRoLnNxcnQoMS1yKnIpLGw9TWF0aC5leHAoLXQueS9uKSx1PU1hdGguUEkvMi0yKk1hdGguYXRhbihsKSxjPTE1LGQ9MWUtNyxwPWMsXz0uMTtNYXRoLmFicyhfKT5kJiYtLXA+MDspZT1oKk1hdGguc2luKHUpLF89TWF0aC5QSS8yLTIqTWF0aC5hdGFuKGwqTWF0aC5wb3coKDEtZSkvKDErZSksLjUqaCkpLXUsdSs9XztyZXR1cm4gbmV3IG8uTGF0TG5nKHUqaSxhKX19LG8uQ1JTLkVQU0czMzk1PW8uZXh0ZW5kKHt9LG8uQ1JTLHsKY29kZToiRVBTRzozMzk1Iixwcm9qZWN0aW9uOm8uUHJvamVjdGlvbi5NZXJjYXRvcix0cmFuc2Zvcm1hdGlvbjpmdW5jdGlvbigpe3ZhciB0PW8uUHJvamVjdGlvbi5NZXJjYXRvcixlPXQuUl9NQUpPUixpPS41LyhNYXRoLlBJKmUpO3JldHVybiBuZXcgby5UcmFuc2Zvcm1hdGlvbihpLC41LC1pLC41KX0oKX0pLG8uVGlsZUxheWVyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCx0aWxlU2l6ZToyNTYsc3ViZG9tYWluczoiYWJjIixlcnJvclRpbGVVcmw6IiIsYXR0cmlidXRpb246IiIsem9vbU9mZnNldDowLG9wYWNpdHk6MSx1bmxvYWRJbnZpc2libGVUaWxlczpvLkJyb3dzZXIubW9iaWxlLHVwZGF0ZVdoZW5JZGxlOm8uQnJvd3Nlci5tb2JpbGV9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtlPW8uc2V0T3B0aW9ucyh0aGlzLGUpLGUuZGV0ZWN0UmV0aW5hJiZvLkJyb3dzZXIucmV0aW5hJiZlLm1heFpvb20+MCYmKGUudGlsZVNpemU9TWF0aC5mbG9vcihlLnRpbGVTaXplLzIpLGUuem9vbU9mZnNldCsrLGUubWluWm9vbT4wJiZlLm1pblpvb20tLSx0aGlzLm9wdGlvbnMubWF4Wm9vbS0tKSxlLmJvdW5kcyYmKGUuYm91bmRzPW8ubGF0TG5nQm91bmRzKGUuYm91bmRzKSksdGhpcy5fdXJsPXQ7dmFyIGk9dGhpcy5vcHRpb25zLnN1YmRvbWFpbnM7InN0cmluZyI9PXR5cGVvZiBpJiYodGhpcy5vcHRpb25zLnN1YmRvbWFpbnM9aS5zcGxpdCgiIikpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9hbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5faW5pdENvbnRhaW5lcigpLHQub24oe3ZpZXdyZXNldDp0aGlzLl9yZXNldCxtb3ZlZW5kOnRoaXMuX3VwZGF0ZX0sdGhpcyksdGhpcy5fYW5pbWF0ZWQmJnQub24oe3pvb21hbmltOnRoaXMuX2FuaW1hdGVab29tLHpvb21lbmQ6dGhpcy5fZW5kWm9vbUFuaW19LHRoaXMpLHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX2xpbWl0ZWRVcGRhdGU9by5VdGlsLmxpbWl0RXhlY0J5SW50ZXJ2YWwodGhpcy5fdXBkYXRlLDE1MCx0aGlzKSx0Lm9uKCJtb3ZlIix0aGlzLl9saW1pdGVkVXBkYXRlLHRoaXMpKSx0aGlzLl9yZXNldCgpLHRoaXMuX3VwZGF0ZSgpfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy5fcmVzZXQsbW92ZWVuZDp0aGlzLl91cGRhdGV9LHRoaXMpLHRoaXMuX2FuaW1hdGVkJiZ0Lm9mZih7em9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb20sem9vbWVuZDp0aGlzLl9lbmRab29tQW5pbX0sdGhpcyksdGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlfHx0Lm9mZigibW92ZSIsdGhpcy5fbGltaXRlZFVwZGF0ZSx0aGlzKSx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl9tYXA9bnVsbH0sYnJpbmdUb0Zyb250OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodC5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHRoaXMuX3NldEF1dG9aSW5kZXgodCxNYXRoLm1heCkpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiYodC5pbnNlcnRCZWZvcmUodGhpcy5fY29udGFpbmVyLHQuZmlyc3RDaGlsZCksdGhpcy5fc2V0QXV0b1pJbmRleCh0LE1hdGgubWluKSksdGhpc30sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMub3BhY2l0eT10LHRoaXMuX21hcCYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LHNldFVybDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl91cmw9dCxlfHx0aGlzLnJlZHJhdygpLHRoaXN9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyJiZ0aGlzLm9wdGlvbnMuekluZGV4IT09aSYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9dGhpcy5vcHRpb25zLnpJbmRleCl9LF9zZXRBdXRvWkluZGV4OmZ1bmN0aW9uKHQsZSl7dmFyIGksbixvLHM9dC5jaGlsZHJlbixhPS1lKDEvMCwtKDEvMCkpO2ZvcihuPTAsbz1zLmxlbmd0aDtvPm47bisrKXNbbl0hPT10aGlzLl9jb250YWluZXImJihpPXBhcnNlSW50KHNbbl0uc3R5bGUuekluZGV4LDEwKSxpc05hTihpKXx8KGE9ZShhLGkpKSk7dGhpcy5vcHRpb25zLnpJbmRleD10aGlzLl9jb250YWluZXIuc3R5bGUuekluZGV4PShpc0Zpbml0ZShhKT9hOjApK2UoMSwtMSl9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLl90aWxlcztpZihvLkJyb3dzZXIuaWVsdDkpZm9yKHQgaW4gZSlvLkRvbVV0aWwuc2V0T3BhY2l0eShlW3RdLHRoaXMub3B0aW9ucy5vcGFjaXR5KTtlbHNlIG8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9wYW5lcy50aWxlUGFuZTtpZighdGhpcy5fY29udGFpbmVyKXtpZih0aGlzLl9jb250YWluZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1sYXllciIpLHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXMuX2FuaW1hdGVkKXt2YXIgZT0ibGVhZmxldC10aWxlLWNvbnRhaW5lciI7dGhpcy5fYmdCdWZmZXI9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fdGlsZUNvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUsdGhpcy5fY29udGFpbmVyKX1lbHNlIHRoaXMuX3RpbGVDb250YWluZXI9dGhpcy5fY29udGFpbmVyO3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCl9fSxfcmVzZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX3RpbGVzKXRoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6dGhpcy5fdGlsZXNbZV19KTt0aGlzLl90aWxlcz17fSx0aGlzLl90aWxlc1RvTG9hZD0wLHRoaXMub3B0aW9ucy5yZXVzZVRpbGVzJiYodGhpcy5fdW51c2VkVGlsZXM9W10pLHRoaXMuX3RpbGVDb250YWluZXIuaW5uZXJIVE1MPSIiLHRoaXMuX2FuaW1hdGVkJiZ0JiZ0LmhhcmQmJnRoaXMuX2NsZWFyQmdCdWZmZXIoKSx0aGlzLl9pbml0Q29udGFpbmVyKCl9LF9nZXRUaWxlU2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxlPXQuZ2V0Wm9vbSgpK3RoaXMub3B0aW9ucy56b29tT2Zmc2V0LGk9dGhpcy5vcHRpb25zLm1heE5hdGl2ZVpvb20sbj10aGlzLm9wdGlvbnMudGlsZVNpemU7cmV0dXJuIGkmJmU+aSYmKG49TWF0aC5yb3VuZCh0LmdldFpvb21TY2FsZShlKS90LmdldFpvb21TY2FsZShpKSpuKSksbn0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRQaXhlbEJvdW5kcygpLGk9dC5nZXRab29tKCksbj10aGlzLl9nZXRUaWxlU2l6ZSgpO2lmKCEoaT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8aTx0aGlzLm9wdGlvbnMubWluWm9vbSkpe3ZhciBzPW8uYm91bmRzKGUubWluLmRpdmlkZUJ5KG4pLl9mbG9vcigpLGUubWF4LmRpdmlkZUJ5KG4pLl9mbG9vcigpKTt0aGlzLl9hZGRUaWxlc0Zyb21DZW50ZXJPdXQocyksKHRoaXMub3B0aW9ucy51bmxvYWRJbnZpc2libGVUaWxlc3x8dGhpcy5vcHRpb25zLnJldXNlVGlsZXMpJiZ0aGlzLl9yZW1vdmVPdGhlclRpbGVzKHMpfX19LF9hZGRUaWxlc0Zyb21DZW50ZXJPdXQ6ZnVuY3Rpb24odCl7dmFyIGksbixzLGE9W10scj10LmdldENlbnRlcigpO2ZvcihpPXQubWluLnk7aTw9dC5tYXgueTtpKyspZm9yKG49dC5taW4ueDtuPD10Lm1heC54O24rKylzPW5ldyBvLlBvaW50KG4saSksdGhpcy5fdGlsZVNob3VsZEJlTG9hZGVkKHMpJiZhLnB1c2gocyk7dmFyIGg9YS5sZW5ndGg7aWYoMCE9PWgpe2Euc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlVG8ociktZS5kaXN0YW5jZVRvKHIpfSk7dmFyIGw9ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKHRoaXMuX3RpbGVzVG9Mb2FkfHx0aGlzLmZpcmUoImxvYWRpbmciKSx0aGlzLl90aWxlc1RvTG9hZCs9aCxuPTA7aD5uO24rKyl0aGlzLl9hZGRUaWxlKGFbbl0sbCk7dGhpcy5fdGlsZUNvbnRhaW5lci5hcHBlbmRDaGlsZChsKX19LF90aWxlU2hvdWxkQmVMb2FkZWQ6ZnVuY3Rpb24odCl7aWYodC54KyI6Iit0LnkgaW4gdGhpcy5fdGlsZXMpcmV0dXJuITE7dmFyIGU9dGhpcy5vcHRpb25zO2lmKCFlLmNvbnRpbnVvdXNXb3JsZCl7dmFyIGk9dGhpcy5fZ2V0V3JhcFRpbGVOdW0oKTtpZihlLm5vV3JhcCYmKHQueDwwfHx0Lng+PWkueCl8fHQueTwwfHx0Lnk+PWkueSlyZXR1cm4hMX1pZihlLmJvdW5kcyl7dmFyIG49dGhpcy5fZ2V0VGlsZVNpemUoKSxvPXQubXVsdGlwbHlCeShuKSxzPW8uYWRkKFtuLG5dKSxhPXRoaXMuX21hcC51bnByb2plY3Qobykscj10aGlzLl9tYXAudW5wcm9qZWN0KHMpO2lmKGUuY29udGludW91c1dvcmxkfHxlLm5vV3JhcHx8KGE9YS53cmFwKCkscj1yLndyYXAoKSksIWUuYm91bmRzLmludGVyc2VjdHMoW2Escl0pKXJldHVybiExfXJldHVybiEwfSxfcmVtb3ZlT3RoZXJUaWxlczpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbztmb3IobyBpbiB0aGlzLl90aWxlcyllPW8uc3BsaXQoIjoiKSxpPXBhcnNlSW50KGVbMF0sMTApLG49cGFyc2VJbnQoZVsxXSwxMCksKGk8dC5taW4ueHx8aT50Lm1heC54fHxuPHQubWluLnl8fG4+dC5tYXgueSkmJnRoaXMuX3JlbW92ZVRpbGUobyl9LF9yZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO3RoaXMuZmlyZSgidGlsZXVubG9hZCIse3RpbGU6ZSx1cmw6ZS5zcmN9KSx0aGlzLm9wdGlvbnMucmV1c2VUaWxlcz8oby5Eb21VdGlsLnJlbW92ZUNsYXNzKGUsImxlYWZsZXQtdGlsZS1sb2FkZWQiKSx0aGlzLl91bnVzZWRUaWxlcy5wdXNoKGUpKTplLnBhcmVudE5vZGU9PT10aGlzLl90aWxlQ29udGFpbmVyJiZ0aGlzLl90aWxlQ29udGFpbmVyLnJlbW92ZUNoaWxkKGUpLG8uQnJvd3Nlci5hbmRyb2lkfHwoZS5vbmxvYWQ9bnVsbCxlLnNyYz1vLlV0aWwuZW1wdHlJbWFnZVVybCksZGVsZXRlIHRoaXMuX3RpbGVzW3RdfSxfYWRkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldFRpbGVQb3ModCksbj10aGlzLl9nZXRUaWxlKCk7by5Eb21VdGlsLnNldFBvc2l0aW9uKG4saSxvLkJyb3dzZXIuY2hyb21lKSx0aGlzLl90aWxlc1t0LngrIjoiK3QueV09bix0aGlzLl9sb2FkVGlsZShuLHQpLG4ucGFyZW50Tm9kZSE9PXRoaXMuX3RpbGVDb250YWluZXImJmUuYXBwZW5kQ2hpbGQobil9LF9nZXRab29tRm9yVXJsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGU9dGhpcy5fbWFwLmdldFpvb20oKTtyZXR1cm4gdC56b29tUmV2ZXJzZSYmKGU9dC5tYXhab29tLWUpLGUrPXQuem9vbU9mZnNldCx0Lm1heE5hdGl2ZVpvb20/TWF0aC5taW4oZSx0Lm1heE5hdGl2ZVpvb20pOmV9LF9nZXRUaWxlUG9zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpLGk9dGhpcy5fZ2V0VGlsZVNpemUoKTtyZXR1cm4gdC5tdWx0aXBseUJ5KGkpLnN1YnRyYWN0KGUpfSxnZXRUaWxlVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLG8uZXh0ZW5kKHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KSx6OnQueix4OnQueCx5OnQueX0sdGhpcy5vcHRpb25zKSl9LF9nZXRXcmFwVGlsZU51bTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5vcHRpb25zLmNycyxlPXQuZ2V0U2l6ZSh0aGlzLl9tYXAuZ2V0Wm9vbSgpKTtyZXR1cm4gZS5kaXZpZGVCeSh0aGlzLl9nZXRUaWxlU2l6ZSgpKS5fZmxvb3IoKX0sX2FkanVzdFRpbGVQb2ludDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRXcmFwVGlsZU51bSgpO3RoaXMub3B0aW9ucy5jb250aW51b3VzV29ybGR8fHRoaXMub3B0aW9ucy5ub1dyYXB8fCh0Lng9KHQueCVlLngrZS54KSVlLngpLHRoaXMub3B0aW9ucy50bXMmJih0Lnk9ZS55LXQueS0xKSx0Lno9dGhpcy5fZ2V0Wm9vbUZvclVybCgpfSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguYWJzKHQueCt0LnkpJXRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbZV19LF9nZXRUaWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLnJldXNlVGlsZXMmJnRoaXMuX3VudXNlZFRpbGVzLmxlbmd0aD4wKXt2YXIgdD10aGlzLl91bnVzZWRUaWxlcy5wb3AoKTtyZXR1cm4gdGhpcy5fcmVzZXRUaWxlKHQpLHR9cmV0dXJuIHRoaXMuX2NyZWF0ZVRpbGUoKX0sX3Jlc2V0VGlsZTpmdW5jdGlvbigpe30sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJpbWciLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD10LnN0eWxlLmhlaWdodD10aGlzLl9nZXRUaWxlU2l6ZSgpKyJweCIsdC5nYWxsZXJ5aW1nPSJubyIsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sby5Ccm93c2VyLmllbHQ5JiZ0aGlzLm9wdGlvbnMub3BhY2l0eSE9PWkmJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHQsdGhpcy5vcHRpb25zLm9wYWNpdHkpLG8uQnJvd3Nlci5tb2JpbGVXZWJraXQzZCYmKHQuc3R5bGUuV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5PSJoaWRkZW4iKSx0fSxfbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXt0Ll9sYXllcj10aGlzLHQub25sb2FkPXRoaXMuX3RpbGVPbkxvYWQsdC5vbmVycm9yPXRoaXMuX3RpbGVPbkVycm9yLHRoaXMuX2FkanVzdFRpbGVQb2ludChlKSx0LnNyYz10aGlzLmdldFRpbGVVcmwoZSksdGhpcy5maXJlKCJ0aWxlbG9hZHN0YXJ0Iix7dGlsZTp0LHVybDp0LnNyY30pfSxfdGlsZUxvYWRlZDpmdW5jdGlvbigpe3RoaXMuX3RpbGVzVG9Mb2FkLS0sdGhpcy5fYW5pbWF0ZWQmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl90aWxlQ29udGFpbmVyLCJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLl90aWxlc1RvTG9hZHx8KHRoaXMuZmlyZSgibG9hZCIpLHRoaXMuX2FuaW1hdGVkJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2NsZWFyQmdCdWZmZXJUaW1lciksdGhpcy5fY2xlYXJCZ0J1ZmZlclRpbWVyPXNldFRpbWVvdXQoby5iaW5kKHRoaXMuX2NsZWFyQmdCdWZmZXIsdGhpcyksNTAwKSkpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2xheWVyO3RoaXMuc3JjIT09by5VdGlsLmVtcHR5SW1hZ2VVcmwmJihvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcywibGVhZmxldC10aWxlLWxvYWRlZCIpLHQuZmlyZSgidGlsZWxvYWQiLHt0aWxlOnRoaXMsdXJsOnRoaXMuc3JjfSkpLHQuX3RpbGVMb2FkZWQoKX0sX3RpbGVPbkVycm9yOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbGF5ZXI7dC5maXJlKCJ0aWxlZXJyb3IiLHt0aWxlOnRoaXMsdXJsOnRoaXMuc3JjfSk7dmFyIGU9dC5vcHRpb25zLmVycm9yVGlsZVVybDtlJiYodGhpcy5zcmM9ZSksdC5fdGlsZUxvYWRlZCgpfX0pLG8udGlsZUxheWVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlRpbGVMYXllcih0LGUpfSxvLlRpbGVMYXllci5XTVM9by5UaWxlTGF5ZXIuZXh0ZW5kKHtkZWZhdWx0V21zUGFyYW1zOntzZXJ2aWNlOiJXTVMiLHJlcXVlc3Q6IkdldE1hcCIsdmVyc2lvbjoiMS4xLjEiLGxheWVyczoiIixzdHlsZXM6IiIsZm9ybWF0OiJpbWFnZS9qcGVnIix0cmFuc3BhcmVudDohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3RoaXMuX3VybD10O3ZhciBpPW8uZXh0ZW5kKHt9LHRoaXMuZGVmYXVsdFdtc1BhcmFtcyksbj1lLnRpbGVTaXplfHx0aGlzLm9wdGlvbnMudGlsZVNpemU7ZS5kZXRlY3RSZXRpbmEmJm8uQnJvd3Nlci5yZXRpbmE/aS53aWR0aD1pLmhlaWdodD0yKm46aS53aWR0aD1pLmhlaWdodD1uO2Zvcih2YXIgcyBpbiBlKXRoaXMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShzKXx8ImNycyI9PT1zfHwoaVtzXT1lW3NdKTt0aGlzLndtc1BhcmFtcz1pLG8uc2V0T3B0aW9ucyh0aGlzLGUpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9jcnM9dGhpcy5vcHRpb25zLmNyc3x8dC5vcHRpb25zLmNycyx0aGlzLl93bXNWZXJzaW9uPXBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7dmFyIGU9dGhpcy5fd21zVmVyc2lvbj49MS4zPyJjcnMiOiJzcnMiO3RoaXMud21zUGFyYW1zW2VdPXRoaXMuX2Nycy5jb2RlLG8uVGlsZUxheWVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCl9LGdldFRpbGVVcmw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5vcHRpb25zLnRpbGVTaXplLG49dC5tdWx0aXBseUJ5KGkpLHM9bi5hZGQoW2ksaV0pLGE9dGhpcy5fY3JzLnByb2plY3QoZS51bnByb2plY3Qobix0LnopKSxyPXRoaXMuX2Nycy5wcm9qZWN0KGUudW5wcm9qZWN0KHMsdC56KSksaD10aGlzLl93bXNWZXJzaW9uPj0xLjMmJnRoaXMuX2Nycz09PW8uQ1JTLkVQU0c0MzI2P1tyLnksYS54LGEueSxyLnhdLmpvaW4oIiwiKTpbYS54LHIueSxyLngsYS55XS5qb2luKCIsIiksbD1vLlV0aWwudGVtcGxhdGUodGhpcy5fdXJsLHtzOnRoaXMuX2dldFN1YmRvbWFpbih0KX0pO3JldHVybiBsK28uVXRpbC5nZXRQYXJhbVN0cmluZyh0aGlzLndtc1BhcmFtcyxsLCEwKSsiJkJCT1g9IitofSxzZXRQYXJhbXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gby5leHRlbmQodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pLG8udGlsZUxheWVyLndtcz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5UaWxlTGF5ZXIuV01TKHQsZSl9LG8uVGlsZUxheWVyLkNhbnZhcz1vLlRpbGVMYXllci5leHRlbmQoe29wdGlvbnM6e2FzeW5jOiExfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxyZWRyYXc6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9yZXNldCh7aGFyZDohMH0pLHRoaXMuX3VwZGF0ZSgpKTtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5fcmVkcmF3VGlsZSh0aGlzLl90aWxlc1t0XSk7cmV0dXJuIHRoaXN9LF9yZWRyYXdUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhd1RpbGUodCx0Ll90aWxlUG9pbnQsdGhpcy5fbWFwLl96b29tKX0sX2NyZWF0ZVRpbGU6ZnVuY3Rpb24oKXt2YXIgdD1vLkRvbVV0aWwuY3JlYXRlKCJjYW52YXMiLCJsZWFmbGV0LXRpbGUiKTtyZXR1cm4gdC53aWR0aD10LmhlaWdodD10aGlzLm9wdGlvbnMudGlsZVNpemUsdC5vbnNlbGVjdHN0YXJ0PXQub25tb3VzZW1vdmU9by5VdGlsLmZhbHNlRm4sdH0sX2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dC5fbGF5ZXI9dGhpcyx0Ll90aWxlUG9pbnQ9ZSx0aGlzLl9yZWRyYXdUaWxlKHQpLHRoaXMub3B0aW9ucy5hc3luY3x8dGhpcy50aWxlRHJhd24odCl9LGRyYXdUaWxlOmZ1bmN0aW9uKCl7fSx0aWxlRHJhd246ZnVuY3Rpb24odCl7dGhpcy5fdGlsZU9uTG9hZC5jYWxsKHQpfX0pLG8udGlsZUxheWVyLmNhbnZhcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uVGlsZUxheWVyLkNhbnZhcyh0KX0sby5JbWFnZU92ZXJsYXk9by5DbGFzcy5leHRlbmQoe2luY2x1ZGVzOm8uTWl4aW4uRXZlbnRzLG9wdGlvbnM6e29wYWNpdHk6MX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPW8ubGF0TG5nQm91bmRzKGUpLG8uc2V0T3B0aW9ucyh0aGlzLGkpfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9pbWFnZXx8dGhpcy5faW5pdEltYWdlKCksdC5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHQub24oInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZCYmdC5vbigiem9vbWFuaW0iLHRoaXMuX2FuaW1hdGVab29tLHRoaXMpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuZ2V0UGFuZXMoKS5vdmVybGF5UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pbWFnZSksdC5vZmYoInZpZXdyZXNldCIsdGhpcy5fcmVzZXQsdGhpcyksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub2ZmKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbWFnZSYmdGhpcy5fbWFwLl9wYW5lcy5vdmVybGF5UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9pbWFnZSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX3BhbmVzLm92ZXJsYXlQYW5lO3JldHVybiB0aGlzLl9pbWFnZSYmdC5pbnNlcnRCZWZvcmUodGhpcy5faW1hZ2UsdC5maXJzdENoaWxkKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7dGhpcy5fdXJsPXQsdGhpcy5faW1hZ2Uuc3JjPXRoaXMuX3VybH0sZ2V0QXR0cmlidXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9ufSxfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2U9by5Eb21VdGlsLmNyZWF0ZSgiaW1nIiwibGVhZmxldC1pbWFnZS1sYXllciIpLHRoaXMuX21hcC5vcHRpb25zLnpvb21BbmltYXRpb24mJm8uQnJvd3Nlci5hbnkzZD9vLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5faW1hZ2UsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpOm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9pbWFnZSwibGVhZmxldC16b29tLWhpZGUiKSx0aGlzLl91cGRhdGVPcGFjaXR5KCksby5leHRlbmQodGhpcy5faW1hZ2Use2dhbGxlcnlpbWc6Im5vIixvbnNlbGVjdHN0YXJ0Om8uVXRpbC5mYWxzZUZuLG9ubW91c2Vtb3ZlOm8uVXRpbC5mYWxzZUZuLG9ubG9hZDpvLmJpbmQodGhpcy5fb25JbWFnZUxvYWQsdGhpcyksc3JjOnRoaXMuX3VybH0pfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9dGhpcy5faW1hZ2Usbj1lLmdldFpvb21TY2FsZSh0Lnpvb20pLHM9dGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpLGE9dGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpLHI9ZS5fbGF0TG5nVG9OZXdMYXllclBvaW50KHMsdC56b29tLHQuY2VudGVyKSxoPWUuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludChhLHQuem9vbSx0LmNlbnRlcikuX3N1YnRyYWN0KHIpLGw9ci5fYWRkKGguX211bHRpcGx5QnkoLjUqKDEtMS9uKSkpO2kuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09by5Eb21VdGlsLmdldFRyYW5zbGF0ZVN0cmluZyhsKSsiIHNjYWxlKCIrbisiKSAifSxfcmVzZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbWFnZSxlPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSxpPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKS5fc3VidHJhY3QoZSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHQsZSksdC5zdHlsZS53aWR0aD1pLngrInB4Iix0LnN0eWxlLmhlaWdodD1pLnkrInB4In0sX29uSW1hZ2VMb2FkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJsb2FkIil9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7by5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfX0pLG8uaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uSW1hZ2VPdmVybGF5KHQsZSxpKX0sby5JY29uPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntjbGFzc05hbWU6IiJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oImljb24iLHQpfSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oInNoYWRvdyIsdCl9LF9jcmVhdGVJY29uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SWNvblVybCh0KTtpZighaSl7aWYoImljb24iPT09dCl0aHJvdyBuZXcgRXJyb3IoImljb25Vcmwgbm90IHNldCBpbiBJY29uIG9wdGlvbnMgKHNlZSB0aGUgZG9jcykuIik7cmV0dXJuIG51bGx9dmFyIG47cmV0dXJuIG49ZSYmIklNRyI9PT1lLnRhZ05hbWU/dGhpcy5fY3JlYXRlSW1nKGksZSk6dGhpcy5fY3JlYXRlSW1nKGkpLHRoaXMuX3NldEljb25TdHlsZXMobix0KSxufSxfc2V0SWNvblN0eWxlczpmdW5jdGlvbih0LGUpe3ZhciBpLG49dGhpcy5vcHRpb25zLHM9by5wb2ludChuW2UrIlNpemUiXSk7aT0ic2hhZG93Ij09PWU/by5wb2ludChuLnNoYWRvd0FuY2hvcnx8bi5pY29uQW5jaG9yKTpvLnBvaW50KG4uaWNvbkFuY2hvciksIWkmJnMmJihpPXMuZGl2aWRlQnkoMiwhMCkpLHQuY2xhc3NOYW1lPSJsZWFmbGV0LW1hcmtlci0iK2UrIiAiK24uY2xhc3NOYW1lLGkmJih0LnN0eWxlLm1hcmdpbkxlZnQ9LWkueCsicHgiLHQuc3R5bGUubWFyZ2luVG9wPS1pLnkrInB4IikscyYmKHQuc3R5bGUud2lkdGg9cy54KyJweCIsdC5zdHlsZS5oZWlnaHQ9cy55KyJweCIpfSxfY3JlYXRlSW1nOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGk9aXx8ZS5jcmVhdGVFbGVtZW50KCJpbWciKSxpLnNyYz10LGl9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBvLkJyb3dzZXIucmV0aW5hJiZ0aGlzLm9wdGlvbnNbdCsiUmV0aW5hVXJsIl0/dGhpcy5vcHRpb25zW3QrIlJldGluYVVybCJdOnRoaXMub3B0aW9uc1t0KyJVcmwiXX19KSxvLmljb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkljb24odCl9LG8uSWNvbi5EZWZhdWx0PW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsyNSw0MV0saWNvbkFuY2hvcjpbMTIsNDFdLHBvcHVwQW5jaG9yOlsxLC0zNF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXt2YXIgZT10KyJVcmwiO2lmKHRoaXMub3B0aW9uc1tlXSlyZXR1cm4gdGhpcy5vcHRpb25zW2VdO28uQnJvd3Nlci5yZXRpbmEmJiJpY29uIj09PXQmJih0Kz0iLTJ4Iik7dmFyIGk9by5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoO2lmKCFpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgYXV0b2RldGVjdCBMLkljb24uRGVmYXVsdC5pbWFnZVBhdGgsIHNldCBpdCBtYW51YWxseS4iKTtyZXR1cm4gaSsiL21hcmtlci0iK3QrIi5wbmcifX0pLG8uSWNvbi5EZWZhdWx0LmltYWdlUGF0aD1mdW5jdGlvbigpe3ZhciB0LGksbixvLHMsYT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxyPS9bXC9eXWxlYWZsZXRbXC1cLl9dPyhbXHdcLVwuX10qKVwuanNcPz8vO2Zvcih0PTAsaT1hLmxlbmd0aDtpPnQ7dCsrKWlmKG49YVt0XS5zcmMsbz1uLm1hdGNoKHIpKXJldHVybiBzPW4uc3BsaXQocilbMF0sKHM/cysiLyI6IiIpKyJpbWFnZXMifSgpLG8uTWFya2VyPW8uQ2xhc3MuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxvcHRpb25zOntpY29uOm5ldyBvLkljb24uRGVmYXVsdCx0aXRsZToiIixhbHQ6IiIsY2xpY2thYmxlOiEwLGRyYWdnYWJsZTohMSxrZXlib2FyZDohMCx6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9sYXRsbmc9by5sYXRMbmcodCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHQub24oInZpZXdyZXNldCIsdGhpcy51cGRhdGUsdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgiYWRkIiksdC5vcHRpb25zLnpvb21BbmltYXRpb24mJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uJiZ0Lm9uKCJ6b29tYW5pbSIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpLHRoaXMuX3JlbW92ZUljb24oKSx0aGlzLl9yZW1vdmVTaGFkb3coKSx0aGlzLmZpcmUoInJlbW92ZSIpLHQub2ZmKHt2aWV3cmVzZXQ6dGhpcy51cGRhdGUsem9vbWFuaW06dGhpcy5fYW5pbWF0ZVpvb219LHRoaXMpLHRoaXMuX21hcD1udWxsfSxnZXRMYXRMbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGF0bG5nfSxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLnVwZGF0ZSgpLHRoaXMuZmlyZSgibW92ZSIse2xhdGxuZzp0aGlzLl9sYXRsbmd9KX0sc2V0WkluZGV4T2Zmc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0PXQsdGhpcy51cGRhdGUoKSx0aGlzfSxzZXRJY29uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuaWNvbj10LHRoaXMuX21hcCYmKHRoaXMuX2luaXRJY29uKCksdGhpcy51cGRhdGUoKSksdGhpcy5fcG9wdXAmJnRoaXMuYmluZFBvcHVwKHRoaXMuX3BvcHVwKSx0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWNvbiYmdGhpcy5fc2V0UG9zKHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKS5yb3VuZCgpKSx0aGlzfSxfaW5pdEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsZT10aGlzLl9tYXAsaT1lLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmZS5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb24sbj1pPyJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiOiJsZWFmbGV0LXpvb20taGlkZSIscz10Lmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxhPSExO3MhPT10aGlzLl9pY29uJiYodGhpcy5faWNvbiYmdGhpcy5fcmVtb3ZlSWNvbigpLGE9ITAsdC50aXRsZSYmKHMudGl0bGU9dC50aXRsZSksdC5hbHQmJihzLmFsdD10LmFsdCkpLG8uRG9tVXRpbC5hZGRDbGFzcyhzLG4pLHQua2V5Ym9hcmQmJihzLnRhYkluZGV4PSIwIiksdGhpcy5faWNvbj1zLHRoaXMuX2luaXRJbnRlcmFjdGlvbigpLHQucmlzZU9uSG92ZXImJm8uRG9tRXZlbnQub24ocywibW91c2VvdmVyIix0aGlzLl9icmluZ1RvRnJvbnQsdGhpcykub24ocywibW91c2VvdXQiLHRoaXMuX3Jlc2V0WkluZGV4LHRoaXMpO3ZhciByPXQuaWNvbi5jcmVhdGVTaGFkb3codGhpcy5fc2hhZG93KSxoPSExO3IhPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxoPSEwKSxyJiZvLkRvbVV0aWwuYWRkQ2xhc3MocixuKSx0aGlzLl9zaGFkb3c9cix0Lm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpO3ZhciBsPXRoaXMuX21hcC5fcGFuZXM7YSYmbC5tYXJrZXJQYW5lLmFwcGVuZENoaWxkKHRoaXMuX2ljb24pLHImJmgmJmwuc2hhZG93UGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9zaGFkb3cpfSxfcmVtb3ZlSWNvbjpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5yaXNlT25Ib3ZlciYmby5Eb21FdmVudC5vZmYodGhpcy5faWNvbiwibW91c2VvdmVyIix0aGlzLl9icmluZ1RvRnJvbnQpLm9mZih0aGlzLl9pY29uLCJtb3VzZW91dCIsdGhpcy5fcmVzZXRaSW5kZXgpLHRoaXMuX21hcC5fcGFuZXMubWFya2VyUGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9pY29uKSx0aGlzLl9pY29uPW51bGx9LF9yZW1vdmVTaGFkb3c6ZnVuY3Rpb24oKXt0aGlzLl9zaGFkb3cmJnRoaXMuX21hcC5fcGFuZXMuc2hhZG93UGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9zaGFkb3cpLHRoaXMuX3NoYWRvdz1udWxsfSxfc2V0UG9zOmZ1bmN0aW9uKHQpe28uRG9tVXRpbC5zZXRQb3NpdGlvbih0aGlzLl9pY29uLHQpLHRoaXMuX3NoYWRvdyYmby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX3NoYWRvdyx0KSx0aGlzLl96SW5kZXg9dC55K3RoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQsdGhpcy5fcmVzZXRaSW5kZXgoKX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl9pY29uLnN0eWxlLnpJbmRleD10aGlzLl96SW5kZXgrdH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKGUpfSxfaW5pdEludGVyYWN0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7dmFyIHQ9dGhpcy5faWNvbixlPVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImNvbnRleHRtZW51Il07by5Eb21VdGlsLmFkZENsYXNzKHQsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0LCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpLG8uRG9tRXZlbnQub24odCwia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MsdGhpcyk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspby5Eb21FdmVudC5vbih0LGVbaV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyk7by5IYW5kbGVyLk1hcmtlckRyYWcmJih0aGlzLmRyYWdnaW5nPW5ldyBvLkhhbmRsZXIuTWFya2VyRHJhZyh0aGlzKSx0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpKX19LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5tb3ZlZCgpOyh0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSl8fGUpJiZvLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbih0KSxlfHwodGhpcy5kcmFnZ2luZyYmdGhpcy5kcmFnZ2luZy5fZW5hYmxlZHx8IXRoaXMuX21hcC5kcmFnZ2luZ3x8IXRoaXMuX21hcC5kcmFnZ2luZy5tb3ZlZCgpKSYmdGhpcy5maXJlKHQudHlwZSx7b3JpZ2luYWxFdmVudDp0LGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sX29uS2V5UHJlc3M6ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnRoaXMuZmlyZSgiY2xpY2siLHtvcmlnaW5hbEV2ZW50OnQsbGF0bG5nOnRoaXMuX2xhdGxuZ30pfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSx7b3JpZ2luYWxFdmVudDp0LGxhdGxuZzp0aGlzLl9sYXRsbmd9KSwiY29udGV4dG1lbnUiPT09dC50eXBlJiZ0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSkmJm8uRG9tRXZlbnQucHJldmVudERlZmF1bHQodCksIm1vdXNlZG93biIhPT10LnR5cGU/by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCk6by5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzfSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe28uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2ljb24sdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3NoYWRvdyYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fc2hhZG93LHRoaXMub3B0aW9ucy5vcGFjaXR5KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCl9LF9yZXNldFpJbmRleDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCgwKX19KSxvLm1hcmtlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5NYXJrZXIodCxlKX0sby5EaXZJY29uPW8uSWNvbi5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsxMiwxMl0sY2xhc3NOYW1lOiJsZWFmbGV0LWRpdi1pY29uIixodG1sOiExfSxjcmVhdGVJY29uOmZ1bmN0aW9uKHQpe3ZhciBpPXQmJiJESVYiPT09dC50YWdOYW1lP3Q6ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuPXRoaXMub3B0aW9ucztyZXR1cm4gbi5odG1sIT09ITE/aS5pbm5lckhUTUw9bi5odG1sOmkuaW5uZXJIVE1MPSIiLG4uYmdQb3MmJihpLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbj0tbi5iZ1Bvcy54KyJweCAiKy1uLmJnUG9zLnkrInB4IiksdGhpcy5fc2V0SWNvblN0eWxlcyhpLCJpY29uIiksaX0sY3JlYXRlU2hhZG93OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksby5kaXZJY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5EaXZJY29uKHQpfSxvLk1hcC5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksby5Qb3B1cD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsb3B0aW9uczp7bWluV2lkdGg6NTAsbWF4V2lkdGg6MzAwLGF1dG9QYW46ITAsY2xvc2VCdXR0b246ITAsb2Zmc2V0OlswLDddLGF1dG9QYW5QYWRkaW5nOls1LDVdLGtlZXBJblZpZXc6ITEsY2xhc3NOYW1lOiIiLHpvb21BbmltYXRpb246ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9zb3VyY2U9ZSx0aGlzLl9hbmltYXRlZD1vLkJyb3dzZXIuYW55M2QmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX2lzT3Blbj0hMX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCk7dmFyIGU9dC5vcHRpb25zLmZhZGVBbmltYXRpb247ZSYmby5Eb21VdGlsLnNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLDApLHQuX3BhbmVzLnBvcHVwUGFuZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpLHQub24odGhpcy5fZ2V0RXZlbnRzKCksdGhpcyksdGhpcy51cGRhdGUoKSxlJiZvLkRvbVV0aWwuc2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsMSksdGhpcy5maXJlKCJvcGVuIiksdC5maXJlKCJwb3B1cG9wZW4iLHtwb3B1cDp0aGlzfSksdGhpcy5fc291cmNlJiZ0aGlzLl9zb3VyY2UuZmlyZSgicG9wdXBvcGVuIix7cG9wdXA6dGhpc30pfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxvcGVuT246ZnVuY3Rpb24odCl7cmV0dXJuIHQub3BlblBvcHVwKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhbmVzLnBvcHVwUGFuZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpLG8uVXRpbC5mYWxzZUZuKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCksdC5vZmYodGhpcy5fZ2V0RXZlbnRzKCksdGhpcyksdC5vcHRpb25zLmZhZGVBbmltYXRpb24mJm8uRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9tYXA9bnVsbCx0aGlzLmZpcmUoImNsb3NlIiksdC5maXJlKCJwb3B1cGNsb3NlIix7cG9wdXA6dGhpc30pLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLmZpcmUoInBvcHVwY2xvc2UiLHtwb3B1cDp0aGlzfSl9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPW8ubGF0TG5nKHQpLHRoaXMuX21hcCYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fYWRqdXN0UGFuKCkpLHRoaXN9LGdldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudH0sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY29udGVudD10LHRoaXMudXBkYXRlKCksdGhpc30sdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZUxheW91dCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIsdGhpcy5fYWRqdXN0UGFuKCkpfSxfZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9e3ZpZXdyZXNldDp0aGlzLl91cGRhdGVQb3NpdGlvbn07cmV0dXJuIHRoaXMuX2FuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl96b29tQW5pbWF0aW9uKSwoImNsb3NlT25DbGljayJpbiB0aGlzLm9wdGlvbnM/dGhpcy5vcHRpb25zLmNsb3NlT25DbGljazp0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykmJih0LnByZWNsaWNrPXRoaXMuX2Nsb3NlKSx0aGlzLm9wdGlvbnMua2VlcEluVmlldyYmKHQubW92ZWVuZD10aGlzLl9hZGp1c3RQYW4pLHR9LF9jbG9zZTpmdW5jdGlvbigpe3RoaXMuX21hcCYmdGhpcy5fbWFwLmNsb3NlUG9wdXAodGhpcyl9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQsZT0ibGVhZmxldC1wb3B1cCIsaT1lKyIgIit0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKyIgbGVhZmxldC16b29tLSIrKHRoaXMuX2FuaW1hdGVkPyJhbmltYXRlZCI6ImhpZGUiKSxuPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGkpO3RoaXMub3B0aW9ucy5jbG9zZUJ1dHRvbiYmKHQ9dGhpcy5fY2xvc2VCdXR0b249by5Eb21VdGlsLmNyZWF0ZSgiYSIsZSsiLWNsb3NlLWJ1dHRvbiIsbiksdC5ocmVmPSIjY2xvc2UiLHQuaW5uZXJIVE1MPSImIzIxNTsiLG8uRG9tRXZlbnQuZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24odCksby5Eb21FdmVudC5vbih0LCJjbGljayIsdGhpcy5fb25DbG9zZUJ1dHRvbkNsaWNrLHRoaXMpKTt2YXIgcz10aGlzLl93cmFwcGVyPW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsZSsiLWNvbnRlbnQtd3JhcHBlciIsbik7by5Eb21FdmVudC5kaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihzKSx0aGlzLl9jb250ZW50Tm9kZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1jb250ZW50IixzKSxvLkRvbUV2ZW50LmRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbih0aGlzLl9jb250ZW50Tm9kZSksby5Eb21FdmVudC5vbihzLCJjb250ZXh0bWVudSIsby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24pLHRoaXMuX3RpcENvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi10aXAtY29udGFpbmVyIixuKSx0aGlzLl90aXA9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyItdGlwIix0aGlzLl90aXBDb250YWluZXIpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnRlbnQpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udGVudCl0aGlzLl9jb250ZW50Tm9kZS5pbm5lckhUTUw9dGhpcy5fY29udGVudDtlbHNle2Zvcig7dGhpcy5fY29udGVudE5vZGUuaGFzQ2hpbGROb2RlcygpOyl0aGlzLl9jb250ZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250ZW50Tm9kZS5maXJzdENoaWxkKTt0aGlzLl9jb250ZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9jb250ZW50KX10aGlzLmZpcmUoImNvbnRlbnR1cGRhdGUiKX19LF91cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250ZW50Tm9kZSxlPXQuc3R5bGU7ZS53aWR0aD0iIixlLndoaXRlU3BhY2U9Im5vd3JhcCI7dmFyIGk9dC5vZmZzZXRXaWR0aDtpPU1hdGgubWluKGksdGhpcy5vcHRpb25zLm1heFdpZHRoKSxpPU1hdGgubWF4KGksdGhpcy5vcHRpb25zLm1pbldpZHRoKSxlLndpZHRoPWkrMSsicHgiLGUud2hpdGVTcGFjZT0iIixlLmhlaWdodD0iIjt2YXIgbj10Lm9mZnNldEhlaWdodCxzPXRoaXMub3B0aW9ucy5tYXhIZWlnaHQsYT0ibGVhZmxldC1wb3B1cC1zY3JvbGxlZCI7cyYmbj5zPyhlLmhlaWdodD1zKyJweCIsby5Eb21VdGlsLmFkZENsYXNzKHQsYSkpOm8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0LGEpLHRoaXMuX2NvbnRhaW5lcldpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aH0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXt2YXIgdD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksZT10aGlzLl9hbmltYXRlZCxpPW8ucG9pbnQodGhpcy5vcHRpb25zLm9mZnNldCk7ZSYmby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcix0KSx0aGlzLl9jb250YWluZXJCb3R0b209LWkueS0oZT8wOnQueSksdGhpcy5fY29udGFpbmVyTGVmdD0tTWF0aC5yb3VuZCh0aGlzLl9jb250YWluZXJXaWR0aC8yKStpLngrKGU/MDp0LngpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209dGhpcy5fY29udGFpbmVyQm90dG9tKyJweCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQ9dGhpcy5fY29udGFpbmVyTGVmdCsicHgifX0sX3pvb21BbmltYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lcixlKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5hdXRvUGFuKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0LGk9dGhpcy5fY29udGFpbmVyV2lkdGgsbj1uZXcgby5Qb2ludCh0aGlzLl9jb250YWluZXJMZWZ0LC1lLXRoaXMuX2NvbnRhaW5lckJvdHRvbSk7dGhpcy5fYW5pbWF0ZWQmJm4uX2FkZChvLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSk7dmFyIHM9dC5sYXllclBvaW50VG9Db250YWluZXJQb2ludChuKSxhPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nKSxyPW8ucG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nVG9wTGVmdHx8YSksaD1vLnBvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0fHxhKSxsPXQuZ2V0U2l6ZSgpLHU9MCxjPTA7cy54K2kraC54PmwueCYmKHU9cy54K2ktbC54K2gueCkscy54LXUtci54PDAmJih1PXMueC1yLngpLHMueStlK2gueT5sLnkmJihjPXMueStlLWwueStoLnkpLHMueS1jLXIueTwwJiYoYz1zLnktci55KSwodXx8YykmJnQuZmlyZSgiYXV0b3BhbnN0YXJ0IikucGFuQnkoW3UsY10pfX0sX29uQ2xvc2VCdXR0b25DbGljazpmdW5jdGlvbih0KXt0aGlzLl9jbG9zZSgpLG8uRG9tRXZlbnQuc3RvcCh0KX19KSxvLnBvcHVwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvcHVwKHQsZSl9LG8uTWFwLmluY2x1ZGUoe29wZW5Qb3B1cDpmdW5jdGlvbih0LGUsaSl7aWYodGhpcy5jbG9zZVBvcHVwKCksISh0IGluc3RhbmNlb2Ygby5Qb3B1cCkpe3ZhciBuPXQ7dD1uZXcgby5Qb3B1cChpKS5zZXRMYXRMbmcoZSkuc2V0Q29udGVudChuKX1yZXR1cm4gdC5faXNPcGVuPSEwLHRoaXMuX3BvcHVwPXQsdGhpcy5hZGRMYXllcih0KX0sY2xvc2VQb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdCYmdCE9PXRoaXMuX3BvcHVwfHwodD10aGlzLl9wb3B1cCx0aGlzLl9wb3B1cD1udWxsKSx0JiYodGhpcy5yZW1vdmVMYXllcih0KSx0Ll9pc09wZW49ITEpLHRoaXN9fSksby5NYXJrZXIuaW5jbHVkZSh7b3BlblBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9tYXAmJiF0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcy5fcG9wdXApJiYodGhpcy5fcG9wdXAuc2V0TGF0TG5nKHRoaXMuX2xhdGxuZyksdGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCkpLHRoaXN9LGNsb3NlUG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLl9jbG9zZSgpLHRoaXN9LHRvZ2dsZVBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXAuX2lzT3Blbj90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCgpKSx0aGlzfSxiaW5kUG9wdXA6ZnVuY3Rpb24odCxlKXt2YXIgaT1vLnBvaW50KHRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMucG9wdXBBbmNob3J8fFswLDBdKTtyZXR1cm4gaT1pLmFkZChvLlBvcHVwLnByb3RvdHlwZS5vcHRpb25zLm9mZnNldCksZSYmZS5vZmZzZXQmJihpPWkuYWRkKGUub2Zmc2V0KSksZT1vLmV4dGVuZCh7b2Zmc2V0Oml9LGUpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZHx8KHRoaXMub24oImNsaWNrIix0aGlzLnRvZ2dsZVBvcHVwLHRoaXMpLm9uKCJyZW1vdmUiLHRoaXMuY2xvc2VQb3B1cCx0aGlzKS5vbigibW92ZSIsdGhpcy5fbW92ZVBvcHVwLHRoaXMpLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMCksdCBpbnN0YW5jZW9mIG8uUG9wdXA/KG8uc2V0T3B0aW9ucyh0LGUpLHRoaXMuX3BvcHVwPXQsdC5fc291cmNlPXRoaXMpOnRoaXMuX3BvcHVwPW5ldyBvLlBvcHVwKGUsdGhpcykuc2V0Q29udGVudCh0KSx0aGlzfSxzZXRQb3B1cENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BvcHVwJiZ0aGlzLl9wb3B1cC5zZXRDb250ZW50KHQpLHRoaXN9LHVuYmluZFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwJiYodGhpcy5fcG9wdXA9bnVsbCx0aGlzLm9mZigiY2xpY2siLHRoaXMudG9nZ2xlUG9wdXAsdGhpcykub2ZmKCJyZW1vdmUiLHRoaXMuY2xvc2VQb3B1cCx0aGlzKS5vZmYoIm1vdmUiLHRoaXMuX21vdmVQb3B1cCx0aGlzKSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQ9ITEpLHRoaXN9LGdldFBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BvcHVwfSxfbW92ZVBvcHVwOmZ1bmN0aW9uKHQpe3RoaXMuX3BvcHVwLnNldExhdExuZyh0LmxhdGxuZyl9fSksby5MYXllckdyb3VwPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX2xheWVycz17fTt2YXIgZSxpO2lmKHQpZm9yKGU9MCxpPXQubGVuZ3RoO2k+ZTtlKyspdGhpcy5hZGRMYXllcih0W2VdKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRMYXllcklkKHQpO3JldHVybiB0aGlzLl9sYXllcnNbZV09dCx0aGlzLl9tYXAmJnRoaXMuX21hcC5hZGRMYXllcih0KSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXt2YXIgZT10IGluIHRoaXMuX2xheWVycz90OnRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9sYXllcnNbZV0mJnRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbZV0pLGRlbGV0ZSB0aGlzLl9sYXllcnNbZV0sdGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dCBpbiB0aGlzLl9sYXllcnN8fHRoaXMuZ2V0TGF5ZXJJZCh0KWluIHRoaXMuX2xheWVyczohMX0sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKSx0aGlzfSxpbnZva2U6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IoZSBpbiB0aGlzLl9sYXllcnMpaT10aGlzLl9sYXllcnNbZV0saVt0XSYmaVt0XS5hcHBseShpLG4pO3JldHVybiB0aGlzfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLmVhY2hMYXllcih0LmFkZExheWVyLHQpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmVhY2hMYXllcih0LnJlbW92ZUxheWVyLHQpLHRoaXMuX21hcD1udWxsfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRMYXllcih0aGlzKSx0aGlzfSxlYWNoTGF5ZXI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKXQuY2FsbChlLHRoaXMuX2xheWVyc1tpXSk7cmV0dXJuIHRoaXN9LGdldExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXllcnNbdF19LGdldExheWVyczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9sYXllcnMpdC5wdXNoKHRoaXMuX2xheWVyc1tlXSk7cmV0dXJuIHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoInNldFpJbmRleCIsdCl9LGdldExheWVySWQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8uc3RhbXAodCl9fSksby5sYXllckdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXllckdyb3VwKHQpfSxvLkZlYXR1cmVHcm91cD1vLkxheWVyR3JvdXAuZXh0ZW5kKHtpbmNsdWRlczpvLk1peGluLkV2ZW50cyxzdGF0aWNzOntFVkVOVFM6ImNsaWNrIGRibGNsaWNrIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgY29udGV4dG1lbnUgcG9wdXBvcGVuIHBvcHVwY2xvc2UifSxhZGRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNMYXllcih0KT90aGlzOigib24iaW4gdCYmdC5vbihvLkZlYXR1cmVHcm91cC5FVkVOVFMsdGhpcy5fcHJvcGFnYXRlRXZlbnQsdGhpcyksby5MYXllckdyb3VwLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsdCksdGhpcy5fcG9wdXBDb250ZW50JiZ0LmJpbmRQb3B1cCYmdC5iaW5kUG9wdXAodGhpcy5fcG9wdXBDb250ZW50LHRoaXMuX3BvcHVwT3B0aW9ucyksdGhpcy5maXJlKCJsYXllcmFkZCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPyh0IGluIHRoaXMuX2xheWVycyYmKHQ9dGhpcy5fbGF5ZXJzW3RdKSwib2ZmImluIHQmJnQub2ZmKG8uRmVhdHVyZUdyb3VwLkVWRU5UUyx0aGlzLl9wcm9wYWdhdGVFdmVudCx0aGlzKSxvLkxheWVyR3JvdXAucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cENvbnRlbnQmJnRoaXMuaW52b2tlKCJ1bmJpbmRQb3B1cCIpLHRoaXMuZmlyZSgibGF5ZXJyZW1vdmUiLHtsYXllcjp0fSkpOnRoaXN9LGJpbmRQb3B1cDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wb3B1cENvbnRlbnQ9dCx0aGlzLl9wb3B1cE9wdGlvbnM9ZSx0aGlzLmludm9rZSgiYmluZFBvcHVwIix0LGUpfSxvcGVuUG9wdXA6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycyl7dGhpcy5fbGF5ZXJzW2VdLm9wZW5Qb3B1cCh0KTticmVha31yZXR1cm4gdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW52b2tlKCJzZXRTdHlsZSIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiYnJpbmdUb0Zyb250Iil9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52b2tlKCJicmluZ1RvQmFjayIpfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgby5MYXRMbmdCb3VuZHM7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3QuZXh0ZW5kKGUgaW5zdGFuY2VvZiBvLk1hcmtlcj9lLmdldExhdExuZygpOmUuZ2V0Qm91bmRzKCkpfSksdH0sX3Byb3BhZ2F0ZUV2ZW50OmZ1bmN0aW9uKHQpe3Q9by5leHRlbmQoe2xheWVyOnQudGFyZ2V0LHRhcmdldDp0aGlzfSx0KSx0aGlzLmZpcmUodC50eXBlLHQpfX0pLG8uZmVhdHVyZUdyb3VwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAodCl9LG8uUGF0aD1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6W28uTWl4aW4uRXZlbnRzXSxzdGF0aWNzOntDTElQX1BBRERJTkc6ZnVuY3Rpb24oKXt2YXIgZT1vLkJyb3dzZXIubW9iaWxlPzEyODA6MmUzLGk9KGUvTWF0aC5tYXgodC5vdXRlcldpZHRoLHQub3V0ZXJIZWlnaHQpLTEpLzI7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oLjUsaSkpfSgpfSxvcHRpb25zOntzdHJva2U6ITAsY29sb3I6IiMwMDMzZmYiLGRhc2hBcnJheTpudWxsLGxpbmVDYXA6bnVsbCxsaW5lSm9pbjpudWxsLHdlaWdodDo1LG9wYWNpdHk6LjUsZmlsbDohMSxmaWxsQ29sb3I6bnVsbCxmaWxsT3BhY2l0eTouMixjbGlja2FibGU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2luaXRFbGVtZW50cygpLHRoaXMuX2luaXRFdmVudHMoKSksdGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3VwZGF0ZVBhdGgoKSx0aGlzLl9jb250YWluZXImJnRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLmZpcmUoImFkZCIpLHQub24oe3ZpZXdyZXNldDp0aGlzLnByb2plY3RMYXRsbmdzLG1vdmVlbmQ6dGhpcy5fdXBkYXRlUGF0aH0sdGhpcyl9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3QuX3BhdGhSb290LnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5maXJlKCJyZW1vdmUiKSx0aGlzLl9tYXA9bnVsbCxvLkJyb3dzZXIudm1sJiYodGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fc3Ryb2tlPW51bGwsdGhpcy5fZmlsbD1udWxsKSx0Lm9mZih7dmlld3Jlc2V0OnRoaXMucHJvamVjdExhdGxuZ3MsbW92ZWVuZDp0aGlzLl91cGRhdGVQYXRofSx0aGlzKX0scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9jb250YWluZXImJnRoaXMuX3VwZGF0ZVN0eWxlKCksdGhpc30scmVkcmF3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKHRoaXMucHJvamVjdExhdGxuZ3MoKSx0aGlzLl91cGRhdGVQYXRoKCkpLHRoaXN9fSksby5NYXAuaW5jbHVkZSh7X3VwZGF0ZVBhdGhWaWV3cG9ydDpmdW5jdGlvbigpe3ZhciB0PW8uUGF0aC5DTElQX1BBRERJTkcsZT10aGlzLmdldFNpemUoKSxpPW8uRG9tVXRpbC5nZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSxuPWkubXVsdGlwbHlCeSgtMSkuX3N1YnRyYWN0KGUubXVsdGlwbHlCeSh0KS5fcm91bmQoKSkscz1uLmFkZChlLm11bHRpcGx5QnkoMSsyKnQpLl9yb3VuZCgpKTt0aGlzLl9wYXRoVmlld3BvcnQ9bmV3IG8uQm91bmRzKG4scyl9fSksby5QYXRoLlNWR19OUz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG8uQnJvd3Nlci5zdmc9ISghZS5jcmVhdGVFbGVtZW50TlN8fCFlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLCJzdmciKS5jcmVhdGVTVkdSZWN0KSxvLlBhdGg9by5QYXRoLmV4dGVuZCh7c3RhdGljczp7U1ZHOm8uQnJvd3Nlci5zdmd9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXI7cmV0dXJuIGUmJnQubGFzdENoaWxkIT09ZSYmdC5hcHBlbmRDaGlsZChlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5fcGF0aFJvb3QsZT10aGlzLl9jb250YWluZXIsaT10LmZpcnN0Q2hpbGQ7cmV0dXJuIGUmJmkhPT1lJiZ0Lmluc2VydEJlZm9yZShlLGkpLHRoaXN9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt9LF9jcmVhdGVFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnROUyhvLlBhdGguU1ZHX05TLHQpfSxfaW5pdEVsZW1lbnRzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLl9pbml0UGF0aFJvb3QoKSx0aGlzLl9pbml0UGF0aCgpLHRoaXMuX2luaXRTdHlsZSgpfSxfaW5pdFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXI9dGhpcy5fY3JlYXRlRWxlbWVudCgiZyIpLHRoaXMuX3BhdGg9dGhpcy5fY3JlYXRlRWxlbWVudCgicGF0aCIpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl9wYXRoLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9wYXRoKX0sX2luaXRTdHlsZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdHJva2UmJih0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpKSx0aGlzLm9wdGlvbnMuZmlsbCYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSx0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInBvaW50ZXItZXZlbnRzIix0aGlzLm9wdGlvbnMucG9pbnRlckV2ZW50cyksdGhpcy5vcHRpb25zLmNsaWNrYWJsZXx8dGhpcy5vcHRpb25zLnBvaW50ZXJFdmVudHN8fHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSx0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3Ryb2tlPyh0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgic3Ryb2tlIix0aGlzLm9wdGlvbnMuY29sb3IpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utb3BhY2l0eSIsdGhpcy5vcHRpb25zLm9wYWNpdHkpLHRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHRoaXMub3B0aW9ucy53ZWlnaHQpLHRoaXMub3B0aW9ucy5kYXNoQXJyYXk/dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1kYXNoYXJyYXkiLHRoaXMub3B0aW9ucy5kYXNoQXJyYXkpOnRoaXMuX3BhdGgucmVtb3ZlQXR0cmlidXRlKCJzdHJva2UtZGFzaGFycmF5IiksdGhpcy5vcHRpb25zLmxpbmVDYXAmJnRoaXMuX3BhdGguc2V0QXR0cmlidXRlKCJzdHJva2UtbGluZWNhcCIsdGhpcy5vcHRpb25zLmxpbmVDYXApLHRoaXMub3B0aW9ucy5saW5lSm9pbiYmdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZS1saW5lam9pbiIsdGhpcy5vcHRpb25zLmxpbmVKb2luKSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsIm5vbmUiKSx0aGlzLm9wdGlvbnMuZmlsbD8odGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLHRoaXMub3B0aW9ucy5maWxsQ29sb3J8fHRoaXMub3B0aW9ucy5jb2xvciksdGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwtb3BhY2l0eSIsdGhpcy5vcHRpb25zLmZpbGxPcGFjaXR5KSk6dGhpcy5fcGF0aC5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIil9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQYXRoU3RyaW5nKCk7dHx8KHQ9Ik0wIDAiKSx0aGlzLl9wYXRoLnNldEF0dHJpYnV0ZSgiZCIsdCl9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7KG8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sKSYmby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX3BhdGgsImxlYWZsZXQtY2xpY2thYmxlIiksby5Eb21FdmVudC5vbih0aGlzLl9jb250YWluZXIsImNsaWNrIix0aGlzLl9vbk1vdXNlQ2xpY2ssdGhpcyk7Zm9yKHZhciB0PVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsIm1vdXNlbW92ZSIsImNvbnRleHRtZW51Il0sZT0wO2U8dC5sZW5ndGg7ZSsrKW8uRG9tRXZlbnQub24odGhpcy5fY29udGFpbmVyLHRbZV0sdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcyl9fSxfb25Nb3VzZUNsaWNrOmZ1bmN0aW9uKHQpeyF0Ll9zaW11bGF0ZWQmJnRoaXMuX21hcC5kcmFnZ2luZyYmdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuX2ZpcmVNb3VzZUV2ZW50KHQpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7aWYodGhpcy5fbWFwJiZ0aGlzLmhhc0V2ZW50TGlzdGVuZXJzKHQudHlwZSkpe3ZhciBlPXRoaXMuX21hcCxpPWUubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCksbj1lLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGkpLHM9ZS5sYXllclBvaW50VG9MYXRMbmcobik7dGhpcy5maXJlKHQudHlwZSx7bGF0bG5nOnMsbGF5ZXJQb2ludDpuLGNvbnRhaW5lclBvaW50Omksb3JpZ2luYWxFdmVudDp0fSksImNvbnRleHRtZW51Ij09PXQudHlwZSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSwibW91c2Vtb3ZlIiE9PXQudHlwZSYmby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCl9fX0pLG8uTWFwLmluY2x1ZGUoe19pbml0UGF0aFJvb3Q6ZnVuY3Rpb24oKXt0aGlzLl9wYXRoUm9vdHx8KHRoaXMuX3BhdGhSb290PW8uUGF0aC5wcm90b3R5cGUuX2NyZWF0ZUVsZW1lbnQoInN2ZyIpLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKHRoaXMuX3BhdGhSb290KSx0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbiYmby5Ccm93c2VyLmFueTNkPyhvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1hbmltYXRlZCIpLAp0aGlzLm9uKHt6b29tYW5pbTp0aGlzLl9hbmltYXRlUGF0aFpvb20sem9vbWVuZDp0aGlzLl9lbmRQYXRoWm9vbX0pKTpvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fcGF0aFJvb3QsImxlYWZsZXQtem9vbS1oaWRlIiksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlU3ZnVmlld3BvcnQpLHRoaXMuX3VwZGF0ZVN2Z1ZpZXdwb3J0KCkpfSxfYW5pbWF0ZVBhdGhab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Wm9vbVNjYWxlKHQuem9vbSksaT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodC5jZW50ZXIpLl9tdWx0aXBseUJ5KC1lKS5fYWRkKHRoaXMuX3BhdGhWaWV3cG9ydC5taW4pO3RoaXMuX3BhdGhSb290LnN0eWxlW28uRG9tVXRpbC5UUkFOU0ZPUk1dPW8uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcoaSkrIiBzY2FsZSgiK2UrIikgIix0aGlzLl9wYXRoWm9vbWluZz0hMH0sX2VuZFBhdGhab29tOmZ1bmN0aW9uKCl7dGhpcy5fcGF0aFpvb21pbmc9ITF9LF91cGRhdGVTdmdWaWV3cG9ydDpmdW5jdGlvbigpe2lmKCF0aGlzLl9wYXRoWm9vbWluZyl7dGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KCk7dmFyIHQ9dGhpcy5fcGF0aFZpZXdwb3J0LGU9dC5taW4saT10Lm1heCxuPWkueC1lLngscz1pLnktZS55LGE9dGhpcy5fcGF0aFJvb3Qscj10aGlzLl9wYW5lcy5vdmVybGF5UGFuZTtvLkJyb3dzZXIubW9iaWxlV2Via2l0JiZyLnJlbW92ZUNoaWxkKGEpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbihhLGUpLGEuc2V0QXR0cmlidXRlKCJ3aWR0aCIsbiksYS5zZXRBdHRyaWJ1dGUoImhlaWdodCIscyksYS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtlLngsZS55LG4sc10uam9pbigiICIpKSxvLkJyb3dzZXIubW9iaWxlV2Via2l0JiZyLmFwcGVuZENoaWxkKGEpfX19KSxvLlBhdGguaW5jbHVkZSh7YmluZFBvcHVwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvLlBvcHVwP3RoaXMuX3BvcHVwPXQ6KCghdGhpcy5fcG9wdXB8fGUpJiYodGhpcy5fcG9wdXA9bmV3IG8uUG9wdXAoZSx0aGlzKSksdGhpcy5fcG9wdXAuc2V0Q29udGVudCh0KSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkfHwodGhpcy5vbigiY2xpY2siLHRoaXMuX29wZW5Qb3B1cCx0aGlzKS5vbigicmVtb3ZlIix0aGlzLmNsb3NlUG9wdXAsdGhpcyksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSEwKSx0aGlzfSx1bmJpbmRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwPW51bGwsdGhpcy5vZmYoImNsaWNrIix0aGlzLl9vcGVuUG9wdXApLm9mZigicmVtb3ZlIix0aGlzLmNsb3NlUG9wdXApLHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZD0hMSksdGhpc30sb3BlblBvcHVwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wb3B1cCYmKHQ9dHx8dGhpcy5fbGF0bG5nfHx0aGlzLl9sYXRsbmdzW01hdGguZmxvb3IodGhpcy5fbGF0bG5ncy5sZW5ndGgvMildLHRoaXMuX29wZW5Qb3B1cCh7bGF0bG5nOnR9KSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2Nsb3NlKCksdGhpc30sX29wZW5Qb3B1cDpmdW5jdGlvbih0KXt0aGlzLl9wb3B1cC5zZXRMYXRMbmcodC5sYXRsbmcpLHRoaXMuX21hcC5vcGVuUG9wdXAodGhpcy5fcG9wdXApfX0pLG8uQnJvd3Nlci52bWw9IW8uQnJvd3Nlci5zdmcmJmZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5pbm5lckhUTUw9Jzx2OnNoYXBlIGFkaj0iMSIvPic7dmFyIGk9dC5maXJzdENoaWxkO3JldHVybiBpLnN0eWxlLmJlaGF2aW9yPSJ1cmwoI2RlZmF1bHQjVk1MKSIsaSYmIm9iamVjdCI9PXR5cGVvZiBpLmFkan1jYXRjaChuKXtyZXR1cm4hMX19KCksby5QYXRoPW8uQnJvd3Nlci5zdmd8fCFvLkJyb3dzZXIudm1sP28uUGF0aDpvLlBhdGguZXh0ZW5kKHtzdGF0aWNzOntWTUw6ITAsQ0xJUF9QQURESU5HOi4wMn0sX2NyZWF0ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGUubmFtZXNwYWNlcy5hZGQoImx2bWwiLCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIpLGZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoIjxsdm1sOiIrdCsnIGNsYXNzPSJsdm1sIj4nKX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmNyZWF0ZUVsZW1lbnQoIjwiK3QrJyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWwiIGNsYXNzPSJsdm1sIj4nKX19fSgpLF9pbml0UGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcj10aGlzLl9jcmVhdGVFbGVtZW50KCJzaGFwZSIpO28uRG9tVXRpbC5hZGRDbGFzcyh0LCJsZWFmbGV0LXZtbC1zaGFwZSIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWU/IiAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWU6IiIpKSx0aGlzLm9wdGlvbnMuY2xpY2thYmxlJiZvLkRvbVV0aWwuYWRkQ2xhc3ModCwibGVhZmxldC1jbGlja2FibGUiKSx0LmNvb3Jkc2l6ZT0iMSAxIix0aGlzLl9wYXRoPXRoaXMuX2NyZWF0ZUVsZW1lbnQoInBhdGgiKSx0LmFwcGVuZENoaWxkKHRoaXMuX3BhdGgpLHRoaXMuX21hcC5fcGF0aFJvb3QuYXBwZW5kQ2hpbGQodCl9LF9pbml0U3R5bGU6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTdHlsZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdHJva2UsZT10aGlzLl9maWxsLGk9dGhpcy5vcHRpb25zLG49dGhpcy5fY29udGFpbmVyO24uc3Ryb2tlZD1pLnN0cm9rZSxuLmZpbGxlZD1pLmZpbGwsaS5zdHJva2U/KHR8fCh0PXRoaXMuX3N0cm9rZT10aGlzLl9jcmVhdGVFbGVtZW50KCJzdHJva2UiKSx0LmVuZGNhcD0icm91bmQiLG4uYXBwZW5kQ2hpbGQodCkpLHQud2VpZ2h0PWkud2VpZ2h0KyJweCIsdC5jb2xvcj1pLmNvbG9yLHQub3BhY2l0eT1pLm9wYWNpdHksaS5kYXNoQXJyYXk/dC5kYXNoU3R5bGU9by5VdGlsLmlzQXJyYXkoaS5kYXNoQXJyYXkpP2kuZGFzaEFycmF5LmpvaW4oIiAiKTppLmRhc2hBcnJheS5yZXBsYWNlKC8oICosICopL2csIiAiKTp0LmRhc2hTdHlsZT0iIixpLmxpbmVDYXAmJih0LmVuZGNhcD1pLmxpbmVDYXAucmVwbGFjZSgiYnV0dCIsImZsYXQiKSksaS5saW5lSm9pbiYmKHQuam9pbnN0eWxlPWkubGluZUpvaW4pKTp0JiYobi5yZW1vdmVDaGlsZCh0KSx0aGlzLl9zdHJva2U9bnVsbCksaS5maWxsPyhlfHwoZT10aGlzLl9maWxsPXRoaXMuX2NyZWF0ZUVsZW1lbnQoImZpbGwiKSxuLmFwcGVuZENoaWxkKGUpKSxlLmNvbG9yPWkuZmlsbENvbG9yfHxpLmNvbG9yLGUub3BhY2l0eT1pLmZpbGxPcGFjaXR5KTplJiYobi5yZW1vdmVDaGlsZChlKSx0aGlzLl9maWxsPW51bGwpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5zdHlsZTt0LmRpc3BsYXk9Im5vbmUiLHRoaXMuX3BhdGgudj10aGlzLmdldFBhdGhTdHJpbmcoKSsiICIsdC5kaXNwbGF5PSIifX0pLG8uTWFwLmluY2x1ZGUoby5Ccm93c2VyLnN2Z3x8IW8uQnJvd3Nlci52bWw/e306e19pbml0UGF0aFJvb3Q6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFJvb3Qpe3ZhciB0PXRoaXMuX3BhdGhSb290PWUuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImxlYWZsZXQtdm1sLWNvbnRhaW5lciIsdGhpcy5fcGFuZXMub3ZlcmxheVBhbmUuYXBwZW5kQ2hpbGQodCksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlUGF0aFZpZXdwb3J0KSx0aGlzLl91cGRhdGVQYXRoVmlld3BvcnQoKX19fSksby5Ccm93c2VyLmNhbnZhcz1mdW5jdGlvbigpe3JldHVybiEhZS5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0fSgpLG8uUGF0aD1vLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP28uUGF0aDpvLlBhdGguZXh0ZW5kKHtzdGF0aWNzOntDQU5WQVM6ITAsU1ZHOiExfSxyZWRyYXc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYodGhpcy5wcm9qZWN0TGF0bG5ncygpLHRoaXMuX3JlcXVlc3RVcGRhdGUoKSksdGhpc30sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIG8uc2V0T3B0aW9ucyh0aGlzLHQpLHRoaXMuX2FkZExpbmVEYXNoKCksdGhpcy5fbWFwJiYodGhpcy5fdXBkYXRlU3R5bGUoKSx0aGlzLl9yZXF1ZXN0VXBkYXRlKCkpLHRoaXN9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJ2aWV3cmVzZXQiLHRoaXMucHJvamVjdExhdGxuZ3MsdGhpcykub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVQYXRoLHRoaXMpLHRoaXMub3B0aW9ucy5jbGlja2FibGUmJnRoaXMuX29uQ2xpY2shPT1pJiYodGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xpY2ssdGhpcyksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKSksdGhpcy5fcmVxdWVzdFVwZGF0ZSgpLHRoaXMuZmlyZSgicmVtb3ZlIiksdGhpcy5fbWFwPW51bGx9LF9yZXF1ZXN0VXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYhby5QYXRoLl91cGRhdGVSZXF1ZXN0JiYoby5QYXRoLl91cGRhdGVSZXF1ZXN0PW8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2ZpcmVNYXBNb3ZlRW5kLHRoaXMuX21hcCkpfSxfZmlyZU1hcE1vdmVFbmQ6ZnVuY3Rpb24oKXtvLlBhdGguX3VwZGF0ZVJlcXVlc3Q9bnVsbCx0aGlzLmZpcmUoIm1vdmVlbmQiKX0sX2luaXRFbGVtZW50czpmdW5jdGlvbigpe3RoaXMuX21hcC5faW5pdFBhdGhSb290KCksdGhpcy5fY3R4PXRoaXMuX21hcC5fY2FudmFzQ3R4fSxfYWRkTGluZURhc2g6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZGFzaEFycmF5JiYodGhpcy5vcHRpb25zLl9kYXNoQXJyYXk9dGhpcy5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgiLCIpLm1hcChOdW1iZXIpKX0sX3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3Quc3Ryb2tlJiYodGhpcy5fY3R4LmxpbmVXaWR0aD10LndlaWdodCx0aGlzLl9jdHguc3Ryb2tlU3R5bGU9dC5jb2xvciksdC5maWxsJiYodGhpcy5fY3R4LmZpbGxTdHlsZT10LmZpbGxDb2xvcnx8dC5jb2xvciksdC5saW5lQ2FwJiYodGhpcy5fY3R4LmxpbmVDYXA9dC5saW5lQ2FwKSx0LmxpbmVKb2luJiYodGhpcy5fY3R4LmxpbmVKb2luPXQubGluZUpvaW4pLHRoaXMuX2FkZExpbmVEYXNoKCl9LF9kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0LGUsaSxuLHMsYTtmb3IodGhpcy5fY3R4LmJlZ2luUGF0aCgpLHRoaXMuX2N0eC5zZXRMaW5lRGFzaCh0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5fZGFzaEFycmF5fHxbXSksdD0wLGk9dGhpcy5fcGFydHMubGVuZ3RoO2k+dDt0Kyspe2ZvcihlPTAsbj10aGlzLl9wYXJ0c1t0XS5sZW5ndGg7bj5lO2UrKylzPXRoaXMuX3BhcnRzW3RdW2VdLGE9KDA9PT1lPyJtb3ZlIjoibGluZSIpKyJUbyIsdGhpcy5fY3R4W2FdKHMueCxzLnkpO3RoaXMgaW5zdGFuY2VvZiBvLlBvbHlnb24mJnRoaXMuX2N0eC5jbG9zZVBhdGgoKX19LF9jaGVja0lmRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fcGFydHMubGVuZ3RofSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe2lmKCF0aGlzLl9jaGVja0lmRW1wdHkoKSl7dmFyIHQ9dGhpcy5fY3R4LGU9dGhpcy5vcHRpb25zO3RoaXMuX2RyYXdQYXRoKCksdC5zYXZlKCksdGhpcy5fdXBkYXRlU3R5bGUoKSxlLmZpbGwmJih0Lmdsb2JhbEFscGhhPWUuZmlsbE9wYWNpdHksdC5maWxsKGUuZmlsbFJ1bGV8fCJldmVub2RkIikpLGUuc3Ryb2tlJiYodC5nbG9iYWxBbHBoYT1lLm9wYWNpdHksdC5zdHJva2UoKSksdC5yZXN0b3JlKCl9fSxfaW5pdEV2ZW50czpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5jbGlja2FibGUmJih0aGlzLl9tYXAub24oIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcyksdGhpcy5fbWFwLm9uKCJjbGljayBkYmxjbGljayBjb250ZXh0bWVudSIsdGhpcy5fZmlyZU1vdXNlRXZlbnQsdGhpcykpfSxfZmlyZU1vdXNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpJiZ0aGlzLmZpcmUodC50eXBlLHQpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYhdGhpcy5fbWFwLl9hbmltYXRpbmdab29tJiYodGhpcy5fY29udGFpbnNQb2ludCh0LmxheWVyUG9pbnQpPyh0aGlzLl9jdHguY2FudmFzLnN0eWxlLmN1cnNvcj0icG9pbnRlciIsdGhpcy5fbW91c2VJbnNpZGU9ITAsdGhpcy5maXJlKCJtb3VzZW92ZXIiLHQpKTp0aGlzLl9tb3VzZUluc2lkZSYmKHRoaXMuX2N0eC5jYW52YXMuc3R5bGUuY3Vyc29yPSIiLHRoaXMuX21vdXNlSW5zaWRlPSExLHRoaXMuZmlyZSgibW91c2VvdXQiLHQpKSl9fSksby5NYXAuaW5jbHVkZShvLlBhdGguU1ZHJiYhdC5MX1BSRUZFUl9DQU5WQVN8fCFvLkJyb3dzZXIuY2FudmFzP3t9OntfaW5pdFBhdGhSb290OmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLl9wYXRoUm9vdDtpfHwoaT10aGlzLl9wYXRoUm9vdD1lLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGkuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0PXRoaXMuX2NhbnZhc0N0eD1pLmdldENvbnRleHQoIjJkIiksdC5saW5lQ2FwPSJyb3VuZCIsdC5saW5lSm9pbj0icm91bmQiLHRoaXMuX3BhbmVzLm92ZXJsYXlQYW5lLmFwcGVuZENoaWxkKGkpLHRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiYodGhpcy5fcGF0aFJvb3QuY2xhc3NOYW1lPSJsZWFmbGV0LXpvb20tYW5pbWF0ZWQiLHRoaXMub24oInpvb21hbmltIix0aGlzLl9hbmltYXRlUGF0aFpvb20pLHRoaXMub24oInpvb21lbmQiLHRoaXMuX2VuZFBhdGhab29tKSksdGhpcy5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlQ2FudmFzVmlld3BvcnQpLHRoaXMuX3VwZGF0ZUNhbnZhc1ZpZXdwb3J0KCkpfSxfdXBkYXRlQ2FudmFzVmlld3BvcnQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fcGF0aFpvb21pbmcpe3RoaXMuX3VwZGF0ZVBhdGhWaWV3cG9ydCgpO3ZhciB0PXRoaXMuX3BhdGhWaWV3cG9ydCxlPXQubWluLGk9dC5tYXguc3VidHJhY3QoZSksbj10aGlzLl9wYXRoUm9vdDtvLkRvbVV0aWwuc2V0UG9zaXRpb24obixlKSxuLndpZHRoPWkueCxuLmhlaWdodD1pLnksbi5nZXRDb250ZXh0KCIyZCIpLnRyYW5zbGF0ZSgtZS54LC1lLnkpfX19KSxvLkxpbmVVdGlsPXtzaW1wbGlmeTpmdW5jdGlvbih0LGUpe2lmKCFlfHwhdC5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt2YXIgaT1lKmU7cmV0dXJuIHQ9dGhpcy5fcmVkdWNlUG9pbnRzKHQsaSksdD10aGlzLl9zaW1wbGlmeURQKHQsaSl9LHBvaW50VG9TZWdtZW50RGlzdGFuY2U6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBNYXRoLnNxcnQodGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGksITApKX0sY2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpfSxfc2ltcGxpZnlEUDpmdW5jdGlvbih0LGUpe3ZhciBuPXQubGVuZ3RoLG89dHlwZW9mIFVpbnQ4QXJyYXkhPWkrIiI/VWludDhBcnJheTpBcnJheSxzPW5ldyBvKG4pO3NbMF09c1tuLTFdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxzLGUsMCxuLTEpO3ZhciBhLHI9W107Zm9yKGE9MDtuPmE7YSsrKXNbYV0mJnIucHVzaCh0W2FdKTtyZXR1cm4gcn0sX3NpbXBsaWZ5RFBTdGVwOmZ1bmN0aW9uKHQsZSxpLG4sbyl7dmFyIHMsYSxyLGg9MDtmb3IoYT1uKzE7by0xPj1hO2ErKylyPXRoaXMuX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHRbYV0sdFtuXSx0W29dLCEwKSxyPmgmJihzPWEsaD1yKTtoPmkmJihlW3NdPTEsdGhpcy5fc2ltcGxpZnlEUFN0ZXAodCxlLGksbixzKSx0aGlzLl9zaW1wbGlmeURQU3RlcCh0LGUsaSxzLG8pKX0sX3JlZHVjZVBvaW50czpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bdFswXV0sbj0xLG89MCxzPXQubGVuZ3RoO3M+bjtuKyspdGhpcy5fc3FEaXN0KHRbbl0sdFtvXSk+ZSYmKGkucHVzaCh0W25dKSxvPW4pO3JldHVybiBzLTE+byYmaS5wdXNoKHRbcy0xXSksaX0sY2xpcFNlZ21lbnQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG8scyxhLHI9bj90aGlzLl9sYXN0Q29kZTp0aGlzLl9nZXRCaXRDb2RlKHQsaSksaD10aGlzLl9nZXRCaXRDb2RlKGUsaSk7Zm9yKHRoaXMuX2xhc3RDb2RlPWg7Oyl7aWYoIShyfGgpKXJldHVyblt0LGVdO2lmKHImaClyZXR1cm4hMTtvPXJ8fGgscz10aGlzLl9nZXRFZGdlSW50ZXJzZWN0aW9uKHQsZSxvLGkpLGE9dGhpcy5fZ2V0Qml0Q29kZShzLGkpLG89PT1yPyh0PXMscj1hKTooZT1zLGg9YSl9fSxfZ2V0RWRnZUludGVyc2VjdGlvbjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcz1lLngtdC54LGE9ZS55LXQueSxyPW4ubWluLGg9bi5tYXg7cmV0dXJuIDgmaT9uZXcgby5Qb2ludCh0LngrcyooaC55LXQueSkvYSxoLnkpOjQmaT9uZXcgby5Qb2ludCh0Lngrcyooci55LXQueSkvYSxyLnkpOjImaT9uZXcgby5Qb2ludChoLngsdC55K2EqKGgueC10LngpL3MpOjEmaT9uZXcgby5Qb2ludChyLngsdC55K2EqKHIueC10LngpL3MpOnZvaWQgMH0sX2dldEJpdENvZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT0wO3JldHVybiB0Lng8ZS5taW4ueD9pfD0xOnQueD5lLm1heC54JiYoaXw9MiksdC55PGUubWluLnk/aXw9NDp0Lnk+ZS5tYXgueSYmKGl8PTgpLGl9LF9zcURpc3Q6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLngtdC54LG49ZS55LXQueTtyZXR1cm4gaSppK24qbn0sX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGE9ZS54LHI9ZS55LGg9aS54LWEsbD1pLnktcix1PWgqaCtsKmw7cmV0dXJuIHU+MCYmKHM9KCh0LngtYSkqaCsodC55LXIpKmwpL3Uscz4xPyhhPWkueCxyPWkueSk6cz4wJiYoYSs9aCpzLHIrPWwqcykpLGg9dC54LWEsbD10LnktcixuP2gqaCtsKmw6bmV3IG8uUG9pbnQoYSxyKX19LG8uUG9seWxpbmU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUGF0aC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsZSksdGhpcy5fbGF0bG5ncz10aGlzLl9jb252ZXJ0TGF0TG5ncyh0KX0sb3B0aW9uczp7c21vb3RoRmFjdG9yOjEsbm9DbGlwOiExfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe3RoaXMuX29yaWdpbmFsUG9pbnRzPVtdO2Zvcih2YXIgdD0wLGU9dGhpcy5fbGF0bG5ncy5sZW5ndGg7ZT50O3QrKyl0aGlzLl9vcmlnaW5hbFBvaW50c1t0XT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZ3NbdF0pfSxnZXRQYXRoU3RyaW5nOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9wYXJ0cy5sZW5ndGgsaT0iIjtlPnQ7dCsrKWkrPXRoaXMuX2dldFBhdGhQYXJ0U3RyKHRoaXMuX3BhcnRzW3RdKTtyZXR1cm4gaX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmdzPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGFkZExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5ncy5wdXNoKG8ubGF0TG5nKHQpKSx0aGlzLnJlZHJhdygpfSxzcGxpY2VMYXRMbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9W10uc3BsaWNlLmFwcGx5KHRoaXMuX2xhdGxuZ3MsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5fY29udmVydExhdExuZ3ModGhpcy5fbGF0bG5ncywhMCksdGhpcy5yZWRyYXcoKSx0fSxjbG9zZXN0TGF5ZXJQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUsaSxuPTEvMCxzPXRoaXMuX3BhcnRzLGE9bnVsbCxyPTAsaD1zLmxlbmd0aDtoPnI7cisrKWZvcih2YXIgbD1zW3JdLHU9MSxjPWwubGVuZ3RoO2M+dTt1Kyspe2U9bFt1LTFdLGk9bFt1XTt2YXIgZD1vLkxpbmVVdGlsLl9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCh0LGUsaSwhMCk7bj5kJiYobj1kLGE9by5MaW5lVXRpbC5fc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQodCxlLGkpKX1yZXR1cm4gYSYmKGEuZGlzdGFuY2U9TWF0aC5zcXJ0KG4pKSxhfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG8uTGF0TG5nQm91bmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPWU/dDpbXTtmb3IoaT0wLG49dC5sZW5ndGg7bj5pO2krKyl7aWYoby5VdGlsLmlzQXJyYXkodFtpXSkmJiJudW1iZXIiIT10eXBlb2YgdFtpXVswXSlyZXR1cm47c1tpXT1vLmxhdExuZyh0W2ldKX1yZXR1cm4gc30sX2luaXRFdmVudHM6ZnVuY3Rpb24oKXtvLlBhdGgucHJvdG90eXBlLl9pbml0RXZlbnRzLmNhbGwodGhpcyl9LF9nZXRQYXRoUGFydFN0cjpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT1vLlBhdGguVk1MLG49MCxzPXQubGVuZ3RoLGE9IiI7cz5uO24rKyllPXRbbl0saSYmZS5fcm91bmQoKSxhKz0obj8iTCI6Ik0iKStlLngrIiAiK2UueTtyZXR1cm4gYX0sX2NsaXBQb2ludHM6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9vcmlnaW5hbFBvaW50cyxzPW4ubGVuZ3RoO2lmKHRoaXMub3B0aW9ucy5ub0NsaXApcmV0dXJuIHZvaWQodGhpcy5fcGFydHM9W25dKTt0aGlzLl9wYXJ0cz1bXTt2YXIgYT10aGlzLl9wYXJ0cyxyPXRoaXMuX21hcC5fcGF0aFZpZXdwb3J0LGg9by5MaW5lVXRpbDtmb3IodD0wLGU9MDtzLTE+dDt0KyspaT1oLmNsaXBTZWdtZW50KG5bdF0sblt0KzFdLHIsdCksaSYmKGFbZV09YVtlXXx8W10sYVtlXS5wdXNoKGlbMF0pLChpWzFdIT09blt0KzFdfHx0PT09cy0yKSYmKGFbZV0ucHVzaChpWzFdKSxlKyspKX0sX3NpbXBsaWZ5UG9pbnRzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX3BhcnRzLGU9by5MaW5lVXRpbCxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKXRbaV09ZS5zaW1wbGlmeSh0W2ldLHRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3IpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3RoaXMuX21hcCYmKHRoaXMuX2NsaXBQb2ludHMoKSx0aGlzLl9zaW1wbGlmeVBvaW50cygpLG8uUGF0aC5wcm90b3R5cGUuX3VwZGF0ZVBhdGguY2FsbCh0aGlzKSl9fSksby5wb2x5bGluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5Qb2x5bGluZSh0LGUpfSxvLlBvbHlVdGlsPXt9LG8uUG9seVV0aWwuY2xpcFBvbHlnb249ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1LGMsZD1bMSw0LDIsOF0scD1vLkxpbmVVdGlsO2ZvcihuPTAsbD10Lmxlbmd0aDtsPm47bisrKXRbbl0uX2NvZGU9cC5fZ2V0Qml0Q29kZSh0W25dLGUpO2ZvcihhPTA7ND5hO2ErKyl7Zm9yKHU9ZFthXSxpPVtdLG49MCxsPXQubGVuZ3RoLHM9bC0xO2w+bjtzPW4rKylyPXRbbl0saD10W3NdLHIuX2NvZGUmdT9oLl9jb2RlJnV8fChjPXAuX2dldEVkZ2VJbnRlcnNlY3Rpb24oaCxyLHUsZSksYy5fY29kZT1wLl9nZXRCaXRDb2RlKGMsZSksaS5wdXNoKGMpKTooaC5fY29kZSZ1JiYoYz1wLl9nZXRFZGdlSW50ZXJzZWN0aW9uKGgscix1LGUpLGMuX2NvZGU9cC5fZ2V0Qml0Q29kZShjLGUpLGkucHVzaChjKSksaS5wdXNoKHIpKTt0PWl9cmV0dXJuIHR9LG8uUG9seWdvbj1vLlBvbHlsaW5lLmV4dGVuZCh7b3B0aW9uczp7ZmlsbDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe28uUG9seWxpbmUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsZSksdGhpcy5faW5pdFdpdGhIb2xlcyh0KX0sX2luaXRXaXRoSG9sZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuO2lmKHQmJm8uVXRpbC5pc0FycmF5KHRbMF0pJiYibnVtYmVyIiE9dHlwZW9mIHRbMF1bMF0pZm9yKHRoaXMuX2xhdGxuZ3M9dGhpcy5fY29udmVydExhdExuZ3ModFswXSksdGhpcy5faG9sZXM9dC5zbGljZSgxKSxlPTAsaT10aGlzLl9ob2xlcy5sZW5ndGg7aT5lO2UrKyluPXRoaXMuX2hvbGVzW2VdPXRoaXMuX2NvbnZlcnRMYXRMbmdzKHRoaXMuX2hvbGVzW2VdKSxuWzBdLmVxdWFscyhuW24ubGVuZ3RoLTFdKSYmbi5wb3AoKTt0PXRoaXMuX2xhdGxuZ3MsdC5sZW5ndGg+PTImJnRbMF0uZXF1YWxzKHRbdC5sZW5ndGgtMV0pJiZ0LnBvcCgpfSxwcm9qZWN0TGF0bG5nczpmdW5jdGlvbigpe2lmKG8uUG9seWxpbmUucHJvdG90eXBlLnByb2plY3RMYXRsbmdzLmNhbGwodGhpcyksdGhpcy5faG9sZVBvaW50cz1bXSx0aGlzLl9ob2xlcyl7dmFyIHQsZSxpLG47Zm9yKHQ9MCxpPXRoaXMuX2hvbGVzLmxlbmd0aDtpPnQ7dCsrKWZvcih0aGlzLl9ob2xlUG9pbnRzW3RdPVtdLGU9MCxuPXRoaXMuX2hvbGVzW3RdLmxlbmd0aDtuPmU7ZSsrKXRoaXMuX2hvbGVQb2ludHNbdF1bZV09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ob2xlc1t0XVtlXSl9fSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZvLlV0aWwuaXNBcnJheSh0WzBdKSYmIm51bWJlciIhPXR5cGVvZiB0WzBdWzBdPyh0aGlzLl9pbml0V2l0aEhvbGVzKHQpLHRoaXMucmVkcmF3KCkpOm8uUG9seWxpbmUucHJvdG90eXBlLnNldExhdExuZ3MuY2FsbCh0aGlzLHQpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX29yaWdpbmFsUG9pbnRzLGU9W107aWYodGhpcy5fcGFydHM9W3RdLmNvbmNhdCh0aGlzLl9ob2xlUG9pbnRzKSwhdGhpcy5vcHRpb25zLm5vQ2xpcCl7Zm9yKHZhciBpPTAsbj10aGlzLl9wYXJ0cy5sZW5ndGg7bj5pO2krKyl7dmFyIHM9by5Qb2x5VXRpbC5jbGlwUG9seWdvbih0aGlzLl9wYXJ0c1tpXSx0aGlzLl9tYXAuX3BhdGhWaWV3cG9ydCk7cy5sZW5ndGgmJmUucHVzaChzKX10aGlzLl9wYXJ0cz1lfX0sX2dldFBhdGhQYXJ0U3RyOmZ1bmN0aW9uKHQpe3ZhciBlPW8uUG9seWxpbmUucHJvdG90eXBlLl9nZXRQYXRoUGFydFN0ci5jYWxsKHRoaXMsdCk7cmV0dXJuIGUrKG8uQnJvd3Nlci5zdmc/InoiOiJ4Iil9fSksby5wb2x5Z29uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLlBvbHlnb24odCxlKX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBvLkZlYXR1cmVHcm91cC5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9sYXllcnM9e30sdGhpcy5fb3B0aW9ucz1lLHRoaXMuc2V0TGF0TG5ncyh0KX0sc2V0TGF0TG5nczpmdW5jdGlvbihlKXt2YXIgaT0wLG49ZS5sZW5ndGg7Zm9yKHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe24+aT90LnNldExhdExuZ3MoZVtpKytdKTp0aGlzLnJlbW92ZUxheWVyKHQpfSx0aGlzKTtuPmk7KXRoaXMuYWRkTGF5ZXIobmV3IHQoZVtpKytdLHRoaXMuX29wdGlvbnMpKTtyZXR1cm4gdGhpc30sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbihlKXt0LnB1c2goZS5nZXRMYXRMbmdzKCkpfSksdH19KX1vLk11bHRpUG9seWxpbmU9dChvLlBvbHlsaW5lKSxvLk11bHRpUG9seWdvbj10KG8uUG9seWdvbiksby5tdWx0aVBvbHlsaW5lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLk11bHRpUG9seWxpbmUodCxlKX0sby5tdWx0aVBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG8uTXVsdGlQb2x5Z29uKHQsZSl9fSgpLG8uUmVjdGFuZ2xlPW8uUG9seWdvbi5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtvLlBvbHlnb24ucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSxlKX0sc2V0Qm91bmRzOmZ1bmN0aW9uKHQpe3RoaXMuc2V0TGF0TG5ncyh0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCkpfSxfYm91bmRzVG9MYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0PW8ubGF0TG5nQm91bmRzKHQpLFt0LmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KSxvLnJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5SZWN0YW5nbGUodCxlKX0sby5DaXJjbGU9by5QYXRoLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7aWYoby5QYXRoLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyxpKSxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkNpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTiIpO3RoaXMuX2xhdGxuZz1vLmxhdExuZyh0KSx0aGlzLl9tUmFkaXVzPWV9LG9wdGlvbnM6e2ZpbGw6ITB9LHNldExhdExuZzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF0bG5nPW8ubGF0TG5nKHQpLHRoaXMucmVkcmF3KCl9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbVJhZGl1cz10LHRoaXMucmVkcmF3KCl9LHByb2plY3RMYXRsbmdzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZ2V0TG5nUmFkaXVzKCksZT10aGlzLl9sYXRsbmcsaT10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KFtlLmxhdCxlLmxuZy10XSk7dGhpcy5fcG9pbnQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChlKSx0aGlzLl9yYWRpdXM9TWF0aC5tYXgodGhpcy5fcG9pbnQueC1pLngsMSl9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldExuZ1JhZGl1cygpLGU9dGhpcy5fbVJhZGl1cy80MDA3NTAxNyozNjAsaT10aGlzLl9sYXRsbmc7cmV0dXJuIG5ldyBvLkxhdExuZ0JvdW5kcyhbaS5sYXQtZSxpLmxuZy10XSxbaS5sYXQrZSxpLmxuZyt0XSl9LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LGdldFBhdGhTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb2ludCxlPXRoaXMuX3JhZGl1cztyZXR1cm4gdGhpcy5fY2hlY2tJZkVtcHR5KCk/IiI6by5Ccm93c2VyLnN2Zz8iTSIrdC54KyIsIisodC55LWUpKyJBIitlKyIsIitlKyIsMCwxLDEsIisodC54LS4xKSsiLCIrKHQueS1lKSsiIHoiOih0Ll9yb3VuZCgpLGU9TWF0aC5yb3VuZChlKSwiQUwgIit0LngrIiwiK3QueSsiICIrZSsiLCIrZSsiIDAsMjM1OTI2MDAiKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LF9nZXRMYXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbVJhZGl1cy80MDA3NTAxNyozNjB9LF9nZXRMbmdSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0TGF0UmFkaXVzKCkvTWF0aC5jb3Moby5MYXRMbmcuREVHX1RPX1JBRCp0aGlzLl9sYXRsbmcubGF0KX0sX2NoZWNrSWZFbXB0eTpmdW5jdGlvbigpe2lmKCF0aGlzLl9tYXApcmV0dXJuITE7dmFyIHQ9dGhpcy5fbWFwLl9wYXRoVmlld3BvcnQsZT10aGlzLl9yYWRpdXMsaT10aGlzLl9wb2ludDtyZXR1cm4gaS54LWU+dC5tYXgueHx8aS55LWU+dC5tYXgueXx8aS54K2U8dC5taW4ueHx8aS55K2U8dC5taW4ueX19KSxvLmNpcmNsZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBvLkNpcmNsZSh0LGUsaSl9LG8uQ2lyY2xlTWFya2VyPW8uQ2lyY2xlLmV4dGVuZCh7b3B0aW9uczp7cmFkaXVzOjEwLHdlaWdodDoyfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5DaXJjbGUucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLHQsbnVsbCxlKSx0aGlzLl9yYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30scHJvamVjdExhdGxuZ3M6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyl9LF91cGRhdGVTdHlsZTpmdW5jdGlvbigpe28uQ2lyY2xlLnByb3RvdHlwZS5fdXBkYXRlU3R5bGUuY2FsbCh0aGlzKSx0aGlzLnNldFJhZGl1cyh0aGlzLm9wdGlvbnMucmFkaXVzKX0sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiBvLkNpcmNsZS5wcm90b3R5cGUuc2V0TGF0TG5nLmNhbGwodGhpcyx0KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuX2lzT3BlbiYmdGhpcy5fcG9wdXAuc2V0TGF0TG5nKHQpLHRoaXN9LHNldFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnJhZGl1cz10aGlzLl9yYWRpdXM9dCx0aGlzLnJlZHJhdygpfSxnZXRSYWRpdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaXVzfX0pLG8uY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBvLkNpcmNsZU1hcmtlcih0LGUpfSxvLlBvbHlsaW5lLmluY2x1ZGUoby5QYXRoLkNBTlZBUz97X2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsYSxyLGgsbCx1PXRoaXMub3B0aW9ucy53ZWlnaHQvMjtmb3Ioby5Ccm93c2VyLnRvdWNoJiYodSs9MTApLGk9MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDthPmk7aSsrKWZvcihsPXRoaXMuX3BhcnRzW2ldLG49MCxyPWwubGVuZ3RoLHM9ci0xO3I+bjtzPW4rKylpZigoZXx8MCE9PW4pJiYoaD1vLkxpbmVVdGlsLnBvaW50VG9TZWdtZW50RGlzdGFuY2UodCxsW3NdLGxbbl0pLHU+PWgpKXJldHVybiEwO3JldHVybiExfX06e30pLG8uUG9seWdvbi5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLGEscixoLGwsdT0hMTtpZihvLlBvbHlsaW5lLnByb3RvdHlwZS5fY29udGFpbnNQb2ludC5jYWxsKHRoaXMsdCwhMCkpcmV0dXJuITA7Zm9yKHM9MCxoPXRoaXMuX3BhcnRzLmxlbmd0aDtoPnM7cysrKWZvcihlPXRoaXMuX3BhcnRzW3NdLGE9MCxsPWUubGVuZ3RoLHI9bC0xO2w+YTtyPWErKylpPWVbYV0sbj1lW3JdLGkueT50LnkhPW4ueT50LnkmJnQueDwobi54LWkueCkqKHQueS1pLnkpLyhuLnktaS55KStpLngmJih1PSF1KTtyZXR1cm4gdX19Ont9KSxvLkNpcmNsZS5pbmNsdWRlKG8uUGF0aC5DQU5WQVM/e19kcmF3UGF0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BvaW50O3RoaXMuX2N0eC5iZWdpblBhdGgoKSx0aGlzLl9jdHguYXJjKHQueCx0LnksdGhpcy5fcmFkaXVzLDAsMipNYXRoLlBJLCExKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcG9pbnQsaT10aGlzLm9wdGlvbnMuc3Ryb2tlP3RoaXMub3B0aW9ucy53ZWlnaHQvMjowO3JldHVybiB0LmRpc3RhbmNlVG8oZSk8PXRoaXMuX3JhZGl1cytpfX06e30pLG8uQ2lyY2xlTWFya2VyLmluY2x1ZGUoby5QYXRoLkNBTlZBUz97X3VwZGF0ZVN0eWxlOmZ1bmN0aW9uKCl7by5QYXRoLnByb3RvdHlwZS5fdXBkYXRlU3R5bGUuY2FsbCh0aGlzKX19Ont9KSxvLkdlb0pTT049by5GZWF0dXJlR3JvdXAuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7by5zZXRPcHRpb25zKHRoaXMsZSksdGhpcy5fbGF5ZXJzPXt9LHQmJnRoaXMuYWRkRGF0YSh0KX0sYWRkRGF0YTpmdW5jdGlvbih0KXt2YXIgZSxpLG4scz1vLlV0aWwuaXNBcnJheSh0KT90OnQuZmVhdHVyZXM7aWYocyl7Zm9yKGU9MCxpPXMubGVuZ3RoO2k+ZTtlKyspbj1zW2VdLChuLmdlb21ldHJpZXN8fG4uZ2VvbWV0cnl8fG4uZmVhdHVyZXN8fG4uY29vcmRpbmF0ZXMpJiZ0aGlzLmFkZERhdGEoc1tlXSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5vcHRpb25zO2lmKCFhLmZpbHRlcnx8YS5maWx0ZXIodCkpe3ZhciByPW8uR2VvSlNPTi5nZW9tZXRyeVRvTGF5ZXIodCxhLnBvaW50VG9MYXllcixhLmNvb3Jkc1RvTGF0TG5nLGEpO3JldHVybiByLmZlYXR1cmU9by5HZW9KU09OLmFzRmVhdHVyZSh0KSxyLmRlZmF1bHRPcHRpb25zPXIub3B0aW9ucyx0aGlzLnJlc2V0U3R5bGUociksYS5vbkVhY2hGZWF0dXJlJiZhLm9uRWFjaEZlYXR1cmUodCxyKSx0aGlzLmFkZExheWVyKHIpfX0scmVzZXRTdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMuc3R5bGU7ZSYmKG8uVXRpbC5leHRlbmQodC5vcHRpb25zLHQuZGVmYXVsdE9wdGlvbnMpLHRoaXMuX3NldExheWVyU3R5bGUodCxlKSl9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3RoaXMuZWFjaExheWVyKGZ1bmN0aW9uKGUpe3RoaXMuX3NldExheWVyU3R5bGUoZSx0KX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGUmJihlPWUodC5mZWF0dXJlKSksdC5zZXRTdHlsZSYmdC5zZXRTdHlsZShlKX19KSxvLmV4dGVuZChvLkdlb0pTT04se2dlb21ldHJ5VG9MYXllcjpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxhLHIsaCxsPSJGZWF0dXJlIj09PXQudHlwZT90Lmdlb21ldHJ5OnQsdT1sLmNvb3JkaW5hdGVzLGM9W107c3dpdGNoKGk9aXx8dGhpcy5jb29yZHNUb0xhdExuZyxsLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBzPWkodSksZT9lKHQscyk6bmV3IG8uTWFya2VyKHMpO2Nhc2UiTXVsdGlQb2ludCI6Zm9yKHI9MCxoPXUubGVuZ3RoO2g+cjtyKyspcz1pKHVbcl0pLGMucHVzaChlP2UodCxzKTpuZXcgby5NYXJrZXIocykpO3JldHVybiBuZXcgby5GZWF0dXJlR3JvdXAoYyk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDAsaSksbmV3IG8uUG9seWxpbmUoYSxuKTtjYXNlIlBvbHlnb24iOmlmKDI9PT11Lmxlbmd0aCYmIXVbMV0ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBHZW9KU09OIG9iamVjdC4iKTtyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDEsaSksbmV3IG8uUG9seWdvbihhLG4pO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDEsaSksbmV3IG8uTXVsdGlQb2x5bGluZShhLG4pO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYT10aGlzLmNvb3Jkc1RvTGF0TG5ncyh1LDIsaSksbmV3IG8uTXVsdGlQb2x5Z29uKGEsbik7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihyPTAsaD1sLmdlb21ldHJpZXMubGVuZ3RoO2g+cjtyKyspYy5wdXNoKHRoaXMuZ2VvbWV0cnlUb0xheWVyKHtnZW9tZXRyeTpsLmdlb21ldHJpZXNbcl0sdHlwZToiRmVhdHVyZSIscHJvcGVydGllczp0LnByb3BlcnRpZXN9LGUsaSxuKSk7cmV0dXJuIG5ldyBvLkZlYXR1cmVHcm91cChjKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBHZW9KU09OIG9iamVjdC4iKX19LGNvb3Jkc1RvTGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5MYXRMbmcodFsxXSx0WzBdLHRbMl0pfSxjb29yZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLG8scyxhPVtdO2ZvcihvPTAscz10Lmxlbmd0aDtzPm87bysrKW49ZT90aGlzLmNvb3Jkc1RvTGF0TG5ncyh0W29dLGUtMSxpKTooaXx8dGhpcy5jb29yZHNUb0xhdExuZykodFtvXSksYS5wdXNoKG4pO3JldHVybiBhfSxsYXRMbmdUb0Nvb3JkczpmdW5jdGlvbih0KXt2YXIgZT1bdC5sbmcsdC5sYXRdO3JldHVybiB0LmFsdCE9PWkmJmUucHVzaCh0LmFsdCksZX0sbGF0TG5nc1RvQ29vcmRzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxpPTAsbj10Lmxlbmd0aDtuPmk7aSsrKWUucHVzaChvLkdlb0pTT04ubGF0TG5nVG9Db29yZHModFtpXSkpO3JldHVybiBlfSxnZXRGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZmVhdHVyZT9vLmV4dGVuZCh7fSx0LmZlYXR1cmUse2dlb21ldHJ5OmV9KTpvLkdlb0pTT04uYXNGZWF0dXJlKGUpfSxhc0ZlYXR1cmU6ZnVuY3Rpb24odCl7cmV0dXJuIkZlYXR1cmUiPT09dC50eXBlP3Q6e3R5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6e30sZ2VvbWV0cnk6dH19fSk7dmFyIGE9e3RvR2VvSlNPTjpmdW5jdGlvbigpe3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6by5HZW9KU09OLmxhdExuZ1RvQ29vcmRzKHRoaXMuZ2V0TGF0TG5nKCkpfSl9fTtvLk1hcmtlci5pbmNsdWRlKGEpLG8uQ2lyY2xlLmluY2x1ZGUoYSksby5DaXJjbGVNYXJrZXIuaW5jbHVkZShhKSxvLlBvbHlsaW5lLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbigpe3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpvLkdlb0pTT04ubGF0TG5nc1RvQ29vcmRzKHRoaXMuZ2V0TGF0TG5ncygpKX0pfX0pLG8uUG9seWdvbi5pbmNsdWRlKHt0b0dlb0pTT046ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj1bby5HZW9KU09OLmxhdExuZ3NUb0Nvb3Jkcyh0aGlzLmdldExhdExuZ3MoKSldO2lmKG5bMF0ucHVzaChuWzBdWzBdKSx0aGlzLl9ob2xlcylmb3IodD0wLGU9dGhpcy5faG9sZXMubGVuZ3RoO2U+dDt0KyspaT1vLkdlb0pTT04ubGF0TG5nc1RvQ29vcmRzKHRoaXMuX2hvbGVzW3RdKSxpLnB1c2goaVswXSksbi5wdXNoKGkpO3JldHVybiBvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpufSl9fSksZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXtlLnB1c2godC50b0dlb0pTT04oKS5nZW9tZXRyeS5jb29yZGluYXRlcyl9KSxvLkdlb0pTT04uZ2V0RmVhdHVyZSh0aGlzLHt0eXBlOnQsY29vcmRpbmF0ZXM6ZX0pfX1vLk11bHRpUG9seWxpbmUuaW5jbHVkZSh7dG9HZW9KU09OOnQoIk11bHRpTGluZVN0cmluZyIpfSksby5NdWx0aVBvbHlnb24uaW5jbHVkZSh7dG9HZW9KU09OOnQoIk11bHRpUG9seWdvbiIpfSksby5MYXllckdyb3VwLmluY2x1ZGUoe3RvR2VvSlNPTjpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5mZWF0dXJlJiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnksbj1bXTtpZihpJiYiTXVsdGlQb2ludCI9PT1pLnR5cGUpcmV0dXJuIHQoIk11bHRpUG9pbnQiKS5jYWxsKHRoaXMpO3ZhciBzPWkmJiJHZW9tZXRyeUNvbGxlY3Rpb24iPT09aS50eXBlO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXt0LnRvR2VvSlNPTiYmKGU9dC50b0dlb0pTT04oKSxuLnB1c2gocz9lLmdlb21ldHJ5Om8uR2VvSlNPTi5hc0ZlYXR1cmUoZSkpKX0pLHM/by5HZW9KU09OLmdldEZlYXR1cmUodGhpcyx7Z2VvbWV0cmllczpuLHR5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiJ9KTp7dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm59fX0pfSgpLG8uZ2VvSnNvbj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgby5HZW9KU09OKHQsZSl9LG8uRG9tRXZlbnQ9e2FkZExpc3RlbmVyOmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLGEscixoPW8uc3RhbXAoaSksbD0iX2xlYWZsZXRfIitlK2g7cmV0dXJuIHRbbF0/dGhpczoocz1mdW5jdGlvbihlKXtyZXR1cm4gaS5jYWxsKG58fHQsZXx8by5Eb21FdmVudC5fZ2V0RXZlbnQoKSl9LG8uQnJvd3Nlci5wb2ludGVyJiYwPT09ZS5pbmRleE9mKCJ0b3VjaCIpP3RoaXMuYWRkUG9pbnRlckxpc3RlbmVyKHQsZSxzLGgpOihvLkJyb3dzZXIudG91Y2gmJiJkYmxjbGljayI9PT1lJiZ0aGlzLmFkZERvdWJsZVRhcExpc3RlbmVyJiZ0aGlzLmFkZERvdWJsZVRhcExpc3RlbmVyKHQscyxoKSwiYWRkRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWU/KHQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLHMsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpKToibW91c2VlbnRlciI9PT1lfHwibW91c2VsZWF2ZSI9PT1lPyhhPXMscj0ibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIscz1mdW5jdGlvbihlKXtyZXR1cm4gby5Eb21FdmVudC5fY2hlY2tNb3VzZSh0LGUpP2EoZSk6dm9pZCAwfSx0LmFkZEV2ZW50TGlzdGVuZXIocixzLCExKSk6ImNsaWNrIj09PWUmJm8uQnJvd3Nlci5hbmRyb2lkPyhhPXMscz1mdW5jdGlvbih0KXtyZXR1cm4gby5Eb21FdmVudC5fZmlsdGVyQ2xpY2sodCxhKX0sdC5hZGRFdmVudExpc3RlbmVyKGUscywhMSkpOnQuYWRkRXZlbnRMaXN0ZW5lcihlLHMsITEpOiJhdHRhY2hFdmVudCJpbiB0JiZ0LmF0dGFjaEV2ZW50KCJvbiIrZSxzKSx0W2xdPXMsdGhpcykpfSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7dmFyIG49by5zdGFtcChpKSxzPSJfbGVhZmxldF8iK2UrbixhPXRbc107cmV0dXJuIGE/KG8uQnJvd3Nlci5wb2ludGVyJiYwPT09ZS5pbmRleE9mKCJ0b3VjaCIpP3RoaXMucmVtb3ZlUG9pbnRlckxpc3RlbmVyKHQsZSxuKTpvLkJyb3dzZXIudG91Y2gmJiJkYmxjbGljayI9PT1lJiZ0aGlzLnJlbW92ZURvdWJsZVRhcExpc3RlbmVyP3RoaXMucmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIodCxuKToicmVtb3ZlRXZlbnRMaXN0ZW5lciJpbiB0PyJtb3VzZXdoZWVsIj09PWU/KHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NTW91c2VTY3JvbGwiLGEsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGEsITEpKToibW91c2VlbnRlciI9PT1lfHwibW91c2VsZWF2ZSI9PT1lP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciI9PT1lPyJtb3VzZW92ZXIiOiJtb3VzZW91dCIsYSwhMSk6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsYSwhMSk6ImRldGFjaEV2ZW50ImluIHQmJnQuZGV0YWNoRXZlbnQoIm9uIitlLGEpLHRbc109bnVsbCx0aGlzKTp0aGlzfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uP3Quc3RvcFByb3BhZ2F0aW9uKCk6dC5jYW5jZWxCdWJibGU9ITAsby5Eb21FdmVudC5fc2tpcHBlZCh0KSx0aGlzfSxkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246ZnVuY3Rpb24odCl7dmFyIGU9by5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb247cmV0dXJuIG8uRG9tRXZlbnQub24odCwibW91c2V3aGVlbCIsZSkub24odCwiTW96TW91c2VQaXhlbFNjcm9sbCIsZSl9LGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbixpPW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO2k+PTA7aS0tKW8uRG9tRXZlbnQub24odCxvLkRyYWdnYWJsZS5TVEFSVFtpXSxlKTtyZXR1cm4gby5Eb21FdmVudC5vbih0LCJjbGljayIsby5Eb21FdmVudC5fZmFrZVN0b3ApLm9uKHQsImRibGNsaWNrIixlKX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQ/dC5wcmV2ZW50RGVmYXVsdCgpOnQucmV0dXJuVmFsdWU9ITEsdGhpc30sc3RvcDpmdW5jdGlvbih0KXtyZXR1cm4gby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KS5zdG9wUHJvcGFnYXRpb24odCl9LGdldE1vdXNlUG9zaXRpb246ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLHQuY2xpZW50WSk7dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gbmV3IG8uUG9pbnQodC5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wKX0sZ2V0V2hlZWxEZWx0YTpmdW5jdGlvbih0KXt2YXIgZT0wO3JldHVybiB0LndoZWVsRGVsdGEmJihlPXQud2hlZWxEZWx0YS8xMjApLHQuZGV0YWlsJiYoZT0tdC5kZXRhaWwvMyksZX0sX3NraXBFdmVudHM6e30sX2Zha2VTdG9wOmZ1bmN0aW9uKHQpe28uRG9tRXZlbnQuX3NraXBFdmVudHNbdC50eXBlXT0hMH0sX3NraXBwZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc2tpcEV2ZW50c1t0LnR5cGVdO3JldHVybiB0aGlzLl9za2lwRXZlbnRzW3QudHlwZV09ITEsZX0sX2NoZWNrTW91c2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnJlbGF0ZWRUYXJnZXQ7aWYoIWkpcmV0dXJuITA7dHJ5e2Zvcig7aSYmaSE9PXQ7KWk9aS5wYXJlbnROb2RlfWNhdGNoKG4pe3JldHVybiExfXJldHVybiBpIT09dH0sX2dldEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dC5ldmVudDtpZighZSlmb3IodmFyIGk9YXJndW1lbnRzLmNhbGxlZS5jYWxsZXI7aSYmKGU9aS5hcmd1bWVudHNbMF0sIWV8fHQuRXZlbnQhPT1lLmNvbnN0cnVjdG9yKTspaT1pLmNhbGxlcjtyZXR1cm4gZX0sX2ZpbHRlckNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC50aW1lU3RhbXB8fHQub3JpZ2luYWxFdmVudC50aW1lU3RhbXAsbj1vLkRvbUV2ZW50Ll9sYXN0Q2xpY2smJmktby5Eb21FdmVudC5fbGFzdENsaWNrO3JldHVybiBuJiZuPjEwMCYmNTAwPm58fHQudGFyZ2V0Ll9zaW11bGF0ZWRDbGljayYmIXQuX3NpbXVsYXRlZD92b2lkIG8uRG9tRXZlbnQuc3RvcCh0KTooby5Eb21FdmVudC5fbGFzdENsaWNrPWksZSh0KSl9fSxvLkRvbUV2ZW50Lm9uPW8uRG9tRXZlbnQuYWRkTGlzdGVuZXIsby5Eb21FdmVudC5vZmY9by5Eb21FdmVudC5yZW1vdmVMaXN0ZW5lcixvLkRyYWdnYWJsZT1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMsc3RhdGljczp7U1RBUlQ6by5Ccm93c2VyLnRvdWNoP1sidG91Y2hzdGFydCIsIm1vdXNlZG93biJdOlsibW91c2Vkb3duIl0sRU5EOnttb3VzZWRvd246Im1vdXNldXAiLHRvdWNoc3RhcnQ6InRvdWNoZW5kIixwb2ludGVyZG93bjoidG91Y2hlbmQiLE1TUG9pbnRlckRvd246InRvdWNoZW5kIn0sTU9WRTp7bW91c2Vkb3duOiJtb3VzZW1vdmUiLHRvdWNoc3RhcnQ6InRvdWNobW92ZSIscG9pbnRlcmRvd246InRvdWNobW92ZSIsTVNQb2ludGVyRG93bjoidG91Y2htb3ZlIn19LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0PWV8fHR9LGVuYWJsZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9lbmFibGVkKXtmb3IodmFyIHQ9by5EcmFnZ2FibGUuU1RBUlQubGVuZ3RoLTE7dD49MDt0LS0pby5Eb21FdmVudC5vbih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsby5EcmFnZ2FibGUuU1RBUlRbdF0sdGhpcy5fb25Eb3duLHRoaXMpO3RoaXMuX2VuYWJsZWQ9ITB9fSxkaXNhYmxlOmZ1bmN0aW9uKCl7aWYodGhpcy5fZW5hYmxlZCl7Zm9yKHZhciB0PW8uRHJhZ2dhYmxlLlNUQVJULmxlbmd0aC0xO3Q+PTA7dC0tKW8uRG9tRXZlbnQub2ZmKHRoaXMuX2RyYWdTdGFydFRhcmdldCxvLkRyYWdnYWJsZS5TVEFSVFt0XSx0aGlzLl9vbkRvd24sdGhpcyk7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9tb3ZlZD0hMX19LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5fbW92ZWQ9ITEsIXQuc2hpZnRLZXkmJigxPT09dC53aGljaHx8MT09PXQuYnV0dG9ufHx0LnRvdWNoZXMpJiYoby5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb24odCksIW8uRHJhZ2dhYmxlLl9kaXNhYmxlZCYmKG8uRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnKCksby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksIXRoaXMuX21vdmluZykpKXt2YXIgaT10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQ7dGhpcy5fc3RhcnRQb2ludD1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSx0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQpLG8uRG9tRXZlbnQub24oZSxvLkRyYWdnYWJsZS5NT1ZFW3QudHlwZV0sdGhpcy5fb25Nb3ZlLHRoaXMpLm9uKGUsby5EcmFnZ2FibGUuRU5EW3QudHlwZV0sdGhpcy5fb25VcCx0aGlzKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzJiZ0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHZvaWQodGhpcy5fbW92ZWQ9ITApO3ZhciBpPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQsbj1uZXcgby5Qb2ludChpLmNsaWVudFgsaS5jbGllbnRZKSxzPW4uc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCk7KHMueHx8cy55KSYmKG8uQnJvd3Nlci50b3VjaCYmTWF0aC5hYnMocy54KStNYXRoLmFicyhzLnkpPDN8fChvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX21vdmVkfHwodGhpcy5maXJlKCJkcmFnc3RhcnQiKSx0aGlzLl9tb3ZlZD0hMCx0aGlzLl9zdGFydFBvcz1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odGhpcy5fZWxlbWVudCkuc3VidHJhY3Qocyksby5Eb21VdGlsLmFkZENsYXNzKGUuYm9keSwibGVhZmxldC1kcmFnZ2luZyIpLHRoaXMuX2xhc3RUYXJnZXQ9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwibGVhZmxldC1kcmFnLXRhcmdldCIpKSx0aGlzLl9uZXdQb3M9dGhpcy5fc3RhcnRQb3MuYWRkKHMpLHRoaXMuX21vdmluZz0hMCxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVQb3NpdGlvbix0aGlzLCEwLHRoaXMuX2RyYWdTdGFydFRhcmdldCkpKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJwcmVkcmFnIiksby5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsdGhpcy5fbmV3UG9zKSx0aGlzLmZpcmUoImRyYWciKX0sX29uVXA6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3MoZS5ib2R5LCJsZWFmbGV0LWRyYWdnaW5nIiksdGhpcy5fbGFzdFRhcmdldCYmKG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9sYXN0VGFyZ2V0LCJsZWFmbGV0LWRyYWctdGFyZ2V0IiksdGhpcy5fbGFzdFRhcmdldD1udWxsKTtmb3IodmFyIHQgaW4gby5EcmFnZ2FibGUuTU9WRSlvLkRvbUV2ZW50Lm9mZihlLG8uRHJhZ2dhYmxlLk1PVkVbdF0sdGhpcy5fb25Nb3ZlKS5vZmYoZSxvLkRyYWdnYWJsZS5FTkRbdF0sdGhpcy5fb25VcCk7by5Eb21VdGlsLmVuYWJsZUltYWdlRHJhZygpLG8uRG9tVXRpbC5lbmFibGVUZXh0U2VsZWN0aW9uKCksdGhpcy5fbW92ZWQmJnRoaXMuX21vdmluZyYmKG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLHRoaXMuZmlyZSgiZHJhZ2VuZCIse2Rpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pKSx0aGlzLl9tb3Zpbmc9ITF9fSksby5IYW5kbGVyPW8uQ2xhc3MuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwodGhpcy5fZW5hYmxlZD0hMCx0aGlzLmFkZEhvb2tzKCkpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZW1vdmVIb29rcygpKX0sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6IW8uQnJvd3Nlci5hbmRyb2lkMjMsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsaW5lcnRpYVRocmVzaG9sZDpvLkJyb3dzZXIudG91Y2g/MzI6MTgsZWFzZUxpbmVhcml0eTouMjUsd29ybGRDb3B5SnVtcDohMX0pLG8uTWFwLkRyYWc9by5IYW5kbGVyLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtpZighdGhpcy5fZHJhZ2dhYmxlKXt2YXIgdD10aGlzLl9tYXA7dGhpcy5fZHJhZ2dhYmxlPW5ldyBvLkRyYWdnYWJsZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHQub3B0aW9ucy53b3JsZENvcHlKdW1wJiYodGhpcy5fZHJhZ2dhYmxlLm9uKCJwcmVkcmFnIix0aGlzLl9vblByZURyYWcsdGhpcyksdC5vbigidmlld3Jlc2V0Iix0aGlzLl9vblZpZXdSZXNldCx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl9vblZpZXdSZXNldCx0aGlzKSl9dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sX29uRHJhZ1N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwO3QuX3BhbkFuaW0mJnQuX3BhbkFuaW0uc3RvcCgpLHQuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0IiksdC5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSl7dmFyIHQ9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGU9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX25ld1Bvczt0aGlzLl9wb3NpdGlvbnMucHVzaChlKSx0aGlzLl90aW1lcy5wdXNoKHQpLHQtdGhpcy5fdGltZXNbMF0+MjAwJiYodGhpcy5fcG9zaXRpb25zLnNoaWZ0KCksdGhpcy5fdGltZXMuc2hpZnQoKSl9dGhpcy5fbWFwLmZpcmUoIm1vdmUiKS5maXJlKCJkcmFnIil9LF9vblZpZXdSZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLGU9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChbMCwwXSk7dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0PWUuc3VidHJhY3QodCkueCx0aGlzLl93b3JsZFdpZHRoPXRoaXMuX21hcC5wcm9qZWN0KFswLDE4MF0pLnh9LF9vblByZURyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93b3JsZFdpZHRoLGU9TWF0aC5yb3VuZCh0LzIpLGk9dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LG49dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueCxvPShuLWUraSkldCtlLWkscz0obitlK2kpJXQtZS1pLGE9TWF0aC5hYnMobytpKTxNYXRoLmFicyhzK2kpP286czt0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54PWF9LF9vbkRyYWdFbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLGk9ZS5vcHRpb25zLG49K25ldyBEYXRlLXRoaXMuX2xhc3RUaW1lLHM9IWkuaW5lcnRpYXx8bj5pLmluZXJ0aWFUaHJlc2hvbGR8fCF0aGlzLl9wb3NpdGlvbnNbMF07aWYoZS5maXJlKCJkcmFnZW5kIix0KSxzKWUuZmlyZSgibW92ZWVuZCIpO2Vsc2V7dmFyIGE9dGhpcy5fbGFzdFBvcy5zdWJ0cmFjdCh0aGlzLl9wb3NpdGlvbnNbMF0pLHI9KHRoaXMuX2xhc3RUaW1lK24tdGhpcy5fdGltZXNbMF0pLzFlMyxoPWkuZWFzZUxpbmVhcml0eSxsPWEubXVsdGlwbHlCeShoL3IpLHU9bC5kaXN0YW5jZVRvKFswLDBdKSxjPU1hdGgubWluKGkuaW5lcnRpYU1heFNwZWVkLHUpLGQ9bC5tdWx0aXBseUJ5KGMvdSkscD1jLyhpLmluZXJ0aWFEZWNlbGVyYXRpb24qaCksXz1kLm11bHRpcGx5QnkoLXAvMikucm91bmQoKTtfLngmJl8ueT8oXz1lLl9saW1pdE9mZnNldChfLGUub3B0aW9ucy5tYXhCb3VuZHMpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7ZS5wYW5CeShfLHtkdXJhdGlvbjpwLGVhc2VMaW5lYXJpdHk6aCxub01vdmVTdGFydDohMH0pfSkpOmUuZmlyZSgibW92ZWVuZCIpfX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRyYWdnaW5nIixvLk1hcC5EcmFnKSxvLk1hcC5tZXJnZU9wdGlvbnMoe2RvdWJsZUNsaWNrWm9vbTohMH0pLG8uTWFwLkRvdWJsZUNsaWNrWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vbigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9mZigiZGJsY2xpY2siLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpKyh0Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXk/LTE6MSk7ImNlbnRlciI9PT1lLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2Uuc2V0Wm9vbShpKTplLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxpKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImRvdWJsZUNsaWNrWm9vbSIsby5NYXAuRG91YmxlQ2xpY2tab29tKSxvLk1hcC5tZXJnZU9wdGlvbnMoe3Njcm9sbFdoZWVsWm9vbTohMH0pLG8uTWFwLlNjcm9sbFdoZWVsWm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub24odGhpcy5fbWFwLl9jb250YWluZXIsIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWxTY3JvbGwsdGhpcyksby5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwiTW96TW91c2VQaXhlbFNjcm9sbCIsby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCksdGhpcy5fZGVsdGE9MH0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwibW91c2V3aGVlbCIsdGhpcy5fb25XaGVlbFNjcm9sbCksby5Eb21FdmVudC5vZmYodGhpcy5fbWFwLl9jb250YWluZXIsIk1vek1vdXNlUGl4ZWxTY3JvbGwiLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpfSxfb25XaGVlbFNjcm9sbDpmdW5jdGlvbih0KXt2YXIgZT1vLkRvbUV2ZW50LmdldFdoZWVsRGVsdGEodCk7dGhpcy5fZGVsdGErPWUsdGhpcy5fbGFzdE1vdXNlUG9zPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSx0aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlKTt2YXIgaT1NYXRoLm1heCg0MC0oK25ldyBEYXRlLXRoaXMuX3N0YXJ0VGltZSksMCk7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLl90aW1lcj1zZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxpKSxvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKHQpfSxfcGVyZm9ybVpvb206ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAsZT10aGlzLl9kZWx0YSxpPXQuZ2V0Wm9vbSgpO2U9ZT4wP01hdGguY2VpbChlKTpNYXRoLmZsb29yKGUpLGU9TWF0aC5tYXgoTWF0aC5taW4oZSw0KSwtNCksZT10Ll9saW1pdFpvb20oaStlKS1pLHRoaXMuX2RlbHRhPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsZSYmKCJjZW50ZXIiPT09dC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbT90LnNldFpvb20oaStlKTp0LnNldFpvb21Bcm91bmQodGhpcy5fbGFzdE1vdXNlUG9zLGkrZSkpfX0pLG8uTWFwLmFkZEluaXRIb29rKCJhZGRIYW5kbGVyIiwic2Nyb2xsV2hlZWxab29tIixvLk1hcC5TY3JvbGxXaGVlbFpvb20pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse190b3VjaHN0YXJ0Om8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlckRvd24iOm8uQnJvd3Nlci5wb2ludGVyPyJwb2ludGVyZG93biI6InRvdWNoc3RhcnQiLF90b3VjaGVuZDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJVcCI6by5Ccm93c2VyLnBvaW50ZXI/InBvaW50ZXJ1cCI6InRvdWNoZW5kIixhZGREb3VibGVUYXBMaXN0ZW5lcjpmdW5jdGlvbih0LGksbil7ZnVuY3Rpb24gcyh0KXt2YXIgZTtpZihvLkJyb3dzZXIucG9pbnRlcj8oXy5wdXNoKHQucG9pbnRlcklkKSxlPV8ubGVuZ3RoKTplPXQudG91Y2hlcy5sZW5ndGgsIShlPjEpKXt2YXIgaT1EYXRlLm5vdygpLG49aS0ocnx8aSk7aD10LnRvdWNoZXM/dC50b3VjaGVzWzBdOnQsbD1uPjAmJnU+PW4scj1pfX1mdW5jdGlvbiBhKHQpe2lmKG8uQnJvd3Nlci5wb2ludGVyKXt2YXIgZT1fLmluZGV4T2YodC5wb2ludGVySWQpO2lmKC0xPT09ZSlyZXR1cm47Xy5zcGxpY2UoZSwxKX1pZihsKXtpZihvLkJyb3dzZXIucG9pbnRlcil7dmFyIG4scz17fTtmb3IodmFyIGEgaW4gaCluPWhbYV0sImZ1bmN0aW9uIj09dHlwZW9mIG4/c1thXT1uLmJpbmQoaCk6c1thXT1uO2g9c31oLnR5cGU9ImRibGNsaWNrIixpKGgpLHI9bnVsbH19dmFyIHIsaCxsPSExLHU9MjUwLGM9Il9sZWFmbGV0XyIsZD10aGlzLl90b3VjaHN0YXJ0LHA9dGhpcy5fdG91Y2hlbmQsXz1bXTt0W2MrZCtuXT1zLHRbYytwK25dPWE7dmFyIG09by5Ccm93c2VyLnBvaW50ZXI/ZS5kb2N1bWVudEVsZW1lbnQ6dDtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGQscywhMSksbS5hZGRFdmVudExpc3RlbmVyKHAsYSwhMSksby5Ccm93c2VyLnBvaW50ZXImJm0uYWRkRXZlbnRMaXN0ZW5lcihvLkRvbUV2ZW50LlBPSU5URVJfQ0FOQ0VMLGEsITEpLHRoaXN9LHJlbW92ZURvdWJsZVRhcExpc3RlbmVyOmZ1bmN0aW9uKHQsaSl7dmFyIG49Il9sZWFmbGV0XyI7cmV0dXJuIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl90b3VjaHN0YXJ0LHRbbit0aGlzLl90b3VjaHN0YXJ0K2ldLCExKSwoby5Ccm93c2VyLnBvaW50ZXI/ZS5kb2N1bWVudEVsZW1lbnQ6dCkucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl90b3VjaGVuZCx0W24rdGhpcy5fdG91Y2hlbmQraV0sITEpLG8uQnJvd3Nlci5wb2ludGVyJiZlLmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKG8uRG9tRXZlbnQuUE9JTlRFUl9DQU5DRUwsdFtuK3RoaXMuX3RvdWNoZW5kK2ldLCExKSx0aGlzfX0pLG8uZXh0ZW5kKG8uRG9tRXZlbnQse1BPSU5URVJfRE9XTjpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJEb3duIjoicG9pbnRlcmRvd24iLApQT0lOVEVSX01PVkU6by5Ccm93c2VyLm1zUG9pbnRlcj8iTVNQb2ludGVyTW92ZSI6InBvaW50ZXJtb3ZlIixQT0lOVEVSX1VQOm8uQnJvd3Nlci5tc1BvaW50ZXI/Ik1TUG9pbnRlclVwIjoicG9pbnRlcnVwIixQT0lOVEVSX0NBTkNFTDpvLkJyb3dzZXIubXNQb2ludGVyPyJNU1BvaW50ZXJDYW5jZWwiOiJwb2ludGVyY2FuY2VsIixfcG9pbnRlcnM6W10sX3BvaW50ZXJEb2N1bWVudExpc3RlbmVyOiExLGFkZFBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSxuKXtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0IjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJTdGFydCh0LGUsaSxuKTtjYXNlInRvdWNoZW5kIjpyZXR1cm4gdGhpcy5hZGRQb2ludGVyTGlzdGVuZXJFbmQodCxlLGksbik7Y2FzZSJ0b3VjaG1vdmUiOnJldHVybiB0aGlzLmFkZFBvaW50ZXJMaXN0ZW5lck1vdmUodCxlLGksbik7ZGVmYXVsdDp0aHJvdyJVbmtub3duIHRvdWNoIGV2ZW50IHR5cGUifX0sYWRkUG9pbnRlckxpc3RlbmVyU3RhcnQ6ZnVuY3Rpb24odCxpLG4scyl7dmFyIGE9Il9sZWFmbGV0XyIscj10aGlzLl9wb2ludGVycyxoPWZ1bmN0aW9uKHQpeyJtb3VzZSIhPT10LnBvaW50ZXJUeXBlJiZ0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KTtmb3IodmFyIGU9ITEsaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe2U9ITA7YnJlYWt9ZXx8ci5wdXNoKHQpLHQudG91Y2hlcz1yLnNsaWNlKCksdC5jaGFuZ2VkVG91Y2hlcz1bdF0sbih0KX07aWYodFthKyJ0b3VjaHN0YXJ0IitzXT1oLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfRE9XTixoLCExKSwhdGhpcy5fcG9pbnRlckRvY3VtZW50TGlzdGVuZXIpe3ZhciBsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8ci5sZW5ndGg7ZSsrKWlmKHJbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe3Iuc3BsaWNlKGUsMSk7YnJlYWt9fTtlLmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9VUCxsLCExKSxlLmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuUE9JTlRFUl9DQU5DRUwsbCwhMSksdGhpcy5fcG9pbnRlckRvY3VtZW50TGlzdGVuZXI9ITB9cmV0dXJuIHRoaXN9LGFkZFBvaW50ZXJMaXN0ZW5lck1vdmU6ZnVuY3Rpb24odCxlLGksbil7ZnVuY3Rpb24gbyh0KXtpZih0LnBvaW50ZXJUeXBlIT09dC5NU1BPSU5URVJfVFlQRV9NT1VTRSYmIm1vdXNlIiE9PXQucG9pbnRlclR5cGV8fDAhPT10LmJ1dHRvbnMpe2Zvcih2YXIgZT0wO2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe2FbZV09dDticmVha310LnRvdWNoZXM9YS5zbGljZSgpLHQuY2hhbmdlZFRvdWNoZXM9W3RdLGkodCl9fXZhciBzPSJfbGVhZmxldF8iLGE9dGhpcy5fcG9pbnRlcnM7cmV0dXJuIHRbcysidG91Y2htb3ZlIituXT1vLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxvLCExKSx0aGlzfSxhZGRQb2ludGVyTGlzdGVuZXJFbmQ6ZnVuY3Rpb24odCxlLGksbil7dmFyIG89Il9sZWFmbGV0XyIscz10aGlzLl9wb2ludGVycyxhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cy5sZW5ndGg7ZSsrKWlmKHNbZV0ucG9pbnRlcklkPT09dC5wb2ludGVySWQpe3Muc3BsaWNlKGUsMSk7YnJlYWt9dC50b3VjaGVzPXMuc2xpY2UoKSx0LmNoYW5nZWRUb3VjaGVzPVt0XSxpKHQpfTtyZXR1cm4gdFtvKyJ0b3VjaGVuZCIrbl09YSx0LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLGEsITEpLHQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfQ0FOQ0VMLGEsITEpLHRoaXN9LHJlbW92ZVBvaW50ZXJMaXN0ZW5lcjpmdW5jdGlvbih0LGUsaSl7dmFyIG49Il9sZWFmbGV0XyIsbz10W24rZStpXTtzd2l0Y2goZSl7Y2FzZSJ0b3VjaHN0YXJ0Ijp0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX0RPV04sbywhMSk7YnJlYWs7Y2FzZSJ0b3VjaG1vdmUiOnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfTU9WRSxvLCExKTticmVhaztjYXNlInRvdWNoZW5kIjp0LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5QT0lOVEVSX1VQLG8sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLlBPSU5URVJfQ0FOQ0VMLG8sITEpfXJldHVybiB0aGlzfX0pLG8uTWFwLm1lcmdlT3B0aW9ucyh7dG91Y2hab29tOm8uQnJvd3Nlci50b3VjaCYmIW8uQnJvd3Nlci5hbmRyb2lkMjMsYm91bmNlQXRab29tTGltaXRzOiEwfSksby5NYXAuVG91Y2hab29tPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LF9vblRvdWNoU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fbWFwO2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJiFpLl9hbmltYXRpbmdab29tJiYhdGhpcy5fem9vbWluZyl7dmFyIG49aS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQudG91Y2hlc1swXSkscz1pLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzFdKSxhPWkuX2dldENlbnRlckxheWVyUG9pbnQoKTt0aGlzLl9zdGFydENlbnRlcj1uLmFkZChzKS5fZGl2aWRlQnkoMiksdGhpcy5fc3RhcnREaXN0PW4uZGlzdGFuY2VUbyhzKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLHRoaXMuX2NlbnRlck9mZnNldD1hLnN1YnRyYWN0KHRoaXMuX3N0YXJ0Q2VudGVyKSxpLl9wYW5BbmltJiZpLl9wYW5BbmltLnN0b3AoKSxvLkRvbUV2ZW50Lm9uKGUsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcykub24oZSwidG91Y2hlbmQiLHRoaXMuX29uVG91Y2hFbmQsdGhpcyksby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KX19LF9vblRvdWNoTW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7aWYodC50b3VjaGVzJiYyPT09dC50b3VjaGVzLmxlbmd0aCYmdGhpcy5fem9vbWluZyl7dmFyIGk9ZS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQudG91Y2hlc1swXSksbj1lLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodC50b3VjaGVzWzFdKTt0aGlzLl9zY2FsZT1pLmRpc3RhbmNlVG8obikvdGhpcy5fc3RhcnREaXN0LHRoaXMuX2RlbHRhPWkuX2FkZChuKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX3N0YXJ0Q2VudGVyKSwxIT09dGhpcy5fc2NhbGUmJihlLm9wdGlvbnMuYm91bmNlQXRab29tTGltaXRzfHwhKGUuZ2V0Wm9vbSgpPT09ZS5nZXRNaW5ab29tKCkmJnRoaXMuX3NjYWxlPDF8fGUuZ2V0Wm9vbSgpPT09ZS5nZXRNYXhab29tKCkmJnRoaXMuX3NjYWxlPjEpKSYmKHRoaXMuX21vdmVkfHwoby5Eb21VdGlsLmFkZENsYXNzKGUuX21hcFBhbmUsImxlYWZsZXQtdG91Y2hpbmciKSxlLmZpcmUoIm1vdmVzdGFydCIpLmZpcmUoInpvb21zdGFydCIpLHRoaXMuX21vdmVkPSEwKSxvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KSx0aGlzLl9hbmltUmVxdWVzdD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVPbk1vdmUsdGhpcywhMCx0aGlzLl9tYXAuX2NvbnRhaW5lciksby5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdCh0KSl9fSxfdXBkYXRlT25Nb3ZlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dGhpcy5fZ2V0U2NhbGVPcmlnaW4oKSxpPXQubGF5ZXJQb2ludFRvTGF0TG5nKGUpLG49dC5nZXRTY2FsZVpvb20odGhpcy5fc2NhbGUpO3QuX2FuaW1hdGVab29tKGksbix0aGlzLl9zdGFydENlbnRlcix0aGlzLl9zY2FsZSx0aGlzLl9kZWx0YSwhMSwhMCl9LF9vblRvdWNoRW5kOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21vdmVkfHwhdGhpcy5fem9vbWluZylyZXR1cm4gdm9pZCh0aGlzLl96b29taW5nPSExKTt2YXIgdD10aGlzLl9tYXA7dGhpcy5fem9vbWluZz0hMSxvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModC5fbWFwUGFuZSwibGVhZmxldC10b3VjaGluZyIpLG8uVXRpbC5jYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpLG8uRG9tRXZlbnQub2ZmKGUsInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUpLm9mZihlLCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCk7dmFyIGk9dGhpcy5fZ2V0U2NhbGVPcmlnaW4oKSxuPXQubGF5ZXJQb2ludFRvTGF0TG5nKGkpLHM9dC5nZXRab29tKCksYT10LmdldFNjYWxlWm9vbSh0aGlzLl9zY2FsZSktcyxyPWE+MD9NYXRoLmNlaWwoYSk6TWF0aC5mbG9vcihhKSxoPXQuX2xpbWl0Wm9vbShzK3IpLGw9dC5nZXRab29tU2NhbGUoaCkvdGhpcy5fc2NhbGU7dC5fYW5pbWF0ZVpvb20obixoLGksbCl9LF9nZXRTY2FsZU9yaWdpbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NlbnRlck9mZnNldC5zdWJ0cmFjdCh0aGlzLl9kZWx0YSkuZGl2aWRlQnkodGhpcy5fc2NhbGUpO3JldHVybiB0aGlzLl9zdGFydENlbnRlci5hZGQodCl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0b3VjaFpvb20iLG8uTWFwLlRvdWNoWm9vbSksby5NYXAubWVyZ2VPcHRpb25zKHt0YXA6ITAsdGFwVG9sZXJhbmNlOjE1fSksby5NYXAuVGFwPW8uSGFuZGxlci5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbih0aGlzLl9tYXAuX2NvbnRhaW5lciwidG91Y2hzdGFydCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24sdGhpcyl9LF9vbkRvd246ZnVuY3Rpb24odCl7aWYodC50b3VjaGVzKXtpZihvLkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KHQpLHRoaXMuX2ZpcmVDbGljaz0hMCx0LnRvdWNoZXMubGVuZ3RoPjEpcmV0dXJuIHRoaXMuX2ZpcmVDbGljaz0hMSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7dmFyIGk9dC50b3VjaGVzWzBdLG49aS50YXJnZXQ7dGhpcy5fc3RhcnRQb3M9dGhpcy5fbmV3UG9zPW5ldyBvLlBvaW50KGkuY2xpZW50WCxpLmNsaWVudFkpLG4udGFnTmFtZSYmImEiPT09bi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyhuLCJsZWFmbGV0LWFjdGl2ZSIpLHRoaXMuX2hvbGRUaW1lb3V0PXNldFRpbWVvdXQoby5iaW5kKGZ1bmN0aW9uKCl7dGhpcy5faXNUYXBWYWxpZCgpJiYodGhpcy5fZmlyZUNsaWNrPSExLHRoaXMuX29uVXAoKSx0aGlzLl9zaW11bGF0ZUV2ZW50KCJjb250ZXh0bWVudSIsaSkpfSx0aGlzKSwxZTMpLG8uRG9tRXZlbnQub24oZSwidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUsdGhpcykub24oZSwidG91Y2hlbmQiLHRoaXMuX29uVXAsdGhpcyl9fSxfb25VcDpmdW5jdGlvbih0KXtpZihjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpLG8uRG9tRXZlbnQub2ZmKGUsInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlLHRoaXMpLm9mZihlLCJ0b3VjaGVuZCIsdGhpcy5fb25VcCx0aGlzKSx0aGlzLl9maXJlQ2xpY2smJnQmJnQuY2hhbmdlZFRvdWNoZXMpe3ZhciBpPXQuY2hhbmdlZFRvdWNoZXNbMF0sbj1pLnRhcmdldDtuJiZuLnRhZ05hbWUmJiJhIj09PW4udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZvLkRvbVV0aWwucmVtb3ZlQ2xhc3MobiwibGVhZmxldC1hY3RpdmUiKSx0aGlzLl9pc1RhcFZhbGlkKCkmJnRoaXMuX3NpbXVsYXRlRXZlbnQoImNsaWNrIixpKX19LF9pc1RhcFZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKTw9dGhpcy5fbWFwLm9wdGlvbnMudGFwVG9sZXJhbmNlfSxfb25Nb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudG91Y2hlc1swXTt0aGlzLl9uZXdQb3M9bmV3IG8uUG9pbnQoZS5jbGllbnRYLGUuY2xpZW50WSl9LF9zaW11bGF0ZUV2ZW50OmZ1bmN0aW9uKGksbil7dmFyIG89ZS5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTtvLl9zaW11bGF0ZWQ9ITAsbi50YXJnZXQuX3NpbXVsYXRlZENsaWNrPSEwLG8uaW5pdE1vdXNlRXZlbnQoaSwhMCwhMCx0LDEsbi5zY3JlZW5YLG4uc2NyZWVuWSxuLmNsaWVudFgsbi5jbGllbnRZLCExLCExLCExLCExLDAsbnVsbCksbi50YXJnZXQuZGlzcGF0Y2hFdmVudChvKX19KSxvLkJyb3dzZXIudG91Y2gmJiFvLkJyb3dzZXIucG9pbnRlciYmby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJ0YXAiLG8uTWFwLlRhcCksby5NYXAubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSksby5NYXAuQm94Wm9vbT1vLkhhbmRsZXIuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj10Ll9jb250YWluZXIsdGhpcy5fcGFuZT10Ll9wYW5lcy5vdmVybGF5UGFuZSx0aGlzLl9tb3ZlZD0hMX0sYWRkSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9uKHRoaXMuX2NvbnRhaW5lciwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9jb250YWluZXIsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24pLHRoaXMuX21vdmVkPSExfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3ZlZH0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb3ZlZD0hMSwhdC5zaGlmdEtleXx8MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbj8hMTooby5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uKCksby5Eb21VdGlsLmRpc2FibGVJbWFnZURyYWcoKSx0aGlzLl9zdGFydExheWVyUG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQodCksdm9pZCBvLkRvbUV2ZW50Lm9uKGUsIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsdGhpcykub24oZSwibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLHRoaXMpLm9uKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKSl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlZHx8KHRoaXMuX2JveD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LXpvb20tYm94Iix0aGlzLl9wYW5lKSxvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fYm94LHRoaXMuX3N0YXJ0TGF5ZXJQb2ludCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmN1cnNvcj0iY3Jvc3NoYWlyIix0aGlzLl9tYXAuZmlyZSgiYm94em9vbXN0YXJ0IikpO3ZhciBlPXRoaXMuX3N0YXJ0TGF5ZXJQb2ludCxpPXRoaXMuX2JveCxuPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpLHM9bi5zdWJ0cmFjdChlKSxhPW5ldyBvLlBvaW50KE1hdGgubWluKG4ueCxlLngpLE1hdGgubWluKG4ueSxlLnkpKTtvLkRvbVV0aWwuc2V0UG9zaXRpb24oaSxhKSx0aGlzLl9tb3ZlZD0hMCxpLnN0eWxlLndpZHRoPU1hdGgubWF4KDAsTWF0aC5hYnMocy54KS00KSsicHgiLGkuc3R5bGUuaGVpZ2h0PU1hdGgubWF4KDAsTWF0aC5hYnMocy55KS00KSsicHgifSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJih0aGlzLl9wYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2JveCksdGhpcy5fY29udGFpbmVyLnN0eWxlLmN1cnNvcj0iIiksby5Eb21VdGlsLmVuYWJsZVRleHRTZWxlY3Rpb24oKSxvLkRvbVV0aWwuZW5hYmxlSW1hZ2VEcmFnKCksby5Eb21FdmVudC5vZmYoZSwibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSkub2ZmKGUsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCkub2ZmKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bil9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7dGhpcy5fZmluaXNoKCk7dmFyIGU9dGhpcy5fbWFwLGk9ZS5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpO2lmKCF0aGlzLl9zdGFydExheWVyUG9pbnQuZXF1YWxzKGkpKXt2YXIgbj1uZXcgby5MYXRMbmdCb3VuZHMoZS5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fc3RhcnRMYXllclBvaW50KSxlLmxheWVyUG9pbnRUb0xhdExuZyhpKSk7ZS5maXRCb3VuZHMobiksZS5maXJlKCJib3h6b29tZW5kIix7Ym94Wm9vbUJvdW5kczpufSl9fSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpezI3PT09dC5rZXlDb2RlJiZ0aGlzLl9maW5pc2goKX19KSxvLk1hcC5hZGRJbml0SG9vaygiYWRkSGFuZGxlciIsImJveFpvb20iLG8uTWFwLkJveFpvb20pLG8uTWFwLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5PZmZzZXQ6ODAsa2V5Ym9hcmRab29tT2Zmc2V0OjF9KSxvLk1hcC5LZXlib2FyZD1vLkhhbmRsZXIuZXh0ZW5kKHtrZXlDb2Rlczp7bGVmdDpbMzddLHJpZ2h0OlszOV0sZG93bjpbNDBdLHVwOlszOF0sem9vbUluOlsxODcsMTA3LDYxLDE3MV0sem9vbU91dDpbMTg5LDEwOSwxNzNdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX3NldFBhbk9mZnNldCh0Lm9wdGlvbnMua2V5Ym9hcmRQYW5PZmZzZXQpLHRoaXMuX3NldFpvb21PZmZzZXQodC5vcHRpb25zLmtleWJvYXJkWm9vbU9mZnNldCl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7LTE9PT10LnRhYkluZGV4JiYodC50YWJJbmRleD0iMCIpLG8uRG9tRXZlbnQub24odCwiZm9jdXMiLHRoaXMuX29uRm9jdXMsdGhpcykub24odCwiYmx1ciIsdGhpcy5fb25CbHVyLHRoaXMpLm9uKHQsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sdGhpcyksdGhpcy5fbWFwLm9uKCJmb2N1cyIsdGhpcy5fYWRkSG9va3MsdGhpcykub24oImJsdXIiLHRoaXMuX3JlbW92ZUhvb2tzLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUhvb2tzKCk7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7by5Eb21FdmVudC5vZmYodCwiZm9jdXMiLHRoaXMuX29uRm9jdXMsdGhpcykub2ZmKHQsImJsdXIiLHRoaXMuX29uQmx1cix0aGlzKS5vZmYodCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKSx0aGlzLl9tYXAub2ZmKCJmb2N1cyIsdGhpcy5fYWRkSG9va3MsdGhpcykub2ZmKCJibHVyIix0aGlzLl9yZW1vdmVIb29rcyx0aGlzKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZvY3VzZWQpe3ZhciBpPWUuYm9keSxuPWUuZG9jdW1lbnRFbGVtZW50LG89aS5zY3JvbGxUb3B8fG4uc2Nyb2xsVG9wLHM9aS5zY3JvbGxMZWZ0fHxuLnNjcm9sbExlZnQ7dGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx0LnNjcm9sbFRvKHMsbyl9fSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX2ZvY3VzZWQ9ITAsdGhpcy5fbWFwLmZpcmUoImZvY3VzIil9LF9vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9mb2N1c2VkPSExLHRoaXMuX21hcC5maXJlKCJibHVyIil9LF9zZXRQYW5PZmZzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMuX3BhbktleXM9e30sbz10aGlzLmtleUNvZGVzO2ZvcihlPTAsaT1vLmxlZnQubGVuZ3RoO2k+ZTtlKyspbltvLmxlZnRbZV1dPVstMSp0LDBdO2ZvcihlPTAsaT1vLnJpZ2h0Lmxlbmd0aDtpPmU7ZSsrKW5bby5yaWdodFtlXV09W3QsMF07Zm9yKGU9MCxpPW8uZG93bi5sZW5ndGg7aT5lO2UrKyluW28uZG93bltlXV09WzAsdF07Zm9yKGU9MCxpPW8udXAubGVuZ3RoO2k+ZTtlKyspbltvLnVwW2VdXT1bMCwtMSp0XX0sX3NldFpvb21PZmZzZXQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMuX3pvb21LZXlzPXt9LG89dGhpcy5rZXlDb2Rlcztmb3IoZT0wLGk9by56b29tSW4ubGVuZ3RoO2k+ZTtlKyspbltvLnpvb21JbltlXV09dDtmb3IoZT0wLGk9by56b29tT3V0Lmxlbmd0aDtpPmU7ZSsrKW5bby56b29tT3V0W2VdXT0tdH0sX2FkZEhvb2tzOmZ1bmN0aW9uKCl7by5Eb21FdmVudC5vbihlLCJrZXlkb3duIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9yZW1vdmVIb29rczpmdW5jdGlvbigpe28uRG9tRXZlbnQub2ZmKGUsImtleWRvd24iLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGUsaT10aGlzLl9tYXA7aWYoZSBpbiB0aGlzLl9wYW5LZXlzKXtpZihpLl9wYW5BbmltJiZpLl9wYW5BbmltLl9pblByb2dyZXNzKXJldHVybjtpLnBhbkJ5KHRoaXMuX3BhbktleXNbZV0pLGkub3B0aW9ucy5tYXhCb3VuZHMmJmkucGFuSW5zaWRlQm91bmRzKGkub3B0aW9ucy5tYXhCb3VuZHMpfWVsc2V7aWYoIShlIGluIHRoaXMuX3pvb21LZXlzKSlyZXR1cm47aS5zZXRab29tKGkuZ2V0Wm9vbSgpK3RoaXMuX3pvb21LZXlzW2VdKX1vLkRvbUV2ZW50LnN0b3AodCl9fSksby5NYXAuYWRkSW5pdEhvb2soImFkZEhhbmRsZXIiLCJrZXlib2FyZCIsby5NYXAuS2V5Ym9hcmQpLG8uSGFuZGxlci5NYXJrZXJEcmFnPW8uSGFuZGxlci5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyPXR9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFya2VyLl9pY29uO3RoaXMuX2RyYWdnYWJsZXx8KHRoaXMuX2RyYWdnYWJsZT1uZXcgby5EcmFnZ2FibGUodCx0KSksdGhpcy5fZHJhZ2dhYmxlLm9uKCJkcmFnc3RhcnQiLHRoaXMuX29uRHJhZ1N0YXJ0LHRoaXMpLm9uKCJkcmFnIix0aGlzLl9vbkRyYWcsdGhpcykub24oImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZCx0aGlzKSx0aGlzLl9kcmFnZ2FibGUuZW5hYmxlKCksby5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX21hcmtlci5faWNvbiwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIil9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fZHJhZ2dhYmxlLm9mZigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydCx0aGlzKS5vZmYoImRyYWciLHRoaXMuX29uRHJhZyx0aGlzKS5vZmYoImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZCx0aGlzKSx0aGlzLl9kcmFnZ2FibGUuZGlzYWJsZSgpLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXJrZXIuX2ljb24sImxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZSIpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3RoaXMuX21hcmtlci5jbG9zZVBvcHVwKCkuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgiZHJhZ3N0YXJ0Iil9LF9vbkRyYWc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXJrZXIsZT10Ll9zaGFkb3csaT1vLkRvbVV0aWwuZ2V0UG9zaXRpb24odC5faWNvbiksbj10Ll9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGkpO2UmJm8uRG9tVXRpbC5zZXRQb3NpdGlvbihlLGkpLHQuX2xhdGxuZz1uLHQuZmlyZSgibW92ZSIse2xhdGxuZzpufSkuZmlyZSgiZHJhZyIpfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3RoaXMuX21hcmtlci5maXJlKCJtb3ZlZW5kIikuZmlyZSgiZHJhZ2VuZCIsdCl9fSksby5Db250cm9sPW8uQ2xhc3MuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoidG9wcmlnaHQifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe28uc2V0T3B0aW9ucyh0aGlzLHQpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb259LHNldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtyZXR1cm4gZSYmZS5yZW1vdmVDb250cm9sKHRoaXMpLHRoaXMub3B0aW9ucy5wb3NpdGlvbj10LGUmJmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzfSxnZXRDb250YWluZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxhZGRUbzpmdW5jdGlvbih0KXt0aGlzLl9tYXA9dDt2YXIgZT10aGlzLl9jb250YWluZXI9dGhpcy5vbkFkZCh0KSxpPXRoaXMuZ2V0UG9zaXRpb24oKSxuPXQuX2NvbnRyb2xDb3JuZXJzW2ldO3JldHVybiBvLkRvbVV0aWwuYWRkQ2xhc3MoZSwibGVhZmxldC1jb250cm9sIiksLTEhPT1pLmluZGV4T2YoImJvdHRvbSIpP24uaW5zZXJ0QmVmb3JlKGUsbi5maXJzdENoaWxkKTpuLmFwcGVuZENoaWxkKGUpLHRoaXN9LHJlbW92ZUZyb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nZXRQb3NpdGlvbigpLGk9dC5fY29udHJvbENvcm5lcnNbZV07cmV0dXJuIGkucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXA9bnVsbCx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHQpLHRoaXN9LF9yZWZvY3VzT25NYXA6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJnRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpfX0pLG8uY29udHJvbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG8uQ29udHJvbCh0KX0sby5NYXAuaW5jbHVkZSh7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxyZW1vdmVDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbW92ZUZyb20odGhpcyksdGhpc30sX2luaXRDb250cm9sUG9zOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LHMpe3ZhciBhPWkrdCsiICIraStzO2VbdCtzXT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGEsbil9dmFyIGU9dGhpcy5fY29udHJvbENvcm5lcnM9e30saT0ibGVhZmxldC0iLG49dGhpcy5fY29udHJvbENvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGkrImNvbnRyb2wtY29udGFpbmVyIix0aGlzLl9jb250YWluZXIpO3QoInRvcCIsImxlZnQiKSx0KCJ0b3AiLCJyaWdodCIpLHQoImJvdHRvbSIsImxlZnQiKSx0KCJib3R0b20iLCJyaWdodCIpfSxfY2xlYXJDb250cm9sUG9zOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRyb2xDb250YWluZXIpfX0pLG8uQ29udHJvbC5ab29tPW8uQ29udHJvbC5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOiJ0b3BsZWZ0Iix6b29tSW5UZXh0OiIrIix6b29tSW5UaXRsZToiWm9vbSBpbiIsem9vbU91dFRleHQ6Ii0iLHpvb21PdXRUaXRsZToiWm9vbSBvdXQifSxvbkFkZDpmdW5jdGlvbih0KXt2YXIgZT0ibGVhZmxldC1jb250cm9sLXpvb20iLGk9by5Eb21VdGlsLmNyZWF0ZSgiZGl2IixlKyIgbGVhZmxldC1iYXIiKTtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbih0aGlzLm9wdGlvbnMuem9vbUluVGV4dCx0aGlzLm9wdGlvbnMuem9vbUluVGl0bGUsZSsiLWluIixpLHRoaXMuX3pvb21Jbix0aGlzKSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbih0aGlzLm9wdGlvbnMuem9vbU91dFRleHQsdGhpcy5vcHRpb25zLnpvb21PdXRUaXRsZSxlKyItb3V0IixpLHRoaXMuX3pvb21PdXQsdGhpcyksdGhpcy5fdXBkYXRlRGlzYWJsZWQoKSx0Lm9uKCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2UiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpLGl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2UiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpfSxfem9vbUluOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tSW4odC5zaGlmdEtleT8zOjEpfSxfem9vbU91dDpmdW5jdGlvbih0KXt0aGlzLl9tYXAuem9vbU91dCh0LnNoaWZ0S2V5PzM6MSl9LF9jcmVhdGVCdXR0b246ZnVuY3Rpb24odCxlLGksbixzLGEpe3ZhciByPW8uRG9tVXRpbC5jcmVhdGUoImEiLGksbik7ci5pbm5lckhUTUw9dCxyLmhyZWY9IiMiLHIudGl0bGU9ZTt2YXIgaD1vLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbjtyZXR1cm4gby5Eb21FdmVudC5vbihyLCJjbGljayIsaCkub24ociwibW91c2Vkb3duIixoKS5vbihyLCJkYmxjbGljayIsaCkub24ociwiY2xpY2siLG8uRG9tRXZlbnQucHJldmVudERlZmF1bHQpLm9uKHIsImNsaWNrIixzLGEpLm9uKHIsImNsaWNrIix0aGlzLl9yZWZvY3VzT25NYXAsYSkscn0sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9ImxlYWZsZXQtZGlzYWJsZWQiO28uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl96b29tSW5CdXR0b24sZSksby5Eb21VdGlsLnJlbW92ZUNsYXNzKHRoaXMuX3pvb21PdXRCdXR0b24sZSksdC5fem9vbT09PXQuZ2V0TWluWm9vbSgpJiZvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbixlKSx0Ll96b29tPT09dC5nZXRNYXhab29tKCkmJm8uRG9tVXRpbC5hZGRDbGFzcyh0aGlzLl96b29tSW5CdXR0b24sZSl9fSksby5NYXAubWVyZ2VPcHRpb25zKHt6b29tQ29udHJvbDohMH0pLG8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnpvb21Db250cm9sJiYodGhpcy56b29tQ29udHJvbD1uZXcgby5Db250cm9sLlpvb20sdGhpcy5hZGRDb250cm9sKHRoaXMuem9vbUNvbnRyb2wpKX0pLG8uY29udHJvbC56b29tPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgby5Db250cm9sLlpvb20odCl9LG8uQ29udHJvbC5BdHRyaWJ1dGlvbj1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoiYm90dG9tcmlnaHQiLHByZWZpeDonPGEgaHJlZj0iaHR0cDovL2xlYWZsZXRqcy5jb20iIHRpdGxlPSJBIEpTIGxpYnJhcnkgZm9yIGludGVyYWN0aXZlIG1hcHMiPkxlYWZsZXQ8L2E+J30saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtvLnNldE9wdGlvbnModGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLCJsZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24iKSxvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKHRoaXMuX2NvbnRhaW5lcik7Zm9yKHZhciBlIGluIHQuX2xheWVycyl0Ll9sYXllcnNbZV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2VdLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0Lm9uKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckFkZCx0aGlzKS5vbigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJSZW1vdmUsdGhpcyksdGhpcy5fdXBkYXRlKCksdGhpcy5fY29udGFpbmVyfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZigibGF5ZXJhZGQiLHRoaXMuX29uTGF5ZXJBZGQpLm9mZigibGF5ZXJyZW1vdmUiLHRoaXMuX29uTGF5ZXJSZW1vdmUpfSxzZXRQcmVmaXg6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wcmVmaXg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRBdHRyaWJ1dGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdD8odGhpcy5fYXR0cmlidXRpb25zW3RdfHwodGhpcy5fYXR0cmlidXRpb25zW3RdPTApLHRoaXMuX2F0dHJpYnV0aW9uc1t0XSsrLHRoaXMuX3VwZGF0ZSgpLHRoaXMpOnZvaWQgMH0scmVtb3ZlQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHRoaXMuX2F0dHJpYnV0aW9uc1t0XSYmKHRoaXMuX2F0dHJpYnV0aW9uc1t0XS0tLHRoaXMuX3VwZGF0ZSgpKSx0aGlzKTp2b2lkIDB9LF91cGRhdGU6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl9hdHRyaWJ1dGlvbnMpdGhpcy5fYXR0cmlidXRpb25zW2VdJiZ0LnB1c2goZSk7dmFyIGk9W107dGhpcy5vcHRpb25zLnByZWZpeCYmaS5wdXNoKHRoaXMub3B0aW9ucy5wcmVmaXgpLHQubGVuZ3RoJiZpLnB1c2godC5qb2luKCIsICIpKSx0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPWkuam9pbigiIHwgIil9fSxfb25MYXllckFkZDpmdW5jdGlvbih0KXt0LmxheWVyLmdldEF0dHJpYnV0aW9uJiZ0aGlzLmFkZEF0dHJpYnV0aW9uKHQubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSl9LF9vbkxheWVyUmVtb3ZlOmZ1bmN0aW9uKHQpe3QubGF5ZXIuZ2V0QXR0cmlidXRpb24mJnRoaXMucmVtb3ZlQXR0cmlidXRpb24odC5sYXllci5nZXRBdHRyaWJ1dGlvbigpKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe2F0dHJpYnV0aW9uQ29udHJvbDohMH0pLG8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKHRoaXMuYXR0cmlidXRpb25Db250cm9sPShuZXcgby5Db250cm9sLkF0dHJpYnV0aW9uKS5hZGRUbyh0aGlzKSl9KSxvLmNvbnRyb2wuYXR0cmlidXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuQXR0cmlidXRpb24odCl9LG8uQ29udHJvbC5TY2FsZT1vLkNvbnRyb2wuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjoiYm90dG9tbGVmdCIsbWF4V2lkdGg6MTAwLG1ldHJpYzohMCxpbXBlcmlhbDohMCx1cGRhdGVXaGVuSWRsZTohMX0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQ7dmFyIGU9ImxlYWZsZXQtY29udHJvbC1zY2FsZSIsaT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUpLG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLl9hZGRTY2FsZXMobixlLGkpLHQub24obi51cGRhdGVXaGVuSWRsZT8ibW92ZWVuZCI6Im1vdmUiLHRoaXMuX3VwZGF0ZSx0aGlzKSx0LndoZW5SZWFkeSh0aGlzLl91cGRhdGUsdGhpcyksaX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlPyJtb3ZlZW5kIjoibW92ZSIsdGhpcy5fdXBkYXRlLHRoaXMpfSxfYWRkU2NhbGVzOmZ1bmN0aW9uKHQsZSxpKXt0Lm1ldHJpYyYmKHRoaXMuX21TY2FsZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1saW5lIixpKSksdC5pbXBlcmlhbCYmKHRoaXMuX2lTY2FsZT1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLGUrIi1saW5lIixpKSl9LF91cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuZ2V0Qm91bmRzKCksZT10LmdldENlbnRlcigpLmxhdCxpPTYzNzgxMzcqTWF0aC5QSSpNYXRoLmNvcyhlKk1hdGguUEkvMTgwKSxuPWkqKHQuZ2V0Tm9ydGhFYXN0KCkubG5nLXQuZ2V0U291dGhXZXN0KCkubG5nKS8xODAsbz10aGlzLl9tYXAuZ2V0U2l6ZSgpLHM9dGhpcy5vcHRpb25zLGE9MDtvLng+MCYmKGE9bioocy5tYXhXaWR0aC9vLngpKSx0aGlzLl91cGRhdGVTY2FsZXMocyxhKX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0LGUpe3QubWV0cmljJiZlJiZ0aGlzLl91cGRhdGVNZXRyaWMoZSksdC5pbXBlcmlhbCYmZSYmdGhpcy5fdXBkYXRlSW1wZXJpYWwoZSl9LF91cGRhdGVNZXRyaWM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0Um91bmROdW0odCk7dGhpcy5fbVNjYWxlLnN0eWxlLndpZHRoPXRoaXMuX2dldFNjYWxlV2lkdGgoZS90KSsicHgiLHRoaXMuX21TY2FsZS5pbm5lckhUTUw9MWUzPmU/ZSsiIG0iOmUvMWUzKyIga20ifSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLG89My4yODA4Mzk5KnQscz10aGlzLl9pU2NhbGU7bz41MjgwPyhlPW8vNTI4MCxpPXRoaXMuX2dldFJvdW5kTnVtKGUpLHMuc3R5bGUud2lkdGg9dGhpcy5fZ2V0U2NhbGVXaWR0aChpL2UpKyJweCIscy5pbm5lckhUTUw9aSsiIG1pIik6KG49dGhpcy5fZ2V0Um91bmROdW0obykscy5zdHlsZS53aWR0aD10aGlzLl9nZXRTY2FsZVdpZHRoKG4vbykrInB4IixzLmlubmVySFRNTD1uKyIgZnQiKX0sX2dldFNjYWxlV2lkdGg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodGhpcy5vcHRpb25zLm1heFdpZHRoKnQpLTEwfSxfZ2V0Um91bmROdW06ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMTAsKE1hdGguZmxvb3IodCkrIiIpLmxlbmd0aC0xKSxpPXQvZTtyZXR1cm4gaT1pPj0xMD8xMDppPj01PzU6aT49Mz8zOmk+PTI/MjoxLGUqaX19KSxvLmNvbnRyb2wuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvLkNvbnRyb2wuU2NhbGUodCl9LG8uQ29udHJvbC5MYXllcnM9by5Db250cm9sLmV4dGVuZCh7b3B0aW9uczp7Y29sbGFwc2VkOiEwLHBvc2l0aW9uOiJ0b3ByaWdodCIsYXV0b1pJbmRleDohMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7by5zZXRPcHRpb25zKHRoaXMsaSksdGhpcy5fbGF5ZXJzPXt9LHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExO2Zvcih2YXIgbiBpbiB0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gZSl0aGlzLl9hZGRMYXllcihlW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5pdExheW91dCgpLHRoaXMuX3VwZGF0ZSgpLHQub24oImxheWVyYWRkIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLm9uKCJsYXllcnJlbW92ZSIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKSx0aGlzLl9jb250YWluZXJ9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKCJsYXllcmFkZCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKS5vZmYoImxheWVycmVtb3ZlIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpfSxhZGRCYXNlTGF5ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxhZGRPdmVybGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsZSwhMCksdGhpcy5fdXBkYXRlKCksdGhpc30scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9by5zdGFtcCh0KTtyZXR1cm4gZGVsZXRlIHRoaXMuX2xheWVyc1tlXSx0aGlzLl91cGRhdGUoKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PSJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIixlPXRoaXMuX2NvbnRhaW5lcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQpO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWhhc3BvcHVwIiwhMCksby5Ccm93c2VyLnRvdWNoP28uRG9tRXZlbnQub24oZSwiY2xpY2siLG8uRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKTpvLkRvbUV2ZW50LmRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGUpLmRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihlKTt2YXIgaT10aGlzLl9mb3JtPW8uRG9tVXRpbC5jcmVhdGUoImZvcm0iLHQrIi1saXN0Iik7aWYodGhpcy5vcHRpb25zLmNvbGxhcHNlZCl7by5Ccm93c2VyLmFuZHJvaWR8fG8uRG9tRXZlbnQub24oZSwibW91c2VvdmVyIix0aGlzLl9leHBhbmQsdGhpcykub24oZSwibW91c2VvdXQiLHRoaXMuX2NvbGxhcHNlLHRoaXMpO3ZhciBuPXRoaXMuX2xheWVyc0xpbms9by5Eb21VdGlsLmNyZWF0ZSgiYSIsdCsiLXRvZ2dsZSIsZSk7bi5ocmVmPSIjIixuLnRpdGxlPSJMYXllcnMiLG8uQnJvd3Nlci50b3VjaD9vLkRvbUV2ZW50Lm9uKG4sImNsaWNrIixvLkRvbUV2ZW50LnN0b3ApLm9uKG4sImNsaWNrIix0aGlzLl9leHBhbmQsdGhpcyk6by5Eb21FdmVudC5vbihuLCJmb2N1cyIsdGhpcy5fZXhwYW5kLHRoaXMpLG8uRG9tRXZlbnQub24oaSwiY2xpY2siLGZ1bmN0aW9uKCl7c2V0VGltZW91dChvLmJpbmQodGhpcy5fb25JbnB1dENsaWNrLHRoaXMpLDApfSx0aGlzKSx0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9jb2xsYXBzZSx0aGlzKX1lbHNlIHRoaXMuX2V4cGFuZCgpO3RoaXMuX2Jhc2VMYXllcnNMaXN0PW8uRG9tVXRpbC5jcmVhdGUoImRpdiIsdCsiLWJhc2UiLGkpLHRoaXMuX3NlcGFyYXRvcj1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi1zZXBhcmF0b3IiLGkpLHRoaXMuX292ZXJsYXlzTGlzdD1vLkRvbVV0aWwuY3JlYXRlKCJkaXYiLHQrIi1vdmVybGF5cyIsaSksZS5hcHBlbmRDaGlsZChpKX0sX2FkZExheWVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1vLnN0YW1wKHQpO3RoaXMuX2xheWVyc1tuXT17bGF5ZXI6dCxuYW1lOmUsb3ZlcmxheTppfSx0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCYmdC5zZXRaSW5kZXgmJih0aGlzLl9sYXN0WkluZGV4KyssdC5zZXRaSW5kZXgodGhpcy5fbGFzdFpJbmRleCkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGFpbmVyKXt0aGlzLl9iYXNlTGF5ZXJzTGlzdC5pbm5lckhUTUw9IiIsdGhpcy5fb3ZlcmxheXNMaXN0LmlubmVySFRNTD0iIjt2YXIgdCxlLGk9ITEsbj0hMTtmb3IodCBpbiB0aGlzLl9sYXllcnMpZT10aGlzLl9sYXllcnNbdF0sdGhpcy5fYWRkSXRlbShlKSxuPW58fGUub3ZlcmxheSxpPWl8fCFlLm92ZXJsYXk7dGhpcy5fc2VwYXJhdG9yLnN0eWxlLmRpc3BsYXk9biYmaT8iIjoibm9uZSJ9fSxfb25MYXllckNoYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXllcnNbby5zdGFtcCh0LmxheWVyKV07aWYoZSl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGk9ZS5vdmVybGF5PyJsYXllcmFkZCI9PT10LnR5cGU/Im92ZXJsYXlhZGQiOiJvdmVybGF5cmVtb3ZlIjoibGF5ZXJhZGQiPT09dC50eXBlPyJiYXNlbGF5ZXJjaGFuZ2UiOm51bGw7aSYmdGhpcy5fbWFwLmZpcmUoaSxlKX19LF9jcmVhdGVSYWRpb0VsZW1lbnQ6ZnVuY3Rpb24odCxpKXt2YXIgbj0nPGlucHV0IHR5cGU9InJhZGlvIiBjbGFzcz0ibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciIgbmFtZT0iJyt0KyciJztpJiYobis9JyBjaGVja2VkPSJjaGVja2VkIicpLG4rPSIvPiI7dmFyIG89ZS5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gby5pbm5lckhUTUw9bixvLmZpcnN0Q2hpbGR9LF9hZGRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBpLG49ZS5jcmVhdGVFbGVtZW50KCJsYWJlbCIpLHM9dGhpcy5fbWFwLmhhc0xheWVyKHQubGF5ZXIpO3Qub3ZlcmxheT8oaT1lLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS50eXBlPSJjaGVja2JveCIsaS5jbGFzc05hbWU9ImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3IiLGkuZGVmYXVsdENoZWNrZWQ9cyk6aT10aGlzLl9jcmVhdGVSYWRpb0VsZW1lbnQoImxlYWZsZXQtYmFzZS1sYXllcnMiLHMpLGkubGF5ZXJJZD1vLnN0YW1wKHQubGF5ZXIpLG8uRG9tRXZlbnQub24oaSwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljayx0aGlzKTt2YXIgYT1lLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTthLmlubmVySFRNTD0iICIrdC5uYW1lLG4uYXBwZW5kQ2hpbGQoaSksbi5hcHBlbmRDaGlsZChhKTt2YXIgcj10Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0O3JldHVybiByLmFwcGVuZENoaWxkKG4pLG59LF9vbklucHV0Q2xpY2s6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLl9mb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLG89bi5sZW5ndGg7Zm9yKHRoaXMuX2hhbmRsaW5nQ2xpY2s9ITAsdD0wO28+dDt0KyspZT1uW3RdLGk9dGhpcy5fbGF5ZXJzW2UubGF5ZXJJZF0sZS5jaGVja2VkJiYhdGhpcy5fbWFwLmhhc0xheWVyKGkubGF5ZXIpP3RoaXMuX21hcC5hZGRMYXllcihpLmxheWVyKTohZS5jaGVja2VkJiZ0aGlzLl9tYXAuaGFzTGF5ZXIoaS5sYXllcikmJnRoaXMuX21hcC5yZW1vdmVMYXllcihpLmxheWVyKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfSxfZXhwYW5kOmZ1bmN0aW9uKCl7by5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCIpfSxfY29sbGFwc2U6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUucmVwbGFjZSgiIGxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQiLCIiKX19KSxvLmNvbnRyb2wubGF5ZXJzPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IG8uQ29udHJvbC5MYXllcnModCxlLGkpfSxvLlBvc0FuaW1hdGlvbj1vLkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6by5NaXhpbi5FdmVudHMscnVuOmZ1bmN0aW9uKHQsZSxpLG4pe3RoaXMuc3RvcCgpLHRoaXMuX2VsPXQsdGhpcy5faW5Qcm9ncmVzcz0hMCx0aGlzLl9uZXdQb3M9ZSx0aGlzLmZpcmUoInN0YXJ0IiksdC5zdHlsZVtvLkRvbVV0aWwuVFJBTlNJVElPTl09ImFsbCAiKyhpfHwuMjUpKyJzIGN1YmljLWJlemllcigwLDAsIisobnx8LjUpKyIsMSkiLG8uRG9tRXZlbnQub24odCxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fb25UcmFuc2l0aW9uRW5kLHRoaXMpLG8uRG9tVXRpbC5zZXRQb3NpdGlvbih0LGUpLG8uVXRpbC5mYWxzZUZuKHQub2Zmc2V0V2lkdGgpLHRoaXMuX3N0ZXBUaW1lcj1zZXRJbnRlcnZhbChvLmJpbmQodGhpcy5fb25TdGVwLHRoaXMpLDUwKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2luUHJvZ3Jlc3MmJihvLkRvbVV0aWwuc2V0UG9zaXRpb24odGhpcy5fZWwsdGhpcy5fZ2V0UG9zKCkpLHRoaXMuX29uVHJhbnNpdGlvbkVuZCgpLG8uVXRpbC5mYWxzZUZuKHRoaXMuX2VsLm9mZnNldFdpZHRoKSl9LF9vblN0ZXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRQb3MoKTtyZXR1cm4gdD8odGhpcy5fZWwuX2xlYWZsZXRfcG9zPXQsdm9pZCB0aGlzLmZpcmUoInN0ZXAiKSk6dm9pZCB0aGlzLl9vblRyYW5zaXRpb25FbmQoKX0sX3RyYW5zZm9ybVJlOi8oWy0rXT8oPzpcZCpcLik/XGQrKVxEKiwgKFstK10/KD86XGQqXC4pP1xkKylcRCpcKS8sX2dldFBvczpmdW5jdGlvbigpe3ZhciBlLGksbixzPXRoaXMuX2VsLGE9dC5nZXRDb21wdXRlZFN0eWxlKHMpO2lmKG8uQnJvd3Nlci5hbnkzZCl7aWYobj1hW28uRG9tVXRpbC5UUkFOU0ZPUk1dLm1hdGNoKHRoaXMuX3RyYW5zZm9ybVJlKSwhbilyZXR1cm47ZT1wYXJzZUZsb2F0KG5bMV0pLGk9cGFyc2VGbG9hdChuWzJdKX1lbHNlIGU9cGFyc2VGbG9hdChhLmxlZnQpLGk9cGFyc2VGbG9hdChhLnRvcCk7cmV0dXJuIG5ldyBvLlBvaW50KGUsaSwhMCl9LF9vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtvLkRvbUV2ZW50Lm9mZih0aGlzLl9lbCxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fb25UcmFuc2l0aW9uRW5kLHRoaXMpLHRoaXMuX2luUHJvZ3Jlc3MmJih0aGlzLl9pblByb2dyZXNzPSExLHRoaXMuX2VsLnN0eWxlW28uRG9tVXRpbC5UUkFOU0lUSU9OXT0iIix0aGlzLl9lbC5fbGVhZmxldF9wb3M9dGhpcy5fbmV3UG9zLGNsZWFySW50ZXJ2YWwodGhpcy5fc3RlcFRpbWVyKSx0aGlzLmZpcmUoInN0ZXAiKS5maXJlKCJlbmQiKSl9fSksby5NYXAuaW5jbHVkZSh7c2V0VmlldzpmdW5jdGlvbih0LGUsbil7aWYoZT1lPT09aT90aGlzLl96b29tOnRoaXMuX2xpbWl0Wm9vbShlKSx0PXRoaXMuX2xpbWl0Q2VudGVyKG8ubGF0TG5nKHQpLGUsdGhpcy5vcHRpb25zLm1heEJvdW5kcyksbj1ufHx7fSx0aGlzLl9wYW5BbmltJiZ0aGlzLl9wYW5BbmltLnN0b3AoKSx0aGlzLl9sb2FkZWQmJiFuLnJlc2V0JiZuIT09ITApe24uYW5pbWF0ZSE9PWkmJihuLnpvb209by5leHRlbmQoe2FuaW1hdGU6bi5hbmltYXRlfSxuLnpvb20pLG4ucGFuPW8uZXh0ZW5kKHthbmltYXRlOm4uYW5pbWF0ZX0sbi5wYW4pKTt2YXIgcz10aGlzLl96b29tIT09ZT90aGlzLl90cnlBbmltYXRlZFpvb20mJnRoaXMuX3RyeUFuaW1hdGVkWm9vbSh0LGUsbi56b29tKTp0aGlzLl90cnlBbmltYXRlZFBhbih0LG4ucGFuKTtpZihzKXJldHVybiBjbGVhclRpbWVvdXQodGhpcy5fc2l6ZVRpbWVyKSx0aGlzfXJldHVybiB0aGlzLl9yZXNldFZpZXcodCxlKSx0aGlzfSxwYW5CeTpmdW5jdGlvbih0LGUpe2lmKHQ9by5wb2ludCh0KS5yb3VuZCgpLGU9ZXx8e30sIXQueCYmIXQueSlyZXR1cm4gdGhpcztpZih0aGlzLl9wYW5BbmltfHwodGhpcy5fcGFuQW5pbT1uZXcgby5Qb3NBbmltYXRpb24sdGhpcy5fcGFuQW5pbS5vbih7c3RlcDp0aGlzLl9vblBhblRyYW5zaXRpb25TdGVwLGVuZDp0aGlzLl9vblBhblRyYW5zaXRpb25FbmR9LHRoaXMpKSxlLm5vTW92ZVN0YXJ0fHx0aGlzLmZpcmUoIm1vdmVzdGFydCIpLGUuYW5pbWF0ZSE9PSExKXtvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpO3ZhciBpPXRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KTt0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLGksZS5kdXJhdGlvbnx8LjI1LGUuZWFzZUxpbmVhcml0eSl9ZWxzZSB0aGlzLl9yYXdQYW5CeSh0KSx0aGlzLmZpcmUoIm1vdmUiKS5maXJlKCJtb3ZlZW5kIik7cmV0dXJuIHRoaXN9LF9vblBhblRyYW5zaXRpb25TdGVwOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJtb3ZlIil9LF9vblBhblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXtvLkRvbVV0aWwucmVtb3ZlQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC1wYW4tYW5pbSIpLHRoaXMuZmlyZSgibW92ZWVuZCIpfSxfdHJ5QW5pbWF0ZWRQYW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2Zsb29yKCk7cmV0dXJuKGUmJmUuYW5pbWF0ZSk9PT0hMHx8dGhpcy5nZXRTaXplKCkuY29udGFpbnMoaSk/KHRoaXMucGFuQnkoaSxlKSwhMCk6ITF9fSksby5Qb3NBbmltYXRpb249by5Eb21VdGlsLlRSQU5TSVRJT04/by5Qb3NBbmltYXRpb246by5Qb3NBbmltYXRpb24uZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxlLGksbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWl8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9by5Eb21VdGlsLmdldFBvc2l0aW9uKHQpLHRoaXMuX29mZnNldD1lLnN1YnRyYWN0KHRoaXMuX3N0YXJ0UG9zKSx0aGlzLl9zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuZmlyZSgic3RhcnQiKSx0aGlzLl9hbmltYXRlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9pblByb2dyZXNzJiYodGhpcy5fc3RlcCgpLHRoaXMuX2NvbXBsZXRlKCkpfSxfYW5pbWF0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1JZD1vLlV0aWwucmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hbmltYXRlLHRoaXMpLHRoaXMuX3N0ZXAoKX0sX3N0ZXA6ZnVuY3Rpb24oKXt2YXIgdD0rbmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lLGU9MWUzKnRoaXMuX2R1cmF0aW9uO2U+dD90aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KHQvZSkpOih0aGlzLl9ydW5GcmFtZSgxKSx0aGlzLl9jb21wbGV0ZSgpKX0sX3J1bkZyYW1lOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3N0YXJ0UG9zLmFkZCh0aGlzLl9vZmZzZXQubXVsdGlwbHlCeSh0KSk7by5Eb21VdGlsLnNldFBvc2l0aW9uKHRoaXMuX2VsLGUpLHRoaXMuZmlyZSgic3RlcCIpfSxfY29tcGxldGU6ZnVuY3Rpb24oKXtvLlV0aWwuY2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1JZCksdGhpcy5faW5Qcm9ncmVzcz0hMSx0aGlzLmZpcmUoImVuZCIpfSxfZWFzZU91dDpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsdGhpcy5fZWFzZU91dFBvd2VyKX19KSxvLk1hcC5tZXJnZU9wdGlvbnMoe3pvb21BbmltYXRpb246ITAsem9vbUFuaW1hdGlvblRocmVzaG9sZDo0fSksby5Eb21VdGlsLlRSQU5TSVRJT04mJm8uTWFwLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5fem9vbUFuaW1hdGVkPXRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uJiZvLkRvbVV0aWwuVFJBTlNJVElPTiYmby5Ccm93c2VyLmFueTNkJiYhby5Ccm93c2VyLmFuZHJvaWQyMyYmIW8uQnJvd3Nlci5tb2JpbGVPcGVyYSx0aGlzLl96b29tQW5pbWF0ZWQmJm8uRG9tRXZlbnQub24odGhpcy5fbWFwUGFuZSxvLkRvbVV0aWwuVFJBTlNJVElPTl9FTkQsdGhpcy5fY2F0Y2hUcmFuc2l0aW9uRW5kLHRoaXMpfSksby5NYXAuaW5jbHVkZShvLkRvbVV0aWwuVFJBTlNJVElPTj97X2NhdGNoVHJhbnNpdGlvbkVuZDpmdW5jdGlvbih0KXt0aGlzLl9hbmltYXRpbmdab29tJiZ0LnByb3BlcnR5TmFtZS5pbmRleE9mKCJ0cmFuc2Zvcm0iKT49MCYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgibGVhZmxldC16b29tLWFuaW1hdGVkIikubGVuZ3RofSxfdHJ5QW5pbWF0ZWRab29tOmZ1bmN0aW9uKHQsZSxpKXtpZih0aGlzLl9hbmltYXRpbmdab29tKXJldHVybiEwO2lmKGk9aXx8e30sIXRoaXMuX3pvb21BbmltYXRlZHx8aS5hbmltYXRlPT09ITF8fHRoaXMuX25vdGhpbmdUb0FuaW1hdGUoKXx8TWF0aC5hYnMoZS10aGlzLl96b29tKT50aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZClyZXR1cm4hMTt2YXIgbj10aGlzLmdldFpvb21TY2FsZShlKSxvPXRoaXMuX2dldENlbnRlck9mZnNldCh0KS5fZGl2aWRlQnkoMS0xL24pLHM9dGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpLl9hZGQobyk7cmV0dXJuIGkuYW5pbWF0ZT09PSEwfHx0aGlzLmdldFNpemUoKS5jb250YWlucyhvKT8odGhpcy5maXJlKCJtb3Zlc3RhcnQiKS5maXJlKCJ6b29tc3RhcnQiKSx0aGlzLl9hbmltYXRlWm9vbSh0LGUscyxuLG51bGwsITApLCEwKTohMX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsZSxpLG4scyxhLHIpe3J8fCh0aGlzLl9hbmltYXRpbmdab29tPSEwKSxvLkRvbVV0aWwuYWRkQ2xhc3ModGhpcy5fbWFwUGFuZSwibGVhZmxldC16b29tLWFuaW0iKSx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWUsby5EcmFnZ2FibGUmJihvLkRyYWdnYWJsZS5fZGlzYWJsZWQ9ITApLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ6b29tYW5pbSIse2NlbnRlcjp0LHpvb206ZSxvcmlnaW46aSxzY2FsZTpuLGRlbHRhOnMsYmFja3dhcmRzOmF9KSxzZXRUaW1lb3V0KG8uYmluZCh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCl9LHRoaXMpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9hbmltYXRpbmdab29tPSExLG8uRG9tVXRpbC5yZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCJsZWFmbGV0LXpvb20tYW5pbSIpLG8uVXRpbC5yZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5fcmVzZXRWaWV3KHRoaXMuX2FuaW1hdGVUb0NlbnRlcix0aGlzLl9hbmltYXRlVG9ab29tLCEwLCEwKSxvLkRyYWdnYWJsZSYmKG8uRHJhZ2dhYmxlLl9kaXNhYmxlZD0hMSl9LHRoaXMpKX19Ont9KSxvLlRpbGVMYXllci5pbmNsdWRlKHtfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW5nfHwodGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuX3ByZXBhcmVCZ0J1ZmZlcigpKTt2YXIgZT10aGlzLl9iZ0J1ZmZlcixpPW8uRG9tVXRpbC5UUkFOU0ZPUk0sbj10LmRlbHRhP28uRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcodC5kZWx0YSk6ZS5zdHlsZVtpXSxzPW8uRG9tVXRpbC5nZXRTY2FsZVN0cmluZyh0LnNjYWxlLHQub3JpZ2luKTtlLnN0eWxlW2ldPXQuYmFja3dhcmRzP3MrIiAiK246bisiICIrc30sX2VuZFpvb21BbmltOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGlsZUNvbnRhaW5lcixlPXRoaXMuX2JnQnVmZmVyO3Quc3R5bGUudmlzaWJpbGl0eT0iIix0LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodCksby5VdGlsLmZhbHNlRm4oZS5vZmZzZXRXaWR0aCk7dmFyIGk9dGhpcy5fbWFwLmdldFpvb20oKTsoaT50aGlzLm9wdGlvbnMubWF4Wm9vbXx8aTx0aGlzLm9wdGlvbnMubWluWm9vbSkmJnRoaXMuX2NsZWFyQmdCdWZmZXIoKSx0aGlzLl9hbmltYXRpbmc9ITF9LF9jbGVhckJnQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwOyF0fHx0Ll9hbmltYXRpbmdab29tfHx0LnRvdWNoWm9vbS5fem9vbWluZ3x8KHRoaXMuX2JnQnVmZmVyLmlubmVySFRNTD0iIix0aGlzLl9iZ0J1ZmZlci5zdHlsZVtvLkRvbVV0aWwuVFJBTlNGT1JNXT0iIil9LF9wcmVwYXJlQmdCdWZmZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aWxlQ29udGFpbmVyLGU9dGhpcy5fYmdCdWZmZXIsaT10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UoZSksbj10aGlzLl9nZXRMb2FkZWRUaWxlc1BlcmNlbnRhZ2UodCk7cmV0dXJuIGUmJmk+LjUmJi41Pm4/KHQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix2b2lkIHRoaXMuX3N0b3BMb2FkaW5nSW1hZ2VzKHQpKTooZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLGUuc3R5bGVbby5Eb21VdGlsLlRSQU5TRk9STV09IiIsdGhpcy5fdGlsZUNvbnRhaW5lcj1lLGU9dGhpcy5fYmdCdWZmZXI9dCx0aGlzLl9zdG9wTG9hZGluZ0ltYWdlcyhlKSx2b2lkIGNsZWFyVGltZW91dCh0aGlzLl9jbGVhckJnQnVmZmVyVGltZXIpKX0sX2dldExvYWRlZFRpbGVzUGVyY2VudGFnZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIiksbz0wO2ZvcihlPTAsaT1uLmxlbmd0aDtpPmU7ZSsrKW5bZV0uY29tcGxldGUmJm8rKztyZXR1cm4gby9pfSxfc3RvcExvYWRpbmdJbWFnZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIikpO2ZvcihlPTAsaT1zLmxlbmd0aDtpPmU7ZSsrKW49c1tlXSxuLmNvbXBsZXRlfHwobi5vbmxvYWQ9by5VdGlsLmZhbHNlRm4sbi5vbmVycm9yPW8uVXRpbC5mYWxzZUZuLG4uc3JjPW8uVXRpbC5lbXB0eUltYWdlVXJsLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSl9fSksby5NYXAuaW5jbHVkZSh7X2RlZmF1bHRMb2NhdGVPcHRpb25zOnt3YXRjaDohMSxzZXRWaWV3OiExLG1heFpvb206MS8wLHRpbWVvdXQ6MWU0LG1heGltdW1BZ2U6MCxlbmFibGVIaWdoQWNjdXJhY3k6ITF9LGxvY2F0ZTpmdW5jdGlvbih0KXtpZih0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9by5leHRlbmQodGhpcy5fZGVmYXVsdExvY2F0ZU9wdGlvbnMsdCksIW5hdmlnYXRvci5nZW9sb2NhdGlvbilyZXR1cm4gdGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7Y29kZTowLG1lc3NhZ2U6Ikdlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuIn0pLHRoaXM7dmFyIGU9by5iaW5kKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksaT1vLmJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcix0aGlzKTtyZXR1cm4gdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZSxpLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZSxpLHQpLHRoaXN9LHN0b3BMb2NhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpLHRoaXMuX2xvY2F0ZU9wdGlvbnMmJih0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXc9ITEpLHRoaXN9LF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY29kZSxpPXQubWVzc2FnZXx8KDE9PT1lPyJwZXJtaXNzaW9uIGRlbmllZCI6Mj09PWU/InBvc2l0aW9uIHVuYXZhaWxhYmxlIjoidGltZW91dCIpO3RoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0VmlldyYmIXRoaXMuX2xvYWRlZCYmdGhpcy5maXRXb3JsZCgpLHRoaXMuZmlyZSgibG9jYXRpb25lcnJvciIse2NvZGU6ZSxtZXNzYWdlOiJHZW9sb2NhdGlvbiBlcnJvcjogIitpKyIuIn0pfSxfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZTpmdW5jdGlvbih0KXt2YXIgZT10LmNvb3Jkcy5sYXRpdHVkZSxpPXQuY29vcmRzLmxvbmdpdHVkZSxuPW5ldyBvLkxhdExuZyhlLGkpLHM9MTgwKnQuY29vcmRzLmFjY3VyYWN5LzQwMDc1MDE3LGE9cy9NYXRoLmNvcyhvLkxhdExuZy5ERUdfVE9fUkFEKmUpLHI9by5sYXRMbmdCb3VuZHMoW2UtcyxpLWFdLFtlK3MsaSthXSksaD10aGlzLl9sb2NhdGVPcHRpb25zO2lmKGguc2V0Vmlldyl7dmFyIGw9TWF0aC5taW4odGhpcy5nZXRCb3VuZHNab29tKHIpLGgubWF4Wm9vbSk7dGhpcy5zZXRWaWV3KG4sbCl9dmFyIHU9e2xhdGxuZzpuLGJvdW5kczpyLHRpbWVzdGFtcDp0LnRpbWVzdGFtcH07Zm9yKHZhciBjIGluIHQuY29vcmRzKSJudW1iZXIiPT10eXBlb2YgdC5jb29yZHNbY10mJih1W2NdPXQuY29vcmRzW2NdKTt0aGlzLmZpcmUoImxvY2F0aW9uZm91bmQiLHUpfX0pfSh3aW5kb3csZG9jdW1lbnQpOw=="></script>
<link href="data:text/css;charset=utf-8,%0Aimg%2Eleaflet%2Dtile%20%7B%0Apadding%3A%200%3B%0Amargin%3A%200%3B%0Aborder%2Dradius%3A%200%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Einfo%20%7B%0Apadding%3A%206px%208px%3B%0Afont%3A%2014px%2F16px%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Abackground%3A%20white%3B%0Abackground%3A%20rgba%28255%2C255%2C255%2C0%2E8%29%3B%0Abox%2Dshadow%3A%200%200%2015px%20rgba%280%2C0%2C0%2C0%2E2%29%3B%0Aborder%2Dradius%3A%205px%3B%0A%7D%0A%2Elegend%20%7B%0Aline%2Dheight%3A%2018px%3B%0Acolor%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20text%20%7B%0Afill%3A%20%23555%3B%0A%7D%0A%2Elegend%20svg%20line%20%7B%0Astroke%3A%20%23555%3B%0A%7D%0A%2Elegend%20i%20%7B%0Awidth%3A%2018px%3B%0Aheight%3A%2018px%3B%0Afloat%3A%20left%3B%0Amargin%2Dright%3A%208px%3B%0Aopacity%3A%200%2E7%3B%0A%7D%0A" rel="stylesheet" />
<link href="data:text/css;charset=utf-8,%2Eleaflet%2Dlabel%20%7B%0Abackground%3A%20rgb%28235%2C%20235%2C%20235%29%3B%0Abackground%3A%20rgba%28235%2C%20235%2C%20235%2C%200%2E81%29%3B%0Abackground%2Dclip%3A%20padding%2Dbox%3B%0Aborder%2Dcolor%3A%20%23777%3B%0Aborder%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aborder%2Dradius%3A%204px%3B%0Aborder%2Dstyle%3A%20solid%3B%0Aborder%2Dwidth%3A%204px%3B%0Acolor%3A%20%23111%3B%0Adisplay%3A%20block%3B%0Afont%3A%2012px%2F20px%20%22Helvetica%20Neue%22%2C%20Arial%2C%20Helvetica%2C%20sans%2Dserif%3B%0Afont%2Dweight%3A%20bold%3B%0Apadding%3A%201px%206px%3B%0Aposition%3A%20absolute%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0Apointer%2Devents%3A%20none%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Az%2Dindex%3A%20500%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dclickable%20%7B%0Acursor%3A%20pointer%3B%0Apointer%2Devents%3A%20auto%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%2C%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dtop%3A%206px%20solid%20transparent%3B%0Aborder%2Dbottom%3A%206px%20solid%20transparent%3B%0Aborder%2Dright%3A%206px%20solid%20transparent%3B%0Acontent%3A%20none%3B%0Aposition%3A%20absolute%3B%0Atop%3A%205px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Abefore%20%7B%0Aborder%2Dright%3A%206px%20solid%20black%3B%0Aborder%2Dright%2Dcolor%3A%20inherit%3B%0Aleft%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%3Aafter%20%7B%0Aborder%2Dleft%3A%206px%20solid%20black%3B%0Aborder%2Dleft%2Dcolor%3A%20inherit%3B%0Aright%3A%20%2D16px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dtop%3Abefore%20%7B%0Aleft%3A%20%2D50%25%3B%0Aborder%2Dtop%2Dcolor%3A%20black%3B%0Aborder%2Dtop%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aposition%3A%20relative%3B%0Atop%3A%2029px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Abefore%20%7B%0Adisplay%3A%20none%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%20%7B%0Acontent%3A%20%27%20%27%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Abefore%20%7B%0Adisplay%3A%20none%3B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dbottom%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dbottom%3Abefore%20%7B%0Aleft%3A%20%2D50%25%3B%0Aborder%2Dbottom%2Dcolor%3A%20black%3B%0Aborder%2Dbottom%2Dcolor%3A%20rgba%280%2C0%2C0%2C0%2E45%29%3B%0Aposition%3A%20relative%3B%0Atop%3A%20%2D28px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%20%7B%0Aborder%2Dright%2Dcolor%3A%20transparent%3B%0Aborder%2Dtop%2Dcolor%3A%20transparent%3B%0Aborder%2Dleft%2Dcolor%3A%20transparent%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Dbottom%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dtop%3Aafter%2C%0A%2Eleaflet%2Dlabel%2Dright%3Abefore%2C%0A%2Eleaflet%2Dlabel%2Dleft%3Aafter%20%7B%0Acontent%3A%20%22%22%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2C%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%3Abefore%2C%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%3Aafter%20%7B%0Abackground%3A%20none%3B%0Aborder%3A%20none%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2Eleaflet%2Dlabel%2Dleft%20%7B%0Amargin%2Dright%3A%20%2D10px%3B%0A%7D%0A%2Eleaflet%2Dlabel%2Eleaflet%2Dlabel%2Dtext%2Donly%2Eleaflet%2Dlabel%2Dright%20%7B%0Amargin%2Dleft%3A%20%2D10px%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoKCUxlYWZsZXQubGFiZWwsIGEgcGx1Z2luIHRoYXQgYWRkcyBsYWJlbHMgdG8gbWFya2VycyBhbmQgdmVjdG9ycyBmb3IgTGVhZmxldCBwb3dlcmVkIG1hcHMuCgkoYykgMjAxMi0yMDEzLCBKYWNvYiBUb3llLCBTbWFydHJhawoKCWh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQubGFiZWwKCWh0dHA6Ly9sZWFmbGV0anMuY29tCglodHRwczovL2dpdGh1Yi5jb20vamFjb2J0b3llCiovCiFmdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsibGVhZmxldCJdLHQpOiJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXQocmVxdWlyZSgibGVhZmxldCIpKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlJiZlLkwmJihlLkxlYWZsZXRMYWJlbD10KEwpKX0oZnVuY3Rpb24odCl7dC5sYWJlbFZlcnNpb249IjAuMi40Ijt2YXIgZT10LkNsYXNzLmV4dGVuZCh7aW5jbHVkZXM6dC5NaXhpbi5FdmVudHMsX2RpcmVjdGlvbnM6WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxvcHRpb25zOntjbGFzc05hbWU6IiIsY2xpY2thYmxlOiExLGRpcmVjdGlvbjoicmlnaHQiLG5vSGlkZTohMSxvZmZzZXQ6WzEyLC0xNV0sb3BhY2l0eToxLHRleHRzaXplOiIxMHB4Iix0ZXh0T25seTohMSxzdHlsZTpudWxsLHpvb21BbmltYXRpb246ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24oZSxpKXt0LnNldE9wdGlvbnModGhpcyxlKSx0aGlzLl9zb3VyY2U9aSx0aGlzLl9hbmltYXRlZD10LkJyb3dzZXIuYW55M2QmJnRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uLHRoaXMuX2lzT3Blbj0hMX0sX2lzT25NYXJrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlIGluc3RhbmNlb2YgdC5NYXJrZXJ9LG9uQWRkOmZ1bmN0aW9uKGUpe3RoaXMuX21hcD1lLHRoaXMuX3BhbmU9dGhpcy5vcHRpb25zLnBhbmU/ZS5fcGFuZXNbdGhpcy5vcHRpb25zLnBhbmVdOnRoaXMuX2lzT25NYXJrZXIoKT9lLl9wYW5lcy5tYXJrZXJQYW5lOmUuX3BhbmVzLnBvcHVwUGFuZSx0aGlzLl9jb250YWluZXJ8fHRoaXMuX2luaXRMYXlvdXQoKSx0aGlzLl9wYW5lLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5faW5pdEludGVyYWN0aW9uKCksdGhpcy5fdXBkYXRlKCksdGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KSxlLm9uKCJtb3ZlZW5kIix0aGlzLl9vbk1vdmVFbmQsdGhpcykub24oInZpZXdyZXNldCIsdGhpcy5fb25WaWV3UmVzZXQsdGhpcyksdGhpcy5fYW5pbWF0ZWQmJmUub24oInpvb21hbmltIix0aGlzLl96b29tQW5pbWF0aW9uLHRoaXMpLHQuQnJvd3Nlci50b3VjaCYmIXRoaXMub3B0aW9ucy5ub0hpZGUmJih0LkRvbUV2ZW50Lm9uKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuY2xvc2UsdGhpcyksZS5vbigiY2xpY2siLHRoaXMuY2xvc2UsdGhpcykpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9wYW5lLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdC5vZmYoe3pvb21hbmltOnRoaXMuX3pvb21BbmltYXRpb24sbW92ZWVuZDp0aGlzLl9vbk1vdmVFbmQsdmlld3Jlc2V0OnRoaXMuX29uVmlld1Jlc2V0fSx0aGlzKSx0aGlzLl9yZW1vdmVJbnRlcmFjdGlvbigpLHRoaXMuX21hcD1udWxsfSxzZXRMYXRMbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xhdGxuZz10LmxhdExuZyhlKSx0aGlzLl9tYXAmJnRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpc30sc2V0Q29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcHJldmlvdXNDb250ZW50PXRoaXMuX2NvbnRlbnQsdGhpcy5fY29udGVudD10LHRoaXMuX3VwZGF0ZUNvbnRlbnQoKSx0aGlzfSxjbG9zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX21hcDtlJiYodC5Ccm93c2VyLnRvdWNoJiYhdGhpcy5vcHRpb25zLm5vSGlkZSYmKHQuRG9tRXZlbnQub2ZmKHRoaXMuX2NvbnRhaW5lciwiY2xpY2siLHRoaXMuY2xvc2UpLGUub2ZmKCJjbGljayIsdGhpcy5jbG9zZSx0aGlzKSksZS5yZW1vdmVMYXllcih0aGlzKSl9LHVwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt0aGlzLl96SW5kZXg9dCx0aGlzLl9jb250YWluZXImJnRoaXMuX3pJbmRleCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXg9dCl9LHNldE9wYWNpdHk6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zLm9wYWNpdHk9ZSx0aGlzLl9jb250YWluZXImJnQuRG9tVXRpbC5zZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lcixlKX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9jb250YWluZXI9dC5Eb21VdGlsLmNyZWF0ZSgiZGl2IiwibGVhZmxldC1sYWJlbCAiK3RoaXMub3B0aW9ucy5jbGFzc05hbWUrIiBsZWFmbGV0LXpvb20tYW5pbWF0ZWQiKSx0aGlzLl9jb250YWluZXIuc3R5bGUuZm9udFNpemU9dGhpcy5vcHRpb25zLnRleHRzaXplLHRoaXMub3B0aW9ucy50ZXh0T25seSYmdC5Eb21VdGlsLmFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwibGVhZmxldC1sYWJlbC10ZXh0LW9ubHkiKSx0aGlzLm9wdGlvbnMuc3R5bGUpZm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5zdHlsZSl0aGlzLm9wdGlvbnMuc3R5bGUuaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLl9jb250YWluZXIuc3R5bGVbZV09dGhpcy5vcHRpb25zLnN0eWxlW2VdKTt0aGlzLnVwZGF0ZVpJbmRleCh0aGlzLl96SW5kZXgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5fdXBkYXRlQ29udGVudCgpLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCksdGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHk9IiIpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnRoaXMuX21hcCYmdGhpcy5fcHJldkNvbnRlbnQhPT10aGlzLl9jb250ZW50JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRlbnQmJih0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MPXRoaXMuX2NvbnRlbnQsdGhpcy5fcHJldkNvbnRlbnQ9dGhpcy5fY29udGVudCx0aGlzLl9sYWJlbFdpZHRoPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCl9LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTt0aGlzLl9zZXRQb3NpdGlvbih0KX0sX2dldEljb25IZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlLm9wdGlvbnMuaWNvbj90aGlzLl9zb3VyY2Uub3B0aW9ucy5pY29uLm9wdGlvbnMuaWNvblNpemVbMV06MH0sX3NldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX21hcCxuPXRoaXMuX2NvbnRhaW5lcixvPWkubGF0TG5nVG9Db250YWluZXJQb2ludChpLmdldENlbnRlcigpKSxzPWkubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQoZSksYT10aGlzLl9nZXREaXJlY3Rpb24oKSxoPXRoaXMuX2xhYmVsV2lkdGgsbD10LnBvaW50KHRoaXMub3B0aW9ucy5vZmZzZXQpLHI9bC55OyJ0b3AiPT09YT8oci09dGhpcy5faXNPbk1hcmtlcigpP3RoaXMuX2dldEljb25IZWlnaHQoKTowLGU9ZS5hZGQodC5wb2ludCgtaC8yLHIpKSk6ImJvdHRvbSI9PT1hPyhyKz10aGlzLl9pc09uTWFya2VyP3RoaXMuX2dldEljb25IZWlnaHQoKTowLGU9ZS5hZGQodC5wb2ludCgtaC8yLHIpKSk6InJpZ2h0Ij09PWF8fCJhdXRvIj09PWEmJnMueDxvLng/KGE9InJpZ2h0IixlPWUuYWRkKGwpKTooYT0ibGVmdCIsZT1lLmFkZCh0LnBvaW50KC1sLngtaCxsLnkpKSksdGhpcy5fc2V0UHJvcGVyQ2xhc3MoZSxhKSx0LkRvbVV0aWwuc2V0UG9zaXRpb24obixlKX0sX2dlbmVyYXRlTGFiZWxDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4ibGVhZmxldC1sYWJlbC0iK3R9LF9zZXRQcm9wZXJDbGFzczpmdW5jdGlvbihlLGkpe2Zvcih2YXIgbj10aGlzLl9tYXAsbz10aGlzLl9jb250YWluZXIscz1pfHx0aGlzLl9nZXREaXJlY3Rpb24oKSxhPShuLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KGUpLG4ubGF0TG5nVG9Db250YWluZXJQb2ludChuLmdldENlbnRlcigpKSx0aGlzLl9nZW5lcmF0ZUxhYmVsQ2xhc3MocykpLGg9MDtoPHRoaXMuX2RpcmVjdGlvbnMubGVuZ3RoO2grKyl7dmFyIGw9dGhpcy5fZGlyZWN0aW9uc1toXTtpZihsIT09cyl7dmFyIHI9dGhpcy5fZ2VuZXJhdGVMYWJlbENsYXNzKGwpO3QuRG9tVXRpbC5yZW1vdmVDbGFzcyhvLHIpfX10LkRvbVV0aWwuYWRkQ2xhc3MobyxhKX0sX2dldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9ufSxfem9vbUFuaW1hdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKS5yb3VuZCgpO3RoaXMuX3NldFBvc2l0aW9uKGUpfSxfb25Nb3ZlRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0ZWQmJiJhdXRvIiE9PXRoaXMuX2dldERpcmVjdGlvbigpfHx0aGlzLl91cGRhdGVQb3NpdGlvbigpfSxfb25WaWV3UmVzZXQ6ZnVuY3Rpb24odCl7dCYmdC5oYXJkJiZ0aGlzLl91cGRhdGUoKX0sX2luaXRJbnRlcmFjdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5jbGlja2FibGUpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcixpPVsiZGJsY2xpY2siLCJtb3VzZWRvd24iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImNvbnRleHRtZW51Il07dC5Eb21VdGlsLmFkZENsYXNzKGUsImxlYWZsZXQtY2xpY2thYmxlIiksdC5Eb21FdmVudC5vbihlLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO2Zvcih2YXIgbj0wO248aS5sZW5ndGg7bisrKXQuRG9tRXZlbnQub24oZSxpW25dLHRoaXMuX2ZpcmVNb3VzZUV2ZW50LHRoaXMpfX0sX3JlbW92ZUludGVyYWN0aW9uOmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLmNsaWNrYWJsZSl7dmFyIGU9dGhpcy5fY29udGFpbmVyLGk9WyJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwiY29udGV4dG1lbnUiXTt0LkRvbVV0aWwucmVtb3ZlQ2xhc3MoZSwibGVhZmxldC1jbGlja2FibGUiKSx0LkRvbUV2ZW50Lm9mZihlLCJjbGljayIsdGhpcy5fb25Nb3VzZUNsaWNrLHRoaXMpO2Zvcih2YXIgbj0wO248aS5sZW5ndGg7bisrKXQuRG9tRXZlbnQub2ZmKGUsaVtuXSx0aGlzLl9maXJlTW91c2VFdmVudCx0aGlzKX19LF9vbk1vdXNlQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5oYXNFdmVudExpc3RlbmVycyhlLnR5cGUpJiZ0LkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihlKSx0aGlzLmZpcmUoZS50eXBlLHtvcmlnaW5hbEV2ZW50OmV9KX0sX2ZpcmVNb3VzZUV2ZW50OmZ1bmN0aW9uKGUpe3RoaXMuZmlyZShlLnR5cGUse29yaWdpbmFsRXZlbnQ6ZX0pLCJjb250ZXh0bWVudSI9PT1lLnR5cGUmJnRoaXMuaGFzRXZlbnRMaXN0ZW5lcnMoZS50eXBlKSYmdC5Eb21FdmVudC5wcmV2ZW50RGVmYXVsdChlKSwibW91c2Vkb3duIiE9PWUudHlwZT90LkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihlKTp0LkRvbUV2ZW50LnByZXZlbnREZWZhdWx0KGUpfX0pO3JldHVybiB0LkJhc2VNYXJrZXJNZXRob2RzPXtzaG93TGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5fbWFwJiYodGhpcy5sYWJlbC5zZXRMYXRMbmcodGhpcy5fbGF0bG5nKSx0aGlzLl9tYXAuc2hvd0xhYmVsKHRoaXMubGFiZWwpKSx0aGlzfSxoaWRlTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5jbG9zZSgpLHRoaXN9LHNldExhYmVsTm9IaWRlOmZ1bmN0aW9uKHQpe3RoaXMuX2xhYmVsTm9IaWRlIT09dCYmKHRoaXMuX2xhYmVsTm9IaWRlPXQsdD8odGhpcy5fcmVtb3ZlTGFiZWxSZXZlYWxIYW5kbGVycygpLHRoaXMuc2hvd0xhYmVsKCkpOih0aGlzLl9hZGRMYWJlbFJldmVhbEhhbmRsZXJzKCksdGhpcy5oaWRlTGFiZWwoKSkpfSxiaW5kTGFiZWw6ZnVuY3Rpb24oaSxuKXt2YXIgbz10aGlzLm9wdGlvbnMuaWNvbj90aGlzLm9wdGlvbnMuaWNvbi5vcHRpb25zLmxhYmVsQW5jaG9yOnRoaXMub3B0aW9ucy5sYWJlbEFuY2hvcixzPXQucG9pbnQobyl8fHQucG9pbnQoMCwwKTtyZXR1cm4gcz1zLmFkZChlLnByb3RvdHlwZS5vcHRpb25zLm9mZnNldCksbiYmbi5vZmZzZXQmJihzPXMuYWRkKG4ub2Zmc2V0KSksbj10LlV0aWwuZXh0ZW5kKHtvZmZzZXQ6c30sbiksdGhpcy5fbGFiZWxOb0hpZGU9bi5ub0hpZGUsdGhpcy5sYWJlbHx8KHRoaXMuX2xhYmVsTm9IaWRlfHx0aGlzLl9hZGRMYWJlbFJldmVhbEhhbmRsZXJzKCksdGhpcy5vbigicmVtb3ZlIix0aGlzLmhpZGVMYWJlbCx0aGlzKS5vbigibW92ZSIsdGhpcy5fbW92ZUxhYmVsLHRoaXMpLm9uKCJhZGQiLHRoaXMuX29uTWFya2VyQWRkLHRoaXMpLHRoaXMuX2hhc0xhYmVsSGFuZGxlcnM9ITApLHRoaXMubGFiZWw9bmV3IGUobix0aGlzKS5zZXRDb250ZW50KGkpLHRoaXN9LHVuYmluZExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJih0aGlzLmhpZGVMYWJlbCgpLHRoaXMubGFiZWw9bnVsbCx0aGlzLl9oYXNMYWJlbEhhbmRsZXJzJiYodGhpcy5fbGFiZWxOb0hpZGV8fHRoaXMuX3JlbW92ZUxhYmVsUmV2ZWFsSGFuZGxlcnMoKSx0aGlzLm9mZigicmVtb3ZlIix0aGlzLmhpZGVMYWJlbCx0aGlzKS5vZmYoIm1vdmUiLHRoaXMuX21vdmVMYWJlbCx0aGlzKS5vZmYoImFkZCIsdGhpcy5fb25NYXJrZXJBZGQsdGhpcykpLHRoaXMuX2hhc0xhYmVsSGFuZGxlcnM9ITEpLHRoaXN9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnNldENvbnRlbnQodCl9LGdldExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWx9LF9vbk1hcmtlckFkZDpmdW5jdGlvbigpe3RoaXMuX2xhYmVsTm9IaWRlJiZ0aGlzLnNob3dMYWJlbCgpfSxfYWRkTGFiZWxSZXZlYWxIYW5kbGVyczpmdW5jdGlvbigpe3RoaXMub24oIm1vdXNlb3ZlciIsdGhpcy5zaG93TGFiZWwsdGhpcykub24oIm1vdXNlb3V0Iix0aGlzLmhpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub24oImNsaWNrIix0aGlzLnNob3dMYWJlbCx0aGlzKX0sX3JlbW92ZUxhYmVsUmV2ZWFsSGFuZGxlcnM6ZnVuY3Rpb24oKXt0aGlzLm9mZigibW91c2VvdmVyIix0aGlzLnNob3dMYWJlbCx0aGlzKS5vZmYoIm1vdXNlb3V0Iix0aGlzLmhpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub2ZmKCJjbGljayIsdGhpcy5zaG93TGFiZWwsdGhpcyl9LF9tb3ZlTGFiZWw6ZnVuY3Rpb24odCl7dGhpcy5sYWJlbC5zZXRMYXRMbmcodC5sYXRsbmcpfX0sdC5JY29uLkRlZmF1bHQubWVyZ2VPcHRpb25zKHtsYWJlbEFuY2hvcjpuZXcgdC5Qb2ludCg5LC0yMCl9KSx0Lk1hcmtlci5tZXJnZU9wdGlvbnMoe2ljb246bmV3IHQuSWNvbi5EZWZhdWx0fSksdC5NYXJrZXIuaW5jbHVkZSh0LkJhc2VNYXJrZXJNZXRob2RzKSx0Lk1hcmtlci5pbmNsdWRlKHtfb3JpZ2luYWxVcGRhdGVaSW5kZXg6dC5NYXJrZXIucHJvdG90eXBlLl91cGRhdGVaSW5kZXgsX3VwZGF0ZVpJbmRleDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl96SW5kZXgrdDt0aGlzLl9vcmlnaW5hbFVwZGF0ZVpJbmRleCh0KSx0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLnVwZGF0ZVpJbmRleChlKX0sX29yaWdpbmFsU2V0T3BhY2l0eTp0Lk1hcmtlci5wcm90b3R5cGUuc2V0T3BhY2l0eSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQsZSl7dGhpcy5vcHRpb25zLmxhYmVsSGFzU2VtaVRyYW5zcGFyZW5jeT1lLHRoaXMuX29yaWdpbmFsU2V0T3BhY2l0eSh0KX0sX29yaWdpbmFsVXBkYXRlT3BhY2l0eTp0Lk1hcmtlci5wcm90b3R5cGUuX3VwZGF0ZU9wYWNpdHksX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD0wPT09dGhpcy5vcHRpb25zLm9wYWNpdHk/MDoxO3RoaXMuX29yaWdpbmFsVXBkYXRlT3BhY2l0eSgpLHRoaXMubGFiZWwmJnRoaXMubGFiZWwuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMubGFiZWxIYXNTZW1pVHJhbnNwYXJlbmN5P3RoaXMub3B0aW9ucy5vcGFjaXR5OnQpfSxfb3JpZ2luYWxTZXRMYXRMbmc6dC5NYXJrZXIucHJvdG90eXBlLnNldExhdExuZyxzZXRMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGFiZWwmJiF0aGlzLl9sYWJlbE5vSGlkZSYmdGhpcy5oaWRlTGFiZWwoKSx0aGlzLl9vcmlnaW5hbFNldExhdExuZyh0KX19KSx0LkNpcmNsZU1hcmtlci5tZXJnZU9wdGlvbnMoe2xhYmVsQW5jaG9yOm5ldyB0LlBvaW50KDAsMCl9KSx0LkNpcmNsZU1hcmtlci5pbmNsdWRlKHQuQmFzZU1hcmtlck1ldGhvZHMpLHQuUGF0aC5pbmNsdWRlKHtiaW5kTGFiZWw6ZnVuY3Rpb24oaSxuKXtyZXR1cm4gdGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5vcHRpb25zPT09bnx8KHRoaXMubGFiZWw9bmV3IGUobix0aGlzKSksdGhpcy5sYWJlbC5zZXRDb250ZW50KGkpLHRoaXMuX3Nob3dMYWJlbEFkZGVkfHwodGhpcy5vbigibW91c2VvdmVyIix0aGlzLl9zaG93TGFiZWwsdGhpcykub24oIm1vdXNlbW92ZSIsdGhpcy5fbW92ZUxhYmVsLHRoaXMpLm9uKCJtb3VzZW91dCByZW1vdmUiLHRoaXMuX2hpZGVMYWJlbCx0aGlzKSx0LkJyb3dzZXIudG91Y2gmJnRoaXMub24oImNsaWNrIix0aGlzLl9zaG93TGFiZWwsdGhpcyksdGhpcy5fc2hvd0xhYmVsQWRkZWQ9ITApLHRoaXN9LHVuYmluZExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWwmJih0aGlzLl9oaWRlTGFiZWwoKSx0aGlzLmxhYmVsPW51bGwsdGhpcy5fc2hvd0xhYmVsQWRkZWQ9ITEsdGhpcy5vZmYoIm1vdXNlb3ZlciIsdGhpcy5fc2hvd0xhYmVsLHRoaXMpLm9mZigibW91c2Vtb3ZlIix0aGlzLl9tb3ZlTGFiZWwsdGhpcykub2ZmKCJtb3VzZW91dCByZW1vdmUiLHRoaXMuX2hpZGVMYWJlbCx0aGlzKSksdGhpc30sdXBkYXRlTGFiZWxDb250ZW50OmZ1bmN0aW9uKHQpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuc2V0Q29udGVudCh0KX0sX3Nob3dMYWJlbDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsLnNldExhdExuZyh0LmxhdGxuZyksdGhpcy5fbWFwLnNob3dMYWJlbCh0aGlzLmxhYmVsKX0sX21vdmVMYWJlbDpmdW5jdGlvbih0KXt0aGlzLmxhYmVsLnNldExhdExuZyh0LmxhdGxuZyl9LF9oaWRlTGFiZWw6ZnVuY3Rpb24oKXt0aGlzLmxhYmVsLmNsb3NlKCl9fSksdC5NYXAuaW5jbHVkZSh7c2hvd0xhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZExheWVyKHQpfX0pLHQuRmVhdHVyZUdyb3VwLmluY2x1ZGUoe2NsZWFyTGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kTGFiZWwoKSx0aGlzLmVhY2hMYXllcih0aGlzLnJlbW92ZUxheWVyLHRoaXMpLHRoaXN9LGJpbmRMYWJlbDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmludm9rZSgiYmluZExhYmVsIix0LGUpfSx1bmJpbmRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZSgiaGlkZUxhYmVsIil9LHVwZGF0ZUxhYmVsQ29udGVudDpmdW5jdGlvbih0KXt0aGlzLmludm9rZSgidXBkYXRlTGFiZWxDb250ZW50Iix0KX19KSxlfSx3aW5kb3cpOw=="></script>
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uKGEpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9YSgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYSk7ZWxzZXt2YXIgYjtiPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxiLnByb2o0PWEoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oeyIuL2luY2x1ZGVkUHJvamVjdGlvbnMiOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W2EoIi4vbGliL3Byb2plY3Rpb25zL3RtZXJjIiksYSgiLi9saWIvcHJvamVjdGlvbnMvdXRtIiksYSgiLi9saWIvcHJvamVjdGlvbnMvc3RlcmVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvc3RlcmUiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9zb21lcmMiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9vbWVyYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2xjYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2tyb3ZhayIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2Nhc3MiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9sYWVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvYWVhIiksYSgiLi9saWIvcHJvamVjdGlvbnMvZ25vbSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2NlYSIpLGEoIi4vbGliL3Byb2plY3Rpb25zL2VxYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3BvbHkiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9uem1nIiksYSgiLi9saWIvcHJvamVjdGlvbnMvbWlsbCIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3NpbnUiKSxhKCIuL2xpYi9wcm9qZWN0aW9ucy9tb2xsIiksYSgiLi9saWIvcHJvamVjdGlvbnMvZXFkYyIpLGEoIi4vbGliL3Byb2plY3Rpb25zL3ZhbmRnIiksYSgiLi9saWIvcHJvamVjdGlvbnMvYWVxZCIpLGEoIi4vbGliL3Byb2plY3Rpb25zL29ydGhvIildO2IuZXhwb3J0cz1mdW5jdGlvbihwcm9qNCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3Byb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGEpfSl9fSx7Ii4vbGliL3Byb2plY3Rpb25zL2FlYSI6NDAsIi4vbGliL3Byb2plY3Rpb25zL2FlcWQiOjQxLCIuL2xpYi9wcm9qZWN0aW9ucy9jYXNzIjo0MiwiLi9saWIvcHJvamVjdGlvbnMvY2VhIjo0MywiLi9saWIvcHJvamVjdGlvbnMvZXFjIjo0NCwiLi9saWIvcHJvamVjdGlvbnMvZXFkYyI6NDUsIi4vbGliL3Byb2plY3Rpb25zL2dub20iOjQ3LCIuL2xpYi9wcm9qZWN0aW9ucy9rcm92YWsiOjQ4LCIuL2xpYi9wcm9qZWN0aW9ucy9sYWVhIjo0OSwiLi9saWIvcHJvamVjdGlvbnMvbGNjIjo1MCwiLi9saWIvcHJvamVjdGlvbnMvbWlsbCI6NTMsIi4vbGliL3Byb2plY3Rpb25zL21vbGwiOjU0LCIuL2xpYi9wcm9qZWN0aW9ucy9uem1nIjo1NSwiLi9saWIvcHJvamVjdGlvbnMvb21lcmMiOjU2LCIuL2xpYi9wcm9qZWN0aW9ucy9vcnRobyI6NTcsIi4vbGliL3Byb2plY3Rpb25zL3BvbHkiOjU4LCIuL2xpYi9wcm9qZWN0aW9ucy9zaW51Ijo1OSwiLi9saWIvcHJvamVjdGlvbnMvc29tZXJjIjo2MCwiLi9saWIvcHJvamVjdGlvbnMvc3RlcmUiOjYxLCIuL2xpYi9wcm9qZWN0aW9ucy9zdGVyZWEiOjYyLCIuL2xpYi9wcm9qZWN0aW9ucy90bWVyYyI6NjMsIi4vbGliL3Byb2plY3Rpb25zL3V0bSI6NjQsIi4vbGliL3Byb2plY3Rpb25zL3ZhbmRnIjo2NX1dLDE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBQb2ludChhLGIsYyl7aWYoISh0aGlzIGluc3RhbmNlb2YgUG9pbnQpKXJldHVybiBuZXcgUG9pbnQoYSxiLGMpO2lmKEFycmF5LmlzQXJyYXkoYSkpdGhpcy54PWFbMF0sdGhpcy55PWFbMV0sdGhpcy56PWFbMl18fDA7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGEpdGhpcy54PWEueCx0aGlzLnk9YS55LHRoaXMuej1hLnp8fDA7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEmJiJ1bmRlZmluZWQiPT10eXBlb2YgYil7dmFyIGQ9YS5zcGxpdCgiLCIpO3RoaXMueD1wYXJzZUZsb2F0KGRbMF0sMTApLHRoaXMueT1wYXJzZUZsb2F0KGRbMV0sMTApLHRoaXMuej1wYXJzZUZsb2F0KGRbMl0sMTApfHwwfWVsc2UgdGhpcy54PWEsdGhpcy55PWIsdGhpcy56PWN8fDA7Y29uc29sZS53YXJuKCJwcm9qNC5Qb2ludCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAzLCB1c2UgcHJvajQudG9Qb2ludCIpfXZhciBkPWEoIm1ncnMiKTtQb2ludC5mcm9tTUdSUz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IFBvaW50KGQudG9Qb2ludChhKSl9LFBvaW50LnByb3RvdHlwZS50b01HUlM9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZm9yd2FyZChbdGhpcy54LHRoaXMueV0sYSl9LGIuZXhwb3J0cz1Qb2ludH0se21ncnM6Njh9XSwyOltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gUHJvamVjdGlvbihhLGIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFByb2plY3Rpb24pKXJldHVybiBuZXcgUHJvamVjdGlvbihhKTtiPWJ8fGZ1bmN0aW9uKGEpe2lmKGEpdGhyb3cgYX07dmFyIGM9ZChhKTtpZigib2JqZWN0IiE9dHlwZW9mIGMpcmV0dXJuIHZvaWQgYihhKTt2YXIgZj1nKGMpLGg9UHJvamVjdGlvbi5wcm9qZWN0aW9ucy5nZXQoZi5wcm9qTmFtZSk7aD8oZSh0aGlzLGYpLGUodGhpcyxoKSx0aGlzLmluaXQoKSxiKG51bGwsdGhpcykpOmIoYSl9dmFyIGQ9YSgiLi9wYXJzZUNvZGUiKSxlPWEoIi4vZXh0ZW5kIiksZj1hKCIuL3Byb2plY3Rpb25zIiksZz1hKCIuL2Rlcml2ZUNvbnN0YW50cyIpO1Byb2plY3Rpb24ucHJvamVjdGlvbnM9ZixQcm9qZWN0aW9uLnByb2plY3Rpb25zLnN0YXJ0KCksYi5leHBvcnRzPVByb2plY3Rpb259LHsiLi9kZXJpdmVDb25zdGFudHMiOjMzLCIuL2V4dGVuZCI6MzQsIi4vcGFyc2VDb2RlIjozNywiLi9wcm9qZWN0aW9ucyI6Mzl9XSwzOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1jLngsaD1jLnksaT1jLnp8fDA7Zm9yKGY9MDszPmY7ZisrKWlmKCFifHwyIT09Znx8dm9pZCAwIT09Yy56KXN3aXRjaCgwPT09Zj8oZD1nLGU9IngiKToxPT09Zj8oZD1oLGU9InkiKTooZD1pLGU9InoiKSxhLmF4aXNbZl0pe2Nhc2UiZSI6Y1tlXT1kO2JyZWFrO2Nhc2UidyI6Y1tlXT0tZDticmVhaztjYXNlIm4iOmNbZV09ZDticmVhaztjYXNlInMiOmNbZV09LWQ7YnJlYWs7Y2FzZSJ1Ijp2b2lkIDAhPT1jW2VdJiYoYy56PWQpO2JyZWFrO2Nhc2UiZCI6dm9pZCAwIT09Y1tlXSYmKGMuej0tZCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gY319LHt9XSw0OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS8yLGU9YSgiLi9zaWduIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLmFicyhhKTxkP2E6YS1lKGEpKk1hdGguUEl9fSx7Ii4vc2lnbiI6MjF9XSw1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MipNYXRoLlBJLGU9My4xNDE1OTI2NTM1OSxmPWEoIi4vc2lnbiIpO2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5hYnMoYSk8PWU/YTphLWYoYSkqZH19LHsiLi9zaWduIjoyMX1dLDY6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuIE1hdGguYWJzKGEpPjEmJihhPWE+MT8xOi0xKSxNYXRoLmFzaW4oYSl9fSx7fV0sNzpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMS0uMjUqYSooMSthLzE2KigzKzEuMjUqYSkpfX0se31dLDg6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7cmV0dXJuLjM3NSphKigxKy4yNSphKigxKy40Njg3NSphKSl9fSx7fV0sOTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4uMDU4NTkzNzUqYSphKigxKy43NSphKX19LHt9XSwxMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gYSphKmEqKDM1LzMwNzIpfX0se31dLDExOltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1iKmM7cmV0dXJuIGEvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7Zj1hL2I7Zm9yKHZhciBoPTA7MTU+aDtoKyspaWYoZz0oYS0oYipmLWMqTWF0aC5zaW4oMipmKStkKk1hdGguc2luKDQqZiktZSpNYXRoLnNpbig2KmYpKSkvKGItMipjKk1hdGguY29zKDIqZikrNCpkKk1hdGguY29zKDQqZiktNiplKk1hdGguY29zKDYqZikpLGYrPWcsTWF0aC5hYnMoZyk8PTFlLTEwKXJldHVybiBmO3JldHVybiBOYU59fSx7fV0sMTM6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzI7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9MS0oMS1hKmEpLygyKmEpKk1hdGgubG9nKCgxLWEpLygxK2EpKTtpZihNYXRoLmFicyhNYXRoLmFicyhiKS1jKTwxZS02KXJldHVybiAwPmI/LTEqZDpkO2Zvcih2YXIgZSxmLGcsaCxpPU1hdGguYXNpbiguNSpiKSxqPTA7MzA+ajtqKyspaWYoZj1NYXRoLnNpbihpKSxnPU1hdGguY29zKGkpLGg9YSpmLGU9TWF0aC5wb3coMS1oKmgsMikvKDIqZykqKGIvKDEtYSphKS1mLygxLWgqaCkrLjUvYSpNYXRoLmxvZygoMS1oKS8oMStoKSkpLGkrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBpO3JldHVybiBOYU59fSx7fV0sMTQ6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMsZCxlKXtyZXR1cm4gYSplLWIqTWF0aC5zaW4oMiplKStjKk1hdGguc2luKDQqZSktZCpNYXRoLnNpbig2KmUpfX0se31dLDE1OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKmI7cmV0dXJuIGMvTWF0aC5zcXJ0KDEtZCpkKX19LHt9XSwxNjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZSxmPS41KmEsZz1kLTIqTWF0aC5hdGFuKGIpLGg9MDsxNT49aDtoKyspaWYoYz1hKk1hdGguc2luKGcpLGU9ZC0yKk1hdGguYXRhbihiKk1hdGgucG93KCgxLWMpLygxK2MpLGYpKS1nLGcrPWUsTWF0aC5hYnMoZSk8PTFlLTEwKXJldHVybiBnO3JldHVybi05OTk5fX0se31dLDE3OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MSxlPS4yNSxmPS4wNDY4NzUsZz0uMDE5NTMxMjUsaD0uMDEwNjgxMTUyMzQzNzUsaT0uNzUsaj0uNDY4NzUsaz0uMDEzMDIwODMzMzMzMzMzMzM0LGw9LjAwNzEyMDc2ODIyOTE2NjY2NyxtPS4zNjQ1ODMzMzMzMzMzMzMzLG49LjAwNTY5NjYxNDU4MzMzMzMzMyxvPS4zMDc2MTcxODc1O2IuZXhwb3J0cz1mdW5jdGlvbihhKXt2YXIgYj1bXTtiWzBdPWQtYSooZSthKihmK2EqKGcrYSpoKSkpLGJbMV09YSooaS1hKihmK2EqKGcrYSpoKSkpO3ZhciBjPWEqYTtyZXR1cm4gYlsyXT1jKihqLWEqKGsrYSpsKSksYyo9YSxiWzNdPWMqKG0tYSpuKSxiWzRdPWMqYSpvLGJ9fSx7fV0sMTg6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuL3BqX21sZm4iKSxlPTFlLTEwLGY9MjA7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGc9MS8oMS1iKSxoPWEsaT1mO2k7LS1pKXt2YXIgaj1NYXRoLnNpbihoKSxrPTEtYipqKmo7aWYoaz0oZChoLGosTWF0aC5jb3MoaCksYyktYSkqKGsqTWF0aC5zcXJ0KGspKSpnLGgtPWssTWF0aC5hYnMoayk8ZSlyZXR1cm4gaH1yZXR1cm4gaH19LHsiLi9wal9tbGZuIjoxOX1dLDE5OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjKj1iLGIqPWIsZFswXSphLWMqKGRbMV0rYiooZFsyXStiKihkWzNdK2IqZFs0XSkpKX19LHt9XSwyMDpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe3ZhciBjO3JldHVybiBhPjFlLTc/KGM9YSpiLCgxLWEqYSkqKGIvKDEtYypjKS0uNS9hKk1hdGgubG9nKCgxLWMpLygxK2MpKSkpOjIqYn19LHt9XSwyMTpbZnVuY3Rpb24oYSxiLGMpe2IuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gMD5hPy0xOjF9fSx7fV0sMjI6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gTWF0aC5wb3coKDEtYSkvKDErYSksYil9fSx7fV0sMjM6W2Z1bmN0aW9uKGEsYixjKXtiLmV4cG9ydHM9ZnVuY3Rpb24oYSl7dmFyIGI9e3g6YVswXSx5OmFbMV19O3JldHVybiBhLmxlbmd0aD4yJiYoYi56PWFbMl0pLGEubGVuZ3RoPjMmJihiLm09YVszXSksYn19LHt9XSwyNDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPU1hdGguUEkvMjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWEqYyxmPS41KmE7cmV0dXJuIGU9TWF0aC5wb3coKDEtZSkvKDErZSksZiksTWF0aC50YW4oLjUqKGQtYikpL2V9fSx7fV0sMjU6W2Z1bmN0aW9uKGEsYixjKXtjLndnczg0PXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiV0dTODQiLGRhdHVtTmFtZToiV0dTODQifSxjLmNoMTkwMz17dG93Z3M4NDoiNjc0LjM3NCwxNS4wNTYsNDA1LjM0NiIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6InN3aXNzIn0sYy5nZ3JzODc9e3Rvd2dzODQ6Ii0xOTkuODcsNzQuNzksMjQ2LjYyIixlbGxpcHNlOiJHUlM4MCIsZGF0dW1OYW1lOiJHcmVla19HZW9kZXRpY19SZWZlcmVuY2VfU3lzdGVtXzE5ODcifSxjLm5hZDgzPXt0b3dnczg0OiIwLDAsMCIsZWxsaXBzZToiR1JTODAiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTk4MyJ9LGMubmFkMjc9e25hZGdyaWRzOiJAY29udXMsQGFsYXNrYSxAbnR2Ml8wLmdzYixAbnR2MV9jYW4uZGF0IixlbGxpcHNlOiJjbHJrNjYiLGRhdHVtTmFtZToiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTkyNyJ9LGMucG90c2RhbT17dG93Z3M4NDoiNjA2LjAsMjMuMCw0MTMuMCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlBvdHNkYW0gUmF1ZW5iZXJnIDE5NTAgREhETiJ9LGMuY2FydGhhZ2U9e3Rvd2dzODQ6Ii0yNjMuMCw2LjAsNDMxLjAiLGVsbGlwc2U6ImNsYXJrODAiLGRhdHVtTmFtZToiQ2FydGhhZ2UgMTkzNCBUdW5pc2lhIn0sYy5oZXJtYW5uc2tvZ2VsPXt0b3dnczg0OiI2NTMuMCwtMjEyLjAsNDQ5LjAiLGVsbGlwc2U6ImJlc3NlbCIsZGF0dW1OYW1lOiJIZXJtYW5uc2tvZ2VsIn0sYy5pcmU2NT17dG93Z3M4NDoiNDgyLjUzMCwtMTMwLjU5Niw1NjQuNTU3LC0xLjA0MiwtMC4yMTQsLTAuNjMxLDguMTUiLGVsbGlwc2U6Im1vZF9haXJ5IixkYXR1bU5hbWU6IklyZWxhbmQgMTk2NSJ9LGMucmFzc2FkaXJhbj17dG93Z3M4NDoiLTEzMy42MywtMTU3LjUsLTE1OC42MiIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJSYXNzYWRpcmFuIn0sYy5uemdkNDk9e3Rvd2dzODQ6IjU5LjQ3LC01LjA0LDE4Ny40NCwwLjQ3LC0wLjEsMS4wMjQsLTQuNTk5MyIsZWxsaXBzZToiaW50bCIsZGF0dW1OYW1lOiJOZXcgWmVhbGFuZCBHZW9kZXRpYyBEYXR1bSAxOTQ5In0sYy5vc2diMzY9e3Rvd2dzODQ6IjQ0Ni40NDgsLTEyNS4xNTcsNTQyLjA2MCwwLjE1MDIsMC4yNDcwLDAuODQyMSwtMjAuNDg5NCIsZWxsaXBzZToiYWlyeSIsZGF0dW1OYW1lOiJBaXJ5IDE4MzAifSxjLnNfanRzaz17dG93Z3M4NDoiNTg5LDc2LDQ4MCIsZWxsaXBzZToiYmVzc2VsIixkYXR1bU5hbWU6IlMtSlRTSyAoRmVycm8pIn0sYy5iZWR1YXJhbT17dG93Z3M4NDoiLTEwNiwtODcsMTg4IixlbGxpcHNlOiJjbHJrODAiLGRhdHVtTmFtZToiQmVkdWFyYW0ifSxjLmd1bnVuZ19zZWdhcmE9e3Rvd2dzODQ6Ii00MDMsNjg0LDQxIixlbGxpcHNlOiJiZXNzZWwiLGRhdHVtTmFtZToiR3VudW5nIFNlZ2FyYSBKYWthcnRhIn0sYy5ybmI3Mj17dG93Z3M4NDoiMTA2Ljg2OSwtNTIuMjk3OCwxMDMuNzI0LC0wLjMzNjU3LDAuNDU2OTU1LC0xLjg0MjE4LDEiLGVsbGlwc2U6ImludGwiLGRhdHVtTmFtZToiUmVzZWF1IE5hdGlvbmFsIEJlbGdlIDE5NzIifX0se31dLDI2OltmdW5jdGlvbihhLGIsYyl7Yy5NRVJJVD17YTo2Mzc4MTM3LHJmOjI5OC4yNTcsZWxsaXBzZU5hbWU6Ik1FUklUIDE5ODMifSxjLlNHUzg1PXthOjYzNzgxMzYscmY6Mjk4LjI1NyxlbGxpcHNlTmFtZToiU292aWV0IEdlb2RldGljIFN5c3RlbSA4NSJ9LGMuR1JTODA9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIyMTAxLGVsbGlwc2VOYW1lOiJHUlMgMTk4MChJVUdHLCAxOTgwKSJ9LGMuSUFVNzY9e2E6NjM3ODE0MCxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJJQVUgMTk3NiJ9LGMuYWlyeT17YTo2Mzc3NTYzLjM5NixiOjYzNTYyNTYuOTEsZWxsaXBzZU5hbWU6IkFpcnkgMTgzMCJ9LGMuQVBMND17YTo2Mzc4MTM3LHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXBwbC4gUGh5c2ljcy4gMTk2NSJ9LGMuTldMOUQ9e2E6NjM3ODE0NSxyZjoyOTguMjUsZWxsaXBzZU5hbWU6Ik5hdmFsIFdlYXBvbnMgTGFiLiwgMTk2NSJ9LGMubW9kX2Fpcnk9e2E6NjM3NzM0MC4xODksYjo2MzU2MDM0LjQ0NixlbGxpcHNlTmFtZToiTW9kaWZpZWQgQWlyeSJ9LGMuYW5kcmFlPXthOjYzNzcxMDQuNDMscmY6MzAwLGVsbGlwc2VOYW1lOiJBbmRyYWUgMTg3NiAoRGVuLiwgSWNsbmQuKSJ9LGMuYXVzdF9TQT17YTo2Mzc4MTYwLHJmOjI5OC4yNSxlbGxpcHNlTmFtZToiQXVzdHJhbGlhbiBOYXRsICYgUy4gQW1lci4gMTk2OSJ9LGMuR1JTNjc9e2E6NjM3ODE2MCxyZjoyOTguMjQ3MTY3NDI3LGVsbGlwc2VOYW1lOiJHUlMgNjcoSVVHRyAxOTY3KSJ9LGMuYmVzc2VsPXthOjYzNzczOTcuMTU1LHJmOjI5OS4xNTI4MTI4LGVsbGlwc2VOYW1lOiJCZXNzZWwgMTg0MSJ9LGMuYmVzc19uYW09e2E6NjM3NzQ4My44NjUscmY6Mjk5LjE1MjgxMjgsZWxsaXBzZU5hbWU6IkJlc3NlbCAxODQxIChOYW1pYmlhKSJ9LGMuY2xyazY2PXthOjYzNzgyMDYuNCxiOjYzNTY1ODMuOCxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4NjYifSxjLmNscms4MD17YTo2Mzc4MjQ5LjE0NSxyZjoyOTMuNDY2MyxlbGxpcHNlTmFtZToiQ2xhcmtlIDE4ODAgbW9kLiJ9LGMuY2xyazU4PXthOjYzNzgyOTMuNjQ1MjA4NzU5LHJmOjI5NC4yNjA2NzYzNjkyNjU0LGVsbGlwc2VOYW1lOiJDbGFya2UgMTg1OCJ9LGMuQ1BNPXthOjYzNzU3MzguNyxyZjozMzQuMjksZWxsaXBzZU5hbWU6IkNvbW0uIGRlcyBQb2lkcyBldCBNZXN1cmVzIDE3OTkifSxjLmRlbG1icj17YTo2Mzc2NDI4LHJmOjMxMS41LGVsbGlwc2VOYW1lOiJEZWxhbWJyZSAxODEwIChCZWxnaXVtKSJ9LGMuZW5nZWxpcz17YTo2Mzc4MTM2LjA1LHJmOjI5OC4yNTY2LGVsbGlwc2VOYW1lOiJFbmdlbGlzIDE5ODUifSxjLmV2cnN0MzA9e2E6NjM3NzI3Ni4zNDUscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTgzMCJ9LGMuZXZyc3Q0OD17YTo2Mzc3MzA0LjA2MyxyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAxOTQ4In0sYy5ldnJzdDU2PXthOjYzNzczMDEuMjQzLHJmOjMwMC44MDE3LGVsbGlwc2VOYW1lOiJFdmVyZXN0IDE5NTYifSxjLmV2cnN0Njk9e2E6NjM3NzI5NS42NjQscmY6MzAwLjgwMTcsZWxsaXBzZU5hbWU6IkV2ZXJlc3QgMTk2OSJ9LGMuZXZyc3RTUz17YTo2Mzc3Mjk4LjU1NixyZjozMDAuODAxNyxlbGxpcHNlTmFtZToiRXZlcmVzdCAoU2FiYWggJiBTYXJhd2FrKSJ9LGMuZnNjaHI2MD17YTo2Mzc4MTY2LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIChNZXJjdXJ5IERhdHVtKSAxOTYwIn0sYy5mc2NocjYwbT17YTo2Mzc4MTU1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJGaXNjaGVyIDE5NjAifSxjLmZzY2hyNjg9e2E6NjM3ODE1MCxyZjoyOTguMyxlbGxpcHNlTmFtZToiRmlzY2hlciAxOTY4In0sYy5oZWxtZXJ0PXthOjYzNzgyMDAscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IkhlbG1lcnQgMTkwNiJ9LGMuaG91Z2g9e2E6NjM3ODI3MCxyZjoyOTcsZWxsaXBzZU5hbWU6IkhvdWdoIn0sYy5pbnRsPXthOjYzNzgzODgscmY6Mjk3LGVsbGlwc2VOYW1lOiJJbnRlcm5hdGlvbmFsIDE5MDkgKEhheWZvcmQpIn0sYy5rYXVsYT17YTo2Mzc4MTYzLHJmOjI5OC4yNCxlbGxpcHNlTmFtZToiS2F1bGEgMTk2MSJ9LGMubGVyY2g9e2E6NjM3ODEzOSxyZjoyOTguMjU3LGVsbGlwc2VOYW1lOiJMZXJjaCAxOTc5In0sYy5tcHJ0cz17YTo2Mzk3MzAwLHJmOjE5MSxlbGxpcHNlTmFtZToiTWF1cGVydGl1cyAxNzM4In0sYy5uZXdfaW50bD17YTo2Mzc4MTU3LjUsYjo2MzU2NzcyLjIsZWxsaXBzZU5hbWU6Ik5ldyBJbnRlcm5hdGlvbmFsIDE5NjcifSxjLnBsZXNzaXM9e2E6NjM3NjUyMyxyZjo2MzU1ODYzLGVsbGlwc2VOYW1lOiJQbGVzc2lzIDE4MTcgKEZyYW5jZSkifSxjLmtyYXNzPXthOjYzNzgyNDUscmY6Mjk4LjMsZWxsaXBzZU5hbWU6IktyYXNzb3Zza3ksIDE5NDIifSxjLlNFYXNpYT17YTo2Mzc4MTU1LGI6NjM1Njc3My4zMjA1LGVsbGlwc2VOYW1lOiJTb3V0aGVhc3QgQXNpYSJ9LGMud2FsYmVjaz17YTo2Mzc2ODk2LGI6NjM1NTgzNC44NDY3LGVsbGlwc2VOYW1lOiJXYWxiZWNrIn0sYy5XR1M2MD17YTo2Mzc4MTY1LHJmOjI5OC4zLGVsbGlwc2VOYW1lOiJXR1MgNjAifSxjLldHUzY2PXthOjYzNzgxNDUscmY6Mjk4LjI1LGVsbGlwc2VOYW1lOiJXR1MgNjYifSxjLldHUzc9e2E6NjM3ODEzNSxyZjoyOTguMjYsZWxsaXBzZU5hbWU6IldHUyA3MiJ9LGMuV0dTODQ9e2E6NjM3ODEzNyxyZjoyOTguMjU3MjIzNTYzLGVsbGlwc2VOYW1lOiJXR1MgODQifSxjLnNwaGVyZT17YTo2MzcwOTk3LGI6NjM3MDk5NyxlbGxpcHNlTmFtZToiTm9ybWFsIFNwaGVyZSAocj02MzcwOTk3KSJ9fSx7fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXtjLmdyZWVud2ljaD0wLGMubGlzYm9uPS05LjEzMTkwNjExMTExMSxjLnBhcmlzPTIuMzM3MjI5MTY2NjY3LGMuYm9nb3RhPS03NC4wODA5MTY2NjY2NjcsYy5tYWRyaWQ9LTMuNjg3OTM4ODg4ODg5LGMucm9tZT0xMi40NTIzMzMzMzMzMzMsYy5iZXJuPTcuNDM5NTgzMzMzMzMzLGMuamFrYXJ0YT0xMDYuODA3NzE5NDQ0NDQ0LGMuZmVycm89LTE3LjY2NjY2NjY2NjY2NyxjLmJydXNzZWxzPTQuMzY3OTc1LGMuc3RvY2tob2xtPTE4LjA1ODI3Nzc3Nzc3OCxjLmF0aGVucz0yMy43MTYzMzc1LGMub3Nsbz0xMC43MjI5MTY2NjY2Njd9LHt9XSwyODpbZnVuY3Rpb24oYSxiLGMpe2MuZnQ9e3RvX21ldGVyOi4zMDQ4fSxjWyJ1cy1mdCJdPXt0b19tZXRlcjoxMjAwLzM5Mzd9fSx7fV0sMjk6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT8oZD1nKGEsYixjKSwzPT09Yy5sZW5ndGg/W2QueCxkLnksZC56XTpbZC54LGQueV0pOmcoYSxiLGMpfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBmP2E6YS5vUHJvaj9hLm9Qcm9qOmYoYSl9ZnVuY3Rpb24gcHJvajQoYSxiLGMpe2E9ZShhKTt2YXIgZixnPSExO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYj8oYj1hLGE9aCxnPSEwKTooInVuZGVmaW5lZCIhPXR5cGVvZiBiLnh8fEFycmF5LmlzQXJyYXkoYikpJiYoYz1iLGI9YSxhPWgsZz0hMCksYj1lKGIpLGM/ZChhLGIsYyk6KGY9e2ZvcndhcmQ6ZnVuY3Rpb24oYyl7cmV0dXJuIGQoYSxiLGMpfSxpbnZlcnNlOmZ1bmN0aW9uKGMpe3JldHVybiBkKGIsYSxjKX19LGcmJihmLm9Qcm9qPWIpLGYpfXZhciBmPWEoIi4vUHJvaiIpLGc9YSgiLi90cmFuc2Zvcm0iKSxoPWYoIldHUzg0Iik7Yi5leHBvcnRzPXByb2o0fSx7Ii4vUHJvaiI6MiwiLi90cmFuc2Zvcm0iOjY2fV0sMzA6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT0xLGY9MixnPTMsaD00LGk9NSxqPTQ4NDgxMzY4MTEwOTUzNmUtMjAsaz0xLjAwMjYsbD0uMzgyNjgzNDMyMzY1MDg5OCxtPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbT8odGhpcy5kYXR1bV90eXBlPWgsdm9pZChhJiYoYS5kYXR1bUNvZGUmJiJub25lIj09PWEuZGF0dW1Db2RlJiYodGhpcy5kYXR1bV90eXBlPWkpLGEuZGF0dW1fcGFyYW1zJiYodGhpcy5kYXR1bV9wYXJhbXM9YS5kYXR1bV9wYXJhbXMubWFwKHBhcnNlRmxvYXQpLDA9PT10aGlzLmRhdHVtX3BhcmFtc1swXSYmMD09PXRoaXMuZGF0dW1fcGFyYW1zWzFdJiYwPT09dGhpcy5kYXR1bV9wYXJhbXNbMl18fCh0aGlzLmRhdHVtX3R5cGU9ZSksdGhpcy5kYXR1bV9wYXJhbXMubGVuZ3RoPjMmJigwPT09dGhpcy5kYXR1bV9wYXJhbXNbM10mJjA9PT10aGlzLmRhdHVtX3BhcmFtc1s0XSYmMD09PXRoaXMuZGF0dW1fcGFyYW1zWzVdJiYwPT09dGhpcy5kYXR1bV9wYXJhbXNbNl18fCh0aGlzLmRhdHVtX3R5cGU9Zix0aGlzLmRhdHVtX3BhcmFtc1szXSo9aix0aGlzLmRhdHVtX3BhcmFtc1s0XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s1XSo9aix0aGlzLmRhdHVtX3BhcmFtc1s2XT10aGlzLmRhdHVtX3BhcmFtc1s2XS8xZTYrMSkpKSx0aGlzLmRhdHVtX3R5cGU9YS5ncmlkcz9nOnRoaXMuZGF0dW1fdHlwZSx0aGlzLmE9YS5hLHRoaXMuYj1hLmIsdGhpcy5lcz1hLmVzLHRoaXMuZXAyPWEuZXAyLHRoaXMuZGF0dW1fdHlwZT09PWcmJih0aGlzLmdyaWRzPWEuZ3JpZHMpKSkpOm5ldyBtKGEpfTttLnByb3RvdHlwZT17Y29tcGFyZV9kYXR1bXM6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZGF0dW1fdHlwZSE9PWEuZGF0dW1fdHlwZT8hMTp0aGlzLmEhPT1hLmF8fE1hdGguYWJzKHRoaXMuZXMtYS5lcyk+NWUtMTE/ITE6dGhpcy5kYXR1bV90eXBlPT09ZT90aGlzLmRhdHVtX3BhcmFtc1swXT09PWEuZGF0dW1fcGFyYW1zWzBdJiZ0aGlzLmRhdHVtX3BhcmFtc1sxXT09PWEuZGF0dW1fcGFyYW1zWzFdJiZ0aGlzLmRhdHVtX3BhcmFtc1syXT09PWEuZGF0dW1fcGFyYW1zWzJdOnRoaXMuZGF0dW1fdHlwZT09PWY/dGhpcy5kYXR1bV9wYXJhbXNbMF09PT1hLmRhdHVtX3BhcmFtc1swXSYmdGhpcy5kYXR1bV9wYXJhbXNbMV09PT1hLmRhdHVtX3BhcmFtc1sxXSYmdGhpcy5kYXR1bV9wYXJhbXNbMl09PT1hLmRhdHVtX3BhcmFtc1syXSYmdGhpcy5kYXR1bV9wYXJhbXNbM109PT1hLmRhdHVtX3BhcmFtc1szXSYmdGhpcy5kYXR1bV9wYXJhbXNbNF09PT1hLmRhdHVtX3BhcmFtc1s0XSYmdGhpcy5kYXR1bV9wYXJhbXNbNV09PT1hLmRhdHVtX3BhcmFtc1s1XSYmdGhpcy5kYXR1bV9wYXJhbXNbNl09PT1hLmRhdHVtX3BhcmFtc1s2XTp0aGlzLmRhdHVtX3R5cGU9PT1nfHxhLmRhdHVtX3R5cGU9PT1nP3RoaXMubmFkZ3JpZHM9PT1hLm5hZGdyaWRzOiEwfSxnZW9kZXRpY190b19nZW9jZW50cmljOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9YS54LGs9YS55LGw9YS56P2EuejowLG09MDtpZigtZD5rJiZrPi0xLjAwMSpkKWs9LWQ7ZWxzZSBpZihrPmQmJjEuMDAxKmQ+aylrPWQ7ZWxzZSBpZigtZD5rfHxrPmQpcmV0dXJuIG51bGw7cmV0dXJuIGo+TWF0aC5QSSYmKGotPTIqTWF0aC5QSSksZz1NYXRoLnNpbihrKSxpPU1hdGguY29zKGspLGg9ZypnLGY9dGhpcy5hL01hdGguc3FydCgxLXRoaXMuZXMqaCksYj0oZitsKSppKk1hdGguY29zKGopLGM9KGYrbCkqaSpNYXRoLnNpbihqKSxlPShmKigxLXRoaXMuZXMpK2wpKmcsYS54PWIsYS55PWMsYS56PWUsbX0sZ2VvY2VudHJpY190b19nZW9kZXRpYzpmdW5jdGlvbihhKXt2YXIgYixjLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQ9MWUtMTIsdT10KnQsdj0zMCx3PWEueCx4PWEueSx5PWEuej9hLno6MDtpZihvPSExLGI9TWF0aC5zcXJ0KHcqdyt4KngpLGM9TWF0aC5zcXJ0KHcqdyt4KngreSp5KSxiL3RoaXMuYTx0KXtpZihvPSEwLHE9MCxjL3RoaXMuYTx0KXJldHVybiByPWQsdm9pZChzPS10aGlzLmIpfWVsc2UgcT1NYXRoLmF0YW4yKHgsdyk7ZT15L2MsZj1iL2MsZz0xL01hdGguc3FydCgxLXRoaXMuZXMqKDItdGhpcy5lcykqZipmKSxqPWYqKDEtdGhpcy5lcykqZyxrPWUqZyxwPTA7ZG8gcCsrLGk9dGhpcy5hL01hdGguc3FydCgxLXRoaXMuZXMqayprKSxzPWIqait5KmstaSooMS10aGlzLmVzKmsqayksaD10aGlzLmVzKmkvKGkrcyksZz0xL01hdGguc3FydCgxLWgqKDItaCkqZipmKSxsPWYqKDEtaCkqZyxtPWUqZyxuPW0qai1sKmssaj1sLGs9bTt3aGlsZShuKm4+dSYmdj5wKTtyZXR1cm4gcj1NYXRoLmF0YW4obS9NYXRoLmFicyhsKSksYS54PXEsYS55PXIsYS56PXMsYX0sZ2VvY2VudHJpY190b19nZW9kZXRpY19ub25pdGVyOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGosbSxuLG8scCxxLHIscyx0LHUsdj1hLngsdz1hLnkseD1hLno/YS56OjA7aWYodj1wYXJzZUZsb2F0KHYpLHc9cGFyc2VGbG9hdCh3KSx4PXBhcnNlRmxvYXQoeCksdT0hMSwwIT09diliPU1hdGguYXRhbjIodyx2KTtlbHNlIGlmKHc+MCliPWQ7ZWxzZSBpZigwPncpYj0tZDtlbHNlIGlmKHU9ITAsYj0wLHg+MCljPWQ7ZWxzZXtpZighKDA+eCkpcmV0dXJuIGM9ZCx2b2lkKGU9LXRoaXMuYik7Yz0tZH1yZXR1cm4gZz12KnYrdyp3LGY9TWF0aC5zcXJ0KGcpLGg9eCprLGo9TWF0aC5zcXJ0KGgqaCtnKSxuPWgvaixwPWYvaixvPW4qbipuLGk9eCt0aGlzLmIqdGhpcy5lcDIqbyx0PWYtdGhpcy5hKnRoaXMuZXMqcCpwKnAsbT1NYXRoLnNxcnQoaSppK3QqdCkscT1pL20scj10L20scz10aGlzLmEvTWF0aC5zcXJ0KDEtdGhpcy5lcypxKnEpLGU9cj49bD9mL3ItczotbD49cj9mLy1yLXM6eC9xK3MqKHRoaXMuZXMtMSksdT09PSExJiYoYz1NYXRoLmF0YW4ocS9yKSksYS54PWIsYS55PWMsYS56PWUsYX0sZ2VvY2VudHJpY190b193Z3M4NDpmdW5jdGlvbihhKXtpZih0aGlzLmRhdHVtX3R5cGU9PT1lKWEueCs9dGhpcy5kYXR1bV9wYXJhbXNbMF0sYS55Kz10aGlzLmRhdHVtX3BhcmFtc1sxXSxhLnorPXRoaXMuZGF0dW1fcGFyYW1zWzJdO2Vsc2UgaWYodGhpcy5kYXR1bV90eXBlPT09Zil7dmFyIGI9dGhpcy5kYXR1bV9wYXJhbXNbMF0sYz10aGlzLmRhdHVtX3BhcmFtc1sxXSxkPXRoaXMuZGF0dW1fcGFyYW1zWzJdLGc9dGhpcy5kYXR1bV9wYXJhbXNbM10saD10aGlzLmRhdHVtX3BhcmFtc1s0XSxpPXRoaXMuZGF0dW1fcGFyYW1zWzVdLGo9dGhpcy5kYXR1bV9wYXJhbXNbNl0saz1qKihhLngtaSphLnkraCphLnopK2IsbD1qKihpKmEueCthLnktZyphLnopK2MsbT1qKigtaCphLngrZyphLnkrYS56KStkO2EueD1rLGEueT1sLGEuej1tfX0sZ2VvY2VudHJpY19mcm9tX3dnczg0OmZ1bmN0aW9uKGEpe2lmKHRoaXMuZGF0dW1fdHlwZT09PWUpYS54LT10aGlzLmRhdHVtX3BhcmFtc1swXSxhLnktPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGEuei09dGhpcy5kYXR1bV9wYXJhbXNbMl07ZWxzZSBpZih0aGlzLmRhdHVtX3R5cGU9PT1mKXt2YXIgYj10aGlzLmRhdHVtX3BhcmFtc1swXSxjPXRoaXMuZGF0dW1fcGFyYW1zWzFdLGQ9dGhpcy5kYXR1bV9wYXJhbXNbMl0sZz10aGlzLmRhdHVtX3BhcmFtc1szXSxoPXRoaXMuZGF0dW1fcGFyYW1zWzRdLGk9dGhpcy5kYXR1bV9wYXJhbXNbNV0saj10aGlzLmRhdHVtX3BhcmFtc1s2XSxrPShhLngtYikvaixsPShhLnktYykvaixtPShhLnotZCkvajthLng9aytpKmwtaCptLGEueT0taSprK2wrZyptLGEuej1oKmstZypsK219fX0sYi5leHBvcnRzPW19LHt9XSwzMTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTEsZT0yLGY9MyxnPTUsaD02Mzc4MTM3LGk9LjAwNjY5NDM3OTk5MDE0MTMxNjtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGooYSl7cmV0dXJuIGE9PT1kfHxhPT09ZX12YXIgayxsLG07aWYoYS5jb21wYXJlX2RhdHVtcyhiKSlyZXR1cm4gYztpZihhLmRhdHVtX3R5cGU9PT1nfHxiLmRhdHVtX3R5cGU9PT1nKXJldHVybiBjO3ZhciBuPWEuYSxvPWEuZXMscD1iLmEscT1iLmVzLHI9YS5kYXR1bV90eXBlO2lmKHI9PT1mKWlmKDA9PT10aGlzLmFwcGx5X2dyaWRzaGlmdChhLDAsYykpYS5hPWgsYS5lcz1pO2Vsc2V7aWYoIWEuZGF0dW1fcGFyYW1zKXJldHVybiBhLmE9bixhLmVzPWEuZXMsYztmb3Ioaz0xLGw9MCxtPWEuZGF0dW1fcGFyYW1zLmxlbmd0aDttPmw7bCsrKWsqPWEuZGF0dW1fcGFyYW1zW2xdO2lmKDA9PT1rKXJldHVybiBhLmE9bixhLmVzPWEuZXMsYztyPWEuZGF0dW1fcGFyYW1zLmxlbmd0aD4zP2U6ZH1yZXR1cm4gYi5kYXR1bV90eXBlPT09ZiYmKGIuYT1oLGIuZXM9aSksKGEuZXMhPT1iLmVzfHxhLmEhPT1iLmF8fGoocil8fGooYi5kYXR1bV90eXBlKSkmJihhLmdlb2RldGljX3RvX2dlb2NlbnRyaWMoYyksaihhLmRhdHVtX3R5cGUpJiZhLmdlb2NlbnRyaWNfdG9fd2dzODQoYyksaihiLmRhdHVtX3R5cGUpJiZiLmdlb2NlbnRyaWNfZnJvbV93Z3M4NChjKSxiLmdlb2NlbnRyaWNfdG9fZ2VvZGV0aWMoYykpLGIuZGF0dW1fdHlwZT09PWYmJnRoaXMuYXBwbHlfZ3JpZHNoaWZ0KGIsMSxjKSxhLmE9bixhLmVzPW8sYi5hPXAsYi5lcz1xLGN9fSx7fV0sMzI6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBiPXRoaXM7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBjPWFyZ3VtZW50c1sxXTsic3RyaW5nIj09dHlwZW9mIGM/IisiPT09Yy5jaGFyQXQoMCk/ZFthXT1mKGFyZ3VtZW50c1sxXSk6ZFthXT1nKGFyZ3VtZW50c1sxXSk6ZFthXT1jfWVsc2UgaWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe0FycmF5LmlzQXJyYXkoYSk/ZC5hcHBseShiLGEpOmQoYSl9KTtpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGEgaW4gZClyZXR1cm4gZFthXX1lbHNlIkVQU0ciaW4gYT9kWyJFUFNHOiIrYS5FUFNHXT1hOiJFU1JJImluIGE/ZFsiRVNSSToiK2EuRVNSSV09YToiSUFVMjAwMCJpbiBhP2RbIklBVTIwMDA6IithLklBVTIwMDBdPWE6Y29uc29sZS5sb2coYSk7cmV0dXJufX12YXIgZT1hKCIuL2dsb2JhbCIpLGY9YSgiLi9wcm9qU3RyaW5nIiksZz1hKCIuL3drdCIpO2UoZCksYi5leHBvcnRzPWR9LHsiLi9nbG9iYWwiOjM1LCIuL3Byb2pTdHJpbmciOjM4LCIuL3drdCI6Njd9XSwzMzpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4vY29uc3RhbnRzL0RhdHVtIiksZT1hKCIuL2NvbnN0YW50cy9FbGxpcHNvaWQiKSxmPWEoIi4vZXh0ZW5kIiksZz1hKCIuL2RhdHVtIiksaD0xZS0xMCxpPS4xNjY2NjY2NjY2NjY2NjY2NixqPS4wNDcyMjIyMjIyMjIyMjIyMixrPS4wMjIxNTYwODQ2NTYwODQ2NTU7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe2lmKGEuZGF0dW1Db2RlJiYibm9uZSIhPT1hLmRhdHVtQ29kZSl7dmFyIGI9ZFthLmRhdHVtQ29kZV07YiYmKGEuZGF0dW1fcGFyYW1zPWIudG93Z3M4ND9iLnRvd2dzODQuc3BsaXQoIiwiKTpudWxsLGEuZWxscHM9Yi5lbGxpcHNlLGEuZGF0dW1OYW1lPWIuZGF0dW1OYW1lP2IuZGF0dW1OYW1lOmEuZGF0dW1Db2RlKX1pZighYS5hKXt2YXIgYz1lW2EuZWxscHNdP2VbYS5lbGxwc106ZS5XR1M4NDtmKGEsYyl9cmV0dXJuIGEucmYmJiFhLmImJihhLmI9KDEtMS9hLnJmKSphLmEpLCgwPT09YS5yZnx8TWF0aC5hYnMoYS5hLWEuYik8aCkmJihhLnNwaGVyZT0hMCxhLmI9YS5hKSxhLmEyPWEuYSphLmEsYS5iMj1hLmIqYS5iLGEuZXM9KGEuYTItYS5iMikvYS5hMixhLmU9TWF0aC5zcXJ0KGEuZXMpLGEuUl9BJiYoYS5hKj0xLWEuZXMqKGkrYS5lcyooaithLmVzKmspKSxhLmEyPWEuYSphLmEsYS5iMj1hLmIqYS5iLGEuZXM9MCksYS5lcDI9KGEuYTItYS5iMikvYS5iMixhLmswfHwoYS5rMD0xKSxhLmF4aXN8fChhLmF4aXM9ImVudSIpLGEuZGF0dW18fChhLmRhdHVtPWcoYSkpLGF9fSx7Ii4vY29uc3RhbnRzL0RhdHVtIjoyNSwiLi9jb25zdGFudHMvRWxsaXBzb2lkIjoyNiwiLi9kYXR1bSI6MzAsIi4vZXh0ZW5kIjozNH1dLDM0OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7YT1hfHx7fTt2YXIgYyxkO2lmKCFiKXJldHVybiBhO2ZvcihkIGluIGIpYz1iW2RdLHZvaWQgMCE9PWMmJihhW2RdPWMpO3JldHVybiBhfX0se31dLDM1OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe2EoIkVQU0c6NDMyNiIsIit0aXRsZT1XR1MgODQgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICtlbGxwcz1XR1M4NCArZGF0dW09V0dTODQgK3VuaXRzPWRlZ3JlZXMiKSxhKCJFUFNHOjQyNjkiLCIrdGl0bGU9TkFEODMgKGxvbmcvbGF0KSArcHJvaj1sb25nbGF0ICthPTYzNzgxMzcuMCArYj02MzU2NzUyLjMxNDE0MDM2ICtlbGxwcz1HUlM4MCArZGF0dW09TkFEODMgK3VuaXRzPWRlZ3JlZXMiKSxhKCJFUFNHOjM4NTciLCIrdGl0bGU9V0dTIDg0IC8gUHNldWRvLU1lcmNhdG9yICtwcm9qPW1lcmMgK2E9NjM3ODEzNyArYj02Mzc4MTM3ICtsYXRfdHM9MC4wICtsb25fMD0wLjAgK3hfMD0wLjAgK3lfMD0wICtrPTEuMCArdW5pdHM9bSArbmFkZ3JpZHM9QG51bGwgK25vX2RlZnMiKSxhLldHUzg0PWFbIkVQU0c6NDMyNiJdLGFbIkVQU0c6Mzc4NSJdPWFbIkVQU0c6Mzg1NyJdLGEuR09PR0xFPWFbIkVQU0c6Mzg1NyJdLGFbIkVQU0c6OTAwOTEzIl09YVsiRVBTRzozODU3Il0sYVsiRVBTRzoxMDIxMTMiXT1hWyJFUFNHOjM4NTciXX19LHt9XSwzNjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBwcm9qND1hKCIuL2NvcmUiKTtwcm9qNC5kZWZhdWx0RGF0dW09IldHUzg0Iixwcm9qNC5Qcm9qPWEoIi4vUHJvaiIpLHByb2o0LldHUzg0PW5ldyBwcm9qNC5Qcm9qKCJXR1M4NCIpLHByb2o0LlBvaW50PWEoIi4vUG9pbnQiKSxwcm9qNC50b1BvaW50PWEoIi4vY29tbW9uL3RvUG9pbnQiKSxwcm9qNC5kZWZzPWEoIi4vZGVmcyIpLHByb2o0LnRyYW5zZm9ybT1hKCIuL3RyYW5zZm9ybSIpLHByb2o0Lm1ncnM9YSgibWdycyIpLHByb2o0LnZlcnNpb249YSgiLi4vcGFja2FnZS5qc29uIikudmVyc2lvbixhKCIuL2luY2x1ZGVkUHJvamVjdGlvbnMiKShwcm9qNCksYi5leHBvcnRzPXByb2o0fSx7Ii4uL3BhY2thZ2UuanNvbiI6NjksIi4vUG9pbnQiOjEsIi4vUHJvaiI6MiwiLi9jb21tb24vdG9Qb2ludCI6MjMsIi4vY29yZSI6MjksIi4vZGVmcyI6MzIsIi4vaW5jbHVkZWRQcm9qZWN0aW9ucyI6Ii4vaW5jbHVkZWRQcm9qZWN0aW9ucyIsIi4vdHJhbnNmb3JtIjo2NixtZ3JzOjY4fV0sMzc6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYX1mdW5jdGlvbiBlKGEpe3JldHVybiBhIGluIGl9ZnVuY3Rpb24gZihhKXt2YXIgYj1bIkdFT0dDUyIsIkdFT0NDUyIsIlBST0pDUyIsIkxPQ0FMX0NTIl07cmV0dXJuIGIucmVkdWNlKGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGIrMSthLmluZGV4T2YoYyl9LDApfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIisiPT09YVswXX1mdW5jdGlvbiBoKGEpe3JldHVybiBkKGEpP2UoYSk/aVthXTpmKGEpP2ooYSk6ZyhhKT9rKGEpOnZvaWQgMDphfXZhciBpPWEoIi4vZGVmcyIpLGo9YSgiLi93a3QiKSxrPWEoIi4vcHJvalN0cmluZyIpO2IuZXhwb3J0cz1ofSx7Ii4vZGVmcyI6MzIsIi4vcHJvalN0cmluZyI6MzgsIi4vd2t0Ijo2N31dLDM4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9LjAxNzQ1MzI5MjUxOTk0MzI5NSxlPWEoIi4vY29uc3RhbnRzL1ByaW1lTWVyaWRpYW4iKSxmPWEoIi4vY29uc3RhbnRzL3VuaXRzIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEpe3ZhciBiPXt9LGM9e307YS5zcGxpdCgiKyIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS50cmltKCl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGF9KS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWEuc3BsaXQoIj0iKTtiLnB1c2goITApLGNbYlswXS50b0xvd2VyQ2FzZSgpXT1iWzFdfSk7dmFyIGcsaCxpLGo9e3Byb2o6InByb2pOYW1lIixkYXR1bToiZGF0dW1Db2RlIixyZjpmdW5jdGlvbihhKXtiLnJmPXBhcnNlRmxvYXQoYSl9LGxhdF8wOmZ1bmN0aW9uKGEpe2IubGF0MD1hKmR9LGxhdF8xOmZ1bmN0aW9uKGEpe2IubGF0MT1hKmR9LGxhdF8yOmZ1bmN0aW9uKGEpe2IubGF0Mj1hKmR9LGxhdF90czpmdW5jdGlvbihhKXtiLmxhdF90cz1hKmR9LGxvbl8wOmZ1bmN0aW9uKGEpe2IubG9uZzA9YSpkfSxsb25fMTpmdW5jdGlvbihhKXtiLmxvbmcxPWEqZH0sbG9uXzI6ZnVuY3Rpb24oYSl7Yi5sb25nMj1hKmR9LGFscGhhOmZ1bmN0aW9uKGEpe2IuYWxwaGE9cGFyc2VGbG9hdChhKSpkfSxsb25jOmZ1bmN0aW9uKGEpe2IubG9uZ2M9YSpkfSx4XzA6ZnVuY3Rpb24oYSl7Yi54MD1wYXJzZUZsb2F0KGEpfSx5XzA6ZnVuY3Rpb24oYSl7Yi55MD1wYXJzZUZsb2F0KGEpfSxrXzA6ZnVuY3Rpb24oYSl7Yi5rMD1wYXJzZUZsb2F0KGEpfSxrOmZ1bmN0aW9uKGEpe2IuazA9cGFyc2VGbG9hdChhKX0sYTpmdW5jdGlvbihhKXtiLmE9cGFyc2VGbG9hdChhKX0sYjpmdW5jdGlvbihhKXtiLmI9cGFyc2VGbG9hdChhKX0scl9hOmZ1bmN0aW9uKCl7Yi5SX0E9ITB9LHpvbmU6ZnVuY3Rpb24oYSl7Yi56b25lPXBhcnNlSW50KGEsMTApfSxzb3V0aDpmdW5jdGlvbigpe2IudXRtU291dGg9ITB9LHRvd2dzODQ6ZnVuY3Rpb24oYSl7Yi5kYXR1bV9wYXJhbXM9YS5zcGxpdCgiLCIpLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VGbG9hdChhKX0pfSx0b19tZXRlcjpmdW5jdGlvbihhKXtiLnRvX21ldGVyPXBhcnNlRmxvYXQoYSl9LHVuaXRzOmZ1bmN0aW9uKGEpe2IudW5pdHM9YSxmW2FdJiYoYi50b19tZXRlcj1mW2FdLnRvX21ldGVyKX0sZnJvbV9ncmVlbndpY2g6ZnVuY3Rpb24oYSl7Yi5mcm9tX2dyZWVud2ljaD1hKmR9LHBtOmZ1bmN0aW9uKGEpe2IuZnJvbV9ncmVlbndpY2g9KGVbYV0/ZVthXTpwYXJzZUZsb2F0KGEpKSpkfSxuYWRncmlkczpmdW5jdGlvbihhKXsiQG51bGwiPT09YT9iLmRhdHVtQ29kZT0ibm9uZSI6Yi5uYWRncmlkcz1hfSxheGlzOmZ1bmN0aW9uKGEpe3ZhciBjPSJld25zdWQiOzM9PT1hLmxlbmd0aCYmLTEhPT1jLmluZGV4T2YoYS5zdWJzdHIoMCwxKSkmJi0xIT09Yy5pbmRleE9mKGEuc3Vic3RyKDEsMSkpJiYtMSE9PWMuaW5kZXhPZihhLnN1YnN0cigyLDEpKSYmKGIuYXhpcz1hKX19O2ZvcihnIGluIGMpaD1jW2ddLGcgaW4gaj8oaT1qW2ddLCJmdW5jdGlvbiI9PXR5cGVvZiBpP2koaCk6YltpXT1oKTpiW2ddPWg7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiLmRhdHVtQ29kZSYmIldHUzg0IiE9PWIuZGF0dW1Db2RlJiYoYi5kYXR1bUNvZGU9Yi5kYXR1bUNvZGUudG9Mb3dlckNhc2UoKSksYn19LHsiLi9jb25zdGFudHMvUHJpbWVNZXJpZGlhbiI6MjcsIi4vY29uc3RhbnRzL3VuaXRzIjoyOH1dLDM5OltmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPWcubGVuZ3RoO3JldHVybiBhLm5hbWVzPyhnW2NdPWEsYS5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2ZbYS50b0xvd2VyQ2FzZSgpXT1jfSksdGhpcyk6KGNvbnNvbGUubG9nKGIpLCEwKX12YXIgZT1bYSgiLi9wcm9qZWN0aW9ucy9tZXJjIiksYSgiLi9wcm9qZWN0aW9ucy9sb25nbGF0IildLGY9e30sZz1bXTtjLmFkZD1kLGMuZ2V0PWZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiExO3ZhciBiPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGZbYl0mJmdbZltiXV0/Z1tmW2JdXTp2b2lkIDB9LGMuc3RhcnQ9ZnVuY3Rpb24oKXtlLmZvckVhY2goZCl9fSx7Ii4vcHJvamVjdGlvbnMvbG9uZ2xhdCI6NTEsIi4vcHJvamVjdGlvbnMvbWVyYyI6NTJ9XSw0MDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPTFlLTEwLGU9YSgiLi4vY29tbW9uL21zZm56IiksZj1hKCIuLi9jb21tb24vcXNmbnoiKSxnPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaD1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXtNYXRoLmFicyh0aGlzLmxhdDErdGhpcy5sYXQyKTxkfHwodGhpcy50ZW1wPXRoaXMuYi90aGlzLmEsdGhpcy5lcz0xLU1hdGgucG93KHRoaXMudGVtcCwyKSx0aGlzLmUzPU1hdGguc3FydCh0aGlzLmVzKSx0aGlzLnNpbl9wbz1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zX3BvPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy50MT10aGlzLnNpbl9wbyx0aGlzLmNvbj10aGlzLnNpbl9wbyx0aGlzLm1zMT1lKHRoaXMuZTMsdGhpcy5zaW5fcG8sdGhpcy5jb3NfcG8pLHRoaXMucXMxPWYodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksdGhpcy5zaW5fcG89TWF0aC5zaW4odGhpcy5sYXQyKSx0aGlzLmNvc19wbz1NYXRoLmNvcyh0aGlzLmxhdDIpLHRoaXMudDI9dGhpcy5zaW5fcG8sdGhpcy5tczI9ZSh0aGlzLmUzLHRoaXMuc2luX3BvLHRoaXMuY29zX3BvKSx0aGlzLnFzMj1mKHRoaXMuZTMsdGhpcy5zaW5fcG8sdGhpcy5jb3NfcG8pLHRoaXMuc2luX3BvPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NfcG89TWF0aC5jb3ModGhpcy5sYXQwKSx0aGlzLnQzPXRoaXMuc2luX3BvLHRoaXMucXMwPWYodGhpcy5lMyx0aGlzLnNpbl9wbyx0aGlzLmNvc19wbyksTWF0aC5hYnModGhpcy5sYXQxLXRoaXMubGF0Mik+ZD90aGlzLm5zMD0odGhpcy5tczEqdGhpcy5tczEtdGhpcy5tczIqdGhpcy5tczIpLyh0aGlzLnFzMi10aGlzLnFzMSk6dGhpcy5uczA9dGhpcy5jb24sdGhpcy5jPXRoaXMubXMxKnRoaXMubXMxK3RoaXMubnMwKnRoaXMucXMxLHRoaXMucmg9dGhpcy5hKk1hdGguc3FydCh0aGlzLmMtdGhpcy5uczAqdGhpcy5xczApL3RoaXMubnMwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTt0aGlzLnNpbl9waGk9TWF0aC5zaW4oYyksdGhpcy5jb3NfcGhpPU1hdGguY29zKGMpO3ZhciBkPWYodGhpcy5lMyx0aGlzLnNpbl9waGksdGhpcy5jb3NfcGhpKSxlPXRoaXMuYSpNYXRoLnNxcnQodGhpcy5jLXRoaXMubnMwKmQpL3RoaXMubnMwLGg9dGhpcy5uczAqZyhiLXRoaXMubG9uZzApLGk9ZSpNYXRoLnNpbihoKSt0aGlzLngwLGo9dGhpcy5yaC1lKk1hdGguY29zKGgpK3RoaXMueTA7cmV0dXJuIGEueD1pLGEueT1qLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGg7cmV0dXJuIGEueC09dGhpcy54MCxhLnk9dGhpcy5yaC1hLnkrdGhpcy55MCx0aGlzLm5zMD49MD8oYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxkPTEpOihiPS1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxkPS0xKSxlPTAsMCE9PWImJihlPU1hdGguYXRhbjIoZCphLngsZCphLnkpKSxkPWIqdGhpcy5uczAvdGhpcy5hLHRoaXMuc3BoZXJlP2g9TWF0aC5hc2luKCh0aGlzLmMtZCpkKS8oMip0aGlzLm5zMCkpOihjPSh0aGlzLmMtZCpkKS90aGlzLm5zMCxoPXRoaXMucGhpMXoodGhpcy5lMyxjKSksZj1nKGUvdGhpcy5uczArdGhpcy5sb25nMCksYS54PWYsYS55PWgsYX0sYy5waGkxej1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGksaj1oKC41KmIpO2lmKGQ+YSlyZXR1cm4gajtmb3IodmFyIGs9YSphLGw9MTsyNT49bDtsKyspaWYoYz1NYXRoLnNpbihqKSxlPU1hdGguY29zKGopLGY9YSpjLGc9MS1mKmYsaT0uNSpnKmcvZSooYi8oMS1rKS1jL2crLjUvYSpNYXRoLmxvZygoMS1mKS8oMStmKSkpLGorPWksTWF0aC5hYnMoaSk8PTFlLTcpcmV0dXJuIGo7cmV0dXJuIG51bGx9LGMubmFtZXM9WyJBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYSIsIkFsYmVycyIsImFlYSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vYXNpbnoiOjYsIi4uL2NvbW1vbi9tc2ZueiI6MTUsIi4uL2NvbW1vbi9xc2ZueiI6MjB9XSw0MTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1NYXRoLlBJLzIsZj0xZS0xMCxnPWEoIi4uL2NvbW1vbi9tbGZuIiksaD1hKCIuLi9jb21tb24vZTBmbiIpLGk9YSgiLi4vY29tbW9uL2UxZm4iKSxqPWEoIi4uL2NvbW1vbi9lMmZuIiksaz1hKCIuLi9jb21tb24vZTNmbiIpLGw9YSgiLi4vY29tbW9uL2dOIiksbT1hKCIuLi9jb21tb24vYXNpbnoiKSxuPWEoIi4uL2NvbW1vbi9pbWxmbiIpO2MuaW5pdD1mdW5jdGlvbigpe3RoaXMuc2luX3AxMj1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zX3AxMj1NYXRoLmNvcyh0aGlzLmxhdDApfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxtLG4sbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEMsRCxFLEYsRyxIPWEueCxJPWEueSxKPU1hdGguc2luKGEueSksSz1NYXRoLmNvcyhhLnkpLEw9ZChILXRoaXMubG9uZzApO3JldHVybiB0aGlzLnNwaGVyZT9NYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PWY/KGEueD10aGlzLngwK3RoaXMuYSooZS1JKSpNYXRoLnNpbihMKSxhLnk9dGhpcy55MC10aGlzLmEqKGUtSSkqTWF0aC5jb3MoTCksYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyhhLng9dGhpcy54MCt0aGlzLmEqKGUrSSkqTWF0aC5zaW4oTCksYS55PXRoaXMueTArdGhpcy5hKihlK0kpKk1hdGguY29zKEwpLGEpOihCPXRoaXMuc2luX3AxMipKK3RoaXMuY29zX3AxMipLKk1hdGguY29zKEwpLHo9TWF0aC5hY29zKEIpLEE9ei9NYXRoLnNpbih6KSxhLng9dGhpcy54MCt0aGlzLmEqQSpLKk1hdGguc2luKEwpLGEueT10aGlzLnkwK3RoaXMuYSpBKih0aGlzLmNvc19wMTIqSi10aGlzLnNpbl9wMTIqSypNYXRoLmNvcyhMKSksYSk6KGI9aCh0aGlzLmVzKSxjPWkodGhpcy5lcyksbT1qKHRoaXMuZXMpLG49ayh0aGlzLmVzKSxNYXRoLmFicyh0aGlzLnNpbl9wMTItMSk8PWY/KG89dGhpcy5hKmcoYixjLG0sbixlKSxwPXRoaXMuYSpnKGIsYyxtLG4sSSksYS54PXRoaXMueDArKG8tcCkqTWF0aC5zaW4oTCksYS55PXRoaXMueTAtKG8tcCkqTWF0aC5jb3MoTCksYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyhvPXRoaXMuYSpnKGIsYyxtLG4sZSkscD10aGlzLmEqZyhiLGMsbSxuLEkpLGEueD10aGlzLngwKyhvK3ApKk1hdGguc2luKEwpLGEueT10aGlzLnkwKyhvK3ApKk1hdGguY29zKEwpLGEpOihxPUovSyxyPWwodGhpcy5hLHRoaXMuZSx0aGlzLnNpbl9wMTIpLHM9bCh0aGlzLmEsdGhpcy5lLEopLHQ9TWF0aC5hdGFuKCgxLXRoaXMuZXMpKnErdGhpcy5lcypyKnRoaXMuc2luX3AxMi8ocypLKSksdT1NYXRoLmF0YW4yKE1hdGguc2luKEwpLHRoaXMuY29zX3AxMipNYXRoLnRhbih0KS10aGlzLnNpbl9wMTIqTWF0aC5jb3MoTCkpLEM9MD09PXU/TWF0aC5hc2luKHRoaXMuY29zX3AxMipNYXRoLnNpbih0KS10aGlzLnNpbl9wMTIqTWF0aC5jb3ModCkpOk1hdGguYWJzKE1hdGguYWJzKHUpLU1hdGguUEkpPD1mPy1NYXRoLmFzaW4odGhpcy5jb3NfcDEyKk1hdGguc2luKHQpLXRoaXMuc2luX3AxMipNYXRoLmNvcyh0KSk6TWF0aC5hc2luKE1hdGguc2luKEwpKk1hdGguY29zKHQpL01hdGguc2luKHUpKSx2PXRoaXMuZSp0aGlzLnNpbl9wMTIvTWF0aC5zcXJ0KDEtdGhpcy5lcyksdz10aGlzLmUqdGhpcy5jb3NfcDEyKk1hdGguY29zKHUpL01hdGguc3FydCgxLXRoaXMuZXMpLHg9dip3LHk9dyp3LEQ9QypDLEU9RCpDLEY9RSpDLEc9RipDLHo9cipDKigxLUQqeSooMS15KS82K0UvOCp4KigxLTIqeSkrRi8xMjAqKHkqKDQtNyp5KS0zKnYqdiooMS03KnkpKS1HLzQ4KngpLGEueD10aGlzLngwK3oqTWF0aC5zaW4odSksYS55PXRoaXMueTAreipNYXRoLmNvcyh1KSxhKSl9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGMsbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEMsRCxFLEYsRyxILEk7aWYodGhpcy5zcGhlcmUpe2lmKGI9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksYj4yKmUqdGhpcy5hKXJldHVybjtyZXR1cm4gYz1iL3RoaXMuYSxvPU1hdGguc2luKGMpLHA9TWF0aC5jb3MoYykscT10aGlzLmxvbmcwLE1hdGguYWJzKGIpPD1mP3I9dGhpcy5sYXQwOihyPW0ocCp0aGlzLnNpbl9wMTIrYS55Km8qdGhpcy5jb3NfcDEyL2IpLHM9TWF0aC5hYnModGhpcy5sYXQwKS1lLHE9ZChNYXRoLmFicyhzKTw9Zj90aGlzLmxhdDA+PTA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCwtYS55KTp0aGlzLmxvbmcwLU1hdGguYXRhbjIoLWEueCxhLnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqbyxiKnRoaXMuY29zX3AxMipwLWEueSp0aGlzLnNpbl9wMTIqbykpKSxhLng9cSxhLnk9cixhfXJldHVybiB0PWgodGhpcy5lcyksdT1pKHRoaXMuZXMpLHY9aih0aGlzLmVzKSx3PWsodGhpcy5lcyksTWF0aC5hYnModGhpcy5zaW5fcDEyLTEpPD1mPyh4PXRoaXMuYSpnKHQsdSx2LHcsZSksYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSx5PXgtYixyPW4oeS90aGlzLmEsdCx1LHYsdykscT1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngsLTEqYS55KSksYS54PXEsYS55PXIsYSk6TWF0aC5hYnModGhpcy5zaW5fcDEyKzEpPD1mPyh4PXRoaXMuYSpnKHQsdSx2LHcsZSksYj1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSx5PWIteCxyPW4oeS90aGlzLmEsdCx1LHYsdykscT1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngsYS55KSksYS54PXEsYS55PXIsYSk6KGI9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksQj1NYXRoLmF0YW4yKGEueCxhLnkpLHo9bCh0aGlzLmEsdGhpcy5lLHRoaXMuc2luX3AxMiksQz1NYXRoLmNvcyhCKSxEPXRoaXMuZSp0aGlzLmNvc19wMTIqQyxFPS1EKkQvKDEtdGhpcy5lcyksRj0zKnRoaXMuZXMqKDEtRSkqdGhpcy5zaW5fcDEyKnRoaXMuY29zX3AxMipDLygxLXRoaXMuZXMpLEc9Yi96LEg9Ry1FKigxK0UpKk1hdGgucG93KEcsMykvNi1GKigxKzMqRSkqTWF0aC5wb3coRyw0KS8yNCxJPTEtRSpIKkgvMi1HKkgqSCpILzYsQT1NYXRoLmFzaW4odGhpcy5zaW5fcDEyKk1hdGguY29zKEgpK3RoaXMuY29zX3AxMipNYXRoLnNpbihIKSpDKSxxPWQodGhpcy5sb25nMCtNYXRoLmFzaW4oTWF0aC5zaW4oQikqTWF0aC5zaW4oSCkvTWF0aC5jb3MoQSkpKSxyPU1hdGguYXRhbigoMS10aGlzLmVzKkkqdGhpcy5zaW5fcDEyL01hdGguc2luKEEpKSpNYXRoLnRhbihBKS8oMS10aGlzLmVzKSksYS54PXEsYS55PXIsYSl9LGMubmFtZXM9WyJBemltdXRoYWxfRXF1aWRpc3RhbnQiLCJhZXFkIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6NiwiLi4vY29tbW9uL2UwZm4iOjcsIi4uL2NvbW1vbi9lMWZuIjo4LCIuLi9jb21tb24vZTJmbiI6OSwiLi4vY29tbW9uL2UzZm4iOjEwLCIuLi9jb21tb24vZ04iOjExLCIuLi9jb21tb24vaW1sZm4iOjEyLCIuLi9jb21tb24vbWxmbiI6MTR9XSw0MjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9tbGZuIiksZT1hKCIuLi9jb21tb24vZTBmbiIpLGY9YSgiLi4vY29tbW9uL2UxZm4iKSxnPWEoIi4uL2NvbW1vbi9lMmZuIiksaD1hKCIuLi9jb21tb24vZTNmbiIpLGk9YSgiLi4vY29tbW9uL2dOIiksaj1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGs9YSgiLi4vY29tbW9uL2FkanVzdF9sYXQiKSxsPWEoIi4uL2NvbW1vbi9pbWxmbiIpLG09TWF0aC5QSS8yLG49MWUtMTA7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zcGhlcmV8fCh0aGlzLmUwPWUodGhpcy5lcyksdGhpcy5lMT1mKHRoaXMuZXMpLHRoaXMuZTI9Zyh0aGlzLmVzKSx0aGlzLmUzPWgodGhpcy5lcyksdGhpcy5tbDA9dGhpcy5hKmQodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDApKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1hLngsZj1hLnk7aWYoZT1qKGUtdGhpcy5sb25nMCksdGhpcy5zcGhlcmUpYj10aGlzLmEqTWF0aC5hc2luKE1hdGguY29zKGYpKk1hdGguc2luKGUpKSxjPXRoaXMuYSooTWF0aC5hdGFuMihNYXRoLnRhbihmKSxNYXRoLmNvcyhlKSktdGhpcy5sYXQwKTtlbHNle3ZhciBnPU1hdGguc2luKGYpLGg9TWF0aC5jb3MoZiksaz1pKHRoaXMuYSx0aGlzLmUsZyksbD1NYXRoLnRhbihmKSpNYXRoLnRhbihmKSxtPWUqTWF0aC5jb3MoZiksbj1tKm0sbz10aGlzLmVzKmgqaC8oMS10aGlzLmVzKSxwPXRoaXMuYSpkKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsZik7Yj1rKm0qKDEtbipsKigxLzYtKDgtbCs4Km8pKm4vMTIwKSksYz1wLXRoaXMubWwwK2sqZy9oKm4qKC41Kyg1LWwrNipvKSpuLzI0KX1yZXR1cm4gYS54PWIrdGhpcy54MCxhLnk9Yyt0aGlzLnkwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55LT10aGlzLnkwO3ZhciBiLGMsZD1hLngvdGhpcy5hLGU9YS55L3RoaXMuYTtpZih0aGlzLnNwaGVyZSl7dmFyIGY9ZSt0aGlzLmxhdDA7Yj1NYXRoLmFzaW4oTWF0aC5zaW4oZikqTWF0aC5jb3MoZCkpLGM9TWF0aC5hdGFuMihNYXRoLnRhbihkKSxNYXRoLmNvcyhmKSl9ZWxzZXt2YXIgZz10aGlzLm1sMC90aGlzLmErZSxoPWwoZyx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKTtpZihNYXRoLmFicyhNYXRoLmFicyhoKS1tKTw9bilyZXR1cm4gYS54PXRoaXMubG9uZzAsYS55PW0sMD5lJiYoYS55Kj0tMSksYTt2YXIgbz1pKHRoaXMuYSx0aGlzLmUsTWF0aC5zaW4oaCkpLHA9bypvKm8vdGhpcy5hL3RoaXMuYSooMS10aGlzLmVzKSxxPU1hdGgucG93KE1hdGgudGFuKGgpLDIpLHI9ZCp0aGlzLmEvbyxzPXIqcjtiPWgtbypNYXRoLnRhbihoKS9wKnIqciooLjUtKDErMypxKSpyKnIvMjQpLGM9ciooMS1zKihxLzMrKDErMypxKSpxKnMvMTUpKS9NYXRoLmNvcyhoKX1yZXR1cm4gYS54PWooYyt0aGlzLmxvbmcwKSxhLnk9ayhiKSxhfSxjLm5hbWVzPVsiQ2Fzc2luaSIsIkNhc3NpbmlfU29sZG5lciIsImNhc3MiXX0seyIuLi9jb21tb24vYWRqdXN0X2xhdCI6NCwiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9lMGZuIjo3LCIuLi9jb21tb24vZTFmbiI6OCwiLi4vY29tbW9uL2UyZm4iOjksIi4uL2NvbW1vbi9lM2ZuIjoxMCwiLi4vY29tbW9uL2dOIjoxMSwiLi4vY29tbW9uL2ltbGZuIjoxMiwiLi4vY29tbW9uL21sZm4iOjE0fV0sNDM6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9YSgiLi4vY29tbW9uL3FzZm56IiksZj1hKCIuLi9jb21tb24vbXNmbnoiKSxnPWEoIi4uL2NvbW1vbi9pcXNmbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZXx8KHRoaXMuazA9Zih0aGlzLmUsTWF0aC5zaW4odGhpcy5sYXRfdHMpLE1hdGguY29zKHRoaXMubGF0X3RzKSkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmPWEueCxnPWEueSxoPWQoZi10aGlzLmxvbmcwKTtpZih0aGlzLnNwaGVyZSliPXRoaXMueDArdGhpcy5hKmgqTWF0aC5jb3ModGhpcy5sYXRfdHMpLGM9dGhpcy55MCt0aGlzLmEqTWF0aC5zaW4oZykvTWF0aC5jb3ModGhpcy5sYXRfdHMpO2Vsc2V7dmFyIGk9ZSh0aGlzLmUsTWF0aC5zaW4oZykpO2I9dGhpcy54MCt0aGlzLmEqdGhpcy5rMCpoLGM9dGhpcy55MCt0aGlzLmEqaSouNS90aGlzLmswfXJldHVybiBhLng9YixhLnk9YyxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjO3JldHVybiB0aGlzLnNwaGVyZT8oYj1kKHRoaXMubG9uZzArYS54L3RoaXMuYS9NYXRoLmNvcyh0aGlzLmxhdF90cykpLGM9TWF0aC5hc2luKGEueS90aGlzLmEqTWF0aC5jb3ModGhpcy5sYXRfdHMpKSk6KGM9Zyh0aGlzLmUsMiphLnkqdGhpcy5rMC90aGlzLmEpLGI9ZCh0aGlzLmxvbmcwK2EueC8odGhpcy5hKnRoaXMuazApKSksYS54PWIsYS55PWMsYX0sYy5uYW1lcz1bImNlYSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vaXFzZm56IjoxMywiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDQ0OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy54MD10aGlzLngwfHwwLHRoaXMueTA9dGhpcy55MHx8MCx0aGlzLmxhdDA9dGhpcy5sYXQwfHwwLHRoaXMubG9uZzA9dGhpcy5sb25nMHx8MCx0aGlzLmxhdF90cz10aGlzLmxhdF90c3x8MCx0aGlzLnRpdGxlPXRoaXMudGl0bGV8fCJFcXVpZGlzdGFudCBDeWxpbmRyaWNhbCAoUGxhdGUgQ2FycmUpIix0aGlzLnJjPU1hdGguY29zKHRoaXMubGF0X3RzKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueSxmPWQoYi10aGlzLmxvbmcwKSxnPWUoYy10aGlzLmxhdDApO3JldHVybiBhLng9dGhpcy54MCt0aGlzLmEqZip0aGlzLnJjLGEueT10aGlzLnkwK3RoaXMuYSpnLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnk7cmV0dXJuIGEueD1kKHRoaXMubG9uZzArKGItdGhpcy54MCkvKHRoaXMuYSp0aGlzLnJjKSksYS55PWUodGhpcy5sYXQwKyhjLXRoaXMueTApL3RoaXMuYSksYX0sYy5uYW1lcz1bIkVxdWlyZWN0YW5ndWxhciIsIkVxdWlkaXN0YW50X0N5bGluZHJpY2FsIiwiZXFjIl19LHsiLi4vY29tbW9uL2FkanVzdF9sYXQiOjQsIi4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1fV0sNDU6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vZTBmbiIpLGU9YSgiLi4vY29tbW9uL2UxZm4iKSxmPWEoIi4uL2NvbW1vbi9lMmZuIiksZz1hKCIuLi9jb21tb24vZTNmbiIpLGg9YSgiLi4vY29tbW9uL21zZm56IiksaT1hKCIuLi9jb21tb24vbWxmbiIpLGo9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxrPWEoIi4uL2NvbW1vbi9hZGp1c3RfbGF0IiksbD1hKCIuLi9jb21tb24vaW1sZm4iKSxtPTFlLTEwO2MuaW5pdD1mdW5jdGlvbigpe01hdGguYWJzKHRoaXMubGF0MSt0aGlzLmxhdDIpPG18fCh0aGlzLmxhdDI9dGhpcy5sYXQyfHx0aGlzLmxhdDEsdGhpcy50ZW1wPXRoaXMuYi90aGlzLmEsdGhpcy5lcz0xLU1hdGgucG93KHRoaXMudGVtcCwyKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMuZTA9ZCh0aGlzLmVzKSx0aGlzLmUxPWUodGhpcy5lcyksdGhpcy5lMj1mKHRoaXMuZXMpLHRoaXMuZTM9Zyh0aGlzLmVzKSx0aGlzLnNpbnBoaT1NYXRoLnNpbih0aGlzLmxhdDEpLHRoaXMuY29zcGhpPU1hdGguY29zKHRoaXMubGF0MSksdGhpcy5tczE9aCh0aGlzLmUsdGhpcy5zaW5waGksdGhpcy5jb3NwaGkpLHRoaXMubWwxPWkodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyx0aGlzLmxhdDEpLE1hdGguYWJzKHRoaXMubGF0MS10aGlzLmxhdDIpPG0/dGhpcy5ucz10aGlzLnNpbnBoaToodGhpcy5zaW5waGk9TWF0aC5zaW4odGhpcy5sYXQyKSx0aGlzLmNvc3BoaT1NYXRoLmNvcyh0aGlzLmxhdDIpLHRoaXMubXMyPWgodGhpcy5lLHRoaXMuc2lucGhpLHRoaXMuY29zcGhpKSx0aGlzLm1sMj1pKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQyKSx0aGlzLm5zPSh0aGlzLm1zMS10aGlzLm1zMikvKHRoaXMubWwyLXRoaXMubWwxKSksdGhpcy5nPXRoaXMubWwxK3RoaXMubXMxL3RoaXMubnMsdGhpcy5tbDA9aSh0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLHRoaXMubGF0MCksdGhpcy5yaD10aGlzLmEqKHRoaXMuZy10aGlzLm1sMCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1hLngsZD1hLnk7aWYodGhpcy5zcGhlcmUpYj10aGlzLmEqKHRoaXMuZy1kKTtlbHNle3ZhciBlPWkodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyxkKTtiPXRoaXMuYSoodGhpcy5nLWUpfXZhciBmPXRoaXMubnMqaihjLXRoaXMubG9uZzApLGc9dGhpcy54MCtiKk1hdGguc2luKGYpLGg9dGhpcy55MCt0aGlzLnJoLWIqTWF0aC5jb3MoZik7cmV0dXJuIGEueD1nLGEueT1oLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXthLngtPXRoaXMueDAsYS55PXRoaXMucmgtYS55K3RoaXMueTA7dmFyIGIsYyxkLGU7dGhpcy5ucz49MD8oYz1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSwKYj0xKTooYz0tTWF0aC5zcXJ0KGEueCphLngrYS55KmEueSksYj0tMSk7dmFyIGY9MDtpZigwIT09YyYmKGY9TWF0aC5hdGFuMihiKmEueCxiKmEueSkpLHRoaXMuc3BoZXJlKXJldHVybiBlPWoodGhpcy5sb25nMCtmL3RoaXMubnMpLGQ9ayh0aGlzLmctYy90aGlzLmEpLGEueD1lLGEueT1kLGE7dmFyIGc9dGhpcy5nLWMvdGhpcy5hO3JldHVybiBkPWwoZyx0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxlPWoodGhpcy5sb25nMCtmL3RoaXMubnMpLGEueD1lLGEueT1kLGF9LGMubmFtZXM9WyJFcXVpZGlzdGFudF9Db25pYyIsImVxZGMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xhdCI6NCwiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9lMGZuIjo3LCIuLi9jb21tb24vZTFmbiI6OCwiLi4vY29tbW9uL2UyZm4iOjksIi4uL2NvbW1vbi9lM2ZuIjoxMCwiLi4vY29tbW9uL2ltbGZuIjoxMiwiLi4vY29tbW9uL21sZm4iOjE0LCIuLi9jb21tb24vbXNmbnoiOjE1fV0sNDY6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzQsZT1hKCIuLi9jb21tb24vc3JhdCIpLGY9TWF0aC5QSS8yLGc9MjA7Yy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5zaW4odGhpcy5sYXQwKSxiPU1hdGguY29zKHRoaXMubGF0MCk7Yio9Yix0aGlzLnJjPU1hdGguc3FydCgxLXRoaXMuZXMpLygxLXRoaXMuZXMqYSphKSx0aGlzLkM9TWF0aC5zcXJ0KDErdGhpcy5lcypiKmIvKDEtdGhpcy5lcykpLHRoaXMucGhpYzA9TWF0aC5hc2luKGEvdGhpcy5DKSx0aGlzLnJhdGV4cD0uNSp0aGlzLkMqdGhpcy5lLHRoaXMuSz1NYXRoLnRhbiguNSp0aGlzLnBoaWMwK2QpLyhNYXRoLnBvdyhNYXRoLnRhbiguNSp0aGlzLmxhdDArZCksdGhpcy5DKSplKHRoaXMuZSphLHRoaXMucmF0ZXhwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnk7cmV0dXJuIGEueT0yKk1hdGguYXRhbih0aGlzLksqTWF0aC5wb3coTWF0aC50YW4oLjUqYytkKSx0aGlzLkMpKmUodGhpcy5lKk1hdGguc2luKGMpLHRoaXMucmF0ZXhwKSktZixhLng9dGhpcy5DKmIsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0xZS0xNCxjPWEueC90aGlzLkMsaD1hLnksaT1NYXRoLnBvdyhNYXRoLnRhbiguNSpoK2QpL3RoaXMuSywxL3RoaXMuQyksaj1nO2o+MCYmKGg9MipNYXRoLmF0YW4oaSplKHRoaXMuZSpNYXRoLnNpbihhLnkpLC0uNSp0aGlzLmUpKS1mLCEoTWF0aC5hYnMoaC1hLnkpPGIpKTstLWopYS55PWg7cmV0dXJuIGo/KGEueD1jLGEueT1oLGEpOm51bGx9LGMubmFtZXM9WyJnYXVzcyJdfSx7Ii4uL2NvbW1vbi9zcmF0IjoyMn1dLDQ3OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKSxlPTFlLTEwLGY9YSgiLi4vY29tbW9uL2FzaW56Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5zaW5fcDE0PU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5jb3NfcDE0PU1hdGguY29zKHRoaXMubGF0MCksdGhpcy5pbmZpbml0eV9kaXN0PTFlMyp0aGlzLmEsdGhpcy5yYz0xfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGcsaCxpLGosayxsPWEueCxtPWEueTtyZXR1cm4gZj1kKGwtdGhpcy5sb25nMCksYj1NYXRoLnNpbihtKSxjPU1hdGguY29zKG0pLGc9TWF0aC5jb3MoZiksaT10aGlzLnNpbl9wMTQqYit0aGlzLmNvc19wMTQqYypnLGg9MSxpPjB8fE1hdGguYWJzKGkpPD1lPyhqPXRoaXMueDArdGhpcy5hKmgqYypNYXRoLnNpbihmKS9pLGs9dGhpcy55MCt0aGlzLmEqaCoodGhpcy5jb3NfcDE0KmItdGhpcy5zaW5fcDE0KmMqZykvaSk6KGo9dGhpcy54MCt0aGlzLmluZmluaXR5X2Rpc3QqYypNYXRoLnNpbihmKSxrPXRoaXMueTArdGhpcy5pbmZpbml0eV9kaXN0Kih0aGlzLmNvc19wMTQqYi10aGlzLnNpbl9wMTQqYypnKSksYS54PWosYS55PWssYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxnLGgsaTtyZXR1cm4gYS54PShhLngtdGhpcy54MCkvdGhpcy5hLGEueT0oYS55LXRoaXMueTApL3RoaXMuYSxhLngvPXRoaXMuazAsYS55Lz10aGlzLmswLChiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpKT8oZz1NYXRoLmF0YW4yKGIsdGhpcy5yYyksYz1NYXRoLnNpbihnKSxlPU1hdGguY29zKGcpLGk9ZihlKnRoaXMuc2luX3AxNCthLnkqYyp0aGlzLmNvc19wMTQvYiksaD1NYXRoLmF0YW4yKGEueCpjLGIqdGhpcy5jb3NfcDE0KmUtYS55KnRoaXMuc2luX3AxNCpjKSxoPWQodGhpcy5sb25nMCtoKSk6KGk9dGhpcy5waGljMCxoPTApLGEueD1oLGEueT1pLGF9LGMubmFtZXM9WyJnbm9tIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6Nn1dLDQ4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmE9NjM3NzM5Ny4xNTUsdGhpcy5lcz0uMDA2Njc0MzcyMjMwNjE0LHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5sYXQwfHwodGhpcy5sYXQwPS44NjM5Mzc5Nzk3MzcxOTMpLHRoaXMubG9uZzB8fCh0aGlzLmxvbmcwPS40MzM0MjM0MzA5MTE5MjUxKSx0aGlzLmswfHwodGhpcy5rMD0uOTk5OSksdGhpcy5zNDU9Ljc4NTM5ODE2MzM5NzQ0OCx0aGlzLnM5MD0yKnRoaXMuczQ1LHRoaXMuZmkwPXRoaXMubGF0MCx0aGlzLmUyPXRoaXMuZXMsdGhpcy5lPU1hdGguc3FydCh0aGlzLmUyKSx0aGlzLmFsZmE9TWF0aC5zcXJ0KDErdGhpcy5lMipNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLmZpMCksNCkvKDEtdGhpcy5lMikpLHRoaXMudXE9MS4wNDIxNjg1NjM4MDQ3NCx0aGlzLnUwPU1hdGguYXNpbihNYXRoLnNpbih0aGlzLmZpMCkvdGhpcy5hbGZhKSx0aGlzLmc9TWF0aC5wb3coKDErdGhpcy5lKk1hdGguc2luKHRoaXMuZmkwKSkvKDEtdGhpcy5lKk1hdGguc2luKHRoaXMuZmkwKSksdGhpcy5hbGZhKnRoaXMuZS8yKSx0aGlzLms9TWF0aC50YW4odGhpcy51MC8yK3RoaXMuczQ1KS9NYXRoLnBvdyhNYXRoLnRhbih0aGlzLmZpMC8yK3RoaXMuczQ1KSx0aGlzLmFsZmEpKnRoaXMuZyx0aGlzLmsxPXRoaXMuazAsdGhpcy5uMD10aGlzLmEqTWF0aC5zcXJ0KDEtdGhpcy5lMikvKDEtdGhpcy5lMipNYXRoLnBvdyhNYXRoLnNpbih0aGlzLmZpMCksMikpLHRoaXMuczA9MS4zNzAwODM0NjI4MTU1NSx0aGlzLm49TWF0aC5zaW4odGhpcy5zMCksdGhpcy5ybzA9dGhpcy5rMSp0aGlzLm4wL01hdGgudGFuKHRoaXMuczApLHRoaXMuYWQ9dGhpcy5zOTAtdGhpcy51cX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGo9YS54LGs9YS55LGw9ZChqLXRoaXMubG9uZzApO3JldHVybiBiPU1hdGgucG93KCgxK3RoaXMuZSpNYXRoLnNpbihrKSkvKDEtdGhpcy5lKk1hdGguc2luKGspKSx0aGlzLmFsZmEqdGhpcy5lLzIpLGM9MiooTWF0aC5hdGFuKHRoaXMuaypNYXRoLnBvdyhNYXRoLnRhbihrLzIrdGhpcy5zNDUpLHRoaXMuYWxmYSkvYiktdGhpcy5zNDUpLGU9LWwqdGhpcy5hbGZhLGY9TWF0aC5hc2luKE1hdGguY29zKHRoaXMuYWQpKk1hdGguc2luKGMpK01hdGguc2luKHRoaXMuYWQpKk1hdGguY29zKGMpKk1hdGguY29zKGUpKSxnPU1hdGguYXNpbihNYXRoLmNvcyhjKSpNYXRoLnNpbihlKS9NYXRoLmNvcyhmKSksaD10aGlzLm4qZyxpPXRoaXMucm8wKk1hdGgucG93KE1hdGgudGFuKHRoaXMuczAvMit0aGlzLnM0NSksdGhpcy5uKS9NYXRoLnBvdyhNYXRoLnRhbihmLzIrdGhpcy5zNDUpLHRoaXMubiksYS55PWkqTWF0aC5jb3MoaCkvMSxhLng9aSpNYXRoLnNpbihoKS8xLHRoaXMuY3plY2h8fChhLnkqPS0xLGEueCo9LTEpLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGo9YS54O2EueD1hLnksYS55PWosdGhpcy5jemVjaHx8KGEueSo9LTEsYS54Kj0tMSksZz1NYXRoLnNxcnQoYS54KmEueCthLnkqYS55KSxmPU1hdGguYXRhbjIoYS55LGEueCksZT1mL01hdGguc2luKHRoaXMuczApLGQ9MiooTWF0aC5hdGFuKE1hdGgucG93KHRoaXMucm8wL2csMS90aGlzLm4pKk1hdGgudGFuKHRoaXMuczAvMit0aGlzLnM0NSkpLXRoaXMuczQ1KSxiPU1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmFkKSpNYXRoLnNpbihkKS1NYXRoLnNpbih0aGlzLmFkKSpNYXRoLmNvcyhkKSpNYXRoLmNvcyhlKSksYz1NYXRoLmFzaW4oTWF0aC5jb3MoZCkqTWF0aC5zaW4oZSkvTWF0aC5jb3MoYikpLGEueD10aGlzLmxvbmcwLWMvdGhpcy5hbGZhLGg9YixpPTA7dmFyIGs9MDtkbyBhLnk9MiooTWF0aC5hdGFuKE1hdGgucG93KHRoaXMuaywtMS90aGlzLmFsZmEpKk1hdGgucG93KE1hdGgudGFuKGIvMit0aGlzLnM0NSksMS90aGlzLmFsZmEpKk1hdGgucG93KCgxK3RoaXMuZSpNYXRoLnNpbihoKSkvKDEtdGhpcy5lKk1hdGguc2luKGgpKSx0aGlzLmUvMikpLXRoaXMuczQ1KSxNYXRoLmFicyhoLWEueSk8MWUtMTAmJihpPTEpLGg9YS55LGsrPTE7d2hpbGUoMD09PWkmJjE1PmspO3JldHVybiBrPj0xNT9udWxsOmF9LGMubmFtZXM9WyJLcm92YWsiLCJrcm92YWsiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NX1dLDQ5OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5QSS8yLGU9TWF0aC5QSS80LGY9MWUtMTAsZz1hKCIuLi9jb21tb24vcXNmbnoiKSxoPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIik7Yy5TX1BPTEU9MSxjLk5fUE9MRT0yLGMuRVFVSVQ9MyxjLk9CTElRPTQsYy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5hYnModGhpcy5sYXQwKTtpZihNYXRoLmFicyhhLWQpPGY/dGhpcy5tb2RlPXRoaXMubGF0MDwwP3RoaXMuU19QT0xFOnRoaXMuTl9QT0xFOk1hdGguYWJzKGEpPGY/dGhpcy5tb2RlPXRoaXMuRVFVSVQ6dGhpcy5tb2RlPXRoaXMuT0JMSVEsdGhpcy5lcz4wKXt2YXIgYjtzd2l0Y2godGhpcy5xcD1nKHRoaXMuZSwxKSx0aGlzLm1tZj0uNS8oMS10aGlzLmVzKSx0aGlzLmFwYT10aGlzLmF1dGhzZXQodGhpcy5lcyksdGhpcy5tb2RlKXtjYXNlIHRoaXMuTl9QT0xFOnRoaXMuZGQ9MTticmVhaztjYXNlIHRoaXMuU19QT0xFOnRoaXMuZGQ9MTticmVhaztjYXNlIHRoaXMuRVFVSVQ6dGhpcy5ycT1NYXRoLnNxcnQoLjUqdGhpcy5xcCksdGhpcy5kZD0xL3RoaXMucnEsdGhpcy54bWY9MSx0aGlzLnltZj0uNSp0aGlzLnFwO2JyZWFrO2Nhc2UgdGhpcy5PQkxJUTp0aGlzLnJxPU1hdGguc3FydCguNSp0aGlzLnFwKSxiPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5zaW5iMT1nKHRoaXMuZSxiKS90aGlzLnFwLHRoaXMuY29zYjE9TWF0aC5zcXJ0KDEtdGhpcy5zaW5iMSp0aGlzLnNpbmIxKSx0aGlzLmRkPU1hdGguY29zKHRoaXMubGF0MCkvKE1hdGguc3FydCgxLXRoaXMuZXMqYipiKSp0aGlzLnJxKnRoaXMuY29zYjEpLHRoaXMueW1mPSh0aGlzLnhtZj10aGlzLnJxKS90aGlzLmRkLHRoaXMueG1mKj10aGlzLmRkfX1lbHNlIHRoaXMubW9kZT09PXRoaXMuT0JMSVEmJih0aGlzLnNpbnBoMD1NYXRoLnNpbih0aGlzLmxhdDApLHRoaXMuY29zcGgwPU1hdGguY29zKHRoaXMubGF0MCkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxpLGosayxsLG0sbixvLHAscT1hLngscj1hLnk7aWYocT1oKHEtdGhpcy5sb25nMCksdGhpcy5zcGhlcmUpe2lmKGs9TWF0aC5zaW4ocikscD1NYXRoLmNvcyhyKSxpPU1hdGguY29zKHEpLHRoaXMubW9kZT09PXRoaXMuT0JMSVF8fHRoaXMubW9kZT09PXRoaXMuRVFVSVQpe2lmKGM9dGhpcy5tb2RlPT09dGhpcy5FUVVJVD8xK3AqaToxK3RoaXMuc2lucGgwKmsrdGhpcy5jb3NwaDAqcCppLGY+PWMpcmV0dXJuIG51bGw7Yz1NYXRoLnNxcnQoMi9jKSxiPWMqcCpNYXRoLnNpbihxKSxjKj10aGlzLm1vZGU9PT10aGlzLkVRVUlUP2s6dGhpcy5jb3NwaDAqay10aGlzLnNpbnBoMCpwKml9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYoaT0taSksTWF0aC5hYnMocit0aGlzLnBoaTApPGYpcmV0dXJuIG51bGw7Yz1lLS41KnIsYz0yKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9NYXRoLmNvcyhjKTpNYXRoLnNpbihjKSksYj1jKk1hdGguc2luKHEpLGMqPWl9fWVsc2V7c3dpdGNoKG09MCxuPTAsbz0wLGk9TWF0aC5jb3MocSksaj1NYXRoLnNpbihxKSxrPU1hdGguc2luKHIpLGw9Zyh0aGlzLmUsayksdGhpcy5tb2RlIT09dGhpcy5PQkxJUSYmdGhpcy5tb2RlIT09dGhpcy5FUVVJVHx8KG09bC90aGlzLnFwLG49TWF0aC5zcXJ0KDEtbSptKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6bz0xK3RoaXMuc2luYjEqbSt0aGlzLmNvc2IxKm4qaTticmVhaztjYXNlIHRoaXMuRVFVSVQ6bz0xK24qaTticmVhaztjYXNlIHRoaXMuTl9QT0xFOm89ZCtyLGw9dGhpcy5xcC1sO2JyZWFrO2Nhc2UgdGhpcy5TX1BPTEU6bz1yLWQsbD10aGlzLnFwK2x9aWYoTWF0aC5hYnMobyk8ZilyZXR1cm4gbnVsbDtzd2l0Y2godGhpcy5tb2RlKXtjYXNlIHRoaXMuT0JMSVE6Y2FzZSB0aGlzLkVRVUlUOm89TWF0aC5zcXJ0KDIvbyksYz10aGlzLm1vZGU9PT10aGlzLk9CTElRP3RoaXMueW1mKm8qKHRoaXMuY29zYjEqbS10aGlzLnNpbmIxKm4qaSk6KG89TWF0aC5zcXJ0KDIvKDErbippKSkpKm0qdGhpcy55bWYsYj10aGlzLnhtZipvKm4qajticmVhaztjYXNlIHRoaXMuTl9QT0xFOmNhc2UgdGhpcy5TX1BPTEU6bD49MD8oYj0obz1NYXRoLnNxcnQobCkpKmosYz1pKih0aGlzLm1vZGU9PT10aGlzLlNfUE9MRT9vOi1vKSk6Yj1jPTB9fXJldHVybiBhLng9dGhpcy5hKmIrdGhpcy54MCxhLnk9dGhpcy5hKmMrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjLGUsZyxpLGosayxsPWEueC90aGlzLmEsbT1hLnkvdGhpcy5hO2lmKHRoaXMuc3BoZXJlKXt2YXIgbixvPTAscD0wO2lmKG49TWF0aC5zcXJ0KGwqbCttKm0pLGM9LjUqbixjPjEpcmV0dXJuIG51bGw7c3dpdGNoKGM9MipNYXRoLmFzaW4oYyksdGhpcy5tb2RlIT09dGhpcy5PQkxJUSYmdGhpcy5tb2RlIT09dGhpcy5FUVVJVHx8KHA9TWF0aC5zaW4oYyksbz1NYXRoLmNvcyhjKSksdGhpcy5tb2RlKXtjYXNlIHRoaXMuRVFVSVQ6Yz1NYXRoLmFicyhuKTw9Zj8wOk1hdGguYXNpbihtKnAvbiksbCo9cCxtPW8qbjticmVhaztjYXNlIHRoaXMuT0JMSVE6Yz1NYXRoLmFicyhuKTw9Zj90aGlzLnBoaTA6TWF0aC5hc2luKG8qdGhpcy5zaW5waDArbSpwKnRoaXMuY29zcGgwL24pLGwqPXAqdGhpcy5jb3NwaDAsbT0oby1NYXRoLnNpbihjKSp0aGlzLnNpbnBoMCkqbjticmVhaztjYXNlIHRoaXMuTl9QT0xFOm09LW0sYz1kLWM7YnJlYWs7Y2FzZSB0aGlzLlNfUE9MRTpjLT1kfWI9MCE9PW18fHRoaXMubW9kZSE9PXRoaXMuRVFVSVQmJnRoaXMubW9kZSE9PXRoaXMuT0JMSVE/TWF0aC5hdGFuMihsLG0pOjB9ZWxzZXtpZihrPTAsdGhpcy5tb2RlPT09dGhpcy5PQkxJUXx8dGhpcy5tb2RlPT09dGhpcy5FUVVJVCl7aWYobC89dGhpcy5kZCxtKj10aGlzLmRkLGo9TWF0aC5zcXJ0KGwqbCttKm0pLGY+ailyZXR1cm4gYS54PTAsYS55PXRoaXMucGhpMCxhO2c9MipNYXRoLmFzaW4oLjUqai90aGlzLnJxKSxlPU1hdGguY29zKGcpLGwqPWc9TWF0aC5zaW4oZyksdGhpcy5tb2RlPT09dGhpcy5PQkxJUT8oaz1lKnRoaXMuc2luYjErbSpnKnRoaXMuY29zYjEvaixpPXRoaXMucXAqayxtPWoqdGhpcy5jb3NiMSplLW0qdGhpcy5zaW5iMSpnKTooaz1tKmcvaixpPXRoaXMucXAqayxtPWoqZSl9ZWxzZSBpZih0aGlzLm1vZGU9PT10aGlzLk5fUE9MRXx8dGhpcy5tb2RlPT09dGhpcy5TX1BPTEUpe2lmKHRoaXMubW9kZT09PXRoaXMuTl9QT0xFJiYobT0tbSksaT1sKmwrbSptLCFpKXJldHVybiBhLng9MCxhLnk9dGhpcy5waGkwLGE7az0xLWkvdGhpcy5xcCx0aGlzLm1vZGU9PT10aGlzLlNfUE9MRSYmKGs9LWspfWI9TWF0aC5hdGFuMihsLG0pLGM9dGhpcy5hdXRobGF0KE1hdGguYXNpbihrKSx0aGlzLmFwYSl9cmV0dXJuIGEueD1oKHRoaXMubG9uZzArYiksYS55PWMsYX0sYy5QMDA9LjMzMzMzMzMzMzMzMzMzMzMsYy5QMDE9LjE3MjIyMjIyMjIyMjIyMjIyLGMuUDAyPS4xMDI1NzkzNjUwNzkzNjUwOCxjLlAxMD0uMDYzODg4ODg4ODg4ODg4ODgsYy5QMTE9LjA2NjQwMjExNjQwMjExNjQsYy5QMjA9LjAxNjQxNTAxMjk0MjE5MTU0MyxjLmF1dGhzZXQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtyZXR1cm4gY1swXT1hKnRoaXMuUDAwLGI9YSphLGNbMF0rPWIqdGhpcy5QMDEsY1sxXT1iKnRoaXMuUDEwLGIqPWEsY1swXSs9Yip0aGlzLlAwMixjWzFdKz1iKnRoaXMuUDExLGNbMl09Yip0aGlzLlAyMCxjfSxjLmF1dGhsYXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hK2E7cmV0dXJuIGErYlswXSpNYXRoLnNpbihjKStiWzFdKk1hdGguc2luKGMrYykrYlsyXSpNYXRoLnNpbihjK2MrYyl9LGMubmFtZXM9WyJMYW1iZXJ0IEF6aW11dGhhbCBFcXVhbCBBcmVhIiwiTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYSIsImxhZWEiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL3FzZm56IjoyMH1dLDUwOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9MWUtMTAsZT1hKCIuLi9jb21tb24vbXNmbnoiKSxmPWEoIi4uL2NvbW1vbi90c2ZueiIpLGc9TWF0aC5QSS8yLGg9YSgiLi4vY29tbW9uL3NpZ24iKSxpPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaj1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmxhdDJ8fCh0aGlzLmxhdDI9dGhpcy5sYXQxKSx0aGlzLmswfHwodGhpcy5rMD0xKSx0aGlzLngwPXRoaXMueDB8fDAsdGhpcy55MD10aGlzLnkwfHwwLCEoTWF0aC5hYnModGhpcy5sYXQxK3RoaXMubGF0Mik8ZCkpe3ZhciBhPXRoaXMuYi90aGlzLmE7dGhpcy5lPU1hdGguc3FydCgxLWEqYSk7dmFyIGI9TWF0aC5zaW4odGhpcy5sYXQxKSxjPU1hdGguY29zKHRoaXMubGF0MSksZz1lKHRoaXMuZSxiLGMpLGg9Zih0aGlzLmUsdGhpcy5sYXQxLGIpLGk9TWF0aC5zaW4odGhpcy5sYXQyKSxqPU1hdGguY29zKHRoaXMubGF0Miksaz1lKHRoaXMuZSxpLGopLGw9Zih0aGlzLmUsdGhpcy5sYXQyLGkpLG09Zih0aGlzLmUsdGhpcy5sYXQwLE1hdGguc2luKHRoaXMubGF0MCkpO01hdGguYWJzKHRoaXMubGF0MS10aGlzLmxhdDIpPmQ/dGhpcy5ucz1NYXRoLmxvZyhnL2spL01hdGgubG9nKGgvbCk6dGhpcy5ucz1iLGlzTmFOKHRoaXMubnMpJiYodGhpcy5ucz1iKSx0aGlzLmYwPWcvKHRoaXMubnMqTWF0aC5wb3coaCx0aGlzLm5zKSksdGhpcy5yaD10aGlzLmEqdGhpcy5mMCpNYXRoLnBvdyhtLHRoaXMubnMpLHRoaXMudGl0bGV8fCh0aGlzLnRpdGxlPSJMYW1iZXJ0IENvbmZvcm1hbCBDb25pYyIpfX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiPWEueCxjPWEueTtNYXRoLmFicygyKk1hdGguYWJzKGMpLU1hdGguUEkpPD1kJiYoYz1oKGMpKihnLTIqZCkpO3ZhciBlLGosaz1NYXRoLmFicyhNYXRoLmFicyhjKS1nKTtpZihrPmQpZT1mKHRoaXMuZSxjLE1hdGguc2luKGMpKSxqPXRoaXMuYSp0aGlzLmYwKk1hdGgucG93KGUsdGhpcy5ucyk7ZWxzZXtpZihrPWMqdGhpcy5ucywwPj1rKXJldHVybiBudWxsO2o9MH12YXIgbD10aGlzLm5zKmkoYi10aGlzLmxvbmcwKTtyZXR1cm4gYS54PXRoaXMuazAqKGoqTWF0aC5zaW4obCkpK3RoaXMueDAsYS55PXRoaXMuazAqKHRoaXMucmgtaipNYXRoLmNvcyhsKSkrdGhpcy55MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixoPShhLngtdGhpcy54MCkvdGhpcy5rMCxrPXRoaXMucmgtKGEueS10aGlzLnkwKS90aGlzLmswO3RoaXMubnM+MD8oYj1NYXRoLnNxcnQoaCpoK2sqayksYz0xKTooYj0tTWF0aC5zcXJ0KGgqaCtrKmspLGM9LTEpO3ZhciBsPTA7aWYoMCE9PWImJihsPU1hdGguYXRhbjIoYypoLGMqaykpLDAhPT1ifHx0aGlzLm5zPjApe2lmKGM9MS90aGlzLm5zLGQ9TWF0aC5wb3coYi8odGhpcy5hKnRoaXMuZjApLGMpLGU9aih0aGlzLmUsZCksLTk5OTk9PT1lKXJldHVybiBudWxsfWVsc2UgZT0tZztyZXR1cm4gZj1pKGwvdGhpcy5ucyt0aGlzLmxvbmcwKSxhLng9ZixhLnk9ZSxhfSxjLm5hbWVzPVsiTGFtYmVydCBUYW5nZW50aWFsIENvbmZvcm1hbCBDb25pYyBQcm9qZWN0aW9uIiwiTGFtYmVydF9Db25mb3JtYWxfQ29uaWMiLCJMYW1iZXJ0X0NvbmZvcm1hbF9Db25pY18yU1AiLCJsY2MiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3NpZ24iOjIxLCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTE6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhfWMuaW5pdD1mdW5jdGlvbigpe30sYy5mb3J3YXJkPWQsYy5pbnZlcnNlPWQsYy5uYW1lcz1bImxvbmdsYXQiLCJpZGVudGl0eSJdfSx7fV0sNTI6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vbXNmbnoiKSxlPU1hdGguUEkvMixmPTFlLTEwLGc9NTcuMjk1Nzc5NTEzMDgyMzIsaD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGk9TWF0aC5QSS80LGo9YSgiLi4vY29tbW9uL3RzZm56Iiksaz1hKCIuLi9jb21tb24vcGhpMnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmIvdGhpcy5hO3RoaXMuZXM9MS1hKmEsIngwImluIHRoaXN8fCh0aGlzLngwPTApLCJ5MCJpbiB0aGlzfHwodGhpcy55MD0wKSx0aGlzLmU9TWF0aC5zcXJ0KHRoaXMuZXMpLHRoaXMubGF0X3RzP3RoaXMuc3BoZXJlP3RoaXMuazA9TWF0aC5jb3ModGhpcy5sYXRfdHMpOnRoaXMuazA9ZCh0aGlzLmUsTWF0aC5zaW4odGhpcy5sYXRfdHMpLE1hdGguY29zKHRoaXMubGF0X3RzKSk6dGhpcy5rMHx8KHRoaXMuaz90aGlzLmswPXRoaXMuazp0aGlzLmswPTEpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS54LGM9YS55O2lmKGMqZz45MCYmLTkwPmMqZyYmYipnPjE4MCYmLTE4MD5iKmcpcmV0dXJuIG51bGw7dmFyIGQsaztpZihNYXRoLmFicyhNYXRoLmFicyhjKS1lKTw9ZilyZXR1cm4gbnVsbDtpZih0aGlzLnNwaGVyZSlkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MCt0aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhNYXRoLnRhbihpKy41KmMpKTtlbHNle3ZhciBsPU1hdGguc2luKGMpLG09aih0aGlzLmUsYyxsKTtkPXRoaXMueDArdGhpcy5hKnRoaXMuazAqaChiLXRoaXMubG9uZzApLGs9dGhpcy55MC10aGlzLmEqdGhpcy5rMCpNYXRoLmxvZyhtKX1yZXR1cm4gYS54PWQsYS55PWssYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1hLngtdGhpcy54MCxmPWEueS10aGlzLnkwO2lmKHRoaXMuc3BoZXJlKWM9ZS0yKk1hdGguYXRhbihNYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKSk7ZWxzZXt2YXIgZz1NYXRoLmV4cCgtZi8odGhpcy5hKnRoaXMuazApKTtpZihjPWsodGhpcy5lLGcpLC05OTk5PT09YylyZXR1cm4gbnVsbH1yZXR1cm4gYj1oKHRoaXMubG9uZzArZC8odGhpcy5hKnRoaXMuazApKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiTWVyY2F0b3IiLCJQb3B1bGFyIFZpc3VhbGlzYXRpb24gUHNldWRvIE1lcmNhdG9yIiwiTWVyY2F0b3JfMVNQIiwiTWVyY2F0b3JfQXV4aWxpYXJ5X1NwaGVyZSIsIm1lcmMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL21zZm56IjoxNSwiLi4vY29tbW9uL3BoaTJ6IjoxNiwiLi4vY29tbW9uL3RzZm56IjoyNH1dLDUzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2FkanVzdF9sb24iKTtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1hLngsYz1hLnksZT1kKGItdGhpcy5sb25nMCksZj10aGlzLngwK3RoaXMuYSplLGc9dGhpcy55MCt0aGlzLmEqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2MvMi41KSkqMS4yNTtyZXR1cm4gYS54PWYsYS55PWcsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe2EueC09dGhpcy54MCxhLnktPXRoaXMueTA7dmFyIGI9ZCh0aGlzLmxvbmcwK2EueC90aGlzLmEpLGM9Mi41KihNYXRoLmF0YW4oTWF0aC5leHAoLjgqYS55L3RoaXMuYSkpLU1hdGguUEkvNCk7cmV0dXJuIGEueD1iLGEueT1jLGF9LGMubmFtZXM9WyJNaWxsZXJfQ3lsaW5kcmljYWwiLCJtaWxsIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjV9XSw1NDpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS54LGM9YS55LGY9ZChiLXRoaXMubG9uZzApLGc9YyxoPU1hdGguUEkqTWF0aC5zaW4oYyksaT0wOyEwO2krKyl7dmFyIGo9LShnK01hdGguc2luKGcpLWgpLygxK01hdGguY29zKGcpKTtpZihnKz1qLE1hdGguYWJzKGopPGUpYnJlYWt9Zy89MixNYXRoLlBJLzItTWF0aC5hYnMoYyk8ZSYmKGY9MCk7dmFyIGs9LjkwMDMxNjMxNjE1OCp0aGlzLmEqZipNYXRoLmNvcyhnKSt0aGlzLngwLGw9MS40MTQyMTM1NjIzNzMxKnRoaXMuYSpNYXRoLnNpbihnKSt0aGlzLnkwO3JldHVybiBhLng9ayxhLnk9bCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzthLngtPXRoaXMueDAsYS55LT10aGlzLnkwLGM9YS55LygxLjQxNDIxMzU2MjM3MzEqdGhpcy5hKSxNYXRoLmFicyhjKT4uOTk5OTk5OTk5OTk5JiYoYz0uOTk5OTk5OTk5OTk5KSxiPU1hdGguYXNpbihjKTt2YXIgZT1kKHRoaXMubG9uZzArYS54LyguOTAwMzE2MzE2MTU4KnRoaXMuYSpNYXRoLmNvcyhiKSkpO2U8LU1hdGguUEkmJihlPS1NYXRoLlBJKSxlPk1hdGguUEkmJihlPU1hdGguUEkpLGM9KDIqYitNYXRoLnNpbigyKmIpKS9NYXRoLlBJLE1hdGguYWJzKGMpPjEmJihjPTEpO3ZhciBmPU1hdGguYXNpbihjKTtyZXR1cm4gYS54PWUsYS55PWYsYX0sYy5uYW1lcz1bIk1vbGx3ZWlkZSIsIm1vbGwiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NX1dLDU1OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9NDg0ODEzNjgxMTA5NTM2ZS0yMDtjLml0ZXJhdGlvbnM9MSxjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLkE9W10sdGhpcy5BWzFdPS42Mzk5MTc1MDczLHRoaXMuQVsyXT0tLjEzNTg3OTc2MTMsdGhpcy5BWzNdPS4wNjMyOTQ0MDksdGhpcy5BWzRdPS0uMDI1MjY4NTMsdGhpcy5BWzVdPS4wMTE3ODc5LHRoaXMuQVs2XT0tLjAwNTUxNjEsdGhpcy5BWzddPS4wMDI2OTA2LHRoaXMuQVs4XT0tLjAwMTMzMyx0aGlzLkFbOV09NjdlLTUsdGhpcy5BWzEwXT0tMzRlLTUsdGhpcy5CX3JlPVtdLHRoaXMuQl9pbT1bXSx0aGlzLkJfcmVbMV09Ljc1NTc4NTMyMjgsdGhpcy5CX2ltWzFdPTAsdGhpcy5CX3JlWzJdPS4yNDkyMDQ2NDYsdGhpcy5CX2ltWzJdPS4wMDMzNzE1MDcsdGhpcy5CX3JlWzNdPS0uMDAxNTQxNzM5LHRoaXMuQl9pbVszXT0uMDQxMDU4NTYsdGhpcy5CX3JlWzRdPS0uMTAxNjI5MDcsdGhpcy5CX2ltWzRdPS4wMTcyNzYwOSx0aGlzLkJfcmVbNV09LS4yNjYyMzQ4OSx0aGlzLkJfaW1bNV09LS4zNjI0OTIxOCx0aGlzLkJfcmVbNl09LS42ODcwOTgzLHRoaXMuQl9pbVs2XT0tMS4xNjUxOTY3LHRoaXMuQ19yZT1bXSx0aGlzLkNfaW09W10sdGhpcy5DX3JlWzFdPTEuMzIzMTI3MDQzOSx0aGlzLkNfaW1bMV09MCx0aGlzLkNfcmVbMl09LS41NzcyNDU3ODksdGhpcy5DX2ltWzJdPS0uMDA3ODA5NTk4LHRoaXMuQ19yZVszXT0uNTA4MzA3NTEzLHRoaXMuQ19pbVszXT0tLjExMjIwODk1Mix0aGlzLkNfcmVbNF09LS4xNTA5NDc2Mix0aGlzLkNfaW1bNF09LjE4MjAwNjAyLHRoaXMuQ19yZVs1XT0xLjAxNDE4MTc5LHRoaXMuQ19pbVs1XT0xLjY0NDk3Njk2LHRoaXMuQ19yZVs2XT0xLjk2NjA1NDksdGhpcy5DX2ltWzZdPTIuNTEyNzY0NSx0aGlzLkQ9W10sdGhpcy5EWzFdPTEuNTYyNzAxNDI0Myx0aGlzLkRbMl09LjUxODU0MDYzOTgsdGhpcy5EWzNdPS0uMDMzMzMwOTgsdGhpcy5EWzRdPS0uMTA1MjkwNix0aGlzLkRbNV09LS4wMzY4NTk0LHRoaXMuRFs2XT0uMDA3MzE3LHRoaXMuRFs3XT0uMDEyMix0aGlzLkRbOF09LjAwMzk0LHRoaXMuRFs5XT0tLjAwMTN9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjPWEueCxlPWEueSxmPWUtdGhpcy5sYXQwLGc9Yy10aGlzLmxvbmcwLGg9Zi9kKjFlLTUsaT1nLGo9MSxrPTA7Zm9yKGI9MTsxMD49YjtiKyspaio9aCxrKz10aGlzLkFbYl0qajt2YXIgbCxtLG49ayxvPWkscD0xLHE9MCxyPTAscz0wO2ZvcihiPTE7Nj49YjtiKyspbD1wKm4tcSpvLG09cSpuK3AqbyxwPWwscT1tLHI9cit0aGlzLkJfcmVbYl0qcC10aGlzLkJfaW1bYl0qcSxzPXMrdGhpcy5CX2ltW2JdKnArdGhpcy5CX3JlW2JdKnE7cmV0dXJuIGEueD1zKnRoaXMuYSt0aGlzLngwLGEueT1yKnRoaXMuYSt0aGlzLnkwLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGUsZj1hLngsZz1hLnksaD1mLXRoaXMueDAsaT1nLXRoaXMueTAsaj1pL3RoaXMuYSxrPWgvdGhpcy5hLGw9MSxtPTAsbj0wLG89MDtmb3IoYj0xOzY+PWI7YisrKWM9bCpqLW0qayxlPW0qaitsKmssbD1jLG09ZSxuPW4rdGhpcy5DX3JlW2JdKmwtdGhpcy5DX2ltW2JdKm0sbz1vK3RoaXMuQ19pbVtiXSpsK3RoaXMuQ19yZVtiXSptO2Zvcih2YXIgcD0wO3A8dGhpcy5pdGVyYXRpb25zO3ArKyl7dmFyIHEscixzPW4sdD1vLHU9aix2PWs7Zm9yKGI9Mjs2Pj1iO2IrKylxPXMqbi10Km8scj10Km4rcypvLHM9cSx0PXIsdSs9KGItMSkqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx2Kz0oYi0xKSoodGhpcy5CX2ltW2JdKnMrdGhpcy5CX3JlW2JdKnQpO3M9MSx0PTA7dmFyIHc9dGhpcy5CX3JlWzFdLHg9dGhpcy5CX2ltWzFdO2ZvcihiPTI7Nj49YjtiKyspcT1zKm4tdCpvLHI9dCpuK3MqbyxzPXEsdD1yLHcrPWIqKHRoaXMuQl9yZVtiXSpzLXRoaXMuQl9pbVtiXSp0KSx4Kz1iKih0aGlzLkJfaW1bYl0qcyt0aGlzLkJfcmVbYl0qdCk7dmFyIHk9dyp3K3gqeDtuPSh1Kncrdip4KS95LG89KHYqdy11KngpL3l9dmFyIHo9bixBPW8sQj0xLEM9MDtmb3IoYj0xOzk+PWI7YisrKUIqPXosQys9dGhpcy5EW2JdKkI7dmFyIEQ9dGhpcy5sYXQwK0MqZCoxZTUsRT10aGlzLmxvbmcwK0E7cmV0dXJuIGEueD1FLGEueT1ELGF9LGMubmFtZXM9WyJOZXdfWmVhbGFuZF9NYXBfR3JpZCIsIm56bWciXX0se31dLDU2OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL3RzZm56IiksZT1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGY9YSgiLi4vY29tbW9uL3BoaTJ6IiksZz1NYXRoLlBJLzIsaD1NYXRoLlBJLzQsaT0xZS0xMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLm5vX29mZj10aGlzLm5vX29mZnx8ITEsdGhpcy5ub19yb3Q9dGhpcy5ub19yb3R8fCExLGlzTmFOKHRoaXMuazApJiYodGhpcy5rMD0xKTt2YXIgYT1NYXRoLnNpbih0aGlzLmxhdDApLGI9TWF0aC5jb3ModGhpcy5sYXQwKSxjPXRoaXMuZSphO3RoaXMuYmw9TWF0aC5zcXJ0KDErdGhpcy5lcy8oMS10aGlzLmVzKSpNYXRoLnBvdyhiLDQpKSx0aGlzLmFsPXRoaXMuYSp0aGlzLmJsKnRoaXMuazAqTWF0aC5zcXJ0KDEtdGhpcy5lcykvKDEtYypjKTt2YXIgZj1kKHRoaXMuZSx0aGlzLmxhdDAsYSksZz10aGlzLmJsL2IqTWF0aC5zcXJ0KCgxLXRoaXMuZXMpLygxLWMqYykpOzE+ZypnJiYoZz0xKTt2YXIgaCxpO2lmKGlzTmFOKHRoaXMubG9uZ2MpKXt2YXIgaj1kKHRoaXMuZSx0aGlzLmxhdDEsTWF0aC5zaW4odGhpcy5sYXQxKSksaz1kKHRoaXMuZSx0aGlzLmxhdDIsTWF0aC5zaW4odGhpcy5sYXQyKSk7dGhpcy5sYXQwPj0wP3RoaXMuZWw9KGcrTWF0aC5zcXJ0KGcqZy0xKSkqTWF0aC5wb3coZix0aGlzLmJsKTp0aGlzLmVsPShnLU1hdGguc3FydChnKmctMSkpKk1hdGgucG93KGYsdGhpcy5ibCk7dmFyIGw9TWF0aC5wb3coaix0aGlzLmJsKSxtPU1hdGgucG93KGssdGhpcy5ibCk7aD10aGlzLmVsL2wsaT0uNSooaC0xL2gpO3ZhciBuPSh0aGlzLmVsKnRoaXMuZWwtbSpsKS8odGhpcy5lbCp0aGlzLmVsK20qbCksbz0obS1sKS8obStsKSxwPWUodGhpcy5sb25nMS10aGlzLmxvbmcyKTt0aGlzLmxvbmcwPS41Kih0aGlzLmxvbmcxK3RoaXMubG9uZzIpLU1hdGguYXRhbihuKk1hdGgudGFuKC41KnRoaXMuYmwqcCkvbykvdGhpcy5ibCx0aGlzLmxvbmcwPWUodGhpcy5sb25nMCk7dmFyIHE9ZSh0aGlzLmxvbmcxLXRoaXMubG9uZzApO3RoaXMuZ2FtbWEwPU1hdGguYXRhbihNYXRoLnNpbih0aGlzLmJsKnEpL2kpLHRoaXMuYWxwaGE9TWF0aC5hc2luKGcqTWF0aC5zaW4odGhpcy5nYW1tYTApKX1lbHNlIGg9dGhpcy5sYXQwPj0wP2crTWF0aC5zcXJ0KGcqZy0xKTpnLU1hdGguc3FydChnKmctMSksdGhpcy5lbD1oKk1hdGgucG93KGYsdGhpcy5ibCksaT0uNSooaC0xL2gpLHRoaXMuZ2FtbWEwPU1hdGguYXNpbihNYXRoLnNpbih0aGlzLmFscGhhKS9nKSx0aGlzLmxvbmcwPXRoaXMubG9uZ2MtTWF0aC5hc2luKGkqTWF0aC50YW4odGhpcy5nYW1tYTApKS90aGlzLmJsO3RoaXMubm9fb2ZmP3RoaXMudWM9MDp0aGlzLmxhdDA+PTA/dGhpcy51Yz10aGlzLmFsL3RoaXMuYmwqTWF0aC5hdGFuMihNYXRoLnNxcnQoZypnLTEpLE1hdGguY29zKHRoaXMuYWxwaGEpKTp0aGlzLnVjPS0xKnRoaXMuYWwvdGhpcy5ibCpNYXRoLmF0YW4yKE1hdGguc3FydChnKmctMSksTWF0aC5jb3ModGhpcy5hbHBoYSkpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxmLGo9YS54LGs9YS55LGw9ZShqLXRoaXMubG9uZzApO2lmKE1hdGguYWJzKE1hdGguYWJzKGspLWcpPD1pKWY9az4wPy0xOjEsYz10aGlzLmFsL3RoaXMuYmwqTWF0aC5sb2coTWF0aC50YW4oaCtmKnRoaXMuZ2FtbWEwKi41KSksYj0tMSpmKmcqdGhpcy5hbC90aGlzLmJsO2Vsc2V7dmFyIG09ZCh0aGlzLmUsayxNYXRoLnNpbihrKSksbj10aGlzLmVsL01hdGgucG93KG0sdGhpcy5ibCksbz0uNSoobi0xL24pLHA9LjUqKG4rMS9uKSxxPU1hdGguc2luKHRoaXMuYmwqbCkscj0obypNYXRoLnNpbih0aGlzLmdhbW1hMCktcSpNYXRoLmNvcyh0aGlzLmdhbW1hMCkpL3A7Yz1NYXRoLmFicyhNYXRoLmFicyhyKS0xKTw9aT9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk6LjUqdGhpcy5hbCpNYXRoLmxvZygoMS1yKS8oMStyKSkvdGhpcy5ibCxiPU1hdGguYWJzKE1hdGguY29zKHRoaXMuYmwqbCkpPD1pP3RoaXMuYWwqdGhpcy5ibCpsOnRoaXMuYWwqTWF0aC5hdGFuMihvKk1hdGguY29zKHRoaXMuZ2FtbWEwKStxKk1hdGguc2luKHRoaXMuZ2FtbWEwKSxNYXRoLmNvcyh0aGlzLmJsKmwpKS90aGlzLmJsfXJldHVybiB0aGlzLm5vX3JvdD8oYS54PXRoaXMueDArYixhLnk9dGhpcy55MCtjKTooYi09dGhpcy51YyxhLng9dGhpcy54MCtjKk1hdGguY29zKHRoaXMuYWxwaGEpK2IqTWF0aC5zaW4odGhpcy5hbHBoYSksYS55PXRoaXMueTArYipNYXRoLmNvcyh0aGlzLmFscGhhKS1jKk1hdGguc2luKHRoaXMuYWxwaGEpKSxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYzt0aGlzLm5vX3JvdD8oYz1hLnktdGhpcy55MCxiPWEueC10aGlzLngwKTooYz0oYS54LXRoaXMueDApKk1hdGguY29zKHRoaXMuYWxwaGEpLShhLnktdGhpcy55MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYj0oYS55LXRoaXMueTApKk1hdGguY29zKHRoaXMuYWxwaGEpKyhhLngtdGhpcy54MCkqTWF0aC5zaW4odGhpcy5hbHBoYSksYis9dGhpcy51Yyk7dmFyIGQ9TWF0aC5leHAoLTEqdGhpcy5ibCpjL3RoaXMuYWwpLGg9LjUqKGQtMS9kKSxqPS41KihkKzEvZCksaz1NYXRoLnNpbih0aGlzLmJsKmIvdGhpcy5hbCksbD0oaypNYXRoLmNvcyh0aGlzLmdhbW1hMCkraCpNYXRoLnNpbih0aGlzLmdhbW1hMCkpL2osbT1NYXRoLnBvdyh0aGlzLmVsL01hdGguc3FydCgoMStsKS8oMS1sKSksMS90aGlzLmJsKTtyZXR1cm4gTWF0aC5hYnMobC0xKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9Zyk6TWF0aC5hYnMobCsxKTxpPyhhLng9dGhpcy5sb25nMCxhLnk9LTEqZyk6KGEueT1mKHRoaXMuZSxtKSxhLng9ZSh0aGlzLmxvbmcwLU1hdGguYXRhbjIoaCpNYXRoLmNvcyh0aGlzLmdhbW1hMCktaypNYXRoLnNpbih0aGlzLmdhbW1hMCksTWF0aC5jb3ModGhpcy5ibCpiL3RoaXMuYWwpKS90aGlzLmJsKSksYX0sYy5uYW1lcz1bIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yIiwiSG90aW5lIE9ibGlxdWUgTWVyY2F0b3IiLCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvcl9BemltdXRoX05hdHVyYWxfT3JpZ2luIiwiSG90aW5lX09ibGlxdWVfTWVyY2F0b3JfQXppbXV0aF9DZW50ZXIiLCJvbWVyYyJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vcGhpMnoiOjE2LCIuLi9jb21tb24vdHNmbnoiOjI0fV0sNTc6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9MWUtMTAsZj1hKCIuLi9jb21tb24vYXNpbnoiKSxnPU1hdGguUEkvMjtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNpbl9wMTQ9TWF0aC5zaW4odGhpcy5sYXQwKSx0aGlzLmNvc19wMTQ9TWF0aC5jb3ModGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnLGgsaSxqLGssbD1hLngsbT1hLnk7cmV0dXJuIGY9ZChsLXRoaXMubG9uZzApLGI9TWF0aC5zaW4obSksYz1NYXRoLmNvcyhtKSxnPU1hdGguY29zKGYpLGk9dGhpcy5zaW5fcDE0KmIrdGhpcy5jb3NfcDE0KmMqZyxoPTEsKGk+MHx8TWF0aC5hYnMoaSk8PWUpJiYoaj10aGlzLmEqaCpjKk1hdGguc2luKGYpLGs9dGhpcy55MCt0aGlzLmEqaCoodGhpcy5jb3NfcDE0KmItdGhpcy5zaW5fcDE0KmMqZykpLGEueD1qLGEueT1rLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGgsaSxqLGssbDtyZXR1cm4gYS54LT10aGlzLngwLGEueS09dGhpcy55MCxiPU1hdGguc3FydChhLngqYS54K2EueSphLnkpLGM9ZihiL3RoaXMuYSksaD1NYXRoLnNpbihjKSxpPU1hdGguY29zKGMpLGs9dGhpcy5sb25nMCxNYXRoLmFicyhiKTw9ZT8obD10aGlzLmxhdDAsYS54PWssYS55PWwsYSk6KGw9ZihpKnRoaXMuc2luX3AxNCthLnkqaCp0aGlzLmNvc19wMTQvYiksaj1NYXRoLmFicyh0aGlzLmxhdDApLWcsTWF0aC5hYnMoaik8PWU/KGs9ZCh0aGlzLmxhdDA+PTA/dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCwtYS55KTp0aGlzLmxvbmcwLU1hdGguYXRhbjIoLWEueCxhLnkpKSxhLng9ayxhLnk9bCxhKTooaz1kKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqaCxiKnRoaXMuY29zX3AxNCppLWEueSp0aGlzLnNpbl9wMTQqaCkpLGEueD1rLGEueT1sLGEpKX0sYy5uYW1lcz1bIm9ydGhvIl19LHsiLi4vY29tbW9uL2FkanVzdF9sb24iOjUsIi4uL2NvbW1vbi9hc2lueiI6Nn1dLDU4OltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2UwZm4iKSxlPWEoIi4uL2NvbW1vbi9lMWZuIiksZj1hKCIuLi9jb21tb24vZTJmbiIpLGc9YSgiLi4vY29tbW9uL2UzZm4iKSxoPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksaT1hKCIuLi9jb21tb24vYWRqdXN0X2xhdCIpLGo9YSgiLi4vY29tbW9uL21sZm4iKSxrPTFlLTEwLGw9YSgiLi4vY29tbW9uL2dOIiksbT0yMDtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnRlbXA9dGhpcy5iL3RoaXMuYSx0aGlzLmVzPTEtTWF0aC5wb3codGhpcy50ZW1wLDIpLHRoaXMuZT1NYXRoLnNxcnQodGhpcy5lcyksdGhpcy5lMD1kKHRoaXMuZXMpLHRoaXMuZTE9ZSh0aGlzLmVzKSx0aGlzLmUyPWYodGhpcy5lcyksdGhpcy5lMz1nKHRoaXMuZXMpLHRoaXMubWwwPXRoaXMuYSpqKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEueCxmPWEueSxnPWgoZS10aGlzLmxvbmcwKTtpZihkPWcqTWF0aC5zaW4oZiksdGhpcy5zcGhlcmUpTWF0aC5hYnMoZik8PWs/KGI9dGhpcy5hKmcsYz0tMSp0aGlzLmEqdGhpcy5sYXQwKTooYj10aGlzLmEqTWF0aC5zaW4oZCkvTWF0aC50YW4oZiksYz10aGlzLmEqKGkoZi10aGlzLmxhdDApKygxLU1hdGguY29zKGQpKS9NYXRoLnRhbihmKSkpO2Vsc2UgaWYoTWF0aC5hYnMoZik8PWspYj10aGlzLmEqZyxjPS0xKnRoaXMubWwwO2Vsc2V7dmFyIG09bCh0aGlzLmEsdGhpcy5lLE1hdGguc2luKGYpKS9NYXRoLnRhbihmKTtiPW0qTWF0aC5zaW4oZCksYz10aGlzLmEqaih0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGYpLXRoaXMubWwwK20qKDEtTWF0aC5jb3MoZCkpfXJldHVybiBhLng9Yit0aGlzLngwLGEueT1jK3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxpLGwsbjtpZihkPWEueC10aGlzLngwLGU9YS55LXRoaXMueTAsdGhpcy5zcGhlcmUpaWYoTWF0aC5hYnMoZSt0aGlzLmEqdGhpcy5sYXQwKTw9ayliPWgoZC90aGlzLmErdGhpcy5sb25nMCksYz0wO2Vsc2V7Zz10aGlzLmxhdDArZS90aGlzLmEsaT1kKmQvdGhpcy5hL3RoaXMuYStnKmcsbD1nO3ZhciBvO2ZvcihmPW07ZjstLWYpaWYobz1NYXRoLnRhbihsKSxuPS0xKihnKihsKm8rMSktbC0uNSoobCpsK2kpKm8pLygobC1nKS9vLTEpLGwrPW4sTWF0aC5hYnMobik8PWspe2M9bDticmVha31iPWgodGhpcy5sb25nMCtNYXRoLmFzaW4oZCpNYXRoLnRhbihsKS90aGlzLmEpL01hdGguc2luKGMpKX1lbHNlIGlmKE1hdGguYWJzKGUrdGhpcy5tbDApPD1rKWM9MCxiPWgodGhpcy5sb25nMCtkL3RoaXMuYSk7ZWxzZXtnPSh0aGlzLm1sMCtlKS90aGlzLmEsaT1kKmQvdGhpcy5hL3RoaXMuYStnKmcsbD1nO3ZhciBwLHEscixzLHQ7Zm9yKGY9bTtmOy0tZilpZih0PXRoaXMuZSpNYXRoLnNpbihsKSxwPU1hdGguc3FydCgxLXQqdCkqTWF0aC50YW4obCkscT10aGlzLmEqaih0aGlzLmUwLHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzLGwpLHI9dGhpcy5lMC0yKnRoaXMuZTEqTWF0aC5jb3MoMipsKSs0KnRoaXMuZTIqTWF0aC5jb3MoNCpsKS02KnRoaXMuZTMqTWF0aC5jb3MoNipsKSxzPXEvdGhpcy5hLG49KGcqKHAqcysxKS1zLS41KnAqKHMqcytpKSkvKHRoaXMuZXMqTWF0aC5zaW4oMipsKSoocypzK2ktMipnKnMpLyg0KnApKyhnLXMpKihwKnItMi9NYXRoLnNpbigyKmwpKS1yKSxsLT1uLE1hdGguYWJzKG4pPD1rKXtjPWw7YnJlYWt9cD1NYXRoLnNxcnQoMS10aGlzLmVzKk1hdGgucG93KE1hdGguc2luKGMpLDIpKSpNYXRoLnRhbihjKSxiPWgodGhpcy5sb25nMCtNYXRoLmFzaW4oZCpwL3RoaXMuYSkvTWF0aC5zaW4oYykpfXJldHVybiBhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiUG9seWNvbmljIiwicG9seSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbGF0Ijo0LCIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2UwZm4iOjcsIi4uL2NvbW1vbi9lMWZuIjo4LCIuLi9jb21tb24vZTJmbiI6OSwiLi4vY29tbW9uL2UzZm4iOjEwLCIuLi9jb21tb24vZ04iOjExLCIuLi9jb21tb24vbWxmbiI6MTR9XSw1OTpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIiksZT1hKCIuLi9jb21tb24vYWRqdXN0X2xhdCIpLGY9YSgiLi4vY29tbW9uL3BqX2VuZm4iKSxnPTIwLGg9YSgiLi4vY29tbW9uL3BqX21sZm4iKSxpPWEoIi4uL2NvbW1vbi9wal9pbnZfbWxmbiIpLGo9TWF0aC5QSS8yLGs9MWUtMTAsbD1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnNwaGVyZT8odGhpcy5uPTEsdGhpcy5tPTAsdGhpcy5lcz0wLHRoaXMuQ195PU1hdGguc3FydCgodGhpcy5tKzEpL3RoaXMubiksdGhpcy5DX3g9dGhpcy5DX3kvKHRoaXMubSsxKSk6dGhpcy5lbj1mKHRoaXMuZXMpfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPWEueCxmPWEueTtpZihlPWQoZS10aGlzLmxvbmcwKSx0aGlzLnNwaGVyZSl7aWYodGhpcy5tKWZvcih2YXIgaT10aGlzLm4qTWF0aC5zaW4oZiksaj1nO2o7LS1qKXt2YXIgbD0odGhpcy5tKmYrTWF0aC5zaW4oZiktaSkvKHRoaXMubStNYXRoLmNvcyhmKSk7aWYoZi09bCxNYXRoLmFicyhsKTxrKWJyZWFrfWVsc2UgZj0xIT09dGhpcy5uP01hdGguYXNpbih0aGlzLm4qTWF0aC5zaW4oZikpOmY7Yj10aGlzLmEqdGhpcy5DX3gqZSoodGhpcy5tK01hdGguY29zKGYpKSxjPXRoaXMuYSp0aGlzLkNfeSpmfWVsc2V7dmFyIG09TWF0aC5zaW4oZiksbj1NYXRoLmNvcyhmKTtjPXRoaXMuYSpoKGYsbSxuLHRoaXMuZW4pLGI9dGhpcy5hKmUqbi9NYXRoLnNxcnQoMS10aGlzLmVzKm0qbSl9cmV0dXJuIGEueD1iLGEueT1jLGF9LGMuaW52ZXJzZT1mdW5jdGlvbihhKXt2YXIgYixjLGYsZztyZXR1cm4gYS54LT10aGlzLngwLGY9YS54L3RoaXMuYSxhLnktPXRoaXMueTAsYj1hLnkvdGhpcy5hLHRoaXMuc3BoZXJlPyhiLz10aGlzLkNfeSxmLz10aGlzLkNfeCoodGhpcy5tK01hdGguY29zKGIpKSx0aGlzLm0/Yj1sKCh0aGlzLm0qYitNYXRoLnNpbihiKSkvdGhpcy5uKToxIT09dGhpcy5uJiYoYj1sKE1hdGguc2luKGIpL3RoaXMubikpLGY9ZChmK3RoaXMubG9uZzApLGI9ZShiKSk6KGI9aShhLnkvdGhpcy5hLHRoaXMuZXMsdGhpcy5lbiksZz1NYXRoLmFicyhiKSxqPmc/KGc9TWF0aC5zaW4oYiksYz10aGlzLmxvbmcwK2EueCpNYXRoLnNxcnQoMS10aGlzLmVzKmcqZykvKHRoaXMuYSpNYXRoLmNvcyhiKSksZj1kKGMpKTpqPmctayYmKGY9dGhpcy5sb25nMCkpLGEueD1mLGEueT1iLGF9LGMubmFtZXM9WyJTaW51c29pZGFsIiwic2ludSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbGF0Ijo0LCIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2LCIuLi9jb21tb24vcGpfZW5mbiI6MTcsIi4uL2NvbW1vbi9wal9pbnZfbWxmbiI6MTgsIi4uL2NvbW1vbi9wal9tbGZuIjoxOX1dLDYwOltmdW5jdGlvbihhLGIsYyl7Yy5pbml0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sYXQwO3RoaXMubGFtYmRhMD10aGlzLmxvbmcwO3ZhciBiPU1hdGguc2luKGEpLGM9dGhpcy5hLGQ9dGhpcy5yZixlPTEvZCxmPTIqZS1NYXRoLnBvdyhlLDIpLGc9dGhpcy5lPU1hdGguc3FydChmKTt0aGlzLlI9dGhpcy5rMCpjKk1hdGguc3FydCgxLWYpLygxLWYqTWF0aC5wb3coYiwyKSksdGhpcy5hbHBoYT1NYXRoLnNxcnQoMStmLygxLWYpKk1hdGgucG93KE1hdGguY29zKGEpLDQpKSx0aGlzLmIwPU1hdGguYXNpbihiL3RoaXMuYWxwaGEpO3ZhciBoPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCt0aGlzLmIwLzIpKSxpPU1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCthLzIpKSxqPU1hdGgubG9nKCgxK2cqYikvKDEtZypiKSk7dGhpcy5LPWgtdGhpcy5hbHBoYSppK3RoaXMuYWxwaGEqZy8yKmp9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYj1NYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQtYS55LzIpKSxjPXRoaXMuZS8yKk1hdGgubG9nKCgxK3RoaXMuZSpNYXRoLnNpbihhLnkpKS8oMS10aGlzLmUqTWF0aC5zaW4oYS55KSkpLGQ9LXRoaXMuYWxwaGEqKGIrYykrdGhpcy5LLGU9MiooTWF0aC5hdGFuKE1hdGguZXhwKGQpKS1NYXRoLlBJLzQpLGY9dGhpcy5hbHBoYSooYS54LXRoaXMubGFtYmRhMCksZz1NYXRoLmF0YW4oTWF0aC5zaW4oZikvKE1hdGguc2luKHRoaXMuYjApKk1hdGgudGFuKGUpK01hdGguY29zKHRoaXMuYjApKk1hdGguY29zKGYpKSksaD1NYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkqTWF0aC5zaW4oZSktTWF0aC5zaW4odGhpcy5iMCkqTWF0aC5jb3MoZSkqTWF0aC5jb3MoZikpO3JldHVybiBhLnk9dGhpcy5SLzIqTWF0aC5sb2coKDErTWF0aC5zaW4oaCkpLygxLU1hdGguc2luKGgpKSkrdGhpcy55MCxhLng9dGhpcy5SKmcrdGhpcy54MCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWEueC10aGlzLngwLGM9YS55LXRoaXMueTAsZD1iL3RoaXMuUixlPTIqKE1hdGguYXRhbihNYXRoLmV4cChjL3RoaXMuUikpLU1hdGguUEkvNCksZj1NYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkqTWF0aC5zaW4oZSkrTWF0aC5zaW4odGhpcy5iMCkqTWF0aC5jb3MoZSkqTWF0aC5jb3MoZCkpLGc9TWF0aC5hdGFuKE1hdGguc2luKGQpLyhNYXRoLmNvcyh0aGlzLmIwKSpNYXRoLmNvcyhkKS1NYXRoLnNpbih0aGlzLmIwKSpNYXRoLnRhbihlKSkpLGg9dGhpcy5sYW1iZGEwK2cvdGhpcy5hbHBoYSxpPTAsaj1mLGs9LTFlMyxsPTA7TWF0aC5hYnMoai1rKT4xZS03Oyl7aWYoKytsPjIwKXJldHVybjtpPTEvdGhpcy5hbHBoYSooTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K2YvMikpLXRoaXMuSykrdGhpcy5lKk1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkvNCtNYXRoLmFzaW4odGhpcy5lKk1hdGguc2luKGopKS8yKSksaz1qLGo9MipNYXRoLmF0YW4oTWF0aC5leHAoaSkpLU1hdGguUEkvMn1yZXR1cm4gYS54PWgsYS55PWosYX0sYy5uYW1lcz1bInNvbWVyYyJdfSx7fV0sNjE6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLlBJLzIsZT0xZS0xMCxmPWEoIi4uL2NvbW1vbi9zaWduIiksZz1hKCIuLi9jb21tb24vbXNmbnoiKSxoPWEoIi4uL2NvbW1vbi90c2ZueiIpLGk9YSgiLi4vY29tbW9uL3BoaTJ6Iiksaj1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpO2Muc3Nmbl89ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiKj1jLE1hdGgudGFuKC41KihkK2EpKSpNYXRoLnBvdygoMS1iKS8oMStiKSwuNSpjKX0sYy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5jb3NsYXQwPU1hdGguY29zKHRoaXMubGF0MCksdGhpcy5zaW5sYXQwPU1hdGguc2luKHRoaXMubGF0MCksdGhpcy5zcGhlcmU/MT09PXRoaXMuazAmJiFpc05hTih0aGlzLmxhdF90cykmJk1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUmJih0aGlzLmswPS41KigxK2YodGhpcy5sYXQwKSpNYXRoLnNpbih0aGlzLmxhdF90cykpKTooTWF0aC5hYnModGhpcy5jb3NsYXQwKTw9ZSYmKHRoaXMubGF0MD4wP3RoaXMuY29uPTE6dGhpcy5jb249LTEpLHRoaXMuY29ucz1NYXRoLnNxcnQoTWF0aC5wb3coMSt0aGlzLmUsMSt0aGlzLmUpKk1hdGgucG93KDEtdGhpcy5lLDEtdGhpcy5lKSksMT09PXRoaXMuazAmJiFpc05hTih0aGlzLmxhdF90cykmJk1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUmJih0aGlzLmswPS41KnRoaXMuY29ucypnKHRoaXMuZSxNYXRoLnNpbih0aGlzLmxhdF90cyksTWF0aC5jb3ModGhpcy5sYXRfdHMpKS9oKHRoaXMuZSx0aGlzLmNvbip0aGlzLmxhdF90cyx0aGlzLmNvbipNYXRoLnNpbih0aGlzLmxhdF90cykpKSx0aGlzLm1zMT1nKHRoaXMuZSx0aGlzLnNpbmxhdDAsdGhpcy5jb3NsYXQwKSx0aGlzLlgwPTIqTWF0aC5hdGFuKHRoaXMuc3Nmbl8odGhpcy5sYXQwLHRoaXMuc2lubGF0MCx0aGlzLmUpKS1kLHRoaXMuY29zWDA9TWF0aC5jb3ModGhpcy5YMCksdGhpcy5zaW5YMD1NYXRoLnNpbih0aGlzLlgwKSl9LGMuZm9yd2FyZD1mdW5jdGlvbihhKXt2YXIgYixjLGYsZyxpLGssbD1hLngsbT1hLnksbj1NYXRoLnNpbihtKSxvPU1hdGguY29zKG0pLHA9aihsLXRoaXMubG9uZzApO3JldHVybiBNYXRoLmFicyhNYXRoLmFicyhsLXRoaXMubG9uZzApLU1hdGguUEkpPD1lJiZNYXRoLmFicyhtK3RoaXMubGF0MCk8PWU/KGEueD1OYU4sYS55PU5hTixhKTp0aGlzLnNwaGVyZT8oYj0yKnRoaXMuazAvKDErdGhpcy5zaW5sYXQwKm4rdGhpcy5jb3NsYXQwKm8qTWF0aC5jb3MocCkpLGEueD10aGlzLmEqYipvKk1hdGguc2luKHApK3RoaXMueDAsYS55PXRoaXMuYSpiKih0aGlzLmNvc2xhdDAqbi10aGlzLnNpbmxhdDAqbypNYXRoLmNvcyhwKSkrdGhpcy55MCxhKTooYz0yKk1hdGguYXRhbih0aGlzLnNzZm5fKG0sbix0aGlzLmUpKS1kLGc9TWF0aC5jb3MoYyksZj1NYXRoLnNpbihjKSxNYXRoLmFicyh0aGlzLmNvc2xhdDApPD1lPyhpPWgodGhpcy5lLG0qdGhpcy5jb24sdGhpcy5jb24qbiksaz0yKnRoaXMuYSp0aGlzLmswKmkvdGhpcy5jb25zLGEueD10aGlzLngwK2sqTWF0aC5zaW4obC10aGlzLmxvbmcwKSxhLnk9dGhpcy55MC10aGlzLmNvbiprKk1hdGguY29zKGwtdGhpcy5sb25nMCksYSk6KE1hdGguYWJzKHRoaXMuc2lubGF0MCk8ZT8oYj0yKnRoaXMuYSp0aGlzLmswLygxK2cqTWF0aC5jb3MocCkpLGEueT1iKmYpOihiPTIqdGhpcy5hKnRoaXMuazAqdGhpcy5tczEvKHRoaXMuY29zWDAqKDErdGhpcy5zaW5YMCpmK3RoaXMuY29zWDAqZypNYXRoLmNvcyhwKSkpLGEueT1iKih0aGlzLmNvc1gwKmYtdGhpcy5zaW5YMCpnKk1hdGguY29zKHApKSt0aGlzLnkwKSxhLng9YipnKk1hdGguc2luKHApK3RoaXMueDAsYSkpfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7YS54LT10aGlzLngwLGEueS09dGhpcy55MDt2YXIgYixjLGYsZyxoLGs9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSk7aWYodGhpcy5zcGhlcmUpe3ZhciBsPTIqTWF0aC5hdGFuKGsvKC41KnRoaXMuYSp0aGlzLmswKSk7cmV0dXJuIGI9dGhpcy5sb25nMCxjPXRoaXMubGF0MCxlPj1rPyhhLng9YixhLnk9YyxhKTooYz1NYXRoLmFzaW4oTWF0aC5jb3MobCkqdGhpcy5zaW5sYXQwK2EueSpNYXRoLnNpbihsKSp0aGlzLmNvc2xhdDAvayksYj1qKE1hdGguYWJzKHRoaXMuY29zbGF0MCk8ZT90aGlzLmxhdDA+MD90aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LC0xKmEueSk6dGhpcy5sb25nMCtNYXRoLmF0YW4yKGEueCxhLnkpOnRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqTWF0aC5zaW4obCksayp0aGlzLmNvc2xhdDAqTWF0aC5jb3MobCktYS55KnRoaXMuc2lubGF0MCpNYXRoLnNpbihsKSkpLGEueD1iLGEueT1jLGEpfWlmKE1hdGguYWJzKHRoaXMuY29zbGF0MCk8PWUpe2lmKGU+PWspcmV0dXJuIGM9dGhpcy5sYXQwLGI9dGhpcy5sb25nMCxhLng9YixhLnk9YyxhO2EueCo9dGhpcy5jb24sYS55Kj10aGlzLmNvbixmPWsqdGhpcy5jb25zLygyKnRoaXMuYSp0aGlzLmswKSxjPXRoaXMuY29uKmkodGhpcy5lLGYpLGI9dGhpcy5jb24qaih0aGlzLmNvbip0aGlzLmxvbmcwK01hdGguYXRhbjIoYS54LC0xKmEueSkpfWVsc2UgZz0yKk1hdGguYXRhbihrKnRoaXMuY29zWDAvKDIqdGhpcy5hKnRoaXMuazAqdGhpcy5tczEpKSxiPXRoaXMubG9uZzAsZT49az9oPXRoaXMuWDA6KGg9TWF0aC5hc2luKE1hdGguY29zKGcpKnRoaXMuc2luWDArYS55Kk1hdGguc2luKGcpKnRoaXMuY29zWDAvayksYj1qKHRoaXMubG9uZzArTWF0aC5hdGFuMihhLngqTWF0aC5zaW4oZyksayp0aGlzLmNvc1gwKk1hdGguY29zKGcpLWEueSp0aGlzLnNpblgwKk1hdGguc2luKGcpKSkpLGM9LTEqaSh0aGlzLmUsTWF0aC50YW4oLjUqKGQraCkpKTtyZXR1cm4gYS54PWIsYS55PWMsYX0sYy5uYW1lcz1bInN0ZXJlIiwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlIiwiUG9sYXIgU3RlcmVvZ3JhcGhpYyAodmFyaWFudCBCKSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuLi9jb21tb24vbXNmbnoiOjE1LCIuLi9jb21tb24vcGhpMnoiOjE2LCIuLi9jb21tb24vc2lnbiI6MjEsIi4uL2NvbW1vbi90c2ZueiI6MjR9XSw2MjpbZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4vZ2F1c3MiKSxlPWEoIi4uL2NvbW1vbi9hZGp1c3RfbG9uIik7Yy5pbml0PWZ1bmN0aW9uKCl7ZC5pbml0LmFwcGx5KHRoaXMpLHRoaXMucmMmJih0aGlzLnNpbmMwPU1hdGguc2luKHRoaXMucGhpYzApLHRoaXMuY29zYzA9TWF0aC5jb3ModGhpcy5waGljMCksdGhpcy5SMj0yKnRoaXMucmMsdGhpcy50aXRsZXx8KHRoaXMudGl0bGU9Ik9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSIpKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnO3JldHVybiBhLng9ZShhLngtdGhpcy5sb25nMCksZC5mb3J3YXJkLmFwcGx5KHRoaXMsW2FdKSxiPU1hdGguc2luKGEueSksYz1NYXRoLmNvcyhhLnkpLGY9TWF0aC5jb3MoYS54KSxnPXRoaXMuazAqdGhpcy5SMi8oMSt0aGlzLnNpbmMwKmIrdGhpcy5jb3NjMCpjKmYpLGEueD1nKmMqTWF0aC5zaW4oYS54KSxhLnk9ZyoodGhpcy5jb3NjMCpiLXRoaXMuc2luYzAqYypmKSxhLng9dGhpcy5hKmEueCt0aGlzLngwLGEueT10aGlzLmEqYS55K3RoaXMueTAsYX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZixnLGg7aWYoYS54PShhLngtdGhpcy54MCkvdGhpcy5hLGEueT0oYS55LXRoaXMueTApL3RoaXMuYSxhLngvPXRoaXMuazAsYS55Lz10aGlzLmswLGg9TWF0aC5zcXJ0KGEueCphLngrYS55KmEueSkpe3ZhciBpPTIqTWF0aC5hdGFuMihoLHRoaXMuUjIpO2I9TWF0aC5zaW4oaSksYz1NYXRoLmNvcyhpKSxnPU1hdGguYXNpbihjKnRoaXMuc2luYzArYS55KmIqdGhpcy5jb3NjMC9oKSxmPU1hdGguYXRhbjIoYS54KmIsaCp0aGlzLmNvc2MwKmMtYS55KnRoaXMuc2luYzAqYil9ZWxzZSBnPXRoaXMucGhpYzAsZj0wO3JldHVybiBhLng9ZixhLnk9ZyxkLmludmVyc2UuYXBwbHkodGhpcyxbYV0pLGEueD1lKGEueCt0aGlzLmxvbmcwKSxhfSxjLm5hbWVzPVsiU3RlcmVvZ3JhcGhpY19Ob3J0aF9Qb2xlIiwiT2JsaXF1ZV9TdGVyZW9ncmFwaGljIiwiUG9sYXJfU3RlcmVvZ3JhcGhpYyIsInN0ZXJlYSIsIk9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZSJdfSx7Ii4uL2NvbW1vbi9hZGp1c3RfbG9uIjo1LCIuL2dhdXNzIjo0Nn1dLDYzOltmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vY29tbW9uL2UwZm4iKSxlPWEoIi4uL2NvbW1vbi9lMWZuIiksZj1hKCIuLi9jb21tb24vZTJmbiIpLGc9YSgiLi4vY29tbW9uL2UzZm4iKSxoPWEoIi4uL2NvbW1vbi9tbGZuIiksaT1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGo9TWF0aC5QSS8yLGs9MWUtMTAsbD1hKCIuLi9jb21tb24vc2lnbiIpLG09YSgiLi4vY29tbW9uL2FzaW56Iik7Yy5pbml0PWZ1bmN0aW9uKCl7dGhpcy5lMD1kKHRoaXMuZXMpLHRoaXMuZTE9ZSh0aGlzLmVzKSx0aGlzLmUyPWYodGhpcy5lcyksdGhpcy5lMz1nKHRoaXMuZXMpLHRoaXMubWwwPXRoaXMuYSpoKHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsdGhpcy5sYXQwKX0sYy5mb3J3YXJkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEueCxmPWEueSxnPWkoZS10aGlzLmxvbmcwKSxqPU1hdGguc2luKGYpLGs9TWF0aC5jb3MoZik7aWYodGhpcy5zcGhlcmUpe3ZhciBsPWsqTWF0aC5zaW4oZyk7aWYoTWF0aC5hYnMoTWF0aC5hYnMobCktMSk8MWUtMTApcmV0dXJuIDkzO2M9LjUqdGhpcy5hKnRoaXMuazAqTWF0aC5sb2coKDErbCkvKDEtbCkpLGI9TWF0aC5hY29zKGsqTWF0aC5jb3MoZykvTWF0aC5zcXJ0KDEtbCpsKSksMD5mJiYoYj0tYiksZD10aGlzLmEqdGhpcy5rMCooYi10aGlzLmxhdDApfWVsc2V7dmFyIG09aypnLG49TWF0aC5wb3cobSwyKSxvPXRoaXMuZXAyKk1hdGgucG93KGssMikscD1NYXRoLnRhbihmKSxxPU1hdGgucG93KHAsMik7Yj0xLXRoaXMuZXMqTWF0aC5wb3coaiwyKTt2YXIgcj10aGlzLmEvTWF0aC5zcXJ0KGIpLHM9dGhpcy5hKmgodGhpcy5lMCx0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyxmKTtjPXRoaXMuazAqciptKigxK24vNiooMS1xK28rbi8yMCooNS0xOCpxK01hdGgucG93KHEsMikrNzIqby01OCp0aGlzLmVwMikpKSt0aGlzLngwLGQ9dGhpcy5rMCoocy10aGlzLm1sMCtyKnAqKG4qKC41K24vMjQqKDUtcSs5Km8rNCpNYXRoLnBvdyhvLDIpK24vMzAqKDYxLTU4KnErTWF0aC5wb3cocSwyKSs2MDAqby0zMzAqdGhpcy5lcDIpKSkpKSt0aGlzLnkwfXJldHVybiBhLng9YyxhLnk9ZCxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9NjtpZih0aGlzLnNwaGVyZSl7dmFyIG49TWF0aC5leHAoYS54Lyh0aGlzLmEqdGhpcy5rMCkpLG89LjUqKG4tMS9uKSxwPXRoaXMubGF0MCthLnkvKHRoaXMuYSp0aGlzLmswKSxxPU1hdGguY29zKHApO2I9TWF0aC5zcXJ0KCgxLXEqcSkvKDErbypvKSksZj1tKGIpLDA+cCYmKGY9LWYpLGc9MD09PW8mJjA9PT1xP3RoaXMubG9uZzA6aShNYXRoLmF0YW4yKG8scSkrdGhpcy5sb25nMCl9ZWxzZXt2YXIgcj1hLngtdGhpcy54MCxzPWEueS10aGlzLnkwO2ZvcihiPSh0aGlzLm1sMCtzL3RoaXMuazApL3RoaXMuYSxjPWIsZT0wOyEwJiYoZD0oYit0aGlzLmUxKk1hdGguc2luKDIqYyktdGhpcy5lMipNYXRoLnNpbig0KmMpK3RoaXMuZTMqTWF0aC5zaW4oNipjKSkvdGhpcy5lMC1jLGMrPWQsIShNYXRoLmFicyhkKTw9aykpO2UrKylpZihlPj1oKXJldHVybiA5NTtpZihNYXRoLmFicyhjKTxqKXt2YXIgdD1NYXRoLnNpbihjKSx1PU1hdGguY29zKGMpLHY9TWF0aC50YW4oYyksdz10aGlzLmVwMipNYXRoLnBvdyh1LDIpLHg9TWF0aC5wb3codywyKSx5PU1hdGgucG93KHYsMiksej1NYXRoLnBvdyh5LDIpO2I9MS10aGlzLmVzKk1hdGgucG93KHQsMik7dmFyIEE9dGhpcy5hL01hdGguc3FydChiKSxCPUEqKDEtdGhpcy5lcykvYixDPXIvKEEqdGhpcy5rMCksRD1NYXRoLnBvdyhDLDIpO2Y9Yy1BKnYqRC9CKiguNS1ELzI0Kig1KzMqeSsxMCp3LTQqeC05KnRoaXMuZXAyLUQvMzAqKDYxKzkwKnkrMjk4KncrNDUqei0yNTIqdGhpcy5lcDItMyp4KSkpLGc9aSh0aGlzLmxvbmcwK0MqKDEtRC82KigxKzIqeSt3LUQvMjAqKDUtMip3KzI4KnktMyp4KzgqdGhpcy5lcDIrMjQqeikpKS91KX1lbHNlIGY9aipsKHMpLGc9dGhpcy5sb25nMH1yZXR1cm4gYS54PWcsYS55PWYsYX0sYy5uYW1lcz1bIlRyYW5zdmVyc2VfTWVyY2F0b3IiLCJUcmFuc3ZlcnNlIE1lcmNhdG9yIiwidG1lcmMiXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2LCIuLi9jb21tb24vZTBmbiI6NywiLi4vY29tbW9uL2UxZm4iOjgsIi4uL2NvbW1vbi9lMmZuIjo5LCIuLi9jb21tb24vZTNmbiI6MTAsIi4uL2NvbW1vbi9tbGZuIjoxNCwiLi4vY29tbW9uL3NpZ24iOjIxfV0sNjQ6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD0uMDE3NDUzMjkyNTE5OTQzMjk1LGU9YSgiLi90bWVyYyIpO2MuZGVwZW5kc09uPSJ0bWVyYyIsYy5pbml0PWZ1bmN0aW9uKCl7dGhpcy56b25lJiYodGhpcy5sYXQwPTAsdGhpcy5sb25nMD0oNipNYXRoLmFicyh0aGlzLnpvbmUpLTE4MykqZCx0aGlzLngwPTVlNSx0aGlzLnkwPXRoaXMudXRtU291dGg/MWU3OjAsdGhpcy5rMD0uOTk5NixlLmluaXQuYXBwbHkodGhpcyksdGhpcy5mb3J3YXJkPWUuZm9yd2FyZCx0aGlzLmludmVyc2U9ZS5pbnZlcnNlKX0sYy5uYW1lcz1bIlVuaXZlcnNhbCBUcmFuc3ZlcnNlIE1lcmNhdG9yIFN5c3RlbSIsInV0bSJdfSx7Ii4vdG1lcmMiOjYzfV0sNjU6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9jb21tb24vYWRqdXN0X2xvbiIpLGU9TWF0aC5QSS8yLGY9MWUtMTAsZz1hKCIuLi9jb21tb24vYXNpbnoiKTtjLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLlI9dGhpcy5hfSxjLmZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxoPWEueCxpPWEueSxqPWQoaC10aGlzLmxvbmcwKTtNYXRoLmFicyhpKTw9ZiYmKGI9dGhpcy54MCt0aGlzLlIqaixjPXRoaXMueTApO3ZhciBrPWcoMipNYXRoLmFicyhpL01hdGguUEkpKTsoTWF0aC5hYnMoaik8PWZ8fE1hdGguYWJzKE1hdGguYWJzKGkpLWUpPD1mKSYmKGI9dGhpcy54MCxjPWk+PTA/dGhpcy55MCtNYXRoLlBJKnRoaXMuUipNYXRoLnRhbiguNSprKTp0aGlzLnkwK01hdGguUEkqdGhpcy5SKi1NYXRoLnRhbiguNSprKSk7dmFyIGw9LjUqTWF0aC5hYnMoTWF0aC5QSS9qLWovTWF0aC5QSSksbT1sKmwsbj1NYXRoLnNpbihrKSxvPU1hdGguY29zKGspLHA9by8obitvLTEpLHE9cCpwLHI9cCooMi9uLTEpLHM9cipyLHQ9TWF0aC5QSSp0aGlzLlIqKGwqKHAtcykrTWF0aC5zcXJ0KG0qKHAtcykqKHAtcyktKHMrbSkqKHEtcykpKS8ocyttKTswPmomJih0PS10KSxiPXRoaXMueDArdDt2YXIgdT1tK3A7cmV0dXJuIHQ9TWF0aC5QSSp0aGlzLlIqKHIqdS1sKk1hdGguc3FydCgocyttKSoobSsxKS11KnUpKS8ocyttKSxjPWk+PTA/dGhpcy55MCt0OnRoaXMueTAtdCxhLng9YixhLnk9YyxhfSxjLmludmVyc2U9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGcsaCxpLGosayxsLG0sbixvLHA7cmV0dXJuIGEueC09dGhpcy54MCxhLnktPXRoaXMueTAsbj1NYXRoLlBJKnRoaXMuUixlPWEueC9uLGc9YS55L24saD1lKmUrZypnLGk9LU1hdGguYWJzKGcpKigxK2gpLApqPWktMipnKmcrZSplLGs9LTIqaSsxKzIqZypnK2gqaCxwPWcqZy9rKygyKmoqaipqL2svay9rLTkqaSpqL2svaykvMjcsbD0oaS1qKmovMy9rKS9rLG09MipNYXRoLnNxcnQoLWwvMyksbj0zKnAvbC9tLE1hdGguYWJzKG4pPjEmJihuPW4+PTA/MTotMSksbz1NYXRoLmFjb3MobikvMyxjPWEueT49MD8oLW0qTWF0aC5jb3MobytNYXRoLlBJLzMpLWovMy9rKSpNYXRoLlBJOi0oLW0qTWF0aC5jb3MobytNYXRoLlBJLzMpLWovMy9rKSpNYXRoLlBJLGI9TWF0aC5hYnMoZSk8Zj90aGlzLmxvbmcwOmQodGhpcy5sb25nMCtNYXRoLlBJKihoLTErTWF0aC5zcXJ0KDErMiooZSplLWcqZykraCpoKSkvMi9lKSxhLng9YixhLnk9YyxhfSxjLm5hbWVzPVsiVmFuX2Rlcl9HcmludGVuX0kiLCJWYW5EZXJHcmludGVuIiwidmFuZGciXX0seyIuLi9jb21tb24vYWRqdXN0X2xvbiI6NSwiLi4vY29tbW9uL2FzaW56Ijo2fV0sNjY6W2Z1bmN0aW9uKGEsYixjKXt2YXIgZD0uMDE3NDUzMjkyNTE5OTQzMjk1LGU9NTcuMjk1Nzc5NTEzMDgyMzIsZj0xLGc9MixoPWEoIi4vZGF0dW1fdHJhbnNmb3JtIiksaT1hKCIuL2FkanVzdF9heGlzIiksaj1hKCIuL1Byb2oiKSxrPWEoIi4vY29tbW9uL3RvUG9pbnQiKTtiLmV4cG9ydHM9ZnVuY3Rpb24gbChhLGIsYyl7ZnVuY3Rpb24gbShhLGIpe3JldHVybihhLmRhdHVtLmRhdHVtX3R5cGU9PT1mfHxhLmRhdHVtLmRhdHVtX3R5cGU9PT1nKSYmIldHUzg0IiE9PWIuZGF0dW1Db2RlfXZhciBuO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYoYz1rKGMpKSxhLmRhdHVtJiZiLmRhdHVtJiYobShhLGIpfHxtKGIsYSkpJiYobj1uZXcgaigiV0dTODQiKSxsKGEsbixjKSxhPW4pLCJlbnUiIT09YS5heGlzJiZpKGEsITEsYyksImxvbmdsYXQiPT09YS5wcm9qTmFtZT8oYy54Kj1kLGMueSo9ZCk6KGEudG9fbWV0ZXImJihjLngqPWEudG9fbWV0ZXIsYy55Kj1hLnRvX21ldGVyKSxhLmludmVyc2UoYykpLGEuZnJvbV9ncmVlbndpY2gmJihjLngrPWEuZnJvbV9ncmVlbndpY2gpLGM9aChhLmRhdHVtLGIuZGF0dW0sYyksYi5mcm9tX2dyZWVud2ljaCYmKGMueC09Yi5mcm9tX2dyZWVud2ljaCksImxvbmdsYXQiPT09Yi5wcm9qTmFtZT8oYy54Kj1lLGMueSo9ZSk6KGIuZm9yd2FyZChjKSxiLnRvX21ldGVyJiYoYy54Lz1iLnRvX21ldGVyLGMueS89Yi50b19tZXRlcikpLCJlbnUiIT09Yi5heGlzJiZpKGIsITAsYyksY319LHsiLi9Qcm9qIjoyLCIuL2FkanVzdF9heGlzIjozLCIuL2NvbW1vbi90b1BvaW50IjoyMywiLi9kYXR1bV90cmFuc2Zvcm0iOjMxfV0sNjc6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXthW2JdPWMubWFwKGZ1bmN0aW9uKGEpe3ZhciBiPXt9O3JldHVybiBlKGEsYiksYn0pLnJlZHVjZShmdW5jdGlvbihhLGIpe3JldHVybiBqKGEsYil9LHt9KX1mdW5jdGlvbiBlKGEsYil7dmFyIGM7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGM9YS5zaGlmdCgpLCJQQVJBTUVURVIiPT09YyYmKGM9YS5zaGlmdCgpKSwxPT09YS5sZW5ndGg/QXJyYXkuaXNBcnJheShhWzBdKT8oYltjXT17fSxlKGFbMF0sYltjXSkpOmJbY109YVswXTphLmxlbmd0aD8iVE9XR1M4NCI9PT1jP2JbY109YTooYltjXT17fSxbIlVOSVQiLCJQUklNRU0iLCJWRVJUX0RBVFVNIl0uaW5kZXhPZihjKT4tMT8oYltjXT17bmFtZTphWzBdLnRvTG93ZXJDYXNlKCksY29udmVydDphWzFdfSwzPT09YS5sZW5ndGgmJihiW2NdLmF1dGg9YVsyXSkpOiJTUEhFUk9JRCI9PT1jPyhiW2NdPXtuYW1lOmFbMF0sYTphWzFdLHJmOmFbMl19LDQ9PT1hLmxlbmd0aCYmKGJbY10uYXV0aD1hWzNdKSk6WyJHRU9HQ1MiLCJHRU9DQ1MiLCJEQVRVTSIsIlZFUlRfQ1MiLCJDT01QRF9DUyIsIkxPQ0FMX0NTIiwiRklUVEVEX0NTIiwiTE9DQUxfREFUVU0iXS5pbmRleE9mKGMpPi0xPyhhWzBdPVsibmFtZSIsYVswXV0sZChiLGMsYSkpOmEuZXZlcnkoZnVuY3Rpb24oYSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSl9KT9kKGIsYyxhKTplKGEsYltjXSkpOmJbY109ITAsdm9pZCAwKTp2b2lkKGJbYV09ITApfWZ1bmN0aW9uIGYoYSxiKXt2YXIgYz1iWzBdLGQ9YlsxXTshKGMgaW4gYSkmJmQgaW4gYSYmKGFbY109YVtkXSwzPT09Yi5sZW5ndGgmJihhW2NdPWJbMl0oYVtjXSkpKX1mdW5jdGlvbiBnKGEpe3JldHVybiBhKml9ZnVuY3Rpb24gaChhKXtmdW5jdGlvbiBiKGIpe3ZhciBjPWEudG9fbWV0ZXJ8fDE7cmV0dXJuIHBhcnNlRmxvYXQoYiwxMCkqY30iR0VPR0NTIj09PWEudHlwZT9hLnByb2pOYW1lPSJsb25nbGF0IjoiTE9DQUxfQ1MiPT09YS50eXBlPyhhLnByb2pOYW1lPSJpZGVudGl0eSIsYS5sb2NhbD0hMCk6Im9iamVjdCI9PXR5cGVvZiBhLlBST0pFQ1RJT04/YS5wcm9qTmFtZT1PYmplY3Qua2V5cyhhLlBST0pFQ1RJT04pWzBdOmEucHJvak5hbWU9YS5QUk9KRUNUSU9OLGEuVU5JVCYmKGEudW5pdHM9YS5VTklULm5hbWUudG9Mb3dlckNhc2UoKSwibWV0cmUiPT09YS51bml0cyYmKGEudW5pdHM9Im1ldGVyIiksYS5VTklULmNvbnZlcnQmJigiR0VPR0NTIj09PWEudHlwZT9hLkRBVFVNJiZhLkRBVFVNLlNQSEVST0lEJiYoYS50b19tZXRlcj1wYXJzZUZsb2F0KGEuVU5JVC5jb252ZXJ0LDEwKSphLkRBVFVNLlNQSEVST0lELmEpOmEudG9fbWV0ZXI9cGFyc2VGbG9hdChhLlVOSVQuY29udmVydCwxMCkpKSxhLkdFT0dDUyYmKGEuR0VPR0NTLkRBVFVNP2EuZGF0dW1Db2RlPWEuR0VPR0NTLkRBVFVNLm5hbWUudG9Mb3dlckNhc2UoKTphLmRhdHVtQ29kZT1hLkdFT0dDUy5uYW1lLnRvTG93ZXJDYXNlKCksImRfIj09PWEuZGF0dW1Db2RlLnNsaWNlKDAsMikmJihhLmRhdHVtQ29kZT1hLmRhdHVtQ29kZS5zbGljZSgyKSksIm5ld196ZWFsYW5kX2dlb2RldGljX2RhdHVtXzE5NDkiIT09YS5kYXR1bUNvZGUmJiJuZXdfemVhbGFuZF8xOTQ5IiE9PWEuZGF0dW1Db2RlfHwoYS5kYXR1bUNvZGU9Im56Z2Q0OSIpLCJ3Z3NfMTk4NCI9PT1hLmRhdHVtQ29kZSYmKCJNZXJjYXRvcl9BdXhpbGlhcnlfU3BoZXJlIj09PWEuUFJPSkVDVElPTiYmKGEuc3BoZXJlPSEwKSxhLmRhdHVtQ29kZT0id2dzODQiKSwiX2ZlcnJvIj09PWEuZGF0dW1Db2RlLnNsaWNlKC02KSYmKGEuZGF0dW1Db2RlPWEuZGF0dW1Db2RlLnNsaWNlKDAsLTYpKSwiX2pha2FydGEiPT09YS5kYXR1bUNvZGUuc2xpY2UoLTgpJiYoYS5kYXR1bUNvZGU9YS5kYXR1bUNvZGUuc2xpY2UoMCwtOCkpLH5hLmRhdHVtQ29kZS5pbmRleE9mKCJiZWxnZSIpJiYoYS5kYXR1bUNvZGU9InJuYjcyIiksYS5HRU9HQ1MuREFUVU0mJmEuR0VPR0NTLkRBVFVNLlNQSEVST0lEJiYoYS5lbGxwcz1hLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5uYW1lLnJlcGxhY2UoIl8xOSIsIiIpLnJlcGxhY2UoL1tDY11sYXJrZVxfMTgvLCJjbHJrIiksImludGVybmF0aW9uYWwiPT09YS5lbGxwcy50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsMTMpJiYoYS5lbGxwcz0iaW50bCIpLGEuYT1hLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5hLGEucmY9cGFyc2VGbG9hdChhLkdFT0dDUy5EQVRVTS5TUEhFUk9JRC5yZiwxMCkpLH5hLmRhdHVtQ29kZS5pbmRleE9mKCJvc2diXzE5MzYiKSYmKGEuZGF0dW1Db2RlPSJvc2diMzYiKSksYS5iJiYhaXNGaW5pdGUoYS5iKSYmKGEuYj1hLmEpO3ZhciBjPWZ1bmN0aW9uKGIpe3JldHVybiBmKGEsYil9LGQ9W1sic3RhbmRhcmRfcGFyYWxsZWxfMSIsIlN0YW5kYXJkX1BhcmFsbGVsXzEiXSxbInN0YW5kYXJkX3BhcmFsbGVsXzIiLCJTdGFuZGFyZF9QYXJhbGxlbF8yIl0sWyJmYWxzZV9lYXN0aW5nIiwiRmFsc2VfRWFzdGluZyJdLFsiZmFsc2Vfbm9ydGhpbmciLCJGYWxzZV9Ob3J0aGluZyJdLFsiY2VudHJhbF9tZXJpZGlhbiIsIkNlbnRyYWxfTWVyaWRpYW4iXSxbImxhdGl0dWRlX29mX29yaWdpbiIsIkxhdGl0dWRlX09mX09yaWdpbiJdLFsibGF0aXR1ZGVfb2Zfb3JpZ2luIiwiQ2VudHJhbF9QYXJhbGxlbCJdLFsic2NhbGVfZmFjdG9yIiwiU2NhbGVfRmFjdG9yIl0sWyJrMCIsInNjYWxlX2ZhY3RvciJdLFsibGF0aXR1ZGVfb2ZfY2VudGVyIiwiTGF0aXR1ZGVfb2ZfY2VudGVyIl0sWyJsYXQwIiwibGF0aXR1ZGVfb2ZfY2VudGVyIixnXSxbImxvbmdpdHVkZV9vZl9jZW50ZXIiLCJMb25naXR1ZGVfT2ZfQ2VudGVyIl0sWyJsb25nYyIsImxvbmdpdHVkZV9vZl9jZW50ZXIiLGddLFsieDAiLCJmYWxzZV9lYXN0aW5nIixiXSxbInkwIiwiZmFsc2Vfbm9ydGhpbmciLGJdLFsibG9uZzAiLCJjZW50cmFsX21lcmlkaWFuIixnXSxbImxhdDAiLCJsYXRpdHVkZV9vZl9vcmlnaW4iLGddLFsibGF0MCIsInN0YW5kYXJkX3BhcmFsbGVsXzEiLGddLFsibGF0MSIsInN0YW5kYXJkX3BhcmFsbGVsXzEiLGddLFsibGF0MiIsInN0YW5kYXJkX3BhcmFsbGVsXzIiLGddLFsiYWxwaGEiLCJhemltdXRoIixnXSxbInNyc0NvZGUiLCJuYW1lIl1dO2QuZm9yRWFjaChjKSxhLmxvbmcwfHwhYS5sb25nY3x8IkFsYmVyc19Db25pY19FcXVhbF9BcmVhIiE9PWEucHJvak5hbWUmJiJMYW1iZXJ0X0F6aW11dGhhbF9FcXVhbF9BcmVhIiE9PWEucHJvak5hbWV8fChhLmxvbmcwPWEubG9uZ2MpLGEubGF0X3RzfHwhYS5sYXQxfHwiU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlIiE9PWEucHJvak5hbWUmJiJQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpIiE9PWEucHJvak5hbWV8fChhLmxhdDA9ZyhhLmxhdDE+MD85MDotOTApLGEubGF0X3RzPWEubGF0MSl9dmFyIGk9LjAxNzQ1MzI5MjUxOTk0MzI5NSxqPWEoIi4vZXh0ZW5kIik7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGM9SlNPTi5wYXJzZSgoIiwiK2EpLnJlcGxhY2UoL1xzKlwsXHMqKFtBLVpfMC05XSs/KShcWykvZywnLFsiJDEiLCcpLnNsaWNlKDEpLnJlcGxhY2UoL1xzKlwsXHMqKFtBLVpfMC05XSs/KVxdL2csJywiJDEiXScpLnJlcGxhY2UoLyxcWyJWRVJUQ1MiLisvLCIiKSksZD1jLnNoaWZ0KCksZj1jLnNoaWZ0KCk7Yy51bnNoaWZ0KFsibmFtZSIsZl0pLGMudW5zaGlmdChbInR5cGUiLGRdKSxjLnVuc2hpZnQoIm91dHB1dCIpO3ZhciBnPXt9O3JldHVybiBlKGMsZyksaChnLm91dHB1dCksaihiLGcub3V0cHV0KX19LHsiLi9leHRlbmQiOjM0fV0sNjg6W2Z1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhKihNYXRoLlBJLzE4MCl9ZnVuY3Rpb24gZShhKXtyZXR1cm4gMTgwKihhL01hdGguUEkpfWZ1bmN0aW9uIGYoYSl7dmFyIGIsYyxlLGYsZyxpLGosayxsLG09YS5sYXQsbj1hLmxvbixvPTYzNzgxMzcscD0uMDA2Njk0MzgscT0uOTk5NixyPWQobSkscz1kKG4pO2w9TWF0aC5mbG9vcigobisxODApLzYpKzEsMTgwPT09biYmKGw9NjApLG0+PTU2JiY2ND5tJiZuPj0zJiYxMj5uJiYobD0zMiksbT49NzImJjg0Pm0mJihuPj0wJiY5Pm4/bD0zMTpuPj05JiYyMT5uP2w9MzM6bj49MjEmJjMzPm4/bD0zNTpuPj0zMyYmNDI+biYmKGw9MzcpKSxiPTYqKGwtMSktMTgwKzMsaz1kKGIpLGM9cC8oMS1wKSxlPW8vTWF0aC5zcXJ0KDEtcCpNYXRoLnNpbihyKSpNYXRoLnNpbihyKSksZj1NYXRoLnRhbihyKSpNYXRoLnRhbihyKSxnPWMqTWF0aC5jb3MocikqTWF0aC5jb3MociksaT1NYXRoLmNvcyhyKSoocy1rKSxqPW8qKCgxLXAvNC0zKnAqcC82NC01KnAqcCpwLzI1Nikqci0oMypwLzgrMypwKnAvMzIrNDUqcCpwKnAvMTAyNCkqTWF0aC5zaW4oMipyKSsoMTUqcCpwLzI1Nis0NSpwKnAqcC8xMDI0KSpNYXRoLnNpbig0KnIpLTM1KnAqcCpwLzMwNzIqTWF0aC5zaW4oNipyKSk7dmFyIHQ9cSplKihpKygxLWYrZykqaSppKmkvNisoNS0xOCpmK2YqZis3MipnLTU4KmMpKmkqaSppKmkqaS8xMjApKzVlNSx1PXEqKGorZSpNYXRoLnRhbihyKSooaSppLzIrKDUtZis5KmcrNCpnKmcpKmkqaSppKmkvMjQrKDYxLTU4KmYrZipmKzYwMCpnLTMzMCpjKSppKmkqaSppKmkqaS83MjApKTtyZXR1cm4gMD5tJiYodSs9MWU3KSx7bm9ydGhpbmc6TWF0aC5yb3VuZCh1KSxlYXN0aW5nOk1hdGgucm91bmQodCksem9uZU51bWJlcjpsLHpvbmVMZXR0ZXI6aChtKX19ZnVuY3Rpb24gZyhhKXt2YXIgYj1hLm5vcnRoaW5nLGM9YS5lYXN0aW5nLGQ9YS56b25lTGV0dGVyLGY9YS56b25lTnVtYmVyO2lmKDA+Znx8Zj42MClyZXR1cm4gbnVsbDt2YXIgaCxpLGosayxsLG0sbixvLHAscSxyPS45OTk2LHM9NjM3ODEzNyx0PS4wMDY2OTQzOCx1PSgxLU1hdGguc3FydCgxLXQpKS8oMStNYXRoLnNxcnQoMS10KSksdj1jLTVlNSx3PWI7Ik4iPmQmJih3LT0xZTcpLG89NiooZi0xKS0xODArMyxoPXQvKDEtdCksbj13L3IscD1uLyhzKigxLXQvNC0zKnQqdC82NC01KnQqdCp0LzI1NikpLHE9cCsoMyp1LzItMjcqdSp1KnUvMzIpKk1hdGguc2luKDIqcCkrKDIxKnUqdS8xNi01NSp1KnUqdSp1LzMyKSpNYXRoLnNpbig0KnApKzE1MSp1KnUqdS85NipNYXRoLnNpbig2KnApLGk9cy9NYXRoLnNxcnQoMS10Kk1hdGguc2luKHEpKk1hdGguc2luKHEpKSxqPU1hdGgudGFuKHEpKk1hdGgudGFuKHEpLGs9aCpNYXRoLmNvcyhxKSpNYXRoLmNvcyhxKSxsPXMqKDEtdCkvTWF0aC5wb3coMS10Kk1hdGguc2luKHEpKk1hdGguc2luKHEpLDEuNSksbT12LyhpKnIpO3ZhciB4PXEtaSpNYXRoLnRhbihxKS9sKihtKm0vMi0oNSszKmorMTAqay00Kmsqay05KmgpKm0qbSptKm0vMjQrKDYxKzkwKmorMjk4KmsrNDUqaipqLTI1MipoLTMqayprKSptKm0qbSptKm0qbS83MjApO3g9ZSh4KTt2YXIgeT0obS0oMSsyKmoraykqbSptKm0vNisoNS0yKmsrMjgqai0zKmsqays4KmgrMjQqaipqKSptKm0qbSptKm0vMTIwKS9NYXRoLmNvcyhxKTt5PW8rZSh5KTt2YXIgejtpZihhLmFjY3VyYWN5KXt2YXIgQT1nKHtub3J0aGluZzphLm5vcnRoaW5nK2EuYWNjdXJhY3ksZWFzdGluZzphLmVhc3RpbmcrYS5hY2N1cmFjeSx6b25lTGV0dGVyOmEuem9uZUxldHRlcix6b25lTnVtYmVyOmEuem9uZU51bWJlcn0pO3o9e3RvcDpBLmxhdCxyaWdodDpBLmxvbixib3R0b206eCxsZWZ0Onl9fWVsc2Ugej17bGF0OngsbG9uOnl9O3JldHVybiB6fWZ1bmN0aW9uIGgoYSl7dmFyIGI9IloiO3JldHVybiA4ND49YSYmYT49NzI/Yj0iWCI6NzI+YSYmYT49NjQ/Yj0iVyI6NjQ+YSYmYT49NTY/Yj0iViI6NTY+YSYmYT49NDg/Yj0iVSI6NDg+YSYmYT49NDA/Yj0iVCI6NDA+YSYmYT49MzI/Yj0iUyI6MzI+YSYmYT49MjQ/Yj0iUiI6MjQ+YSYmYT49MTY/Yj0iUSI6MTY+YSYmYT49OD9iPSJQIjo4PmEmJmE+PTA/Yj0iTiI6MD5hJiZhPj0tOD9iPSJNIjotOD5hJiZhPj0tMTY/Yj0iTCI6LTE2PmEmJmE+PS0yND9iPSJLIjotMjQ+YSYmYT49LTMyP2I9IkoiOi0zMj5hJiZhPj0tNDA/Yj0iSCI6LTQwPmEmJmE+PS00OD9iPSJHIjotNDg+YSYmYT49LTU2P2I9IkYiOi01Nj5hJiZhPj0tNjQ/Yj0iRSI6LTY0PmEmJmE+PS03Mj9iPSJEIjotNzI+YSYmYT49LTgwJiYoYj0iQyIpLGJ9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPSIwMDAwMCIrYS5lYXN0aW5nLGQ9IjAwMDAwIithLm5vcnRoaW5nO3JldHVybiBhLnpvbmVOdW1iZXIrYS56b25lTGV0dGVyK2ooYS5lYXN0aW5nLGEubm9ydGhpbmcsYS56b25lTnVtYmVyKStjLnN1YnN0cihjLmxlbmd0aC01LGIpK2Quc3Vic3RyKGQubGVuZ3RoLTUsYil9ZnVuY3Rpb24gaihhLGIsYyl7dmFyIGQ9ayhjKSxlPU1hdGguZmxvb3IoYS8xZTUpLGY9TWF0aC5mbG9vcihiLzFlNSklMjA7cmV0dXJuIGwoZSxmLGQpfWZ1bmN0aW9uIGsoYSl7dmFyIGI9YSVxO3JldHVybiAwPT09YiYmKGI9cSksYn1mdW5jdGlvbiBsKGEsYixjKXt2YXIgZD1jLTEsZT1yLmNoYXJDb2RlQXQoZCksZj1zLmNoYXJDb2RlQXQoZCksZz1lK2EtMSxoPWYrYixpPSExO2c+eCYmKGc9Zy14K3QtMSxpPSEwKSwoZz09PXV8fHU+ZSYmZz51fHwoZz51fHx1PmUpJiZpKSYmZysrLChnPT09dnx8dj5lJiZnPnZ8fChnPnZ8fHY+ZSkmJmkpJiYoZysrLGc9PT11JiZnKyspLGc+eCYmKGc9Zy14K3QtMSksaD53PyhoPWgtdyt0LTEsaT0hMCk6aT0hMSwoaD09PXV8fHU+ZiYmaD51fHwoaD51fHx1PmYpJiZpKSYmaCsrLChoPT09dnx8dj5mJiZoPnZ8fChoPnZ8fHY+ZikmJmkpJiYoaCsrLGg9PT11JiZoKyspLGg+dyYmKGg9aC13K3QtMSk7dmFyIGo9U3RyaW5nLmZyb21DaGFyQ29kZShnKStTdHJpbmcuZnJvbUNoYXJDb2RlKGgpO3JldHVybiBqfWZ1bmN0aW9uIG0oYSl7aWYoYSYmMD09PWEubGVuZ3RoKXRocm93Ik1HUlNQb2ludCBjb3ZlcnRpbmcgZnJvbSBub3RoaW5nIjtmb3IodmFyIGIsYz1hLmxlbmd0aCxkPW51bGwsZT0iIixmPTA7IS9bQS1aXS8udGVzdChiPWEuY2hhckF0KGYpKTspe2lmKGY+PTIpdGhyb3ciTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206ICIrYTtlKz1iLGYrK312YXIgZz1wYXJzZUludChlLDEwKTtpZigwPT09Znx8ZiszPmMpdGhyb3ciTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206ICIrYTt2YXIgaD1hLmNoYXJBdChmKyspO2lmKCJBIj49aHx8IkIiPT09aHx8IlkiPT09aHx8aD49IloifHwiSSI9PT1ofHwiTyI9PT1oKXRocm93Ik1HUlNQb2ludCB6b25lIGxldHRlciAiK2grIiBub3QgaGFuZGxlZDogIithO2Q9YS5zdWJzdHJpbmcoZixmKz0yKTtmb3IodmFyIGk9ayhnKSxqPW4oZC5jaGFyQXQoMCksaSksbD1vKGQuY2hhckF0KDEpLGkpO2w8cChoKTspbCs9MmU2O3ZhciBtPWMtZjtpZihtJTIhPT0wKXRocm93Ik1HUlNQb2ludCBoYXMgdG8gaGF2ZSBhbiBldmVuIG51bWJlciBcbm9mIGRpZ2l0cyBhZnRlciB0aGUgem9uZSBsZXR0ZXIgYW5kIHR3byAxMDBrbSBsZXR0ZXJzIC0gZnJvbnQgXG5oYWxmIGZvciBlYXN0aW5nIG1ldGVycywgc2Vjb25kIGhhbGYgZm9yIFxubm9ydGhpbmcgbWV0ZXJzIithO3ZhciBxLHIscyx0LHUsdj1tLzIsdz0wLHg9MDtyZXR1cm4gdj4wJiYocT0xZTUvTWF0aC5wb3coMTAsdikscj1hLnN1YnN0cmluZyhmLGYrdiksdz1wYXJzZUZsb2F0KHIpKnEscz1hLnN1YnN0cmluZyhmK3YpLHg9cGFyc2VGbG9hdChzKSpxKSx0PXcraix1PXgrbCx7ZWFzdGluZzp0LG5vcnRoaW5nOnUsem9uZUxldHRlcjpoLHpvbmVOdW1iZXI6ZyxhY2N1cmFjeTpxfX1mdW5jdGlvbiBuKGEsYil7Zm9yKHZhciBjPXIuY2hhckNvZGVBdChiLTEpLGQ9MWU1LGU9ITE7YyE9PWEuY2hhckNvZGVBdCgwKTspe2lmKGMrKyxjPT09dSYmYysrLGM9PT12JiZjKyssYz54KXtpZihlKXRocm93IkJhZCBjaGFyYWN0ZXI6ICIrYTtjPXQsZT0hMH1kKz0xZTV9cmV0dXJuIGR9ZnVuY3Rpb24gbyhhLGIpe2lmKGE+IlYiKXRocm93Ik1HUlNQb2ludCBnaXZlbiBpbnZhbGlkIE5vcnRoaW5nICIrYTtmb3IodmFyIGM9cy5jaGFyQ29kZUF0KGItMSksZD0wLGU9ITE7YyE9PWEuY2hhckNvZGVBdCgwKTspe2lmKGMrKyxjPT09dSYmYysrLGM9PT12JiZjKyssYz53KXtpZihlKXRocm93IkJhZCBjaGFyYWN0ZXI6ICIrYTtjPXQsZT0hMH1kKz0xZTV9cmV0dXJuIGR9ZnVuY3Rpb24gcChhKXt2YXIgYjtzd2l0Y2goYSl7Y2FzZSJDIjpiPTExZTU7YnJlYWs7Y2FzZSJEIjpiPTJlNjticmVhaztjYXNlIkUiOmI9MjhlNTticmVhaztjYXNlIkYiOmI9MzdlNTticmVhaztjYXNlIkciOmI9NDZlNTticmVhaztjYXNlIkgiOmI9NTVlNTticmVhaztjYXNlIkoiOmI9NjRlNTticmVhaztjYXNlIksiOmI9NzNlNTticmVhaztjYXNlIkwiOmI9ODJlNTticmVhaztjYXNlIk0iOmI9OTFlNTticmVhaztjYXNlIk4iOmI9MDticmVhaztjYXNlIlAiOmI9OGU1O2JyZWFrO2Nhc2UiUSI6Yj0xN2U1O2JyZWFrO2Nhc2UiUiI6Yj0yNmU1O2JyZWFrO2Nhc2UiUyI6Yj0zNWU1O2JyZWFrO2Nhc2UiVCI6Yj00NGU1O2JyZWFrO2Nhc2UiVSI6Yj01M2U1O2JyZWFrO2Nhc2UiViI6Yj02MmU1O2JyZWFrO2Nhc2UiVyI6Yj03ZTY7YnJlYWs7Y2FzZSJYIjpiPTc5ZTU7YnJlYWs7ZGVmYXVsdDpiPS0xfWlmKGI+PTApcmV0dXJuIGI7dGhyb3ciSW52YWxpZCB6b25lIGxldHRlcjogIithfXZhciBxPTYscj0iQUpTQUpTIixzPSJBRkFGQUYiLHQ9NjUsdT03Myx2PTc5LHc9ODYseD05MDtjLmZvcndhcmQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj1ifHw1LGkoZih7bGF0OmFbMV0sbG9uOmFbMF19KSxiKX0sYy5pbnZlcnNlPWZ1bmN0aW9uKGEpe3ZhciBiPWcobShhLnRvVXBwZXJDYXNlKCkpKTtyZXR1cm4gYi5sYXQmJmIubG9uP1tiLmxvbixiLmxhdCxiLmxvbixiLmxhdF06W2IubGVmdCxiLmJvdHRvbSxiLnJpZ2h0LGIudG9wXX0sYy50b1BvaW50PWZ1bmN0aW9uKGEpe3ZhciBiPWcobShhLnRvVXBwZXJDYXNlKCkpKTtyZXR1cm4gYi5sYXQmJmIubG9uP1tiLmxvbixiLmxhdF06WyhiLmxlZnQrYi5yaWdodCkvMiwoYi50b3ArYi5ib3R0b20pLzJdfX0se31dLDY5OltmdW5jdGlvbihhLGIsYyl7Yi5leHBvcnRzPXtuYW1lOiJwcm9qNCIsdmVyc2lvbjoiMi4zLjE1IixkZXNjcmlwdGlvbjoiUHJvajRqcyBpcyBhIEphdmFTY3JpcHQgbGlicmFyeSB0byB0cmFuc2Zvcm0gcG9pbnQgY29vcmRpbmF0ZXMgZnJvbSBvbmUgY29vcmRpbmF0ZSBzeXN0ZW0gdG8gYW5vdGhlciwgaW5jbHVkaW5nIGRhdHVtIHRyYW5zZm9ybWF0aW9ucy4iLG1haW46ImxpYi9pbmRleC5qcyIsZGlyZWN0b3JpZXM6e3Rlc3Q6InRlc3QiLGRvYzoiZG9jcyJ9LHNjcmlwdHM6e3Rlc3Q6Ii4vbm9kZV9tb2R1bGVzL2lzdGFuYnVsL2xpYi9jbGkuanMgdGVzdCAuL25vZGVfbW9kdWxlcy9tb2NoYS9iaW4vX21vY2hhIHRlc3QvdGVzdC5qcyJ9LHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXQ6Ly9naXRodWIuY29tL3Byb2o0anMvcHJvajRqcy5naXQifSxhdXRob3I6IiIsbGljZW5zZToiTUlUIixqYW06e21haW46ImRpc3QvcHJvajQuanMiLGluY2x1ZGU6WyJkaXN0L3Byb2o0LmpzIiwiUkVBRE1FLm1kIiwiQVVUSE9SUyIsIkxJQ0VOU0UubWQiXX0sZGV2RGVwZW5kZW5jaWVzOnsiZ3J1bnQtY2xpIjoifjAuMS4xMyIsZ3J1bnQ6In4wLjQuMiIsImdydW50LWNvbnRyaWItY29ubmVjdCI6In4wLjYuMCIsImdydW50LWNvbnRyaWItanNoaW50IjoifjAuOC4wIixjaGFpOiJ+MS44LjEiLG1vY2hhOiJ+MS4xNy4xIiwiZ3J1bnQtbW9jaGEtcGhhbnRvbWpzIjoifjAuNC4wIixicm93c2VyaWZ5OiJ+MTIuMC4xIiwiZ3J1bnQtYnJvd3NlcmlmeSI6In40LjAuMSIsImdydW50LWNvbnRyaWItdWdsaWZ5IjoifjAuMTEuMSIsY3VybDoiZ2l0Oi8vZ2l0aHViLmNvbS9jdWpvanMvY3VybC5naXQiLGlzdGFuYnVsOiJ+MC4yLjQiLHRpbjoifjAuNC4wIn0sZGVwZW5kZW5jaWVzOnttZ3JzOiJ+MC4wLjIifX19LHt9XX0se30sWzM2XSkoMzYpfSk7"></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIChmYWN0b3J5KSB7DQoJdmFyIEwsIHByb2o0Ow0KCWlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsNCgkJLy8gQU1EDQoJCWRlZmluZShbJ2xlYWZsZXQnLCAncHJvajQnXSwgZmFjdG9yeSk7DQoJfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICJvYmplY3QiKSB7DQoJCS8vIE5vZGUvQ29tbW9uSlMNCgkJTCA9IHJlcXVpcmUoJ2xlYWZsZXQnKTsNCgkJcHJvajQgPSByZXF1aXJlKCdwcm9qNCcpOw0KCQltb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoTCwgcHJvajQpOw0KCX0gZWxzZSB7DQoJCS8vIEJyb3dzZXIgZ2xvYmFscw0KCQlpZiAodHlwZW9mIHdpbmRvdy5MID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2Ygd2luZG93LnByb2o0ID09PSAndW5kZWZpbmVkJykNCgkJCXRocm93ICdMZWFmbGV0IGFuZCBwcm9qNCBtdXN0IGJlIGxvYWRlZCBmaXJzdCc7DQoJCWZhY3Rvcnkod2luZG93LkwsIHdpbmRvdy5wcm9qNCk7DQoJfQ0KfShmdW5jdGlvbiAoTCwgcHJvajQpIHsNCg0KCUwuUHJvaiA9IHt9Ow0KDQoJTC5Qcm9qLl9pc1Byb2o0T2JqID0gZnVuY3Rpb24oYSkgew0KCQlyZXR1cm4gKHR5cGVvZiBhLmludmVyc2UgIT09ICd1bmRlZmluZWQnICYmDQoJCQl0eXBlb2YgYS5mb3J3YXJkICE9PSAndW5kZWZpbmVkJyk7DQoJfTsNCg0KCUwuUHJvai5TY2FsZURlcGVuZGFudFRyYW5zZm9ybWF0aW9uID0gZnVuY3Rpb24oc2NhbGVUcmFuc2Zvcm1zKSB7DQoJCXRoaXMuc2NhbGVUcmFuc2Zvcm1zID0gc2NhbGVUcmFuc2Zvcm1zOw0KCX07DQoNCglMLlByb2ouU2NhbGVEZXBlbmRhbnRUcmFuc2Zvcm1hdGlvbi5wcm90b3R5cGUudHJhbnNmb3JtID0gZnVuY3Rpb24ocG9pbnQsIHNjYWxlKSB7DQoJCXJldHVybiB0aGlzLnNjYWxlVHJhbnNmb3Jtc1tzY2FsZV0udHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJfTsNCg0KCUwuUHJvai5TY2FsZURlcGVuZGFudFRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZS51bnRyYW5zZm9ybSA9IGZ1bmN0aW9uKHBvaW50LCBzY2FsZSkgew0KCQlyZXR1cm4gdGhpcy5zY2FsZVRyYW5zZm9ybXNbc2NhbGVdLnVudHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7DQoJfTsNCg0KCUwuUHJvai5Qcm9qZWN0aW9uID0gTC5DbGFzcy5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihhLCBkZWYpIHsNCgkJCWlmIChMLlByb2ouX2lzUHJvajRPYmooYSkpIHsNCgkJCQl0aGlzLl9wcm9qID0gYTsNCgkJCX0gZWxzZSB7DQoJCQkJdmFyIGNvZGUgPSBhOw0KCQkJCWlmIChkZWYpIHsNCgkJCQkJcHJvajQuZGVmcyhjb2RlLCBkZWYpOw0KCQkJCX0gZWxzZSBpZiAocHJvajQuZGVmc1tjb2RlXSA9PT0gdW5kZWZpbmVkKSB7DQoJCQkJCXZhciB1cm4gPSBjb2RlLnNwbGl0KCc6Jyk7DQoJCQkJCWlmICh1cm4ubGVuZ3RoID4gMykgew0KCQkJCQkJY29kZSA9IHVyblt1cm4ubGVuZ3RoIC0gM10gKyAnOicgKyB1cm5bdXJuLmxlbmd0aCAtIDFdOw0KCQkJCQl9DQoJCQkJCWlmIChwcm9qNC5kZWZzW2NvZGVdID09PSB1bmRlZmluZWQpIHsNCgkJCQkJCXRocm93ICdObyBwcm9qZWN0aW9uIGRlZmluaXRpb24gZm9yIGNvZGUgJyArIGNvZGU7DQoJCQkJCX0NCgkJCQl9DQoJCQkJdGhpcy5fcHJvaiA9IHByb2o0KGNvZGUpOw0KCQkJfQ0KCQl9LA0KDQoJCXByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHsNCgkJCXZhciBwb2ludCA9IHRoaXMuX3Byb2ouZm9yd2FyZChbbGF0bG5nLmxuZywgbGF0bG5nLmxhdF0pOw0KCQkJcmV0dXJuIG5ldyBMLlBvaW50KHBvaW50WzBdLCBwb2ludFsxXSk7DQoJCX0sDQoNCgkJdW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQsIHVuYm91bmRlZCkgew0KCQkJdmFyIHBvaW50MiA9IHRoaXMuX3Byb2ouaW52ZXJzZShbcG9pbnQueCwgcG9pbnQueV0pOw0KCQkJcmV0dXJuIG5ldyBMLkxhdExuZyhwb2ludDJbMV0sIHBvaW50MlswXSwgdW5ib3VuZGVkKTsNCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLkNSUyA9IEwuQ2xhc3MuZXh0ZW5kKHsNCgkJaW5jbHVkZXM6IEwuQ1JTLA0KDQoJCW9wdGlvbnM6IHsNCgkJCXRyYW5zZm9ybWF0aW9uOiBuZXcgTC5UcmFuc2Zvcm1hdGlvbigxLCAwLCAtMSwgMCkNCgkJfSwNCg0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihhLCBiLCBjKSB7DQoJCQl2YXIgY29kZSwgcHJvaiwgZGVmLCBvcHRpb25zOw0KDQoJCQlpZiAoTC5Qcm9qLl9pc1Byb2o0T2JqKGEpKSB7DQoJCQkJcHJvaiA9IGE7DQoJCQkJY29kZSA9IHByb2ouc3JzQ29kZTsNCgkJCQlvcHRpb25zID0gYiB8fCB7fTsNCg0KCQkJCXRoaXMucHJvamVjdGlvbiA9IG5ldyBMLlByb2ouUHJvamVjdGlvbihwcm9qKTsNCgkJCX0gZWxzZSB7DQoJCQkJY29kZSA9IGE7DQoJCQkJZGVmID0gYjsNCgkJCQlvcHRpb25zID0gYyB8fCB7fTsNCgkJCQl0aGlzLnByb2plY3Rpb24gPSBuZXcgTC5Qcm9qLlByb2plY3Rpb24oY29kZSwgZGVmKTsNCgkJCX0NCg0KCQkJTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7DQoJCQl0aGlzLmNvZGUgPSBjb2RlOw0KCQkJdGhpcy50cmFuc2Zvcm1hdGlvbiA9IHRoaXMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbjsNCg0KCQkJaWYgKHRoaXMub3B0aW9ucy5vcmlnaW4pIHsNCgkJCQl0aGlzLnRyYW5zZm9ybWF0aW9uID0NCgkJCQkJbmV3IEwuVHJhbnNmb3JtYXRpb24oMSwgLXRoaXMub3B0aW9ucy5vcmlnaW5bMF0sDQoJCQkJCQktMSwgdGhpcy5vcHRpb25zLm9yaWdpblsxXSk7DQoJCQl9DQoNCgkJCWlmICh0aGlzLm9wdGlvbnMuc2NhbGVzKSB7DQoJCQkJdGhpcy5fc2NhbGVzID0gdGhpcy5vcHRpb25zLnNjYWxlczsNCgkJCX0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnJlc29sdXRpb25zKSB7DQoJCQkJdGhpcy5fc2NhbGVzID0gW107DQoJCQkJZm9yICh2YXIgaSA9IHRoaXMub3B0aW9ucy5yZXNvbHV0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KCQkJCQlpZiAodGhpcy5vcHRpb25zLnJlc29sdXRpb25zW2ldKSB7DQoJCQkJCQl0aGlzLl9zY2FsZXNbaV0gPSAxIC8gdGhpcy5vcHRpb25zLnJlc29sdXRpb25zW2ldOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9LA0KDQoJCXNjYWxlOiBmdW5jdGlvbih6b29tKSB7DQoJCQl2YXIgaVpvb20gPSBNYXRoLmZsb29yKHpvb20pLA0KCQkJCWJhc2VTY2FsZSwNCgkJCQluZXh0U2NhbGUsDQoJCQkJc2NhbGVEaWZmLA0KCQkJCXpEaWZmOw0KCQkJaWYgKHpvb20gPT09IGlab29tKSB7DQoJCQkJcmV0dXJuIHRoaXMuX3NjYWxlc1t6b29tXTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gTm9uLWludGVnZXIgem9vbSwgaW50ZXJwb2xhdGUNCgkJCQliYXNlU2NhbGUgPSB0aGlzLl9zY2FsZXNbaVpvb21dOw0KCQkJCW5leHRTY2FsZSA9IHRoaXMuX3NjYWxlc1tpWm9vbSArIDFdOw0KCQkJCXNjYWxlRGlmZiA9IG5leHRTY2FsZSAtIGJhc2VTY2FsZTsNCgkJCQl6RGlmZiA9ICh6b29tIC0gaVpvb20pOw0KCQkJCXJldHVybiBiYXNlU2NhbGUgKyBzY2FsZURpZmYgKiB6RGlmZjsNCgkJCX0NCgkJfSwNCg0KCQlnZXRTaXplOiBmdW5jdGlvbih6b29tKSB7DQoJCQl2YXIgYiA9IHRoaXMub3B0aW9ucy5ib3VuZHMsDQoJCQkgICAgcywNCgkJCSAgICBtaW4sDQoJCQkgICAgbWF4Ow0KDQoJCQlpZiAoYikgew0KCQkJCXMgPSB0aGlzLnNjYWxlKHpvb20pOw0KCQkJCW1pbiA9IHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGIubWluLCBzKTsNCgkJCQltYXggPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShiLm1heCwgcyk7DQoJCQkJcmV0dXJuIEwucG9pbnQoTWF0aC5hYnMobWF4LnggLSBtaW4ueCksIE1hdGguYWJzKG1heC55IC0gbWluLnkpKTsNCgkJCX0gZWxzZSB7DQoJCQkJLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBMZWFmbGV0IDwgMC43DQoJCQkJcyA9IDI1NiAqIE1hdGgucG93KDIsIHpvb20pOw0KCQkJCXJldHVybiBMLnBvaW50KHMsIHMpOw0KCQkJfQ0KCQl9DQoJfSk7DQoNCglMLlByb2ouQ1JTLlRNUyA9IEwuUHJvai5DUlMuZXh0ZW5kKHsNCgkJb3B0aW9uczogew0KCQkJdGlsZVNpemU6IDI1Ng0KCQl9LA0KDQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsNCgkJCXZhciBjb2RlLA0KCQkJCWRlZiwNCgkJCQlwcm9qLA0KCQkJCXByb2plY3RlZEJvdW5kcywNCgkJCQlvcHRpb25zOw0KDQoJCQlpZiAoTC5Qcm9qLl9pc1Byb2o0T2JqKGEpKSB7DQoJCQkJcHJvaiA9IGE7DQoJCQkJcHJvamVjdGVkQm91bmRzID0gYjsNCgkJCQlvcHRpb25zID0gYyB8fCB7fTsNCgkJCQlvcHRpb25zLm9yaWdpbiA9IFtwcm9qZWN0ZWRCb3VuZHNbMF0sIHByb2plY3RlZEJvdW5kc1szXV07DQoJCQkJTC5Qcm9qLkNSUy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHByb2osIG9wdGlvbnMpOw0KCQkJfSBlbHNlIHsNCgkJCQljb2RlID0gYTsNCgkJCQlkZWYgPSBiOw0KCQkJCXByb2plY3RlZEJvdW5kcyA9IGM7DQoJCQkJb3B0aW9ucyA9IGQgfHwge307DQoJCQkJb3B0aW9ucy5vcmlnaW4gPSBbcHJvamVjdGVkQm91bmRzWzBdLCBwcm9qZWN0ZWRCb3VuZHNbM11dOw0KCQkJCUwuUHJvai5DUlMucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCBjb2RlLCBkZWYsIG9wdGlvbnMpOw0KCQkJfQ0KDQoJCQl0aGlzLnByb2plY3RlZEJvdW5kcyA9IHByb2plY3RlZEJvdW5kczsNCg0KCQkJdGhpcy5fc2l6ZXMgPSB0aGlzLl9jYWxjdWxhdGVTaXplcygpOw0KCQl9LA0KDQoJCV9jYWxjdWxhdGVTaXplczogZnVuY3Rpb24oKSB7DQoJCQl2YXIgc2l6ZXMgPSBbXSwNCgkJCSAgICBjcnNCb3VuZHMgPSB0aGlzLnByb2plY3RlZEJvdW5kcywNCgkJCSAgICBwcm9qZWN0ZWRUaWxlU2l6ZSwNCgkJCSAgICBpLA0KCQkJICAgIHgsDQoJCQkgICAgeTsNCgkJCWZvciAoaSA9IHRoaXMuX3NjYWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgew0KCQkJCWlmICh0aGlzLl9zY2FsZXNbaV0pIHsNCgkJCQkJcHJvamVjdGVkVGlsZVNpemUgPSB0aGlzLm9wdGlvbnMudGlsZVNpemUgLyB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCS8vIHRvIHByZXZlbnQgdmVyeSBzbWFsbCByb3VuZGluZyBlcnJvcnMgZnJvbSBjYXVzaW5nIHVzIHRvIHJvdW5kIHVwLA0KCQkJCQkvLyBjdXQgYW55IGRlY2ltYWxzIGFmdGVyIDNyZCBiZWZvcmUgcm91bmRpbmcgdXAuDQoJCQkJCXggPSBNYXRoLmNlaWwocGFyc2VGbG9hdCgoY3JzQm91bmRzWzJdIC0gY3JzQm91bmRzWzBdKSAvIHByb2plY3RlZFRpbGVTaXplKS50b1ByZWNpc2lvbigzKSkgKg0KCQkJCQkgICAgcHJvamVjdGVkVGlsZVNpemUgKiB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCXkgPSBNYXRoLmNlaWwocGFyc2VGbG9hdCgoY3JzQm91bmRzWzNdIC0gY3JzQm91bmRzWzFdKSAvIHByb2plY3RlZFRpbGVTaXplKS50b1ByZWNpc2lvbigzKSkgKg0KCQkJCQkgICAgcHJvamVjdGVkVGlsZVNpemUgKiB0aGlzLl9zY2FsZXNbaV07DQoJCQkJCXNpemVzW2ldID0gTC5wb2ludCh4LCB5KTsNCgkJCQl9DQoJCQl9DQoNCgkJCXJldHVybiBzaXplczsNCgkJfSwNCg0KCQlnZXRTaXplOiBmdW5jdGlvbih6b29tKSB7DQoJCQlyZXR1cm4gdGhpcy5fc2l6ZXNbem9vbV07DQoJCX0NCgl9KTsNCg0KCUwuUHJvai5UaWxlTGF5ZXIgPSB7fTsNCg0KCS8vIE5vdGU6IGRlcHJlY2F0ZWQgYW5kIG5vdCBuZWNlc3Nhcnkgc2luY2UgMC43LCB3aWxsIGJlIHJlbW92ZWQNCglMLlByb2ouVGlsZUxheWVyLlRNUyA9IEwuVGlsZUxheWVyLmV4dGVuZCh7DQoJCW9wdGlvbnM6IHsNCgkJCWNvbnRpbnVvdXNXb3JsZDogdHJ1ZQ0KCQl9LA0KDQoJCWluaXRpYWxpemU6IGZ1bmN0aW9uKHVybFRlbXBsYXRlLCBjcnMsIG9wdGlvbnMpIHsNCgkJCXZhciBib3VuZHNNYXRjaGVzR3JpZCA9IHRydWUsDQoJCQkJc2NhbGVUcmFuc2Zvcm1zLA0KCQkJCXVwcGVyWSwNCgkJCQljcnNCb3VuZHMsDQoJCQkJaTsNCg0KCQkJaWYgKCEoY3JzIGluc3RhbmNlb2YgTC5Qcm9qLkNSUy5UTVMpKSB7DQoJCQkJdGhyb3cgJ0NSUyBpcyBub3QgTC5Qcm9qLkNSUy5UTVMuJzsNCgkJCX0NCg0KCQkJTC5UaWxlTGF5ZXIucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCB1cmxUZW1wbGF0ZSwgb3B0aW9ucyk7DQoJCQkvLyBFbmFibGluZyB0bXMgd2lsbCBjYXVzZSBMZWFmbGV0IHRvIGFsc28gdHJ5IHRvIGRvIFRNUywgd2hpY2ggd2lsbA0KCQkJLy8gYnJlYWsgKGF0IGxlYXN0IHByaW9yIHRvIDAuNy4wKS4gQWN0aXZlbHkgZGlzYWJsZSBpdCwgdG8gcHJldmVudA0KCQkJLy8gd2VsbC1tZWFuaW5nIHVzZXJzIGZyb20gc2hvb3RpbmcgdGhlbXNlbHZlcyBpbiB0aGUgZm9vdC4NCgkJCXRoaXMub3B0aW9ucy50bXMgPSBmYWxzZTsNCgkJCXRoaXMuY3JzID0gY3JzOw0KCQkJY3JzQm91bmRzID0gdGhpcy5jcnMucHJvamVjdGVkQm91bmRzOw0KDQoJCQkvLyBWZXJpZnkgZ3JpZCBhbGlnbm1lbnQNCgkJCWZvciAoaSA9IHRoaXMub3B0aW9ucy5taW5ab29tOyBpIDwgdGhpcy5vcHRpb25zLm1heFpvb20gJiYgYm91bmRzTWF0Y2hlc0dyaWQ7IGkrKykgew0KCQkJCXZhciBncmlkSGVpZ2h0ID0gKGNyc0JvdW5kc1szXSAtIGNyc0JvdW5kc1sxXSkgLw0KCQkJCQl0aGlzLl9wcm9qZWN0ZWRUaWxlU2l6ZShpKTsNCgkJCQlib3VuZHNNYXRjaGVzR3JpZCA9IE1hdGguYWJzKGdyaWRIZWlnaHQgLSBNYXRoLnJvdW5kKGdyaWRIZWlnaHQpKSA+IDFlLTM7DQoJCQl9DQoNCgkJCWlmICghYm91bmRzTWF0Y2hlc0dyaWQpIHsNCgkJCQlzY2FsZVRyYW5zZm9ybXMgPSB7fTsNCgkJCQlmb3IgKGkgPSB0aGlzLm9wdGlvbnMubWluWm9vbTsgaSA8IHRoaXMub3B0aW9ucy5tYXhab29tOyBpKyspIHsNCgkJCQkJdXBwZXJZID0gY3JzQm91bmRzWzFdICsgTWF0aC5jZWlsKChjcnNCb3VuZHNbM10gLSBjcnNCb3VuZHNbMV0pIC8NCgkJCQkJCXRoaXMuX3Byb2plY3RlZFRpbGVTaXplKGkpKSAqIHRoaXMuX3Byb2plY3RlZFRpbGVTaXplKGkpOw0KCQkJCQlzY2FsZVRyYW5zZm9ybXNbdGhpcy5jcnMuc2NhbGUoaSldID0gbmV3IEwuVHJhbnNmb3JtYXRpb24oMSwgLWNyc0JvdW5kc1swXSwgLTEsIHVwcGVyWSk7DQoJCQkJfQ0KDQoJCQkJdGhpcy5jcnMgPSBuZXcgTC5Qcm9qLkNSUy5UTVModGhpcy5jcnMucHJvamVjdGlvbi5fcHJvaiwgY3JzQm91bmRzLCB0aGlzLmNycy5vcHRpb25zKTsNCgkJCQl0aGlzLmNycy50cmFuc2Zvcm1hdGlvbiA9IG5ldyBMLlByb2ouU2NhbGVEZXBlbmRhbnRUcmFuc2Zvcm1hdGlvbihzY2FsZVRyYW5zZm9ybXMpOw0KCQkJfQ0KCQl9LA0KDQoJCWdldFRpbGVVcmw6IGZ1bmN0aW9uKHRpbGVQb2ludCkgew0KCQkJdmFyIHpvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpLA0KCQkJCWdyaWRIZWlnaHQgPSBNYXRoLmNlaWwoDQoJCQkJKHRoaXMuY3JzLnByb2plY3RlZEJvdW5kc1szXSAtIHRoaXMuY3JzLnByb2plY3RlZEJvdW5kc1sxXSkgLw0KCQkJCXRoaXMuX3Byb2plY3RlZFRpbGVTaXplKHpvb20pKTsNCg0KCQkJcmV0dXJuIEwuVXRpbC50ZW1wbGF0ZSh0aGlzLl91cmwsIEwuVXRpbC5leHRlbmQoew0KCQkJCXM6IHRoaXMuX2dldFN1YmRvbWFpbih0aWxlUG9pbnQpLA0KCQkJCXo6IHRoaXMuX2dldFpvb21Gb3JVcmwoKSwNCgkJCQl4OiB0aWxlUG9pbnQueCwNCgkJCQl5OiBncmlkSGVpZ2h0IC0gdGlsZVBvaW50LnkgLSAxDQoJCQl9LCB0aGlzLm9wdGlvbnMpKTsNCgkJfSwNCg0KCQlfcHJvamVjdGVkVGlsZVNpemU6IGZ1bmN0aW9uKHpvb20pIHsNCgkJCXJldHVybiAodGhpcy5vcHRpb25zLnRpbGVTaXplIC8gdGhpcy5jcnMuc2NhbGUoem9vbSkpOw0KCQl9DQoJfSk7DQoNCglMLlByb2ouR2VvSlNPTiA9IEwuR2VvSlNPTi5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCQl0aGlzLl9jYWxsTGV2ZWwgPSAwOw0KCQkJTC5HZW9KU09OLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgbnVsbCwgb3B0aW9ucyk7DQoJCQlpZiAoZ2VvanNvbikgew0KCQkJCXRoaXMuYWRkRGF0YShnZW9qc29uKTsNCgkJCX0NCgkJfSwNCg0KCQlhZGREYXRhOiBmdW5jdGlvbihnZW9qc29uKSB7DQoJCQl2YXIgY3JzOw0KDQoJCQlpZiAoZ2VvanNvbikgew0KCQkJCWlmIChnZW9qc29uLmNycyAmJiBnZW9qc29uLmNycy50eXBlID09PSAnbmFtZScpIHsNCgkJCQkJY3JzID0gbmV3IEwuUHJvai5DUlMoZ2VvanNvbi5jcnMucHJvcGVydGllcy5uYW1lKTsNCgkJCQl9IGVsc2UgaWYgKGdlb2pzb24uY3JzICYmIGdlb2pzb24uY3JzLnR5cGUpIHsNCgkJCQkJY3JzID0gbmV3IEwuUHJvai5DUlMoZ2VvanNvbi5jcnMudHlwZSArICc6JyArIGdlb2pzb24uY3JzLnByb3BlcnRpZXMuY29kZSk7DQoJCQkJfQ0KDQoJCQkJaWYgKGNycyAhPT0gdW5kZWZpbmVkKSB7DQoJCQkJCXRoaXMub3B0aW9ucy5jb29yZHNUb0xhdExuZyA9IGZ1bmN0aW9uKGNvb3Jkcykgew0KCQkJCQkJdmFyIHBvaW50ID0gTC5wb2ludChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7DQoJCQkJCQlyZXR1cm4gY3JzLnByb2plY3Rpb24udW5wcm9qZWN0KHBvaW50KTsNCgkJCQkJfTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIEJhc2UgY2xhc3MnIGFkZERhdGEgbWlnaHQgY2FsbCB1cyByZWN1cnNpdmVseSwgYnV0DQoJCQkvLyBDUlMgc2hvdWxkbid0IGJlIGNsZWFyZWQgaW4gdGhhdCBjYXNlLCBzaW5jZSBDUlMgYXBwbGllcw0KCQkJLy8gdG8gdGhlIHdob2xlIEdlb0pTT04sIGlubHVkaW5nIHN1Yi1mZWF0dXJlcy4NCgkJCXRoaXMuX2NhbGxMZXZlbCsrOw0KCQkJdHJ5IHsNCgkJCQlMLkdlb0pTT04ucHJvdG90eXBlLmFkZERhdGEuY2FsbCh0aGlzLCBnZW9qc29uKTsNCgkJCX0gZmluYWxseSB7DQoJCQkJdGhpcy5fY2FsbExldmVsLS07DQoJCQkJaWYgKHRoaXMuX2NhbGxMZXZlbCA9PT0gMCkgew0KCQkJCQlkZWxldGUgdGhpcy5vcHRpb25zLmNvb3Jkc1RvTGF0TG5nOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLmdlb0pzb24gPSBmdW5jdGlvbihnZW9qc29uLCBvcHRpb25zKSB7DQoJCXJldHVybiBuZXcgTC5Qcm9qLkdlb0pTT04oZ2VvanNvbiwgb3B0aW9ucyk7DQoJfTsNCg0KCUwuUHJvai5JbWFnZU92ZXJsYXkgPSBMLkltYWdlT3ZlcmxheS5leHRlbmQoew0KCQlpbml0aWFsaXplOiBmdW5jdGlvbih1cmwsIGJvdW5kcywgb3B0aW9ucykgew0KCQkJTC5JbWFnZU92ZXJsYXkucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzLCB1cmwsIG51bGwsIG9wdGlvbnMpOw0KCQkJdGhpcy5fcHJvakJvdW5kcyA9IGJvdW5kczsNCgkJfSwNCg0KCQkvKiBEYW5nZXIgYWhlYWQ6IG92ZXJyaWRpbmcgaW50ZXJuYWwgbWV0aG9kcyBpbiBMZWFmbGV0Lg0KCQkgICBJJ3ZlIGRlY2lkZWQgdG8gZG8gdGhpcyByYXRoZXIgdGhhbiBtYWtpbmcgYSBjb3B5IG9mIEwuSW1hZ2VPdmVybGF5DQoJCSAgIGFuZCBtYWtpbmcgdmVyeSB0aW55IG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZ1dHVyZSB3aWxsIHRlbGwgaWYgdGhpcw0KCQkgICB3YXMgd2lzZSBvciBub3QuICovDQoJCV9hbmltYXRlWm9vbTogZnVuY3Rpb24gKGUpIHsNCgkJCXZhciBub3J0aHdlc3QgPSBMLnBvaW50KHRoaXMuX3Byb2pCb3VuZHMubWluLngsIHRoaXMuX3Byb2pCb3VuZHMubWF4LnkpLA0KCQkJCXNvdXRoZWFzdCA9ICBMLnBvaW50KHRoaXMuX3Byb2pCb3VuZHMubWF4LngsIHRoaXMuX3Byb2pCb3VuZHMubWluLnkpLA0KCQkJCXRvcExlZnQgPSB0aGlzLl9wcm9qZWN0ZWRUb05ld0xheWVyUG9pbnQobm9ydGh3ZXN0LCBlLnpvb20sIGUuY2VudGVyKSwNCgkJCSAgICBzaXplID0gdGhpcy5fcHJvamVjdGVkVG9OZXdMYXllclBvaW50KHNvdXRoZWFzdCwgZS56b29tLCBlLmNlbnRlcikuc3VidHJhY3QodG9wTGVmdCksDQoJCQkgICAgb3JpZ2luID0gdG9wTGVmdC5hZGQoc2l6ZS5fbXVsdGlwbHlCeSgoMSAtIDEgLyBlLnNjYWxlKSAvIDIpKTsNCg0KCQkJdGhpcy5faW1hZ2Uuc3R5bGVbTC5Eb21VdGlsLlRSQU5TRk9STV0gPQ0KCQkgICAgICAgIEwuRG9tVXRpbC5nZXRUcmFuc2xhdGVTdHJpbmcob3JpZ2luKSArICcgc2NhbGUoJyArIHRoaXMuX21hcC5nZXRab29tU2NhbGUoZS56b29tKSArICcpICc7DQoJCX0sDQoNCgkJX3Jlc2V0OiBmdW5jdGlvbigpIHsNCgkJCXZhciB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKSwNCgkJCQlwaXhlbE9yaWdpbiA9IHRoaXMuX21hcC5nZXRQaXhlbE9yaWdpbigpLA0KCQkJCWJvdW5kcyA9IEwuYm91bmRzKHRoaXMuX3RyYW5zZm9ybSh0aGlzLl9wcm9qQm91bmRzLm1pbiwgem9vbSkuX3N1YnRyYWN0KHBpeGVsT3JpZ2luKSwNCgkJCQkJdGhpcy5fdHJhbnNmb3JtKHRoaXMuX3Byb2pCb3VuZHMubWF4LCB6b29tKS5fc3VidHJhY3QocGl4ZWxPcmlnaW4pKSwNCgkJCQlzaXplID0gYm91bmRzLmdldFNpemUoKSwNCgkJCQlpbWFnZSA9IHRoaXMuX2ltYWdlOw0KDQoJCQlMLkRvbVV0aWwuc2V0UG9zaXRpb24oaW1hZ2UsIGJvdW5kcy5taW4pOw0KCQkJaW1hZ2Uuc3R5bGUud2lkdGggID0gc2l6ZS54ICsgJ3B4JzsNCgkJCWltYWdlLnN0eWxlLmhlaWdodCA9IHNpemUueSArICdweCc7DQoJCX0sDQoNCgkJX3Byb2plY3RlZFRvTmV3TGF5ZXJQb2ludDogZnVuY3Rpb24gKHBvaW50LCBuZXdab29tLCBuZXdDZW50ZXIpIHsNCgkJCXZhciB0b3BMZWZ0ID0gdGhpcy5fbWFwLl9nZXROZXdUb3BMZWZ0UG9pbnQobmV3Q2VudGVyLCBuZXdab29tKS5hZGQodGhpcy5fbWFwLl9nZXRNYXBQYW5lUG9zKCkpOw0KCQkJcmV0dXJuIHRoaXMuX3RyYW5zZm9ybShwb2ludCwgbmV3Wm9vbSkuX3N1YnRyYWN0KHRvcExlZnQpOw0KCQl9LA0KDQoJCV90cmFuc2Zvcm06IGZ1bmN0aW9uKHAsIHpvb20pIHsNCgkJCXZhciBjcnMgPSB0aGlzLl9tYXAub3B0aW9ucy5jcnMsDQoJCQkJdHJhbnNmb3JtYXRpb24gPSBjcnMudHJhbnNmb3JtYXRpb24sDQoJCQkJc2NhbGUgPSBjcnMuc2NhbGUoem9vbSk7DQoJCQlyZXR1cm4gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHAsIHNjYWxlKTsNCgkJfQ0KCX0pOw0KDQoJTC5Qcm9qLmltYWdlT3ZlcmxheSA9IGZ1bmN0aW9uKHVybCwgYm91bmRzLCBvcHRpb25zKSB7DQoJCXJldHVybiBuZXcgTC5Qcm9qLkltYWdlT3ZlcmxheSh1cmwsIGJvdW5kcywgb3B0aW9ucyk7DQoJfTsNCg0KCWlmICh0eXBlb2YgTC5DUlMgIT09ICd1bmRlZmluZWQnKSB7DQoJCS8vIFRoaXMgaXMgbGVmdCBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQ0KCQlMLkNSUy5wcm9qNGpzID0gKGZ1bmN0aW9uICgpIHsNCgkJCXJldHVybiBmdW5jdGlvbiAoY29kZSwgZGVmLCB0cmFuc2Zvcm1hdGlvbiwgb3B0aW9ucykgew0KCQkJCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9Ow0KCQkJCWlmICh0cmFuc2Zvcm1hdGlvbikgew0KCQkJCQlvcHRpb25zLnRyYW5zZm9ybWF0aW9uID0gdHJhbnNmb3JtYXRpb247DQoJCQkJfQ0KDQoJCQkJcmV0dXJuIG5ldyBMLlByb2ouQ1JTKGNvZGUsIGRlZiwgb3B0aW9ucyk7DQoJCQl9Ow0KCQl9KCkpOw0KCX0NCg0KCXJldHVybiBMLlByb2o7DQp9KSk7DQo="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IGYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSh7MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7CgpmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCnZhciBDbHVzdGVyTGF5ZXJTdG9yZSA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBDbHVzdGVyTGF5ZXJTdG9yZShncm91cCkgewogICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsdXN0ZXJMYXllclN0b3JlKTsKCiAgICB0aGlzLl9sYXllcnMgPSB7fTsKICAgIHRoaXMuX2dyb3VwID0gZ3JvdXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ2x1c3RlckxheWVyU3RvcmUsIFt7CiAgICBrZXk6ICJhZGQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGFkZChsYXllciwgaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fbGF5ZXJzW2lkXSkgewogICAgICAgICAgdGhpcy5fZ3JvdXAucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjsKICAgICAgfQogICAgICB0aGlzLl9ncm91cC5hZGRMYXllcihsYXllcik7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmUoaWQpIHsKICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gInVuZGVmaW5lZCIgfHwgaWQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlkID0gKDAsIF91dGlsLmFzQXJyYXkpKGlkKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICh0aGlzLl9sYXllcnNbaWRbaV1dKSB7CiAgICAgICAgICB0aGlzLl9ncm91cC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRbaV1dKTsKICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRbaV1dOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHsKICAgICAgdGhpcy5fbGF5ZXJzID0ge307CiAgICAgIHRoaXMuX2dyb3VwLmNsZWFyTGF5ZXJzKCk7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gQ2x1c3RlckxheWVyU3RvcmU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IENsdXN0ZXJMYXllclN0b3JlOwoKCn0seyIuL3V0aWwiOjE1fV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9Cgp2YXIgQ29udHJvbFN0b3JlID0gZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIENvbnRyb2xTdG9yZShtYXApIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb250cm9sU3RvcmUpOwoKICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwogICAgdGhpcy5fY29udHJvbHNCeUlkID0ge307CiAgICB0aGlzLl9tYXAgPSBtYXA7CiAgfQoKICBfY3JlYXRlQ2xhc3MoQ29udHJvbFN0b3JlLCBbewogICAga2V5OiAiYWRkIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBhZGQoY29udHJvbCwgaWQsIGh0bWwpIHsKICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gInVuZGVmaW5lZCIgJiYgaWQgIT09IG51bGwpIHsKICAgICAgICBpZiAodGhpcy5fY29udHJvbHNCeUlkW2lkXSkgewogICAgICAgICAgdGhpcy5fbWFwLnJlbW92ZUNvbnRyb2wodGhpcy5fY29udHJvbHNCeUlkW2lkXSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2NvbnRyb2xzQnlJZFtpZF0gPSBjb250cm9sOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZC5wdXNoKGNvbnRyb2wpOwogICAgICB9CiAgICAgIHRoaXMuX21hcC5hZGRDb250cm9sKGNvbnRyb2wpOwogICAgfQogIH0sIHsKICAgIGtleTogInJlbW92ZSIsCiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKGlkKSB7CiAgICAgIGlmICh0aGlzLl9jb250cm9sc0J5SWRbaWRdKSB7CiAgICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpOwogICAgICAgIGRlbGV0ZSB0aGlzLl9jb250cm9sc0J5SWRbaWRdOwogICAgICB9CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2NvbnRyb2xzTm9JZC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjb250cm9sID0gdGhpcy5fY29udHJvbHNOb0lkW2ldOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKGNvbnRyb2wpOwogICAgICB9CiAgICAgIHRoaXMuX2NvbnRyb2xzTm9JZCA9IFtdOwoKICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuX2NvbnRyb2xzQnlJZCkgewogICAgICAgIHZhciBfY29udHJvbCA9IHRoaXMuX2NvbnRyb2xzQnlJZFtrZXldOwogICAgICAgIHRoaXMuX21hcC5yZW1vdmVDb250cm9sKF9jb250cm9sKTsKICAgICAgfQogICAgICB0aGlzLl9jb250cm9sc0J5SWQgPSB7fTsKICAgIH0KICB9XSk7CgogIHJldHVybiBDb250cm9sU3RvcmU7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IENvbnRyb2xTdG9yZTsKCgp9LHt9XSwzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmdldENSUyA9IGdldENSUzsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCnZhciBfcHJvajRsZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvcHJvajRsZWFmbGV0Iik7Cgp2YXIgX3Byb2o0bGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9qNGxlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCi8vIEhlbHBlciBmdW5jdGlvbiB0byBpbnN0YW5jaWF0ZSBhIElDUlMgaW5zdGFuY2UuCmZ1bmN0aW9uIGdldENSUyhjcnNPcHRpb25zKSB7CiAgdmFyIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzg1NzsgLy8gRGVmYXVsdCBTcGhlcmljYWwgTWVyY2F0b3IKCiAgc3dpdGNoIChjcnNPcHRpb25zLmNyc0NsYXNzKSB7CiAgICBjYXNlICJMLkNSUy5FUFNHMzg1NyI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzg1NzsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5FUFNHNDMyNiI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHNDMyNjsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5FUFNHMzM5NSI6CiAgICAgIGNycyA9IF9sZWFmbGV0Mi5kZWZhdWx0LkNSUy5FUFNHMzM5NTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJMLkNSUy5TaW1wbGUiOgogICAgICBjcnMgPSBfbGVhZmxldDIuZGVmYXVsdC5DUlMuU2ltcGxlOwogICAgICBicmVhazsKICAgIGNhc2UgIkwuUHJvai5DUlMiOgogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpIHsKICAgICAgICBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzID0gX2xlYWZsZXQyLmRlZmF1bHQuYm91bmRzKGNyc09wdGlvbnMub3B0aW9ucy5ib3VuZHMpOwogICAgICB9CiAgICAgIGlmIChjcnNPcHRpb25zLm9wdGlvbnMgJiYgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uID0gX2xlYWZsZXQyLmRlZmF1bHQuVHJhbnNmb3JtYXRpb24oY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzBdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMV0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblsyXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzNdKTsKICAgICAgfQogICAgICBjcnMgPSBuZXcgX3Byb2o0bGVhZmxldDIuZGVmYXVsdC5DUlMoY3JzT3B0aW9ucy5jb2RlLCBjcnNPcHRpb25zLnByb2o0ZGVmLCBjcnNPcHRpb25zLm9wdGlvbnMpOwogICAgICBicmVhazsKICAgIGNhc2UgIkwuUHJvai5DUlMuVE1TIjoKICAgICAgaWYgKGNyc09wdGlvbnMub3B0aW9ucyAmJiBjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKSB7CiAgICAgICAgY3JzT3B0aW9ucy5vcHRpb25zLmJvdW5kcyA9IF9sZWFmbGV0Mi5kZWZhdWx0LmJvdW5kcyhjcnNPcHRpb25zLm9wdGlvbnMuYm91bmRzKTsKICAgICAgfQogICAgICBpZiAoY3JzT3B0aW9ucy5vcHRpb25zICYmIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbikgewogICAgICAgIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvbiA9IF9sZWFmbGV0Mi5kZWZhdWx0LlRyYW5zZm9ybWF0aW9uKGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblswXSwgY3JzT3B0aW9ucy5vcHRpb25zLnRyYW5zZm9ybWF0aW9uWzFdLCBjcnNPcHRpb25zLm9wdGlvbnMudHJhbnNmb3JtYXRpb25bMl0sIGNyc09wdGlvbnMub3B0aW9ucy50cmFuc2Zvcm1hdGlvblszXSk7CiAgICAgIH0KICAgICAgY3JzID0gbmV3IF9wcm9qNGxlYWZsZXQyLmRlZmF1bHQuQ1JTLlRNUyhjcnNPcHRpb25zLmNvZGUsIGNyc09wdGlvbnMucHJvajRkZWYsIGNyc09wdGlvbnMucHJvamVjdGVkQm91bmRzLCBjcnNPcHRpb25zLm9wdGlvbnMpOwogICAgICBicmVhazsKICB9CiAgcmV0dXJuIGNyczsKfQoKCn0seyIuL2dsb2JhbC9sZWFmbGV0Ijo4LCIuL2dsb2JhbC9wcm9qNGxlYWZsZXQiOjl9XSw0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwoKdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OwoKdmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7Cgp2YXIgX3V0aWwgPSByZXF1aXJlKCIuL3V0aWwiKTsKCmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKdmFyIERhdGFGcmFtZSA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBEYXRhRnJhbWUoKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGF0YUZyYW1lKTsKCiAgICB0aGlzLmNvbHVtbnMgPSBbXTsKICAgIHRoaXMuY29sbmFtZXMgPSBbXTsKICAgIHRoaXMuY29sc3RyaWN0ID0gW107CgogICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgdGhpcy5jb2xpbmRpY2VzID0ge307CiAgfQoKICBfY3JlYXRlQ2xhc3MoRGF0YUZyYW1lLCBbewogICAga2V5OiAiX3VwZGF0ZUNhY2hlZFByb3BlcnRpZXMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF91cGRhdGVDYWNoZWRQcm9wZXJ0aWVzKCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdGhpcy5lZmZlY3RpdmVMZW5ndGggPSAwOwogICAgICB0aGlzLmNvbGluZGljZXMgPSB7fTsKCiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGkpIHsKICAgICAgICBfdGhpcy5lZmZlY3RpdmVMZW5ndGggPSBNYXRoLm1heChfdGhpcy5lZmZlY3RpdmVMZW5ndGgsIGNvbHVtbi5sZW5ndGgpOwogICAgICAgIF90aGlzLmNvbGluZGljZXNbX3RoaXMuY29sbmFtZXNbaV1dID0gaTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiX2NvbEluZGV4IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfY29sSW5kZXgoY29sbmFtZSkgewogICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbGluZGljZXNbY29sbmFtZV07CiAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gLTE7CiAgICAgIHJldHVybiBpbmRleDsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjb2wiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNvbChuYW1lLCB2YWx1ZXMsIHN0cmljdCkgewogICAgICBpZiAodHlwZW9mIG5hbWUgIT09ICJzdHJpbmciKSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29sdW1uIG5hbWUgXCIiICsgbmFtZSArICJcIiIpOwoKICAgICAgdmFyIGluZGV4ID0gdGhpcy5fY29sSW5kZXgobmFtZSk7CgogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybiBudWxsO2Vsc2UgcmV0dXJuICgwLCBfdXRpbC5yZWN5Y2xlKSh0aGlzLmNvbHVtbnNbaW5kZXhdLCB0aGlzLmVmZmVjdGl2ZUxlbmd0aCk7CiAgICAgIH0KCiAgICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICBpbmRleCA9IHRoaXMuY29sbmFtZXMubGVuZ3RoOwogICAgICAgIHRoaXMuY29sbmFtZXMucHVzaChuYW1lKTsKICAgICAgfQogICAgICB0aGlzLmNvbHVtbnNbaW5kZXhdID0gKDAsIF91dGlsLmFzQXJyYXkpKHZhbHVlcyk7CiAgICAgIHRoaXMuY29sc3RyaWN0W2luZGV4XSA9ICEhc3RyaWN0OwoKICAgICAgLy8gVE9ETzogVmFsaWRhdGUgc3RyaWN0bmVzcyAoZW5zdXJlIGxlbmd0aHMgbWF0Y2ggdXAgd2l0aCBvdGhlciBzdHJpY3RzKQoKICAgICAgdGhpcy5fdXBkYXRlQ2FjaGVkUHJvcGVydGllcygpOwoKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgfSwgewogICAga2V5OiAiY2JpbmQiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNiaW5kKG9iaiwgc3RyaWN0KSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgdmFyIGNvbGRhdGEgPSBvYmpbbmFtZV07CiAgICAgICAgX3RoaXMyLmNvbChuYW1lLCBjb2xkYXRhKTsKICAgICAgfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogIH0sIHsKICAgIGtleTogImdldCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KHJvdywgY29sLCBtaXNzaW5nT0spIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgICBpZiAocm93ID4gdGhpcy5lZmZlY3RpdmVMZW5ndGgpIHRocm93IG5ldyBFcnJvcigiUm93IGFyZ3VtZW50IHdhcyBvdXQgb2YgYm91bmRzOiAiICsgcm93ICsgIiA+ICIgKyB0aGlzLmVmZmVjdGl2ZUxlbmd0aCk7CgogICAgICB2YXIgY29sSW5kZXggPSAtMTsKICAgICAgaWYgKHR5cGVvZiBjb2wgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgdmFyIF9yZXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgcm93RGF0YSA9IHt9OwogICAgICAgICAgX3RoaXMzLmNvbG5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUsIGkpIHsKICAgICAgICAgICAgcm93RGF0YVtuYW1lXSA9IF90aGlzMy5jb2x1bW5zW2ldW3JvdyAlIF90aGlzMy5jb2x1bW5zW2ldLmxlbmd0aF07CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHY6IHJvd0RhdGEKICAgICAgICAgIH07CiAgICAgICAgfSgpOwoKICAgICAgICBpZiAoKHR5cGVvZiBfcmV0ID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogX3R5cGVvZihfcmV0KSkgPT09ICJvYmplY3QiKSByZXR1cm4gX3JldC52OwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2wgPT09ICJzdHJpbmciKSB7CiAgICAgICAgY29sSW5kZXggPSB0aGlzLl9jb2xJbmRleChjb2wpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2wgPT09ICJudW1iZXIiKSB7CiAgICAgICAgY29sSW5kZXggPSBjb2w7CiAgICAgIH0KICAgICAgaWYgKGNvbEluZGV4IDwgMCB8fCBjb2xJbmRleCA+IHRoaXMuY29sdW1ucy5sZW5ndGgpIHsKICAgICAgICBpZiAobWlzc2luZ09LKSByZXR1cm4gdm9pZCAwO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbHVtbiBpbmRleDogIiArIGNvbCk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNbY29sSW5kZXhdW3JvdyAlIHRoaXMuY29sdW1uc1tjb2xJbmRleF0ubGVuZ3RoXTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJucm93IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBucm93KCkgewogICAgICByZXR1cm4gdGhpcy5lZmZlY3RpdmVMZW5ndGg7CiAgICB9CiAgfV0pOwoKICByZXR1cm4gRGF0YUZyYW1lOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBEYXRhRnJhbWU7CgoKfSx7Ii4vdXRpbCI6MTV9XSw1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKInVzZSBzdHJpY3QiOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCi8vIEluIFJNYXJrZG93bidzIHNlbGYtY29udGFpbmVkIG1vZGUsIHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gY2FycnkgYXJvdW5kIHRoZQovLyBpbWFnZXMgdGhhdCBMZWFmbGV0IG5lZWRzIGJ1dCBkb2Vzbid0IGxvYWQgaW50byB0aGUgcGFnZS4gSW5zdGVhZCwgd2UnbGwgc2V0Ci8vIGRhdGEgVVJJcyBmb3IgdGhlIGRlZmF1bHQgbWFya2VyLCBhbmQgbGV0IGFueSBvdGhlcnMgYmUgbG9hZGVkIHZpYSBDRE4uCmlmICh0eXBlb2YgX2xlYWZsZXQyLmRlZmF1bHQuSWNvbi5EZWZhdWx0LmltYWdlUGF0aCA9PT0gInVuZGVmaW5lZCIpIHsKICBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQuaW1hZ2VQYXRoID0gImh0dHA6Ly9jZG4ubGVhZmxldGpzLmNvbS9sZWFmbGV0LTAuNy4zL2ltYWdlcyI7CgogIGlmIChfbGVhZmxldDIuZGVmYXVsdC5Ccm93c2VyLnJldGluYSkgewogICAgX2xlYWZsZXQyLmRlZmF1bHQuSWNvbi5EZWZhdWx0LnByb3RvdHlwZS5vcHRpb25zLmljb25VcmwgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUJTQ0FZQUFBQVd5NGZyQUFBUGlFbEVRVlI0MnQxYkNWQ1U1eGttYmFidFpKSk9PK2wwbWhnVDB5UWUwV1haZ3oyNTcwTkI4STZKNlV6YVRCb09SUkZFcnVWR0RoV1VQUkFRUkZGUkVEblZ4Q3RFQlJiMjREQk5FM1dhYWF0cGttbHVvNG0rZmQ5djk5OW9sR1ZCRHUzT1BMaisvL3MrNy9XOTMvZjkvLzYvRXdBNC9UOWczQWxGT1VlZVVHUjJ1TXF6T3lKazJSMngwcXlPQW1ubWtTM1NyQ1ByWkpsSGxzcXpqeXBjczQ5T1gxSmYvL1A3S2hEODg1QTB1MTBteTJvdlFzY3Z5Ykk2d0VGOGl2STdwRm50QVY2cWt3OVBXU0JLMWJFblpSbHRtMldaN1I4aDRGYkkwVkczM0dQZ1hYZ0NBcmErQTRFSW44S1Q0SkgvRmlnb2lKL0lJejZUWmJWVktMTGFuNXUwUUVTcWxrY2tXVzNwMHN5MmJ4REFnWndPMTNURHl0b0IrTlBlOSt6aWxkMkRFRkd1QjcvTnB6RG9kcmlGNTVvMG83WElSWFhvTnhNYWlDU2o5VlUwOUM4RUVOeHlqMEM0dGh0ZXJoMkVWK3ZldXdPcjZzN0R5M3Nzb085M2szbGx6eEJFNlBUZ2tYY01PRjdFSjlLTXRxalI5SkZEUW5OVjliK1FxbHFxRUVDUVo3VEJndTFuWWRYdUlYZ1ZuZVN3WXRjZ1JGYjFRMWlGR1VMTHpSQ3NNOTBHT3JaZ2h4a2lLdnRoZWMwZ3JMcEZseEN1NmNLaDF3NmNIVVNiY3RQaHg4WWxFRWx1NCtOU1ZmTnBCQkFDdHB5R2xic0dtQk9FbFJoTUJEb2ZnazRHb2JPalFYQzVDUlppVUMvVkR0bjRxTHJCSlozQTJjTmcrbkU0UDMxUGdTREJiSW1xNVVOSmVqTVFGcWk3Y0NpY1ozaVpCVEFBUVZvVEJJNERLS0NWR0JESEg2bnJCUmxXeFdyN3NsalZJaGxUSURMVm9Sa1MxZUgvU05JUGd6eXpGUlpWOU5uRysrTHFRY3lvR1FMUWdmRkVJRllwY3VlQXpjNlNTaU1PdFRZZ0g5Q1hyK1dwVGJ4UkJlS2xxbjlVa3Raa1JvQUNaNVBsTzgxWWdmTU00Ulg5RUtBeFRTakNkdlRqRUxQWVcxN2REOHJzZGlCZkVCY2xTWTJQT3hRSUhubElrbnJvRUFKazZVMndwTUxJU0YvYU5RU2hXQVYvdFdsU0VJSzJWcUJOc3IyMDBnUnlHbUxva3lTMThjVGRGdEE3QW5GTmJjeEFBQ0dNclF0RExBanFCVCsxY1ZKQk5zazIrYkJRMXdPY1g1SzB4czEyQThHeXpYUk5hZmdlQVlGYjNtRWtyQkk0SS9tV0dVZU5RSTFseXAyUG9POWo0YURLY0g0RWJlMEU4ZzN4Z3l5bGNjNndnYmltTmpTU29GdFdLMXNUcUxSaDJCTStTT2dJZkRHTEpMOElHM1paalVYL1ZpeXZHWUxGT3dkWm4vbGpZSTd5enNlZTRUamNzVi9JUjNGcVErdGRBeEVuTlNqRnlRZUJFSzdwZ1JWb2RFblZJUGhzTnpxRVlLMFpsdUZzUm5xM1lqSDIyS0p5QTZ6NHlUbVNwWjV6bEg4UlR2V2t0MUNyQjg1UFlVcWp6eDJCdUc2c1B5ZmVlQUE4c2p0d3BoaGlDRlNid1h1YjBTN0lTUGlPQVp2TzRoMDQ4eFNmQk0rY0RwRGllQ1pPZ2dTejZKSGRCdjVGSjNDTjZMUEpSMVFNZ085MjA0aDJhQUxnZER4empscDRrdzhZYUhLeUJTSkpQaWdXYjZ3SFFpUm1ieGtLTDBRRFhraGdEOTRZeEdLc0dza1RRa3ZmeFZubElIQmNCTmZrZWd6aXdCM0hBbkhEdUd5blJYY3AvdXRYWmhyUkhpV001Q1BMamJkd0hWRFlBaEZ0M0o4clR0b1BicGt0U0RyRTRJTlo4aXcxMmtVWUVwUHM0a296ZU9XMEEzRVFJb3ZiWWNmeElUajc5OHZ3eGJmWDRPcjFIOEI0NlJPbzdmd2J2S1k5YnBOenkyaG1pU09PeU1yQkVlMlJUNXgvN3RqSHhDRksybC80WXlCSis5NUhRQUJtaWJLekVKdlJzOVJnRjRGcUU1TWxlR1MzQXVtTE4rNkQ0bFlqZkllT0QvZTVlUk9nN3N6N29FZzd3SFJrNlkzWWkvMk1Kd1Q3YkNTNzVCdkpCdUdzU3ZxSUQxZ2dhSHllYUFNZVFFUmd5YWpCZzNCRzhTZ3hEQXN2SkZ4VU9jQmtnN2QwTWwzWGpmdWhDeXZnNk9maXgxK0FsNnFCNmZwdWVvdHhzY2tGaDVBOTIrUWJ5ZEh3NHZ5bUdKeEVHK3JXaVJMM2dvSldjU3d2d2JQRUNPNWJEY01pUkdObWNoUzRhMUk5a1A2MkRoT005dFBhZDRucEVoYVVkVFBPc1BKK3U3YkpOODVQcGFxSjZZb1Q2eEtjUklsMXBRand4SXVreFhoeUlZNTdOMVN3aDdEeUFTYnJtMzhNU0hkUlVTdGMrLzRHak9VVFYzMmFjYmhsTmpOTzZwV1I3RlBUazZ4WDNsR21LMHlzMHpyaG4wWmh3aDd3SzNpYm5WeWc2d2UzTFFhN1dGUXh5R1NwaXFSYmUvbzhqUFhUZStFSzR4RGpFQ0hPeGRZUlljOCsrVWh5ZmdYSG1hNXcvWjVtSitINjNUM0NoTjNZNk8vZ3VNY3hqOE5HaWNMRGdZeVEzQ0tjbnNVYk1CdW9hN2o0OFpnRCtlcnFkY3pxYnNZVHB1bGozTFN1MlBPQmZDUTU4cG4wRUgxT3dvVGFmd3ZYMStKVjJWbUl4RXdIbEpsQnNka3dMSHkybVpqY2dqSTlrSjRZbmJoNi9YdTRsMDlZZmhQakNzU0pnN2hwSWJibmcvOTJNNU1qbjBrUGNkbEpHRi83SlFKQ1Nyc2dBc2VlSHpvcUwrNGJGblNlNUVKS3pnSHBlYVRzZzN2OXJDcnRZRnoraFNjWmR6QUdZczhIWDg0SDlKbjBLQVluUWZ5dUlRVDRZNW1vMGFraU1oUWVEaDQ0dEVndVhHY0UwaVA4NDVNdnh4ekVqUnMzUVo1VXgzaEN0blV4YnFxNlBSLzhjUmRBY3VTejFZZnpHRWhObTJCZERmamt2dzBMY1RZS29rQ0srb2FGQW9sSWppREZCWWwwMi9vdWpEbVFDMWMrWnh6QytCb0lwMnQzNUhYSFByRG5BL2xJY3VRejZTS09PQW5XVnFzUmJIc2NqaWRETmYwZ1JXRjdDTlgyTTFsM1ZUT1FibXBkNTVnRHFUMDF4RGhrbUJUaUpNaEdzQitpc2RyUGJHZTZ3clUxNVJqSXprUUV5SEIzR3FZYllDQWlTZUh3Q01CbUk3bUFZaXd0NmdyWDdRVDloNWRISGNRL1Avc0tsRW03R1lkMzdsSEdHYUx1dDJ0YmlyRDVpVDZUcmlDdUtzVkpzTHJDd3lXdWloMllqL3VuTUMyVkZsZnNncjVob2R4c1pISUVaVm9Ua1A3ODdBUHc3VFhIWnkvYWMvMjVySjNwU3BQMjR0UnJabnllVzAxMmJidFpiUzlBZWZLWitiNm1NdGpKUzZWNkdQL3pPUjN3Sytwa1FuN2J6SGJKQ0NSRHNxRmxCcHorZGpIQ1Y3YTJ3TVVyL3gweGlNKyt1Z3BycTQ1Ym5GaGJoZE5vRitNS0xPdDMyQzc1U3ZxSWI3eFVPMy9GZHIvOHVNcURMbXNxd1UzVmlwSDJRekEyazNoVHIxMUlDbnFaSE1uN0YrSENGSWZaUVE1SmZEVlV2VzFtenY3MDgvVjMxNkZWL3dGNEplOWhzZ1N2M0dPTVl6NzFKZzZia2V6UzBDTjVOMVdMaFNPdXNzVzJqUmVzcm56TlpYVUZtNVBuVzBubDJDY2lWTFFIZWJIQkpoOVUwZzFTM0dZUUQ0ZVFqSDJRV0gwQzB1dHcxNURYQUVJeWJEMG54b1VzWVBNWm16NE41OUhZRStLMFN6eUMyTW8zYklIdzR6VFQrS3QzM0VTQVgvRlpDTVdvdlV0TUlNenZIUkZLSkE5RytWQUd2SjdJUHNLR0MzSGREWUk0cW53emhKUVptUTVsMkFPRGNNU1diNm1KNmZnV24rSDRic3hiV3pYOXRtdDJsOVhsN2Z6WWNwd0pHaGw1TUk1WEVTb0w4a2FHS0I5WFd3dzh4T29ZSVhCckQzaHZPZ25LOUJiRVlkeXBIc2N0U0JjR1lMYkorRk12YnVwejJBYW5KMDF1QVBMVkphYjg4QjAzSDF4aWRLSDhXQjBUQ0NxMUtORU00WWdSRG03RlJseXMrbThMNkc2Z0pMbVBrcHVxeGhKVTBzdDhKRjhGTWVWK2R3VGlwRkw5ekRsR2V3bUIxd1lkekpoL3FSbGNjbnRIRGNxZXZCQ3Y2TkJaM3hJeitDR1A1eFlUS0lvTUlNWnpvK1VUSUFLM1dSS2dVTFVCK2VnY3JUcy83QTA2WHBRMjBUbGFpK080bW0wREtMdVNBZ1B3a1dncUljT2trQytCT0JSZFZsY0MrY2lMMGtVTkc0am9kZDN2bktNMTN5SEFLLzhVQkc2blRCckJPVWMvcGZEQlJaSjg4Y2c5RHVRYkwxcnp4ZHczeXg2MWV4UGJPVWF6aTRSZDhWcVlNaEJJd3l1bkY1eXo5Vk1DVVY2dnhRK0VDSmNIOHMwNVNsTXk0dDE0NXhpMWpBa2pmSXU3R0lFU3h6WVBTYWNDMUdma2czZmhHYkQ2ZGRNbFZ2dUNRei8wb0hBZktjbFNtaUFBSzBKTjc1emRDL095OUpNS2FuS3lUeEJ2T0dBSkpFYmQ0ZkF2VnJ4bzlVdWt4TWZad2J1NGh3V2lLRExDWENTZlROQVVUYmE5Q3M1eDFTRDRPQndJbTRxak5RT2tLRTF1QkgrYVFrc3NWWm1icVo4VUNMQXZ5UzVCbkxEZjJodmFFNlArTVpRZnBZbmdzdUJkMkExK1c3RXFCVVo0TVVNL0tYQXZNakdiSHZtMjNnQ1hhSTF5VEQ5UG83S2V6V0JKQjhFWHAwQUNEMHMrSjZOblFrR3pKR2RQbEZESEJkSSs1dC9aK2RHYVFDNGJIcHZPZ2crdXpuSmNJR2VyZWlZVXlrSWpzK1dXMjJtckJpOVdMYnFuSng5d2x1Z2tJbEhpZnZCR2NnTE5LTFBRNEVTQStwQ3pJNGpmd3kyQWpmZjhDQWR1V3p5NHJMam5uV0VHcUZkbXBmZE1DS2dhWkVPWmM1cXJ4ZzNuV00yOGNYbW9oaGV0UGNxcXNuNHZlRzAyTWN6RG1XVm1Xcys0d2ptcjE4WXZXRmZMQlZJM2JrOEh1YnhaNXNwVlJaSFR5UXpKc1Nvdm9QSHhoQUtyUWR5S3JGTmNFRC93bzhwbmp1dnpXcmdIYXlKeUlZNWJ6MklUdzF5Y0pwOVA3UjRYOExEQ0hLL0wybDBzRUg2MHRtcmNIenpqUmV0NHRNOWhWY2sreFF6S054bkdMUkRxTytLVVpaN2dxbkhkWlkxbXhvUThRVWZqbFl3STF0YUNCeTVZQktyS2N5bmQ5d1RxTnd1ZkVmaHJxcTE3S28xNndoNEZwUEZLNDVadEtETk9nbnNoWmpEZkFIOU03cjRueVBPTmpFdWEvaFpYamF2OE56VFRKdlRoVEY2VXBwSnRGK0pxd0EyTkUxNVU2ZUZaZEdnc21KdlJ5emlVZUJYSVg3UFQyaHVhelJQK2xLa2dhdnN6ZU0xOGpXMG9WY2ZCcllDcVlvUm5OM2FQR2x3MWlNTTE3YWkxR3Rxdm5kL1EvSDVTbnZ2RjdmMTJsamtjejBwc1VtV0JwU296MExuUmdLcEJ1Z3E2TDhDdXhTa1FkZTZrUGNBc1dxTjdBbzEreXphVWFjZEFzY2tJMGp3RFBKUFU1VEJtYk94aS9VVzY0cFFPcmpjKzUvMVYvZHRKZlJJYnJ3MEtXRlZXVitIdzZHTkRaRTZhSHA3ZTBPVVE1cVRybVk0OHJ3LzRzUldXM29qU3BrMzZJK1d6bzdZLzdoeWwrWkp0WFZJN1dKKzQ1aHJnYWN6MjlBMzJRVElTckNEcGlKTGJ1V3A4T2l1aDhqR1lpb2Y4ZVRIcURFdFZLa0NHbVpWWnF6STlzY3N1U0laa1pYVGZLbllIdDhOTm1MSzNGYVF4cGI5R0p6NWpWY0hNY2xXaHJEK1ZlSGZRc0pMa1dxb2hUR3JscW5GWjlMcnVrU2w5N1lJWHBVNWtWY0hNU3ZES1RwcG5oTm1ZOFdrSlhYY0ZuU01aU1k2ZTNjTzFydUt4VS83K0NHVVNuYm5DdGk0YldqSGJPQXZsR09BcGRQcko5YmVEanRFNWtoRnNhT2FxOGRIek1hVy92Qy9lNktHTVdtNGZsWU1rdTRjTm5WbXBQZWo4dWR0QTFhQnpybGw0N1JHanMvYUcrdlg3NXRVa3lpaGwxbEtWWm5ERnJJdXkrMkFhT3Y5RXZBWDBuWTdST1plRUpxNGFGK2czelB2cUhTdGVqT1l2bHZHdUExRm1OeHRDTTFQMThBY01nakFMdjlNeFlXYVg5V2NCa3RXdXV1OWVGcVBNNG1idkF6YkVFZzVoOXRIcExJT3RQK2c3SGVNbk5ITFZlRy9Ka3ZGN1lXeGMzM2pEcXF5MFpob0VLb3Z6TTFQMERQU2RqdEZ2RzVaVlhMUDB2bjE5ejNLclZUdklIRjNmWUhIZUN2cnVITi9BYmROTjNQTzY5KzE3aUxnempyUnV4OEVsL1N3SU1nME05UDNIRzlIcXNQditoVXJySlhFdmN6aitBQWJSeCtBY1g4OEYwdjFBdkJuS0FubFRHOFJsbjUvNkx1TEhXNS96b3JUK0Qwd2cxcXE4eTV4ZnU4OENTeUNuSDVoM2RXL1pHWHZlOHVPTVpSV1Awbm84Y0lGWTcrWWZzd1VSclQzNlFMMDlmZnNNcHBIWWVnVy9QN0NCV0h2bE1PR0JlNS85anRkalk3Ujh3a1RiK1I5bWVaQTZuMm9KV0FBQUFBQkpSVTVFcmtKZ2dnPT0iOwogIH0gZWxzZSB7CiAgICBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQucHJvdG90eXBlLm9wdGlvbnMuaWNvblVybCA9ICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJrQUFBQXBDQVlBQUFEQWs0TE9BQUFHbWtsRVFWUll3N1ZYZVV5VFp4anZObmZFTEZ1eUl6T2FiZXJtTVpFZVFDL09jbGtPNDlDcE9IWE9MSmwvQ0FVUnVZYlFpM0tMZ0VoYnJoWjFhRHdtYW9HcUtJSTZvZEFUbUgvc2NERmJkQzdMdkZxT0NjK2U5NXMyVkc1MFgvTExtL2Y0L1o3bmVZL25lMThhQU5DbUFyNUUveFpmMXVET2tUY0djV1I2aGw5MjQ3dFQ1VTdZNlNOdldzS1Q2M1A1OHFiZmVMSkc4TTVxY2dUa25ydnZyZERic1Q3TWwrdHY4Mlg2dlZ4SkUzM2FSbWdTeVl0Y1dWTXFYOTdZdjJKdlczOVVoUkUySHV5QkwrdCtnSzExMTZseTA2RWVXRk5sQW1IeGxRRTBPTWlWNm1RQ1NjdXNLUmxoUzNRTGVWSmRsMSsyM2g1ZFk0Rk5CM3RocmJZYm9xcHRFRmxwaFRDMWhTcEpuYlJ2eFA0Tldnc0U1Snl6ODZRTk5pLzVxU1VUR3VGazFndTU0dE45d3VLMndjM28rV2MxM1JDbXNvQndFcXpHY1pzeHN2Q1N5Lzl3SktmN1VXZjFtRVk4SldmZXdjNjdVVW9EYkRqUUMrRnFLNFFxTFZNR0dSOWQyd3VyS3pxQmszbnFJVC85ekx4UlJqZ1o5YnFRZ3ViK0Rkb2VDQzAzUThqKzBRaEZoQkhSL2VQM1UvekNsbjdVdStoaWhKMStiQk5mZkxJdm1reVAwZ3BCWldZWGhLdXNzSzZtQno1SFQ2TTFOcXBjcCttQkNQWG9zWVFmcmVrR3ZyamV3ZDU5L0d2S0NFN1RiSy8wNC9aVjVRWllWV21Ed0gxbUYzeGEyUTNyYTNEQkM1dkJUMW9QN1BUajRDMCtDY0w4YzdDMkN0ZWpxaHVDbnVJUUhhS0h6dmNSZlpwbnlsRmZYc1lKeDNwTkx3aEt6UkF3QWhFcUcwU3B1c0JIZkFLa3h3M3c0NjI3TVBob0NINzk4ejdzMFpuQkovTUVKYlpTYlhQaEVSMmloN3Ayb2svelNqMmNFSkRkNENBZSs1V1luQkNnUjJ1cnV5RXc2elJvVzYvRFdKL09lQVA4cGQvQkd0ek9aS3BHOG9rZTBTWDZHTW1SazZHRmx5QWM1OUszMk9URWluSUxSSlJjaGFoOEhRd05EOE40MzVaOVowRlkxRXF0eFVnKzBTTzZSSi9tbVh6NFZ1UytEcHhYQzNnWG1ad0lMN2RCU0g0ektFNTB3RVNmOHF3VmdyUDFFSWxUTzVKUDlJZ3UwYWV4ZGgyOEYxbG1BRUdKR2ZoN2pFNkVseU01UncvRkRjWUpqV2hiZWlCWW9ZTklwYzJGVC9TSUxpdnAwRjFpcERXazRCSUVvMlZ1b2RFSlVpZmhiaWx0bk5CSVhQVUZDTXB0aHRBeXF3cy9CUGxFRi9WYmFJeEVyZHhQcGhzVTdyY0NwOERvaEMrR3ZCSVBKUy90VzJqdHZUbW1BZXVOTzhCTk9ZUWVHOEcvMk96Q0ozcStzb1lCNWk2TmhNYUtyMTdGU2FsN0dJSGhldVYzdVNDWThxWVZ1RW0xY096cWRXcjdrdS9SMEJEb1RUK0RUK29oQ002L0NDdktMS080UkkrZFhQZUF1YU1xa3NhS3JaN0wzRkU1RklGYmtJY2VlT1oyT2NITzZ3SWhUa05vMGZmZ2pSR3hFcW9nWEhZVVBIZldBQy9sQURwd0djTFJZM2FlSzQvb1JHQ0tZY1pYUFZvZVgva2VsVllZOGRVR2Y4VjVFQlJiZ0pYVDVRSVBoUDllUEppNDI4SktPaUVZaFlYRkJxb3UyR3VoK3AvbUVCMS9SZk13NnJZN2N4Y2pUcm5lSTFGckR5dXpVU1JtOW1pd0VKeDhFL2dVbXFseXZIR2tuZWl3RXJSMjFGM3ROT0s1VGYweVhhVCtPN0RnQ3ZBTFRVQlhkTTRZaEMvSWF3UFUrMlBkdXFNdnVhUjZlb3hTd1VrNzVnZ3FzWUo3Vmljc253R0lrWkJTWEtPVXd3NzNXR1h5cVArSjIvYjljK2dpMVlBZy94cHdjazNnSnV1Y05yaDVKdkRQdlFyMFdGWGYwcGl5dDhmOC9XSTBoVjRwUnh4a1FaZEpEZkRKTk9BbU0wQWc4anlUNmh6MFdHWFd1UDk0WWgyamNmam1YQUd2SENNc2xSaW1ESFl1SHVEc3kyUXRIdUlhdnpuaGJZVVJxNVI1N0twekJCUlpLUEppOGVRZzQ4aDRqOFNEZG93aWZkSXJFVmRVK2diTzZRTnZSUnQ0WkJ0aFVhWmhVbmpsWU9iTmFnVjNrZW9lcnUzclU3cmN1Y2VxVTFtSkJ4eStCV1pZbE5FQkgrMGVINHZSaUIrT1l5YlUyaG5ibFlsVHZrSGluTTRtNTRZbnhTeWFaWVNGNlIzandnUDd1ZEtMR0lYNnIvbGJOYTlONnk1TUZ5bmpXRHRySGQ3NVp2VFlBUE8vNlJnRjBrNzZtUWxhM0ZHcTdkTytjSDhzS24wVm83bkRsbHdBaHF3TFBreHJId1dtSEpPbytBS0o0cmFiNU9nck03clZ1OGVXYjJQdTBEaDRlRGdYb09mdnA3WTdRZXFrblJtdmNUQkV5cTltL0hRUVNDU3o2TEhxM3oweXpzTnlTUmZNUzI1M3dsMkt5UkRiY1pQY2ZKS2pabVNFT2pjeHlpK1k4ZFVPdHNJRUg2UjJ3TnlrZHFya1lKMFJWOTJIMFc1OHBrZlFrN2NLZXZzTEsxMFB5OFNkTUdmWE5YQVRZK3BQYnlKUi9FVDZuOW5JZnp0TnRaWVJWOVhuaVF1OUlBMnZPVmd5NGlyN0dDTFZtbWQremprSDBlQUY5UG82SzYxcG1DWEh4VTVySE1ZZDFmdGMzb3dqd1JTVlJ6TGpLdnFaRXR5NmNSVUQ3akdxaU9kdTVIRzZNZEhqTmNOWUdxZkRtNVlSekxCQkNDRGwvMmJrOGE4Z2RicWNmd0VDdTYyRmcvSHJnZ0FBQUFCSlJVNUVya0pnZ2c9PSI7CiAgfQp9CgoKfSx7Ii4vZ2xvYmFsL2xlYWZsZXQiOjh9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5IVE1MV2lkZ2V0czsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKInVzZSBzdHJpY3QiOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgewogIHZhbHVlOiB0cnVlCn0pOwpleHBvcnRzLmRlZmF1bHQgPSBnbG9iYWwualF1ZXJ5OwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSw4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5MOwoKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XSw5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5MLlByb2o7CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0se31dLDEwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IGdsb2JhbC5TaGlueTsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7Cgp2YXIgX2pxdWVyeSA9IHJlcXVpcmUoIi4vZ2xvYmFsL2pxdWVyeSIpOwoKdmFyIF9qcXVlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfanF1ZXJ5KTsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCnZhciBfc2hpbnkgPSByZXF1aXJlKCIuL2dsb2JhbC9zaGlueSIpOwoKdmFyIF9zaGlueTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zaGlueSk7Cgp2YXIgX2h0bWx3aWRnZXRzID0gcmVxdWlyZSgiLi9nbG9iYWwvaHRtbHdpZGdldHMiKTsKCnZhciBfaHRtbHdpZGdldHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaHRtbHdpZGdldHMpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7Cgp2YXIgX2Nyc191dGlscyA9IHJlcXVpcmUoIi4vY3JzX3V0aWxzIik7Cgp2YXIgX2NvbnRyb2xTdG9yZSA9IHJlcXVpcmUoIi4vY29udHJvbC1zdG9yZSIpOwoKdmFyIF9jb250cm9sU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29udHJvbFN0b3JlKTsKCnZhciBfbGF5ZXJNYW5hZ2VyID0gcmVxdWlyZSgiLi9sYXllci1tYW5hZ2VyIik7Cgp2YXIgX2xheWVyTWFuYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sYXllck1hbmFnZXIpOwoKdmFyIF9tZXRob2RzID0gcmVxdWlyZSgiLi9tZXRob2RzIik7Cgp2YXIgX21ldGhvZHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWV0aG9kcyk7CgpyZXF1aXJlKCIuL2ZpeHVwLWRlZmF1bHQtaWNvbiIpOwoKdmFyIF9kYXRhZnJhbWUgPSByZXF1aXJlKCIuL2RhdGFmcmFtZSIpOwoKdmFyIF9kYXRhZnJhbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0YWZyYW1lKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUgPSByZXF1aXJlKCIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiKTsKCnZhciBfY2x1c3RlckxheWVyU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2x1c3RlckxheWVyU3RvcmUpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCndpbmRvdy5MZWFmbGV0V2lkZ2V0ID0ge307CndpbmRvdy5MZWFmbGV0V2lkZ2V0LnV0aWxzID0ge307CnZhciBtZXRob2RzID0gd2luZG93LkxlYWZsZXRXaWRnZXQubWV0aG9kcyA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBfbWV0aG9kczIuZGVmYXVsdCk7CndpbmRvdy5MZWFmbGV0V2lkZ2V0LkRhdGFGcmFtZSA9IF9kYXRhZnJhbWUyLmRlZmF1bHQ7CndpbmRvdy5MZWFmbGV0V2lkZ2V0LkNsdXN0ZXJMYXllclN0b3JlID0gX2NsdXN0ZXJMYXllclN0b3JlMi5kZWZhdWx0Owp3aW5kb3cuTGVhZmxldFdpZGdldC51dGlscy5nZXRDUlMgPSBfY3JzX3V0aWxzLmdldENSUzsKCi8vIFNlbmQgdXBkYXRlZCBib3VuZHMgYmFjayB0byBhcHAuIFRha2VzIGEgbGVhZmxldCBldmVudCBvYmplY3QgYXMgaW5wdXQuCmZ1bmN0aW9uIHVwZGF0ZUJvdW5kcyhtYXApIHsKICB2YXIgaWQgPSBtYXAuZ2V0Q29udGFpbmVyKCkuaWQ7CiAgdmFyIGJvdW5kcyA9IG1hcC5nZXRCb3VuZHMoKTsKCiAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UoaWQgKyAiX2JvdW5kcyIsIHsKICAgIG5vcnRoOiBib3VuZHMuZ2V0Tm9ydGhFYXN0KCkubGF0LAogICAgZWFzdDogYm91bmRzLmdldE5vcnRoRWFzdCgpLmxuZywKICAgIHNvdXRoOiBib3VuZHMuZ2V0U291dGhXZXN0KCkubGF0LAogICAgd2VzdDogYm91bmRzLmdldFNvdXRoV2VzdCgpLmxuZwogIH0pOwogIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKGlkICsgIl9jZW50ZXIiLCB7CiAgICBsbmc6IG1hcC5nZXRDZW50ZXIoKS5sbmcsCiAgICBsYXQ6IG1hcC5nZXRDZW50ZXIoKS5sYXQKICB9KTsKICBfc2hpbnkyLmRlZmF1bHQub25JbnB1dENoYW5nZShpZCArICJfem9vbSIsIG1hcC5nZXRab29tKCkpOwp9CgpmdW5jdGlvbiBwcmV2ZW50VW5pbnRlbmRlZFpvb21PblNjcm9sbChtYXApIHsKICAvLyBQcmV2ZW50IHVud2FudGVkIHNjcm9sbCBjYXB0dXJpbmcuIFNpbWlsYXIgaW4gcHVycG9zZSB0bwogIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9DbGlmZkNsb3VkL0xlYWZsZXQuU2xlZXAgYnV0IHdpdGggYQogIC8vIGRpZmZlcmVudCBzZXQgb2YgaGV1cmlzdGljcy4KCiAgLy8gVGhlIGJhc2ljIGlkZWEgaXMgdGhhdCB3aGVuIGEgbW91c2V3aGVlbC9ET01Nb3VzZVNjcm9sbAogIC8vIGV2ZW50IGlzIHNlZW4sIHdlIGRpc2FibGUgc2Nyb2xsIHdoZWVsIHpvb21pbmcgdW50aWwgdGhlCiAgLy8gdXNlciBtb3ZlcyB0aGVpciBtb3VzZSBjdXJzb3Igb3IgY2xpY2tzIG9uIHRoZSBtYXAuIFRoaXMKICAvLyBpcyBzbGlnaHRseSB0cmlja2llciB0aGFuIGp1c3QgbGlzdGVuaW5nIGZvciBtb3VzZW1vdmUsCiAgLy8gYmVjYXVzZSBtb3VzZW1vdmUgaXMgZmlyZWQgd2hlbiB0aGUgcGFnZSBpcyBzY3JvbGxlZCwKICAvLyBldmVuIGlmIHRoZSB1c2VyIGRpZCBub3QgcGh5c2ljYWxseSBtb3ZlIHRoZSBtb3VzZS4gV2UKICAvLyBoYW5kbGUgdGhpcyBieSBleGFtaW5pbmcgdGhlIG1vdXNlbW92ZSBldmVudCdzIHNjcmVlblgKICAvLyBhbmQgc2NyZWVuWSBwcm9wZXJ0aWVzOyBpZiB0aGV5IGNoYW5nZSwgd2Uga25vdyBpdCdzIGEKICAvLyAidHJ1ZSIgbW92ZS4KCiAgLy8gbGFzdFNjcmVlbiBjYW4gbmV2ZXIgYmUgbnVsbCwgYnV0IGl0cyB4IGFuZCB5IGNhbi4KICB2YXIgbGFzdFNjcmVlbiA9IHsgeDogbnVsbCwgeTogbnVsbCB9OwogICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkb2N1bWVudCkub24oIm1vdXNld2hlZWwgRE9NTW91c2VTY3JvbGwiLCAiKiIsIGZ1bmN0aW9uIChlKSB7CiAgICAvLyBEaXNhYmxlIHpvb21pbmcgKHVudGlsIHRoZSBtb3VzZSBtb3ZlcyBvciBjbGljaykKICAgIG1hcC5zY3JvbGxXaGVlbFpvb20uZGlzYWJsZSgpOwogICAgLy8gQW55IG1vdXNlbW92ZSBldmVudHMgYXQgdGhpcyBzY3JlZW4gcG9zaXRpb24gd2lsbCBiZSBpZ25vcmVkLgogICAgbGFzdFNjcmVlbiA9IHsgeDogZS5vcmlnaW5hbEV2ZW50LnNjcmVlblgsIHk6IGUub3JpZ2luYWxFdmVudC5zY3JlZW5ZIH07CiAgfSk7CiAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRvY3VtZW50KS5vbigibW91c2Vtb3ZlIiwgIioiLCBmdW5jdGlvbiAoZSkgewogICAgLy8gRGlkIHRoZSBtb3VzZSByZWFsbHkgbW92ZT8KICAgIGlmIChsYXN0U2NyZWVuLnggIT09IG51bGwgJiYgZS5zY3JlZW5YICE9PSBsYXN0U2NyZWVuLnggfHwgZS5zY3JlZW5ZICE9PSBsYXN0U2NyZWVuLnkpIHsKICAgICAgLy8gSXQgcmVhbGx5IG1vdmVkLiBFbmFibGUgem9vbWluZy4KICAgICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTsKICAgICAgbGFzdFNjcmVlbiA9IHsgeDogbnVsbCwgeTogbnVsbCB9OwogICAgfQogIH0pOwogICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkb2N1bWVudCkub24oIm1vdXNlZG93biIsICIubGVhZmxldCIsIGZ1bmN0aW9uIChlKSB7CiAgICAvLyBDbGlja2luZyBhbHdheXMgZW5hYmxlcyB6b29taW5nLgogICAgbWFwLnNjcm9sbFdoZWVsWm9vbS5lbmFibGUoKTsKICAgIGxhc3RTY3JlZW4gPSB7IHg6IG51bGwsIHk6IG51bGwgfTsKICB9KTsKfQoKX2h0bWx3aWRnZXRzMi5kZWZhdWx0LndpZGdldCh7CgogIG5hbWU6ICJsZWFmbGV0IiwKICB0eXBlOiAib3V0cHV0IiwKICBmYWN0b3J5OiBmdW5jdGlvbiBmYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KSB7CgogICAgdmFyIG1hcCA9IG51bGw7CgogICAgcmV0dXJuIHsKCiAgICAgIC8vIHdlIG5lZWQgdG8gc3RvcmUgb3VyIG1hcCBpbiBvdXIgcmV0dXJuZWQgb2JqZWN0LgogICAgICBnZXRNYXA6IGZ1bmN0aW9uIGdldE1hcCgpIHsKICAgICAgICByZXR1cm4gbWFwOwogICAgICB9LAoKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uIHJlbmRlclZhbHVlKGRhdGEpIHsKCiAgICAgICAgLy8gQ3JlYXRlIGFuIGFwcHJvcHJpYXRlIENSUyBPYmplY3QgaWYgc3BlY2lmaWVkCgogICAgICAgIGlmIChkYXRhICYmIGRhdGEub3B0aW9ucyAmJiBkYXRhLm9wdGlvbnMuY3JzKSB7CiAgICAgICAgICBkYXRhLm9wdGlvbnMuY3JzID0gKDAsIF9jcnNfdXRpbHMuZ2V0Q1JTKShkYXRhLm9wdGlvbnMuY3JzKTsKICAgICAgICB9CgogICAgICAgIC8vIEFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vcnN0dWRpby9sZWFmbGV0L3B1bGwvMjk0I2Rpc2N1c3Npb25fcjc5NTg0ODEwCiAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAgbWFwLnJlbW92ZSgpOwogICAgICAgICAgbWFwID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9KCk7IC8vIHVuZGVmaW5lIG1hcAogICAgICAgIH0KCiAgICAgICAgaWYgKGRhdGEub3B0aW9ucy5tYXBGYWN0b3J5ICYmIHR5cGVvZiBkYXRhLm9wdGlvbnMubWFwRmFjdG9yeSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbWFwID0gZGF0YS5vcHRpb25zLm1hcEZhY3RvcnkoZWwsIGRhdGEub3B0aW9ucyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hcCA9IF9sZWFmbGV0Mi5kZWZhdWx0Lm1hcChlbCwgZGF0YS5vcHRpb25zKTsKICAgICAgICB9CgogICAgICAgIHByZXZlbnRVbmludGVuZGVkWm9vbU9uU2Nyb2xsKG1hcCk7CgogICAgICAgIC8vIFN0b3JlIHNvbWUgc3RhdGUgaW4gdGhlIG1hcCBvYmplY3QKICAgICAgICBtYXAubGVhZmxldHIgPSB7CiAgICAgICAgICAvLyBIYXMgdGhlIG1hcCBldmVyIHJlbmRlcmVkIHN1Y2Nlc3NmdWxseT8KICAgICAgICAgIGhhc1JlbmRlcmVkOiBmYWxzZSwKICAgICAgICAgIC8vIERhdGEgdG8gYmUgcmVuZGVyZWQgd2hlbiByZXNpemUgaXMgY2FsbGVkIHdpdGggYXJlYSAhPSAwCiAgICAgICAgICBwZW5kaW5nUmVuZGVyRGF0YTogbnVsbAogICAgICAgIH07CgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBtYXAgaXMgcmVuZGVyZWQgc3RhdGljYWxseSAobm8gb3V0cHV0IGJpbmRpbmcpCiAgICAgICAgaWYgKF9odG1sd2lkZ2V0czIuZGVmYXVsdC5zaGlueU1vZGUgJiYgL1xic2hpbnktYm91bmQtb3V0cHV0XGIvLnRlc3QoZWwuY2xhc3NOYW1lKSkgewogICAgICAgICAgKGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIG1hcC5pZCA9IGVsLmlkOwoKICAgICAgICAgICAgLy8gU3RvcmUgdGhlIG1hcCBvbiB0aGUgZWxlbWVudCBzbyB3ZSBjYW4gZmluZCBpdCBsYXRlciBieSBJRAogICAgICAgICAgICAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoZWwpLmRhdGEoImxlYWZsZXQtbWFwIiwgbWFwKTsKCiAgICAgICAgICAgIC8vIFdoZW4gdGhlIG1hcCBpcyBjbGlja2VkLCBzZW5kIHRoZSBjb29yZGluYXRlcyBiYWNrIHRvIHRoZSBhcHAKICAgICAgICAgICAgbWFwLm9uKCJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgX3NoaW55Mi5kZWZhdWx0Lm9uSW5wdXRDaGFuZ2UobWFwLmlkICsgIl9jbGljayIsIHsKICAgICAgICAgICAgICAgIGxhdDogZS5sYXRsbmcubGF0LAogICAgICAgICAgICAgICAgbG5nOiBlLmxhdGxuZy5sbmcsCiAgICAgICAgICAgICAgICAiLm5vbmNlIjogTWF0aC5yYW5kb20oKSAvLyBGb3JjZSByZWFjdGl2aXR5IGlmIGxhdC9sbmcgaGFzbid0IGNoYW5nZWQKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB2YXIgZ3JvdXBUaW1lcklkID0gbnVsbDsKCiAgICAgICAgICAgIG1hcC5vbigibW92ZWVuZCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdXBkYXRlQm91bmRzKGUudGFyZ2V0KTsKICAgICAgICAgICAgfSkub24oImxheWVyYWRkIGxheWVycmVtb3ZlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgdGhhdCdzIGNvbWluZyBvciBnb2luZyBpcyBhIGdyb3VwIHdlIGNyZWF0ZWQsIHRlbGwKICAgICAgICAgICAgICAvLyB0aGUgc2VydmVyLgogICAgICAgICAgICAgIGlmIChtYXAubGF5ZXJNYW5hZ2VyLmdldEdyb3VwTmFtZUZyb21MYXllckdyb3VwKGUubGF5ZXIpKSB7CiAgICAgICAgICAgICAgICAvLyBCdXQgdG8gYXZvaWQgY2hhdHRpbmVzcywgY29hbGVzY2UgZXZlbnRzCiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBUaW1lcklkKSB7CiAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChncm91cFRpbWVySWQpOwogICAgICAgICAgICAgICAgICBncm91cFRpbWVySWQgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZ3JvdXBUaW1lcklkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIGdyb3VwVGltZXJJZCA9IG51bGw7CiAgICAgICAgICAgICAgICAgIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKG1hcC5pZCArICJfZ3JvdXBzIiwgbWFwLmxheWVyTWFuYWdlci5nZXRWaXNpYmxlR3JvdXBzKCkpOwogICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kb1JlbmRlclZhbHVlKGRhdGEsIG1hcCk7CiAgICAgIH0sCiAgICAgIGRvUmVuZGVyVmFsdWU6IGZ1bmN0aW9uIGRvUmVuZGVyVmFsdWUoZGF0YSwgbWFwKSB7CiAgICAgICAgLy8gTGVhZmxldCBkb2VzIG5vdCBiZWhhdmUgd2VsbCB3aGVuIHlvdSBzZXQgdXAgYSBidW5jaCBvZiBsYXllcnMgd2hlbgogICAgICAgIC8vIHRoZSBtYXAgaXMgbm90IHZpc2libGUgKHdpZHRoL2hlaWdodCA9PSAwKS4gUG9wdXBzIGdldCBtaXNhbGlnbmVkCiAgICAgICAgLy8gcmVsYXRpdmUgdG8gdGhlaXIgb3duaW5nIG1hcmtlcnMsIGFuZCB0aGUgZml0Qm91bmRzIGNhbGN1bGF0aW9ucwogICAgICAgIC8vIGFyZSBvZmYuIFRoZXJlZm9yZSB3ZSB3YWl0IHVudGlsIHRoZSBtYXAgaXMgYWN0dWFsbHkgc2hvd2luZyB0bwogICAgICAgIC8vIHJlbmRlciB0aGUgdmFsdWUgKHdlIHJlbHkgb24gdGhlIHJlc2l6ZSgpIGNhbGxiYWNrIGJlaW5nIGludm9rZWQKICAgICAgICAvLyBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZSkuCiAgICAgICAgLy8KICAgICAgICAvLyBUaGVyZSBtYXkgYmUgYW4gaXNzdWUgd2l0aCBsZWFmbGV0UHJveHkoKSBjYWxscyBiZWluZyBtYWRlIHdoaWxlCiAgICAgICAgLy8gdGhlIG1hcCBpcyBub3QgYmVpbmcgdmlld2VkLS1ub3Qgc3VyZSB3aGF0IHRoZSByaWdodCBzb2x1dGlvbiBpcwogICAgICAgIC8vIHRoZXJlLgogICAgICAgIGlmIChlbC5vZmZzZXRXaWR0aCA9PT0gMCB8fCBlbC5vZmZzZXRIZWlnaHQgPT09IDApIHsKICAgICAgICAgIG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSA9IGRhdGE7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSA9IG51bGw7CgogICAgICAgIC8vIE1lcmdlIGRhdGEgb3B0aW9ucyBpbnRvIGRlZmF1bHRzCiAgICAgICAgdmFyIG9wdGlvbnMgPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7IHpvb21Ub0xpbWl0czogImFsd2F5cyIgfSwgZGF0YS5vcHRpb25zKTsKCiAgICAgICAgaWYgKCFtYXAubGF5ZXJNYW5hZ2VyKSB7CiAgICAgICAgICBtYXAuY29udHJvbHMgPSBuZXcgX2NvbnRyb2xTdG9yZTIuZGVmYXVsdChtYXApOwogICAgICAgICAgbWFwLmxheWVyTWFuYWdlciA9IG5ldyBfbGF5ZXJNYW5hZ2VyMi5kZWZhdWx0KG1hcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hcC5jb250cm9scy5jbGVhcigpOwogICAgICAgICAgbWFwLmxheWVyTWFuYWdlci5jbGVhcigpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGV4cGxpY2l0VmlldyA9IGZhbHNlOwogICAgICAgIGlmIChkYXRhLnNldFZpZXcpIHsKICAgICAgICAgIGV4cGxpY2l0VmlldyA9IHRydWU7CiAgICAgICAgICBtYXAuc2V0Vmlldy5hcHBseShtYXAsIGRhdGEuc2V0Vmlldyk7CiAgICAgICAgfQogICAgICAgIGlmIChkYXRhLmZpdEJvdW5kcykgewogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICAgIG1ldGhvZHMuZml0Qm91bmRzLmFwcGx5KG1hcCwgZGF0YS5maXRCb3VuZHMpOwogICAgICAgIH0KICAgICAgICBpZiAoZGF0YS5vcHRpb25zLmNlbnRlcikgewogICAgICAgICAgZXhwbGljaXRWaWV3ID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgem9vbVRvTGltaXRzIG9wdGlvbiBzYXlzIHRoYXQgdGhlIG1hcCBzaG91bGQgYmUKICAgICAgICAvLyB6b29tZWQgdG8gbWFwIGVsZW1lbnRzLgogICAgICAgIGZ1bmN0aW9uIG5lZWRzWm9vbSgpIHsKICAgICAgICAgIHJldHVybiBvcHRpb25zLnpvb21Ub0xpbWl0cyA9PT0gImFsd2F5cyIgfHwgb3B0aW9ucy56b29tVG9MaW1pdHMgPT09ICJmaXJzdCIgJiYgIW1hcC5sZWFmbGV0ci5oYXNSZW5kZXJlZDsKICAgICAgICB9CgogICAgICAgIGlmICghZXhwbGljaXRWaWV3ICYmIG5lZWRzWm9vbSgpICYmICFtYXAuZ2V0Wm9vbSgpKSB7CiAgICAgICAgICBpZiAoZGF0YS5saW1pdHMgJiYgIV9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChkYXRhLmxpbWl0cykpIHsKICAgICAgICAgICAgLy8gVXNlIHRoZSBuYXR1cmFsIGxpbWl0cyBvZiB3aGF0J3MgYmVpbmcgZHJhd24gb24gdGhlIG1hcAogICAgICAgICAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgYm91bmRpbmcgYm94IGlzIDAsIGxlYWZsZXQgZ2V0cyBhbGwgd2VpcmQKICAgICAgICAgICAgdmFyIHBhZCA9IDAuMDA2OwogICAgICAgICAgICBpZiAoZGF0YS5saW1pdHMubGF0WzBdID09PSBkYXRhLmxpbWl0cy5sYXRbMV0pIHsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sYXRbMF0gPSBkYXRhLmxpbWl0cy5sYXRbMF0gLSBwYWQ7CiAgICAgICAgICAgICAgZGF0YS5saW1pdHMubGF0WzFdID0gZGF0YS5saW1pdHMubGF0WzFdICsgcGFkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkYXRhLmxpbWl0cy5sbmdbMF0gPT09IGRhdGEubGltaXRzLmxuZ1sxXSkgewogICAgICAgICAgICAgIGRhdGEubGltaXRzLmxuZ1swXSA9IGRhdGEubGltaXRzLmxuZ1swXSAtIHBhZDsKICAgICAgICAgICAgICBkYXRhLmxpbWl0cy5sbmdbMV0gPSBkYXRhLmxpbWl0cy5sbmdbMV0gKyBwYWQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWFwLmZpdEJvdW5kcyhbW2RhdGEubGltaXRzLmxhdFswXSwgZGF0YS5saW1pdHMubG5nWzBdXSwgW2RhdGEubGltaXRzLmxhdFsxXSwgZGF0YS5saW1pdHMubG5nWzFdXV0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWFwLmZpdFdvcmxkKCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgZGF0YS5jYWxscyAmJiBpIDwgZGF0YS5jYWxscy5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGNhbGwgPSBkYXRhLmNhbGxzW2ldOwogICAgICAgICAgaWYgKG1ldGhvZHNbY2FsbC5tZXRob2RdKSBtZXRob2RzW2NhbGwubWV0aG9kXS5hcHBseShtYXAsIGNhbGwuYXJncyk7ZWxzZSAoMCwgX3V0aWwubG9nKSgiVW5rbm93biBtZXRob2QgIiArIGNhbGwubWV0aG9kKTsKICAgICAgICB9CgogICAgICAgIG1hcC5sZWFmbGV0ci5oYXNSZW5kZXJlZCA9IHRydWU7CgogICAgICAgIGlmIChfaHRtbHdpZGdldHMyLmRlZmF1bHQuc2hpbnlNb2RlKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdXBkYXRlQm91bmRzKG1hcCk7CiAgICAgICAgICB9LCAxKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHJlc2l6ZTogZnVuY3Rpb24gcmVzaXplKHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBpZiAobWFwKSB7CiAgICAgICAgICBtYXAuaW52YWxpZGF0ZVNpemUoKTsKICAgICAgICAgIGlmIChtYXAubGVhZmxldHIucGVuZGluZ1JlbmRlckRhdGEpIHsKICAgICAgICAgICAgdGhpcy5kb1JlbmRlclZhbHVlKG1hcC5sZWFmbGV0ci5wZW5kaW5nUmVuZGVyRGF0YSwgbWFwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCmlmIChfaHRtbHdpZGdldHMyLmRlZmF1bHQuc2hpbnlNb2RlKSB7CiAgX3NoaW55Mi5kZWZhdWx0LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJsZWFmbGV0LWNhbGxzIiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgIHZhciBpZCA9IGRhdGEuaWQ7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICB2YXIgbWFwID0gZWwgPyAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoZWwpLmRhdGEoImxlYWZsZXQtbWFwIikgOiBudWxsOwogICAgaWYgKCFtYXApIHsKICAgICAgKDAsIF91dGlsLmxvZykoIkNvdWxkbid0IGZpbmQgbWFwIHdpdGggaWQgIiArIGlkKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5jYWxscy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY2FsbCA9IGRhdGEuY2FsbHNbaV07CiAgICAgIGlmIChjYWxsLmRlcGVuZGVuY2llcykgewogICAgICAgIF9zaGlueTIuZGVmYXVsdC5yZW5kZXJEZXBlbmRlbmNpZXMoY2FsbC5kZXBlbmRlbmNpZXMpOwogICAgICB9CiAgICAgIGlmIChtZXRob2RzW2NhbGwubWV0aG9kXSkgbWV0aG9kc1tjYWxsLm1ldGhvZF0uYXBwbHkobWFwLCBjYWxsLmFyZ3MpO2Vsc2UgKDAsIF91dGlsLmxvZykoIlVua25vd24gbWV0aG9kICIgKyBjYWxsLm1ldGhvZCk7CiAgICB9CiAgfSk7Cn0KCgp9LHsiLi9jbHVzdGVyLWxheWVyLXN0b3JlIjoxLCIuL2NvbnRyb2wtc3RvcmUiOjIsIi4vY3JzX3V0aWxzIjozLCIuL2RhdGFmcmFtZSI6NCwiLi9maXh1cC1kZWZhdWx0LWljb24iOjUsIi4vZ2xvYmFsL2h0bWx3aWRnZXRzIjo2LCIuL2dsb2JhbC9qcXVlcnkiOjcsIi4vZ2xvYmFsL2xlYWZsZXQiOjgsIi4vZ2xvYmFsL3NoaW55IjoxMCwiLi9sYXllci1tYW5hZ2VyIjoxMiwiLi9tZXRob2RzIjoxMywiLi91dGlsIjoxNX1dLDEyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCnZhciBfanF1ZXJ5ID0gcmVxdWlyZSgiLi9nbG9iYWwvanF1ZXJ5Iik7Cgp2YXIgX2pxdWVyeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9qcXVlcnkpOwoKdmFyIF9sZWFmbGV0ID0gcmVxdWlyZSgiLi9nbG9iYWwvbGVhZmxldCIpOwoKdmFyIF9sZWFmbGV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xlYWZsZXQpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7CgpmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfQoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9Cgp2YXIgTGF5ZXJNYW5hZ2VyID0gZnVuY3Rpb24gKCkgewogIGZ1bmN0aW9uIExheWVyTWFuYWdlcihtYXApIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMYXllck1hbmFnZXIpOwoKICAgIHRoaXMuX21hcCA9IG1hcDsKCiAgICAvLyBCRUdJTiBsYXllciBpbmRpY2VzCgogICAgLy8gezxncm91cG5hbWU+OiB7PHN0YW1wPjogbGF5ZXJ9fQogICAgdGhpcy5fYnlHcm91cCA9IHt9OwogICAgLy8gezxjYXRlZ29yeU5hbWU+OiB7PHN0YW1wPjogbGF5ZXJ9fQogICAgdGhpcy5fYnlDYXRlZ29yeSA9IHt9OwogICAgLy8gezxjYXRlZ29yeU5hbWVfbGF5ZXJJZD46IGxheWVyfQogICAgdGhpcy5fYnlMYXllcklkID0ge307CiAgICAvLyB7PHN0YW1wPjogewogICAgLy8gICAgICAgICAgICAgImdyb3VwIjogPGdyb3VwbmFtZT4sCiAgICAvLyAgICAgICAgICAgICAibGF5ZXJJZCI6IDxsYXllcklkPiwKICAgIC8vICAgICAgICAgICAgICJjYXRlZ29yeSI6IDxjYXRlZ29yeT4sCiAgICAvLyAgICAgICAgICAgICAiY29udGFpbmVyIjogPGNvbnRhaW5lcj4KICAgIC8vICAgICAgICAgICB9CiAgICAvLyB9CiAgICB0aGlzLl9ieVN0YW1wID0ge307CiAgICAvLyB7PGNyb3NzdGFsa0dyb3VwTmFtZT46IHs8a2V5PjogWzxzdGFtcD4sIDxzdGFtcD4sIC4uLl0sIC4uLn19CiAgICB0aGlzLl9ieUNyb3NzdGFsa0dyb3VwID0ge307CgogICAgLy8gRU5EIGxheWVyIGluZGljZXMKCiAgICAvLyB7PGNhdGVnb3J5TmFtZT46IEwubGF5ZXJHcm91cH0KICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycyA9IHt9OwogICAgLy8gezxncm91cE5hbWU+OiBMLmxheWVyR3JvdXB9CiAgICB0aGlzLl9ncm91cENvbnRhaW5lcnMgPSB7fTsKICB9CgogIF9jcmVhdGVDbGFzcyhMYXllck1hbmFnZXIsIFt7CiAgICBrZXk6ICJhZGRMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTGF5ZXIobGF5ZXIsIGNhdGVnb3J5LCBsYXllcklkLCBncm91cCwgY3RHcm91cCwgY3RLZXkpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgIC8vIFdhcyBhIGdyb3VwIHByb3ZpZGVkPwogICAgICB2YXIgaGFzSWQgPSB0eXBlb2YgbGF5ZXJJZCA9PT0gInN0cmluZyI7CiAgICAgIHZhciBncm91cGVkID0gdHlwZW9mIGdyb3VwID09PSAic3RyaW5nIjsKCiAgICAgIHZhciBzdGFtcCA9IF9sZWFmbGV0Mi5kZWZhdWx0LlV0aWwuc3RhbXAobGF5ZXIpOwoKICAgICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0IGxheWVyIGdyb3VwIHRvIGFkZCB0aGUgbGF5ZXIgdG8uCiAgICAgIC8vIFdlIG1heSBvdmVyd3JpdGUgdGhpcyBsZXQgYmVmb3JlIHVzaW5nIGl0IChpLmUuIGlmIGEgZ3JvdXAgaXMgYXNzaWduZWQpLgogICAgICAvLyBUaGlzIG9uZSBsaW5lciBjcmVhdGVzIHRoZSBfY2F0ZWdvcnlDb250YWluZXJzW2NhdGVnb3J5XSBlbnRyeSBpZiBpdAogICAgICAvLyBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCiAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnNbY2F0ZWdvcnldID0gdGhpcy5fY2F0ZWdvcnlDb250YWluZXJzW2NhdGVnb3J5XSB8fCBfbGVhZmxldDIuZGVmYXVsdC5sYXllckdyb3VwKCkuYWRkVG8odGhpcy5fbWFwKTsKCiAgICAgIHZhciBvbGRMYXllciA9IG51bGw7CiAgICAgIGlmIChoYXNJZCkgewogICAgICAgIC8vIEZpcnN0LCByZW1vdmUgYW55IGxheWVyIHdpdGggdGhlIHNhbWUgY2F0ZWdvcnkgYW5kIGxheWVySWQKICAgICAgICB2YXIgcHJlZml4ZWRMYXllcklkID0gdGhpcy5fbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCk7CiAgICAgICAgb2xkTGF5ZXIgPSB0aGlzLl9ieUxheWVySWRbcHJlZml4ZWRMYXllcklkXTsKICAgICAgICBpZiAob2xkTGF5ZXIpIHsKICAgICAgICAgIHRoaXMuX3JlbW92ZUxheWVyKG9sZExheWVyKTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSBsYXllcklkIGluZGV4CiAgICAgICAgdGhpcy5fYnlMYXllcklkW3ByZWZpeGVkTGF5ZXJJZF0gPSBsYXllcjsKICAgICAgfQoKICAgICAgLy8gVXBkYXRlIGdyb3VwIGluZGV4CiAgICAgIGlmIChncm91cGVkKSB7CiAgICAgICAgdGhpcy5fYnlHcm91cFtncm91cF0gPSB0aGlzLl9ieUdyb3VwW2dyb3VwXSB8fCB7fTsKICAgICAgICB0aGlzLl9ieUdyb3VwW2dyb3VwXVtzdGFtcF0gPSBsYXllcjsKCiAgICAgICAgLy8gU2luY2UgYSBncm91cCBpcyBhc3NpZ25lZCwgZG9uJ3QgYWRkIHRoZSBsYXllciB0byB0aGUgY2F0ZWdvcnkncyBsYXllcgogICAgICAgIC8vIGdyb3VwOyBpbnN0ZWFkLCB1c2UgdGhlIGdyb3VwJ3MgbGF5ZXIgZ3JvdXAuCiAgICAgICAgLy8gVGhpcyBvbmUgbGluZXIgY3JlYXRlcyB0aGUgX2dyb3VwQ29udGFpbmVyc1tncm91cF0gZW50cnkgaWYgaXQgZG9lc24ndAogICAgICAgIC8vIGFscmVhZHkgZXhpc3QuCiAgICAgICAgY29udGFpbmVyID0gdGhpcy5nZXRMYXllckdyb3VwKGdyb3VwLCB0cnVlKTsKICAgICAgfQoKICAgICAgLy8gVXBkYXRlIGNhdGVnb3J5IGluZGV4CiAgICAgIHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldID0gdGhpcy5fYnlDYXRlZ29yeVtjYXRlZ29yeV0gfHwge307CiAgICAgIHRoaXMuX2J5Q2F0ZWdvcnlbY2F0ZWdvcnldW3N0YW1wXSA9IGxheWVyOwoKICAgICAgLy8gVXBkYXRlIHN0YW1wIGluZGV4CiAgICAgIHZhciBsYXllckluZm8gPSB0aGlzLl9ieVN0YW1wW3N0YW1wXSA9IHsKICAgICAgICBsYXllcjogbGF5ZXIsCiAgICAgICAgZ3JvdXA6IGdyb3VwLAogICAgICAgIGN0R3JvdXA6IGN0R3JvdXAsCiAgICAgICAgY3RLZXk6IGN0S2V5LAogICAgICAgIGxheWVySWQ6IGxheWVySWQsCiAgICAgICAgY2F0ZWdvcnk6IGNhdGVnb3J5LAogICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLAogICAgICAgIGhpZGRlbjogZmFsc2UKICAgICAgfTsKCiAgICAgIC8vIFVwZGF0ZSBjcm9zc3RhbGsgZ3JvdXAgaW5kZXgKICAgICAgaWYgKGN0R3JvdXApIHsKICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKGxheWVyLnNldFN0eWxlKSB7CiAgICAgICAgICAgIC8vIE5lZWQgdG8gc2F2ZSB0aGlzIGluZm8gc28gd2Uga25vdyB3aGF0IHRvIHNldCBvcGFjaXR5IHRvIGxhdGVyCiAgICAgICAgICAgIGxheWVyLm9wdGlvbnMub3JpZ09wYWNpdHkgPSB0eXBlb2YgbGF5ZXIub3B0aW9ucy5vcGFjaXR5ICE9PSAidW5kZWZpbmVkIiA/IGxheWVyLm9wdGlvbnMub3BhY2l0eSA6IDAuNTsKICAgICAgICAgICAgbGF5ZXIub3B0aW9ucy5vcmlnRmlsbE9wYWNpdHkgPSB0eXBlb2YgbGF5ZXIub3B0aW9ucy5maWxsT3BhY2l0eSAhPT0gInVuZGVmaW5lZCIgPyBsYXllci5vcHRpb25zLmZpbGxPcGFjaXR5IDogMC4yOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBjdGcgPSBfdGhpcy5fYnlDcm9zc3RhbGtHcm91cFtjdEdyb3VwXTsKICAgICAgICAgIGlmICghY3RnKSB7CiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgY3RnID0gX3RoaXMuX2J5Q3Jvc3N0YWxrR3JvdXBbY3RHcm91cF0gPSB7fTsKICAgICAgICAgICAgICB2YXIgY3Jvc3N0YWxrID0gZ2xvYmFsLmNyb3NzdGFsazsKCiAgICAgICAgICAgICAgdmFyIGhhbmRsZUZpbHRlciA9IGZ1bmN0aW9uIGhhbmRsZUZpbHRlcihlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWUudmFsdWUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBLZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGdyb3VwS2V5c1tpXTsKICAgICAgICAgICAgICAgICAgICB2YXIgX2xheWVySW5mbyA9IF90aGlzLl9ieVN0YW1wW2N0Z1trZXldXTsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0VmlzaWJpbGl0eShfbGF5ZXJJbmZvLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkS2V5cyA9IHt9OwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZS52YWx1ZS5sZW5ndGg7IF9pKyspIHsKICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEtleXNbZS52YWx1ZVtfaV1dID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgX2dyb3VwS2V5cyA9IE9iamVjdC5rZXlzKGN0Zyk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IF9ncm91cEtleXMubGVuZ3RoOyBfaTIrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBfa2V5ID0gX2dyb3VwS2V5c1tfaTJdOwogICAgICAgICAgICAgICAgICAgIHZhciBfbGF5ZXJJbmZvMiA9IF90aGlzLl9ieVN0YW1wW2N0Z1tfa2V5XV07CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3NldFZpc2liaWxpdHkoX2xheWVySW5mbzIsIHNlbGVjdGVkS2V5c1tfZ3JvdXBLZXlzW19pMl1dKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgdmFyIGZpbHRlckhhbmRsZSA9IG5ldyBjcm9zc3RhbGsuRmlsdGVySGFuZGxlKGN0R3JvdXApOwogICAgICAgICAgICAgIGZpbHRlckhhbmRsZS5vbigiY2hhbmdlIiwgaGFuZGxlRmlsdGVyKTsKCiAgICAgICAgICAgICAgdmFyIGhhbmRsZVNlbGVjdGlvbiA9IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWUudmFsdWUgfHwgIWUudmFsdWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgIHZhciBncm91cEtleXMgPSBPYmplY3Qua2V5cyhjdGcpOwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwS2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBncm91cEtleXNbaV07CiAgICAgICAgICAgICAgICAgICAgdmFyIF9sYXllckluZm8zID0gX3RoaXMuX2J5U3RhbXBbY3RnW2tleV1dOwogICAgICAgICAgICAgICAgICAgIF90aGlzLl9zZXRPcGFjaXR5KF9sYXllckluZm8zLCAxLjApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0ge307CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGUudmFsdWUubGVuZ3RoOyBfaTMrKykgewogICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkS2V5c1tlLnZhbHVlW19pM11dID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB2YXIgX2dyb3VwS2V5czIgPSBPYmplY3Qua2V5cyhjdGcpOwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBfZ3JvdXBLZXlzMi5sZW5ndGg7IF9pNCsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIF9rZXkyID0gX2dyb3VwS2V5czJbX2k0XTsKICAgICAgICAgICAgICAgICAgICB2YXIgX2xheWVySW5mbzQgPSBfdGhpcy5fYnlTdGFtcFtjdGdbX2tleTJdXTsKICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc2V0T3BhY2l0eShfbGF5ZXJJbmZvNCwgc2VsZWN0ZWRLZXlzW19ncm91cEtleXMyW19pNF1dID8gMS4wIDogMC4yKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgdmFyIHNlbEhhbmRsZSA9IG5ldyBjcm9zc3RhbGsuU2VsZWN0aW9uSGFuZGxlKGN0R3JvdXApOwogICAgICAgICAgICAgIHNlbEhhbmRsZS5vbigiY2hhbmdlIiwgaGFuZGxlU2VsZWN0aW9uKTsKCiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVGaWx0ZXIoeyB2YWx1ZTogZmlsdGVySGFuZGxlLmZpbHRlcmVkS2V5cyB9KTsKICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdGlvbih7IHZhbHVlOiBzZWxIYW5kbGUudmFsdWUgfSk7CiAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgfSkoKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoIWN0Z1tjdEtleV0pIGN0Z1tjdEtleV0gPSBbXTsKICAgICAgICAgIGN0Z1tjdEtleV0ucHVzaChzdGFtcCk7CiAgICAgICAgfSkoKTsKICAgICAgfQoKICAgICAgLy8gQWRkIHRvIGNvbnRhaW5lcgogICAgICBpZiAoIWxheWVySW5mby5oaWRkZW4pIGNvbnRhaW5lci5hZGRMYXllcihsYXllcik7CgogICAgICByZXR1cm4gb2xkTGF5ZXI7CiAgICB9CiAgfSwgewogICAga2V5OiAiYnJ1c2giLAogICAgdmFsdWU6IGZ1bmN0aW9uIGJydXNoKGJvdW5kcywgZXh0cmFJbmZvKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqLwoKICAgICAgLy8gRm9yIGVhY2ggQ3Jvc3N0YWxrIGdyb3VwLi4uCiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2J5Q3Jvc3N0YWxrR3JvdXApLmZvckVhY2goZnVuY3Rpb24gKGN0R3JvdXBOYW1lKSB7CiAgICAgICAgdmFyIGN0ZyA9IF90aGlzMi5fYnlDcm9zc3RhbGtHcm91cFtjdEdyb3VwTmFtZV07CiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IFtdOwogICAgICAgIC8vIC4uLml0ZXJhdGUgb3ZlciBlYWNoIENyb3NzdGFsayBrZXkgKGVhY2ggb2Ygd2hpY2ggbWF5IGhhdmUgbXVsdGlwbGUKICAgICAgICAvLyBsYXllcnMpLi4uCiAgICAgICAgT2JqZWN0LmtleXMoY3RnKS5mb3JFYWNoKGZ1bmN0aW9uIChjdEtleSkgewogICAgICAgICAgLy8gLi4uYW5kIGZvciBlYWNoIGxheWVyLi4uCiAgICAgICAgICBjdGdbY3RLZXldLmZvckVhY2goZnVuY3Rpb24gKHN0YW1wKSB7CiAgICAgICAgICAgIHZhciBsYXllckluZm8gPSBfdGhpczIuX2J5U3RhbXBbc3RhbXBdOwogICAgICAgICAgICAvLyAuLi5pZiBpdCdzIHNvbWV0aGluZyB3aXRoIGEgcG9pbnQuLi4KICAgICAgICAgICAgaWYgKGxheWVySW5mby5sYXllci5nZXRMYXRMbmcpIHsKICAgICAgICAgICAgICAvLyAuLi4gYW5kIGl0J3MgaW5zaWRlIHRoZSBzZWxlY3Rpb24gYm91bmRzLi4uCiAgICAgICAgICAgICAgLy8gVE9ETzogVXNlIHBpeGVsIGNvbnRhaW5tZW50LCBub3QgbGF0L2xuZyBjb250YWlubWVudAogICAgICAgICAgICAgIGlmIChib3VuZHMuY29udGFpbnMobGF5ZXJJbmZvLmxheWVyLmdldExhdExuZygpKSkgewogICAgICAgICAgICAgICAgLy8gLi4uYWRkIHRoZSBrZXkgdG8gdGhlIHNlbGVjdGlvbi4KICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKGN0S2V5KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIG5ldyBnbG9iYWwuY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShjdEdyb3VwTmFtZSkuc2V0KHNlbGVjdGlvbiwgZXh0cmFJbmZvKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAidW5icnVzaCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gdW5icnVzaChleHRyYUluZm8pIHsKICAgICAgT2JqZWN0LmtleXModGhpcy5fYnlDcm9zc3RhbGtHcm91cCkuZm9yRWFjaChmdW5jdGlvbiAoY3RHcm91cE5hbWUpIHsKICAgICAgICBuZXcgZ2xvYmFsLmNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cE5hbWUpLmNsZWFyKGV4dHJhSW5mbyk7CiAgICAgIH0pOwogICAgfQogIH0sIHsKICAgIGtleTogIl9zZXRWaXNpYmlsaXR5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0VmlzaWJpbGl0eShsYXllckluZm8sIHZpc2libGUpIHsKICAgICAgaWYgKGxheWVySW5mby5oaWRkZW4gXiB2aXNpYmxlKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKHZpc2libGUpIHsKICAgICAgICBsYXllckluZm8uY29udGFpbmVyLmFkZExheWVyKGxheWVySW5mby5sYXllcik7CiAgICAgICAgbGF5ZXJJbmZvLmhpZGRlbiA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIGxheWVySW5mby5jb250YWluZXIucmVtb3ZlTGF5ZXIobGF5ZXJJbmZvLmxheWVyKTsKICAgICAgICBsYXllckluZm8uaGlkZGVuID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogIl9zZXRPcGFjaXR5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0T3BhY2l0eShsYXllckluZm8sIG9wYWNpdHkpIHsKICAgICAgaWYgKGxheWVySW5mby5sYXllci5zZXRPcGFjaXR5KSB7CiAgICAgICAgbGF5ZXJJbmZvLmxheWVyLnNldE9wYWNpdHkob3BhY2l0eSk7CiAgICAgIH0gZWxzZSBpZiAobGF5ZXJJbmZvLmxheWVyLnNldFN0eWxlKSB7CiAgICAgICAgbGF5ZXJJbmZvLmxheWVyLnNldFN0eWxlKHsKICAgICAgICAgIG9wYWNpdHk6IG9wYWNpdHkgKiBsYXllckluZm8ubGF5ZXIub3B0aW9ucy5vcmlnT3BhY2l0eSwKICAgICAgICAgIGZpbGxPcGFjaXR5OiBvcGFjaXR5ICogbGF5ZXJJbmZvLmxheWVyLm9wdGlvbnMub3JpZ0ZpbGxPcGFjaXR5CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRMYXllciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGF5ZXIoY2F0ZWdvcnksIGxheWVySWQpIHsKICAgICAgcmV0dXJuIHRoaXMuX2J5TGF5ZXJJZFt0aGlzLl9sYXllcklkS2V5KGNhdGVnb3J5LCBsYXllcklkKV07CiAgICB9CiAgfSwgewogICAga2V5OiAicmVtb3ZlTGF5ZXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUxheWVyKGNhdGVnb3J5LCBsYXllcklkcykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICAgIC8vIEZpbmQgbGF5ZXIgaW5mbwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGxheWVySWRzKSwgZnVuY3Rpb24gKGksIGxheWVySWQpIHsKICAgICAgICB2YXIgbGF5ZXIgPSBfdGhpczMuX2J5TGF5ZXJJZFtfdGhpczMuX2xheWVySWRLZXkoY2F0ZWdvcnksIGxheWVySWQpXTsKICAgICAgICBpZiAobGF5ZXIpIHsKICAgICAgICAgIF90aGlzMy5fcmVtb3ZlTGF5ZXIobGF5ZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiY2xlYXJMYXllcnMiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyTGF5ZXJzKGNhdGVnb3J5KSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwoKICAgICAgLy8gRmluZCBhbGwgbGF5ZXJzIGluIF9ieUNhdGVnb3J5W2NhdGVnb3J5XQogICAgICB2YXIgY2F0VGFibGUgPSB0aGlzLl9ieUNhdGVnb3J5W2NhdGVnb3J5XTsKICAgICAgaWYgKCFjYXRUYWJsZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLy8gUmVtb3ZlIGFsbCBsYXllcnMuIE1ha2UgY29weSBvZiBrZXlzIHRvIGF2b2lkIG11dGF0aW5nIHRoZSBjb2xsZWN0aW9uCiAgICAgIC8vIGJlaGluZCB0aGUgaXRlcmF0b3IgeW91J3JlIGFjY2Vzc2luZy4KICAgICAgdmFyIHN0YW1wcyA9IFtdOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goY2F0VGFibGUsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgc3RhbXBzLnB1c2goayk7CiAgICAgIH0pOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goc3RhbXBzLCBmdW5jdGlvbiAoaSwgc3RhbXApIHsKICAgICAgICBfdGhpczQuX3JlbW92ZUxheWVyKHN0YW1wKTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0TGF5ZXJHcm91cCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGF5ZXJHcm91cChncm91cCwgZW5zdXJlRXhpc3RzKSB7CiAgICAgIHZhciBnID0gdGhpcy5fZ3JvdXBDb250YWluZXJzW2dyb3VwXTsKICAgICAgaWYgKGVuc3VyZUV4aXN0cyAmJiAhZykgewogICAgICAgIHRoaXMuX2J5R3JvdXBbZ3JvdXBdID0gdGhpcy5fYnlHcm91cFtncm91cF0gfHwge307CiAgICAgICAgZyA9IHRoaXMuX2dyb3VwQ29udGFpbmVyc1tncm91cF0gPSBfbGVhZmxldDIuZGVmYXVsdC5mZWF0dXJlR3JvdXAoKTsKICAgICAgICBnLmdyb3VwbmFtZSA9IGdyb3VwOwogICAgICAgIGcuYWRkVG8odGhpcy5fbWFwKTsKICAgICAgfQogICAgICByZXR1cm4gZzsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRHcm91cE5hbWVGcm9tTGF5ZXJHcm91cCIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0R3JvdXBOYW1lRnJvbUxheWVyR3JvdXAobGF5ZXJHcm91cCkgewogICAgICByZXR1cm4gbGF5ZXJHcm91cC5ncm91cG5hbWU7CiAgICB9CiAgfSwgewogICAga2V5OiAiZ2V0VmlzaWJsZUdyb3VwcyIsCiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmlzaWJsZUdyb3VwcygpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CgogICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCh0aGlzLl9ncm91cENvbnRhaW5lcnMsIGZ1bmN0aW9uIChrLCB2KSB7CiAgICAgICAgaWYgKF90aGlzNS5fbWFwLmhhc0xheWVyKHYpKSB7CiAgICAgICAgICByZXN1bHQucHVzaChrKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogIH0sIHsKICAgIGtleTogImNsZWFyR3JvdXAiLAogICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyR3JvdXAoZ3JvdXApIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CgogICAgICAvLyBGaW5kIGFsbCBsYXllcnMgaW4gX2J5R3JvdXBbZ3JvdXBdCiAgICAgIHZhciBncm91cFRhYmxlID0gdGhpcy5fYnlHcm91cFtncm91cF07CiAgICAgIGlmICghZ3JvdXBUYWJsZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLy8gUmVtb3ZlIGFsbCBsYXllcnMuIE1ha2UgY29weSBvZiBrZXlzIHRvIGF2b2lkIG11dGF0aW5nIHRoZSBjb2xsZWN0aW9uCiAgICAgIC8vIGJlaGluZCB0aGUgaXRlcmF0b3IgeW91J3JlIGFjY2Vzc2luZy4KICAgICAgdmFyIHN0YW1wcyA9IFtdOwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goZ3JvdXBUYWJsZSwgZnVuY3Rpb24gKGssIHYpIHsKICAgICAgICBzdGFtcHMucHVzaChrKTsKICAgICAgfSk7CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChzdGFtcHMsIGZ1bmN0aW9uIChpLCBzdGFtcCkgewogICAgICAgIF90aGlzNi5fcmVtb3ZlTGF5ZXIoc3RhbXApOwogICAgICB9KTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJjbGVhciIsCiAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7CiAgICAgIGZ1bmN0aW9uIGNsZWFyTGF5ZXJHcm91cChrZXksIGxheWVyR3JvdXApIHsKICAgICAgICBsYXllckdyb3VwLmNsZWFyTGF5ZXJzKCk7CiAgICAgIH0KICAgICAgLy8gQ2xlYXIgYWxsIGluZGljZXMgYW5kIGxheWVyR3JvdXBzCiAgICAgIHRoaXMuX2J5R3JvdXAgPSB7fTsKICAgICAgdGhpcy5fYnlDYXRlZ29yeSA9IHt9OwogICAgICB0aGlzLl9ieUxheWVySWQgPSB7fTsKICAgICAgdGhpcy5fYnlTdGFtcCA9IHt9OwogICAgICB0aGlzLl9ieUNyb3NzdGFsa0dyb3VwID0ge307CiAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCh0aGlzLl9jYXRlZ29yeUNvbnRhaW5lcnMsIGNsZWFyTGF5ZXJHcm91cCk7CiAgICAgIHRoaXMuX2NhdGVnb3J5Q29udGFpbmVycyA9IHt9OwogICAgICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2godGhpcy5fZ3JvdXBDb250YWluZXJzLCBjbGVhckxheWVyR3JvdXApOwogICAgICB0aGlzLl9ncm91cENvbnRhaW5lcnMgPSB7fTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJfcmVtb3ZlTGF5ZXIiLAogICAgdmFsdWU6IGZ1bmN0aW9uIF9yZW1vdmVMYXllcihsYXllcikgewogICAgICB2YXIgc3RhbXAgPSB2b2lkIDA7CiAgICAgIGlmICh0eXBlb2YgbGF5ZXIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgc3RhbXAgPSBsYXllcjsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGFtcCA9IF9sZWFmbGV0Mi5kZWZhdWx0LlV0aWwuc3RhbXAobGF5ZXIpOwogICAgICB9CgogICAgICB2YXIgbGF5ZXJJbmZvID0gdGhpcy5fYnlTdGFtcFtzdGFtcF07CiAgICAgIGlmICghbGF5ZXJJbmZvKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBsYXllckluZm8uY29udGFpbmVyLnJlbW92ZUxheWVyKHN0YW1wKTsKICAgICAgaWYgKHR5cGVvZiBsYXllckluZm8uZ3JvdXAgPT09ICJzdHJpbmciKSB7CiAgICAgICAgZGVsZXRlIHRoaXMuX2J5R3JvdXBbbGF5ZXJJbmZvLmdyb3VwXVtzdGFtcF07CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBsYXllckluZm8ubGF5ZXJJZCA9PT0gInN0cmluZyIpIHsKICAgICAgICBkZWxldGUgdGhpcy5fYnlMYXllcklkW3RoaXMuX2xheWVySWRLZXkobGF5ZXJJbmZvLmNhdGVnb3J5LCBsYXllckluZm8ubGF5ZXJJZCldOwogICAgICB9CiAgICAgIGRlbGV0ZSB0aGlzLl9ieUNhdGVnb3J5W2xheWVySW5mby5jYXRlZ29yeV1bc3RhbXBdOwogICAgICBkZWxldGUgdGhpcy5fYnlTdGFtcFtzdGFtcF07CiAgICAgIGlmIChsYXllckluZm8uY3RHcm91cCkgewogICAgICAgIHZhciBjdEdyb3VwID0gdGhpcy5fYnlDcm9zc3RhbGtHcm91cFtsYXllckluZm8uY3RHcm91cF07CiAgICAgICAgdmFyIGxheWVyc0ZvcktleSA9IGN0R3JvdXBbbGF5ZXJJbmZvLmN0S2V5XTsKICAgICAgICB2YXIgaWR4ID0gbGF5ZXJzRm9yS2V5ID8gbGF5ZXJzRm9yS2V5LmluZGV4T2Yoc3RhbXApIDogLTE7CiAgICAgICAgaWYgKGlkeCA+PSAwKSB7CiAgICAgICAgICBpZiAobGF5ZXJzRm9yS2V5Lmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICBkZWxldGUgY3RHcm91cFtsYXllckluZm8uY3RLZXldOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGF5ZXJzRm9yS2V5LnNwbGljZShpZHgsIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sIHsKICAgIGtleTogIl9sYXllcklkS2V5IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBfbGF5ZXJJZEtleShjYXRlZ29yeSwgbGF5ZXJJZCkgewogICAgICByZXR1cm4gY2F0ZWdvcnkgKyAiXG4iICsgbGF5ZXJJZDsKICAgIH0KICB9XSk7CgogIHJldHVybiBMYXllck1hbmFnZXI7Cn0oKTsKCmV4cG9ydHMuZGVmYXVsdCA9IExheWVyTWFuYWdlcjsKCgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7Ii4vZ2xvYmFsL2pxdWVyeSI6NywiLi9nbG9iYWwvbGVhZmxldCI6OCwiLi91dGlsIjoxNX1dLDEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChnbG9iYWwpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7Cgp2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgPyAic3ltYm9sIiA6IHR5cGVvZiBvYmo7IH07Cgp2YXIgX2pxdWVyeSA9IHJlcXVpcmUoIi4vZ2xvYmFsL2pxdWVyeSIpOwoKdmFyIF9qcXVlcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfanF1ZXJ5KTsKCnZhciBfbGVhZmxldCA9IHJlcXVpcmUoIi4vZ2xvYmFsL2xlYWZsZXQiKTsKCnZhciBfbGVhZmxldDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sZWFmbGV0KTsKCnZhciBfc2hpbnkgPSByZXF1aXJlKCIuL2dsb2JhbC9zaGlueSIpOwoKdmFyIF9zaGlueTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zaGlueSk7Cgp2YXIgX2h0bWx3aWRnZXRzID0gcmVxdWlyZSgiLi9nbG9iYWwvaHRtbHdpZGdldHMiKTsKCnZhciBfaHRtbHdpZGdldHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaHRtbHdpZGdldHMpOwoKdmFyIF91dGlsID0gcmVxdWlyZSgiLi91dGlsIik7Cgp2YXIgX2Nyc191dGlscyA9IHJlcXVpcmUoIi4vY3JzX3V0aWxzIik7Cgp2YXIgX2RhdGFmcmFtZSA9IHJlcXVpcmUoIi4vZGF0YWZyYW1lIik7Cgp2YXIgX2RhdGFmcmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRhZnJhbWUpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZSA9IHJlcXVpcmUoIi4vY2x1c3Rlci1sYXllci1zdG9yZSIpOwoKdmFyIF9jbHVzdGVyTGF5ZXJTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbHVzdGVyTGF5ZXJTdG9yZSk7Cgp2YXIgX21pcG1hcHBlciA9IHJlcXVpcmUoIi4vbWlwbWFwcGVyIik7Cgp2YXIgX21pcG1hcHBlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9taXBtYXBwZXIpOwoKZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0KCnZhciBtZXRob2RzID0ge307CmV4cG9ydHMuZGVmYXVsdCA9IG1ldGhvZHM7CgoKZnVuY3Rpb24gbW91c2VIYW5kbGVyKG1hcElkLCBsYXllcklkLCBncm91cCwgZXZlbnROYW1lLCBleHRyYUluZm8pIHsKICByZXR1cm4gZnVuY3Rpb24gKGUpIHsKICAgIGlmICghX2h0bWx3aWRnZXRzMi5kZWZhdWx0LnNoaW55TW9kZSkgcmV0dXJuOwoKICAgIHZhciBldmVudEluZm8gPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7CiAgICAgIGlkOiBsYXllcklkLAogICAgICAiLm5vbmNlIjogTWF0aC5yYW5kb20oKSAvLyBmb3JjZSByZWFjdGl2aXR5CiAgICB9LCBncm91cCAhPT0gbnVsbCA/IHsgZ3JvdXA6IGdyb3VwIH0gOiBudWxsLCBlLnRhcmdldC5nZXRMYXRMbmcgPyBlLnRhcmdldC5nZXRMYXRMbmcoKSA6IGUubGF0bG5nLCBleHRyYUluZm8pOwoKICAgIF9zaGlueTIuZGVmYXVsdC5vbklucHV0Q2hhbmdlKG1hcElkICsgIl8iICsgZXZlbnROYW1lLCBldmVudEluZm8pOwogIH07Cn0KCm1ldGhvZHMubW91c2VIYW5kbGVyID0gbW91c2VIYW5kbGVyOwoKbWV0aG9kcy5jbGVhckdyb3VwID0gZnVuY3Rpb24gKGdyb3VwKSB7CiAgdmFyIF90aGlzID0gdGhpczsKCiAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKCgwLCBfdXRpbC5hc0FycmF5KShncm91cCksIGZ1bmN0aW9uIChpLCB2KSB7CiAgICBfdGhpcy5sYXllck1hbmFnZXIuY2xlYXJHcm91cCh2KTsKICB9KTsKfTsKCm1ldGhvZHMuc2V0VmlldyA9IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHsKICB0aGlzLnNldFZpZXcoY2VudGVyLCB6b29tLCBvcHRpb25zKTsKfTsKCm1ldGhvZHMuZml0Qm91bmRzID0gZnVuY3Rpb24gKGxhdDEsIGxuZzEsIGxhdDIsIGxuZzIpIHsKICB0aGlzLmZpdEJvdW5kcyhbW2xhdDEsIGxuZzFdLCBbbGF0MiwgbG5nMl1dKTsKfTsKCm1ldGhvZHMuc2V0TWF4Qm91bmRzID0gZnVuY3Rpb24gKGxhdDEsIGxuZzEsIGxhdDIsIGxuZzIpIHsKICB0aGlzLnNldE1heEJvdW5kcyhbW2xhdDEsIGxuZzFdLCBbbGF0MiwgbG5nMl1dKTsKfTsKCm1ldGhvZHMuYWRkUG9wdXBzID0gZnVuY3Rpb24gKGxhdCwgbG5nLCBwb3B1cCwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMpIHsKICB2YXIgX3RoaXMyID0gdGhpczsKCiAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jYmluZChvcHRpb25zKTsKCiAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkgewogICAgaWYgKF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibGF0IikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibG5nIikpKSB7CiAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIHBvcHVwID0gX2xlYWZsZXQyLmRlZmF1bHQucG9wdXAoZGYuZ2V0KGkpKS5zZXRMYXRMbmcoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildKS5zZXRDb250ZW50KGRmLmdldChpLCAicG9wdXAiKSk7CiAgICAgICAgdmFyIHRoaXNJZCA9IGRmLmdldChpLCAibGF5ZXJJZCIpOwogICAgICAgIHZhciB0aGlzR3JvdXAgPSBkZi5nZXQoaSwgImdyb3VwIik7CiAgICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIocG9wdXAsICJwb3B1cCIsIHRoaXNJZCwgdGhpc0dyb3VwKTsKICAgICAgfSkuY2FsbChfdGhpczIpOwogICAgfQogIH07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZGYubnJvdygpOyBpKyspIHsKICAgIF9sb29wKGkpOwogIH0KfTsKCm1ldGhvZHMucmVtb3ZlUG9wdXAgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJwb3B1cCIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclBvcHVwcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygicG9wdXAiKTsKfTsKCm1ldGhvZHMuYWRkVGlsZXMgPSBmdW5jdGlvbiAodXJsVGVtcGxhdGUsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoX2xlYWZsZXQyLmRlZmF1bHQudGlsZUxheWVyKHVybFRlbXBsYXRlLCBvcHRpb25zKSwgInRpbGUiLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZVRpbGVzID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigidGlsZSIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclRpbGVzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJ0aWxlIik7Cn07CgptZXRob2RzLmFkZFdNU1RpbGVzID0gZnVuY3Rpb24gKGJhc2VVcmwsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zKSB7CiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jcnMpIHsKICAgIG9wdGlvbnMuY3JzID0gKDAsIF9jcnNfdXRpbHMuZ2V0Q1JTKShvcHRpb25zLmNycyk7CiAgfQogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKF9sZWFmbGV0Mi5kZWZhdWx0LnRpbGVMYXllci53bXMoYmFzZVVybCwgb3B0aW9ucyksICJ0aWxlIiwgbGF5ZXJJZCwgZ3JvdXApOwp9OwoKLy8gR2l2ZW46Ci8vICAge2RhdGE6IFsiYSIsICJiIiwgImMiXSwgaW5kZXg6IFswLCAxLCAwLCAyXX0KLy8gcmV0dXJuczoKLy8gICBbImEiLCAiYiIsICJhIiwgImMiXQpmdW5jdGlvbiB1bnBhY2tTdHJpbmdzKGljb25zZXQpIHsKICBpZiAoIWljb25zZXQpIHsKICAgIHJldHVybiBpY29uc2V0OwogIH0KICBpZiAodHlwZW9mIGljb25zZXQuaW5kZXggPT09ICJ1bmRlZmluZWQiKSB7CiAgICByZXR1cm4gaWNvbnNldDsKICB9CgogIGljb25zZXQuZGF0YSA9ICgwLCBfdXRpbC5hc0FycmF5KShpY29uc2V0LmRhdGEpOwogIGljb25zZXQuaW5kZXggPSAoMCwgX3V0aWwuYXNBcnJheSkoaWNvbnNldC5pbmRleCk7CgogIHJldHVybiBfanF1ZXJ5Mi5kZWZhdWx0Lm1hcChpY29uc2V0LmluZGV4LCBmdW5jdGlvbiAoZSwgaSkgewogICAgcmV0dXJuIGljb25zZXQuZGF0YVtlXTsKICB9KTsKfQoKZnVuY3Rpb24gYWRkTWFya2VycyhtYXAsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgbWFya2VyRnVuYykgewogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICB2YXIgY2x1c3Rlckdyb3VwID0gdGhpcy5sYXllck1hbmFnZXIuZ2V0TGF5ZXIoImNsdXN0ZXIiLCBjbHVzdGVySWQpLAogICAgICAgIGNsdXN0ZXIgPSBjbHVzdGVyT3B0aW9ucyAhPT0gbnVsbDsKICAgIGlmIChjbHVzdGVyICYmICFjbHVzdGVyR3JvdXApIHsKICAgICAgY2x1c3Rlckdyb3VwID0gX2xlYWZsZXQyLmRlZmF1bHQubWFya2VyQ2x1c3Rlckdyb3VwLmxheWVyU3VwcG9ydChjbHVzdGVyT3B0aW9ucyk7CiAgICAgIGlmIChjbHVzdGVyT3B0aW9ucy5mcmVlemVBdFpvb20pIHsKICAgICAgICB2YXIgZnJlZXplQXRab29tID0gY2x1c3Rlck9wdGlvbnMuZnJlZXplQXRab29tOwogICAgICAgIGRlbGV0ZSBjbHVzdGVyT3B0aW9ucy5mcmVlemVBdFpvb207CiAgICAgICAgY2x1c3Rlckdyb3VwLmZyZWV6ZUF0Wm9vbShmcmVlemVBdFpvb20pOwogICAgICB9CiAgICAgIGNsdXN0ZXJHcm91cC5jbHVzdGVyTGF5ZXJTdG9yZSA9IG5ldyBfY2x1c3RlckxheWVyU3RvcmUyLmRlZmF1bHQoY2x1c3Rlckdyb3VwKTsKICAgIH0KICAgIHZhciBleHRyYUluZm8gPSBjbHVzdGVyID8geyBjbHVzdGVySWQ6IGNsdXN0ZXJJZCB9IDoge307CgogICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMihpKSB7CiAgICAgIGlmIChfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdCIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZyIpKSkgewogICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgbWFya2VyID0gbWFya2VyRnVuYyhkZiwgaSk7CiAgICAgICAgICB2YXIgdGhpc0lkID0gZGYuZ2V0KGksICJsYXllcklkIik7CiAgICAgICAgICB2YXIgdGhpc0dyb3VwID0gY2x1c3RlciA/IG51bGwgOiBkZi5nZXQoaSwgImdyb3VwIik7CiAgICAgICAgICBpZiAoY2x1c3RlcikgewogICAgICAgICAgICBjbHVzdGVyR3JvdXAuY2x1c3RlckxheWVyU3RvcmUuYWRkKG1hcmtlciwgdGhpc0lkKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKG1hcmtlciwgIm1hcmtlciIsIHRoaXNJZCwgdGhpc0dyb3VwLCBkZi5nZXQoaSwgImN0R3JvdXAiLCB0cnVlKSwgZGYuZ2V0KGksICJjdEtleSIsIHRydWUpKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBwb3B1cCA9IGRmLmdldChpLCAicG9wdXAiKTsKICAgICAgICAgIHZhciBwb3B1cE9wdGlvbnMgPSBkZi5nZXQoaSwgInBvcHVwT3B0aW9ucyIpOwogICAgICAgICAgaWYgKHBvcHVwICE9PSBudWxsKSB7CiAgICAgICAgICAgIGlmIChwb3B1cE9wdGlvbnMgIT09IG51bGwpIHsKICAgICAgICAgICAgICBtYXJrZXIuYmluZFBvcHVwKHBvcHVwLCBwb3B1cE9wdGlvbnMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1hcmtlci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbGFiZWwgPSBkZi5nZXQoaSwgImxhYmVsIik7CiAgICAgICAgICB2YXIgbGFiZWxPcHRpb25zID0gZGYuZ2V0KGksICJsYWJlbE9wdGlvbnMiKTsKICAgICAgICAgIGlmIChsYWJlbCAhPT0gbnVsbCkgewogICAgICAgICAgICBpZiAobGFiZWxPcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKGxhYmVsT3B0aW9ucy5ub0hpZGUpIHsKICAgICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucykuc2hvd0xhYmVsKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1hcmtlci5iaW5kTGFiZWwobGFiZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBtYXJrZXIub24oImNsaWNrIiwgbW91c2VIYW5kbGVyKHRoaXMuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCAibWFya2VyX2NsaWNrIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgICAgICBtYXJrZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcih0aGlzLmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgIm1hcmtlcl9tb3VzZW92ZXIiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICAgIG1hcmtlci5vbigibW91c2VvdXQiLCBtb3VzZUhhbmRsZXIodGhpcy5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsICJtYXJrZXJfbW91c2VvdXQiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgICB9KS5jYWxsKF90aGlzMyk7CiAgICAgIH0KICAgIH07CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZi5ucm93KCk7IGkrKykgewogICAgICBfbG9vcDIoaSk7CiAgICB9CgogICAgaWYgKGNsdXN0ZXIpIHsKICAgICAgdGhpcy5sYXllck1hbmFnZXIuYWRkTGF5ZXIoY2x1c3Rlckdyb3VwLCAiY2x1c3RlciIsIGNsdXN0ZXJJZCwgZ3JvdXApOwogICAgfQogIH0pLmNhbGwobWFwKTsKfQoKbWV0aG9kcy5hZGRHZW5lcmljTWFya2VycyA9IGFkZE1hcmtlcnM7CgptZXRob2RzLmFkZE1hcmtlcnMgPSBmdW5jdGlvbiAobGF0LCBsbmcsIGljb24sIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBjcm9zc3RhbGtPcHRpb25zKSB7CiAgdmFyIGljb25kZiA9IHZvaWQgMDsKICB2YXIgZ2V0SWNvbiA9IHZvaWQgMDsKCiAgaWYgKGljb24pIHsKICAgIC8vIFVucGFjayBpY29ucwogICAgaWNvbi5pY29uVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25VcmwpOwogICAgaWNvbi5pY29uUmV0aW5hVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLmljb25SZXRpbmFVcmwpOwogICAgaWNvbi5zaGFkb3dVcmwgPSB1bnBhY2tTdHJpbmdzKGljb24uc2hhZG93VXJsKTsKICAgIGljb24uc2hhZG93UmV0aW5hVXJsID0gdW5wYWNrU3RyaW5ncyhpY29uLnNoYWRvd1JldGluYVVybCk7CgogICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgaWNvbmRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jYmluZChpY29uKTsKCiAgICAvLyBDb25zdHJ1Y3RzIGFuIGljb24gZnJvbSBhIHNwZWNpZmllZCByb3cgb2YgdGhlIGljb24gZGF0YWZyYW1lLgogICAgZ2V0SWNvbiA9IGZ1bmN0aW9uIGdldEljb24oaSkgewogICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CiAgICAgIGlmICghb3B0cy5pY29uVXJsKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfbGVhZmxldDIuZGVmYXVsdC5JY29uLkRlZmF1bHQoKTsKICAgICAgfQoKICAgICAgLy8gQ29tcG9zaXRlIG9wdGlvbnMgKGxpa2UgcG9pbnRzIG9yIHNpemVzKSBhcmUgcGFzc2VkIGZyb20gUiB3aXRoIGVhY2gKICAgICAgLy8gaW5kaXZpZHVhbCBjb21wb25lbnQgYXMgaXRzIG93biBvcHRpb24uIFdlIG5lZWQgdG8gY29tYmluZSB0aGVtIG5vdwogICAgICAvLyBpbnRvIHRoZWlyIGNvbXBvc2l0ZSBmb3JtLgogICAgICBpZiAob3B0cy5pY29uV2lkdGgpIHsKICAgICAgICBvcHRzLmljb25TaXplID0gW29wdHMuaWNvbldpZHRoLCBvcHRzLmljb25IZWlnaHRdOwogICAgICB9CiAgICAgIGlmIChvcHRzLnNoYWRvd1dpZHRoKSB7CiAgICAgICAgb3B0cy5zaGFkb3dTaXplID0gW29wdHMuc2hhZG93V2lkdGgsIG9wdHMuc2hhZG93SGVpZ2h0XTsKICAgICAgfQogICAgICBpZiAob3B0cy5pY29uQW5jaG9yWCkgewogICAgICAgIG9wdHMuaWNvbkFuY2hvciA9IFtvcHRzLmljb25BbmNob3JYLCBvcHRzLmljb25BbmNob3JZXTsKICAgICAgfQogICAgICBpZiAob3B0cy5zaGFkb3dBbmNob3JYKSB7CiAgICAgICAgb3B0cy5zaGFkb3dBbmNob3IgPSBbb3B0cy5zaGFkb3dBbmNob3JYLCBvcHRzLnNoYWRvd0FuY2hvclldOwogICAgICB9CiAgICAgIGlmIChvcHRzLnBvcHVwQW5jaG9yWCkgewogICAgICAgIG9wdHMucG9wdXBBbmNob3IgPSBbb3B0cy5wb3B1cEFuY2hvclgsIG9wdHMucG9wdXBBbmNob3JZXTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBfbGVhZmxldDIuZGVmYXVsdC5JY29uKG9wdHMpOwogICAgfTsKICB9CgogIGlmICghKF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxuZykpIHsKCiAgICB2YXIgZGYgPSBuZXcgX2RhdGFmcmFtZTIuZGVmYXVsdCgpLmNvbCgibGF0IiwgbGF0KS5jb2woImxuZyIsIGxuZykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jYmluZChvcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KTsKCiAgICBpZiAoaWNvbikgaWNvbmRmLmVmZmVjdGl2ZUxlbmd0aCA9IGRmLm5yb3coKTsKCiAgICBhZGRNYXJrZXJzKHRoaXMsIGRmLCBncm91cCwgY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJJZCwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHZhciBvcHRpb25zID0gZGYuZ2V0KGkpOwogICAgICBpZiAoaWNvbikgb3B0aW9ucy5pY29uID0gZ2V0SWNvbihpKTsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0Lm1hcmtlcihbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIG9wdGlvbnMpOwogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRBd2Vzb21lTWFya2VycyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgaWNvbiwgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGNyb3NzdGFsa09wdGlvbnMpIHsKICB2YXIgaWNvbmRmID0gdm9pZCAwOwogIHZhciBnZXRJY29uID0gdm9pZCAwOwogIGlmIChpY29uKSB7CgogICAgLy8gVGhpcyBjYmluZHMgdGhlIGljb24gVVJMcyBhbmQgYW55IG90aGVyIGljb24gb3B0aW9uczsgdGhleSdyZSBhbGwKICAgIC8vIHByZXNlbnQgb24gdGhlIGljb24gb2JqZWN0LgogICAgaWNvbmRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jYmluZChpY29uKTsKCiAgICAvLyBDb25zdHJ1Y3RzIGFuIGljb24gZnJvbSBhIHNwZWNpZmllZCByb3cgb2YgdGhlIGljb24gZGF0YWZyYW1lLgogICAgZ2V0SWNvbiA9IGZ1bmN0aW9uIGdldEljb24oaSkgewogICAgICB2YXIgb3B0cyA9IGljb25kZi5nZXQoaSk7CiAgICAgIGlmICghb3B0cykgewogICAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuQXdlc29tZU1hcmtlcnMuaWNvbigpOwogICAgICB9CgogICAgICBpZiAob3B0cy5zcXVhcmVNYXJrZXIpIHsKICAgICAgICBvcHRzLmNsYXNzTmFtZSA9ICJhd2Vzb21lLW1hcmtlciBhd2Vzb21lLW1hcmtlci1zcXVhcmUiOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgX2xlYWZsZXQyLmRlZmF1bHQuQXdlc29tZU1hcmtlcnMuaWNvbihvcHRzKTsKICAgIH07CiAgfQoKICBpZiAoIShfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobGF0KSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzRW1wdHlPYmplY3QobG5nKSkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobGF0KSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsbmcpKSB7CgogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgibGF5ZXJJZCIsIGxheWVySWQpLmNvbCgiZ3JvdXAiLCBncm91cCkuY29sKCJwb3B1cCIsIHBvcHVwKS5jb2woInBvcHVwT3B0aW9ucyIsIHBvcHVwT3B0aW9ucykuY29sKCJsYWJlbCIsIGxhYmVsKS5jb2woImxhYmVsT3B0aW9ucyIsIGxhYmVsT3B0aW9ucykuY2JpbmQob3B0aW9ucykuY2JpbmQoY3Jvc3N0YWxrT3B0aW9ucyB8fCB7fSk7CgogICAgaWYgKGljb24pIGljb25kZi5lZmZlY3RpdmVMZW5ndGggPSBkZi5ucm93KCk7CgogICAgYWRkTWFya2Vycyh0aGlzLCBkZiwgZ3JvdXAsIGNsdXN0ZXJPcHRpb25zLCBjbHVzdGVySWQsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICB2YXIgb3B0aW9ucyA9IGRmLmdldChpKTsKICAgICAgaWYgKGljb24pIG9wdGlvbnMuaWNvbiA9IGdldEljb24oaSk7CiAgICAgIHJldHVybiBfbGVhZmxldDIuZGVmYXVsdC5tYXJrZXIoW2RmLmdldChpLCAibGF0IiksIGRmLmdldChpLCAibG5nIildLCBvcHRpb25zKTsKICAgIH0pOwogIH0KfTsKCmZ1bmN0aW9uIGFkZExheWVycyhtYXAsIGNhdGVnb3J5LCBkZiwgbGF5ZXJGdW5jKSB7CiAgdmFyIF9sb29wMyA9IGZ1bmN0aW9uIF9sb29wMyhpKSB7CiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKCiAgICAgIHZhciBsYXllciA9IGxheWVyRnVuYyhkZiwgaSk7CiAgICAgIGlmICghX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxheWVyKSkgewogICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgdGhpc0lkID0gZGYuZ2V0KGksICJsYXllcklkIik7CiAgICAgICAgICB2YXIgdGhpc0dyb3VwID0gZGYuZ2V0KGksICJncm91cCIpOwogICAgICAgICAgX3RoaXM0LmxheWVyTWFuYWdlci5hZGRMYXllcihsYXllciwgY2F0ZWdvcnksIHRoaXNJZCwgdGhpc0dyb3VwLCBkZi5nZXQoaSwgImN0R3JvdXAiLCB0cnVlKSwgZGYuZ2V0KGksICJjdEtleSIsIHRydWUpKTsKICAgICAgICAgIGlmIChsYXllci5iaW5kUG9wdXApIHsKICAgICAgICAgICAgdmFyIHBvcHVwID0gZGYuZ2V0KGksICJwb3B1cCIpOwogICAgICAgICAgICB2YXIgcG9wdXBPcHRpb25zID0gZGYuZ2V0KGksICJwb3B1cE9wdGlvbnMiKTsKICAgICAgICAgICAgaWYgKHBvcHVwICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKHBvcHVwT3B0aW9ucyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgbGF5ZXIuYmluZFBvcHVwKHBvcHVwLCBwb3B1cE9wdGlvbnMpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGxheWVyLmJpbmRMYWJlbCkgewogICAgICAgICAgICB2YXIgbGFiZWwgPSBkZi5nZXQoaSwgImxhYmVsIik7CiAgICAgICAgICAgIHZhciBsYWJlbE9wdGlvbnMgPSBkZi5nZXQoaSwgImxhYmVsT3B0aW9ucyIpOwogICAgICAgICAgICBpZiAobGFiZWwgIT09IG51bGwpIHsKICAgICAgICAgICAgICBpZiAobGFiZWxPcHRpb25zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBsYXllci5iaW5kTGFiZWwobGFiZWwsIGxhYmVsT3B0aW9ucyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxheWVyLmJpbmRMYWJlbChsYWJlbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoX3RoaXM0LmlkLCB0aGlzSWQsIHRoaXNHcm91cCwgY2F0ZWdvcnkgKyAiX2NsaWNrIiksIF90aGlzNCk7CiAgICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKF90aGlzNC5pZCwgdGhpc0lkLCB0aGlzR3JvdXAsIGNhdGVnb3J5ICsgIl9tb3VzZW92ZXIiKSwgX3RoaXM0KTsKICAgICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihfdGhpczQuaWQsIHRoaXNJZCwgdGhpc0dyb3VwLCBjYXRlZ29yeSArICJfbW91c2VvdXQiKSwgX3RoaXM0KTsKICAgICAgICAgIHZhciBoaWdobGlnaHRTdHlsZSA9IGRmLmdldChpLCAiaGlnaGxpZ2h0T3B0aW9ucyIpOwoKICAgICAgICAgIGlmICghX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGhpZ2hsaWdodFN0eWxlKSkgewogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICB2YXIgZGVmYXVsdFN0eWxlID0ge307CiAgICAgICAgICAgICAgX2pxdWVyeTIuZGVmYXVsdC5lYWNoKGhpZ2hsaWdodFN0eWxlLCBmdW5jdGlvbiAoaywgdikgewogICAgICAgICAgICAgICAgaWYgKGsgIT0gImJyaW5nVG9Gcm9udCIgJiYgayAhPSAic2VuZFRvQmFjayIpIHsKICAgICAgICAgICAgICAgICAgaWYgKGRmLmdldChpLCBrKSkgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdHlsZVtrXSA9IGRmLmdldChpLCBrKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICBsYXllci5vbigibW91c2VvdmVyIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoaGlnaGxpZ2h0U3R5bGUpOwogICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0eWxlLmJyaW5nVG9Gcm9udCkgewogICAgICAgICAgICAgICAgICB0aGlzLmJyaW5nVG9Gcm9udCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldFN0eWxlKGRlZmF1bHRTdHlsZSk7CiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0U3R5bGUuc2VuZFRvQmFjaykgewogICAgICAgICAgICAgICAgICB0aGlzLmJyaW5nVG9CYWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9CiAgICAgICAgfSkoKTsKICAgICAgfQogICAgfSkuY2FsbChtYXApOwogIH07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZGYubnJvdygpOyBpKyspIHsKICAgIF9sb29wMyhpKTsKICB9Cn0KCm1ldGhvZHMuYWRkR2VuZXJpY0xheWVycyA9IGFkZExheWVyczsKCm1ldGhvZHMuYWRkQ2lyY2xlcyA9IGZ1bmN0aW9uIChsYXQsIGxuZywgcmFkaXVzLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucywgY3Jvc3N0YWxrT3B0aW9ucykgewogIGlmICghKF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsYXQpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNFbXB0eU9iamVjdChsbmcpKSB8fCBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhsYXQpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxuZykpIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQiLCBsYXQpLmNvbCgibG5nIiwgbG5nKS5jb2woInJhZGl1cyIsIHJhZGl1cykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKS5jYmluZChjcm9zc3RhbGtPcHRpb25zIHx8IHt9KTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICBpZiAoX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsYXQiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmciKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJyYWRpdXMiKSkpIHsKICAgICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQuY2lyY2xlKFtkZi5nZXQoaSwgImxhdCIpLCBkZi5nZXQoaSwgImxuZyIpXSwgZGYuZ2V0KGksICJyYWRpdXMiKSwgZGYuZ2V0KGkpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5hZGRDaXJjbGVNYXJrZXJzID0gZnVuY3Rpb24gKGxhdCwgbG5nLCByYWRpdXMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBjcm9zc3RhbGtPcHRpb25zKSB7CiAgaWYgKCEoX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxhdCkgfHwgX2pxdWVyeTIuZGVmYXVsdC5pc0VtcHR5T2JqZWN0KGxuZykpIHx8IF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGxhdCkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMobG5nKSkgewogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woImxhdCIsIGxhdCkuY29sKCJsbmciLCBsbmcpLmNvbCgicmFkaXVzIiwgcmFkaXVzKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNiaW5kKGNyb3NzdGFsa09wdGlvbnMgfHwge30pLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZE1hcmtlcnModGhpcywgZGYsIGdyb3VwLCBjbHVzdGVyT3B0aW9ucywgY2x1c3RlcklkLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LmNpcmNsZU1hcmtlcihbZGYuZ2V0KGksICJsYXQiKSwgZGYuZ2V0KGksICJsbmciKV0sIGRmLmdldChpKSk7CiAgICB9KTsKICB9Cn07CgovKgogKiBAcGFyYW0gbGF0IEFycmF5IG9mIGFycmF5cyBvZiBsYXRpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWxpbmVzCiAqIEBwYXJhbSBsbmcgQXJyYXkgb2YgYXJyYXlzIG9mIGxvbmdpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWxpbmVzCiAqLwptZXRob2RzLmFkZFBvbHlsaW5lcyA9IGZ1bmN0aW9uIChwb2x5Z29ucywgbGF5ZXJJZCwgZ3JvdXAsIG9wdGlvbnMsIHBvcHVwLCBwb3B1cE9wdGlvbnMsIGxhYmVsLCBsYWJlbE9wdGlvbnMsIGhpZ2hsaWdodE9wdGlvbnMpIHsKICBpZiAocG9seWdvbnMubGVuZ3RoID4gMCkgewogICAgdmFyIGRmID0gbmV3IF9kYXRhZnJhbWUyLmRlZmF1bHQoKS5jb2woInNoYXBlcyIsIHBvbHlnb25zKS5jb2woImxheWVySWQiLCBsYXllcklkKS5jb2woImdyb3VwIiwgZ3JvdXApLmNvbCgicG9wdXAiLCBwb3B1cCkuY29sKCJwb3B1cE9wdGlvbnMiLCBwb3B1cE9wdGlvbnMpLmNvbCgibGFiZWwiLCBsYWJlbCkuY29sKCJsYWJlbE9wdGlvbnMiLCBsYWJlbE9wdGlvbnMpLmNvbCgiaGlnaGxpZ2h0T3B0aW9ucyIsIGhpZ2hsaWdodE9wdGlvbnMpLmNiaW5kKG9wdGlvbnMpOwoKICAgIGFkZExheWVycyh0aGlzLCAic2hhcGUiLCBkZiwgZnVuY3Rpb24gKGRmLCBpKSB7CiAgICAgIHZhciBzaGFwZXMgPSBkZi5nZXQoaSwgInNoYXBlcyIpOwogICAgICBzaGFwZXMgPSBzaGFwZXMubWFwKGZ1bmN0aW9uIChzaGFwZSkgewogICAgICAgIHJldHVybiBfaHRtbHdpZGdldHMyLmRlZmF1bHQuZGF0YWZyYW1lVG9EMyhzaGFwZVswXSk7CiAgICAgIH0pOwogICAgICBpZiAoc2hhcGVzLmxlbmd0aCA+IDEpIHsKICAgICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQubXVsdGlQb2x5bGluZShzaGFwZXMsIGRmLmdldChpKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LnBvbHlsaW5lKHNoYXBlc1swXSwgZGYuZ2V0KGkpKTsKICAgICAgfQogICAgfSk7CiAgfQp9OwoKbWV0aG9kcy5yZW1vdmVNYXJrZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJtYXJrZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJNYXJrZXJzID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJtYXJrZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyQ2x1c3RlciA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImNsdXN0ZXIiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWFya2VyRnJvbUNsdXN0ZXIgPSBmdW5jdGlvbiAobGF5ZXJJZCwgY2x1c3RlcklkKSB7CiAgdmFyIGNsdXN0ZXIgPSB0aGlzLmxheWVyTWFuYWdlci5nZXRMYXllcigiY2x1c3RlciIsIGNsdXN0ZXJJZCk7CiAgaWYgKCFjbHVzdGVyKSByZXR1cm47CiAgY2x1c3Rlci5jbHVzdGVyTGF5ZXJTdG9yZS5yZW1vdmUobGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyTWFya2VyQ2x1c3RlcnMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImNsdXN0ZXIiKTsKfTsKCm1ldGhvZHMucmVtb3ZlU2hhcGUgPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJzaGFwZSIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclNoYXBlcyA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLmxheWVyTWFuYWdlci5jbGVhckxheWVycygic2hhcGUiKTsKfTsKCm1ldGhvZHMuYWRkUmVjdGFuZ2xlcyA9IGZ1bmN0aW9uIChsYXQxLCBsbmcxLCBsYXQyLCBsbmcyLCBsYXllcklkLCBncm91cCwgb3B0aW9ucywgcG9wdXAsIHBvcHVwT3B0aW9ucywgbGFiZWwsIGxhYmVsT3B0aW9ucywgaGlnaGxpZ2h0T3B0aW9ucykgewogIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJsYXQxIiwgbGF0MSkuY29sKCJsbmcxIiwgbG5nMSkuY29sKCJsYXQyIiwgbGF0MikuY29sKCJsbmcyIiwgbG5nMikuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKCiAgYWRkTGF5ZXJzKHRoaXMsICJzaGFwZSIsIGRmLCBmdW5jdGlvbiAoZGYsIGkpIHsKICAgIGlmIChfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxhdDEiKSkgJiYgX2pxdWVyeTIuZGVmYXVsdC5pc051bWVyaWMoZGYuZ2V0KGksICJsbmcxIikpICYmIF9qcXVlcnkyLmRlZmF1bHQuaXNOdW1lcmljKGRmLmdldChpLCAibGF0MiIpKSAmJiBfanF1ZXJ5Mi5kZWZhdWx0LmlzTnVtZXJpYyhkZi5nZXQoaSwgImxuZzIiKSkpIHsKICAgICAgcmV0dXJuIF9sZWFmbGV0Mi5kZWZhdWx0LnJlY3RhbmdsZShbW2RmLmdldChpLCAibGF0MSIpLCBkZi5nZXQoaSwgImxuZzEiKV0sIFtkZi5nZXQoaSwgImxhdDIiKSwgZGYuZ2V0KGksICJsbmcyIildXSwgZGYuZ2V0KGkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0pOwp9OwoKLyoKICogQHBhcmFtIGxhdCBBcnJheSBvZiBhcnJheXMgb2YgbGF0aXR1ZGUgY29vcmRpbmF0ZXMgZm9yIHBvbHlnb25zCiAqIEBwYXJhbSBsbmcgQXJyYXkgb2YgYXJyYXlzIG9mIGxvbmdpdHVkZSBjb29yZGluYXRlcyBmb3IgcG9seWdvbnMKICovCm1ldGhvZHMuYWRkUG9seWdvbnMgPSBmdW5jdGlvbiAocG9seWdvbnMsIGxheWVySWQsIGdyb3VwLCBvcHRpb25zLCBwb3B1cCwgcG9wdXBPcHRpb25zLCBsYWJlbCwgbGFiZWxPcHRpb25zLCBoaWdobGlnaHRPcHRpb25zKSB7CiAgaWYgKHBvbHlnb25zLmxlbmd0aCA+IDApIHsKICAgIHZhciBkZiA9IG5ldyBfZGF0YWZyYW1lMi5kZWZhdWx0KCkuY29sKCJzaGFwZXMiLCBwb2x5Z29ucykuY29sKCJsYXllcklkIiwgbGF5ZXJJZCkuY29sKCJncm91cCIsIGdyb3VwKS5jb2woInBvcHVwIiwgcG9wdXApLmNvbCgicG9wdXBPcHRpb25zIiwgcG9wdXBPcHRpb25zKS5jb2woImxhYmVsIiwgbGFiZWwpLmNvbCgibGFiZWxPcHRpb25zIiwgbGFiZWxPcHRpb25zKS5jb2woImhpZ2hsaWdodE9wdGlvbnMiLCBoaWdobGlnaHRPcHRpb25zKS5jYmluZChvcHRpb25zKTsKCiAgICBhZGRMYXllcnModGhpcywgInNoYXBlIiwgZGYsIGZ1bmN0aW9uIChkZiwgaSkgewogICAgICAvLyBUaGlzIGNvZGUgdXNlZCB0byB1c2UgTC5tdWx0aVBvbHlnb24sIGJ1dCB0aGF0IGNhdXNlZAogICAgICAvLyBkb3VibGUtY2xpY2sgb24gYSBtdWx0aXBvbHlnb24gdG8gZmFpbCB0byB6b29tIGluIG9uIHRoZQogICAgICAvLyBtYXAuIFN1cnByaXNpbmdseSwgcHV0dGluZyBhbGwgdGhlIHJpbmdzIGluIGEgc2luZ2xlCiAgICAgIC8vIHBvbHlnb24gc2VlbXMgdG8gc3RpbGwgd29yazsgY29tcGxpY2F0ZWQgbXVsdGlwb2x5Z29ucwogICAgICAvLyBhcmUgc3RpbGwgcmVuZGVyZWQgY29ycmVjdGx5LgogICAgICB2YXIgc2hhcGVzID0gZGYuZ2V0KGksICJzaGFwZXMiKS5tYXAoZnVuY3Rpb24gKHBvbHlnb24pIHsKICAgICAgICByZXR1cm4gcG9seWdvbi5tYXAoX2h0bWx3aWRnZXRzMi5kZWZhdWx0LmRhdGFmcmFtZVRvRDMpOwogICAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgdmFsKSB7CiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodmFsKTsKICAgICAgfSwgW10pOwogICAgICByZXR1cm4gX2xlYWZsZXQyLmRlZmF1bHQucG9seWdvbihzaGFwZXMsIGRmLmdldChpKSk7CiAgICB9KTsKICB9Cn07CgptZXRob2RzLmFkZEdlb0pTT04gPSBmdW5jdGlvbiAoZGF0YSwgbGF5ZXJJZCwgZ3JvdXAsIHN0eWxlKSB7CiAgLy8gVGhpcyB0aW1lLCBzZWxmIGlzIGFjdHVhbGx5IG5lZWRlZCBiZWNhdXNlIHRoZSBjYWxsYmFja3MgYmVsb3cgbmVlZAogIC8vIHRvIGFjY2VzcyBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgc2Vuc2VzIG9mICJ0aGlzIgogIHZhciBzZWxmID0gdGhpczsKICBpZiAodHlwZW9mIGRhdGEgPT09ICJzdHJpbmciKSB7CiAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICB9CgogIHZhciBnbG9iYWxTdHlsZSA9IF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBzdHlsZSwgZGF0YS5zdHlsZSB8fCB7fSk7CgogIHZhciBnamxheWVyID0gX2xlYWZsZXQyLmRlZmF1bHQuZ2VvSnNvbihkYXRhLCB7CiAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZS5zdHlsZSB8fCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpIHsKICAgICAgICByZXR1cm4gX2pxdWVyeTIuZGVmYXVsdC5leHRlbmQoe30sIGdsb2JhbFN0eWxlLCBmZWF0dXJlLnN0eWxlLCBmZWF0dXJlLnByb3BlcnRpZXMuc3R5bGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBnbG9iYWxTdHlsZTsKICAgICAgfQogICAgfSwKICAgIG9uRWFjaEZlYXR1cmU6IGZ1bmN0aW9uIG9uRWFjaEZlYXR1cmUoZmVhdHVyZSwgbGF5ZXIpIHsKICAgICAgdmFyIGV4dHJhSW5mbyA9IHsKICAgICAgICBmZWF0dXJlSWQ6IGZlYXR1cmUuaWQsCiAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzCiAgICAgIH07CiAgICAgIHZhciBwb3B1cCA9IGZlYXR1cmUucHJvcGVydGllcy5wb3B1cDsKICAgICAgaWYgKHR5cGVvZiBwb3B1cCAhPT0gInVuZGVmaW5lZCIgJiYgcG9wdXAgIT09IG51bGwpIGxheWVyLmJpbmRQb3B1cChwb3B1cCk7CiAgICAgIGxheWVyLm9uKCJjbGljayIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fY2xpY2siLCBleHRyYUluZm8pLCB0aGlzKTsKICAgICAgbGF5ZXIub24oIm1vdXNlb3ZlciIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgImdlb2pzb25fbW91c2VvdXQiLCBleHRyYUluZm8pLCB0aGlzKTsKICAgIH0KICB9KTsKICB0aGlzLmxheWVyTWFuYWdlci5hZGRMYXllcihnamxheWVyLCAiZ2VvanNvbiIsIGxheWVySWQsIGdyb3VwKTsKfTsKCm1ldGhvZHMucmVtb3ZlR2VvSlNPTiA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5sYXllck1hbmFnZXIucmVtb3ZlTGF5ZXIoImdlb2pzb24iLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJHZW9KU09OID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJnZW9qc29uIik7Cn07CgptZXRob2RzLmFkZFRvcG9KU09OID0gZnVuY3Rpb24gKGRhdGEsIGxheWVySWQsIGdyb3VwLCBzdHlsZSkgewogIC8vIFRoaXMgdGltZSwgc2VsZiBpcyBhY3R1YWxseSBuZWVkZWQgYmVjYXVzZSB0aGUgY2FsbGJhY2tzIGJlbG93IG5lZWQKICAvLyB0byBhY2Nlc3MgYm90aCB0aGUgaW5uZXIgYW5kIG91dGVyIHNlbnNlcyBvZiAidGhpcyIKICB2YXIgc2VsZiA9IHRoaXM7CiAgaWYgKHR5cGVvZiBkYXRhID09PSAic3RyaW5nIikgewogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgfQoKICB2YXIgZ2xvYmFsU3R5bGUgPSBfanF1ZXJ5Mi5kZWZhdWx0LmV4dGVuZCh7fSwgc3R5bGUsIGRhdGEuc3R5bGUgfHwge30pOwoKICB2YXIgZ2psYXllciA9IF9sZWFmbGV0Mi5kZWZhdWx0Lmdlb0pzb24obnVsbCwgewogICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUuc3R5bGUgfHwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKSB7CiAgICAgICAgcmV0dXJuIF9qcXVlcnkyLmRlZmF1bHQuZXh0ZW5kKHt9LCBnbG9iYWxTdHlsZSwgZmVhdHVyZS5zdHlsZSwgZmVhdHVyZS5wcm9wZXJ0aWVzLnN0eWxlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZ2xvYmFsU3R5bGU7CiAgICAgIH0KICAgIH0sCiAgICBvbkVhY2hGZWF0dXJlOiBmdW5jdGlvbiBvbkVhY2hGZWF0dXJlKGZlYXR1cmUsIGxheWVyKSB7CiAgICAgIHZhciBleHRyYUluZm8gPSB7CiAgICAgICAgZmVhdHVyZUlkOiBmZWF0dXJlLmlkLAogICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcwogICAgICB9OwogICAgICB2YXIgcG9wdXAgPSBmZWF0dXJlLnByb3BlcnRpZXMucG9wdXA7CiAgICAgIGlmICh0eXBlb2YgcG9wdXAgIT09ICJ1bmRlZmluZWQiICYmIHBvcHVwICE9PSBudWxsKSBsYXllci5iaW5kUG9wdXAocG9wdXApOwogICAgICBsYXllci5vbigiY2xpY2siLCBtb3VzZUhhbmRsZXIoc2VsZi5pZCwgbGF5ZXJJZCwgZ3JvdXAsICJ0b3BvanNvbl9jbGljayIsIGV4dHJhSW5mbyksIHRoaXMpOwogICAgICBsYXllci5vbigibW91c2VvdmVyIiwgbW91c2VIYW5kbGVyKHNlbGYuaWQsIGxheWVySWQsIGdyb3VwLCAidG9wb2pzb25fbW91c2VvdmVyIiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICAgIGxheWVyLm9uKCJtb3VzZW91dCIsIG1vdXNlSGFuZGxlcihzZWxmLmlkLCBsYXllcklkLCBncm91cCwgInRvcG9qc29uX21vdXNlb3V0IiwgZXh0cmFJbmZvKSwgdGhpcyk7CiAgICB9CiAgfSk7CiAgZ2xvYmFsLm9tbml2b3JlLnRvcG9qc29uLnBhcnNlKGRhdGEsIG51bGwsIGdqbGF5ZXIpOwogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGdqbGF5ZXIsICJ0b3BvanNvbiIsIGxheWVySWQsIGdyb3VwKTsKfTsKCm1ldGhvZHMucmVtb3ZlVG9wb0pTT04gPSBmdW5jdGlvbiAobGF5ZXJJZCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLnJlbW92ZUxheWVyKCJ0b3BvanNvbiIsIGxheWVySWQpOwp9OwoKbWV0aG9kcy5jbGVhclRvcG9KU09OID0gZnVuY3Rpb24gKCkgewogIHRoaXMubGF5ZXJNYW5hZ2VyLmNsZWFyTGF5ZXJzKCJ0b3BvanNvbiIpOwp9OwoKbWV0aG9kcy5hZGRDb250cm9sID0gZnVuY3Rpb24gKGh0bWwsIHBvc2l0aW9uLCBsYXllcklkLCBjbGFzc2VzKSB7CiAgZnVuY3Rpb24gb25BZGQobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyLmRlZmF1bHQuRG9tVXRpbC5jcmVhdGUoImRpdiIsIGNsYXNzZXMpOwogICAgaWYgKHR5cGVvZiBsYXllcklkICE9PSAidW5kZWZpbmVkIiAmJiBsYXllcklkICE9PSBudWxsKSB7CiAgICAgIGRpdi5zZXRBdHRyaWJ1dGUoImlkIiwgbGF5ZXJJZCk7CiAgICB9CiAgICB0aGlzLl9kaXYgPSBkaXY7CgogICAgLy8gSXQncyBwb3NzaWJsZSBmb3Igd2luZG93LlNoaW55IHRvIGJlIHRydWUgYnV0IFNoaW55LmluaXRpYWxpemVJbnB1dHMgdG8KICAgIC8vIG5vdCBiZSwgd2hlbiBhIHN0YXRpYyBsZWFmbGV0IHdpZGdldCBpcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBzaGlueQogICAgLy8gVUkgZGlyZWN0bHkgKG5vdCB0aHJvdWdoIGxlYWZsZXRPdXRwdXQgb3IgdWlPdXRwdXQpLiBJbiB0aGlzIGNhc2Ugd2UKICAgIC8vIGRvbid0IGRvIHRoZSBub3JtYWwgU2hpbnkgc3R1ZmYgYXMgdGhhdCB3aWxsIGFsbCBoYXBwZW4gd2hlbiBTaGlueQogICAgLy8gaXRzZWxmIGxvYWRzIGFuZCBiaW5kcyB0aGUgZW50aXJlIGRvYy4KCiAgICBpZiAod2luZG93LlNoaW55ICYmIF9zaGlueTIuZGVmYXVsdC5pbml0aWFsaXplSW5wdXRzKSB7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5yZW5kZXJIdG1sKGh0bWwsIHRoaXMuX2Rpdik7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5pbml0aWFsaXplSW5wdXRzKHRoaXMuX2Rpdik7CiAgICAgIF9zaGlueTIuZGVmYXVsdC5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLl9kaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgIH0KCiAgICByZXR1cm4gdGhpcy5fZGl2OwogIH0KICBmdW5jdGlvbiBvblJlbW92ZShtYXApIHsKICAgIGlmICh3aW5kb3cuU2hpbnkgJiYgX3NoaW55Mi5kZWZhdWx0LnVuYmluZEFsbCkgewogICAgICBfc2hpbnkyLmRlZmF1bHQudW5iaW5kQWxsKHRoaXMuX2Rpdik7CiAgICB9CiAgfQogIHZhciBDb250cm9sID0gX2xlYWZsZXQyLmRlZmF1bHQuQ29udHJvbC5leHRlbmQoewogICAgb3B0aW9uczogeyBwb3NpdGlvbjogcG9zaXRpb24gfSwKICAgIG9uQWRkOiBvbkFkZCwKICAgIG9uUmVtb3ZlOiBvblJlbW92ZQogIH0pOwogIHRoaXMuY29udHJvbHMuYWRkKG5ldyBDb250cm9sKCksIGxheWVySWQsIGh0bWwpOwp9OwoKbWV0aG9kcy5hZGRDdXN0b21Db250cm9sID0gZnVuY3Rpb24gKGNvbnRyb2wsIGxheWVySWQpIHsKICB0aGlzLmNvbnRyb2xzLmFkZChjb250cm9sLCBsYXllcklkKTsKfTsKCm1ldGhvZHMucmVtb3ZlQ29udHJvbCA9IGZ1bmN0aW9uIChsYXllcklkKSB7CiAgdGhpcy5jb250cm9scy5yZW1vdmUobGF5ZXJJZCk7Cn07CgptZXRob2RzLmNsZWFyQ29udHJvbHMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5jb250cm9scy5jbGVhcigpOwp9OwoKbWV0aG9kcy5hZGRMZWdlbmQgPSBmdW5jdGlvbiAob3B0aW9ucykgewogIHZhciBsZWdlbmQgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sKHsgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb24gfSk7CiAgdmFyIGdyYWRTcGFuID0gdm9pZCAwOwoKICBsZWdlbmQub25BZGQgPSBmdW5jdGlvbiAobWFwKSB7CiAgICB2YXIgZGl2ID0gX2xlYWZsZXQyLmRlZmF1bHQuRG9tVXRpbC5jcmVhdGUoImRpdiIsIG9wdGlvbnMuY2xhc3NOYW1lKSwKICAgICAgICBjb2xvcnMgPSBvcHRpb25zLmNvbG9ycywKICAgICAgICBsYWJlbHMgPSBvcHRpb25zLmxhYmVscywKICAgICAgICBsZWdlbmRIVE1MID0gIiI7CiAgICBpZiAob3B0aW9ucy50eXBlID09PSAibnVtZXJpYyIpIHsKICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyAjIEZvcm1hdHRpbmcgY29uc3RhbnRzLgogICAgICAgIHZhciBzaW5nbGVCaW5IZWlnaHQgPSAyMDsgLy8gVGhlIGRpc3RhbmNlIGJldHdlZW4gdGljayBtYXJrcywgaW4gcHgKICAgICAgICB2YXIgdk1hcmdpbiA9IDg7IC8vIElmIDFzdCB0aWNrIG1hcmsgc3RhcnRzIGF0IHRvcCBvZiBncmFkaWVudCwgaG93CiAgICAgICAgLy8gbWFueSBleHRyYSBweCBhcmUgbmVlZGVkIGZvciB0aGUgdG9wIGhhbGYgb2YgdGhlCiAgICAgICAgLy8gMXN0IGxhYmVsPyAoZGl0dG8gZm9yIGxhc3QgdGljayBtYXJrL2xhYmVsKQogICAgICAgIHZhciB0aWNrV2lkdGggPSA0OyAvLyBIb3cgd2lkZSBzaG91bGQgdGljayBtYXJrcyBiZSwgaW4gcHg/CiAgICAgICAgdmFyIGxhYmVsUGFkZGluZyA9IDY7IC8vIEhvdyBtdWNoIGRpc3RhbmNlIHRvIHJlc2VydmUgZm9yIHRpY2sgbWFyaz8KICAgICAgICAvLyAoTXVzdCBiZSA+PSB0aWNrV2lkdGgpCgogICAgICAgIC8vICMgRGVyaXZlZCBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCgogICAgICAgIC8vIFdoYXQncyB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGJpbiwgaW4gcGVyY2VudGFnZSAob2YgZ3JhZGllbnQgaGVpZ2h0KT8KICAgICAgICAvLyBJdCBtaWdodCBub3QganVzdCBiZSAxLyhuLTEpLCBpZiB0aGUgZ3JhZGllbnQgZXh0ZW5kcyBwYXN0IHRoZSB0aWNrCiAgICAgICAgLy8gbWFya3MgKHdoaWNoIGNhbiBiZSB0aGUgY2FzZSBmb3IgcHJldHR5IGN1dCBwb2ludHMpLgogICAgICAgIHZhciBzaW5nbGVCaW5QY3QgPSAob3B0aW9ucy5leHRyYS5wX24gLSBvcHRpb25zLmV4dHJhLnBfMSkgLyAobGFiZWxzLmxlbmd0aCAtIDEpOwogICAgICAgIC8vIEVhY2ggYmluIGlzIGBzaW5nbGVCaW5IZWlnaHRgIGhpZ2guIEhvdyB0YWxsIGlzIHRoZSBncmFkaWVudD8KICAgICAgICB2YXIgdG90YWxIZWlnaHQgPSAxIC8gc2luZ2xlQmluUGN0ICogc2luZ2xlQmluSGVpZ2h0ICsgMTsKICAgICAgICAvLyBIb3cgZmFyIHNob3VsZCB0aGUgZmlyc3QgdGljayBiZSBzaGlmdGVkIGRvd24sIHJlbGF0aXZlIHRvIHRoZSB0b3AKICAgICAgICAvLyBvZiB0aGUgZ3JhZGllbnQ/CiAgICAgICAgdmFyIHRpY2tPZmZzZXQgPSBzaW5nbGVCaW5IZWlnaHQgLyBzaW5nbGVCaW5QY3QgKiBvcHRpb25zLmV4dHJhLnBfMTsKCiAgICAgICAgZ3JhZFNwYW4gPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxzcGFuLz4iKS5jc3MoewogICAgICAgICAgImJhY2tncm91bmQiOiAibGluZWFyLWdyYWRpZW50KCIgKyBjb2xvcnMgKyAiKSIsCiAgICAgICAgICAib3BhY2l0eSI6IG9wdGlvbnMub3BhY2l0eSwKICAgICAgICAgICJoZWlnaHQiOiB0b3RhbEhlaWdodCArICJweCIsCiAgICAgICAgICAid2lkdGgiOiAiMThweCIsCiAgICAgICAgICAiZGlzcGxheSI6ICJibG9jayIsCiAgICAgICAgICAibWFyZ2luLXRvcCI6IHZNYXJnaW4gKyAicHgiCiAgICAgICAgfSk7CiAgICAgICAgdmFyIGxlZnREaXYgPSAoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxkaXYvPiIpLmNzcygiZmxvYXQiLCAibGVmdCIpLAogICAgICAgICAgICByaWdodERpdiA9ICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KSgiPGRpdi8+IikuY3NzKCJmbG9hdCIsICJsZWZ0Iik7CiAgICAgICAgbGVmdERpdi5hcHBlbmQoZ3JhZFNwYW4pOwogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShkaXYpLmFwcGVuZChsZWZ0RGl2KS5hcHBlbmQocmlnaHREaXYpLmFwcGVuZCgoMCwgX2pxdWVyeTIuZGVmYXVsdCkoIjxiciBjbGVhcj1cImJvdGhcIi8+IikpOwoKICAgICAgICAvLyBIYXZlIHRvIGF0dGFjaCB0aGUgZGl2IHRvIHRoZSBib2R5IGF0IHRoaXMgZWFybHkgcG9pbnQsIHNvIHRoYXQgdGhlCiAgICAgICAgLy8gc3ZnIHRleHQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgYWN0dWFsbHkgd29ya3MsIGJlbG93LgogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTsKCiAgICAgICAgdmFyIG5zID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsKICAgICAgICB2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAic3ZnIik7CiAgICAgICAgcmlnaHREaXYuYXBwZW5kKHN2Zyk7CiAgICAgICAgdmFyIGcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobnMsICJnIik7CiAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGcpLmF0dHIoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMCwgIiArIHZNYXJnaW4gKyAiKSIpOwogICAgICAgIHN2Zy5hcHBlbmRDaGlsZChnKTsKCiAgICAgICAgLy8gbWF4IGxhYmVsIHdpZHRoIG5lZWRlZCB0byBzZXQgd2lkdGggb2Ygc3ZnLCBhbmQgcmlnaHQtanVzdGlmeSB0ZXh0CiAgICAgICAgdmFyIG1heExibFdpZHRoID0gMDsKCiAgICAgICAgLy8gQ3JlYXRlIHRpY2sgbWFya3MgYW5kIGxhYmVscwogICAgICAgIF9qcXVlcnkyLmRlZmF1bHQuZWFjaChsYWJlbHMsIGZ1bmN0aW9uIChpLCBsYWJlbCkgewogICAgICAgICAgdmFyIHkgPSB0aWNrT2Zmc2V0ICsgaSAqIHNpbmdsZUJpbkhlaWdodCArIDAuNTsKCiAgICAgICAgICB2YXIgdGhpc0xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAidGV4dCIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNMYWJlbCkudGV4dChsYWJlbHNbaV0pLmF0dHIoInkiLCB5KS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZykuYXR0cigiZHkiLCAiMC41ZXgiKTsKICAgICAgICAgIGcuYXBwZW5kQ2hpbGQodGhpc0xhYmVsKTsKICAgICAgICAgIG1heExibFdpZHRoID0gTWF0aC5tYXgobWF4TGJsV2lkdGgsIHRoaXNMYWJlbC5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSk7CgogICAgICAgICAgdmFyIHRoaXNUaWNrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zLCAibGluZSIpOwogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKHRoaXNUaWNrKS5hdHRyKCJ4MSIsIDApLmF0dHIoIngyIiwgdGlja1dpZHRoKS5hdHRyKCJ5MSIsIHkpLmF0dHIoInkyIiwgeSkuYXR0cigic3Ryb2tlLXdpZHRoIiwgMSk7CiAgICAgICAgICBnLmFwcGVuZENoaWxkKHRoaXNUaWNrKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gTm93IHRoYXQgd2Uga25vdyB0aGUgbWF4IGxhYmVsIHdpZHRoLCB3ZSBjYW4gcmlnaHQtanVzdGlmeQogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmZpbmQoInRleHQiKS5hdHRyKCJkeCIsIGxhYmVsUGFkZGluZyArIG1heExibFdpZHRoKS5hdHRyKCJ0ZXh0LWFuY2hvciIsICJlbmQiKTsKICAgICAgICAvLyBGaW5hbCBzaXplIGZvciA8c3ZnPgogICAgICAgICgwLCBfanF1ZXJ5Mi5kZWZhdWx0KShzdmcpLmNzcyh7CiAgICAgICAgICB3aWR0aDogbWF4TGJsV2lkdGggKyBsYWJlbFBhZGRpbmcgKyAicHgiLAogICAgICAgICAgaGVpZ2h0OiB0b3RhbEhlaWdodCArIHZNYXJnaW4gKiAyICsgInB4IgogICAgICAgIH0pOwoKICAgICAgICBpZiAob3B0aW9ucy5uYV9jb2xvcikgewogICAgICAgICAgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRpdikuYXBwZW5kKCI8ZGl2PjxpIHN0eWxlPVwiYmFja2dyb3VuZDoiICsgb3B0aW9ucy5uYV9jb2xvciArICJcIj48L2k+ICIgKyBvcHRpb25zLm5hX2xhYmVsICsgIjwvZGl2PiIpOwogICAgICAgIH0KICAgICAgfSkoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChvcHRpb25zLm5hX2NvbG9yKSB7CiAgICAgICAgY29sb3JzLnB1c2gob3B0aW9ucy5uYV9jb2xvcik7CiAgICAgICAgbGFiZWxzLnB1c2gob3B0aW9ucy5uYV9sYWJlbCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsZWdlbmRIVE1MICs9ICI8aSBzdHlsZT1cImJhY2tncm91bmQ6IiArIGNvbG9yc1tpXSArICI7b3BhY2l0eToiICsgb3B0aW9ucy5vcGFjaXR5ICsgIlwiPjwvaT4gIiArIGxhYmVsc1tpXSArICI8YnIvPiI7CiAgICAgIH0KICAgICAgZGl2LmlubmVySFRNTCA9IGxlZ2VuZEhUTUw7CiAgICB9CiAgICBpZiAob3B0aW9ucy50aXRsZSkgKDAsIF9qcXVlcnkyLmRlZmF1bHQpKGRpdikucHJlcGVuZCgiPGRpdiBzdHlsZT1cIm1hcmdpbi1ib3R0b206M3B4XCI+PHN0cm9uZz4iICsgb3B0aW9ucy50aXRsZSArICI8L3N0cm9uZz48L2Rpdj4iKTsKICAgIHJldHVybiBkaXY7CiAgfTsKCiAgdGhpcy5jb250cm9scy5hZGQobGVnZW5kLCBvcHRpb25zLmxheWVySWQpOwp9OwoKbWV0aG9kcy5hZGRMYXllcnNDb250cm9sID0gZnVuY3Rpb24gKGJhc2VHcm91cHMsIG92ZXJsYXlHcm91cHMsIG9wdGlvbnMpIHsKICB2YXIgX3RoaXM1ID0gdGhpczsKCiAgLy8gT25seSBhbGxvdyBvbmUgbGF5ZXJzIGNvbnRyb2wgYXQgYSB0aW1lCiAgbWV0aG9kcy5yZW1vdmVMYXllcnNDb250cm9sLmNhbGwodGhpcyk7CgogIHZhciBmaXJzdExheWVyID0gdHJ1ZTsKICB2YXIgYmFzZSA9IHt9OwogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoYmFzZUdyb3VwcyksIGZ1bmN0aW9uIChpLCBnKSB7CiAgICB2YXIgbGF5ZXIgPSBfdGhpczUubGF5ZXJNYW5hZ2VyLmdldExheWVyR3JvdXAoZywgdHJ1ZSk7CiAgICBpZiAobGF5ZXIpIHsKICAgICAgYmFzZVtnXSA9IGxheWVyOwoKICAgICAgLy8gQ2hlY2sgaWYgPjEgYmFzZSBsYXllcnMgYXJlIHZpc2libGU7IGlmIHNvLCBoaWRlIGFsbCBidXQgdGhlIGZpcnN0IG9uZQogICAgICBpZiAoX3RoaXM1Lmhhc0xheWVyKGxheWVyKSkgewogICAgICAgIGlmIChmaXJzdExheWVyKSB7CiAgICAgICAgICBmaXJzdExheWVyID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNS5yZW1vdmVMYXllcihsYXllcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSk7CiAgdmFyIG92ZXJsYXkgPSB7fTsKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKG92ZXJsYXlHcm91cHMpLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM1LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgaWYgKGxheWVyKSB7CiAgICAgIG92ZXJsYXlbZ10gPSBsYXllcjsKICAgIH0KICB9KTsKCiAgdmFyIGxheWVyc0NvbnRyb2wgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sLmxheWVycyhiYXNlLCBvdmVybGF5LCBvcHRpb25zKS5hZGRUbyh0aGlzKTsKICB0aGlzLmN1cnJlbnRMYXllcnNDb250cm9sID0gbGF5ZXJzQ29udHJvbDsKfTsKCm1ldGhvZHMucmVtb3ZlTGF5ZXJzQ29udHJvbCA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCkgewogICAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbC5yZW1vdmVGcm9tKHRoaXMpOwogICAgdGhpcy5jdXJyZW50TGF5ZXJzQ29udHJvbCA9IG51bGw7CiAgfQp9OwoKbWV0aG9kcy5hZGRTY2FsZUJhciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CgogIC8vIE9ubHkgYWxsb3cgb25lIHNjYWxlIGJhciBhdCBhIHRpbWUKICBtZXRob2RzLnJlbW92ZVNjYWxlQmFyLmNhbGwodGhpcyk7CgogIHZhciBzY2FsZUJhciA9IF9sZWFmbGV0Mi5kZWZhdWx0LmNvbnRyb2wuc2NhbGUob3B0aW9ucykuYWRkVG8odGhpcyk7CiAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBzY2FsZUJhcjsKfTsKCm1ldGhvZHMucmVtb3ZlU2NhbGVCYXIgPSBmdW5jdGlvbiAoKSB7CiAgaWYgKHRoaXMuY3VycmVudFNjYWxlQmFyKSB7CiAgICB0aGlzLmN1cnJlbnRTY2FsZUJhci5yZW1vdmVGcm9tKHRoaXMpOwogICAgdGhpcy5jdXJyZW50U2NhbGVCYXIgPSBudWxsOwogIH0KfTsKCm1ldGhvZHMuaGlkZUdyb3VwID0gZnVuY3Rpb24gKGdyb3VwKSB7CiAgdmFyIF90aGlzNiA9IHRoaXM7CgogIF9qcXVlcnkyLmRlZmF1bHQuZWFjaCgoMCwgX3V0aWwuYXNBcnJheSkoZ3JvdXApLCBmdW5jdGlvbiAoaSwgZykgewogICAgdmFyIGxheWVyID0gX3RoaXM2LmxheWVyTWFuYWdlci5nZXRMYXllckdyb3VwKGcsIHRydWUpOwogICAgaWYgKGxheWVyKSB7CiAgICAgIF90aGlzNi5yZW1vdmVMYXllcihsYXllcik7CiAgICB9CiAgfSk7Cn07CgptZXRob2RzLnNob3dHcm91cCA9IGZ1bmN0aW9uIChncm91cCkgewogIHZhciBfdGhpczcgPSB0aGlzOwoKICBfanF1ZXJ5Mi5kZWZhdWx0LmVhY2goKDAsIF91dGlsLmFzQXJyYXkpKGdyb3VwKSwgZnVuY3Rpb24gKGksIGcpIHsKICAgIHZhciBsYXllciA9IF90aGlzNy5sYXllck1hbmFnZXIuZ2V0TGF5ZXJHcm91cChnLCB0cnVlKTsKICAgIGlmIChsYXllcikgewogICAgICBfdGhpczcuYWRkTGF5ZXIobGF5ZXIpOwogICAgfQogIH0pOwp9OwoKbWV0aG9kcy5hZGRSYXN0ZXJJbWFnZSA9IGZ1bmN0aW9uICh1cmksIGJvdW5kcywgb3BhY2l0eSwgYXR0cmlidXRpb24sIGxheWVySWQsIGdyb3VwKSB7CiAgLy8gdXJpIGlzIGEgZGF0YSBVUkkgY29udGFpbmluZyBhbiBpbWFnZS4gV2Ugd2FudCB0byBwYWludCB0aGlzIGltYWdlIGFzIGEKICAvLyBsYXllciBhdCAodG9wLWxlZnQpIGJvdW5kc1swXSB0byAoYm90dG9tLXJpZ2h0KSBib3VuZHNbMV0uCgogIC8vIFdlIGNhbid0IHNpbXBseSB1c2UgSW1hZ2VPdmVybGF5LCBhcyBpdCB1c2VzIGJpbGluZWFyIHNjYWxpbmcgd2hpY2ggbG9va3MKICAvLyBhd2Z1bCBhcyB5b3Ugem9vbSBpbiAoYW5kIHNvbWV0aW1lcyBzaGlmdHMgcG9zaXRpb25zIG9yIGRpc2FwcGVhcnMpLgogIC8vIEluc3RlYWQsIHdlJ2xsIHVzZSBhIFRpbGVMYXllci5DYW52YXMgdG8gZHJhdyBwaWVjZXMgb2YgdGhlIGltYWdlLgoKICAvLyBGaXJzdCwgc29tZSBoZWxwZXIgZnVuY3Rpb25zLgoKICAvLyBkZWdyZWUydGlsZSBjb252ZXJ0cyBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhbmQgem9vbSB0byB4IGFuZCB5IHRpbGUKICAvLyBudW1iZXJzLiBUaGUgdGlsZSBudW1iZXJzIHJldHVybmVkIGNhbiBiZSBub24taW50ZWdyYWwsIGFzIHRoZXJlJ3Mgbm8KICAvLyByZWFzb24gdG8gZXhwZWN0IHRoYXQgdGhlIGxhdC9sbmcgaW5wdXRzIGFyZSBleGFjdGx5IG9uIHRoZSBib3JkZXIgb2YgdHdvCiAgLy8gdGlsZXMuCiAgLy8KICAvLyBXZSdsbCB1c2UgdGhpcyB0byBjb252ZXJ0IHRoZSBib3VuZHMgd2UgZ290IGZyb20gdGhlIHNlcnZlciwgaW50byBjb29yZHMKICAvLyBpbiB0aWxlLXNwYWNlIGF0IGEgZ2l2ZW4gem9vbSBsZXZlbC4gTm90ZSB0aGF0IG9uY2Ugd2UgZG8gdGhlIGNvbnZlcnNpb24sCiAgLy8gd2UgZG9uJ3QgdG8gZG8gYW55IG1vcmUgdHJpZ29ub21ldHJ5IHRvIGNvbnZlcnQgYmV0d2VlbiBwaXhlbCBjb29yZGluYXRlcwogIC8vIGFuZCB0aWxlIGNvb3JkaW5hdGVzOyB0aGUgc291cmNlIGltYWdlIHBpeGVsIGNvb3JkcywgZGVzdGluYXRpb24gY2FudmFzCiAgLy8gcGl4ZWwgY29vcmRzLCBhbmQgdGlsZSBjb29yZHMgYWxsIGNhbiBiZSBzY2FsZWQgbGluZWFybHkuCiAgZnVuY3Rpb24gZGVncmVlMnRpbGUobGF0LCBsbmcsIHpvb20pIHsKICAgIC8vIFNlZSBodHRwOi8vd2lraS5vcGVuc3RyZWV0bWFwLm9yZy93aWtpL1NsaXBweV9tYXBfdGlsZW5hbWVzCiAgICB2YXIgbGF0UmFkID0gbGF0ICogTWF0aC5QSSAvIDE4MDsKICAgIHZhciBuID0gTWF0aC5wb3coMiwgem9vbSk7CiAgICB2YXIgeCA9IChsbmcgKyAxODApIC8gMzYwICogbjsKICAgIHZhciB5ID0gKDEgLSBNYXRoLmxvZyhNYXRoLnRhbihsYXRSYWQpICsgMSAvIE1hdGguY29zKGxhdFJhZCkpIC8gTWF0aC5QSSkgLyAyICogbjsKICAgIHJldHVybiB7IHg6IHgsIHk6IHkgfTsKICB9CgogIC8vIEdpdmVuIGEgcmFuZ2UgW2Zyb20sdG8pIGFuZCBlaXRoZXIgb25lIG9yIHR3byBudW1iZXJzLCByZXR1cm5zIHRydWUgaWYKICAvLyB0aGVyZSBpcyBhbnkgb3ZlcmxhcCBiZXR3ZWVuIFt4LHgxKSBhbmQgdGhlIHJhbmdlLS1vciBpZiB4MSBpcyBvbWl0dGVkLAogIC8vIHRoZW4gcmV0dXJucyB0cnVlIGlmIHggaXMgd2l0aGluIFtmcm9tLHRvKS4KICBmdW5jdGlvbiBvdmVybGFwKGZyb20sIHRvLCB4LCAvKiBvcHRpb25hbCAqL3gxKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAzKSB4MSA9IHg7CiAgICByZXR1cm4geCA8IHRvICYmIHgxID49IGZyb207CiAgfQoKICBmdW5jdGlvbiBnZXRDYW52YXNTbW9vdGhpbmdQcm9wZXJ0eShjdHgpIHsKICAgIHZhciBjYW5kaWRhdGVzID0gWyJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCAibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwgIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsICJtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCJdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYW5kaWRhdGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0eXBlb2YgY3R4W2NhbmRpZGF0ZXNbaV1dICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBjYW5kaWRhdGVzW2ldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIE91ciBnZW5lcmFsIHN0cmF0ZWd5IGlzIHRvOgogIC8vIDEuIExvYWQgdGhlIGRhdGEgVVJJIGluIGFuIEltYWdlKCkgb2JqZWN0LCBzbyB3ZSBjYW4gZ2V0IGl0cyBwaXhlbAogIC8vICAgIGRpbWVuc2lvbnMgYW5kIHRoZSB1bmRlcmx5aW5nIGltYWdlIGRhdGEuIChXZSBjb3VsZCBoYXZlIGRvbmUgdGhpcwogIC8vICAgIGJ5IG5vdCBlbmNvZGluZyBhcyBQTkcgYXQgYWxsIGJ1dCBqdXN0IHNlbmQgYW4gYXJyYXkgb2YgUkdCQSB2YWx1ZXMKICAvLyAgICBmcm9tIHRoZSBzZXJ2ZXIsIGJ1dCB0aGF0IHdvdWxkIGluZmxhdGUgdGhlIEpTT04gdG9vIG11Y2guKQogIC8vIDIuIENyZWF0ZSBhIGhpZGRlbiBjYW52YXMgdGhhdCB3ZSB1c2UganVzdCB0byBleHRyYWN0IHRoZSBpbWFnZSBkYXRhCiAgLy8gICAgZnJvbSB0aGUgSW1hZ2UgKHVzaW5nIENvbnRleHQyRC5nZXRJbWFnZURhdGEoKSkuCiAgLy8gMy4gQ3JlYXRlIGEgVGlsZUxheWVyLkNhbnZhcyBhbmQgYWRkIGl0IHRvIHRoZSBtYXAuCgogIC8vIFdlIHdhbnQgdG8gc3luY2hyb25vdXNseSBjcmVhdGUgYW5kIGF0dGFjaCB0aGUgVGlsZUxheWVyLkNhbnZhcyAoc28gYW4KICAvLyBpbW1lZGlhdGUgY2FsbCB0byBjbGVhclJhc3RlcnMoKSB3aWxsIGJlIHJlc3BlY3RlZCwgZm9yIGV4YW1wbGUpLCBidXQKICAvLyBJbWFnZSBsb2FkcyBpdHMgZGF0YSBhc3luY2hyb25vdXNseS4gRm9ydHVuYXRlbHkgd2UgY2FuIHJlc29sdmUgdGhpcwogIC8vIGJ5IHB1dHRpbmcgVGlsZUxheWVyLkNhbnZhcyBpbnRvIGFzeW5jIG1vZGUsIHdoaWNoIHdpbGwgbGV0IHVzIGNyZWF0ZQogIC8vIGFuZCBhdHRhY2ggdGhlIGxheWVyIGJ1dCBoYXZlIGl0IHdhaXQgdW50aWwgdGhlIGltYWdlIGlzIGxvYWRlZCBiZWZvcmUKICAvLyBpdCBhY3R1YWxseSBkcmF3cyBhbnl0aGluZy4KCiAgLy8gVGhlc2UgYXJlIHRoZSB2YXJpYWJsZXMgdGhhdCB3ZSB3aWxsIHBvcHVsYXRlIG9uY2UgdGhlIGltYWdlIGlzIGxvYWRlZC4KICB2YXIgaW1nRGF0YSA9IG51bGw7IC8vIDFkIHJvdy1tYWpvciBhcnJheSwgZm91ciBbMC0yNTVdIGludGVnZXJzIHBlciBwaXhlbAogIHZhciBpbWdEYXRhTWlwTWFwcGVyID0gbnVsbDsKICB2YXIgdyA9IG51bGw7IC8vIGltYWdlIHdpZHRoIGluIHBpeGVscwogIHZhciBoID0gbnVsbDsgLy8gaW1hZ2UgaGVpZ2h0IGluIHBpeGVscwoKICAvLyBXZSdsbCB1c2UgdGhpcyBhcnJheSB0byBzdG9yZSBjYWxsYmFja3MgdGhhdCBuZWVkIHRvIGJlIGludm9rZWQgb25jZQogIC8vIGltZ0RhdGEsIHcsIGFuZCBoIGhhdmUgYmVlbiByZXNvbHZlZC4KICB2YXIgaW1nRGF0YUNhbGxiYWNrcyA9IFtdOwoKICAvLyBDb25zdW1lcnMgb2YgaW1nRGF0YSwgdywgYW5kIGggY2FuIGNhbGwgdGhpcyB0byBiZSBub3RpZmllZCB3aGVuIGRhdGEKICAvLyBpcyBhdmFpbGFibGUuIFVubGlrZSBtb3N0IGFzeW5jL3Byb21pc2UtYmFzZWQgQVBJcywgdGhlIGNhbGxiYWNrIHdpbGwKICAvLyBiZSBpbnZva2VkIGltbWVkaWF0ZWx5L3N5bmNocm9ub3VzbHkgaWYgdGhlIGRhdGEgaXMgYWxyZWFkeSBhdmFpbGFibGUuCiAgZnVuY3Rpb24gZ2V0SW1hZ2VEYXRhKGNhbGxiYWNrKSB7CiAgICBpZiAoaW1nRGF0YSAhPSBudWxsKSB7CiAgICAgIGNhbGxiYWNrKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgfSBlbHNlIHsKICAgICAgaW1nRGF0YUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKICAgIH0KICB9CgogIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgLy8gU2F2ZSBzaXplCiAgICB3ID0gaW1nLndpZHRoOwogICAgaCA9IGltZy5oZWlnaHQ7CgogICAgLy8gQ3JlYXRlIGEgZHVtbXkgY2FudmFzIHRvIGV4dHJhY3QgdGhlIGltYWdlIGRhdGEKICAgIHZhciBpbWdEYXRhQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gdzsKICAgIGltZ0RhdGFDYW52YXMuaGVpZ2h0ID0gaDsKICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CgogICAgdmFyIGltZ0RhdGFDdHggPSBpbWdEYXRhQ2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDApOwoKICAgIC8vIFNhdmUgdGhlIGltYWdlIGRhdGEuCiAgICBpbWdEYXRhID0gaW1nRGF0YUN0eC5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCkuZGF0YTsKICAgIGltZ0RhdGFNaXBNYXBwZXIgPSBuZXcgX21pcG1hcHBlcjIuZGVmYXVsdChpbWcpOwoKICAgIC8vIERvbmUgd2l0aCB0aGUgY2FudmFzLCByZW1vdmUgaXQgZnJvbSB0aGUgcGFnZSBzbyBpdCBjYW4gYmUgZ2MnZC4KICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW1nRGF0YUNhbnZhcyk7CgogICAgLy8gQWxlcnQgYW55IGdldEltYWdlRGF0YSBjYWxsZXJzIHdobyBhcmUgd2FpdGluZy4KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW1nRGF0YUNhbGxiYWNrcy5sZW5ndGg7IGkrKykgewogICAgICBpbWdEYXRhQ2FsbGJhY2tzW2ldKGltZ0RhdGEsIHcsIGgsIGltZ0RhdGFNaXBNYXBwZXIpOwogICAgfQogICAgaW1nRGF0YUNhbGxiYWNrcyA9IFtdOwogIH07CiAgaW1nLnNyYyA9IHVyaTsKCiAgdmFyIGNhbnZhc1RpbGVzID0gX2xlYWZsZXQyLmRlZmF1bHQudGlsZUxheWVyLmNhbnZhcyh7CiAgICBvcGFjaXR5OiBvcGFjaXR5LAogICAgYXR0cmlidXRpb246IGF0dHJpYnV0aW9uLAogICAgZGV0ZWN0UmV0aW5hOiB0cnVlLAogICAgYXN5bmM6IHRydWUKICB9KTsKCiAgY2FudmFzVGlsZXMuZHJhd1RpbGUgPSBmdW5jdGlvbiAoY2FudmFzLCB0aWxlUG9pbnQsIHpvb20pIHsKICAgIGdldEltYWdlRGF0YShmdW5jdGlvbiAoaW1nRGF0YSwgdywgaCwgbWlwbWFwcGVyKSB7CiAgICAgIHRyeSB7CiAgICAgICAgdmFyIF9yZXQ3ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gVGhlIENvbnRleHQyRCB3ZSdsbCBiZWluZyBkcmF3aW5nIG9udG8uIEl0J3MgYWx3YXlzIDI1NngyNTYuCiAgICAgICAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CgogICAgICAgICAgLy8gQ29udmVydCBvdXIgaW1hZ2UgZGF0YSdzIHRvcC1sZWZ0IGFuZCBib3R0b20tcmlnaHQgbG9jYXRpb25zIGludG8KICAgICAgICAgIC8vIHgveSB0aWxlIGNvb3JkaW5hdGVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGRvaW5nIGEgc3BoZXJpY2FsIG1lcmNhdG9yCiAgICAgICAgICAvLyBwcm9qZWN0aW9uLCB0aGVuIG11bHRpcGx5aW5nIGJ5IDJeem9vbS4KICAgICAgICAgIHZhciB0b3BMZWZ0ID0gZGVncmVlMnRpbGUoYm91bmRzWzBdWzBdLCBib3VuZHNbMF1bMV0sIHpvb20pOwogICAgICAgICAgdmFyIGJvdHRvbVJpZ2h0ID0gZGVncmVlMnRpbGUoYm91bmRzWzFdWzBdLCBib3VuZHNbMV1bMV0sIHpvb20pOwogICAgICAgICAgLy8gVGhlIHNpemUgb2YgdGhlIGltYWdlIGluIHgveSB0aWxlIGNvb3JkaW5hdGVzLgogICAgICAgICAgdmFyIGV4dGVudCA9IHsgeDogYm90dG9tUmlnaHQueCAtIHRvcExlZnQueCwgeTogYm90dG9tUmlnaHQueSAtIHRvcExlZnQueSB9OwoKICAgICAgICAgIC8vIFNob3J0IGNpcmN1aXQgaWYgdGlsZSBpcyB0b3RhbGx5IGRpc2pvaW50IGZyb20gaW1hZ2UuCiAgICAgICAgICBpZiAoIW92ZXJsYXAodGlsZVBvaW50LngsIHRpbGVQb2ludC54ICsgMSwgdG9wTGVmdC54LCBib3R0b21SaWdodC54KSkgcmV0dXJuIHsKICAgICAgICAgICAgICB2OiB2b2lkIDAKICAgICAgICAgICAgfTsKICAgICAgICAgIGlmICghb3ZlcmxhcCh0aWxlUG9pbnQueSwgdGlsZVBvaW50LnkgKyAxLCB0b3BMZWZ0LnksIGJvdHRvbVJpZ2h0LnkpKSByZXR1cm4gewogICAgICAgICAgICAgIHY6IHZvaWQgMAogICAgICAgICAgICB9OwoKICAgICAgICAgIC8vIFRoZSBsaW5lYXIgcmVzb2x1dGlvbiBvZiB0aGUgdGlsZSB3ZSdyZSBkcmF3aW5nIGlzIGFsd2F5cyAyNTZweCBwZXIgdGlsZSB1bml0LgogICAgICAgICAgLy8gSWYgdGhlIGxpbmVhciByZXNvbHV0aW9uIChpbiBlaXRoZXIgZGlyZWN0aW9uKSBvZiB0aGUgaW1hZ2UgaXMgbGVzcyB0aGFuIDI1NnB4CiAgICAgICAgICAvLyBwZXIgdGlsZSB1bml0LCB0aGVuIHVzZSBuZWFyZXN0IG5laWdoYm9yOyBvdGhlcndpc2UsIHVzZSB0aGUgY2FudmFzJ3MgYnVpbHQtaW4KICAgICAgICAgIC8vIHNjYWxpbmcuCiAgICAgICAgICB2YXIgaW1nUmVzID0gewogICAgICAgICAgICB4OiB3IC8gZXh0ZW50LngsCiAgICAgICAgICAgIHk6IGggLyBleHRlbnQueQogICAgICAgICAgfTsKCiAgICAgICAgICAvLyBXZSBjYW4gZG8gdGhlIGFjdHVhbCBkcmF3aW5nIGluIG9uZSBvZiB0aHJlZSB3YXlzOgogICAgICAgICAgLy8gLSBDYWxsIGRyYXdJbWFnZSgpLiBUaGlzIGlzIGVhc3kgYW5kIGZhc3QsIGFuZCByZXN1bHRzIGluIHNtb290aAogICAgICAgICAgLy8gICBpbnRlcnBvbGF0aW9uIChiaWxpbmVhcj8pLiBUaGlzIGlzIHdoYXQgd2Ugd2FudCB3aGVuIHdlIGFyZQogICAgICAgICAgLy8gICByZWR1Y2luZyB0aGUgaW1hZ2UgZnJvbSBpdHMgbmF0aXZlIHNpemUuCiAgICAgICAgICAvLyAtIENhbGwgZHJhd0ltYWdlKCkgd2l0aCBpbWFnZVNtb290aGluZ0VuYWJsZWQ9ZmFsc2UuIFRoaXMgaXMgZWFzeQogICAgICAgICAgLy8gICBhbmQgZmFzdCBhbmQgZ2l2ZXMgdXMgbmVhcmVzdC1uZWlnaGJvciBpbnRlcnBvbGF0aW9uLCB3aGljaCBpcyB3aGF0CiAgICAgICAgICAvLyAgIHdlIHdhbnQgd2hlbiBlbmxhcmdpbmcgdGhlIGltYWdlLiBIb3dldmVyLCBpdCdzIHVuc3VwcG9ydGVkIG9uIG1hbnkKICAgICAgICAgIC8vICAgYnJvd3NlcnMgKGluY2x1ZGluZyBRdFdlYmtpdCkuCiAgICAgICAgICAvLyAtIERvIGEgbWFudWFsIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbi4gVGhpcyBpcyB3aGF0IHdlJ2xsIGZhbGwKICAgICAgICAgIC8vICAgYmFjayB0byB3aGVuIGVubGFyZ2luZywgYW5kIGltYWdlU21vb3RoaW5nRW5hYmxlZCBpc24ndCBzdXBwb3J0ZWQuCiAgICAgICAgICAvLyAgIEluIHRoZW9yeSBpdCdzIHNsb3dlciwgYnV0IHN0aWxsIHByZXR0eSBmYXN0IG9uIG15IG1hY2hpbmUsIGFuZCB0aGUKICAgICAgICAgIC8vICAgcmVzdWx0cyBsb29rIHRoZSBzYW1lIEFGQUlDVC4KCiAgICAgICAgICAvLyBJcyBpbWFnZVNtb290aGluZ0VuYWJsZWQgc3VwcG9ydGVkPyBJZiBzbywgd2UgY2FuIGxldCBjYW52YXMgZG8KICAgICAgICAgIC8vIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbiBmb3IgdXMuCiAgICAgICAgICB2YXIgc21vb3RoaW5nUHJvcGVydHkgPSBnZXRDYW52YXNTbW9vdGhpbmdQcm9wZXJ0eShjdHgpOwoKICAgICAgICAgIGlmIChzbW9vdGhpbmdQcm9wZXJ0eSB8fCBpbWdSZXMueCA+PSAyNTYgJiYgaW1nUmVzLnkgPj0gMjU2KSB7CiAgICAgICAgICAgIC8vIFVzZSBidWlsdC1pbiBzY2FsaW5nCgogICAgICAgICAgICAvLyBUdXJuIG9mZiBhbnRpLWFsaWFzaW5nIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICBpZiAoc21vb3RoaW5nUHJvcGVydHkpIHsKICAgICAgICAgICAgICBjdHhbc21vb3RoaW5nUHJvcGVydHldID0gaW1nUmVzLnggPj0gMjU2ICYmIGltZ1Jlcy55ID49IDI1NjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gRG9uJ3QgbmVjZXNzYXJpbHkgZHJhdyB3aXRoIHRoZSBmdWxsLXNpemUgaW1hZ2U7IGlmIHdlJ3JlCiAgICAgICAgICAgIC8vIGRvd25zY2FsaW5nLCB1c2UgdGhlIG1pcG1hcHBlciB0byBnZXQgYSBwcmUtZG93bnNjYWxlZCBpbWFnZQogICAgICAgICAgICAvLyAoc2VlIGNvbW1lbnRzIG9uIE1pcG1hcHBlciBjbGFzcyBmb3Igd2h5IHRoaXMgbWF0dGVycykuCiAgICAgICAgICAgIG1pcG1hcHBlci5nZXRCeVNpemUoZXh0ZW50LnggKiAyNTYsIGV4dGVudC55ICogMjU2LCBmdW5jdGlvbiAobWlwKSB7CiAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBpbWFnZSB3aWxsIGdvIG9mZiB0aGUgZWRnZSBvZiB0aGUgY2FudmFzLS0KICAgICAgICAgICAgICAvLyB0aGF0J3MgT0ssIHRoZSBjYW52YXMgc2hvdWxkIGNsaXAgYXBwcm9wcmlhdGVseS4KICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKG1pcCwKICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFicyB0aWxlIGNvb3JkcyB0byByZWwgdGlsZSBjb29yZHMsIHRoZW4gKjI1NiB0byBjb252ZXJ0CiAgICAgICAgICAgICAgLy8gdG8gcmVsIHBpeGVsIGNvb3JkcwogICAgICAgICAgICAgICh0b3BMZWZ0LnggLSB0aWxlUG9pbnQueCkgKiAyNTYsICh0b3BMZWZ0LnkgLSB0aWxlUG9pbnQueSkgKiAyNTYsCiAgICAgICAgICAgICAgLy8gQWx3YXlzIGRyYXcgdGhlIHdob2xlIHRoaW5nIGFuZCBsZXQgY2FudmFzIGNsaXA7IHNvIHdlIGNhbiBqdXN0CiAgICAgICAgICAgICAgLy8gY29udmVydCBmcm9tIHNpemUgaW4gdGlsZSBjb29yZHMgc3RyYWlnaHQgdG8gcGl4ZWxzCiAgICAgICAgICAgICAgZXh0ZW50LnggKiAyNTYsIGV4dGVudC55ICogMjU2KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBVc2UgbWFudWFsIG5lYXJlc3QtbmVpZ2hib3IgaW50ZXJwb2xhdGlvbgoKICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzb3VyY2UgaW1hZ2UgcGl4ZWwgY29vcmRpbmF0ZXMgdGhhdCBjb3JyZXNwb25kIHdpdGgKICAgICAgICAgICAgLy8gdGhlIHRvcC1sZWZ0IGFuZCBib3R0b20tcmlnaHQgb2YgdGhpcyB0aWxlLiAoSWYgdGhlIHNvdXJjZSBpbWFnZQogICAgICAgICAgICAvLyBvbmx5IHBhcnRpYWxseSBvdmVybGFwcyB0aGUgdGlsZSwgd2UgdXNlIG1heC9taW4gdG8gbGltaXQgdGhlCiAgICAgICAgICAgIC8vIHNvdXJjZVN0YXJ0L0VuZCB0byBvbmx5IHJlZmxlY3QgdGhlIG92ZXJsYXBwaW5nIHBvcnRpb24uKQogICAgICAgICAgICB2YXIgc291cmNlU3RhcnQgPSB7CiAgICAgICAgICAgICAgeDogTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigodGlsZVBvaW50LnggLSB0b3BMZWZ0LngpICogaW1nUmVzLngpKSwKICAgICAgICAgICAgICB5OiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aWxlUG9pbnQueSAtIHRvcExlZnQueSkgKiBpbWdSZXMueSkpCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBzb3VyY2VFbmQgPSB7CiAgICAgICAgICAgICAgeDogTWF0aC5taW4odywgTWF0aC5jZWlsKCh0aWxlUG9pbnQueCArIDEgLSB0b3BMZWZ0LngpICogaW1nUmVzLngpKSwKICAgICAgICAgICAgICB5OiBNYXRoLm1pbihoLCBNYXRoLmNlaWwoKHRpbGVQb2ludC55ICsgMSAtIHRvcExlZnQueSkgKiBpbWdSZXMueSkpCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBUaGUgc2l6ZSwgaW4gZGVzdCBwaXhlbHMsIHRoYXQgZWFjaCBzb3VyY2UgcGl4ZWwgc2hvdWxkIG9jY3VweS4KICAgICAgICAgICAgLy8gVGhpcyBtaWdodCBiZSBncmVhdGVyIG9yIGxlc3MgdGhhbiAxIChlLmcuIGlmIHggYW5kIHkgcmVzb2x1dGlvbgogICAgICAgICAgICAvLyBhcmUgdmVyeSBkaWZmZXJlbnQpLgogICAgICAgICAgICB2YXIgcGl4ZWxTaXplID0gewogICAgICAgICAgICAgIHg6IDI1NiAvIGltZ1Jlcy54LAogICAgICAgICAgICAgIHk6IDI1NiAvIGltZ1Jlcy55CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBGb3IgZWFjaCBwaXhlbCBpbiB0aGUgc291cmNlIGltYWdlIHRoYXQgb3ZlcmxhcHMgdGhlIHRpbGUuLi4KICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gc291cmNlU3RhcnQueTsgcm93IDwgc291cmNlRW5kLnk7IHJvdysrKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgY29sID0gc291cmNlU3RhcnQueDsgY29sIDwgc291cmNlRW5kLng7IGNvbCsrKSB7CiAgICAgICAgICAgICAgICAvLyAuLi5leHRyYWN0IHRoZSBwaXhlbCBkYXRhLi4uCiAgICAgICAgICAgICAgICB2YXIgaSA9IChyb3cgKiB3ICsgY29sKSAqIDQ7CiAgICAgICAgICAgICAgICB2YXIgciA9IGltZ0RhdGFbaV07CiAgICAgICAgICAgICAgICB2YXIgZyA9IGltZ0RhdGFbaSArIDFdOwogICAgICAgICAgICAgICAgdmFyIGIgPSBpbWdEYXRhW2kgKyAyXTsKICAgICAgICAgICAgICAgIHZhciBhID0gaW1nRGF0YVtpICsgM107CiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gInJnYmEoIiArIFtyLCBnLCBiLCBhIC8gMjU1XS5qb2luKCIsIikgKyAiKSI7CgogICAgICAgICAgICAgICAgLy8gLi4uY2FsY3VsYXRlIHRoZSBjb3JyZXNwb25kaW5nIHBpeGVsIGNvb3JkIGluIHRoZSBkZXN0IGltYWdlCiAgICAgICAgICAgICAgICAvLyB3aGVyZSBpdCBzaG91bGQgYmUgZHJhd24uLi4KICAgICAgICAgICAgICAgIHZhciBwaXhlbFBvcyA9IHsKICAgICAgICAgICAgICAgICAgeDogKGNvbCAvIGltZ1Jlcy54ICsgdG9wTGVmdC54IC0gdGlsZVBvaW50LngpICogMjU2LAogICAgICAgICAgICAgICAgICB5OiAocm93IC8gaW1nUmVzLnkgKyB0b3BMZWZ0LnkgLSB0aWxlUG9pbnQueSkgKiAyNTYKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgLy8gLi4uYW5kIGRyYXcgYSByZWN0YW5nbGUgdGhlcmUuCiAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QoTWF0aC5yb3VuZChwaXhlbFBvcy54KSwgTWF0aC5yb3VuZChwaXhlbFBvcy55KSwKICAgICAgICAgICAgICAgIC8vIExvb2tzIGNyYXp5LCBidXQgdGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCByb3VuZGluZyBmcm9tCiAgICAgICAgICAgICAgICAvLyBjYXVzaW5nIG92ZXJsYXAgYmV0d2VlbiB0aGlzIHJlY3QgYW5kIGl0cyBuZWlnaGJvcnMuIFRoZQogICAgICAgICAgICAgICAgLy8gbWludWVuZCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5leHQgcGl4ZWwsIHdoaWxlIHRoZQogICAgICAgICAgICAgICAgLy8gc3VidHJhaGVuZCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgcGl4ZWwgKHRvIHR1cm4gYW4KICAgICAgICAgICAgICAgIC8vIGFic29sdXRlIGNvb3JkaW5hdGUgdG8gYSB3aWR0aC9oZWlnaHQpLiBZZXMsIEkgaGFkIHRvIGxvb2sKICAgICAgICAgICAgICAgIC8vIHVwIG1pbnVlbmQgYW5kIHN1YnRyYWhlbmQuCiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHBpeGVsUG9zLnggKyBwaXhlbFNpemUueCkgLSBNYXRoLnJvdW5kKHBpeGVsUG9zLngpLCBNYXRoLnJvdW5kKHBpeGVsUG9zLnkgKyBwaXhlbFNpemUueSkgLSBNYXRoLnJvdW5kKHBpeGVsUG9zLnkpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KCk7CgogICAgICAgIGlmICgodHlwZW9mIF9yZXQ3ID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogX3R5cGVvZihfcmV0NykpID09PSAib2JqZWN0IikgcmV0dXJuIF9yZXQ3LnY7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgY2FudmFzVGlsZXMudGlsZURyYXduKGNhbnZhcyk7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHRoaXMubGF5ZXJNYW5hZ2VyLmFkZExheWVyKGNhbnZhc1RpbGVzLCAiaW1hZ2UiLCBsYXllcklkLCBncm91cCk7Cn07CgptZXRob2RzLnJlbW92ZUltYWdlID0gZnVuY3Rpb24gKGxheWVySWQpIHsKICB0aGlzLmxheWVyTWFuYWdlci5yZW1vdmVMYXllcigiaW1hZ2UiLCBsYXllcklkKTsKfTsKCm1ldGhvZHMuY2xlYXJJbWFnZXMgPSBmdW5jdGlvbiAoKSB7CiAgdGhpcy5sYXllck1hbmFnZXIuY2xlYXJMYXllcnMoImltYWdlIik7Cn07CgptZXRob2RzLmFkZE1lYXN1cmUgPSBmdW5jdGlvbiAob3B0aW9ucykgewogIC8vIGlmIGEgbWVhc3VyZUNvbnRyb2wgYWxyZWFkeSBleGlzdHMsIHRoZW4gcmVtb3ZlIGl0IGFuZAogIC8vICAgcmVwbGFjZSB3aXRoIGEgbmV3IG9uZQogIGlmICh0aGlzLm1lYXN1cmVDb250cm9sKSB7CiAgICB0aGlzLm1lYXN1cmVDb250cm9sLnJlbW92ZUZyb20odGhpcyk7CiAgfQogIHRoaXMubWVhc3VyZUNvbnRyb2wgPSBfbGVhZmxldDIuZGVmYXVsdC5jb250cm9sLm1lYXN1cmUob3B0aW9ucyk7CiAgdGhpcy5tZWFzdXJlQ29udHJvbC5hZGRUbyh0aGlzKTsKfTsKCm1ldGhvZHMucmVtb3ZlTWVhc3VyZSA9IGZ1bmN0aW9uICgpIHsKICB0aGlzLm1lYXN1cmVDb250cm9sLnJlbW92ZUZyb20odGhpcyk7CiAgZGVsZXRlIHRoaXMubWVhc3VyZUNvbnRyb2w7Cn07CgptZXRob2RzLmFkZFNlbGVjdCA9IGZ1bmN0aW9uIChjdEdyb3VwKSB7CiAgdmFyIF90aGlzOCA9IHRoaXM7CgogIG1ldGhvZHMucmVtb3ZlU2VsZWN0LmNhbGwodGhpcyk7CgogIHRoaXMuX3NlbGVjdEJ1dHRvbiA9IF9sZWFmbGV0Mi5kZWZhdWx0LmVhc3lCdXR0b24oewogICAgc3RhdGVzOiBbewogICAgICBzdGF0ZU5hbWU6ICJzZWxlY3QtaW5hY3RpdmUiLAogICAgICBpY29uOiAiaW9uLXFyLXNjYW5uZXIiLAogICAgICB0aXRsZTogIk1ha2UgYSBzZWxlY3Rpb24iLAogICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGJ0biwgbWFwKSB7CiAgICAgICAgYnRuLnN0YXRlKCJzZWxlY3QtYWN0aXZlIik7CiAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlciA9IG5ldyBfbGVhZmxldDIuZGVmYXVsdC5Mb2NhdGlvbkZpbHRlcjIoKTsKCiAgICAgICAgaWYgKGN0R3JvdXApIHsKICAgICAgICAgIChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25IYW5kbGUgPSBuZXcgZ2xvYmFsLmNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoY3RHcm91cCk7CiAgICAgICAgICAgIHNlbGVjdGlvbkhhbmRsZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBpZiAoZS5zZW5kZXIgIT09IHNlbGVjdGlvbkhhbmRsZSkgewogICAgICAgICAgICAgICAgaWYgKF90aGlzOC5fbG9jYXRpb25GaWx0ZXIpIHsKICAgICAgICAgICAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5kaXNhYmxlKCk7CiAgICAgICAgICAgICAgICAgIGJ0bi5zdGF0ZSgic2VsZWN0LWluYWN0aXZlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKGUpIHsKICAgICAgICAgICAgICBfdGhpczgubGF5ZXJNYW5hZ2VyLmJydXNoKF90aGlzOC5fbG9jYXRpb25GaWx0ZXIuZ2V0Qm91bmRzKCksIHsgc2VuZGVyOiBzZWxlY3Rpb25IYW5kbGUgfSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIF90aGlzOC5fbG9jYXRpb25GaWx0ZXIub24oImVuYWJsZWQiLCBoYW5kbGVyKTsKICAgICAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5vbigiY2hhbmdlIiwgaGFuZGxlcik7CiAgICAgICAgICAgIF90aGlzOC5fbG9jYXRpb25GaWx0ZXIub24oImRpc2FibGVkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHNlbGVjdGlvbkhhbmRsZS5jbG9zZSgpOwogICAgICAgICAgICAgIF90aGlzOC5fbG9jYXRpb25GaWx0ZXIgPSBudWxsOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pKCk7CiAgICAgICAgfQoKICAgICAgICBfdGhpczguX2xvY2F0aW9uRmlsdGVyLmFkZFRvKG1hcCk7CiAgICAgIH0KICAgIH0sIHsKICAgICAgc3RhdGVOYW1lOiAic2VsZWN0LWFjdGl2ZSIsCiAgICAgIGljb246ICJpb24tY2xvc2Utcm91bmQiLAogICAgICB0aXRsZTogIkRpc21pc3Mgc2VsZWN0aW9uIiwKICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhidG4sIG1hcCkgewogICAgICAgIGJ0bi5zdGF0ZSgic2VsZWN0LWluYWN0aXZlIik7CiAgICAgICAgX3RoaXM4Ll9sb2NhdGlvbkZpbHRlci5kaXNhYmxlKCk7CiAgICAgICAgLy8gSWYgZXhwbGljaXRseSBkaXNtaXNzZWQsIGNsZWFyIHRoZSBjcm9zc3RhbGsgc2VsZWN0aW9ucwogICAgICAgIF90aGlzOC5sYXllck1hbmFnZXIudW5icnVzaCgpOwogICAgICB9CiAgICB9XQogIH0pOwoKICB0aGlzLl9zZWxlY3RCdXR0b24uYWRkVG8odGhpcyk7Cn07CgptZXRob2RzLnJlbW92ZVNlbGVjdCA9IGZ1bmN0aW9uICgpIHsKICBpZiAodGhpcy5fbG9jYXRpb25GaWx0ZXIpIHsKICAgIHRoaXMuX2xvY2F0aW9uRmlsdGVyLmRpc2FibGUoKTsKICB9CgogIGlmICh0aGlzLl9zZWxlY3RCdXR0b24pIHsKICAgIHRoaXMucmVtb3ZlQ29udHJvbCh0aGlzLl9zZWxlY3RCdXR0b24pOwogICAgdGhpcy5fc2VsZWN0QnV0dG9uID0gbnVsbDsKICB9Cn07CgoKfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09ICJ1bmRlZmluZWQiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0seyIuL2NsdXN0ZXItbGF5ZXItc3RvcmUiOjEsIi4vY3JzX3V0aWxzIjozLCIuL2RhdGFmcmFtZSI6NCwiLi9nbG9iYWwvaHRtbHdpZGdldHMiOjYsIi4vZ2xvYmFsL2pxdWVyeSI6NywiLi9nbG9iYWwvbGVhZmxldCI6OCwiLi9nbG9iYWwvc2hpbnkiOjEwLCIuL21pcG1hcHBlciI6MTQsIi4vdXRpbCI6MTV9XSwxNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKCnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CgovLyBUaGlzIGNsYXNzIHNpbXVsYXRlcyBhIG1pcG1hcCwgd2hpY2ggc2hyaW5rcyBpbWFnZXMgYnkgcG93ZXJzIG9mIHR3by4gVGhpcwovLyBzdGVwd2lzZSByZWR1Y3Rpb24gcmVzdWx0cyBpbiAicGl4ZWwtcGVyZmVjdCBkb3duc2NhbGluZyIgKHdoZXJlIGV2ZXJ5Ci8vIHBpeGVsIG9mIHRoZSBvcmlnaW5hbCBpbWFnZSBoYXMgc29tZSBjb250cmlidXRpb24gdG8gdGhlIGRvd25zY2FsZWQgaW1hZ2UpCi8vIGFzIG9wcG9zZWQgdG8gYSBzaW5nbGUtc3RlcCBkb3duc2NhbGluZyB3aGljaCB3aWxsIGRpc2NhcmQgYSBsb3Qgb2YgZGF0YQovLyAoYW5kIHdpdGggc3BhcnNlIGltYWdlcyBhdCBzbWFsbCBzY2FsZXMgY2FuIGdpdmUgdmVyeSBzdXJwcmlzaW5nIHJlc3VsdHMpLgoKdmFyIE1pcG1hcHBlciA9IGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBNaXBtYXBwZXIoaW1nKSB7CiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWlwbWFwcGVyKTsKCiAgICB0aGlzLl9sYXllcnMgPSBbaW1nXTsKICB9CgogIC8vIFRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBvbiB0aGlzIGNsYXNzIHRha2UgYSBjYWxsYmFjayBmdW5jdGlvbiBCVVQgTUFZIE9SIE1BWQogIC8vIE5PVCBhY3R1YWxseSBiZWhhdmUgYXN5bmNocm9ub3VzbHkuCgoKICBfY3JlYXRlQ2xhc3MoTWlwbWFwcGVyLCBbewogICAga2V5OiAiZ2V0QnlTaXplIiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeVNpemUoZGVzaXJlZFdpZHRoLCBkZXNpcmVkSGVpZ2h0LCBjYWxsYmFjaykgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgdmFyIGkgPSAwOwogICAgICB2YXIgbGFzdEltZyA9IHRoaXMuX2xheWVyc1swXTsKICAgICAgdmFyIHRlc3ROZXh0ID0gZnVuY3Rpb24gdGVzdE5leHQoKSB7CiAgICAgICAgX3RoaXMuZ2V0QnlJbmRleChpLCBmdW5jdGlvbiAoaW1nKSB7CiAgICAgICAgICAvLyBJZiBjdXJyZW50IGltYWdlIGlzIGludmFsaWQgKGkuZS4gdG9vIHNtYWxsIHRvIGJlIHJlbmRlcmVkKSBvcgogICAgICAgICAgLy8gaXQncyBzbWFsbGVyIHRoYW4gd2hhdCB3ZSB3YW50ZWQsIHJldHVybiB0aGUgbGFzdCBrbm93biBnb29kIGltYWdlLgogICAgICAgICAgaWYgKCFpbWcgfHwgaW1nLndpZHRoIDwgZGVzaXJlZFdpZHRoIHx8IGltZy5oZWlnaHQgPCBkZXNpcmVkSGVpZ2h0KSB7CiAgICAgICAgICAgIGNhbGxiYWNrKGxhc3RJbWcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsYXN0SW1nID0gaW1nOwogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIHRlc3ROZXh0KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgdGVzdE5leHQoKTsKICAgIH0KICB9LCB7CiAgICBrZXk6ICJnZXRCeUluZGV4IiwKICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeUluZGV4KGksIGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgaWYgKHRoaXMuX2xheWVyc1tpXSkgewogICAgICAgIGNhbGxiYWNrKHRoaXMuX2xheWVyc1tpXSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB0aGlzLmdldEJ5SW5kZXgoaSAtIDEsIGZ1bmN0aW9uIChwcmV2SW1nKSB7CiAgICAgICAgaWYgKCFwcmV2SW1nKSB7CiAgICAgICAgICAvLyBwcmV2SW1nIGNvdWxkIG5vdCBiZSBjYWxjdWxhdGVkICh0b28gc21hbGwsIHBvc3NpYmx5KQogICAgICAgICAgY2FsbGJhY2sobnVsbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW1nLndpZHRoIDwgMiB8fCBwcmV2SW1nLmhlaWdodCA8IDIpIHsKICAgICAgICAgIC8vIENhbid0IHJlZHVjZSB0aGlzIGltYWdlIGFueSBmdXJ0aGVyCiAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gSWYgcmVkdWNlIGV2ZXIgYmVjb21lcyB0cnVseSBhc3luY2hyb25vdXMsIHdlIHNob3VsZCBzdHVmZiBhIHByb21pc2Ugb3IKICAgICAgICAvLyBzb21ldGhpbmcgaW50byB0aGlzLl9sYXllcnNbaV0gYmVmb3JlIGNhbGxpbmcgdGhpcy5yZWR1Y2UoKSwgdG8gcHJldmVudAogICAgICAgIC8vIHJlZHVuZGFudCByZWR1Y2Ugb3BlcmF0aW9ucyBmcm9tIGhhcHBlbmluZy4KICAgICAgICBfdGhpczIucmVkdWNlKHByZXZJbWcsIGZ1bmN0aW9uIChyZWR1Y2VkSW1nKSB7CiAgICAgICAgICBfdGhpczIuX2xheWVyc1tpXSA9IHJlZHVjZWRJbWc7CiAgICAgICAgICBjYWxsYmFjayhyZWR1Y2VkSW1nKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfSwgewogICAga2V5OiAicmVkdWNlIiwKICAgIHZhbHVlOiBmdW5jdGlvbiByZWR1Y2UoaW1nLCBjYWxsYmFjaykgewogICAgICB2YXIgaW1nRGF0YUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBpbWdEYXRhQ2FudmFzLndpZHRoID0gTWF0aC5jZWlsKGltZy53aWR0aCAvIDIpOwogICAgICBpbWdEYXRhQ2FudmFzLmhlaWdodCA9IE1hdGguY2VpbChpbWcuaGVpZ2h0IC8gMik7CiAgICAgIGltZ0RhdGFDYW52YXMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdEYXRhQ2FudmFzKTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgaW1nRGF0YUN0eCA9IGltZ0RhdGFDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICBpbWdEYXRhQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCAvIDIsIGltZy5oZWlnaHQgLyAyKTsKICAgICAgICBjYWxsYmFjayhpbWdEYXRhQ2FudmFzKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGltZ0RhdGFDYW52YXMpOwogICAgICB9CiAgICB9CiAgfV0pOwoKICByZXR1cm4gTWlwbWFwcGVyOwp9KCk7CgpleHBvcnRzLmRlZmF1bHQgPSBNaXBtYXBwZXI7CgoKfSx7fV0sMTU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMubG9nID0gbG9nOwpleHBvcnRzLnJlY3ljbGUgPSByZWN5Y2xlOwpleHBvcnRzLmFzQXJyYXkgPSBhc0FycmF5OwpmdW5jdGlvbiBsb2cobWVzc2FnZSkgewogIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi8KICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmxvZykgY29uc29sZS5sb2cobWVzc2FnZSk7CiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovCn0KCmZ1bmN0aW9uIHJlY3ljbGUodmFsdWVzLCBsZW5ndGgsIGluUGxhY2UpIHsKICBpZiAobGVuZ3RoID09PSAwICYmICFpblBsYWNlKSByZXR1cm4gW107CgogIGlmICghKHZhbHVlcyBpbnN0YW5jZW9mIEFycmF5KSkgewogICAgaWYgKGluUGxhY2UpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBkbyBpbi1wbGFjZSByZWN5Y2xpbmcgb2YgYSBub24tQXJyYXkgdmFsdWUiKTsKICAgIH0KICAgIHZhbHVlcyA9IFt2YWx1ZXNdOwogIH0KICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gInVuZGVmaW5lZCIpIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGg7CgogIHZhciBkZXN0ID0gaW5QbGFjZSA/IHZhbHVlcyA6IFtdOwogIHZhciBvcmlnTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDsKICB3aGlsZSAoZGVzdC5sZW5ndGggPCBsZW5ndGgpIHsKICAgIGRlc3QucHVzaCh2YWx1ZXNbZGVzdC5sZW5ndGggJSBvcmlnTGVuZ3RoXSk7CiAgfQogIGlmIChkZXN0Lmxlbmd0aCA+IGxlbmd0aCkgewogICAgZGVzdC5zcGxpY2UobGVuZ3RoLCBkZXN0Lmxlbmd0aCAtIGxlbmd0aCk7CiAgfQogIHJldHVybiBkZXN0Owp9CgpmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiB2YWx1ZTtlbHNlIHJldHVybiBbdmFsdWVdOwp9CgoKfSx7fV19LHt9LFsxMV0pOwo="></script>
<script src="data:application/x-javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICAvLyB3aGVuIHVwZ3JhZGluZyBwbG90bHkuanMsCiAgICAvLyB1bmNvbW1lbnQgdGhpcyBjb25zb2xlLmxvZygpLCB0aGVuIGRvIGBsb2FkX2FsbCgpOyBwbG90X2x5KClgIAogICAgLy8gb3BlbiBpbiBjaHJvbWUsIHJpZ2h0LWNsaWNrIG9uIGNvbnNvbGUgb3V0cHV0OiAic2F2ZS1hcyIgLT4gInNjaGVtYS5qc29uIgogICAgLy8gU2NoZW1hIDwtIGpzb25saXRlOjpmcm9tSlNPTigifi9Eb3dubG9hZHMvc2NoZW1hLmpzb24iKQogICAgLy8gZGV2dG9vbHM6OnVzZV9kYXRhKFNjaGVtYSwgb3ZlcndyaXRlID0gVCwgaW50ZXJuYWwgPSBUKQogICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoUGxvdGx5LlBsb3RTY2hlbWEuZ2V0KCkpKTsKICAgIAogICAgcmV0dXJuIHt9OwogIH0sCgogIHJlc2l6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQsIGluc3RhbmNlKSB7CiAgICBpZiAoaW5zdGFuY2UuYXV0b3NpemUpIHsKICAgICAgdmFyIHdpZHRoID0gaW5zdGFuY2Uud2lkdGggfHwgd2lkdGg7CiAgICAgIHZhciBoZWlnaHQgPSBpbnN0YW5jZS5oZWlnaHQgfHwgaGVpZ2h0OwogICAgICBQbG90bHkucmVsYXlvdXQoZWwuaWQsIHt3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0fSk7CiAgICB9CiAgfSwgIAogIAogIHJlbmRlclZhbHVlOiBmdW5jdGlvbihlbCwgeCwgaW5zdGFuY2UpIHsKICAgICAgCiAgICBpZiAodHlwZW9mKHdpbmRvdykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIC8vIG1ha2Ugc3VyZSBwbG90cyBkb24ndCBnZXQgY3JlYXRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIChmb3Igb24tcHJlbSkKICAgICAgd2luZG93LlBMT1RMWUVOViA9IHdpbmRvdy5QTE9UTFlFTlYgfHwge307CiAgICAgIHdpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkwgPSB4LmJhc2VfdXJsOwogICAgfQoKICAgIHZhciBncmFwaERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsLmlkKTsKICAgIAogICAgLy8gVE9ETzogbW92ZSB0aGUgY29udHJvbCBwYW5lbCBpbmplY3Rpb24gc3RyYXRlZ3kgaW5zaWRlIGhlcmUuLi4KICAgIEhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyKGZ1bmN0aW9uKCkgewogICAgICAKICAgICAgLy8gbG93ZXIgdGhlIHotaW5kZXggb2YgdGhlIG1vZGViYXIgdG8gcHJldmVudCBpdCBmcm9tIGhpZ2hqYWNraW5nIGhvdmVyCiAgICAgIC8vIChUT0RPOiBkbyB0aGlzIHZpYSBDU1M/KQogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcm9wZW5zY2kvcGxvdGx5L2lzc3Vlcy85NTYKICAgICAgLy8gaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9qc3JlZi9wcm9wX3N0eWxlX3ppbmRleC5hc3AKICAgICAgdmFyIG1vZGViYXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmpzLXBsb3RseS1wbG90IC5wbG90bHkgLm1vZGViYXIiKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlYmFycy5sZW5ndGg7IGkrKykgewogICAgICAgIG1vZGViYXJzW2ldLnN0eWxlLnpJbmRleCA9IDE7CiAgICAgIH0KICAgIH0pOwogICAgICAKICAgICAgLy8gaW5qZWN0IGEgImNvbnRyb2wgcGFuZWwiIGhvbGRpbmcgc2VsZWN0aXplL2R5bmFtaWMgY29sb3Igd2lkZ2V0KHMpCiAgICBpZiAoeC5zZWxlY3RpemUgfHwgeC5oaWdobGlnaHQuZHluYW1pYyAmJiAhaW5zdGFuY2UucGxvdGx5KSB7CiAgICAgIHZhciBmbGV4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGZsZXguY2xhc3MgPSAicGxvdGx5LWNyb3NzdGFsay1jb250cm9sLXBhbmVsIjsKICAgICAgZmxleC5zdHlsZSA9ICJkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXAiOwogICAgICAKICAgICAgLy8gaW5qZWN0IHRoZSBjb2xvdXJwaWNrZXIgSFRNTCBjb250YWluZXIgaW50byB0aGUgZmxleGJveAogICAgICBpZiAoeC5oaWdobGlnaHQuZHluYW1pYykgewogICAgICAgIHZhciBwaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgIHBpY2tlcklucHV0LmlkID0gZWwuaWQgKyAiLWNvbG91cnBpY2tlciI7CiAgICAgICAgcGlja2VySW5wdXQucGxhY2Vob2xkZXIgPSAiYXNkYXNkIjsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VyTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgIHBpY2tlckxhYmVsLmZvciA9IHBpY2tlcklucHV0LmlkOwogICAgICAgIHBpY2tlckxhYmVsLmlubmVySFRNTCA9ICJCcnVzaCBjb2xvciZuYnNwOyZuYnNwOyI7CiAgICAgICAgCiAgICAgICAgcGlja2VyRGl2LmFwcGVuZENoaWxkKHBpY2tlckxhYmVsKTsKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VySW5wdXQpOwogICAgICAgIGZsZXguYXBwZW5kQ2hpbGQocGlja2VyRGl2KTsKICAgICAgfQogICAgICAKICAgICAgLy8gaW5qZWN0IHNlbGVjdGl6ZSBIVE1MIGNvbnRhaW5lcnMgKG9uZSBmb3IgZXZlcnkgY3Jvc3N0YWxrIGdyb3VwKQogICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICBjb250YWluZXIuaWQgPSBpZHNbaV07CiAgICAgICAgICBjb250YWluZXIuc3R5bGUgPSAid2lkdGg6IDgwJTsgaGVpZ2h0OiAxMCUiOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzID0gImZvcm0tZ3JvdXAgY3Jvc3N0YWxrLWlucHV0LXBsb3RseS1oaWdobGlnaHQiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgICAgbGFiZWwuZm9yID0gaWRzW2ldOwogICAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0geC5zZWxlY3RpemVbaWRzW2ldXS5ncm91cDsKICAgICAgICAgIGxhYmVsLmNsYXNzID0gImNvbnRyb2wtbGFiZWwiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgc2VsZWN0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CiAgICAgICAgICBzZWxlY3QubXVsdGlwbGUgPSB0cnVlOwogICAgICAgICAgCiAgICAgICAgICBzZWxlY3REaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RGl2KTsKICAgICAgICAgIGZsZXguYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC8vIGZpbmFsbHksIGluc2VydCB0aGUgZmxleGJveCBpbnNpZGUgdGhlIGh0bWx3aWRnZXQgY29udGFpbmVyLAogICAgICAvLyBidXQgYmVmb3JlIHRoZSBwbG90bHkgZ3JhcGggZGl2CiAgICAgIGdyYXBoRGl2LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZsZXgsIGdyYXBoRGl2KTsKICAgICAgCiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlciA9ICQoIiMiICsgcGlja2VySW5wdXQuaWQpOwogICAgICAgIHZhciBjb2xvcnMgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgICAgICAvLyBUT0RPOiBsZXQgdXNlcnMgc3BlY2lmeSBvcHRpb25zPwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgdmFsdWU6IGNvbG9yc1swXSwKICAgICAgICAgIHNob3dDb2xvdXI6ICJib3RoIiwKICAgICAgICAgIHBhbGV0dGU6ICJsaW1pdGVkIiwKICAgICAgICAgIGFsbG93ZWRDb2xzOiBjb2xvcnMuam9pbigiICIpLAogICAgICAgICAgd2lkdGg6ICIyMCUiLAogICAgICAgICAgaGVpZ2h0OiAiMTAlIgogICAgICAgIH07CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcih7Y2hhbmdlRGVsYXk6IDB9KTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKCJzZXR0aW5ncyIsIG9wdHMpOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInZhbHVlIiwgb3B0cy52YWx1ZSk7CiAgICAgICAgLy8gaW5mb3JtIGNyb3NzdGFsayBhYm91dCBhIGNoYW5nZSBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gY29sb3VyCiAgICAgICAgdmFyIGdycHMgPSB4LmhpZ2hsaWdodC5jdEdyb3VwcyB8fCBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNyb3NzdGFsay5ncm91cChncnBzW2ldKS52YXIoJ3Bsb3RseVNlbGVjdGlvbkNvbG91cicpCiAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgfQogICAgICAgIHBpY2tlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgICAuc2V0KHBpY2tlci5jb2xvdXJwaWNrZXIoJ3ZhbHVlJykpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIHJlbW92ZSAic2VuZERhdGFUb0Nsb3VkIiwgdW5sZXNzIHVzZXIgaGFzIHNwZWNpZmllZCB0aGV5IHdhbnQgaXQKICAgIHguY29uZmlnID0geC5jb25maWcgfHwge307CiAgICBpZiAoIXguY29uZmlnLmNsb3VkKSB7CiAgICAgIHguY29uZmlnLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUgPSB4LmNvbmZpZy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlIHx8IFtdOwogICAgICB4LmNvbmZpZy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLnB1c2goInNlbmREYXRhVG9DbG91ZCIpOwogICAgfQogICAgCiAgICAvLyBpZiBubyBwbG90IGV4aXN0cyB5ZXQsIGNyZWF0ZSBvbmUgd2l0aCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbgogICAgaWYgKCFpbnN0YW5jZS5wbG90bHkpIHsKICAgICAgCiAgICAgIHZhciBwbG90ID0gUGxvdGx5LnBsb3QoZ3JhcGhEaXYsIHgpOwogICAgICBpbnN0YW5jZS5wbG90bHkgPSB0cnVlOwogICAgICBpbnN0YW5jZS5hdXRvc2l6ZSA9IHgubGF5b3V0LmF1dG9zaXplIHx8IHRydWU7CiAgICAgIGluc3RhbmNlLndpZHRoID0geC5sYXlvdXQud2lkdGg7CiAgICAgIGluc3RhbmNlLmhlaWdodCA9IHgubGF5b3V0LmhlaWdodDsKICAgICAgCiAgICB9IGVsc2UgewogICAgICAKICAgICAgLy8gdGhpcyBpcyBlc3NlbnRpYWxseSBlcXVpdmFsZW50IHRvIFBsb3RseS5uZXdQbG90KCksIGJ1dCBhdm9pZHMgY3JlYXRpbmcgCiAgICAgIC8vIGEgbmV3IHdlYmdsIGNvbnRleHQKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9wbG90bHkuanMvYmxvYi8yYjI0ZjlkZWY5MDE4MzFlNjEyODIwNzZjZjNmODM1NTk4ZDU2ZjBlL3NyYy9wbG90X2FwaS9wbG90X2FwaS5qcyNMNTMxLUw1MzIKICAgICAgCiAgICAgIC8vIFRPRE86IHJlc3RvcmUgY3Jvc3N0YWxrIHNlbGVjdGlvbnM/CiAgICAgIFBsb3RseS5wdXJnZShncmFwaERpdik7CiAgICAgIC8vIFRPRE86IHdoeSBpcyB0aGlzIG5lY2Vzc2FyeSB0byBnZXQgY3Jvc3N0YWxrIHdvcmtpbmc/CiAgICAgIGdyYXBoRGl2LmRhdGEgPSB1bmRlZmluZWQ7CiAgICAgIGdyYXBoRGl2LmxheW91dCA9IHVuZGVmaW5lZDsKICAgICAgdmFyIHBsb3QgPSBQbG90bHkucGxvdChncmFwaERpdiwgeCk7CiAgICAgIAogICAgfQogICAgCiAgICAvLyBUcmlnZ2VyIHBsb3RseS5qcyBjYWxscyBkZWZpbmVkIHZpYSBgcGxvdGx5UHJveHkoKWAKICAgIHBsb3QudGhlbihmdW5jdGlvbigpIHsKICAgICAgaWYgKEhUTUxXaWRnZXRzLnNoaW55TW9kZSkgewogICAgICAgIFNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJwbG90bHktY2FsbHMiLCBmdW5jdGlvbihtc2cpIHsKICAgICAgICAgIHZhciBnZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1zZy5pZCk7CiAgICAgICAgICBpZiAoIWdkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgZmluZCBwbG90bHkgZ3JhcGggd2l0aCBpZDogIiArIG1zZy5pZCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIVBsb3RseVttc2cubWV0aG9kXSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWV0aG9kICIgKyBtc2cubWV0aG9kKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBhcmdzID0gW2dkXS5jb25jYXQobXNnLmFyZ3MpOwogICAgICAgICAgUGxvdGx5W21zZy5tZXRob2RdLmFwcGx5KG51bGwsIGFyZ3MpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIAogICAgLy8gQXR0YWNoIGF0dHJpYnV0ZXMgKGUuZy4sICJrZXkiLCAieiIpIHRvIHBsb3RseSBldmVudCBkYXRhCiAgICBmdW5jdGlvbiBldmVudERhdGFXaXRoS2V5KGV2ZW50RGF0YSkgewogICAgICBpZiAoZXZlbnREYXRhID09PSB1bmRlZmluZWQgfHwgIWV2ZW50RGF0YS5oYXNPd25Qcm9wZXJ0eSgicG9pbnRzIikpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gZXZlbnREYXRhLnBvaW50cy5tYXAoZnVuY3Rpb24ocHQpIHsKICAgICAgICB2YXIgb2JqID0gewogICAgICAgICAgY3VydmVOdW1iZXI6IHB0LmN1cnZlTnVtYmVyLCAKICAgICAgICAgIHBvaW50TnVtYmVyOiBwdC5wb2ludE51bWJlciwgCiAgICAgICAgICB4OiBwdC54LAogICAgICAgICAgeTogcHQueQogICAgICAgIH07CiAgICAgICAgLyogCiAgICAgICAgICBUTDtEUjogKEkgdGhpbmspIHdlIGhhdmUgdG8gc2VsZWN0IHRoZSBncmFwaCBkaXYgKGFnYWluKSB0byBhdHRhY2gga2V5cy4uLgogICAgICAgICAgCiAgICAgICAgICBXaHk/IFJlbWVtYmVyIHRoYXQgY3Jvc3N0YWxrIHdpbGwgZHluYW1pY2FsbHkgYWRkL2RlbGV0ZSB0cmFjZXMgCiAgICAgICAgICAoc2VlIHRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uKCkgYmVsb3cpCiAgICAgICAgICBGb3IgdGhpcyByZWFzb24sIHdlIGNhbid0IHNpbXBseSBncmFiIGtleXMgZnJvbSB4LmRhdGEgKGxpa2Ugd2UgZGlkIHByZXZpb3VzbHkpCiAgICAgICAgICBNb3Jlb3Zlciwgd2UgY2FuJ3QgdXNlIF9mdWxsRGF0YSwgc2luY2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUgCiAgICAgICAgICB1bm9mZmljaWFsIGF0dHJpYnV0ZXMuIEl0J3MgdHJ1ZSB0aGF0IGNsaWNrL2hvdmVyIGV2ZW50cyBmaXJlIHdpdGggCiAgICAgICAgICBwdC5kYXRhLCBidXQgZHJhZyBldmVudHMgZG9uJ3QuLi4KICAgICAgICAqLwogICAgICAgIHZhciBnZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsLmlkKTsKICAgICAgICB2YXIgdHJhY2UgPSBnZC5kYXRhW3B0LmN1cnZlTnVtYmVyXTsKICAgICAgICAKICAgICAgICAvLyBBZGQgb3RoZXIgYXR0cmlidXRlcyBoZXJlLCBpZiBkZXNpcmVkCiAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gWyJrZXkiLCAieiJdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBzaW1wbGUga2V5cyBmaXJlIHRoZSB3aG9sZSBrZXkKICAgICAgICAgIG9iai5rZXkgPSB0cmFjZS5rZXk7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsieiJdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzVG9BdHRhY2gubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBhdHRyID0gdHJhY2VbYXR0cnNUb0F0dGFjaFtpXV07CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRyKSkgewogICAgICAgICAgICAgIC8vIHBvaW50TnVtYmVyIGNhbiBiZSBhbiBhcnJheSAoZS5nLiwgaGVhdG1hcHMpCiAgICAgICAgICAgICAgLy8gVE9ETzogY2FuIHBvaW50TnVtYmVyIGJlIDNEPwogICAgICAgICAgICAgIG9ialthdHRyc1RvQXR0YWNoW2ldXSA9IHR5cGVvZiBwdC5wb2ludE51bWJlciA9PT0gIm51bWJlciIgPyAKICAgICAgICAgICAgICAgIGF0dHJbcHQucG9pbnROdW1iZXJdIDogYXR0cltwdC5wb2ludE51bWJlclswXV1bcHQucG9pbnROdW1iZXJbMV1dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqOwogICAgICB9KTsKICAgIH0KICAgIAogICAgLy8gc2VuZCB1c2VyIGlucHV0IGV2ZW50IGRhdGEgdG8gc2hpbnkKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgLy8gaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvem9vbS1ldmVudHMvCiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfcmVsYXlvdXQnLCBmdW5jdGlvbihkKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgKICAgICAgICAgICIuY2xpZW50VmFsdWUtcGxvdGx5X3JlbGF5b3V0LSIgKyB4LnNvdXJjZSwgCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShkKQogICAgICAgICk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X2hvdmVyJywgZnVuY3Rpb24oZCkgewogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoCiAgICAgICAgICAiLmNsaWVudFZhbHVlLXBsb3RseV9ob3Zlci0iICsgeC5zb3VyY2UsIAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZlbnREYXRhV2l0aEtleShkKSkKICAgICAgICApOwogICAgICB9KTsKICAgICAgZ3JhcGhEaXYub24oJ3Bsb3RseV9jbGljaycsIGZ1bmN0aW9uKGQpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKAogICAgICAgICAgIi5jbGllbnRWYWx1ZS1wbG90bHlfY2xpY2stIiArIHguc291cmNlLCAKICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVdpdGhLZXkoZCkpCiAgICAgICAgKTsKICAgICAgfSk7CiAgICAgIGdyYXBoRGl2Lm9uKCdwbG90bHlfc2VsZWN0ZWQnLCBmdW5jdGlvbihkKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgKICAgICAgICAgICIuY2xpZW50VmFsdWUtcGxvdGx5X3NlbGVjdGVkLSIgKyB4LnNvdXJjZSwgCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShldmVudERhdGFXaXRoS2V5KGQpKQogICAgICAgICk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X3VuaG92ZXInLCBmdW5jdGlvbihldmVudERhdGEpIHsKICAgICAgICBTaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtcGxvdGx5X2hvdmVyLSIgKyB4LnNvdXJjZSwgbnVsbCk7CiAgICAgIH0pOwogICAgICBncmFwaERpdi5vbigncGxvdGx5X2RvdWJsZWNsaWNrJywgZnVuY3Rpb24oZXZlbnREYXRhKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLXBsb3RseV9jbGljay0iICsgeC5zb3VyY2UsIG51bGwpOwogICAgICB9KTsKICAgICAgLy8gJ3Bsb3RseV9kZXNlbGVjdCcgaXMgY29kZSBmb3IgZG91YmxlY2xpY2sgd2hlbiBpbiBzZWxlY3QgbW9kZQogICAgICBncmFwaERpdi5vbigncGxvdGx5X2Rlc2VsZWN0JywgZnVuY3Rpb24oZXZlbnREYXRhKSB7CiAgICAgICAgU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLXBsb3RseV9zZWxlY3RlZC0iICsgeC5zb3VyY2UsIG51bGwpOwogICAgICAgIFNoaW55Lm9uSW5wdXRDaGFuZ2UoIi5jbGllbnRWYWx1ZS1wbG90bHlfY2xpY2stIiArIHguc291cmNlLCBudWxsKTsKICAgICAgfSk7CiAgICB9IAogICAgCiAgICAKICAgIC8vIEdpdmVuIGFuIGFycmF5IG9mIHtjdXJ2ZU51bWJlcjogeCwgcG9pbnROdW1iZXI6IHl9IG9iamVjdHMsCiAgICAvLyByZXR1cm4gYSBoYXNoIG9mIHsKICAgIC8vICAgc2V0MToge3ZhbHVlOiBba2V5MSwga2V5MiwgLi4uXSwgX2lzU2ltcGxlS2V5OiBmYWxzZX0sIAogICAgLy8gICBzZXQyOiB7dmFsdWU6IFtrZXkzLCBrZXk0LCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfQogICAgLy8gfQogICAgZnVuY3Rpb24gcG9pbnRzVG9LZXlzKHBvaW50cykgewogICAgICB2YXIga2V5c0J5U2V0ID0ge307CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgCiAgICAgICAgdmFyIHRyYWNlID0gZ3JhcGhEaXYuZGF0YVtwb2ludHNbaV0uY3VydmVOdW1iZXJdOwogICAgICAgIGlmICghdHJhY2Uua2V5IHx8ICF0cmFjZS5zZXQpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBzZXQgZGVmYXVsdHMgZm9yIHRoaXMga2V5U2V0CiAgICAgICAgLy8gbm90ZSB0aGF0IHdlIGRvbid0IHRyYWNrIHRoZSBuZXN0ZWQgcHJvcGVydHkgKHlldCkgc2luY2Ugd2UgYWx3YXlzIAogICAgICAgIC8vIGVtaXQgdGhlIHVuaW9uIC0tIGh0dHA6Ly9jcHNpZXZlcnQuZ2l0aHViLmlvL3RhbGtzLzIwMTYxMjEyYi8jMjEKICAgICAgICBrZXlzQnlTZXRbdHJhY2Uuc2V0XSA9IGtleXNCeVNldFt0cmFjZS5zZXRdIHx8IHsKICAgICAgICAgIHZhbHVlOiBbXSwKICAgICAgICAgIF9pc1NpbXBsZUtleTogdHJhY2UuX2lzU2ltcGxlS2V5CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICAvLyBzZWxlY3RpbmcgYSBwb2ludCBvZiBhICJzaW1wbGUiIHRyYWNlIG1lYW5zOiBzZWxlY3QgdGhlIAogICAgICAgIC8vIGVudGlyZSBrZXkgYXR0YWNoZWQgdG8gdGhpcyB0cmFjZSwgd2hpY2ggaXMgdXNlZnVsIGZvciwKICAgICAgICAvLyBzYXkgY2xpY2tpbmcgb24gYSBmaXR0ZWQgbGluZSB0byBzZWxlY3QgY29ycmVzcG9uZGluZyBvYnNlcnZhdGlvbnMgCiAgICAgICAgdmFyIGtleSA9IHRyYWNlLl9pc1NpbXBsZUtleSA/IHRyYWNlLmtleSA6IHRyYWNlLmtleVtwb2ludHNbaV0ucG9pbnROdW1iZXJdOwogICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA4NjUwMjUvbWVyZ2UtZmxhdHRlbi1hbi1hcnJheS1vZi1hcnJheXMtaW4tamF2YXNjcmlwdAogICAgICAgIHZhciBrZXlGbGF0ID0gdHJhY2UuX2lzTmVzdGVkS2V5ID8gW10uY29uY2F0LmFwcGx5KFtdLCBrZXkpIDoga2V5OwogICAgICAgIAogICAgICAgIC8vIFRPRE86IGJldHRlciB0byBvbmx5IGFkZCBuZXcgdmFsdWVzPwogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdLnZhbHVlID0ga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUuY29uY2F0KGtleUZsYXQpOwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4ga2V5c0J5U2V0OwogICAgfQogICAgCiAgICAKICAgIHguaGlnaGxpZ2h0LmNvbG9yID0geC5oaWdobGlnaHQuY29sb3IgfHwgW107CiAgICAvLyBtYWtlIHN1cmUgaGlnaGxpZ2h0IGNvbG9yIGlzIGFuIGFycmF5CiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeC5oaWdobGlnaHQuY29sb3IpKSB7CiAgICAgIHguaGlnaGxpZ2h0LmNvbG9yID0gW3guaGlnaGxpZ2h0LmNvbG9yXTsKICAgIH0KCiAgICB2YXIgdHJhY2VNYW5hZ2VyID0gbmV3IFRyYWNlTWFuYWdlcihncmFwaERpdiwgeC5oaWdobGlnaHQpOwoKICAgIC8vIEdhdGhlciBhbGwgKnVuaXF1ZSogc2V0cy4KICAgIHZhciBhbGxTZXRzID0gW107CiAgICBmb3IgKHZhciBjdXJ2ZUlkeCA9IDA7IGN1cnZlSWR4IDwgeC5kYXRhLmxlbmd0aDsgY3VydmVJZHgrKykgewogICAgICB2YXIgbmV3U2V0ID0geC5kYXRhW2N1cnZlSWR4XS5zZXQ7CiAgICAgIGlmIChuZXdTZXQpIHsKICAgICAgICBpZiAoYWxsU2V0cy5pbmRleE9mKG5ld1NldCkgPT09IC0xKSB7CiAgICAgICAgICBhbGxTZXRzLnB1c2gobmV3U2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyByZWdpc3RlciBldmVudCBsaXN0ZW5lcnMgZm9yIGFsbCBzZXRzCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFNldHMubGVuZ3RoOyBpKyspIHsKICAgICAgCiAgICAgIHZhciBzZXQgPSBhbGxTZXRzW2ldOwogICAgICB2YXIgc2VsZWN0aW9uID0gbmV3IGNyb3NzdGFsay5TZWxlY3Rpb25IYW5kbGUoc2V0KTsKICAgICAgdmFyIGZpbHRlciA9IG5ldyBjcm9zc3RhbGsuRmlsdGVySGFuZGxlKHNldCk7CiAgICAgIAogICAgICB2YXIgZmlsdGVyQ2hhbmdlID0gZnVuY3Rpb24oZSkgewogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlRmlsdGVyKHNldCwgZS52YWx1ZSk7CiAgICAgIH07CiAgICAgIGZpbHRlci5vbigiY2hhbmdlIiwgZmlsdGVyQ2hhbmdlKTsKICAgICAgCiAgICAgIAogICAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgewogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICBncmFwaERpdi5vbih4LmhpZ2hsaWdodC5vbiwgZnVuY3Rpb24gdHVybk9uKGUpIHsKICAgICAgICBpZiAoZSkgewogICAgICAgICAgdmFyIHNlbGVjdGVkS2V5cyA9IHBvaW50c1RvS2V5cyhlLnBvaW50cyk7CiAgICAgICAgICAvLyBLZXlzIGFyZSBncm91cCBuYW1lcywgdmFsdWVzIGFyZSBhcnJheSBvZiBzZWxlY3RlZCBrZXlzIGZyb20gZ3JvdXAuCiAgICAgICAgICBmb3IgKHZhciBzZXQgaW4gc2VsZWN0ZWRLZXlzKSB7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZEtleXMuaGFzT3duUHJvcGVydHkoc2V0KSkgewogICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXQoc2VsZWN0ZWRLZXlzW3NldF0udmFsdWUsIHtzZW5kZXI6IGVsfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgCiAgICAgIAogICAgICAKICAgICAgCiAgICAgICAgICAKICAgICAgCiAgICAgIAogICAgfQogICAgCiAgfSAvLyBlbmQgb2YgcmVuZGVyVmFsdWUKfSk7IC8vIGVuZCBvZiB3aWRnZXQgZGVmaW5pdGlvbgoKLyoqCiAqIEBwYXJhbSBncmFwaERpdiBUaGUgUGxvdGx5IGdyYXBoIGRpdgogKiBAcGFyYW0gaGlnaGxpZ2h0IEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZm9yIHVwZGF0aW5nIHNlbGVjdGlvbihzKQogKi8KZnVuY3Rpb24gVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCBoaWdobGlnaHQpIHsKICAvLyBUaGUgUGxvdGx5IGdyYXBoIGRpdgogIHRoaXMuZ2QgPSBncmFwaERpdjsKCiAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGRhdGEuCiAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Bsb3RseS9wbG90bHkuanMvcHVsbC8xMTM2IAogIHRoaXMub3JpZ0RhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdyYXBoRGl2LmRhdGEpKTsKICAKICAvLyBhdm9pZCBkb2luZyB0aGlzIG92ZXIgYW5kIG92ZXIKICB0aGlzLm9yaWdPcGFjaXR5ID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICB0aGlzLm9yaWdPcGFjaXR5W2ldID0gdGhpcy5vcmlnRGF0YVtpXS5vcGFjaXR5IHx8IDE7CiAgfQoKICAvLyBrZXk6IGdyb3VwIG5hbWUsIHZhbHVlOiBudWxsIG9yIGFycmF5IG9mIGtleXMgcmVwcmVzZW50aW5nIHRoZQogIC8vIG1vc3QgcmVjZW50bHkgcmVjZWl2ZWQgc2VsZWN0aW9uIGZvciB0aGF0IGdyb3VwLgogIHRoaXMuZ3JvdXBTZWxlY3Rpb25zID0ge307CiAgCiAgLy8gc2VsZWN0aW9uIHBhcmFtZXRlcnMgKGUuZy4sIHRyYW5zaWVudCB2ZXJzdXMgcGVyc2lzdGVudCBzZWxlY3Rpb24pCiAgdGhpcy5oaWdobGlnaHQgPSBoaWdobGlnaHQ7Cn0KClRyYWNlTWFuYWdlci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHsKICAvLyBUT0RPOiBVbmhvb2sgYWxsIGV2ZW50IGhhbmRsZXJzCn07CgpUcmFjZU1hbmFnZXIucHJvdG90eXBlLnVwZGF0ZUZpbHRlciA9IGZ1bmN0aW9uKGdyb3VwLCBrZXlzKSB7CgogIGlmICh0eXBlb2Yoa2V5cykgPT09ICJ1bmRlZmluZWQiIHx8IGtleXMgPT09IG51bGwpIHsKICAgIAogICAgdGhpcy5nZC5kYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9yaWdEYXRhKSk7CiAgICAKICB9IGVsc2UgewogIAogICAgdmFyIHRyYWNlcyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB0cmFjZSA9IHRoaXMub3JpZ0RhdGFbaV07CiAgICAgIGlmICghdHJhY2Uua2V5IHx8IHRyYWNlLnNldCAhPT0gZ3JvdXApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKHRyYWNlKTsKICAgICAgdmFyIG1hdGNoZXMgPSBtYXRjaEZ1bmModHJhY2Uua2V5LCBrZXlzKTsKICAgICAgCiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHsKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgLy8gc3Vic2V0QXJyYXlBdHRycyBkb2Vzbid0IG11dGF0ZSB0cmFjZSAoaXQgbWFrZXMgYSBtb2RpZmllZCBjbG9uZSkKICAgICAgICAgIHRyYWNlID0gc3Vic2V0QXJyYXlBdHRycyh0cmFjZSwgbWF0Y2hlcyk7CiAgICAgICAgfQogICAgICAgIHRyYWNlcy5wdXNoKHRyYWNlKTsKICAgICAgfQogICAgfQogIH0KICAKICB0aGlzLmdkLmRhdGEgPSB0cmFjZXM7CiAgUGxvdGx5LnJlZHJhdyh0aGlzLmdkKTsKICAKICAvLyBOT1RFOiB3ZSBwdXJwb3NlbHkgZG8gX25vdF8gcmVzdG9yZSBzZWxlY3Rpb24ocyksIHNpbmNlIG9uIGZpbHRlciwKICAvLyBheGlzIGxpa2VseSB3aWxsIHVwZGF0ZSwgY2hhbmdpbmcgdGhlIHBpeGVsIC0+IGRhdGEgbWFwcGluZywgbGVhZGluZyAKICAvLyB0byBhIGxpa2VseSBtaXNtYXRjaCBpbiB0aGUgYnJ1c2ggb3V0bGluZSBhbmQgaGlnaGxpZ2h0ZWQgbWFya3MKICAKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKICAKICBpZiAoa2V5cyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShrZXlzKSkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGtleXMgYXJndW1lbnQ7IG51bGwgb3IgYXJyYXkgZXhwZWN0ZWQiKTsKICB9CiAgCiAgLy8gaWYgc2VsZWN0aW9uIGhhcyBiZWVuIGNsZWFyZWQsIG9yIGlmIHRoaXMgaXMgdHJhbnNpZW50CiAgLy8gc2VsZWN0aW9uLCBkZWxldGUgdGhlICJzZWxlY3Rpb24gdHJhY2VzIgogIHZhciBuTmV3VHJhY2VzID0gdGhpcy5nZC5kYXRhLmxlbmd0aCAtIHRoaXMub3JpZ0RhdGEubGVuZ3RoOwogIGlmIChrZXlzID09PSBudWxsIHx8ICF0aGlzLmhpZ2hsaWdodC5wZXJzaXN0ZW50ICYmIG5OZXdUcmFjZXMgPiAwKSB7CiAgICB2YXIgdHJhY2VzVG9SZW1vdmUgPSBbXTsKICAgIGZvciAodmFyIGkgPSB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSA8IHRoaXMuZ2QuZGF0YS5sZW5ndGg7IGkrKykgewogICAgICB0cmFjZXNUb1JlbW92ZS5wdXNoKGkpOwogICAgfQogICAgUGxvdGx5LmRlbGV0ZVRyYWNlcyh0aGlzLmdkLCB0cmFjZXNUb1JlbW92ZSk7CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSBrZXlzOwogIH0gZWxzZSB7CiAgICAvLyBhZGQgdG8gdGhlIGdyb3VwU2VsZWN0aW9uLCByYXRoZXIgdGhhbiBvdmVyd3JpdGluZyBpdAogICAgLy8gVE9ETzogY2FuIHRoaXMgYmUgcmVtb3ZlZD8KICAgIHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXSA9IHRoaXMuZ3JvdXBTZWxlY3Rpb25zW2dyb3VwXSB8fCBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgayA9IGtleXNbaV07CiAgICAgIGlmICh0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0uaW5kZXhPZihrKSA8IDApIHsKICAgICAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0ucHVzaChrKTsKICAgICAgfQogICAgfQogIH0KICAKICBpZiAoa2V5cyA9PT0gbnVsbCkgewogICAgCiAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7Im9wYWNpdHkiOiB0aGlzLm9yaWdPcGFjaXR5fSk7CiAgICAKICB9IGVsc2UgaWYgKGtleXMubGVuZ3RoID49IDEpIHsKICAgIAogICAgLy8gcGxhY2Vob2xkZXIgZm9yIG5ldyAic2VsZWN0aW9uIHRyYWNlcyIKICAgIHZhciB0cmFjZXMgPSBbXTsKICAgIC8vIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIFIvaGlnaGxpZ2h0LlIKICAgIHZhciBzZWxlY3Rpb25Db2xvdXIgPSBjcm9zc3RhbGsuZ3JvdXAoZ3JvdXApLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkgfHwgCiAgICAgIHRoaXMuaGlnaGxpZ2h0LmNvbG9yWzBdOwoKICAgIC8vIHNlbGVjdGlvbiBicnVzaCBhdHRyaWJ1dGVzCiAgICB2YXIgc2VsZWN0QXR0cnMgPSBPYmplY3Qua2V5cyh0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZCk7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9yaWdEYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIC8vIFRPRE86IHRyeSB1c2luZyBMaWIuZXh0ZW5kRmxhdCgpIGFzIGRvbmUgaW4gIAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgICAgIHZhciB0cmFjZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5nZC5kYXRhW2ldKSk7CiAgICAgIGlmICghdHJhY2Uua2V5IHx8IHRyYWNlLnNldCAhPT0gZ3JvdXApIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBHZXQgc29ydGVkIGFycmF5IG9mIG1hdGNoaW5nIGluZGljZXMgaW4gdHJhY2Uua2V5CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIC8vIElmIHRoaXMgaXMgYSAic2ltcGxlIiBrZXksIHRoYXQgbWVhbnMgc2VsZWN0IHRoZSBlbnRpcmUgdHJhY2UKICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgLy8gQXBwbHkgc2VsZWN0aW9uIGJydXNoIGF0dHJpYnV0ZXMgKHN1cHBsaWVkIGZyb20gUikKICAgICAgICAvLyBUT0RPOiBpdCB3b3VsZCBiZSBuZWF0IHRvIGhhdmUgYSBkcm9wZG93biB0byBkeW5hbWljYWxseSBzcGVjaWZ5IHRoZXNlCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzZWxlY3RBdHRycy5sZW5ndGg7IGorKykgewogICAgICAgICAgdmFyIGF0dHIgPSBzZWxlY3RBdHRyc1tqXTsKICAgICAgICAgIHRyYWNlW2F0dHJdID0gdGhpcy5oaWdobGlnaHQuc2VsZWN0ZWRbYXR0cl07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGlmIGl0IGlzIGRlZmluZWQsIG92ZXJyaWRlIGNvbG9yIHdpdGggdGhlICJkeW5hbWljIGJydXNoIGNvbG9yIiIKICAgICAgICAvLyBUT0RPOiBEUlkgdGhpcyB1cAogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICAgIAogICAgICAgICAgLy8gYWRvcHQgYW55IHVzZXItZGVmaW5lZCBzdHlsaW5nIGZvciB0aGUgc2VsZWN0aW9uCiAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLmhpZ2hsaWdodC5zZWxlY3RlZC5tYXJrZXIgfHwge307CiAgICAgICAgICB2YXIgYXR0cnMgPSBPYmplY3Qua2V5cyhzZWxlY3RlZCk7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHRyYWNlLm1hcmtlclthdHRyc1tqXV0gPSBzZWxlY3RlZFthdHRyc1tqXV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChkLmxpbmUpIHsKICAgICAgICAgIHRyYWNlLmxpbmUgPSB0cmFjZS5saW5lIHx8IHt9OwogICAgICAgICAgdHJhY2UubGluZS5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UubGluZS5jb2xvciB8fCBkLmxpbmUuY29sb3I7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkb3B0IGFueSB1c2VyLWRlZmluZWQgc3R5bGluZyBmb3IgdGhlIHNlbGVjdGlvbgogICAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5oaWdobGlnaHQuc2VsZWN0ZWQubGluZSB8fCB7fTsKICAgICAgICAgIHZhciBhdHRycyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkKTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdHJhY2UubGluZVthdHRyc1tqXV0gPSBzZWxlY3RlZFthdHRyc1tqXV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChkLnRleHRmb250KSB7CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udCA9IHRyYWNlLnRleHRmb250IHx8IHt9OwogICAgICAgICAgdHJhY2UudGV4dGZvbnQuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLnRleHRmb250LmNvbG9yIHx8IGQudGV4dGZvbnQuY29sb3I7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkb3B0IGFueSB1c2VyLWRlZmluZWQgc3R5bGluZyBmb3IgdGhlIHNlbGVjdGlvbgogICAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5oaWdobGlnaHQuc2VsZWN0ZWQudGV4dGZvbnQgfHwge307CiAgICAgICAgICB2YXIgYXR0cnMgPSBPYmplY3Qua2V5cyhzZWxlY3RlZCk7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHRyYWNlLnRleHRmb250W2F0dHJzW2pdXSA9IHNlbGVjdGVkW2F0dHJzW2pdXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlcy5wdXNoKHRyYWNlKTsKICAgICAgfQogICAgfQogICAgCiAgICBpZiAodHJhY2VzLmxlbmd0aCA+IDApIHsKICAgICAgCiAgICAgIFBsb3RseS5hZGRUcmFjZXModGhpcy5nZCwgdHJhY2VzKS50aGVuKGZ1bmN0aW9uKGdkKSB7CiAgICAgICAgLy8gaW5jcmVtZW50YWxseSBhZGQgc2VsZWN0aW9uIHRyYWNlcyB0byBmcmFtZXMKICAgICAgICAvLyAodGhpcyBpcyBoZWF2aWx5IGluc3BpcmVkIGJ5IFBsb3RseS5QbG90cy5tb2RpZnlGcmFtZXMoKSAKICAgICAgICAvLyBpbiBzcmMvcGxvdHMvcGxvdHMuanMpCiAgICAgICAgdmFyIF9oYXNoID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7CiAgICAgICAgdmFyIF9mcmFtZXMgPSBnZC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyB8fCBbXTsKICAgICAgICAKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9mcmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIAogICAgICAgICAgLy8gYWRkIHRvIF9mcmFtZXNbaV0udHJhY2VzICppZiogdGhpcyBmcmFtZSByZWZlcmVuY2VzIHNlbGVjdGVkIHRyYWNlKHMpCiAgICAgICAgICB2YXIgbmV3SW5kaWNlcyA9IFtdOwogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0cmFjZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgdmFyIHRyID0gdHJhY2VzW2pdOwogICAgICAgICAgICBpZiAoX2ZyYW1lc1tpXS50cmFjZXMuaW5kZXhPZih0ci5fb3JpZ2luYWxJbmRleCkgPiAtMSkgewogICAgICAgICAgICAgIG5ld0luZGljZXMucHVzaCh0ci5fbmV3SW5kZXgpOwogICAgICAgICAgICAgIF9mcmFtZXNbaV0udHJhY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLi4uCiAgICAgICAgICBpZiAobmV3SW5kaWNlcy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIHZhciBjdHIgPSAwOwogICAgICAgICAgdmFyIG5GcmFtZVRyYWNlcyA9IF9mcmFtZXNbaV0uZGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbkZyYW1lVHJhY2VzOyBqKyspIHsKICAgICAgICAgICAgdmFyIGZyYW1lVHJhY2UgPSBfZnJhbWVzW2ldLmRhdGFbal07CiAgICAgICAgICAgIGlmICghZnJhbWVUcmFjZS5rZXkgfHwgZnJhbWVUcmFjZS5zZXQgIT09IGdyb3VwKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmMoZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKGZyYW1lVHJhY2Uua2V5LCBrZXlzKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBpZiAoIXRyYWNlLl9pc1NpbXBsZUtleSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZSA9IHN1YnNldEFycmF5QXR0cnMoZnJhbWVUcmFjZSwgbWF0Y2hlcyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBkID0gZ2QuX2Z1bGxEYXRhW25ld0luZGljZXNbY3RyXV07CiAgICAgICAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICAgICAgICBmcmFtZVRyYWNlLm1hcmtlciA9IGQubWFya2VyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC5saW5lKSB7CiAgICAgICAgICAgICAgICBmcmFtZVRyYWNlLmxpbmUgPSBkLmxpbmU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChkLnRleHRmb250KSB7CiAgICAgICAgICAgICAgICBmcmFtZVRyYWNlLnRleHRmb250ID0gZC50ZXh0Zm9udDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY3RyID0gY3RyICsgMTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLmRhdGEucHVzaChmcmFtZVRyYWNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAvLyB1cGRhdGUgZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2gKICAgICAgICAgIF9oYXNoW19mcmFtZXNbaV0ubmFtZV0gPSBfZnJhbWVzW2ldOwogICAgICAgIH0KICAgICAgCiAgICAgIH0pOwogICAgICAKICAgICAgLy8gZGltIHRyYWNlcyB0aGF0IGhhdmUgYSBzZXQgbWF0Y2hpbmcgdGhlIHNldCBvZiBzZWxlY3Rpb24gc2V0cwogICAgICB2YXIgdHJhY2VzVG9EaW0gPSBbXSwKICAgICAgICAgIG9wYWNpdGllcyA9IFtdLAogICAgICAgICAgc2V0cyA9IE9iamVjdC5rZXlzKHRoaXMuZ3JvdXBTZWxlY3Rpb25zKSwKICAgICAgICAgIG4gPSB0aGlzLm9yaWdEYXRhLmxlbmd0aDsKICAgICAgICAgIAogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHZhciBvcGFjaXR5ID0gdGhpcy5vcmlnT3BhY2l0eVtpXSB8fCAxOwogICAgICAgIC8vIGhhdmUgd2UgYWxyZWFkeSBkaW1tZWQgdGhpcyB0cmFjZT8gT3IgaXMgdGhpcyBldmVuIHdvcnRoIGRvaW5nPwogICAgICAgIGlmIChvcGFjaXR5ICE9PSB0aGlzLmdkLl9mdWxsRGF0YVtpXS5vcGFjaXR5IHx8IHRoaXMuaGlnaGxpZ2h0Lm9wYWNpdHlEaW0gPT09IDEpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICAvLyBpcyB0aGlzIHNldCBhbiBlbGVtZW50IG9mIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHM/CiAgICAgICAgdmFyIG1hdGNoZXMgPSBmaW5kTWF0Y2hlcyhzZXRzLCBbdGhpcy5nZC5kYXRhW2ldLnNldF0pOwogICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCkgewogICAgICAgICAgdHJhY2VzVG9EaW0ucHVzaChpKTsKICAgICAgICAgIG9wYWNpdGllcy5wdXNoKG9wYWNpdHkgKiB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGlmICh0cmFjZXNUb0RpbS5sZW5ndGggPiAwKSB7CiAgICAgICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5Ijogb3BhY2l0aWVzfSwgdHJhY2VzVG9EaW0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQo="></script>
<script src="data:application/x-javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw=="></script>
<link href="data:text/css;charset=utf-8,%0A%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20%2D30px%3B%0Amargin%2Dright%3A%20%2D30px%3B%0Awhite%2Dspace%3A%20normal%3B%0A%7D%0A%0Abody%20%3E%20%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%20%7B%0Amargin%2Dleft%3A%20auto%3B%0Amargin%2Dright%3A%20auto%3B%0A%7D%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Apadding%2Dright%3A%2012px%3B%0Avertical%2Dalign%3A%20top%3B%0A%7D%0A%40media%20only%20screen%20and%20%28max%2Dwidth%3A480px%29%20%7B%0A%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%20%7B%0Adisplay%3A%20block%3B%0Apadding%2Dright%3A%20inherit%3B%0A%7D%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,IWZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dmFyIGo9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpO3Rocm93IGouY29kZT0iTU9EVUxFX05PVF9GT1VORCIsan12YXIgaz1jW2ddPXtleHBvcnRzOnt9fTtiW2ddWzBdLmNhbGwoay5leHBvcnRzLGZ1bmN0aW9uKGEpe3ZhciBjPWJbZ11bMV1bYV07cmV0dXJuIGUoYz9jOmEpfSxrLGsuZXhwb3J0cyxhLGIsYyxkKX1yZXR1cm4gY1tnXS5leHBvcnRzfWZvcih2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxnPTA7ZzxkLmxlbmd0aDtnKyspZShkW2ddKTtyZXR1cm4gZX0oezE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLl90eXBlcz17fSx0aGlzLl9zZXE9MH1yZXR1cm4gZShhLFt7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl90eXBlc1thXTtjfHwoYz10aGlzLl90eXBlc1thXT17fSk7dmFyIGQ9InN1YiIrdGhpcy5fc2VxKys7cmV0dXJuIGNbZF09YixkfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3R5cGVzW2FdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBiKXtmb3IodmFyIGQgaW4gYylpZihjLmhhc093blByb3BlcnR5KGQpJiZjW2RdPT09YilyZXR1cm4gZGVsZXRlIGNbZF0sZDtyZXR1cm4hMX1pZigic3RyaW5nIj09dHlwZW9mIGIpcmV0dXJuISghY3x8IWNbYl0pJiYoZGVsZXRlIGNbYl0sYik7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGxpc3RlbmVyIil9fSx7a2V5OiJ0cmlnZ2VyIix2YWx1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fdHlwZXNbYV07Zm9yKHZhciBlIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShlKSYmZFtlXS5jYWxsKGMsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWZ9LHt9XSwyOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEmJmEuX19lc01vZHVsZT9hOntkZWZhdWx0OmF9fWZ1bmN0aW9uIGYoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBnKGEpe3ZhciBiPWEudmFyKCJmaWx0ZXJzZXQiKSxjPWIuZ2V0KCk7cmV0dXJuIGN8fChjPW5ldyBtLmRlZmF1bHQsYi5zZXQoYykpLGN9ZnVuY3Rpb24gaCgpe3JldHVybiByKyt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMuRmlsdGVySGFuZGxlPXZvaWQgMDt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxqPWEoIi4vZXZlbnRzIiksaz1lKGopLGw9YSgiLi9maWx0ZXJzZXQiKSxtPWUobCksbj1hKCIuL2dyb3VwIiksbz1lKG4pLHA9YSgiLi91dGlsIikscT1kKHApLHI9MTtjLkZpbHRlckhhbmRsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgay5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5faWQ9ImZpbHRlciIraCgpLHRoaXMuc2V0R3JvdXAoYil9cmV0dXJuIGkoYSxbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYodGhpcy5fZ3JvdXAhPT1hJiYodGhpcy5fZ3JvdXB8fGEpJiYodGhpcy5fZmlsdGVyVmFyJiYodGhpcy5fZmlsdGVyVmFyLm9mZigiY2hhbmdlIix0aGlzLl92YXJPbkNoYW5nZVN1YiksdGhpcy5jbGVhcigpLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZmlsdGVyVmFyPW51bGwsdGhpcy5fZmlsdGVyU2V0PW51bGwpLHRoaXMuX2dyb3VwPWEsYSkpe2E9KDAsby5kZWZhdWx0KShhKSx0aGlzLl9maWx0ZXJTZXQ9ZyhhKSx0aGlzLl9maWx0ZXJWYXI9KDAsby5kZWZhdWx0KShhKS52YXIoImZpbHRlciIpO3ZhciBjPXRoaXMuX2ZpbHRlclZhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gcS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShhKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGEsYil7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxhKSx0aGlzLl9vbkNoYW5nZShiKSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihhLGIpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihhKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGEpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksYX0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGE9PT1iPzA6YTxiPy0xOmE+Yj8xOnZvaWQgMH1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksZz1hKCIuL3V0aWwiKSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2QodGhpcyxhKSx0aGlzLnJlc2V0KCl9cmV0dXJuIGYoYSxbe2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faGFuZGxlcz17fSx0aGlzLl9rZXlzPXt9LHRoaXMuX3ZhbHVlPW51bGwsdGhpcy5fYWN0aXZlSGFuZGxlcz0wfX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihhLGIpe251bGwhPT1iJiYoYj1iLnNsaWNlKDApLGIuc29ydChlKSk7dmFyIGM9KDAsZy5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbYV0sYiksZD1jLmFkZGVkLGY9Yy5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbYV09Yjtmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl0aGlzLl9rZXlzW2RbaF1dPSh0aGlzLl9rZXlzW2RbaF1dfHwwKSsxO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7aSsrKXRoaXMuX2tleXNbZltpXV0tLTt0aGlzLl91cGRhdGVWYWx1ZShiKX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyxiPU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09Yil0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPXRoaXMuX2tleXNbYVtjXV07ZD09PWImJnRoaXMuX3ZhbHVlLnB1c2goYVtjXSl9fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbihhKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXMuX2hhbmRsZXNbYV0pe3ZhciBiPXRoaXMuX2hhbmRsZXNbYV07Ynx8KGI9W10pO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXRoaXMuX2tleXNbYltjXV0tLTtkZWxldGUgdGhpcy5faGFuZGxlc1thXSx0aGlzLl91cGRhdGVWYWx1ZSgpfX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWV9fSx7a2V5OiJfYWxsS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGE9T2JqZWN0LmtleXModGhpcy5fa2V5cyk7cmV0dXJuIGEuc29ydChlKSxhfX1dKSxhfSgpO2MuZGVmYXVsdD1ofSx7Ii4vdXRpbCI6MTF9XSw0OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEsYil7aWYoIShhIGluc3RhbmNlb2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZihhKXtpZihhJiYic3RyaW5nIj09dHlwZW9mIGEpcmV0dXJuIGsuaGFzT3duUHJvcGVydHkoYSl8fChrW2FdPW5ldyBsKGEpKSxrW2FdO2lmKCJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2YgYT8idW5kZWZpbmVkIjpoKGEpKSYmYS5fdmFycyYmYS52YXIpcmV0dXJuIGE7aWYoQXJyYXkuaXNBcnJheShhKSYmMT09YS5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgYVswXSlyZXR1cm4gZihhWzBdKTt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZ3JvdXBOYW1lIGFyZ3VtZW50Iil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZGVmYXVsdD1mO3ZhciBpPWEoIi4vdmFyIiksaj1kKGkpO2IuX19jcm9zc3RhbGtfZ3JvdXBzPWIuX19jcm9zc3RhbGtfZ3JvdXBzfHx7fTt2YXIgaz1iLl9fY3Jvc3N0YWxrX2dyb3VwcyxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtlKHRoaXMsYSksdGhpcy5uYW1lPWIsdGhpcy5fdmFycz17fX1yZXR1cm4gZyhhLFt7a2V5OiJ2YXIiLHZhbHVlOmZ1bmN0aW9uKGEpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoYSl8fCh0aGlzLl92YXJzW2FdPW5ldyBqLmRlZmF1bHQodGhpcyxhKSksdGhpcy5fdmFyc1thXX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFyIG5hbWUiKTtyZXR1cm4gdGhpcy5fdmFycy5oYXNPd25Qcm9wZXJ0eShhKX19XSksYX0oKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL3ZhciI6MTJ9XSw1OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfX1mdW5jdGlvbiBlKGEpe3JldHVybiBrLnZhcihhKX1mdW5jdGlvbiBmKGEpe3JldHVybiBrLmhhcyhhKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGc9YSgiLi9ncm91cCIpLGg9ZChnKSxpPWEoIi4vc2VsZWN0aW9uIiksaj1hKCIuL2ZpbHRlciIpO2EoIi4vaW5wdXQiKSxhKCIuL2lucHV0X3NlbGVjdGl6ZSIpLGEoIi4vaW5wdXRfY2hlY2tib3hncm91cCIpLGEoIi4vaW5wdXRfc2xpZGVyIik7dmFyIGs9KDAsaC5kZWZhdWx0KSgiZGVmYXVsdCIpO2IuU2hpbnkmJmIuU2hpbnkuYWRkQ3VzdG9tTWVzc2FnZUhhbmRsZXIoInVwZGF0ZS1jbGllbnQtdmFsdWUiLGZ1bmN0aW9uKGEpeyJzdHJpbmciPT10eXBlb2YgYS5ncm91cD8oMCxoLmRlZmF1bHQpKGEuZ3JvdXApLnZhcihhLm5hbWUpLnNldChhLnZhbHVlKTplKGEubmFtZSkuc2V0KGEudmFsdWUpfSk7dmFyIGw9e2dyb3VwOmguZGVmYXVsdCx2YXI6ZSxoYXM6ZixTZWxlY3Rpb25IYW5kbGU6aS5TZWxlY3Rpb25IYW5kbGUsRmlsdGVySGFuZGxlOmouRmlsdGVySGFuZGxlfTtjLmRlZmF1bHQ9bCxiLmNyb3NzdGFsaz1sfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2dyb3VwIjo0LCIuL2lucHV0Ijo2LCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiOjcsIi4vaW5wdXRfc2VsZWN0aXplIjo4LCIuL2lucHV0X3NsaWRlciI6OSwiLi9zZWxlY3Rpb24iOjEwfV0sNjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtpW2IuY2xhc3NOYW1lXT1iLGEuZG9jdW1lbnQmJiJjb21wbGV0ZSIhPT1hLmRvY3VtZW50LnJlYWR5U3RhdGU/aChmdW5jdGlvbigpe2QoKX0pOmEuZG9jdW1lbnQmJnNldFRpbWVvdXQoZCwxMDApfWZ1bmN0aW9uIGQoKXtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPWlbYV07aCgiLiIrYi5jbGFzc05hbWUpLm5vdCgiLmNyb3NzdGFsay1pbnB1dC1ib3VuZCIpLmVhY2goZnVuY3Rpb24oYSxjKXtnKGIsYyl9KX0pfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIGEucmVwbGFjZSgvKFshIiMkJSYnKCkqKywuXC86Ozw9Pj9AXFtcXFxdXmB7fH1+XSkvZywiXFwkMSIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9aChhKTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGIuaGFzQ2xhc3MoYykmJiFiLmhhc0NsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKSl7dmFyIGQ9aVtjXTtnKGQsYSl9fSl9ZnVuY3Rpb24gZyhhLGIpe3ZhciBjPWgoYikuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIitlKGIuaWQpKyInXSIpLGQ9SlNPTi5wYXJzZShjWzBdLmlubmVyVGV4dCksZj1hLmZhY3RvcnkoYixkKTtoKGIpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIsZiksaChiKS5hZGRDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIil9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGMucmVnaXN0ZXI9Yjt2YXIgaD1hLmpRdWVyeSxpPXt9O2EuU2hpbnkmJiFmdW5jdGlvbigpe3ZhciBiPW5ldyBhLlNoaW55LklucHV0QmluZGluZyxjPWEualF1ZXJ5O2MuZXh0ZW5kKGIse2ZpbmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMoYSkuZmluZCgiLmNyb3NzdGFsay1pbnB1dCIpfSxpbml0aWFsaXplOmZ1bmN0aW9uKGEpe2MoYSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHxmKGEpfSxnZXRJZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5pZH0sZ2V0VmFsdWU6ZnVuY3Rpb24oYSl7fSxzZXRWYWx1ZTpmdW5jdGlvbihhLGIpe30scmVjZWl2ZU1lc3NhZ2U6ZnVuY3Rpb24oYSxiKXt9LHN1YnNjcmliZTpmdW5jdGlvbihhLGIpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikucmVzdW1lKCl9LHVuc3Vic2NyaWJlOmZ1bmN0aW9uKGEpe2MoYSkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIikuc3VzcGVuZCgpfX0pLGEuU2hpbnkuaW5wdXRCaW5kaW5ncy5yZWdpc3RlcihiLCJjcm9zc3RhbGsuaW5wdXRCaW5kaW5nIil9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7KGZ1bmN0aW9uKGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEpe2lmKGEmJmEuX19lc01vZHVsZSlyZXR1cm4gYTt2YXIgYj17fTtpZihudWxsIT1hKWZvcih2YXIgYyBpbiBhKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGMpJiYoYltjXT1hW2NdKTtyZXR1cm4gYi5kZWZhdWx0PWEsYn12YXIgZD1hKCIuL2lucHV0IiksZT1jKGQpLGY9YSgiLi9maWx0ZXIiKSxnPWIualF1ZXJ5O2UucmVnaXN0ZXIoe2NsYXNzTmFtZToiY3Jvc3N0YWxrLWlucHV0LWNoZWNrYm94Z3JvdXAiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1uZXcgZi5GaWx0ZXJIYW5kbGUoYi5ncm91cCksZD12b2lkIDAsZT1nKGEpO3JldHVybiBlLm9uKCJjaGFuZ2UiLCJpbnB1dFt0eXBlPSdjaGVja2JveCddIixmdW5jdGlvbigpe3ZhciBhPWUuZmluZCgiaW5wdXRbdHlwZT0nY2hlY2tib3gnXTpjaGVja2VkIik7MD09PWEubGVuZ3RoPyhkPW51bGwsYy5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgZT17fTthLmVhY2goZnVuY3Rpb24oKXtiLm1hcFt0aGlzLnZhbHVlXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2VbYV09ITB9KX0pO3ZhciBmPU9iamVjdC5rZXlzKGUpO2Yuc29ydCgpLGQ9ZixjLnNldChmKX0oKX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7Yy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtkJiZjLnNldChkKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sODpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9dmFyIGQ9YSgiLi9pbnB1dCIpLGU9YyhkKSxmPWEoIi4vdXRpbCIpLGc9YyhmKSxoPWEoIi4vZmlsdGVyIiksaT1iLmpRdWVyeTtlLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zZWxlY3QiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1be3ZhbHVlOiIiLGxhYmVsOiIoQWxsKSJ9XSxkPWcuZGF0YWZyYW1lVG9EMyhiLml0ZW1zKSxlPXtvcHRpb25zOmMuY29uY2F0KGQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0sZj1pKGEpLmZpbmQoInNlbGVjdCIpWzBdLGo9aShmKS5zZWxlY3RpemUoZSlbMF0uc2VsZWN0aXplLGs9bmV3IGguRmlsdGVySGFuZGxlKGIuZ3JvdXApLGw9dm9pZCAwO3JldHVybiBqLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7MD09PWouaXRlbXMubGVuZ3RoPyhsPW51bGwsay5jbGVhcigpKTohZnVuY3Rpb24oKXt2YXIgYT17fTtqLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oYyl7Yi5tYXBbY10uZm9yRWFjaChmdW5jdGlvbihiKXthW2JdPSEwfSl9KTt2YXIgYz1PYmplY3Qua2V5cyhhKTtjLnNvcnQoKSxsPWMsay5zZXQoYyl9KCl9KSx7c3VzcGVuZDpmdW5jdGlvbigpe2suY2xlYXIoKX0scmVzdW1lOmZ1bmN0aW9uKCl7bCYmay5zZXQobCl9fX19KX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9pbnB1dCI6NiwiLi91dGlsIjoxMX1dLDk6W2Z1bmN0aW9uKGEsYixjKXsoZnVuY3Rpb24oYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoYSl7aWYoYSYmYS5fX2VzTW9kdWxlKXJldHVybiBhO3ZhciBiPXt9O2lmKG51bGwhPWEpZm9yKHZhciBjIGluIGEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYykmJihiW2NdPWFbY10pO3JldHVybiBiLmRlZmF1bHQ9YSxifWZ1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9YS50b1N0cmluZygpO2MubGVuZ3RoPGI7KWM9IjAiK2M7cmV0dXJuIGN9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIERhdGU/YS5nZXRVVENGdWxsWWVhcigpKyItIitkKGEuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitkKGEuZ2V0VVRDRGF0ZSgpLDIpOm51bGx9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7dmFyIGM9W10sZD0hMCxlPSExLGY9dm9pZCAwO3RyeXtmb3IodmFyIGcsaD1hW1N5bWJvbC5pdGVyYXRvcl0oKTshKGQ9KGc9aC5uZXh0KCkpLmRvbmUpJiYoYy5wdXNoKGcudmFsdWUpLCFifHxjLmxlbmd0aCE9PWIpO2Q9ITApO31jYXRjaChhKXtlPSEwLGY9YX1maW5hbGx5e3RyeXshZCYmaC5yZXR1cm4mJmgucmV0dXJuKCl9ZmluYWxseXtpZihlKXRocm93IGZ9fXJldHVybiBjfXJldHVybiBmdW5jdGlvbihiLGMpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGI7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChiKSlyZXR1cm4gYShiLGMpO3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19KCksZz1hKCIuL2lucHV0IiksaD1jKGcpLGk9YSgiLi9maWx0ZXIiKSxqPWIualF1ZXJ5LGs9Yi5zdHJmdGltZTtoLnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKCl7dmFyIGE9aC5kYXRhKCJpb25SYW5nZVNsaWRlciIpLnJlc3VsdCxiPXZvaWQgMCxjPWguZGF0YSgiZGF0YS10eXBlIik7cmV0dXJuIGI9ImRhdGUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4gZShuZXcgRGF0ZSgrYSkpfToiZGF0ZXRpbWUiPT09Yz9mdW5jdGlvbihhKXtyZXR1cm4rYS8xZTN9OmZ1bmN0aW9uKGEpe3JldHVybithfSwiZG91YmxlIj09PWguZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5vcHRpb25zLnR5cGU/W2IoYS5mcm9tKSxiKGEudG8pXTpiKGEuZnJvbSl9dmFyIGQ9bmV3IGkuRmlsdGVySGFuZGxlKGIuZ3JvdXApLGc9e30saD1qKGEpLmZpbmQoImlucHV0IiksbD1oLmRhdGEoImRhdGEtdHlwZSIpLG09aC5kYXRhKCJ0aW1lLWZvcm1hdCIpLG49dm9pZCAwO2lmKCJkYXRlIj09PWwpbj1rLnV0YygpLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9O2Vsc2UgaWYoImRhdGV0aW1lIj09PWwpe3ZhciBvPWguZGF0YSgidGltZXpvbmUiKTtuPW8/ay50aW1lem9uZShvKTprLGcucHJldHRpZnk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4obSxuZXcgRGF0ZShhKSl9fWguaW9uUmFuZ2VTbGlkZXIoZyk7dmFyIHA9bnVsbDtyZXR1cm4gaC5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihhKXtpZighaC5kYXRhKCJ1cGRhdGluZyIpJiYhaC5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciBlPWMoKSxnPWYoZSwyKSxpPWdbMF0saj1nWzFdLGs9W10sbD0wO2w8Yi52YWx1ZXMubGVuZ3RoO2wrKyl7dmFyIG09Yi52YWx1ZXNbbF07bT49aSYmbTw9aiYmay5wdXNoKGIua2V5c1tsXSl9ay5zb3J0KCksZC5zZXQoaykscD1rfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7ZC5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtwJiZkLnNldChwKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtpZihhJiZhLl9fZXNNb2R1bGUpcmV0dXJuIGE7dmFyIGI9e307aWYobnVsbCE9YSlmb3IodmFyIGMgaW4gYSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGJbY109YVtjXSk7cmV0dXJuIGIuZGVmYXVsdD1hLGJ9ZnVuY3Rpb24gZShhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZihhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxjLlNlbGVjdGlvbkhhbmRsZT12b2lkIDA7dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEsYil7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY107ZC5lbnVtZXJhYmxlPWQuZW51bWVyYWJsZXx8ITEsZC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGQmJihkLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLmtleSxkKX19cmV0dXJuIGZ1bmN0aW9uKGIsYyxkKXtyZXR1cm4gYyYmYShiLnByb3RvdHlwZSxjKSxkJiZhKGIsZCksYn19KCksaD1hKCIuL2V2ZW50cyIpLGk9ZShoKSxqPWEoIi4vZ3JvdXAiKSxrPWUoaiksbD1hKCIuL3V0aWwiKSxtPWQobCk7Yy5TZWxlY3Rpb25IYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKCl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtmKHRoaXMsYSksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IG0uU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPW0uZXh0ZW5kKHtzZW5kZXI6dGhpc30sYyksdGhpcy5zZXRHcm91cChiKX1yZXR1cm4gZyhhLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztpZih0aGlzLl9ncm91cCE9PWEmJih0aGlzLl9ncm91cHx8YSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1hLGEpKXt0aGlzLl92YXI9KDAsay5kZWZhdWx0KShhKS52YXIoInNlbGVjdGlvbiIpO3ZhciBjPXRoaXMuX3Zhci5vbigiY2hhbmdlIixmdW5jdGlvbihhKXtiLl9ldmVudFJlbGF5LnRyaWdnZXIoImNoYW5nZSIsYSxiKX0pO3RoaXMuX3Zhck9uQ2hhbmdlU3ViPWN9fX0se2tleToiX21lcmdlRXh0cmFJbmZvIix2YWx1ZTpmdW5jdGlvbihhKXtyZXR1cm4gbS5leHRlbmQoe30sdGhpcy5fZXh0cmFJbmZvP3RoaXMuX2V4dHJhSW5mbzpudWxsLGE/YTpudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoYSx0aGlzLl9tZXJnZUV4dHJhSW5mbyhiKSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oYSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oYSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oYSxiKX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoYSxiKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxhfSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGUoYSl7Zm9yKHZhciBiPWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheShiPjE/Yi0xOjApLGQ9MTtkPGI7ZCsrKWNbZC0xXT1hcmd1bWVudHNbZF07Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspe3ZhciBmPWNbZV07aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBmJiZudWxsIT09Zilmb3IodmFyIGcgaW4gZilmLmhhc093blByb3BlcnR5KGcpJiYoYVtnXT1mW2ddKX1yZXR1cm4gYX1mdW5jdGlvbiBmKGEpe2Zvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWlmKGFbYl08PWFbYi0xXSl0aHJvdyBuZXcgRXJyb3IoIkxpc3QgaXMgbm90IHNvcnRlZCBvciBjb250YWlucyBkdXBsaWNhdGUiKX1mdW5jdGlvbiBnKGEsYil7dmFyIGM9MCxkPTA7YXx8KGE9W10pLGJ8fChiPVtdKTt2YXIgZT1bXSxnPVtdO2ZvcihmKGEpLGYoYik7YzxhLmxlbmd0aCYmZDxiLmxlbmd0aDspYVtjXT09PWJbZF0/KGMrKyxkKyspOmFbY108YltkXT9lLnB1c2goYVtjKytdKTpnLnB1c2goYltkKytdKTtyZXR1cm4gYzxhLmxlbmd0aCYmKGU9ZS5jb25jYXQoYS5zbGljZShjKSkpLGQ8Yi5sZW5ndGgmJihnPWcuY29uY2F0KGIuc2xpY2UoZCkpKSx7cmVtb3ZlZDplLGFkZGVkOmd9fWZ1bmN0aW9uIGgoYSl7dmFyIGI9W10sYz12b2lkIDA7Zm9yKHZhciBkIGluIGEpe2lmKGEuaGFzT3duUHJvcGVydHkoZCkmJmIucHVzaChkKSwib2JqZWN0IiE9PWooYVtkXSl8fCJ1bmRlZmluZWQiPT10eXBlb2YgYVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjJiZjIT09YVtkXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO2M9YVtkXS5sZW5ndGh9Zm9yKHZhciBlPVtdLGY9dm9pZCAwLGc9MDtnPGM7ZysrKXtmPXt9O2Zvcih2YXIgaD0wO2g8Yi5sZW5ndGg7aCsrKWZbYltoXV09YVtiW2hdXVtnXTtlLnB1c2goZil9cmV0dXJuIGV9T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhLGIpe2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXt2YXIgZD1iW2NdO2QuZW51bWVyYWJsZT1kLmVudW1lcmFibGV8fCExLGQuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBkJiYoZC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZC5rZXksZCl9fXJldHVybiBmdW5jdGlvbihiLGMsZCl7cmV0dXJuIGMmJmEoYi5wcm90b3R5cGUsYyksZCYmYShiLGQpLGJ9fSgpLGo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhfTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmYS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmYSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGF9O2MuZXh0ZW5kPWUsYy5jaGVja1NvcnRlZD1mLGMuZGlmZlNvcnRlZExpc3RzPWcsYy5kYXRhZnJhbWVUb0QzPWg7Yy5TdWJzY3JpcHRpb25UcmFja2VyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiKXtkKHRoaXMsYSksdGhpcy5fZW1pdHRlcj1iLHRoaXMuX3N1YnM9e319cmV0dXJuIGkoYSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fZW1pdHRlci5vbihhLGIpO3JldHVybiB0aGlzLl9zdWJzW2NdPWEsY319LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9lbWl0dGVyLm9mZihhLGIpO3JldHVybiBjJiZkZWxldGUgdGhpcy5fc3Vic1tjXSxjfX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMoYikuZm9yRWFjaChmdW5jdGlvbihjKXthLl9lbWl0dGVyLm9mZihiW2NdLGMpfSl9fV0pLGF9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhKXtyZXR1cm4gYSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX19ZnVuY3Rpb24gZShhLGIpe2lmKCEoYSBpbnN0YW5jZW9mIGIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGF9OmZ1bmN0aW9uKGEpe3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZhLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZhIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgYX0sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSxiKXtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7dmFyIGQ9YltjXTtkLmVudW1lcmFibGU9ZC5lbnVtZXJhYmxlfHwhMSxkLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gZCYmKGQud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGQua2V5LGQpfX1yZXR1cm4gZnVuY3Rpb24oYixjLGQpe3JldHVybiBjJiZhKGIucHJvdG90eXBlLGMpLGQmJmEoYixkKSxifX0oKSxoPWEoIi4vZXZlbnRzIiksaT1kKGgpLGo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyxkKXtlKHRoaXMsYSksdGhpcy5fZ3JvdXA9Yix0aGlzLl9uYW1lPWMsdGhpcy5fdmFsdWU9ZCx0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gZyhhLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihhLGMpe2lmKHRoaXMuX3ZhbHVlIT09YSl7dmFyIGQ9dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9YTt2YXIgZT17fTtpZihjJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGM/InVuZGVmaW5lZCI6ZihjKSkpZm9yKHZhciBnIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShnKSYmKGVbZ109Y1tnXSk7ZS5vbGRWYWx1ZT1kLGUudmFsdWU9YSx0aGlzLl9ldmVudHMudHJpZ2dlcigiY2hhbmdlIixlLHRoaXMpLGIuU2hpbnkmJmIuU2hpbnkub25JbnB1dENoYW5nZSYmYi5TaGlueS5vbklucHV0Q2hhbmdlKCIuY2xpZW50VmFsdWUtIisobnVsbCE9PXRoaXMuX2dyb3VwLm5hbWU/dGhpcy5fZ3JvdXAubmFtZSsiLSI6IiIpK3RoaXMuX25hbWUsInVuZGVmaW5lZCI9PXR5cGVvZiBhP251bGw6YSl9fX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuX2V2ZW50cy5vbihhLGIpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLl9ldmVudHMub2ZmKGEsYil9fV0pLGF9KCk7Yy5kZWZhdWx0PWp9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9ldmVudHMiOjF9XX0se30sWzVdKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3Jvc3N0YWxrLm1pbi5qcy5tYXA="></script>
<link href="data:text/css;charset=utf-8,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/x-javascript;base64,LyoqCiogcGxvdGx5LmpzIHYxLjI5LjIKKiBDb3B5cmlnaHQgMjAxMi0yMDE3LCBQbG90bHksIEluYy4KKiBBbGwgcmlnaHRzIHJlc2VydmVkLgoqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQoqLwohZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBlO2U9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLGUuUGxvdGx5PXQoKX19KGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe2Z1bmN0aW9uIGkobyxzKXtpZighcltvXSl7aWYoIWVbb10pe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFzJiZsKXJldHVybiBsKG8sITApO2lmKGEpcmV0dXJuIGEobywhMCk7dmFyIHU9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpO3Rocm93IHUuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsdX12YXIgYz1yW29dPXtleHBvcnRzOnt9fTtlW29dWzBdLmNhbGwoYy5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciByPWVbb11bMV1bdF07cmV0dXJuIGkocnx8dCl9LGMsYy5leHBvcnRzLHQsZSxyLG4pfXJldHVybiByW29dLmV4cG9ydHN9Zm9yKHZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLG89MDtvPG4ubGVuZ3RoO28rKylpKG5bb10pO3JldHVybiBpfSh7MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zcmMvbGliIiksaT17IlgsWCBkaXYiOiJmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowOyIsIlggaW5wdXQsWCBidXR0b24iOiJmb250LWZhbWlseTonT3BlbiBTYW5zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7IiwiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1cyI6Im91dGxpbmU6bm9uZTsiLCJYIGEiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIGE6aG92ZXIiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIC5jcmlzcCI6InNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnVzZXItc2VsZWN0LW5vbmUiOiItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTsiLCJYIHN2ZyI6Im92ZXJmbG93OmhpZGRlbjsiLCJYIHN2ZyBhIjoiZmlsbDojNDQ3YWRiOyIsIlggc3ZnIGE6aG92ZXIiOiJmaWxsOiMzYzZkYzU7IiwiWCAubWFpbi1zdmciOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTsiLCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyIjoicG9pbnRlci1ldmVudHM6YWxsOyIsIlggLmN1cnNvci1kZWZhdWx0IjoiY3Vyc29yOmRlZmF1bHQ7IiwiWCAuY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3I6cG9pbnRlcjsiLCJYIC5jdXJzb3ItY3Jvc3NoYWlyIjoiY3Vyc29yOmNyb3NzaGFpcjsiLCJYIC5jdXJzb3ItbW92ZSI6ImN1cnNvcjptb3ZlOyIsIlggLmN1cnNvci1jb2wtcmVzaXplIjoiY3Vyc29yOmNvbC1yZXNpemU7IiwiWCAuY3Vyc29yLXJvdy1yZXNpemUiOiJjdXJzb3I6cm93LXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnMtcmVzaXplIjoiY3Vyc29yOm5zLXJlc2l6ZTsiLCJYIC5jdXJzb3ItZXctcmVzaXplIjoiY3Vyc29yOmV3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itc3ctcmVzaXplIjoiY3Vyc29yOnN3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itcy1yZXNpemUiOiJjdXJzb3I6cy1yZXNpemU7IiwiWCAuY3Vyc29yLXNlLXJlc2l6ZSI6ImN1cnNvcjpzZS1yZXNpemU7IiwiWCAuY3Vyc29yLXctcmVzaXplIjoiY3Vyc29yOnctcmVzaXplOyIsIlggLmN1cnNvci1lLXJlc2l6ZSI6ImN1cnNvcjplLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnctcmVzaXplIjoiY3Vyc29yOm53LXJlc2l6ZTsiLCJYIC5jdXJzb3Itbi1yZXNpemUiOiJjdXJzb3I6bi1yZXNpemU7IiwiWCAuY3Vyc29yLW5lLXJlc2l6ZSI6ImN1cnNvcjpuZS1yZXNpemU7IiwiWCAubW9kZWJhciI6InBvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7cmlnaHQ6MnB4O3otaW5kZXg6MTAwMTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC43KTsiLCJYIC5tb2RlYmFyLS1ob3ZlciI6Im9wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1tcy10cmFuc2l0aW9uOm9wYWNpdHkgMC4zcyBlYXNlIDBzOy1vLXRyYW5zaXRpb246b3BhY2l0eSAwLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpvcGFjaXR5IDAuM3MgZWFzZSAwczsiLCJYOmhvdmVyIC5tb2RlYmFyLS1ob3ZlciI6Im9wYWNpdHk6MTsiLCJYIC5tb2RlYmFyLWdyb3VwIjoiZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luLWxlZnQ6OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7IiwiWCAubW9kZWJhci1ncm91cDpmaXJzdC1jaGlsZCI6Im1hcmdpbi1sZWZ0OjBweDsiLCJYIC5tb2RlYmFyLWJ0biI6InBvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O3BhZGRpbmc6M3B4IDRweDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDpub3JtYWw7Ym94LXNpemluZzpib3JkZXItYm94OyIsIlggLm1vZGViYXItYnRuIHN2ZyI6InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoycHg7IiwiWCAubW9kZWJhci1idG4gcGF0aCI6ImZpbGw6cmdiYSgwLDMxLDk1LDAuMyk7IiwiWCAubW9kZWJhci1idG4uYWN0aXZlIHBhdGgsWCAubW9kZWJhci1idG46aG92ZXIgcGF0aCI6ImZpbGw6cmdiYSgwLDIyLDcyLDAuNSk7IiwiWCAubW9kZWJhci1idG4ubW9kZWJhci1idG4tLWxvZ28iOiJwYWRkaW5nOjNweCAxcHg7IiwiWCAubW9kZWJhci1idG4ubW9kZWJhci1idG4tLWxvZ28gcGF0aCI6ImZpbGw6IzQ0N2FkYiAhaW1wb3J0YW50OyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTphZnRlciI6InBvc2l0aW9uOmFic29sdXRlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tb3otdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW8tdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTtkaXNwbGF5Om5vbmU7b3BhY2l0eTowO3otaW5kZXg6MTAwMTtwb2ludGVyLWV2ZW50czpub25lO3RvcDoxMTAlO3JpZ2h0OjUwJTsiLCJYIFtkYXRhLXRpdGxlXTpob3ZlcjpiZWZvcmUsWCBbZGF0YS10aXRsZV06aG92ZXI6YWZ0ZXIiOiJkaXNwbGF5OmJsb2NrO29wYWNpdHk6MTsiLCJYIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDt6LWluZGV4OjEwMDI7bWFyZ2luLXRvcDotMTJweDtib3JkZXItYm90dG9tLWNvbG9yOiM2OTczOGE7bWFyZ2luLXJpZ2h0Oi02cHg7IiwiWCBbZGF0YS10aXRsZV06YWZ0ZXIiOiJjb250ZW50OmF0dHIoZGF0YS10aXRsZSk7YmFja2dyb3VuZDojNjk3MzhhO2NvbG9yOndoaXRlO3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTJweDt3aGl0ZS1zcGFjZTpub3dyYXA7bWFyZ2luLXJpZ2h0Oi0xOHB4O2JvcmRlci1yYWRpdXM6MnB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6d2hpdGU7IiwiWCAuc2VsZWN0LW91dGxpbmUtMiI6InN0cm9rZTpibGFjaztzdHJva2UtZGFzaGFycmF5OjJweCAycHg7IixZOiJmb250LWZhbWlseTonT3BlbiBTYW5zJztwb3NpdGlvbjpmaXhlZDt0b3A6NTBweDtyaWdodDoyMHB4O3otaW5kZXg6MTAwMDA7Zm9udC1zaXplOjEwcHQ7bWF4LXdpZHRoOjE4MHB4OyIsIlkgcCI6Im1hcmdpbjowOyIsIlkgLm5vdGlmaWVyLW5vdGUiOiJtaW4td2lkdGg6MTgwcHg7bWF4LXdpZHRoOjI1MHB4O2JvcmRlcjoxcHggc29saWQgI2ZmZjt6LWluZGV4OjMwMDA7bWFyZ2luOjA7YmFja2dyb3VuZC1jb2xvcjojOGM5N2FmO2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDAsMTUxLDE3NSwwLjkpO2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlIjoiY29sb3I6I2ZmZjtvcGFjaXR5OjAuODtmbG9hdDpyaWdodDtwYWRkaW5nOjAgNXB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtmb250LXNpemU6MjBweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7IiwiWSAubm90aWZpZXItY2xvc2U6aG92ZXIiOiJjb2xvcjojNDQ0O3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyOyJ9O2Zvcih2YXIgYSBpbiBpKXt2YXIgbz1hLnJlcGxhY2UoL14sLywiICwiKS5yZXBsYWNlKC9YL2csIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IikucmVwbGFjZSgvWS9nLCIucGxvdGx5LW5vdGlmaWVyIik7bi5hZGRTdHlsZVJ1bGUobyxpW2FdKX19LHsiLi4vc3JjL2xpYiI6NzI0fV0sMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3VuZG86e3dpZHRoOjg1Ny4xLHBhdGg6Im04NTcgMzUwcTAtODctMzQtMTY2dC05MS0xMzctMTM3LTkyLTE2Ni0zNHEtOTYgMC0xODMgNDF0LTE0NyAxMTRxLTQgNi00IDEzdDUgMTFsNzYgNzdxNiA1IDE0IDUgOS0xIDEzLTcgNDEtNTMgMTAwLTgydDEyNi0yOXE1OCAwIDExMCAyM3Q5MiA2MSA2MSA5MSAyMiAxMTEtMjIgMTExLTYxIDkxLTkyIDYxLTExMCAyM3EtNTUgMC0xMDUtMjB0LTkwLTU3bDc3LTc3cTE3LTE2IDgtMzgtMTAtMjMtMzMtMjNoLTI1MHEtMTUgMC0yNSAxMXQtMTEgMjV2MjUwcTAgMjQgMjIgMzMgMjIgMTAgMzktOGw3Mi03MnE2MCA1NyAxMzcgODh0MTU5IDMxcTg3IDAgMTY2LTM0dDEzNy05MiA5MS0xMzcgMzQtMTY2eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGhvbWU6e3dpZHRoOjkyOC42LHBhdGg6Im03ODYgMjk2di0yNjdxMC0xNS0xMS0yNnQtMjUtMTBoLTIxNHYyMTRoLTE0M3YtMjE0aC0yMTRxLTE1IDAtMjUgMTB0LTExIDI2djI2N3EwIDEgMCAydDAgMmwzMjEgMjY0IDMyMS0yNjRxMS0xIDEtNHogbTEyNCAzOWwtMzQtNDFxLTUtNS0xMi02aC0ycS03IDAtMTIgM2wtMzg2IDMyMi0zODYtMzIycS03LTQtMTMtNC03IDItMTIgN2wtMzUgNDFxLTQgNS0zIDEzdDYgMTJsNDAxIDMzNHExOCAxNSA0MiAxNXQ0My0xNWwxMzYtMTE0djEwOXEwIDggNSAxM3QxMyA1aDEwN3E4IDAgMTMtNXQ1LTEzdi0yMjdsMTIyLTEwMnE1LTUgNi0xMnQtNC0xM3oiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSwiY2FtZXJhLXJldHJvIjp7d2lkdGg6MWUzLHBhdGg6Im01MTggMzg2cTAgOC01IDEzdC0xMyA1cS0zNyAwLTYzLTI3dC0yNi02M3EwLTggNS0xM3QxMy01IDEyIDUgNSAxM3EwIDIzIDE2IDM4dDM4IDE2cTggMCAxMyA1dDUgMTN6IG0xMjUtNzNxMC01OS00Mi0xMDF0LTEwMS00Mi0xMDEgNDItNDIgMTAxIDQyIDEwMSAxMDEgNDIgMTAxLTQyIDQyLTEwMXogbS01NzItMzIwaDg1OHY3MWgtODU4di03MXogbTY0MyAzMjBxMCA4OS02MiAxNTJ0LTE1MiA2Mi0xNTEtNjItNjMtMTUyIDYzLTE1MSAxNTEtNjMgMTUyIDYzIDYyIDE1MXogbS01NzEgMzU4aDIxNHY3MmgtMjE0di03MnogbS03Mi0xMDdoODU4djE0M2gtNDYybC0zNi03MWgtMzYwdi03MnogbTkyOSAxNDN2LTcxNHEwLTMwLTIxLTUxdC01MC0yMWgtODU4cS0yOSAwLTUwIDIxdC0yMSA1MXY3MTRxMCAzMCAyMSA1MXQ1MCAyMWg4NThxMjkgMCA1MC0yMXQyMS01MXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSx6b29tYm94Ont3aWR0aDoxZTMscGF0aDoibTEwMDAtMjVsLTI1MCAyNTFjNDAgNjMgNjMgMTM4IDYzIDIxOCAwIDIyNC0xODIgNDA2LTQwNyA0MDYtMjI0IDAtNDA2LTE4Mi00MDYtNDA2czE4My00MDYgNDA3LTQwNmM4MCAwIDE1NSAyMiAyMTggNjJsMjUwLTI1MCAxMjUgMTI1eiBtLTgxMiAyNTBsMCA0MzggNDM3IDAgMC00MzgtNDM3IDB6IG02MiAzNzVsMzEzIDAgMC0zMTItMzEzIDAgMCAzMTJ6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0scGFuOnt3aWR0aDoxZTMscGF0aDoibTEwMDAgMzUwbC0xODcgMTg4IDAtMTI1LTI1MCAwIDAgMjUwIDEyNSAwLTE4OCAxODctMTg3LTE4NyAxMjUgMCAwLTI1MC0yNTAgMCAwIDEyNS0xODgtMTg4IDE4Ni0xODcgMCAxMjUgMjUyIDAgMC0yNTAtMTI1IDAgMTg3LTE4OCAxODggMTg4LTEyNSAwIDAgMjUwIDI1MCAwIDAtMTI2IDE4NyAxODh6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sem9vbV9wbHVzOnt3aWR0aDoxZTMscGF0aDoibTEgNzg3bDAtODc1IDg3NSAwIDAgODc1LTg3NSAweiBtNjg3LTUwMGwtMTg3IDAgMC0xODctMTI1IDAgMCAxODctMTg4IDAgMCAxMjUgMTg4IDAgMCAxODcgMTI1IDAgMC0xODcgMTg3IDAgMC0xMjV6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sem9vbV9taW51czp7d2lkdGg6MWUzLHBhdGg6Im0wIDc4OGwwLTg3NiA4NzUgMCAwIDg3Ni04NzUgMHogbTY4OC01MDBsLTUwMCAwIDAgMTI1IDUwMCAwIDAtMTI1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGF1dG9zY2FsZTp7d2lkdGg6MWUzLHBhdGg6Im0yNTAgODUwbC0xODcgMC02MyAwIDAtNjIgMC0xODggNjMgMCAwIDE4OCAxODcgMCAwIDYyeiBtNjg4IDBsLTE4OCAwIDAtNjIgMTg4IDAgMC0xODggNjIgMCAwIDE4OCAwIDYyLTYyIDB6IG0tODc1LTkzOGwwIDE4OC02MyAwIDAtMTg4IDAtNjIgNjMgMCAxODcgMCAwIDYyLTE4NyAweiBtODc1IDE4OGwwLTE4OC0xODggMCAwLTYyIDE4OCAwIDYyIDAgMCA2MiAwIDE4OC02MiAweiBtLTEyNSAxODhsLTEgMC05My05NC0xNTYgMTU2IDE1NiAxNTYgOTItOTMgMiAwIDAgMjUwLTI1MCAwIDAtMiA5My05Mi0xNTYtMTU2LTE1NiAxNTYgOTQgOTIgMCAyLTI1MCAwIDAtMjUwIDAgMCA5MyA5MyAxNTctMTU2LTE1Ny0xNTYtOTMgOTQgMCAwIDAtMjUwIDI1MCAwIDAgMC05NCA5MyAxNTYgMTU3IDE1Ni0xNTctOTMtOTMgMCAwIDI1MCAwIDAgMjUweiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHRvb2x0aXBfYmFzaWM6e3dpZHRoOjE1MDAscGF0aDoibTM3NSA3MjVsMCAwLTM3NS0zNzUgMzc1LTM3NCAwLTEgMTEyNSAwIDAgNzUwLTExMjUgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSx0b29sdGlwX2NvbXBhcmU6e3dpZHRoOjExMjUscGF0aDoibTE4NyA3ODZsMCAyLTE4Ny0xODggMTg4LTE4NyAwIDAgOTM3IDAgMCAzNzMtOTM4IDB6IG0wLTQ5OWwwIDEtMTg3LTE4OCAxODgtMTg4IDAgMCA5MzcgMCAwIDM3Ni05MzgtMXoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxwbG90bHlsb2dvOnt3aWR0aDoxNTQyLHBhdGg6Im0wLTEwaDE4MnYtMTQwaC0xODJ2MTQweiBtMjI4IDE0NmgxODN2LTI4NmgtMTgzdjI4NnogbTIyNSA3MTRoMTgydi0xMDAwaC0xODJ2MTAwMHogbTIyNS0yODVoMTgydi03MTVoLTE4MnY3MTV6IG0yMjUgMTQyaDE4M3YtODU3aC0xODN2ODU3eiBtMjMxLTQyOGgxODJ2LTQyOWgtMTgydjQyOXogbTIyNS0yOTFoMTgzdi0xMzhoLTE4M3YxMzh6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sInotYXhpcyI6e3dpZHRoOjFlMyxwYXRoOiJtODMzIDVsLTE3IDEwOHY0MWwtMTMwLTY1IDEzMC02NmMwIDAgMCAzOCAwIDM5IDAtMSAzNi0xNCAzOS0yNSA0LTE1LTYtMjItMTYtMzAtMTUtMTItMzktMTYtNTYtMjAtOTAtMjItMTg3LTIzLTI3OS0yMy0yNjEgMC0zNDEgMzQtMzUzIDU5IDMgNjAgMjI4IDExMCAyMjggMTEwLTE0MC04LTM1MS0zNS0zNTEtMTE2IDAtMTIwIDI5My0xNDIgNDc0LTE0MiAxNTUgMCA0NzcgMjIgNDc3IDE0MiAwIDUwLTc0IDc5LTE2MyA5NnogbS0zNzQgOTRjLTU4LTUtOTktMjEtOTktNDAgMC0yNCA2NS00MyAxNDQtNDMgNzkgMCAxNDMgMTkgMTQzIDQzIDAgMTktNDIgMzQtOTggNDB2MjE2aDg3bC0xMzIgMTM1LTEzMy0xMzVoODh2LTIxNnogbTE2NyA1MTVoLTEzNnYxYzE2IDE2IDMxIDM0IDQ2IDUybDg0IDEwOXY1NGgtMjMwdi03MWgxMjR2LTFjLTE2LTE3LTI4LTMyLTQ0LTUxbC04OS0xMTR2LTUxaDI0NXY3MnoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSwiM2Rfcm90YXRlIjp7d2lkdGg6MWUzLHBhdGg6Im05MjIgNjYwYy01IDQtOSA3LTE0IDExLTM1OSAyNjMtNTgwLTMxLTU4MC0zMWwtMTAyIDI4IDU4LTQwMGMwIDEgMSAxIDIgMiAxMTggMTA4IDM1MSAyNDkgMzUxIDI0OXMtNjIgMjctMTAwIDQyYzg4IDgzIDIyMiAxODMgMzQ3IDEyMiAxNi04IDMwLTE3IDQ0LTI3LTIgMS00IDItNiA0eiBtMzYtMzI5YzAgMCA2NCAyMjktODggMjk2LTYyIDI3LTEyNCAxNC0xNzUtMTEgMTU3LTc4IDIyNS0yMDggMjQ5LTI2NiA4LTE5IDExLTMxIDExLTMxIDIgNSA2IDE1IDExIDMyLTUtMTMtOC0yMC04LTIweiBtLTc3NS0yMzljNzAtMzEgMTE3LTUwIDE5OC0zMi0xMjEgODAtMTk5IDM0Ni0xOTkgMzQ2bC05Ni0xNS01OC0xMmMwIDAgNTUtMjI2IDE1NS0yODd6IG02MDMgMTMzbC0zMTctMTM5YzAgMCA0LTQgMTktMTQgNy01IDI0LTE1IDI0LTE1cy0xNzctMTQ3LTM4OSA0YzIzNS0yODcgNTM2LTExMiA1MzYtMTEybDMxLTIyIDEwMCAyOTktNC0xeiBtLTI5OC0xNTNjNi00IDE0LTkgMjQtMTUgMCAwLTE3IDEwLTI0IDE1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGNhbWVyYTp7d2lkdGg6MWUzLHBhdGg6Im01MDAgNDUwYy04MyAwLTE1MC02Ny0xNTAtMTUwIDAtODMgNjctMTUwIDE1MC0xNTAgODMgMCAxNTAgNjcgMTUwIDE1MCAwIDgzLTY3IDE1MC0xNTAgMTUweiBtNDAwIDE1MGgtMTIwYy0xNiAwLTM0IDEzLTM5IDI5bC0zMSA5M2MtNiAxNS0yMyAyOC00MCAyOGgtMzQwYy0xNiAwLTM0LTEzLTM5LTI4bC0zMS05NGMtNi0xNS0yMy0yOC00MC0yOGgtMTIwYy01NSAwLTEwMC00NS0xMDAtMTAwdi00NTBjMC01NSA0NS0xMDAgMTAwLTEwMGg4MDBjNTUgMCAxMDAgNDUgMTAwIDEwMHY0NTBjMCA1NS00NSAxMDAtMTAwIDEwMHogbS00MDAtNTUwYy0xMzggMC0yNTAgMTEyLTI1MCAyNTAgMCAxMzggMTEyIDI1MCAyNTAgMjUwIDEzOCAwIDI1MC0xMTIgMjUwLTI1MCAwLTEzOC0xMTItMjUwLTI1MC0yNTB6IG0zNjUgMzgwYy0xOSAwLTM1IDE2LTM1IDM1IDAgMTkgMTYgMzUgMzUgMzUgMTkgMCAzNS0xNiAzNS0zNSAwLTE5LTE2LTM1LTM1LTM1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LG1vdmllOnt3aWR0aDoxZTMscGF0aDoibTkzOCA0MTNsLTE4OC0xMjVjMCAzNy0xNyA3MS00NCA5NCA2NCAzOCAxMDcgMTA3IDEwNyAxODcgMCAxMjEtOTggMjE5LTIxOSAyMTktMTIxIDAtMjE5LTk4LTIxOS0yMTkgMC02MSAyNS0xMTcgNjYtMTU2aC0xMTVjMzAgMzMgNDkgNzYgNDkgMTI1IDAgMTAzLTg0IDE4Ny0xODcgMTg3cy0xODgtODQtMTg4LTE4N2MwLTU3IDI2LTEwNyA2NS0xNDEtMzgtMjItNjUtNjItNjUtMTA5di0yNTBjMC03MCA1Ni0xMjYgMTI1LTEyNmg1MDBjNjkgMCAxMjUgNTYgMTI1IDEyNmwxODgtMTI2YzM0IDAgNjIgMjggNjIgNjN2Mzc1YzAgMzUtMjggNjMtNjIgNjN6IG0tNzUwIDBjLTY5IDAtMTI1IDU2LTEyNSAxMjVzNTYgMTI1IDEyNSAxMjUgMTI1LTU2IDEyNS0xMjUtNTYtMTI1LTEyNS0xMjV6IG00MDYtMWMtODcgMC0xNTcgNzAtMTU3IDE1NyAwIDg2IDcwIDE1NiAxNTcgMTU2czE1Ni03MCAxNTYtMTU2LTcwLTE1Ny0xNTYtMTU3eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LHF1ZXN0aW9uOnt3aWR0aDo4NTcuMSxwYXRoOiJtNTAwIDgydjEwN3EwIDgtNSAxM3QtMTMgNWgtMTA3cS04IDAtMTMtNXQtNS0xM3YtMTA3cTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTN6IG0xNDMgMzc1cTAgNDktMzEgOTF0LTc3IDY1LTk1IDIzcS0xMzYgMC0yMDctMTE5LTktMTQgNC0yNGw3NC01NXE0LTQgMTAtNCA5IDAgMTQgNyAzMCAzOCA0OCA1MSAxOSAxNCA0OCAxNCAyNyAwIDQ4LTE1dDIxLTMzcTAtMjEtMTEtMzR0LTM4LTI1cS0zNS0xNi02NS00OHQtMjktNzB2LTIwcTAtOCA1LTEzdDEzLTVoMTA3cTggMCAxMyA1dDUgMTNxMCAxMCAxMiAyN3QzMCAyOHExOCAxMCAyOCAxNnQyNSAxOSAyNSAyNyAxNiAzNCA3IDQ1eiBtMjE0LTEwN3EwLTExNy01Ny0yMTV0LTE1Ni0xNTYtMjE1LTU4LTIxNiA1OC0xNTUgMTU2LTU4IDIxNSA1OCAyMTUgMTU1IDE1NiAyMTYgNTggMjE1LTU4IDE1Ni0xNTYgNTctMjE1eiIsYXNjZW50Ojg1MCxkZXNjZW50Oi0xNTB9LGRpc2s6e3dpZHRoOjg1Ny4xLHBhdGg6Im0yMTQtN2g0Mjl2MjE0aC00Mjl2LTIxNHogbTUwMCAwaDcydjUwMHEwIDgtNiAyMXQtMTEgMjBsLTE1NyAxNTZxLTUgNi0xOSAxMnQtMjIgNXYtMjMycTAtMjItMTUtMzh0LTM4LTE2aC0zMjJxLTIyIDAtMzcgMTZ0LTE2IDM4djIzMmgtNzJ2LTcxNGg3MnYyMzJxMCAyMiAxNiAzOHQzNyAxNmg0NjVxMjIgMCAzOC0xNnQxNS0zOHYtMjMyeiBtLTIxNCA1MTh2MTc4cTAgOC01IDEzdC0xMyA1aC0xMDdxLTcgMC0xMy01dC01LTEzdi0xNzhxMC04IDUtMTN0MTMtNWgxMDdxNyAwIDEzIDV0NSAxM3ogbTM1Ny0xOHYtNTE4cTAtMjItMTUtMzh0LTM4LTE2aC03NTBxLTIzIDAtMzggMTZ0LTE2IDM4djc1MHEwIDIyIDE2IDM4dDM4IDE2aDUxN3EyMyAwIDUwLTEydDQyLTI2bDE1Ni0xNTdxMTYtMTUgMjctNDJ0MTEtNDl6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sbGFzc286e3dpZHRoOjEwMzEscGF0aDoibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6Iixhc2NlbnQ6ODUwLGRlc2NlbnQ6LTE1MH0sc2VsZWN0Ym94Ont3aWR0aDoxZTMscGF0aDoibTAgODUwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODUgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG04NTcgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg1bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NmwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfSxzcGlrZWxpbmU6e3dpZHRoOjFlMyxwYXRoOiJNNTEyIDQwOWMwLTU3LTQ2LTEwNC0xMDMtMTA0LTU3IDAtMTA0IDQ3LTEwNCAxMDQgMCA1NyA0NyAxMDMgMTA0IDEwMyA1NyAwIDEwMy00NiAxMDMtMTAzeiBtLTMyNy0zOWw5MiAwIDAgOTItOTIgMHogbS0xODUgMGw5MiAwIDAgOTItOTIgMHogbTM3MC0xODZsOTIgMCAwIDkzLTkyIDB6IG0wLTE4NGw5MiAwIDAgOTItOTIgMHoiLGFzY2VudDo4NTAsZGVzY2VudDotMTUwfX19LHt9XSwzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JhciIpfSx7Ii4uL3NyYy90cmFjZXMvYmFyIjo4NTZ9XSw0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JveCIpfSx7Ii4uL3NyYy90cmFjZXMvYm94Ijo4Njh9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiKX0seyIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiOjYwMH1dLDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2siKX0seyIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIjo4NzZ9XSw3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY2FycGV0Ijo4OTd9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiOjkxMn1dLDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91ciIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91ciI6OTIzfV0sMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY29udG91cmNhcnBldCI6OTM4fV0sMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjcwN31dLDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9maWx0ZXIiOjEwOTd9XSwxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZ3JvdXBieSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiOjEwOTh9XSwxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIil9LHsiLi4vc3JjL3RyYWNlcy9oZWF0bWFwIjo5NTF9XSwxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oZWF0bWFwZ2wiKX0seyIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCI6OTYwfV0sMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjk2OH1dLDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCI6OTczfV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmRjb250b3VyIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiOjk3N31dLDE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29yZSIpO24ucmVnaXN0ZXIoW3QoIi4vYmFyIiksdCgiLi9ib3giKSx0KCIuL2hlYXRtYXAiKSx0KCIuL2hpc3RvZ3JhbSIpLHQoIi4vaGlzdG9ncmFtMmQiKSx0KCIuL2hpc3RvZ3JhbTJkY29udG91ciIpLHQoIi4vcGllIiksdCgiLi9jb250b3VyIiksdCgiLi9zY2F0dGVydGVybmFyeSIpLHQoIi4vc2Fua2V5IiksdCgiLi9zY2F0dGVyM2QiKSx0KCIuL3N1cmZhY2UiKSx0KCIuL21lc2gzZCIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9wb2ludGNsb3VkIiksdCgiLi9oZWF0bWFwZ2wiKSx0KCIuL3BhcmNvb3JkcyIpLHQoIi4vc2NhdHRlcm1hcGJveCIpLHQoIi4vY2FycGV0IiksdCgiLi9zY2F0dGVyY2FycGV0IiksdCgiLi9jb250b3VyY2FycGV0IiksdCgiLi9vaGxjIiksdCgiLi9jYW5kbGVzdGljayIpXSksbi5yZWdpc3RlcihbdCgiLi9maWx0ZXIiKSx0KCIuL2dyb3VwYnkiKSx0KCIuL3NvcnQiKV0pLG4ucmVnaXN0ZXIoW3QoIi4vY2FsZW5kYXJzIildKSxlLmV4cG9ydHM9bn0seyIuL2JhciI6MywiLi9ib3giOjQsIi4vY2FsZW5kYXJzIjo1LCIuL2NhbmRsZXN0aWNrIjo2LCIuL2NhcnBldCI6NywiLi9jaG9yb3BsZXRoIjo4LCIuL2NvbnRvdXIiOjksIi4vY29udG91cmNhcnBldCI6MTAsIi4vY29yZSI6MTEsIi4vZmlsdGVyIjoxMiwiLi9ncm91cGJ5IjoxMywiLi9oZWF0bWFwIjoxNCwiLi9oZWF0bWFwZ2wiOjE1LCIuL2hpc3RvZ3JhbSI6MTYsIi4vaGlzdG9ncmFtMmQiOjE3LCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MTgsIi4vbWVzaDNkIjoyMCwiLi9vaGxjIjoyMSwiLi9wYXJjb29yZHMiOjIyLCIuL3BpZSI6MjMsIi4vcG9pbnRjbG91ZCI6MjQsIi4vc2Fua2V5IjoyNSwiLi9zY2F0dGVyM2QiOjI2LCIuL3NjYXR0ZXJjYXJwZXQiOjI3LCIuL3NjYXR0ZXJnZW8iOjI4LCIuL3NjYXR0ZXJnbCI6MjksIi4vc2NhdHRlcm1hcGJveCI6MzAsIi4vc2NhdHRlcnRlcm5hcnkiOjMxLCIuL3NvcnQiOjMyLCIuL3N1cmZhY2UiOjMzfV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvbWVzaDNkIil9LHsiLi4vc3JjL3RyYWNlcy9tZXNoM2QiOjk4M31dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL29obGMiKX0seyIuLi9zcmMvdHJhY2VzL29obGMiOjk4OH1dLDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BhcmNvb3JkcyIpfSx7Ii4uL3NyYy90cmFjZXMvcGFyY29vcmRzIjo5OTd9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9waWUiKX0seyIuLi9zcmMvdHJhY2VzL3BpZSI6MTAwNn1dLDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiKX0seyIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiOjEwMTV9XSwyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zYW5rZXkiKX0seyIuLi9zcmMvdHJhY2VzL3NhbmtleSI6MTAyMX1dLDI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIjoxMDUzfV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCI6MTA1OH1dLDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iOjEwNjd9XSwyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCI6MTA3M31dLDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giOjEwODB9XSwzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcnRlcm5hcnkiOjEwODd9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL3NvcnQiOjEwOTl9XSwzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIjoxMDk2fV0sMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Z1bmN0aW9uIHIoZSxyLG4sYSl7dmFyIG89MS90LmNsaWVudEhlaWdodCxzPW8qKHItbSksbD1vKihuLXYpLGM9cC5mbGlwWD8xOi0xLGY9cC5mbGlwWT8xOi0xLGQ9TWF0aC5QSSpwLnJvdGF0ZVNwZWVkLHk9aSgpO2lmKDEmZSlhLnNoaWZ0P3Uucm90YXRlKHksMCwwLC1zKmQpOnUucm90YXRlKHksYypkKnMsLWYqZCpsLDApO2Vsc2UgaWYoMiZlKXUucGFuKHksLXAudHJhbnNsYXRlU3BlZWQqcypoLHAudHJhbnNsYXRlU3BlZWQqbCpoLDApO2Vsc2UgaWYoNCZlKXt2YXIgYj1wLnpvb21TcGVlZCpsL3dpbmRvdy5pbm5lckhlaWdodCooeS11Lmxhc3RUKCkpKjUwO3UucGFuKHksMCwwLGgqKE1hdGguZXhwKGIpLTEpKX1tPXIsdj1uLGc9YX10PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgbj1bLjAxLDEvMF07ImRpc3RhbmNlTGltaXRzImluIGUmJihuWzBdPWUuZGlzdGFuY2VMaW1pdHNbMF0sblsxXT1lLmRpc3RhbmNlTGltaXRzWzFdKSwiem9vbU1pbiJpbiBlJiYoblswXT1lLnpvb21NaW4pLCJ6b29tTWF4ImluIGUmJihuWzFdPWUuem9vbU1heCk7dmFyIHU9YSh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8Im9yYml0IixkaXN0YW5jZUxpbWl0czpufSksYz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0saD0wLGY9dC5jbGllbnRXaWR0aCxkPXQuY2xpZW50SGVpZ2h0LHA9e3ZpZXc6dSxlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOnUubW9kZXMsdGljazpmdW5jdGlvbigpe3ZhciBlPWkoKSxyPXRoaXMuZGVsYXk7dS5pZGxlKGUtciksdS5mbHVzaChlLSgxMDArMipyKSk7dmFyIG49ZS0yKnI7dS5yZWNhbGNNYXRyaXgobik7Zm9yKHZhciBhPSEwLG89dS5jb21wdXRlZE1hdHJpeCxzPTA7czwxNjsrK3MpYT1hJiZjW3NdPT09b1tzXSxjW3NdPW9bc107dmFyIGw9dC5jbGllbnRXaWR0aD09PWYmJnQuY2xpZW50SGVpZ2h0PT09ZDtyZXR1cm4gZj10LmNsaWVudFdpZHRoLGQ9dC5jbGllbnRIZWlnaHQsYT8hbDooaD1NYXRoLmV4cCh1LmNvbXB1dGVkUmFkaXVzWzBdKSwhMCl9LGxvb2tBdDpmdW5jdGlvbih0LGUscil7dS5sb29rQXQodS5sYXN0VCgpLHQsZSxyKX0scm90YXRlOmZ1bmN0aW9uKHQsZSxyKXt1LnJvdGF0ZSh1Lmxhc3RUKCksdCxlLHIpfSxwYW46ZnVuY3Rpb24odCxlLHIpe3UucGFuKHUubGFzdFQoKSx0LGUscil9LHRyYW5zbGF0ZTpmdW5jdGlvbih0LGUscil7dS50cmFuc2xhdGUodS5sYXN0VCgpLHQsZSxyKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHAse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5zZXRNYXRyaXgodS5sYXN0VCgpLHQpLHUuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB1LmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldE1vZGUodCksdS5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5sb29rQXQodS5sYXN0VCgpLHQpLHUuY29tcHV0ZWRDZW50ZXJ9LGVudW1lcmFibGU6ITB9LGV5ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRFeWV9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5sb29rQXQodS5sYXN0VCgpLG51bGwsdCksdS5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiB1LmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5sb29rQXQodS5sYXN0VCgpLG51bGwsbnVsbCx0KSx1LmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldERpc3RhbmNlKHUubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuZ2V0RGlzdGFuY2VMaW1pdHMobil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdS5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCksITF9KTt2YXIgbT0wLHY9MCxnPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfTtyZXR1cm4gbyh0LHIpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oZSl7dmFyIG49bChlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3IoMCxuWzBdLG5bMV0sZykscigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihlKXt2YXIgbj1sKGUuY2hhbmdlZFRvdWNoZXNbMF0sdCk7cigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGZ1bmN0aW9uKGUpe2woZS5jaGFuZ2VkVG91Y2hlc1swXSx0KTtyKDAsbSx2LGcpfSkscyh0LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1wLmZsaXBYPzE6LTEsYT1wLmZsaXBZPzE6LTEsbz1pKCk7aWYoTWF0aC5hYnModCk+TWF0aC5hYnMoZSkpdS5yb3RhdGUobywwLDAsLXQqbipNYXRoLlBJKnAucm90YXRlU3BlZWQvd2luZG93LmlubmVyV2lkdGgpO2Vsc2V7dmFyIHM9cC56b29tU3BlZWQqYSplL3dpbmRvdy5pbm5lckhlaWdodCooby11Lmxhc3RUKCkpLzEwMDt1LnBhbihvLDAsMCxoKihNYXRoLmV4cChzKS0xKSl9fSwhMCkscH1lLmV4cG9ydHM9bjt2YXIgaT10KCJyaWdodC1ub3ciKSxhPXQoIjNkLXZpZXciKSxvPXQoIm1vdXNlLWNoYW5nZSIpLHM9dCgibW91c2Utd2hlZWwiKSxsPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpfSx7IjNkLXZpZXciOjM1LCJtb3VzZS1jaGFuZ2UiOjQ1MCwibW91c2UtZXZlbnQtb2Zmc2V0Ijo0NTEsIm1vdXNlLXdoZWVsIjo0NTMsInJpZ2h0LW5vdyI6NTAwfV0sMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSksdGhpcy5fbW9kZT1lLHRoaXMuX2FjdGl2ZT10W2VdLHRoaXMuX2FjdGl2ZXx8KHRoaXMuX21vZGU9InR1cm50YWJsZSIsdGhpcy5fYWN0aXZlPXQudHVybnRhYmxlKSx0aGlzLm1vZGVzPXRoaXMuX2NvbnRyb2xsZXJOYW1lcyx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9ZnVuY3Rpb24gaSh0KXt0PXR8fHt9O3ZhciBlPXQuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0saT10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSx1PXQubW9kZXx8InR1cm50YWJsZSIsYz1hKCksaD1vKCksZj1zKCk7cmV0dXJuIGMuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSxjLmxvb2tBdCgwLGUscixpKSxoLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksaC5sb29rQXQoMCxlLHIsaSksZi5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGYubG9va0F0KDAsZSxyLGkpLG5ldyBuKHt0dXJudGFibGU6YyxvcmJpdDpoLG1hdHJpeDpmfSx1KX1lLmV4cG9ydHM9aTt2YXIgYT10KCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiKSxvPXQoIm9yYml0LWNhbWVyYS1jb250cm9sbGVyIikscz10KCJtYXRyaXgtY2FtZXJhLWNvbnRyb2xsZXIiKSxsPW4ucHJvdG90eXBlO1tbImZsdXNoIiwxXSxbImlkbGUiLDFdLFsibG9va0F0Iiw0XSxbInJvdGF0ZSIsNF0sWyJwYW4iLDRdLFsidHJhbnNsYXRlIiw0XSxbInNldE1hdHJpeCIsMl0sWyJzZXREaXN0YW5jZUxpbWl0cyIsMl0sWyJzZXREaXN0YW5jZSIsMl1dLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0scj1bXSxuPTA7bjx0WzFdOysrbilyLnB1c2goImEiK24pO3ZhciBpPSJ2YXIgY2M9dGhpcy5fY29udHJvbGxlckxpc3Q7Zm9yKHZhciBpPTA7aTxjYy5sZW5ndGg7KytpKXtjY1tpXS4iK3RbMF0rIigiK3Iuam9pbigpKyIpfSI7bFtlXT1GdW5jdGlvbi5hcHBseShudWxsLHIuY29uY2F0KGkpKX0pLGwucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZS5yZWNhbGNNYXRyaXgodCl9LGwuZ2V0RGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZSh0KX0sbC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlTGltaXRzKHQpfSxsLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5sYXN0VCgpfSxsLnNldE1vZGU9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuX21vZGUpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5pbmRleE9mKHQpO2lmKCEoZTwwKSl7dmFyIHI9dGhpcy5fYWN0aXZlLG49dGhpcy5fY29udHJvbGxlckxpc3RbZV0saT1NYXRoLm1heChyLmxhc3RUKCksbi5sYXN0VCgpKTtyLnJlY2FsY01hdHJpeChpKSxuLnNldE1hdHJpeChpLHIuY29tcHV0ZWRNYXRyaXgpLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX21vZGU9dCx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9fX0sbC5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9fSx7Im1hdHJpeC1jYW1lcmEtY29udHJvbGxlciI6NDQ4LCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciI6NDcxLCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiOjUzNn1dLDM2OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGksYSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2EobixlKCJkMy1hcnJheSIpLGUoImQzLWNvbGxlY3Rpb24iKSxlKCJkMy1pbnRlcnBvbGF0ZSIpKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiLCJkMy1hcnJheSIsImQzLWNvbGxlY3Rpb24iLCJkMy1pbnRlcnBvbGF0ZSJdLGEpOmEoaS5kMz1pLmQzfHx7fSxpLmQzLGkuZDMsaS5kMyl9KHRoaXMsZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3YuZm9yRWFjaChmdW5jdGlvbih0KXt0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSxnLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj10LnNvdXJjZSxuPXQudGFyZ2V0OyJudW1iZXIiPT10eXBlb2YgciYmKHI9dC5zb3VyY2U9dlt0LnNvdXJjZV0pLCJudW1iZXIiPT10eXBlb2YgbiYmKG49dC50YXJnZXQ9dlt0LnRhcmdldF0pLHQub3JpZ2luYWxJbmRleD1lLHIuc291cmNlTGlua3MucHVzaCh0KSxuLnRhcmdldExpbmtzLnB1c2godCl9KX1mdW5jdGlvbiBpKCl7di5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudmFsdWU9TWF0aC5tYXgoZS5zdW0odC5zb3VyY2VMaW5rcyxoKSxlLnN1bSh0LnRhcmdldExpbmtzLGgpKX0pfWZ1bmN0aW9uIGEoKXtmb3IodmFyIHQsZT12LHI9MDtlLmxlbmd0aDspdD1bXSxlLmZvckVhY2goZnVuY3Rpb24oZSl7ZS54PXIsZS5keD1kLGUuc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbihlKXt0LmluZGV4T2YoZS50YXJnZXQpPDAmJnQucHVzaChlLnRhcmdldCl9KX0pLGU9dCwrK3I7byhyKSxzKChtWzBdLWQpLyhyLTEpKX1mdW5jdGlvbiBvKHQpe3YuZm9yRWFjaChmdW5jdGlvbihlKXtlLnNvdXJjZUxpbmtzLmxlbmd0aHx8KGUueD10LTEpfSl9ZnVuY3Rpb24gcyh0KXt2LmZvckVhY2goZnVuY3Rpb24oZSl7ZS54Kj10fSl9ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBuKCl7YS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhPTAsbz10Lmxlbmd0aDtmb3IodC5zb3J0KGkpLG49MDtuPG87KytuKWU9dFtuXSxyPWEtZS55LHI+MCYmKGUueSs9ciksYT1lLnkrZS5keStwO2lmKChyPWEtcC1tWzFdKT4wKWZvcihhPWUueS09cixuPW8tMjtuPj0wOy0tbillPXRbbl0scj1lLnkrZS5keStwLWEscj4wJiYoZS55LT1yKSxhPWUueX0pfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC55LWUueX12YXIgYT1yLm5lc3QoKS5rZXkoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKHYpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZXN9KTshZnVuY3Rpb24oKXt2YXIgdD1lLm1pbihhLGZ1bmN0aW9uKHQpe3JldHVybihtWzFdLSh0Lmxlbmd0aC0xKSpwKS9lLnN1bSh0LGgpfSk7YS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlLHIpe2UueT1yLGUuZHk9ZS52YWx1ZSp0fSl9KSxnLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5keT1lLnZhbHVlKnR9KX0oKSxuKCk7Zm9yKHZhciBvPTE7dD4wOy0tdCkhZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gYyh0LnRhcmdldCkqdC52YWx1ZX1hLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4uc291cmNlTGlua3MubGVuZ3RoKXt2YXIgaT1lLnN1bShuLnNvdXJjZUxpbmtzLHIpL2Uuc3VtKG4uc291cmNlTGlua3MsaCk7bi55Kz0oaS1jKG4pKSp0fX0pfSl9KG8qPS45OSksbigpLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGModC5zb3VyY2UpKnQudmFsdWV9YS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uZm9yRWFjaChmdW5jdGlvbihuKXtpZihuLnRhcmdldExpbmtzLmxlbmd0aCl7dmFyIGk9ZS5zdW0obi50YXJnZXRMaW5rcyxyKS9lLnN1bShuLnRhcmdldExpbmtzLGgpO24ueSs9KGktYyhuKSkqdH19KX0pfShvKSxuKCl9ZnVuY3Rpb24gdSgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gdC5zb3VyY2UueS1lLnNvdXJjZS55fHx0Lm9yaWdpbmFsSW5kZXgtZS5vcmlnaW5hbEluZGV4fWZ1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC50YXJnZXQueS1lLnRhcmdldC55fHx0Lm9yaWdpbmFsSW5kZXgtZS5vcmlnaW5hbEluZGV4fXYuZm9yRWFjaChmdW5jdGlvbihyKXtyLnNvdXJjZUxpbmtzLnNvcnQoZSksci50YXJnZXRMaW5rcy5zb3J0KHQpfSksdi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wO3Quc291cmNlTGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnN5PWUsZSs9dC5keX0pLHQudGFyZ2V0TGlua3MuZm9yRWFjaChmdW5jdGlvbih0KXt0LnR5PXIscis9dC5keX0pfSl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC55K3QuZHkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiB0LnZhbHVlfXZhciBmPXt9LGQ9MjQscD04LG09WzEsMV0sdj1bXSxnPVtdO3JldHVybiBmLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxmKTpkfSxmLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0LGYpOnB9LGYubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9dCxmKTp2fSxmLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXQsZik6Z30sZi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXQsZik6bX0sZi5sYXlvdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKSxpKCksYSgpLGwoZSksdSgpLGZ9LGYucmVsYXlvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdSgpLGZ9LGYubGluaz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIHI9dC5zb3VyY2UueCt0LnNvdXJjZS5keCxpPXQudGFyZ2V0LngsYT1uLmludGVycG9sYXRlTnVtYmVyKHIsaSksbz1hKGUpLHM9YSgxLWUpLGw9dC5zb3VyY2UueSt0LnN5LHU9bCt0LmR5LGM9dC50YXJnZXQueSt0LnR5LGg9Yyt0LmR5O3JldHVybiJNIityKyIsIitsKyJDIitvKyIsIitsKyIgIitzKyIsIitjKyIgIitpKyIsIitjKyJMIitpKyIsIitoKyJDIitzKyIsIitoKyIgIitvKyIsIit1KyIgIityKyIsIit1KyJaIn12YXIgZT0uNTtyZXR1cm4gdC5jdXJ2YXR1cmU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3IsdCk6ZX0sdH0sZn07dC5zYW5rZXk9aSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0seyJkMy1hcnJheSI6MTEyLCJkMy1jb2xsZWN0aW9uIjoxMTMsImQzLWludGVycG9sYXRlIjoxMTd9XSwzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXMuZ2V0KHQpLHI9ZSYmKGUuX3RyaWFuZ2xlQnVmZmVyLmhhbmRsZXx8ZS5fdHJpYW5nbGVCdWZmZXIuYnVmZmVyKTtpZighcnx8IXQuaXNCdWZmZXIocikpe3ZhciBuPWEodCxuZXcgRmxvYXQzMkFycmF5KFstMSwtMSwtMSw0LDQsLTFdKSk7ZT1vKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pLGUuX3RyaWFuZ2xlQnVmZmVyPW4scy5zZXQodCxlKX1lLmJpbmQoKSx0LmRyYXdBcnJheXModC5UUklBTkdMRVMsMCwzKSxlLnVuYmluZCgpfXZhciBpPSJ1bmRlZmluZWQiPT10eXBlb2YgV2Vha01hcD90KCJ3ZWFrLW1hcCIpOldlYWtNYXAsYT10KCJnbC1idWZmZXIiKSxvPXQoImdsLXZhbyIpLHM9bmV3IGk7ZS5leHBvcnRzPW59LHsiZ2wtYnVmZmVyIjoxNTQsImdsLXZhbyI6MjY5LCJ3ZWFrLW1hcCI6NTU3fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtlPSJudW1iZXIiPT10eXBlb2YgZT9lOjEscj1yfHwiOiAiO3ZhciBuPXQuc3BsaXQoL1xyP1xuLyksYT1TdHJpbmcobi5sZW5ndGgrZS0xKS5sZW5ndGg7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKHQsbil7dmFyIG89bitlLHM9U3RyaW5nKG8pLmxlbmd0aDtyZXR1cm4gaShvLGEtcykrcit0fSkuam9pbigiXG4iKX12YXIgaT10KCJwYWQtbGVmdCIpO2UuZXhwb3J0cz1ufSx7InBhZC1sZWZ0Ijo0NzJ9XSwzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLG49MDtuPHQubGVuZ3RoOysrbilyW25dPXRbbl07Zm9yKHZhciBuPTA7bjw9dC5sZW5ndGg7KytuKXtmb3IodmFyIGk9dC5sZW5ndGg7aTw9ZTsrK2kpe2Zvcih2YXIgbz1uZXcgQXJyYXkoZSkscz0wO3M8ZTsrK3Mpb1tzXT1NYXRoLnBvdyhpKzEtbixzKTtyW2ldPW99aWYoYS5hcHBseSh2b2lkIDAscikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bMF07Zm9yKHZhciByPXRbMF0ubGVuZ3RoLGk9W3RbMF1dLGE9WzBdLG89MTtvPGU7KytvKWlmKGkucHVzaCh0W29dKSxuKGkscikpe2lmKGEucHVzaChvKSxhLmxlbmd0aD09PXIrMSlyZXR1cm4gYX1lbHNlIGkucG9wKCk7cmV0dXJuIGF9ZS5leHBvcnRzPWk7dmFyIGE9dCgicm9idXN0LW9yaWVudGF0aW9uIil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDZ9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkoZSkuZmlsdGVyKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpLGk9MDtpPHIubGVuZ3RoOysraSluW2ldPWVbcltpXV07cmV0dXJuIGEobikqdDwxfSl9ZS5leHBvcnRzPW47dmFyIGk9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxhPXQoImNpcmN1bXJhZGl1cyIpfSx7Y2lyY3VtcmFkaXVzOjg1LCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTIxfV0sNDE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEoaSh0LGUpKX1lLmV4cG9ydHM9bjt2YXIgaT10KCJhbHBoYS1jb21wbGV4IiksYT10KCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiKX0seyJhbHBoYS1jb21wbGV4Ijo0MCwic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Ijo1MTR9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtlPW51bGw9PWU/MTpNYXRoLmZsb29yKGUpO2Zvcih2YXIgcj1BcnJheSgyKmUpLG49MDtuPGU7bisrKXtmb3IodmFyIGk9LTEvMCxhPTEvMCxvPW4scz10Lmxlbmd0aDtvPHM7bys9ZSl0W29dPmkmJihpPXRbb10pLHRbb108YSYmKGE9dFtvXSk7cltuXT1hLHJbZStuXT1pfXJldHVybiByfWUuZXhwb3J0cz1ufSx7fV0sNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYoIXR8fG51bGw9PXQubGVuZ3RoKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYW4gYXJyYXkiKTtudWxsPT1lJiYoZT0xKSxudWxsPT1yJiYocj1pKHQsZSkpO2Zvcih2YXIgbj0wO248ZTtuKyspe3ZhciBhPXJbZStuXSxvPXJbbl0scz1uLGw9dC5sZW5ndGg7aWYoYT09PTEvMCYmbz09PS0xLzApZm9yKHM9bjtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6dFtzXT09PW8/MDouNTtlbHNlIGlmKGE9PT0xLzApZm9yKHM9bjtzPGw7cys9ZSl0W3NdPXRbc109PT1hPzE6MDtlbHNlIGlmKG89PT0tMS8wKWZvcihzPW47czxsO3MrPWUpdFtzXT10W3NdPT09bz8wOjE7ZWxzZXt2YXIgdT1hLW87Zm9yKHM9bjtzPGw7cys9ZSl0W3NdPSh0W3NdLW8pL3V9fXJldHVybiB0fXZhciBpPXQoImFycmF5LWJvdW5kcyIpO2UuZXhwb3J0cz1ufSx7ImFycmF5LWJvdW5kcyI6NDJ9XSw0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQpJiZudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGUodCxlLHIpe2Zvcih2YXIgbj0oZS10KS9NYXRoLm1heChyLTEsMSksaT1bXSxhPTA7YTxyO2ErKylpLnB1c2godCthKm4pO3JldHVybiBpfWZ1bmN0aW9uIHIoKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLGU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSkscj1NYXRoLm1pbi5hcHBseShudWxsLGUpLG49W10saT0wO2k8cjtpKyspe25baV09W107Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2EpbltpXVthXT10W2FdW2ldfXJldHVybiBufWZ1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj1NYXRoLm1pbi5hcHBseShudWxsLFt0Lmxlbmd0aCxlLmxlbmd0aCxyLmxlbmd0aF0pLGk9W10sYT0wO2E8bjthKyspaS5wdXNoKFt0W2FdLGVbYV0sclthXV0pO3JldHVybiBpfWZ1bmN0aW9uIGkodCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylBcnJheS5pc0FycmF5KHRbbl0pP2UodFtuXSxyKTpyKz10W25dfXZhciByPTA7cmV0dXJuIGUodCxyKSxyfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcil7ZVtyXT1bXTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbillW3JdW25dPXRbcl1bbl19cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWVbcl09dFtyXTtyZXR1cm4gZX1mdW5jdGlvbiBzKHQsZSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9dC5sZW5ndGg7ci0tOylpZih0W3JdIT09ZVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbjtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7aWYocj1bXSwiIyI9PT10WzBdPyh0PXQuc3Vic3RyKDEpLDM9PT10Lmxlbmd0aCYmKHQrPXQpLG49cGFyc2VJbnQodCwxNiksclswXT1uPj4xNiYyNTUsclsxXT1uPj44JjI1NSxyWzJdPTI1NSZuKTpoLnRlc3QodCkmJihuPXQubWF0Y2goZiksclswXT1wYXJzZUludChuWzFdKSxyWzFdPXBhcnNlSW50KG5bMl0pLHJbMl09cGFyc2VJbnQoblszXSkpLCFlKWZvcih2YXIgaT0wO2k8MzsrK2kpcltpXT1yW2ldLzI1NTtyZXR1cm4gcn1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsbjtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7aWYocj1bXSwiIyI9PT10WzBdPyh0PXQuc3Vic3RyKDEpLDM9PT10Lmxlbmd0aCYmKHQrPXQpLG49cGFyc2VJbnQodCwxNiksclswXT1uPj4xNiYyNTUsclsxXT1uPj44JjI1NSxyWzJdPTI1NSZuKTpoLnRlc3QodCkmJihuPXQubWF0Y2goZiksclswXT1wYXJzZUludChuWzFdKSxyWzFdPXBhcnNlSW50KG5bMl0pLHJbMl09cGFyc2VJbnQoblszXSksbls0XT9yWzNdPXBhcnNlRmxvYXQobls0XSk6clszXT0xKSwhZSlmb3IodmFyIGk9MDtpPDM7KytpKXJbaV09cltpXS8yNTU7cmV0dXJuIHJ9dmFyIGM9e30saD0vXnJnYmE/XChccypcZHsxLDN9XHMqLFxzKlxkezEsM31ccyosXHMqXGR7MSwzfVxzKigsLiopP1wpJC8sZj0vXnJnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiw/XHMqKC4qKT9cKSQvO3JldHVybiBjLmlzUGxhaW5PYmplY3Q9dCxjLmxpbnNwYWNlPWUsYy56aXAzPW4sYy5zdW09aSxjLnppcD1yLGMuaXNFcXVhbD1zLGMuY29weTJEPWEsYy5jb3B5MUQ9byxjLnN0cjJSZ2JBcnJheT1sLGMuc3RyMlJnYmFBcnJheT11LGN9KCl9LHt9XSw0NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5CdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIWkodCkmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5BcnJheUJ1ZmZlciYmKCJmdW5jdGlvbiI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfWZ1bmN0aW9uIHModCl7aWYoeC5pc0Z1bmN0aW9uKHQpKXtpZihNKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLHI9ZS5tYXRjaChBKTtyZXR1cm4gciYmclsxXX19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90Lmxlbmd0aDxlP3Q6dC5zbGljZSgwLGUpOnR9ZnVuY3Rpb24gdSh0KXtpZihNfHwheC5pc0Z1bmN0aW9uKHQpKXJldHVybiB4Lmluc3BlY3QodCk7dmFyIGU9cyh0KTtyZXR1cm4iW0Z1bmN0aW9uIisoZT8iOiAiK2U6IiIpKyJdIn1mdW5jdGlvbiBjKHQpe3JldHVybiBsKHUodC5hY3R1YWwpLDEyOCkrIiAiK3Qub3BlcmF0b3IrIiAiK2wodSh0LmV4cGVjdGVkKSwxMjgpfWZ1bmN0aW9uIGgodCxlLHIsbixpKXt0aHJvdyBuZXcgay5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIGYodCxlKXt0fHxoKHQsITAsZSwiPT0iLGsub2spfWZ1bmN0aW9uIGQodCxlLHIscyl7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZih4LmlzRGF0ZSh0KSYmeC5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoeC5pc1JlZ0V4cCh0KSYmeC5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKG8odCkmJm8oZSkmJmEodCk9PT1hKGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09bihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihpKHQpIT09aShlKSlyZXR1cm4hMTtzPXN8fHthY3R1YWw6W10sZXhwZWN0ZWQ6W119O3ZhciBsPXMuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1sJiZsPT09cy5leHBlY3RlZC5pbmRleE9mKGUpfHwocy5hY3R1YWwucHVzaCh0KSxzLmV4cGVjdGVkLnB1c2goZSksbSh0LGUscixzKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiBwKHQpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbSh0LGUscixuKXtpZihudWxsPT09dHx8dm9pZCAwPT09dHx8bnVsbD09PWV8fHZvaWQgMD09PWUpcmV0dXJuITE7aWYoeC5pc1ByaW1pdGl2ZSh0KXx8eC5pc1ByaW1pdGl2ZShlKSlyZXR1cm4gdD09PWU7aWYociYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKXJldHVybiExO3ZhciBpPXAodCksYT1wKGUpO2lmKGkmJiFhfHwhaSYmYSlyZXR1cm4hMTtpZihpKXJldHVybiB0PXcuY2FsbCh0KSxlPXcuY2FsbChlKSxkKHQsZSxyKTt2YXIgbyxzLGw9VCh0KSx1PVQoZSk7aWYobC5sZW5ndGghPT11Lmxlbmd0aClyZXR1cm4hMTtmb3IobC5zb3J0KCksdS5zb3J0KCkscz1sLmxlbmd0aC0xO3M+PTA7cy0tKWlmKGxbc10hPT11W3NdKXJldHVybiExO2ZvcihzPWwubGVuZ3RoLTE7cz49MDtzLS0paWYobz1sW3NdLCFkKHRbb10sZVtvXSxyLG4pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHYodCxlLHIpe2QodCxlLCEwKSYmaCh0LGUsciwibm90RGVlcFN0cmljdEVxdWFsIix2KX1mdW5jdGlvbiBnKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX0KZnVuY3Rpb24geSh0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT15KGUpLG49KHImJnIubmFtZT8iICgiK3IubmFtZSsiKS4iOiIuIikrKG4/IiAiK246Ii4iKSx0JiYhaSYmaChpLHIsIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uIituKTt2YXIgYT0ic3RyaW5nIj09dHlwZW9mIG4sbz0hdCYmeC5pc0Vycm9yKGkpLHM9IXQmJmkmJiFyO2lmKChvJiZhJiZnKGkscil8fHMpJiZoKGksciwiR290IHVud2FudGVkIGV4Y2VwdGlvbiIrbiksdCYmaSYmciYmIWcoaSxyKXx8IXQmJmkpdGhyb3cgaX12YXIgeD10KCJ1dGlsLyIpLF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx3PUFycmF5LnByb3RvdHlwZS5zbGljZSxNPWZ1bmN0aW9uKCl7cmV0dXJuImZvbyI9PT1mdW5jdGlvbigpe30ubmFtZX0oKSxrPWUuZXhwb3J0cz1mLEE9L1xzKmZ1bmN0aW9uXHMrKFteXChcc10qKVxzKi87ay5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9Yyh0aGlzKSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITApO3ZhciBlPXQuc3RhY2tTdGFydEZ1bmN0aW9ufHxoO2lmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsZSk7ZWxzZXt2YXIgcj1uZXcgRXJyb3I7aWYoci5zdGFjayl7dmFyIG49ci5zdGFjayxpPXMoZSksYT1uLmluZGV4T2YoIlxuIitpKTtpZihhPj0wKXt2YXIgbz1uLmluZGV4T2YoIlxuIixhKzEpO249bi5zdWJzdHJpbmcobysxKX10aGlzLnN0YWNrPW59fX0seC5pbmhlcml0cyhrLkFzc2VydGlvbkVycm9yLEVycm9yKSxrLmZhaWw9aCxrLm9rPWYsay5lcXVhbD1mdW5jdGlvbih0LGUscil7dCE9ZSYmaCh0LGUsciwiPT0iLGsuZXF1YWwpfSxrLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZoKHQsZSxyLCIhPSIsay5ub3RFcXVhbCl9LGsuZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtkKHQsZSwhMSl8fGgodCxlLHIsImRlZXBFcXVhbCIsay5kZWVwRXF1YWwpfSxrLmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7ZCh0LGUsITApfHxoKHQsZSxyLCJkZWVwU3RyaWN0RXF1YWwiLGsuZGVlcFN0cmljdEVxdWFsKX0say5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe2QodCxlLCExKSYmaCh0LGUsciwibm90RGVlcEVxdWFsIixrLm5vdERlZXBFcXVhbCl9LGsubm90RGVlcFN0cmljdEVxdWFsPXYsay5zdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dCE9PWUmJmgodCxlLHIsIj09PSIsay5zdHJpY3RFcXVhbCl9LGsubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PT1lJiZoKHQsZSxyLCIhPT0iLGsubm90U3RyaWN0RXF1YWwpfSxrLnRocm93cz1mdW5jdGlvbih0LGUscil7YighMCx0LGUscil9LGsuZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXtiKCExLHQsZSxyKX0say5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIFQ9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KV8uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7InV0aWwvIjo1NDd9XSw0NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYXRvYih0KX19LHt9XSw0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdO3JldHVybiBlfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgsaT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl7Zm9yKHZhciBzPW5ldyBBcnJheShyKzEpLGw9MDtsPD1yOysrbClzW2xdPXRbbF1bb107aVtvXT1zfWlbcl09bmV3IEFycmF5KHIrMSk7Zm9yKHZhciBvPTA7bzw9cjsrK28paVtyXVtvXT0xO2Zvcih2YXIgdT1uZXcgQXJyYXkocisxKSxvPTA7bzxyOysrbyl1W29dPWVbb107dVtyXT0xO3ZhciBjPWEoaSx1KSxoPW4oY1tyKzFdKTswPT09aCYmKGg9MSk7Zm9yKHZhciBmPW5ldyBBcnJheShyKzEpLG89MDtvPD1yOysrbylmW29dPW4oY1tvXSkvaDtyZXR1cm4gZn1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3QtbGluZWFyLXNvbHZlIil9LHsicm9idXN0LWxpbmVhci1zb2x2ZSI6NTA1fV0sNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBpKHRbMF0ubXVsKGVbMV0pLmFkZChlWzBdLm11bCh0WzFdKSksdFsxXS5tdWwoZVsxXSkpfXZhciBpPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPW59LHsiLi9saWIvcmF0aW9uYWxpemUiOjU4fV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdLm11bChlWzFdKS5jbXAoZVswXS5tdWwodFsxXSkpfWUuZXhwb3J0cz1ufSx7fV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBpKHRbMF0ubXVsKGVbMV0pLHRbMV0ubXVsKGVbMF0pKX12YXIgaT10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL3JhdGlvbmFsaXplIjo1OH1dLDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZihpKHQpKXJldHVybiBlP3UodCxuKGUpKTpbdFswXS5jbG9uZSgpLHRbMV0uY2xvbmUoKV07dmFyIHIsYyxoPTA7aWYoYSh0KSlyPXQuY2xvbmUoKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdClyPXModCk7ZWxzZXtpZigwPT09dClyZXR1cm5bbygwKSxvKDEpXTtpZih0PT09TWF0aC5mbG9vcih0KSlyPW8odCk7ZWxzZXtmb3IoO3QhPT1NYXRoLmZsb29yKHQpOyl0Kj1NYXRoLnBvdygyLDI1NiksaC09MjU2O3I9byh0KX19aWYoaShlKSlyLm11bChlWzFdKSxjPWVbMF0uY2xvbmUoKTtlbHNlIGlmKGEoZSkpYz1lLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpYz1zKGUpO2Vsc2UgaWYoZSlpZihlPT09TWF0aC5mbG9vcihlKSljPW8oZSk7ZWxzZXtmb3IoO2UhPT1NYXRoLmZsb29yKGUpOyllKj1NYXRoLnBvdygyLDI1NiksaCs9MjU2O2M9byhlKX1lbHNlIGM9bygxKTtyZXR1cm4gaD4wP3I9ci51c2hsbihoKTpoPDAmJihjPWMudXNobG4oLWgpKSxsKHIsYyl9dmFyIGk9dCgiLi9pcy1yYXQiKSxhPXQoIi4vbGliL2lzLWJuIiksbz10KCIuL2xpYi9udW0tdG8tYm4iKSxzPXQoIi4vbGliL3N0ci10by1ibiIpLGw9dCgiLi9saWIvcmF0aW9uYWxpemUiKSx1PXQoIi4vZGl2Iik7ZS5leHBvcnRzPW59LHsiLi9kaXYiOjUwLCIuL2lzLXJhdCI6NTIsIi4vbGliL2lzLWJuIjo1NiwiLi9saWIvbnVtLXRvLWJuIjo1NywiLi9saWIvcmF0aW9uYWxpemUiOjU4LCIuL2xpYi9zdHItdG8tYm4iOjU5fV0sNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoJiZpKHRbMF0pJiZpKHRbMV0pfXZhciBpPXQoIi4vbGliL2lzLWJuIik7ZS5leHBvcnRzPW59LHsiLi9saWIvaXMtYm4iOjU2fV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5jbXAobmV3IGkoMCkpfXZhciBpPXQoImJuLmpzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY2fV0sNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aCxyPXQud29yZHMsbj0wO2lmKDE9PT1lKW49clswXTtlbHNlIGlmKDI9PT1lKW49clswXSs2NzEwODg2NCpyWzFdO2Vsc2UgZm9yKHZhciBhPTA7YTxlO2ErKyl7dmFyIG89clthXTtuKz1vKk1hdGgucG93KDY3MTA4ODY0LGEpfXJldHVybiBpKHQpKm59dmFyIGk9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPW59LHsiLi9ibi1zaWduIjo1M31dLDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9YShpLmxvKHQpKTtpZihlPDMyKXJldHVybiBlO3ZhciByPWEoaS5oaSh0KSk7cmV0dXJuIHI+MjA/NTI6ciszMn12YXIgaT10KCJkb3VibGUtYml0cyIpLGE9dCgiYml0LXR3aWRkbGUiKS5jb3VudFRyYWlsaW5nWmVyb3M7ZS5leHBvcnRzPW59LHsiYml0LXR3aWRkbGUiOjY1LCJkb3VibGUtYml0cyI6MTIyfV0sNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmIm9iamVjdCI9PXR5cGVvZiB0JiZCb29sZWFuKHQud29yZHMpfXQoImJuLmpzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY2fV0sNTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1hLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBpKHQpOm5ldyBpKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9dmFyIGk9dCgiYm4uanMiKSxhPXQoImRvdWJsZS1iaXRzIik7ZS5leHBvcnRzPW59LHsiYm4uanMiOjY2LCJkb3VibGUtYml0cyI6MTIyfV0sNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWEodCksbj1hKGUpO2lmKDA9PT1yKXJldHVybltpKDApLGkoMSldO2lmKDA9PT1uKXJldHVybltpKDApLGkoMCldO248MCYmKHQ9dC5uZWcoKSxlPWUubmVnKCkpO3ZhciBvPXQuZ2NkKGUpO3JldHVybiBvLmNtcG4oMSk/W3QuZGl2KG8pLGUuZGl2KG8pXTpbdCxlXX12YXIgaT10KCIuL251bS10by1ibiIpLGE9dCgiLi9ibi1zaWduIik7ZS5leHBvcnRzPW59LHsiLi9ibi1zaWduIjo1MywiLi9udW0tdG8tYm4iOjU3fV0sNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IGkodCl9dmFyIGk9dCgiYm4uanMiKTtlLmV4cG9ydHM9bn0seyJibi5qcyI6NjZ9XSw2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodFswXS5tdWwoZVswXSksdFsxXS5tdWwoZVsxXSkpfXZhciBpPXQoIi4vbGliL3JhdGlvbmFsaXplIik7ZS5leHBvcnRzPW59LHsiLi9saWIvcmF0aW9uYWxpemUiOjU4fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gaSh0WzBdKSppKHRbMV0pfXZhciBpPXQoIi4vbGliL2JuLXNpZ24iKTtlLmV4cG9ydHM9bn0seyIuL2xpYi9ibi1zaWduIjo1M31dLDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gaSh0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX12YXIgaT10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL3JhdGlvbmFsaXplIjo1OH1dLDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgbj1lLmFicygpLmRpdm1vZChyLmFicygpKSxvPW4uZGl2LHM9aShvKSxsPW4ubW9kLHU9ZS5uZWdhdGl2ZSE9PXIubmVnYXRpdmU/LTE6MTtpZigwPT09bC5jbXBuKDApKXJldHVybiB1KnM7aWYocyl7dmFyIGM9YShzKSs0LGg9aShsLnVzaGxuKGMpLmRpdlJvdW5kKHIpKTtyZXR1cm4gdSoocytoKk1hdGgucG93KDIsLWMpKX12YXIgZj1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTMsaD1pKGwudXNobG4oZikuZGl2Um91bmQocikpO3JldHVybiBmPDEwMjM/dSpoKk1hdGgucG93KDIsLWYpOihoKj1NYXRoLnBvdygyLC0xMDIzKSx1KmgqTWF0aC5wb3coMiwxMDIzLWYpKX12YXIgaT10KCIuL2xpYi9ibi10by1udW0iKSxhPXQoIi4vbGliL2N0eiIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL2JuLXRvLW51bSI6NTQsIi4vbGliL2N0eiI6NTV9XSw2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz1bImZ1bmN0aW9uICIsdCwiKGEsbCxoLCIsbi5qb2luKCIsIiksIil7IixhPyIiOiJ2YXIgaT0iLHI/ImwtMSI6ImgrMSIsIjt3aGlsZShsPD1oKXt2YXIgbT0obCtoKT4+PjEseD1hIixpPyIuZ2V0KG0pIjoiW21dIl07cmV0dXJuIGE/ZS5pbmRleE9mKCJjIik8MD9vLnB1c2goIjtpZih4PT09eSl7cmV0dXJuIG19ZWxzZSBpZih4PD15KXsiKTpvLnB1c2goIjt2YXIgcD1jKHgseSk7aWYocD09PTApe3JldHVybiBtfWVsc2UgaWYocDw9MCl7Iik6by5wdXNoKCI7aWYoIixlLCIpe2k9bTsiKSxyP28ucHVzaCgibD1tKzF9ZWxzZXtoPW0tMX0iKTpvLnB1c2goImg9bS0xfWVsc2V7bD1tKzF9Iiksby5wdXNoKCJ9IiksYT9vLnB1c2goInJldHVybiAtMX07Iik6by5wdXNoKCJyZXR1cm4gaX07Iiksby5qb2luKCIiKX1mdW5jdGlvbiBpKHQsZSxyLGkpe3JldHVybiBuZXcgRnVuY3Rpb24oW24oIkEiLCJ4Iit0KyJ5IixlLFsieSJdLCExLGkpLG4oIkIiLCJ4Iit0KyJ5IixlLFsieSJdLCEwLGkpLG4oIlAiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCExLGkpLG4oIlEiLCJjKHgseSkiK3QrIjAiLGUsWyJ5IiwiYyJdLCEwLGkpLCJmdW5jdGlvbiBkaXNwYXRjaEJzZWFyY2giLHIsIihhLHksYyxsLGgpe2lmKGEuc2hhcGUpe2lmKHR5cGVvZihjKT09PSdmdW5jdGlvbicpe3JldHVybiBRKGEsKGw9PT11bmRlZmluZWQpPzA6bHwwLChoPT09dW5kZWZpbmVkKT9hLnNoYXBlWzBdLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQihhLChjPT09dW5kZWZpbmVkKT8wOmN8MCwobD09PXVuZGVmaW5lZCk/YS5zaGFwZVswXS0xOmx8MCx5KX19ZWxzZXtpZih0eXBlb2YoYyk9PT0nZnVuY3Rpb24nKXtyZXR1cm4gUChhLChsPT09dW5kZWZpbmVkKT8wOmx8MCwoaD09PXVuZGVmaW5lZCk/YS5sZW5ndGgtMTpofDAseSxjKX1lbHNle3JldHVybiBBKGEsKGM9PT11bmRlZmluZWQpPzA6Y3wwLChsPT09dW5kZWZpbmVkKT9hLmxlbmd0aC0xOmx8MCx5KX19fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjsidXNlIHJlc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPTMyO3JldHVybiB0Jj0tdCx0JiZlLS0sNjU1MzUmdCYmKGUtPTE2KSwxNjcxMTkzNSZ0JiYoZS09OCksMjUyNjQ1MTM1JnQmJihlLT00KSw4NTg5OTM0NTkmdCYmKGUtPTIpLDE0MzE2NTU3NjUmdCYmKGUtPTEpLGV9ci5JTlRfQklUUz0zMixyLklOVF9NQVg9MjE0NzQ4MzY0NyxyLklOVF9NSU49LTE8PDMxLHIuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4odD4wKS0odDwwKX0sci5hYnM9ZnVuY3Rpb24odCl7dmFyIGU9dD4+MzE7cmV0dXJuKHReZSktZX0sci5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZV4odF5lKSYtKHQ8ZSl9LHIubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHReKHReZSkmLSh0PGUpfSxyLmlzUG93Mj1mdW5jdGlvbih0KXtyZXR1cm4hKHQmdC0xfHwhdCl9LHIubG9nMj1mdW5jdGlvbih0KXt2YXIgZSxyO3JldHVybiBlPSh0PjY1NTM1KTw8NCx0Pj4+PWUscj0odD4yNTUpPDwzLHQ+Pj49cixlfD1yLHI9KHQ+MTUpPDwyLHQ+Pj49cixlfD1yLHI9KHQ+Myk8PDEsdD4+Pj1yLChlfD1yKXx0Pj4xfSxyLmxvZzEwPWZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xZTk/OTp0Pj0xZTg/ODp0Pj0xZTc/Nzp0Pj0xZTY/Njp0Pj0xZTU/NTp0Pj0xZTQ/NDp0Pj0xZTM/Mzp0Pj0xMDA/Mjp0Pj0xMD8xOjB9LHIucG9wQ291bnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQtPXQ+Pj4xJjE0MzE2NTU3NjUsMTY4NDMwMDkqKCh0PSg4NTg5OTM0NTkmdCkrKHQ+Pj4yJjg1ODk5MzQ1OSkpKyh0Pj4+NCkmMjUyNjQ1MTM1KT4+PjI0fSxyLmNvdW50VHJhaWxpbmdaZXJvcz1uLHIubmV4dFBvdzI9ZnVuY3Rpb24odCl7cmV0dXJuIHQrPTA9PT10LC0tdCx0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KSsxfSxyLnByZXZQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0fD10Pj4+MSx0fD10Pj4+Mix0fD10Pj4+NCx0fD10Pj4+OCwodHw9dD4+PjE2KS0odD4+PjEpfSxyLnBhcml0eT1mdW5jdGlvbih0KXtyZXR1cm4gdF49dD4+PjE2LHRePXQ+Pj44LHRePXQ+Pj40LDI3MDMwPj4+KHQmPTE1KSYxfTt2YXIgaT1uZXcgQXJyYXkoMjU2KTshZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTwyNTY7KytlKXt2YXIgcj1lLG49ZSxpPTc7Zm9yKHI+Pj49MTtyO3I+Pj49MSluPDw9MSxufD0xJnIsLS1pO3RbZV09bjw8aSYyNTV9fShpKSxyLnJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGlbMjU1JnRdPDwyNHxpW3Q+Pj44JjI1NV08PDE2fGlbdD4+PjE2JjI1NV08PDh8aVt0Pj4+MjQmMjU1XX0sci5pbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0Jj02NTUzNSx0PTE2NzExOTM1Jih0fHQ8PDgpLHQ9MjUyNjQ1MTM1Jih0fHQ8PDQpLHQ9ODU4OTkzNDU5Jih0fHQ8PDIpLHQ9MTQzMTY1NTc2NSYodHx0PDwxKSxlJj02NTUzNSxlPTE2NzExOTM1JihlfGU8PDgpLGU9MjUyNjQ1MTM1JihlfGU8PDQpLGU9ODU4OTkzNDU5JihlfGU8PDIpLGU9MTQzMTY1NTc2NSYoZXxlPDwxKSx0fGU8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjE0MzE2NTU3NjUsdD04NTg5OTM0NTkmKHR8dD4+PjEpLHQ9MjUyNjQ1MTM1Jih0fHQ+Pj4yKSx0PTE2NzExOTM1Jih0fHQ+Pj40KSwodD02NTUzNSYodHx0Pj4+MTYpKTw8MTY+PjE2fSxyLmludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCY9MTAyMyx0PTQyNzgxOTAzMzUmKHR8dDw8MTYpLHQ9MjUxNzE5Njk1Jih0fHQ8PDgpLHQ9MzI3MjM1NjAzNSYodHx0PDw0KSx0PTEyMjcxMzM1MTMmKHR8dDw8MiksZSY9MTAyMyxlPTQyNzgxOTAzMzUmKGV8ZTw8MTYpLGU9MjUxNzE5Njk1JihlfGU8PDgpLGU9MzI3MjM1NjAzNSYoZXxlPDw0KSxlPTEyMjcxMzM1MTMmKGV8ZTw8MiksdHw9ZTw8MSxyJj0xMDIzLHI9NDI3ODE5MDMzNSYocnxyPDwxNikscj0yNTE3MTk2OTUmKHJ8cjw8OCkscj0zMjcyMzU2MDM1JihyfHI8PDQpLHI9MTIyNzEzMzUxMyYocnxyPDwyKSx0fHI8PDJ9LHIuZGVpbnRlcmxlYXZlMz1mdW5jdGlvbih0LGUpe3JldHVybiB0PXQ+Pj5lJjEyMjcxMzM1MTMsdD0zMjcyMzU2MDM1Jih0fHQ+Pj4yKSx0PTI1MTcxOTY5NSYodHx0Pj4+NCksdD00Mjc4MTkwMzM1Jih0fHQ+Pj44KSwodD0xMDIzJih0fHQ+Pj4xNikpPDwyMj4+MjJ9LHIubmV4dENvbWJpbmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXR8dC0xO3JldHVybiBlKzF8KH5lJi1+ZSktMT4+Pm4odCkrMX19LHt9XSw2NjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gYSh0LGUscil7aWYoYS5pc0JOKHQpKXJldHVybiB0O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT10JiYoImxlIiE9PWUmJiJiZSIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHwiYmUiKSl9ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxpO2ErKyl7dmFyIG89dC5jaGFyQ29kZUF0KGEpLTQ4O248PD00LG58PW8+PTQ5JiZvPD01ND9vLTQ5KzEwOm8+PTE3JiZvPD0yMj9vLTE3KzEwOjE1Jm99cmV0dXJuIG59ZnVuY3Rpb24gcyh0LGUscixuKXtmb3IodmFyIGk9MCxhPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGE7bysrKXt2YXIgcz10LmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1zPj00OT9zLTQ5KzEwOnM+PTE3P3MtMTcrMTA6c31yZXR1cm4gaX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxhPTB8ZS53b3Jkc1swXSxvPWkqYSxzPTY3MTA4ODYzJm8sbD1vLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1zO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgYz1sPj4+MjYsaD02NzEwODg2MyZsLGY9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxkPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtkPD1mO2QrKyl7dmFyIHA9dS1kfDA7aT0wfHQud29yZHNbcF0sYT0wfGUud29yZHNbZF0sbz1pKmEraCxjKz1vLzY3MTA4ODY0fDAsaD02NzEwODg2MyZvfXIud29yZHNbdV09MHxoLGw9MHxjfXJldHVybiAwIT09bD9yLndvcmRzW3VdPTB8bDpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsYT0wO2E8ci5sZW5ndGgtMTthKyspe3ZhciBvPWk7aT0wO2Zvcih2YXIgcz02NzEwODg2MyZuLGw9TWF0aC5taW4oYSxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsYS10Lmxlbmd0aCsxKTt1PD1sO3UrKyl7dmFyIGM9YS11LGg9MHx0LndvcmRzW2NdLGY9MHxlLndvcmRzW3VdLGQ9aCpmLHA9NjcxMDg4NjMmZDtvPW8rKGQvNjcxMDg4NjR8MCl8MCxwPXArc3wwLHM9NjcxMDg4NjMmcCxvPW8rKHA+Pj4yNil8MCxpKz1vPj4+MjYsbyY9NjcxMDg4NjN9ci53b3Jkc1thXT1zLG49byxvPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbYV09bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4obmV3IGYpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGYodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBkKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBhKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBhKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBwKCl7ZC5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG0oKXtkLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gdigpe2QuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBnKCl7ZC5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHkodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT1hLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBiKHQpe3kuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9Im9iamVjdCI9PXR5cGVvZiBlP2UuZXhwb3J0cz1hOnIuQk49YSxhLkJOPWEsYS53b3JkU2l6ZT0yNjt2YXIgeDt0cnl7eD10KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWEuaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGF8fG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1hLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxhLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sYS5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LGEucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKCJvYmplY3QiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTsiaGV4Ij09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpLHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKTt2YXIgaT0wOyItIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLCItIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSwibGUiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LGEucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKCJiZSI9PT1yKWZvcihpPXQubGVuZ3RoLTEsYT0wO2k+PTA7aS09MylvPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO2Vsc2UgaWYoImxlIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksYT0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPW8odCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMsKGErPTI0KT49MjYmJihhLT0yNixuKyspO3IrNiE9PWUmJihpPW8odCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8YSY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1hJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBhPXQubGVuZ3RoLXIsbz1hJW4sbD1NYXRoLm1pbihhLGEtbykrcix1PTAsYz1yO2M8bDtjKz1uKXU9cyh0LGMsYytuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PW8pe3ZhciBoPTE7Zm9yKHU9cyh0LGMsdC5sZW5ndGgsZSksYz0wO2M8bztjKyspaCo9ZTt0aGlzLmltdWxuKGgpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sYS5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sYS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LGEucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sYS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LGEucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIF89WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sdz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxNPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2EucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dD10fHwxMCxlPTB8ZXx8MTt2YXIgcjtpZigxNj09PXR8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7YT1zPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1hfHxvIT09dGhpcy5sZW5ndGgtMT9fWzYtbC5sZW5ndGhdK2wrcjpsK3IsaSs9MixpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIHU9d1t0XSxjPU1bdF07cj0iIjt2YXIgaD10aGlzLmNsb25lKCk7Zm9yKGgubmVnYXRpdmU9MDshaC5pc1plcm8oKTspe3ZhciBmPWgubW9kbihjKS50b1N0cmluZyh0KTtoPWguaWRpdm4oYykscj1oLmlzWmVybygpP2YrcjpfW3UtZi5sZW5ndGhdK2Yrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxhLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHZvaWQgMCE9PXgpLHRoaXMudG9BcnJheUxpa2UoeCx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxuKGE+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD0ibGUiPT09ZSx1PW5ldyB0KGEpLGM9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IWMuaXNaZXJvKCk7cysrKW89Yy5hbmRsbigyNTUpLGMuaXVzaHJuKDgpLHVbc109bztmb3IoO3M8YTtzKyspdVtzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspdVtzXT0wO2ZvcihzPTA7IWMuaXNaZXJvKCk7cysrKW89Yy5hbmRsbigyNTUpLGMuaXVzaHJuKDgpLHVbYS1zLTFdPW99cmV0dXJuIHV9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxhLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyllPSgwfHIud29yZHNbYV0pKygwfG4ud29yZHNbYV0pK2ksdGhpcy53b3Jkc1thXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJmE8ci5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDthPHIubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPXIud29yZHNbYV07cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxhLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIGE9MCxvPTA7bzxpLmxlbmd0aDtvKyspZT0oMHxuLndvcmRzW29dKS0oMHxpLndvcmRzW29dKSthLGE9ZT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlO2Zvcig7MCE9PWEmJm88bi5sZW5ndGg7bysrKWU9KDB8bi53b3Jkc1tvXSkrYSxhPWU+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtpZigwPT09YSYmbzxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDtvPG4ubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPW4ud29yZHNbb107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLG8pLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbz10LndvcmRzLHM9ZS53b3JkcyxsPXIud29yZHMsdT0wLGM9MHxvWzBdLGg9ODE5MSZjLGY9Yz4+PjEzLGQ9MHxvWzFdLHA9ODE5MSZkLG09ZD4+PjEzLHY9MHxvWzJdLGc9ODE5MSZ2LHk9dj4+PjEzLGI9MHxvWzNdLHg9ODE5MSZiLF89Yj4+PjEzLHc9MHxvWzRdLE09ODE5MSZ3LGs9dz4+PjEzLEE9MHxvWzVdLFQ9ODE5MSZBLFM9QT4+PjEzLEU9MHxvWzZdLEw9ODE5MSZFLEM9RT4+PjEzLHo9MHxvWzddLEk9ODE5MSZ6LEQ9ej4+PjEzLFA9MHxvWzhdLE89ODE5MSZQLFI9UD4+PjEzLEY9MHxvWzldLGo9ODE5MSZGLE49Rj4+PjEzLEI9MHxzWzBdLFU9ODE5MSZCLFY9Qj4+PjEzLEg9MHxzWzFdLHE9ODE5MSZILEc9SD4+PjEzLFk9MHxzWzJdLFg9ODE5MSZZLFc9WT4+PjEzLFo9MHxzWzNdLEo9ODE5MSZaLEs9Wj4+PjEzLFE9MHxzWzRdLCQ9ODE5MSZRLHR0PVE+Pj4xMyxldD0wfHNbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8c1s2XSxhdD04MTkxJml0LG90PWl0Pj4+MTMsc3Q9MHxzWzddLGx0PTgxOTEmc3QsdXQ9c3Q+Pj4xMyxjdD0wfHNbOF0saHQ9ODE5MSZjdCxmdD1jdD4+PjEzLGR0PTB8c1s5XSxwdD04MTkxJmR0LG10PWR0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoaCxVKSxpPU1hdGguaW11bChoLFYpLGk9aStNYXRoLmltdWwoZixVKXwwLGE9TWF0aC5pbXVsKGYsVik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLFUpLGk9TWF0aC5pbXVsKHAsViksaT1pK01hdGguaW11bChtLFUpfDAsYT1NYXRoLmltdWwobSxWKSxuPW4rTWF0aC5pbXVsKGgscSl8MCxpPWkrTWF0aC5pbXVsKGgsRyl8MCxpPWkrTWF0aC5pbXVsKGYscSl8MCxhPWErTWF0aC5pbXVsKGYsRyl8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KGErKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGcsVSksaT1NYXRoLmltdWwoZyxWKSxpPWkrTWF0aC5pbXVsKHksVSl8MCxhPU1hdGguaW11bCh5LFYpLG49bitNYXRoLmltdWwocCxxKXwwLGk9aStNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwobSxxKXwwLGE9YStNYXRoLmltdWwobSxHKXwwLG49bitNYXRoLmltdWwoaCxYKXwwLGk9aStNYXRoLmltdWwoaCxXKXwwLGk9aStNYXRoLmltdWwoZixYKXwwLGE9YStNYXRoLmltdWwoZixXKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeCxVKSxpPU1hdGguaW11bCh4LFYpLGk9aStNYXRoLmltdWwoXyxVKXwwLGE9TWF0aC5pbXVsKF8sViksbj1uK01hdGguaW11bChnLHEpfDAsaT1pK01hdGguaW11bChnLEcpfDAsaT1pK01hdGguaW11bCh5LHEpfDAsYT1hK01hdGguaW11bCh5LEcpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFcpfDAsaT1pK01hdGguaW11bChtLFgpfDAsYT1hK01hdGguaW11bChtLFcpfDAsbj1uK01hdGguaW11bChoLEopfDAsaT1pK01hdGguaW11bChoLEspfDAsaT1pK01hdGguaW11bChmLEopfDAsYT1hK01hdGguaW11bChmLEspfDA7dmFyIGJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhidD4+PjI2KXwwLGJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChNLFUpLGk9TWF0aC5pbXVsKE0sViksaT1pK01hdGguaW11bChrLFUpfDAsYT1NYXRoLmltdWwoayxWKSxuPW4rTWF0aC5pbXVsKHgscSl8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxpPWkrTWF0aC5pbXVsKF8scSl8MCxhPWErTWF0aC5pbXVsKF8sRyl8MCxuPW4rTWF0aC5pbXVsKGcsWCl8MCxpPWkrTWF0aC5pbXVsKGcsVyl8MCxpPWkrTWF0aC5pbXVsKHksWCl8MCxhPWErTWF0aC5pbXVsKHksVyl8MCxuPW4rTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKHAsSyl8MCxpPWkrTWF0aC5pbXVsKG0sSil8MCxhPWErTWF0aC5pbXVsKG0sSyl8MCxuPW4rTWF0aC5pbXVsKGgsJCl8MCxpPWkrTWF0aC5pbXVsKGgsdHQpfDAsaT1pK01hdGguaW11bChmLCQpfDAsYT1hK01hdGguaW11bChmLHR0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVCxVKSxpPU1hdGguaW11bChULFYpLGk9aStNYXRoLmltdWwoUyxVKXwwLGE9TWF0aC5pbXVsKFMsViksbj1uK01hdGguaW11bChNLHEpfDAsaT1pK01hdGguaW11bChNLEcpfDAsaT1pK01hdGguaW11bChrLHEpfDAsYT1hK01hdGguaW11bChrLEcpfDAsbj1uK01hdGguaW11bCh4LFgpfDAsaT1pK01hdGguaW11bCh4LFcpfDAsaT1pK01hdGguaW11bChfLFgpfDAsYT1hK01hdGguaW11bChfLFcpfDAsbj1uK01hdGguaW11bChnLEopfDAsaT1pK01hdGguaW11bChnLEspfDAsaT1pK01hdGguaW11bCh5LEopfDAsYT1hK01hdGguaW11bCh5LEspfDAsbj1uK01hdGguaW11bChwLCQpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwobSwkKXwwLGE9YStNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKGgscnQpfDAsaT1pK01hdGguaW11bChoLG50KXwwLGk9aStNYXRoLmltdWwoZixydCl8MCxhPWErTWF0aC5pbXVsKGYsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChMLFUpLGk9TWF0aC5pbXVsKEwsViksaT1pK01hdGguaW11bChDLFUpfDAsYT1NYXRoLmltdWwoQyxWKSxuPW4rTWF0aC5pbXVsKFQscSl8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxpPWkrTWF0aC5pbXVsKFMscSl8MCxhPWErTWF0aC5pbXVsKFMsRyl8MCxuPW4rTWF0aC5pbXVsKE0sWCl8MCxpPWkrTWF0aC5pbXVsKE0sVyl8MCxpPWkrTWF0aC5pbXVsKGssWCl8MCxhPWErTWF0aC5pbXVsKGssVyl8MCxuPW4rTWF0aC5pbXVsKHgsSil8MCxpPWkrTWF0aC5pbXVsKHgsSyl8MCxpPWkrTWF0aC5pbXVsKF8sSil8MCxhPWErTWF0aC5pbXVsKF8sSyl8MCxuPW4rTWF0aC5pbXVsKGcsJCl8MCxpPWkrTWF0aC5pbXVsKGcsdHQpfDAsaT1pK01hdGguaW11bCh5LCQpfDAsYT1hK01hdGguaW11bCh5LHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLGE9YStNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKGgsYXQpfDAsaT1pK01hdGguaW11bChoLG90KXwwLGk9aStNYXRoLmltdWwoZixhdCl8MCxhPWErTWF0aC5pbXVsKGYsb3QpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChJLFUpLGk9TWF0aC5pbXVsKEksViksaT1pK01hdGguaW11bChELFUpfDAsYT1NYXRoLmltdWwoRCxWKSxuPW4rTWF0aC5pbXVsKEwscSl8MCxpPWkrTWF0aC5pbXVsKEwsRyl8MCxpPWkrTWF0aC5pbXVsKEMscSl8MCxhPWErTWF0aC5pbXVsKEMsRyl8MCxuPW4rTWF0aC5pbXVsKFQsWCl8MCxpPWkrTWF0aC5pbXVsKFQsVyl8MCxpPWkrTWF0aC5pbXVsKFMsWCl8MCxhPWErTWF0aC5pbXVsKFMsVyl8MCxuPW4rTWF0aC5pbXVsKE0sSil8MCxpPWkrTWF0aC5pbXVsKE0sSyl8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxhPWErTWF0aC5pbXVsKGssSyl8MCxuPW4rTWF0aC5pbXVsKHgsJCl8MCxpPWkrTWF0aC5pbXVsKHgsdHQpfDAsaT1pK01hdGguaW11bChfLCQpfDAsYT1hK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoZyxydCl8MCxpPWkrTWF0aC5pbXVsKGcsbnQpfDAsaT1pK01hdGguaW11bCh5LHJ0KXwwLGE9YStNYXRoLmltdWwoeSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwobSxhdCl8MCxhPWErTWF0aC5pbXVsKG0sb3QpfDAsbj1uK01hdGguaW11bChoLGx0KXwwLGk9aStNYXRoLmltdWwoaCx1dCl8MCxpPWkrTWF0aC5pbXVsKGYsbHQpfDAsYT1hK01hdGguaW11bChmLHV0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTyxVKSxpPU1hdGguaW11bChPLFYpLGk9aStNYXRoLmltdWwoUixVKXwwLGE9TWF0aC5pbXVsKFIsViksbj1uK01hdGguaW11bChJLHEpfDAsaT1pK01hdGguaW11bChJLEcpfDAsaT1pK01hdGguaW11bChELHEpfDAsYT1hK01hdGguaW11bChELEcpfDAsbj1uK01hdGguaW11bChMLFgpfDAsaT1pK01hdGguaW11bChMLFcpfDAsaT1pK01hdGguaW11bChDLFgpfDAsYT1hK01hdGguaW11bChDLFcpfDAsbj1uK01hdGguaW11bChULEopfDAsaT1pK01hdGguaW11bChULEspfDAsaT1pK01hdGguaW11bChTLEopfDAsYT1hK01hdGguaW11bChTLEspfDAsbj1uK01hdGguaW11bChNLCQpfDAsaT1pK01hdGguaW11bChNLHR0KXwwLGk9aStNYXRoLmltdWwoaywkKXwwLGE9YStNYXRoLmltdWwoayx0dCl8MCxuPW4rTWF0aC5pbXVsKHgscnQpfDAsaT1pK01hdGguaW11bCh4LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxhPWErTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bChnLGF0KXwwLGk9aStNYXRoLmltdWwoZyxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsYT1hK01hdGguaW11bCh5LG90KXwwLG49bitNYXRoLmltdWwocCxsdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChtLGx0KXwwLGE9YStNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKGgsaHQpfDAsaT1pK01hdGguaW11bChoLGZ0KXwwLGk9aStNYXRoLmltdWwoZixodCl8MCxhPWErTWF0aC5pbXVsKGYsZnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLFUpLGk9TWF0aC5pbXVsKGosViksaT1pK01hdGguaW11bChOLFUpfDAsYT1NYXRoLmltdWwoTixWKSxuPW4rTWF0aC5pbXVsKE8scSl8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxpPWkrTWF0aC5pbXVsKFIscSl8MCxhPWErTWF0aC5pbXVsKFIsRyl8MCxuPW4rTWF0aC5pbXVsKEksWCl8MCxpPWkrTWF0aC5pbXVsKEksVyl8MCxpPWkrTWF0aC5pbXVsKEQsWCl8MCxhPWErTWF0aC5pbXVsKEQsVyl8MCxuPW4rTWF0aC5pbXVsKEwsSil8MCxpPWkrTWF0aC5pbXVsKEwsSyl8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxhPWErTWF0aC5pbXVsKEMsSyl8MCxuPW4rTWF0aC5pbXVsKFQsJCl8MCxpPWkrTWF0aC5pbXVsKFQsdHQpfDAsaT1pK01hdGguaW11bChTLCQpfDAsYT1hK01hdGguaW11bChTLHR0KXwwLG49bitNYXRoLmltdWwoTSxydCl8MCxpPWkrTWF0aC5pbXVsKE0sbnQpfDAsaT1pK01hdGguaW11bChrLHJ0KXwwLGE9YStNYXRoLmltdWwoayxudCl8MCxuPW4rTWF0aC5pbXVsKHgsYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLGk9aStNYXRoLmltdWwoXyxhdCl8MCxhPWErTWF0aC5pbXVsKF8sb3QpfDAsbj1uK01hdGguaW11bChnLGx0KXwwLGk9aStNYXRoLmltdWwoZyx1dCl8MCxpPWkrTWF0aC5pbXVsKHksbHQpfDAsYT1hK01hdGguaW11bCh5LHV0KXwwLG49bitNYXRoLmltdWwocCxodCl8MCxpPWkrTWF0aC5pbXVsKHAsZnQpfDAsaT1pK01hdGguaW11bChtLGh0KXwwLGE9YStNYXRoLmltdWwobSxmdCl8MCxuPW4rTWF0aC5pbXVsKGgscHQpfDAsaT1pK01hdGguaW11bChoLG10KXwwLGk9aStNYXRoLmltdWwoZixwdCl8MCxhPWErTWF0aC5pbXVsKGYsbXQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLHEpLGk9TWF0aC5pbXVsKGosRyksaT1pK01hdGguaW11bChOLHEpfDAsYT1NYXRoLmltdWwoTixHKSxuPW4rTWF0aC5pbXVsKE8sWCl8MCxpPWkrTWF0aC5pbXVsKE8sVyl8MCxpPWkrTWF0aC5pbXVsKFIsWCl8MCxhPWErTWF0aC5pbXVsKFIsVyl8MCxuPW4rTWF0aC5pbXVsKEksSil8MCxpPWkrTWF0aC5pbXVsKEksSyl8MCxpPWkrTWF0aC5pbXVsKEQsSil8MCxhPWErTWF0aC5pbXVsKEQsSyl8MCxuPW4rTWF0aC5pbXVsKEwsJCl8MCxpPWkrTWF0aC5pbXVsKEwsdHQpfDAsaT1pK01hdGguaW11bChDLCQpfDAsYT1hK01hdGguaW11bChDLHR0KXwwLG49bitNYXRoLmltdWwoVCxydCl8MCxpPWkrTWF0aC5pbXVsKFQsbnQpfDAsaT1pK01hdGguaW11bChTLHJ0KXwwLGE9YStNYXRoLmltdWwoUyxudCl8MCxuPW4rTWF0aC5pbXVsKE0sYXQpfDAsaT1pK01hdGguaW11bChNLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxhPWErTWF0aC5pbXVsKGssb3QpfDAsbj1uK01hdGguaW11bCh4LGx0KXwwLGk9aStNYXRoLmltdWwoeCx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sbHQpfDAsYT1hK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoZyxodCl8MCxpPWkrTWF0aC5pbXVsKGcsZnQpfDAsaT1pK01hdGguaW11bCh5LGh0KXwwLGE9YStNYXRoLmltdWwoeSxmdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLG10KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxhPWErTWF0aC5pbXVsKG0sbXQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLFgpLGk9TWF0aC5pbXVsKGosVyksaT1pK01hdGguaW11bChOLFgpfDAsYT1NYXRoLmltdWwoTixXKSxuPW4rTWF0aC5pbXVsKE8sSil8MCxpPWkrTWF0aC5pbXVsKE8sSyl8MCxpPWkrTWF0aC5pbXVsKFIsSil8MCxhPWErTWF0aC5pbXVsKFIsSyl8MCxuPW4rTWF0aC5pbXVsKEksJCl8MCxpPWkrTWF0aC5pbXVsKEksdHQpfDAsaT1pK01hdGguaW11bChELCQpfDAsYT1hK01hdGguaW11bChELHR0KXwwLG49bitNYXRoLmltdWwoTCxydCl8MCxpPWkrTWF0aC5pbXVsKEwsbnQpfDAsaT1pK01hdGguaW11bChDLHJ0KXwwLGE9YStNYXRoLmltdWwoQyxudCl8MCxuPW4rTWF0aC5pbXVsKFQsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxhPWErTWF0aC5pbXVsKFMsb3QpfDAsbj1uK01hdGguaW11bChNLGx0KXwwLGk9aStNYXRoLmltdWwoTSx1dCl8MCxpPWkrTWF0aC5pbXVsKGssbHQpfDAsYT1hK01hdGguaW11bChrLHV0KXwwLG49bitNYXRoLmltdWwoeCxodCl8MCxpPWkrTWF0aC5pbXVsKHgsZnQpfDAsaT1pK01hdGguaW11bChfLGh0KXwwLGE9YStNYXRoLmltdWwoXyxmdCl8MCxuPW4rTWF0aC5pbXVsKGcscHQpfDAsaT1pK01hdGguaW11bChnLG10KXwwLGk9aStNYXRoLmltdWwoeSxwdCl8MCxhPWErTWF0aC5pbXVsKHksbXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLEopLGk9TWF0aC5pbXVsKGosSyksaT1pK01hdGguaW11bChOLEopfDAsYT1NYXRoLmltdWwoTixLKSxuPW4rTWF0aC5pbXVsKE8sJCl8MCxpPWkrTWF0aC5pbXVsKE8sdHQpfDAsaT1pK01hdGguaW11bChSLCQpfDAsYT1hK01hdGguaW11bChSLHR0KXwwLG49bitNYXRoLmltdWwoSSxydCl8MCxpPWkrTWF0aC5pbXVsKEksbnQpfDAsaT1pK01hdGguaW11bChELHJ0KXwwLGE9YStNYXRoLmltdWwoRCxudCl8MCxuPW4rTWF0aC5pbXVsKEwsYXQpfDAsaT1pK01hdGguaW11bChMLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxhPWErTWF0aC5pbXVsKEMsb3QpfDAsbj1uK01hdGguaW11bChULGx0KXwwLGk9aStNYXRoLmltdWwoVCx1dCl8MCxpPWkrTWF0aC5pbXVsKFMsbHQpfDAsYT1hK01hdGguaW11bChTLHV0KXwwLG49bitNYXRoLmltdWwoTSxodCl8MCxpPWkrTWF0aC5pbXVsKE0sZnQpfDAsaT1pK01hdGguaW11bChrLGh0KXwwLGE9YStNYXRoLmltdWwoayxmdCl8MCxuPW4rTWF0aC5pbXVsKHgscHQpfDAsaT1pK01hdGguaW11bCh4LG10KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxhPWErTWF0aC5pbXVsKF8sbXQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLCQpLGk9TWF0aC5pbXVsKGosdHQpLGk9aStNYXRoLmltdWwoTiwkKXwwLGE9TWF0aC5pbXVsKE4sdHQpLG49bitNYXRoLmltdWwoTyxydCl8MCxpPWkrTWF0aC5pbXVsKE8sbnQpfDAsaT1pK01hdGguaW11bChSLHJ0KXwwLGE9YStNYXRoLmltdWwoUixudCl8MCxuPW4rTWF0aC5pbXVsKEksYXQpfDAsaT1pK01hdGguaW11bChJLG90KXwwLGk9aStNYXRoLmltdWwoRCxhdCl8MCxhPWErTWF0aC5pbXVsKEQsb3QpfDAsbj1uK01hdGguaW11bChMLGx0KXwwLGk9aStNYXRoLmltdWwoTCx1dCl8MCxpPWkrTWF0aC5pbXVsKEMsbHQpfDAsYT1hK01hdGguaW11bChDLHV0KXwwLG49bitNYXRoLmltdWwoVCxodCl8MCxpPWkrTWF0aC5pbXVsKFQsZnQpfDAsaT1pK01hdGguaW11bChTLGh0KXwwLGE9YStNYXRoLmltdWwoUyxmdCl8MCxuPW4rTWF0aC5pbXVsKE0scHQpfDAsaT1pK01hdGguaW11bChNLG10KXwwLGk9aStNYXRoLmltdWwoayxwdCl8MCxhPWErTWF0aC5pbXVsKGssbXQpfDA7dmFyIEx0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShhKyhpPj4+MTMpfDApKyhMdD4+PjI2KXwwLEx0Jj02NzEwODg2MyxuPU1hdGguaW11bChqLHJ0KSxpPU1hdGguaW11bChqLG50KSxpPWkrTWF0aC5pbXVsKE4scnQpfDAsYT1NYXRoLmltdWwoTixudCksbj1uK01hdGguaW11bChPLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxpPWkrTWF0aC5pbXVsKFIsYXQpfDAsYT1hK01hdGguaW11bChSLG90KXwwLG49bitNYXRoLmltdWwoSSxsdCl8MCxpPWkrTWF0aC5pbXVsKEksdXQpfDAsaT1pK01hdGguaW11bChELGx0KXwwLGE9YStNYXRoLmltdWwoRCx1dCl8MCxuPW4rTWF0aC5pbXVsKEwsaHQpfDAsaT1pK01hdGguaW11bChMLGZ0KXwwLGk9aStNYXRoLmltdWwoQyxodCl8MCxhPWErTWF0aC5pbXVsKEMsZnQpfDAsbj1uK01hdGguaW11bChULHB0KXwwLGk9aStNYXRoLmltdWwoVCxtdCl8MCxpPWkrTWF0aC5pbXVsKFMscHQpfDAsYT1hK01hdGguaW11bChTLG10KXwwO3ZhciBDdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoQ3Q+Pj4yNil8MCxDdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixhdCksaT1NYXRoLmltdWwoaixvdCksaT1pK01hdGguaW11bChOLGF0KXwwLAphPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKE8sbHQpfDAsaT1pK01hdGguaW11bChPLHV0KXwwLGk9aStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsdXQpfDAsbj1uK01hdGguaW11bChJLGh0KXwwLGk9aStNYXRoLmltdWwoSSxmdCl8MCxpPWkrTWF0aC5pbXVsKEQsaHQpfDAsYT1hK01hdGguaW11bChELGZ0KXwwLG49bitNYXRoLmltdWwoTCxwdCl8MCxpPWkrTWF0aC5pbXVsKEwsbXQpfDAsaT1pK01hdGguaW11bChDLHB0KXwwLGE9YStNYXRoLmltdWwoQyxtdCl8MDt2YXIgenQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KGErKGk+Pj4xMyl8MCkrKHp0Pj4+MjYpfDAsenQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGosbHQpLGk9TWF0aC5pbXVsKGosdXQpLGk9aStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLHV0KSxuPW4rTWF0aC5pbXVsKE8saHQpfDAsaT1pK01hdGguaW11bChPLGZ0KXwwLGk9aStNYXRoLmltdWwoUixodCl8MCxhPWErTWF0aC5pbXVsKFIsZnQpfDAsbj1uK01hdGguaW11bChJLHB0KXwwLGk9aStNYXRoLmltdWwoSSxtdCl8MCxpPWkrTWF0aC5pbXVsKEQscHQpfDAsYT1hK01hdGguaW11bChELG10KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0oYSsoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixodCksaT1NYXRoLmltdWwoaixmdCksaT1pK01hdGguaW11bChOLGh0KXwwLGE9TWF0aC5pbXVsKE4sZnQpLG49bitNYXRoLmltdWwoTyxwdCl8MCxpPWkrTWF0aC5pbXVsKE8sbXQpfDAsaT1pK01hdGguaW11bChSLHB0KXwwLGE9YStNYXRoLmltdWwoUixtdCl8MDt2YXIgRHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KGErKGk+Pj4xMyl8MCkrKER0Pj4+MjYpfDAsRHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGoscHQpLGk9TWF0aC5pbXVsKGosbXQpLGk9aStNYXRoLmltdWwoTixwdCl8MCxhPU1hdGguaW11bChOLG10KTt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShhKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxsWzBdPXZ0LGxbMV09Z3QsbFsyXT15dCxsWzNdPWJ0LGxbNF09eHQsbFs1XT1fdCxsWzZdPXd0LGxbN109TXQsbFs4XT1rdCxsWzldPUF0LGxbMTBdPVR0LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUx0LGxbMTRdPUN0LGxbMTVdPXp0LGxbMTZdPUl0LGxbMTddPUR0LGxbMThdPVB0LDAhPT11JiYobFsxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChrPXUpLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/ayh0aGlzLHQsZSk6cjw2Mz91KHRoaXMsdCxlKTpyPDEwMjQ/Yyh0aGlzLHQsZSk6aCh0aGlzLHQsZSl9LGYucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPWEucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGYucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288YTtvKyspbltvXT1lW3Rbb11dLGlbb109clt0W29dXX0sZi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnBlcm11dGUoYSx0LGUscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIHM9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9zKSx1PU1hdGguc2luKDIqTWF0aC5QSS9zKSxjPTA7YzxpO2MrPXMpZm9yKHZhciBoPWwsZj11LGQ9MDtkPG87ZCsrKXt2YXIgcD1yW2MrZF0sbT1uW2MrZF0sdj1yW2MrZCtvXSxnPW5bYytkK29dLHk9aCp2LWYqZztnPWgqZytmKnYsdj15LHJbYytkXT1wK3YsbltjK2RdPW0rZyxyW2MrZCtvXT1wLXYsbltjK2Qrb109bS1nLGQhPT1zJiYoeT1sKmgtdSpmLGY9bCpmK3UqaCxoPXkpfX0sZi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGYucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGYucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGYucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPTAsbz0wO288ZTtvKyspYSs9MHx0W29dLHJbMipvXT04MTkxJmEsYT4+Pj0xMyxyWzIqbysxXT04MTkxJmEsYT4+Pj0xMztmb3Iobz0yKmU7bzxpOysrbylyW29dPTA7bigwPT09YSksbigwPT0oLTgxOTImYSkpfSxmLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxmLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLGE9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGY9ci53b3JkcztmLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShvLGEscyxsLG4saSksdGhpcy50cmFuc2Zvcm0odSxhLGMsaCxuLGkpO2Zvcih2YXIgZD0wO2Q8bjtkKyspe3ZhciBwPXNbZF0qY1tkXS1sW2RdKmhbZF07bFtkXT1zW2RdKmhbZF0rbFtkXSpjW2RdLHNbZF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUocyxsLG4pLHRoaXMudHJhbnNmb3JtKHMsbCxmLGEsbixpKSx0aGlzLmNvbmp1Z2F0ZShmLGEsbiksdGhpcy5ub3JtYWxpemUxM2IoZixuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LGEucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sYS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgYShudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGgodGhpcyx0LGUpfSxhLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sYS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LGE9KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPWE+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJmF9cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sYS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxhLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxhLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9bCh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBhKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LGEucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsYT02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHM9dGhpcy53b3Jkc1tlXSZhLGw9KDB8dGhpcy53b3Jkc1tlXSktczw8cjt0aGlzLndvcmRzW2VdPWx8byxvPXM+Pj4yNi1yfW8mJih0aGlzLndvcmRzW2VdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LGEucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBhPXQlMjYsbz1NYXRoLm1pbigodC1hKS8yNix0aGlzLmxlbmd0aCkscz02NzEwODg2M142NzEwODg2Mz4+PmE8PGEsbD1yO2lmKGktPW8saT1NYXRoLm1heCgwLGkpLGwpe2Zvcih2YXIgdT0wO3U8bzt1KyspbC53b3Jkc1t1XT10aGlzLndvcmRzW3VdO2wubGVuZ3RoPW99aWYoMD09PW8pO2Vsc2UgaWYodGhpcy5sZW5ndGg+bylmb3IodGhpcy5sZW5ndGgtPW8sdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K29dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGM9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09Y3x8dT49aSk7dS0tKXt2YXIgaD0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1jPDwyNi1hfGg+Pj5hLGM9aCZzfXJldHVybiBsJiYwIT09YyYmKGwud29yZHNbbC5sZW5ndGgrK109YyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LGEucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sYS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LGEucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sYS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LGEucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmkpfSxhLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sYS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sYS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LGEucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oIm51bWJlciI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LGEucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sYS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sYS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGEucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksYT10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChhKTt2YXIgbyxzPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7bz0oMHx0aGlzLndvcmRzW2krcl0pK3M7dmFyIGw9KDB8dC53b3Jkc1tpXSkqZTtvLT02NzEwODg2MyZsLHM9KG8+PjI2KS0obC82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmb31mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspbz0oMHx0aGlzLndvcmRzW2krcl0pK3Mscz1vPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmbztpZigwPT09cylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKC0xPT09cykscz0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylvPS0oMHx0aGlzLndvcmRzW2ldKStzLHM9bz4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZvO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLXQubGVuZ3RoLG49dGhpcy5jbG9uZSgpLGk9dCxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZigibW9kIiE9PWUpe3M9bmV3IGEobnVsbCkscy5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKylzLndvcmRzW3VdPTB9dmFyIGM9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PWMubmVnYXRpdmUmJihuPWMscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgaD1sLTE7aD49MDtoLS0pe3ZhciBmPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgraF0pKygwfG4ud29yZHNbaS5sZW5ndGgraC0xXSk7Zm9yKGY9TWF0aC5taW4oZi9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksZixoKTswIT09bi5uZWdhdGl2ZTspZi0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsaCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2hdPWYpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBhKDApLG1vZDpuZXcgYSgwKX07dmFyIGksbyxzO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KHM9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSwibW9kIiE9PWUmJihpPXMuZGl2Lm5lZygpKSwiZGl2IiE9PWUmJihvPXMubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQodCkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8ocz10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6cy5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8ocz10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaXN1Yih0KSkse2RpdjpzLmRpdixtb2Q6b30pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IGEoMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD8iZGl2Ij09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgYSh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSl9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwiZGl2IiwhMSkuZGl2fSxhLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSx1PTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKyt1O2Zvcih2YXIgYz1yLmNsb25lKCksaD1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGY9MCxkPTE7MD09KGUud29yZHNbMF0mZCkmJmY8MjY7KytmLGQ8PD0xKTtpZihmPjApZm9yKGUuaXVzaHJuKGYpO2YtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZChjKSxvLmlzdWIoaCkpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLG09MTswPT0oci53b3Jkc1swXSZtKSYmcDwyNjsrK3AsbTw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKGMpLGwuaXN1YihoKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbih1KX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IGEoMSksbz1uZXcgYSgwKSxzPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIGw9MCx1PTE7MD09KGUud29yZHNbMF0mdSkmJmw8MjY7KytsLHU8PD0xKTtpZihsPjApZm9yKGUuaXVzaHJuKGwpO2wtLSA+MDspaS5pc09kZCgpJiZpLmlhZGQocyksaS5pdXNocm4oMSk7Zm9yKHZhciBjPTAsaD0xOzA9PShyLndvcmRzWzBdJmgpJiZjPDI2OysrYyxoPDw9MSk7aWYoYz4wKWZvcihyLml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKHMpLG8uaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKG8pKTooci5pc3ViKGUpLG8uaXN1YihpKSl9dmFyIGY7cmV0dXJuIGY9MD09PWUuY21wbigxKT9pOm8sZi5jbXBuKDApPDAmJmYuaWFkZCh0KSxmfSxhLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIGE9ZTtlPXIscj1hfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sYS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sYS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxhLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sYS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIGE9aSxvPXI7MCE9PWEmJm88dGhpcy5sZW5ndGg7bysrKXt2YXIgcz0wfHRoaXMud29yZHNbb107cys9YSxhPXM+Pj4yNixzJj02NzEwODg2Myx0aGlzLndvcmRzW29dPXN9cmV0dXJuIDAhPT1hJiYodGhpcy53b3Jkc1tvXT1hLHRoaXMubGVuZ3RoKyspLHRoaXN9LGEucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxhLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHkodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG4oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sYS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtkLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxkLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpfXdoaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGQucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGQpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLDkpLG49MDtuPHI7bisrKWUud29yZHNbbl09dC53b3Jkc1tuXTtpZihlLmxlbmd0aD1yLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgaT10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPTQxOTQzMDMmaSxuPTEwO248dC5sZW5ndGg7bisrKXt2YXIgYT0wfHQud29yZHNbbl07dC53b3Jkc1tuLTEwXT0oNDE5NDMwMyZhKTw8NHxpPj4+MjIsaT1hfWk+Pj49MjIsdC53b3Jkc1tuLTEwXT1pLDA9PT1pJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShtLGQpLGkodixkKSxpKGcsZCksZy5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxhLl9wcmltZT1mdW5jdGlvbih0KXtpZihBW3RdKXJldHVybiBBW3RdO3ZhciBlO2lmKCJrMjU2Ij09PXQpZT1uZXcgcDtlbHNlIGlmKCJwMjI0Ij09PXQpZT1uZXcgbTtlbHNlIGlmKCJwMTkyIj09PXQpZT1uZXcgdjtlbHNle2lmKCJwMjU1MTkiIT09dCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit0KTtlPW5ldyBnfXJldHVybiBBW3RdPWUsZX0seS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHkucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHkucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSx5LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0seS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSx5LnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LHkucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSx5LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LHkucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LHkucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0seS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgYSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxvPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylvKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIHM9bmV3IGEoMSkudG9SZWQodGhpcyksbD1zLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGM9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihjPW5ldyBhKDIqYypjKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coYyx1KS5jbXAobCk7KWMucmVkSUFkZChsKTtmb3IodmFyIGg9dGhpcy5wb3coYyxpKSxmPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksZD10aGlzLnBvdyh0LGkpLHA9bzswIT09ZC5jbXAocyk7KXtmb3IodmFyIG09ZCx2PTA7MCE9PW0uY21wKHMpO3YrKyltPW0ucmVkU3FyKCk7bih2PHApO3ZhciBnPXRoaXMucG93KGgsbmV3IGEoMSkuaXVzaGxuKHAtdi0xKSk7Zj1mLnJlZE11bChnKSxoPWcucmVkU3FyKCksZD1kLnJlZE11bChoKSxwPXZ9cmV0dXJuIGZ9LHkucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0seS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPW5ldyBBcnJheSgxNik7clswXT1uZXcgYSgxKS50b1JlZCh0aGlzKSxyWzFdPXQ7Zm9yKHZhciBuPTI7bjxyLmxlbmd0aDtuKyspcltuXT10aGlzLm11bChyW24tMV0sdCk7dmFyIGk9clswXSxvPTAscz0wLGw9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxuPWUubGVuZ3RoLTE7bj49MDtuLS0pe2Zvcih2YXIgdT1lLndvcmRzW25dLGM9bC0xO2M+PTA7Yy0tKXt2YXIgaD11Pj5jJjE7aSE9PXJbMF0mJihpPXRoaXMuc3FyKGkpKSwwIT09aHx8MCE9PW8/KG88PD0xLG98PWgsKDQ9PT0rK3N8fDA9PT1uJiYwPT09YykmJihpPXRoaXMubXVsKGkscltvXSkscz0wLG89MCkpOnM9MH1sPTI2fXJldHVybiBpfSx5LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSx5LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sYS5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYih0KX0saShiLHkpLGIucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxiLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sYi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBhKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHZvaWQgMD09PWV8fGUsdGhpcyl9LHt9XSw2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9MDtmb3IoZT0wO2U8aTsrK2UpYSs9dFtlXS5sZW5ndGg7dmFyIG89bmV3IEFycmF5KGEpLHM9MDtmb3IoZT0wO2U8aTsrK2Upe3ZhciBsPXRbZV0sdT1sLmxlbmd0aDtmb3Iocj0wO3I8dTsrK3Ipe3ZhciBjPW9bcysrXT1uZXcgQXJyYXkodS0xKSxoPTA7Zm9yKG49MDtuPHU7KytuKW4hPT1yJiYoY1toKytdPWxbbl0pO2lmKDEmcil7dmFyIGY9Y1sxXTtjWzFdPWNbMF0sY1swXT1mfX19cmV0dXJuIG99ZS5leHBvcnRzPW59LHt9XSw2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPTA7cjx0OysrcilpZighKGVbcl08PWVbcit0XSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gaSh0LGUscixpKXtmb3IodmFyIGE9MCxvPTAscz0wLGw9dC5sZW5ndGg7czxsOysrcyl7dmFyIHU9dFtzXTtpZighbihlLHUpKXtmb3IodmFyIGM9MDtjPDIqZTsrK2MpclthKytdPXVbY107aVtvKytdPXN9fXJldHVybiBvfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGE9dC5sZW5ndGgsbz1lLmxlbmd0aDtpZighKGE8PTB8fG88PTApKXt2YXIgcz10WzBdLmxlbmd0aD4+PjE7aWYoIShzPD0wKSl7dmFyIGwsdT1oLm1hbGxvY0RvdWJsZSgyKnMqYSksYz1oLm1hbGxvY0ludDMyKGEpO2lmKChhPWkodCxzLHUsYykpPjApe2lmKDE9PT1zJiZuKWYuaW5pdChhKSxsPWYuc3dlZXBDb21wbGV0ZShzLHIsMCxhLHUsYywwLGEsdSxjKTtlbHNle3ZhciBwPWgubWFsbG9jRG91YmxlKDIqcypvKSxtPWgubWFsbG9jSW50MzIobyk7bz1pKGUscyxwLG0pLG8+MCYmKGYuaW5pdChhK28pLGw9MT09PXM/Zi5zd2VlcEJpcGFydGl0ZShzLHIsMCxhLHUsYywwLG8scCxtKTpkKHMscixuLGEsdSxjLG8scCxtKSxoLmZyZWUocCksaC5mcmVlKG0pKX1oLmZyZWUodSksaC5mcmVlKGMpfXJldHVybiBsfX19ZnVuY3Rpb24gbyh0LGUpe2MucHVzaChbdCxlXSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gYz1bXSxhKHQsdCxvLCEwKSxjfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYz1bXSxhKHQsZSxvLCExKSxjfWZ1bmN0aW9uIHUodCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIHModCk7Y2FzZSAyOnJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2EodCx0LGUsITApOmwodCxlKTtjYXNlIDM6cmV0dXJuIGEodCxlLHIsITEpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJib3gtaW50ZXJzZWN0OiBJbnZhbGlkIGFyZ3VtZW50cyIpfX1lLmV4cG9ydHM9dTt2YXIgYyxoPXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgiLi9saWIvc3dlZXAiKSxkPXQoIi4vbGliL2ludGVyc2VjdCIpfSx7Ii4vbGliL2ludGVyc2VjdCI6NzAsIi4vbGliL3N3ZWVwIjo3NCwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj0iYnJ1dGVGb3JjZSIrKHQ/IlJlZCI6IkJsdWUiKSsoZT8iRmxpcCI6IiIpKyhyPyJGdWxsIjoiIiksaT1bImZ1bmN0aW9uICIsbiwiKCIsdy5qb2luKCksIil7IiwidmFyICIsdSwiPTIqIixhLCI7Il0sbD0iZm9yKHZhciBpPSIrYysiLCIrcCsiPSIrdSsiKiIrYysiO2k8IitoKyI7KytpLCIrcCsiKz0iK3UrIil7dmFyIHgwPSIrZisiWyIrbysiKyIrcCsiXSx4MT0iK2YrIlsiK28rIisiK3ArIisiK2ErIl0seGk9IitkKyJbaV07IixNPSJmb3IodmFyIGo9IittKyIsIitiKyI9Iit1KyIqIittKyI7ajwiK3YrIjsrK2osIitiKyIrPSIrdSsiKXt2YXIgeTA9IitnKyJbIitvKyIrIitiKyJdLCIrKHI/InkxPSIrZysiWyIrbysiKyIrYisiKyIrYSsiXSwiOiIiKSsieWk9Iit5KyJbal07IjtyZXR1cm4gdD9pLnB1c2gobCxfLCI6IixNKTppLnB1c2goTSxfLCI6IixsKSxyP2kucHVzaCgiaWYoeTE8eDB8fHgxPHkwKWNvbnRpbnVlOyIpOmU/aS5wdXNoKCJpZih5MDw9eDB8fHgxPHkwKWNvbnRpbnVlOyIpOmkucHVzaCgiaWYoeTA8eDB8fHgxPHkwKWNvbnRpbnVlOyIpLGkucHVzaCgiZm9yKHZhciBrPSIrbysiKzE7azwiK2ErIjsrK2spe3ZhciByMD0iK2YrIltrKyIrcCsiXSxyMT0iK2YrIltrKyIrYSsiKyIrcCsiXSxiMD0iK2crIltrKyIrYisiXSxiMT0iK2crIltrKyIrYSsiKyIrYisiXTtpZihyMTxiMHx8YjE8cjApY29udGludWUgIitfKyI7fXZhciAiK3grIj0iK3MrIigiKSxlP2kucHVzaCgieWkseGkiKTppLnB1c2goInhpLHlpIiksaS5wdXNoKCIpO2lmKCIreCsiIT09dm9pZCAwKXJldHVybiAiK3grIjt9fX0iKSx7bmFtZTpuLGNvZGU6aS5qb2luKCIiKX19ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKGUscil7dmFyIGE9bihlLHIsdCk7aS5wdXNoKGEuY29kZSksby5wdXNoKCJyZXR1cm4gIithLm5hbWUrIigiK3cuam9pbigpKyIpOyIpfXZhciByPSJicnV0ZUZvcmNlIisodD8iRnVsbCI6IlBhcnRpYWwiKSxpPVtdLGE9dy5zbGljZSgpO3R8fGEuc3BsaWNlKDMsMCxsKTt2YXIgbz1bImZ1bmN0aW9uICIrcisiKCIrYS5qb2luKCkrIil7Il07by5wdXNoKCJpZigiK2grIi0iK2MrIj4iK3YrIi0iK20rIil7IiksdD8oZSghMCwhMSksby5wdXNoKCJ9ZWxzZXsiKSxlKCExLCExKSk6KG8ucHVzaCgiaWYoIitsKyIpeyIpLGUoITAsITApLG8ucHVzaCgifWVsc2V7IiksZSghMCwhMSksby5wdXNoKCJ9fWVsc2V7aWYoIitsKyIpeyIpLGUoITEsITApLG8ucHVzaCgifWVsc2V7IiksZSghMSwhMSksby5wdXNoKCJ9IikpLG8ucHVzaCgifX1yZXR1cm4gIityKTt2YXIgcz1pLmpvaW4oIiIpK28uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbihzKSgpfXZhciBhPSJkIixvPSJheCIscz0idnYiLGw9ImZwIix1PSJlcyIsYz0icnMiLGg9InJlIixmPSJyYiIsZD0icmkiLHA9InJwIixtPSJicyIsdj0iYmUiLGc9ImJiIix5PSJiaSIsYj0iYnAiLHg9InJ2IixfPSJRIix3PVthLG8scyxjLGgsZixkLG0sdixnLHldO3IucGFydGlhbD1pKCExKSxyLmZ1bGw9aSghMCl9LHt9XSw3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9OCp1LmxvZzIoZSsxKSoodCsxKXwwLG49dS5uZXh0UG93MihBKnIpO1MubGVuZ3RoPG4mJihsLmZyZWUoUyksUz1sLm1hbGxvY0ludDMyKG4pKTt2YXIgaT11Lm5leHRQb3cyKFQqcik7RTxpJiYobC5mcmVlKEUpLEU9bC5tYWxsb2NEb3VibGUoaSkpfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEsbyxzLGwpe3ZhciB1PUEqdDtTW3VdPWUsU1t1KzFdPXIsU1t1KzJdPW4sU1t1KzNdPWksU1t1KzRdPWEsU1t1KzVdPW87dmFyIGM9VCp0O0VbY109cyxFW2MrMV09bH1mdW5jdGlvbiBhKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7dmFyIGg9Mip0LGY9bCpoLGQ9dVtmK2VdO3Q6Zm9yKHZhciBwPWksbT1pKmg7cDxhOysrcCxtKz1oKXt2YXIgdj1vW20rZV0sZz1vW20rZSt0XTtpZighKGQ8dnx8ZzxkKSYmKCFufHxkIT09dikpe2Zvcih2YXIgeT1zW3BdLGI9ZSsxO2I8dDsrK2Ipe3ZhciB2PW9bbStiXSxnPW9bbStiK3RdLHg9dVtmK2JdLF89dVtmK2IrdF07aWYoZzx4fHxfPHYpY29udGludWUgdH12YXIgdztpZih2b2lkIDAhPT0odz1uP3IoYyx5KTpyKHksYykpKXJldHVybiB3fX19ZnVuY3Rpb24gbyh0LGUscixuLGksYSxvLHMsbCx1KXt2YXIgYz0yKnQsaD1zKmMsZj1sW2grZV07dDpmb3IodmFyIGQ9bixwPW4qYztkPGk7KytkLHArPWMpe3ZhciBtPW9bZF07aWYobSE9PXUpe3ZhciB2PWFbcCtlXSxnPWFbcCtlK3RdO2lmKCEoZjx2fHxnPGYpKXtmb3IodmFyIHk9ZSsxO3k8dDsrK3kpe3ZhciB2PWFbcCt5XSxnPWFbcCt5K3RdLGI9bFtoK3ldLHg9bFtoK3krdF07aWYoZzxifHx4PHYpY29udGludWUgdH12YXIgXz1yKG0sdSk7aWYodm9pZCAwIT09XylyZXR1cm4gX319fX1mdW5jdGlvbiBzKHQsZSxyLHMsbCx1LGMsbSxMKXtuKHQscytjKTt2YXIgQyx6PTAsST0yKnQ7Zm9yKGkoeisrLDAsMCxzLDAsYyxyPzE2OjAsLTEvMCwxLzApLHJ8fGkoeisrLDAsMCxjLDAscywxLC0xLzAsMS8wKTt6PjA7KXt6LT0xO3ZhciBEPXoqQSxQPVNbRF0sTz1TW0QrMV0sUj1TW0QrMl0sRj1TW0QrM10saj1TW0QrNF0sTj1TW0QrNV0sQj16KlQsVT1FW0JdLFY9RVtCKzFdLEg9MSZOLHE9ISEoMTYmTiksRz1sLFk9dSxYPW0sVz1MO2lmKEgmJihHPW0sWT1MLFg9bCxXPXUpLCEoMiZOJiYoUj1fKHQsUCxPLFIsRyxZLFYpLE8+PVIpfHw0Jk4mJihPPXcodCxQLE8sUixHLFksVSkpPj1SKSl7dmFyIFo9Ui1PLEo9ai1GO2lmKHEpe2lmKHQqWiooWitKKTx5KXtpZih2b2lkIDAhPT0oQz1kLnNjYW5Db21wbGV0ZSh0LFAsZSxPLFIsRyxZLEYsaixYLFcpKSlyZXR1cm4gQztjb250aW51ZX19ZWxzZXtpZih0Kk1hdGgubWluKFosSik8dil7aWYodm9pZCAwIT09KEM9aCh0LFAsZSxILE8sUixHLFksRixqLFgsVykpKXJldHVybiBDO2NvbnRpbnVlfWlmKHQqWipKPGcpe2lmKHZvaWQgMCE9PShDPWQuc2NhbkJpcGFydGl0ZSh0LFAsZSxILE8sUixHLFksRixqLFgsVykpKXJldHVybiBDO2NvbnRpbnVlfX12YXIgSz1iKHQsUCxPLFIsRyxZLFUsVik7aWYoTzxLKWlmKHQqKEstTyk8dil7aWYodm9pZCAwIT09KEM9Zih0LFArMSxlLE8sSyxHLFksRixqLFgsVykpKXJldHVybiBDfWVsc2UgaWYoUD09PXQtMil7aWYodm9pZCAwIT09KEM9SD9kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxGLGosWCxXLE8sSyxHLFkpOmQuc3dlZXBCaXBhcnRpdGUodCxlLE8sSyxHLFksRixqLFgsVykpKXJldHVybiBDfWVsc2UgaSh6KyssUCsxLE8sSyxGLGosSCwtMS8wLDEvMCksaSh6KyssUCsxLEYsaixPLEssMV5ILC0xLzAsMS8wKTtpZihLPFIpe3ZhciBRPXAodCxQLEYsaixYLFcpLCQ9WFtJKlErUF0sdHQ9eCh0LFAsUSxqLFgsVywkKTtpZih0dDxqJiZpKHorKyxQLEssUix0dCxqLCg0fEgpKyhxPzE2OjApLCQsViksRjxRJiZpKHorKyxQLEssUixGLFEsKDJ8SCkrKHE/MTY6MCksVSwkKSxRKzE9PT10dCl7aWYodm9pZCAwIT09KEM9cT9vKHQsUCxlLEssUixHLFksUSxYLFdbUV0pOmEodCxQLGUsSCxLLFIsRyxZLFEsWCxXW1FdKSkpcmV0dXJuIEN9ZWxzZSBpZihRPHR0KXt2YXIgZXQ7aWYocSl7aWYoZXQ9TSh0LFAsSyxSLEcsWSwkKSxLPGV0KXt2YXIgcnQ9eCh0LFAsSyxldCxHLFksJCk7aWYoUD09PXQtMil7aWYoSzxydCYmdm9pZCAwIT09KEM9ZC5zd2VlcENvbXBsZXRlKHQsZSxLLHJ0LEcsWSxRLHR0LFgsVykpKXJldHVybiBDO2lmKHJ0PGV0JiZ2b2lkIDAhPT0oQz1kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxydCxldCxHLFksUSx0dCxYLFcpKSlyZXR1cm4gQ31lbHNlIEs8cnQmJmkoeisrLFArMSxLLHJ0LFEsdHQsMTYsLTEvMCwxLzApLHJ0PGV0JiYoaSh6KyssUCsxLHJ0LGV0LFEsdHQsMCwtMS8wLDEvMCksaSh6KyssUCsxLFEsdHQscnQsZXQsMSwtMS8wLDEvMCkpfX1lbHNlIGV0PUg/ayh0LFAsSyxSLEcsWSwkKTpNKHQsUCxLLFIsRyxZLCQpLEs8ZXQmJihQPT09dC0yP0M9SD9kLnN3ZWVwQmlwYXJ0aXRlKHQsZSxRLHR0LFgsVyxLLGV0LEcsWSk6ZC5zd2VlcEJpcGFydGl0ZSh0LGUsSyxldCxHLFksUSx0dCxYLFcpOihpKHorKyxQKzEsSyxldCxRLHR0LEgsLTEvMCwxLzApLGkoeisrLFArMSxRLHR0LEssZXQsMV5ILC0xLzAsMS8wKSkpfX19fX1lLmV4cG9ydHM9czt2YXIgbD10KCJ0eXBlZGFycmF5LXBvb2wiKSx1PXQoImJpdC10d2lkZGxlIiksYz10KCIuL2JydXRlIiksaD1jLnBhcnRpYWwsZj1jLmZ1bGwsZD10KCIuL3N3ZWVwIikscD10KCIuL21lZGlhbiIpLG09dCgiLi9wYXJ0aXRpb24iKSx2PTEyOCxnPTE8PDIyLHk9MTw8MjIsYj1tKCIhKGxvPj1wMCkmJiEocDE+PWhpKSIsWyJwMCIsInAxIl0pLHg9bSgibG89PT1wMCIsWyJwMCJdKSxfPW0oImxvPHAwIixbInAwIl0pLHc9bSgiaGk8PXAwIixbInAwIl0pLE09bSgibG88PXAwJiZwMDw9aGkiLFsicDAiXSksaz1tKCJsbzxwMCYmcDA8PWhpIixbInAwIl0pLEE9NixUPTIsUz1sLm1hbGxvY0ludDMyKDEwMjQpLEU9bC5tYWxsb2NEb3VibGUoMTAyNCl9LHsiLi9icnV0ZSI6NjksIi4vbWVkaWFuIjo3MSwiLi9wYXJ0aXRpb24iOjcyLCIuL3N3ZWVwIjo3NCwiYml0LXR3aWRkbGUiOjY1LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgdT1pW3NdLGM9bCxoPW8qKGwtMSk7Yz5yJiZpW2grZV0+dTstLWMsaC09byl7Zm9yKHZhciBmPWgsZD1oK28scD0wO3A8bzsrK3AsKytmLCsrZCl7dmFyIG09aVtmXTtpW2ZdPWlbZF0saVtkXT1tfXZhciB2PWFbY107YVtjXT1hW2MtMV0sYVtjLTFdPXZ9fWZ1bmN0aW9uIGkodCxlLHIsaSxhLGwpe2lmKGk8PXIrMSlyZXR1cm4gcjtmb3IodmFyIHU9cixjPWksaD1pK3I+Pj4xLGY9Mip0LGQ9aCxwPWFbZipoK2VdO3U8Yzspe2lmKGMtdTxzKXtuKHQsZSx1LGMsYSxsKSxwPWFbZipoK2VdO2JyZWFrfXZhciBtPWMtdSx2PU1hdGgucmFuZG9tKCkqbSt1fDAsZz1hW2YqditlXSx5PU1hdGgucmFuZG9tKCkqbSt1fDAsYj1hW2YqeStlXSx4PU1hdGgucmFuZG9tKCkqbSt1fDAsXz1hW2YqeCtlXTtnPD1iP18+PWI/KGQ9eSxwPWIpOmc+PV8/KGQ9dixwPWcpOihkPXgscD1fKTpiPj1fPyhkPXkscD1iKTpfPj1nPyhkPXYscD1nKTooZD14LHA9Xyk7Zm9yKHZhciB3PWYqKGMtMSksTT1mKmQsaz0wO2s8ZjsrK2ssKyt3LCsrTSl7dmFyIEE9YVt3XTthW3ddPWFbTV0sYVtNXT1BfXZhciBUPWxbYy0xXTtsW2MtMV09bFtkXSxsW2RdPVQsZD1vKHQsZSx1LGMtMSxhLGwscCk7Zm9yKHZhciB3PWYqKGMtMSksTT1mKmQsaz0wO2s8ZjsrK2ssKyt3LCsrTSl7dmFyIEE9YVt3XTthW3ddPWFbTV0sYVtNXT1BfXZhciBUPWxbYy0xXTtpZihsW2MtMV09bFtkXSxsW2RdPVQsaDxkKXtmb3IoYz1kLTE7dTxjJiZhW2YqKGMtMSkrZV09PT1wOyljLT0xO2MrPTF9ZWxzZXtpZighKGQ8aCkpYnJlYWs7Zm9yKHU9ZCsxO3U8YyYmYVtmKnUrZV09PT1wOyl1Kz0xfX1yZXR1cm4gbyh0LGUscixoLGEsbCxhW2YqaCtlXSl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiLi9wYXJ0aXRpb24iKSxvPWEoImxvPHAwIixbInAwIl0pLHM9OH0seyIuL3BhcnRpdGlvbiI6NzJ9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ImFiY2RlZiIuc3BsaXQoIiIpLmNvbmNhdChlKSxuPVtdO3JldHVybiB0LmluZGV4T2YoImxvIik+PTAmJm4ucHVzaCgibG89ZVtrK25dIiksdC5pbmRleE9mKCJoaSIpPj0wJiZuLnB1c2goImhpPWVbaytvXSIpLHIucHVzaChpLnJlcGxhY2UoIl8iLG4uam9pbigpKS5yZXBsYWNlKCIkIix0KSksRnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpfWUuZXhwb3J0cz1uO3ZhciBpPSJmb3IodmFyIGo9MiphLGs9aipjLGw9ayxtPWMsbj1iLG89YStiLHA9YztkPnA7KytwLGsrPWope3ZhciBfO2lmKCQpaWYobT09PXApbSs9MSxsKz1qO2Vsc2V7Zm9yKHZhciBzPTA7aj5zOysrcyl7dmFyIHQ9ZVtrK3NdO2VbaytzXT1lW2xdLGVbbCsrXT10fXZhciB1PWZbcF07ZltwXT1mW21dLGZbbSsrXT11fX1yZXR1cm4gbSJ9LHt9XSw3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZTw9NCpmP2koMCxlLTEsdCk6aCgwLGUtMSx0KX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MioodCsxKSxpPXQrMTtpPD1lOysraSl7Zm9yKHZhciBhPXJbbisrXSxvPXJbbisrXSxzPWksbD1uLTI7cy0tID50Oyl7dmFyIHU9cltsLTJdLGM9cltsLTFdO2lmKHU8YSlicmVhaztpZih1PT09YSYmYzxvKWJyZWFrO3JbbF09dSxyW2wrMV09YyxsLT0yfXJbbF09YSxyW2wrMV09b319ZnVuY3Rpb24gYSh0LGUscil7dCo9MixlKj0yO3ZhciBuPXJbdF0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIG8odCxlLHIpe3QqPTIsZSo9MixyW3RdPXJbZV0sclt0KzFdPXJbZSsxXX1mdW5jdGlvbiBzKHQsZSxyLG4pe3QqPTIsZSo9MixyKj0yO3ZhciBpPW5bdF0sYT1uW3QrMV07blt0XT1uW2VdLG5bdCsxXT1uW2UrMV0sbltlXT1uW3JdLG5bZSsxXT1uW3IrMV0sbltyXT1pLG5bcisxXT1hfWZ1bmN0aW9uIGwodCxlLHIsbixpKXt0Kj0yLGUqPTIsaVt0XT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIHUodCxlLHIpe3QqPTIsZSo9Mjt2YXIgbj1yW3RdLGk9cltlXTtyZXR1cm4hKG48aSkmJihuIT09aXx8clt0KzFdPnJbZSsxXSl9ZnVuY3Rpb24gYyh0LGUscixuKXt0Kj0yO3ZhciBpPW5bdF07cmV0dXJuIGk8ZXx8aT09PWUmJm5bdCsxXTxyfWZ1bmN0aW9uIGgodCxlLHIpe3ZhciBuPShlLXQrMSkvNnwwLGQ9dCtuLHA9ZS1uLG09dCtlPj4xLHY9bS1uLGc9bStuLHk9ZCxiPXYseD1tLF89Zyx3PXAsTT10KzEsaz1lLTEsQT0wO3UoeSxiLHIpJiYoQT15LHk9YixiPUEpLHUoXyx3LHIpJiYoQT1fLF89dyx3PUEpLHUoeSx4LHIpJiYoQT15LHk9eCx4PUEpLHUoYix4LHIpJiYoQT1iLGI9eCx4PUEpLHUoeSxfLHIpJiYoQT15LHk9XyxfPUEpLHUoeCxfLHIpJiYoQT14LHg9XyxfPUEpLHUoYix3LHIpJiYoQT1iLGI9dyx3PUEpLHUoYix4LHIpJiYoQT1iLGI9eCx4PUEpLHUoXyx3LHIpJiYoQT1fLF89dyx3PUEpO2Zvcih2YXIgVD1yWzIqYl0sUz1yWzIqYisxXSxFPXJbMipfXSxMPXJbMipfKzFdLEM9Mip5LHo9Mip4LEk9Mip3LEQ9MipkLFA9MiptLE89MipwLFI9MDtSPDI7KytSKXt2YXIgRj1yW0MrUl0saj1yW3orUl0sTj1yW0krUl07cltEK1JdPUYscltQK1JdPWoscltPK1JdPU59byh2LHQsciksbyhnLGUscik7Zm9yKHZhciBCPU07Qjw9azsrK0IpaWYoYyhCLFQsUyxyKSlCIT09TSYmYShCLE0sciksKytNO2Vsc2UgaWYoIWMoQixFLEwscikpZm9yKDs7KXtpZihjKGssRSxMLHIpKXtjKGssVCxTLHIpPyhzKEIsTSxrLHIpLCsrTSwtLWspOihhKEIsayxyKSwtLWspO2JyZWFrfWlmKC0tazxCKWJyZWFrfWwodCxNLTEsVCxTLHIpLGwoZSxrKzEsRSxMLHIpLE0tMi10PD1mP2kodCxNLTIscik6aCh0LE0tMixyKSxlLShrKzIpPD1mP2koaysyLGUscik6aChrKzIsZSxyKSxrLU08PWY/aShNLGsscik6aChNLGsscil9ZS5leHBvcnRzPW47dmFyIGY9MzJ9LHt9XSw3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWgubmV4dFBvdzIodCk7cC5sZW5ndGg8ZSYmKGMuZnJlZShwKSxwPWMubWFsbG9jSW50MzIoZSkpLG0ubGVuZ3RoPGUmJihjLmZyZWUobSksbT1jLm1hbGxvY0ludDMyKGUpKSx2Lmxlbmd0aDxlJiYoYy5mcmVlKHYpLHY9Yy5tYWxsb2NJbnQzMihlKSksZy5sZW5ndGg8ZSYmKGMuZnJlZShnKSxnPWMubWFsbG9jSW50MzIoZSkpLHkubGVuZ3RoPGUmJihjLmZyZWUoeSkseT1jLm1hbGxvY0ludDMyKGUpKSxiLmxlbmd0aDxlJiYoYy5mcmVlKGIpLGI9Yy5tYWxsb2NJbnQzMihlKSk7dmFyIHI9OCplO3gubGVuZ3RoPHImJihjLmZyZWUoeCkseD1jLm1hbGxvY0RvdWJsZShyKSl9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gYSh0LGUscixuKXt0W3JdPW4sZVtuXT1yfWZ1bmN0aW9uIG8odCxlLHIsbixvLHMsbCx1LGMsaCl7Zm9yKHZhciB5PTAsYj0yKnQsXz10LTEsdz1iLTEsTT1yO008bjsrK00pe3ZhciBrPXNbTV0sQT1iKk07eFt5KytdPW9bQStfXSx4W3krK109LShrKzEpLHhbeSsrXT1vW0Erd10seFt5KytdPWt9Zm9yKHZhciBNPWw7TTx1OysrTSl7dmFyIGs9aFtNXStkLFQ9YipNO3hbeSsrXT1jW1QrX10seFt5KytdPS1rLHhbeSsrXT1jW1Qrd10seFt5KytdPWt9dmFyIFM9eT4+PjE7Zih4LFMpO2Zvcih2YXIgRT0wLEw9MCxNPTA7TTxTOysrTSl7dmFyIEM9MHx4WzIqTSsxXTtpZihDPj1kKUM9Qy1kfDAsaSh2LGcsTC0tLEMpO2Vsc2UgaWYoQz49MClpKHAsbSxFLS0sQyk7ZWxzZSBpZihDPD0tZCl7Qz0tQy1kfDA7Zm9yKHZhciB6PTA7ejxFOysreil7dmFyIEk9ZShwW3pdLEMpO2lmKHZvaWQgMCE9PUkpcmV0dXJuIEl9YSh2LGcsTCsrLEMpfWVsc2V7Qz0tQy0xfDA7Zm9yKHZhciB6PTA7ejxMOysreil7dmFyIEk9ZShDLHZbel0pO2lmKHZvaWQgMCE9PUkpcmV0dXJuIEl9YShwLG0sRSsrLEMpfX19ZnVuY3Rpb24gcyh0LGUscixuLG8scyxsLHUsYyxoKXtmb3IodmFyIGQ9MCxfPTIqdCx3PXQtMSxNPV8tMSxrPXI7azxuOysrayl7dmFyIEE9c1trXSsxPDwxLFQ9XyprO3hbZCsrXT1vW1Qrd10seFtkKytdPS1BLHhbZCsrXT1vW1QrTV0seFtkKytdPUF9Zm9yKHZhciBrPWw7azx1Oysrayl7dmFyIEE9aFtrXSsxPDwxLFM9XyprO3hbZCsrXT1jW1Mrd10seFtkKytdPTF8LUEseFtkKytdPWNbUytNXSx4W2QrK109MXxBfXZhciBFPWQ+Pj4xO2YoeCxFKTtmb3IodmFyIEw9MCxDPTAsej0wLGs9MDtrPEU7KytrKXt2YXIgST0wfHhbMiprKzFdLEQ9MSZJO2lmKGs8RS0xJiZJPj4xPT14WzIqayszXT4+MSYmKEQ9MixrKz0xKSxJPDApe2Zvcih2YXIgUD0tKEk+PjEpLTEsTz0wO088ejsrK08pe3ZhciBSPWUoeVtPXSxQKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfWlmKDAhPT1EKWZvcih2YXIgTz0wO088TDsrK08pe3ZhciBSPWUocFtPXSxQKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfWlmKDEhPT1EKWZvcih2YXIgTz0wO088QzsrK08pe3ZhciBSPWUodltPXSxQKTtpZih2b2lkIDAhPT1SKXJldHVybiBSfTA9PT1EP2EocCxtLEwrKyxQKToxPT09RD9hKHYsZyxDKyssUCk6Mj09PUQmJmEoeSxiLHorKyxQKX1lbHNle3ZhciBQPShJPj4xKS0xOzA9PT1EP2kocCxtLEwtLSxQKToxPT09RD9pKHYsZyxDLS0sUCk6Mj09PUQmJmkoeSxiLHotLSxQKX19fWZ1bmN0aW9uIGwodCxlLHIsbixvLHMsbCx1LGMsaCx2LGcpe3ZhciB5PTAsYj0yKnQsXz1lLHc9ZSt0LE09MSxrPTE7bj9rPWQ6TT1kO2Zvcih2YXIgQT1vO0E8czsrK0Epe3ZhciBUPUErTSxTPWIqQTt4W3krK109bFtTK19dLHhbeSsrXT0tVCx4W3krK109bFtTK3ddLHhbeSsrXT1UfWZvcih2YXIgQT1jO0E8aDsrK0Epe3ZhciBUPUErayxFPWIqQTt4W3krK109dltFK19dLHhbeSsrXT0tVH12YXIgTD15Pj4+MTtmKHgsTCk7Zm9yKHZhciBDPTAsQT0wO0E8TDsrK0Epe3ZhciB6PTB8eFsyKkErMV07aWYoejwwKXt2YXIgVD0teixJPSExO2lmKFQ+PWQ/KEk9IW4sVC09ZCk6KEk9ISFuLFQtPTEpLEkpYShwLG0sQysrLFQpO2Vsc2V7CnZhciBEPWdbVF0sUD1iKlQsTz12W1ArZSsxXSxSPXZbUCtlKzErdF07dDpmb3IodmFyIEY9MDtGPEM7KytGKXt2YXIgaj1wW0ZdLE49YipqO2lmKCEoUjxsW04rZSsxXXx8bFtOK2UrMSt0XTxPKSl7Zm9yKHZhciBCPWUrMjtCPHQ7KytCKWlmKHZbUCtCK3RdPGxbTitCXXx8bFtOK0IrdF08dltQK0JdKWNvbnRpbnVlIHQ7dmFyIFUsVj11W2pdO2lmKHZvaWQgMCE9PShVPW4/cihELFYpOnIoVixEKSkpcmV0dXJuIFV9fX19ZWxzZSBpKHAsbSxDLS0sei1NKX19ZnVuY3Rpb24gdSh0LGUscixuLGksYSxvLHMsbCx1LGMpe2Zvcih2YXIgaD0wLG09Mip0LHY9ZSxnPWUrdCx5PW47eTxpOysreSl7dmFyIGI9eStkLF89bSp5O3hbaCsrXT1hW18rdl0seFtoKytdPS1iLHhbaCsrXT1hW18rZ10seFtoKytdPWJ9Zm9yKHZhciB5PXM7eTxsOysreSl7dmFyIGI9eSsxLHc9bSp5O3hbaCsrXT11W3crdl0seFtoKytdPS1ifXZhciBNPWg+Pj4xO2YoeCxNKTtmb3IodmFyIGs9MCx5PTA7eTxNOysreSl7dmFyIEE9MHx4WzIqeSsxXTtpZihBPDApe3ZhciBiPS1BO2lmKGI+PWQpcFtrKytdPWItZDtlbHNle2ItPTE7dmFyIFQ9Y1tiXSxTPW0qYixFPXVbUytlKzFdLEw9dVtTK2UrMSt0XTt0OmZvcih2YXIgQz0wO0M8azsrK0Mpe3ZhciB6PXBbQ10sST1vW3pdO2lmKEk9PT1UKWJyZWFrO3ZhciBEPW0qejtpZighKEw8YVtEK2UrMV18fGFbRCtlKzErdF08RSkpe2Zvcih2YXIgUD1lKzI7UDx0OysrUClpZih1W1MrUCt0XTxhW0QrUF18fGFbRCtQK3RdPHVbUytQXSljb250aW51ZSB0O3ZhciBPPXIoSSxUKTtpZih2b2lkIDAhPT1PKXJldHVybiBPfX19fWVsc2V7Zm9yKHZhciBiPUEtZCxDPWstMTtDPj0wOy0tQylpZihwW0NdPT09Yil7Zm9yKHZhciBQPUMrMTtQPGs7KytQKXBbUC0xXT1wW1BdO2JyZWFrfS0ta319fWUuZXhwb3J0cz17aW5pdDpuLHN3ZWVwQmlwYXJ0aXRlOm8sc3dlZXBDb21wbGV0ZTpzLHNjYW5CaXBhcnRpdGU6bCxzY2FuQ29tcGxldGU6dX07dmFyIGM9dCgidHlwZWRhcnJheS1wb29sIiksaD10KCJiaXQtdHdpZGRsZSIpLGY9dCgiLi9zb3J0IiksZD0xPDwyOCxwPWMubWFsbG9jSW50MzIoMTAyNCksbT1jLm1hbGxvY0ludDMyKDEwMjQpLHY9Yy5tYWxsb2NJbnQzMigxMDI0KSxnPWMubWFsbG9jSW50MzIoMTAyNCkseT1jLm1hbGxvY0ludDMyKDEwMjQpLGI9Yy5tYWxsb2NJbnQzMigxMDI0KSx4PWMubWFsbG9jRG91YmxlKDgxOTIpfSx7Ii4vc29ydCI6NzMsImJpdC10d2lkZGxlIjo2NSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHQ+Wil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgiKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189aS5wcm90b3R5cGUsZX1mdW5jdGlvbiBpKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGwodCl9cmV0dXJuIGEodCxlLHIpfWZ1bmN0aW9uIGEodCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9oKHQsZSxyKToic3RyaW5nIj09dHlwZW9mIHQ/dSh0LGUpOmYodCl9ZnVuY3Rpb24gbyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBvKHQpLHQ8PTA/bih0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9uKHQpLmZpbGwoZSxyKTpuKHQpLmZpbGwoZSk6bih0KX1mdW5jdGlvbiBsKHQpe3JldHVybiBvKHQpLG4odDwwPzA6MHxkKHQpKX1mdW5jdGlvbiB1KHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWV8fChlPSJ1dGY4IiksIWkuaXNFbmNvZGluZyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgcj0wfG0odCxlKSxhPW4ociksbz1hLndyaXRlKHQsZSk7cmV0dXJuIG8hPT1yJiYoYT1hLnNsaWNlKDAsbykpLGF9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9dC5sZW5ndGg8MD8wOjB8ZCh0Lmxlbmd0aCkscj1uKGUpLGk9MDtpPGU7aSs9MSlyW2ldPTI1NSZ0W2ldO3JldHVybiByfWZ1bmN0aW9uIGgodCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8ZSsocnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt2YXIgbjtyZXR1cm4gbj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUsciksbi5fX3Byb3RvX189aS5wcm90b3R5cGUsbn1mdW5jdGlvbiBmKHQpe2lmKGkuaXNCdWZmZXIodCkpe3ZhciBlPTB8ZCh0Lmxlbmd0aCkscj1uKGUpO3JldHVybiAwPT09ci5sZW5ndGg/cjoodC5jb3B5KHIsMCwwLGUpLHIpfWlmKHQpe2lmKEcodCl8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxZKHQubGVuZ3RoKT9uKDApOmModCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gYyh0LmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX1mdW5jdGlvbiBkKHQpe2lmKHQ+PVopdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK1oudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHx0fWZ1bmN0aW9uIHAodCl7cmV0dXJuK3QhPXQmJih0PTApLGkuYWxsb2MoK3QpfWZ1bmN0aW9uIG0odCxlKXtpZihpLmlzQnVmZmVyKHQpKXJldHVybiB0Lmxlbmd0aDtpZihHKHQpfHx0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIHQuYnl0ZUxlbmd0aDsic3RyaW5nIiE9dHlwZW9mIHQmJih0PSIiK3QpO3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXJldHVybiAwO2Zvcih2YXIgbj0hMTs7KXN3aXRjaChlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiByO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSB2b2lkIDA6cmV0dXJuIEIodCkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipyO2Nhc2UiaGV4IjpyZXR1cm4gcj4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBIKHQpLmxlbmd0aDtkZWZhdWx0OmlmKG4pcmV0dXJuIEIodCkubGVuZ3RoO2U9KCIiK2UpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gdih0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZihyPj4+PTAsZT4+Pj0wLHI8PWUpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiB6KHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBTKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gTCh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gQyh0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEkodGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIHkodCxlLHIsbixhKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxyPStyLFkocikmJihyPWE/MDp0Lmxlbmd0aC0xKSxyPDAmJihyPXQubGVuZ3RoK3IpLHI+PXQubGVuZ3RoKXtpZihhKXJldHVybi0xO3I9dC5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWEpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9aS5mcm9tKGUsbikpLGkuaXNCdWZmZXIoZSkpcmV0dXJuIDA9PT1lLmxlbmd0aD8tMTpiKHQsZSxyLG4sYSk7aWYoIm51bWJlciI9PXR5cGVvZiBlKXJldHVybiBlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/YT9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodCxlLHIpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwodCxlLHIpOmIodCxbZV0scixuLGEpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIGIodCxlLHIsbixpKXtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIDE9PT1vP3RbZV06dC5yZWFkVUludDE2QkUoZSpvKX12YXIgbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn12YXIgdTtpZihpKXt2YXIgYz0tMTtmb3IodT1yO3U8czt1KyspaWYoYSh0LHUpPT09YShlLC0xPT09Yz8wOnUtYykpe2lmKC0xPT09YyYmKGM9dSksdS1jKzE9PT1sKXJldHVybiBjKm99ZWxzZS0xIT09YyYmKHUtPXUtYyksYz0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSx1PXI7dT49MDt1LS0pe2Zvcih2YXIgaD0hMCxmPTA7ZjxsO2YrKylpZihhKHQsdStmKSE9PWEoZSxmKSl7aD0hMTticmVha31pZihoKXJldHVybiB1fXJldHVybi0xfWZ1bmN0aW9uIHgodCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBhPWUubGVuZ3RoO2lmKGElMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmEvMiYmKG49YS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludChlLnN1YnN0cigyKm8sMiksMTYpO2lmKFkocykpcmV0dXJuIG87dFtyK29dPXN9cmV0dXJuIG99ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gcShCKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIHcodCxlLHIsbil7cmV0dXJuIHEoVShlKSx0LHIsbil9ZnVuY3Rpb24gTSh0LGUscixuKXtyZXR1cm4gdyh0LGUscixuKX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiBxKEgoZSksdCxyLG4pfWZ1bmN0aW9uIEEodCxlLHIsbil7cmV0dXJuIHEoVihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBUKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9YLmZyb21CeXRlQXJyYXkodCk6WC5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gUyh0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBhPXRbaV0sbz1udWxsLHM9YT4yMzk/NDphPjIyMz8zOmE+MTkxPzI6MTtpZihpK3M8PXIpe3ZhciBsLHUsYyxoO3N3aXRjaChzKXtjYXNlIDE6YTwxMjgmJihvPWEpO2JyZWFrO2Nhc2UgMjpsPXRbaSsxXSwxMjg9PSgxOTImbCkmJihoPSgzMSZhKTw8Nnw2MyZsKT4xMjcmJihvPWgpO2JyZWFrO2Nhc2UgMzpsPXRbaSsxXSx1PXRbaSsyXSwxMjg9PSgxOTImbCkmJjEyOD09KDE5MiZ1KSYmKGg9KDE1JmEpPDwxMnwoNjMmbCk8PDZ8NjMmdSk+MjA0NyYmKGg8NTUyOTZ8fGg+NTczNDMpJiYobz1oKTticmVhaztjYXNlIDQ6bD10W2krMV0sdT10W2krMl0sYz10W2krM10sMTI4PT0oMTkyJmwpJiYxMjg9PSgxOTImdSkmJjEyOD09KDE5MiZjKSYmKGg9KDE1JmEpPDwxOHwoNjMmbCk8PDEyfCg2MyZ1KTw8Nnw2MyZjKT42NTUzNSYmaDwxMTE0MTEyJiYobz1oKX19bnVsbD09PW8/KG89NjU1MzMscz0xKTpvPjY1NTM1JiYoby09NjU1MzYsbi5wdXNoKG8+Pj4xMCYxMDIzfDU1Mjk2KSxvPTU2MzIwfDEwMjMmbyksbi5wdXNoKG8pLGkrPXN9cmV0dXJuIEUobil9ZnVuY3Rpb24gRSh0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD1KKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0KTtmb3IodmFyIHI9IiIsbj0wO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPUopKTtyZXR1cm4gcn1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbj0iIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gQyh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPSIiLGE9ZTthPHI7KythKWkrPU4odFthXSk7cmV0dXJuIGl9ZnVuY3Rpb24gSSh0LGUscil7Zm9yKHZhciBuPXQuc2xpY2UoZSxyKSxpPSIiLGE9MDthPG4ubGVuZ3RoO2ErPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW2FdKzI1NipuW2ErMV0pO3JldHVybiBpfWZ1bmN0aW9uIEQodCxlLHIpe2lmKHQlMSE9MHx8dDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIFAodCxlLHIsbixhLG8pe2lmKCFpLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihlPmF8fGU8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBPKHQsZSxyLG4saSxhKXtpZihyK24+dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gUih0LGUscixuLGkpe3JldHVybiBlPStlLHI+Pj49MCxpfHxPKHQsZSxyLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLFcud3JpdGUodCxlLHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gRih0LGUscixuLGkpe3JldHVybiBlPStlLHI+Pj49MCxpfHxPKHQsZSxyLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksVy53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1mdW5jdGlvbiBqKHQpe2lmKHQ9dC50cmltKCkucmVwbGFjZShLLCIiKSx0Lmxlbmd0aDwyKXJldHVybiIiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9Ij0iO3JldHVybiB0fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ8MTY/IjAiK3QudG9TdHJpbmcoMTYpOnQudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEIodCxlKXtlPWV8fDEvMDtmb3IodmFyIHIsbj10Lmxlbmd0aCxpPW51bGwsYT1bXSxvPTA7bzxuOysrbyl7aWYoKHI9dC5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYoZS09Myk+LTEmJmEucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigoZS09MSk8MClicmVhazthLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKChlLT0yKTwwKWJyZWFrO2EucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigoZS09Myk8MClicmVhazthLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChlLT00KTwwKWJyZWFrO2EucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIGF9ZnVuY3Rpb24gVSh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBWKHQsZSl7Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK28pcj10LmNoYXJDb2RlQXQobyksbj1yPj44LGk9ciUyNTYsYS5wdXNoKGkpLGEucHVzaChuKTtyZXR1cm4gYX1mdW5jdGlvbiBIKHQpe3JldHVybiBYLnRvQnl0ZUFycmF5KGoodCkpfWZ1bmN0aW9uIHEodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gRyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCl9ZnVuY3Rpb24gWSh0KXtyZXR1cm4gdCE9PXR9dmFyIFg9dCgiYmFzZTY0LWpzIiksVz10KCJpZWVlNzU0Iik7ci5CdWZmZXI9aSxyLlNsb3dCdWZmZXI9cCxyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBaPTIxNDc0ODM2NDc7ci5rTWF4TGVuZ3RoPVosaS5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PW5ldyBVaW50OEFycmF5KDEpO3JldHVybiB0Ll9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09dC5mb28oKX1jYXRjaCh0KXtyZXR1cm4hMX19KCksaS5UWVBFRF9BUlJBWV9TVVBQT1JUfHwidW5kZWZpbmVkIj09dHlwZW9mIGNvbnNvbGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBjb25zb2xlLmVycm9yfHxjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSwidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJmlbU3ltYm9sLnNwZWNpZXNdPT09aSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGksU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITF9KSxpLnBvb2xTaXplPTgxOTIsaS5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gYSh0LGUscil9LGkucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxpLl9fcHJvdG9fXz1VaW50OEFycmF5LGkuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBzKHQsZSxyKX0saS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0saS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCl9LGkuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiEwPT09dC5faXNCdWZmZXJ9LGkuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKCFpLmlzQnVmZmVyKHQpfHwhaS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzIik7aWYodD09PWUpcmV0dXJuIDA7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsYT0wLG89TWF0aC5taW4ocixuKTthPG87KythKWlmKHRbYV0hPT1lW2FdKXtyPXRbYV0sbj1lW2FdO2JyZWFrfXJldHVybiByPG4/LTE6bjxyPzE6MH0saS5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxpLmNvbmNhdD1mdW5jdGlvbih0LGUpe2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09dC5sZW5ndGgpcmV0dXJuIGkuYWxsb2MoMCk7dmFyIHI7aWYodm9pZCAwPT09ZSlmb3IoZT0wLHI9MDtyPHQubGVuZ3RoOysrcillKz10W3JdLmxlbmd0aDt2YXIgbj1pLmFsbG9jVW5zYWZlKGUpLGE9MDtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbz10W3JdO2lmKCFpLmlzQnVmZmVyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtvLmNvcHkobixhKSxhKz1vLmxlbmd0aH1yZXR1cm4gbn0saS5ieXRlTGVuZ3RoPW0saS5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLGkucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilnKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpZyh0aGlzLGUsZSszKSxnKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClnKHRoaXMsZSxlKzcpLGcodGhpcyxlKzEsZSs2KSxnKHRoaXMsZSsyLGUrNSksZyh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dD8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9TKHRoaXMsMCx0KTp2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe2lmKCFpLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR8fDA9PT1pLmNvbXBhcmUodGhpcyx0KX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PSIiLGU9ci5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLGUpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5lJiYodCs9IiAuLi4gIikpLCI8QnVmZmVyICIrdCsiPiJ9LGkucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odCxlLHIsbixhKXtpZighaS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1hJiYoYT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGE+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWEmJmU+PXIpcmV0dXJuIDA7aWYobj49YSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKGU+Pj49MCxyPj4+PTAsbj4+Pj0wLGE+Pj49MCx0aGlzPT09dClyZXR1cm4gMDtmb3IodmFyIG89YS1uLHM9ci1lLGw9TWF0aC5taW4obyxzKSx1PXRoaXMuc2xpY2UobixhKSxjPXQuc2xpY2UoZSxyKSxoPTA7aDxsOysraClpZih1W2hdIT09Y1toXSl7bz11W2hdLHM9Y1toXTticmVha31yZXR1cm4gbzxzPy0xOnM8bz8xOjB9LGkucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0LGUscil9LGkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB5KHRoaXMsdCxlLHIsITApfSxpLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHkodGhpcyx0LGUsciwhMSl9LGkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PWUpbj0idXRmOCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiYic3RyaW5nIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtlPj4+PTAsaXNGaW5pdGUocik/KHI+Pj49MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBhPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBfKHRoaXMsdCxlLHIpO2Nhc2UiYXNjaWkiOnJldHVybiB3KHRoaXMsdCxlLHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIE0odGhpcyx0LGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiBrKHRoaXMsdCxlLHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gQSh0aGlzLHQsZSxyKTtkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGE9ITB9fSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBKPTQwOTY7aS5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aDt0PX5+dCxlPXZvaWQgMD09PWU/cjp+fmUsdDwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLGU8MD8oZSs9cik8MCYmKGU9MCk6ZT5yJiYoZT1yKSxlPHQmJihlPXQpO3ZhciBuPXRoaXMuc3ViYXJyYXkodCxlKTtyZXR1cm4gbi5fX3Byb3RvX189aS5wcm90b3R5cGUsbn0saS5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxEKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBufSxpLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEQodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0Ky0tZV0saT0xO2U+MCYmKGkqPTI1Nik7KW4rPXRoaXNbdCstLWVdKmk7cmV0dXJuIG59LGkucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdF19LGkucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fSxpLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEQodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdPDw4fHRoaXNbdCsxXX0saS5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0saS5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0XSsodGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdKX0saS5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEQodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsYT0wOysrYTxlJiYoaSo9MjU2KTspbis9dGhpc1t0K2FdKmk7cmV0dXJuIGkqPTEyOCxuPj1pJiYobi09TWF0aC5wb3coMiw4KmUpKSxufSxpLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RCh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj1lLGk9MSxhPXRoaXNbdCstLW5dO24+MCYmKGkqPTI1Nik7KWErPXRoaXNbdCstLW5dKmk7cmV0dXJuIGkqPTEyOCxhPj1pJiYoYS09TWF0aC5wb3coMiw4KmUpKSxhfSxpLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3RdPy0xKigyNTUtdGhpc1t0XSsxKTp0aGlzW3RdfSxpLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxEKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0XXx0aGlzW3QrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGkucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7dD4+Pj0wLGV8fEQodCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3QrMV18dGhpc1t0XTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0saS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEQodCw0LHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2fHRoaXNbdCszXTw8MjR9LGkucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XTw8MjR8dGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdfSxpLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RCh0LDQsdGhpcy5sZW5ndGgpLFcucmVhZCh0aGlzLHQsITAsMjMsNCl9LGkucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsNCx0aGlzLmxlbmd0aCksVy5yZWFkKHRoaXMsdCwhMSwyMyw0KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsOCx0aGlzLmxlbmd0aCksVy5yZWFkKHRoaXMsdCwhMCw1Miw4KX0saS5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxEKHQsOCx0aGlzLmxlbmd0aCksVy5yZWFkKHRoaXMsdCwhMSw1Miw4KX0saS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlPj4+PTAscj4+Pj0wLCFuKXtQKHRoaXMsdCxlLHIsTWF0aC5wb3coMiw4KnIpLTEsMCl9dmFyIGk9MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihpKj0yNTYpOyl0aGlzW2UrYV09dC9pJjI1NTtyZXR1cm4gZStyfSxpLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGU+Pj49MCxyPj4+PTAsIW4pe1AodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKX12YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0saS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGkucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxpLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0saS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGkucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxpLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtQKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxpLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtQKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGkucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8UCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxpLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGkucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fFAodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxQKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0saS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUih0aGlzLHQsZSwhMCxyKX0saS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUih0aGlzLHQsZSwhMSxyKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEYodGhpcyx0LGUsITAscil9LGkucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBGKHRoaXMsdCxlLCExLHIpfSxpLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksdC5sZW5ndGgtZTxuLXImJihuPXQubGVuZ3RoLWUrcik7dmFyIGksYT1uLXI7aWYodGhpcz09PXQmJnI8ZSYmZTxuKWZvcihpPWEtMTtpPj0wOy0taSl0W2krZV09dGhpc1tpK3JdO2Vsc2UgaWYoYTwxZTMpZm9yKGk9MDtpPGE7KytpKXRbaStlXT10aGlzW2krcl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0LHRoaXMuc3ViYXJyYXkocixyK2EpLGUpO3JldHVybiBhfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoInN0cmluZyI9PXR5cGVvZiBlPyhuPWUsZT0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09dC5sZW5ndGgpe3ZhciBhPXQuY2hhckNvZGVBdCgwKTthPDI1NiYmKHQ9YSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFpLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiB0JiYodCY9MjU1KTtpZihlPDB8fHRoaXMubGVuZ3RoPGV8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PWUpcmV0dXJuIHRoaXM7ZT4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCx0fHwodD0wKTt2YXIgbztpZigibnVtYmVyIj09dHlwZW9mIHQpZm9yKG89ZTtvPHI7KytvKXRoaXNbb109dDtlbHNle3ZhciBzPWkuaXNCdWZmZXIodCk/dDpuZXcgaSh0LG4pLGw9cy5sZW5ndGg7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPXNbbyVsXX1yZXR1cm4gdGhpc307dmFyIEs9L1teK1wvMC05QS1aYS16LV9dL2d9LHsiYmFzZTY0LWpzIjo3NixpZWVlNzU0OjI4N31dLDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGg7aWYoZSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7cmV0dXJuIj0iPT09dFtlLTJdPzI6Ij0iPT09dFtlLTFdPzE6MH1mdW5jdGlvbiBpKHQpe3JldHVybiAzKnQubGVuZ3RoLzQtbih0KX1mdW5jdGlvbiBhKHQpe3ZhciBlLHIsaSxhLG8scyxsPXQubGVuZ3RoO289bih0KSxzPW5ldyBoKDMqbC80LW8pLGk9bz4wP2wtNDpsO3ZhciB1PTA7Zm9yKGU9MCxyPTA7ZTxpO2UrPTQscis9MylhPWNbdC5jaGFyQ29kZUF0KGUpXTw8MTh8Y1t0LmNoYXJDb2RlQXQoZSsxKV08PDEyfGNbdC5jaGFyQ29kZUF0KGUrMildPDw2fGNbdC5jaGFyQ29kZUF0KGUrMyldLHNbdSsrXT1hPj4xNiYyNTUsc1t1KytdPWE+PjgmMjU1LHNbdSsrXT0yNTUmYTtyZXR1cm4gMj09PW8/KGE9Y1t0LmNoYXJDb2RlQXQoZSldPDwyfGNbdC5jaGFyQ29kZUF0KGUrMSldPj40LHNbdSsrXT0yNTUmYSk6MT09PW8mJihhPWNbdC5jaGFyQ29kZUF0KGUpXTw8MTB8Y1t0LmNoYXJDb2RlQXQoZSsxKV08PDR8Y1t0LmNoYXJDb2RlQXQoZSsyKV0+PjIsc1t1KytdPWE+PjgmMjU1LHNbdSsrXT0yNTUmYSksc31mdW5jdGlvbiBvKHQpe3JldHVybiB1W3Q+PjE4JjYzXSt1W3Q+PjEyJjYzXSt1W3Q+PjYmNjNdK3VbNjMmdF19ZnVuY3Rpb24gcyh0LGUscil7Zm9yKHZhciBuLGk9W10sYT1lO2E8cjthKz0zKW49KHRbYV08PDE2KSsodFthKzFdPDw4KSt0W2ErMl0saS5wdXNoKG8obikpO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj1yJTMsaT0iIixhPVtdLG89MCxsPXItbjtvPGw7bys9MTYzODMpYS5wdXNoKHModCxvLG8rMTYzODM+bD9sOm8rMTYzODMpKTtyZXR1cm4gMT09PW4/KGU9dFtyLTFdLGkrPXVbZT4+Ml0saSs9dVtlPDw0JjYzXSxpKz0iPT0iKToyPT09biYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGkrPXVbZT4+MTBdLGkrPXVbZT4+NCY2M10saSs9dVtlPDwyJjYzXSxpKz0iPSIpLGEucHVzaChpKSxhLmpvaW4oIiIpfXIuYnl0ZUxlbmd0aD1pLHIudG9CeXRlQXJyYXk9YSxyLmZyb21CeXRlQXJyYXk9bDtmb3IodmFyIHU9W10sYz1bXSxoPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGY9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGQ9MCxwPWYubGVuZ3RoO2Q8cDsrK2QpdVtkXT1mW2RdLGNbZi5jaGFyQ29kZUF0KGQpXT1kO2NbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGNbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm5bTWF0aC5taW4odFswXSx0WzFdKSxNYXRoLm1heCh0WzBdLHRbMV0pXX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQubWFwKG4pLnNvcnQoaSl9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9ZnVuY3Rpb24gcyh0LGUscil7QXJyYXkuaXNBcnJheShlKT8ocj1yfHx7fSxlPWV8fFtdKToocj1lfHx7fSxlPVtdKTt2YXIgbj0hIW8ociwiZGVsYXVuYXkiLCEwKSxpPSEhbyhyLCJpbnRlcmlvciIsITApLHM9ISFvKHIsImV4dGVyaW9yIiwhMCksZj0hIW8ociwiaW5maW5pdHkiLCExKTtpZighaSYmIXN8fDA9PT10Lmxlbmd0aClyZXR1cm5bXTt2YXIgZD1sKHQsZSk7aWYobnx8aSE9PXN8fGYpe2Zvcih2YXIgcD11KHQubGVuZ3RoLGEoZSkpLG09MDttPGQubGVuZ3RoOysrbSl7dmFyIHY9ZFttXTtwLmFkZFRyaWFuZ2xlKHZbMF0sdlsxXSx2WzJdKX1yZXR1cm4gbiYmYyh0LHApLHM/aT9mP2gocCwwLGYpOnAuY2VsbHMoKTpoKHAsMSxmKTpoKHAsLTEpfXJldHVybiBkfXZhciBsPXQoIi4vbGliL21vbm90b25lIiksdT10KCIuL2xpYi90cmlhbmd1bGF0aW9uIiksYz10KCIuL2xpYi9kZWxhdW5heSIpLGg9dCgiLi9saWIvZmlsdGVyIik7ZS5leHBvcnRzPXN9LHsiLi9saWIvZGVsYXVuYXkiOjc4LCIuL2xpYi9maWx0ZXIiOjc5LCIuL2xpYi9tb25vdG9uZSI6ODAsIi4vbGliL3RyaWFuZ3VsYXRpb24iOjgxfV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksbyl7dmFyIHM9ZS5vcHBvc2l0ZShuLGkpO2lmKCEoczwwKSl7aWYoaTxuKXt2YXIgbD1uO249aSxpPWwsbD1vLG89cyxzPWx9ZS5pc0NvbnN0cmFpbnQobixpKXx8YSh0W25dLHRbaV0sdFtvXSx0W3NdKTwwJiZyLnB1c2gobixpKX19ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1bXSxpPXQubGVuZ3RoLG89ZS5zdGFycyxzPTA7czxpOysrcylmb3IodmFyIGw9b1tzXSx1PTE7dTxsLmxlbmd0aDt1Kz0yKXt2YXIgYz1sW3VdO2lmKCEoYzxzKSYmIWUuaXNDb25zdHJhaW50KHMsYykpe2Zvcih2YXIgaD1sW3UtMV0sZj0tMSxkPTE7ZDxsLmxlbmd0aDtkKz0yKWlmKGxbZC0xXT09PWMpe2Y9bFtkXTticmVha31mPDB8fGEodFtzXSx0W2NdLHRbaF0sdFtmXSk8MCYmci5wdXNoKHMsYyl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgYz1yLnBvcCgpLHM9ci5wb3AoKSxoPS0xLGY9LTEsbD1vW3NdLHA9MTtwPGwubGVuZ3RoO3ArPTIpe3ZhciBtPWxbcC0xXSx2PWxbcF07bT09PWM/Zj12OnY9PT1jJiYoaD1tKX1oPDB8fGY8MHx8KGEodFtzXSx0W2NdLHRbaF0sdFtmXSk+PTB8fChlLmZsaXAocyxjKSxuKHQsZSxyLGgscyxmKSxuKHQsZSxyLHMsZixoKSxuKHQsZSxyLGYsYyxoKSxuKHQsZSxyLGMsaCxmKSkpfX12YXIgYT10KCJyb2J1c3QtaW4tc3BoZXJlIilbNF07dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtlLmV4cG9ydHM9aX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6ODIsInJvYnVzdC1pbi1zcGhlcmUiOjUwNH1dLDc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9aSx0aGlzLm5leHQ9YSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9dC5jZWxscygpLGE9ci5sZW5ndGgsbz0wO288YTsrK28pe3ZhciBzPXJbb10sbD1zWzBdLHU9c1sxXSxjPXNbMl07dTxjP3U8bCYmKHNbMF09dSxzWzFdPWMsc1syXT1sKTpjPGwmJihzWzBdPWMsc1sxXT1sLHNbMl09dSl9ci5zb3J0KGkpO2Zvcih2YXIgaD1uZXcgQXJyYXkoYSksbz0wO288aC5sZW5ndGg7KytvKWhbb109MDt2YXIgZj1bXSxkPVtdLHA9bmV3IEFycmF5KDMqYSksbT1uZXcgQXJyYXkoMyphKSx2PW51bGw7ZSYmKHY9W10pO2Zvcih2YXIgZz1uZXcgbihyLHAsbSxoLGYsZCx2KSxvPTA7bzxhOysrbylmb3IodmFyIHM9cltvXSx5PTA7eTwzOysreSl7dmFyIGw9c1t5XSx1PXNbKHkrMSklM10sYj1wWzMqbyt5XT1nLmxvY2F0ZSh1LGwsdC5vcHBvc2l0ZSh1LGwpKSx4PW1bMypvK3ldPXQuaXNDb25zdHJhaW50KGwsdSk7YjwwJiYoeD9kLnB1c2gobyk6KGYucHVzaChvKSxoW29dPTEpLGUmJnYucHVzaChbdSxsLC0xXSkpfXJldHVybiBnfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHQubGVuZ3RoOysraSllW2ldPT09ciYmKHRbbisrXT10W2ldKTtyZXR1cm4gdC5sZW5ndGg9bix0fWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPWEodCxyKTtpZigwPT09ZSlyZXR1cm4gcj9uLmNlbGxzLmNvbmNhdChuLmJvdW5kYXJ5KTpuLmNlbGxzO2Zvcih2YXIgaT0xLHM9bi5hY3RpdmUsbD1uLm5leHQsdT1uLmZsYWdzLGM9bi5jZWxscyxoPW4uY29uc3RyYWludCxmPW4ubmVpZ2hib3I7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBkPXMucG9wKCk7aWYodVtkXSE9PS1pKXt1W2RdPWk7Zm9yKHZhciBwPShjW2RdLDApO3A8MzsrK3Ape3ZhciBtPWZbMypkK3BdO20+PTAmJjA9PT11W21dJiYoaFszKmQrcF0/bC5wdXNoKG0pOihzLnB1c2gobSksdVttXT1pKSl9fX12YXIgdj1sO2w9cyxzPXYsbC5sZW5ndGg9MCxpPS1pfXZhciBnPW8oYyx1LGUpO3JldHVybiByP2cuY29uY2F0KG4uYm91bmRhcnkpOmd9dmFyIGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtlLmV4cG9ydHM9cyxuLnByb3RvdHlwZS5sb2NhdGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwLDBdO3JldHVybiBmdW5jdGlvbihlLHIsbil7dmFyIGE9ZSxvPXIscz1uO3JldHVybiByPG4/cjxlJiYoYT1yLG89bixzPWUpOm48ZSYmKGE9bixvPWUscz1yKSxhPDA/LTE6KHRbMF09YSx0WzFdPW8sdFsyXT1zLGwuZXEodGhpcy5jZWxscyx0LGkpKX19KCl9LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgyfV0sODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuaWR4PXIsdGhpcy5sb3dlcklkcz1uLHRoaXMudXBwZXJJZHM9aX1mdW5jdGlvbiBpKHQsZSxyLG4pe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMudHlwZT1yLHRoaXMuaWR4PW59ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQuYVswXS1lLmFbMF18fHQuYVsxXS1lLmFbMV18fHQudHlwZS1lLnR5cGU7cmV0dXJuIHJ8fCh0LnR5cGUhPT1wJiYocj1kKHQuYSx0LmIsZS5iKSk/cjp0LmlkeC1lLmlkeCl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBkKHQuYSx0LmIsZSl9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2Zvcih2YXIgYT1mLmx0KGUsbixvKSxzPWYuZ3QoZSxuLG8pLGw9YTtsPHM7KytsKXtmb3IodmFyIHU9ZVtsXSxjPXUubG93ZXJJZHMsaD1jLmxlbmd0aDtoPjEmJmQocltjW2gtMl1dLHJbY1toLTFdXSxuKT4wOyl0LnB1c2goW2NbaC0xXSxjW2gtMl0saV0pLGgtPTE7Yy5sZW5ndGg9aCxjLnB1c2goaSk7Zm9yKHZhciBwPXUudXBwZXJJZHMsaD1wLmxlbmd0aDtoPjEmJmQocltwW2gtMl1dLHJbcFtoLTFdXSxuKTwwOyl0LnB1c2goW3BbaC0yXSxwW2gtMV0saV0pLGgtPTE7cC5sZW5ndGg9aCxwLnB1c2goaSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcjtyZXR1cm4ocj10LmFbMF08ZS5hWzBdP2QodC5hLHQuYixlLmEpOmQoZS5iLGUuYSx0LmEpKT9yOihyPWUuYlswXTx0LmJbMF0/ZCh0LmEsdC5iLGUuYik6ZChlLmIsZS5hLHQuYikpfHx0LmlkeC1lLmlkeH1mdW5jdGlvbiB1KHQsZSxyKXt2YXIgaT1mLmxlKHQscixsKSxhPXRbaV0sbz1hLnVwcGVySWRzLHM9b1tvLmxlbmd0aC0xXTthLnVwcGVySWRzPVtzXSx0LnNwbGljZShpKzEsMCxuZXcgbihyLmEsci5iLHIuaWR4LFtzXSxvKSl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ci5hO3IuYT1yLmIsci5iPW47dmFyIGk9Zi5lcSh0LHIsbCksYT10W2ldO3RbaS0xXS51cHBlcklkcz1hLnVwcGVySWRzLHQuc3BsaWNlKGksMSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxvPWUubGVuZ3RoLGw9W10saD0wO2g8cjsrK2gpbC5wdXNoKG5ldyBpKHRbaF0sbnVsbCxwLGgpKTtmb3IodmFyIGg9MDtoPG87KytoKXt2YXIgZj1lW2hdLGQ9dFtmWzBdXSxnPXRbZlsxXV07ZFswXTxnWzBdP2wucHVzaChuZXcgaShkLGcsdixoKSxuZXcgaShnLGQsbSxoKSk6ZFswXT5nWzBdJiZsLnB1c2gobmV3IGkoZyxkLHYsaCksbmV3IGkoZCxnLG0saCkpfWwuc29ydChhKTtmb3IodmFyIHk9bFswXS5hWzBdLSgxK01hdGguYWJzKGxbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSxiPVtuZXcgbihbeSwxXSxbeSwwXSwtMSxbXSxbXSxbXSxbXSldLHg9W10saD0wLF89bC5sZW5ndGg7aDxfOysraCl7dmFyIHc9bFtoXSxNPXcudHlwZTtNPT09cD9zKHgsYix0LHcuYSx3LmlkeCk6TT09PXY/dShiLHQsdyk6YyhiLHQsdyl9cmV0dXJuIHh9dmFyIGY9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxkPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdLHA9MCxtPTEsdj0yO2UuZXhwb3J0cz1ofSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjo4Miwicm9idXN0LW9yaWVudGF0aW9uIjo1MDZ9XSw4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MSxpPXQubGVuZ3RoO248aTtuKz0yKWlmKHRbbi0xXT09PWUmJnRbbl09PT1yKXJldHVybiB0W24tMV09dFtpLTJdLHRbbl09dFtpLTFdLHZvaWQodC5sZW5ndGg9aS0yKX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxpPTA7aTx0OysraSlyW2ldPVtdO3JldHVybiBuZXcgbihyLGUpfXZhciBvPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZS5leHBvcnRzPWE7dmFyIHM9bi5wcm90b3R5cGU7cy5pc0NvbnN0cmFpbnQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfXZhciBlPVswLDBdO3JldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBlWzBdPU1hdGgubWluKHIsbiksZVsxXT1NYXRoLm1heChyLG4pLG8uZXEodGhpcy5lZGdlcyxlLHQpPj0wfX0oKSxzLnJlbW92ZVRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO2koblt0XSxlLHIpLGkobltlXSxyLHQpLGkobltyXSx0LGUpfSxzLmFkZFRyaWFuZ2xlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnN0YXJzO25bdF0ucHVzaChlLHIpLG5bZV0ucHVzaChyLHQpLG5bcl0ucHVzaCh0LGUpfSxzLm9wcG9zaXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuc3RhcnNbZV0sbj0xLGk9ci5sZW5ndGg7bjxpO24rPTIpaWYocltuXT09PXQpcmV0dXJuIHJbbi0xXTtyZXR1cm4tMX0scy5mbGlwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5vcHBvc2l0ZSh0LGUpLG49dGhpcy5vcHBvc2l0ZShlLHQpO3RoaXMucmVtb3ZlVHJpYW5nbGUodCxlLHIpLHRoaXMucmVtb3ZlVHJpYW5nbGUoZSx0LG4pLHRoaXMuYWRkVHJpYW5nbGUodCxuLHIpLHRoaXMuYWRkVHJpYW5nbGUoZSxyLG4pfSxzLmVkZ2VzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3RhcnMsZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLGE9MCxvPWkubGVuZ3RoO2E8bzthKz0yKWUucHVzaChbaVthXSxpW2ErMV1dKTtyZXR1cm4gZX0scy5jZWxscz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTtyPE1hdGgubWluKHMsbCkmJmUucHVzaChbcixzLGxdKX1yZXR1cm4gZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjgyfV0sODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPVsiZnVuY3Rpb24gIix0LCIoYSxsLGgsIixuLmpvaW4oIiwiKSwiKXsiLGk/IiI6InZhciBpPSIscj8ibC0xIjoiaCsxIiwiO3doaWxlKGw8PWgpe3ZhciBtPShsK2gpPj4+MSx4PWFbbV0iXTtyZXR1cm4gaT9lLmluZGV4T2YoImMiKTwwP2EucHVzaCgiO2lmKHg9PT15KXtyZXR1cm4gbX1lbHNlIGlmKHg8PXkpeyIpOmEucHVzaCgiO3ZhciBwPWMoeCx5KTtpZihwPT09MCl7cmV0dXJuIG19ZWxzZSBpZihwPD0wKXsiKTphLnB1c2goIjtpZigiLGUsIil7aT1tOyIpLHI/YS5wdXNoKCJsPW0rMX1lbHNle2g9bS0xfSIpOmEucHVzaCgiaD1tLTF9ZWxzZXtsPW0rMX0iKSxhLnB1c2goIn0iKSxpP2EucHVzaCgicmV0dXJuIC0xfTsiKTphLnB1c2goInJldHVybiBpfTsiKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG5ldyBGdW5jdGlvbihbbigiQSIsIngiK3QrInkiLGUsWyJ5Il0saSksbigiUCIsImMoeCx5KSIrdCsiMCIsZSxbInkiLCJjIl0saSksImZ1bmN0aW9uIGRpc3BhdGNoQnNlYXJjaCIsciwiKGEseSxjLGwsaCl7aWYodHlwZW9mKGMpPT09J2Z1bmN0aW9uJyl7cmV0dXJuIFAoYSwobD09PXZvaWQgMCk/MDpsfDAsKGg9PT12b2lkIDApP2EubGVuZ3RoLTE6aHwwLHksYyl9ZWxzZXtyZXR1cm4gQShhLChjPT09dm9pZCAwKT8wOmN8MCwobD09PXZvaWQgMCk/YS5sZW5ndGgtMTpsfDAseSl9fXJldHVybiBkaXNwYXRjaEJzZWFyY2giLHJdLmpvaW4oIiIpKSgpfWUuZXhwb3J0cz17Z2U6aSgiPj0iLCExLCJHRSIpLGd0OmkoIj4iLCExLCJHVCIpLGx0OmkoIjwiLCEwLCJMVCIpLGxlOmkoIjw9IiwhMCwiTEUiKSxlcTppKCItIiwhMCwiRVEiLCEwKX19LHt9XSw4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9ZS5leHBvcnRzPW59LHt9XSw4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpPTA7aTxuOysraSlyKz10W2ldKmVbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTt2YXIgcj0odFswXS5sZW5ndGgsbyhbdC5sZW5ndGgrMSx0Lmxlbmd0aCsxXSwxKSksaT1vKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBhPTA7YTxlOysrYSl7Zm9yKHZhciBsPTA7bDw9YTsrK2wpcltsXVthXT1yW2FdW2xdPTIqbih0W2FdLHRbbF0pO2lbYV09bih0W2FdLHRbYV0pfWZvcih2YXIgdT1zKHIsaSksYz0wLGg9dVtlKzFdLGE9MDthPGgubGVuZ3RoOysrYSljKz1oW2FdO2Zvcih2YXIgZj1uZXcgQXJyYXkoZSksYT0wO2E8ZTsrK2Epe2Zvcih2YXIgaD11W2FdLGQ9MCxsPTA7bDxoLmxlbmd0aDsrK2wpZCs9aFtsXTtmW2FdPWQvY31yZXR1cm4gZn1mdW5jdGlvbiBhKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1vKFtlXSksbj1pKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qblthXTtyZXR1cm4gcn12YXIgbz10KCJkdXAiKSxzPXQoInJvYnVzdC1saW5lYXItc29sdmUiKTthLmJhcnljZW5ldHJpYz1pLGUuZXhwb3J0cz1hfSx7ZHVwOjEyMywicm9idXN0LWxpbmVhci1zb2x2ZSI6NTA1fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1pKHQpLHI9MCxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfWUuZXhwb3J0cz1uO3ZhciBpPXQoImNpcmN1bWNlbnRlciIpfSx7Y2lyY3VtY2VudGVyOjg0fV0sODY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gZTxyP3Q8ZT9lOnQ+cj9yOnQ6dDxyP3I6dD5lP2U6dH1lLmV4cG9ydHM9bn0se31dLDg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9Xyh0KTtyZXR1cm5bTShlLC0xLzApLE0oZSwxLzApXX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlLmxlbmd0aCksbj0wO248ZS5sZW5ndGg7KytuKXt2YXIgaT1lW25dLGE9dFtpWzBdXSxvPXRbaVsxXV07cltuXT1bTShNYXRoLm1pbihhWzBdLG9bMF0pLC0xLzApLE0oTWF0aC5taW4oYVsxXSxvWzFdKSwtMS8wKSxNKE1hdGgubWF4KGFbMF0sb1swXSksMS8wKSxNKE1hdGgubWF4KGFbMV0sb1sxXSksMS8wKV19cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPXRbcl07ZVtyXT1bTShuWzBdLC0xLzApLE0oblsxXSwtMS8wKSxNKG5bMF0sMS8wKSxNKG5bMV0sMS8wKV19cmV0dXJuIGV9ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49W107cmV0dXJuIGcocixmdW5jdGlvbihyLGkpe3ZhciBhPWVbcl0sbz1lW2ldO2lmKGFbMF0hPT1vWzBdJiZhWzBdIT09b1sxXSYmYVsxXSE9PW9bMF0mJmFbMV0hPT1vWzFdKXt2YXIgcz10W2FbMF1dLGw9dFthWzFdXSx1PXRbb1swXV0sYz10W29bMV1dO3kocyxsLHUsYykmJm4ucHVzaChbcixpXSl9fSksbn1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPVtdO3JldHVybiBnKHIsbixmdW5jdGlvbihyLG4pe3ZhciBhPWVbcl07aWYoYVswXSE9PW4mJmFbMV0hPT1uKXt2YXIgbz10W25dLHM9dFthWzBdXSxsPXRbYVsxXV07eShzLGwsbyxvKSYmaS5wdXNoKFtyLG5dKX19KSxpfWZ1bmN0aW9uIGwodCxlLHIsbixpKXt2YXIgYSxvLHM9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW2IodFswXSksYih0WzFdKV19KTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgbD1yW2FdO289bFswXTt2YXIgdT1sWzFdLGM9ZVtvXSxoPWVbdV0sZj1rKHcodFtjWzBdXSksdyh0W2NbMV1dKSx3KHRbaFswXV0pLHcodFtoWzFdXSkpO2lmKGYpe3ZhciBkPXQubGVuZ3RoO3QucHVzaChbXyhmWzBdKSxfKGZbMV0pXSkscy5wdXNoKGYpLG4ucHVzaChbbyxkXSxbdSxkXSl9fWZvcihuLnNvcnQoZnVuY3Rpb24odCxlKXtpZih0WzBdIT09ZVswXSlyZXR1cm4gdFswXS1lWzBdO3ZhciByPXNbdFsxXV0sbj1zW2VbMV1dO3JldHVybiB4KHJbMF0sblswXSl8fHgoclsxXSxuWzFdKX0pLGE9bi5sZW5ndGgtMTthPj0wOy0tYSl7dmFyIHA9blthXTtvPXBbMF07dmFyIG09ZVtvXSx2PW1bMF0sZz1tWzFdLHk9dFt2XSxNPXRbZ107aWYoKHlbMF0tTVswXXx8eVsxXS1NWzFdKTwwKXt2YXIgQT12O3Y9ZyxnPUF9bVswXT12O3ZhciBULFM9bVsxXT1wWzFdO2ZvcihpJiYoVD1tWzJdKTthPjAmJm5bYS0xXVswXT09PW87KXt2YXIgcD1uWy0tYV0sRT1wWzFdO2k/ZS5wdXNoKFtTLEUsVF0pOmUucHVzaChbUyxFXSksUz1FfWk/ZS5wdXNoKFtTLGcsVF0pOmUucHVzaChbUyxnXSl9cmV0dXJuIHN9ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBpPWUubGVuZ3RoLGE9bmV3IHYoaSksbz1bXSxzPTA7czxlLmxlbmd0aDsrK3Mpe3ZhciBsPWVbc10sdT1uKGxbMF0pLGM9bihsWzFdKTtvLnB1c2goW00odVswXSwtMS8wKSxNKGNbMF0sLTEvMCksTSh1WzFdLDEvMCksTShjWzFdLDEvMCldKX1nKG8sZnVuY3Rpb24odCxlKXthLmxpbmsodCxlKX0pO2Zvcih2YXIgaD0hMCxmPW5ldyBBcnJheShpKSxzPTA7czxpOysrcyl7dmFyIGQ9YS5maW5kKHMpO2QhPT1zJiYoaD0hMSx0W2RdPVtNYXRoLm1pbih0W3NdWzBdLHRbZF1bMF0pLE1hdGgubWluKHRbc11bMV0sdFtkXVsxXSldKX1pZihoKXJldHVybiBudWxsO2Zvcih2YXIgcD0wLHM9MDtzPGk7KytzKXt2YXIgZD1hLmZpbmQocyk7ZD09PXM/KGZbc109cCx0W3ArK109dFtzXSk6ZltzXT0tMX10Lmxlbmd0aD1wO2Zvcih2YXIgcz0wO3M8aTsrK3MpZltzXTwwJiYoZltzXT1mW2EuZmluZChzKV0pO3JldHVybiBmfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gaCh0LGUpe3ZhciByPXRbMF0tZVswXXx8dFsxXS1lWzFdO3JldHVybiByfHwodFsyXTxlWzJdPy0xOnRbMl0+ZVsyXT8xOjApfWZ1bmN0aW9uIGYodCxlLHIpe2lmKDAhPT10Lmxlbmd0aCl7aWYoZSlmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWVbaVswXV0sbz1lW2lbMV1dO2lbMF09TWF0aC5taW4oYSxvKSxpWzFdPU1hdGgubWF4KGEsbyl9ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGk9dFtuXSxhPWlbMF0sbz1pWzFdO2lbMF09TWF0aC5taW4oYSxvKSxpWzFdPU1hdGgubWF4KGEsbyl9cj90LnNvcnQoaCk6dC5zb3J0KGMpO2Zvcih2YXIgcz0xLG49MTtuPHQubGVuZ3RoOysrbil7CnZhciBsPXRbbi0xXSx1PXRbbl07KHVbMF0hPT1sWzBdfHx1WzFdIT09bFsxXXx8ciYmdVsyXSE9PWxbMl0pJiYodFtzKytdPXUpfXQubGVuZ3RoPXN9fWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBuPXUodCxbXSxhKHQpKTtyZXR1cm4gZihlLG4sciksISFufWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPWkodCxlKSxjPW8odCxlLG4pLGg9YSh0KSxkPXModCxlLG4saCkscD1sKHQsZSxjLGQsciksbT11KHQscCxoKTtyZXR1cm4gZihlLG0sciksISFtfHwoYy5sZW5ndGg+MHx8ZC5sZW5ndGg+MCl9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG47aWYocil7bj1lO2Zvcih2YXIgaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG89ZVthXTtpW2FdPVtvWzBdLG9bMV0sclthXV19ZT1pfWZvcih2YXIgcz1kKHQsZSwhIXIpO3AodCxlLCEhcik7KXM9ITA7aWYociYmcyl7bi5sZW5ndGg9MCxyLmxlbmd0aD0wO2Zvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKXt2YXIgbz1lW2FdO24ucHVzaChbb1swXSxvWzFdXSksci5wdXNoKG9bMl0pfX1yZXR1cm4gc31lLmV4cG9ydHM9bTt2YXIgdj10KCJ1bmlvbi1maW5kIiksZz10KCJib3gtaW50ZXJzZWN0IikseT10KCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiKSxiPXQoImJpZy1yYXQiKSx4PXQoImJpZy1yYXQvY21wIiksXz10KCJiaWctcmF0L3RvLWZsb2F0Iiksdz10KCJyYXQtdmVjIiksTT10KCJuZXh0YWZ0ZXIiKSxrPXQoIi4vbGliL3JhdC1zZWctaW50ZXJzZWN0Iil9LHsiLi9saWIvcmF0LXNlZy1pbnRlcnNlY3QiOjg4LCJiaWctcmF0Ijo1MSwiYmlnLXJhdC9jbXAiOjQ5LCJiaWctcmF0L3RvLWZsb2F0Ijo2MywiYm94LWludGVyc2VjdCI6NjgsbmV4dGFmdGVyOjQ2NiwicmF0LXZlYyI6NDkzLCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjUwOSwidW5pb24tZmluZCI6NTQwfV0sODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBzKGEodFswXSxlWzFdKSxhKHRbMV0sZVswXSkpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIGE9dShlLHQpLHM9dShpLHIpLGY9bihhLHMpO2lmKDA9PT1sKGYpKXJldHVybiBudWxsO3ZhciBkPXUodCxyKSxwPW4ocyxkKSxtPW8ocCxmKSx2PWgoYSxtKTtyZXR1cm4gYyh0LHYpfWUuZXhwb3J0cz1pO3ZhciBhPXQoImJpZy1yYXQvbXVsIiksbz10KCJiaWctcmF0L2RpdiIpLHM9dCgiYmlnLXJhdC9zdWIiKSxsPXQoImJpZy1yYXQvc2lnbiIpLHU9dCgicmF0LXZlYy9zdWIiKSxjPXQoInJhdC12ZWMvYWRkIiksaD10KCJyYXQtdmVjL211bHMiKX0seyJiaWctcmF0L2RpdiI6NTAsImJpZy1yYXQvbXVsIjo2MCwiYmlnLXJhdC9zaWduIjo2MSwiYmlnLXJhdC9zdWIiOjYyLCJyYXQtdmVjL2FkZCI6NDkyLCJyYXQtdmVjL211bHMiOjQ5NCwicmF0LXZlYy9zdWIiOjQ5NX1dLDg5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUocixuLGksYSl7ZnVuY3Rpb24gcyhyLGkpe2lmKG51bGw9PT1yKXJldHVybiBudWxsO2lmKDA9PWkpcmV0dXJuIHI7dmFyIGgsZjtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHI7aWYoZS5fX2lzQXJyYXkocikpaD1bXTtlbHNlIGlmKGUuX19pc1JlZ0V4cChyKSloPW5ldyBSZWdFeHAoci5zb3VyY2UsbyhyKSksci5sYXN0SW5kZXgmJihoLmxhc3RJbmRleD1yLmxhc3RJbmRleCk7ZWxzZSBpZihlLl9faXNEYXRlKHIpKWg9bmV3IERhdGUoci5nZXRUaW1lKCkpO2Vsc2V7aWYoYyYmdC5pc0J1ZmZlcihyKSlyZXR1cm4gaD1uZXcgdChyLmxlbmd0aCksci5jb3B5KGgpLGg7dm9pZCAwPT09YT8oZj1PYmplY3QuZ2V0UHJvdG90eXBlT2YociksaD1PYmplY3QuY3JlYXRlKGYpKTooaD1PYmplY3QuY3JlYXRlKGEpLGY9YSl9aWYobil7dmFyIGQ9bC5pbmRleE9mKHIpO2lmKC0xIT1kKXJldHVybiB1W2RdO2wucHVzaChyKSx1LnB1c2goaCl9Zm9yKHZhciBwIGluIHIpe3ZhciBtO2YmJihtPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZixwKSksbSYmbnVsbD09bS5zZXR8fChoW3BdPXMocltwXSxpLTEpKX1yZXR1cm4gaH0ib2JqZWN0Ij09dHlwZW9mIG4mJihpPW4uZGVwdGgsYT1uLnByb3RvdHlwZSxuLmZpbHRlcixuPW4uY2lyY3VsYXIpO3ZhciBsPVtdLHU9W10sYz12b2lkIDAhPT10O3JldHVybiB2b2lkIDA9PT1uJiYobj0hMCksdm9pZCAwPT09aSYmKGk9MS8wKSxzKHIsaSl9ZnVuY3Rpb24gcih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYiW29iamVjdCBEYXRlXSI9PT1yKHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYiW29iamVjdCBBcnJheV0iPT09cih0KX1mdW5jdGlvbiBhKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmIltvYmplY3QgUmVnRXhwXSI9PT1yKHQpfWZ1bmN0aW9uIG8odCl7dmFyIGU9IiI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSxlfXJldHVybiBlLmNsb25lUHJvdG90eXBlPWZ1bmN0aW9uKHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO3ZhciBlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gZS5wcm90b3R5cGU9dCxuZXcgZX0sZS5fX29ialRvU3RyPXIsZS5fX2lzRGF0ZT1uLGUuX19pc0FycmF5PWksZS5fX2lzUmVnRXhwPWEsZS5fX2dldFJlZ0V4cEZsYWdzPW8sZX0oKTsib2JqZWN0Ij09dHlwZW9mIGUmJmUuZXhwb3J0cyYmKGUuZXhwb3J0cz1yKX0pLmNhbGwodGhpcyx0KCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjc1fV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe251bGw9PWUmJihlPSEwKTt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdO3JldHVybiBudWxsPT1vJiYobz1lPzE6MjU1KSxlJiYocio9MjU1LG4qPTI1NSxpKj0yNTUsbyo9MjU1KSxyPTI1NSZhKHIsMCwyNTUpLG49MjU1JmEobiwwLDI1NSksaT0yNTUmYShpLDAsMjU1KSxvPTI1NSZhKG8sMCwyNTUpLDE2Nzc3MjE2KnIrKG48PDE2KSsoaTw8OCkrb31mdW5jdGlvbiBpKHQsZSl7dD0rdDt2YXIgcj10Pj4+MjQsbj0oMTY3MTE2ODAmdCk+Pj4xNixpPSg2NTI4MCZ0KT4+PjgsYT0yNTUmdDtyZXR1cm4hMT09PWU/W3IsbixpLGFdOltyLzI1NSxuLzI1NSxpLzI1NSxhLzI1NV19dmFyIGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9bixlLmV4cG9ydHMudG89bixlLmV4cG9ydHMuZnJvbT1pfSx7Y2xhbXA6ODZ9XSw5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSw5MjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZSxuLHM9W10sbD0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihpW3RdKXM9aVt0XS5zbGljZSgpLG49InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dClsPTAsbj0icmdiIixzPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT10LnNsaWNlKDEpLGM9dS5sZW5ndGgsaD1jPD00O2w9MSxoPyhzPVtwYXJzZUludCh1WzBdK3VbMF0sMTYpLHBhcnNlSW50KHVbMV0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzJdLDE2KV0sND09PWMmJihsPXBhcnNlSW50KHVbM10rdVszXSwxNikvMjU1KSk6KHM9W3BhcnNlSW50KHVbMF0rdVsxXSwxNikscGFyc2VJbnQodVsyXSt1WzNdLDE2KSxwYXJzZUludCh1WzRdK3VbNV0sMTYpXSw4PT09YyYmKGw9cGFyc2VJbnQodVs2XSt1WzddLDE2KS8yNTUpKSxzWzBdfHwoc1swXT0wKSxzWzFdfHwoc1sxXT0wKSxzWzJdfHwoc1syXT0wKSxuPSJyZ2IifWVsc2UgaWYoZT0vXigoPzpyZ2J8aHNbbHZiXXxod2J8Y215az98eHlbenldfGdyYXl8bGFifGxjaHU/dj98W2x5XXV2fGxtcylhPylccypcKChbXlwpXSopXCkvLmV4ZWModCkpe3ZhciBmPWVbMV0sdT1mLnJlcGxhY2UoL2EkLywiIik7bj11O3ZhciBjPSJjbXlrIj09PXU/NDoiZ3JheSI9PT11PzE6MztzPWVbMl0udHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uKHQsZSl7aWYoLyUkLy50ZXN0KHQpKXJldHVybiBlPT09Yz9wYXJzZUZsb2F0KHQpLzEwMDoicmdiIj09PXU/MjU1KnBhcnNlRmxvYXQodCkvMTAwOnBhcnNlRmxvYXQodCk7aWYoImgiPT09dVtlXSl7aWYoL2RlZyQvLnRlc3QodCkpcmV0dXJuIHBhcnNlRmxvYXQodCk7aWYodm9pZCAwIT09b1t0XSlyZXR1cm4gb1t0XX1yZXR1cm4gcGFyc2VGbG9hdCh0KX0pLGY9PT11JiZzLnB1c2goMSksbD12b2lkIDA9PT1zW2NdPzE6c1tjXSxzPXMuc2xpY2UoMCxjKX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihzPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pLG49dC5tYXRjaCgvKFthLXpdKS9naSkuam9pbigiIikudG9Mb3dlckNhc2UoKSk7ZWxzZSJudW1iZXIiPT10eXBlb2YgdD8obj0icmdiIixzPVt0Pj4+MTYsKDY1MjgwJnQpPj4+OCwyNTUmdF0pOmEodCk/KG51bGwhPXQucj8ocz1bdC5yLHQuZyx0LmJdLG49InJnYiIpOm51bGwhPXQucmVkPyhzPVt0LnJlZCx0LmdyZWVuLHQuYmx1ZV0sbj0icmdiIik6bnVsbCE9dC5oPyhzPVt0LmgsdC5zLHQubF0sbj0iaHNsIik6bnVsbCE9dC5odWUmJihzPVt0Lmh1ZSx0LnNhdHVyYXRpb24sdC5saWdodG5lc3NdLG49ImhzbCIpLG51bGwhPXQuYT9sPXQuYTpudWxsIT10LmFscGhhP2w9dC5hbHBoYTpudWxsIT10Lm9wYWNpdHkmJihsPXQub3BhY2l0eS8xMDApKTooQXJyYXkuaXNBcnJheSh0KXx8ci5BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiYocz1bdFswXSx0WzFdLHRbMl1dLG49InJnYiIsbD00PT09dC5sZW5ndGg/dFszXToxKTtyZXR1cm57c3BhY2U6bix2YWx1ZXM6cyxhbHBoYTpsfX1lLmV4cG9ydHM9bjt2YXIgaT10KCJjb2xvci1uYW1lIiksYT10KCJpcy1wbGFpbi1vYmoiKSxvPXtyZWQ6MCxvcmFuZ2U6NjAseWVsbG93OjEyMCxncmVlbjoxODAsYmx1ZToyNDAscHVycGxlOjMwMH19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiY29sb3ItbmFtZSI6OTEsImlzLXBsYWluLW9iaiI6Mjk1fV0sOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcGFyc2UiKSxpPXQoImNvbG9yLXNwYWNlL2hzbCIpLGE9dCgiY2xhbXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0O251bGw9PWUmJihlPSEwKTt2YXIgcj1uKHQpO2lmKCFyLnNwYWNlKXJldHVybltdO3ZhciBvLHM9ci52YWx1ZXMsbD1zLmxlbmd0aDtmb3Iobz0wO288bDtvKyspc1tvXT1hKHNbb10sMCwyNTUpO2lmKCJoIj09PXIuc3BhY2VbMF0mJihzPWkucmdiKHMpKSxlKWZvcihvPTA7bzxsO28rKylzW29dLz0yNTU7cmV0dXJuIHMucHVzaChhKHIuYWxwaGEsMCwxKSksc319LHtjbGFtcDo4NiwiY29sb3ItcGFyc2UiOjkyLCJjb2xvci1zcGFjZS9oc2wiOjk0fV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZ2IiKTtlLmV4cG9ydHM9e25hbWU6ImhzbCIsbWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sY2hhbm5lbDpbImh1ZSIsInNhdHVyYXRpb24iLCJsaWdodG5lc3MiXSxhbGlhczpbIkhTTCJdLHJnYjpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dFswXS8zNjAscz10WzFdLzEwMCxsPXRbMl0vMTAwO2lmKDA9PT1zKXJldHVybiBhPTI1NSpsLFthLGEsYV07cj1sPC41P2wqKDErcyk6bCtzLWwqcyxlPTIqbC1yLGk9WzAsMCwwXTtmb3IodmFyIHU9MDt1PDM7dSsrKW49bysxLzMqLSh1LTEpLG48MD9uKys6bj4xJiZuLS0sYT02Km48MT9lKzYqKHItZSkqbjoyKm48MT9yOjMqbjwyP2UrKHItZSkqKDIvMy1uKSo2OmUsaVt1XT0yNTUqYTtyZXR1cm4gaX19LG4uaHNsPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRbMF0vMjU1LGE9dFsxXS8yNTUsbz10WzJdLzI1NSxzPU1hdGgubWluKGksYSxvKSxsPU1hdGgubWF4KGksYSxvKSx1PWwtcztyZXR1cm4gbD09PXM/ZT0wOmk9PT1sP2U9KGEtbykvdTphPT09bD9lPTIrKG8taSkvdTpvPT09bCYmKGU9NCsoaS1hKS91KSxlPU1hdGgubWluKDYwKmUsMzYwKSxlPDAmJihlKz0zNjApLG49KHMrbCkvMixyPWw9PT1zPzA6bjw9LjU/dS8obCtzKTp1LygyLWwtcyksW2UsMTAwKnIsMTAwKm5dfX0seyIuL3JnYiI6OTV9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJnYiIsbWluOlswLDAsMF0sbWF4OlsyNTUsMjU1LDI1NV0sY2hhbm5lbDpbInJlZCIsImdyZWVuIiwiYmx1ZSJdLGFsaWFzOlsiUkdCIl19fSx7fV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzAsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMjU1XX1dLHNwcmluZzpbe2luZGV4OjAscmdiOlsyNTUsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSxzdW1tZXI6W3tpbmRleDowLHJnYjpbMCwxMjgsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDEwMl19XSxhdXR1bW46W3tpbmRleDowLHJnYjpbMjU1LDAsMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwwXX1dLHdpbnRlcjpbe2luZGV4OjAscmdiOlswLDAsMjU1XX0se2luZGV4OjEscmdiOlswLDI1NSwxMjhdfV0sYm9uZTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMzc2LHJnYjpbODQsODQsMTE2XX0se2luZGV4Oi43NTMscmdiOlsxNjksMjAwLDIwMF19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyNTVdfV0sY29wcGVyOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi44MDQscmdiOlsyNTUsMTYwLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDE5OSwxMjddfV0sZ3JleXM6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLHlpZ25idTpbe2luZGV4OjAscmdiOls4LDI5LDg4XX0se2luZGV4Oi4xMjUscmdiOlszNyw1MiwxNDhdfSx7aW5kZXg6LjI1LHJnYjpbMzQsOTQsMTY4XX0se2luZGV4Oi4zNzUscmdiOlsyOSwxNDUsMTkyXX0se2luZGV4Oi41LHJnYjpbNjUsMTgyLDE5Nl19LHtpbmRleDouNjI1LHJnYjpbMTI3LDIwNSwxODddfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxODBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIzNywyNDgsMjE3XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIxN119XSxncmVlbnM6W3tpbmRleDowLHJnYjpbMCw2OCwyN119LHtpbmRleDouMTI1LHJnYjpbMCwxMDksNDRdfSx7aW5kZXg6LjI1LHJnYjpbMzUsMTM5LDY5XX0se2luZGV4Oi4zNzUscmdiOls2NSwxNzEsOTNdfSx7aW5kZXg6LjUscmdiOlsxMTYsMTk2LDExOF19LHtpbmRleDouNjI1LHJnYjpbMTYxLDIxNywxNTVdfSx7aW5kZXg6Ljc1LHJnYjpbMTk5LDIzMywxOTJdfSx7aW5kZXg6Ljg3NSxyZ2I6WzIyOSwyNDUsMjI0XX0se2luZGV4OjEscmdiOlsyNDcsMjUyLDI0NV19XSx5aW9ycmQ6W3tpbmRleDowLHJnYjpbMTI4LDAsMzhdfSx7aW5kZXg6LjEyNSxyZ2I6WzE4OSwwLDM4XX0se2luZGV4Oi4yNSxyZ2I6WzIyNywyNiwyOF19LHtpbmRleDouMzc1LHJnYjpbMjUyLDc4LDQyXX0se2luZGV4Oi41LHJnYjpbMjUzLDE0MSw2MF19LHtpbmRleDouNjI1LHJnYjpbMjU0LDE3OCw3Nl19LHtpbmRleDouNzUscmdiOlsyNTQsMjE3LDExOF19LHtpbmRleDouODc1LHJnYjpbMjU1LDIzNywxNjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjA0XX1dLGJsdWVyZWQ6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyZGJ1Olt7aW5kZXg6MCxyZ2I6WzUsMTAsMTcyXX0se2luZGV4Oi4zNSxyZ2I6WzEwNiwxMzcsMjQ3XX0se2luZGV4Oi41LHJnYjpbMTkwLDE5MCwxOTBdfSx7aW5kZXg6LjYscmdiOlsyMjAsMTcwLDEzMl19LHtpbmRleDouNyxyZ2I6WzIzMCwxNDUsOTBdfSx7aW5kZXg6MSxyZ2I6WzE3OCwxMCwyOF19XSxwaWNuaWM6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDouMSxyZ2I6WzUxLDE1MywyNTVdfSx7aW5kZXg6LjIscmdiOlsxMDIsMjA0LDI1NV19LHtpbmRleDouMyxyZ2I6WzE1MywyMDQsMjU1XX0se2luZGV4Oi40LHJnYjpbMjA0LDIwNCwyNTVdfSx7aW5kZXg6LjUscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDouNixyZ2I6WzI1NSwyMDQsMjU1XX0se2luZGV4Oi43LHJnYjpbMjU1LDE1MywyNTVdfSx7aW5kZXg6LjgscmdiOlsyNTUsMTAyLDIwNF19LHtpbmRleDouOSxyZ2I6WzI1NSwxMDIsMTAyXX0se2luZGV4OjEscmdiOlsyNTUsMCwwXX1dLHJhaW5ib3c6W3tpbmRleDowLHJnYjpbMTUwLDAsOTBdfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMCwyMDBdfSx7aW5kZXg6LjI1LHJnYjpbMCwyNSwyNTVdfSx7aW5kZXg6LjM3NSxyZ2I6WzAsMTUyLDI1NV19LHtpbmRleDouNSxyZ2I6WzQ0LDI1NSwxNTBdfSx7aW5kZXg6LjYyNSxyZ2I6WzE1MSwyNTUsMF19LHtpbmRleDouNzUscmdiOlsyNTUsMjM0LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwxMTEsMF19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxwb3J0bGFuZDpbe2luZGV4OjAscmdiOlsxMiw1MSwxMzFdfSx7aW5kZXg6LjI1LHJnYjpbMTAsMTM2LDE4Nl19LHtpbmRleDouNSxyZ2I6WzI0MiwyMTEsNTZdfSx7aW5kZXg6Ljc1LHJnYjpbMjQyLDE0Myw1Nl19LHtpbmRleDoxLHJnYjpbMjE3LDMwLDMwXX1dLGJsYWNrYm9keTpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMixyZ2I6WzIzMCwwLDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjEwLDBdfSx7aW5kZXg6LjcscmdiOlsyNTUsMjU1LDI1NV19LHtpbmRleDoxLHJnYjpbMTYwLDIwMCwyNTVdfV0sZWFydGg6W3tpbmRleDowLHJnYjpbMCwwLDEzMF19LHtpbmRleDouMSxyZ2I6WzAsMTgwLDE4MF19LHtpbmRleDouMixyZ2I6WzQwLDIxMCw0MF19LHtpbmRleDouNCxyZ2I6WzIzMCwyMzAsNTBdfSx7aW5kZXg6LjYscmdiOlsxMjAsNzAsMjBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGVsZWN0cmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4xNSxyZ2I6WzMwLDAsMTAwXX0se2luZGV4Oi40LHJnYjpbMTIwLDAsMTAwXX0se2luZGV4Oi42LHJnYjpbMTYwLDkwLDBdfSx7aW5kZXg6LjgscmdiOlsyMzAsMjAwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTAsMjIwXX1dLGFscGhhOlt7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDBdfSx7aW5kZXg6MCxyZ2I6WzI1NSwyNTUsMjU1LDFdfV0sdmlyaWRpczpbe2luZGV4OjAscmdiOls2OCwxLDg0XX0se2luZGV4Oi4xMyxyZ2I6WzcxLDQ0LDEyMl19LHtpbmRleDouMjUscmdiOls1OSw4MSwxMzldfSx7aW5kZXg6LjM4LHJnYjpbNDQsMTEzLDE0Ml19LHtpbmRleDouNSxyZ2I6WzMzLDE0NCwxNDFdfSx7aW5kZXg6LjYzLHJnYjpbMzksMTczLDEyOV19LHtpbmRleDouNzUscmdiOls5MiwyMDAsOTldfSx7aW5kZXg6Ljg4LHJnYjpbMTcwLDIyMCw1MF19LHtpbmRleDoxLHJnYjpbMjUzLDIzMSwzN119XSxpbmZlcm5vOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzMxLDEyLDcyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDE1LDEwOV19LHtpbmRleDouMzgscmdiOlsxMzYsMzQsMTA2XX0se2luZGV4Oi41LHJnYjpbMTg2LDU0LDg1XX0se2luZGV4Oi42MyxyZ2I6WzIyNyw4OSw1MV19LHtpbmRleDouNzUscmdiOlsyNDksMTQwLDEwXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwyMDEsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTUsMTY0XX1dLG1hZ21hOlt7aW5kZXg6MCxyZ2I6WzAsMCw0XX0se2luZGV4Oi4xMyxyZ2I6WzI4LDE2LDY4XX0se2luZGV4Oi4yNSxyZ2I6Wzc5LDE4LDEyM119LHtpbmRleDouMzgscmdiOlsxMjksMzcsMTI5XX0se2luZGV4Oi41LHJnYjpbMTgxLDU0LDEyMl19LHtpbmRleDouNjMscmdiOlsyMjksODAsMTAwXX0se2luZGV4Oi43NSxyZ2I6WzI1MSwxMzUsOTddfSx7aW5kZXg6Ljg4LHJnYjpbMjU0LDE5NCwxMzVdfSx7aW5kZXg6MSxyZ2I6WzI1MiwyNTMsMTkxXX1dLHBsYXNtYTpbe2luZGV4OjAscmdiOlsxMyw4LDEzNV19LHtpbmRleDouMTMscmdiOls3NSwzLDE2MV19LHtpbmRleDouMjUscmdiOlsxMjUsMywxNjhdfSx7aW5kZXg6LjM4LHJnYjpbMTY4LDM0LDE1MF19LHtpbmRleDouNSxyZ2I6WzIwMyw3MCwxMjFdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDEwNyw5M119LHtpbmRleDouNzUscmdiOlsyNDgsMTQ4LDY1XX0se2luZGV4Oi44OCxyZ2I6WzI1MywxOTUsNDBdfSx7aW5kZXg6MSxyZ2I6WzI0MCwyNDksMzNdfV0sd2FybTpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTcyLDAsMTg3XX0se2luZGV4Oi4yNSxyZ2I6WzIxOSwwLDE3MF19LHtpbmRleDouMzgscmdiOlsyNTUsMCwxMzBdfSx7aW5kZXg6LjUscmdiOlsyNTUsNjMsNzRdfSx7aW5kZXg6LjYzLHJnYjpbMjU1LDEyMywwXX0se2luZGV4Oi43NSxyZ2I6WzIzNCwxNzYsMF19LHtpbmRleDouODgscmdiOlsxOTAsMjI4LDBdfSx7aW5kZXg6MSxyZ2I6WzE0NywyNTUsMF19XSxjb29sOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMTMscmdiOlsxMTYsMCwyMThdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNzQsMjM3XX0se2luZGV4Oi4zOCxyZ2I6WzY4LDE0NiwyMzFdfSx7aW5kZXg6LjUscmdiOlswLDIwNCwxOTddfSx7aW5kZXg6LjYzLHJnYjpbMCwyNDcsMTQ2XX0se2luZGV4Oi43NSxyZ2I6WzAsMjU1LDg4XX0se2luZGV4Oi44OCxyZ2I6WzQwLDI1NSw4XX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sInJhaW5ib3ctc29mdCI6W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xLHJnYjpbMTk5LDAsMTgwXX0se2luZGV4Oi4yLHJnYjpbMjU1LDAsMTIxXX0se2luZGV4Oi4zLHJnYjpbMjU1LDEwOCwwXX0se2luZGV4Oi40LHJnYjpbMjIyLDE5NCwwXX0se2luZGV4Oi41LHJnYjpbMTUwLDI1NSwwXX0se2luZGV4Oi42LHJnYjpbMCwyNTUsNTVdfSx7aW5kZXg6LjcscmdiOlswLDI0NiwxNTBdfSx7aW5kZXg6LjgscmdiOls1MCwxNjcsMjIyXX0se2luZGV4Oi45LHJnYjpbMTAzLDUxLDIzNV19LHtpbmRleDoxLHJnYjpbMTI0LDAsMTg2XX1dLGJhdGh5bWV0cnk6W3tpbmRleDowLHJnYjpbNDAsMjYsNDRdfSx7aW5kZXg6LjEzLHJnYjpbNTksNDksOTBdfSx7aW5kZXg6LjI1LHJnYjpbNjQsNzYsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzYzLDExMCwxNTFdfSx7aW5kZXg6LjUscmdiOls3MiwxNDIsMTU4XX0se2luZGV4Oi42MyxyZ2I6Wzg1LDE3NCwxNjNdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwNiwxNjNdfSx7aW5kZXg6Ljg4LHJnYjpbMTg3LDIzMCwxNzJdfSx7aW5kZXg6MSxyZ2I6WzI1MywyNTQsMjA0XX1dLGNkb206W3tpbmRleDowLHJnYjpbNDcsMTUsNjJdfSx7aW5kZXg6LjEzLHJnYjpbODcsMjMsODZdfSx7aW5kZXg6LjI1LHJnYjpbMTMwLDI4LDk5XX0se2luZGV4Oi4zOCxyZ2I6WzE3MSw0MSw5Nl19LHtpbmRleDouNSxyZ2I6WzIwNiw2Nyw4Nl19LHtpbmRleDouNjMscmdiOlsyMzAsMTA2LDg0XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDksMTAzXX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTMsMTM1XX0se2luZGV4OjEscmdiOlsyNTQsMjM3LDE3Nl19XSxjaGxvcm9waHlsbDpbe2luZGV4OjAscmdiOlsxOCwzNiwyMF19LHtpbmRleDouMTMscmdiOlsyNSw2Myw0MV19LHtpbmRleDouMjUscmdiOlsyNCw5MSw1OV19LHtpbmRleDouMzgscmdiOlsxMywxMTksNzJdfSx7aW5kZXg6LjUscmdiOlsxOCwxNDgsODBdfSx7aW5kZXg6LjYzLHJnYjpbODAsMTczLDg5XX0se2luZGV4Oi43NSxyZ2I6WzEzMiwxOTYsMTIyXX0se2luZGV4Oi44OCxyZ2I6WzE3NSwyMjEsMTYyXX0se2luZGV4OjEscmdiOlsyMTUsMjQ5LDIwOF19XSxkZW5zaXR5Olt7aW5kZXg6MCxyZ2I6WzU0LDE0LDM2XX0se2luZGV4Oi4xMyxyZ2I6Wzg5LDIzLDgwXX0se2luZGV4Oi4yNSxyZ2I6WzExMCw0NSwxMzJdfSx7aW5kZXg6LjM4LHJnYjpbMTIwLDc3LDE3OF19LHtpbmRleDouNSxyZ2I6WzEyMCwxMTMsMjEzXX0se2luZGV4Oi42MyxyZ2I6WzExNSwxNTEsMjI4XX0se2luZGV4Oi43NSxyZ2I6WzEzNCwxODUsMjI3XX0se2luZGV4Oi44OCxyZ2I6WzE3NywyMTQsMjI3XX0se2luZGV4OjEscmdiOlsyMzAsMjQxLDI0MV19XSwiZnJlZXN1cmZhY2UtYmx1ZSI6W3tpbmRleDowLHJnYjpbMzAsNCwxMTBdfSx7aW5kZXg6LjEzLHJnYjpbNDcsMTQsMTc2XX0se2luZGV4Oi4yNSxyZ2I6WzQxLDQ1LDIzNl19LHtpbmRleDouMzgscmdiOlsyNSw5OSwyMTJdfSx7aW5kZXg6LjUscmdiOls2OCwxMzEsMjAwXX0se2luZGV4Oi42MyxyZ2I6WzExNCwxNTYsMTk3XX0se2luZGV4Oi43NSxyZ2I6WzE1NywxODEsMjAzXX0se2luZGV4Oi44OCxyZ2I6WzIwMCwyMDgsMjE2XX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSwiZnJlZXN1cmZhY2UtcmVkIjpbe2luZGV4OjAscmdiOls2MCw5LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzEwMCwxNywyN119LHtpbmRleDouMjUscmdiOlsxNDIsMjAsMjldfSx7aW5kZXg6LjM4LHJnYjpbMTc3LDQzLDI3XX0se2luZGV4Oi41LHJnYjpbMTkyLDg3LDYzXX0se2luZGV4Oi42MyxyZ2I6WzIwNSwxMjUsMTA1XX0se2luZGV4Oi43NSxyZ2I6WzIxNiwxNjIsMTQ4XX0se2luZGV4Oi44OCxyZ2I6WzIyNywxOTksMTkzXX0se2luZGV4OjEscmdiOlsyNDEsMjM3LDIzNl19XSxveHlnZW46W3tpbmRleDowLHJnYjpbNjQsNSw1XX0se2luZGV4Oi4xMyxyZ2I6WzEwNiw2LDE1XX0se2luZGV4Oi4yNSxyZ2I6WzE0NCwyNiw3XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCw2NCwzXX0se2luZGV4Oi41LHJnYjpbMTg4LDEwMCw0XX0se2luZGV4Oi42MyxyZ2I6WzIwNiwxMzYsMTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjIwLDE3NCwyNV19LHtpbmRleDouODgscmdiOlsyMzEsMjE1LDQ0XX0se2luZGV4OjEscmdiOlsyNDgsMjU0LDEwNV19XSxwYXI6W3tpbmRleDowLHJnYjpbNTEsMjAsMjRdfSx7aW5kZXg6LjEzLHJnYjpbOTAsMzIsMzVdfSx7aW5kZXg6LjI1LHJnYjpbMTI5LDQ0LDM0XX0se2luZGV4Oi4zOCxyZ2I6WzE1OSw2OCwyNV19LHtpbmRleDouNSxyZ2I6WzE4Miw5OSwxOV19LHtpbmRleDouNjMscmdiOlsxOTksMTM0LDIyXX0se2luZGV4Oi43NSxyZ2I6WzIxMiwxNzEsMzVdfSx7aW5kZXg6Ljg4LHJnYjpbMjIxLDIxMCw1NF19LHtpbmRleDoxLHJnYjpbMjI1LDI1Myw3NV19XSxwaGFzZTpbe2luZGV4OjAscmdiOlsxNDUsMTA1LDE4XX0se2luZGV4Oi4xMyxyZ2I6WzE4NCw3MSwzOF19LHtpbmRleDouMjUscmdiOlsxODYsNTgsMTE1XX0se2luZGV4Oi4zOCxyZ2I6WzE2MCw3MSwxODVdfSx7aW5kZXg6LjUscmdiOlsxMTAsOTcsMjE4XX0se2luZGV4Oi42MyxyZ2I6WzUwLDEyMywxNjRdfSx7aW5kZXg6Ljc1LHJnYjpbMzEsMTMxLDExMF19LHtpbmRleDouODgscmdiOls3NywxMjksMzRdfSx7aW5kZXg6MSxyZ2I6WzE0NSwxMDUsMThdfV0sc2FsaW5pdHk6W3tpbmRleDowLHJnYjpbNDIsMjQsMTA4XX0se2luZGV4Oi4xMyxyZ2I6WzMzLDUwLDE2Ml19LHtpbmRleDouMjUscmdiOlsxNSw5MCwxNDVdfSx7aW5kZXg6LjM4LHJnYjpbNDAsMTE4LDEzN119LHtpbmRleDouNSxyZ2I6WzU5LDE0NiwxMzVdfSx7aW5kZXg6LjYzLHJnYjpbNzksMTc1LDEyNl19LHtpbmRleDouNzUscmdiOlsxMjAsMjAzLDEwNF19LHtpbmRleDouODgscmdiOlsxOTMsMjIxLDEwMF19LHtpbmRleDoxLHJnYjpbMjUzLDIzOSwxNTRdfV0sdGVtcGVyYXR1cmU6W3tpbmRleDowLHJnYjpbNCwzNSw1MV19LHtpbmRleDouMTMscmdiOlsyMyw1MSwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbODUsNTksMTU3XX0se2luZGV4Oi4zOCxyZ2I6WzEyOSw3OSwxNDNdfSx7aW5kZXg6LjUscmdiOlsxNzUsOTUsMTMwXX0se2luZGV4Oi42MyxyZ2I6WzIyMiwxMTIsMTAxXX0se2luZGV4Oi43NSxyZ2I6WzI0OSwxNDYsNjZdfSx7aW5kZXg6Ljg4LHJnYjpbMjQ5LDE5Niw2NV19LHtpbmRleDoxLHJnYjpbMjMyLDI1MCw5MV19XSx0dXJiaWRpdHk6W3tpbmRleDowLHJnYjpbMzQsMzEsMjddfSx7aW5kZXg6LjEzLHJnYjpbNjUsNTAsNDFdfSx7aW5kZXg6LjI1LHJnYjpbOTgsNjksNTJdfSx7aW5kZXg6LjM4LHJnYjpbMTMxLDg5LDU3XX0se2luZGV4Oi41LHJnYjpbMTYxLDExMiw1OV19LHtpbmRleDouNjMscmdiOlsxODUsMTQwLDY2XX0se2luZGV4Oi43NSxyZ2I6WzIwMiwxNzQsODhdfSx7aW5kZXg6Ljg4LHJnYjpbMjE2LDIwOSwxMjZdfSx7aW5kZXg6MSxyZ2I6WzIzMywyNDYsMTcxXX1dLCJ2ZWxvY2l0eS1ibHVlIjpbe2luZGV4OjAscmdiOlsxNywzMiw2NF19LHtpbmRleDouMTMscmdiOlszNSw1MiwxMTZdfSx7aW5kZXg6LjI1LHJnYjpbMjksODEsMTU2XX0se2luZGV4Oi4zOCxyZ2I6WzMxLDExMywxNjJdfSx7aW5kZXg6LjUscmdiOls1MCwxNDQsMTY5XX0se2luZGV4Oi42MyxyZ2I6Wzg3LDE3MywxNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMTQ5LDE5NiwxODldfSx7aW5kZXg6Ljg4LHJnYjpbMjAzLDIyMSwyMTFdfSx7aW5kZXg6MSxyZ2I6WzI1NCwyNTEsMjMwXX1dLCJ2ZWxvY2l0eS1ncmVlbiI6W3tpbmRleDowLHJnYjpbMjMsMzUsMTldfSx7aW5kZXg6LjEzLHJnYjpbMjQsNjQsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTEsOTUsNDVdfSx7aW5kZXg6LjM4LHJnYjpbMzksMTIzLDM1XX0se2luZGV4Oi41LHJnYjpbOTUsMTQ2LDEyXX0se2luZGV4Oi42MyxyZ2I6WzE1MiwxNjUsMThdfSx7aW5kZXg6Ljc1LHJnYjpbMjAxLDE4Niw2OV19LHtpbmRleDouODgscmdiOlsyMzMsMjE2LDEzN119LHtpbmRleDoxLHJnYjpbMjU1LDI1MywyMDVdfV0sY3ViZWhlbGl4Olt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4Oi4wNyxyZ2I6WzIyLDUsNTldfSx7aW5kZXg6LjEzLHJnYjpbNjAsNCwxMDVdfSx7aW5kZXg6LjIscmdiOlsxMDksMSwxMzVdfSx7aW5kZXg6LjI3LHJnYjpbMTYxLDAsMTQ3XX0se2luZGV4Oi4zMyxyZ2I6WzIxMCwyLDE0Ml19LHtpbmRleDouNCxyZ2I6WzI1MSwxMSwxMjNdfSx7aW5kZXg6LjQ3LHJnYjpbMjU1LDI5LDk3XX0se2luZGV4Oi41MyxyZ2I6WzI1NSw1NCw2OV19LHtpbmRleDouNixyZ2I6WzI1NSw4NSw0Nl19LHtpbmRleDouNjcscmdiOlsyNTUsMTIwLDM0XX0se2luZGV4Oi43MyxyZ2I6WzI1NSwxNTcsMzddfSx7aW5kZXg6LjgscmdiOlsyNDEsMTkxLDU3XX0se2luZGV4Oi44NyxyZ2I6WzIyNCwyMjAsOTNdfSx7aW5kZXg6LjkzLHJnYjpbMjE4LDI0MSwxNDJdfSx7aW5kZXg6MSxyZ2I6WzIyNywyNTMsMTk4XX1dfX0se31dLDk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGUscixuLHUsYyxoLGYsZCxwLG0sdixnLHksYj1bXSx4PVtdLF89W10sdz1bXTtpZihvLmlzUGxhaW5PYmplY3QodCl8fCh0PXt9KSxwPXQubnNoYWRlc3x8NzIsZD10LmZvcm1hdHx8ImhleCIsZj10LmNvbG9ybWFwLGZ8fChmPSJqZXQiKSwic3RyaW5nIj09dHlwZW9mIGYpe2lmKGY9Zi50b0xvd2VyQ2FzZSgpLCFsW2ZdKXRocm93IEVycm9yKGYrIiBub3QgYSBzdXBwb3J0ZWQgY29sb3JzY2FsZSIpO2g9cyhsW2ZdKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KGYpKXRocm93IEVycm9yKCJ1bnN1cHBvcnRlZCBjb2xvcm1hcCBvcHRpb24iLGYpO2g9cyhmKX1pZihoLmxlbmd0aD5wKXRocm93IG5ldyBFcnJvcihmKyIgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSAiK2gubGVuZ3RoKTtmb3Iodj1BcnJheS5pc0FycmF5KHQuYWxwaGEpPzIhPT10LmFscGhhLmxlbmd0aD9bMSwxXTpzKHQuYWxwaGEpOiJudW1iZXIiPT10eXBlb2YgdC5hbHBoYT9bdC5hbHBoYSx0LmFscGhhXTpbMSwxXSxlPWgubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQuaW5kZXgqcCl9KSx2WzBdPDAmJih2WzBdPTApLHZbMV08MCYmKHZbMF09MCksdlswXT4xJiYodlswXT0xKSx2WzFdPjEmJih2WzBdPTEpLHk9MDt5PGUubGVuZ3RoOysreSlnPWhbeV0uaW5kZXgscj1oW3ldLnJnYiw0PT09ci5sZW5ndGgmJnJbM10+PTAmJnJbM108PTF8fChyWzNdPXZbMF0rKHZbMV0tdlswXSkqZyk7Zm9yKHk9MDt5PGUubGVuZ3RoLTE7Kyt5KWM9ZVt5KzFdLWVbeV0sbj1oW3ldLnJnYix1PWhbeSsxXS5yZ2IsYj1iLmNvbmNhdChvLmxpbnNwYWNlKG5bMF0sdVswXSxjKSkseD14LmNvbmNhdChvLmxpbnNwYWNlKG5bMV0sdVsxXSxjKSksXz1fLmNvbmNhdChvLmxpbnNwYWNlKG5bMl0sdVsyXSxjKSksdz13LmNvbmNhdChvLmxpbnNwYWNlKG5bM10sdVszXSxjKSk7cmV0dXJuIGI9Yi5tYXAoTWF0aC5yb3VuZCkseD14Lm1hcChNYXRoLnJvdW5kKSxfPV8ubWFwKE1hdGgucm91bmQpLG09by56aXAoYix4LF8sdyksImhleCI9PT1kJiYobT1tLm1hcChpKSksInJnYmFTdHJpbmciPT09ZCYmKG09bS5tYXAoYSkpLG19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGUscj0iIyIsbj0wO248MzsrK24pZT10W25dLGU9ZS50b1N0cmluZygxNikscis9KCIwMCIrZSkuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3JldHVybiJyZ2JhKCIrdC5qb2luKCIsIikrIikifXZhciBvPXQoImFycmF5dG9vbHMiKSxzPXQoImNsb25lIiksbD10KCIuL2NvbG9yU2NhbGVzIik7ZS5leHBvcnRzPW59LHsiLi9jb2xvclNjYWxlcyI6OTYsYXJyYXl0b29sczo0NCxjbG9uZTo4OX1dLDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXModFswXSwtZVswXSksaT1zKHRbMV0sLWVbMV0pLGE9cyhyWzBdLC1lWzBdKSxvPXMoclsxXSwtZVsxXSksYz11KGwobixhKSxsKGksbykpO3JldHVybiBjW2MubGVuZ3RoLTFdPj0wfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIHM9YShlLHIsaSk7aWYoMD09PXMpe3ZhciBsPW8oYSh0LGUscikpLHU9byhhKHQsZSxpKSk7aWYobD09PXUpe2lmKDA9PT1sKXt2YXIgYz1uKHQsZSxyKTtyZXR1cm4gYz09PW4odCxlLGkpPzA6Yz8xOi0xfXJldHVybiAwfXJldHVybiAwPT09dT9sPjA/LTE6bih0LGUsaSk/LTE6MTowPT09bD91PjA/MTpuKHQsZSxyKT8xOi0xOm8odS1sKX12YXIgaD1hKHQsZSxyKTtyZXR1cm4gaD4wP3M+MCYmYSh0LGUsaSk+MD8xOi0xOmg8MD9zPjB8fGEodCxlLGkpPjA/MTotMTphKHQsZSxpKT4wPzE6bih0LGUscik/MTotMX1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxvPXQoInNpZ251bSIpLHM9dCgidHdvLXN1bSIpLGw9dCgicm9idXN0LXByb2R1Y3QiKSx1PXQoInJvYnVzdC1zdW0iKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUwNiwicm9idXN0LXByb2R1Y3QiOjUwNywicm9idXN0LXN1bSI6NTExLHNpZ251bTo1MTMsInR3by1zdW0iOjUzOH1dLDk5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQubGVuZ3RoLGk9dC5sZW5ndGgtZS5sZW5ndGg7aWYoaSlyZXR1cm4gaTtzd2l0Y2gocil7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gdFswXS1lWzBdO2Nhc2UgMjpyZXR1cm4gdFswXSt0WzFdLWVbMF0tZVsxXXx8YSh0WzBdLHRbMV0pLWEoZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGk9byt0WzJdLShzK2VbMl0pKXJldHVybiBpO3ZhciBsPWEodFswXSx0WzFdKSx1PWEoZVswXSxlWzFdKTtyZXR1cm4gYShsLHRbMl0pLWEodSxlWzJdKXx8YShsK3RbMl0sbyktYSh1K2VbMl0scyk7Y2FzZSA0OnZhciBjPXRbMF0saD10WzFdLGY9dFsyXSxkPXRbM10scD1lWzBdLG09ZVsxXSx2PWVbMl0sZz1lWzNdO3JldHVybiBjK2grZitkLShwK20rditnKXx8YShjLGgsZixkKS1hKHAsbSx2LGcscCl8fGEoYytoLGMrZixjK2QsaCtmLGgrZCxmK2QpLWEocCttLHArdixwK2csbSt2LG0rZyx2K2cpfHxhKGMraCtmLGMraCtkLGMrZitkLGgrZitkKS1hKHArbSt2LHArbStnLHArditnLG0rditnKTtkZWZhdWx0OmZvcih2YXIgeT10LnNsaWNlKCkuc29ydChuKSxiPWUuc2xpY2UoKS5zb3J0KG4pLHg9MDt4PHI7Kyt4KWlmKGk9eVt4XS1iW3hdKXJldHVybiBpO3JldHVybiAwfX1lLmV4cG9ydHM9aTt2YXIgYT1NYXRoLm1pbn0se31dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGkodCxlKXx8YSh0KS1hKGUpfXZhciBpPXQoImNvbXBhcmUtY2VsbCIpLGE9dCgiY2VsbC1vcmllbnRhdGlvbiIpO2UuZXhwb3J0cz1ufSx7ImNlbGwtb3JpZW50YXRpb24iOjgzLCJjb21wYXJlLWNlbGwiOjk5fV0sMTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuW1swXV07dmFyIHI9dFswXS5sZW5ndGg7cmV0dXJuIDA9PT1yP1tdOjE9PT1yP2kodCk6Mj09PXI/YSh0KTpvKHQscil9dmFyIGk9dCgiLi9saWIvY2gxZCIpLGE9dCgiLi9saWIvY2gyZCIpLG89dCgiLi9saWIvY2huZCIpO2UuZXhwb3J0cz1ufSx7Ii4vbGliL2NoMWQiOjEwMiwiLi9saWIvY2gyZCI6MTAzLCIuL2xpYi9jaG5kIjoxMDR9XSwxMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfWUuZXhwb3J0cz1ufSx7fV0sMTAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9aSh0KSxyPWUubGVuZ3RoO2lmKHI8PTIpcmV0dXJuW107Zm9yKHZhciBuPW5ldyBBcnJheShyKSxhPWVbci0xXSxvPTA7bzxyOysrbyl7dmFyIHM9ZVtvXTtuW29dPVthLHNdLGE9c31yZXR1cm4gbn1lLmV4cG9ydHM9bjt2YXIgaT10KCJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCIpfSx7Im1vbm90b25lLWNvbnZleC1odWxsLTJkIjo0NDl9XSwxMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxlLmxlbmd0aDsrK2kpbltpXT10W2VbaV1dO2Zvcih2YXIgYT1lLmxlbmd0aCxpPTA7aTxyOysraSllLmluZGV4T2YoaSk8MCYmKG5bYSsrXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49ZS5sZW5ndGgsaT0wO2k8cjsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288YS5sZW5ndGg7KytvKXt2YXIgcz1hW29dO2lmKHM8bilhW29dPWVbc107ZWxzZXtzLT1uO2Zvcih2YXIgbD0wO2w8bjsrK2wpcz49ZVtsXSYmKHMrPTEpO2Fbb109c319cmV0dXJuIHR9ZnVuY3Rpb24gYSh0LGUpe3RyeXtyZXR1cm4gbyh0LCEwKX1jYXRjaCh1KXt2YXIgcj1zKHQpO2lmKHIubGVuZ3RoPD1lKXJldHVybltdO3ZhciBhPW4odCxyKSxsPW8oYSwhMCk7cmV0dXJuIGkobCxyKX19ZS5leHBvcnRzPWE7dmFyIG89dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxzPXQoImFmZmluZS1odWxsIil9LHsiYWZmaW5lLWh1bGwiOjM5LCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6Mjg4fV0sMTA1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtBRkc6ImFmZ2hhbiIsQUxBOiJcXGJcXHdsYW5kIixBTEI6ImFsYmFuaWEiLERaQToiYWxnZXJpYSIsQVNNOiJeKD89LiphbWVyaWMpLipzYW1vYSIsQU5EOiJhbmRvcnJhIixBR086ImFuZ29sYSIsQUlBOiJhbmd1aWxsP2EiLEFUQToiYW50YXJjdGljYSIsQVRHOiJhbnRpZ3VhIixBUkc6ImFyZ2VudGluIixBUk06ImFybWVuaWEiLEFCVzoiXig/IS4qYm9uYWlyZSkuKlxcYmFydWJhIixBVVM6ImF1c3RyYWxpYSIsQVVUOiJeKD8hLipodW5nYXJ5KS4qYXVzdHJpYXxcXGJhdXN0cmkuKlxcYmVtcCIsQVpFOiJhemVyYmFpamFuIixCSFM6ImJhaGFtYXMiLEJIUjoiYmFocmFpbiIsQkdEOiJiYW5nbGFkZXNofF4oPz0uKmVhc3QpLipwYWtpP3N0YW4iLEJSQjoiYmFyYmFkb3MiLEJMUjoiYmVsYXJ1c3xieWVsbyIsQkVMOiJeKD8hLipsdXhlbSkuKmJlbGdpdW0iLEJMWjoiYmVsaXplfF4oPz0uKmJyaXRpc2gpLipob25kdXJhcyIsQkVOOiJiZW5pbnxkYWhvbWUiLEJNVToiYmVybXVkYSIsQlROOiJiaHV0YW4iLEJPTDoiYm9saXZpYSIsQkVTOiJeKD89Lipib25haXJlKS4qZXVzdGF0aXVzfF4oPz0uKmNhcmliKS4qbmV0aGVybGFuZHN8XFxiYmVzLj9pc2xhbmRzIixCSUg6ImhlcnplZ292aW5hfGJvc25pYSIsQldBOiJib3Rzd2FuYXxiZWNodWFuYSIsQlZUOiJib3V2ZXQiLEJSQToiYnJhemlsIixJT1Q6ImJyaXRpc2guP2luZGlhbi4/b2NlYW4iLEJSTjoiYnJ1bmVpIixCR1I6ImJ1bGdhcmlhIixCRkE6ImJ1cmtpbmF8XFxiZmFzb3x1cHBlci4/dm9sdGEiLEJESToiYnVydW5kaSIsQ1BWOiJ2ZXJkZSIsS0hNOiJjYW1ib2RpYXxrYW1wdWNoZWF8a2htZXIiLENNUjoiY2FtZXJvb24iLENBTjoiY2FuYWRhIixDWU06ImNheW1hbiIsQ0FGOiJcXGJjZW50cmFsLmFmcmljYW4ucmVwdWJsaWMiLFRDRDoiXFxiY2hhZCIsQ0hMOiJcXGJjaGlsZSIsQ0hOOiJeKD8hLipcXGJtYWMpKD8hLipcXGJob25nKSg/IS4qXFxidGFpKSg/IS4qXFxicmVwKS4qY2hpbmF8Xig/PS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLENYUjoiY2hyaXN0bWFzIixDQ0s6IlxcYmNvY29zfGtlZWxpbmciLENPTDoiY29sb21iaWEiLENPTToiY29tb3JvIixDT0c6Il4oPyEuKlxcYmRlbSkoPyEuKlxcYmRbXFwuXT9yKSg/IS4qa2luc2hhc2EpKD8hLip6YWlyZSkoPyEuKmJlbGcpKD8hLipsLm9wb2xkdmlsbGUpKD8hLipmcmVlKS4qXFxiY29uZ28iLENPSzoiXFxiY29vayIsQ1JJOiJjb3N0YS4/cmljYSIsQ0lWOiJpdm9pcmV8aXZvcnkiLEhSVjoiY3JvYXRpYSIsQ1VCOiJcXGJjdWJhIixDVVc6Il4oPyEuKmJvbmFpcmUpLipcXGJjdXJhKGN8XHhlNylhbyIsQ1lQOiJjeXBydXMiLENTSzoiY3plY2hvc2xvdmFraWEiLENaRToiXig/PS4qcmVwKS4qY3plY2h8Y3plY2hpYXxib2hlbWlhIixDT0Q6IlxcYmRlbS4qY29uZ298Y29uZ28uKlxcYmRlbXxjb25nby4qXFxiZFtcXC5dP3J8XFxiZFtcXC5dP3IuKmNvbmdvfGJlbGdpYW4uP2NvbmdvfGNvbmdvLj9mcmVlLj9zdGF0ZXxraW5zaGFzYXx6YWlyZXxsLm9wb2xkdmlsbGV8ZHJjfGRyb2N8cmRjIixETks6ImRlbm1hcmsiLERKSToiZGppYm91dGkiLERNQToiZG9taW5pY2EoPyFuKSIsRE9NOiJkb21pbmljYW4ucmVwIixFQ1U6ImVjdWFkb3IiLEVHWToiZWd5cHQiLFNMVjoiZWwuP3NhbHZhZG9yIixHTlE6Imd1aW5lLiplcXxlcS4qZ3VpbmV8Xig/PS4qc3BhbikuKmd1aW5lYSIsRVJJOiJlcml0cmVhIixFU1Q6ImVzdG9uaWEiLEVUSDoiZXRoaW9waWF8YWJ5c3NpbmlhIixGTEs6ImZhbGtsYW5kfG1hbHZpbmFzIixGUk86ImZhcm9lfGZhZXJvZSIsRkpJOiJmaWppIixGSU46ImZpbmxhbmQiLEZSQToiXig/IS4qXFxiZGVwKSg/IS4qbWFydGluaXF1ZSkuKmZyYW5jZXxmcmVuY2guP3JlcHVibGljfFxcYmdhdWwiLEdVRjoiXig/PS4qZnJlbmNoKS4qZ3VpYW5hIixQWUY6ImZyZW5jaC4/cG9seW5lc2lhfHRhaGl0aSIsQVRGOiJmcmVuY2guP3NvdXRoZXJuIixHQUI6ImdhYm9uIixHTUI6ImdhbWJpYSIsR0VPOiJeKD8hLipzb3V0aCkuKmdlb3JnaWEiLEREUjoiZ2VybWFuLj9kZW1vY3JhdGljLj9yZXB1YmxpY3xkZW1vY3JhdGljLj9yZXB1YmxpYy4qZ2VybWFueXxlYXN0Lmdlcm1hbnkiLERFVToiXig/IS4qZWFzdCkuKmdlcm1hbnl8Xig/PS4qXFxiZmVkLipcXGJyZXApLipnZXJtYW4iLEdIQToiZ2hhbmF8Z29sZC4/Y29hc3QiLEdJQjoiZ2licmFsdGFyIixHUkM6ImdyZWVjZXxoZWxsZW5pY3xoZWxsYXMiLEdSTDoiZ3JlZW5sYW5kIixHUkQ6ImdyZW5hZGEiLEdMUDoiZ3VhZGVsb3VwZSIsR1VNOiJcXGJndWFtIixHVE06Imd1YXRlbWFsYSIsR0dZOiJndWVybnNleSIsR0lOOiJeKD8hLiplcSkoPyEuKnNwYW4pKD8hLipiaXNzYXUpKD8hLipwb3J0dSkoPyEuKm5ldykuKmd1aW5lYSIsR05COiJiaXNzYXV8Xig/PS4qcG9ydHUpLipndWluZWEiLEdVWToiZ3V5YW5hfGJyaXRpc2guP2d1aWFuYSIsSFRJOiJoYWl0aSIsSE1EOiJoZWFyZC4qbWNkb25hbGQiLFZBVDoiaG9seS4/c2VlfHZhdGljYW58cGFwYWwuP3N0IixITkQ6Il4oPyEuKmJyaXQpLipob25kdXJhcyIsSEtHOiJob25nLj9rb25nIixIVU46Il4oPyEuKmF1c3RyKS4qaHVuZ2FyeSIsSVNMOiJpY2VsYW5kIixJTkQ6ImluZGlhKD8hLipvY2VhKSIsSUROOiJpbmRvbmVzaWEiLElSTjoiXFxiaXJhbnxwZXJzaWEiLElSUToiXFxiaXJhcXxtZXNvcG90YW1pYSIsSVJMOiIoXmlyZWxhbmQpfChecmVwdWJsaWMuKmlyZWxhbmQpIixJTU46Il4oPz0uKmlzbGUpLipcXGJtYW4iLElTUjoiaXNyYWVsIixJVEE6Iml0YWx5IixKQU06ImphbWFpY2EiLEpQTjoiamFwYW4iLEpFWToiamVyc2V5IixKT1I6ImpvcmRhbiIsS0FaOiJrYXphayIsS0VOOiJrZW55YXxicml0aXNoLj9lYXN0Lj9hZnJpY2F8ZWFzdC4/YWZyaWNhLj9wcm90IixLSVI6ImtpcmliYXRpIixQUks6Il4oPz0uKmRlbW9jcmF0fHBlb3BsZXxub3J0aHxkLipwLioucikuKlxcYmtvcmVhfGRwcmt8a29yZWEuKihkLipwLipyKSIsS1dUOiJrdXdhaXQiLEtHWjoia3lyZ3l6fGtpcmdoaXoiLExBTzoiXFxibGFvcz9cXGIiLExWQToibGF0dmlhIixMQk46ImxlYmFub24iLExTTzoibGVzb3Rob3xiYXN1dG8iLExCUjoibGliZXJpYSIsTEJZOiJsaWJ5YSIsTElFOiJsaWVjaHRlbnN0ZWluIixMVFU6ImxpdGh1YW5pYSIsTFVYOiJeKD8hLipiZWxnKS4qbHV4ZW0iLE1BQzoibWFjYShvfHUpIixNREc6Im1hZGFnYXNjYXJ8bWFsYWdhc3kiLE1XSToibWFsYXdpfG55YXNhIixNWVM6Im1hbGF5c2lhIixNRFY6Im1hbGRpdmUiLE1MSToiXFxibWFsaVxcYiIsTUxUOiJcXGJtYWx0YSIsTUhMOiJtYXJzaGFsbCIsTVRROiJtYXJ0aW5pcXVlIixNUlQ6Im1hdXJpdGFuaWEiLE1VUzoibWF1cml0aXVzIixNWVQ6IlxcYm1heW90dGUiLE1FWDoiXFxibWV4aWMiLEZTTToiZmVkLiptaWNyb25lc2lhfG1pY3JvbmVzaWEuKmZlZCIsTUNPOiJtb25hY28iLE1ORzoibW9uZ29saWEiLE1ORToiXig/IS4qc2VyYmlhKS4qbW9udGVuZWdybyIsTVNSOiJtb250c2VycmF0IixNQVI6Im1vcm9jY298XFxibWFyb2MiLE1PWjoibW96YW1iaXF1ZSIsTU1SOiJteWFubWFyfGJ1cm1hIixOQU06Im5hbWliaWEiLE5SVToibmF1cnUiLE5QTDoibmVwYWwiLE5MRDoiXig/IS4qXFxiYW50KSg/IS4qXFxiY2FyaWIpLipuZXRoZXJsYW5kcyIsQU5UOiJeKD89LipcXGJhbnQpLioobmV0aGVyfGR1dGNoKSIsTkNMOiJuZXcuP2NhbGVkb25pYSIsTlpMOiJuZXcuP3plYWxhbmQiLE5JQzoibmljYXJhZ3VhIixORVI6IlxcYm5pZ2VyKD8haWEpIixOR0E6Im5pZ2VyaWEiLE5JVToibml1ZSIsTkZLOiJub3Jmb2xrIixNTlA6Im1hcmlhbmEiLE5PUjoibm9yd2F5IixPTU46IlxcYm9tYW58dHJ1Y2lhbCIsUEFLOiJeKD8hLiplYXN0KS4qcGFraT9zdGFuIixQTFc6InBhbGF1IixQU0U6InBhbGVzdGlufFxcYmdhemF8d2VzdC4/YmFuayIsUEFOOiJwYW5hbWEiLFBORzoicGFwdWF8bmV3Lj9ndWluZWEiLFBSWToicGFyYWd1YXkiLFBFUjoicGVydSIsUEhMOiJwaGlsaXBwaW5lcyIsUENOOiJwaXRjYWlybiIsUE9MOiJwb2xhbmQiLFBSVDoicG9ydHVnYWwiLFBSSToicHVlcnRvLj9yaWNvIixRQVQ6InFhdGFyIixLT1I6Il4oPyEuKmQuKnAuKnIpKD8hLipkZW1vY3JhdCkoPyEuKnBlb3BsZSkoPyEuKm5vcnRoKS4qXFxia29yZWEoPyEuKmQuKnAuKnIpIixNREE6Im1vbGRvdnxiKGF8ZSlzc2FyYWJpYSIsUkVVOiJyKGV8XHhlOSl1bmlvbiIsUk9VOiJyKG98dXxvdSltYW5pYSIsUlVTOiJcXGJydXNzaWF8c292aWV0Lj91bmlvbnx1XFwuP3NcXC4/c1xcLj9yfHNvY2lhbGlzdC4/cmVwdWJsaWNzIixSV0E6InJ3YW5kYSIsQkxNOiJiYXJ0aChlfFx4ZTkpbGVteSIsU0hOOiJoZWxlbmEiLEtOQToia2l0dHN8XFxibmV2aXMiLExDQToiXFxibHVjaWEiLE1BRjoiXig/PS4qY29sbGVjdGl2aXR5KS4qbWFydGlufF4oPz0uKmZyYW5jZSkuKm1hcnRpbig/IWlxdWUpfF4oPz0uKmZyZW5jaCkuKm1hcnRpbig/IWlxdWUpIixTUE06Im1pcXVlbG9uIixWQ1Q6InZpbmNlbnQiLFdTTToiXig/IS4qYW1lcikuKnNhbW9hIixTTVI6InNhbi4/bWFyaW5vIixTVFA6IlxcYnMoYXxceGUzKW8uP3RvbShlfFx4ZTkpIixTQVU6IlxcYnNhXFx3Ki4/YXJhYmlhIixTRU46InNlbmVnYWwiLFNSQjoiXig/IS4qbW9udGUpLipzZXJiaWEiLFNZQzoic2V5Y2hlbGwiLFNMRToic2llcnJhIixTR1A6InNpbmdhcG9yZSIsU1hNOiJeKD8hLiptYXJ0aW4pKD8hLipzYWJhKS4qbWFhcnRlbiIsU1ZLOiJeKD8hLipjemUpLipzbG92YWsiLFNWTjoic2xvdmVuaWEiLFNMQjoic29sb21vbiIsU09NOiJzb21hbGkiLFpBRjoic291dGguYWZyaWNhfHNcXFxcLi4/YWZyaWNhIixTR1M6InNvdXRoLj9nZW9yZ2lhfHNhbmR3aWNoIixTU0Q6IlxcYnNcXHcqLj9zdWRhbiIsRVNQOiJzcGFpbiIsTEtBOiJzcmkuP2xhbmthfGNleWxvbiIsU0ROOiJeKD8hLipcXGJzKD8hdSkpLipzdWRhbiIsU1VSOiJzdXJpbmFtfGR1dGNoLj9ndWlhbmEiLFNKTToic3ZhbGJhcmQiLFNXWjoic3dhemlsYW5kIixTV0U6InN3ZWRlbiIsQ0hFOiJzd2l0enxzd2lzcyIsU1lSOiJzeXJpYSIsVFdOOiJ0YWl3YW58dGFpcGVpfGZvcm1vc2F8Xig/IS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLFRKSzoidGFqaWsiLFRIQToidGhhaWxhbmR8XFxic2lhbSIsTUtEOiJtYWNlZG9uaWF8Znlyb20iLFRMUzoiXig/PS4qbGVzdGUpLip0aW1vcnxeKD89LiplYXN0KS4qdGltb3IiLFRHTzoidG9nbyIsVEtMOiJ0b2tlbGF1IixUT046InRvbmdhIixUVE86InRyaW5pZGFkfHRvYmFnbyIsVFVOOiJ0dW5pc2lhIixUVVI6InR1cmtleSIsVEtNOiJ0dXJrbWVuIixUQ0E6InR1cmtzIixUVVY6InR1dmFsdSIsVUdBOiJ1Z2FuZGEiLFVLUjoidWtyYWluIixBUkU6ImVtaXJhdGVzfF51XFwuP2FcXC4/ZVxcLj8kfHVuaXRlZC4/YXJhYi4/ZW0iLEdCUjoidW5pdGVkLj9raW5nZG9tfGJyaXRhaW58XnVcXC4/a1xcLj8kIixUWkE6InRhbnphbmlhIixVU0E6InVuaXRlZC4/c3RhdGVzXFxiKD8hLippc2xhbmRzKXxcXGJ1XFwuP3NcXC4/YVxcLj9cXGJ8Xlxccyp1XFwuP3NcXC4/XFxiKD8hLippc2xhbmRzKSIsVU1JOiJtaW5vci4/b3V0bHlpbmcuP2lzIixVUlk6InVydWd1YXkiLFVaQjoidXpiZWsiLFZVVDoidmFudWF0dXxuZXcuP2hlYnJpZGVzIixWRU46InZlbmV6dWVsYSIsVk5NOiJeKD8hLipyZXB1YmxpYykuKnZpZXQuP25hbXxeKD89Lipzb2NpYWxpc3QpLip2aWV0Lj9uYW0iLFZHQjoiXig/PS4qXFxidVxcLj9cXHM/aykuKnZpcmdpbnxeKD89Lipicml0KS4qdmlyZ2lufF4oPz0uKmtpbmdkb20pLip2aXJnaW4iLFZJUjoiXig/PS4qXFxidVxcLj9cXHM/cykuKnZpcmdpbnxeKD89LipzdGF0ZXMpLip2aXJnaW4iLFdMRjoiZnV0dW5hfHdhbGxpcyIsRVNIOiJ3ZXN0ZXJuLnNhaGFyYSIsWUVNOiJeKD8hLiphcmFiKSg/IS4qbm9ydGgpKD8hLipzYW5hKSg/IS4qcGVvKSg/IS4qZGVtKSg/IS4qc291dGgpKD8hLiphZGVuKSg/IS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWU1EOiJeKD89LipwZW8pLip5ZW1lbnxeKD8hLipyZXApKD89LipkZW0pLip5ZW1lbnxeKD89Lipzb3V0aCkuKnllbWVufF4oPz0uKmFkZW4pLip5ZW1lbnxeKD89LipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZVUc6Inl1Z29zbGF2aWEiLFpNQjoiemFtYmlhfG5vcnRoZXJuLj9yaG9kZXNpYSIsRUFaOiJ6YW56aWJhciIsWldFOiJ6aW1iYWJ3ZXxeKD8hLipub3J0aGVybikuKnJob2Rlc2lhIn19LHt9XSwxMDY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0PU1hdGgucm91bmQodCksdDwwPzA6dD4yNTU/MjU1OnR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdDwwPzA6dD4xPzE6dH1mdW5jdGlvbiBhKHQpe3JldHVybiBuKCIlIj09PXRbdC5sZW5ndGgtMV0/cGFyc2VGbG9hdCh0KS8xMDAqMjU1OnBhcnNlSW50KHQpKX1mdW5jdGlvbiBvKHQpe3JldHVybiBpKCIlIj09PXRbdC5sZW5ndGgtMV0/cGFyc2VGbG9hdCh0KS8xMDA6cGFyc2VGbG9hdCh0KSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHI8MD9yKz0xOnI+MSYmKHItPTEpLDYqcjwxP3QrKGUtdCkqcio2OjIqcjwxP2U6MypyPDI/dCsoZS10KSooMi8zLXIpKjY6dH1mdW5jdGlvbiBsKHQpe3ZhciBlPXQucmVwbGFjZSgvIC9nLCIiKS50b0xvd2VyQ2FzZSgpO2lmKGUgaW4gdSlyZXR1cm4gdVtlXS5zbGljZSgpO2lmKCIjIj09PWVbMF0pe2lmKDQ9PT1lLmxlbmd0aCl7dmFyIHI9cGFyc2VJbnQoZS5zdWJzdHIoMSksMTYpO3JldHVybiByPj0wJiZyPD00MDk1P1soMzg0MCZyKT4+NHwoMzg0MCZyKT4+OCwyNDAmcnwoMjQwJnIpPj40LDE1JnJ8KDE1JnIpPDw0LDFdOm51bGx9aWYoNz09PWUubGVuZ3RoKXt2YXIgcj1wYXJzZUludChlLnN1YnN0cigxKSwxNik7cmV0dXJuIHI+PTAmJnI8PTE2Nzc3MjE1P1soMTY3MTE2ODAmcik+PjE2LCg2NTI4MCZyKT4+OCwyNTUmciwxXTpudWxsfXJldHVybiBudWxsfXZhciBpPWUuaW5kZXhPZigiKCIpLGw9ZS5pbmRleE9mKCIpIik7aWYoLTEhPT1pJiZsKzE9PT1lLmxlbmd0aCl7dmFyIGM9ZS5zdWJzdHIoMCxpKSxoPWUuc3Vic3RyKGkrMSxsLShpKzEpKS5zcGxpdCgiLCIpLGY9MTtzd2l0Y2goYyl7Y2FzZSJyZ2JhIjppZig0IT09aC5sZW5ndGgpcmV0dXJuIG51bGw7Zj1vKGgucG9wKCkpO2Nhc2UicmdiIjpyZXR1cm4gMyE9PWgubGVuZ3RoP251bGw6W2EoaFswXSksYShoWzFdKSxhKGhbMl0pLGZdO2Nhc2UiaHNsYSI6aWYoNCE9PWgubGVuZ3RoKXJldHVybiBudWxsO2Y9byhoLnBvcCgpKTtjYXNlImhzbCI6aWYoMyE9PWgubGVuZ3RoKXJldHVybiBudWxsO3ZhciBkPShwYXJzZUZsb2F0KGhbMF0pJTM2MCszNjApJTM2MC8zNjAscD1vKGhbMV0pLG09byhoWzJdKSx2PW08PS41P20qKHArMSk6bStwLW0qcCxnPTIqbS12O3JldHVybltuKDI1NSpzKGcsdixkKzEvMykpLG4oMjU1KnMoZyx2LGQpKSxuKDI1NSpzKGcsdixkLTEvMykpLGZdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXJldHVybiBudWxsfXZhciB1PXt0cmFuc3BhcmVudDpbMCwwLDAsMF0sYWxpY2VibHVlOlsyNDAsMjQ4LDI1NSwxXSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1LDFdLGFxdWE6WzAsMjU1LDI1NSwxXSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMiwxXSxhenVyZTpbMjQwLDI1NSwyNTUsMV0sYmVpZ2U6WzI0NSwyNDUsMjIwLDFdLGJpc3F1ZTpbMjU1LDIyOCwxOTYsMV0sYmxhY2s6WzAsMCwwLDFdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNSwxXSxibHVlOlswLDAsMjU1LDFdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjYsMV0sYnJvd246WzE2NSw0Miw0MiwxXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1LDFdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MCwxXSxjaGFydHJldXNlOlsxMjcsMjU1LDAsMV0sY2hvY29sYXRlOlsyMTAsMTA1LDMwLDFdLGNvcmFsOlsyNTUsMTI3LDgwLDFdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzNywxXSxjb3Juc2lsazpbMjU1LDI0OCwyMjAsMV0sY3JpbXNvbjpbMjIwLDIwLDYwLDFdLGN5YW46WzAsMjU1LDI1NSwxXSxkYXJrYmx1ZTpbMCwwLDEzOSwxXSxkYXJrY3lhbjpbMCwxMzksMTM5LDFdLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTEsMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5LDFdLGRhcmtncmVlbjpbMCwxMDAsMCwxXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjksMV0sZGFya2toYWtpOlsxODksMTgzLDEwNywxXSwKZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTt0cnl7ci5wYXJzZUNTU0NvbG9yPWx9Y2F0Y2godCl7fX0se31dLDEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt2YXIgbz02KmkqaS02Kmkscz0zKmkqaS00KmkrMSxsPS02KmkqaSs2KmksdT0zKmkqaS0yKmk7aWYodC5sZW5ndGgpe2F8fChhPW5ldyBBcnJheSh0Lmxlbmd0aCkpO2Zvcih2YXIgYz10Lmxlbmd0aC0xO2M+PTA7LS1jKWFbY109byp0W2NdK3MqZVtjXStsKnJbY10rdSpuW2NdO3JldHVybiBhfXJldHVybiBvKnQrcyplK2wqcltjXSt1Km59ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dmFyIG89aS0xLHM9aSppLGw9bypvLHU9KDErMippKSpsLGM9aSpsLGg9cyooMy0yKmkpLGY9cypvO2lmKHQubGVuZ3RoKXthfHwoYT1uZXcgQXJyYXkodC5sZW5ndGgpKTtmb3IodmFyIGQ9dC5sZW5ndGgtMTtkPj0wOy0tZClhW2RdPXUqdFtkXStjKmVbZF0raCpyW2RdK2YqbltkXTtyZXR1cm4gYX1yZXR1cm4gdSp0K2MqZStoKnIrZipufWUuZXhwb3J0cz1pLGUuZXhwb3J0cy5kZXJpdmF0aXZlPW59LHt9XSwxMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuYXJnVHlwZXM9W10sdGhpcy5zaGltQXJncz1bXSx0aGlzLmFycmF5QXJncz1bXSx0aGlzLmFycmF5QmxvY2tJbmRpY2VzPVtdLHRoaXMuc2NhbGFyQXJncz1bXSx0aGlzLm9mZnNldEFyZ3M9W10sdGhpcy5vZmZzZXRBcmdJbmRleD1bXSx0aGlzLmluZGV4QXJncz1bXSx0aGlzLnNoYXBlQXJncz1bXSx0aGlzLmZ1bmNOYW1lPSIiLHRoaXMucHJlPW51bGwsdGhpcy5ib2R5PW51bGwsdGhpcy5wb3N0PW51bGwsdGhpcy5kZWJ1Zz0hMX1mdW5jdGlvbiBpKHQpe3ZhciBlPW5ldyBuO2UucHJlPXQucHJlLGUuYm9keT10LmJvZHksZS5wb3N0PXQucG9zdDt2YXIgcj10LmFyZ3Muc2xpY2UoMCk7ZS5hcmdUeXBlcz1yO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgbz1yW2ldO2lmKCJhcnJheSI9PT1vfHwib2JqZWN0Ij09dHlwZW9mIG8mJm8uYmxvY2tJbmRpY2VzKXtpZihlLmFyZ1R5cGVzW2ldPSJhcnJheSIsZS5hcnJheUFyZ3MucHVzaChpKSxlLmFycmF5QmxvY2tJbmRpY2VzLnB1c2goby5ibG9ja0luZGljZXM/by5ibG9ja0luZGljZXM6MCksZS5zaGltQXJncy5wdXNoKCJhcnJheSIraSksaTxlLnByZS5hcmdzLmxlbmd0aCYmZS5wcmUuYXJnc1tpXS5jb3VudD4wKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3QgcmVmZXJlbmNlIGFycmF5IGFyZ3MiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgYXJncyIpfWVsc2UgaWYoInNjYWxhciI9PT1vKWUuc2NhbGFyQXJncy5wdXNoKGkpLGUuc2hpbUFyZ3MucHVzaCgic2NhbGFyIitpKTtlbHNlIGlmKCJpbmRleCI9PT1vKXtpZihlLmluZGV4QXJncy5wdXNoKGkpLGk8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwcmUoKSBibG9jayBtYXkgbm90IHJlZmVyZW5jZSBhcnJheSBpbmRleCIpO2lmKGk8ZS5ib2R5LmFyZ3MubGVuZ3RoJiZlLmJvZHkuYXJnc1tpXS5sdmFsdWUpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogYm9keSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgaW5kZXgiKTtpZihpPGUucG9zdC5hcmdzLmxlbmd0aCYmZS5wb3N0LmFyZ3NbaV0uY291bnQ+MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCByZWZlcmVuY2UgYXJyYXkgaW5kZXgiKX1lbHNlIGlmKCJzaGFwZSI9PT1vKXtpZihlLnNoYXBlQXJncy5wdXNoKGkpLGk8ZS5wcmUuYXJncy5sZW5ndGgmJmUucHJlLmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IHByZSgpIGJsb2NrIG1heSBub3Qgd3JpdGUgdG8gYXJyYXkgc2hhcGUiKTtpZihpPGUuYm9keS5hcmdzLmxlbmd0aCYmZS5ib2R5LmFyZ3NbaV0ubHZhbHVlKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IGJvZHkoKSBibG9jayBtYXkgbm90IHdyaXRlIHRvIGFycmF5IHNoYXBlIik7aWYoaTxlLnBvc3QuYXJncy5sZW5ndGgmJmUucG9zdC5hcmdzW2ldLmx2YWx1ZSl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBwb3N0KCkgYmxvY2sgbWF5IG5vdCB3cml0ZSB0byBhcnJheSBzaGFwZSIpfWVsc2V7aWYoIm9iamVjdCIhPXR5cGVvZiBvfHwhby5vZmZzZXQpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVW5rbm93biBhcmd1bWVudCB0eXBlICIrcltpXSk7ZS5hcmdUeXBlc1tpXT0ib2Zmc2V0IixlLm9mZnNldEFyZ3MucHVzaCh7YXJyYXk6by5hcnJheSxvZmZzZXQ6by5vZmZzZXR9KSxlLm9mZnNldEFyZ0luZGV4LnB1c2goaSl9fWlmKGUuYXJyYXlBcmdzLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoImN3aXNlOiBObyBhcnJheSBhcmd1bWVudHMgc3BlY2lmaWVkIik7aWYoZS5wcmUuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHByZSgpIGJsb2NrIik7aWYoZS5ib2R5LmFyZ3MubGVuZ3RoPnIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IFRvbyBtYW55IGFyZ3VtZW50cyBpbiBib2R5KCkgYmxvY2siKTtpZihlLnBvc3QuYXJncy5sZW5ndGg+ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjd2lzZTogVG9vIG1hbnkgYXJndW1lbnRzIGluIHBvc3QoKSBibG9jayIpO3JldHVybiBlLmRlYnVnPSEhdC5wcmludENvZGV8fCEhdC5kZWJ1ZyxlLmZ1bmNOYW1lPXQuZnVuY05hbWV8fCJjd2lzZSIsZS5ibG9ja1NpemU9dC5ibG9ja1NpemV8fDY0LGEoZSl9dmFyIGE9dCgiLi9saWIvdGh1bmsuanMiKTtlLmV4cG9ydHM9aX0seyIuL2xpYi90aHVuay5qcyI6MTEwfV0sMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGksYT10Lmxlbmd0aCxvPWUuYXJyYXlBcmdzLmxlbmd0aCxzPWUuaW5kZXhBcmdzLmxlbmd0aD4wLGw9W10sdT1bXSxjPTAsaD0wO2ZvcihuPTA7bjxhOysrbil1LnB1c2goWyJpIixuLCI9MCJdLmpvaW4oIiIpKTtmb3IoaT0wO2k8bzsrK2kpZm9yKG49MDtuPGE7KytuKWg9YyxjPXRbbl0sMD09PW4/dS5wdXNoKFsiZCIsaSwicyIsbiwiPXQiLGksInAiLGNdLmpvaW4oIiIpKTp1LnB1c2goWyJkIixpLCJzIixuLCI9KHQiLGksInAiLGMsIi1zIixoLCIqdCIsaSwicCIsaCwiKSJdLmpvaW4oIiIpKTtmb3IodS5sZW5ndGg+MCYmbC5wdXNoKCJ2YXIgIit1LmpvaW4oIiwiKSksbj1hLTE7bj49MDstLW4pYz10W25dLGwucHVzaChbImZvcihpIixuLCI9MDtpIixuLCI8cyIsYywiOysraSIsbiwiKXsiXS5qb2luKCIiKSk7Zm9yKGwucHVzaChyKSxuPTA7bjxhOysrbil7Zm9yKGg9YyxjPXRbbl0saT0wO2k8bzsrK2kpbC5wdXNoKFsicCIsaSwiKz1kIixpLCJzIixuXS5qb2luKCIiKSk7cyYmKG4+MCYmbC5wdXNoKFsiaW5kZXhbIixoLCJdLT1zIixoXS5qb2luKCIiKSksbC5wdXNoKFsiKytpbmRleFsiLGMsIl0iXS5qb2luKCIiKSkpLGwucHVzaCgifSIpfXJldHVybiBsLmpvaW4oIlxuIil9ZnVuY3Rpb24gaSh0LGUscixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1yLmFycmF5QXJncy5sZW5ndGgscz1yLmJsb2NrU2l6ZSxsPXIuaW5kZXhBcmdzLmxlbmd0aD4wLHU9W10sYz0wO2M8bzsrK2MpdS5wdXNoKFsidmFyIG9mZnNldCIsYywiPXAiLGNdLmpvaW4oIiIpKTtmb3IodmFyIGM9dDtjPGE7KytjKXUucHVzaChbImZvcih2YXIgaiIrYysiPVNTWyIsZVtjXSwiXXwwO2oiLGMsIj4wOyl7Il0uam9pbigiIikpLHUucHVzaChbImlmKGoiLGMsIjwiLHMsIil7Il0uam9pbigiIikpLHUucHVzaChbInMiLGVbY10sIj1qIixjXS5qb2luKCIiKSksdS5wdXNoKFsiaiIsYywiPTAiXS5qb2luKCIiKSksdS5wdXNoKFsifWVsc2V7cyIsZVtjXSwiPSIsc10uam9pbigiIikpLHUucHVzaChbImoiLGMsIi09IixzLCJ9Il0uam9pbigiIikpLGwmJnUucHVzaChbImluZGV4WyIsZVtjXSwiXT1qIixjXS5qb2luKCIiKSk7Zm9yKHZhciBjPTA7YzxvOysrYyl7Zm9yKHZhciBoPVsib2Zmc2V0IitjXSxmPXQ7ZjxhOysrZiloLnB1c2goWyJqIixmLCIqdCIsYywicCIsZVtmXV0uam9pbigiIikpO3UucHVzaChbInAiLGMsIj0oIixoLmpvaW4oIisiKSwiKSJdLmpvaW4oIiIpKX11LnB1c2gobihlLHIsaSkpO2Zvcih2YXIgYz10O2M8YTsrK2MpdS5wdXNoKCJ9Iik7cmV0dXJuIHUuam9pbigiXG4iKX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0wLHI9dFswXS5sZW5ndGg7ZTxyOyl7Zm9yKHZhciBuPTE7bjx0Lmxlbmd0aDsrK24paWYodFtuXVtlXSE9PXRbMF1bZV0pcmV0dXJuIGU7KytlfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj10LmJvZHksaT1bXSxhPVtdLG89MDtvPHQuYXJncy5sZW5ndGg7KytvKXt2YXIgcz10LmFyZ3Nbb107aWYoIShzLmNvdW50PD0wKSl7dmFyIGw9bmV3IFJlZ0V4cChzLm5hbWUsImciKSx1PSIiLGM9ZS5hcnJheUFyZ3MuaW5kZXhPZihvKTtzd2l0Y2goZS5hcmdUeXBlc1tvXSl7Y2FzZSJvZmZzZXQiOnZhciBoPWUub2Zmc2V0QXJnSW5kZXguaW5kZXhPZihvKTtjPWUub2Zmc2V0QXJnc1toXS5hcnJheSx1PSIrcSIraDtjYXNlImFycmF5Ijp1PSJwIitjK3U7dmFyIGY9ImwiK28sZD0iYSIrYztpZigwPT09ZS5hcnJheUJsb2NrSW5kaWNlc1tjXSkxPT09cy5jb3VudD8iZ2VuZXJpYyI9PT1yW2NdP3MubHZhbHVlPyhpLnB1c2goWyJ2YXIgIixmLCI9IixkLCIuZ2V0KCIsdSwiKSJdLmpvaW4oIiIpKSxuPW4ucmVwbGFjZShsLGYpLGEucHVzaChbZCwiLnNldCgiLHUsIiwiLGYsIikiXS5qb2luKCIiKSkpOm49bi5yZXBsYWNlKGwsW2QsIi5nZXQoIix1LCIpIl0uam9pbigiIikpOm49bi5yZXBsYWNlKGwsW2QsIlsiLHUsIl0iXS5qb2luKCIiKSk6ImdlbmVyaWMiPT09cltjXT8oaS5wdXNoKFsidmFyICIsZiwiPSIsZCwiLmdldCgiLHUsIikiXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxmKSxzLmx2YWx1ZSYmYS5wdXNoKFtkLCIuc2V0KCIsdSwiLCIsZiwiKSJdLmpvaW4oIiIpKSk6KGkucHVzaChbInZhciAiLGYsIj0iLGQsIlsiLHUsIl0iXS5qb2luKCIiKSksbj1uLnJlcGxhY2UobCxmKSxzLmx2YWx1ZSYmYS5wdXNoKFtkLCJbIix1LCJdPSIsZl0uam9pbigiIikpKTtlbHNle2Zvcih2YXIgcD1bcy5uYW1lXSxtPVt1XSx2PTA7djxNYXRoLmFicyhlLmFycmF5QmxvY2tJbmRpY2VzW2NdKTt2KyspcC5wdXNoKCJcXHMqXFxbKFteXFxdXSspXFxdIiksbS5wdXNoKCIkIisodisxKSsiKnQiK2MrImIiK3YpO2lmKGw9bmV3IFJlZ0V4cChwLmpvaW4oIiIpLCJnIiksdT1tLmpvaW4oIisiKSwiZ2VuZXJpYyI9PT1yW2NdKXRocm93IG5ldyBFcnJvcigiY3dpc2U6IEdlbmVyaWMgYXJyYXlzIG5vdCBzdXBwb3J0ZWQgaW4gY29tYmluYXRpb24gd2l0aCBibG9ja3MhIik7bj1uLnJlcGxhY2UobCxbZCwiWyIsdSwiXSJdLmpvaW4oIiIpKX1icmVhaztjYXNlInNjYWxhciI6bj1uLnJlcGxhY2UobCwiWSIrZS5zY2FsYXJBcmdzLmluZGV4T2YobykpO2JyZWFrO2Nhc2UiaW5kZXgiOm49bi5yZXBsYWNlKGwsImluZGV4Iik7YnJlYWs7Y2FzZSJzaGFwZSI6bj1uLnJlcGxhY2UobCwic2hhcGUiKX19fXJldHVybltpLmpvaW4oIlxuIiksbixhLmpvaW4oIlxuIildLmpvaW4oIlxuIikudHJpbSgpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0Lmxlbmd0aCkscj0hMCxuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl0sYT1pLm1hdGNoKC9cZCsvKTthPWE/YVswXToiIiwwPT09aS5jaGFyQXQoMCk/ZVtuXT0idSIraS5jaGFyQXQoMSkrYTplW25dPWkuY2hhckF0KDApK2Esbj4wJiYocj1yJiZlW25dPT09ZVtuLTFdKX1yZXR1cm4gcj9lWzBdOmUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1lWzFdLmxlbmd0aC1NYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKXwwLGw9bmV3IEFycmF5KHQuYXJyYXlBcmdzLmxlbmd0aCksYz1uZXcgQXJyYXkodC5hcnJheUFyZ3MubGVuZ3RoKSxoPTA7aDx0LmFycmF5QXJncy5sZW5ndGg7KytoKWNbaF09ZVsyKmhdLGxbaF09ZVsyKmgrMV07Zm9yKHZhciBmPVtdLGQ9W10scD1bXSxtPVtdLHY9W10saD0wO2g8dC5hcnJheUFyZ3MubGVuZ3RoOysraCl7dC5hcnJheUJsb2NrSW5kaWNlc1toXTwwPyhwLnB1c2goMCksbS5wdXNoKHIpLGYucHVzaChyKSxkLnB1c2gocit0LmFycmF5QmxvY2tJbmRpY2VzW2hdKSk6KHAucHVzaCh0LmFycmF5QmxvY2tJbmRpY2VzW2hdKSxtLnB1c2godC5hcnJheUJsb2NrSW5kaWNlc1toXStyKSxmLnB1c2goMCksZC5wdXNoKHQuYXJyYXlCbG9ja0luZGljZXNbaF0pKTtmb3IodmFyIGc9W10seT0wO3k8bFtoXS5sZW5ndGg7eSsrKXBbaF08PWxbaF1beV0mJmxbaF1beV08bVtoXSYmZy5wdXNoKGxbaF1beV0tcFtoXSk7di5wdXNoKGcpfWZvcih2YXIgYj1bIlNTIl0seD1bIid1c2Ugc3RyaWN0JyJdLF89W10seT0wO3k8cjsrK3kpXy5wdXNoKFsicyIseSwiPVNTWyIseSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIGg9MDtoPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2gpe2IucHVzaCgiYSIraCksYi5wdXNoKCJ0IitoKSxiLnB1c2goInAiK2gpO2Zvcih2YXIgeT0wO3k8cjsrK3kpXy5wdXNoKFsidCIsaCwicCIseSwiPXQiLGgsIlsiLHBbaF0reSwiXSJdLmpvaW4oIiIpKTtmb3IodmFyIHk9MDt5PE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbaF0pOysreSlfLnB1c2goWyJ0IixoLCJiIix5LCI9dCIsaCwiWyIsZltoXSt5LCJdIl0uam9pbigiIikpfWZvcih2YXIgaD0wO2g8dC5zY2FsYXJBcmdzLmxlbmd0aDsrK2gpYi5wdXNoKCJZIitoKTtpZih0LnNoYXBlQXJncy5sZW5ndGg+MCYmXy5wdXNoKCJzaGFwZT1TUy5zbGljZSgwKSIpLHQuaW5kZXhBcmdzLmxlbmd0aD4wKXtmb3IodmFyIHc9bmV3IEFycmF5KHIpLGg9MDtoPHI7KytoKXdbaF09IjAiO18ucHVzaChbImluZGV4PVsiLHcuam9pbigiLCIpLCJdIl0uam9pbigiIikpfWZvcih2YXIgaD0wO2g8dC5vZmZzZXRBcmdzLmxlbmd0aDsrK2gpe2Zvcih2YXIgTT10Lm9mZnNldEFyZ3NbaF0saz1bXSx5PTA7eTxNLm9mZnNldC5sZW5ndGg7Kyt5KTAhPT1NLm9mZnNldFt5XSYmKDE9PT1NLm9mZnNldFt5XT9rLnB1c2goWyJ0IixNLmFycmF5LCJwIix5XS5qb2luKCIiKSk6ay5wdXNoKFtNLm9mZnNldFt5XSwiKnQiLE0uYXJyYXksInAiLHldLmpvaW4oIiIpKSk7MD09PWsubGVuZ3RoP18ucHVzaCgicSIraCsiPTAiKTpfLnB1c2goWyJxIixoLCI9IixrLmpvaW4oIisiKV0uam9pbigiIikpfXZhciBBPXUoW10uY29uY2F0KHQucHJlLnRoaXNWYXJzKS5jb25jYXQodC5ib2R5LnRoaXNWYXJzKS5jb25jYXQodC5wb3N0LnRoaXNWYXJzKSk7Xz1fLmNvbmNhdChBKSxfLmxlbmd0aD4wJiZ4LnB1c2goInZhciAiK18uam9pbigiLCIpKTtmb3IodmFyIGg9MDtoPHQuYXJyYXlBcmdzLmxlbmd0aDsrK2gpeC5wdXNoKCJwIitoKyJ8PTAiKTt0LnByZS5ib2R5Lmxlbmd0aD4zJiZ4LnB1c2gobyh0LnByZSx0LGMpKTt2YXIgVD1vKHQuYm9keSx0LGMpLFM9YSh2KTtTPHI/eC5wdXNoKGkoUyx2WzBdLHQsVCkpOngucHVzaChuKHZbMF0sdCxUKSksdC5wb3N0LmJvZHkubGVuZ3RoPjMmJngucHVzaChvKHQucG9zdCx0LGMpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgY3dpc2Ugcm91dGluZSBmb3IgIixlLCI6XG4iK3guam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIik7dmFyIEU9W3QuZnVuY05hbWV8fCJ1bm5hbWVkIiwiX2N3aXNlX2xvb3BfIixsWzBdLmpvaW4oInMiKSwibSIsUyxzKGMpXS5qb2luKCIiKTtyZXR1cm4gbmV3IEZ1bmN0aW9uKFsiZnVuY3Rpb24gIixFLCIoIixiLmpvaW4oIiwiKSwiKXsiLHguam9pbigiXG4iKSwifSByZXR1cm4gIixFXS5qb2luKCIiKSkoKX12YXIgdT10KCJ1bmlxIik7ZS5leHBvcnRzPWx9LHt1bmlxOjU0MX1dLDExMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPVsiJ3VzZSBzdHJpY3QnIiwidmFyIENBQ0hFRD17fSJdLHI9W10sbj10LmZ1bmNOYW1lKyJfY3dpc2VfdGh1bmsiO2UucHVzaChbInJldHVybiBmdW5jdGlvbiAiLG4sIigiLHQuc2hpbUFyZ3Muam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGE9W10sbz1bXSxzPVtbImFycmF5Iix0LmFycmF5QXJnc1swXSwiLnNoYXBlLnNsaWNlKCIsTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSx0LmFycmF5QmxvY2tJbmRpY2VzWzBdPDA/IiwiK3QuYXJyYXlCbG9ja0luZGljZXNbMF0rIikiOiIpIl0uam9pbigiIildLGw9W10sdT1bXSxjPTA7Yzx0LmFycmF5QXJncy5sZW5ndGg7KytjKXt2YXIgaD10LmFycmF5QXJnc1tjXTtyLnB1c2goWyJ0IixoLCI9YXJyYXkiLGgsIi5kdHlwZSwiLCJyIixoLCI9YXJyYXkiLGgsIi5vcmRlciJdLmpvaW4oIiIpKSxhLnB1c2goInQiK2gpLGEucHVzaCgiciIraCksby5wdXNoKCJ0IitoKSxvLnB1c2goInIiK2grIi5qb2luKCkiKSxzLnB1c2goImFycmF5IitoKyIuZGF0YSIpLHMucHVzaCgiYXJyYXkiK2grIi5zdHJpZGUiKSxzLnB1c2goImFycmF5IitoKyIub2Zmc2V0fDAiKSxjPjAmJihsLnB1c2goImFycmF5Iit0LmFycmF5QXJnc1swXSsiLnNoYXBlLmxlbmd0aD09PWFycmF5IitoKyIuc2hhcGUubGVuZ3RoKyIrKE1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbMF0pLU1hdGguYWJzKHQuYXJyYXlCbG9ja0luZGljZXNbY10pKSksdS5wdXNoKCJhcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZVtzaGFwZUluZGV4KyIrTWF0aC5tYXgoMCx0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiXT09PWFycmF5IitoKyIuc2hhcGVbc2hhcGVJbmRleCsiK01hdGgubWF4KDAsdC5hcnJheUJsb2NrSW5kaWNlc1tjXSkrIl0iKSl9dC5hcnJheUFyZ3MubGVuZ3RoPjEmJihlLnB1c2goImlmICghKCIrbC5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uYWxpdHkhJykiKSxlLnB1c2goImZvcih2YXIgc2hhcGVJbmRleD1hcnJheSIrdC5hcnJheUFyZ3NbMF0rIi5zaGFwZS5sZW5ndGgtIitNYXRoLmFicyh0LmFycmF5QmxvY2tJbmRpY2VzWzBdKSsiOyBzaGFwZUluZGV4LS1ceDNlMDspIHsiKSxlLnB1c2goImlmICghKCIrdS5qb2luKCIgJiYgIikrIikpIHRocm93IG5ldyBFcnJvcignY3dpc2U6IEFycmF5cyBkbyBub3QgYWxsIGhhdmUgdGhlIHNhbWUgc2hhcGUhJykiKSxlLnB1c2goIn0iKSk7Zm9yKHZhciBjPTA7Yzx0LnNjYWxhckFyZ3MubGVuZ3RoOysrYylzLnB1c2goInNjYWxhciIrdC5zY2FsYXJBcmdzW2NdKTtyZXR1cm4gci5wdXNoKFsidHlwZT1bIixvLmpvaW4oIiwiKSwiXS5qb2luKCkiXS5qb2luKCIiKSksci5wdXNoKCJwcm9jPUNBQ0hFRFt0eXBlXSIpLGUucHVzaCgidmFyICIrci5qb2luKCIsIikpLGUucHVzaChbImlmKCFwcm9jKXsiLCJDQUNIRURbdHlwZV09cHJvYz1jb21waWxlKFsiLGEuam9pbigiLCIpLCJdKX0iLCJyZXR1cm4gcHJvYygiLHMuam9pbigiLCIpLCIpfSJdLmpvaW4oIiIpKSx0LmRlYnVnJiZjb25zb2xlLmxvZygiLS0tLS1HZW5lcmF0ZWQgdGh1bms6XG4iK2Uuam9pbigiXG4iKSsiXG4tLS0tLS0tLS0tIiksbmV3IEZ1bmN0aW9uKCJjb21waWxlIixlLmpvaW4oIlxuIikpKGkuYmluZCh2b2lkIDAsdCkpfXZhciBpPXQoIi4vY29tcGlsZS5qcyIpO2UuZXhwb3J0cz1ufSx7Ii4vY29tcGlsZS5qcyI6MTA5fV0sMTExOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImN3aXNlLWNvbXBpbGVyIil9LHsiY3dpc2UtY29tcGlsZXIiOjEwOH1dLDExMjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIG8odChlKSxyKX19ZnVuY3Rpb24gcih0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj1rPzEwOmE+PUE/NTphPj1UPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49az8xMDphPj1BPzU6YT49VD8yOjEpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PWs/aSo9MTA6YT49QT9pKj01OmE+PVQmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiBhKHQpe3JldHVybiB0Lmxlbmd0aH12YXIgbz1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0scz1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodD1lKHQpKSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19LGw9cyhvKSx1PWwucmlnaHQsYz1sLmxlZnQsaD1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPXIpO2Zvcih2YXIgbj0wLGk9dC5sZW5ndGgtMSxhPXRbMF0sbz1uZXcgQXJyYXkoaTwwPzA6aSk7bjxpOylvW25dPWUoYSxhPXRbKytuXSk7cmV0dXJuIG99LGY9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGw9dC5sZW5ndGgsdT1lLmxlbmd0aCxjPW5ldyBBcnJheShsKnUpO2ZvcihudWxsPT1uJiYobj1yKSxpPW89MDtpPGw7KytpKWZvcihzPXRbaV0sYT0wO2E8dTsrK2EsKytvKWNbb109bihzLGVbYV0pO3JldHVybiBjfSxkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfSxwPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9LG09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgsYT0wLG89LTEscz0wLGw9MDtpZihudWxsPT1lKWZvcig7KytvPGk7KWlzTmFOKHI9cCh0W29dKSl8fChuPXItcyxzKz1uLysrYSxsKz1uKihyLXMpKTtlbHNlIGZvcig7KytvPGk7KWlzTmFOKHI9cChlKHRbb10sbyx0KSkpfHwobj1yLXMscys9bi8rK2EsbCs9biooci1zKSk7aWYoYT4xKXJldHVybiBsLyhhLTEpfSx2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bSh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfSxnPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5sZW5ndGgsbz0tMTtpZihudWxsPT1lKXtmb3IoOysrbzxhOylpZihudWxsIT0ocj10W29dKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPXRbb10pJiYobj5yJiYobj1yKSxpPHImJihpPXIpKX1lbHNlIGZvcig7KytvPGE7KWlmKG51bGwhPShyPWUodFtvXSxvLHQpKSYmcj49cilmb3Iobj1pPXI7KytvPGE7KW51bGwhPShyPWUodFtvXSxvLHQpKSYmKG4+ciYmKG49ciksaTxyJiYoaT1yKSk7cmV0dXJuW24saV19LHk9QXJyYXkucHJvdG90eXBlLGI9eS5zbGljZSx4PXkubWFwLF89ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSx3PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxNPWZ1bmN0aW9uKHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfSxrPU1hdGguc3FydCg1MCksQT1NYXRoLnNxcnQoMTApLFQ9TWF0aC5zcXJ0KDIpLFM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPWU8dCxsPS0xO2lmKHMmJihpPXQsdD1lLGU9aSksMD09PShvPW4odCxlLHIpKXx8IWlzRmluaXRlKG8pKXJldHVybltdO2lmKG8+MClmb3IodD1NYXRoLmNlaWwodC9vKSxlPU1hdGguZmxvb3IoZS9vKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbChlLXQrMSkpOysrbDxpOylhW2xdPSh0K2wpKm87ZWxzZSBmb3IodD1NYXRoLmZsb29yKHQqbyksZT1NYXRoLmNlaWwoZSpvKSxhPW5ldyBBcnJheShpPU1hdGguY2VpbCh0LWUrMSkpOysrbDxpOylhW2xdPSh0LWwpL287cmV0dXJuIHMmJmEucmV2ZXJzZSgpLGF9LEU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBhLG8scz10Lmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3IoYT0wO2E8czsrK2EpbFthXT1lKHRbYV0sYSx0KTt2YXIgYz1yKGwpLGg9Y1swXSxmPWNbMV0sZD1uKGwsaCxmKTtBcnJheS5pc0FycmF5KGQpfHwoZD1pKGgsZixkKSxkPU0oTWF0aC5jZWlsKGgvZCkqZCxNYXRoLmZsb29yKGYvZCkqZCxkKSk7Zm9yKHZhciBwPWQubGVuZ3RoO2RbMF08PWg7KWQuc2hpZnQoKSwtLXA7Zm9yKDtkW3AtMV0+ZjspZC5wb3AoKSwtLXA7dmFyIG0sdj1uZXcgQXJyYXkocCsxKTtmb3IoYT0wO2E8PXA7KythKW09dlthXT1bXSxtLngwPWE+MD9kW2EtMV06aCxtLngxPWE8cD9kW2FdOmY7Zm9yKGE9MDthPHM7KythKW89bFthXSxoPD1vJiZvPD1mJiZ2W3UoZCxvLDAscCldLnB1c2godFthXSk7cmV0dXJuIHZ9dmFyIGU9dyxyPWcsbj1FO3JldHVybiB0LnZhbHVlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6XyhyKSx0KTplfSx0LmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOl8oW2VbMF0sZVsxXV0pLHQpOnJ9LHQudGhyZXNob2xkcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOl8oQXJyYXkuaXNBcnJheShlKT9iLmNhbGwoZSk6ZSksdCk6bn0sdH0sQz1mdW5jdGlvbih0LGUscil7aWYobnVsbD09ciYmKHI9cCksbj10Lmxlbmd0aCl7aWYoKGU9K2UpPD0wfHxuPDIpcmV0dXJuK3IodFswXSwwLHQpO2lmKGU+PTEpcmV0dXJuK3IodFtuLTFdLG4tMSx0KTt2YXIgbixpPShuLTEpKmUsYT1NYXRoLmZsb29yKGkpLG89K3IodFthXSxhLHQpO3JldHVybiBvKygrcih0W2ErMV0sYSsxLHQpLW8pKihpLWEpfX0sej1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9eC5jYWxsKHQscCkuc29ydChvKSxNYXRoLmNlaWwoKHItZSkvKDIqKEModCwuNzUpLUModCwuMjUpKSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSxJPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLWUpLygzLjUqdih0KSpNYXRoLnBvdyh0Lmxlbmd0aCwtMS8zKSkpfSxEPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSxQPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPW4sYT0tMSxvPTA7aWYobnVsbD09ZSlmb3IoOysrYTxuOylpc05hTihyPXAodFthXSkpPy0taTpvKz1yO2Vsc2UgZm9yKDsrK2E8bjspaXNOYU4ocj1wKGUodFthXSxhLHQpKSk/LS1pOm8rPXI7aWYoaSlyZXR1cm4gby9pfSxPPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aCxpPS0xLGE9W107aWYobnVsbD09ZSlmb3IoOysraTxuOylpc05hTihyPXAodFtpXSkpfHxhLnB1c2gocik7ZWxzZSBmb3IoOysraTxuOylpc05hTihyPXAoZSh0W2ldLGksdCkpKXx8YS5wdXNoKHIpO3JldHVybiBDKGEuc29ydChvKSwuNSl9LFI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3Iobj10W2ldLGU9bi5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sRj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn0saj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sTj1mdW5jdGlvbih0LGUpe2lmKHI9dC5sZW5ndGgpe3ZhciByLG4saT0wLGE9MCxzPXRbYV07Zm9yKG51bGw9PWUmJihlPW8pOysraTxyOykoZShuPXRbaV0scyk8MHx8MCE9PWUocyxzKSkmJihzPW4sYT1pKTtyZXR1cm4gMD09PWUocyxzKT9hOnZvaWQgMH19LEI9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGE9KG51bGw9PXI/dC5sZW5ndGg6ciktKGU9bnVsbD09ZT8wOitlKTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sVT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sVj1mdW5jdGlvbih0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgZT0tMSxyPUYodCxhKSxuPW5ldyBBcnJheShyKTsrK2U8cjspZm9yKHZhciBpLG89LTEscz1uW2VdPW5ldyBBcnJheShpKTsrK288aTspc1tvXT10W29dW2VdO3JldHVybiBufSxIPWZ1bmN0aW9uKCl7cmV0dXJuIFYoYXJndW1lbnRzKX07dC5iaXNlY3Q9dSx0LmJpc2VjdFJpZ2h0PXUsdC5iaXNlY3RMZWZ0PWMsdC5hc2NlbmRpbmc9byx0LmJpc2VjdG9yPXMsdC5jcm9zcz1mLHQuZGVzY2VuZGluZz1kLHQuZGV2aWF0aW9uPXYsdC5leHRlbnQ9Zyx0Lmhpc3RvZ3JhbT1MLHQudGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcz16LHQudGhyZXNob2xkU2NvdHQ9SSx0LnRocmVzaG9sZFN0dXJnZXM9RSx0Lm1heD1ELHQubWVhbj1QLHQubWVkaWFuPU8sdC5tZXJnZT1SLHQubWluPUYsdC5wYWlycz1oLHQucGVybXV0ZT1qLHQucXVhbnRpbGU9Qyx0LnJhbmdlPU0sdC5zY2FuPU4sdC5zaHVmZmxlPUIsdC5zdW09VSx0LnRpY2tzPVMsdC50aWNrSW5jcmVtZW50PW4sdC50aWNrU3RlcD1pLHQudHJhbnNwb3NlPVYsdC52YXJpYW5jZT1tLHQuemlwPUgsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSwxMTM6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/aShuKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiXSxpKTppKGUuZDM9ZS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKCl7fWZ1bmN0aW9uIHIodCxyKXt2YXIgbj1uZXcgZTtpZih0IGluc3RhbmNlb2YgZSl0LmVhY2goZnVuY3Rpb24odCxlKXtuLnNldChlLHQpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBuKCl7cmV0dXJue319ZnVuY3Rpb24gaSh0LGUscil7dFtlXT1yfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpfWZ1bmN0aW9uIG8odCxlLHIpe3Quc2V0KGUscil9ZnVuY3Rpb24gcygpe31mdW5jdGlvbiBsKHQsZSl7dmFyIHI9bmV3IHM7aWYodCBpbnN0YW5jZW9mIHMpdC5lYWNoKGZ1bmN0aW9uKHQpe3IuYWRkKHQpfSk7ZWxzZSBpZih0KXt2YXIgbj0tMSxpPXQubGVuZ3RoO2lmKG51bGw9PWUpZm9yKDsrK248aTspci5hZGQodFtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLmFkZChlKHRbbl0sbix0KSl9cmV0dXJuIHJ9ZS5wcm90b3R5cGU9ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmUsaGFzOmZ1bmN0aW9uKHQpe3JldHVybiIkIit0IGluIHRoaXN9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrdF19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzWyIkIit0XT1lLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT0iJCIrdDtyZXR1cm4gZSBpbiB0aGlzJiZkZWxldGUgdGhpc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcykiJCI9PT10WzBdJiZkZWxldGUgdGhpc1t0XX0sa2V5czpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaChlLnNsaWNlKDEpKTtyZXR1cm4gdH0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHRoaXNbZV0pO3JldHVybiB0fSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKHtrZXk6ZS5zbGljZSgxKSx2YWx1ZTp0aGlzW2VdfSk7cmV0dXJuIHR9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJisrdDtyZXR1cm4gdH0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcylpZigiJCI9PT10WzBdKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQodGhpc1tlXSxlLnNsaWNlKDEpLHRoaXMpfX07dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUsbixpLGEpe2lmKG4+PWMubGVuZ3RoKXJldHVybiBudWxsIT1sP2woZSk6bnVsbCE9cz9lLnNvcnQocyk6ZTtmb3IodmFyIG8sdSxoLGY9LTEsZD1lLmxlbmd0aCxwPWNbbisrXSxtPXIoKSx2PWkoKTsrK2Y8ZDspKGg9bS5nZXQobz1wKHU9ZVtmXSkrIiIpKT9oLnB1c2godSk6bS5zZXQobyxbdV0pO3JldHVybiBtLmVhY2goZnVuY3Rpb24oZSxyKXthKHYscix0KGUsbixpLGEpKX0pLHZ9ZnVuY3Rpb24gZSh0LHIpe2lmKCsrcj5jLmxlbmd0aClyZXR1cm4gdDt2YXIgbixpPWhbci0xXTtyZXR1cm4gbnVsbCE9bCYmcj49Yy5sZW5ndGg/bj10LmVudHJpZXMoKToobj1bXSx0LmVhY2goZnVuY3Rpb24odCxpKXtuLnB1c2goe2tleTppLHZhbHVlczplKHQscil9KX0pKSxudWxsIT1pP24uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBpKHQua2V5LGUua2V5KX0pOm59dmFyIHMsbCx1LGM9W10saD1bXTtyZXR1cm4gdT17b2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiB0KGUsMCxuLGkpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSwwLGEsbyl9LGVudHJpZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGUodChyLDAsYSxvKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiBjLnB1c2godCksdX0sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGhbYy5sZW5ndGgtMV09dCx1fSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBzPXQsdX0scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBsPXQsdX19fSxjPXIucHJvdG90eXBlO3MucHJvdG90eXBlPWwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGhhczpjLmhhcyxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQrPSIiLHRoaXNbIiQiK3RdPXQsdGhpc30scmVtb3ZlOmMucmVtb3ZlLGNsZWFyOmMuY2xlYXIsdmFsdWVzOmMua2V5cyxzaXplOmMuc2l6ZSxlbXB0eTpjLmVtcHR5LGVhY2g6Yy5lYWNofTt2YXIgaD1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LGY9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSxkPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfTt0Lm5lc3Q9dSx0LnNldD1sLHQubWFwPXIsdC5rZXlzPWgsdC52YWx1ZXM9Zix0LmVudHJpZXM9ZCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNDpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBuKHQpe3ZhciBlO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT16LmV4ZWModCkpPyhlPXBhcnNlSW50KGVbMV0sMTYpLG5ldyBsKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKSk6KGU9SS5leGVjKHQpKT9pKHBhcnNlSW50KGVbMV0sMTYpKTooZT1ELmV4ZWModCkpP25ldyBsKGVbMV0sZVsyXSxlWzNdLDEpOihlPVAuZXhlYyh0KSk/bmV3IGwoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9Ty5leGVjKHQpKT9hKGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPVIuZXhlYyh0KSk/YSgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1GLmV4ZWModCkpP3UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1qLmV4ZWModCkpP3UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpOLmhhc093blByb3BlcnR5KHQpP2koTlt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IGwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgbCh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IGwodCxlLHIsbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHJ8fCh0PW4odCkpLHQ/KHQ9dC5yZ2IoKSxuZXcgbCh0LnIsdC5nLHQuYix0Lm9wYWNpdHkpKTpuZXcgbH1mdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9vKHQpOm5ldyBsKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBsKHQsZSxyLG4pe3RoaXMucj0rdCx0aGlzLmc9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiBuPD0wP3Q9ZT1yPU5hTjpyPD0wfHxyPj0xP3Q9ZT1OYU46ZTw9MCYmKHQ9TmFOKSxuZXcgZih0LGUscixuKX1mdW5jdGlvbiBjKHQpe2lmKHQgaW5zdGFuY2VvZiBmKXJldHVybiBuZXcgZih0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiByfHwodD1uKHQpKSwhdClyZXR1cm4gbmV3IGY7aWYodCBpbnN0YW5jZW9mIGYpcmV0dXJuIHQ7dD10LnJnYigpO3ZhciBlPXQuci8yNTUsaT10LmcvMjU1LGE9dC5iLzI1NSxvPU1hdGgubWluKGUsaSxhKSxzPU1hdGgubWF4KGUsaSxhKSxsPU5hTix1PXMtbyxjPShzK28pLzI7cmV0dXJuIHU/KGw9ZT09PXM/KGktYSkvdSs2KihpPGEpOmk9PT1zPyhhLWUpL3UrMjooZS1pKS91KzQsdS89YzwuNT9zK286Mi1zLW8sbCo9NjApOnU9Yz4wJiZjPDE/MDpsLG5ldyBmKGwsdSxjLHQub3BhY2l0eSl9ZnVuY3Rpb24gaCh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Yyh0KTpuZXcgZih0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gZih0LGUscixuKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZCh0LGUscil7cmV0dXJuIDI1NSoodDw2MD9lKyhyLWUpKnQvNjA6dDwxODA/cjp0PDI0MD9lKyhyLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gcCh0KXtpZih0IGluc3RhbmNlb2YgdilyZXR1cm4gbmV3IHYodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgTSl7dmFyIGU9dC5oKkI7cmV0dXJuIG5ldyB2KHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9dCBpbnN0YW5jZW9mIGx8fCh0PW8odCkpO3ZhciByPXgodC5yKSxuPXgodC5nKSxpPXgodC5iKSxhPWcoKC40MTI0NTY0KnIrLjM1NzU3NjEqbisuMTgwNDM3NSppKS9WKSxzPWcoKC4yMTI2NzI5KnIrLjcxNTE1MjIqbisuMDcyMTc1KmkpL0gpO3JldHVybiBuZXcgdigxMTYqcy0xNiw1MDAqKGEtcyksMjAwKihzLWcoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL3EpKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIG0odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3AodCk6bmV3IHYodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHYodCxlLHIsbil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQ+Vz9NYXRoLnBvdyh0LDEvMyk6dC9YK0d9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdD5ZP3QqdCp0OlgqKHQtRyl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gMjU1Kih0PD0uMDAzMTMwOD8xMi45Mip0OjEuMDU1Kk1hdGgucG93KHQsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIHgodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gXyh0KXtpZih0IGluc3RhbmNlb2YgTSlyZXR1cm4gbmV3IE0odC5oLHQuYyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Ygdnx8KHQ9cCh0KSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpVO3JldHVybiBuZXcgTShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiB3KHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9fKHQpOm5ldyBNKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBNKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBrKHQpe2lmKHQgaW5zdGFuY2VvZiBUKXJldHVybiBuZXcgVCh0LmgsdC5zLHQubCx0Lm9wYWNpdHkpO3QgaW5zdGFuY2VvZiBsfHwodD1vKHQpKTt2YXIgZT10LnIvMjU1LHI9dC5nLzI1NSxuPXQuYi8yNTUsaT0ocnQqbit0dCplLWV0KnIpLyhydCt0dC1ldCksYT1uLWkscz0oJCooci1pKS1LKmEpL1EsdT1NYXRoLnNxcnQocypzK2EqYSkvKCQqaSooMS1pKSksYz11P01hdGguYXRhbjIocyxhKSpVLTEyMDpOYU47cmV0dXJuIG5ldyBUKGM8MD9jKzM2MDpjLHUsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEEodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2sodCk6bmV3IFQodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIFQodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufXZhciBTPWZ1bmN0aW9uKHQsZSxyKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9dH0sRT0iXFxzKihbKy1dP1xcZCspXFxzKiIsTD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIix6PS9eIyhbMC05YS1mXXszfSkkLyxJPS9eIyhbMC05YS1mXXs2fSkkLyxEPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tFLEUsRV0rIlxcKSQiKSxQPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tDLEMsQ10rIlxcKSQiKSxPPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbRSxFLEUsTF0rIlxcKSQiKSxSPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQyxDLEMsTF0rIlxcKSQiKSxGPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tMLEMsQ10rIlxcKSQiKSxqPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbTCxDLEMsTF0rIlxcKSQiKSxOPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O1MocixuLHtkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9fSksUyhsLHMsZShyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgbCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgbCh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gMDw9dGhpcy5yJiZ0aGlzLnI8PTI1NSYmMDw9dGhpcy5nJiZ0aGlzLmc8PTI1NSYmMDw9dGhpcy5iJiZ0aGlzLmI8PTI1NSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybiB0PWlzTmFOKHQpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLHQpKSwoMT09PXQ/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PXQ/IikiOiIsICIrdCsiKSIpfX0pKSxTKGYsaCxlKHIse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IGYodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyBsKGQodD49MjQwP3QtMjQwOnQrMTIwLGksbiksZCh0LGksbiksZCh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfX0pKTt2YXIgQj1NYXRoLlBJLzE4MCxVPTE4MC9NYXRoLlBJLFY9Ljk1MDQ3LEg9MSxxPTEuMDg4ODMsRz00LzI5LFk9Ni8yOSxYPTMqWSpZLFc9WSpZKlk7Uyh2LG0sZShyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHYodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2KHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubCsxNikvMTE2LGU9aXNOYU4odGhpcy5hKT90OnQrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/dDp0LXRoaXMuYi8yMDA7cmV0dXJuIHQ9SCp5KHQpLGU9Vip5KGUpLHI9cSp5KHIpLG5ldyBsKGIoMy4yNDA0NTQyKmUtMS41MzcxMzg1KnQtLjQ5ODUzMTQqciksYigtLjk2OTI2NiplKzEuODc2MDEwOCp0Ky4wNDE1NTYqciksYiguMDU1NjQzNCplLS4yMDQwMjU5KnQrMS4wNTcyMjUyKnIpLHRoaXMub3BhY2l0eSl9fSkpLFMoTSx3LGUocix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBNKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLnJnYigpfX0pKTt2YXIgWj0tLjE0ODYxLEo9MS43ODI3NyxLPS0uMjkyMjcsUT0tLjkwNjQ5LCQ9MS45NzI5NCx0dD0kKlEsZXQ9JCpKLHJ0PUoqSy1RKlo7UyhULEEsZShyLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgVCh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBUKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpCLGU9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqZSooMS1lKSxuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIG5ldyBsKDI1NSooZStyKihaKm4rSippKSksMjU1KihlK3IqKEsqbitRKmkpKSwyNTUqKGUrciooJCpuKSksdGhpcy5vcGFjaXR5KX19KSksdC5jb2xvcj1uLHQucmdiPXMsdC5oc2w9aCx0LmxhYj1tLHQuaGNsPXcsdC5jdWJlaGVsaXg9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNTpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS5kMz1lLmQzfHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxpPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIGkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrdCk7aVt0XT1bXX1yZXR1cm4gbmV3IHIoaSl9ZnVuY3Rpb24gcih0KXt0aGlzLl89dH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO2lmKG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbilpZih0W25dLm5hbWU9PT1lKXt0W25dPW8sdD10LnNsaWNlKDAsbikuY29uY2F0KHQuc2xpY2UobisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPXImJnQucHVzaCh7bmFtZTplLHZhbHVlOnJ9KSx0fXZhciBvPXt2YWx1ZTpmdW5jdGlvbigpe319O3IucHJvdG90eXBlPWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbz10aGlzLl8scz1uKHQrIiIsbyksbD0tMSx1PXMubGVuZ3RoO3tpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrbDx1OylpZihyPSh0PXNbbF0pLnR5cGUpb1tyXT1hKG9bcl0sdC5uYW1lLGUpO2Vsc2UgaWYobnVsbD09ZSlmb3IociBpbiBvKW9bcl09YShvW3JdLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrbDx1OylpZigocj0odD1zW2xdKS50eXBlKSYmKHI9aShvW3JdLHQubmFtZSkpKXJldHVybiByfX0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fCjtmb3IodmFyIG4gaW4gZSl0W25dPWVbbl0uc2xpY2UoKTtyZXR1cm4gbmV3IHIodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihuPXRoaXMuX1t0XSxhPTAscj1uLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX19LHQuZGlzcGF0Y2g9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0se31dLDExNjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihpLGEpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9hKG4sZSgiZDMtcXVhZHRyZWUiKSxlKCJkMy1jb2xsZWN0aW9uIiksZSgiZDMtZGlzcGF0Y2giKSxlKCJkMy10aW1lciIpKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiLCJkMy1xdWFkdHJlZSIsImQzLWNvbGxlY3Rpb24iLCJkMy1kaXNwYXRjaCIsImQzLXRpbWVyIl0sYSk6YShpLmQzPWkuZDN8fHt9LGkuZDMsaS5kMyxpLmQzLGkuZDMpfSh0aGlzLGZ1bmN0aW9uKHQsZSxyLG4saSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIHModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB1KHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC55fXZhciBoPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3ZhciByLGksYT1uLmxlbmd0aCxvPTAscz0wO2ZvcihyPTA7cjxhOysrcilpPW5bcl0sbys9aS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLHI9MDtyPGE7KytyKWk9bltyXSxpLngtPW8saS55LT1zfXZhciBuO3JldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LGY9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkPWZ1bmN0aW9uKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtmdW5jdGlvbiB0KHQsZSxyLG4saSl7dmFyIGE9dC5kYXRhLG89dC5yLHM9bStvO3tpZighYSlyZXR1cm4gZT5mK3N8fG48Zi1zfHxyPnArc3x8aTxwLXM7aWYoYS5pbmRleD5oLmluZGV4KXt2YXIgbD1mLWEueC1hLnZ4LGM9cC1hLnktYS52eSxnPWwqbCtjKmM7ZzxzKnMmJigwPT09bCYmKGw9ZCgpLGcrPWwqbCksMD09PWMmJihjPWQoKSxnKz1jKmMpLGc9KHMtKGc9TWF0aC5zcXJ0KGcpKSkvZyp1LGgudngrPShsKj1nKSoocz0obyo9bykvKHYrbykpLGgudnkrPShjKj1nKSpzLGEudngtPWwqKHM9MS1zKSxhLnZ5LT1jKnMpfX19Zm9yKHZhciByLGksaCxmLHAsbSx2LGc9cy5sZW5ndGgseT0wO3k8YzsrK3kpZm9yKGk9ZS5xdWFkdHJlZShzLGEsbykudmlzaXRBZnRlcihuKSxyPTA7cjxnOysrciloPXNbcl0sbT1sW2guaW5kZXhdLHY9bSptLGY9aC54K2gudngscD1oLnkraC52eSxpLnZpc2l0KHQpfWZ1bmN0aW9uIG4odCl7aWYodC5kYXRhKXJldHVybiB0LnI9bFt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBpKCl7aWYocyl7dmFyIGUscixuPXMubGVuZ3RoO2ZvcihsPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXNbZV0sbFtyLmluZGV4XT0rdChyLGUscyl9fXZhciBzLGwsdT0xLGM9MTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZihudWxsPT10PzE6K3QpKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cz10LGkoKX0sci5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LHIpOmN9LHIuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qscik6dX0sci5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmKCtlKSxpKCkscik6dH0scn0sbT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiAxL01hdGgubWluKHBbdC5zb3VyY2UuaW5kZXhdLHBbdC50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBuKGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxiOysrcilmb3IodmFyIGksYSxvLHMsbCxoLGYscD0wO3A8bjsrK3ApaT10W3BdLGE9aS5zb3VyY2Usbz1pLnRhcmdldCxzPW8ueCtvLnZ4LWEueC1hLnZ4fHxkKCksbD1vLnkrby52eS1hLnktYS52eXx8ZCgpLGg9TWF0aC5zcXJ0KHMqcytsKmwpLGg9KGgtY1twXSkvaCplKnVbcF0scyo9aCxsKj1oLG8udngtPXMqKGY9bVtwXSksby52eS09bCpmLGEudngrPXMqKGY9MS1mKSxhLnZ5Kz1sKmZ9ZnVuY3Rpb24gaSgpe2lmKGgpe3ZhciBlLG4saT1oLmxlbmd0aCxzPXQubGVuZ3RoLGY9ci5tYXAoaCx2KTtmb3IoZT0wLHA9bmV3IEFycmF5KGkpO2U8czsrK2Upbj10W2VdLG4uaW5kZXg9ZSwib2JqZWN0IiE9dHlwZW9mIG4uc291cmNlJiYobi5zb3VyY2U9bChmLG4uc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBuLnRhcmdldCYmKG4udGFyZ2V0PWwoZixuLnRhcmdldCkpLHBbbi5zb3VyY2UuaW5kZXhdPShwW24uc291cmNlLmluZGV4XXx8MCkrMSxwW24udGFyZ2V0LmluZGV4XT0ocFtuLnRhcmdldC5pbmRleF18fDApKzE7Zm9yKGU9MCxtPW5ldyBBcnJheShzKTtlPHM7KytlKW49dFtlXSxtW2VdPXBbbi5zb3VyY2UuaW5kZXhdLyhwW24uc291cmNlLmluZGV4XStwW24udGFyZ2V0LmluZGV4XSk7dT1uZXcgQXJyYXkocyksYSgpLGM9bmV3IEFycmF5KHMpLG8oKX19ZnVuY3Rpb24gYSgpe2lmKGgpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXVbZV09K2codFtlXSxlLHQpfWZ1bmN0aW9uIG8oKXtpZihoKWZvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSljW2VdPSt5KHRbZV0sZSx0KX12YXIgdSxjLGgscCxtLHY9cyxnPWUseT1mKDMwKSxiPTE7cmV0dXJuIG51bGw9PXQmJih0PVtdKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7aD10LGkoKX0sbi5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkoKSxuKTp0fSxuLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQsbik6dn0sbi5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LG4pOmJ9LG4uc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmKCt0KSxhKCksbik6Z30sbi5kaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmYoK3QpLG8oKSxuKTp5fSxufSx2PTEwLGc9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpLHk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe2EoKSx5LmNhbGwoInRpY2siLGwpLHU8YyYmKG0uc3RvcCgpLHkuY2FsbCgiZW5kIixsKSl9ZnVuY3Rpb24gYSgpe3ZhciBlLHIsbj10Lmxlbmd0aDtmb3IodSs9KGYtdSkqaCxwLmVhY2goZnVuY3Rpb24odCl7dCh1KX0pLGU9MDtlPG47KytlKXI9dFtlXSxudWxsPT1yLmZ4P3IueCs9ci52eCo9ZDooci54PXIuZngsci52eD0wKSxudWxsPT1yLmZ5P3IueSs9ci52eSo9ZDooci55PXIuZnksci52eT0wKX1mdW5jdGlvbiBvKCl7Zm9yKHZhciBlLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3Ipe2lmKGU9dFtyXSxlLmluZGV4PXIsaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9dipNYXRoLnNxcnQociksYT1yKmc7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9dmFyIGwsdT0xLGM9LjAwMSxoPTEtTWF0aC5wb3coYywxLzMwMCksZj0wLGQ9LjYscD1yLm1hcCgpLG09aS50aW1lcihlKSx5PW4uZGlzcGF0Y2goInRpY2siLCJlbmQiKTtyZXR1cm4gbnVsbD09dCYmKHQ9W10pLG8oKSxsPXt0aWNrOmEscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBtLnJlc3RhcnQoZSksbH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBtLnN0b3AoKSxsfSxub2RlczpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8oKSxwLmVhY2gocyksbCk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3QsbCk6dX0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCk6Y30sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxsKToraH0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3QsbCk6Zn0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0xLXQsbCk6MS1kfSxmb3JjZTpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PWU/cC5yZW1vdmUodCk6cC5zZXQodCxzKGUpKSxsKTpwLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLHIsbil7dmFyIGksYSxvLHMsbCx1PTAsYz10Lmxlbmd0aDtmb3IobnVsbD09bj9uPTEvMDpuKj1uLHU9MDt1PGM7Kyt1KXM9dFt1XSxpPWUtcy54LGE9ci1zLnksKG89aSppK2EqYSk8biYmKGw9cyxuPW8pO3JldHVybiBsfSxvbjpmdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHkub24odCxlKSxsKTp5Lm9uKHQpfX19LGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciByLGw9YS5sZW5ndGgsaD1lLnF1YWR0cmVlKGEsdSxjKS52aXNpdEFmdGVyKG4pO2ZvcihzPXQscj0wO3I8bDsrK3Ipbz1hW3JdLGgudmlzaXQoaSl9ZnVuY3Rpb24gcigpe2lmKGEpe3ZhciB0LGUscj1hLmxlbmd0aDtmb3IobD1uZXcgQXJyYXkociksdD0wO3Q8cjsrK3QpZT1hW3RdLGxbZS5pbmRleF09K2goZSx0LGEpfX1mdW5jdGlvbiBuKHQpe3ZhciBlLHIsbixpLGEsbz0wO2lmKHQubGVuZ3RoKXtmb3Iobj1pPWE9MDthPDQ7KythKShlPXRbYV0pJiYocj1lLnZhbHVlKSYmKG8rPXIsbis9ciplLngsaSs9ciplLnkpO3QueD1uL28sdC55PWkvb31lbHNle2U9dCxlLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve28rPWxbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1vfWZ1bmN0aW9uIGkodCxlLHIsbil7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGk9dC54LW8ueCxhPXQueS1vLnksdT1uLWUsYz1pKmkrYSphO2lmKHUqdS92PGMpcmV0dXJuIGM8bSYmKDA9PT1pJiYoaT1kKCksYys9aSppKSwwPT09YSYmKGE9ZCgpLGMrPWEqYSksYzxwJiYoYz1NYXRoLnNxcnQocCpjKSksby52eCs9aSp0LnZhbHVlKnMvYyxvLnZ5Kz1hKnQudmFsdWUqcy9jKSwhMDtpZighKHQubGVuZ3RofHxjPj1tKSl7KHQuZGF0YSE9PW98fHQubmV4dCkmJigwPT09aSYmKGk9ZCgpLGMrPWkqaSksMD09PWEmJihhPWQoKSxjKz1hKmEpLGM8cCYmKGM9TWF0aC5zcXJ0KHAqYykpKTtkb3t0LmRhdGEhPT1vJiYodT1sW3QuZGF0YS5pbmRleF0qcy9jLG8udngrPWkqdSxvLnZ5Kz1hKnUpfXdoaWxlKHQ9dC5uZXh0KX19dmFyIGEsbyxzLGwsaD1mKC0zMCkscD0xLG09MS8wLHY9LjgxO3JldHVybiB0LmluaXRpYWxpemU9ZnVuY3Rpb24odCl7YT10LHIoKX0sdC5zdHJlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmYoK2UpLHIoKSx0KTpofSx0LmRpc3RhbmNlTWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPWUqZSx0KTpNYXRoLnNxcnQocCl9LHQuZGlzdGFuY2VNYXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09ZSplLHQpOk1hdGguc3FydChtKX0sdC50aGV0YT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj1lKmUsdCk6TWF0aC5zcXJ0KHYpfSx0fSx4PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlLHI9MCxvPW4ubGVuZ3RoO3I8bzsrK3IpZT1uW3JdLGUudngrPShhW3JdLWUueCkqaVtyXSp0fWZ1bmN0aW9uIHIoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlpW2VdPWlzTmFOKGFbZV09K3QobltlXSxlLG4pKT8wOitvKG5bZV0sZSxuKX19dmFyIG4saSxhLG89ZiguMSk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWYobnVsbD09dD8wOit0KSksZS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe249dCxyKCl9LGUuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmKCt0KSxyKCksZSk6b30sZS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZigrbikscigpLGUpOnR9LGV9LF89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGUscj0wLG89bi5sZW5ndGg7cjxvOysrcillPW5bcl0sZS52eSs9KGFbcl0tZS55KSppW3JdKnR9ZnVuY3Rpb24gcigpe2lmKG4pe3ZhciBlLHI9bi5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLGU9MDtlPHI7KytlKWlbZV09aXNOYU4oYVtlXT0rdChuW2VdLGUsbikpPzA6K28obltlXSxlLG4pfX12YXIgbixpLGEsbz1mKC4xKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZihudWxsPT10PzA6K3QpKSxlLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10LHIoKX0sZS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmYoK3QpLHIoKSxlKTpvfSxlLnk9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmKCtuKSxyKCksZSk6dH0sZX07dC5mb3JjZUNlbnRlcj1oLHQuZm9yY2VDb2xsaWRlPXAsdC5mb3JjZUxpbms9bSx0LmZvcmNlTWFueUJvZHk9Yix0LmZvcmNlU2ltdWxhdGlvbj15LHQuZm9yY2VYPXgsdC5mb3JjZVk9XyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KX0seyJkMy1jb2xsZWN0aW9uIjoxMTMsImQzLWRpc3BhdGNoIjoxMTUsImQzLXF1YWR0cmVlIjoxMTgsImQzLXRpbWVyIjoxMTl9XSwxMTc6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oaSxhKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/YShuLGUoImQzLWNvbG9yIikpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyIsImQzLWNvbG9yIl0sYSk6YShpLmQzPWkuZDN8fHt9LGkuZDMpfSh0aGlzLGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCxlLHIsbixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpyKygxKzMqdCszKmEtMypvKSpuK28qaSkvNn1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0K3IqZX19ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHQ9TWF0aC5wb3codCxyKSxlPU1hdGgucG93KGUsciktdCxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3codCtuKmUscil9fWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/bih0LHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6Uyhpc05hTih0KT9lOnQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIDE9PSh0PSt0KT9zOmZ1bmN0aW9uKGUscil7cmV0dXJuIHItZT9pKGUscix0KTpTKGlzTmFOKGUpP3I6ZSl9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1lLXQ7cmV0dXJuIHI/bih0LHIpOlMoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixpLGE9ci5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz1uZXcgQXJyYXkoYSksbD1uZXcgQXJyYXkoYSk7Zm9yKG49MDtuPGE7KytuKWk9ZS5yZ2IocltuXSksb1tuXT1pLnJ8fDAsc1tuXT1pLmd8fDAsbFtuXT1pLmJ8fDA7cmV0dXJuIG89dChvKSxzPXQocyksbD10KGwpLGkub3BhY2l0eT0xLGZ1bmN0aW9uKHQpe3JldHVybiBpLnI9byh0KSxpLmc9cyh0KSxpLmI9bCh0KSxpKyIifX19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fWZ1bmN0aW9uIGgodCl7cmV0dXJuIm5vbmUiPT09dD9VOihffHwoXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxNPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxfLnN0eWxlLnRyYW5zZm9ybT10LHQ9TS5nZXRDb21wdXRlZFN0eWxlKHcuYXBwZW5kQ2hpbGQoXyksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksdy5yZW1vdmVDaGlsZChfKSx0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxWKCt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdLCt0WzRdLCt0WzVdKSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gbnVsbD09dD9VOihrfHwoaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxrLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KSwodD1rLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyh0PXQubWF0cml4LFYodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpVKX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifWZ1bmN0aW9uIGEodCxuLGksYSxvLHMpe2lmKHQhPT1pfHxuIT09YSl7dmFyIGw9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxyKTtzLnB1c2goe2k6bC00LHg6RCh0LGkpfSx7aTpsLTIseDpEKG4sYSl9KX1lbHNlKGl8fGEpJiZvLnB1c2goInRyYW5zbGF0ZSgiK2krZSthK3IpfWZ1bmN0aW9uIG8odCxlLHIsYSl7dCE9PWU/KHQtZT4xODA/ZSs9MzYwOmUtdD4xODAmJih0Kz0zNjApLGEucHVzaCh7aTpyLnB1c2goaShyKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6RCh0LGUpfSkpOmUmJnIucHVzaChpKHIpKyJyb3RhdGUoIitlK24pfWZ1bmN0aW9uIHModCxlLHIsYSl7dCE9PWU/YS5wdXNoKHtpOnIucHVzaChpKHIpKyJza2V3WCgiLG51bGwsbiktMix4OkQodCxlKX0pOmUmJnIucHVzaChpKHIpKyJza2V3WCgiK2Urbil9ZnVuY3Rpb24gbCh0LGUscixuLGEsbyl7aWYodCE9PXJ8fGUhPT1uKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OkQodCxyKX0se2k6cy0yLHg6RChlLG4pfSl9ZWxzZSAxPT09ciYmMT09PW58fGEucHVzaChpKGEpKyJzY2FsZSgiK3IrIiwiK24rIikiKX1yZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1bXSxpPVtdO3JldHVybiBlPXQoZSkscj10KHIpLGEoZS50cmFuc2xhdGVYLGUudHJhbnNsYXRlWSxyLnRyYW5zbGF0ZVgsci50cmFuc2xhdGVZLG4saSksbyhlLnJvdGF0ZSxyLnJvdGF0ZSxuLGkpLHMoZS5za2V3WCxyLnNrZXdYLG4saSksbChlLnNjYWxlWCxlLnNjYWxlWSxyLnNjYWxlWCxyLnNjYWxlWSxuLGkpLGU9cj1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPS0xLGE9aS5sZW5ndGg7KytyPGE7KW5bKGU9aVtyXSkuaV09ZS54KHQpO3JldHVybiBuLmpvaW4oIiIpfX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBtKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfWZ1bmN0aW9uIHYodCl7cmV0dXJuKCh0PU1hdGguZXhwKDIqdCkpLTEpLyh0KzEpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhzbChyKSkuaCwobj1lLmhzbChuKSkuaCksYT1zKHIucyxuLnMpLG89cyhyLmwsbi5sKSxsPXMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLnM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9bCh0KSxyKyIifX19ZnVuY3Rpb24geSh0LHIpe3ZhciBuPXMoKHQ9ZS5sYWIodCkpLmwsKHI9ZS5sYWIocikpLmwpLGk9cyh0LmEsci5hKSxhPXModC5iLHIuYiksbz1zKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5sPW4oZSksdC5hPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19ZnVuY3Rpb24gYih0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT10KChyPWUuaGNsKHIpKS5oLChuPWUuaGNsKG4pKS5oKSxhPXMoci5jLG4uYyksbz1zKHIubCxuLmwpLGw9cyhyLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1pKHQpLHIuYz1hKHQpLHIubD1vKHQpLHIub3BhY2l0eT1sKHQpLHIrIiJ9fX1mdW5jdGlvbiB4KHQpe3JldHVybiBmdW5jdGlvbiByKG4pe2Z1bmN0aW9uIGkocixpKXt2YXIgYT10KChyPWUuY3ViZWhlbGl4KHIpKS5oLChpPWUuY3ViZWhlbGl4KGkpKS5oKSxvPXMoci5zLGkucyksbD1zKHIubCxpLmwpLHU9cyhyLm9wYWNpdHksaS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIuaD1hKHQpLHIucz1vKHQpLHIubD1sKE1hdGgucG93KHQsbikpLHIub3BhY2l0eT11KHQpLHIrIiJ9fXJldHVybiBuPStuLGkuZ2FtbWE9cixpfSgxKX12YXIgXyx3LE0sayxBPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPW48PTA/bj0wOm4+PTE/KG49MSxlLTEpOk1hdGguZmxvb3IobiplKSxhPXRbaV0sbz10W2krMV0scz1pPjA/dFtpLTFdOjIqYS1vLGw9aTxlLTE/dFtpKzJdOjIqby1hO3JldHVybiByKChuLWkvZSkqZSxzLGEsbyxsKX19LFQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxhPXRbKGkrZS0xKSVlXSxvPXRbaSVlXSxzPXRbKGkrMSklZV0sbD10WyhpKzIpJWVdO3JldHVybiByKChuLWkvZSkqZSxhLG8scyxsKX19LFM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxFPWZ1bmN0aW9uIHQocil7ZnVuY3Rpb24gbih0LHIpe3ZhciBuPWkoKHQ9ZS5yZ2IodCkpLnIsKHI9ZS5yZ2IocikpLnIpLGE9aSh0Lmcsci5nKSxvPWkodC5iLHIuYiksbD1zKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPW4oZSksdC5nPWEoZSksdC5iPW8oZSksdC5vcGFjaXR5PWwoZSksdCsiIn19dmFyIGk9byhyKTtyZXR1cm4gbi5nYW1tYT10LG59KDEpLEw9bChBKSxDPWwoVCksej1mdW5jdGlvbih0LGUpe3ZhciByLG49ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihuLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pO2ZvcihyPTA7cjxpOysrcilhW3JdPWoodFtyXSxlW3JdKTtmb3IoO3I8bjsrK3Ipb1tyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8aTsrK3Ipb1tyXT1hW3JdKHQpO3JldHVybiBvfX0sST1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGUtPXQsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0K2Uqbikscn19LEQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlLT10LGZ1bmN0aW9uKHIpe3JldHVybiB0K2Uqcn19LFA9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXt9LGk9e307bnVsbCE9PXQmJiJvYmplY3QiPT10eXBlb2YgdHx8KHQ9e30pLG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGV8fChlPXt9KTtmb3IociBpbiBlKXIgaW4gdD9uW3JdPWoodFtyXSxlW3JdKTppW3JdPWVbcl07cmV0dXJuIGZ1bmN0aW9uKHQpe2ZvcihyIGluIG4paVtyXT1uW3JdKHQpO3JldHVybiBpfX0sTz0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csUj1uZXcgUmVnRXhwKE8uc291cmNlLCJnIiksRj1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU8ubGFzdEluZGV4PVIubGFzdEluZGV4PTAsbz0tMSxzPVtdLGw9W107Zm9yKHQrPSIiLGUrPSIiOyhyPU8uZXhlYyh0KSkmJihuPVIuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OkQocixuKX0pKSxhPVIubGFzdEluZGV4O3JldHVybiBhPGUubGVuZ3RoJiYoaT1lLnNsaWNlKGEpLHNbb10/c1tvXSs9aTpzWysrb109aSkscy5sZW5ndGg8Mj9sWzBdP2MobFswXS54KTp1KGUpOihlPWwubGVuZ3RoLGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTA7bjxlOysrbilzWyhyPWxbbl0pLmldPXIueCh0KTtyZXR1cm4gcy5qb2luKCIiKX0pfSxqPWZ1bmN0aW9uKHQscil7dmFyIG4saT10eXBlb2YgcjtyZXR1cm4gbnVsbD09cnx8ImJvb2xlYW4iPT09aT9TKHIpOigibnVtYmVyIj09PWk/RDoic3RyaW5nIj09PWk/KG49ZS5jb2xvcihyKSk/KHI9bixFKTpGOnIgaW5zdGFuY2VvZiBlLmNvbG9yP0U6ciBpbnN0YW5jZW9mIERhdGU/STpBcnJheS5pc0FycmF5KHIpP3o6ImZ1bmN0aW9uIiE9dHlwZW9mIHIudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHIudG9TdHJpbmd8fGlzTmFOKHIpP1A6RCkodCxyKX0sTj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSt0LGUtPXQsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQodCtlKnIpfX0sQj0xODAvTWF0aC5QSSxVPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LFY9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbDtyZXR1cm4obz1NYXRoLnNxcnQodCp0K2UqZSkpJiYodC89byxlLz1vKSwobD10KnIrZSpuKSYmKHItPXQqbCxuLT1lKmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksdCpuPGUqciYmKHQ9LXQsZT0tZSxsPS1sLG89LW8pLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTphLHJvdGF0ZTpNYXRoLmF0YW4yKGUsdCkqQixza2V3WDpNYXRoLmF0YW4obCkqQixzY2FsZVg6byxzY2FsZVk6c319LEg9ZChoLCJweCwgIiwicHgpIiwiZGVnKSIpLHE9ZChmLCIsICIsIikiLCIpIiksRz1NYXRoLlNRUlQyLFk9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxsPWVbMV0sdT1lWzJdLGM9cy1pLGg9bC1hLGY9YypjK2gqaDtpZihmPDFlLTEyKW49TWF0aC5sb2codS9vKS9HLHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCpjLGErdCpoLG8qTWF0aC5leHAoRyp0Km4pXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZiksZz0odSp1LW8qbys0KmYpLygyKm8qMipkKSx5PSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLGI9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKSx4PU1hdGgubG9nKE1hdGguc3FydCh5KnkrMSkteSk7bj0oeC1iKS9HLHI9ZnVuY3Rpb24odCl7dmFyIGU9dCpuLHI9cChiKSxzPW8vKDIqZCkqKHIqdihHKmUrYiktbShiKSk7cmV0dXJuW2krcypjLGErcypoLG8qci9wKEcqZStiKV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LFg9ZyhhKSxXPWcocyksWj1iKGEpLEo9YihzKSxLPXgoYSksUT14KHMpLCQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn07dC5pbnRlcnBvbGF0ZT1qLHQuaW50ZXJwb2xhdGVBcnJheT16LHQuaW50ZXJwb2xhdGVCYXNpcz1BLHQuaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZD1ULHQuaW50ZXJwb2xhdGVEYXRlPUksdC5pbnRlcnBvbGF0ZU51bWJlcj1ELHQuaW50ZXJwb2xhdGVPYmplY3Q9UCx0LmludGVycG9sYXRlUm91bmQ9Tix0LmludGVycG9sYXRlU3RyaW5nPUYsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1ILHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9cSx0LmludGVycG9sYXRlWm9vbT1ZLHQuaW50ZXJwb2xhdGVSZ2I9RSx0LmludGVycG9sYXRlUmdiQmFzaXM9TCx0LmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ9Qyx0LmludGVycG9sYXRlSHNsPVgsdC5pbnRlcnBvbGF0ZUhzbExvbmc9Vyx0LmludGVycG9sYXRlTGFiPXksdC5pbnRlcnBvbGF0ZUhjbD1aLHQuaW50ZXJwb2xhdGVIY2xMb25nPUosdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1LLHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPVEsdC5xdWFudGl6ZT0kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7ImQzLWNvbG9yIjoxMTR9XSwxMTg6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsib2JqZWN0Ij09dHlwZW9mIG4mJnZvaWQgMCE9PXI/aShuKToiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChbImV4cG9ydHMiXSxpKTppKGUuZDM9ZS5kM3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZD10Ll9yb290LHA9e2RhdGE6bn0sbT10Ll94MCx2PXQuX3kwLGc9dC5feDEseT10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKHU9ZT49KGE9KG0rZykvMikpP209YTpnPWEsKGM9cj49KG89KHYreSkvMikpP3Y9bzp5PW8saT1kLCEoZD1kW2g9Yzw8MXx1XSkpcmV0dXJuIGlbaF09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksbD0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIHAubmV4dD1kLGk/aVtoXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwodT1lPj0oYT0obStnKS8yKSk/bT1hOmc9YSwoYz1yPj0obz0odit5KS8yKSk/dj1vOnk9b313aGlsZSgoaD1jPDwxfHUpPT0oZj0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPWQsaVtoXT1wLHR9ZnVuY3Rpb24gcih0KXt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLHU9MS8wLGM9MS8wLGg9LTEvMCxmPS0xLzA7Zm9yKG49MDtuPG87KytuKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHI9dFtuXSkpfHxpc05hTihhPSt0aGlzLl95LmNhbGwobnVsbCxyKSl8fChzW25dPWksbFtuXT1hLGk8dSYmKHU9aSksaT5oJiYoaD1pKSxhPGMmJihjPWEpLGE+ZiYmKGY9YSkpO2ZvcihoPHUmJih1PXRoaXMuX3gwLGg9dGhpcy5feDEpLGY8YyYmKGM9dGhpcy5feTAsZj10aGlzLl95MSksdGhpcy5jb3Zlcih1LGMpLmNvdmVyKGgsZiksbj0wO248bzsrK24pZSh0aGlzLHNbbl0sbFtuXSx0W25dKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBpKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49bmV3IHMobnVsbD09ZT9pOmUsbnVsbD09cj9hOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9uOm4uYWRkQWxsKHQpfWZ1bmN0aW9uIHModCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgdT1mdW5jdGlvbih0KXt2YXIgcj0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGUodGhpcy5jb3ZlcihyLG4pLHIsbix0KX0sYz1mdW5jdGlvbih0LGUpe2lmKGlzTmFOKHQ9K3QpfHxpc05hTihlPStlKSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsYT10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IodCkpKzEsYT0obj1NYXRoLmZsb29yKGUpKSsxO2Vsc2V7aWYoIShyPnR8fHQ+aXx8bj5lfHxlPmEpKXJldHVybiB0aGlzO3ZhciBvLHMsbD1pLXIsdT10aGlzLl9yb290O3N3aXRjaChzPShlPChuK2EpLzIpPDwxfHQ8KHIraSkvMil7Y2FzZSAwOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixpPXIrbCxhPW4rbCx0Pml8fGU+YSk7YnJlYWs7Y2FzZSAxOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixyPWktbCxhPW4rbCxyPnR8fGU+YSk7YnJlYWs7Y2FzZSAyOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixpPXIrbCxuPWEtbCx0Pml8fG4+ZSk7YnJlYWs7Y2FzZSAzOmRve289bmV3IEFycmF5KDQpLG9bc109dSx1PW99d2hpbGUobCo9MixyPWktbCxuPWEtbCxyPnR8fG4+ZSl9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PXUpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGg9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSksdH0sZj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCt0WzBdWzBdLCt0WzBdWzFdKS5jb3ZlcigrdFsxXVswXSwrdFsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX0sZD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX0scD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLHUsYz10aGlzLl94MCxoPXRoaXMuX3kwLGY9dGhpcy5feDEscD10aGlzLl95MSxtPVtdLHY9dGhpcy5fcm9vdDtmb3IodiYmbS5wdXNoKG5ldyBkKHYsYyxoLGYscCkpLG51bGw9PXI/cj0xLzA6KGM9dC1yLGg9ZS1yLGY9dCtyLHA9ZStyLHIqPXIpO2w9bS5wb3AoKTspaWYoISghKHY9bC5ub2RlKXx8KGk9bC54MCk+Znx8KGE9bC55MCk+cHx8KG89bC54MSk8Y3x8KHM9bC55MSk8aCkpaWYodi5sZW5ndGgpe3ZhciBnPShpK28pLzIseT0oYStzKS8yO20ucHVzaChuZXcgZCh2WzNdLGcseSxvLHMpLG5ldyBkKHZbMl0saSx5LGcscyksbmV3IGQodlsxXSxnLGEsbyx5KSxuZXcgZCh2WzBdLGksYSxnLHkpKSwodT0oZT49eSk8PDF8dD49ZykmJihsPW1bbS5sZW5ndGgtMV0sbVttLmxlbmd0aC0xXT1tW20ubGVuZ3RoLTEtdV0sbVttLmxlbmd0aC0xLXVdPWwpfWVsc2V7dmFyIGI9dC0rdGhpcy5feC5jYWxsKG51bGwsdi5kYXRhKSx4PWUtK3RoaXMuX3kuY2FsbChudWxsLHYuZGF0YSksXz1iKmIreCp4O2lmKF88cil7dmFyIHc9TWF0aC5zcXJ0KHI9Xyk7Yz10LXcsaD1lLXcsZj10K3cscD1lK3csbj12LmRhdGF9fXJldHVybiBufSxtPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLHIsbixpLGEsbyxzLGwsdSxjLGgsZixkPXRoaXMuX3Jvb3QscD10aGlzLl94MCxtPXRoaXMuX3kwLHY9dGhpcy5feDEsZz10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKCh1PWE+PShzPShwK3YpLzIpKT9wPXM6dj1zLChjPW8+PShsPShtK2cpLzIpKT9tPWw6Zz1sLGU9ZCwhKGQ9ZFtoPWM8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihyPWUsZj1oKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKG49ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LG4/KGk/bi5uZXh0PWk6ZGVsZXRlIG4ubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYocj9yW2ZdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSx2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGc9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSksdH0seT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz1bXSxsPXRoaXMuX3Jvb3Q7Zm9yKGwmJnMucHVzaChuZXcgZChsLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChsPWUubm9kZSxuPWUueDAsaT1lLnkwLGE9ZS54MSxvPWUueTEpJiZsLmxlbmd0aCl7dmFyIHU9KG4rYSkvMixjPShpK28pLzI7KHI9bFszXSkmJnMucHVzaChuZXcgZChyLHUsYyxhLG8pKSwocj1sWzJdKSYmcy5wdXNoKG5ldyBkKHIsbixjLHUsbykpLChyPWxbMV0pJiZzLnB1c2gobmV3IGQocix1LGksYSxjKSksKHI9bFswXSkmJnMucHVzaChuZXcgZChyLG4saSx1LGMpKX1yZXR1cm4gdGhpc30sYj1mdW5jdGlvbih0KXt2YXIgZSxyPVtdLG49W107Zm9yKHRoaXMuX3Jvb3QmJnIucHVzaChuZXcgZCh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1yLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGw9ZS54MSx1PWUueTEsYz0obytsKS8yLGg9KHMrdSkvMjsoYT1pWzBdKSYmci5wdXNoKG5ldyBkKGEsbyxzLGMsaCkpLChhPWlbMV0pJiZyLnB1c2gobmV3IGQoYSxjLHMsbCxoKSksKGE9aVsyXSkmJnIucHVzaChuZXcgZChhLG8saCxjLHUpKSwoYT1pWzNdKSYmci5wdXNoKG5ldyBkKGEsYyxoLGwsdSkpfW4ucHVzaChlKX1mb3IoO2U9bi5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LHg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxfPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX0sdz1vLnByb3RvdHlwZT1zLnByb3RvdHlwZTt3LmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IHModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PWwobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1sKGUpKTtyZXR1cm4gcn0sdy5hZGQ9dSx3LmFkZEFsbD1yLHcuY292ZXI9Yyx3LmRhdGE9aCx3LmV4dGVudD1mLHcuZmluZD1wLHcucmVtb3ZlPW0sdy5yZW1vdmVBbGw9bix3LnJvb3Q9dix3LnNpemU9Zyx3LnZpc2l0PXksdy52aXNpdEFmdGVyPWIsdy54PXgsdy55PV8sdC5xdWFkdHJlZT1vLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sMTE5OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2kobik6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoWyJleHBvcnRzIl0saSk6aShlLmQzPWUuZDN8fHt9KX0odGhpcyxmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe3JldHVybiBnfHwoeChyKSxnPWIubm93KCkreSl9ZnVuY3Rpb24gcigpe2c9MH1mdW5jdGlvbiBuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgaT1uZXcgbjtyZXR1cm4gaS5yZXN0YXJ0KHQsZSxyKSxpfWZ1bmN0aW9uIGEoKXtlKCksKytmO2Zvcih2YXIgdCxyPWM7cjspKHQ9Zy1yLl90aW1lKT49MCYmci5fY2FsbC5jYWxsKG51bGwsdCkscj1yLl9uZXh0Oy0tZn1mdW5jdGlvbiBvKCl7Zz0odj1iLm5vdygpKSt5LGY9ZD0wO3RyeXthKCl9ZmluYWxseXtmPTAsbCgpLGc9MH19ZnVuY3Rpb24gcygpe3ZhciB0PWIubm93KCksZT10LXY7ZT5tJiYoeS09ZSx2PXQpfWZ1bmN0aW9uIGwoKXtmb3IodmFyIHQsZSxyPWMsbj0xLzA7cjspci5fY2FsbD8obj5yLl90aW1lJiYobj1yLl90aW1lKSx0PXIscj1yLl9uZXh0KTooZT1yLl9uZXh0LHIuX25leHQ9bnVsbCxyPXQ/dC5fbmV4dD1lOmM9ZSk7aD10LHUobil9ZnVuY3Rpb24gdSh0KXtpZighZil7ZCYmKGQ9Y2xlYXJUaW1lb3V0KGQpKTt2YXIgZT10LWc7ZT4yND8odDwxLzAmJihkPXNldFRpbWVvdXQobyxlKSkscCYmKHA9Y2xlYXJJbnRlcnZhbChwKSkpOihwfHwodj1nLHA9c2V0SW50ZXJ2YWwocyxtKSksZj0xLHgobykpfX12YXIgYyxoLGY9MCxkPTAscD0wLG09MWUzLHY9MCxnPTAseT0wLGI9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUseD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtuLnByb3RvdHlwZT1pLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bixyZXN0YXJ0OmZ1bmN0aW9uKHQscixuKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO249KG51bGw9PW4/ZSgpOituKSsobnVsbD09cj8wOityKSx0aGlzLl9uZXh0fHxoPT09dGhpc3x8KGg/aC5fbmV4dD10aGlzOmM9dGhpcyxoPXRoaXMpLHRoaXMuX2NhbGw9dCx0aGlzLl90aW1lPW4sdSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx1KCkpfX07dmFyIF89ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW5ldyBuO3JldHVybiBlPW51bGw9PWU/MDorZSxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksdChyK2UpfSxlLHIpLGl9LHc9ZnVuY3Rpb24odCxyLGkpe3ZhciBhPW5ldyBuLG89cjtyZXR1cm4gbnVsbD09cj8oYS5yZXN0YXJ0KHQscixpKSxhKToocj0rcixpPW51bGw9PWk/ZSgpOitpLGEucmVzdGFydChmdW5jdGlvbiBlKG4pe24rPW8sYS5yZXN0YXJ0KGUsbys9cixpKSx0KG4pfSxyLGkpLGEpfTt0Lm5vdz1lLHQudGltZXI9aSx0LnRpbWVyRmx1c2g9YSx0LnRpbWVvdXQ9Xyx0LmludGVydmFsPXcsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSwxMjA6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50fHx0LmRvY3VtZW50fHx0KS5kb2N1bWVudEVsZW1lbnR9ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmKHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3KX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBvKHQpe3JldHVybiFpc05hTih0KX1mdW5jdGlvbiBzKHQpe3JldHVybntsZWZ0OmZ1bmN0aW9uKGUscixuLGkpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihuPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKT4wP2k9YTpuPWErMX1yZXR1cm4gbn19fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQubGVuZ3RofWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTE7dCplJTE7KWUqPTEwO3JldHVybiBlfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHIgaW4gZSlPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUscix7dmFsdWU6ZVtyXSxlbnVtZXJhYmxlOiExfSl9ZnVuY3Rpb24gaCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQrPSIiKT09PV9vfHx0WzBdPT09d28/d28rdDp0fWZ1bmN0aW9uIGQodCl7cmV0dXJuKHQrPSIiKVswXT09PXdvP3Quc2xpY2UoMSk6dH1mdW5jdGlvbiBwKHQpe3JldHVybiBmKHQpaW4gdGhpcy5ffWZ1bmN0aW9uIG0odCl7cmV0dXJuKHQ9Zih0KSlpbiB0aGlzLl8mJmRlbGV0ZSB0aGlzLl9bdF19ZnVuY3Rpb24gdigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKGQoZSkpO3JldHVybiB0fWZ1bmN0aW9uIGcoKXt2YXIgdD0wO2Zvcih2YXIgZSBpbiB0aGlzLl8pKyt0O3JldHVybiB0fWZ1bmN0aW9uIHkoKXtmb3IodmFyIHQgaW4gdGhpcy5fKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGIoKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0fWZ1bmN0aW9uIF8odCxlLHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXIuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBuPT09ZT90Om59fWZ1bmN0aW9uIHcodCxlKXtpZihlIGluIHQpcmV0dXJuIGU7ZT1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7Zm9yKHZhciByPTAsbj1Nby5sZW5ndGg7cjxuOysrcil7dmFyIGk9TW9bcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fWZ1bmN0aW9uIE0oKXt9ZnVuY3Rpb24gaygpe31mdW5jdGlvbiBBKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIGUsbj1yLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspKGU9bltpXS5vbikmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0fXZhciByPVtdLG49bmV3IGg7cmV0dXJuIGUub249ZnVuY3Rpb24oZSxpKXt2YXIgYSxvPW4uZ2V0KGUpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCxyPXIuc2xpY2UoMCxhPXIuaW5kZXhPZihvKSkuY29uY2F0KHIuc2xpY2UoYSsxKSksbi5yZW1vdmUoZSkpLGkmJnIucHVzaChuLnNldChlLHtvbjppfSkpLHQpfSxlfWZ1bmN0aW9uIFQoKXt1by5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIFMoKXtmb3IodmFyIHQsZT11by5ldmVudDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX1mdW5jdGlvbiBFKHQpe2Zvcih2YXIgZT1uZXcgayxyPTAsbj1hcmd1bWVudHMubGVuZ3RoOysrcjxuOyllW2FyZ3VtZW50c1tyXV09QShlKTtyZXR1cm4gZS5vZj1mdW5jdGlvbihyLG4pe3JldHVybiBmdW5jdGlvbihpKXt0cnl7dmFyIGE9aS5zb3VyY2VFdmVudD11by5ldmVudDtpLnRhcmdldD10LHVvLmV2ZW50PWksZVtpLnR5cGVdLmFwcGx5KHIsbil9ZmluYWxseXt1by5ldmVudD1hfX19LGV9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gQW8odCxMbyksdH1mdW5jdGlvbiBDKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gVG8odCx0aGlzKX19ZnVuY3Rpb24geih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIFNvKHQsdGhpcyl9fWZ1bmN0aW9uIEkodCxlKXtmdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9ZnVuY3Rpb24gbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX1mdW5jdGlvbiBpKCl7dGhpcy5zZXRBdHRyaWJ1dGUodCxlKX1mdW5jdGlvbiBhKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9ZnVuY3Rpb24gbygpe3ZhciByPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PXI/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxyKX1mdW5jdGlvbiBzKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwscil9cmV0dXJuIHQ9dW8ubnMucXVhbGlmeSh0KSxudWxsPT1lP3QubG9jYWw/bjpyOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3QubG9jYWw/czpvOnQubG9jYWw/YTppfWZ1bmN0aW9uIEQodCl7cmV0dXJuIHQudHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrdW8ucmVxdW90ZSh0KSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBPKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gUih0LGUpe2Z1bmN0aW9uIHIoKXtmb3IodmFyIHI9LTE7KytyPGk7KXRbcl0odGhpcyxlKX1mdW5jdGlvbiBuKCl7Zm9yKHZhciByPS0xLG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytyPGk7KXRbcl0odGhpcyxuKX10PU8odCkubWFwKEYpO3ZhciBpPXQubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP246cn1mdW5jdGlvbiBGKHQpe3ZhciBlPVAodCk7cmV0dXJuIGZ1bmN0aW9uKHIsbil7aWYoaT1yLmNsYXNzTGlzdClyZXR1cm4gbj9pLmFkZCh0KTppLnJlbW92ZSh0KTt2YXIgaT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiI7bj8oZS5sYXN0SW5kZXg9MCxlLnRlc3QoaSl8fHIuc2V0QXR0cmlidXRlKCJjbGFzcyIsRChpKyIgIit0KSkpOnIuc2V0QXR0cmlidXRlKCJjbGFzcyIsRChpLnJlcGxhY2UoZSwiICIpKSl9fWZ1bmN0aW9uIGoodCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfWZ1bmN0aW9uIGkoKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsZSxyKX1mdW5jdGlvbiBhKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxuLHIpfXJldHVybiBudWxsPT1lP246ImZ1bmN0aW9uIj09dHlwZW9mIGU/YTppfWZ1bmN0aW9uIE4odCxlKXtmdW5jdGlvbiByKCl7ZGVsZXRlIHRoaXNbdF19ZnVuY3Rpb24gbigpe3RoaXNbdF09ZX1mdW5jdGlvbiBpKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj9kZWxldGUgdGhpc1t0XTp0aGlzW3RdPXJ9cmV0dXJuIG51bGw9PWU/cjoiZnVuY3Rpb24iPT10eXBlb2YgZT9pOm59ZnVuY3Rpb24gQih0KXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1DbyYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Q28/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKHIsdCl9ZnVuY3Rpb24gcigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDoodD11by5ucy5xdWFsaWZ5KHQpKS5sb2NhbD9yOmV9ZnVuY3Rpb24gVSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIFYodCl7cmV0dXJue19fZGF0YV9fOnR9fWZ1bmN0aW9uIEgodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEVvKHRoaXMsdCl9fWZ1bmN0aW9uIHEodCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGh8fCh0PWkpLGZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJnI/dChlLl9fZGF0YV9fLHIuX19kYXRhX18pOiFlLSFyfX1mdW5jdGlvbiBHKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSxhPXRbcl0sbz0wLHM9YS5sZW5ndGg7bzxzO28rKykoaT1hW29dKSYmZShpLG8scik7cmV0dXJuIHR9ZnVuY3Rpb24gWSh0KXtyZXR1cm4gQW8odCxJbyksdH1mdW5jdGlvbiBYKHQpe3ZhciBlLHI7cmV0dXJuIGZ1bmN0aW9uKG4saSxhKXt2YXIgbyxzPXRbYV0udXBkYXRlLGw9cy5sZW5ndGg7Zm9yKGEhPXImJihyPWEsZT0wKSxpPj1lJiYoZT1pKzEpOyEobz1zW2VdKSYmKytlPGw7KTtyZXR1cm4gb319ZnVuY3Rpb24gVyh0LGUscil7ZnVuY3Rpb24gbigpe3ZhciBlPXRoaXNbb107ZSYmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUsZS4kKSxkZWxldGUgdGhpc1tvXSl9ZnVuY3Rpb24gaSgpe3ZhciBpPWwoZSxobyhhcmd1bWVudHMpKTtuLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKHQsdGhpc1tvXT1pLGkuJD1yKSxpLl89ZX1mdW5jdGlvbiBhKCl7dmFyIGUscj1uZXcgUmVnRXhwKCJeX19vbihbXi5dKykiK3VvLnJlcXVvdGUodCkrIiQiKTtmb3IodmFyIG4gaW4gdGhpcylpZihlPW4ubWF0Y2gocikpe3ZhciBpPXRoaXNbbl07dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGVbMV0saSxpLiQpLGRlbGV0ZSB0aGlzW25dfX12YXIgbz0iX19vbiIrdCxzPXQuaW5kZXhPZigiLiIpLGw9WjtzPjAmJih0PXQuc2xpY2UoMCxzKSk7dmFyIHU9RG8uZ2V0KHQpO3JldHVybiB1JiYodD11LGw9Sikscz9lP2k6bjplP006YX1mdW5jdGlvbiBaKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXVvLmV2ZW50O3VvLmV2ZW50PXIsZVswXT10aGlzLl9fZGF0YV9fO3RyeXt0LmFwcGx5KHRoaXMsZSl9ZmluYWxseXt1by5ldmVudD1ufX19ZnVuY3Rpb24gSih0LGUpe3ZhciByPVoodCxlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXQucmVsYXRlZFRhcmdldDtuJiYobj09PWV8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKSl8fHIuY2FsbChlLHQpfX1mdW5jdGlvbiBLKHQpe3ZhciByPSIuZHJhZ3N1cHByZXNzLSIrICsrT28saT0iY2xpY2siK3IsYT11by5zZWxlY3Qobih0KSkub24oInRvdWNobW92ZSIrcixUKS5vbigiZHJhZ3N0YXJ0IityLFQpLm9uKCJzZWxlY3RzdGFydCIrcixUKTtpZihudWxsPT1QbyYmKFBvPSEoIm9uc2VsZWN0c3RhcnQiaW4gdCkmJncodC5zdHlsZSwidXNlclNlbGVjdCIpKSxQbyl7dmFyIG89ZSh0KS5zdHlsZSxzPW9bUG9dO29bUG9dPSJub25lIn1yZXR1cm4gZnVuY3Rpb24odCl7aWYoYS5vbihyLG51bGwpLFBvJiYob1tQb109cyksdCl7dmFyIGU9ZnVuY3Rpb24oKXthLm9uKGksbnVsbCl9O2Eub24oaSxmdW5jdGlvbigpe1QoKSxlKCl9LCEwKSxzZXRUaW1lb3V0KGUsMCl9fX1mdW5jdGlvbiBRKHQsZSl7ZS5jaGFuZ2VkVG91Y2hlcyYmKGU9ZS5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIHI9dC5vd25lclNWR0VsZW1lbnR8fHQ7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIGk9ci5jcmVhdGVTVkdQb2ludCgpO2lmKFJvPDApe3ZhciBhPW4odCk7aWYoYS5zY3JvbGxYfHxhLnNjcm9sbFkpe3I9dW8uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKTt2YXIgbz1yWzBdWzBdLmdldFNjcmVlbkNUTSgpO1JvPSEoby5mfHxvLmUpLHIucmVtb3ZlKCl9fXJldHVybiBSbz8oaS54PWUucGFnZVgsaS55PWUucGFnZVkpOihpLng9ZS5jbGllbnRYLGkueT1lLmNsaWVudFkpLGk9aS5tYXRyaXhUcmFuc2Zvcm0odC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtpLngsaS55XX12YXIgcz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtcy5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktcy50b3AtdC5jbGllbnRUb3BdfWZ1bmN0aW9uICQoKXtyZXR1cm4gdW8uZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcn1mdW5jdGlvbiB0dCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gZXQodCxlLHIpe3JldHVybihlWzBdLXRbMF0pKihyWzFdLXRbMV0pLShlWzFdLXRbMV0pKihyWzBdLXRbMF0pfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiB0PjE/MDp0PC0xP05vOk1hdGguYWNvcyh0KX1mdW5jdGlvbiBudCh0KXtyZXR1cm4gdD4xP1ZvOnQ8LTE/LVZvOk1hdGguYXNpbih0KX1mdW5jdGlvbiBpdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn1mdW5jdGlvbiBhdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBvdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAoMip0KSktMSkvKHQrMSl9ZnVuY3Rpb24gc3QodCl7cmV0dXJuKHQ9TWF0aC5zaW4odC8yKSkqdH1mdW5jdGlvbiBsdCgpe31mdW5jdGlvbiB1dCh0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB1dD8odGhpcy5oPSt0LHRoaXMucz0rZSx2b2lkKHRoaXMubD0rcikpOmFyZ3VtZW50cy5sZW5ndGg8Mj90IGluc3RhbmNlb2YgdXQ/bmV3IHV0KHQuaCx0LnMsdC5sKTpNdCgiIit0LGt0LHV0KTpuZXcgdXQodCxlLHIpfWZ1bmN0aW9uIGN0KHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0PjM2MD90LT0zNjA6dDwwJiYodCs9MzYwKSx0PDYwP2ErKG8tYSkqdC82MDp0PDE4MD9vOnQ8MjQwP2ErKG8tYSkqKDI0MC10KS82MDphfWZ1bmN0aW9uIGkodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Km4odCkpfXZhciBhLG87cmV0dXJuIHQ9aXNOYU4odCk/MDoodCU9MzYwKTwwP3QrMzYwOnQsZT1pc05hTihlKT8wOmU8MD8wOmU+MT8xOmUscj1yPDA/MDpyPjE/MTpyLG89cjw9LjU/ciooMStlKTpyK2UtciplLGE9MipyLW8sbmV3IGJ0KGkodCsxMjApLGkodCksaSh0LTEyMCkpfWZ1bmN0aW9uIGh0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGh0Pyh0aGlzLmg9K3QsdGhpcy5jPStlLHZvaWQodGhpcy5sPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBodD9uZXcgaHQodC5oLHQuYyx0LmwpOnQgaW5zdGFuY2VvZiBkdD9tdCh0LmwsdC5hLHQuYik6bXQoKHQ9QXQoKHQ9dW8ucmdiKHQpKS5yLHQuZyx0LmIpKS5sLHQuYSx0LmIpOm5ldyBodCh0LGUscil9ZnVuY3Rpb24gZnQodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBkdChyLE1hdGguY29zKHQqPUhvKSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIGR0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGR0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBkdD9uZXcgZHQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBodD9mdCh0LmgsdC5jLHQubCk6QXQoKHQ9YnQodCkpLnIsdC5nLHQuYik6bmV3IGR0KHQsZSxyKX1mdW5jdGlvbiBwdCh0LGUscil7dmFyIG49KHQrMTYpLzExNixpPW4rZS81MDAsYT1uLXIvMjAwO3JldHVybiBpPXZ0KGkpKlFvLG49dnQobikqJG8sYT12dChhKSp0cyxuZXcgYnQoeXQoMy4yNDA0NTQyKmktMS41MzcxMzg1Km4tLjQ5ODUzMTQqYSkseXQoLS45NjkyNjYqaSsxLjg3NjAxMDgqbisuMDQxNTU2KmEpLHl0KC4wNTU2NDM0KmktLjIwNDAyNTkqbisxLjA1NzIyNTIqYSkpfWZ1bmN0aW9uIG10KHQsZSxyKXtyZXR1cm4gdD4wP25ldyBodChNYXRoLmF0YW4yKHIsZSkqcW8sTWF0aC5zcXJ0KGUqZStyKnIpLHQpOm5ldyBodChOYU4sTmFOLHQpfWZ1bmN0aW9uIHZ0KHQpe3JldHVybiB0Pi4yMDY4OTMwMzQ/dCp0KnQ6KHQtNC8yOSkvNy43ODcwMzd9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHQ+LjAwODg1Nj9NYXRoLnBvdyh0LDEvMyk6Ny43ODcwMzcqdCs0LzI5fWZ1bmN0aW9uIHl0KHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSoodDw9LjAwMzA0PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSkpfWZ1bmN0aW9uIGJ0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJ0Pyh0aGlzLnI9fn50LHRoaXMuZz1+fmUsdm9pZCh0aGlzLmI9fn5yKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBidD9uZXcgYnQodC5yLHQuZyx0LmIpOk10KCIiK3QsYnQsY3QpOm5ldyBidCh0LGUscil9ZnVuY3Rpb24geHQodCl7cmV0dXJuIG5ldyBidCh0Pj4xNix0Pj44JjI1NSwyNTUmdCl9ZnVuY3Rpb24gX3QodCl7cmV0dXJuIHh0KHQpKyIifWZ1bmN0aW9uIHd0KHQpe3JldHVybiB0PDE2PyIwIitNYXRoLm1heCgwLHQpLnRvU3RyaW5nKDE2KTpNYXRoLm1pbigyNTUsdCkudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE10KHQsZSxyKXt2YXIgbixpLGEsbz0wLHM9MCxsPTA7aWYobj0vKFthLXpdKylcKCguKilcKS8uZXhlYyh0PXQudG9Mb3dlckNhc2UoKSkpc3dpdGNoKGk9blsyXS5zcGxpdCgiLCIpLG5bMV0pe2Nhc2UiaHNsIjpyZXR1cm4gcihwYXJzZUZsb2F0KGlbMF0pLHBhcnNlRmxvYXQoaVsxXSkvMTAwLHBhcnNlRmxvYXQoaVsyXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIGUoU3QoaVswXSksU3QoaVsxXSksU3QoaVsyXSkpfXJldHVybihhPW5zLmdldCh0KSk/ZShhLnIsYS5nLGEuYik6KG51bGw9PXR8fCIjIiE9PXQuY2hhckF0KDApfHxpc05hTihhPXBhcnNlSW50KHQuc2xpY2UoMSksMTYpKXx8KDQ9PT10Lmxlbmd0aD8obz0oMzg0MCZhKT4+NCxvfD1vPj40LHM9MjQwJmEsc3w9cz4+NCxsPTE1JmEsbHw9bDw8NCk6Nz09PXQubGVuZ3RoJiYobz0oMTY3MTE2ODAmYSk+PjE2LHM9KDY1MjgwJmEpPj44LGw9MjU1JmEpKSxlKG8scyxsKSl9ZnVuY3Rpb24ga3QodCxlLHIpe3ZhciBuLGksYT1NYXRoLm1pbih0Lz0yNTUsZS89MjU1LHIvPTI1NSksbz1NYXRoLm1heCh0LGUscikscz1vLWEsbD0obythKS8yO3JldHVybiBzPyhpPWw8LjU/cy8obythKTpzLygyLW8tYSksbj10PT1vPyhlLXIpL3MrKGU8cj82OjApOmU9PW8/KHItdCkvcysyOih0LWUpL3MrNCxuKj02MCk6KG49TmFOLGk9bD4wJiZsPDE/MDpuKSxuZXcgdXQobixpLGwpfWZ1bmN0aW9uIEF0KHQsZSxyKXt0PVR0KHQpLGU9VHQoZSkscj1UdChyKTt2YXIgbj1ndCgoLjQxMjQ1NjQqdCsuMzU3NTc2MSplKy4xODA0Mzc1KnIpL1FvKSxpPWd0KCguMjEyNjcyOSp0Ky43MTUxNTIyKmUrLjA3MjE3NSpyKS8kbyk7cmV0dXJuIGR0KDExNippLTE2LDUwMCoobi1pKSwyMDAqKGktZ3QoKC4wMTkzMzM5KnQrLjExOTE5MiplKy45NTAzMDQxKnIpL3RzKSkpfWZ1bmN0aW9uIFR0KHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFN0KHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIiUiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/TWF0aC5yb3VuZCgyLjU1KmUpOmV9ZnVuY3Rpb24gRXQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBMdCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiAyPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxDdChlLHIsdCxuKX19ZnVuY3Rpb24gQ3QodCxlLHIsbil7ZnVuY3Rpb24gaSgpe3ZhciB0LGU9bC5zdGF0dXM7aWYoIWUmJkl0KGwpfHxlPj0yMDAmJmU8MzAwfHwzMDQ9PT1lKXt0cnl7dD1yLmNhbGwoYSxsKQp9Y2F0Y2godCl7cmV0dXJuIHZvaWQgby5lcnJvci5jYWxsKGEsdCl9by5sb2FkLmNhbGwoYSx0KX1lbHNlIG8uZXJyb3IuY2FsbChhLGwpfXZhciBhPXt9LG89dW8uZGlzcGF0Y2goImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLHM9e30sbD1uZXcgWE1MSHR0cFJlcXVlc3QsdT1udWxsO3JldHVybiF0aGlzLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGx8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3QodCl8fChsPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBsP2wub25sb2FkPWwub25lcnJvcj1pOmwub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bC5yZWFkeVN0YXRlPjMmJmkoKX0sbC5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe3ZhciBlPXVvLmV2ZW50O3VvLmV2ZW50PXQ7dHJ5e28ucHJvZ3Jlc3MuY2FsbChhLGwpfWZpbmFsbHl7dW8uZXZlbnQ9ZX19LGEuaGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9KHQrIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP3NbdF06KG51bGw9PWU/ZGVsZXRlIHNbdF06c1t0XT1lKyIiLGEpfSxhLm1pbWVUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXQ/bnVsbDp0KyIiLGEpOmV9LGEucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQsYSk6dX0sYS5yZXNwb25zZT1mdW5jdGlvbih0KXtyZXR1cm4gcj10LGF9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24odCl7YVt0XT1mdW5jdGlvbigpe3JldHVybiBhLnNlbmQuYXBwbHkoYSxbdF0uY29uY2F0KGhvKGFyZ3VtZW50cykpKX19KSxhLnNlbmQ9ZnVuY3Rpb24ocixuLGkpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKGk9bixuPW51bGwpLGwub3BlbihyLHQsITApLG51bGw9PWV8fCJhY2NlcHQiaW4gc3x8KHMuYWNjZXB0PWUrIiwqLyoiKSxsLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBjIGluIHMpbC5zZXRSZXF1ZXN0SGVhZGVyKGMsc1tjXSk7cmV0dXJuIG51bGwhPWUmJmwub3ZlcnJpZGVNaW1lVHlwZSYmbC5vdmVycmlkZU1pbWVUeXBlKGUpLG51bGwhPXUmJihsLnJlc3BvbnNlVHlwZT11KSxudWxsIT1pJiZhLm9uKCJlcnJvciIsaSkub24oImxvYWQiLGZ1bmN0aW9uKHQpe2kobnVsbCx0KX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGEsbCksbC5zZW5kKG51bGw9PW4/bnVsbDpuKSxhfSxhLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWJvcnQoKSxhfSx1by5yZWJpbmQoYSxvLCJvbiIpLG51bGw9PW4/YTphLmdldCh6dChuKSl9ZnVuY3Rpb24genQodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3QobnVsbD09ZT9yOm51bGwpfTp0fWZ1bmN0aW9uIEl0KHQpe3ZhciBlPXQucmVzcG9uc2VUeXBlO3JldHVybiBlJiYidGV4dCIhPT1lP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9ZnVuY3Rpb24gRHQodCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7bjwyJiYoZT0wKSxuPDMmJihyPURhdGUubm93KCkpO3ZhciBpPXIrZSxhPXtjOnQsdDppLG46bnVsbH07cmV0dXJuIGFzP2FzLm49YTppcz1hLGFzPWEsb3N8fChzcz1jbGVhclRpbWVvdXQoc3MpLG9zPTEsbHMoUHQpKSxhfWZ1bmN0aW9uIFB0KCl7dmFyIHQ9T3QoKSxlPVJ0KCktdDtlPjI0Pyhpc0Zpbml0ZShlKSYmKGNsZWFyVGltZW91dChzcyksc3M9c2V0VGltZW91dChQdCxlKSksb3M9MCk6KG9zPTEsbHMoUHQpKX1mdW5jdGlvbiBPdCgpe2Zvcih2YXIgdD1EYXRlLm5vdygpLGU9aXM7ZTspdD49ZS50JiZlLmModC1lLnQpJiYoZS5jPW51bGwpLGU9ZS5uO3JldHVybiB0fWZ1bmN0aW9uIFJ0KCl7Zm9yKHZhciB0LGU9aXMscj0xLzA7ZTspZS5jPyhlLnQ8ciYmKHI9ZS50KSxlPSh0PWUpLm4pOmU9dD90Lm49ZS5uOmlzPWUubjtyZXR1cm4gYXM9dCxyfWZ1bmN0aW9uIEZ0KHQsZSl7cmV0dXJuIGUtKHQ/TWF0aC5jZWlsKE1hdGgubG9nKHQpL01hdGguTE4xMCk6MSl9ZnVuY3Rpb24ganQodCxlKXt2YXIgcj1NYXRoLnBvdygxMCwzKnhvKDgtZSkpO3JldHVybntzY2FsZTplPjg/ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn06ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sc3ltYm9sOnR9fWZ1bmN0aW9uIE50KHQpe3ZhciBlPXQuZGVjaW1hbCxyPXQudGhvdXNhbmRzLG49dC5ncm91cGluZyxpPXQuY3VycmVuY3ksYT1uJiZyP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPXQubGVuZ3RoLGE9W10sbz0wLHM9blswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5lJiYocz1NYXRoLm1heCgxLGUtbCkpLGEucHVzaCh0LnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+ZSkpOylzPW5bbz0obysxKSVuLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4ocil9Ong7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWNzLmV4ZWModCksbj1yWzFdfHwiICIsbz1yWzJdfHwiPiIscz1yWzNdfHwiLSIsbD1yWzRdfHwiIix1PXJbNV0sYz0rcls2XSxoPXJbN10sZj1yWzhdLGQ9cls5XSxwPTEsbT0iIix2PSIiLGc9ITEseT0hMDtzd2l0Y2goZiYmKGY9K2Yuc3Vic3RyaW5nKDEpKSwodXx8IjAiPT09biYmIj0iPT09bykmJih1PW49IjAiLG89Ij0iKSxkKXtjYXNlIm4iOmg9ITAsZD0iZyI7YnJlYWs7Y2FzZSIlIjpwPTEwMCx2PSIlIixkPSJmIjticmVhaztjYXNlInAiOnA9MTAwLHY9IiUiLGQ9InIiO2JyZWFrO2Nhc2UiYiI6Y2FzZSJvIjpjYXNlIngiOmNhc2UiWCI6IiMiPT09bCYmKG09IjAiK2QudG9Mb3dlckNhc2UoKSk7Y2FzZSJjIjp5PSExO2Nhc2UiZCI6Zz0hMCxmPTA7YnJlYWs7Y2FzZSJzIjpwPS0xLGQ9InIifSIkIj09PWwmJihtPWlbMF0sdj1pWzFdKSwiciIhPWR8fGZ8fChkPSJnIiksbnVsbCE9ZiYmKCJnIj09ZD9mPU1hdGgubWF4KDEsTWF0aC5taW4oMjEsZikpOiJlIiE9ZCYmImYiIT1kfHwoZj1NYXRoLm1heCgwLE1hdGgubWluKDIwLGYpKSkpLGQ9aHMuZ2V0KGQpfHxCdDt2YXIgYj11JiZoO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj12O2lmKGcmJnQlMSlyZXR1cm4iIjt2YXIgaT10PDB8fDA9PT10JiYxL3Q8MD8odD0tdCwiLSIpOiItIj09PXM/IiI6cztpZihwPDApe3ZhciBsPXVvLmZvcm1hdFByZWZpeCh0LGYpO3Q9bC5zY2FsZSh0KSxyPWwuc3ltYm9sK3Z9ZWxzZSB0Kj1wO3Q9ZCh0LGYpO3ZhciB4LF8sdz10Lmxhc3RJbmRleE9mKCIuIik7aWYodzwwKXt2YXIgTT15P3QubGFzdEluZGV4T2YoImUiKTotMTtNPDA/KHg9dCxfPSIiKTooeD10LnN1YnN0cmluZygwLE0pLF89dC5zdWJzdHJpbmcoTSkpfWVsc2UgeD10LnN1YnN0cmluZygwLHcpLF89ZSt0LnN1YnN0cmluZyh3KzEpOyF1JiZoJiYoeD1hKHgsMS8wKSk7dmFyIGs9bS5sZW5ndGgreC5sZW5ndGgrXy5sZW5ndGgrKGI/MDppLmxlbmd0aCksQT1rPGM/bmV3IEFycmF5KGs9Yy1rKzEpLmpvaW4obik6IiI7cmV0dXJuIGImJih4PWEoQSt4LEEubGVuZ3RoP2MtXy5sZW5ndGg6MS8wKSksaSs9bSx0PXgrXywoIjwiPT09bz9pK3QrQToiPiI9PT1vP0EraSt0OiJeIj09PW8/QS5zdWJzdHJpbmcoMCxrPj49MSkraSt0K0Euc3Vic3RyaW5nKGspOmkrKGI/dDpBK3QpKStyfX19ZnVuY3Rpb24gQnQodCl7cmV0dXJuIHQrIiJ9ZnVuY3Rpb24gVXQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9uIFZ0KHQsZSxyKXtmdW5jdGlvbiBuKGUpe3ZhciByPXQoZSksbj1hKHIsMSk7cmV0dXJuIGUtcjxuLWU/cjpufWZ1bmN0aW9uIGkocil7cmV0dXJuIGUocj10KG5ldyBkcyhyLTEpKSwxKSxyfWZ1bmN0aW9uIGEodCxyKXtyZXR1cm4gZSh0PW5ldyBkcygrdCksciksdH1mdW5jdGlvbiBvKHQsbixhKXt2YXIgbz1pKHQpLHM9W107aWYoYT4xKWZvcig7bzxuOylyKG8pJWF8fHMucHVzaChuZXcgRGF0ZSgrbykpLGUobywxKTtlbHNlIGZvcig7bzxuOylzLnB1c2gobmV3IERhdGUoK28pKSxlKG8sMSk7cmV0dXJuIHN9ZnVuY3Rpb24gcyh0LGUscil7dHJ5e2RzPVV0O3ZhciBuPW5ldyBVdDtyZXR1cm4gbi5fPXQsbyhuLGUscil9ZmluYWxseXtkcz1EYXRlfX10LmZsb29yPXQsdC5yb3VuZD1uLHQuY2VpbD1pLHQub2Zmc2V0PWEsdC5yYW5nZT1vO3ZhciBsPXQudXRjPUh0KHQpO3JldHVybiBsLmZsb29yPWwsbC5yb3VuZD1IdChuKSxsLmNlaWw9SHQoaSksbC5vZmZzZXQ9SHQoYSksbC5yYW5nZT1zLHR9ZnVuY3Rpb24gSHQodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dHJ5e2RzPVV0O3ZhciBuPW5ldyBVdDtyZXR1cm4gbi5fPWUsdChuLHIpLl99ZmluYWxseXtkcz1EYXRlfX19ZnVuY3Rpb24gcXQodCl7ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiBlKGUpe2Zvcih2YXIgcixpLGEsbz1bXSxzPS0xLGw9MDsrK3M8bjspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShsLHMpKSxudWxsIT0oaT1tc1tyPXQuY2hhckF0KCsrcyldKSYmKHI9dC5jaGFyQXQoKytzKSksKGE9RVtyXSkmJihyPWEoZSxudWxsPT1pPyJlIj09PXI/IiAiOiIwIjppKSksby5wdXNoKHIpLGw9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UobCxzKSksby5qb2luKCIiKX12YXIgbj10Lmxlbmd0aDtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihlKXt2YXIgbj17eToxOTAwLG06MCxkOjEsSDowLE06MCxTOjAsTDowLFo6bnVsbH07aWYocihuLHQsZSwwKSE9ZS5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4gbiYmKG4uSD1uLkglMTIrMTIqbi5wKTt2YXIgaT1udWxsIT1uLlomJmRzIT09VXQsYT1uZXcoaT9VdDpkcyk7cmV0dXJuImoiaW4gbj9hLnNldEZ1bGxZZWFyKG4ueSwwLG4uaik6IlciaW4gbnx8IlUiaW4gbj8oInciaW4gbnx8KG4udz0iVyJpbiBuPzE6MCksYS5zZXRGdWxsWWVhcihuLnksMCwxKSxhLnNldEZ1bGxZZWFyKG4ueSwwLCJXImluIG4/KG4udys2KSU3Kzcqbi5XLShhLmdldERheSgpKzUpJTc6bi53Kzcqbi5VLShhLmdldERheSgpKzYpJTcpKTphLnNldEZ1bGxZZWFyKG4ueSxuLm0sbi5kKSxhLnNldEhvdXJzKG4uSCsobi5aLzEwMHwwKSxuLk0rbi5aJTEwMCxuLlMsbi5MKSxpP2EuXzphfSxlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9ZnVuY3Rpb24gcih0LGUscixuKXtmb3IodmFyIGksYSxvLHM9MCxsPWUubGVuZ3RoLHU9ci5sZW5ndGg7czxsOyl7aWYobj49dSlyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChzKyspKSl7aWYobz1lLmNoYXJBdChzKyspLCEoYT1MW28gaW4gbXM/ZS5jaGFyQXQocysrKTpvXSl8fChuPWEodCxyLG4pKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9ci5jaGFyQ29kZUF0KG4rKykpcmV0dXJuLTF9cmV0dXJuIG59ZnVuY3Rpb24gbih0LGUscil7dy5sYXN0SW5kZXg9MDt2YXIgbj13LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1NLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGkodCxlLHIpe3gubGFzdEluZGV4PTA7dmFyIG49eC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9Xy5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBhKHQsZSxyKXtULmxhc3RJbmRleD0wO3ZhciBuPVQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPVMuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbyh0LGUscil7ay5sYXN0SW5kZXg9MDt2YXIgbj1rLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1BLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHModCxlLG4pe3JldHVybiByKHQsRS5jLnRvU3RyaW5nKCksZSxuKX1mdW5jdGlvbiBsKHQsZSxuKXtyZXR1cm4gcih0LEUueC50b1N0cmluZygpLGUsbil9ZnVuY3Rpb24gdSh0LGUsbil7cmV0dXJuIHIodCxFLlgudG9TdHJpbmcoKSxlLG4pfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPWIuZ2V0KGUuc2xpY2UocixyKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09bj8tMToodC5wPW4scil9dmFyIGg9dC5kYXRlVGltZSxmPXQuZGF0ZSxkPXQudGltZSxwPXQucGVyaW9kcyxtPXQuZGF5cyx2PXQuc2hvcnREYXlzLGc9dC5tb250aHMseT10LnNob3J0TW9udGhzO2UudXRjPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dHJ5e2RzPVV0O3ZhciBlPW5ldyBkcztyZXR1cm4gZS5fPXQsbihlKX1maW5hbGx5e2RzPURhdGV9fXZhciBuPWUodCk7cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCl7dHJ5e2RzPVV0O3ZhciBlPW4ucGFyc2UodCk7cmV0dXJuIGUmJmUuX31maW5hbGx5e2RzPURhdGV9fSxyLnRvU3RyaW5nPW4udG9TdHJpbmcscn0sZS5tdWx0aT1lLnV0Yy5tdWx0aT1jZTt2YXIgYj11by5tYXAoKSx4PVl0KG0pLF89WHQobSksdz1ZdCh2KSxNPVh0KHYpLGs9WXQoZyksQT1YdChnKSxUPVl0KHkpLFM9WHQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Yi5zZXQodC50b0xvd2VyQ2FzZSgpLGUpfSk7dmFyIEU9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIHZbdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIG1bdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHlbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gZ1t0LmdldE1vbnRoKCldfSxjOmUoaCksZDpmdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LmdldERhdGUoKSxlLDIpfSxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0RGF0ZSgpLGUsMil9LEg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRIb3VycygpLGUsMil9LEk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRIb3VycygpJTEyfHwxMixlLDIpfSxqOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KDErZnMuZGF5T2ZZZWFyKHQpLGUsMyl9LEw6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfSxtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0TW9udGgoKSsxLGUsMil9LE06ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRNaW51dGVzKCksZSwyKX0scDpmdW5jdGlvbih0KXtyZXR1cm4gcFsrKHQuZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LmdldFNlY29uZHMoKSxlLDIpfSxVOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KGZzLnN1bmRheU9mWWVhcih0KSxlLDIpfSx3OmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERheSgpfSxXOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KGZzLm1vbmRheU9mWWVhcih0KSxlLDIpfSx4OmUoZiksWDplKGQpLHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfSxZOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0KHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX0sWjpsZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxMPXthOm4sQTppLGI6YSxCOm8sYzpzLGQ6cmUsZTpyZSxIOmllLEk6aWUsajpuZSxMOnNlLG06ZWUsTTphZSxwOmMsUzpvZSxVOlp0LHc6V3QsVzpKdCx4OmwsWDp1LHk6UXQsWTpLdCxaOiR0LCIlIjp1ZX07cmV0dXJuIGV9ZnVuY3Rpb24gR3QodCxlLHIpe3ZhciBuPXQ8MD8iLSI6IiIsaT0obj8tdDp0KSsiIixhPWkubGVuZ3RoO3JldHVybiBuKyhhPHI/bmV3IEFycmF5KHItYSsxKS5qb2luKGUpK2k6aSl9ZnVuY3Rpb24gWXQodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKHVvLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBYdCh0KXtmb3IodmFyIGU9bmV3IGgscj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnNldCh0W3JdLnRvTG93ZXJDYXNlKCkscik7cmV0dXJuIGV9ZnVuY3Rpb24gV3QodCxlLHIpe3ZzLmxhc3RJbmRleD0wO3ZhciBuPXZzLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuPyh0Lnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWnQodCxlLHIpe3ZzLmxhc3RJbmRleD0wO3ZhciBuPXZzLmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKdCh0LGUscil7dnMubGFzdEluZGV4PTA7dmFyIG49dnMuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEt0KHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8odC55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF0KHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC55PXRlKCtuWzBdKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkdCh0LGUscil7cmV0dXJuL15bKy1dXGR7NH0kLy50ZXN0KGU9ZS5zbGljZShyLHIrNSkpPyh0Llo9LWUscis1KTotMX1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gdCsodD42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gZWUodCxlLHIpe3ZzLmxhc3RJbmRleD0wO3ZhciBuPXZzLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJlKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5lKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5qPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGllKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGFlKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9lKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNlKHQsZSxyKXt2cy5sYXN0SW5kZXg9MDt2YXIgbj12cy5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxlKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSxyPWU+MD8iLSI6IisiLG49eG8oZSkvNjB8MCxpPXhvKGUpJTYwO3JldHVybiByK0d0KG4sIjAiLDIpK0d0KGksIjAiLDIpfWZ1bmN0aW9uIHVlKHQsZSxyKXtncy5sYXN0SW5kZXg9MDt2YXIgbj1ncy5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIGNlKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPS0xOysrcjxlOyl0W3JdWzBdPXRoaXModFtyXVswXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj0wLG49dFtyXTshblsxXShlKTspbj10Wysrcl07cmV0dXJuIG5bMF0oZSl9fWZ1bmN0aW9uIGhlKCl7fWZ1bmN0aW9uIGZlKHQsZSxyKXt2YXIgbj1yLnM9dCtlLGk9bi10LGE9bi1pO3IudD10LWErKGUtaSl9ZnVuY3Rpb24gZGUodCxlKXt0JiZfcy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZfc1t0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gcGUodCxlLHIpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aC1yO2ZvcihlLmxpbmVTdGFydCgpOysraTxhOyluPXRbaV0sZS5wb2ludChuWzBdLG5bMV0sblsyXSk7ZS5saW5lRW5kKCl9ZnVuY3Rpb24gbWUodCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylwZSh0W3JdLGUsMSk7ZS5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gdmUoKXtmdW5jdGlvbiB0KHQsZSl7dCo9SG8sZT1lKkhvLzIrTm8vNDt2YXIgcj10LW4sbz1yPj0wPzE6LTEscz1vKnIsbD1NYXRoLmNvcyhlKSx1PU1hdGguc2luKGUpLGM9YSp1LGg9aSpsK2MqTWF0aC5jb3MocyksZj1jKm8qTWF0aC5zaW4ocyk7TXMuYWRkKE1hdGguYXRhbjIoZixoKSksbj10LGk9bCxhPXV9dmFyIGUscixuLGksYTtrcy5wb2ludD1mdW5jdGlvbihvLHMpe2tzLnBvaW50PXQsbj0oZT1vKSpIbyxpPU1hdGguY29zKHM9KHI9cykqSG8vMitOby80KSxhPU1hdGguc2luKHMpfSxrcy5saW5lRW5kPWZ1bmN0aW9uKCl7dChlLHIpfX1mdW5jdGlvbiBnZSh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPU1hdGguY29zKHIpO3JldHVybltuKk1hdGguY29zKGUpLG4qTWF0aC5zaW4oZSksTWF0aC5zaW4ocildfWZ1bmN0aW9uIHllKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfWZ1bmN0aW9uIGJlKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX1mdW5jdGlvbiB4ZSh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIF9lKHQsZSl7cmV0dXJuW3RbMF0qZSx0WzFdKmUsdFsyXSplXX1mdW5jdGlvbiB3ZSh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0pO3RbMF0vPWUsdFsxXS89ZSx0WzJdLz1lfWZ1bmN0aW9uIE1lKHQpe3JldHVybltNYXRoLmF0YW4yKHRbMV0sdFswXSksbnQodFsyXSldfWZ1bmN0aW9uIGtlKHQsZSl7cmV0dXJuIHhvKHRbMF0tZVswXSk8Rm8mJnhvKHRbMV0tZVsxXSk8Rm99ZnVuY3Rpb24gQWUodCxlKXt0Kj1Ibzt2YXIgcj1NYXRoLmNvcyhlKj1Ibyk7VGUocipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpKX1mdW5jdGlvbiBUZSh0LGUscil7KytBcyxTcys9KHQtU3MpL0FzLEVzKz0oZS1FcykvQXMsTHMrPShyLUxzKS9Bc31mdW5jdGlvbiBTZSgpe2Z1bmN0aW9uIHQodCxpKXt0Kj1Ibzt2YXIgYT1NYXRoLmNvcyhpKj1Ibyksbz1hKk1hdGguY29zKHQpLHM9YSpNYXRoLnNpbih0KSxsPU1hdGguc2luKGkpLHU9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHU9cipsLW4qcykqdSsodT1uKm8tZSpsKSp1Kyh1PWUqcy1yKm8pKnUpLGUqbytyKnMrbipsKTtUcys9dSxDcys9dSooZSsoZT1vKSksenMrPXUqKHIrKHI9cykpLElzKz11KihuKyhuPWwpKSxUZShlLHIsbil9dmFyIGUscixuO1JzLnBvaW50PWZ1bmN0aW9uKGksYSl7aSo9SG87dmFyIG89TWF0aC5jb3MoYSo9SG8pO2U9bypNYXRoLmNvcyhpKSxyPW8qTWF0aC5zaW4oaSksbj1NYXRoLnNpbihhKSxScy5wb2ludD10LFRlKGUscixuKX19ZnVuY3Rpb24gRWUoKXtScy5wb2ludD1BZX1mdW5jdGlvbiBMZSgpe2Z1bmN0aW9uIHQodCxlKXt0Kj1Ibzt2YXIgcj1NYXRoLmNvcyhlKj1Ibyksbz1yKk1hdGguY29zKHQpLHM9cipNYXRoLnNpbih0KSxsPU1hdGguc2luKGUpLHU9aSpsLWEqcyxjPWEqby1uKmwsaD1uKnMtaSpvLGY9TWF0aC5zcXJ0KHUqdStjKmMraCpoKSxkPW4qbytpKnMrYSpsLHA9ZiYmLXJ0KGQpL2YsbT1NYXRoLmF0YW4yKGYsZCk7RHMrPXAqdSxQcys9cCpjLE9zKz1wKmgsVHMrPW0sQ3MrPW0qKG4rKG49bykpLHpzKz1tKihpKyhpPXMpKSxJcys9bSooYSsoYT1sKSksVGUobixpLGEpfXZhciBlLHIsbixpLGE7UnMucG9pbnQ9ZnVuY3Rpb24obyxzKXtlPW8scj1zLFJzLnBvaW50PXQsbyo9SG87dmFyIGw9TWF0aC5jb3Mocyo9SG8pO249bCpNYXRoLmNvcyhvKSxpPWwqTWF0aC5zaW4obyksYT1NYXRoLnNpbihzKSxUZShuLGksYSl9LFJzLmxpbmVFbmQ9ZnVuY3Rpb24oKXt0KGUsciksUnMubGluZUVuZD1FZSxScy5wb2ludD1BZX19ZnVuY3Rpb24gQ2UodCxlKXtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHI9dChyLG4pLGUoclswXSxyWzFdKX1yZXR1cm4gdC5pbnZlcnQmJmUuaW52ZXJ0JiYoci5pbnZlcnQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4ocj1lLmludmVydChyLG4pKSYmdC5pbnZlcnQoclswXSxyWzFdKX0pLHJ9ZnVuY3Rpb24gemUoKXtyZXR1cm4hMH1mdW5jdGlvbiBJZSh0LGUscixuLGkpe3ZhciBhPVtdLG89W107aWYodC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxyPXRbMF0sbj10W2VdO2lmKGtlKHIsbikpe2kubGluZVN0YXJ0KCk7Zm9yKHZhciBzPTA7czxlOysrcylpLnBvaW50KChyPXRbc10pWzBdLHJbMV0pO3JldHVybiB2b2lkIGkubGluZUVuZCgpfXZhciBsPW5ldyBQZShyLHQsbnVsbCwhMCksdT1uZXcgUGUocixudWxsLGwsITEpO2wubz11LGEucHVzaChsKSxvLnB1c2godSksbD1uZXcgUGUobix0LG51bGwsITEpLHU9bmV3IFBlKG4sbnVsbCxsLCEwKSxsLm89dSxhLnB1c2gobCksby5wdXNoKHUpfX0pLG8uc29ydChlKSxEZShhKSxEZShvKSxhLmxlbmd0aCl7Zm9yKHZhciBzPTAsbD1yLHU9by5sZW5ndGg7czx1OysrcylvW3NdLmU9bD0hbDtmb3IodmFyIGMsaCxmPWFbMF07Oyl7Zm9yKHZhciBkPWYscD0hMDtkLnY7KWlmKChkPWQubik9PT1mKXJldHVybjtjPWQueixpLmxpbmVTdGFydCgpO2Rve2lmKGQudj1kLm8udj0hMCxkLmUpe2lmKHApZm9yKHZhciBzPTAsdT1jLmxlbmd0aDtzPHU7KytzKWkucG9pbnQoKGg9Y1tzXSlbMF0saFsxXSk7ZWxzZSBuKGQueCxkLm4ueCwxLGkpO2Q9ZC5ufWVsc2V7aWYocCl7Yz1kLnAuejtmb3IodmFyIHM9Yy5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPWNbc10pWzBdLGhbMV0pfWVsc2UgbihkLngsZC5wLngsLTEsaSk7ZD1kLnB9ZD1kLm8sYz1kLnoscD0hcH13aGlsZSghZC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIERlKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fWZ1bmN0aW9uIFBlKHQsZSxyLG4pe3RoaXMueD10LHRoaXMuej1lLHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gT2UodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSl7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPWkoZSxyKTt0KGU9blswXSxyPW5bMV0pJiZhLnBvaW50KGUscil9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWkodCxlKTt2LnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gbCgpe3kucG9pbnQ9cyx2LmxpbmVTdGFydCgpfWZ1bmN0aW9uIHUoKXt5LnBvaW50PW8sdi5saW5lRW5kKCl9ZnVuY3Rpb24gYyh0LGUpe20ucHVzaChbdCxlXSk7dmFyIHI9aSh0LGUpO3gucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBoKCl7eC5saW5lU3RhcnQoKSxtPVtdfWZ1bmN0aW9uIGYoKXtjKG1bMF1bMF0sbVswXVsxXSkseC5saW5lRW5kKCk7dmFyIHQsZT14LmNsZWFuKCkscj1iLmJ1ZmZlcigpLG49ci5sZW5ndGg7aWYobS5wb3AoKSxwLnB1c2gobSksbT1udWxsLG4paWYoMSZlKXt0PXJbMF07dmFyIGksbj10Lmxlbmd0aC0xLG89LTE7aWYobj4wKXtmb3IoX3x8KGEucG9seWdvblN0YXJ0KCksXz0hMCksYS5saW5lU3RhcnQoKTsrK288bjspYS5wb2ludCgoaT10W29dKVswXSxpWzFdKTthLmxpbmVFbmQoKX19ZWxzZSBuPjEmJjImZSYmci5wdXNoKHIucG9wKCkuY29uY2F0KHIuc2hpZnQoKSkpLGQucHVzaChyLmZpbHRlcihSZSkpfXZhciBkLHAsbSx2PWUoYSksZz1pLmludmVydChuWzBdLG5bMV0pLHk9e3BvaW50Om8sbGluZVN0YXJ0OmwsbGluZUVuZDp1LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3kucG9pbnQ9Yyx5LmxpbmVTdGFydD1oLHkubGluZUVuZD1mLGQ9W10scD1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3kucG9pbnQ9byx5LmxpbmVTdGFydD1sLHkubGluZUVuZD11LGQ9dW8ubWVyZ2UoZCk7dmFyIHQ9VmUoZyxwKTtkLmxlbmd0aD8oX3x8KGEucG9seWdvblN0YXJ0KCksXz0hMCksSWUoZCxqZSx0LHIsYSkpOnQmJihffHwoYS5wb2x5Z29uU3RhcnQoKSxfPSEwKSxhLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCkpLF8mJihhLnBvbHlnb25FbmQoKSxfPSExKSxkPXA9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7YS5wb2x5Z29uU3RhcnQoKSxhLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsYSksYS5saW5lRW5kKCksYS5wb2x5Z29uRW5kKCl9fSxiPUZlKCkseD1lKGIpLF89ITE7cmV0dXJuIHl9fWZ1bmN0aW9uIFJlKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIEZlKCl7dmFyIHQsZT1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxwb2ludDpmdW5jdGlvbihlLHIpe3QucHVzaChbZSxyXSl9LGxpbmVFbmQ6TSxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgcj1lO3JldHVybiBlPVtdLHQ9bnVsbCxyfSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9fX1mdW5jdGlvbiBqZSh0LGUpe3JldHVybigodD10LngpWzBdPDA/dFsxXS1Wby1GbzpWby10WzFdKS0oKGU9ZS54KVswXTwwP2VbMV0tVm8tRm86Vm8tZVsxXSl9ZnVuY3Rpb24gTmUodCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLG8pe3ZhciBzPWE+MD9ObzotTm8sbD14byhhLXIpO3hvKGwtTm8pPEZvPyh0LnBvaW50KHIsbj0obitvKS8yPjA/Vm86LVZvKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsbiksdC5wb2ludChhLG4pLGU9MCk6aSE9PXMmJmw+PU5vJiYoeG8oci1pKTxGbyYmKHItPWkqRm8pLHhvKGEtcyk8Rm8mJihhLT1zKkZvKSxuPUJlKHIsbixhLG8pLHQucG9pbnQoaSxuKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxuKSxlPTApLHQucG9pbnQocj1hLG49byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCkscj1uPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19ZnVuY3Rpb24gQmUodCxlLHIsbil7dmFyIGksYSxvPU1hdGguc2luKHQtcik7cmV0dXJuIHhvKG8pPkZvP01hdGguYXRhbigoTWF0aC5zaW4oZSkqKGE9TWF0aC5jb3MobikpKk1hdGguc2luKHIpLU1hdGguc2luKG4pKihpPU1hdGguY29zKGUpKSpNYXRoLnNpbih0KSkvKGkqYSpvKSk6KGUrbikvMn1mdW5jdGlvbiBVZSh0LGUscixuKXt2YXIgaTtpZihudWxsPT10KWk9cipWbyxuLnBvaW50KC1ObyxpKSxuLnBvaW50KDAsaSksbi5wb2ludChObyxpKSxuLnBvaW50KE5vLDApLG4ucG9pbnQoTm8sLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtTm8sLWkpLG4ucG9pbnQoLU5vLDApLG4ucG9pbnQoLU5vLGkpO2Vsc2UgaWYoeG8odFswXS1lWzBdKT5Gbyl7dmFyIGE9dFswXTxlWzBdP05vOi1ObztpPXIqYS8yLG4ucG9pbnQoLWEsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQoYSxpKX1lbHNlIG4ucG9pbnQoZVswXSxlWzFdKX1mdW5jdGlvbiBWZSh0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9W01hdGguc2luKHIpLC1NYXRoLmNvcyhyKSwwXSxhPTAsbz0wO01zLnJlc2V0KCk7Zm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7KytzKXt2YXIgdT1lW3NdLGM9dS5sZW5ndGg7aWYoYylmb3IodmFyIGg9dVswXSxmPWhbMF0sZD1oWzFdLzIrTm8vNCxwPU1hdGguc2luKGQpLG09TWF0aC5jb3MoZCksdj0xOzspe3Y9PT1jJiYodj0wKSx0PXVbdl07dmFyIGc9dFswXSx5PXRbMV0vMitOby80LGI9TWF0aC5zaW4oeSkseD1NYXRoLmNvcyh5KSxfPWctZix3PV8+PTA/MTotMSxNPXcqXyxrPU0+Tm8sQT1wKmI7aWYoTXMuYWRkKE1hdGguYXRhbjIoQSp3Kk1hdGguc2luKE0pLG0qeCtBKk1hdGguY29zKE0pKSksYSs9az9fK3cqQm86XyxrXmY+PXJeZz49cil7dmFyIFQ9YmUoZ2UoaCksZ2UodCkpO3dlKFQpO3ZhciBTPWJlKGksVCk7d2UoUyk7dmFyIEU9KGteXz49MD8tMToxKSpudChTWzJdKTsobj5FfHxuPT09RSYmKFRbMF18fFRbMV0pKSYmKG8rPWteXz49MD8xOi0xKX1pZighdisrKWJyZWFrO2Y9ZyxwPWIsbT14LGg9dH19cmV0dXJuKGE8LUZvfHxhPEZvJiZNczwtRm8pXjEmb31mdW5jdGlvbiBIZSh0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIE1hdGguY29zKHQpKk1hdGguY29zKGUpPmF9ZnVuY3Rpb24gcih0KXt2YXIgcixhLGwsdSxjO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt1PWw9ITEsYz0xfSxwb2ludDpmdW5jdGlvbihoLGYpe3ZhciBkLHA9W2gsZl0sbT1lKGgsZiksdj1vP20/MDppKGgsZik6bT9pKGgrKGg8MD9ObzotTm8pLGYpOjA7aWYoIXImJih1PWw9bSkmJnQubGluZVN0YXJ0KCksbSE9PWwmJihkPW4ocixwKSwoa2UocixkKXx8a2UocCxkKSkmJihwWzBdKz1GbyxwWzFdKz1GbyxtPWUocFswXSxwWzFdKSkpLG0hPT1sKWM9MCxtPyh0LmxpbmVTdGFydCgpLGQ9bihwLHIpLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9bihyLHApLHQucG9pbnQoZFswXSxkWzFdKSx0LmxpbmVFbmQoKSkscj1kO2Vsc2UgaWYocyYmciYmb15tKXt2YXIgZzt2JmF8fCEoZz1uKHAsciwhMCkpfHwoYz0wLG8/KHQubGluZVN0YXJ0KCksdC5wb2ludChnWzBdWzBdLGdbMF1bMV0pLHQucG9pbnQoZ1sxXVswXSxnWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQoZ1sxXVswXSxnWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQoZ1swXVswXSxnWzBdWzFdKSkpfSFtfHxyJiZrZShyLHApfHx0LnBvaW50KHBbMF0scFsxXSkscj1wLGw9bSxhPXZ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtsJiZ0LmxpbmVFbmQoKSxyPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGN8KHUmJmwpPDwxfX19ZnVuY3Rpb24gbih0LGUscil7dmFyIG49Z2UodCksaT1nZShlKSxvPVsxLDAsMF0scz1iZShuLGkpLGw9eWUocyxzKSx1PXNbMF0sYz1sLXUqdTtpZighYylyZXR1cm4hciYmdDt2YXIgaD1hKmwvYyxmPS1hKnUvYyxkPWJlKG8scykscD1fZShvLGgpO3hlKHAsX2UocyxmKSk7dmFyIG09ZCx2PXllKHAsbSksZz15ZShtLG0pLHk9dip2LWcqKHllKHAscCktMSk7aWYoISh5PDApKXt2YXIgYj1NYXRoLnNxcnQoeSkseD1fZShtLCgtdi1iKS9nKTtpZih4ZSh4LHApLHg9TWUoeCksIXIpcmV0dXJuIHg7dmFyIF8sdz10WzBdLE09ZVswXSxrPXRbMV0sQT1lWzFdO008dyYmKF89dyx3PU0sTT1fKTt2YXIgVD1NLXcsUz14byhULU5vKTxGbyxFPVN8fFQ8Rm87aWYoIVMmJkE8ayYmKF89ayxrPUEsQT1fKSxFP1M/aytBPjBeeFsxXTwoeG8oeFswXS13KTxGbz9rOkEpOms8PXhbMV0mJnhbMV08PUE6VD5Ob14odzw9eFswXSYmeFswXTw9TSkpe3ZhciBMPV9lKG0sKC12K2IpL2cpO3JldHVybiB4ZShMLHApLFt4LE1lKEwpXX19fWZ1bmN0aW9uIGkoZSxyKXt2YXIgbj1vP3Q6Tm8tdCxpPTA7cmV0dXJuIGU8LW4/aXw9MTplPm4mJihpfD0yKSxyPC1uP2l8PTQ6cj5uJiYoaXw9OCksaX12YXIgYT1NYXRoLmNvcyh0KSxvPWE+MCxzPXhvKGEpPkZvO3JldHVybiBPZShlLHIsdnIodCw2KkhvKSxvP1swLC10XTpbLU5vLHQtTm9dKX1mdW5jdGlvbiBxZSh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIGEsbz1pLmEscz1pLmIsbD1vLngsdT1vLnksYz1zLngsaD1zLnksZj0wLGQ9MSxwPWMtbCxtPWgtdTtpZihhPXQtbCxwfHwhKGE+MCkpe2lmKGEvPXAscDwwKXtpZihhPGYpcmV0dXJuO2E8ZCYmKGQ9YSl9ZWxzZSBpZihwPjApe2lmKGE+ZClyZXR1cm47YT5mJiYoZj1hKX1pZihhPXItbCxwfHwhKGE8MCkpe2lmKGEvPXAscDwwKXtpZihhPmQpcmV0dXJuO2E+ZiYmKGY9YSl9ZWxzZSBpZihwPjApe2lmKGE8ZilyZXR1cm47YTxkJiYoZD1hKX1pZihhPWUtdSxtfHwhKGE+MCkpe2lmKGEvPW0sbTwwKXtpZihhPGYpcmV0dXJuO2E8ZCYmKGQ9YSl9ZWxzZSBpZihtPjApe2lmKGE+ZClyZXR1cm47YT5mJiYoZj1hKX1pZihhPW4tdSxtfHwhKGE8MCkpe2lmKGEvPW0sbTwwKXtpZihhPmQpcmV0dXJuO2E+ZiYmKGY9YSl9ZWxzZSBpZihtPjApe2lmKGE8ZilyZXR1cm47YTxkJiYoZD1hKX1yZXR1cm4gZj4wJiYoaS5hPXt4OmwrZipwLHk6dStmKm19KSxkPDEmJihpLmI9e3g6bCtkKnAseTp1K2QqbX0pLGl9fX19fX1mdW5jdGlvbiBHZSh0LGUscixuKXtmdW5jdGlvbiBpKG4saSl7cmV0dXJuIHhvKG5bMF0tdCk8Rm8/aT4wPzA6Mzp4byhuWzBdLXIpPEZvP2k+MD8yOjE6eG8oblsxXS1lKTxGbz9pPjA/MTowOmk+MD8zOjJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBvKHQueCxlLngpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1pKHQsMSksbj1pKGUsMSk7cmV0dXJuIHIhPT1uP3ItbjowPT09cj9lWzFdLXRbMV06MT09PXI/dFswXS1lWzBdOjI9PT1yP3RbMV0tZVsxXTplWzBdLXRbMF19cmV0dXJuIGZ1bmN0aW9uKHMpe2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPTAscj12Lmxlbmd0aCxuPXRbMV0saT0wO2k8cjsrK2kpZm9yKHZhciBhLG89MSxzPXZbaV0sbD1zLmxlbmd0aCx1PXNbMF07bzxsOysrbylhPXNbb10sdVsxXTw9bj9hWzFdPm4mJmV0KHUsYSx0KT4wJiYrK2U6YVsxXTw9biYmZXQodSxhLHQpPDAmJi0tZSx1PWE7cmV0dXJuIDAhPT1lfWZ1bmN0aW9uIHUoYSxzLGwsdSl7dmFyIGM9MCxoPTA7aWYobnVsbD09YXx8KGM9aShhLGwpKSE9PShoPWkocyxsKSl8fG8oYSxzKTwwXmw+MClkb3t1LnBvaW50KDA9PT1jfHwzPT09Yz90OnIsYz4xP246ZSl9d2hpbGUoKGM9KGMrbCs0KSU0KSE9PWgpO2Vsc2UgdS5wb2ludChzWzBdLHNbMV0pfWZ1bmN0aW9uIGMoaSxhKXtyZXR1cm4gdDw9aSYmaTw9ciYmZTw9YSYmYTw9bn1mdW5jdGlvbiBoKHQsZSl7Yyh0LGUpJiZzLnBvaW50KHQsZSl9ZnVuY3Rpb24gZigpe0wucG9pbnQ9cCx2JiZ2LnB1c2goZz1bXSksaz0hMCxNPSExLF89dz1OYU59ZnVuY3Rpb24gZCgpe20mJihwKHksYikseCYmTSYmUy5yZWpvaW4oKSxtLnB1c2goUy5idWZmZXIoKSkpLEwucG9pbnQ9aCxNJiZzLmxpbmVFbmQoKX1mdW5jdGlvbiBwKHQsZSl7dD1NYXRoLm1heCgtanMsTWF0aC5taW4oanMsdCkpLGU9TWF0aC5tYXgoLWpzLE1hdGgubWluKGpzLGUpKTt2YXIgcj1jKHQsZSk7aWYodiYmZy5wdXNoKFt0LGVdKSxrKXk9dCxiPWUseD1yLGs9ITEsciYmKHMubGluZVN0YXJ0KCkscy5wb2ludCh0LGUpKTtlbHNlIGlmKHImJk0pcy5wb2ludCh0LGUpO2Vsc2V7dmFyIG49e2E6e3g6Xyx5Ond9LGI6e3g6dCx5OmV9fTtFKG4pPyhNfHwocy5saW5lU3RhcnQoKSxzLnBvaW50KG4uYS54LG4uYS55KSkscy5wb2ludChuLmIueCxuLmIueSkscnx8cy5saW5lRW5kKCksQT0hMSk6ciYmKHMubGluZVN0YXJ0KCkscy5wb2ludCh0LGUpLEE9ITEpfV89dCx3PWUsTT1yfXZhciBtLHYsZyx5LGIseCxfLHcsTSxrLEEsVD1zLFM9RmUoKSxFPXFlKHQsZSxyLG4pLEw9e3BvaW50OmgsbGluZVN0YXJ0OmYsbGluZUVuZDpkLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3M9UyxtPVtdLHY9W10sQT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3M9VCxtPXVvLm1lcmdlKG0pO3ZhciBlPWwoW3Qsbl0pLHI9QSYmZSxpPW0ubGVuZ3RoOyhyfHxpKSYmKHMucG9seWdvblN0YXJ0KCksciYmKHMubGluZVN0YXJ0KCksdShudWxsLG51bGwsMSxzKSxzLmxpbmVFbmQoKSksaSYmSWUobSxhLGUsdSxzKSxzLnBvbHlnb25FbmQoKSksbT12PWc9bnVsbH19O3JldHVybiBMfX1mdW5jdGlvbiBZZSh0KXt2YXIgZT0wLHI9Tm8vMyxuPWxyKHQpLGk9bihlLHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKGU9dFswXSpOby8xODAscj10WzFdKk5vLzE4MCk6W2UvTm8qMTgwLHIvTm8qMTgwXX0saX1mdW5jdGlvbiBYZSh0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1NYXRoLnNxcnQoYS0yKmkqTWF0aC5zaW4oZSkpL2k7cmV0dXJuW3IqTWF0aC5zaW4odCo9aSksby1yKk1hdGguY29zKHQpXX12YXIgbj1NYXRoLnNpbih0KSxpPShuK01hdGguc2luKGUpKS8yLGE9MStuKigyKmktbiksbz1NYXRoLnNxcnQoYSkvaTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1vLWU7cmV0dXJuW01hdGguYXRhbjIodCxyKS9pLG50KChhLSh0KnQrcipyKSppKmkpLygyKmkpKV19LHJ9ZnVuY3Rpb24gV2UoKXtmdW5jdGlvbiB0KHQsZSl7QnMrPWkqdC1uKmUsbj10LGk9ZX12YXIgZSxyLG4saTtHcy5wb2ludD1mdW5jdGlvbihhLG8pe0dzLnBvaW50PXQsZT1uPWEscj1pPW99LEdzLmxpbmVFbmQ9ZnVuY3Rpb24oKXt0KGUscil9fWZ1bmN0aW9uIFplKHQsZSl7dDxVcyYmKFVzPXQpLHQ+SHMmJihIcz10KSxlPFZzJiYoVnM9ZSksZT5xcyYmKHFzPWUpfWZ1bmN0aW9uIEplKCl7ZnVuY3Rpb24gdCh0LGUpe28ucHVzaCgiTSIsdCwiLCIsZSxhKX1mdW5jdGlvbiBlKHQsZSl7by5wdXNoKCJNIix0LCIsIixlKSxzLnBvaW50PXJ9ZnVuY3Rpb24gcih0LGUpe28ucHVzaCgiTCIsdCwiLCIsZSl9ZnVuY3Rpb24gbigpe3MucG9pbnQ9dH1mdW5jdGlvbiBpKCl7by5wdXNoKCJaIil9dmFyIGE9S2UoNC41KSxvPVtdLHM9e3BvaW50OnQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7cy5wb2ludD1lfSxsaW5lRW5kOm4scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cy5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtzLmxpbmVFbmQ9bixzLnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiBhPUtlKHQpLHN9LHJlc3VsdDpmdW5jdGlvbigpe2lmKG8ubGVuZ3RoKXt2YXIgdD1vLmpvaW4oIiIpO3JldHVybiBvPVtdLHR9fX07cmV0dXJuIHN9ZnVuY3Rpb24gS2UodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZnVuY3Rpb24gUWUodCxlKXtTcys9dCxFcys9ZSwrK0xzfWZ1bmN0aW9uICRlKCl7ZnVuY3Rpb24gdCh0LG4pe3ZhciBpPXQtZSxhPW4tcixvPU1hdGguc3FydChpKmkrYSphKTtDcys9byooZSt0KS8yLHpzKz1vKihyK24pLzIsSXMrPW8sUWUoZT10LHI9bil9dmFyIGUscjtYcy5wb2ludD1mdW5jdGlvbihuLGkpe1hzLnBvaW50PXQsUWUoZT1uLHI9aSl9fWZ1bmN0aW9uIHRyKCl7WHMucG9pbnQ9UWV9ZnVuY3Rpb24gZXIoKXtmdW5jdGlvbiB0KHQsZSl7dmFyIHI9dC1uLGE9ZS1pLG89TWF0aC5zcXJ0KHIqcithKmEpO0NzKz1vKihuK3QpLzIsenMrPW8qKGkrZSkvMixJcys9byxvPWkqdC1uKmUsRHMrPW8qKG4rdCksUHMrPW8qKGkrZSksT3MrPTMqbyxRZShuPXQsaT1lKX12YXIgZSxyLG4saTtYcy5wb2ludD1mdW5jdGlvbihhLG8pe1hzLnBvaW50PXQsUWUoZT1uPWEscj1pPW8pfSxYcy5saW5lRW5kPWZ1bmN0aW9uKCl7dChlLHIpfX1mdW5jdGlvbiBycih0KXtmdW5jdGlvbiBlKGUscil7dC5tb3ZlVG8oZStvLHIpLHQuYXJjKGUscixvLDAsQm8pfWZ1bmN0aW9uIHIoZSxyKXt0Lm1vdmVUbyhlLHIpLHMucG9pbnQ9bn1mdW5jdGlvbiBuKGUscil7dC5saW5lVG8oZSxyKX1mdW5jdGlvbiBpKCl7cy5wb2ludD1lfWZ1bmN0aW9uIGEoKXt0LmNsb3NlUGF0aCgpfXZhciBvPTQuNSxzPXtwb2ludDplLGxpbmVTdGFydDpmdW5jdGlvbigpe3MucG9pbnQ9cn0sbGluZUVuZDppLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3MubGluZUVuZD1hfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cy5saW5lRW5kPWkscy5wb2ludD1lfSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gbz10LHN9LHJlc3VsdDpNfTtyZXR1cm4gc31mdW5jdGlvbiBucih0KXtmdW5jdGlvbiBlKHQpe3JldHVybihzP246cikodCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gb3IoZSxmdW5jdGlvbihyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX0pfWZ1bmN0aW9uIG4oZSl7ZnVuY3Rpb24gcihyLG4pe3I9dChyLG4pLGUucG9pbnQoclswXSxyWzFdKX1mdW5jdGlvbiBuKCl7Yj1OYU4say5wb2ludD1hLGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYShyLG4pe3ZhciBhPWdlKFtyLG5dKSxvPXQocixuKTtpKGIseCx5LF8sdyxNLGI9b1swXSx4PW9bMV0seT1yLF89YVswXSx3PWFbMV0sTT1hWzJdLHMsZSksZS5wb2ludChiLHgpfWZ1bmN0aW9uIG8oKXtrLnBvaW50PXIsZS5saW5lRW5kKCl9ZnVuY3Rpb24gbCgpe24oKSxrLnBvaW50PXUsay5saW5lRW5kPWN9ZnVuY3Rpb24gdSh0LGUpe2EoaD10LGY9ZSksZD1iLHA9eCxtPV8sdj13LGc9TSxrLnBvaW50PWF9ZnVuY3Rpb24gYygpe2koYix4LHksXyx3LE0sZCxwLGgsbSx2LGcscyxlKSxrLmxpbmVFbmQ9byxvKCl9dmFyIGgsZixkLHAsbSx2LGcseSxiLHgsXyx3LE0saz17cG9pbnQ6cixsaW5lU3RhcnQ6bixsaW5lRW5kOm8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxrLmxpbmVTdGFydD1sfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksay5saW5lU3RhcnQ9bn19O3JldHVybiBrfWZ1bmN0aW9uIGkoZSxyLG4scyxsLHUsYyxoLGYsZCxwLG0sdixnKXt2YXIgeT1jLWUsYj1oLXIseD15KnkrYipiO2lmKHg+NCphJiZ2LS0pe3ZhciBfPXMrZCx3PWwrcCxNPXUrbSxrPU1hdGguc3FydChfKl8rdyp3K00qTSksQT1NYXRoLmFzaW4oTS89ayksVD14byh4byhNKS0xKTxGb3x8eG8obi1mKTxGbz8obitmKS8yOk1hdGguYXRhbjIodyxfKSxTPXQoVCxBKSxFPVNbMF0sTD1TWzFdLEM9RS1lLHo9TC1yLEk9YipDLXkqejsoSSpJL3g+YXx8eG8oKHkqQytiKnopL3gtLjUpPi4zfHxzKmQrbCpwK3UqbTxvKSYmKGkoZSxyLG4scyxsLHUsRSxMLFQsXy89ayx3Lz1rLE0sdixnKSxnLnBvaW50KEUsTCksaShFLEwsVCxfLHcsTSxjLGgsZixkLHAsbSx2LGcpKX19dmFyIGE9LjUsbz1NYXRoLmNvcygzMCpIbykscz0xNjtyZXR1cm4gZS5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9KGE9dCp0KT4wJiYxNixlKTpNYXRoLnNxcnQoYSl9LGV9ZnVuY3Rpb24gaXIodCl7dmFyIGU9bnIoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChbZSpxbyxyKnFvXSl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHVyKGUodCkpfX1mdW5jdGlvbiBhcih0KXt0aGlzLnN0cmVhbT10fWZ1bmN0aW9uIG9yKHQsZSl7cmV0dXJue3BvaW50OmUsc3BoZXJlOmZ1bmN0aW9uKCl7dC5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dC5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBzcih0KXtyZXR1cm4gbHIoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKCl9ZnVuY3Rpb24gbHIodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdD1zKHRbMF0qSG8sdFsxXSpIbyksW3RbMF0qZitsLHUtdFsxXSpmXX1mdW5jdGlvbiByKHQpe3JldHVybih0PXMuaW52ZXJ0KCh0WzBdLWwpL2YsKHUtdFsxXSkvZikpJiZbdFswXSpxbyx0WzFdKnFvXX1mdW5jdGlvbiBuKCl7cz1DZShvPWZyKGcseSxiKSxhKTt2YXIgdD1hKG0sdik7cmV0dXJuIGw9ZC10WzBdKmYsdT1wK3RbMV0qZixpKCl9ZnVuY3Rpb24gaSgpe3JldHVybiBjJiYoYy52YWxpZD0hMSxjPW51bGwpLGV9dmFyIGEsbyxzLGwsdSxjLGg9bnIoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1hKHQsZSksW3RbMF0qZitsLHUtdFsxXSpmXX0pLGY9MTUwLGQ9NDgwLHA9MjUwLG09MCx2PTAsZz0wLHk9MCxiPTAsXz1Gcyx3PXgsTT1udWxsLGs9bnVsbDtyZXR1cm4gZS5zdHJlYW09ZnVuY3Rpb24odCl7cmV0dXJuIGMmJihjLnZhbGlkPSExKSxjPXVyKF8obyxoKHcodCkpKSksYy52YWxpZD0hMCxjfSxlLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz1udWxsPT10PyhNPXQsRnMpOkhlKChNPSt0KSpIbyksaSgpKTpNfSxlLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9dCx3PXQ/R2UodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSk6eCxpKCkpOmt9LGUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3QsbigpKTpmfSxlLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxwPSt0WzFdLG4oKSk6W2QscF19LGUuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPXRbMF0lMzYwKkhvLHY9dFsxXSUzNjAqSG8sbigpKTpbbSpxbyx2KnFvXX0sZS5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dFswXSUzNjAqSG8seT10WzFdJTM2MCpIbyxiPXQubGVuZ3RoPjI/dFsyXSUzNjAqSG86MCxuKCkpOltnKnFvLHkqcW8sYipxb119LHVvLnJlYmluZChlLGgsInByZWNpc2lvbiIpLGZ1bmN0aW9uKCl7cmV0dXJuIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5pbnZlcnQ9YS5pbnZlcnQmJnIsbigpfX1mdW5jdGlvbiB1cih0KXtyZXR1cm4gb3IodCxmdW5jdGlvbihlLHIpe3QucG9pbnQoZSpIbyxyKkhvKX0pfWZ1bmN0aW9uIGNyKHQsZSl7cmV0dXJuW3QsZV19ZnVuY3Rpb24gaHIodCxlKXtyZXR1cm5bdD5Obz90LUJvOnQ8LU5vP3QrQm86dCxlXX1mdW5jdGlvbiBmcih0LGUscil7cmV0dXJuIHQ/ZXx8cj9DZShwcih0KSxtcihlLHIpKTpwcih0KTplfHxyP21yKGUscik6aHJ9ZnVuY3Rpb24gZHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGUrPXQsW2U+Tm8/ZS1CbzplPC1Obz9lK0JvOmUscl19fWZ1bmN0aW9uIHByKHQpe3ZhciBlPWRyKHQpO3JldHVybiBlLmludmVydD1kcigtdCksZX1mdW5jdGlvbiBtcih0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1NYXRoLmNvcyhlKSxzPU1hdGguY29zKHQpKnIsbD1NYXRoLnNpbih0KSpyLHU9TWF0aC5zaW4oZSksYz11Km4rcyppO3JldHVybltNYXRoLmF0YW4yKGwqYS1jKm8scypuLXUqaSksbnQoYyphK2wqbyldfXZhciBuPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCksYT1NYXRoLmNvcyhlKSxvPU1hdGguc2luKGUpO3JldHVybiByLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY29zKGUpLHM9TWF0aC5jb3ModCkqcixsPU1hdGguc2luKHQpKnIsdT1NYXRoLnNpbihlKSxjPXUqYS1sKm87cmV0dXJuW01hdGguYXRhbjIobCphK3UqbyxzKm4rYyppKSxudChjKm4tcyppKV19LHJ9ZnVuY3Rpb24gdnIodCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD1vKmU7bnVsbCE9aT8oaT1ncihyLGkpLGE9Z3IocixhKSwobz4wP2k8YTppPmEpJiYoaSs9bypCbykpOihpPXQrbypCbyxhPXQtLjUqbCk7Zm9yKHZhciB1LGM9aTtvPjA/Yz5hOmM8YTtjLT1sKXMucG9pbnQoKHU9TWUoW3IsLW4qTWF0aC5jb3MoYyksLW4qTWF0aC5zaW4oYyldKSlbMF0sdVsxXSl9fWZ1bmN0aW9uIGdyKHQsZSl7dmFyIHI9Z2UoZSk7clswXS09dCx3ZShyKTt2YXIgbj1ydCgtclsxXSk7cmV0dXJuKCgtclsyXTwwPy1uOm4pKzIqTWF0aC5QSS1GbyklKDIqTWF0aC5QSSl9ZnVuY3Rpb24geXIodCxlLHIpe3ZhciBuPXVvLnJhbmdlKHQsZS1GbyxyKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuLm1hcChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pfX1mdW5jdGlvbiBicih0LGUscil7dmFyIG49dW8ucmFuZ2UodCxlLUZvLHIpLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSl9fWZ1bmN0aW9uIHhyKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBfcih0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gd3IodCxlLHIsbil7dmFyIGk9TWF0aC5jb3MoZSksYT1NYXRoLnNpbihlKSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1pKk1hdGguY29zKHQpLHU9aSpNYXRoLnNpbih0KSxjPW8qTWF0aC5jb3MociksaD1vKk1hdGguc2luKHIpLGY9MipNYXRoLmFzaW4oTWF0aC5zcXJ0KHN0KG4tZSkraSpvKnN0KHItdCkpKSxkPTEvTWF0aC5zaW4oZikscD1mP2Z1bmN0aW9uKHQpe3ZhciBlPU1hdGguc2luKHQqPWYpKmQscj1NYXRoLnNpbihmLXQpKmQsbj1yKmwrZSpjLGk9cip1K2UqaCxvPXIqYStlKnM7cmV0dXJuW01hdGguYXRhbjIoaSxuKSpxbyxNYXRoLmF0YW4yKG8sTWF0aC5zcXJ0KG4qbitpKmkpKSpxb119OmZ1bmN0aW9uKCl7cmV0dXJuW3QqcW8sZSpxb119O3JldHVybiBwLmRpc3RhbmNlPWYscH1mdW5jdGlvbiBNcigpe2Z1bmN0aW9uIHQodCxpKXt2YXIgYT1NYXRoLnNpbihpKj1Ibyksbz1NYXRoLmNvcyhpKSxzPXhvKCh0Kj1IbyktZSksbD1NYXRoLmNvcyhzKTtXcys9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9bypNYXRoLnNpbihzKSkqcysocz1uKmEtcipvKmwpKnMpLHIqYStuKm8qbCksZT10LHI9YSxuPW99dmFyIGUscixuO1pzLnBvaW50PWZ1bmN0aW9uKGksYSl7ZT1pKkhvLHI9TWF0aC5zaW4oYSo9SG8pLG49TWF0aC5jb3MoYSksWnMucG9pbnQ9dH0sWnMubGluZUVuZD1mdW5jdGlvbigpe1pzLnBvaW50PVpzLmxpbmVFbmQ9TX19ZnVuY3Rpb24ga3IodCxlKXtmdW5jdGlvbiByKGUscil7dmFyIG49TWF0aC5jb3MoZSksaT1NYXRoLmNvcyhyKSxhPXQobippKTtyZXR1cm5bYSppKk1hdGguc2luKGUpLGEqTWF0aC5zaW4ocildfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3ZhciBuPU1hdGguc3FydCh0KnQrcipyKSxpPWUobiksYT1NYXRoLnNpbihpKSxvPU1hdGguY29zKGkpO3JldHVybltNYXRoLmF0YW4yKHQqYSxuKm8pLE1hdGguYXNpbihuJiZyKmEvbildfSxyfWZ1bmN0aW9uIEFyKHQsZSl7ZnVuY3Rpb24gcih0LGUpe28+MD9lPC1WbytGbyYmKGU9LVZvK0ZvKTplPlZvLUZvJiYoZT1Wby1Gbyk7dmFyIHI9by9NYXRoLnBvdyhpKGUpLGEpO3JldHVybltyKk1hdGguc2luKGEqdCksby1yKk1hdGguY29zKGEqdCldfXZhciBuPU1hdGguY29zKHQpLGk9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgudGFuKE5vLzQrdC8yKX0sYT10PT09ZT9NYXRoLnNpbih0KTpNYXRoLmxvZyhuL01hdGguY29zKGUpKS9NYXRoLmxvZyhpKGUpL2kodCkpLG89bipNYXRoLnBvdyhpKHQpLGEpL2E7cmV0dXJuIGE/KHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9by1lLG49dHQoYSkqTWF0aC5zcXJ0KHQqdCtyKnIpO3JldHVybltNYXRoLmF0YW4yKHQscikvYSwyKk1hdGguYXRhbihNYXRoLnBvdyhvL24sMS9hKSktVm9dfSxyKTpTcn1mdW5jdGlvbiBUcih0LGUpe2Z1bmN0aW9uIHIodCxlKXt2YXIgcj1hLWU7cmV0dXJuW3IqTWF0aC5zaW4oaSp0KSxhLXIqTWF0aC5jb3MoaSp0KV19dmFyIG49TWF0aC5jb3ModCksaT10PT09ZT9NYXRoLnNpbih0KToobi1NYXRoLmNvcyhlKSkvKGUtdCksYT1uL2krdDtyZXR1cm4geG8oaSk8Rm8/Y3I6KHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9YS1lO3JldHVybltNYXRoLmF0YW4yKHQscikvaSxhLXR0KGkpKk1hdGguc3FydCh0KnQrcipyKV19LHIpfWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuW3QsTWF0aC5sb2coTWF0aC50YW4oTm8vNCtlLzIpKV19ZnVuY3Rpb24gRXIodCl7dmFyIGUscj1zcih0KSxuPXIuc2NhbGUsaT1yLnRyYW5zbGF0ZSxhPXIuY2xpcEV4dGVudDtyZXR1cm4gci5zY2FsZT1mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkocixhcmd1bWVudHMpO3JldHVybiB0PT09cj9lP3IuY2xpcEV4dGVudChudWxsKTpyOnR9LHIudHJhbnNsYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9aS5hcHBseShyLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1yP2U/ci5jbGlwRXh0ZW50KG51bGwpOnI6dH0sci5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciBvPWEuYXBwbHkocixhcmd1bWVudHMpO2lmKG89PT1yKXtpZihlPW51bGw9PXQpe3ZhciBzPU5vKm4oKSxsPWkoKTthKFtbbFswXS1zLGxbMV0tc10sW2xbMF0rcyxsWzFdK3NdXSl9fWVsc2UgZSYmKG89bnVsbCk7cmV0dXJuIG99LHIuY2xpcEV4dGVudChudWxsKX1mdW5jdGlvbiBMcih0LGUpe3JldHVybltNYXRoLmxvZyhNYXRoLnRhbihOby80K2UvMikpLC10XX1mdW5jdGlvbiBDcih0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB6cih0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBJcih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8ZTtpKyspe2Zvcig7bj4xJiZldCh0W3Jbbi0yXV0sdFtyW24tMV1dLHRbaV0pPD0wOyktLW47cltuKytdPWl9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBEcih0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1mdW5jdGlvbiBQcih0LGUscil7cmV0dXJuKHJbMF0tZVswXSkqKHRbMV0tZVsxXSk8KHJbMV0tZVsxXSkqKHRbMF0tZVswXSl9ZnVuY3Rpb24gT3IodCxlLHIsbil7dmFyIGk9dFswXSxhPXJbMF0sbz1lWzBdLWkscz1uWzBdLWEsbD10WzFdLHU9clsxXSxjPWVbMV0tbCxoPW5bMV0tdSxmPShzKihsLXUpLWgqKGktYSkpLyhoKm8tcypjKTtyZXR1cm5baStmKm8sbCtmKmNdfWZ1bmN0aW9uIFJyKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiEoZVswXS1yWzBdfHxlWzFdLXJbMV0pfWZ1bmN0aW9uIEZyKCl7YW4odGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIGpyKHQpe3ZhciBlPXNsLnBvcCgpfHxuZXcgRnI7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gTnIodCl7WnIodCksaWwucmVtb3ZlKHQpLHNsLnB1c2godCksYW4odCl9ZnVuY3Rpb24gQnIodCl7dmFyIGU9dC5jaXJjbGUscj1lLngsbj1lLmN5LGk9e3g6cix5Om59LGE9dC5QLG89dC5OLHM9W3RdO05yKHQpO2Zvcih2YXIgbD1hO2wuY2lyY2xlJiZ4byhyLWwuY2lyY2xlLngpPEZvJiZ4byhuLWwuY2lyY2xlLmN5KTxGbzspYT1sLlAscy51bnNoaWZ0KGwpLE5yKGwpLGw9YTtzLnVuc2hpZnQobCksWnIobCk7Zm9yKHZhciB1PW87dS5jaXJjbGUmJnhvKHItdS5jaXJjbGUueCk8Rm8mJnhvKG4tdS5jaXJjbGUuY3kpPEZvOylvPXUuTixzLnB1c2godSksTnIodSksdT1vO3MucHVzaCh1KSxacih1KTt2YXIgYyxoPXMubGVuZ3RoO2ZvcihjPTE7YzxoOysrYyl1PXNbY10sbD1zW2MtMV0sZW4odS5lZGdlLGwuc2l0ZSx1LnNpdGUsaSk7bD1zWzBdLHU9c1toLTFdLHUuZWRnZT0kcihsLnNpdGUsdS5zaXRlLG51bGwsaSksV3IobCksV3IodSl9ZnVuY3Rpb24gVXIodCl7Zm9yKHZhciBlLHIsbixpLGE9dC54LG89dC55LHM9aWwuXztzOylpZigobj1WcihzLG8pLWEpPkZvKXM9cy5MO2Vsc2V7aWYoISgoaT1hLUhyKHMsbykpPkZvKSl7bj4tRm8/KGU9cy5QLHI9cyk6aT4tRm8/KGU9cyxyPXMuTik6ZT1yPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfXZhciBsPWpyKHQpO2lmKGlsLmluc2VydChlLGwpLGV8fHIpe2lmKGU9PT1yKXJldHVybiBacihlKSxyPWpyKGUuc2l0ZSksaWwuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT0kcihlLnNpdGUsbC5zaXRlKSxXcihlKSx2b2lkIFdyKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT0kcihlLnNpdGUsbC5zaXRlKSk7WnIoZSksWnIocik7dmFyIHU9ZS5zaXRlLGM9dS54LGg9dS55LGY9dC54LWMsZD10LnktaCxwPXIuc2l0ZSxtPXAueC1jLHY9cC55LWgsZz0yKihmKnYtZCptKSx5PWYqZitkKmQsYj1tKm0rdip2LHg9e3g6KHYqeS1kKmIpL2crYyx5OihmKmItbSp5KS9nK2h9O2VuKHIuZWRnZSx1LHAseCksbC5lZGdlPSRyKHUsdCxudWxsLHgpLHIuZWRnZT0kcih0LHAsbnVsbCx4KSxXcihlKSxXcihyKX19ZnVuY3Rpb24gVnIodCxlKXt2YXIgcj10LnNpdGUsbj1yLngsaT1yLnksYT1pLWU7aWYoIWEpcmV0dXJuIG47dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7cj1vLnNpdGU7dmFyIHM9ci54LGw9ci55LHU9bC1lO2lmKCF1KXJldHVybiBzO3ZhciBjPXMtbixoPTEvYS0xL3UsZj1jL3U7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKihjKmMvKC0yKnUpLWwrdS8yK2ktYS8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIEhyKHQsZSl7dmFyIHI9dC5OO2lmKHIpcmV0dXJuIFZyKHIsZSk7dmFyIG49dC5zaXRlO3JldHVybiBuLnk9PT1lP24ueDoxLzB9ZnVuY3Rpb24gcXIodCl7dGhpcy5zaXRlPXQsdGhpcy5lZGdlcz1bXX1mdW5jdGlvbiBHcih0KXtmb3IodmFyIGUscixuLGksYSxvLHMsbCx1LGMsaD10WzBdWzBdLGY9dFsxXVswXSxkPXRbMF1bMV0scD10WzFdWzFdLG09bmwsdj1tLmxlbmd0aDt2LS07KWlmKChhPW1bdl0pJiZhLnByZXBhcmUoKSlmb3Iocz1hLmVkZ2VzLGw9cy5sZW5ndGgsbz0wO288bDspYz1zW29dLmVuZCgpLG49Yy54LGk9Yy55LHU9c1srK28lbF0uc3RhcnQoKSxlPXUueCxyPXUueSwoeG8obi1lKT5Gb3x8eG8oaS1yKT5GbykmJihzLnNwbGljZShvLDAsbmV3IHJuKHRuKGEuc2l0ZSxjLHhvKG4taCk8Rm8mJnAtaT5Gbz97eDpoLHk6eG8oZS1oKTxGbz9yOnB9OnhvKGktcCk8Rm8mJmYtbj5Gbz97eDp4byhyLXApPEZvP2U6Zix5OnB9OnhvKG4tZik8Rm8mJmktZD5Gbz97eDpmLHk6eG8oZS1mKTxGbz9yOmR9OnhvKGktZCk8Rm8mJm4taD5Gbz97eDp4byhyLWQpPEZvP2U6aCx5OmR9Om51bGwpLGEuc2l0ZSxudWxsKSksKytsKX1mdW5jdGlvbiBZcih0LGUpe3JldHVybiBlLmFuZ2xlLXQuYW5nbGV9ZnVuY3Rpb24gWHIoKXthbih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gV3IodCl7dmFyIGU9dC5QLHI9dC5OO2lmKGUmJnIpe3ZhciBuPWUuc2l0ZSxpPXQuc2l0ZSxhPXIuc2l0ZTtpZihuIT09YSl7dmFyIG89aS54LHM9aS55LGw9bi54LW8sdT1uLnktcyxjPWEueC1vLGg9YS55LXMsZj0yKihsKmgtdSpjKTtpZighKGY+PS1qbykpe3ZhciBkPWwqbCt1KnUscD1jKmMraCpoLG09KGgqZC11KnApL2Ysdj0obCpwLWMqZCkvZixoPXYrcyxnPWxsLnBvcCgpfHxuZXcgWHI7Zy5hcmM9dCxnLnNpdGU9aSxnLng9bStvLGcueT1oK01hdGguc3FydChtKm0rdip2KSxnLmN5PWgsdC5jaXJjbGU9Zztmb3IodmFyIHk9bnVsbCxiPW9sLl87YjspaWYoZy55PGIueXx8Zy55PT09Yi55JiZnLng8PWIueCl7aWYoIWIuTCl7eT1iLlA7YnJlYWt9Yj1iLkx9ZWxzZXtpZighYi5SKXt5PWI7YnJlYWt9Yj1iLlJ9b2wuaW5zZXJ0KHksZykseXx8KGFsPWcpfX19fWZ1bmN0aW9uIFpyKHQpe3ZhciBlPXQuY2lyY2xlO2UmJihlLlB8fChhbD1lLk4pLG9sLnJlbW92ZShlKSxsbC5wdXNoKGUpLGFuKGUpLHQuY2lyY2xlPW51bGwpfWZ1bmN0aW9uIEpyKHQpe2Zvcih2YXIgZSxyPXJsLG49cWUodFswXVswXSx0WzBdWzFdLHRbMV1bMF0sdFsxXVsxXSksaT1yLmxlbmd0aDtpLS07KWU9cltpXSwoIUtyKGUsdCl8fCFuKGUpfHx4byhlLmEueC1lLmIueCk8Rm8mJnhvKGUuYS55LWUuYi55KTxGbykmJihlLmE9ZS5iPW51bGwsci5zcGxpY2UoaSwxKSl9ZnVuY3Rpb24gS3IodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixpLGE9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLHU9ZVsxXVsxXSxjPXQubCxoPXQucixmPWMueCxkPWMueSxwPWgueCxtPWgueSx2PShmK3ApLzIsZz0oZCttKS8yO2lmKG09PT1kKXtpZih2PG98fHY+PXMpcmV0dXJuO2lmKGY+cCl7aWYoYSl7aWYoYS55Pj11KXJldHVybn1lbHNlIGE9e3g6dix5Omx9O3I9e3g6dix5OnV9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDp2LHk6dX07cj17eDp2LHk6bH19fWVsc2UgaWYobj0oZi1wKS8obS1kKSxpPWctbip2LG48LTF8fG4+MSlpZihmPnApe2lmKGEpe2lmKGEueT49dSlyZXR1cm59ZWxzZSBhPXt4OihsLWkpL24seTpsfTtyPXt4Oih1LWkpL24seTp1fX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6KHUtaSkvbix5OnV9O3I9e3g6KGwtaSkvbix5Omx9fWVsc2UgaWYoZDxtKXtpZihhKXtpZihhLng+PXMpcmV0dXJufWVsc2UgYT17eDpvLHk6bipvK2l9O3I9e3g6cyx5Om4qcytpfX1lbHNle2lmKGEpe2lmKGEueDxvKXJldHVybn1lbHNlIGE9e3g6cyx5Om4qcytpfTtyPXt4Om8seTpuKm8raX19cmV0dXJuIHQuYT1hLHQuYj1yLCEwfWZ1bmN0aW9uIFFyKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uICRyKHQsZSxyLG4pe3ZhciBpPW5ldyBRcih0LGUpO3JldHVybiBybC5wdXNoKGkpLHImJmVuKGksdCxlLHIpLG4mJmVuKGksZSx0LG4pLG5sW3QuaV0uZWRnZXMucHVzaChuZXcgcm4oaSx0LGUpKSwKbmxbZS5pXS5lZGdlcy5wdXNoKG5ldyBybihpLGUsdCkpLGl9ZnVuY3Rpb24gdG4odCxlLHIpe3ZhciBuPW5ldyBRcih0LG51bGwpO3JldHVybiBuLmE9ZSxuLmI9cixybC5wdXNoKG4pLG59ZnVuY3Rpb24gZW4odCxlLHIsbil7dC5hfHx0LmI/dC5sPT09cj90LmI9bjp0LmE9bjoodC5hPW4sdC5sPWUsdC5yPXIpfWZ1bmN0aW9uIHJuKHQsZSxyKXt2YXIgbj10LmEsaT10LmI7dGhpcy5lZGdlPXQsdGhpcy5zaXRlPWUsdGhpcy5hbmdsZT1yP01hdGguYXRhbjIoci55LWUueSxyLngtZS54KTp0Lmw9PT1lP01hdGguYXRhbjIoaS54LW4ueCxuLnktaS55KTpNYXRoLmF0YW4yKG4ueC1pLngsaS55LW4ueSl9ZnVuY3Rpb24gbm4oKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBhbih0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIG9uKHQsZSl7dmFyIHI9ZSxuPWUuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBzbih0LGUpe3ZhciByPWUsbj1lLkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOnQuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24gbG4odCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fWZ1bmN0aW9uIHVuKHQsZSl7dmFyIHIsbixpLGE9dC5zb3J0KGNuKS5wb3AoKTtmb3Iocmw9W10sbmw9bmV3IEFycmF5KHQubGVuZ3RoKSxpbD1uZXcgbm4sb2w9bmV3IG5uOzspaWYoaT1hbCxhJiYoIWl8fGEueTxpLnl8fGEueT09PWkueSYmYS54PGkueCkpYS54PT09ciYmYS55PT09bnx8KG5sW2EuaV09bmV3IHFyKGEpLFVyKGEpLHI9YS54LG49YS55KSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztCcihpLmFyYyl9ZSYmKEpyKGUpLEdyKGUpKTt2YXIgbz17Y2VsbHM6bmwsZWRnZXM6cmx9O3JldHVybiBpbD1vbD1ybD1ubD1udWxsLG99ZnVuY3Rpb24gY24odCxlKXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH1mdW5jdGlvbiBobih0LGUscil7cmV0dXJuKHQueC1yLngpKihlLnktdC55KS0odC54LWUueCkqKHIueS10LnkpfWZ1bmN0aW9uIGZuKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gZG4odCl7cmV0dXJuIHQueX1mdW5jdGlvbiBwbigpe3JldHVybntsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbH19ZnVuY3Rpb24gbW4odCxlLHIsbixpLGEpe2lmKCF0KGUscixuLGksYSkpe3ZhciBvPS41KihyK2kpLHM9LjUqKG4rYSksbD1lLm5vZGVzO2xbMF0mJm1uKHQsbFswXSxyLG4sbyxzKSxsWzFdJiZtbih0LGxbMV0sbyxuLGkscyksbFsyXSYmbW4odCxsWzJdLHIscyxvLGEpLGxbM10mJm1uKHQsbFszXSxvLHMsaSxhKX19ZnVuY3Rpb24gdm4odCxlLHIsbixpLGEsbyl7dmFyIHMsbD0xLzA7cmV0dXJuIGZ1bmN0aW9uIHQodSxjLGgsZixkKXtpZighKGM+YXx8aD5vfHxmPG58fGQ8aSkpe2lmKHA9dS5wb2ludCl7dmFyIHAsbT1lLXUueCx2PXItdS55LGc9bSptK3YqdjtpZihnPGwpe3ZhciB5PU1hdGguc3FydChsPWcpO249ZS15LGk9ci15LGE9ZSt5LG89cit5LHM9cH19Zm9yKHZhciBiPXUubm9kZXMseD0uNSooYytmKSxfPS41KihoK2QpLHc9ZT49eCxNPXI+PV8saz1NPDwxfHcsQT1rKzQ7azxBOysraylpZih1PWJbMyZrXSlzd2l0Y2goMyZrKXtjYXNlIDA6dCh1LGMsaCx4LF8pO2JyZWFrO2Nhc2UgMTp0KHUseCxoLGYsXyk7YnJlYWs7Y2FzZSAyOnQodSxjLF8seCxkKTticmVhaztjYXNlIDM6dCh1LHgsXyxmLGQpfX19KHQsbixpLGEsbyksc31mdW5jdGlvbiBnbih0LGUpe3Q9dW8ucmdiKHQpLGU9dW8ucmdiKGUpO3ZhciByPXQucixuPXQuZyxpPXQuYixhPWUuci1yLG89ZS5nLW4scz1lLmItaTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK3d0KE1hdGgucm91bmQocithKnQpKSt3dChNYXRoLnJvdW5kKG4rbyp0KSkrd3QoTWF0aC5yb3VuZChpK3MqdCkpfX1mdW5jdGlvbiB5bih0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPV9uKHRbcl0sZVtyXSk6aVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoaVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fWZ1bmN0aW9uIGJuKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIHhuKHQsZSl7dmFyIHIsbixpLGE9Y2wubGFzdEluZGV4PWhsLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1jbC5leGVjKHQpKSYmKG49aGwuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OmJuKHIsbil9KSksYT1obC5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gX24odCxlKXtmb3IodmFyIHIsbj11by5pbnRlcnBvbGF0b3JzLmxlbmd0aDstLW4+PTAmJiEocj11by5pbnRlcnBvbGF0b3JzW25dKHQsZSkpOyk7cmV0dXJuIHJ9ZnVuY3Rpb24gd24odCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goX24odFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX1mdW5jdGlvbiBNbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDplPj0xPzE6dChlKX19ZnVuY3Rpb24ga24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gQW4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gVG4odCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBTbih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gRW4odCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIExuKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gQ24odCl7cmV0dXJuIDEtTWF0aC5jb3ModCpWbyl9ZnVuY3Rpb24gem4odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqKHQtMSkpfWZ1bmN0aW9uIEluKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9ZnVuY3Rpb24gRG4odCxlKXt2YXIgcjtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpLGFyZ3VtZW50cy5sZW5ndGg/cj1lL0JvKk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpLGZ1bmN0aW9uKG4pe3JldHVybiAxK3QqTWF0aC5wb3coMiwtMTAqbikqTWF0aC5zaW4oKG4tcikqQm8vZSl9fWZ1bmN0aW9uIFBuKHQpe3JldHVybiB0fHwodD0xLjcwMTU4KSxmdW5jdGlvbihlKXtyZXR1cm4gZSplKigodCsxKSplLXQpfX1mdW5jdGlvbiBPbih0KXtyZXR1cm4gdDwxLzIuNzU/Ny41NjI1KnQqdDp0PDIvMi43NT83LjU2MjUqKHQtPTEuNS8yLjc1KSp0Ky43NTp0PDIuNS8yLjc1PzcuNTYyNSoodC09Mi4yNS8yLjc1KSp0Ky45Mzc1OjcuNTYyNSoodC09Mi42MjUvMi43NSkqdCsuOTg0Mzc1fWZ1bmN0aW9uIFJuKHQsZSl7dD11by5oY2wodCksZT11by5oY2woZSk7dmFyIHI9dC5oLG49dC5jLGk9dC5sLGE9ZS5oLXIsbz1lLmMtbixzPWUubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxuPWlzTmFOKG4pP2UuYzpuKSxpc05hTihhKT8oYT0wLHI9aXNOYU4ocik/ZS5oOnIpOmE+MTgwP2EtPTM2MDphPC0xODAmJihhKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiBmdChyK2EqdCxuK28qdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIEZuKHQsZSl7dD11by5oc2wodCksZT11by5oc2woZSk7dmFyIHI9dC5oLG49dC5zLGk9dC5sLGE9ZS5oLXIsbz1lLnMtbixzPWUubC1pO3JldHVybiBpc05hTihvKSYmKG89MCxuPWlzTmFOKG4pP2UuczpuKSxpc05hTihhKT8oYT0wLHI9aXNOYU4ocik/ZS5oOnIpOmE+MTgwP2EtPTM2MDphPC0xODAmJihhKz0zNjApLGZ1bmN0aW9uKHQpe3JldHVybiBjdChyK2EqdCxuK28qdCxpK3MqdCkrIiJ9fWZ1bmN0aW9uIGpuKHQsZSl7dD11by5sYWIodCksZT11by5sYWIoZSk7dmFyIHI9dC5sLG49dC5hLGk9dC5iLGE9ZS5sLXIsbz1lLmEtbixzPWUuYi1pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gcHQocithKnQsbitvKnQsaStzKnQpKyIifX1mdW5jdGlvbiBObih0LGUpe3JldHVybiBlLT10LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKHQrZSpyKX19ZnVuY3Rpb24gQm4odCl7dmFyIGU9W3QuYSx0LmJdLHI9W3QuYyx0LmRdLG49Vm4oZSksaT1VbihlLHIpLGE9Vm4oSG4ocixlLC1pKSl8fDA7ZVswXSpyWzFdPHJbMF0qZVsxXSYmKGVbMF0qPS0xLGVbMV0qPS0xLG4qPS0xLGkqPS0xKSx0aGlzLnJvdGF0ZT0obj9NYXRoLmF0YW4yKGVbMV0sZVswXSk6TWF0aC5hdGFuMigtclswXSxyWzFdKSkqcW8sdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W24sYV0sdGhpcy5za2V3PWE/TWF0aC5hdGFuMihpLGEpKnFvOjB9ZnVuY3Rpb24gVW4odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBWbih0KXt2YXIgZT1NYXRoLnNxcnQoVW4odCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9ZnVuY3Rpb24gSG4odCxlLHIpe3JldHVybiB0WzBdKz1yKmVbMF0sdFsxXSs9ciplWzFdLHR9ZnVuY3Rpb24gcW4odCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiwiOiIifWZ1bmN0aW9uIEduKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmJuKHRbMF0sZVswXSl9LHtpOmktMix4OmJuKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goInRyYW5zbGF0ZSgiK2UrIikiKX1mdW5jdGlvbiBZbih0LGUscixuKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksbi5wdXNoKHtpOnIucHVzaChxbihyKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpibih0LGUpfSkpOmUmJnIucHVzaChxbihyKSsicm90YXRlKCIrZSsiKSIpfWZ1bmN0aW9uIFhuKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2gocW4ocikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpibih0LGUpfSk6ZSYmci5wdXNoKHFuKHIpKyJza2V3WCgiK2UrIikiKX1mdW5jdGlvbiBXbih0LGUscixuKXtpZih0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV0pe3ZhciBpPXIucHVzaChxbihyKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmJuKHRbMF0sZVswXSl9LHtpOmktMix4OmJuKHRbMV0sZVsxXSl9KX1lbHNlIDE9PT1lWzBdJiYxPT09ZVsxXXx8ci5wdXNoKHFuKHIpKyJzY2FsZSgiK2UrIikiKX1mdW5jdGlvbiBabih0LGUpe3ZhciByPVtdLG49W107cmV0dXJuIHQ9dW8udHJhbnNmb3JtKHQpLGU9dW8udHJhbnNmb3JtKGUpLEduKHQudHJhbnNsYXRlLGUudHJhbnNsYXRlLHIsbiksWW4odC5yb3RhdGUsZS5yb3RhdGUscixuKSxYbih0LnNrZXcsZS5za2V3LHIsbiksV24odC5zY2FsZSxlLnNjYWxlLHIsbiksdD1lPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspclsoZT1uW2ldKS5pXT1lLngodCk7cmV0dXJuIHIuam9pbigiIil9fWZ1bmN0aW9uIEpuKHQsZSl7cmV0dXJuIGU9KGUtPXQ9K3QpfHwxL2UsZnVuY3Rpb24ocil7cmV0dXJuKHItdCkvZX19ZnVuY3Rpb24gS24odCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChyLXQpL2UpKX19ZnVuY3Rpb24gUW4odCl7Zm9yKHZhciBlPXQuc291cmNlLHI9dC50YXJnZXQsbj10aShlLHIpLGk9W2VdO2UhPT1uOyllPWUucGFyZW50LGkucHVzaChlKTtmb3IodmFyIGE9aS5sZW5ndGg7ciE9PW47KWkuc3BsaWNlKGEsMCxyKSxyPXIucGFyZW50O3JldHVybiBpfWZ1bmN0aW9uICRuKHQpe2Zvcih2YXIgZT1bXSxyPXQucGFyZW50O251bGwhPXI7KWUucHVzaCh0KSx0PXIscj1yLnBhcmVudDtyZXR1cm4gZS5wdXNoKHQpLGV9ZnVuY3Rpb24gdGkodCxlKXtpZih0PT09ZSlyZXR1cm4gdDtmb3IodmFyIHI9JG4odCksbj0kbihlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtpPT09YTspbz1pLGk9ci5wb3AoKSxhPW4ucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gZWkodCl7dC5maXhlZHw9Mn1mdW5jdGlvbiByaSh0KXt0LmZpeGVkJj0tN31mdW5jdGlvbiBuaSh0KXt0LmZpeGVkfD00LHQucHg9dC54LHQucHk9dC55fWZ1bmN0aW9uIGlpKHQpe3QuZml4ZWQmPS01fWZ1bmN0aW9uIGFpKHQsZSxyKXt2YXIgbj0wLGk9MDtpZih0LmNoYXJnZT0wLCF0LmxlYWYpZm9yKHZhciBhLG89dC5ub2RlcyxzPW8ubGVuZ3RoLGw9LTE7KytsPHM7KW51bGwhPShhPW9bbF0pJiYoYWkoYSxlLHIpLHQuY2hhcmdlKz1hLmNoYXJnZSxuKz1hLmNoYXJnZSphLmN4LGkrPWEuY2hhcmdlKmEuY3kpO2lmKHQucG9pbnQpe3QubGVhZnx8KHQucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSx0LnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciB1PWUqclt0LnBvaW50LmluZGV4XTt0LmNoYXJnZSs9dC5wb2ludENoYXJnZT11LG4rPXUqdC5wb2ludC54LGkrPXUqdC5wb2ludC55fXQuY3g9bi90LmNoYXJnZSx0LmN5PWkvdC5jaGFyZ2V9ZnVuY3Rpb24gb2kodCxlKXtyZXR1cm4gdW8ucmViaW5kKHQsZSwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSx0Lm5vZGVzPXQsdC5saW5rcz1maSx0fWZ1bmN0aW9uIHNpKHQsZSl7Zm9yKHZhciByPVt0XTtudWxsIT0odD1yLnBvcCgpKTspaWYoZSh0KSwoaT10LmNoaWxkcmVuKSYmKG49aS5sZW5ndGgpKWZvcih2YXIgbixpOy0tbj49MDspci5wdXNoKGlbbl0pfWZ1bmN0aW9uIGxpKHQsZSl7Zm9yKHZhciByPVt0XSxuPVtdO251bGwhPSh0PXIucG9wKCkpOylpZihuLnB1c2godCksKGE9dC5jaGlsZHJlbikmJihpPWEubGVuZ3RoKSlmb3IodmFyIGksYSxvPS0xOysrbzxpOylyLnB1c2goYVtvXSk7Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZSh0KX1mdW5jdGlvbiB1aSh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBjaSh0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBoaSh0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24gZmkodCl7cmV0dXJuIHVvLm1lcmdlKHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6dCx0YXJnZXQ6ZX19KX0pKX1mdW5jdGlvbiBkaSh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIHBpKHQpe3JldHVybiB0Lnl9ZnVuY3Rpb24gbWkodCxlLHIpe3QueTA9ZSx0Lnk9cn1mdW5jdGlvbiB2aSh0KXtyZXR1cm4gdW8ucmFuZ2UodC5sZW5ndGgpfWZ1bmN0aW9uIGdpKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiB5aSh0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBiaSh0KXtyZXR1cm4gdC5yZWR1Y2UoeGksMCl9ZnVuY3Rpb24geGkodCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIF9pKHQsZSl7cmV0dXJuIHdpKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gd2kodCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24gTWkodCl7cmV0dXJuW3VvLm1pbih0KSx1by5tYXgodCldfWZ1bmN0aW9uIGtpKHQsZSl7cmV0dXJuIHQudmFsdWUtZS52YWx1ZX1mdW5jdGlvbiBBaSh0LGUpe3ZhciByPXQuX3BhY2tfbmV4dDt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dCxlLl9wYWNrX25leHQ9cixyLl9wYWNrX3ByZXY9ZX1mdW5jdGlvbiBUaSh0LGUpe3QuX3BhY2tfbmV4dD1lLGUuX3BhY2tfcHJldj10fWZ1bmN0aW9uIFNpKHQsZSl7dmFyIHI9ZS54LXQueCxuPWUueS10LnksaT10LnIrZS5yO3JldHVybi45OTkqaSppPnIqcituKm59ZnVuY3Rpb24gRWkodCl7ZnVuY3Rpb24gZSh0KXtjPU1hdGgubWluKHQueC10LnIsYyksaD1NYXRoLm1heCh0LngrdC5yLGgpLGY9TWF0aC5taW4odC55LXQucixmKSxkPU1hdGgubWF4KHQueSt0LnIsZCl9aWYoKHI9dC5jaGlsZHJlbikmJih1PXIubGVuZ3RoKSl7dmFyIHIsbixpLGEsbyxzLGwsdSxjPTEvMCxoPS0xLzAsZj0xLzAsZD0tMS8wO2lmKHIuZm9yRWFjaChMaSksbj1yWzBdLG4ueD0tbi5yLG4ueT0wLGUobiksdT4xJiYoaT1yWzFdLGkueD1pLnIsaS55PTAsZShpKSx1PjIpKWZvcihhPXJbMl0sSWkobixpLGEpLGUoYSksQWkobixhKSxuLl9wYWNrX3ByZXY9YSxBaShhLGkpLGk9bi5fcGFja19uZXh0LG89MztvPHU7bysrKXtJaShuLGksYT1yW29dKTt2YXIgcD0wLG09MSx2PTE7Zm9yKHM9aS5fcGFja19uZXh0O3MhPT1pO3M9cy5fcGFja19uZXh0LG0rKylpZihTaShzLGEpKXtwPTE7YnJlYWt9aWYoMT09cClmb3IobD1uLl9wYWNrX3ByZXY7bCE9PXMuX3BhY2tfcHJldiYmIVNpKGwsYSk7bD1sLl9wYWNrX3ByZXYsdisrKTtwPyhtPHZ8fG09PXYmJmkucjxuLnI/VGkobixpPXMpOlRpKG49bCxpKSxvLS0pOihBaShuLGEpLGk9YSxlKGEpKX12YXIgZz0oYytoKS8yLHk9KGYrZCkvMixiPTA7Zm9yKG89MDtvPHU7bysrKWE9cltvXSxhLngtPWcsYS55LT15LGI9TWF0aC5tYXgoYixhLnIrTWF0aC5zcXJ0KGEueCphLngrYS55KmEueSkpO3Qucj1iLHIuZm9yRWFjaChDaSl9fWZ1bmN0aW9uIExpKHQpe3QuX3BhY2tfbmV4dD10Ll9wYWNrX3ByZXY9dH1mdW5jdGlvbiBDaSh0KXtkZWxldGUgdC5fcGFja19uZXh0LGRlbGV0ZSB0Ll9wYWNrX3ByZXZ9ZnVuY3Rpb24gemkodCxlLHIsbil7dmFyIGk9dC5jaGlsZHJlbjtpZih0Lng9ZSs9bip0LngsdC55PXIrPW4qdC55LHQucio9bixpKWZvcih2YXIgYT0tMSxvPWkubGVuZ3RoOysrYTxvOyl6aShpW2FdLGUscixuKX1mdW5jdGlvbiBJaSh0LGUscil7dmFyIG49dC5yK3IucixpPWUueC10LngsYT1lLnktdC55O2lmKG4mJihpfHxhKSl7dmFyIG89ZS5yK3IucixzPWkqaSthKmE7byo9byxuKj1uO3ZhciBsPS41KyhuLW8pLygyKnMpLHU9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihuK3MpLShuLT1zKSpuLW8qbykpLygyKnMpO3IueD10LngrbCppK3UqYSxyLnk9dC55K2wqYS11Kml9ZWxzZSByLng9dC54K24sci55PXQueX1mdW5jdGlvbiBEaSh0LGUpe3JldHVybiB0LnBhcmVudD09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIFBpKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGUubGVuZ3RoP2VbMF06dC50fWZ1bmN0aW9uIE9pKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4oZT1yLmxlbmd0aCk/cltlLTFdOnQudH1mdW5jdGlvbiBSaSh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBGaSh0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KWU9aVthXSxlLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX1mdW5jdGlvbiBqaSh0LGUscil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6cn1mdW5jdGlvbiBOaSh0KXtyZXR1cm4gMSt1by5tYXgodCxmdW5jdGlvbih0KXtyZXR1cm4gdC55fSl9ZnVuY3Rpb24gQmkodCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZS54fSwwKS90Lmxlbmd0aH1mdW5jdGlvbiBVaSh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlJiZlLmxlbmd0aD9VaShlWzBdKTp0fWZ1bmN0aW9uIFZpKHQpe3ZhciBlLHI9dC5jaGlsZHJlbjtyZXR1cm4gciYmKGU9ci5sZW5ndGgpP1ZpKHJbZS0xXSk6dH1mdW5jdGlvbiBIaSh0KXtyZXR1cm57eDp0LngseTp0LnksZHg6dC5keCxkeTp0LmR5fX1mdW5jdGlvbiBxaSh0LGUpe3ZhciByPXQueCtlWzNdLG49dC55K2VbMF0saT10LmR4LWVbMV0tZVszXSxhPXQuZHktZVswXS1lWzJdO3JldHVybiBpPDAmJihyKz1pLzIsaT0wKSxhPDAmJihuKz1hLzIsYT0wKSx7eDpyLHk6bixkeDppLGR5OmF9fWZ1bmN0aW9uIEdpKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBlPHI/W2Uscl06W3IsZV19ZnVuY3Rpb24gWWkodCl7cmV0dXJuIHQucmFuZ2VFeHRlbnQ/dC5yYW5nZUV4dGVudCgpOkdpKHQucmFuZ2UoKSl9ZnVuY3Rpb24gWGkodCxlLHIsbil7dmFyIGk9cih0WzBdLHRbMV0pLGE9bihlWzBdLGVbMV0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gYShpKHQpKX19ZnVuY3Rpb24gV2kodCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aC0xLGE9dFtuXSxvPXRbaV07cmV0dXJuIG88YSYmKHI9bixuPWksaT1yLHI9YSxhPW8sbz1yKSx0W25dPWUuZmxvb3IoYSksdFtpXT1lLmNlaWwobyksdH1mdW5jdGlvbiBaaSh0KXtyZXR1cm4gdD97Zmxvb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90KSp0fSxjZWlsOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmNlaWwoZS90KSp0fX06d2x9ZnVuY3Rpb24gSmkodCxlLHIsbil7dmFyIGk9W10sYT1bXSxvPTAscz1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMTtmb3IodFtzXTx0WzBdJiYodD10LnNsaWNlKCkucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7KytvPD1zOylpLnB1c2gocih0W28tMV0sdFtvXSkpLGEucHVzaChuKGVbby0xXSxlW29dKSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPXVvLmJpc2VjdCh0LGUsMSxzKS0xO3JldHVybiBhW3JdKGlbcl0oZSkpfX1mdW5jdGlvbiBLaSh0LGUscixuKXtmdW5jdGlvbiBpKCl7dmFyIGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpPjI/Smk6WGksbD1uP0tuOkpuO3JldHVybiBvPWkodCxlLGwscikscz1pKGUsdCxsLF9uKSxhfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG8odCl9dmFyIG8scztyZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHModCl9LGEuZG9tYWluPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUubWFwKE51bWJlciksaSgpKTp0fSxhLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaSgpKTplfSxhLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEucmFuZ2UodCkuaW50ZXJwb2xhdGUoTm4pfSxhLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSgpKTpufSxhLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSgpKTpyfSxhLnRpY2tzPWZ1bmN0aW9uKGUpe3JldHVybiBlYSh0LGUpfSxhLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcmEodCxlLHIpfSxhLm5pY2U9ZnVuY3Rpb24oZSl7cmV0dXJuICRpKHQsZSksaSgpfSxhLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS2kodCxlLHIsbil9LGkoKX1mdW5jdGlvbiBRaSh0LGUpe3JldHVybiB1by5yZWJpbmQodCxlLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gJGkodCxlKXtyZXR1cm4gV2kodCxaaSh0YSh0LGUpWzJdKSksV2kodCxaaSh0YSh0LGUpWzJdKSksdH1mdW5jdGlvbiB0YSh0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj1HaSh0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBlYSh0LGUpe3JldHVybiB1by5yYW5nZS5hcHBseSh1byx0YSh0LGUpKX1mdW5jdGlvbiByYSh0LGUscil7dmFyIG49dGEodCxlKTtpZihyKXt2YXIgaT1jcy5leGVjKHIpO2lmKGkuc2hpZnQoKSwicyI9PT1pWzhdKXt2YXIgYT11by5mb3JtYXRQcmVmaXgoTWF0aC5tYXgoeG8oblswXSkseG8oblsxXSkpKTtyZXR1cm4gaVs3XXx8KGlbN109Ii4iK25hKGEuc2NhbGUoblsyXSkpKSxpWzhdPSJmIixyPXVvLmZvcm1hdChpLmpvaW4oIiIpKSxmdW5jdGlvbih0KXtyZXR1cm4gcihhLnNjYWxlKHQpKSthLnN5bWJvbH19aVs3XXx8KGlbN109Ii4iK2lhKGlbOF0sbikpLHI9aS5qb2luKCIiKX1lbHNlIHI9IiwuIituYShuWzJdKSsiZiI7cmV0dXJuIHVvLmZvcm1hdChyKX1mdW5jdGlvbiBuYSh0KXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBpYSh0LGUpe3ZhciByPW5hKGVbMl0pO3JldHVybiB0IGluIE1sP01hdGguYWJzKHItbmEoTWF0aC5tYXgoeG8oZVswXSkseG8oZVsxXSkpKSkrICsoImUiIT09dCk6ci0yKigiJSI9PT10KX1mdW5jdGlvbiBhYSh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybihyP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKGUpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHI/TWF0aC5wb3coZSx0KTotTWF0aC5wb3coZSwtdCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdChpKGUpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodC5pbnZlcnQoZSkpfSxvLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lWzBdPj0wLHQuZG9tYWluKChuPWUubWFwKE51bWJlcikpLm1hcChpKSksbyk6bn0sby5iYXNlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStyLHQuZG9tYWluKG4ubWFwKGkpKSxvKTplfSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgZT1XaShuLm1hcChpKSxyP01hdGg6QWwpO3JldHVybiB0LmRvbWFpbihlKSxuPWUubWFwKGEpLG99LG8udGlja3M9ZnVuY3Rpb24oKXt2YXIgdD1HaShuKSxvPVtdLHM9dFswXSxsPXRbMV0sdT1NYXRoLmZsb29yKGkocykpLGM9TWF0aC5jZWlsKGkobCkpLGg9ZSUxPzI6ZTtpZihpc0Zpbml0ZShjLXUpKXtpZihyKXtmb3IoO3U8Yzt1KyspZm9yKHZhciBmPTE7ZjxoO2YrKylvLnB1c2goYSh1KSpmKTtvLnB1c2goYSh1KSl9ZWxzZSBmb3Ioby5wdXNoKGEodSkpO3UrKzxjOylmb3IodmFyIGY9aC0xO2Y+MDtmLS0pby5wdXNoKGEodSkqZik7Zm9yKHU9MDtvW3VdPHM7dSsrKTtmb3IoYz1vLmxlbmd0aDtvW2MtMV0+bDtjLS0pO289by5zbGljZSh1LGMpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4ga2w7YXJndW1lbnRzLmxlbmd0aDwyP3I9a2w6ImZ1bmN0aW9uIiE9dHlwZW9mIHImJihyPXVvLmZvcm1hdChyKSk7dmFyIG49TWF0aC5tYXgoMSxlKnQvby50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBvPXQvYShNYXRoLnJvdW5kKGkodCkpKTtyZXR1cm4gbyplPGUtLjUmJihvKj1lKSxvPD1uP3IodCk6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYWEodC5jb3B5KCksZSxyLG4pfSxRaShvLHQpfWZ1bmN0aW9uIG9hKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0KGkoZSkpfXZhciBpPXNhKGUpLGE9c2EoMS9lKTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGEodC5pbnZlcnQoZSkpfSxuLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odC5kb21haW4oKHI9ZS5tYXAoTnVtYmVyKSkubWFwKGkpKSxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBlYShyLHQpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcmEocix0LGUpfSxuLm5pY2U9ZnVuY3Rpb24odCl7cmV0dXJuIG4uZG9tYWluKCRpKHIsdCkpfSxuLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXNhKGU9byksYT1zYSgxL2UpLHQuZG9tYWluKHIubWFwKGkpKSxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gb2EodC5jb3B5KCksZSxyKX0sUWkobix0KX1mdW5jdGlvbiBzYSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gbGEodCxlKXtmdW5jdGlvbiByKHIpe3JldHVybiBhWygoaS5nZXQocil8fCgicmFuZ2UiPT09ZS50P2kuc2V0KHIsdC5wdXNoKHIpKTpOYU4pKS0xKSVhLmxlbmd0aF19ZnVuY3Rpb24gbihlLHIpe3JldHVybiB1by5yYW5nZSh0Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlK3IqdH0pfXZhciBpLGEsbztyZXR1cm4gci5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ7dD1bXSxpPW5ldyBoO2Zvcih2YXIgYSxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KWkuaGFzKGE9bltvXSl8fGkuc2V0KGEsdC5wdXNoKGEpKTtyZXR1cm4gcltlLnRdLmFwcGx5KHIsZS5hKX0sci5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG89MCxlPXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LHIpOmF9LHIucmFuZ2VQb2ludHM9ZnVuY3Rpb24oaSxzKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApO3ZhciBsPWlbMF0sdT1pWzFdLGM9dC5sZW5ndGg8Mj8obD0obCt1KS8yLDApOih1LWwpLyh0Lmxlbmd0aC0xK3MpO3JldHVybiBhPW4obCtjKnMvMixjKSxvPTAsZT17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxyfSxyLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24oaSxzKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApO3ZhciBsPWlbMF0sdT1pWzFdLGM9dC5sZW5ndGg8Mj8obD11PU1hdGgucm91bmQoKGwrdSkvMiksMCk6KHUtbCkvKHQubGVuZ3RoLTErcyl8MDtyZXR1cm4gYT1uKGwrTWF0aC5yb3VuZChjKnMvMisodS1sLSh0Lmxlbmd0aC0xK3MpKmMpLzIpLGMpLG89MCxlPXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZUJhbmRzPWZ1bmN0aW9uKGkscyxsKXthcmd1bWVudHMubGVuZ3RoPDImJihzPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGw9cyk7dmFyIHU9aVsxXTxpWzBdLGM9aVt1LTBdLGg9aVsxLXVdLGY9KGgtYykvKHQubGVuZ3RoLXMrMipsKTtyZXR1cm4gYT1uKGMrZipsLGYpLHUmJmEucmV2ZXJzZSgpLG89ZiooMS1zKSxlPXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30scn0sci5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24oaSxzLGwpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHM9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYobD1zKTt2YXIgdT1pWzFdPGlbMF0sYz1pW3UtMF0saD1pWzEtdV0sZj1NYXRoLmZsb29yKChoLWMpLyh0Lmxlbmd0aC1zKzIqbCkpO3JldHVybiBhPW4oYytNYXRoLnJvdW5kKChoLWMtKHQubGVuZ3RoLXMpKmYpLzIpLGYpLHUmJmEucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChmKigxLXMpKSxlPXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxyfSxyLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxyLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIEdpKGUuYVswXSl9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiBsYSh0LGUpfSxyLmRvbWFpbih0KX1mdW5jdGlvbiB1YSh0LGUpe2Z1bmN0aW9uIHIoKXt2YXIgcj0wLGk9ZS5sZW5ndGg7Zm9yKHM9W107KytyPGk7KXNbci0xXT11by5xdWFudGlsZSh0LHIvaSk7cmV0dXJuIG59ZnVuY3Rpb24gbih0KXtpZighaXNOYU4odD0rdCkpcmV0dXJuIGVbdW8uYmlzZWN0KHMsdCldfXZhciBzO3JldHVybiBuLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLm1hcChhKS5maWx0ZXIobykuc29ydChpKSxyKCkpOnR9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxyKCkpOmV9LG4ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW5kZXhPZihyKSxyPDA/W05hTixOYU5dOltyPjA/c1tyLTFdOnRbMF0scjxzLmxlbmd0aD9zW3JdOnRbdC5sZW5ndGgtMV1dfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdWEodCxlKX0scigpfWZ1bmN0aW9uIGNhKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiByW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGEqKGUtdCkpKSldfWZ1bmN0aW9uIGkoKXtyZXR1cm4gYT1yLmxlbmd0aC8oZS10KSxvPXIubGVuZ3RoLTEsbn12YXIgYSxvO3JldHVybiBuLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rclswXSxlPStyW3IubGVuZ3RoLTFdLGkoKSk6W3QsZV19LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKCkpOnJ9LG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXIuaW5kZXhPZihlKSxlPWU8MD9OYU46ZS9hK3QsW2UsZSsxL2FdfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY2EodCxlLHIpfSxpKCl9ZnVuY3Rpb24gaGEodCxlKXtmdW5jdGlvbiByKHIpe2lmKHI8PXIpcmV0dXJuIGVbdW8uYmlzZWN0KHQscildfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHIpOnR9LHIucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxyKTplfSxyLmludmVydEV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmluZGV4T2YociksW3Rbci0xXSx0W3JdXX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGhhKHQsZSl9LHJ9ZnVuY3Rpb24gZmEodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4rdH1yZXR1cm4gZS5pbnZlcnQ9ZSxlLmRvbWFpbj1lLnJhbmdlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXIubWFwKGUpLGUpOnR9LGUudGlja3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGVhKHQsZSl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihlLHIpe3JldHVybiByYSh0LGUscil9LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBmYSh0KX0sZX1mdW5jdGlvbiBkYSgpe3JldHVybiAwfWZ1bmN0aW9uIHBhKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIG1hKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIHZhKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gZ2EodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24geWEodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gYmEodCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIHhhKHQsZSxyLG4saSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGk/bjotbikvTWF0aC5zcXJ0KGEqYStvKm8pLGw9cypvLHU9LXMqYSxjPXRbMF0rbCxoPXRbMV0rdSxmPWVbMF0rbCxkPWVbMV0rdSxwPShjK2YpLzIsbT0oaCtkKS8yLHY9Zi1jLGc9ZC1oLHk9dip2K2cqZyxiPXItbix4PWMqZC1mKmgsXz0oZzwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLGIqYip5LXgqeCkpLHc9KHgqZy12Kl8pL3ksTT0oLXgqdi1nKl8pL3ksaz0oeCpnK3YqXykveSxBPSgteCp2K2cqXykveSxUPXctcCxTPU0tbSxFPWstcCxMPUEtbTtyZXR1cm4gVCpUK1MqUz5FKkUrTCpMJiYodz1rLE09QSksW1t3LWwsTS11XSxbdypyL2IsTSpyL2JdXX1mdW5jdGlvbiBfYSh0KXtmdW5jdGlvbiBlKGUpe2Z1bmN0aW9uIG8oKXt1LnB1c2goIk0iLGEodChjKSxzKSl9Zm9yKHZhciBsLHU9W10sYz1bXSxoPS0xLGY9ZS5sZW5ndGgsZD1FdChyKSxwPUV0KG4pOysraDxmOylpLmNhbGwodGhpcyxsPWVbaF0saCk/Yy5wdXNoKFsrZC5jYWxsKHRoaXMsbCxoKSwrcC5jYWxsKHRoaXMsbCxoKV0pOmMubGVuZ3RoJiYobygpLGM9W10pO3JldHVybiBjLmxlbmd0aCYmbygpLHUubGVuZ3RoP3Uuam9pbigiIik6bnVsbH12YXIgcj1DcixuPXpyLGk9emUsYT13YSxvPWEua2V5LHM9Ljc7cmV0dXJuIGUueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGUpOnJ9LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGUpOml9LGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/YT10OihhPXpsLmdldCh0KXx8d2EpLmtleSxlKTpvfSxlLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxlKTpzfSxlfWZ1bmN0aW9uIHdhKHQpe3JldHVybiB0Lmxlbmd0aD4xP3Quam9pbigiTCIpOnQrIloifWZ1bmN0aW9uIE1hKHQpe3JldHVybiB0LmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24ga2EodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiSCIsKG5bMF0rKG49dFtlXSlbMF0pLzIsIlYiLG5bMV0pO3JldHVybiByPjEmJmkucHVzaCgiSCIsblswXSksaS5qb2luKCIiKX1mdW5jdGlvbiBBYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJWIiwobj10W2VdKVsxXSwiSCIsblswXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gVGEodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07KytlPHI7KWkucHVzaCgiSCIsKG49dFtlXSlbMF0sIlYiLG5bMV0pO3JldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIFNhKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDQ/d2EodCk6dFsxXStDYSh0LnNsaWNlKDEsLTEpLHphKHQsZSkpfWZ1bmN0aW9uIEVhKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/TWEodCk6dFswXStDYSgodC5wdXNoKHRbMF0pLHQpLHphKFt0W3QubGVuZ3RoLTJdXS5jb25jYXQodCxbdFsxXV0pLGUpKX1mdW5jdGlvbiBMYSh0LGUpe3JldHVybiB0Lmxlbmd0aDwzP3dhKHQpOnRbMF0rQ2EodCx6YSh0LGUpKX1mdW5jdGlvbiBDYSh0LGUpe2lmKGUubGVuZ3RoPDF8fHQubGVuZ3RoIT1lLmxlbmd0aCYmdC5sZW5ndGghPWUubGVuZ3RoKzIpcmV0dXJuIHdhKHQpO3ZhciByPXQubGVuZ3RoIT1lLmxlbmd0aCxuPSIiLGk9dFswXSxhPXRbMV0sbz1lWzBdLHM9byxsPTE7aWYociYmKG4rPSJRIisoYVswXS0yKm9bMF0vMykrIiwiKyhhWzFdLTIqb1sxXS8zKSsiLCIrYVswXSsiLCIrYVsxXSxpPXRbMV0sbD0yKSxlLmxlbmd0aD4xKXtzPWVbMV0sYT10W2xdLGwrKyxuKz0iQyIrKGlbMF0rb1swXSkrIiwiKyhpWzFdK29bMV0pKyIsIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV07Zm9yKHZhciB1PTI7dTxlLmxlbmd0aDt1KyssbCsrKWE9dFtsXSxzPWVbdV0sbis9IlMiKyhhWzBdLXNbMF0pKyIsIisoYVsxXS1zWzFdKSsiLCIrYVswXSsiLCIrYVsxXX1pZihyKXt2YXIgYz10W2xdO24rPSJRIisoYVswXSsyKnNbMF0vMykrIiwiKyhhWzFdKzIqc1sxXS8zKSsiLCIrY1swXSsiLCIrY1sxXX1yZXR1cm4gbn1mdW5jdGlvbiB6YSh0LGUpe2Zvcih2YXIgcixuPVtdLGk9KDEtZSkvMixhPXRbMF0sbz10WzFdLHM9MSxsPXQubGVuZ3RoOysrczxsOylyPWEsYT1vLG89dFtzXSxuLnB1c2goW2kqKG9bMF0tclswXSksaSoob1sxXS1yWzFdKV0pO3JldHVybiBufWZ1bmN0aW9uIElhKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIHdhKHQpO3ZhciBlPTEscj10Lmxlbmd0aCxuPXRbMF0saT1uWzBdLGE9blsxXSxvPVtpLGksaSwobj10WzFdKVswXV0scz1bYSxhLGEsblsxXV0sbD1baSwiLCIsYSwiTCIsUmEoUGwsbyksIiwiLFJhKFBsLHMpXTtmb3IodC5wdXNoKHRbci0xXSk7KytlPD1yOyluPXRbZV0sby5zaGlmdCgpLG8ucHVzaChuWzBdKSxzLnNoaWZ0KCkscy5wdXNoKG5bMV0pLEZhKGwsbyxzKTtyZXR1cm4gdC5wb3AoKSxsLnB1c2goIkwiLG4pLGwuam9pbigiIil9ZnVuY3Rpb24gRGEodCl7aWYodC5sZW5ndGg8NClyZXR1cm4gd2EodCk7Zm9yKHZhciBlLHI9W10sbj0tMSxpPXQubGVuZ3RoLGE9WzBdLG89WzBdOysrbjwzOyllPXRbbl0sYS5wdXNoKGVbMF0pLG8ucHVzaChlWzFdKTtmb3Ioci5wdXNoKFJhKFBsLGEpKyIsIitSYShQbCxvKSksLS1uOysrbjxpOyllPXRbbl0sYS5zaGlmdCgpLGEucHVzaChlWzBdKSxvLnNoaWZ0KCksby5wdXNoKGVbMV0pLEZhKHIsYSxvKTtyZXR1cm4gci5qb2luKCIiKX1mdW5jdGlvbiBQYSh0KXtmb3IodmFyIGUscixuPS0xLGk9dC5sZW5ndGgsYT1pKzQsbz1bXSxzPVtdOysrbjw0OylyPXRbbiVpXSxvLnB1c2goclswXSkscy5wdXNoKHJbMV0pO2ZvcihlPVtSYShQbCxvKSwiLCIsUmEoUGwscyldLC0tbjsrK248YTspcj10W24laV0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxzLnNoaWZ0KCkscy5wdXNoKHJbMV0pLEZhKGUsbyxzKTtyZXR1cm4gZS5qb2luKCIiKX1mdW5jdGlvbiBPYSh0LGUpe3ZhciByPXQubGVuZ3RoLTE7aWYocilmb3IodmFyIG4saSxhPXRbMF1bMF0sbz10WzBdWzFdLHM9dFtyXVswXS1hLGw9dFtyXVsxXS1vLHU9LTE7Kyt1PD1yOyluPXRbdV0saT11L3IsblswXT1lKm5bMF0rKDEtZSkqKGEraSpzKSxuWzFdPWUqblsxXSsoMS1lKSoobytpKmwpO3JldHVybiBJYSh0KX1mdW5jdGlvbiBSYSh0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119ZnVuY3Rpb24gRmEodCxlLHIpe3QucHVzaCgiQyIsUmEoSWwsZSksIiwiLFJhKElsLHIpLCIsIixSYShEbCxlKSwiLCIsUmEoRGwsciksIiwiLFJhKFBsLGUpLCIsIixSYShQbCxyKSl9ZnVuY3Rpb24gamEodCxlKXtyZXR1cm4oZVsxXS10WzFdKS8oZVswXS10WzBdKX1mdW5jdGlvbiBOYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj1bXSxpPXRbMF0sYT10WzFdLG89blswXT1qYShpLGEpOysrZTxyOyluW2VdPShvKyhvPWphKGk9YSxhPXRbZSsxXSkpKS8yO3JldHVybiBuW2VdPW8sbn1mdW5jdGlvbiBCYSh0KXtmb3IodmFyIGUscixuLGksYT1bXSxvPU5hKHQpLHM9LTEsbD10Lmxlbmd0aC0xOysrczxsOyllPWphKHRbc10sdFtzKzFdKSx4byhlKTxGbz9vW3NdPW9bcysxXT0wOihyPW9bc10vZSxuPW9bcysxXS9lLChpPXIqcituKm4pPjkmJihpPTMqZS9NYXRoLnNxcnQoaSksb1tzXT1pKnIsb1tzKzFdPWkqbikpO2ZvcihzPS0xOysrczw9bDspaT0odFtNYXRoLm1pbihsLHMrMSldWzBdLXRbTWF0aC5tYXgoMCxzLTEpXVswXSkvKDYqKDErb1tzXSpvW3NdKSksYS5wdXNoKFtpfHwwLG9bc10qaXx8MF0pO3JldHVybiBhfWZ1bmN0aW9uIFVhKHQpe3JldHVybiB0Lmxlbmd0aDwzP3dhKHQpOnRbMF0rQ2EodCxCYSh0KSl9ZnVuY3Rpb24gVmEodCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KWU9dFtpXSxyPWVbMF0sbj1lWzFdLVZvLGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gSGEodCl7ZnVuY3Rpb24gZShlKXtmdW5jdGlvbiBsKCl7bS5wdXNoKCJNIixzKHQoZyksaCksYyx1KHQodi5yZXZlcnNlKCkpLGgpLCJaIil9Zm9yKHZhciBmLGQscCxtPVtdLHY9W10sZz1bXSx5PS0xLGI9ZS5sZW5ndGgseD1FdChyKSxfPUV0KGkpLHc9cj09PW4/ZnVuY3Rpb24oKXtyZXR1cm4gZH06RXQobiksTT1pPT09YT9mdW5jdGlvbigpe3JldHVybiBwfTpFdChhKTsrK3k8Yjspby5jYWxsKHRoaXMsZj1lW3ldLHkpPyh2LnB1c2goW2Q9K3guY2FsbCh0aGlzLGYseSkscD0rXy5jYWxsKHRoaXMsZix5KV0pLGcucHVzaChbK3cuY2FsbCh0aGlzLGYseSksK00uY2FsbCh0aGlzLGYseSldKSk6di5sZW5ndGgmJihsKCksdj1bXSxnPVtdKTtyZXR1cm4gdi5sZW5ndGgmJmwoKSxtLmxlbmd0aD9tLmpvaW4oIiIpOm51bGx9dmFyIHI9Q3Isbj1DcixpPTAsYT16cixvPXplLHM9d2EsbD1zLmtleSx1PXMsYz0iTCIsaD0uNztyZXR1cm4gZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW49dCxlKTpufSxlLngwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0sZS54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGUpOm59LGUueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1hPXQsZSk6YX0sZS55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LGUpOml9LGUueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCxlKTphfSxlLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxlKTpvfSxlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3M9dDoocz16bC5nZXQodCl8fHdhKS5rZXksdT1zLnJldmVyc2V8fHMsYz1zLmNsb3NlZD8iTSI6IkwiLGUpOmx9LGUudGVuc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD10LGUpOmh9LGV9ZnVuY3Rpb24gcWEodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIEdhKHQpe3JldHVyblt0LngsdC55XX1mdW5jdGlvbiBZYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPWVbMF0sbj1lWzFdLVZvO3JldHVybltyKk1hdGguY29zKG4pLHIqTWF0aC5zaW4obildfX1mdW5jdGlvbiBYYSgpe3JldHVybiA2NH1mdW5jdGlvbiBXYSgpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFphKHQpe3ZhciBlPU1hdGguc3FydCh0L05vKTtyZXR1cm4iTTAsIitlKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiKy1lKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiK2UrIloifWZ1bmN0aW9uIEphKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlLHIsbjsoZT10aGlzW3RdKSYmKG49ZVtyPWUuYWN0aXZlXSkmJihuLnRpbWVyLmM9bnVsbCxuLnRpbWVyLnQ9TmFOLC0tZS5jb3VudD9kZWxldGUgZVtyXTpkZWxldGUgdGhpc1t0XSxlLmFjdGl2ZSs9LjUsbi5ldmVudCYmbi5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sbi5pbmRleCkpfX1mdW5jdGlvbiBLYSh0LGUscil7cmV0dXJuIEFvKHQsVWwpLHQubmFtZXNwYWNlPWUsdC5pZD1yLHR9ZnVuY3Rpb24gUWEodCxlLHIsbil7dmFyIGk9dC5pZCxhPXQubmFtZXNwYWNlO3JldHVybiBHKHQsImZ1bmN0aW9uIj09dHlwZW9mIHI/ZnVuY3Rpb24odCxvLHMpe3RbYV1baV0udHdlZW4uc2V0KGUsbihyLmNhbGwodCx0Ll9fZGF0YV9fLG8scykpKX06KHI9bihyKSxmdW5jdGlvbih0KXt0W2FdW2ldLnR3ZWVuLnNldChlLHIpfSkpfWZ1bmN0aW9uICRhKHQpe3JldHVybiBudWxsPT10JiYodD0iIiksZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIHRvKHQpe3JldHVybiBudWxsPT10PyJfX3RyYW5zaXRpb25fXyI6Il9fdHJhbnNpdGlvbl8iK3QrIl9fIn1mdW5jdGlvbiBlbyh0LGUscixuLGkpe2Z1bmN0aW9uIGEodCl7dmFyIGU9bS5kZWxheTtpZih1LnQ9ZStsLGU8PXQpcmV0dXJuIG8odC1lKTt1LmM9b31mdW5jdGlvbiBvKHIpe3ZhciBpPXAuYWN0aXZlLGE9cFtpXTthJiYoYS50aW1lci5jPW51bGwsYS50aW1lci50PU5hTiwtLXAuY291bnQsZGVsZXRlIHBbaV0sYS5ldmVudCYmYS5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18sYS5pbmRleCkpO2Zvcih2YXIgbyBpbiBwKWlmKCtvPG4pe3ZhciBoPXBbb107aC50aW1lci5jPW51bGwsaC50aW1lci50PU5hTiwtLXAuY291bnQsZGVsZXRlIHBbb119dS5jPXMsRHQoZnVuY3Rpb24oKXtyZXR1cm4gdS5jJiZzKHJ8fDEpJiYodS5jPW51bGwsdS50PU5hTiksMX0sMCxsKSxwLmFjdGl2ZT1uLG0uZXZlbnQmJm0uZXZlbnQuc3RhcnQuY2FsbCh0LHQuX19kYXRhX18sZSksZD1bXSxtLnR3ZWVuLmZvckVhY2goZnVuY3Rpb24ocixuKXsobj1uLmNhbGwodCx0Ll9fZGF0YV9fLGUpKSYmZC5wdXNoKG4pfSksZj1tLmVhc2UsYz1tLmR1cmF0aW9ufWZ1bmN0aW9uIHMoaSl7Zm9yKHZhciBhPWkvYyxvPWYoYSkscz1kLmxlbmd0aDtzPjA7KWRbLS1zXS5jYWxsKHQsbyk7aWYoYT49MSlyZXR1cm4gbS5ldmVudCYmbS5ldmVudC5lbmQuY2FsbCh0LHQuX19kYXRhX18sZSksLS1wLmNvdW50P2RlbGV0ZSBwW25dOmRlbGV0ZSB0W3JdLDF9dmFyIGwsdSxjLGYsZCxwPXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksbT1wW25dO218fChsPWkudGltZSx1PUR0KGEsMCxsKSxtPXBbbl09e3R3ZWVuOm5ldyBoLHRpbWU6bCx0aW1lcjp1LGRlbGF5OmkuZGVsYXksZHVyYXRpb246aS5kdXJhdGlvbixlYXNlOmkuZWFzZSxpbmRleDplfSxpPW51bGwsKytwLmNvdW50KX1mdW5jdGlvbiBybyh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3ZhciBuPWUodCk7cmV0dXJuInRyYW5zbGF0ZSgiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIsMCkifSl9ZnVuY3Rpb24gbm8odCxlLHIpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIpIn0pfWZ1bmN0aW9uIGlvKHQpe3JldHVybiB0LnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gYW8odCxlLHIpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQoZSl9ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXRbMV0tdFswXSxpPW4vcixhPXVvLmJpc2VjdChKbCxpKTtyZXR1cm4gYT09SmwubGVuZ3RoP1tlLnllYXIsdGEodC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvMzE1MzZlNn0pLHIpWzJdXTphP2VbaS9KbFthLTFdPEpsW2FdL2k/YS0xOmFdOlskbCx0YSh0LHIpWzJdXX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG9vKHQuaW52ZXJ0KGUpKX0sbi5kb21haW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZG9tYWluKGUpLG4pOnQuZG9tYWluKCkubWFwKG9vKX0sbi5uaWNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyKXtyZXR1cm4haXNOYU4ocikmJiF0LnJhbmdlKHIsb28oK3IrMSksZSkubGVuZ3RofXZhciBhPW4uZG9tYWluKCksbz1HaShhKSxzPW51bGw9PXQ/aShvLDEwKToibnVtYmVyIj09dHlwZW9mIHQmJmkobyx0KTtyZXR1cm4gcyYmKHQ9c1swXSxlPXNbMV0pLG4uZG9tYWluKFdpKGEsZT4xP3tmbG9vcjpmdW5jdGlvbihlKXtmb3IoO3IoZT10LmZsb29yKGUpKTspZT1vbyhlLTEpO3JldHVybiBlfSxjZWlsOmZ1bmN0aW9uKGUpe2Zvcig7cihlPXQuY2VpbChlKSk7KWU9b28oK2UrMSk7cmV0dXJuIGV9fTp0KSl9LG4udGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1HaShuLmRvbWFpbigpKSxhPW51bGw9PXQ/aShyLDEwKToibnVtYmVyIj09dHlwZW9mIHQ/aShyLHQpOiF0LnJhbmdlJiZbe3JhbmdlOnR9LGVdO3JldHVybiBhJiYodD1hWzBdLGU9YVsxXSksdC5yYW5nZShyWzBdLG9vKCtyWzFdKzEpLGU8MT8xOmUpfSxuLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gcn0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGFvKHQuY29weSgpLGUscil9LFFpKG4sdCl9ZnVuY3Rpb24gb28odCl7cmV0dXJuIG5ldyBEYXRlKHQpfWZ1bmN0aW9uIHNvKHQpe3JldHVybiBKU09OLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBsbyh0KXt2YXIgZT1mby5jcmVhdGVSYW5nZSgpO3JldHVybiBlLnNlbGVjdE5vZGUoZm8uYm9keSksZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQodC5yZXNwb25zZVRleHQpfXZhciB1bz17dmVyc2lvbjoiMy41LjE3In0sY289W10uc2xpY2UsaG89ZnVuY3Rpb24odCl7cmV0dXJuIGNvLmNhbGwodCl9LGZvPXRoaXMuZG9jdW1lbnQ7aWYoZm8pdHJ5e2hvKGZvLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaCh0KXtobz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxmbyl0cnl7Zm8uY3JlYXRlRWxlbWVudCgiRElWIikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKHQpe3ZhciBwbz10aGlzLkVsZW1lbnQucHJvdG90eXBlLG1vPXBvLnNldEF0dHJpYnV0ZSx2bz1wby5zZXRBdHRyaWJ1dGVOUyxnbz10aGlzLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLHlvPWdvLnNldFByb3BlcnR5O3BvLnNldEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUpe21vLmNhbGwodGhpcyx0LGUrIiIpfSxwby5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbih0LGUscil7dm8uY2FsbCh0aGlzLHQsZSxyKyIiKX0sZ28uc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe3lvLmNhbGwodGhpcyx0LGUrIiIscil9fXVvLmFzY2VuZGluZz1pLHVvLmRlc2NlbmRpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHVvLm1pbj1mdW5jdGlvbih0LGUpe3ZhciByLG4saT0tMSxhPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysraTxhOylpZihudWxsIT0obj10W2ldKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPXRbaV0pJiZyPm4mJihyPW4pfWVsc2V7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmcj5uJiYocj1uKX1yZXR1cm4gcn0sdW8ubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx1by5leHRlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtmb3IoOysrYTxvOylpZihudWxsIT0obj10W2FdKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49dFthXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2V7Zm9yKDsrK2E8bzspaWYobnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJm4+PW4pe3I9aT1uO2JyZWFrfWZvcig7KythPG87KW51bGwhPShuPWUuY2FsbCh0LHRbYV0sYSkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKX1yZXR1cm5bcixpXX0sdW8uc3VtPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj0wLGk9dC5sZW5ndGgsYT0tMTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylvKHI9K3RbYV0pJiYobis9cik7ZWxzZSBmb3IoOysrYTxpOylvKHI9K2UuY2FsbCh0LHRbYV0sYSkpJiYobis9cik7cmV0dXJuIG59LHVvLm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxzPS0xLGw9aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrczxpOylvKHI9YSh0W3NdKSk/bis9cjotLWw7ZWxzZSBmb3IoOysrczxpOylvKHI9YShlLmNhbGwodCx0W3NdLHMpKSk/bis9cjotLWw7aWYobClyZXR1cm4gbi9sfSx1by5xdWFudGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPSh0Lmxlbmd0aC0xKSplKzEsbj1NYXRoLmZsb29yKHIpLGk9K3Rbbi0xXSxhPXItbjtyZXR1cm4gYT9pK2EqKHRbbl0taSk6aX0sdW8ubWVkaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1bXSxzPXQubGVuZ3RoLGw9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2w8czspbyhyPWEodFtsXSkpJiZuLnB1c2gocik7ZWxzZSBmb3IoOysrbDxzOylvKHI9YShlLmNhbGwodCx0W2xdLGwpKSkmJm4ucHVzaChyKTtpZihuLmxlbmd0aClyZXR1cm4gdW8ucXVhbnRpbGUobi5zb3J0KGkpLC41KX0sdW8udmFyaWFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5sZW5ndGgscz0wLGw9MCx1PS0xLGM9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrdTxpOylvKHI9YSh0W3VdKSkmJihuPXItcyxzKz1uLysrYyxsKz1uKihyLXMpKTtlbHNlIGZvcig7Kyt1PGk7KW8ocj1hKGUuY2FsbCh0LHRbdV0sdSkpKSYmKG49ci1zLHMrPW4vKytjLGwrPW4qKHItcykpO2lmKGM+MSlyZXR1cm4gbC8oYy0xKX0sdW8uZGV2aWF0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dW8udmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0P01hdGguc3FydCh0KTp0fTt2YXIgYm89cyhpKTt1by5iaXNlY3RMZWZ0PWJvLmxlZnQsdW8uYmlzZWN0PXVvLmJpc2VjdFJpZ2h0PWJvLnJpZ2h0LHVvLmJpc2VjdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBzKDE9PT10Lmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiBpKHQoZSkscil9OnQpfSx1by5zaHVmZmxlPWZ1bmN0aW9uKHQsZSxyKXsoYT1hcmd1bWVudHMubGVuZ3RoKTwzJiYocj10Lmxlbmd0aCxhPDImJihlPTApKTtmb3IodmFyIG4saSxhPXItZTthOylpPU1hdGgucmFuZG9tKCkqYS0tfDAsbj10W2ErZV0sdFthK2VdPXRbaStlXSx0W2krZV09bjtyZXR1cm4gdH0sdW8ucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdW8ucGFpcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xLG49dFswXSxpPW5ldyBBcnJheShyPDA/MDpyKTtlPHI7KWlbZV09W24sbj10WysrZV1dO3JldHVybiBpfSx1by50cmFuc3Bvc2U9ZnVuY3Rpb24odCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIGU9LTEscj11by5taW4odCxsKSxuPW5ldyBBcnJheShyKTsrK2U8cjspZm9yKHZhciBpLGE9LTEsbz1uW2VdPW5ldyBBcnJheShpKTsrK2E8aTspb1thXT10W2FdW2VdO3JldHVybiBufSx1by56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gdW8udHJhbnNwb3NlKGFyZ3VtZW50cyl9LHVvLmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx1by52YWx1ZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHRbcl0pO3JldHVybiBlfSx1by5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSx1by5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihuPXRbaV0sZT1uLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeG89TWF0aC5hYnM7dW8ucmFuZ2U9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MSxhcmd1bWVudHMubGVuZ3RoPDImJihlPXQsdD0wKSksKGUtdCkvcj09MS8wKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgbixpPVtdLGE9dSh4byhyKSksbz0tMTtpZih0Kj1hLGUqPWEscio9YSxyPDApZm9yKDsobj10K3IqKytvKT5lOylpLnB1c2gobi9hKTtlbHNlIGZvcig7KG49dCtyKisrbyk8ZTspaS5wdXNoKG4vYSk7cmV0dXJuIGl9LHVvLm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBoO2lmKHQgaW5zdGFuY2VvZiBoKXQuZm9yRWFjaChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysraTxhOylyLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspci5zZXQoZS5jYWxsKHQsbj10W2ldLGkpLG4pfWVsc2UgZm9yKHZhciBvIGluIHQpci5zZXQobyx0W29dKTtyZXR1cm4gcn07dmFyIF9vPSJfX3Byb3RvX18iLHdvPSJcMCI7YyhoLHtoYXM6cCxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX1tmKHQpXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX1tmKHQpXT1lfSxyZW1vdmU6bSxrZXlzOnYsdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2godGhpcy5fW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHtrZXk6ZChlKSx2YWx1ZTp0aGlzLl9bZV19KTtyZXR1cm4gdH0sc2l6ZTpnLGVtcHR5OnksZm9yRWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fKXQuY2FsbCh0aGlzLGQoZSksdGhpcy5fW2VdKX19KSx1by5uZXN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG8scyl7aWYocz49YS5sZW5ndGgpcmV0dXJuIG4/bi5jYWxsKGksbyk6cj9vLnNvcnQocik6bztmb3IodmFyIGwsdSxjLGYsZD0tMSxwPW8ubGVuZ3RoLG09YVtzKytdLHY9bmV3IGg7KytkPHA7KShmPXYuZ2V0KGw9bSh1PW9bZF0pKSk/Zi5wdXNoKHUpOnYuc2V0KGwsW3VdKTtyZXR1cm4gZT8odT1lKCksYz1mdW5jdGlvbihyLG4pe3Uuc2V0KHIsdChlLG4scykpfSk6KHU9e30sYz1mdW5jdGlvbihyLG4pe3Vbcl09dChlLG4scyl9KSx2LmZvckVhY2goYyksdX1mdW5jdGlvbiBlKHQscil7aWYocj49YS5sZW5ndGgpcmV0dXJuIHQ7dmFyIG49W10saT1vW3IrK107cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0LGkpe24ucHVzaCh7a2V5OnQsdmFsdWVzOmUoaSxyKX0pfSksaT9uLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LmtleSxlLmtleSl9KTpufXZhciByLG4saT17fSxhPVtdLG89W107cmV0dXJuIGkubWFwPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQocixlLDApfSxpLmVudHJpZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGUodCh1by5tYXAsciwwKSwwKX0saS5rZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGEucHVzaCh0KSxpfSxpLnNvcnRLZXlzPWZ1bmN0aW9uKHQpe3JldHVybiBvW2EubGVuZ3RoLTFdPXQsaX0saS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiByPXQsaX0saS5yb2xsdXA9ZnVuY3Rpb24odCl7cmV0dXJuIG49dCxpfSxpfSx1by5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGI7aWYodClmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZS5hZGQodFtyXSk7cmV0dXJuIGV9LGMoYix7aGFzOnAsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bZih0Kz0iIildPSEwLHR9LHJlbW92ZTptLHZhbHVlczp2LHNpemU6ZyxlbXB0eTp5LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxkKGUpKX19KSx1by5iZWhhdmlvcj17fSx1by5yZWJpbmQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0xLGk9YXJndW1lbnRzLmxlbmd0aDsrK248aTspdFtyPWFyZ3VtZW50c1tuXV09Xyh0LGUsZVtyXSk7cmV0dXJuIHR9O3ZhciBNbz1bIndlYmtpdCIsIm1zIiwibW96IiwiTW96IiwibyIsIk8iXTt1by5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgayxlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPUEodCk7cmV0dXJuIHR9LGsucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbmRleE9mKCIuIiksbj0iIjtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksCnQ9dC5zbGljZSgwLHIpKSx0KXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1t0XS5vbihuKTp0aGlzW3RdLm9uKG4sZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PWUpZm9yKHQgaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KHQpJiZ0aGlzW3RdLm9uKG4sbnVsbCk7cmV0dXJuIHRoaXN9fSx1by5ldmVudD1udWxsLHVvLnJlcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShrbywiXFwkJiIpfTt2YXIga289L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLEFvPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfSxUbz1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl9LFNvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUucXVlcnlTZWxlY3RvckFsbCh0KX0sRW89ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hdGNoZXN8fHRbdyh0LCJtYXRjaGVzU2VsZWN0b3IiKV07cmV0dXJuKEVvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbCh0LGUpfSkodCxlKX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKFRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFNpenpsZSh0LGUpWzBdfHxudWxsfSxTbz1TaXp6bGUsRW89U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdW8uc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHVvLnNlbGVjdChmby5kb2N1bWVudEVsZW1lbnQpfTt2YXIgTG89dW8uc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtMby5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXTt0PUModCk7Zm9yKHZhciBvPS0xLHM9dGhpcy5sZW5ndGg7KytvPHM7KXthLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPShuPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBsPS0xLHU9bi5sZW5ndGg7KytsPHU7KShpPW5bbF0pPyhlLnB1c2gocj10LmNhbGwoaSxpLl9fZGF0YV9fLGwsbykpLHImJiJfX2RhdGFfXyJpbiBpJiYoci5fX2RhdGFfXz1pLl9fZGF0YV9fKSk6ZS5wdXNoKG51bGwpfXJldHVybiBMKGEpfSxMby5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixuPVtdO3Q9eih0KTtmb3IodmFyIGk9LTEsYT10aGlzLmxlbmd0aDsrK2k8YTspZm9yKHZhciBvPXRoaXNbaV0scz0tMSxsPW8ubGVuZ3RoOysrczxsOykocj1vW3NdKSYmKG4ucHVzaChlPWhvKHQuY2FsbChyLHIuX19kYXRhX18scyxpKSkpLGUucGFyZW50Tm9kZT1yKTtyZXR1cm4gTChuKX07dmFyIENvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix6bz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Q28seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTt1by5ucz17cHJlZml4OnpvLHF1YWxpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCI6Iikscj10O3JldHVybiBlPj0wJiYieG1sbnMiIT09KHI9dC5zbGljZSgwLGUpKSYmKHQ9dC5zbGljZShlKzEpKSx6by5oYXNPd25Qcm9wZXJ0eShyKT97c3BhY2U6em9bcl0sbG9jYWw6dH06dH19LExvLmF0dHI9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIHQ9dW8ubnMucXVhbGlmeSh0KSx0LmxvY2FsP3IuZ2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTpyLmdldEF0dHJpYnV0ZSh0KX1mb3IoZSBpbiB0KXRoaXMuZWFjaChJKGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goSSh0LGUpKX0sTG8uY2xhc3NlZD1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10aGlzLm5vZGUoKSxuPSh0PU8odCkpLmxlbmd0aCxpPS0xO2lmKGU9ci5jbGFzc0xpc3Qpe2Zvcig7KytpPG47KWlmKCFlLmNvbnRhaW5zKHRbaV0pKXJldHVybiExfWVsc2UgZm9yKGU9ci5nZXRBdHRyaWJ1dGUoImNsYXNzIik7KytpPG47KWlmKCFQKHRbaV0pLnRlc3QoZSkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKGUgaW4gdCl0aGlzLmVhY2goUihlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKFIodCxlKSl9LExvLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoO2lmKGk8Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtpPDImJihlPSIiKTtmb3IociBpbiB0KXRoaXMuZWFjaChqKHIsdFtyXSxlKSk7cmV0dXJuIHRoaXN9aWYoaTwyKXt2YXIgYT10aGlzLm5vZGUoKTtyZXR1cm4gbihhKS5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1yPSIifXJldHVybiB0aGlzLmVhY2goaih0LGUscikpfSxMby5wcm9wZXJ0eT1mdW5jdGlvbih0LGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB0aGlzLm5vZGUoKVt0XTtmb3IoZSBpbiB0KXRoaXMuZWFjaChOKGUsdFtlXSkpO3JldHVybiB0aGlzfXJldHVybiB0aGlzLmVhY2goTih0LGUpKX0sTG8udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9IiJ9OmZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LExvLmh0bWw9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCJmdW5jdGlvbiI9PXR5cGVvZiB0P2Z1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9IiJ9OmZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9dH0pOnRoaXMubm9kZSgpLmlubmVySFRNTH0sTG8uYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PUIodCksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0sTG8uaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9Qih0KSxlPUMoZSksdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUodC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9LExvLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goVSl9LExvLmRhdGE9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7dmFyIG4saSxhLG89dC5sZW5ndGgsYz1yLmxlbmd0aCxmPU1hdGgubWluKG8sYyksZD1uZXcgQXJyYXkoYykscD1uZXcgQXJyYXkoYyksbT1uZXcgQXJyYXkobyk7aWYoZSl7dmFyIHYsZz1uZXcgaCx5PW5ldyBBcnJheShvKTtmb3Iobj0tMTsrK248bzspKGk9dFtuXSkmJihnLmhhcyh2PWUuY2FsbChpLGkuX19kYXRhX18sbikpP21bbl09aTpnLnNldCh2LGkpLHlbbl09dik7Zm9yKG49LTE7KytuPGM7KShpPWcuZ2V0KHY9ZS5jYWxsKHIsYT1yW25dLG4pKSk/ITAhPT1pJiYoZFtuXT1pLGkuX19kYXRhX189YSk6cFtuXT1WKGEpLGcuc2V0KHYsITApO2ZvcihuPS0xOysrbjxvOyluIGluIHkmJiEwIT09Zy5nZXQoeVtuXSkmJihtW25dPXRbbl0pfWVsc2V7Zm9yKG49LTE7KytuPGY7KWk9dFtuXSxhPXJbbl0saT8oaS5fX2RhdGFfXz1hLGRbbl09aSk6cFtuXT1WKGEpO2Zvcig7bjxjOysrbilwW25dPVYocltuXSk7Zm9yKDtuPG87KytuKW1bbl09dFtuXX1wLnVwZGF0ZT1kLHAucGFyZW50Tm9kZT1kLnBhcmVudE5vZGU9bS5wYXJlbnROb2RlPXQucGFyZW50Tm9kZSxzLnB1c2gocCksbC5wdXNoKGQpLHUucHVzaChtKX12YXIgbixpLGE9LTEsbz10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKHQ9bmV3IEFycmF5KG89KG49dGhpc1swXSkubGVuZ3RoKTsrK2E8bzspKGk9blthXSkmJih0W2FdPWkuX19kYXRhX18pO3JldHVybiB0fXZhciBzPVkoW10pLGw9TChbXSksdT1MKFtdKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClmb3IoOysrYTxvOylyKG49dGhpc1thXSx0LmNhbGwobixuLnBhcmVudE5vZGUuX19kYXRhX18sYSkpO2Vsc2UgZm9yKDsrK2E8bzspcihuPXRoaXNbYV0sdCk7cmV0dXJuIGwuZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gc30sbC5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIHV9LGx9LExvLmRhdHVtPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxMby5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PUgodCkpO2Zvcih2YXIgYT0wLG89dGhpcy5sZW5ndGg7YTxvO2ErKyl7aS5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT0ocj10aGlzW2FdKS5wYXJlbnROb2RlO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIEwoaSl9LExvLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcixuPXRoaXNbdF0saT1uLmxlbmd0aC0xLGE9bltpXTstLWk+PTA7KShyPW5baV0pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxMby5zb3J0PWZ1bmN0aW9uKHQpe3Q9cS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciBlPS0xLHI9dGhpcy5sZW5ndGg7KytlPHI7KXRoaXNbZV0uc29ydCh0KTtyZXR1cm4gdGhpcy5vcmRlcigpfSxMby5lYWNoPWZ1bmN0aW9uKHQpe3JldHVybiBHKHRoaXMsZnVuY3Rpb24oZSxyLG4pe3QuY2FsbChlLGUuX19kYXRhX18scixuKX0pfSxMby5jYWxsPWZ1bmN0aW9uKHQpe3ZhciBlPWhvKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LExvLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxMby5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLmxlbmd0aDt0PGU7dCsrKWZvcih2YXIgcj10aGlzW3RdLG49MCxpPXIubGVuZ3RoO248aTtuKyspe3ZhciBhPXJbbl07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH0sTG8uc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIEcodGhpcyxmdW5jdGlvbigpeysrdH0pLHR9O3ZhciBJbz1bXTt1by5zZWxlY3Rpb24uZW50ZXI9WSx1by5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPUlvLElvLmFwcGVuZD1Mby5hcHBlbmQsSW8uZW1wdHk9TG8uZW1wdHksSW8ubm9kZT1Mby5ub2RlLElvLmNhbGw9TG8uY2FsbCxJby5zaXplPUxvLnNpemUsSW8uc2VsZWN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG89W10scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7bj0oaT10aGlzW3NdKS51cGRhdGUsby5wdXNoKGU9W10pLGUucGFyZW50Tm9kZT1pLnBhcmVudE5vZGU7Zm9yKHZhciB1PS0xLGM9aS5sZW5ndGg7Kyt1PGM7KShhPWlbdV0pPyhlLnB1c2goblt1XT1yPXQuY2FsbChpLnBhcmVudE5vZGUsYS5fX2RhdGFfXyx1LHMpKSxyLl9fZGF0YV9fPWEuX19kYXRhX18pOmUucHVzaChudWxsKX1yZXR1cm4gTChvKX0sSW8uaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9WCh0aGlzKSksTG8uaW5zZXJ0LmNhbGwodGhpcyx0LGUpfSx1by5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0PyhyPVtUbyh0LGZvKV0sci5wYXJlbnROb2RlPWZvLmRvY3VtZW50RWxlbWVudCk6KHI9W3RdLHIucGFyZW50Tm9kZT1lKHQpKSxMKFtyXSl9LHVvLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGU9aG8oU28odCxmbykpLGUucGFyZW50Tm9kZT1mby5kb2N1bWVudEVsZW1lbnQpOihlPWhvKHQpLGUucGFyZW50Tm9kZT1udWxsKSxMKFtlXSl9LExvLm9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtuPDImJihlPSExKTtmb3IociBpbiB0KXRoaXMuZWFjaChXKHIsdFtyXSxlKSk7cmV0dXJuIHRoaXN9aWYobjwyKXJldHVybihuPXRoaXMubm9kZSgpWyJfX29uIit0XSkmJm4uXztyPSExfXJldHVybiB0aGlzLmVhY2goVyh0LGUscikpfTt2YXIgRG89dW8ubWFwKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO2ZvJiZEby5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJvbiIrdCBpbiBmbyYmRG8ucmVtb3ZlKHQpfSk7dmFyIFBvLE9vPTA7dW8ubW91c2U9ZnVuY3Rpb24odCl7cmV0dXJuIFEodCxTKCkpfTt2YXIgUm89dGhpcy5uYXZpZ2F0b3ImJi9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO3VvLnRvdWNoPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPWUsZT1TKCkuY2hhbmdlZFRvdWNoZXMpLGUpZm9yKHZhciBuLGk9MCxhPWUubGVuZ3RoO2k8YTsrK2kpaWYoKG49ZVtpXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIFEodCxuKX0sdW8uYmVoYXZpb3IuZHJhZz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsYSkub24oInRvdWNoc3RhcnQuZHJhZyIsbyl9ZnVuY3Rpb24gZSh0LGUsbixhLG8pe3JldHVybiBmdW5jdGlvbigpe2Z1bmN0aW9uIHMoKXt2YXIgdCxyLG49ZShmLG0pO24mJih0PW5bMF0tYlswXSxyPW5bMV0tYlsxXSxwfD10fHIsYj1uLGQoe3R5cGU6ImRyYWciLHg6blswXSt1WzBdLHk6blsxXSt1WzFdLGR4OnQsZHk6cn0pKX1mdW5jdGlvbiBsKCl7ZShmLG0pJiYoZy5vbihhK3YsbnVsbCkub24obyt2LG51bGwpLHkocCksZCh7dHlwZToiZHJhZ2VuZCJ9KSl9dmFyIHUsYz10aGlzLGg9dW8uZXZlbnQudGFyZ2V0LmNvcnJlc3BvbmRpbmdFbGVtZW50fHx1by5ldmVudC50YXJnZXQsZj1jLnBhcmVudE5vZGUsZD1yLm9mKGMsYXJndW1lbnRzKSxwPTAsbT10KCksdj0iLmRyYWciKyhudWxsPT1tPyIiOiItIittKSxnPXVvLnNlbGVjdChuKGgpKS5vbihhK3Yscykub24obyt2LGwpLHk9SyhoKSxiPWUoZixtKTtpPyh1PWkuYXBwbHkoYyxhcmd1bWVudHMpLHU9W3UueC1iWzBdLHUueS1iWzFdXSk6dT1bMCwwXSxkKHt0eXBlOiJkcmFnc3RhcnQifSl9fXZhciByPUUodCwiZHJhZyIsImRyYWdzdGFydCIsImRyYWdlbmQiKSxpPW51bGwsYT1lKE0sdW8ubW91c2UsbiwibW91c2Vtb3ZlIiwibW91c2V1cCIpLG89ZSgkLHVvLnRvdWNoLHgsInRvdWNobW92ZSIsInRvdWNoZW5kIik7cmV0dXJuIHQub3JpZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdW8ucmViaW5kKHQsciwib24iKX0sdW8udG91Y2hlcz1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJihlPVMoKS50b3VjaGVzKSxlP2hvKGUpLm1hcChmdW5jdGlvbihlKXt2YXIgcj1RKHQsZSk7cmV0dXJuIHIuaWRlbnRpZmllcj1lLmlkZW50aWZpZXIscn0pOltdfTt2YXIgRm89MWUtNixqbz1GbypGbyxObz1NYXRoLlBJLEJvPTIqTm8sVW89Qm8tRm8sVm89Tm8vMixIbz1Oby8xODAscW89MTgwL05vLEdvPU1hdGguU1FSVDI7dW8uaW50ZXJwb2xhdGVab29tPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sbD1lWzFdLHU9ZVsyXSxjPXMtaSxoPWwtYSxmPWMqYytoKmg7aWYoZjxqbyluPU1hdGgubG9nKHUvbykvR28scj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmMsYSt0KmgsbypNYXRoLmV4cChHbyp0Km4pXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSxtPSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxnPU1hdGgubG9nKE1hdGguc3FydChtKm0rMSktbSk7bj0oZy12KS9HbyxyPWZ1bmN0aW9uKHQpe3ZhciBlPXQqbixyPWF0KHYpLHM9by8oMipkKSoocipvdChHbyplK3YpLWl0KHYpKTtyZXR1cm5baStzKmMsYStzKmgsbypyL2F0KEdvKmUrdildfX1yZXR1cm4gci5kdXJhdGlvbj0xZTMqbixyfSx1by5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt0Lm9uKHosaCkub24oWG8rIi56b29tIixkKS5vbigiZGJsY2xpY2suem9vbSIscCkub24oUCxmKX1mdW5jdGlvbiBlKHQpe3JldHVyblsodFswXS1rLngpL2suaywodFsxXS1rLnkpL2sua119ZnVuY3Rpb24gcih0KXtyZXR1cm5bdFswXSprLmsray54LHRbMV0qay5rK2sueV19ZnVuY3Rpb24gaSh0KXtrLms9TWF0aC5tYXgoU1swXSxNYXRoLm1pbihTWzFdLHQpKX1mdW5jdGlvbiBhKHQsZSl7ZT1yKGUpLGsueCs9dFswXS1lWzBdLGsueSs9dFsxXS1lWzFdfWZ1bmN0aW9uIG8oZSxyLG4sbyl7ZS5fX2NoYXJ0X189e3g6ay54LHk6ay55LGs6ay5rfSxpKE1hdGgucG93KDIsbykpLGEodj1yLG4pLGU9dW8uc2VsZWN0KGUpLEw+MCYmKGU9ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oTCkpLGUuY2FsbCh0LmV2ZW50KX1mdW5jdGlvbiBzKCl7XyYmXy5kb21haW4oeC5yYW5nZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1rLngpL2sua30pLm1hcCh4LmludmVydCkpLE0mJk0uZG9tYWluKHcucmFuZ2UoKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuKHQtay55KS9rLmt9KS5tYXAody5pbnZlcnQpKX1mdW5jdGlvbiBsKHQpe0MrK3x8dCh7dHlwZToiem9vbXN0YXJ0In0pfWZ1bmN0aW9uIHUodCl7cygpLHQoe3R5cGU6Inpvb20iLHNjYWxlOmsuayx0cmFuc2xhdGU6W2sueCxrLnldfSl9ZnVuY3Rpb24gYyh0KXstLUN8fCh0KHt0eXBlOiJ6b29tZW5kIn0pLHY9bnVsbCl9ZnVuY3Rpb24gaCgpe2Z1bmN0aW9uIHQoKXtzPTEsYSh1by5tb3VzZShpKSxmKSx1KG8pfWZ1bmN0aW9uIHIoKXtoLm9uKEksbnVsbCkub24oRCxudWxsKSxkKHMpLGMobyl9dmFyIGk9dGhpcyxvPU8ub2YoaSxhcmd1bWVudHMpLHM9MCxoPXVvLnNlbGVjdChuKGkpKS5vbihJLHQpLm9uKEQsciksZj1lKHVvLm1vdXNlKGkpKSxkPUsoaSk7QmwuY2FsbChpKSxsKG8pfWZ1bmN0aW9uIGYoKXtmdW5jdGlvbiB0KCl7dmFyIHQ9dW8udG91Y2hlcyhwKTtyZXR1cm4gZD1rLmssdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuaWRlbnRpZmllciBpbiB2JiYodlt0LmlkZW50aWZpZXJdPWUodCkpfSksdH1mdW5jdGlvbiByKCl7dmFyIGU9dW8uZXZlbnQudGFyZ2V0O3VvLnNlbGVjdChlKS5vbih4LG4pLm9uKF8scyksdy5wdXNoKGUpO2Zvcih2YXIgcj11by5ldmVudC5jaGFuZ2VkVG91Y2hlcyxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXZbcltpXS5pZGVudGlmaWVyXT1udWxsO3ZhciBsPXQoKSx1PURhdGUubm93KCk7aWYoMT09PWwubGVuZ3RoKXtpZih1LWI8NTAwKXt2YXIgYz1sWzBdO28ocCxjLHZbYy5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKGsuaykvTWF0aC5MTjIpKzEpLFQoKX1iPXV9ZWxzZSBpZihsLmxlbmd0aD4xKXt2YXIgYz1sWzBdLGg9bFsxXSxmPWNbMF0taFswXSxkPWNbMV0taFsxXTtnPWYqZitkKmR9fWZ1bmN0aW9uIG4oKXt2YXIgdCxlLHIsbixvPXVvLnRvdWNoZXMocCk7QmwuY2FsbChwKTtmb3IodmFyIHM9MCxsPW8ubGVuZ3RoO3M8bDsrK3Msbj1udWxsKWlmKHI9b1tzXSxuPXZbci5pZGVudGlmaWVyXSl7aWYoZSlicmVhazt0PXIsZT1ufWlmKG4pe3ZhciBjPShjPXJbMF0tdFswXSkqYysoYz1yWzFdLXRbMV0pKmMsaD1nJiZNYXRoLnNxcnQoYy9nKTt0PVsodFswXStyWzBdKS8yLCh0WzFdK3JbMV0pLzJdLGU9WyhlWzBdK25bMF0pLzIsKGVbMV0rblsxXSkvMl0saShoKmQpfWI9bnVsbCxhKHQsZSksdShtKX1mdW5jdGlvbiBzKCl7aWYodW8uZXZlbnQudG91Y2hlcy5sZW5ndGgpe2Zvcih2YXIgZT11by5ldmVudC5jaGFuZ2VkVG91Y2hlcyxyPTAsbj1lLmxlbmd0aDtyPG47KytyKWRlbGV0ZSB2W2Vbcl0uaWRlbnRpZmllcl07Zm9yKHZhciBpIGluIHYpcmV0dXJuIHZvaWQgdCgpfXVvLnNlbGVjdEFsbCh3KS5vbih5LG51bGwpLE0ub24oeixoKS5vbihQLGYpLEEoKSxjKG0pfXZhciBkLHA9dGhpcyxtPU8ub2YocCxhcmd1bWVudHMpLHY9e30sZz0wLHk9Ii56b29tLSIrdW8uZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uaWRlbnRpZmllcix4PSJ0b3VjaG1vdmUiK3ksXz0idG91Y2hlbmQiK3ksdz1bXSxNPXVvLnNlbGVjdChwKSxBPUsocCk7cigpLGwobSksTS5vbih6LG51bGwpLm9uKFAscil9ZnVuY3Rpb24gZCgpe3ZhciB0PU8ub2YodGhpcyxhcmd1bWVudHMpO3k/Y2xlYXJUaW1lb3V0KHkpOihCbC5jYWxsKHRoaXMpLG09ZSh2PWd8fHVvLm1vdXNlKHRoaXMpKSxsKHQpKSx5PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt5PW51bGwsYyh0KX0sNTApLFQoKSxpKE1hdGgucG93KDIsLjAwMipZbygpKSprLmspLGEodixtKSx1KHQpfWZ1bmN0aW9uIHAoKXt2YXIgdD11by5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGsuaykvTWF0aC5MTjI7byh0aGlzLHQsZSh0KSx1by5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwociktMTpNYXRoLmZsb29yKHIpKzEpfXZhciBtLHYsZyx5LGIseCxfLHcsTSxrPXt4OjAseTowLGs6MX0sQT1bOTYwLDUwMF0sUz1XbyxMPTI1MCxDPTAsej0ibW91c2Vkb3duLnpvb20iLEk9Im1vdXNlbW92ZS56b29tIixEPSJtb3VzZXVwLnpvb20iLFA9InRvdWNoc3RhcnQuem9vbSIsTz1FKHQsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7cmV0dXJuIFhvfHwoWG89Im9ud2hlZWwiaW4gZm8/KFlvPWZ1bmN0aW9uKCl7cmV0dXJuLXVvLmV2ZW50LmRlbHRhWSoodW8uZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBmbz8oWW89ZnVuY3Rpb24oKXtyZXR1cm4gdW8uZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooWW89ZnVuY3Rpb24oKXtyZXR1cm4tdW8uZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx0LmV2ZW50PWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbigpe3ZhciB0PU8ub2YodGhpcyxhcmd1bWVudHMpLGU9aztqbD91by5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7az10aGlzLl9fY2hhcnRfX3x8e3g6MCx5OjAsazoxfSxsKHQpfSkudHdlZW4oInpvb206em9vbSIsZnVuY3Rpb24oKXt2YXIgcj1BWzBdLG49QVsxXSxpPXY/dlswXTpyLzIsYT12P3ZbMV06bi8yLG89dW8uaW50ZXJwb2xhdGVab29tKFsoaS1rLngpL2suaywoYS1rLnkpL2suayxyL2sua10sWyhpLWUueCkvZS5rLChhLWUueSkvZS5rLHIvZS5rXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPW8oZSkscz1yL25bMl07dGhpcy5fX2NoYXJ0X189az17eDppLW5bMF0qcyx5OmEtblsxXSpzLGs6c30sdSh0KX19KS5lYWNoKCJpbnRlcnJ1cHQuem9vbSIsZnVuY3Rpb24oKXtjKHQpfSkuZWFjaCgiZW5kLnpvb20iLGZ1bmN0aW9uKCl7Yyh0KX0pOih0aGlzLl9fY2hhcnRfXz1rLGwodCksdSh0KSxjKHQpKX0pfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaz17eDorZVswXSx5OitlWzFdLGs6ay5rfSxzKCksdCk6W2sueCxrLnldfSx0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXt4OmsueCx5OmsueSxrOm51bGx9LGkoK2UpLHMoKSx0KTprLmt9LHQuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9bnVsbD09ZT9XbzpbK2VbMF0sK2VbMV1dLHQpOlN9LHQuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPWUmJlsrZVswXSwrZVsxXV0sdCk6Z30sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPWUmJlsrZVswXSwrZVsxXV0sdCk6QX0sdC5kdXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTD0rZSx0KTpMfSx0Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ZSx4PWUuY29weSgpLGs9e3g6MCx5OjAsazoxfSx0KTpffSx0Lnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09ZSx3PWUuY29weSgpLGs9e3g6MCx5OjAsazoxfSx0KTpNfSx1by5yZWJpbmQodCxPLCJvbiIpfTt2YXIgWW8sWG8sV289WzAsMS8wXTt1by5jb2xvcj1sdCxsdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKSsiIn0sdW8uaHNsPXV0O3ZhciBabz11dC5wcm90b3R5cGU9bmV3IGx0O1pvLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/dDoxKSxuZXcgdXQodGhpcy5oLHRoaXMucyx0aGlzLmwvdCl9LFpvLmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IHV0KHRoaXMuaCx0aGlzLnMsdCp0aGlzLmwpfSxaby5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gY3QodGhpcy5oLHRoaXMucyx0aGlzLmwpfSx1by5oY2w9aHQ7dmFyIEpvPWh0LnByb3RvdHlwZT1uZXcgbHQ7Sm8uYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0aGlzLmgsdGhpcy5jLE1hdGgubWluKDEwMCx0aGlzLmwrS28qKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxKby5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLUtvKihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKX0sSm8ucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGZ0KHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0sdW8ubGFiPWR0O3ZhciBLbz0xOCxRbz0uOTUwNDcsJG89MSx0cz0xLjA4ODgzLGVzPWR0LnByb3RvdHlwZT1uZXcgbHQ7ZXMuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdChNYXRoLm1pbigxMDAsdGhpcy5sK0tvKihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxlcy5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkdChNYXRoLm1heCgwLHRoaXMubC1LbyooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sZXMucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHB0KHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdW8ucmdiPWJ0O3ZhciBycz1idC5wcm90b3R5cGU9bmV3IGx0O3JzLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3Q9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpO3ZhciBlPXRoaXMucixyPXRoaXMuZyxuPXRoaXMuYixpPTMwO3JldHVybiBlfHxyfHxuPyhlJiZlPGkmJihlPWkpLHImJnI8aSYmKHI9aSksbiYmbjxpJiYobj1pKSxuZXcgYnQoTWF0aC5taW4oMjU1LGUvdCksTWF0aC5taW4oMjU1LHIvdCksTWF0aC5taW4oMjU1LG4vdCkpKTpuZXcgYnQoaSxpLGkpfSxycy5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBidCh0KnRoaXMucix0KnRoaXMuZyx0KnRoaXMuYil9LHJzLmhzbD1mdW5jdGlvbigpe3JldHVybiBrdCh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LHJzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK3d0KHRoaXMucikrd3QodGhpcy5nKSt3dCh0aGlzLmIpfTt2YXIgbnM9dW8ubWFwKHthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9KTtucy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bnMuc2V0KHQseHQoZSkpfSksdW8uZnVuY3Rvcj1FdCx1by54aHI9THQoeCksdW8uZHN2PWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIsYSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoYT1yLHI9bnVsbCk7dmFyIG89Q3QodCxlLG51bGw9PXI/bjppKHIpLGEpO3JldHVybiBvLnJvdz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKG51bGw9PShyPXQpP246aSh0KSk6cn0sb31mdW5jdGlvbiBuKHQpe3JldHVybiByLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gci5wYXJzZShlLnJlc3BvbnNlVGV4dCx0KX19ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBzLnRlc3QodCk/JyInK3QucmVwbGFjZSgvXCIvZywnIiInKSsnIic6dH12YXIgcz1uZXcgUmVnRXhwKCdbIicrdCsiXG5dIiksbD10LmNoYXJDb2RlQXQoMCk7cmV0dXJuIHIucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gci5wYXJzZVJvd3ModCxmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO3ZhciBpPW5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0KSsiOiBkWyIrZSsiXSJ9KS5qb2luKCIsIikrIn0iKTtuPWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gZShpKHQpLHIpfTppfSl9LHIucGFyc2VSb3dzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe2lmKGM+PXUpcmV0dXJuIG87aWYoaSlyZXR1cm4gaT0hMSxhO3ZhciBlPWM7aWYoMzQ9PT10LmNoYXJDb2RlQXQoZSkpe2Zvcih2YXIgcj1lO3IrKzx1OylpZigzND09PXQuY2hhckNvZGVBdChyKSl7aWYoMzQhPT10LmNoYXJDb2RlQXQocisxKSlicmVhazsrK3J9Yz1yKzI7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSk7cmV0dXJuIDEzPT09bj8oaT0hMCwxMD09PXQuY2hhckNvZGVBdChyKzIpJiYrK2MpOjEwPT09biYmKGk9ITApLHQuc2xpY2UoZSsxLHIpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2M8dTspe3ZhciBuPXQuY2hhckNvZGVBdChjKyspLHM9MTtpZigxMD09PW4paT0hMDtlbHNlIGlmKDEzPT09bilpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGMpJiYoKytjLCsrcyk7ZWxzZSBpZihuIT09bCljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGMtcyl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKHZhciBuLGksYT17fSxvPXt9LHM9W10sdT10Lmxlbmd0aCxjPTAsaD0wOyhuPXIoKSkhPT1vOyl7Zm9yKHZhciBmPVtdO24hPT1hJiZuIT09bzspZi5wdXNoKG4pLG49cigpO2UmJm51bGw9PShmPWUoZixoKyspKXx8cy5wdXNoKGYpfXJldHVybiBzfSxyLmZvcm1hdD1mdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGVbMF0pKXJldHVybiByLmZvcm1hdFJvd3MoZSk7dmFyIG49bmV3IGIsaT1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KW4uaGFzKGUpfHxpLnB1c2gobi5hZGQoZSkpfSksW2kubWFwKG8pLmpvaW4odCldLmNvbmNhdChlLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIG8oZVt0XSl9KS5qb2luKHQpfSkpLmpvaW4oIlxuIil9LHIuZm9ybWF0Um93cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoYSkuam9pbigiXG4iKX0scn0sdW8uY3N2PXVvLmRzdigiLCIsInRleHQvY3N2IiksdW8udHN2PXVvLmRzdigiXHQiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIGlzLGFzLG9zLHNzLGxzPXRoaXNbdyh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O3VvLnRpbWVyPWZ1bmN0aW9uKCl7RHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx1by50aW1lci5mbHVzaD1mdW5jdGlvbigpe090KCksUnQoKX0sdW8ucm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9NYXRoLnJvdW5kKHQqKGU9TWF0aC5wb3coMTAsZSkpKS9lOk1hdGgucm91bmQodCl9O3ZhciB1cz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoanQpO3VvLmZvcm1hdFByZWZpeD1mdW5jdGlvbih0LGUpe3ZhciByPTA7cmV0dXJuKHQ9K3QpJiYodDwwJiYodCo9LTEpLGUmJih0PXVvLnJvdW5kKHQsRnQodCxlKSkpLHI9MStNYXRoLmZsb29yKDFlLTEyK01hdGgubG9nKHQpL01hdGguTE4xMCkscj1NYXRoLm1heCgtMjQsTWF0aC5taW4oMjQsMypNYXRoLmZsb29yKChyLTEpLzMpKSkpLHVzWzgrci8zXX07dmFyIGNzPS8oPzooW157XSk/KFs8Pj1eXSkpPyhbK1wtIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLi0/XGQrKT8oW2EteiVdKT8vaSxocz11by5tYXAoe2I6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoOCl9LHg6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoMTYpfSxYOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0scjpmdW5jdGlvbih0LGUpe3JldHVybih0PXVvLnJvdW5kKHQsRnQodCxlKSkpLnRvRml4ZWQoTWF0aC5tYXgoMCxNYXRoLm1pbigyMCxGdCh0KigxKzFlLTE1KSxlKSkpKX19KSxmcz11by50aW1lPXt9LGRzPURhdGU7VXQucHJvdG90eXBlPXtnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXRlKCl9LGdldERheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDRGF5KCl9LGdldEZ1bGxZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENGdWxsWWVhcigpfSxnZXRIb3VyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDSG91cnMoKX0sZ2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaWxsaXNlY29uZHMoKX0sZ2V0TWludXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTWludXRlcygpfSxnZXRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDTW9udGgoKX0sZ2V0U2Vjb25kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8uZ2V0VVRDU2Vjb25kcygpfSxnZXRUaW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRUaW1lKCl9LGdldFRpbWV6b25lT2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9LHZhbHVlT2Y6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLnZhbHVlT2YoKX0sc2V0RGF0ZTpmdW5jdGlvbigpe3BzLnNldFVUQ0RhdGUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldERheTpmdW5jdGlvbigpe3BzLnNldFVUQ0RheS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtwcy5zZXRVVENGdWxsWWVhci5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0SG91cnM6ZnVuY3Rpb24oKXtwcy5zZXRVVENIb3Vycy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TWlsbGlzZWNvbmRzOmZ1bmN0aW9uKCl7cHMuc2V0VVRDTWlsbGlzZWNvbmRzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaW51dGVzOmZ1bmN0aW9uKCl7cHMuc2V0VVRDTWludXRlcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0TW9udGg6ZnVuY3Rpb24oKXtwcy5zZXRVVENNb250aC5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0U2Vjb25kczpmdW5jdGlvbigpe3BzLnNldFVUQ1NlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldFRpbWU6ZnVuY3Rpb24oKXtwcy5zZXRUaW1lLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfX07dmFyIHBzPURhdGUucHJvdG90eXBlO2ZzLnllYXI9VnQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9ZnMuZGF5KHQpLHQuc2V0TW9udGgoMCwxKSx0fSxmdW5jdGlvbih0LGUpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK2UpfSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSksZnMueWVhcnM9ZnMueWVhci5yYW5nZSxmcy55ZWFycy51dGM9ZnMueWVhci51dGMucmFuZ2UsZnMuZGF5PVZ0KGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBkcygyZTMsMCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSksZX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSksZnMuZGF5cz1mcy5kYXkucmFuZ2UsZnMuZGF5cy51dGM9ZnMuZGF5LnV0Yy5yYW5nZSxmcy5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9ZnMueWVhcih0KTtyZXR1cm4gTWF0aC5mbG9vcigodC1lLTZlNCoodC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1KX0sWyJzdW5kYXkiLCJtb25kYXkiLCJ0dWVzZGF5Iiwid2VkbmVzZGF5IiwidGh1cnNkYXkiLCJmcmlkYXkiLCJzYXR1cmRheSJdLmZvckVhY2goZnVuY3Rpb24odCxlKXtlPTctZTt2YXIgcj1mc1t0XT1WdChmdW5jdGlvbih0KXtyZXR1cm4odD1mcy5kYXkodCkpLnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrZSklNyksdH0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7dmFyIHI9ZnMueWVhcih0KS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigoZnMuZGF5T2ZZZWFyKHQpKyhyK2UpJTcpLzcpLShyIT09ZSl9KTtmc1t0KyJzIl09ci5yYW5nZSxmc1t0KyJzIl0udXRjPXIudXRjLnJhbmdlLGZzW3QrIk9mWWVhciJdPWZ1bmN0aW9uKHQpe3ZhciByPWZzLnllYXIodCkuZ2V0RGF5KCk7cmV0dXJuIE1hdGguZmxvb3IoKGZzLmRheU9mWWVhcih0KSsocitlKSU3KS83KX19KSxmcy53ZWVrPWZzLnN1bmRheSxmcy53ZWVrcz1mcy5zdW5kYXkucmFuZ2UsZnMud2Vla3MudXRjPWZzLnN1bmRheS51dGMucmFuZ2UsZnMud2Vla09mWWVhcj1mcy5zdW5kYXlPZlllYXI7dmFyIG1zPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHZzPS9eXHMqXGQrLyxncz0vXiUvO3VvLmxvY2FsZT1mdW5jdGlvbih0KXtyZXR1cm57bnVtYmVyRm9ybWF0Ok50KHQpLHRpbWVGb3JtYXQ6cXQodCl9fTt2YXIgeXM9dW8ubG9jYWxlKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxkYXRlVGltZToiJWEgJWIgJWUgJVggJVkiLGRhdGU6IiVtLyVkLyVZIix0aW1lOiIlSDolTTolUyIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt1by5mb3JtYXQ9eXMubnVtYmVyRm9ybWF0LHVvLmdlbz17fSxoZS5wcm90b3R5cGU9e3M6MCx0OjAsYWRkOmZ1bmN0aW9uKHQpe2ZlKHQsdGhpcy50LGJzKSxmZShicy5zLHRoaXMucyx0aGlzKSx0aGlzLnM/dGhpcy50Kz1icy50OnRoaXMucz1icy50fSxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgYnM9bmV3IGhlO3VvLmdlby5zdHJlYW09ZnVuY3Rpb24odCxlKXt0JiZ4cy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP3hzW3QudHlwZV0odCxlKTpkZSh0LGUpfTt2YXIgeHM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtkZSh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspZGUocltuXS5nZW9tZXRyeSxlKX19LF9zPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspdD1yW25dLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cGUodC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KXBlKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe21lKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspbWUocltuXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWRlKHJbbl0sZSl9fTt1by5nZW8uYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gd3M9MCx1by5nZW8uc3RyZWFtKHQsa3MpLHdzfTt2YXIgd3MsTXM9bmV3IGhlLGtzPXtzcGhlcmU6ZnVuY3Rpb24oKXt3cys9NCpOb30scG9pbnQ6TSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7TXMucmVzZXQoKSxrcy5saW5lU3RhcnQ9dmV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0yKk1zO3dzKz10PDA/NCpObyt0OnQsa3MubGluZVN0YXJ0PWtzLmxpbmVFbmQ9a3MucG9pbnQ9TX19O3VvLmdlby5ib3VuZHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Yi5wdXNoKHg9W2M9dCxmPXRdKSxlPGgmJihoPWUpLGU+ZCYmKGQ9ZSl9ZnVuY3Rpb24gZShlLHIpe3ZhciBuPWdlKFtlKkhvLHIqSG9dKTtpZihnKXt2YXIgaT1iZShnLG4pLGE9W2lbMV0sLWlbMF0sMF0sbz1iZShhLGkpO3dlKG8pLG89TWUobyk7dmFyIGw9ZS1wLHU9bD4wPzE6LTEsbT1vWzBdKnFvKnUsdj14byhsKT4xODA7aWYodl4odSpwPG0mJm08dSplKSl7dmFyIHk9b1sxXSpxbzt5PmQmJihkPXkpfWVsc2UgaWYobT0obSszNjApJTM2MC0xODAsdl4odSpwPG0mJm08dSplKSl7dmFyIHk9LW9bMV0qcW87eTxoJiYoaD15KX1lbHNlIHI8aCYmKGg9cikscj5kJiYoZD1yKTt2P2U8cD9zKGMsZSk+cyhjLGYpJiYoZj1lKTpzKGUsZik+cyhjLGYpJiYoYz1lKTpmPj1jPyhlPGMmJihjPWUpLGU+ZiYmKGY9ZSkpOmU+cD9zKGMsZSk+cyhjLGYpJiYoZj1lKTpzKGUsZik+cyhjLGYpJiYoYz1lKX1lbHNlIHQoZSxyKTtnPW4scD1lfWZ1bmN0aW9uIHIoKXtfLnBvaW50PWV9ZnVuY3Rpb24gbigpe3hbMF09Yyx4WzFdPWYsXy5wb2ludD10LGc9bnVsbH1mdW5jdGlvbiBpKHQscil7aWYoZyl7dmFyIG49dC1wO3krPXhvKG4pPjE4MD9uKyhuPjA/MzYwOi0zNjApOm59ZWxzZSBtPXQsdj1yO2tzLnBvaW50KHQsciksZSh0LHIpfWZ1bmN0aW9uIGEoKXtrcy5saW5lU3RhcnQoKX1mdW5jdGlvbiBvKCl7aShtLHYpLGtzLmxpbmVFbmQoKSx4byh5KT5GbyYmKGM9LShmPTE4MCkpLHhbMF09Yyx4WzFdPWYsZz1udWxsfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdFswXS1lWzBdfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fXZhciBjLGgsZixkLHAsbSx2LGcseSxiLHgsXz17cG9pbnQ6dCxsaW5lU3RhcnQ6cixsaW5lRW5kOm4scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Xy5wb2ludD1pLF8ubGluZVN0YXJ0PWEsXy5saW5lRW5kPW8seT0wLGtzLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7a3MucG9seWdvbkVuZCgpLF8ucG9pbnQ9dCxfLmxpbmVTdGFydD1yLF8ubGluZUVuZD1uLE1zPDA/KGM9LShmPTE4MCksaD0tKGQ9OTApKTp5PkZvP2Q9OTA6eTwtRm8mJihoPS05MCkseFswXT1jLHhbMV09Zn19O3JldHVybiBmdW5jdGlvbih0KXtkPWY9LShjPWg9MS8wKSxiPVtdLHVvLmdlby5zdHJlYW0odCxfKTt2YXIgZT1iLmxlbmd0aDtpZihlKXtiLnNvcnQobCk7Zm9yKHZhciByLG49MSxpPWJbMF0sYT1baV07bjxlOysrbilyPWJbbl0sdShyWzBdLGkpfHx1KHJbMV0saSk/KHMoaVswXSxyWzFdKT5zKGlbMF0saVsxXSkmJihpWzFdPXJbMV0pLHMoclswXSxpWzFdKT5zKGlbMF0saVsxXSkmJihpWzBdPXJbMF0pKTphLnB1c2goaT1yKTtmb3IodmFyIG8scixwPS0xLzAsZT1hLmxlbmd0aC0xLG49MCxpPWFbZV07bjw9ZTtpPXIsKytuKXI9YVtuXSwobz1zKGlbMV0sclswXSkpPnAmJihwPW8sYz1yWzBdLGY9aVsxXSl9cmV0dXJuIGI9eD1udWxsLGM9PT0xLzB8fGg9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbYyxoXSxbZixkXV19fSgpLHVvLmdlby5jZW50cm9pZD1mdW5jdGlvbih0KXtBcz1Ucz1Tcz1Fcz1Mcz1Dcz16cz1Jcz1Ecz1Qcz1Pcz0wLHVvLmdlby5zdHJlYW0odCxScyk7dmFyIGU9RHMscj1QcyxuPU9zLGk9ZSplK3IqcituKm47cmV0dXJuIGk8am8mJihlPUNzLHI9enMsbj1JcyxUczxGbyYmKGU9U3Mscj1FcyxuPUxzKSwoaT1lKmUrcipyK24qbik8am8pP1tOYU4sTmFOXTpbTWF0aC5hdGFuMihyLGUpKnFvLG50KG4vTWF0aC5zcXJ0KGkpKSpxb119O3ZhciBBcyxUcyxTcyxFcyxMcyxDcyx6cyxJcyxEcyxQcyxPcyxScz17c3BoZXJlOk0scG9pbnQ6QWUsbGluZVN0YXJ0OlNlLGxpbmVFbmQ6RWUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7UnMubGluZVN0YXJ0PUxlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7UnMubGluZVN0YXJ0PVNlfX0sRnM9T2UoemUsTmUsVWUsWy1ObywtTm8vMl0pLGpzPTFlOTt1by5nZW8uY2xpcEV4dGVudD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksYSxvPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIGkmJihpLnZhbGlkPSExKSxpPWEodCksaS52YWxpZD0hMCxpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9R2UodD0rc1swXVswXSxlPStzWzBdWzFdLHI9K3NbMV1bMF0sbj0rc1sxXVsxXSksaSYmKGkudmFsaWQ9ITEsaT1udWxsKSxvKTpbW3QsZV0sW3Isbl1dfX07cmV0dXJuIG8uZXh0ZW50KFtbMCwwXSxbOTYwLDUwMF1dKX0sKHVvLmdlby5jb25pY0VxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBZZShYZSl9KS5yYXc9WGUsdW8uZ2VvLmFsYmVycz1mdW5jdGlvbigpe3JldHVybiB1by5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKX0sdW8uZ2VvLmFsYmVyc1VzYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dmFyIGE9dFswXSxvPXRbMV07cmV0dXJuIGU9bnVsbCxyKGEsbyksZXx8KG4oYSxvKSxlKXx8aShhLG8pLGV9dmFyIGUscixuLGksYT11by5nZW8uYWxiZXJzKCksbz11by5nZW8uY29uaWNFcXVhbEFyZWEoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLHM9dW8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLGw9e3BvaW50OmZ1bmN0aW9uKHQscil7ZT1bdCxyXX19O3JldHVybiB0LmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1hLnNjYWxlKCkscj1hLnRyYW5zbGF0ZSgpLG49KHRbMF0tclswXSkvZSxpPSh0WzFdLXJbMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZuPj0tLjQyNSYmbjwtLjIxND9vOmk+PS4xNjYmJmk8LjIzNCYmbj49LS4yMTQmJm48LS4xMTU/czphKS5pbnZlcnQodCl9LHQuc3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPWEuc3RyZWFtKHQpLHI9by5zdHJlYW0odCksbj1zLnN0cmVhbSh0KTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24odCxpKXtlLnBvaW50KHQsaSksci5wb2ludCh0LGkpLG4ucG9pbnQodCxpKX0sc3BoZXJlOmZ1bmN0aW9uKCl7ZS5zcGhlcmUoKSxyLnNwaGVyZSgpLG4uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKSxuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksci5saW5lRW5kKCksbi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2UucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKSxuLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksci5wb2x5Z29uRW5kKCksbi5wb2x5Z29uRW5kKCl9fX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEucHJlY2lzaW9uKGUpLG8ucHJlY2lzaW9uKGUpLHMucHJlY2lzaW9uKGUpLHQpOmEucHJlY2lzaW9uKCl9LHQuc2NhbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEuc2NhbGUoZSksby5zY2FsZSguMzUqZSkscy5zY2FsZShlKSx0LnRyYW5zbGF0ZShhLnRyYW5zbGF0ZSgpKSk6YS5zY2FsZSgpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYS50cmFuc2xhdGUoKTt2YXIgdT1hLnNjYWxlKCksYz0rZVswXSxoPStlWzFdO3JldHVybiByPWEudHJhbnNsYXRlKGUpLmNsaXBFeHRlbnQoW1tjLS40NTUqdSxoLS4yMzgqdV0sW2MrLjQ1NSp1LGgrLjIzOCp1XV0pLnN0cmVhbShsKS5wb2ludCxuPW8udHJhbnNsYXRlKFtjLS4zMDcqdSxoKy4yMDEqdV0pLmNsaXBFeHRlbnQoW1tjLS40MjUqdStGbyxoKy4xMip1K0ZvXSxbYy0uMjE0KnUtRm8saCsuMjM0KnUtRm9dXSkuc3RyZWFtKGwpLnBvaW50LGk9cy50cmFuc2xhdGUoW2MtLjIwNSp1LGgrLjIxMip1XSkuY2xpcEV4dGVudChbW2MtLjIxNCp1K0ZvLGgrLjE2Nip1K0ZvXSxbYy0uMTE1KnUtRm8saCsuMjM0KnUtRm9dXSkuc3RyZWFtKGwpLnBvaW50LHR9LHQuc2NhbGUoMTA3MCl9O3ZhciBOcyxCcyxVcyxWcyxIcyxxcyxHcz17cG9pbnQ6TSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7QnM9MCxHcy5saW5lU3RhcnQ9V2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtHcy5saW5lU3RhcnQ9R3MubGluZUVuZD1Hcy5wb2ludD1NLE5zKz14byhCcy8yKX19LFlzPXtwb2ludDpaZSxsaW5lU3RhcnQ6TSxsaW5lRW5kOk0scG9seWdvblN0YXJ0Ok0scG9seWdvbkVuZDpNfSxYcz17cG9pbnQ6UWUsbGluZVN0YXJ0OiRlLGxpbmVFbmQ6dHIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WHMubGluZVN0YXJ0PWVyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7WHMucG9pbnQ9UWUsWHMubGluZVN0YXJ0PSRlLFhzLmxpbmVFbmQ9dHJ9fTt1by5nZW8ucGF0aD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgcyYmYS5wb2ludFJhZGl1cygrcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG8mJm8udmFsaWR8fChvPWkoYSkpLHVvLmdlby5zdHJlYW0odCxvKSksYS5yZXN1bHQoKX1mdW5jdGlvbiBlKCl7cmV0dXJuIG89bnVsbCx0fXZhciByLG4saSxhLG8scz00LjU7cmV0dXJuIHQuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gTnM9MCx1by5nZW8uc3RyZWFtKHQsaShHcykpLE5zfSx0LmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiBTcz1Fcz1Mcz1Dcz16cz1Jcz1Ecz1Qcz1Pcz0wLHVvLmdlby5zdHJlYW0odCxpKFhzKSksT3M/W0RzL09zLFBzL09zXTpJcz9bQ3MvSXMsenMvSXNdOkxzP1tTcy9McyxFcy9Mc106W05hTixOYU5dfSx0LmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gSHM9cXM9LShVcz1Wcz0xLzApLHVvLmdlby5zdHJlYW0odCxpKFlzKSksW1tVcyxWc10sW0hzLHFzXV19LHQucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0ocj10KT90LnN0cmVhbXx8aXIodCk6eCxlKCkpOnJ9LHQuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT0obj10KT9uZXcgSmU6bmV3IHJyKHQpLCJmdW5jdGlvbiIhPXR5cGVvZiBzJiZhLnBvaW50UmFkaXVzKHMpLGUoKSk6bn0sdC5wb2ludFJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOihhLnBvaW50UmFkaXVzKCtlKSwrZSksdCk6c30sdC5wcm9qZWN0aW9uKHVvLmdlby5hbGJlcnNVc2EoKSkuY29udGV4dChudWxsKX0sdW8uZ2VvLnRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm57c3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciByPW5ldyBhcihlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9fX0sYXIucHJvdG90eXBlPXtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fSx1by5nZW8ucHJvamVjdGlvbj1zcix1by5nZW8ucHJvamVjdGlvbk11dGF0b3I9bHIsKHVvLmdlby5lcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gc3IoY3IpfSkucmF3PWNyLmludmVydD1jcix1by5nZW8ucm90YXRpb249ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZT10KGVbMF0qSG8sZVsxXSpIbyksZVswXSo9cW8sZVsxXSo9cW8sZX1yZXR1cm4gdD1mcih0WzBdJTM2MCpIbyx0WzFdKkhvLHQubGVuZ3RoPjI/dFsyXSpIbzowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4gZT10LmludmVydChlWzBdKkhvLGVbMV0qSG8pLGVbMF0qPXFvLGVbMV0qPXFvLGV9LGV9LGhyLmludmVydD1jcix1by5nZW8uY2lyY2xlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sZT1mcigtdFswXSpIbywtdFsxXSpIbywwKS5pbnZlcnQsaT1bXTtyZXR1cm4gcihudWxsLG51bGwsMSx7cG9pbnQ6ZnVuY3Rpb24odCxyKXtpLnB1c2godD1lKHQscikpLHRbMF0qPXFvLHRbMV0qPXFvfX0pLHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbaV19fXZhciBlLHIsbj1bMCwwXSxpPTY7cmV0dXJuIHQub3JpZ2luPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5hbmdsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj12cigoZT0rbikqSG8saSpIbyksdCk6ZX0sdC5wcmVjaXNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dnIoZSpIbywoaT0rbikqSG8pLHQpOml9LHQuYW5nbGUoOTApfSx1by5nZW8uZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPShlWzBdLXRbMF0pKkhvLGk9dFsxXSpIbyxhPWVbMV0qSG8sbz1NYXRoLnNpbihuKSxzPU1hdGguY29zKG4pLGw9TWF0aC5zaW4oaSksdT1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGEpLGg9TWF0aC5jb3MoYSk7cmV0dXJuIE1hdGguYXRhbjIoTWF0aC5zcXJ0KChyPWgqbykqcisocj11KmMtbCpoKnMpKnIpLGwqYyt1Kmgqcyl9LHVvLmdlby5ncmF0aWN1bGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6ZSgpfX1mdW5jdGlvbiBlKCl7cmV0dXJuIHVvLnJhbmdlKE1hdGguY2VpbChhL3YpKnYsaSx2KS5tYXAoZikuY29uY2F0KHVvLnJhbmdlKE1hdGguY2VpbCh1L2cpKmcsbCxnKS5tYXAoZCkpLmNvbmNhdCh1by5yYW5nZShNYXRoLmNlaWwobi9wKSpwLHIscCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB4byh0JXYpPkZvfSkubWFwKGMpKS5jb25jYXQodW8ucmFuZ2UoTWF0aC5jZWlsKHMvbSkqbSxvLG0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4geG8odCVnKT5Gb30pLm1hcChoKSl9dmFyIHIsbixpLGEsbyxzLGwsdSxjLGgsZixkLHA9MTAsbT1wLHY9OTAsZz0zNjAseT0yLjU7cmV0dXJuIHQubGluZXM9ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLm1hcChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KX0sdC5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltmKGEpLmNvbmNhdChkKGwpLnNsaWNlKDEpLGYoaSkucmV2ZXJzZSgpLnNsaWNlKDEpLGQodSkucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx0LmV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90Lm1ham9yRXh0ZW50KGUpLm1pbm9yRXh0ZW50KGUpOnQubWlub3JFeHRlbnQoKX0sdC5tYWpvckV4dGVudD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZVswXVswXSxpPStlWzFdWzBdLHU9K2VbMF1bMV0sbD0rZVsxXVsxXSxhPmkmJihlPWEsYT1pLGk9ZSksdT5sJiYoZT11LHU9bCxsPWUpLHQucHJlY2lzaW9uKHkpKTpbW2EsdV0sW2ksbF1dfSx0Lm1pbm9yRXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlWzBdWzBdLHI9K2VbMV1bMF0scz0rZVswXVsxXSxvPStlWzFdWzFdLG4+ciYmKGU9bixuPXIscj1lKSxzPm8mJihlPXMscz1vLG89ZSksdC5wcmVjaXNpb24oeSkpOltbbixzXSxbcixvXV19LHQuc3RlcD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90Lm1ham9yU3RlcChlKS5taW5vclN0ZXAoZSk6dC5taW5vclN0ZXAoKX0sdC5tYWpvclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9K2VbMF0sZz0rZVsxXSx0KTpbdixnXX0sdC5taW5vclN0ZXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K2VbMF0sbT0rZVsxXSx0KTpbcCxtXX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K2UsYz15cihzLG8sOTApLGg9YnIobixyLHkpLGY9eXIodSxsLDkwKSxkPWJyKGEsaSx5KSx0KTp5fSx0Lm1ham9yRXh0ZW50KFtbLTE4MCwtOTArRm9dLFsxODAsOTAtRm9dXSkubWlub3JFeHRlbnQoW1stMTgwLC04MC1Gb10sWzE4MCw4MCtGb11dKX0sdW8uZ2VvLmdyZWF0QXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybnsKdHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6W2V8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpXX19dmFyIGUscixuPXhyLGk9X3I7cmV0dXJuIHQuZGlzdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdW8uZ2VvLmRpc3RhbmNlKGV8fG4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHJ8fGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sdC5zb3VyY2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cixlPSJmdW5jdGlvbiI9PXR5cGVvZiByP251bGw6cix0KTpufSx0LnRhcmdldD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU/bnVsbDplLHQpOml9LHQucHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dDowfSx0fSx1by5nZW8uaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd3IodFswXSpIbyx0WzFdKkhvLGVbMF0qSG8sZVsxXSpIbyl9LHVvLmdlby5sZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIFdzPTAsdW8uZ2VvLnN0cmVhbSh0LFpzKSxXc307dmFyIFdzLFpzPXtzcGhlcmU6TSxwb2ludDpNLGxpbmVTdGFydDpNcixsaW5lRW5kOk0scG9seWdvblN0YXJ0Ok0scG9seWdvbkVuZDpNfSxKcz1rcihmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KDIvKDErdCkpfSxmdW5jdGlvbih0KXtyZXR1cm4gMipNYXRoLmFzaW4odC8yKX0pOyh1by5nZW8uYXppbXV0aGFsRXF1YWxBcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKEpzKX0pLnJhdz1Kczt2YXIgS3M9a3IoZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5hY29zKHQpO3JldHVybiBlJiZlL01hdGguc2luKGUpfSx4KTsodW8uZ2VvLmF6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIHNyKEtzKX0pLnJhdz1LcywodW8uZ2VvLmNvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIFllKEFyKX0pLnJhdz1BciwodW8uZ2VvLmNvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWWUoVHIpfSkucmF3PVRyO3ZhciBRcz1rcihmdW5jdGlvbih0KXtyZXR1cm4gMS90fSxNYXRoLmF0YW4pOyh1by5nZW8uZ25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gc3IoUXMpfSkucmF3PVFzLFNyLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS1Wb119LCh1by5nZW8ubWVyY2F0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gRXIoU3IpfSkucmF3PVNyO3ZhciAkcz1rcihmdW5jdGlvbigpe3JldHVybiAxfSxNYXRoLmFzaW4pOyh1by5nZW8ub3J0aG9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIHNyKCRzKX0pLnJhdz0kczt2YXIgdGw9a3IoZnVuY3Rpb24odCl7cmV0dXJuIDEvKDErdCl9LGZ1bmN0aW9uKHQpe3JldHVybiAyKk1hdGguYXRhbih0KX0pOyh1by5nZW8uc3RlcmVvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBzcih0bCl9KS5yYXc9dGwsTHIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqTWF0aC5hdGFuKE1hdGguZXhwKHQpKS1Wb119LCh1by5nZW8udHJhbnN2ZXJzZU1lcmNhdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9RXIoTHIpLGU9dC5jZW50ZXIscj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/ZShbLXRbMV0sdFswXV0pOih0PWUoKSxbdFsxXSwtdFswXV0pfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD9yKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6KHQ9cigpLFt0WzBdLHRbMV0sdFsyXS05MF0pfSxyKFswLDAsOTBdKX0pLnJhdz1Mcix1by5nZW9tPXt9LHVvLmdlb20uaHVsbD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIGUsaT1FdChyKSxhPUV0KG4pLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihlPTA7ZTxvO2UrKylzLnB1c2goWytpLmNhbGwodGhpcyx0W2VdLGUpLCthLmNhbGwodGhpcyx0W2VdLGUpLGVdKTtmb3Iocy5zb3J0KERyKSxlPTA7ZTxvO2UrKylsLnB1c2goW3NbZV1bMF0sLXNbZV1bMV1dKTt2YXIgdT1JcihzKSxjPUlyKGwpLGg9Y1swXT09PXVbMF0sZj1jW2MubGVuZ3RoLTFdPT09dVt1Lmxlbmd0aC0xXSxkPVtdO2ZvcihlPXUubGVuZ3RoLTE7ZT49MDstLWUpZC5wdXNoKHRbc1t1W2VdXVsyXV0pO2ZvcihlPStoO2U8Yy5sZW5ndGgtZjsrK2UpZC5wdXNoKHRbc1tjW2VdXVsyXV0pO3JldHVybiBkfXZhciByPUNyLG49enI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0KTooZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsZSk6cn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZSk6bn0sZSl9LHVvLmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gQW8odCxlbCksdH07dmFyIGVsPXVvLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107ZWwuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sZWwuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sZWwuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9UnIodCksbD0tMSx1PXRoaXMubGVuZ3RoLVJyKHRoaXMpLGM9dGhpc1t1LTFdOysrbDx1Oyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylvPWVbcl0sUHIobyxjLGkpPyhQcihhLGMsaSl8fHQucHVzaChPcihhLG8sYyxpKSksdC5wdXNoKG8pKTpQcihhLGMsaSkmJnQucHVzaChPcihhLG8sYyxpKSksYT1vO3MmJnQucHVzaCh0WzBdKSxjPWl9cmV0dXJuIHR9O3ZhciBybCxubCxpbCxhbCxvbCxzbD1bXSxsbD1bXTtxci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMuZWRnZXMscj1lLmxlbmd0aDtyLS07KXQ9ZVtyXS5lZGdlLHQuYiYmdC5hfHxlLnNwbGljZShyLDEpO3JldHVybiBlLnNvcnQoWXIpLGUubGVuZ3RofSxybi5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxubi5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbih0LGUpe3ZhciByLG4saTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtyPXR9ZWxzZSB0aGlzLl8/KHQ9bG4odGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUscj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLHI9bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9cixlLkM9ITAsdD1lO3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCx0PW4pOih0PT09ci5SJiYob24odGhpcyxyKSx0PXIscj10LlUpLHIuQz0hMSxuLkM9ITAsc24odGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLkwmJihzbih0aGlzLHIpLHQ9cixyPXQuVSksci5DPSExLG4uQz0hMCxvbih0aGlzLG4pKSkscj10LlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbih0KXt0Lk4mJih0Lk4uUD10LlApLHQuUCYmKHQuUC5OPXQuTiksdC5OPXQuUD1udWxsO3ZhciBlLHIsbixpPXQuVSxhPXQuTCxvPXQuUjtpZihyPWE/bz9sbihvKTphOm8saT9pLkw9PT10P2kuTD1yOmkuUj1yOnRoaXMuXz1yLGEmJm8/KG49ci5DLHIuQz10LkMsci5MPWEsYS5VPXIsciE9PW8/KGk9ci5VLHIuVT10LlUsdD1yLlIsaS5MPXQsci5SPW8sby5VPXIpOihyLlU9aSxpPXIsdD1yLlIpKToobj10LkMsdD1yKSx0JiYodC5VPWkpLCFuKXtpZih0JiZ0LkMpcmV0dXJuIHZvaWQodC5DPSExKTtkb3tpZih0PT09dGhpcy5fKWJyZWFrO2lmKHQ9PT1pLkwpe2lmKGU9aS5SLGUuQyYmKGUuQz0hMSxpLkM9ITAsb24odGhpcyxpKSxlPWkuUiksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5SJiZlLlIuQ3x8KGUuTC5DPSExLGUuQz0hMCxzbih0aGlzLGUpLGU9aS5SKSxlLkM9aS5DLGkuQz1lLlIuQz0hMSxvbih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9aS5MLGUuQyYmKGUuQz0hMSxpLkM9ITAsc24odGhpcyxpKSxlPWkuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7ZS5MJiZlLkwuQ3x8KGUuUi5DPSExLGUuQz0hMCxvbih0aGlzLGUpLGU9aS5MKSxlLkM9aS5DLGkuQz1lLkwuQz0hMSxzbih0aGlzLGkpLHQ9dGhpcy5fO2JyZWFrfWUuQz0hMCx0PWksaT1pLlV9d2hpbGUoIXQuQyk7dCYmKHQuQz0hMSl9fX0sdW8uZ2VvbS52b3Jvbm9pPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxuPXNbMF1bMF0saT1zWzBdWzFdLGE9c1sxXVswXSxvPXNbMV1bMV07cmV0dXJuIHVuKHIodCkscykuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLHMpe3ZhciBsPXIuZWRnZXMsdT1yLnNpdGU7KGVbc109bC5sZW5ndGg/bC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5zdGFydCgpO3JldHVybltlLngsZS55XX0pOnUueD49biYmdS54PD1hJiZ1Lnk+PWkmJnUueTw9bz9bW24sb10sW2Esb10sW2EsaV0sW24saV1dOltdKS5wb2ludD10W3NdfSksZX1mdW5jdGlvbiByKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybnt4Ok1hdGgucm91bmQoYSh0LGUpL0ZvKSpGbyx5Ok1hdGgucm91bmQobyh0LGUpL0ZvKSpGbyxpOmV9fSl9dmFyIG49Q3IsaT16cixhPW4sbz1pLHM9dWw7cmV0dXJuIHQ/ZSh0KTooZS5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gdW4ocih0KSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmwmJnQucn0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnRbZS5sLmldLHRhcmdldDp0W2Uuci5pXX19KX0sZS50cmlhbmdsZXM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHVuKHIodCkpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYT1yLnNpdGUsbz1yLmVkZ2VzLnNvcnQoWXIpLHM9LTEsbD1vLmxlbmd0aCx1PW9bbC0xXS5lZGdlLGM9dS5sPT09YT91LnI6dS5sOysrczxsOyl1LGk9Yyx1PW9bc10uZWRnZSxjPXUubD09PWE/dS5yOnUubCxuPGkuaSYmbjxjLmkmJmhuKGEsaSxjKTwwJiZlLnB1c2goW3Rbbl0sdFtpLmldLHRbYy5pXV0pfSksZX0sZS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUV0KG49dCksZSk6bn0sZS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPUV0KGk9dCksZSk6aX0sZS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/dWw6dCxlKTpzPT09dWw/bnVsbDpzfSxlLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZS5jbGlwRXh0ZW50KHQmJltbMCwwXSx0XSk6cz09PXVsP251bGw6cyYmc1sxXX0sZSl9O3ZhciB1bD1bWy0xZTYsLTFlNl0sWzFlNiwxZTZdXTt1by5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKHQpe3JldHVybiB1by5nZW9tLnZvcm9ub2koKS50cmlhbmdsZXModCl9LHVvLmdlb20ucXVhZHRyZWU9ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyxzKXtpZighaXNOYU4ocikmJiFpc05hTihuKSlpZih0LmxlYWYpe3ZhciBsPXQueCxjPXQueTtpZihudWxsIT1sKWlmKHhvKGwtcikreG8oYy1uKTwuMDEpdSh0LGUscixuLGksYSxvLHMpO2Vsc2V7dmFyIGg9dC5wb2ludDt0Lng9dC55PXQucG9pbnQ9bnVsbCx1KHQsaCxsLGMsaSxhLG8scyksdSh0LGUscixuLGksYSxvLHMpfWVsc2UgdC54PXIsdC55PW4sdC5wb2ludD1lfWVsc2UgdSh0LGUscixuLGksYSxvLHMpfWZ1bmN0aW9uIHUodCxlLHIsbixpLG8scyxsKXt2YXIgdT0uNSooaStzKSxjPS41KihvK2wpLGg9cj49dSxmPW4+PWMsZD1mPDwxfGg7dC5sZWFmPSExLHQ9dC5ub2Rlc1tkXXx8KHQubm9kZXNbZF09cG4oKSksaD9pPXU6cz11LGY/bz1jOmw9YyxhKHQsZSxyLG4saSxvLHMsbCl9dmFyIGMsaCxmLGQscCxtLHYsZyx5LGI9RXQocykseD1FdChsKTtpZihudWxsIT1lKW09ZSx2PXIsZz1uLHk9aTtlbHNlIGlmKGc9eT0tKG09dj0xLzApLGg9W10sZj1bXSxwPXQubGVuZ3RoLG8pZm9yKGQ9MDtkPHA7KytkKWM9dFtkXSxjLng8bSYmKG09Yy54KSxjLnk8diYmKHY9Yy55KSxjLng+ZyYmKGc9Yy54KSxjLnk+eSYmKHk9Yy55KSxoLnB1c2goYy54KSxmLnB1c2goYy55KTtlbHNlIGZvcihkPTA7ZDxwOysrZCl7dmFyIF89K2IoYz10W2RdLGQpLHc9K3goYyxkKTtfPG0mJihtPV8pLHc8diYmKHY9dyksXz5nJiYoZz1fKSx3PnkmJih5PXcpLGgucHVzaChfKSxmLnB1c2godyl9dmFyIE09Zy1tLGs9eS12O00+az95PXYrTTpnPW0razt2YXIgQT1wbigpO2lmKEEuYWRkPWZ1bmN0aW9uKHQpe2EoQSx0LCtiKHQsKytkKSwreCh0LGQpLG0sdixnLHkpfSxBLnZpc2l0PWZ1bmN0aW9uKHQpe21uKHQsQSxtLHYsZyx5KX0sQS5maW5kPWZ1bmN0aW9uKHQpe3JldHVybiB2bihBLHRbMF0sdFsxXSxtLHYsZyx5KX0sZD0tMSxudWxsPT1lKXtmb3IoOysrZDxwOylhKEEsdFtkXSxoW2RdLGZbZF0sbSx2LGcseSk7LS1kfWVsc2UgdC5mb3JFYWNoKEEuYWRkKTtyZXR1cm4gaD1mPXQ9Yz1udWxsLEF9dmFyIG8scz1DcixsPXpyO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhzPWZuLGw9ZG4sMz09PW8mJihpPXIsbj1lLHI9ZT0wKSxhKHQpKTooYS54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsYSk6c30sYS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsYSk6bH0sYS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxhKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxhKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxhKX0sdW8uaW50ZXJwb2xhdGVSZ2I9Z24sdW8uaW50ZXJwb2xhdGVPYmplY3Q9eW4sdW8uaW50ZXJwb2xhdGVOdW1iZXI9Ym4sdW8uaW50ZXJwb2xhdGVTdHJpbmc9eG47dmFyIGNsPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxobD1uZXcgUmVnRXhwKGNsLnNvdXJjZSwiZyIpO3VvLmludGVycG9sYXRlPV9uLHVvLmludGVycG9sYXRvcnM9W2Z1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIGU7cmV0dXJuKCJzdHJpbmciPT09cj9ucy5oYXMoZS50b0xvd2VyQ2FzZSgpKXx8L14oI3xyZ2JcKHxoc2xcKCkvaS50ZXN0KGUpP2duOnhuOmUgaW5zdGFuY2VvZiBsdD9nbjpBcnJheS5pc0FycmF5KGUpP3duOiJvYmplY3QiPT09ciYmaXNOYU4oZSk/eW46Ym4pKHQsZSl9XSx1by5pbnRlcnBvbGF0ZUFycmF5PXduO3ZhciBmbD1mdW5jdGlvbigpe3JldHVybiB4fSxkbD11by5tYXAoe2xpbmVhcjpmbCxwb2x5OkxuLHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gVG59LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIFNufSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gQ259LGV4cDpmdW5jdGlvbigpe3JldHVybiB6bn0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIElufSxlbGFzdGljOkRuLGJhY2s6UG4sYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIE9ufX0pLHBsPXVvLm1hcCh7aW46eCxvdXQ6a24sImluLW91dCI6QW4sIm91dC1pbiI6ZnVuY3Rpb24odCl7cmV0dXJuIEFuKGtuKHQpKX19KTt1by5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLSIpLHI9ZT49MD90LnNsaWNlKDAsZSk6dCxuPWU+PTA/dC5zbGljZShlKzEpOiJpbiI7cmV0dXJuIHI9ZGwuZ2V0KHIpfHxmbCxuPXBsLmdldChuKXx8eCxNbihuKHIuYXBwbHkobnVsbCxjby5jYWxsKGFyZ3VtZW50cywxKSkpKX0sdW8uaW50ZXJwb2xhdGVIY2w9Um4sdW8uaW50ZXJwb2xhdGVIc2w9Rm4sdW8uaW50ZXJwb2xhdGVMYWI9am4sdW8uaW50ZXJwb2xhdGVSb3VuZD1Obix1by50cmFuc2Zvcm09ZnVuY3Rpb24odCl7dmFyIGU9Zm8uY3JlYXRlRWxlbWVudE5TKHVvLm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4odW8udHJhbnNmb3JtPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe2Uuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpO3ZhciByPWUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IEJuKHI/ci5tYXRyaXg6bWwpfSkodCl9LEJuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgbWw9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTt1by5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1abix1by5sYXlvdXQ9e30sdW8ubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goUW4odFtyXSkpO3JldHVybiBlfX0sdW8ubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0LHUsaCxmLGQscD17fSxtPVtdLHY9dW8ucmFuZ2UoYSksZz1bXTtmb3Iocj1bXSxuPVtdLHQ9MCxmPS0xOysrZjxhOyl7Zm9yKHU9MCxkPS0xOysrZDxhOyl1Kz1pW2ZdW2RdO20ucHVzaCh1KSxnLnB1c2godW8ucmFuZ2UoYSkpLHQrPXV9Zm9yKG8mJnYuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvKG1bdF0sbVtlXSl9KSxzJiZnLmZvckVhY2goZnVuY3Rpb24odCxlKXt0LnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gcyhpW2VdW3RdLGlbZV1bcl0pfSl9KSx0PShCby1jKmEpL3QsdT0wLGY9LTE7KytmPGE7KXtmb3IoaD11LGQ9LTE7KytkPGE7KXt2YXIgeT12W2ZdLGI9Z1t5XVtkXSx4PWlbeV1bYl0sXz11LHc9dSs9eCp0O3BbeSsiLSIrYl09e2luZGV4Onksc3ViaW5kZXg6YixzdGFydEFuZ2xlOl8sZW5kQW5nbGU6dyx2YWx1ZTp4fX1uW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6aCxlbmRBbmdsZTp1LHZhbHVlOm1beV19LHUrPWN9Zm9yKGY9LTE7KytmPGE7KWZvcihkPWYtMTsrK2Q8YTspe3ZhciBNPXBbZisiLSIrZF0saz1wW2QrIi0iK2ZdOyhNLnZhbHVlfHxrLnZhbHVlKSYmci5wdXNoKE0udmFsdWU8ay52YWx1ZT97c291cmNlOmssdGFyZ2V0Ok19Ontzb3VyY2U6TSx0YXJnZXQ6a30pfWwmJmUoKX1mdW5jdGlvbiBlKCl7ci5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwoKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlKS8yLChlLnNvdXJjZS52YWx1ZStlLnRhcmdldC52YWx1ZSkvMil9KX12YXIgcixuLGksYSxvLHMsbCx1PXt9LGM9MDtyZXR1cm4gdS5tYXRyaXg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9KGk9dCkmJmkubGVuZ3RoLHI9bj1udWxsLHUpOml9LHUucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LHI9bj1udWxsLHUpOmN9LHUuc29ydEdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LHI9bj1udWxsLHUpOm99LHUuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LHI9bnVsbCx1KTpzfSx1LnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxyJiZlKCksdSk6bH0sdS5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dCgpLHJ9LHUuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIG58fHQoKSxufSx1fSx1by5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3JldHVybiBmdW5jdGlvbihlLHIsbixpKXtpZihlLnBvaW50IT09dCl7dmFyIGE9ZS5jeC10Lngsbz1lLmN5LXQueSxzPWktcixsPWEqYStvKm87aWYocypzL2c8bCl7aWYobDxtKXt2YXIgdT1lLmNoYXJnZS9sO3QucHgtPWEqdSx0LnB5LT1vKnV9cmV0dXJuITB9aWYoZS5wb2ludCYmbCYmbDxtKXt2YXIgdT1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSp1LHQucHktPW8qdX19cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBlKHQpe3QucHg9dW8uZXZlbnQueCx0LnB5PXVvLmV2ZW50LnksbC5yZXN1bWUoKX12YXIgcixuLGksYSxvLHMsbD17fSx1PXVvLmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxjPVsxLDFdLGg9LjksZj12bCxkPWdsLHA9LTMwLG09eWwsdj0uMSxnPS42NCx5PVtdLGI9W107cmV0dXJuIGwudGljaz1mdW5jdGlvbigpe2lmKChpKj0uOTkpPC4wMDUpcmV0dXJuIHI9bnVsbCx1LmVuZCh7dHlwZToiZW5kIixhbHBoYTppPTB9KSwhMDt2YXIgZSxuLGwsZixkLG0sZyx4LF8sdz15Lmxlbmd0aCxNPWIubGVuZ3RoO2ZvcihuPTA7bjxNOysrbilsPWJbbl0sZj1sLnNvdXJjZSxkPWwudGFyZ2V0LHg9ZC54LWYueCxfPWQueS1mLnksKG09eCp4K18qXykmJihtPWkqb1tuXSooKG09TWF0aC5zcXJ0KG0pKS1hW25dKS9tLHgqPW0sXyo9bSxkLngtPXgqKGc9Zi53ZWlnaHQrZC53ZWlnaHQ/Zi53ZWlnaHQvKGYud2VpZ2h0K2Qud2VpZ2h0KTouNSksZC55LT1fKmcsZi54Kz14KihnPTEtZyksZi55Kz1fKmcpO2lmKChnPWkqdikmJih4PWNbMF0vMixfPWNbMV0vMixuPS0xLGcpKWZvcig7KytuPHc7KWw9eVtuXSxsLngrPSh4LWwueCkqZyxsLnkrPShfLWwueSkqZztpZihwKWZvcihhaShlPXVvLmdlb20ucXVhZHRyZWUoeSksaSxzKSxuPS0xOysrbjx3OykobD15W25dKS5maXhlZHx8ZS52aXNpdCh0KGwpKTtmb3Iobj0tMTsrK248dzspbD15W25dLGwuZml4ZWQ/KGwueD1sLnB4LGwueT1sLnB5KToobC54LT0obC5weC0obC5weD1sLngpKSpoLGwueS09KGwucHktKGwucHk9bC55KSkqaCk7dS50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTppfSl9LGwubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCxsKTp5fSxsLmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQsbCk6Yn0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbCk6Y30sbC5saW5rRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxsKTpmfSxsLmRpc3RhbmNlPWwubGlua0Rpc3RhbmNlLGwubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3QsbCk6ZH0sbC5mcmljdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxsKTpofSxsLmNoYXJnZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGwpOnB9LGwuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09dCp0LGwpOk1hdGguc3FydChtKX0sbC5ncmF2aXR5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PSt0LGwpOnZ9LGwudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dCp0LGwpOk1hdGguc3FydChnKX0sbC5hbHBoYT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rdCxpP3Q+MD9pPXQ6KHIuYz1udWxsLHIudD1OYU4scj1udWxsLHUuZW5kKHt0eXBlOiJlbmQiLGFscGhhOmk9MH0pKTp0PjAmJih1LnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6aT10fSkscj1EdChsLnRpY2spKSxsKTppfSxsLnN0YXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe2lmKCFyKXtmb3Iocj1uZXcgQXJyYXkoaSksbD0wO2w8aTsrK2wpcltsXT1bXTtmb3IobD0wO2w8dTsrK2wpe3ZhciBhPWJbbF07clthLnNvdXJjZS5pbmRleF0ucHVzaChhLnRhcmdldCksclthLnRhcmdldC5pbmRleF0ucHVzaChhLnNvdXJjZSl9fWZvcih2YXIgbyxzPXJbZV0sbD0tMSxjPXMubGVuZ3RoOysrbDxjOylpZighaXNOYU4obz1zW2xdW3RdKSlyZXR1cm4gbztyZXR1cm4gTWF0aC5yYW5kb20oKSpufXZhciBlLHIsbixpPXkubGVuZ3RoLHU9Yi5sZW5ndGgsaD1jWzBdLG09Y1sxXTtmb3IoZT0wO2U8aTsrK2UpKG49eVtlXSkuaW5kZXg9ZSxuLndlaWdodD0wO2ZvcihlPTA7ZTx1OysrZSluPWJbZV0sIm51bWJlciI9PXR5cGVvZiBuLnNvdXJjZSYmKG4uc291cmNlPXlbbi5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIG4udGFyZ2V0JiYobi50YXJnZXQ9eVtuLnRhcmdldF0pLCsrbi5zb3VyY2Uud2VpZ2h0LCsrbi50YXJnZXQud2VpZ2h0O2ZvcihlPTA7ZTxpOysrZSluPXlbZV0saXNOYU4obi54KSYmKG4ueD10KCJ4IixoKSksaXNOYU4obi55KSYmKG4ueT10KCJ5IixtKSksaXNOYU4obi5weCkmJihuLnB4PW4ueCksaXNOYU4obi5weSkmJihuLnB5PW4ueSk7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IoZT0wO2U8dTsrK2UpYVtlXT0rZi5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7ZTx1OysrZSlhW2VdPWY7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZClmb3IoZT0wO2U8dTsrK2Upb1tlXT0rZC5jYWxsKHRoaXMsYltlXSxlKTtlbHNlIGZvcihlPTA7ZTx1OysrZSlvW2VdPWQ7aWYocz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IoZT0wO2U8aTsrK2Upc1tlXT0rcC5jYWxsKHRoaXMseVtlXSxlKTtlbHNlIGZvcihlPTA7ZTxpOysrZSlzW2VdPXA7cmV0dXJuIGwucmVzdW1lKCl9LGwucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGwuYWxwaGEoLjEpfSxsLnN0b3A9ZnVuY3Rpb24oKXtyZXR1cm4gbC5hbHBoYSgwKX0sbC5kcmFnPWZ1bmN0aW9uKCl7aWYobnx8KG49dW8uYmVoYXZpb3IuZHJhZygpLm9yaWdpbih4KS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixlaSkub24oImRyYWcuZm9yY2UiLGUpLm9uKCJkcmFnZW5kLmZvcmNlIixyaSkpLCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO3RoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsbmkpLm9uKCJtb3VzZW91dC5mb3JjZSIsaWkpLmNhbGwobil9LHVvLnJlYmluZChsLHUsIm9uIil9O3ZhciB2bD0yMCxnbD0xLHlsPTEvMDt1by5sYXlvdXQuaGllcmFyY2h5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwodT1yLmNhbGwodCxhLGEuZGVwdGgpKSYmKGw9dS5sZW5ndGgpKXtmb3IodmFyIGwsdSxjOy0tbD49MDspby5wdXNoKGM9dVtsXSksYy5wYXJlbnQ9YSxjLmRlcHRoPWEuZGVwdGgrMTtuJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPXV9ZWxzZSBuJiYoYS52YWx1ZT0rbi5jYWxsKHQsYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuIGxpKGksZnVuY3Rpb24odCl7dmFyIHIsaTtlJiYocj10LmNoaWxkcmVuKSYmci5zb3J0KGUpLG4mJihpPXQucGFyZW50KSYmKGkudmFsdWUrPXQudmFsdWUpfSksc312YXIgZT1oaSxyPXVpLG49Y2k7cmV0dXJuIHQuc29ydD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQuY2hpbGRyZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWUsdCk6bn0sdC5yZXZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBuJiYoc2koZSxmdW5jdGlvbih0KXt0LmNoaWxkcmVuJiYodC52YWx1ZT0wKX0pLGxpKGUsZnVuY3Rpb24oZSl7dmFyIHI7ZS5jaGlsZHJlbnx8KGUudmFsdWU9K24uY2FsbCh0LGUsZS5kZXB0aCl8fDApLChyPWUucGFyZW50KSYmKHIudmFsdWUrPWUudmFsdWUpfSkpLGV9LHR9LHVvLmxheW91dC5wYXJ0aXRpb249ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUscixuLGkpe3ZhciBhPWUuY2hpbGRyZW47aWYoZS54PXIsZS55PWUuZGVwdGgqaSxlLmR4PW4sZS5keT1pLGEmJihvPWEubGVuZ3RoKSl7dmFyIG8scyxsLHU9LTE7Zm9yKG49ZS52YWx1ZT9uL2UudmFsdWU6MDsrK3U8bzspdChzPWFbdV0scixsPXMudmFsdWUqbixpKSxyKz1sfX1mdW5jdGlvbiBlKHQpe3ZhciByPXQuY2hpbGRyZW4sbj0wO2lmKHImJihpPXIubGVuZ3RoKSlmb3IodmFyIGksYT0tMTsrK2E8aTspbj1NYXRoLm1heChuLGUoclthXSkpO3JldHVybiAxK259ZnVuY3Rpb24gcihyLGEpe3ZhciBvPW4uY2FsbCh0aGlzLHIsYSk7cmV0dXJuIHQob1swXSwwLGlbMF0saVsxXS9lKG9bMF0pKSxvfXZhciBuPXVvLmxheW91dC5oaWVyYXJjaHkoKSxpPVsxLDFdO3JldHVybiByLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxyKTppfSxvaShyLG4pfSx1by5sYXlvdXQucGllPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChvKXt2YXIgcyxsPW8ubGVuZ3RoLHU9by5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm4rZS5jYWxsKHQscixuKX0pLGM9KygiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxoPSgiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS1jLGY9TWF0aC5taW4oTWF0aC5hYnMoaCkvbCwrKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpKSxkPWYqKGg8MD8tMToxKSxwPXVvLnN1bSh1KSxtPXA/KGgtbCpkKS9wOjAsdj11by5yYW5nZShsKSxnPVtdO3JldHVybiBudWxsIT1yJiZ2LnNvcnQocj09PWJsP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHVbZV0tdVt0XX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihvW3RdLG9bZV0pfSksdi5mb3JFYWNoKGZ1bmN0aW9uKHQpe2dbdF09e2RhdGE6b1t0XSx2YWx1ZTpzPXVbdF0sc3RhcnRBbmdsZTpjLGVuZEFuZ2xlOmMrPXMqbStkLHBhZEFuZ2xlOmZ9fSksZ312YXIgZT1OdW1iZXIscj1ibCxuPTAsaT1CbyxhPTA7cmV0dXJuIHQudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cix0KTplfSx0LnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSx0KTpufSx0LmVuZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdC5wYWRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHQpOmF9LHR9O3ZhciBibD17fTt1by5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHMsbCl7aWYoIShmPXMubGVuZ3RoKSlyZXR1cm4gczt2YXIgdT1zLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlLmNhbGwodCxyLG4pfSksYz11Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm5bYS5jYWxsKHQsZSxyKSxvLmNhbGwodCxlLHIpXX0pfSksaD1yLmNhbGwodCxjLGwpO3U9dW8ucGVybXV0ZSh1LGgpLGM9dW8ucGVybXV0ZShjLGgpO3ZhciBmLGQscCxtLHY9bi5jYWxsKHQsYyxsKSxnPXVbMF0ubGVuZ3RoO2ZvcihwPTA7cDxnOysrcClmb3IoaS5jYWxsKHQsdVswXVtwXSxtPXZbcF0sY1swXVtwXVsxXSksZD0xO2Q8ZjsrK2QpaS5jYWxsKHQsdVtkXVtwXSxtKz1jW2QtMV1bcF1bMV0sY1tkXVtwXVsxXSk7cmV0dXJuIHN9dmFyIGU9eCxyPXZpLG49Z2ksaT1taSxhPWRpLG89cGk7cmV0dXJuIHQudmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXIsdCk6ZX0sdC5vcmRlcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnhsLmdldChlKXx8dmksdCk6cn0sdC5vZmZzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfbC5nZXQoZSl8fGdpLHQpOm59LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lLHQpOmF9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1lLHQpOm99LHQub3V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWUsdCk6aX0sdH07dmFyIHhsPXVvLm1hcCh7Imluc2lkZS1vdXQiOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lmxlbmd0aCxpPXQubWFwKHlpKSxhPXQubWFwKGJpKSxvPXVvLnJhbmdlKG4pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gaVt0XS1pW2VdfSkscz0wLGw9MCx1PVtdLGM9W107Zm9yKGU9MDtlPG47KytlKXI9b1tlXSxzPGw/KHMrPWFbcl0sdS5wdXNoKHIpKToobCs9YVtyXSxjLnB1c2gocikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQodSl9LHJldmVyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHVvLnJhbmdlKHQubGVuZ3RoKS5yZXZlcnNlKCl9LGRlZmF1bHQ6dml9KSxfbD11by5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLHUsYz10Lmxlbmd0aCxoPXRbMF0sZj1oLmxlbmd0aCxkPVtdO2ZvcihkWzBdPWw9dT0wLHI9MTtyPGY7KytyKXtmb3IoZT0wLGk9MDtlPGM7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1oW3JdWzBdLWhbci0xXVswXTtlPGM7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19ZFtyXT1sLT1pP2EvaSpzOjAsbDx1JiYodT1sKX1mb3Iocj0wO3I8ZjsrK3IpZFtyXS09dTtyZXR1cm4gZH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOmdpfSk7dW8ubGF5b3V0Lmhpc3RvZ3JhbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxhKXtmb3IodmFyIG8scyxsPVtdLHU9dC5tYXAocix0aGlzKSxjPW4uY2FsbCh0aGlzLHUsYSksaD1pLmNhbGwodGhpcyxjLHUsYSksYT0tMSxmPXUubGVuZ3RoLGQ9aC5sZW5ndGgtMSxwPWU/MToxL2Y7KythPGQ7KW89bFthXT1bXSxvLmR4PWhbYSsxXS0oby54PWhbYV0pLG8ueT0wO2lmKGQ+MClmb3IoYT0tMTsrK2E8ZjspKHM9dVthXSk+PWNbMF0mJnM8PWNbMV0mJihvPWxbdW8uYmlzZWN0KGgscywxLGQpLTFdLG8ueSs9cCxvLnB1c2godFthXSkpO3JldHVybiBsfXZhciBlPSEwLHI9TnVtYmVyLG49TWksaT1faTtyZXR1cm4gdC52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1lLHQpOnJ9LHQucmFuZ2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49RXQoZSksdCk6bn0sdC5iaW5zPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJudW1iZXIiPT10eXBlb2YgZT9mdW5jdGlvbih0KXtyZXR1cm4gd2kodCxlKX06RXQoZSksdCk6aX0sdC5mcmVxdWVuY3k9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISFyLHQpOmV9LHR9LHVvLmxheW91dC5wYWNrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSx1PWlbMV0sYz1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCxsaShzLGZ1bmN0aW9uKHQpe3Qucj0rYyh0LnZhbHVlKX0pLGxpKHMsRWkpLG4pe3ZhciBoPW4qKGU/MTpNYXRoLm1heCgyKnMuci9sLDIqcy5yL3UpKS8yO2xpKHMsZnVuY3Rpb24odCl7dC5yKz1ofSksbGkocyxFaSksbGkocyxmdW5jdGlvbih0KXt0LnItPWh9KX1yZXR1cm4gemkocyxsLzIsdS8yLGU/MToxL01hdGgubWF4KDIqcy5yL2wsMipzLnIvdSkpLG99dmFyIGUscj11by5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChraSksbj0wLGk9WzEsMV07cmV0dXJuIHQuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1lLHQpOml9LHQucmFkaXVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW51bGw9PXJ8fCJmdW5jdGlvbiI9PXR5cGVvZiByP3I6K3IsdCk6ZX0sdC5wYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStlLHQpOm59LG9pKHQscil9LHVvLmxheW91dC50cmVlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBjPW8uY2FsbCh0aGlzLHQsaSksaD1jWzBdLGY9ZShoKTtpZihsaShmLHIpLGYucGFyZW50Lm09LWYueixzaShmLG4pLHUpc2koaCxhKTtlbHNle3ZhciBkPWgscD1oLG09aDtzaShoLGZ1bmN0aW9uKHQpe3QueDxkLngmJihkPXQpLHQueD5wLngmJihwPXQpLHQuZGVwdGg+bS5kZXB0aCYmKG09dCl9KTt2YXIgdj1zKGQscCkvMi1kLngsZz1sWzBdLyhwLngrcyhwLGQpLzIrdikseT1sWzFdLyhtLmRlcHRofHwxKTtzaShoLGZ1bmN0aW9uKHQpe3QueD0odC54K3YpKmcsdC55PXQuZGVwdGgqeX0pfXJldHVybiBjfWZ1bmN0aW9uIGUodCl7Zm9yKHZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO251bGwhPShlPW4ucG9wKCkpOylmb3IodmFyIGksYT1lLmNoaWxkcmVuLG89MCxzPWEubGVuZ3RoO288czsrK28pbi5wdXNoKChhW29dPWk9e186YVtvXSxwYXJlbnQ6ZSxjaGlsZHJlbjooaT1hW29dLmNoaWxkcmVuKSYmaS5zbGljZSgpfHxbXSxBOm51bGwsYTpudWxsLHo6MCxtOjAsYzowLHM6MCx0Om51bGwsaTpvfSkuYT1pKTtyZXR1cm4gci5jaGlsZHJlblswXX1mdW5jdGlvbiByKHQpe3ZhciBlPXQuY2hpbGRyZW4scj10LnBhcmVudC5jaGlsZHJlbixuPXQuaT9yW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXtGaSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtuPyh0Lno9bi56K3ModC5fLG4uXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIG4mJih0Lno9bi56K3ModC5fLG4uXykpO3QucGFyZW50LkE9aSh0LG4sdC5wYXJlbnQuQXx8clswXSl9ZnVuY3Rpb24gbih0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gaSh0LGUscil7aWYoZSl7Zm9yKHZhciBuLGk9dCxhPXQsbz1lLGw9aS5wYXJlbnQuY2hpbGRyZW5bMF0sdT1pLm0sYz1hLm0saD1vLm0sZj1sLm07bz1PaShvKSxpPVBpKGkpLG8mJmk7KWw9UGkobCksYT1PaShhKSxhLmE9dCxuPW8ueitoLWkuei11K3Moby5fLGkuXyksbj4wJiYoUmkoamkobyx0LHIpLHQsbiksdSs9bixjKz1uKSxoKz1vLm0sdSs9aS5tLGYrPWwubSxjKz1hLm07byYmIU9pKGEpJiYoYS50PW8sYS5tKz1oLWMpLGkmJiFQaShsKSYmKGwudD1pLGwubSs9dS1mLHI9dCl9cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXt0LngqPWxbMF0sdC55PXQuZGVwdGgqbFsxXX12YXIgbz11by5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxzPURpLGw9WzEsMV0sdT1udWxsO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZSx0KTpzfSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9bnVsbD09KGw9ZSk/YTpudWxsLHQpOnU/bnVsbDpsfSx0Lm5vZGVTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShsPWUpP251bGw6YSx0KTp1P2w6bnVsbH0sb2kodCxvKX0sdW8ubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsYSl7dmFyIG8scz1lLmNhbGwodGhpcyx0LGEpLGw9c1swXSx1PTA7bGkobCxmdW5jdGlvbih0KXt2YXIgZT10LmNoaWxkcmVuO2UmJmUubGVuZ3RoPyh0Lng9QmkoZSksdC55PU5pKGUpKToodC54PW8/dSs9cih0LG8pOjAsdC55PTAsbz10KX0pO3ZhciBjPVVpKGwpLGg9VmkobCksZj1jLngtcihjLGgpLzIsZD1oLngrcihoLGMpLzI7cmV0dXJuIGxpKGwsaT9mdW5jdGlvbih0KXt0Lng9KHQueC1sLngpKm5bMF0sdC55PShsLnktdC55KSpuWzFdfTpmdW5jdGlvbih0KXt0Lng9KHQueC1mKS8oZC1mKSpuWzBdLHQueT0oMS0obC55P3QueS9sLnk6MSkpKm5bMV19KSxzfXZhciBlPXVvLmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9RGksbj1bMSwxXSxpPSExO3JldHVybiB0LnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ZSx0KTpyfSx0LnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09KG49ZSksdCk6aT9udWxsOm59LHQubm9kZVNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbCE9KG49ZSksdCk6aT9uOm51bGx9LG9pKHQsZSl9LHVvLmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBlKHIpe3ZhciBhPXIuY2hpbGRyZW47aWYoYSYmYS5sZW5ndGgpe3ZhciBvLHMsbCx1PWgociksYz1bXSxmPWEuc2xpY2UoKSxwPTEvMCxtPSJzbGljZSI9PT1kP3UuZHg6ImRpY2UiPT09ZD91LmR5OiJzbGljZS1kaWNlIj09PWQ/MSZyLmRlcHRoP3UuZHk6dS5keDpNYXRoLm1pbih1LmR4LHUuZHkpO2Zvcih0KGYsdS5keCp1LmR5L3IudmFsdWUpLGMuYXJlYT0wOyhsPWYubGVuZ3RoKT4wOyljLnB1c2gobz1mW2wtMV0pLGMuYXJlYSs9by5hcmVhLCJzcXVhcmlmeSIhPT1kfHwocz1uKGMsbSkpPD1wPyhmLnBvcCgpLHA9cyk6KGMuYXJlYS09Yy5wb3AoKS5hcmVhLGkoYyxtLHUsITEpLG09TWF0aC5taW4odS5keCx1LmR5KSxjLmxlbmd0aD1jLmFyZWE9MCxwPTEvMCk7Yy5sZW5ndGgmJihpKGMsbSx1LCEwKSxjLmxlbmd0aD1jLmFyZWE9MCksYS5mb3JFYWNoKGUpfX1mdW5jdGlvbiByKGUpe3ZhciBuPWUuY2hpbGRyZW47aWYobiYmbi5sZW5ndGgpe3ZhciBhLG89aChlKSxzPW4uc2xpY2UoKSxsPVtdO2Zvcih0KHMsby5keCpvLmR5L2UudmFsdWUpLGwuYXJlYT0wO2E9cy5wb3AoKTspbC5wdXNoKGEpLGwuYXJlYSs9YS5hcmVhLG51bGwhPWEueiYmKGkobCxhLno/by5keDpvLmR5LG8sIXMubGVuZ3RoKSxsLmxlbmd0aD1sLmFyZWE9MCk7bi5mb3JFYWNoKHIpfX1mdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBuKj1uLGUqPWUsbj9NYXRoLm1heChlKmkqcC9uLG4vKGUqYSpwKSk6MS8wfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGksYT0tMSxvPXQubGVuZ3RoLHM9ci54LHU9ci55LGM9ZT9sKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2Zvcigobnx8Yz5yLmR5KSYmKGM9ci5keSk7KythPG87KWk9dFthXSxpLng9cyxpLnk9dSxpLmR5PWMscys9aS5keD1NYXRoLm1pbihyLngrci5keC1zLGM/bChpLmFyZWEvYyk6MCk7aS56PSEwLGkuZHgrPXIueCtyLmR4LXMsci55Kz1jLHIuZHktPWN9ZWxzZXtmb3IoKG58fGM+ci5keCkmJihjPXIuZHgpOysrYTxvOylpPXRbYV0saS54PXMsaS55PXUsaS5keD1jLHUrPWkuZHk9TWF0aC5taW4oci55K3IuZHktdSxjP2woaS5hcmVhL2MpOjApO2kuej0hMSxpLmR5Kz1yLnkrci5keS11LHIueCs9YyxyLmR4LT1jfX1mdW5jdGlvbiBhKG4pe3ZhciBpPW98fHMobiksYT1pWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD11WzBdLGEuZHk9dVsxXSk6YS5keD1hLmR5PTAsbyYmcy5yZXZhbHVlKGEpLHQoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwobz9yOmUpKGEpLGYmJihvPWkpLGl9dmFyIG8scz11by5sYXlvdXQuaGllcmFyY2h5KCksbD1NYXRoLnJvdW5kLHU9WzEsMV0sYz1udWxsLGg9SGksZj0hMSxkPSJzcXVhcmlmeSIscD0uNSooMStNYXRoLnNxcnQoNSkpO3JldHVybiBhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxhKTp1fSxhLnBhZGRpbmc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgcj10LmNhbGwoYSxlLGUuZGVwdGgpO3JldHVybiBudWxsPT1yP0hpKGUpOnFpKGUsIm51bWJlciI9PXR5cGVvZiByP1tyLHIscixyXTpyKX1mdW5jdGlvbiByKGUpe3JldHVybiBxaShlLHQpfWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBjO3ZhciBuO3JldHVybiBoPW51bGw9PShjPXQpP0hpOiJmdW5jdGlvbiI9PShuPXR5cGVvZiB0KT9lOiJudW1iZXIiPT09bj8odD1bdCx0LHQsdF0scik6cixhfSxhLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQ/TWF0aC5yb3VuZDpOdW1iZXIsYSk6bCE9TnVtYmVyfSxhLnN0aWNreT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LG89bnVsbCxhKTpmfSxhLnJhdGlvPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQsYSk6cH0sYS5tb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQrIiIsYSk6ZH0sb2koYSxzKX0sdW8ucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO3JldHVybiByPDImJihlPTEpLHI8MSYmKHQ9MCksZnVuY3Rpb24oKXt2YXIgcixuLGk7ZG97cj0yKk1hdGgucmFuZG9tKCktMSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9cipyK24qbn13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtlKnIqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIHQ9dW8ucmFuZG9tLm5vcm1hbC5hcHBseSh1byxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cCh0KCkpfX0sYmF0ZXM6ZnVuY3Rpb24odCl7dmFyIGU9dW8ucmFuZG9tLmlyd2luSGFsbCh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSgpL3R9fSxpcndpbkhhbGw6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAscj0wO3I8dDtyKyspZSs9TWF0aC5yYW5kb20oKTtyZXR1cm4gZX19fSx1by5zY2FsZT17fTt2YXIgd2w9e2Zsb29yOngsY2VpbDp4fTt1by5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gS2koWzAsMV0sWzAsMV0sX24sITEpfTt2YXIgTWw9e3M6MSxnOjEscDoxLHI6MSxlOjF9O3VvLnNjYWxlLmxvZz1mdW5jdGlvbigpe3JldHVybiBhYSh1by5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBrbD11by5mb3JtYXQoIi4wZSIpLEFsPXtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5jZWlsKC10KX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4tTWF0aC5mbG9vcigtdCl9fTt1by5zY2FsZS5wb3c9ZnVuY3Rpb24oKXtyZXR1cm4gb2EodW8uc2NhbGUubGluZWFyKCksMSxbMCwxXSl9LHVvLnNjYWxlLnNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdW8uc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx1by5zY2FsZS5vcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGxhKFtdLHt0OiJyYW5nZSIsYTpbW11dfSl9LHVvLnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdW8uc2NhbGUub3JkaW5hbCgpLnJhbmdlKFRsKX0sdW8uc2NhbGUuY2F0ZWdvcnkyMD1mdW5jdGlvbigpe3JldHVybiB1by5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoU2wpfSx1by5zY2FsZS5jYXRlZ29yeTIwYj1mdW5jdGlvbigpe3JldHVybiB1by5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoRWwpfSx1by5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB1by5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoTGwpfTt2YXIgVGw9WzIwNjIyNjAsMTY3NDQyMDYsMjkyNDU4OCwxNDAzNDcyOCw5NzI1ODg1LDkxOTcxMzEsMTQ5MDczMzAsODM1NTcxMSwxMjM2OTE4NiwxNTU2MTc1XS5tYXAoX3QpLFNsPVsyMDYyMjYwLDExNDU0NDQwLDE2NzQ0MjA2LDE2NzU5NjcyLDI5MjQ1ODgsMTAwMTg2OTgsMTQwMzQ3MjgsMTY3NTA3NDIsOTcyNTg4NSwxMjk1NTg2MSw5MTk3MTMxLDEyODg1MTQwLDE0OTA3MzMwLDE2MjM0MTk0LDgzNTU3MTEsMTMwOTI4MDcsMTIzNjkxODYsMTQ0MDg1ODksMTU1NjE3NSwxMDQxMDcyNV0ubWFwKF90KSxFbD1bMzc1MDc3Nyw1Mzk1NjE5LDcwNDA3MTksMTAyNjQyODYsNjUxOTA5Nyw5MjE2NTk0LDExOTE1MTE1LDEzNTU2NjM2LDkyMDI5OTMsMTI0MjY4MDksMTUxODY1MTQsMTUxOTA5MzIsODY2NjE2OSwxMTM1NjQ5MCwxNDA0OTY0MywxNTE3NzM3Miw4MDc3NjgzLDEwODM0MzI0LDEzNTI4NTA5LDE0NTg5NjU0XS5tYXAoX3QpLExsPVszMjQ0NzMzLDcwNTcxMTAsMTA0MDY2MjUsMTMwMzI0MzEsMTUwOTUwNTMsMTY2MTY3NjQsMTY2MjUyNTksMTY2MzQwMTgsMzI1MzA3Niw3NjUyNDcwLDEwNjA3MDAzLDEzMTAxNTA0LDc2OTUyODEsMTAzOTQzMTIsMTIzNjkzNzIsMTQzNDI4OTEsNjUxMzUwNyw5ODY4OTUwLDEyNDM0ODc3LDE0Mjc3MDgxXS5tYXAoX3QpO3VvLnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHVhKFtdLFtdKX0sdW8uc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gY2EoMCwxLFswLDFdKX0sdW8uc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGhhKFsuNV0sWzAsMV0pfSx1by5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmYShbMCwxXSl9LHVvLnN2Zz17fSx1by5zdmcuYXJjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PU1hdGgubWF4KDAsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx1PU1hdGgubWF4KDAsK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxjPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLVZvLGg9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyktVm8sZj1NYXRoLmFicyhoLWMpLGQ9Yz5oPzA6MTtpZih1PHQmJihwPXUsdT10LHQ9cCksZj49VW8pcmV0dXJuIGUodSxkKSsodD9lKHQsMS1kKToiIikrIloiO3ZhciBwLG0sdixnLHksYix4LF8sdyxNLGssQSxUPTAsUz0wLEU9W107aWYoKGc9KCtsLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MCkvMikmJih2PWE9PT1DbD9NYXRoLnNxcnQodCp0K3UqdSk6K2EuYXBwbHkodGhpcyxhcmd1bWVudHMpLGR8fChTKj0tMSksdSYmKFM9bnQodi91Kk1hdGguc2luKGcpKSksdCYmKFQ9bnQodi90Kk1hdGguc2luKGcpKSkpLHUpe3k9dSpNYXRoLmNvcyhjK1MpLGI9dSpNYXRoLnNpbihjK1MpLHg9dSpNYXRoLmNvcyhoLVMpLF89dSpNYXRoLnNpbihoLVMpO3ZhciBMPU1hdGguYWJzKGgtYy0yKlMpPD1Obz8wOjE7aWYoUyYmYmEoeSxiLHgsXyk9PT1kXkwpe3ZhciBDPShjK2gpLzI7eT11Kk1hdGguY29zKEMpLGI9dSpNYXRoLnNpbihDKSx4PV89bnVsbH19ZWxzZSB5PWI9MDtpZih0KXt3PXQqTWF0aC5jb3MoaC1UKSxNPXQqTWF0aC5zaW4oaC1UKSxrPXQqTWF0aC5jb3MoYytUKSxBPXQqTWF0aC5zaW4oYytUKTt2YXIgej1NYXRoLmFicyhjLWgrMipUKTw9Tm8/MDoxO2lmKFQmJmJhKHcsTSxrLEEpPT09MS1kXnope3ZhciBJPShjK2gpLzI7dz10Kk1hdGguY29zKEkpLE09dCpNYXRoLnNpbihJKSxrPUE9bnVsbH19ZWxzZSB3PU09MDtpZihmPkZvJiYocD1NYXRoLm1pbihNYXRoLmFicyh1LXQpLzIsK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSk+LjAwMSl7bT10PHVeZD8wOjE7dmFyIEQ9cCxQPXA7aWYoZjxObyl7dmFyIE89bnVsbD09az9bdyxNXTpudWxsPT14P1t5LGJdOk9yKFt5LGJdLFtrLEFdLFt4LF9dLFt3LE1dKSxSPXktT1swXSxGPWItT1sxXSxqPXgtT1swXSxOPV8tT1sxXSxCPTEvTWF0aC5zaW4oTWF0aC5hY29zKChSKmorRipOKS8oTWF0aC5zcXJ0KFIqUitGKkYpKk1hdGguc3FydChqKmorTipOKSkpLzIpLFU9TWF0aC5zcXJ0KE9bMF0qT1swXStPWzFdKk9bMV0pO1A9TWF0aC5taW4ocCwodC1VKS8oQi0xKSksRD1NYXRoLm1pbihwLCh1LVUpLyhCKzEpKX1pZihudWxsIT14KXt2YXIgVj14YShudWxsPT1rP1t3LE1dOltrLEFdLFt5LGJdLHUsRCxkKSxIPXhhKFt4LF9dLFt3LE1dLHUsRCxkKTtwPT09RD9FLnB1c2goIk0iLFZbMF0sIkEiLEQsIiwiLEQsIiAwIDAsIixtLCIgIixWWzFdLCJBIix1LCIsIix1LCIgMCAiLDEtZF5iYShWWzFdWzBdLFZbMV1bMV0sSFsxXVswXSxIWzFdWzFdKSwiLCIsZCwiICIsSFsxXSwiQSIsRCwiLCIsRCwiIDAgMCwiLG0sIiAiLEhbMF0pOkUucHVzaCgiTSIsVlswXSwiQSIsRCwiLCIsRCwiIDAgMSwiLG0sIiAiLEhbMF0pfWVsc2UgRS5wdXNoKCJNIix5LCIsIixiKTtpZihudWxsIT1rKXt2YXIgcT14YShbeSxiXSxbayxBXSx0LC1QLGQpLEc9eGEoW3csTV0sbnVsbD09eD9beSxiXTpbeCxfXSx0LC1QLGQpO3A9PT1QP0UucHVzaCgiTCIsR1swXSwiQSIsUCwiLCIsUCwiIDAgMCwiLG0sIiAiLEdbMV0sIkEiLHQsIiwiLHQsIiAwICIsZF5iYShHWzFdWzBdLEdbMV1bMV0scVsxXVswXSxxWzFdWzFdKSwiLCIsMS1kLCIgIixxWzFdLCJBIixQLCIsIixQLCIgMCAwLCIsbSwiICIscVswXSk6RS5wdXNoKCJMIixHWzBdLCJBIixQLCIsIixQLCIgMCAwLCIsbSwiICIscVswXSl9ZWxzZSBFLnB1c2goIkwiLHcsIiwiLE0pfWVsc2UgRS5wdXNoKCJNIix5LCIsIixiKSxudWxsIT14JiZFLnB1c2goIkEiLHUsIiwiLHUsIiAwICIsTCwiLCIsZCwiICIseCwiLCIsXyksRS5wdXNoKCJMIix3LCIsIixNKSxudWxsIT1rJiZFLnB1c2goIkEiLHQsIiwiLHQsIiAwICIseiwiLCIsMS1kLCIgIixrLCIsIixBKTtyZXR1cm4gRS5wdXNoKCJaIiksRS5qb2luKCIiKX1mdW5jdGlvbiBlKHQsZSl7cmV0dXJuIk0wLCIrdCsiQSIrdCsiLCIrdCsiIDAgMSwiK2UrIiAwLCIrLXQrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiK3R9dmFyIHI9cGEsbj1tYSxpPWRhLGE9Q2wsbz12YSxzPWdhLGw9eWE7cmV0dXJuIHQuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9RXQoZSksdCk6cn0sdC5vdXRlclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1FdChlKSx0KTpufSx0LmNvcm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1FdChlKSx0KTppfSx0LnBhZFJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1lPT1DbD9DbDpFdChlKSx0KTphfSx0LnN0YXJ0QW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RXQoZSksdCk6b30sdC5lbmRBbmdsZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1FdChlKSx0KTpzfSx0LnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUV0KGUpLHQpOmx9LHQuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgdD0oK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsZT0oK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKyArcy5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzItVm87cmV0dXJuW01hdGguY29zKGUpKnQsTWF0aC5zaW4oZSkqdF19LHR9O3ZhciBDbD0iYXV0byI7dW8uc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gX2EoeCl9O3ZhciB6bD11by5tYXAoe2xpbmVhcjp3YSwibGluZWFyLWNsb3NlZCI6TWEsc3RlcDprYSwic3RlcC1iZWZvcmUiOkFhLCJzdGVwLWFmdGVyIjpUYSxiYXNpczpJYSwiYmFzaXMtb3BlbiI6RGEsImJhc2lzLWNsb3NlZCI6UGEsYnVuZGxlOk9hLGNhcmRpbmFsOkxhLCJjYXJkaW5hbC1vcGVuIjpTYSwiY2FyZGluYWwtY2xvc2VkIjpFYSxtb25vdG9uZTpVYX0pO3psLmZvckVhY2goZnVuY3Rpb24odCxlKXtlLmtleT10LGUuY2xvc2VkPS8tY2xvc2VkJC8udGVzdCh0KX0pO3ZhciBJbD1bMCwyLzMsMS8zLDBdLERsPVswLDEvMywyLzMsMF0sUGw9WzAsMS82LDIvMywxLzZdO3VvLnN2Zy5saW5lLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PV9hKFZhKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5hbmdsZT10LnksZGVsZXRlIHQueSx0fSxBYS5yZXZlcnNlPVRhLFRhLnJldmVyc2U9QWEsdW8uc3ZnLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gSGEoeCl9LHVvLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PUhhKFZhKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5pbm5lclJhZGl1cz10LngwLGRlbGV0ZSB0LngwLHQub3V0ZXJSYWRpdXM9dC54MSxkZWxldGUgdC54MSx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHQuc3RhcnRBbmdsZT10LnkwLGRlbGV0ZSB0LnkwLHQuZW5kQW5nbGU9dC55MSxkZWxldGUgdC55MSx0fSx1by5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQscyl7dmFyIGw9ZSh0aGlzLGEsdCxzKSx1PWUodGhpcyxvLHQscyk7cmV0dXJuIk0iK2wucDArbihsLnIsbC5wMSxsLmExLWwuYTApKyhyKGwsdSk/aShsLnIsbC5wMSxsLnIsbC5wMCk6aShsLnIsbC5wMSx1LnIsdS5wMCkrbih1LnIsdS5wMSx1LmExLXUuYTApK2kodS5yLHUucDEsbC5yLGwucDApKSsiWiJ9ZnVuY3Rpb24gZSh0LGUscixuKXt2YXIgaT1lLmNhbGwodCxyLG4pLGE9cy5jYWxsKHQsaSxuKSxvPWwuY2FsbCh0LGksbiktVm8sYz11LmNhbGwodCxpLG4pLVZvO3JldHVybntyOmEsYTA6byxhMTpjLHAwOlthKk1hdGguY29zKG8pLGEqTWF0aC5zaW4obyldLHAxOlthKk1hdGguY29zKGMpLGEqTWF0aC5zaW4oYyldfX1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQuYTA9PWUuYTAmJnQuYTE9PWUuYTF9ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIkEiK3QrIiwiK3QrIiAwICIrICsocj5ObykrIiwxICIrZX1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiJRIDAsMCAiK259dmFyIGE9eHIsbz1fcixzPXFhLGw9dmEsdT1nYTtyZXR1cm4gdC5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RXQoZSksdCk6c30sdC5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9RXQoZSksdCk6YX0sdC50YXJnZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89RXQoZSksdCk6b30sdC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUV0KGUpLHQpOmx9LHQuZW5kQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9RXQoZSksdCk6dX0sdH0sdW8uc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkpe3ZhciBhPWUuY2FsbCh0aGlzLHQsaSksbz1yLmNhbGwodGhpcyx0LGkpLHM9KGEueStvLnkpLzIsbD1bYSx7eDphLngseTpzfSx7eDpvLngseTpzfSxvXTtyZXR1cm4gbD1sLm1hcChuKSwiTSIrbFswXSsiQyIrbFsxXSsiICIrbFsyXSsiICIrbFszXX12YXIgZT14cixyPV9yLG49R2E7cmV0dXJuIHQuc291cmNlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPUV0KHIpLHQpOmV9LHQudGFyZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUV0KGUpLHQpOnJ9LHQucHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLHQpOm59LHR9LHVvLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgdD11by5zdmcuZGlhZ29uYWwoKSxlPUdhLHI9dC5wcm9qZWN0aW9uO3JldHVybiB0LnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihZYShlPXQpKTplfSx0fSx1by5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe3JldHVybihPbC5nZXQoZS5jYWxsKHRoaXMsdCxuKSl8fFphKShyLmNhbGwodGhpcyx0LG4pKX12YXIgZT1XYSxyPVhhO3JldHVybiB0LnR5cGU9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9RXQociksdCk6ZX0sdC5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUV0KGUpLHQpOnJ9LHR9O3ZhciBPbD11by5tYXAoe2NpcmNsZTpaYSxjcm9zczpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC81KS8yO3JldHVybiJNIistMyplKyIsIistZSsiSCIrLWUrIlYiKy0zKmUrIkgiK2UrIlYiKy1lKyJIIiszKmUrIlYiK2UrIkgiK2UrIlYiKzMqZSsiSCIrLWUrIlYiK2UrIkgiKy0zKmUrIloifSxkaWFtb25kOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0LygyKkZsKSkscj1lKkZsO3JldHVybiJNMCwiKy1lKyJMIityKyIsMCAwLCIrZSsiICIrLXIrIiwwWiJ9LHNxdWFyZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodCkvMjtyZXR1cm4iTSIrLWUrIiwiKy1lKyJMIitlKyIsIistZSsiICIrZSsiLCIrZSsiICIrLWUrIiwiK2UrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvUmwpLHI9ZSpSbC8yO3JldHVybiJNMCwiK3IrIkwiK2UrIiwiKy1yKyIgIistZSsiLCIrLXIrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L1JsKSxyPWUqUmwvMjtyZXR1cm4iTTAsIistcisiTCIrZSsiLCIrcisiICIrLWUrIiwiK3IrIloifX0pO3VvLnN2Zy5zeW1ib2xUeXBlcz1PbC5rZXlzKCk7dmFyIFJsPU1hdGguc3FydCgzKSxGbD1NYXRoLnRhbigzMCpIbyk7TG8udHJhbnNpdGlvbj1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuPWpsfHwrK1ZsLGk9dG8odCksYT1bXSxvPU5sfHx7dGltZTpEYXRlLm5vdygpLGVhc2U6RW4sZGVsYXk6MCxkdXJhdGlvbjoyNTB9LHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe2EucHVzaChlPVtdKTtmb3IodmFyIHU9dGhpc1tzXSxjPS0xLGg9dS5sZW5ndGg7KytjPGg7KShyPXVbY10pJiZlbyhyLGMsaSxuLG8pLGUucHVzaChyKX1yZXR1cm4gS2EoYSxpLG4pfSxMby5pbnRlcnJ1cHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChudWxsPT10P0JsOkphKHRvKHQpKSl9O3ZhciBqbCxObCxCbD1KYSh0bygpKSxVbD1bXSxWbD0wO1VsLmNhbGw9TG8uY2FsbCxVbC5lbXB0eT1Mby5lbXB0eSxVbC5ub2RlPUxvLm5vZGUsVWwuc2l6ZT1Mby5zaXplLHVvLnRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC50cmFuc2l0aW9uP2psP3QudHJhbnNpdGlvbihlKTp0OnVvLnNlbGVjdGlvbigpLnRyYW5zaXRpb24odCl9LHVvLnRyYW5zaXRpb24ucHJvdG90eXBlPVVsLFVsLnNlbGVjdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT10aGlzLmlkLGE9dGhpcy5uYW1lc3BhY2Usbz1bXTt0PUModCk7Zm9yKHZhciBzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtvLnB1c2goZT1bXSk7Zm9yKHZhciB1PXRoaXNbc10sYz0tMSxoPXUubGVuZ3RoOysrYzxoOykobj11W2NdKSYmKHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxjLHMpKT8oIl9fZGF0YV9fImluIG4mJihyLl9fZGF0YV9fPW4uX19kYXRhX18pLAplbyhyLGMsYSxpLG5bYV1baV0pLGUucHVzaChyKSk6ZS5wdXNoKG51bGwpfXJldHVybiBLYShvLGEsaSl9LFVsLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89dGhpcy5pZCxzPXRoaXMubmFtZXNwYWNlLGw9W107dD16KHQpO2Zvcih2YXIgdT0tMSxjPXRoaXMubGVuZ3RoOysrdTxjOylmb3IodmFyIGg9dGhpc1t1XSxmPS0xLGQ9aC5sZW5ndGg7KytmPGQ7KWlmKG49aFtmXSl7YT1uW3NdW29dLHI9dC5jYWxsKG4sbi5fX2RhdGFfXyxmLHUpLGwucHVzaChlPVtdKTtmb3IodmFyIHA9LTEsbT1yLmxlbmd0aDsrK3A8bTspKGk9cltwXSkmJmVvKGkscCxzLG8sYSksZS5wdXNoKGkpfXJldHVybiBLYShsLHMsbyl9LFVsLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9SCh0KSk7Zm9yKHZhciBhPTAsbz10aGlzLmxlbmd0aDthPG87YSsrKXtpLnB1c2goZT1bXSk7Zm9yKHZhciByPXRoaXNbYV0scz0wLGw9ci5sZW5ndGg7czxsO3MrKykobj1yW3NdKSYmdC5jYWxsKG4sbi5fX2RhdGFfXyxzLGEpJiZlLnB1c2gobil9cmV0dXJuIEthKGksdGhpcy5uYW1lc3BhY2UsdGhpcy5pZCl9LFVsLnR3ZWVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpcy5ub2RlKClbbl1bcl0udHdlZW4uZ2V0KHQpOkcodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LFVsLmF0dHI9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUocyl9ZnVuY3Rpb24gbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMocy5zcGFjZSxzLmxvY2FsKX1mdW5jdGlvbiBpKHQpe3JldHVybiBudWxsPT10P3I6KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZShzKTtyZXR1cm4gciE9PXQmJihlPW8ocix0KSxmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZShzLGUodCkpfSl9KX1mdW5jdGlvbiBhKHQpe3JldHVybiBudWxsPT10P246KHQrPSIiLGZ1bmN0aW9uKCl7dmFyIGUscj10aGlzLmdldEF0dHJpYnV0ZU5TKHMuc3BhY2Uscy5sb2NhbCk7cmV0dXJuIHIhPT10JiYoZT1vKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhzLnNwYWNlLHMubG9jYWwsZSh0KSl9KX0pfWlmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKGUgaW4gdCl0aGlzLmF0dHIoZSx0W2VdKTtyZXR1cm4gdGhpc312YXIgbz0idHJhbnNmb3JtIj09dD9abjpfbixzPXVvLm5zLnF1YWxpZnkodCk7cmV0dXJuIFFhKHRoaXMsImF0dHIuIit0LGUscy5sb2NhbD9hOmkpfSxVbC5hdHRyVHdlZW49ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7dmFyIG49ZS5jYWxsKHRoaXMsdCxyLHRoaXMuZ2V0QXR0cmlidXRlKGkpKTtyZXR1cm4gbiYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxuKHQpKX19ZnVuY3Rpb24gbih0LHIpe3ZhciBuPWUuY2FsbCh0aGlzLHQscix0aGlzLmdldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCkpO3JldHVybiBuJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCxuKHQpKX19dmFyIGk9dW8ubnMucXVhbGlmeSh0KTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK3QsaS5sb2NhbD9uOnIpfSxVbC5zdHlsZT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSgpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gbnVsbD09ZT9pOihlKz0iIixmdW5jdGlvbigpe3ZhciBpLGE9bih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KTtyZXR1cm4gYSE9PWUmJihpPV9uKGEsZSksZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGkoZSkscil9KX0pfXZhciBvPWFyZ3VtZW50cy5sZW5ndGg7aWYobzwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe288MiYmKGU9IiIpO2ZvcihyIGluIHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1yZXR1cm4gUWEodGhpcywic3R5bGUuIit0LGUsYSl9LFVsLnN0eWxlVHdlZW49ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkoaSxhKXt2YXIgbz1lLmNhbGwodGhpcyxpLGEsbih0aGlzKS5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KSk7cmV0dXJuIG8mJmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxvKGUpLHIpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYocj0iIiksdGhpcy50d2Vlbigic3R5bGUuIit0LGkpfSxVbC50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBRYSh0aGlzLCJ0ZXh0Iix0LCRhKX0sVWwucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIGU7dGhpc1t0XS5jb3VudDwyJiYoZT10aGlzLnBhcmVudE5vZGUpJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSl9LFVsLmVhc2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVvLmVhc2UuYXBwbHkodW8sYXJndW1lbnRzKSksRyh0aGlzLGZ1bmN0aW9uKG4pe25bcl1bZV0uZWFzZT10fSkpfSxVbC5kZWxheT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kZWxheTpHKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZGVsYXk9K3QuY2FsbChuLG4uX19kYXRhX18saSxhKX06KHQ9K3QsZnVuY3Rpb24obil7bltyXVtlXS5kZWxheT10fSkpfSxVbC5kdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlkLHI9dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT90aGlzLm5vZGUoKVtyXVtlXS5kdXJhdGlvbjpHKHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZHVyYXRpb249TWF0aC5tYXgoMSx0LmNhbGwobixuLl9fZGF0YV9fLGksYSkpfToodD1NYXRoLm1heCgxLHQpLGZ1bmN0aW9uKG4pe25bcl1bZV0uZHVyYXRpb249dH0pKX0sVWwuZWFjaD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaWQsbj10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPU5sLGE9amw7dHJ5e2psPXIsRyh0aGlzLGZ1bmN0aW9uKGUsaSxhKXtObD1lW25dW3JdLHQuY2FsbChlLGUuX19kYXRhX18saSxhKX0pfWZpbmFsbHl7Tmw9aSxqbD1hfX1lbHNlIEcodGhpcyxmdW5jdGlvbihpKXt2YXIgYT1pW25dW3JdOyhhLmV2ZW50fHwoYS5ldmVudD11by5kaXNwYXRjaCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSkpLm9uKHQsZSl9KTtyZXR1cm4gdGhpc30sVWwudHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbixpPXRoaXMuaWQsYT0rK1ZsLG89dGhpcy5uYW1lc3BhY2Uscz1bXSxsPTAsdT10aGlzLmxlbmd0aDtsPHU7bCsrKXtzLnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbbF0sYz0wLGg9ZS5sZW5ndGg7YzxoO2MrKykocj1lW2NdKSYmKG49cltvXVtpXSxlbyhyLGMsbyxhLHt0aW1lOm4udGltZSxlYXNlOm4uZWFzZSxkZWxheTpuLmRlbGF5K24uZHVyYXRpb24sZHVyYXRpb246bi5kdXJhdGlvbn0pKSx0LnB1c2gocil9cmV0dXJuIEthKHMsbyxhKX0sdW8uc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3QuZWFjaChmdW5jdGlvbigpe3ZhciB0LHU9dW8uc2VsZWN0KHRoaXMpLGM9dGhpcy5fX2NoYXJ0X198fHIsaD10aGlzLl9fY2hhcnRfXz1yLmNvcHkoKSxmPW51bGw9PWw/aC50aWNrcz9oLnRpY2tzLmFwcGx5KGgscyk6aC5kb21haW4oKTpsLGQ9bnVsbD09ZT9oLnRpY2tGb3JtYXQ/aC50aWNrRm9ybWF0LmFwcGx5KGgscyk6eDplLHA9dS5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShmLGgpLG09cC5lbnRlcigpLmluc2VydCgiZyIsIi5kb21haW4iKS5hdHRyKCJjbGFzcyIsInRpY2siKS5zdHlsZSgib3BhY2l0eSIsRm8pLHY9dW8udHJhbnNpdGlvbihwLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLEZvKS5yZW1vdmUoKSxnPXVvLnRyYW5zaXRpb24ocC5vcmRlcigpKS5zdHlsZSgib3BhY2l0eSIsMSkseT1NYXRoLm1heChpLDApK28sYj1ZaShoKSxfPXUuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbMF0pLHc9KF8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLHVvLnRyYW5zaXRpb24oXykpO20uYXBwZW5kKCJsaW5lIiksbS5hcHBlbmQoInRleHQiKTt2YXIgTSxrLEEsVCxTPW0uc2VsZWN0KCJsaW5lIiksRT1nLnNlbGVjdCgibGluZSIpLEw9cC5zZWxlY3QoInRleHQiKS50ZXh0KGQpLEM9bS5zZWxlY3QoInRleHQiKSx6PWcuc2VsZWN0KCJ0ZXh0IiksST0idG9wIj09PW58fCJsZWZ0Ij09PW4/LTE6MTtpZigiYm90dG9tIj09PW58fCJ0b3AiPT09bj8odD1ybyxNPSJ4IixBPSJ5IixrPSJ4MiIsVD0ieTIiLEwuYXR0cigiZHkiLEk8MD8iMGVtIjoiLjcxZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKSx3LmF0dHIoImQiLCJNIitiWzBdKyIsIitJKmErIlYwSCIrYlsxXSsiViIrSSphKSk6KHQ9bm8sTT0ieSIsQT0ieCIsaz0ieTIiLFQ9IngyIixMLmF0dHIoImR5IiwiLjMyZW0iKS5zdHlsZSgidGV4dC1hbmNob3IiLEk8MD8iZW5kIjoic3RhcnQiKSx3LmF0dHIoImQiLCJNIitJKmErIiwiK2JbMF0rIkgwViIrYlsxXSsiSCIrSSphKSksUy5hdHRyKFQsSSppKSxDLmF0dHIoQSxJKnkpLEUuYXR0cihrLDApLmF0dHIoVCxJKmkpLHouYXR0cihNLDApLmF0dHIoQSxJKnkpLGgucmFuZ2VCYW5kKXt2YXIgRD1oLFA9RC5yYW5nZUJhbmQoKS8yO2M9aD1mdW5jdGlvbih0KXtyZXR1cm4gRCh0KStQfX1lbHNlIGMucmFuZ2VCYW5kP2M9aDp2LmNhbGwodCxoLGMpO20uY2FsbCh0LGMsaCksZy5jYWxsKHQsaCxoKX0pfXZhciBlLHI9dW8uc2NhbGUubGluZWFyKCksbj1IbCxpPTYsYT02LG89MyxzPVsxMF0sbD1udWxsO3JldHVybiB0LnNjYWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdCk6cn0sdC5vcmllbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ZSBpbiBxbD9lKyIiOkhsLHQpOm59LHQudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1obyhhcmd1bWVudHMpLHQpOnN9LHQudGlja1ZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1lLHQpOmx9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yLHQpOmV9LHQudGlja1NpemU9ZnVuY3Rpb24oZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcj8oaT0rZSxhPSthcmd1bWVudHNbci0xXSx0KTppfSx0LmlubmVyVGlja1NpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2UsdCk6aX0sdC5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStlLHQpOmF9LHQudGlja1BhZGRpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2UsdCk6b30sdC50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnR9LHR9O3ZhciBIbD0iYm90dG9tIixxbD17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O3VvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dW8uc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsYSkub24oInRvdWNoc3RhcnQuYnJ1c2giLGEpLG89bi5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxuLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgcz1uLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEobSx4KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJyZXNpemUgIit0fSkuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24odCl7cmV0dXJuIEdsW3RdfSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsZnVuY3Rpb24odCl7cmV0dXJuL1tld10kLy50ZXN0KHQpPy0zOm51bGx9KS5hdHRyKCJ5IixmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pLmF0dHIoIndpZHRoIiw2KS5hdHRyKCJoZWlnaHQiLDYpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikscy5zdHlsZSgiZGlzcGxheSIsdC5lbXB0eSgpPyJub25lIjpudWxsKTt2YXIgbCxoPXVvLnRyYW5zaXRpb24obiksZj11by50cmFuc2l0aW9uKG8pO3UmJihsPVlpKHUpLGYuYXR0cigieCIsbFswXSkuYXR0cigid2lkdGgiLGxbMV0tbFswXSkscihoKSksYyYmKGw9WWkoYyksZi5hdHRyKCJ5IixsWzBdKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSksaShoKSksZShoKX0pfWZ1bmN0aW9uIGUodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIitoWysvZSQvLnRlc3QodCldKyIsIitmWysvXnMvLnRlc3QodCldKyIpIn0pfWZ1bmN0aW9uIHIodCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ4IixoWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwubj5yZWN0LC5zPnJlY3QiKS5hdHRyKCJ3aWR0aCIsaFsxXS1oWzBdKX1mdW5jdGlvbiBpKHQpe3Quc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieSIsZlswXSksdC5zZWxlY3RBbGwoIi5leHRlbnQsLmU+cmVjdCwudz5yZWN0IikuYXR0cigiaGVpZ2h0IixmWzFdLWZbMF0pfWZ1bmN0aW9uIGEoKXtmdW5jdGlvbiBhKCl7MzI9PXVvLmV2ZW50LmtleUNvZGUmJihMfHwoYj1udWxsLHpbMF0tPWhbMV0selsxXS09ZlsxXSxMPTIpLFQoKSl9ZnVuY3Rpb24gbSgpezMyPT11by5ldmVudC5rZXlDb2RlJiYyPT1MJiYoelswXSs9aFsxXSx6WzFdKz1mWzFdLEw9MCxUKCkpfWZ1bmN0aW9uIHYoKXt2YXIgdD11by5tb3VzZShfKSxuPSExO3gmJih0WzBdKz14WzBdLHRbMV0rPXhbMV0pLEx8fCh1by5ldmVudC5hbHRLZXk/KGJ8fChiPVsoaFswXStoWzFdKS8yLChmWzBdK2ZbMV0pLzJdKSx6WzBdPWhbKyh0WzBdPGJbMF0pXSx6WzFdPWZbKyh0WzFdPGJbMV0pXSk6Yj1udWxsKSxTJiZnKHQsdSwwKSYmKHIoayksbj0hMCksRSYmZyh0LGMsMSkmJihpKGspLG49ITApLG4mJihlKGspLE0oe3R5cGU6ImJydXNoIixtb2RlOkw/Im1vdmUiOiJyZXNpemUifSkpfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuLGksYT1ZaShlKSxsPWFbMF0sdT1hWzFdLGM9eltyXSxtPXI/ZjpoLHY9bVsxXS1tWzBdO2lmKEwmJihsLT1jLHUtPXYrYyksbj0ocj9wOmQpP01hdGgubWF4KGwsTWF0aC5taW4odSx0W3JdKSk6dFtyXSxMP2k9KG4rPWMpK3Y6KGImJihjPU1hdGgubWF4KGwsTWF0aC5taW4odSwyKmJbcl0tbikpKSxjPG4/KGk9bixuPWMpOmk9YyksbVswXSE9bnx8bVsxXSE9aSlyZXR1cm4gcj9zPW51bGw6bz1udWxsLG1bMF09bixtWzFdPWksITB9ZnVuY3Rpb24geSgpe3YoKSxrLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5Iix0LmVtcHR5KCk/Im5vbmUiOm51bGwpLHVvLnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLEkub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksQygpLE0oe3R5cGU6ImJydXNoZW5kIn0pfXZhciBiLHgsXz10aGlzLHc9dW8uc2VsZWN0KHVvLmV2ZW50LnRhcmdldCksTT1sLm9mKF8sYXJndW1lbnRzKSxrPXVvLnNlbGVjdChfKSxBPXcuZGF0dW0oKSxTPSEvXihufHMpJC8udGVzdChBKSYmdSxFPSEvXihlfHcpJC8udGVzdChBKSYmYyxMPXcuY2xhc3NlZCgiZXh0ZW50IiksQz1LKF8pLHo9dW8ubW91c2UoXyksST11by5zZWxlY3QobihfKSkub24oImtleWRvd24uYnJ1c2giLGEpLm9uKCJrZXl1cC5icnVzaCIsbSk7aWYodW8uZXZlbnQuY2hhbmdlZFRvdWNoZXM/SS5vbigidG91Y2htb3ZlLmJydXNoIix2KS5vbigidG91Y2hlbmQuYnJ1c2giLHkpOkkub24oIm1vdXNlbW92ZS5icnVzaCIsdikub24oIm1vdXNldXAuYnJ1c2giLHkpLGsuaW50ZXJydXB0KCkuc2VsZWN0QWxsKCIqIikuaW50ZXJydXB0KCksTCl6WzBdPWhbMF0telswXSx6WzFdPWZbMF0telsxXTtlbHNlIGlmKEEpe3ZhciBEPSsvdyQvLnRlc3QoQSksUD0rL15uLy50ZXN0KEEpO3g9W2hbMS1EXS16WzBdLGZbMS1QXS16WzFdXSx6WzBdPWhbRF0selsxXT1mW1BdfWVsc2UgdW8uZXZlbnQuYWx0S2V5JiYoYj16LnNsaWNlKCkpO2suc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSx1by5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIix3LnN0eWxlKCJjdXJzb3IiKSksTSh7dHlwZToiYnJ1c2hzdGFydCJ9KSx2KCl9dmFyIG8scyxsPUUodCwiYnJ1c2hzdGFydCIsImJydXNoIiwiYnJ1c2hlbmQiKSx1PW51bGwsYz1udWxsLGg9WzAsMF0sZj1bMCwwXSxkPSEwLHA9ITAsbT1ZbFswXTtyZXR1cm4gdC5ldmVudD1mdW5jdGlvbih0KXt0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1sLm9mKHRoaXMsYXJndW1lbnRzKSxlPXt4OmgseTpmLGk6byxqOnN9LHI9dGhpcy5fX2NoYXJ0X198fGU7dGhpcy5fX2NoYXJ0X189ZSxqbD91by5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe289ci5pLHM9ci5qLGg9ci54LGY9ci55LHQoe3R5cGU6ImJydXNoc3RhcnQifSl9KS50d2VlbigiYnJ1c2g6YnJ1c2giLGZ1bmN0aW9uKCl7dmFyIHI9d24oaCxlLngpLG49d24oZixlLnkpO3JldHVybiBvPXM9bnVsbCxmdW5jdGlvbihpKXtoPWUueD1yKGkpLGY9ZS55PW4oaSksdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KS5lYWNoKCJlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bz1lLmkscz1lLmosdCh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KSx0KHt0eXBlOiJicnVzaGVuZCJ9KX0pOih0KHt0eXBlOiJicnVzaHN0YXJ0In0pLHQoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksdCh7dHlwZToiYnJ1c2hlbmQifSkpfSl9LHQueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1lLG09WWxbIXU8PDF8IWNdLHQpOnV9LHQueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1lLG09WWxbIXU8PDF8IWNdLHQpOmN9LHQuY2xhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJmM/KGQ9ISFlWzBdLHA9ISFlWzFdKTp1P2Q9ISFlOmMmJihwPSEhZSksdCk6dSYmYz9bZCxwXTp1P2Q6Yz9wOm51bGx9LHQuZXh0ZW50PWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLGw7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHUmJihyPWVbMF0sbj1lWzFdLGMmJihyPXJbMF0sbj1uWzBdKSxvPVtyLG5dLHUuaW52ZXJ0JiYocj11KHIpLG49dShuKSksbjxyJiYobD1yLHI9bixuPWwpLHI9PWhbMF0mJm49PWhbMV18fChoPVtyLG5dKSksYyYmKGk9ZVswXSxhPWVbMV0sdSYmKGk9aVsxXSxhPWFbMV0pLHM9W2ksYV0sYy5pbnZlcnQmJihpPWMoaSksYT1jKGEpKSxhPGkmJihsPWksaT1hLGE9bCksaT09ZlswXSYmYT09ZlsxXXx8KGY9W2ksYV0pKSx0KToodSYmKG8/KHI9b1swXSxuPW9bMV0pOihyPWhbMF0sbj1oWzFdLHUuaW52ZXJ0JiYocj11LmludmVydChyKSxuPXUuaW52ZXJ0KG4pKSxuPHImJihsPXIscj1uLG49bCkpKSxjJiYocz8oaT1zWzBdLGE9c1sxXSk6KGk9ZlswXSxhPWZbMV0sYy5pbnZlcnQmJihpPWMuaW52ZXJ0KGkpLGE9Yy5pbnZlcnQoYSkpLGE8aSYmKGw9aSxpPWEsYT1sKSkpLHUmJmM/W1tyLGldLFtuLGFdXTp1P1tyLG5dOmMmJltpLGFdKX0sdC5jbGVhcj1mdW5jdGlvbigpe3JldHVybiB0LmVtcHR5KCl8fChoPVswLDBdLGY9WzAsMF0sbz1zPW51bGwpLHR9LHQuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hIXUmJmhbMF09PWhbMV18fCEhYyYmZlswXT09ZlsxXX0sdW8ucmViaW5kKHQsbCwib24iKX07dmFyIEdsPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LFlsPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dLFhsPWZzLmZvcm1hdD15cy50aW1lRm9ybWF0LFdsPVhsLnV0YyxabD1XbCgiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7WGwuaXNvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nJiYrbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2lvOlpsLGlvLnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9LGlvLnRvU3RyaW5nPVpsLnRvU3RyaW5nLGZzLnNlY29uZD1WdChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGRzKDFlMypNYXRoLmZsb29yKHQvMWUzKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzFlMypNYXRoLmZsb29yKGUpKX0sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSksZnMuc2Vjb25kcz1mcy5zZWNvbmQucmFuZ2UsZnMuc2Vjb25kcy51dGM9ZnMuc2Vjb25kLnV0Yy5yYW5nZSxmcy5taW51dGU9VnQoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBkcyg2ZTQqTWF0aC5mbG9vcih0LzZlNCkpfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSh0LmdldFRpbWUoKSs2ZTQqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pLGZzLm1pbnV0ZXM9ZnMubWludXRlLnJhbmdlLGZzLm1pbnV0ZXMudXRjPWZzLm1pbnV0ZS51dGMucmFuZ2UsZnMuaG91cj1WdChmdW5jdGlvbih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCkvNjA7cmV0dXJuIG5ldyBkcygzNmU1KihNYXRoLmZsb29yKHQvMzZlNS1lKStlKSl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKHQuZ2V0VGltZSgpKzM2ZTUqTWF0aC5mbG9vcihlKSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSxmcy5ob3Vycz1mcy5ob3VyLnJhbmdlLGZzLmhvdXJzLnV0Yz1mcy5ob3VyLnV0Yy5yYW5nZSxmcy5tb250aD1WdChmdW5jdGlvbih0KXtyZXR1cm4gdD1mcy5kYXkodCksdC5zZXREYXRlKDEpLHR9LGZ1bmN0aW9uKHQsZSl7dC5zZXRNb250aCh0LmdldE1vbnRoKCkrZSl9LGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSxmcy5tb250aHM9ZnMubW9udGgucmFuZ2UsZnMubW9udGhzLnV0Yz1mcy5tb250aC51dGMucmFuZ2U7dmFyIEpsPVsxZTMsNWUzLDE1ZTMsM2U0LDZlNCwzZTUsOWU1LDE4ZTUsMzZlNSwxMDhlNSwyMTZlNSw0MzJlNSw4NjRlNSwxNzI4ZTUsNjA0OGU1LDI1OTJlNiw3Nzc2ZTYsMzE1MzZlNl0sS2w9W1tmcy5zZWNvbmQsMV0sW2ZzLnNlY29uZCw1XSxbZnMuc2Vjb25kLDE1XSxbZnMuc2Vjb25kLDMwXSxbZnMubWludXRlLDFdLFtmcy5taW51dGUsNV0sW2ZzLm1pbnV0ZSwxNV0sW2ZzLm1pbnV0ZSwzMF0sW2ZzLmhvdXIsMV0sW2ZzLmhvdXIsM10sW2ZzLmhvdXIsNl0sW2ZzLmhvdXIsMTJdLFtmcy5kYXksMV0sW2ZzLmRheSwyXSxbZnMud2VlaywxXSxbZnMubW9udGgsMV0sW2ZzLm1vbnRoLDNdLFtmcy55ZWFyLDFdXSxRbD1YbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSYmMSE9dC5nZXREYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXREYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfV0sWyIlWSIsemVdXSksJGw9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdW8ucmFuZ2UoTWF0aC5jZWlsKHQvcikqciwrZSxyKS5tYXAob28pfSxmbG9vcjp4LGNlaWw6eH07S2wueWVhcj1mcy55ZWFyLGZzLnNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGFvKHVvLnNjYWxlLmxpbmVhcigpLEtsLFFsKX07dmFyIHR1PUtsLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXS51dGMsdFsxXV19KSxldT1XbC5tdWx0aShbWyIuJUwiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbGxpc2Vjb25kcygpfV0sWyI6JVMiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX1dLFsiJUk6JU0iLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX1dLFsiJUkgJXAiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9XSxbIiVhICVkIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKSYmMSE9dC5nZXRVVENEYXRlKCl9XSxbIiViICVkIixmdW5jdGlvbih0KXtyZXR1cm4gMSE9dC5nZXRVVENEYXRlKCl9XSxbIiVCIixmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfV0sWyIlWSIsemVdXSk7dHUueWVhcj1mcy55ZWFyLnV0Yyxmcy5zY2FsZS51dGM9ZnVuY3Rpb24oKXtyZXR1cm4gYW8odW8uc2NhbGUubGluZWFyKCksdHUsZXUpfSx1by50ZXh0PUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pLHVvLmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QodCwiYXBwbGljYXRpb24vanNvbiIsc28sZSl9LHVvLmh0bWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QodCwidGV4dC9odG1sIixsbyxlKX0sdW8ueG1sPUx0KGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlWE1MfSksImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kPyh0aGlzLmQzPXVvLHQodW8pKToib2JqZWN0Ij09dHlwZW9mIHImJnIuZXhwb3J0cz9yLmV4cG9ydHM9dW86dGhpcy5kMz11b30oKX0se31dLDEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5wb2ludD10LHRoaXMuaW5kZXg9ZX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQucG9pbnQsbj1lLnBvaW50LGk9ci5sZW5ndGgsYT0wO2E8aTsrK2Epe3ZhciBvPW5bYV0tclthXTtpZihvKXJldHVybiBvfXJldHVybiAwfWZ1bmN0aW9uIGEodCxlLHIpe2lmKDE9PT10KXJldHVybiByP1tbLTEsMF1dOltdO3ZhciBuPWUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KTtuLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yZXR1cm4gciYmaS5wdXNoKFstMSxpWzBdWzFdXSxbaVt0LTFdWzFdLC0xXSksaX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107dmFyIG89dFswXS5sZW5ndGg7aWYobzwxKXJldHVybltdO2lmKDE9PT1vKXJldHVybiBhKHIsdCxlKTtmb3IodmFyIHU9bmV3IEFycmF5KHIpLGM9MSxoPTA7aDxyOysraCl7Zm9yKHZhciBmPXRbaF0sZD1uZXcgQXJyYXkobysxKSxwPTAsbT0wO208bzsrK20pe3ZhciB2PWZbbV07ZFttXT12LHArPXYqdn1kW29dPXAsdVtoXT1uZXcgbihkLGgpLGM9TWF0aC5tYXgocCxjKX1sKHUsaSkscj11Lmxlbmd0aDtmb3IodmFyIGc9bmV3IEFycmF5KHIrbysxKSx5PW5ldyBBcnJheShyK28rMSksYj0obysxKSoobysxKSpjLHg9bmV3IEFycmF5KG8rMSksaD0wO2g8PW87KytoKXhbaF09MDt4W29dPWIsZ1swXT14LnNsaWNlKCkseVswXT0tMTtmb3IodmFyIGg9MDtoPD1vOysraCl7dmFyIGQ9eC5zbGljZSgpO2RbaF09MSxnW2grMV09ZCx5W2grMV09LTF9Zm9yKHZhciBoPTA7aDxyOysraCl7dmFyIF89dVtoXTtnW2grbysxXT1fLnBvaW50LHlbaCtvKzFdPV8uaW5kZXh9dmFyIHc9cyhnLCExKTtpZih3PWU/dy5maWx0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PW87KytyKXt2YXIgbj15W3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pOncuZmlsdGVyKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8PW87KytlKXt2YXIgcj15W3RbZV1dO2lmKHI8MClyZXR1cm4hMTt0W2VdPXJ9cmV0dXJuITB9KSwxJm8pZm9yKHZhciBoPTA7aDx3Lmxlbmd0aDsrK2gpe3ZhciBfPXdbaF0sZD1fWzBdO19bMF09X1sxXSxfWzFdPWR9cmV0dXJuIHd9dmFyIHM9dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxsPXQoInVuaXEiKTtlLmV4cG9ydHM9b30seyJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6Mjg4LHVuaXE6NTQxfV0sMTIyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gZFswXT10LGRbMV09ZSxmWzBdfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGZbMF09dCxkWzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZbMF09dCxkWzFdfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gZFsxXT10LGRbMF09ZSxmWzBdfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZbMF09dCxkWzFdfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZbMF09dCxkWzBdfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gcC53cml0ZVVJbnQzMkxFKHQsMCwhMCkscC53cml0ZVVJbnQzMkxFKGUsNCwhMCkscC5yZWFkRG91YmxlTEUoMCwhMCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gcC53cml0ZURvdWJsZUxFKHQsMCwhMCkscC5yZWFkVUludDMyTEUoMCwhMCl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gcC53cml0ZURvdWJsZUxFKHQsMCwhMCkscC5yZWFkVUludDMyTEUoNCwhMCl9dmFyIGg9ITE7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDY0QXJyYXkpe3ZhciBmPW5ldyBGbG9hdDY0QXJyYXkoMSksZD1uZXcgVWludDMyQXJyYXkoZi5idWZmZXIpO2ZbMF09MSxoPSEwLDEwNzI2OTMyNDg9PT1kWzFdPyhlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZbMF09dCxbZFswXSxkWzFdXX0sZS5leHBvcnRzLnBhY2s9cixlLmV4cG9ydHMubG89bixlLmV4cG9ydHMuaGk9aSk6MTA3MjY5MzI0OD09PWRbMF0/KGUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZlswXT10LFtkWzFdLGRbMF1dfSxlLmV4cG9ydHMucGFjaz1hLGUuZXhwb3J0cy5sbz1vLGUuZXhwb3J0cy5oaT1zKTpoPSExfWlmKCFoKXt2YXIgcD1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHAud3JpdGVEb3VibGVMRSh0LDAsITApLFtwLnJlYWRVSW50MzJMRSgwLCEwKSxwLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWwsZS5leHBvcnRzLmxvPXUsZS5leHBvcnRzLmhpPWN9ZS5leHBvcnRzLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGUuZXhwb3J0cy5oaSh0KT4+PjMxfSxlLmV4cG9ydHMuZXhwb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuKGUuZXhwb3J0cy5oaSh0KTw8MT4+PjIxKS0xMDIzfSxlLmV4cG9ydHMuZnJhY3Rpb249ZnVuY3Rpb24odCl7dmFyIHI9ZS5leHBvcnRzLmxvKHQpLG49ZS5leHBvcnRzLmhpKHQpLGk9MTA0ODU3NSZuO3JldHVybiAyMTQ2NDM1MDcyJm4mJihpKz0xPDwyMCksW3IsaV19LGUuZXhwb3J0cy5kZW5vcm1hbGl6ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuISgyMTQ2NDM1MDcyJmUuZXhwb3J0cy5oaSh0KSl9fSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6NzV9XSwxMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIGk9MHx0W3JdO2lmKGk8PTApcmV0dXJuW107dmFyIGEsbz1uZXcgQXJyYXkoaSk7aWYocj09PXQubGVuZ3RoLTEpZm9yKGE9MDthPGk7KythKW9bYV09ZTtlbHNlIGZvcihhPTA7YTxpOysrYSlvW2FdPW4odCxlLHIrMSk7cmV0dXJuIG99ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBpKDB8dCxlKTticmVhaztjYXNlIm9iamVjdCI6aWYoIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aClyZXR1cm4gbih0LGUsMCl9cmV0dXJuW119ZS5leHBvcnRzPWF9LHt9XSwxMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cj1yfHwyO3ZhciBuPWUmJmUubGVuZ3RoLGE9bj9lWzBdKnI6dC5sZW5ndGgscz1pKHQsMCxhLHIsITApLGw9W107aWYoIXMpcmV0dXJuIGw7dmFyIHUsYyxmLGQscCxtLHY7aWYobiYmKHM9aCh0LGUscyxyKSksdC5sZW5ndGg+ODAqcil7dT1mPXRbMF0sYz1kPXRbMV07Zm9yKHZhciBnPXI7ZzxhO2crPXIpcD10W2ddLG09dFtnKzFdLHA8dSYmKHU9cCksbTxjJiYoYz1tKSxwPmYmJihmPXApLG0+ZCYmKGQ9bSk7dj1NYXRoLm1heChmLXUsZC1jKX1yZXR1cm4gbyhzLGwscix1LGMsdiksbH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09eih0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1FKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89RShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZ3KG8sby5uZXh0KSYmKEwobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXcobixuLm5leHQpJiYwIT09XyhuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoTChuKSwobj1lPW4ucHJldik9PT1uLm5leHQpcmV0dXJuIG51bGw7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixpLGgsZil7aWYodCl7IWYmJmgmJm0odCxuLGksaCk7Zm9yKHZhciBkLHAsdj10O3QucHJldiE9PXQubmV4dDspaWYoZD10LnByZXYscD10Lm5leHQsaD9sKHQsbixpLGgpOnModCkpZS5wdXNoKGQuaS9yKSxlLnB1c2godC5pL3IpLGUucHVzaChwLmkvciksTCh0KSx0PXAubmV4dCx2PXAubmV4dDtlbHNlIGlmKCh0PXApPT09dil7Zj8xPT09Zj8odD11KHQsZSxyKSxvKHQsZSxyLG4saSxoLDIpKToyPT09ZiYmYyh0LGUscixuLGksaCk6byhhKHQpLGUscixuLGksaCwxKTticmVha319fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5wcmV2LHI9dCxuPXQubmV4dDtpZihfKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKGIoZS54LGUueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJl8oaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoXyhpLGEsbyk+PTApcmV0dXJuITE7Zm9yKHZhciBzPWkueDxhLng/aS54PG8ueD9pLng6by54OmEueDxvLng/YS54Om8ueCxsPWkueTxhLnk/aS55PG8ueT9pLnk6by55OmEueTxvLnk/YS55Om8ueSx1PWkueD5hLng/aS54Pm8ueD9pLng6by54OmEueD5vLng/YS54Om8ueCxjPWkueT5hLnk/aS55Pm8ueT9pLnk6by55OmEueT5vLnk/YS55Om8ueSxoPWcocyxsLGUscixuKSxmPWcodSxjLGUscixuKSxkPXQubmV4dFo7ZCYmZC56PD1mOyl7aWYoZCE9PXQucHJldiYmZCE9PXQubmV4dCYmYihpLngsaS55LGEueCxhLnksby54LG8ueSxkLngsZC55KSYmXyhkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoZD10LnByZXZaO2QmJmQuej49aDspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJmIoaS54LGkueSxhLngsYS55LG8ueCxvLnksZC54LGQueSkmJl8oZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQucHJldlp9cmV0dXJuITB9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshdyhpLGEpJiZNKGksbixuLm5leHQsYSkmJkEoaSxhKSYmQShhLGkpJiYoZS5wdXNoKGkuaS9yKSxlLnB1c2gobi5pL3IpLGUucHVzaChhLmkvciksTChuKSxMKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBjKHQsZSxyLG4saSxzKXt2YXIgbD10O2Rve2Zvcih2YXIgdT1sLm5leHQubmV4dDt1IT09bC5wcmV2Oyl7aWYobC5pIT09dS5pJiZ4KGwsdSkpe3ZhciBjPVMobCx1KTtyZXR1cm4gbD1hKGwsbC5uZXh0KSxjPWEoYyxjLm5leHQpLG8obCxlLHIsbixpLHMpLHZvaWQgbyhjLGUscixuLGkscyl9dT11Lm5leHR9bD1sLm5leHR9d2hpbGUobCE9PXQpfWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIG8scyxsLHUsYyxoPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLHU9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsYz1pKHQsbCx1LG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGgucHVzaCh5KGMpKTtmb3IoaC5zb3J0KGYpLG89MDtvPGgubGVuZ3RoO28rKylkKGhbb10scikscj1hKHIsci5uZXh0KTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gZCh0LGUpe2lmKGU9cCh0LGUpKXt2YXIgcj1TKGUsdCk7YShyLHIubmV4dCl9fWZ1bmN0aW9uIHAodCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0Lnkpe3ZhciBzPW4ueCsoYS1uLnkpKihuLm5leHQueC1uLngpLyhuLm5leHQueS1uLnkpO2lmKHM8PWkmJnM+byl7aWYobz1zLHM9PT1pKXtpZihhPT09bi55KXJldHVybiBuO2lmKGE9PT1uLm5leHQueSlyZXR1cm4gbi5uZXh0fXI9bi54PG4ubmV4dC54P246bi5uZXh0fX1uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoaT09PW8pcmV0dXJuIHIucHJldjt2YXIgbCx1PXIsYz1yLngsaD1yLnksZj0xLzA7Zm9yKG49ci5uZXh0O24hPT11OylpPj1uLngmJm4ueD49YyYmYihhPGg/aTpvLGEsYyxoLGE8aD9vOmksYSxuLngsbi55KSYmKChsPU1hdGguYWJzKGEtbi55KS8oaS1uLngpKTxmfHxsPT09ZiYmbi54PnIueCkmJkEobix0KSYmKHI9bixmPWwpLG49bi5uZXh0O3JldHVybiByfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PWcoaS54LGkueSxlLHIsbikpLGkucHJldlo9aS5wcmV2LGkubmV4dFo9aS5uZXh0LGk9aS5uZXh0fXdoaWxlKGkhPT10KTtpLnByZXZaLm5leHRaPW51bGwsaS5wcmV2Wj1udWxsLHYoaSl9ZnVuY3Rpb24gdih0KXt2YXIgZSxyLG4saSxhLG8scyxsLHU9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8dSYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9dTtzPjB8fGw+MCYmbjspMD09PXM/KGk9bixuPW4ubmV4dFosbC0tKTowIT09bCYmbj9yLno8PW4uej8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSk6KGk9cixyPXIubmV4dFoscy0tKSxhP2EubmV4dFo9aTp0PWksaS5wcmV2Wj1hLGE9aTtyPW59YS5uZXh0Wj1udWxsLHUqPTJ9d2hpbGUobz4xKTtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsZSxyLG4saSl7cmV0dXJuIHQ9MzI3NjcqKHQtcikvaSxlPTMyNzY3KihlLW4pL2ksdD0xNjcxMTkzNSYodHx0PDw4KSx0PTI1MjY0NTEzNSYodHx0PDw0KSx0PTg1ODk5MzQ1OSYodHx0PDwyKSx0PTE0MzE2NTU3NjUmKHR8dDw8MSksZT0xNjcxMTkzNSYoZXxlPDw4KSxlPTI1MjY0NTEzNSYoZXxlPDw0KSxlPTg1ODk5MzQ1OSYoZXxlPDwyKSxlPTE0MzE2NTU3NjUmKGV8ZTw8MSksdHxlPDwxfWZ1bmN0aW9uIHkodCl7dmFyIGU9dCxyPXQ7ZG97ZS54PHIueCYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIHgodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhayh0LGUpJiZBKHQsZSkmJkEoZSx0KSYmVCh0LGUpfWZ1bmN0aW9uIF8odCxlLHIpe3JldHVybihlLnktdC55KSooci54LWUueCktKGUueC10LngpKihyLnktZS55KX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIE0odCxlLHIsbil7cmV0dXJuISEodyh0LGUpJiZ3KHIsbil8fHcodCxuKSYmdyhyLGUpKXx8Xyh0LGUscik+MCE9Xyh0LGUsbik+MCYmXyhyLG4sdCk+MCE9XyhyLG4sZSk+MH1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZNKHIsci5uZXh0LHQsZSkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PXQpO3JldHVybiExfWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gXyh0LnByZXYsdCx0Lm5leHQpPDA/Xyh0LGUsdC5uZXh0KT49MCYmXyh0LHQucHJldixlKT49MDpfKHQsZSx0LnByZXYpPDB8fF8odCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBUKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9bmV3IEModC5pLHQueCx0LnkpLG49bmV3IEMoZS5pLGUueCxlLnkpLGk9dC5uZXh0LGE9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixhLm5leHQ9bixuLnByZXY9YSxufWZ1bmN0aW9uIEUodCxlLHIsbil7dmFyIGk9bmV3IEModCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBMKHQpe3QubmV4dC5wcmV2PXQucHJldix0LnByZXYubmV4dD10Lm5leHQsdC5wcmV2WiYmKHQucHJldloubmV4dFo9dC5uZXh0WiksdC5uZXh0WiYmKHQubmV4dFoucHJldlo9dC5wcmV2Wil9ZnVuY3Rpb24gQyh0LGUscil7dGhpcy5pPXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24geih0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1lLmV4cG9ydHM9bixuLmRldmlhdGlvbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lJiZlLmxlbmd0aCxhPWk/ZVswXSpyOnQubGVuZ3RoLG89TWF0aC5hYnMoeih0LDAsYSxyKSk7aWYoaSlmb3IodmFyIHM9MCxsPWUubGVuZ3RoO3M8bDtzKyspe3ZhciB1PWVbc10qcixjPXM8bC0xP2VbcysxXSpyOnQubGVuZ3RoO28tPU1hdGguYWJzKHoodCx1LGMscikpfXZhciBoPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBmPW5bc10qcixkPW5bcysxXSpyLHA9bltzKzJdKnI7aCs9TWF0aC5hYnMoKHRbZl0tdFtwXSkqKHRbZCsxXS10W2YrMV0pLSh0W2ZdLXRbZF0pKih0W3ArMV0tdFtmKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09aD8wOk1hdGguYWJzKChoLW8pL28pfSxuLmZsYXR0ZW49ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF1bMF0ubGVuZ3RoLHI9e3ZlcnRpY2VzOltdLGhvbGVzOltdLGRpbWVuc2lvbnM6ZX0sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7Zm9yKHZhciBhPTA7YTx0W2ldLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxlO28rKylyLnZlcnRpY2VzLnB1c2godFtpXVthXVtvXSk7aT4wJiYobis9dFtpLTFdLmxlbmd0aCxyLmhvbGVzLnB1c2gobikpfXJldHVybiByfX0se31dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBuPTA7bjxyOysrbil7dmFyIGE9dFtuXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDtmb3IodmFyIG89bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKW9bbl09W107Zm9yKHZhciBuPTA7bjxyOysrbil7dmFyIGE9dFtuXTtvW2FbMF1dLnB1c2goYVsxXSksb1thWzFdXS5wdXNoKGFbMF0pfWZvcih2YXIgcz0wO3M8ZTsrK3MpaShvW3NdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pO3JldHVybiBvfWUuZXhwb3J0cz1uO3ZhciBpPXQoInVuaXEiKX0se3VuaXE6NTQxfV0sMTI2OltmdW5jdGlvbihlLHIsbil7KGZ1bmN0aW9uKGksYSl7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP3IuZXhwb3J0cz1pKCk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoaSk6ZS5FUzZQcm9taXNlPWkoKX0odGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fHwib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIHIodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gbih0KXtHPXR9ZnVuY3Rpb24gbyh0KXtZPXR9ZnVuY3Rpb24gcygpe3JldHVybiBmdW5jdGlvbigpe3EodSl9fWZ1bmN0aW9uIGwoKXt2YXIgdD1zZXRUaW1lb3V0O3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHUsMSl9fWZ1bmN0aW9uIHUoKXtmb3IodmFyIHQ9MDt0PEg7dCs9Mil7KDAsUVt0XSkoUVt0KzFdKSxRW3RdPXZvaWQgMCxRW3QrMV09dm9pZCAwfUg9MH1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9YXJndW1lbnRzLG49dGhpcyxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGYpO3ZvaWQgMD09PWlbdHRdJiZ6KGkpO3ZhciBhPW4uX3N0YXRlO3JldHVybiBhP2Z1bmN0aW9uKCl7dmFyIHQ9clthLTFdO1koZnVuY3Rpb24oKXtyZXR1cm4gRShhLGksdCxuLl9yZXN1bHQpfSl9KCk6ayhuLGksdCxlKSxpfWZ1bmN0aW9uIGgodCl7dmFyIGU9dGhpcztpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I9PT1lKXJldHVybiB0O3ZhciByPW5ldyBlKGYpO3JldHVybiB4KHIsdCkscn1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGQoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZiIpfWZ1bmN0aW9uIHAoKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLiIpfWZ1bmN0aW9uIG0odCl7dHJ5e3JldHVybiB0LnRoZW59Y2F0Y2godCl7cmV0dXJuIGl0LmVycm9yPXQsaXR9fWZ1bmN0aW9uIHYodCxlLHIsbil7dHJ5e3QuY2FsbChlLHIsbil9Y2F0Y2godCl7cmV0dXJuIHR9fWZ1bmN0aW9uIGcodCxlLHIpe1koZnVuY3Rpb24odCl7dmFyIG49ITEsaT12KHIsZSxmdW5jdGlvbihyKXtufHwobj0hMCxlIT09cj94KHQscik6dyh0LHIpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsTSh0LGUpKX0sIlNldHRsZTogIisodC5fbGFiZWx8fCIgdW5rbm93biBwcm9taXNlIikpOyFuJiZpJiYobj0hMCxNKHQsaSkpfSx0KX1mdW5jdGlvbiB5KHQsZSl7ZS5fc3RhdGU9PT1ydD93KHQsZS5fcmVzdWx0KTplLl9zdGF0ZT09PW50P00odCxlLl9yZXN1bHQpOmsoZSx2b2lkIDAsZnVuY3Rpb24oZSl7cmV0dXJuIHgodCxlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIE0odCxlKX0pfWZ1bmN0aW9uIGIodCxlLG4pe2UuY29uc3RydWN0b3I9PT10LmNvbnN0cnVjdG9yJiZuPT09YyYmZS5jb25zdHJ1Y3Rvci5yZXNvbHZlPT09aD95KHQsZSk6bj09PWl0P00odCxpdC5lcnJvcik6dm9pZCAwPT09bj93KHQsZSk6cihuKT9nKHQsZSxuKTp3KHQsZSl9ZnVuY3Rpb24geChlLHIpe2U9PT1yP00oZSxkKCkpOnQocik/YihlLHIsbShyKSk6dyhlLHIpfWZ1bmN0aW9uIF8odCl7dC5fb25lcnJvciYmdC5fb25lcnJvcih0Ll9yZXN1bHQpLEEodCl9ZnVuY3Rpb24gdyh0LGUpe3QuX3N0YXRlPT09ZXQmJih0Ll9yZXN1bHQ9ZSx0Ll9zdGF0ZT1ydCwwIT09dC5fc3Vic2NyaWJlcnMubGVuZ3RoJiZZKEEsdCkpfWZ1bmN0aW9uIE0odCxlKXt0Ll9zdGF0ZT09PWV0JiYodC5fc3RhdGU9bnQsdC5fcmVzdWx0PWUsWShfLHQpKX1mdW5jdGlvbiBrKHQsZSxyLG4pe3ZhciBpPXQuX3N1YnNjcmliZXJzLGE9aS5sZW5ndGg7dC5fb25lcnJvcj1udWxsLGlbYV09ZSxpW2ErcnRdPXIsaVthK250XT1uLDA9PT1hJiZ0Ll9zdGF0ZSYmWShBLHQpfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5fc3Vic2NyaWJlcnMscj10Ll9zdGF0ZTtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgbj12b2lkIDAsaT12b2lkIDAsYT10Ll9yZXN1bHQsbz0wO288ZS5sZW5ndGg7bys9MyluPWVbb10saT1lW28rcl0sbj9FKHIsbixpLGEpOmkoYSk7dC5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9fWZ1bmN0aW9uIFQoKXt0aGlzLmVycm9yPW51bGx9ZnVuY3Rpb24gUyh0LGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaCh0KXtyZXR1cm4gYXQuZXJyb3I9dCxhdH19ZnVuY3Rpb24gRSh0LGUsbixpKXt2YXIgYT1yKG4pLG89dm9pZCAwLHM9dm9pZCAwLGw9dm9pZCAwLHU9dm9pZCAwO2lmKGEpe2lmKG89UyhuLGkpLG89PT1hdD8odT0hMCxzPW8uZXJyb3Isbz1udWxsKTpsPSEwLGU9PT1vKXJldHVybiB2b2lkIE0oZSxwKCkpfWVsc2Ugbz1pLGw9ITA7ZS5fc3RhdGUhPT1ldHx8KGEmJmw/eChlLG8pOnU/TShlLHMpOnQ9PT1ydD93KGUsbyk6dD09PW50JiZNKGUsbykpfWZ1bmN0aW9uIEwodCxlKXt0cnl7ZShmdW5jdGlvbihlKXt4KHQsZSl9LGZ1bmN0aW9uKGUpe00odCxlKX0pfWNhdGNoKGUpe00odCxlKX19ZnVuY3Rpb24gQygpe3JldHVybiBvdCsrfWZ1bmN0aW9uIHoodCl7dFt0dF09b3QrKyx0Ll9zdGF0ZT12b2lkIDAsdC5fcmVzdWx0PXZvaWQgMCx0Ll9zdWJzY3JpYmVycz1bXX1mdW5jdGlvbiBJKHQsZSl7dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcj10LHRoaXMucHJvbWlzZT1uZXcgdChmKSx0aGlzLnByb21pc2VbdHRdfHx6KHRoaXMucHJvbWlzZSksVihlKT8odGhpcy5faW5wdXQ9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9yZW1haW5pbmc9ZS5sZW5ndGgsdGhpcy5fcmVzdWx0PW5ldyBBcnJheSh0aGlzLmxlbmd0aCksMD09PXRoaXMubGVuZ3RoP3codGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCk6KHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwLHRoaXMuX2VudW1lcmF0ZSgpLDA9PT10aGlzLl9yZW1haW5pbmcmJncodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCkpKTpNKHRoaXMucHJvbWlzZSxEKCkpfWZ1bmN0aW9uIEQoKXtyZXR1cm4gbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKX1mdW5jdGlvbiBQKHQpe3JldHVybiBuZXcgSSh0aGlzLHQpLnByb21pc2V9ZnVuY3Rpb24gTyh0KXt2YXIgZT10aGlzO3JldHVybiBuZXcgZShWKHQpP2Z1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9MDthPGk7YSsrKWUucmVzb2x2ZSh0W2FdKS50aGVuKHIsbil9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUobmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLiIpKX0pfWZ1bmN0aW9uIFIodCl7dmFyIGU9dGhpcyxyPW5ldyBlKGYpO3JldHVybiBNKHIsdCkscn1mdW5jdGlvbiBGKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IG11c3QgcGFzcyBhIHJlc29sdmVyIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciIpfWZ1bmN0aW9uIGooKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJGYWlsZWQgdG8gY29uc3RydWN0ICdQcm9taXNlJzogUGxlYXNlIHVzZSB0aGUgJ25ldycgb3BlcmF0b3IsIHRoaXMgb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKX1mdW5jdGlvbiBOKHQpe3RoaXNbdHRdPUMoKSx0aGlzLl9yZXN1bHQ9dGhpcy5fc3RhdGU9dm9pZCAwLHRoaXMuX3N1YnNjcmliZXJzPVtdLGYhPT10JiYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJkYoKSx0aGlzIGluc3RhbmNlb2YgTj9MKHRoaXMsdCk6aigpKX1mdW5jdGlvbiBCKCl7dmFyIHQ9dm9pZCAwO2lmKHZvaWQgMCE9PWEpdD1hO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmKXQ9c2VsZjtlbHNlIHRyeXt0PUZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7dGhyb3cgbmV3IEVycm9yKCJwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKX12YXIgZT10LlByb21pc2U7aWYoZSl7dmFyIHI9bnVsbDt0cnl7cj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZS5yZXNvbHZlKCkpfWNhdGNoKHQpe31pZigiW29iamVjdCBQcm9taXNlXSI9PT1yJiYhZS5jYXN0KXJldHVybn10LlByb21pc2U9Tn12YXIgVT12b2lkIDA7VT1BcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX07dmFyIFY9VSxIPTAscT12b2lkIDAsRz12b2lkIDAsWT1mdW5jdGlvbih0LGUpe1FbSF09dCxRW0grMV09ZSwyPT09KEgrPTIpJiYoRz9HKHUpOiQoKSl9LFg9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnZvaWQgMCxXPVh8fHt9LFo9Vy5NdXRhdGlvbk9ic2VydmVyfHxXLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsSj0idW5kZWZpbmVkIj09dHlwZW9mIHNlbGYmJnZvaWQgMCE9PWkmJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoaSksSz0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIGltcG9ydFNjcmlwdHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWVzc2FnZUNoYW5uZWwsUT1uZXcgQXJyYXkoMWUzKSwkPXZvaWQgMDskPUo/ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaS5uZXh0VGljayh1KX19KCk6Wj9mdW5jdGlvbigpe3ZhciB0PTAsZT1uZXcgWih1KSxyPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtyZXR1cm4gZS5vYnNlcnZlKHIse2NoYXJhY3RlckRhdGE6ITB9KSxmdW5jdGlvbigpe3IuZGF0YT10PSsrdCUyfX0oKTpLP2Z1bmN0aW9uKCl7dmFyIHQ9bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB0LnBvcnQxLm9ubWVzc2FnZT11LGZ1bmN0aW9uKCl7cmV0dXJuIHQucG9ydDIucG9zdE1lc3NhZ2UoMCl9fSgpOnZvaWQgMD09PVgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7dHJ5e3ZhciB0PWUscj10KCJ2ZXJ0eCIpO3JldHVybiBxPXIucnVuT25Mb29wfHxyLnJ1bk9uQ29udGV4dCxzKCl9Y2F0Y2godCl7cmV0dXJuIGwoKX19KCk6bCgpO3ZhciB0dD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpLGV0PXZvaWQgMCxydD0xLG50PTIsaXQ9bmV3IFQsYXQ9bmV3IFQsb3Q9MDtyZXR1cm4gSS5wcm90b3R5cGUuX2VudW1lcmF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmxlbmd0aCxlPXRoaXMuX2lucHV0LHI9MDt0aGlzLl9zdGF0ZT09PWV0JiZyPHQ7cisrKXRoaXMuX2VhY2hFbnRyeShlW3JdLHIpfSxJLnByb3RvdHlwZS5fZWFjaEVudHJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcixuPXIucmVzb2x2ZTtpZihuPT09aCl7dmFyIGk9bSh0KTtpZihpPT09YyYmdC5fc3RhdGUhPT1ldCl0aGlzLl9zZXR0bGVkQXQodC5fc3RhdGUsZSx0Ll9yZXN1bHQpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGkpdGhpcy5fcmVtYWluaW5nLS0sdGhpcy5fcmVzdWx0W2VdPXQ7ZWxzZSBpZihyPT09Til7dmFyIGE9bmV3IHIoZik7YihhLHQsaSksdGhpcy5fd2lsbFNldHRsZUF0KGEsZSl9ZWxzZSB0aGlzLl93aWxsU2V0dGxlQXQobmV3IHIoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSxlKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuKHQpLGUpfSxJLnByb3RvdHlwZS5fc2V0dGxlZEF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnByb21pc2U7bi5fc3RhdGU9PT1ldCYmKHRoaXMuX3JlbWFpbmluZy0tLHQ9PT1udD9NKG4scik6dGhpcy5fcmVzdWx0W2VdPXIpLDA9PT10aGlzLl9yZW1haW5pbmcmJncobix0aGlzLl9yZXN1bHQpfSxJLnByb3RvdHlwZS5fd2lsbFNldHRsZUF0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztrKHQsdm9pZCAwLGZ1bmN0aW9uKHQpe3JldHVybiByLl9zZXR0bGVkQXQocnQsZSx0KX0sZnVuY3Rpb24odCl7cmV0dXJuIHIuX3NldHRsZWRBdChudCxlLHQpfSl9LE4uYWxsPVAsTi5yYWNlPU8sTi5yZXNvbHZlPWgsTi5yZWplY3Q9UixOLl9zZXRTY2hlZHVsZXI9bixOLl9zZXRBc2FwPW8sTi5fYXNhcD1ZLE4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpOLHRoZW46YyxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKG51bGwsdCl9fSxCKCksTi5wb2x5ZmlsbD1CLE4uUHJvbWlzZT1OLE59KX0pLmNhbGwodGhpcyxlKCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDg1fV0sMTI3OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH1mdW5jdGlvbiBpKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGEodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIG8odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBzKHQpe3JldHVybiB2b2lkIDA9PT10fWUuZXhwb3J0cz1uLG4uRXZlbnRFbWl0dGVyPW4sbi5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsbi5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDAsbi5kZWZhdWx0TWF4TGlzdGVuZXJzPTEwLG4ucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbih0KXtpZighYSh0KXx8dDwwfHxpc05hTih0KSl0aHJvdyBUeXBlRXJyb3IoIm4gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxuLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGwsdTtpZih0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLCJlcnJvciI9PT10JiYoIXRoaXMuX2V2ZW50cy5lcnJvcnx8byh0aGlzLl9ldmVudHMuZXJyb3IpJiYhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpe2lmKChlPWFyZ3VtZW50c1sxXSlpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGM9bmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgImVycm9yIiBldmVudC4gKCcrZSsiKSIpO3Rocm93IGMuY29udGV4dD1lLGN9aWYocj10aGlzLl9ldmVudHNbdF0scyhyKSlyZXR1cm4hMTtpZihpKHIpKXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6ci5jYWxsKHRoaXMpO2JyZWFrO2Nhc2UgMjpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0pO2JyZWFrO2Nhc2UgMzpyLmNhbGwodGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTticmVhaztkZWZhdWx0OmE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHIuYXBwbHkodGhpcyxhKX1lbHNlIGlmKG8ocikpZm9yKGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHU9ci5zbGljZSgpLG49dS5sZW5ndGgsbD0wO2w8bjtsKyspdVtsXS5hcHBseSh0aGlzLGEpO3JldHVybiEwfSxuLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7cmV0dXJuIHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksdGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyJiZ0aGlzLmVtaXQoIm5ld0xpc3RlbmVyIix0LGkoZS5saXN0ZW5lcik/ZS5saXN0ZW5lcjplKSx0aGlzLl9ldmVudHNbdF0/byh0aGlzLl9ldmVudHNbdF0pP3RoaXMuX2V2ZW50c1t0XS5wdXNoKGUpOnRoaXMuX2V2ZW50c1t0XT1bdGhpcy5fZXZlbnRzW3RdLGVdOnRoaXMuX2V2ZW50c1t0XT1lLG8odGhpcy5fZXZlbnRzW3RdKSYmIXRoaXMuX2V2ZW50c1t0XS53YXJuZWQmJihyPXModGhpcy5fbWF4TGlzdGVuZXJzKT9uLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dGhpcy5fbWF4TGlzdGVuZXJzKSYmcj4wJiZ0aGlzLl9ldmVudHNbdF0ubGVuZ3RoPnImJih0aGlzLl9ldmVudHNbdF0ud2FybmVkPSEwLGNvbnNvbGUuZXJyb3IoIihub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuIix0aGlzLl9ldmVudHNbdF0ubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2YgY29uc29sZS50cmFjZSYmY29uc29sZS50cmFjZSgpKSx0aGlzfSxuLnByb3RvdHlwZS5vbj1uLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixuLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlTGlzdGVuZXIodCxyKSxufHwobj0hMCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9aWYoIWkoZSkpdGhyb3cgVHlwZUVycm9yKCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgbj0hMTtyZXR1cm4gci5saXN0ZW5lcj1lLHRoaXMub24odCxyKSx0aGlzfSxuLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxzO2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcigibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uIik7aWYoIXRoaXMuX2V2ZW50c3x8IXRoaXMuX2V2ZW50c1t0XSlyZXR1cm4gdGhpcztpZihyPXRoaXMuX2V2ZW50c1t0XSxhPXIubGVuZ3RoLG49LTEscj09PWV8fGkoci5saXN0ZW5lcikmJnIubGlzdGVuZXI9PT1lKWRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LGUpO2Vsc2UgaWYobyhyKSl7Zm9yKHM9YTtzLS0gPjA7KWlmKHJbc109PT1lfHxyW3NdLmxpc3RlbmVyJiZyW3NdLmxpc3RlbmVyPT09ZSl7bj1zO2JyZWFrfWlmKG48MClyZXR1cm4gdGhpczsxPT09ci5sZW5ndGg/KHIubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSk6ci5zcGxpY2UobiwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLHQsZSl9cmV0dXJuIHRoaXN9LApuLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdGhpcy5fZXZlbnRzKXJldHVybiB0aGlzO2lmKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2V2ZW50cz17fTp0aGlzLl9ldmVudHNbdF0mJmRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKGUgaW4gdGhpcy5fZXZlbnRzKSJyZW1vdmVMaXN0ZW5lciIhPT1lJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPXt9LHRoaXN9aWYocj10aGlzLl9ldmVudHNbdF0saShyKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQscik7ZWxzZSBpZihyKWZvcig7ci5sZW5ndGg7KXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyW3IubGVuZ3RoLTFdKTtyZXR1cm4gZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSx0aGlzfSxuLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3RdP2kodGhpcy5fZXZlbnRzW3RdKT9bdGhpcy5fZXZlbnRzW3RdXTp0aGlzLl9ldmVudHNbdF0uc2xpY2UoKTpbXX0sbi5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0KXtpZih0aGlzLl9ldmVudHMpe3ZhciBlPXRoaXMuX2V2ZW50c1t0XTtpZihpKGUpKXJldHVybiAxO2lmKGUpcmV0dXJuIGUubGVuZ3RofXJldHVybiAwfSxuLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lckNvdW50KGUpfX0se31dLDEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lfHwwLGk9cnx8MTtyZXR1cm5bW3RbMTJdK3RbMF0sdFsxM10rdFsxXSx0WzE0XSt0WzJdLHRbMTVdK3RbM11dLFt0WzEyXS10WzBdLHRbMTNdLXRbMV0sdFsxNF0tdFsyXSx0WzE1XS10WzNdXSxbdFsxMl0rdFs0XSx0WzEzXSt0WzVdLHRbMTRdK3RbNl0sdFsxNV0rdFs3XV0sW3RbMTJdLXRbNF0sdFsxM10tdFs1XSx0WzE0XS10WzZdLHRbMTVdLXRbN11dLFtuKnRbMTJdK3RbOF0sbip0WzEzXSt0WzldLG4qdFsxNF0rdFsxMF0sbip0WzE1XSt0WzExXV0sW2kqdFsxMl0tdFs4XSxpKnRbMTNdLXRbOV0saSp0WzE0XS10WzEwXSxpKnRbMTVdLXRbMTFdXV19ZS5leHBvcnRzPW59LHt9XSwxMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZigoKGU9dC5jaGFyQ29kZUF0KG4pKTw5fHxlPjEzKSYmMzIhPT1lJiYxMzMhPT1lJiYxNjAhPT1lJiY1NzYwIT09ZSYmNjE1OCE9PWUmJihlPDgxOTJ8fGU+ODIwNSkmJjgyMzIhPT1lJiY4MjMzIT09ZSYmODIzOSE9PWUmJjgyODchPT1lJiY4Mjg4IT09ZSYmMTIyODghPT1lJiY2NTI3OSE9PWUpcmV0dXJuITE7cmV0dXJuITB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKCJzdHJpbmciPT09ZSl7dmFyIHI9dDtpZigwPT09KHQ9K3QpJiZuKHIpKXJldHVybiExfWVsc2UgaWYoIm51bWJlciIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHt9XSwxMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJmIiwidmFyIHAgPSAoZiAmJiBmLnByb3BlcnRpZXMgfHwge30pOyByZXR1cm4gIitpKHQpKX1mdW5jdGlvbiBpKHQpe2lmKCF0KXJldHVybiJ0cnVlIjt2YXIgZT10WzBdO3JldHVybiB0Lmxlbmd0aDw9MT8iYW55Ij09PWU/ImZhbHNlIjoidHJ1ZSI6IigiKygiPT0iPT09ZT9vKHRbMV0sdFsyXSwiPT09IiwhMSk6IiE9Ij09PWU/byh0WzFdLHRbMl0sIiE9PSIsITEpOiI8Ij09PWV8fCI+Ij09PWV8fCI8PSI9PT1lfHwiPj0iPT09ZT9vKHRbMV0sdFsyXSxlLCEwKToiYW55Ij09PWU/cyh0LnNsaWNlKDEpLCJ8fCIpOiJhbGwiPT09ZT9zKHQuc2xpY2UoMSksIiYmIik6Im5vbmUiPT09ZT9jKHModC5zbGljZSgxKSwifHwiKSk6ImluIj09PWU/bCh0WzFdLHQuc2xpY2UoMikpOiIhaW4iPT09ZT9jKGwodFsxXSx0LnNsaWNlKDIpKSk6ImhhcyI9PT1lP3UodFsxXSk6IiFoYXMiPT09ZT9jKHUoW3RbMV1dKSk6InRydWUiKSsiKSJ9ZnVuY3Rpb24gYSh0KXtyZXR1cm4iJHR5cGUiPT09dD8iZi50eXBlIjoiJGlkIj09PXQ/ImYuaWQiOiJwWyIrSlNPTi5zdHJpbmdpZnkodCkrIl0ifWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9YSh0KSxvPSIkdHlwZSI9PT10P2YuaW5kZXhPZihlKTpKU09OLnN0cmluZ2lmeShlKTtyZXR1cm4obj8idHlwZW9mICIraSsiPT09IHR5cGVvZiAiK28rIiYmIjoiIikraStyK299ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0Lm1hcChpKS5qb2luKGUpfWZ1bmN0aW9uIGwodCxlKXsiJHR5cGUiPT09dCYmKGU9ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGYuaW5kZXhPZih0KX0pKTt2YXIgcj1KU09OLnN0cmluZ2lmeShlLnNvcnQoaCkpLG49YSh0KTtyZXR1cm4gZS5sZW5ndGg8PTIwMD9yKyIuaW5kZXhPZigiK24rIikgIT09IC0xIjoiZnVuY3Rpb24odiwgYSwgaSwgaikge3doaWxlIChpIDw9IGopIHsgdmFyIG0gPSAoaSArIGopID4+IDE7ICAgIGlmIChhW21dID09PSB2KSByZXR1cm4gdHJ1ZTsgaWYgKGFbbV0gPiB2KSBqID0gbSAtIDE7IGVsc2UgaSA9IG0gKyAxO31yZXR1cm4gZmFsc2U7IH0oIituKyIsICIrcisiLDAsIisoZS5sZW5ndGgtMSkrIikifWZ1bmN0aW9uIHUodCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyIgaW4gcCJ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4iISgiK3QrIikifWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZS5leHBvcnRzPW47dmFyIGY9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdfSx7fV0sMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiBNYXRoLm1pbihlLE1hdGgubWF4KHQscikpfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMuZGltZW5zaW9uPXQubGVuZ3RoLHRoaXMuYm91bmRzPVtuZXcgQXJyYXkodGhpcy5kaW1lbnNpb24pLG5ldyBBcnJheSh0aGlzLmRpbWVuc2lvbildO2Zvcih2YXIgbj0wO248dGhpcy5kaW1lbnNpb247KytuKXRoaXMuYm91bmRzWzBdW25dPS0xLzAsdGhpcy5ib3VuZHNbMV1bbl09MS8wO3RoaXMuX3N0YXRlPXQuc2xpY2UoKS5yZXZlcnNlKCksdGhpcy5fdmVsb2NpdHk9ZS5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl90aW1lPVtyXSx0aGlzLl9zY3JhdGNoPVt0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpXX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBpKFswXSxbMF0sMCk7Y2FzZSAxOmlmKCJudW1iZXIiPT10eXBlb2YgdCl7dmFyIG49YSh0KTtyZXR1cm4gbmV3IGkobixuLDApfXJldHVybiBuZXcgaSh0LGEodC5sZW5ndGgpLDApO2Nhc2UgMjppZigibnVtYmVyIj09dHlwZW9mIGUpe3ZhciBuPWEodC5sZW5ndGgpO3JldHVybiBuZXcgaSh0LG4sK2UpfXI9MDtjYXNlIDM6aWYodC5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoInN0YXRlIGFuZCB2ZWxvY2l0eSBsZW5ndGhzIG11c3QgbWF0Y2giKTtyZXR1cm4gbmV3IGkodCxlLHIpfX1lLmV4cG9ydHM9bzt2YXIgcz10KCJjdWJpYy1oZXJtaXRlIiksbD10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLHU9aS5wcm90b3R5cGU7dS5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1sLmd0KHRoaXMuX3RpbWUsdCktMTtlPD0wfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHUuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLGk9bC5sZShlLHQpLGE9dGhpcy5fc2NyYXRjaFswXSxvPXRoaXMuX3N0YXRlLHU9dGhpcy5fdmVsb2NpdHksYz10aGlzLmRpbWVuc2lvbixoPXRoaXMuYm91bmRzO2lmKGk8MClmb3IodmFyIGY9Yy0xLGQ9MDtkPGM7KytkLC0tZilhW2RdPW9bZl07ZWxzZSBpZihpPj1yLTEpZm9yKHZhciBmPW8ubGVuZ3RoLTEscD10LWVbci0xXSxkPTA7ZDxjOysrZCwtLWYpYVtkXT1vW2ZdK3AqdVtmXTtlbHNle2Zvcih2YXIgZj1jKihpKzEpLTEsbT1lW2ldLHY9ZVtpKzFdLGc9di1tfHwxLHk9dGhpcy5fc2NyYXRjaFsxXSxiPXRoaXMuX3NjcmF0Y2hbMl0seD10aGlzLl9zY3JhdGNoWzNdLF89dGhpcy5fc2NyYXRjaFs0XSx3PSEwLGQ9MDtkPGM7KytkLC0tZil5W2RdPW9bZl0seFtkXT11W2ZdKmcsYltkXT1vW2YrY10sX1tkXT11W2YrY10qZyx3PXcmJnlbZF09PT1iW2RdJiZ4W2RdPT09X1tkXSYmMD09PXhbZF07aWYodylmb3IodmFyIGQ9MDtkPGM7KytkKWFbZF09eVtkXTtlbHNlIHMoeSx4LGIsXywodC1tKS9nLGEpfWZvcih2YXIgTT1oWzBdLGs9aFsxXSxkPTA7ZDxjOysrZClhW2RdPW4oTVtkXSxrW2RdLGFbZF0pO3JldHVybiBhfSx1LmRjdXJ2ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9ZS5sZW5ndGgsbj1sLmxlKGUsdCksaT10aGlzLl9zY3JhdGNoWzBdLGE9dGhpcy5fc3RhdGUsbz10aGlzLl92ZWxvY2l0eSx1PXRoaXMuZGltZW5zaW9uO2lmKG4+PXItMSlmb3IodmFyIGM9YS5sZW5ndGgtMSxoPShlW3ItMV0sMCk7aDx1OysraCwtLWMpaVtoXT1vW2NdO2Vsc2V7Zm9yKHZhciBjPXUqKG4rMSktMSxmPWVbbl0sZD1lW24rMV0scD1kLWZ8fDEsbT10aGlzLl9zY3JhdGNoWzFdLHY9dGhpcy5fc2NyYXRjaFsyXSxnPXRoaXMuX3NjcmF0Y2hbM10seT10aGlzLl9zY3JhdGNoWzRdLGI9ITAsaD0wO2g8dTsrK2gsLS1jKW1baF09YVtjXSxnW2hdPW9bY10qcCx2W2hdPWFbYyt1XSx5W2hdPW9bYyt1XSpwLGI9YiYmbVtoXT09PXZbaF0mJmdbaF09PT15W2hdJiYwPT09Z1toXTtpZihiKWZvcih2YXIgaD0wO2g8dTsrK2gpaVtoXT0wO2Vsc2V7cy5kZXJpdmF0aXZlKG0sZyx2LHksKHQtZikvcCxpKTtmb3IodmFyIGg9MDtoPHU7KytoKWlbaF0vPXB9fXJldHVybiBpfSx1Lmxhc3RUPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGltZTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX0sdS5zdGFibGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fdmVsb2NpdHksZT10Lmxlbmd0aCxyPXRoaXMuZGltZW5zaW9uLTE7cj49MDstLXIpaWYodFstLWVdKXJldHVybiExO3JldHVybiEwfSx1Lmp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgaT10aGlzLl9zdGF0ZSxhPXRoaXMuX3ZlbG9jaXR5LG89aS5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sdT1zWzFdO3RoaXMuX3RpbWUucHVzaChlLHQpO2Zvcih2YXIgYz0wO2M8MjsrK2MpZm9yKHZhciBoPTA7aDxyOysraClpLnB1c2goaVtvKytdKSxhLnB1c2goMCk7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgaD1yO2g+MDstLWgpaS5wdXNoKG4obFtoLTFdLHVbaC0xXSxhcmd1bWVudHNbaF0pKSxhLnB1c2goMCl9fSx1LnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXN0VCgpLHI9dGhpcy5kaW1lbnNpb247aWYoISh0PGV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgaT10aGlzLl9zdGF0ZSxhPXRoaXMuX3ZlbG9jaXR5LG89aS5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10LWUsbD10aGlzLmJvdW5kcyx1PWxbMF0sYz1sWzFdLGg9cz4xZS02PzEvczowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGY9cjtmPjA7LS1mKXt2YXIgZD1uKHVbZi0xXSxjW2YtMV0sYXJndW1lbnRzW2ZdKTtpLnB1c2goZCksYS5wdXNoKChkLWlbbysrXSkqaCl9fX0sdS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaW1lbnNpb247aWYoISh0PHRoaXMubGFzdFQoKXx8YXJndW1lbnRzLmxlbmd0aCE9PWUrMSkpe3ZhciByPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksYT10aGlzLmJvdW5kcyxvPWFbMF0scz1hWzFdO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGw9ZTtsPjA7LS1sKXIucHVzaChuKG9bbC0xXSxzW2wtMV0sYXJndW1lbnRzW2xdKSksaS5wdXNoKDApfX0sdS5tb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDw9ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBpPXRoaXMuX3N0YXRlLGE9dGhpcy5fdmVsb2NpdHksbz1pLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSx1PXNbMV0sYz10LWUsaD1jPjFlLTY/MS9jOjA7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgZj1yO2Y+MDstLWYpe3ZhciBkPWFyZ3VtZW50c1tmXTtpLnB1c2gobihsW2YtMV0sdVtmLTFdLGlbbysrXStkKSksYS5wdXNoKGQqaCl9fX0sdS5pZGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKTtpZighKHQ8ZSkpe3ZhciByPXRoaXMuZGltZW5zaW9uLGk9dGhpcy5fc3RhdGUsYT10aGlzLl92ZWxvY2l0eSxvPWkubGVuZ3RoLXIscz10aGlzLmJvdW5kcyxsPXNbMF0sdT1zWzFdLGM9dC1lO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9ci0xO2g+PTA7LS1oKWkucHVzaChuKGxbaF0sdVtoXSxpW29dK2MqYVtvXSkpLGEucHVzaCgwKSxvKz0xfX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjY0LCJjdWJpYy1oZXJtaXRlIjoxMDd9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0PXR8fHt9O3ZhciBlLHIsbj10LmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbz10LmZhbWlseXx8InNhbnMtc2VyaWYiLHM9dC5zaGFwZXx8WzUxMiw1MTJdLGw9dC5zdGVwfHxbMzIsMzJdLHU9cGFyc2VGbG9hdCh0LnNpemUpfHwxNixjPXQuY2hhcnN8fFszMiwxMjZdLGg9TWF0aC5mbG9vcigobFswXS11KS8yKSxmPXQucmFkaXVzfHwxLjUqaCxkPW5ldyBhKHUsaCxmLDAsbykscD1udWxsPT10LmFsaWduPyJvcHRpY2FsIjp0LmFsaWduLG09bnVsbD09dC5maXR8fDE9PXQuZml0Py41OnQuZml0O2lmKEFycmF5LmlzQXJyYXkoYykpe2lmKDI9PT1jLmxlbmd0aCYmIm51bWJlciI9PXR5cGVvZiBjWzBdJiYibnVtYmVyIj09dHlwZW9mIGNbMV0pe3ZhciB2PVtdO2ZvcihlPWNbMF0scj0wO2U8PWNbMV07ZSsrKXZbcisrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpO2M9dn19ZWxzZSBjPVN0cmluZyhjKS5zcGxpdCgiIik7cz1zLnNsaWNlKCksbi53aWR0aD1zWzBdLG4uaGVpZ2h0PXNbMV07dmFyIGc9bi5nZXRDb250ZXh0KCIyZCIpO2cuZmlsbFN0eWxlPSIjMDAwIixnLmZpbGxSZWN0KDAsMCxuLndpZHRoLG4uaGVpZ2h0KSxnLnRleHRCYXNlbGluZT0ibWlkZGxlIjt2YXIgeT1sWzBdLGI9bFsxXSx4PTAsXz0wLHc9dS9iLE09TWF0aC5taW4oYy5sZW5ndGgsTWF0aC5mbG9vcihzWzBdL3kpKk1hdGguY2VpbChzWzFdL2IpKSxrPWQuY3R4LnRleHRBbGlnbixBPWQuYnVmZmVyLFQ9ZC5taWRkbGU7Zm9yKGQuY3R4LnRleHRBbGlnbj0iY2VudGVyIixkLmJ1ZmZlcj1kLnNpemUvMixlPTA7ZTxNO2UrKylpZihjW2VdKXt2YXIgUz1pKGNbZV0sbyx3KSxFPTEsTD1bMCwwXTtpZihtKXt2YXIgQz1tO0FycmF5LmlzQXJyYXkobSkmJihDPW1bZV0pO3ZhciB6PS41KihTLmJvdW5kc1szXS1TLmJvdW5kc1sxXSksST0uNSooUy5ib3VuZHNbMl0tUy5ib3VuZHNbMF0pLEQ9TWF0aC5tYXgoeixJKSxQPU1hdGguc3FydCh6KnorSSpJKSxPPS4zMzMqUy5yYWRpdXMrLjMzMypEKy4zMzMqUDtFPWIqQy8oTypiKjIpLGQuY3R4LmZvbnQ9dSpFKyJweCAiK299ZWxzZSBkLmN0eC5mb250PXUrInB4ICIrbztwJiYoTD0ib3B0aWNhbCI9PT1wfHwhMD09PXA/Wy41KnkteSpTLmNlbnRlclswXSwuNSpiLWIqUy5jZW50ZXJbMV1dOlsuNSp5LXkqKFMuYm91bmRzWzJdK1MuYm91bmRzWzBdKSouNSwuNSpiLWIqKFMuYm91bmRzWzNdK1MuYm91bmRzWzFdKSouNV0sZC5taWRkbGU9VCtMWzFdKkUpO3ZhciBSPWQuZHJhdyhjW2VdKTtnLnB1dEltYWdlRGF0YShSLHgrTFswXSpFLF8pLHgrPWxbMF0seD5zWzBdLWxbMF0mJih4PTAsXys9bFsxXSl9cmV0dXJuIGQuY3R4LnRleHRBbGlnbj1rLGQuYnVmZmVyPUEsZC5taWRkbGU9VCxufWZ1bmN0aW9uIGkodCxlLHIpe2lmKHNbZV0mJnNbZV1bdF0pcmV0dXJuIHNbZV1bdF07dmFyIG49MjAwKnIsaT1vKHQse3NpemU6MjAwLGZvbnRTaXplOm4sZm9udEZhbWlseTplfSk7c1tlXXx8KHNbZV09e30pO3ZhciBhPXtjZW50ZXI6W2kuY2VudGVyWzBdLzIwMCxpLmNlbnRlclsxXS8yMDBdLGJvdW5kczppLmJvdW5kcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQvMjAwfSkscmFkaXVzOmkucmFkaXVzLzIwMH07cmV0dXJuIHNbZV1bdF09YSxhfXZhciBhPXQoInRpbnktc2RmIiksbz10KCJvcHRpY2FsLXByb3BlcnRpZXMiKTtlLmV4cG9ydHM9bjt2YXIgcz17fX0seyJvcHRpY2FsLXByb3BlcnRpZXMiOjQ2OSwidGlueS1zZGYiOjUzMX1dLDEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhKXt0aGlzLl9jb2xvcj10LHRoaXMua2V5PWUsdGhpcy52YWx1ZT1yLHRoaXMubGVmdD1uLHRoaXMucmlnaHQ9aSx0aGlzLl9jb3VudD1hfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBuKHQuX2NvbG9yLHQua2V5LHQudmFsdWUsdC5sZWZ0LHQucmlnaHQsdC5fY291bnQpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gbmV3IG4odCxlLmtleSxlLnZhbHVlLGUubGVmdCxlLnJpZ2h0LGUuX2NvdW50KX1mdW5jdGlvbiBvKHQpe3QuX2NvdW50PTErKHQubGVmdD90LmxlZnQuX2NvdW50OjApKyh0LnJpZ2h0P3QucmlnaHQuX2NvdW50OjApfWZ1bmN0aW9uIHModCxlKXt0aGlzLl9jb21wYXJlPXQsdGhpcy5yb290PWV9ZnVuY3Rpb24gbCh0LGUpe2lmKGUubGVmdCl7dmFyIHI9bCh0LGUubGVmdCk7aWYocilyZXR1cm4gcn12YXIgcj10KGUua2V5LGUudmFsdWUpO3JldHVybiByfHwoZS5yaWdodD9sKHQsZS5yaWdodCk6dm9pZCAwKX1mdW5jdGlvbiB1KHQsZSxyLG4pe2lmKGUodCxuLmtleSk8PTApe2lmKG4ubGVmdCl7dmFyIGk9dSh0LGUscixuLmxlZnQpO2lmKGkpcmV0dXJuIGl9dmFyIGk9cihuLmtleSxuLnZhbHVlKTtpZihpKXJldHVybiBpfWlmKG4ucmlnaHQpcmV0dXJuIHUodCxlLHIsbi5yaWdodCl9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBhLG89cih0LGkua2V5KSxzPXIoZSxpLmtleSk7aWYobzw9MCl7aWYoaS5sZWZ0JiYoYT1jKHQsZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYocz4wJiYoYT1uKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gYX1pZihzPjAmJmkucmlnaHQpcmV0dXJuIGModCxlLHIsbixpLnJpZ2h0KX1mdW5jdGlvbiBoKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1mdW5jdGlvbiBmKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlLHIsbixzLGw9dC5sZW5ndGgtMTtsPj0wOy0tbCl7aWYoZT10W2xdLDA9PT1sKXJldHVybiB2b2lkKGUuX2NvbG9yPWcpO2lmKHI9dFtsLTFdLHIubGVmdD09PWUpe2lmKG49ci5yaWdodCxuLnJpZ2h0JiZuLnJpZ2h0Ll9jb2xvcj09PXYpe2lmKG49ci5yaWdodD1pKG4pLHM9bi5yaWdodD1pKG4ucmlnaHQpLHIucmlnaHQ9bi5sZWZ0LG4ubGVmdD1yLG4ucmlnaHQ9cyxuLl9jb2xvcj1yLl9jb2xvcixlLl9jb2xvcj1nLHIuX2NvbG9yPWcscy5fY29sb3I9ZyxvKHIpLG8obiksbD4xKXt2YXIgdT10W2wtMl07dS5sZWZ0PT09cj91LmxlZnQ9bjp1LnJpZ2h0PW59cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ubGVmdCYmbi5sZWZ0Ll9jb2xvcj09PXYpe2lmKG49ci5yaWdodD1pKG4pLHM9bi5sZWZ0PWkobi5sZWZ0KSxyLnJpZ2h0PXMubGVmdCxuLmxlZnQ9cy5yaWdodCxzLmxlZnQ9cixzLnJpZ2h0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9ZyxuLl9jb2xvcj1nLGUuX2NvbG9yPWcsbyhyKSxvKG4pLG8ocyksbD4xKXt2YXIgdT10W2wtMl07dS5sZWZ0PT09cj91LmxlZnQ9czp1LnJpZ2h0PXN9cmV0dXJuIHZvaWQodFtsLTFdPXMpfWlmKG4uX2NvbG9yPT09Zyl7aWYoci5fY29sb3I9PT12KXJldHVybiByLl9jb2xvcj1nLHZvaWQoci5yaWdodD1hKHYsbikpO3IucmlnaHQ9YSh2LG4pO2NvbnRpbnVlfWlmKG49aShuKSxyLnJpZ2h0PW4ubGVmdCxuLmxlZnQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj12LG8ociksbyhuKSxsPjEpe3ZhciB1PXRbbC0yXTt1LmxlZnQ9PT1yP3UubGVmdD1uOnUucmlnaHQ9bn10W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfWVsc2V7aWYobj1yLmxlZnQsbi5sZWZ0JiZuLmxlZnQuX2NvbG9yPT09dil7aWYobj1yLmxlZnQ9aShuKSxzPW4ubGVmdD1pKG4ubGVmdCksci5sZWZ0PW4ucmlnaHQsbi5yaWdodD1yLG4ubGVmdD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPWcsci5fY29sb3I9ZyxzLl9jb2xvcj1nLG8ociksbyhuKSxsPjEpe3ZhciB1PXRbbC0yXTt1LnJpZ2h0PT09cj91LnJpZ2h0PW46dS5sZWZ0PW59cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ucmlnaHQmJm4ucmlnaHQuX2NvbG9yPT09dil7aWYobj1yLmxlZnQ9aShuKSxzPW4ucmlnaHQ9aShuLnJpZ2h0KSxyLmxlZnQ9cy5yaWdodCxuLnJpZ2h0PXMubGVmdCxzLnJpZ2h0PXIscy5sZWZ0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9ZyxuLl9jb2xvcj1nLGUuX2NvbG9yPWcsbyhyKSxvKG4pLG8ocyksbD4xKXt2YXIgdT10W2wtMl07dS5yaWdodD09PXI/dS5yaWdodD1zOnUubGVmdD1zfXJldHVybiB2b2lkKHRbbC0xXT1zKX1pZihuLl9jb2xvcj09PWcpe2lmKHIuX2NvbG9yPT09dilyZXR1cm4gci5fY29sb3I9Zyx2b2lkKHIubGVmdD1hKHYsbikpO3IubGVmdD1hKHYsbik7Y29udGludWV9aWYobj1pKG4pLHIubGVmdD1uLnJpZ2h0LG4ucmlnaHQ9cixuLl9jb2xvcj1yLl9jb2xvcixyLl9jb2xvcj12LG8ociksbyhuKSxsPjEpe3ZhciB1PXRbbC0yXTt1LnJpZ2h0PT09cj91LnJpZ2h0PW46dS5sZWZ0PW59dFtsLTFdPW4sdFtsXT1yLGwrMTx0Lmxlbmd0aD90W2wrMV09ZTp0LnB1c2goZSksbCs9Mn19fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbmV3IHModHx8cCxudWxsKX1lLmV4cG9ydHM9bTt2YXIgdj0wLGc9MSx5PXMucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJrZXlzIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHIpe3QucHVzaChlKX0pLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24oZSxyKXt0LnB1c2gocil9KSx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290P3RoaXMucm9vdC5fY291bnQ6MH19KSx5Lmluc2VydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb21wYXJlLGk9dGhpcy5yb290LGw9W10sdT1bXTtpOyl7dmFyIGM9cih0LGkua2V5KTtsLnB1c2goaSksdS5wdXNoKGMpLGk9Yzw9MD9pLmxlZnQ6aS5yaWdodH1sLnB1c2gobmV3IG4odix0LGUsbnVsbCxudWxsLDEpKTtmb3IodmFyIGg9bC5sZW5ndGgtMjtoPj0wOy0taCl7dmFyIGk9bFtoXTt1W2hdPD0wP2xbaF09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxsW2grMV0saS5yaWdodCxpLl9jb3VudCsxKTpsW2hdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LGxbaCsxXSxpLl9jb3VudCsxKX1mb3IodmFyIGg9bC5sZW5ndGgtMTtoPjE7LS1oKXt2YXIgZj1sW2gtMV0saT1sW2hdO2lmKGYuX2NvbG9yPT09Z3x8aS5fY29sb3I9PT1nKWJyZWFrO3ZhciBkPWxbaC0yXTtpZihkLmxlZnQ9PT1mKWlmKGYubGVmdD09PWkpe3ZhciBwPWQucmlnaHQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZC5fY29sb3I9dixkLmxlZnQ9Zi5yaWdodCxmLl9jb2xvcj1nLGYucmlnaHQ9ZCxsW2gtMl09ZixsW2gtMV09aSxvKGQpLG8oZiksaD49Myl7dmFyIG09bFtoLTNdO20ubGVmdD09PWQ/bS5sZWZ0PWY6bS5yaWdodD1mfWJyZWFrfWYuX2NvbG9yPWcsZC5yaWdodD1hKGcscCksZC5fY29sb3I9dixoLT0xfWVsc2V7dmFyIHA9ZC5yaWdodDtpZighcHx8cC5fY29sb3IhPT12KXtpZihmLnJpZ2h0PWkubGVmdCxkLl9jb2xvcj12LGQubGVmdD1pLnJpZ2h0LGkuX2NvbG9yPWcsaS5sZWZ0PWYsaS5yaWdodD1kLGxbaC0yXT1pLGxbaC0xXT1mLG8oZCksbyhmKSxvKGkpLGg+PTMpe3ZhciBtPWxbaC0zXTttLmxlZnQ9PT1kP20ubGVmdD1pOm0ucmlnaHQ9aX1icmVha31mLl9jb2xvcj1nLGQucmlnaHQ9YShnLHApLGQuX2NvbG9yPXYsaC09MX1lbHNlIGlmKGYucmlnaHQ9PT1pKXt2YXIgcD1kLmxlZnQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZC5fY29sb3I9dixkLnJpZ2h0PWYubGVmdCxmLl9jb2xvcj1nLGYubGVmdD1kLGxbaC0yXT1mLGxbaC0xXT1pLG8oZCksbyhmKSxoPj0zKXt2YXIgbT1sW2gtM107bS5yaWdodD09PWQ/bS5yaWdodD1mOm0ubGVmdD1mfWJyZWFrfWYuX2NvbG9yPWcsZC5sZWZ0PWEoZyxwKSxkLl9jb2xvcj12LGgtPTF9ZWxzZXt2YXIgcD1kLmxlZnQ7aWYoIXB8fHAuX2NvbG9yIT09dil7aWYoZi5sZWZ0PWkucmlnaHQsZC5fY29sb3I9dixkLnJpZ2h0PWkubGVmdCxpLl9jb2xvcj1nLGkucmlnaHQ9ZixpLmxlZnQ9ZCxsW2gtMl09aSxsW2gtMV09ZixvKGQpLG8oZiksbyhpKSxoPj0zKXt2YXIgbT1sW2gtM107bS5yaWdodD09PWQ/bS5yaWdodD1pOm0ubGVmdD1pfWJyZWFrfWYuX2NvbG9yPWcsZC5sZWZ0PWEoZyxwKSxkLl9jb2xvcj12LGgtPTF9fXJldHVybiBsWzBdLl9jb2xvcj1nLG5ldyBzKHIsbFswXSl9LHkuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGwodCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gdShlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiBjKGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBoKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLHkuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgaCh0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgaCh0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0seS5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx5Lmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSx5Lmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0seS5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LHkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGgodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSx5LnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSx5LmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgYj1oLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwidmFsaWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIm5vZGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhY2subGVuZ3RoPjA/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOm51bGx9LGVudW1lcmFibGU6ITB9KSxiLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoKHRoaXMudHJlZSx0aGlzLl9zdGFjay5zbGljZSgpKX0sYi5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuIHRoaXMudHJlZTt2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9dFt0Lmxlbmd0aC0xXTtlW2UubGVuZ3RoLTFdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpO2Zvcih2YXIgaT10Lmxlbmd0aC0yO2k+PTA7LS1pKXt2YXIgcj10W2ldO3IubGVmdD09PXRbaSsxXT9lW2ldPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVtpKzFdLHIucmlnaHQsci5fY291bnQpOmVbaV09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtpKzFdLHIuX2NvdW50KX1pZihyPWVbZS5sZW5ndGgtMV0sci5sZWZ0JiZyLnJpZ2h0KXt2YXIgYT1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgbz1lW2EtMV07ZS5wdXNoKG5ldyBuKHIuX2NvbG9yLG8ua2V5LG8udmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2EtMV0ua2V5PXIua2V5LGVbYS0xXS52YWx1ZT1yLnZhbHVlO2Zvcih2YXIgaT1lLmxlbmd0aC0yO2k+PWE7LS1pKXI9ZVtpXSxlW2ldPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsci5sZWZ0LGVbaSsxXSxyLl9jb3VudCk7ZVthLTFdLmxlZnQ9ZVthXX1pZihyPWVbZS5sZW5ndGgtMV0sci5fY29sb3I9PT12KXt2YXIgbD1lW2UubGVuZ3RoLTJdO2wubGVmdD09PXI/bC5sZWZ0PW51bGw6bC5yaWdodD09PXImJihsLnJpZ2h0PW51bGwpLGUucG9wKCk7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpZVtpXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKHIubGVmdHx8ci5yaWdodCl7ci5sZWZ0P2YocixyLmxlZnQpOnIucmlnaHQmJmYocixyLnJpZ2h0KSxyLl9jb2xvcj1nO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpZVtpXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKWVbaV0uX2NvdW50LS07dmFyIHU9ZVtlLmxlbmd0aC0yXTtyZXR1cm4gZChlKSx1LmxlZnQ9PT1yP3UubGVmdD1udWxsOnUucmlnaHQ9bnVsbCxuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsZVswXSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJrZXkiLHtnZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdGFjay5sZW5ndGg+MClyZXR1cm4gdGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdLmtleX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJ2YWx1ZSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0udmFsdWV9LGVudW1lcmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYiwiaW5kZXgiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD0wLGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXt2YXIgcj10aGlzLnRyZWUucm9vdDtyZXR1cm4gcj9yLl9jb3VudDowfWVbZS5sZW5ndGgtMV0ubGVmdCYmKHQ9ZVtlLmxlbmd0aC0xXS5sZWZ0Ll9jb3VudCk7Zm9yKHZhciBuPWUubGVuZ3RoLTI7bj49MDstLW4pZVtuKzFdPT09ZVtuXS5yaWdodCYmKCsrdCxlW25dLmxlZnQmJih0Kz1lW25dLmxlZnQuX2NvdW50KSk7cmV0dXJuIHR9LGVudW1lcmFibGU6ITB9KSxiLm5leHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwIT09dC5sZW5ndGgpe3ZhciBlPXRbdC5sZW5ndGgtMV07aWYoZS5yaWdodClmb3IoZT1lLnJpZ2h0O2U7KXQucHVzaChlKSxlPWUubGVmdDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ucmlnaHQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJoYXNOZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ucmlnaHQpcmV0dXJuITA7Zm9yKHZhciBlPXQubGVuZ3RoLTE7ZT4wOy0tZSlpZih0W2UtMV0ubGVmdD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSksYi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhY2s7aWYoMD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgdXBkYXRlIGVtcHR5IG5vZGUhIik7dmFyIHI9bmV3IEFycmF5KGUubGVuZ3RoKSxpPWVbZS5sZW5ndGgtMV07cltyLmxlbmd0aC0xXT1uZXcgbihpLl9jb2xvcixpLmtleSx0LGkubGVmdCxpLnJpZ2h0LGkuX2NvdW50KTtmb3IodmFyIGE9ZS5sZW5ndGgtMjthPj0wOy0tYSlpPWVbYV0saS5sZWZ0PT09ZVthKzFdP3JbYV09bmV3IG4oaS5fY29sb3IsaS5rZXksaS52YWx1ZSxyW2ErMV0saS5yaWdodCxpLl9jb3VudCk6clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxyW2ErMV0saS5fY291bnQpO3JldHVybiBuZXcgcyh0aGlzLnRyZWUuX2NvbXBhcmUsclswXSl9LGIucHJldj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLmxlZnQpZm9yKGU9ZS5sZWZ0O2U7KXQucHVzaChlKSxlPWUucmlnaHQ7ZWxzZSBmb3IodC5wb3AoKTt0Lmxlbmd0aD4wJiZ0W3QubGVuZ3RoLTFdLmxlZnQ9PT1lOyllPXRbdC5sZW5ndGgtMV0sdC5wb3AoKX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLCJoYXNQcmV2Iix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiExO2lmKHRbdC5sZW5ndGgtMV0ubGVmdClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5yaWdodD09PXRbZV0pcmV0dXJuITA7cmV0dXJuITF9fSl9LHt9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQ8MClyZXR1cm4gTnVtYmVyKCIwLzAiKTtmb3IodmFyIGU9b1swXSxyPW8ubGVuZ3RoLTE7cj4wOy0tcillKz1vW3JdLyh0K3IpO3ZhciBuPXQrYSsuNTtyZXR1cm4uNSpNYXRoLmxvZygyKk1hdGguUEkpKyh0Ky41KSpNYXRoLmxvZyhuKS1uK01hdGgubG9nKGUpLU1hdGgubG9nKHQpfXZhciBpPVsuOTk5OTk5OTk5OTk5ODA5OSw2NzYuNTIwMzY4MTIxODg1MSwtMTI1OS4xMzkyMTY3MjI0MDI4LDc3MS4zMjM0Mjg3Nzc2NTMxLC0xNzYuNjE1MDI5MTYyMTQwNiwxMi41MDczNDMyNzg2ODY5MDUsLS4xMzg1NzEwOTUyNjU3MjAxMiw5OTg0MzY5NTc4MDE5NTcyZS0yMSwxLjUwNTYzMjczNTE0OTMxMTZlLTddLGE9NjA3LzEyOCxvPVsuOTk5OTk5OTk5OTk5OTk3MSw1Ny4xNTYyMzU2NjU4NjI5MiwtNTkuNTk3OTYwMzU1NDc1NDksMTQuMTM2MDk3OTc0NzQxNzQ2LC0uNDkxOTEzODE2MDk3NjIwMiwzMzk5NDY0OTk4NDgxMTg5ZS0yMCw0NjUyMzYyODkyNzA0ODU4ZS0yMCwtOTgzNzQ0NzUzMDQ4Nzk1NmUtMjAsLjAwMDE1ODA4ODcwMzIyNDkxMjUsLS4wMDAyMTAyNjQ0NDE3MjQxMDQ4OCwuMDAwMjE3NDM5NjE4MTE1MjEyNjUsLS4wMDAxNjQzMTgxMDY1MzY3NjM5LDg0NDE4MjIzOTgzODUyNzVlLTIwLC0yNjE5MDgzODQwMTU4MTQwOGUtMjEsMzY4OTkxODI2NTk1MzE2MjVlLTIyXTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlKXtpZihlPC41KXJldHVybiBNYXRoLlBJLyhNYXRoLnNpbihNYXRoLlBJKmUpKnQoMS1lKSk7aWYoZT4xMDApcmV0dXJuIE1hdGguZXhwKG4oZSkpO2UtPTE7Zm9yKHZhciByPWlbMF0sYT0xO2E8OTthKyspcis9aVthXS8oZSthKTt2YXIgbz1lKzcrLjU7cmV0dXJuIE1hdGguc3FydCgyKk1hdGguUEkpKk1hdGgucG93KG8sZSsuNSkqTWF0aC5leHAoLW8pKnJ9LGUuZXhwb3J0cy5sb2c9bn0se31dLDEzNTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYoIlBvbHlnb24iPT09dC50eXBlKXJldHVybiBpKHQuY29vcmRpbmF0ZXMpO2lmKCJNdWx0aVBvbHlnb24iPT09dC50eXBlKXtmb3IodmFyIGU9MCxyPTA7cjx0LmNvb3JkaW5hdGVzLmxlbmd0aDtyKyspZSs9aSh0LmNvb3JkaW5hdGVzW3JdKTtyZXR1cm4gZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoYSh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoYSh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXt2YXIgZT0wO2lmKHQubGVuZ3RoPjIpe2Zvcih2YXIgcixuLGk9MDtpPHQubGVuZ3RoLTE7aSsrKXI9dFtpXSxuPXRbaSsxXSxlKz1vKG5bMF0tclswXSkqKDIrTWF0aC5zaW4obyhyWzFdKSkrTWF0aC5zaW4obyhuWzFdKSkpO2U9ZSpzLlJBRElVUypzLlJBRElVUy8yfXJldHVybiBlfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQqTWF0aC5QSS8xODB9dmFyIHM9dCgid2dzODQiKTtlLmV4cG9ydHMuZ2VvbWV0cnk9bixlLmV4cG9ydHMucmluZz1hfSx7d2dzODQ6NTYzfV0sMTM2OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3N3aXRjaCh0JiZ0LnR5cGV8fG51bGwpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnJldHVybiB0LmZlYXR1cmVzPXQuZmVhdHVyZXMubWFwKGkobixlKSksdDtjYXNlIkZlYXR1cmUiOnJldHVybiB0Lmdlb21ldHJ5PW4odC5nZW9tZXRyeSxlKSx0O2Nhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBhKHQsZSk7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdChyLGUpfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIlBvbHlnb24iPT09dC50eXBlP3QuY29vcmRpbmF0ZXM9byh0LmNvb3JkaW5hdGVzLGUpOiJNdWx0aVBvbHlnb24iPT09dC50eXBlJiYodC5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzLm1hcChpKG8sZSkpKSx0fWZ1bmN0aW9uIG8odCxlKXtlPSEhZSx0WzBdPXModFswXSwhZSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspdFtyXT1zKHRbcl0sZSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBsKHQpPT09ZT90OnQucmV2ZXJzZSgpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHUucmluZyh0KT49MH12YXIgdT10KCJnZW9qc29uLWFyZWEiKTtlLmV4cG9ydHM9bn0seyJnZW9qc29uLWFyZWEiOjEzNX1dLDEzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sbyxsLHUsYyl7aWYoci89ZSxuLz1lLHU+PXImJmM8PW4pcmV0dXJuIHQ7aWYodT5ufHxjPHIpcmV0dXJuIG51bGw7Zm9yKHZhciBoPVtdLGY9MDtmPHQubGVuZ3RoO2YrKyl7dmFyIGQscCxtPXRbZl0sdj1tLmdlb21ldHJ5LGc9bS50eXBlO2lmKGQ9bS5taW5bb10scD1tLm1heFtvXSxkPj1yJiZwPD1uKWgucHVzaChtKTtlbHNlIGlmKCEoZD5ufHxwPHIpKXt2YXIgeT0xPT09Zz9pKHYscixuLG8pOmEodixyLG4sbyxsLDM9PT1nKTt5Lmxlbmd0aCYmaC5wdXNoKHMobS50YWdzLGcseSxtLmlkKSl9fXJldHVybiBoLmxlbmd0aD9oOm51bGx9ZnVuY3Rpb24gaSh0LGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdLHM9b1tuXTtzPj1lJiZzPD1yJiZpLnB1c2gobyl9cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7Zm9yKHZhciBzPVtdLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIHUsYyxoLGY9MCxkPTAscD1udWxsLG09dFtsXSx2PW0uYXJlYSxnPW0uZGlzdCx5PW0ub3V0ZXIsYj1tLmxlbmd0aCx4PVtdO2ZvcihjPTA7YzxiLTE7YysrKXU9cHx8bVtjXSxwPW1bYysxXSxmPWR8fHVbbl0sZD1wW25dLGY8ZT9kPnI/KHgucHVzaChpKHUscCxlKSxpKHUscCxyKSksYXx8KHg9byhzLHgsdixnLHkpKSk6ZD49ZSYmeC5wdXNoKGkodSxwLGUpKTpmPnI/ZDxlPyh4LnB1c2goaSh1LHAsciksaSh1LHAsZSkpLGF8fCh4PW8ocyx4LHYsZyx5KSkpOmQ8PXImJngucHVzaChpKHUscCxyKSk6KHgucHVzaCh1KSxkPGU/KHgucHVzaChpKHUscCxlKSksYXx8KHg9byhzLHgsdixnLHkpKSk6ZD5yJiYoeC5wdXNoKGkodSxwLHIpKSxhfHwoeD1vKHMseCx2LGcseSkpKSk7dT1tW2ItMV0sZj11W25dLGY+PWUmJmY8PXImJngucHVzaCh1KSxoPXhbeC5sZW5ndGgtMV0sYSYmaCYmKHhbMF1bMF0hPT1oWzBdfHx4WzBdWzFdIT09aFsxXSkmJngucHVzaCh4WzBdKSxvKHMseCx2LGcseSl9cmV0dXJuIHN9ZnVuY3Rpb24gbyh0LGUscixuLGkpe3JldHVybiBlLmxlbmd0aCYmKGUuYXJlYT1yLGUuZGlzdD1uLHZvaWQgMCE9PWkmJihlLm91dGVyPWkpLHQucHVzaChlKSksW119ZS5leHBvcnRzPW47dmFyIHM9dCgiLi9mZWF0dXJlIil9LHsiLi9mZWF0dXJlIjoxMzl9XSwxMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPVtdO2lmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT10LnR5cGUpZm9yKHZhciBuPTA7bjx0LmZlYXR1cmVzLmxlbmd0aDtuKyspaShyLHQuZmVhdHVyZXNbbl0sZSk7ZWxzZSJGZWF0dXJlIj09PXQudHlwZT9pKHIsdCxlKTppKHIse2dlb21ldHJ5OnR9LGUpO3JldHVybiByfWZ1bmN0aW9uIGkodCxlLHIpe2lmKG51bGwhPT1lLmdlb21ldHJ5KXt2YXIgbixzLGwsYyxoPWUuZ2VvbWV0cnksZj1oLnR5cGUsZD1oLmNvb3JkaW5hdGVzLHA9ZS5wcm9wZXJ0aWVzLG09ZS5pZDtpZigiUG9pbnQiPT09Zil0LnB1c2godShwLDEsW28oZCldLG0pKTtlbHNlIGlmKCJNdWx0aVBvaW50Ij09PWYpdC5wdXNoKHUocCwxLGEoZCksbSkpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09Zil0LnB1c2godShwLDIsW2EoZCxyKV0sbSkpO2Vsc2UgaWYoIk11bHRpTGluZVN0cmluZyI9PT1mfHwiUG9seWdvbiI9PT1mKXtmb3IobD1bXSxuPTA7bjxkLmxlbmd0aDtuKyspYz1hKGRbbl0sciksIlBvbHlnb24iPT09ZiYmKGMub3V0ZXI9MD09PW4pLGwucHVzaChjKTt0LnB1c2godShwLCJQb2x5Z29uIj09PWY/MzoyLGwsbSkpfWVsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1mKXtmb3IobD1bXSxuPTA7bjxkLmxlbmd0aDtuKyspZm9yKHM9MDtzPGRbbl0ubGVuZ3RoO3MrKyljPWEoZFtuXVtzXSxyKSxjLm91dGVyPTA9PT1zLGwucHVzaChjKTt0LnB1c2godShwLDMsbCxtKSl9ZWxzZXtpZigiR2VvbWV0cnlDb2xsZWN0aW9uIiE9PWYpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpO2ZvcihuPTA7bjxoLmdlb21ldHJpZXMubGVuZ3RoO24rKylpKHQse2dlb21ldHJ5OmguZ2VvbWV0cmllc1tuXSxwcm9wZXJ0aWVzOnB9LHIpfX19ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKG8odFtuXSkpO3JldHVybiBlJiYobChyLGUpLHMocikpLHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZT1NYXRoLnNpbih0WzFdKk1hdGguUEkvMTgwKSxyPXRbMF0vMzYwKy41LG49LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiBuPW48MD8wOm4+MT8xOm4sW3IsbiwwXX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT0wO2E8dC5sZW5ndGgtMTthKyspZT1yfHx0W2FdLHI9dFthKzFdLG4rPWVbMF0qclsxXS1yWzBdKmVbMV0saSs9TWF0aC5hYnMoclswXS1lWzBdKStNYXRoLmFicyhyWzFdLWVbMV0pO3QuYXJlYT1NYXRoLmFicyhuLzIpLHQuZGlzdD1pfWUuZXhwb3J0cz1uO3ZhciBsPXQoIi4vc2ltcGxpZnkiKSx1PXQoIi4vZmVhdHVyZSIpfSx7Ii4vZmVhdHVyZSI6MTM5LCIuL3NpbXBsaWZ5IjoxNDF9XSwxMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgYT17aWQ6bnx8bnVsbCx0eXBlOmUsZ2VvbWV0cnk6cix0YWdzOnR8fG51bGwsbWluOlsxLzAsMS8wXSxtYXg6Wy0xLzAsLTEvMF19O3JldHVybiBpKGEpLGF9ZnVuY3Rpb24gaSh0KXt2YXIgZT10Lmdlb21ldHJ5LHI9dC5taW4sbj10Lm1heDtpZigxPT09dC50eXBlKWEocixuLGUpO2Vsc2UgZm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspYShyLG4sZVtpXSk7cmV0dXJuIHR9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuLGk9MDtpPHIubGVuZ3RoO2krKyluPXJbaV0sdFswXT1NYXRoLm1pbihuWzBdLHRbMF0pLGVbMF09TWF0aC5tYXgoblswXSxlWzBdKSx0WzFdPU1hdGgubWluKG5bMV0sdFsxXSksZVsxXT1NYXRoLm1heChuWzFdLGVbMV0pfWUuZXhwb3J0cz1ufSx7fV0sMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gbmV3IGkodCxlKX1mdW5jdGlvbiBpKHQsZSl7ZT10aGlzLm9wdGlvbnM9bChPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksZSk7dmFyIHI9ZS5kZWJ1ZztyJiZjb25zb2xlLnRpbWUoInByZXByb2Nlc3MgZGF0YSIpO3ZhciBuPTE8PGUubWF4Wm9vbSxpPWModCxlLnRvbGVyYW5jZS8obiplLmV4dGVudCkpO3RoaXMudGlsZXM9e30sdGhpcy50aWxlQ29vcmRzPVtdLHImJihjb25zb2xlLnRpbWVFbmQoInByZXByb2Nlc3MgZGF0YSIpLGNvbnNvbGUubG9nKCJpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWQiLGUuaW5kZXhNYXhab29tLGUuaW5kZXhNYXhQb2ludHMpLGNvbnNvbGUudGltZSgiZ2VuZXJhdGUgdGlsZXMiKSx0aGlzLnN0YXRzPXt9LHRoaXMudG90YWw9MCksaT1kKGksZS5idWZmZXIvZS5leHRlbnQsbyksaS5sZW5ndGgmJnRoaXMuc3BsaXRUaWxlKGksMCwwLDApLHImJihpLmxlbmd0aCYmY29uc29sZS5sb2coImZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCIsdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcyx0aGlzLnRpbGVzWzBdLm51bVBvaW50cyksY29uc29sZS50aW1lRW5kKCJnZW5lcmF0ZSB0aWxlcyIpLGNvbnNvbGUubG9nKCJ0aWxlcyBnZW5lcmF0ZWQ6Iix0aGlzLnRvdGFsLEpTT04uc3RyaW5naWZ5KHRoaXMuc3RhdHMpKSl9ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIDMyKigoMTw8dCkqcitlKSt0fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybltyLChyLXRbMF0pKihlWzFdLXRbMV0pLyhlWzBdLXRbMF0pK3RbMV0sMV19ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuWyhyLXRbMV0pKihlWzBdLXRbMF0pLyhlWzFdLXRbMV0pK3RbMF0sciwxXX1mdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdO3JldHVybiB0fWZ1bmN0aW9uIHUodCxlLHIpe3ZhciBuPXQuc291cmNlO2lmKDEhPT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uWzBdO2lmKDMhPT1pLnR5cGV8fGkuZ2VvbWV0cnkubGVuZ3RoPjEpcmV0dXJuITE7dmFyIGE9aS5nZW9tZXRyeVswXS5sZW5ndGg7aWYoNSE9PWEpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxhO28rKyl7dmFyIHM9aC5wb2ludChpLmdlb21ldHJ5WzBdW29dLGUsdC56Mix0LngsdC55KTtpZihzWzBdIT09LXImJnNbMF0hPT1lK3J8fHNbMV0hPT0tciYmc1sxXSE9PWUrcilyZXR1cm4hMX1yZXR1cm4hMH1lLmV4cG9ydHM9bjt2YXIgYz10KCIuL2NvbnZlcnQiKSxoPXQoIi4vdHJhbnNmb3JtIiksZj10KCIuL2NsaXAiKSxkPXQoIi4vd3JhcCIpLHA9dCgiLi90aWxlIik7aS5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsc29saWRDaGlsZHJlbjohMSx0b2xlcmFuY2U6MyxleHRlbnQ6NDA5NixidWZmZXI6NjQsZGVidWc6MH0saS5wcm90b3R5cGUuc3BsaXRUaWxlPWZ1bmN0aW9uKHQsZSxyLG4saSxsLGMpe2Zvcih2YXIgaD1bdCxlLHIsbl0sZD10aGlzLm9wdGlvbnMsbT1kLmRlYnVnLHY9bnVsbDtoLmxlbmd0aDspe249aC5wb3AoKSxyPWgucG9wKCksZT1oLnBvcCgpLHQ9aC5wb3AoKTt2YXIgZz0xPDxlLHk9YShlLHIsbiksYj10aGlzLnRpbGVzW3ldLHg9ZT09PWQubWF4Wm9vbT8wOmQudG9sZXJhbmNlLyhnKmQuZXh0ZW50KTtpZighYiYmKG0+MSYmY29uc29sZS50aW1lKCJjcmVhdGlvbiIpLGI9dGhpcy50aWxlc1t5XT1wKHQsZyxyLG4seCxlPT09ZC5tYXhab29tKSx0aGlzLnRpbGVDb29yZHMucHVzaCh7ejplLHg6cix5Om59KSxtKSl7bT4xJiYoY29uc29sZS5sb2coInRpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKSIsZSxyLG4sYi5udW1GZWF0dXJlcyxiLm51bVBvaW50cyxiLm51bVNpbXBsaWZpZWQpLGNvbnNvbGUudGltZUVuZCgiY3JlYXRpb24iKSk7dmFyIF89InoiK2U7dGhpcy5zdGF0c1tfXT0odGhpcy5zdGF0c1tfXXx8MCkrMSx0aGlzLnRvdGFsKyt9aWYoYi5zb3VyY2U9dCxpKXtpZihlPT09ZC5tYXhab29tfHxlPT09aSljb250aW51ZTt2YXIgdz0xPDxpLWU7aWYociE9PU1hdGguZmxvb3IobC93KXx8biE9PU1hdGguZmxvb3IoYy93KSljb250aW51ZX1lbHNlIGlmKGU9PT1kLmluZGV4TWF4Wm9vbXx8Yi5udW1Qb2ludHM8PWQuaW5kZXhNYXhQb2ludHMpY29udGludWU7aWYoZC5zb2xpZENoaWxkcmVufHwhdShiLGQuZXh0ZW50LGQuYnVmZmVyKSl7Yi5zb3VyY2U9bnVsbCxtPjEmJmNvbnNvbGUudGltZSgiY2xpcHBpbmciKTt2YXIgTSxrLEEsVCxTLEUsTD0uNSpkLmJ1ZmZlci9kLmV4dGVudCxDPS41LUwsej0uNStMLEk9MStMO009az1BPVQ9bnVsbCxTPWYodCxnLHItTCxyK3osMCxvLGIubWluWzBdLGIubWF4WzBdKSxFPWYodCxnLHIrQyxyK0ksMCxvLGIubWluWzBdLGIubWF4WzBdKSxTJiYoTT1mKFMsZyxuLUwsbit6LDEscyxiLm1pblsxXSxiLm1heFsxXSksaz1mKFMsZyxuK0MsbitJLDEscyxiLm1pblsxXSxiLm1heFsxXSkpLEUmJihBPWYoRSxnLG4tTCxuK3osMSxzLGIubWluWzFdLGIubWF4WzFdKSxUPWYoRSxnLG4rQyxuK0ksMSxzLGIubWluWzFdLGIubWF4WzFdKSksbT4xJiZjb25zb2xlLnRpbWVFbmQoImNsaXBwaW5nIiksdC5sZW5ndGgmJihoLnB1c2goTXx8W10sZSsxLDIqciwyKm4pLGgucHVzaChrfHxbXSxlKzEsMipyLDIqbisxKSxoLnB1c2goQXx8W10sZSsxLDIqcisxLDIqbiksaC5wdXNoKFR8fFtdLGUrMSwyKnIrMSwyKm4rMSkpfWVsc2UgaSYmKHY9ZSl9cmV0dXJuIHZ9LGkucHJvdG90eXBlLmdldFRpbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMub3B0aW9ucyxpPW4uZXh0ZW50LG89bi5kZWJ1ZyxzPTE8PHQ7ZT0oZSVzK3MpJXM7dmFyIGw9YSh0LGUscik7aWYodGhpcy50aWxlc1tsXSlyZXR1cm4gaC50aWxlKHRoaXMudGlsZXNbbF0saSk7bz4xJiZjb25zb2xlLmxvZygiZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWQiLHQsZSxyKTtmb3IodmFyIGMsZj10LGQ9ZSxwPXI7IWMmJmY+MDspZi0tLGQ9TWF0aC5mbG9vcihkLzIpLHA9TWF0aC5mbG9vcihwLzIpLGM9dGhpcy50aWxlc1thKGYsZCxwKV07aWYoIWN8fCFjLnNvdXJjZSlyZXR1cm4gbnVsbDtpZihvPjEmJmNvbnNvbGUubG9nKCJmb3VuZCBwYXJlbnQgdGlsZSB6JWQtJWQtJWQiLGYsZCxwKSx1KGMsaSxuLmJ1ZmZlcikpcmV0dXJuIGgudGlsZShjLGkpO28+MSYmY29uc29sZS50aW1lKCJkcmlsbGluZyBkb3duIik7dmFyIG09dGhpcy5zcGxpdFRpbGUoYy5zb3VyY2UsZixkLHAsdCxlLHIpO2lmKG8+MSYmY29uc29sZS50aW1lRW5kKCJkcmlsbGluZyBkb3duIiksbnVsbCE9PW0pe3ZhciB2PTE8PHQtbTtsPWEobSxNYXRoLmZsb29yKGUvdiksTWF0aC5mbG9vcihyL3YpKX1yZXR1cm4gdGhpcy50aWxlc1tsXT9oLnRpbGUodGhpcy50aWxlc1tsXSxpKTpudWxsfX0seyIuL2NsaXAiOjEzNywiLi9jb252ZXJ0IjoxMzgsIi4vdGlsZSI6MTQyLCIuL3RyYW5zZm9ybSI6MTQzLCIuL3dyYXAiOjE0NH1dLDE0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixhLG8scz1lKmUsbD10Lmxlbmd0aCx1PTAsYz1sLTEsaD1bXTtmb3IodFt1XVsyXT0xLHRbY11bMl09MTtjOyl7Zm9yKG49MCxyPXUrMTtyPGM7cisrKShhPWkodFtyXSx0W3VdLHRbY10pKT5uJiYobz1yLG49YSk7bj5zPyh0W29dWzJdPW4saC5wdXNoKHUpLGgucHVzaChvKSx1PW8pOihjPWgucG9wKCksdT1oLnBvcCgpKX19ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1yWzBdLG89clsxXSxzPXRbMF0sbD10WzFdLHU9YS1uLGM9by1pO2lmKDAhPT11fHwwIT09Yyl7dmFyIGg9KChzLW4pKnUrKGwtaSkqYykvKHUqdStjKmMpO2g+MT8obj1hLGk9byk6aD4wJiYobis9dSpoLGkrPWMqaCl9cmV0dXJuIHU9cy1uLGM9bC1pLHUqdStjKmN9ZS5leHBvcnRzPW59LHt9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGEsbyl7Zm9yKHZhciBzPXtmZWF0dXJlczpbXSxudW1Qb2ludHM6MCxudW1TaW1wbGlmaWVkOjAsbnVtRmVhdHVyZXM6MCxzb3VyY2U6bnVsbCx4OnIseTpuLHoyOmUsdHJhbnNmb3JtZWQ6ITEsbWluOlsyLDFdLG1heDpbLTEsMF19LGw9MDtsPHQubGVuZ3RoO2wrKyl7cy5udW1GZWF0dXJlcysrLGkocyx0W2xdLGEsbyk7dmFyIHU9dFtsXS5taW4sYz10W2xdLm1heDt1WzBdPHMubWluWzBdJiYocy5taW5bMF09dVswXSksdVsxXTxzLm1pblsxXSYmKHMubWluWzFdPXVbMV0pLGNbMF0+cy5tYXhbMF0mJihzLm1heFswXT1jWzBdKSxjWzFdPnMubWF4WzFdJiYocy5tYXhbMV09Y1sxXSl9cmV0dXJuIHN9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaSxvLHMsbCx1PWUuZ2VvbWV0cnksYz1lLnR5cGUsaD1bXSxmPXIqcjtpZigxPT09Yylmb3IoaT0wO2k8dS5sZW5ndGg7aSsrKWgucHVzaCh1W2ldKSx0Lm51bVBvaW50cysrLHQubnVtU2ltcGxpZmllZCsrO2Vsc2UgZm9yKGk9MDtpPHUubGVuZ3RoO2krKylpZihzPXVbaV0sbnx8ISgyPT09YyYmcy5kaXN0PHJ8fDM9PT1jJiZzLmFyZWE8Zikpe3ZhciBkPVtdO2ZvcihvPTA7bzxzLmxlbmd0aDtvKyspbD1zW29dLChufHxsWzJdPmYpJiYoZC5wdXNoKGwpLHQubnVtU2ltcGxpZmllZCsrKSx0Lm51bVBvaW50cysrOzM9PT1jJiZhKGQscy5vdXRlciksaC5wdXNoKGQpfWVsc2UgdC5udW1Qb2ludHMrPXMubGVuZ3RoO2lmKGgubGVuZ3RoKXt2YXIgcD17Z2VvbWV0cnk6aCx0eXBlOmMsdGFnczplLnRhZ3N8fG51bGx9O251bGwhPT1lLmlkJiYocC5pZD1lLmlkKSx0LmZlYXR1cmVzLnB1c2gocCl9fWZ1bmN0aW9uIGEodCxlKXtvKHQpPDA9PT1lJiZ0LnJldmVyc2UoKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZSxyLG49MCxpPTAsYT10Lmxlbmd0aCxvPWEtMTtpPGE7bz1pKyspZT10W2ldLHI9dFtvXSxuKz0oclswXS1lWzBdKSooZVsxXStyWzFdKTtyZXR1cm4gbn1lLmV4cG9ydHM9bn0se31dLDE0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYodC50cmFuc2Zvcm1lZClyZXR1cm4gdDt2YXIgcixuLGEsbz10LnoyLHM9dC54LGw9dC55O2ZvcihyPTA7cjx0LmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciB1PXQuZmVhdHVyZXNbcl0sYz11Lmdlb21ldHJ5O2lmKDE9PT11LnR5cGUpZm9yKG49MDtuPGMubGVuZ3RoO24rKyljW25dPWkoY1tuXSxlLG8scyxsKTtlbHNlIGZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBoPWNbbl07Zm9yKGE9MDthPGgubGVuZ3RoO2ErKyloW2FdPWkoaFthXSxlLG8scyxsKX19cmV0dXJuIHQudHJhbnNmb3JtZWQ9ITAsdH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7cmV0dXJuW01hdGgucm91bmQoZSoodFswXSpyLW4pKSxNYXRoLnJvdW5kKGUqKHRbMV0qci1pKSldfXIudGlsZT1uLHIucG9pbnQ9aX0se31dLDE0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj10LGE9byh0LDEsLTEtZSxlLDAsciwtMSwyKSxzPW8odCwxLDEtZSwyK2UsMCxyLC0xLDIpO3JldHVybihhfHxzKSYmKG49byh0LDEsLWUsMStlLDAsciwtMSwyKXx8W10sYSYmKG49aShhLDEpLmNvbmNhdChuKSkscyYmKG49bi5jb25jYXQoaShzLC0xKSkpKSxufWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaSxvPXRbbl0sbD1vLnR5cGU7aWYoMT09PWwpaT1hKG8uZ2VvbWV0cnksZSk7ZWxzZXtpPVtdO2Zvcih2YXIgdT0wO3U8by5nZW9tZXRyeS5sZW5ndGg7dSsrKWkucHVzaChhKG8uZ2VvbWV0cnlbdV0sZSkpfXIucHVzaChzKG8udGFncyxsLGksby5pZCkpfXJldHVybiByfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1bXTtyLmFyZWE9dC5hcmVhLHIuZGlzdD10LmRpc3Q7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKFt0W25dWzBdK2UsdFtuXVsxXSx0W25dWzJdXSk7cmV0dXJuIHJ9dmFyIG89dCgiLi9jbGlwIikscz10KCIuL2ZlYXR1cmUiKTtlLmV4cG9ydHM9bn0seyIuL2NsaXAiOjEzNywiLi9mZWF0dXJlIjoxMzl9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm11c3Qgc3BlY2lmeSB0eXBlIHN0cmluZyIpO2lmKGU9ZXx8e30sInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCYmIWUuY2FudmFzKXJldHVybiBudWxsO3ZhciByPWUuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsibnVtYmVyIj09dHlwZW9mIGUud2lkdGgmJihyLndpZHRoPWUud2lkdGgpLCJudW1iZXIiPT10eXBlb2YgZS5oZWlnaHQmJihyLmhlaWdodD1lLmhlaWdodCk7dmFyIG4saT1lO3RyeXt2YXIgYT1bdF07MD09PXQuaW5kZXhPZigid2ViZ2wiKSYmYS5wdXNoKCJleHBlcmltZW50YWwtIit0KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZihuPXIuZ2V0Q29udGV4dChhW29dLGkpKXJldHVybiBufWNhdGNoKHQpe249bnVsbH1yZXR1cm4gbnx8bnVsbH1lLmV4cG9ydHM9bn0se31dLDE0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tQYWQ9WzEwLDEwLDEwXSx0aGlzLmxhc3RDdWJlUHJvcHM9e2N1YmVFZGdlczpbMCwwLDBdLGF4aXM6WzAsMCwwXX0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9InNhbnMtc2VyaWYiLHRoaXMubGFiZWxTaXplPVsyMCwyMCwyMF0sdGhpcy5sYWJlbEFuZ2xlPVswLDAsMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5sYWJlbFBhZD1bMTAsMTAsMTBdLHRoaXMubGluZUVuYWJsZT1bITAsITAsITBdLHRoaXMubGluZU1pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVdpZHRoPVsxLDEsMV0sdGhpcy5saW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxpbmVUaWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lVGlja01pcnJvcj1bITEsITEsITFdLHRoaXMubGluZVRpY2tMZW5ndGg9WzAsMCwwXSx0aGlzLmxpbmVUaWNrV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVUaWNrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmdyaWRFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmdyaWRXaWR0aD1bMSwxLDFdLHRoaXMuZ3JpZENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvRW5hYmxlPVshMCwhMCwhMF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy56ZXJvTGluZVdpZHRoPVsyLDIsMl0sdGhpcy5iYWNrZ3JvdW5kRW5hYmxlPVshMSwhMSwhMV0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9W1suOCwuOCwuOCwuNV0sWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdXSx0aGlzLl9maXJzdEluaXQ9ITAsdGhpcy5fdGV4dD1udWxsLHRoaXMuX2xpbmVzPW51bGwsdGhpcy5fYmFja2dyb3VuZD1jKHQpfWZ1bmN0aW9uIGEoKXt0aGlzLnByaW1hbE9mZnNldD1bMCwwLDBdLHRoaXMucHJpbWFsTWlub3I9WzAsMCwwXSx0aGlzLm1pcnJvck9mZnNldD1bMCwwLDBdLHRoaXMubWlycm9yTWlub3I9WzAsMCwwXX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBhPXQucHJpbWFsT2Zmc2V0LG89dC5wcmltYWxNaW5vcixzPXQubWlycm9yT2Zmc2V0LGw9dC5taXJyb3JNaW5vcix1PW5bZV0sYz0wO2M8MzsrK2MpaWYoZSE9PWMpe3ZhciBoPWEsZj1zLGQ9byxwPWw7dSYxPDxjJiYoaD1zLGY9YSxkPWwscD1vKSxoW2NdPXJbMF1bY10sZltjXT1yWzFdW2NdLGlbY10+MD8oZFtjXT0tMSxwW2NdPTApOihkW2NdPTAscFtjXT0xKX19ZnVuY3Rpb24gcyh0LGUpe3ZhciByPW5ldyBpKHQpO3JldHVybiByLnVwZGF0ZShlKSxyfWUuZXhwb3J0cz1zO3ZhciBsPXQoIi4vbGliL3RleHQuanMiKSx1PXQoIi4vbGliL2xpbmVzLmpzIiksYz10KCIuL2xpYi9iYWNrZ3JvdW5kLmpzIiksaD10KCIuL2xpYi9jdWJlLmpzIiksZj10KCIuL2xpYi90aWNrcy5qcyIpLGQ9bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pLHA9aS5wcm90b3R5cGU7cC51cGRhdGU9ZnVuY3Rpb24odCl7CmZ1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGksYT10W25dLG89dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGFbMF0pOkFycmF5LmlzQXJyYXkoYSkpP3RoaXNbbl09aT1bcihhWzBdKSxyKGFbMV0pLHIoYVsyXSldOnRoaXNbbl09aT1bcihhKSxyKGEpLHIoYSldO2Zvcih2YXIgcz0wO3M8MzsrK3MpaWYoaVtzXSE9PW9bc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixuPWUuYmluZCh0aGlzLCExLE51bWJlciksaT1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxhPWUuYmluZCh0aGlzLCExLFN0cmluZyksbz1lLmJpbmQodGhpcywhMCxmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXtpZigzPT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLDFdO2lmKDQ9PT10Lmxlbmd0aClyZXR1cm5bK3RbMF0sK3RbMV0sK3RbMl0sK3RbM11dfXJldHVyblswLDAsMCwxXX0pLHM9ITEsYz0hMTtpZigiYm91bmRzImluIHQpZm9yKHZhciBoPXQuYm91bmRzLGQ9MDtkPDI7KytkKWZvcih2YXIgcD0wO3A8MzsrK3ApaFtkXVtwXSE9PXRoaXMuYm91bmRzW2RdW3BdJiYoYz0hMCksdGhpcy5ib3VuZHNbZF1bcF09aFtkXVtwXTtpZigidGlja3MiaW4gdCl7cj10LnRpY2tzLHM9ITAsdGhpcy5hdXRvVGlja3M9ITE7Zm9yKHZhciBkPTA7ZDwzOysrZCl0aGlzLnRpY2tTcGFjaW5nW2RdPTB9ZWxzZSBuKCJ0aWNrU3BhY2luZyIpJiYodGhpcy5hdXRvVGlja3M9ITAsYz0hMCk7aWYodGhpcy5fZmlyc3RJbml0JiYoInRpY2tzImluIHR8fCJ0aWNrU3BhY2luZyJpbiB0fHwodGhpcy5hdXRvVGlja3M9ITApLGM9ITAscz0hMCx0aGlzLl9maXJzdEluaXQ9ITEpLGMmJnRoaXMuYXV0b1RpY2tzJiYocj1mLmNyZWF0ZSh0aGlzLmJvdW5kcyx0aGlzLnRpY2tTcGFjaW5nKSxzPSEwKSxzKXtmb3IodmFyIGQ9MDtkPDM7KytkKXJbZF0uc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LngtZS54fSk7Zi5lcXVhbChyLHRoaXMudGlja3MpP3M9ITE6dGhpcy50aWNrcz1yfWkoInRpY2tFbmFibGUiKSxhKCJ0aWNrRm9udCIpJiYocz0hMCksbigidGlja1NpemUiKSxuKCJ0aWNrQW5nbGUiKSxuKCJ0aWNrUGFkIiksbygidGlja0NvbG9yIik7dmFyIG09YSgibGFiZWxzIik7YSgibGFiZWxGb250IikmJihtPSEwKSxpKCJsYWJlbEVuYWJsZSIpLG4oImxhYmVsU2l6ZSIpLG4oImxhYmVsUGFkIiksbygibGFiZWxDb2xvciIpLGkoImxpbmVFbmFibGUiKSxpKCJsaW5lTWlycm9yIiksbigibGluZVdpZHRoIiksbygibGluZUNvbG9yIiksaSgibGluZVRpY2tFbmFibGUiKSxpKCJsaW5lVGlja01pcnJvciIpLG4oImxpbmVUaWNrTGVuZ3RoIiksbigibGluZVRpY2tXaWR0aCIpLG8oImxpbmVUaWNrQ29sb3IiKSxpKCJncmlkRW5hYmxlIiksbigiZ3JpZFdpZHRoIiksbygiZ3JpZENvbG9yIiksaSgiemVyb0VuYWJsZSIpLG8oInplcm9MaW5lQ29sb3IiKSxuKCJ6ZXJvTGluZVdpZHRoIiksaSgiYmFja2dyb3VuZEVuYWJsZSIpLG8oImJhY2tncm91bmRDb2xvciIpLHRoaXMuX3RleHQ/dGhpcy5fdGV4dCYmKG18fHMpJiZ0aGlzLl90ZXh0LnVwZGF0ZSh0aGlzLmJvdW5kcyx0aGlzLmxhYmVscyx0aGlzLmxhYmVsRm9udCx0aGlzLnRpY2tzLHRoaXMudGlja0ZvbnQpOnRoaXMuX3RleHQ9bCh0aGlzLmdsLHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCksdGhpcy5fbGluZXMmJnMmJih0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCksdGhpcy5fbGluZXN8fCh0aGlzLl9saW5lcz11KHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy50aWNrcykpfTt2YXIgbT1bbmV3IGEsbmV3IGEsbmV3IGFdLHY9WzAsMCwwXSxnPXttb2RlbDpkLHZpZXc6ZCxwcm9qZWN0aW9uOmR9O3AuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0scC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuITF9LHAuZHJhd1RyYW5zcGFyZW50PWZ1bmN0aW9uKHQpe307dmFyIHk9WzAsMCwwXSxiPVswLDAsMF0seD1bMCwwLDBdO3AuZHJhdz1mdW5jdGlvbih0KXt0PXR8fGc7Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHxkLGk9dC52aWV3fHxkLGE9dC5wcm9qZWN0aW9ufHxkLHM9dGhpcy5ib3VuZHMsbD1oKHIsaSxhLHMpLHU9bC5jdWJlRWRnZXMsYz1sLmF4aXMsZj1pWzEyXSxwPWlbMTNdLF89aVsxNF0sdz1pWzE1XSxNPXRoaXMucGl4ZWxSYXRpbyooYVszXSpmK2FbN10qcCthWzExXSpfK2FbMTVdKncpL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxrPTA7azwzOysrayl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW2tdPXVba10sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNba109Y1trXTtmb3IodmFyIEE9bSxrPTA7azwzOysraylvKG1ba10sayx0aGlzLmJvdW5kcyx1LGMpO2Zvcih2YXIgZT10aGlzLmdsLFQ9dixrPTA7azwzOysrayl0aGlzLmJhY2tncm91bmRFbmFibGVba10/VFtrXT1jW2tdOlRba109MDt0aGlzLl9iYWNrZ3JvdW5kLmRyYXcocixpLGEscyxULHRoaXMuYmFja2dyb3VuZENvbG9yKSx0aGlzLl9saW5lcy5iaW5kKHIsaSxhLHRoaXMpO2Zvcih2YXIgaz0wO2s8MzsrK2spe3ZhciBTPVswLDAsMF07Y1trXT4wP1Nba109c1sxXVtrXTpTW2tdPXNbMF1ba107Zm9yKHZhciBFPTA7RTwyOysrRSl7dmFyIEw9KGsrMStFKSUzLEM9KGsrMSsoMV5FKSklMzt0aGlzLmdyaWRFbmFibGVbTF0mJnRoaXMuX2xpbmVzLmRyYXdHcmlkKEwsQyx0aGlzLmJvdW5kcyxTLHRoaXMuZ3JpZENvbG9yW0xdLHRoaXMuZ3JpZFdpZHRoW0xdKnRoaXMucGl4ZWxSYXRpbyl9Zm9yKHZhciBFPTA7RTwyOysrRSl7dmFyIEw9KGsrMStFKSUzLEM9KGsrMSsoMV5FKSklMzt0aGlzLnplcm9FbmFibGVbQ10mJnNbMF1bQ108PTAmJnNbMV1bQ10+PTAmJnRoaXMuX2xpbmVzLmRyYXdaZXJvKEwsQyx0aGlzLmJvdW5kcyxTLHRoaXMuemVyb0xpbmVDb2xvcltDXSx0aGlzLnplcm9MaW5lV2lkdGhbQ10qdGhpcy5waXhlbFJhdGlvKX19Zm9yKHZhciBrPTA7azwzOysrayl7dGhpcy5saW5lRW5hYmxlW2tdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc0xpbmUoayx0aGlzLmJvdW5kcyxBW2tdLnByaW1hbE9mZnNldCx0aGlzLmxpbmVDb2xvcltrXSx0aGlzLmxpbmVXaWR0aFtrXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZU1pcnJvcltrXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKGssdGhpcy5ib3VuZHMsQVtrXS5taXJyb3JPZmZzZXQsdGhpcy5saW5lQ29sb3Jba10sdGhpcy5saW5lV2lkdGhba10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIHo9bih5LEFba10ucHJpbWFsTWlub3IpLEk9bihiLEFba10ubWlycm9yTWlub3IpLEQ9dGhpcy5saW5lVGlja0xlbmd0aCxFPTA7RTwzOysrRSl7dmFyIFA9TS9yWzUqRV07eltFXSo9RFtFXSpQLElbRV0qPURbRV0qUH10aGlzLmxpbmVUaWNrRW5hYmxlW2tdJiZ0aGlzLl9saW5lcy5kcmF3QXhpc1RpY2tzKGssQVtrXS5wcmltYWxPZmZzZXQseix0aGlzLmxpbmVUaWNrQ29sb3Jba10sdGhpcy5saW5lVGlja1dpZHRoW2tdKnRoaXMucGl4ZWxSYXRpbyksdGhpcy5saW5lVGlja01pcnJvcltrXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhrLEFba10ubWlycm9yT2Zmc2V0LEksdGhpcy5saW5lVGlja0NvbG9yW2tdLHRoaXMubGluZVRpY2tXaWR0aFtrXSp0aGlzLnBpeGVsUmF0aW8pfXRoaXMuX3RleHQuYmluZChyLGksYSx0aGlzLnBpeGVsUmF0aW8pO2Zvcih2YXIgaz0wO2s8MzsrK2spe2Zvcih2YXIgTz1BW2tdLnByaW1hbE1pbm9yLFI9bih4LEFba10ucHJpbWFsT2Zmc2V0KSxFPTA7RTwzOysrRSl0aGlzLmxpbmVUaWNrRW5hYmxlW2tdJiYoUltFXSs9TSpPW0VdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbRV0sMCkvcls1KkVdKTtpZih0aGlzLnRpY2tFbmFibGVba10pe2Zvcih2YXIgRT0wO0U8MzsrK0UpUltFXSs9TSpPW0VdKnRoaXMudGlja1BhZFtFXS9yWzUqRV07dGhpcy5fdGV4dC5kcmF3VGlja3Moayx0aGlzLnRpY2tTaXplW2tdLHRoaXMudGlja0FuZ2xlW2tdLFIsdGhpcy50aWNrQ29sb3Jba10pfWlmKHRoaXMubGFiZWxFbmFibGVba10pe2Zvcih2YXIgRT0wO0U8MzsrK0UpUltFXSs9TSpPW0VdKnRoaXMubGFiZWxQYWRbRV0vcls1KkVdO1Jba10rPS41KihzWzBdW2tdK3NbMV1ba10pLHRoaXMuX3RleHQuZHJhd0xhYmVsKGssdGhpcy5sYWJlbFNpemVba10sdGhpcy5sYWJlbEFuZ2xlW2tdLFIsdGhpcy5sYWJlbENvbG9yW2tdKX19fSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6MTQ3LCIuL2xpYi9jdWJlLmpzIjoxNDgsIi4vbGliL2xpbmVzLmpzIjoxNDksIi4vbGliL3RleHQuanMiOjE1MSwiLi9saWIvdGlja3MuanMiOjE1Mn1dLDE0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLmJ1ZmZlcj1lLHRoaXMudmFvPXIsdGhpcy5zaGFkZXI9bn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1bXSxyPVtdLGk9MCxsPTA7bDwzOysrbClmb3IodmFyIHU9KGwrMSklMyxjPShsKzIpJTMsaD1bMCwwLDBdLGY9WzAsMCwwXSxkPS0xO2Q8PTE7ZCs9Mil7ci5wdXNoKGksaSsyLGkrMSxpKzEsaSsyLGkrMyksaFtsXT1kLGZbbF09ZDtmb3IodmFyIHA9LTE7cDw9MTtwKz0yKXtoW3VdPXA7Zm9yKHZhciBtPS0xO208PTE7bSs9MiloW2NdPW0sZS5wdXNoKGhbMF0saFsxXSxoWzJdLGZbMF0sZlsxXSxmWzJdKSxpKz0xfXZhciB2PXU7dT1jLGM9dn12YXIgZz1hKHQsbmV3IEZsb2F0MzJBcnJheShlKSkseT1hKHQsbmV3IFVpbnQxNkFycmF5KHIpLHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIpLGI9byh0LFt7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6MjR9LHtidWZmZXI6Zyx0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6MjR9XSx5KSx4PXModCk7cmV0dXJuIHguYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHguYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MSxuZXcgbih0LGcsYix4KX1lLmV4cG9ydHM9aTt2YXIgYT10KCJnbC1idWZmZXIiKSxvPXQoImdsLXZhbyIpLHM9dCgiLi9zaGFkZXJzIikuYmcsbD1uLnByb3RvdHlwZTtsLmRyYXc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0hMSxzPTA7czwzOysrcylvPW98fGlbc107aWYobyl7dmFyIGw9dGhpcy5nbDtsLmVuYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpLGwucG9seWdvbk9mZnNldCgxLDIpLHRoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcz17bW9kZWw6dCx2aWV3OmUscHJvamVjdGlvbjpyLGJvdW5kczpuLGVuYWJsZTppLGNvbG9yczphfSx0aGlzLnZhby5iaW5kKCksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUywzNiksbC5kaXNhYmxlKGwuUE9MWUdPTl9PRkZTRVRfRklMTCl9fSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxNTAsImdsLWJ1ZmZlciI6MTU0LCJnbC12YW8iOjI2OX1dLDE0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49MDtuPDQ7KytuKXt0W25dPXJbMTIrbl07Zm9yKHZhciBpPTA7aTwzOysraSl0W25dKz1lW2ldKnJbNCppK25dfX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wO2U8bS5sZW5ndGg7KytlKWlmKHQ9bC5wb3NpdGl2ZSh0LG1bZV0pLHQubGVuZ3RoPDMpcmV0dXJuIDA7Zm9yKHZhciByPXRbMF0sbj1yWzBdL3JbM10saT1yWzFdL3JbM10sYT0wLGU9MTtlKzE8dC5sZW5ndGg7KytlKXt2YXIgbz10W2VdLHM9dFtlKzFdLHU9b1swXS9vWzNdLGM9b1sxXS9vWzNdLGg9c1swXS9zWzNdLGY9c1sxXS9zWzNdLGQ9dS1uLHA9Yy1pLHY9aC1uLGc9Zi1pO2ErPU1hdGguYWJzKGQqZy1wKnYpfXJldHVybiBhfWZ1bmN0aW9uIGEodCxlLHIsYSl7cyhjLGUsdCkscyhjLHIsYyk7Zm9yKHZhciBsPTAsbT0wO208MjsrK20pe2RbMl09YVttXVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXtkWzFdPWFbYl1bMV07Zm9yKHZhciB4PTA7eDwyOysreClkWzBdPWFbeF1bMF0sbihoW2xdLGQsYyksbCs9MX19Zm9yKHZhciBfPS0xLG09MDttPDg7KyttKXtmb3IodmFyIHc9aFttXVszXSxNPTA7TTwzOysrTSlmW21dW01dPWhbbV1bTV0vdzt3PDAmJihfPDA/Xz1tOmZbbV1bMl08ZltfXVsyXSYmKF89bSkpfWlmKF88MCl7Xz0wO2Zvcih2YXIgaz0wO2s8MzsrK2spe2Zvcih2YXIgQT0oaysyKSUzLFQ9KGsrMSklMyxTPS0xLEU9LTEsTD0wO0w8MjsrK0wpe3ZhciBDPUw8PGssej1DKyhMPDxBKSsoMS1MPDxUKSxJPUMrKDEtTDw8QSkrKEw8PFQpO3UoZltDXSxmW3pdLGZbSV0scCk8MHx8KEw/Uz0xOkU9MSl9aWYoUzwwfHxFPDApRT5TJiYoX3w9MTw8ayk7ZWxzZXtmb3IodmFyIEw9MDtMPDI7KytMKXt2YXIgQz1MPDxrLHo9QysoTDw8QSkrKDEtTDw8VCksST1DKygxLUw8PEEpKyhMPDxUKSxEPWkoW2hbQ10saFt6XSxoW0ldLGhbQysoMTw8QSkrKDE8PFQpXV0pO0w/Uz1EOkU9RH1FPlMmJihffD0xPDxrKX19fWZvcih2YXIgUD03Xl8sTz0tMSxtPTA7bTw4OysrbSltIT09XyYmbSE9PVAmJihPPDA/Tz1tOmZbT11bMV0+ZlttXVsxXSYmKE89bSkpO2Zvcih2YXIgUj0tMSxtPTA7bTwzOysrbSl7dmFyIEY9T14xPDxtO2lmKEYhPT1fJiZGIT09UCl7UjwwJiYoUj1GKTt2YXIgVD1mW0ZdO1RbMF08ZltSXVswXSYmKFI9Ril9fWZvcih2YXIgaj0tMSxtPTA7bTwzOysrbSl7dmFyIEY9T14xPDxtO2lmKEYhPT1fJiZGIT09UCYmRiE9PVIpe2o8MCYmKGo9Rik7dmFyIFQ9ZltGXTtUWzBdPmZbal1bMF0mJihqPUYpfX12YXIgTj12O05bMF09TlsxXT1OWzJdPTAsTltvLmxvZzIoUl5PKV09TyZSLE5bby5sb2cyKE9eaildPU8majt2YXIgQj03Xmo7Qj09PV98fEI9PT1QPyhCPTdeUixOW28ubG9nMihqXkIpXT1CJmopOk5bby5sb2cyKFJeQildPUImUjtmb3IodmFyIFU9ZyxWPV8saz0wO2s8MzsrK2spVVtrXT1WJjE8PGs/LTE6MTtyZXR1cm4geX1lLmV4cG9ydHM9YTt2YXIgbz10KCJiaXQtdHdpZGRsZSIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9KHQoImdsLW1hdDQvaW52ZXJ0IiksdCgic3BsaXQtcG9seWdvbiIpKSx1PXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGM9bmV3IEFycmF5KDE2KSxoPShuZXcgQXJyYXkoMTYpLG5ldyBBcnJheSg4KSksZj1uZXcgQXJyYXkoOCksZD1uZXcgQXJyYXkoMykscD1bMCwwLDBdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ODsrK3QpaFt0XT1bMSwxLDEsMV0sZlt0XT1bMSwxLDFdfSgpO3ZhciBtPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV0sdj1bMSwxLDFdLGc9WzAsMCwwXSx5PXtjdWJlRWRnZXM6dixheGlzOmd9fSx7ImJpdC10d2lkZGxlIjo2NSwiZ2wtbWF0NC9pbnZlcnQiOjE3OSwiZ2wtbWF0NC9tdWx0aXBseSI6MTgxLCJyb2J1c3Qtb3JpZW50YXRpb24iOjUwNiwic3BsaXQtcG9seWdvbiI6NTI0fV0sMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gYSh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPVtdLGk9WzAsMCwwXSxvPVswLDAsMF0sYz1bMCwwLDBdLGg9WzAsMCwwXTtuLnB1c2goMCwwLDEsMCwxLDEsMCwwLC0xLDAsMCwtMSwwLDEsMSwwLDEsLTEpO2Zvcih2YXIgZj0wO2Y8MzsrK2Ype2Zvcih2YXIgZD1uLmxlbmd0aC8zfDAscD0wO3A8cltmXS5sZW5ndGg7KytwKXt2YXIgbT0rcltmXVtwXS54O24ucHVzaChtLDAsMSxtLDEsMSxtLDAsLTEsbSwwLC0xLG0sMSwxLG0sMSwtMSl9dmFyIHY9bi5sZW5ndGgvM3wwO2lbZl09ZCxvW2ZdPXYtZDtmb3IodmFyIGQ9bi5sZW5ndGgvM3wwLGc9MDtnPHJbZl0ubGVuZ3RoOysrZyl7dmFyIG09K3JbZl1bZ10ueDtuLnB1c2gobSwwLDEsbSwxLDEsbSwwLC0xLG0sMCwtMSxtLDEsMSxtLDEsLTEpfXZhciB2PW4ubGVuZ3RoLzN8MDtjW2ZdPWQsaFtmXT12LWR9dmFyIHk9cyh0LG5ldyBGbG9hdDMyQXJyYXkobikpLGI9bCh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSx4PXUodCk7cmV0dXJuIHguYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBhKHQseSxiLHgsbyxpLGgsYyl9ZS5leHBvcnRzPW87dmFyIHM9dCgiZ2wtYnVmZmVyIiksbD10KCJnbC12YW8iKSx1PXQoIi4vc2hhZGVycyIpLmxpbmUsYz1bMCwwLDBdLGg9WzAsMCwwXSxmPVswLDAsMF0sZD1bMCwwLDBdLHA9WzEsMV0sbT1hLnByb3RvdHlwZTttLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc2hhZGVyLmJpbmQoKSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tb2RlbD10LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnZpZXc9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5wcm9qZWN0aW9uPXIscFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxwWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5TaGFwZT1wLHRoaXMudmFvLmJpbmQoKX0sbS5kcmF3QXhpc0xpbmU9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1uKGgpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1oLHNbdF09ZVsxXVt0XS1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1zO3ZhciBsPWkoZCxyKTtsW3RdKz1lWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1sLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWE7dmFyIHU9bihmKTt1Wyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz11LHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNik7dmFyIHU9bihmKTt1Wyh0KzEpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz11LHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LG0uZHJhd0F4aXNUaWNrcz1mdW5jdGlvbih0LGUscixpLGEpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgbz1uKGMpO29bdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9byx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hO3ZhciBzPW4oZik7c1t0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fSxtLmRyYXdHcmlkPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtpZih0aGlzLmdyaWRDb3VudFt0XSl7dmFyIGw9bihoKTtsW2VdPXJbMV1bZV0tclswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5taW5vckF4aXM9bDt2YXIgdT1pKGQsYSk7dVtlXSs9clswXVtlXSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dTt2YXIgcD1uKGMpO3BbdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5tYWpvckF4aXM9cDt2YXIgbT1uKGYpO21bdF09MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW0sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPXMsdGhpcy5zaGFkZXIudW5pZm9ybXMuY29sb3I9byx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMuZ3JpZENvdW50W3RdLHRoaXMuZ3JpZE9mZnNldFt0XSl9fSxtLmRyYXdaZXJvPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD1uKGgpO3RoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1sLGxbdF09clsxXVt0XS1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1sO3ZhciB1PWkoZCxhKTt1W3RdKz1yWzBdW3RdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD11O3ZhciBjPW4oZik7Y1tlXT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9Yyx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9cyx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNil9LG0uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnZlcnRCdWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoxNTAsImdsLWJ1ZmZlciI6MTU0LCJnbC12YW8iOjI2OX1dLDE1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zaGFkZXIiKTtyLmxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCwiI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIiwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3IudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gbih0LCIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXM7XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBhbmdsZSwgcGl4ZWxTY2FsZTtcbnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uO1xuXG52b2lkIG1haW4oKSB7ICBcbiAgLy9Db21wdXRlIHBsYW5lIG9mZnNldFxuICB2ZWMyIHBsYW5lQ29vcmQgPSBwb3NpdGlvbi54eSAqIHBpeGVsU2NhbGU7XG4gIG1hdDIgcGxhbmVYZm9ybSA9IHNjYWxlICogbWF0Mihjb3MoYW5nbGUpLCBzaW4oYW5nbGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtc2luKGFuZ2xlKSwgY29zKGFuZ2xlKSk7XG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XG4gIFxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3UG9zaXRpb247XG4gIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzQodmlld09mZnNldCwgMCwgMCk7XG5cbiAgLy9Eb25lXG4gIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xufSIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsIiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoZG90KG5vcm1hbCwgZW5hYmxlKSA+IDAuMCkge1xuICAgIHZlYzMgblBvc2l0aW9uID0gbWl4KGJvdW5kc1swXSwgYm91bmRzWzFdLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cbiAgY29sb3JDaGFubmVsID0gYWJzKG5vcm1hbCk7XG59IiwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3JzWzNdO1xuXG52YXJ5aW5nIHZlYzMgY29sb3JDaGFubmVsO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yQ2hhbm5lbC54ICogY29sb3JzWzBdICsgXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC55ICogY29sb3JzWzFdICtcbiAgICAgICAgICAgICAgICAgY29sb3JDaGFubmVsLnogKiBjb2xvcnNbMl07XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibm9ybWFsIix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjoyNTN9XSwxNTE6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXI9cix0aGlzLnZhbz1uLHRoaXMudGlja09mZnNldD10aGlzLnRpY2tDb3VudD10aGlzLmxhYmVsT2Zmc2V0PXRoaXMubGFiZWxDb3VudD1udWxsfWZ1bmN0aW9uIGkodCxlKXt0cnl7cmV0dXJuIGwodCxlKX1jYXRjaCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJlcnJvciB2ZWN0b3JpemluZyB0ZXh0OiIsdCkse2NlbGxzOltdLHBvc2l0aW9uczpbXX19fWZ1bmN0aW9uIGEodCxlLHIsaSxhLGwpe3ZhciBjPW8odCksaD1zKHQsW3tidWZmZXI6YyxzaXplOjN9XSksZj11KHQpO2YuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wO3ZhciBkPW5ldyBuKHQsZixjLGgpO3JldHVybiBkLnVwZGF0ZShlLHIsaSxhLGwpLGR9ZS5leHBvcnRzPWE7dmFyIG89dCgiZ2wtYnVmZmVyIikscz10KCJnbC12YW8iKSxsPXQoInZlY3Rvcml6ZS10ZXh0IiksdT10KCIuL3NoYWRlcnMiKS50ZXh0LGM9d2luZG93fHxyLmdsb2JhbHx8e30saD1jLl9fVEVYVF9DQUNIRXx8e307Yy5fX1RFWFRfQ0FDSEU9e307dmFyIGY9bi5wcm90b3R5cGUsZD1bMCwwXTtmLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy52YW8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKTt2YXIgaT10aGlzLnNoYWRlci51bmlmb3JtcztpLm1vZGVsPXQsaS52aWV3PWUsaS5wcm9qZWN0aW9uPXIsaS5waXhlbFNjYWxlPW4sZFswXT10aGlzLmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxkWzFdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCx0aGlzLnNoYWRlci51bmlmb3Jtcy5yZXNvbHV0aW9uPWR9LGYudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4sYSl7ZnVuY3Rpb24gbyh0LGUscixuKXt2YXIgYT1oW3JdO2F8fChhPWhbcl09e30pO3ZhciBvPWFbZV07b3x8KG89YVtlXT1pKGUse3RyaWFuZ2xlczohMCxmb250OnIsdGV4dEFsaWduOiJjZW50ZXIiLHRleHRCYXNlbGluZToibWlkZGxlIn0pKTtmb3IodmFyIGw9KG58fDEyKS8xMix1PW8ucG9zaXRpb25zLGM9by5jZWxscyxmPTAsZD1jLmxlbmd0aDtmPGQ7KytmKWZvcih2YXIgcD1jW2ZdLG09MjttPj0wOy0tbSl7dmFyIHY9dVtwW21dXTtzLnB1c2gobCp2WzBdLC1sKnZbMV0sdCl9fWZvcih2YXIgcz0odGhpcy5nbCxbXSksbD1bMCwwLDBdLHU9WzAsMCwwXSxjPVswLDAsMF0sZj1bMCwwLDBdLGQ9MDtkPDM7KytkKXtjW2RdPXMubGVuZ3RoLzN8MCxvKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0sciksZltkXT0ocy5sZW5ndGgvM3wwKS1jW2RdLGxbZF09cy5sZW5ndGgvM3wwO2Zvcih2YXIgcD0wO3A8bltkXS5sZW5ndGg7KytwKW5bZF1bcF0udGV4dCYmbyhuW2RdW3BdLngsbltkXVtwXS50ZXh0LG5bZF1bcF0uZm9udHx8YSxuW2RdW3BdLmZvbnRTaXplfHwxMik7dVtkXT0ocy5sZW5ndGgvM3wwKS1sW2RdfXRoaXMuYnVmZmVyLnVwZGF0ZShzKSx0aGlzLnRpY2tPZmZzZXQ9bCx0aGlzLnRpY2tDb3VudD11LHRoaXMubGFiZWxPZmZzZXQ9Yyx0aGlzLmxhYmVsQ291bnQ9Zn07dmFyIHA9WzAsMCwwXTtmLmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHRoaXMudGlja0NvdW50W3RdKXt2YXIgYT1wO2FbMF09YVsxXT1hWzJdPTAsYVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSl9fTt2YXIgbT1bMCwwLDBdO2YuZHJhd0xhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy5sYWJlbENvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1tLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5sYWJlbENvdW50W3RdLHRoaXMubGFiZWxPZmZzZXRbdF0pKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlci5kaXNwb3NlKCl9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vc2hhZGVycyI6MTUwLF9wcm9jZXNzOjQ4NSwiZ2wtYnVmZmVyIjoxNTQsImdsLXZhbyI6MjY5LCJ2ZWN0b3JpemUtdGV4dCI6NTUyfV0sMTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10KyIiLG49ci5pbmRleE9mKCIuIiksaT0wO24+PTAmJihpPXIubGVuZ3RoLW4tMSk7dmFyIGE9TWF0aC5wb3coMTAsaSksbz1NYXRoLnJvdW5kKHQqZSphKSxzPW8rIiI7aWYocy5pbmRleE9mKCJlIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLHU9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksdT0wfC11KToobD0wfE1hdGguZmxvb3IobCksdXw9MCk7dmFyIGM9IiIrbDtpZihvPDAmJihjPSItIitjKSxpKXtmb3IodmFyIGg9IiIrdTtoLmxlbmd0aDxpOyloPSIwIitoO3JldHVybiBjKyIuIitofXJldHVybiBjfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9W10saT0wO2k8MzsrK2kpe2Zvcih2YXIgYT1bXSxvPSh0WzBdW2ldLHRbMV1baV0sMCk7byplW2ldPD10WzFdW2ldOysrbylhLnB1c2goe3g6byplW2ldLHRleHQ6bihlW2ldLG8pfSk7Zm9yKHZhciBvPS0xO28qZVtpXT49dFswXVtpXTstLW8pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO3IucHVzaChhKX1yZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoOysrbil7dmFyIGk9dFtyXVtuXSxhPWVbcl1bbl07aWYoaS54IT09YS54fHxpLnRleHQhPT1hLnRleHR8fGkuZm9udCE9PWEuZm9udHx8aS5mb250Q29sb3IhPT1hLmZvbnRDb2xvcnx8aS5mb250U2l6ZSE9PWEuZm9udFNpemV8fGkuZHghPT1hLmR4fHxpLmR5IT09YS5keSlyZXR1cm4hMX19cmV0dXJuITB9ci5jcmVhdGU9aSxyLmVxdWFsPWF9LHt9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5sbz10LHRoaXMuaGk9ZSx0aGlzLnBpeGVsc1BlckRhdGFVbml0PXJ9ZnVuY3Rpb24gaSh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1wLHM9bSxsPTA7bDwzOysrbClzW2xdPW9bbF09cltsXTtzWzNdPW9bM109MSxzW2FdKz0xLGgocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGgobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixjPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUrYypjKX1yZXR1cm4gdH1mdW5jdGlvbiBhKHQsZSxyLG4sYSl7dmFyIGg9ZS5tb2RlbHx8ZixwPWUudmlld3x8ZixtPWUucHJvamVjdGlvbnx8Zix5PXQuYm91bmRzLGE9YXx8bChoLHAsbSx5KSxiPWEuYXhpczthLmVkZ2VzO3UoZCxwLGgpLHUoZCxtLGQpO2Zvcih2YXIgeD12LF89MDtfPDM7KytfKXhbX10ubG89MS8wLHhbX10uaGk9LTEvMCx4W19dLnBpeGVsc1BlckRhdGFVbml0PTEvMDt2YXIgdz1vKGMoZCxkKSk7YyhkLGQpO2Zvcih2YXIgTT0wO008MzsrK00pe3ZhciBrPShNKzEpJTMsQT0oTSsyKSUzLFQ9Zzt0OmZvcih2YXIgXz0wO188MjsrK18pe3ZhciBTPVtdO2lmKGJbTV08MCE9ISFfKXtUW01dPXlbX11bTV07Zm9yKHZhciBFPTA7RTwyOysrRSl7VFtrXT15W0VeX11ba107Zm9yKHZhciBMPTA7TDwyOysrTClUW0FdPXlbTF5FXl9dW0FdLFMucHVzaChULnNsaWNlKCkpfWZvcih2YXIgRT0wO0U8dy5sZW5ndGg7KytFKXtpZigwPT09Uy5sZW5ndGgpY29udGludWUgdDtTPXMucG9zaXRpdmUoUyx3W0VdKX1mb3IodmFyIEU9MDtFPFMubGVuZ3RoOysrRSlmb3IodmFyIEE9U1tFXSxDPWkoZyxkLEEscixuKSxMPTA7TDwzOysrTCl4W0xdLmxvPU1hdGgubWluKHhbTF0ubG8sQVtMXSkseFtMXS5oaT1NYXRoLm1heCh4W0xdLmhpLEFbTF0pLEwhPT1NJiYoeFtMXS5waXhlbHNQZXJEYXRhVW5pdD1NYXRoLm1pbih4W0xdLnBpeGVsc1BlckRhdGFVbml0LE1hdGguYWJzKENbTF0pKSl9fX1yZXR1cm4geH1lLmV4cG9ydHM9YTt2YXIgbz10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIikscz10KCJzcGxpdC1wb2x5Z29uIiksbD10KCIuL2xpYi9jdWJlLmpzIiksdT10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGg9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksZj1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksZD1uZXcgRmxvYXQzMkFycmF5KDE2KSxwPVswLDAsMCwxXSxtPVswLDAsMCwxXSx2PVtuZXcgbigxLzAsLTEvMCwxLzApLG5ldyBuKDEvMCwtMS8wLDEvMCksbmV3IG4oMS8wLC0xLzAsMS8wKV0sZz1bMCwwLDBdfSx7Ii4vbGliL2N1YmUuanMiOjE0OCwiZXh0cmFjdC1mcnVzdHVtLXBsYW5lcyI6MTI4LCJnbC1tYXQ0L211bHRpcGx5IjoxODEsImdsLW1hdDQvdHJhbnNwb3NlIjoxODksImdsLXZlYzQvdHJhbnNmb3JtTWF0NCI6Mjc1LCJzcGxpdC1wb2x5Z29uIjo1MjR9XSwxNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IElmIHJlc2l6aW5nIGJ1ZmZlciwgbXVzdCBub3Qgc3BlY2lmeSBvZmZzZXQiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9bC5tYWxsb2ModC5sZW5ndGgsZSksbj10Lmxlbmd0aCxpPTA7aTxuOysraSlyW2ldPXRbaV07cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0xLG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7aWYoZVtuXSE9PXIpcmV0dXJuITE7cio9dFtuXX1yZXR1cm4hMH1mdW5jdGlvbiBzKHQsZSxyLGkpe2lmKHI9cnx8dC5BUlJBWV9CVUZGRVIsaT1pfHx0LkRZTkFNSUNfRFJBVyxyIT09dC5BUlJBWV9CVUZGRVImJnIhPT10LkVMRU1FTlRfQVJSQVlfQlVGRkVSKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSIik7aWYoaSE9PXQuRFlOQU1JQ19EUkFXJiZpIT09dC5TVEFUSUNfRFJBVyYmaSE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdXNhZ2UgZm9yIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuRFlOQU1JQ19EUkFXLCBnbC5TVEFUSUNfRFJBVyBvciBnbC5TVFJFQU1fRFJBVyIpO3ZhciBhPXQuY3JlYXRlQnVmZmVyKCksbz1uZXcgbih0LHIsYSwwLGkpO3JldHVybiBvLnVwZGF0ZShlKSxvfXZhciBsPXQoInR5cGVkYXJyYXktcG9vbCIpLHU9dCgibmRhcnJheS1vcHMiKSxjPXQoIm5kYXJyYXkiKSxoPVsidWludDgiLCJ1aW50OF9jbGFtcGVkIiwidWludDE2IiwidWludDMyIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJmbG9hdDMyIl0sZj1uLnByb3RvdHlwZTtmLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuaGFuZGxlKX0sZi51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmdsLmJpbmRCdWZmZXIodGhpcy50eXBlLG51bGwpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmhhbmRsZSl9LGYudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYoZT0tMSksdGhpcy5iaW5kKCksIm9iamVjdCI9PXR5cGVvZiB0JiZ2b2lkIDAhPT10LnNoYXBlKXt2YXIgcj10LmR0eXBlO2lmKGguaW5kZXhPZihyKTwwJiYocj0iZmxvYXQzMiIpLHRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVIpe3I9Z2wuZ2V0RXh0ZW5zaW9uKCJPRVNfZWxlbWVudF9pbmRleF91aW50IikmJiJ1aW50MTYiIT09cj8idWludDMyIjoidWludDE2In1pZihyPT09dC5kdHlwZSYmbyh0LnNoYXBlLHQuc3RyaWRlKSkwPT09dC5vZmZzZXQmJnQuZGF0YS5sZW5ndGg9PT10LnNoYXBlWzBdP3RoaXMubGVuZ3RoPWkodGhpcy5nbCx0aGlzLnR5cGUsdGhpcy5sZW5ndGgsdGhpcy51c2FnZSx0LmRhdGEsZSk6dGhpcy5sZW5ndGg9aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YS5zdWJhcnJheSh0Lm9mZnNldCx0LnNoYXBlWzBdKSxlKTtlbHNle3ZhciBuPWwubWFsbG9jKHQuc2l6ZSxyKSxzPWMobix0LnNoYXBlKTt1LmFzc2lnbihzLHQpLHRoaXMubGVuZ3RoPWU8MD9pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsbixlKTppKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2Usbi5zdWJhcnJheSgwLHQuc2l6ZSksZSksbC5mcmVlKG4pfX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBmO2Y9dGhpcy50eXBlPT09dGhpcy5nbC5FTEVNRU5UX0FSUkFZX0JVRkZFUj9hKHQsInVpbnQxNiIpOmEodCwiZmxvYXQzMiIpLHRoaXMubGVuZ3RoPWU8MD9pKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZixlKTppKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZi5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxsLmZyZWUoZil9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpdGhpcy5sZW5ndGg9aSh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQsZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgZGF0YSB0eXBlIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyIik7dHw9MCx0PD0wJiYodD0xKSx0aGlzLmdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLDB8dCx0aGlzLnVzYWdlKSx0aGlzLmxlbmd0aD10fX0sZS5leHBvcnRzPXN9LHtuZGFycmF5OjQ2NSwibmRhcnJheS1vcHMiOjQ1OSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ezA6Ik5PTkUiLDE6Ik9ORSIsMjoiTElORV9MT09QIiwzOiJMSU5FX1NUUklQIiw0OiJUUklBTkdMRVMiLDU6IlRSSUFOR0xFX1NUUklQIiw2OiJUUklBTkdMRV9GQU4iLDI1NjoiREVQVEhfQlVGRkVSX0JJVCIsNTEyOiJORVZFUiIsNTEzOiJMRVNTIiw1MTQ6IkVRVUFMIiw1MTU6IkxFUVVBTCIsNTE2OiJHUkVBVEVSIiw1MTc6Ik5PVEVRVUFMIiw1MTg6IkdFUVVBTCIsNTE5OiJBTFdBWVMiLDc2ODoiU1JDX0NPTE9SIiw3Njk6Ik9ORV9NSU5VU19TUkNfQ09MT1IiLDc3MDoiU1JDX0FMUEhBIiw3NzE6Ik9ORV9NSU5VU19TUkNfQUxQSEEiLDc3MjoiRFNUX0FMUEhBIiw3NzM6Ik9ORV9NSU5VU19EU1RfQUxQSEEiLDc3NDoiRFNUX0NPTE9SIiw3NzU6Ik9ORV9NSU5VU19EU1RfQ09MT1IiLDc3NjoiU1JDX0FMUEhBX1NBVFVSQVRFIiwxMDI0OiJTVEVOQ0lMX0JVRkZFUl9CSVQiLDEwMjg6IkZST05UIiwxMDI5OiJCQUNLIiwxMDMyOiJGUk9OVF9BTkRfQkFDSyIsMTI4MDoiSU5WQUxJRF9FTlVNIiwxMjgxOiJJTlZBTElEX1ZBTFVFIiwxMjgyOiJJTlZBTElEX09QRVJBVElPTiIsMTI4NToiT1VUX09GX01FTU9SWSIsMTI4NjoiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iLDIzMDQ6IkNXIiwyMzA1OiJDQ1ciLDI4NDk6IkxJTkVfV0lEVEgiLDI4ODQ6IkNVTExfRkFDRSIsMjg4NToiQ1VMTF9GQUNFX01PREUiLDI4ODY6IkZST05UX0ZBQ0UiLDI5Mjg6IkRFUFRIX1JBTkdFIiwyOTI5OiJERVBUSF9URVNUIiwyOTMwOiJERVBUSF9XUklURU1BU0siLDI5MzE6IkRFUFRIX0NMRUFSX1ZBTFVFIiwyOTMyOiJERVBUSF9GVU5DIiwyOTYwOiJTVEVOQ0lMX1RFU1QiLDI5NjE6IlNURU5DSUxfQ0xFQVJfVkFMVUUiLDI5NjI6IlNURU5DSUxfRlVOQyIsMjk2MzoiU1RFTkNJTF9WQUxVRV9NQVNLIiwyOTY0OiJTVEVOQ0lMX0ZBSUwiLDI5NjU6IlNURU5DSUxfUEFTU19ERVBUSF9GQUlMIiwyOTY2OiJTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyIsMjk2NzoiU1RFTkNJTF9SRUYiLDI5Njg6IlNURU5DSUxfV1JJVEVNQVNLIiwyOTc4OiJWSUVXUE9SVCIsMzAyNDoiRElUSEVSIiwzMDQyOiJCTEVORCIsMzA4ODoiU0NJU1NPUl9CT1giLDMwODk6IlNDSVNTT1JfVEVTVCIsMzEwNjoiQ09MT1JfQ0xFQVJfVkFMVUUiLDMxMDc6IkNPTE9SX1dSSVRFTUFTSyIsMzMxNzoiVU5QQUNLX0FMSUdOTUVOVCIsMzMzMzoiUEFDS19BTElHTk1FTlQiLDMzNzk6Ik1BWF9URVhUVVJFX1NJWkUiLDMzODY6Ik1BWF9WSUVXUE9SVF9ESU1TIiwzNDA4OiJTVUJQSVhFTF9CSVRTIiwzNDEwOiJSRURfQklUUyIsMzQxMToiR1JFRU5fQklUUyIsMzQxMjoiQkxVRV9CSVRTIiwzNDEzOiJBTFBIQV9CSVRTIiwzNDE0OiJERVBUSF9CSVRTIiwzNDE1OiJTVEVOQ0lMX0JJVFMiLDM1NTM6IlRFWFRVUkVfMkQiLDQzNTI6IkRPTlRfQ0FSRSIsNDM1MzoiRkFTVEVTVCIsNDM1NDoiTklDRVNUIiw1MTIwOiJCWVRFIiw1MTIxOiJVTlNJR05FRF9CWVRFIiw1MTIyOiJTSE9SVCIsNTEyMzoiVU5TSUdORURfU0hPUlQiLDUxMjQ6IklOVCIsNTEyNToiVU5TSUdORURfSU5UIiw1MTI2OiJGTE9BVCIsNTM4NjoiSU5WRVJUIiw1ODkwOiJURVhUVVJFIiw2NDAxOiJTVEVOQ0lMX0lOREVYIiw2NDAyOiJERVBUSF9DT01QT05FTlQiLDY0MDY6IkFMUEhBIiw2NDA3OiJSR0IiLDY0MDg6IlJHQkEiLDY0MDk6IkxVTUlOQU5DRSIsNjQxMDoiTFVNSU5BTkNFX0FMUEhBIiw3NjgwOiJLRUVQIiw3NjgxOiJSRVBMQUNFIiw3NjgyOiJJTkNSIiw3NjgzOiJERUNSIiw3OTM2OiJWRU5ET1IiLDc5Mzc6IlJFTkRFUkVSIiw3OTM4OiJWRVJTSU9OIiw5NzI4OiJORUFSRVNUIiw5NzI5OiJMSU5FQVIiLDk5ODQ6Ik5FQVJFU1RfTUlQTUFQX05FQVJFU1QiLDk5ODU6IkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsOTk4NjoiTkVBUkVTVF9NSVBNQVBfTElORUFSIiw5OTg3OiJMSU5FQVJfTUlQTUFQX0xJTkVBUiIsMTAyNDA6IlRFWFRVUkVfTUFHX0ZJTFRFUiIsMTAyNDE6IlRFWFRVUkVfTUlOX0ZJTFRFUiIsMTAyNDI6IlRFWFRVUkVfV1JBUF9TIiwxMDI0MzoiVEVYVFVSRV9XUkFQX1QiLDEwNDk3OiJSRVBFQVQiLDEwNzUyOiJQT0xZR09OX09GRlNFVF9VTklUUyIsMTYzODQ6IkNPTE9SX0JVRkZFUl9CSVQiLDMyNzY5OiJDT05TVEFOVF9DT0xPUiIsMzI3NzA6Ik9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiIsMzI3NzE6IkNPTlNUQU5UX0FMUEhBIiwzMjc3MjoiT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBIiwzMjc3MzoiQkxFTkRfQ09MT1IiLDMyNzc0OiJGVU5DX0FERCIsMzI3Nzc6IkJMRU5EX0VRVUFUSU9OX1JHQiIsMzI3Nzg6IkZVTkNfU1VCVFJBQ1QiLDMyNzc5OiJGVU5DX1JFVkVSU0VfU1VCVFJBQ1QiLDMyODE5OiJVTlNJR05FRF9TSE9SVF80XzRfNF80IiwzMjgyMDoiVU5TSUdORURfU0hPUlRfNV81XzVfMSIsMzI4MjM6IlBPTFlHT05fT0ZGU0VUX0ZJTEwiLDMyODI0OiJQT0xZR09OX09GRlNFVF9GQUNUT1IiLDMyODU0OiJSR0JBNCIsMzI4NTU6IlJHQjVfQTEiLDMyODczOiJURVhUVVJFX0JJTkRJTkdfMkQiLDMyOTI2OiJTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UiLDMyOTI4OiJTQU1QTEVfQ09WRVJBR0UiLDMyOTM2OiJTQU1QTEVfQlVGRkVSUyIsMzI5Mzc6IlNBTVBMRVMiLDMyOTM4OiJTQU1QTEVfQ09WRVJBR0VfVkFMVUUiLDMyOTM5OiJTQU1QTEVfQ09WRVJBR0VfSU5WRVJUIiwzMjk2ODoiQkxFTkRfRFNUX1JHQiIsMzI5Njk6IkJMRU5EX1NSQ19SR0IiLDMyOTcwOiJCTEVORF9EU1RfQUxQSEEiLDMyOTcxOiJCTEVORF9TUkNfQUxQSEEiLDMzMDcxOiJDTEFNUF9UT19FREdFIiwzMzE3MDoiR0VORVJBVEVfTUlQTUFQX0hJTlQiLDMzMTg5OiJERVBUSF9DT01QT05FTlQxNiIsMzMzMDY6IkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCIsMzM2MzU6IlVOU0lHTkVEX1NIT1JUXzVfNl81IiwzMzY0ODoiTUlSUk9SRURfUkVQRUFUIiwzMzkwMToiQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFIiwzMzkwMjoiQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFIiwzMzk4NDoiVEVYVFVSRTAiLDMzOTg1OiJURVhUVVJFMSIsMzM5ODY6IlRFWFRVUkUyIiwzMzk4NzoiVEVYVFVSRTMiLDMzOTg4OiJURVhUVVJFNCIsMzM5ODk6IlRFWFRVUkU1IiwzMzk5MDoiVEVYVFVSRTYiLDMzOTkxOiJURVhUVVJFNyIsMzM5OTI6IlRFWFRVUkU4IiwzMzk5MzoiVEVYVFVSRTkiLDMzOTk0OiJURVhUVVJFMTAiLDMzOTk1OiJURVhUVVJFMTEiLDMzOTk2OiJURVhUVVJFMTIiLDMzOTk3OiJURVhUVVJFMTMiLDMzOTk4OiJURVhUVVJFMTQiLDMzOTk5OiJURVhUVVJFMTUiLDM0ZTM6IlRFWFRVUkUxNiIsMzQwMDE6IlRFWFRVUkUxNyIsMzQwMDI6IlRFWFRVUkUxOCIsMzQwMDM6IlRFWFRVUkUxOSIsMzQwMDQ6IlRFWFRVUkUyMCIsMzQwMDU6IlRFWFRVUkUyMSIsMzQwMDY6IlRFWFRVUkUyMiIsMzQwMDc6IlRFWFRVUkUyMyIsMzQwMDg6IlRFWFRVUkUyNCIsMzQwMDk6IlRFWFRVUkUyNSIsMzQwMTA6IlRFWFRVUkUyNiIsMzQwMTE6IlRFWFRVUkUyNyIsMzQwMTI6IlRFWFRVUkUyOCIsMzQwMTM6IlRFWFRVUkUyOSIsMzQwMTQ6IlRFWFRVUkUzMCIsMzQwMTU6IlRFWFRVUkUzMSIsMzQwMTY6IkFDVElWRV9URVhUVVJFIiwzNDAyNDoiTUFYX1JFTkRFUkJVRkZFUl9TSVpFIiwzNDA0MToiREVQVEhfU1RFTkNJTCIsMzQwNTU6IklOQ1JfV1JBUCIsMzQwNTY6IkRFQ1JfV1JBUCIsMzQwNjc6IlRFWFRVUkVfQ1VCRV9NQVAiLDM0MDY4OiJURVhUVVJFX0JJTkRJTkdfQ1VCRV9NQVAiLDM0MDY5OiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1giLDM0MDcwOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1giLDM0MDcxOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kiLDM0MDcyOiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kiLDM0MDczOiJURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1oiLDM0MDc0OiJURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1oiLDM0MDc2OiJNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFIiwzNDMzODoiVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEIiwzNDMzOToiVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFIiwzNDM0MDoiVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUiLDM0MzQxOiJWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUiLDM0MzQyOiJDVVJSRU5UX1ZFUlRFWF9BVFRSSUIiLDM0MzczOiJWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIiLDM0NDY2OiJOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NDY3OiJDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyIsMzQ2NjA6IkJVRkZFUl9TSVpFIiwzNDY2MToiQlVGRkVSX1VTQUdFIiwzNDgxNjoiU1RFTkNJTF9CQUNLX0ZVTkMiLDM0ODE3OiJTVEVOQ0lMX0JBQ0tfRkFJTCIsMzQ4MTg6IlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwiLDM0ODE5OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTIiwzNDg3NzoiQkxFTkRfRVFVQVRJT05fQUxQSEEiLDM0OTIxOiJNQVhfVkVSVEVYX0FUVFJJQlMiLDM0OTIyOiJWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQiLDM0OTMwOiJNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzQ5NjI6IkFSUkFZX0JVRkZFUiIsMzQ5NjM6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIiwzNDk2NDoiQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM0OTY1OiJFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk3NToiVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyIsMzUwNDA6IlNUUkVBTV9EUkFXIiwzNTA0NDoiU1RBVElDX0RSQVciLDM1MDQ4OiJEWU5BTUlDX0RSQVciLDM1NjMyOiJGUkFHTUVOVF9TSEFERVIiLDM1NjMzOiJWRVJURVhfU0hBREVSIiwzNTY2MDoiTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MToiTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM1NjYzOiJTSEFERVJfVFlQRSIsMzU2NjQ6IkZMT0FUX1ZFQzIiLDM1NjY1OiJGTE9BVF9WRUMzIiwzNTY2NjoiRkxPQVRfVkVDNCIsMzU2Njc6IklOVF9WRUMyIiwzNTY2ODoiSU5UX1ZFQzMiLDM1NjY5OiJJTlRfVkVDNCIsMzU2NzA6IkJPT0wiLDM1NjcxOiJCT09MX1ZFQzIiLDM1NjcyOiJCT09MX1ZFQzMiLDM1NjczOiJCT09MX1ZFQzQiLDM1Njc0OiJGTE9BVF9NQVQyIiwzNTY3NToiRkxPQVRfTUFUMyIsMzU2NzY6IkZMT0FUX01BVDQiLDM1Njc4OiJTQU1QTEVSXzJEIiwzNTY4MDoiU0FNUExFUl9DVUJFIiwzNTcxMjoiREVMRVRFX1NUQVRVUyIsMzU3MTM6IkNPTVBJTEVfU1RBVFVTIiwzNTcxNDoiTElOS19TVEFUVVMiLDM1NzE1OiJWQUxJREFURV9TVEFUVVMiLDM1NzE2OiJJTkZPX0xPR19MRU5HVEgiLDM1NzE3OiJBVFRBQ0hFRF9TSEFERVJTIiwzNTcxODoiQUNUSVZFX1VOSUZPUk1TIiwzNTcxOToiQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCIsMzU3MjA6IlNIQURFUl9TT1VSQ0VfTEVOR1RIIiwzNTcyMToiQUNUSVZFX0FUVFJJQlVURVMiLDM1NzIyOiJBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgiLDM1NzI0OiJTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04iLDM1NzI1OiJDVVJSRU5UX1BST0dSQU0iLDM2MDAzOiJTVEVOQ0lMX0JBQ0tfUkVGIiwzNjAwNDoiU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0siLDM2MDA1OiJTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLIiwzNjAwNjoiRlJBTUVCVUZGRVJfQklORElORyIsMzYwMDc6IlJFTkRFUkJVRkZFUl9CSU5ESU5HIiwzNjA0ODoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSIsMzYwNDk6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUiLDM2MDUwOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwiLDM2MDUxOiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSIsMzYwNTM6IkZSQU1FQlVGRkVSX0NPTVBMRVRFIiwzNjA1NDoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UIiwzNjA1NToiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQiLDM2MDU3OiJGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMiLDM2MDYxOiJGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCIsMzYwNjQ6IkNPTE9SX0FUVEFDSE1FTlQwIiwzNjA5NjoiREVQVEhfQVRUQUNITUVOVCIsMzYxMjg6IlNURU5DSUxfQVRUQUNITUVOVCIsMzYxNjA6IkZSQU1FQlVGRkVSIiwzNjE2MToiUkVOREVSQlVGRkVSIiwzNjE2MjoiUkVOREVSQlVGRkVSX1dJRFRIIiwzNjE2MzoiUkVOREVSQlVGRkVSX0hFSUdIVCIsMzYxNjQ6IlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQiLDM2MTY4OiJTVEVOQ0lMX0lOREVYOCIsMzYxNzY6IlJFTkRFUkJVRkZFUl9SRURfU0laRSIsMzYxNzc6IlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFIiwzNjE3ODoiUkVOREVSQlVGRkVSX0JMVUVfU0laRSIsMzYxNzk6IlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFIiwzNjE4MDoiUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUiLDM2MTgxOiJSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFIiwzNjE5NDoiUkdCNTY1IiwzNjMzNjoiTE9XX0ZMT0FUIiwzNjMzNzoiTUVESVVNX0ZMT0FUIiwzNjMzODoiSElHSF9GTE9BVCIsMzYzMzk6IkxPV19JTlQiLDM2MzQwOiJNRURJVU1fSU5UIiwzNjM0MToiSElHSF9JTlQiLDM2MzQ2OiJTSEFERVJfQ09NUElMRVIiLDM2MzQ3OiJNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyIsMzYzNDg6Ik1BWF9WQVJZSU5HX1ZFQ1RPUlMiLDM2MzQ5OiJNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTIiwzNzQ0MDoiVU5QQUNLX0ZMSVBfWV9XRUJHTCIsMzc0NDE6IlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCIsMzc0NDI6IkNPTlRFWFRfTE9TVF9XRUJHTCIsMzc0NDM6IlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiLDM3NDQ0OiJCUk9XU0VSX0RFRkFVTFRfV0VCR0wifX0se31dLDE1NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vMS4wL251bWJlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19fSx7Ii4vMS4wL251bWJlcnMiOjE1NX1dLDE1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMuc2hhZGVyPWUsdGhpcy5idWZmZXJIaT1yLHRoaXMuYnVmZmVyTG89bix0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMubnVtUG9pbnRzPTAsdGhpcy5jb2xvcj1bMCwwLDAsMV19ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWEodC5nbCxsLnZlcnRleCxsLmZyYWdtZW50KSxpPW8odC5nbCkscz1vKHQuZ2wpLHU9bmV3IG4odCxyLGkscyk7cmV0dXJuIHUudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHUpLHV9dmFyIGE9dCgiZ2wtc2hhZGVyIiksbz10KCJnbC1idWZmZXIiKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cz1pO3ZhciB1PVtbMSwwLDAsMSwwLDBdLFsxLDAsMCwtMSwwLDBdLFstMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwxLDAsMF0sWzEsMCwwLDEsMCwwXSxbMSwwLC0xLDAsMCwxXSxbMSwwLC0xLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwtMV0sWzEsMCwxLDAsMCwxXSxbMSwwLC0xLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLC0xXSxbLTEsMCwxLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLDFdLFstMSwwLC0xLDAsMCwxXSxbMCwxLDEsMCwwLDBdLFswLDEsLTEsMCwwLDBdLFswLC0xLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsMSwxLDAsMCwwXSxbMCwtMSwxLDAsMCwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsLTEsLTEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsMSwwLDEsMSwwXSxbMCwxLDAsLTEsMSwwXSxbMCwxLDAsMSwtMSwwXSxbMCwtMSwwLC0xLDEsMF0sWzAsLTEsMCwtMSwtMSwwXSxbMCwtMSwwLDEsLTEsMF0sWzAsLTEsMCwxLDEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsMSwtMSwwXV0sYz1uLnByb3RvdHlwZTtjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxlPW5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLHI9bmV3IEZsb2F0MzJBcnJheShbMCwwXSksbj1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxpPVsxLDFdO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMucGxvdCxvPXRoaXMuc2hhZGVyLHM9dGhpcy5ib3VuZHMsbD10aGlzLm51bVBvaW50cztpZihsKXt2YXIgYz1hLmdsLGg9YS5kYXRhQm94LGY9YS52aWV3Qm94LGQ9YS5waXhlbFJhdGlvLHA9c1syXS1zWzBdLG09c1szXS1zWzFdLHY9aFsyXS1oWzBdLGc9aFszXS1oWzFdLHk9MipwL3YsYj0yKm0vZyx4PShzWzBdLWhbMF0tLjUqdikvcCxfPShzWzFdLWhbMV0tLjUqZykvbTt0WzBdPXksdFsxXT1iLGVbMF09eS10WzBdLGVbMV09Yi10WzFdLHJbMF09eCxyWzFdPV8sblswXT14LXJbMF0sblsxXT1fLXJbMV07dmFyIHc9ZlsyXS1mWzBdLE09ZlszXS1mWzFdO2lbMF09MipkL3csaVsxXT0yKmQvTSxvLmJpbmQoKSxvLnVuaWZvcm1zLnNjYWxlSGk9dCxvLnVuaWZvcm1zLnNjYWxlTG89ZSxvLnVuaWZvcm1zLnRyYW5zbGF0ZUhpPXIsby51bmlmb3Jtcy50cmFuc2xhdGVMbz1uLG8udW5pZm9ybXMucGl4ZWxTY2FsZT1pLG8udW5pZm9ybXMuY29sb3I9dGhpcy5jb2xvcix0aGlzLmJ1ZmZlckxvLmJpbmQoKSxvLmF0dHJpYnV0ZXMucG9zaXRpb25Mby5wb2ludGVyKGMuRkxPQVQsITEsMTYsMCksdGhpcy5idWZmZXJIaS5iaW5kKCksby5hdHRyaWJ1dGVzLnBvc2l0aW9uSGkucG9pbnRlcihjLkZMT0FULCExLDE2LDApLG8uYXR0cmlidXRlcy5waXhlbE9mZnNldC5wb2ludGVyKGMuRkxPQVQsITEsMTYsOCksYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVTLDAsbCp1Lmxlbmd0aCl9fX0oKSxjLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxjLnBpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sYy51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZSxyLG4saT10LnBvc2l0aW9uc3x8W10sYT10LmVycm9yc3x8W10sbz0xOyJsaW5lV2lkdGgiaW4gdCYmKG89K3QubGluZVdpZHRoKTt2YXIgbD01OyJjYXBTaXplImluIHQmJihsPSt0LmNhcFNpemUpLHRoaXMuY29sb3I9KHQuY29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKTt2YXIgYz10aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLGg9dGhpcy5udW1Qb2ludHM9aS5sZW5ndGg+PjE7Zm9yKGU9MDtlPGg7KytlKXI9aVsyKmVdLG49aVsyKmUrMV0sY1swXT1NYXRoLm1pbihyLGNbMF0pLGNbMV09TWF0aC5taW4obixjWzFdKSxjWzJdPU1hdGgubWF4KHIsY1syXSksY1szXT1NYXRoLm1heChuLGNbM10pO2NbMl09PT1jWzBdJiYoY1syXSs9MSksY1szXT09PWNbMV0mJihjWzNdKz0xKTt2YXIgZj0xLyhjWzJdLWNbMF0pLGQ9MS8oY1szXS1jWzFdKSxwPWNbMF0sbT1jWzFdLHY9cy5tYWxsb2NGbG9hdDY0KGgqdS5sZW5ndGgqNCksZz1zLm1hbGxvY0Zsb2F0MzIoaCp1Lmxlbmd0aCo0KSx5PXMubWFsbG9jRmxvYXQzMihoKnUubGVuZ3RoKjQpLGI9MDtmb3IoZT0wO2U8aDsrK2Upe3I9aVsyKmVdLG49aVsyKmUrMV07Zm9yKHZhciB4PWFbNCplXSxfPWFbNCplKzFdLHc9YVs0KmUrMl0sTT1hWzQqZSszXSxrPTA7azx1Lmxlbmd0aDsrK2spe3ZhciBBPXVba10sVD1BWzBdLFM9QVsxXTtUPDA/VCo9eDpUPjAmJihUKj1fKSxTPDA/Uyo9dzpTPjAmJihTKj1NKSx2W2IrK109Ziooci1wK1QpLHZbYisrXT1kKihuLW0rUyksdltiKytdPW8qQVsyXSsobCtvKSpBWzRdLHZbYisrXT1vKkFbM10rKGwrbykqQVs1XX19Zm9yKGU9MDtlPHYubGVuZ3RoO2UrKylnW2VdPXZbZV0seVtlXT12W2VdLWdbZV07dGhpcy5idWZmZXJIaS51cGRhdGUoZyksdGhpcy5idWZmZXJMby51cGRhdGUoeSkscy5mcmVlKHYpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlckhpLmRpc3Bvc2UoKSx0aGlzLmJ1ZmZlckxvLmRpc3Bvc2UoKX19LHsiLi9saWIvc2hhZGVycyI6MTU4LCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyNTMsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMTU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXt2ZXJ0ZXg6InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGk7XG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbkxvO1xuYXR0cmlidXRlIHZlYzIgcGl4ZWxPZmZzZXQ7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG8sIHBpeGVsU2NhbGU7XG5cbnZlYzIgcHJvamVjdCh2ZWMyIHNjSGksIHZlYzIgdHJIaSwgdmVjMiBzY0xvLCB2ZWMyIHRyTG8sIHZlYzIgcG9zSGksIHZlYzIgcG9zTG8pIHtcbiAgcmV0dXJuIChwb3NIaSArIHRySGkpICogc2NIaVxuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgKyAocG9zSGkgKyB0ckhpKSAqIHNjTG9cbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMbztcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHNjclBvc2l0aW9uID0gdmVjMyhcbiAgICAgICAgIHByb2plY3Qoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBwb3NpdGlvbkhpLCBwb3NpdGlvbkxvKSxcbiAgICAgICAgIDEpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoXG4gICAgc2NyUG9zaXRpb24ueHkgKyBzY3JQb3NpdGlvbi56ICogcGl4ZWxTY2FsZSAqIHBpeGVsT2Zmc2V0LFxuICAgIDAsXG4gICAgc2NyUG9zaXRpb24ueik7XG59XG4iLApmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBjb2xvci5hLCBjb2xvci5hKTtcbn1cbiJ9fSx7fV0sMTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTF9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3IpdFswXVtyXT1NYXRoLm1pbih0WzBdW3JdLGVbcl0pLHRbMV1bcl09TWF0aC5tYXgodFsxXVtyXSxlW3JdKX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Zvcih2YXIgaT1mW25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5nbCxyPXMoZSksaT1sKGUsW3tidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjQsb2Zmc2V0OjEyLHN0cmlkZTo0MH0se2J1ZmZlcjpyLHR5cGU6ZS5GTE9BVCxzaXplOjMsb2Zmc2V0OjI4LHN0cmlkZTo0MH1dKSxhPXUoZSk7YS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsYS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsYS5hdHRyaWJ1dGVzLm9mZnNldC5sb2NhdGlvbj0yO3ZhciBvPW5ldyBuKGUscixpLGEpO3JldHVybiBvLnVwZGF0ZSh0KSxvfWUuZXhwb3J0cz1vO3ZhciBzPXQoImdsLWJ1ZmZlciIpLGw9dCgiZ2wtdmFvIiksdT10KCIuL3NoYWRlcnMvaW5kZXgiKSxjPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxoPW4ucHJvdG90eXBlO2guaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSxoLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LGguZHJhd1RyYW5zcGFyZW50PWguZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fGMsaT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxjO3IubW9kZWw9dC5tb2RlbHx8YyxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0sbz1uWzEzXSxzPW5bMTRdLGw9blsxNV0sdT10aGlzLnBpeGVsUmF0aW8qKGlbM10qYStpWzddKm8raVsxMV0qcytpWzE1XSpsKS9lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7dGhpcy52YW8uYmluZCgpO2Zvcih2YXIgaD0wO2g8MzsrK2gpZS5saW5lV2lkdGgodGhpcy5saW5lV2lkdGhbaF0pLHIuY2FwU2l6ZT10aGlzLmNhcFNpemVbaF0qdSx0aGlzLmxpbmVDb3VudFtoXSYmZS5kcmF3QXJyYXlzKGUuTElORVMsdGhpcy5saW5lT2Zmc2V0W2hdLHRoaXMubGluZUNvdW50W2hdKTt0aGlzLnZhby51bmJpbmQoKX07dmFyIGY9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IEFycmF5KDMpLGU9MDtlPDM7KytlKXtmb3IodmFyIHI9W10sbj0xO248PTI7KytuKWZvcih2YXIgaT0tMTtpPD0xO2krPTIpe3ZhciBhPShuK2UpJTMsbz1bMCwwLDBdO29bYV09aSxyLnB1c2gobyl9dFtlXT1yfXJldHVybiB0fSgpO2gudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgsQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVXaWR0aCl8fCh0aGlzLmxpbmVXaWR0aD1bdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGgsdGhpcy5saW5lV2lkdGhdKSksImNhcFNpemUiaW4gdCYmKHRoaXMuY2FwU2l6ZT10LmNhcFNpemUsQXJyYXkuaXNBcnJheSh0aGlzLmNhcFNpemUpfHwodGhpcy5jYXBTaXplPVt0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplLHRoaXMuY2FwU2l6ZV0pKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSk7dmFyIGU9dC5jb2xvcnx8W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxyPXQucG9zaXRpb24sbj10LmVycm9yO2lmKEFycmF5LmlzQXJyYXkoZVswXSl8fChlPVtlLGUsZV0pLHImJm4pe3ZhciBvPVtdLHM9ci5sZW5ndGgsbD0wO3RoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMubGluZUNvdW50PVswLDAsMF07Zm9yKHZhciB1PTA7dTwzOysrdSl7dGhpcy5saW5lT2Zmc2V0W3VdPWw7dDpmb3IodmFyIGM9MDtjPHM7KytjKXtmb3IodmFyIGg9cltjXSxmPTA7ZjwzOysrZilpZihpc05hTihoW2ZdKXx8IWlzRmluaXRlKGhbZl0pKWNvbnRpbnVlIHQ7dmFyIGQ9bltjXSxwPWVbdV07aWYoQXJyYXkuaXNBcnJheShwWzBdKSYmKHA9ZVtjXSksMz09PXAubGVuZ3RoJiYocD1bcFswXSxwWzFdLHBbMl0sMV0pLCFpc05hTihkWzBdW3VdKSYmIWlzTmFOKGRbMV1bdV0pKXtpZihkWzBdW3VdPDApe3ZhciBtPWguc2xpY2UoKTttW3VdKz1kWzBdW3VdLG8ucHVzaChoWzBdLGhbMV0saFsyXSxwWzBdLHBbMV0scFsyXSxwWzNdLDAsMCwwLG1bMF0sbVsxXSxtWzJdLHBbMF0scFsxXSxwWzJdLHBbM10sMCwwLDApLGkodGhpcy5ib3VuZHMsbSksbCs9MithKG8sbSxwLHUpfWlmKGRbMV1bdV0+MCl7dmFyIG09aC5zbGljZSgpO21bdV0rPWRbMV1bdV0sby5wdXNoKGhbMF0saFsxXSxoWzJdLHBbMF0scFsxXSxwWzJdLHBbM10sMCwwLDAsbVswXSxtWzFdLG1bMl0scFswXSxwWzFdLHBbMl0scFszXSwwLDAsMCksaSh0aGlzLmJvdW5kcyxtKSxsKz0yK2EobyxtLHAsdSl9fX10aGlzLmxpbmVDb3VudFt1XT1sLXRoaXMubGluZU9mZnNldFt1XX10aGlzLmJ1ZmZlci51cGRhdGUobyl9fSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjoxNjEsImdsLWJ1ZmZlciI6MTU0LCJnbC12YW8iOjI2OX1dLDE2MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSwxNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgb2Zmc2V0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IGNhcFNpemU7XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIGZyYWdQb3NpdGlvbjtcblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICB3b3JsZFBvc2l0aW9uICAgICAgID0gKHdvcmxkUG9zaXRpb24gLyB3b3JsZFBvc2l0aW9uLncpICsgdmVjNChjYXBTaXplICogb2Zmc2V0LCAwLjApO1xuICBnbF9Qb3NpdGlvbiAgICAgICAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBmcmFnQ29sb3IgICAgICAgICAgID0gY29sb3I7XG4gIGZyYWdQb3NpdGlvbiAgICAgICAgPSBwb3NpdGlvbjtcbn0iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgZnJhZ1Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4oZnJhZ1Bvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKGZyYWdQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBvcGFjaXR5ICogZnJhZ0NvbG9yO1xufSJdKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLG8sbnVsbCxbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6Im9mZnNldCIsdHlwZToidmVjMyJ9XSl9fSx7ImdsLXNoYWRlciI6MjUzLGdsc2xpZnk6MTYwfV0sMTYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuW3QuZ2V0UGFyYW1ldGVyKHQuRlJBTUVCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5SRU5ERVJCVUZGRVJfQklORElORyksdC5nZXRQYXJhbWV0ZXIodC5URVhUVVJFX0JJTkRJTkdfMkQpXX1mdW5jdGlvbiBpKHQsZSl7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUixlWzBdKSx0LmJpbmRSZW5kZXJidWZmZXIodC5SRU5ERVJCVUZGRVIsZVsxXSksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZVsyXSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTt5PW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2Zvcih2YXIgYT1uO2E8cjsrK2EpaVthXT10Lk5PTkU7eVtuXT1pfX1mdW5jdGlvbiBvKHQpe3N3aXRjaCh0KXtjYXNlIHA6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIHVuc3VwcG9ydGVkIik7Y2FzZSBtOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnQiKTtjYXNlIHY6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9ucyIpO2Nhc2UgZzp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBtaXNzaW5nIGF0dGFjaG1lbnQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbiIpfX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhKXtpZighbilyZXR1cm4gbnVsbDt2YXIgbz1kKHQsZSxyLGksbik7cmV0dXJuIG8ubWFnRmlsdGVyPXQuTkVBUkVTVCxvLm1pbkZpbHRlcj10Lk5FQVJFU1Qsby5taXBTYW1wbGVzPTEsby5iaW5kKCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLGEsdC5URVhUVVJFXzJELG8uaGFuZGxlLDApLG99ZnVuY3Rpb24gbCh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixhKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodC5SRU5ERVJCVUZGRVIsbixlLHIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodC5GUkFNRUJVRkZFUixpLHQuUkVOREVSQlVGRkVSLGEpLGF9ZnVuY3Rpb24gdSh0KXt2YXIgZT1uKHQuZ2wpLHI9dC5nbCxhPXQuaGFuZGxlPXIuY3JlYXRlRnJhbWVidWZmZXIoKSx1PXQuX3NoYXBlWzBdLGM9dC5fc2hhcGVbMV0saD10LmNvbG9yLmxlbmd0aCxmPXQuX2V4dCxkPXQuX3VzZVN0ZW5jaWwscD10Ll91c2VEZXB0aCxtPXQuX2NvbG9yVHlwZTtyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLGEpO2Zvcih2YXIgdj0wO3Y8aDsrK3YpdC5jb2xvclt2XT1zKHIsdSxjLG0sci5SR0JBLHIuQ09MT1JfQVRUQUNITUVOVDArdik7MD09PWg/KHQuX2NvbG9yX3JiPWwocix1LGMsci5SR0JBNCxyLkNPTE9SX0FUVEFDSE1FTlQwKSxmJiZmLmRyYXdCdWZmZXJzV0VCR0woeVswXSkpOmg+MSYmZi5kcmF3QnVmZmVyc1dFQkdMKHlbaF0pO3ZhciBnPXIuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7Zz9kP3QuZGVwdGg9cyhyLHUsYyxnLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMLHIuREVQVEhfU1RFTkNJTCxyLkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVCk6cCYmKHQuZGVwdGg9cyhyLHUsYyxyLlVOU0lHTkVEX1NIT1JULHIuREVQVEhfQ09NUE9ORU5ULHIuREVQVEhfQVRUQUNITUVOVCkpOnAmJmQ/dC5fZGVwdGhfcmI9bChyLHUsYyxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOnA/dC5fZGVwdGhfcmI9bChyLHUsYyxyLkRFUFRIX0NPTVBPTkVOVDE2LHIuREVQVEhfQVRUQUNITUVOVCk6ZCYmKHQuX2RlcHRoX3JiPWwocix1LGMsci5TVEVOQ0lMX0lOREVYLHIuU1RFTkNJTF9BVFRBQ0hNRU5UKSk7dmFyIGI9ci5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHIuRlJBTUVCVUZGRVIpO2lmKGIhPT1yLkZSQU1FQlVGRkVSX0NPTVBMRVRFKXt0Ll9kZXN0cm95ZWQ9ITAsci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmRlbGV0ZUZyYW1lYnVmZmVyKHQuaGFuZGxlKSx0LmhhbmRsZT1udWxsLHQuZGVwdGgmJih0LmRlcHRoLmRpc3Bvc2UoKSx0LmRlcHRoPW51bGwpLHQuX2RlcHRoX3JiJiYoci5kZWxldGVSZW5kZXJidWZmZXIodC5fZGVwdGhfcmIpLHQuX2RlcHRoX3JiPW51bGwpO2Zvcih2YXIgdj0wO3Y8dC5jb2xvci5sZW5ndGg7Kyt2KXQuY29sb3Jbdl0uZGlzcG9zZSgpLHQuY29sb3Jbdl09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSxpKHIsZSksbyhiKX1pKHIsZSl9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLl9zaGFwZT1bMHxlLDB8cl0sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2V4dD1zLHRoaXMuY29sb3I9bmV3IEFycmF5KGkpO2Zvcih2YXIgbD0wO2w8aTsrK2wpdGhpcy5jb2xvcltsXT1udWxsO3RoaXMuX2NvbG9yX3JiPW51bGwsdGhpcy5kZXB0aD1udWxsLHRoaXMuX2RlcHRoX3JiPW51bGwsdGhpcy5fY29sb3JUeXBlPW4sdGhpcy5fdXNlRGVwdGg9YSx0aGlzLl91c2VTdGVuY2lsPW87dmFyIGM9dGhpcyxoPVswfGUsMHxyXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhoLHswOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy53aWR0aD10fX0sMTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGMuaGVpZ2h0PXR9fX0pLHRoaXMuX3NoYXBlVmVjdG9yPWgsdSh0aGlzKX1mdW5jdGlvbiBoKHQsZSxyKXtpZih0Ll9kZXN0cm95ZWQpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBkZXN0cm95ZWQgRkJPIik7aWYodC5fc2hhcGVbMF0hPT1lfHx0Ll9zaGFwZVsxXSE9PXIpe3ZhciBhPXQuZ2wscz1hLmdldFBhcmFtZXRlcihhLk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPnN8fHI8MHx8cj5zKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDYW4ndCByZXNpemUgRkJPLCBpbnZhbGlkIGRpbWVuc2lvbnMiKTt0Ll9zaGFwZVswXT1lLHQuX3NoYXBlWzFdPXI7Zm9yKHZhciBsPW4oYSksdT0wO3U8dC5jb2xvci5sZW5ndGg7Kyt1KXQuY29sb3JbdV0uc2hhcGU9dC5fc2hhcGU7dC5fY29sb3JfcmImJihhLmJpbmRSZW5kZXJidWZmZXIoYS5SRU5ERVJCVUZGRVIsdC5fY29sb3JfcmIpLGEucmVuZGVyYnVmZmVyU3RvcmFnZShhLlJFTkRFUkJVRkZFUixhLlJHQkE0LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksdC5kZXB0aCYmKHQuZGVwdGguc2hhcGU9dC5fc2hhcGUpLHQuX2RlcHRoX3JiJiYoYS5iaW5kUmVuZGVyYnVmZmVyKGEuUkVOREVSQlVGRkVSLHQuX2RlcHRoX3JiKSx0Ll91c2VEZXB0aCYmdC5fdXNlU3RlbmNpbD9hLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9TVEVOQ0lMLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VEZXB0aD9hLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoYS5SRU5ERVJCVUZGRVIsYS5ERVBUSF9DT01QT05FTlQxNix0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSk6dC5fdXNlU3RlbmNpbCYmYS5yZW5kZXJidWZmZXJTdG9yYWdlKGEuUkVOREVSQlVGRkVSLGEuU1RFTkNJTF9JTkRFWCx0Ll9zaGFwZVswXSx0Ll9zaGFwZVsxXSkpLGEuYmluZEZyYW1lYnVmZmVyKGEuRlJBTUVCVUZGRVIsdC5oYW5kbGUpO3ZhciBjPWEuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhhLkZSQU1FQlVGRkVSKTtjIT09YS5GUkFNRUJVRkZFUl9DT01QTEVURSYmKHQuZGlzcG9zZSgpLGkoYSxsKSxvKGMpKSxpKGEsbCl9fWZ1bmN0aW9uIGYodCxlLHIsbil7cHx8KHA9dC5GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCxtPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5ULHY9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMsZz10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UKTt2YXIgaT10LmdldEV4dGVuc2lvbigiV0VCR0xfZHJhd19idWZmZXJzIik7aWYoIXkmJmkmJmEodCxpKSxBcnJheS5pc0FycmF5KGUpJiYobj1yLHI9MHxlWzFdLGU9MHxlWzBdKSwibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE1pc3Npbmcgc2hhcGUgcGFyYW1ldGVyIik7dmFyIG89dC5nZXRQYXJhbWV0ZXIodC5NQVhfUkVOREVSQlVGRkVSX1NJWkUpO2lmKGU8MHx8ZT5vfHxyPDB8fHI+byl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogUGFyYW1ldGVycyBhcmUgdG9vIGxhcmdlIGZvciBGQk8iKTtuPW58fHt9O3ZhciBzPTE7aWYoImNvbG9yImluIG4pe2lmKChzPU1hdGgubWF4KDB8bi5jb2xvciwwKSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTXVzdCBzcGVjaWZ5IGEgbm9ubmVnYXRpdmUgbnVtYmVyIG9mIGNvbG9ycyIpO2lmKHM+MSl7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11bHRpcGxlIGRyYXcgYnVmZmVyIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIik7aWYocz50LmdldFBhcmFtZXRlcihpLk1BWF9DT0xPUl9BVFRBQ0hNRU5UU19XRUJHTCkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCAiK3MrIiBkcmF3IGJ1ZmZlcnMiKX19dmFyIGw9dC5VTlNJR05FRF9CWVRFLHU9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0Iik7aWYobi5mbG9hdCYmcz4wKXtpZighdSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ29udGV4dCBkb2VzIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzIik7bD10LkZMT0FUfWVsc2Ugbi5wcmVmZXJGbG9hdCYmcz4wJiZ1JiYobD10LkZMT0FUKTt2YXIgaD0hMDsiZGVwdGgiaW4gbiYmKGg9ISFuLmRlcHRoKTt2YXIgZj0hMTtyZXR1cm4ic3RlbmNpbCJpbiBuJiYoZj0hIW4uc3RlbmNpbCksbmV3IGModCxlLHIsbCxzLGgsZixpKX12YXIgZD10KCJnbC10ZXh0dXJlMmQiKTtlLmV4cG9ydHM9Zjt2YXIgcCxtLHYsZyx5PW51bGwsYj1jLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhiLHtzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD9bMCwwXTp0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCl8fCh0PVswfHQsMHx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBTaGFwZSB2ZWN0b3IgbXVzdCBiZSBsZW5ndGggMiIpO3ZhciBlPTB8dFswXSxyPTB8dFsxXTtyZXR1cm4gaCh0aGlzLGUsciksW2Uscl19LGVudW1lcmFibGU6ITF9LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxoKHRoaXMsdCx0aGlzLl9zaGFwZVsxXSksdH0sZW51bWVyYWJsZTohMX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkPzA6dGhpcy5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxoKHRoaXMsdGhpcy5fc2hhcGVbMF0sdCksdH0sZW51bWVyYWJsZTohMX19KSxiLmJpbmQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVzdHJveWVkKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsdGhpcy5oYW5kbGUpLHQudmlld3BvcnQoMCwwLHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKX19LGIuZGlzcG9zZT1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3RoaXMuX2Rlc3Ryb3llZD0hMDt2YXIgdD10aGlzLmdsO3QuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5oYW5kbGUpLHRoaXMuaGFuZGxlPW51bGwsdGhpcy5kZXB0aCYmKHRoaXMuZGVwdGguZGlzcG9zZSgpLHRoaXMuZGVwdGg9bnVsbCksdGhpcy5fZGVwdGhfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9kZXB0aF9yYiksdGhpcy5fZGVwdGhfcmI9bnVsbCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmNvbG9yLmxlbmd0aDsrK2UpdGhpcy5jb2xvcltlXS5kaXNwb3NlKCksdGhpcy5jb2xvcltlXT1udWxsO3RoaXMuX2NvbG9yX3JiJiYodC5kZWxldGVSZW5kZXJidWZmZXIodGhpcy5fY29sb3JfcmIpLHRoaXMuX2NvbG9yX3JiPW51bGwpfX19LHsiZ2wtdGV4dHVyZTJkIjoyNjV9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49byhlKXx8Im9mIHVua25vd24gbmFtZSAoc2VlIG5wbSBnbHNsLXNoYWRlci1uYW1lKSIsbD0idW5rbm93biB0eXBlIjt2b2lkIDAhPT1yJiYobD1yPT09YS5GUkFHTUVOVF9TSEFERVI/ImZyYWdtZW50IjoidmVydGV4Iik7Zm9yKHZhciB1PWkoIkVycm9yIGNvbXBpbGluZyAlcyBzaGFkZXIgJXM6XG4iLGwsbiksYz1pKCIlcyVzIix1LHQpLGg9dC5zcGxpdCgiXG4iKSxmPXt9LGQ9MDtkPGgubGVuZ3RoO2QrKyl7dmFyIHA9aFtkXTtpZigiIiE9PXApe3ZhciBtPXBhcnNlSW50KHAuc3BsaXQoIjoiKVsyXSk7aWYoaXNOYU4obSkpdGhyb3cgbmV3IEVycm9yKGkoIkNvdWxkIG5vdCBwYXJzZSBlcnJvcjogJXMiLHApKTtmW21dPXB9fWZvcih2YXIgdj1zKGUpLnNwbGl0KCJcbiIpLGQ9MDtkPHYubGVuZ3RoO2QrKylpZihmW2QrM118fGZbZCsyXXx8ZltkKzFdKXt2YXIgZz12W2RdO2lmKHUrPWcrIlxuIixmW2QrMV0pe3ZhciB5PWZbZCsxXTt5PXkuc3Vic3RyKHkuc3BsaXQoIjoiLDMpLmpvaW4oIjoiKS5sZW5ndGgrMSkudHJpbSgpLHUrPWkoIl5eXiAlc1xuXG4iLHkpfX1yZXR1cm57bG9uZzp1LnRyaW0oKSxzaG9ydDpjLnRyaW0oKX19dmFyIGk9dCgic3ByaW50Zi1qcyIpLnNwcmludGYsYT10KCJnbC1jb25zdGFudHMvbG9va3VwIiksbz10KCJnbHNsLXNoYWRlci1uYW1lIikscz10KCJhZGQtbGluZS1udW1iZXJzIik7ZS5leHBvcnRzPW59LHsiYWRkLWxpbmUtbnVtYmVycyI6MzgsImdsLWNvbnN0YW50cy9sb29rdXAiOjE1NiwiZ2xzbC1zaGFkZXItbmFtZSI6Mjc3LCJzcHJpbnRmLWpzIjo1MjV9XSwxNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMucG9zaXRpb25CdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9YSx0aGlzLmlkQnVmZmVyPW8sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMuc2hhcGU9WzAsMF0sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnBpY2tPZmZzZXQ9MH1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9dC5nbCxpPWwocixjLnZlcnRleCxjLmZyYWdtZW50KSxhPWwocixjLnBpY2tWZXJ0ZXgsYy5waWNrRnJhZ21lbnQpLG89dShyKSxzPXUociksaD11KHIpLGY9dShyKSxkPW5ldyBuKHQsaSxhLG8scyxoLGYpO3JldHVybiBkLnVwZGF0ZShlKSx0LmFkZE9iamVjdChkKSxkfWUuZXhwb3J0cz1pO3ZhciBhPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbz10KCJpb3RhLWFycmF5Iikscz10KCJ0eXBlZGFycmF5LXBvb2wiKSxsPXQoImdsLXNoYWRlciIpLHU9dCgiZ2wtYnVmZmVyIiksYz10KCIuL2xpYi9zaGFkZXJzIiksaD1uLnByb3RvdHlwZSxmPVswLDAsMSwwLDAsMSwxLDAsMSwxLDAsMV07aC5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBsb3Qscj10aGlzLnNoYWRlcixuPXRoaXMuYm91bmRzLGk9dGhpcy5udW1WZXJ0aWNlcztpZighKGk8PTApKXt2YXIgYT1lLmdsLG89ZS5kYXRhQm94LHM9blsyXS1uWzBdLGw9blszXS1uWzFdLHU9b1syXS1vWzBdLGM9b1szXS1vWzFdO3RbMF09MipzL3UsdFs0XT0yKmwvYyx0WzZdPTIqKG5bMF0tb1swXSkvdS0xLHRbN109MiooblsxXS1vWzFdKS9jLTEsci5iaW5kKCk7dmFyIGg9ci51bmlmb3JtcztoLnZpZXdUcmFuc2Zvcm09dCxoLnNoYXBlPXRoaXMuc2hhcGU7dmFyIGY9ci5hdHRyaWJ1dGVzO3RoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGYucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxmLndlaWdodC5wb2ludGVyKGEuVU5TSUdORURfQllURSwhMSksdGhpcy5jb2xvckJ1ZmZlci5iaW5kKCksZi5jb2xvci5wb2ludGVyKGEuVU5TSUdORURfQllURSwhMCksYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLDAsaSl9fX0oKSxoLmRyYXdQaWNrPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMCwwLDAsMSwwLDAsMCwxXSxlPVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dGhpcy5wbG90LGk9dGhpcy5waWNrU2hhZGVyLGE9dGhpcy5ib3VuZHMsbz10aGlzLm51bVZlcnRpY2VzO2lmKCEobzw9MCkpe3ZhciBzPW4uZ2wsbD1uLmRhdGFCb3gsdT1hWzJdLWFbMF0sYz1hWzNdLWFbMV0saD1sWzJdLWxbMF0sZj1sWzNdLWxbMV07dFswXT0yKnUvaCx0WzRdPTIqYy9mLHRbNl09MiooYVswXS1sWzBdKS9oLTEsdFs3XT0yKihhWzFdLWxbMV0pL2YtMTtmb3IodmFyIGQ9MDtkPDQ7KytkKWVbZF09cj4+OCpkJjI1NTt0aGlzLnBpY2tPZmZzZXQ9cixpLmJpbmQoKTt2YXIgcD1pLnVuaWZvcm1zO3Audmlld1RyYW5zZm9ybT10LHAucGlja09mZnNldD1lLHAuc2hhcGU9dGhpcy5zaGFwZTt2YXIgbT1pLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLG0ucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxtLndlaWdodC5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSksdGhpcy5pZEJ1ZmZlci5iaW5kKCksbS5waWNrSWQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLG8pLHIrdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdfX19KCksaC5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV07aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy54RGF0YSxzPXRoaXMueURhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bYSV0aGlzLnNoYXBlWzBdXSxzW2EvdGhpcy5zaGFwZVswXXwwXV19fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXQuc2hhcGV8fFswLDBdLHI9dC54fHxvKGVbMF0pLG49dC55fHxvKGVbMV0pLGk9dC56fHxuZXcgRmxvYXQzMkFycmF5KGVbMF0qZVsxXSk7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bjt2YXIgbD10LmNvbG9yTGV2ZWxzfHxbMF0sdT10LmNvbG9yVmFsdWVzfHxbMCwwLDAsMV0sYz1sLmxlbmd0aCxoPXRoaXMuYm91bmRzLGQ9aFswXT1yWzBdLHA9aFsxXT1uWzBdLG09aFsyXT1yW3IubGVuZ3RoLTFdLHY9aFszXT1uW24ubGVuZ3RoLTFdLGc9MS8obS1kKSx5PTEvKHYtcCksYj1lWzBdLHg9ZVsxXTt0aGlzLnNoYXBlPVtiLHhdO3ZhciBfPShiLTEpKih4LTEpKihmLmxlbmd0aD4+PjEpO3RoaXMubnVtVmVydGljZXM9Xztmb3IodmFyIHc9cy5tYWxsb2NVaW50OCg0Kl8pLE09cy5tYWxsb2NGbG9hdDMyKDIqXyksaz1zLm1hbGxvY1VpbnQ4KDIqXyksQT1zLm1hbGxvY1VpbnQzMihfKSxUPTAsUz0wO1M8eC0xOysrUylmb3IodmFyIEU9eSoobltTXS1wKSxMPXkqKG5bUysxXS1wKSxDPTA7QzxiLTE7KytDKWZvcih2YXIgej1nKihyW0NdLWQpLEk9ZyoocltDKzFdLWQpLEQ9MDtEPGYubGVuZ3RoO0QrPTIpe3ZhciBQLE8sUixGLGo9ZltEXSxOPWZbRCsxXSxCPShTK04pKmIrKEMraiksVT1pW0JdLFY9YS5sZShsLFUpO2lmKFY8MClQPXVbMF0sTz11WzFdLFI9dVsyXSxGPXVbM107ZWxzZSBpZihWPT09Yy0xKVA9dVs0KmMtNF0sTz11WzQqYy0zXSxSPXVbNCpjLTJdLEY9dVs0KmMtMV07ZWxzZXt2YXIgSD0oVS1sW1ZdKS8obFtWKzFdLWxbVl0pLHE9MS1ILEc9NCpWLFk9NCooVisxKTtQPXEqdVtHXStIKnVbWV0sTz1xKnVbRysxXStIKnVbWSsxXSxSPXEqdVtHKzJdK0gqdVtZKzJdLEY9cSp1W0crM10rSCp1W1krM119d1s0KlRdPTI1NSpQLHdbNCpUKzFdPTI1NSpPLHdbNCpUKzJdPTI1NSpSLHdbNCpUKzNdPTI1NSpGLE1bMipUXT0uNSp6Ky41KkksTVsyKlQrMV09LjUqRSsuNSpMLGtbMipUXT1qLGtbMipUKzFdPU4sQVtUXT1TKmIrQyxUKz0xfXRoaXMucG9zaXRpb25CdWZmZXIudXBkYXRlKE0pLHRoaXMud2VpZ2h0QnVmZmVyLnVwZGF0ZShrKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZSh3KSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShBKSxzLmZyZWUoTSkscy5mcmVlKHcpLHMuZnJlZShrKSxzLmZyZWUoQSl9LGguZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXIuZGlzcG9zZSgpLHRoaXMud2VpZ2h0QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoxNjUsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxNjYsImdsLWJ1ZmZlciI6MTU0LCJnbC1zaGFkZXIiOjI1MywiaW90YS1hcnJheSI6MjkxLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDE2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2ZyYWdtZW50OiJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGZyYWdDb2xvci5yZ2IgKiBmcmFnQ29sb3IuYSwgZnJhZ0NvbG9yLmEpO1xufVxuIix2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNCh2UG9zaXRpb24ueHksIDAsIHZQb3NpdGlvbi56KTtcbn1cbiIscGlja0ZyYWdtZW50OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC54ICs9IGQueCArIGQueSpzaGFwZS54O1xuXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XG59XG4iLHBpY2tWZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xudmFyeWluZyB2ZWMyIHZXZWlnaHQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdldlaWdodCA9IHdlaWdodDtcblxuICBmcmFnSWQgPSBwaWNrSWQ7XG5cbiAgdmVjMyB2UG9zaXRpb24gPSB2aWV3VHJhbnNmb3JtICogdmVjMyggcG9zaXRpb24gKyAod2VpZ2h0LS41KS8oc2hhcGUtMS4pICwgMS4wKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHZQb3NpdGlvbi54eSwgMCwgdlBvc2l0aW9uLnopO1xufVxuIn19LHt9XSwxNjY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bODJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDo4Mn1dLDE2NzpbZnVuY3Rpb24odCxlLHIpe3IubGluZVZlcnRleD0icHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUhpLCBhTG8sIGRIaSwgZExvO1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZhcnlpbmcgdmVjMiBkaXJlY3Rpb247XG5cblxudmVjMiBwcm9qZWN0XzFfMCh2ZWMyIHNjSGksIHZlYzIgdHJIaSwgdmVjMiBzY0xvLCB2ZWMyIHRyTG8sIHZlYzIgcG9zSGksIHZlYzIgcG9zTG8pIHtcbiAgcmV0dXJuIChwb3NIaSArIHRySGkpICogc2NIaVxuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgKyAocG9zSGkgKyB0ckhpKSAqIHNjTG9cbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMbztcbn1cblxuXG52ZWMyIHByb2plY3RfMl8xKHZlYzIgc2NIaSwgdmVjMiBzY0xvLCB2ZWMyIHBvc0hpLCB2ZWMyIHBvc0xvKSB7XG4gIHJldHVybiBzY0hpICogcG9zSGlcbiAgICAgICArIHNjTG8gKiBwb3NIaVxuICAgICAgICsgc2NIaSAqIHBvc0xvXG4gICAgICAgKyBzY0xvICogcG9zTG87XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwID0gcHJvamVjdF8xXzAoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBhSGksIGFMbyk7XG4gIHZlYzIgZGlyID0gcHJvamVjdF8yXzEoc2NhbGVIaSwgc2NhbGVMbywgZEhpLCBkTG8pO1xuICB2ZWMyIG4gPSAwLjUgKiB3aWR0aCAqIG5vcm1hbGl6ZShzY3JlZW5TaGFwZS55eCAqIHZlYzIoZGlyLnksIC1kaXIueCkpIC8gc2NyZWVuU2hhcGUueHk7XG4gIHZlYzIgdGFuZ2VudCA9IG5vcm1hbGl6ZShzY3JlZW5TaGFwZS54eSAqIGRpcik7XG4gIGlmKGRpci54IDwgMC4wIHx8IChkaXIueCA9PSAwLjAgJiYgZGlyLnkgPCAwLjApKSB7XG4gICAgZGlyZWN0aW9uID0gLXRhbmdlbnQ7XG4gIH0gZWxzZSB7XG4gICAgZGlyZWN0aW9uID0gdGFuZ2VudDtcbiAgfVxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocCArIG4sIDAuMCwgMS4wKTtcbn0iLHIubGluZUZyYWdtZW50PSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3I7XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoUGF0dGVybjtcbnVuaWZvcm0gZmxvYXQgZGFzaExlbmd0aDtcblxudmFyeWluZyB2ZWMyIGRpcmVjdGlvbjtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCB0ID0gZnJhY3QoZG90KGRpcmVjdGlvbiwgZ2xfRnJhZ0Nvb3JkLnh5KSAvIGRhc2hMZW5ndGgpO1xuICB2ZWM0IHBjb2xvciA9IGNvbG9yICogdGV4dHVyZTJEKGRhc2hQYXR0ZXJuLCB2ZWMyKHQsIDAuMCkpLnI7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGNvbG9yLnJnYiAqIHBjb2xvci5hLCBwY29sb3IuYSk7XG59IixyLm1pdHJlVmVydGV4PSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhSGksIGFMbztcblxudW5pZm9ybSB2ZWMyIHNjYWxlSGksIHRyYW5zbGF0ZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVMbztcbnVuaWZvcm0gZmxvYXQgcmFkaXVzO1xuXG5cbnZlYzIgcHJvamVjdF8xXzAodmVjMiBzY0hpLCB2ZWMyIHRySGksIHZlYzIgc2NMbywgdmVjMiB0ckxvLCB2ZWMyIHBvc0hpLCB2ZWMyIHBvc0xvKSB7XG4gIHJldHVybiAocG9zSGkgKyB0ckhpKSAqIHNjSGlcbiAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NIaVxuICAgICAgICsgKHBvc0hpICsgdHJIaSkgKiBzY0xvXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjTG87XG59XG5cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHAgPSBwcm9qZWN0XzFfMChzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIGFIaSwgYUxvKTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHAsIDAuMCwgMS4wKTtcbiAgZ2xfUG9pbnRTaXplID0gcmFkaXVzO1xufSIsci5taXRyZUZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZihsZW5ndGgoZ2xfUG9pbnRDb29yZC54eSAtIDAuNSkgPiAwLjI1KSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiwgY29sb3IuYSk7XG59IixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGFIaSwgYUxvLCBkSGk7XG5hdHRyaWJ1dGUgdmVjNCBwaWNrMCwgcGljazE7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCB0cmFuc2xhdGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlTG8sIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCB3aWR0aDtcblxudmFyeWluZyB2ZWM0IHBpY2tBLCBwaWNrQjtcblxuXG52ZWMyIHByb2plY3RfMV8wKHZlYzIgc2NIaSwgdmVjMiB0ckhpLCB2ZWMyIHNjTG8sIHZlYzIgdHJMbywgdmVjMiBwb3NIaSwgdmVjMiBwb3NMbykge1xuICByZXR1cm4gKHBvc0hpICsgdHJIaSkgKiBzY0hpXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjSGlcbiAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0xvO1xufVxuXG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwID0gcHJvamVjdF8xXzAoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBhSGksIGFMbyk7XG4gIHZlYzIgbiA9IHdpZHRoICogbm9ybWFsaXplKHNjcmVlblNoYXBlLnl4ICogdmVjMihkSGkueSwgLWRIaS54KSkgLyBzY3JlZW5TaGFwZS54eTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHAgKyBuLCAwLCAxKTtcbiAgcGlja0EgPSBwaWNrMDtcbiAgcGlja0IgPSBwaWNrMTtcbn0iLHIucGlja0ZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgcGlja0EsIHBpY2tCO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgZnJhZ0lkID0gdmVjNChwaWNrQS54eXosIDAuMCk7XG4gIGlmKHBpY2tCLncgPiBwaWNrQS53KSB7XG4gICAgZnJhZ0lkLnh5eiA9IHBpY2tCLnh5ejtcbiAgfVxuXG4gIGZyYWdJZCArPSBwaWNrT2Zmc2V0O1xuXG4gIGZyYWdJZC55ICs9IGZsb29yKGZyYWdJZC54IC8gMjU2LjApO1xuICBmcmFnSWQueCAtPSBmbG9vcihmcmFnSWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC56ICs9IGZsb29yKGZyYWdJZC55IC8gMjU2LjApO1xuICBmcmFnSWQueSAtPSBmbG9vcihmcmFnSWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC53ICs9IGZsb29yKGZyYWdJZC56IC8gMjU2LjApO1xuICBmcmFnSWQueiAtPSBmbG9vcihmcmFnSWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xufSIsci5maWxsVmVydGV4PSJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhSGksIGFMbywgZEhpO1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBwcm9qZWN0QXhpcztcbnVuaWZvcm0gZmxvYXQgcHJvamVjdFZhbHVlLCBkZXB0aDtcblxuXG52ZWMyIHByb2plY3RfMV8wKHZlYzIgc2NIaSwgdmVjMiB0ckhpLCB2ZWMyIHNjTG8sIHZlYzIgdHJMbywgdmVjMiBwb3NIaSwgdmVjMiBwb3NMbykge1xuICByZXR1cm4gKHBvc0hpICsgdHJIaSkgKiBzY0hpXG4gICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjSGlcbiAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0xvO1xufVxuXG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwID0gcHJvamVjdF8xXzAoc2NhbGVIaSwgdHJhbnNsYXRlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUxvLCBhSGksIGFMbyk7XG4gIGlmKGRIaS55IDwgMC4wIHx8IChkSGkueSA9PSAwLjAgJiYgZEhpLnggPCAwLjApKSB7XG4gICAgaWYoZG90KHAsIHByb2plY3RBeGlzKSA8IHByb2plY3RWYWx1ZSkge1xuICAgICAgcCA9IHAgKiAoMS4wIC0gYWJzKHByb2plY3RBeGlzKSkgKyBwcm9qZWN0QXhpcyAqIHByb2plY3RWYWx1ZTtcbiAgICB9XG4gIH1cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHAsIGRlcHRoLCAxKTtcbn0iLHIuZmlsbEZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGNvbG9yLmEsIGNvbG9yLmEpO1xufSJ9LHt9XSwxNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMsbCl7dGhpcy5wbG90PXQsdGhpcy5kYXNoUGF0dGVybj1lLHRoaXMubGluZUJ1ZmZlckhpPXIsdGhpcy5saW5lQnVmZmVyTG89bix0aGlzLnBpY2tCdWZmZXI9aSx0aGlzLmxpbmVTaGFkZXI9YSx0aGlzLm1pdHJlU2hhZGVyPW8sdGhpcy5maWxsU2hhZGVyPXMsdGhpcy5waWNrU2hhZGVyPWwsdGhpcy51c2luZ0Rhc2hlcz0hMSx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMud2lkdGg9MSx0aGlzLmNvbG9yPVswLDAsMSwxXSx0aGlzLmZpbGw9WyExLCExLCExLCExXSx0aGlzLmZpbGxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmRhdGE9bnVsbCx0aGlzLm51bVBvaW50cz0wLHRoaXMudmVydENvdW50PTAsdGhpcy5waWNrT2Zmc2V0PTB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj10LmdsLGk9cyhyKSxhPXMociksdT1zKHIpLGM9bChyLFsxLDFdKSxmPW8ocixoLmxpbmVWZXJ0ZXgsaC5saW5lRnJhZ21lbnQpLGQ9byhyLGgubWl0cmVWZXJ0ZXgsaC5taXRyZUZyYWdtZW50KSxwPW8ocixoLmZpbGxWZXJ0ZXgsaC5maWxsRnJhZ21lbnQpLG09byhyLGgucGlja1ZlcnRleCxoLnBpY2tGcmFnbWVudCksdj1uZXcgbih0LGMsaSxhLHUsZixkLHAsbSk7cmV0dXJuIHQuYWRkT2JqZWN0KHYpLHYudXBkYXRlKGUpLHZ9ZS5leHBvcnRzPWE7dmFyIG89dCgiZ2wtc2hhZGVyIikscz10KCJnbC1idWZmZXIiKSxsPXQoImdsLXRleHR1cmUyZCIpLHU9dCgibmRhcnJheSIpLGM9dCgidHlwZWRhcnJheS1wb29sIiksaD10KCIuL2xpYi9zaGFkZXJzIiksZj1uLnByb3RvdHlwZTtmLnNldFByb2plY3Rpb25Nb2RlbD1mdW5jdGlvbigpe3ZhciB0PXtzY2FsZUhpOm5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLHNjYWxlTG86bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdHJhbnNsYXRlSGk6bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdHJhbnNsYXRlTG86bmV3IEZsb2F0MzJBcnJheShbMCwwXSksc2NyZWVuU2hhcGU6WzAsMF19O3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuYm91bmRzLHI9dGhpcy5wbG90LnZpZXdCb3gsbj10aGlzLnBsb3QuZGF0YUJveCxpPWVbMl0tZVswXSxhPWVbM10tZVsxXSxvPW5bMl0tblswXSxzPW5bM10tblsxXSxsPXJbMl0tclswXSx1PXJbM10tclsxXSxjPTIqaS9vLGg9MiphL3MsZj0oZVswXS1uWzBdLS41Km8pL2ksZD0oZVsxXS1uWzFdLS41KnMpL2E7cmV0dXJuIHQuc2NhbGVIaVswXT1jLHQuc2NhbGVIaVsxXT1oLHQuc2NhbGVMb1swXT1jLXQuc2NhbGVIaVswXSx0LnNjYWxlTG9bMV09aC10LnNjYWxlSGlbMV0sdC50cmFuc2xhdGVIaVswXT1mLHQudHJhbnNsYXRlSGlbMV09ZCx0LnRyYW5zbGF0ZUxvWzBdPWYtdC50cmFuc2xhdGVIaVswXSx0LnRyYW5zbGF0ZUxvWzFdPWQtdC50cmFuc2xhdGVIaVsxXSx0LnNjcmVlblNoYXBlWzBdPWwsdC5zY3JlZW5TaGFwZVsxXT11LHR9fSgpLGYuc2V0UHJvamVjdGlvblVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dC5zY2FsZUhpPWUuc2NhbGVIaSx0LnNjYWxlTG89ZS5zY2FsZUxvLHQudHJhbnNsYXRlSGk9ZS50cmFuc2xhdGVIaSx0LnRyYW5zbGF0ZUxvPWUudHJhbnNsYXRlTG8sdC5zY3JlZW5TaGFwZT1lLnNjcmVlblNoYXBlfSxmLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwXSxlPVstMSwwXSxyPVswLDFdLG49WzAsLTFdO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXRoaXMudmVydENvdW50O2lmKGkpe3ZhciBhPXRoaXMuc2V0UHJvamVjdGlvbk1vZGVsKCksbz10aGlzLnBsb3Qscz10aGlzLndpZHRoLGw9by5nbCx1PW8ucGl4ZWxSYXRpbyxjPXRoaXMuY29sb3IsaD10aGlzLmZpbGxTaGFkZXIuYXR0cmlidXRlczt0aGlzLmxpbmVCdWZmZXJMby5iaW5kKCksaC5hTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDApLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKTt2YXIgZj10aGlzLmZpbGw7aWYoZlswXXx8ZlsxXXx8ZlsyXXx8ZlszXSl7dmFyIGQ9dGhpcy5maWxsU2hhZGVyO2QuYmluZCgpO3ZhciBwPWQudW5pZm9ybXM7dGhpcy5zZXRQcm9qZWN0aW9uVW5pZm9ybXMocCxhKSxwLmRlcHRoPW8ubmV4dERlcHRoVmFsdWUoKSxoLmFIaS5wb2ludGVyKGwuRkxPQVQsITEsMTYsMCksaC5kSGkucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLGwuZGVwdGhNYXNrKCEwKSxsLmVuYWJsZShsLkRFUFRIX1RFU1QpO3ZhciBtPXRoaXMuZmlsbENvbG9yO2ZbMF0mJihwLmNvbG9yPW1bMF0scC5wcm9qZWN0QXhpcz1lLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGZbMV0mJihwLmNvbG9yPW1bMV0scC5wcm9qZWN0QXhpcz1uLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGZbMl0mJihwLmNvbG9yPW1bMl0scC5wcm9qZWN0QXhpcz10LHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGZbM10mJihwLmNvbG9yPW1bM10scC5wcm9qZWN0QXhpcz1yLHAucHJvamVjdFZhbHVlPTEsbC5kcmF3QXJyYXlzKGwuVFJJQU5HTEVTLDAsaSkpLGwuZGVwdGhNYXNrKCExKSxsLmRpc2FibGUobC5ERVBUSF9URVNUKX12YXIgdj10aGlzLmxpbmVTaGFkZXI7di5iaW5kKCksdGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLHYuYXR0cmlidXRlcy5hTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDApLHYuYXR0cmlidXRlcy5kTG8ucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKTt2YXIgZz12LnVuaWZvcm1zO3RoaXMuc2V0UHJvamVjdGlvblVuaWZvcm1zKGcsYSksZy5jb2xvcj1jLGcud2lkdGg9cyp1LGcuZGFzaFBhdHRlcm49dGhpcy5kYXNoUGF0dGVybi5iaW5kKCksZy5kYXNoTGVuZ3RoPXRoaXMuZGFzaExlbmd0aCp1O3ZhciB5PXYuYXR0cmlidXRlcztpZih5LmFIaS5wb2ludGVyKGwuRkxPQVQsITEsMTYsMCkseS5kSGkucG9pbnRlcihsLkZMT0FULCExLDE2LDgpLGwuZHJhd0FycmF5cyhsLlRSSUFOR0xFUywwLGkpLHM+MiYmIXRoaXMudXNpbmdEYXNoZXMpe3ZhciBiPXRoaXMubWl0cmVTaGFkZXI7dGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLGIuYXR0cmlidXRlcy5hTG8ucG9pbnRlcihsLkZMT0FULCExLDQ4LDApLHRoaXMubGluZUJ1ZmZlckhpLmJpbmQoKSxiLmJpbmQoKTt2YXIgeD1iLnVuaWZvcm1zO3RoaXMuc2V0UHJvamVjdGlvblVuaWZvcm1zKHgsYSkseC5jb2xvcj1jLHgucmFkaXVzPXMqdSxiLmF0dHJpYnV0ZXMuYUhpLnBvaW50ZXIobC5GTE9BVCwhMSw0OCwwKSxsLmRyYXdBcnJheXMobC5QT0lOVFMsMCxpLzN8MCl9fX19KCksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVswLDAsMCwwXTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy52ZXJ0Q291bnQsbj10aGlzLm51bVBvaW50cztpZih0aGlzLnBpY2tPZmZzZXQ9ZSwhcilyZXR1cm4gZStuO3ZhciBpPXRoaXMuc2V0UHJvamVjdGlvbk1vZGVsKCksYT10aGlzLnBsb3Qsbz10aGlzLndpZHRoLHM9YS5nbCxsPWEucGlja1BpeGVsUmF0aW8sdT10aGlzLnBpY2tTaGFkZXIsYz10aGlzLnBpY2tCdWZmZXI7dFswXT0yNTUmZSx0WzFdPWU+Pj44JjI1NSx0WzJdPWU+Pj4xNiYyNTUsdFszXT1lPj4+MjQsdS5iaW5kKCk7dmFyIGg9dS51bmlmb3Jtczt0aGlzLnNldFByb2plY3Rpb25Vbmlmb3JtcyhoLGkpLGgud2lkdGg9bypsLGgucGlja09mZnNldD10O3ZhciBmPXUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5saW5lQnVmZmVySGkuYmluZCgpLGYuYUhpLnBvaW50ZXIocy5GTE9BVCwhMSwxNiwwKSxmLmRIaS5wb2ludGVyKHMuRkxPQVQsITEsMTYsOCksdGhpcy5saW5lQnVmZmVyTG8uYmluZCgpLGYuYUxvLnBvaW50ZXIocy5GTE9BVCwhMSwxNiwwKSxjLmJpbmQoKSxmLnBpY2swLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExLDgsMCksZi5waWNrMS5wb2ludGVyKHMuVU5TSUdORURfQllURSwhMSw4LDQpLHMuZHJhd0FycmF5cyhzLlRSSUFOR0xFUywwLHIpLGUrbn19KCksZi5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLm51bVBvaW50cztpZihyPG58fHI+PW4raSlyZXR1cm4gbnVsbDt2YXIgYT1yLW4sbz10aGlzLmRhdGE7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlLHIsbixhLG8scz10aGlzLnBsb3QuZ2w7dGhpcy5jb2xvcj0odC5jb2xvcnx8WzAsMCwxLDFdKS5zbGljZSgpLHRoaXMud2lkdGg9Kyh0LndpZHRofHwxKSx0aGlzLmZpbGw9KHQuZmlsbHx8WyExLCExLCExLCExXSkuc2xpY2UoKSx0aGlzLmZpbGxDb2xvcj1pKHQuZmlsbENvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIGg9dC5kYXNoZXN8fFsxXSxmPTA7Zm9yKGU9MDtlPGgubGVuZ3RoOysrZSlmKz1oW2VdO3ZhciBkPWMubWFsbG9jVWludDgoZik7bj0wO3ZhciBwPTI1NTtmb3IoZT0wO2U8aC5sZW5ndGg7KytlKXtmb3Iocj0wO3I8aFtlXTsrK3IpZFtuKytdPXA7cF49MjU1fXRoaXMuZGFzaFBhdHRlcm4uZGlzcG9zZSgpLHRoaXMudXNpbmdEYXNoZXM9aC5sZW5ndGg+MSx0aGlzLmRhc2hQYXR0ZXJuPWwocyx1KGQsW2YsMSw0XSxbMSwwLDBdKSksdGhpcy5kYXNoUGF0dGVybi5taW5GaWx0ZXI9cy5ORUFSRVNULHRoaXMuZGFzaFBhdHRlcm4ubWFnRmlsdGVyPXMuTkVBUkVTVCx0aGlzLmRhc2hMZW5ndGg9ZixjLmZyZWUoZCk7dmFyIG09dC5wb3NpdGlvbnM7dGhpcy5kYXRhPW07dmFyIHY9dGhpcy5ib3VuZHM7dlswXT12WzFdPTEvMCx2WzJdPXZbM109LTEvMDt2YXIgZz10aGlzLm51bVBvaW50cz1tLmxlbmd0aD4+PjE7aWYoMCE9PWcpe2ZvcihlPTA7ZTxnOysrZSlhPW1bMiplXSxvPW1bMiplKzFdLGlzTmFOKGEpfHxpc05hTihvKXx8KHZbMF09TWF0aC5taW4odlswXSxhKSx2WzFdPU1hdGgubWluKHZbMV0sbyksdlsyXT1NYXRoLm1heCh2WzJdLGEpLHZbM109TWF0aC5tYXgodlszXSxvKSk7dlswXT09PXZbMl0mJih2WzJdKz0xKSx2WzNdPT09dlsxXSYmKHZbM10rPTEpO3ZhciB5PWMubWFsbG9jRmxvYXQ2NCgyNCooZy0xKSksYj1jLm1hbGxvY0Zsb2F0MzIoMjQqKGctMSkpLHg9Yy5tYWxsb2NGbG9hdDMyKDI0KihnLTEpKSxfPWMubWFsbG9jVWludDMyKDEyKihnLTEpKSx3PWIubGVuZ3RoLE09Xy5sZW5ndGg7bj1nO2Zvcih2YXIgaz0wO24+MTspe3ZhciBBPS0tbjthPW1bMipuXSxvPW1bMipuKzFdO3ZhciBUPUEtMSxTPW1bMipUXSxFPW1bMipUKzFdO2lmKCEoaXNOYU4oYSl8fGlzTmFOKG8pfHxpc05hTihTKXx8aXNOYU4oRSkpKXtrKz0xLGE9KGEtdlswXSkvKHZbMl0tdlswXSksbz0oby12WzFdKS8odlszXS12WzFdKSxTPShTLXZbMF0pLyh2WzJdLXZbMF0pLEU9KEUtdlsxXSkvKHZbM10tdlsxXSk7dmFyIEw9Uy1hLEM9RS1vLHo9QXwxPDwyNCxJPUEtMSxEPUEsUD1BLTF8MTw8MjQ7eVstLXddPS1DLHlbLS13XT0tTCx5Wy0td109byx5Wy0td109YSxfWy0tTV09eixfWy0tTV09SSx5Wy0td109Qyx5Wy0td109TCx5Wy0td109RSx5Wy0td109UyxfWy0tTV09RCxfWy0tTV09UCx5Wy0td109LUMseVstLXddPS1MLHlbLS13XT1FLHlbLS13XT1TLF9bLS1NXT1ELF9bLS1NXT1QLHlbLS13XT1DLHlbLS13XT1MLHlbLS13XT1FLHlbLS13XT1TLF9bLS1NXT1ELF9bLS1NXT1QLHlbLS13XT0tQyx5Wy0td109LUwseVstLXddPW8seVstLXddPWEsX1stLU1dPXosX1stLU1dPUkseVstLXddPUMseVstLXddPUwseVstLXddPW8seVstLXddPWEsX1stLU1dPXosX1stLU1dPUl9fWZvcihlPTA7ZTx5Lmxlbmd0aDtlKyspYltlXT15W2VdLHhbZV09eVtlXS1iW2VdO3RoaXMudmVydENvdW50PTYqayx0aGlzLmxpbmVCdWZmZXJIaS51cGRhdGUoYi5zdWJhcnJheSh3KSksdGhpcy5saW5lQnVmZmVyTG8udXBkYXRlKHguc3ViYXJyYXkodykpLHRoaXMucGlja0J1ZmZlci51cGRhdGUoXy5zdWJhcnJheShNKSksYy5mcmVlKHkpLGMuZnJlZShiKSxjLmZyZWUoeCksYy5mcmVlKF8pfX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKSx0aGlzLmxpbmVCdWZmZXJMby5kaXNwb3NlKCksdGhpcy5saW5lQnVmZmVySGkuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm1pdHJlU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmZpbGxTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5kYXNoUGF0dGVybi5kaXNwb3NlKCl9fSx7Ii4vbGliL3NoYWRlcnMiOjE2NywiZ2wtYnVmZmVyIjoxNTQsImdsLXNoYWRlciI6MjUzLCJnbC10ZXh0dXJlMmQiOjI2NSxuZGFycmF5OjQ2NSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwxNjk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBuZXh0UG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgYXJjTGVuZ3RoLCBsaW5lV2lkdGg7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgcHJvamVjdGVkID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdGFuZ2VudENsaXAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChuZXh0UG9zaXRpb24gLSBwb3NpdGlvbiwgMC4wKTtcbiAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKHNjcmVlblNoYXBlICogdGFuZ2VudENsaXAueHkpO1xuICB2ZWMyIG9mZnNldCA9IDAuNSAqIHBpeGVsUmF0aW8gKiBsaW5lV2lkdGggKiB2ZWMyKHRhbmdlbnQueSwgLXRhbmdlbnQueCkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocHJvamVjdGVkLnh5ICsgcHJvamVjdGVkLncgKiBvZmZzZXQsIHByb2plY3RlZC56dyk7XG5cbiAgd29ybGRQb3NpdGlvbiA9IHBvc2l0aW9uO1xuICBwaXhlbEFyY0xlbmd0aCA9IGFyY0xlbmd0aDtcbiAgZnJhZ0NvbG9yID0gY29sb3I7XG59XG4iLGE9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJuZXh0UG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiYXJjTGVuZ3RoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJsaW5lV2lkdGgiLHR5cGU6ImZsb2F0In0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In1dO3IuY3JlYXRlU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgICAgICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBzYW1wbGVyMkQgZGFzaFRleHR1cmU7XG51bmlmb3JtIGZsb2F0ICAgICBkYXNoU2NhbGU7XG51bmlmb3JtIGZsb2F0ICAgICBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzMgICAgd29ybGRQb3NpdGlvbjtcbnZhcnlpbmcgZmxvYXQgICBwaXhlbEFyY0xlbmd0aDtcbnZhcnlpbmcgdmVjNCAgICBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4od29ybGRQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiIsbnVsbCxhKX0sci5jcmVhdGVQaWNrU2hhZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSwicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbmxvd3AgdmVjNCBlbmNvZGVfZmxvYXRfMV8wKGhpZ2hwIGZsb2F0IHYpIHtcbiAgaGlnaHAgZmxvYXQgYXYgPSBhYnModik7XG5cbiAgLy9IYW5kbGUgc3BlY2lhbCBjYXNlc1xuICBpZihhdiA8IEZMT0FUX01JTikge1xuICAgIHJldHVybiB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gIH0gZWxzZSBpZih2ID4gRkxPQVRfTUFYKSB7XG4gICAgcmV0dXJuIHZlYzQoMTI3LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcbiAgfSBlbHNlIGlmKHYgPCAtRkxPQVRfTUFYKSB7XG4gICAgcmV0dXJuIHZlYzQoMjU1LjAsIDEyOC4wLCAwLjAsIDAuMCkgLyAyNTUuMDtcbiAgfVxuXG4gIGhpZ2hwIHZlYzQgYyA9IHZlYzQoMCwwLDAsMCk7XG5cbiAgLy9Db21wdXRlIGV4cG9uZW50IGFuZCBtYW50aXNzYVxuICBoaWdocCBmbG9hdCBlID0gZmxvb3IobG9nMihhdikpO1xuICBoaWdocCBmbG9hdCBtID0gYXYgKiBwb3coMi4wLCAtZSkgLSAxLjA7XG4gIFxuICAvL1VucGFjayBtYW50aXNzYVxuICBjWzFdID0gZmxvb3IoMTI4LjAgKiBtKTtcbiAgbSAtPSBjWzFdIC8gMTI4LjA7XG4gIGNbMl0gPSBmbG9vcigzMjc2OC4wICogbSk7XG4gIG0gLT0gY1syXSAvIDMyNzY4LjA7XG4gIGNbM10gPSBmbG9vcig4Mzg4NjA4LjAgKiBtKTtcbiAgXG4gIC8vVW5wYWNrIGV4cG9uZW50XG4gIGhpZ2hwIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xuICBlYmlhcyAtPSBjWzBdICogMi4wO1xuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wOyBcblxuICAvL1VucGFjayBzaWduIGJpdFxuICBjWzBdICs9IDEyOC4wICogc3RlcCgwLjAsIC12KTtcblxuICAvL1NjYWxlIGJhY2sgdG8gcmFuZ2VcbiAgcmV0dXJuIGMgLyAyNTUuMDtcbn1cblxuXG5cbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHdvcmxkUG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4od29ybGRQb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgZW5jb2RlX2Zsb2F0XzFfMChwaXhlbEFyY0xlbmd0aCkueHl6KTtcbn0iLG51bGwsYSl9fSx7ImdsLXNoYWRlciI6MjUzfV0sMTcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuZGlydHk9ITAsdGhpcy5waXhlbFJhdGlvPTF9ZnVuY3Rpb24gcyh0KXt2YXIgZT10LmdsfHx0LnNjZW5lJiZ0LnNjZW5lLmdsLHI9bShlKTtyLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsci5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLHIuYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MywKci5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7dmFyIG49dihlKTtuLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxuLmF0dHJpYnV0ZXMubmV4dFBvc2l0aW9uLmxvY2F0aW9uPTEsbi5hdHRyaWJ1dGVzLmFyY0xlbmd0aC5sb2NhdGlvbj0yLG4uYXR0cmlidXRlcy5saW5lV2lkdGgubG9jYXRpb249MyxuLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249NDtmb3IodmFyIGk9bChlKSxhPXUoZSxbe2J1ZmZlcjppLHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDh9LHtidWZmZXI6aSxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZTo0OH0se2J1ZmZlcjppLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjQ4fSx7YnVmZmVyOmksc2l6ZToxLG9mZnNldDoyOCxzdHJpZGU6NDh9LHtidWZmZXI6aSxzaXplOjQsb2Zmc2V0OjMyLHN0cmlkZTo0OH1dKSxzPWQobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSksaD0wO2g8MTAyNDsrK2gpcy5kYXRhW2hdPTI1NTt2YXIgZj1jKGUscyk7Zi53cmFwPWUuUkVQRUFUO3ZhciBwPW5ldyBvKGUscixuLGksYSxmKTtyZXR1cm4gcC51cGRhdGUodCkscH1lLmV4cG9ydHM9czt2YXIgbD10KCJnbC1idWZmZXIiKSx1PXQoImdsLXZhbyIpLGM9dCgiZ2wtdGV4dHVyZTJkIiksaD10KCJnbHNsLXJlYWQtZmxvYXQiKSxmPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksZD10KCJuZGFycmF5IikscD10KCIuL2xpYi9zaGFkZXJzIiksbT1wLmNyZWF0ZVNoYWRlcix2PXAuY3JlYXRlUGlja1NoYWRlcixnPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSx5PW8ucHJvdG90eXBlO3kuaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk8MX0seS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wYWNpdHk+PTF9LHkucGlja1Nsb3RzPTEseS5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx5LmRyYXdUcmFuc3BhcmVudD15LmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMuc2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8Zyx2aWV3OnQudmlld3x8Zyxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8ZyxjbGlwQm91bmRzOmkodGhpcy5jbGlwQm91bmRzKSxkYXNoVGV4dHVyZTp0aGlzLnRleHR1cmUuYmluZCgpLGRhc2hTY2FsZTp0aGlzLmRhc2hTY2FsZS90aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sb3BhY2l0eTp0aGlzLm9wYWNpdHksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpfSx5LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnBpY2tTaGFkZXIsbj10aGlzLnZhbztyLmJpbmQoKSxyLnVuaWZvcm1zPXttb2RlbDp0Lm1vZGVsfHxnLHZpZXc6dC52aWV3fHxnLHByb2plY3Rpb246dC5wcm9qZWN0aW9ufHxnLHBpY2tJZDp0aGlzLnBpY2tJZCxjbGlwQm91bmRzOmkodGhpcy5jbGlwQm91bmRzKSxzY3JlZW5TaGFwZTpbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb30sbi5iaW5kKCksbi5kcmF3KGUuVFJJQU5HTEVfU1RSSVAsdGhpcy52ZXJ0ZXhDb3VudCl9LHkudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5kaXJ0eT0hMDt2YXIgaT0hIXQuY29ubmVjdEdhcHM7ImRhc2hTY2FsZSJpbiB0JiYodGhpcy5kYXNoU2NhbGU9dC5kYXNoU2NhbGUpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSk7dmFyIGE9dC5wb3NpdGlvbnx8dC5wb3NpdGlvbnM7aWYoYSl7dmFyIG89dC5jb2xvcnx8dC5jb2xvcnN8fFswLDAsMCwxXSxzPXQubGluZVdpZHRofHwxLGw9W10sdT1bXSxjPVtdLGg9MCxwPTAsbT1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx2PSExO3Q6Zm9yKGU9MTtlPGEubGVuZ3RoOysrZSl7dmFyIGc9YVtlLTFdLHk9YVtlXTtmb3IodS5wdXNoKGgpLGMucHVzaChnLnNsaWNlKCkpLHI9MDtyPDM7KytyKXtpZihpc05hTihnW3JdKXx8aXNOYU4oeVtyXSl8fCFpc0Zpbml0ZShnW3JdKXx8IWlzRmluaXRlKHlbcl0pKXtpZighaSYmbC5sZW5ndGg+MCl7Zm9yKHZhciBiPTA7YjwyNDsrK2IpbC5wdXNoKGxbbC5sZW5ndGgtMTJdKTtwKz0yLHY9ITB9Y29udGludWUgdH1tWzBdW3JdPU1hdGgubWluKG1bMF1bcl0sZ1tyXSx5W3JdKSxtWzFdW3JdPU1hdGgubWF4KG1bMV1bcl0sZ1tyXSx5W3JdKX12YXIgeCxfO0FycmF5LmlzQXJyYXkob1swXSk/KHg9b1tlLTFdLF89b1tlXSk6eD1fPW8sMz09PXgubGVuZ3RoJiYoeD1beFswXSx4WzFdLHhbMl0sMV0pLDM9PT1fLmxlbmd0aCYmKF89W19bMF0sX1sxXSxfWzJdLDFdKTt2YXIgdzt3PUFycmF5LmlzQXJyYXkocyk/c1tlLTFdOnM7dmFyIE09aDtpZihoKz1uKGcseSksdil7Zm9yKHI9MDtyPDI7KytyKWwucHVzaChnWzBdLGdbMV0sZ1syXSx5WzBdLHlbMV0seVsyXSxNLHcseFswXSx4WzFdLHhbMl0seFszXSk7cCs9Mix2PSExfWwucHVzaChnWzBdLGdbMV0sZ1syXSx5WzBdLHlbMV0seVsyXSxNLHcseFswXSx4WzFdLHhbMl0seFszXSxnWzBdLGdbMV0sZ1syXSx5WzBdLHlbMV0seVsyXSxNLC13LHhbMF0seFsxXSx4WzJdLHhbM10seVswXSx5WzFdLHlbMl0sZ1swXSxnWzFdLGdbMl0saCwtdyxfWzBdLF9bMV0sX1syXSxfWzNdLHlbMF0seVsxXSx5WzJdLGdbMF0sZ1sxXSxnWzJdLGgsdyxfWzBdLF9bMV0sX1syXSxfWzNdKSxwKz00fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShsKSx1LnB1c2goaCksYy5wdXNoKGFbYS5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9bSx0aGlzLnZlcnRleENvdW50PXAsdGhpcy5wb2ludHM9Yyx0aGlzLmFyY0xlbmd0aD11LCJkYXNoZXMiaW4gdCl7dmFyIGs9dC5kYXNoZXMsQT1rLnNsaWNlKCk7Zm9yKEEudW5zaGlmdCgwKSxlPTE7ZTxBLmxlbmd0aDsrK2UpQVtlXT1BW2UtMV0rQVtlXTt2YXIgVD1kKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pO2ZvcihlPTA7ZTwyNTY7KytlKXtmb3Iocj0wO3I8NDsrK3IpVC5zZXQoZSwwLHIsMCk7MSZmLmxlKEEsQVtBLmxlbmd0aC0xXSplLzI1NSk/VC5zZXQoZSwwLDAsMCk6VC5zZXQoZSwwLDAsMjU1KX10aGlzLnRleHR1cmUuc2V0UGl4ZWxzKFQpfX19LHkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpfSx5LnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPWgodC52YWx1ZVswXSx0LnZhbHVlWzFdLHQudmFsdWVbMl0sMCkscj1mLmxlKHRoaXMuYXJjTGVuZ3RoLGUpO2lmKHI8MClyZXR1cm4gbnVsbDtpZihyPT09dGhpcy5hcmNMZW5ndGgubGVuZ3RoLTEpcmV0dXJuIG5ldyBhKHRoaXMuYXJjTGVuZ3RoW3RoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xXSx0aGlzLnBvaW50c1t0aGlzLnBvaW50cy5sZW5ndGgtMV0uc2xpY2UoKSxyKTtmb3IodmFyIG49dGhpcy5wb2ludHNbcl0saT10aGlzLnBvaW50c1tNYXRoLm1pbihyKzEsdGhpcy5wb2ludHMubGVuZ3RoLTEpXSxvPShlLXRoaXMuYXJjTGVuZ3RoW3JdKS8odGhpcy5hcmNMZW5ndGhbcisxXS10aGlzLmFyY0xlbmd0aFtyXSkscz0xLW8sbD1bMCwwLDBdLHU9MDt1PDM7Kyt1KWxbdV09cypuW3VdK28qaVt1XTt2YXIgYz1NYXRoLm1pbihvPC41P3I6cisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gbmV3IGEoZSxsLGMsdGhpcy5wb2ludHNbY10pfX0seyIuL2xpYi9zaGFkZXJzIjoxNjksImJpbmFyeS1zZWFyY2gtYm91bmRzIjo2NCwiZ2wtYnVmZmVyIjoxNTQsImdsLXRleHR1cmUyZCI6MjY1LCJnbC12YW8iOjI2OSwiZ2xzbC1yZWFkLWZsb2F0IjoyNzYsbmRhcnJheTo0NjV9XSwxNzE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH1lLmV4cG9ydHM9bn0se31dLDE3MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLHU9ZVs3XSxjPWVbOF0saD1jKm8tcyp1LGY9LWMqYStzKmwsZD11KmEtbypsLHA9cipoK24qZitpKmQ7cmV0dXJuIHA/KHA9MS9wLHRbMF09aCpwLHRbMV09KC1jKm4raSp1KSpwLHRbMl09KHMqbi1pKm8pKnAsdFszXT1mKnAsdFs0XT0oYypyLWkqbCkqcCx0WzVdPSgtcypyK2kqYSkqcCx0WzZdPWQqcCx0WzddPSgtdSpyK24qbCkqcCx0WzhdPShvKnItbiphKSpwLHQpOm51bGx9ZS5leHBvcnRzPW59LHt9XSwxNzM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlWzldPXRbOV0sZVsxMF09dFsxMF0sZVsxMV09dFsxMV0sZVsxMl09dFsxMl0sZVsxM109dFsxM10sZVsxNF09dFsxNF0sZVsxNV09dFsxNV0sZX1lLmV4cG9ydHM9bn0se31dLDE3NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZS5leHBvcnRzPW59LHt9XSwxNzU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLHU9dFs4XSxjPXRbOV0saD10WzEwXSxmPXRbMTFdLGQ9dFsxMl0scD10WzEzXSxtPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihoKnYtZiptKS0oZSpzLW4qYSkqKGMqdi1mKnApKyhlKmwtaSphKSooYyptLWgqcCkrKHIqcy1uKm8pKih1KnYtZipkKS0ocipsLWkqbykqKHUqbS1oKmQpKyhuKmwtaSpzKSoodSpwLWMqZCl9ZS5leHBvcnRzPW59LHt9XSwxNzY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIrcixzPW4rbixsPWkraSx1PXIqbyxjPW4qbyxoPW4qcyxmPWkqbyxkPWkqcyxwPWkqbCxtPWEqbyx2PWEqcyxnPWEqbDtyZXR1cm4gdFswXT0xLWgtcCx0WzFdPWMrZyx0WzJdPWYtdix0WzNdPTAsdFs0XT1jLWcsdFs1XT0xLXUtcCx0WzZdPWQrbSx0WzddPTAsdFs4XT1mK3YsdFs5XT1kLW0sdFsxMF09MS11LWgsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZS5leHBvcnRzPW59LHt9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLHU9YSthLGM9bipzLGg9bipsLGY9bip1LGQ9aSpsLHA9aSp1LG09YSp1LHY9bypzLGc9bypsLHk9byp1O3JldHVybiB0WzBdPTEtKGQrbSksdFsxXT1oK3ksdFsyXT1mLWcsdFszXT0wLHRbNF09aC15LHRbNV09MS0oYyttKSx0WzZdPXArdix0WzddPTAsdFs4XT1mK2csdFs5XT1wLXYsdFsxMF09MS0oYytkKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH1lLmV4cG9ydHM9bn0se31dLDE3ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fWUuZXhwb3J0cz1ufSx7fV0sMTc5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWVbOV0sZj1lWzEwXSxkPWVbMTFdLHA9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLGc9ZVsxNV0seT1yKnMtbipvLGI9cipsLWkqbyx4PXIqdS1hKm8sXz1uKmwtaSpzLHc9bip1LWEqcyxNPWkqdS1hKmwsaz1jKm0taCpwLEE9Yyp2LWYqcCxUPWMqZy1kKnAsUz1oKnYtZiptLEU9aCpnLWQqbSxMPWYqZy1kKnYsQz15KkwtYipFK3gqUytfKlQtdypBK00qaztyZXR1cm4gQz8oQz0xL0MsdFswXT0ocypMLWwqRSt1KlMpKkMsdFsxXT0oaSpFLW4qTC1hKlMpKkMsdFsyXT0obSpNLXYqdytnKl8pKkMsdFszXT0oZip3LWgqTS1kKl8pKkMsdFs0XT0obCpULW8qTC11KkEpKkMsdFs1XT0ocipMLWkqVCthKkEpKkMsdFs2XT0odip4LXAqTS1nKmIpKkMsdFs3XT0oYypNLWYqeCtkKmIpKkMsdFs4XT0obypFLXMqVCt1KmspKkMsdFs5XT0obipULXIqRS1hKmspKkMsdFsxMF09KHAqdy1tKngrZyp5KSpDLHRbMTFdPShoKngtYyp3LWQqeSkqQyx0WzEyXT0ocypBLW8qUy1sKmspKkMsdFsxM109KHIqUy1uKkEraSprKSpDLHRbMTRdPShtKmItcCpfLXYqeSkqQyx0WzE1XT0oYypfLWgqYitmKnkpKkMsdCk6bnVsbH1lLmV4cG9ydHM9bn0se31dLDE4MDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGEsbyxzLGwsdSxjLGgsZixkLHAsbT1lWzBdLHY9ZVsxXSxnPWVbMl0seT1uWzBdLGI9blsxXSx4PW5bMl0sXz1yWzBdLHc9clsxXSxNPXJbMl07cmV0dXJuIE1hdGguYWJzKG0tXyk8MWUtNiYmTWF0aC5hYnModi13KTwxZS02JiZNYXRoLmFicyhnLU0pPDFlLTY/aSh0KTooaD1tLV8sZj12LXcsZD1nLU0scD0xL01hdGguc3FydChoKmgrZipmK2QqZCksaCo9cCxmKj1wLGQqPXAsYT1iKmQteCpmLG89eCpoLXkqZCxzPXkqZi1iKmgscD1NYXRoLnNxcnQoYSphK28qbytzKnMpLHA/KHA9MS9wLGEqPXAsbyo9cCxzKj1wKTooYT0wLG89MCxzPTApLGw9ZipzLWQqbyx1PWQqYS1oKnMsYz1oKm8tZiphLHA9TWF0aC5zcXJ0KGwqbCt1KnUrYypjKSxwPyhwPTEvcCxsKj1wLHUqPXAsYyo9cCk6KGw9MCx1PTAsYz0wKSx0WzBdPWEsdFsxXT1sLHRbMl09aCx0WzNdPTAsdFs0XT1vLHRbNV09dSx0WzZdPWYsdFs3XT0wLHRbOF09cyx0WzldPWMsdFsxMF09ZCx0WzExXT0wLHRbMTJdPS0oYSptK28qditzKmcpLHRbMTNdPS0obCptK3UqditjKmcpLHRbMTRdPS0oaCptK2YqditkKmcpLHRbMTVdPTEsdCl9dmFyIGk9dCgiLi9pZGVudGl0eSIpO2UuZXhwb3J0cz1ufSx7Ii4vaWRlbnRpdHkiOjE3OH1dLDE4MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PWVbNl0sYz1lWzddLGg9ZVs4XSxmPWVbOV0sZD1lWzEwXSxwPWVbMTFdLG09ZVsxMl0sdj1lWzEzXSxnPWVbMTRdLHk9ZVsxNV0sYj1yWzBdLHg9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPWIqbit4KnMrXypoK3cqbSx0WzFdPWIqaSt4KmwrXypmK3cqdix0WzJdPWIqYSt4KnUrXypkK3cqZyx0WzNdPWIqbyt4KmMrXypwK3cqeSxiPXJbNF0seD1yWzVdLF89cls2XSx3PXJbN10sdFs0XT1iKm4reCpzK18qaCt3Km0sdFs1XT1iKmkreCpsK18qZit3KnYsdFs2XT1iKmEreCp1K18qZCt3KmcsdFs3XT1iKm8reCpjK18qcCt3KnksYj1yWzhdLHg9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT1iKm4reCpzK18qaCt3Km0sdFs5XT1iKmkreCpsK18qZit3KnYsdFsxMF09YiphK3gqdStfKmQrdypnLHRbMTFdPWIqbyt4KmMrXypwK3cqeSxiPXJbMTJdLHg9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPWIqbit4KnMrXypoK3cqbSx0WzEzXT1iKmkreCpsK18qZit3KnYsdFsxNF09YiphK3gqdStfKmQrdypnLHRbMTVdPWIqbyt4KmMrXypwK3cqeSx0fWUuZXhwb3J0cz1ufSx7fV0sMTgyOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fWUuZXhwb3J0cz1ufSx7fV0sMTgzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF8sdyxNLGssQSxULFMsRT1uWzBdLEw9blsxXSxDPW5bMl0sej1NYXRoLnNxcnQoRSpFK0wqTCtDKkMpO3JldHVybiBNYXRoLmFicyh6KTwxZS02P251bGw6KHo9MS96LEUqPXosTCo9eixDKj16LGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLHU9ZVsyXSxjPWVbM10saD1lWzRdLGY9ZVs1XSxkPWVbNl0scD1lWzddLG09ZVs4XSx2PWVbOV0sZz1lWzEwXSx5PWVbMTFdLGI9RSpFKm8rYSx4PUwqRSpvK0MqaSxfPUMqRSpvLUwqaSx3PUUqTCpvLUMqaSxNPUwqTCpvK2Esaz1DKkwqbytFKmksQT1FKkMqbytMKmksVD1MKkMqby1FKmksUz1DKkMqbythLHRbMF09cypiK2gqeCttKl8sdFsxXT1sKmIrZip4K3YqXyx0WzJdPXUqYitkKngrZypfLHRbM109YypiK3AqeCt5Kl8sdFs0XT1zKncraCpNK20qayx0WzVdPWwqdytmKk0rdiprLHRbNl09dSp3K2QqTStnKmssdFs3XT1jKncrcCpNK3kqayx0WzhdPXMqQStoKlQrbSpTLHRbOV09bCpBK2YqVCt2KlMsdFsxMF09dSpBK2QqVCtnKlMsdFsxMV09YypBK3AqVCt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdCl9ZS5leHBvcnRzPW59LHt9XSwxODQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSx1PWVbOF0sYz1lWzldLGg9ZVsxMF0sZj1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK3Uqbix0WzVdPW8qaStjKm4sdFs2XT1zKmkraCpuLHRbN109bCppK2Yqbix0WzhdPXUqaS1hKm4sdFs5XT1jKmktbypuLHRbMTBdPWgqaS1zKm4sdFsxMV09ZippLWwqbix0fWUuZXhwb3J0cz1ufSx7fV0sMTg1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sdT1lWzhdLGM9ZVs5XSxoPWVbMTBdLGY9ZVsxMV07cmV0dXJuIGUhPT10JiYodFs0XT1lWzRdLHRbNV09ZVs1XSx0WzZdPWVbNl0sdFs3XT1lWzddLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaS11Km4sdFsxXT1vKmktYypuLHRbMl09cyppLWgqbix0WzNdPWwqaS1mKm4sdFs4XT1hKm4rdSppLHRbOV09bypuK2MqaSx0WzEwXT1zKm4raCppLHRbMTFdPWwqbitmKmksdH1lLmV4cG9ydHM9bn0se31dLDE4NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLHU9ZVs0XSxjPWVbNV0saD1lWzZdLGY9ZVs3XTtyZXR1cm4gZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaSt1Km4sdFsxXT1vKmkrYypuLHRbMl09cyppK2gqbix0WzNdPWwqaStmKm4sdFs0XT11KmktYSpuLHRbNV09YyppLW8qbix0WzZdPWgqaS1zKm4sdFs3XT1mKmktbCpuLHR9ZS5leHBvcnRzPW59LHt9XSwxODc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fWUuZXhwb3J0cz1ufSx7fV0sMTg4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saSxhLG8scyxsLHUsYyxoLGYsZCxwLG09clswXSx2PXJbMV0sZz1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSptK2VbNF0qditlWzhdKmcrZVsxMl0sdFsxM109ZVsxXSptK2VbNV0qditlWzldKmcrZVsxM10sdFsxNF09ZVsyXSptK2VbNl0qditlWzEwXSpnK2VbMTRdLHRbMTVdPWVbM10qbStlWzddKnYrZVsxMV0qZytlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9ZVs2XSxjPWVbN10saD1lWzhdLGY9ZVs5XSxkPWVbMTBdLHA9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT11LHRbN109Yyx0WzhdPWgsdFs5XT1mLHRbMTBdPWQsdFsxMV09cCx0WzEyXT1uKm0rcyp2K2gqZytlWzEyXSx0WzEzXT1pKm0rbCp2K2YqZytlWzEzXSx0WzE0XT1hKm0rdSp2K2QqZytlWzE0XSx0WzE1XT1vKm0rYyp2K3AqZytlWzE1XSksdH1lLmV4cG9ydHM9bn0se31dLDE4OTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9ZS5leHBvcnRzPW59LHt9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0WzBdPTEvZVswXTticmVhaztjYXNlIDQ6aSh0LGUpO2JyZWFrO2Nhc2UgOTphKHQsZSk7YnJlYWs7Y2FzZSAxNjpvKHQsZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImN1cnJlbnRseSBzdXBwb3J0cyBtYXRyaWNlcyB1cCB0byA0eDQiKX1yZXR1cm4gdH1lLmV4cG9ydHM9bjt2YXIgaT10KCJnbC1tYXQyL2ludmVydCIpLGE9dCgiZ2wtbWF0My9pbnZlcnQiKSxvPXQoImdsLW1hdDQvaW52ZXJ0Iil9LHsiZ2wtbWF0Mi9pbnZlcnQiOjE3MSwiZ2wtbWF0My9pbnZlcnQiOjE3MiwiZ2wtbWF0NC9pbnZlcnQiOjE3OX1dLDE5MTpbZnVuY3Rpb24odCxlLHIpe3IuZ2xNYXRyaXg9dCgiLi9nbC1tYXRyaXgvY29tbW9uLmpzIiksci5tYXQyPXQoIi4vZ2wtbWF0cml4L21hdDIuanMiKSxyLm1hdDJkPXQoIi4vZ2wtbWF0cml4L21hdDJkLmpzIiksci5tYXQzPXQoIi4vZ2wtbWF0cml4L21hdDMuanMiKSxyLm1hdDQ9dCgiLi9nbC1tYXRyaXgvbWF0NC5qcyIpLHIucXVhdD10KCIuL2dsLW1hdHJpeC9xdWF0LmpzIiksci52ZWMyPXQoIi4vZ2wtbWF0cml4L3ZlYzIuanMiKSxyLnZlYzM9dCgiLi9nbC1tYXRyaXgvdmVjMy5qcyIpLHIudmVjND10KCIuL2dsLW1hdHJpeC92ZWM0LmpzIil9LHsiLi9nbC1tYXRyaXgvY29tbW9uLmpzIjoxOTIsIi4vZ2wtbWF0cml4L21hdDIuanMiOjE5MywiLi9nbC1tYXRyaXgvbWF0MmQuanMiOjE5NCwiLi9nbC1tYXRyaXgvbWF0My5qcyI6MTk1LCIuL2dsLW1hdHJpeC9tYXQ0LmpzIjoxOTYsIi4vZ2wtbWF0cml4L3F1YXQuanMiOjE5NywiLi9nbC1tYXRyaXgvdmVjMi5qcyI6MTk4LCIuL2dsLW1hdHJpeC92ZWMzLmpzIjoxOTksIi4vZ2wtbWF0cml4L3ZlYzQuanMiOjIwMH1dLDE5MjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O24uRVBTSUxPTj0xZS02LG4uQVJSQVlfVFlQRT0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0MzJBcnJheT9GbG9hdDMyQXJyYXk6QXJyYXksbi5SQU5ET009TWF0aC5yYW5kb20sbi5FTkFCTEVfU0lNRD0hMSxuLlNJTURfQVZBSUxBQkxFPW4uQVJSQVlfVFlQRT09PUZsb2F0MzJBcnJheSYmIlNJTUQiaW4gdGhpcyxuLlVTRV9TSU1EPW4uRU5BQkxFX1NJTUQmJm4uU0lNRF9BVkFJTEFCTEUsbi5zZXRNYXRyaXhBcnJheVR5cGU9ZnVuY3Rpb24odCl7bi5BUlJBWV9UWVBFPXR9O3ZhciBpPU1hdGguUEkvMTgwO24udG9SYWRpYW49ZnVuY3Rpb24odCl7cmV0dXJuIHQqaX0sbi5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModC1lKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnModCksTWF0aC5hYnMoZSkpfSxlLmV4cG9ydHM9bn0se31dLDE5MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9LGkuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bmV3IG4uQVJSQVlfVFlQRSg0KTtyZXR1cm4gYVswXT10LGFbMV09ZSxhWzJdPXIsYVszXT1pLGF9LGkuc2V0PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0fSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXt2YXIgcj1lWzFdO3RbMV09ZVsyXSx0WzJdPXJ9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzJdLHRbMl09ZVsxXSx0WzNdPWVbM107cmV0dXJuIHR9LGkuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqYS1pKm47cmV0dXJuIG8/KG89MS9vLHRbMF09YSpvLHRbMV09LW4qbyx0WzJdPS1pKm8sdFszXT1yKm8sdCk6bnVsbH0saS5hZGpvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdFswXT1lWzNdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0WzNdPXIsdH0saS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXtyZXR1cm4gdFswXSp0WzNdLXRbMl0qdFsxXX0saS5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdLHU9clsyXSxjPXJbM107cmV0dXJuIHRbMF09bipzK2EqbCx0WzFdPWkqcytvKmwsdFsyXT1uKnUrYSpjLHRbM109aSp1K28qYyx0fSxpLm11bD1pLm11bHRpcGx5LGkucm90YXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdO3JldHVybiB0WzBdPW4qcyx0WzFdPWkqcyx0WzJdPWEqbCx0WzNdPW8qbCx0fSxpLmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT0tcix0WzNdPW4sdH0saS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPWVbMV0sdH0saS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuIm1hdDIoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIpIn0saS5mcm9iPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codFswXSwyKStNYXRoLnBvdyh0WzFdLDIpK01hdGgucG93KHRbMl0sMikrTWF0aC5wb3codFszXSwyKSl9LGkuTERVPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzJdPW5bMl0vblswXSxyWzBdPW5bMF0sclsxXT1uWzFdLHJbM109blszXS10WzJdKnJbMV0sW3QsZSxyXX0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdFszXT1lWzNdLXJbM10sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz1lWzBdLGw9ZVsxXSx1PWVbMl0sYz1lWzNdO3JldHVybiBNYXRoLmFicyhyLXMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGktbCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGwpKSYmTWF0aC5hYnMoYS11KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnModSkpJiZNYXRoLmFicyhvLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyhjKSl9LGkubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0fSxpLm11bHRpcGx5U2NhbGFyQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHR9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTJ9XSwxOTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2NvbW1vbi5qcyIpLGk9e307aS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbi5BUlJBWV9UWVBFKDYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT0wLHRbNV09MCx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGV9LGkuY29weT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFs0XT1lWzRdLHRbNV09ZVs1XSx0fSxpLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT0wLHRbNV09MCx0fSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIsaSxhLG8pe3ZhciBzPW5ldyBuLkFSUkFZX1RZUEUoNik7cmV0dXJuIHNbMF09dCxzWzFdPWUsc1syXT1yLHNbM109aSxzWzRdPWEsc1s1XT1vLHN9LGkuc2V0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0WzNdPWksdFs0XT1hLHRbNV09byx0fSxpLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPXIqYS1uKmk7cmV0dXJuIGw/KGw9MS9sLHRbMF09YSpsLHRbMV09LW4qbCx0WzJdPS1pKmwsdFszXT1yKmwsdFs0XT0oaSpzLWEqbykqbCx0WzVdPShuKm8tcipzKSpsLHQpOm51bGx9LGkuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0qdFszXS10WzFdKnRbMl19LGkubXVsdGlwbHk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PXJbMF0sYz1yWzFdLGg9clsyXSxmPXJbM10sZD1yWzRdLHA9cls1XTtyZXR1cm4gdFswXT1uKnUrYSpjLHRbMV09aSp1K28qYyx0WzJdPW4qaCthKmYsdFszXT1pKmgrbypmLHRbNF09bipkK2EqcCtzLHRbNV09aSpkK28qcCtsLHR9LGkubXVsPWkubXVsdGlwbHksaS5yb3RhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PU1hdGguc2luKHIpLGM9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bipjK2EqdSx0WzFdPWkqYytvKnUsdFsyXT1uKi11K2EqYyx0WzNdPWkqLXUrbypjLHRbNF09cyx0WzVdPWwsdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9clswXSxjPXJbMV07cmV0dXJuIHRbMF09bip1LHRbMV09aSp1LHRbMl09YSpjLHRbM109bypjLHRbNF09cyx0WzVdPWwsdH0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PXJbMF0sYz1yWzFdO3JldHVybiB0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1uKnUrYSpjK3MsdFs1XT1pKnUrbypjK2wsdH0saS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09LXIsdFszXT1uLHRbNF09MCx0WzVdPTAsdH0saS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPWVbMV0sdFs0XT0wLHRbNV09MCx0fSxpLmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT1lWzBdLHRbNV09ZVsxXSx0fSxpLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4ibWF0MmQoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIsICIrdFs0XSsiLCAiK3RbNV0rIikifSxpLmZyb2I9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0WzBdLDIpK01hdGgucG93KHRbMV0sMikrTWF0aC5wb3codFsyXSwyKStNYXRoLnBvdyh0WzNdLDIpK01hdGgucG93KHRbNF0sMikrTWF0aC5wb3codFs1XSwyKSsxKX0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0WzRdPWVbNF0rcls0XSx0WzVdPWVbNV0rcls1XSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdFszXT1lWzNdLXJbM10sdFs0XT1lWzRdLXJbNF0sdFs1XT1lWzVdLXJbNV0sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLm11bHRpcGx5U2NhbGFyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdFs0XT1lWzRdKnIsdFs1XT1lWzVdKnIsdH0saS5tdWx0aXBseVNjYWxhckFuZEFkZD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0qbix0WzFdPWVbMV0rclsxXSpuLHRbMl09ZVsyXStyWzJdKm4sdFszXT1lWzNdK3JbM10qbix0WzRdPWVbNF0rcls0XSpuLHRbNV09ZVs1XStyWzVdKm4sdH0saS5leGFjdEVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXSYmdFs0XT09PWVbNF0mJnRbNV09PT1lWzVdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz10WzRdLGw9dFs1XSx1PWVbMF0sYz1lWzFdLGg9ZVsyXSxmPWVbM10sZD1lWzRdLHA9ZVs1XTtyZXR1cm4gTWF0aC5hYnMoci11KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMociksTWF0aC5hYnModSkpJiZNYXRoLmFicyhpLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhjKSkmJk1hdGguYWJzKGEtaCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKGgpKSYmTWF0aC5hYnMoby1mKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMobyksTWF0aC5hYnMoZikpJiZNYXRoLmFicyhzLWQpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhzKSxNYXRoLmFicyhkKSkmJk1hdGguYWJzKGwtcCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGwpLE1hdGguYWJzKHApKX0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5Mn1dLDE5NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoOSk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGkuZnJvbU1hdDQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzRdLHRbNF09ZVs1XSx0WzVdPWVbNl0sdFs2XT1lWzhdLHRbN109ZVs5XSx0WzhdPWVbMTBdLHR9LGkuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4uQVJSQVlfVFlQRSg5KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZX0saS5jb3B5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHR9LGkuZnJvbVZhbHVlcz1mdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSl7dmFyIGM9bmV3IG4uQVJSQVlfVFlQRSg5KTtyZXR1cm4gY1swXT10LGNbMV09ZSxjWzJdPXIsY1szXT1pLGNbNF09YSxjWzVdPW8sY1s2XT1zLGNbN109bCxjWzhdPXUsY30saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsdSl7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0WzRdPWEsdFs1XT1vLHRbNl09cyx0WzddPWwsdFs4XT11LHR9LGkuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVs1XTt0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109cix0WzVdPWVbN10sdFs2XT1uLHRbN109aX1lbHNlIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdO3JldHVybiB0fSxpLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWMqby1zKnUsZj0tYyphK3MqbCxkPXUqYS1vKmwscD1yKmgrbipmK2kqZDtyZXR1cm4gcD8ocD0xL3AsdFswXT1oKnAsdFsxXT0oLWMqbitpKnUpKnAsdFsyXT0ocypuLWkqbykqcCx0WzNdPWYqcCx0WzRdPShjKnItaSpsKSpwLHRbNV09KC1zKnIraSphKSpwLHRbNl09ZCpwLHRbN109KC11KnIrbipsKSpwLHRbOF09KG8qci1uKmEpKnAsdCk6bnVsbH0saS5hZGpvaW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSx1PWVbN10sYz1lWzhdO3JldHVybiB0WzBdPW8qYy1zKnUsdFsxXT1pKnUtbipjLHRbMl09bipzLWkqbyx0WzNdPXMqbC1hKmMsdFs0XT1yKmMtaSpsLHRbNV09aSphLXIqcyx0WzZdPWEqdS1vKmwsdFs3XT1uKmwtcip1LHRbOF09cipvLW4qYSx0fSxpLmRldGVybWluYW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLHU9dFs4XTtyZXR1cm4gZSoodSphLW8qbCkrciooLXUqaStvKnMpK24qKGwqaS1hKnMpfSxpLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sdT1lWzZdLGM9ZVs3XSxoPWVbOF0sZj1yWzBdLGQ9clsxXSxwPXJbMl0sbT1yWzNdLHY9cls0XSxnPXJbNV0seT1yWzZdLGI9cls3XSx4PXJbOF07cmV0dXJuIHRbMF09ZipuK2QqbytwKnUsdFsxXT1mKmkrZCpzK3AqYyx0WzJdPWYqYStkKmwrcCpoLHRbM109bSpuK3YqbytnKnUsdFs0XT1tKmkrdipzK2cqYyx0WzVdPW0qYSt2KmwrZypoLHRbNl09eSpuK2Iqbyt4KnUsdFs3XT15KmkrYipzK3gqYyx0WzhdPXkqYStiKmwreCpoLHR9LGkubXVsPWkubXVsdGlwbHksaS50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSx1PWVbNl0sYz1lWzddLGg9ZVs4XSxmPXJbMF0sZD1yWzFdO3JldHVybiB0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWYqbitkKm8rdSx0WzddPWYqaStkKnMrYyx0WzhdPWYqYStkKmwraCx0fSxpLnJvdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9ZVs2XSxjPWVbN10saD1lWzhdLGY9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1kKm4rZipvLHRbMV09ZCppK2Yqcyx0WzJdPWQqYStmKmwsdFszXT1kKm8tZipuLHRbNF09ZCpzLWYqaSx0WzVdPWQqbC1mKmEsdFs2XT11LHRbN109Yyx0WzhdPWgsdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIHRbMF09biplWzBdLHRbMV09biplWzFdLHRbMl09biplWzJdLHRbM109aSplWzNdLHRbNF09aSplWzRdLHRbNV09aSplWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHR9LGkuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTEsdFs1XT0wLHRbNl09ZVswXSx0WzddPWVbMV0sdFs4XT0xLHR9LGkuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0tcix0WzRdPW4sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGkuZnJvbVNjYWxpbmc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09ZVsxXSx0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0saS5mcm9tTWF0MmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPTAsdFszXT1lWzJdLHRbNF09ZVszXSx0WzVdPTAsdFs2XT1lWzRdLHRbN109ZVs1XSx0WzhdPTEsdH0saS5mcm9tUXVhdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksdT1yKm8sYz1uKm8saD1uKnMsZj1pKm8sZD1pKnMscD1pKmwsbT1hKm8sdj1hKnMsZz1hKmw7cmV0dXJuIHRbMF09MS1oLXAsdFszXT1jLWcsdFs2XT1mK3YsdFsxXT1jK2csdFs0XT0xLXUtcCx0WzddPWQtbSx0WzJdPWYtdix0WzVdPWQrbSx0WzhdPTEtdS1oLHR9LGkubm9ybWFsRnJvbU1hdDQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLHU9ZVs3XSxjPWVbOF0saD1lWzldLGY9ZVsxMF0sZD1lWzExXSxwPWVbMTJdLG09ZVsxM10sdj1lWzE0XSxnPWVbMTVdLHk9cipzLW4qbyxiPXIqbC1pKm8seD1yKnUtYSpvLF89bipsLWkqcyx3PW4qdS1hKnMsTT1pKnUtYSpsLGs9YyptLWgqcCxBPWMqdi1mKnAsVD1jKmctZCpwLFM9aCp2LWYqbSxFPWgqZy1kKm0sTD1mKmctZCp2LEM9eSpMLWIqRSt4KlMrXypULXcqQStNKms7cmV0dXJuIEM/KEM9MS9DLHRbMF09KHMqTC1sKkUrdSpTKSpDLHRbMV09KGwqVC1vKkwtdSpBKSpDLHRbMl09KG8qRS1zKlQrdSprKSpDLHRbM109KGkqRS1uKkwtYSpTKSpDLHRbNF09KHIqTC1pKlQrYSpBKSpDLHRbNV09KG4qVC1yKkUtYSprKSpDLHRbNl09KG0qTS12KncrZypfKSpDLHRbN109KHYqeC1wKk0tZypiKSpDLHRbOF09KHAqdy1tKngrZyp5KSpDLHQpOm51bGx9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQzKCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIpIn0saS5mcm9iPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codFswXSwyKStNYXRoLnBvdyh0WzFdLDIpK01hdGgucG93KHRbMl0sMikrTWF0aC5wb3codFszXSwyKStNYXRoLnBvdyh0WzRdLDIpK01hdGgucG93KHRbNV0sMikrTWF0aC5wb3codFs2XSwyKStNYXRoLnBvdyh0WzddLDIpK01hdGgucG93KHRbOF0sMikpfSxpLmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHRbNF09ZVs0XStyWzRdLHRbNV09ZVs1XStyWzVdLHRbNl09ZVs2XStyWzZdLHRbN109ZVs3XStyWzddLHRbOF09ZVs4XStyWzhdLHR9LGkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0WzRdPWVbNF0tcls0XSx0WzVdPWVbNV0tcls1XSx0WzZdPWVbNl0tcls2XSx0WzddPWVbN10tcls3XSx0WzhdPWVbOF0tcls4XSx0fSxpLnN1Yj1pLnN1YnRyYWN0LGkubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0WzRdPWVbNF0qcix0WzVdPWVbNV0qcix0WzZdPWVbNl0qcix0WzddPWVbN10qcix0WzhdPWVbOF0qcix0fSxpLm11bHRpcGx5U2NhbGFyQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHRbNF09ZVs0XStyWzRdKm4sdFs1XT1lWzVdK3JbNV0qbix0WzZdPWVbNl0rcls2XSpuLHRbN109ZVs3XStyWzddKm4sdFs4XT1lWzhdK3JbOF0qbix0fSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV0mJnRbNl09PT1lWzZdJiZ0WzddPT09ZVs3XSYmdFs4XT09PWVbOF19LGkuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXSxzPXRbNF0sbD10WzVdLHU9dFs2XSxjPXRbN10saD10WzhdLGY9ZVswXSxkPWVbMV0scD1lWzJdLG09ZVszXSx2PWVbNF0sZz1lWzVdLHk9dFs2XSxiPWVbN10seD1lWzhdO3JldHVybiBNYXRoLmFicyhyLWYpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhmKSkmJk1hdGguYWJzKGktZCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGQpKSYmTWF0aC5hYnMoYS1wKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnMocCkpJiZNYXRoLmFicyhvLW0pPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyhtKSkmJk1hdGguYWJzKHMtdik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHMpLE1hdGguYWJzKHYpKSYmTWF0aC5hYnMobC1nKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMobCksTWF0aC5hYnMoZykpJiZNYXRoLmFicyh1LXkpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyh1KSxNYXRoLmFicyh5KSkmJk1hdGguYWJzKGMtYik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGMpLE1hdGguYWJzKGIpKSYmTWF0aC5hYnMoaC14KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaCksTWF0aC5hYnMoeCkpfSxlLmV4cG9ydHM9aX0seyIuL2NvbW1vbi5qcyI6MTkyfV0sMTk2OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jb21tb24uanMiKSxpPXtzY2FsYXI6e30sU0lNRDp7fX07aS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbi5BUlJBWV9UWVBFKDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGkuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4uQVJSQVlfVFlQRSgxNik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LGkuZnJvbVZhbHVlcz1mdW5jdGlvbih0LGUscixpLGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2KXt2YXIgZz1uZXcgbi5BUlJBWV9UWVBFKDE2KTtyZXR1cm4gZ1swXT10LGdbMV09ZSxnWzJdPXIsZ1szXT1pLGdbNF09YSxnWzVdPW8sZ1s2XT1zLGdbN109bCxnWzhdPXUsZ1s5XT1jLGdbMTBdPWgsZ1sxMV09ZixnWzEyXT1kLGdbMTNdPXAsZ1sxNF09bSxnWzE1XT12LGd9LGkuc2V0PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLHUsYyxoLGYsZCxwLG0sdil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdFsyXT1uLHRbM109aSx0WzRdPWEsdFs1XT1vLHRbNl09cyx0WzddPWwsdFs4XT11LHRbOV09Yyx0WzEwXT1oLHRbMTFdPWYsdFsxMl09ZCx0WzEzXT1wLHRbMTRdPW0sdFsxNV09dix0fSxpLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5zY2FsYXIudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpe3ZhciByPWVbMV0sbj1lWzJdLGk9ZVszXSxhPWVbNl0sbz1lWzddLHM9ZVsxMV07dFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09cix0WzZdPWVbOV0sdFs3XT1lWzEzXSx0WzhdPW4sdFs5XT1hLHRbMTFdPWVbMTRdLHRbMTJdPWksdFsxM109byx0WzE0XT1zfWVsc2UgdFswXT1lWzBdLHRbMV09ZVs0XSx0WzJdPWVbOF0sdFszXT1lWzEyXSx0WzRdPWVbMV0sdFs1XT1lWzVdLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09ZVsyXSx0WzldPWVbNl0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxNF0sdFsxMl09ZVszXSx0WzEzXT1lWzddLHRbMTRdPWVbMTFdLHRbMTVdPWVbMTVdO3JldHVybiB0fSxpLlNJTUQudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsdSxjLGg7cmV0dXJuIHI9U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLGk9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKSxvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUocixuLDAsMSw0LDUpLHM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShpLGEsMCwxLDQsNSksbD1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8scywwLDIsNCw2KSx1PVNJTUQuRmxvYXQzMng0LnNodWZmbGUobyxzLDEsMyw1LDcpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxsKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsdSksbz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHIsbiwyLDMsNiw3KSxzPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoaSxhLDIsMyw2LDcpLGM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShvLHMsMCwyLDQsNiksaD1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8scywxLDMsNSw3KSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDgsYyksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwxMixoKSx0fSxpLnRyYW5zcG9zZT1uLlVTRV9TSU1EP2kuU0lNRC50cmFuc3Bvc2U6aS5zY2FsYXIudHJhbnNwb3NlLGkuc2NhbGFyLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWVbOV0sZj1lWzEwXSxkPWVbMTFdLHA9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLGc9ZVsxNV0seT1yKnMtbipvLGI9cipsLWkqbyx4PXIqdS1hKm8sXz1uKmwtaSpzLHc9bip1LWEqcyxNPWkqdS1hKmwsaz1jKm0taCpwLEE9Yyp2LWYqcCxUPWMqZy1kKnAsUz1oKnYtZiptLEU9aCpnLWQqbSxMPWYqZy1kKnYsQz15KkwtYipFK3gqUytfKlQtdypBK00qaztyZXR1cm4gQz8oQz0xL0MsdFswXT0ocypMLWwqRSt1KlMpKkMsdFsxXT0oaSpFLW4qTC1hKlMpKkMsdFsyXT0obSpNLXYqdytnKl8pKkMsdFszXT0oZip3LWgqTS1kKl8pKkMsdFs0XT0obCpULW8qTC11KkEpKkMsdFs1XT0ocipMLWkqVCthKkEpKkMsdFs2XT0odip4LXAqTS1nKmIpKkMsdFs3XT0oYypNLWYqeCtkKmIpKkMsdFs4XT0obypFLXMqVCt1KmspKkMsdFs5XT0obipULXIqRS1hKmspKkMsdFsxMF09KHAqdy1tKngrZyp5KSpDLHRbMTFdPShoKngtYyp3LWQqeSkqQyx0WzEyXT0ocypBLW8qUy1sKmspKkMsdFsxM109KHIqUy1uKkEraSprKSpDLHRbMTRdPShtKmItcCpfLXYqeSkqQyx0WzE1XT0oYypfLWgqYitmKnkpKkMsdCk6bnVsbH0saS5TSU1ELmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLHUsYyxoLGY9U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLGQ9U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLHA9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLG09U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKTtyZXR1cm4gbz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKGYsZCwwLDEsNCw1KSxuPVNJTUQuRmxvYXQzMng0LnNodWZmbGUocCxtLDAsMSw0LDUpLHI9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShvLG4sMCwyLDQsNiksbj1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG4sbywxLDMsNSw3KSxvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoZixkLDIsMyw2LDcpLGE9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShwLG0sMiwzLDYsNyksaT1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKG8sYSwwLDIsNCw2KSxhPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoYSxvLDEsMyw1LDcpLG89U0lNRC5GbG9hdDMyeDQubXVsKGksYSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMikscz1TSU1ELkZsb2F0MzJ4NC5tdWwobixvKSxsPVNJTUQuRmxvYXQzMng0Lm11bChyLG8pLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDIsMywwLDEpLHM9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChuLG8pLHMpLGw9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChyLG8pLGwpLGw9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShsLDIsMywwLDEpLG89U0lNRC5GbG9hdDMyeDQubXVsKG4saSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMikscz1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsbykscyksYz1TSU1ELkZsb2F0MzJ4NC5tdWwocixvKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDMsMCwxKSxzPVNJTUQuRmxvYXQzMng0LnN1YihzLFNJTUQuRmxvYXQzMng0Lm11bChhLG8pKSxjPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwocixvKSxjKSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywyLDMsMCwxKSxvPVNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG4sMiwzLDAsMSksYSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMiksaT1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGksMiwzLDAsMSkscz1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGksbykscyksdT1TSU1ELkZsb2F0MzJ4NC5tdWwocixvKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDMsMCwxKSxzPVNJTUQuRmxvYXQzMng0LnN1YihzLFNJTUQuRmxvYXQzMng0Lm11bChpLG8pKSx1PVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwocixvKSx1KSx1PVNJTUQuRmxvYXQzMng0LnN3aXp6bGUodSwyLDMsMCwxKSxvPVNJTUQuRmxvYXQzMng0Lm11bChyLG4pLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDEsMCwzLDIpLHU9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChhLG8pLHUpLGM9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChpLG8pLGMpLG89U0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDIsMywwLDEpLHU9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChhLG8pLHUpLGM9U0lNRC5GbG9hdDMyeDQuc3ViKGMsU0lNRC5GbG9hdDMyeDQubXVsKGksbykpLG89U0lNRC5GbG9hdDMyeDQubXVsKHIsYSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMSwwLDMsMiksbD1TSU1ELkZsb2F0MzJ4NC5zdWIobCxTSU1ELkZsb2F0MzJ4NC5tdWwoaSxvKSksdT1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKG4sbyksdSksbz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMiwzLDAsMSksbD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGksbyksbCksdT1TSU1ELkZsb2F0MzJ4NC5zdWIodSxTSU1ELkZsb2F0MzJ4NC5tdWwobixvKSksbz1TSU1ELkZsb2F0MzJ4NC5tdWwocixpKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywxLDAsMywyKSxsPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoYSxvKSxsKSxjPVNJTUQuRmxvYXQzMng0LnN1YihjLFNJTUQuRmxvYXQzMng0Lm11bChuLG8pKSxvPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDMsMCwxKSxsPVNJTUQuRmxvYXQzMng0LnN1YihsLFNJTUQuRmxvYXQzMng0Lm11bChhLG8pKSxjPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwobixvKSxjKSxoPVNJTUQuRmxvYXQzMng0Lm11bChyLHMpLGg9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoaCwyLDMsMCwxKSxoKSxoPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGgsMSwwLDMsMiksaCksbz1TSU1ELkZsb2F0MzJ4NC5yZWNpcHJvY2FsQXBwcm94aW1hdGlvbihoKSxoPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5hZGQobyxvKSxTSU1ELkZsb2F0MzJ4NC5tdWwoaCxTSU1ELkZsb2F0MzJ4NC5tdWwobyxvKSkpLChoPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoaCwwLDAsMCwwKSk/KFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxTSU1ELkZsb2F0MzJ4NC5tdWwoaCxzKSksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LFNJTUQuRmxvYXQzMng0Lm11bChoLGwpKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDgsU0lNRC5GbG9hdDMyeDQubXVsKGgsdSkpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMTIsU0lNRC5GbG9hdDMyeDQubXVsKGgsYykpLHQpOm51bGx9LGkuaW52ZXJ0PW4uVVNFX1NJTUQ/aS5TSU1ELmludmVydDppLnNjYWxhci5pbnZlcnQsaS5zY2FsYXIuYWRqb2ludD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1lWzRdLHM9ZVs1XSxsPWVbNl0sdT1lWzddLGM9ZVs4XSxoPWVbOV0sZj1lWzEwXSxkPWVbMTFdLHA9ZVsxMl0sbT1lWzEzXSx2PWVbMTRdLGc9ZVsxNV07cmV0dXJuIHRbMF09cyooZipnLWQqdiktaCoobCpnLXUqdikrbSoobCpkLXUqZiksdFsxXT0tKG4qKGYqZy1kKnYpLWgqKGkqZy1hKnYpK20qKGkqZC1hKmYpKSx0WzJdPW4qKGwqZy11KnYpLXMqKGkqZy1hKnYpK20qKGkqdS1hKmwpLHRbM109LShuKihsKmQtdSpmKS1zKihpKmQtYSpmKStoKihpKnUtYSpsKSksdFs0XT0tKG8qKGYqZy1kKnYpLWMqKGwqZy11KnYpK3AqKGwqZC11KmYpKSx0WzVdPXIqKGYqZy1kKnYpLWMqKGkqZy1hKnYpK3AqKGkqZC1hKmYpLHRbNl09LShyKihsKmctdSp2KS1vKihpKmctYSp2KStwKihpKnUtYSpsKSksdFs3XT1yKihsKmQtdSpmKS1vKihpKmQtYSpmKStjKihpKnUtYSpsKSx0WzhdPW8qKGgqZy1kKm0pLWMqKHMqZy11Km0pK3AqKHMqZC11KmgpLHRbOV09LShyKihoKmctZCptKS1jKihuKmctYSptKStwKihuKmQtYSpoKSksdFsxMF09cioocypnLXUqbSktbyoobipnLWEqbSkrcCoobip1LWEqcyksdFsxMV09LShyKihzKmQtdSpoKS1vKihuKmQtYSpoKStjKihuKnUtYSpzKSksdFsxMl09LShvKihoKnYtZiptKS1jKihzKnYtbCptKStwKihzKmYtbCpoKSksdFsxM109ciooaCp2LWYqbSktYyoobip2LWkqbSkrcCoobipmLWkqaCksdFsxNF09LShyKihzKnYtbCptKS1vKihuKnYtaSptKStwKihuKmwtaSpzKSksdFsxNV09cioocypmLWwqaCktbyoobipmLWkqaCkrYyoobipsLWkqcyksdH0saS5TSU1ELmFkam9pbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCx1LGMsaCxmLGQscCxyPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwwKSxuPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxpPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KSxhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwxMik7cmV0dXJuIGM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShyLG4sMCwxLDQsNSkscz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKGksYSwwLDEsNCw1KSxvPVNJTUQuRmxvYXQzMng0LnNodWZmbGUoYyxzLDAsMiw0LDYpLHM9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShzLGMsMSwzLDUsNyksYz1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHIsbiwyLDMsNiw3KSx1PVNJTUQuRmxvYXQzMng0LnNodWZmbGUoaSxhLDIsMyw2LDcpLGw9U0lNRC5GbG9hdDMyeDQuc2h1ZmZsZShjLHUsMCwyLDQsNiksdT1TSU1ELkZsb2F0MzJ4NC5zaHVmZmxlKHUsYywxLDMsNSw3KSxjPVNJTUQuRmxvYXQzMng0Lm11bChsLHUpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDEsMCwzLDIpLGg9U0lNRC5GbG9hdDMyeDQubXVsKHMsYyksZj1TSU1ELkZsb2F0MzJ4NC5tdWwobyxjKSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywyLDMsMCwxKSxoPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwocyxjKSxoKSxmPVNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwobyxjKSxmKSxmPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZiwyLDMsMCwxKSxjPVNJTUQuRmxvYXQzMng0Lm11bChzLGwpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDEsMCwzLDIpLGg9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bCh1LGMpLGgpLHA9U0lNRC5GbG9hdDMyeDQubXVsKG8sYyksCmM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDIsMywwLDEpLGg9U0lNRC5GbG9hdDMyeDQuc3ViKGgsU0lNRC5GbG9hdDMyeDQubXVsKHUsYykpLHA9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLGMpLHApLHA9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShwLDIsMywwLDEpLGM9U0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywyLDMsMCwxKSx1KSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywxLDAsMywyKSxsPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUobCwyLDMsMCwxKSxoPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwobCxjKSxoKSxkPVNJTUQuRmxvYXQzMng0Lm11bChvLGMpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDIsMywwLDEpLGg9U0lNRC5GbG9hdDMyeDQuc3ViKGgsU0lNRC5GbG9hdDMyeDQubXVsKGwsYykpLGQ9U0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLGMpLGQpLGQ9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShkLDIsMywwLDEpLGM9U0lNRC5GbG9hdDMyeDQubXVsKG8scyksYz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGMsMSwwLDMsMiksZD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKHUsYyksZCkscD1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKGwsYykscCksYz1TSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGMsMiwzLDAsMSksZD1TSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKHUsYyksZCkscD1TSU1ELkZsb2F0MzJ4NC5zdWIocCxTSU1ELkZsb2F0MzJ4NC5tdWwobCxjKSksYz1TSU1ELkZsb2F0MzJ4NC5tdWwobyx1KSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywxLDAsMywyKSxmPVNJTUQuRmxvYXQzMng0LnN1YihmLFNJTUQuRmxvYXQzMng0Lm11bChsLGMpKSxkPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwocyxjKSxkKSxjPVNJTUQuRmxvYXQzMng0LnN3aXp6bGUoYywyLDMsMCwxKSxmPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwobCxjKSxmKSxkPVNJTUQuRmxvYXQzMng0LnN1YihkLFNJTUQuRmxvYXQzMng0Lm11bChzLGMpKSxjPVNJTUQuRmxvYXQzMng0Lm11bChvLGwpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDEsMCwzLDIpLGY9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bCh1LGMpLGYpLHA9U0lNRC5GbG9hdDMyeDQuc3ViKHAsU0lNRC5GbG9hdDMyeDQubXVsKHMsYykpLGM9U0lNRC5GbG9hdDMyeDQuc3dpenpsZShjLDIsMywwLDEpLGY9U0lNRC5GbG9hdDMyeDQuc3ViKGYsU0lNRC5GbG9hdDMyeDQubXVsKHUsYykpLHA9U0lNRC5GbG9hdDMyeDQuYWRkKFNJTUQuRmxvYXQzMng0Lm11bChzLGMpLHApLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxoKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsZiksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw4LGQpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMTIscCksdH0saS5hZGpvaW50PW4uVVNFX1NJTUQ/aS5TSU1ELmFkam9pbnQ6aS5zY2FsYXIuYWRqb2ludCxpLmRldGVybWluYW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM10sYT10WzRdLG89dFs1XSxzPXRbNl0sbD10WzddLHU9dFs4XSxjPXRbOV0saD10WzEwXSxmPXRbMTFdLGQ9dFsxMl0scD10WzEzXSxtPXRbMTRdLHY9dFsxNV07cmV0dXJuKGUqby1yKmEpKihoKnYtZiptKS0oZSpzLW4qYSkqKGMqdi1mKnApKyhlKmwtaSphKSooYyptLWgqcCkrKHIqcy1uKm8pKih1KnYtZipkKS0ocipsLWkqbykqKHUqbS1oKmQpKyhuKmwtaSpzKSoodSpwLWMqZCl9LGkuU0lNRC5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLGk9U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLG89U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKSxzPVNJTUQuRmxvYXQzMng0LmxvYWQociwwKSxsPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDAsMCwwLDApLG4pLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDEsMSwxLDEpLGkpLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDIsMiwyLDIpLGEpLFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHMsMywzLDMsMyksbykpKSk7U0lNRC5GbG9hdDMyeDQuc3RvcmUodCwwLGwpO3ZhciB1PVNJTUQuRmxvYXQzMng0LmxvYWQociw0KSxjPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDAsMCwwLDApLG4pLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDEsMSwxLDEpLGkpLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZSh1LDIsMiwyLDIpLGEpLFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHUsMywzLDMsMyksbykpKSk7U0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LGMpO3ZhciBoPVNJTUQuRmxvYXQzMng0LmxvYWQociw4KSxmPVNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShoLDAsMCwwLDApLG4pLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShoLDEsMSwxLDEpLGkpLFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShoLDIsMiwyLDIpLGEpLFNJTUQuRmxvYXQzMng0Lm11bChTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKGgsMywzLDMsMyksbykpKSk7U0lNRC5GbG9hdDMyeDQuc3RvcmUodCw4LGYpO3ZhciBkPVNJTUQuRmxvYXQzMng0LmxvYWQociwxMikscD1TSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwwLDAsMCwwKSxuKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwxLDEsMSwxKSxpKSxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKFNJTUQuRmxvYXQzMng0LnN3aXp6bGUoZCwyLDIsMiwyKSxhKSxTSU1ELkZsb2F0MzJ4NC5tdWwoU0lNRC5GbG9hdDMyeDQuc3dpenpsZShkLDMsMywzLDMpLG8pKSkpO3JldHVybiBTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDEyLHApLHR9LGkuc2NhbGFyLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sdT1lWzZdLGM9ZVs3XSxoPWVbOF0sZj1lWzldLGQ9ZVsxMF0scD1lWzExXSxtPWVbMTJdLHY9ZVsxM10sZz1lWzE0XSx5PWVbMTVdLGI9clswXSx4PXJbMV0sXz1yWzJdLHc9clszXTtyZXR1cm4gdFswXT1iKm4reCpzK18qaCt3Km0sdFsxXT1iKmkreCpsK18qZit3KnYsdFsyXT1iKmEreCp1K18qZCt3KmcsdFszXT1iKm8reCpjK18qcCt3KnksYj1yWzRdLHg9cls1XSxfPXJbNl0sdz1yWzddLHRbNF09YipuK3gqcytfKmgrdyptLHRbNV09YippK3gqbCtfKmYrdyp2LHRbNl09YiphK3gqdStfKmQrdypnLHRbN109YipvK3gqYytfKnArdyp5LGI9cls4XSx4PXJbOV0sXz1yWzEwXSx3PXJbMTFdLHRbOF09YipuK3gqcytfKmgrdyptLHRbOV09YippK3gqbCtfKmYrdyp2LHRbMTBdPWIqYSt4KnUrXypkK3cqZyx0WzExXT1iKm8reCpjK18qcCt3KnksYj1yWzEyXSx4PXJbMTNdLF89clsxNF0sdz1yWzE1XSx0WzEyXT1iKm4reCpzK18qaCt3Km0sdFsxM109YippK3gqbCtfKmYrdyp2LHRbMTRdPWIqYSt4KnUrXypkK3cqZyx0WzE1XT1iKm8reCpjK18qcCt3KnksdH0saS5tdWx0aXBseT1uLlVTRV9TSU1EP2kuU0lNRC5tdWx0aXBseTppLnNjYWxhci5tdWx0aXBseSxpLm11bD1pLm11bHRpcGx5LGkuc2NhbGFyLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLHUsYyxoLGYsZCxwLG09clswXSx2PXJbMV0sZz1yWzJdO3JldHVybiBlPT09dD8odFsxMl09ZVswXSptK2VbNF0qditlWzhdKmcrZVsxMl0sdFsxM109ZVsxXSptK2VbNV0qditlWzldKmcrZVsxM10sdFsxNF09ZVsyXSptK2VbNl0qditlWzEwXSpnK2VbMTRdLHRbMTVdPWVbM10qbStlWzddKnYrZVsxMV0qZytlWzE1XSk6KG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPWVbNF0sbD1lWzVdLHU9ZVs2XSxjPWVbN10saD1lWzhdLGY9ZVs5XSxkPWVbMTBdLHA9ZVsxMV0sdFswXT1uLHRbMV09aSx0WzJdPWEsdFszXT1vLHRbNF09cyx0WzVdPWwsdFs2XT11LHRbN109Yyx0WzhdPWgsdFs5XT1mLHRbMTBdPWQsdFsxMV09cCx0WzEyXT1uKm0rcyp2K2gqZytlWzEyXSx0WzEzXT1pKm0rbCp2K2YqZytlWzEzXSx0WzE0XT1hKm0rdSp2K2QqZytlWzE0XSx0WzE1XT1vKm0rYyp2K3AqZytlWzE1XSksdH0saS5TSU1ELnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLGk9U0lNRC5GbG9hdDMyeDQubG9hZChlLDQpLGE9U0lNRC5GbG9hdDMyeDQubG9hZChlLDgpLG89U0lNRC5GbG9hdDMyeDQubG9hZChlLDEyKSxzPVNJTUQuRmxvYXQzMng0KHJbMF0sclsxXSxyWzJdLDApO2UhPT10JiYodFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdKSxuPVNJTUQuRmxvYXQzMng0Lm11bChuLFNJTUQuRmxvYXQzMng0LnN3aXp6bGUocywwLDAsMCwwKSksaT1TSU1ELkZsb2F0MzJ4NC5tdWwoaSxTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKHMsMSwxLDEsMSkpLGE9U0lNRC5GbG9hdDMyeDQubXVsKGEsU0lNRC5GbG9hdDMyeDQuc3dpenpsZShzLDIsMiwyLDIpKTt2YXIgbD1TSU1ELkZsb2F0MzJ4NC5hZGQobixTSU1ELkZsb2F0MzJ4NC5hZGQoaSxTSU1ELkZsb2F0MzJ4NC5hZGQoYSxvKSkpO3JldHVybiBTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDEyLGwpLHR9LGkudHJhbnNsYXRlPW4uVVNFX1NJTUQ/aS5TSU1ELnRyYW5zbGF0ZTppLnNjYWxhci50cmFuc2xhdGUsaS5zY2FsYXIuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LGkuU0lNRC5zY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89U0lNRC5GbG9hdDMyeDQoclswXSxyWzFdLHJbMl0sMCk7cmV0dXJuIG49U0lNRC5GbG9hdDMyeDQubG9hZChlLDApLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxTSU1ELkZsb2F0MzJ4NC5tdWwobixTSU1ELkZsb2F0MzJ4NC5zd2l6emxlKG8sMCwwLDAsMCkpKSxpPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsU0lNRC5GbG9hdDMyeDQubXVsKGksU0lNRC5GbG9hdDMyeDQuc3dpenpsZShvLDEsMSwxLDEpKSksYT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsOCksU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw4LFNJTUQuRmxvYXQzMng0Lm11bChhLFNJTUQuRmxvYXQzMng0LnN3aXp6bGUobywyLDIsMiwyKSkpLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LGkuc2NhbGU9bi5VU0VfU0lNRD9pLlNJTUQuc2NhbGU6aS5zY2FsYXIuc2NhbGUsaS5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2LGcseSxiLHgsXyx3LE0sayxBLFQsUyxFLEw9aVswXSxDPWlbMV0sej1pWzJdLEk9TWF0aC5zcXJ0KEwqTCtDKkMreip6KTtyZXR1cm4gTWF0aC5hYnMoSSk8bi5FUFNJTE9OP251bGw6KEk9MS9JLEwqPUksQyo9SSx6Kj1JLGE9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxzPTEtbyxsPWVbMF0sdT1lWzFdLGM9ZVsyXSxoPWVbM10sZj1lWzRdLGQ9ZVs1XSxwPWVbNl0sbT1lWzddLHY9ZVs4XSxnPWVbOV0seT1lWzEwXSxiPWVbMTFdLHg9TCpMKnMrbyxfPUMqTCpzK3oqYSx3PXoqTCpzLUMqYSxNPUwqQypzLXoqYSxrPUMqQypzK28sQT16KkMqcytMKmEsVD1MKnoqcytDKmEsUz1DKnoqcy1MKmEsRT16KnoqcytvLHRbMF09bCp4K2YqXyt2KncsdFsxXT11KngrZCpfK2cqdyx0WzJdPWMqeCtwKl8reSp3LHRbM109aCp4K20qXytiKncsdFs0XT1sKk0rZiprK3YqQSx0WzVdPXUqTStkKmsrZypBLHRbNl09YypNK3Aqayt5KkEsdFs3XT1oKk0rbSprK2IqQSx0WzhdPWwqVCtmKlMrdipFLHRbOV09dSpUK2QqUytnKkUsdFsxMF09YypUK3AqUyt5KkUsdFsxMV09aCpUK20qUytiKkUsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdCl9LGkuc2NhbGFyLnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzRdLG89ZVs1XSxzPWVbNl0sbD1lWzddLHU9ZVs4XSxjPWVbOV0saD1lWzEwXSxmPWVbMTFdO3JldHVybiBlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFs0XT1hKmkrdSpuLHRbNV09byppK2Mqbix0WzZdPXMqaStoKm4sdFs3XT1sKmkrZipuLHRbOF09dSppLWEqbix0WzldPWMqaS1vKm4sdFsxMF09aCppLXMqbix0WzExXT1mKmktbCpuLHR9LGkuU0lNRC5yb3RhdGVYPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLnNpbihyKSksaT1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLmNvcyhyKSk7ZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3ZhciBhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw0KSxvPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KTtyZXR1cm4gU0lNRC5GbG9hdDMyeDQuc3RvcmUodCw0LFNJTUQuRmxvYXQzMng0LmFkZChTSU1ELkZsb2F0MzJ4NC5tdWwoYSxpKSxTSU1ELkZsb2F0MzJ4NC5tdWwobyxuKSkpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxTSU1ELkZsb2F0MzJ4NC5zdWIoU0lNRC5GbG9hdDMyeDQubXVsKG8saSksU0lNRC5GbG9hdDMyeDQubXVsKGEsbikpKSx0fSxpLnJvdGF0ZVg9bi5VU0VfU0lNRD9pLlNJTUQucm90YXRlWDppLnNjYWxhci5yb3RhdGVYLGkuc2NhbGFyLnJvdGF0ZVk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLHU9ZVs4XSxjPWVbOV0saD1lWzEwXSxmPWVbMTFdO3JldHVybiBlIT09dCYmKHRbNF09ZVs0XSx0WzVdPWVbNV0sdFs2XT1lWzZdLHRbN109ZVs3XSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSksdFswXT1hKmktdSpuLHRbMV09byppLWMqbix0WzJdPXMqaS1oKm4sdFszXT1sKmktZipuLHRbOF09YSpuK3UqaSx0WzldPW8qbitjKmksdFsxMF09cypuK2gqaSx0WzExXT1sKm4rZippLHR9LGkuU0lNRC5yb3RhdGVZPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLnNpbihyKSksaT1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLmNvcyhyKSk7ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3ZhciBhPVNJTUQuRmxvYXQzMng0LmxvYWQoZSwwKSxvPVNJTUQuRmxvYXQzMng0LmxvYWQoZSw4KTtyZXR1cm4gU0lNRC5GbG9hdDMyeDQuc3RvcmUodCwwLFNJTUQuRmxvYXQzMng0LnN1YihTSU1ELkZsb2F0MzJ4NC5tdWwoYSxpKSxTSU1ELkZsb2F0MzJ4NC5tdWwobyxuKSkpLFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsOCxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsbiksU0lNRC5GbG9hdDMyeDQubXVsKG8saSkpKSx0fSxpLnJvdGF0ZVk9bi5VU0VfU0lNRD9pLlNJTUQucm90YXRlWTppLnNjYWxhci5yb3RhdGVZLGkuc2NhbGFyLnJvdGF0ZVo9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLHU9ZVs0XSxjPWVbNV0saD1lWzZdLGY9ZVs3XTtyZXR1cm4gZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaSt1Km4sdFsxXT1vKmkrYypuLHRbMl09cyppK2gqbix0WzNdPWwqaStmKm4sdFs0XT11KmktYSpuLHRbNV09YyppLW8qbix0WzZdPWgqaS1zKm4sdFs3XT1mKmktbCpuLHR9LGkuU0lNRC5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLnNpbihyKSksaT1TSU1ELkZsb2F0MzJ4NC5zcGxhdChNYXRoLmNvcyhyKSk7ZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKTt2YXIgYT1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsMCksbz1TSU1ELkZsb2F0MzJ4NC5sb2FkKGUsNCk7cmV0dXJuIFNJTUQuRmxvYXQzMng0LnN0b3JlKHQsMCxTSU1ELkZsb2F0MzJ4NC5hZGQoU0lNRC5GbG9hdDMyeDQubXVsKGEsaSksU0lNRC5GbG9hdDMyeDQubXVsKG8sbikpKSxTSU1ELkZsb2F0MzJ4NC5zdG9yZSh0LDQsU0lNRC5GbG9hdDMyeDQuc3ViKFNJTUQuRmxvYXQzMng0Lm11bChvLGkpLFNJTUQuRmxvYXQzMng0Lm11bChhLG4pKSksdH0saS5yb3RhdGVaPW4uVVNFX1NJTUQ/aS5TSU1ELnJvdGF0ZVo6aS5zY2FsYXIucm90YXRlWixpLmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPWVbMF0sdFsxM109ZVsxXSx0WzE0XT1lWzJdLHRbMTVdPTEsdH0saS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZVsxXSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZVsyXSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbyxzPXJbMF0sbD1yWzFdLHU9clsyXSxjPU1hdGguc3FydChzKnMrbCpsK3UqdSk7cmV0dXJuIE1hdGguYWJzKGMpPG4uRVBTSUxPTj9udWxsOihjPTEvYyxzKj1jLGwqPWMsdSo9YyxpPU1hdGguc2luKGUpLGE9TWF0aC5jb3MoZSksbz0xLWEsdFswXT1zKnMqbythLHRbMV09bCpzKm8rdSppLHRbMl09dSpzKm8tbCppLHRbM109MCx0WzRdPXMqbCpvLXUqaSx0WzVdPWwqbCpvK2EsdFs2XT11KmwqbytzKmksdFs3XT0wLHRbOF09cyp1Km8rbCppLHRbOV09bCp1Km8tcyppLHRbMTBdPXUqdSpvK2EsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHQpfSxpLmZyb21YUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09bix0WzZdPXIsdFs3XT0wLHRbOF09MCx0WzldPS1yLHRbMTBdPW4sdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGkuZnJvbVlSb3RhdGlvbj1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPTAsdFsyXT0tcix0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09cix0WzldPTAsdFsxMF09bix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0saS5mcm9tWlJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT1uLHRbMV09cix0WzJdPTAsdFszXT0wLHRbNF09LXIsdFs1XT1uLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9bituLGw9aStpLHU9YSthLGM9bipzLGg9bipsLGY9bip1LGQ9aSpsLHA9aSp1LG09YSp1LHY9bypzLGc9bypsLHk9byp1O3JldHVybiB0WzBdPTEtKGQrbSksdFsxXT1oK3ksdFsyXT1mLWcsdFszXT0wLHRbNF09aC15LHRbNV09MS0oYyttKSx0WzZdPXArdix0WzddPTAsdFs4XT1mK2csdFs5XT1wLXYsdFsxMF09MS0oYytkKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH0saS5nZXRUcmFuc2xhdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMTJdLHRbMV09ZVsxM10sdFsyXT1lWzE0XSx0fSxpLmdldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXStlWzVdK2VbMTBdLG49MDtyZXR1cm4gcj4wPyhuPTIqTWF0aC5zcXJ0KHIrMSksdFszXT0uMjUqbix0WzBdPShlWzZdLWVbOV0pL24sdFsxXT0oZVs4XS1lWzJdKS9uLHRbMl09KGVbMV0tZVs0XSkvbik6ZVswXT5lWzVdJmVbMF0+ZVsxMF0/KG49MipNYXRoLnNxcnQoMStlWzBdLWVbNV0tZVsxMF0pLHRbM109KGVbNl0tZVs5XSkvbix0WzBdPS4yNSpuLHRbMV09KGVbMV0rZVs0XSkvbix0WzJdPShlWzhdK2VbMl0pL24pOmVbNV0+ZVsxMF0/KG49MipNYXRoLnNxcnQoMStlWzVdLWVbMF0tZVsxMF0pLHRbM109KGVbOF0tZVsyXSkvbix0WzBdPShlWzFdK2VbNF0pL24sdFsxXT0uMjUqbix0WzJdPShlWzZdK2VbOV0pL24pOihuPTIqTWF0aC5zcXJ0KDErZVsxMF0tZVswXS1lWzVdKSx0WzNdPShlWzFdLWVbNF0pL24sdFswXT0oZVs4XStlWzJdKS9uLHRbMV09KGVbNl0rZVs5XSkvbix0WzJdPS4yNSpuKSx0fSxpLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdLHM9ZVszXSxsPWkraSx1PWErYSxjPW8rbyxoPWkqbCxmPWkqdSxkPWkqYyxwPWEqdSxtPWEqYyx2PW8qYyxnPXMqbCx5PXMqdSxiPXMqYyx4PW5bMF0sXz1uWzFdLHc9blsyXTtyZXR1cm4gdFswXT0oMS0ocCt2KSkqeCx0WzFdPShmK2IpKngsdFsyXT0oZC15KSp4LHRbM109MCx0WzRdPShmLWIpKl8sdFs1XT0oMS0oaCt2KSkqXyx0WzZdPShtK2cpKl8sdFs3XT0wLHRbOF09KGQreSkqdyx0WzldPShtLWcpKncsdFsxMF09KDEtKGgrcCkpKncsdFsxMV09MCx0WzEyXT1yWzBdLHRbMTNdPXJbMV0sdFsxNF09clsyXSx0WzE1XT0xLHR9LGkuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZU9yaWdpbj1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sdT1hK2EsYz1vK28saD1zK3MsZj1hKnUsZD1hKmMscD1hKmgsbT1vKmMsdj1vKmgsZz1zKmgseT1sKnUsYj1sKmMseD1sKmgsXz1uWzBdLHc9blsxXSxNPW5bMl0saz1pWzBdLEE9aVsxXSxUPWlbMl07cmV0dXJuIHRbMF09KDEtKG0rZykpKl8sdFsxXT0oZCt4KSpfLHRbMl09KHAtYikqXyx0WzNdPTAsdFs0XT0oZC14KSp3LHRbNV09KDEtKGYrZykpKncsdFs2XT0odit5KSp3LHRbN109MCx0WzhdPShwK2IpKk0sdFs5XT0odi15KSpNLHRbMTBdPSgxLShmK20pKSpNLHRbMTFdPTAsdFsxMl09clswXStrLSh0WzBdKmsrdFs0XSpBK3RbOF0qVCksdFsxM109clsxXStBLSh0WzFdKmsrdFs1XSpBK3RbOV0qVCksdFsxNF09clsyXStULSh0WzJdKmsrdFs2XSpBK3RbMTBdKlQpLHRbMTVdPTEsdH0saS5mcm9tUXVhdD1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yK3Iscz1uK24sbD1pK2ksdT1yKm8sYz1uKm8saD1uKnMsZj1pKm8sZD1pKnMscD1pKmwsbT1hKm8sdj1hKnMsZz1hKmw7cmV0dXJuIHRbMF09MS1oLXAsdFsxXT1jK2csdFsyXT1mLXYsdFszXT0wLHRbNF09Yy1nLHRbNV09MS11LXAsdFs2XT1kK20sdFs3XT0wLHRbOF09Zit2LHRbOV09ZC1tLHRbMTBdPTEtdS1oLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxpLmZydXN0dW09ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9MS8oci1lKSxsPTEvKGktbiksdT0xLyhhLW8pO3JldHVybiB0WzBdPTIqYSpzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTIqYSpsLHRbNl09MCx0WzddPTAsdFs4XT0ocitlKSpzLHRbOV09KGkrbikqbCx0WzEwXT0obythKSp1LHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1vKmEqMip1LHRbMTVdPTAsdH0saS5wZXJzcGVjdGl2ZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEvTWF0aC50YW4oZS8yKSxvPTEvKG4taSk7cmV0dXJuIHRbMF09YS9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPShpK24pKm8sdFsxMV09LTEsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTIqaSpuKm8sdFsxNV09MCx0fSxpLnBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPU1hdGgudGFuKGUudXBEZWdyZWVzKk1hdGguUEkvMTgwKSxhPU1hdGgudGFuKGUuZG93bkRlZ3JlZXMqTWF0aC5QSS8xODApLG89TWF0aC50YW4oZS5sZWZ0RGVncmVlcypNYXRoLlBJLzE4MCkscz1NYXRoLnRhbihlLnJpZ2h0RGVncmVlcypNYXRoLlBJLzE4MCksbD0yLyhvK3MpLHU9Mi8oaSthKTtyZXR1cm4gdFswXT1sLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPXUsdFs2XT0wLHRbN109MCx0WzhdPS0oby1zKSpsKi41LHRbOV09KGktYSkqdSouNSx0WzEwXT1uLyhyLW4pLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1uKnIvKHItbiksdFsxNV09MCx0fSxpLm9ydGhvPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKGUtciksbD0xLyhuLWkpLHU9MS8oYS1vKTtyZXR1cm4gdFswXT0tMipzLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmwsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqdSx0WzExXT0wLHRbMTJdPShlK3IpKnMsdFsxM109KGkrbikqbCx0WzE0XT0obythKSp1LHRbMTVdPTEsdH0saS5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG8scyxsLHUsYyxoLGYsZCxwLG0sdj1lWzBdLGc9ZVsxXSx5PWVbMl0sYj1hWzBdLHg9YVsxXSxfPWFbMl0sdz1yWzBdLE09clsxXSxrPXJbMl07cmV0dXJuIE1hdGguYWJzKHYtdyk8bi5FUFNJTE9OJiZNYXRoLmFicyhnLU0pPG4uRVBTSUxPTiYmTWF0aC5hYnMoeS1rKTxuLkVQU0lMT04/aS5pZGVudGl0eSh0KTooZj12LXcsZD1nLU0scD15LWssbT0xL01hdGguc3FydChmKmYrZCpkK3AqcCksZio9bSxkKj1tLHAqPW0sbz14KnAtXypkLHM9XypmLWIqcCxsPWIqZC14KmYsbT1NYXRoLnNxcnQobypvK3MqcytsKmwpLG0/KG09MS9tLG8qPW0scyo9bSxsKj1tKToobz0wLHM9MCxsPTApLHU9ZCpsLXAqcyxjPXAqby1mKmwsaD1mKnMtZCpvLG09TWF0aC5zcXJ0KHUqdStjKmMraCpoKSxtPyhtPTEvbSx1Kj1tLGMqPW0saCo9bSk6KHU9MCxjPTAsaD0wKSx0WzBdPW8sdFsxXT11LHRbMl09Zix0WzNdPTAsdFs0XT1zLHRbNV09Yyx0WzZdPWQsdFs3XT0wLHRbOF09bCx0WzldPWgsdFsxMF09cCx0WzExXT0wLHRbMTJdPS0obyp2K3MqZytsKnkpLHRbMTNdPS0odSp2K2MqZytoKnkpLHRbMTRdPS0oZip2K2QqZytwKnkpLHRbMTVdPTEsdCl9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQ0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIsICIrdFs5XSsiLCAiK3RbMTBdKyIsICIrdFsxMV0rIiwgIit0WzEyXSsiLCAiK3RbMTNdKyIsICIrdFsxNF0rIiwgIit0WzE1XSsiKSJ9LGkuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikrTWF0aC5wb3codFs0XSwyKStNYXRoLnBvdyh0WzVdLDIpK01hdGgucG93KHRbNl0sMikrTWF0aC5wb3codFs3XSwyKStNYXRoLnBvdyh0WzhdLDIpK01hdGgucG93KHRbOV0sMikrTWF0aC5wb3codFsxMF0sMikrTWF0aC5wb3codFsxMV0sMikrTWF0aC5wb3codFsxMl0sMikrTWF0aC5wb3codFsxM10sMikrTWF0aC5wb3codFsxNF0sMikrTWF0aC5wb3codFsxNV0sMikpfSxpLmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHRbM109ZVszXStyWzNdLHRbNF09ZVs0XStyWzRdLHRbNV09ZVs1XStyWzVdLHRbNl09ZVs2XStyWzZdLHRbN109ZVs3XStyWzddLHRbOF09ZVs4XStyWzhdLHRbOV09ZVs5XStyWzldLHRbMTBdPWVbMTBdK3JbMTBdLHRbMTFdPWVbMTFdK3JbMTFdLHRbMTJdPWVbMTJdK3JbMTJdLHRbMTNdPWVbMTNdK3JbMTNdLHRbMTRdPWVbMTRdK3JbMTRdLHRbMTVdPWVbMTVdK3JbMTVdLHR9LGkuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0WzRdPWVbNF0tcls0XSx0WzVdPWVbNV0tcls1XSx0WzZdPWVbNl0tcls2XSx0WzddPWVbN10tcls3XSx0WzhdPWVbOF0tcls4XSx0WzldPWVbOV0tcls5XSx0WzEwXT1lWzEwXS1yWzEwXSx0WzExXT1lWzExXS1yWzExXSx0WzEyXT1lWzEyXS1yWzEyXSx0WzEzXT1lWzEzXS1yWzEzXSx0WzE0XT1lWzE0XS1yWzE0XSx0WzE1XT1lWzE1XS1yWzE1XSx0fSxpLnN1Yj1pLnN1YnRyYWN0LGkubXVsdGlwbHlTY2FsYXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0WzNdPWVbM10qcix0WzRdPWVbNF0qcix0WzVdPWVbNV0qcix0WzZdPWVbNl0qcix0WzddPWVbN10qcix0WzhdPWVbOF0qcix0WzldPWVbOV0qcix0WzEwXT1lWzEwXSpyLHRbMTFdPWVbMTFdKnIsdFsxMl09ZVsxMl0qcix0WzEzXT1lWzEzXSpyLHRbMTRdPWVbMTRdKnIsdFsxNV09ZVsxNV0qcix0fSxpLm11bHRpcGx5U2NhbGFyQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0WzNdPWVbM10rclszXSpuLHRbNF09ZVs0XStyWzRdKm4sdFs1XT1lWzVdK3JbNV0qbix0WzZdPWVbNl0rcls2XSpuLHRbN109ZVs3XStyWzddKm4sdFs4XT1lWzhdK3JbOF0qbix0WzldPWVbOV0rcls5XSpuLHRbMTBdPWVbMTBdK3JbMTBdKm4sdFsxMV09ZVsxMV0rclsxMV0qbix0WzEyXT1lWzEyXStyWzEyXSpuLHRbMTNdPWVbMTNdK3JbMTNdKm4sdFsxNF09ZVsxNF0rclsxNF0qbix0WzE1XT1lWzE1XStyWzE1XSpuLHR9LGkuZXhhY3RFcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM10mJnRbNF09PT1lWzRdJiZ0WzVdPT09ZVs1XSYmdFs2XT09PWVbNl0mJnRbN109PT1lWzddJiZ0WzhdPT09ZVs4XSYmdFs5XT09PWVbOV0mJnRbMTBdPT09ZVsxMF0mJnRbMTFdPT09ZVsxMV0mJnRbMTJdPT09ZVsxMl0mJnRbMTNdPT09ZVsxM10mJnRbMTRdPT09ZVsxNF0mJnRbMTVdPT09ZVsxNV19LGkuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXSxzPXRbNF0sbD10WzVdLHU9dFs2XSxjPXRbN10saD10WzhdLGY9dFs5XSxkPXRbMTBdLHA9dFsxMV0sbT10WzEyXSx2PXRbMTNdLGc9dFsxNF0seT10WzE1XSxiPWVbMF0seD1lWzFdLF89ZVsyXSx3PWVbM10sTT1lWzRdLGs9ZVs1XSxBPWVbNl0sVD1lWzddLFM9ZVs4XSxFPWVbOV0sTD1lWzEwXSxDPWVbMTFdLHo9ZVsxMl0sST1lWzEzXSxEPWVbMTRdLFA9ZVsxNV07cmV0dXJuIE1hdGguYWJzKHItYik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKGIpKSYmTWF0aC5hYnMoaS14KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMoeCkpJiZNYXRoLmFicyhhLV8pPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhfKSkmJk1hdGguYWJzKG8tdyk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKG8pLE1hdGguYWJzKHcpKSYmTWF0aC5hYnMocy1NKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMocyksTWF0aC5hYnMoTSkpJiZNYXRoLmFicyhsLWspPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhsKSxNYXRoLmFicyhrKSkmJk1hdGguYWJzKHUtQSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHUpLE1hdGguYWJzKEEpKSYmTWF0aC5hYnMoYy1UKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYyksTWF0aC5hYnMoVCkpJiZNYXRoLmFicyhoLVMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhoKSxNYXRoLmFicyhTKSkmJk1hdGguYWJzKGYtRSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGYpLE1hdGguYWJzKEUpKSYmTWF0aC5hYnMoZC1MKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoZCksTWF0aC5hYnMoTCkpJiZNYXRoLmFicyhwLUMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhwKSxNYXRoLmFicyhDKSkmJk1hdGguYWJzKG0teik8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKG0pLE1hdGguYWJzKHopKSYmTWF0aC5hYnModi1JKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnModiksTWF0aC5hYnMoSSkpJiZNYXRoLmFicyhnLUQpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhnKSxNYXRoLmFicyhEKSkmJk1hdGguYWJzKHktUCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHkpLE1hdGguYWJzKFApKX0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5Mn1dLDE5NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT10KCIuL21hdDMuanMiKSxhPXQoIi4vdmVjMy5qcyIpLG89dCgiLi92ZWM0LmpzIikscz17fTtzLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxzLnJvdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgdD1hLmNyZWF0ZSgpLGU9YS5mcm9tVmFsdWVzKDEsMCwwKSxyPWEuZnJvbVZhbHVlcygwLDEsMCk7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgbD1hLmRvdChpLG8pO3JldHVybiBsPC0uOTk5OTk5PyhhLmNyb3NzKHQsZSxpKSxhLmxlbmd0aCh0KTwxZS02JiZhLmNyb3NzKHQscixpKSxhLm5vcm1hbGl6ZSh0LHQpLHMuc2V0QXhpc0FuZ2xlKG4sdCxNYXRoLlBJKSxuKTpsPi45OTk5OTk/KG5bMF09MCxuWzFdPTAsblsyXT0wLG5bM109MSxuKTooYS5jcm9zcyh0LGksbyksblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT0xK2wscy5ub3JtYWxpemUobixuKSl9fSgpLHMuc2V0QXhlcz1mdW5jdGlvbigpe3ZhciB0PWkuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGkpe3JldHVybiB0WzBdPW5bMF0sdFszXT1uWzFdLHRbNl09blsyXSx0WzFdPWlbMF0sdFs0XT1pWzFdLHRbN109aVsyXSx0WzJdPS1yWzBdLHRbNV09LXJbMV0sdFs4XT0tclsyXSxzLm5vcm1hbGl6ZShlLHMuZnJvbU1hdDMoZSx0KSl9fSgpLHMuY2xvbmU9by5jbG9uZSxzLmZyb21WYWx1ZXM9by5mcm9tVmFsdWVzLHMuY29weT1vLmNvcHkscy5zZXQ9by5zZXQscy5pZGVudGl0eT1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0xLHR9LHMuc2V0QXhpc0FuZ2xlPWZ1bmN0aW9uKHQsZSxyKXtyKj0uNTt2YXIgbj1NYXRoLnNpbihyKTtyZXR1cm4gdFswXT1uKmVbMF0sdFsxXT1uKmVbMV0sdFsyXT1uKmVbMl0sdFszXT1NYXRoLmNvcyhyKSx0fSxzLmdldEF4aXNBbmdsZT1mdW5jdGlvbih0LGUpe3ZhciByPTIqTWF0aC5hY29zKGVbM10pLG49TWF0aC5zaW4oci8yKTtyZXR1cm4gMCE9bj8odFswXT1lWzBdL24sdFsxXT1lWzFdL24sdFsyXT1lWzJdL24pOih0WzBdPTEsdFsxXT0wLHRbMl09MCkscn0scy5hZGQ9by5hZGQscy5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPXJbMF0sbD1yWzFdLHU9clsyXSxjPXJbM107cmV0dXJuIHRbMF09bipjK28qcytpKnUtYSpsLHRbMV09aSpjK28qbCthKnMtbip1LHRbMl09YSpjK28qdStuKmwtaSpzLHRbM109bypjLW4qcy1pKmwtYSp1LHR9LHMubXVsPXMubXVsdGlwbHkscy5zY2FsZT1vLnNjYWxlLHMucm90YXRlWD1mdW5jdGlvbih0LGUscil7cio9LjU7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXSxzPU1hdGguc2luKHIpLGw9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bipsK28qcyx0WzFdPWkqbCthKnMsdFsyXT1hKmwtaSpzLHRbM109bypsLW4qcyx0fSxzLnJvdGF0ZVk9ZnVuY3Rpb24odCxlLHIpe3IqPS41O3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1NYXRoLnNpbihyKSxsPU1hdGguY29zKHIpO3JldHVybiB0WzBdPW4qbC1hKnMsdFsxXT1pKmwrbypzLHRbMl09YSpsK24qcyx0WzNdPW8qbC1pKnMsdH0scy5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyKXtyKj0uNTt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwraSpzLHRbMV09aSpsLW4qcyx0WzJdPWEqbCtvKnMsdFszXT1vKmwtYSpzLHR9LHMuY2FsY3VsYXRlVz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXTtyZXR1cm4gdFswXT1yLHRbMV09bix0WzJdPWksdFszXT1NYXRoLnNxcnQoTWF0aC5hYnMoMS1yKnItbipuLWkqaSkpLHR9LHMuZG90PW8uZG90LHMubGVycD1vLmxlcnAscy5zbGVycD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLHU9ZVswXSxjPWVbMV0saD1lWzJdLGY9ZVszXSxkPXJbMF0scD1yWzFdLG09clsyXSx2PXJbM107cmV0dXJuIGE9dSpkK2MqcCtoKm0rZip2LGE8MCYmKGE9LWEsZD0tZCxwPS1wLG09LW0sdj0tdiksMS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKSx0WzBdPXMqdStsKmQsdFsxXT1zKmMrbCpwLHRbMl09cypoK2wqbSx0WzNdPXMqZitsKnYsdH0scy5zcWxlcnA9ZnVuY3Rpb24oKXt2YXIgdD1zLmNyZWF0ZSgpLGU9cy5jcmVhdGUoKTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxvLGwpe3JldHVybiBzLnNsZXJwKHQsbixvLGwpLHMuc2xlcnAoZSxpLGEsbCkscy5zbGVycChyLHQsZSwyKmwqKDEtbCkpLHJ9fSgpLHMuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqcituKm4raSppK2EqYSxzPW8/MS9vOjA7cmV0dXJuIHRbMF09LXIqcyx0WzFdPS1uKnMsdFsyXT0taSpzLHRbM109YSpzLHR9LHMuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109ZVszXSx0fSxzLmxlbmd0aD1vLmxlbmd0aCxzLmxlbj1zLmxlbmd0aCxzLnNxdWFyZWRMZW5ndGg9by5zcXVhcmVkTGVuZ3RoLHMuc3FyTGVuPXMuc3F1YXJlZExlbmd0aCxzLm5vcm1hbGl6ZT1vLm5vcm1hbGl6ZSxzLmZyb21NYXQzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lWzBdK2VbNF0rZVs4XTtpZihuPjApcj1NYXRoLnNxcnQobisxKSx0WzNdPS41KnIscj0uNS9yLHRbMF09KGVbNV0tZVs3XSkqcix0WzFdPShlWzZdLWVbMl0pKnIsdFsyXT0oZVsxXS1lWzNdKSpyO2Vsc2V7dmFyIGk9MDtlWzRdPmVbMF0mJihpPTEpLGVbOF0+ZVszKmkraV0mJihpPTIpO3ZhciBhPShpKzEpJTMsbz0oaSsyKSUzO3I9TWF0aC5zcXJ0KGVbMyppK2ldLWVbMyphK2FdLWVbMypvK29dKzEpLHRbaV09LjUqcixyPS41L3IsdFszXT0oZVszKmErb10tZVszKm8rYV0pKnIsdFthXT0oZVszKmEraV0rZVszKmkrYV0pKnIsdFtvXT0oZVszKm8raV0rZVszKmkrb10pKnJ9cmV0dXJuIHR9LHMuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJxdWF0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiKSJ9LHMuZXhhY3RFcXVhbHM9by5leGFjdEVxdWFscyxzLmVxdWFscz1vLmVxdWFscyxlLmV4cG9ydHM9c30seyIuL2NvbW1vbi5qcyI6MTkyLCIuL21hdDMuanMiOjE5NSwiLi92ZWMzLmpzIjoxOTksIi4vdmVjNC5qcyI6MjAwfV0sMTk4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jb21tb24uanMiKSxpPXt9O2kuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG4uQVJSQVlfVFlQRSgyKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoMik7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZX0saS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG4uQVJSQVlfVFlQRSgyKTtyZXR1cm4gclswXT10LHJbMV09ZSxyfSxpLmNvcHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0fSxpLnNldD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZSx0WzFdPXIsdH0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdH0saS5tdWw9aS5tdWx0aXBseSxpLmRpdmlkZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHR9LGkuZGl2PWkuZGl2aWRlLGkuY2VpbD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguY2VpbChlWzBdKSx0WzFdPU1hdGguY2VpbChlWzFdKSx0fSxpLmZsb29yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdH0saS5taW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHR9LGkubWF4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0fSxpLnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHR9LGkuc2NhbGVBbmRBZGQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0fSxpLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiBNYXRoLnNxcnQocipyK24qbil9LGkuZGlzdD1pLmRpc3RhbmNlLGkuc3F1YXJlZERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiByKnIrbipufSxpLnNxckRpc3Q9aS5zcXVhcmVkRGlzdGFuY2UsaS5sZW5ndGg9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07cmV0dXJuIE1hdGguc3FydChlKmUrcipyKX0saS5sZW49aS5sZW5ndGgsaS5zcXVhcmVkTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO3JldHVybiBlKmUrcipyfSxpLnNxckxlbj1pLnNxdWFyZWRMZW5ndGgsaS5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHR9LGkuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPTEvZVswXSx0WzFdPTEvZVsxXSx0fSxpLm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9cipyK24qbjtyZXR1cm4gaT4wJiYoaT0xL01hdGguc3FydChpKSx0WzBdPWVbMF0qaSx0WzFdPWVbMV0qaSksdH0saS5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX0saS5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSpyWzFdLWVbMV0qclswXTtyZXR1cm4gdFswXT10WzFdPTAsdFsyXT1uLHR9LGkubGVycD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdH0saS5yYW5kb209ZnVuY3Rpb24odCxlKXtlPWV8fDE7dmFyIHI9MipuLlJBTkRPTSgpKk1hdGguUEk7cmV0dXJuIHRbMF09TWF0aC5jb3MocikqZSx0WzFdPU1hdGguc2luKHIpKmUsdH0saS50cmFuc2Zvcm1NYXQyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rclsyXSppLHRbMV09clsxXSpuK3JbM10qaSx0fSxpLnRyYW5zZm9ybU1hdDJkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rclsyXSppK3JbNF0sdFsxXT1yWzFdKm4rclszXSppK3JbNV0sdH0saS50cmFuc2Zvcm1NYXQzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rclszXSppK3JbNl0sdFsxXT1yWzFdKm4rcls0XSppK3JbN10sdH0saS50cmFuc2Zvcm1NYXQ0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbMTJdLHRbMV09clsxXSpuK3JbNV0qaStyWzEzXSx0fSxpLmZvckVhY2g9ZnVuY3Rpb24oKXt2YXIgdD1pLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihlLHIsbixpLGEsbyl7dmFyIHMsbDtmb3Iocnx8KHI9Miksbnx8KG49MCksbD1pP01hdGgubWluKGkqcituLGUubGVuZ3RoKTplLmxlbmd0aCxzPW47czxsO3MrPXIpdFswXT1lW3NdLHRbMV09ZVtzKzFdLGEodCx0LG8pLGVbc109dFswXSxlW3MrMV09dFsxXTtyZXR1cm4gZX19KCksaS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuInZlYzIoIit0WzBdKyIsICIrdFsxXSsiKSJ9LGkuZXhhY3RFcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9ZVswXSxvPWVbMV07cmV0dXJuIE1hdGguYWJzKHItYSk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKHIpLE1hdGguYWJzKGEpKSYmTWF0aC5hYnMoaS1vKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoaSksTWF0aC5hYnMobykpfSxlLmV4cG9ydHM9aX0seyIuL2NvbW1vbi5qcyI6MTkyfV0sMTk5OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jb21tb24uanMiKSxpPXt9O2kuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG4uQVJSQVlfVFlQRSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH0saS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbi5BUlJBWV9UWVBFKDMpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlfSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW5ldyBuLkFSUkFZX1RZUEUoMyk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGl9LGkuY29weT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0fSxpLnNldD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdH0saS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0fSxpLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH0saS5zdWI9aS5zdWJ0cmFjdCxpLm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdH0saS5tdWw9aS5tdWx0aXBseSxpLmRpdmlkZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS9yWzBdLHRbMV09ZVsxXS9yWzFdLHRbMl09ZVsyXS9yWzJdLHR9LGkuZGl2PWkuZGl2aWRlLGkuY2VpbD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguY2VpbChlWzBdKSx0WzFdPU1hdGguY2VpbChlWzFdKSx0WzJdPU1hdGguY2VpbChlWzJdKSx0fSxpLmZsb29yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9LGkubWluPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdH0saS5tYXg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fSxpLnJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9LGkuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qcix0WzFdPWVbMV0qcix0WzJdPWVbMl0qcix0fSxpLnNjYWxlQW5kQWRkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0rclswXSpuLHRbMV09ZVsxXStyWzFdKm4sdFsyXT1lWzJdK3JbMl0qbix0fSxpLmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkpfSxpLmRpc3Q9aS5kaXN0YW5jZSxpLnNxdWFyZWREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gcipyK24qbitpKml9LGkuc3FyRGlzdD1pLnNxdWFyZWREaXN0YW5jZSxpLmxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9LGkubGVuPWkubGVuZ3RoLGkuc3F1YXJlZExlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufSxpLnNxckxlbj1pLnNxdWFyZWRMZW5ndGgsaS5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdH0saS5pbnZlcnNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9LGkubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9cipyK24qbitpKmk7cmV0dXJuIGE+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpLHR9LGkuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdfSxpLmNyb3NzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl07cmV0dXJuIHRbMF09aSpsLWEqcyx0WzFdPWEqby1uKmwsdFsyXT1uKnMtaSpvLHR9LGkubGVycD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lWzBdLGE9ZVsxXSxvPWVbMl07cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHR9LGkuaGVybWl0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89YSphLHM9byooMiphLTMpKzEsbD1vKihhLTIpK2EsdT1vKihhLTEpLGM9byooMy0yKmEpO3JldHVybiB0WzBdPWVbMF0qcytyWzBdKmwrblswXSp1K2lbMF0qYyx0WzFdPWVbMV0qcytyWzFdKmwrblsxXSp1K2lbMV0qYyx0WzJdPWVbMl0qcytyWzJdKmwrblsyXSp1K2lbMl0qYyx0fSxpLmJlemllcj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89MS1hLHM9bypvLGw9YSphLHU9cypvLGM9MyphKnMsaD0zKmwqbyxmPWwqYTtyZXR1cm4gdFswXT1lWzBdKnUrclswXSpjK25bMF0qaCtpWzBdKmYsdFsxXT1lWzFdKnUrclsxXSpjK25bMV0qaCtpWzFdKmYsdFsyXT1lWzJdKnUrclsyXSpjK25bMl0qaCtpWzJdKmYsdH0saS5yYW5kb209ZnVuY3Rpb24odCxlKXtlPWV8fDE7dmFyIHI9MipuLlJBTkRPTSgpKk1hdGguUEksaT0yKm4uUkFORE9NKCktMSxhPU1hdGguc3FydCgxLWkqaSkqZTtyZXR1cm4gdFswXT1NYXRoLmNvcyhyKSphLHRbMV09TWF0aC5zaW4ocikqYSx0WzJdPWkqZSx0fSxpLnRyYW5zZm9ybU1hdDQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fSxpLnRyYW5zZm9ybU1hdDM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH0saS50cmFuc2Zvcm1RdWF0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1yWzBdLHM9clsxXSxsPXJbMl0sdT1yWzNdLGM9dSpuK3MqYS1sKmksaD11KmkrbCpuLW8qYSxmPXUqYStvKmktcypuLGQ9LW8qbi1zKmktbCphO3JldHVybiB0WzBdPWMqdStkKi1vK2gqLWwtZiotcyx0WzFdPWgqdStkKi1zK2YqLW8tYyotbCx0WzJdPWYqdStkKi1sK2MqLXMtaCotbyx0fSxpLnJvdGF0ZVg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9W10sYT1bXTtyZXR1cm4gaVswXT1lWzBdLXJbMF0saVsxXT1lWzFdLXJbMV0saVsyXT1lWzJdLXJbMl0sYVswXT1pWzBdLGFbMV09aVsxXSpNYXRoLmNvcyhuKS1pWzJdKk1hdGguc2luKG4pLGFbMl09aVsxXSpNYXRoLnNpbihuKStpWzJdKk1hdGguY29zKG4pLHRbMF09YVswXStyWzBdLHRbMV09YVsxXStyWzFdLHRbMl09YVsyXStyWzJdLHR9LGkucm90YXRlWT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdO3JldHVybiBpWzBdPWVbMF0tclswXSxpWzFdPWVbMV0tclsxXSxpWzJdPWVbMl0tclsyXSxhWzBdPWlbMl0qTWF0aC5zaW4obikraVswXSpNYXRoLmNvcyhuKSxhWzFdPWlbMV0sYVsyXT1pWzJdKk1hdGguY29zKG4pLWlbMF0qTWF0aC5zaW4obiksdFswXT1hWzBdK3JbMF0sdFsxXT1hWzFdK3JbMV0sdFsyXT1hWzJdK3JbMl0sdH0saS5yb3RhdGVaPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVtdLGE9W107cmV0dXJuIGlbMF09ZVswXS1yWzBdLGlbMV09ZVsxXS1yWzFdLGlbMl09ZVsyXS1yWzJdLGFbMF09aVswXSpNYXRoLmNvcyhuKS1pWzFdKk1hdGguc2luKG4pLGFbMV09aVswXSpNYXRoLnNpbihuKStpWzFdKk1hdGguY29zKG4pLGFbMl09aVsyXSx0WzBdPWFbMF0rclswXSx0WzFdPWFbMV0rclsxXSx0WzJdPWFbMl0rclsyXSx0fSxpLmZvckVhY2g9ZnVuY3Rpb24oKXt2YXIgdD1pLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihlLHIsbixpLGEsbyl7dmFyIHMsbDtmb3Iocnx8KHI9Myksbnx8KG49MCksbD1pP01hdGgubWluKGkqcituLGUubGVuZ3RoKTplLmxlbmd0aCxzPW47czxsO3MrPXIpdFswXT1lW3NdLHRbMV09ZVtzKzFdLHRbMl09ZVtzKzJdLGEodCx0LG8pLGVbc109dFswXSxlW3MrMV09dFsxXSxlW3MrMl09dFsyXTtyZXR1cm4gZX19KCksaS5hbmdsZT1mdW5jdGlvbih0LGUpe3ZhciByPWkuZnJvbVZhbHVlcyh0WzBdLHRbMV0sdFsyXSksbj1pLmZyb21WYWx1ZXMoZVswXSxlWzFdLGVbMl0pO2kubm9ybWFsaXplKHIsciksaS5ub3JtYWxpemUobixuKTt2YXIgYT1pLmRvdChyLG4pO3JldHVybiBhPjE/MDpNYXRoLmFjb3MoYSl9LGkuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJ2ZWMzKCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIpIn0saS5leGFjdEVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPWVbMF0scz1lWzFdLGw9ZVsyXTtyZXR1cm4gTWF0aC5hYnMoci1vKTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMociksTWF0aC5hYnMobykpJiZNYXRoLmFicyhpLXMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGEpLE1hdGguYWJzKGwpKX0sZS5leHBvcnRzPWl9LHsiLi9jb21tb24uanMiOjE5Mn1dLDIwMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vY29tbW9uLmpzIiksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MCx0fSxpLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuLkFSUkFZX1RZUEUoNCk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfSxpLmZyb21WYWx1ZXM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bmV3IG4uQVJSQVlfVFlQRSg0KTtyZXR1cm4gYVswXT10LGFbMV09ZSxhWzJdPXIsYVszXT1pLGF9LGkuY29weT1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdH0saS5zZXQ9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9LGkuYWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdK3JbMF0sdFsxXT1lWzFdK3JbMV0sdFsyXT1lWzJdK3JbMl0sdFszXT1lWzNdK3JbM10sdH0saS5zdWJ0cmFjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXS1yWzBdLHRbMV09ZVsxXS1yWzFdLHRbMl09ZVsyXS1yWzJdLHRbM109ZVszXS1yWzNdLHR9LGkuc3ViPWkuc3VidHJhY3QsaS5tdWx0aXBseT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyWzBdLHRbMV09ZVsxXSpyWzFdLHRbMl09ZVsyXSpyWzJdLHRbM109ZVszXSpyWzNdLHR9LGkubXVsPWkubXVsdGlwbHksaS5kaXZpZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fSxpLmRpdj1pLmRpdmlkZSxpLmNlaWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1NYXRoLmNlaWwoZVswXSksdFsxXT1NYXRoLmNlaWwoZVsxXSksdFsyXT1NYXRoLmNlaWwoZVsyXSksdFszXT1NYXRoLmNlaWwoZVszXSksdH0saS5mbG9vcj1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGguZmxvb3IoZVswXSksdFsxXT1NYXRoLmZsb29yKGVbMV0pLHRbMl09TWF0aC5mbG9vcihlWzJdKSx0WzNdPU1hdGguZmxvb3IoZVszXSksdH0saS5taW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWluKGVbMF0sclswXSksdFsxXT1NYXRoLm1pbihlWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oZVsyXSxyWzJdKSx0WzNdPU1hdGgubWluKGVbM10sclszXSksdH0saS5tYXg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0WzNdPU1hdGgubWF4KGVbM10sclszXSksdH0saS5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPU1hdGgucm91bmQoZVswXSksdFsxXT1NYXRoLnJvdW5kKGVbMV0pLHRbMl09TWF0aC5yb3VuZChlWzJdKSx0WzNdPU1hdGgucm91bmQoZVszXSksdH0saS5zY2FsZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHR9LGkuc2NhbGVBbmRBZGQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH0saS5kaXN0YW5jZT1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXSxhPWVbM10tdFszXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppK2EqYSl9LGkuZGlzdD1pLmRpc3RhbmNlLGkuc3F1YXJlZERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9LGkuc3FyRGlzdD1pLnNxdWFyZWREaXN0YW5jZSxpLmxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl0saT10WzNdO3JldHVybiBNYXRoLnNxcnQoZSplK3IqcituKm4raSppKX0saS5sZW49aS5sZW5ndGgsaS5zcXVhcmVkTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX0saS5zcXJMZW49aS5zcXVhcmVkTGVuZ3RoLGkubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09LWVbMF0sdFsxXT0tZVsxXSx0WzJdPS1lWzJdLHRbM109LWVbM10sdH0saS5pbnZlcnNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHRbM109MS9lWzNdLHR9LGkubm9ybWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPXIqcituKm4raSppK2EqYTtyZXR1cm4gbz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyksdH0saS5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfSxpLmxlcnA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdLHM9ZVszXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdFszXT1zK24qKHJbM10tcyksdH0saS5yYW5kb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09bi5SQU5ET00oKSx0WzFdPW4uUkFORE9NKCksdFsyXT1uLlJBTkRPTSgpLHRbM109bi5SQU5ET00oKSxpLm5vcm1hbGl6ZSh0LHQpLGkuc2NhbGUodCx0LGUpLHR9LGkudHJhbnNmb3JtTWF0ND1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH0sCmkudHJhbnNmb3JtUXVhdD1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLHU9clszXSxjPXUqbitzKmEtbCppLGg9dSppK2wqbi1vKmEsZj11KmErbyppLXMqbixkPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT1jKnUrZCotbytoKi1sLWYqLXMsdFsxXT1oKnUrZCotcytmKi1vLWMqLWwsdFsyXT1mKnUrZCotbCtjKi1zLWgqLW8sdFszXT1lWzNdLHR9LGkuZm9yRWFjaD1mdW5jdGlvbigpe3ZhciB0PWkuY3JlYXRlKCk7cmV0dXJuIGZ1bmN0aW9uKGUscixuLGksYSxvKXt2YXIgcyxsO2ZvcihyfHwocj00KSxufHwobj0wKSxsPWk/TWF0aC5taW4oaSpyK24sZS5sZW5ndGgpOmUubGVuZ3RoLHM9bjtzPGw7cys9cil0WzBdPWVbc10sdFsxXT1lW3MrMV0sdFsyXT1lW3MrMl0sdFszXT1lW3MrM10sYSh0LHQsbyksZVtzXT10WzBdLGVbcysxXT10WzFdLGVbcysyXT10WzJdLGVbcyszXT10WzNdO3JldHVybiBlfX0oKSxpLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4idmVjNCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIikifSxpLmV4YWN0RXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl0mJnRbM109PT1lWzNdfSxpLmVxdWFscz1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0saT10WzFdLGE9dFsyXSxvPXRbM10scz1lWzBdLGw9ZVsxXSx1PWVbMl0sYz1lWzNdO3JldHVybiBNYXRoLmFicyhyLXMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGktbCk8PW4uRVBTSUxPTipNYXRoLm1heCgxLE1hdGguYWJzKGkpLE1hdGguYWJzKGwpKSYmTWF0aC5hYnMoYS11KTw9bi5FUFNJTE9OKk1hdGgubWF4KDEsTWF0aC5hYnMoYSksTWF0aC5hYnModSkpJiZNYXRoLmFicyhvLWMpPD1uLkVQU0lMT04qTWF0aC5tYXgoMSxNYXRoLmFicyhvKSxNYXRoLmFicyhjKSl9LGUuZXhwb3J0cz1pfSx7Ii4vY29tbW9uLmpzIjoxOTJ9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIGkodCxlLHIsaSxhKXtmb3IodmFyIG89bihpLG4ocixuKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmFbMF0qKDErb1swXSksLjUqYVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gYSh0LGUpe2lmKDI9PT10Lmxlbmd0aCl7Zm9yKHZhciByPTAsbj0wLGk9MDtpPDI7KytpKXIrPU1hdGgucG93KGVbaV0tdFswXVtpXSwyKSxuKz1NYXRoLnBvdyhlW2ldLXRbMV1baV0sMik7cmV0dXJuIHI9TWF0aC5zcXJ0KHIpLG49TWF0aC5zcXJ0KG4pLHIrbjwxZS02P1sxLDBdOltuLyhyK24pLHIvKG4rcildfWlmKDM9PT10Lmxlbmd0aCl7dmFyIGE9WzAsMF07cmV0dXJuIHUodFswXSx0WzFdLHRbMl0sZSxhKSxsKHQsYSl9cmV0dXJuW119ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfWZ1bmN0aW9uIHModCxlLHIsbixzLGwpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm5bMCx0WzBdLnNsaWNlKCldO2Zvcih2YXIgdT1uZXcgQXJyYXkodC5sZW5ndGgpLGM9MDtjPHQubGVuZ3RoOysrYyl1W2NdPWkodFtjXSxyLG4scyxsKTtmb3IodmFyIGg9MCxmPTEvMCxjPTA7Yzx1Lmxlbmd0aDsrK2Mpe2Zvcih2YXIgZD0wLHA9MDtwPDI7KytwKWQrPU1hdGgucG93KHVbY11bcF0tZVtwXSwyKTtkPGYmJihmPWQsaD1jKX1mb3IodmFyIG09YSh1LGUpLHY9MCxjPTA7YzwzOysrYyl7aWYobVtjXTwtLjAwMXx8bVtjXT4xLjAwMDEpcmV0dXJuIG51bGw7dis9bVtjXX1yZXR1cm4gTWF0aC5hYnModi0xKT4uMDAxP251bGw6W2gsbyh0LG0pLG1dfXZhciBsPXQoImJhcnljZW50cmljIiksdT10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZS5leHBvcnRzPXN9LHtiYXJ5Y2VudHJpYzo0NywicG9seXRvcGUtY2xvc2VzdC1wb2ludC9saWIvY2xvc2VzdF9wb2ludF8yZC5qcyI6NDg0fV0sMjAyOltmdW5jdGlvbih0LGUscil7dmFyIG49InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfcG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKGZfcG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iO3IubWVzaFNoYWRlcj17dmVydGV4OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBub3JtYWw7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWxcbiAgICAgICAgICAgLCB2aWV3XG4gICAgICAgICAgICwgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvblxuICAgICAgICAgICAsIGxpZ2h0UG9zaXRpb247XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBtX3Bvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9ub3JtYWwgICAgICAgICA9IG5vcm1hbDtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX2V5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gICAtIHBvc2l0aW9uO1xuICBmX2xpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXJfMV8xKFxuICB2ZWMzIGxpZ2h0RGlyZWN0aW9uLFxuICB2ZWMzIHZpZXdEaXJlY3Rpb24sXG4gIHZlYzMgc3VyZmFjZU5vcm1hbCxcbiAgZmxvYXQgcm91Z2huZXNzLFxuICBmbG9hdCBmcmVzbmVsKSB7XG5cbiAgZmxvYXQgVmRvdE4gPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuICBmbG9hdCBMZG90TiA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWwpLCAwLjApO1xuXG4gIC8vSGFsZiBhbmdsZSB2ZWN0b3JcbiAgdmVjMyBIID0gbm9ybWFsaXplKGxpZ2h0RGlyZWN0aW9uICsgdmlld0RpcmVjdGlvbik7XG5cbiAgLy9HZW9tZXRyaWMgdGVybVxuICBmbG9hdCBOZG90SCA9IG1heChkb3Qoc3VyZmFjZU5vcm1hbCwgSCksIDAuMCk7XG4gIGZsb2F0IFZkb3RIID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBMZG90SCA9IG1heChkb3QobGlnaHREaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IEcxID0gKDIuMCAqIE5kb3RIICogVmRvdE4pIC8gVmRvdEg7XG4gIGZsb2F0IEcyID0gKDIuMCAqIE5kb3RIICogTGRvdE4pIC8gTGRvdEg7XG4gIGZsb2F0IEcgPSBtaW4oMS4wLCBtaW4oRzEsIEcyKSk7XG4gIFxuICAvL0Rpc3RyaWJ1dGlvbiB0ZXJtXG4gIGZsb2F0IEQgPSBiZWNrbWFubkRpc3RyaWJ1dGlvbl8yXzAoTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuXG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3NcbiAgICAgICAgICAgICwgZnJlc25lbFxuICAgICAgICAgICAgLCBrYW1iaWVudFxuICAgICAgICAgICAgLCBrZGlmZnVzZVxuICAgICAgICAgICAgLCBrc3BlY3VsYXJcbiAgICAgICAgICAgICwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1swXSkpIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZl9kYXRhLCBjbGlwQm91bmRzWzFdKSkpIHtcbiAgICBkaXNjYXJkO1xuICB9XG5cbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuICBcbiAgaWYoIWdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBjb29rVG9ycmFuY2VTcGVjdWxhcl8xXzEoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKTtcbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSBmX2NvbG9yICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihmX2RhdGEsIGNsaXBCb3VuZHNbMF0pKSB8fCBcbiAgICAgYW55KGdyZWF0ZXJUaGFuKGZfZGF0YSwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuXG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn1dfSxyLnBvaW50U2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iLGZyYWdtZW50OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb2ludFIgPSBnbF9Qb2ludENvb3JkLnh5IC0gdmVjMigwLjUsMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSIsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImNvbG9yIix0eXBlOiJ2ZWM0In0se25hbWU6InV2Iix0eXBlOiJ2ZWMyIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifV19LHIucGlja1NoYWRlcj17dmVydGV4OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uO1xufSIsZnJhZ21lbnQ6bixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIucG9pbnRQaWNrU2hhZGVyPXt2ZXJ0ZXg6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgIHBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IHBvaW50U2l6ZTtcbmF0dHJpYnV0ZSB2ZWM0ICBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYoYW55KGxlc3NUaGFuKHBvc2l0aW9uLCBjbGlwQm91bmRzWzBdKSkgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59IixmcmFnbWVudDpuLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJwb2ludFNpemUiLHR5cGU6ImZsb2F0In0se25hbWU6ImlkIix0eXBlOiJ2ZWM0In1dfSxyLmNvbnRvdXJTaGFkZXI9e3ZlcnRleDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG59IixmcmFnbWVudDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzMgY29udG91ckNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29udG91ckNvbG9yLDEpO1xufVxuIixhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7fV0sMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2LGcseSxiLHgsXyx3LE0sayxBLFQpe3RoaXMuZ2w9dCx0aGlzLmNlbGxzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW50ZW5zaXR5PVtdLHRoaXMudGV4dHVyZT1lLHRoaXMuZGlydHk9ITAsdGhpcy50cmlTaGFkZXI9cix0aGlzLmxpbmVTaGFkZXI9bix0aGlzLnBvaW50U2hhZGVyPWksdGhpcy5waWNrU2hhZGVyPWEsdGhpcy5wb2ludFBpY2tTaGFkZXI9byx0aGlzLmNvbnRvdXJTaGFkZXI9cyx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zPWwsdGhpcy50cmlhbmdsZUNvbG9ycz1jLHRoaXMudHJpYW5nbGVOb3JtYWxzPWYsdGhpcy50cmlhbmdsZVVWcz1oLHRoaXMudHJpYW5nbGVJZHM9dSx0aGlzLnRyaWFuZ2xlVkFPPWQsdGhpcy50cmlhbmdsZUNvdW50PTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmVkZ2VQb3NpdGlvbnM9cCx0aGlzLmVkZ2VDb2xvcnM9dix0aGlzLmVkZ2VVVnM9Zyx0aGlzLmVkZ2VJZHM9bSx0aGlzLmVkZ2VWQU89eSx0aGlzLmVkZ2VDb3VudD0wLHRoaXMucG9pbnRQb3NpdGlvbnM9Yix0aGlzLnBvaW50Q29sb3JzPV8sdGhpcy5wb2ludFVWcz13LHRoaXMucG9pbnRTaXplcz1NLHRoaXMucG9pbnRJZHM9eCx0aGlzLnBvaW50VkFPPWssdGhpcy5wb2ludENvdW50PTAsdGhpcy5jb250b3VyTGluZVdpZHRoPTEsdGhpcy5jb250b3VyUG9zaXRpb25zPUEsdGhpcy5jb250b3VyVkFPPVQsdGhpcy5jb250b3VyQ291bnQ9MCx0aGlzLmNvbnRvdXJDb2xvcj1bMCwwLDBdLHRoaXMuY29udG91ckVuYWJsZT0hMCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLl9tb2RlbD1ELHRoaXMuX3ZpZXc9RCx0aGlzLl9wcm9qZWN0aW9uPUQsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT13KHtjb2xvcm1hcDp0LG5zaGFkZXM6MjU2LGZvcm1hdDoicmdiYSJ9KSxyPW5ldyBVaW50OEFycmF5KDEwMjQpLG49MDtuPDI1NjsrK24pe2Zvcih2YXIgaT1lW25dLGE9MDthPDM7KythKXJbNCpuK2FdPWlbYV07cls0Km4rM109MjU1KmlbM119cmV0dXJuIF8ocixbMjU2LDI1Niw0XSxbNCwwLDFdKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09MDtmb3IodmFyIGE9dC5sZW5ndGgsaT0wO2k8YTsrK2kpZm9yKHZhciBvPXRbaV0scz0wO3M8by5sZW5ndGg7KytzKW5bb1tzXV09cltpXTtyZXR1cm4gbn1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl1bMl07cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0KXt2YXIgZT1wKHQsUy52ZXJ0ZXgsUy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfWZ1bmN0aW9uIGwodCl7dmFyIGU9cCh0LEUudmVydGV4LEUuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlfWZ1bmN0aW9uIHUodCl7dmFyIGU9cCh0LEwudmVydGV4LEwuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBjKHQpe3ZhciBlPXAodCxDLnZlcnRleCxDLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBoKHQpe3ZhciBlPXAodCx6LnZlcnRleCx6LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gZih0KXt2YXIgZT1wKHQsSS52ZXJ0ZXgsSS5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9ZnVuY3Rpb24gZCh0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoZT10LHQ9ZS5nbCk7dmFyIHI9cyh0KSxpPWwodCksYT11KHQpLG89Yyh0KSxkPWgodCkscD1mKHQpLHk9Zyh0LF8obmV3IFVpbnQ4QXJyYXkoWzI1NSwyNTUsMjU1LDI1NV0pLFsxLDEsNF0pKTt5LmdlbmVyYXRlTWlwbWFwKCkseS5taW5GaWx0ZXI9dC5MSU5FQVJfTUlQTUFQX0xJTkVBUix5Lm1hZ0ZpbHRlcj10LkxJTkVBUjt2YXIgYj1tKHQpLHg9bSh0KSx3PW0odCksTT1tKHQpLGs9bSh0KSxBPXYodCxbe2J1ZmZlcjpiLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6ayx0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjp4LHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6dyx0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOk0sdHlwZTp0LkZMT0FULHNpemU6M31dKSxUPW0odCksUz1tKHQpLEU9bSh0KSxMPW0odCksQz12KHQsW3tidWZmZXI6VCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOkwsdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6Uyx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOkUsdHlwZTp0LkZMT0FULHNpemU6Mn1dKSx6PW0odCksST1tKHQpLEQ9bSh0KSxQPW0odCksTz1tKHQpLFI9dih0LFt7YnVmZmVyOnosdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjpPLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOkksdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjpELHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6UCx0eXBlOnQuRkxPQVQsc2l6ZToxfV0pLEY9bSh0KSxqPXYodCxbe2J1ZmZlcjpGLHR5cGU6dC5GTE9BVCxzaXplOjN9XSksTj1uZXcgbih0LHkscixpLGEsbyxkLHAsYixrLHgsdyxNLEEsVCxMLFMsRSxDLHosTyxJLEQsUCxSLEYsaik7cmV0dXJuIE4udXBkYXRlKGUpLE59dmFyIHA9dCgiZ2wtc2hhZGVyIiksbT10KCJnbC1idWZmZXIiKSx2PXQoImdsLXZhbyIpLGc9dCgiZ2wtdGV4dHVyZTJkIikseT10KCJub3JtYWxzIiksYj10KCJnbC1tYXQ0L211bHRpcGx5IikseD10KCJnbC1tYXQ0L2ludmVydCIpLF89dCgibmRhcnJheSIpLHc9dCgiY29sb3JtYXAiKSxNPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIiksaz10KCJ0eXBlZGFycmF5LXBvb2wiKSxBPXQoIi4vbGliL3NoYWRlcnMiKSxUPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxTPUEubWVzaFNoYWRlcixFPUEud2lyZVNoYWRlcixMPUEucG9pbnRTaGFkZXIsQz1BLnBpY2tTaGFkZXIsej1BLnBvaW50UGlja1NoYWRlcixJPUEuY29udG91clNoYWRlcixEPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxQPW4ucHJvdG90eXBlO1AuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj0xfSxQLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LFAucGlja1Nsb3RzPTEsUC5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSxQLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZighdHx8IXRoaXMuY29udG91ckVuYWJsZSlyZXR1cm4gdm9pZCh0aGlzLmNvbnRvdXJDb3VudD0wKTtmb3IodmFyIGU9TSh0aGlzLmNlbGxzLHRoaXMuaW50ZW5zaXR5LHQuaW50ZW5zaXR5KSxyPWUuY2VsbHMsbj1lLnZlcnRleElkcyxpPWUudmVydGV4V2VpZ2h0cyxhPXIubGVuZ3RoLG89ay5tYWxsb2NGbG9hdDMyKDYqYSkscz0wLGw9MDtsPGE7KytsKWZvcih2YXIgdT1yW2xdLGM9MDtjPDI7KytjKXt2YXIgaD11WzBdOzI9PT11Lmxlbmd0aCYmKGg9dVtjXSk7Zm9yKHZhciBmPW5baF1bMF0sZD1uW2hdWzFdLHA9aVtoXSxtPTEtcCx2PXRoaXMucG9zaXRpb25zW2ZdLGc9dGhpcy5wb3NpdGlvbnNbZF0seT0wO3k8MzsrK3kpb1tzKytdPXAqdlt5XSttKmdbeV19dGhpcy5jb250b3VyQ291bnQ9cy8zfDAsdGhpcy5jb250b3VyUG9zaXRpb25zLnVwZGF0ZShvLnN1YmFycmF5KDAscykpLGsuZnJlZShvKX0sUC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImNvbnRvdXJFbmFibGUiaW4gdCYmKHRoaXMuY29udG91ckVuYWJsZT10LmNvbnRvdXJFbmFibGUpLCJjb250b3VyQ29sb3IiaW4gdCYmKHRoaXMuY29udG91ckNvbG9yPXQuY29udG91ckNvbG9yKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9ZyhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoaSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucztpZihuJiZyKXt2YXIgcz1bXSxsPVtdLHU9W10sYz1bXSxoPVtdLGY9W10sZD1bXSxwPVtdLG09W10sdj1bXSxiPVtdLHg9W10sXz1bXSx3PVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uO3ZhciBNPXQudmVydGV4Tm9ybWFscyxrPXQuY2VsbE5vcm1hbHMsQT12b2lkIDA9PT10LnZlcnRleE5vcm1hbHNFcHNpbG9uPzFlLTY6dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbixUPXZvaWQgMD09PXQuZmFjZU5vcm1hbHNFcHNpbG9uPzFlLTY6dC5mYWNlTm9ybWFsc0Vwc2lsb247dC51c2VGYWNldE5vcm1hbHMmJiFrJiYoaz15LmZhY2VOb3JtYWxzKHIsbixUKSksa3x8TXx8KE09eS52ZXJ0ZXhOb3JtYWxzKHIsbixBKSk7dmFyIFM9dC52ZXJ0ZXhDb2xvcnMsRT10LmNlbGxDb2xvcnMsTD10Lm1lc2hDb2xvcnx8WzEsMSwxLDFdLEM9dC52ZXJ0ZXhVVnMsej10LnZlcnRleEludGVuc2l0eSxJPXQuY2VsbFVWcyxEPXQuY2VsbEludGVuc2l0eSxQPTEvMCxPPS0xLzA7aWYoIUMmJiFJKWlmKHopaWYodC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMpUD0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMF0sTz0rdC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IodmFyIFI9MDtSPHoubGVuZ3RoOysrUil7dmFyIEY9eltSXTtQPU1hdGgubWluKFAsRiksTz1NYXRoLm1heChPLEYpfWVsc2UgaWYoRClmb3IodmFyIFI9MDtSPEQubGVuZ3RoOysrUil7dmFyIEY9RFtSXTtQPU1hdGgubWluKFAsRiksTz1NYXRoLm1heChPLEYpfWVsc2UgZm9yKHZhciBSPTA7UjxuLmxlbmd0aDsrK1Ipe3ZhciBGPW5bUl1bMl07UD1NYXRoLm1pbihQLEYpLE89TWF0aC5tYXgoTyxGKX10aGlzLmludGVuc2l0eT16fHwoRD9hKHIsbi5sZW5ndGgsRCk6byhuKSk7dmFyIGo9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKHZhciBSPTA7UjxuLmxlbmd0aDsrK1IpZm9yKHZhciBCPW5bUl0sVT0wO1U8MzsrK1UpIWlzTmFOKEJbVV0pJiZpc0Zpbml0ZShCW1VdKSYmKHRoaXMuYm91bmRzWzBdW1VdPU1hdGgubWluKHRoaXMuYm91bmRzWzBdW1VdLEJbVV0pLHRoaXMuYm91bmRzWzFdW1VdPU1hdGgubWF4KHRoaXMuYm91bmRzWzFdW1VdLEJbVV0pKTt2YXIgVj0wLEg9MCxxPTA7dDpmb3IodmFyIFI9MDtSPHIubGVuZ3RoOysrUil7dmFyIEc9cltSXTtzd2l0Y2goRy5sZW5ndGgpe2Nhc2UgMTpmb3IodmFyIFk9R1swXSxCPW5bWV0sVT0wO1U8MzsrK1UpaWYoaXNOYU4oQltVXSl8fCFpc0Zpbml0ZShCW1VdKSljb250aW51ZSB0O3YucHVzaChCWzBdLEJbMV0sQlsyXSk7dmFyIFg7WD1TP1NbWV06RT9FW1JdOkwsMz09PVgubGVuZ3RoP2IucHVzaChYWzBdLFhbMV0sWFsyXSwxKTpiLnB1c2goWFswXSxYWzFdLFhbMl0sWFszXSk7dmFyIFc7Vz1DP0NbWV06ej9bKHpbWV0tUCkvKE8tUCksMF06ST9JW1JdOkQ/WyhEW1JdLVApLyhPLVApLDBdOlsoQlsyXS1QKS8oTy1QKSwwXSx4LnB1c2goV1swXSxXWzFdKSxqP18ucHVzaChqW1ldKTpfLnB1c2goTiksdy5wdXNoKFIpLHErPTE7YnJlYWs7Y2FzZSAyOmZvcih2YXIgVT0wO1U8MjsrK1UpZm9yKHZhciBZPUdbVV0sQj1uW1ldLFo9MDtaPDM7KytaKWlmKGlzTmFOKEJbWl0pfHwhaXNGaW5pdGUoQltaXSkpY29udGludWUgdDtmb3IodmFyIFU9MDtVPDI7KytVKXt2YXIgWT1HW1VdLEI9bltZXTtmLnB1c2goQlswXSxCWzFdLEJbMl0pO3ZhciBYO1g9Uz9TW1ldOkU/RVtSXTpMLDM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sMSk6ZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10pO3ZhciBXO1c9Qz9DW1ldOno/Wyh6W1ldLVApLyhPLVApLDBdOkk/SVtSXTpEP1soRFtSXS1QKS8oTy1QKSwwXTpbKEJbMl0tUCkvKE8tUCksMF0scC5wdXNoKFdbMF0sV1sxXSksbS5wdXNoKFIpfUgrPTE7YnJlYWs7Y2FzZSAzOmZvcih2YXIgVT0wO1U8MzsrK1UpZm9yKHZhciBZPUdbVV0sQj1uW1ldLFo9MDtaPDM7KytaKWlmKGlzTmFOKEJbWl0pfHwhaXNGaW5pdGUoQltaXSkpY29udGludWUgdDtmb3IodmFyIFU9MDtVPDM7KytVKXt2YXIgWT1HW1VdLEI9bltZXTtzLnB1c2goQlswXSxCWzFdLEJbMl0pO3ZhciBYO1g9Uz9TW1ldOkU/RVtSXTpMLDM9PT1YLmxlbmd0aD9sLnB1c2goWFswXSxYWzFdLFhbMl0sMSk6bC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10pO3ZhciBXO1c9Qz9DW1ldOno/Wyh6W1ldLVApLyhPLVApLDBdOkk/SVtSXTpEP1soRFtSXS1QKS8oTy1QKSwwXTpbKEJbMl0tUCkvKE8tUCksMF0sYy5wdXNoKFdbMF0sV1sxXSk7dmFyIEo7Sj1NP01bWV06a1tSXSx1LnB1c2goSlswXSxKWzFdLEpbMl0pLGgucHVzaChSKX1WKz0xfX10aGlzLnBvaW50Q291bnQ9cSx0aGlzLmVkZ2VDb3VudD1ILHRoaXMudHJpYW5nbGVDb3VudD1WLHRoaXMucG9pbnRQb3NpdGlvbnMudXBkYXRlKHYpLHRoaXMucG9pbnRDb2xvcnMudXBkYXRlKGIpLHRoaXMucG9pbnRVVnMudXBkYXRlKHgpLHRoaXMucG9pbnRTaXplcy51cGRhdGUoXyksdGhpcy5wb2ludElkcy51cGRhdGUobmV3IFVpbnQzMkFycmF5KHcpKSx0aGlzLmVkZ2VQb3NpdGlvbnMudXBkYXRlKGYpLHRoaXMuZWRnZUNvbG9ycy51cGRhdGUoZCksdGhpcy5lZGdlVVZzLnVwZGF0ZShwKSx0aGlzLmVkZ2VJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShtKSksdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUocyksdGhpcy50cmlhbmdsZUNvbG9ycy51cGRhdGUobCksdGhpcy50cmlhbmdsZVVWcy51cGRhdGUoYyksdGhpcy50cmlhbmdsZU5vcm1hbHMudXBkYXRlKHUpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShoKSl9fSxQLmRyYXdUcmFuc3BhcmVudD1QLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fEQsbj10LnZpZXd8fEQsaT10LnByb2plY3Rpb258fEQsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxvcGFjaXR5OnRoaXMub3BhY2l0eSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTt0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgbD1uZXcgQXJyYXkoMTYpO2IobCxzLnZpZXcscy5tb2RlbCksYihsLHMucHJvamVjdGlvbixsKSx4KGwsbCk7Zm9yKHZhciBvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPWxbMTIrb10vbFsxNV07Zm9yKHZhciB1PWxbMTVdLG89MDtvPDM7KytvKXUrPXRoaXMubGlnaHRQb3NpdGlvbltvXSpsWzQqbyszXTtmb3IodmFyIG89MDtvPDM7KytvKXtmb3IodmFyIGM9bFsxMitvXSxoPTA7aDwzOysraCljKz1sWzQqaCtvXSp0aGlzLmxpZ2h0UG9zaXRpb25baF07cy5saWdodFBvc2l0aW9uW29dPWMvdX1pZih0aGlzLnRyaWFuZ2xlQ291bnQ+MCl7dmFyIGY9dGhpcy50cmlTaGFkZXI7Zi5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpfWlmKHRoaXMuZWRnZUNvdW50PjAmJnRoaXMubGluZVdpZHRoPjApe3ZhciBmPXRoaXMubGluZVNoYWRlcjtmLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCl9aWYodGhpcy5wb2ludENvdW50PjApe3ZhciBmPXRoaXMucG9pbnRTaGFkZXI7Zi5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKX1pZih0aGlzLmNvbnRvdXJFbmFibGUmJnRoaXMuY29udG91ckNvdW50PjAmJnRoaXMuY29udG91ckxpbmVXaWR0aD4wKXt2YXIgZj10aGlzLmNvbnRvdXJTaGFkZXI7Zi5iaW5kKCksZi51bmlmb3Jtcz1zLHRoaXMuY29udG91clZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCx0aGlzLmNvbnRvdXJDb3VudCksdGhpcy5jb250b3VyVkFPLnVuYmluZCgpfX0sUC5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O2Zvcih2YXIgZT10aGlzLmdsLHI9dC5tb2RlbHx8RCxuPXQudmlld3x8RCxpPXQucHJvamVjdGlvbnx8RCxhPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLG89MDtvPDM7KytvKWFbMF1bb109TWF0aC5tYXgoYVswXVtvXSx0aGlzLmNsaXBCb3VuZHNbMF1bb10pLGFbMV1bb109TWF0aC5taW4oYVsxXVtvXSx0aGlzLmNsaXBCb3VuZHNbMV1bb10pO3RoaXMuX21vZGVsPVtdLnNsaWNlLmNhbGwociksdGhpcy5fdmlldz1bXS5zbGljZS5jYWxsKG4pLHRoaXMuX3Byb2plY3Rpb249W10uc2xpY2UuY2FsbChpKSx0aGlzLl9yZXNvbHV0aW9uPVtlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdO3ZhciBzPXttb2RlbDpyLHZpZXc6bixwcm9qZWN0aW9uOmksY2xpcEJvdW5kczphLHBpY2tJZDp0aGlzLnBpY2tJZC8yNTV9LGw9dGhpcy5waWNrU2hhZGVyO2lmKGwuYmluZCgpLGwudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlQ291bnQ+MCYmKHRoaXMudHJpYW5nbGVWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlRSSUFOR0xFUywwLDMqdGhpcy50cmlhbmdsZUNvdW50KSx0aGlzLnRyaWFuZ2xlVkFPLnVuYmluZCgpKSx0aGlzLmVkZ2VDb3VudD4wJiYodGhpcy5lZGdlVkFPLmJpbmQoKSxlLmxpbmVXaWR0aCh0aGlzLmxpbmVXaWR0aCksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKXt2YXIgbD10aGlzLnBvaW50UGlja1NoYWRlcjtsLmJpbmQoKSxsLnVuaWZvcm1zPXMsdGhpcy5wb2ludFZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSx0aGlzLnBvaW50VkFPLnVuYmluZCgpfX0sUC5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDtmb3IodmFyIGU9dC52YWx1ZVswXSsyNTYqdC52YWx1ZVsxXSs2NTUzNip0LnZhbHVlWzJdLHI9dGhpcy5jZWxsc1tlXSxuPXRoaXMucG9zaXRpb25zLGk9bmV3IEFycmF5KHIubGVuZ3RoKSxhPTA7YTxyLmxlbmd0aDsrK2EpaVthXT1uW3JbYV1dO3ZhciBvPVQoaSxbdC5jb29yZFswXSx0aGlzLl9yZXNvbHV0aW9uWzFdLXQuY29vcmRbMV1dLHRoaXMuX21vZGVsLHRoaXMuX3ZpZXcsdGhpcy5fcHJvamVjdGlvbix0aGlzLl9yZXNvbHV0aW9uKTtpZighbylyZXR1cm4gbnVsbDtmb3IodmFyIHM9b1syXSxsPTAsYT0wO2E8ci5sZW5ndGg7KythKWwrPXNbYV0qdGhpcy5pbnRlbnNpdHlbclthXV07cmV0dXJue3Bvc2l0aW9uOm9bMV0saW5kZXg6cltvWzBdXSxjZWxsOnIsY2VsbElkOmUsaW50ZW5zaXR5OmwsZGF0YUNvb3JkaW5hdGU6dGhpcy5wb3NpdGlvbnNbcltvWzBdXV19fSxQLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLmxpbmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb2ludFBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVDb2xvcnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVVVnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVOb3JtYWxzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VWQU8uZGlzcG9zZSgpLHRoaXMuZWRnZVBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5lZGdlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VVVnMuZGlzcG9zZSgpLHRoaXMuZWRnZUlkcy5kaXNwb3NlKCksdGhpcy5wb2ludFZBTy5kaXNwb3NlKCksdGhpcy5wb2ludFBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5wb2ludENvbG9ycy5kaXNwb3NlKCksdGhpcy5wb2ludFVWcy5kaXNwb3NlKCksdGhpcy5wb2ludFNpemVzLmRpc3Bvc2UoKSx0aGlzLnBvaW50SWRzLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuY29udG91clBvc2l0aW9ucy5kaXNwb3NlKCksdGhpcy5jb250b3VyU2hhZGVyLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWR9LHsiLi9saWIvY2xvc2VzdC1wb2ludCI6MjAxLCIuL2xpYi9zaGFkZXJzIjoyMDIsY29sb3JtYXA6OTcsImdsLWJ1ZmZlciI6MTU0LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L211bHRpcGx5IjoxODEsImdsLXNoYWRlciI6MjUzLCJnbC10ZXh0dXJlMmQiOjI2NSwiZ2wtdmFvIjoyNjksbmRhcnJheTo0NjUsbm9ybWFsczo0NjcsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo1MTUsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2w7cmV0dXJuIG5ldyBuKHQsYShlLFswLDAsMCwxLDEsMCwxLDFdKSxvKGUscy5ib3hWZXJ0LHMubGluZUZyYWcpKX1lLmV4cG9ydHM9aTt2YXIgYT10KCJnbC1idWZmZXIiKSxvPXQoImdsLXNoYWRlciIpLHM9dCgiLi9zaGFkZXJzIiksbD1uLnByb3RvdHlwZTtsLmJpbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNoYWRlcjt0aGlzLnZiby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpLHQuYXR0cmlidXRlcy5jb29yZC5wb2ludGVyKCksdC51bmlmb3Jtcy5zY3JlZW5Cb3g9dGhpcy5wbG90LnNjcmVlbkJveH0sbC5kcmF3Qm94PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxvKXt2YXIgcz10aGlzLnBsb3QsbD10aGlzLnNoYWRlcix1PXMuZ2w7dFswXT1yLHRbMV09bixlWzBdPWksZVsxXT1hLGwudW5pZm9ybXMubG89dCxsLnVuaWZvcm1zLmhpPWUsbC51bmlmb3Jtcy5jb2xvcj1vLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFX1NUUklQLDAsNCl9fSgpLGwuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjA3LCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyMTB9XSwyMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLnBsb3Q9dCx0aGlzLnZibz1lLHRoaXMuc2hhZGVyPXIsdGhpcy50aWNrU2hhZGVyPW4sdGhpcy50aWNrcz1bW10sW11dfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfWZ1bmN0aW9uIGEodCl7dmFyIGU9dC5nbDtyZXR1cm4gbmV3IG4odCxvKGUpLHMoZSx1LmdyaWRWZXJ0LHUuZ3JpZEZyYWcpLHMoZSx1LnRpY2tWZXJ0LHUuZ3JpZEZyYWcpKX1lLmV4cG9ydHM9YTt2YXIgbz10KCJnbC1idWZmZXIiKSxzPXQoImdsLXNoYWRlciIpLGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx1PXQoIi4vc2hhZGVycyIpLGM9bi5wcm90b3R5cGU7Yy5kcmF3PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLnBsb3QsaT10aGlzLnZibyxhPXRoaXMuc2hhZGVyLG89dGhpcy50aWNrcyxzPW4uZ2wsbD1uLl90aWNrQm91bmRzLHU9bi5kYXRhQm94LGM9bi52aWV3Qm94LGg9bi5ncmlkTGluZVdpZHRoLGY9bi5ncmlkTGluZUNvbG9yLGQ9bi5ncmlkTGluZUVuYWJsZSxwPW4ucGl4ZWxSYXRpbyxtPTA7bTwyOysrbSl7dmFyIHY9bFttXSxnPWxbbSsyXSx5PWctdixiPS41Kih1W20rMl0rdVttXSkseD11W20rMl0tdVttXTtlW21dPTIqeS94LHRbbV09Mioodi1iKS94fWEuYmluZCgpLGkuYmluZCgpLGEuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpLGEudW5pZm9ybXMuZGF0YVNoaWZ0PXQsYS51bmlmb3Jtcy5kYXRhU2NhbGU9ZTtmb3IodmFyIF89MCxtPTA7bTwyOysrbSl7clswXT1yWzFdPTAsclttXT0xLGEudW5pZm9ybXMuZGF0YUF4aXM9cixhLnVuaWZvcm1zLmxpbmVXaWR0aD1oW21dLyhjW20rMl0tY1ttXSkqcCxhLnVuaWZvcm1zLmNvbG9yPWZbbV07dmFyIHc9NipvW21dLmxlbmd0aDtkW21dJiZ3JiZzLmRyYXdBcnJheXMocy5UUklBTkdMRVMsXyx3KSxfKz13fX19KCksYy5kcmF3VGlja01hcmtzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVsxLDBdLG49WzAsMV0sYT1bMCwwXSxvPVswLDBdO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcz10aGlzLnBsb3QsdT10aGlzLnZibyxjPXRoaXMudGlja1NoYWRlcixoPXRoaXMudGlja3MsZj1zLmdsLGQ9cy5fdGlja0JvdW5kcyxwPXMuZGF0YUJveCxtPXMudmlld0JveCx2PXMucGl4ZWxSYXRpbyxnPXMuc2NyZWVuQm94LHk9Z1syXS1nWzBdLGI9Z1szXS1nWzFdLHg9bVsyXS1tWzBdLF89bVszXS1tWzFdLHc9MDt3PDI7Kyt3KXt2YXIgTT1kW3ddLGs9ZFt3KzJdLEE9ay1NLFQ9LjUqKHBbdysyXStwW3ddKSxTPXBbdysyXS1wW3ddO2Vbd109MipBL1MsdFt3XT0yKihNLVQpL1N9ZVswXSo9eC95LHRbMF0qPXgveSxlWzFdKj1fL2IsdFsxXSo9Xy9iLGMuYmluZCgpLHUuYmluZCgpLGMuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpO3ZhciBFPWMudW5pZm9ybXM7RS5kYXRhU2hpZnQ9dCxFLmRhdGFTY2FsZT1lO3ZhciBMPXMudGlja01hcmtMZW5ndGgsQz1zLnRpY2tNYXJrV2lkdGgsej1zLnRpY2tNYXJrQ29sb3IsST02KmhbMF0ubGVuZ3RoLEQ9TWF0aC5taW4obC5nZShoWzBdLChwWzBdLWRbMF0pLyhkWzJdLWRbMF0pLGkpLGhbMF0ubGVuZ3RoKSxQPU1hdGgubWluKGwuZ3QoaFswXSwocFsyXS1kWzBdKS8oZFsyXS1kWzBdKSxpKSxoWzBdLmxlbmd0aCksTz0wKzYqRCxSPTYqTWF0aC5tYXgoMCxQLUQpLEY9TWF0aC5taW4obC5nZShoWzFdLChwWzFdLWRbMV0pLyhkWzNdLWRbMV0pLGkpLGhbMV0ubGVuZ3RoKSxqPU1hdGgubWluKGwuZ3QoaFsxXSwocFszXS1kWzFdKS8oZFszXS1kWzFdKSxpKSxoWzFdLmxlbmd0aCksTj1JKzYqRixCPTYqTWF0aC5tYXgoMCxqLUYpO2FbMF09MioobVswXS1MWzFdKS95LTEsYVsxXT0obVszXSttWzFdKS9iLTEsb1swXT1MWzFdKnYveSxvWzFdPUNbMV0qdi9iLEImJihFLmNvbG9yPXpbMV0sRS50aWNrU2NhbGU9byxFLmRhdGFBeGlzPW4sRS5zY3JlZW5PZmZzZXQ9YSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsTixCKSksYVswXT0obVsyXSttWzBdKS95LTEsYVsxXT0yKihtWzFdLUxbMF0pL2ItMSxvWzBdPUNbMF0qdi95LG9bMV09TFswXSp2L2IsUiYmKEUuY29sb3I9elswXSxFLnRpY2tTY2FsZT1vLEUuZGF0YUF4aXM9cixFLnNjcmVlbk9mZnNldD1hLGYuZHJhd0FycmF5cyhmLlRSSUFOR0xFUyxPLFIpKSxhWzBdPTIqKG1bMl0rTFszXSkveS0xLGFbMV09KG1bM10rbVsxXSkvYi0xLG9bMF09TFszXSp2L3ksb1sxXT1DWzNdKnYvYixCJiYoRS5jb2xvcj16WzNdLEUudGlja1NjYWxlPW8sRS5kYXRhQXhpcz1uLEUuc2NyZWVuT2Zmc2V0PWEsZi5kcmF3QXJyYXlzKGYuVFJJQU5HTEVTLE4sQikpLGFbMF09KG1bMl0rbVswXSkveS0xLGFbMV09MioobVszXStMWzJdKS9iLTEsb1swXT1DWzJdKnYveSxvWzFdPUxbMl0qdi9iLFImJihFLmNvbG9yPXpbMl0sRS50aWNrU2NhbGU9byxFLmRhdGFBeGlzPXIsRS5zY3JlZW5PZmZzZXQ9YSxmLmRyYXdBcnJheXMoZi5UUklBTkdMRVMsTyxSKSl9fSgpLGMudXBkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9WzEsMSwtMSwtMSwxLC0xXSxlPVsxLC0xLDEsMSwtMSwtMV07cmV0dXJuIGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1yLnRpY2tzLGk9ci5ib3VuZHMsYT1uZXcgRmxvYXQzMkFycmF5KDE4KihuWzBdLmxlbmd0aCtuWzFdLmxlbmd0aCkpLG89KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxzPVtbXSxbXV0sbD0wO2w8MjsrK2wpZm9yKHZhciB1PXNbbF0sYz1uW2xdLGg9aVtsXSxmPWlbbCsyXSxkPTA7ZDxjLmxlbmd0aDsrK2Qpe3ZhciBwPShjW2RdLngtaCkvKGYtaCk7dS5wdXNoKHApO2Zvcih2YXIgbT0wO208NjsrK20pYVtvKytdPXAsYVtvKytdPXRbbV0sYVtvKytdPWVbbV19dGhpcy50aWNrcz1zLHRoaXMudmJvLnVwZGF0ZShhKX19KCksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRpY2tTaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjIwNywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjIwOSwiZ2wtYnVmZmVyIjoxNTQsImdsLXNoYWRlciI6MjEwfV0sMjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2w7cmV0dXJuIG5ldyBuKHQsYShlLFstMSwtMSwtMSwxLDEsLTEsMSwxXSksbyhlLHMubGluZVZlcnQscy5saW5lRnJhZykpfWUuZXhwb3J0cz1pO3ZhciBhPXQoImdsLWJ1ZmZlciIpLG89dCgiZ2wtc2hhZGVyIikscz10KCIuL3NoYWRlcnMiKSxsPW4ucHJvdG90eXBlO2wuYmluZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2hhZGVyO3RoaXMudmJvLmJpbmQoKSx0aGlzLnNoYWRlci5iaW5kKCksdC5hdHRyaWJ1dGVzLmNvb3JkLnBvaW50ZXIoKSx0LnVuaWZvcm1zLnNjcmVlbkJveD10aGlzLnBsb3Quc2NyZWVuQm94fSxsLmRyYXdMaW5lPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXTtyZXR1cm4gZnVuY3Rpb24ocixuLGksYSxvLHMpe3ZhciBsPXRoaXMucGxvdCx1PXRoaXMuc2hhZGVyLGM9bC5nbDt0WzBdPXIsdFsxXT1uLGVbMF09aSxlWzFdPWEsdS51bmlmb3Jtcy5zdGFydD10LHUudW5pZm9ybXMuZW5kPWUsdS51bmlmb3Jtcy53aWR0aD1vKmwucGl4ZWxSYXRpbyx1LnVuaWZvcm1zLmNvbG9yPXMsYy5kcmF3QXJyYXlzKGMuVFJJQU5HTEVfU1RSSVAsMCw0KX19KCksbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjoyMDcsImdsLWJ1ZmZlciI6MTU0LCJnbC1zaGFkZXIiOjIxMH1dLDIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0icHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnh5eiAqIGNvbG9yLncsIGNvbG9yLncpO1xufVxuIjtlLmV4cG9ydHM9e2xpbmVWZXJ0OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIHN0YXJ0LCBlbmQ7XG51bmlmb3JtIGZsb2F0IHdpZHRoO1xuXG52ZWMyIHBlcnAodmVjMiB2KSB7XG4gIHJldHVybiB2ZWMyKHYueSwgLXYueCk7XG59XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkZWx0YSA9IG5vcm1hbGl6ZShwZXJwKHN0YXJ0IC0gZW5kKSk7XG4gIHZlYzIgb2Zmc2V0ID0gbWl4KHN0YXJ0LCBlbmQsIDAuNSAqIChjb29yZC55KzEuMCkpO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG9mZnNldCArIDAuNSAqIHdpZHRoICogZGVsdGEgKiBjb29yZC54KSwgMCwgMSk7XG59XG4iLGxpbmVGcmFnOm4sdGV4dFZlcnQ6IiNkZWZpbmUgR0xTTElGWSAxXG5hdHRyaWJ1dGUgdmVjMyB0ZXh0Q29vcmRpbmF0ZTtcblxudW5pZm9ybSB2ZWMyIGRhdGFTY2FsZSwgZGF0YVNoaWZ0LCBkYXRhQXhpcywgc2NyZWVuT2Zmc2V0LCB0ZXh0U2NhbGU7XG51bmlmb3JtIGZsb2F0IGFuZ2xlO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRhdGFPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUuejtcbiAgdmVjMiBnbHlwaE9mZnNldCAgPSB0ZXh0Q29vcmRpbmF0ZS54eTtcbiAgbWF0MiBnbHlwaE1hdHJpeCA9IG1hdDIoY29zKGFuZ2xlKSwgc2luKGFuZ2xlKSwgLXNpbihhbmdsZSksIGNvcyhhbmdsZSkpO1xuICB2ZWMyIHNjcmVlbkNvb3JkaW5hdGUgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhT2Zmc2V0ICsgZGF0YVNoaWZ0KSArXG4gICAgZ2x5cGhNYXRyaXggKiBnbHlwaE9mZnNldCAqIHRleHRTY2FsZSArIHNjcmVlbk9mZnNldDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbkNvb3JkaW5hdGUsIDAsIDEpO1xufVxuIix0ZXh0RnJhZzpuLGdyaWRWZXJ0OiJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBwb3MgKz0gMTAuMCAqIGRhdGFDb29yZC55ICogdmVjMihkYXRhQXhpcy55LCAtZGF0YUF4aXMueCkgKyBkYXRhQ29vcmQueiAqIGxpbmVXaWR0aDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XG59XG4iLGdyaWRGcmFnOm4sYm94VmVydDoicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBjb29yZDtcblxudW5pZm9ybSB2ZWM0IHNjcmVlbkJveDtcbnVuaWZvcm0gdmVjMiBsbywgaGk7XG5cbnZlYzIgc2NyZWVuKHZlYzIgdikge1xuICByZXR1cm4gMi4wICogKHYgLSBzY3JlZW5Cb3gueHkpIC8gKHNjcmVlbkJveC56dyAtIHNjcmVlbkJveC54eSkgLSAxLjA7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHNjcmVlbihtaXgobG8sIGhpLCBjb29yZCkpLCAwLCAxKTtcbn1cbiIsdGlja1ZlcnQ6InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgZGF0YUNvb3JkO1xuXG51bmlmb3JtIHZlYzIgZGF0YUF4aXMsIGRhdGFTaGlmdCwgZGF0YVNjYWxlLCBzY3JlZW5PZmZzZXQsIHRpY2tTY2FsZTtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvcyA9IGRhdGFBeGlzICogKGRhdGFTY2FsZSAqIGRhdGFDb29yZC54ICsgZGF0YVNoaWZ0KTtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyArIHRpY2tTY2FsZSpkYXRhQ29vcmQueXogKyBzY3JlZW5PZmZzZXQsIDAsIDEpO1xufVxuIn19LHt9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5wbG90PXQsdGhpcy52Ym89ZSx0aGlzLnNoYWRlcj1yLHRoaXMudGlja09mZnNldD1bW10sW11dLHRoaXMudGlja1g9W1tdLFtdXSx0aGlzLmxhYmVsT2Zmc2V0PVswLDBdLHRoaXMubGFiZWxDb3VudD1bMCwwXX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuZ2w7cmV0dXJuIG5ldyBuKHQsYShlKSxvKGUsdS50ZXh0VmVydCx1LnRleHRGcmFnKSl9ZS5leHBvcnRzPWk7dmFyIGE9dCgiZ2wtYnVmZmVyIiksbz10KCJnbC1zaGFkZXIiKSxzPXQoInRleHQtY2FjaGUiKSxsPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksdT10KCIuL3NoYWRlcnMiKSxjPW4ucHJvdG90eXBlO2MuZHJhd1RpY2tzPWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF0sZT1bMCwwXSxyPVswLDBdO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT10aGlzLnBsb3QsYT10aGlzLnNoYWRlcixvPXRoaXMudGlja1hbbl0scz10aGlzLnRpY2tPZmZzZXRbbl0sdT1pLmdsLGM9aS52aWV3Qm94LGg9aS5kYXRhQm94LGY9aS5zY3JlZW5Cb3gsZD1pLnBpeGVsUmF0aW8scD1pLnRpY2tFbmFibGUsbT1pLnRpY2tQYWQsdj1pLnRpY2tDb2xvcixnPWkudGlja0FuZ2xlLHk9aS5sYWJlbEVuYWJsZSxiPWkubGFiZWxQYWQseD1pLmxhYmVsQ29sb3IsXz1pLmxhYmVsQW5nbGUsdz10aGlzLmxhYmVsT2Zmc2V0W25dLE09dGhpcy5sYWJlbENvdW50W25dLGs9bC5sdChvLGhbbl0pLEE9bC5sZShvLGhbbisyXSk7dFswXT10WzFdPTAsdFtuXT0xLGVbbl09KGNbMituXStjW25dKS8oZlsyK25dLWZbbl0pLTE7dmFyIFQ9Mi9mWzIrKDFebildLWZbMV5uXTtlWzFebl09VCpjWzFebl0tMSxwW25dJiYoZVsxXm5dLT1UKmQqbVtuXSxrPEEmJnNbQV0+c1trXSYmKGEudW5pZm9ybXMuZGF0YUF4aXM9dCxhLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLGEudW5pZm9ybXMuY29sb3I9dltuXSxhLnVuaWZvcm1zLmFuZ2xlPWdbbl0sdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVTLHNba10sc1tBXS1zW2tdKSkpLHlbbl0mJk0mJihlWzFebl0tPVQqZCpiW25dLGEudW5pZm9ybXMuZGF0YUF4aXM9cixhLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLGEudW5pZm9ybXMuY29sb3I9eFtuXSxhLnVuaWZvcm1zLmFuZ2xlPV9bbl0sdS5kcmF3QXJyYXlzKHUuVFJJQU5HTEVTLHcsTSkpLGVbMV5uXT1UKmNbMisoMV5uKV0tMSxwW24rMl0mJihlWzFebl0rPVQqZCptW24rMl0sazxBJiZzW0FdPnNba10mJihhLnVuaWZvcm1zLmRhdGFBeGlzPXQsYS51bmlmb3Jtcy5zY3JlZW5PZmZzZXQ9ZSxhLnVuaWZvcm1zLmNvbG9yPXZbbisyXSxhLnVuaWZvcm1zLmFuZ2xlPWdbbisyXSx1LmRyYXdBcnJheXModS5UUklBTkdMRVMsc1trXSxzW0FdLXNba10pKSkseVtuKzJdJiZNJiYoZVsxXm5dKz1UKmQqYltuKzJdLGEudW5pZm9ybXMuZGF0YUF4aXM9cixhLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLGEudW5pZm9ybXMuY29sb3I9eFtuKzJdLGEudW5pZm9ybXMuYW5nbGU9X1tuKzJdLHUuZHJhd0FycmF5cyh1LlRSSUFOR0xFUyx3LE0pKX19KCksYy5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcix1PXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgYz0wO2M8MjsrK2MpZVtjXT0yKihvW2NdKnUtYVtjXSkvKGFbMitjXS1hW2NdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLGMuYmluZD1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLnBsb3QsaT10aGlzLnNoYWRlcixhPW4uX3RpY2tCb3VuZHMsbz1uLmRhdGFCb3gscz1uLnNjcmVlbkJveCxsPW4udmlld0JveDtpLmJpbmQoKTtmb3IodmFyIHU9MDt1PDI7Kyt1KXt2YXIgYz1hW3VdLGg9YVt1KzJdLGY9aC1jLGQ9LjUqKG9bdSsyXStvW3VdKSxwPW9bdSsyXS1vW3VdLG09bFt1XSx2PWxbdSsyXSxnPXYtbSx5PXNbdV0sYj1zW3UrMl0seD1iLXk7ZVt1XT0yKmYvcCpnL3gsdFt1XT0yKihjLWQpL3AqZy94fXJbMV09MipuLnBpeGVsUmF0aW8vKHNbM10tc1sxXSksclswXT1yWzFdKihzWzNdLXNbMV0pLyhzWzJdLXNbMF0pLGkudW5pZm9ybXMuZGF0YVNjYWxlPWUsaS51bmlmb3Jtcy5kYXRhU2hpZnQ9dCxpLnVuaWZvcm1zLnRleHRTY2FsZT1yLHRoaXMudmJvLmJpbmQoKSxpLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfX0oKSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89W10sbD10LnRpY2tzLHU9dC5ib3VuZHM7Zm9yKGE9MDthPDI7KythKXt2YXIgYz1bTWF0aC5mbG9vcihvLmxlbmd0aC8zKV0saD1bLTEvMF0sZj1sW2FdO2ZvcihlPTA7ZTxmLmxlbmd0aDsrK2Upe3ZhciBkPWZbZV0scD1kLngsbT1kLnRleHQsdj1kLmZvbnR8fCJzYW5zLXNlcmlmIjtpPWQuZm9udFNpemV8fDEyO2Zvcih2YXIgZz0xLyh1W2ErMl0tdVthXSkseT11W2FdLGI9bS5zcGxpdCgiXG4iKSx4PTA7eDxiLmxlbmd0aDt4KyspZm9yKG49cyh2LGJbeF0pLmRhdGEscj0wO3I8bi5sZW5ndGg7cis9MilvLnB1c2gobltyXSppLC1uW3IrMV0qaS14KmkqMS4yLChwLXkpKmcpO2MucHVzaChNYXRoLmZsb29yKG8ubGVuZ3RoLzMpKSxoLnB1c2gocCl9dGhpcy50aWNrT2Zmc2V0W2FdPWMsdGhpcy50aWNrWFthXT1ofWZvcihhPTA7YTwyOysrYSl7Zm9yKHRoaXMubGFiZWxPZmZzZXRbYV09TWF0aC5mbG9vcihvLmxlbmd0aC8zKSxuPXModC5sYWJlbEZvbnRbYV0sdC5sYWJlbHNbYV0se3RleHRBbGlnbjoiY2VudGVyIn0pLmRhdGEsaT10LmxhYmVsU2l6ZVthXSxlPTA7ZTxuLmxlbmd0aDtlKz0yKW8ucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMubGFiZWxDb3VudFthXT1NYXRoLmZsb29yKG8ubGVuZ3RoLzMpLXRoaXMubGFiZWxPZmZzZXRbYV19Zm9yKHRoaXMudGl0bGVPZmZzZXQ9TWF0aC5mbG9vcihvLmxlbmd0aC8zKSxuPXModC50aXRsZUZvbnQsdC50aXRsZSkuZGF0YSxpPXQudGl0bGVTaXplLGU9MDtlPG4ubGVuZ3RoO2UrPTIpby5wdXNoKG5bZV0qaSwtbltlKzFdKmksMCk7dGhpcy50aXRsZUNvdW50PU1hdGguZmxvb3Ioby5sZW5ndGgvMyktdGhpcy50aXRsZU9mZnNldCx0aGlzLnZiby51cGRhdGUobyl9LGMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjA3LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjA5LCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyMTAsInRleHQtY2FjaGUiOjUzMH1dLDIwOTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4Ml1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgyfV0sMjEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5nbD10LHRoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsCnRoaXMuX3ZyZWY9dGhpcy5fZnJlZj10aGlzLl9yZWxpbms9dGhpcy52ZXJ0U2hhZGVyPXRoaXMuZnJhZ1NoYWRlcj10aGlzLnByb2dyYW09dGhpcy5hdHRyaWJ1dGVzPXRoaXMudW5pZm9ybXM9dGhpcy50eXBlcz1udWxsfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC5uYW1lPGUubmFtZT8tMToxfWZ1bmN0aW9uIGEodCxlLHIsaSxhKXt2YXIgbz1uZXcgbih0KTtyZXR1cm4gby51cGRhdGUoZSxyLGksYSksb312YXIgbz10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxzPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksbD10KCIuL2xpYi9yZWZsZWN0IiksdT10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSxjPXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGg9dCgiLi9saWIvR0xFcnJvciIpLGY9bi5wcm90b3R5cGU7Zi5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKTt2YXIgdCxlPXRoaXMuZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sdGhpcy5nbC5BQ1RJVkVfQVRUUklCVVRFUykscj10aGlzLmdsLmxhc3RBdHRyaWJDb3VudDtpZihlPnIpZm9yKHQ9cjt0PGU7dCsrKXRoaXMuZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodCk7ZWxzZSBpZihyPmUpZm9yKHQ9ZTt0PHI7dCsrKXRoaXMuZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO3RoaXMuZ2wubGFzdEF0dHJpYkNvdW50PWUsdGhpcy5nbC51c2VQcm9ncmFtKHRoaXMucHJvZ3JhbSl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdsLmxhc3RBdHRyaWJDb3VudCxlPTA7ZTx0O2UrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShlKTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD0wLHRoaXMuX2ZyZWYmJnRoaXMuX2ZyZWYuZGlzcG9zZSgpLHRoaXMuX3ZyZWYmJnRoaXMuX3ZyZWYuZGlzcG9zZSgpLHRoaXMuYXR0cmlidXRlcz10aGlzLnR5cGVzPXRoaXMudmVydFNoYWRlcj10aGlzLmZyYWdTaGFkZXI9dGhpcy5wcm9ncmFtPXRoaXMuX3JlbGluaz10aGlzLl9mcmVmPXRoaXMuX3ZyZWY9bnVsbH0sZi51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gYSgpe2QucHJvZ3JhbT11LnByb2dyYW0ocCxkLl92cmVmLGQuX2ZyZWYsXyx3KTtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClFW3RdPXAuZ2V0VW5pZm9ybUxvY2F0aW9uKGQucHJvZ3JhbSxyW3RdLm5hbWUpfWlmKCFlfHwxPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGY9dDt0PWYudmVydGV4LGU9Zi5mcmFnbWVudCxyPWYudW5pZm9ybXMsbj1mLmF0dHJpYnV0ZXN9dmFyIGQ9dGhpcyxwPWQuZ2wsbT1kLl92cmVmO2QuX3ZyZWY9dS5zaGFkZXIocCxwLlZFUlRFWF9TSEFERVIsdCksbSYmbS5kaXNwb3NlKCksZC52ZXJ0U2hhZGVyPWQuX3ZyZWYuc2hhZGVyO3ZhciB2PXRoaXMuX2ZyZWY7aWYoZC5fZnJlZj11LnNoYWRlcihwLHAuRlJBR01FTlRfU0hBREVSLGUpLHYmJnYuZGlzcG9zZSgpLGQuZnJhZ1NoYWRlcj1kLl9mcmVmLnNoYWRlciwhcnx8IW4pe3ZhciBnPXAuY3JlYXRlUHJvZ3JhbSgpO2lmKHAuYXR0YWNoU2hhZGVyKGcsZC5mcmFnU2hhZGVyKSxwLmF0dGFjaFNoYWRlcihnLGQudmVydFNoYWRlcikscC5saW5rUHJvZ3JhbShnKSwhcC5nZXRQcm9ncmFtUGFyYW1ldGVyKGcscC5MSU5LX1NUQVRVUykpe3ZhciB5PXAuZ2V0UHJvZ3JhbUluZm9Mb2coZyk7dGhyb3cgbmV3IGgoeSwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiIreSl9cj1yfHxjLnVuaWZvcm1zKHAsZyksbj1ufHxjLmF0dHJpYnV0ZXMocCxnKSxwLmRlbGV0ZVByb2dyYW0oZyl9bj1uLnNsaWNlKCksbi5zb3J0KGkpO3ZhciBiLHg9W10sXz1bXSx3PVtdO2ZvcihiPTA7YjxuLmxlbmd0aDsrK2Ipe3ZhciBNPW5bYl07aWYoTS50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIGs9MHxNLnR5cGUuY2hhckF0KE0udHlwZS5sZW5ndGgtMSksQT1uZXcgQXJyYXkoayksVD0wO1Q8azsrK1QpQVtUXT13Lmxlbmd0aCxfLnB1c2goTS5uYW1lKyJbIitUKyJdIiksIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uP3cucHVzaChNLmxvY2F0aW9uK1QpOkFycmF5LmlzQXJyYXkoTS5sb2NhdGlvbikmJk0ubG9jYXRpb24ubGVuZ3RoPT09ayYmIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uW1RdP3cucHVzaCgwfE0ubG9jYXRpb25bVF0pOncucHVzaCgtMSk7eC5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6QX0pfWVsc2UgeC5wdXNoKHtuYW1lOk0ubmFtZSx0eXBlOk0udHlwZSxsb2NhdGlvbnM6W3cubGVuZ3RoXX0pLF8ucHVzaChNLm5hbWUpLCJudW1iZXIiPT10eXBlb2YgTS5sb2NhdGlvbj93LnB1c2goMHxNLmxvY2F0aW9uKTp3LnB1c2goLTEpfXZhciBTPTA7Zm9yKGI9MDtiPHcubGVuZ3RoOysrYilpZih3W2JdPDApe2Zvcig7dy5pbmRleE9mKFMpPj0wOylTKz0xO3dbYl09U312YXIgRT1uZXcgQXJyYXkoci5sZW5ndGgpO2EoKSxkLl9yZWxpbms9YSxkLnR5cGVzPXt1bmlmb3JtczpsKHIpLGF0dHJpYnV0ZXM6bChuKX0sZC5hdHRyaWJ1dGVzPXMocCxkLHgsdyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsInVuaWZvcm1zIixvKHAsZCxyLEUpKX0sZS5leHBvcnRzPWF9LHsiLi9saWIvR0xFcnJvciI6MjExLCIuL2xpYi9jcmVhdGUtYXR0cmlidXRlcyI6MjEyLCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiOjIxMywiLi9saWIvcmVmbGVjdCI6MjE0LCIuL2xpYi9ydW50aW1lLXJlZmxlY3QiOjIxNSwiLi9saWIvc2hhZGVyLWNhY2hlIjoyMTZ9XSwyMTE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnNob3J0TWVzc2FnZT1lfHwiIix0aGlzLmxvbmdNZXNzYWdlPXJ8fCIiLHRoaXMucmF3RXJyb3I9dHx8IiIsdGhpcy5tZXNzYWdlPSJnbC1zaGFkZXI6ICIrKGV8fHR8fCIiKSsocj8iXG4iK3I6IiIpLHRoaXMuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9bi5wcm90b3R5cGU9bmV3IEVycm9yLG4ucHJvdG90eXBlLm5hbWU9IkdMRXJyb3IiLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sZS5leHBvcnRzPW59LHt9XSwyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX1mdW5jdGlvbiBpKHQsZSxyLGksYSxvLHMpe2Zvcih2YXIgbD1bImdsIiwidiJdLHU9W10sYz0wO2M8YTsrK2MpbC5wdXNoKCJ4IitjKSx1LnB1c2goIngiK2MpO2wucHVzaCgiaWYoeDAubGVuZ3RoPT09dm9pZCAwKXtyZXR1cm4gZ2wudmVydGV4QXR0cmliIithKyJmKHYsIit1LmpvaW4oKSsiKX1lbHNle3JldHVybiBnbC52ZXJ0ZXhBdHRyaWIiK2ErImZ2KHYseDApfSIpO3ZhciBoPUZ1bmN0aW9uLmFwcGx5KG51bGwsbCksZj1uZXcgbih0LGUscixpLGEsaCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8scyx7c2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpW3JdKSxoKHQsaVtyXSxlKSxlfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sZW51bWVyYWJsZTohMH0pfWZ1bmN0aW9uIGEodCxlLHIsbixhLG8scyl7Zm9yKHZhciBsPW5ldyBBcnJheShhKSx1PW5ldyBBcnJheShhKSxjPTA7YzxhOysrYylpKHQsZSxyW2NdLG4sYSxsLGMpLHVbY109bFtjXTtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwibG9jYXRpb24iLHtzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIGU9MDtlPGE7KytlKXVbZV0ubG9jYXRpb249dFtlXTtlbHNlIGZvcih2YXIgZT0wO2U8YTsrK2UpdVtlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsaSxvLHMpe2U9ZXx8dC5GTE9BVCxpPSEhaSxvPW98fGEqYSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxhOysrbCl7dmFyIHU9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIodSxhLGUsaSxvLHMrbCphKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHUpfX07dmFyIGg9bmV3IEFycmF5KGEpLGY9dFsidmVydGV4QXR0cmliIithKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHMse3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGk9MDtpPGE7KytpKXt2YXIgbz1uW3JbaV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpZi5jYWxsKHQsbyxlW2ldKTtlbHNle2Zvcih2YXIgcz0wO3M8YTsrK3MpaFtzXT1lW2EqaStzXTtmLmNhbGwodCxvLGgpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBvKHQsZSxyLG4pe2Zvcih2YXIgbz17fSxsPTAsdT1yLmxlbmd0aDtsPHU7KytsKXt2YXIgYz1yW2xdLGg9Yy5uYW1lLGY9Yy50eXBlLGQ9Yy5sb2NhdGlvbnM7c3dpdGNoKGYpe2Nhc2UiYm9vbCI6Y2FzZSJpbnQiOmNhc2UiZmxvYXQiOmkodCxlLGRbMF0sbiwxLG8saCk7YnJlYWs7ZGVmYXVsdDppZihmLmluZGV4T2YoInZlYyIpPj0wKXt2YXIgcD1mLmNoYXJDb2RlQXQoZi5sZW5ndGgtMSktNDg7aWYocDwyfHxwPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7aSh0LGUsZFswXSxuLHAsbyxoKX1lbHNle2lmKCEoZi5pbmRleE9mKCJtYXQiKT49MCkpdGhyb3cgbmV3IHMoIiIsIlVua25vd24gZGF0YSB0eXBlIGZvciBhdHRyaWJ1dGUgIitoKyI6ICIrZik7dmFyIHA9Zi5jaGFyQ29kZUF0KGYubGVuZ3RoLTEpLTQ4O2lmKHA8Mnx8cD40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIraCsiOiAiK2YpO2EodCxlLGQsbixwLG8saCl9fX1yZXR1cm4gb31lLmV4cG9ydHM9bzt2YXIgcz10KCIuL0dMRXJyb3IiKSxsPW4ucHJvdG90eXBlO2wucG9pbnRlcj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLGE9aS5fZ2wsbz1pLl9sb2NhdGlvbnNbaS5faW5kZXhdO2EudmVydGV4QXR0cmliUG9pbnRlcihvLGkuX2RpbWVuc2lvbix0fHxhLkZMT0FULCEhZSxyfHwwLG58fDApLGEuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobyl9LGwuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pfSx7Ii4vR0xFcnJvciI6MjExfV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigieSIsInJldHVybiBmdW5jdGlvbigpe3JldHVybiB5fSIpKHQpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQsZSxyLGEpe2Z1bmN0aW9uIGwocil7cmV0dXJuIG5ldyBGdW5jdGlvbigiZ2wiLCJ3cmFwcGVyIiwibG9jYXRpb25zIiwicmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGdsLmdldFVuaWZvcm0od3JhcHBlci5wcm9ncmFtLGxvY2F0aW9uc1siK3IrIl0pfSIpKHQsZSxhKX1mdW5jdGlvbiB1KHQsZSxyKXtzd2l0Y2gocil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnJldHVybiJnbC51bmlmb3JtMWkobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2Nhc2UiZmxvYXQiOnJldHVybiJnbC51bmlmb3JtMWYobG9jYXRpb25zWyIrZSsiXSxvYmoiK3QrIikiO2RlZmF1bHQ6dmFyIG49ci5pbmRleE9mKCJ2ZWMiKTtpZighKDA8PW4mJm48PTEmJnIubGVuZ3RoPT09NCtuKSl7aWYoMD09PXIuaW5kZXhPZigibWF0IikmJjQ9PT1yLmxlbmd0aCl7dmFyIGk9ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpLTQ4O2lmKGk8Mnx8aT40KXRocm93IG5ldyBzKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIityKTtyZXR1cm4iZ2wudW5pZm9ybU1hdHJpeCIraSsiZnYobG9jYXRpb25zWyIrZSsiXSxmYWxzZSxvYmoiK3QrIikifXRocm93IG5ldyBzKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIityKX12YXIgaT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSktNDg7aWYoaTwyfHxpPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgZGF0YSB0eXBlIik7c3dpdGNoKHIuY2hhckF0KDApKXtjYXNlImIiOmNhc2UiaSI6cmV0dXJuImdsLnVuaWZvcm0iK2krIml2KGxvY2F0aW9uc1siK2UrIl0sb2JqIit0KyIpIjtjYXNlInYiOnJldHVybiJnbC51bmlmb3JtIitpKyJmdihsb2NhdGlvbnNbIitlKyJdLG9iaiIrdCsiKSI7ZGVmYXVsdDp0aHJvdyBuZXcgcygiIiwiVW5yZWNvZ25pemVkIGRhdGEgdHlwZSBmb3IgdmVjdG9yICIrbmFtZSsiOiAiK3IpfX19ZnVuY3Rpb24gYyh0LGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZSlyZXR1cm5bW3QsZV1dO3ZhciByPVtdO2Zvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dLGE9dDtwYXJzZUludChuKSsiIj09PW4/YSs9IlsiK24rIl0iOmErPSIuIituLCJvYmplY3QiPT10eXBlb2YgaT9yLnB1c2guYXBwbHkocixjKGEsaSkpOnIucHVzaChbYSxpXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaChlKXtmb3IodmFyIG49WyJyZXR1cm4gZnVuY3Rpb24gdXBkYXRlUHJvcGVydHkob2JqKXsiXSxpPWMoIiIsZSksbz0wO288aS5sZW5ndGg7KytvKXt2YXIgcz1pW29dLGw9c1swXSxoPXNbMV07YVtoXSYmbi5wdXNoKHUobCxoLHJbaF0udHlwZSkpfXJldHVybiBuLnB1c2goInJldHVybiBvYmp9IiksbmV3IEZ1bmN0aW9uKCJnbCIsImxvY2F0aW9ucyIsbi5qb2luKCJcbiIpKSh0LGEpfWZ1bmN0aW9uIGYodCl7c3dpdGNoKHQpe2Nhc2UiYm9vbCI6cmV0dXJuITE7Y2FzZSJpbnQiOmNhc2Uic2FtcGxlcjJEIjpjYXNlInNhbXBsZXJDdWJlIjpjYXNlImZsb2F0IjpyZXR1cm4gMDtkZWZhdWx0OnZhciBlPXQuaW5kZXhPZigidmVjIik7aWYoMDw9ZSYmZTw9MSYmdC5sZW5ndGg9PT00K2Upe3ZhciByPXQuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS00ODtpZihyPDJ8fHI+NCl0aHJvdyBuZXcgcygiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9pKHIsITEpOmkociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDg7aWYocjwyfHxyPjQpdGhyb3cgbmV3IHMoIiIsIkludmFsaWQgdW5pZm9ybSBkaW1lbnNpb24gdHlwZSBmb3IgbWF0cml4ICIrbmFtZSsiOiAiK3QpO3JldHVybiBpKHIqciwwKX10aHJvdyBuZXcgcygiIiwiVW5rbm93biB1bmlmb3JtIGRhdGEgdHlwZSBmb3IgIituYW1lKyI6ICIrdCl9fWZ1bmN0aW9uIGQodCxlLGkpe2lmKCJvYmplY3QiPT10eXBlb2YgaSl7dmFyIG89cChpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bihvKSxzZXQ6aChpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pfWVsc2UgYVtpXT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6bChpKSxzZXQ6aChpKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMX0pOnRbZV09ZihyW2ldLnR5cGUpfWZ1bmN0aW9uIHAodCl7dmFyIGU7aWYoQXJyYXkuaXNBcnJheSh0KSl7ZT1uZXcgQXJyYXkodC5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWQoZSxyLHRbcl0pfWVsc2V7ZT17fTtmb3IodmFyIG4gaW4gdClkKGUsbix0W25dKX1yZXR1cm4gZX12YXIgbT1vKHIsITApO3JldHVybntnZXQ6bihwKG0pKSxzZXQ6aChtKSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19dmFyIG89dCgiLi9yZWZsZWN0Iikscz10KCIuL0dMRXJyb3IiKTtlLmV4cG9ydHM9YX0seyIuL0dMRXJyb3IiOjIxMSwiLi9yZWZsZWN0IjoyMTR9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZSxhPWkuc3BsaXQoIi4iKSxvPXIscz0wO3M8YS5sZW5ndGg7KytzKXt2YXIgbD1hW3NdLnNwbGl0KCJbIik7aWYobC5sZW5ndGg+MSl7bFswXWluIG98fChvW2xbMF1dPVtdKSxvPW9bbFswXV07Zm9yKHZhciB1PTE7dTxsLmxlbmd0aDsrK3Upe3ZhciBjPXBhcnNlSW50KGxbdV0pO3U8bC5sZW5ndGgtMXx8czxhLmxlbmd0aC0xPyhjIGluIG98fCh1PGwubGVuZ3RoLTE/b1tjXT1bXTpvW2NdPXt9KSxvPW9bY10pOm9bY109ZT9uOnRbbl0udHlwZX19ZWxzZSBzPGEubGVuZ3RoLTE/KGxbMF1pbiBvfHwob1tsWzBdXT17fSksbz1vW2xbMF1dKTpvW2xbMF1dPWU/bjp0W25dLnR5cGV9cmV0dXJuIHJ9ZS5leHBvcnRzPW59LHt9XSwyMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCFzKXt2YXIgcj1PYmplY3Qua2V5cyhvKTtzPXt9O2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO3NbdFtpXV09b1tpXX19cmV0dXJuIHNbZV19ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksaT1bXSxhPTA7YTxyOysrYSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsYSk7aWYobyl7dmFyIHM9bih0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKWkucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrbCsiXSIpLHR5cGU6c30pO2Vsc2UgaS5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxpPVtdLGE9MDthPHI7KythKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGEpO28mJmkucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTpuKHQsby50eXBlKX0pfXJldHVybiBpfXIudW5pZm9ybXM9aSxyLmF0dHJpYnV0ZXM9YTt2YXIgbz17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsQk9PTDoiYm9vbCIsQk9PTF9WRUMyOiJidmVjMiIsQk9PTF9WRUMzOiJidmVjMyIsQk9PTF9WRUM0OiJidmVjNCIsRkxPQVRfTUFUMjoibWF0MiIsRkxPQVRfTUFUMzoibWF0MyIsRkxPQVRfTUFUNDoibWF0NCIsU0FNUExFUl8yRDoic2FtcGxlcjJEIixTQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIn0scz1udWxsfSx7fV0sMjE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dGhpcy5pZD10LHRoaXMuc3JjPWUsdGhpcy50eXBlPXIsdGhpcy5zaGFkZXI9bix0aGlzLmNvdW50PWEsdGhpcy5wcm9ncmFtcz1bXSx0aGlzLmNhY2hlPW99ZnVuY3Rpb24gaSh0KXt0aGlzLmdsPXQsdGhpcy5zaGFkZXJzPVt7fSx7fV0sdGhpcy5wcm9ncmFtcz17fX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShuLHIpLHQuY29tcGlsZVNoYWRlcihuKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIobix0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIGk9dC5nZXRTaGFkZXJJbmZvTG9nKG4pO3RyeXt2YXIgYT1oKGkscixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6ICIrdCksbmV3IGMoaSwiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcbiIraSl9dGhyb3cgbmV3IGMoaSxhLnNob3J0LGEubG9uZyl9cmV0dXJuIG59ZnVuY3Rpb24gbyh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKGEsZSksdC5hdHRhY2hTaGFkZXIoYSxyKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoOysrbyl0LmJpbmRBdHRyaWJMb2NhdGlvbihhLGlbb10sbltvXSk7aWYodC5saW5rUHJvZ3JhbShhKSwhdC5nZXRQcm9ncmFtUGFyYW1ldGVyKGEsdC5MSU5LX1NUQVRVUykpe3ZhciBzPXQuZ2V0UHJvZ3JhbUluZm9Mb2coYSk7dGhyb3cgbmV3IGMocywiRXJyb3IgbGlua2luZyBwcm9ncmFtOiAiK3MpfXJldHVybiBhfWZ1bmN0aW9uIHModCl7dmFyIGU9ZC5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBpKHQpLGQuc2V0KHQsZSkpLGV9ZnVuY3Rpb24gbCh0LGUscil7cmV0dXJuIHModCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9ZnVuY3Rpb24gdSh0LGUscixuLGkpe3JldHVybiBzKHQpLmdldFByb2dyYW0oZSxyLG4saSl9ci5zaGFkZXI9bCxyLnByb2dyYW09dTt2YXIgYz10KCIuL0dMRXJyb3IiKSxoPXQoImdsLWZvcm1hdC1jb21waWxlci1lcnJvciIpLGY9InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWttYXAtc2hpbSIpOldlYWtNYXAsZD1uZXcgZixwPTA7bi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBtPWkucHJvdG90eXBlO20uZ2V0U2hhZGVyUmVmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5nbCxpPXRoaXMuc2hhZGVyc1t0PT09ci5GUkFHTUVOVF9TSEFERVJ8MF0sbz1pW2VdO2lmKG8mJnIuaXNTaGFkZXIoby5zaGFkZXIpKW8uY291bnQrPTE7ZWxzZXt2YXIgcz1hKHIsdCxlKTtvPWlbZV09bmV3IG4ocCsrLGUsdCxzLFtdLDEsdGhpcyl9cmV0dXJuIG99LG0uZ2V0UHJvZ3JhbT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bdC5pZCxlLmlkLHIuam9pbigiOiIpLG4uam9pbigiOiIpXS5qb2luKCJAIiksYT10aGlzLnByb2dyYW1zW2ldO3JldHVybiBhJiZ0aGlzLmdsLmlzUHJvZ3JhbShhKXx8KHRoaXMucHJvZ3JhbXNbaV09YT1vKHRoaXMuZ2wsdC5zaGFkZXIsZS5zaGFkZXIscixuKSx0LnByb2dyYW1zLnB1c2goaSksZS5wcm9ncmFtcy5wdXNoKGkpKSxhfX0seyIuL0dMRXJyb3IiOjIxMSwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoxNjMsIndlYWttYXAtc2hpbSI6NTYwfV0sMjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmdsPXQsdGhpcy5waWNrQnVmZmVyPWUsdGhpcy5zY3JlZW5Cb3g9WzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdLHRoaXMudmlld0JveD1bMCwwLDAsMF0sdGhpcy5kYXRhQm94PVstMTAsLTEwLDEwLDEwXSx0aGlzLmdyaWRMaW5lRW5hYmxlPVshMCwhMF0sdGhpcy5ncmlkTGluZVdpZHRoPVsxLDFdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy50aWNrTWFya0xlbmd0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya1dpZHRoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy50aWNrQW5nbGU9WzAsMCwwLDBdLHRoaXMudGlja0VuYWJsZT1bITAsITAsITAsITBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzE1LDE1LDE1LDE1XSx0aGlzLmxhYmVsQW5nbGU9WzAsTWF0aC5QSS8yLDAsMypNYXRoLlBJLzJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aXRsZUNlbnRlcj1bMCwwXSx0aGlzLnRpdGxlRW5hYmxlPSEwLHRoaXMudGl0bGVBbmdsZT0wLHRoaXMudGl0bGVDb2xvcj1bMCwwLDAsMV0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMF0sdGhpcy5iYWNrZ3JvdW5kQ29sb3I9WzAsMCwwLDBdLHRoaXMuemVyb0xpbmVFbmFibGU9WyEwLCEwXSx0aGlzLnplcm9MaW5lV2lkdGg9WzQsNF0sdGhpcy56ZXJvTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMiwyLDIsMl0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkPW51bGwsdGhpcy50ZXh0PW51bGwsdGhpcy5saW5lPW51bGwsdGhpcy5ib3g9bnVsbCx0aGlzLm9iamVjdHM9W10sdGhpcy5vdmVybGF5cz1bXSx0aGlzLl90aWNrQm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5zdGF0aWM9ITEsdGhpcy5kaXJ0eT0hMSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLnBpY2tEZWxheT0xMjAsdGhpcy5waWNrUmFkaXVzPTEwLHRoaXMuX3BpY2tUaW1lb3V0PW51bGwsdGhpcy5fZHJhd1BpY2s9dGhpcy5kcmF3UGljay5iaW5kKHRoaXMpLHRoaXMuX2RlcHRoQ291bnRlcj0wfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXQuc2xpY2UoKSxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXT1lW3JdLnNsaWNlKCk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0LngtZS54fWZ1bmN0aW9uIG8odCl7dmFyIGU9dC5nbCxyPXMoZSxbZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XSksaT1uZXcgbihlLHIpO3JldHVybiBpLmdyaWQ9bChpKSxpLnRleHQ9dShpKSxpLmxpbmU9YyhpKSxpLmJveD1oKGkpLGkudXBkYXRlKHQpLGl9ZS5leHBvcnRzPW87dmFyIHM9dCgiZ2wtc2VsZWN0LXN0YXRpYyIpLGw9dCgiLi9saWIvZ3JpZCIpLHU9dCgiLi9saWIvdGV4dCIpLGM9dCgiLi9saWIvbGluZSIpLGg9dCgiLi9saWIvYm94IiksZj1uLnByb3RvdHlwZTtmLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sZi5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxmLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxmLmRyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7dGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHQuc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIHU9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IodVswXSp1WzNdLHVbMV0qdVszXSx1WzJdKnVbM10sdVszXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKSx0LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciBjPXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcihjWzBdKmNbM10sY1sxXSpjWzNdLGNbMl0qY1szXSxjWzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGg9dGhpcy56ZXJvTGluZUVuYWJsZSxmPXRoaXMuemVyb0xpbmVDb2xvcixkPXRoaXMuemVyb0xpbmVXaWR0aDtpZihoWzBdfHxoWzFdKXtvLmJpbmQoKTtmb3IodmFyIHA9MDtwPDI7KytwKWlmKGhbcF0mJm5bcF08PTAmJm5bcCsyXT49MCl7dmFyIG09ZVtwXS1uW3BdKihlW3ArMl0tZVtwXSkvKG5bcCsyXS1uW3BdKTswPT09cD9vLmRyYXdMaW5lKG0sZVsxXSxtLGVbM10sZFtwXSxmW3BdKTpvLmRyYXdMaW5lKGVbMF0sbSxlWzJdLG0sZFtwXSxmW3BdKX19Zm9yKHZhciBwPTA7cDxsLmxlbmd0aDsrK3ApbFtwXS5kcmF3KCk7dC52aWV3cG9ydChlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSksdC5zY2lzc29yKGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0aGlzLmdyaWQuZHJhd1RpY2tNYXJrcygpLG8uYmluZCgpO3ZhciB2PXRoaXMuYm9yZGVyTGluZUVuYWJsZSxnPXRoaXMuYm9yZGVyTGluZVdpZHRoLHk9dGhpcy5ib3JkZXJMaW5lQ29sb3I7dlsxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqZ1sxXSppLHJbMF0sclszXSsuNSpnWzNdKmksZ1sxXSx5WzFdKSx2WzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqZ1swXSppLHJbMV0sclsyXSsuNSpnWzJdKmksclsxXSxnWzBdLHlbMF0pLHZbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41KmdbMV0qaSxyWzJdLHJbM10rLjUqZ1szXSppLGdbM10seVszXSksdlsyXSYmby5kcmF3TGluZShyWzBdLS41KmdbMF0qaSxyWzNdLHJbMl0rLjUqZ1syXSppLHJbM10sZ1syXSx5WzJdKSxzLmJpbmQoKTtmb3IodmFyIHA9MDtwPDI7KytwKXMuZHJhd1RpY2tzKHApO3RoaXMudGl0bGVFbmFibGUmJnMuZHJhd1RpdGxlKCk7Zm9yKHZhciBiPXRoaXMub3ZlcmxheXMscD0wO3A8Yi5sZW5ndGg7KytwKWJbcF0uZHJhdygpO3QuZGlzYWJsZSh0LlNDSVNTT1JfVEVTVCksdC5kaXNhYmxlKHQuQkxFTkQpLHQuZGVwdGhNYXNrKCEwKX19fSgpLGYuZHJhd1BpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighdGhpcy5zdGF0aWMpe3ZhciB0PXRoaXMucGlja0J1ZmZlcjt0aGlzLmdsO3RoaXMuX3BpY2tUaW1lb3V0PW51bGwsdC5iZWdpbigpO2Zvcih2YXIgZT0xLHI9dGhpcy5vYmplY3RzLG49MDtuPHIubGVuZ3RoOysrbillPXJbbl0uZHJhd1BpY2soZSk7dC5lbmQoKX19fSgpLGYucGljaz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnN0YXRpYyl7dmFyIHI9dGhpcy5waXhlbFJhdGlvLG49dGhpcy5waWNrUGl4ZWxSYXRpbyxpPXRoaXMudmlld0JveCxhPTB8TWF0aC5yb3VuZCgodC1pWzBdL3IpKm4pLG89MHxNYXRoLnJvdW5kKChlLWlbMV0vcikqbikscz10aGlzLnBpY2tCdWZmZXIucXVlcnkoYSxvLHRoaXMucGlja1JhZGl1cyk7aWYoIXMpcmV0dXJuIG51bGw7Zm9yKHZhciBsPXMuaWQrKHMudmFsdWVbMF08PDgpKyhzLnZhbHVlWzFdPDwxNikrKHMudmFsdWVbMl08PDI0KSx1PXRoaXMub2JqZWN0cyxjPTA7Yzx1Lmxlbmd0aDsrK2Mpe3ZhciBoPXVbY10ucGljayhhLG8sbCk7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH19fSgpLGYuc2V0U2NyZWVuQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NyZWVuQm94LHI9dGhpcy5waXhlbFJhdGlvO2VbMF09MHxNYXRoLnJvdW5kKHRbMF0qciksZVsxXT0wfE1hdGgucm91bmQodFsxXSpyKSxlWzJdPTB8TWF0aC5yb3VuZCh0WzJdKnIpLGVbM109MHxNYXRoLnJvdW5kKHRbM10qciksdGhpcy5zZXREaXJ0eSgpfSxmLnNldERhdGFCb3g9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhQm94OyhlWzBdIT09dFswXXx8ZVsxXSE9PXRbMV18fGVbMl0hPT10WzJdfHxlWzNdIT09dFszXSkmJihlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sdGhpcy5zZXREaXJ0eSgpKX0sZi5zZXRWaWV3Qm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMudmlld0JveDtyWzBdPTB8TWF0aC5yb3VuZCh0WzBdKmUpLHJbMV09MHxNYXRoLnJvdW5kKHRbMV0qZSksclsyXT0wfE1hdGgucm91bmQodFsyXSplKSxyWzNdPTB8TWF0aC5yb3VuZCh0WzNdKmUpO3ZhciBuPXRoaXMucGlja1BpeGVsUmF0aW87dGhpcy5waWNrQnVmZmVyLnNoYXBlPVswfE1hdGgucm91bmQoKHRbMl0tdFswXSkqbiksMHxNYXRoLnJvdW5kKCh0WzNdLXRbMV0pKm4pXSx0aGlzLnNldERpcnR5KCl9LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e307dmFyIGU9dGhpcy5nbDt0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvfHwxO3ZhciByPXRoaXMucGl4ZWxSYXRpbzt0aGlzLnBpY2tQaXhlbFJhdGlvPU1hdGgubWF4KHIsMSksdGhpcy5zZXRTY3JlZW5Cb3godC5zY3JlZW5Cb3h8fFswLDAsZS5kcmF3aW5nQnVmZmVyV2lkdGgvcixlLmRyYXdpbmdCdWZmZXJIZWlnaHQvcl0pO3RoaXMuc2NyZWVuQm94O3RoaXMuc2V0Vmlld0JveCh0LnZpZXdCb3h8fFsuMTI1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuMTI1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFsyXS10aGlzLnNjcmVlbkJveFswXSkvciwuODc1Kih0aGlzLnNjcmVlbkJveFszXS10aGlzLnNjcmVlbkJveFsxXSkvcl0pO3ZhciBuPXRoaXMudmlld0JveCxvPShuWzJdLW5bMF0pLyhuWzNdLW5bMV0pO3RoaXMuc2V0RGF0YUJveCh0LmRhdGFCb3h8fFstMTAsLTEwL28sMTAsMTAvb10pLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9aSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPWkodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj1pKHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0JiYhdC50aXRsZUVuYWJsZSksdGhpcy50aXRsZUFuZ2xlPXQudGl0bGVBbmdsZXx8MCx0aGlzLnRpdGxlQ29sb3I9KHQudGl0bGVDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMubGFiZWxQYWQ9KHQubGFiZWxQYWR8fFsxNSwxNSwxNSwxNV0pLnNsaWNlKCksdGhpcy5sYWJlbEFuZ2xlPSh0LmxhYmVsQW5nbGV8fFswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSkuc2xpY2UoKSx0aGlzLmxhYmVsRW5hYmxlPSh0LmxhYmVsRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMubGFiZWxDb2xvcj1pKHQubGFiZWxDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja1BhZD0odC50aWNrUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMudGlja0FuZ2xlPSh0LnRpY2tBbmdsZXx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja0VuYWJsZT0odC50aWNrRW5hYmxlfHxbITAsITAsITAsITBdKS5zbGljZSgpLHRoaXMudGlja0NvbG9yPWkodC50aWNrQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLmJvcmRlckxpbmVFbmFibGU9KHQuYm9yZGVyTGluZUVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVXaWR0aD0odC5ib3JkZXJMaW5lV2lkdGh8fFsyLDIsMiwyXSkuc2xpY2UoKSx0aGlzLmJvcmRlckxpbmVDb2xvcj1pKHQuYm9yZGVyTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSk7dmFyIHM9dC50aWNrc3x8W1tdLFtdXSxsPXRoaXMuX3RpY2tCb3VuZHM7bFswXT1sWzFdPTEvMCxsWzJdPWxbM109LTEvMDtmb3IodmFyIHU9MDt1PDI7Kyt1KXt2YXIgYz1zW3VdLnNsaWNlKDApOzAhPT1jLmxlbmd0aCYmKGMuc29ydChhKSxsW3VdPU1hdGgubWluKGxbdV0sY1swXS54KSxsW3UrMl09TWF0aC5tYXgobFt1KzJdLGNbYy5sZW5ndGgtMV0ueCkpfXRoaXMuZ3JpZC51cGRhdGUoe2JvdW5kczpsLHRpY2tzOnN9KSx0aGlzLnRleHQudXBkYXRlKHtib3VuZHM6bCx0aWNrczpzLGxhYmVsczp0LmxhYmVsc3x8WyJ4IiwieSJdLGxhYmVsU2l6ZTp0LmxhYmVsU2l6ZXx8WzEyLDEyXSxsYWJlbEZvbnQ6dC5sYWJlbEZvbnR8fFsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiXSx0aXRsZTp0LnRpdGxlfHwiIix0aXRsZVNpemU6dC50aXRsZVNpemV8fDE4LHRpdGxlRm9udDp0LnRpdGxlRm9udHx8InNhbnMtc2VyaWYifSksdGhpcy5zdGF0aWM9ISF0LnN0YXRpYyx0aGlzLnNldERpcnR5KCl9LGYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuYm94LmRpc3Bvc2UoKSx0aGlzLmdyaWQuZGlzcG9zZSgpLHRoaXMudGV4dC5kaXNwb3NlKCksdGhpcy5saW5lLmRpc3Bvc2UoKTtmb3IodmFyIHQ9dGhpcy5vYmplY3RzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub2JqZWN0c1t0XS5kaXNwb3NlKCk7dGhpcy5vYmplY3RzLmxlbmd0aD0wO2Zvcih2YXIgdD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxmLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sZi5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sZi5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxmLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjIwNCwiLi9saWIvZ3JpZCI6MjA1LCIuL2xpYi9saW5lIjoyMDYsIi4vbGliL3RleHQiOjIwOCwiZ2wtc2VsZWN0LXN0YXRpYyI6MjUyfV0sMjE4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xudmFyeWluZyB2ZWMyIHV2O1xudm9pZCBtYWluKCkge1xuICB1diA9IHBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24sIDAsIDEpO1xufSIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjI1M31dLDIxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW51bGw7dHJ5e3I9dC5nZXRDb250ZXh0KCJ3ZWJnbCIsZSkscnx8KHI9dC5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLGUpKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH1yZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3ZhciBlPU1hdGgucm91bmQoTWF0aC5sb2coTWF0aC5hYnModCkpL01hdGgubG9nKDEwKSk7aWYoZTwwKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLC1lKSk7cmV0dXJuIE1hdGguY2VpbCh0KnIpL3J9aWYoZT4wKXt2YXIgcj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgdHx8dH1mdW5jdGlvbiBzKHQpe2Z1bmN0aW9uIGUoKXtpZighdyYmRy5hdXRvUmVzaXplKXt2YXIgdD1NLnBhcmVudE5vZGUsZT0xLHI9MTt0JiZ0IT09ZG9jdW1lbnQuYm9keT8oZT10LmNsaWVudFdpZHRoLHI9dC5jbGllbnRIZWlnaHQpOihlPXdpbmRvdy5pbm5lcldpZHRoLHI9d2luZG93LmlubmVySGVpZ2h0KTt2YXIgbj0wfE1hdGguY2VpbChlKkcucGl4ZWxSYXRpbyksaT0wfE1hdGguY2VpbChyKkcucGl4ZWxSYXRpbyk7aWYobiE9PU0ud2lkdGh8fGkhPT1NLmhlaWdodCl7TS53aWR0aD1uLE0uaGVpZ2h0PWk7dmFyIGE9TS5zdHlsZTthLnBvc2l0aW9uPWEucG9zaXRpb258fCJhYnNvbHV0ZSIsYS5sZWZ0PSIwcHgiLGEudG9wPSIwcHgiLGEud2lkdGg9ZSsicHgiLGEuaGVpZ2h0PXIrInB4IixOPSEwfX19ZnVuY3Rpb24gcigpe2Zvcih2YXIgdD1PLmxlbmd0aCxlPWoubGVuZ3RoLHI9MDtyPGU7KytyKUZbcl09MDt0OmZvcih2YXIgcj0wO3I8dDsrK3Ipe3ZhciBuPU9bcl0saT1uLnBpY2tTbG90cztpZihpKXtmb3IodmFyIGE9MDthPGU7KythKWlmKEZbYV0raTwyNTUpe1Jbcl09YSxuLnNldFBpY2tCYXNlKEZbYV0rMSksRlthXSs9aTtjb250aW51ZSB0fXZhciBvPWYoQSxxKTtSW3JdPWUsai5wdXNoKG8pLEYucHVzaChpKSxuLnNldFBpY2tCYXNlKDEpLGUrPTF9ZWxzZSBSW3JdPS0xfWZvcig7ZT4wJiYwPT09RltlLTFdOylGLnBvcCgpLGoucG9wKCkuZGlzcG9zZSgpfWZ1bmN0aW9uIHMoKXtpZihHLmNvbnRleHRMb3N0KXJldHVybiEwO0EuaXNDb250ZXh0TG9zdCgpJiYoRy5jb250ZXh0TG9zdD0hMCxHLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSxHLnNlbGVjdGlvbi5vYmplY3Q9bnVsbCxHLm9uY29udGV4dGxvc3MmJkcub25jb250ZXh0bG9zcygpKX1mdW5jdGlvbiBiKCl7aWYoIXMoKSl7QS5jb2xvck1hc2soITAsITAsITAsITApLEEuZGVwdGhNYXNrKCEwKSxBLmRpc2FibGUoQS5CTEVORCksQS5lbmFibGUoQS5ERVBUSF9URVNUKTtmb3IodmFyIHQ9Ty5sZW5ndGgsZT1qLmxlbmd0aCxyPTA7cjxlOysrcil7dmFyIG49altyXTtuLnNoYXBlPVksbi5iZWdpbigpO2Zvcih2YXIgaT0wO2k8dDsrK2kpaWYoUltpXT09PXIpe3ZhciBhPU9baV07YS5kcmF3UGljayYmKGEucGl4ZWxSYXRpbz0xLGEuZHJhd1BpY2soSCkpfW4uZW5kKCl9fX1mdW5jdGlvbiB4KCl7aWYoIXMoKSl7ZSgpO3ZhciB0PUcuY2FtZXJhLnRpY2soKTtILnZpZXc9Ry5jYW1lcmEubWF0cml4LE49Tnx8dCxCPUJ8fHQsSS5waXhlbFJhdGlvPUcucGl4ZWxSYXRpbyxQLnBpeGVsUmF0aW89Ry5waXhlbFJhdGlvO3ZhciByPU8ubGVuZ3RoLG49WlswXSxpPVpbMV07blswXT1uWzFdPW5bMl09MS8wLGlbMF09aVsxXT1pWzJdPS0xLzA7Zm9yKHZhciBvPTA7bzxyOysrbyl7dmFyIGw9T1tvXTtsLnBpeGVsUmF0aW89Ry5waXhlbFJhdGlvLGwuYXhlcz1HLmF4ZXMsTj1OfHwhIWwuZGlydHksQj1CfHwhIWwuZGlydHk7dmFyIHU9bC5ib3VuZHM7aWYodSlmb3IodmFyIGg9dVswXSxmPXVbMV0sZD0wO2Q8MzsrK2QpbltkXT1NYXRoLm1pbihuW2RdLGhbZF0pLGlbZF09TWF0aC5tYXgoaVtkXSxmW2RdKX12YXIgbT1HLmJvdW5kcztpZihHLmF1dG9Cb3VuZHMpZm9yKHZhciBkPTA7ZDwzOysrZCl7aWYoaVtkXTxuW2RdKW5bZF09LTEsaVtkXT0xO2Vsc2V7bltkXT09PWlbZF0mJihuW2RdLT0xLGlbZF0rPTEpO3ZhciBnPS4wNSooaVtkXS1uW2RdKTtuW2RdPW5bZF0tZyxpW2RdPWlbZF0rZ31tWzBdW2RdPW5bZF0sbVsxXVtkXT1pW2RdfWZvcih2YXIgeT0hMSxkPTA7ZDwzOysrZCl5PXl8fEpbMF1bZF0hPT1tWzBdW2RdfHxKWzFdW2RdIT09bVsxXVtkXSxKWzBdW2RdPW1bMF1bZF0sSlsxXVtkXT1tWzFdW2RdO2lmKEI9Qnx8eSxOPU58fHkpe2lmKHkpe2Zvcih2YXIgeD1bMCwwLDBdLG89MDtvPDM7KytvKXhbb109YSgobVsxXVtvXS1tWzBdW29dKS8xMCk7SS5hdXRvVGlja3M/SS51cGRhdGUoe2JvdW5kczptLHRpY2tTcGFjaW5nOnh9KTpJLnVwZGF0ZSh7Ym91bmRzOm19KX12YXIgXz1BLmRyYXdpbmdCdWZmZXJXaWR0aCx3PUEuZHJhd2luZ0J1ZmZlckhlaWdodDtxWzBdPV8scVsxXT13LFlbMF09MHxNYXRoLm1heChfL0cucGl4ZWxSYXRpbywxKSxZWzFdPTB8TWF0aC5tYXgody9HLnBpeGVsUmF0aW8sMSksdihVLEcuZm92eSxfL3csRy56TmVhcixHLnpGYXIpO2Zvcih2YXIgbz0wO288MTY7KytvKVZbb109MDtWWzE1XT0xO2Zvcih2YXIgTT0wLG89MDtvPDM7KytvKU09TWF0aC5tYXgoTSxtWzFdW29dLW1bMF1bb10pO2Zvcih2YXIgbz0wO288MzsrK28pRy5hdXRvU2NhbGU/Vls1Km9dPUcuYXNwZWN0W29dLyhtWzFdW29dLW1bMF1bb10pOlZbNSpvXT0xL00sRy5hdXRvQ2VudGVyJiYoVlsxMitvXT0uNSotVls1Km9dKihtWzBdW29dK21bMV1bb10pKTtmb3IodmFyIG89MDtvPHI7KytvKXt2YXIgbD1PW29dO2wuYXhlc0JvdW5kcz1tLEcuY2xpcFRvQm91bmRzJiYobC5jbGlwQm91bmRzPW0pfVMub2JqZWN0JiYoRy5zbmFwVG9EYXRhP1AucG9zaXRpb249Uy5kYXRhQ29vcmRpbmF0ZTpQLnBvc2l0aW9uPVMuZGF0YVBvc2l0aW9uLFAuYm91bmRzPW0pLEImJihCPSExLGIoKSksRy5heGVzUGl4ZWxzPWMoRy5heGVzLEgsXyx3KSxHLm9ucmVuZGVyJiZHLm9ucmVuZGVyKCksQS5iaW5kRnJhbWVidWZmZXIoQS5GUkFNRUJVRkZFUixudWxsKSxBLnZpZXdwb3J0KDAsMCxfLHcpO3ZhciBrPUcuY2xlYXJDb2xvcjtBLmNsZWFyQ29sb3Ioa1swXSxrWzFdLGtbMl0sa1szXSksQS5jbGVhcihBLkNPTE9SX0JVRkZFUl9CSVR8QS5ERVBUSF9CVUZGRVJfQklUKSxBLmRlcHRoTWFzayghMCksQS5jb2xvck1hc2soITAsITAsITAsITApLEEuZW5hYmxlKEEuREVQVEhfVEVTVCksQS5kZXB0aEZ1bmMoQS5MRVFVQUwpLEEuZGlzYWJsZShBLkJMRU5EKSxBLmRpc2FibGUoQS5DVUxMX0ZBQ0UpO3ZhciBUPSExO0kuZW5hYmxlJiYoVD1UfHxJLmlzVHJhbnNwYXJlbnQoKSxJLmRyYXcoSCkpLFAuYXhlcz1JLFMub2JqZWN0JiZQLmRyYXcoSCksQS5kaXNhYmxlKEEuQ1VMTF9GQUNFKTtmb3IodmFyIG89MDtvPHI7KytvKXt2YXIgbD1PW29dO2wuYXhlcz1JLGwucGl4ZWxSYXRpbz1HLnBpeGVsUmF0aW8sbC5pc09wYXF1ZSYmbC5pc09wYXF1ZSgpJiZsLmRyYXcoSCksbC5pc1RyYW5zcGFyZW50JiZsLmlzVHJhbnNwYXJlbnQoKSYmKFQ9ITApfWlmKFQpe0Uuc2hhcGU9cSxFLmJpbmQoKSxBLmNsZWFyKEEuREVQVEhfQlVGRkVSX0JJVCksQS5jb2xvck1hc2soITEsITEsITEsITEpLEEuZGVwdGhNYXNrKCEwKSxBLmRlcHRoRnVuYyhBLkxFU1MpLEkuZW5hYmxlJiZJLmlzVHJhbnNwYXJlbnQoKSYmSS5kcmF3VHJhbnNwYXJlbnQoSCk7Zm9yKHZhciBvPTA7bzxyOysrbyl7dmFyIGw9T1tvXTtsLmlzT3BhcXVlJiZsLmlzT3BhcXVlKCkmJmwuZHJhdyhIKX1BLmVuYWJsZShBLkJMRU5EKSxBLmJsZW5kRXF1YXRpb24oQS5GVU5DX0FERCksQS5ibGVuZEZ1bmMoQS5PTkUsQS5PTkVfTUlOVVNfU1JDX0FMUEhBKSxBLmNvbG9yTWFzayghMCwhMCwhMCwhMCksQS5kZXB0aE1hc2soITEpLEEuY2xlYXJDb2xvcigwLDAsMCwwKSxBLmNsZWFyKEEuQ09MT1JfQlVGRkVSX0JJVCksSS5pc1RyYW5zcGFyZW50KCkmJkkuZHJhd1RyYW5zcGFyZW50KEgpO2Zvcih2YXIgbz0wO288cjsrK28pe3ZhciBsPU9bb107bC5pc1RyYW5zcGFyZW50JiZsLmlzVHJhbnNwYXJlbnQoKSYmbC5kcmF3VHJhbnNwYXJlbnQoSCl9QS5iaW5kRnJhbWVidWZmZXIoQS5GUkFNRUJVRkZFUixudWxsKSxBLmJsZW5kRnVuYyhBLk9ORSxBLk9ORV9NSU5VU19TUkNfQUxQSEEpLEEuZGlzYWJsZShBLkRFUFRIX1RFU1QpLEwuYmluZCgpLEUuY29sb3JbMF0uYmluZCgwKSxMLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAscChBKSxBLmRpc2FibGUoQS5CTEVORCl9Tj0hMTtmb3IodmFyIG89MDtvPHI7KytvKU9bb10uZGlydHk9ITF9fX1mdW5jdGlvbiBfKCl7d3x8Ry5jb250ZXh0TG9zdHx8KHJlcXVlc3RBbmltYXRpb25GcmFtZShfKSx4KCkpfXQ9dHx8e307dmFyIHc9ITEsTT0odC5waXhlbFJhdGlvfHxwYXJzZUZsb2F0KHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0LmNhbnZhcyk7aWYoIU0paWYoTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0LmNvbnRhaW5lcil7dmFyIGs9dC5jb250YWluZXI7ay5hcHBlbmRDaGlsZChNKX1lbHNlIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTSk7dmFyIEE9dC5nbDtpZihBfHwoQT1pKE0sdC5nbE9wdGlvbnN8fHtwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwfSkpLCFBKXRocm93IG5ldyBFcnJvcigid2ViZ2wgbm90IHN1cHBvcnRlZCIpO3ZhciBUPXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSxTPW5ldyBuLEU9ZChBLFtBLmRyYXdpbmdCdWZmZXJXaWR0aCxBLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHtwcmVmZXJGbG9hdDoheX0pLEw9ZyhBKSxDPXQuY2FtZXJhfHx7ZXllOlsyLDAsMF0sY2VudGVyOlswLDAsMF0sdXA6WzAsMSwwXSx6b29tTWluOi4xLHpvb21NYXg6MTAwLG1vZGU6InR1cm50YWJsZSJ9LHo9dC5heGVzfHx7fSxJPXUoQSx6KTtJLmVuYWJsZT0hei5kaXNhYmxlO3ZhciBEPXQuc3Bpa2VzfHx7fSxQPWgoQSxEKSxPPVtdLFI9W10sRj1bXSxqPVtdLE49ITAsQj0hMCxVPW5ldyBBcnJheSgxNiksVj1uZXcgQXJyYXkoMTYpLEg9e3ZpZXc6bnVsbCxwcm9qZWN0aW9uOlUsbW9kZWw6Vn0sQj0hMCxxPVtBLmRyYXdpbmdCdWZmZXJXaWR0aCxBLmRyYXdpbmdCdWZmZXJIZWlnaHRdLEc9e2dsOkEsY29udGV4dExvc3Q6ITEscGl4ZWxSYXRpbzp0LnBpeGVsUmF0aW98fHBhcnNlRmxvYXQod2luZG93LmRldmljZVBpeGVsUmF0aW8pLGNhbnZhczpNLHNlbGVjdGlvbjpTLGNhbWVyYTpsKE0sQyksYXhlczpJLGF4ZXNQaXhlbHM6bnVsbCxzcGlrZXM6UCxib3VuZHM6VCxvYmplY3RzOk8sc2hhcGU6cSxhc3BlY3Q6dC5hc3BlY3RSYXRpb3x8WzEsMSwxXSxwaWNrUmFkaXVzOnQucGlja1JhZGl1c3x8MTAsek5lYXI6dC56TmVhcnx8LjAxLHpGYXI6dC56RmFyfHwxZTMsZm92eTp0LmZvdnl8fE1hdGguUEkvNCxjbGVhckNvbG9yOnQuY2xlYXJDb2xvcnx8WzAsMCwwLDBdLGF1dG9SZXNpemU6byh0LmF1dG9SZXNpemUpLGF1dG9Cb3VuZHM6byh0LmF1dG9Cb3VuZHMpLGF1dG9TY2FsZTohIXQuYXV0b1NjYWxlLGF1dG9DZW50ZXI6byh0LmF1dG9DZW50ZXIpLGNsaXBUb0JvdW5kczpvKHQuY2xpcFRvQm91bmRzKSxzbmFwVG9EYXRhOiEhdC5zbmFwVG9EYXRhLG9uc2VsZWN0OnQub25zZWxlY3R8fG51bGwsb25yZW5kZXI6dC5vbnJlbmRlcnx8bnVsbCxvbmNsaWNrOnQub25jbGlja3x8bnVsbCxjYW1lcmFQYXJhbXM6SCxvbmNvbnRleHRsb3NzOm51bGwsbW91c2VMaXN0ZW5lcjpudWxsfSxZPVtBLmRyYXdpbmdCdWZmZXJXaWR0aC9HLnBpeGVsUmF0aW98MCxBLmRyYXdpbmdCdWZmZXJIZWlnaHQvRy5waXhlbFJhdGlvfDBdO0cuYXV0b1Jlc2l6ZSYmZSgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGUpLEcudXBkYXRlPWZ1bmN0aW9uKHQpe3d8fCh0PXR8fHt9LE49ITAsQj0hMCl9LEcuYWRkPWZ1bmN0aW9uKHQpe3d8fCh0LmF4ZXM9SSxPLnB1c2godCksUi5wdXNoKC0xKSxOPSEwLEI9ITAscigpKX0sRy5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoIXcpe3ZhciBlPU8uaW5kZXhPZih0KTtlPDB8fChPLnNwbGljZShlLDEpLFIucG9wKCksTj0hMCxCPSEwLHIoKSl9fSxHLmRpc3Bvc2U9ZnVuY3Rpb24oKXtpZighdyYmKHc9ITAsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsZSksTS5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixzKSxHLm1vdXNlTGlzdGVuZXIuZW5hYmxlZD0hMSwhRy5jb250ZXh0TG9zdCkpe0kuZGlzcG9zZSgpLFAuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8Ty5sZW5ndGg7Kyt0KU9bdF0uZGlzcG9zZSgpO0UuZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8ai5sZW5ndGg7Kyt0KWpbdF0uZGlzcG9zZSgpO0wuZGlzcG9zZSgpLEE9bnVsbCxJPW51bGwsUD1udWxsLE89W119fTt2YXIgWD0hMSxXPTA7Ry5tb3VzZUxpc3RlbmVyPW0oTSxmdW5jdGlvbih0LGUscil7aWYoIXcpe3ZhciBuPWoubGVuZ3RoLGk9Ty5sZW5ndGgsYT1TLm9iamVjdDtTLmRpc3RhbmNlPTEvMCxTLm1vdXNlWzBdPWUsUy5tb3VzZVsxXT1yLFMub2JqZWN0PW51bGwsUy5zY3JlZW49bnVsbCxTLmRhdGFDb29yZGluYXRlPVMuZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmVylYPSEwO2Vsc2V7WCYmKEI9ITApLFg9ITE7Zm9yKHZhciBzPTA7czxuOysrcyl7dmFyIGw9altzXS5xdWVyeShlLFlbMV0tci0xLEcucGlja1JhZGl1cyk7aWYobCl7aWYobC5kaXN0YW5jZT5TLmRpc3RhbmNlKWNvbnRpbnVlO2Zvcih2YXIgdT0wO3U8aTsrK3Upe3ZhciBjPU9bdV07aWYoUlt1XT09PXMpe3ZhciBoPWMucGljayhsKTtoJiYoUy5idXR0b25zPXQsUy5zY3JlZW49bC5jb29yZCxTLmRpc3RhbmNlPWwuZGlzdGFuY2UsUy5vYmplY3Q9YyxTLmluZGV4PWguZGlzdGFuY2UsUy5kYXRhUG9zaXRpb249aC5wb3NpdGlvbixTLmRhdGFDb29yZGluYXRlPWguZGF0YUNvb3JkaW5hdGUsUy5kYXRhPWgsbz0hMCl9fX19fWEmJmEhPT1TLm9iamVjdCYmKGEuaGlnaGxpZ2h0JiZhLmhpZ2hsaWdodChudWxsKSxOPSEwKSxTLm9iamVjdCYmKFMub2JqZWN0LmhpZ2hsaWdodCYmUy5vYmplY3QuaGlnaGxpZ2h0KFMuZGF0YSksTj0hMCksbz1vfHxTLm9iamVjdCE9PWEsbyYmRy5vbnNlbGVjdCYmRy5vbnNlbGVjdChTKSwxJnQmJiEoMSZXKSYmRy5vbmNsaWNrJiZHLm9uY2xpY2soUyksVz10fX0pLE0uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIscyk7dmFyIFo9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sSj1bWlswXS5zbGljZSgpLFpbMV0uc2xpY2UoKV07cmV0dXJuIF8oKSxHLnJlZHJhdz1mdW5jdGlvbigpe3d8fChOPSEwLHgoKSl9LEd9ZS5leHBvcnRzPXM7dmFyIGw9dCgiM2Qtdmlldy1jb250cm9scyIpLHU9dCgiZ2wtYXhlczNkIiksYz10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLGg9dCgiZ2wtc3Bpa2VzM2QiKSxmPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxkPXQoImdsLWZibyIpLHA9dCgiYS1iaWctdHJpYW5nbGUiKSxtPXQoIm1vdXNlLWNoYW5nZSIpLHY9dCgiZ2wtbWF0NC9wZXJzcGVjdGl2ZSIpLGc9dCgiLi9saWIvc2hhZGVyIikseT10KCJpcy1tb2JpbGUiKSgpfSx7Ii4vbGliL3NoYWRlciI6MjE4LCIzZC12aWV3LWNvbnRyb2xzIjozNCwiYS1iaWctdHJpYW5nbGUiOjM3LCJnbC1heGVzM2QiOjE0NiwiZ2wtYXhlczNkL3Byb3BlcnRpZXMiOjE1MywiZ2wtZmJvIjoxNjIsImdsLW1hdDQvcGVyc3BlY3RpdmUiOjE4MiwiZ2wtc2VsZWN0LXN0YXRpYyI6MjUyLCJnbC1zcGlrZXMzZCI6MjYyLCJpcy1tb2JpbGUiOjI5NCwibW91c2UtY2hhbmdlIjo0NTB9XSwyMjA6W2Z1bmN0aW9uKHQsZSxyKXtyLnBvaW50VmVydGV4PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDMgbWF0cml4O1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBvaW50Q2xvdWQ7XG5cbmhpZ2hwIGZsb2F0IHJhbmQodmVjMiBjbykge1xuICBoaWdocCBmbG9hdCBhID0gMTIuOTg5ODtcbiAgaGlnaHAgZmxvYXQgYiA9IDc4LjIzMztcbiAgaGlnaHAgZmxvYXQgYyA9IDQzNzU4LjU0NTM7XG4gIGhpZ2hwIGZsb2F0IGQgPSBkb3QoY28ueHksIHZlYzIoYSwgYikpO1xuICBoaWdocCBmbG9hdCBlID0gbW9kKGQsIDMuMTQpO1xuICByZXR1cm4gZnJhY3Qoc2luKGUpICogYyk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgICAvLyBpZiB3ZSBkb24ndCBqaXR0ZXIgdGhlIHBvaW50IHNpemUgYSBiaXQsIG92ZXJhbGwgcG9pbnQgY2xvdWRcbiAgICAvLyBzYXR1cmF0aW9uICdqdW1wcycgb24gem9vbWluZywgd2hpY2ggaXMgZGlzdHVyYmluZyBhbmQgY29uZnVzaW5nXG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZSAqICgoMTkuNSArIHJhbmQocG9zaXRpb24pKSAvIDIwLjApO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIC8vIGdldCB0aGUgc2FtZSBzcXVhcmUgc3VyZmFjZSBhcyBjaXJjbGUgd291bGQgYmVcbiAgICBnbF9Qb2ludFNpemUgKj0gMC44ODY7XG4gIH1cbn0iLHIucG9pbnRGcmFnbWVudD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXM7XG4gIHZlYzQgYmFzZUNvbG9yO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICAgIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgICAgZGlzY2FyZDtcbiAgICB9XG4gICAgYmFzZUNvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgc3RlcChyYWRpdXMsIGNlbnRlckZyYWN0aW9uKSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcbiAgfVxufVxuIixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5cbnVuaWZvcm0gbWF0MyBtYXRyaXg7XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcblxuICB2ZWM0IGlkID0gcGlja0lkICsgcGlja09mZnNldDtcbiAgaWQueSArPSBmbG9vcihpZC54IC8gMjU2LjApO1xuICBpZC54IC09IGZsb29yKGlkLnggLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC56ICs9IGZsb29yKGlkLnkgLyAyNTYuMCk7XG4gIGlkLnkgLT0gZmxvb3IoaWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLncgKz0gZmxvb3IoaWQueiAvIDI1Ni4wKTtcbiAgaWQueiAtPSBmbG9vcihpZC56IC8gMjU2LjApICogMjU2LjA7XG5cbiAgZnJhZ0lkID0gaWQ7XG59XG4iLHIucGlja0ZyYWdtZW50PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICBpZihyYWRpdXMgPiAxLjApIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xufVxuIn0se31dLDIyMTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTBdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2xpYi9HTEVycm9yIjoyMjIsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjoyMjMsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MjI0LCIuL2xpYi9yZWZsZWN0IjoyMjUsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MjI2LCIuL2xpYi9zaGFkZXItY2FjaGUiOjIyNyxkdXA6MjEwfV0sMjIyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxMV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxMX1dLDIyMzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTJdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjIyMixkdXA6MjEyfV0sMjI0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxM11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjIyLCIuL3JlZmxlY3QiOjIyNSxkdXA6MjEzfV0sMjI1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxNF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxNH1dLDIyNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTVdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyMTV9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE2XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyMjIsZHVwOjIxNiwiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIjoxNjMsIndlYWttYXAtc2hpbSI6NTYwfV0sMjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLnBsb3Q9dCx0aGlzLm9mZnNldEJ1ZmZlcj1lLHRoaXMucGlja0J1ZmZlcj1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waWNrU2hhZGVyPWksdGhpcy5zaXplTWluPS41LHRoaXMuc2l6ZU1pbkNhcD0yLHRoaXMuc2l6ZU1heD0yMCx0aGlzLmFyZWFSYXRpbz0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLAp0aGlzLmJvcmRlckNvbG9yPVswLDAsMCwxXSx0aGlzLmJsZW5kPSExLHRoaXMucGlja09mZnNldD0wLHRoaXMucG9pbnRzPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoPj4+MTtmb3Iocj0wO3I8aTtyKyspe3ZhciBhPXRbMipyXSxvPXRbMipyKzFdO2E+PWVbMF0mJmE8PWVbMl0mJm8+PWVbMV0mJm88PWVbM10mJm4rK31yZXR1cm4gbn1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5nbCxpPXMociksYT1zKHIpLGw9byhyLHUucG9pbnRWZXJ0ZXgsdS5wb2ludEZyYWdtZW50KSxjPW8ocix1LnBpY2tWZXJ0ZXgsdS5waWNrRnJhZ21lbnQpLGg9bmV3IG4odCxpLGEsbCxjKTtyZXR1cm4gaC51cGRhdGUoZSksdC5hZGRPYmplY3QoaCksaH12YXIgbz10KCJnbC1zaGFkZXIiKSxzPXQoImdsLWJ1ZmZlciIpLGw9dCgidHlwZWRhcnJheS1wb29sIiksdT10KCIuL2xpYi9zaGFkZXIiKTtlLmV4cG9ydHM9YTt2YXIgYz1uLnByb3RvdHlwZTtjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9mZnNldEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5waWNrQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT2JqZWN0KHRoaXMpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9dmFyIHI7dD10fHx7fSx0aGlzLnNpemVNaW49ZSgic2l6ZU1pbiIsLjUpLHRoaXMuc2l6ZU1heD1lKCJzaXplTWF4IiwyMCksdGhpcy5jb2xvcj1lKCJjb2xvciIsWzEsMCwwLDFdKS5zbGljZSgpLHRoaXMuYXJlYVJhdGlvPWUoImFyZWFSYXRpbyIsMSksdGhpcy5ib3JkZXJDb2xvcj1lKCJib3JkZXJDb2xvciIsWzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYmxlbmQ9ZSgiYmxlbmQiLCExKTt2YXIgbj10LnBvc2l0aW9ucy5sZW5ndGg+Pj4xLGk9dC5wb3NpdGlvbnMgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXksYT10LmlkVG9JbmRleCBpbnN0YW5jZW9mIEludDMyQXJyYXkmJnQuaWRUb0luZGV4Lmxlbmd0aD49bixvPXQucG9zaXRpb25zLHM9aT9vOmwubWFsbG9jRmxvYXQzMihvLmxlbmd0aCksdT1hP3QuaWRUb0luZGV4OmwubWFsbG9jSW50MzIobik7aWYoaXx8cy5zZXQobyksIWEpZm9yKHMuc2V0KG8pLHI9MDtyPG47cisrKXVbcl09cjt0aGlzLnBvaW50cz1vLHRoaXMub2Zmc2V0QnVmZmVyLnVwZGF0ZShzKSx0aGlzLnBpY2tCdWZmZXIudXBkYXRlKHUpLGl8fGwuZnJlZShzKSxhfHxsLmZyZWUodSksdGhpcy5wb2ludENvdW50PW4sdGhpcy5waWNrT2Zmc2V0PTB9LGMudW5pZmllZERyYXc9ZnVuY3Rpb24oKXt2YXIgdD1bMSwwLDAsMCwxLDAsMCwwLDFdLGU9WzAsMCwwLDBdO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj12b2lkIDAhPT1yLGE9bj90aGlzLnBpY2tTaGFkZXI6dGhpcy5zaGFkZXIsbz10aGlzLnBsb3QuZ2wscz10aGlzLnBsb3QuZGF0YUJveDtpZigwPT09dGhpcy5wb2ludENvdW50KXJldHVybiByO3ZhciBsPXNbMl0tc1swXSx1PXNbM10tc1sxXSxjPWkodGhpcy5wb2ludHMscyksaD10aGlzLnBsb3QucGlja1BpeGVsUmF0aW8qTWF0aC5tYXgoTWF0aC5taW4odGhpcy5zaXplTWluQ2FwLHRoaXMuc2l6ZU1pbiksTWF0aC5taW4odGhpcy5zaXplTWF4LHRoaXMuc2l6ZU1heC9NYXRoLnBvdyhjLC4zMzMzMykpKTt0WzBdPTIvbCx0WzRdPTIvdSx0WzZdPS0yKnNbMF0vbC0xLHRbN109LTIqc1sxXS91LTEsdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLGEuYmluZCgpLGEuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksYS51bmlmb3Jtcy5tYXRyaXg9dCxhLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3IsYS51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLGEudW5pZm9ybXMucG9pbnRDbG91ZD1oPDUsYS51bmlmb3Jtcy5wb2ludFNpemU9aCxhLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPU1hdGgubWluKDEsTWF0aC5tYXgoMCxNYXRoLnNxcnQoMS10aGlzLmFyZWFSYXRpbykpKSxuJiYoZVswXT0yNTUmcixlWzFdPXI+PjgmMjU1LGVbMl09cj4+MTYmMjU1LGVbM109cj4+MjQmMjU1LHRoaXMucGlja0J1ZmZlci5iaW5kKCksYS5hdHRyaWJ1dGVzLnBpY2tJZC5wb2ludGVyKG8uVU5TSUdORURfQllURSksYS51bmlmb3Jtcy5waWNrT2Zmc2V0PWUsdGhpcy5waWNrT2Zmc2V0PXIpO3ZhciBmPW8uZ2V0UGFyYW1ldGVyKG8uQkxFTkQpLGQ9by5nZXRQYXJhbWV0ZXIoby5ESVRIRVIpO3JldHVybiBmJiYhdGhpcy5ibGVuZCYmby5kaXNhYmxlKG8uQkxFTkQpLGQmJm8uZGlzYWJsZShvLkRJVEhFUiksby5kcmF3QXJyYXlzKG8uUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSxmJiYhdGhpcy5ibGVuZCYmby5lbmFibGUoby5CTEVORCksZCYmby5lbmFibGUoby5ESVRIRVIpLHIrdGhpcy5wb2ludENvdW50fX0oKSxjLmRyYXc9Yy51bmlmaWVkRHJhdyxjLmRyYXdQaWNrPWMudW5pZmllZERyYXcsYy5waWNrPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnBpY2tPZmZzZXQsaT10aGlzLnBvaW50Q291bnQ7aWYocjxufHxyPj1uK2kpcmV0dXJuIG51bGw7dmFyIGE9ci1uLG89dGhpcy5wb2ludHM7cmV0dXJue29iamVjdDp0aGlzLHBvaW50SWQ6YSxkYXRhQ29vcmQ6W29bMiphXSxvWzIqYSsxXV19fX0seyIuL2xpYi9zaGFkZXIiOjIyMCwiZ2wtYnVmZmVyIjoxNTQsImdsLXNoYWRlciI6MjIxLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDIyOTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGksYSxvLHMsbCx1PWVbMF0sYz1lWzFdLGg9ZVsyXSxmPWVbM10sZD1yWzBdLHA9clsxXSxtPXJbMl0sdj1yWzNdO3JldHVybiBhPXUqZCtjKnAraCptK2YqdixhPDAmJihhPS1hLGQ9LWQscD0tcCxtPS1tLHY9LXYpLDEtYT4xZS02PyhpPU1hdGguYWNvcyhhKSxvPU1hdGguc2luKGkpLHM9TWF0aC5zaW4oKDEtbikqaSkvbyxsPU1hdGguc2luKG4qaSkvbyk6KHM9MS1uLGw9biksdFswXT1zKnUrbCpkLHRbMV09cypjK2wqcCx0WzJdPXMqaCtsKm0sdFszXT1zKmYrbCp2LHR9ZS5leHBvcnRzPW59LHt9XSwyMzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt2ZXJ0ZXg6InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cblxudmVjNCBjb21wdXRlUG9zaXRpb25fMV8wKHZlYzIgcG9zSGksIHZlYzIgcG9zTG8sIHZlYzIgc2NIaSwgdmVjMiBzY0xvLCB2ZWMyIHRySGksIHZlYzIgdHJMbykge1xuICByZXR1cm4gdmVjNCgocG9zSGkgKyB0ckhpKSAqIHNjSGlcbiAgXHRcdFx0Ly9GSVhNRTogdGhpcyB0aGluZ3kgZG9lcyBub3QgZ2l2ZSBub3RpY2VhYmxlIHByZWNpc2lvbiBnYWluLCBuZWVkIHRlc3RcbiAgICAgICAgICAgICsgKHBvc0xvICsgdHJMbykgKiBzY0hpXG4gICAgICAgICAgICArIChwb3NIaSArIHRySGkpICogc2NMb1xuICAgICAgICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjTG9cbiAgICAgICAgICAgICwgMCwgMSk7XG59XG5cblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25IaSwgcG9zaXRpb25MbztcbmF0dHJpYnV0ZSBmbG9hdCBzaXplLCBib3JkZXI7XG5hdHRyaWJ1dGUgdmVjMiBjaGFyLCBjb2xvcjtcblxuLy90aGlzIGlzIDY0LWJpdCBmb3JtIG9mIHNjYWxlIGFuZCB0cmFuc2xhdGVcbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG87XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzQgdmlld0JveDtcbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbnZhcnlpbmcgdmVjNCBjaGFyQ29sb3IsIGJvcmRlckNvbG9yO1xudmFyeWluZyB2ZWMyIGNoYXJJZDtcbnZhcnlpbmcgdmVjMiBwb2ludENvb3JkO1xudmFyeWluZyBmbG9hdCBwb2ludFNpemU7XG52YXJ5aW5nIGZsb2F0IGJvcmRlcldpZHRoO1xuXG5cbnZvaWQgbWFpbigpIHtcbiAgY2hhckNvbG9yID0gdGV4dHVyZTJEKHBhbGV0dGUsIHZlYzIoY29sb3IueCAvIDI1NS4sIDApKTtcbiAgYm9yZGVyQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMihjb2xvci55IC8gMjU1LiwgMCkpO1xuXG4gIGdsX1BvaW50U2l6ZSA9IHNpemUgKiBwaXhlbFJhdGlvO1xuICBwb2ludFNpemUgPSBzaXplICogcGl4ZWxSYXRpbztcblxuICBjaGFySWQgPSBjaGFyO1xuICBib3JkZXJXaWR0aCA9IGJvcmRlcjtcblxuICBnbF9Qb3NpdGlvbiA9IGNvbXB1dGVQb3NpdGlvbl8xXzAoXG4gICAgcG9zaXRpb25IaSwgcG9zaXRpb25MbyxcbiAgICBzY2FsZUhpLCBzY2FsZUxvLFxuICAgIHRyYW5zbGF0ZUhpLCB0cmFuc2xhdGVMbyk7XG5cbiAgcG9pbnRDb29yZCA9IHZpZXdCb3gueHkgKyAodmlld0JveC56dyAtIHZpZXdCb3gueHkpICogKGdsX1Bvc2l0aW9uLnh5ICogLjUgKyAuNSk7XG59XG4iLGZyYWdtZW50OiJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHNhbXBsZXIyRCBjaGFycztcbnVuaWZvcm0gdmVjMiBjaGFyc1NoYXBlO1xudW5pZm9ybSBmbG9hdCBjaGFyc1N0ZXAsIHBpeGVsUmF0aW8sIGNoYXJPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBib3JkZXJDb2xvcjtcbnZhcnlpbmcgdmVjNCBjaGFyQ29sb3I7XG52YXJ5aW5nIHZlYzIgY2hhcklkO1xudmFyeWluZyB2ZWMyIHBvaW50Q29vcmQ7XG52YXJ5aW5nIGZsb2F0IHBvaW50U2l6ZTtcbnZhcnlpbmcgZmxvYXQgYm9yZGVyV2lkdGg7XG5cbnZvaWQgbWFpbigpIHtcblx0dmVjMiBwb2ludFVWID0gKHBvaW50Q29vcmQgLSBnbF9GcmFnQ29vcmQueHkgKyBwb2ludFNpemUgKiAuNSkgLyBwb2ludFNpemU7XG5cdHBvaW50VVYueCA9IDEuIC0gcG9pbnRVVi54O1xuXHR2ZWMyIHRleENvb3JkID0gKChjaGFySWQgKyBwb2ludFVWKSAqIGNoYXJzU3RlcCkgLyBjaGFyc1NoYXBlO1xuXHRmbG9hdCBkaXN0ID0gdGV4dHVyZTJEKGNoYXJzLCB0ZXhDb29yZCkucjtcblxuXHQvL21heC1kaXN0YW5jZSBhbHBoYVxuXHRpZiAoZGlzdCA8IDFlLTIpXG5cdFx0ZGlzY2FyZDtcblxuXHRmbG9hdCBnYW1tYSA9IC4wMDQ1ICogY2hhcnNTdGVwIC8gcG9pbnRTaXplO1xuXG4gICAgLy9udWxsLWJvcmRlciBjYXNlXG4gXHRpZiAoYm9yZGVyV2lkdGggKiBib3JkZXJDb2xvci5hID09IDAuKSB7XG5cdFx0ZmxvYXQgY2hhckFtdCA9IHNtb290aHN0ZXAoLjc0OCAtIGdhbW1hLCAuNzQ4ICsgZ2FtbWEsIGRpc3QpO1xuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoY2hhckNvbG9yLnJnYiwgY2hhckFtdCpjaGFyQ29sb3IuYSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0ZmxvYXQgZGlmID0gNS4gKiBwaXhlbFJhdGlvICogYm9yZGVyV2lkdGggLyBwb2ludFNpemU7XG5cdGZsb2F0IGJvcmRlckxldmVsID0gLjc0OCAtIGRpZiAqIC41O1xuXHRmbG9hdCBjaGFyTGV2ZWwgPSAuNzQ4ICsgZGlmICogLjU7XG5cblx0ZmxvYXQgYm9yZGVyQW10ID0gc21vb3Roc3RlcChib3JkZXJMZXZlbCAtIGdhbW1hLCBib3JkZXJMZXZlbCArIGdhbW1hLCBkaXN0KTtcblx0ZmxvYXQgY2hhckFtdCA9IHNtb290aHN0ZXAoY2hhckxldmVsIC0gZ2FtbWEsIGNoYXJMZXZlbCArIGdhbW1hLCBkaXN0KTtcblxuXHR2ZWM0IGNvbG9yID0gYm9yZGVyQ29sb3I7XG5cdGNvbG9yLmEgKj0gYm9yZGVyQW10O1xuXG5cdGdsX0ZyYWdDb2xvciA9IG1peChjb2xvciwgY2hhckNvbG9yLCBjaGFyQW10KTtcbn1cbiIscGlja1ZlcnRleDoicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb25IaSwgcG9zaXRpb25MbztcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuYXR0cmlidXRlIGZsb2F0IHNpemU7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG87XG51bmlmb3JtIHZlYzQgcGlja09mZnNldDtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuXG52ZWM0IGNvbXB1dGVQb3NpdGlvbl8xXzAodmVjMiBwb3NIaSwgdmVjMiBwb3NMbywgdmVjMiBzY0hpLCB2ZWMyIHNjTG8sIHZlYzIgdHJIaSwgdmVjMiB0ckxvKSB7XG4gIHJldHVybiB2ZWM0KChwb3NIaSArIHRySGkpICogc2NIaVxuICBcdFx0XHQvL0ZJWE1FOiB0aGlzIHRoaW5neSBkb2VzIG5vdCBnaXZlIG5vdGljZWFibGUgcHJlY2lzaW9uIGdhaW4sIG5lZWQgdGVzdFxuICAgICAgICAgICAgKyAocG9zTG8gKyB0ckxvKSAqIHNjSGlcbiAgICAgICAgICAgICsgKHBvc0hpICsgdHJIaSkgKiBzY0xvXG4gICAgICAgICAgICArIChwb3NMbyArIHRyTG8pICogc2NMb1xuICAgICAgICAgICAgLCAwLCAxKTtcbn1cblxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzQgZnJhZ0lkID0gaWQgKyBwaWNrT2Zmc2V0O1xuXG4gIGZyYWdJZC55ICs9IGZsb29yKGZyYWdJZC54IC8gMjU2LjApO1xuICBmcmFnSWQueCAtPSBmbG9vcihmcmFnSWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC56ICs9IGZsb29yKGZyYWdJZC55IC8gMjU2LjApO1xuICBmcmFnSWQueSAtPSBmbG9vcihmcmFnSWQueSAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdJZC53ICs9IGZsb29yKGZyYWdJZC56IC8gMjU2LjApO1xuICBmcmFnSWQueiAtPSBmbG9vcihmcmFnSWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGZyYWdDb2xvciA9IGZyYWdJZCAvIDI1NS4wO1xuXG4gIGdsX1BvaW50U2l6ZSA9IHNpemUgKiAuMjUgKiBwaXhlbFJhdGlvO1xuXG4gIGdsX1Bvc2l0aW9uID0gY29tcHV0ZVBvc2l0aW9uXzFfMChcbiAgICBwb3NpdGlvbkhpLCBwb3NpdGlvbkxvLFxuICAgIHNjYWxlSGksIHNjYWxlTG8sXG4gICAgdHJhbnNsYXRlSGksIHRyYW5zbGF0ZUxvKTtcbn1cbiIscGlja0ZyYWdtZW50OiJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4ifX0se31dLDIzMTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4Ml1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgyfV0sMjMyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxMF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vbGliL0dMRXJyb3IiOjIzMywiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiOjIzNCwiLi9saWIvY3JlYXRlLXVuaWZvcm1zIjoyMzUsIi4vbGliL3JlZmxlY3QiOjIzNiwiLi9saWIvcnVudGltZS1yZWZsZWN0IjoyMzcsIi4vbGliL3NoYWRlci1jYWNoZSI6MjM4LGR1cDoyMTB9XSwyMzM6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjExXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjExfV0sMjM0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxMl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjMzLGR1cDoyMTJ9XSwyMzU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjEzXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyMzMsIi4vcmVmbGVjdCI6MjM2LGR1cDoyMTN9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE0XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjE0fV0sMjM3OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxNV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxNX1dLDIzODpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTZdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjIzMyxkdXA6MjE2LCJnbC1mb3JtYXQtY29tcGlsZXItZXJyb3IiOjE2Mywid2Vha21hcC1zaGltIjo1NjB9XSwyMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGEpe2E8PTQqZj9pKDAsYS0xLHQsZSxyLG4pOmgoMCxhLTEsdCxlLHIsbil9ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7Zm9yKHZhciBvPXQrMTtvPD1lOysrbyl7Zm9yKHZhciBzPXJbb10sbD1uWzIqb10sdT1uWzIqbysxXSxjPWlbb10saD1hW29dLGY9bztmPnQ7KXt2YXIgZD1yW2YtMV0scD1uWzIqKGYtMSldO2lmKChkLXN8fGwtcCk+PTApYnJlYWs7cltmXT1kLG5bMipmXT1wLG5bMipmKzFdPW5bMipmLTFdLGlbZl09aVtmLTFdLGFbZl09YVtmLTFdLGYtPTF9cltmXT1zLG5bMipmXT1sLG5bMipmKzFdPXUsaVtmXT1jLGFbZl09aH19ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7dmFyIG89clt0XSxzPW5bMip0XSxsPW5bMip0KzFdLHU9aVt0XSxjPWFbdF07clt0XT1yW2VdLG5bMip0XT1uWzIqZV0sblsyKnQrMV09blsyKmUrMV0saVt0XT1pW2VdLGFbdF09YVtlXSxyW2VdPW8sblsyKmVdPXMsblsyKmUrMV09bCxpW2VdPXUsYVtlXT1jfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3JbdF09cltlXSxuWzIqdF09blsyKmVdLG5bMip0KzFdPW5bMiplKzFdLGlbdF09aVtlXSxhW3RdPWFbZV19ZnVuY3Rpb24gcyh0LGUscixuLGksYSxvKXt2YXIgcz1uW3RdLGw9aVsyKnRdLHU9aVsyKnQrMV0sYz1hW3RdLGg9b1t0XTtuW3RdPW5bZV0saVsyKnRdPWlbMiplXSxpWzIqdCsxXT1pWzIqZSsxXSxhW3RdPWFbZV0sb1t0XT1vW2VdLG5bZV09bltyXSxpWzIqZV09aVsyKnJdLGlbMiplKzFdPWlbMipyKzFdLGFbZV09YVtyXSxvW2VdPW9bcl0sbltyXT1zLGlbMipyXT1sLGlbMipyKzFdPXUsYVtyXT1jLG9bcl09aH1mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8scyxsLHUsYyl7c1t0XT1zW2VdLGxbMip0XT1sWzIqZV0sbFsyKnQrMV09bFsyKmUrMV0sdVt0XT11W2VdLGNbdF09Y1tlXSxzW2VdPXIsbFsyKmVdPW4sbFsyKmUrMV09aSx1W2VdPWEsY1tlXT1vfWZ1bmN0aW9uIHUodCxlLHIsbixpKXtyZXR1cm4oclt0XS1yW2VdfHxuWzIqZV0tblsyKnRdfHxpW3RdLWlbZV0pPDB9ZnVuY3Rpb24gYyh0LGUscixuLGksYSxvLHMpe3JldHVybihlLWFbdF18fG9bMip0XS1yfHxpLXNbdF0pPDB9ZnVuY3Rpb24gaCh0LGUscixuLGQscCl7dmFyIG09KGUtdCsxKS82fDAsdj10K20sZz1lLW0seT10K2U+PjEsYj15LW0seD15K20sXz12LHc9YixNPXksaz14LEE9ZyxUPXQrMSxTPWUtMSxFPTA7dShfLHcscixuLGQscCkmJihFPV8sXz13LHc9RSksdShrLEEscixuLGQscCkmJihFPWssaz1BLEE9RSksdShfLE0scixuLGQscCkmJihFPV8sXz1NLE09RSksdSh3LE0scixuLGQscCkmJihFPXcsdz1NLE09RSksdShfLGsscixuLGQscCkmJihFPV8sXz1rLGs9RSksdShNLGsscixuLGQscCkmJihFPU0sTT1rLGs9RSksdSh3LEEscixuLGQscCkmJihFPXcsdz1BLEE9RSksdSh3LE0scixuLGQscCkmJihFPXcsdz1NLE09RSksdShrLEEscixuLGQscCkmJihFPWssaz1BLEE9RSk7dmFyIEw9clt3XSxDPW5bMip3XSx6PW5bMip3KzFdLEk9ZFt3XSxEPXBbd10sUD1yW2tdLE89blsyKmtdLFI9blsyKmsrMV0sRj1kW2tdLGo9cFtrXSxOPV8sQj1NLFU9QSxWPXYsSD15LHE9ZyxHPXJbTl0sWT1yW0JdLFg9cltVXTtyW1ZdPUcscltIXT1ZLHJbcV09WDtmb3IodmFyIFc9MDtXPDI7KytXKXt2YXIgWj1uWzIqTitXXSxKPW5bMipCK1ddLEs9blsyKlUrV107blsyKlYrV109WixuWzIqSCtXXT1KLG5bMipxK1ddPUt9dmFyIFE9ZFtOXSwkPWRbQl0sdHQ9ZFtVXTtkW1ZdPVEsZFtIXT0kLGRbcV09dHQ7dmFyIGV0PXBbTl0scnQ9cFtCXSxudD1wW1VdO3BbVl09ZXQscFtIXT1ydCxwW3FdPW50LG8oYix0LHIsbixkLHApLG8oeCxlLHIsbixkLHApO2Zvcih2YXIgaXQ9VDtpdDw9UzsrK2l0KWlmKGMoaXQsTCxDLHosSSxyLG4sZCkpaXQhPT1UJiZhKGl0LFQscixuLGQscCksKytUO2Vsc2UgaWYoIWMoaXQsUCxPLFIsRixyLG4sZCkpZm9yKDs7KXtpZihjKFMsUCxPLFIsRixyLG4sZCkpe2MoUyxMLEMseixJLHIsbixkKT8ocyhpdCxULFMscixuLGQscCksKytULC0tUyk6KGEoaXQsUyxyLG4sZCxwKSwtLVMpO2JyZWFrfWlmKC0tUzxpdClicmVha31sKHQsVC0xLEwsQyx6LEksRCxyLG4sZCxwKSxsKGUsUysxLFAsTyxSLEYsaixyLG4sZCxwKSxULTItdDw9Zj9pKHQsVC0yLHIsbixkLHApOmgodCxULTIscixuLGQscCksZS0oUysyKTw9Zj9pKFMrMixlLHIsbixkLHApOmgoUysyLGUscixuLGQscCksUy1UPD1mP2koVCxTLHIsbixkLHApOmgoVCxTLHIsbixkLHApfWUuZXhwb3J0cz1uO3ZhciBmPTMyfSx7fV0sMjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9cix1PXI7dTxuOysrdSl7dmFyIGM9dFsyKnVdLGg9dFsyKnUrMV0sZj1lW3VdO2k8PWMmJmM8PW8mJmE8PWgmJmg8PXMmJih1PT09bD9sKz0xOih0WzIqdV09dFsyKmxdLHRbMip1KzFdPXRbMipsKzFdLGVbdV09ZVtsXSx0WzIqbF09Yyx0WzIqbCsxXT1oLGVbbF09ZixsKz0xKSl9cmV0dXJuIGx9ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5waXhlbFNpemU9dCx0aGlzLm9mZnNldD1lLHRoaXMuY291bnQ9cn1mdW5jdGlvbiBhKHQsZSxyLGEpe2Z1bmN0aW9uIGwoaSxhLG8scyx1LGMpe3ZhciBoPS41Km8sZj1zKzEsZD11LXM7cltfXT1kLHhbXysrXT1jO2Zvcih2YXIgcD0wO3A8MjsrK3ApZm9yKHZhciBtPTA7bTwyOysrbSl7dmFyIHY9aStwKmgsZz1hK20qaCx5PW4odCxlLGYsdSx2LGcsditoLGcraCk7aWYoeSE9PWYpe2lmKHktZj49TWF0aC5tYXgoLjkqZCwzMikpe3ZhciBiPXUrcz4+PjE7bCh2LGcsaCxmLGIsYysxKSxmPWJ9bCh2LGcsaCxmLHksYysxKSxmPXl9fX12YXIgdT10Lmxlbmd0aD4+PjE7aWYodTwxKXJldHVybltdO2Zvcih2YXIgYz0xLzAsaD0xLzAsZj0tMS8wLGQ9LTEvMCxwPTA7cDx1OysrcCl7dmFyIG09dFsyKnBdLHY9dFsyKnArMV07Yz1NYXRoLm1pbihjLG0pLGY9TWF0aC5tYXgoZixtKSxoPU1hdGgubWluKGgsdiksZD1NYXRoLm1heChkLHYpLGVbcF09cH1jPT09ZiYmKGYrPTErTWF0aC5hYnMoZikpLGg9PT1kJiYoZCs9MStNYXRoLmFicyhmKSk7dmFyIGc9MS8oZi1jKSx5PTEvKGQtaCksYj1NYXRoLm1heChmLWMsZC1oKTthPWF8fFswLDAsMCwwXSxhWzBdPWMsYVsxXT1oLGFbMl09ZixhWzNdPWQ7dmFyIHg9by5tYWxsb2NJbnQzMih1KSxfPTA7bChjLGgsYiwwLHUsMCkscyh4LHQsZSxyLHUpO2Zvcih2YXIgdz1bXSxNPTAsaz11LF89dS0xO18+PTA7LS1fKXt0WzIqX109KHRbMipfXS1jKSpnLHRbMipfKzFdPSh0WzIqXysxXS1oKSp5O3ZhciBBPXhbX107QSE9PU0mJih3LnB1c2gobmV3IGkoYipNYXRoLnBvdyguNSxBKSxfKzEsay0oXysxKSkpLGs9XysxLE09QSl9cmV0dXJuIHcucHVzaChuZXcgaShiKk1hdGgucG93KC41LEErMSksMCxrKSksby5mcmVlKHgpLHd9dmFyIG89dCgidHlwZWRhcnJheS1wb29sIikscz10KCIuL2xpYi9zb3J0Iik7ZS5leHBvcnRzPWF9LHsiLi9saWIvc29ydCI6MjM5LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7dGhpcy5wbG90PXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLnBvc2l0aW9uQnVmZmVyPW4sdGhpcy5zaXplQnVmZmVyPWksdGhpcy5jb2xvckJ1ZmZlcj1hLHRoaXMuaWRCdWZmZXI9byx0aGlzLmNoYXJCdWZmZXI9cyx0aGlzLnBvaW50Q291bnQ9MCx0aGlzLnBpY2tPZmZzZXQ9MCx0aGlzLnBvaW50cz1udWxsLHRoaXMuc2NhbGVzPVtdLHRoaXMueENvb3Jkcz1bXSx0aGlzLmNoYXJDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jaGFyVGV4dHVyZT1tKHRoaXMucGxvdC5nbCx0aGlzLmNoYXJDYW52YXMpLHRoaXMuY2hhclN0ZXA9NDAwLHRoaXMuY2hhckZpdD0uMjU1LHRoaXMuc25hcFRocmVzaG9sZD0xZTQsdGhpcy5wYWxldHRlVGV4dHVyZT1tKHRoaXMucGxvdC5nbCxbMjU2LDFdKX1mdW5jdGlvbiBpKCl7dmFyIHQ9dGhpcy5wbG90LGU9dC52aWV3Qm94LHI9dC5kYXRhQm94LG49dC5waXhlbFJhdGlvLGk9clsyXS1yWzBdLGE9clszXS1yWzFdLHU9Mi9pLGM9Mi9hLGg9LXJbMF0tLjUqaSxmPS1yWzFdLS41KmE7X1swXT11LHdbMF09dS1fWzBdLF9bMV09Yyx3WzFdPWMtX1sxXSxNWzBdPWgsa1swXT1oLU1bMF0sTVsxXT1mLGtbMV09Zi1NWzFdO3ZhciBkPWVbMl0tZVswXSxwPWVbM10tZVsxXTtvPU1hdGgubWluKGkvZCxhL3ApLEFbMF09MipuL2QsQVsxXT0yKm4vcCxzPXJbMF0sbD1yWzJdfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj10LmdsLGk9dShyLGYudmVydGV4LGYuZnJhZ21lbnQpLGE9dShyLGYucGlja1ZlcnRleCxmLnBpY2tGcmFnbWVudCksbz1jKHIpLHM9YyhyKSxsPWMociksaD1jKHIpLGQ9YyhyKSxwPW5ldyBuKHQsaSxhLG8scyxsLGgsZCk7cmV0dXJuIHAudXBkYXRlKGUpLHQuYWRkT2JqZWN0KHApLHB9ZS5leHBvcnRzPWE7dmFyIG8scyxsLHU9dCgiZ2wtc2hhZGVyIiksYz10KCJnbC1idWZmZXIiKSxoPXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgiLi9saWIvc2hhZGVycyIpLGQ9dCgic25hcC1wb2ludHMtMmQiKSxwPXQoImZvbnQtYXRsYXMtc2RmIiksbT10KCJnbC10ZXh0dXJlMmQiKSx2PXQoImNvbG9yLWlkIiksZz10KCJuZGFycmF5IikseT10KCJjbGFtcCIpLGI9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx4PW4ucHJvdG90eXBlLF89bmV3IEZsb2F0MzJBcnJheShbMCwwXSksdz1uZXcgRmxvYXQzMkFycmF5KFswLDBdKSxNPW5ldyBGbG9hdDMyQXJyYXkoWzAsMF0pLGs9bmV3IEZsb2F0MzJBcnJheShbMCwwXSksQT1bMCwwXSxUPVswLDAsMCwwXTt4LmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMCE9PXQscj10aGlzLnBsb3Qsbj10aGlzLnBvaW50Q291bnQsYT1uPnRoaXMuc25hcFRocmVzaG9sZDtpZighbilyZXR1cm4gdDtpLmNhbGwodGhpcyk7dmFyIHU9ci5nbCxjPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLGg9dS5pc0VuYWJsZWQodS5CTEVORCk7aWYoYy5iaW5kKCksZSl7dGhpcy5waWNrT2Zmc2V0PXQ7Zm9yKHZhciBmPTA7Zjw0OysrZilUW2ZdPXQ+PjgqZiYyNTU7Yy51bmlmb3Jtcy5waWNrT2Zmc2V0PVQsdGhpcy5pZEJ1ZmZlci5iaW5kKCksYy5hdHRyaWJ1dGVzLmlkLnBvaW50ZXIodS5VTlNJR05FRF9CWVRFLCExKX1lbHNlIHUuYmxlbmRGdW5jU2VwYXJhdGUodS5TUkNfQUxQSEEsdS5PTkVfTUlOVVNfU1JDX0FMUEhBLHUuT05FLHUuT05FX01JTlVTX1NSQ19BTFBIQSksdS5ibGVuZENvbG9yKDAsMCwwLDEpLGh8fHUuZW5hYmxlKHUuQkxFTkQpLHRoaXMuY29sb3JCdWZmZXIuYmluZCgpLGMuYXR0cmlidXRlcy5jb2xvci5wb2ludGVyKHUuVU5TSUdORURfQllURSwhMSksdGhpcy5jaGFyQnVmZmVyLmJpbmQoKSxjLmF0dHJpYnV0ZXMuY2hhci5wb2ludGVyKHUuVU5TSUdORURfQllURSwhMSksYy51bmlmb3Jtcy5jaGFycz10aGlzLmNoYXJUZXh0dXJlLmJpbmQoMCksYy51bmlmb3Jtcy5jaGFyc1NoYXBlPVt0aGlzLmNoYXJDYW52YXMud2lkdGgsdGhpcy5jaGFyQ2FudmFzLmhlaWdodF0sYy51bmlmb3Jtcy5jaGFyc1N0ZXA9dGhpcy5jaGFyU3RlcCxjLnVuaWZvcm1zLnBhbGV0dGU9dGhpcy5wYWxldHRlVGV4dHVyZS5iaW5kKDEpO3RoaXMuc2l6ZUJ1ZmZlci5iaW5kKCksYy5hdHRyaWJ1dGVzLnNpemUucG9pbnRlcih1LkZMT0FULCExLDgsMCksZXx8Yy5hdHRyaWJ1dGVzLmJvcmRlci5wb2ludGVyKHUuRkxPQVQsITEsOCw0KSx0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxjLmF0dHJpYnV0ZXMucG9zaXRpb25IaS5wb2ludGVyKHUuRkxPQVQsITEsMTYsMCksYy5hdHRyaWJ1dGVzLnBvc2l0aW9uTG8ucG9pbnRlcih1LkZMT0FULCExLDE2LDgpLGMudW5pZm9ybXMucGl4ZWxSYXRpbz1yLnBpeGVsUmF0aW8sYy51bmlmb3Jtcy5zY2FsZUhpPV8sYy51bmlmb3Jtcy5zY2FsZUxvPXcsYy51bmlmb3Jtcy50cmFuc2xhdGVIaT1NLGMudW5pZm9ybXMudHJhbnNsYXRlTG89ayxjLnVuaWZvcm1zLnZpZXdCb3g9ci52aWV3Qm94O3ZhciBkPXRoaXMuc2NhbGVzO2lmKGEpZm9yKHZhciBwPWQubGVuZ3RoLTE7cD49MDtwLS0pe3ZhciBtPWRbcF07aWYoIShtLnBpeGVsU2l6ZSYmbS5waXhlbFNpemU8MS4yNSpvJiZwPjEpKXt2YXIgdj1tLm9mZnNldCxnPW0uY291bnQrdix5PWIuZ2UodGhpcy54Q29vcmRzLHMsdixnLTEpLHg9Yi5sdCh0aGlzLnhDb29yZHMsbCx5LGctMSkrMTt4PnkmJnUuZHJhd0FycmF5cyh1LlBPSU5UUyx5LHgteSl9fWVsc2UgdS5kcmF3QXJyYXlzKHUuUE9JTlRTLDAsbik7aWYoZSlyZXR1cm4gdCtuO2g/dS5ibGVuZEZ1bmModS5PTkUsdS5PTkVfTUlOVVNfU1JDX0FMUEhBKTp1LmRpc2FibGUodS5CTEVORCl9LHguZHJhdz14LmRyYXdQaWNrLHgucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX0seC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10LnBvc2l0aW9uc3x8W10scj10LmNvbG9yc3x8W10sbj10LmdseXBoc3x8W10saT10LnNpemVzfHxbXSxhPXQuYm9yZGVyV2lkdGhzfHxbXSxvPXQuYm9yZGVyQ29sb3JzfHxbXSxzPXRoaXMucGxvdC5nbCxsPXRoaXMucG9pbnRDb3VudCx1PWw+dGhpcy5zbmFwVGhyZXNob2xkO2lmKG51bGwhPXQucG9zaXRpb25zKXt0aGlzLnBvaW50cz1lLGw9dGhpcy5wb2ludHMubGVuZ3RoLzIsdT1sPnRoaXMuc25hcFRocmVzaG9sZDt2YXIgYz1oLm1hbGxvY0Zsb2F0MzIoMipsKSxmPWgubWFsbG9jRmxvYXQ2NCgyKmwpLG09aC5tYWxsb2NVaW50MzIobCksYj1oLm1hbGxvY0Zsb2F0MzIoNCpsKTtmLnNldCh0aGlzLnBvaW50cyksdSYmKHRoaXMuaTJpZHgmJmguZnJlZSh0aGlzLmkyaWR4KSx0aGlzLmkyaWR4PWgubWFsbG9jSW50MzIobCksdGhpcy5zY2FsZXM9ZChmLHRoaXMuaTJpZHgsYykpLHRoaXMucG9pbnRDb3VudD1sO2Zvcih2YXIgeD0wO3g8bDsrK3gpe3ZhciBfPXU/dGhpcy5pMmlkeFt4XTp4O21beF09Xzt2YXIgdz1lWzIqX10sTT1lWzIqXysxXTtiWzQqeF09dyxiWzQqeCsxXT1NLGJbNCp4KzJdPXctYls0KnhdLGJbNCp4KzNdPU0tYls0KngrMV0sdGhpcy54Q29vcmRzW3hdPXd9dGhpcy5pZEJ1ZmZlci51cGRhdGUobSksdGhpcy5wb3NpdGlvbkJ1ZmZlci51cGRhdGUoYiksaC5mcmVlKGIpLGguZnJlZShtKSxoLmZyZWUoZiksaC5mcmVlKGMpfWZvcih2YXIgaz1oLm1hbGxvY0Zsb2F0MzIoMipsKSxBPWgubWFsbG9jVWludDgoMipsKSxUPWgubWFsbG9jVWludDgoMipsKSxTPXt9LEU9W10sTD1bXSxDPVtdLHg9MCx6PWwsST0wO3g8ejsrK3gpe3ZhciBEPVsyNTUqcls0KnhdLDI1NSpyWzQqeCsxXSwyNTUqcls0KngrMl0sMjU1KnJbNCp4KzNdXSxQPXYoRCwhMSk7bnVsbD09U1tQXSYmKFNbUF09SSsrLEwucHVzaChEWzBdKSxMLnB1c2goRFsxXSksTC5wdXNoKERbMl0pLEwucHVzaChEWzNdKSksRS5wdXNoKFApLG8mJm8ubGVuZ3RoJiYoRD1bMjU1Km9bNCp4XSwyNTUqb1s0KngrMV0sMjU1Km9bNCp4KzJdLDI1NSpvWzQqeCszXV0sUD12KEQsITEpLG51bGw9PVNbUF0mJihTW1BdPUkrKyxMLnB1c2goRFswXSksTC5wdXNoKERbMV0pLEwucHVzaChEWzJdKSxMLnB1c2goRFszXSkpLEMucHVzaChQKSl9Zm9yKHZhciBPPXt9LHg9MCx6PWwsST0wO3g8ejt4Kyspe3ZhciBSPW5beF07bnVsbD09T1tSXSYmKE9bUl09SSsrKX1mb3IodmFyIEY9MCx4PTAsej1pLmxlbmd0aDt4PHo7Kyt4KWlbeF0+RiYmKEY9aVt4XSk7dmFyIGo9dGhpcy5jaGFyU3RlcDt0aGlzLmNoYXJTdGVwPXkoTWF0aC5jZWlsKDQqRiksMTI4LDc2OCk7dmFyIE49T2JqZWN0LmtleXMoTyksQj10aGlzLmNoYXJTdGVwLFU9TWF0aC5mbG9vcihCLzIpLFY9cy5nZXRQYXJhbWV0ZXIocy5NQVhfVEVYVFVSRV9TSVpFKSxIPVYvQiooVi9CKSxxPU1hdGgubWluKFYsQipOLmxlbmd0aCksRz1NYXRoLm1pbihWLEIqTWF0aC5jZWlsKEIqTi5sZW5ndGgvVikpLFk9TWF0aC5mbG9vcihxL0IpO04ubGVuZ3RoPkgmJmNvbnNvbGUud2FybigiZ2wtc2NhdHRlcjJkLWZhbmN5OiBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyBtb3JlIHRoYW4gbWF4aW11bSB0ZXh0dXJlIHNpemUuIFRyeSByZWR1Y2luZyBpdC4iKSx0aGlzLmNoYXJzJiZ0aGlzLmNoYXJzKyIiPT1OKyIiJiZ0aGlzLmNoYXJTdGVwPT1qfHwodGhpcy5jaGFyQ2FudmFzPXAoe2NhbnZhczp0aGlzLmNoYXJDYW52YXMsZmFtaWx5OiJzYW5zLXNlcmlmIixzaXplOlUsc2hhcGU6W3EsR10sc3RlcDpbQixCXSxjaGFyczpOLGFsaWduOiEwLGZpdDp0aGlzLmNoYXJGaXR9KSx0aGlzLmNoYXJzPU4pO2Zvcih2YXIgeD0wO3g8bDsrK3gpe3ZhciBfPXU/dGhpcy5pMmlkeFt4XTp4LFg9aVtfXSxXPWFbX107a1syKnhdPTIqWCxrWzIqeCsxXT1XO3ZhciBQPUVbX10sWj1TW1BdO0FbMip4XT1aO3ZhciBKPUNbX10sSz1TW0pdO0FbMip4KzFdPUs7dmFyIFI9bltfXSxRPU9bUl07VFsyKngrMV09TWF0aC5mbG9vcihRL1kpLFRbMip4XT1RJVl9dGhpcy5zaXplQnVmZmVyLnVwZGF0ZShrKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShBKSx0aGlzLmNoYXJCdWZmZXIudXBkYXRlKFQpLHRoaXMuY2hhclRleHR1cmUuc2hhcGU9W3RoaXMuY2hhckNhbnZhcy53aWR0aCx0aGlzLmNoYXJDYW52YXMuaGVpZ2h0XSx0aGlzLmNoYXJDYW52YXMmJnRoaXMuY2hhckNhbnZhcy53aWR0aCYmdGhpcy5jaGFyVGV4dHVyZS5zZXRQaXhlbHModGhpcy5jaGFyQ2FudmFzKSx0aGlzLnBhbGV0dGVUZXh0dXJlLnNldFBpeGVscyhnKEwuc2xpY2UoMCwxMDI0KSxbMjU2LDEsNF0pKSxoLmZyZWUoayksaC5mcmVlKEEpLGguZnJlZShUKX0seC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaXplQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNoYXJCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPYmplY3QodGhpcyl9fSx7Ii4vbGliL3NoYWRlcnMiOjIzMCwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjIzMSxjbGFtcDo4NiwiY29sb3ItaWQiOjkwLCJmb250LWF0bGFzLXNkZiI6MTMyLCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyMzIsImdsLXRleHR1cmUyZCI6MjY1LG5kYXJyYXk6NDY1LCJzbmFwLXBvaW50cy0yZCI6MjQwLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI0MjpbZnVuY3Rpb24odCxlLHIpe3IucG9pbnRWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGksIHBvc2l0aW9uTG87XG5hdHRyaWJ1dGUgZmxvYXQgd2VpZ2h0O1xuXG51bmlmb3JtIHZlYzIgc2NhbGVIaSwgc2NhbGVMbywgdHJhbnNsYXRlSGksIHRyYW5zbGF0ZUxvO1xudW5pZm9ybSBmbG9hdCBwb2ludFNpemUsIHVzZVdlaWdodDtcblxudmFyeWluZyBmbG9hdCBmcmFnV2VpZ2h0O1xuXG5cbnZlYzQgcGZ4XzFfMCh2ZWMyIHNjYWxlSGksIHZlYzIgc2NhbGVMbywgdmVjMiB0cmFuc2xhdGVIaSwgdmVjMiB0cmFuc2xhdGVMbywgdmVjMiBwb3NpdGlvbkhpLCB2ZWMyIHBvc2l0aW9uTG8pIHtcbiAgcmV0dXJuIHZlYzQoKHBvc2l0aW9uSGkgKyB0cmFuc2xhdGVIaSkgKiBzY2FsZUhpXG4gICAgICAgICAgICArIChwb3NpdGlvbkxvICsgdHJhbnNsYXRlTG8pICogc2NhbGVIaVxuICAgICAgICAgICAgKyAocG9zaXRpb25IaSArIHRyYW5zbGF0ZUhpKSAqIHNjYWxlTG9cbiAgICAgICAgICAgICsgKHBvc2l0aW9uTG8gKyB0cmFuc2xhdGVMbykgKiBzY2FsZUxvLCAwLjAsIDEuMCk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwZnhfMV8wKHNjYWxlSGksIHNjYWxlTG8sIHRyYW5zbGF0ZUhpLCB0cmFuc2xhdGVMbywgcG9zaXRpb25IaSwgcG9zaXRpb25Mbyk7XG4gIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgZnJhZ1dlaWdodCA9IG1peCgxLjAsIHdlaWdodCwgdXNlV2VpZ2h0KTtcbn0iLHIucG9pbnRGcmFnbWVudD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcblxudmFyeWluZyBmbG9hdCBmcmFnV2VpZ2h0O1xuXG5mbG9hdCBzbW9vdGhTdGVwKGZsb2F0IHgsIGZsb2F0IHkpIHtcbiAgcmV0dXJuIDEuMCAvICgxLjAgKyBleHAoNTAuMCooeCAtIHkpKSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgcmFkaXVzID0gbGVuZ3RoKDIuMCpnbF9Qb2ludENvb3JkLnh5LTEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgdmVjNCBiYXNlQ29sb3IgPSBtaXgoYm9yZGVyQ29sb3IsIGNvbG9yLCBzbW9vdGhTdGVwKHJhZGl1cywgY2VudGVyRnJhY3Rpb24pKTtcbiAgZmxvYXQgYWxwaGEgPSAxLjAgLSBwb3coMS4wIC0gYmFzZUNvbG9yLmEsIGZyYWdXZWlnaHQpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGJhc2VDb2xvci5yZ2IgKiBhbHBoYSwgYWxwaGEpO1xufVxuIixyLnBpY2tWZXJ0ZXg9InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzQgcGZ4XzFfMCh2ZWMyIHNjYWxlSGksIHZlYzIgc2NhbGVMbywgdmVjMiB0cmFuc2xhdGVIaSwgdmVjMiB0cmFuc2xhdGVMbywgdmVjMiBwb3NpdGlvbkhpLCB2ZWMyIHBvc2l0aW9uTG8pIHtcbiAgcmV0dXJuIHZlYzQoKHBvc2l0aW9uSGkgKyB0cmFuc2xhdGVIaSkgKiBzY2FsZUhpXG4gICAgICAgICAgICArIChwb3NpdGlvbkxvICsgdHJhbnNsYXRlTG8pICogc2NhbGVIaVxuICAgICAgICAgICAgKyAocG9zaXRpb25IaSArIHRyYW5zbGF0ZUhpKSAqIHNjYWxlTG9cbiAgICAgICAgICAgICsgKHBvc2l0aW9uTG8gKyB0cmFuc2xhdGVMbykgKiBzY2FsZUxvLCAwLjAsIDEuMCk7XG59XG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uSGksIHBvc2l0aW9uTG87XG5hdHRyaWJ1dGUgdmVjNCBwaWNrSWQ7XG5cbnVuaWZvcm0gdmVjMiBzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG87XG51bmlmb3JtIGZsb2F0IHBvaW50U2l6ZTtcbnVuaWZvcm0gdmVjNCBwaWNrT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgdmVjNCBpZCA9IHBpY2tJZCArIHBpY2tPZmZzZXQ7XG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX1Bvc2l0aW9uID0gcGZ4XzFfMChzY2FsZUhpLCBzY2FsZUxvLCB0cmFuc2xhdGVIaSwgdHJhbnNsYXRlTG8sIHBvc2l0aW9uSGksIHBvc2l0aW9uTG8pO1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemU7XG4gIGZyYWdJZCA9IGlkO1xufSIsci5waWNrRnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdJZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG4gIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0lkIC8gMjU1LjA7XG59In0se31dLDI0MzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs4Ml1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjgyfV0sMjQ0OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIzOV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIzOX1dLDI0NTpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyNDBdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL2xpYi9zb3J0IjoyNDQsZHVwOjI0MCwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvKXt0aGlzLnBsb3Q9dCx0aGlzLnBvc2l0aW9uQnVmZmVySGk9ZSx0aGlzLnBvc2l0aW9uQnVmZmVyTG89cix0aGlzLnBpY2tCdWZmZXI9bix0aGlzLndlaWdodEJ1ZmZlcj1pLHRoaXMuc2hhZGVyPWEsdGhpcy5waWNrU2hhZGVyPW8sdGhpcy5zY2FsZXM9W10sdGhpcy5zaXplPTEyLHRoaXMuYm9yZGVyU2l6ZT0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5waWNrT2Zmc2V0PTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLnhDb29yZHM9bnVsbCx0aGlzLnNuYXBQb2ludHM9ITB9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuZ2wsaT1vKHIpLHM9byhyKSxsPW8ociksdT1vKHIpLGg9YShyLGMucG9pbnRWZXJ0ZXgsYy5wb2ludEZyYWdtZW50KSxmPWEocixjLnBpY2tWZXJ0ZXgsYy5waWNrRnJhZ21lbnQpLGQ9bmV3IG4odCxpLHMsbCx1LGgsZik7cmV0dXJuIGQudXBkYXRlKGUpLHQuYWRkT2JqZWN0KGQpLGR9dmFyIGE9dCgiZ2wtc2hhZGVyIiksbz10KCJnbC1idWZmZXIiKSxzPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbD10KCJzbmFwLXBvaW50cy0yZCIpLHU9dCgidHlwZWRhcnJheS1wb29sIiksYz10KCIuL2xpYi9zaGFkZXIiKSxoPXQoImFycmF5LW5vcm1hbGl6ZSIpLGY9dCgiYXJyYXktYm91bmRzIik7ZS5leHBvcnRzPWk7dmFyIGQ9bi5wcm90b3R5cGUscD1uZXcgRmxvYXQzMkFycmF5KDIpLG09bmV3IEZsb2F0MzJBcnJheSgyKSx2PW5ldyBGbG9hdDMyQXJyYXkoMiksZz1uZXcgRmxvYXQzMkFycmF5KDIpLHk9WzAsMCwwLDBdO2QuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9zaXRpb25CdWZmZXJIaS5kaXNwb3NlKCksdGhpcy5wb3NpdGlvbkJ1ZmZlckxvLmRpc3Bvc2UoKSx0aGlzLnBpY2tCdWZmZXIuZGlzcG9zZSgpLHRoaXMueENvb3JkcyYmdS5mcmVlKHRoaXMueENvb3JkcyksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sZC51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfWlmKHQ9dHx8e30sdGhpcy5zaXplPWUoInNpemUiLDEyKSx0aGlzLmNvbG9yPWUoImNvbG9yIixbMSwwLDAsMV0pLnNsaWNlKCksdGhpcy5ib3JkZXJTaXplPWUoImJvcmRlclNpemUiLDEpLHRoaXMuYm9yZGVyQ29sb3I9ZSgiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLnNuYXBQb2ludHM9ZSgic25hcFBvaW50cyIsITApLG51bGwhPXQucG9zaXRpb25zKXt0aGlzLnhDb29yZHMmJnUuZnJlZSh0aGlzLnhDb29yZHMpLHRoaXMucG9pbnRzPXQucG9zaXRpb25zO3ZhciByPXRoaXMucG9pbnRzLmxlbmd0aD4+PjEsbj11Lm1hbGxvY0ludDMyKHIpLGk9dS5tYWxsb2NGbG9hdDMyKHIpLGE9dS5tYWxsb2NGbG9hdDY0KDIqcik7aWYoYS5zZXQodGhpcy5wb2ludHMpLHRoaXMuc25hcFBvaW50cyl0aGlzLnNjYWxlcz1sKGEsbixpLHRoaXMuYm91bmRzKTtlbHNle3RoaXMuYm91bmRzPWYoYSwyKSxoKGEsMix0aGlzLmJvdW5kcyk7Zm9yKHZhciBvPTA7bzxyO28rKyluW29dPW8saVtvXT0xfXZhciBzPXUubWFsbG9jRmxvYXQ2NChyKSxjPXUubWFsbG9jRmxvYXQzMigyKnIpLGQ9dS5tYWxsb2NGbG9hdDMyKDIqcik7Yy5zZXQoYSk7Zm9yKHZhciBvPTAscD0wO288cjtvKysscCs9MilkW3BdPWFbcF0tY1twXSxkW3ArMV09YVtwKzFdLWNbcCsxXSxzW29dPWFbcF07dGhpcy5wb3NpdGlvbkJ1ZmZlckhpLnVwZGF0ZShjKSx0aGlzLnBvc2l0aW9uQnVmZmVyTG8udXBkYXRlKGQpLHRoaXMucGlja0J1ZmZlci51cGRhdGUobiksdGhpcy53ZWlnaHRCdWZmZXIudXBkYXRlKGkpLHUuZnJlZShjKSx1LmZyZWUoZCksdS5mcmVlKGkpLHUuZnJlZShhKSx1LmZyZWUobiksdGhpcy54Q29vcmRzPXMsdGhpcy5wb2ludENvdW50PXIsdGhpcy5waWNrT2Zmc2V0PTB9fSxkLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPXRoaXMucGxvdCxuPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLGk9dGhpcy5zY2FsZXMsYT10aGlzLnBvc2l0aW9uQnVmZmVySGksbz10aGlzLnBvc2l0aW9uQnVmZmVyTG8scz10aGlzLnBpY2tCdWZmZXIsbD10aGlzLmJvdW5kcyx1PXRoaXMuc2l6ZSxjPXRoaXMuYm9yZGVyU2l6ZSxoPXIuZ2wsZj1lP3IucGlja1BpeGVsUmF0aW86ci5waXhlbFJhdGlvLGQ9ci52aWV3Qm94LGI9ci5kYXRhQm94O2lmKDA9PT10aGlzLnBvaW50Q291bnQpcmV0dXJuIHQ7dmFyIHg9bFsyXS1sWzBdLF89bFszXS1sWzFdLHc9YlsyXS1iWzBdLE09YlszXS1iWzFdLGs9KGRbMl0tZFswXSkqZi9yLnBpeGVsUmF0aW8sQT0oZFszXS1kWzFdKSpmL3IucGl4ZWxSYXRpbyxUPXRoaXMucGl4ZWxTaXplPU1hdGgubWluKHcvayxNL0EpLFM9Mip4L3csRT0yKl8vTTtwWzBdPVMscFsxXT1FLG1bMF09Uy1wWzBdLG1bMV09RS1wWzFdO3ZhciBMPShsWzBdLWJbMF0tLjUqdykveCxDPShsWzFdLWJbMV0tLjUqTSkvXzt2WzBdPUwsdlsxXT1DLGdbMF09TC12WzBdLGdbMV09Qy12WzFdLG4uYmluZCgpLG4udW5pZm9ybXMuc2NhbGVIaT1wLG4udW5pZm9ybXMuc2NhbGVMbz1tLG4udW5pZm9ybXMudHJhbnNsYXRlSGk9dixuLnVuaWZvcm1zLnRyYW5zbGF0ZUxvPWcsbi51bmlmb3Jtcy5jb2xvcj10aGlzLmNvbG9yLG4udW5pZm9ybXMuYm9yZGVyQ29sb3I9dGhpcy5ib3JkZXJDb2xvcixuLnVuaWZvcm1zLnBvaW50U2l6ZT1mKih1K2MpLG4udW5pZm9ybXMuY2VudGVyRnJhY3Rpb249MD09PXRoaXMuYm9yZGVyU2l6ZT8yOnUvKHUrYysxLjI1KSxhLmJpbmQoKSxuLmF0dHJpYnV0ZXMucG9zaXRpb25IaS5wb2ludGVyKCksby5iaW5kKCksbi5hdHRyaWJ1dGVzLnBvc2l0aW9uTG8ucG9pbnRlcigpLGU/KHRoaXMucGlja09mZnNldD10LHlbMF09MjU1JnQseVsxXT10Pj44JjI1NSx5WzJdPXQ+PjE2JjI1NSx5WzNdPXQ+PjI0JjI1NSxuLnVuaWZvcm1zLnBpY2tPZmZzZXQ9eSxzLmJpbmQoKSxuLmF0dHJpYnV0ZXMucGlja0lkLnBvaW50ZXIoaC5VTlNJR05FRF9CWVRFKSk6KG4udW5pZm9ybXMudXNlV2VpZ2h0PTEsdGhpcy53ZWlnaHRCdWZmZXIuYmluZCgpLG4uYXR0cmlidXRlcy53ZWlnaHQucG9pbnRlcigpKTt2YXIgej0hMDtpZih0aGlzLnNuYXBQb2ludHMpZm9yKHZhciBJPWkubGVuZ3RoLTE7ST49MDtJLS0pe3ZhciBEPWlbSV07aWYoIShELnBpeGVsU2l6ZTxUJiZJPjEpKXt2YXIgUD10aGlzLmdldFZpc2libGVSYW5nZShEKSxPPVBbMF0sUj1QWzFdO1I+TyYmaC5kcmF3QXJyYXlzKGguUE9JTlRTLE8sUi1PKSwhZSYmeiYmKHo9ITEsbi51bmlmb3Jtcy51c2VXZWlnaHQ9MCl9fWVsc2UgaC5kcmF3QXJyYXlzKGguUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KTtyZXR1cm4gdCt0aGlzLnBvaW50Q291bnR9LGQuZ2V0VmlzaWJsZVJhbmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdC5kYXRhQm94LHI9dGhpcy5ib3VuZHMsbj10aGlzLnBpeGVsU2l6ZSxpPXRoaXMuc2l6ZSxhPXRoaXMucGxvdC5waXhlbFJhdGlvLG89clsyXS1yWzBdO3JbM10sclsxXTtpZighdClmb3IodmFyIHQsbD10aGlzLnNjYWxlcy5sZW5ndGgtMTtsPj0wJiYodD10aGlzLnNjYWxlc1tsXSx0LnBpeGVsU2l6ZTxuJiZsPjEpO2wtLSk7dmFyIHU9dGhpcy54Q29vcmRzLGM9KGVbMF0tclswXS1uKmkqYSkvbyxoPShlWzJdLXJbMF0rbippKmEpL28sZj10Lm9mZnNldCxkPXQuY291bnQrZixwPXMuZ2UodSxjLGYsZC0xKTtyZXR1cm5bcCxzLmx0KHUsaCxwLGQtMSkrMV19LGQuZHJhd1BpY2s9ZC5kcmF3LGQucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49ci10aGlzLnBpY2tPZmZzZXQ7cmV0dXJuIG48MHx8bj49dGhpcy5wb2ludENvdW50P251bGw6e29iamVjdDp0aGlzLHBvaW50SWQ6bixkYXRhQ29vcmQ6W3RoaXMucG9pbnRzWzIqbl0sdGhpcy5wb2ludHNbMipuKzFdXX19fSx7Ii4vbGliL3NoYWRlciI6MjQyLCJhcnJheS1ib3VuZHMiOjQyLCJhcnJheS1ub3JtYWxpemUiOjQzLCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MjQzLCJnbC1idWZmZXIiOjE1NCwiZ2wtc2hhZGVyIjoyNTMsInNuYXAtcG9pbnRzLTJkIjoyNDUsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1hW2VdO2lmKHJ8fChyPWFbZV09e30pLHQgaW4gcilyZXR1cm4gclt0XTtmb3IodmFyIG49aSh0LHt0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVIZWlnaHQ6MSxmb250OmV9KSxvPWkodCx7dHJpYW5nbGVzOiEwLHRleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZX0pLHM9W1sxLzAsMS8wXSxbLTEvMCwtMS8wXV0sbD0wO2w8bi5wb3NpdGlvbnMubGVuZ3RoOysrbClmb3IodmFyIHU9bi5wb3NpdGlvbnNbbF0sYz0wO2M8MjsrK2Mpc1swXVtjXT1NYXRoLm1pbihzWzBdW2NdLHVbY10pLHNbMV1bY109TWF0aC5tYXgoc1sxXVtjXSx1W2NdKTtyZXR1cm4gclt0XT1bbyxuLHNdfXZhciBpPXQoInZlY3Rvcml6ZS10ZXh0Iik7ZS5leHBvcnRzPW47dmFyIGE9e319LHsidmVjdG9yaXplLXRleHQiOjU1Mn1dLDI0ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1pKHQsZSksbj1yLmF0dHJpYnV0ZXM7cmV0dXJuIG4ucG9zaXRpb24ubG9jYXRpb249MCxuLmNvbG9yLmxvY2F0aW9uPTEsbi5nbHlwaC5sb2NhdGlvbj0yLG4uaWQubG9jYXRpb249MyxyfXZhciBpPXQoImdsLXNoYWRlciIpLGE9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1swXSkpICAgfHwgXG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpICkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IDEuMDtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBzY2FsZSA9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjNCB2aWV3UG9zaXRpb24gPSB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgICB2aWV3UG9zaXRpb24gPSB2aWV3UG9zaXRpb24gLyB2aWV3UG9zaXRpb24udztcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiAodmlld1Bvc2l0aW9uICsgc2NhbGUgKiB2ZWM0KGdseXBoLngsIC1nbHlwaC55LCAwLCAwKSk7XG4gICAgXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59IixvPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZSwgcGl4ZWxSYXRpbztcbnVuaWZvcm0gdmVjNCBoaWdobGlnaHRJZDtcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSB8fCBhbnkoZ3JlYXRlclRoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBzY2FsZSA9IHBpeGVsUmF0aW87XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQuYmdyLCBpZC5iZ3IpIDwgMC4wMDEpIHtcbiAgICAgIHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXdQb3NpdGlvbjtcbiAgICBjbGlwUG9zaXRpb24gLz0gY2xpcFBvc2l0aW9uLnc7XG4gICAgXG4gICAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb24gKyB2ZWM0KHNjcmVlblNpemUgKiBzY2FsZSAqIHZlYzIoZ2x5cGgueCwgLWdseXBoLnkpLCAwLjAsIDAuMCk7XG4gICAgaW50ZXJwQ29sb3IgPSBjb2xvcjtcbiAgICBwaWNrSWQgPSBpZDtcbiAgICBkYXRhQ29vcmRpbmF0ZSA9IHBvc2l0aW9uO1xuICB9XG59IixzPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiBnbHlwaDtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSB2ZWMzIGF4ZXNbMl07XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzIgc2NyZWVuU2l6ZTtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBzY2FsZSwgcGl4ZWxSYXRpbztcblxudmFyeWluZyB2ZWM0IGludGVycENvbG9yO1xudmFyeWluZyB2ZWM0IHBpY2tJZDtcbnZhcnlpbmcgdmVjMyBkYXRhQ29vcmRpbmF0ZTtcblxudm9pZCBtYWluKCkge1xuICBpZihhbnkobGVzc1RoYW4ocG9zaXRpb24sIGNsaXBCb3VuZHNbMF0pKSAgIHx8XG4gICAgIGFueShncmVhdGVyVGhhbihwb3NpdGlvbiwgY2xpcEJvdW5kc1sxXSkpICkge1xuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwwKTtcbiAgfSBlbHNlIHtcbiAgICBmbG9hdCBsc2NhbGUgPSBwaXhlbFJhdGlvICogc2NhbGU7XG4gICAgaWYoZGlzdGFuY2UoaGlnaGxpZ2h0SWQsIGlkKSA8IDAuMDAwMSkge1xuICAgICAgbHNjYWxlICo9IGhpZ2hsaWdodFNjYWxlO1xuICAgIH1cblxuICAgIHZlYzQgY2xpcENlbnRlciAgID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEpO1xuICAgIHZlYzMgZGF0YVBvc2l0aW9uID0gcG9zaXRpb24gKyAwLjUqbHNjYWxlKihheGVzWzBdICogZ2x5cGgueCArIGF4ZXNbMV0gKiBnbHlwaC55KSAqIGNsaXBDZW50ZXIudyAqIHNjcmVlblNpemUueTtcbiAgICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGRhdGFQb3NpdGlvbiwgMSk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgICBpbnRlcnBDb2xvciA9IGNvbG9yO1xuICAgIHBpY2tJZCA9IGlkO1xuICAgIGRhdGFDb29yZGluYXRlID0gZGF0YVBvc2l0aW9uO1xuICB9XG59XG4iLGw9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMF0pKSAgIHx8XG4gICAgIGFueShncmVhdGVyVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMV0pKSApIHtcbiAgICBkaXNjYXJkO1xuICB9IGVsc2Uge1xuICAgIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcbiAgfVxufVxuIix1PSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjMyBmcmFnQ2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0dyb3VwO1xuXG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmKGFueShsZXNzVGhhbihkYXRhQ29vcmRpbmF0ZSwgZnJhZ0NsaXBCb3VuZHNbMF0pKSAgIHx8IFxuICAgICBhbnkoZ3JlYXRlclRoYW4oZGF0YUNvb3JkaW5hdGUsIGZyYWdDbGlwQm91bmRzWzFdKSkgKSB7XG4gICAgZGlzY2FyZDtcbiAgfSBlbHNlIHtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tHcm91cCwgcGlja0lkLmJncik7XG4gIH1cbn0iLGM9W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJnbHlwaCIsdHlwZToidmVjMiJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XSxoPXt2ZXJ0ZXg6YSxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6Y30sZj17dmVydGV4Om8sZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOmN9LGQ9e3ZlcnRleDpzLGZyYWdtZW50OmwsYXR0cmlidXRlczpjfSxwPXt2ZXJ0ZXg6YSxmcmFnbWVudDp1LGF0dHJpYnV0ZXM6Y30sbT17dmVydGV4Om8sZnJhZ21lbnQ6dSxhdHRyaWJ1dGVzOmN9LHY9e3ZlcnRleDpzLGZyYWdtZW50OnUsYXR0cmlidXRlczpjfTtyLmNyZWF0ZVBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaCl9LHIuY3JlYXRlT3J0aG89ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxmKX0sci5jcmVhdGVQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsZCl9LHIuY3JlYXRlUGlja1BlcnNwZWN0aXZlPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQscCl9LHIuY3JlYXRlUGlja09ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsbSl9LHIuY3JlYXRlUGlja1Byb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCx2KX19LHsiZ2wtc2hhZGVyIjoyNTN9XSwyNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXRbMF0sbj10WzFdLGk9dFsyXSxhPXRbM107cmV0dXJuIHRbMF09ZVswXSpyK2VbNF0qbitlWzhdKmkrZVsxMl0qYSx0WzFdPWVbMV0qcitlWzVdKm4rZVs5XSppK2VbMTNdKmEsdFsyXT1lWzJdKnIrZVs2XSpuK2VbMTBdKmkrZVsxNF0qYSx0WzNdPWVbM10qcitlWzddKm4rZVsxMV0qaStlWzE1XSphLHR9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbihpLGksciksbihpLGksZSksbihpLGksdCl9ZnVuY3Rpb24gYSh0LGUpe3RoaXMuaW5kZXg9dCx0aGlzLmRhdGFDb29yZGluYXRlPXRoaXMucG9zaXRpb249ZX1mdW5jdGlvbiBvKHQsZSxyLG4saSxvLHMsbCx1LGMsaCxmKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5zaGFkZXI9ZSx0aGlzLm9ydGhvU2hhZGVyPXIsdGhpcy5wcm9qZWN0U2hhZGVyPW4sdGhpcy5wb2ludEJ1ZmZlcj1pLHRoaXMuY29sb3JCdWZmZXI9byx0aGlzLmdseXBoQnVmZmVyPXMsdGhpcy5pZEJ1ZmZlcj1sLHRoaXMudmFvPXUsdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMubGluZVZlcnRleENvdW50PTAsdGhpcy5vcGFjaXR5PTEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9aCx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWYsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBhKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1mdW5jdGlvbiBzKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1MLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9ZnVuY3Rpb24gaCh0LGUscixuLGEpe3ZhciBvLGg9ZS5heGVzUHJvamVjdCxmPWUuZ2wsZD10LnVuaWZvcm1zLHA9ci5tb2RlbHx8eCxtPXIudmlld3x8eCx2PXIucHJvamVjdGlvbnx8eCx5PWUuYXhlc0JvdW5kcyxiPWMoZS5jbGlwQm91bmRzKTtvPWUuYXhlcz9lLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzOlsxLDEsMV0sd1swXT0yL2YuZHJhd2luZ0J1ZmZlcldpZHRoLHdbMV09Mi9mLmRyYXdpbmdCdWZmZXJIZWlnaHQsdC5iaW5kKCksZC52aWV3PW0sZC5wcm9qZWN0aW9uPXYsZC5zY3JlZW5TaXplPXcsZC5oaWdobGlnaHRJZD1lLmhpZ2hsaWdodElkLGQuaGlnaGxpZ2h0U2NhbGU9ZS5oaWdobGlnaHRTY2FsZSxkLmNsaXBCb3VuZHM9YixkLnBpY2tHcm91cD1lLnBpY2tJZC8yNTUsZC5waXhlbFJhdGlvPWUucGl4ZWxSYXRpbztmb3IodmFyIF89MDtfPDM7KytfKWlmKGhbX10mJmUucHJvamVjdE9wYWNpdHlbX108MT09PW4pe2Quc2NhbGU9ZS5wcm9qZWN0U2NhbGVbX10sZC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbX107Zm9yKHZhciBMPVMsQz0wO0M8MTY7KytDKUxbQ109MDtmb3IodmFyIEM9MDtDPDQ7KytDKUxbNSpDXT0xO0xbNSpfXT0wLG9bX108MD9MWzEyK19dPXlbMF1bX106TFsxMitfXT15WzFdW19dLGcoTCxwLEwpLGQubW9kZWw9TDt2YXIgej0oXysxKSUzLEk9KF8rMiklMyxEPXMoTSksUD1zKGspO0Rbel09MSxQW0ldPTE7dmFyIE89aSh2LG0scCxsKEEsRCkpLFI9aSh2LG0scCxsKFQsUCkpO2lmKE1hdGguYWJzKE9bMV0pPk1hdGguYWJzKFJbMV0pKXt2YXIgRj1PO089UixSPUYsRj1ELEQ9UCxQPUY7dmFyIGo9ejt6PUksST1qfU9bMF08MCYmKERbel09LTEpLFJbMV0+MCYmKFBbSV09LTEpO2Zvcih2YXIgTj0wLEI9MCxDPTA7Qzw0OysrQylOKz1NYXRoLnBvdyhwWzQqeitDXSwyKSxCKz1NYXRoLnBvdyhwWzQqSStDXSwyKTtEW3pdLz1NYXRoLnNxcnQoTiksUFtJXS89TWF0aC5zcXJ0KEIpLGQuYXhlc1swXT1ELGQuYXhlc1sxXT1QLApkLmZyYWdDbGlwQm91bmRzWzBdPXUoRSxiWzBdLF8sLTFlOCksZC5mcmFnQ2xpcEJvdW5kc1sxXT11KEUsYlsxXSxfLDFlOCksZS52YW8uZHJhdyhmLlRSSUFOR0xFUyxlLnZlcnRleENvdW50KSxlLmxpbmVXaWR0aD4wJiYoZi5saW5lV2lkdGgoZS5saW5lV2lkdGgpLGUudmFvLmRyYXcoZi5MSU5FUyxlLmxpbmVWZXJ0ZXhDb3VudCxlLnZlcnRleENvdW50KSl9fWZ1bmN0aW9uIGYodCxlLHIsbixpLGEpe3ZhciBvPXIuZ2w7aWYoci52YW8uYmluZCgpLGk9PT1yLm9wYWNpdHk8MXx8YSl7dC5iaW5kKCk7dmFyIHM9dC51bmlmb3JtcztzLm1vZGVsPW4ubW9kZWx8fHgscy52aWV3PW4udmlld3x8eCxzLnByb2plY3Rpb249bi5wcm9qZWN0aW9ufHx4LHdbMF09Mi9vLmRyYXdpbmdCdWZmZXJXaWR0aCx3WzFdPTIvby5kcmF3aW5nQnVmZmVySGVpZ2h0LHMuc2NyZWVuU2l6ZT13LHMuaGlnaGxpZ2h0SWQ9ci5oaWdobGlnaHRJZCxzLmhpZ2hsaWdodFNjYWxlPXIuaGlnaGxpZ2h0U2NhbGUscy5mcmFnQ2xpcEJvdW5kcz1JLHMuY2xpcEJvdW5kcz1yLmF4ZXMuYm91bmRzLHMub3BhY2l0eT1yLm9wYWNpdHkscy5waWNrR3JvdXA9ci5waWNrSWQvMjU1LHMucGl4ZWxSYXRpbz1yLnBpeGVsUmF0aW8sci52YW8uZHJhdyhvLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYoby5saW5lV2lkdGgoci5saW5lV2lkdGgpLHIudmFvLmRyYXcoby5MSU5FUyxyLmxpbmVWZXJ0ZXhDb3VudCxyLnZlcnRleENvdW50KSl9aChlLHIsbixpLGEpLHIudmFvLnVuYmluZCgpfWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5nbCxyPXkuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj15LmNyZWF0ZU9ydGhvKGUpLGk9eS5jcmVhdGVQcm9qZWN0KGUpLGE9eS5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSkscz15LmNyZWF0ZVBpY2tPcnRobyhlKSxsPXkuY3JlYXRlUGlja1Byb2plY3QoZSksdT1wKGUpLGM9cChlKSxoPXAoZSksZj1wKGUpLGQ9bShlLFt7YnVmZmVyOnUsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpjLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6aCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmYsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksdj1uZXcgbyhlLHIsbixpLHUsYyxoLGYsZCxhLHMsbCk7cmV0dXJuIHYudXBkYXRlKHQpLHZ9dmFyIHA9dCgiZ2wtYnVmZmVyIiksbT10KCJnbC12YW8iKSx2PXQoInR5cGVkYXJyYXktcG9vbCIpLGc9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLHk9dCgiLi9saWIvc2hhZGVycyIpLGI9dCgiLi9saWIvZ2x5cGhzIikseD1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZS5leHBvcnRzPWQ7dmFyIF89by5wcm90b3R5cGU7Xy5waWNrU2xvdHM9MSxfLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LF8uaXNUcmFuc3BhcmVudD1mdW5jdGlvbigpe2lmKHRoaXMub3BhY2l0eTwxKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XTwxKXJldHVybiEwO3JldHVybiExfSxfLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0T3BhY2l0eVt0XT49MSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHc9WzAsMF0sTT1bMCwwLDBdLGs9WzAsMCwwXSxBPVswLDAsMCwxXSxUPVswLDAsMCwxXSxTPXguc2xpY2UoKSxFPVswLDAsMF0sTD1bWzAsMCwwXSxbMCwwLDBdXSxDPVstMWU4LC0xZTgsLTFlOF0sej1bMWU4LDFlOCwxZThdLEk9W0Msel07Xy5kcmF3PWZ1bmN0aW9uKHQpe2YodGhpcy51c2VPcnRobz90aGlzLm9ydGhvU2hhZGVyOnRoaXMuc2hhZGVyLHRoaXMucHJvamVjdFNoYWRlcix0aGlzLHQsITEsITEpfSxfLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtmKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LCEwLCExKX0sXy5kcmF3UGljaz1mdW5jdGlvbih0KXtmKHRoaXMudXNlT3J0aG8/dGhpcy5waWNrT3J0aG9TaGFkZXI6dGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIsdGhpcy5waWNrUHJvamVjdFNoYWRlcix0aGlzLHQsITEsITApfSxfLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LF8uaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LF8udXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHQ9dHx8e30sInBlcnNwZWN0aXZlImluIHQmJih0aGlzLnVzZU9ydGhvPSF0LnBlcnNwZWN0aXZlKSwib3J0aG9ncmFwaGljImluIHQmJih0aGlzLnVzZU9ydGhvPSEhdC5vcnRob2dyYXBoaWMpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwicHJvamVjdCJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0KSl0aGlzLmF4ZXNQcm9qZWN0PXQucHJvamVjdDtlbHNle3ZhciBlPSEhdC5wcm9qZWN0O3RoaXMuYXhlc1Byb2plY3Q9W2UsZSxlXX1pZigicHJvamVjdFNjYWxlImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3RTY2FsZSkpdGhpcy5wcm9qZWN0U2NhbGU9dC5wcm9qZWN0U2NhbGUuc2xpY2UoKTtlbHNle3ZhciByPSt0LnByb2plY3RTY2FsZTt0aGlzLnByb2plY3RTY2FsZT1bcixyLHJdfWlmKCJwcm9qZWN0T3BhY2l0eSJpbiB0KWlmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXt2YXIgcj0rdC5wcm9qZWN0T3BhY2l0eTt0aGlzLnByb2plY3RPcGFjaXR5PVtyLHIscl19Im9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT10Lm9wYWNpdHkpLHRoaXMuZGlydHk9ITA7dmFyIG49dC5wb3NpdGlvbjtpZihuKXt2YXIgaT10LmZvbnR8fCJub3JtYWwiLGE9dC5hbGlnbm1lbnR8fFswLDBdLG89WzEvMCwxLzAsMS8wXSxzPVstMS8wLC0xLzAsLTEvMF0sbD10LmdseXBoLHU9dC5jb2xvcixjPXQuc2l6ZSxoPXQuYW5nbGUsZj10LmxpbmVDb2xvcixkPTAscD0wLG09MCxnPW4ubGVuZ3RoO3Q6Zm9yKHZhciB5PTA7eTxnOysreSl7Zm9yKHZhciB4PW5beV0sXz0wO188MzsrK18paWYoaXNOYU4oeFtfXSl8fCFpc0Zpbml0ZSh4W19dKSljb250aW51ZSB0O3ZhciB3O3c9QXJyYXkuaXNBcnJheShsKT9iKGxbeV0saSk6bD9iKGwsaSk6YigiXHUyNWNmIixpKTt2YXIgTT13WzBdLGs9d1sxXSxBPXdbMl07cCs9MypNLmNlbGxzLmxlbmd0aCxtKz0yKmsuZWRnZXMubGVuZ3RofXZhciBUPXArbSxTPXYubWFsbG9jRmxvYXQoMypUKSxFPXYubWFsbG9jRmxvYXQoNCpUKSxMPXYubWFsbG9jRmxvYXQoMipUKSxDPXYubWFsbG9jVWludDMyKFQpLHo9WzAsYVsxXV0sST0wLEQ9cCxQPVswLDAsMCwxXSxPPVswLDAsMCwxXSxSPUFycmF5LmlzQXJyYXkodSkmJkFycmF5LmlzQXJyYXkodVswXSksRj1BcnJheS5pc0FycmF5KGYpJiZBcnJheS5pc0FycmF5KGZbMF0pO3Q6Zm9yKHZhciB5PTA7eTxnOysreSl7Zm9yKHZhciB4PW5beV0sXz0wO188MzsrK18pe2lmKGlzTmFOKHhbX10pfHwhaXNGaW5pdGUoeFtfXSkpe2QrPTE7Y29udGludWUgdH1zW19dPU1hdGgubWF4KHNbX10seFtfXSksb1tfXT1NYXRoLm1pbihvW19dLHhbX10pfXZhciB3O3c9QXJyYXkuaXNBcnJheShsKT9iKGxbeV0saSk6bD9iKGwsaSk6YigiXHUyNWNmIixpKTt2YXIgTT13WzBdLGs9d1sxXSxBPXdbMl07aWYoQXJyYXkuaXNBcnJheSh1KSl7dmFyIGo7aWYoaj1SP3VbeV06dSwzPT09ai5sZW5ndGgpe2Zvcih2YXIgXz0wO188MzsrK18pUFtfXT1qW19dO1BbM109MX1lbHNlIGlmKDQ9PT1qLmxlbmd0aClmb3IodmFyIF89MDtfPDQ7KytfKVBbX109altfXX1lbHNlIFBbMF09UFsxXT1QWzJdPTAsUFszXT0xO2lmKEFycmF5LmlzQXJyYXkoZikpe3ZhciBqO2lmKGo9Rj9mW3ldOmYsMz09PWoubGVuZ3RoKXtmb3IodmFyIF89MDtfPDM7KytfKU9bX109altfXTtPW19dPTF9ZWxzZSBpZig0PT09ai5sZW5ndGgpZm9yKHZhciBfPTA7Xzw0OysrXylPW19dPWpbX119ZWxzZSBPWzBdPU9bMV09T1syXT0wLE9bM109MTt2YXIgTj0uNTtBcnJheS5pc0FycmF5KGMpP049K2NbeV06Yz9OPStjOnRoaXMudXNlT3J0aG8mJihOPTEyKTt2YXIgQj0wO0FycmF5LmlzQXJyYXkoaCk/Qj0raFt5XTpoJiYoQj0raCk7Zm9yKHZhciBVPU1hdGguY29zKEIpLFY9TWF0aC5zaW4oQikseD1uW3ldLF89MDtfPDM7KytfKXNbX109TWF0aC5tYXgoc1tfXSx4W19dKSxvW19dPU1hdGgubWluKG9bX10seFtfXSk7YVswXTwwP3pbMF09YVswXSooMStBWzFdWzBdKTphWzBdPjAmJih6WzBdPS1hWzBdKigxK0FbMF1bMF0pKTtmb3IodmFyIEg9TS5jZWxscyxxPU0ucG9zaXRpb25zLF89MDtfPEgubGVuZ3RoOysrXylmb3IodmFyIEc9SFtfXSxZPTA7WTwzOysrWSl7Zm9yKHZhciBYPTA7WDwzOysrWClTWzMqSStYXT14W1hdO2Zvcih2YXIgWD0wO1g8NDsrK1gpRVs0KkkrWF09UFtYXTtDW0ldPWQ7dmFyIFc9cVtHW1ldXTtMWzIqSV09TiooVSpXWzBdLVYqV1sxXSt6WzBdKSxMWzIqSSsxXT1OKihWKldbMF0rVSpXWzFdK3pbMV0pLEkrPTF9Zm9yKHZhciBIPWsuZWRnZXMscT1rLnBvc2l0aW9ucyxfPTA7XzxILmxlbmd0aDsrK18pZm9yKHZhciBHPUhbX10sWT0wO1k8MjsrK1kpe2Zvcih2YXIgWD0wO1g8MzsrK1gpU1szKkQrWF09eFtYXTtmb3IodmFyIFg9MDtYPDQ7KytYKUVbNCpEK1hdPU9bWF07Q1tEXT1kO3ZhciBXPXFbR1tZXV07TFsyKkRdPU4qKFUqV1swXS1WKldbMV0relswXSksTFsyKkQrMV09TiooVipXWzBdK1UqV1sxXSt6WzFdKSxEKz0xfWQrPTF9dGhpcy52ZXJ0ZXhDb3VudD1wLHRoaXMubGluZVZlcnRleENvdW50PW0sdGhpcy5wb2ludEJ1ZmZlci51cGRhdGUoUyksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoRSksdGhpcy5nbHlwaEJ1ZmZlci51cGRhdGUoTCksdGhpcy5pZEJ1ZmZlci51cGRhdGUobmV3IFVpbnQzMkFycmF5KEMpKSx2LmZyZWUoUyksdi5mcmVlKEUpLHYuZnJlZShMKSx2LmZyZWUoQyksdGhpcy5ib3VuZHM9W28sc10sdGhpcy5wb2ludHM9bix0aGlzLnBvaW50Q291bnQ9bi5sZW5ndGh9fSxfLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5vcnRob1NoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrUGVyc3BlY3RpdmVTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja09ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5wb2ludEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5nbHlwaEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCl9fSx7Ii4vbGliL2dseXBocyI6MjQ3LCIuL2xpYi9zaGFkZXJzIjoyNDgsImdsLWJ1ZmZlciI6MTU0LCJnbC1tYXQ0L211bHRpcGx5IjoxODEsImdsLXZhbyI6MjY5LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmJveFZlcnRleD0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiB2ZXJ0ZXg7XG5cbnVuaWZvcm0gdmVjMiBjb3JuZXJBLCBjb3JuZXJCO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChtaXgoY29ybmVyQSwgY29ybmVyQiwgdmVydGV4KSwgMCwgMSk7XG59XG4iLHIuYm94RnJhZ21lbnQ9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIn0se31dLDI1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuZ2wsaT1vKHIsWzAsMCwwLDEsMSwwLDEsMV0pLGw9YShyLHMuYm94VmVydGV4LHMuYm94RnJhZ21lbnQpLHU9bmV3IG4odCxpLGwpO3JldHVybiB1LnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkodSksdX12YXIgYT10KCJnbC1zaGFkZXIiKSxvPXQoImdsLWJ1ZmZlciIpLHM9dCgiLi9saWIvc2hhZGVycyIpO2UuZXhwb3J0cz1pO3ZhciBsPW4ucHJvdG90eXBlO2wuZHJhdz1mdW5jdGlvbigpe2lmKHRoaXMuZW5hYmxlZCl7dmFyIHQ9dGhpcy5wbG90LGU9dGhpcy5zZWxlY3RCb3gscj10aGlzLmJvcmRlcldpZHRoLG49KHRoaXMuaW5uZXJGaWxsLHRoaXMuaW5uZXJDb2xvciksaT0odGhpcy5vdXRlckZpbGwsdGhpcy5vdXRlckNvbG9yKSxhPXRoaXMuYm9yZGVyQ29sb3Isbz10LmJveCxzPXQuc2NyZWVuQm94LGw9dC5kYXRhQm94LHU9dC52aWV3Qm94LGM9dC5waXhlbFJhdGlvLGg9KGVbMF0tbFswXSkqKHVbMl0tdVswXSkvKGxbMl0tbFswXSkrdVswXSxmPShlWzFdLWxbMV0pKih1WzNdLXVbMV0pLyhsWzNdLWxbMV0pK3VbMV0sZD0oZVsyXS1sWzBdKSoodVsyXS11WzBdKS8obFsyXS1sWzBdKSt1WzBdLHA9KGVbM10tbFsxXSkqKHVbM10tdVsxXSkvKGxbM10tbFsxXSkrdVsxXTtpZihoPU1hdGgubWF4KGgsdVswXSksZj1NYXRoLm1heChmLHVbMV0pLGQ9TWF0aC5taW4oZCx1WzJdKSxwPU1hdGgubWluKHAsdVszXSksIShkPGh8fHA8Zikpe28uYmluZCgpO3ZhciBtPXNbMl0tc1swXSx2PXNbM10tc1sxXTtpZih0aGlzLm91dGVyRmlsbCYmKG8uZHJhd0JveCgwLDAsbSxmLGkpLG8uZHJhd0JveCgwLGYsaCxwLGkpLG8uZHJhd0JveCgwLHAsbSx2LGkpLG8uZHJhd0JveChkLGYsbSxwLGkpKSx0aGlzLmlubmVyRmlsbCYmby5kcmF3Qm94KGgsZixkLHAsbikscj4wKXt2YXIgZz1yKmM7by5kcmF3Qm94KGgtZyxmLWcsZCtnLGYrZyxhKSxvLmRyYXdCb3goaC1nLHAtZyxkK2cscCtnLGEpLG8uZHJhd0JveChoLWcsZi1nLGgrZyxwK2csYSksby5kcmF3Qm94KGQtZyxmLWcsZCtnLHArZyxhKX19fX0sbC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmlubmVyRmlsbD0hIXQuaW5uZXJGaWxsLHRoaXMub3V0ZXJGaWxsPSEhdC5vdXRlckZpbGwsdGhpcy5pbm5lckNvbG9yPSh0LmlubmVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5vdXRlckNvbG9yPSh0Lm91dGVyQ29sb3J8fFswLDAsMCwuNV0pLnNsaWNlKCksdGhpcy5ib3JkZXJDb2xvcj0odC5ib3JkZXJDb2xvcnx8WzAsMCwwLDFdKS5zbGljZSgpLHRoaXMuYm9yZGVyV2lkdGg9dC5ib3JkZXJXaWR0aHx8MCx0aGlzLnNlbGVjdEJveD0odC5zZWxlY3RCb3h8fHRoaXMuc2VsZWN0Qm94KS5zbGljZSgpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5ib3hTaGFkZXIuZGlzcG9zZSgpLHRoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0seyIuL2xpYi9zaGFkZXJzIjoyNTAsImdsLWJ1ZmZlciI6MTU0LCJnbC1zaGFkZXIiOjI1M31dLDI1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7dGhpcy5jb29yZD1bdCxlXSx0aGlzLmlkPXIsdGhpcy52YWx1ZT1uLHRoaXMuZGlzdGFuY2U9aX1mdW5jdGlvbiBpKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5mYm89ZSx0aGlzLmJ1ZmZlcj1yLHRoaXMuX3JlYWRUaW1lb3V0PW51bGw7dmFyIG49dGhpczt0aGlzLl9yZWFkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtuLmdsJiYoZS5iaW5kKCksdC5yZWFkUGl4ZWxzKDAsMCxlLnNoYXBlWzBdLGUuc2hhcGVbMV0sdC5SR0JBLHQuVU5TSUdORURfQllURSxuLmJ1ZmZlciksbi5fcmVhZFRpbWVvdXQ9bnVsbCl9fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gbmV3IGkodCxvKHQsZSkscy5tYWxsb2NVaW50OChlWzBdKmVbMV0qNCkpfWUuZXhwb3J0cz1hO3ZhciBvPXQoImdsLWZibyIpLHM9dCgidHlwZWRhcnJheS1wb29sIiksbD10KCJuZGFycmF5IiksdT10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyLGM9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImFycmF5Iix7b2Zmc2V0OlswLDAsMV0sYXJyYXk6MH0se29mZnNldDpbMCwwLDJdLGFycmF5OjB9LHtvZmZzZXQ6WzAsMCwzXSxhcnJheTowfSwic2NhbGFyIiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int0aGlzX2Nsb3Nlc3REMj0xZTgsdGhpc19jbG9zZXN0WD0tMSx0aGlzX2Nsb3Nlc3RZPS0xfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfY2xvc2VzdEQyIiwidGhpc19jbG9zZXN0WCIsInRoaXNfY2xvc2VzdFkiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzQ2X2FyZzBfPDI1NXx8X2lubGluZV80Nl9hcmcxXzwyNTV8fF9pbmxpbmVfNDZfYXJnMl88MjU1fHxfaW5saW5lXzQ2X2FyZzNfPDI1NSl7dmFyIF9pbmxpbmVfNDZfbD1faW5saW5lXzQ2X2FyZzRfLV9pbmxpbmVfNDZfYXJnNl9bMF0sX2lubGluZV80Nl9hPV9pbmxpbmVfNDZfYXJnNV8tX2lubGluZV80Nl9hcmc2X1sxXSxfaW5saW5lXzQ2X2Y9X2lubGluZV80Nl9sKl9pbmxpbmVfNDZfbCtfaW5saW5lXzQ2X2EqX2lubGluZV80Nl9hO19pbmxpbmVfNDZfZjx0aGlzX2Nsb3Nlc3REMiYmKHRoaXNfY2xvc2VzdEQyPV9pbmxpbmVfNDZfZix0aGlzX2Nsb3Nlc3RYPV9pbmxpbmVfNDZfYXJnNl9bMF0sdGhpc19jbG9zZXN0WT1faW5saW5lXzQ2X2FyZzZfWzFdKX19IixhcmdzOlt7bmFtZToiX2lubGluZV80Nl9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmc0XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmc1XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV80Nl9hcmc2XyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOlsiX2lubGluZV80Nl9hIiwiX2lubGluZV80Nl9mIiwiX2lubGluZV80Nl9sIl19LHBvc3Q6e2JvZHk6IntyZXR1cm5bdGhpc19jbG9zZXN0WCx0aGlzX2Nsb3Nlc3RZLHRoaXNfY2xvc2VzdEQyXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2Nsb3Nlc3REMiIsInRoaXNfY2xvc2VzdFgiLCJ0aGlzX2Nsb3Nlc3RZIl0sbG9jYWxWYXJzOltdfSxkZWJ1ZzohMSxmdW5jTmFtZToiY3dpc2UiLGJsb2NrU2l6ZTo2NH0pLGg9aS5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGgsInNoYXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe3MuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPXMubWFsbG9jVWludDgodShyKmUqNCkpLGk9MDtpPHIqZSo0OysraSluW2ldPTI1NX1yZXR1cm4gdH19fSksaC5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0saC5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0saC5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIGk9dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsIm51bWJlciIhPXR5cGVvZiByJiYocj0xKTt2YXIgYT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxpWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLGlbMF0pLHM9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksaVsxXSksdT0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxpWzFdKTtpZihvPD1hfHx1PD1zKXJldHVybiBudWxsO3ZhciBoPVtvLWEsdS1zXSxmPWwodGhpcy5idWZmZXIsW2hbMF0saFsxXSw0XSxbNCw0KmlbMF0sMV0sNCooYStpWzBdKnMpKSxkPWMoZi5oaShoWzBdLGhbMV0sMSkscixyKSxwPWRbMF0sbT1kWzFdO3JldHVybiBwPDB8fE1hdGgucG93KHRoaXMucmFkaXVzLDIpPGRbMl0/bnVsbDpuZXcgbihwK2F8MCxtK3N8MCxmLmdldChwLG0sMCksW2YuZ2V0KHAsbSwxKSxmLmdldChwLG0sMiksZi5nZXQocCxtLDMpXSxNYXRoLnNxcnQoZFsyXSkpfSxoLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmdsJiYodGhpcy5mYm8uZGlzcG9zZSgpLHMuZnJlZSh0aGlzLmJ1ZmZlciksdGhpcy5nbD1udWxsLHRoaXMuX3JlYWRUaW1lb3V0JiZjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpKX19LHsiYml0LXR3aWRkbGUiOjY1LCJjd2lzZS9saWIvd3JhcHBlciI6MTExLCJnbC1mYm8iOjE2MixuZGFycmF5OjQ2NSwidHlwZWRhcnJheS1wb29sIjo1Mzl9XSwyNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmdsPXQsdGhpcy5fdnJlZj10aGlzLl9mcmVmPXRoaXMuX3JlbGluaz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLmF0dHJpYnV0ZXM9dGhpcy51bmlmb3Jtcz10aGlzLnR5cGVzPW51bGx9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9ZnVuY3Rpb24gYSh0LGUscixpLGEpe3ZhciBvPW5ldyBuKHQpO3JldHVybiBvLnVwZGF0ZShlLHIsaSxhKSxvfXZhciBvPXQoIi4vbGliL2NyZWF0ZS11bmlmb3JtcyIpLHM9dCgiLi9saWIvY3JlYXRlLWF0dHJpYnV0ZXMiKSxsPXQoIi4vbGliL3JlZmxlY3QiKSx1PXQoIi4vbGliL3NoYWRlci1jYWNoZSIpLGM9dCgiLi9saWIvcnVudGltZS1yZWZsZWN0IiksaD10KCIuL2xpYi9HTEVycm9yIiksZj1uLnByb3RvdHlwZTtmLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnByb2dyYW18fHRoaXMuX3JlbGluaygpLHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9mcmVmJiZ0aGlzLl9mcmVmLmRpc3Bvc2UoKSx0aGlzLl92cmVmJiZ0aGlzLl92cmVmLmRpc3Bvc2UoKSx0aGlzLmF0dHJpYnV0ZXM9dGhpcy50eXBlcz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLl9yZWxpbms9dGhpcy5fZnJlZj10aGlzLl92cmVmPW51bGx9LGYudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEoKXtkLnByb2dyYW09dS5wcm9ncmFtKHAsZC5fdnJlZixkLl9mcmVmLHgsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpRVt0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihkLnByb2dyYW0sclt0XS5uYW1lKX1pZighZXx8MT09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBmPXQ7dD1mLnZlcnRleCxlPWYuZnJhZ21lbnQscj1mLnVuaWZvcm1zLG49Zi5hdHRyaWJ1dGVzfXZhciBkPXRoaXMscD1kLmdsLG09ZC5fdnJlZjtkLl92cmVmPXUuc2hhZGVyKHAscC5WRVJURVhfU0hBREVSLHQpLG0mJm0uZGlzcG9zZSgpLGQudmVydFNoYWRlcj1kLl92cmVmLnNoYWRlcjt2YXIgdj10aGlzLl9mcmVmO2lmKGQuX2ZyZWY9dS5zaGFkZXIocCxwLkZSQUdNRU5UX1NIQURFUixlKSx2JiZ2LmRpc3Bvc2UoKSxkLmZyYWdTaGFkZXI9ZC5fZnJlZi5zaGFkZXIsIXJ8fCFuKXt2YXIgZz1wLmNyZWF0ZVByb2dyYW0oKTtpZihwLmF0dGFjaFNoYWRlcihnLGQuZnJhZ1NoYWRlcikscC5hdHRhY2hTaGFkZXIoZyxkLnZlcnRTaGFkZXIpLHAubGlua1Byb2dyYW0oZyksIXAuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLHAuTElOS19TVEFUVVMpKXt2YXIgeT1wLmdldFByb2dyYW1JbmZvTG9nKGcpO3Rocm93IG5ldyBoKHksIkVycm9yIGxpbmtpbmcgcHJvZ3JhbToiK3kpfXI9cnx8Yy51bmlmb3JtcyhwLGcpLG49bnx8Yy5hdHRyaWJ1dGVzKHAsZykscC5kZWxldGVQcm9ncmFtKGcpfW49bi5zbGljZSgpLG4uc29ydChpKTtmb3IodmFyIGI9W10seD1bXSxfPVtdLHc9MDt3PG4ubGVuZ3RoOysrdyl7dmFyIE09blt3XTtpZihNLnR5cGUuaW5kZXhPZigibWF0Iik+PTApe2Zvcih2YXIgaz0wfE0udHlwZS5jaGFyQXQoTS50eXBlLmxlbmd0aC0xKSxBPW5ldyBBcnJheShrKSxUPTA7VDxrOysrVClBW1RdPV8ubGVuZ3RoLHgucHVzaChNLm5hbWUrIlsiK1QrIl0iKSwibnVtYmVyIj09dHlwZW9mIE0ubG9jYXRpb24/Xy5wdXNoKE0ubG9jYXRpb24rVCk6QXJyYXkuaXNBcnJheShNLmxvY2F0aW9uKSYmTS5sb2NhdGlvbi5sZW5ndGg9PT1rJiYibnVtYmVyIj09dHlwZW9mIE0ubG9jYXRpb25bVF0/Xy5wdXNoKDB8TS5sb2NhdGlvbltUXSk6Xy5wdXNoKC0xKTtiLnB1c2goe25hbWU6TS5uYW1lLHR5cGU6TS50eXBlLGxvY2F0aW9uczpBfSl9ZWxzZSBiLnB1c2goe25hbWU6TS5uYW1lLHR5cGU6TS50eXBlLGxvY2F0aW9uczpbXy5sZW5ndGhdfSkseC5wdXNoKE0ubmFtZSksIm51bWJlciI9PXR5cGVvZiBNLmxvY2F0aW9uP18ucHVzaCgwfE0ubG9jYXRpb24pOl8ucHVzaCgtMSl9Zm9yKHZhciBTPTAsdz0wO3c8Xy5sZW5ndGg7Kyt3KWlmKF9bd108MCl7Zm9yKDtfLmluZGV4T2YoUyk+PTA7KVMrPTE7X1t3XT1TfXZhciBFPW5ldyBBcnJheShyLmxlbmd0aCk7YSgpLGQuX3JlbGluaz1hLGQudHlwZXM9e3VuaWZvcm1zOmwociksYXR0cmlidXRlczpsKG4pfSxkLmF0dHJpYnV0ZXM9cyhwLGQsYixfKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCwidW5pZm9ybXMiLG8ocCxkLHIsRSkpfSxlLmV4cG9ydHM9YX0seyIuL2xpYi9HTEVycm9yIjoyNTQsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjoyNTUsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MjU2LCIuL2xpYi9yZWZsZWN0IjoyNTcsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MjU4LCIuL2xpYi9zaGFkZXItY2FjaGUiOjI1OX1dLDI1NDpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTFdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyMTF9XSwyNTU6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjEyXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9HTEVycm9yIjoyNTQsZHVwOjIxMn1dLDI1NjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTNdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuL0dMRXJyb3IiOjI1NCwiLi9yZWZsZWN0IjoyNTcsZHVwOjIxM31dLDI1NzpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVsyMTRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyMTR9XSwyNTg6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMjE1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6MjE1fV0sMjU5OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzIxNl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vR0xFcnJvciI6MjU0LGR1cDoyMTYsImdsLWZvcm1hdC1jb21waWxlci1lcnJvciI6MTYzLCJ3ZWFrbWFwLXNoaW0iOjU2MH1dLDI2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucGxvdD10LHRoaXMuZW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy53aWR0aD1bMSwxLDEsMV0sdGhpcy5jb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmNlbnRlcj1bMS8wLDEvMF19ZnVuY3Rpb24gaSh0LGUpe3ZhciByPW5ldyBuKHQpO3JldHVybiByLnVwZGF0ZShlKSx0LmFkZE92ZXJsYXkocikscn1lLmV4cG9ydHM9aTt2YXIgYT1uLnByb3RvdHlwZTthLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuZW5hYmxlPSh0LmVuYWJsZXx8WyEwLCEwLCExLCExXSkuc2xpY2UoKSx0aGlzLndpZHRoPSh0LndpZHRofHxbMSwxLDEsMV0pLnNsaWNlKCksdGhpcy5jb2xvcj0odC5jb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSksdGhpcy5jZW50ZXI9KHQuY2VudGVyfHxbMS8wLDEvMF0pLnNsaWNlKCksdGhpcy5wbG90LnNldE92ZXJsYXlEaXJ0eSgpfSxhLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVuYWJsZSxlPXRoaXMud2lkdGgscj10aGlzLmNvbG9yLG49dGhpcy5jZW50ZXIsaT10aGlzLnBsb3QsYT1pLmxpbmUsbz1pLmRhdGFCb3gscz1pLnZpZXdCb3g7aWYoYS5iaW5kKCksb1swXTw9blswXSYmblswXTw9b1syXSYmb1sxXTw9blsxXSYmblsxXTw9b1szXSl7dmFyIGw9c1swXSsoblswXS1vWzBdKS8ob1syXS1vWzBdKSooc1syXS1zWzBdKSx1PXNbMV0rKG5bMV0tb1sxXSkvKG9bM10tb1sxXSkqKHNbM10tc1sxXSk7dFswXSYmYS5kcmF3TGluZShsLHUsc1swXSx1LGVbMF0sclswXSksdFsxXSYmYS5kcmF3TGluZShsLHUsbCxzWzFdLGVbMV0sclsxXSksdFsyXSYmYS5kcmF3TGluZShsLHUsc1syXSx1LGVbMl0sclsyXSksdFszXSYmYS5kcmF3TGluZShsLHUsbCxzWzNdLGVbM10sclszXSl9fSxhLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHt9XSwyNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIGNvbG9yO1xuYXR0cmlidXRlIGZsb2F0IHdlaWdodDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGNvb3JkaW5hdGVzWzNdO1xudW5pZm9ybSB2ZWM0IGNvbG9yc1szXTtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdmVydGV4UG9zaXRpb24gPSBtaXgoY29vcmRpbmF0ZXNbMF0sXG4gICAgbWl4KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sxXSwgMC41ICogKHBvc2l0aW9uICsgMS4wKSksIGFicyhwb3NpdGlvbikpO1xuXG4gIHZlYzQgY2xpcFBvcyA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHZlcnRleFBvc2l0aW9uLCAxLjApO1xuICB2ZWMyIGNsaXBPZmZzZXQgPSAocHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoY29sb3IsIDAuMCkpLnh5O1xuICB2ZWMyIGRlbHRhID0gd2VpZ2h0ICogY2xpcE9mZnNldCAqIHNjcmVlblNoYXBlO1xuICB2ZWMyIGxpbmVPZmZzZXQgPSBub3JtYWxpemUodmVjMihkZWx0YS55LCAtZGVsdGEueCkpIC8gc2NyZWVuU2hhcGU7XG5cbiAgZ2xfUG9zaXRpb24gICA9IHZlYzQoY2xpcFBvcy54eSArIGNsaXBQb3MudyAqIDAuNSAqIGxpbmVXaWR0aCAqIGxpbmVPZmZzZXQsIGNsaXBQb3MueiwgY2xpcFBvcy53KTtcbiAgZnJhZ0NvbG9yICAgICA9IGNvbG9yLnggKiBjb2xvcnNbMF0gKyBjb2xvci55ICogY29sb3JzWzFdICsgY29sb3IueiAqIGNvbG9yc1syXTtcbn1cbiIsInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59IixudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzMifSx7bmFtZToid2VpZ2h0Iix0eXBlOiJmbG9hdCJ9XSl9fSx7ImdsLXNoYWRlciI6MjUzfV0sMjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5nbD10LHRoaXMuYnVmZmVyPWUsdGhpcy52YW89cix0aGlzLnNoYWRlcj1uLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbLTFlMywtMWUzLC0xZTNdLFsxZTMsMWUzLDFlM11dLHRoaXMucG9zaXRpb249WzAsMCwwXSx0aGlzLmxpbmVXaWR0aD1bMiwyLDJdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5lbmFibGVkPVshMCwhMCwhMF0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmF4ZXM9bnVsbH1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUscixuLGEsbyl7dmFyIHM9W3QsZSxyLDAsMCwwLDFdO3NbbiszXT0xLHNbbl09YSxpLnB1c2guYXBwbHkoaSxzKSxzWzZdPS0xLGkucHVzaC5hcHBseShpLHMpLHNbbl09byxpLnB1c2guYXBwbHkoaSxzKSxpLnB1c2guYXBwbHkoaSxzKSxzWzZdPTEsaS5wdXNoLmFwcGx5KGkscyksc1tuXT1hLGkucHVzaC5hcHBseShpLHMpfXZhciBpPVtdO3IoMCwwLDAsMCwwLDEpLHIoMCwwLDAsMSwwLDEpLHIoMCwwLDAsMiwwLDEpLHIoMSwwLDAsMSwtMSwxKSxyKDEsMCwwLDIsLTEsMSkscigwLDEsMCwwLC0xLDEpLHIoMCwxLDAsMiwtMSwxKSxyKDAsMCwxLDAsLTEsMSkscigwLDAsMSwxLC0xLDEpO3ZhciBsPWEodCxpKSx1PW8odCxbe3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MyxvZmZzZXQ6MTIsc3RyaWRlOjI4fSx7dHlwZTp0LkZMT0FULGJ1ZmZlcjpsLHNpemU6MSxvZmZzZXQ6MjQsc3RyaWRlOjI4fV0pLGM9cyh0KTtjLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxjLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MSxjLmF0dHJpYnV0ZXMud2VpZ2h0LmxvY2F0aW9uPTI7dmFyIGg9bmV3IG4odCxsLHUsYyk7cmV0dXJuIGgudXBkYXRlKGUpLGh9dmFyIGE9dCgiZ2wtYnVmZmVyIiksbz10KCJnbC12YW8iKSxzPXQoIi4vc2hhZGVycy9pbmRleCIpO2UuZXhwb3J0cz1pO3ZhciBsPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSx1PW4ucHJvdG90eXBlLGM9WzAsMCwwXSxoPVswLDAsMF0sZj1bMCwwXTt1LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdS5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSx1LmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxsLG89dC52aWV3fHxsLHM9dC5wcm9qZWN0aW9ufHxsO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciB1PWMsZD1oLHA9MDtwPDM7KytwKWkmJmlbcF08MD8odVtwXT10aGlzLmJvdW5kc1swXVtwXSxkW3BdPXRoaXMuYm91bmRzWzFdW3BdKToodVtwXT10aGlzLmJvdW5kc1sxXVtwXSxkW3BdPXRoaXMuYm91bmRzWzBdW3BdKTtmWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9byxuLnVuaWZvcm1zLnByb2plY3Rpb249cyxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLHUsZF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1mO2Zvcih2YXIgcD0wO3A8MzsrK3Apbi51bmlmb3Jtcy5saW5lV2lkdGg9dGhpcy5saW5lV2lkdGhbcF0qdGhpcy5waXhlbFJhdGlvLHRoaXMuZW5hYmxlZFtwXSYmKHIuZHJhdyhlLlRSSUFOR0xFUyw2LDYqcCksdGhpcy5kcmF3U2lkZXNbcF0mJnIuZHJhdyhlLlRSSUFOR0xFUywxMiwxOCsxMipwKSk7ci51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dCYmKCJib3VuZHMiaW4gdCYmKHRoaXMuYm91bmRzPXQuYm91bmRzKSwicG9zaXRpb24iaW4gdCYmKHRoaXMucG9zaXRpb249dC5wb3NpdGlvbiksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJjb2xvcnMiaW4gdCYmKHRoaXMuY29sb3JzPXQuY29sb3JzKSwiZW5hYmxlZCJpbiB0JiYodGhpcy5lbmFibGVkPXQuZW5hYmxlZCksImRyYXdTaWRlcyJpbiB0JiYodGhpcy5kcmF3U2lkZXM9dC5kcmF3U2lkZXMpKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MjYxLCJnbC1idWZmZXIiOjE1NCwiZ2wtdmFvIjoyNjl9XSwyNjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbC1zaGFkZXIiKSxpPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHV2O1xuYXR0cmlidXRlIHZlYzMgZjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IHZlYzModXYuencsIGYueCk7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNCh3b3JsZENvb3JkaW5hdGUsIDEuMCk7XG4gIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAga2lsbCA9IGYueTtcbiAgdmFsdWUgPSBmLno7XG4gIHBsYW5lQ29vcmRpbmF0ZSA9IHV2Lnh5O1xuXG4gIHZDb2xvciA9IHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGV5ZURpcmVjdGlvbiAgID0gZXllUG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgc3VyZmFjZU5vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLDApICogaW52ZXJzZU1vZGVsKS54eXopO1xufVxuIixhPSJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uXzJfMChmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cblxuXG5mbG9hdCBiZWNrbWFublNwZWN1bGFyXzFfMShcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcykge1xuICByZXR1cm4gYmVja21hbm5EaXN0cmlidXRpb25fMl8wKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cblxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdmVydGV4Q29sb3I7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChraWxsID4gMC4wIHx8XG4gICAgYW55KGxlc3NUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1swXSkpIHx8IGFueShncmVhdGVyVGhhbih3b3JsZENvb3JkaW5hdGUsIGNsaXBCb3VuZHNbMV0pKSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cblxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtYXgoYmVja21hbm5TcGVjdWxhcl8xXzEoTCwgViwgTiwgcm91Z2huZXNzKSwgMC4pO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICAvL2RlY2lkZSBob3cgdG8gaW50ZXJwb2xhdGUgY29sb3IgXHUyMDE0IGluIHZlcnRleCBvciBpbiBmcmFnbWVudFxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IHN0ZXAodmVydGV4Q29sb3IsIC41KSAqIHRleHR1cmUyRChjb2xvcm1hcCwgdmVjMih2YWx1ZSwgdmFsdWUpKSArIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcblxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XG59XG4iLG89InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgZjtcblxudW5pZm9ybSBtYXQzIHBlcm11dGF0aW9uO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBoZWlnaHQsIHpPZmZzZXQ7XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgZGF0YUNvb3JkaW5hdGUgPSBwZXJtdXRhdGlvbiAqIHZlYzModXYueHksIGhlaWdodCk7XG4gIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsICogdmVjNChkYXRhQ29vcmRpbmF0ZSwgMS4wKTtcblxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uLnogPSBjbGlwUG9zaXRpb24ueiArIHpPZmZzZXQ7XG5cbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIHZhbHVlID0gZjtcbiAga2lsbCA9IC0xLjA7XG4gIHdvcmxkQ29vcmRpbmF0ZSA9IGRhdGFDb29yZGluYXRlO1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9Eb24ndCBkbyBsaWdodGluZyBmb3IgY29udG91cnNcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xuICBsaWdodERpcmVjdGlvbiAgPSB2ZWMzKDAsMCwxKTtcbn1cbiIscz0icHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzIgc2hhcGU7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIGZsb2F0IHZhbHVlLCBraWxsO1xudmFyeWluZyB2ZWMzIHdvcmxkQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMiBwbGFuZUNvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzMgc3VyZmFjZU5vcm1hbDtcblxudmVjMiBzcGxpdEZsb2F0KGZsb2F0IHYpIHtcbiAgZmxvYXQgdmggPSAyNTUuMCAqIHY7XG4gIGZsb2F0IHVwcGVyID0gZmxvb3IodmgpO1xuICBmbG9hdCBsb3dlciA9IGZyYWN0KHZoKTtcbiAgcmV0dXJuIHZlYzIodXBwZXIgLyAyNTUuMCwgZmxvb3IobG93ZXIgKiAxNi4wKSAvIDE2LjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGlmKGtpbGwgPiAwLjAgfHxcbiAgICBhbnkobGVzc1RoYW4od29ybGRDb29yZGluYXRlLCBjbGlwQm91bmRzWzBdKSkgfHwgYW55KGdyZWF0ZXJUaGFuKHdvcmxkQ29vcmRpbmF0ZSwgY2xpcEJvdW5kc1sxXSkpKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xuICB2ZWMyIHV5ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueSAvIHNoYXBlLnkpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcbn1cbiI7ci5jcmVhdGVTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGksYSxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LGkscyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249MixlfSxyLmNyZWF0ZUNvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LG8sYSxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9LHIuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXI9ZnVuY3Rpb24odCl7dmFyIGU9bih0LG8scyxudWxsLFt7bmFtZToidXYiLHR5cGU6InZlYzQifSx7bmFtZToiZiIsdHlwZToiZmxvYXQifV0pO3JldHVybiBlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuZi5sb2NhdGlvbj0xLGV9fSx7ImdsLXNoYWRlciI6MjUzfV0sMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLnBvc2l0aW9uPXQsdGhpcy5pbmRleD1lLHRoaXMudXY9cix0aGlzLmxldmVsPW4sdGhpcy5kYXRhQ29vcmRpbmF0ZT1pfWZ1bmN0aW9uIGkodCl7dmFyIGU9eChbeSh7Y29sb3JtYXA6dCxuc2hhZGVzOlIsZm9ybWF0OiJyZ2JhIn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0WzFdLHRbMl0sMjU1KnRbM11dfSldKTtyZXR1cm4gYi5kaXZzZXEoZSwyNTUpLGV9ZnVuY3Rpb24gYSh0LGUscixpLGEsbyxzLGwsdSxjLGgsZixkLHApe3RoaXMuZ2w9dCx0aGlzLnNoYXBlPWUsdGhpcy5ib3VuZHM9cix0aGlzLmludGVuc2l0eUJvdW5kcz1bXSx0aGlzLl9zaGFkZXI9aSx0aGlzLl9waWNrU2hhZGVyPWEsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlcj1vLHRoaXMuX3Zhbz1zLHRoaXMuX2NvbG9yTWFwPWwsdGhpcy5fY29udG91clNoYWRlcj11LHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyPWMsdGhpcy5fY29udG91ckJ1ZmZlcj1oLHRoaXMuX2NvbnRvdXJWQU89Zix0aGlzLl9jb250b3VyT2Zmc2V0cz1bW10sW10sW11dLHRoaXMuX2NvbnRvdXJDb3VudHM9W1tdLFtdLFtdXSx0aGlzLl92ZXJ0ZXhDb3VudD0wLHRoaXMuX3BpY2tSZXN1bHQ9bmV3IG4oWzAsMCwwXSxbMCwwXSxbMCwwXSxbMCwwLDBdLFswLDAsMF0pLHRoaXMuX2R5bmFtaWNCdWZmZXI9ZCx0aGlzLl9keW5hbWljVkFPPXAsdGhpcy5fZHluYW1pY09mZnNldHM9WzAsMCwwXSx0aGlzLl9keW5hbWljQ291bnRzPVswLDAsMF0sdGhpcy5jb250b3VyV2lkdGg9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1sxXSxbMV0sWzFdXSx0aGlzLmNvbnRvdXJUaW50PVswLDAsMF0sdGhpcy5jb250b3VyQ29sb3I9W1suNSwuNSwuNSwxXSxbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSx0aGlzLnNob3dDb250b3VyPSEwLHRoaXMuc2hvd1N1cmZhY2U9ITAsdGhpcy5lbmFibGVIaWdobGlnaHQ9WyEwLCEwLCEwXSx0aGlzLmhpZ2hsaWdodENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5oaWdobGlnaHRUaW50PVsxLDEsMV0sdGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdLHRoaXMuZW5hYmxlRHluYW1pYz1bITAsITAsITBdLHRoaXMuZHluYW1pY0xldmVsPVtOYU4sTmFOLE5hTl0sdGhpcy5keW5hbWljQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmR5bmFtaWNUaW50PVsxLDEsMV0sdGhpcy5keW5hbWljV2lkdGg9WzEsMSwxXSx0aGlzLmF4ZXNCb3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5zdXJmYWNlUHJvamVjdD1bITEsITEsITFdLHRoaXMuY29udG91clByb2plY3Q9W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSx0aGlzLmNvbG9yQm91bmRzPVshMSwhMV0sdGhpcy5fZmllbGQ9W18oZy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksXyhnLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKSxfKGcubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pXSx0aGlzLnBpY2tJZD0xLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnNuYXBUb0RhdGE9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy5saWdodFBvc2l0aW9uPVsxMCwxZTQsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLnZlcnRleENvbG9yPTAsdGhpcy5kaXJ0eT0hMH1mdW5jdGlvbiBvKHQsZSl7dmFyIHIsbixpLGE9ZS5heGVzJiZlLmF4ZXMubGFzdEN1YmVQcm9wcy5heGlzfHxqLG89ZS5zaG93U3VyZmFjZSxzPWUuc2hvd0NvbnRvdXI7Zm9yKHI9MDtyPDM7KytyKWZvcihvPW98fGUuc3VyZmFjZVByb2plY3Rbcl0sbj0wO248MzsrK24pcz1zfHxlLmNvbnRvdXJQcm9qZWN0W3JdW25dO2ZvcihyPTA7cjwzOysrcil7dmFyIGw9Ti5wcm9qZWN0aW9uc1tyXTtmb3Iobj0wO248MTY7KytuKWxbbl09MDtmb3Iobj0wO248NDsrK24pbFs1Km5dPTE7bFs1KnJdPTAsbFsxMityXT1lLmF4ZXNCb3VuZHNbKyhhW3JdPjApXVtyXSxNKGwsdC5tb2RlbCxsKTt2YXIgdT1OLmNsaXBCb3VuZHNbcl07Zm9yKGk9MDtpPDI7KytpKWZvcihuPTA7bjwzOysrbil1W2ldW25dPXQuY2xpcEJvdW5kc1tpXVtuXTt1WzBdW3JdPS0xZTgsdVsxXVtyXT0xZTh9cmV0dXJuIE4uc2hvd1N1cmZhY2U9byxOLnNob3dDb250b3VyPXMsTn1mdW5jdGlvbiBzKHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1CO24ubW9kZWw9dC5tb2RlbHx8RCxuLnZpZXc9dC52aWV3fHxELG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fEQsbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ayhuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0scz0wO3M8MzsrK3MpYVtzXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bc10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249VixuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIGw9VTtmb3IoTShsLG4udmlldyxuLm1vZGVsKSxNKGwsbi5wcm9qZWN0aW9uLGwpLGsobCxsKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPWxbMTIraV0vbFsxNV07dmFyIHU9bFsxNV07Zm9yKGk9MDtpPDM7KytpKXUrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpsWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPWxbMTIraV07Zm9yKHM9MDtzPDM7KytzKWMrPWxbNCpzK2ldKnRoaXMubGlnaHRQb3NpdGlvbltzXTtuLmxpZ2h0UG9zaXRpb25baV09Yy91fXZhciBoPW8obix0aGlzKTtpZihoLnNob3dTdXJmYWNlJiZlPT09dGhpcy5vcGFjaXR5PDEpe2Zvcih0aGlzLl9zaGFkZXIuYmluZCgpLHRoaXMuX3NoYWRlci51bmlmb3Jtcz1uLHRoaXMuX3Zhby5iaW5kKCksdGhpcy5zaG93U3VyZmFjZSYmdGhpcy5fdmVydGV4Q291bnQmJnRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSxpPTA7aTwzOysraSl0aGlzLnN1cmZhY2VQcm9qZWN0W2ldJiZ0aGlzLnZlcnRleENvdW50JiYodGhpcy5fc2hhZGVyLnVuaWZvcm1zLm1vZGVsPWgucHJvamVjdGlvbnNbaV0sdGhpcy5fc2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9aC5jbGlwQm91bmRzW2ldLHRoaXMuX3Zhby5kcmF3KHIuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKGguc2hvd0NvbnRvdXImJiFlKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGQ9dGhpcy5fY29udG91clZBTztmb3IoZC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249T1tpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSkscz0wO3M8dGhpcy5jb250b3VyTGV2ZWxzW2ldLmxlbmd0aDsrK3MpdGhpcy5fY29udG91ckNvdW50c1tpXVtzXSYmKHM9PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09cyYmcy0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2ldW3NdLGQuZHJhdyhyLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbaV1bc10sdGhpcy5fY29udG91ck9mZnNldHNbaV1bc10pKTtmb3IoaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMubW9kZWw9aC5wcm9qZWN0aW9uc1tpXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9aC5jbGlwQm91bmRzW2ldLHM9MDtzPDM7KytzKWlmKHRoaXMuY29udG91clByb2plY3RbaV1bc10pe2YudW5pZm9ybXMucGVybXV0YXRpb249T1tzXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtzXSk7Zm9yKHZhciBwPTA7cDx0aGlzLmNvbnRvdXJMZXZlbHNbc10ubGVuZ3RoOysrcClwPT09dGhpcy5oaWdobGlnaHRMZXZlbFtzXT8oZi51bmlmb3Jtcy5jb250b3VyQ29sb3I9dGhpcy5oaWdobGlnaHRDb2xvcltzXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuaGlnaGxpZ2h0VGludFtzXSk6MCE9PXAmJnAtMSE9PXRoaXMuaGlnaGxpZ2h0TGV2ZWxbc118fChmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmNvbnRvdXJDb2xvcltzXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuY29udG91clRpbnRbc10pLGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tzXVtwXSxkLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW3NdW3BdLHRoaXMuX2NvbnRvdXJPZmZzZXRzW3NdW3BdKX1mb3IoZD10aGlzLl9keW5hbWljVkFPLGQuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPU9baV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0pLGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuZHluYW1pY0NvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5keW5hbWljVGludFtpXSxmLnVuaWZvcm1zLmhlaWdodD10aGlzLmR5bmFtaWNMZXZlbFtpXSxkLmRyYXcoci5MSU5FUyx0aGlzLl9keW5hbWljQ291bnRzW2ldLHRoaXMuX2R5bmFtaWNPZmZzZXRzW2ldKSxzPTA7czwzOysrcyl0aGlzLmNvbnRvdXJQcm9qZWN0W3NdW2ldJiYoZi51bmlmb3Jtcy5tb2RlbD1oLnByb2plY3Rpb25zW3NdLGYudW5pZm9ybXMuY2xpcEJvdW5kcz1oLmNsaXBCb3VuZHNbc10sZC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSkpO2QudW5iaW5kKCl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1lLnNoYXBlLnNsaWNlKCksbj10LnNoYXBlLnNsaWNlKCk7Yi5hc3NpZ24odC5sbygxLDEpLmhpKHJbMF0sclsxXSksZSksYi5hc3NpZ24odC5sbygxKS5oaShyWzBdLDEpLGUuaGkoclswXSwxKSksYi5hc3NpZ24odC5sbygxLG5bMV0tMSkuaGkoclswXSwxKSxlLmxvKDAsclsxXS0xKS5oaShyWzBdLDEpKSxiLmFzc2lnbih0LmxvKDAsMSkuaGkoMSxyWzFdKSxlLmhpKDEpKSxiLmFzc2lnbih0LmxvKG5bMF0tMSwxKS5oaSgxLHJbMV0pLGUubG8oclswXS0xKSksdC5zZXQoMCwwLGUuZ2V0KDAsMCkpLHQuc2V0KDAsblsxXS0xLGUuZ2V0KDAsclsxXS0xKSksdC5zZXQoblswXS0xLDAsZS5nZXQoclswXS0xLDApKSx0LnNldChuWzBdLTEsblsxXS0xLGUuZ2V0KHJbMF0tMSxyWzFdLTEpKX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIGModCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIGgodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bYyh0WzBdKSxjKHRbMV0pLGModFsyXSldO3ZhciBlPWModCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19ZnVuY3Rpb24gZih0KXt2YXIgZT10LmdsLHI9RShlKSxuPUMoZSksaT1MKGUpLG89eihlKSxzPXAoZSksbD1tKGUsW3tidWZmZXI6cyxzaXplOjQsc3RyaWRlOkksb2Zmc2V0OjB9LHtidWZmZXI6cyxzaXplOjMsc3RyaWRlOkksb2Zmc2V0OjE2fSx7YnVmZmVyOnMsc2l6ZTozLHN0cmlkZTpJLG9mZnNldDoyOH1dKSx1PXAoZSksYz1tKGUsW3tidWZmZXI6dSxzaXplOjQsc3RyaWRlOjIwLG9mZnNldDowfSx7YnVmZmVyOnUsc2l6ZToxLHN0cmlkZToyMCxvZmZzZXQ6MTZ9XSksaD1wKGUpLGY9bShlLFt7YnVmZmVyOmgsc2l6ZToyLHR5cGU6ZS5GTE9BVH1dKSxkPXYoZSwxLFIsZS5SR0JBLGUuVU5TSUdORURfQllURSk7ZC5taW5GaWx0ZXI9ZS5MSU5FQVIsZC5tYWdGaWx0ZXI9ZS5MSU5FQVI7dmFyIGc9bmV3IGEoZSxbMCwwXSxbWzAsMCwwXSxbMCwwLDBdXSxyLG4scyxsLGQsaSxvLHUsYyxoLGYpLHk9e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIGIgaW4gdCl5W2JdPXRbYl07cmV0dXJuIHkuY29sb3JtYXA9eS5jb2xvcm1hcHx8ImpldCIsZy51cGRhdGUoeSksZ31lLmV4cG9ydHM9Zjt2YXIgZD10KCJiaXQtdHdpZGRsZSIpLHA9dCgiZ2wtYnVmZmVyIiksbT10KCJnbC12YW8iKSx2PXQoImdsLXRleHR1cmUyZCIpLGc9dCgidHlwZWRhcnJheS1wb29sIikseT10KCJjb2xvcm1hcCIpLGI9dCgibmRhcnJheS1vcHMiKSx4PXQoIm5kYXJyYXktcGFjayIpLF89dCgibmRhcnJheSIpLHc9dCgic3VyZmFjZS1uZXRzIiksTT10KCJnbC1tYXQ0L211bHRpcGx5Iiksaz10KCJnbC1tYXQ0L2ludmVydCIpLEE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxUPXQoIm5kYXJyYXktZ3JhZGllbnQiKSxTPXQoIi4vbGliL3NoYWRlcnMiKSxFPVMuY3JlYXRlU2hhZGVyLEw9Uy5jcmVhdGVDb250b3VyU2hhZGVyLEM9Uy5jcmVhdGVQaWNrU2hhZGVyLHo9Uy5jcmVhdGVQaWNrQ29udG91clNoYWRlcixJPTQwLEQ9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLFA9W1swLDBdLFswLDFdLFsxLDBdLFsxLDFdLFsxLDBdLFswLDFdXSxPPVtbMCwwLDAsMCwwLDAsMCwwLDBdLFswLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXV07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzOysrdCl7dmFyIGU9T1t0XSxyPSh0KzEpJTMsbj0odCsyKSUzO2VbciswXT0xLGVbbiszXT0xLGVbdCs2XT0xfX0oKTt2YXIgUj0yNTYsRj1hLnByb3RvdHlwZTtGLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF9LApGLmlzT3BhcXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcGFjaXR5Pj0xKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5fY29udG91ckNvdW50c1t0XS5sZW5ndGg+MHx8dGhpcy5fZHluYW1pY0NvdW50c1t0XT4wKXJldHVybiEwO3JldHVybiExfSxGLnBpY2tTbG90cz0xLEYuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH07dmFyIGo9WzAsMCwwXSxOPXtzaG93U3VyZmFjZTohMSxzaG93Q29udG91cjohMSxwcm9qZWN0aW9uczpbRC5zbGljZSgpLEQuc2xpY2UoKSxELnNsaWNlKCldLGNsaXBCb3VuZHM6W1tbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dLFtbMCwwLDBdLFswLDAsMF1dXX0sQj17bW9kZWw6RCx2aWV3OkQscHJvamVjdGlvbjpELGludmVyc2VNb2RlbDpELnNsaWNlKCksbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSxjb2xvck1hcDowLGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsY29udG91clRpbnQ6MCxjb250b3VyQ29sb3I6WzAsMCwwLDFdLHBlcm11dGF0aW9uOlsxLDAsMCwwLDEsMCwwLDAsMV0sek9mZnNldDotMWUtNCxrYW1iaWVudDoxLGtkaWZmdXNlOjEsa3NwZWN1bGFyOjEsbGlnaHRQb3NpdGlvbjpbMWUzLDFlMywxZTNdLGV5ZVBvc2l0aW9uOlswLDAsMF0scm91Z2huZXNzOjEsZnJlc25lbDoxLG9wYWNpdHk6MSx2ZXJ0ZXhDb2xvcjowfSxVPUQuc2xpY2UoKSxWPVsxLDAsMCwwLDEsMCwwLDAsMV07Ri5kcmF3PWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwodGhpcyx0LCExKX0sRi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbCh0aGlzLHQsITApfTt2YXIgSD17bW9kZWw6RCx2aWV3OkQscHJvamVjdGlvbjpELGludmVyc2VNb2RlbDpELGNsaXBCb3VuZHM6W1swLDAsMF0sWzAsMCwwXV0saGVpZ2h0OjAsc2hhcGU6WzAsMF0scGlja0lkOjAsbG93ZXJCb3VuZDpbMCwwLDBdLHVwcGVyQm91bmQ6WzAsMCwwXSx6T2Zmc2V0OjAscGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSxsaWdodFBvc2l0aW9uOlswLDAsMF0sZXllUG9zaXRpb246WzAsMCwwXX07Ri5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1IO3IubW9kZWw9dC5tb2RlbHx8RCxyLnZpZXc9dC52aWV3fHxELHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fEQsci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLnBlcm11dGF0aW9uPVY7Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIHM9byhyLHRoaXMpO2lmKHMuc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9cy5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9cy5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKHMuc2hvd0NvbnRvdXIpe3ZhciBsPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO2wuYmluZCgpLGwudW5pZm9ybXM9cjt2YXIgdT10aGlzLl9jb250b3VyVkFPO2Zvcih1LmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0pLGwudW5pZm9ybXMucGVybXV0YXRpb249T1thXSxuPTA7bjx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrbil0aGlzLl9jb250b3VyQ291bnRzW2FdW25dJiYobC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW25dLHUuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bbl0sdGhpcy5fY29udG91ck9mZnNldHNbYV1bbl0pKTtmb3Iobj0wO248MzsrK24pZm9yKGwudW5pZm9ybXMubW9kZWw9cy5wcm9qZWN0aW9uc1tuXSxsLnVuaWZvcm1zLmNsaXBCb3VuZHM9cy5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlmKHRoaXMuY29udG91clByb2plY3Rbbl1bYV0pe2wudW5pZm9ybXMucGVybXV0YXRpb249T1thXSxlLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFthXSk7Zm9yKHZhciBjPTA7Yzx0aGlzLmNvbnRvdXJMZXZlbHNbYV0ubGVuZ3RoOysrYyl0aGlzLl9jb250b3VyQ291bnRzW2FdW2NdJiYobC51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5jb250b3VyTGV2ZWxzW2FdW2NdLHUuZHJhdyhlLkxJTkVTLHRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10sdGhpcy5fY29udG91ck9mZnNldHNbYV1bY10pKX11LnVuYmluZCgpfX0sRi5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyPXRoaXMuX3BpY2tSZXN1bHQsbj1lWzBdKih0LnZhbHVlWzBdKyh0LnZhbHVlWzJdPj40KS8xNikvMjU1LGk9TWF0aC5mbG9vcihuKSxhPW4taSxvPWVbMV0qKHQudmFsdWVbMV0rKDE1JnQudmFsdWVbMl0pLzE2KS8yNTUscz1NYXRoLmZsb29yKG8pLGw9by1zO2krPTEscys9MTt2YXIgdT1yLnBvc2l0aW9uO3VbMF09dVsxXT11WzJdPTA7Zm9yKHZhciBjPTA7YzwyOysrYylmb3IodmFyIGg9Yz9hOjEtYSxmPTA7ZjwyOysrZilmb3IodmFyIGQ9Zj9sOjEtbCxwPWkrYyxtPXMrZix2PWgqZCxnPTA7ZzwzOysrZyl1W2ddKz10aGlzLl9maWVsZFtnXS5nZXQocCxtKSp2O2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLGI9MDtiPDM7KytiKWlmKHlbYl09QS5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbYl0sdVtiXSkseVtiXTwwKXRoaXMuY29udG91ckxldmVsc1tiXS5sZW5ndGg+MCYmKHlbYl09MCk7ZWxzZSBpZih5W2JdPHRoaXMuY29udG91ckxldmVsc1tiXS5sZW5ndGgtMSl7dmFyIHg9dGhpcy5jb250b3VyTGV2ZWxzW2JdW3lbYl1dLF89dGhpcy5jb250b3VyTGV2ZWxzW2JdW3lbYl0rMV07TWF0aC5hYnMoeC11W2JdKT5NYXRoLmFicyhfLXVbYl0pJiYoeVtiXSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sZz0wO2c8MzsrK2cpci5kYXRhQ29vcmRpbmF0ZVtnXT10aGlzLl9maWVsZFtnXS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sRi51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fSx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPXUodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPXUodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PXUodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9aCh0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD11KHQuY29udG91clByb2plY3QsZnVuY3Rpb24odCl7cmV0dXJuIHUodCxCb29sZWFuKX0pKSwic3VyZmFjZVByb2plY3QiaW4gdCYmKHRoaXMuc3VyZmFjZVByb2plY3Q9dC5zdXJmYWNlUHJvamVjdCksImR5bmFtaWNDb2xvciJpbiB0JiYodGhpcy5keW5hbWljQ29sb3I9aCh0LmR5bmFtaWNDb2xvcikpLCJkeW5hbWljVGludCJpbiB0JiYodGhpcy5keW5hbWljVGludD11KHQuZHluYW1pY1RpbnQsTnVtYmVyKSksImR5bmFtaWNXaWR0aCJpbiB0JiYodGhpcy5keW5hbWljV2lkdGg9dSh0LmR5bmFtaWNXaWR0aCxOdW1iZXIpKSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCk7dmFyIGU9dC5maWVsZHx8dC5jb29yZHMmJnQuY29vcmRzWzJdfHxudWxsLHI9ITE7aWYoZXx8KGU9dGhpcy5fZmllbGRbMl0uc2hhcGVbMF18fHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzJdP3RoaXMuX2ZpZWxkWzJdLmxvKDEsMSkuaGkodGhpcy5fZmllbGRbMl0uc2hhcGVbMF0tMix0aGlzLl9maWVsZFsyXS5zaGFwZVsxXS0yKTp0aGlzLl9maWVsZFsyXS5oaSgwLDApKSwiZmllbGQiaW4gdHx8ImNvb3JkcyJpbiB0KXt2YXIgbj0oZS5zaGFwZVswXSsyKSooZS5zaGFwZVsxXSsyKTtuPnRoaXMuX2ZpZWxkWzJdLmRhdGEubGVuZ3RoJiYoZy5mcmVlRmxvYXQodGhpcy5fZmllbGRbMl0uZGF0YSksdGhpcy5fZmllbGRbMl0uZGF0YT1nLm1hbGxvY0Zsb2F0KGQubmV4dFBvdzIobikpKSx0aGlzLl9maWVsZFsyXT1fKHRoaXMuX2ZpZWxkWzJdLmRhdGEsW2Uuc2hhcGVbMF0rMixlLnNoYXBlWzFdKzJdKSxsKHRoaXMuX2ZpZWxkWzJdLGUpLHRoaXMuc2hhcGU9ZS5zaGFwZS5zbGljZSgpO2Zvcih2YXIgYT10aGlzLnNoYXBlLG89MDtvPDI7KytvKXRoaXMuX2ZpZWxkWzJdLnNpemU+dGhpcy5fZmllbGRbb10uZGF0YS5sZW5ndGgmJihnLmZyZWVGbG9hdCh0aGlzLl9maWVsZFtvXS5kYXRhKSx0aGlzLl9maWVsZFtvXS5kYXRhPWcubWFsbG9jRmxvYXQodGhpcy5fZmllbGRbMl0uc2l6ZSkpLHRoaXMuX2ZpZWxkW29dPV8odGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0pO2lmKHQuY29vcmRzKXt2YXIgcz10LmNvb3JkcztpZighQXJyYXkuaXNBcnJheShzKXx8MyE9PXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCBjb29yZGluYXRlcyBmb3IgeC95Iik7Zm9yKG89MDtvPDI7KytvKXt2YXIgYz1zW29dO2Zvcih5PTA7eTwyOysreSlpZihjLnNoYXBlW3ldIT09YVt5XSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGNvb3JkcyBoYXZlIGluY29ycmVjdCBzaGFwZSIpO2wodGhpcy5fZmllbGRbb10sYyl9fWVsc2UgaWYodC50aWNrcyl7dmFyIGY9dC50aWNrcztpZighQXJyYXkuaXNBcnJheShmKXx8MiE9PWYubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrcyIpO2ZvcihvPTA7bzwyOysrbyl7dmFyIHA9ZltvXTtpZigoQXJyYXkuaXNBcnJheShwKXx8cC5sZW5ndGgpJiYocD1fKHApKSxwLnNoYXBlWzBdIT09YVtvXSl0aHJvdyBuZXcgRXJyb3IoImdsLXN1cmZhY2U6IGludmFsaWQgdGljayBsZW5ndGgiKTt2YXIgbT1fKHAuZGF0YSxhKTttLnN0cmlkZVtvXT1wLnN0cmlkZVswXSxtLnN0cmlkZVsxXm9dPTAsbCh0aGlzLl9maWVsZFtvXSxtKX19ZWxzZXtmb3Iobz0wO288MjsrK28pe3ZhciB2PVswLDBdO3Zbb109MSx0aGlzLl9maWVsZFtvXT1fKHRoaXMuX2ZpZWxkW29dLmRhdGEsW2FbMF0rMixhWzFdKzJdLHYsMCl9dGhpcy5fZmllbGRbMF0uc2V0KDAsMCwwKTtmb3IodmFyIHk9MDt5PGFbMF07Kyt5KXRoaXMuX2ZpZWxkWzBdLnNldCh5KzEsMCx5KTtmb3IodGhpcy5fZmllbGRbMF0uc2V0KGFbMF0rMSwwLGFbMF0tMSksdGhpcy5fZmllbGRbMV0uc2V0KDAsMCwwKSx5PTA7eTxhWzFdOysreSl0aGlzLl9maWVsZFsxXS5zZXQoMCx5KzEseSk7dGhpcy5fZmllbGRbMV0uc2V0KDAsYVsxXSsxLGFbMV0tMSl9dmFyIGI9dGhpcy5fZmllbGQseD1fKGcubWFsbG9jRmxvYXQoMypiWzJdLnNpemUqMiksWzMsYVswXSsyLGFbMV0rMiwyXSk7Zm9yKG89MDtvPDM7KytvKVQoeC5waWNrKG8pLGJbb10sIm1pcnJvciIpO3ZhciBNPV8oZy5tYWxsb2NGbG9hdCgzKmJbMl0uc2l6ZSksW2FbMF0rMixhWzFdKzIsM10pO2ZvcihvPTA7bzxhWzBdKzI7KytvKWZvcih5PTA7eTxhWzFdKzI7Kyt5KXt2YXIgaz14LmdldCgwLG8seSwwKSxBPXguZ2V0KDAsbyx5LDEpLFM9eC5nZXQoMSxvLHksMCksRT14LmdldCgxLG8seSwxKSxMPXguZ2V0KDIsbyx5LDApLEM9eC5nZXQoMixvLHksMSksej1TKkMtRSpMLEk9TCpBLUMqayxEPWsqRS1BKlMsTz1NYXRoLnNxcnQoeip6K0kqSStEKkQpO088MWUtOD8oTz1NYXRoLm1heChNYXRoLmFicyh6KSxNYXRoLmFicyhJKSxNYXRoLmFicyhEKSksTzwxZS04PyhEPTEsST16PTAsTz0xKTpPPTEvTyk6Tz0xL01hdGguc3FydChPKSxNLnNldChvLHksMCx6Kk8pLE0uc2V0KG8seSwxLEkqTyksTS5zZXQobyx5LDIsRCpPKX1nLmZyZWUoeC5kYXRhKTt2YXIgUj1bMS8wLDEvMCwxLzBdLEY9Wy0xLzAsLTEvMCwtMS8wXSxqPTEvMCxOPS0xLzAsQj0oYVswXS0xKSooYVsxXS0xKSo2LFU9Zy5tYWxsb2NGbG9hdChkLm5leHRQb3cyKDEwKkIpKSxWPTAsSD0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKHk9MDt5PGFbMV0tMTsrK3kpe2Zvcih2YXIgcT0wO3E8MjsrK3EpZm9yKHZhciBHPTA7RzwyOysrRylmb3IodmFyIFk9MDtZPDM7KytZKXt2YXIgWD10aGlzLl9maWVsZFtZXS5nZXQoMStvK3EsMSt5K0cpO2lmKGlzTmFOKFgpfHwhaXNGaW5pdGUoWCkpY29udGludWUgdH1mb3IoWT0wO1k8NjsrK1kpe3ZhciBXPW8rUFtZXVswXSxaPXkrUFtZXVsxXSxKPXRoaXMuX2ZpZWxkWzBdLmdldChXKzEsWisxKSxLPXRoaXMuX2ZpZWxkWzFdLmdldChXKzEsWisxKTtYPXRoaXMuX2ZpZWxkWzJdLmdldChXKzEsWisxKTt2YXIgUT1YO3o9TS5nZXQoVysxLForMSwwKSxJPU0uZ2V0KFcrMSxaKzEsMSksRD1NLmdldChXKzEsWisxLDIpLHQuaW50ZW5zaXR5JiYoUT10LmludGVuc2l0eS5nZXQoVyxaKSksVVtWKytdPVcsVVtWKytdPVosVVtWKytdPUosVVtWKytdPUssVVtWKytdPVgsVVtWKytdPTAsVVtWKytdPVEsVVtWKytdPXosVVtWKytdPUksVVtWKytdPUQsUlswXT1NYXRoLm1pbihSWzBdLEopLFJbMV09TWF0aC5taW4oUlsxXSxLKSxSWzJdPU1hdGgubWluKFJbMl0sWCksaj1NYXRoLm1pbihqLFEpLEZbMF09TWF0aC5tYXgoRlswXSxKKSxGWzFdPU1hdGgubWF4KEZbMV0sSyksRlsyXT1NYXRoLm1heChGWzJdLFgpLE49TWF0aC5tYXgoTixRKSxIKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJihqPSt0LmludGVuc2l0eUJvdW5kc1swXSxOPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288VjtvKz0xMClVW29dPShVW29dLWopLyhOLWopO3RoaXMuX3ZlcnRleENvdW50PUgsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUoVS5zdWJhcnJheSgwLFYpKSxnLmZyZWVGbG9hdChVKSxnLmZyZWUoTS5kYXRhKSx0aGlzLmJvdW5kcz1bUixGXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT1qJiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PU58fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1baixOXX1pZigibGV2ZWxzImluIHQpe3ZhciAkPXQubGV2ZWxzO2ZvcigkPUFycmF5LmlzQXJyYXkoJFswXSk/JC5zbGljZSgpOltbXSxbXSwkXSxvPTA7bzwzOysrbykkW29dPSRbb10uc2xpY2UoKSwkLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSk7dDpmb3Iobz0wO288MzsrK28pe2lmKCRbb10ubGVuZ3RoIT09dGhpcy5jb250b3VyTGV2ZWxzW29dLmxlbmd0aCl7cj0hMDticmVha31mb3IoeT0wO3k8JFtvXS5sZW5ndGg7Kyt5KWlmKCRbb11beV0hPT10aGlzLmNvbnRvdXJMZXZlbHNbb11beV0pe3I9ITA7YnJlYWsgdH19dGhpcy5jb250b3VyTGV2ZWxzPSR9aWYocil7Yj10aGlzLl9maWVsZCxhPXRoaXMuc2hhcGU7Zm9yKHZhciB0dD1bXSxldD0wO2V0PDM7KytldCl7JD10aGlzLmNvbnRvdXJMZXZlbHNbZXRdO3ZhciBydD1bXSxudD1bXSxpdD1bMCwwLDBdO2ZvcihvPTA7bzwkLmxlbmd0aDsrK28pe3ZhciBhdD13KHRoaXMuX2ZpZWxkW2V0XSwkW29dKTtydC5wdXNoKHR0Lmxlbmd0aC81fDApLEg9MDt0OmZvcih5PTA7eTxhdC5jZWxscy5sZW5ndGg7Kyt5KXt2YXIgb3Q9YXQuY2VsbHNbeV07Zm9yKFk9MDtZPDI7KytZKXt2YXIgc3Q9YXQucG9zaXRpb25zW290W1ldXSxsdD1zdFswXSx1dD0wfE1hdGguZmxvb3IobHQpLGN0PWx0LXV0LGh0PXN0WzFdLGZ0PTB8TWF0aC5mbG9vcihodCksZHQ9aHQtZnQscHQ9ITE7ZTpmb3IodmFyIG10PTA7bXQ8MzsrK210KXtpdFttdF09MDt2YXIgdnQ9KGV0K210KzEpJTM7Zm9yKHE9MDtxPDI7KytxKXt2YXIgZ3Q9cT9jdDoxLWN0O2ZvcihXPTB8TWF0aC5taW4oTWF0aC5tYXgodXQrcSwwKSxhWzBdKSxHPTA7RzwyOysrRyl7dmFyIHl0PUc/ZHQ6MS1kdDtpZihaPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrRywwKSxhWzFdKSxYPW10PDI/dGhpcy5fZmllbGRbdnRdLmdldChXLFopOih0aGlzLmludGVuc2l0eS5nZXQoVyxaKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoWCl8fGlzTmFOKFgpKXtwdD0hMDticmVhayBlfXZhciBidD1ndCp5dDtpdFttdF0rPWJ0Klh9fX1pZihwdCl7aWYoWT4wKXtmb3IodmFyIHh0PTA7eHQ8NTsrK3h0KXR0LnBvcCgpO0gtPTF9Y29udGludWUgdH10dC5wdXNoKGl0WzBdLGl0WzFdLHN0WzBdLHN0WzFdLGl0WzJdKSxIKz0xfX1udC5wdXNoKEgpfXRoaXMuX2NvbnRvdXJPZmZzZXRzW2V0XT1ydCx0aGlzLl9jb250b3VyQ291bnRzW2V0XT1udH12YXIgX3Q9Zy5tYWxsb2NGbG9hdCh0dC5sZW5ndGgpO2ZvcihvPTA7bzx0dC5sZW5ndGg7KytvKV90W29dPXR0W29dO3RoaXMuX2NvbnRvdXJCdWZmZXIudXBkYXRlKF90KSxnLmZyZWVGbG9hdChfdCl9dC5jb2xvcm1hcCYmdGhpcy5fY29sb3JNYXAuc2V0UGl4ZWxzKGkodC5jb2xvcm1hcCkpfSxGLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl9zaGFkZXIuZGlzcG9zZSgpLHRoaXMuX3Zhby5kaXNwb3NlKCksdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29sb3JNYXAuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJWQU8uZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9keW5hbWljVkFPLmRpc3Bvc2UoKTtmb3IodmFyIHQ9MDt0PDM7Kyt0KWcuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW3RdLmRhdGEpfSxGLmhpZ2hsaWdodD1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuZHlhbmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHZvaWQodGhpcy5oaWdobGlnaHRMZXZlbD1bLTEsLTEsLTFdKTtmb3IodmFyIGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO3ZhciByO2lmKHI9dGhpcy5zbmFwVG9EYXRhP3QuZGF0YUNvb3JkaW5hdGU6dC5wb3NpdGlvbix0aGlzLmVuYWJsZUR5bmFtaWNbMF0mJnJbMF0hPT10aGlzLmR5bmFtaWNMZXZlbFswXXx8dGhpcy5lbmFibGVEeW5hbWljWzFdJiZyWzFdIT09dGhpcy5keW5hbWljTGV2ZWxbMV18fHRoaXMuZW5hYmxlRHluYW1pY1syXSYmclsyXSE9PXRoaXMuZHluYW1pY0xldmVsWzJdKXtmb3IodmFyIG49MCxpPXRoaXMuc2hhcGUsYT1nLm1hbGxvY0Zsb2F0KDEyKmlbMF0qaVsxXSksbz0wO288MzsrK28paWYodGhpcy5lbmFibGVEeW5hbWljW29dKXt0aGlzLmR5bmFtaWNMZXZlbFtvXT1yW29dO3ZhciBzPShvKzEpJTMsbD0obysyKSUzLHU9dGhpcy5fZmllbGRbb10sYz10aGlzLl9maWVsZFtzXSxoPXRoaXMuX2ZpZWxkW2xdLGY9KHRoaXMuaW50ZW5zaXR5LHcodSxyW29dKSksZD1mLmNlbGxzLHA9Zi5wb3NpdGlvbnM7Zm9yKHRoaXMuX2R5bmFtaWNPZmZzZXRzW29dPW4sZT0wO2U8ZC5sZW5ndGg7KytlKWZvcih2YXIgbT1kW2VdLHY9MDt2PDI7Kyt2KXt2YXIgeT1wW21bdl1dLGI9K3lbMF0seD0wfGIsXz0wfE1hdGgubWluKHgrMSxpWzBdKSxNPWIteCxrPTEtTSxBPSt5WzFdLFQ9MHxBLFM9MHxNYXRoLm1pbihUKzEsaVsxXSksRT1BLVQsTD0xLUUsQz1rKkwsej1rKkUsST1NKkwsRD1NKkUsUD1DKmMuZ2V0KHgsVCkreipjLmdldCh4LFMpK0kqYy5nZXQoXyxUKStEKmMuZ2V0KF8sUyksTz1DKmguZ2V0KHgsVCkreipoLmdldCh4LFMpK0kqaC5nZXQoXyxUKStEKmguZ2V0KF8sUyk7aWYoaXNOYU4oUCl8fGlzTmFOKE8pKXt2JiYobi09MSk7YnJlYWt9YVsyKm4rMF09UCxhWzIqbisxXT1PLG4rPTF9dGhpcy5fZHluYW1pY0NvdW50c1tvXT1uLXRoaXMuX2R5bmFtaWNPZmZzZXRzW29dfWVsc2UgdGhpcy5keW5hbWljTGV2ZWxbb109TmFOLHRoaXMuX2R5bmFtaWNDb3VudHNbb109MDt0aGlzLl9keW5hbWljQnVmZmVyLnVwZGF0ZShhLnN1YmFycmF5KDAsMipuKSksZy5mcmVlRmxvYXQoYSl9fX0seyIuL2xpYi9zaGFkZXJzIjoyNjMsImJpbmFyeS1zZWFyY2gtYm91bmRzIjo2NCwiYml0LXR3aWRkbGUiOjY1LGNvbG9ybWFwOjk3LCJnbC1idWZmZXIiOjE1NCwiZ2wtbWF0NC9pbnZlcnQiOjE3OSwiZ2wtbWF0NC9tdWx0aXBseSI6MTgxLCJnbC10ZXh0dXJlMmQiOjI2NSwiZ2wtdmFvIjoyNjksbmRhcnJheTo0NjUsIm5kYXJyYXktZ3JhZGllbnQiOjQ1NiwibmRhcnJheS1vcHMiOjQ1OSwibmRhcnJheS1wYWNrIjo0NjAsInN1cmZhY2UtbmV0cyI6NTI5LCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDI2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2c9W3QuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9ORUFSRVNUXSx5PVt0Lk5FQVJFU1QsdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9MSU5FQVJdLGI9W3QuUkVQRUFULHQuQ0xBTVBfVE9fRURHRSx0Lk1JUlJPUkVEX1JFUEVBVF19ZnVuY3Rpb24gaSh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2YgSW1hZ2VEYXRhfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXQuZ2wsaT1uLmdldFBhcmFtZXRlcihuLk1BWF9URVhUVVJFX1NJWkUpO2lmKGU8MHx8ZT5pfHxyPDB8fHI+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTtyZXR1cm4gdC5fc2hhcGU9W2Uscl0sdC5iaW5kKCksbi50ZXhJbWFnZTJEKG4uVEVYVFVSRV8yRCwwLHQuZm9ybWF0LGUsciwwLHQuZm9ybWF0LHQudHlwZSxudWxsKSx0Ll9taXBMZXZlbHM9WzBdLHR9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dGhpcy5nbD10LHRoaXMuaGFuZGxlPWUsdGhpcy5mb3JtYXQ9aSx0aGlzLnR5cGU9YSx0aGlzLl9zaGFwZT1bcixuXSx0aGlzLl9taXBMZXZlbHM9WzBdLHRoaXMuX21hZ0ZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fbWluRmlsdGVyPXQuTkVBUkVTVCx0aGlzLl93cmFwUz10LkNMQU1QX1RPX0VER0UsdGhpcy5fd3JhcFQ9dC5DTEFNUF9UT19FREdFLHRoaXMuX2FuaXNvU2FtcGxlcz0xO3ZhciBvPXRoaXMscz1bdGhpcy5fd3JhcFMsdGhpcy5fd3JhcFRdO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHMsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwUz10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLndyYXBUPXR9fV0pLHRoaXMuX3dyYXBWZWN0b3I9czt2YXIgbD1bdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV1dO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGwsW3tnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53aWR0aD10fX0se2dldDpmdW5jdGlvbigpe3JldHVybiBvLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBvLmhlaWdodD10fX1dKSx0aGlzLl9zaGFwZVZlY3Rvcj1sfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gMz09PXQubGVuZ3RoPzE9PT1lWzJdJiZlWzFdPT09dFswXSp0WzJdJiZlWzBdPT09dFsyXToxPT09ZVswXSYmZVsxXT09PXRbMF19ZnVuY3Rpb24gbCh0LGUscixuLGksYSxvLGwpe3ZhciB1PWwuZHR5cGUsYz1sLnNoYXBlLnNsaWNlKCk7aWYoYy5sZW5ndGg8Mnx8Yy5sZW5ndGg+Myl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBuZGFycmF5LCBtdXN0IGJlIDJkIG9yIDNkIik7dmFyIGg9MCxmPTAsZD1zKGMsbC5zdHJpZGUuc2xpY2UoKSk7ImZsb2F0MzIiPT09dT9oPXQuRkxPQVQ6ImZsb2F0NjQiPT09dT8oaD10LkZMT0FULGQ9ITEsdT0iZmxvYXQzMiIpOiJ1aW50OCI9PT11P2g9dC5VTlNJR05FRF9CWVRFOihoPXQuVU5TSUdORURfQllURSxkPSExLHU9InVpbnQ4Iik7aWYoMj09PWMubGVuZ3RoKWY9dC5MVU1JTkFOQ0UsYz1bY1swXSxjWzFdLDFdLGw9cChsLmRhdGEsYyxbbC5zdHJpZGVbMF0sbC5zdHJpZGVbMV0sMV0sbC5vZmZzZXQpO2Vsc2V7aWYoMyE9PWMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PWNbMl0pZj10LkFMUEhBO2Vsc2UgaWYoMj09PWNbMl0pZj10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1jWzJdKWY9dC5SR0I7ZWxzZXtpZig0IT09Y1syXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7Zj10LlJHQkF9Y1syXX1pZihmIT09dC5MVU1JTkFOQ0UmJmYhPT10LkFMUEhBfHxpIT09dC5MVU1JTkFOQ0UmJmkhPT10LkFMUEhBfHwoZj1pKSxmIT09aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW5jb21wYXRpYmxlIHRleHR1cmUgZm9ybWF0IGZvciBzZXRQaXhlbHMiKTt2YXIgZz1sLnNpemUseT1vLmluZGV4T2Yobik8MDtpZih5JiZvLnB1c2gobiksaD09PWEmJmQpMD09PWwub2Zmc2V0JiZsLmRhdGEubGVuZ3RoPT09Zz95P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixpLGNbMF0sY1sxXSwwLGksYSxsLmRhdGEpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbixlLHIsY1swXSxjWzFdLGksYSxsLmRhdGEpOnk/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGksY1swXSxjWzFdLDAsaSxhLGwuZGF0YS5zdWJhcnJheShsLm9mZnNldCxsLm9mZnNldCtnKSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxuLGUscixjWzBdLGNbMV0saSxhLGwuZGF0YS5zdWJhcnJheShsLm9mZnNldCxsLm9mZnNldCtnKSk7ZWxzZXt2YXIgYjtiPWE9PT10LkZMT0FUP3YubWFsbG9jRmxvYXQzMihnKTp2Lm1hbGxvY1VpbnQ4KGcpO3ZhciBfPXAoYixjLFtjWzJdLGNbMl0qY1swXSwxXSk7aD09PXQuRkxPQVQmJmE9PT10LlVOU0lHTkVEX0JZVEU/eChfLGwpOm0uYXNzaWduKF8sbCkseT90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG4saSxjWzBdLGNbMV0sMCxpLGEsYi5zdWJhcnJheSgwLGcpKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG4sZSxyLGNbMF0sY1sxXSxpLGEsYi5zdWJhcnJheSgwLGcpKSxhPT09dC5GTE9BVD92LmZyZWVGbG9hdDMyKGIpOnYuZnJlZVVpbnQ4KGIpfX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQuY3JlYXRlVGV4dHVyZSgpO3JldHVybiB0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLGV9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBhPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYoZTwwfHxlPmF8fHI8MHx8cj5hKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKTtpZihpPT09dC5GTE9BVCYmIXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBGbG9hdGluZyBwb2ludCB0ZXh0dXJlcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTt2YXIgcz11KHQpO3JldHVybiB0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsbixlLHIsMCxuLGksbnVsbCksbmV3IG8odCxzLGUscixuLGkpfWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBzPXUodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxpLGksYSxlKSxuZXcgbyh0LHMscixuLGksYSl9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWUuZHR5cGUsbj1lLnNoYXBlLnNsaWNlKCksaT10LmdldFBhcmFtZXRlcih0Lk1BWF9URVhUVVJFX1NJWkUpO2lmKG5bMF08MHx8blswXT5pfHxuWzFdPDB8fG5bMV0+aSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNpemUiKTt2YXIgYT1zKG4sZS5zdHJpZGUuc2xpY2UoKSksbD0wOyJmbG9hdDMyIj09PXI/bD10LkZMT0FUOiJmbG9hdDY0Ij09PXI/KGw9dC5GTE9BVCxhPSExLHI9ImZsb2F0MzIiKToidWludDgiPT09cj9sPXQuVU5TSUdORURfQllURToobD10LlVOU0lHTkVEX0JZVEUsYT0hMSxyPSJ1aW50OCIpO3ZhciBjPTA7aWYoMj09PW4ubGVuZ3RoKWM9dC5MVU1JTkFOQ0Usbj1bblswXSxuWzFdLDFdLGU9cChlLmRhdGEsbixbZS5zdHJpZGVbMF0sZS5zdHJpZGVbMV0sMV0sZS5vZmZzZXQpO2Vsc2V7aWYoMyE9PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PW5bMl0pYz10LkFMUEhBO2Vsc2UgaWYoMj09PW5bMl0pYz10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1uWzJdKWM9dC5SR0I7ZWxzZXtpZig0IT09blsyXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7Yz10LlJHQkF9fWwhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKXx8KGw9dC5VTlNJR05FRF9CWVRFLGE9ITEpO3ZhciBoLGYsZD1lLnNpemU7aWYoYSloPTA9PT1lLm9mZnNldCYmZS5kYXRhLmxlbmd0aD09PWQ/ZS5kYXRhOmUuZGF0YS5zdWJhcnJheShlLm9mZnNldCxlLm9mZnNldCtkKTtlbHNle3ZhciBnPVtuWzJdLG5bMl0qblswXSwxXTtmPXYubWFsbG9jKGQscik7dmFyIHk9cChmLG4sZywwKTsiZmxvYXQzMiIhPT1yJiYiZmxvYXQ2NCIhPT1yfHxsIT09dC5VTlNJR05FRF9CWVRFP20uYXNzaWduKHksZSk6eCh5LGUpLGg9Zi5zdWJhcnJheSgwLGQpfXZhciBiPXUodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxjLG5bMF0sblsxXSwwLGMsbCxoKSxhfHx2LmZyZWUoZiksbmV3IG8odCxiLG5bMF0sblsxXSxjLGwpfWZ1bmN0aW9uIGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpO2lmKGd8fG4odCksIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIGModCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIGModCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPWkoZSk/ZTplLnJhdztpZihyKXJldHVybiBoKHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4gZih0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9dmFyIHA9dCgibmRhcnJheSIpLG09dCgibmRhcnJheS1vcHMiKSx2PXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz1kO3ZhciBnPW51bGwseT1udWxsLGI9bnVsbCx4PWZ1bmN0aW9uKHQsZSl7bS5tdWxzKHQsZSwyNTUpfSxfPW8ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKF8se21pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuYmluZCgpO3ZhciBlPXRoaXMuZ2w7aWYodGhpcy50eXBlPT09ZS5GTE9BVCYmZy5pbmRleE9mKHQpPj0wJiYoZS5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwodD1lLk5FQVJFU1QpKSx5LmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biBmaWx0ZXIgbW9kZSAiK3QpO3JldHVybiBlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLHQpLHRoaXMuX21pbkZpbHRlcj10fX0sbWFnRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZnLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHkuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsdCksdGhpcy5fbWFnRmlsdGVyPXR9fSxtaXBTYW1wbGVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYW5pc29TYW1wbGVzfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYW5pc29TYW1wbGVzO2lmKHRoaXMuX2FuaXNvU2FtcGxlcz0wfE1hdGgubWF4KHQsMSksZSE9PXRoaXMuX2FuaXNvU2FtcGxlcyl7dmFyIHI9dGhpcy5nbC5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO3ImJnRoaXMuZ2wudGV4UGFyYW1ldGVyZih0aGlzLmdsLlRFWFRVUkVfMkQsci5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCx0aGlzLl9hbmlzb1NhbXBsZXMpfXJldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9fSx3cmFwUzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksYi5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfUyx0KSx0aGlzLl93cmFwUz10fX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVH0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuYmluZCgpLGIuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIHdyYXAgbW9kZSAiK3QpO3JldHVybiB0aGlzLmdsLnRleFBhcmFtZXRlcmkodGhpcy5nbC5URVhUVVJFXzJELHRoaXMuZ2wuVEVYVFVSRV9XUkFQX1QsdCksdGhpcy5fd3JhcFQ9dH19LHdyYXA6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cmFwVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KXx8KHQ9W3QsdF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTXVzdCBzcGVjaWZ5IHdyYXAgbW9kZSBmb3Igcm93cyBhbmQgY29sdW1ucyIpO2Zvcih2YXIgZT0wO2U8MjsrK2UpaWYoYi5pbmRleE9mKHRbZV0pPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7dGhpcy5fd3JhcFM9dFswXSx0aGlzLl93cmFwVD10WzFdO3ZhciByPXRoaXMuZ2w7cmV0dXJuIHRoaXMuYmluZCgpLHIudGV4UGFyYW1ldGVyaShyLlRFWFRVUkVfMkQsci5URVhUVVJFX1dSQVBfUyx0aGlzLl93cmFwUyksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9ULHRoaXMuX3dyYXBUKSx0fX0sc2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVZlY3Rvcn0sc2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2lmKDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCB0ZXh0dXJlIHNoYXBlIil9ZWxzZSB0PVswfHQsMHx0XTtyZXR1cm4gYSh0aGlzLDB8dFswXSwwfHRbMV0pLFswfHRbMF0sMHx0WzFdXX19LHdpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdHw9MCxhKHRoaXMsdCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsYSh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLF8uYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LF8uZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LF8uZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LF8uc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obj1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbj1ufHwwO3ZhciBvPWkodCk/dDp0LnJhdztpZihvKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihuKTwwPyhhLnRleEltYWdlMkQoYS5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLG8pLHRoaXMuX21pcExldmVscy5wdXNoKG4pKTphLnRleFN1YkltYWdlMkQoYS5URVhUVVJFXzJELG4sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxvKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO2lmKHQuc2hhcGUubGVuZ3RoPDJ8fGUrdC5zaGFwZVsxXT50aGlzLl9zaGFwZVsxXT4+Pm58fHIrdC5zaGFwZVswXT50aGlzLl9zaGFwZVswXT4+Pm58fGU8MHx8cjwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHMiKTtsKGEsZSxyLG4sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0NjUsIm5kYXJyYXktb3BzIjo0NTksInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sMjY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2U/ZS5iaW5kKCk6dC5iaW5kQnVmZmVyKHQuRUxFTUVOVF9BUlJBWV9CVUZGRVIsbnVsbCk7dmFyIG49MHx0LmdldFBhcmFtZXRlcih0Lk1BWF9WRVJURVhfQVRUUklCUyk7aWYocil7aWYoci5sZW5ndGg+bil0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogVG9vIG1hbnkgdmVydGV4IGF0dHJpYnV0ZXMiKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoOysraSl7dmFyIGE9cltpXTtpZihhLmJ1ZmZlcil7dmFyIG89YS5idWZmZXIscz1hLnNpemV8fDQsbD1hLnR5cGV8fHQuRkxPQVQsdT0hIWEubm9ybWFsaXplZCxjPWEuc3RyaWRlfHwwLGg9YS5vZmZzZXR8fDA7by5iaW5kKCksdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYlBvaW50ZXIoaSxzLGwsdSxjLGgpfWVsc2V7aWYoIm51bWJlciI9PXR5cGVvZiBhKXQudmVydGV4QXR0cmliMWYoaSxhKTtlbHNlIGlmKDE9PT1hLmxlbmd0aCl0LnZlcnRleEF0dHJpYjFmKGksYVswXSk7ZWxzZSBpZigyPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIyZihpLGFbMF0sYVsxXSk7ZWxzZSBpZigzPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIzZihpLGFbMF0sYVsxXSxhWzJdKTtlbHNle2lmKDQhPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXZhbzogSW52YWxpZCB2ZXJ0ZXggYXR0cmlidXRlIik7dC52ZXJ0ZXhBdHRyaWI0ZihpLGFbMF0sYVsxXSxhWzJdLGFbM10pfXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX1mb3IoO2k8bjsrK2kpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSl9ZWxzZXt0LmJpbmRCdWZmZXIodC5BUlJBWV9CVUZGRVIsbnVsbCk7Zm9yKHZhciBpPTA7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19ZS5leHBvcnRzPW59LHt9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmdsPXQsdGhpcy5fZWxlbWVudHM9bnVsbCx0aGlzLl9hdHRyaWJ1dGVzPW51bGwsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG4odCl9dmFyIGE9dCgiLi9kby1iaW5kLmpzIik7bi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe2EodGhpcy5nbCx0aGlzLl9lbGVtZW50cyx0aGlzLl9hdHRyaWJ1dGVzKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbGVtZW50cz1lLHRoaXMuX2F0dHJpYnV0ZXM9dCx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sbi5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fDA7dmFyIG49dGhpcy5nbDt0aGlzLl9lbGVtZW50cz9uLmRyYXdFbGVtZW50cyh0LGUsdGhpcy5fZWxlbWVudHNUeXBlLHIpOm4uZHJhd0FycmF5cyh0LHIsZSl9LGUuZXhwb3J0cz1pfSx7Ii4vZG8tYmluZC5qcyI6MjY2fV0sMjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3RoaXMubG9jYXRpb249dCx0aGlzLmRpbWVuc2lvbj1lLHRoaXMuYT1yLHRoaXMuYj1uLHRoaXMuYz1pLHRoaXMuZD1hfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLl9leHQ9ZSx0aGlzLmhhbmRsZT1yLHRoaXMuX2F0dHJpYnM9W10sdGhpcy5fdXNlRWxlbWVudHM9ITEsdGhpcy5fZWxlbWVudHNUeXBlPXQuVU5TSUdORURfU0hPUlR9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBuZXcgaSh0LGUsZS5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKX12YXIgbz10KCIuL2RvLWJpbmQuanMiKTtuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3N3aXRjaCh0aGlzLmRpbWVuc2lvbil7Y2FzZSAxOnQudmVydGV4QXR0cmliMWYodGhpcy5sb2NhdGlvbix0aGlzLmEpO2JyZWFrO2Nhc2UgMjp0LnZlcnRleEF0dHJpYjJmKHRoaXMubG9jYXRpb24sdGhpcy5hLHRoaXMuYik7YnJlYWs7Y2FzZSAzOnQudmVydGV4QXR0cmliM2YodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyk7YnJlYWs7Y2FzZSA0OnQudmVydGV4QXR0cmliNGYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iLHRoaXMuYyx0aGlzLmQpfX0saS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbigpe3RoaXMuX2V4dC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy5oYW5kbGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5fYXR0cmlicy5sZW5ndGg7Kyt0KXRoaXMuX2F0dHJpYnNbdF0uYmluZCh0aGlzLmdsKX0saS5wcm90b3R5cGUudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0saS5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX2V4dC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5iaW5kKCksbyh0aGlzLmdsLGUsdCksdGhpcy51bmJpbmQoKSx0aGlzLl9hdHRyaWJzLmxlbmd0aD0wLHQpZm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBhPXRbaV07Im51bWJlciI9PXR5cGVvZiBhP3RoaXMuX2F0dHJpYnMucHVzaChuZXcgbihpLDEsYSkpOkFycmF5LmlzQXJyYXkoYSkmJnRoaXMuX2F0dHJpYnMucHVzaChuZXcgbihpLGEubGVuZ3RoLGFbMF0sYVsxXSxhWzJdLGFbM10pKX10aGlzLl91c2VFbGVtZW50cz0hIWUsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxlLHIpe3I9cnx8MDt2YXIgbj10aGlzLmdsO3RoaXMuX3VzZUVsZW1lbnRzP24uZHJhd0VsZW1lbnRzKHQsZSx0aGlzLl9lbGVtZW50c1R5cGUscik6bi5kcmF3QXJyYXlzKHQscixlKX0sZS5leHBvcnRzPWF9LHsiLi9kby1iaW5kLmpzIjoyNjZ9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUz10LmJpbmRWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuY3JlYXRlVmVydGV4QXJyYXlPRVM9dC5jcmVhdGVWZXJ0ZXhBcnJheS5iaW5kKHQpLHRoaXMuZGVsZXRlVmVydGV4QXJyYXlPRVM9dC5kZWxldGVWZXJ0ZXhBcnJheS5iaW5kKHQpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBuKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybiBzPWw/YSh0LGwpOm8odCkscy51cGRhdGUoZSxyLGkpLHN9dmFyIGE9dCgiLi9saWIvdmFvLW5hdGl2ZS5qcyIpLG89dCgiLi9saWIvdmFvLWVtdWxhdGVkLmpzIik7ZS5leHBvcnRzPWl9LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjoyNjcsIi4vbGliL3Zhby1uYXRpdmUuanMiOjI2OH1dLDI3MDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH1lLmV4cG9ydHM9bn0se31dLDI3MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZS5leHBvcnRzPW59LHt9XSwyNzI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuKX1lLmV4cG9ydHM9bn0se31dLDI3MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9ZVswXSxhPWVbMV0sbz1lWzJdO3JldHVybiB0WzBdPWkrbiooclswXS1pKSx0WzFdPWErbiooclsxXS1hKSx0WzJdPW8rbiooclsyXS1vKSx0fWUuZXhwb3J0cz1ufSx7fV0sMjc0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO3JldHVybiBhPjAmJihhPTEvTWF0aC5zcXJ0KGEpLHRbMF09ZVswXSphLHRbMV09ZVsxXSphLHRbMl09ZVsyXSphKSx0fWUuZXhwb3J0cz1ufSx7fV0sMjc1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH1lLmV4cG9ydHM9bn0se31dLDI3NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGlbMF09bixpWzFdPXIsaVsyXT1lLGlbM109dCxhWzBdfWUuZXhwb3J0cz1uO3ZhciBpPW5ldyBVaW50OEFycmF5KDQpLGE9bmV3IEZsb2F0MzJBcnJheShpLmJ1ZmZlcil9LHt9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1BcnJheS5pc0FycmF5KHQpP3Q6aSh0KSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYoInByZXByb2Nlc3NvciI9PT1uLnR5cGUpe3ZhciBvPW4uZGF0YS5tYXRjaCgvXCNkZWZpbmVccytTSEFERVJfTkFNRShfQjY0KT9ccysoLispJC8pO2lmKG8mJm9bMl0pe3ZhciBzPW9bMV0sbD1vWzJdO3JldHVybihzP2EobCk6bCkudHJpbSgpfX19fXZhciBpPXQoImdsc2wtdG9rZW5pemVyIiksYT10KCJhdG9iLWxpdGUiKTtlLmV4cG9ydHM9bn0seyJhdG9iLWxpdGUiOjQ2LCJnbHNsLXRva2VuaXplciI6Mjg0fV0sMjc4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKHQpe3QubGVuZ3RoJiZWLnB1c2goe3R5cGU6TVtCXSxkYXRhOnQscG9zaXRpb246RyxsaW5lOkgsY29sdW1uOnF9KX1mdW5jdGlvbiByKHQpe2o9MCxXKz10LEY9Vy5sZW5ndGg7Zm9yKHZhciBlO089V1tqXSxqPEY7KXtzd2l0Y2goZT1qLEIpe2Nhc2UgaDpqPUUoKTticmVhaztjYXNlIGY6aj1TKCk7YnJlYWs7Y2FzZSBkOmo9VCgpO2JyZWFrO2Nhc2UgcDpqPUwoKTticmVhaztjYXNlIG06aj1JKCk7YnJlYWs7Y2FzZSB3Omo9eigpO2JyZWFrO2Nhc2UgdjpqPUQoKTticmVhaztjYXNlIGM6aj1QKCk7YnJlYWs7Y2FzZSB4Omo9QSgpO2JyZWFrO2Nhc2UgdTpqPWsoKX1pZihlIT09ailzd2l0Y2goV1tlXSl7Y2FzZSJcbiI6cT0wLCsrSDticmVhaztkZWZhdWx0OisrcX19cmV0dXJuIE4rPWosVz1XLnNsaWNlKGopLFZ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gVS5sZW5ndGgmJmUoVS5qb2luKCIiKSksQj1fLGUoIihlb2YpIiksVn1mdW5jdGlvbiBrKCl7cmV0dXJuIFU9VS5sZW5ndGg/W106VSwiLyI9PT1SJiYiKiI9PT1PPyhHPU4rai0xLEI9aCxSPU8saisxKToiLyI9PT1SJiYiLyI9PT1PPyhHPU4rai0xLEI9ZixSPU8saisxKToiIyI9PT1PPyhCPWQsRz1OK2osaik6L1xzLy50ZXN0KE8pPyhCPXgsRz1OK2osaik6KFk9L1xkLy50ZXN0KE8pLFg9L1teXHdfXS8udGVzdChPKSxHPU4raixCPVk/bTpYP3A6YyxqKX1mdW5jdGlvbiBBKCl7cmV0dXJuL1teXHNdL2cudGVzdChPKT8oZShVLmpvaW4oIiIpKSxCPXUsaik6KFUucHVzaChPKSxSPU8saisxKX1mdW5jdGlvbiBUKCl7cmV0dXJuIlxyIiE9PU8mJiJcbiIhPT1PfHwiXFwiPT09Uj8oVS5wdXNoKE8pLFI9TyxqKzEpOihlKFUuam9pbigiIikpLEI9dSxqKX1mdW5jdGlvbiBTKCl7cmV0dXJuIFQoKX1mdW5jdGlvbiBFKCl7cmV0dXJuIi8iPT09TyYmIioiPT09Uj8oVS5wdXNoKE8pLGUoVS5qb2luKCIiKSksQj11LGorMSk6KFUucHVzaChPKSxSPU8saisxKX1mdW5jdGlvbiBMKCl7aWYoIi4iPT09UiYmL1xkLy50ZXN0KE8pKXJldHVybiBCPXYsajtpZigiLyI9PT1SJiYiKiI9PT1PKXJldHVybiBCPWgsajtpZigiLyI9PT1SJiYiLyI9PT1PKXJldHVybiBCPWYsajtpZigiLiI9PT1PJiZVLmxlbmd0aCl7Zm9yKDtDKFUpOyk7cmV0dXJuIEI9dixqfWlmKCI7Ij09PU98fCIpIj09PU98fCIoIj09PU8pe2lmKFUubGVuZ3RoKWZvcig7QyhVKTspO3JldHVybiBlKE8pLEI9dSxqKzF9dmFyIHQ9Mj09PVUubGVuZ3RoJiYiPSIhPT1PO2lmKC9bXHdfXGRcc10vLnRlc3QoTyl8fHQpe2Zvcig7QyhVKTspO3JldHVybiBCPXUsan1yZXR1cm4gVS5wdXNoKE8pLFI9TyxqKzF9ZnVuY3Rpb24gQyh0KXtmb3IodmFyIHIsbixpPTA7Oyl7aWYocj1hLmluZGV4T2YodC5zbGljZSgwLHQubGVuZ3RoK2kpLmpvaW4oIiIpKSxuPWFbcl0sLTE9PT1yKXtpZihpLS0rdC5sZW5ndGg+MCljb250aW51ZTtuPXQuc2xpY2UoMCwxKS5qb2luKCIiKX1yZXR1cm4gZShuKSxHKz1uLmxlbmd0aCxVPVUuc2xpY2Uobi5sZW5ndGgpLFUubGVuZ3RofX1mdW5jdGlvbiB6KCl7cmV0dXJuL1teYS1mQS1GMC05XS8udGVzdChPKT8oZShVLmpvaW4oIiIpKSxCPXUsaik6KFUucHVzaChPKSxSPU8saisxKX1mdW5jdGlvbiBJKCl7cmV0dXJuIi4iPT09Tz8oVS5wdXNoKE8pLEI9dixSPU8saisxKTovW2VFXS8udGVzdChPKT8oVS5wdXNoKE8pLEI9dixSPU8saisxKToieCI9PT1PJiYxPT09VS5sZW5ndGgmJiIwIj09PVVbMF0/KEI9dyxVLnB1c2goTyksUj1PLGorMSk6L1teXGRdLy50ZXN0KE8pPyhlKFUuam9pbigiIikpLEI9dSxqKTooVS5wdXNoKE8pLFI9TyxqKzEpfWZ1bmN0aW9uIEQoKXtyZXR1cm4iZiI9PT1PJiYoVS5wdXNoKE8pLFI9TyxqKz0xKSwvW2VFXS8udGVzdChPKT8oVS5wdXNoKE8pLFI9TyxqKzEpOiItIj09PU8mJi9bZUVdLy50ZXN0KFIpPyhVLnB1c2goTyksUj1PLGorMSk6L1teXGRdLy50ZXN0KE8pPyhlKFUuam9pbigiIikpLEI9dSxqKTooVS5wdXNoKE8pLFI9TyxqKzEpfWZ1bmN0aW9uIFAoKXtpZigvW15cZFx3X10vLnRlc3QoTykpe3ZhciB0PVUuam9pbigiIik7cmV0dXJuIEI9Si5pbmRleE9mKHQpPi0xP2I6Wi5pbmRleE9mKHQpPi0xP3k6ZyxlKFUuam9pbigiIikpLEI9dSxqfXJldHVybiBVLnB1c2goTyksUj1PLGorMX12YXIgTyxSLEYsaj0wLE49MCxCPXUsVT1bXSxWPVtdLEg9MSxxPTAsRz0wLFk9ITEsWD0hMSxXPSIiO3Q9dHx8e307dmFyIFo9byxKPWk7cmV0dXJuIjMwMCBlcyI9PT10LnZlcnNpb24mJihaPWwsSj1zKSxmdW5jdGlvbih0KXtyZXR1cm4gVj1bXSxudWxsIT09dD9yKHQucmVwbGFjZT90LnJlcGxhY2UoL1xyXG4vZywiXG4iKTp0KTpuKCl9fWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4vbGliL2xpdGVyYWxzIiksYT10KCIuL2xpYi9vcGVyYXRvcnMiKSxvPXQoIi4vbGliL2J1aWx0aW5zIikscz10KCIuL2xpYi9saXRlcmFscy0zMDBlcyIpLGw9dCgiLi9saWIvYnVpbHRpbnMtMzAwZXMiKSx1PTk5OSxjPTk5OTksaD0wLGY9MSxkPTIscD0zLG09NCx2PTUsZz02LHk9NyxiPTgseD05LF89MTAsdz0xMSxNPVsiYmxvY2stY29tbWVudCIsImxpbmUtY29tbWVudCIsInByZXByb2Nlc3NvciIsIm9wZXJhdG9yIiwiaW50ZWdlciIsImZsb2F0IiwiaWRlbnQiLCJidWlsdGluIiwia2V5d29yZCIsIndoaXRlc3BhY2UiLCJlb2YiLCJpbnRlZ2VyIl19LHsiLi9saWIvYnVpbHRpbnMiOjI4MCwiLi9saWIvYnVpbHRpbnMtMzAwZXMiOjI3OSwiLi9saWIvbGl0ZXJhbHMiOjI4MiwiLi9saWIvbGl0ZXJhbHMtMzAwZXMiOjI4MSwiLi9saWIvb3BlcmF0b3JzIjoyODN9XSwyNzk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2J1aWx0aW5zIik7bj1uLnNsaWNlKCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEvXihnbFxffHRleHR1cmUpLy50ZXN0KHQpfSksZS5leHBvcnRzPW4uY29uY2F0KFsiZ2xfVmVydGV4SUQiLCJnbF9JbnN0YW5jZUlEIiwiZ2xfUG9zaXRpb24iLCJnbF9Qb2ludFNpemUiLCJnbF9GcmFnQ29vcmQiLCJnbF9Gcm9udEZhY2luZyIsImdsX0ZyYWdEZXB0aCIsImdsX1BvaW50Q29vcmQiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIiwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01pblByb2dyYW1UZXhlbE9mZnNldCIsImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRGVwdGhSYW5nZSIsInRydW5jIiwicm91bmQiLCJyb3VuZEV2ZW4iLCJpc25hbiIsImlzaW5mIiwiZmxvYXRCaXRzVG9JbnQiLCJmbG9hdEJpdHNUb1VpbnQiLCJpbnRCaXRzVG9GbG9hdCIsInVpbnRCaXRzVG9GbG9hdCIsInBhY2tTbm9ybTJ4MTYiLCJ1bnBhY2tTbm9ybTJ4MTYiLCJwYWNrVW5vcm0yeDE2IiwidW5wYWNrVW5vcm0yeDE2IiwicGFja0hhbGYyeDE2IiwidW5wYWNrSGFsZjJ4MTYiLCJvdXRlclByb2R1Y3QiLCJ0cmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsImludmVyc2UiLCJ0ZXh0dXJlIiwidGV4dHVyZVNpemUiLCJ0ZXh0dXJlUHJvaiIsInRleHR1cmVMb2QiLCJ0ZXh0dXJlT2Zmc2V0IiwidGV4ZWxGZXRjaCIsInRleGVsRmV0Y2hPZmZzZXQiLCJ0ZXh0dXJlUHJvak9mZnNldCIsInRleHR1cmVMb2RPZmZzZXQiLCJ0ZXh0dXJlUHJvakxvZCIsInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwidGV4dHVyZUdyYWQiLCJ0ZXh0dXJlR3JhZE9mZnNldCIsInRleHR1cmVQcm9qR3JhZCIsInRleHR1cmVQcm9qR3JhZE9mZnNldCJdKX0seyIuL2J1aWx0aW5zIjoyODB9XSwyODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJhYnMiLCJhY29zIiwiYWxsIiwiYW55IiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY2xhbXAiLCJjb3MiLCJjcm9zcyIsImRGZHgiLCJkRmR5IiwiZGVncmVlcyIsImRpc3RhbmNlIiwiZG90IiwiZXF1YWwiLCJleHAiLCJleHAyIiwiZmFjZWZvcndhcmQiLCJmbG9vciIsImZyYWN0IiwiZ2xfQmFja0NvbG9yIiwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfQmFja0xpZ2h0UHJvZHVjdCIsImdsX0JhY2tNYXRlcmlhbCIsImdsX0JhY2tTZWNvbmRhcnlDb2xvciIsImdsX0NsaXBQbGFuZSIsImdsX0NsaXBWZXJ0ZXgiLCJnbF9Db2xvciIsImdsX0RlcHRoUmFuZ2UiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0V5ZVBsYW5lUSIsImdsX0V5ZVBsYW5lUiIsImdsX0V5ZVBsYW5lUyIsImdsX0V5ZVBsYW5lVCIsImdsX0ZvZyIsImdsX0ZvZ0Nvb3JkIiwiZ2xfRm9nRnJhZ0Nvb3JkIiwiZ2xfRm9nUGFyYW1ldGVycyIsImdsX0ZyYWdDb2xvciIsImdsX0ZyYWdDb29yZCIsImdsX0ZyYWdEYXRhIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfRnJhZ0RlcHRoRVhUIiwiZ2xfRnJvbnRDb2xvciIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCIsImdsX0Zyb250TGlnaHRQcm9kdWN0IiwiZ2xfRnJvbnRNYXRlcmlhbCIsImdsX0Zyb250U2Vjb25kYXJ5Q29sb3IiLCJnbF9MaWdodE1vZGVsIiwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnMiLCJnbF9MaWdodE1vZGVsUHJvZHVjdHMiLCJnbF9MaWdodFByb2R1Y3RzIiwiZ2xfTGlnaHRTb3VyY2UiLCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnMiLCJnbF9NYXRlcmlhbFBhcmFtZXRlcnMiLCJnbF9NYXhDbGlwUGxhbmVzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyIsImdsX01heExpZ2h0cyIsImdsX01heFRleHR1cmVDb29yZHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVVbml0cyIsImdsX01heFZhcnlpbmdGbG9hdHMiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyIsImdsX01vZGVsVmlld01hdHJpeCIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfTXVsdGlUZXhDb29yZDAiLCJnbF9NdWx0aVRleENvb3JkMSIsImdsX011bHRpVGV4Q29vcmQyIiwiZ2xfTXVsdGlUZXhDb29yZDMiLCJnbF9NdWx0aVRleENvb3JkNCIsImdsX011bHRpVGV4Q29vcmQ1IiwiZ2xfTXVsdGlUZXhDb29yZDYiLCJnbF9NdWx0aVRleENvb3JkNyIsImdsX05vcm1hbCIsImdsX05vcm1hbE1hdHJpeCIsImdsX05vcm1hbFNjYWxlIiwiZ2xfT2JqZWN0UGxhbmVRIiwiZ2xfT2JqZWN0UGxhbmVSIiwiZ2xfT2JqZWN0UGxhbmVTIiwiZ2xfT2JqZWN0UGxhbmVUIiwiZ2xfUG9pbnQiLCJnbF9Qb2ludENvb3JkIiwiZ2xfUG9pbnRQYXJhbWV0ZXJzIiwiZ2xfUG9pbnRTaXplIiwiZ2xfUG9zaXRpb24iLCJnbF9Qcm9qZWN0aW9uTWF0cml4IiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9TZWNvbmRhcnlDb2xvciIsImdsX1RleENvb3JkIiwiZ2xfVGV4dHVyZUVudkNvbG9yIiwiZ2xfVGV4dHVyZU1hdHJpeCIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIiwiZ2xfVmVydGV4IiwiZ3JlYXRlclRoYW4iLCJncmVhdGVyVGhhbkVxdWFsIiwiaW52ZXJzZXNxcnQiLCJsZW5ndGgiLCJsZXNzVGhhbiIsImxlc3NUaGFuRXF1YWwiLCJsb2ciLCJsb2cyIiwibWF0cml4Q29tcE11bHQiLCJtYXgiLCJtaW4iLCJtaXgiLCJtb2QiLCJub3JtYWxpemUiLCJub3QiLCJub3RFcXVhbCIsInBvdyIsInJhZGlhbnMiLCJyZWZsZWN0IiwicmVmcmFjdCIsInNpZ24iLCJzaW4iLCJzbW9vdGhzdGVwIiwic3FydCIsInN0ZXAiLCJ0YW4iLCJ0ZXh0dXJlMkQiLCJ0ZXh0dXJlMkRMb2QiLCJ0ZXh0dXJlMkRQcm9qIiwidGV4dHVyZTJEUHJvakxvZCIsInRleHR1cmVDdWJlIiwidGV4dHVyZUN1YmVMb2QiLCJ0ZXh0dXJlMkRMb2RFWFQiLCJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwidGV4dHVyZUN1YmVMb2RFWFQiLCJ0ZXh0dXJlMkRHcmFkRVhUIiwidGV4dHVyZTJEUHJvakdyYWRFWFQiLCJ0ZXh0dXJlQ3ViZUdyYWRFWFQiXX0se31dLDI4MTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbGl0ZXJhbHMiKQo7ZS5leHBvcnRzPW4uc2xpY2UoKS5jb25jYXQoWyJsYXlvdXQiLCJjZW50cm9pZCIsInNtb290aCIsImNhc2UiLCJtYXQyeDIiLCJtYXQyeDMiLCJtYXQyeDQiLCJtYXQzeDIiLCJtYXQzeDMiLCJtYXQzeDQiLCJtYXQ0eDIiLCJtYXQ0eDMiLCJtYXQ0eDQiLCJ1aW50IiwidXZlYzIiLCJ1dmVjMyIsInV2ZWM0Iiwic2FtcGxlckN1YmVTaGFkb3ciLCJzYW1wbGVyMkRBcnJheSIsInNhbXBsZXIyREFycmF5U2hhZG93IiwiaXNhbXBsZXIyRCIsImlzYW1wbGVyM0QiLCJpc2FtcGxlckN1YmUiLCJpc2FtcGxlcjJEQXJyYXkiLCJ1c2FtcGxlcjJEIiwidXNhbXBsZXIzRCIsInVzYW1wbGVyQ3ViZSIsInVzYW1wbGVyMkRBcnJheSIsImNvaGVyZW50IiwicmVzdHJpY3QiLCJyZWFkb25seSIsIndyaXRlb25seSIsInJlc291cmNlIiwiYXRvbWljX3VpbnQiLCJub3BlcnNwZWN0aXZlIiwicGF0Y2giLCJzYW1wbGUiLCJzdWJyb3V0aW5lIiwiY29tbW9uIiwicGFydGl0aW9uIiwiYWN0aXZlIiwiZmlsdGVyIiwiaW1hZ2UxRCIsImltYWdlMkQiLCJpbWFnZTNEIiwiaW1hZ2VDdWJlIiwiaWltYWdlMUQiLCJpaW1hZ2UyRCIsImlpbWFnZTNEIiwiaWltYWdlQ3ViZSIsInVpbWFnZTFEIiwidWltYWdlMkQiLCJ1aW1hZ2UzRCIsInVpbWFnZUN1YmUiLCJpbWFnZTFEQXJyYXkiLCJpbWFnZTJEQXJyYXkiLCJpaW1hZ2UxREFycmF5IiwiaWltYWdlMkRBcnJheSIsInVpbWFnZTFEQXJyYXkiLCJ1aW1hZ2UyREFycmF5IiwiaW1hZ2UxRFNoYWRvdyIsImltYWdlMkRTaGFkb3ciLCJpbWFnZTFEQXJyYXlTaGFkb3ciLCJpbWFnZTJEQXJyYXlTaGFkb3ciLCJpbWFnZUJ1ZmZlciIsImlpbWFnZUJ1ZmZlciIsInVpbWFnZUJ1ZmZlciIsInNhbXBsZXIxREFycmF5Iiwic2FtcGxlcjFEQXJyYXlTaGFkb3ciLCJpc2FtcGxlcjFEIiwiaXNhbXBsZXIxREFycmF5IiwidXNhbXBsZXIxRCIsInVzYW1wbGVyMURBcnJheSIsImlzYW1wbGVyMkRSZWN0IiwidXNhbXBsZXIyRFJlY3QiLCJzYW1wbGVyQnVmZmVyIiwiaXNhbXBsZXJCdWZmZXIiLCJ1c2FtcGxlckJ1ZmZlciIsInNhbXBsZXIyRE1TIiwiaXNhbXBsZXIyRE1TIiwidXNhbXBsZXIyRE1TIiwic2FtcGxlcjJETVNBcnJheSIsImlzYW1wbGVyMkRNU0FycmF5IiwidXNhbXBsZXIyRE1TQXJyYXkiXSl9LHsiLi9saXRlcmFscyI6MjgyfV0sMjgyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsicHJlY2lzaW9uIiwiaGlnaHAiLCJtZWRpdW1wIiwibG93cCIsImF0dHJpYnV0ZSIsImNvbnN0IiwidW5pZm9ybSIsInZhcnlpbmciLCJicmVhayIsImNvbnRpbnVlIiwiZG8iLCJmb3IiLCJ3aGlsZSIsImlmIiwiZWxzZSIsImluIiwib3V0IiwiaW5vdXQiLCJmbG9hdCIsImludCIsInZvaWQiLCJib29sIiwidHJ1ZSIsImZhbHNlIiwiZGlzY2FyZCIsInJldHVybiIsIm1hdDIiLCJtYXQzIiwibWF0NCIsInZlYzIiLCJ2ZWMzIiwidmVjNCIsIml2ZWMyIiwiaXZlYzMiLCJpdmVjNCIsImJ2ZWMyIiwiYnZlYzMiLCJidmVjNCIsInNhbXBsZXIxRCIsInNhbXBsZXIyRCIsInNhbXBsZXIzRCIsInNhbXBsZXJDdWJlIiwic2FtcGxlcjFEU2hhZG93Iiwic2FtcGxlcjJEU2hhZG93Iiwic3RydWN0IiwiYXNtIiwiY2xhc3MiLCJ1bmlvbiIsImVudW0iLCJ0eXBlZGVmIiwidGVtcGxhdGUiLCJ0aGlzIiwicGFja2VkIiwiZ290byIsInN3aXRjaCIsImRlZmF1bHQiLCJpbmxpbmUiLCJub2lubGluZSIsInZvbGF0aWxlIiwicHVibGljIiwic3RhdGljIiwiZXh0ZXJuIiwiZXh0ZXJuYWwiLCJpbnRlcmZhY2UiLCJsb25nIiwic2hvcnQiLCJkb3VibGUiLCJoYWxmIiwiZml4ZWQiLCJ1bnNpZ25lZCIsImlucHV0Iiwib3V0cHV0IiwiaHZlYzIiLCJodmVjMyIsImh2ZWM0IiwiZHZlYzIiLCJkdmVjMyIsImR2ZWM0IiwiZnZlYzIiLCJmdmVjMyIsImZ2ZWM0Iiwic2FtcGxlcjJEUmVjdCIsInNhbXBsZXIzRFJlY3QiLCJzYW1wbGVyMkRSZWN0U2hhZG93Iiwic2l6ZW9mIiwiY2FzdCIsIm5hbWVzcGFjZSIsInVzaW5nIl19LHt9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyI8PD0iLCI+Pj0iLCIrKyIsIi0tIiwiPDwiLCI+PiIsIjw9IiwiPj0iLCI9PSIsIiE9IiwiJiYiLCJ8fCIsIis9IiwiLT0iLCIqPSIsIi89IiwiJT0iLCImPSIsIl5eIiwiXj0iLCJ8PSIsIigiLCIpIiwiWyIsIl0iLCIuIiwiISIsIn4iLCIqIiwiLyIsIiUiLCIrIiwiLSIsIjwiLCI+IiwiJiIsIl4iLCJ8IiwiPyIsIjoiLCI9IiwiLCIsIjsiLCJ7IiwifSJdfSx7fV0sMjg0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWkoZSksbj1bXTtyZXR1cm4gbj1uLmNvbmNhdChyKHQpKSxuPW4uY29uY2F0KHIobnVsbCkpfXZhciBpPXQoIi4vaW5kZXgiKTtlLmV4cG9ydHM9bn0seyIuL2luZGV4IjoyNzh9XSwyODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49dGhpcy5jZWxscz1bXTtpZih0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3RoaXMuYXJyYXlCdWZmZXI9dDt2YXIgYT1uZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTt0PWFbMF0sZT1hWzFdLHI9YVsyXSx0aGlzLmQ9ZSsyKnI7Zm9yKHZhciBvPTA7bzx0aGlzLmQqdGhpcy5kO28rKyl7dmFyIHM9YVtpK29dLGw9YVtpK28rMV07bi5wdXNoKHM9PT1sP251bGw6YS5zdWJhcnJheShzLGwpKX12YXIgdT1hW2krbi5sZW5ndGhdLGM9YVtpK24ubGVuZ3RoKzFdO3RoaXMua2V5cz1hLnN1YmFycmF5KHUsYyksdGhpcy5iYm94ZXM9YS5zdWJhcnJheShjKSx0aGlzLmluc2VydD10aGlzLl9pbnNlcnRSZWFkb25seX1lbHNle3RoaXMuZD1lKzIqcjtmb3IodmFyIGg9MDtoPHRoaXMuZCp0aGlzLmQ7aCsrKW4ucHVzaChbXSk7dGhpcy5rZXlzPVtdLHRoaXMuYmJveGVzPVtdfXRoaXMubj1lLHRoaXMuZXh0ZW50PXQsdGhpcy5wYWRkaW5nPXIsdGhpcy5zY2FsZT1lL3QsdGhpcy51aWQ9MDt2YXIgZj1yL2UqdDt0aGlzLm1pbj0tZix0aGlzLm1heD10K2Z9ZS5leHBvcnRzPW47dmFyIGk9MztuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydENlbGwsdGhpcy51aWQrKyksdGhpcy5rZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sbi5wcm90b3R5cGUuX2luc2VydFJlYWRvbmx5PWZ1bmN0aW9uKCl7dGhyb3ciQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci4ifSxuLnByb3RvdHlwZS5faW5zZXJ0Q2VsbD1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5jZWxsc1tpXS5wdXNoKGEpfSxuLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLm1pbixhPXRoaXMubWF4O2lmKHQ8PWkmJmU8PWkmJmE8PXImJmE8PW4pcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7dmFyIG89W10scz17fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyxzKSxvfSxuLnByb3RvdHlwZS5fcXVlcnlDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPXRoaXMuY2VsbHNbaV07aWYobnVsbCE9PXMpZm9yKHZhciBsPXRoaXMua2V5cyx1PXRoaXMuYmJveGVzLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGg9c1tjXTtpZih2b2lkIDA9PT1vW2hdKXt2YXIgZj00Kmg7dDw9dVtmKzJdJiZlPD11W2YrM10mJnI+PXVbZiswXSYmbj49dVtmKzFdPyhvW2hdPSEwLGEucHVzaChsW2hdKSk6b1toXT0hMX19fSxuLnByb3RvdHlwZS5fZm9yRWFjaENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxoPXM7aDw9dTtoKyspZm9yKHZhciBmPWw7Zjw9YztmKyspe3ZhciBkPXRoaXMuZCpmK2g7aWYoaS5jYWxsKHRoaXMsdCxlLHIsbixkLGEsbykpcmV0dXJufX0sbi5wcm90b3R5cGUuX2NvbnZlcnRUb0NlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmQtMSxNYXRoLmZsb29yKHQqdGhpcy5zY2FsZSkrdGhpcy5wYWRkaW5nKSl9LG4ucHJvdG90eXBlLnRvQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtpZih0aGlzLmFycmF5QnVmZmVyKXJldHVybiB0aGlzLmFycmF5QnVmZmVyO2Zvcih2YXIgdD10aGlzLmNlbGxzLGU9aSt0aGlzLmNlbGxzLmxlbmd0aCsxKzEscj0wLG49MDtuPHRoaXMuY2VsbHMubGVuZ3RoO24rKylyKz10aGlzLmNlbGxzW25dLmxlbmd0aDt2YXIgYT1uZXcgSW50MzJBcnJheShlK3IrdGhpcy5rZXlzLmxlbmd0aCt0aGlzLmJib3hlcy5sZW5ndGgpO2FbMF09dGhpcy5leHRlbnQsYVsxXT10aGlzLm4sYVsyXT10aGlzLnBhZGRpbmc7Zm9yKHZhciBvPWUscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD10W3NdO2FbaStzXT1vLGEuc2V0KGwsbyksbys9bC5sZW5ndGh9cmV0dXJuIGFbaSt0Lmxlbmd0aF09byxhLnNldCh0aGlzLmtleXMsbyksbys9dGhpcy5rZXlzLmxlbmd0aCxhW2krdC5sZW5ndGgrMV09byxhLnNldCh0aGlzLmJib3hlcyxvKSxvKz10aGlzLmJib3hlcy5sZW5ndGgsYS5idWZmZXJ9fSx7fV0sMjg2OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImlzLWJyb3dzZXIiKTtuPSJmdW5jdGlvbiI9PXR5cGVvZiByLm1hdGNoTWVkaWE/IXIubWF0Y2hNZWRpYSgiKGhvdmVyOiBub25lKSIpLm1hdGNoZXM6aSxlLmV4cG9ydHM9bn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjoyOTJ9XSwyODc6W2Z1bmN0aW9uKHQsZSxyKXtyLnJlYWQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9OCppLW4tMSxsPSgxPDxzKS0xLHU9bD4+MSxjPS03LGg9cj9pLTE6MCxmPXI/LTE6MSxkPXRbZStoXTtmb3IoaCs9ZixhPWQmKDE8PC1jKS0xLGQ+Pj0tYyxjKz1zO2M+MDthPTI1NiphK3RbZStoXSxoKz1mLGMtPTgpO2ZvcihvPWEmKDE8PC1jKS0xLGE+Pj0tYyxjKz1uO2M+MDtvPTI1NipvK3RbZStoXSxoKz1mLGMtPTgpO2lmKDA9PT1hKWE9MS11O2Vsc2V7aWYoYT09PWwpcmV0dXJuIG8/TmFOOjEvMCooZD8tMToxKTtvKz1NYXRoLnBvdygyLG4pLGEtPXV9cmV0dXJuKGQ/LTE6MSkqbypNYXRoLnBvdygyLGEtbil9LHIud3JpdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvLHMsbCx1PTgqYS1pLTEsYz0oMTw8dSktMSxoPWM+PjEsZj0yMz09PWk/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGQ9bj8wOmEtMSxwPW4/MTotMSxtPWU8MHx8MD09PWUmJjEvZTwwPzE6MDtmb3IoZT1NYXRoLmFicyhlKSxpc05hTihlKXx8ZT09PTEvMD8ocz1pc05hTihlKT8xOjAsbz1jKToobz1NYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSxlKihsPU1hdGgucG93KDIsLW8pKTwxJiYoby0tLGwqPTIpLGUrPW8raD49MT9mL2w6ZipNYXRoLnBvdygyLDEtaCksZSpsPj0yJiYobysrLGwvPTIpLG8raD49Yz8ocz0wLG89Yyk6bytoPj0xPyhzPShlKmwtMSkqTWF0aC5wb3coMixpKSxvKz1oKToocz1lKk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLGkpLG89MCkpO2k+PTg7dFtyK2RdPTI1NSZzLGQrPXAscy89MjU2LGktPTgpO2ZvcihvPW88PGl8cyx1Kz1pO3U+MDt0W3IrZF09MjU1Jm8sZCs9cCxvLz0yNTYsdS09OCk7dFtyK2QtcF18PTEyOCptfX0se31dLDI4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnZlcnRpY2VzPXQsdGhpcy5hZGphY2VudD1lLHRoaXMuYm91bmRhcnk9cix0aGlzLmxhc3RWaXNpdGVkPS0xfWZ1bmN0aW9uIGkodCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmNlbGw9ZSx0aGlzLmluZGV4PXJ9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBjKHQudmVydGljZXMsZS52ZXJ0aWNlcyl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9WyJmdW5jdGlvbiBvcmllbnQoKXt2YXIgdHVwbGU9dGhpcy50dXBsZTtyZXR1cm4gdGVzdCgiXSxyPTA7cjw9dDsrK3Ipcj4wJiZlLnB1c2goIiwiKSxlLnB1c2goInR1cGxlWyIsciwiXSIpO2UucHVzaCgiKX1yZXR1cm4gb3JpZW50Iik7dmFyIG49bmV3IEZ1bmN0aW9uKCJ0ZXN0IixlLmpvaW4oIiIpKSxpPXVbdCsxXTtyZXR1cm4gaXx8KGk9dSksbihpKX1mdW5jdGlvbiBzKHQsZSxyKXt0aGlzLmRpbWVuc2lvbj10LHRoaXMudmVydGljZXM9ZSx0aGlzLnNpbXBsaWNlcz1yLHRoaXMuaW50ZXJpb3I9ci5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuYm91bmRhcnl9KSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgbj0wO248PXQ7KytuKXRoaXMudHVwbGVbbl09dGhpcy52ZXJ0aWNlc1tuXTt2YXIgaT1oW3RdO2l8fChpPWhbdF09byh0KSksdGhpcy5vcmllbnQ9aX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3QgZCsxIHBvaW50cyIpO3ZhciBpPXRbMF0ubGVuZ3RoO2lmKHI8PWkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGlucHV0IGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgYT10LnNsaWNlKDAsaSsxKSxvPXUuYXBwbHkodm9pZCAwLGEpO2lmKDA9PT1vKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbm90IGluIGdlbmVyYWwgcG9zaXRpb24iKTtmb3IodmFyIGw9bmV3IEFycmF5KGkrMSksYz0wO2M8PWk7KytjKWxbY109YztvPDAmJihsWzBdPTEsbFsxXT0wKTtmb3IodmFyIGg9bmV3IG4obCxuZXcgQXJyYXkoaSsxKSwhMSksZj1oLmFkamFjZW50LGQ9bmV3IEFycmF5KGkrMiksYz0wO2M8PWk7KytjKXtmb3IodmFyIHA9bC5zbGljZSgpLG09MDttPD1pOysrbSltPT09YyYmKHBbbV09LTEpO3ZhciB2PXBbMF07cFswXT1wWzFdLHBbMV09djt2YXIgZz1uZXcgbihwLG5ldyBBcnJheShpKzEpLCEwKTtmW2NdPWcsZFtjXT1nfWRbaSsxXT1oO2Zvcih2YXIgYz0wO2M8PWk7KytjKWZvcih2YXIgcD1mW2NdLnZlcnRpY2VzLHk9ZltjXS5hZGphY2VudCxtPTA7bTw9aTsrK20pe3ZhciBiPXBbbV07aWYoYjwwKXlbbV09aDtlbHNlIGZvcih2YXIgeD0wO3g8PWk7Kyt4KWZbeF0udmVydGljZXMuaW5kZXhPZihiKTwwJiYoeVttXT1mW3hdKX1mb3IodmFyIF89bmV3IHMoaSxhLGQpLHc9ISFlLGM9aSsxO2M8cjsrK2MpXy5pbnNlcnQodFtjXSx3KTtyZXR1cm4gXy5ib3VuZGFyeSgpfWUuZXhwb3J0cz1sO3ZhciB1PXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGM9dCgic2ltcGxpY2lhbC1jb21wbGV4IikuY29tcGFyZUNlbGxzO24ucHJvdG90eXBlLmZsaXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZlcnRpY2VzWzBdO3RoaXMudmVydGljZXNbMF09dGhpcy52ZXJ0aWNlc1sxXSx0aGlzLnZlcnRpY2VzWzFdPXQ7dmFyIGU9dGhpcy5hZGphY2VudFswXTt0aGlzLmFkamFjZW50WzBdPXRoaXMuYWRqYWNlbnRbMV0sdGhpcy5hZGphY2VudFsxXT1lfTt2YXIgaD1bXSxmPXMucHJvdG90eXBlO2YuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLGk9dGhpcy50dXBsZSxhPXRoaXMudmVydGljZXMsbz1bdF07Zm9yKHQubGFzdFZpc2l0ZWQ9LW47by5sZW5ndGg+MDspe3Q9by5wb3AoKTtmb3IodmFyIHM9KHQudmVydGljZXMsdC5hZGphY2VudCksbD0wO2w8PXI7KytsKXt2YXIgdT1zW2xdO2lmKHUuYm91bmRhcnkmJiEodS5sYXN0VmlzaXRlZDw9LW4pKXtmb3IodmFyIGM9dS52ZXJ0aWNlcyxoPTA7aDw9cjsrK2gpe3ZhciBmPWNbaF07aVtoXT1mPDA/ZTphW2ZdfXZhciBkPXRoaXMub3JpZW50KCk7aWYoZD4wKXJldHVybiB1O3UubGFzdFZpc2l0ZWQ9LW4sMD09PWQmJm8ucHVzaCh1KX19fXJldHVybiBudWxsfSxmLndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLHU9cy5hZGphY2VudCxjPTA7Yzw9bjsrK2MpYVtjXT1pW2xbY11dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodmFyIGM9MDtjPD1uOysrYyl7dmFyIGg9dVtjXTtpZighKGgubGFzdFZpc2l0ZWQ+PXIpKXt2YXIgZj1hW2NdO2FbY109dDt2YXIgZD10aGlzLm9yaWVudCgpO2lmKGFbY109ZixkPDApe3M9aDtjb250aW51ZSB0fWguYm91bmRhcnk/aC5sYXN0VmlzaXRlZD0tcjpoLmxhc3RWaXNpdGVkPXJ9fXJldHVybn1yZXR1cm4gc30sZi5hZGRQZWFrcz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXMubGVuZ3RoLTEsbz10aGlzLmRpbWVuc2lvbixzPXRoaXMudmVydGljZXMsbD10aGlzLnR1cGxlLHU9dGhpcy5pbnRlcmlvcixjPXRoaXMuc2ltcGxpY2VzLGg9W2VdO2UubGFzdFZpc2l0ZWQ9cixlLnZlcnRpY2VzW2UudmVydGljZXMuaW5kZXhPZigtMSldPXIsZS5ib3VuZGFyeT0hMSx1LnB1c2goZSk7Zm9yKHZhciBmPVtdO2gubGVuZ3RoPjA7KXt2YXIgZT1oLnBvcCgpLGQ9ZS52ZXJ0aWNlcyxwPWUuYWRqYWNlbnQsbT1kLmluZGV4T2Yocik7aWYoIShtPDApKWZvcih2YXIgdj0wO3Y8PW87Kyt2KWlmKHYhPT1tKXt2YXIgZz1wW3ZdO2lmKGcuYm91bmRhcnkmJiEoZy5sYXN0VmlzaXRlZD49cikpe3ZhciB5PWcudmVydGljZXM7aWYoZy5sYXN0VmlzaXRlZCE9PS1yKXtmb3IodmFyIGI9MCx4PTA7eDw9bzsrK3gpeVt4XTwwPyhiPXgsbFt4XT10KTpsW3hdPXNbeVt4XV07dmFyIF89dGhpcy5vcmllbnQoKTtpZihfPjApe3lbYl09cixnLmJvdW5kYXJ5PSExLHUucHVzaChnKSxoLnB1c2goZyksZy5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfWcubGFzdFZpc2l0ZWQ9LXJ9dmFyIHc9Zy5hZGphY2VudCxNPWQuc2xpY2UoKSxrPXAuc2xpY2UoKSxBPW5ldyBuKE0saywhMCk7Yy5wdXNoKEEpO3ZhciBUPXcuaW5kZXhPZihlKTtpZighKFQ8MCkpe3dbVF09QSxrW21dPWcsTVt2XT0tMSxrW3ZdPWUscFt2XT1BLEEuZmxpcCgpO2Zvcih2YXIgeD0wO3g8PW87Kyt4KXt2YXIgUz1NW3hdO2lmKCEoUzwwfHxTPT09cikpe2Zvcih2YXIgRT1uZXcgQXJyYXkoby0xKSxMPTAsQz0wO0M8PW87KytDKXt2YXIgej1NW0NdO3o8MHx8Qz09PXh8fChFW0wrK109eil9Zi5wdXNoKG5ldyBpKEUsQSx4KSl9fX19fX1mLnNvcnQoYSk7Zm9yKHZhciB2PTA7disxPGYubGVuZ3RoO3YrPTIpe3ZhciBJPWZbdl0sRD1mW3YrMV0sUD1JLmluZGV4LE89RC5pbmRleDtQPDB8fE88MHx8KEkuY2VsbC5hZGphY2VudFtJLmluZGV4XT1ELmNlbGwsRC5jZWxsLmFkamFjZW50W0QuaW5kZXhdPUkuY2VsbCl9fSxmLmluc2VydD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMudmVydGljZXM7ci5wdXNoKHQpO3ZhciBuPXRoaXMud2Fsayh0LGUpO2lmKG4pe2Zvcih2YXIgaT10aGlzLmRpbWVuc2lvbixhPXRoaXMudHVwbGUsbz0wO288PWk7KytvKXt2YXIgcz1uLnZlcnRpY2VzW29dO2Fbb109czwwP3Q6cltzXX12YXIgbD10aGlzLm9yaWVudChhKTtsPDB8fCgwIT09bHx8KG49dGhpcy5oYW5kbGVCb3VuZGFyeURlZ2VuZXJhY3kobix0KSkpJiZ0aGlzLmFkZFBlYWtzKHQsbil9fSxmLmJvdW5kYXJ5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZGltZW5zaW9uLGU9W10scj10aGlzLnNpbXBsaWNlcyxuPXIubGVuZ3RoLGk9MDtpPG47KytpKXt2YXIgYT1yW2ldO2lmKGEuYm91bmRhcnkpe2Zvcih2YXIgbz1uZXcgQXJyYXkodCkscz1hLnZlcnRpY2VzLGw9MCx1PTAsYz0wO2M8PXQ7KytjKXNbY10+PTA/b1tsKytdPXNbY106dT0xJmM7aWYodT09PSgxJnQpKXt2YXIgaD1vWzBdO29bMF09b1sxXSxvWzFdPWh9ZS5wdXNoKG8pfX1yZXR1cm4gZX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDYsInNpbXBsaWNpYWwtY29tcGxleCI6NTE3fV0sMjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLm1pZD10LHRoaXMubGVmdD1lLHRoaXMucmlnaHQ9cix0aGlzLmxlZnRQb2ludHM9bix0aGlzLnJpZ2h0UG9pbnRzPWksdGhpcy5jb3VudD0oZT9lLmNvdW50OjApKyhyP3IuY291bnQ6MCkrbi5sZW5ndGh9ZnVuY3Rpb24gaSh0LGUpe3QubWlkPWUubWlkLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQubGVmdFBvaW50cz1lLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1lLnJpZ2h0UG9pbnRzLHQuY291bnQ9ZS5jb3VudH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9cChlKTt0Lm1pZD1yLm1pZCx0LmxlZnQ9ci5sZWZ0LHQucmlnaHQ9ci5yaWdodCx0LmxlZnRQb2ludHM9ci5sZWZ0UG9pbnRzLHQucmlnaHRQb2ludHM9ci5yaWdodFBvaW50cyx0LmNvdW50PXIuY291bnR9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKTtyLnB1c2goZSksYSh0LHIpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmludGVydmFscyhbXSksbj1yLmluZGV4T2YoZSk7cmV0dXJuIG48MD95OihyLnNwbGljZShuLDEpLGEodCxyKSxiKX1mdW5jdGlvbiBsKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoJiZ0W25dWzBdPD1lOysrbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiB1KHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgtMTtuPj0wJiZ0W25dWzFdPj1lOy0tbil7dmFyIGk9cih0W25dKTtpZihpKXJldHVybiBpfX1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBuPWUodFtyXSk7aWYobilyZXR1cm4gbn19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LWV9ZnVuY3Rpb24gZih0LGUpe3ZhciByPXRbMF0tZVswXTtyZXR1cm4gcnx8dFsxXS1lWzFdfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10WzFdLWVbMV07cmV0dXJuIHJ8fHRbMF0tZVswXX1mdW5jdGlvbiBwKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCh0W3JdWzBdLHRbcl1bMV0pO2Uuc29ydChoKTtmb3IodmFyIGk9ZVtlLmxlbmd0aD4+MV0sYT1bXSxvPVtdLHM9W10scj0wO3I8dC5sZW5ndGg7KytyKXt2YXIgbD10W3JdO2xbMV08aT9hLnB1c2gobCk6aTxsWzBdP28ucHVzaChsKTpzLnB1c2gobCl9dmFyIHU9cyxjPXMuc2xpY2UoKTtyZXR1cm4gdS5zb3J0KGYpLGMuc29ydChkKSxuZXcgbihpLHAoYSkscChvKSx1LGMpfWZ1bmN0aW9uIG0odCl7dGhpcy5yb290PXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IG0odCYmMCE9PXQubGVuZ3RoP3AodCk6bnVsbCl9dmFyIGc9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSx5PTAsYj0xO2UuZXhwb3J0cz12O3ZhciB4PW4ucHJvdG90eXBlO3guaW50ZXJ2YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0LnB1c2guYXBwbHkodCx0aGlzLmxlZnRQb2ludHMpLHRoaXMubGVmdCYmdGhpcy5sZWZ0LmludGVydmFscyh0KSx0aGlzLnJpZ2h0JiZ0aGlzLnJpZ2h0LmludGVydmFscyh0KSx0fSx4Lmluc2VydD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdW50LXRoaXMubGVmdFBvaW50cy5sZW5ndGg7aWYodGhpcy5jb3VudCs9MSx0WzFdPHRoaXMubWlkKXRoaXMubGVmdD80Kih0aGlzLmxlZnQuY291bnQrMSk+MyooZSsxKT9vKHRoaXMsdCk6dGhpcy5sZWZ0Lmluc2VydCh0KTp0aGlzLmxlZnQ9cChbdF0pO2Vsc2UgaWYodFswXT50aGlzLm1pZCl0aGlzLnJpZ2h0PzQqKHRoaXMucmlnaHQuY291bnQrMSk+MyooZSsxKT9vKHRoaXMsdCk6dGhpcy5yaWdodC5pbnNlcnQodCk6dGhpcy5yaWdodD1wKFt0XSk7ZWxzZXt2YXIgcj1nLmdlKHRoaXMubGVmdFBvaW50cyx0LGYpLG49Zy5nZSh0aGlzLnJpZ2h0UG9pbnRzLHQsZCk7dGhpcy5sZWZ0UG9pbnRzLnNwbGljZShyLDAsdCksdGhpcy5yaWdodFBvaW50cy5zcGxpY2UobiwwLHQpfX0seC5yZW1vdmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHM7aWYodFsxXTx0aGlzLm1pZCl7aWYoIXRoaXMubGVmdClyZXR1cm4geTtpZig0Kih0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCk+MyooZS0xKSlyZXR1cm4gcyh0aGlzLHQpO3ZhciByPXRoaXMubGVmdC5yZW1vdmUodCk7cmV0dXJuIDI9PT1yPyh0aGlzLmxlZnQ9bnVsbCx0aGlzLmNvdW50LT0xLGIpOihyPT09YiYmKHRoaXMuY291bnQtPTEpLHIpfWlmKHRbMF0+dGhpcy5taWQpe2lmKCF0aGlzLnJpZ2h0KXJldHVybiB5O2lmKDQqKHRoaXMubGVmdD90aGlzLmxlZnQuY291bnQ6MCk+MyooZS0xKSlyZXR1cm4gcyh0aGlzLHQpO3ZhciByPXRoaXMucmlnaHQucmVtb3ZlKHQpO3JldHVybiAyPT09cj8odGhpcy5yaWdodD1udWxsLHRoaXMuY291bnQtPTEsYik6KHI9PT1iJiYodGhpcy5jb3VudC09MSkscil9aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PXQ/Mjp5O2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT10KXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgbj10aGlzLGE9dGhpcy5sZWZ0O2EucmlnaHQ7KW49YSxhPWEucmlnaHQ7aWYobj09PXRoaXMpYS5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIG89dGhpcy5sZWZ0LHI9dGhpcy5yaWdodDtuLmNvdW50LT1hLmNvdW50LG4ucmlnaHQ9YS5sZWZ0LGEubGVmdD1vLGEucmlnaHQ9cn1pKHRoaXMsYSksdGhpcy5jb3VudD0odGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKSsodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApK3RoaXMubGVmdFBvaW50cy5sZW5ndGh9ZWxzZSB0aGlzLmxlZnQ/aSh0aGlzLHRoaXMubGVmdCk6aSh0aGlzLHRoaXMucmlnaHQpO3JldHVybiBifWZvcih2YXIgbz1nLmdlKHRoaXMubGVmdFBvaW50cyx0LGYpO288dGhpcy5sZWZ0UG9pbnRzLmxlbmd0aCYmdGhpcy5sZWZ0UG9pbnRzW29dWzBdPT09dFswXTsrK28paWYodGhpcy5sZWZ0UG9pbnRzW29dPT09dCl7dGhpcy5jb3VudC09MSx0aGlzLmxlZnRQb2ludHMuc3BsaWNlKG8sMSk7Zm9yKHZhciByPWcuZ2UodGhpcy5yaWdodFBvaW50cyx0LGQpO3I8dGhpcy5yaWdodFBvaW50cy5sZW5ndGgmJnRoaXMucmlnaHRQb2ludHNbcl1bMV09PT10WzFdOysrcilpZih0aGlzLnJpZ2h0UG9pbnRzW3JdPT09dClyZXR1cm4gdGhpcy5yaWdodFBvaW50cy5zcGxpY2UociwxKSxifXJldHVybiB5fSx4LnF1ZXJ5UG9pbnQ9ZnVuY3Rpb24odCxlKXtpZih0PHRoaXMubWlkKXtpZih0aGlzLmxlZnQpe3ZhciByPXRoaXMubGVmdC5xdWVyeVBvaW50KHQsZSk7aWYocilyZXR1cm4gcn1yZXR1cm4gbCh0aGlzLmxlZnRQb2ludHMsdCxlKX1pZih0PnRoaXMubWlkKXtpZih0aGlzLnJpZ2h0KXt2YXIgcj10aGlzLnJpZ2h0LnF1ZXJ5UG9pbnQodCxlKTtpZihyKXJldHVybiByfXJldHVybiB1KHRoaXMucmlnaHRQb2ludHMsdCxlKX1yZXR1cm4gYyh0aGlzLmxlZnRQb2ludHMsZSl9LHgucXVlcnlJbnRlcnZhbD1mdW5jdGlvbih0LGUscil7aWYodDx0aGlzLm1pZCYmdGhpcy5sZWZ0KXt2YXIgbj10aGlzLmxlZnQucXVlcnlJbnRlcnZhbCh0LGUscik7aWYobilyZXR1cm4gbn1pZihlPnRoaXMubWlkJiZ0aGlzLnJpZ2h0KXt2YXIgbj10aGlzLnJpZ2h0LnF1ZXJ5SW50ZXJ2YWwodCxlLHIpO2lmKG4pcmV0dXJuIG59cmV0dXJuIGU8dGhpcy5taWQ/bCh0aGlzLmxlZnRQb2ludHMsZSxyKTp0PnRoaXMubWlkP3UodGhpcy5yaWdodFBvaW50cyx0LHIpOmModGhpcy5sZWZ0UG9pbnRzLHIpfTt2YXIgXz1tLnByb3RvdHlwZTtfLmluc2VydD1mdW5jdGlvbih0KXt0aGlzLnJvb3Q/dGhpcy5yb290Lmluc2VydCh0KTp0aGlzLnJvb3Q9bmV3IG4odFswXSxudWxsLG51bGwsW3RdLFt0XSl9LF8ucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucm9vdCl7dmFyIGU9dGhpcy5yb290LnJlbW92ZSh0KTtyZXR1cm4gMj09PWUmJih0aGlzLnJvb3Q9bnVsbCksZSE9PXl9cmV0dXJuITF9LF8ucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5UG9pbnQodCxlKX0sXy5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD1lJiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKHQsZSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sImNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiaW50ZXJ2YWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NjR9XSwyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2U9ZXx8bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcillW3Rbcl1dPXI7cmV0dXJuIGV9ZS5leHBvcnRzPW59LHt9XSwyOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09cjtyZXR1cm4gZX1lLmV4cG9ydHM9bn0se31dLDI5MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz0hMH0se31dLDI5MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih0KX1mdW5jdGlvbiBpKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZSYmbih0LnNsaWNlKDAsMCkpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmKG4odCl8fGkodCl8fCEhdC5faXNCdWZmZXIpfX0se31dLDI5NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHR8fCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yfHwodD1uYXZpZ2F0b3IudXNlckFnZW50KSx0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKSwic3RyaW5nIj09dHlwZW9mIHQmJigvKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXC4oYnJvd3NlcnxsaW5rKXx2b2RhZm9uZXx3YXB8d2luZG93cyAoY2V8cGhvbmUpfHhkYXx4aWluby9pLnRlc3QodCl8fC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcLShufHUpfGM1NVwvfGNhcGl8Y2N3YXxjZG1cLXxjZWxsfGNodG18Y2xkY3xjbWRcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1wtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlwtNXxnXC1tb3xnbyhcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcLShtfHB8dCl8aGVpXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1wtY3xodChjKFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFwtfFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFwvKXxrbG9ufGtwdCB8a3djXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFwvKGt8bHx1KXw1MHw1NHxcLVthLXddKXxsaWJ3fGx5bnh8bTFcLXd8bTNnYXxtNTBcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFwtZ3xxYVwtYXxxYygwN3wxMnwyMXwzMnw2MHxcLVsyLTddfGlcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFwtfG9vfHBcLSl8c2RrXC98c2UoYyhcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcLXxzaGFyfHNpZShcLXxtKXxza1wtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXC18dlwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXC18dGRnXC18dGVsKGl8bSl8dGltXC18dFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cLXxtM3xtNSl8dHhcLTl8dXAoXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXC18eW91cnx6ZXRvfHp0ZVwtL2kudGVzdCh0LnN1YnN0cigwLDQpKSl9ZS5leHBvcnRzPW59LHt9XSwyOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1uLmNhbGwodCkmJihudWxsPT09KGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpKXx8ZT09PU9iamVjdC5nZXRQcm90b3R5cGVPZih7fSkpfX0se31dLDI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSl7cmV0dXJuIG5ldyBpKHQsZSxyLG4sYSl9ZnVuY3Rpb24gaSh0LGUscixuLGkpe2U9ZXx8YSxyPXJ8fG8saT1pfHxBcnJheSx0aGlzLm5vZGVTaXplPW58fDY0LHRoaXMucG9pbnRzPXQsdGhpcy5pZHM9bmV3IGkodC5sZW5ndGgpLHRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpO2Zvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKXRoaXMuaWRzW2xdPWwsdGhpcy5jb29yZHNbMipsXT1lKHRbbF0pLHRoaXMuY29vcmRzWzIqbCsxXT1yKHRbbF0pO3ModGhpcy5pZHMsdGhpcy5jb29yZHMsdGhpcy5ub2RlU2l6ZSwwLHRoaXMuaWRzLmxlbmd0aC0xLDApfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdFsxXX12YXIgcz10KCIuL3NvcnQiKSxsPXQoIi4vcmFuZ2UiKSx1PXQoIi4vd2l0aGluIik7ZS5leHBvcnRzPW4saS5wcm90b3R5cGU9e3JhbmdlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBsKHRoaXMuaWRzLHRoaXMuY29vcmRzLHQsZSxyLG4sdGhpcy5ub2RlU2l6ZSl9LHdpdGhpbjpmdW5jdGlvbih0LGUscil7cmV0dXJuIHUodGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9fX0seyIuL3JhbmdlIjoyOTcsIi4vc29ydCI6Mjk4LCIuL3dpdGhpbiI6Mjk5fV0sMjk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzLGwsdT1bMCx0Lmxlbmd0aC0xLDBdLGM9W107dS5sZW5ndGg7KXt2YXIgaD11LnBvcCgpLGY9dS5wb3AoKSxkPXUucG9wKCk7aWYoZi1kPD1vKWZvcih2YXIgcD1kO3A8PWY7cCsrKXM9ZVsyKnBdLGw9ZVsyKnArMV0scz49ciYmczw9aSYmbD49biYmbDw9YSYmYy5wdXNoKHRbcF0pO2Vsc2V7dmFyIG09TWF0aC5mbG9vcigoZCtmKS8yKTtzPWVbMiptXSxsPWVbMiptKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJmMucHVzaCh0W21dKTt2YXIgdj0oaCsxKSUyOygwPT09aD9yPD1zOm48PWwpJiYodS5wdXNoKGQpLHUucHVzaChtLTEpLHUucHVzaCh2KSksKDA9PT1oP2k+PXM6YT49bCkmJih1LnB1c2gobSsxKSx1LnB1c2goZiksdS5wdXNoKHYpKX19cmV0dXJuIGN9ZS5leHBvcnRzPW59LHt9XSwyOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixhLG8scyl7aWYoIShvLWE8PXIpKXt2YXIgbD1NYXRoLmZsb29yKChhK28pLzIpO2kodCxlLGwsYSxvLHMlMiksbih0LGUscixhLGwtMSxzKzEpLG4odCxlLHIsbCsxLG8scysxKX19ZnVuY3Rpb24gaSh0LGUscixuLG8scyl7Zm9yKDtvPm47KXtpZihvLW4+NjAwKXt2YXIgbD1vLW4rMSx1PXItbisxLGM9TWF0aC5sb2cobCksaD0uNSpNYXRoLmV4cCgyKmMvMyksZj0uNSpNYXRoLnNxcnQoYypoKihsLWgpL2wpKih1LWwvMjwwPy0xOjEpO2kodCxlLHIsTWF0aC5tYXgobixNYXRoLmZsb29yKHItdSpoL2wrZikpLE1hdGgubWluKG8sTWF0aC5mbG9vcihyKyhsLXUpKmgvbCtmKSkscyl9dmFyIGQ9ZVsyKnIrc10scD1uLG09bztmb3IoYSh0LGUsbixyKSxlWzIqbytzXT5kJiZhKHQsZSxuLG8pO3A8bTspe2ZvcihhKHQsZSxwLG0pLHArKyxtLS07ZVsyKnArc108ZDspcCsrO2Zvcig7ZVsyKm0rc10+ZDspbS0tfWVbMipuK3NdPT09ZD9hKHQsZSxuLG0pOihtKyssYSh0LGUsbSxvKSksbTw9ciYmKG49bSsxKSxyPD1tJiYobz1tLTEpfX1mdW5jdGlvbiBhKHQsZSxyLG4pe28odCxyLG4pLG8oZSwyKnIsMipuKSxvKGUsMipyKzEsMipuKzEpfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1lLmV4cG9ydHM9bn0se31dLDI5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSxvKXtmb3IodmFyIHM9WzAsdC5sZW5ndGgtMSwwXSxsPVtdLHU9YSphO3MubGVuZ3RoOyl7dmFyIGM9cy5wb3AoKSxoPXMucG9wKCksZj1zLnBvcCgpO2lmKGgtZjw9bylmb3IodmFyIGQ9ZjtkPD1oO2QrKylpKGVbMipkXSxlWzIqZCsxXSxyLG4pPD11JiZsLnB1c2godFtkXSk7ZWxzZXt2YXIgcD1NYXRoLmZsb29yKChmK2gpLzIpLG09ZVsyKnBdLHY9ZVsyKnArMV07aShtLHYscixuKTw9dSYmbC5wdXNoKHRbcF0pO3ZhciBnPShjKzEpJTI7KDA9PT1jP3ItYTw9bTpuLWE8PXYpJiYocy5wdXNoKGYpLHMucHVzaChwLTEpLHMucHVzaChnKSksKDA9PT1jP3IrYT49bTpuK2E+PXYpJiYocy5wdXNoKHArMSkscy5wdXNoKGgpLHMucHVzaChnKSl9fXJldHVybiBsfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfWUuZXhwb3J0cz1ufSx7fV0sMzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcjtpZihoKHQpKXt2YXIgbCx1PXQuc3RvcHMmJiJvYmplY3QiPT10eXBlb2YgdC5zdG9wc1swXVswXSxjPXV8fHZvaWQgMCE9PXQucHJvcGVydHksZj11fHwhYyxkPXQudHlwZXx8ZXx8ImV4cG9uZW50aWFsIjtpZigiZXhwb25lbnRpYWwiPT09ZClsPW87ZWxzZSBpZigiaW50ZXJ2YWwiPT09ZClsPWE7ZWxzZSBpZigiY2F0ZWdvcmljYWwiPT09ZClsPWk7ZWxzZXtpZigiaWRlbnRpdHkiIT09ZCl0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZnVuY3Rpb24gdHlwZSAiJytkKyciJyk7bD1zfWlmKHUpe2Zvcih2YXIgcD17fSxtPVtdLHY9MDt2PHQuc3RvcHMubGVuZ3RoO3YrKyl7dmFyIGc9dC5zdG9wc1t2XTt2b2lkIDA9PT1wW2dbMF0uem9vbV0mJihwW2dbMF0uem9vbV09e3pvb206Z1swXS56b29tLHR5cGU6dC50eXBlLHByb3BlcnR5OnQucHJvcGVydHksc3RvcHM6W119KSxwW2dbMF0uem9vbV0uc3RvcHMucHVzaChbZ1swXS52YWx1ZSxnWzFdXSl9Zm9yKHZhciB5IGluIHApbS5wdXNoKFtwW3ldLnpvb20sbihwW3ldKV0pO3I9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbyh7c3RvcHM6bSxiYXNlOnQuYmFzZX0sZSkoZSxyKX0sci5pc0ZlYXR1cmVDb25zdGFudD0hMSxyLmlzWm9vbUNvbnN0YW50PSExfWVsc2UgZj8ocj1mdW5jdGlvbihlKXtyZXR1cm4gbCh0LGUpfSxyLmlzRmVhdHVyZUNvbnN0YW50PSEwLHIuaXNab29tQ29uc3RhbnQ9ITEpOihyPWZ1bmN0aW9uKGUscil7cmV0dXJuIGwodCxyW3QucHJvcGVydHldKX0sci5pc0ZlYXR1cmVDb25zdGFudD0hMSxyLmlzWm9vbUNvbnN0YW50PSEwKX1lbHNlIHI9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sci5pc0ZlYXR1cmVDb25zdGFudD0hMCxyLmlzWm9vbUNvbnN0YW50PSEwO3JldHVybiByfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPHQuc3RvcHMubGVuZ3RoO3IrKylpZihlPT09dC5zdG9wc1tyXVswXSlyZXR1cm4gdC5zdG9wc1tyXVsxXTtyZXR1cm4gdC5zdG9wc1swXVsxXX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjx0LnN0b3BzLmxlbmd0aCYmIShlPHQuc3RvcHNbcl1bMF0pO3IrKyk7cmV0dXJuIHQuc3RvcHNbTWF0aC5tYXgoci0xLDApXVsxXX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPXZvaWQgMCE9PXQuYmFzZT90LmJhc2U6MSxuPTA7Oyl7aWYobj49dC5zdG9wcy5sZW5ndGgpYnJlYWs7aWYoZTw9dC5zdG9wc1tuXVswXSlicmVhaztuKyt9cmV0dXJuIDA9PT1uP3Quc3RvcHNbbl1bMV06bj09PXQuc3RvcHMubGVuZ3RoP3Quc3RvcHNbbi0xXVsxXTpsKGUscix0LnN0b3BzW24tMV1bMF0sdC5zdG9wc1tuXVswXSx0LnN0b3BzW24tMV1bMV0sdC5zdG9wc1tuXVsxXSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBlfWZ1bmN0aW9uIGwodCxlLHIsbixpLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP2Z1bmN0aW9uKCl7dmFyIG89aS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSxzPWEuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyk7cmV0dXJuIGwodCxlLHIsbixvLHMpfTppLmxlbmd0aD9jKHQsZSxyLG4saSxhKTp1KHQsZSxyLG4saSxhKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxhKXt2YXIgbyxzPW4tcixsPXQtcjtyZXR1cm4gbz0xPT09ZT9sL3M6KE1hdGgucG93KGUsbCktMSkvKE1hdGgucG93KGUscyktMSksaSooMS1vKSthKm99ZnVuY3Rpb24gYyh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MDtzPGkubGVuZ3RoO3MrKylvW3NdPXUodCxlLHIsbixpW3NdLGFbc10pO3JldHVybiBvfWZ1bmN0aW9uIGgodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYodC5zdG9wc3x8ImlkZW50aXR5Ij09PXQudHlwZSl9ZS5leHBvcnRzLmlzRnVuY3Rpb25EZWZpbml0aW9uPWgsZS5leHBvcnRzLmludGVycG9sYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0LCJleHBvbmVudGlhbCIpfSxlLmV4cG9ydHNbInBpZWNld2lzZS1jb25zdGFudCJdPWZ1bmN0aW9uKHQpe3JldHVybiBuKHQsImludGVydmFsIil9fSx7fV0sMzAxOltmdW5jdGlvbih0LGUscil7dCgicGF0aCIpO2UuZXhwb3J0cz17ZGVidWc6e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBsb3dwIHZlYzQgdV9jb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7XG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIHN0ZXAoMzI3NjcuMCwgYV9wb3MueCksIDEpO1xufVxuIn0sZmlsbDp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3IgKiBvcGFjaXR5O1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBjb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xufVxuIn0sY2lyY2xlOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxudmFyeWluZyB2ZWMyIHZfZXh0cnVkZTtcbnZhcnlpbmcgbG93cCBmbG9hdCB2X2FudGlhbGlhc2JsdXI7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcblxuICAgIGZsb2F0IHQgPSBzbW9vdGhzdGVwKDEuMCAtIG1heChibHVyLCB2X2FudGlhbGlhc2JsdXIpLCAxLjAsIGxlbmd0aCh2X2V4dHJ1ZGUpKTtcbiAgICBnbF9GcmFnQ29sb3IgPSBjb2xvciAqICgxLjAgLSB0KSAqIG9wYWNpdHk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gYm9vbCB1X3NjYWxlX3dpdGhfbWFwO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcbnVuaWZvcm0gZmxvYXQgdV9kZXZpY2VwaXhlbHJhdGlvO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG52YXJ5aW5nIHZlYzIgdl9leHRydWRlO1xudmFyeWluZyBsb3dwIGZsb2F0IHZfYW50aWFsaWFzYmx1cjtcblxudm9pZCBtYWluKHZvaWQpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIHZlYzQgY29sb3JcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgLy8gdW5lbmNvZGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgdGhhdCB3ZSBzbnVjayBpbnRvIHRoZSBhX3BvcyB2ZWN0b3JcbiAgICB2X2V4dHJ1ZGUgPSB2ZWMyKG1vZChhX3BvcywgMi4wKSAqIDIuMCAtIDEuMCk7XG5cbiAgICB2ZWMyIGV4dHJ1ZGUgPSB2X2V4dHJ1ZGUgKiByYWRpdXMgKiB1X2V4dHJ1ZGVfc2NhbGU7XG4gICAgLy8gbXVsdGlwbHkgYV9wb3MgYnkgMC41LCBzaW5jZSB3ZSBoYWQgaXQgKiAyIGluIG9yZGVyIHRvIHNuZWFrXG4gICAgLy8gaW4gZXh0cnVzaW9uIGRhdGFcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChmbG9vcihhX3BvcyAqIDAuNSksIDAsIDEpO1xuXG4gICAgaWYgKHVfc2NhbGVfd2l0aF9tYXApIHtcbiAgICAgICAgZ2xfUG9zaXRpb24ueHkgKz0gZXh0cnVkZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbF9Qb3NpdGlvbi54eSArPSBleHRydWRlICogZ2xfUG9zaXRpb24udztcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgbWluaW11bSBibHVyIGRpc3RhbmNlIHRoYXQgc2VydmVzIGFzIGEgZmF1eC1hbnRpYWxpYXNpbmcgZm9yXG4gICAgLy8gdGhlIGNpcmNsZS4gc2luY2UgYmx1ciBpcyBhIHJhdGlvIG9mIHRoZSBjaXJjbGUncyBzaXplIGFuZCB0aGUgaW50ZW50IGlzXG4gICAgLy8gdG8ga2VlcCB0aGUgYmx1ciBhdCByb3VnaGx5IDFweCwgdGhlIHR3byBhcmUgaW52ZXJzZWx5IHJlbGF0ZWQuXG4gICAgdl9hbnRpYWxpYXNibHVyID0gMS4wIC8gdV9kZXZpY2VwaXhlbHJhdGlvIC8gcmFkaXVzO1xufVxuIn0sbGluZTp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGxvd3AgdmVjNCB1X2NvbG9yO1xudW5pZm9ybSBsb3dwIGZsb2F0IHVfb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdV9ibHVyO1xuXG52YXJ5aW5nIHZlYzIgdl9saW5ld2lkdGg7XG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfbGluZXdpZHRoLnM7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X2xpbmV3aWR0aC50KSBvciB3aGVuIGZhZGluZyBvdXRcbiAgICAvLyAodl9saW5ld2lkdGgucylcbiAgICBmbG9hdCBibHVyID0gdV9ibHVyICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfbGluZXdpZHRoLnQgLSBibHVyKSwgdl9saW5ld2lkdGgucyAtIGRpc3QpIC8gYmx1ciwgMC4wLCAxLjApO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvciAqIChhbHBoYSAqIHVfb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbi8vIGZsb29yKDEyNyAvIDIpID09IDYzLjBcbi8vIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWl0ZXIgbGltaXQgaXMgMi4wIGF0IHRoZSBtb21lbnQuIHRoZSBleHRydWRlIG5vcm1hbCBpc1xuLy8gc3RvcmVkIGluIGEgYnl0ZSAoLTEyOC4uMTI3KS4gd2Ugc2NhbGUgcmVndWxhciBub3JtYWxzIHVwIHRvIGxlbmd0aCA2MywgYnV0XG4vLyB0aGVyZSBhcmUgYWxzbyBcInNwZWNpYWxcIiBub3JtYWxzIHRoYXQgaGF2ZSBhIGJpZ2dlciBsZW5ndGggKG9mIHVwIHRvIDEyNiBpblxuLy8gdGhpcyBjYXNlKS5cbi8vICNkZWZpbmUgc2NhbGUgNjMuMFxuI2RlZmluZSBzY2FsZSAwLjAxNTg3MzAxNlxuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcbmF0dHJpYnV0ZSB2ZWM0IGFfZGF0YTtcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcmF0aW87XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9saW5ld2lkdGg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9nYXB3aWR0aDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2FudGlhbGlhc2luZztcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2V4dHJhO1xudW5pZm9ybSBtYXQyIHVfYW50aWFsaWFzaW5nbWF0cml4O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfb2Zmc2V0O1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYmx1cjtcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfbGluZXdpZHRoO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBhX2V4dHJ1ZGUgPSBhX2RhdGEueHkgLSAxMjguMDtcbiAgICBmbG9hdCBhX2RpcmVjdGlvbiA9IG1vZChhX2RhdGEueiwgNC4wKSAtIDEuMDtcblxuICAgIC8vIFdlIHN0b3JlIHRoZSB0ZXh0dXJlIG5vcm1hbHMgaW4gdGhlIG1vc3QgaW5zaWduaWZpY2FudCBiaXRcbiAgICAvLyB0cmFuc2Zvcm0geSBzbyB0aGF0IDAgPT4gLTEgYW5kIDEgPT4gMVxuICAgIC8vIEluIHRoZSB0ZXh0dXJlIG5vcm1hbCwgeCBpcyAwIGlmIHRoZSBub3JtYWwgcG9pbnRzIHN0cmFpZ2h0IHVwL2Rvd24gYW5kIDEgaWYgaXQncyBhIHJvdW5kIGNhcFxuICAgIC8vIHkgaXMgMSBpZiB0aGUgbm9ybWFsIHBvaW50cyB1cCwgYW5kIC0xIGlmIGl0IHBvaW50cyBkb3duXG4gICAgbWVkaXVtcCB2ZWMyIG5vcm1hbCA9IG1vZChhX3BvcywgMi4wKTtcbiAgICBub3JtYWwueSA9IHNpZ24obm9ybWFsLnkgLSAwLjUpO1xuICAgIHZfbm9ybWFsID0gbm9ybWFsO1xuXG4gICAgZmxvYXQgaW5zZXQgPSB1X2dhcHdpZHRoICsgKHVfZ2Fwd2lkdGggPiAwLjAgPyB1X2FudGlhbGlhc2luZyA6IDAuMCk7XG4gICAgZmxvYXQgb3V0c2V0ID0gdV9nYXB3aWR0aCArIHVfbGluZXdpZHRoICogKHVfZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApICsgdV9hbnRpYWxpYXNpbmc7XG5cbiAgICAvLyBTY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBkb3duIHRvIGEgbm9ybWFsIGFuZCB0aGVuIHVwIGJ5IHRoZSBsaW5lIHdpZHRoXG4gICAgLy8gb2YgdGhpcyB2ZXJ0ZXguXG4gICAgbWVkaXVtcCB2ZWMyIGRpc3QgPSBvdXRzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IHdoZW4gZHJhd2luZyBhIGxpbmUgdGhhdCBpcyB0byB0aGUgc2lkZSBvZiB0aGUgYWN0dWFsIGxpbmUuXG4gICAgLy8gV2UgZG8gdGhpcyBieSBjcmVhdGluZyBhIHZlY3RvciB0aGF0IHBvaW50cyB0b3dhcmRzIHRoZSBleHRydWRlLCBidXQgcm90YXRlXG4gICAgLy8gaXQgd2hlbiB3ZSdyZSBkcmF3aW5nIHJvdW5kIGVuZCBwb2ludHMgKGFfZGlyZWN0aW9uID0gLTEgb3IgMSkgc2luY2UgdGhlaXJcbiAgICAvLyBleHRydWRlIHZlY3RvciBwb2ludHMgaW4gYW5vdGhlciBkaXJlY3Rpb24uXG4gICAgbWVkaXVtcCBmbG9hdCB1ID0gMC41ICogYV9kaXJlY3Rpb247XG4gICAgbWVkaXVtcCBmbG9hdCB0ID0gMS4wIC0gYWJzKHUpO1xuICAgIG1lZGl1bXAgdmVjMiBvZmZzZXQgPSB1X29mZnNldCAqIGFfZXh0cnVkZSAqIHNjYWxlICogbm9ybWFsLnkgKiBtYXQyKHQsIC11LCB1LCB0KTtcblxuICAgIC8vIFJlbW92ZSB0aGUgdGV4dHVyZSBub3JtYWwgYml0IG9mIHRoZSBwb3NpdGlvbiBiZWZvcmUgc2NhbGluZyBpdCB3aXRoIHRoZVxuICAgIC8vIG1vZGVsL3ZpZXcgbWF0cml4LlxuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGZsb29yKGFfcG9zICogMC41KSArIChvZmZzZXQgKyBkaXN0KSAvIHVfcmF0aW8sIDAuMCwgMS4wKTtcblxuICAgIC8vIHBvc2l0aW9uIG9mIHkgb24gdGhlIHNjcmVlblxuICAgIGZsb2F0IHkgPSBnbF9Qb3NpdGlvbi55IC8gZ2xfUG9zaXRpb24udztcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiB0aGUgeSBkaXJlY3Rpb24gYnkgdGhlIHRpbHRcbiAgICBmbG9hdCBzcXVpc2hfc2NhbGUgPSBsZW5ndGgoYV9leHRydWRlKSAvIGxlbmd0aCh1X2FudGlhbGlhc2luZ21hdHJpeCAqIGFfZXh0cnVkZSk7XG5cbiAgICAvLyBob3cgbXVjaCBmZWF0dXJlcyBhcmUgc3F1aXNoZWQgaW4gYWxsIGRpcmVjdGlvbnMgYnkgdGhlIHBlcnNwZWN0aXZlbmVzc1xuICAgIGZsb2F0IHBlcnNwZWN0aXZlX3NjYWxlID0gMS4wIC8gKDEuMCAtIG1pbih5ICogdV9leHRyYSwgMC45KSk7XG5cbiAgICB2X2xpbmV3aWR0aCA9IHZlYzIob3V0c2V0LCBpbnNldCk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IHBlcnNwZWN0aXZlX3NjYWxlICogc3F1aXNoX3NjYWxlO1xufVxuIn0sbGluZXBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X2JsdXI7XG5cbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5fc2l6ZV9hO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIGZsb2F0IHVfZmFkZTtcbnVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9ub3JtYWw7XG52YXJ5aW5nIHZlYzIgdl9saW5ld2lkdGg7XG52YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO1xudmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuXG52b2lkIG1haW4oKSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBvZiB0aGUgcGl4ZWwgZnJvbSB0aGUgbGluZSBpbiBwaXhlbHMuXG4gICAgZmxvYXQgZGlzdCA9IGxlbmd0aCh2X25vcm1hbCkgKiB2X2xpbmV3aWR0aC5zO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBhbnRpYWxpYXNpbmcgZmFkZSBmYWN0b3IuIFRoaXMgaXMgZWl0aGVyIHdoZW4gZmFkaW5nIGluXG4gICAgLy8gdGhlIGxpbmUgaW4gY2FzZSBvZiBhbiBvZmZzZXQgbGluZSAodl9saW5ld2lkdGgudCkgb3Igd2hlbiBmYWRpbmcgb3V0XG4gICAgLy8gKHZfbGluZXdpZHRoLnMpXG4gICAgZmxvYXQgYmx1ciA9IHVfYmx1ciAqIHZfZ2FtbWFfc2NhbGU7XG4gICAgZmxvYXQgYWxwaGEgPSBjbGFtcChtaW4oZGlzdCAtICh2X2xpbmV3aWR0aC50IC0gYmx1ciksIHZfbGluZXdpZHRoLnMgLSBkaXN0KSAvIGJsdXIsIDAuMCwgMS4wKTtcblxuICAgIGZsb2F0IHhfYSA9IG1vZCh2X2xpbmVzb2ZhciAvIHVfcGF0dGVybl9zaXplX2EueCwgMS4wKTtcbiAgICBmbG9hdCB4X2IgPSBtb2Qodl9saW5lc29mYXIgLyB1X3BhdHRlcm5fc2l6ZV9iLngsIDEuMCk7XG4gICAgZmxvYXQgeV9hID0gMC41ICsgKHZfbm9ybWFsLnkgKiB2X2xpbmV3aWR0aC5zIC8gdV9wYXR0ZXJuX3NpemVfYS55KTtcbiAgICBmbG9hdCB5X2IgPSAwLjUgKyAodl9ub3JtYWwueSAqIHZfbGluZXdpZHRoLnMgLyB1X3BhdHRlcm5fc2l6ZV9iLnkpO1xuICAgIHZlYzIgcG9zX2EgPSBtaXgodV9wYXR0ZXJuX3RsX2EsIHVfcGF0dGVybl9icl9hLCB2ZWMyKHhfYSwgeV9hKSk7XG4gICAgdmVjMiBwb3NfYiA9IG1peCh1X3BhdHRlcm5fdGxfYiwgdV9wYXR0ZXJuX2JyX2IsIHZlYzIoeF9iLCB5X2IpKTtcblxuICAgIHZlYzQgY29sb3IgPSBtaXgodGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19hKSwgdGV4dHVyZTJEKHVfaW1hZ2UsIHBvc19iKSwgdV9mYWRlKTtcblxuICAgIGFscGhhICo9IHVfb3BhY2l0eTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yICogYWxwaGE7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsCnZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG4vLyBmbG9vcigxMjcgLyAyKSA9PSA2My4wXG4vLyB0aGUgbWF4aW11bSBhbGxvd2VkIG1pdGVyIGxpbWl0IGlzIDIuMCBhdCB0aGUgbW9tZW50LiB0aGUgZXh0cnVkZSBub3JtYWwgaXNcbi8vIHN0b3JlZCBpbiBhIGJ5dGUgKC0xMjguLjEyNykuIHdlIHNjYWxlIHJlZ3VsYXIgbm9ybWFscyB1cCB0byBsZW5ndGggNjMsIGJ1dFxuLy8gdGhlcmUgYXJlIGFsc28gXCJzcGVjaWFsXCIgbm9ybWFscyB0aGF0IGhhdmUgYSBiaWdnZXIgbGVuZ3RoIChvZiB1cCB0byAxMjYgaW5cbi8vIHRoaXMgY2FzZSkuXG4vLyAjZGVmaW5lIHNjYWxlIDYzLjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcblxuLy8gV2Ugc2NhbGUgdGhlIGRpc3RhbmNlIGJlZm9yZSBhZGRpbmcgaXQgdG8gdGhlIGJ1ZmZlcnMgc28gdGhhdCB3ZSBjYW4gc3RvcmVcbi8vIGxvbmcgZGlzdGFuY2VzIGZvciBsb25nIHNlZ21lbnRzLiBVc2UgdGhpcyB2YWx1ZSB0byB1bnNjYWxlIHRoZSBkaXN0YW5jZS5cbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfbGluZXdpZHRoO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfZ2Fwd2lkdGg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9hbnRpYWxpYXNpbmc7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9leHRyYTtcbnVuaWZvcm0gbWF0MiB1X2FudGlhbGlhc2luZ21hdHJpeDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X29mZnNldDtcblxudmFyeWluZyB2ZWMyIHZfbm9ybWFsO1xudmFyeWluZyB2ZWMyIHZfbGluZXdpZHRoO1xudmFyeWluZyBmbG9hdCB2X2xpbmVzb2ZhcjtcbnZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTtcblxudm9pZCBtYWluKCkge1xuICAgIHZlYzIgYV9leHRydWRlID0gYV9kYXRhLnh5IC0gMTI4LjA7XG4gICAgZmxvYXQgYV9kaXJlY3Rpb24gPSBtb2QoYV9kYXRhLnosIDQuMCkgLSAxLjA7XG4gICAgZmxvYXQgYV9saW5lc29mYXIgPSAoZmxvb3IoYV9kYXRhLnogLyA0LjApICsgYV9kYXRhLncgKiA2NC4wKSAqIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbiAgICAvLyBXZSBzdG9yZSB0aGUgdGV4dHVyZSBub3JtYWxzIGluIHRoZSBtb3N0IGluc2lnbmlmaWNhbnQgYml0XG4gICAgLy8gdHJhbnNmb3JtIHkgc28gdGhhdCAwID0+IC0xIGFuZCAxID0+IDFcbiAgICAvLyBJbiB0aGUgdGV4dHVyZSBub3JtYWwsIHggaXMgMCBpZiB0aGUgbm9ybWFsIHBvaW50cyBzdHJhaWdodCB1cC9kb3duIGFuZCAxIGlmIGl0J3MgYSByb3VuZCBjYXBcbiAgICAvLyB5IGlzIDEgaWYgdGhlIG5vcm1hbCBwb2ludHMgdXAsIGFuZCAtMSBpZiBpdCBwb2ludHMgZG93blxuICAgIG1lZGl1bXAgdmVjMiBub3JtYWwgPSBtb2QoYV9wb3MsIDIuMCk7XG4gICAgbm9ybWFsLnkgPSBzaWduKG5vcm1hbC55IC0gMC41KTtcbiAgICB2X25vcm1hbCA9IG5vcm1hbDtcblxuICAgIGZsb2F0IGluc2V0ID0gdV9nYXB3aWR0aCArICh1X2dhcHdpZHRoID4gMC4wID8gdV9hbnRpYWxpYXNpbmcgOiAwLjApO1xuICAgIGZsb2F0IG91dHNldCA9IHVfZ2Fwd2lkdGggKyB1X2xpbmV3aWR0aCAqICh1X2dhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSArIHVfYW50aWFsaWFzaW5nO1xuXG4gICAgLy8gU2NhbGUgdGhlIGV4dHJ1c2lvbiB2ZWN0b3IgZG93biB0byBhIG5vcm1hbCBhbmQgdGhlbiB1cCBieSB0aGUgbGluZSB3aWR0aFxuICAgIC8vIG9mIHRoaXMgdmVydGV4LlxuICAgIG1lZGl1bXAgdmVjMiBkaXN0ID0gb3V0c2V0ICogYV9leHRydWRlICogc2NhbGU7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG9mZnNldCB3aGVuIGRyYXdpbmcgYSBsaW5lIHRoYXQgaXMgdG8gdGhlIHNpZGUgb2YgdGhlIGFjdHVhbCBsaW5lLlxuICAgIC8vIFdlIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSB2ZWN0b3IgdGhhdCBwb2ludHMgdG93YXJkcyB0aGUgZXh0cnVkZSwgYnV0IHJvdGF0ZVxuICAgIC8vIGl0IHdoZW4gd2UncmUgZHJhd2luZyByb3VuZCBlbmQgcG9pbnRzIChhX2RpcmVjdGlvbiA9IC0xIG9yIDEpIHNpbmNlIHRoZWlyXG4gICAgLy8gZXh0cnVkZSB2ZWN0b3IgcG9pbnRzIGluIGFub3RoZXIgZGlyZWN0aW9uLlxuICAgIG1lZGl1bXAgZmxvYXQgdSA9IDAuNSAqIGFfZGlyZWN0aW9uO1xuICAgIG1lZGl1bXAgZmxvYXQgdCA9IDEuMCAtIGFicyh1KTtcbiAgICBtZWRpdW1wIHZlYzIgb2Zmc2V0ID0gdV9vZmZzZXQgKiBhX2V4dHJ1ZGUgKiBzY2FsZSAqIG5vcm1hbC55ICogbWF0Mih0LCAtdSwgdSwgdCk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRleHR1cmUgbm9ybWFsIGJpdCBvZiB0aGUgcG9zaXRpb24gYmVmb3JlIHNjYWxpbmcgaXQgd2l0aCB0aGVcbiAgICAvLyBtb2RlbC92aWV3IG1hdHJpeC5cbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChmbG9vcihhX3BvcyAqIDAuNSkgKyAob2Zmc2V0ICsgZGlzdCkgLyB1X3JhdGlvLCAwLjAsIDEuMCk7XG4gICAgdl9saW5lc29mYXIgPSBhX2xpbmVzb2ZhcjtcblxuICAgIC8vIHBvc2l0aW9uIG9mIHkgb24gdGhlIHNjcmVlblxuICAgIGZsb2F0IHkgPSBnbF9Qb3NpdGlvbi55IC8gZ2xfUG9zaXRpb24udztcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiB0aGUgeSBkaXJlY3Rpb24gYnkgdGhlIHRpbHRcbiAgICBmbG9hdCBzcXVpc2hfc2NhbGUgPSBsZW5ndGgoYV9leHRydWRlKSAvIGxlbmd0aCh1X2FudGlhbGlhc2luZ21hdHJpeCAqIGFfZXh0cnVkZSk7XG5cbiAgICAvLyBob3cgbXVjaCBmZWF0dXJlcyBhcmUgc3F1aXNoZWQgaW4gYWxsIGRpcmVjdGlvbnMgYnkgdGhlIHBlcnNwZWN0aXZlbmVzc1xuICAgIGZsb2F0IHBlcnNwZWN0aXZlX3NjYWxlID0gMS4wIC8gKDEuMCAtIG1pbih5ICogdV9leHRyYSwgMC45KSk7XG5cbiAgICB2X2xpbmV3aWR0aCA9IHZlYzIob3V0c2V0LCBpbnNldCk7XG4gICAgdl9nYW1tYV9zY2FsZSA9IHBlcnNwZWN0aXZlX3NjYWxlICogc3F1aXNoX3NjYWxlO1xufVxuIn0sbGluZXNkZnBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBsb3dwIHZlYzQgdV9jb2xvcjtcbnVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7XG5cbnVuaWZvcm0gZmxvYXQgdV9ibHVyO1xudW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTtcbnVuaWZvcm0gZmxvYXQgdV9zZGZnYW1tYTtcbnVuaWZvcm0gZmxvYXQgdV9taXg7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X2xpbmV3aWR0aDtcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xudmFyeWluZyB2ZWMyIHZfdGV4X2I7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIG9mIHRoZSBwaXhlbCBmcm9tIHRoZSBsaW5lIGluIHBpeGVscy5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfbm9ybWFsKSAqIHZfbGluZXdpZHRoLnM7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGFudGlhbGlhc2luZyBmYWRlIGZhY3Rvci4gVGhpcyBpcyBlaXRoZXIgd2hlbiBmYWRpbmcgaW5cbiAgICAvLyB0aGUgbGluZSBpbiBjYXNlIG9mIGFuIG9mZnNldCBsaW5lICh2X2xpbmV3aWR0aC50KSBvciB3aGVuIGZhZGluZyBvdXRcbiAgICAvLyAodl9saW5ld2lkdGgucylcbiAgICBmbG9hdCBibHVyID0gdV9ibHVyICogdl9nYW1tYV9zY2FsZTtcbiAgICBmbG9hdCBhbHBoYSA9IGNsYW1wKG1pbihkaXN0IC0gKHZfbGluZXdpZHRoLnQgLSBibHVyKSwgdl9saW5ld2lkdGgucyAtIGRpc3QpIC8gYmx1ciwgMC4wLCAxLjApO1xuXG4gICAgZmxvYXQgc2RmZGlzdF9hID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4X2EpLmE7XG4gICAgZmxvYXQgc2RmZGlzdF9iID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4X2IpLmE7XG4gICAgZmxvYXQgc2RmZGlzdCA9IG1peChzZGZkaXN0X2EsIHNkZmRpc3RfYiwgdV9taXgpO1xuICAgIGFscGhhICo9IHNtb290aHN0ZXAoMC41IC0gdV9zZGZnYW1tYSwgMC41ICsgdV9zZGZnYW1tYSwgc2RmZGlzdCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yICogKGFscGhhICogdV9vcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuLy8gZmxvb3IoMTI3IC8gMikgPT0gNjMuMFxuLy8gdGhlIG1heGltdW0gYWxsb3dlZCBtaXRlciBsaW1pdCBpcyAyLjAgYXQgdGhlIG1vbWVudC4gdGhlIGV4dHJ1ZGUgbm9ybWFsIGlzXG4vLyBzdG9yZWQgaW4gYSBieXRlICgtMTI4Li4xMjcpLiB3ZSBzY2FsZSByZWd1bGFyIG5vcm1hbHMgdXAgdG8gbGVuZ3RoIDYzLCBidXRcbi8vIHRoZXJlIGFyZSBhbHNvIFwic3BlY2lhbFwiIG5vcm1hbHMgdGhhdCBoYXZlIGEgYmlnZ2VyIGxlbmd0aCAob2YgdXAgdG8gMTI2IGluXG4vLyB0aGlzIGNhc2UpLlxuLy8gI2RlZmluZSBzY2FsZSA2My4wXG4jZGVmaW5lIHNjYWxlIDAuMDE1ODczMDE2XG5cbi8vIFdlIHNjYWxlIHRoZSBkaXN0YW5jZSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBidWZmZXJzIHNvIHRoYXQgd2UgY2FuIHN0b3JlXG4vLyBsb25nIGRpc3RhbmNlcyBmb3IgbG9uZyBzZWdtZW50cy4gVXNlIHRoaXMgdmFsdWUgdG8gdW5zY2FsZSB0aGUgZGlzdGFuY2UuXG4jZGVmaW5lIExJTkVfRElTVEFOQ0VfU0NBTEUgMi4wXG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbztcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2xpbmV3aWR0aDtcbnVuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X2dhcHdpZHRoO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYW50aWFsaWFzaW5nO1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybnNjYWxlX2E7XG51bmlmb3JtIGZsb2F0IHVfdGV4X3lfYTtcbnVuaWZvcm0gdmVjMiB1X3BhdHRlcm5zY2FsZV9iO1xudW5pZm9ybSBmbG9hdCB1X3RleF95X2I7XG51bmlmb3JtIGZsb2F0IHVfZXh0cmE7XG51bmlmb3JtIG1hdDIgdV9hbnRpYWxpYXNpbmdtYXRyaXg7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9vZmZzZXQ7XG5cbnZhcnlpbmcgdmVjMiB2X25vcm1hbDtcbnZhcnlpbmcgdmVjMiB2X2xpbmV3aWR0aDtcbnZhcnlpbmcgdmVjMiB2X3RleF9hO1xudmFyeWluZyB2ZWMyIHZfdGV4X2I7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfZXh0cnVkZSA9IGFfZGF0YS54eSAtIDEyOC4wO1xuICAgIGZsb2F0IGFfZGlyZWN0aW9uID0gbW9kKGFfZGF0YS56LCA0LjApIC0gMS4wO1xuICAgIGZsb2F0IGFfbGluZXNvZmFyID0gKGZsb29yKGFfZGF0YS56IC8gNC4wKSArIGFfZGF0YS53ICogNjQuMCkgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4gICAgLy8gV2Ugc3RvcmUgdGhlIHRleHR1cmUgbm9ybWFscyBpbiB0aGUgbW9zdCBpbnNpZ25pZmljYW50IGJpdFxuICAgIC8vIHRyYW5zZm9ybSB5IHNvIHRoYXQgMCA9PiAtMSBhbmQgMSA9PiAxXG4gICAgLy8gSW4gdGhlIHRleHR1cmUgbm9ybWFsLCB4IGlzIDAgaWYgdGhlIG5vcm1hbCBwb2ludHMgc3RyYWlnaHQgdXAvZG93biBhbmQgMSBpZiBpdCdzIGEgcm91bmQgY2FwXG4gICAgLy8geSBpcyAxIGlmIHRoZSBub3JtYWwgcG9pbnRzIHVwLCBhbmQgLTEgaWYgaXQgcG9pbnRzIGRvd25cbiAgICBtZWRpdW1wIHZlYzIgbm9ybWFsID0gbW9kKGFfcG9zLCAyLjApO1xuICAgIG5vcm1hbC55ID0gc2lnbihub3JtYWwueSAtIDAuNSk7XG4gICAgdl9ub3JtYWwgPSBub3JtYWw7XG5cbiAgICBmbG9hdCBpbnNldCA9IHVfZ2Fwd2lkdGggKyAodV9nYXB3aWR0aCA+IDAuMCA/IHVfYW50aWFsaWFzaW5nIDogMC4wKTtcbiAgICBmbG9hdCBvdXRzZXQgPSB1X2dhcHdpZHRoICsgdV9saW5ld2lkdGggKiAodV9nYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkgKyB1X2FudGlhbGlhc2luZztcblxuICAgIC8vIFNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIGRvd24gdG8gYSBub3JtYWwgYW5kIHRoZW4gdXAgYnkgdGhlIGxpbmUgd2lkdGhcbiAgICAvLyBvZiB0aGlzIHZlcnRleC5cbiAgICBtZWRpdW1wIHZlYzIgZGlzdCA9IG91dHNldCAqIGFfZXh0cnVkZSAqIHNjYWxlO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBvZmZzZXQgd2hlbiBkcmF3aW5nIGEgbGluZSB0aGF0IGlzIHRvIHRoZSBzaWRlIG9mIHRoZSBhY3R1YWwgbGluZS5cbiAgICAvLyBXZSBkbyB0aGlzIGJ5IGNyZWF0aW5nIGEgdmVjdG9yIHRoYXQgcG9pbnRzIHRvd2FyZHMgdGhlIGV4dHJ1ZGUsIGJ1dCByb3RhdGVcbiAgICAvLyBpdCB3aGVuIHdlJ3JlIGRyYXdpbmcgcm91bmQgZW5kIHBvaW50cyAoYV9kaXJlY3Rpb24gPSAtMSBvciAxKSBzaW5jZSB0aGVpclxuICAgIC8vIGV4dHJ1ZGUgdmVjdG9yIHBvaW50cyBpbiBhbm90aGVyIGRpcmVjdGlvbi5cbiAgICBtZWRpdW1wIGZsb2F0IHUgPSAwLjUgKiBhX2RpcmVjdGlvbjtcbiAgICBtZWRpdW1wIGZsb2F0IHQgPSAxLjAgLSBhYnModSk7XG4gICAgbWVkaXVtcCB2ZWMyIG9mZnNldCA9IHVfb2Zmc2V0ICogYV9leHRydWRlICogc2NhbGUgKiBub3JtYWwueSAqIG1hdDIodCwgLXUsIHUsIHQpO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB0ZXh0dXJlIG5vcm1hbCBiaXQgb2YgdGhlIHBvc2l0aW9uIGJlZm9yZSBzY2FsaW5nIGl0IHdpdGggdGhlXG4gICAgLy8gbW9kZWwvdmlldyBtYXRyaXguXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoZmxvb3IoYV9wb3MgKiAwLjUpICsgKG9mZnNldCArIGRpc3QpIC8gdV9yYXRpbywgMC4wLCAxLjApO1xuXG4gICAgdl90ZXhfYSA9IHZlYzIoYV9saW5lc29mYXIgKiB1X3BhdHRlcm5zY2FsZV9hLngsIG5vcm1hbC55ICogdV9wYXR0ZXJuc2NhbGVfYS55ICsgdV90ZXhfeV9hKTtcbiAgICB2X3RleF9iID0gdmVjMihhX2xpbmVzb2ZhciAqIHVfcGF0dGVybnNjYWxlX2IueCwgbm9ybWFsLnkgKiB1X3BhdHRlcm5zY2FsZV9iLnkgKyB1X3RleF95X2IpO1xuXG4gICAgLy8gcG9zaXRpb24gb2YgeSBvbiB0aGUgc2NyZWVuXG4gICAgZmxvYXQgeSA9IGdsX1Bvc2l0aW9uLnkgLyBnbF9Qb3NpdGlvbi53O1xuXG4gICAgLy8gaG93IG11Y2ggZmVhdHVyZXMgYXJlIHNxdWlzaGVkIGluIHRoZSB5IGRpcmVjdGlvbiBieSB0aGUgdGlsdFxuICAgIGZsb2F0IHNxdWlzaF9zY2FsZSA9IGxlbmd0aChhX2V4dHJ1ZGUpIC8gbGVuZ3RoKHVfYW50aWFsaWFzaW5nbWF0cml4ICogYV9leHRydWRlKTtcblxuICAgIC8vIGhvdyBtdWNoIGZlYXR1cmVzIGFyZSBzcXVpc2hlZCBpbiBhbGwgZGlyZWN0aW9ucyBieSB0aGUgcGVyc3BlY3RpdmVuZXNzXG4gICAgZmxvYXQgcGVyc3BlY3RpdmVfc2NhbGUgPSAxLjAgLyAoMS4wIC0gbWluKHkgKiB1X2V4dHJhLCAwLjkpKTtcblxuICAgIHZfbGluZXdpZHRoID0gdmVjMihvdXRzZXQsIGluc2V0KTtcbiAgICB2X2dhbW1hX3NjYWxlID0gcGVyc3BlY3RpdmVfc2NhbGUgKiBzcXVpc2hfc2NhbGU7XG59XG4ifSxvdXRsaW5lOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZhcnlpbmcgdmVjMiB2X3Bvcztcblxudm9pZCBtYWluKCkge1xuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgdmVjNCBvdXRsaW5lX2NvbG9yXG4gICAgI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcbiAgICBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAoMS4wLCAwLjAsIGRpc3QpO1xuICAgIGdsX0ZyYWdDb2xvciA9IG91dGxpbmVfY29sb3IgKiAoYWxwaGEgKiBvcGFjaXR5KTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gdmVjMiB1X3dvcmxkO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IG91dGxpbmVfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG5cbnZvaWQgbWFpbigpIHtcbiAgICAjcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIHZlYzQgb3V0bGluZV9jb2xvclxuICAgICNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuXG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgIHZfcG9zID0gKGdsX1Bvc2l0aW9uLnh5IC8gZ2xfUG9zaXRpb24udyArIDEuMCkgLyAyLjAgKiB1X3dvcmxkO1xufVxuIn0sb3V0bGluZXBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xudmFyeWluZyB2ZWMyIHZfcG9zO1xuXG52b2lkIG1haW4oKSB7XG4gICAgdmVjMiBpbWFnZWNvb3JkID0gbW9kKHZfcG9zX2EsIDEuMCk7XG4gICAgdmVjMiBwb3MgPSBtaXgodV9wYXR0ZXJuX3RsX2EsIHVfcGF0dGVybl9icl9hLCBpbWFnZWNvb3JkKTtcbiAgICB2ZWM0IGNvbG9yMSA9IHRleHR1cmUyRCh1X2ltYWdlLCBwb3MpO1xuXG4gICAgdmVjMiBpbWFnZWNvb3JkX2IgPSBtb2Qodl9wb3NfYiwgMS4wKTtcbiAgICB2ZWMyIHBvczIgPSBtaXgodV9wYXR0ZXJuX3RsX2IsIHVfcGF0dGVybl9icl9iLCBpbWFnZWNvb3JkX2IpO1xuICAgIHZlYzQgY29sb3IyID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvczIpO1xuXG4gICAgLy8gZmluZCBkaXN0YW5jZSB0byBvdXRsaW5lIGZvciBhbHBoYSBpbnRlcnBvbGF0aW9uXG5cbiAgICBmbG9hdCBkaXN0ID0gbGVuZ3RoKHZfcG9zIC0gZ2xfRnJhZ0Nvb3JkLnh5KTtcbiAgICBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAoMS4wLCAwLjAsIGRpc3QpO1xuICAgIFxuXG4gICAgZ2xfRnJhZ0NvbG9yID0gbWl4KGNvbG9yMSwgY29sb3IyLCB1X21peCkgKiBhbHBoYSAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfd29ybGQ7XG5cbnZhcnlpbmcgdmVjMiB2X3Bvc19hO1xudmFyeWluZyB2ZWMyIHZfcG9zX2I7XG52YXJ5aW5nIHZlYzIgdl9wb3M7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSk7XG4gICAgdmVjMiBzY2FsZWRfc2l6ZV9hID0gdV9zY2FsZV9hICogdV9wYXR0ZXJuX3NpemVfYTtcbiAgICB2ZWMyIHNjYWxlZF9zaXplX2IgPSB1X3NjYWxlX2IgKiB1X3BhdHRlcm5fc2l6ZV9iO1xuXG4gICAgLy8gdGhlIGNvcnJlY3Qgb2Zmc2V0IG5lZWRzIHRvIGJlIGNhbGN1bGF0ZWQuXG4gICAgLy9cbiAgICAvLyBUaGUgb2Zmc2V0IGRlcGVuZHMgb24gaG93IG1hbnkgcGl4ZWxzIGFyZSBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW4gYW5kXG4gICAgLy8gdGhlIGVkZ2Ugb2YgdGhlIHRpbGU6XG4gICAgLy8gdmVjMiBvZmZzZXQgPSBtb2QocGl4ZWxfY29vcmQsIHNpemUpXG4gICAgLy9cbiAgICAvLyBBdCBoaWdoIHpvb20gbGV2ZWxzIHRoZXJlIGFyZSBhIHRvbiBvZiBwaXhlbHMgYmV0d2VlbiB0aGUgd29ybGQgb3JpZ2luXG4gICAgLy8gYW5kIHRoZSBlZGdlIG9mIHRoZSB0aWxlLiBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mXG4gICAgLy8gcHJlY2lzaW9uIGZvciBoaWdocCBmbG9hdHMuIFdlIG5lZWQgbW9yZSB0aGFuIHRoYXQuXG4gICAgLy9cbiAgICAvLyBUaGUgcGl4ZWxfY29vcmQgaXMgcGFzc2VkIGluIGFzIHR3byAxNiBiaXQgdmFsdWVzOlxuICAgIC8vIHBpeGVsX2Nvb3JkX3VwcGVyID0gZmxvb3IocGl4ZWxfY29vcmQgLyAyXjE2KVxuICAgIC8vIHBpeGVsX2Nvb3JkX2xvd2VyID0gbW9kKHBpeGVsX2Nvb3JkLCAyXjE2KVxuICAgIC8vXG4gICAgLy8gVGhlIG9mZnNldCBpcyBjYWxjdWxhdGVkIGluIGEgc2VyaWVzIG9mIHN0ZXBzIHRoYXQgc2hvdWxkIHByZXNlcnZlIHRoaXMgcHJlY2lzaW9uOlxuICAgIHZlYzIgb2Zmc2V0X2EgPSBtb2QobW9kKG1vZCh1X3BpeGVsX2Nvb3JkX3VwcGVyLCBzY2FsZWRfc2l6ZV9hKSAqIDI1Ni4wLCBzY2FsZWRfc2l6ZV9hKSAqIDI1Ni4wICsgdV9waXhlbF9jb29yZF9sb3dlciwgc2NhbGVkX3NpemVfYSk7XG4gICAgdmVjMiBvZmZzZXRfYiA9IG1vZChtb2QobW9kKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHNjYWxlZF9zaXplX2IpICogMjU2LjAsIHNjYWxlZF9zaXplX2IpICogMjU2LjAgKyB1X3BpeGVsX2Nvb3JkX2xvd2VyLCBzY2FsZWRfc2l6ZV9iKTtcblxuICAgIHZfcG9zX2EgPSAodV90aWxlX3VuaXRzX3RvX3BpeGVscyAqIGFfcG9zICsgb2Zmc2V0X2EpIC8gc2NhbGVkX3NpemVfYTtcbiAgICB2X3Bvc19iID0gKHVfdGlsZV91bml0c190b19waXhlbHMgKiBhX3BvcyArIG9mZnNldF9iKSAvIHNjYWxlZF9zaXplX2I7XG5cbiAgICB2X3BvcyA9IChnbF9Qb3NpdGlvbi54eSAvIGdsX1Bvc2l0aW9uLncgKyAxLjApIC8gMi4wICogdV93b3JsZDtcbn1cbiJ9LHBhdHRlcm46e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2I7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7XG51bmlmb3JtIGZsb2F0IHVfbWl4O1xuXG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3NfYTtcbnZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgICB2ZWMyIGltYWdlY29vcmQgPSBtb2Qodl9wb3NfYSwgMS4wKTtcbiAgICB2ZWMyIHBvcyA9IG1peCh1X3BhdHRlcm5fdGxfYSwgdV9wYXR0ZXJuX2JyX2EsIGltYWdlY29vcmQpO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHBvcyk7XG5cbiAgICB2ZWMyIGltYWdlY29vcmRfYiA9IG1vZCh2X3Bvc19iLCAxLjApO1xuICAgIHZlYzIgcG9zMiA9IG1peCh1X3BhdHRlcm5fdGxfYiwgdV9wYXR0ZXJuX2JyX2IsIGltYWdlY29vcmRfYik7XG4gICAgdmVjNCBjb2xvcjIgPSB0ZXh0dXJlMkQodV9pbWFnZSwgcG9zMik7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSBtaXgoY29sb3IxLCBjb2xvcjIsIHVfbWl4KSAqIHVfb3BhY2l0eTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xudW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7XG51bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3NpemVfYjtcbnVuaWZvcm0gdmVjMiB1X3BpeGVsX2Nvb3JkX3VwcGVyO1xudW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfYTtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZV9iO1xudW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO1xuXG5hdHRyaWJ1dGUgdmVjMiBhX3BvcztcblxudmFyeWluZyB2ZWMyIHZfcG9zX2E7XG52YXJ5aW5nIHZlYzIgdl9wb3NfYjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2ZWMyIHNjYWxlZF9zaXplX2EgPSB1X3NjYWxlX2EgKiB1X3BhdHRlcm5fc2l6ZV9hO1xuICAgIHZlYzIgc2NhbGVkX3NpemVfYiA9IHVfc2NhbGVfYiAqIHVfcGF0dGVybl9zaXplX2I7XG5cbiAgICAvLyB0aGUgY29ycmVjdCBvZmZzZXQgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZC5cbiAgICAvL1xuICAgIC8vIFRoZSBvZmZzZXQgZGVwZW5kcyBvbiBob3cgbWFueSBwaXhlbHMgYXJlIGJldHdlZW4gdGhlIHdvcmxkIG9yaWdpbiBhbmRcbiAgICAvLyB0aGUgZWRnZSBvZiB0aGUgdGlsZTpcbiAgICAvLyB2ZWMyIG9mZnNldCA9IG1vZChwaXhlbF9jb29yZCwgc2l6ZSlcbiAgICAvL1xuICAgIC8vIEF0IGhpZ2ggem9vbSBsZXZlbHMgdGhlcmUgYXJlIGEgdG9uIG9mIHBpeGVscyBiZXR3ZWVuIHRoZSB3b3JsZCBvcmlnaW5cbiAgICAvLyBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHRpbGUuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2ZcbiAgICAvLyBwcmVjaXNpb24gZm9yIGhpZ2hwIGZsb2F0cy4gV2UgbmVlZCBtb3JlIHRoYW4gdGhhdC5cbiAgICAvL1xuICAgIC8vIFRoZSBwaXhlbF9jb29yZCBpcyBwYXNzZWQgaW4gYXMgdHdvIDE2IGJpdCB2YWx1ZXM6XG4gICAgLy8gcGl4ZWxfY29vcmRfdXBwZXIgPSBmbG9vcihwaXhlbF9jb29yZCAvIDJeMTYpXG4gICAgLy8gcGl4ZWxfY29vcmRfbG93ZXIgPSBtb2QocGl4ZWxfY29vcmQsIDJeMTYpXG4gICAgLy9cbiAgICAvLyBUaGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQgaW4gYSBzZXJpZXMgb2Ygc3RlcHMgdGhhdCBzaG91bGQgcHJlc2VydmUgdGhpcyBwcmVjaXNpb246XG4gICAgdmVjMiBvZmZzZXRfYSA9IG1vZChtb2QobW9kKHVfcGl4ZWxfY29vcmRfdXBwZXIsIHNjYWxlZF9zaXplX2EpICogMjU2LjAsIHNjYWxlZF9zaXplX2EpICogMjU2LjAgKyB1X3BpeGVsX2Nvb3JkX2xvd2VyLCBzY2FsZWRfc2l6ZV9hKTtcbiAgICB2ZWMyIG9mZnNldF9iID0gbW9kKG1vZChtb2QodV9waXhlbF9jb29yZF91cHBlciwgc2NhbGVkX3NpemVfYikgKiAyNTYuMCwgc2NhbGVkX3NpemVfYikgKiAyNTYuMCArIHVfcGl4ZWxfY29vcmRfbG93ZXIsIHNjYWxlZF9zaXplX2IpO1xuXG4gICAgdl9wb3NfYSA9ICh1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzICogYV9wb3MgKyBvZmZzZXRfYSkgLyBzY2FsZWRfc2l6ZV9hO1xuICAgIHZfcG9zX2IgPSAodV90aWxlX3VuaXRzX3RvX3BpeGVscyAqIGFfcG9zICsgb2Zmc2V0X2IpIC8gc2NhbGVkX3NpemVfYjtcbn1cbiJ9LHJhc3Rlcjp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTA7XG51bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTE7XG51bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlMDtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UxO1xudmFyeWluZyB2ZWMyIHZfcG9zMDtcbnZhcnlpbmcgdmVjMiB2X3BvczE7XG5cbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2xvdztcbnVuaWZvcm0gZmxvYXQgdV9icmlnaHRuZXNzX2hpZ2g7XG5cbnVuaWZvcm0gZmxvYXQgdV9zYXR1cmF0aW9uX2ZhY3RvcjtcbnVuaWZvcm0gZmxvYXQgdV9jb250cmFzdF9mYWN0b3I7XG51bmlmb3JtIHZlYzMgdV9zcGluX3dlaWdodHM7XG5cbnZvaWQgbWFpbigpIHtcblxuICAgIC8vIHJlYWQgYW5kIGNyb3NzLWZhZGUgY29sb3JzIGZyb20gdGhlIG1haW4gYW5kIHBhcmVudCB0aWxlc1xuICAgIHZlYzQgY29sb3IwID0gdGV4dHVyZTJEKHVfaW1hZ2UwLCB2X3BvczApO1xuICAgIHZlYzQgY29sb3IxID0gdGV4dHVyZTJEKHVfaW1hZ2UxLCB2X3BvczEpO1xuICAgIHZlYzQgY29sb3IgPSBjb2xvcjAgKiB1X29wYWNpdHkwICsgY29sb3IxICogdV9vcGFjaXR5MTtcbiAgICB2ZWMzIHJnYiA9IGNvbG9yLnJnYjtcblxuICAgIC8vIHNwaW5cbiAgICByZ2IgPSB2ZWMzKFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy54eXopLFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy56eHkpLFxuICAgICAgICBkb3QocmdiLCB1X3NwaW5fd2VpZ2h0cy55engpKTtcblxuICAgIC8vIHNhdHVyYXRpb25cbiAgICBmbG9hdCBhdmVyYWdlID0gKGNvbG9yLnIgKyBjb2xvci5nICsgY29sb3IuYikgLyAzLjA7XG4gICAgcmdiICs9IChhdmVyYWdlIC0gcmdiKSAqIHVfc2F0dXJhdGlvbl9mYWN0b3I7XG5cbiAgICAvLyBjb250cmFzdFxuICAgIHJnYiA9IChyZ2IgLSAwLjUpICogdV9jb250cmFzdF9mYWN0b3IgKyAwLjU7XG5cbiAgICAvLyBicmlnaHRuZXNzXG4gICAgdmVjMyB1X2hpZ2hfdmVjID0gdmVjMyh1X2JyaWdodG5lc3NfbG93LCB1X2JyaWdodG5lc3NfbG93LCB1X2JyaWdodG5lc3NfbG93KTtcbiAgICB2ZWMzIHVfbG93X3ZlYyA9IHZlYzModV9icmlnaHRuZXNzX2hpZ2gsIHVfYnJpZ2h0bmVzc19oaWdoLCB1X2JyaWdodG5lc3NfaGlnaCk7XG5cbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KG1peCh1X2hpZ2hfdmVjLCB1X2xvd192ZWMsIHJnYiksIGNvbG9yLmEpO1xuXG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjApO1xuI2VuZGlmXG59XG4iLHZlcnRleFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG51bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7XG51bmlmb3JtIGZsb2F0IHVfc2NhbGVfcGFyZW50O1xudW5pZm9ybSBmbG9hdCB1X2J1ZmZlcl9zY2FsZTtcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuXG52YXJ5aW5nIHZlYzIgdl9wb3MwO1xudmFyeWluZyB2ZWMyIHZfcG9zMTtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zLCAwLCAxKTtcbiAgICB2X3BvczAgPSAoKChhX3RleHR1cmVfcG9zIC8gMzI3NjcuMCkgLSAwLjUpIC8gdV9idWZmZXJfc2NhbGUgKSArIDAuNTtcbiAgICB2X3BvczEgPSAodl9wb3MwICogdV9zY2FsZV9wYXJlbnQpICsgdV90bF9wYXJlbnQ7XG59XG4ifSxpY29uOntmcmFnbWVudFNvdXJjZToiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbnVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTtcbnVuaWZvcm0gc2FtcGxlcjJEIHVfZmFkZXRleHR1cmU7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzIgdl90ZXg7XG52YXJ5aW5nIHZlYzIgdl9mYWRlX3RleDtcblxudm9pZCBtYWluKCkge1xuICAgIGxvd3AgZmxvYXQgYWxwaGEgPSB0ZXh0dXJlMkQodV9mYWRldGV4dHVyZSwgdl9mYWRlX3RleCkuYSAqIHVfb3BhY2l0eTtcbiAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodV90ZXh0dXJlLCB2X3RleCkgKiBhbHBoYTtcblxuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wKTtcbiNlbmRpZlxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX29mZnNldDtcbmF0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7XG5hdHRyaWJ1dGUgdmVjNCBhX2RhdGE7XG5cblxuLy8gbWF0cml4IGlzIGZvciB0aGUgdmVydGV4IHBvc2l0aW9uLlxudW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuXG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV96b29tO1xudW5pZm9ybSBib29sIHVfcm90YXRlX3dpdGhfbWFwO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcblxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcblxudmFyeWluZyB2ZWMyIHZfdGV4O1xudmFyeWluZyB2ZWMyIHZfZmFkZV90ZXg7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfdGV4ID0gYV90ZXh0dXJlX3Bvcy54eTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbGFiZWxtaW56b29tID0gYV9kYXRhWzBdO1xuICAgIG1lZGl1bXAgdmVjMiBhX3pvb20gPSBhX2RhdGEucHE7XG4gICAgbWVkaXVtcCBmbG9hdCBhX21pbnpvb20gPSBhX3pvb21bMF07XG4gICAgbWVkaXVtcCBmbG9hdCBhX21heHpvb20gPSBhX3pvb21bMV07XG5cbiAgICAvLyB1X3pvb20gaXMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBhZGp1c3RlZCBmb3IgdGhlIGNoYW5nZSBpbiBmb250IHNpemVcbiAgICBtZWRpdW1wIGZsb2F0IHogPSAyLjAgLSBzdGVwKGFfbWluem9vbSwgdV96b29tKSAtICgxLjAgLSBzdGVwKGFfbWF4em9vbSwgdV96b29tKSk7XG5cbiAgICB2ZWMyIGV4dHJ1ZGUgPSB1X2V4dHJ1ZGVfc2NhbGUgKiAoYV9vZmZzZXQgLyA2NC4wKTtcbiAgICBpZiAodV9yb3RhdGVfd2l0aF9tYXApIHtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyBleHRydWRlLCAwLCAxKTtcbiAgICAgICAgZ2xfUG9zaXRpb24ueiArPSB6ICogZ2xfUG9zaXRpb24udztcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSkgKyB2ZWM0KGV4dHJ1ZGUsIDAsIDApO1xuICAgIH1cblxuICAgIHZfdGV4ID0gYV90ZXggLyB1X3RleHNpemU7XG4gICAgdl9mYWRlX3RleCA9IHZlYzIoYV9sYWJlbG1pbnpvb20gLyAyNTUuMCwgMC4wKTtcbn1cbiJ9LHNkZjp7ZnJhZ21lbnRTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2RlZmluZSBsb3dwXG4jZGVmaW5lIG1lZGl1bXBcbiNkZWZpbmUgaGlnaHBcbiNlbmRpZlxuXG51bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmU7XG51bmlmb3JtIHNhbXBsZXIyRCB1X2ZhZGV0ZXh0dXJlO1xudW5pZm9ybSBsb3dwIHZlYzQgdV9jb2xvcjtcbnVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9idWZmZXI7XG51bmlmb3JtIGxvd3AgZmxvYXQgdV9nYW1tYTtcblxudmFyeWluZyB2ZWMyIHZfdGV4O1xudmFyeWluZyB2ZWMyIHZfZmFkZV90ZXg7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBsb3dwIGZsb2F0IGRpc3QgPSB0ZXh0dXJlMkQodV90ZXh0dXJlLCB2X3RleCkuYTtcbiAgICBsb3dwIGZsb2F0IGZhZGVfYWxwaGEgPSB0ZXh0dXJlMkQodV9mYWRldGV4dHVyZSwgdl9mYWRlX3RleCkuYTtcbiAgICBsb3dwIGZsb2F0IGdhbW1hID0gdV9nYW1tYSAqIHZfZ2FtbWFfc2NhbGU7XG4gICAgbG93cCBmbG9hdCBhbHBoYSA9IHNtb290aHN0ZXAodV9idWZmZXIgLSBnYW1tYSwgdV9idWZmZXIgKyBnYW1tYSwgZGlzdCkgKiBmYWRlX2FscGhhO1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvciAqIChhbHBoYSAqIHVfb3BhY2l0eSk7XG5cbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCk7XG4jZW5kaWZcbn1cbiIsdmVydGV4U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jZGVmaW5lIGxvd3BcbiNkZWZpbmUgbWVkaXVtcFxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7XG5cbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zO1xuYXR0cmlidXRlIHZlYzIgYV9vZmZzZXQ7XG5hdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO1xuYXR0cmlidXRlIHZlYzQgYV9kYXRhO1xuXG5cbi8vIG1hdHJpeCBpcyBmb3IgdGhlIHZlcnRleCBwb3NpdGlvbi5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcblxudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfem9vbTtcbnVuaWZvcm0gYm9vbCB1X3JvdGF0ZV93aXRoX21hcDtcbnVuaWZvcm0gYm9vbCB1X3BpdGNoX3dpdGhfbWFwO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfcGl0Y2g7XG51bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9iZWFyaW5nO1xudW5pZm9ybSBtZWRpdW1wIGZsb2F0IHVfYXNwZWN0X3JhdGlvO1xudW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTtcblxudW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTtcblxudmFyeWluZyB2ZWMyIHZfdGV4O1xudmFyeWluZyB2ZWMyIHZfZmFkZV90ZXg7XG52YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIGFfdGV4ID0gYV90ZXh0dXJlX3Bvcy54eTtcbiAgICBtZWRpdW1wIGZsb2F0IGFfbGFiZWxtaW56b29tID0gYV9kYXRhWzBdO1xuICAgIG1lZGl1bXAgdmVjMiBhX3pvb20gPSBhX2RhdGEucHE7XG4gICAgbWVkaXVtcCBmbG9hdCBhX21pbnpvb20gPSBhX3pvb21bMF07XG4gICAgbWVkaXVtcCBmbG9hdCBhX21heHpvb20gPSBhX3pvb21bMV07XG5cbiAgICAvLyB1X3pvb20gaXMgdGhlIGN1cnJlbnQgem9vbSBsZXZlbCBhZGp1c3RlZCBmb3IgdGhlIGNoYW5nZSBpbiBmb250IHNpemVcbiAgICBtZWRpdW1wIGZsb2F0IHogPSAyLjAgLSBzdGVwKGFfbWluem9vbSwgdV96b29tKSAtICgxLjAgLSBzdGVwKGFfbWF4em9vbSwgdV96b29tKSk7XG5cbiAgICAvLyBwaXRjaC1hbGlnbm1lbnQ6IG1hcFxuICAgIC8vIHJvdGF0aW9uLWFsaWdubWVudDogbWFwIHwgdmlld3BvcnRcbiAgICBpZiAodV9waXRjaF93aXRoX21hcCkge1xuICAgICAgICBsb3dwIGZsb2F0IGFuZ2xlID0gdV9yb3RhdGVfd2l0aF9tYXAgPyAoYV9kYXRhWzFdIC8gMjU2LjAgKiAyLjAgKiBQSSkgOiB1X2JlYXJpbmc7XG4gICAgICAgIGxvd3AgZmxvYXQgYXNpbiA9IHNpbihhbmdsZSk7XG4gICAgICAgIGxvd3AgZmxvYXQgYWNvcyA9IGNvcyhhbmdsZSk7XG4gICAgICAgIG1hdDIgUm90YXRpb25NYXRyaXggPSBtYXQyKGFjb3MsIGFzaW4sIC0xLjAgKiBhc2luLCBhY29zKTtcbiAgICAgICAgdmVjMiBvZmZzZXQgPSBSb3RhdGlvbk1hdHJpeCAqIGFfb2Zmc2V0O1xuICAgICAgICB2ZWMyIGV4dHJ1ZGUgPSB1X2V4dHJ1ZGVfc2NhbGUgKiAob2Zmc2V0IC8gNjQuMCk7XG4gICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KGFfcG9zICsgZXh0cnVkZSwgMCwgMSk7XG4gICAgICAgIGdsX1Bvc2l0aW9uLnogKz0geiAqIGdsX1Bvc2l0aW9uLnc7XG4gICAgLy8gcGl0Y2gtYWxpZ25tZW50OiB2aWV3cG9ydFxuICAgIC8vIHJvdGF0aW9uLWFsaWdubWVudDogbWFwXG4gICAgfSBlbHNlIGlmICh1X3JvdGF0ZV93aXRoX21hcCkge1xuICAgICAgICAvLyBmb3Jlc2hvcnRlbmluZyBmYWN0b3IgdG8gYXBwbHkgb24gcGl0Y2hlZCBtYXBzXG4gICAgICAgIC8vIGFzIGEgbGFiZWwgZ29lcyBmcm9tIGhvcml6b250YWwgPD0+IHZlcnRpY2FsIGluIGFuZ2xlXG4gICAgICAgIC8vIGl0IGdvZXMgZnJvbSAwJSBmb3Jlc2hvcnRlbmluZyB0byB1cCB0byBhcm91bmQgNzAlIGZvcmVzaG9ydGVuaW5nXG4gICAgICAgIGxvd3AgZmxvYXQgcGl0Y2hmYWN0b3IgPSAxLjAgLSBjb3ModV9waXRjaCAqIHNpbih1X3BpdGNoICogMC43NSkpO1xuXG4gICAgICAgIGxvd3AgZmxvYXQgbGluZWFuZ2xlID0gYV9kYXRhWzFdIC8gMjU2LjAgKiAyLjAgKiBQSTtcblxuICAgICAgICAvLyB1c2UgdGhlIGxpbmVhbmdsZSB0byBwb3NpdGlvbiBwb2ludHMgYSxiIGFsb25nIHRoZSBsaW5lXG4gICAgICAgIC8vIHByb2plY3QgdGhlIHBvaW50cyBhbmQgY2FsY3VsYXRlIHRoZSBsYWJlbCBhbmdsZSBpbiBwcm9qZWN0ZWQgc3BhY2VcbiAgICAgICAgLy8gdGhpcyBjYWxjdWxhdGlvbiBhbGxvd3MgbGFiZWxzIHRvIGJlIHJlbmRlcmVkIHVuc2tld2VkIG9uIHBpdGNoZWQgbWFwc1xuICAgICAgICB2ZWM0IGEgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpO1xuICAgICAgICB2ZWM0IGIgPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyB2ZWMyKGNvcyhsaW5lYW5nbGUpLHNpbihsaW5lYW5nbGUpKSwgMCwgMSk7XG4gICAgICAgIGxvd3AgZmxvYXQgYW5nbGUgPSBhdGFuKChiWzFdL2JbM10gLSBhWzFdL2FbM10pL3VfYXNwZWN0X3JhdGlvLCBiWzBdL2JbM10gLSBhWzBdL2FbM10pO1xuICAgICAgICBsb3dwIGZsb2F0IGFzaW4gPSBzaW4oYW5nbGUpO1xuICAgICAgICBsb3dwIGZsb2F0IGFjb3MgPSBjb3MoYW5nbGUpO1xuICAgICAgICBtYXQyIFJvdGF0aW9uTWF0cml4ID0gbWF0MihhY29zLCAtMS4wICogYXNpbiwgYXNpbiwgYWNvcyk7XG5cbiAgICAgICAgdmVjMiBvZmZzZXQgPSBSb3RhdGlvbk1hdHJpeCAqICh2ZWMyKCgxLjAtcGl0Y2hmYWN0b3IpKyhwaXRjaGZhY3Rvcipjb3MoYW5nbGUqMi4wKSksIDEuMCkgKiBhX29mZnNldCk7XG4gICAgICAgIHZlYzIgZXh0cnVkZSA9IHVfZXh0cnVkZV9zY2FsZSAqIChvZmZzZXQgLyA2NC4wKTtcbiAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MsIDAsIDEpICsgdmVjNChleHRydWRlLCAwLCAwKTtcbiAgICAgICAgZ2xfUG9zaXRpb24ueiArPSB6ICogZ2xfUG9zaXRpb24udztcbiAgICAvLyBwaXRjaC1hbGlnbm1lbnQ6IHZpZXdwb3J0XG4gICAgLy8gcm90YXRpb24tYWxpZ25tZW50OiB2aWV3cG9ydFxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZlYzIgZXh0cnVkZSA9IHVfZXh0cnVkZV9zY2FsZSAqIChhX29mZnNldCAvIDY0LjApO1xuICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNChhX3BvcywgMCwgMSkgKyB2ZWM0KGV4dHJ1ZGUsIDAsIDApO1xuICAgIH1cblxuICAgIHZfZ2FtbWFfc2NhbGUgPSAoZ2xfUG9zaXRpb24udyAtIDAuNSk7XG5cbiAgICB2X3RleCA9IGFfdGV4IC8gdV90ZXhzaXplO1xuICAgIHZfZmFkZV90ZXggPSB2ZWMyKGFfbGFiZWxtaW56b29tIC8gMjU1LjAsIDAuMCk7XG59XG4ifSxjb2xsaXNpb25ib3g6e2ZyYWdtZW50U291cmNlOiIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxudW5pZm9ybSBmbG9hdCB1X3pvb207XG51bmlmb3JtIGZsb2F0IHVfbWF4em9vbTtcblxudmFyeWluZyBmbG9hdCB2X21heF96b29tO1xudmFyeWluZyBmbG9hdCB2X3BsYWNlbWVudF96b29tO1xuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCBhbHBoYSA9IDAuNTtcblxuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAxLjAsIDAuMCwgMS4wKSAqIGFscGhhO1xuXG4gICAgaWYgKHZfcGxhY2VtZW50X3pvb20gPiB1X3pvb20pIHtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApICogYWxwaGE7XG4gICAgfVxuXG4gICAgaWYgKHVfem9vbSA+PSB2X21heF96b29tKSB7XG4gICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMS4wKSAqIGFscGhhICogMC4yNTtcbiAgICB9XG5cbiAgICBpZiAodl9wbGFjZW1lbnRfem9vbSA+PSB1X21heHpvb20pIHtcbiAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMS4wLCAxLjApICogYWxwaGEgKiAwLjI7XG4gICAgfVxufVxuIix2ZXJ0ZXhTb3VyY2U6IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2Vsc2VcbiNkZWZpbmUgbG93cFxuI2RlZmluZSBtZWRpdW1wXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcblxuYXR0cmlidXRlIHZlYzIgYV9wb3M7XG5hdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7XG5hdHRyaWJ1dGUgdmVjMiBhX2RhdGE7XG5cbnVuaWZvcm0gbWF0NCB1X21hdHJpeDtcbnVuaWZvcm0gZmxvYXQgdV9zY2FsZTtcblxudmFyeWluZyBmbG9hdCB2X21heF96b29tO1xudmFyeWluZyBmbG9hdCB2X3BsYWNlbWVudF96b29tO1xuXG52b2lkIG1haW4oKSB7XG4gICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIHZlYzQoYV9wb3MgKyBhX2V4dHJ1ZGUgLyB1X3NjYWxlLCAwLjAsIDEuMCk7XG5cbiAgICB2X21heF96b29tID0gYV9kYXRhLng7XG4gICAgdl9wbGFjZW1lbnRfem9vbSA9IGFfZGF0YS55O1xufVxuIn19LGUuZXhwb3J0cy51dGlsPSJmbG9hdCBldmFsdWF0ZV96b29tX2Z1bmN0aW9uXzEoY29uc3QgdmVjNCB2YWx1ZXMsIGNvbnN0IGZsb2F0IHQpIHtcbiAgICBpZiAodCA8IDEuMCkge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlc1swXSwgdmFsdWVzWzFdLCB0KTtcbiAgICB9IGVsc2UgaWYgKHQgPCAyLjApIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdCAtIDEuMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZXNbMl0sIHZhbHVlc1szXSwgdCAtIDIuMCk7XG4gICAgfVxufVxudmVjNCBldmFsdWF0ZV96b29tX2Z1bmN0aW9uXzQoY29uc3QgdmVjNCB2YWx1ZTAsIGNvbnN0IHZlYzQgdmFsdWUxLCBjb25zdCB2ZWM0IHZhbHVlMiwgY29uc3QgdmVjNCB2YWx1ZTMsIGNvbnN0IGZsb2F0IHQpIHtcbiAgICBpZiAodCA8IDEuMCkge1xuICAgICAgICByZXR1cm4gbWl4KHZhbHVlMCwgdmFsdWUxLCB0KTtcbiAgICB9IGVsc2UgaWYgKHQgPCAyLjApIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZTEsIHZhbHVlMiwgdCAtIDEuMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1peCh2YWx1ZTIsIHZhbHVlMywgdCAtIDIuMCk7XG4gICAgfVxufVxuIn0se3BhdGg6NDc0fV0sMzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLm1lc3NhZ2U9KHQ/dCsiOiAiOiIiKStpLmFwcGx5KGksQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpKSxudWxsIT09ZSYmdm9pZCAwIT09ZSYmZS5fX2xpbmVfXyYmKHRoaXMubGluZT1lLl9fbGluZV9fKX12YXIgaT10KCJ1dGlsIikuZm9ybWF0O2UuZXhwb3J0cz1ufSx7dXRpbDo1NDd9XSwzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPWFyZ3VtZW50c1tlXTtmb3IodmFyIG4gaW4gcil0W25dPXJbbl19cmV0dXJuIHR9fSx7fV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcj8ibnVtYmVyIjp0IGluc3RhbmNlb2YgU3RyaW5nPyJzdHJpbmciOnQgaW5zdGFuY2VvZiBCb29sZWFuPyJib29sZWFuIjpBcnJheS5pc0FycmF5KHQpPyJhcnJheSI6bnVsbD09PXQ/Im51bGwiOnR5cGVvZiB0fX0se31dLDMwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBCb29sZWFuP3QudmFsdWVPZigpOnR9fSx7fV0sMzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvZ2V0X3R5cGUiKSxhPXQoIi4uL3V0aWwvZXh0ZW5kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciByPXQoIi4vdmFsaWRhdGVfZnVuY3Rpb24iKSxvPXQoIi4vdmFsaWRhdGVfb2JqZWN0Iikscz17IioiOmZ1bmN0aW9uKCl7cmV0dXJuW119LGFycmF5OnQoIi4vdmFsaWRhdGVfYXJyYXkiKSxib29sZWFuOnQoIi4vdmFsaWRhdGVfYm9vbGVhbiIpLG51bWJlcjp0KCIuL3ZhbGlkYXRlX251bWJlciIpLGNvbG9yOnQoIi4vdmFsaWRhdGVfY29sb3IiKSxjb25zdGFudHM6dCgiLi92YWxpZGF0ZV9jb25zdGFudHMiKSxlbnVtOnQoIi4vdmFsaWRhdGVfZW51bSIpLGZpbHRlcjp0KCIuL3ZhbGlkYXRlX2ZpbHRlciIpLGZ1bmN0aW9uOnQoIi4vdmFsaWRhdGVfZnVuY3Rpb24iKSxsYXllcjp0KCIuL3ZhbGlkYXRlX2xheWVyIiksb2JqZWN0OnQoIi4vdmFsaWRhdGVfb2JqZWN0Iiksc291cmNlOnQoIi4vdmFsaWRhdGVfc291cmNlIiksc3RyaW5nOnQoIi4vdmFsaWRhdGVfc3RyaW5nIil9LGw9ZS52YWx1ZSx1PWUudmFsdWVTcGVjLGM9ZS5rZXksaD1lLnN0eWxlU3BlYyxmPWUuc3R5bGU7aWYoInN0cmluZyI9PT1pKGwpJiYiQCI9PT1sWzBdKXtpZihoLiR2ZXJzaW9uPjcpcmV0dXJuW25ldyBuKGMsbCwiY29uc3RhbnRzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFzIG9mIHY4IildO2lmKCEobCBpbiBmLmNvbnN0YW50cykpcmV0dXJuW25ldyBuKGMsbCwnY29uc3RhbnQgIiVzIiBub3QgZm91bmQnLGwpXTtlPWEoe30sZSx7dmFsdWU6Zi5jb25zdGFudHNbbF19KX1yZXR1cm4gdS5mdW5jdGlvbiYmIm9iamVjdCI9PT1pKGwpP3IoZSk6dS50eXBlJiZzW3UudHlwZV0/c1t1LnR5cGVdKGUpOm8oYSh7fSxlLHt2YWx1ZVNwZWM6dS50eXBlP2hbdS50eXBlXTp1fSkpfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZXh0ZW5kIjozMDMsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi92YWxpZGF0ZV9hcnJheSI6MzA3LCIuL3ZhbGlkYXRlX2Jvb2xlYW4iOjMwOCwiLi92YWxpZGF0ZV9jb2xvciI6MzA5LCIuL3ZhbGlkYXRlX2NvbnN0YW50cyI6MzEwLCIuL3ZhbGlkYXRlX2VudW0iOjMxMSwiLi92YWxpZGF0ZV9maWx0ZXIiOjMxMiwiLi92YWxpZGF0ZV9mdW5jdGlvbiI6MzEzLCIuL3ZhbGlkYXRlX2xheWVyIjozMTUsIi4vdmFsaWRhdGVfbnVtYmVyIjozMTcsIi4vdmFsaWRhdGVfb2JqZWN0IjozMTgsIi4vdmFsaWRhdGVfc291cmNlIjozMjAsIi4vdmFsaWRhdGVfc3RyaW5nIjozMjF9XSwzMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGk9dCgiLi92YWxpZGF0ZSIpLGE9dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC52YWx1ZVNwZWMsbz10LnN0eWxlLHM9dC5zdHlsZVNwZWMsbD10LmtleSx1PXQuYXJyYXlFbGVtZW50VmFsaWRhdG9yfHxpO2lmKCJhcnJheSIhPT1uKGUpKXJldHVybltuZXcgYShsLGUsImFycmF5IGV4cGVjdGVkLCAlcyBmb3VuZCIsbihlKSldO2lmKHIubGVuZ3RoJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybltuZXcgYShsLGUsImFycmF5IGxlbmd0aCAlZCBleHBlY3RlZCwgbGVuZ3RoICVkIGZvdW5kIixyLmxlbmd0aCxlLmxlbmd0aCldO2lmKHJbIm1pbi1sZW5ndGgiXSYmZS5sZW5ndGg8clsibWluLWxlbmd0aCJdKXJldHVybltuZXcgYShsLGUsImFycmF5IGxlbmd0aCBhdCBsZWFzdCAlZCBleHBlY3RlZCwgbGVuZ3RoICVkIGZvdW5kIixyWyJtaW4tbGVuZ3RoIl0sZS5sZW5ndGgpXTt2YXIgYz17dHlwZTpyLnZhbHVlfTtzLiR2ZXJzaW9uPDcmJihjLmZ1bmN0aW9uPXIuZnVuY3Rpb24pLCJvYmplY3QiPT09bihyLnZhbHVlKSYmKGM9ci52YWx1ZSk7Zm9yKHZhciBoPVtdLGY9MDtmPGUubGVuZ3RoO2YrKyloPWguY29uY2F0KHUoe2FycmF5OmUsYXJyYXlJbmRleDpmLHZhbHVlOmVbZl0sdmFsdWVTcGVjOmMsc3R5bGU6byxzdHlsZVNwZWM6cyxrZXk6bCsiWyIrZisiXSJ9KSk7cmV0dXJuIGh9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzA0LCIuL3ZhbGlkYXRlIjozMDZ9XSwzMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGk9dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLHI9dC5rZXksYT1uKGUpO3JldHVybiJib29sZWFuIiE9PWE/W25ldyBpKHIsZSwiYm9vbGVhbiBleHBlY3RlZCwgJXMgZm91bmQiLGEpXTpbXX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzAyLCIuLi91dGlsL2dldF90eXBlIjozMDR9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi4vdXRpbC9nZXRfdHlwZSIpLGE9dCgiY3NzY29sb3JwYXJzZXIiKS5wYXJzZUNTU0NvbG9yO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWUsbz1pKHIpO3JldHVybiJzdHJpbmciIT09bz9bbmV3IG4oZSxyLCJjb2xvciBleHBlY3RlZCwgJXMgZm91bmQiLG8pXTpudWxsPT09YShyKT9bbmV3IG4oZSxyLCdjb2xvciBleHBlY3RlZCwgIiVzIiBmb3VuZCcscildOltdfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCxjc3Njb2xvcnBhcnNlcjoxMDZ9XSwzMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi4vdXRpbC9nZXRfdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQudmFsdWU7aWYodC5zdHlsZVNwZWMuJHZlcnNpb24+NylyZXR1cm4gcj9bbmV3IG4oZSxyLCJjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjgiKV06W107dmFyIGE9aShyKTtpZigib2JqZWN0IiE9PWEpcmV0dXJuW25ldyBuKGUsciwib2JqZWN0IGV4cGVjdGVkLCAlcyBmb3VuZCIsYSldO3ZhciBvPVtdO2Zvcih2YXIgcyBpbiByKSJAIiE9PXNbMF0mJm8ucHVzaChuZXcgbihlKyIuIitzLHJbc10sJ2NvbnN0YW50cyBtdXN0IHN0YXJ0IHdpdGggIkAiJykpO3JldHVybiBvfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNH1dLDMxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL3VuYnVuZGxlX2pzb25saW50Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxhPXQudmFsdWVTcGVjLG89W107cmV0dXJuLTE9PT1hLnZhbHVlcy5pbmRleE9mKGkocikpJiZvLnB1c2gobmV3IG4oZSxyLCJleHBlY3RlZCBvbmUgb2YgWyVzXSwgJXMgZm91bmQiLGEudmFsdWVzLmpvaW4oIiwgIikscikpLG99fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1fV0sMzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4vdmFsaWRhdGVfZW51bSIpLGE9dCgiLi4vdXRpbC9nZXRfdHlwZSIpLG89dCgiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe3ZhciByLHM9ZS52YWx1ZSxsPWUua2V5LHU9ZS5zdHlsZVNwZWMsYz1bXTtpZigiYXJyYXkiIT09YShzKSlyZXR1cm5bbmV3IG4obCxzLCJhcnJheSBleHBlY3RlZCwgJXMgZm91bmQiLGEocykpXTtpZihzLmxlbmd0aDwxKXJldHVybltuZXcgbihsLHMsImZpbHRlciBhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3QgMSBlbGVtZW50IildO3N3aXRjaChjPWMuY29uY2F0KGkoe2tleTpsKyJbMF0iLHZhbHVlOnNbMF0sdmFsdWVTcGVjOnUuZmlsdGVyX29wZXJhdG9yLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpLG8oc1swXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpzLmxlbmd0aD49MiYmIiR0eXBlIj09c1sxXSYmYy5wdXNoKG5ldyBuKGwscywnIiR0eXBlIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgIiVzIicsc1swXSkpO2Nhc2UiPT0iOmNhc2UiIT0iOjMhPXMubGVuZ3RoJiZjLnB1c2gobmV3IG4obCxzLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICIlcyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnLHNbMF0pKTtjYXNlImluIjpjYXNlIiFpbiI6cy5sZW5ndGg+PTImJihyPWEoc1sxXSksInN0cmluZyIhPT1yP2MucHVzaChuZXcgbihsKyJbMV0iLHNbMV0sInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLHIpKToiQCI9PT1zWzFdWzBdJiZjLnB1c2gobmV3IG4obCsiWzFdIixzWzFdLCJmaWx0ZXIga2V5IGNhbm5vdCBiZSBhIGNvbnN0YW50IikpKTtmb3IodmFyIGg9MjtoPHMubGVuZ3RoO2grKylyPWEoc1toXSksIiR0eXBlIj09c1sxXT9jPWMuY29uY2F0KGkoe2tleTpsKyJbIitoKyJdIix2YWx1ZTpzW2hdLHZhbHVlU3BlYzp1Lmdlb21ldHJ5X3R5cGUsc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk6InN0cmluZyI9PT1yJiYiQCI9PT1zW2hdWzBdP2MucHVzaChuZXcgbihsKyJbIitoKyJdIixzW2hdLCJmaWx0ZXIgdmFsdWUgY2Fubm90IGJlIGEgY29uc3RhbnQiKSk6InN0cmluZyIhPT1yJiYibnVtYmVyIiE9PXImJiJib29sZWFuIiE9PXImJmMucHVzaChuZXcgbihsKyJbIitoKyJdIixzW2hdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgJXMgZm91bmQiLHIpKTticmVhaztjYXNlImFueSI6Y2FzZSJhbGwiOmNhc2Uibm9uZSI6Zm9yKGg9MTtoPHMubGVuZ3RoO2grKyljPWMuY29uY2F0KHQoe2tleTpsKyJbIitoKyJdIix2YWx1ZTpzW2hdLHN0eWxlOmUuc3R5bGUsc3R5bGVTcGVjOmUuc3R5bGVTcGVjfSkpO2JyZWFrO2Nhc2UiaGFzIjpjYXNlIiFoYXMiOnI9YShzWzFdKSwyIT09cy5sZW5ndGg/Yy5wdXNoKG5ldyBuKGwscywnZmlsdGVyIGFycmF5IGZvciAiJXMiIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJyxzWzBdKSk6InN0cmluZyIhPT1yP2MucHVzaChuZXcgbihsKyJbMV0iLHNbMV0sInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLHIpKToiQCI9PT1zWzFdWzBdJiZjLnB1c2gobmV3IG4obCsiWzFdIixzWzFdLCJmaWx0ZXIga2V5IGNhbm5vdCBiZSBhIGNvbnN0YW50IikpfXJldHVybiBjfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1LCIuL3ZhbGlkYXRlX2VudW0iOjMxMX1dLDMxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL2dldF90eXBlIiksYT10KCIuL3ZhbGlkYXRlIiksbz10KCIuL3ZhbGlkYXRlX29iamVjdCIpLHM9dCgiLi92YWxpZGF0ZV9hcnJheSIpLGw9dCgiLi92YWxpZGF0ZV9udW1iZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT1bXSxhPXQudmFsdWU7cmV0dXJuIGU9ZS5jb25jYXQocyh7a2V5OnQua2V5LHZhbHVlOmEsdmFsdWVTcGVjOnQudmFsdWVTcGVjLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLGFycmF5RWxlbWVudFZhbGlkYXRvcjpyfSkpLCJhcnJheSI9PT1pKGEpJiYwPT09YS5sZW5ndGgmJmUucHVzaChuZXcgbih0LmtleSxhLCJhcnJheSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIHN0b3AiKSksZX1mdW5jdGlvbiByKHQpe3ZhciBlPVtdLHI9dC52YWx1ZSxzPXQua2V5O2lmKCJhcnJheSIhPT1pKHIpKXJldHVybltuZXcgbihzLHIsImFycmF5IGV4cGVjdGVkLCAlcyBmb3VuZCIsaShyKSldO2lmKDIhPT1yLmxlbmd0aClyZXR1cm5bbmV3IG4ocyxyLCJhcnJheSBsZW5ndGggJWQgZXhwZWN0ZWQsIGxlbmd0aCAlZCBmb3VuZCIsMixyLmxlbmd0aCldO3ZhciBmPWkoclswXSk7aWYoY3x8KGM9ZiksZiE9PWMpcmV0dXJuW25ldyBuKHMsciwiJXMgc3RvcCBrZXkgdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3Aga2V5IHR5cGUgJXMiLGYsYyldO2lmKCJvYmplY3QiPT09Zil7aWYodm9pZCAwPT09clswXS56b29tKXJldHVybltuZXcgbihzLHIsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgem9vbSIpXTtpZih2b2lkIDA9PT1yWzBdLnZhbHVlKXJldHVybltuZXcgbihzLHIsIm9iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUiKV07ZT1lLmNvbmNhdChvKHtrZXk6cysiWzBdIix2YWx1ZTpyWzBdLHZhbHVlU3BlYzp7em9vbTp7fX0sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3pvb206bCx2YWx1ZTp1fX0pKX1lbHNlIGU9ZS5jb25jYXQoKGQ/bDp1KSh7a2V5OnMrIlswXSIsdmFsdWU6clswXSx2YWx1ZVNwZWM6e30sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWN9KSk7cmV0dXJuIGU9ZS5jb25jYXQoYSh7a2V5OnMrIlsxXSIsdmFsdWU6clsxXSx2YWx1ZVNwZWM6aCxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKSwibnVtYmVyIj09PWkoclswXSkmJigicGllY2V3aXNlLWNvbnN0YW50Ij09PWguZnVuY3Rpb24mJnJbMF0lMSE9MCYmZS5wdXNoKG5ldyBuKHMrIlswXSIsclswXSwiem9vbSBsZXZlbCBmb3IgcGllY2V3aXNlLWNvbnN0YW50IGZ1bmN0aW9ucyBtdXN0IGJlIGFuIGludGVnZXIiKSksMCE9PXQuYXJyYXlJbmRleCYmclswXTx0LmFycmF5W3QuYXJyYXlJbmRleC0xXVswXSYmZS5wdXNoKG5ldyBuKHMrIlswXSIsclswXSwiYXJyYXkgc3RvcHMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIikpKSxlfWZ1bmN0aW9uIHUodCl7CnZhciBlPVtdLHI9aSh0LnZhbHVlKTtyZXR1cm4ibnVtYmVyIiE9PXImJiJzdHJpbmciIT09ciYmImFycmF5IiE9PXImJmUucHVzaChuZXcgbih0LmtleSx0LnZhbHVlLCJwcm9wZXJ0eSB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcgb3IgYXJyYXkiKSksZX12YXIgYyxoPXQudmFsdWVTcGVjLGY9dm9pZCAwIT09dC52YWx1ZS5wcm9wZXJ0eXx8Im9iamVjdCI9PT1jLGQ9dm9pZCAwPT09dC52YWx1ZS5wcm9wZXJ0eXx8Im9iamVjdCI9PT1jLHA9byh7a2V5OnQua2V5LHZhbHVlOnQudmFsdWUsdmFsdWVTcGVjOnQuc3R5bGVTcGVjLmZ1bmN0aW9uLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntzdG9wczplfX0pO3JldHVybiB0LnN0eWxlU3BlYy4kdmVyc2lvbj49OCYmKGYmJiF0LnZhbHVlU3BlY1sicHJvcGVydHktZnVuY3Rpb24iXT9wLnB1c2gobmV3IG4odC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6ZCYmIXQudmFsdWVTcGVjWyJ6b29tLWZ1bmN0aW9uIl0mJnAucHVzaChuZXcgbih0LmtleSx0LnZhbHVlLCJ6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpKSxwfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi92YWxpZGF0ZSI6MzA2LCIuL3ZhbGlkYXRlX2FycmF5IjozMDcsIi4vdmFsaWRhdGVfbnVtYmVyIjozMTcsIi4vdmFsaWRhdGVfb2JqZWN0IjozMTh9XSwzMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpLGk9dCgiLi92YWxpZGF0ZV9zdHJpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LGE9aSh0KTtyZXR1cm4gYS5sZW5ndGg/YTooLTE9PT1lLmluZGV4T2YoIntmb250c3RhY2t9IikmJmEucHVzaChuZXcgbihyLGUsJyJnbHlwaHMiIHVybCBtdXN0IGluY2x1ZGUgYSAie2ZvbnRzdGFja30iIHRva2VuJykpLC0xPT09ZS5pbmRleE9mKCJ7cmFuZ2V9IikmJmEucHVzaChuZXcgbihyLGUsJyJnbHlwaHMiIHVybCBtdXN0IGluY2x1ZGUgYSAie3JhbmdlfSIgdG9rZW4nKSksYSl9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi92YWxpZGF0ZV9zdHJpbmciOjMyMX1dLDMxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIiksaT10KCIuLi91dGlsL3VuYnVuZGxlX2pzb25saW50IiksYT10KCIuL3ZhbGlkYXRlX29iamVjdCIpLG89dCgiLi92YWxpZGF0ZV9maWx0ZXIiKSxzPXQoIi4vdmFsaWRhdGVfcGFpbnRfcHJvcGVydHkiKSxsPXQoIi4vdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5IiksdT10KCIuLi91dGlsL2V4dGVuZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1bXSxyPXQudmFsdWUsYz10LmtleSxoPXQuc3R5bGUsZj10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IG4oYyxyLCdlaXRoZXIgInR5cGUiIG9yICJyZWYiIGlzIHJlcXVpcmVkJykpO3ZhciBkPWkoci50eXBlKSxwPWkoci5yZWYpO2lmKHIuaWQpZm9yKHZhciBtPTA7bTx0LmFycmF5SW5kZXg7bSsrKXt2YXIgdj1oLmxheWVyc1ttXTtpKHYuaWQpPT09aShyLmlkKSYmZS5wdXNoKG5ldyBuKGMsci5pZCwnZHVwbGljYXRlIGxheWVyIGlkICIlcyIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICVkJyxyLmlkLHYuaWQuX19saW5lX18pKX1pZigicmVmImluIHIpe1sidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsImZpbHRlciIsImxheW91dCJdLmZvckVhY2goZnVuY3Rpb24odCl7dCBpbiByJiZlLnB1c2gobmV3IG4oYyxyW3RdLCciJXMiIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnLHQpKX0pO3ZhciBnO2gubGF5ZXJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5pZD09cCYmKGc9dCl9KSxnP2cucmVmP2UucHVzaChuZXcgbihjLHIucmVmLCJyZWYgY2Fubm90IHJlZmVyZW5jZSBhbm90aGVyIHJlZiBsYXllciIpKTpkPWkoZy50eXBlKTplLnB1c2gobmV3IG4oYyxyLnJlZiwncmVmIGxheWVyICIlcyIgbm90IGZvdW5kJyxwKSl9ZWxzZSBpZigiYmFja2dyb3VuZCIhPT1kKWlmKHIuc291cmNlKXt2YXIgeT1oLnNvdXJjZXMmJmguc291cmNlc1tyLnNvdXJjZV07eT8idmVjdG9yIj09eS50eXBlJiYicmFzdGVyIj09ZD9lLnB1c2gobmV3IG4oYyxyLnNvdXJjZSwnbGF5ZXIgIiVzIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnLHIuaWQpKToicmFzdGVyIj09eS50eXBlJiYicmFzdGVyIiE9ZD9lLnB1c2gobmV3IG4oYyxyLnNvdXJjZSwnbGF5ZXIgIiVzIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2UnLHIuaWQpKToidmVjdG9yIiE9eS50eXBlfHxyWyJzb3VyY2UtbGF5ZXIiXXx8ZS5wdXNoKG5ldyBuKGMsciwnbGF5ZXIgIiVzIiBtdXN0IHNwZWNpZnkgYSAic291cmNlLWxheWVyIicsci5pZCkpOmUucHVzaChuZXcgbihjLHIuc291cmNlLCdzb3VyY2UgIiVzIiBub3QgZm91bmQnLHIuc291cmNlKSl9ZWxzZSBlLnB1c2gobmV3IG4oYyxyLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzb3VyY2UiJykpO3JldHVybiBlPWUuY29uY2F0KGEoe2tleTpjLHZhbHVlOnIsdmFsdWVTcGVjOmYubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2ZpbHRlcjpvLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gYSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBsKHUoe2xheWVyVHlwZTpkfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gYSh7bGF5ZXI6cixrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlYyxvYmplY3RFbGVtZW50VmFsaWRhdG9yczp7IioiOmZ1bmN0aW9uKHQpe3JldHVybiBzKHUoe2xheWVyVHlwZTpkfSx0KSl9fX0pfX19KSl9fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC9leHRlbmQiOjMwMywiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1LCIuL3ZhbGlkYXRlX2ZpbHRlciI6MzEyLCIuL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eSI6MzE2LCIuL3ZhbGlkYXRlX29iamVjdCI6MzE4LCIuL3ZhbGlkYXRlX3BhaW50X3Byb3BlcnR5IjozMTl9XSwzMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZGF0ZSIpLGk9dCgiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmtleSxyPXQuc3R5bGUsYT10LnN0eWxlU3BlYyxvPXQudmFsdWUscz10Lm9iamVjdEtleSxsPWFbImxheW91dF8iK3QubGF5ZXJUeXBlXTtpZih0LnZhbHVlU3BlY3x8bFtzXSl7dmFyIHU9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJpY29uLWltYWdlIj09PXMmJnImJiFyLnNwcml0ZT91LnB1c2gobmV3IGkoZSxvLCd1c2Ugb2YgImljb24taW1hZ2UiIHJlcXVpcmVzIGEgc3R5bGUgInNwcml0ZSIgcHJvcGVydHknKSk6InRleHQtZmllbGQiPT09cyYmciYmIXIuZ2x5cGhzJiZ1LnB1c2gobmV3IGkoZSxvLCd1c2Ugb2YgInRleHQtZmllbGQiIHJlcXVpcmVzIGEgc3R5bGUgImdseXBocyIgcHJvcGVydHknKSkpLHUuY29uY2F0KG4oe2tleTp0LmtleSx2YWx1ZTpvLHZhbHVlU3BlYzp0LnZhbHVlU3BlY3x8bFtzXSxzdHlsZTpyLHN0eWxlU3BlYzphfSkpfXJldHVybltuZXcgaShlLG8sJ3Vua25vd24gcHJvcGVydHkgIiVzIicscyldfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4vdmFsaWRhdGUiOjMwNn1dLDMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2dldF90eXBlIiksaT10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZSxhPXQudmFsdWVTcGVjLG89bihyKTtyZXR1cm4ibnVtYmVyIiE9PW8/W25ldyBpKGUsciwibnVtYmVyIGV4cGVjdGVkLCAlcyBmb3VuZCIsbyldOiJtaW5pbXVtImluIGEmJnI8YS5taW5pbXVtP1tuZXcgaShlLHIsIiVzIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAlcyIscixhLm1pbmltdW0pXToibWF4aW11bSJpbiBhJiZyPmEubWF4aW11bT9bbmV3IGkoZSxyLCIlcyBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgJXMiLHIsYS5tYXhpbXVtKV06W119fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC9nZXRfdHlwZSI6MzA0fV0sMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvZ2V0X3R5cGUiKSxhPXQoIi4vdmFsaWRhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG89dC52YWx1ZVNwZWMscz10Lm9iamVjdEVsZW1lbnRWYWxpZGF0b3JzfHx7fSxsPXQuc3R5bGUsdT10LnN0eWxlU3BlYyxjPVtdLGg9aShyKTtpZigib2JqZWN0IiE9PWgpcmV0dXJuW25ldyBuKGUsciwib2JqZWN0IGV4cGVjdGVkLCAlcyBmb3VuZCIsaCldO2Zvcih2YXIgZiBpbiByKXt2YXIgZD1mLnNwbGl0KCIuIilbMF0scD1vJiYob1tkXXx8b1siKiJdKSxtPXNbZF18fHNbIioiXTtwfHxtP2M9Yy5jb25jYXQoKG18fGEpKHtrZXk6KGU/ZSsiLiI6ZSkrZix2YWx1ZTpyW2ZdLHZhbHVlU3BlYzpwLHN0eWxlOmwsc3R5bGVTcGVjOnUsb2JqZWN0OnIsb2JqZWN0S2V5OmZ9KSk6IiIhPT1lJiYxIT09ZS5zcGxpdCgiLiIpLmxlbmd0aCYmYy5wdXNoKG5ldyBuKGUscltmXSwndW5rbm93biBwcm9wZXJ0eSAiJXMiJyxmKSl9Zm9yKGQgaW4gbylvW2RdLnJlcXVpcmVkJiZ2b2lkIDA9PT1vW2RdLmRlZmF1bHQmJnZvaWQgMD09PXJbZF0mJmMucHVzaChuZXcgbihlLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgIiVzIicsZCkpO3JldHVybiBjfX0seyIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIjozMDIsIi4uL3V0aWwvZ2V0X3R5cGUiOjMwNCwiLi92YWxpZGF0ZSI6MzA2fV0sMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdmFsaWRhdGUiKSxpPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnN0eWxlLGE9dC5zdHlsZVNwZWMsbz10LnZhbHVlLHM9dC5vYmplY3RLZXksbD1hWyJwYWludF8iK3QubGF5ZXJUeXBlXSx1PXMubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7cmV0dXJuIHUmJmxbdVsxXV0mJmxbdVsxXV0udHJhbnNpdGlvbj9uKHtrZXk6ZSx2YWx1ZTpvLHZhbHVlU3BlYzphLnRyYW5zaXRpb24sc3R5bGU6cixzdHlsZVNwZWM6YX0pOnQudmFsdWVTcGVjfHxsW3NdP24oe2tleTp0LmtleSx2YWx1ZTpvLHZhbHVlU3BlYzp0LnZhbHVlU3BlY3x8bFtzXSxzdHlsZTpyLHN0eWxlU3BlYzphfSk6W25ldyBpKGUsbywndW5rbm93biBwcm9wZXJ0eSAiJXMiJyxzKV19fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi92YWxpZGF0ZSI6MzA2fV0sMzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiKSxpPXQoIi4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQiKSxhPXQoIi4vdmFsaWRhdGVfb2JqZWN0Iiksbz10KCIuL3ZhbGlkYXRlX2VudW0iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LHM9dC5zdHlsZVNwZWMsbD10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBuKHIsZSwnInR5cGUiIGlzIHJlcXVpcmVkJyldO3N3aXRjaChpKGUudHlwZSkpe2Nhc2UidmVjdG9yIjpjYXNlInJhc3RlciI6dmFyIHU9W107aWYodT11LmNvbmNhdChhKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpzLnNvdXJjZV90aWxlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnN9KSksInVybCJpbiBlKWZvcih2YXIgYyBpbiBlKVsidHlwZSIsInVybCIsInRpbGVTaXplIl0uaW5kZXhPZihjKTwwJiZ1LnB1c2gobmV3IG4ocisiLiIrYyxlW2NdLCdhIHNvdXJjZSB3aXRoIGEgInVybCIgcHJvcGVydHkgbWF5IG5vdCBpbmNsdWRlIGEgIiVzIiBwcm9wZXJ0eScsYykpO3JldHVybiB1O2Nhc2UiZ2VvanNvbiI6cmV0dXJuIGEoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOnMuc291cmNlX2dlb2pzb24sc3R5bGU6bCxzdHlsZVNwZWM6c30pO2Nhc2UidmlkZW8iOnJldHVybiBhKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpzLnNvdXJjZV92aWRlbyxzdHlsZTpsLHN0eWxlU3BlYzpzfSk7Y2FzZSJpbWFnZSI6cmV0dXJuIGEoe2tleTpyLHZhbHVlOmUsdmFsdWVTcGVjOnMuc291cmNlX2ltYWdlLHN0eWxlOmwsc3R5bGVTcGVjOnN9KTtkZWZhdWx0OnJldHVybiBvKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl19LHN0eWxlOmwsc3R5bGVTcGVjOnN9KX19fSx7Ii4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IiOjMwMiwiLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCI6MzA1LCIuL3ZhbGlkYXRlX2VudW0iOjMxMSwiLi92YWxpZGF0ZV9vYmplY3QiOjMxOH1dLDMyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2dldF90eXBlIiksaT10KCIuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxhPW4oZSk7cmV0dXJuInN0cmluZyIhPT1hP1tuZXcgaShyLGUsInN0cmluZyBleHBlY3RlZCwgJXMgZm91bmQiLGEpXTpbXX19LHsiLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvciI6MzAyLCIuLi91dGlsL2dldF90eXBlIjozMDR9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2U9ZXx8bDt2YXIgcj1bXTtyZXR1cm4gcj1yLmNvbmNhdChzKHtrZXk6IiIsdmFsdWU6dCx2YWx1ZVNwZWM6ZS4kcm9vdCxzdHlsZVNwZWM6ZSxzdHlsZTp0LG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOntnbHlwaHM6dX19KSksZS4kdmVyc2lvbj43JiZ0LmNvbnN0YW50cyYmKHI9ci5jb25jYXQobyh7a2V5OiJjb25zdGFudHMiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLGkocil9ZnVuY3Rpb24gaSh0KXtyZXR1cm5bXS5jb25jYXQodCkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmUtZS5saW5lfSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fXZhciBvPXQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfY29uc3RhbnRzIikscz10KCIuL3ZhbGlkYXRlL3ZhbGlkYXRlIiksbD10KCIuLi9yZWZlcmVuY2UvbGF0ZXN0Lm1pbiIpLHU9dCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9nbHlwaHNfdXJsIik7bi5zb3VyY2U9YSh0KCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX3NvdXJjZSIpKSxuLmxheWVyPWEodCgiLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXllciIpKSxuLmZpbHRlcj1hKHQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyIikpLG4ucGFpbnRQcm9wZXJ0eT1hKHQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfcGFpbnRfcHJvcGVydHkiKSksbi5sYXlvdXRQcm9wZXJ0eT1hKHQoIi4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5IikpLGUuZXhwb3J0cz1ufSx7Ii4uL3JlZmVyZW5jZS9sYXRlc3QubWluIjozMjMsIi4vdmFsaWRhdGUvdmFsaWRhdGUiOjMwNiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9jb25zdGFudHMiOjMxMCwiLi92YWxpZGF0ZS92YWxpZGF0ZV9maWx0ZXIiOjMxMiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9nbHlwaHNfdXJsIjozMTQsIi4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5ZXIiOjMxNSwiLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHkiOjMxNiwiLi92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSI6MzE5LCIuL3ZhbGlkYXRlL3ZhbGlkYXRlX3NvdXJjZSI6MzIwfV0sMzIzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vdjgubWluLmpzb24iKX0seyIuL3Y4Lm1pbi5qc29uIjozMjR9XSwzMjQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9eyR2ZXJzaW9uOjgsJHJvb3Q6e3ZlcnNpb246e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6InN0cmluZyJ9LG1ldGFkYXRhOnt0eXBlOiIqIn0sY2VudGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciJ9LHpvb206e3R5cGU6Im51bWJlciJ9LGJlYXJpbmc6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMifSxwaXRjaDp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImRlZ3JlZXMifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOiJzb3VyY2VzIn0sc3ByaXRlOnt0eXBlOiJzdHJpbmcifSxnbHlwaHM6e3R5cGU6InN0cmluZyJ9LHRyYW5zaXRpb246e3R5cGU6InRyYW5zaXRpb24ifSxsYXllcnM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToibGF5ZXIifX0sc291cmNlczp7IioiOnt0eXBlOiJzb3VyY2UifX0sc291cmNlOlsic291cmNlX3RpbGUiLCJzb3VyY2VfZ2VvanNvbiIsInNvdXJjZV92aWRlbyIsInNvdXJjZV9pbWFnZSJdLHNvdXJjZV90aWxlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJ2ZWN0b3IiLCJyYXN0ZXIiXX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJnZW9qc29uIl19LGRhdGE6e3R5cGU6IioifSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTR9LGJ1ZmZlcjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjY0fSx0b2xlcmFuY2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozfSxjbHVzdGVyOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjbHVzdGVyUmFkaXVzOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NDAwfSxjbHVzdGVyTWF4Wm9vbTp7dHlwZToibnVtYmVyIn19LHNvdXJjZV92aWRlbzp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOlsidmlkZW8iXX0sdXJsczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxjb29yZGluYXRlczp7cmVxdWlyZWQ6ITAsdHlwZToiYXJyYXkiLGxlbmd0aDo0LHZhbHVlOnt0eXBlOiJhcnJheSIsbGVuZ3RoOjIsdmFsdWU6Im51bWJlciJ9fX0sc291cmNlX2ltYWdlOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6WyJpbWFnZSJdfSx1cmw6e3JlcXVpcmVkOiEwLHR5cGU6InN0cmluZyJ9LGNvb3JkaW5hdGVzOntyZXF1aXJlZDohMCx0eXBlOiJhcnJheSIsbGVuZ3RoOjQsdmFsdWU6e3R5cGU6ImFycmF5IixsZW5ndGg6Mix2YWx1ZToibnVtYmVyIn19fSxsYXllcjp7aWQ6e3R5cGU6InN0cmluZyIscmVxdWlyZWQ6ITB9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczpbImZpbGwiLCJsaW5lIiwic3ltYm9sIiwiY2lyY2xlIiwicmFzdGVyIiwiYmFja2dyb3VuZCJdfSxtZXRhZGF0YTp7dHlwZToiKiJ9LHJlZjp7dHlwZToic3RyaW5nIn0sc291cmNlOnt0eXBlOiJzdHJpbmcifSwic291cmNlLWxheWVyIjp7dHlwZToic3RyaW5nIn0sbWluem9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyMn0sbWF4em9vbTp7dHlwZToibnVtYmVyIixtaW5pbXVtOjAsbWF4aW11bToyMn0saW50ZXJhY3RpdmU6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGZpbHRlcjp7dHlwZToiZmlsdGVyIn0sbGF5b3V0Ont0eXBlOiJsYXlvdXQifSxwYWludDp7dHlwZToicGFpbnQifSwicGFpbnQuKiI6e3R5cGU6InBhaW50In19LGxheW91dDpbImxheW91dF9maWxsIiwibGF5b3V0X2xpbmUiLCJsYXlvdXRfY2lyY2xlIiwibGF5b3V0X3N5bWJvbCIsImxheW91dF9yYXN0ZXIiLCJsYXlvdXRfYmFja2dyb3VuZCJdLGxheW91dF9iYWNrZ3JvdW5kOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9maWxsOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9jaXJjbGU6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6WyJ2aXNpYmxlIiwibm9uZSJdLGRlZmF1bHQ6InZpc2libGUifX0sbGF5b3V0X2xpbmU6eyJsaW5lLWNhcCI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImJ1dHQiLCJyb3VuZCIsInNxdWFyZSJdLGRlZmF1bHQ6ImJ1dHQifSwibGluZS1qb2luIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsiYmV2ZWwiLCJyb3VuZCIsIm1pdGVyIl0sZGVmYXVsdDoibWl0ZXIifSwibGluZS1taXRlci1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6Im1pdGVyIn1dfSwibGluZS1yb3VuZC1saW1pdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLjA1LGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlt7ImxpbmUtam9pbiI6InJvdW5kIn1dfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9zeW1ib2w6eyJzeW1ib2wtcGxhY2VtZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsicG9pbnQiLCJsaW5lIl0sZGVmYXVsdDoicG9pbnQifSwic3ltYm9sLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjUwLG1pbmltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbeyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInN5bWJvbC1hdm9pZC1lZGdlcyI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITF9LCJpY29uLWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJ2aWV3cG9ydCIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXNpemUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLXRleHQtZml0Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITEsdmFsdWVzOlsibm9uZSIsImJvdGgiLCJ3aWR0aCIsImhlaWdodCJdLGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXX0sImljb24tdGV4dC1maXQtcGFkZGluZyI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlswLDAsMCwwXSx1bml0czoicGl4ZWxzIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiLCJpY29uLXRleHQtZml0IiwidGV4dC1maWVsZCJdfSwiaWNvbi1pbWFnZSI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdG9rZW5zOiEwfSwiaWNvbi1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHVuaXRzOiJkZWdyZWVzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24ta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dfSwiaWNvbi1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sInRleHQtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtcm90YXRpb24tYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJ2aWV3cG9ydCIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWZpZWxkIjp7dHlwZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiIiLHRva2VuczohMH0sInRleHQtZm9udCI6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OlsiT3BlbiBTYW5zIFJlZ3VsYXIiLCJBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtc2l6ZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxNixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LW1heC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxMCxtaW5pbXVtOjAsdW5pdHM6ImVtIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtbGluZS1oZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MS4yLHVuaXRzOiJlbSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWxldHRlci1zcGFjaW5nIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImVtIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtanVzdGlmeSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRlZmF1bHQ6ImNlbnRlciIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbImNlbnRlciIsImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1tYXgtYW5nbGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NDUsdW5pdHM6ImRlZ3JlZXMiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LXBhZGRpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MixtaW5pbXVtOjAsdW5pdHM6InBpeGVscyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWtlZXAtdXByaWdodCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InRleHQtcm90YXRpb24tYWxpZ25tZW50IjoibWFwIn0seyJzeW1ib2wtcGxhY2VtZW50IjoibGluZSJ9XX0sInRleHQtdHJhbnNmb3JtIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibm9uZSIsInVwcGVyY2FzZSIsImxvd2VyY2FzZSJdLGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1vZmZzZXQiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsdW5pdHM6ImVtcyIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtYWxsb3ctb3ZlcmxhcCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiOnt0eXBlOiJib29sZWFuIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1vcHRpb25hbCI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIiwiaWNvbi1pbWFnZSJdfSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsidmlzaWJsZSIsIm5vbmUiXSxkZWZhdWx0OiJ2aXNpYmxlIn19LGxheW91dF9yYXN0ZXI6e3Zpc2liaWxpdHk6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx2YWx1ZXM6WyJ2aXNpYmxlIiwibm9uZSJdLGRlZmF1bHQ6InZpc2libGUifX0sZmlsdGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6IioifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6ImVudW0iLHZhbHVlczpbIj09IiwiIT0iLCI+IiwiPj0iLCI8IiwiPD0iLCJpbiIsIiFpbiIsImFsbCIsImFueSIsIm5vbmUiLCJoYXMiLCIhaGFzIl19LGdlb21ldHJ5X3R5cGU6e3R5cGU6ImVudW0iLHZhbHVlczpbIlBvaW50IiwiTGluZVN0cmluZyIsIlBvbHlnb24iXX0sY29sb3Jfb3BlcmF0aW9uOnt0eXBlOiJlbnVtIix2YWx1ZXM6WyJsaWdodGVuIiwic2F0dXJhdGUiLCJzcGluIiwiZmFkZSIsIm1peCJdfSxmdW5jdGlvbjp7c3RvcHM6e3R5cGU6ImFycmF5IixyZXF1aXJlZDohMCx2YWx1ZToiZnVuY3Rpb25fc3RvcCJ9LGJhc2U6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MH0scHJvcGVydHk6e3R5cGU6InN0cmluZyIsZGVmYXVsdDoiJHpvb20ifSx0eXBlOnt0eXBlOiJlbnVtIix2YWx1ZXM6WyJleHBvbmVudGlhbCIsImludGVydmFsIiwiY2F0ZWdvcmljYWwiXSxkZWZhdWx0OiJleHBvbmVudGlhbCJ9fSxmdW5jdGlvbl9zdG9wOnt0eXBlOiJhcnJheSIsbWluaW11bTowLG1heGltdW06MjIsdmFsdWU6WyJudW1iZXIiLCJjb2xvciJdLGxlbmd0aDoyfSxwYWludDpbInBhaW50X2ZpbGwiLCJwYWludF9saW5lIiwicGFpbnRfY2lyY2xlIiwicGFpbnRfc3ltYm9sIiwicGFpbnRfcmFzdGVyIiwicGFpbnRfYmFja2dyb3VuZCJdLHBhaW50X2ZpbGw6eyJmaWxsLWFudGlhbGlhcyI6e3R5cGU6ImJvb2xlYW4iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6ITB9LCJmaWxsLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJmaWxsLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9XX0sImZpbGwtb3V0bGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifSx7ImZpbGwtYW50aWFsaWFzIjohMH1dfSwiZmlsbC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiZmlsbC10cmFuc2xhdGUiXX0sImZpbGwtcGF0dGVybiI6e3R5cGU6InN0cmluZyIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHBhaW50X2xpbmU6eyJsaW5lLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XX0sImxpbmUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIn0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImxpbmUtdHJhbnNsYXRlIl19LCJsaW5lLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWdhcC13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMifSwibGluZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJsaW5lLWRhc2hhcnJheSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixmdW5jdGlvbjoicGllY2V3aXNlLWNvbnN0YW50Iiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoibGluZSB3aWR0aHMiLHJlcXVpcmVzOlt7IiEiOiJsaW5lLXBhdHRlcm4ifV19LCJsaW5lLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITB9fSxwYWludF9jaXJjbGU6eyJjaXJjbGUtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1ibHVyIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sImNpcmNsZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiY2lyY2xlLXRyYW5zbGF0ZSI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyJ9LCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImNpcmNsZS10cmFuc2xhdGUiXX0sImNpcmNsZS1waXRjaC1zY2FsZSI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIn19LHBhaW50X3N5bWJvbDp7Imljb24tb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXX0sImljb24taGFsby1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiJyZ2JhKDAsIDAsIDAsIDApIixmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi1oYWxvLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl19LCJpY29uLWhhbG8tYmx1ciI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdfSwiaWNvbi10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsZnVuY3Rpb246InBpZWNld2lzZS1jb25zdGFudCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdmFsdWVzOlsibWFwIiwidmlld3BvcnQiXSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsImljb24tdHJhbnNsYXRlIl19LCJ0ZXh0LW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl19LCJ0ZXh0LWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtaGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsInByb3BlcnR5LWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdfSwidGV4dC1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLCJwcm9wZXJ0eS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXX0sInRleHQtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCwicHJvcGVydHktZnVuY3Rpb24iOiEwLHZhbHVlczpbIm1hcCIsInZpZXdwb3J0Il0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbInRleHQtZmllbGQiLCJ0ZXh0LXRyYW5zbGF0ZSJdfX0scGFpbnRfcmFzdGVyOnsicmFzdGVyLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWh1ZS1yb3RhdGUiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxwZXJpb2Q6MzYwLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJkZWdyZWVzIn0sInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6e3R5cGU6Im51bWJlciIsZnVuY3Rpb246ImludGVycG9sYXRlZCIsInpvb20tZnVuY3Rpb24iOiEwLGRlZmF1bHQ6MCxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITB9LCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOnt0eXBlOiJudW1iZXIiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCxkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLXNhdHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOi0xLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH0sInJhc3Rlci1jb250cmFzdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwicmFzdGVyLWZhZGUtZHVyYXRpb24iOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMCx1bml0czoibWlsbGlzZWNvbmRzIn19LHBhaW50X2JhY2tncm91bmQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLGZ1bmN0aW9uOiJpbnRlcnBvbGF0ZWQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJiYWNrZ3JvdW5kLXBhdHRlcm4ifV19LCJiYWNrZ3JvdW5kLXBhdHRlcm4iOnt0eXBlOiJzdHJpbmciLGZ1bmN0aW9uOiJwaWVjZXdpc2UtY29uc3RhbnQiLCJ6b29tLWZ1bmN0aW9uIjohMCx0cmFuc2l0aW9uOiEwfSwiYmFja2dyb3VuZC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSxmdW5jdGlvbjoiaW50ZXJwb2xhdGVkIiwiem9vbS1mdW5jdGlvbiI6ITAsdHJhbnNpdGlvbjohMH19LHRyYW5zaXRpb246e2R1cmF0aW9uOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MzAwLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn0sZGVsYXk6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWlsbGlzZWNvbmRzIn19fX0se31dLDMyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiEhKGkoKSYmYSgpJiZvKCkmJnMoKSYmbCgpJiZ1KCkmJmMoKSYmaCh0JiZ0LmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpKX1mdW5jdGlvbiBpKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJiJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnR9ZnVuY3Rpb24gYSgpe3JldHVybiBBcnJheS5wcm90b3R5cGUmJkFycmF5LnByb3RvdHlwZS5ldmVyeSYmQXJyYXkucHJvdG90eXBlLmZpbHRlciYmQXJyYXkucHJvdG90eXBlLmZvckVhY2gmJkFycmF5LnByb3RvdHlwZS5pbmRleE9mJiZBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5tYXAmJkFycmF5LnByb3RvdHlwZS5zb21lJiZBcnJheS5wcm90b3R5cGUucmVkdWNlJiZBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQmJkFycmF5LmlzQXJyYXl9ZnVuY3Rpb24gbygpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUmJkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfWZ1bmN0aW9uIHMoKXtyZXR1cm4gT2JqZWN0LmtleXMmJk9iamVjdC5jcmVhdGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMmJk9iamVjdC5pc1NlYWxlZCYmT2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNFeHRlbnNpYmxlJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJiZPYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzJiZPYmplY3Quc2VhbCYmT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zfWZ1bmN0aW9uIGwoKXtyZXR1cm4iSlNPTiJpbiB3aW5kb3cmJiJwYXJzZSJpbiBKU09OJiYic3RyaW5naWZ5ImluIEpTT059ZnVuY3Rpb24gdSgpe3JldHVybiJXb3JrZXIiaW4gd2luZG93fWZ1bmN0aW9uIGMoKXtyZXR1cm4iVWludDhDbGFtcGVkQXJyYXkiaW4gd2luZG93fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHZvaWQgMD09PWRbdF0mJihkW3RdPWYodCkpLGRbdF19ZnVuY3Rpb24gZih0KXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxyPU9iamVjdC5jcmVhdGUobi53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtyZXR1cm4gci5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQsZS5wcm9iYWJseVN1cHBvcnRzQ29udGV4dD9lLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIscil8fGUucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik6ZS5zdXBwb3J0c0NvbnRleHQ/ZS5zdXBwb3J0c0NvbnRleHQoIndlYmdsIixyKXx8ZS5zdXBwb3J0c0NvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIscik6ZS5nZXRDb250ZXh0KCJ3ZWJnbCIscil8fGUuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixyKX12b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPW46d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1uKTt2YXIgZD17fTtuLndlYkdMQ29udGV4dEF0dHJpYnV0ZXM9e2FudGlhbGlhczohMSxhbHBoYTohMCxzdGVuY2lsOiEwLGRlcHRoOiEwfX0se31dLDMyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGF5b3V0VmVydGV4QXJyYXlUeXBlO3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IGU7dmFyIHI9dC5lbGVtZW50QXJyYXlUeXBlO3ImJih0aGlzLmVsZW1lbnRBcnJheT1uZXcgcik7dmFyIG49dC5lbGVtZW50QXJyYXlUeXBlMjtuJiYodGhpcy5lbGVtZW50QXJyYXkyPW5ldyBuKSx0aGlzLnBhaW50VmVydGV4QXJyYXlzPWkubWFwT2JqZWN0KHQucGFpbnRWZXJ0ZXhBcnJheVR5cGVzLGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdH0pfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4uTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEg9TWF0aC5wb3coMiwxNiktMSxuLnByb3RvdHlwZS5oYXNDYXBhY2l0eUZvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgrdDw9bi5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSH0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LG4ucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEFycmF5LnRyaW0oKSx0aGlzLmVsZW1lbnRBcnJheSYmdGhpcy5lbGVtZW50QXJyYXkudHJpbSgpLHRoaXMuZWxlbWVudEFycmF5MiYmdGhpcy5lbGVtZW50QXJyYXkyLnRyaW0oKTtmb3IodmFyIHQgaW4gdGhpcy5wYWludFZlcnRleEFycmF5cyl0aGlzLnBhaW50VmVydGV4QXJyYXlzW3RdLnRyaW0oKX0sbi5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue2xheW91dFZlcnRleEFycmF5OnRoaXMubGF5b3V0VmVydGV4QXJyYXkuc2VyaWFsaXplKCksZWxlbWVudEFycmF5OnRoaXMuZWxlbWVudEFycmF5JiZ0aGlzLmVsZW1lbnRBcnJheS5zZXJpYWxpemUoKSxlbGVtZW50QXJyYXkyOnRoaXMuZWxlbWVudEFycmF5MiYmdGhpcy5lbGVtZW50QXJyYXkyLnNlcmlhbGl6ZSgpLHBhaW50VmVydGV4QXJyYXlzOmkubWFwT2JqZWN0KHRoaXMucGFpbnRWZXJ0ZXhBcnJheXMsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VyaWFsaXplKCl9KX19LG4ucHJvdG90eXBlLmdldFRyYW5zZmVyYWJsZXM9ZnVuY3Rpb24odCl7dC5wdXNoKHRoaXMubGF5b3V0VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpLHRoaXMuZWxlbWVudEFycmF5JiZ0LnB1c2godGhpcy5lbGVtZW50QXJyYXkuYXJyYXlCdWZmZXIpLHRoaXMuZWxlbWVudEFycmF5MiYmdC5wdXNoKHRoaXMuZWxlbWVudEFycmF5Mi5hcnJheUJ1ZmZlcik7Zm9yKHZhciBlIGluIHRoaXMucGFpbnRWZXJ0ZXhBcnJheXMpdC5wdXNoKHRoaXMucGFpbnRWZXJ0ZXhBcnJheXNbZV0uYXJyYXlCdWZmZXIpfX0seyIuLi91dGlsL3V0aWwiOjQ0MH1dLDMyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHRoaXMuem9vbT10Lnpvb20sdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMubGF5ZXI9dC5sYXllcix0aGlzLmNoaWxkTGF5ZXJzPXQuY2hpbGRMYXllcnMsdGhpcy50eXBlPXRoaXMubGF5ZXIudHlwZSx0aGlzLmZlYXR1cmVzPVtdLHRoaXMuaWQ9dGhpcy5sYXllci5pZCx0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy5zb3VyY2VMYXllcj10aGlzLmxheWVyLnNvdXJjZUxheWVyLHRoaXMuc291cmNlTGF5ZXJJbmRleD10LnNvdXJjZUxheWVySW5kZXgsdGhpcy5taW5ab29tPXRoaXMubGF5ZXIubWluem9vbSx0aGlzLm1heFpvb209dGhpcy5sYXllci5tYXh6b29tLHRoaXMucGFpbnRBdHRyaWJ1dGVzPWkodGhpcyksdC5hcnJheXMpe3ZhciBlPXRoaXMucHJvZ3JhbUludGVyZmFjZXM7dGhpcy5idWZmZXJHcm91cHM9Yy5tYXBPYmplY3QodC5hcnJheXMsZnVuY3Rpb24ocixuKXt2YXIgaT1lW25dLGE9dC5wYWludFZlcnRleEFycmF5VHlwZXNbbl07cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh0LHtsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6aS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUuc2VyaWFsaXplKCksZWxlbWVudEFycmF5VHlwZTppLmVsZW1lbnRBcnJheVR5cGUmJmkuZWxlbWVudEFycmF5VHlwZS5zZXJpYWxpemUoKSxlbGVtZW50QXJyYXlUeXBlMjppLmVsZW1lbnRBcnJheVR5cGUyJiZpLmVsZW1lbnRBcnJheVR5cGUyLnNlcmlhbGl6ZSgpLHBhaW50VmVydGV4QXJyYXlUeXBlczphfSl9KX0pfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0LnByb2dyYW1JbnRlcmZhY2VzKXtmb3IodmFyIG49ZVtyXT17fSxpPTA7aTx0LmNoaWxkTGF5ZXJzLmxlbmd0aDtpKyspe25bdC5jaGlsZExheWVyc1tpXS5pZF09e2F0dHJpYnV0ZXM6W10sdW5pZm9ybXM6W10sZGVmaW5lczpbXSx2ZXJ0ZXhQcmFnbWFzOntkZWZpbmU6e30saW5pdGlhbGl6ZTp7fX0sZnJhZ21lbnRQcmFnbWFzOntkZWZpbmU6e30saW5pdGlhbGl6ZTp7fX19fXZhciBzPXQucHJvZ3JhbUludGVyZmFjZXNbcl07aWYocy5wYWludEF0dHJpYnV0ZXMpZm9yKHZhciBsPTA7bDxzLnBhaW50QXR0cmlidXRlcy5sZW5ndGg7bCsrKXt2YXIgdT1zLnBhaW50QXR0cmlidXRlc1tsXTt1Lm11bHRpcGxpZXI9dS5tdWx0aXBsaWVyfHwxO2Zvcih2YXIgaD0wO2g8dC5jaGlsZExheWVycy5sZW5ndGg7aCsrKXt2YXIgZD10LmNoaWxkTGF5ZXJzW2hdLHA9bltkLmlkXSxtPXUubmFtZTtmKCJhXyI9PT11Lm5hbWUuc2xpY2UoMCwyKSk7dmFyIHYsZz11Lm5hbWUuc2xpY2UoMik7aWYocC5mcmFnbWVudFByYWdtYXMuaW5pdGlhbGl6ZVtnXT0iIixkLmlzUGFpbnRWYWx1ZUZlYXR1cmVDb25zdGFudCh1LnBhaW50UHJvcGVydHkpKXAudW5pZm9ybXMucHVzaCh1KSxwLmZyYWdtZW50UHJhZ21hcy5kZWZpbmVbZ109cC52ZXJ0ZXhQcmFnbWFzLmRlZmluZVtnXT1bInVuaWZvcm0iLCJ7cHJlY2lzaW9ufSIsInt0eXBlfSIsbV0uam9pbigiICIpKyI7IixwLmZyYWdtZW50UHJhZ21hcy5pbml0aWFsaXplW2ddPXAudmVydGV4UHJhZ21hcy5pbml0aWFsaXplW2ddPVsie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLGcsIj0iLG1dLmpvaW4oIiAiKSsiO1xuIjtlbHNlIGlmKGQuaXNQYWludFZhbHVlWm9vbUNvbnN0YW50KHUucGFpbnRQcm9wZXJ0eSkpe3AuYXR0cmlidXRlcy5wdXNoKGMuZXh0ZW5kKHt9LHUse25hbWU6bX0pKSx2PVsidmFyeWluZyIsIntwcmVjaXNpb259Iiwie3R5cGV9IixnXS5qb2luKCIgIikrIjtcbiI7dmFyIHk9W3AuZnJhZ21lbnRQcmFnbWFzLmRlZmluZVtnXSwiYXR0cmlidXRlIiwie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLG1dLmpvaW4oIiAiKSsiO1xuIjtwLmZyYWdtZW50UHJhZ21hcy5kZWZpbmVbZ109dixwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddPXYreSxwLnZlcnRleFByYWdtYXMuaW5pdGlhbGl6ZVtnXT1bZywiPSIsbSwiLyIsdS5tdWx0aXBsaWVyLnRvRml4ZWQoMSldLmpvaW4oIiAiKSsiO1xuIn1lbHNle2Zvcih2YXIgYj0idV8iK20uc2xpY2UoMikrIl90Iix4PWQuZ2V0UGFpbnRWYWx1ZVN0b3Bab29tTGV2ZWxzKHUucGFpbnRQcm9wZXJ0eSksXz0wO188eC5sZW5ndGgmJnhbX108dC56b29tOylfKys7Zm9yKHZhciB3PU1hdGgubWF4KDAsTWF0aC5taW4oeC5sZW5ndGgtNCxfLTIpKSxNPVtdLGs9MDtrPDQ7aysrKU0ucHVzaCh4W01hdGgubWluKHcrayx4Lmxlbmd0aC0xKV0pO3Y9WyJ2YXJ5aW5nIiwie3ByZWNpc2lvbn0iLCJ7dHlwZX0iLGddLmpvaW4oIiAiKSsiO1xuIixwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddPXYrWyJ1bmlmb3JtIiwibG93cCIsImZsb2F0IixiXS5qb2luKCIgIikrIjtcbiIscC5mcmFnbWVudFByYWdtYXMuZGVmaW5lW2ddPXYscC51bmlmb3Jtcy5wdXNoKGMuZXh0ZW5kKHt9LHUse25hbWU6YixnZXRWYWx1ZTpvKHUsdyksY29tcG9uZW50czoxfSkpO3ZhciBBPXUuY29tcG9uZW50cztpZigxPT09QSlwLmF0dHJpYnV0ZXMucHVzaChjLmV4dGVuZCh7fSx1LHtnZXRWYWx1ZTphKHUsTSksaXNGdW5jdGlvbjohMCxjb21wb25lbnRzOjQqQX0pKSxwLnZlcnRleFByYWdtYXMuZGVmaW5lW2ddKz1bImF0dHJpYnV0ZSIsIntwcmVjaXNpb259IiwidmVjNCIsbV0uam9pbigiICIpKyI7XG4iLHAudmVydGV4UHJhZ21hcy5pbml0aWFsaXplW2ddPVtnLCI9IiwiZXZhbHVhdGVfem9vbV9mdW5jdGlvbl8xKCIrbSsiLCAiK2IrIikiLCIvIix1Lm11bHRpcGxpZXIudG9GaXhlZCgxKV0uam9pbigiICIpKyI7XG4iO2Vsc2V7Zm9yKHZhciBUPVtdLFM9MDtTPDQ7UysrKVQucHVzaChtK1MpLHAuYXR0cmlidXRlcy5wdXNoKGMuZXh0ZW5kKHt9LHUse2dldFZhbHVlOmEodSxbTVtTXV0pLGlzRnVuY3Rpb246ITAsbmFtZTptK1N9KSkscC52ZXJ0ZXhQcmFnbWFzLmRlZmluZVtnXSs9WyJhdHRyaWJ1dGUiLCJ7cHJlY2lzaW9ufSIsInt0eXBlfSIsbStTXS5qb2luKCIgIikrIjtcbiI7cC52ZXJ0ZXhQcmFnbWFzLmluaXRpYWxpemVbZ109W2csIiA9ICIsImV2YWx1YXRlX3pvb21fZnVuY3Rpb25fNCgiK1Quam9pbigiLCAiKSsiLCAiK2IrIikiLCIvIix1Lm11bHRpcGxpZXIudG9GaXhlZCgxKV0uam9pbigiICIpKyI7XG4ifX19fX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZ2V0VmFsdWUocixjLmV4dGVuZCh7fSxuLHt6b29tOmVbMF19KSxpKTtmb3IodmFyIGE9W10sbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcz1lW29dO2EucHVzaCh0LmdldFZhbHVlKHIsYy5leHRlbmQoe30sbix7em9vbTpzfSksaSlbMF0pfXJldHVybiBhfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5nZXRQYWludEludGVycG9sYXRpb25UKHQucGFpbnRQcm9wZXJ0eSxuLnpvb20pCjtyZXR1cm5bTWF0aC5tYXgoMCxNYXRoLm1pbig0LGktZSkpXX19dmFyIHM9dCgiZmVhdHVyZS1maWx0ZXIiKSxsPXQoIi4vYXJyYXlfZ3JvdXAiKSx1PXQoIi4vYnVmZmVyX2dyb3VwIiksYz10KCIuLi91dGlsL3V0aWwiKSxoPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IiksZj10KCJhc3NlcnQiKTtlLmV4cG9ydHM9bixuLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KHtmaWxsOnQoIi4vYnVja2V0L2ZpbGxfYnVja2V0IiksbGluZTp0KCIuL2J1Y2tldC9saW5lX2J1Y2tldCIpLGNpcmNsZTp0KCIuL2J1Y2tldC9jaXJjbGVfYnVja2V0Iiksc3ltYm9sOnQoIi4vYnVja2V0L3N5bWJvbF9idWNrZXQiKX1bZS5sYXllci50eXBlXSkoZSl9LG4uRVhURU5UPTgxOTIsbi5wcm90b3R5cGUucG9wdWxhdGVBcnJheXM9ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZUFycmF5cygpLHRoaXMucmVjYWxjdWxhdGVTdHlsZUxheWVycygpO2Zvcih2YXIgdD0wO3Q8dGhpcy5mZWF0dXJlcy5sZW5ndGg7dCsrKXRoaXMuYWRkRmVhdHVyZSh0aGlzLmZlYXR1cmVzW3RdKTt0aGlzLnRyaW1BcnJheXMoKX0sbi5wcm90b3R5cGUucHJlcGFyZUFycmF5R3JvdXA9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmFycmF5R3JvdXBzW3RdLG49ci5sZW5ndGgmJnJbci5sZW5ndGgtMV07cmV0dXJuIG4mJm4uaGFzQ2FwYWNpdHlGb3IoZSl8fChuPW5ldyBsKHtsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6dGhpcy5wcm9ncmFtSW50ZXJmYWNlc1t0XS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUsZWxlbWVudEFycmF5VHlwZTp0aGlzLnByb2dyYW1JbnRlcmZhY2VzW3RdLmVsZW1lbnRBcnJheVR5cGUsZWxlbWVudEFycmF5VHlwZTI6dGhpcy5wcm9ncmFtSW50ZXJmYWNlc1t0XS5lbGVtZW50QXJyYXlUeXBlMixwYWludFZlcnRleEFycmF5VHlwZXM6dGhpcy5wYWludFZlcnRleEFycmF5VHlwZXNbdF19KSxuLmluZGV4PXIubGVuZ3RoLHIucHVzaChuKSksbn0sbi5wcm90b3R5cGUuY3JlYXRlQXJyYXlzPWZ1bmN0aW9uKCl7dGhpcy5hcnJheUdyb3Vwcz17fSx0aGlzLnBhaW50VmVydGV4QXJyYXlUeXBlcz17fTtmb3IodmFyIHQgaW4gdGhpcy5wcm9ncmFtSW50ZXJmYWNlcyl7dGhpcy5hcnJheUdyb3Vwc1t0XT1bXTt2YXIgZT10aGlzLnBhaW50VmVydGV4QXJyYXlUeXBlc1t0XT17fSxyPXRoaXMucGFpbnRBdHRyaWJ1dGVzW3RdO2Zvcih2YXIgaSBpbiByKWVbaV09bmV3IG4uVmVydGV4QXJyYXlUeXBlKHJbaV0uYXR0cmlidXRlcyl9fSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJ1ZmZlckdyb3Vwcylmb3IodmFyIHI9dGhpcy5idWZmZXJHcm91cHNbZV0sbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZGVzdHJveSh0KX0sbi5wcm90b3R5cGUudHJpbUFycmF5cz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmFycmF5R3JvdXBzKWZvcih2YXIgZT10aGlzLmFycmF5R3JvdXBzW3RdLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLnRyaW0oKX0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmFycmF5R3JvdXBzKWZvcih2YXIgZT10aGlzLmFycmF5R3JvdXBzW3RdLHI9MDtyPGUubGVuZ3RoO3IrKylpZighZVtyXS5pc0VtcHR5KCkpcmV0dXJuITE7cmV0dXJuITB9LG4ucHJvdG90eXBlLmdldFRyYW5zZmVyYWJsZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYXJyYXlHcm91cHMpZm9yKHZhciByPXRoaXMuYXJyYXlHcm91cHNbZV0sbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZ2V0VHJhbnNmZXJhYmxlcyh0KX0sbi5wcm90b3R5cGUuc2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dGhpcy5wYWludEF0dHJpYnV0ZXNbZV1bbi5pZF0udW5pZm9ybXMsbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9cltzLm5hbWVdO3RbInVuaWZvcm0iK3MuY29tcG9uZW50cysiZnYiXShsLHMuZ2V0VmFsdWUobixpKSl9fSxuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57bGF5ZXJJZDp0aGlzLmxheWVyLmlkLHpvb206dGhpcy56b29tLGFycmF5czpjLm1hcE9iamVjdCh0aGlzLmFycmF5R3JvdXBzLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pfSkscGFpbnRWZXJ0ZXhBcnJheVR5cGVzOmMubWFwT2JqZWN0KHRoaXMucGFpbnRWZXJ0ZXhBcnJheVR5cGVzLGZ1bmN0aW9uKHQpe3JldHVybiBjLm1hcE9iamVjdCh0LGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSl9KSxjaGlsZExheWVySWRzOnRoaXMuY2hpbGRMYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSl9fSxuLnByb3RvdHlwZS5jcmVhdGVGaWx0ZXI9ZnVuY3Rpb24oKXt0aGlzLmZpbHRlcnx8KHRoaXMuZmlsdGVyPXModGhpcy5sYXllci5maWx0ZXIpKX07dmFyIGQ9e2xhc3RJbnRlZ2VyWm9vbToxLzAsbGFzdEludGVnZXJab29tVGltZTowLGxhc3Rab29tOjB9O24ucHJvdG90eXBlLnJlY2FsY3VsYXRlU3R5bGVMYXllcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHRoaXMuY2hpbGRMYXllcnMubGVuZ3RoO3QrKyl0aGlzLmNoaWxkTGF5ZXJzW3RdLnJlY2FsY3VsYXRlKHRoaXMuem9vbSxkKX0sbi5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8dGhpcy5jaGlsZExheWVycy5sZW5ndGg7YSsrKWZvcih2YXIgbz10aGlzLmNoaWxkTGF5ZXJzW2FdLHM9dGhpcy5hcnJheUdyb3Vwc1t0XSxsPW4uaW5kZXg7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF0sYz11LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxoPXUucGFpbnRWZXJ0ZXhBcnJheXNbby5pZF07aC5yZXNpemUoYyk7Zm9yKHZhciBmPXRoaXMucGFpbnRBdHRyaWJ1dGVzW3RdW28uaWRdLmF0dHJpYnV0ZXMsZD0wO2Q8Zi5sZW5ndGg7ZCsrKWZvcih2YXIgcD1mW2RdLG09cC5nZXRWYWx1ZShvLGUsciksdj1wLm11bHRpcGxpZXJ8fDEsZz1wLmNvbXBvbmVudHN8fDEseT1sPT09bi5pbmRleD9pOjAsYj15O2I8YztiKyspZm9yKHZhciB4PWguZ2V0KGIpLF89MDtfPGc7XysrKXt2YXIgdz1nPjE/cC5uYW1lK186cC5uYW1lO3hbd109bVtfXSp2fX19LG4uVmVydGV4QXJyYXlUeXBlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaCh7bWVtYmVyczp0LGFsaWdubWVudDo0fSl9LG4uRWxlbWVudEFycmF5VHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGgoe21lbWJlcnM6W3t0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2VzIixjb21wb25lbnRzOnR8fDN9XX0pfX0seyIuLi91dGlsL3N0cnVjdF9hcnJheSI6NDM4LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9hcnJheV9ncm91cCI6MzI2LCIuL2J1Y2tldC9jaXJjbGVfYnVja2V0IjozMjgsIi4vYnVja2V0L2ZpbGxfYnVja2V0IjozMjksIi4vYnVja2V0L2xpbmVfYnVja2V0IjozMzAsIi4vYnVja2V0L3N5bWJvbF9idWNrZXQiOjMzMSwiLi9idWZmZXJfZ3JvdXAiOjMzMyxhc3NlcnQ6NDUsImZlYXR1cmUtZmlsdGVyIjoxMzB9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2kuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciBpPXQoIi4uL2J1Y2tldCIpLGE9dCgiLi4vLi4vdXRpbC91dGlsIiksbz10KCIuLi9sb2FkX2dlb21ldHJ5Iikscz1pLkVYVEVOVDtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1hLmluaGVyaXQoaSx7fSksbi5wcm90b3R5cGUuYWRkQ2lyY2xlVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHQuZW1wbGFjZUJhY2soMiplKyhuKzEpLzIsMipyKyhpKzEpLzIpfSxuLnByb3RvdHlwZS5wcm9ncmFtSW50ZXJmYWNlcz17Y2lyY2xlOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IGkuVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSksZWxlbWVudEFycmF5VHlwZTpuZXcgaS5FbGVtZW50QXJyYXlUeXBlLHBhaW50QXR0cmlidXRlczpbe25hbWU6ImFfY29sb3IiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCIsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmdldFBhaW50VmFsdWUoImNpcmNsZS1jb2xvciIsZSxyKX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiY2lyY2xlLWNvbG9yIn0se25hbWU6ImFfcmFkaXVzIixjb21wb25lbnRzOjEsdHlwZToiVWludDE2Iixpc0xheWVyQ29uc3RhbnQ6ITEsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVyblt0LmdldFBhaW50VmFsdWUoImNpcmNsZS1yYWRpdXMiLGUscildfSxtdWx0aXBsaWVyOjEwLHBhaW50UHJvcGVydHk6ImNpcmNsZS1yYWRpdXMifSx7bmFtZToiYV9ibHVyIixjb21wb25lbnRzOjEsdHlwZToiVWludDE2Iixpc0xheWVyQ29uc3RhbnQ6ITEsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVyblt0LmdldFBhaW50VmFsdWUoImNpcmNsZS1ibHVyIixlLHIpXX0sbXVsdGlwbGllcjoxMCxwYWludFByb3BlcnR5OiJjaXJjbGUtYmx1ciJ9LHtuYW1lOiJhX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50MTYiLGlzTGF5ZXJDb25zdGFudDohMSxnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW3QuZ2V0UGFpbnRWYWx1ZSgiY2lyY2xlLW9wYWNpdHkiLGUscildfSxtdWx0aXBsaWVyOjI1NSxwYWludFByb3BlcnR5OiJjaXJjbGUtb3BhY2l0eSJ9XX19LG4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt6b29tOnRoaXMuem9vbX0scj1vKHQpLG49dGhpcy5wcmVwYXJlQXJyYXlHcm91cCgiY2lyY2xlIiwwKSxpPW4ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGE9MDthPHIubGVuZ3RoO2ErKylmb3IodmFyIGw9MDtsPHJbYV0ubGVuZ3RoO2wrKyl7dmFyIHU9clthXVtsXS54LGM9clthXVtsXS55O2lmKCEodTwwfHx1Pj1zfHxjPDB8fGM+PXMpKXt2YXIgaD10aGlzLnByZXBhcmVBcnJheUdyb3VwKCJjaXJjbGUiLDQpLGY9aC5sYXlvdXRWZXJ0ZXhBcnJheSxkPXRoaXMuYWRkQ2lyY2xlVmVydGV4KGYsdSxjLC0xLC0xKTt0aGlzLmFkZENpcmNsZVZlcnRleChmLHUsYywxLC0xKSx0aGlzLmFkZENpcmNsZVZlcnRleChmLHUsYywxLDEpLHRoaXMuYWRkQ2lyY2xlVmVydGV4KGYsdSxjLC0xLDEpLGguZWxlbWVudEFycmF5LmVtcGxhY2VCYWNrKGQsZCsxLGQrMiksaC5lbGVtZW50QXJyYXkuZW1wbGFjZUJhY2soZCxkKzMsZCsyKX19dGhpcy5wb3B1bGF0ZVBhaW50QXJyYXlzKCJjaXJjbGUiLGUsdC5wcm9wZXJ0aWVzLG4saSl9fSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9idWNrZXQiOjMyNywiLi4vbG9hZF9nZW9tZXRyeSI6MzM1fV0sMzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi9idWNrZXQiKSxhPXQoIi4uLy4uL3V0aWwvdXRpbCIpLG89dCgiLi4vbG9hZF9nZW9tZXRyeSIpLHM9dCgiZWFyY3V0IiksbD10KCIuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9YS5pbmhlcml0KGkse30pLG4ucHJvdG90eXBlLnByb2dyYW1JbnRlcmZhY2VzPXtmaWxsOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IGkuVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSksZWxlbWVudEFycmF5VHlwZTpuZXcgaS5FbGVtZW50QXJyYXlUeXBlKDEpLGVsZW1lbnRBcnJheVR5cGUyOm5ldyBpLkVsZW1lbnRBcnJheVR5cGUoMikscGFpbnRBdHRyaWJ1dGVzOlt7bmFtZToiYV9jb2xvciIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQ4IixnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHQuZ2V0UGFpbnRWYWx1ZSgiZmlsbC1jb2xvciIsZSxyKX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiZmlsbC1jb2xvciJ9LHtuYW1lOiJhX291dGxpbmVfY29sb3IiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCIsZ2V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmdldFBhaW50VmFsdWUoImZpbGwtb3V0bGluZS1jb2xvciIsZSxyKX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiZmlsbC1vdXRsaW5lLWNvbG9yIn0se25hbWU6ImFfb3BhY2l0eSIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4IixnZXRWYWx1ZTpmdW5jdGlvbih0LGUscil7cmV0dXJuW3QuZ2V0UGFpbnRWYWx1ZSgiZmlsbC1vcGFjaXR5IixlLHIpXX0sbXVsdGlwbGllcjoyNTUscGFpbnRQcm9wZXJ0eToiZmlsbC1vcGFjaXR5In1dfX0sbi5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9byh0KSxyPWwoZSw1MDApLG49dGhpcy5wcmVwYXJlQXJyYXlHcm91cCgiZmlsbCIsMCksaT1uLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCxhPTA7YTxyLmxlbmd0aDthKyspdGhpcy5hZGRQb2x5Z29uKHJbYV0pO3RoaXMucG9wdWxhdGVQYWludEFycmF5cygiZmlsbCIse3pvb206dGhpcy56b29tfSx0LnByb3BlcnRpZXMsbixpKX0sbi5wcm90b3R5cGUuYWRkUG9seWdvbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZSs9dFtyXS5sZW5ndGg7Zm9yKHZhciBuPXRoaXMucHJlcGFyZUFycmF5R3JvdXAoImZpbGwiLGUpLGk9W10sYT1bXSxvPW4ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIHU9dFtsXTtsPjAmJmEucHVzaChpLmxlbmd0aC8yKTtmb3IodmFyIGM9MDtjPHUubGVuZ3RoO2MrKyl7dmFyIGg9dVtjXSxmPW4ubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soaC54LGgueSk7Yz49MSYmbi5lbGVtZW50QXJyYXkyLmVtcGxhY2VCYWNrKGYtMSxmKSxpLnB1c2goaC54KSxpLnB1c2goaC55KX19Zm9yKHZhciBkPXMoaSxhKSxwPTA7cDxkLmxlbmd0aDtwKyspbi5lbGVtZW50QXJyYXkuZW1wbGFjZUJhY2soZFtwXStvKX19LHsiLi4vLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyI6NDI4LCIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vYnVja2V0IjozMjcsIi4uL2xvYWRfZ2VvbWV0cnkiOjMzNSxlYXJjdXQ6MTI0fV0sMzMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi9idWNrZXQiKSxhPXQoIi4uLy4uL3V0aWwvdXRpbCIpLG89dCgiLi4vbG9hZF9nZW9tZXRyeSIpLHM9aS5FWFRFTlQsbD1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSx1PU1hdGgucG93KDIsMTQpLy41O2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWEuaW5oZXJpdChpLHt9KSxuLnByb3RvdHlwZS5hZGRMaW5lVmVydGV4PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiB0LmVtcGxhY2VCYWNrKGUueDw8MXxuLGUueTw8MXxpLE1hdGgucm91bmQoNjMqci54KSsxMjgsTWF0aC5yb3VuZCg2MypyLnkpKzEyOCwxKygwPT09YT8wOmE8MD8tMToxKXwoLjUqbyY2Myk8PDIsLjUqbz4+Nil9LG4ucHJvdG90eXBlLnByb2dyYW1JbnRlcmZhY2VzPXtsaW5lOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IGkuVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50OCJ9XSksZWxlbWVudEFycmF5VHlwZTpuZXcgaS5FbGVtZW50QXJyYXlUeXBlfX0sbi5wcm90b3R5cGUuYWRkRmVhdHVyZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9byh0LDE1KSxyPTA7cjxlLmxlbmd0aDtyKyspdGhpcy5hZGRMaW5lKGVbcl0sdGhpcy5sYXllci5sYXlvdXRbImxpbmUtam9pbiJdLHRoaXMubGF5ZXIubGF5b3V0WyJsaW5lLWNhcCJdLHRoaXMubGF5ZXIubGF5b3V0WyJsaW5lLW1pdGVyLWxpbWl0Il0sdGhpcy5sYXllci5sYXlvdXRbImxpbmUtcm91bmQtbGltaXQiXSl9LG4ucHJvdG90eXBlLmFkZExpbmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dC5sZW5ndGg7YT4yJiZ0W2EtMV0uZXF1YWxzKHRbYS0yXSk7KWEtLTtpZighKHQubGVuZ3RoPDIpKXsiYmV2ZWwiPT09ZSYmKG49MS4wNSk7dmFyIG89cy8oNTEyKnRoaXMub3ZlcnNjYWxpbmcpKjE1LHU9dFswXSxjPXRbYS0xXSxoPXUuZXF1YWxzKGMpO2lmKHRoaXMucHJlcGFyZUFycmF5R3JvdXAoImxpbmUiLDEwKmEpLDIhPT1hfHwhaCl7dGhpcy5kaXN0YW5jZT0wO3ZhciBmLGQscCxtLHYsZyx5LGI9cix4PWg/ImJ1dHQiOnIsXz0hMDt0aGlzLmUxPXRoaXMuZTI9dGhpcy5lMz0tMSxoJiYoZj10W2EtMl0sdj11LnN1YihmKS5fdW5pdCgpLl9wZXJwKCkpO2Zvcih2YXIgdz0wO3c8YTt3KyspaWYoIShwPWgmJnc9PT1hLTE/dFsxXTp0W3crMV0pfHwhdFt3XS5lcXVhbHMocCkpe3YmJihtPXYpLGYmJihkPWYpLGY9dFt3XSx2PXA/cC5zdWIoZikuX3VuaXQoKS5fcGVycCgpOm0sbT1tfHx2O3ZhciBNPW0uYWRkKHYpLl91bml0KCksaz1NLngqdi54K00ueSp2LnksQT0xL2ssVD1rPGwmJmQmJnA7aWYoVCYmdz4wKXt2YXIgUz1mLmRpc3QoZCk7aWYoUz4yKm8pe3ZhciBFPWYuc3ViKGYuc3ViKGQpLl9tdWx0KG8vUykuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPUUuZGlzdChkKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoRSx0aGlzLmRpc3RhbmNlLG0ubXVsdCgxKSwwLDAsITEpLGQ9RX19dmFyIEw9ZCYmcCxDPUw/ZTpwP2I6eDtpZihMJiYicm91bmQiPT09QyYmKEE8aT9DPSJtaXRlciI6QTw9MiYmKEM9ImZha2Vyb3VuZCIpKSwibWl0ZXIiPT09QyYmQT5uJiYoQz0iYmV2ZWwiKSwiYmV2ZWwiPT09QyYmKEE+MiYmKEM9ImZsaXBiZXZlbCIpLEE8biYmKEM9Im1pdGVyIikpLGQmJih0aGlzLmRpc3RhbmNlKz1mLmRpc3QoZCkpLCJtaXRlciI9PT1DKU0uX211bHQoQSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxNLDAsMCwhMSk7ZWxzZSBpZigiZmxpcGJldmVsIj09PUMpe2lmKEE+MTAwKU09di5jbG9uZSgpO2Vsc2V7dmFyIHo9bS54KnYueS1tLnkqdi54PjA/LTE6MSxJPUEqbS5hZGQodikubWFnKCkvbS5zdWIodikubWFnKCk7TS5fcGVycCgpLl9tdWx0KEkqeil9dGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxNLDAsMCwhMSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxNLm11bHQoLTEpLDAsMCwhMSl9ZWxzZSBpZigiYmV2ZWwiPT09Q3x8ImZha2Vyb3VuZCI9PT1DKXt2YXIgRD1tLngqdi55LW0ueSp2Lng+MCxQPS1NYXRoLnNxcnQoQSpBLTEpO2lmKEQ/KHk9MCxnPVApOihnPTAseT1QKSxffHx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLG0sZyx5LCExKSwiZmFrZXJvdW5kIj09PUMpe2Zvcih2YXIgTyxSPU1hdGguZmxvb3IoOCooLjUtKGstLjUpKSksRj0wO0Y8UjtGKyspTz12Lm11bHQoKEYrMSkvKFIrMSkpLl9hZGQobSkuX3VuaXQoKSx0aGlzLmFkZFBpZVNsaWNlVmVydGV4KGYsdGhpcy5kaXN0YW5jZSxPLEQpO3RoaXMuYWRkUGllU2xpY2VWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLE0sRCk7Zm9yKHZhciBqPVItMTtqPj0wO2otLSlPPW0ubXVsdCgoaisxKS8oUisxKSkuX2FkZCh2KS5fdW5pdCgpLHRoaXMuYWRkUGllU2xpY2VWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLE8sRCl9cCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LC1nLC15LCExKX1lbHNlImJ1dHQiPT09Qz8oX3x8dGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxtLDAsMCwhMSkscCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LDAsMCwhMSkpOiJzcXVhcmUiPT09Qz8oX3x8KHRoaXMuYWRkQ3VycmVudFZlcnRleChmLHRoaXMuZGlzdGFuY2UsbSwxLDEsITEpLHRoaXMuZTE9dGhpcy5lMj0tMSkscCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LC0xLC0xLCExKSk6InJvdW5kIj09PUMmJihffHwodGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxtLDAsMCwhMSksdGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSxtLDEsMSwhMCksdGhpcy5lMT10aGlzLmUyPS0xKSxwJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KGYsdGhpcy5kaXN0YW5jZSx2LC0xLC0xLCEwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoZix0aGlzLmRpc3RhbmNlLHYsMCwwLCExKSkpO2lmKFQmJnc8YS0xKXt2YXIgTj1mLmRpc3QocCk7aWYoTj4yKm8pe3ZhciBCPWYuYWRkKHAuc3ViKGYpLl9tdWx0KG8vTikuX3JvdW5kKCkpO3RoaXMuZGlzdGFuY2UrPUIuZGlzdChmKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoQix0aGlzLmRpc3RhbmNlLHYubXVsdCgxKSwwLDAsITEpLGY9Qn19Xz0hMX19fX0sbi5wcm90b3R5cGUuYWRkQ3VycmVudFZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scz1hPzE6MCxsPXRoaXMuYXJyYXlHcm91cHMubGluZVt0aGlzLmFycmF5R3JvdXBzLmxpbmUubGVuZ3RoLTFdLGM9bC5sYXlvdXRWZXJ0ZXhBcnJheSxoPWwuZWxlbWVudEFycmF5O289ci5jbG9uZSgpLG4mJm8uX3N1YihyLnBlcnAoKS5fbXVsdChuKSksdGhpcy5lMz10aGlzLmFkZExpbmVWZXJ0ZXgoYyx0LG8scywwLG4sZSksdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmaC5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxvPXIubXVsdCgtMSksaSYmby5fc3ViKHIucGVycCgpLl9tdWx0KGkpKSx0aGlzLmUzPXRoaXMuYWRkTGluZVZlcnRleChjLHQsbyxzLDEsLWksZSksdGhpcy5lMT49MCYmdGhpcy5lMj49MCYmaC5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdGhpcy5lMyksdGhpcy5lMT10aGlzLmUyLHRoaXMuZTI9dGhpcy5lMyxlPnUvMiYmKHRoaXMuZGlzdGFuY2U9MCx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodCx0aGlzLmRpc3RhbmNlLHIsbixpLGEpKX0sbi5wcm90b3R5cGUuYWRkUGllU2xpY2VWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bj8xOjA7cj1yLm11bHQobj8tMToxKTt2YXIgYT10aGlzLmFycmF5R3JvdXBzLmxpbmVbdGhpcy5hcnJheUdyb3Vwcy5saW5lLmxlbmd0aC0xXSxvPWEubGF5b3V0VmVydGV4QXJyYXkscz1hLmVsZW1lbnRBcnJheTt0aGlzLmUzPXRoaXMuYWRkTGluZVZlcnRleChvLHQsciwwLGksMCxlKSx0aGlzLmUxPj0wJiZ0aGlzLmUyPj0wJiZzLmVtcGxhY2VCYWNrKHRoaXMuZTEsdGhpcy5lMix0aGlzLmUzKSxuP3RoaXMuZTI9dGhpcy5lMzp0aGlzLmUxPXRoaXMuZTN9fSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9idWNrZXQiOjMyNywiLi4vbG9hZF9nZW9tZXRyeSI6MzM1fV0sMzMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7by5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLnN5bWJvbFF1YWRzQXJyYXk9dC5zeW1ib2xRdWFkc0FycmF5LHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9dC5zeW1ib2xJbnN0YW5jZXNBcnJheSx0aGlzLnNkZkljb25zPXQuc2RmSWNvbnMsdGhpcy5pY29uc05lZWRMaW5lYXI9dC5pY29uc05lZWRMaW5lYXIsdGhpcy5hZGp1c3RlZFRleHRTaXplPXQuYWRqdXN0ZWRUZXh0U2l6ZSx0aGlzLmFkanVzdGVkSWNvblNpemU9dC5hZGp1c3RlZEljb25TaXplLHRoaXMuZm9udHN0YWNrPXQuZm9udHN0YWNrfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEsbyxzLGwsdSxjKXtyZXR1cm4gdC5lbXBsYWNlQmFjayhlLHIsTWF0aC5yb3VuZCg2NCpuKSxNYXRoLnJvdW5kKDY0KmkpLGEvNCxvLzQsMTAqKHV8fDApLGMsMTAqKHN8fDApLDEwKk1hdGgubWluKGx8fDI1LDI1KSl9dmFyIGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPXQoIi4uL2J1Y2tldCIpLHM9dCgiLi4vLi4vc3ltYm9sL2FuY2hvciIpLGw9dCgiLi4vLi4vc3ltYm9sL2dldF9hbmNob3JzIiksdT10KCIuLi8uLi91dGlsL3Rva2VuIiksYz10KCIuLi8uLi9zeW1ib2wvcXVhZHMiKSxoPXQoIi4uLy4uL3N5bWJvbC9zaGFwaW5nIiksZj10KCIuLi8uLi9zeW1ib2wvcmVzb2x2ZV90ZXh0IiksZD10KCIuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyIpLHA9dCgiLi4vLi4vc3ltYm9sL2NsaXBfbGluZSIpLG09dCgiLi4vLi4vdXRpbC91dGlsIiksdj10KCIuLi9sb2FkX2dlb21ldHJ5IiksZz10KCIuLi8uLi9zeW1ib2wvY29sbGlzaW9uX2ZlYXR1cmUiKSx5PWguc2hhcGVUZXh0LGI9aC5zaGFwZUljb24seD1jLmdldEdseXBoUXVhZHMsXz1jLmdldEljb25RdWFkcyx3PW8uRVhURU5UO2UuZXhwb3J0cz1uLG4uTUFYX1FVQURTPTY1NTM1LG4ucHJvdG90eXBlPW0uaW5oZXJpdChvLHt9KSxuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1vLnByb3RvdHlwZS5zZXJpYWxpemUuYXBwbHkodGhpcyk7cmV0dXJuIHQuc2RmSWNvbnM9dGhpcy5zZGZJY29ucyx0Lmljb25zTmVlZExpbmVhcj10aGlzLmljb25zTmVlZExpbmVhcix0LmFkanVzdGVkVGV4dFNpemU9dGhpcy5hZGp1c3RlZFRleHRTaXplLHQuYWRqdXN0ZWRJY29uU2l6ZT10aGlzLmFkanVzdGVkSWNvblNpemUsdC5mb250c3RhY2s9dGhpcy5mb250c3RhY2ssdH07dmFyIE09bmV3IG8uVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX29mZnNldCIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In0se25hbWU6ImFfdGV4dHVyZV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0pLGs9bmV3IG8uRWxlbWVudEFycmF5VHlwZTtuLnByb3RvdHlwZS5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdC5lbXBsYWNlQmFjayhlLngsZS55LE1hdGgucm91bmQoci54KSxNYXRoLnJvdW5kKHIueSksMTAqbiwxMCppKX0sbi5wcm90b3R5cGUucHJvZ3JhbUludGVyZmFjZXM9e2dseXBoOntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6TSxlbGVtZW50QXJyYXlUeXBlOmt9LGljb246e2xheW91dFZlcnRleEFycmF5VHlwZTpNLGVsZW1lbnRBcnJheVR5cGU6a30sY29sbGlzaW9uQm94OntsYXlvdXRWZXJ0ZXhBcnJheVR5cGU6bmV3IG8uVmVydGV4QXJyYXlUeXBlKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2RhdGEiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50OCJ9XSl9fSxuLnByb3RvdHlwZS5wb3B1bGF0ZUFycmF5cz1mdW5jdGlvbih0LGUscil7dmFyIG49e2xhc3RJbnRlZ2VyWm9vbToxLzAsbGFzdEludGVnZXJab29tVGltZTowLGxhc3Rab29tOjB9O3RoaXMuYWRqdXN0ZWRUZXh0TWF4U2l6ZT10aGlzLmxheWVyLmdldExheW91dFZhbHVlKCJ0ZXh0LXNpemUiLHt6b29tOjE4LHpvb21IaXN0b3J5Om59KSx0aGlzLmFkanVzdGVkVGV4dFNpemU9dGhpcy5sYXllci5nZXRMYXlvdXRWYWx1ZSgidGV4dC1zaXplIix7em9vbTp0aGlzLnpvb20rMSx6b29tSGlzdG9yeTpufSksdGhpcy5hZGp1c3RlZEljb25NYXhTaXplPXRoaXMubGF5ZXIuZ2V0TGF5b3V0VmFsdWUoImljb24tc2l6ZSIse3pvb206MTgsem9vbUhpc3Rvcnk6bn0pLHRoaXMuYWRqdXN0ZWRJY29uU2l6ZT10aGlzLmxheWVyLmdldExheW91dFZhbHVlKCJpY29uLXNpemUiLHt6b29tOnRoaXMuem9vbSsxLHpvb21IaXN0b3J5Om59KTt2YXIgaT01MTIqdGhpcy5vdmVyc2NhbGluZzt0aGlzLnRpbGVQaXhlbFJhdGlvPXcvaSx0aGlzLmNvbXBhcmVUZXh0PXt9LHRoaXMuaWNvbnNOZWVkTGluZWFyPSExLHRoaXMuc3ltYm9sSW5zdGFuY2VzU3RhcnRJbmRleD10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5Lmxlbmd0aDt2YXIgYT10aGlzLmxheWVyLmxheW91dCxvPXRoaXMuZmVhdHVyZXMscz10aGlzLnRleHRGZWF0dXJlcyxsPS41LGM9LjU7c3dpdGNoKGFbInRleHQtYW5jaG9yIl0pe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6bD0xO2JyZWFrO2Nhc2UibGVmdCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6bD0wfXN3aXRjaChhWyJ0ZXh0LWFuY2hvciJdKXtjYXNlImJvdHRvbSI6Y2FzZSJib3R0b20tcmlnaHQiOmNhc2UiYm90dG9tLWxlZnQiOmM9MTticmVhaztjYXNlInRvcCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOmM9MH1mb3IodmFyIGg9InJpZ2h0Ij09PWFbInRleHQtanVzdGlmeSJdPzE6ImxlZnQiPT09YVsidGV4dC1qdXN0aWZ5Il0/MDouNSxmPTI0KmFbInRleHQtbGluZS1oZWlnaHQiXSxwPSJsaW5lIiE9PWFbInN5bWJvbC1wbGFjZW1lbnQiXT8yNCphWyJ0ZXh0LW1heC13aWR0aCJdOjAsZz0yNCphWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0seD1bMjQqYVsidGV4dC1vZmZzZXQiXVswXSwyNCphWyJ0ZXh0LW9mZnNldCJdWzFdXSxfPXRoaXMuZm9udHN0YWNrPWFbInRleHQtZm9udCJdLmpvaW4oIiwiKSxNPVtdLGs9MDtrPG8ubGVuZ3RoO2srKylNLnB1c2godihvW2tdKSk7aWYoImxpbmUiPT09YVsic3ltYm9sLXBsYWNlbWVudCJdKXt2YXIgQT1kKG8scyxNKTtNPUEuZ2VvbWV0cmllcyxvPUEuZmVhdHVyZXMscz1BLnRleHRGZWF0dXJlc31mb3IodmFyIFQsUyxFPTA7RTxvLmxlbmd0aDtFKyspaWYoTVtFXSl7aWYoVD1zW0VdP3koc1tFXSxlW19dLHAsZixsLGMsaCxnLHgpOm51bGwsYVsiaWNvbi1pbWFnZSJdKXt2YXIgTD11KG9bRV0ucHJvcGVydGllcyxhWyJpY29uLWltYWdlIl0pLEM9cltMXTtTPWIoQyxhKSxDJiYodm9pZCAwPT09dGhpcy5zZGZJY29ucz90aGlzLnNkZkljb25zPUMuc2RmOnRoaXMuc2RmSWNvbnMhPT1DLnNkZiYmbS53YXJuT25jZSgiU3R5bGUgc2hlZXQgd2FybmluZzogQ2Fubm90IG1peCBTREYgYW5kIG5vbi1TREYgaWNvbnMgaW4gb25lIGJ1ZmZlciIpLDEhPT1DLnBpeGVsUmF0aW8/dGhpcy5pY29uc05lZWRMaW5lYXI9ITA6MD09PWFbImljb24tcm90YXRlIl0mJnRoaXMubGF5ZXIuaXNMYXlvdXRWYWx1ZUZlYXR1cmVDb25zdGFudCgiaWNvbi1yb3RhdGUiKXx8KHRoaXMuaWNvbnNOZWVkTGluZWFyPSEwKSl9ZWxzZSBTPW51bGw7KFR8fFMpJiZ0aGlzLmFkZEZlYXR1cmUoTVtFXSxULFMsb1tFXSl9dGhpcy5zeW1ib2xJbnN0YW5jZXNFbmRJbmRleD10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5Lmxlbmd0aCx0aGlzLnBsYWNlRmVhdHVyZXModCx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyksdGhpcy50cmltQXJyYXlzKCl9LG4ucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sYXllci5sYXlvdXQsYT10aGlzLmFkanVzdGVkVGV4dFNpemUvMjQsbz12b2lkIDAhPT10aGlzLmFkanVzdGVkVGV4dE1heFNpemU/dGhpcy5hZGp1c3RlZFRleHRNYXhTaXplOnRoaXMuYWRqdXN0ZWRUZXh0U2l6ZSx1PXRoaXMudGlsZVBpeGVsUmF0aW8qYSxjPXRoaXMudGlsZVBpeGVsUmF0aW8qby8yNCxoPXRoaXMudGlsZVBpeGVsUmF0aW8qdGhpcy5hZGp1c3RlZEljb25TaXplLGY9dGhpcy50aWxlUGl4ZWxSYXRpbyppWyJzeW1ib2wtc3BhY2luZyJdLGQ9aVsic3ltYm9sLWF2b2lkLWVkZ2VzIl0sbT1pWyJ0ZXh0LXBhZGRpbmciXSp0aGlzLnRpbGVQaXhlbFJhdGlvLHY9aVsiaWNvbi1wYWRkaW5nIl0qdGhpcy50aWxlUGl4ZWxSYXRpbyxnPWlbInRleHQtbWF4LWFuZ2xlIl0vMTgwKk1hdGguUEkseT0ibWFwIj09PWlbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il0mJiJsaW5lIj09PWlbInN5bWJvbC1wbGFjZW1lbnQiXSxiPSJtYXAiPT09aVsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSYmImxpbmUiPT09aVsic3ltYm9sLXBsYWNlbWVudCJdLHg9aVsidGV4dC1hbGxvdy1vdmVybGFwIl18fGlbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxpWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXXx8aVsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0sXz0ibGluZSI9PT1pWyJzeW1ib2wtcGxhY2VtZW50Il0sTT1mLzI7XyYmKHQ9cCh0LDAsMCx3LHcpKTtmb3IodmFyIGs9MDtrPHQubGVuZ3RoO2srKyl7dmFyIEEsVD10W2tdO0E9Xz9sKFQsZixnLGUsciwyNCxjLHRoaXMub3ZlcnNjYWxpbmcsdyk6W25ldyBzKFRbMF0ueCxUWzBdLnksMCldO2Zvcih2YXIgUz0wLEU9QS5sZW5ndGg7UzxFO1MrKyl7dmFyIEw9QVtTXTtpZighKGUmJl8mJnRoaXMuYW5jaG9ySXNUb29DbG9zZShlLnRleHQsTSxMKSkpe3ZhciBDPSEoTC54PDB8fEwueD53fHxMLnk8MHx8TC55PncpO2lmKCFkfHxDKXt2YXIgej1DfHx4O3RoaXMuYWRkU3ltYm9sSW5zdGFuY2UoTCxULGUscix0aGlzLmxheWVyLHosdGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheS5sZW5ndGgsdGhpcy5jb2xsaXNpb25Cb3hBcnJheSxuLmluZGV4LHRoaXMuc291cmNlTGF5ZXJJbmRleCx0aGlzLmluZGV4LHUsbSx5LGgsdixiLHt6b29tOnRoaXMuem9vbX0sbi5wcm9wZXJ0aWVzKX19fX19LG4ucHJvdG90eXBlLmFuY2hvcklzVG9vQ2xvc2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuY29tcGFyZVRleHQ7aWYodCBpbiBuKXtmb3IodmFyIGk9blt0XSxhPWkubGVuZ3RoLTE7YT49MDthLS0paWYoci5kaXN0KGlbYV0pPGUpcmV0dXJuITB9ZWxzZSBuW3RdPVtdO3JldHVybiBuW3RdLnB1c2gociksITF9LG4ucHJvdG90eXBlLnBsYWNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY3VsYXRlU3R5bGVMYXllcnMoKSx0aGlzLmNyZWF0ZUFycmF5cygpO3ZhciByPXRoaXMubGF5ZXIubGF5b3V0LG49dC5tYXhTY2FsZSxpPSJtYXAiPT09clsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSYmImxpbmUiPT09clsic3ltYm9sLXBsYWNlbWVudCJdLGE9Im1hcCI9PT1yWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdJiYibGluZSI9PT1yWyJzeW1ib2wtcGxhY2VtZW50Il07aWYoclsidGV4dC1hbGxvdy1vdmVybGFwIl18fHJbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxyWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXXx8clsiaWNvbi1pZ25vcmUtcGxhY2VtZW50Il0pe3ZhciBvPXRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkudG9BcnJheSh0aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXgsdGhpcy5zeW1ib2xJbnN0YW5jZXNFbmRJbmRleCkscz10LmFuZ2xlLGw9TWF0aC5zaW4ocyksdT1NYXRoLmNvcyhzKTt0aGlzLnNvcnRlZFN5bWJvbEluc3RhbmNlcz1vLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4obCp0LmFuY2hvclBvaW50WCt1KnQuYW5jaG9yUG9pbnRZfDApLShsKmUuYW5jaG9yUG9pbnRYK3UqZS5hbmNob3JQb2ludFl8MCl8fGUuaW5kZXgtdC5pbmRleH0pfWZvcih2YXIgYz10aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXg7Yzx0aGlzLnN5bWJvbEluc3RhbmNlc0VuZEluZGV4O2MrKyl7dmFyIGg9dGhpcy5zb3J0ZWRTeW1ib2xJbnN0YW5jZXM/dGhpcy5zb3J0ZWRTeW1ib2xJbnN0YW5jZXNbYy10aGlzLnN5bWJvbEluc3RhbmNlc1N0YXJ0SW5kZXhdOnRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkuZ2V0KGMpLGY9e2JveFN0YXJ0SW5kZXg6aC50ZXh0Qm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpoLnRleHRCb3hFbmRJbmRleH0sZD17Ym94U3RhcnRJbmRleDpoLmljb25Cb3hTdGFydEluZGV4LGJveEVuZEluZGV4OmguaWNvbkJveEVuZEluZGV4fSxwPSEoaC50ZXh0Qm94U3RhcnRJbmRleD09PWgudGV4dEJveEVuZEluZGV4KSxtPSEoaC5pY29uQm94U3RhcnRJbmRleD09PWguaWNvbkJveEVuZEluZGV4KSx2PXJbInRleHQtb3B0aW9uYWwiXXx8IXAsZz1yWyJpY29uLW9wdGlvbmFsIl18fCFtLHk9cD90LnBsYWNlQ29sbGlzaW9uRmVhdHVyZShmLHJbInRleHQtYWxsb3ctb3ZlcmxhcCJdLHJbInN5bWJvbC1hdm9pZC1lZGdlcyJdKTp0Lm1pblNjYWxlLGI9bT90LnBsYWNlQ29sbGlzaW9uRmVhdHVyZShkLHJbImljb24tYWxsb3ctb3ZlcmxhcCJdLHJbInN5bWJvbC1hdm9pZC1lZGdlcyJdKTp0Lm1pblNjYWxlO3Z8fGc/IWcmJnk/eT1NYXRoLm1heChiLHkpOiF2JiZiJiYoYj1NYXRoLm1heChiLHkpKTpiPXk9TWF0aC5tYXgoYix5KSxwJiYodC5pbnNlcnRDb2xsaXNpb25GZWF0dXJlKGYseSxyWyJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiXSkseTw9biYmdGhpcy5hZGRTeW1ib2xzKCJnbHlwaCIsaC5nbHlwaFF1YWRTdGFydEluZGV4LGguZ2x5cGhRdWFkRW5kSW5kZXgseSxyWyJ0ZXh0LWtlZXAtdXByaWdodCJdLGksdC5hbmdsZSkpLG0mJih0Lmluc2VydENvbGxpc2lvbkZlYXR1cmUoZCxiLHJbImljb24taWdub3JlLXBsYWNlbWVudCJdKSxiPD1uJiZ0aGlzLmFkZFN5bWJvbHMoImljb24iLGguaWNvblF1YWRTdGFydEluZGV4LGguaWNvblF1YWRFbmRJbmRleCxiLHJbImljb24ta2VlcC11cHJpZ2h0Il0sYSx0LmFuZ2xlKSl9ZSYmdGhpcy5hZGRUb0RlYnVnQnVmZmVycyh0KX0sbi5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGEsbyxzKXtmb3IodmFyIGw9dGhpcy5wcmVwYXJlQXJyYXlHcm91cCh0LDQqKHItZSkpLHU9bC5lbGVtZW50QXJyYXksYz1sLmxheW91dFZlcnRleEFycmF5LGg9dGhpcy56b29tLGY9TWF0aC5tYXgoTWF0aC5sb2cobikvTWF0aC5MTjIraCwwKSxkPWU7ZDxyO2QrKyl7dmFyIHA9dGhpcy5zeW1ib2xRdWFkc0FycmF5LmdldChkKS5TeW1ib2xRdWFkLG09KHAuYW5jaG9yQW5nbGUrcytNYXRoLlBJKSUoMipNYXRoLlBJKTtpZighKGEmJm8mJihtPD1NYXRoLlBJLzJ8fG0+MypNYXRoLlBJLzIpKSl7dmFyIHY9cC50bCxnPXAudHIseT1wLmJsLGI9cC5icix4PXAudGV4LF89cC5hbmNob3JQb2ludCx3PU1hdGgubWF4KGgrTWF0aC5sb2cocC5taW5TY2FsZSkvTWF0aC5MTjIsZiksTT1NYXRoLm1pbihoK01hdGgubG9nKHAubWF4U2NhbGUpL01hdGguTE4yLDI1KTtpZighKE08PXcpKXt3PT09ZiYmKHc9MCk7dmFyIGs9TWF0aC5yb3VuZChwLmdseXBoQW5nbGUvKDIqTWF0aC5QSSkqMjU2KSxBPWkoYyxfLngsXy55LHYueCx2LnkseC54LHgueSx3LE0sZixrKTtpKGMsXy54LF8ueSxnLngsZy55LHgueCt4LncseC55LHcsTSxmLGspLGkoYyxfLngsXy55LHkueCx5LnkseC54LHgueSt4LmgsdyxNLGYsayksaShjLF8ueCxfLnksYi54LGIueSx4LngreC53LHgueSt4LmgsdyxNLGYsayksdS5lbXBsYWNlQmFjayhBLEErMSxBKzIpLHUuZW1wbGFjZUJhY2soQSsxLEErMixBKzMpfX19fSxuLnByb3RvdHlwZS51cGRhdGVJY29ucz1mdW5jdGlvbih0KXt0aGlzLnJlY2FsY3VsYXRlU3R5bGVMYXllcnMoKTt2YXIgZT10aGlzLmxheWVyLmxheW91dFsiaWNvbi1pbWFnZSJdO2lmKGUpZm9yKHZhciByPTA7cjx0aGlzLmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBuPXUodGhpcy5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLGUpO24mJih0W25dPSEwKX19LG4ucHJvdG90eXBlLnVwZGF0ZUZvbnQ9ZnVuY3Rpb24odCl7dGhpcy5yZWNhbGN1bGF0ZVN0eWxlTGF5ZXJzKCk7dmFyIGU9dGhpcy5sYXllci5sYXlvdXRbInRleHQtZm9udCJdLHI9dFtlXT10W2VdfHx7fTt0aGlzLnRleHRGZWF0dXJlcz1mKHRoaXMuZmVhdHVyZXMsdGhpcy5sYXllci5sYXlvdXQscil9LG4ucHJvdG90eXBlLmFkZFRvRGVidWdCdWZmZXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnByZXBhcmVBcnJheUdyb3VwKCJjb2xsaXNpb25Cb3giLDApLHI9ZS5sYXlvdXRWZXJ0ZXhBcnJheSxuPS10LmFuZ2xlLGk9dC55U3RyZXRjaCxvPXRoaXMuc3ltYm9sSW5zdGFuY2VzU3RhcnRJbmRleDtvPHRoaXMuc3ltYm9sSW5zdGFuY2VzRW5kSW5kZXg7bysrKXt2YXIgcz10aGlzLnN5bWJvbEluc3RhbmNlc0FycmF5LmdldChvKTtzLnRleHRDb2xsaXNpb25GZWF0dXJlPXtib3hTdGFydEluZGV4OnMudGV4dEJveFN0YXJ0SW5kZXgsYm94RW5kSW5kZXg6cy50ZXh0Qm94RW5kSW5kZXh9LHMuaWNvbkNvbGxpc2lvbkZlYXR1cmU9e2JveFN0YXJ0SW5kZXg6cy5pY29uQm94U3RhcnRJbmRleCxib3hFbmRJbmRleDpzLmljb25Cb3hFbmRJbmRleH07Zm9yKHZhciBsPTA7bDwyO2wrKyl7dmFyIHU9c1swPT09bD8idGV4dENvbGxpc2lvbkZlYXR1cmUiOiJpY29uQ29sbGlzaW9uRmVhdHVyZSJdO2lmKHUpZm9yKHZhciBjPXUuYm94U3RhcnRJbmRleDtjPHUuYm94RW5kSW5kZXg7YysrKXt2YXIgaD10aGlzLmNvbGxpc2lvbkJveEFycmF5LmdldChjKSxmPWguYW5jaG9yUG9pbnQsZD1uZXcgYShoLngxLGgueTEqaSkuX3JvdGF0ZShuKSxwPW5ldyBhKGgueDIsaC55MSppKS5fcm90YXRlKG4pLG09bmV3IGEoaC54MSxoLnkyKmkpLl9yb3RhdGUobiksdj1uZXcgYShoLngyLGgueTIqaSkuX3JvdGF0ZShuKSxnPU1hdGgubWF4KDAsTWF0aC5taW4oMjUsdGhpcy56b29tK01hdGgubG9nKGgubWF4U2NhbGUpL01hdGguTE4yKSkseT1NYXRoLm1heCgwLE1hdGgubWluKDI1LHRoaXMuem9vbStNYXRoLmxvZyhoLnBsYWNlbWVudFNjYWxlKS9NYXRoLkxOMikpO3RoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsZixkLGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixmLHAsZyx5KSx0aGlzLmFkZENvbGxpc2lvbkJveFZlcnRleChyLGYscCxnLHkpLHRoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsZix2LGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixmLHYsZyx5KSx0aGlzLmFkZENvbGxpc2lvbkJveFZlcnRleChyLGYsbSxnLHkpLHRoaXMuYWRkQ29sbGlzaW9uQm94VmVydGV4KHIsZixtLGcseSksdGhpcy5hZGRDb2xsaXNpb25Cb3hWZXJ0ZXgocixmLGQsZyx5KX19fX0sbi5wcm90b3R5cGUuYWRkU3ltYm9sSW5zdGFuY2U9ZnVuY3Rpb24odCxlLHIsaSxhLG8scyxsLHUsYyxoLGYsZCxwLHYseSxiLHcsTSl7dmFyIGssQSxULFMsRSxMLEMsejtpZihyJiYoQz1vP3godCxyLGYsZSxhLHApOltdLEU9bmV3IGcobCxlLHQsdSxjLGgscixmLGQscCwhMSkpLGs9dGhpcy5zeW1ib2xRdWFkc0FycmF5Lmxlbmd0aCxDJiZDLmxlbmd0aClmb3IodmFyIEk9MDtJPEMubGVuZ3RoO0krKyl0aGlzLmFkZFN5bWJvbFF1YWQoQ1tJXSk7QT10aGlzLnN5bWJvbFF1YWRzQXJyYXkubGVuZ3RoO3ZhciBEPUU/RS5ib3hTdGFydEluZGV4OnRoaXMuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLFA9RT9FLmJveEVuZEluZGV4OnRoaXMuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO2kmJih6PW8/Xyh0LGksdixlLGEsYixyLHcsTSk6W10sTD1uZXcgZyhsLGUsdCx1LGMsaCxpLHYseSxiLCEwKSksVD10aGlzLnN5bWJvbFF1YWRzQXJyYXkubGVuZ3RoLHomJjE9PT16Lmxlbmd0aCYmdGhpcy5hZGRTeW1ib2xRdWFkKHpbMF0pLFM9dGhpcy5zeW1ib2xRdWFkc0FycmF5Lmxlbmd0aDt2YXIgTz1MP0wuYm94U3RhcnRJbmRleDp0aGlzLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxSPUw/TC5ib3hFbmRJbmRleDp0aGlzLmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtyZXR1cm4gUz5uLk1BWF9RVUFEUyYmbS53YXJuT25jZSgiVG9vIG1hbnkgc3ltYm9scyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyIpLEE+bi5NQVhfUVVBRFMmJm0ud2Fybk9uY2UoIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwNyIpLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXkuZW1wbGFjZUJhY2soRCxQLE8sUixrLEEsVCxTLHQueCx0Lnkscyl9LG4ucHJvdG90eXBlLmFkZFN5bWJvbFF1YWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3ltYm9sUXVhZHNBcnJheS5lbXBsYWNlQmFjayh0LmFuY2hvclBvaW50LngsdC5hbmNob3JQb2ludC55LHQudGwueCx0LnRsLnksdC50ci54LHQudHIueSx0LmJsLngsdC5ibC55LHQuYnIueCx0LmJyLnksdC50ZXguaCx0LnRleC53LHQudGV4LngsdC50ZXgueSx0LmFuY2hvckFuZ2xlLHQuZ2x5cGhBbmdsZSx0Lm1heFNjYWxlLHQubWluU2NhbGUpfX0seyIuLi8uLi9zeW1ib2wvYW5jaG9yIjozODksIi4uLy4uL3N5bWJvbC9jbGlwX2xpbmUiOjM5MSwiLi4vLi4vc3ltYm9sL2NvbGxpc2lvbl9mZWF0dXJlIjozOTMsIi4uLy4uL3N5bWJvbC9nZXRfYW5jaG9ycyI6Mzk1LCIuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyI6Mzk4LCIuLi8uLi9zeW1ib2wvcXVhZHMiOjM5OSwiLi4vLi4vc3ltYm9sL3Jlc29sdmVfdGV4dCI6NDAwLCIuLi8uLi9zeW1ib2wvc2hhcGluZyI6NDAxLCIuLi8uLi91dGlsL3Rva2VuIjo0MzksIi4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9idWNrZXQiOjMyNywiLi4vbG9hZF9nZW9tZXRyeSI6MzM1LCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuYXJyYXlCdWZmZXI9dC5hcnJheUJ1ZmZlcix0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLmF0dHJpYnV0ZXM9ZS5tZW1iZXJzLHRoaXMuaXRlbVNpemU9ZS5ieXRlc1BlckVsZW1lbnQsdGhpcy50eXBlPXIsdGhpcy5hcnJheVR5cGU9ZX1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy50eXBlXTt0aGlzLmJ1ZmZlcj90LmJpbmRCdWZmZXIoZSx0aGlzLmJ1ZmZlcik6KHRoaXMuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUsdGhpcy5idWZmZXIpLHQuYnVmZmVyRGF0YShlLHRoaXMuYXJyYXlCdWZmZXIsdC5TVEFUSUNfRFJBVyksdGhpcy5hcnJheUJ1ZmZlcj1udWxsKX07dmFyIGk9e0ludDg6IkJZVEUiLFVpbnQ4OiJVTlNJR05FRF9CWVRFIixJbnQxNjoiU0hPUlQiLFVpbnQxNjoiVU5TSUdORURfU0hPUlQifTtuLnByb3RvdHlwZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtyKyspe3ZhciBuPXRoaXMuYXR0cmlidXRlc1tyXSxhPWVbbi5uYW1lXTt2b2lkIDAhPT1hJiZ0LnZlcnRleEF0dHJpYlBvaW50ZXIoYSxuLmNvbXBvbmVudHMsdFtpW24udHlwZV1dLCExLHRoaXMuYXJyYXlUeXBlLmJ5dGVzUGVyRWxlbWVudCxuLm9mZnNldCl9fSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMuYnVmZmVyJiZ0LmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcil9LG4uQnVmZmVyVHlwZT17VkVSVEVYOiJBUlJBWV9CVUZGRVIiLEVMRU1FTlQ6IkVMRU1FTlRfQVJSQVlfQlVGRkVSIn19LHt9XSwzMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPW5ldyBhKHQubGF5b3V0VmVydGV4QXJyYXksZS5sYXlvdXRWZXJ0ZXhBcnJheVR5cGUsYS5CdWZmZXJUeXBlLlZFUlRFWCksdC5lbGVtZW50QXJyYXkmJih0aGlzLmVsZW1lbnRCdWZmZXI9bmV3IGEodC5lbGVtZW50QXJyYXksZS5lbGVtZW50QXJyYXlUeXBlLGEuQnVmZmVyVHlwZS5FTEVNRU5UKSk7dmFyIHIsbj10aGlzLnZhb3M9e307dC5lbGVtZW50QXJyYXkyJiYodGhpcy5lbGVtZW50QnVmZmVyMj1uZXcgYSh0LmVsZW1lbnRBcnJheTIsZS5lbGVtZW50QXJyYXlUeXBlMixhLkJ1ZmZlclR5cGUuRUxFTUVOVCkscj10aGlzLnNlY29uZFZhb3M9e30pLHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzPWkubWFwT2JqZWN0KHQucGFpbnRWZXJ0ZXhBcnJheXMsZnVuY3Rpb24oaSxzKXtyZXR1cm4gbltzXT1uZXcgbyx0LmVsZW1lbnRBcnJheTImJihyW3NdPW5ldyBvKSxuZXcgYShpLGUucGFpbnRWZXJ0ZXhBcnJheVR5cGVzW3NdLGEuQnVmZmVyVHlwZS5WRVJURVgpfSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL2J1ZmZlciIpLG89dCgiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3kodCksdGhpcy5lbGVtZW50QnVmZmVyJiZ0aGlzLmVsZW1lbnRCdWZmZXIuZGVzdHJveSh0KSx0aGlzLmVsZW1lbnRCdWZmZXIyJiZ0aGlzLmVsZW1lbnRCdWZmZXIyLmRlc3Ryb3kodCk7Zm9yKHZhciBlIGluIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzKXRoaXMucGFpbnRWZXJ0ZXhCdWZmZXJzW2VdLmRlc3Ryb3kodCk7Zm9yKHZhciByIGluIHRoaXMudmFvcyl0aGlzLnZhb3Nbcl0uZGVzdHJveSh0KTtmb3IodmFyIG4gaW4gdGhpcy5zZWNvbmRWYW9zKXRoaXMuc2Vjb25kVmFvc1tuXS5kZXN0cm95KHQpfX0seyIuLi9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdCI6MzU1LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9idWZmZXIiOjMzMn1dLDMzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZih0LmdyaWQpe3ZhciBuPXQsaT1lO3Q9bi5jb29yZCxlPW4ub3ZlcnNjYWxpbmcsdGhpcy5ncmlkPW5ldyBwKG4uZ3JpZCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1uZXcgayhuLmZlYXR1cmVJbmRleEFycmF5KSx0aGlzLnJhd1RpbGVEYXRhPWksdGhpcy5idWNrZXRMYXllcklEcz1uLmJ1Y2tldExheWVySURzfWVsc2UgdGhpcy5ncmlkPW5ldyBwKGgsMTYsMCksdGhpcy5mZWF0dXJlSW5kZXhBcnJheT1uZXcgazt0aGlzLmNvb3JkPXQsdGhpcy5vdmVyc2NhbGluZz1lLHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LU1hdGgubG9nKGUpL01hdGguTE4yLHRoaXMuc2V0Q29sbGlzaW9uVGlsZShyKX1mdW5jdGlvbiBpKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBlLXR9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdFsibGluZS1nYXAtd2lkdGgiXT4wP3RbImxpbmUtZ2FwLXdpZHRoIl0rMip0WyJsaW5lLXdpZHRoIl06dFsibGluZS13aWR0aCJdfWZ1bmN0aW9uIHModCxlLHIsbixpKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7ZT11LmNvbnZlcnQoZSksInZpZXdwb3J0Ij09PXImJmUuX3JvdGF0ZSgtbik7Zm9yKHZhciBhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD1bXSxjPTA7YzxzLmxlbmd0aDtjKyspbC5wdXNoKHNbY10uc3ViKGUuX211bHQoaSkpKTthLnB1c2gobCl9cmV0dXJuIGF9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj1bXSxuPW5ldyB1KDAsMCksaT0wO2k8dC5sZW5ndGg7aSsrKXtmb3IodmFyIGE9dFtpXSxvPVtdLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzLTFdLGM9YVtzXSxoPWFbcysxXSxmPTA9PT1zP246Yy5zdWIobCkuX3VuaXQoKS5fcGVycCgpLGQ9cz09PWEubGVuZ3RoLTE/bjpoLnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1mLl9hZGQoZCkuX3VuaXQoKSxtPXAueCpkLngrcC55KmQueTtwLl9tdWx0KDEvbSksby5wdXNoKHAuX211bHQoZSkuX2FkZChjKSl9ci5wdXNoKG8pfXJldHVybiByfXZhciB1PXQoInBvaW50LWdlb21ldHJ5IiksYz10KCIuL2xvYWRfZ2VvbWV0cnkiKSxoPXQoIi4vYnVja2V0IikuRVhURU5ULGY9dCgiZmVhdHVyZS1maWx0ZXIiKSxkPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IikscD10KCJncmlkLWluZGV4IiksbT10KCIuLi91dGlsL2RpY3Rpb25hcnlfY29kZXIiKSx2PXQoInZlY3Rvci10aWxlIiksZz10KCJwYmYiKSx5PXQoIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIiksYj10KCIuLi91dGlsL3V0aWwiKS5hcnJheXNJbnRlcnNlY3QseD10KCIuLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyIpLF89eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aVBvaW50LHc9eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uLE09eC5tdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUsaz1uZXcgZCh7bWVtYmVyczpbe3R5cGU6IlVpbnQzMiIsbmFtZToiZmVhdHVyZUluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToic291cmNlTGF5ZXJJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImJ1Y2tldEluZGV4In1dfSk7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2soZSxyLG4pO2Zvcih2YXIgYT1jKHQpLG89MDtvPGEubGVuZ3RoO28rKyl7Zm9yKHZhciBzPWFbb10sbD1bMS8wLDEvMCwtMS8wLC0xLzBdLHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGg9c1t1XTtsWzBdPU1hdGgubWluKGxbMF0saC54KSxsWzFdPU1hdGgubWluKGxbMV0saC55KSxsWzJdPU1hdGgubWF4KGxbMl0saC54KSxsWzNdPU1hdGgubWF4KGxbM10saC55KX10aGlzLmdyaWQuaW5zZXJ0KGksbFswXSxsWzFdLGxbMl0sbFszXSl9fSxuLnByb3RvdHlwZS5zZXRDb2xsaXNpb25UaWxlPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uVGlsZT10fSxuLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17Y29vcmQ6dGhpcy5jb29yZCxvdmVyc2NhbGluZzp0aGlzLm92ZXJzY2FsaW5nLGdyaWQ6dGhpcy5ncmlkLnRvQXJyYXlCdWZmZXIoKSxmZWF0dXJlSW5kZXhBcnJheTp0aGlzLmZlYXR1cmVJbmRleEFycmF5LnNlcmlhbGl6ZSgpLGJ1Y2tldExheWVySURzOnRoaXMuYnVja2V0TGF5ZXJJRHN9O3JldHVybntkYXRhOnQsdHJhbnNmZXJhYmxlczpbdC5ncmlkLHQuZmVhdHVyZUluZGV4QXJyYXkuYXJyYXlCdWZmZXJdfX0sbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCxlKXt0aGlzLnZ0TGF5ZXJzfHwodGhpcy52dExheWVycz1uZXcgdi5WZWN0b3JUaWxlKG5ldyBnKG5ldyBVaW50OEFycmF5KHRoaXMucmF3VGlsZURhdGEpKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgbSh0aGlzLnZ0TGF5ZXJzP09iamVjdC5rZXlzKHRoaXMudnRMYXllcnMpLnNvcnQoKTpbIl9nZW9qc29uVGlsZUxheWVyIl0pKTt2YXIgcj17fSxuPXQucGFyYW1zfHx7fSxzPWgvdC50aWxlU2l6ZS90LnNjYWxlLGw9ZihuLmZpbHRlciksYz0wO2Zvcih2YXIgZCBpbiBlKXt2YXIgcD1lW2RdLHk9cC5wYWludCxiPTA7ImxpbmUiPT09cC50eXBlP2I9byh5KS8yK01hdGguYWJzKHlbImxpbmUtb2Zmc2V0Il0pK2koeVsibGluZS10cmFuc2xhdGUiXSk6ImZpbGwiPT09cC50eXBlP2I9aSh5WyJmaWxsLXRyYW5zbGF0ZSJdKToiY2lyY2xlIj09PXAudHlwZSYmKGI9eVsiY2lyY2xlLXJhZGl1cyJdK2koeVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSksYz1NYXRoLm1heChjLGIqcyl9Zm9yKHZhciB4PXQucXVlcnlHZW9tZXRyeS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh0LngsdC55KX0pfSksXz0xLzAsdz0xLzAsTT0tMS8wLGs9LTEvMCxBPTA7QTx4Lmxlbmd0aDtBKyspZm9yKHZhciBUPXhbQV0sUz0wO1M8VC5sZW5ndGg7UysrKXt2YXIgRT1UW1NdO189TWF0aC5taW4oXyxFLngpLHc9TWF0aC5taW4odyxFLnkpLE09TWF0aC5tYXgoTSxFLngpLGs9TWF0aC5tYXgoayxFLnkpfXZhciBMPXRoaXMuZ3JpZC5xdWVyeShfLWMsdy1jLE0rYyxrK2MpO0wuc29ydChhKSx0aGlzLmZpbHRlck1hdGNoaW5nKHIsTCx0aGlzLmZlYXR1cmVJbmRleEFycmF5LHgsbCxuLmxheWVycyxlLHQuYmVhcmluZyxzKTt2YXIgQz10aGlzLmNvbGxpc2lvblRpbGUucXVlcnlSZW5kZXJlZFN5bWJvbHMoXyx3LE0sayx0LnNjYWxlKTtyZXR1cm4gQy5zb3J0KCksdGhpcy5maWx0ZXJNYXRjaGluZyhyLEMsdGhpcy5jb2xsaXNpb25UaWxlLmNvbGxpc2lvbkJveEFycmF5LHgsbCxuLmxheWVycyxlLHQuYmVhcmluZyxzKSxyfSxuLnByb3RvdHlwZS5maWx0ZXJNYXRjaGluZz1mdW5jdGlvbih0LGUscixuLGksYSx1LGgsZil7Zm9yKHZhciBkLHA9MDtwPGUubGVuZ3RoO3ArKyl7dmFyIG09ZVtwXTtpZihtIT09ZCl7ZD1tO3ZhciB2PXIuZ2V0KG0pLGc9dGhpcy5idWNrZXRMYXllcklEc1t2LmJ1Y2tldEluZGV4XTtpZighYXx8YihhLGcpKXt2YXIgeD10aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHYuc291cmNlTGF5ZXJJbmRleCksaz10aGlzLnZ0TGF5ZXJzW3hdLEE9ay5mZWF0dXJlKHYuZmVhdHVyZUluZGV4KTtpZihpKEEpKWZvcih2YXIgVD1udWxsLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIEU9Z1tTXTtpZighKGEmJmEuaW5kZXhPZihFKTwwKSl7dmFyIEw9dVtFXTtpZihMKXt2YXIgQztpZigic3ltYm9sIiE9PUwudHlwZSl7VHx8KFQ9YyhBKSk7dmFyIHo9TC5wYWludDtpZigibGluZSI9PT1MLnR5cGUpe0M9cyhuLHpbImxpbmUtdHJhbnNsYXRlIl0selsibGluZS10cmFuc2xhdGUtYW5jaG9yIl0saCxmKTt2YXIgST1vKHopLzIqZjtpZih6WyJsaW5lLW9mZnNldCJdJiYoVD1sKFQselsibGluZS1vZmZzZXQiXSpmKSksIU0oQyxULEkpKWNvbnRpbnVlfWVsc2UgaWYoImZpbGwiPT09TC50eXBlKXtpZihDPXMobix6WyJmaWxsLXRyYW5zbGF0ZSJdLHpbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdLGgsZiksIXcoQyxUKSljb250aW51ZX1lbHNlIGlmKCJjaXJjbGUiPT09TC50eXBlKXtDPXMobix6WyJjaXJjbGUtdHJhbnNsYXRlIl0selsiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiXSxoLGYpO3ZhciBEPXpbImNpcmNsZS1yYWRpdXMiXSpmO2lmKCFfKEMsVCxEKSljb250aW51ZX19dmFyIFA9bmV3IHkoQSx0aGlzLnosdGhpcy54LHRoaXMueSk7UC5sYXllcj1MLnNlcmlhbGl6ZSh7aW5jbHVkZVJlZlByb3BlcnRpZXM6ITB9KTt2YXIgTz10W0VdO3ZvaWQgMD09PU8mJihPPXRbRV09W10pLE8ucHVzaChQKX19fX19fX19LHsiLi4vdXRpbC9kaWN0aW9uYXJ5X2NvZGVyIjo0MzAsIi4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzIjo0MzUsIi4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwLCIuLi91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbiI6NDQxLCIuL2J1Y2tldCI6MzI3LCIuL2xvYWRfZ2VvbWV0cnkiOjMzNSwiZmVhdHVyZS1maWx0ZXIiOjEzMCwiZ3JpZC1pbmRleCI6Mjg1LHBiZjo0NzYsInBvaW50LWdlb21ldHJ5Ijo0ODIsInZlY3Rvci10aWxlIjo1NDh9XSwzMzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm57bWluOi0xKk1hdGgucG93KDIsdC0xKSxtYXg6TWF0aC5wb3coMix0LTEpLTF9fXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi9idWNrZXQiKS5FWFRFTlQsbz10KCJhc3NlcnQiKSxzPXsxNTpuKDE1KSwxNjpuKDE2KX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9c1tlfHwxNl07byhyKTtmb3IodmFyIG49YS90LmV4dGVudCxsPXQubG9hZEdlb21ldHJ5KCksdT0wO3U8bC5sZW5ndGg7dSsrKWZvcih2YXIgYz1sW3VdLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGY9Y1toXTtmLng9TWF0aC5yb3VuZChmLngqbiksZi55PU1hdGgucm91bmQoZi55Km4pLChmLng8ci5taW58fGYueD5yLm1heHx8Zi55PHIubWlufHxmLnk+ci5tYXgpJiZpLndhcm5PbmNlKCJHZW9tZXRyeSBleGNlZWRzIGFsbG93ZWQgZXh0ZW50LCByZWR1Y2UgeW91ciB2ZWN0b3IgdGlsZSBidWZmZXIgc2l6ZSIpfXJldHVybiBsfX0seyIuLi91dGlsL3V0aWwiOjQ0MCwiLi9idWNrZXQiOjMyNyxhc3NlcnQ6NDV9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5jb2x1bW49dCx0aGlzLnJvdz1lLHRoaXMuem9vbT1yfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLmNvbHVtbix0aGlzLnJvdyx0aGlzLnpvb20pfSx6b29tVG86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fem9vbVRvKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxfem9vbVRvOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgucG93KDIsdC10aGlzLnpvb20pO3JldHVybiB0aGlzLmNvbHVtbio9ZSx0aGlzLnJvdyo9ZSx0aGlzLnpvb209dCx0aGlzfSxfc3ViOmZ1bmN0aW9uKHQpe3JldHVybiB0PXQuem9vbVRvKHRoaXMuem9vbSksdGhpcy5jb2x1bW4tPXQuY29sdW1uLHRoaXMucm93LT10LnJvdyx0aGlzfX19LHt9XSwzMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgTG5nTGF0IG9iamVjdDogKCIrdCsiLCAiK2UrIikiKTtpZih0aGlzLmxuZz0rdCx0aGlzLmxhdD0rZSx0aGlzLmxhdD45MHx8dGhpcy5sYXQ8LTkwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwIil9ZS5leHBvcnRzPW47dmFyIGk9dCgiLi4vdXRpbC91dGlsIikud3JhcDtuLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKGkodGhpcy5sbmcsLTE4MCwxODApLHRoaXMubGF0KX0sbi5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LG4ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIkxuZ0xhdCgiK3RoaXMubG5nKyIsICIrdGhpcy5sYXQrIikifSxuLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgbih0WzBdLHRbMV0pOnR9fSx7Ii4uL3V0aWwvdXRpbCI6NDQwfV0sMzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0JiYoZT90aGlzLmV4dGVuZCh0KS5leHRlbmQoZSk6ND09PXQubGVuZ3RoP3RoaXMuZXh0ZW5kKFt0WzBdLHRbMV1dKS5leHRlbmQoW3RbMl0sdFszXV0pOnRoaXMuZXh0ZW5kKHRbMF0pLmV4dGVuZCh0WzFdKSl9ZS5leHBvcnRzPW47dmFyIGk9dCgiLi9sbmdfbGF0Iik7bi5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXt2YXIgZSxyLGE9dGhpcy5fc3csbz10aGlzLl9uZTtpZih0IGluc3RhbmNlb2YgaSllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgbikpcmV0dXJuIHQ/dGhpcy5leHRlbmQoaS5jb252ZXJ0KHQpfHxuLmNvbnZlcnQodCkpOnRoaXM7aWYoZT10Ll9zdyxyPXQuX25lLCFlfHwhcilyZXR1cm4gdGhpc31yZXR1cm4gYXx8bz8oYS5sbmc9TWF0aC5taW4oZS5sbmcsYS5sbmcpLGEubGF0PU1hdGgubWluKGUubGF0LGEubGF0KSxvLmxuZz1NYXRoLm1heChyLmxuZyxvLmxuZyksby5sYXQ9TWF0aC5tYXgoci5sYXQsby5sYXQpKToodGhpcy5fc3c9bmV3IGkoZS5sbmcsZS5sYXQpLHRoaXMuX25lPW5ldyBpKHIubG5nLHIubGF0KSksdGhpc30sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKCh0aGlzLl9zdy5sbmcrdGhpcy5fbmUubG5nKS8yLCh0aGlzLl9zdy5sYXQrdGhpcy5fbmUubGF0KS8yKX0sZ2V0U291dGhXZXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxnZXROb3J0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmV9LGdldE5vcnRoV2VzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgaSh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxnZXRTb3V0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkodGhpcy5nZXRFYXN0KCksdGhpcy5nZXRTb3V0aCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LGdldFNvdXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3LmxhdH0sZ2V0RWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZS5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVyblt0aGlzLl9zdy50b0FycmF5KCksdGhpcy5fbmUudG9BcnJheSgpXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iTG5nTGF0Qm91bmRzKCIrdGhpcy5fc3cudG9TdHJpbmcoKSsiLCAiK3RoaXMuX25lLnRvU3RyaW5nKCkrIikifX0sbi5jb252ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiF0fHx0IGluc3RhbmNlb2Ygbj90Om5ldyBuKHQpfX0sewoiLi9sbmdfbGF0IjozMzd9XSwzMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMudGlsZVNpemU9NTEyLHRoaXMuX21pblpvb209dHx8MCx0aGlzLl9tYXhab29tPWV8fDIyLHRoaXMubGF0UmFuZ2U9Wy04NS4wNTExMyw4NS4wNTExM10sdGhpcy53aWR0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5fY2VudGVyPW5ldyBpKDAsMCksdGhpcy56b29tPTAsdGhpcy5hbmdsZT0wLHRoaXMuX2FsdGl0dWRlPTEuNSx0aGlzLl9waXRjaD0wLHRoaXMuX3VubW9kaWZpZWQ9ITB9dmFyIGk9dCgiLi9sbmdfbGF0IiksYT10KCJwb2ludC1nZW9tZXRyeSIpLG89dCgiLi9jb29yZGluYXRlIikscz10KCIuLi91dGlsL3V0aWwiKS53cmFwLGw9dCgiLi4vdXRpbC9pbnRlcnBvbGF0ZSIpLHU9dCgiLi4vc291cmNlL3RpbGVfY29vcmQiKSxjPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULGg9dCgiZ2wtbWF0cml4IiksZj1oLnZlYzQsZD1oLm1hdDQscD1oLm1hdDI7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2dldCBtaW5ab29tKCl7cmV0dXJuIHRoaXMuX21pblpvb219LHNldCBtaW5ab29tKHQpe3RoaXMuX21pblpvb20hPT10JiYodGhpcy5fbWluWm9vbT10LHRoaXMuem9vbT1NYXRoLm1heCh0aGlzLnpvb20sdCkpfSxnZXQgbWF4Wm9vbSgpe3JldHVybiB0aGlzLl9tYXhab29tfSxzZXQgbWF4Wm9vbSh0KXt0aGlzLl9tYXhab29tIT09dCYmKHRoaXMuX21heFpvb209dCx0aGlzLnpvb209TWF0aC5taW4odGhpcy56b29tLHQpKX0sZ2V0IHdvcmxkU2l6ZSgpe3JldHVybiB0aGlzLnRpbGVTaXplKnRoaXMuc2NhbGV9LGdldCBjZW50ZXJQb2ludCgpe3JldHVybiB0aGlzLnNpemUuX2RpdigyKX0sZ2V0IHNpemUoKXtyZXR1cm4gbmV3IGEodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9LGdldCBiZWFyaW5nKCl7cmV0dXJuLXRoaXMuYW5nbGUvTWF0aC5QSSoxODB9LHNldCBiZWFyaW5nKHQpe3ZhciBlPS1zKHQsLTE4MCwxODApKk1hdGguUEkvMTgwO3RoaXMuYW5nbGUhPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLmFuZ2xlPWUsdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5yb3RhdGlvbk1hdHJpeD1wLmNyZWF0ZSgpLHAucm90YXRlKHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLmFuZ2xlKSl9LGdldCBwaXRjaCgpe3JldHVybiB0aGlzLl9waXRjaC9NYXRoLlBJKjE4MH0sc2V0IHBpdGNoKHQpe3ZhciBlPU1hdGgubWluKDYwLHQpLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ZSYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9ZSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LGdldCBhbHRpdHVkZSgpe3JldHVybiB0aGlzLl9hbHRpdHVkZX0sc2V0IGFsdGl0dWRlKHQpe3ZhciBlPU1hdGgubWF4KC43NSx0KTt0aGlzLl9hbHRpdHVkZSE9PWUmJih0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2FsdGl0dWRlPWUsdGhpcy5fY2FsY01hdHJpY2VzKCkpfSxnZXQgem9vbSgpe3JldHVybiB0aGlzLl96b29tfSxzZXQgem9vbSh0KXt2YXIgZT1NYXRoLm1pbihNYXRoLm1heCh0LHRoaXMubWluWm9vbSksdGhpcy5tYXhab29tKTt0aGlzLl96b29tIT09ZSYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fem9vbT1lLHRoaXMuc2NhbGU9dGhpcy56b29tU2NhbGUoZSksdGhpcy50aWxlWm9vbT1NYXRoLmZsb29yKGUpLHRoaXMuem9vbUZyYWN0aW9uPWUtdGhpcy50aWxlWm9vbSx0aGlzLl9jYWxjTWF0cmljZXMoKSx0aGlzLl9jb25zdHJhaW4oKSl9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5fY2VudGVyfSxzZXQgY2VudGVyKHQpe3QubGF0PT09dGhpcy5fY2VudGVyLmxhdCYmdC5sbmc9PT10aGlzLl9jZW50ZXIubG5nfHwodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9jZW50ZXI9dCx0aGlzLl9jYWxjTWF0cmljZXMoKSx0aGlzLl9jb25zdHJhaW4oKSl9LGNvdmVyaW5nWm9vbUxldmVsOmZ1bmN0aW9uKHQpe3JldHVybih0LnJvdW5kWm9vbT9NYXRoLnJvdW5kOk1hdGguZmxvb3IpKHRoaXMuem9vbSt0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplL3QudGlsZVNpemUpKX0sY292ZXJpbmdUaWxlczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvdmVyaW5nWm9vbUxldmVsKHQpLHI9ZTtpZihlPHQubWluem9vbSlyZXR1cm5bXTtlPnQubWF4em9vbSYmKGU9dC5tYXh6b29tKTt2YXIgbj10aGlzLGk9bi5sb2NhdGlvbkNvb3JkaW5hdGUobi5jZW50ZXIpLl96b29tVG8oZSksbz1uZXcgYShpLmNvbHVtbi0uNSxpLnJvdy0uNSk7cmV0dXJuIHUuY292ZXIoZSxbbi5wb2ludENvb3JkaW5hdGUobmV3IGEoMCwwKSkuX3pvb21UbyhlKSxuLnBvaW50Q29vcmRpbmF0ZShuZXcgYShuLndpZHRoLDApKS5fem9vbVRvKGUpLG4ucG9pbnRDb29yZGluYXRlKG5ldyBhKG4ud2lkdGgsbi5oZWlnaHQpKS5fem9vbVRvKGUpLG4ucG9pbnRDb29yZGluYXRlKG5ldyBhKDAsbi5oZWlnaHQpKS5fem9vbVRvKGUpXSx0LnJlcGFyc2VPdmVyc2NhbGVkP3I6ZSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBvLmRpc3QodCktby5kaXN0KGUpfSl9LHJlc2l6ZTpmdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMucGl4ZWxzVG9HTFVuaXRzPVsyL3QsLTIvZV0sdGhpcy5fY2FsY01hdHJpY2VzKCksdGhpcy5fY29uc3RyYWluKCl9LGdldCB1bm1vZGlmaWVkKCl7cmV0dXJuIHRoaXMuX3VubW9kaWZpZWR9LHpvb21TY2FsZTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sc2NhbGVab29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0scHJvamVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgYSh0aGlzLmxuZ1godC5sbmcsZSksdGhpcy5sYXRZKHQubGF0LGUpKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHRoaXMueExuZyh0LngsZSksdGhpcy55TGF0KHQueSxlKSl9LGdldCB4KCl7cmV0dXJuIHRoaXMubG5nWCh0aGlzLmNlbnRlci5sbmcpfSxnZXQgeSgpe3JldHVybiB0aGlzLmxhdFkodGhpcy5jZW50ZXIubGF0KX0sZ2V0IHBvaW50KCl7cmV0dXJuIG5ldyBhKHRoaXMueCx0aGlzLnkpfSxsbmdYOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDE4MCt0KSooZXx8dGhpcy53b3JsZFNpemUpLzM2MH0sbGF0WTpmdW5jdGlvbih0LGUpe3JldHVybigxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3QqTWF0aC5QSS8zNjApKSkqKGV8fHRoaXMud29ybGRTaXplKS8zNjB9LHhMbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzYwKnQvKGV8fHRoaXMud29ybGRTaXplKS0xODB9LHlMYXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj0xODAtMzYwKnQvKGV8fHRoaXMud29ybGRTaXplKTtyZXR1cm4gMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKHIqTWF0aC5QSS8xODApKS05MH0scGFuQnk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jZW50ZXJQb2ludC5fYWRkKHQpO3RoaXMuY2VudGVyPXRoaXMucG9pbnRMb2NhdGlvbihlKX0sc2V0TG9jYXRpb25BdFBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCksbj10aGlzLnBvaW50Q29vcmRpbmF0ZShlKSxpPXRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpLGE9bi5fc3ViKHIpO3RoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5jZW50ZXI9dGhpcy5jb29yZGluYXRlTG9jYXRpb24oaS5fc3ViKGEpKX0sbG9jYXRpb25Qb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jb29yZGluYXRlUG9pbnQodGhpcy5sb2NhdGlvbkNvb3JkaW5hdGUodCkpfSxwb2ludExvY2F0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZSh0KSl9LGxvY2F0aW9uQ29vcmRpbmF0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnpvb21TY2FsZSh0aGlzLnRpbGVab29tKS90aGlzLndvcmxkU2l6ZSxyPWkuY29udmVydCh0KTtyZXR1cm4gbmV3IG8odGhpcy5sbmdYKHIubG5nKSplLHRoaXMubGF0WShyLmxhdCkqZSx0aGlzLnRpbGVab29tKX0sY29vcmRpbmF0ZUxvY2F0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuem9vbVNjYWxlKHQuem9vbSk7cmV0dXJuIG5ldyBpKHRoaXMueExuZyh0LmNvbHVtbixlKSx0aGlzLnlMYXQodC5yb3csZSkpfSxwb2ludENvb3JkaW5hdGU6ZnVuY3Rpb24odCl7dmFyIGU9W3QueCx0LnksMCwxXSxyPVt0LngsdC55LDEsMV07Zi50cmFuc2Zvcm1NYXQ0KGUsZSx0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSksZi50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7dmFyIG49ZVszXSxpPXJbM10sYT1lWzBdL24scz1yWzBdL2ksdT1lWzFdL24sYz1yWzFdL2ksaD1lWzJdL24sZD1yWzJdL2kscD1oPT09ZD8wOigwLWgpLyhkLWgpLG09dGhpcy53b3JsZFNpemUvdGhpcy56b29tU2NhbGUodGhpcy50aWxlWm9vbSk7cmV0dXJuIG5ldyBvKGwoYSxzLHApL20sbCh1LGMscCkvbSx0aGlzLnRpbGVab29tKX0sY29vcmRpbmF0ZVBvaW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMud29ybGRTaXplL3RoaXMuem9vbVNjYWxlKHQuem9vbSkscj1bdC5jb2x1bW4qZSx0LnJvdyplLDAsMV07cmV0dXJuIGYudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeCksbmV3IGEoclswXS9yWzNdLHJbMV0vclszXSl9LGNhbGN1bGF0ZVBvc01hdHJpeDpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTEvMCksdCBpbnN0YW5jZW9mIHUmJih0PXQudG9Db29yZGluYXRlKGUpKTt2YXIgcj1NYXRoLm1pbih0Lnpvb20sZSksbj10aGlzLndvcmxkU2l6ZS9NYXRoLnBvdygyLHIpLGk9bmV3IEZsb2F0NjRBcnJheSgxNik7cmV0dXJuIGQuaWRlbnRpdHkoaSksZC50cmFuc2xhdGUoaSxpLFt0LmNvbHVtbipuLHQucm93Km4sMF0pLGQuc2NhbGUoaSxpLFtuL2Msbi9jLDFdKSxkLm11bHRpcGx5KGksdGhpcy5wcm9qTWF0cml4LGkpLG5ldyBGbG9hdDMyQXJyYXkoaSl9LF9jb25zdHJhaW46ZnVuY3Rpb24oKXtpZih0aGlzLmNlbnRlciYmdGhpcy53aWR0aCYmdGhpcy5oZWlnaHQmJiF0aGlzLl9jb25zdHJhaW5pbmcpe3RoaXMuX2NvbnN0cmFpbmluZz0hMDt2YXIgdCxlLHIsbixpLG8scyxsLHU9dGhpcy5zaXplLGM9dGhpcy5fdW5tb2RpZmllZDt0aGlzLmxhdFJhbmdlJiYodD10aGlzLmxhdFkodGhpcy5sYXRSYW5nZVsxXSksZT10aGlzLmxhdFkodGhpcy5sYXRSYW5nZVswXSksaT1lLXQ8dS55P3UueS8oZS10KTowKSx0aGlzLmxuZ1JhbmdlJiYocj10aGlzLmxuZ1godGhpcy5sbmdSYW5nZVswXSksbj10aGlzLmxuZ1godGhpcy5sbmdSYW5nZVsxXSksbz1uLXI8dS54P3UueC8obi1yKTowKTt2YXIgaD1NYXRoLm1heChvfHwwLGl8fDApO2lmKGgpcmV0dXJuIHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyBhKG8/KG4rcikvMjp0aGlzLngsaT8oZSt0KS8yOnRoaXMueSkpLHRoaXMuem9vbSs9dGhpcy5zY2FsZVpvb20oaCksdGhpcy5fdW5tb2RpZmllZD1jLHZvaWQodGhpcy5fY29uc3RyYWluaW5nPSExKTtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZj10aGlzLnksZD11LnkvMjtmLWQ8dCYmKGw9dCtkKSxmK2Q+ZSYmKGw9ZS1kKX1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgcD10aGlzLngsbT11LngvMjtwLW08ciYmKHM9cittKSxwK20+biYmKHM9bi1tKX12b2lkIDA9PT1zJiZ2b2lkIDA9PT1sfHwodGhpcy5jZW50ZXI9dGhpcy51bnByb2plY3QobmV3IGEodm9pZCAwIT09cz9zOnRoaXMueCx2b2lkIDAhPT1sP2w6dGhpcy55KSkpLHRoaXMuX3VubW9kaWZpZWQ9Yyx0aGlzLl9jb25zdHJhaW5pbmc9ITF9fSxfY2FsY01hdHJpY2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5oZWlnaHQpe3ZhciB0PU1hdGguYXRhbiguNS90aGlzLmFsdGl0dWRlKSxlPU1hdGguc2luKHQpKnRoaXMuYWx0aXR1ZGUvTWF0aC5zaW4oTWF0aC5QSS8yLXRoaXMuX3BpdGNoLXQpLHI9TWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSplK3RoaXMuYWx0aXR1ZGUsbj1uZXcgRmxvYXQ2NEFycmF5KDE2KTtpZihkLnBlcnNwZWN0aXZlKG4sMipNYXRoLmF0YW4odGhpcy5oZWlnaHQvMi90aGlzLmFsdGl0dWRlKSx0aGlzLndpZHRoL3RoaXMuaGVpZ2h0LC4xLHIpLGQudHJhbnNsYXRlKG4sbixbMCwwLC10aGlzLmFsdGl0dWRlXSksZC5zY2FsZShuLG4sWzEsLTEsMS90aGlzLmhlaWdodF0pLGQucm90YXRlWChuLG4sdGhpcy5fcGl0Y2gpLGQucm90YXRlWihuLG4sdGhpcy5hbmdsZSksZC50cmFuc2xhdGUobixuLFstdGhpcy54LC10aGlzLnksMF0pLHRoaXMucHJvak1hdHJpeD1uLG49ZC5jcmVhdGUoKSxkLnNjYWxlKG4sbixbdGhpcy53aWR0aC8yLC10aGlzLmhlaWdodC8yLDFdKSxkLnRyYW5zbGF0ZShuLG4sWzEsLTEsMF0pLHRoaXMucGl4ZWxNYXRyaXg9ZC5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSxuLHRoaXMucHJvak1hdHJpeCksIShuPWQuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLHRoaXMucGl4ZWxNYXRyaXgpKSl0aHJvdyBuZXcgRXJyb3IoImZhaWxlZCB0byBpbnZlcnQgbWF0cml4Iik7dGhpcy5waXhlbE1hdHJpeEludmVyc2U9bn19fX0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9zb3VyY2UvdGlsZV9jb29yZCI6MzY3LCIuLi91dGlsL2ludGVycG9sYXRlIjo0MzQsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL2Nvb3JkaW5hdGUiOjMzNiwiLi9sbmdfbGF0IjozMzcsImdsLW1hdHJpeCI6MTkxLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXsiICI6WzE2LFtdXSwiISI6WzEwLFs1LDIxLDUsNywtMSwtMSw1LDIsNCwxLDUsMCw2LDEsNSwyXV0sJyInOlsxNixbNCwyMSw0LDE0LC0xLC0xLDEyLDIxLDEyLDE0XV0sIiMiOlsyMSxbMTEsMjUsNCwtNywtMSwtMSwxNywyNSwxMCwtNywtMSwtMSw0LDEyLDE4LDEyLC0xLC0xLDMsNiwxNyw2XV0sJDpbMjAsWzgsMjUsOCwtNCwtMSwtMSwxMiwyNSwxMiwtNCwtMSwtMSwxNywxOCwxNSwyMCwxMiwyMSw4LDIxLDUsMjAsMywxOCwzLDE2LDQsMTQsNSwxMyw3LDEyLDEzLDEwLDE1LDksMTYsOCwxNyw2LDE3LDMsMTUsMSwxMiwwLDgsMCw1LDEsMywzXV0sIiUiOlsyNCxbMjEsMjEsMywwLC0xLC0xLDgsMjEsMTAsMTksMTAsMTcsOSwxNSw3LDE0LDUsMTQsMywxNiwzLDE4LDQsMjAsNiwyMSw4LDIxLDEwLDIwLDEzLDE5LDE2LDE5LDE5LDIwLDIxLDIxLC0xLC0xLDE3LDcsMTUsNiwxNCw0LDE0LDIsMTYsMCwxOCwwLDIwLDEsMjEsMywyMSw1LDE5LDcsMTcsN11dLCImIjpbMjYsWzIzLDEyLDIzLDEzLDIyLDE0LDIxLDE0LDIwLDEzLDE5LDExLDE3LDYsMTUsMywxMywxLDExLDAsNywwLDUsMSw0LDIsMyw0LDMsNiw0LDgsNSw5LDEyLDEzLDEzLDE0LDE0LDE2LDE0LDE4LDEzLDIwLDExLDIxLDksMjAsOCwxOCw4LDE2LDksMTMsMTEsMTAsMTYsMywxOCwxLDIwLDAsMjIsMCwyMywxLDIzLDJdXSwiJyI6WzEwLFs1LDE5LDQsMjAsNSwyMSw2LDIwLDYsMTgsNSwxNiw0LDE1XV0sIigiOlsxNCxbMTEsMjUsOSwyMyw3LDIwLDUsMTYsNCwxMSw0LDcsNSwyLDcsLTIsOSwtNSwxMSwtN11dLCIpIjpbMTQsWzMsMjUsNSwyMyw3LDIwLDksMTYsMTAsMTEsMTAsNyw5LDIsNywtMiw1LC01LDMsLTddXSwiKiI6WzE2LFs4LDIxLDgsOSwtMSwtMSwzLDE4LDEzLDEyLC0xLC0xLDEzLDE4LDMsMTJdXSwiKyI6WzI2LFsxMywxOCwxMywwLC0xLC0xLDQsOSwyMiw5XV0sIiwiOlsxMCxbNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLCItIjpbMjYsWzQsOSwyMiw5XV0sIi4iOlsxMCxbNSwyLDQsMSw1LDAsNiwxLDUsMl1dLCIvIjpbMjIsWzIwLDI1LDIsLTddXSwwOlsyMCxbOSwyMSw2LDIwLDQsMTcsMywxMiwzLDksNCw0LDYsMSw5LDAsMTEsMCwxNCwxLDE2LDQsMTcsOSwxNywxMiwxNiwxNywxNCwyMCwxMSwyMSw5LDIxXV0sMTpbMjAsWzYsMTcsOCwxOCwxMSwyMSwxMSwwXV0sMjpbMjAsWzQsMTYsNCwxNyw1LDE5LDYsMjAsOCwyMSwxMiwyMSwxNCwyMCwxNSwxOSwxNiwxNywxNiwxNSwxNSwxMywxMywxMCwzLDAsMTcsMF1dLDM6WzIwLFs1LDIxLDE2LDIxLDEwLDEzLDEzLDEzLDE1LDEyLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw0OlsyMCxbMTMsMjEsMyw3LDE4LDcsLTEsLTEsMTMsMjEsMTMsMF1dLDU6WzIwLFsxNSwyMSw1LDIxLDQsMTIsNSwxMyw4LDE0LDExLDE0LDE0LDEzLDE2LDExLDE3LDgsMTcsNiwxNiwzLDE0LDEsMTEsMCw4LDAsNSwxLDQsMiwzLDRdXSw2OlsyMCxbMTYsMTgsMTUsMjAsMTIsMjEsMTAsMjEsNywyMCw1LDE3LDQsMTIsNCw3LDUsMyw3LDEsMTAsMCwxMSwwLDE0LDEsMTYsMywxNyw2LDE3LDcsMTYsMTAsMTQsMTIsMTEsMTMsMTAsMTMsNywxMiw1LDEwLDQsN11dLDc6WzIwLFsxNywyMSw3LDAsLTEsLTEsMywyMSwxNywyMV1dLDg6WzIwLFs4LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTQsNywxMywxMSwxMiwxNCwxMSwxNiw5LDE3LDcsMTcsNCwxNiwyLDE1LDEsMTIsMCw4LDAsNSwxLDQsMiwzLDQsMyw3LDQsOSw2LDExLDksMTIsMTMsMTMsMTUsMTQsMTYsMTYsMTYsMTgsMTUsMjAsMTIsMjEsOCwyMV1dLDk6WzIwLFsxNiwxNCwxNSwxMSwxMyw5LDEwLDgsOSw4LDYsOSw0LDExLDMsMTQsMywxNSw0LDE4LDYsMjAsOSwyMSwxMCwyMSwxMywyMCwxNSwxOCwxNiwxNCwxNiw5LDE1LDQsMTMsMSwxMCwwLDgsMCw1LDEsNCwzXV0sIjoiOlsxMCxbNSwxNCw0LDEzLDUsMTIsNiwxMyw1LDE0LC0xLC0xLDUsMiw0LDEsNSwwLDYsMSw1LDJdXSwiOyI6WzEwLFs1LDE0LDQsMTMsNSwxMiw2LDEzLDUsMTQsLTEsLTEsNiwxLDUsMCw0LDEsNSwyLDYsMSw2LC0xLDUsLTMsNCwtNF1dLCI8IjpbMjQsWzIwLDE4LDQsOSwyMCwwXV0sIj0iOlsyNixbNCwxMiwyMiwxMiwtMSwtMSw0LDYsMjIsNl1dLCI+IjpbMjQsWzQsMTgsMjAsOSw0LDBdXSwiPyI6WzE4LFszLDE2LDMsMTcsNCwxOSw1LDIwLDcsMjEsMTEsMjEsMTMsMjAsMTQsMTksMTUsMTcsMTUsMTUsMTQsMTMsMTMsMTIsOSwxMCw5LDcsLTEsLTEsOSwyLDgsMSw5LDAsMTAsMSw5LDJdXSwiQCI6WzI3LFsxOCwxMywxNywxNSwxNSwxNiwxMiwxNiwxMCwxNSw5LDE0LDgsMTEsOCw4LDksNiwxMSw1LDE0LDUsMTYsNiwxNyw4LC0xLC0xLDEyLDE2LDEwLDE0LDksMTEsOSw4LDEwLDYsMTEsNSwtMSwtMSwxOCwxNiwxNyw4LDE3LDYsMTksNSwyMSw1LDIzLDcsMjQsMTAsMjQsMTIsMjMsMTUsMjIsMTcsMjAsMTksMTgsMjAsMTUsMjEsMTIsMjEsOSwyMCw3LDE5LDUsMTcsNCwxNSwzLDEyLDMsOSw0LDYsNSw0LDcsMiw5LDEsMTIsMCwxNSwwLDE4LDEsMjAsMiwyMSwzLC0xLC0xLDE5LDE2LDE4LDgsMTgsNiwxOSw1XV0sQTpbMTgsWzksMjEsMSwwLC0xLC0xLDksMjEsMTcsMCwtMSwtMSw0LDcsMTQsN11dLEI6WzIxLFs0LDIxLDQsMCwtMSwtMSw0LDIxLDEzLDIxLDE2LDIwLDE3LDE5LDE4LDE3LDE4LDE1LDE3LDEzLDE2LDEyLDEzLDExLC0xLC0xLDQsMTEsMTMsMTEsMTYsMTAsMTcsOSwxOCw3LDE4LDQsMTcsMiwxNiwxLDEzLDAsNCwwXV0sQzpbMjEsWzE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDVdXSxEOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMSwyMSwxNCwyMCwxNiwxOCwxNywxNiwxOCwxMywxOCw4LDE3LDUsMTYsMywxNCwxLDExLDAsNCwwXV0sRTpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTcsMjEsLTEsLTEsNCwxMSwxMiwxMSwtMSwtMSw0LDAsMTcsMF1dLEY6WzE4LFs0LDIxLDQsMCwtMSwtMSw0LDIxLDE3LDIxLC0xLC0xLDQsMTEsMTIsMTFdXSxHOlsyMSxbMTgsMTYsMTcsMTgsMTUsMjAsMTMsMjEsOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOCw4LC0xLC0xLDEzLDgsMTgsOF1dLEg6WzIyLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSwxOCwwLC0xLC0xLDQsMTEsMTgsMTFdXSxJOls4LFs0LDIxLDQsMF1dLEo6WzE2LFsxMiwyMSwxMiw1LDExLDIsMTAsMSw4LDAsNiwwLDQsMSwzLDIsMiw1LDIsN11dLEs6WzIxLFs0LDIxLDQsMCwtMSwtMSwxOCwyMSw0LDcsLTEsLTEsOSwxMiwxOCwwXV0sTDpbMTcsWzQsMjEsNCwwLC0xLC0xLDQsMCwxNiwwXV0sTTpbMjQsWzQsMjEsNCwwLC0xLC0xLDQsMjEsMTIsMCwtMSwtMSwyMCwyMSwxMiwwLC0xLC0xLDIwLDIxLDIwLDBdXSxOOlsyMixbNCwyMSw0LDAsLTEsLTEsNCwyMSwxOCwwLC0xLC0xLDE4LDIxLDE4LDBdXSxPOlsyMixbOSwyMSw3LDIwLDUsMTgsNCwxNiwzLDEzLDMsOCw0LDUsNSwzLDcsMSw5LDAsMTMsMCwxNSwxLDE3LDMsMTgsNSwxOSw4LDE5LDEzLDE4LDE2LDE3LDE4LDE1LDIwLDEzLDIxLDksMjFdXSxQOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNCwxNywxMiwxNiwxMSwxMywxMCw0LDEwXV0sUTpbMjIsWzksMjEsNywyMCw1LDE4LDQsMTYsMywxMywzLDgsNCw1LDUsMyw3LDEsOSwwLDEzLDAsMTUsMSwxNywzLDE4LDUsMTksOCwxOSwxMywxOCwxNiwxNywxOCwxNSwyMCwxMywyMSw5LDIxLC0xLC0xLDEyLDQsMTgsLTJdXSxSOlsyMSxbNCwyMSw0LDAsLTEsLTEsNCwyMSwxMywyMSwxNiwyMCwxNywxOSwxOCwxNywxOCwxNSwxNywxMywxNiwxMiwxMywxMSw0LDExLC0xLC0xLDExLDExLDE4LDBdXSxTOlsyMCxbMTcsMTgsMTUsMjAsMTIsMjEsOCwyMSw1LDIwLDMsMTgsMywxNiw0LDE0LDUsMTMsNywxMiwxMywxMCwxNSw5LDE2LDgsMTcsNiwxNywzLDE1LDEsMTIsMCw4LDAsNSwxLDMsM11dLFQ6WzE2LFs4LDIxLDgsMCwtMSwtMSwxLDIxLDE1LDIxXV0sVTpbMjIsWzQsMjEsNCw2LDUsMyw3LDEsMTAsMCwxMiwwLDE1LDEsMTcsMywxOCw2LDE4LDIxXV0sVjpbMTgsWzEsMjEsOSwwLC0xLC0xLDE3LDIxLDksMF1dLFc6WzI0LFsyLDIxLDcsMCwtMSwtMSwxMiwyMSw3LDAsLTEsLTEsMTIsMjEsMTcsMCwtMSwtMSwyMiwyMSwxNywwXV0sWDpbMjAsWzMsMjEsMTcsMCwtMSwtMSwxNywyMSwzLDBdXSxZOlsxOCxbMSwyMSw5LDExLDksMCwtMSwtMSwxNywyMSw5LDExXV0sWjpbMjAsWzE3LDIxLDMsMCwtMSwtMSwzLDIxLDE3LDIxLC0xLC0xLDMsMCwxNywwXV0sIlsiOlsxNCxbNCwyNSw0LC03LC0xLC0xLDUsMjUsNSwtNywtMSwtMSw0LDI1LDExLDI1LC0xLC0xLDQsLTcsMTEsLTddXSwiXFwiOlsxNCxbMCwyMSwxNCwtM11dLCJdIjpbMTQsWzksMjUsOSwtNywtMSwtMSwxMCwyNSwxMCwtNywtMSwtMSwzLDI1LDEwLDI1LC0xLC0xLDMsLTcsMTAsLTddXSwiXiI6WzE2LFs2LDE1LDgsMTgsMTAsMTUsLTEsLTEsMywxMiw4LDE3LDEzLDEyLC0xLC0xLDgsMTcsOCwwXV0sXzpbMTYsWzAsLTIsMTYsLTJdXSwiYCI6WzEwLFs2LDIxLDUsMjAsNCwxOCw0LDE2LDUsMTUsNiwxNiw1LDE3XV0sYTpbMTksWzE1LDE0LDE1LDAsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGI6WzE5LFs0LDIxLDQsMCwtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxjOlsxOCxbMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGQ6WzE5LFsxNSwyMSwxNSwwLC0xLC0xLDE1LDExLDEzLDEzLDExLDE0LDgsMTQsNiwxMyw0LDExLDMsOCwzLDYsNCwzLDYsMSw4LDAsMTEsMCwxMywxLDE1LDNdXSxlOlsxOCxbMyw4LDE1LDgsMTUsMTAsMTQsMTIsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLGY6WzEyLFsxMCwyMSw4LDIxLDYsMjAsNSwxNyw1LDAsLTEsLTEsMiwxNCw5LDE0XV0sZzpbMTksWzE1LDE0LDE1LC0yLDE0LC01LDEzLC02LDExLC03LDgsLTcsNiwtNiwtMSwtMSwxNSwxMSwxMywxMywxMSwxNCw4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzXV0saDpbMTksWzQsMjEsNCwwLC0xLC0xLDQsMTAsNywxMyw5LDE0LDEyLDE0LDE0LDEzLDE1LDEwLDE1LDBdXSxpOls4LFszLDIxLDQsMjAsNSwyMSw0LDIyLDMsMjEsLTEsLTEsNCwxNCw0LDBdXSxqOlsxMCxbNSwyMSw2LDIwLDcsMjEsNiwyMiw1LDIxLC0xLC0xLDYsMTQsNiwtMyw1LC02LDMsLTcsMSwtN11dLGs6WzE3LFs0LDIxLDQsMCwtMSwtMSwxNCwxNCw0LDQsLTEsLTEsOCw4LDE1LDBdXSxsOls4LFs0LDIxLDQsMF1dLG06WzMwLFs0LDE0LDQsMCwtMSwtMSw0LDEwLDcsMTMsOSwxNCwxMiwxNCwxNCwxMywxNSwxMCwxNSwwLC0xLC0xLDE1LDEwLDE4LDEzLDIwLDE0LDIzLDE0LDI1LDEzLDI2LDEwLDI2LDBdXSxuOlsxOSxbNCwxNCw0LDAsLTEsLTEsNCwxMCw3LDEzLDksMTQsMTIsMTQsMTQsMTMsMTUsMTAsMTUsMF1dLG86WzE5LFs4LDE0LDYsMTMsNCwxMSwzLDgsMyw2LDQsMyw2LDEsOCwwLDExLDAsMTMsMSwxNSwzLDE2LDYsMTYsOCwxNSwxMSwxMywxMywxMSwxNCw4LDE0XV0scDpbMTksWzQsMTQsNCwtNywtMSwtMSw0LDExLDYsMTMsOCwxNCwxMSwxNCwxMywxMywxNSwxMSwxNiw4LDE2LDYsMTUsMywxMywxLDExLDAsOCwwLDYsMSw0LDNdXSxxOlsxOSxbMTUsMTQsMTUsLTcsLTEsLTEsMTUsMTEsMTMsMTMsMTEsMTQsOCwxNCw2LDEzLDQsMTEsMyw4LDMsNiw0LDMsNiwxLDgsMCwxMSwwLDEzLDEsMTUsM11dLHI6WzEzLFs0LDE0LDQsMCwtMSwtMSw0LDgsNSwxMSw3LDEzLDksMTQsMTIsMTRdXSxzOlsxNyxbMTQsMTEsMTMsMTMsMTAsMTQsNywxNCw0LDEzLDMsMTEsNCw5LDYsOCwxMSw3LDEzLDYsMTQsNCwxNCwzLDEzLDEsMTAsMCw3LDAsNCwxLDMsM11dLHQ6WzEyLFs1LDIxLDUsNCw2LDEsOCwwLDEwLDAsLTEsLTEsMiwxNCw5LDE0XV0sdTpbMTksWzQsMTQsNCw0LDUsMSw3LDAsMTAsMCwxMiwxLDE1LDQsLTEsLTEsMTUsMTQsMTUsMF1dLHY6WzE2LFsyLDE0LDgsMCwtMSwtMSwxNCwxNCw4LDBdXSx3OlsyMixbMywxNCw3LDAsLTEsLTEsMTEsMTQsNywwLC0xLC0xLDExLDE0LDE1LDAsLTEsLTEsMTksMTQsMTUsMF1dLHg6WzE3LFszLDE0LDE0LDAsLTEsLTEsMTQsMTQsMywwXV0seTpbMTYsWzIsMTQsOCwwLC0xLC0xLDE0LDE0LDgsMCw2LC00LDQsLTYsMiwtNywxLC03XV0sejpbMTcsWzE0LDE0LDMsMCwtMSwtMSwzLDE0LDE0LDE0LC0xLC0xLDMsMCwxNCwwXV0sInsiOlsxNCxbOSwyNSw3LDI0LDYsMjMsNSwyMSw1LDE5LDYsMTcsNywxNiw4LDE0LDgsMTIsNiwxMCwtMSwtMSw3LDI0LDYsMjIsNiwyMCw3LDE4LDgsMTcsOSwxNSw5LDEzLDgsMTEsNCw5LDgsNyw5LDUsOSwzLDgsMSw3LDAsNiwtMiw2LC00LDcsLTYsLTEsLTEsNiw4LDgsNiw4LDQsNywyLDYsMSw1LC0xLDUsLTMsNiwtNSw3LC02LDksLTddXSwifCI6WzgsWzQsMjUsNCwtN11dLCJ9IjpbMTQsWzUsMjUsNywyNCw4LDIzLDksMjEsOSwxOSw4LDE3LDcsMTYsNiwxNCw2LDEyLDgsMTAsLTEsLTEsNywyNCw4LDIyLDgsMjAsNywxOCw2LDE3LDUsMTUsNSwxMyw2LDExLDEwLDksNiw3LDUsNSw1LDMsNiwxLDcsMCw4LC0yLDgsLTQsNywtNiwtMSwtMSw4LDgsNiw2LDYsNCw3LDIsOCwxLDksLTEsOSwtMyw4LC01LDcsLTYsNSwtN11dLCJ+IjpbMjQsWzMsNiwzLDgsNCwxMSw2LDEyLDgsMTIsMTAsMTEsMTQsOCwxNiw3LDE4LDcsMjAsOCwyMSwxMCwtMSwtMSwzLDgsNCwxMCw2LDExLDgsMTEsMTAsMTAsMTQsNywxNiw2LDE4LDYsMjAsNywyMSwxMCwyMSwxMl1dfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aT1pfHwxO3ZhciBhLG8scyxsLHUsYyxoLGYsZD1bXTtmb3IoYT0wLG89dC5sZW5ndGg7YTxvO2ErKylpZih1PW5bdFthXV0pe2ZvcihmPW51bGwscz0wLGw9dVsxXS5sZW5ndGg7czxsO3MrPTIpLTE9PT11WzFdW3NdJiYtMT09PXVbMV1bcysxXT9mPW51bGw6KGM9ZSt1WzFdW3NdKmksaD1yLXVbMV1bcysxXSppLGYmJmQucHVzaChmLngsZi55LGMsaCksZj17eDpjLHk6aH0pO2UrPXVbMF0qaX1yZXR1cm4gZH19LHt9XSwzNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9O24udmVyc2lvbj10KCIuLi9wYWNrYWdlLmpzb24iKS52ZXJzaW9uLG4uTWFwPXQoIi4vdWkvbWFwIiksbi5Db250cm9sPXQoIi4vdWkvY29udHJvbC9jb250cm9sIiksbi5OYXZpZ2F0aW9uPXQoIi4vdWkvY29udHJvbC9uYXZpZ2F0aW9uIiksbi5HZW9sb2NhdGU9dCgiLi91aS9jb250cm9sL2dlb2xvY2F0ZSIpLG4uQXR0cmlidXRpb249dCgiLi91aS9jb250cm9sL2F0dHJpYnV0aW9uIiksbi5Qb3B1cD10KCIuL3VpL3BvcHVwIiksbi5NYXJrZXI9dCgiLi91aS9tYXJrZXIiKSxuLlN0eWxlPXQoIi4vc3R5bGUvc3R5bGUiKSxuLkxuZ0xhdD10KCIuL2dlby9sbmdfbGF0Iiksbi5MbmdMYXRCb3VuZHM9dCgiLi9nZW8vbG5nX2xhdF9ib3VuZHMiKSxuLlBvaW50PXQoInBvaW50LWdlb21ldHJ5Iiksbi5FdmVudGVkPXQoIi4vdXRpbC9ldmVudGVkIiksbi51dGlsPXQoIi4vdXRpbC91dGlsIiksbi5zdXBwb3J0ZWQ9dCgiLi91dGlsL2Jyb3dzZXIiKS5zdXBwb3J0ZWQ7dmFyIGk9dCgiLi91dGlsL2FqYXgiKTtuLnV0aWwuZ2V0SlNPTj1pLmdldEpTT04sbi51dGlsLmdldEFycmF5QnVmZmVyPWkuZ2V0QXJyYXlCdWZmZXI7dmFyIGE9dCgiLi91dGlsL2NvbmZpZyIpO24uY29uZmlnPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sImFjY2Vzc1Rva2VuIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuQUNDRVNTX1RPS0VOfSxzZXQ6ZnVuY3Rpb24odCl7YS5BQ0NFU1NfVE9LRU49dH19KX0seyIuLi9wYWNrYWdlLmpzb24iOjQ0MiwiLi9nZW8vbG5nX2xhdCI6MzM3LCIuL2dlby9sbmdfbGF0X2JvdW5kcyI6MzM4LCIuL3N0eWxlL3N0eWxlIjozNzYsIi4vdWkvY29udHJvbC9hdHRyaWJ1dGlvbiI6NDA3LCIuL3VpL2NvbnRyb2wvY29udHJvbCI6NDA4LCIuL3VpL2NvbnRyb2wvZ2VvbG9jYXRlIjo0MDksIi4vdWkvY29udHJvbC9uYXZpZ2F0aW9uIjo0MTAsIi4vdWkvbWFwIjo0MTksIi4vdWkvbWFya2VyIjo0MjAsIi4vdWkvcG9wdXAiOjQyMSwiLi91dGlsL2FqYXgiOjQyMywiLi91dGlsL2Jyb3dzZXIiOjQyNCwiLi91dGlsL2NvbmZpZyI6NDI5LCIuL3V0aWwvZXZlbnRlZCI6NDMyLCIuL3V0aWwvdXRpbCI6NDQwLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFzc2VydCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9e2RlZmluZTp7fSxpbml0aWFsaXplOnt9fSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07bigidV8iPT09aS5uYW1lLnNsaWNlKDAsMikpO3ZhciBhPSJ7cHJlY2lzaW9ufSAiKygxPT09aS5jb21wb25lbnRzPyJmbG9hdCI6InZlYyIraS5jb21wb25lbnRzKTtlLmRlZmluZVtpLm5hbWUuc2xpY2UoMildPSJ1bmlmb3JtICIrYSsiICIraS5uYW1lKyI7XG4iLGUuaW5pdGlhbGl6ZVtpLm5hbWUuc2xpY2UoMildPWErIiAiK2kubmFtZS5zbGljZSgyKSsiID0gIitpLm5hbWUrIjtcbiJ9cmV0dXJuIGV9fSx7YXNzZXJ0OjQ1fV0sMzQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLHM9dC5nbCxsPXQudHJhbnNmb3JtLHU9ci5wYWludFsiYmFja2dyb3VuZC1jb2xvciJdLGM9ci5wYWludFsiYmFja2dyb3VuZC1wYXR0ZXJuIl0saD1yLnBhaW50WyJiYWNrZ3JvdW5kLW9wYWNpdHkiXSxmPWM/dC5zcHJpdGVBdGxhcy5nZXRQb3NpdGlvbihjLmZyb20sITApOm51bGwsZD1jP3Quc3ByaXRlQXRsYXMuZ2V0UG9zaXRpb24oYy50bywhMCk6bnVsbDtpZih0LnNldERlcHRoU3VibGF5ZXIoMCksZiYmZCl7aWYodC5pc09wYXF1ZVBhc3MpcmV0dXJuO249dC51c2VQcm9ncmFtKCJwYXR0ZXJuIikscy51bmlmb3JtMWkobi51X2ltYWdlLDApLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl90bF9hLGYudGwpLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl9icl9hLGYuYnIpLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl90bF9iLGQudGwpLHMudW5pZm9ybTJmdihuLnVfcGF0dGVybl9icl9iLGQuYnIpLHMudW5pZm9ybTFmKG4udV9vcGFjaXR5LGgpLHMudW5pZm9ybTFmKG4udV9taXgsYy50KSxzLnVuaWZvcm0yZnYobi51X3BhdHRlcm5fc2l6ZV9hLGYuc2l6ZSkscy51bmlmb3JtMmZ2KG4udV9wYXR0ZXJuX3NpemVfYixkLnNpemUpLHMudW5pZm9ybTFmKG4udV9zY2FsZV9hLGMuZnJvbVNjYWxlKSxzLnVuaWZvcm0xZihuLnVfc2NhbGVfYixjLnRvU2NhbGUpLHMuYWN0aXZlVGV4dHVyZShzLlRFWFRVUkUwKSx0LnNwcml0ZUF0bGFzLmJpbmQocywhMCksdC50aWxlRXh0ZW50UGF0dGVyblZBTy5iaW5kKHMsbix0LnRpbGVFeHRlbnRCdWZmZXIpfWVsc2V7aWYodC5pc09wYXF1ZVBhc3MhPT0oMT09PXVbM10pKXJldHVybjt2YXIgcD1hKFt7bmFtZToidV9jb2xvciIsY29tcG9uZW50czo0fSx7bmFtZToidV9vcGFjaXR5Iixjb21wb25lbnRzOjF9XSk7bj10LnVzZVByb2dyYW0oImZpbGwiLFtdLHAscCkscy51bmlmb3JtNGZ2KG4udV9jb2xvcix1KSxzLnVuaWZvcm0xZihuLnVfb3BhY2l0eSxoKSx0LnRpbGVFeHRlbnRWQU8uYmluZChzLG4sdC50aWxlRXh0ZW50QnVmZmVyKX1zLmRpc2FibGUocy5TVEVOQ0lMX1RFU1QpO2Zvcih2YXIgbT1sLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOm99KSx2PTA7djxtLmxlbmd0aDt2Kyspe3ZhciBnPW1bdl07aWYoZiYmZCl7dmFyIHk9e2Nvb3JkOmcsdGlsZVNpemU6b307cy51bmlmb3JtMWYobi51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLDEvaSh5LDEsdC50cmFuc2Zvcm0udGlsZVpvb20pKTt2YXIgYj15LnRpbGVTaXplKk1hdGgucG93KDIsdC50cmFuc2Zvcm0udGlsZVpvb20teS5jb29yZC56KSx4PWIqKHkuY29vcmQueCtnLncqTWF0aC5wb3coMix5LmNvb3JkLnopKSxfPWIqeS5jb29yZC55O3MudW5pZm9ybTJmKG4udV9waXhlbF9jb29yZF91cHBlcix4Pj4xNixfPj4xNikscy51bmlmb3JtMmYobi51X3BpeGVsX2Nvb3JkX2xvd2VyLDY1NTM1JngsNjU1MzUmXyl9cy51bmlmb3JtTWF0cml4NGZ2KG4udV9tYXRyaXgsITEsdC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGcpKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRV9TVFJJUCwwLHQudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfXMuc3RlbmNpbE1hc2soMCkscy5zdGVuY2lsRnVuYyhzLkVRVUFMLDEyOCwxMjgpfXZhciBpPXQoIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyIpLGE9dCgiLi9jcmVhdGVfdW5pZm9ybV9wcmFnbWFzIiksbz01MTI7ZS5leHBvcnRzPW59LHsiLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzIjozNjEsIi4vY3JlYXRlX3VuaWZvcm1fcHJhZ21hcyI6MzQyfV0sMzQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7aWYoIXQuaXNPcGFxdWVQYXNzKXt2YXIgYT10LmdsO3Quc2V0RGVwdGhTdWJsYXllcigwKSx0LmRlcHRoTWFzayghMSksYS5kaXNhYmxlKGEuU1RFTkNJTF9URVNUKTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXSxsPWUuZ2V0VGlsZShzKSx1PWwuZ2V0QnVja2V0KHIpO2lmKHUpe3ZhciBjPXUuYnVmZmVyR3JvdXBzLmNpcmNsZTtpZihjKXt2YXIgaD11LnBhaW50QXR0cmlidXRlcy5jaXJjbGVbci5pZF0sZj10LnVzZVByb2dyYW0oImNpcmNsZSIsaC5kZWZpbmVzLGgudmVydGV4UHJhZ21hcyxoLmZyYWdtZW50UHJhZ21hcyk7Im1hcCI9PT1yLnBhaW50WyJjaXJjbGUtcGl0Y2gtc2NhbGUiXT8oYS51bmlmb3JtMWkoZi51X3NjYWxlX3dpdGhfbWFwLCEwKSxhLnVuaWZvcm0yZihmLnVfZXh0cnVkZV9zY2FsZSx0LnRyYW5zZm9ybS5waXhlbHNUb0dMVW5pdHNbMF0qdC50cmFuc2Zvcm0uYWx0aXR1ZGUsdC50cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdKnQudHJhbnNmb3JtLmFsdGl0dWRlKSk6KGEudW5pZm9ybTFpKGYudV9zY2FsZV93aXRoX21hcCwhMSksYS51bmlmb3JtMmZ2KGYudV9leHRydWRlX3NjYWxlLHQudHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0cykpLGEudW5pZm9ybTFmKGYudV9kZXZpY2VwaXhlbHJhdGlvLGkuZGV2aWNlUGl4ZWxSYXRpbyksYS51bmlmb3JtTWF0cml4NGZ2KGYudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgocy5wb3NNYXRyaXgsbCxyLnBhaW50WyJjaXJjbGUtdHJhbnNsYXRlIl0sci5wYWludFsiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiXSkpLHUuc2V0VW5pZm9ybXMoYSwiY2lyY2xlIixmLHIse3pvb206dC50cmFuc2Zvcm0uem9vbX0pO2Zvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgcD1jW2RdO3AudmFvc1tyLmlkXS5iaW5kKGEsZixwLmxheW91dFZlcnRleEJ1ZmZlcixwLmVsZW1lbnRCdWZmZXIscC5wYWludFZlcnRleEJ1ZmZlcnNbci5pZF0pLGEuZHJhd0VsZW1lbnRzKGEuVFJJQU5HTEVTLDMqcC5lbGVtZW50QnVmZmVyLmxlbmd0aCxhLlVOU0lHTkVEX1NIT1JULDApfX19fX19dmFyIGk9dCgiLi4vdXRpbC9icm93c2VyIik7ZS5leHBvcnRzPW59LHsiLi4vdXRpbC9icm93c2VyIjo0MjR9XSwzNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaT10LmdsO2kuZW5hYmxlKGkuU1RFTkNJTF9URVNUKTtmb3IodmFyIGE9dC51c2VQcm9ncmFtKCJjb2xsaXNpb25ib3giKSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPW5bb10sbD1lLmdldFRpbGUocyksdT1sLmdldEJ1Y2tldChyKTtpZih1KXt2YXIgYz11LmJ1ZmZlckdyb3Vwcy5jb2xsaXNpb25Cb3g7aWYoYyYmYy5sZW5ndGgpe3ZhciBoPWNbMF07MCE9PWgubGF5b3V0VmVydGV4QnVmZmVyLmxlbmd0aCYmKGkudW5pZm9ybU1hdHJpeDRmdihhLnVfbWF0cml4LCExLHMucG9zTWF0cml4KSx0LmVuYWJsZVRpbGVDbGlwcGluZ01hc2socyksdC5saW5lV2lkdGgoMSksaS51bmlmb3JtMWYoYS51X3NjYWxlLE1hdGgucG93KDIsdC50cmFuc2Zvcm0uem9vbS1sLmNvb3JkLnopKSxpLnVuaWZvcm0xZihhLnVfem9vbSwxMCp0LnRyYW5zZm9ybS56b29tKSxpLnVuaWZvcm0xZihhLnVfbWF4em9vbSwxMCoobC5jb29yZC56KzEpKSxoLnZhb3Nbci5pZF0uYmluZChpLGEsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIpLGkuZHJhd0FycmF5cyhpLkxJTkVTLDAsaC5sYXlvdXRWZXJ0ZXhCdWZmZXIubGVuZ3RoKSl9fX19ZS5leHBvcnRzPW59LHt9XSwzNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYoIXQuaXNPcGFxdWVQYXNzJiZ0Lm9wdGlvbnMuZGVidWcpZm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspaSh0LGUscltuXSl9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49dC5nbDtuLmRpc2FibGUobi5TVEVOQ0lMX1RFU1QpLHQubGluZVdpZHRoKDEqby5kZXZpY2VQaXhlbFJhdGlvKTt2YXIgaT1yLnBvc01hdHJpeCxoPXQudXNlUHJvZ3JhbSgiZGVidWciKTtuLnVuaWZvcm1NYXRyaXg0ZnYoaC51X21hdHJpeCwhMSxpKSxuLnVuaWZvcm00ZihoLnVfY29sb3IsMSwwLDAsMSksdC5kZWJ1Z1ZBTy5iaW5kKG4saCx0LmRlYnVnQnVmZmVyKSxuLmRyYXdBcnJheXMobi5MSU5FX1NUUklQLDAsdC5kZWJ1Z0J1ZmZlci5sZW5ndGgpO2Zvcih2YXIgZj1hKHIudG9TdHJpbmcoKSw1MCwyMDAsNSksZD1uZXcgdC5Qb3NBcnJheSxwPTA7cDxmLmxlbmd0aDtwKz0yKWQuZW1wbGFjZUJhY2soZltwXSxmW3ArMV0pO3ZhciBtPW5ldyB1KGQuc2VyaWFsaXplKCksdC5Qb3NBcnJheS5zZXJpYWxpemUoKSx1LkJ1ZmZlclR5cGUuVkVSVEVYKTsobmV3IGMpLmJpbmQobixoLG0pLG4udW5pZm9ybTRmKGgudV9jb2xvciwxLDEsMSwxKTtmb3IodmFyIHY9ZS5nZXRUaWxlKHIpLnRpbGVTaXplLGc9bC8oTWF0aC5wb3coMix0LnRyYW5zZm9ybS56b29tLXIueikqdikseT1bWy0xLC0xXSxbLTEsMV0sWzEsLTFdLFsxLDFdXSxiPTA7Yjx5Lmxlbmd0aDtiKyspe3ZhciB4PXlbYl07bi51bmlmb3JtTWF0cml4NGZ2KGgudV9tYXRyaXgsITEscy50cmFuc2xhdGUoW10saSxbZyp4WzBdLGcqeFsxXSwwXSkpLG4uZHJhd0FycmF5cyhuLkxJTkVTLDAsbS5sZW5ndGgpfW4udW5pZm9ybTRmKGgudV9jb2xvciwwLDAsMCwxKSxuLnVuaWZvcm1NYXRyaXg0ZnYoaC51X21hdHJpeCwhMSxpKSxuLmRyYXdBcnJheXMobi5MSU5FUywwLG0ubGVuZ3RoKX12YXIgYT10KCIuLi9saWIvZGVidWd0ZXh0Iiksbz10KCIuLi91dGlsL2Jyb3dzZXIiKSxzPXQoImdsLW1hdHJpeCIpLm1hdDQsbD10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCx1PXQoIi4uL2RhdGEvYnVmZmVyIiksYz10KCIuL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bn0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9kYXRhL2J1ZmZlciI6MzMyLCIuLi9saWIvZGVidWd0ZXh0IjozNDAsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuL3ZlcnRleF9hcnJheV9vYmplY3QiOjM1NSwiZ2wtbWF0cml4IjoxOTF9XSwzNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgbz10LmdsO28uZW5hYmxlKG8uU1RFTkNJTF9URVNUKTt2YXIgcztpZihzPSFyLnBhaW50WyJmaWxsLXBhdHRlcm4iXSYmKHIuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50KCJmaWxsLWNvbG9yIikmJnIuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50KCJmaWxsLW9wYWNpdHkiKSYmMT09PXIucGFpbnRbImZpbGwtY29sb3IiXVszXSYmMT09PXIucGFpbnRbImZpbGwtb3BhY2l0eSJdKSx0LmlzT3BhcXVlUGFzcz09PXMpe3Quc2V0RGVwdGhTdWJsYXllcigxKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKylpKHQsZSxyLG5bbF0pfWlmKCF0LmlzT3BhcXVlUGFzcyYmci5wYWludFsiZmlsbC1hbnRpYWxpYXMiXSl7dC5saW5lV2lkdGgoMiksdC5kZXB0aE1hc2soITEpO3ZhciB1PXIuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik7KHV8fCFyLnBhaW50WyJmaWxsLXBhdHRlcm4iXSkmJnU/dC5zZXREZXB0aFN1YmxheWVyKDIpOnQuc2V0RGVwdGhTdWJsYXllcigwKTtmb3IodmFyIGM9MDtjPG4ubGVuZ3RoO2MrKylhKHQsZSxyLG5bY10pfX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPWUuZ2V0VGlsZShuKSxhPWkuZ2V0QnVja2V0KHIpO2lmKGEpe3ZhciBzPWEuYnVmZmVyR3JvdXBzLmZpbGw7aWYocyl7dmFyIGwsdT10LmdsLGM9ci5wYWludFsiZmlsbC1wYXR0ZXJuIl07aWYoYylsPXQudXNlUHJvZ3JhbSgicGF0dGVybiIpLG8oYyxyLnBhaW50WyJmaWxsLW9wYWNpdHkiXSxpLG4sdCxsKSx1LmFjdGl2ZVRleHR1cmUodS5URVhUVVJFMCksdC5zcHJpdGVBdGxhcy5iaW5kKHUsITApO2Vsc2V7dmFyIGg9YS5wYWludEF0dHJpYnV0ZXMuZmlsbFtyLmlkXTtsPXQudXNlUHJvZ3JhbSgiZmlsbCIsaC5kZWZpbmVzLGgudmVydGV4UHJhZ21hcyxoLmZyYWdtZW50UHJhZ21hcyksYS5zZXRVbmlmb3Jtcyh1LCJmaWxsIixsLHIse3pvb206dC50cmFuc2Zvcm0uem9vbX0pfXUudW5pZm9ybU1hdHJpeDRmdihsLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KG4ucG9zTWF0cml4LGksci5wYWludFsiZmlsbC10cmFuc2xhdGUiXSxyLnBhaW50WyJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiXSkpLHQuZW5hYmxlVGlsZUNsaXBwaW5nTWFzayhuKTtmb3IodmFyIGY9MDtmPHMubGVuZ3RoO2YrKyl7dmFyIGQ9c1tmXTtkLnZhb3Nbci5pZF0uYmluZCh1LGwsZC5sYXlvdXRWZXJ0ZXhCdWZmZXIsZC5lbGVtZW50QnVmZmVyLGQucGFpbnRWZXJ0ZXhCdWZmZXJzW3IuaWRdKSx1LmRyYXdFbGVtZW50cyh1LlRSSUFOR0xFUyxkLmVsZW1lbnRCdWZmZXIubGVuZ3RoLHUuVU5TSUdORURfU0hPUlQsMCl9fX19ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaT1lLmdldFRpbGUobiksYT1pLmdldEJ1Y2tldChyKTtpZihhKXt2YXIgcyxsPXQuZ2wsdT1hLmJ1ZmZlckdyb3Vwcy5maWxsLGM9ci5wYWludFsiZmlsbC1wYXR0ZXJuIl0saD1yLnBhaW50WyJmaWxsLW9wYWNpdHkiXSxmPXIuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik7aWYoYyYmIWYpcz10LnVzZVByb2dyYW0oIm91dGxpbmVwYXR0ZXJuIiksbC51bmlmb3JtMmYocy51X3dvcmxkLGwuZHJhd2luZ0J1ZmZlcldpZHRoLGwuZHJhd2luZ0J1ZmZlckhlaWdodCk7ZWxzZXt2YXIgZD1hLnBhaW50QXR0cmlidXRlcy5maWxsW3IuaWRdO3M9dC51c2VQcm9ncmFtKCJvdXRsaW5lIixkLmRlZmluZXMsZC52ZXJ0ZXhQcmFnbWFzLGQuZnJhZ21lbnRQcmFnbWFzKSxsLnVuaWZvcm0yZihzLnVfd29ybGQsbC5kcmF3aW5nQnVmZmVyV2lkdGgsbC5kcmF3aW5nQnVmZmVySGVpZ2h0KSxsLnVuaWZvcm0xZihzLnVfb3BhY2l0eSxoKSxhLnNldFVuaWZvcm1zKGwsImZpbGwiLHMscix7em9vbTp0LnRyYW5zZm9ybS56b29tfSl9bC51bmlmb3JtTWF0cml4NGZ2KHMudV9tYXRyaXgsITEsdC50cmFuc2xhdGVQb3NNYXRyaXgobi5wb3NNYXRyaXgsaSxyLnBhaW50WyJmaWxsLXRyYW5zbGF0ZSJdLHIucGFpbnRbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdKSksYyYmbyhjLGgsaSxuLHQscyksdC5lbmFibGVUaWxlQ2xpcHBpbmdNYXNrKG4pO2Zvcih2YXIgcD0wO3A8dS5sZW5ndGg7cCsrKXt2YXIgbT11W3BdO20uc2Vjb25kVmFvc1tyLmlkXS5iaW5kKGwscyxtLmxheW91dFZlcnRleEJ1ZmZlcixtLmVsZW1lbnRCdWZmZXIyLG0ucGFpbnRWZXJ0ZXhCdWZmZXJzW3IuaWRdKSxsLmRyYXdFbGVtZW50cyhsLkxJTkVTLDIqbS5lbGVtZW50QnVmZmVyMi5sZW5ndGgsbC5VTlNJR05FRF9TSE9SVCwwKX19fWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3ZhciBvPWkuZ2wsbD1pLnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHQuZnJvbSwhMCksdT1pLnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHQudG8sITApO2lmKGwmJnUpe28udW5pZm9ybTFpKGEudV9pbWFnZSwwKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fdGxfYSxsLnRsKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fYnJfYSxsLmJyKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fdGxfYix1LnRsKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fYnJfYix1LmJyKSxvLnVuaWZvcm0xZihhLnVfb3BhY2l0eSxlKSxvLnVuaWZvcm0xZihhLnVfbWl4LHQudCksby51bmlmb3JtMWYoYS51X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLDEvcyhyLDEsaS50cmFuc2Zvcm0udGlsZVpvb20pKSxvLnVuaWZvcm0yZnYoYS51X3BhdHRlcm5fc2l6ZV9hLGwuc2l6ZSksby51bmlmb3JtMmZ2KGEudV9wYXR0ZXJuX3NpemVfYix1LnNpemUpLG8udW5pZm9ybTFmKGEudV9zY2FsZV9hLHQuZnJvbVNjYWxlKSxvLnVuaWZvcm0xZihhLnVfc2NhbGVfYix0LnRvU2NhbGUpO3ZhciBjPXIudGlsZVNpemUqTWF0aC5wb3coMixpLnRyYW5zZm9ybS50aWxlWm9vbS1yLmNvb3JkLnopLGg9Yyooci5jb29yZC54K24udypNYXRoLnBvdygyLHIuY29vcmQueikpLGY9YypyLmNvb3JkLnk7by51bmlmb3JtMmYoYS51X3BpeGVsX2Nvb3JkX3VwcGVyLGg+PjE2LGY+PjE2KSxvLnVuaWZvcm0yZihhLnVfcGl4ZWxfY29vcmRfbG93ZXIsNjU1MzUmaCw2NTUzNSZmKSxvLmFjdGl2ZVRleHR1cmUoby5URVhUVVJFMCksaS5zcHJpdGVBdGxhcy5iaW5kKG8sITApfX12YXIgcz10KCIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiKTtlLmV4cG9ydHM9bn0seyIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiOjM2MX1dLDM0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL2Jyb3dzZXIiKSxpPXQoImdsLW1hdHJpeCIpLm1hdDIsYT10KCIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7aWYoIXQuaXNPcGFxdWVQYXNzKXt0LnNldERlcHRoU3VibGF5ZXIoMCksdC5kZXB0aE1hc2soITEpO3ZhciBzPXQuZ2w7aWYocy5lbmFibGUocy5TVEVOQ0lMX1RFU1QpLCEoci5wYWludFsibGluZS13aWR0aCJdPD0wKSl7dmFyIGw9MS9uLmRldmljZVBpeGVsUmF0aW8sdT1yLnBhaW50WyJsaW5lLWJsdXIiXStsLGM9ci5wYWludFsibGluZS1jb2xvciJdLGg9dC50cmFuc2Zvcm0sZj1pLmNyZWF0ZSgpO2kuc2NhbGUoZixmLFsxLE1hdGguY29zKGguX3BpdGNoKV0pLGkucm90YXRlKGYsZix0LnRyYW5zZm9ybS5hbmdsZSk7dmFyIGQscCxtLHYsZyx5PU1hdGguc3FydChoLmhlaWdodCpoLmhlaWdodC80KigxK2guYWx0aXR1ZGUqaC5hbHRpdHVkZSkpLGI9aC5oZWlnaHQvMipNYXRoLnRhbihoLl9waXRjaCkseD0oeStiKS95LTEsXz1yLnBhaW50WyJsaW5lLWRhc2hhcnJheSJdLHc9ci5wYWludFsibGluZS1wYXR0ZXJuIl07aWYoXylkPXQudXNlUHJvZ3JhbSgibGluZXNkZnBhdHRlcm4iKSxzLnVuaWZvcm0xZihkLnVfbGluZXdpZHRoLHIucGFpbnRbImxpbmUtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfZ2Fwd2lkdGgsci5wYWludFsibGluZS1nYXAtd2lkdGgiXS8yKSxzLnVuaWZvcm0xZihkLnVfYW50aWFsaWFzaW5nLGwvMikscy51bmlmb3JtMWYoZC51X2JsdXIsdSkscy51bmlmb3JtNGZ2KGQudV9jb2xvcixjKSxzLnVuaWZvcm0xZihkLnVfb3BhY2l0eSxyLnBhaW50WyJsaW5lLW9wYWNpdHkiXSkscD10LmxpbmVBdGxhcy5nZXREYXNoKF8uZnJvbSwicm91bmQiPT09ci5sYXlvdXRbImxpbmUtY2FwIl0pLG09dC5saW5lQXRsYXMuZ2V0RGFzaChfLnRvLCJyb3VuZCI9PT1yLmxheW91dFsibGluZS1jYXAiXSkscy51bmlmb3JtMWkoZC51X2ltYWdlLDApLHMuYWN0aXZlVGV4dHVyZShzLlRFWFRVUkUwKSx0LmxpbmVBdGxhcy5iaW5kKHMpLHMudW5pZm9ybTFmKGQudV90ZXhfeV9hLHAueSkscy51bmlmb3JtMWYoZC51X3RleF95X2IsbS55KSxzLnVuaWZvcm0xZihkLnVfbWl4LF8udCkscy51bmlmb3JtMWYoZC51X2V4dHJhLHgpLHMudW5pZm9ybTFmKGQudV9vZmZzZXQsLXIucGFpbnRbImxpbmUtb2Zmc2V0Il0pLHMudW5pZm9ybU1hdHJpeDJmdihkLnVfYW50aWFsaWFzaW5nbWF0cml4LCExLGYpO2Vsc2UgaWYodyl7aWYodj10LnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHcuZnJvbSwhMCksZz10LnNwcml0ZUF0bGFzLmdldFBvc2l0aW9uKHcudG8sITApLCF2fHwhZylyZXR1cm47ZD10LnVzZVByb2dyYW0oImxpbmVwYXR0ZXJuIikscy51bmlmb3JtMWkoZC51X2ltYWdlLDApLHMuYWN0aXZlVGV4dHVyZShzLlRFWFRVUkUwKSx0LnNwcml0ZUF0bGFzLmJpbmQocywhMCkscy51bmlmb3JtMWYoZC51X2xpbmV3aWR0aCxyLnBhaW50WyJsaW5lLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2dhcHdpZHRoLHIucGFpbnRbImxpbmUtZ2FwLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2FudGlhbGlhc2luZyxsLzIpLHMudW5pZm9ybTFmKGQudV9ibHVyLHUpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl90bF9hLHYudGwpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl9icl9hLHYuYnIpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl90bF9iLGcudGwpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybl9icl9iLGcuYnIpLHMudW5pZm9ybTFmKGQudV9mYWRlLHcudCkscy51bmlmb3JtMWYoZC51X29wYWNpdHksci5wYWludFsibGluZS1vcGFjaXR5Il0pLHMudW5pZm9ybTFmKGQudV9leHRyYSx4KSxzLnVuaWZvcm0xZihkLnVfb2Zmc2V0LC1yLnBhaW50WyJsaW5lLW9mZnNldCJdKSxzLnVuaWZvcm1NYXRyaXgyZnYoZC51X2FudGlhbGlhc2luZ21hdHJpeCwhMSxmKX1lbHNlIGQ9dC51c2VQcm9ncmFtKCJsaW5lIikscy51bmlmb3JtMWYoZC51X2xpbmV3aWR0aCxyLnBhaW50WyJsaW5lLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2dhcHdpZHRoLHIucGFpbnRbImxpbmUtZ2FwLXdpZHRoIl0vMikscy51bmlmb3JtMWYoZC51X2FudGlhbGlhc2luZyxsLzIpLHMudW5pZm9ybTFmKGQudV9ibHVyLHUpLHMudW5pZm9ybTFmKGQudV9leHRyYSx4KSxzLnVuaWZvcm0xZihkLnVfb2Zmc2V0LC1yLnBhaW50WyJsaW5lLW9mZnNldCJdKSxzLnVuaWZvcm1NYXRyaXgyZnYoZC51X2FudGlhbGlhc2luZ21hdHJpeCwhMSxmKSxzLnVuaWZvcm00ZnYoZC51X2NvbG9yLGMpLHMudW5pZm9ybTFmKGQudV9vcGFjaXR5LHIucGFpbnRbImxpbmUtb3BhY2l0eSJdKTtmb3IodmFyIE09MDtNPG8ubGVuZ3RoO00rKyl7dmFyIGs9b1tNXSxBPWUuZ2V0VGlsZShrKSxUPUEuZ2V0QnVja2V0KHIpO2lmKFQpe3ZhciBTPVQuYnVmZmVyR3JvdXBzLmxpbmU7aWYoUyl7dC5lbmFibGVUaWxlQ2xpcHBpbmdNYXNrKGspO3ZhciBFPXQudHJhbnNsYXRlUG9zTWF0cml4KGsucG9zTWF0cml4LEEsci5wYWludFsibGluZS10cmFuc2xhdGUiXSxyLnBhaW50WyJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiXSk7cy51bmlmb3JtTWF0cml4NGZ2KGQudV9tYXRyaXgsITEsRSk7dmFyIEw9MS9hKEEsMSx0LnRyYW5zZm9ybS56b29tKTtpZihfKXt2YXIgQz1wLndpZHRoKl8uZnJvbVNjYWxlLHo9bS53aWR0aCpfLnRvU2NhbGUsST1bMS9hKEEsQyx0LnRyYW5zZm9ybS50aWxlWm9vbSksLXAuaGVpZ2h0LzJdLEQ9WzEvYShBLHosdC50cmFuc2Zvcm0udGlsZVpvb20pLC1tLmhlaWdodC8yXSxQPXQubGluZUF0bGFzLndpZHRoLygyNTYqTWF0aC5taW4oQyx6KSpuLmRldmljZVBpeGVsUmF0aW8pLzI7cy51bmlmb3JtMWYoZC51X3JhdGlvLEwpLHMudW5pZm9ybTJmdihkLnVfcGF0dGVybnNjYWxlX2EsSSkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuc2NhbGVfYixEKSxzLnVuaWZvcm0xZihkLnVfc2RmZ2FtbWEsUCl9ZWxzZSB3PyhzLnVuaWZvcm0xZihkLnVfcmF0aW8sTCkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX3NpemVfYSxbYShBLHYuc2l6ZVswXSp3LmZyb21TY2FsZSx0LnRyYW5zZm9ybS50aWxlWm9vbSksZy5zaXplWzFdXSkscy51bmlmb3JtMmZ2KGQudV9wYXR0ZXJuX3NpemVfYixbYShBLGcuc2l6ZVswXSp3LnRvU2NhbGUsdC50cmFuc2Zvcm0udGlsZVpvb20pLGcuc2l6ZVsxXV0pKTpzLnVuaWZvcm0xZihkLnVfcmF0aW8sTCk7Zm9yKHZhciBPPTA7TzxTLmxlbmd0aDtPKyspe3ZhciBSPVNbT107Ui52YW9zW3IuaWRdLmJpbmQocyxkLFIubGF5b3V0VmVydGV4QnVmZmVyLFIuZWxlbWVudEJ1ZmZlcikscy5kcmF3RWxlbWVudHMocy5UUklBTkdMRVMsMypSLmVsZW1lbnRCdWZmZXIubGVuZ3RoLHMuVU5TSUdORURfU0hPUlQsMCl9fX19fX19fSx7Ii4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyI6MzYxLCIuLi91dGlsL2Jyb3dzZXIiOjQyNCwiZ2wtbWF0cml4IjoxOTF9XSwzNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZighdC5pc09wYXF1ZVBhc3Mpe3ZhciBhPXQuZ2w7YS5lbmFibGUoYS5ERVBUSF9URVNUKSx0LmRlcHRoTWFzayghMCksYS5kZXB0aEZ1bmMoYS5MRVNTKTtmb3IodmFyIG89bi5sZW5ndGgmJm5bMF0ueixzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPW5bc107dC5zZXREZXB0aFN1YmxheWVyKGwuei1vKSxpKHQsZSxyLGwpfWEuZGVwdGhGdW5jKGEuTEVRVUFMKX19ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT10LmdsO2kuZGlzYWJsZShpLlNURU5DSUxfVEVTVCk7dmFyIHU9ZS5nZXRUaWxlKG4pLGM9dC50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KG4sZS5tYXh6b29tKSxoPXQudXNlUHJvZ3JhbSgicmFzdGVyIik7aS51bmlmb3JtTWF0cml4NGZ2KGgudV9tYXRyaXgsITEsYyksaS51bmlmb3JtMWYoaC51X2JyaWdodG5lc3NfbG93LHIucGFpbnRbInJhc3Rlci1icmlnaHRuZXNzLW1pbiJdKSxpLnVuaWZvcm0xZihoLnVfYnJpZ2h0bmVzc19oaWdoLHIucGFpbnRbInJhc3Rlci1icmlnaHRuZXNzLW1heCJdKSxpLnVuaWZvcm0xZihoLnVfc2F0dXJhdGlvbl9mYWN0b3IscyhyLnBhaW50WyJyYXN0ZXItc2F0dXJhdGlvbiJdKSksaS51bmlmb3JtMWYoaC51X2NvbnRyYXN0X2ZhY3RvcixvKHIucGFpbnRbInJhc3Rlci1jb250cmFzdCJdKSksaS51bmlmb3JtM2Z2KGgudV9zcGluX3dlaWdodHMsYShyLnBhaW50WyJyYXN0ZXItaHVlLXJvdGF0ZSJdKSk7dmFyIGYsZCxwPXUuc291cmNlJiZ1LnNvdXJjZS5maW5kTG9hZGVkUGFyZW50KG4sMCx7fSksbT1sKHUscCxyLHQudHJhbnNmb3JtKTtpLmFjdGl2ZVRleHR1cmUoaS5URVhUVVJFMCksaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQsdS50ZXh0dXJlKSxpLmFjdGl2ZVRleHR1cmUoaS5URVhUVVJFMSkscD8oaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQscC50ZXh0dXJlKSxmPU1hdGgucG93KDIscC5jb29yZC56LXUuY29vcmQueiksZD1bdS5jb29yZC54KmYlMSx1LmNvb3JkLnkqZiUxXSk6KGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHUudGV4dHVyZSksbVsxXT0wKSxpLnVuaWZvcm0yZnYoaC51X3RsX3BhcmVudCxkfHxbMCwwXSksaS51bmlmb3JtMWYoaC51X3NjYWxlX3BhcmVudCxmfHwxKSxpLnVuaWZvcm0xZihoLnVfYnVmZmVyX3NjYWxlLDEpLGkudW5pZm9ybTFmKGgudV9vcGFjaXR5MCxtWzBdKSxpLnVuaWZvcm0xZihoLnVfb3BhY2l0eTEsbVsxXSksaS51bmlmb3JtMWkoaC51X2ltYWdlMCwwKSxpLnVuaWZvcm0xaShoLnVfaW1hZ2UxLDEpO3ZhciB2PXUuYm91bmRzQnVmZmVyfHx0LnJhc3RlckJvdW5kc0J1ZmZlcjsodS5ib3VuZHNWQU98fHQucmFzdGVyQm91bmRzVkFPKS5iaW5kKGksaCx2KSxpLmRyYXdBcnJheXMoaS5UUklBTkdMRV9TVFJJUCwwLHYubGVuZ3RoKX1mdW5jdGlvbiBhKHQpe3QqPU1hdGguUEkvMTgwO3ZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCk7cmV0dXJuWygyKnIrMSkvMywoLU1hdGguc3FydCgzKSplLXIrMSkvMywoTWF0aC5zcXJ0KDMpKmUtcisxKS8zXX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PjA/MS8oMS10KToxK3R9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdD4wPzEtMS8oMS4wMDEtdCk6LXR9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT1bMSwwXSxhPXIucGFpbnRbInJhc3Rlci1mYWRlLWR1cmF0aW9uIl07aWYodC5zb3VyY2UmJmE+MCl7dmFyIG89KG5ldyBEYXRlKS5nZXRUaW1lKCkscz0oby10LnRpbWVBZGRlZCkvYSxsPWU/KG8tZS50aW1lQWRkZWQpL2E6LTEsYz1uLmNvdmVyaW5nWm9vbUxldmVsKHQuc291cmNlKSxoPSEhZSYmTWF0aC5hYnMoZS5jb29yZC56LWMpPk1hdGguYWJzKHQuY29vcmQuei1jKTshZXx8aD8oaVswXT11LmNsYW1wKHMsMCwxKSxpWzFdPTEtaVswXSk6KGlbMF09dS5jbGFtcCgxLWwsMCwxKSxpWzFdPTEtaVswXSl9dmFyIGY9ci5wYWludFsicmFzdGVyLW9wYWNpdHkiXTtyZXR1cm4gaVswXSo9ZixpWzFdKj1mLGl9dmFyIHU9dCgiLi4vdXRpbC91dGlsIiksYz10KCIuLi91dGlsL3N0cnVjdF9hcnJheSIpO2UuZXhwb3J0cz1uLG4uUmFzdGVyQm91bmRzQXJyYXk9bmV3IGMoe21lbWJlcnM6W3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn0se25hbWU6ImFfdGV4dHVyZV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XX0pfSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwfV0sMzUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7aWYoIXQuaXNPcGFxdWVQYXNzKXt2YXIgYT0hKHIubGF5b3V0WyJ0ZXh0LWFsbG93LW92ZXJsYXAiXXx8ci5sYXlvdXRbImljb24tYWxsb3ctb3ZlcmxhcCJdfHxyLmxheW91dFsidGV4dC1pZ25vcmUtcGxhY2VtZW50Il18fHIubGF5b3V0WyJpY29uLWlnbm9yZS1wbGFjZW1lbnQiXSksbz10LmdsO2E/by5kaXNhYmxlKG8uU1RFTkNJTF9URVNUKTpvLmVuYWJsZShvLlNURU5DSUxfVEVTVCksdC5zZXREZXB0aFN1YmxheWVyKDApLHQuZGVwdGhNYXNrKCExKSxvLmRpc2FibGUoby5ERVBUSF9URVNUKSxpKHQsZSxyLG4sITEsci5wYWludFsiaWNvbi10cmFuc2xhdGUiXSxyLnBhaW50WyJpY29uLXRyYW5zbGF0ZS1hbmNob3IiXSxyLmxheW91dFsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSxyLmxheW91dFsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXSxyLmxheW91dFsiaWNvbi1zaXplIl0sci5wYWludFsiaWNvbi1oYWxvLXdpZHRoIl0sci5wYWludFsiaWNvbi1oYWxvLWNvbG9yIl0sci5wYWludFsiaWNvbi1oYWxvLWJsdXIiXSxyLnBhaW50WyJpY29uLW9wYWNpdHkiXSxyLnBhaW50WyJpY29uLWNvbG9yIl0pLGkodCxlLHIsbiwhMCxyLnBhaW50WyJ0ZXh0LXRyYW5zbGF0ZSJdLHIucGFpbnRbInRleHQtdHJhbnNsYXRlLWFuY2hvciJdLHIubGF5b3V0WyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdLHIubGF5b3V0WyJ0ZXh0LXBpdGNoLWFsaWdubWVudCJdLHIubGF5b3V0WyJ0ZXh0LXNpemUiXSxyLnBhaW50WyJ0ZXh0LWhhbG8td2lkdGgiXSxyLnBhaW50WyJ0ZXh0LWhhbG8tY29sb3IiXSxyLnBhaW50WyJ0ZXh0LWhhbG8tYmx1ciJdLHIucGFpbnRbInRleHQtb3BhY2l0eSJdLHIucGFpbnRbInRleHQtY29sb3IiXSksby5lbmFibGUoby5ERVBUSF9URVNUKSxlLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMmJnModCxlLHIsbil9fWZ1bmN0aW9uIGkodCxlLHIsbixpLG8scyxsLHUsYyxoLGYsZCxwLG0pe2Zvcih2YXIgdj0wO3Y8bi5sZW5ndGg7disrKXt2YXIgZz1lLmdldFRpbGUoblt2XSkseT1nLmdldEJ1Y2tldChyKTtpZih5KXt2YXIgYj15LmJ1ZmZlckdyb3Vwcyx4PWk/Yi5nbHlwaDpiLmljb247eC5sZW5ndGgmJih0LmVuYWJsZVRpbGVDbGlwcGluZ01hc2soblt2XSksYSh0LHIsblt2XS5wb3NNYXRyaXgsZyx5LHgsaSxpfHx5LnNkZkljb25zLCFpJiZ5Lmljb25zTmVlZExpbmVhcixpP3kuYWRqdXN0ZWRUZXh0U2l6ZTp5LmFkanVzdGVkSWNvblNpemUseS5mb250c3RhY2ssbyxzLGwsdSxjLGgsZixkLHAsbSkpfX19ZnVuY3Rpb24gYSh0LGUscixuLGksYSxzLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF8sdyl7dmFyIE0sayxBLFQ9dC5nbCxTPXQudHJhbnNmb3JtLEU9Im1hcCI9PT1tLEw9Im1hcCI9PT12LEM9cz8yNDoxLHo9Zy9DO2lmKEw/KGs9bChuLDEsdC50cmFuc2Zvcm0uem9vbSkqeixBPTEvTWF0aC5jb3MoUy5fcGl0Y2gpLE09W2ssa10pOihrPXQudHJhbnNmb3JtLmFsdGl0dWRlKnosQT0xLE09W1MucGl4ZWxzVG9HTFVuaXRzWzBdKmssUy5waXhlbHNUb0dMVW5pdHNbMV0qa10pLHN8fHQuc3R5bGUuc3ByaXRlLmxvYWRlZCgpKXt2YXIgST10LnVzZVByb2dyYW0odT8ic2RmIjoiaWNvbiIpO2lmKFQudW5pZm9ybU1hdHJpeDRmdihJLnVfbWF0cml4LCExLHQudHJhbnNsYXRlUG9zTWF0cml4KHIsbixkLHApKSxULnVuaWZvcm0xaShJLnVfcm90YXRlX3dpdGhfbWFwLEUpLFQudW5pZm9ybTFpKEkudV9waXRjaF93aXRoX21hcCxMKSxULnVuaWZvcm0yZnYoSS51X2V4dHJ1ZGVfc2NhbGUsTSksVC5hY3RpdmVUZXh0dXJlKFQuVEVYVFVSRTApLFQudW5pZm9ybTFpKEkudV90ZXh0dXJlLDApLHMpe3ZhciBEPWYmJnQuZ2x5cGhTb3VyY2UuZ2V0R2x5cGhBdGxhcyhmKTtpZighRClyZXR1cm47RC51cGRhdGVUZXh0dXJlKFQpLFQudW5pZm9ybTJmKEkudV90ZXhzaXplLEQud2lkdGgvNCxELmhlaWdodC80KX1lbHNle3ZhciBQPXQub3B0aW9ucy5yb3RhdGluZ3x8dC5vcHRpb25zLnpvb21pbmcsTz0xIT09enx8by5kZXZpY2VQaXhlbFJhdGlvIT09dC5zcHJpdGVBdGxhcy5waXhlbFJhdGlvfHxjLFI9THx8dC50cmFuc2Zvcm0ucGl0Y2g7dC5zcHJpdGVBdGxhcy5iaW5kKFQsdXx8UHx8T3x8UiksVC51bmlmb3JtMmYoSS51X3RleHNpemUsdC5zcHJpdGVBdGxhcy53aWR0aC80LHQuc3ByaXRlQXRsYXMuaGVpZ2h0LzQpfXZhciBGPU1hdGgubG9nKGcvaCkvTWF0aC5MTjJ8fDA7VC51bmlmb3JtMWYoSS51X3pvb20sMTAqKHQudHJhbnNmb3JtLnpvb20tRikpLFQuYWN0aXZlVGV4dHVyZShULlRFWFRVUkUxKSx0LmZyYW1lSGlzdG9yeS5iaW5kKFQpLFQudW5pZm9ybTFpKEkudV9mYWRldGV4dHVyZSwxKTt2YXIgajtpZih1KXt2YXIgTj0uMTA1KkMvZy9vLmRldmljZVBpeGVsUmF0aW87aWYoeSl7ClQudW5pZm9ybTFmKEkudV9nYW1tYSwoMS4xOSp4L3ovOCtOKSpBKSxULnVuaWZvcm00ZnYoSS51X2NvbG9yLGIpLFQudW5pZm9ybTFmKEkudV9vcGFjaXR5LF8pLFQudW5pZm9ybTFmKEkudV9idWZmZXIsKDYteS96KS84KTtmb3IodmFyIEI9MDtCPGEubGVuZ3RoO0IrKylqPWFbQl0sai52YW9zW2UuaWRdLmJpbmQoVCxJLGoubGF5b3V0VmVydGV4QnVmZmVyLGouZWxlbWVudEJ1ZmZlciksVC5kcmF3RWxlbWVudHMoVC5UUklBTkdMRVMsMypqLmVsZW1lbnRCdWZmZXIubGVuZ3RoLFQuVU5TSUdORURfU0hPUlQsMCl9VC51bmlmb3JtMWYoSS51X2dhbW1hLE4qQSksVC51bmlmb3JtNGZ2KEkudV9jb2xvcix3KSxULnVuaWZvcm0xZihJLnVfb3BhY2l0eSxfKSxULnVuaWZvcm0xZihJLnVfYnVmZmVyLC43NSksVC51bmlmb3JtMWYoSS51X3BpdGNoLFMucGl0Y2gvMzYwKjIqTWF0aC5QSSksVC51bmlmb3JtMWYoSS51X2JlYXJpbmcsUy5iZWFyaW5nLzM2MCoyKk1hdGguUEkpLFQudW5pZm9ybTFmKEkudV9hc3BlY3RfcmF0aW8sUy53aWR0aC9TLmhlaWdodCk7Zm9yKHZhciBVPTA7VTxhLmxlbmd0aDtVKyspaj1hW1VdLGoudmFvc1tlLmlkXS5iaW5kKFQsSSxqLmxheW91dFZlcnRleEJ1ZmZlcixqLmVsZW1lbnRCdWZmZXIpLFQuZHJhd0VsZW1lbnRzKFQuVFJJQU5HTEVTLDMqai5lbGVtZW50QnVmZmVyLmxlbmd0aCxULlVOU0lHTkVEX1NIT1JULDApfWVsc2V7VC51bmlmb3JtMWYoSS51X29wYWNpdHksXyk7Zm9yKHZhciBWPTA7VjxhLmxlbmd0aDtWKyspaj1hW1ZdLGoudmFvc1tlLmlkXS5iaW5kKFQsSSxqLmxheW91dFZlcnRleEJ1ZmZlcixqLmVsZW1lbnRCdWZmZXIpLFQuZHJhd0VsZW1lbnRzKFQuVFJJQU5HTEVTLDMqai5lbGVtZW50QnVmZmVyLmxlbmd0aCxULlVOU0lHTkVEX1NIT1JULDApfX19dmFyIG89dCgiLi4vdXRpbC9icm93c2VyIikscz10KCIuL2RyYXdfY29sbGlzaW9uX2RlYnVnIiksbD10KCIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiKTtlLmV4cG9ydHM9bn0seyIuLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMiOjM2MSwiLi4vdXRpbC9icm93c2VyIjo0MjQsIi4vZHJhd19jb2xsaXNpb25fZGVidWciOjM0NX1dLDM1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy5jaGFuZ2VUaW1lcz1uZXcgRmxvYXQ2NEFycmF5KDI1NiksdGhpcy5jaGFuZ2VPcGFjaXRpZXM9bmV3IFVpbnQ4QXJyYXkoMjU2KSx0aGlzLm9wYWNpdGllcz1uZXcgVWludDhDbGFtcGVkQXJyYXkoMjU2KSx0aGlzLmFycmF5PW5ldyBVaW50OEFycmF5KHRoaXMub3BhY2l0aWVzLmJ1ZmZlciksdGhpcy5mYWRlRHVyYXRpb249MzAwLHRoaXMucHJldmlvdXNab29tPTAsdGhpcy5maXJzdEZyYW1lPSEwfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnJlY29yZD1mdW5jdGlvbih0KXt2YXIgZT1EYXRlLm5vdygpO3RoaXMuZmlyc3RGcmFtZSYmKGU9MCx0aGlzLmZpcnN0RnJhbWU9ITEpLHQ9TWF0aC5mbG9vcigxMCp0KTt2YXIgcjtpZih0PHRoaXMucHJldmlvdXNab29tKWZvcihyPXQrMTtyPD10aGlzLnByZXZpb3VzWm9vbTtyKyspdGhpcy5jaGFuZ2VUaW1lc1tyXT1lLHRoaXMuY2hhbmdlT3BhY2l0aWVzW3JdPXRoaXMub3BhY2l0aWVzW3JdO2Vsc2UgZm9yKHI9dDtyPnRoaXMucHJldmlvdXNab29tO3ItLSl0aGlzLmNoYW5nZVRpbWVzW3JdPWUsdGhpcy5jaGFuZ2VPcGFjaXRpZXNbcl09dGhpcy5vcGFjaXRpZXNbcl07Zm9yKHI9MDtyPDI1NjtyKyspe3ZhciBuPWUtdGhpcy5jaGFuZ2VUaW1lc1tyXSxpPW4vdGhpcy5mYWRlRHVyYXRpb24qMjU1O3RoaXMub3BhY2l0aWVzW3JdPXI8PXQ/dGhpcy5jaGFuZ2VPcGFjaXRpZXNbcl0raTp0aGlzLmNoYW5nZU9wYWNpdGllc1tyXS1pfXRoaXMuY2hhbmdlZD0hMCx0aGlzLnByZXZpb3VzWm9vbT10fSxuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3RoaXMudGV4dHVyZT8odC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmNoYW5nZWQmJih0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELDAsMCwwLDI1NiwxLHQuQUxQSEEsdC5VTlNJR05FRF9CWVRFLHRoaXMuYXJyYXkpLHRoaXMuY2hhbmdlZD0hMSkpOih0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfTUFHX0ZJTFRFUix0Lk5FQVJFU1QpLHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LkFMUEhBLDI1NiwxLDAsdC5BTFBIQSx0LlVOU0lHTkVEX0JZVEUsdGhpcy5hcnJheSkpfX0se31dLDM1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5uZXh0Um93PTAsdGhpcy5ieXRlcz00LHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KnRoaXMuYnl0ZXMpLHRoaXMucG9zaXRpb25zPXt9fXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNldFNwcml0ZT1mdW5jdGlvbih0KXt0aGlzLnNwcml0ZT10fSxuLnByb3RvdHlwZS5nZXREYXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5qb2luKCIsIikrZTtyZXR1cm4gdGhpcy5wb3NpdGlvbnNbcl18fCh0aGlzLnBvc2l0aW9uc1tyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5wb3NpdGlvbnNbcl19LG4ucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24odCxlKXt2YXIgcj1lPzc6MCxuPTIqcisxO2lmKHRoaXMubmV4dFJvdytuPnRoaXMuaGVpZ2h0KXJldHVybiBpLndhcm5PbmNlKCJMaW5lQXRsYXMgb3V0IG9mIHNwYWNlIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzx0Lmxlbmd0aDtvKyspYSs9dFtvXTtmb3IodmFyIHM9dGhpcy53aWR0aC9hLGw9cy8yLHU9dC5sZW5ndGglMj09MSxjPS1yO2M8PXI7YysrKWZvcih2YXIgaD10aGlzLm5leHRSb3crcitjLGY9dGhpcy53aWR0aCpoLGQ9dT8tdFt0Lmxlbmd0aC0xXTowLHA9dFswXSxtPTEsdj0wO3Y8dGhpcy53aWR0aDt2Kyspe2Zvcig7cDx2L3M7KWQ9cCxwKz10W21dLHUmJm09PT10Lmxlbmd0aC0xJiYocCs9dFswXSksbSsrO3ZhciBnLHk9TWF0aC5hYnModi1kKnMpLGI9TWF0aC5hYnModi1wKnMpLHg9TWF0aC5taW4oeSxiKSxfPW0lMj09MTtpZihlKXt2YXIgdz1yP2MvcioobCsxKTowO2lmKF8pe3ZhciBNPWwtTWF0aC5hYnModyk7Zz1NYXRoLnNxcnQoeCp4K00qTSl9ZWxzZSBnPWwtTWF0aC5zcXJ0KHgqeCt3KncpfWVsc2UgZz0oXz8xOi0xKSp4O3RoaXMuZGF0YVszKzQqKGYrdildPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LGcrMTI4KSl9dmFyIGs9e3k6KHRoaXMubmV4dFJvdytyKy41KS90aGlzLmhlaWdodCxoZWlnaHQ6MipyL3RoaXMuaGVpZ2h0LHdpZHRoOmF9O3JldHVybiB0aGlzLm5leHRSb3crPW4sdGhpcy5kaXJ0eT0hMCxrfSxuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKHQpe3RoaXMudGV4dHVyZT8odC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsdC5SR0JBLHQuVU5TSUdORURfQllURSx0aGlzLmRhdGEpKSk6KHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LlJFUEVBVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuUkVQRUFUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLHQuTElORUFSKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTElORUFSKSx0LnRleEltYWdlMkQodC5URVhUVVJFXzJELDAsdC5SR0JBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfX0seyIuLi91dGlsL3V0aWwiOjQ0MH1dLDM1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5nbD10LHRoaXMudHJhbnNmb3JtPWUsdGhpcy5yZXVzYWJsZVRleHR1cmVzPXt9LHRoaXMucHJlRmJvcz17fSx0aGlzLmZyYW1lSGlzdG9yeT1uZXcgbyx0aGlzLnNldHVwKCksdGhpcy5udW1TdWJsYXllcnM9cy5tYXhVbmRlcnpvb21pbmcrcy5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5saW5lV2lkdGhSYW5nZT10LmdldFBhcmFtZXRlcih0LkFMSUFTRURfTElORV9XSURUSF9SQU5HRSl9dmFyIGk9dCgiLi4vdXRpbC9icm93c2VyIiksYT10KCJnbC1tYXRyaXgiKS5tYXQ0LG89dCgiLi9mcmFtZV9oaXN0b3J5Iikscz10KCIuLi9zb3VyY2Uvc291cmNlX2NhY2hlIiksbD10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCx1PXQoIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyIpLGM9dCgiLi4vdXRpbC91dGlsIiksaD10KCIuLi91dGlsL3N0cnVjdF9hcnJheSIpLGY9dCgiLi4vZGF0YS9idWZmZXIiKSxkPXQoIi4vdmVydGV4X2FycmF5X29iamVjdCIpLHA9dCgiLi9kcmF3X3Jhc3RlciIpLlJhc3RlckJvdW5kc0FycmF5LG09dCgiLi9jcmVhdGVfdW5pZm9ybV9wcmFnbWFzIik7ZS5leHBvcnRzPW4sYy5leHRlbmQobi5wcm90b3R5cGUsdCgiLi9wYWludGVyL3VzZV9wcm9ncmFtIikpLG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2w7dGhpcy53aWR0aD10KmkuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmhlaWdodD1lKmkuZGV2aWNlUGl4ZWxSYXRpbyxyLnZpZXdwb3J0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sbi5wcm90b3R5cGUuc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QudmVyYm9zZT0hMCx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHQuZW5hYmxlKHQuU1RFTkNJTF9URVNUKSx0LmVuYWJsZSh0LkRFUFRIX1RFU1QpLHQuZGVwdGhGdW5jKHQuTEVRVUFMKSx0aGlzLl9kZXB0aE1hc2s9ITEsdC5kZXB0aE1hc2soITEpO3ZhciBlPXRoaXMuUG9zQXJyYXk9bmV3IGgoe21lbWJlcnM6W3tuYW1lOiJhX3BvcyIsdHlwZToiSW50MTYiLGNvbXBvbmVudHM6Mn1dfSkscj1uZXcgZTtyLmVtcGxhY2VCYWNrKDAsMCksci5lbXBsYWNlQmFjayhsLDApLHIuZW1wbGFjZUJhY2soMCxsKSxyLmVtcGxhY2VCYWNrKGwsbCksdGhpcy50aWxlRXh0ZW50QnVmZmVyPW5ldyBmKHIuc2VyaWFsaXplKCksZS5zZXJpYWxpemUoKSxmLkJ1ZmZlclR5cGUuVkVSVEVYKSx0aGlzLnRpbGVFeHRlbnRWQU89bmV3IGQsdGhpcy50aWxlRXh0ZW50UGF0dGVyblZBTz1uZXcgZDt2YXIgbj1uZXcgZTtuLmVtcGxhY2VCYWNrKDAsMCksbi5lbXBsYWNlQmFjayhsLDApLG4uZW1wbGFjZUJhY2sobCxsKSxuLmVtcGxhY2VCYWNrKDAsbCksbi5lbXBsYWNlQmFjaygwLDApLHRoaXMuZGVidWdCdWZmZXI9bmV3IGYobi5zZXJpYWxpemUoKSxlLnNlcmlhbGl6ZSgpLGYuQnVmZmVyVHlwZS5WRVJURVgpLHRoaXMuZGVidWdWQU89bmV3IGQ7dmFyIGk9bmV3IHA7aS5lbXBsYWNlQmFjaygwLDAsMCwwKSxpLmVtcGxhY2VCYWNrKGwsMCwzMjc2NywwKSxpLmVtcGxhY2VCYWNrKDAsbCwwLDMyNzY3KSxpLmVtcGxhY2VCYWNrKGwsbCwzMjc2NywzMjc2NyksdGhpcy5yYXN0ZXJCb3VuZHNCdWZmZXI9bmV3IGYoaS5zZXJpYWxpemUoKSxwLnNlcmlhbGl6ZSgpLGYuQnVmZmVyVHlwZS5WRVJURVgpLHRoaXMucmFzdGVyQm91bmRzVkFPPW5ldyBkfSxuLnByb3RvdHlwZS5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDt0LmNsZWFyQ29sb3IoMCwwLDAsMCksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVQpfSxuLnByb3RvdHlwZS5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QuY2xlYXJTdGVuY2lsKDApLHQuc3RlbmNpbE1hc2soMjU1KSx0LmNsZWFyKHQuU1RFTkNJTF9CVUZGRVJfQklUKX0sbi5wcm90b3R5cGUuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dC5jbGVhckRlcHRoKDEpLHRoaXMuZGVwdGhNYXNrKCEwKSx0LmNsZWFyKHQuREVQVEhfQlVGRkVSX0JJVCl9LG4ucHJvdG90eXBlLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO2UuY29sb3JNYXNrKCExLCExLCExLCExKSx0aGlzLmRlcHRoTWFzayghMSksZS5kaXNhYmxlKGUuREVQVEhfVEVTVCksZS5lbmFibGUoZS5TVEVOQ0lMX1RFU1QpLGUuc3RlbmNpbE1hc2soMjQ4KSxlLnN0ZW5jaWxPcChlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSk7dmFyIHI9MTt0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzPXt9O2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLGE9dGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1tpLmlkXT1yKys8PDM7ZS5zdGVuY2lsRnVuYyhlLkFMV0FZUyxhLDI0OCk7dmFyIG89bShbe25hbWU6InVfY29sb3IiLGNvbXBvbmVudHM6NH0se25hbWU6InVfb3BhY2l0eSIsY29tcG9uZW50czoxfV0pLHM9dGhpcy51c2VQcm9ncmFtKCJmaWxsIixbXSxvLG8pO2UudW5pZm9ybU1hdHJpeDRmdihzLnVfbWF0cml4LCExLGkucG9zTWF0cml4KSx0aGlzLnRpbGVFeHRlbnRWQU8uYmluZChlLHMsdGhpcy50aWxlRXh0ZW50QnVmZmVyKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRV9TVFJJUCwwLHRoaXMudGlsZUV4dGVudEJ1ZmZlci5sZW5ndGgpfWUuc3RlbmNpbE1hc2soMCksZS5jb2xvck1hc2soITAsITAsITAsITApLHRoaXMuZGVwdGhNYXNrKCEwKSxlLmVuYWJsZShlLkRFUFRIX1RFU1QpfSxuLnByb3RvdHlwZS5lbmFibGVUaWxlQ2xpcHBpbmdNYXNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2w7ZS5zdGVuY2lsRnVuYyhlLkVRVUFMLHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdC5pZF0sMjQ4KX0sbi5wcm90b3R5cGUucHJlcGFyZUJ1ZmZlcnM9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmJpbmREZWZhdWx0RnJhbWVidWZmZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QuYmluZEZyYW1lYnVmZmVyKHQuRlJBTUVCVUZGRVIsbnVsbCl9O3ZhciB2PXtzeW1ib2w6dCgiLi9kcmF3X3N5bWJvbCIpLGNpcmNsZTp0KCIuL2RyYXdfY2lyY2xlIiksbGluZTp0KCIuL2RyYXdfbGluZSIpLGZpbGw6dCgiLi9kcmF3X2ZpbGwiKSxyYXN0ZXI6dCgiLi9kcmF3X3Jhc3RlciIpLGJhY2tncm91bmQ6dCgiLi9kcmF3X2JhY2tncm91bmQiKSxkZWJ1Zzp0KCIuL2RyYXdfZGVidWciKX07bi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdHlsZT10LHRoaXMub3B0aW9ucz1lLHRoaXMubGluZUF0bGFzPXQubGluZUF0bGFzLHRoaXMuc3ByaXRlQXRsYXM9dC5zcHJpdGVBdGxhcyx0aGlzLnNwcml0ZUF0bGFzLnNldFNwcml0ZSh0LnNwcml0ZSksdGhpcy5nbHlwaFNvdXJjZT10LmdseXBoU291cmNlLHRoaXMuZnJhbWVIaXN0b3J5LnJlY29yZCh0aGlzLnRyYW5zZm9ybS56b29tKSx0aGlzLnByZXBhcmVCdWZmZXJzKCksdGhpcy5jbGVhckNvbG9yKCksdGhpcy5jbGVhckRlcHRoKCksdGhpcy5zaG93T3ZlcmRyYXdJbnNwZWN0b3IoZS5zaG93T3ZlcmRyYXdJbnNwZWN0b3IpLHRoaXMuZGVwdGhSYW5nZT0odC5fb3JkZXIubGVuZ3RoKzIpKnRoaXMubnVtU3VibGF5ZXJzKnRoaXMuZGVwdGhFcHNpbG9uLHRoaXMucmVuZGVyUGFzcyh7aXNPcGFxdWVQYXNzOiEwfSksdGhpcy5yZW5kZXJQYXNzKHtpc09wYXF1ZVBhc3M6ITF9KX0sbi5wcm90b3R5cGUucmVuZGVyUGFzcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN0eWxlLl9ncm91cHMscj10LmlzT3BhcXVlUGFzczt0aGlzLmN1cnJlbnRMYXllcj1yP3RoaXMuc3R5bGUuX29yZGVyLmxlbmd0aDotMTtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGksYT1lW3I/ZS5sZW5ndGgtMS1uOm5dLG89dGhpcy5zdHlsZS5zb3VyY2VzW2Euc291cmNlXSxzPVtdO2lmKG8pe2ZvcihzPW8uZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCksaT0wO2k8cy5sZW5ndGg7aSsrKXNbaV0ucG9zTWF0cml4PXRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChzW2ldLG8ubWF4em9vbSk7dGhpcy5jbGVhclN0ZW5jaWwoKSxvLnByZXBhcmUmJm8ucHJlcGFyZSgpLG8uaXNUaWxlQ2xpcHBlZCYmdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3Mocyl9Zm9yKHI/KHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcnx8dGhpcy5nbC5kaXNhYmxlKHRoaXMuZ2wuQkxFTkQpLHRoaXMuaXNPcGFxdWVQYXNzPSEwKToodGhpcy5nbC5lbmFibGUodGhpcy5nbC5CTEVORCksdGhpcy5pc09wYXF1ZVBhc3M9ITEscy5yZXZlcnNlKCkpLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIGw9YVtyP2EubGVuZ3RoLTEtaTppXTt0aGlzLmN1cnJlbnRMYXllcis9cj8tMToxLHRoaXMucmVuZGVyTGF5ZXIodGhpcyxvLGwscyl9byYmdi5kZWJ1Zyh0aGlzLG8scyl9fSxuLnByb3RvdHlwZS5kZXB0aE1hc2s9ZnVuY3Rpb24odCl7dCE9PXRoaXMuX2RlcHRoTWFzayYmKHRoaXMuX2RlcHRoTWFzaz10LHRoaXMuZ2wuZGVwdGhNYXNrKHQpKX0sbi5wcm90b3R5cGUucmVuZGVyTGF5ZXI9ZnVuY3Rpb24odCxlLHIsbil7ci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKXx8KCJiYWNrZ3JvdW5kIj09PXIudHlwZXx8bi5sZW5ndGgpJiYodGhpcy5pZD1yLmlkLHZbci50eXBlXSh0LGUscixuKSl9LG4ucHJvdG90eXBlLnNldERlcHRoU3VibGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9MS0oKDErdGhpcy5jdXJyZW50TGF5ZXIpKnRoaXMubnVtU3VibGF5ZXJzK3QpKnRoaXMuZGVwdGhFcHNpbG9uLHI9ZS0xK3RoaXMuZGVwdGhSYW5nZTt0aGlzLmdsLmRlcHRoUmFuZ2UocixlKX0sbi5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFyWzBdJiYhclsxXSlyZXR1cm4gdDtpZigidmlld3BvcnQiPT09bil7dmFyIGk9TWF0aC5zaW4oLXRoaXMudHJhbnNmb3JtLmFuZ2xlKSxvPU1hdGguY29zKC10aGlzLnRyYW5zZm9ybS5hbmdsZSk7cj1bclswXSpvLXJbMV0qaSxyWzBdKmkrclsxXSpvXX12YXIgcz1bdShlLHJbMF0sdGhpcy50cmFuc2Zvcm0uem9vbSksdShlLHJbMV0sdGhpcy50cmFuc2Zvcm0uem9vbSksMF0sbD1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gYS50cmFuc2xhdGUobCx0LHMpLGx9LG4ucHJvdG90eXBlLnNhdmVUZXh0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmV1c2FibGVUZXh0dXJlc1t0LnNpemVdO2U/ZS5wdXNoKHQpOnRoaXMucmV1c2FibGVUZXh0dXJlc1t0LnNpemVdPVt0XX0sbi5wcm90b3R5cGUuZ2V0VGV4dHVyZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJldXNhYmxlVGV4dHVyZXNbdF07cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZS5wb3AoKTpudWxsfSxuLnByb3RvdHlwZS5saW5lV2lkdGg9ZnVuY3Rpb24odCl7dGhpcy5nbC5saW5lV2lkdGgoYy5jbGFtcCh0LHRoaXMubGluZVdpZHRoUmFuZ2VbMF0sdGhpcy5saW5lV2lkdGhSYW5nZVsxXSkpfSxuLnByb3RvdHlwZS5zaG93T3ZlcmRyYXdJbnNwZWN0b3I9ZnVuY3Rpb24odCl7aWYodHx8dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yKXt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3I9dDt2YXIgZT10aGlzLmdsO2lmKHQpe2UuYmxlbmRGdW5jKGUuQ09OU1RBTlRfQ09MT1IsZS5PTkUpO2UuYmxlbmRDb2xvcigxLzgsMS84LDEvOCwwKSxlLmNsZWFyQ29sb3IoMCwwLDAsMSksZS5jbGVhcihlLkNPTE9SX0JVRkZFUl9CSVQpfWVsc2UgZS5ibGVuZEZ1bmMoZS5PTkUsZS5PTkVfTUlOVVNfU1JDX0FMUEhBKX19fSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2RhdGEvYnVmZmVyIjozMzIsIi4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyI6MzYxLCIuLi9zb3VyY2Uvc291cmNlX2NhY2hlIjozNjUsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL3N0cnVjdF9hcnJheSI6NDM4LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9jcmVhdGVfdW5pZm9ybV9wcmFnbWFzIjozNDIsIi4vZHJhd19iYWNrZ3JvdW5kIjozNDMsIi4vZHJhd19jaXJjbGUiOjM0NCwiLi9kcmF3X2RlYnVnIjozNDYsIi4vZHJhd19maWxsIjozNDcsIi4vZHJhd19saW5lIjozNDgsIi4vZHJhd19yYXN0ZXIiOjM0OSwiLi9kcmF3X3N5bWJvbCI6MzUwLCIuL2ZyYW1lX2hpc3RvcnkiOjM1MSwiLi9wYWludGVyL3VzZV9wcm9ncmFtIjozNTQsIi4vdmVydGV4X2FycmF5X29iamVjdCI6MzU1LCJnbC1tYXRyaXgiOjE5MX1dLDM1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQucmVwbGFjZSgvI3ByYWdtYSBtYXBib3g6IChbXHddKykgKFtcd10rKSAoW1x3XSspIChbXHddKykvZyxmdW5jdGlvbih0LHIsbixpLGEpe3JldHVybiBlW3JdW2FdLnJlcGxhY2UoL3t0eXBlfS9nLGkpLnJlcGxhY2UoL3twcmVjaXNpb259L2csbil9KX12YXIgaT10KCJhc3NlcnQiKSxhPXQoIi4uLy4uL3V0aWwvdXRpbCIpLG89dCgibWFwYm94LWdsLXNoYWRlcnMiKSxzPW8udXRpbDtlLmV4cG9ydHMuX2NyZWF0ZVByb2dyYW09ZnVuY3Rpb24odCxlLHIsbCl7Zm9yKHZhciB1PXRoaXMuZ2wsYz11LmNyZWF0ZVByb2dyYW0oKSxoPW9bdF0sZj0iI2RlZmluZSBNQVBCT1hfR0xfSlM7XG4iLGQ9MDtkPGUubGVuZ3RoO2QrKylmKz0iI2RlZmluZSAiK2VbZF0rIjtcbiI7dmFyIHA9dS5jcmVhdGVTaGFkZXIodS5GUkFHTUVOVF9TSEFERVIpO3Uuc2hhZGVyU291cmNlKHAsbihmK2guZnJhZ21lbnRTb3VyY2UsbCkpLHUuY29tcGlsZVNoYWRlcihwKSxpKHUuZ2V0U2hhZGVyUGFyYW1ldGVyKHAsdS5DT01QSUxFX1NUQVRVUyksdS5nZXRTaGFkZXJJbmZvTG9nKHApKSx1LmF0dGFjaFNoYWRlcihjLHApO3ZhciBtPXUuY3JlYXRlU2hhZGVyKHUuVkVSVEVYX1NIQURFUik7dS5zaGFkZXJTb3VyY2UobSxuKGYrcytoLnZlcnRleFNvdXJjZSxyKSksdS5jb21waWxlU2hhZGVyKG0pLGkodS5nZXRTaGFkZXJQYXJhbWV0ZXIobSx1LkNPTVBJTEVfU1RBVFVTKSx1LmdldFNoYWRlckluZm9Mb2cobSkpLHUuYXR0YWNoU2hhZGVyKGMsbSksdS5saW5rUHJvZ3JhbShjKSxpKHUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihjLHUuTElOS19TVEFUVVMpLHUuZ2V0UHJvZ3JhbUluZm9Mb2coYykpO2Zvcih2YXIgdj17fSxnPXUuZ2V0UHJvZ3JhbVBhcmFtZXRlcihjLHUuQUNUSVZFX0FUVFJJQlVURVMpLHk9MDt5PGc7eSsrKXt2YXIgYj11LmdldEFjdGl2ZUF0dHJpYihjLHkpO3ZbYi5uYW1lXT11LmdldEF0dHJpYkxvY2F0aW9uKGMsYi5uYW1lKX1mb3IodmFyIHg9e30sXz11LmdldFByb2dyYW1QYXJhbWV0ZXIoYyx1LkFDVElWRV9VTklGT1JNUyksdz0wO3c8Xzt3Kyspe3ZhciBNPXUuZ2V0QWN0aXZlVW5pZm9ybShjLHcpO3hbTS5uYW1lXT11LmdldFVuaWZvcm1Mb2NhdGlvbihjLE0ubmFtZSl9cmV0dXJuIGEuZXh0ZW5kKHtwcm9ncmFtOmMsZGVmaW5pdGlvbjpoLGF0dHJpYnV0ZXM6dixudW1BdHRyaWJ1dGVzOmd9LHYseCl9LGUuZXhwb3J0cy5fY3JlYXRlUHJvZ3JhbUNhY2hlZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNhY2hlPXRoaXMuY2FjaGV8fHt9O3ZhciBpPUpTT04uc3RyaW5naWZ5KHtuYW1lOnQsZGVmaW5lczplLHZlcnRleFByYWdtYXM6cixmcmFnbWVudFByYWdtYXM6bn0pO3JldHVybiB0aGlzLmNhY2hlW2ldfHwodGhpcy5jYWNoZVtpXT10aGlzLl9jcmVhdGVQcm9ncmFtKHQsZSxyLG4pKSx0aGlzLmNhY2hlW2ldfSxlLmV4cG9ydHMudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmdsO2U9ZXx8W10sdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yJiYoZT1lLmNvbmNhdCgiT1ZFUkRSQVdfSU5TUEVDVE9SIikpO3ZhciBhPXRoaXMuX2NyZWF0ZVByb2dyYW1DYWNoZWQodCxlLHIsbik7cmV0dXJuIHRoaXMuY3VycmVudFByb2dyYW0hPT1hJiYoaS51c2VQcm9ncmFtKGEucHJvZ3JhbSksdGhpcy5jdXJyZW50UHJvZ3JhbT1hKSxhfX0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCxhc3NlcnQ6NDUsIm1hcGJveC1nbC1zaGFkZXJzIjozMDF9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuYm91bmRQcm9ncmFtPW51bGwsdGhpcy5ib3VuZFZlcnRleEJ1ZmZlcj1udWxsLHRoaXMuYm91bmRWZXJ0ZXhCdWZmZXIyPW51bGwsdGhpcy5ib3VuZEVsZW1lbnRCdWZmZXI9bnVsbCx0aGlzLnZhbz1udWxsfXZhciBpPXQoImFzc2VydCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2b2lkIDA9PT10LmV4dFZlcnRleEFycmF5T2JqZWN0JiYodC5leHRWZXJ0ZXhBcnJheU9iamVjdD10LmdldEV4dGVuc2lvbigiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSk7dmFyIGE9IXRoaXMudmFvfHx0aGlzLmJvdW5kUHJvZ3JhbSE9PWV8fHRoaXMuYm91bmRWZXJ0ZXhCdWZmZXIhPT1yfHx0aGlzLmJvdW5kVmVydGV4QnVmZmVyMiE9PWl8fHRoaXMuYm91bmRFbGVtZW50QnVmZmVyIT09bjshdC5leHRWZXJ0ZXhBcnJheU9iamVjdHx8YT90aGlzLmZyZXNoQmluZCh0LGUscixuLGkpOnQuZXh0VmVydGV4QXJyYXlPYmplY3QuYmluZFZlcnRleEFycmF5T0VTKHRoaXMudmFvKX0sbi5wcm90b3R5cGUuZnJlc2hCaW5kPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG8scz1lLm51bUF0dHJpYnV0ZXM7aWYodC5leHRWZXJ0ZXhBcnJheU9iamVjdCl0aGlzLnZhbyYmdGhpcy5kZXN0cm95KHQpLHRoaXMudmFvPXQuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSx0LmV4dFZlcnRleEFycmF5T2JqZWN0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksbz0wLHRoaXMuYm91bmRQcm9ncmFtPWUsdGhpcy5ib3VuZFZlcnRleEJ1ZmZlcj1yLHRoaXMuYm91bmRWZXJ0ZXhCdWZmZXIyPWEsdGhpcy5ib3VuZEVsZW1lbnRCdWZmZXI9bjtlbHNle289dC5jdXJyZW50TnVtQXR0cmlidXRlc3x8MDtmb3IodmFyIGw9cztsPG87bCsrKWkoMCE9PWwpLHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGwpfWZvcih2YXIgdT1vO3U8czt1KyspdC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1KTtyLmJpbmQodCksci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh0LGUpLGEmJihhLmJpbmQodCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh0LGUpKSxuJiZuLmJpbmQodCksdC5jdXJyZW50TnVtQXR0cmlidXRlcz1zfSxuLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5leHRWZXJ0ZXhBcnJheU9iamVjdDtlJiZlLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKX0sbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbih0KXt2YXIgZT10LmV4dFZlcnRleEFycmF5T2JqZWN0O2UmJnRoaXMudmFvJiYoZS5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyksdGhpcy52YW89bnVsbCl9fSx7YXNzZXJ0OjQ1fV0sMzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2U9ZXx8e30sdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1yLHRoaXMuX2RhdGE9ZS5kYXRhLHZvaWQgMCE9PWUubWF4em9vbSYmKHRoaXMubWF4em9vbT1lLm1heHpvb20pLGUudHlwZSYmKHRoaXMudHlwZT1lLnR5cGUpO3ZhciBuPXMvdGhpcy50aWxlU2l6ZTt0aGlzLndvcmtlck9wdGlvbnM9YS5leHRlbmQoe3NvdXJjZTp0aGlzLmlkLGNsdXN0ZXI6ZS5jbHVzdGVyfHwhMSxnZW9qc29uVnRPcHRpb25zOntidWZmZXI6KHZvaWQgMCE9PWUuYnVmZmVyP2UuYnVmZmVyOjEyOCkqbix0b2xlcmFuY2U6KHZvaWQgMCE9PWUudG9sZXJhbmNlP2UudG9sZXJhbmNlOi4zNzUpKm4sZXh0ZW50OnMsbWF4Wm9vbTp0aGlzLm1heHpvb219LHN1cGVyY2x1c3Rlck9wdGlvbnM6e21heFpvb206TWF0aC5taW4oZS5jbHVzdGVyTWF4Wm9vbSx0aGlzLm1heHpvb20tMSl8fHRoaXMubWF4em9vbS0xLGV4dGVudDpzLHJhZGl1czooZS5jbHVzdGVyUmFkaXVzfHw1MCkqbixsb2c6ITF9fSxlLndvcmtlck9wdGlvbnMpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoZnVuY3Rpb24odCl7aWYodClyZXR1cm4gdm9pZCB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX12YXIgaT10KCIuLi91dGlsL2V2ZW50ZWQiKSxhPXQoIi4uL3V0aWwvdXRpbCIpLG89dCgicmVzb2x2ZS11cmwiKSxzPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5UO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWEuaW5oZXJpdChpLHt0eXBlOiJnZW9qc29uIixtaW56b29tOjAsbWF4em9vbToxOCx0aWxlU2l6ZTo1MTIsaXNUaWxlQ2xpcHBlZDohMCxyZXBhcnNlT3ZlcnNjYWxlZDohMCxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLm1hcD10fSxzZXREYXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kYXRhPXQsdGhpcy5fdXBkYXRlV29ya2VyRGF0YShmdW5jdGlvbih0KXtpZih0KXJldHVybiB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuZmlyZSgiY2hhbmdlIil9LmJpbmQodGhpcykpLHRoaXN9LF91cGRhdGVXb3JrZXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZXh0ZW5kKHt9LHRoaXMud29ya2VyT3B0aW9ucykscj10aGlzLl9kYXRhOyJzdHJpbmciPT10eXBlb2Ygcj9lLnVybD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz9vKHdpbmRvdy5sb2NhdGlvbi5ocmVmLHIpOnI6ZS5kYXRhPUpTT04uc3RyaW5naWZ5KHIpLHRoaXMud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQodGhpcy50eXBlKyIubG9hZERhdGEiLGUsZnVuY3Rpb24oZSl7dGhpcy5fbG9hZGVkPSEwLHQoZSl9LmJpbmQodGhpcykpfSxsb2FkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciByPXQuY29vcmQuej50aGlzLm1heHpvb20/TWF0aC5wb3coMix0LmNvb3JkLnotdGhpcy5tYXh6b29tKToxLG49e3R5cGU6dGhpcy50eXBlLHVpZDp0LnVpZCxjb29yZDp0LmNvb3JkLHpvb206dC5jb29yZC56LG1heFpvb206dGhpcy5tYXh6b29tLHRpbGVTaXplOnRoaXMudGlsZVNpemUsc291cmNlOnRoaXMuaWQsb3ZlcnNjYWxpbmc6cixhbmdsZTp0aGlzLm1hcC50cmFuc2Zvcm0uYW5nbGUscGl0Y2g6dGhpcy5tYXAudHJhbnNmb3JtLnBpdGNoLHNob3dDb2xsaXNpb25Cb3hlczp0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXN9O3Qud29ya2VySUQ9dGhpcy5kaXNwYXRjaGVyLnNlbmQoImxvYWQgdGlsZSIsbixmdW5jdGlvbihyLG4pe2lmKHQudW5sb2FkVmVjdG9yRGF0YSh0aGlzLm1hcC5wYWludGVyKSwhdC5hYm9ydGVkKXJldHVybiByP2Uocik6KHQubG9hZFZlY3RvckRhdGEobix0aGlzLm1hcC5zdHlsZSksdC5yZWRvV2hlbkRvbmUmJih0LnJlZG9XaGVuRG9uZT0hMSx0LnJlZG9QbGFjZW1lbnQodGhpcykpLGUobnVsbCkpfS5iaW5kKHRoaXMpLHRoaXMud29ya2VySUQpfSxhYm9ydFRpbGU6ZnVuY3Rpb24odCl7dC5hYm9ydGVkPSEwfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSh0aGlzLm1hcC5wYWludGVyKSx0aGlzLmRpc3BhdGNoZXIuc2VuZCgicmVtb3ZlIHRpbGUiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9LGZ1bmN0aW9uKCl7fSx0LndvcmtlcklEKX0sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLGRhdGE6dGhpcy5fZGF0YX19fSl9LHsiLi4vZGF0YS9idWNrZXQiOjMyNywiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwLCJyZXNvbHZlLXVybCI6NDk5fV0sMzU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ImJih0aGlzLmxvYWRHZW9KU09OPXIpLGguY2FsbCh0aGlzLHQsZSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuLi91dGlsL2FqYXgiKSxvPXQoImdlb2pzb24tcmV3aW5kIikscz10KCIuL2dlb2pzb25fd3JhcHBlciIpLGw9dCgidnQtcGJmIiksdT10KCJzdXBlcmNsdXN0ZXIiKSxjPXQoImdlb2pzb24tdnQiKSxoPXQoIi4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChoLHtfZ2VvSlNPTkluZGV4ZXM6e30sbG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnNvdXJjZSxuPXQuY29vcmQ7aWYoIXRoaXMuX2dlb0pTT05JbmRleGVzW3JdKXJldHVybiBlKG51bGwsbnVsbCk7dmFyIGk9dGhpcy5fZ2VvSlNPTkluZGV4ZXNbcl0uZ2V0VGlsZShNYXRoLm1pbihuLnosdC5tYXhab29tKSxuLngsbi55KTtpZighaSlyZXR1cm4gZShudWxsLG51bGwpO3ZhciBhPW5ldyBzKGkuZmVhdHVyZXMpO2EubmFtZT0iX2dlb2pzb25UaWxlTGF5ZXIiO3ZhciBvPWwoe2xheWVyczp7X2dlb2pzb25UaWxlTGF5ZXI6YX19KTswPT09by5ieXRlT2Zmc2V0JiZvLmJ5dGVMZW5ndGg9PT1vLmJ1ZmZlci5ieXRlTGVuZ3RofHwobz1uZXcgVWludDhBcnJheShvKSksZShudWxsLHt0aWxlOmEscmF3VGlsZURhdGE6by5idWZmZXJ9KX0sbG9hZERhdGE6ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbihyLG4pe3JldHVybiByP2Uocik6Im9iamVjdCIhPXR5cGVvZiBuP2UobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKToobyhuLCEwKSx2b2lkIHRoaXMuX2luZGV4RGF0YShuLHQsZnVuY3Rpb24ocixuKXtpZihyKXJldHVybiBlKHIpO3RoaXMuX2dlb0pTT05JbmRleGVzW3Quc291cmNlXT1uLGUobnVsbCl9LmJpbmQodGhpcykpKX0uYmluZCh0aGlzKTt0aGlzLmxvYWRHZW9KU09OKHQscil9LGxvYWRHZW9KU09OOmZ1bmN0aW9uKHQsZSl7aWYodC51cmwpYS5nZXRKU09OKHQudXJsLGUpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiB0LmRhdGEpcmV0dXJuIGUobmV3IEVycm9yKCJJbnB1dCBkYXRhIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKTt0cnl7cmV0dXJuIGUobnVsbCxKU09OLnBhcnNlKHQuZGF0YSkpfWNhdGNoKHQpe3JldHVybiBlKG5ldyBFcnJvcigiSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4iKSl9fX0sX2luZGV4RGF0YTpmdW5jdGlvbih0LGUscil7dHJ5e2UuY2x1c3Rlcj9yKG51bGwsdShlLnN1cGVyY2x1c3Rlck9wdGlvbnMpLmxvYWQodC5mZWF0dXJlcykpOnIobnVsbCxjKHQsZS5nZW9qc29uVnRPcHRpb25zKSl9Y2F0Y2godCl7cmV0dXJuIHIodCl9fX0pfSx7Ii4uL3V0aWwvYWpheCI6NDIzLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9nZW9qc29uX3dyYXBwZXIiOjM1OCwiLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlIjozNjksImdlb2pzb24tcmV3aW5kIjoxMzYsImdlb2pzb24tdnQiOjE0MCxzdXBlcmNsdXN0ZXI6NTI3LCJ2dC1wYmYiOjU1NH1dLDM1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuZmVhdHVyZXM9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLmV4dGVudD1zfWZ1bmN0aW9uIGkodCl7aWYodGhpcy50eXBlPXQudHlwZSwxPT09dC50eXBlKXt0aGlzLnJhd0dlb21ldHJ5PVtdO2Zvcih2YXIgZT0wO2U8dC5nZW9tZXRyeS5sZW5ndGg7ZSsrKXRoaXMucmF3R2VvbWV0cnkucHVzaChbdC5nZW9tZXRyeVtlXV0pfWVsc2UgdGhpcy5yYXdHZW9tZXRyeT10Lmdlb21ldHJ5O3RoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9c312YXIgYT10KCJwb2ludC1nZW9tZXRyeSIpLG89dCgidmVjdG9yLXRpbGUiKS5WZWN0b3JUaWxlRmVhdHVyZSxzPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5UO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHRoaXMuZmVhdHVyZXNbdF0pfSxpLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe2Zvcih2YXIgcj10W2VdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW4ucHVzaChuZXcgYShyW2ldWzBdLHJbaV1bMV0pKTt0aGlzLmdlb21ldHJ5LnB1c2gobil9cmV0dXJuIHRoaXMuZ2VvbWV0cnl9LGkucHJvdG90eXBlLmJib3g9ZnVuY3Rpb24oKXt0aGlzLmdlb21ldHJ5fHx0aGlzLmxvYWRHZW9tZXRyeSgpO2Zvcih2YXIgdD10aGlzLmdlb21ldHJ5LGU9MS8wLHI9LTEvMCxuPTEvMCxpPS0xLzAsYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz10W2FdLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTtlPU1hdGgubWluKGUsbC54KSxyPU1hdGgubWF4KHIsbC54KSxuPU1hdGgubWluKG4sbC55KSxpPU1hdGgubWF4KGksbC55KX1yZXR1cm5bZSxuLHIsaV19LGkucHJvdG90eXBlLnRvR2VvSlNPTj1vLnByb3RvdHlwZS50b0dlb0pTT059LHsiLi4vZGF0YS9idWNrZXQiOjMyNywicG9pbnQtZ2VvbWV0cnkiOjQ4MiwidmVjdG9yLXRpbGUiOjU0OH1dLDM1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPXIsdGhpcy51cmw9ZS51cmwsdGhpcy5jb29yZGluYXRlcz1lLmNvb3JkaW5hdGVzLHUuZ2V0SW1hZ2UoZS51cmwsZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiB0aGlzLmZpcmUoImVycm9yIix7ZXJyb3I6dH0pO3RoaXMuaW1hZ2U9cix0aGlzLmltYWdlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7dGhpcy5tYXAuX3JlcmVuZGVyKCl9LmJpbmQodGhpcykpLHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUoImxvYWQiKSx0aGlzLm1hcCYmdGhpcy5zZXRDb29yZGluYXRlcyhlLmNvb3JkaW5hdGVzKX0uYmluZCh0aGlzKSl9dmFyIGk9dCgiLi4vdXRpbC91dGlsIiksYT10KCIuL3RpbGVfY29vcmQiKSxvPXQoIi4uL2dlby9sbmdfbGF0Iikscz10KCJwb2ludC1nZW9tZXRyeSIpLGw9dCgiLi4vdXRpbC9ldmVudGVkIiksdT10KCIuLi91dGlsL2FqYXgiKSxjPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULGg9dCgiLi4vcmVuZGVyL2RyYXdfcmFzdGVyIikuUmFzdGVyQm91bmRzQXJyYXksZj10KCIuLi9kYXRhL2J1ZmZlciIpLGQ9dCgiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT1pLmluaGVyaXQobCx7bWluem9vbTowLG1heHpvb206MjIsdGlsZVNpemU6NTEyLG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5pbWFnZSYmdGhpcy5zZXRDb29yZGluYXRlcyh0aGlzLmNvb3JkaW5hdGVzKX0sc2V0Q29vcmRpbmF0ZXM6ZnVuY3Rpb24odCl7dGhpcy5jb29yZGluYXRlcz10O3ZhciBlPXRoaXMubWFwLHI9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUudHJhbnNmb3JtLmxvY2F0aW9uQ29vcmRpbmF0ZShvLmNvbnZlcnQodCkpLnpvb21UbygwKX0pLG49dGhpcy5jZW50ZXJDb29yZD1pLmdldENvb3JkaW5hdGVzQ2VudGVyKHIpO3JldHVybiBuLmNvbHVtbj1NYXRoLnJvdW5kKG4uY29sdW1uKSxuLnJvdz1NYXRoLnJvdW5kKG4ucm93KSx0aGlzLm1pbnpvb209dGhpcy5tYXh6b29tPW4uem9vbSx0aGlzLl9jb29yZD1uZXcgYShuLnpvb20sbi5jb2x1bW4sbi5yb3cpLHRoaXMuX3RpbGVDb29yZHM9ci5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC56b29tVG8obi56b29tKTtyZXR1cm4gbmV3IHMoTWF0aC5yb3VuZCgoZS5jb2x1bW4tbi5jb2x1bW4pKmMpLE1hdGgucm91bmQoKGUucm93LW4ucm93KSpjKSl9KSx0aGlzLmZpcmUoImNoYW5nZSIpLHRoaXN9LF9zZXRUaWxlOmZ1bmN0aW9uKHQpe3RoaXMuX3ByZXBhcmVkPSExLHRoaXMudGlsZT10O3ZhciBlPW5ldyBoO2UuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1swXS54LHRoaXMuX3RpbGVDb29yZHNbMF0ueSwwLDApLGUuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1sxXS54LHRoaXMuX3RpbGVDb29yZHNbMV0ueSwzMjc2NywwKSxlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbM10ueCx0aGlzLl90aWxlQ29vcmRzWzNdLnksMCwzMjc2NyksZS5lbXBsYWNlQmFjayh0aGlzLl90aWxlQ29vcmRzWzJdLngsdGhpcy5fdGlsZUNvb3Jkc1syXS55LDMyNzY3LDMyNzY3KSx0aGlzLnRpbGUuYnVja2V0cz17fSx0aGlzLnRpbGUuYm91bmRzQnVmZmVyPW5ldyBmKGUuc2VyaWFsaXplKCksaC5zZXJpYWxpemUoKSxmLkJ1ZmZlclR5cGUuVkVSVEVYKSx0aGlzLnRpbGUuYm91bmRzVkFPPW5ldyBkLHRoaXMudGlsZS5zdGF0ZT0ibG9hZGVkIn0scHJlcGFyZTpmdW5jdGlvbigpe2lmKHRoaXMuX2xvYWRlZCYmdGhpcy5pbWFnZSYmdGhpcy5pbWFnZS5jb21wbGV0ZSYmdGhpcy50aWxlKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLGU9dC5nbDt0aGlzLl9wcmVwYXJlZD8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50aWxlLnRleHR1cmUpLGUudGV4U3ViSW1hZ2UyRChlLlRFWFRVUkVfMkQsMCwwLDAsZS5SR0JBLGUuVU5TSUdORURfQllURSx0aGlzLmltYWdlKSk6KHRoaXMudGlsZS50ZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHRoaXMudGlsZS50ZXh0dXJlKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTElORUFSKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NQUdfRklMVEVSLGUuTElORUFSKSxlLnRleEltYWdlMkQoZS5URVhUVVJFXzJELDAsZS5SR0JBLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5pbWFnZSkpfX0sbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXt0aGlzLl9jb29yZCYmdGhpcy5fY29vcmQudG9TdHJpbmcoKT09PXQuY29vcmQudG9TdHJpbmcoKT8odGhpcy5fc2V0VGlsZSh0KSxlKG51bGwpKToodC5zdGF0ZT0iZXJyb3JlZCIsZShudWxsKSl9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsdXJsczp0aGlzLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX19KX0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9kYXRhL2J1ZmZlciI6MzMyLCIuLi9nZW8vbG5nX2xhdCI6MzM3LCIuLi9yZW5kZXIvZHJhd19yYXN0ZXIiOjM0OSwiLi4vcmVuZGVyL3ZlcnRleF9hcnJheV9vYmplY3QiOjM1NSwiLi4vdXRpbC9hamF4Ijo0MjMsIi4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi90aWxlX2Nvb3JkIjozNjcsInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC91dGlsIiksaT10KCIuLi91dGlsL2FqYXgiKSxhPXQoIi4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vdXRpbC9tYXBib3giKS5ub3JtYWxpemVTb3VyY2VVUkw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiBlKHQpO3ZhciBpPW4ucGljayhyLFsidGlsZXMiLCJtaW56b29tIiwibWF4em9vbSIsImF0dHJpYnV0aW9uIl0pO3IudmVjdG9yX2xheWVycyYmKGkudmVjdG9yTGF5ZXJzPXIudmVjdG9yX2xheWVycyxpLnZlY3RvckxheWVySWRzPWkudmVjdG9yTGF5ZXJzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSxlKG51bGwsaSl9O3QudXJsP2kuZ2V0SlNPTihvKHQudXJsKSxyKTphLmZyYW1lKHIuYmluZChudWxsLG51bGwsdCkpfX0seyIuLi91dGlsL2FqYXgiOjQyMywiLi4vdXRpbC9icm93c2VyIjo0MjQsIi4uL3V0aWwvbWFwYm94Ijo0MzcsIi4uL3V0aWwvdXRpbCI6NDQwfV0sMzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2RhdGEvYnVja2V0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSoobi5FWFRFTlQvKHQudGlsZVNpemUqTWF0aC5wb3coMixyLXQuY29vcmQueikpKX19LHsiLi4vZGF0YS9idWNrZXQiOjMyN31dLDM2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5jb29yZCxuPWUuY29vcmQ7cmV0dXJuIHIuei1uLnp8fHIueS1uLnl8fHIudy1uLnd8fHIueC1uLnh9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9dFswXXx8e30scj0xO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO2Zvcih2YXIgaSBpbiBuKXt2YXIgYT1uW2ldLG89ZVtpXTtpZih2b2lkIDA9PT1vKW89ZVtpXT1hO2Vsc2UgZm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspby5wdXNoKGFbc10pfX1yZXR1cm4gZX12YXIgYT10KCIuL3RpbGVfY29vcmQiKTtyLnJlbmRlcmVkPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbD10LnRpbGVzSW4ocik7bC5zb3J0KG4pO2Zvcih2YXIgdT1bXSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciBoPWxbY107aC50aWxlLmZlYXR1cmVJbmRleCYmdS5wdXNoKGgudGlsZS5mZWF0dXJlSW5kZXgucXVlcnkoe3F1ZXJ5R2VvbWV0cnk6aC5xdWVyeUdlb21ldHJ5LHNjYWxlOmguc2NhbGUsdGlsZVNpemU6aC50aWxlLnRpbGVTaXplLGJlYXJpbmc6cyxwYXJhbXM6YX0sZSkpfXJldHVybiBpKHUpfSxyLnNvdXJjZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFJlbmRlcmFibGVJZHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSxuPVtdLGk9e30sbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dLGw9bmV3IGEoTWF0aC5taW4ocy5zb3VyY2VNYXhab29tLHMuY29vcmQueikscy5jb29yZC54LHMuY29vcmQueSwwKS5pZDtpW2xdfHwoaVtsXT0hMCxzLnF1ZXJ5U291cmNlRmVhdHVyZXMobixlKSl9cmV0dXJuIG59fSx7Ii4vdGlsZV9jb29yZCI6MzY3fV0sMzYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuaWQ9dCx0aGlzLmRpc3BhdGNoZXI9cixpLmV4dGVuZCh0aGlzLGkucGljayhlLFsidXJsIiwic2NoZW1lIiwidGlsZVNpemUiXSkpLHMoZSxmdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIHRoaXMuZmlyZSgiZXJyb3IiLHQpO2kuZXh0ZW5kKHRoaXMsZSksdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vdXRpbC9hamF4Iiksbz10KCIuLi91dGlsL2V2ZW50ZWQiKSxzPXQoIi4vbG9hZF90aWxlanNvbiIpLGw9dCgiLi4vdXRpbC9tYXBib3giKS5ub3JtYWxpemVUaWxlVVJMO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChvLHttaW56b29tOjAsbWF4em9vbToyMixyb3VuZFpvb206ITAsc2NoZW1lOiJ4eXoiLHRpbGVTaXplOjUxMixfbG9hZGVkOiExLG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMubWFwPXR9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJyYXN0ZXIiLHVybDp0aGlzLnVybCx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplfX0sbG9hZFRpbGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsbil7aWYoZGVsZXRlIHQucmVxdWVzdCwhdC5hYm9ydGVkKXtpZihyKXJldHVybiBlKHIpO3ZhciBpPXRoaXMubWFwLnBhaW50ZXIuZ2w7dC50ZXh0dXJlPXRoaXMubWFwLnBhaW50ZXIuZ2V0VGV4dHVyZShuLndpZHRoKSx0LnRleHR1cmU/KGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHQudGV4dHVyZSksaS50ZXhTdWJJbWFnZTJEKGkuVEVYVFVSRV8yRCwwLDAsMCxpLlJHQkEsaS5VTlNJR05FRF9CWVRFLG4pKToodC50ZXh0dXJlPWkuY3JlYXRlVGV4dHVyZSgpLGkuYmluZFRleHR1cmUoaS5URVhUVVJFXzJELHQudGV4dHVyZSksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfTUlOX0ZJTFRFUixpLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfTUFHX0ZJTFRFUixpLkxJTkVBUiksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfV1JBUF9TLGkuQ0xBTVBfVE9fRURHRSksaS50ZXhQYXJhbWV0ZXJpKGkuVEVYVFVSRV8yRCxpLlRFWFRVUkVfV1JBUF9ULGkuQ0xBTVBfVE9fRURHRSksaS5waXhlbFN0b3JlaShpLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwhMCksaS50ZXhJbWFnZTJEKGkuVEVYVFVSRV8yRCwwLGkuUkdCQSxpLlJHQkEsaS5VTlNJR05FRF9CWVRFLG4pLHQudGV4dHVyZS5zaXplPW4ud2lkdGgpLGkuZ2VuZXJhdGVNaXBtYXAoaS5URVhUVVJFXzJEKSx0aGlzLm1hcC5hbmltYXRpb25Mb29wLnNldCh0aGlzLm1hcC5zdHlsZS5yYXN0ZXJGYWRlRHVyYXRpb24pLHQuc3RhdGU9ImxvYWRlZCIsZShudWxsKX19dmFyIG49bCh0LmNvb3JkLnVybCh0aGlzLnRpbGVzLG51bGwsdGhpcy5zY2hlbWUpLHRoaXMudXJsLHRoaXMudGlsZVNpemUpO3QucmVxdWVzdD1hLmdldEltYWdlKG4sci5iaW5kKHRoaXMpKX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe3QucmVxdWVzdCYmKHQucmVxdWVzdC5hYm9ydCgpLGRlbGV0ZSB0LnJlcXVlc3QpfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe3QudGV4dHVyZSYmdGhpcy5tYXAucGFpbnRlci5zYXZlVGV4dHVyZSh0LnRleHR1cmUpfX0pfSx7Ii4uL3V0aWwvYWpheCI6NDIzLCIuLi91dGlsL2V2ZW50ZWQiOjQzMiwiLi4vdXRpbC9tYXBib3giOjQzNywiLi4vdXRpbC91dGlsIjo0NDAsIi4vbG9hZF90aWxlanNvbiI6MzYwfV0sMzY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvdXRpbCIpLGk9e3ZlY3Rvcjp0KCIuLi9zb3VyY2UvdmVjdG9yX3RpbGVfc291cmNlIikscmFzdGVyOnQoIi4uL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UiKSxnZW9qc29uOnQoIi4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSIpLHZpZGVvOnQoIi4uL3NvdXJjZS92aWRlb19zb3VyY2UiKSxpbWFnZTp0KCIuLi9zb3VyY2UvaW1hZ2Vfc291cmNlIil9O3IuY3JlYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihlPW5ldyBpW2UudHlwZV0odCxlLHIpLGUuaWQhPT10KXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICIrdCsiIGluc3RlYWQgb2YgIitlLmlkKTtyZXR1cm4gbi5iaW5kQWxsKFsibG9hZCIsImFib3J0IiwidW5sb2FkIiwic2VyaWFsaXplIiwicHJlcGFyZSJdLGUpLGV9LHIuZ2V0VHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gaVt0XX0sci5zZXRUeXBlPWZ1bmN0aW9uKHQsZSl7aVt0XT1lfX0seyIuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UiOjM1NiwiLi4vc291cmNlL2ltYWdlX3NvdXJjZSI6MzU5LCIuLi9zb3VyY2UvcmFzdGVyX3RpbGVfc291cmNlIjozNjMsIi4uL3NvdXJjZS92ZWN0b3JfdGlsZV9zb3VyY2UiOjM2OCwiLi4vc291cmNlL3ZpZGVvX3NvdXJjZSI6MzcwLCIuLi91dGlsL3V0aWwiOjQ0MH1dLDM2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmlkPXQsdGhpcy5kaXNwYXRjaGVyPXI7dmFyIG49dGhpcy5fc291cmNlPW8uY3JlYXRlKHQsZSxyKS5vbigibG9hZCIsZnVuY3Rpb24oKXt0aGlzLm1hcCYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodGhpcy5tYXApLHRoaXMuX3NvdXJjZUxvYWRlZD0hMCx0aGlzLnRpbGVTaXplPW4udGlsZVNpemUsdGhpcy5taW56b29tPW4ubWluem9vbSx0aGlzLm1heHpvb209bi5tYXh6b29tLHRoaXMucm91bmRab29tPW4ucm91bmRab29tLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9bi5yZXBhcnNlT3ZlcnNjYWxlZCx0aGlzLmlzVGlsZUNsaXBwZWQ9bi5pc1RpbGVDbGlwcGVkLHRoaXMuYXR0cmlidXRpb249bi5hdHRyaWJ1dGlvbix0aGlzLnZlY3RvckxheWVySWRzPW4udmVjdG9yTGF5ZXJJZHMsdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpLm9uKCJlcnJvciIsZnVuY3Rpb24odCl7dGhpcy5fc291cmNlRXJyb3JlZD0hMCx0aGlzLmZpcmUoImVycm9yIix0KX0uYmluZCh0aGlzKSkub24oImNoYW5nZSIsZnVuY3Rpb24oKXt0aGlzLnJlbG9hZCgpLHRoaXMudHJhbnNmb3JtJiZ0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSx0aGlzLm1hcCYmdGhpcy5tYXAuc3R5bGUucmFzdGVyRmFkZUR1cmF0aW9uKSx0aGlzLmZpcmUoImNoYW5nZSIpfS5iaW5kKHRoaXMpKTt0aGlzLl90aWxlcz17fSx0aGlzLl9jYWNoZT1uZXcgYygwLHRoaXMudW5sb2FkVGlsZS5iaW5kKHRoaXMpKSx0aGlzLl9pc0lkUmVuZGVyYWJsZT10aGlzLl9pc0lkUmVuZGVyYWJsZS5iaW5kKHRoaXMpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXIuem9vbVRvKE1hdGgubWluKHQueixlKSk7cmV0dXJue3g6KG4uY29sdW1uLSh0LngrdC53Kk1hdGgucG93KDIsdC56KSkpKmQseToobi5yb3ctdC55KSpkfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQlMzItZSUzMn12YXIgbz10KCIuL3NvdXJjZSIpLHM9dCgiLi90aWxlIiksbD10KCIuLi91dGlsL2V2ZW50ZWQiKSx1PXQoIi4vdGlsZV9jb29yZCIpLGM9dCgiLi4vdXRpbC9scnVfY2FjaGUiKSxoPXQoIi4uL2dlby9jb29yZGluYXRlIiksZj10KCIuLi91dGlsL3V0aWwiKSxkPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5UO2UuZXhwb3J0cz1uLG4ubWF4T3Zlcnpvb21pbmc9MTAsbi5tYXhVbmRlcnpvb21pbmc9MyxuLnByb3RvdHlwZT1mLmluaGVyaXQobCx7b25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5vbkFkZCYmdGhpcy5fc291cmNlLm9uQWRkKHQpfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2VFcnJvcmVkKXJldHVybiEwO2lmKCF0aGlzLl9zb3VyY2VMb2FkZWQpcmV0dXJuITE7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZigibG9hZGVkIiE9PWUuc3RhdGUmJiJlcnJvcmVkIiE9PWUuc3RhdGUpcmV0dXJuITF9cmV0dXJuITB9LGdldFNvdXJjZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSx1bmxvYWRUaWxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS51bmxvYWRUaWxlKXJldHVybiB0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSh0KX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUpcmV0dXJuIHRoaXMuX3NvdXJjZS5hYm9ydFRpbGUodCl9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCl9LHByZXBhcmU6ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2VMb2FkZWQmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKXJldHVybiB0aGlzLl9zb3VyY2UucHJlcGFyZSgpfSxnZXRJZHM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fdGlsZXMpLm1hcChOdW1iZXIpLnNvcnQoYSl9LGdldFJlbmRlcmFibGVJZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRJZHMoKS5maWx0ZXIodGhpcy5faXNJZFJlbmRlcmFibGUpfSxfaXNJZFJlbmRlcmFibGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdLmlzUmVuZGVyYWJsZSgpJiYhdGhpcy5fY292ZXJlZFRpbGVzW3RdfSxyZWxvYWQ6ZnVuY3Rpb24oKXt0aGlzLl9jYWNoZS5yZXNldCgpO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ImxvYWRpbmciIT09ZS5zdGF0ZSYmKGUuc3RhdGU9InJlbG9hZGluZyIpLHRoaXMubG9hZFRpbGUodGhpcy5fdGlsZXNbdF0sdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMsdGhpcy5fdGlsZXNbdF0pKX19LF90aWxlTG9hZGVkOmZ1bmN0aW9uKHQsZSl7aWYoZSlyZXR1cm4gdC5zdGF0ZT0iZXJyb3JlZCIsdGhpcy5maXJlKCJ0aWxlLmVycm9yIix7dGlsZTp0LGVycm9yOmV9KSx2b2lkIHRoaXMuX3NvdXJjZS5maXJlKCJ0aWxlLmVycm9yIix7dGlsZTp0LGVycm9yOmV9KTt0LnNvdXJjZT10aGlzLHQudGltZUFkZGVkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuZmlyZSgidGlsZS5sb2FkIix7dGlsZTp0fSksdGhpcy5fc291cmNlLmZpcmUoInRpbGUubG9hZCIse3RpbGU6dH0pfSxnZXRUaWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQuaWQpfSxnZXRUaWxlQnlJRDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZXNbdF19LGdldFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIHQuem9vbSt0LnNjYWxlWm9vbSh0LnRpbGVTaXplL3RoaXMudGlsZVNpemUpfSxmaW5kTG9hZGVkQ2hpbGRyZW46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPSExO2Zvcih2YXIgaSBpbiB0aGlzLl90aWxlcyl7dmFyIGE9dGhpcy5fdGlsZXNbaV07aWYoIShyW2ldfHwhYS5pc1JlbmRlcmFibGUoKXx8YS5jb29yZC56PD10Lnp8fGEuY29vcmQuej5lKSl7dmFyIG89TWF0aC5wb3coMixNYXRoLm1pbihhLmNvb3JkLnosdGhpcy5tYXh6b29tKS1NYXRoLm1pbih0LnosdGhpcy5tYXh6b29tKSk7aWYoTWF0aC5mbG9vcihhLmNvb3JkLngvbyk9PT10LngmJk1hdGguZmxvb3IoYS5jb29yZC55L28pPT09dC55KWZvcihyW2ldPSEwLG49ITA7YSYmYS5jb29yZC56LTE+dC56Oyl7dmFyIHM9YS5jb29yZC5wYXJlbnQodGhpcy5tYXh6b29tKS5pZDthPXRoaXMuX3RpbGVzW3NdLGEmJmEuaXNSZW5kZXJhYmxlKCkmJihkZWxldGUgcltpXSxyW3NdPSEwKX19fXJldHVybiBufSxmaW5kTG9hZGVkUGFyZW50OmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC56LTE7bj49ZTtuLS0pe3Q9dC5wYXJlbnQodGhpcy5tYXh6b29tKTt2YXIgaT10aGlzLl90aWxlc1t0LmlkXTtpZihpJiZpLmlzUmVuZGVyYWJsZSgpKXJldHVybiByW3QuaWRdPSEwLGk7aWYodGhpcy5fY2FjaGUuaGFzKHQuaWQpKXJldHVybiB0aGlzLmFkZFRpbGUodCksclt0LmlkXT0hMCx0aGlzLl90aWxlc1t0LmlkXX19LHVwZGF0ZUNhY2hlU2l6ZTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmNlaWwodC53aWR0aC90LnRpbGVTaXplKSsxLHI9TWF0aC5jZWlsKHQuaGVpZ2h0L3QudGlsZVNpemUpKzEsbj1lKnI7dGhpcy5fY2FjaGUuc2V0TWF4U2l6ZShNYXRoLmZsb29yKDUqbikpfSx1cGRhdGU6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9zb3VyY2VMb2FkZWQpe3ZhciByLGksYTt0aGlzLnVwZGF0ZUNhY2hlU2l6ZSh0KTt2YXIgbz0odGhpcy5yb3VuZFpvb20/TWF0aC5yb3VuZDpNYXRoLmZsb29yKSh0aGlzLmdldFpvb20odCkpLHM9TWF0aC5tYXgoby1uLm1heE92ZXJ6b29taW5nLHRoaXMubWluem9vbSksbD1NYXRoLm1heChvK24ubWF4VW5kZXJ6b29taW5nLHRoaXMubWluem9vbSksYz17fSxoPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3RoaXMuX2NvdmVyZWRUaWxlcz17fTt2YXIgZD10aGlzLnVzZWQ/dC5jb3ZlcmluZ1RpbGVzKHRoaXMuX3NvdXJjZSk6W107Zm9yKHI9MDtyPGQubGVuZ3RoO3IrKylpPWRbcl0sYT10aGlzLmFkZFRpbGUoaSksY1tpLmlkXT0hMCxhLmlzUmVuZGVyYWJsZSgpfHx0aGlzLmZpbmRMb2FkZWRDaGlsZHJlbihpLGwsYyl8fHRoaXMuZmluZExvYWRlZFBhcmVudChpLHMsYyk7Zm9yKHZhciBwPXt9LG09T2JqZWN0LmtleXMoYyksdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgZz1tW3ZdO2k9dS5mcm9tSUQoZyksYT10aGlzLl90aWxlc1tnXSxhJiZhLnRpbWVBZGRlZD5oLShlfHwwKSYmKHRoaXMuZmluZExvYWRlZENoaWxkcmVuKGksbCxjKSYmKGNbZ109ITApLHRoaXMuZmluZExvYWRlZFBhcmVudChpLHMscCkpfXZhciB5O2Zvcih5IGluIHApY1t5XXx8KHRoaXMuX2NvdmVyZWRUaWxlc1t5XT0hMCk7Zm9yKHkgaW4gcCljW3ldPSEwO3ZhciBiPWYua2V5c0RpZmZlcmVuY2UodGhpcy5fdGlsZXMsYyk7Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl0aGlzLnJlbW92ZVRpbGUoK2Jbcl0pO3RoaXMudHJhbnNmb3JtPXR9fSxhZGRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3QuaWRdO2lmKGUpcmV0dXJuIGU7dmFyIHI9dC53cmFwcGVkKCk7aWYoZT10aGlzLl90aWxlc1tyLmlkXSxlfHwoZT10aGlzLl9jYWNoZS5nZXQoci5pZCkpJiZ0aGlzLl9yZWRvUGxhY2VtZW50JiZ0aGlzLl9yZWRvUGxhY2VtZW50KGUpLCFlKXt2YXIgbj10LnosaT1uPnRoaXMubWF4em9vbT9NYXRoLnBvdygyLG4tdGhpcy5tYXh6b29tKToxO2U9bmV3IHMocix0aGlzLnRpbGVTaXplKmksdGhpcy5tYXh6b29tKSx0aGlzLmxvYWRUaWxlKGUsdGhpcy5fdGlsZUxvYWRlZC5iaW5kKHRoaXMsZSkpfXJldHVybiBlLnVzZXMrKyx0aGlzLl90aWxlc1t0LmlkXT1lLHRoaXMuZmlyZSgidGlsZS5hZGQiLHt0aWxlOmV9KSx0aGlzLl9zb3VyY2UuZmlyZSgidGlsZS5hZGQiLHt0aWxlOmV9KSxlfSxyZW1vdmVUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3RdO2UmJihlLnVzZXMtLSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5maXJlKCJ0aWxlLnJlbW92ZSIse3RpbGU6ZX0pLHRoaXMuX3NvdXJjZS5maXJlKCJ0aWxlLnJlbW92ZSIse3RpbGU6ZX0pLGUudXNlcz4wfHwoZS5pc1JlbmRlcmFibGUoKT90aGlzLl9jYWNoZS5hZGQoZS5jb29yZC53cmFwcGVkKCkuaWQsZSk6KGUuYWJvcnRlZD0hMCx0aGlzLmFib3J0VGlsZShlKSx0aGlzLnVubG9hZFRpbGUoZSkpKSl9LGNsZWFyVGlsZXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpdGhpcy5yZW1vdmVUaWxlKHQpO3RoaXMuX2NhY2hlLnJlc2V0KCl9LHRpbGVzSW46ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9dGhpcy5nZXRJZHMoKSxuPTEvMCxhPTEvMCxvPS0xLzAscz0tMS8wLGw9dFswXS56b29tLGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIGY9dFtjXTtuPU1hdGgubWluKG4sZi5jb2x1bW4pLGE9TWF0aC5taW4oYSxmLnJvdyksbz1NYXRoLm1heChvLGYuY29sdW1uKSxzPU1hdGgubWF4KHMsZi5yb3cpfWZvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgbT10aGlzLl90aWxlc1tyW3BdXSx2PXUuZnJvbUlEKHJbcF0pLGc9W2kodixtLnNvdXJjZU1heFpvb20sbmV3IGgobixhLGwpKSxpKHYsbS5zb3VyY2VNYXhab29tLG5ldyBoKG8scyxsKSldO2lmKGdbMF0ueDxkJiZnWzBdLnk8ZCYmZ1sxXS54Pj0wJiZnWzFdLnk+PTApe2Zvcih2YXIgeT1bXSxiPTA7Yjx0Lmxlbmd0aDtiKyspeS5wdXNoKGkodixtLnNvdXJjZU1heFpvb20sdFtiXSkpO3ZhciB4PWVbbS5jb29yZC5pZF07dm9pZCAwPT09eCYmKHg9ZVttLmNvb3JkLmlkXT17dGlsZTptLGNvb3JkOnYscXVlcnlHZW9tZXRyeTpbXSxzY2FsZTpNYXRoLnBvdygyLHRoaXMudHJhbnNmb3JtLnpvb20tbS5jb29yZC56KX0pLHgucXVlcnlHZW9tZXRyeS5wdXNoKHkpfX12YXIgXz1bXTtmb3IodmFyIHcgaW4gZSlfLnB1c2goZVt3XSk7cmV0dXJuIF99LHJlZG9QbGFjZW1lbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5nZXRJZHMoKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3RoaXMuZ2V0VGlsZUJ5SUQodFtlXSkucmVkb1BsYWNlbWVudCh0aGlzKX19LGdldFZpc2libGVDb29yZGluYXRlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJZHMoKS5tYXAodS5mcm9tSUQpfX0pfSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2dlby9jb29yZGluYXRlIjozMzYsIi4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL2xydV9jYWNoZSI6NDM2LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9zb3VyY2UiOjM2NCwiLi90aWxlIjozNjYsIi4vdGlsZV9jb29yZCI6MzY3fV0sMzY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuY29vcmQ9dCwKdGhpcy51aWQ9YS51bmlxdWVJZCgpLHRoaXMudXNlcz0wLHRoaXMudGlsZVNpemU9ZSx0aGlzLnNvdXJjZU1heFpvb209cix0aGlzLmJ1Y2tldHM9e30sdGhpcy5zdGF0ZT0ibG9hZGluZyJ9ZnVuY3Rpb24gaSh0LGUpe2lmKGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUuZ2V0TGF5ZXIodFtuXS5sYXllcklkKTtpZihpKXt2YXIgcz1vLmNyZWF0ZShhLmV4dGVuZCh7bGF5ZXI6aSxjaGlsZExheWVyczp0W25dLmNoaWxkTGF5ZXJJZHMubWFwKGUuZ2V0TGF5ZXIuYmluZChlKSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSl9LHRbbl0pKTtyW3MuaWRdPXN9fXJldHVybiByfX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4uL2RhdGEvYnVja2V0Iikscz10KCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiKSxsPXQoInZlY3Rvci10aWxlIiksdT10KCJwYmYiKSxjPXQoIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIiksaD10KCJmZWF0dXJlLWZpbHRlciIpLGY9dCgiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIiksZD10KCIuLi9zeW1ib2wvY29sbGlzaW9uX2JveCIpLHA9dCgiLi4vc3ltYm9sL3N5bWJvbF9pbnN0YW5jZXMiKSxtPXQoIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17bG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCxlKXt0aGlzLnN0YXRlPSJsb2FkZWQiLHQmJih0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBkKHQuY29sbGlzaW9uQm94QXJyYXkpLHRoaXMuY29sbGlzaW9uVGlsZT1uZXcgZih0LmNvbGxpc2lvblRpbGUsdGhpcy5jb2xsaXNpb25Cb3hBcnJheSksdGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheT1uZXcgcCh0LnN5bWJvbEluc3RhbmNlc0FycmF5KSx0aGlzLnN5bWJvbFF1YWRzQXJyYXk9bmV3IG0odC5zeW1ib2xRdWFkc0FycmF5KSx0aGlzLmZlYXR1cmVJbmRleD1uZXcgcyh0LmZlYXR1cmVJbmRleCx0LnJhd1RpbGVEYXRhLHRoaXMuY29sbGlzaW9uVGlsZSksdGhpcy5yYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhLHRoaXMuYnVja2V0cz1pKHQuYnVja2V0cyxlKSl9LHJlbG9hZFN5bWJvbERhdGE6ZnVuY3Rpb24odCxlLHIpe2lmKCJ1bmxvYWRlZCIhPT10aGlzLnN0YXRlKXt0aGlzLmNvbGxpc2lvblRpbGU9bmV3IGYodC5jb2xsaXNpb25UaWxlLHRoaXMuY29sbGlzaW9uQm94QXJyYXkpLHRoaXMuZmVhdHVyZUluZGV4LnNldENvbGxpc2lvblRpbGUodGhpcy5jb2xsaXNpb25UaWxlKTtmb3IodmFyIG4gaW4gdGhpcy5idWNrZXRzKXt2YXIgbz10aGlzLmJ1Y2tldHNbbl07InN5bWJvbCI9PT1vLnR5cGUmJihvLmRlc3Ryb3koZS5nbCksZGVsZXRlIHRoaXMuYnVja2V0c1tuXSl9YS5leHRlbmQodGhpcy5idWNrZXRzLGkodC5idWNrZXRzLHIpKX19LHVubG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYnVja2V0cyl7dGhpcy5idWNrZXRzW2VdLmRlc3Ryb3kodC5nbCl9dGhpcy5jb2xsaXNpb25Cb3hBcnJheT1udWxsLHRoaXMuc3ltYm9sUXVhZHNBcnJheT1udWxsLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9bnVsbCx0aGlzLmNvbGxpc2lvblRpbGU9bnVsbCx0aGlzLmZlYXR1cmVJbmRleD1udWxsLHRoaXMucmF3VGlsZURhdGE9bnVsbCx0aGlzLmJ1Y2tldHM9bnVsbCx0aGlzLnN0YXRlPSJ1bmxvYWRlZCJ9LHJlZG9QbGFjZW1lbnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3RoaXMucmVsb2FkU3ltYm9sRGF0YShyLHQubWFwLnBhaW50ZXIsdC5tYXAuc3R5bGUpLHQuZmlyZSgidGlsZS5sb2FkIix7dGlsZTp0aGlzfSksdGhpcy5zdGF0ZT0ibG9hZGVkIix0aGlzLnJlZG9XaGVuRG9uZSYmKHRoaXMucmVkb1BsYWNlbWVudCh0KSx0aGlzLnJlZG9XaGVuRG9uZT0hMSl9aWYoImxvYWRlZCIhPT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGUpcmV0dXJuIHZvaWQodGhpcy5yZWRvV2hlbkRvbmU9ITApO3RoaXMuc3RhdGU9InJlbG9hZGluZyIsdC5kaXNwYXRjaGVyLnNlbmQoInJlZG8gcGxhY2VtZW50Iix7dWlkOnRoaXMudWlkLHNvdXJjZTp0LmlkLGFuZ2xlOnQubWFwLnRyYW5zZm9ybS5hbmdsZSxwaXRjaDp0Lm1hcC50cmFuc2Zvcm0ucGl0Y2gsc2hvd0NvbGxpc2lvbkJveGVzOnQubWFwLnNob3dDb2xsaXNpb25Cb3hlc30sZS5iaW5kKHRoaXMpLHRoaXMud29ya2VySUQpfSxnZXRCdWNrZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYnVja2V0cyYmdGhpcy5idWNrZXRzW3QucmVmfHx0LmlkXX0scXVlcnlTb3VyY2VGZWF0dXJlczpmdW5jdGlvbih0LGUpe2lmKHRoaXMucmF3VGlsZURhdGEpe3RoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBsLlZlY3RvclRpbGUobmV3IHUobmV3IFVpbnQ4QXJyYXkodGhpcy5yYXdUaWxlRGF0YSkpKS5sYXllcnMpO3ZhciByPXRoaXMudnRMYXllcnMuX2dlb2pzb25UaWxlTGF5ZXJ8fHRoaXMudnRMYXllcnNbZS5zb3VyY2VMYXllcl07aWYocilmb3IodmFyIG49aChlLmZpbHRlciksaT17ejp0aGlzLmNvb3JkLnoseDp0aGlzLmNvb3JkLngseTp0aGlzLmNvb3JkLnl9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89ci5mZWF0dXJlKGEpO2lmKG4obykpe3ZhciBzPW5ldyBjKG8sdGhpcy5jb29yZC56LHRoaXMuY29vcmQueCx0aGlzLmNvb3JkLnkpO3MudGlsZT1pLHQucHVzaChzKX19fX0saXNSZW5kZXJhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuImxvYWRlZCI9PT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGV9fX0seyIuLi9kYXRhL2J1Y2tldCI6MzI3LCIuLi9kYXRhL2ZlYXR1cmVfaW5kZXgiOjMzNCwiLi4vc3ltYm9sL2NvbGxpc2lvbl9ib3giOjM5MiwiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIjozOTQsIi4uL3N5bWJvbC9zeW1ib2xfaW5zdGFuY2VzIjo0MDMsIi4uL3N5bWJvbC9zeW1ib2xfcXVhZHMiOjQwNCwiLi4vdXRpbC91dGlsIjo0NDAsIi4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uIjo0NDEsImZlYXR1cmUtZmlsdGVyIjoxMzAscGJmOjQ3NiwidmVjdG9yLXRpbGUiOjU0OH1dLDM2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2woIWlzTmFOKHQpJiZ0Pj0wJiZ0JTE9PTApLGwoIWlzTmFOKGUpJiZlPj0wJiZlJTE9PTApLGwoIWlzTmFOKHIpJiZyPj0wJiZyJTE9PTApLGlzTmFOKG4pJiYobj0wKSx0aGlzLno9K3QsdGhpcy54PStlLHRoaXMueT0rcix0aGlzLnc9K24sKG4qPTIpPDAmJihuPS0xKm4tMSk7dmFyIGk9MTw8dGhpcy56O3RoaXMuaWQ9MzIqKGkqaSpuK2kqdGhpcy55K3RoaXMueCkrdGhpcy56LHRoaXMucG9zTWF0cml4PW51bGx9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0pbj0xPDxhLTEsaSs9KGUmbj8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX1mdW5jdGlvbiBhKHQsZSl7aWYodC5yb3c+ZS5yb3cpe3ZhciByPXQ7dD1lLGU9cn1yZXR1cm57eDA6dC5jb2x1bW4seTA6dC5yb3cseDE6ZS5jb2x1bW4seTE6ZS5yb3csZHg6ZS5jb2x1bW4tdC5jb2x1bW4sZHk6ZS5yb3ctdC5yb3d9fWZ1bmN0aW9uIG8odCxlLHIsbixpKXt2YXIgYT1NYXRoLm1heChyLE1hdGguZmxvb3IoZS55MCkpLG89TWF0aC5taW4obixNYXRoLmNlaWwoZS55MSkpO2lmKHQueDA9PT1lLngwJiZ0LnkwPT09ZS55MD90LngwK2UuZHkvdC5keSp0LmR4PGUueDE6dC54MS1lLmR5L3QuZHkqdC5keDxlLngwKXt2YXIgcz10O3Q9ZSxlPXN9Zm9yKHZhciBsPXQuZHgvdC5keSx1PWUuZHgvZS5keSxjPXQuZHg+MCxoPWUuZHg8MCxmPWE7ZjxvO2YrKyl7dmFyIGQ9bCpNYXRoLm1heCgwLE1hdGgubWluKHQuZHksZitjLXQueTApKSt0LngwLHA9dSpNYXRoLm1heCgwLE1hdGgubWluKGUuZHksZitoLWUueTApKStlLngwO2koTWF0aC5mbG9vcihwKSxNYXRoLmNlaWwoZCksZil9fWZ1bmN0aW9uIHModCxlLHIsbixpLHMpe3ZhciBsLHU9YSh0LGUpLGM9YShlLHIpLGg9YShyLHQpO3UuZHk+Yy5keSYmKGw9dSx1PWMsYz1sKSx1LmR5PmguZHkmJihsPXUsdT1oLGg9bCksYy5keT5oLmR5JiYobD1jLGM9aCxoPWwpLHUuZHkmJm8oaCx1LG4saSxzKSxjLmR5JiZvKGgsYyxuLGkscyl9dmFyIGw9dCgiYXNzZXJ0IiksdT10KCJ3aG9vdHMtanMiKSxjPXQoIi4uL2dlby9jb29yZGluYXRlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy56KyIvIit0aGlzLngrIi8iK3RoaXMueX0sbi5wcm90b3R5cGUudG9Db29yZGluYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKHRoaXMueix0KSxyPU1hdGgucG93KDIsZSksbj10aGlzLnksaT10aGlzLngrcip0aGlzLnc7cmV0dXJuIG5ldyBjKGksbixlKX0sbi5mcm9tSUQ9ZnVuY3Rpb24odCl7dmFyIGU9dCUzMixyPTE8PGUsaT0odC1lKS8zMixhPWklcixvPShpLWEpL3IlcixzPU1hdGguZmxvb3IoaS8ocipyKSk7cmV0dXJuIHMlMiE9MCYmKHM9LTEqcy0xKSxzLz0yLG5ldyBuKGUsYSxvLHMpfSxuLnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXUuZ2V0VGlsZUJCb3godGhpcy54LHRoaXMueSx0aGlzLnopLGE9aSh0aGlzLnosdGhpcy54LHRoaXMueSk7cmV0dXJuIHRbKHRoaXMueCt0aGlzLnkpJXQubGVuZ3RoXS5yZXBsYWNlKCJ7cHJlZml4fSIsKHRoaXMueCUxNikudG9TdHJpbmcoMTYpKyh0aGlzLnklMTYpLnRvU3RyaW5nKDE2KSkucmVwbGFjZSgie3p9IixNYXRoLm1pbih0aGlzLnosZXx8dGhpcy56KSkucmVwbGFjZSgie3h9Iix0aGlzLngpLnJlcGxhY2UoInt5fSIsInRtcyI9PT1yP01hdGgucG93KDIsdGhpcy56KS10aGlzLnktMTp0aGlzLnkpLnJlcGxhY2UoIntxdWFka2V5fSIsYSkucmVwbGFjZSgie2Jib3gtZXBzZy0zODU3fSIsbil9LG4ucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuej9udWxsOnRoaXMuej50P25ldyBuKHRoaXMuei0xLHRoaXMueCx0aGlzLnksdGhpcy53KTpuZXcgbih0aGlzLnotMSxNYXRoLmZsb29yKHRoaXMueC8yKSxNYXRoLmZsb29yKHRoaXMueS8yKSx0aGlzLncpfSxuLnByb3RvdHlwZS53cmFwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueix0aGlzLngsdGhpcy55LDApfSxuLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLno+PXQpcmV0dXJuW25ldyBuKHRoaXMueisxLHRoaXMueCx0aGlzLnksdGhpcy53KV07dmFyIGU9dGhpcy56KzEscj0yKnRoaXMueCxpPTIqdGhpcy55O3JldHVybltuZXcgbihlLHIsaSx0aGlzLncpLG5ldyBuKGUscisxLGksdGhpcy53KSxuZXcgbihlLHIsaSsxLHRoaXMudyksbmV3IG4oZSxyKzEsaSsxLHRoaXMudyldfSxuLmNvdmVyPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgcyxsLHU7aWYoaT49MCYmaTw9YSlmb3Iocz10O3M8ZTtzKyspbD0ocyVhK2EpJWEsdT1uZXcgbihyLGwsaSxNYXRoLmZsb29yKHMvYSkpLG9bdS5pZF09dX12YXIgYT0xPDx0LG89e307cmV0dXJuIHMoZVswXSxlWzFdLGVbMl0sMCxhLGkpLHMoZVsyXSxlWzNdLGVbMF0sMCxhLGkpLE9iamVjdC5rZXlzKG8pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gb1t0XX0pfX0seyIuLi9nZW8vY29vcmRpbmF0ZSI6MzM2LGFzc2VydDo0NSwid2hvb3RzLWpzIjo1NjR9XSwzNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYodGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1yLGEuZXh0ZW5kKHRoaXMsYS5waWNrKGUsWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSJdKSksdGhpcy5fb3B0aW9ucz1hLmV4dGVuZCh7dHlwZToidmVjdG9yIn0sZSksNTEyIT09dGhpcy50aWxlU2l6ZSl0aHJvdyBuZXcgRXJyb3IoInZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyIik7byhlLGZ1bmN0aW9uKHQsZSl7aWYodClyZXR1cm4gdm9pZCB0aGlzLmZpcmUoImVycm9yIix0KTthLmV4dGVuZCh0aGlzLGUpLHRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX12YXIgaT10KCIuLi91dGlsL2V2ZW50ZWQiKSxhPXQoIi4uL3V0aWwvdXRpbCIpLG89dCgiLi9sb2FkX3RpbGVqc29uIikscz10KCIuLi91dGlsL21hcGJveCIpLm5vcm1hbGl6ZVRpbGVVUkw7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9YS5pbmhlcml0KGkse21pbnpvb206MCxtYXh6b29tOjIyLHNjaGVtZToieHl6Iix0aWxlU2l6ZTo1MTIscmVwYXJzZU92ZXJzY2FsZWQ6ITAsaXNUaWxlQ2xpcHBlZDohMCxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLm1hcD10fSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYS5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyl9LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLG4pe2lmKCF0LmFib3J0ZWQpe2lmKHIpcmV0dXJuIGUocik7dC5sb2FkVmVjdG9yRGF0YShuLHRoaXMubWFwLnN0eWxlKSx0LnJlZG9XaGVuRG9uZSYmKHQucmVkb1doZW5Eb25lPSExLHQucmVkb1BsYWNlbWVudCh0aGlzKSksZShudWxsKSx0LnJlbG9hZENhbGxiYWNrJiYodGhpcy5sb2FkVGlsZSh0LHQucmVsb2FkQ2FsbGJhY2spLHQucmVsb2FkQ2FsbGJhY2s9bnVsbCl9fXZhciBuPXQuY29vcmQuej50aGlzLm1heHpvb20/TWF0aC5wb3coMix0LmNvb3JkLnotdGhpcy5tYXh6b29tKToxLGk9e3VybDpzKHQuY29vcmQudXJsKHRoaXMudGlsZXMsdGhpcy5tYXh6b29tLHRoaXMuc2NoZW1lKSx0aGlzLnVybCksdWlkOnQudWlkLGNvb3JkOnQuY29vcmQsem9vbTp0LmNvb3JkLnosdGlsZVNpemU6dGhpcy50aWxlU2l6ZSpuLHNvdXJjZTp0aGlzLmlkLG92ZXJzY2FsaW5nOm4sYW5nbGU6dGhpcy5tYXAudHJhbnNmb3JtLmFuZ2xlLHBpdGNoOnRoaXMubWFwLnRyYW5zZm9ybS5waXRjaCxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzfTt0LndvcmtlcklEPyJsb2FkaW5nIj09PXQuc3RhdGU/dC5yZWxvYWRDYWxsYmFjaz1lOihpLnJhd1RpbGVEYXRhPXQucmF3VGlsZURhdGEsdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbG9hZCB0aWxlIixpLHIuYmluZCh0aGlzKSx0LndvcmtlcklEKSk6dC53b3JrZXJJRD10aGlzLmRpc3BhdGNoZXIuc2VuZCgibG9hZCB0aWxlIixpLHIuYmluZCh0aGlzKSl9LGFib3J0VGlsZTpmdW5jdGlvbih0KXt0aGlzLmRpc3BhdGNoZXIuc2VuZCgiYWJvcnQgdGlsZSIse3VpZDp0LnVpZCxzb3VyY2U6dGhpcy5pZH0sbnVsbCx0LndvcmtlcklEKX0sdW5sb2FkVGlsZTpmdW5jdGlvbih0KXt0LnVubG9hZFZlY3RvckRhdGEodGhpcy5tYXAucGFpbnRlciksdGhpcy5kaXNwYXRjaGVyLnNlbmQoInJlbW92ZSB0aWxlIix7dWlkOnQudWlkLHNvdXJjZTp0aGlzLmlkfSxudWxsLHQud29ya2VySUQpfX0pfSx7Ii4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL21hcGJveCI6NDM3LCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9sb2FkX3RpbGVqc29uIjozNjB9XSwzNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5hY3Rvcj10LHRoaXMuc3R5bGVMYXllcnM9ZSxyJiYodGhpcy5sb2FkVmVjdG9yRGF0YT1yKSx0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319dmFyIGk9dCgiLi4vdXRpbC9hamF4IiksYT10KCJ2ZWN0b3ItdGlsZSIpLG89dCgicGJmIikscz10KCIuL3dvcmtlcl90aWxlIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2xvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe3JldHVybiBkZWxldGUgdGhpcy5sb2FkaW5nW25dW2ldLHQ/ZSh0KTpyPyhhLmRhdGE9ci50aWxlLGEucGFyc2UoYS5kYXRhLHRoaXMuc3R5bGVMYXllcnMuZ2V0TGF5ZXJGYW1pbGllcygpLHRoaXMuYWN0b3Isci5yYXdUaWxlRGF0YSxlKSx0aGlzLmxvYWRlZFtuXT10aGlzLmxvYWRlZFtuXXx8e30sdm9pZCh0aGlzLmxvYWRlZFtuXVtpXT1hKSk6ZShudWxsLG51bGwpfXZhciBuPXQuc291cmNlLGk9dC51aWQ7dGhpcy5sb2FkaW5nW25dfHwodGhpcy5sb2FkaW5nW25dPXt9KTt2YXIgYT10aGlzLmxvYWRpbmdbbl1baV09bmV3IHModCk7YS5hYm9ydD10aGlzLmxvYWRWZWN0b3JEYXRhKHQsci5iaW5kKHRoaXMpKX0scmVsb2FkVGlsZTpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubG9hZGVkW3Quc291cmNlXSxuPXQudWlkO2lmKHImJnJbbl0pe3ZhciBpPXJbbl07aS5wYXJzZShpLmRhdGEsdGhpcy5zdHlsZUxheWVycy5nZXRMYXllckZhbWlsaWVzKCksdGhpcy5hY3Rvcix0LnJhd1RpbGVEYXRhLGUpfX0sYWJvcnRUaWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubG9hZGluZ1t0LnNvdXJjZV0scj10LnVpZDtlJiZlW3JdJiZlW3JdLmFib3J0JiYoZVtyXS5hYm9ydCgpLGRlbGV0ZSBlW3JdKX0scmVtb3ZlVGlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvYWRlZFt0LnNvdXJjZV0scj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX0sbG9hZFZlY3RvckRhdGE6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscil7aWYodClyZXR1cm4gZSh0KTt2YXIgbj1uZXcgYS5WZWN0b3JUaWxlKG5ldyBvKG5ldyBVaW50OEFycmF5KHIpKSk7ZSh0LHt0aWxlOm4scmF3VGlsZURhdGE6cn0pfXZhciBuPWkuZ2V0QXJyYXlCdWZmZXIodC51cmwsci5iaW5kKHRoaXMpKTtyZXR1cm4gZnVuY3Rpb24oKXtuLmFib3J0KCl9fSxyZWRvUGxhY2VtZW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sb2FkZWRbdC5zb3VyY2VdLG49dGhpcy5sb2FkaW5nW3Quc291cmNlXSxpPXQudWlkO2lmKHImJnJbaV0pe3ZhciBhPXJbaV0sbz1hLnJlZG9QbGFjZW1lbnQodC5hbmdsZSx0LnBpdGNoLHQuc2hvd0NvbGxpc2lvbkJveGVzKTtvLnJlc3VsdCYmZShudWxsLG8ucmVzdWx0LG8udHJhbnNmZXJhYmxlcyl9ZWxzZSBuJiZuW2ldJiYobltpXS5hbmdsZT10LmFuZ2xlKX19fSx7Ii4uL3V0aWwvYWpheCI6NDIzLCIuL3dvcmtlcl90aWxlIjozNzIscGJmOjQ3NiwidmVjdG9yLXRpbGUiOjU0OH1dLDM3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5pZD10LHRoaXMudXJscz1lLnVybHMsdGhpcy5jb29yZGluYXRlcz1lLmNvb3JkaW5hdGVzLHUuZ2V0VmlkZW8oZS51cmxzLGZ1bmN0aW9uKHQscil7aWYodClyZXR1cm4gdGhpcy5maXJlKCJlcnJvciIse2Vycm9yOnR9KTt0aGlzLnZpZGVvPXIsdGhpcy52aWRlby5sb29wPSEwO3ZhciBuO3RoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigicGxheWluZyIsZnVuY3Rpb24oKXtuPXRoaXMubWFwLnN0eWxlLmFuaW1hdGlvbkxvb3Auc2V0KDEvMCksdGhpcy5tYXAuX3JlcmVuZGVyKCl9LmJpbmQodGhpcykpLHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigicGF1c2UiLGZ1bmN0aW9uKCl7dGhpcy5tYXAuc3R5bGUuYW5pbWF0aW9uTG9vcC5jYW5jZWwobil9LmJpbmQodGhpcykpLHRoaXMubWFwJiYodGhpcy52aWRlby5wbGF5KCksdGhpcy5zZXRDb29yZGluYXRlcyhlLmNvb3JkaW5hdGVzKSksdGhpcy5maXJlKCJsb2FkIil9LmJpbmQodGhpcykpfXZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi90aWxlX2Nvb3JkIiksbz10KCIuLi9nZW8vbG5nX2xhdCIpLHM9dCgicG9pbnQtZ2VvbWV0cnkiKSxsPXQoIi4uL3V0aWwvZXZlbnRlZCIpLHU9dCgiLi4vdXRpbC9hamF4IiksYz10KCIuLi9kYXRhL2J1Y2tldCIpLkVYVEVOVCxoPXQoIi4uL3JlbmRlci9kcmF3X3Jhc3RlciIpLlJhc3RlckJvdW5kc0FycmF5LGY9dCgiLi4vZGF0YS9idWZmZXIiKSxkPXQoIi4uL3JlbmRlci92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9aS5pbmhlcml0KGwse21pbnpvb206MCxtYXh6b29tOjIyLHRpbGVTaXplOjUxMixyb3VuZFpvb206ITAsZ2V0VmlkZW86ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWRlb30sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5tYXB8fCh0aGlzLm1hcD10LHRoaXMudmlkZW8mJih0aGlzLnZpZGVvLnBsYXkoKSx0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpKSl9LHNldENvb3JkaW5hdGVzOmZ1bmN0aW9uKHQpe3RoaXMuY29vcmRpbmF0ZXM9dDt2YXIgZT10aGlzLm1hcCxyPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlLnRyYW5zZm9ybS5sb2NhdGlvbkNvb3JkaW5hdGUoby5jb252ZXJ0KHQpKS56b29tVG8oMCl9KSxuPXRoaXMuY2VudGVyQ29vcmQ9aS5nZXRDb29yZGluYXRlc0NlbnRlcihyKTtyZXR1cm4gbi5jb2x1bW49TWF0aC5yb3VuZChuLmNvbHVtbiksbi5yb3c9TWF0aC5yb3VuZChuLnJvdyksdGhpcy5taW56b29tPXRoaXMubWF4em9vbT1uLnpvb20sdGhpcy5fY29vcmQ9bmV3IGEobi56b29tLG4uY29sdW1uLG4ucm93KSx0aGlzLl90aWxlQ29vcmRzPXIubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuem9vbVRvKG4uem9vbSk7cmV0dXJuIG5ldyBzKE1hdGgucm91bmQoKGUuY29sdW1uLW4uY29sdW1uKSpjKSxNYXRoLnJvdW5kKChlLnJvdy1uLnJvdykqYykpfSksdGhpcy5maXJlKCJjaGFuZ2UiKSx0aGlzfSxfc2V0VGlsZTpmdW5jdGlvbih0KXt0aGlzLl9wcmVwYXJlZD0hMSx0aGlzLnRpbGU9dDt2YXIgZT1uZXcgaDtlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbMF0ueCx0aGlzLl90aWxlQ29vcmRzWzBdLnksMCwwKSxlLmVtcGxhY2VCYWNrKHRoaXMuX3RpbGVDb29yZHNbMV0ueCx0aGlzLl90aWxlQ29vcmRzWzFdLnksMzI3NjcsMCksZS5lbXBsYWNlQmFjayh0aGlzLl90aWxlQ29vcmRzWzNdLngsdGhpcy5fdGlsZUNvb3Jkc1szXS55LDAsMzI3NjcpLGUuZW1wbGFjZUJhY2sodGhpcy5fdGlsZUNvb3Jkc1syXS54LHRoaXMuX3RpbGVDb29yZHNbMl0ueSwzMjc2NywzMjc2NyksdGhpcy50aWxlLmJ1Y2tldHM9e30sdGhpcy50aWxlLmJvdW5kc0J1ZmZlcj1uZXcgZihlLnNlcmlhbGl6ZSgpLGguc2VyaWFsaXplKCksZi5CdWZmZXJUeXBlLlZFUlRFWCksdGhpcy50aWxlLmJvdW5kc1ZBTz1uZXcgZCx0aGlzLnRpbGUuc3RhdGU9ImxvYWRlZCJ9LHByZXBhcmU6ZnVuY3Rpb24oKXtpZighKHRoaXMudmlkZW8ucmVhZHlTdGF0ZTwyKSYmdGhpcy50aWxlKXt2YXIgdD10aGlzLm1hcC5wYWludGVyLmdsO3RoaXMuX3ByZXBhcmVkPyh0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRpbGUudGV4dHVyZSksdC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLDAsMCx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLHRoaXMudmlkZW8pKToodGhpcy5fcHJlcGFyZWQ9ITAsdGhpcy50aWxlLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50aWxlLnRleHR1cmUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5MSU5FQVIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5MSU5FQVIpLHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdC5SR0JBLHQuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSksdGhpcy5fY3VycmVudFRpbWU9dGhpcy52aWRlby5jdXJyZW50VGltZX19LGxvYWRUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5fY29vcmQmJnRoaXMuX2Nvb3JkLnRvU3RyaW5nKCk9PT10LmNvb3JkLnRvU3RyaW5nKCk/KHRoaXMuX3NldFRpbGUodCksZShudWxsKSk6KHQuc3RhdGU9ImVycm9yZWQiLGUobnVsbCkpfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidmlkZW8iLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fX0pfSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2RhdGEvYnVmZmVyIjozMzIsIi4uL2dlby9sbmdfbGF0IjozMzcsIi4uL3JlbmRlci9kcmF3X3Jhc3RlciI6MzQ5LCIuLi9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdCI6MzU1LCIuLi91dGlsL2FqYXgiOjQyMywiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL3RpbGVfY29vcmQiOjM2NywicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDM3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuc2VsZj10LHRoaXMuYWN0b3I9bmV3IGEodCx0aGlzKTt2YXIgZT17Z2V0TGF5ZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5ZXJzfS5iaW5kKHRoaXMpLGdldExheWVyRmFtaWxpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXllckZhbWlsaWVzfS5iaW5kKHRoaXMpfTt0aGlzLndvcmtlclNvdXJjZXM9e3ZlY3RvcjpuZXcgbCh0aGlzLmFjdG9yLGUpLGdlb2pzb246bmV3IHUodGhpcy5hY3RvcixlKX0sdGhpcy5zZWxmLnJlZ2lzdGVyV29ya2VyU291cmNlPWZ1bmN0aW9uKHQscil7aWYodGhpcy53b3JrZXJTb3VyY2VzW3RdKXRocm93IG5ldyBFcnJvcignV29ya2VyIHNvdXJjZSB3aXRoIG5hbWUgIicrdCsnIiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7dGhpcy53b3JrZXJTb3VyY2VzW3RdPW5ldyByKHRoaXMuYWN0b3IsZSl9LmJpbmQodGhpcyl9ZnVuY3Rpb24gaSh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXSxpPW4ucmVmfHxuLmlkLGE9dFtpXTthLmxheW91dCYmIm5vbmUiPT09YS5sYXlvdXQudmlzaWJpbGl0eXx8KGVbaV09ZVtpXXx8W10scj09PWk/ZVtpXS51bnNoaWZ0KG4pOmVbaV0ucHVzaChuKSl9cmV0dXJuIGV9dmFyIGE9dCgiLi4vdXRpbC9hY3RvciIpLG89dCgiLi4vc3R5bGUvc3R5bGVfbGF5ZXIiKSxzPXQoIi4uL3V0aWwvdXRpbCIpLGw9dCgiLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlIiksdT10KCIuL2dlb2pzb25fd29ya2VyX3NvdXJjZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9LHMuZXh0ZW5kKG4ucHJvdG90eXBlLHsic2V0IGxheWVycyI6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt2YXIgZT1vLmNyZWF0ZSh0LHQucmVmJiZyLmxheWVyc1t0LnJlZl0pO2UudXBkYXRlUGFpbnRUcmFuc2l0aW9ucyh7fSx7dHJhbnNpdGlvbjohMX0pLHIubGF5ZXJzW2UuaWRdPWV9dGhpcy5sYXllcnM9e307Zm9yKHZhciByPXRoaXMsbj1bXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV07ImZpbGwiIT09cy50eXBlJiYibGluZSIhPT1zLnR5cGUmJiJjaXJjbGUiIT09cy50eXBlJiYic3ltYm9sIiE9PXMudHlwZXx8KHMucmVmP24ucHVzaChhKTplKHMpKX1mb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyllKHRbbltsXV0pO3RoaXMubGF5ZXJGYW1pbGllcz1pKHRoaXMubGF5ZXJzKX0sInVwZGF0ZSBsYXllcnMiOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIGU9YS5sYXllcnNbdC5yZWZdO2EubGF5ZXJzW3QuaWRdP2EubGF5ZXJzW3QuaWRdLnNldCh0LGUpOmEubGF5ZXJzW3QuaWRdPW8uY3JlYXRlKHQsZSksYS5sYXllcnNbdC5pZF0udXBkYXRlUGFpbnRUcmFuc2l0aW9ucyh7fSx7dHJhbnNpdGlvbjohMX0pfXZhciByLG4sYT10aGlzO2ZvcihyIGluIHQpbj10W3JdLG4ucmVmJiZlKG4pO2ZvcihyIGluIHQpbj10W3JdLG4ucmVmfHxlKG4pO3RoaXMubGF5ZXJGYW1pbGllcz1pKHRoaXMubGF5ZXJzKX0sImxvYWQgdGlsZSI6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGV8fCJ2ZWN0b3IiO3RoaXMud29ya2VyU291cmNlc1tyXS5sb2FkVGlsZSh0LGUpfSwicmVsb2FkIHRpbGUiOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC50eXBlfHwidmVjdG9yIjt0aGlzLndvcmtlclNvdXJjZXNbcl0ucmVsb2FkVGlsZSh0LGUpfSwiYWJvcnQgdGlsZSI6ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlfHwidmVjdG9yIjt0aGlzLndvcmtlclNvdXJjZXNbZV0uYWJvcnRUaWxlKHQpfSwicmVtb3ZlIHRpbGUiOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZXx8InZlY3RvciI7dGhpcy53b3JrZXJTb3VyY2VzW2VdLnJlbW92ZVRpbGUodCl9LCJyZWRvIHBsYWNlbWVudCI6ZnVuY3Rpb24odCxlKXt2YXIgcj10LnR5cGV8fCJ2ZWN0b3IiO3RoaXMud29ya2VyU291cmNlc1tyXS5yZWRvUGxhY2VtZW50KHQsZSl9LCJsb2FkIHdvcmtlciBzb3VyY2UiOmZ1bmN0aW9uKHQsZSl7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHQudXJsKSxlKCl9Y2F0Y2godCl7ZSh0KX19fSl9LHsiLi4vc3R5bGUvc3R5bGVfbGF5ZXIiOjM3OSwiLi4vdXRpbC9hY3RvciI6NDIyLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9nZW9qc29uX3dvcmtlcl9zb3VyY2UiOjM1NywiLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlIjozNjl9XSwzNzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmNvb3JkPXQuY29vcmQsdGhpcy51aWQ9dC51aWQsdGhpcy56b29tPXQuem9vbSx0aGlzLnRpbGVTaXplPXQudGlsZVNpemUsdGhpcy5zb3VyY2U9dC5zb3VyY2UsdGhpcy5vdmVyc2NhbGluZz10Lm92ZXJzY2FsaW5nLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBpdGNoPXQucGl0Y2gsdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9dC5zaG93Q29sbGlzaW9uQm94ZXN9ZnVuY3Rpb24gaSh0KXtyZXR1cm4hdC5pc0VtcHR5KCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX1mdW5jdGlvbiBvKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KXRbcl0uZ2V0VHJhbnNmZXJhYmxlcyhlKTtyZXR1cm4gZX1mdW5jdGlvbiBzKHQpe3JldHVybiB0LmlkfXZhciBsPXQoIi4uL2RhdGEvZmVhdHVyZV9pbmRleCIpLHU9dCgiLi4vc3ltYm9sL2NvbGxpc2lvbl90aWxlIiksYz10KCIuLi9kYXRhL2J1Y2tldCIpLGg9dCgiLi4vc3ltYm9sL2NvbGxpc2lvbl9ib3giKSxmPXQoIi4uL3V0aWwvZGljdGlvbmFyeV9jb2RlciIpLGQ9dCgiLi4vdXRpbC91dGlsIikscD10KCIuLi9zeW1ib2wvc3ltYm9sX2luc3RhbmNlcyIpLG09dCgiLi4vc3ltYm9sL3N5bWJvbF9xdWFkcyIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyLG4sdil7ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10LmZlYXR1cmUocik7bi5pbmRleD1yO2Zvcih2YXIgaSBpbiBlKWVbaV0uZmlsdGVyKG4pJiZlW2ldLmZlYXR1cmVzLnB1c2gobil9fWZ1bmN0aW9uIHkodCl7aWYodClyZXR1cm4gdih0KTtpZigyPT09KytOKXtmb3IodmFyIGU9UC5sZW5ndGgtMTtlPj0wO2UtLSliKEUsUFtlXSk7eCgpfX1mdW5jdGlvbiBiKHQsZSl7aWYoZS5wb3B1bGF0ZUFycmF5cyhBLGosRiksInN5bWJvbCIhPT1lLnR5cGUpZm9yKHZhciByPTA7cjxlLmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBuPWUuZmVhdHVyZXNbcl07VC5pbnNlcnQobixuLmluZGV4LGUuc291cmNlTGF5ZXJJbmRleCxlLmluZGV4KX1lLmZlYXR1cmVzPW51bGx9ZnVuY3Rpb24geCgpe0Uuc3RhdHVzPSJkb25lIixFLnJlZG9QbGFjZW1lbnRBZnRlckRvbmUmJihFLnJlZG9QbGFjZW1lbnQoRS5hbmdsZSxFLnBpdGNoLG51bGwpLEUucmVkb1BsYWNlbWVudEFmdGVyRG9uZT0hMSk7dmFyIHQ9VC5zZXJpYWxpemUoKSxlPUEuc2VyaWFsaXplKCkscj1FLmNvbGxpc2lvbkJveEFycmF5LnNlcmlhbGl6ZSgpLHM9RS5zeW1ib2xJbnN0YW5jZXNBcnJheS5zZXJpYWxpemUoKSxsPUUuc3ltYm9sUXVhZHNBcnJheS5zZXJpYWxpemUoKSx1PVtuXS5jb25jYXQodC50cmFuc2ZlcmFibGVzKS5jb25jYXQoZS50cmFuc2ZlcmFibGVzKSxjPUQuZmlsdGVyKGkpO3YobnVsbCx7YnVja2V0czpjLm1hcChhKSxmZWF0dXJlSW5kZXg6dC5kYXRhLGNvbGxpc2lvblRpbGU6ZS5kYXRhLGNvbGxpc2lvbkJveEFycmF5OnIsc3ltYm9sSW5zdGFuY2VzQXJyYXk6cyxzeW1ib2xRdWFkc0FycmF5OmwscmF3VGlsZURhdGE6bn0sbyhjKS5jb25jYXQodSkpfXRoaXMuc3RhdHVzPSJwYXJzaW5nIix0aGlzLmRhdGE9dCx0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBoLHRoaXMuc3ltYm9sSW5zdGFuY2VzQXJyYXk9bmV3IHAsdGhpcy5zeW1ib2xRdWFkc0FycmF5PW5ldyBtO3ZhciBfLHcsTSxrLEE9bmV3IHUodGhpcy5hbmdsZSx0aGlzLnBpdGNoLHRoaXMuY29sbGlzaW9uQm94QXJyYXkpLFQ9bmV3IGwodGhpcy5jb29yZCx0aGlzLm92ZXJzY2FsaW5nLEEsdC5sYXllcnMpLFM9bmV3IGYodC5sYXllcnM/T2JqZWN0LmtleXModC5sYXllcnMpLnNvcnQoKTpbIl9nZW9qc29uVGlsZUxheWVyIl0pLEU9dGhpcyxMPXt9LEM9e30sej0wO2Zvcih2YXIgSSBpbiBlKXc9ZVtJXVswXSx3LnNvdXJjZT09PXRoaXMuc291cmNlJiYody5yZWZ8fHcubWluem9vbSYmdGhpcy56b29tPHcubWluem9vbXx8dy5tYXh6b29tJiZ0aGlzLnpvb20+PXcubWF4em9vbXx8dy5sYXlvdXQmJiJub25lIj09PXcubGF5b3V0LnZpc2liaWxpdHl8fHQubGF5ZXJzJiYhdC5sYXllcnNbdy5zb3VyY2VMYXllcl18fChrPWMuY3JlYXRlKHtsYXllcjp3LGluZGV4OnorKyxjaGlsZExheWVyczplW0ldLHpvb206dGhpcy56b29tLG92ZXJzY2FsaW5nOnRoaXMub3ZlcnNjYWxpbmcsc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLGNvbGxpc2lvbkJveEFycmF5OnRoaXMuY29sbGlzaW9uQm94QXJyYXksc3ltYm9sUXVhZHNBcnJheTp0aGlzLnN5bWJvbFF1YWRzQXJyYXksc3ltYm9sSW5zdGFuY2VzQXJyYXk6dGhpcy5zeW1ib2xJbnN0YW5jZXNBcnJheSxzb3VyY2VMYXllckluZGV4OlMuZW5jb2RlKHcuc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIpfSksay5jcmVhdGVGaWx0ZXIoKSxMW3cuaWRdPWssdC5sYXllcnMmJihNPXcuc291cmNlTGF5ZXIsQ1tNXT1DW01dfHx7fSxDW01dW3cuaWRdPWspKSk7aWYodC5sYXllcnMpZm9yKE0gaW4gQykxPT09dy52ZXJzaW9uJiZkLndhcm5PbmNlKCdWZWN0b3IgdGlsZSBzb3VyY2UgIicrdGhpcy5zb3VyY2UrJyIgbGF5ZXIgIicrTSsnIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKSwodz10LmxheWVyc1tNXSkmJmcodyxDW01dKTtlbHNlIGcodCxMKTt2YXIgRD1bXSxQPXRoaXMuc3ltYm9sQnVja2V0cz1bXSxPPVtdO1QuYnVja2V0TGF5ZXJJRHM9e307Zm9yKHZhciBSIGluIEwpaz1MW1JdLDAhPT1rLmZlYXR1cmVzLmxlbmd0aCYmKFQuYnVja2V0TGF5ZXJJRHNbay5pbmRleF09ay5jaGlsZExheWVycy5tYXAocyksRC5wdXNoKGspLCJzeW1ib2wiPT09ay50eXBlP1AucHVzaChrKTpPLnB1c2goaykpO3ZhciBGPXt9LGo9e30sTj0wO2lmKFAubGVuZ3RoPjApe2ZvcihfPVAubGVuZ3RoLTE7Xz49MDtfLS0pUFtfXS51cGRhdGVJY29ucyhGKSxQW19dLnVwZGF0ZUZvbnQoaik7Zm9yKHZhciBCIGluIGopaltCXT1PYmplY3Qua2V5cyhqW0JdKS5tYXAoTnVtYmVyKTtGPU9iamVjdC5rZXlzKEYpLHIuc2VuZCgiZ2V0IGdseXBocyIse3VpZDp0aGlzLnVpZCxzdGFja3M6an0sZnVuY3Rpb24odCxlKXtqPWUseSh0KX0pLEYubGVuZ3RoP3Iuc2VuZCgiZ2V0IGljb25zIix7aWNvbnM6Rn0sZnVuY3Rpb24odCxlKXtGPWUseSh0KX0pOnkoKX1mb3IoXz1PLmxlbmd0aC0xO18+PTA7Xy0tKWIodGhpcyxPW19dKTtpZigwPT09UC5sZW5ndGgpcmV0dXJuIHgoKX0sbi5wcm90b3R5cGUucmVkb1BsYWNlbWVudD1mdW5jdGlvbih0LGUscil7aWYoImRvbmUiIT09dGhpcy5zdGF0dXMpcmV0dXJuIHRoaXMucmVkb1BsYWNlbWVudEFmdGVyRG9uZT0hMCx0aGlzLmFuZ2xlPXQse307Zm9yKHZhciBuPW5ldyB1KHQsZSx0aGlzLmNvbGxpc2lvbkJveEFycmF5KSxzPXRoaXMuc3ltYm9sQnVja2V0cyxsPXMubGVuZ3RoLTE7bD49MDtsLS0pc1tsXS5wbGFjZUZlYXR1cmVzKG4scik7dmFyIGM9bi5zZXJpYWxpemUoKSxoPXMuZmlsdGVyKGkpO3JldHVybntyZXN1bHQ6e2J1Y2tldHM6aC5tYXAoYSksY29sbGlzaW9uVGlsZTpjLmRhdGF9LHRyYW5zZmVyYWJsZXM6byhoKS5jb25jYXQoYy50cmFuc2ZlcmFibGVzKX19fSx7Ii4uL2RhdGEvYnVja2V0IjozMjcsIi4uL2RhdGEvZmVhdHVyZV9pbmRleCI6MzM0LCIuLi9zeW1ib2wvY29sbGlzaW9uX2JveCI6MzkyLCIuLi9zeW1ib2wvY29sbGlzaW9uX3RpbGUiOjM5NCwiLi4vc3ltYm9sL3N5bWJvbF9pbnN0YW5jZXMiOjQwMywiLi4vc3ltYm9sL3N5bWJvbF9xdWFkcyI6NDA0LCIuLi91dGlsL2RpY3Rpb25hcnlfY29kZXIiOjQzMCwiLi4vdXRpbC91dGlsIjo0NDB9XSwzNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMubj0wLHRoaXMudGltZXM9W119ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuc3RvcHBlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpbWVzPXRoaXMudGltZXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbWU+PShuZXcgRGF0ZSkuZ2V0VGltZSgpfSksIXRoaXMudGltZXMubGVuZ3RofSxuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGltZXMucHVzaCh7aWQ6dGhpcy5uLHRpbWU6dCsobmV3IERhdGUpLmdldFRpbWUoKX0pLHRoaXMubisrfSxuLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24odCl7dGhpcy50aW1lcz10aGlzLnRpbWVzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pZCE9PXR9KX19LHt9XSwzNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmJhc2U9dCx0aGlzLnJldGluYT1zLmRldmljZVBpeGVsUmF0aW8+MTt2YXIgZT10aGlzLnJldGluYT8iQDJ4IjoiIjtvLmdldEpTT04obCh0LGUsIi5qc29uIiksZnVuY3Rpb24odCxlKXtpZih0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7dGhpcy5kYXRhPWUsdGhpcy5pbWcmJnRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKSxvLmdldEltYWdlKGwodCxlLCIucG5nIiksZnVuY3Rpb24odCxlKXtpZih0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjp0fSk7Zm9yKHZhciByPWUuZ2V0RGF0YSgpLG49ZS5kYXRhPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKSxpPTA7aTxyLmxlbmd0aDtpKz00KXt2YXIgYT1yW2krM10vMjU1O25baSswXT1yW2krMF0qYSxuW2krMV09cltpKzFdKmEsbltpKzJdPXJbaSsyXSphLG5baSszXT1yW2krM119dGhpcy5pbWc9ZSx0aGlzLmRhdGEmJnRoaXMuZmlyZSgibG9hZCIpfS5iaW5kKHRoaXMpKX1mdW5jdGlvbiBpKCl7fXZhciBhPXQoIi4uL3V0aWwvZXZlbnRlZCIpLG89dCgiLi4vdXRpbC9hamF4Iikscz10KCIuLi91dGlsL2Jyb3dzZXIiKSxsPXQoIi4uL3V0aWwvbWFwYm94Iikubm9ybWFsaXplU3ByaXRlVVJMO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYSksbi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmFzZX0sbi5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5kYXRhfHwhdGhpcy5pbWcpfSxuLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXtpZihzLmRldmljZVBpeGVsUmF0aW8+MSE9PXRoaXMucmV0aW5hKXt2YXIgdD1uZXcgbih0aGlzLmJhc2UpO3Qub24oImxvYWQiLGZ1bmN0aW9uKCl7dGhpcy5pbWc9dC5pbWcsdGhpcy5kYXRhPXQuZGF0YSx0aGlzLnJldGluYT10LnJldGluYX0uYmluZCh0aGlzKSl9fSxpLnByb3RvdHlwZT17eDowLHk6MCx3aWR0aDowLGhlaWdodDowLHBpeGVsUmF0aW86MSxzZGY6ITF9LG4ucHJvdG90eXBlLmdldFNwcml0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxvYWRlZCgpKXJldHVybiBuZXcgaTt2YXIgZT10aGlzLmRhdGEmJnRoaXMuZGF0YVt0XTtyZXR1cm4gZSYmdGhpcy5pbWc/ZTpuZXcgaX19LHsiLi4vdXRpbC9hamF4Ijo0MjMsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL2V2ZW50ZWQiOjQzMiwiLi4vdXRpbC9tYXBib3giOjQzN31dLDM3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjc3Njb2xvcnBhcnNlciIpLnBhcnNlQ1NTQ29sb3IsaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoIi4vc3R5bGVfZnVuY3Rpb24iKSxvPXt9O2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKGEuaXNGdW5jdGlvbkRlZmluaXRpb24oZSkpcmV0dXJuIGkuZXh0ZW5kKHt9LGUse3N0b3BzOmUuc3RvcHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybltlWzBdLHQoZVsxXSldfSl9KTtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCFvW2VdKXt2YXIgcj1uKGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciAiK2UpO29bZV09W3JbMF0vMjU1KnJbM10sclsxXS8yNTUqclszXSxyWzJdLzI1NSpyWzNdLHJbM11dfXJldHVybiBvW2VdfXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciAiK2UpfX0seyIuLi91dGlsL3V0aWwiOjQ0MCwiLi9zdHlsZV9mdW5jdGlvbiI6Mzc4LGNzc2NvbG9ycGFyc2VyOjEwNn1dLDM3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmFuaW1hdGlvbkxvb3A9ZXx8bmV3IG0sdGhpcy5kaXNwYXRjaGVyPW5ldyBwKHJ8fDEsdGhpcyksdGhpcy5zcHJpdGVBdGxhcz1uZXcgbCgxMDI0LDEwMjQpLHRoaXMubGluZUF0bGFzPW5ldyB1KDI1Niw1MTIpLHRoaXMuX2xheWVycz17fSx0aGlzLl9vcmRlcj1bXSx0aGlzLl9ncm91cHM9W10sdGhpcy5zb3VyY2VzPXt9LHRoaXMuem9vbUhpc3Rvcnk9e30sYy5iaW5kQWxsKFsiX2ZvcndhcmRTb3VyY2VFdmVudCIsIl9mb3J3YXJkVGlsZUV2ZW50IiwiX2ZvcndhcmRMYXllckV2ZW50IiwiX3JlZG9QbGFjZW1lbnQiXSx0aGlzKSx0aGlzLl9yZXNldFVwZGF0ZXMoKTt2YXIgbj1mdW5jdGlvbih0LGUpe2lmKHQpcmV0dXJuIHZvaWQgdGhpcy5maXJlKCJlcnJvciIse2Vycm9yOnR9KTtpZighdi5lbWl0RXJyb3JzKHRoaXMsdihlKSkpe3RoaXMuX2xvYWRlZD0hMCx0aGlzLnN0eWxlc2hlZXQ9ZSx0aGlzLnVwZGF0ZUNsYXNzZXMoKTt2YXIgcj1lLnNvdXJjZXM7Zm9yKHZhciBuIGluIHIpdGhpcy5hZGRTb3VyY2UobixyW25dKTtlLnNwcml0ZSYmKHRoaXMuc3ByaXRlPW5ldyBvKGUuc3ByaXRlKSx0aGlzLnNwcml0ZS5vbigibG9hZCIsdGhpcy5maXJlLmJpbmQodGhpcywiY2hhbmdlIikpKSx0aGlzLmdseXBoU291cmNlPW5ldyBzKGUuZ2x5cGhzKSx0aGlzLl9yZXNvbHZlKCksdGhpcy5maXJlKCJsb2FkIil9fS5iaW5kKHRoaXMpOyJzdHJpbmciPT10eXBlb2YgdD9oLmdldEpTT04oZih0KSxuKTpkLmZyYW1lKG4uYmluZCh0aGlzLG51bGwsdCkpLHRoaXMub24oInNvdXJjZS5sb2FkIixmdW5jdGlvbih0KXt2YXIgZT10LnNvdXJjZTtpZihlJiZlLnZlY3RvckxheWVySWRzKWZvcih2YXIgciBpbiB0aGlzLl9sYXllcnMpe3ZhciBuPXRoaXMuX2xheWVyc1tyXTtuLnNvdXJjZT09PWUuaWQmJnRoaXMuX3ZhbGlkYXRlTGF5ZXIobil9fSl9dmFyIGk9dCgiLi4vdXRpbC9ldmVudGVkIiksYT10KCIuL3N0eWxlX2xheWVyIiksbz10KCIuL2ltYWdlX3Nwcml0ZSIpLHM9dCgiLi4vc3ltYm9sL2dseXBoX3NvdXJjZSIpLGw9dCgiLi4vc3ltYm9sL3Nwcml0ZV9hdGxhcyIpLHU9dCgiLi4vcmVuZGVyL2xpbmVfYXRsYXMiKSxjPXQoIi4uL3V0aWwvdXRpbCIpLGg9dCgiLi4vdXRpbC9hamF4IiksZj10KCIuLi91dGlsL21hcGJveCIpLm5vcm1hbGl6ZVN0eWxlVVJMLGQ9dCgiLi4vdXRpbC9icm93c2VyIikscD10KCIuLi91dGlsL2Rpc3BhdGNoZXIiKSxtPXQoIi4vYW5pbWF0aW9uX2xvb3AiKSx2PXQoIi4vdmFsaWRhdGVfc3R5bGUiKSxnPXQoIi4uL3NvdXJjZS9zb3VyY2UiKSx5PXQoIi4uL3NvdXJjZS9xdWVyeV9mZWF0dXJlcyIpLGI9dCgiLi4vc291cmNlL3NvdXJjZV9jYWNoZSIpLHg9dCgiLi9zdHlsZV9zcGVjIiksXz10KCIuL3N0eWxlX2Z1bmN0aW9uIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9Yy5pbmhlcml0KGkse19sb2FkZWQ6ITEsX3ZhbGlkYXRlTGF5ZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zb3VyY2VzW3Quc291cmNlXTt0LnNvdXJjZUxheWVyJiZlJiZlLnZlY3RvckxheWVySWRzJiYtMT09PWUudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZih0LnNvdXJjZUxheWVyKSYmdGhpcy5maXJlKCJlcnJvciIse2Vycm9yOm5ldyBFcnJvcignU291cmNlIGxheWVyICInK3Quc291cmNlTGF5ZXIrJyIgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlICInK2UuaWQrJyIgYXMgc3BlY2lmaWVkIGJ5IHN0eWxlIGxheWVyICInK3QuaWQrJyInKX0pfSxsb2FkZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXJldHVybiExO2lmKE9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZXMuc291cmNlcykubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZXMpaWYoIXRoaXMuc291cmNlc1t0XS5sb2FkZWQoKSlyZXR1cm4hMTtyZXR1cm4hKHRoaXMuc3ByaXRlJiYhdGhpcy5zcHJpdGUubG9hZGVkKCkpfSxfcmVzb2x2ZTpmdW5jdGlvbigpe3ZhciB0LGU7dGhpcy5fbGF5ZXJzPXt9LHRoaXMuX29yZGVyPXRoaXMuc3R5bGVzaGVldC5sYXllcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7Zm9yKHZhciByPTA7cjx0aGlzLnN0eWxlc2hlZXQubGF5ZXJzLmxlbmd0aDtyKyspZT10aGlzLnN0eWxlc2hlZXQubGF5ZXJzW3JdLGUucmVmfHwodD1hLmNyZWF0ZShlKSx0aGlzLl9sYXllcnNbdC5pZF09dCx0Lm9uKCJlcnJvciIsdGhpcy5fZm9yd2FyZExheWVyRXZlbnQpKTtmb3IodmFyIG49MDtuPHRoaXMuc3R5bGVzaGVldC5sYXllcnMubGVuZ3RoO24rKylpZihlPXRoaXMuc3R5bGVzaGVldC5sYXllcnNbbl0sZS5yZWYpe3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZS5yZWYpO3Q9YS5jcmVhdGUoZSxpKSx0aGlzLl9sYXllcnNbdC5pZF09dCx0Lm9uKCJlcnJvciIsdGhpcy5fZm9yd2FyZExheWVyRXZlbnQpfXRoaXMuX2dyb3VwTGF5ZXJzKCksdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKCl9LF9ncm91cExheWVyczpmdW5jdGlvbigpe3ZhciB0O3RoaXMuX2dyb3Vwcz1bXTtmb3IodmFyIGU9MDtlPHRoaXMuX29yZGVyLmxlbmd0aDsrK2Upe3ZhciByPXRoaXMuX2xheWVyc1t0aGlzLl9vcmRlcltlXV07dCYmci5zb3VyY2U9PT10LnNvdXJjZXx8KHQ9W10sdC5zb3VyY2U9ci5zb3VyY2UsdGhpcy5fZ3JvdXBzLnB1c2godCkpLHQucHVzaChyKX19LF91cGRhdGVXb3JrZXJMYXllcnM6ZnVuY3Rpb24odCl7dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCh0PyJ1cGRhdGUgbGF5ZXJzIjoic2V0IGxheWVycyIsdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHQpKX0sX3NlcmlhbGl6ZUxheWVyczpmdW5jdGlvbih0KXt0PXR8fHRoaXMuX29yZGVyO2Zvcih2YXIgZT1bXSxyPXtpbmNsdWRlUmVmUHJvcGVydGllczohMH0sbj0wO248dC5sZW5ndGg7bisrKWUucHVzaCh0aGlzLl9sYXllcnNbdFtuXV0uc2VyaWFsaXplKHIpKTtyZXR1cm4gZX0sX2FwcGx5Q2xhc3NlczpmdW5jdGlvbih0LGUpe2lmKHRoaXMuX2xvYWRlZCl7dD10fHxbXSxlPWV8fHt0cmFuc2l0aW9uOiEwfTt2YXIgcj10aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbnx8e30sbj10aGlzLl91cGRhdGVzLmFsbFBhaW50UHJvcHM/dGhpcy5fbGF5ZXJzOnRoaXMuX3VwZGF0ZXMucGFpbnRQcm9wcztmb3IodmFyIGkgaW4gbil7dmFyIGE9dGhpcy5fbGF5ZXJzW2ldLG89dGhpcy5fdXBkYXRlcy5wYWludFByb3BzW2ldO2lmKHRoaXMuX3VwZGF0ZXMuYWxsUGFpbnRQcm9wc3x8by5hbGwpYS51cGRhdGVQYWludFRyYW5zaXRpb25zKHQsZSxyLHRoaXMuYW5pbWF0aW9uTG9vcCk7ZWxzZSBmb3IodmFyIHMgaW4gbyl0aGlzLl9sYXllcnNbaV0udXBkYXRlUGFpbnRUcmFuc2l0aW9uKHMsdCxlLHIsdGhpcy5hbmltYXRpb25Mb29wKX19fSxfcmVjYWxjdWxhdGU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlcyl0aGlzLnNvdXJjZXNbZV0udXNlZD0hMTt0aGlzLl91cGRhdGVab29tSGlzdG9yeSh0KSx0aGlzLnJhc3RlckZhZGVEdXJhdGlvbj0zMDA7Zm9yKHZhciByIGluIHRoaXMuX2xheWVycyl7dmFyIG49dGhpcy5fbGF5ZXJzW3JdO24ucmVjYWxjdWxhdGUodCx0aGlzLnpvb21IaXN0b3J5KSwhbi5pc0hpZGRlbih0KSYmbi5zb3VyY2UmJih0aGlzLnNvdXJjZXNbbi5zb3VyY2VdLnVzZWQ9ITApfU1hdGguZmxvb3IodGhpcy56KSE9PU1hdGguZmxvb3IodCkmJnRoaXMuYW5pbWF0aW9uTG9vcC5zZXQoMzAwKSx0aGlzLno9dCx0aGlzLmZpcmUoInpvb20iKX0sX3VwZGF0ZVpvb21IaXN0b3J5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuem9vbUhpc3Rvcnk7dm9pZCAwPT09ZS5sYXN0SW50ZWdlclpvb20mJihlLmxhc3RJbnRlZ2VyWm9vbT1NYXRoLmZsb29yKHQpLGUubGFzdEludGVnZXJab29tVGltZT0wLGUubGFzdFpvb209dCksTWF0aC5mbG9vcihlLmxhc3Rab29tKTxNYXRoLmZsb29yKHQpPyhlLmxhc3RJbnRlZ2VyWm9vbT1NYXRoLmZsb29yKHQpLGUubGFzdEludGVnZXJab29tVGltZT1EYXRlLm5vdygpKTpNYXRoLmZsb29yKGUubGFzdFpvb20pPk1hdGguZmxvb3IodCkmJihlLmxhc3RJbnRlZ2VyWm9vbT1NYXRoLmZsb29yKHQrMSksZS5sYXN0SW50ZWdlclpvb21UaW1lPURhdGUubm93KCkpLGUubGFzdFpvb209dH0sX2NoZWNrTG9hZGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoIlN0eWxlIGlzIG5vdCBkb25lIGxvYWRpbmciKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX3VwZGF0ZXMuY2hhbmdlZClyZXR1cm4gdGhpcztpZih0aGlzLl91cGRhdGVzLmFsbExheWVycyl0aGlzLl9ncm91cExheWVycygpLHRoaXMuX3VwZGF0ZVdvcmtlckxheWVycygpO2Vsc2V7dmFyIHI9T2JqZWN0LmtleXModGhpcy5fdXBkYXRlcy5sYXllcnMpO3IubGVuZ3RoJiZ0aGlzLl91cGRhdGVXb3JrZXJMYXllcnMocil9dmFyIG4saT1PYmplY3Qua2V5cyh0aGlzLl91cGRhdGVzLnNvdXJjZXMpO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspdGhpcy5fcmVsb2FkU291cmNlKGlbbl0pO2ZvcihuPTA7bjx0aGlzLl91cGRhdGVzLmV2ZW50cy5sZW5ndGg7bisrKXt2YXIgYT10aGlzLl91cGRhdGVzLmV2ZW50c1tuXTt0aGlzLmZpcmUoYVswXSxhWzFdKX1yZXR1cm4gdGhpcy5fYXBwbHlDbGFzc2VzKHQsZSksdGhpcy5fdXBkYXRlcy5jaGFuZ2VkJiZ0aGlzLmZpcmUoImNoYW5nZSIpLHRoaXMuX3Jlc2V0VXBkYXRlcygpLHRoaXN9LF9yZXNldFVwZGF0ZXM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVzPXtldmVudHM6W10sbGF5ZXJzOnt9LHNvdXJjZXM6e30scGFpbnRQcm9wczp7fX19LGFkZFNvdXJjZTpmdW5jdGlvbih0LGUpe2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksdm9pZCAwIT09dGhpcy5zb3VyY2VzW3RdKXRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgYWxyZWFkeSBhIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtpZighZS50eXBlKXRocm93IG5ldyBFcnJvcigiVGhlIHR5cGUgcHJvcGVydHkgbXVzdCBiZSBkZWZpbmVkLCBidXQgdGhlIG9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHdlcmUgZ2l2ZW46ICIrT2JqZWN0LmtleXMoZSkrIi4iKTtyZXR1cm5bInZlY3RvciIsInJhc3RlciIsImdlb2pzb24iLCJ2aWRlbyIsImltYWdlIl0uaW5kZXhPZihlLnR5cGUpPj0wJiZ0aGlzLl9oYW5kbGVFcnJvcnModi5zb3VyY2UsInNvdXJjZXMuIit0LGUpP3RoaXM6KGU9bmV3IGIodCxlLHRoaXMuZGlzcGF0Y2hlciksdGhpcy5zb3VyY2VzW3RdPWUsZS5zdHlsZT10aGlzLGUub24oImxvYWQiLHRoaXMuX2ZvcndhcmRTb3VyY2VFdmVudCkub24oImVycm9yIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9uKCJjaGFuZ2UiLHRoaXMuX2ZvcndhcmRTb3VyY2VFdmVudCkub24oInRpbGUuYWRkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5sb2FkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5lcnJvciIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub24oInRpbGUucmVtb3ZlIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5zdGF0cyIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCksdGhpcy5fdXBkYXRlcy5ldmVudHMucHVzaChbInNvdXJjZS5hZGQiLHtzb3VyY2U6ZX1dKSx0aGlzLl91cGRhdGVzLmNoYW5nZWQ9ITAsdGhpcyl9LHJlbW92ZVNvdXJjZTpmdW5jdGlvbih0KXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLHZvaWQgMD09PXRoaXMuc291cmNlc1t0XSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTt2YXIgZT10aGlzLnNvdXJjZXNbdF07cmV0dXJuIGRlbGV0ZSB0aGlzLnNvdXJjZXNbdF0sZGVsZXRlIHRoaXMuX3VwZGF0ZXMuc291cmNlc1t0XSxlLm9mZigibG9hZCIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vZmYoImVycm9yIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9mZigiY2hhbmdlIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9mZigidGlsZS5hZGQiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9mZigidGlsZS5sb2FkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUuZXJyb3IiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9mZigidGlsZS5yZW1vdmUiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9mZigidGlsZS5zdGF0cyIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCksdGhpcy5fdXBkYXRlcy5ldmVudHMucHVzaChbInNvdXJjZS5yZW1vdmUiLHtzb3VyY2U6ZX1dKSx0aGlzLl91cGRhdGVzLmNoYW5nZWQ9ITAsdGhpc30sZ2V0U291cmNlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZXNbdF0mJnRoaXMuc291cmNlc1t0XS5nZXRTb3VyY2UoKX0sYWRkTGF5ZXI6ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9jaGVja0xvYWRlZCgpLCEodCBpbnN0YW5jZW9mIGEpKXtpZih0aGlzLl9oYW5kbGVFcnJvcnModi5sYXllciwibGF5ZXJzLiIrdC5pZCx0LCExLHthcnJheUluZGV4Oi0xfSkpcmV0dXJuIHRoaXM7dmFyIHI9dC5yZWYmJnRoaXMuZ2V0TGF5ZXIodC5yZWYpO3Q9YS5jcmVhdGUodCxyKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMYXllcih0KSx0Lm9uKCJlcnJvciIsdGhpcy5fZm9yd2FyZExheWVyRXZlbnQpLHRoaXMuX2xheWVyc1t0LmlkXT10LHRoaXMuX29yZGVyLnNwbGljZShlP3RoaXMuX29yZGVyLmluZGV4T2YoZSk6MS8wLDAsdC5pZCksdGhpcy5fdXBkYXRlcy5hbGxMYXllcnM9ITAsdC5zb3VyY2UmJih0aGlzLl91cGRhdGVzLnNvdXJjZXNbdC5zb3VyY2VdPSEwKSx0aGlzLl91cGRhdGVzLmV2ZW50cy5wdXNoKFsibGF5ZXIuYWRkIix7bGF5ZXI6dH1dKSx0aGlzLnVwZGF0ZUNsYXNzZXModC5pZCl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGU9dGhpcy5fbGF5ZXJzW3RdO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJUaGVyZSBpcyBubyBsYXllciB3aXRoIHRoaXMgSUQiKTtmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1tyXS5yZWY9PT10JiZ0aGlzLnJlbW92ZUxheWVyKHIpO3JldHVybiBlLm9mZigiZXJyb3IiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KSxkZWxldGUgdGhpcy5fbGF5ZXJzW3RdLGRlbGV0ZSB0aGlzLl91cGRhdGVzLmxheWVyc1t0XSxkZWxldGUgdGhpcy5fdXBkYXRlcy5wYWludFByb3BzW3RdLHRoaXMuX29yZGVyLnNwbGljZSh0aGlzLl9vcmRlci5pbmRleE9mKHQpLDEpLHRoaXMuX3VwZGF0ZXMuYWxsTGF5ZXJzPSEwLHRoaXMuX3VwZGF0ZXMuZXZlbnRzLnB1c2goWyJsYXllci5yZW1vdmUiLHtsYXllcjplfV0pLHRoaXMuX3VwZGF0ZXMuY2hhbmdlZD0hMCx0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRSZWZlcmVudExheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0TGF5ZXIodCk7cmV0dXJuIGUucmVmJiYoZT10aGlzLmdldExheWVyKGUucmVmKSksZX0sc2V0TGF5ZXJab29tUmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49dGhpcy5nZXRSZWZlcmVudExheWVyKHQpO3JldHVybiBuLm1pbnpvb209PT1lJiZuLm1heHpvb209PT1yP3RoaXM6KG51bGwhPWUmJihuLm1pbnpvb209ZSksbnVsbCE9ciYmKG4ubWF4em9vbT1yKSx0aGlzLl91cGRhdGVMYXllcihuKSl9LHNldEZpbHRlcjpmdW5jdGlvbih0LGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9dGhpcy5nZXRSZWZlcmVudExheWVyKHQpO3JldHVybiBudWxsIT09ZSYmdGhpcy5faGFuZGxlRXJyb3JzKHYuZmlsdGVyLCJsYXllcnMuIityLmlkKyIuZmlsdGVyIixlKT90aGlzOmMuZGVlcEVxdWFsKHIuZmlsdGVyLGUpP3RoaXM6KHIuZmlsdGVyPWMuY2xvbmUoZSksdGhpcy5fdXBkYXRlTGF5ZXIocikpfSxnZXRGaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZ2V0UmVmZXJlbnRMYXllcih0KS5maWx0ZXJ9LHNldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPXRoaXMuZ2V0UmVmZXJlbnRMYXllcih0KTtyZXR1cm4gYy5kZWVwRXF1YWwobi5nZXRMYXlvdXRQcm9wZXJ0eShlKSxyKT90aGlzOihuLnNldExheW91dFByb3BlcnR5KGUsciksdGhpcy5fdXBkYXRlTGF5ZXIobikpfSxnZXRMYXlvdXRQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldFJlZmVyZW50TGF5ZXIodCkuZ2V0TGF5b3V0UHJvcGVydHkoZSl9LHNldFBhaW50UHJvcGVydHk6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKHQpO2lmKGMuZGVlcEVxdWFsKGkuZ2V0UGFpbnRQcm9wZXJ0eShlLG4pLHIpKXJldHVybiB0aGlzO3ZhciBhPWkuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50KGUpO3JldHVybiBpLnNldFBhaW50UHJvcGVydHkoZSxyLG4pLCEociYmXy5pc0Z1bmN0aW9uRGVmaW5pdGlvbihyKSYmIiR6b29tIiE9PXIucHJvcGVydHkmJnZvaWQgMCE9PXIucHJvcGVydHkpJiZhfHwodGhpcy5fdXBkYXRlcy5sYXllcnNbdF09ITAsaS5zb3VyY2UmJih0aGlzLl91cGRhdGVzLnNvdXJjZXNbaS5zb3VyY2VdPSEwKSksdGhpcy51cGRhdGVDbGFzc2VzKHQsZSl9LGdldFBhaW50UHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSxyKX0sdXBkYXRlQ2xhc3NlczpmdW5jdGlvbih0LGUpe2lmKHRoaXMuX3VwZGF0ZXMuY2hhbmdlZD0hMCx0KXt2YXIgcj10aGlzLl91cGRhdGVzLnBhaW50UHJvcHM7clt0XXx8KHJbdF09e30pLHJbdF1bZXx8ImFsbCJdPSEwfWVsc2UgdGhpcy5fdXBkYXRlcy5hbGxQYWludFByb3BzPSEwO3JldHVybiB0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsY2VudGVyOnRoaXMuc3R5bGVzaGVldC5jZW50ZXIsem9vbTp0aGlzLnN0eWxlc2hlZXQuem9vbSxiZWFyaW5nOnRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLHBpdGNoOnRoaXMuc3R5bGVzaGVldC5waXRjaCxzcHJpdGU6dGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxnbHlwaHM6dGhpcy5zdHlsZXNoZWV0LmdseXBocyx0cmFuc2l0aW9uOnRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLHNvdXJjZXM6Yy5tYXBPYmplY3QodGhpcy5zb3VyY2VzLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSksbGF5ZXJzOnRoaXMuX29yZGVyLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdLnNlcmlhbGl6ZSgpfSx0aGlzKX0sZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXR9KX0sX3VwZGF0ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl91cGRhdGVzLmxheWVyc1t0LmlkXT0hMCx0LnNvdXJjZSYmKHRoaXMuX3VwZGF0ZXMuc291cmNlc1t0LnNvdXJjZV09ITApLHRoaXMuX3VwZGF0ZXMuY2hhbmdlZD0hMCx0aGlzfSxfZmxhdHRlblJlbmRlcmVkRmVhdHVyZXM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9dGhpcy5fb3JkZXIubGVuZ3RoLTE7cj49MDtyLS0pZm9yKHZhciBuPXRoaXMuX29yZGVyW3JdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXVtuXTtpZihhKWZvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKWUucHVzaChhW29dKX1yZXR1cm4gZX0scXVlcnlSZW5kZXJlZEZlYXR1cmVzOmZ1bmN0aW9uKHQsZSxyLG4pe2UmJmUuZmlsdGVyJiZ0aGlzLl9oYW5kbGVFcnJvcnModi5maWx0ZXIsInF1ZXJ5UmVuZGVyZWRGZWF0dXJlcy5maWx0ZXIiLGUuZmlsdGVyLCEwKTt2YXIgaT17fTtpZihlJiZlLmxheWVycylmb3IodmFyIGE9MDthPGUubGF5ZXJzLmxlbmd0aDthKyspe3ZhciBvPWUubGF5ZXJzW2FdO2lbdGhpcy5fbGF5ZXJzW29dLnNvdXJjZV09ITB9dmFyIHM9W107Zm9yKHZhciBsIGluIHRoaXMuc291cmNlcylpZighZS5sYXllcnN8fGlbbF0pe3ZhciB1PXRoaXMuc291cmNlc1tsXSxjPXkucmVuZGVyZWQodSx0aGlzLl9sYXllcnMsdCxlLHIsbik7cy5wdXNoKGMpfXJldHVybiB0aGlzLl9mbGF0dGVuUmVuZGVyZWRGZWF0dXJlcyhzKX0scXVlcnlTb3VyY2VGZWF0dXJlczpmdW5jdGlvbih0LGUpe2UmJmUuZmlsdGVyJiZ0aGlzLl9oYW5kbGVFcnJvcnModi5maWx0ZXIsInF1ZXJ5U291cmNlRmVhdHVyZXMuZmlsdGVyIixlLmZpbHRlciwhMCk7dmFyIHI9dGhpcy5zb3VyY2VzW3RdO3JldHVybiByP3kuc291cmNlKHIsZSk6W119LGFkZFNvdXJjZVR5cGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBnLmdldFR5cGUodCk/cihuZXcgRXJyb3IoJ0Egc291cmNlIHR5cGUgY2FsbGVkICInK3QrJyIgYWxyZWFkeSBleGlzdHMuJykpOihnLnNldFR5cGUodCxlKSxlLndvcmtlclNvdXJjZVVSTD92b2lkIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoImxvYWQgd29ya2VyIHNvdXJjZSIse25hbWU6dCx1cmw6ZS53b3JrZXJTb3VyY2VVUkx9LHIpOnIobnVsbCxudWxsKSl9LF9oYW5kbGVFcnJvcnM6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uP3YudGhyb3dFcnJvcnM6di5lbWl0RXJyb3JzLG89dC5jYWxsKHYsYy5leHRlbmQoe2tleTplLHN0eWxlOnRoaXMuc2VyaWFsaXplKCksdmFsdWU6cixzdHlsZVNwZWM6eH0saSkpO3JldHVybiBhLmNhbGwodix0aGlzLG8pfSxfcmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpfSxfcmVsb2FkU291cmNlOmZ1bmN0aW9uKHQpe3RoaXMuc291cmNlc1t0XS5yZWxvYWQoKX0sX3VwZGF0ZVNvdXJjZXM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuc291cmNlcyl0aGlzLnNvdXJjZXNbZV0udXBkYXRlKHQpfSxfcmVkb1BsYWNlbWVudDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZXMpdGhpcy5zb3VyY2VzW3RdLnJlZG9QbGFjZW1lbnQmJnRoaXMuc291cmNlc1t0XS5yZWRvUGxhY2VtZW50KCl9LF9mb3J3YXJkU291cmNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJzb3VyY2UuIit0LnR5cGUsYy5leHRlbmQoe3NvdXJjZTp0LnRhcmdldC5nZXRTb3VyY2UoKX0sdCkpfSxfZm9yd2FyZFRpbGVFdmVudDpmdW5jdGlvbih0KXt0aGlzLmZpcmUodC50eXBlLGMuZXh0ZW5kKHtzb3VyY2U6dC50YXJnZXR9LHQpKX0sX2ZvcndhcmRMYXllckV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgibGF5ZXIuIit0LnR5cGUsYy5leHRlbmQoe2xheWVyOntpZDp0LnRhcmdldC5pZH19LHQpKX0sImdldCBzcHJpdGUganNvbiI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNwcml0ZTtyLmxvYWRlZCgpP2UobnVsbCx7c3ByaXRlOnIuZGF0YSxyZXRpbmE6ci5yZXRpbmF9KTpyLm9uKCJsb2FkIixmdW5jdGlvbigpe2UobnVsbCx7c3ByaXRlOnIuZGF0YSxyZXRpbmE6ci5yZXRpbmF9KX0pfSwiZ2V0IGljb25zIjpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc3ByaXRlLG49dGhpcy5zcHJpdGVBdGxhcztyLmxvYWRlZCgpPyhuLnNldFNwcml0ZShyKSxuLmFkZEljb25zKHQuaWNvbnMsZSkpOnIub24oImxvYWQiLGZ1bmN0aW9uKCl7Cm4uc2V0U3ByaXRlKHIpLG4uYWRkSWNvbnModC5pY29ucyxlKX0pfSwiZ2V0IGdseXBocyI6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQscixuKXt0JiZjb25zb2xlLmVycm9yKHQpLGFbbl09ciwwPT09LS1pJiZlKG51bGwsYSl9dmFyIG49dC5zdGFja3MsaT1PYmplY3Qua2V5cyhuKS5sZW5ndGgsYT17fTtmb3IodmFyIG8gaW4gbil0aGlzLmdseXBoU291cmNlLmdldFNpbXBsZUdseXBocyhvLG5bb10sdC51aWQscil9fSl9LHsiLi4vcmVuZGVyL2xpbmVfYXRsYXMiOjM1MiwiLi4vc291cmNlL3F1ZXJ5X2ZlYXR1cmVzIjozNjIsIi4uL3NvdXJjZS9zb3VyY2UiOjM2NCwiLi4vc291cmNlL3NvdXJjZV9jYWNoZSI6MzY1LCIuLi9zeW1ib2wvZ2x5cGhfc291cmNlIjozOTcsIi4uL3N5bWJvbC9zcHJpdGVfYXRsYXMiOjQwMiwiLi4vdXRpbC9hamF4Ijo0MjMsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL2Rpc3BhdGNoZXIiOjQzMSwiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvbWFwYm94Ijo0MzcsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL2FuaW1hdGlvbl9sb29wIjozNzMsIi4vaW1hZ2Vfc3ByaXRlIjozNzQsIi4vc3R5bGVfZnVuY3Rpb24iOjM3OCwiLi9zdHlsZV9sYXllciI6Mzc5LCIuL3N0eWxlX3NwZWMiOjM4NiwiLi92YWxpZGF0ZV9zdHlsZSI6Mzg4fV0sMzc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnZhbHVlPXMuY2xvbmUoZSksdGhpcy5pc0Z1bmN0aW9uPWEuaXNGdW5jdGlvbkRlZmluaXRpb24oZSksdGhpcy5qc29uPUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpO3ZhciByPSJjb2xvciI9PT10LnR5cGUmJnRoaXMudmFsdWU/byh0aGlzLnZhbHVlKTplO2lmKHRoaXMuY2FsY3VsYXRlPWFbdC5mdW5jdGlvbnx8InBpZWNld2lzZS1jb25zdGFudCJdKHIpLHRoaXMuaXNGZWF0dXJlQ29uc3RhbnQ9dGhpcy5jYWxjdWxhdGUuaXNGZWF0dXJlQ29uc3RhbnQsdGhpcy5pc1pvb21Db25zdGFudD10aGlzLmNhbGN1bGF0ZS5pc1pvb21Db25zdGFudCwicGllY2V3aXNlLWNvbnN0YW50Ij09PXQuZnVuY3Rpb24mJnQudHJhbnNpdGlvbiYmKHRoaXMuY2FsY3VsYXRlPWkodGhpcy5jYWxjdWxhdGUpKSwhdGhpcy5pc0ZlYXR1cmVDb25zdGFudCYmIXRoaXMuaXNab29tQ29uc3RhbnQpe3RoaXMuc3RvcFpvb21MZXZlbHM9W107Zm9yKHZhciBuPVtdLGw9dGhpcy52YWx1ZS5zdG9wcyx1PTA7dTx0aGlzLnZhbHVlLnN0b3BzLmxlbmd0aDt1Kyspe3ZhciBjPWxbdV1bMF0uem9vbTt0aGlzLnN0b3Bab29tTGV2ZWxzLmluZGV4T2YoYyk8MCYmKHRoaXMuc3RvcFpvb21MZXZlbHMucHVzaChjKSxuLnB1c2goW2Msbi5sZW5ndGhdKSl9dGhpcy5jYWxjdWxhdGVJbnRlcnBvbGF0aW9uVD1hLmludGVycG9sYXRlZCh7c3RvcHM6bixiYXNlOmUuYmFzZX0pfX1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuLGksYSxvPWUuem9vbSxzPWUuem9vbUhpc3RvcnksbD1lLmR1cmF0aW9uLHU9byUxLGM9TWF0aC5taW4oKERhdGUubm93KCktcy5sYXN0SW50ZWdlclpvb21UaW1lKS9sLDEpLGg9MTtyZXR1cm4gbz5zLmxhc3RJbnRlZ2VyWm9vbT8obj11KygxLXUpKmMsaCo9MixpPXQoe3pvb206by0xfSxyKSxhPXQoe3pvb206b30scikpOihuPTEtKDEtYykqdSxhPXQoe3pvb206b30sciksaT10KHt6b29tOm8rMX0sciksaC89Miksdm9pZCAwPT09aXx8dm9pZCAwPT09YT92b2lkIDA6e2Zyb206aSxmcm9tU2NhbGU6aCx0bzphLHRvU2NhbGU6MSx0Om59fX12YXIgYT10KCIuL3N0eWxlX2Z1bmN0aW9uIiksbz10KCIuL3BhcnNlX2NvbG9yIikscz10KCIuLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bn0seyIuLi91dGlsL3V0aWwiOjQ0MCwiLi9wYXJzZV9jb2xvciI6Mzc1LCIuL3N0eWxlX2Z1bmN0aW9uIjozNzh9XSwzNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibWFwYm94LWdsLWZ1bmN0aW9uIik7ci5pbnRlcnBvbGF0ZWQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5pbnRlcnBvbGF0ZWQodCkscj1mdW5jdGlvbih0LHIpe3JldHVybiBlKHQmJnQuem9vbSxyfHx7fSl9O3JldHVybiByLmlzRmVhdHVyZUNvbnN0YW50PWUuaXNGZWF0dXJlQ29uc3RhbnQsci5pc1pvb21Db25zdGFudD1lLmlzWm9vbUNvbnN0YW50LHJ9LHJbInBpZWNld2lzZS1jb25zdGFudCJdPWZ1bmN0aW9uKHQpe3ZhciBlPW5bInBpZWNld2lzZS1jb25zdGFudCJdKHQpLHI9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0JiZ0Lnpvb20scnx8e30pfTtyZXR1cm4gci5pc0ZlYXR1cmVDb25zdGFudD1lLmlzRmVhdHVyZUNvbnN0YW50LHIuaXNab29tQ29uc3RhbnQ9ZS5pc1pvb21Db25zdGFudCxyfSxyLmlzRnVuY3Rpb25EZWZpbml0aW9uPW4uaXNGdW5jdGlvbkRlZmluaXRpb259LHsibWFwYm94LWdsLWZ1bmN0aW9uIjozMDB9XSwzNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc2V0KHQsZSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC52YWx1ZX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4vc3R5bGVfdHJhbnNpdGlvbiIpLHM9dCgiLi9zdHlsZV9kZWNsYXJhdGlvbiIpLGw9dCgiLi9zdHlsZV9zcGVjIiksdT10KCIuL3ZhbGlkYXRlX3N0eWxlIiksYz10KCIuL3BhcnNlX2NvbG9yIiksaD10KCIuLi91dGlsL2V2ZW50ZWQiKTtlLmV4cG9ydHM9bjtuLmNyZWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiBuZXcoe2JhY2tncm91bmQ6dCgiLi9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyIiksY2lyY2xlOnQoIi4vc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyIiksZmlsbDp0KCIuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXIiKSxsaW5lOnQoIi4vc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllciIpLHJhc3Rlcjp0KCIuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllciIpLHN5bWJvbDp0KCIuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllciIpfVsocnx8ZSkudHlwZV0pKGUscil9LG4ucHJvdG90eXBlPWEuaW5oZXJpdChoLHtzZXQ6ZnVuY3Rpb24odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5yZWY9dC5yZWYsdGhpcy5tZXRhZGF0YT10Lm1ldGFkYXRhLHRoaXMudHlwZT0oZXx8dCkudHlwZSx0aGlzLnNvdXJjZT0oZXx8dCkuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9KGV8fHQpWyJzb3VyY2UtbGF5ZXIiXSx0aGlzLm1pbnpvb209KGV8fHQpLm1pbnpvb20sdGhpcy5tYXh6b29tPShlfHx0KS5tYXh6b29tLHRoaXMuZmlsdGVyPShlfHx0KS5maWx0ZXIsdGhpcy5wYWludD17fSx0aGlzLmxheW91dD17fSx0aGlzLl9wYWludFNwZWNpZmljYXRpb25zPWxbInBhaW50XyIrdGhpcy50eXBlXSx0aGlzLl9sYXlvdXRTcGVjaWZpY2F0aW9ucz1sWyJsYXlvdXRfIit0aGlzLnR5cGVdLHRoaXMuX3BhaW50VHJhbnNpdGlvbnM9e30sdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9ucz17fSx0aGlzLl9wYWludERlY2xhcmF0aW9ucz17fSx0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnM9e30sdGhpcy5fbGF5b3V0RnVuY3Rpb25zPXt9O3ZhciByLG47Zm9yKHZhciBpIGluIHQpe3ZhciBhPWkubWF0Y2goL15wYWludCg/OlwuKC4qKSk/JC8pO2lmKGEpe3ZhciBvPWFbMV18fCIiO2ZvcihyIGluIHRbaV0pdGhpcy5zZXRQYWludFByb3BlcnR5KHIsdFtpXVtyXSxvKX19aWYodGhpcy5yZWYpdGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zPWUuX2xheW91dERlY2xhcmF0aW9ucztlbHNlIGZvcihuIGluIHQubGF5b3V0KXRoaXMuc2V0TGF5b3V0UHJvcGVydHkobix0LmxheW91dFtuXSk7Zm9yKHIgaW4gdGhpcy5fcGFpbnRTcGVjaWZpY2F0aW9ucyl0aGlzLnBhaW50W3JdPXRoaXMuZ2V0UGFpbnRWYWx1ZShyKTtmb3IobiBpbiB0aGlzLl9sYXlvdXRTcGVjaWZpY2F0aW9ucyl0aGlzLl91cGRhdGVMYXlvdXRWYWx1ZShuKX0sc2V0TGF5b3V0UHJvcGVydHk6ZnVuY3Rpb24odCxlKXtpZihudWxsPT1lKWRlbGV0ZSB0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF07ZWxzZXt2YXIgcj0ibGF5ZXJzLiIrdGhpcy5pZCsiLmxheW91dC4iK3Q7aWYodGhpcy5faGFuZGxlRXJyb3JzKHUubGF5b3V0UHJvcGVydHkscix0LGUpKXJldHVybjt0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF09bmV3IHModGhpcy5fbGF5b3V0U3BlY2lmaWNhdGlvbnNbdF0sZSl9dGhpcy5fdXBkYXRlTGF5b3V0VmFsdWUodCl9LGdldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF0mJnRoaXMuX2xheW91dERlY2xhcmF0aW9uc1t0XS52YWx1ZX0sZ2V0TGF5b3V0VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2xheW91dFNwZWNpZmljYXRpb25zW3RdLGk9dGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zW3RdO3JldHVybiBpP2kuY2FsY3VsYXRlKGUscik6bi5kZWZhdWx0fSxzZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsocj8nWyJwYWludC4nK3IrJyJdLic6Ii5wYWludC4iKSt0O2lmKGEuZW5kc1dpdGgodCwiLXRyYW5zaXRpb24iKSlpZih0aGlzLl9wYWludFRyYW5zaXRpb25PcHRpb25zW3J8fCIiXXx8KHRoaXMuX3BhaW50VHJhbnNpdGlvbk9wdGlvbnNbcnx8IiJdPXt9KSxudWxsPT09ZXx8dm9pZCAwPT09ZSlkZWxldGUgdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tyfHwiIl1bdF07ZWxzZXtpZih0aGlzLl9oYW5kbGVFcnJvcnModS5wYWludFByb3BlcnR5LG4sdCxlKSlyZXR1cm47dGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tyfHwiIl1bdF09ZX1lbHNlIGlmKHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXXx8KHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXT17fSksbnVsbD09PWV8fHZvaWQgMD09PWUpZGVsZXRlIHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3J8fCIiXVt0XTtlbHNle2lmKHRoaXMuX2hhbmRsZUVycm9ycyh1LnBhaW50UHJvcGVydHksbix0LGUpKXJldHVybjt0aGlzLl9wYWludERlY2xhcmF0aW9uc1tyfHwiIl1bdF09bmV3IHModGhpcy5fcGFpbnRTcGVjaWZpY2F0aW9uc1t0XSxlKX19LGdldFBhaW50UHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwiIixhLmVuZHNXaXRoKHQsIi10cmFuc2l0aW9uIik/dGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tlXSYmdGhpcy5fcGFpbnRUcmFuc2l0aW9uT3B0aW9uc1tlXVt0XTp0aGlzLl9wYWludERlY2xhcmF0aW9uc1tlXSYmdGhpcy5fcGFpbnREZWNsYXJhdGlvbnNbZV1bdF0mJnRoaXMuX3BhaW50RGVjbGFyYXRpb25zW2VdW3RdLnZhbHVlfSxnZXRQYWludFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9wYWludFNwZWNpZmljYXRpb25zW3RdLGk9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4gaT9pLmNhbGN1bGF0ZShlLHIpOiJjb2xvciI9PT1uLnR5cGUmJm4uZGVmYXVsdD9jKG4uZGVmYXVsdCk6bi5kZWZhdWx0fSxnZXRQYWludFZhbHVlU3RvcFpvb21MZXZlbHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4gZT9lLmRlY2xhcmF0aW9uLnN0b3Bab29tTGV2ZWxzOltdfSxnZXRQYWludEludGVycG9sYXRpb25UOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhaW50VHJhbnNpdGlvbnNbdF0uZGVjbGFyYXRpb24uY2FsY3VsYXRlSW50ZXJwb2xhdGlvblQoe3pvb206ZX0pfSxpc1BhaW50VmFsdWVGZWF0dXJlQ29uc3RhbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTtyZXR1cm4hZXx8ZS5kZWNsYXJhdGlvbi5pc0ZlYXR1cmVDb25zdGFudH0saXNMYXlvdXRWYWx1ZUZlYXR1cmVDb25zdGFudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXlvdXREZWNsYXJhdGlvbnNbdF07cmV0dXJuIWV8fGUuaXNGZWF0dXJlQ29uc3RhbnR9LGlzUGFpbnRWYWx1ZVpvb21Db25zdGFudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYWludFRyYW5zaXRpb25zW3RdO3JldHVybiFlfHxlLmRlY2xhcmF0aW9uLmlzWm9vbUNvbnN0YW50fSxpc0hpZGRlbjpmdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLm1pbnpvb20mJnQ8dGhpcy5taW56b29tKXx8KCEhKHRoaXMubWF4em9vbSYmdD49dGhpcy5tYXh6b29tKXx8KCJub25lIj09PXRoaXMubGF5b3V0LnZpc2liaWxpdHl8fDA9PT10aGlzLnBhaW50W3RoaXMudHlwZSsiLW9wYWNpdHkiXSkpfSx1cGRhdGVQYWludFRyYW5zaXRpb25zOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1hLmV4dGVuZCh7fSx0aGlzLl9wYWludERlY2xhcmF0aW9uc1siIl0pLG89MDtvPHQubGVuZ3RoO28rKylhLmV4dGVuZChpLHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3Rbb11dKTt2YXIgcztmb3IocyBpbiBpKXRoaXMuX2FwcGx5UGFpbnREZWNsYXJhdGlvbihzLGlbc10sZSxyLG4pO2ZvcihzIGluIHRoaXMuX3BhaW50VHJhbnNpdGlvbnMpcyBpbiBpfHx0aGlzLl9hcHBseVBhaW50RGVjbGFyYXRpb24ocyxudWxsLGUscixuKX0sdXBkYXRlUGFpbnRUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPXRoaXMuX3BhaW50RGVjbGFyYXRpb25zWyIiXVt0XSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPXRoaXMuX3BhaW50RGVjbGFyYXRpb25zW2Vbb11dO3MmJnNbdF0mJihhPXNbdF0pfXRoaXMuX2FwcGx5UGFpbnREZWNsYXJhdGlvbih0LGEscixuLGkpfSxyZWNhbGN1bGF0ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLl9wYWludFRyYW5zaXRpb25zKXRoaXMucGFpbnRbcl09dGhpcy5nZXRQYWludFZhbHVlKHIse3pvb206dCx6b29tSGlzdG9yeTplfSk7Zm9yKHZhciBuIGluIHRoaXMuX2xheW91dEZ1bmN0aW9ucyl0aGlzLmxheW91dFtuXT10aGlzLmdldExheW91dFZhbHVlKG4se3pvb206dCx6b29tSGlzdG9yeTplfSl9LHNlcmlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgZT17aWQ6dGhpcy5pZCxyZWY6dGhpcy5yZWYsbWV0YWRhdGE6dGhpcy5tZXRhZGF0YSxtaW56b29tOnRoaXMubWluem9vbSxtYXh6b29tOnRoaXMubWF4em9vbX07Zm9yKHZhciByIGluIHRoaXMuX3BhaW50RGVjbGFyYXRpb25zKXtlWyIiPT09cj8icGFpbnQiOiJwYWludC4iK3JdPWEubWFwT2JqZWN0KHRoaXMuX3BhaW50RGVjbGFyYXRpb25zW3JdLGkpfXJldHVybighdGhpcy5yZWZ8fHQmJnQuaW5jbHVkZVJlZlByb3BlcnRpZXMpJiZhLmV4dGVuZChlLHt0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5zb3VyY2UsInNvdXJjZS1sYXllciI6dGhpcy5zb3VyY2VMYXllcixmaWx0ZXI6dGhpcy5maWx0ZXIsbGF5b3V0OmEubWFwT2JqZWN0KHRoaXMuX2xheW91dERlY2xhcmF0aW9ucyxpKX0pLGEuZmlsdGVyT2JqZWN0KGUsZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwIT09dCYmISgibGF5b3V0Ij09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfSl9LF9hcHBseVBhaW50RGVjbGFyYXRpb246ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbD1yLnRyYW5zaXRpb24/dGhpcy5fcGFpbnRUcmFuc2l0aW9uc1t0XTp2b2lkIDAsdT10aGlzLl9wYWludFNwZWNpZmljYXRpb25zW3RdO2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1lfHwoZT1uZXcgcyh1LHUuZGVmYXVsdCkpLCFsfHxsLmRlY2xhcmF0aW9uLmpzb24hPT1lLmpzb24pe3ZhciBjPWEuZXh0ZW5kKHtkdXJhdGlvbjozMDAsZGVsYXk6MH0sbix0aGlzLmdldFBhaW50UHJvcGVydHkodCsiLXRyYW5zaXRpb24iKSksaD10aGlzLl9wYWludFRyYW5zaXRpb25zW3RdPW5ldyBvKHUsZSxsLGMpO2guaW5zdGFudCgpfHwoaC5sb29wSUQ9aS5zZXQoaC5lbmRUaW1lLURhdGUubm93KCkpKSxsJiZpLmNhbmNlbChsLmxvb3BJRCl9fSxfdXBkYXRlTGF5b3V0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbGF5b3V0RGVjbGFyYXRpb25zW3RdO2UmJmUuaXNGdW5jdGlvbj90aGlzLl9sYXlvdXRGdW5jdGlvbnNbdF09ITA6KGRlbGV0ZSB0aGlzLl9sYXlvdXRGdW5jdGlvbnNbdF0sdGhpcy5sYXlvdXRbdF09dGhpcy5nZXRMYXlvdXRWYWx1ZSh0KSl9LF9oYW5kbGVFcnJvcnM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHUuZW1pdEVycm9ycyh0aGlzLHQuY2FsbCh1LHtrZXk6ZSxsYXllclR5cGU6dGhpcy50eXBlLG9iamVjdEtleTpyLHZhbHVlOm4sc3R5bGVTcGVjOmwsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9fSkpfX0pfSx7Ii4uL3V0aWwvZXZlbnRlZCI6NDMyLCIuLi91dGlsL3V0aWwiOjQ0MCwiLi9wYXJzZV9jb2xvciI6Mzc1LCIuL3N0eWxlX2RlY2xhcmF0aW9uIjozNzcsIi4vc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllciI6MzgwLCIuL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllciI6MzgxLCIuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXIiOjM4MiwiLi9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyIjozODMsIi4vc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyIjozODQsIi4vc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyIjozODUsIi4vc3R5bGVfc3BlYyI6Mzg2LCIuL3N0eWxlX3RyYW5zaXRpb24iOjM4NywiLi92YWxpZGF0ZV9zdHlsZSI6Mzg4fV0sMzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi8uLi91dGlsL3V0aWwiKSxhPXQoIi4uL3N0eWxlX2xheWVyIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9aS5pbmhlcml0KGEse30pfSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9zdHlsZV9sYXllciI6Mzc5fV0sMzgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi8uLi91dGlsL3V0aWwiKSxhPXQoIi4uL3N0eWxlX2xheWVyIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9aS5pbmhlcml0KGEse30pfSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9zdHlsZV9sYXllciI6Mzc5fV0sMzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXthLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgaT10KCIuLi8uLi91dGlsL3V0aWwiKSxhPXQoIi4uL3N0eWxlX2xheWVyIik7bi5wcm90b3R5cGU9aS5pbmhlcml0KGEse2dldFBhaW50VmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5nZXRQYWludFZhbHVlLmNhbGwodGhpcywiZmlsbC1jb2xvciIsZSxyKTphLnByb3RvdHlwZS5nZXRQYWludFZhbHVlLmNhbGwodGhpcyx0LGUscil9LGdldFBhaW50VmFsdWVTdG9wWm9vbUxldmVsczpmdW5jdGlvbih0KXtyZXR1cm4iZmlsbC1vdXRsaW5lLWNvbG9yIj09PXQmJnZvaWQgMD09PXRoaXMuZ2V0UGFpbnRQcm9wZXJ0eSgiZmlsbC1vdXRsaW5lLWNvbG9yIik/YS5wcm90b3R5cGUuZ2V0UGFpbnRWYWx1ZVN0b3Bab29tTGV2ZWxzLmNhbGwodGhpcywiZmlsbC1jb2xvciIpOmEucHJvdG90eXBlLmdldFBhaW50VmFsdWVTdG9wWm9vbUxldmVscy5jYWxsKHRoaXMsYXJndW1lbnRzKX0sZ2V0UGFpbnRJbnRlcnBvbGF0aW9uVDpmdW5jdGlvbih0LGUpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5nZXRQYWludEludGVycG9sYXRpb25ULmNhbGwodGhpcywiZmlsbC1jb2xvciIsZSk6YS5wcm90b3R5cGUuZ2V0UGFpbnRJbnRlcnBvbGF0aW9uVC5jYWxsKHRoaXMsdCxlKX0saXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50OmZ1bmN0aW9uKHQpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5pc1BhaW50VmFsdWVGZWF0dXJlQ29uc3RhbnQuY2FsbCh0aGlzLCJmaWxsLWNvbG9yIik6YS5wcm90b3R5cGUuaXNQYWludFZhbHVlRmVhdHVyZUNvbnN0YW50LmNhbGwodGhpcyx0KX0saXNQYWludFZhbHVlWm9vbUNvbnN0YW50OmZ1bmN0aW9uKHQpe3JldHVybiJmaWxsLW91dGxpbmUtY29sb3IiPT09dCYmdm9pZCAwPT09dGhpcy5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT9hLnByb3RvdHlwZS5pc1BhaW50VmFsdWVab29tQ29uc3RhbnQuY2FsbCh0aGlzLCJmaWxsLWNvbG9yIik6YS5wcm90b3R5cGUuaXNQYWludFZhbHVlWm9vbUNvbnN0YW50LmNhbGwodGhpcyx0KX19KSxlLmV4cG9ydHM9bn0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vc3R5bGVfbGF5ZXIiOjM3OX1dLDM4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHtnZXRQYWludFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hLnByb3RvdHlwZS5nZXRQYWludFZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihuJiYibGluZS1kYXNoYXJyYXkiPT09dCl7dmFyIGk9TWF0aC5mbG9vcihlLnpvb20pO3RoaXMuX2Zsb29yZWRab29tIT09aSYmKHRoaXMuX2Zsb29yZWRab29tPWksdGhpcy5fZmxvb3JlZExpbmVXaWR0aD10aGlzLmdldFBhaW50VmFsdWUoImxpbmUtd2lkdGgiLGUscikpLG4uZnJvbVNjYWxlKj10aGlzLl9mbG9vcmVkTGluZVdpZHRoLG4udG9TY2FsZSo9dGhpcy5fZmxvb3JlZExpbmVXaWR0aH1yZXR1cm4gbn19KX0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vc3R5bGVfbGF5ZXIiOjM3OX1dLDM4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHt9KX0seyIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi4vc3R5bGVfbGF5ZXIiOjM3OX1dLDM4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7YS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi9zdHlsZV9sYXllciIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPWkuaW5oZXJpdChhLHtpc0hpZGRlbjpmdW5jdGlvbigpe2lmKGEucHJvdG90eXBlLmlzSGlkZGVuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm4hMDt2YXIgdD0wPT09dGhpcy5wYWludFsidGV4dC1vcGFjaXR5Il18fCF0aGlzLmxheW91dFsidGV4dC1maWVsZCJdLGU9MD09PXRoaXMucGFpbnRbImljb24tb3BhY2l0eSJdfHwhdGhpcy5sYXlvdXRbImljb24taW1hZ2UiXTtyZXR1cm4hKCF0fHwhZSl9LGdldExheW91dFZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4oInRleHQtcm90YXRpb24tYWxpZ25tZW50IiE9PXR8fCJsaW5lIiE9PXRoaXMuZ2V0TGF5b3V0VmFsdWUoInN5bWJvbC1wbGFjZW1lbnQiLGUscil8fHRoaXMuZ2V0TGF5b3V0UHJvcGVydHkoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikpJiYoImljb24tcm90YXRpb24tYWxpZ25tZW50IiE9PXR8fCJsaW5lIiE9PXRoaXMuZ2V0TGF5b3V0VmFsdWUoInN5bWJvbC1wbGFjZW1lbnQiLGUscil8fHRoaXMuZ2V0TGF5b3V0UHJvcGVydHkoImljb24tcm90YXRpb24tYWxpZ25tZW50IikpPyJ0ZXh0LXBpdGNoLWFsaWdubWVudCIhPT10fHx0aGlzLmdldExheW91dFByb3BlcnR5KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpP2EucHJvdG90eXBlLmdldExheW91dFZhbHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmdldExheW91dFZhbHVlKCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpOiJtYXAifX0pfSx7Ii4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuLi9zdHlsZV9sYXllciI6Mzc5fV0sMzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCJtYXBib3gtZ2wtc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0Lm1pbiIpfSx7Im1hcGJveC1nbC1zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QubWluIjozMjN9XSwzODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLmRlY2xhcmF0aW9uPWUsdGhpcy5zdGFydFRpbWU9dGhpcy5lbmRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLCJwaWVjZXdpc2UtY29uc3RhbnQiPT09dC5mdW5jdGlvbiYmdC50cmFuc2l0aW9uP3RoaXMuaW50ZXJwPWk6dGhpcy5pbnRlcnA9b1t0LnR5cGVdLHRoaXMub2xkVHJhbnNpdGlvbj1yLHRoaXMuZHVyYXRpb249bi5kdXJhdGlvbnx8MCx0aGlzLmRlbGF5PW4uZGVsYXl8fDAsdGhpcy5pbnN0YW50KCl8fCh0aGlzLmVuZFRpbWU9dGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlvbit0aGlzLmRlbGF5LHRoaXMuZWFzZT1hLmVhc2VDdWJpY0luT3V0KSxyJiZyLmVuZFRpbWU8PXRoaXMuc3RhcnRUaW1lJiZkZWxldGUgci5vbGRUcmFuc2l0aW9ufWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiB2b2lkIDA9PT0odCYmdC50byl8fHZvaWQgMD09PShlJiZlLnRvKT92b2lkIDA6e2Zyb206dC50byxmcm9tU2NhbGU6dC50b1NjYWxlLHRvOmUudG8sdG9TY2FsZTplLnRvU2NhbGUsdDpyfX12YXIgYT10KCIuLi91dGlsL3V0aWwiKSxvPXQoIi4uL3V0aWwvaW50ZXJwb2xhdGUiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5pbnN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub2xkVHJhbnNpdGlvbnx8IXRoaXMuaW50ZXJwfHwwPT09dGhpcy5kdXJhdGlvbiYmMD09PXRoaXMuZGVsYXl9LG4ucHJvdG90eXBlLmNhbGN1bGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZGVjbGFyYXRpb24uY2FsY3VsYXRlKGEuZXh0ZW5kKHt9LHQse2R1cmF0aW9uOnRoaXMuZHVyYXRpb259KSxlKTtpZih0aGlzLmluc3RhbnQoKSlyZXR1cm4gcjt2YXIgbj10LnRpbWV8fERhdGUubm93KCk7aWYobjx0aGlzLmVuZFRpbWUpe3ZhciBpPXRoaXMub2xkVHJhbnNpdGlvbi5jYWxjdWxhdGUoYS5leHRlbmQoe30sdCx7dGltZTp0aGlzLnN0YXJ0VGltZX0pLGUpLG89dGhpcy5lYXNlKChuLXRoaXMuc3RhcnRUaW1lLXRoaXMuZGVsYXkpL3RoaXMuZHVyYXRpb24pO3I9dGhpcy5pbnRlcnAoaSxyLG8pfXJldHVybiByfX0seyIuLi91dGlsL2ludGVycG9sYXRlIjo0MzQsIi4uL3V0aWwvdXRpbCI6NDQwfV0sMzg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCJtYXBib3gtZ2wtc3R5bGUtc3BlYy9saWIvdmFsaWRhdGVfc3R5bGUubWluIiksZS5leHBvcnRzLmVtaXRFcnJvcnM9ZnVuY3Rpb24odCxlKXtpZihlJiZlLmxlbmd0aCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdC5maXJlKCJlcnJvciIse2Vycm9yOm5ldyBFcnJvcihlW3JdLm1lc3NhZ2UpfSk7cmV0dXJuITB9cmV0dXJuITF9LGUuZXhwb3J0cy50aHJvd0Vycm9ycz1mdW5jdGlvbih0LGUpe2lmKGUpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhyb3cgbmV3IEVycm9yKGVbcl0ubWVzc2FnZSl9fSx7Im1hcGJveC1nbC1zdHlsZS1zcGVjL2xpYi92YWxpZGF0ZV9zdHlsZS5taW4iOjMyMn1dLDM4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMueD10LHRoaXMueT1lLHRoaXMuYW5nbGU9cix2b2lkIDAhPT1uJiYodGhpcy5zZWdtZW50PW4pfXZhciBpPXQoInBvaW50LWdlb21ldHJ5Iik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy54LHRoaXMueSx0aGlzLmFuZ2xlLHRoaXMuc2VnbWVudCl9fSx7InBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe2lmKHZvaWQgMD09PWUuc2VnbWVudClyZXR1cm4hMDtmb3IodmFyIGE9ZSxvPWUuc2VnbWVudCsxLHM9MDtzPi1yLzI7KXtpZigtLW88MClyZXR1cm4hMTtzLT10W29dLmRpc3QoYSksYT10W29dfXMrPXRbb10uZGlzdCh0W28rMV0pLG8rKztmb3IodmFyIGw9W10sdT0wO3M8ci8yOyl7dmFyIGM9dFtvLTFdLGg9dFtvXSxmPXRbbysxXTtpZighZilyZXR1cm4hMTt2YXIgZD1jLmFuZ2xlVG8oaCktaC5hbmdsZVRvKGYpO2ZvcihkPU1hdGguYWJzKChkKzMqTWF0aC5QSSklKDIqTWF0aC5QSSktTWF0aC5QSSksbC5wdXNoKHtkaXN0YW5jZTpzLGFuZ2xlRGVsdGE6ZH0pLHUrPWQ7cy1sWzBdLmRpc3RhbmNlPm47KXUtPWwuc2hpZnQoKS5hbmdsZURlbHRhO2lmKHU+aSlyZXR1cm4hMTtvKysscys9aC5kaXN0KGYpfXJldHVybiEwfWUuZXhwb3J0cz1ufSx7fV0sMzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixhKXtmb3IodmFyIG89W10scz0wO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgbCx1PXRbc10sYz0wO2M8dS5sZW5ndGgtMTtjKyspe3ZhciBoPXVbY10sZj11W2MrMV07aC54PGUmJmYueDxlfHwoaC54PGU/aD1uZXcgaShlLGgueSsoZi55LWgueSkqKChlLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCk6Zi54PGUmJihmPW5ldyBpKGUsaC55KyhmLnktaC55KSooKGUtaC54KS8oZi54LWgueCkpKS5fcm91bmQoKSksaC55PHImJmYueTxyfHwoaC55PHI/aD1uZXcgaShoLngrKGYueC1oLngpKigoci1oLnkpLyhmLnktaC55KSkscikuX3JvdW5kKCk6Zi55PHImJihmPW5ldyBpKGgueCsoZi54LWgueCkqKChyLWgueSkvKGYueS1oLnkpKSxyKS5fcm91bmQoKSksaC54Pj1uJiZmLng+PW58fChoLng+PW4/aD1uZXcgaShuLGgueSsoZi55LWgueSkqKChuLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCk6Zi54Pj1uJiYoZj1uZXcgaShuLGgueSsoZi55LWgueSkqKChuLWgueCkvKGYueC1oLngpKSkuX3JvdW5kKCkpLGgueT49YSYmZi55Pj1hfHwoaC55Pj1hP2g9bmV3IGkoaC54KyhmLngtaC54KSooKGEtaC55KS8oZi55LWgueSkpLGEpLl9yb3VuZCgpOmYueT49YSYmKGY9bmV3IGkoaC54KyhmLngtaC54KSooKGEtaC55KS8oZi55LWgueSkpLGEpLl9yb3VuZCgpKSxsJiZoLmVxdWFscyhsW2wubGVuZ3RoLTFdKXx8KGw9W2hdLG8ucHVzaChsKSksbC5wdXNoKGYpKSkpKX1yZXR1cm4gb312YXIgaT10KCJwb2ludC1nZW9tZXRyeSIpO2UuZXhwb3J0cz1ufSx7InBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiKSxpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPWUuZXhwb3J0cz1uZXcgbih7bWVtYmVyczpbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDEifSx7dHlwZToiSW50MTYiLG5hbWU6InkxIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MiJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTIifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibWF4U2NhbGUifSx7dHlwZToiVWludDMyIixuYW1lOiJmZWF0dXJlSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJzb3VyY2VMYXllckluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiYnVja2V0SW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImJib3gwIn0se3R5cGU6IkludDE2IixuYW1lOiJiYm94MSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToiYmJveDIifSx7dHlwZToiSW50MTYiLG5hbWU6ImJib3gzIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6InBsYWNlbWVudFNjYWxlIn1dfSk7aS5leHRlbmRBbGwoby5wcm90b3R5cGUuU3RydWN0VHlwZS5wcm90b3R5cGUse2dldCBhbmNob3JQb2ludCgpe3JldHVybiBuZXcgYSh0aGlzLmFuY2hvclBvaW50WCx0aGlzLmFuY2hvclBvaW50WSl9fSl9LHsiLi4vdXRpbC9zdHJ1Y3RfYXJyYXkiOjQzOCwiLi4vdXRpbC91dGlsIjo0NDAsInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSwzOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMsbCx1LGMpe3ZhciBoPW8udG9wKnMtbCxmPW8uYm90dG9tKnMrbCxkPW8ubGVmdCpzLWwscD1vLnJpZ2h0KnMrbDtpZih0aGlzLmJveFN0YXJ0SW5kZXg9dC5sZW5ndGgsdSl7dmFyIG09Zi1oLHY9cC1kO2lmKG0+MClpZihtPU1hdGgubWF4KDEwKnMsbSksYyl7dmFyIGc9ZVtyLnNlZ21lbnQrMV0uc3ViKGVbci5zZWdtZW50XSkuX3VuaXQoKS5fbXVsdCh2KSx5PVtyLnN1YihnKSxyLmFkZChnKV07dGhpcy5fYWRkTGluZUNvbGxpc2lvbkJveGVzKHQseSxyLDAsdixtLG4saSxhKX1lbHNlIHRoaXMuX2FkZExpbmVDb2xsaXNpb25Cb3hlcyh0LGUscixyLnNlZ21lbnQsdixtLG4saSxhKX1lbHNlIHQuZW1wbGFjZUJhY2soci54LHIueSxkLGgscCxmLDEvMCxuLGksYSwwLDAsMCwwLDApO3RoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2FkZExpbmVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7dmFyIHU9YS8yLGM9TWF0aC5mbG9vcihpL3UpLGg9LWEvMixmPXRoaXMuYm94ZXMsZD1yLHA9bisxLG09aDtkb3tpZigtLXA8MClyZXR1cm4gZjttLT1lW3BdLmRpc3QoZCksZD1lW3BdfXdoaWxlKG0+LWkvMik7Zm9yKHZhciB2PWVbcF0uZGlzdChlW3ArMV0pLGc9MDtnPGM7ZysrKXtmb3IodmFyIHk9LWkvMitnKnU7bSt2PHk7KXtpZihtKz12LCsrcCsxPj1lLmxlbmd0aClyZXR1cm4gZjt2PWVbcF0uZGlzdChlW3ArMV0pfXZhciBiPXktbSx4PWVbcF0sXz1lW3ArMV0sdz1fLnN1Yih4KS5fdW5pdCgpLl9tdWx0KGIpLl9hZGQoeCkuX3JvdW5kKCksTT1NYXRoLm1heChNYXRoLmFicyh5LWgpLXUvMiwwKSxrPWkvMi9NO3QuZW1wbGFjZUJhY2sody54LHcueSwtYS8yLC1hLzIsYS8yLGEvMixrLG8scyxsLDAsMCwwLDAsMCl9cmV0dXJuIGZ9fSx7fV0sMzk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIG49dDtyPWUsdD1uLmFuZ2xlLGU9bi5waXRjaCx0aGlzLmdyaWQ9bmV3IG8obi5ncmlkKSx0aGlzLmlnbm9yZWRHcmlkPW5ldyBvKG4uaWdub3JlZEdyaWQpfWVsc2UgdGhpcy5ncmlkPW5ldyBvKGEsMTIsNiksdGhpcy5pZ25vcmVkR3JpZD1uZXcgbyhhLDEyLDApO3RoaXMuYW5nbGU9dCx0aGlzLnBpdGNoPWU7dmFyIGk9TWF0aC5zaW4odCkscz1NYXRoLmNvcyh0KTtpZih0aGlzLnJvdGF0aW9uTWF0cml4PVtzLC1pLGksc10sdGhpcy5yZXZlcnNlUm90YXRpb25NYXRyaXg9W3MsaSwtaSxzXSx0aGlzLnlTdHJldGNoPTEvTWF0aC5jb3MoZS8xODAqTWF0aC5QSSksdGhpcy55U3RyZXRjaD1NYXRoLnBvdyh0aGlzLnlTdHJldGNoLDEuMyksdGhpcy5jb2xsaXNpb25Cb3hBcnJheT1yLDA9PT1yLmxlbmd0aCl7ci5lbXBsYWNlQmFjaygpO3IuZW1wbGFjZUJhY2soMCwwLDAsLTMyNzY3LDAsMzI3NjcsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApLHIuZW1wbGFjZUJhY2soYSwwLDAsLTMyNzY3LDAsMzI3NjcsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApLHIuZW1wbGFjZUJhY2soMCwwLC0zMjc2NywwLDMyNzY3LDAsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApLHIuZW1wbGFjZUJhY2soMCxhLC0zMjc2NywwLDMyNzY3LDAsMzI3NjcsMCwwLDAsMCwwLDAsMCwwLDApfXRoaXMudGVtcENvbGxpc2lvbkJveD1yLmdldCgwKSx0aGlzLmVkZ2VzPVtyLmdldCgxKSxyLmdldCgyKSxyLmdldCgzKSxyLmdldCg0KV19dmFyIGk9dCgicG9pbnQtZ2VvbWV0cnkiKSxhPXQoIi4uL2RhdGEvYnVja2V0IikuRVhURU5ULG89dCgiZ3JpZC1pbmRleCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PXthbmdsZTp0aGlzLmFuZ2xlLHBpdGNoOnRoaXMucGl0Y2gsZ3JpZDp0aGlzLmdyaWQudG9BcnJheUJ1ZmZlcigpLGlnbm9yZWRHcmlkOnRoaXMuaWdub3JlZEdyaWQudG9BcnJheUJ1ZmZlcigpfTtyZXR1cm57ZGF0YTp0LHRyYW5zZmVyYWJsZXM6W3QuZ3JpZCx0Lmlnbm9yZWRHcmlkXX19LG4ucHJvdG90eXBlLm1pblNjYWxlPS4yNSxuLnByb3RvdHlwZS5tYXhTY2FsZT0yLG4ucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uRmVhdHVyZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMuY29sbGlzaW9uQm94QXJyYXksYT10aGlzLm1pblNjYWxlLG89dGhpcy5yb3RhdGlvbk1hdHJpeCxzPXRoaXMueVN0cmV0Y2gsbD10LmJveFN0YXJ0SW5kZXg7bDx0LmJveEVuZEluZGV4O2wrKyl7dmFyIHU9bi5nZXQobCksYz11LmFuY2hvclBvaW50Ll9tYXRNdWx0KG8pLGg9Yy54LGY9Yy55LGQ9aCt1LngxLHA9Zit1LnkxKnMsbT1oK3UueDIsdj1mK3UueTIqcztpZih1LmJib3gwPWQsdS5iYm94MT1wLHUuYmJveDI9bSx1LmJib3gzPXYsIWUpZm9yKHZhciBnPXRoaXMuZ3JpZC5xdWVyeShkLHAsbSx2KSx5PTA7eTxnLmxlbmd0aDt5Kyspe3ZhciBiPW4uZ2V0KGdbeV0pLHg9Yi5hbmNob3JQb2ludC5fbWF0TXVsdChvKTtpZigoYT10aGlzLmdldFBsYWNlbWVudFNjYWxlKGEsYyx1LHgsYikpPj10aGlzLm1heFNjYWxlKXJldHVybiBhfWlmKHIpe3ZhciBfO2lmKHRoaXMuYW5nbGUpe3ZhciB3PXRoaXMucmV2ZXJzZVJvdGF0aW9uTWF0cml4LE09bmV3IGkodS54MSx1LnkxKS5tYXRNdWx0KHcpLGs9bmV3IGkodS54Mix1LnkxKS5tYXRNdWx0KHcpLEE9bmV3IGkodS54MSx1LnkyKS5tYXRNdWx0KHcpLFQ9bmV3IGkodS54Mix1LnkyKS5tYXRNdWx0KHcpO189dGhpcy50ZW1wQ29sbGlzaW9uQm94LF8uYW5jaG9yUG9pbnRYPXUuYW5jaG9yUG9pbnQueCxfLmFuY2hvclBvaW50WT11LmFuY2hvclBvaW50LnksXy54MT1NYXRoLm1pbihNLngsay54LEEueCxULngpLF8ueTE9TWF0aC5taW4oTS55LGsueCxBLngsVC54KSxfLngyPU1hdGgubWF4KE0ueCxrLngsQS54LFQueCksXy55Mj1NYXRoLm1heChNLnksay54LEEueCxULngpLF8ubWF4U2NhbGU9dS5tYXhTY2FsZX1lbHNlIF89dTtmb3IodmFyIFM9MDtTPHRoaXMuZWRnZXMubGVuZ3RoO1MrKyl7dmFyIEU9dGhpcy5lZGdlc1tTXTtpZigoYT10aGlzLmdldFBsYWNlbWVudFNjYWxlKGEsdS5hbmNob3JQb2ludCxfLEUuYW5jaG9yUG9pbnQsRSkpPj10aGlzLm1heFNjYWxlKXJldHVybiBhfX19cmV0dXJuIGF9LG4ucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzPWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIG89e30scz1bXSxsPXRoaXMuY29sbGlzaW9uQm94QXJyYXksdT10aGlzLnJvdGF0aW9uTWF0cml4LGM9bmV3IGkodCxlKS5fbWF0TXVsdCh1KSxoPXRoaXMudGVtcENvbGxpc2lvbkJveDtoLmFuY2hvclg9Yy54LGguYW5jaG9yWT1jLnksaC54MT0wLGgueTE9MCxoLngyPXItdCxoLnkyPW4tZSxoLm1heFNjYWxlPWEsYT1oLm1heFNjYWxlO2Zvcih2YXIgZj1bYy54K2gueDEvYSxjLnkraC55MS9hKnRoaXMueVN0cmV0Y2gsYy54K2gueDIvYSxjLnkraC55Mi9hKnRoaXMueVN0cmV0Y2hdLGQ9dGhpcy5ncmlkLnF1ZXJ5KGZbMF0sZlsxXSxmWzJdLGZbM10pLHA9dGhpcy5pZ25vcmVkR3JpZC5xdWVyeShmWzBdLGZbMV0sZlsyXSxmWzNdKSxtPTA7bTxwLmxlbmd0aDttKyspZC5wdXNoKHBbbV0pO2Zvcih2YXIgdj0wO3Y8ZC5sZW5ndGg7disrKXt2YXIgZz1sLmdldChkW3ZdKSx5PWcuc291cmNlTGF5ZXJJbmRleCxiPWcuZmVhdHVyZUluZGV4O2lmKHZvaWQgMD09PW9beV0mJihvW3ldPXt9KSwhb1t5XVtiXSl7dmFyIHg9Zy5hbmNob3JQb2ludC5tYXRNdWx0KHUpO3RoaXMuZ2V0UGxhY2VtZW50U2NhbGUodGhpcy5taW5TY2FsZSxjLGgseCxnKT49YSYmKG9beV1bYl09ITAscy5wdXNoKGRbdl0pKX19cmV0dXJuIHN9LG4ucHJvdG90eXBlLmdldFBsYWNlbWVudFNjYWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ZS54LW4ueCxvPWUueS1uLnkscz0oaS54MS1yLngyKS9hLGw9KGkueDItci54MSkvYSx1PShpLnkxLXIueTIpKnRoaXMueVN0cmV0Y2gvbyxjPShpLnkyLXIueTEpKnRoaXMueVN0cmV0Y2gvbzsoaXNOYU4ocyl8fGlzTmFOKGwpKSYmKHM9bD0xKSwoaXNOYU4odSl8fGlzTmFOKGMpKSYmKHU9Yz0xKTt2YXIgaD1NYXRoLm1pbihNYXRoLm1heChzLGwpLE1hdGgubWF4KHUsYykpLGY9aS5tYXhTY2FsZSxkPXIubWF4U2NhbGU7cmV0dXJuIGg+ZiYmKGg9ZiksaD5kJiYoaD1kKSxoPnQmJmg+PWkucGxhY2VtZW50U2NhbGUmJih0PWgpLHR9LG4ucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkZlYXR1cmU9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkLGk9dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxhPXQuYm94U3RhcnRJbmRleDthPHQuYm94RW5kSW5kZXg7YSsrKXt2YXIgbz1pLmdldChhKTtvLnBsYWNlbWVudFNjYWxlPWUsZTx0aGlzLm1heFNjYWxlJiZuLmluc2VydChhLG8uYmJveDAsby5iYm94MSxvLmJib3gyLG8uYmJveDMpfX19LHsiLi4vZGF0YS9idWNrZXQiOjMyNywiZ3JpZC1pbmRleCI6Mjg1LCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sMzk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixhLG8scyxsLHUpe3ZhciBjPW4/LjYqbypzOjAsaD1NYXRoLm1heChuP24ucmlnaHQtbi5sZWZ0OjAsYT9hLnJpZ2h0LWEubGVmdDowKSxmPTA9PT10WzBdLnh8fHRbMF0ueD09PXV8fDA9PT10WzBdLnl8fHRbMF0ueT09PXU7ZS1oKnM8ZS80JiYoZT1oKnMrZS80KTt2YXIgZD0yKm87cmV0dXJuIGkodCxmP2UvMipsJWU6KGgvMitkKSpzKmwlZSxlLGMscixoKnMsZiwhMSx1KX1mdW5jdGlvbiBpKHQsZSxyLG4sbCx1LGMsaCxmKXtmb3IodmFyIGQ9dS8yLHA9MCxtPTA7bTx0Lmxlbmd0aC0xO20rKylwKz10W21dLmRpc3QodFttKzFdKTtmb3IodmFyIHY9MCxnPWUtcix5PVtdLGI9MDtiPHQubGVuZ3RoLTE7YisrKXtmb3IodmFyIHg9dFtiXSxfPXRbYisxXSx3PXguZGlzdChfKSxNPV8uYW5nbGVUbyh4KTtnK3I8dit3Oyl7Zys9cjt2YXIgaz0oZy12KS93LEE9YSh4LngsXy54LGspLFQ9YSh4LnksXy55LGspO2lmKEE+PTAmJkE8ZiYmVD49MCYmVDxmJiZnLWQ+PTAmJmcrZDw9cCl7dmFyIFM9bmV3IG8oQSxULE0sYikuX3JvdW5kKCk7biYmIXModCxTLHUsbixsKXx8eS5wdXNoKFMpfX12Kz13fXJldHVybiBofHx5Lmxlbmd0aHx8Y3x8KHk9aSh0LHYvMixyLG4sbCx1LGMsITAsZikpLHl9dmFyIGE9dCgiLi4vdXRpbC9pbnRlcnBvbGF0ZSIpLG89dCgiLi4vc3ltYm9sL2FuY2hvciIpLHM9dCgiLi9jaGVja19tYXhfYW5nbGUiKTtlLmV4cG9ydHM9bn0seyIuLi9zeW1ib2wvYW5jaG9yIjozODksIi4uL3V0aWwvaW50ZXJwb2xhdGUiOjQzNCwiLi9jaGVja19tYXhfYW5nbGUiOjM5MH1dLDM5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dGhpcy53aWR0aD1vLHRoaXMuaGVpZ2h0PW8sdGhpcy5iaW49bmV3IGkodGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5pbmRleD17fSx0aGlzLmlkcz17fSx0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy53aWR0aCp0aGlzLmhlaWdodCl9dmFyIGk9dCgic2hlbGYtcGFjayIpLGE9dCgiLi4vdXRpbC91dGlsIiksbz0xMjg7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZ2V0R2x5cGhzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49e307Zm9yKHZhciBpIGluIHRoaXMuaWRzKXQ9aS5zcGxpdCgiIyIpLGU9dFswXSxyPXRbMV0sbltlXXx8KG5bZV09W10pLG5bZV0ucHVzaChyKTtyZXR1cm4gbn0sbi5wcm90b3R5cGUuZ2V0UmVjdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj17fTtmb3IodmFyIGkgaW4gdGhpcy5pZHMpdD1pLnNwbGl0KCIjIiksZT10WzBdLHI9dFsxXSxuW2VdfHwobltlXT17fSksbltlXVtyXT10aGlzLmluZGV4W2ldO3JldHVybiBufSxuLnByb3RvdHlwZS5hZGRHbHlwaD1mdW5jdGlvbih0LGUscixuKXtpZighcilyZXR1cm4gbnVsbDt2YXIgaT1lKyIjIityLmlkO2lmKHRoaXMuaW5kZXhbaV0pcmV0dXJuIHRoaXMuaWRzW2ldLmluZGV4T2YodCk8MCYmdGhpcy5pZHNbaV0ucHVzaCh0KSx0aGlzLmluZGV4W2ldO2lmKCFyLmJpdG1hcClyZXR1cm4gbnVsbDt2YXIgbz1yLndpZHRoKzIqbixzPXIuaGVpZ2h0KzIqbixsPW8rMix1PXMrMjtsKz00LWwlNCx1Kz00LXUlNDt2YXIgYz10aGlzLmJpbi5wYWNrT25lKGwsdSk7aWYoY3x8KHRoaXMucmVzaXplKCksYz10aGlzLmJpbi5wYWNrT25lKGwsdSkpLCFjKXJldHVybiBhLndhcm5PbmNlKCJnbHlwaCBiaXRtYXAgb3ZlcmZsb3ciKSxudWxsO3RoaXMuaW5kZXhbaV09Yyx0aGlzLmlkc1tpXT1bdF07Zm9yKHZhciBoPXRoaXMuZGF0YSxmPXIuYml0bWFwLGQ9MDtkPHM7ZCsrKWZvcih2YXIgcD10aGlzLndpZHRoKihjLnkrZCsxKStjLngrMSxtPW8qZCx2PTA7djxvO3YrKyloW3Ardl09ZlttK3ZdO3JldHVybiB0aGlzLmRpcnR5PSEwLGN9LG4ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMud2lkdGgsZT10aGlzLmhlaWdodDtpZighKHQ+PTIwNDh8fGU+PTIwNDgpKXt0aGlzLnRleHR1cmUmJih0aGlzLmdsJiZ0aGlzLmdsLmRlbGV0ZVRleHR1cmUodGhpcy50ZXh0dXJlKSx0aGlzLnRleHR1cmU9bnVsbCksdGhpcy53aWR0aCo9NCx0aGlzLmhlaWdodCo9NCx0aGlzLmJpbi5yZXNpemUodGhpcy53aWR0aCx0aGlzLmhlaWdodCk7Zm9yKHZhciByPW5ldyBBcnJheUJ1ZmZlcih0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KSxuPTA7bjxlO24rKyl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcixlKm4sdCk7bmV3IFVpbnQ4QXJyYXkocixlKm4qNCx0KS5zZXQoaSl9dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHIpfX0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt0aGlzLmdsPXQsdGhpcy50ZXh0dXJlP3QuYmluZFRleHR1cmUodC5URVhUVVJFXzJELHRoaXMudGV4dHVyZSk6KHRoaXMudGV4dHVyZT10LmNyZWF0ZVRleHR1cmUoKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsdC5MSU5FQVIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5MSU5FQVIpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfUyx0LkNMQU1QX1RPX0VER0UpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX1dSQVBfVCx0LkNMQU1QX1RPX0VER0UpLHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LkFMUEhBLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsMCx0LkFMUEhBLHQuVU5TSUdORURfQllURSxudWxsKSl9LG4ucHJvdG90eXBlLnVwZGF0ZVRleHR1cmU9ZnVuY3Rpb24odCl7dGhpcy5iaW5kKHQpLHRoaXMuZGlydHkmJih0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsdC5BTFBIQSx0LlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSx0aGlzLmRpcnR5PSExKX19LHsiLi4vdXRpbC91dGlsIjo0NDAsInNoZWxmLXBhY2siOjUxMn1dLDM5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMudXJsPXQmJm8odCksdGhpcy5hdGxhc2VzPXt9LHRoaXMuc3RhY2tzPXt9LHRoaXMubG9hZGluZz17fX1mdW5jdGlvbiBpKHQsZSxyKXt0aGlzLmFkdmFuY2U9dC5hZHZhbmNlLHRoaXMubGVmdD10LmxlZnQtci0xLHRoaXMudG9wPXQudG9wK3IrMSx0aGlzLnJlY3Q9ZX1mdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybiBuPW58fCJhYmMiLHIucmVwbGFjZSgie3N9IixuW3QubGVuZ3RoJW4ubGVuZ3RoXSkucmVwbGFjZSgie2ZvbnRzdGFja30iLHQpLnJlcGxhY2UoIntyYW5nZX0iLGUpfXZhciBvPXQoIi4uL3V0aWwvbWFwYm94Iikubm9ybWFsaXplR2x5cGhzVVJMLHM9dCgiLi4vdXRpbC9hamF4IikuZ2V0QXJyYXlCdWZmZXIsbD10KCIuLi91dGlsL2dseXBocyIpLHU9dCgiLi4vc3ltYm9sL2dseXBoX2F0bGFzIiksYz10KCJwYmYiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5nZXRTaW1wbGVHbHlwaHM9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09dGhpcy5zdGFja3NbdF0mJih0aGlzLnN0YWNrc1t0XT17fSksdm9pZCAwPT09dGhpcy5hdGxhc2VzW3RdJiYodGhpcy5hdGxhc2VzW3RdPW5ldyB1KTtmb3IodmFyIGEsbz17fSxzPXRoaXMuc3RhY2tzW3RdLGw9dGhpcy5hdGxhc2VzW3RdLGM9e30saD0wLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGQ9ZVtmXTtpZihhPU1hdGguZmxvb3IoZC8yNTYpLHNbYV0pe3ZhciBwPXNbYV0uZ2x5cGhzW2RdLG09bC5hZGRHbHlwaChyLHQscCwzKTtwJiYob1tkXT1uZXcgaShwLG0sMykpfWVsc2Ugdm9pZCAwPT09Y1thXSYmKGNbYV09W10saCsrKSxjW2FdLnB1c2goZCl9aHx8bih2b2lkIDAsbyx0KTt2YXIgdj1mdW5jdGlvbihlLGEscyl7aWYoIWUpZm9yKHZhciB1PXRoaXMuc3RhY2tzW3RdW2FdPXMuc3RhY2tzWzBdLGY9MDtmPGNbYV0ubGVuZ3RoO2YrKyl7dmFyIGQ9Y1thXVtmXSxwPXUuZ2x5cGhzW2RdLG09bC5hZGRHbHlwaChyLHQscCwzKTtwJiYob1tkXT1uZXcgaShwLG0sMykpfS0taHx8bih2b2lkIDAsbyx0KX0uYmluZCh0aGlzKTtmb3IodmFyIGcgaW4gYyl0aGlzLmxvYWRSYW5nZSh0LGcsdil9LG4ucHJvdG90eXBlLmxvYWRSYW5nZT1mdW5jdGlvbih0LGUscil7aWYoMjU2KmU+NjU1MzUpcmV0dXJuIHIoImdseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQiKTt2b2lkIDA9PT10aGlzLmxvYWRpbmdbdF0mJih0aGlzLmxvYWRpbmdbdF09e30pO3ZhciBuPXRoaXMubG9hZGluZ1t0XTtpZihuW2VdKW5bZV0ucHVzaChyKTtlbHNle25bZV09W3JdO3ZhciBpPTI1NiplKyItIisoMjU2KmUrMjU1KSxvPWEodCxpLHRoaXMudXJsKTtzKG8sZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9IXQmJm5ldyBsKG5ldyBjKG5ldyBVaW50OEFycmF5KHIpKSksYT0wO2E8bltlXS5sZW5ndGg7YSsrKW5bZV1bYV0odCxlLGkpO2RlbGV0ZSBuW2VdfSl9fSxuLnByb3RvdHlwZS5nZXRHbHlwaEF0bGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmF0bGFzZXNbdF19fSx7Ii4uL3N5bWJvbC9nbHlwaF9hdGxhcyI6Mzk2LCIuLi91dGlsL2FqYXgiOjQyMywiLi4vdXRpbC9nbHlwaHMiOjQzMywiLi4vdXRpbC9tYXBib3giOjQzNyxwYmY6NDc2fV0sMzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihuKXtjLnB1c2godFtuXSksaC5wdXNoKHJbbl0pLGYucHVzaChlW25dKSxkKyt9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49dVt0XTtyZXR1cm4gZGVsZXRlIHVbdF0sdVtlXT1uLGhbbl1bMF0ucG9wKCksaFtuXVswXT1oW25dWzBdLmNvbmNhdChyWzBdKSxufWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPWxbZV07cmV0dXJuIGRlbGV0ZSBsW2VdLGxbdF09bixoW25dWzBdLnNoaWZ0KCksaFtuXVswXT1yWzBdLmNvbmNhdChoW25dWzBdKSxufWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXI/ZVswXVtlWzBdLmxlbmd0aC0xXTplWzBdWzBdO3JldHVybiB0KyI6IituLngrIjoiK24ueX12YXIgcyxsPXt9LHU9e30sYz1bXSxoPVtdLGY9W10sZD0wO2ZvcihzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBwPXJbc10sbT1lW3NdO2lmKG0pe3ZhciB2PW8obSxwKSxnPW8obSxwLCEwKTtpZih2IGluIHUmJmcgaW4gbCYmdVt2XSE9PWxbZ10pe3ZhciB5PWEodixnLHApLGI9aSh2LGcsaFt5XSk7ZGVsZXRlIGxbdl0sZGVsZXRlIHVbZ10sdVtvKG0saFtiXSwhMCldPWIsaFt5XT1udWxsfWVsc2UgdiBpbiB1P2kodixnLHApOmcgaW4gbD9hKHYsZyxwKToobihzKSxsW3ZdPWQtMSx1W2ddPWQtMSl9ZWxzZSBuKHMpfXJldHVybntmZWF0dXJlczpjLHRleHRGZWF0dXJlczpmLGdlb21ldHJpZXM6aH19fSx7fV0sMzk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsdSl7dGhpcy5hbmNob3JQb2ludD10LHRoaXMudGw9ZSx0aGlzLnRyPXIsdGhpcy5ibD1uLHRoaXMuYnI9aSx0aGlzLnRleD1hLHRoaXMuYW5jaG9yQW5nbGU9byx0aGlzLmdseXBoQW5nbGU9cyx0aGlzLm1pblNjYWxlPWwsdGhpcy5tYXhTY2FsZT11fWZ1bmN0aW9uIGkodCxlLHIsaSxhLG8sdSxjLGgpe3ZhciBmLGQscCxtLHY9ZS5pbWFnZS5yZWN0LGc9YS5sYXlvdXQseT1lLmxlZnQtMSxiPXkrdi53L2UuaW1hZ2UucGl4ZWxSYXRpbyx4PWUudG9wLTEsXz14K3YuaC9lLmltYWdlLnBpeGVsUmF0aW87aWYoIm5vbmUiIT09Z1siaWNvbi10ZXh0LWZpdCJdJiZ1KXt2YXIgdz1iLXksTT1fLXgsaz1nWyJ0ZXh0LXNpemUiXS8yNCxBPXUubGVmdCprLFQ9dS5yaWdodCprLFM9dS50b3AqayxFPXUuYm90dG9tKmssTD1ULUEsQz1FLVMsej1nWyJpY29uLXRleHQtZml0LXBhZGRpbmciXVswXSxJPWdbImljb24tdGV4dC1maXQtcGFkZGluZyJdWzFdLEQ9Z1siaWNvbi10ZXh0LWZpdC1wYWRkaW5nIl1bMl0sUD1nWyJpY29uLXRleHQtZml0LXBhZGRpbmciXVszXSxPPSJ3aWR0aCI9PT1nWyJpY29uLXRleHQtZml0Il0/LjUqKEMtTSk6MCxSPSJoZWlnaHQiPT09Z1siaWNvbi10ZXh0LWZpdCJdPy41KihMLXcpOjAsRj0id2lkdGgiPT09Z1siaWNvbi10ZXh0LWZpdCJdfHwiYm90aCI9PT1nWyJpY29uLXRleHQtZml0Il0/TDp3LGo9ImhlaWdodCI9PT1nWyJpY29uLXRleHQtZml0Il18fCJib3RoIj09PWdbImljb24tdGV4dC1maXQiXT9DOk07Zj1uZXcgcyhBK1ItUCxTK08teiksZD1uZXcgcyhBK1IrSStGLFMrTy16KSxwPW5ldyBzKEErUitJK0YsUytPK0QraiksbT1uZXcgcyhBK1ItUCxTK08rRCtqKX1lbHNlIGY9bmV3IHMoeSx4KSxkPW5ldyBzKGIseCkscD1uZXcgcyhiLF8pLG09bmV3IHMoeSxfKTt2YXIgTj1hLmdldExheW91dFZhbHVlKCJpY29uLXJvdGF0ZSIsYyxoKSpNYXRoLlBJLzE4MDtpZihvKXt2YXIgQj1pW3Quc2VnbWVudF07aWYodC55PT09Qi55JiZ0Lng9PT1CLngmJnQuc2VnbWVudCsxPGkubGVuZ3RoKXt2YXIgVT1pW3Quc2VnbWVudCsxXTtOKz1NYXRoLmF0YW4yKHQueS1VLnksdC54LVUueCkrTWF0aC5QSX1lbHNlIE4rPU1hdGguYXRhbjIodC55LUIueSx0LngtQi54KX1pZihOKXt2YXIgVj1NYXRoLnNpbihOKSxIPU1hdGguY29zKE4pLHE9W0gsLVYsVixIXTtmPWYubWF0TXVsdChxKSxkPWQubWF0TXVsdChxKSxtPW0ubWF0TXVsdChxKSxwPXAubWF0TXVsdChxKX1yZXR1cm5bbmV3IG4obmV3IHModC54LHQueSksZixkLG0scCxlLmltYWdlLnJlY3QsMCwwLGwsMS8wKV19ZnVuY3Rpb24gYSh0LGUscixpLGEsdSl7Zm9yKHZhciBjPWEubGF5b3V0WyJ0ZXh0LXJvdGF0ZSJdKk1hdGguUEkvMTgwLGg9YS5sYXlvdXRbInRleHQta2VlcC11cHJpZ2h0Il0sZj1lLnBvc2l0aW9uZWRHbHlwaHMsZD1bXSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBtPWZbcF0sdj1tLmdseXBoLGc9di5yZWN0O2lmKGcpe3ZhciB5LGI9KG0ueCt2LmFkdmFuY2UvMikqcix4PWw7dT8oeT1bXSx4PW8oeSx0LGIsaSx0LnNlZ21lbnQsITApLGgmJih4PU1hdGgubWluKHgsbyh5LHQsYixpLHQuc2VnbWVudCwhMSkpKSk6eT1be2FuY2hvclBvaW50Om5ldyBzKHQueCx0LnkpLG9mZnNldDowLGFuZ2xlOjAsbWF4U2NhbGU6MS8wLG1pblNjYWxlOmx9XTtmb3IodmFyIF89bS54K3YubGVmdCx3PW0ueS12LnRvcCxNPV8rZy53LGs9dytnLmgsQT1uZXcgcyhfLHcpLFQ9bmV3IHMoTSx3KSxTPW5ldyBzKF8sayksRT1uZXcgcyhNLGspLEw9MDtMPHkubGVuZ3RoO0wrKyl7dmFyIEM9eVtMXSx6PUEsST1ULEQ9UyxQPUU7aWYoYyl7dmFyIE89TWF0aC5zaW4oYyksUj1NYXRoLmNvcyhjKSxGPVtSLC1PLE8sUl07ej16Lm1hdE11bHQoRiksST1JLm1hdE11bHQoRiksRD1ELm1hdE11bHQoRiksUD1QLm1hdE11bHQoRil9dmFyIGo9TWF0aC5tYXgoQy5taW5TY2FsZSx4KSxOPSh0LmFuZ2xlK0Mub2Zmc2V0KzIqTWF0aC5QSSklKDIqTWF0aC5QSSksQj0oQy5hbmdsZStDLm9mZnNldCsyKk1hdGguUEkpJSgyKk1hdGguUEkpO2QucHVzaChuZXcgbihDLmFuY2hvclBvaW50LHosSSxELFAsZyxOLEIsaixDLm1heFNjYWxlKSl9fX1yZXR1cm4gZH1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXt2YXIgbz0hYTtyPDAmJihhPSFhKSxhJiZpKys7dmFyIHU9bmV3IHMoZS54LGUueSksYz1uW2ldLGg9MS8wO3I9TWF0aC5hYnMocik7Zm9yKHZhciBmPWw7Oyl7dmFyIGQ9dS5kaXN0KGMpLHA9ci9kLG09TWF0aC5hdGFuMihjLnktdS55LGMueC11LngpO2lmKGF8fChtKz1NYXRoLlBJKSx0LnB1c2goe2FuY2hvclBvaW50OnUsb2Zmc2V0Om8/TWF0aC5QSTowLG1pblNjYWxlOnAsbWF4U2NhbGU6aCxhbmdsZToobSsyKk1hdGguUEkpJSgyKk1hdGguUEkpfSkscDw9ZilicmVhaztmb3IodT1jO3UuZXF1YWxzKGMpOylpZihpKz1hPzE6LTEsIShjPW5baV0pKXJldHVybiBwO3ZhciB2PWMuc3ViKHUpLl91bml0KCk7dT11LnN1Yih2Ll9tdWx0KGQpKSxoPXB9cmV0dXJuIGZ9dmFyIHM9dCgicG9pbnQtZ2VvbWV0cnkiKTtlLmV4cG9ydHM9e2dldEljb25RdWFkczppLGdldEdseXBoUXVhZHM6YSxTeW1ib2xRdWFkOm59O3ZhciBsPS41fSx7InBvaW50LWdlb21ldHJ5Ijo0ODJ9XSw0MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPVtdLGE9MCxvPXQubGVuZ3RoO2E8bzthKyspe3ZhciBzPWkodFthXS5wcm9wZXJ0aWVzLGVbInRleHQtZmllbGQiXSk7aWYocyl7cz1zLnRvU3RyaW5nKCk7dmFyIGw9ZVsidGV4dC10cmFuc2Zvcm0iXTsidXBwZXJjYXNlIj09PWw/cz1zLnRvTG9jYWxlVXBwZXJDYXNlKCk6Imxvd2VyY2FzZSI9PT1sJiYocz1zLnRvTG9jYWxlTG93ZXJDYXNlKCkpO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKXJbcy5jaGFyQ29kZUF0KHUpXT0hMDtuW2FdPXN9ZWxzZSBuW2FdPW51bGx9cmV0dXJuIG59dmFyIGk9dCgiLi4vdXRpbC90b2tlbiIpO2UuZXhwb3J0cz1ufSx7Ii4uL3V0aWwvdG9rZW4iOjQzOX1dLDQwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuY29kZVBvaW50PXQsdGhpcy54PWUsdGhpcy55PXIsdGhpcy5nbHlwaD1ufWZ1bmN0aW9uIGkodCxlLHIsbixpLGEpe3RoaXMucG9zaXRpb25lZEdseXBocz10LHRoaXMudGV4dD1lLHRoaXMudG9wPXIsdGhpcy5ib3R0b209bix0aGlzLmxlZnQ9aSx0aGlzLnJpZ2h0PWF9ZnVuY3Rpb24gYSh0LGUscixhLHMsbCx1LGMsaCl7Zm9yKHZhciBmPVtdLGQ9bmV3IGkoZix0LGhbMV0saFsxXSxoWzBdLGhbMF0pLHA9MCxtPTA7bTx0Lmxlbmd0aDttKyspe3ZhciB2PXQuY2hhckNvZGVBdChtKSxnPWVbdl07ZyYmKGYucHVzaChuZXcgbih2LHAsLTE3LGcpKSxwKz1nLmFkdmFuY2UrYyl9cmV0dXJuISFmLmxlbmd0aCYmKG8oZCxlLGEscixzLGwsdSxoKSxkKX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhLG8sdSl7dmFyIGM9bnVsbCxkPTAscD0wLG09MCx2PTAsZz10LnBvc2l0aW9uZWRHbHlwaHM7aWYobilmb3IodmFyIHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIGI9Z1t5XTtpZihiLngtPWQsYi55Kz1yKm0sYi54Pm4mJm51bGwhPT1jKXt2YXIgeD1nW2MrMV0ueDt2PU1hdGgubWF4KHgsdik7Zm9yKHZhciBfPWMrMTtfPD15O18rKylnW19dLnkrPXIsZ1tfXS54LT14O2lmKG8pe3ZhciB3PWM7aFtnW2NdLmNvZGVQb2ludF0mJnctLSxzKGcsZSxwLHcsbyl9cD1jKzEsYz1udWxsLGQrPXgsbSsrfWZbYi5jb2RlUG9pbnRdJiYoYz15KX12YXIgTT1nW2cubGVuZ3RoLTFdLGs9TS54K2VbTS5jb2RlUG9pbnRdLmFkdmFuY2U7dj1NYXRoLm1heCh2LGspO3ZhciBBPShtKzEpKnI7cyhnLGUscCxnLmxlbmd0aC0xLG8pLGwoZyxvLGksYSx2LHIsbSx1KSx0LnRvcCs9LWEqQSx0LmJvdHRvbT10LnRvcCtBLHQubGVmdCs9LWkqdix0LnJpZ2h0PXQubGVmdCt2fWZ1bmN0aW9uIHModCxlLHIsbixpKXtmb3IodmFyIGE9ZVt0W25dLmNvZGVQb2ludF0uYWR2YW5jZSxvPSh0W25dLngrYSkqaSxzPXI7czw9bjtzKyspdFtzXS54LT1vfWZ1bmN0aW9uIGwodCxlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9KGUtcikqaStzWzBdLHU9KC1uKihvKzEpKy41KSphK3NbMV0sYz0wO2M8dC5sZW5ndGg7YysrKXRbY10ueCs9bCx0W2NdLnkrPXV9ZnVuY3Rpb24gdSh0LGUpe2lmKCF0fHwhdC5yZWN0KXJldHVybiBudWxsO3ZhciByPWVbImljb24tb2Zmc2V0Il1bMF0sbj1lWyJpY29uLW9mZnNldCJdWzFdLGk9ci10LndpZHRoLzIsYT1pK3Qud2lkdGgsbz1uLXQuaGVpZ2h0LzI7cmV0dXJuIG5ldyBjKHQsbyxvK3QuaGVpZ2h0LGksYSl9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3RoaXMuaW1hZ2U9dCx0aGlzLnRvcD1lLHRoaXMuYm90dG9tPXIsdGhpcy5sZWZ0PW4sdGhpcy5yaWdodD1pfWUuZXhwb3J0cz17c2hhcGVUZXh0OmEsc2hhcGVJY29uOnV9O3ZhciBoPXszMjohMCw4MjAzOiEwfSxmPXszMjohMCwzODohMCw0MzohMCw0NTohMCw0NzohMCwxNzM6ITAsMTgzOiEwLDgyMDM6ITAsODIwODohMCw4MjExOiEwfX0se31dLDQwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5iaW49bmV3IG8odCxlKSx0aGlzLmltYWdlcz17fSx0aGlzLmRhdGE9ITEsdGhpcy50ZXh0dXJlPTAsdGhpcy5maWx0ZXI9MCx0aGlzLnBpeGVsUmF0aW89MSx0aGlzLmRpcnR5PSEwfWZ1bmN0aW9uIGkodCxlLHIsbixpLGEsbyxzLGwsdSxjKXt2YXIgaCxmLGQ9biplK3IscD1zKmErbztpZihjKWZvcihwLT1hLGY9LTE7Zjw9dTtmKyssZD0oKGYrdSkldStuKSplK3IscCs9YSlmb3IoaD0tMTtoPD1sO2grKylpW3AraF09dFtkKyhoK2wpJWxdO2Vsc2UgZm9yKGY9MDtmPHU7ZisrLGQrPWUscCs9YSlmb3IoaD0wO2g8bDtoKyspaVtwK2hdPXRbZCtoXX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7dGhpcy5yZWN0PXQsdGhpcy53aWR0aD1lLHRoaXMuaGVpZ2h0PXIsdGhpcy5zZGY9bix0aGlzLnBpeGVsUmF0aW89aX12YXIgbz10KCJzaGVsZi1wYWNrIikscz10KCIuLi91dGlsL2Jyb3dzZXIiKSxsPXQoIi4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmFsbG9jYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt0Lz10aGlzLnBpeGVsUmF0aW8sZS89dGhpcy5waXhlbFJhdGlvO3ZhciByPXQrMisoNC0odCsyKSU0KSxuPWUrMisoNC0oZSsyKSU0KSxpPXRoaXMuYmluLnBhY2tPbmUocixuKTtyZXR1cm4gaXx8KGwud2Fybk9uY2UoIlNwcml0ZUF0bGFzIG91dCBvZiBzcGFjZS4iKSxudWxsKX0sbi5wcm90b3R5cGUuZ2V0SW1hZ2U9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmltYWdlc1t0XSlyZXR1cm4gdGhpcy5pbWFnZXNbdF07aWYoIXRoaXMuc3ByaXRlKXJldHVybiBudWxsO3ZhciByPXRoaXMuc3ByaXRlLmdldFNwcml0ZVBvc2l0aW9uKHQpO2lmKCFyLndpZHRofHwhci5oZWlnaHQpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5hbGxvY2F0ZUltYWdlKHIud2lkdGgsci5oZWlnaHQpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5ldyBhKG4sci53aWR0aC9yLnBpeGVsUmF0aW8sci5oZWlnaHQvci5waXhlbFJhdGlvLHIuc2RmLHIucGl4ZWxSYXRpby90aGlzLnBpeGVsUmF0aW8pO3JldHVybiB0aGlzLmltYWdlc1t0XT1pLHRoaXMuY29weShuLHIsZSksaX0sbi5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldEltYWdlKHQsZSksbj1yJiZyLnJlY3Q7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9ci53aWR0aCpyLnBpeGVsUmF0aW8sYT1yLmhlaWdodCpyLnBpeGVsUmF0aW87cmV0dXJue3NpemU6W3Iud2lkdGgsci5oZWlnaHRdLAp0bDpbKG4ueCsxKS90aGlzLndpZHRoLChuLnkrMSkvdGhpcy5oZWlnaHRdLGJyOlsobi54KzEraSkvdGhpcy53aWR0aCwobi55KzErYSkvdGhpcy5oZWlnaHRdfX0sbi5wcm90b3R5cGUuYWxsb2NhdGU9ZnVuY3Rpb24oKXtpZighdGhpcy5kYXRhKXt2YXIgdD1NYXRoLmZsb29yKHRoaXMud2lkdGgqdGhpcy5waXhlbFJhdGlvKSxlPU1hdGguZmxvb3IodGhpcy5oZWlnaHQqdGhpcy5waXhlbFJhdGlvKTt0aGlzLmRhdGE9bmV3IFVpbnQzMkFycmF5KHQqZSk7Zm9yKHZhciByPTA7cjx0aGlzLmRhdGEubGVuZ3RoO3IrKyl0aGlzLmRhdGFbcl09MH19LG4ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuc3ByaXRlLmltZy5kYXRhKXt2YXIgbj1uZXcgVWludDMyQXJyYXkodGhpcy5zcHJpdGUuaW1nLmRhdGEuYnVmZmVyKTt0aGlzLmFsbG9jYXRlKCk7dmFyIGE9dGhpcy5kYXRhO2kobix0aGlzLnNwcml0ZS5pbWcud2lkdGgsZS54LGUueSxhLHRoaXMud2lkdGgqdGhpcy5waXhlbFJhdGlvLCh0LngrMSkqdGhpcy5waXhlbFJhdGlvLCh0LnkrMSkqdGhpcy5waXhlbFJhdGlvLGUud2lkdGgsZS5oZWlnaHQsciksdGhpcy5kaXJ0eT0hMH19LG4ucHJvdG90eXBlLnNldFNwcml0ZT1mdW5jdGlvbih0KXt0JiYodGhpcy5waXhlbFJhdGlvPXMuZGV2aWNlUGl4ZWxSYXRpbz4xPzI6MSx0aGlzLmNhbnZhcyYmKHRoaXMuY2FudmFzLndpZHRoPXRoaXMud2lkdGgqdGhpcy5waXhlbFJhdGlvLHRoaXMuY2FudmFzLmhlaWdodD10aGlzLmhlaWdodCp0aGlzLnBpeGVsUmF0aW8pKSx0aGlzLnNwcml0ZT10fSxuLnByb3RvdHlwZS5hZGRJY29ucz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMuZ2V0SW1hZ2UodFtyXSk7ZShudWxsLHRoaXMuaW1hZ2VzKX0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUpe3ZhciByPSExO3RoaXMudGV4dHVyZT90LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpOih0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1MsdC5DTEFNUF9UT19FREdFKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9XUkFQX1QsdC5DTEFNUF9UT19FREdFKSxyPSEwKTt2YXIgbj1lP3QuTElORUFSOnQuTkVBUkVTVDtuIT09dGhpcy5maWx0ZXImJih0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NSU5fRklMVEVSLG4pLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01BR19GSUxURVIsbiksdGhpcy5maWx0ZXI9biksdGhpcy5kaXJ0eSYmKHRoaXMuYWxsb2NhdGUoKSxyP3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdGhpcy53aWR0aCp0aGlzLnBpeGVsUmF0aW8sdGhpcy5oZWlnaHQqdGhpcy5waXhlbFJhdGlvLDAsdC5SR0JBLHQuVU5TSUdORURfQllURSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLDAsMCx0aGlzLndpZHRoKnRoaXMucGl4ZWxSYXRpbyx0aGlzLmhlaWdodCp0aGlzLnBpeGVsUmF0aW8sdC5SR0JBLHQuVU5TSUdORURfQllURSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKSksdGhpcy5kaXJ0eT0hMSl9fSx7Ii4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL3V0aWwiOjQ0MCwic2hlbGYtcGFjayI6NTEyfV0sNDAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IiksaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz1lLmV4cG9ydHM9bmV3IG4oe21lbWJlcnM6W3t0eXBlOiJVaW50MTYiLG5hbWU6InRleHRCb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidGV4dEJveEVuZEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiaWNvbkJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uQm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJnbHlwaFF1YWRTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiZ2x5cGhRdWFkRW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uUXVhZFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uUXVhZEVuZEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQ4IixuYW1lOiJpbmRleCJ9XX0pO2kuZXh0ZW5kQWxsKG8ucHJvdG90eXBlLlN0cnVjdFR5cGUucHJvdG90eXBlLHtnZXQgYW5jaG9yUG9pbnQoKXtyZXR1cm4gbmV3IGEodGhpcy5hbmNob3JQb2ludFgsdGhpcy5hbmNob3JQb2ludFkpfX0pfSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sNDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3V0aWwvc3RydWN0X2FycmF5IiksaT10KCIuLi91dGlsL3V0aWwiKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz10KCIuL3F1YWRzIikuU3ltYm9sUXVhZCxzPWUuZXhwb3J0cz1uZXcgbih7bWVtYmVyczpbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJ0bFgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToidGxZIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6InRyWCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJ0clkifSx7dHlwZToiRmxvYXQzMiIsbmFtZToiYmxYIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImJsWSJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJiclgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToiYnJZIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhIIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhXIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhYIn0se3R5cGU6IkludDE2IixuYW1lOiJ0ZXhZIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImFuY2hvckFuZ2xlIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6ImdseXBoQW5nbGUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibWF4U2NhbGUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibWluU2NhbGUifV19KTtpLmV4dGVuZEFsbChzLnByb3RvdHlwZS5TdHJ1Y3RUeXBlLnByb3RvdHlwZSx7Z2V0IGFuY2hvclBvaW50KCl7cmV0dXJuIG5ldyBhKHRoaXMuYW5jaG9yUG9pbnRYLHRoaXMuYW5jaG9yUG9pbnRZKX0sZ2V0IFN5bWJvbFF1YWQoKXtyZXR1cm4gbmV3IG8odGhpcy5hbmNob3JQb2ludCxuZXcgYSh0aGlzLnRsWCx0aGlzLnRsWSksbmV3IGEodGhpcy50clgsdGhpcy50clkpLG5ldyBhKHRoaXMuYmxYLHRoaXMuYmxZKSxuZXcgYSh0aGlzLmJyWCx0aGlzLmJyWSkse3g6dGhpcy50ZXhYLHk6dGhpcy50ZXhZLGg6dGhpcy50ZXhILHc6dGhpcy50ZXhXLGhlaWdodDp0aGlzLnRleEgsd2lkdGg6dGhpcy50ZXhXfSx0aGlzLmFuY2hvckFuZ2xlLHRoaXMuZ2x5cGhBbmdsZSx0aGlzLm1pblNjYWxlLHRoaXMubWF4U2NhbGUpfX0pfSx7Ii4uL3V0aWwvc3RydWN0X2FycmF5Ijo0MzgsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL3F1YWRzIjozOTksInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSw0MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdXRpbC9kb20iKSxpPXQoInBvaW50LWdlb21ldHJ5IiksYT17c2Nyb2xsWm9vbTp0KCIuL2hhbmRsZXIvc2Nyb2xsX3pvb20iKSxib3hab29tOnQoIi4vaGFuZGxlci9ib3hfem9vbSIpLGRyYWdSb3RhdGU6dCgiLi9oYW5kbGVyL2RyYWdfcm90YXRlIiksZHJhZ1Bhbjp0KCIuL2hhbmRsZXIvZHJhZ19wYW4iKSxrZXlib2FyZDp0KCIuL2hhbmRsZXIva2V5Ym9hcmQiKSxkb3VibGVDbGlja1pvb206dCgiLi9oYW5kbGVyL2RibGNsaWNrX3pvb20iKSx0b3VjaFpvb21Sb3RhdGU6dCgiLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlIil9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7ZygibW91c2VvdXQiLHQpfWZ1bmN0aW9uIG8oZSl7dC5zdG9wKCksXz1uLm1vdXNlUG9zKGIsZSksZygibW91c2Vkb3duIixlKX1mdW5jdGlvbiBzKGUpe3ZhciByPXQuZHJhZ1JvdGF0ZSYmdC5kcmFnUm90YXRlLmlzQWN0aXZlKCk7eCYmIXImJmcoImNvbnRleHRtZW51Iix4KSx4PW51bGwsZygibW91c2V1cCIsZSl9ZnVuY3Rpb24gbChlKXtpZighKHQuZHJhZ1BhbiYmdC5kcmFnUGFuLmlzQWN0aXZlKCl8fHQuZHJhZ1JvdGF0ZSYmdC5kcmFnUm90YXRlLmlzQWN0aXZlKCkpKXtmb3IodmFyIHI9ZS50b0VsZW1lbnR8fGUudGFyZ2V0O3ImJnIhPT1iOylyPXIucGFyZW50Tm9kZTtyPT09YiYmZygibW91c2Vtb3ZlIixlKX19ZnVuY3Rpb24gdShlKXt0LnN0b3AoKSx5KCJ0b3VjaHN0YXJ0IixlKSwhZS50b3VjaGVzfHxlLnRvdWNoZXMubGVuZ3RoPjF8fCh3PyhjbGVhclRpbWVvdXQodyksdz1udWxsLGcoImRibGNsaWNrIixlKSk6dz1zZXRUaW1lb3V0KGQsMzAwKSl9ZnVuY3Rpb24gYyh0KXt5KCJ0b3VjaG1vdmUiLHQpfWZ1bmN0aW9uIGgodCl7eSgidG91Y2hlbmQiLHQpfWZ1bmN0aW9uIGYodCl7eSgidG91Y2hjYW5jZWwiLHQpfWZ1bmN0aW9uIGQoKXt3PW51bGx9ZnVuY3Rpb24gcCh0KXtuLm1vdXNlUG9zKGIsdCkuZXF1YWxzKF8pJiZnKCJjbGljayIsdCl9ZnVuY3Rpb24gbSh0KXtnKCJkYmxjbGljayIsdCksdC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIHYodCl7eD10LHQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBnKGUscil7dmFyIGk9bi5tb3VzZVBvcyhiLHIpO3JldHVybiB0LmZpcmUoZSx7bG5nTGF0OnQudW5wcm9qZWN0KGkpLHBvaW50Omksb3JpZ2luYWxFdmVudDpyfSl9ZnVuY3Rpb24geShlLHIpe3ZhciBhPW4udG91Y2hQb3MoYixyKSxvPWEucmVkdWNlKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmFkZChlLmRpdihuLmxlbmd0aCkpfSxuZXcgaSgwLDApKTtyZXR1cm4gdC5maXJlKGUse2xuZ0xhdDp0LnVucHJvamVjdChvKSxwb2ludDpvLGxuZ0xhdHM6YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQudW5wcm9qZWN0KGUpfSx0aGlzKSxwb2ludHM6YSxvcmlnaW5hbEV2ZW50OnJ9KX12YXIgYj10LmdldENhbnZhc0NvbnRhaW5lcigpLHg9bnVsbCxfPW51bGwsdz1udWxsO2Zvcih2YXIgTSBpbiBhKXRbTV09bmV3IGFbTV0odCxlKSxlLmludGVyYWN0aXZlJiZlW01dJiZ0W01dLmVuYWJsZSgpO2IuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHIsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixvLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHMsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixsLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHUsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGgsITEpLGIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixjLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIixmLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixwLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIixtLCExKSxiLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix2LCExKX19LHsiLi4vdXRpbC9kb20iOjQyNiwiLi9oYW5kbGVyL2JveF96b29tIjo0MTEsIi4vaGFuZGxlci9kYmxjbGlja196b29tIjo0MTIsIi4vaGFuZGxlci9kcmFnX3BhbiI6NDEzLCIuL2hhbmRsZXIvZHJhZ19yb3RhdGUiOjQxNCwiLi9oYW5kbGVyL2tleWJvYXJkIjo0MTUsIi4vaGFuZGxlci9zY3JvbGxfem9vbSI6NDE2LCIuL2hhbmRsZXIvdG91Y2hfem9vbV9yb3RhdGUiOjQxNywicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDQwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi91dGlsL3V0aWwiKSxpPXQoIi4uL3V0aWwvaW50ZXJwb2xhdGUiKSxhPXQoIi4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vZ2VvL2xuZ19sYXQiKSxzPXQoIi4uL2dlby9sbmdfbGF0X2JvdW5kcyIpLGw9dCgicG9pbnQtZ2VvbWV0cnkiKSx1PWUuZXhwb3J0cz1mdW5jdGlvbigpe307bi5leHRlbmQodS5wcm90b3R5cGUse2dldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5jZW50ZXJ9LHNldENlbnRlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7Y2VudGVyOnR9LGUpLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsbi5leHRlbmQoe29mZnNldDpsLmNvbnZlcnQodCkubXVsdCgtMSl9LGUpLHIpLHRoaXN9LHBhblRvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5lYXNlVG8obi5leHRlbmQoe2NlbnRlcjp0fSxlKSxyKX0sZ2V0Wm9vbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS56b29tfSxzZXRab29tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHt6b29tOnR9LGUpLHRoaXN9LHpvb21UbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKG4uZXh0ZW5kKHt6b29tOnR9LGUpLHIpfSx6b29tSW46ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCkrMSx0LGUpLHRoaXN9LHpvb21PdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy56b29tVG8odGhpcy5nZXRab29tKCktMSx0LGUpLHRoaXN9LGdldEJlYXJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZ30sc2V0QmVhcmluZzpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7YmVhcmluZzp0fSxlKSx0aGlzfSxyb3RhdGVUbzpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWFzZVRvKG4uZXh0ZW5kKHtiZWFyaW5nOnR9LGUpLHIpfSxyZXNldE5vcnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucm90YXRlVG8oMCxuLmV4dGVuZCh7ZHVyYXRpb246MWUzfSx0KSxlKSx0aGlzfSxzbmFwVG9Ob3J0aDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSk8dGhpcy5fYmVhcmluZ1NuYXA/dGhpcy5yZXNldE5vcnRoKHQsZSk6dGhpc30sZ2V0UGl0Y2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2h9LHNldFBpdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtwaXRjaDp0fSxlKSx0aGlzfSxmaXRCb3VuZHM6ZnVuY3Rpb24odCxlLHIpe2U9bi5leHRlbmQoe3BhZGRpbmc6MCxvZmZzZXQ6WzAsMF0sbWF4Wm9vbToxLzB9LGUpLHQ9cy5jb252ZXJ0KHQpO3ZhciBpPWwuY29udmVydChlLm9mZnNldCksYT10aGlzLnRyYW5zZm9ybSxvPWEucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpKSx1PWEucHJvamVjdCh0LmdldFNvdXRoRWFzdCgpKSxjPXUuc3ViKG8pLGg9KGEud2lkdGgtMiplLnBhZGRpbmctMipNYXRoLmFicyhpLngpKS9jLngsZj0oYS5oZWlnaHQtMiplLnBhZGRpbmctMipNYXRoLmFicyhpLnkpKS9jLnk7cmV0dXJuIGUuY2VudGVyPWEudW5wcm9qZWN0KG8uYWRkKHUpLmRpdigyKSksZS56b29tPU1hdGgubWluKGEuc2NhbGVab29tKGEuc2NhbGUqTWF0aC5taW4oaCxmKSksZS5tYXhab29tKSxlLmJlYXJpbmc9MCxlLmxpbmVhcj90aGlzLmVhc2VUbyhlLHIpOnRoaXMuZmx5VG8oZSxyKX0sanVtcFRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5zdG9wKCk7dmFyIHI9dGhpcy50cmFuc2Zvcm0sbj0hMSxpPSExLGE9ITE7cmV0dXJuInpvb20iaW4gdCYmci56b29tIT09K3Quem9vbSYmKG49ITAsci56b29tPSt0Lnpvb20pLCJjZW50ZXIiaW4gdCYmKHIuY2VudGVyPW8uY29udmVydCh0LmNlbnRlcikpLCJiZWFyaW5nImluIHQmJnIuYmVhcmluZyE9PSt0LmJlYXJpbmcmJihpPSEwLHIuYmVhcmluZz0rdC5iZWFyaW5nKSwicGl0Y2giaW4gdCYmci5waXRjaCE9PSt0LnBpdGNoJiYoYT0hMCxyLnBpdGNoPSt0LnBpdGNoKSx0aGlzLmZpcmUoIm1vdmVzdGFydCIsZSkuZmlyZSgibW92ZSIsZSksbiYmdGhpcy5maXJlKCJ6b29tc3RhcnQiLGUpLmZpcmUoInpvb20iLGUpLmZpcmUoInpvb21lbmQiLGUpLGkmJnRoaXMuZmlyZSgicm90YXRlIixlKSxhJiZ0aGlzLmZpcmUoInBpdGNoIixlKSx0aGlzLmZpcmUoIm1vdmVlbmQiLGUpfSxlYXNlVG86ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3AoKSx0PW4uZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sZHVyYXRpb246NTAwLGVhc2luZzpuLmVhc2V9LHQpO3ZhciByLGEscz10aGlzLnRyYW5zZm9ybSx1PWwuY29udmVydCh0Lm9mZnNldCksYz10aGlzLmdldFpvb20oKSxoPXRoaXMuZ2V0QmVhcmluZygpLGY9dGhpcy5nZXRQaXRjaCgpLGQ9Inpvb20iaW4gdD8rdC56b29tOmMscD0iYmVhcmluZyJpbiB0P3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcodC5iZWFyaW5nLGgpOmgsbT0icGl0Y2giaW4gdD8rdC5waXRjaDpmOyJjZW50ZXIiaW4gdD8ocj1vLmNvbnZlcnQodC5jZW50ZXIpLGE9cy5jZW50ZXJQb2ludC5hZGQodSkpOiJhcm91bmQiaW4gdD8ocj1vLmNvbnZlcnQodC5hcm91bmQpLGE9cy5sb2NhdGlvblBvaW50KHIpKTooYT1zLmNlbnRlclBvaW50LmFkZCh1KSxyPXMucG9pbnRMb2NhdGlvbihhKSk7dmFyIHY9cy5sb2NhdGlvblBvaW50KHIpO3JldHVybiExPT09dC5hbmltYXRlJiYodC5kdXJhdGlvbj0wKSx0aGlzLnpvb21pbmc9ZCE9PWMsdGhpcy5yb3RhdGluZz1oIT09cCx0aGlzLnBpdGNoaW5nPW0hPT1mLHQubm9Nb3ZlU3RhcnR8fHRoaXMuZmlyZSgibW92ZXN0YXJ0IixlKSx0aGlzLnpvb21pbmcmJnRoaXMuZmlyZSgiem9vbXN0YXJ0IixlKSxjbGVhclRpbWVvdXQodGhpcy5fb25FYXNlRW5kKSx0aGlzLl9lYXNlKGZ1bmN0aW9uKHQpe3RoaXMuem9vbWluZyYmKHMuem9vbT1pKGMsZCx0KSksdGhpcy5yb3RhdGluZyYmKHMuYmVhcmluZz1pKGgscCx0KSksdGhpcy5waXRjaGluZyYmKHMucGl0Y2g9aShmLG0sdCkpLHMuc2V0TG9jYXRpb25BdFBvaW50KHIsdi5hZGQoYS5zdWIodikuX211bHQodCkpKSx0aGlzLmZpcmUoIm1vdmUiLGUpLHRoaXMuem9vbWluZyYmdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLnJvdGF0aW5nJiZ0aGlzLmZpcmUoInJvdGF0ZSIsZSksdGhpcy5waXRjaGluZyYmdGhpcy5maXJlKCJwaXRjaCIsZSl9LGZ1bmN0aW9uKCl7dC5kZWxheUVuZEV2ZW50cz90aGlzLl9vbkVhc2VFbmQ9c2V0VGltZW91dCh0aGlzLl9lYXNlVG9FbmQuYmluZCh0aGlzLGUpLHQuZGVsYXlFbmRFdmVudHMpOnRoaXMuX2Vhc2VUb0VuZChlKX0uYmluZCh0aGlzKSx0KSx0aGlzfSxfZWFzZVRvRW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuem9vbWluZzt0aGlzLnpvb21pbmc9ITEsdGhpcy5yb3RhdGluZz0hMSx0aGlzLnBpdGNoaW5nPSExLGUmJnRoaXMuZmlyZSgiem9vbWVuZCIsdCksdGhpcy5maXJlKCJtb3ZlZW5kIix0KX0sZmx5VG86ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPShBKkEtayprKyh0Py0xOjEpKkwqTCpUKlQpLygyKih0P0E6aykqTCpUKTtyZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGUqZSsxKS1lKX1mdW5jdGlvbiBhKHQpe3JldHVybihNYXRoLmV4cCh0KS1NYXRoLmV4cCgtdCkpLzJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4oTWF0aC5leHAodCkrTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIHUodCl7cmV0dXJuIGEodCkvcyh0KX10aGlzLnN0b3AoKSx0PW4uZXh0ZW5kKHtvZmZzZXQ6WzAsMF0sc3BlZWQ6MS4yLGN1cnZlOjEuNDIsZWFzaW5nOm4uZWFzZX0sdCk7dmFyIGM9dGhpcy50cmFuc2Zvcm0saD1sLmNvbnZlcnQodC5vZmZzZXQpLGY9dGhpcy5nZXRab29tKCksZD10aGlzLmdldEJlYXJpbmcoKSxwPXRoaXMuZ2V0UGl0Y2goKSxtPSJjZW50ZXIiaW4gdD9vLmNvbnZlcnQodC5jZW50ZXIpOnRoaXMuZ2V0Q2VudGVyKCksdj0iem9vbSJpbiB0Pyt0Lnpvb206ZixnPSJiZWFyaW5nImluIHQ/dGhpcy5fbm9ybWFsaXplQmVhcmluZyh0LmJlYXJpbmcsZCk6ZCx5PSJwaXRjaCJpbiB0Pyt0LnBpdGNoOnA7TWF0aC5hYnMoYy5jZW50ZXIubG5nKStNYXRoLmFicyhtLmxuZyk+MTgwJiYoYy5jZW50ZXIubG5nPjAmJm0ubG5nPDA/bS5sbmcrPTM2MDpjLmNlbnRlci5sbmc8MCYmbS5sbmc+MCYmKG0ubG5nLT0zNjApKTt2YXIgYj1jLnpvb21TY2FsZSh2LWYpLHg9Yy5wb2ludCxfPSJjZW50ZXIiaW4gdD9jLnByb2plY3QobSkuc3ViKGguZGl2KGIpKTp4LHc9Yy53b3JsZFNpemUsTT10LmN1cnZlLGs9TWF0aC5tYXgoYy53aWR0aCxjLmhlaWdodCksQT1rL2IsVD1fLnN1Yih4KS5tYWcoKTtpZigibWluWm9vbSJpbiB0KXt2YXIgUz1uLmNsYW1wKE1hdGgubWluKHQubWluWm9vbSxmLHYpLGMubWluWm9vbSxjLm1heFpvb20pLEU9ay9jLnpvb21TY2FsZShTLWYpO009TWF0aC5zcXJ0KEUvVCoyKX12YXIgTD1NKk0sQz1yKDApLHo9ZnVuY3Rpb24odCl7cmV0dXJuIHMoQykvcyhDK00qdCl9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIGsqKChzKEMpKnUoQytNKnQpLWEoQykpL0wpL1R9LEQ9KHIoMSktQykvTTtpZihNYXRoLmFicyhUKTwxZS02KXtpZihNYXRoLmFicyhrLUEpPDFlLTYpcmV0dXJuIHRoaXMuZWFzZVRvKHQpO3ZhciBQPUE8az8tMToxO0Q9TWF0aC5hYnMoTWF0aC5sb2coQS9rKSkvTSxJPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHo9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZXhwKFAqTSp0KX19aWYoImR1cmF0aW9uImluIHQpdC5kdXJhdGlvbj0rdC5kdXJhdGlvbjtlbHNle3ZhciBPPSJzY3JlZW5TcGVlZCJpbiB0Pyt0LnNjcmVlblNwZWVkL006K3Quc3BlZWQ7dC5kdXJhdGlvbj0xZTMqRC9PfXJldHVybiB0aGlzLnpvb21pbmc9ITAsZCE9PWcmJih0aGlzLnJvdGF0aW5nPSEwKSxwIT09eSYmKHRoaXMucGl0Y2hpbmc9ITApLHRoaXMuZmlyZSgibW92ZXN0YXJ0IixlKSx0aGlzLmZpcmUoInpvb21zdGFydCIsZSksdGhpcy5fZWFzZShmdW5jdGlvbih0KXt2YXIgcj10KkQsbj1JKHIpO2Muem9vbT1mK2Muc2NhbGVab29tKDEveihyKSksYy5jZW50ZXI9Yy51bnByb2plY3QoeC5hZGQoXy5zdWIoeCkubXVsdChuKSksdyksdGhpcy5yb3RhdGluZyYmKGMuYmVhcmluZz1pKGQsZyx0KSksdGhpcy5waXRjaGluZyYmKGMucGl0Y2g9aShwLHksdCkpLHRoaXMuZmlyZSgibW92ZSIsZSksdGhpcy5maXJlKCJ6b29tIixlKSx0aGlzLnJvdGF0aW5nJiZ0aGlzLmZpcmUoInJvdGF0ZSIsZSksdGhpcy5waXRjaGluZyYmdGhpcy5maXJlKCJwaXRjaCIsZSl9LGZ1bmN0aW9uKCl7dGhpcy56b29taW5nPSExLHRoaXMucm90YXRpbmc9ITEsdGhpcy5waXRjaGluZz0hMSx0aGlzLmZpcmUoInpvb21lbmQiLGUpLHRoaXMuZmlyZSgibW92ZWVuZCIsZSl9LHQpLHRoaXN9LGlzRWFzaW5nOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hYm9ydEZufSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fib3J0Rm4mJih0aGlzLl9hYm9ydEZuKCksdGhpcy5fZmluaXNoRWFzZSgpKSx0aGlzfSxfZWFzZTpmdW5jdGlvbih0LGUscil7dGhpcy5fZmluaXNoRm49ZSx0aGlzLl9hYm9ydEZuPWEudGltZWQoZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsci5lYXNpbmcoZSkpLDE9PT1lJiZ0aGlzLl9maW5pc2hFYXNlKCl9LCExPT09ci5hbmltYXRlPzA6ci5kdXJhdGlvbix0aGlzKX0sX2ZpbmlzaEVhc2U6ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fYWJvcnRGbjt2YXIgdD10aGlzLl9maW5pc2hGbjtkZWxldGUgdGhpcy5fZmluaXNoRm4sdC5jYWxsKHRoaXMpfSxfbm9ybWFsaXplQmVhcmluZzpmdW5jdGlvbih0LGUpe3Q9bi53cmFwKHQsLTE4MCwxODApO3ZhciByPU1hdGguYWJzKHQtZSk7cmV0dXJuIE1hdGguYWJzKHQtMzYwLWUpPHImJih0LT0zNjApLE1hdGguYWJzKHQrMzYwLWUpPHImJih0Kz0zNjApLHR9LF91cGRhdGVFYXNpbmc6ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2lmKHRoaXMuZWFzZSl7dmFyIGE9dGhpcy5lYXNlLG89KERhdGUubm93KCktYS5zdGFydCkvYS5kdXJhdGlvbixzPWEuZWFzaW5nKG8rLjAxKS1hLmVhc2luZyhvKSxsPS4yNy9NYXRoLnNxcnQocypzKzFlLTQpKi4wMSx1PU1hdGguc3FydCguMDcyOS1sKmwpO2k9bi5iZXppZXIobCx1LC4yNSwxKX1lbHNlIGk9cj9uLmJlemllci5hcHBseShuLHIpOm4uZWFzZTtyZXR1cm4gdGhpcy5lYXNlPXtzdGFydDoobmV3IERhdGUpLmdldFRpbWUoKSx0bzpNYXRoLnBvdygyLGUpLGR1cmF0aW9uOnQsZWFzaW5nOml9LGl9fSl9LHsiLi4vZ2VvL2xuZ19sYXQiOjMzNywiLi4vZ2VvL2xuZ19sYXRfYm91bmRzIjozMzgsIi4uL3V0aWwvYnJvd3NlciI6NDI0LCIuLi91dGlsL2ludGVycG9sYXRlIjo0MzQsIi4uL3V0aWwvdXRpbCI6NDQwLCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sNDA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7by5zZXRPcHRpb25zKHRoaXMsdCl9dmFyIGk9dCgiLi9jb250cm9sIiksYT10KCIuLi8uLi91dGlsL2RvbSIpLG89dCgiLi4vLi4vdXRpbC91dGlsIik7ZS5leHBvcnRzPW4sbi5jcmVhdGVBdHRyaWJ1dGlvblN0cmluZz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXTtuLmF0dHJpYnV0aW9uJiZlLmluZGV4T2Yobi5hdHRyaWJ1dGlvbik8MCYmZS5wdXNoKG4uYXR0cmlidXRpb24pfXJldHVybiBlLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSxlPWUuZmlsdGVyKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPXIrMTtuPGUubGVuZ3RoO24rKylpZihlW25dLmluZGV4T2YodCk+PTApcmV0dXJuITE7cmV0dXJuITB9KSxlLmpvaW4oIiB8ICIpfSxuLnByb3RvdHlwZT1vLmluaGVyaXQoaSx7b3B0aW9uczp7cG9zaXRpb246ImJvdHRvbS1yaWdodCJ9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2NvbnRhaW5lcj1hLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybC1hdHRyaWIiLHQuZ2V0Q29udGFpbmVyKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0Lm9uKCJzb3VyY2UubG9hZCIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcykpLHQub24oInNvdXJjZS5jaGFuZ2UiLHRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpKSx0Lm9uKCJzb3VyY2UucmVtb3ZlIix0aGlzLl91cGRhdGUuYmluZCh0aGlzKSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmsuYmluZCh0aGlzKSksZX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5zdHlsZSYmKHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9bi5jcmVhdGVBdHRyaWJ1dGlvblN0cmluZyh0aGlzLl9tYXAuc3R5bGUuc291cmNlcykpLHRoaXMuX2VkaXRMaW5rPXRoaXMuX2NvbnRhaW5lci5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJtYXBib3gtaW1wcm92ZS1tYXAiKVswXSx0aGlzLl91cGRhdGVFZGl0TGluaygpfSxfdXBkYXRlRWRpdExpbms6ZnVuY3Rpb24oKXtpZih0aGlzLl9lZGl0TGluayl7dmFyIHQ9dGhpcy5fbWFwLmdldENlbnRlcigpO3RoaXMuX2VkaXRMaW5rLmhyZWY9Imh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwLWZlZWRiYWNrLyMvIit0LmxuZysiLyIrdC5sYXQrIi8iK01hdGgucm91bmQodGhpcy5fbWFwLmdldFpvb20oKSsxKX19fSl9LHsiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDAsIi4vY29udHJvbCI6NDA4fV0sNDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt9dmFyIGk9dCgiLi4vLi4vdXRpbC91dGlsIiksYT10KCIuLi8uLi91dGlsL2V2ZW50ZWQiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQ7dmFyIGU9dGhpcy5fY29udGFpbmVyPXRoaXMub25BZGQodCk7aWYodGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMucG9zaXRpb24pe3ZhciByPXRoaXMub3B0aW9ucy5wb3NpdGlvbixuPXQuX2NvbnRyb2xDb3JuZXJzW3JdO2UuY2xhc3NOYW1lKz0iIG1hcGJveGdsLWN0cmwiLC0xIT09ci5pbmRleE9mKCJib3R0b20iKT9uLmluc2VydEJlZm9yZShlLG4uZmlyc3RDaGlsZCk6bi5hcHBlbmRDaGlsZChlKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5vblJlbW92ZSYmdGhpcy5vblJlbW92ZSh0aGlzLl9tYXApLHRoaXMuX21hcD1udWxsLHRoaXN9fSxpLmV4dGVuZChuLnByb3RvdHlwZSxhKX0seyIuLi8uLi91dGlsL2V2ZW50ZWQiOjQzMiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtzLnNldE9wdGlvbnModGhpcyx0KX12YXIgaT10KCIuL2NvbnRyb2wiKSxhPXQoIi4uLy4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vLi4vdXRpbC9kb20iKSxzPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uO3ZhciBsPXtlbmFibGVIaWdoQWNjdXJhY3k6ITEsdGltZW91dDo2ZTN9O24ucHJvdG90eXBlPXMuaW5oZXJpdChpLHtvcHRpb25zOntwb3NpdGlvbjoidG9wLXJpZ2h0In0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fY29udGFpbmVyPW8uY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLWdyb3VwIix0LmdldENvbnRhaW5lcigpKTtyZXR1cm4gYS5zdXBwb3J0c0dlb2xvY2F0aW9uPyh0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uPW8uY3JlYXRlKCJidXR0b24iLCJtYXBib3hnbC1jdHJsLWljb24gbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnR5cGU9ImJ1dHRvbiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrR2VvbG9jYXRlLmJpbmQodGhpcykpLGUpOmV9LF9vbkNvbnRleHRNZW51OmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sX29uQ2xpY2tHZW9sb2NhdGU6ZnVuY3Rpb24oKXtuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMuX3N1Y2Nlc3MuYmluZCh0aGlzKSx0aGlzLl9lcnJvci5iaW5kKHRoaXMpLGwpLHRoaXMuX3RpbWVvdXRJZD1zZXRUaW1lb3V0KHRoaXMuX2ZpbmlzaC5iaW5kKHRoaXMpLDFlNCl9LF9zdWNjZXNzOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC5qdW1wVG8oe2NlbnRlcjpbdC5jb29yZHMubG9uZ2l0dWRlLHQuY29vcmRzLmxhdGl0dWRlXSx6b29tOjE3LGJlYXJpbmc6MCxwaXRjaDowfSksdGhpcy5maXJlKCJnZW9sb2NhdGUiLHQpLHRoaXMuX2ZpbmlzaCgpfSxfZXJyb3I6ZnVuY3Rpb24odCl7dGhpcy5maXJlKCJlcnJvciIsdCksdGhpcy5fZmluaXNoKCl9LF9maW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl90aW1lb3V0SWQmJmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpLHRoaXMuX3RpbWVvdXRJZD12b2lkIDB9fSl9LHsiLi4vLi4vdXRpbC9icm93c2VyIjo0MjQsIi4uLy4uL3V0aWwvZG9tIjo0MjYsIi4uLy4uL3V0aWwvdXRpbCI6NDQwLCIuL2NvbnRyb2wiOjQwOH1dLDQxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3Muc2V0T3B0aW9ucyh0aGlzLHQpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KHQudHlwZSx7YnV0dG9uOjIsYnV0dG9uczoyLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxkZXRhaWw6dC5kZXRhaWwsdmlldzp0LnZpZXcsc2NyZWVuWDp0LnNjcmVlblgsc2NyZWVuWTp0LnNjcmVlblksY2xpZW50WDp0LmNsaWVudFgsY2xpZW50WTp0LmNsaWVudFksbW92ZW1lbnRYOnQubW92ZW1lbnRYLG1vdmVtZW50WTp0Lm1vdmVtZW50WSxjdHJsS2V5OnQuY3RybEtleSxzaGlmdEtleTp0LnNoaWZ0S2V5LGFsdEtleTp0LmFsdEtleSxtZXRhS2V5OnQubWV0YUtleX0pfXZhciBhPXQoIi4vY29udHJvbCIpLG89dCgiLi4vLi4vdXRpbC9kb20iKSxzPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXMuaW5oZXJpdChhLHtvcHRpb25zOntwb3NpdGlvbjoidG9wLXJpZ2h0In0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9Im1hcGJveGdsLWN0cmwiLHI9dGhpcy5fY29udGFpbmVyPW8uY3JlYXRlKCJkaXYiLGUrIi1ncm91cCIsdC5nZXRDb250YWluZXIoKSk7cmV0dXJuIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsdGhpcy5fb25Db250ZXh0TWVudS5iaW5kKHRoaXMpKSx0aGlzLl96b29tSW5CdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKGUrIi1pY29uICIrZSsiLXpvb20taW4iLHQuem9vbUluLmJpbmQodCkpLHRoaXMuX3pvb21PdXRCdXR0b249dGhpcy5fY3JlYXRlQnV0dG9uKGUrIi1pY29uICIrZSsiLXpvb20tb3V0Iix0Lnpvb21PdXQuYmluZCh0KSksdGhpcy5fY29tcGFzcz10aGlzLl9jcmVhdGVCdXR0b24oZSsiLWljb24gIitlKyItY29tcGFzcyIsdC5yZXNldE5vcnRoLmJpbmQodCkpLHRoaXMuX2NvbXBhc3NBcnJvdz1vLmNyZWF0ZSgiZGl2IiwiYXJyb3ciLHRoaXMuX2NvbXBhc3MpLHRoaXMuX2NvbXBhc3MuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbkNvbXBhc3NEb3duLmJpbmQodGhpcykpLHRoaXMuX29uQ29tcGFzc01vdmU9dGhpcy5fb25Db21wYXNzTW92ZS5iaW5kKHRoaXMpLHRoaXMuX29uQ29tcGFzc1VwPXRoaXMuX29uQ29tcGFzc1VwLmJpbmQodGhpcyksdC5vbigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cuYmluZCh0aGlzKSksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5fZWw9dC5nZXRDYW52YXNDb250YWluZXIoKSxyfSxfb25Db250ZXh0TWVudTpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LF9vbkNvbXBhc3NEb3duOmZ1bmN0aW9uKHQpezA9PT10LmJ1dHRvbiYmKG8uZGlzYWJsZURyYWcoKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uQ29tcGFzc01vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uQ29tcGFzc1VwKSx0aGlzLl9lbC5kaXNwYXRjaEV2ZW50KGkodCkpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfb25Db21wYXNzTW92ZTpmdW5jdGlvbih0KXswPT09dC5idXR0b24mJih0aGlzLl9lbC5kaXNwYXRjaEV2ZW50KGkodCkpLHQuc3RvcFByb3BhZ2F0aW9uKCkpfSxfb25Db21wYXNzVXA6ZnVuY3Rpb24odCl7MD09PXQuYnV0dG9uJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbkNvbXBhc3NNb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9vbkNvbXBhc3NVcCksby5lbmFibGVEcmFnKCksdGhpcy5fZWwuZGlzcGF0Y2hFdmVudChpKHQpKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX2NyZWF0ZUJ1dHRvbjpmdW5jdGlvbih0LGUpe3ZhciByPW8uY3JlYXRlKCJidXR0b24iLHQsdGhpcy5fY29udGFpbmVyKTtyZXR1cm4gci50eXBlPSJidXR0b24iLHIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7ZSgpfSkscn0sX3JvdGF0ZUNvbXBhc3NBcnJvdzpmdW5jdGlvbigpe3ZhciB0PSJyb3RhdGUoIit0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlKigxODAvTWF0aC5QSSkrImRlZykiO3RoaXMuX2NvbXBhc3NBcnJvdy5zdHlsZS50cmFuc2Zvcm09dH19KX0seyIuLi8uLi91dGlsL2RvbSI6NDI2LCIuLi8uLi91dGlsL3V0aWwiOjQ0MCwiLi9jb250cm9sIjo0MDh9XSw0MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2NvbnRhaW5lcj10LmdldENvbnRhaW5lcigpLG8uYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi9nZW8vbG5nX2xhdF9ib3VuZHMiKSxvPXQoIi4uLy4uL3V0aWwvdXRpbCIpO2UuZXhwb3J0cz1uLG4ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxfYWN0aXZlOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLCExKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sX29uTW91c2VEb3duOmZ1bmN0aW9uKHQpe3Quc2hpZnRLZXkmJjA9PT10LmJ1dHRvbiYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLCExKSxpLmRpc2FibGVEcmFnKCksdGhpcy5fc3RhcnRQb3M9aS5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl9hY3RpdmU9ITApfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3RhcnRQb3Mscj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpO3RoaXMuX2JveHx8KHRoaXMuX2JveD1pLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtYm94em9vbSIsdGhpcy5fY29udGFpbmVyKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tc3RhcnQiLHQpKTt2YXIgbj1NYXRoLm1pbihlLngsci54KSxhPU1hdGgubWF4KGUueCxyLngpLG89TWF0aC5taW4oZS55LHIueSkscz1NYXRoLm1heChlLnksci55KTtpLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsInRyYW5zbGF0ZSgiK24rInB4LCIrbysicHgpIiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWEtbisicHgiLHRoaXMuX2JveC5zdHlsZS5oZWlnaHQ9cy1vKyJweCJ9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7aWYoMD09PXQuYnV0dG9uKXt2YXIgZT10aGlzLl9zdGFydFBvcyxyPWkubW91c2VQb3ModGhpcy5fZWwsdCksbj1uZXcgYSh0aGlzLl9tYXAudW5wcm9qZWN0KGUpLHRoaXMuX21hcC51bnByb2plY3QocikpO3RoaXMuX2ZpbmlzaCgpLGUueD09PXIueCYmZS55PT09ci55P3RoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsdCk6dGhpcy5fbWFwLmZpdEJvdW5kcyhuLHtsaW5lYXI6ITB9KS5maXJlKCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDp0LGJveFpvb21Cb3VuZHM6bn0pfX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmKHRoaXMuX2ZpbmlzaCgpLHRoaXMuX2ZpcmVFdmVudCgiYm94em9vbWNhbmNlbCIsdCkpfSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUsITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLCExKSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYodGhpcy5fYm94LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCksaS5lbmFibGVEcmFnKCl9LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUodCx7b3JpZ2luYWxFdmVudDplfSl9fX0seyIuLi8uLi9nZW8vbG5nX2xhdF9ib3VuZHMiOjMzOCwiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9vbkRibENsaWNrPXRoaXMuX29uRGJsQ2xpY2suYmluZCh0aGlzKX1lLmV4cG9ydHM9bixuLnByb3RvdHlwZT17X2VuYWJsZWQ6ITEsaXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9tYXAub24oImRibGNsaWNrIix0aGlzLl9vbkRibENsaWNrKSx0aGlzLl9lbmFibGVkPSEwKX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCkmJih0aGlzLl9tYXAub2ZmKCJkYmxjbGljayIsdGhpcy5fb25EYmxDbGljayksdGhpcy5fZW5hYmxlZD0hMSl9LF9vbkRibENsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX21hcC56b29tVG8odGhpcy5fbWFwLmdldFpvb20oKSsodC5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5Py0xOjEpLHthcm91bmQ6dC5sbmdMYXR9LHQpfX19LHt9XSw0MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLGEuYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgbz1hLmJlemllcigwLDAsLjMsMSk7bi5wcm90b3R5cGU9e19lbmFibGVkOiExLF9hY3RpdmU6ITEsaXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LGlzQWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Eb3duKSx0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Eb3duKSx0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe3RoaXMuX2lnbm9yZUV2ZW50KHQpfHx0aGlzLmlzQWN0aXZlKCl8fCh0LnRvdWNoZXM/KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZCkpOihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwKSksdGhpcy5fYWN0aXZlPSExLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX3Bvcz1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHRoaXMuX2luZXJ0aWE9W1tEYXRlLm5vdygpLHRoaXMuX3Bvc11dKX0sX29uTW92ZTpmdW5jdGlvbih0KXtpZighdGhpcy5faWdub3JlRXZlbnQodCkpe3RoaXMuaXNBY3RpdmUoKXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9maXJlRXZlbnQoImRyYWdzdGFydCIsdCksdGhpcy5fZmlyZUV2ZW50KCJtb3Zlc3RhcnQiLHQpKTt2YXIgZT1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLHI9dGhpcy5fbWFwO3Iuc3RvcCgpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpLHRoaXMuX2luZXJ0aWEucHVzaChbRGF0ZS5ub3coKSxlXSksci50cmFuc2Zvcm0uc2V0TG9jYXRpb25BdFBvaW50KHIudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odGhpcy5fcG9zKSxlKSx0aGlzLl9maXJlRXZlbnQoImRyYWciLHQpLHRoaXMuX2ZpcmVFdmVudCgibW92ZSIsdCksdGhpcy5fcG9zPWUsdC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uVXA6ZnVuY3Rpb24odCl7aWYodGhpcy5pc0FjdGl2ZSgpKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fZmlyZUV2ZW50KCJkcmFnZW5kIix0KSx0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTt2YXIgZT1mdW5jdGlvbigpe3RoaXMuX2ZpcmVFdmVudCgibW92ZWVuZCIsdCl9LmJpbmQodGhpcykscj10aGlzLl9pbmVydGlhO2lmKHIubGVuZ3RoPDIpcmV0dXJuIHZvaWQgZSgpO3ZhciBuPXJbci5sZW5ndGgtMV0saT1yWzBdLGE9blsxXS5zdWIoaVsxXSkscz0oblswXS1pWzBdKS8xZTM7aWYoMD09PXN8fG5bMV0uZXF1YWxzKGlbMV0pKXJldHVybiB2b2lkIGUoKTt2YXIgbD1hLm11bHQoLjMvcyksdT1sLm1hZygpO3U+MTQwMCYmKHU9MTQwMCxsLl91bml0KCkuX211bHQodSkpO3ZhciBjPXUvNzUwLGg9bC5tdWx0KC1jLzIpO3RoaXMuX21hcC5wYW5CeShoLHtkdXJhdGlvbjoxZTMqYyxlYXNpbmc6byxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfX0sX29uTW91c2VVcDpmdW5jdGlvbih0KXt0aGlzLl9pZ25vcmVFdmVudCh0KXx8KHRoaXMuX29uVXAodCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCkpfSxfb25Ub3VjaEVuZDpmdW5jdGlvbih0KXt0aGlzLl9pZ25vcmVFdmVudCh0KXx8KHRoaXMuX29uVXAodCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kKSl9LF9maXJlRXZlbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbWFwLmZpcmUodCx7b3JpZ2luYWxFdmVudDplfSl9LF9pZ25vcmVFdmVudDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7aWYoZS5ib3hab29tJiZlLmJveFpvb20uaXNBY3RpdmUoKSlyZXR1cm4hMDtpZihlLmRyYWdSb3RhdGUmJmUuZHJhZ1JvdGF0ZS5pc0FjdGl2ZSgpKXJldHVybiEwO2lmKHQudG91Y2hlcylyZXR1cm4gdC50b3VjaGVzLmxlbmd0aD4xO2lmKHQuY3RybEtleSlyZXR1cm4hMDtyZXR1cm4ibW91c2Vtb3ZlIj09PXQudHlwZT8hMSZ0LmJ1dHRvbnM6MCE9PXQuYnV0dG9ufSxfZHJhaW5JbmVydGlhQnVmZmVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2luZXJ0aWEsZT1EYXRlLm5vdygpO3QubGVuZ3RoPjAmJmUtdFswXVswXT4xNjA7KXQuc2hpZnQoKX19fSx7Ii4uLy4uL3V0aWwvZG9tIjo0MjYsIi4uLy4uL3V0aWwvdXRpbCI6NDQwfV0sNDE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsby5iaW5kSGFuZGxlcnModGhpcyl9dmFyIGk9dCgiLi4vLi4vdXRpbC9kb20iKSxhPXQoInBvaW50LWdlb21ldHJ5Iiksbz10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgcz1vLmJlemllcigwLDAsLjI1LDEpO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxfYWN0aXZlOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9LGVuYWJsZTpmdW5jdGlvbigpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uRG93biksdGhpcy5fZW5hYmxlZD0hMCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbkRvd24pLHRoaXMuX2VuYWJsZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9pZ25vcmVFdmVudCh0KSYmIXRoaXMuaXNBY3RpdmUoKSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9pbmVydGlhPVtbRGF0ZS5ub3coKSx0aGlzLl9tYXAuZ2V0QmVhcmluZygpXV0sdGhpcy5fc3RhcnRQb3M9dGhpcy5fcG9zPWkubW91c2VQb3ModGhpcy5fZWwsdCksdGhpcy5fY2VudGVyPXRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7dmFyIGU9dGhpcy5fc3RhcnRQb3Muc3ViKHRoaXMuX2NlbnRlcik7ZS5tYWcoKTwyMDAmJih0aGlzLl9jZW50ZXI9dGhpcy5fc3RhcnRQb3MuYWRkKG5ldyBhKC0yMDAsMCkuX3JvdGF0ZShlLmFuZ2xlKCkpKSksdC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uTW92ZTpmdW5jdGlvbih0KXtpZighdGhpcy5faWdub3JlRXZlbnQodCkpe3RoaXMuaXNBY3RpdmUoKXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZXN0YXJ0Iix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmVzdGFydCIsdCkpO3ZhciBlPXRoaXMuX21hcDtlLnN0b3AoKTt2YXIgcj10aGlzLl9wb3Msbj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQpLGE9dGhpcy5fY2VudGVyLG89ci5zdWIoYSkuYW5nbGVXaXRoKG4uc3ViKGEpKS9NYXRoLlBJKjE4MCxzPWUuZ2V0QmVhcmluZygpLW8sbD10aGlzLl9pbmVydGlhLHU9bFtsLmxlbmd0aC0xXTt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSxsLnB1c2goW0RhdGUubm93KCksZS5fbm9ybWFsaXplQmVhcmluZyhzLHVbMV0pXSksZS50cmFuc2Zvcm0uYmVhcmluZz1zLHRoaXMuX2ZpcmVFdmVudCgicm90YXRlIix0KSx0aGlzLl9maXJlRXZlbnQoIm1vdmUiLHQpLHRoaXMuX3Bvcz1ufX0sX29uVXA6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2lnbm9yZUV2ZW50KHQpJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX29uVXApLHRoaXMuaXNBY3RpdmUoKSkpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maXJlRXZlbnQoInJvdGF0ZWVuZCIsdCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCk7dmFyIGU9dGhpcy5fbWFwLHI9ZS5nZXRCZWFyaW5nKCksbj10aGlzLl9pbmVydGlhLGk9ZnVuY3Rpb24oKXtNYXRoLmFicyhyKTx0aGlzLl9iZWFyaW5nU25hcD9lLnJlc2V0Tm9ydGgoe25vTW92ZVN0YXJ0OiEwfSx7b3JpZ2luYWxFdmVudDp0fSk6dGhpcy5fZmlyZUV2ZW50KCJtb3ZlZW5kIix0KX0uYmluZCh0aGlzKTtpZihuLmxlbmd0aDwyKXJldHVybiB2b2lkIGkoKTt2YXIgYT1uWzBdLG89bltuLmxlbmd0aC0xXSxsPW5bbi5sZW5ndGgtMl0sdT1lLl9ub3JtYWxpemVCZWFyaW5nKHIsbFsxXSksYz1vWzFdLWFbMV0saD1jPDA/LTE6MSxmPShvWzBdLWFbMF0pLzFlMztpZigwPT09Y3x8MD09PWYpcmV0dXJuIHZvaWQgaSgpO3ZhciBkPU1hdGguYWJzKGMqKC4yNS9mKSk7ZD4xODAmJihkPTE4MCk7dmFyIHA9ZC8xODA7dSs9aCpkKihwLzIpLE1hdGguYWJzKGUuX25vcm1hbGl6ZUJlYXJpbmcodSwwKSk8dGhpcy5fYmVhcmluZ1NuYXAmJih1PWUuX25vcm1hbGl6ZUJlYXJpbmcoMCx1KSksZS5yb3RhdGVUbyh1LHtkdXJhdGlvbjoxZTMqcCxlYXNpbmc6cyxub01vdmVTdGFydDohMH0se29yaWdpbmFsRXZlbnQ6dH0pfX0sX2ZpcmVFdmVudDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9tYXAuZmlyZSh0LHtvcmlnaW5hbEV2ZW50OmV9KX0sX2lnbm9yZUV2ZW50OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtpZihlLmJveFpvb20mJmUuYm94Wm9vbS5pc0FjdGl2ZSgpKXJldHVybiEwO2lmKGUuZHJhZ1BhbiYmZS5kcmFnUGFuLmlzQWN0aXZlKCkpcmV0dXJuITA7aWYodC50b3VjaGVzKXJldHVybiB0LnRvdWNoZXMubGVuZ3RoPjE7dmFyIHI9dC5jdHJsS2V5PzE6MixuPXQuY3RybEtleT8wOjI7cmV0dXJuIm1vdXNlbW92ZSI9PT10LnR5cGU/dC5idXR0b25zJjA9PT1yOnQuYnV0dG9uIT09bn0sX2RyYWluSW5lcnRpYUJ1ZmZlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9pbmVydGlhLGU9RGF0ZS5ub3coKTt0Lmxlbmd0aD4wJiZlLXRbMF1bMF0+MTYwOyl0LnNoaWZ0KCl9fX0seyIuLi8uLi91dGlsL2RvbSI6NDI2LCIuLi8uLi91dGlsL3V0aWwiOjQ0MCwicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDQxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuX21hcD10LHRoaXMuX2VsPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5fb25LZXlEb3duPXRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpfWUuZXhwb3J0cz1uO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5RG93biwhMSksdGhpcy5fZW5hYmxlZD0hMCl9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLl9lbmFibGVkPSExKX0sX29uS2V5RG93bjpmdW5jdGlvbih0KXtpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciBlPXRoaXMuX21hcCxyPXtvcmlnaW5hbEV2ZW50OnR9O2lmKCFlLmlzRWFzaW5nKCkpc3dpdGNoKHQua2V5Q29kZSl7Y2FzZSA2MTpjYXNlIDEwNzpjYXNlIDE3MTpjYXNlIDE4NzplLnpvb21UbyhNYXRoLnJvdW5kKGUuZ2V0Wm9vbSgpKSsodC5zaGlmdEtleT8yOjEpLHIpO2JyZWFrO2Nhc2UgMTg5OmNhc2UgMTA5OmNhc2UgMTczOmUuem9vbVRvKE1hdGgucm91bmQoZS5nZXRab29tKCkpLSh0LnNoaWZ0S2V5PzI6MSkscik7YnJlYWs7Y2FzZSAzNzp0LnNoaWZ0S2V5P2UuZWFzZVRvKHtiZWFyaW5nOmUuZ2V0QmVhcmluZygpLTJ9LHIpOih0LnByZXZlbnREZWZhdWx0KCksZS5wYW5CeShbLTgwLDBdLHIpKTticmVhaztjYXNlIDM5OnQuc2hpZnRLZXk/ZS5lYXNlVG8oe2JlYXJpbmc6ZS5nZXRCZWFyaW5nKCkrMn0scik6KHQucHJldmVudERlZmF1bHQoKSxlLnBhbkJ5KFs4MCwwXSxyKSk7YnJlYWs7Y2FzZSAzODp0LnNoaWZ0S2V5P2UuZWFzZVRvKHtwaXRjaDplLmdldFBpdGNoKCkrNX0scik6KHQucHJldmVudERlZmF1bHQoKSxlLnBhbkJ5KFswLC04MF0scikpO2JyZWFrO2Nhc2UgNDA6dC5zaGlmdEtleT9lLmVhc2VUbyh7cGl0Y2g6TWF0aC5tYXgoZS5nZXRQaXRjaCgpLTUsMCl9LHIpOih0LnByZXZlbnREZWZhdWx0KCksZS5wYW5CeShbMCw4MF0scikpfX19fX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMuX21hcD10LHRoaXMuX2VsPXQuZ2V0Q2FudmFzQ29udGFpbmVyKCksby5iaW5kSGFuZGxlcnModGhpcyl9dmFyIGk9dCgiLi4vLi4vdXRpbC9kb20iKSxhPXQoIi4uLy4uL3V0aWwvYnJvd3NlciIpLG89dCgiLi4vLi4vdXRpbC91dGlsIik7ZS5leHBvcnRzPW47dmFyIHM9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3I/bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOiIiLGw9LTEhPT1zLmluZGV4T2YoImZpcmVmb3giKSx1PS0xIT09cy5pbmRleE9mKCJzYWZhcmkiKSYmLTE9PT1zLmluZGV4T2YoImNocm9tIik7bi5wcm90b3R5cGU9e19lbmFibGVkOiExLGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwsITEpLHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNld2hlZWwiLHRoaXMuX29uV2hlZWwsITEpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLl9lbmFibGVkPSExKX0sX29uV2hlZWw6ZnVuY3Rpb24odCl7dmFyIGU7IndoZWVsIj09PXQudHlwZT8oZT10LmRlbHRhWSxsJiZ0LmRlbHRhTW9kZT09PXdpbmRvdy5XaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTCYmKGUvPWEuZGV2aWNlUGl4ZWxSYXRpbyksdC5kZWx0YU1vZGU9PT13aW5kb3cuV2hlZWxFdmVudC5ET01fREVMVEFfTElORSYmKGUqPTQwKSk6Im1vdXNld2hlZWwiPT09dC50eXBlJiYoZT0tdC53aGVlbERlbHRhWSx1JiYoZS89MykpO3ZhciByPWEubm93KCksbj1yLSh0aGlzLl90aW1lfHwwKTt0aGlzLl9wb3M9aS5tb3VzZVBvcyh0aGlzLl9lbCx0KSx0aGlzLl90aW1lPXIsMCE9PWUmJmUlNC4wMDAyNDQxNDA2MjU9PTA/KHRoaXMuX3R5cGU9IndoZWVsIixlPU1hdGguZmxvb3IoZS80KSk6MCE9PWUmJk1hdGguYWJzKGUpPDQ/dGhpcy5fdHlwZT0idHJhY2twYWQiOm4+NDAwPyh0aGlzLl90eXBlPW51bGwsdGhpcy5fbGFzdFZhbHVlPWUsdGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX29uVGltZW91dCw0MCkpOnRoaXMuX3R5cGV8fCh0aGlzLl90eXBlPU1hdGguYWJzKG4qZSk8MjAwPyJ0cmFja3BhZCI6IndoZWVsIix0aGlzLl90aW1lb3V0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLHRoaXMuX3RpbWVvdXQ9bnVsbCxlKz10aGlzLl9sYXN0VmFsdWUpKSx0LnNoaWZ0S2V5JiZlJiYoZS89NCksdGhpcy5fdHlwZSYmdGhpcy5fem9vbSgtZSx0KSx0LnByZXZlbnREZWZhdWx0KCl9LF9vblRpbWVvdXQ6ZnVuY3Rpb24oKXt0aGlzLl90eXBlPSJ3aGVlbCIsdGhpcy5fem9vbSgtdGhpcy5fbGFzdFZhbHVlKX0sX3pvb206ZnVuY3Rpb24odCxlKXtpZigwIT09dCl7dmFyIHI9dGhpcy5fbWFwLG49Mi8oMStNYXRoLmV4cCgtTWF0aC5hYnModC8xMDApKSk7dDwwJiYwIT09biYmKG49MS9uKTt2YXIgaT1yLmVhc2U/ci5lYXNlLnRvOnIudHJhbnNmb3JtLnNjYWxlLGE9ci50cmFuc2Zvcm0uc2NhbGVab29tKGkqbik7ci56b29tVG8oYSx7ZHVyYXRpb246MCxhcm91bmQ6ci51bnByb2plY3QodGhpcy5fcG9zKSxkZWxheUVuZEV2ZW50czoyMDB9LHtvcmlnaW5hbEV2ZW50OmV9KX19fX0seyIuLi8uLi91dGlsL2Jyb3dzZXIiOjQyNCwiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLl9tYXA9dCx0aGlzLl9lbD10LmdldENhbnZhc0NvbnRhaW5lcigpLGEuYmluZEhhbmRsZXJzKHRoaXMpfXZhciBpPXQoIi4uLy4uL3V0aWwvZG9tIiksYT10KCIuLi8uLi91dGlsL3V0aWwiKTtlLmV4cG9ydHM9bjt2YXIgbz1hLmJlemllcigwLDAsLjE1LDEpO24ucHJvdG90eXBlPXtfZW5hYmxlZDohMSxpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKXx8KHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uU3RhcnQsITEpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uU3RhcnQpLHRoaXMuX2VuYWJsZWQ9ITEpfSxkaXNhYmxlUm90YXRpb246ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSEwfSxlbmFibGVSb3RhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITF9LF9vblN0YXJ0OmZ1bmN0aW9uKHQpe2lmKDI9PT10LnRvdWNoZXMubGVuZ3RoKXt2YXIgZT1pLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1swXSkscj1pLm1vdXNlUG9zKHRoaXMuX2VsLHQudG91Y2hlc1sxXSk7dGhpcy5fc3RhcnRWZWM9ZS5zdWIociksdGhpcy5fc3RhcnRTY2FsZT10aGlzLl9tYXAudHJhbnNmb3JtLnNjYWxlLHRoaXMuX3N0YXJ0QmVhcmluZz10aGlzLl9tYXAudHJhbnNmb3JtLmJlYXJpbmcsdGhpcy5fZ2VzdHVyZUludGVudD12b2lkIDAsdGhpcy5faW5lcnRpYT1bXSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX29uTW92ZSwhMSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMuX29uRW5kLCExKX19LF9vbk1vdmU6ZnVuY3Rpb24odCl7aWYoMj09PXQudG91Y2hlcy5sZW5ndGgpe3ZhciBlPWkubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzBdKSxyPWkubW91c2VQb3ModGhpcy5fZWwsdC50b3VjaGVzWzFdKSxuPWUuYWRkKHIpLmRpdigyKSxhPWUuc3ViKHIpLG89YS5tYWcoKS90aGlzLl9zdGFydFZlYy5tYWcoKSxzPXRoaXMuX3JvdGF0aW9uRGlzYWJsZWQ/MDoxODAqYS5hbmdsZVdpdGgodGhpcy5fc3RhcnRWZWMpL01hdGguUEksbD10aGlzLl9tYXA7aWYodGhpcy5fZ2VzdHVyZUludGVudCl7dmFyIHU9e2R1cmF0aW9uOjAsYXJvdW5kOmwudW5wcm9qZWN0KG4pfTsicm90YXRlIj09PXRoaXMuX2dlc3R1cmVJbnRlbnQmJih1LmJlYXJpbmc9dGhpcy5fc3RhcnRCZWFyaW5nK3MpLCJ6b29tIiE9PXRoaXMuX2dlc3R1cmVJbnRlbnQmJiJyb3RhdGUiIT09dGhpcy5fZ2VzdHVyZUludGVudHx8KHUuem9vbT1sLnRyYW5zZm9ybS5zY2FsZVpvb20odGhpcy5fc3RhcnRTY2FsZSpvKSksbC5zdG9wKCksdGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksdGhpcy5faW5lcnRpYS5wdXNoKFtEYXRlLm5vdygpLG8sbl0pLGwuZWFzZVRvKHUse29yaWdpbmFsRXZlbnQ6dH0pfWVsc2V7dmFyIGM9TWF0aC5hYnMoMS1vKT4uMTU7TWF0aC5hYnMocyk+ND90aGlzLl9nZXN0dXJlSW50ZW50PSJyb3RhdGUiOmMmJih0aGlzLl9nZXN0dXJlSW50ZW50PSJ6b29tIiksdGhpcy5fZ2VzdHVyZUludGVudCYmKHRoaXMuX3N0YXJ0VmVjPWEsdGhpcy5fc3RhcnRTY2FsZT1sLnRyYW5zZm9ybS5zY2FsZSx0aGlzLl9zdGFydEJlYXJpbmc9bC50cmFuc2Zvcm0uYmVhcmluZyl9dC5wcmV2ZW50RGVmYXVsdCgpfX0sX29uRW5kOmZ1bmN0aW9uKHQpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25FbmQpLHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO3ZhciBlPXRoaXMuX2luZXJ0aWEscj10aGlzLl9tYXA7aWYoZS5sZW5ndGg8MilyZXR1cm4gdm9pZCByLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KTt2YXIgbj1lW2UubGVuZ3RoLTFdLGk9ZVswXSxhPXIudHJhbnNmb3JtLnNjYWxlWm9vbSh0aGlzLl9zdGFydFNjYWxlKm5bMV0pLHM9ci50cmFuc2Zvcm0uc2NhbGVab29tKHRoaXMuX3N0YXJ0U2NhbGUqaVsxXSksbD1hLXMsdT0oblswXS1pWzBdKS8xZTMsYz1uWzJdO2lmKDA9PT11fHxhPT09cylyZXR1cm4gdm9pZCByLnNuYXBUb05vcnRoKHt9LHtvcmlnaW5hbEV2ZW50OnR9KTt2YXIgaD0uMTUqbC91O01hdGguYWJzKGgpPjIuNSYmKGg9aD4wPzIuNTotMi41KTt2YXIgZj0xZTMqTWF0aC5hYnMoaC8oMTIqLjE1KSksZD1hK2gqZi8yZTM7ZDwwJiYoZD0wKSxyLmVhc2VUbyh7em9vbTpkLGR1cmF0aW9uOmYsZWFzaW5nOm8sYXJvdW5kOnIudW5wcm9qZWN0KGMpfSx7b3JpZ2luYWxFdmVudDp0fSl9LF9kcmFpbkluZXJ0aWFCdWZmZXI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5faW5lcnRpYSxlPURhdGUubm93KCk7dC5sZW5ndGg+MiYmZS10WzBdWzBdPjE2MDspdC5zaGlmdCgpfX19LHsiLi4vLi4vdXRpbC9kb20iOjQyNiwiLi4vLi4vdXRpbC91dGlsIjo0NDB9XSw0MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2kuYmluZEFsbChbIl9vbkhhc2hDaGFuZ2UiLCJfdXBkYXRlSGFzaCJdLHRoaXMpfQplLmV4cG9ydHM9bjt2YXIgaT10KCIuLi91dGlsL3V0aWwiKTtuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlSGFzaCksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLl9vbkhhc2hDaGFuZ2UsITEpLHRoaXMuX21hcC5vZmYoIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLGRlbGV0ZSB0aGlzLl9tYXAsdGhpc30sX29uSGFzaENoYW5nZTpmdW5jdGlvbigpe3ZhciB0PWxvY2F0aW9uLmhhc2gucmVwbGFjZSgiIyIsIiIpLnNwbGl0KCIvIik7cmV0dXJuIHQubGVuZ3RoPj0zJiYodGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrdFsyXSwrdFsxXV0sem9vbTordFswXSxiZWFyaW5nOisodFszXXx8MCl9KSwhMCl9LF91cGRhdGVIYXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldENlbnRlcigpLGU9dGhpcy5fbWFwLmdldFpvb20oKSxyPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksbj1NYXRoLm1heCgwLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpLGk9IiMiK01hdGgucm91bmQoMTAwKmUpLzEwMCsiLyIrdC5sYXQudG9GaXhlZChuKSsiLyIrdC5sbmcudG9GaXhlZChuKSsocj8iLyIrTWF0aC5yb3VuZCgxMCpyKS8xMDoiIik7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKCIiLCIiLGkpfX19LHsiLi4vdXRpbC91dGlsIjo0NDB9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX12YXIgaT10KCIuLi91dGlsL2NhbnZhcyIpLGE9dCgiLi4vdXRpbC91dGlsIiksbz10KCIuLi91dGlsL2Jyb3dzZXIiKSxzPXQoIi4uL3V0aWwvYnJvd3NlciIpLndpbmRvdyxsPXQoIi4uL3V0aWwvZXZlbnRlZCIpLHU9dCgiLi4vdXRpbC9kb20iKSxjPXQoIi4uL3N0eWxlL3N0eWxlIiksaD10KCIuLi9zdHlsZS9hbmltYXRpb25fbG9vcCIpLGY9dCgiLi4vcmVuZGVyL3BhaW50ZXIiKSxkPXQoIi4uL2dlby90cmFuc2Zvcm0iKSxwPXQoIi4vaGFzaCIpLG09dCgiLi9iaW5kX2hhbmRsZXJzIiksdj10KCIuL2NhbWVyYSIpLGc9dCgiLi4vZ2VvL2xuZ19sYXQiKSx5PXQoIi4uL2dlby9sbmdfbGF0X2JvdW5kcyIpLGI9dCgicG9pbnQtZ2VvbWV0cnkiKSx4PXQoIi4vY29udHJvbC9hdHRyaWJ1dGlvbiIpLF89e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTowLG1heFpvb206MjAsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLGJlYXJpbmdTbmFwOjcsaGFzaDohMSxhdHRyaWJ1dGlvbkNvbnRyb2w6ITAsZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsdHJhY2tSZXNpemU6ITAsd29ya2VyQ291bnQ6TWF0aC5tYXgoby5oYXJkd2FyZUNvbmN1cnJlbmN5LTEsMSl9LHc9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHQ9YS5leHRlbmQoe30sXyx0KSx0LndvcmtlckNvdW50PDEpdGhyb3cgbmV3IEVycm9yKCJ3b3JrZXJDb3VudCBtdXN0IGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuIik7dGhpcy5faW50ZXJhY3RpdmU9dC5pbnRlcmFjdGl2ZSx0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PXQuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCx0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9dC5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsdGhpcy5fdHJhY2tSZXNpemU9dC50cmFja1Jlc2l6ZSx0aGlzLl93b3JrZXJDb3VudD10LndvcmtlckNvdW50LHRoaXMuX2JlYXJpbmdTbmFwPXQuYmVhcmluZ1NuYXAsInN0cmluZyI9PXR5cGVvZiB0LmNvbnRhaW5lcj90aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodC5jb250YWluZXIpOnRoaXMuX2NvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmFuaW1hdGlvbkxvb3A9bmV3IGgsdGhpcy50cmFuc2Zvcm09bmV3IGQodC5taW5ab29tLHQubWF4Wm9vbSksdC5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKHQubWF4Qm91bmRzKSxhLmJpbmRBbGwoWyJfZm9yd2FyZFN0eWxlRXZlbnQiLCJfZm9yd2FyZFNvdXJjZUV2ZW50IiwiX2ZvcndhcmRMYXllckV2ZW50IiwiX2ZvcndhcmRUaWxlRXZlbnQiLCJfb25TdHlsZUxvYWQiLCJfb25TdHlsZUNoYW5nZSIsIl9vblNvdXJjZUFkZCIsIl9vblNvdXJjZVJlbW92ZSIsIl9vblNvdXJjZVVwZGF0ZSIsIl9vbldpbmRvd09ubGluZSIsIl9vbldpbmRvd1Jlc2l6ZSIsIl91cGRhdGUiLCJfcmVuZGVyIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUuYmluZCh0aGlzLCExKSksdGhpcy5vbigiem9vbSIsdGhpcy5fdXBkYXRlLmJpbmQodGhpcywhMCkpLHRoaXMub24oIm1vdmVlbmQiLGZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Mb29wLnNldCgzMDApLHRoaXMuX3JlcmVuZGVyKCl9LmJpbmQodGhpcykpLHZvaWQgMCE9PXMmJihzLmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHMuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSkpLG0odGhpcyx0KSx0aGlzLl9oYXNoPXQuaGFzaCYmKG5ldyBwKS5hZGRUbyh0aGlzKSx0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKXx8dGhpcy5qdW1wVG8oe2NlbnRlcjp0LmNlbnRlcix6b29tOnQuem9vbSxiZWFyaW5nOnQuYmVhcmluZyxwaXRjaDp0LnBpdGNofSksdGhpcy5zdGFja3M9e30sdGhpcy5fY2xhc3Nlcz1bXSx0aGlzLnJlc2l6ZSgpLHQuY2xhc3NlcyYmdGhpcy5zZXRDbGFzc2VzKHQuY2xhc3NlcyksdC5zdHlsZSYmdGhpcy5zZXRTdHlsZSh0LnN0eWxlKSx0LmF0dHJpYnV0aW9uQ29udHJvbCYmdGhpcy5hZGRDb250cm9sKG5ldyB4KHQuYXR0cmlidXRpb25Db250cm9sKSk7dmFyIGU9dGhpcy5maXJlLmJpbmQodGhpcywiZXJyb3IiKTt0aGlzLm9uKCJzdHlsZS5lcnJvciIsZSksdGhpcy5vbigic291cmNlLmVycm9yIixlKSx0aGlzLm9uKCJ0aWxlLmVycm9yIixlKSx0aGlzLm9uKCJsYXllci5lcnJvciIsZSl9O2EuZXh0ZW5kKHcucHJvdG90eXBlLGwpLGEuZXh0ZW5kKHcucHJvdG90eXBlLHYucHJvdG90eXBlKSxhLmV4dGVuZCh3LnByb3RvdHlwZSx7YWRkQ29udHJvbDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hZGRUbyh0aGlzKSx0aGlzfSxhZGRDbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jbGFzc2VzLmluZGV4T2YodCk+PTB8fCIiPT09dD90aGlzOih0aGlzLl9jbGFzc2VzLnB1c2godCksdGhpcy5fY2xhc3NPcHRpb25zPWUsdGhpcy5zdHlsZSYmdGhpcy5zdHlsZS51cGRhdGVDbGFzc2VzKCksdGhpcy5fdXBkYXRlKCEwKSl9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fY2xhc3Nlcy5pbmRleE9mKHQpO3JldHVybiByPDB8fCIiPT09dD90aGlzOih0aGlzLl9jbGFzc2VzLnNwbGljZShyLDEpLHRoaXMuX2NsYXNzT3B0aW9ucz1lLHRoaXMuc3R5bGUmJnRoaXMuc3R5bGUudXBkYXRlQ2xhc3NlcygpLHRoaXMuX3VwZGF0ZSghMCkpfSxzZXRDbGFzc2VzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LG49MDtuPHQubGVuZ3RoO24rKykiIiE9PXRbbl0mJihyW3Rbbl1dPSEwKTtyZXR1cm4gdGhpcy5fY2xhc3Nlcz1PYmplY3Qua2V5cyhyKSx0aGlzLl9jbGFzc09wdGlvbnM9ZSx0aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLnVwZGF0ZUNsYXNzZXMoKSx0aGlzLl91cGRhdGUoITApfSxoYXNDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2xhc3Nlcy5pbmRleE9mKHQpPj0wfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NsYXNzZXN9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTAsZT0wO3JldHVybiB0aGlzLl9jb250YWluZXImJih0PXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aHx8NDAwLGU9dGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodHx8MzAwKSx0aGlzLl9jYW52YXMucmVzaXplKHQsZSksdGhpcy50cmFuc2Zvcm0ucmVzaXplKHQsZSksdGhpcy5wYWludGVyLnJlc2l6ZSh0LGUpLHRoaXMuZmlyZSgibW92ZXN0YXJ0IikuZmlyZSgibW92ZSIpLmZpcmUoInJlc2l6ZSIpLmZpcmUoIm1vdmVlbmQiKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHkodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgYigwLDApKSx0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHRoaXMudHJhbnNmb3JtLnNpemUpKTtyZXR1cm4odGhpcy50cmFuc2Zvcm0uYW5nbGV8fHRoaXMudHJhbnNmb3JtLnBpdGNoKSYmKHQuZXh0ZW5kKHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24obmV3IGIodGhpcy50cmFuc2Zvcm0uc2l6ZS54LDApKSksdC5leHRlbmQodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihuZXcgYigwLHRoaXMudHJhbnNmb3JtLnNpemUueSkpKSksdH0sc2V0TWF4Qm91bmRzOmZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXkuY29udmVydCh0KTt0aGlzLnRyYW5zZm9ybS5sbmdSYW5nZT1bZS5nZXRXZXN0KCksZS5nZXRFYXN0KCldLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPVtlLmdldFNvdXRoKCksZS5nZXROb3J0aCgpXSx0aGlzLnRyYW5zZm9ybS5fY29uc3RyYWluKCksdGhpcy5fdXBkYXRlKCl9ZWxzZSBudWxsIT09dCYmdm9pZCAwIT09dHx8KHRoaXMudHJhbnNmb3JtLmxuZ1JhbmdlPVtdLHRoaXMudHJhbnNmb3JtLmxhdFJhbmdlPVtdLHRoaXMuX3VwZGF0ZSgpKTtyZXR1cm4gdGhpc30sc2V0TWluWm9vbTpmdW5jdGlvbih0KXtpZigodD1udWxsPT09dHx8dm9pZCAwPT09dD8wOnQpPj0wJiZ0PD10aGlzLnRyYW5zZm9ybS5tYXhab29tKXJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRab29tKCk8dCYmdGhpcy5zZXRab29tKHQpLHRoaXM7dGhyb3cgbmV3IEVycm9yKCJtaW5ab29tIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBtYXhab29tLCBpbmNsdXNpdmUiKX0sc2V0TWF4Wm9vbTpmdW5jdGlvbih0KXtpZigodD1udWxsPT09dHx8dm9pZCAwPT09dD8yMDp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSYmdDw9MjApcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb209dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFpvb20oKT50JiZ0aGlzLnNldFpvb20odCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBiZXR3ZWVuIHRoZSBjdXJyZW50IG1pblpvb20gYW5kIDIwLCBpbmNsdXNpdmUiKX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChnLmNvbnZlcnQodCkpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oYi5jb252ZXJ0KHQpKX0scXVlcnlSZW5kZXJlZEZlYXR1cmVzOmZ1bmN0aW9uKCl7dmFyIHQsZT17fTtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGg/KHQ9YXJndW1lbnRzWzBdLGU9YXJndW1lbnRzWzFdKToxPT09YXJndW1lbnRzLmxlbmd0aCYmZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBifHxBcnJheS5pc0FycmF5KHQpfShhcmd1bWVudHNbMF0pP3Q9YXJndW1lbnRzWzBdOjE9PT1hcmd1bWVudHMubGVuZ3RoJiYoZT1hcmd1bWVudHNbMF0pLHRoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHRoaXMuX21ha2VRdWVyeUdlb21ldHJ5KHQpLGUsdGhpcy50cmFuc2Zvcm0uem9vbSx0aGlzLnRyYW5zZm9ybS5hbmdsZSl9LF9tYWtlUXVlcnlHZW9tZXRyeTpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1bYi5jb252ZXJ0KFswLDBdKSxiLmNvbnZlcnQoW3RoaXMudHJhbnNmb3JtLndpZHRoLHRoaXMudHJhbnNmb3JtLmhlaWdodF0pXSk7dmFyIGU7aWYodCBpbnN0YW5jZW9mIGJ8fCJudW1iZXIiPT10eXBlb2YgdFswXSllPVtiLmNvbnZlcnQodCldO2Vsc2V7dmFyIHI9W2IuY29udmVydCh0WzBdKSxiLmNvbnZlcnQodFsxXSldO2U9W3JbMF0sbmV3IGIoclsxXS54LHJbMF0ueSksclsxXSxuZXcgYihyWzBdLngsclsxXS55KSxyWzBdXX1yZXR1cm4gZT1lLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRDb29yZGluYXRlKHQpfS5iaW5kKHRoaXMpKX0scXVlcnlTb3VyY2VGZWF0dXJlczpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnF1ZXJ5U291cmNlRmVhdHVyZXModCxlKX0sc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLm9mZigibG9hZCIsdGhpcy5fb25TdHlsZUxvYWQpLm9mZigiZXJyb3IiLHRoaXMuX2ZvcndhcmRTdHlsZUV2ZW50KS5vZmYoImNoYW5nZSIsdGhpcy5fb25TdHlsZUNoYW5nZSkub2ZmKCJzb3VyY2UuYWRkIix0aGlzLl9vblNvdXJjZUFkZCkub2ZmKCJzb3VyY2UucmVtb3ZlIix0aGlzLl9vblNvdXJjZVJlbW92ZSkub2ZmKCJzb3VyY2UubG9hZCIsdGhpcy5fb25Tb3VyY2VVcGRhdGUpLm9mZigic291cmNlLmVycm9yIix0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQpLm9mZigic291cmNlLmNoYW5nZSIsdGhpcy5fb25Tb3VyY2VVcGRhdGUpLm9mZigibGF5ZXIuYWRkIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub2ZmKCJsYXllci5yZW1vdmUiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KS5vZmYoImxheWVyLmVycm9yIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub2ZmKCJ0aWxlLmFkZCIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub2ZmKCJ0aWxlLnJlbW92ZSIsdGhpcy5fZm9yd2FyZFRpbGVFdmVudCkub2ZmKCJ0aWxlLmxvYWQiLHRoaXMuX3VwZGF0ZSkub2ZmKCJ0aWxlLmVycm9yIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vZmYoInRpbGUuc3RhdHMiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLl9yZW1vdmUoKSx0aGlzLm9mZigicm90YXRlIix0aGlzLnN0eWxlLl9yZWRvUGxhY2VtZW50KSx0aGlzLm9mZigicGl0Y2giLHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQpKSx0Pyh0aGlzLnN0eWxlPXQgaW5zdGFuY2VvZiBjP3Q6bmV3IGModCx0aGlzLmFuaW1hdGlvbkxvb3AsdGhpcy5fd29ya2VyQ291bnQpLHRoaXMuc3R5bGUub24oImxvYWQiLHRoaXMuX29uU3R5bGVMb2FkKS5vbigiZXJyb3IiLHRoaXMuX2ZvcndhcmRTdHlsZUV2ZW50KS5vbigiY2hhbmdlIix0aGlzLl9vblN0eWxlQ2hhbmdlKS5vbigic291cmNlLmFkZCIsdGhpcy5fb25Tb3VyY2VBZGQpLm9uKCJzb3VyY2UucmVtb3ZlIix0aGlzLl9vblNvdXJjZVJlbW92ZSkub24oInNvdXJjZS5sb2FkIix0aGlzLl9vblNvdXJjZVVwZGF0ZSkub24oInNvdXJjZS5lcnJvciIsdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KS5vbigic291cmNlLmNoYW5nZSIsdGhpcy5fb25Tb3VyY2VVcGRhdGUpLm9uKCJsYXllci5hZGQiLHRoaXMuX2ZvcndhcmRMYXllckV2ZW50KS5vbigibGF5ZXIucmVtb3ZlIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub24oImxheWVyLmVycm9yIix0aGlzLl9mb3J3YXJkTGF5ZXJFdmVudCkub24oInRpbGUuYWRkIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KS5vbigidGlsZS5yZW1vdmUiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9uKCJ0aWxlLmxvYWQiLHRoaXMuX3VwZGF0ZSkub24oInRpbGUuZXJyb3IiLHRoaXMuX2ZvcndhcmRUaWxlRXZlbnQpLm9uKCJ0aWxlLnN0YXRzIix0aGlzLl9mb3J3YXJkVGlsZUV2ZW50KSx0aGlzLm9uKCJyb3RhdGUiLHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQpLHRoaXMub24oInBpdGNoIix0aGlzLnN0eWxlLl9yZWRvUGxhY2VtZW50KSx0aGlzKToodGhpcy5zdHlsZT1udWxsLHRoaXMpfSxnZXRTdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuc3R5bGUpcmV0dXJuIHRoaXMuc3R5bGUuc2VyaWFsaXplKCl9LGFkZFNvdXJjZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZSh0LGUpLHRoaXMuX3VwZGF0ZSghMCksdGhpc30sYWRkU291cmNlVHlwZTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuYWRkU291cmNlVHlwZSh0LGUscil9LHJlbW92ZVNvdXJjZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UodCksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRTb3VyY2U6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKHQpfSxhZGRMYXllcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLmFkZExheWVyKHQsZSksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxyZW1vdmVMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZS5yZW1vdmVMYXllcih0KSx0aGlzLl91cGRhdGUoITApLHRoaXN9LGdldExheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldExheWVyKHQpfSxzZXRGaWx0ZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRGaWx0ZXIodCxlKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LHNldExheWVyWm9vbVJhbmdlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5zZXRMYXllclpvb21SYW5nZSh0LGUsciksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRGaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmlsdGVyKHQpfSxzZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkodCxlLHIsbiksdGhpcy5fdXBkYXRlKCEwKSx0aGlzfSxnZXRQYWludFByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRQYWludFByb3BlcnR5KHQsZSxyKX0sc2V0TGF5b3V0UHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KHQsZSxyKSx0aGlzLl91cGRhdGUoITApLHRoaXN9LGdldExheW91dFByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkodCxlKX0sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sZ2V0Q2FudmFzQ29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcn0sZ2V0Q2FudmFzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbnZhcy5nZXRFbGVtZW50KCl9LF9zZXR1cENvbnRhaW5lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcCIpO3ZhciBlPXRoaXMuX2NhbnZhc0NvbnRhaW5lcj11LmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY2FudmFzLWNvbnRhaW5lciIsdCk7dGhpcy5faW50ZXJhY3RpdmUmJmUuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtaW50ZXJhY3RpdmUiKSx0aGlzLl9jYW52YXM9bmV3IGkodGhpcyxlKTt2YXIgcj10aGlzLl9jb250cm9sQ29udGFpbmVyPXUuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jb250cm9sLWNvbnRhaW5lciIsdCksbj10aGlzLl9jb250cm9sQ29ybmVycz17fTtbInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09dS5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwtIit0LHIpfSl9LF9zZXR1cFBhaW50ZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYW52YXMuZ2V0V2ViR0xDb250ZXh0KHtmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQscHJlc2VydmVEcmF3aW5nQnVmZmVyOnRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcn0pO2lmKCF0KXJldHVybiB2b2lkIHRoaXMuZmlyZSgiZXJyb3IiLHtlcnJvcjpuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMIil9KTt0aGlzLnBhaW50ZXI9bmV3IGYodCx0aGlzLnRyYW5zZm9ybSl9LF9jb250ZXh0TG9zdDpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZnJhbWVJZCYmby5jYW5jZWxGcmFtZSh0aGlzLl9mcmFtZUlkKSx0aGlzLmZpcmUoIndlYmdsY29udGV4dGxvc3QiLHtvcmlnaW5hbEV2ZW50OnR9KX0sX2NvbnRleHRSZXN0b3JlZDpmdW5jdGlvbih0KXt0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZSgid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHtvcmlnaW5hbEV2ZW50OnR9KX0sbG9hZGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX3N0eWxlRGlydHkmJiF0aGlzLl9zb3VyY2VzRGlydHkmJiEoIXRoaXMuc3R5bGV8fCF0aGlzLnN0eWxlLmxvYWRlZCgpKX0sX3VwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdHlsZT8odGhpcy5fc3R5bGVEaXJ0eT10aGlzLl9zdHlsZURpcnR5fHx0LHRoaXMuX3NvdXJjZXNEaXJ0eT0hMCx0aGlzLl9yZXJlbmRlcigpLHRoaXMpOnRoaXN9LF9yZW5kZXI6ZnVuY3Rpb24oKXt0cnl7dGhpcy5zdHlsZSYmdGhpcy5fc3R5bGVEaXJ0eSYmKHRoaXMuX3N0eWxlRGlydHk9ITEsdGhpcy5zdHlsZS51cGRhdGUodGhpcy5fY2xhc3Nlcyx0aGlzLl9jbGFzc09wdGlvbnMpLHRoaXMuX2NsYXNzT3B0aW9ucz1udWxsLHRoaXMuc3R5bGUuX3JlY2FsY3VsYXRlKHRoaXMudHJhbnNmb3JtLnpvb20pKSx0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSx7ZGVidWc6dGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsc2hvd092ZXJkcmF3SW5zcGVjdG9yOnRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcix2ZXJ0aWNlczp0aGlzLnZlcnRpY2VzLHJvdGF0aW5nOnRoaXMucm90YXRpbmcsem9vbWluZzp0aGlzLnpvb21pbmd9KSx0aGlzLmZpcmUoInJlbmRlciIpLHRoaXMubG9hZGVkKCkmJiF0aGlzLl9sb2FkZWQmJih0aGlzLl9sb2FkZWQ9ITAsdGhpcy5maXJlKCJsb2FkIikpLHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmFuaW1hdGlvbkxvb3Auc3RvcHBlZCgpfHwodGhpcy5fc3R5bGVEaXJ0eT0hMCksKHRoaXMuX3NvdXJjZXNEaXJ0eXx8dGhpcy5fcmVwYWludHx8dGhpcy5fc3R5bGVEaXJ0eSkmJnRoaXMuX3JlcmVuZGVyKCl9Y2F0Y2godCl7dGhpcy5maXJlKCJlcnJvciIse2Vycm9yOnR9KX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5faGFzaCYmdGhpcy5faGFzaC5yZW1vdmUoKSxvLmNhbmNlbEZyYW1lKHRoaXMuX2ZyYW1lSWQpLHRoaXMuc2V0U3R5bGUobnVsbCksdm9pZCAwIT09cyYmcy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX29uV2luZG93UmVzaXplLCExKTt2YXIgdD10aGlzLnBhaW50ZXIuZ2wuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9sb3NlX2NvbnRleHQiKTt0JiZ0Lmxvc2VDb250ZXh0KCksbih0aGlzLl9jYW52YXNDb250YWluZXIpLG4odGhpcy5fY29udHJvbENvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLW1hcCIpfSxfcmVyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9by5mcmFtZSh0aGlzLl9yZW5kZXIpKX0sX2ZvcndhcmRTdHlsZUV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSgic3R5bGUuIit0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9mb3J3YXJkU291cmNlRXZlbnQ6ZnVuY3Rpb24odCl7dGhpcy5maXJlKHQudHlwZSxhLmV4dGVuZCh7c3R5bGU6dC50YXJnZXR9LHQpKX0sX2ZvcndhcmRMYXllckV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSh0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9mb3J3YXJkVGlsZUV2ZW50OmZ1bmN0aW9uKHQpe3RoaXMuZmlyZSh0LnR5cGUsYS5leHRlbmQoe3N0eWxlOnQudGFyZ2V0fSx0KSl9LF9vblN0eWxlTG9hZDpmdW5jdGlvbih0KXt0aGlzLnRyYW5zZm9ybS51bm1vZGlmaWVkJiZ0aGlzLmp1bXBUbyh0aGlzLnN0eWxlLnN0eWxlc2hlZXQpLHRoaXMuc3R5bGUudXBkYXRlKHRoaXMuX2NsYXNzZXMse3RyYW5zaXRpb246ITF9KSx0aGlzLl9mb3J3YXJkU3R5bGVFdmVudCh0KX0sX29uU3R5bGVDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKCEwKSx0aGlzLl9mb3J3YXJkU3R5bGVFdmVudCh0KX0sX29uU291cmNlQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXQuc291cmNlO2Uub25BZGQmJmUub25BZGQodGhpcyksdGhpcy5fZm9yd2FyZFNvdXJjZUV2ZW50KHQpfSxfb25Tb3VyY2VSZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dC5zb3VyY2U7ZS5vblJlbW92ZSYmZS5vblJlbW92ZSh0aGlzKSx0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQodCl9LF9vblNvdXJjZVVwZGF0ZTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGUoKSx0aGlzLl9mb3J3YXJkU291cmNlRXZlbnQodCl9LF9vbldpbmRvd09ubGluZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZSgpfSxfb25XaW5kb3dSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLl90cmFja1Jlc2l6ZSYmdGhpcy5zdG9wKCkucmVzaXplKCkuX3VwZGF0ZSgpfX0pLGEuZXh0ZW5kQWxsKHcucHJvdG90eXBlLHtfc2hvd1RpbGVCb3VuZGFyaWVzOiExLGdldCBzaG93VGlsZUJvdW5kYXJpZXMoKXtyZXR1cm4gdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzfSxzZXQgc2hvd1RpbGVCb3VuZGFyaWVzKHQpe3RoaXMuX3Nob3dUaWxlQm91bmRhcmllcyE9PXQmJih0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXM9dCx0aGlzLl91cGRhdGUoKSl9LF9zaG93Q29sbGlzaW9uQm94ZXM6ITEsZ2V0IHNob3dDb2xsaXNpb25Cb3hlcygpe3JldHVybiB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXN9LHNldCBzaG93Q29sbGlzaW9uQm94ZXModCl7dGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzIT09dCYmKHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcz10LHRoaXMuc3R5bGUuX3JlZG9QbGFjZW1lbnQoKSl9LF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6ITEsZ2V0IHNob3dPdmVyZHJhd0luc3BlY3Rvcigpe3JldHVybiB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3J9LHNldCBzaG93T3ZlcmRyYXdJbnNwZWN0b3IodCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0sX3JlcGFpbnQ6ITEsZ2V0IHJlcGFpbnQoKXtyZXR1cm4gdGhpcy5fcmVwYWludH0sc2V0IHJlcGFpbnQodCl7dGhpcy5fcmVwYWludD10LHRoaXMuX3VwZGF0ZSgpfSxfdmVydGljZXM6ITEsZ2V0IHZlcnRpY2VzKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2VzfSxzZXQgdmVydGljZXModCl7dGhpcy5fdmVydGljZXM9dCx0aGlzLl91cGRhdGUoKX19KX0seyIuLi9nZW8vbG5nX2xhdCI6MzM3LCIuLi9nZW8vbG5nX2xhdF9ib3VuZHMiOjMzOCwiLi4vZ2VvL3RyYW5zZm9ybSI6MzM5LCIuLi9yZW5kZXIvcGFpbnRlciI6MzUzLCIuLi9zdHlsZS9hbmltYXRpb25fbG9vcCI6MzczLCIuLi9zdHlsZS9zdHlsZSI6Mzc2LCIuLi91dGlsL2Jyb3dzZXIiOjQyNCwiLi4vdXRpbC9jYW52YXMiOjQyNSwiLi4vdXRpbC9kb20iOjQyNiwiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwLCIuL2JpbmRfaGFuZGxlcnMiOjQwNSwiLi9jYW1lcmEiOjQwNiwiLi9jb250cm9sL2F0dHJpYnV0aW9uIjo0MDcsIi4vaGFzaCI6NDE4LCJwb2ludC1nZW9tZXRyeSI6NDgyfV0sNDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0fHwodD1pLmNyZWF0ZSgiZGl2IikpLHQuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtbWFya2VyIiksdGhpcy5fZWw9dCx0aGlzLl9vZmZzZXQ9by5jb252ZXJ0KGUmJmUub2Zmc2V0fHxbMCwwXSksdGhpcy5fdXBkYXRlPXRoaXMuX3VwZGF0ZS5iaW5kKHRoaXMpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4uL3V0aWwvZG9tIiksYT10KCIuLi9nZW8vbG5nX2xhdCIpLG89dCgicG9pbnQtZ2VvbWV0cnkiKTtuLnByb3RvdHlwZT17YWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVtb3ZlKCksdGhpcy5fbWFwPXQsdC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbCksdC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl91cGRhdGUoKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcD1udWxsKTt2YXIgdD10aGlzLl9lbC5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnJlbW92ZUNoaWxkKHRoaXMuX2VsKSx0aGlzfSxnZXRMbmdMYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG5nTGF0fSxzZXRMbmdMYXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2xuZ0xhdD1hLmNvbnZlcnQodCksdGhpcy5fdXBkYXRlKCksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbH0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQ9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7aS5zZXRUcmFuc2Zvcm0odGhpcy5fZWwsInRyYW5zbGF0ZSgiK3QueCsicHgsIit0LnkrInB4KSIpfX19fSx7Ii4uL2dlby9sbmdfbGF0IjozMzcsIi4uL3V0aWwvZG9tIjo0MjYsInBvaW50LWdlb21ldHJ5Ijo0ODJ9XSw0MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpLnNldE9wdGlvbnModGhpcyx0KSxpLmJpbmRBbGwoWyJfdXBkYXRlIiwiX29uQ2xpY2tDbG9zZSJdLHRoaXMpfWUuZXhwb3J0cz1uO3ZhciBpPXQoIi4uL3V0aWwvdXRpbCIpLGE9dCgiLi4vdXRpbC9ldmVudGVkIiksbz10KCIuLi91dGlsL2RvbSIpLHM9dCgiLi4vZ2VvL2xuZ19sYXQiKTtuLnByb3RvdHlwZT1pLmluaGVyaXQoYSx7b3B0aW9uczp7Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwfSxhZGRUbzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwPXQsdGhpcy5fbWFwLm9uKCJtb3ZlIix0aGlzLl91cGRhdGUpLHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2smJnRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSksdGhpcy5fdXBkYXRlKCksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQmJnRoaXMuX2NvbnRlbnQucGFyZW50Tm9kZSYmdGhpcy5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRhaW5lciYmKHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwJiYodGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25DbGlja0Nsb3NlKSxkZWxldGUgdGhpcy5fbWFwKSx0aGlzLmZpcmUoImNsb3NlIiksdGhpc30sZ2V0TG5nTGF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sc2V0TG5nTGF0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sbmdMYXQ9cy5jb252ZXJ0KHQpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LHNldFRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KSl9LHNldEhUTUw6ZnVuY3Rpb24odCl7dmFyIGUscj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7Zm9yKG4uaW5uZXJIVE1MPXQ7Oyl7aWYoIShlPW4uZmlyc3RDaGlsZCkpYnJlYWs7ci5hcHBlbmRDaGlsZChlKX1yZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHIpfSxzZXRET01Db250ZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxfY3JlYXRlQ29udGVudDpmdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnRoaXMuX2NvbnRlbnQucGFyZW50Tm9kZSYmdGhpcy5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9by5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249by5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUw9IiYjMjE1OyIsdGhpcy5fY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2tDbG9zZSkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwJiZ0aGlzLl9sbmdMYXQmJnRoaXMuX2NvbnRlbnQpe3RoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1vLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPW8uY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC10aXAiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpKTt2YXIgdD10aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLnJvdW5kKCksZT10aGlzLm9wdGlvbnMuYW5jaG9yO2lmKCFlKXt2YXIgcj10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGgsbj10aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O2U9dC55PG4/WyJ0b3AiXTp0Lnk+dGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQtbj9bImJvdHRvbSJdOltdLHQueDxyLzI/ZS5wdXNoKCJsZWZ0Iik6dC54PnRoaXMuX21hcC50cmFuc2Zvcm0ud2lkdGgtci8yJiZlLnB1c2goInJpZ2h0IiksZT0wPT09ZS5sZW5ndGg/ImJvdHRvbSI6ZS5qb2luKCItIil9dmFyIGk9e3RvcDoidHJhbnNsYXRlKC01MCUsMCkiLCJ0b3AtbGVmdCI6InRyYW5zbGF0ZSgwLDApIiwidG9wLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLDApIixib3R0b206InRyYW5zbGF0ZSgtNTAlLC0xMDAlKSIsImJvdHRvbS1sZWZ0IjoidHJhbnNsYXRlKDAsLTEwMCUpIiwiYm90dG9tLXJpZ2h0IjoidHJhbnNsYXRlKC0xMDAlLC0xMDAlKSIsbGVmdDoidHJhbnNsYXRlKDAsLTUwJSkiLHJpZ2h0OiJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkifSxhPXRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3Q7Zm9yKHZhciBzIGluIGkpYS5yZW1vdmUoIm1hcGJveGdsLXBvcHVwLWFuY2hvci0iK3MpO2EuYWRkKCJtYXBib3hnbC1wb3B1cC1hbmNob3ItIitlKSxvLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsaVtlXSsiIHRyYW5zbGF0ZSgiK3QueCsicHgsIit0LnkrInB4KSIpfX0sX29uQ2xpY2tDbG9zZTpmdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9fSl9LHsiLi4vZ2VvL2xuZ19sYXQiOjMzNywiLi4vdXRpbC9kb20iOjQyNiwiLi4vdXRpbC9ldmVudGVkIjo0MzIsIi4uL3V0aWwvdXRpbCI6NDQwfV0sNDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5jYWxsYmFja3M9e30sdGhpcy5jYWxsYmFja0lEPTAsdGhpcy5yZWNlaXZlPXRoaXMucmVjZWl2ZS5iaW5kKHRoaXMpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSl9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxyKXt0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiI8cmVzcG9uc2U+IixpZDpTdHJpbmcoaSksZXJyb3I6dD9TdHJpbmcodCk6bnVsbCxkYXRhOmV9LHIpfXZhciByLG49dC5kYXRhLGk9bi5pZDtpZigiPHJlc3BvbnNlPiI9PT1uLnR5cGUpcj10aGlzLmNhbGxiYWNrc1tuLmlkXSxkZWxldGUgdGhpcy5jYWxsYmFja3Nbbi5pZF0sciYmcihuLmVycm9yfHxudWxsLG4uZGF0YSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudFtuLnR5cGVdKXRoaXMucGFyZW50W24udHlwZV0obi5kYXRhLGUuYmluZCh0aGlzKSk7ZWxzZSBpZih2b2lkIDAhPT1uLmlkJiZ0aGlzLnBhcmVudC53b3JrZXJTb3VyY2VzKXt2YXIgYT1uLnR5cGUuc3BsaXQoIi4iKTt0aGlzLnBhcmVudC53b3JrZXJTb3VyY2VzW2FbMF1dW2FbMV1dKG4uZGF0YSxlLmJpbmQodGhpcykpfWVsc2UgdGhpcy5wYXJlbnRbbi50eXBlXShuLmRhdGEpfSxuLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW51bGw7ciYmKHRoaXMuY2FsbGJhY2tzW2k9dGhpcy5jYWxsYmFja0lEKytdPXIpLHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDpTdHJpbmcoaSksZGF0YTplfSxuKX0sbi5wcm90b3R5cGUucG9zdE1lc3NhZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh0LGUpfX0se31dLDQyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPXQsZS5wcm90b2NvbD09PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sJiZlLmhvc3Q9PT1kb2N1bWVudC5sb2NhdGlvbi5ob3N0fXIuZ2V0SlNPTj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLHQsITApLHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiIpLHIub25lcnJvcj1mdW5jdGlvbih0KXtlKHQpfSxyLm9ubG9hZD1mdW5jdGlvbigpe2lmKHIuc3RhdHVzPj0yMDAmJnIuc3RhdHVzPDMwMCYmci5yZXNwb25zZSl7dmFyIHQ7dHJ5e3Q9SlNPTi5wYXJzZShyLnJlc3BvbnNlKX1jYXRjaCh0KXtyZXR1cm4gZSh0KX1lKG51bGwsdCl9ZWxzZSBlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5zZW5kKCkscn0sci5nZXRBcnJheUJ1ZmZlcj1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gci5vcGVuKCJHRVQiLHQsITApLHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsci5vbmVycm9yPWZ1bmN0aW9uKHQpe2UodCl9LHIub25sb2FkPWZ1bmN0aW9uKCl7ci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwJiZyLnJlc3BvbnNlP2UobnVsbCxyLnJlc3BvbnNlKTplKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5zZW5kKCkscn0sci5nZXRJbWFnZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmdldEFycmF5QnVmZmVyKHQsZnVuY3Rpb24odCxyKXtpZih0KXJldHVybiBlKHQpO3ZhciBuPW5ldyBJbWFnZTtuLm9ubG9hZD1mdW5jdGlvbigpe2UobnVsbCxuKSwod2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkucmV2b2tlT2JqZWN0VVJMKG4uc3JjKX07dmFyIGk9bmV3IEJsb2IoW25ldyBVaW50OEFycmF5KHIpXSx7dHlwZToiaW1hZ2UvcG5nIn0pO3JldHVybiBuLnNyYz0od2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTCkuY3JlYXRlT2JqZWN0VVJMKGkpLG4uZ2V0RGF0YT1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGU9dC5nZXRDb250ZXh0KCIyZCIpO3JldHVybiB0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHQsZS5kcmF3SW1hZ2UobiwwLDApLGUuZ2V0SW1hZ2VEYXRhKDAsMCxuLndpZHRoLG4uaGVpZ2h0KS5kYXRhfSxufSl9LHIuZ2V0VmlkZW89ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpO3Iub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwscil9O2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzb3VyY2UiKTtuKHRbaV0pfHwoci5jcm9zc09yaWdpbj0iQW5vbnltb3VzIiksYS5zcmM9dFtpXSxyLmFwcGVuZENoaWxkKGEpfXJldHVybiByLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gcn0scn19LHt9XSw0MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci53aW5kb3c9d2luZG93LGUuZXhwb3J0cy5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnBlcmZvcm1hbmNlJiZ3aW5kb3cucGVyZm9ybWFuY2Uubm93P3dpbmRvdy5wZXJmb3JtYW5jZS5ub3cuYmluZCh3aW5kb3cucGVyZm9ybWFuY2UpOkRhdGUubm93LmJpbmQoRGF0ZSl9KCk7dmFyIG49d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8d2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lO3IuZnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9O3ZhciBpPXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8d2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tc0NhbmNlbEFuaW1hdGlvbkZyYW1lO3IuY2FuY2VsRnJhbWU9ZnVuY3Rpb24odCl7aSh0KX0sci50aW1lZD1mdW5jdGlvbih0LG4saSl7ZnVuY3Rpb24gYShsKXtvfHwobD1lLmV4cG9ydHMubm93KCksbD49cytuP3QuY2FsbChpLDEpOih0LmNhbGwoaSwobC1zKS9uKSxyLmZyYW1lKGEpKSl9aWYoIW4pcmV0dXJuIHQuY2FsbChpLDEpLG51bGw7dmFyIG89ITEscz1lLmV4cG9ydHMubm93KCk7cmV0dXJuIHIuZnJhbWUoYSksZnVuY3Rpb24oKXtvPSEwfX0sci5zdXBwb3J0ZWQ9dCgibWFwYm94LWdsLXN1cHBvcnRlZCIpLHIuaGFyZHdhcmVDb25jdXJyZW5jeT1uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeXx8NCxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGV2aWNlUGl4ZWxSYXRpbyIse2dldDpmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb319KSxyLnN1cHBvcnRzV2VicD0hMTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTthLm9ubG9hZD1mdW5jdGlvbigpe3Iuc3VwcG9ydHNXZWJwPSEwfSxhLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmg0QUFBQlhSVUpRVmxBNFRCRUFBQUF2QVFBQUFBZlEvLzczdi8rQmlPaC9BQUE9IixyLnN1cHBvcnRzR2VvbG9jYXRpb249ISFuYXZpZ2F0b3IuZ2VvbG9jYXRpb259LHsibWFwYm94LWdsLXN1cHBvcnRlZCI6MzI1fV0sNDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0JiZlJiYodGhpcy5jYW52YXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmNhbnZhcy5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jYW52YXMiKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0Ll9jb250ZXh0TG9zdC5iaW5kKHQpLCExKSx0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdC5fY29udGV4dFJlc3RvcmVkLmJpbmQodCksITEpLHRoaXMuY2FudmFzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLDApLGUuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpKX12YXIgaT10KCIuLi91dGlsIiksYT10KCJtYXBib3gtZ2wtc3VwcG9ydGVkIik7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7dGhpcy5jYW52YXMud2lkdGg9cip0LHRoaXMuY2FudmFzLmhlaWdodD1yKmUsdGhpcy5jYW52YXMuc3R5bGUud2lkdGg9dCsicHgiLHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodD1lKyJweCJ9LG4ucHJvdG90eXBlLmdldFdlYkdMQ29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gdD1pLmV4dGVuZCh7fSx0LGEud2ViR0xDb250ZXh0QXR0cmlidXRlcyksdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgid2ViZ2wiLHQpfHx0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHQpfSxuLnByb3RvdHlwZS5nZXRFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FudmFzfX0seyIuLi91dGlsIjo0NDAsIm1hcGJveC1nbC1zdXBwb3J0ZWQiOjMyNX1dLDQyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKHRbZV1pbiBzKXJldHVybiB0W2VdfWZ1bmN0aW9uIGkodCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixpLCEwKX12YXIgYT10KCJwb2ludC1nZW9tZXRyeSIpO3IuY3JlYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpO3JldHVybiBlJiYobi5jbGFzc05hbWU9ZSksciYmci5hcHBlbmRDaGlsZChuKSxufTt2YXIgbyxzPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxsPW4oWyJ1c2VyU2VsZWN0IiwiTW96VXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJtc1VzZXJTZWxlY3QiXSk7ci5kaXNhYmxlRHJhZz1mdW5jdGlvbigpe2wmJihvPXNbbF0sc1tsXT0ibm9uZSIpfSxyLmVuYWJsZURyYWc9ZnVuY3Rpb24oKXtsJiYoc1tsXT1vKX07dmFyIHU9bihbInRyYW5zZm9ybSIsIldlYmtpdFRyYW5zZm9ybSJdKTtyLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe3Quc3R5bGVbdV09ZX0sci5zdXBwcmVzc0NsaWNrPWZ1bmN0aW9uKCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixpLCEwKSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsaSwhMCl9LDApfSxyLm1vdXNlUG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gZT1lLnRvdWNoZXM/ZS50b3VjaGVzWzBdOmUsbmV3IGEoZS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS5jbGllbnRZLXIudG9wLXQuY2xpZW50VG9wKX0sci50b3VjaFBvcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49W10saT0wO2k8ZS50b3VjaGVzLmxlbmd0aDtpKyspbi5wdXNoKG5ldyBhKGUudG91Y2hlc1tpXS5jbGllbnRYLXIubGVmdC10LmNsaWVudExlZnQsZS50b3VjaGVzW2ldLmNsaWVudFktci50b3AtdC5jbGllbnRUb3ApKTtyZXR1cm4gbn19LHsicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDQyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ3ZWJ3b3JraWZ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHQoIi4uLy4uL3NvdXJjZS93b3JrZXIiKSl9fSx7Ii4uLy4uL3NvdXJjZS93b3JrZXIiOjM3MSx3ZWJ3b3JraWZ5OjU2Mn1dLDQyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGUuYXJlYS10LmFyZWF9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxyPXRbb10sbis9KHIueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn12YXIgYT10KCJxdWlja3NlbGVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKHI8PTEpcmV0dXJuW3RdO2Zvcih2YXIgbyxzLGw9W10sdT0wO3U8cjt1Kyspe3ZhciBjPWkodFt1XSk7MCE9PWMmJih0W3VdLmFyZWE9TWF0aC5hYnMoYyksdm9pZCAwPT09cyYmKHM9YzwwKSxzPT09YzwwPyhvJiZsLnB1c2gobyksbz1bdFt1XV0pOm8ucHVzaCh0W3VdKSl9aWYobyYmbC5wdXNoKG8pLGU+MSlmb3IodmFyIGg9MDtoPGwubGVuZ3RoO2grKylsW2hdLmxlbmd0aDw9ZXx8KGEobFtoXSxlLDEsbFtoXS5sZW5ndGgtMSxuKSxsW2hdPWxbaF0uc2xpY2UoMCxlKSk7cmV0dXJuIGx9fSx7cXVpY2tzZWxlY3Q6NDkxfV0sNDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17QVBJX1VSTDoiaHR0cHM6Ly9hcGkubWFwYm94LmNvbSIsUkVRVUlSRV9BQ0NFU1NfVE9LRU46ITB9fSx7fV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5fc3RyaW5nVG9OdW1iZXI9e30sdGhpcy5fbnVtYmVyVG9TdHJpbmc9W107Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07dGhpcy5fc3RyaW5nVG9OdW1iZXJbcl09ZSx0aGlzLl9udW1iZXJUb1N0cmluZ1tlXT1yfX12YXIgaT10KCJhc3NlcnQiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCBpbiB0aGlzLl9zdHJpbmdUb051bWJlciksdGhpcy5fc3RyaW5nVG9OdW1iZXJbdF19LG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0PHRoaXMuX251bWJlclRvU3RyaW5nLmxlbmd0aCksdGhpcy5fbnVtYmVyVG9TdHJpbmdbdF19fSx7YXNzZXJ0OjQ1fV0sNDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmN1cnJlbnRBY3Rvcj0wO2Zvcih2YXIgcj0wO3I8dDtyKyspe3ZhciBuPW5ldyBvLGk9bmV3IGEobixlKTtpLm5hbWU9IldvcmtlciAiK3IsdGhpcy5hY3RvcnMucHVzaChpKX19dmFyIGk9dCgiLi91dGlsIiksYT10KCIuL2FjdG9yIiksbz10KCIuL3dlYl93b3JrZXIiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZT17YnJvYWRjYXN0OmZ1bmN0aW9uKHQsZSxyKXtyPXJ8fGZ1bmN0aW9uKCl7fSxpLmFzeW5jQWxsKHRoaXMuYWN0b3JzLGZ1bmN0aW9uKHIsbil7ci5zZW5kKHQsZSxuKX0scil9LHNlbmQ6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4oIm51bWJlciIhPXR5cGVvZiBufHxpc05hTihuKSkmJihuPXRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgpLHRoaXMuYWN0b3JzW25dLnNlbmQodCxlLHIsaSksbn0scmVtb3ZlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx0aGlzLmFjdG9ycy5sZW5ndGg7dCsrKXRoaXMuYWN0b3JzW3RdLnRhcmdldC50ZXJtaW5hdGUoKTt0aGlzLmFjdG9ycz1bXX19fSx7Ii4vYWN0b3IiOjQyMiwiLi91dGlsIjo0NDAsIi4vd2ViX3dvcmtlciI6NDI3fV0sNDMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdXRpbCIpLGk9e29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX2V2ZW50c1t0XT10aGlzLl9ldmVudHNbdF18fFtdLHRoaXMuX2V2ZW50c1t0XS5wdXNoKGUpLHRoaXN9LG9mZjpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzLHRoaXM7aWYoIXRoaXMubGlzdGVucyh0KSlyZXR1cm4gdGhpcztpZihlKXt2YXIgcj10aGlzLl9ldmVudHNbdF0uaW5kZXhPZihlKTtyPj0wJiZ0aGlzLl9ldmVudHNbdF0uc3BsaWNlKHIsMSksdGhpcy5fZXZlbnRzW3RdLmxlbmd0aHx8ZGVsZXRlIHRoaXMuX2V2ZW50c1t0XX1lbHNlIGRlbGV0ZSB0aGlzLl9ldmVudHNbdF07cmV0dXJuIHRoaXN9LG9uY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj1mdW5jdGlvbihuKXt0aGlzLm9mZih0LHIpLGUuY2FsbCh0aGlzLG4pfS5iaW5kKHRoaXMpO3JldHVybiB0aGlzLm9uKHQsciksdGhpc30sZmlyZTpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLmxpc3RlbnModCkpcmV0dXJuIG4uZW5kc1dpdGgodCwiZXJyb3IiKSYmY29uc29sZS5lcnJvcihlJiZlLmVycm9yfHxlfHwiRW1wdHkgZXJyb3IgZXZlbnQiKSx0aGlzO2U9bi5leHRlbmQoe30sZSksbi5leHRlbmQoZSx7dHlwZTp0LHRhcmdldDp0aGlzfSk7Zm9yKHZhciByPXRoaXMuX2V2ZW50c1t0XS5zbGljZSgpLGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmNhbGwodGhpcyxlKTtyZXR1cm4gdGhpc30sbGlzdGVuczpmdW5jdGlvbih0KXtyZXR1cm4hKCF0aGlzLl9ldmVudHN8fCF0aGlzLl9ldmVudHNbdF0pfX07ZS5leHBvcnRzPWl9LHsiLi91dGlsIjo0NDB9XSw0MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuc3RhY2tzPXQucmVhZEZpZWxkcyhpLFtdLGUpfWZ1bmN0aW9uIGkodCxlLHIpe2lmKDE9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKGEse2dseXBoczp7fX0pO2UucHVzaChuKX19ZnVuY3Rpb24gYSh0LGUscil7aWYoMT09PXQpZS5uYW1lPXIucmVhZFN0cmluZygpO2Vsc2UgaWYoMj09PXQpZS5yYW5nZT1yLnJlYWRTdHJpbmcoKTtlbHNlIGlmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKG8se30pO2UuZ2x5cGhzW24uaWRdPW59fWZ1bmN0aW9uIG8odCxlLHIpezE9PT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09PXQ/ZS5iaXRtYXA9ci5yZWFkQnl0ZXMoKTozPT09dD9lLndpZHRoPXIucmVhZFZhcmludCgpOjQ9PT10P2UuaGVpZ2h0PXIucmVhZFZhcmludCgpOjU9PT10P2UubGVmdD1yLnJlYWRTVmFyaW50KCk6Nj09PXQ/ZS50b3A9ci5yZWFkU1ZhcmludCgpOjc9PT10JiYoZS5hZHZhbmNlPXIucmVhZFZhcmludCgpKX1lLmV4cG9ydHM9bn0se31dLDQzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9ZS5leHBvcnRzPW4sbi5udW1iZXI9bixuLnZlYzI9ZnVuY3Rpb24odCxlLHIpe3JldHVybltuKHRbMF0sZVswXSxyKSxuKHRbMV0sZVsxXSxyKV19LG4uY29sb3I9ZnVuY3Rpb24odCxlLHIpe3JldHVybltuKHRbMF0sZVswXSxyKSxuKHRbMV0sZVsxXSxyKSxuKHRbMl0sZVsyXSxyKSxuKHRbM10sZVszXSxyKV19LG4uYXJyYXk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0LGkpe3JldHVybiBuKHQsZVtpXSxyKX0pfX0se31dLDQzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylmb3IodmFyIGk9dFtuXSxhPTA7YTxlLmxlbmd0aDthKyspZm9yKHZhciBvPWVbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2lmKGQoaSxsKSlyZXR1cm4hMDtpZihjKGwsaSxyKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpKHQsZSl7aWYoMT09PXQubGVuZ3RoJiYxPT09dFswXS5sZW5ndGgpcmV0dXJuIGYoZSx0WzBdWzBdKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIG49ZVtyXSxpPTA7aTxuLmxlbmd0aDtpKyspaWYoZih0LG5baV0pKXJldHVybiEwO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxsPTA7bDxvLmxlbmd0aDtsKyspaWYoZihlLG9bbF0pKXJldHVybiEwO2Zvcih2YXIgdT0wO3U8ZS5sZW5ndGg7dSsrKWlmKHMobyxlW3VdKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9ZVtuXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV07aWYocy5sZW5ndGg+PTMpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspaWYoZChzLGlbbF0pKXJldHVybiEwO2lmKG8ocyxpLHIpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHQubGVuZ3RoPjEpe2lmKHModCxlKSlyZXR1cm4hMDtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihjKGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZihjKHRbaV0sZSxyKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aC0xO3IrKylmb3IodmFyIG49dFtyXSxpPXRbcisxXSxhPTA7YTxlLmxlbmd0aC0xO2ErKyl7dmFyIG89ZVthXSxzPWVbYSsxXTtpZih1KG4saSxvLHMpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybihyLnktdC55KSooZS54LXQueCk+KGUueS10LnkpKihyLngtdC54KX1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiBsKHQscixuKSE9PWwoZSxyLG4pJiZsKHQsZSxyKSE9PWwodCxlLG4pfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXIqcjtpZigxPT09ZS5sZW5ndGgpcmV0dXJuIHQuZGlzdFNxcihlWzBdKTxuO2Zvcih2YXIgaT0xO2k8ZS5sZW5ndGg7aSsrKXtpZihoKHQsZVtpLTFdLGVbaV0pPG4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByLG4saSxhPSExLG89MDtvPHQubGVuZ3RoO28rKyl7cj10W29dO2Zvcih2YXIgcz0wLGw9ci5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpfXJldHVybiBhfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9ITEsbj0wLGk9dC5sZW5ndGgtMTtuPHQubGVuZ3RoO2k9bisrKXt2YXIgYT10W25dLG89dFtpXTthLnk+ZS55IT1vLnk+ZS55JiZlLng8KG8ueC1hLngpKihlLnktYS55KS8oby55LWEueSkrYS54JiYocj0hcil9cmV0dXJuIHJ9ZS5leHBvcnRzPXttdWx0aVBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aVBvaW50Om4sbXVsdGlQb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbjppLG11bHRpUG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZTphfX0se31dLDQzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5tYXg9dCx0aGlzLm9uUmVtb3ZlPWUsdGhpcy5yZXNldCgpfWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSl0aGlzLm9uUmVtb3ZlKHRoaXMuZGF0YVt0XSk7cmV0dXJuIHRoaXMuZGF0YT17fSx0aGlzLm9yZGVyPVtdLHRoaXN9LG4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe2lmKHRoaXMuaGFzKHQpKXRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZih0KSwxKSx0aGlzLmRhdGFbdF09ZSx0aGlzLm9yZGVyLnB1c2godCk7ZWxzZSBpZih0aGlzLmRhdGFbdF09ZSx0aGlzLm9yZGVyLnB1c2godCksdGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXgpe3ZhciByPXRoaXMuZ2V0KHRoaXMub3JkZXJbMF0pO3ImJnRoaXMub25SZW1vdmUocil9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLmRhdGF9LG4ucHJvdG90eXBlLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcmRlcn0sbi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmhhcyh0KSlyZXR1cm4gbnVsbDt2YXIgZT10aGlzLmRhdGFbdF07cmV0dXJuIGRlbGV0ZSB0aGlzLmRhdGFbdF0sdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpLGV9LG4ucHJvdG90eXBlLnNldE1heFNpemU9ZnVuY3Rpb24odCl7Zm9yKHRoaXMubWF4PXQ7dGhpcy5vcmRlci5sZW5ndGg+dGhpcy5tYXg7KXt2YXIgZT10aGlzLmdldCh0aGlzLm9yZGVyWzBdKTtlJiZ0aGlzLm9uUmVtb3ZlKGUpfXJldHVybiB0aGlzfX0se31dLDQzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtpZighKHI9cnx8by5BQ0NFU1NfVE9LRU4pJiZvLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXRocm93IG5ldyBFcnJvcigiQW4gQVBJIGFjY2VzcyB0b2tlbiBpcyByZXF1aXJlZCB0byB1c2UgTWFwYm94IEdMLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9kZXZlbG9wZXJzL2FwaS8jYWNjZXNzLXRva2VucyIpO2lmKHQ9dC5yZXBsYWNlKC9ebWFwYm94OlwvXC8vLG8uQVBJX1VSTCtlKSx0Kz0tMSE9PXQuaW5kZXhPZigiPyIpPyImYWNjZXNzX3Rva2VuPSI6Ij9hY2Nlc3NfdG9rZW49IixvLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXtpZigicyI9PT1yWzBdKXRocm93IG5ldyBFcnJvcigiVXNlIGEgcHVibGljIGFjY2VzcyB0b2tlbiAocGsuKikgd2l0aCBNYXBib3ggR0wgSlMsIG5vdCBhIHNlY3JldCBhY2Nlc3MgdG9rZW4gKHNrLiopLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9kZXZlbG9wZXJzL2FwaS8jYWNjZXNzLXRva2VucyIpO3QrPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdD8iPyIrdDoiIn1mdW5jdGlvbiBhKHQpe3JldHVybiB0LmFjY2Vzc190b2tlbiYmInRrLiI9PT10LmFjY2Vzc190b2tlbi5zbGljZSgwLDMpP3UuZXh0ZW5kKHt9LHQse2FjY2Vzc190b2tlbjpvLkFDQ0VTU19UT0tFTn0pOnR9dmFyIG89dCgiLi9jb25maWciKSxzPXQoIi4vYnJvd3NlciIpLGw9dCgidXJsIiksdT10KCIuL3V0aWwiKTtlLmV4cG9ydHMubm9ybWFsaXplU3R5bGVVUkw9ZnVuY3Rpb24odCxlKXt2YXIgcj1sLnBhcnNlKHQpO3JldHVybiJtYXBib3g6IiE9PXIucHJvdG9jb2w/dDpuKCJtYXBib3g6LyIrci5wYXRobmFtZStpKHIucXVlcnkpLCIvc3R5bGVzL3YxLyIsZSl9LGUuZXhwb3J0cy5ub3JtYWxpemVTb3VyY2VVUkw9ZnVuY3Rpb24odCxlKXtyZXR1cm4ibWFwYm94OiIhPT1sLnBhcnNlKHQpLnByb3RvY29sP3Q6bih0KyIuanNvbiIsIi92NC8iLGUpKyImc2VjdXJlIn0sZS5leHBvcnRzLm5vcm1hbGl6ZUdseXBoc1VSTD1mdW5jdGlvbih0LGUpe3ZhciByPWwucGFyc2UodCk7cmV0dXJuIm1hcGJveDoiIT09ci5wcm90b2NvbD90Om4oIm1hcGJveDovLyIrci5wYXRobmFtZS5zcGxpdCgiLyIpWzFdKyIve2ZvbnRzdGFja30ve3JhbmdlfS5wYmYiK2koci5xdWVyeSksIi9mb250cy92MS8iLGUpfSxlLmV4cG9ydHMubm9ybWFsaXplU3ByaXRlVVJMPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPWwucGFyc2UodCk7cmV0dXJuIm1hcGJveDoiIT09by5wcm90b2NvbD8oby5wYXRobmFtZSs9ZStyLGwuZm9ybWF0KG8pKTpuKCJtYXBib3g6LyIrby5wYXRobmFtZSsiL3Nwcml0ZSIrZStyK2koby5xdWVyeSksIi9zdHlsZXMvdjEvIixhKX0sZS5leHBvcnRzLm5vcm1hbGl6ZVRpbGVVUkw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWwucGFyc2UodCwhMCk7aWYoIWUpcmV0dXJuIHQ7aWYoIm1hcGJveDoiIT09bC5wYXJzZShlKS5wcm90b2NvbClyZXR1cm4gdDt2YXIgaT1zLnN1cHBvcnRzV2VicD8iLndlYnAiOiIkMSIsbz1zLmRldmljZVBpeGVsUmF0aW8+PTJ8fDUxMj09PXI/IkAyeCI6IiI7cmV0dXJuIGwuZm9ybWF0KHtwcm90b2NvbDpuLnByb3RvY29sLGhvc3RuYW1lOm4uaG9zdG5hbWUscGF0aG5hbWU6bi5wYXRobmFtZS5yZXBsYWNlKC8oXC4oPzpwbmd8anBnKVxkKikvLG8raSkscXVlcnk6YShuLnF1ZXJ5KX0pfX0seyIuL2Jyb3dzZXIiOjQyNCwiLi9jb25maWciOjQyOSwiLi91dGlsIjo0NDAsdXJsOjU0M31dLDQzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXtmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiByKCl7ZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5tZW1iZXJzPWUucHJvdG90eXBlLm1lbWJlcnN9dmFyIG49SlNPTi5zdHJpbmdpZnkodCk7aWYodltuXSlyZXR1cm4gdltuXTt2b2lkIDA9PT10LmFsaWdubWVudCYmKHQuYWxpZ25tZW50PTEpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZi5wcm90b3R5cGUpO3ZhciBzPTAsdT0wLGc9WyJVaW50OCJdO3JldHVybiBlLnByb3RvdHlwZS5tZW1iZXJzPXQubWVtYmVycy5tYXAoZnVuY3Rpb24ocil7cj17bmFtZTpyLm5hbWUsdHlwZTpyLnR5cGUsCmNvbXBvbmVudHM6ci5jb21wb25lbnRzfHwxfSxwKHIubmFtZS5sZW5ndGgpLHAoci50eXBlIGluIG0pLGcuaW5kZXhPZihyLnR5cGUpPDAmJmcucHVzaChyLnR5cGUpO3ZhciBuPW8oci50eXBlKTt1PU1hdGgubWF4KHUsbiksci5vZmZzZXQ9cz1hKHMsTWF0aC5tYXgodC5hbGlnbm1lbnQsbikpO2Zvcih2YXIgaT0wO2k8ci5jb21wb25lbnRzO2krKylPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsci5uYW1lKygxPT09ci5jb21wb25lbnRzPyIiOmkpLHtnZXQ6YyhyLGkpLHNldDpoKHIsaSl9KTtyZXR1cm4gcys9bipyLmNvbXBvbmVudHMscn0pLGUucHJvdG90eXBlLmFsaWdubWVudD10LmFsaWdubWVudCxlLnByb3RvdHlwZS5zaXplPWEocyxNYXRoLm1heCh1LHQuYWxpZ25tZW50KSksci5zZXJpYWxpemU9aSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxyLnByb3RvdHlwZS5TdHJ1Y3RUeXBlPWUsci5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PWUucHJvdG90eXBlLnNpemUsci5wcm90b3R5cGUuZW1wbGFjZUJhY2s9bChlLnByb3RvdHlwZS5tZW1iZXJzLGUucHJvdG90eXBlLnNpemUpLHIucHJvdG90eXBlLl91c2VkVHlwZXM9Zyx2W25dPXIscn1mdW5jdGlvbiBpKCl7cmV0dXJue21lbWJlcnM6dGhpcy5wcm90b3R5cGUuU3RydWN0VHlwZS5wcm90b3R5cGUubWVtYmVycyxhbGlnbm1lbnQ6dGhpcy5wcm90b3R5cGUuU3RydWN0VHlwZS5wcm90b3R5cGUuYWxpZ25tZW50LGJ5dGVzUGVyRWxlbWVudDp0aGlzLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnR9fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1mdW5jdGlvbiBvKHQpe3JldHVybiBtW3RdLkJZVEVTX1BFUl9FTEVNRU5UfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBsKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0idmFyIGkgPSB0aGlzLmxlbmd0aDtcbnRoaXMucmVzaXplKHRoaXMubGVuZ3RoICsgMSk7XG4iLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGw9dFthXSx1PW8obC50eXBlKTtyLmluZGV4T2YodSk8MCYmKHIucHVzaCh1KSxpKz0idmFyIG8iK3UudG9GaXhlZCgwKSsiID0gaSAqICIrKGUvdSkudG9GaXhlZCgwKSsiO1xuIik7Zm9yKHZhciBjPTA7YzxsLmNvbXBvbmVudHM7YysrKXt2YXIgaD0idiIrbi5sZW5ndGgsZj0ibyIrdS50b0ZpeGVkKDApKyIgKyAiKyhsLm9mZnNldC91K2MpLnRvRml4ZWQoMCk7aSs9InRoaXMuIitzKGwudHlwZSkrIlsiK2YrIl0gPSAiK2grIjtcbiIsbi5wdXNoKGgpfX1yZXR1cm4gaSs9InJldHVybiBpOyIsbmV3IEZ1bmN0aW9uKG4saSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSJ0aGlzLl9wb3MiK28odC50eXBlKS50b0ZpeGVkKDApLG49KHQub2Zmc2V0L28odC50eXBlKStlKS50b0ZpeGVkKDApLGk9cisiICsgIituO3JldHVybiJ0aGlzLl9zdHJ1Y3RBcnJheS4iK3ModC50eXBlKSsiWyIraSsiXSJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiBuZXcgRnVuY3Rpb24oW10sInJldHVybiAiK3UodCxlKSsiOyIpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKFsieCJdLHUodCxlKSsiID0geDsiKX1mdW5jdGlvbiBmKHQsZSl7dGhpcy5fc3RydWN0QXJyYXk9dCx0aGlzLl9wb3MxPWUqdGhpcy5zaXplLHRoaXMuX3BvczI9dGhpcy5fcG9zMS8yLHRoaXMuX3BvczQ9dGhpcy5fcG9zMS80LHRoaXMuX3Bvczg9dGhpcy5fcG9zMS84fWZ1bmN0aW9uIGQodCl7dm9pZCAwIT09dD8odGhpcy5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuY2FwYWNpdHk9dGhpcy5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL3RoaXMuYnl0ZXNQZXJFbGVtZW50LHRoaXMuX3JlZnJlc2hWaWV3cygpKToodGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKSl9dmFyIHA9dCgiYXNzZXJ0Iik7ZS5leHBvcnRzPW47dmFyIG09e0ludDg6SW50OEFycmF5LFVpbnQ4OlVpbnQ4QXJyYXksVWludDhDbGFtcGVkOlVpbnQ4Q2xhbXBlZEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5LEZsb2F0NjQ6RmxvYXQ2NEFycmF5fSx2PXt9O2QucHJvdG90eXBlLkRFRkFVTFRfQ0FQQUNJVFk9MTI4LGQucHJvdG90eXBlLlJFU0laRV9NVUxUSVBMSUVSPTUsZC5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJpbSgpLHtsZW5ndGg6dGhpcy5sZW5ndGgsYXJyYXlCdWZmZXI6dGhpcy5hcnJheUJ1ZmZlcn19LGQucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHRoaXMuU3RydWN0VHlwZSh0aGlzLHQpfSxkLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGghPT10aGlzLmNhcGFjaXR5JiYodGhpcy5jYXBhY2l0eT10aGlzLmxlbmd0aCx0aGlzLmFycmF5QnVmZmVyPXRoaXMuYXJyYXlCdWZmZXIuc2xpY2UoMCx0aGlzLmxlbmd0aCp0aGlzLmJ5dGVzUGVyRWxlbWVudCksdGhpcy5fcmVmcmVzaFZpZXdzKCkpfSxkLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg9dCx0PnRoaXMuY2FwYWNpdHkpe3RoaXMuY2FwYWNpdHk9TWF0aC5tYXgodCxNYXRoLmZsb29yKHRoaXMuY2FwYWNpdHkqdGhpcy5SRVNJWkVfTVVMVElQTElFUiksdGhpcy5ERUZBVUxUX0NBUEFDSVRZKSx0aGlzLmFycmF5QnVmZmVyPW5ldyBBcnJheUJ1ZmZlcih0aGlzLmNhcGFjaXR5KnRoaXMuYnl0ZXNQZXJFbGVtZW50KTt2YXIgZT10aGlzLnVpbnQ4O3RoaXMuX3JlZnJlc2hWaWV3cygpLGUmJnRoaXMudWludDguc2V0KGUpfX0sZC5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8dGhpcy5fdXNlZFR5cGVzLmxlbmd0aDt0Kyspe3ZhciBlPXRoaXMuX3VzZWRUeXBlc1t0XTt0aGlzW3MoZSldPW5ldyBtW2VdKHRoaXMuYXJyYXlCdWZmZXIpfX0sZC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXQ7bjxlO24rKyl7dmFyIGk9dGhpcy5nZXQobik7ci5wdXNoKGkpfXJldHVybiByfX0se2Fzc2VydDo0NX1dLDQzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGUucmVwbGFjZSgveyhbXnt9XSspfS9nLGZ1bmN0aW9uKGUscil7cmV0dXJuIHIgaW4gdD90W3JdOiIifSl9ZS5leHBvcnRzPW59LHt9XSw0NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidW5pdGJlemllciIpLGk9dCgiLi4vZ2VvL2Nvb3JkaW5hdGUiKTtyLmVhc2VDdWJpY0luT3V0PWZ1bmN0aW9uKHQpe2lmKHQ8PTApcmV0dXJuIDA7aWYodD49MSlyZXR1cm4gMTt2YXIgZT10KnQscj1lKnQ7cmV0dXJuIDQqKHQ8LjU/cjozKih0LWUpK3ItLjc1KX0sci5iZXppZXI9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9bmV3IG4odCxlLHIsaSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLnNvbHZlKHQpfX0sci5lYXNlPXIuYmV6aWVyKC4yNSwuMSwuMjUsMSksci5jbGFtcD1mdW5jdGlvbih0LGUscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgoZSx0KSl9LHIud3JhcD1mdW5jdGlvbih0LGUscil7dmFyIG49ci1lLGk9KCh0LWUpJW4rbiklbitlO3JldHVybiBpPT09ZT9yOml9LHIuY29hbGVzY2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgZT1hcmd1bWVudHNbdF07aWYobnVsbCE9PWUmJnZvaWQgMCE9PWUpcmV0dXJuIGV9fSxyLmFzeW5jQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZighdC5sZW5ndGgpcmV0dXJuIHIobnVsbCxbXSk7dmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkodC5sZW5ndGgpLGE9bnVsbDt0LmZvckVhY2goZnVuY3Rpb24odCxvKXtlKHQsZnVuY3Rpb24odCxlKXt0JiYoYT10KSxpW29dPWUsMD09LS1uJiZyKGEsaSl9KX0pfSxyLmtleXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHQpbiBpbiBlfHxyLnB1c2gobik7cmV0dXJuIHJ9LHIuZXh0ZW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciByPWFyZ3VtZW50c1tlXTtmb3IodmFyIG4gaW4gcil0W25dPXJbbl19cmV0dXJuIHR9LHIuZXh0ZW5kQWxsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscikpO3JldHVybiB0fSxyLmluaGVyaXQ9ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90LnByb3RvdHlwZTp0LGk9T2JqZWN0LmNyZWF0ZShuKTtyZXR1cm4gci5leHRlbmRBbGwoaSxlKSxpfSxyLnBpY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kgaW4gdCYmKHJbaV09dFtpXSl9cmV0dXJuIHJ9O3ZhciBhPTE7ci51bmlxdWVJZD1mdW5jdGlvbigpe3JldHVybiBhKyt9LHIuZGVib3VuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe249YXJndW1lbnRzLGNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmFwcGx5KG51bGwsbil9LGUpfX0sci5iaW5kQWxsPWZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF0mJihlW3RdPWVbdF0uYmluZChlKSl9KX0sci5iaW5kSGFuZGxlcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJjA9PT1lLmluZGV4T2YoIl9vbiIpJiYodFtlXT10W2VdLmJpbmQodCkpfSxyLnNldE9wdGlvbnM9ZnVuY3Rpb24odCxlKXt0Lmhhc093blByb3BlcnR5KCJvcHRpb25zIil8fCh0Lm9wdGlvbnM9dC5vcHRpb25zP09iamVjdC5jcmVhdGUodC5vcHRpb25zKTp7fSk7Zm9yKHZhciByIGluIGUpdC5vcHRpb25zW3JdPWVbcl07cmV0dXJuIHQub3B0aW9uc30sci5nZXRDb29yZGluYXRlc0NlbnRlcj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxhPS0xLzAsbz0wO288dC5sZW5ndGg7bysrKWU9TWF0aC5taW4oZSx0W29dLmNvbHVtbikscj1NYXRoLm1pbihyLHRbb10ucm93KSxuPU1hdGgubWF4KG4sdFtvXS5jb2x1bW4pLGE9TWF0aC5tYXgoYSx0W29dLnJvdyk7dmFyIHM9bi1lLGw9YS1yLHU9TWF0aC5tYXgocyxsKTtyZXR1cm4gbmV3IGkoKGUrbikvMiwocithKS8yLDApLnpvb21UbyhNYXRoLmZsb29yKC1NYXRoLmxvZyh1KS9NYXRoLkxOMikpfSxyLmVuZHNXaXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9LHIuc3RhcnRzV2l0aD1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dC5pbmRleE9mKGUpfSxyLm1hcE9iamVjdD1mdW5jdGlvbih0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59LHIuZmlsdGVyT2JqZWN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdCllLmNhbGwocnx8dGhpcyx0W2ldLGksdCkmJihuW2ldPXRbaV0pO3JldHVybiBufSxyLmRlZXBFcXVhbD1mdW5jdGlvbiB0KGUscil7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoIUFycmF5LmlzQXJyYXkocil8fGUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoIXQoZVtuXSxyW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT09cil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiExO2lmKE9iamVjdC5rZXlzKGUpLmxlbmd0aCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldLHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiBlPT09cn0sci5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcChyLmNsb25lKToib2JqZWN0Ij09dHlwZW9mIHQ/ci5tYXBPYmplY3QodCxyLmNsb25lKTp0fSxyLmFycmF5c0ludGVyc2VjdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX07dmFyIG89e307ci53YXJuT25jZT1mdW5jdGlvbih0KXtvW3RdfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4odCksb1t0XT0hMCl9fSx7Ii4uL2dlby9jb29yZGluYXRlIjozMzYsdW5pdGJlemllcjo1NDJ9XSw0NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsbnVsbCE9dC5pZCYmKHRoaXMuaWQ9dC5pZCl9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e3R5cGU6IkZlYXR1cmUiLGdldCBnZW9tZXRyeSgpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxzZXQgZ2VvbWV0cnkodCl7dGhpcy5fZ2VvbWV0cnk9dH0sdG9KU09OOmZ1bmN0aW9uKCl7dmFyIHQ9e307Zm9yKHZhciBlIGluIHRoaXMpIl9nZW9tZXRyeSIhPT1lJiYiX3ZlY3RvclRpbGVGZWF0dXJlIiE9PWUmJiJ0b0pTT04iIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9fX0se31dLDQ0MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17X2FyZ3M6W1t7cmF3OiJtYXBib3gtZ2xAXjAuMjIuMCIsc2NvcGU6bnVsbCxlc2NhcGVkTmFtZToibWFwYm94LWdsIixuYW1lOiJtYXBib3gtZ2wiLHJhd1NwZWM6Il4wLjIyLjAiLHNwZWM6Ij49MC4yMi4wIDwwLjIzLjAiLHR5cGU6InJhbmdlIn0sIi9ob21lL2V0aWVubmUvRG9jdW1lbnRzL3Bsb3RseS9wbG90bHkuanMiXV0sX2Zyb206Im1hcGJveC1nbEA+PTAuMjIuMCA8MC4yMy4wIixfaWQ6Im1hcGJveC1nbEAwLjIyLjEiLF9pbkNhY2hlOiEwLF9sb2NhdGlvbjoiL21hcGJveC1nbCIsX25vZGVWZXJzaW9uOiI0LjQuNSIsX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6e2hvc3Q6InBhY2thZ2VzLTEyLXdlc3QuaW50ZXJuYWwubnBtanMuY29tIix0bXA6InRtcC9tYXBib3gtZ2wtMC4yMi4xLnRnel8xNDcxNTQ5ODkxNjcwXzAuODc2MjYzMDU2NjQ4ODk1MSJ9LF9ucG1Vc2VyOntuYW1lOiJsdWNhc3dvaiIsZW1haWw6Imx1Y2FzQGx1Y2Fzd29qLmNvbSJ9LF9ucG1WZXJzaW9uOiIyLjE1LjUiLF9waGFudG9tQ2hpbGRyZW46e30sX3JlcXVlc3RlZDp7cmF3OiJtYXBib3gtZ2xAXjAuMjIuMCIsc2NvcGU6bnVsbCxlc2NhcGVkTmFtZToibWFwYm94LWdsIixuYW1lOiJtYXBib3gtZ2wiLHJhd1NwZWM6Il4wLjIyLjAiLHNwZWM6Ij49MC4yMi4wIDwwLjIzLjAiLHR5cGU6InJhbmdlIn0sX3JlcXVpcmVkQnk6WyIvIl0sX3Jlc29sdmVkOiJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYXBib3gtZ2wvLS9tYXBib3gtZ2wtMC4yMi4xLnRneiIsX3NoYXN1bToiOTJhOTY1NTQ3ZDRjMmYyNGMyMmNiYzQ4N2VlZGE0ODY5NGNiNjI3YSIsX3Nocmlua3dyYXA6bnVsbCxfc3BlYzoibWFwYm94LWdsQF4wLjIyLjAiLF93aGVyZToiL2hvbWUvZXRpZW5uZS9Eb2N1bWVudHMvcGxvdGx5L3Bsb3RseS5qcyIsYnJvd3Nlcjp7Ii4vanMvdXRpbC9hamF4LmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvYWpheC5qcyIsIi4vanMvdXRpbC9icm93c2VyLmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvYnJvd3Nlci5qcyIsIi4vanMvdXRpbC9jYW52YXMuanMiOiIuL2pzL3V0aWwvYnJvd3Nlci9jYW52YXMuanMiLCIuL2pzL3V0aWwvZG9tLmpzIjoiLi9qcy91dGlsL2Jyb3dzZXIvZG9tLmpzIiwiLi9qcy91dGlsL3dlYl93b3JrZXIuanMiOiIuL2pzL3V0aWwvYnJvd3Nlci93ZWJfd29ya2VyLmpzIn0sYnVnczp7dXJsOiJodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMifSxkZXBlbmRlbmNpZXM6e2Nzc2NvbG9ycGFyc2VyOiJeMS4wLjIiLGVhcmN1dDoiXjIuMC4zIiwiZmVhdHVyZS1maWx0ZXIiOiJeMi4yLjAiLCJnZW9qc29uLXJld2luZCI6Il4wLjEuMCIsImdlb2pzb24tdnQiOiJeMi40LjAiLCJnbC1tYXRyaXgiOiJeMi4zLjEiLCJncmlkLWluZGV4IjoiXjEuMC4wIiwibWFwYm94LWdsLWZ1bmN0aW9uIjoiXjEuMi4xIiwibWFwYm94LWdsLXNoYWRlcnMiOiJnaXRodWI6bWFwYm94L21hcGJveC1nbC1zaGFkZXJzI2RlMmFiMDA3NDU1YWEyNTg3YzU1MjY5NGM2ODU4M2Y5NGM5ZjI3NDciLCJtYXBib3gtZ2wtc3R5bGUtc3BlYyI6ImdpdGh1YjptYXBib3gvbWFwYm94LWdsLXN0eWxlLXNwZWMjODNiMWEzZTU4MzdkNzg1YWY1ODJlZmQ1ZWQxYTIxMmYyZGY2YTRhZSIsIm1hcGJveC1nbC1zdXBwb3J0ZWQiOiJeMS4yLjAiLHBiZjoiXjEuMy4yIixwbmdqczoiXjIuMi4wIiwicG9pbnQtZ2VvbWV0cnkiOiJeMC4wLjAiLHF1aWNrc2VsZWN0OiJeMS4wLjAiLHJlcXVlc3Q6Il4yLjM5LjAiLCJyZXNvbHZlLXVybCI6Il4wLjIuMSIsInNoZWxmLXBhY2siOiJeMS4wLjAiLHN1cGVyY2x1c3RlcjoiXjIuMC4xIix1bmFzc2VydGlmeToiXjIuMC4wIix1bml0YmV6aWVyOiJeMC4wLjAiLCJ2ZWN0b3ItdGlsZSI6Il4xLjMuMCIsInZ0LXBiZiI6Il4yLjAuMiIsd2Vid29ya2lmeToiXjEuMy4wIiwid2hvb3RzLWpzIjoiXjIuMC4wIn0sZGVzY3JpcHRpb246IkEgV2ViR0wgaW50ZXJhY3RpdmUgbWFwcyBsaWJyYXJ5IixkZXZEZXBlbmRlbmNpZXM6eyJiYWJlbC1wcmVzZXQtcmVhY3QiOiJeNi4xMS4xIixiYWJlbGlmeToiXjcuMy4wIixiZW5jaG1hcms6In4yLjEuMCIsYnJvd3NlcmlmeToiXjEzLjAuMCIsY2xpcGJvYXJkOiJeMS41LjEyIiwiY29uY2F0LXN0cmVhbSI6IjEuNS4xIixjb3ZlcmFsbHM6Il4yLjExLjgiLGRvY3RyaW5lOiJeMS4yLjEiLGRvY3VtZW50YXRpb246Imh0dHBzOi8vZ2l0aHViLmNvbS9kb2N1bWVudGF0aW9uanMvZG9jdW1lbnRhdGlvbi9hcmNoaXZlL2JiNDE2MTljNzM0ZTU5ZWYzZmJjMzY0ODYxMDAzMmVmY2ZkYWFhY2UudGFyLmd6IiwiZG9jdW1lbnRhdGlvbi10aGVtZS11dGlscyI6IjMuMC4wIixlbnZpZnk6Il4zLjQuMCIsZXNsaW50OiJeMi41LjMiLCJlc2xpbnQtY29uZmlnLW1vdXJuZXIiOiJeMi4wLjAiLCJlc2xpbnQtcGx1Z2luLWh0bWwiOiJeMS41LjEiLGdsOiJeNC4wLjEiLGhhbmRsZWJhcnM6IjQuMC41IiwiaGlnaGxpZ2h0LmpzIjoiOS4zLjAiLGlzdGFuYnVsOiJeMC40LjIiLCJqc29uLWxvYWRlciI6Il4wLjUuNCIsbG9kYXNoOiJeNC4xMy4xIiwibWFwYm94LWdsLXRlc3Qtc3VpdGUiOiJnaXRodWI6bWFwYm94L21hcGJveC1nbC10ZXN0LXN1aXRlIzdiYWJhYjUyZmIwMjc4OGViYmMzODM4NDEzOWJmMzUwZThlMzg1NTIiLCJtZW1vcnktZnMiOiJeMC4zLjAiLG1pbmlmeWlmeToiXjcuMC4xIiwibnBtLXJ1bi1hbGwiOiJeMy4wLjAiLG55YzoiNi40LjAiLHByb3h5cXVpcmU6Il4xLjcuOSIscmVtYXJrOiI0LjIuMiIsInJlbWFyay1odG1sIjoiMy4wLjAiLHNpbm9uOiJeMS4xNS40IixzdDoiXjEuMi4wIix0YXA6Il41LjcuMCIsInRyYW5zZm9ybS1sb2FkZXIiOiJeMC4yLjMiLCJ1bmlzdC11dGlsLXZpc2l0IjoiMS4xLjAiLHZpbnlsOiIxLjEuMSIsInZpbnlsLWZzIjoiMi40LjMiLHdhdGNoaWZ5OiJeMy43LjAiLHdlYnBhY2s6Il4xLjEzLjEiLCJ3ZWJ3b3JraWZ5LXdlYnBhY2siOiJeMS4xLjMifSxkaXJlY3Rvcmllczp7fSxkaXN0OntzaGFzdW06IjkyYTk2NTU0N2Q0YzJmMjRjMjJjYmM0ODdlZWRhNDg2OTRjYjYyN2EiLHRhcmJhbGw6Imh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hcGJveC1nbC8tL21hcGJveC1nbC0wLjIyLjEudGd6In0sZW5naW5lczp7bm9kZToiPj00LjAuMCJ9LGdpdEhlYWQ6IjEzYTkwMTUzNDFmMDYwMmNjYjU1Yzk4YzUzMDc5ODM4YWQ0YjcwYjUiLGhvbWVwYWdlOiJodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcyNyZWFkbWUiLGxpY2Vuc2U6IkJTRC0zLUNsYXVzZSIsbWFpbjoianMvbWFwYm94LWdsLmpzIixtYWludGFpbmVyczpbe25hbWU6ImFhcm9ubGlkbWFuIixlbWFpbDoiYWFyb25saWRtYW5AZ21haWwuY29tIn0se25hbWU6ImFqYXNodG9uIixlbWFpbDoiYWouYXNodG9uQGdtYWlsLmNvbSJ9LHtuYW1lOiJhbnNpcyIsZW1haWw6ImFuc2lzLmJyYW1tYW5pc0BnbWFpbC5jb20ifSx7bmFtZToiYmVyZ3dlcmtnaXMiLGVtYWlsOiJ3YkBiZXJnd2Vyay1naXMuYXQifSx7bmFtZToiYmhvdXNlbCIsZW1haWw6ImJyeWFuQG1hcGJveC5jb20ifSx7bmFtZToiYnN1ZGVrdW0iLGVtYWlsOiJib2JieUBtYXBib3guY29tIn0se25hbWU6ImNhbWlsbGVhbm5lIixlbWFpbDoiY2FtaWxsZUBtYXBib3guY29tIn0se25hbWU6ImRub21hZGIiLGVtYWlsOiJkYW1vbkBtYXBib3guY29tIn0se25hbWU6ImR0aG9tcHNvbiIsZW1haWw6ImR0aG9tcHNvbkBnbWFpbC5jb20ifSx7bmFtZToiZW1pbHltY2FmZWUiLGVtYWlsOiJlbWlseUBtYXBib3guY29tIn0se25hbWU6ImZsaXBwbW9rZSIsZW1haWw6ImZsaXBwbW9rZUBnbWFpbC5jb20ifSx7bmFtZToiZnJlZW5lcmQiLGVtYWlsOiJzcGFtQGZyZWVuZXJkLmRlIn0se25hbWU6ImdyZXRhY2IiLGVtYWlsOiJjYXJvbEBtYXBib3guY29tIn0se25hbWU6ImlhbjI5IixlbWFpbDoiaWFuLnZpbGxlZGFAZ21haWwuY29tIn0se25hbWU6ImlhbnNod2FyZCIsZW1haWw6ImlhbkBtYXBib3guY29tIn0se25hbWU6ImluZ2FsbHMiLGVtYWlsOiJuaWNob2xhcy5pbmdhbGxzQGdtYWlsLmNvbSJ9LHtuYW1lOiJqZmlyZWJhdWdoIixlbWFpbDoiam9obi5maXJlYmF1Z2hAZ21haWwuY29tIn0se25hbWU6ImpycHJ1aXQxIixlbWFpbDoiamFrZUBqYWtlcHJ1aXR0LmNvbSJ9LHtuYW1lOiJrYXJlbnpzaGVhIixlbWFpbDoia2FyZW5AbWFwYm94LmNvbSJ9LHtuYW1lOiJra2FlZmVyIixlbWFpbDoia2thZWZlckBnbWFpbC5jb20ifSx7bmFtZToibGJ1ZCIsZW1haWw6ImxhdXJlbkBtYXBib3guY29tIn0se25hbWU6Imx1Y2Fzd29qIixlbWFpbDoibHVjYXNAbHVjYXN3b2ouY29tIn0se25hbWU6Imx4YmFydGgiLGVtYWlsOiJhbGV4QG1hcGJveC5jb20ifSx7bmFtZToibHl6aWRpYW1vbmQiLGVtYWlsOiJseXppQG1hcGJveC5jb20ifSx7bmFtZToibWFwYm94LWFkbWluIixlbWFpbDoiYWNjb3VudHNAbWFwYm94LmNvbSJ9LHtuYW1lOiJtYXRlb3YiLGVtYWlsOiJtYXR0QG1hcGJveC5jb20ifSx7bmFtZToibWN3aGl0dGVtb3JlIixlbWFpbDoibWN3aGl0dGVtb3JlQGdtYWlsLmNvbSJ9LHtuYW1lOiJtaWNjb2xpcyIsZW1haWw6ImplZmZAbWljY29saXMubmV0In0se25hbWU6Im1pa2Vtb3JyaXMiLGVtYWlsOiJtaWNoYWVsLnBhdHJpY2subW9ycmlzQGdtYWlsLmNvbSJ9LHtuYW1lOiJtb3JnYW5oZXJsb2NrZXIiLGVtYWlsOiJtb3JnYW4uaGVybG9ja2VyQGdtYWlsLmNvbSJ9LHtuYW1lOiJtb3VybmVyIixlbWFpbDoiYWdhZm9ua2luQGdtYWlsLmNvbSJ9LHtuYW1lOiJuaWNraWRsdWdhc2giLGVtYWlsOiJuaWNraUBtYXBib3guY29tIn0se25hbWU6InJjbGFyayIsZW1haWw6InJ5YW4uY2xhcmsuakBnbWFpbC5jb20ifSx7bmFtZToic2FtYW5iYiIsZW1haWw6InNhbWFuQG1hcGJveC5jb20ifSx7bmFtZToic2JtYTQ0IixlbWFpbDoidGxlZUBtYXBib3guY29tIn0se25hbWU6InNjb3RoaXMiLGVtYWlsOiJzY290aGlzQGdtYWlsLmNvbSJ9LHtuYW1lOiJzZ2lsbGllcyIsZW1haWw6InNlYW5AbWFwYm94LmNvbSJ9LHtuYW1lOiJzcHJpbmdtZXllciIsZW1haWw6ImRhbmVAbWFwYm94LmNvbSJ9LHtuYW1lOiJ0aGVtYXJleCIsZW1haWw6InBhdHJpY2tAbWFwYm94LmNvbSJ9LHtuYW1lOiJ0bWN3IixlbWFpbDoidG9tQG1hY3dyaWdodC5vcmcifSx7bmFtZToidHJpc3RlbiIsZW1haWw6InRyaXN0ZW4uYnJvd25AZ21haWwuY29tIn0se25hbWU6IndpbGx3aGl0ZSIsZW1haWw6IndpbGxAbWFwYm94LmNvbSJ9LHtuYW1lOiJ5aGFobiIsZW1haWw6InlvdW5nQG1hcGJveC5jb20ifV0sbmFtZToibWFwYm94LWdsIixvcHRpb25hbERlcGVuZGVuY2llczp7fSxyZWFkbWU6IkVSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEiLHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXQ6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMuZ2l0In0sc2NyaXB0czp7YnVpbGQ6Im5wbSBydW4gYnVpbGQtZG9jcyAjIGludm9rZWQgYnkgcHVibGlzaGVyIHdoZW4gcHVibGlzaGluZyBkb2NzIG9uIHRoZSBtYi1wYWdlcyBicmFuY2giLCJidWlsZC1kZXYiOiJicm93c2VyaWZ5IGpzL21hcGJveC1nbC5qcyAtLWRlYnVnIC0tc3RhbmRhbG9uZSBtYXBib3hnbCA+IGRpc3QvbWFwYm94LWdsLWRldi5qcyAmJiB0YXAgLS1uby1jb3ZlcmFnZSB0ZXN0L2J1aWxkL2Rldi50ZXN0LmpzIiwiYnVpbGQtZG9jcyI6ImRvY3VtZW50YXRpb24gYnVpbGQgLS1naXRodWIgLS1mb3JtYXQgaHRtbCAtYyBkb2N1bWVudGF0aW9uLnltbCAtLXRoZW1lIC4vZG9jcy9fdGhlbWUgLS1vdXRwdXQgZG9jcy9hcGkvIiwiYnVpbGQtbWluIjoiYnJvd3NlcmlmeSBqcy9tYXBib3gtZ2wuanMgLS1kZWJ1ZyAtdCB1bmFzc2VydGlmeSAtLXBsdWdpbiBbbWluaWZ5aWZ5IC0tbWFwIG1hcGJveC1nbC5qcy5tYXAgLS1vdXRwdXQgZGlzdC9tYXBib3gtZ2wuanMubWFwXSAtLXN0YW5kYWxvbmUgbWFwYm94Z2wgPiBkaXN0L21hcGJveC1nbC5qcyAmJiB0YXAgLS1uby1jb3ZlcmFnZSB0ZXN0L2J1aWxkL21pbi50ZXN0LmpzIiwiYnVpbGQtdG9rZW4iOiJicm93c2VyaWZ5IGRlYnVnL2FjY2Vzcy10b2tlbi1zcmMuanMgLS1kZWJ1ZyAtdCBlbnZpZnkgPiBkZWJ1Zy9hY2Nlc3MtdG9rZW4uanMiLGxpbnQ6ImVzbGludCAgLS1pZ25vcmUtcGF0aCAuZ2l0aWdub3JlIGpzIHRlc3QgYmVuY2ggZG9jcy9fcG9zdHMvZXhhbXBsZXMvKi5odG1sIiwib3Blbi1jaGFuZ2VkLWV4YW1wbGVzIjoiZ2l0IGRpZmYgLS1uYW1lLW9ubHkgbWItcGFnZXMgSEVBRCAtLSBkb2NzL19wb3N0cy9leGFtcGxlcy8qLmh0bWwgfCBhd2sgJ3twcmludCBcImh0dHA6Ly8xMjcuMC4wLjE6NDAwMC9tYXBib3gtZ2wtanMvZXhhbXBsZS9cIiBzdWJzdHIoJDAsMzMsbGVuZ3RoKCQwKS0zNyl9JyB8IHhhcmdzIG9wZW4iLHN0YXJ0OiJydW4tcCBidWlsZC10b2tlbiB3YXRjaC1kZXYgd2F0Y2gtYmVuY2ggc3RhcnQtc2VydmVyIiwic3RhcnQtYmVuY2giOiJydW4tcCBidWlsZC10b2tlbiB3YXRjaC1iZW5jaCBzdGFydC1zZXJ2ZXIiLCJzdGFydC1kZWJ1ZyI6InJ1bi1wIGJ1aWxkLXRva2VuIHdhdGNoLWRldiBzdGFydC1zZXJ2ZXIiLCJzdGFydC1kb2NzIjoibnBtIHJ1biBidWlsZC1taW4gJiYgbnBtIHJ1biBidWlsZC1kb2NzICYmIGpla3lsbCBzZXJ2ZSAtdyIsInN0YXJ0LXNlcnZlciI6InN0IC0tbm8tY2FjaGUgLS1sb2NhbGhvc3QgLS1wb3J0IDk5NjYgLS1pbmRleCBpbmRleC5odG1sIC4iLHRlc3Q6Im5wbSBydW4gbGludCAmJiB0YXAgLS1yZXBvcnRlciBkb3QgdGVzdC9qcy8qLyouanMgdGVzdC9idWlsZC93ZWJwYWNrLnRlc3QuanMiLCJ0ZXN0LXN1aXRlIjoibm9kZSB0ZXN0L3JlbmRlci50ZXN0LmpzICYmIG5vZGUgdGVzdC9xdWVyeS50ZXN0LmpzIiwid2F0Y2gtYmVuY2giOiJub2RlIGJlbmNoL2Rvd25sb2FkLWRhdGEuanMgJiYgd2F0Y2hpZnkgYmVuY2gvaW5kZXguanMgLS1wbHVnaW4gW21pbmlmeWlmeSAtLW5vLW1hcF0gLXQgW2JhYmVsaWZ5IC0tcHJlc2V0cyByZWFjdF0gLXQgdW5hc3NlcnRpZnkgLXQgZW52aWZ5IC1vIGJlbmNoL2JlbmNoLmpzIC12Iiwid2F0Y2gtZGV2Ijoid2F0Y2hpZnkganMvbWFwYm94LWdsLmpzIC0tZGVidWcgLS1zdGFuZGFsb25lIG1hcGJveGdsIC1vIGRpc3QvbWFwYm94LWdsLWRldi5qcyAtdiJ9LHZlcnNpb246IjAuMjIuMSJ9fSx7fV0sNDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkodCksaT0wO2k8dDsrK2kpbltpXT0wLGk9PT1lJiYobltpXSs9LjUpLGk9PT1yJiYobltpXSs9LjUpO3JldHVybiBufWZ1bmN0aW9uIGkodCxlKXtpZigwPT09ZXx8ZT09PSgxPDx0KzEpLTEpcmV0dXJuW107Zm9yKHZhciByPVtdLGk9W10sYT0wO2E8PXQ7KythKWlmKGUmMTw8YSl7ci5wdXNoKG4odCxhLTEsYS0xKSksaS5wdXNoKG51bGwpO2Zvcih2YXIgcz0wO3M8PXQ7KytzKX5lJjE8PHMmJihyLnB1c2gobih0LGEtMSxzLTEpKSxpLnB1c2goW2Esc10pKX12YXIgbD1vKHIpLHU9W107dDpmb3IodmFyIGE9MDthPGwubGVuZ3RoOysrYSl7Zm9yKHZhciBjPWxbYV0saD1bXSxzPTA7czxjLmxlbmd0aDsrK3Mpe2lmKCFpW2Nbc11dKWNvbnRpbnVlIHQ7aC5wdXNoKGlbY1tzXV0uc2xpY2UoKSl9dS5wdXNoKGgpfXJldHVybiB1fWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPTE8PHQrMSxyPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPWkodCxuKTtyZXR1cm4gcn1lLmV4cG9ydHM9YTt2YXIgbz10KCJjb252ZXgtaHVsbCIpfSx7ImNvbnZleC1odWxsIjoxMDF9XSw0NDQ6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdO3JldHVybiB0WzBdPXJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKm8sdFsxXT1yWzFdKm4rcls1XSppK3JbOV0qYStyWzEzXSpvLHRbMl09clsyXSpuK3JbNl0qaStyWzEwXSphK3JbMTRdKm8sdFszXT1yWzNdKm4rcls3XSppK3JbMTFdKmErclsxNV0qbyx0fWZ1bmN0aW9uIGkodCxlKXt0WzBdWzBdPWVbMF0sdFswXVsxXT1lWzFdLHRbMF1bMl09ZVsyXSx0WzFdWzBdPWVbNF0sdFsxXVsxXT1lWzVdLHRbMV1bMl09ZVs2XSx0WzJdWzBdPWVbOF0sdFsyXVsxXT1lWzldLHRbMl1bMl09ZVsxMF19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfXZhciBvPXQoIi4vbm9ybWFsaXplIikscz10KCJnbC1tYXQ0L2NyZWF0ZSIpLGw9dCgiZ2wtbWF0NC9jbG9uZSIpLHU9dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLGM9dCgiZ2wtbWF0NC9pbnZlcnQiKSxoPXQoImdsLW1hdDQvdHJhbnNwb3NlIiksZj17bGVuZ3RoOnQoImdsLXZlYzMvbGVuZ3RoIiksbm9ybWFsaXplOnQoImdsLXZlYzMvbm9ybWFsaXplIiksZG90OnQoImdsLXZlYzMvZG90IiksY3Jvc3M6dCgiZ2wtdmVjMy9jcm9zcyIpfSxkPXMoKSxwPXMoKSxtPVswLDAsMCwwXSx2PVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sZz1bMCwwLDBdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLHksYil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksc3x8KHM9WzAsMCwwXSkseXx8KHk9WzAsMCwwLDFdKSxifHwoYj1bMCwwLDAsMV0pLCFvKGQsdCkpcmV0dXJuITE7aWYobChwLGQpLHBbM109MCxwWzddPTAscFsxMV09MCxwWzE1XT0xLE1hdGguYWJzKHUocCk8MWUtOCkpcmV0dXJuITE7dmFyIHg9ZFszXSxfPWRbN10sdz1kWzExXSxNPWRbMTJdLGs9ZFsxM10sQT1kWzE0XSxUPWRbMTVdO2lmKDAhPT14fHwwIT09X3x8MCE9PXcpe21bMF09eCxtWzFdPV8sbVsyXT13LG1bM109VDtpZighYyhwLHApKXJldHVybiExO2gocCxwKSxuKHksbSxwKX1lbHNlIHlbMF09eVsxXT15WzJdPTAseVszXT0xO2lmKGVbMF09TSxlWzFdPWssZVsyXT1BLGkodixkKSxyWzBdPWYubGVuZ3RoKHZbMF0pLGYubm9ybWFsaXplKHZbMF0sdlswXSksc1swXT1mLmRvdCh2WzBdLHZbMV0pLGEodlsxXSx2WzFdLHZbMF0sMSwtc1swXSksclsxXT1mLmxlbmd0aCh2WzFdKSxmLm5vcm1hbGl6ZSh2WzFdLHZbMV0pLHNbMF0vPXJbMV0sc1sxXT1mLmRvdCh2WzBdLHZbMl0pLGEodlsyXSx2WzJdLHZbMF0sMSwtc1sxXSksc1syXT1mLmRvdCh2WzFdLHZbMl0pLGEodlsyXSx2WzJdLHZbMV0sMSwtc1syXSksclsyXT1mLmxlbmd0aCh2WzJdKSxmLm5vcm1hbGl6ZSh2WzJdLHZbMl0pLHNbMV0vPXJbMl0sc1syXS89clsyXSxmLmNyb3NzKGcsdlsxXSx2WzJdKSxmLmRvdCh2WzBdLGcpPDApZm9yKHZhciBTPTA7UzwzO1MrKylyW1NdKj0tMSx2W1NdWzBdKj0tMSx2W1NdWzFdKj0tMSx2W1NdWzJdKj0tMTtyZXR1cm4gYlswXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMSt2WzBdWzBdLXZbMV1bMV0tdlsyXVsyXSwwKSksYlsxXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS12WzBdWzBdK3ZbMV1bMV0tdlsyXVsyXSwwKSksYlsyXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMS12WzBdWzBdLXZbMV1bMV0rdlsyXVsyXSwwKSksYlszXT0uNSpNYXRoLnNxcnQoTWF0aC5tYXgoMSt2WzBdWzBdK3ZbMV1bMV0rdlsyXVsyXSwwKSksdlsyXVsxXT52WzFdWzJdJiYoYlswXT0tYlswXSksdlswXVsyXT52WzJdWzBdJiYoYlsxXT0tYlsxXSksdlsxXVswXT52WzBdWzFdJiYoYlsyXT0tYlsyXSksITB9fSx7Ii4vbm9ybWFsaXplIjo0NDUsImdsLW1hdDQvY2xvbmUiOjE3MywiZ2wtbWF0NC9jcmVhdGUiOjE3NCwiZ2wtbWF0NC9kZXRlcm1pbmFudCI6MTc1LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L3RyYW5zcG9zZSI6MTg5LCJnbC12ZWMzL2Nyb3NzIjoyNzAsImdsLXZlYzMvZG90IjoyNzEsImdsLXZlYzMvbGVuZ3RoIjoyNzIsImdsLXZlYzMvbm9ybWFsaXplIjoyNzR9XSw0NDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzE1XTtpZigwPT09cilyZXR1cm4hMTtmb3IodmFyIG49MS9yLGk9MDtpPDE2O2krKyl0W2ldPWVbaV0qbjtyZXR1cm4hMH19LHt9XSw0NDY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKDA9PT1jKGUpfHwwPT09YyhyKSlyZXR1cm4hMTt2YXIgaT11KGUsZi50cmFuc2xhdGUsZi5zY2FsZSxmLnNrZXcsZi5wZXJzcGVjdGl2ZSxmLnF1YXRlcm5pb24pLGE9dShyLGQudHJhbnNsYXRlLGQuc2NhbGUsZC5za2V3LGQucGVyc3BlY3RpdmUsZC5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFpfHwhYSkmJihzKHAudHJhbnNsYXRlLGYudHJhbnNsYXRlLGQudHJhbnNsYXRlLG4pLHMocC5za2V3LGYuc2tldyxkLnNrZXcsbikscyhwLnNjYWxlLGYuc2NhbGUsZC5zY2FsZSxuKSxzKHAucGVyc3BlY3RpdmUsZi5wZXJzcGVjdGl2ZSxkLnBlcnNwZWN0aXZlLG4pLGgocC5xdWF0ZXJuaW9uLGYucXVhdGVybmlvbixkLnF1YXRlcm5pb24sbiksbCh0LHAudHJhbnNsYXRlLHAuc2NhbGUscC5za2V3LHAucGVyc3BlY3RpdmUscC5xdWF0ZXJuaW9uKSwhMCl9ZnVuY3Rpb24gaSgpe3JldHVybnt0cmFuc2xhdGU6YSgpLHNjYWxlOmEoMSksc2tldzphKCkscGVyc3BlY3RpdmU6bygpLHF1YXRlcm5pb246bygpfX1mdW5jdGlvbiBhKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZnVuY3Rpb24gbygpe3JldHVyblswLDAsMCwxXX12YXIgcz10KCJnbC12ZWMzL2xlcnAiKSxsPXQoIm1hdDQtcmVjb21wb3NlIiksdT10KCJtYXQ0LWRlY29tcG9zZSIpLGM9dCgiZ2wtbWF0NC9kZXRlcm1pbmFudCIpLGg9dCgicXVhdC1zbGVycCIpLGY9aSgpLGQ9aSgpLHA9aSgpO2UuZXhwb3J0cz1ufSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjE3NSwiZ2wtdmVjMy9sZXJwIjoyNzMsIm1hdDQtZGVjb21wb3NlIjo0NDQsIm1hdDQtcmVjb21wb3NlIjo0NDcsInF1YXQtc2xlcnAiOjQ4N31dLDQ0NzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjE3NCwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6MTc3LCJnbC1tYXQ0L2lkZW50aXR5IjoxNzgsImdsLW1hdDQvbXVsdGlwbHkiOjE4MSwiZ2wtbWF0NC9zY2FsZSI6MTg3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6MTg4fV0sNDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5fY29tcG9uZW50cz10LnNsaWNlKCksdGhpcy5fdGltZT1bMF0sdGhpcy5wcmV2TWF0cml4PXQuc2xpY2UoKSx0aGlzLm5leHRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRNYXRyaXg9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRJbnZlcnNlPXQuc2xpY2UoKSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZFVwPVswLDAsMF0sdGhpcy5jb21wdXRlZENlbnRlcj1bMCwwLDBdLHRoaXMuY29tcHV0ZWRSYWRpdXM9WzBdLHRoaXMuX2xpbWl0cz1bLTEvMCwxLzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ9dHx8e30sbmV3IG4odC5tYXRyaXh8fFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSl9dmFyIGE9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxvPXQoIm1hdDQtaW50ZXJwb2xhdGUiKSxzPXQoImdsLW1hdDQvaW52ZXJ0IiksbD10KCJnbC1tYXQ0L3JvdGF0ZVgiKSx1PXQoImdsLW1hdDQvcm90YXRlWSIpLGM9dCgiZ2wtbWF0NC9yb3RhdGVaIiksaD10KCJnbC1tYXQ0L2xvb2tBdCIpLGY9dCgiZ2wtbWF0NC90cmFuc2xhdGUiKSxkPSh0KCJnbC1tYXQ0L3NjYWxlIiksdCgiZ2wtdmVjMy9ub3JtYWxpemUiKSkscD1bMCwwLDBdO2UuZXhwb3J0cz1pO3ZhciBtPW4ucHJvdG90eXBlO20ucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1hLmxlKGUsdCksbj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKCEocjwwKSl7dmFyIGk9dGhpcy5fY29tcG9uZW50cztpZihyPT09ZS5sZW5ndGgtMSlmb3IodmFyIGw9MTYqcix1PTA7dTwxNjsrK3Upblt1XT1pW2wrK107ZWxzZXtmb3IodmFyIGM9ZVtyKzFdLWVbcl0sbD0xNipyLGg9dGhpcy5wcmV2TWF0cml4LGY9ITAsdT0wO3U8MTY7Kyt1KWhbdV09aVtsKytdO2Zvcih2YXIgcD10aGlzLm5leHRNYXRyaXgsdT0wO3U8MTY7Kyt1KXBbdV09aVtsKytdLGY9ZiYmaFt1XT09PXBbdV07aWYoYzwxZS02fHxmKWZvcih2YXIgdT0wO3U8MTY7Kyt1KW5bdV09aFt1XTtlbHNlIG8obixoLHAsKHQtZVtyXSkvYyl9dmFyIG09dGhpcy5jb21wdXRlZFVwO21bMF09blsxXSxtWzFdPW5bNV0sbVsyXT1uWzldLGQobSxtKTt2YXIgdj10aGlzLmNvbXB1dGVkSW52ZXJzZTtzKHYsbik7dmFyIGc9dGhpcy5jb21wdXRlZEV5ZSx5PXZbMTVdO2dbMF09dlsxMl0veSxnWzFdPXZbMTNdL3ksZ1syXT12WzE0XS95O2Zvcih2YXIgYj10aGlzLmNvbXB1dGVkQ2VudGVyLHg9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksdT0wO3U8MzsrK3UpYlt1XT1nW3VdLW5bMis0KnVdKnh9fSxtLmlkbGU9ZnVuY3Rpb24odCl7aWYoISh0PHRoaXMubGFzdFQoKSkpe2Zvcih2YXIgZT10aGlzLl9jb21wb25lbnRzLHI9ZS5sZW5ndGgtMTYsbj0wO248MTY7KytuKWUucHVzaChlW3IrK10pO3RoaXMuX3RpbWUucHVzaCh0KX19LG0uZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU9YS5ndCh0aGlzLl90aW1lLHQpLTI7ZTwwfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9jb21wb25lbnRzLnNwbGljZSgwLDE2KmUpKX0sbS5sYXN0VD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aW1lW3RoaXMuX3RpbWUubGVuZ3RoLTFdfSxtLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fHRoaXMuY29tcHV0ZWRFeWUscj1yfHxwLG49bnx8dGhpcy5jb21wdXRlZFVwLHRoaXMuc2V0TWF0cml4KHQsaCh0aGlzLmNvbXB1dGVkTWF0cml4LGUscixuKSk7Zm9yKHZhciBpPTAsYT0wO2E8MzsrK2EpaSs9TWF0aC5wb3coclthXS1lW2FdLDIpO2k9TWF0aC5sb2coTWF0aC5zcXJ0KGkpKSx0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWl9LG0ucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2UmJnUoaSxpLGUpLHImJmwoaSxpLHIpLG4mJmMoaSxpLG4pLHRoaXMuc2V0TWF0cml4KHQscyh0aGlzLmNvbXB1dGVkTWF0cml4LGkpKX07dmFyIHY9WzAsMCwwXTttLnBhbj1mdW5jdGlvbih0LGUscixuKXt2WzBdPS0oZXx8MCksdlsxXT0tKHJ8fDApLHZbMl09LShufHwwKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkSW52ZXJzZTtmKGksaSx2KSx0aGlzLnNldE1hdHJpeCh0LHMoaSxpKSl9LG0udHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZbMF09ZXx8MCx2WzFdPXJ8fDAsdlsyXT1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7ZihpLGksdiksdGhpcy5zZXRNYXRyaXgodCxpKX0sbS5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7dGhpcy5fdGltZS5wdXNoKHQpO2Zvcih2YXIgcj0wO3I8MTY7KytyKXRoaXMuX2NvbXBvbmVudHMucHVzaChlW3JdKX19LG0uc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkUmFkaXVzWzBdPWV9LG0uc2V0RGlzdGFuY2VMaW1pdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9saW1pdHM7clswXT10LHJbMV09ZX0sbS5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9saW1pdHM7cmV0dXJuIHQ/KHRbMF09ZVswXSx0WzFdPWVbMV0sdCk6ZX19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjY0LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L2xvb2tBdCI6MTgwLCJnbC1tYXQ0L3JvdGF0ZVgiOjE4NCwiZ2wtbWF0NC9yb3RhdGVZIjoxODUsImdsLW1hdDQvcm90YXRlWiI6MTg2LCJnbC1tYXQ0L3NjYWxlIjoxODcsImdsLW1hdDQvdHJhbnNsYXRlIjoxODgsImdsLXZlYzMvbm9ybWFsaXplIjoyNzQsIm1hdDQtaW50ZXJwb2xhdGUiOjQ0Nn1dLDQ0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8Myl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPW47cmV0dXJuIDI9PT1lJiZ0WzBdWzBdPT09dFsxXVswXSYmdFswXVsxXT09PXRbMV1bMV0/WzBdOnJ9Zm9yKHZhciBhPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilhW25dPW47YS5zb3J0KGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KTtmb3IodmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXSxuPTI7bjxlOysrbil7Zm9yKHZhciBsPWFbbl0sdT10W2xdLGM9by5sZW5ndGg7Yz4xJiZpKHRbb1tjLTJdXSx0W29bYy0xXV0sdSk8PTA7KWMtPTEsby5wb3AoKTtmb3Ioby5wdXNoKGwpLGM9cy5sZW5ndGg7Yz4xJiZpKHRbc1tjLTJdXSx0W3NbYy0xXV0sdSk+PTA7KWMtPTEscy5wb3AoKTtzLnB1c2gobCl9Zm9yKHZhciByPW5ldyBBcnJheShzLmxlbmd0aCtvLmxlbmd0aC0yKSxoPTAsbj0wLGY9by5sZW5ndGg7bjxmOysrbilyW2grK109b1tuXTtmb3IodmFyIGQ9cy5sZW5ndGgtMjtkPjA7LS1kKXJbaCsrXT1zW2RdO3JldHVybiByfWUuZXhwb3J0cz1uO3ZhciBpPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTA2fV0sNDUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPSExO3JldHVybiJhbHRLZXkiaW4gdCYmKGU9ZXx8dC5hbHRLZXkhPT12LmFsdCx2LmFsdD0hIXQuYWx0S2V5KSwic2hpZnRLZXkiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PXYuc2hpZnQsdi5zaGlmdD0hIXQuc2hpZnRLZXkpLCJjdHJsS2V5ImluIHQmJihlPWV8fHQuY3RybEtleSE9PXYuY29udHJvbCx2LmNvbnRyb2w9ISF0LmN0cmxLZXkpLCJtZXRhS2V5ImluIHQmJihlPWV8fHQubWV0YUtleSE9PXYubWV0YSx2Lm1ldGE9ISF0Lm1ldGFLZXkpLGV9ZnVuY3Rpb24gbih0LG4pe3ZhciBhPWkueChuKSxvPWkueShuKTsiYnV0dG9ucyJpbiBuJiYodD0wfG4uYnV0dG9ucyksKHQhPT1kfHxhIT09cHx8byE9PW18fHIobikpJiYoZD0wfHQscD1hfHwwLG09b3x8MCxlJiZlKGQscCxtLHYpKX1mdW5jdGlvbiBhKHQpe24oMCx0KX1mdW5jdGlvbiBvKCl7KGR8fHB8fG18fHYuc2hpZnR8fHYuYWx0fHx2Lm1ldGF8fHYuY29udHJvbCkmJihwPW09MCxkPTAsdi5zaGlmdD12LmFsdD12LmNvbnRyb2w9di5tZXRhPSExLGUmJmUoMCwwLDAsdikpfWZ1bmN0aW9uIHModCl7cih0KSYmZSYmZShkLHAsbSx2KX1mdW5jdGlvbiBsKHQpezA9PT1pLmJ1dHRvbnModCk/bigwLHQpOm4oZCx0KX1mdW5jdGlvbiB1KHQpe24oZHxpLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gYyh0KXtuKGQmfmkuYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBoKCl7Z3x8KGc9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLGwpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGMpLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsYSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIixhKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0IixhKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsYSksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixvKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHMpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHMpLHQhPT13aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsbyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixzKSkpfWZ1bmN0aW9uIGYoKXtnJiYoZz0hMSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixhKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLGEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixhKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLG8pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIscyksdCE9PXdpbmRvdyYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixvKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHMpKSl9ZXx8KGU9dCx0PXdpbmRvdyk7dmFyIGQ9MCxwPTAsbT0wLHY9e3NoaWZ0OiExLGFsdDohMSxjb250cm9sOiExLG1ldGE6ITF9LGc9ITE7aCgpO3ZhciB5PXtlbGVtZW50OnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh5LHtlbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKHQpe3Q/aCgpOmYoKX0sZW51bWVyYWJsZTohMH0sYnV0dG9uczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LGVudW1lcmFibGU6ITB9LHg6e2dldDpmdW5jdGlvbigpe3JldHVybiBwfSxlbnVtZXJhYmxlOiEwfSx5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sZW51bWVyYWJsZTohMH0sbW9kczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZ9LGVudW1lcmFibGU6ITB9fSkseX1lLmV4cG9ydHM9bjt2YXIgaT10KCJtb3VzZS1ldmVudCIpfSx7Im1vdXNlLWV2ZW50Ijo0NTJ9XSw0NTE6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtlPWV8fHQuY3VycmVudFRhcmdldHx8dC5zcmNFbGVtZW50LEFycmF5LmlzQXJyYXkocil8fChyPVswLDBdKTt2YXIgbj10LmNsaWVudFh8fDAsYT10LmNsaWVudFl8fDAsbz1pKGUpO3JldHVybiByWzBdPW4tby5sZWZ0LHJbMV09YS1vLnRvcCxyfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ9PT13aW5kb3d8fHQ9PT1kb2N1bWVudHx8dD09PWRvY3VtZW50LmJvZHk/YTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfXZhciBhPXtsZWZ0OjAsdG9wOjB9O2UuZXhwb3J0cz1ufSx7fV0sNDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigiYnV0dG9ucyJpbiB0KXJldHVybiB0LmJ1dHRvbnM7aWYoIndoaWNoImluIHQpe3ZhciBlPXQud2hpY2g7aWYoMj09PWUpcmV0dXJuIDQ7aWYoMz09PWUpcmV0dXJuIDI7aWYoZT4wKXJldHVybiAxPDxlLTF9ZWxzZSBpZigiYnV0dG9uImluIHQpe3ZhciBlPXQuYnV0dG9uO2lmKDE9PT1lKXJldHVybiA0O2lmKDI9PT1lKXJldHVybiAyO2lmKGU+PTApcmV0dXJuIDE8PGV9fXJldHVybiAwfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0fHx0LnNyY0VsZW1lbnR8fHdpbmRvd31mdW5jdGlvbiBhKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoIm9mZnNldFgiaW4gdClyZXR1cm4gdC5vZmZzZXRYO3ZhciBlPWkodCkscj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFgtci5sZWZ0fXJldHVybiAwfWZ1bmN0aW9uIG8odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WSJpbiB0KXJldHVybiB0Lm9mZnNldFk7dmFyIGU9aSh0KSxyPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIHQuY2xpZW50WS1yLnRvcH1yZXR1cm4gMH1yLmJ1dHRvbnM9bixyLmVsZW1lbnQ9aSxyLng9YSxyLnk9b30se31dLDQ1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHI9ISFlLGU9dCx0PXdpbmRvdyk7dmFyIG49aSgiZXgiLHQpLGE9ZnVuY3Rpb24odCl7ciYmdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPXQuZGVsdGFYfHwwLGE9dC5kZWx0YVl8fDAsbz10LmRlbHRhWnx8MCxzPXQuZGVsdGFNb2RlLGw9MTtzd2l0Y2gocyl7Y2FzZSAxOmw9bjticmVhaztjYXNlIDI6bD13aW5kb3cuaW5uZXJIZWlnaHR9aWYoaSo9bCxhKj1sLG8qPWwsaXx8YXx8bylyZXR1cm4gZShpLGEsbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEpLGF9dmFyIGk9dCgidG8tcHgiKTtlLmV4cG9ydHM9bn0seyJ0by1weCI6NTMzfV0sNDU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuImEiK3R9ZnVuY3Rpb24gaSh0KXtyZXR1cm4iZCIrdH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuImMiK3QrIl8iK2V9ZnVuY3Rpb24gbyh0KXtyZXR1cm4icyIrdH1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuInQiK3QrIl8iK2V9ZnVuY3Rpb24gbCh0KXtyZXR1cm4ibyIrdH1mdW5jdGlvbiB1KHQpe3JldHVybiJ4Iit0fWZ1bmN0aW9uIGModCl7cmV0dXJuInAiK3R9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiJkIit0KyJfIitlfWZ1bmN0aW9uIGYodCl7cmV0dXJuImkiK3R9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiJ1Iit0KyJfIitlfWZ1bmN0aW9uIHAodCl7cmV0dXJuImIiK3R9ZnVuY3Rpb24gbSh0KXtyZXR1cm4ieSIrdH1mdW5jdGlvbiB2KHQpe3JldHVybiJlIit0fWZ1bmN0aW9uIGcodCl7cmV0dXJuInYiK3R9ZnVuY3Rpb24geSh0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dDsrK2kpZSYxPDxpJiYobnw9MTw8cltpXSk7cmV0dXJuIG59ZnVuY3Rpb24gYih0LGUscixiLHgsRSl7ZnVuY3Rpb24gTCh0LGUpe2oucHVzaCgiZm9yKCIsZih4W3RdKSwiPSIsZSwiOyIsZih4W3RdKSwiPCIsbyh4W3RdKSwiOyIsIisrIixmKHhbdF0pLCIpeyIpfWZ1bmN0aW9uIEModCl7Zm9yKHZhciBlPTA7ZTxPOysrZSlqLnB1c2goYyhlKSwiKz0iLGQoZSx4W3RdKSwiOyIpO2oucHVzaCgifSIpfWZ1bmN0aW9uIHoodCl7Zm9yKHZhciBlPXQtMTtlPj0wOy0tZSlMKGUsMCk7Zm9yKHZhciByPVtdLGU9MDtlPE87KytlKUVbZV0/ci5wdXNoKGkoZSkrIi5nZXQoIitjKGUpKyIpIik6ci5wdXNoKGkoZSkrIlsiK2MoZSkrIl0iKTtmb3IodmFyIGU9MDtlPGI7KytlKXIucHVzaCh1KGUpKTtqLnB1c2goTSwiWyIsVCwiKytdPXBoYXNlKCIsci5qb2luKCksIik7Iik7Zm9yKHZhciBlPTA7ZTx0OysrZSlDKGUpO2Zvcih2YXIgbj0wO248TzsrK24pai5wdXNoKGMobiksIis9IixkKG4seFt0XSksIjsiKX1mdW5jdGlvbiBJKHQpe2Zvcih2YXIgZT0wO2U8TzsrK2UpRVtlXT9qLnB1c2goYShlLDApLCI9IixpKGUpLCIuZ2V0KCIsYyhlKSwiKTsiKTpqLnB1c2goYShlLDApLCI9IixpKGUpLCJbIixjKGUpLCJdOyIpO2Zvcih2YXIgcj1bXSxlPTA7ZTxPOysrZSlyLnB1c2goYShlLDApKTtmb3IodmFyIGU9MDtlPGI7KytlKXIucHVzaCh1KGUpKTtqLnB1c2gocCgwKSwiPSIsTSwiWyIsVCwiXT1waGFzZSgiLHIuam9pbigpLCIpOyIpO2Zvcih2YXIgbj0xO248MTw8UjsrK24pai5wdXNoKHAobiksIj0iLE0sIlsiLFQsIisiLHYobiksIl07Iik7Zm9yKHZhciBvPVtdLG49MTtuPDE8PFI7KytuKW8ucHVzaCgiKCIrcCgwKSsiIT09IitwKG4pKyIpIik7ai5wdXNoKCJpZigiLG8uam9pbigifHwiKSwiKXsiKTtmb3IodmFyIHM9W10sZT0wO2U8UjsrK2Upcy5wdXNoKGYoZSkpO2Zvcih2YXIgZT0wO2U8TzsrK2Upe3MucHVzaChhKGUsMCkpO2Zvcih2YXIgbj0xO248MTw8UjsrK24pRVtlXT9qLnB1c2goYShlLG4pLCI9IixpKGUpLCIuZ2V0KCIsYyhlKSwiKyIsaChlLG4pLCIpOyIpOmoucHVzaChhKGUsbiksIj0iLGkoZSksIlsiLGMoZSksIisiLGgoZSxuKSwiXTsiKSxzLnB1c2goYShlLG4pKX1mb3IodmFyIGU9MDtlPDE8PFI7KytlKXMucHVzaChwKGUpKTtmb3IodmFyIGU9MDtlPGI7KytlKXMucHVzaCh1KGUpKTtqLnB1c2goInZlcnRleCgiLHMuam9pbigpLCIpOyIsZygwKSwiPSIsdywiWyIsVCwiXT0iLGssIisrOyIpO2Zvcih2YXIgbD0oMTw8UiktMSxkPXAobCksbj0wO248UjsrK24paWYoMD09KHQmfigxPDxuKSkpe2Zvcih2YXIgbT1sXjE8PG4seT1wKG0pLHg9W10sXz1tO18+MDtfPV8tMSZtKXgucHVzaCh3KyJbIitUKyIrIit2KF8pKyJdIik7eC5wdXNoKGcoMCkpO2Zvcih2YXIgXz0wO188TzsrK18pMSZuP3gucHVzaChhKF8sbCksYShfLG0pKTp4LnB1c2goYShfLG0pLGEoXyxsKSk7MSZuP3gucHVzaChkLHkpOngucHVzaCh5LGQpO2Zvcih2YXIgXz0wO188YjsrK18peC5wdXNoKHUoXykpO2oucHVzaCgiaWYoIixkLCIhPT0iLHksIil7IiwiZmFjZSgiLHguam9pbigpLCIpfSIpfWoucHVzaCgifSIsVCwiKz0xOyIpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHQ9MTt0PDE8PFI7Kyt0KWoucHVzaChTLCI9Iix2KHQpLCI7Iix2KHQpLCI9IixtKHQpLCI7IixtKHQpLCI9IixTLCI7Iil9ZnVuY3Rpb24gUCh0LGUpe2lmKHQ8MClyZXR1cm4gdm9pZCBJKGUpO3oodCksai5wdXNoKCJpZigiLG8oeFt0XSksIj4wKXsiLGYoeFt0XSksIj0xOyIpLFAodC0xLGV8MTw8eFt0XSk7Zm9yKHZhciByPTA7cjxPOysrcilqLnB1c2goYyhyKSwiKz0iLGQocix4W3RdKSwiOyIpO3Q9PT1SLTEmJihqLnB1c2goVCwiPTA7IiksRCgpKSxMKHQsMiksUCh0LTEsZSksdD09PVItMSYmKGoucHVzaCgiaWYoIixmKHhbUi0xXSksIiYxKXsiLFQsIj0wO30iKSxEKCkpLEModCksai5wdXNoKCJ9Iil9dmFyIE89RS5sZW5ndGgsUj14Lmxlbmd0aDtpZihSPDIpdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWV4dHJhY3QtY29udG91cjogRGltZW5zaW9uIG11c3QgYmUgYXQgbGVhc3QgMiIpO2Zvcih2YXIgRj0iZXh0cmFjdENvbnRvdXIiK3guam9pbigiXyIpLGo9W10sTj1bXSxCPVtdLFU9MDtVPE87KytVKUIucHVzaChuKFUpKTtmb3IodmFyIFU9MDtVPGI7KytVKUIucHVzaCh1KFUpKTtmb3IodmFyIFU9MDtVPFI7KytVKU4ucHVzaChvKFUpKyI9IituKDApKyIuc2hhcGVbIitVKyJdfDAiKTtmb3IodmFyIFU9MDtVPE87KytVKXtOLnB1c2goaShVKSsiPSIrbihVKSsiLmRhdGEiLGwoVSkrIj0iK24oVSkrIi5vZmZzZXR8MCIpO2Zvcih2YXIgVj0wO1Y8UjsrK1YpTi5wdXNoKHMoVSxWKSsiPSIrbihVKSsiLnN0cmlkZVsiK1YrIl18MCIpfWZvcih2YXIgVT0wO1U8TzsrK1Upe04ucHVzaChjKFUpKyI9IitsKFUpKSxOLnB1c2goYShVLDApKTtmb3IodmFyIFY9MTtWPDE8PFI7KytWKXtmb3IodmFyIEg9W10scT0wO3E8UjsrK3EpViYxPDxxJiZILnB1c2goIi0iK3MoVSxxKSk7Ti5wdXNoKGgoVSxWKSsiPSgiK0guam9pbigiIikrIil8MCIpLE4ucHVzaChhKFUsVikrIj0wIil9fWZvcih2YXIgVT0wO1U8TzsrK1UpZm9yKHZhciBWPTA7VjxSOysrVil7dmFyIEc9W3MoVSx4W1ZdKV07Vj4wJiZHLnB1c2gocyhVLHhbVi0xXSkrIioiK28oeFtWLTFdKSksTi5wdXNoKGQoVSx4W1ZdKSsiPSgiK0cuam9pbigiLSIpKyIpfDAiKX1mb3IodmFyIFU9MDtVPFI7KytVKU4ucHVzaChmKFUpKyI9MCIpO04ucHVzaChrKyI9MCIpO2Zvcih2YXIgWT1bIjIiXSxVPVItMjtVPj0wOy0tVSlZLnB1c2gobyh4W1VdKSk7Ti5wdXNoKEErIj0oIitZLmpvaW4oIioiKSsiKXwwIixNKyI9bWFsbG9jVWludDMyKCIrQSsiKSIsdysiPW1hbGxvY1VpbnQzMigiK0ErIikiLFQrIj0wIiksTi5wdXNoKHAoMCkrIj0wIik7Zm9yKHZhciBWPTE7VjwxPDxSOysrVil7Zm9yKHZhciBYPVtdLFc9W10scT0wO3E8UjsrK3EpViYxPDxxJiYoMD09PVcubGVuZ3RoP1gucHVzaCgiMSIpOlgudW5zaGlmdChXLmpvaW4oIioiKSkpLFcucHVzaChvKHhbcV0pKTt2YXIgWj0iIjtYWzBdLmluZGV4T2Yobyh4W1ItMl0pKTwwJiYoWj0iLSIpO3ZhciBKPXkoUixWLHgpO04ucHVzaCh2KEopKyI9KC0iK1guam9pbigiLSIpKyIpfDAiLG0oSikrIj0oIitaK1guam9pbigiLSIpKyIpfDAiLHAoSikrIj0wIil9Ti5wdXNoKGcoMCkrIj0wIixTKyI9MCIpLFAoUi0xLDApLGoucHVzaCgiZnJlZVVpbnQzMigiLHcsIik7ZnJlZVVpbnQzMigiLE0sIik7Iik7dmFyIEs9WyIndXNlIHN0cmljdCc7IiwiZnVuY3Rpb24gIixGLCIoIixCLmpvaW4oKSwiKXsiLCJ2YXIgIixOLmpvaW4oKSwiOyIsai5qb2luKCIiKSwifSIsInJldHVybiAiLEZdLmpvaW4oIiIpO3JldHVybiBuZXcgRnVuY3Rpb24oInZlcnRleCIsImZhY2UiLCJwaGFzZSIsIm1hbGxvY1VpbnQzMiIsImZyZWVVaW50MzIiLEspKHQsZSxyLF8ubWFsbG9jVWludDMyLF8uZnJlZVVpbnQzMil9ZnVuY3Rpb24geCh0KXtmdW5jdGlvbiBlKHQpe3Rocm93IG5ldyBFcnJvcigibmRhcnJheS1leHRyYWN0LWNvbnRvdXI6ICIrdCl9Im9iamVjdCIhPXR5cGVvZiB0JiZlKCJNdXN0IHNwZWNpZnkgYXJndW1lbnRzIik7dmFyIHI9dC5vcmRlcjtBcnJheS5pc0FycmF5KHIpfHxlKCJNdXN0IHNwZWNpZnkgb3JkZXIiKTt2YXIgbj10LmFycmF5QXJndW1lbnRzfHwxO248MSYmZSgiTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBhcnJheSBhcmd1bWVudCIpO3ZhciBpPXQuc2NhbGFyQXJndW1lbnRzfHwwO2k8MCYmZSgiU2NhbGFyIGFyZyBjb3VudCBtdXN0IGJlID4gMCIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnZlcnRleCYmZSgiTXVzdCBzcGVjaWZ5IHZlcnRleCBjcmVhdGlvbiBmdW5jdGlvbiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNlbGwmJmUoIk11c3Qgc3BlY2lmeSBjZWxsIGNyZWF0aW9uIGZ1bmN0aW9uIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQucGhhc2UmJmUoIk11c3Qgc3BlY2lmeSBwaGFzZSBmdW5jdGlvbiIpO2Zvcih2YXIgYT10LmdldHRlcnN8fFtdLG89bmV3IEFycmF5KG4pLHM9MDtzPG47KytzKWEuaW5kZXhPZihzKT49MD9vW3NdPSEwOm9bc109ITE7cmV0dXJuIGIodC52ZXJ0ZXgsdC5jZWxsLHQucGhhc2UsaSxyLG8pfXZhciBfPXQoInR5cGVkYXJyYXktcG9vbCIpO2UuZXhwb3J0cz14O3ZhciB3PSJWIixNPSJQIixrPSJOIixBPSJRIixUPSJYIixTPSJUIn0seyJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDQ1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xX2FyZzFfPV9pbmxpbmVfMV9hcmcyXy5hcHBseSh2b2lkIDAsX2lubGluZV8xX2FyZzBfKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6ImN3aXNlIixibG9ja1NpemU6NjR9KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpLHR9fSx7ImN3aXNlL2xpYi93cmFwcGVyIjoxMTF9XSw0NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZih0IGluIGwpcmV0dXJuIGxbdF07Zm9yKHZhciBlPVtdLHI9MDtyPHQ7KytyKWUucHVzaCgib3V0IixyLCJzPTAuNSooaW5wIixyLCJsLWlucCIsciwicik7Iik7Zm9yKHZhciBuPVsiYXJyYXkiXSxpPVsianVuayJdLHI9MDtyPHQ7KytyKXtuLnB1c2goImFycmF5IiksaS5wdXNoKCJvdXQiK3IrInMiKTt2YXIgYT1vKHQpO2Fbcl09LTEsbi5wdXNoKHthcnJheTowLG9mZnNldDphLnNsaWNlKCl9KSxhW3JdPTEsbi5wdXNoKHthcnJheTowLG9mZnNldDphLnNsaWNlKCl9KSxpLnB1c2goImlucCIrcisibCIsImlucCIrcisiciIpfXJldHVybiBsW3RdPXMoe2FyZ3M6bixwcmU6Yyxwb3N0OmMsYm9keTp7Ym9keTplLmpvaW4oIiIpLGFyZ3M6aS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dCxsdmFsdWU6MD09PXQuaW5kZXhPZigib3V0IikscnZhbHVlOjA9PT10LmluZGV4T2YoImlucCIpLGNvdW50OiJqdW5rIiE9PXR8MH19KSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJmZFRlbXBsYXRlIit0fSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmpvaW4oKSxyPXVbZV07aWYocilyZXR1cm4gcjtmb3IodmFyIGk9dC5sZW5ndGgsYT1bImZ1bmN0aW9uIGdyYWRpZW50KGRzdCxzcmMpe3ZhciBzPXNyYy5zaGFwZS5zbGljZSgpOyJdLG89MDtvPDE8PGk7KytvKXtmb3IodmFyIHM9W10sYz0wO2M8aTsrK2MpbyYxPDxjJiZzLnB1c2goYysxKTtmb3IodmFyIGQ9MDtkPDE8PHMubGVuZ3RoOysrZCl7Zm9yKHZhciBwPXMuc2xpY2UoKSxjPTA7YzxzLmxlbmd0aDsrK2MpZCYxPDxjJiYocFtjXT0tcFtjXSk7IWZ1bmN0aW9uKGUpewpmb3IodmFyIHI9aS1lLmxlbmd0aCxuPVtdLG89W10scz1bXSxsPTA7bDxpOysrbCllLmluZGV4T2YobCsxKT49MD9zLnB1c2goIjAiKTplLmluZGV4T2YoLShsKzEpKT49MD9zLnB1c2goInNbIitsKyJdLTEiKToocy5wdXNoKCItMSIpLG4ucHVzaCgiMSIpLG8ucHVzaCgic1siK2wrIl0tMiIpKTt2YXIgdT0iLmxvKCIrbi5qb2luKCkrIikuaGkoIitvLmpvaW4oKSsiKSI7aWYoMD09PW4ubGVuZ3RoJiYodT0iIikscj4wKXthLnB1c2goImlmKDEiKTtmb3IodmFyIGw9MDtsPGk7KytsKWUuaW5kZXhPZihsKzEpPj0wfHxlLmluZGV4T2YoLShsKzEpKT49MHx8YS5wdXNoKCImJnNbIixsLCJdPjIiKTthLnB1c2goIil7Z3JhZCIsciwiKHNyYy5waWNrKCIscy5qb2luKCksIikiLHUpO2Zvcih2YXIgbD0wO2w8aTsrK2wpZS5pbmRleE9mKGwrMSk+PTB8fGUuaW5kZXhPZigtKGwrMSkpPj0wfHxhLnB1c2goIixkc3QucGljaygiLHMuam9pbigpLCIsIixsLCIpIix1KTthLnB1c2goIik7Iil9Zm9yKHZhciBsPTA7bDxlLmxlbmd0aDsrK2wpe3ZhciBjPU1hdGguYWJzKGVbbF0pLTEsaD0iZHN0LnBpY2soIitzLmpvaW4oKSsiLCIrYysiKSIrdTtzd2l0Y2godFtjXSl7Y2FzZSJjbGFtcCI6dmFyIGY9cy5zbGljZSgpLGQ9cy5zbGljZSgpO2VbbF08MD9mW2NdPSJzWyIrYysiXS0yIjpkW2NdPSIxIiwwPT09cj9hLnB1c2goImlmKHNbIixjLCJdPjEpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsYywiLDAuNSooc3JjLmdldCgiLGYuam9pbigpLCIpLXNyYy5nZXQoIixkLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIixjLCIsMCl9OyIpOmEucHVzaCgiaWYoc1siLGMsIl0+MSl7ZGlmZigiLGgsIixzcmMucGljaygiLGYuam9pbigpLCIpIix1LCIsc3JjLnBpY2soIixkLmpvaW4oKSwiKSIsdSwiKTt9ZWxzZXt6ZXJvKCIsaCwiKTt9OyIpO2JyZWFrO2Nhc2UibWlycm9yIjowPT09cj9hLnB1c2goImRzdC5zZXQoIixzLmpvaW4oKSwiLCIsYywiLDApOyIpOmEucHVzaCgiemVybygiLGgsIik7Iik7YnJlYWs7Y2FzZSJ3cmFwIjp2YXIgcD1zLnNsaWNlKCksbT1zLnNsaWNlKCk7ZVtsXTwwPyhwW2NdPSJzWyIrYysiXS0yIixtW2NdPSIwIik6KHBbY109InNbIitjKyJdLTEiLG1bY109IjEiKSwwPT09cj9hLnB1c2goImlmKHNbIixjLCJdPjIpe2RzdC5zZXQoIixzLmpvaW4oKSwiLCIsYywiLDAuNSooc3JjLmdldCgiLHAuam9pbigpLCIpLXNyYy5nZXQoIixtLmpvaW4oKSwiKSkpfWVsc2V7ZHN0LnNldCgiLHMuam9pbigpLCIsIixjLCIsMCl9OyIpOmEucHVzaCgiaWYoc1siLGMsIl0+Mil7ZGlmZigiLGgsIixzcmMucGljaygiLHAuam9pbigpLCIpIix1LCIsc3JjLnBpY2soIixtLmpvaW4oKSwiKSIsdSwiKTt9ZWxzZXt6ZXJvKCIsaCwiKTt9OyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBJbnZhbGlkIGJvdW5kYXJ5IGNvbmRpdGlvbiIpfX1yPjAmJmEucHVzaCgifTsiKX0ocCl9fWEucHVzaCgicmV0dXJuIGRzdDt9O3JldHVybiBncmFkaWVudCIpO2Zvcih2YXIgbT1bImRpZmYiLCJ6ZXJvIl0sdj1baCxmXSxvPTE7bzw9aTsrK28pbS5wdXNoKCJncmFkIitvKSx2LnB1c2gobihvKSk7bS5wdXNoKGEuam9pbigiIikpO3ZhciBnPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCxtKSxyPWcuYXBwbHkodm9pZCAwLHYpO3JldHVybiBsW2VdPXIscn1mdW5jdGlvbiBhKHQsZSxyKXtpZihBcnJheS5pc0FycmF5KHIpKXtpZihyLmxlbmd0aCE9PWUuZGltZW5zaW9uKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogaW52YWxpZCBib3VuZGFyeSBjb25kaXRpb25zIil9ZWxzZSByPSJzdHJpbmciPT10eXBlb2Ygcj9vKGUuZGltZW5zaW9uLHIpOm8oZS5kaW1lbnNpb24sImNsYW1wIik7aWYodC5kaW1lbnNpb24hPT1lLmRpbWVuc2lvbisxKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogb3V0cHV0IGRpbWVuc2lvbiBtdXN0IGJlICsxIGlucHV0IGRpbWVuc2lvbiIpO2lmKHQuc2hhcGVbZS5kaW1lbnNpb25dIT09ZS5kaW1lbnNpb24pdGhyb3cgbmV3IEVycm9yKCJuZGFycmF5LWdyYWRpZW50OiBvdXRwdXQgc2hhcGUgbXVzdCBtYXRjaCBpbnB1dCBzaGFwZSIpO2Zvcih2YXIgbj0wO248ZS5kaW1lbnNpb247KytuKWlmKHQuc2hhcGVbbl0hPT1lLnNoYXBlW25dKXRocm93IG5ldyBFcnJvcigibmRhcnJheS1ncmFkaWVudDogc2hhcGUgbWlzbWF0Y2giKTtyZXR1cm4gMD09PWUuc2l6ZT90OmUuZGltZW5zaW9uPD0wPyh0LnNldCgwKSx0KTppKHIpKHQsZSl9ZS5leHBvcnRzPWE7dmFyIG89dCgiZHVwIikscz10KCJjd2lzZS1jb21waWxlciIpLGw9e30sdT17fSxjPXtib2R5OiIiLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxoPXMoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6Yyxwb3N0OmMsYm9keTp7YXJnczpbe25hbWU6Im91dCIsbHZhbHVlOiEwLHJ2YWx1ZTohMSxjb3VudDoxfSx7bmFtZToibGVmdCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToicmlnaHQiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6Im91dD0wLjUqKGxlZnQtcmlnaHQpIix0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjZGlmZiJ9KSxmPXMoe2FyZ3M6WyJhcnJheSJdLHByZTpjLHBvc3Q6Yyxib2R5OnthcmdzOlt7bmFtZToib3V0IixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9XSxib2R5OiJvdXQ9MCIsdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxmdW5jTmFtZToiemVybyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTA4LGR1cDoxMjN9XSw0NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49ZS5kaW1lbnNpb24sbz1hKFtdLHIpO3JldHVybiBpKHQsZSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8bjsrK3Ipe3Rbcl09b1sobisxKSpuK3JdO2Zvcih2YXIgaT0wO2k8bjsrK2kpdFtyXSs9b1sobisxKSppK3JdKmVbaV19Zm9yKHZhciBhPW9bKG4rMSkqKG4rMSktMV0saT0wO2k8bjsrK2kpYSs9b1sobisxKSppK25dKmVbaV07Zm9yKHZhciBzPTEvYSxyPTA7cjxuOysrcil0W3JdKj1zO3JldHVybiB0fSksdH12YXIgaT10KCJuZGFycmF5LXdhcnAiKSxhPXQoImdsLW1hdHJpeC1pbnZlcnQiKTtlLmV4cG9ydHM9bn0seyJnbC1tYXRyaXgtaW52ZXJ0IjoxOTAsIm5kYXJyYXktd2FycCI6NDY0fV0sNDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGk9MDw9ciYmcjx0LnNoYXBlWzBdLGE9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooaT8rdC5nZXQocik6MCkrbiooYT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGk9ZS1uLGE9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsdT0wPD1zJiZzPHQuc2hhcGVbMV0sYz0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGg9YSYmdT90LmdldChuLHMpOjAsZj1hJiZjP3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1pKSpoK2kqKG8mJnU/dC5nZXQobisxLHMpOjApKStsKigoMS1pKSpmK2kqKG8mJmM/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk9TWF0aC5mbG9vcihlKSxhPWUtaSxvPTA8PWkmJmk8dC5zaGFwZVswXSxzPTA8PWkrMSYmaSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLHU9ci1sLGM9MDw9bCYmbDx0LnNoYXBlWzFdLGg9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxmPU1hdGguZmxvb3IobiksZD1uLWYscD0wPD1mJiZmPHQuc2hhcGVbMl0sbT0wPD1mKzEmJmYrMTx0LnNoYXBlWzJdLHY9byYmYyYmcD90LmdldChpLGwsZik6MCxnPW8mJmgmJnA/dC5nZXQoaSxsKzEsZik6MCx5PXMmJmMmJnA/dC5nZXQoaSsxLGwsZik6MCxiPXMmJmgmJnA/dC5nZXQoaSsxLGwrMSxmKTowLHg9byYmYyYmbT90LmdldChpLGwsZisxKTowLF89byYmaCYmbT90LmdldChpLGwrMSxmKzEpOjA7cmV0dXJuKDEtZCkqKCgxLXUpKigoMS1hKSp2K2EqeSkrdSooKDEtYSkqZythKmIpKStkKigoMS11KSooKDEtYSkqeCthKihzJiZjJiZtP3QuZ2V0KGkrMSxsLGYrMSk6MCkpK3UqKCgxLWEpKl8rYSoocyYmaCYmbT90LmdldChpKzEsbCsxLGYrMSk6MCkpKX1mdW5jdGlvbiBvKHQpe3ZhciBlLHIsbj0wfHQuc2hhcGUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlyPSthcmd1bWVudHNbZSsxXSxpW2VdPU1hdGguZmxvb3IociksYVtlXT1yLWlbZV0sb1tlXT0wPD1pW2VdJiZpW2VdPHQuc2hhcGVbZV0sc1tlXT0wPD1pW2VdKzEmJmlbZV0rMTx0LnNoYXBlW2VdO3ZhciBsLHUsYyxoPTA7dDpmb3IoZT0wO2U8MTw8bjsrK2Upe2Zvcih1PTEsYz10Lm9mZnNldCxsPTA7bDxuOysrbClpZihlJjE8PGwpe2lmKCFzW2xdKWNvbnRpbnVlIHQ7dSo9YVtsXSxjKz10LnN0cmlkZVtsXSooaVtsXSsxKX1lbHNle2lmKCFvW2xdKWNvbnRpbnVlIHQ7dSo9MS1hW2xdLGMrPXQuc3RyaWRlW2xdKmlbbF19aCs9dSp0LmRhdGFbY119cmV0dXJuIGh9ZnVuY3Rpb24gcyh0LGUscixzKXtzd2l0Y2godC5zaGFwZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIG4odCxlKTtjYXNlIDI6cmV0dXJuIGkodCxlLHIpO2Nhc2UgMzpyZXR1cm4gYSh0LGUscixzKTtkZWZhdWx0OnJldHVybiBvLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1lLmV4cG9ydHM9cyxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9aSxlLmV4cG9ydHMuZDM9YX0se31dLDQ1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKCF0KXJldHVybiBzO2Zvcih2YXIgZT0wO2U8dC5hcmdzLmxlbmd0aDsrK2Upe3ZhciByPXQuYXJnc1tlXTt0LmFyZ3NbZV09MD09PWU/e25hbWU6cixsdmFsdWU6ITAscnZhbHVlOiEhdC5ydmFsdWUsY291bnQ6dC5jb3VudHx8MX06e25hbWU6cixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9fXJldHVybiB0LnRoaXNWYXJzfHwodC50aGlzVmFycz1bXSksdC5sb2NhbFZhcnN8fCh0LmxvY2FsVmFycz1bXSksdH1mdW5jdGlvbiBpKHQpe3JldHVybiBvKHthcmdzOnQuYXJncyxwcmU6bih0LnByZSksYm9keTpuKHQuYm9keSkscG9zdDpuKHQucHJvYyksZnVuY05hbWU6dC5mdW5jTmFtZX0pfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQuYXJncy5sZW5ndGg7KytyKWUucHVzaCgiYSIrcik7cmV0dXJuIG5ldyBGdW5jdGlvbigiUCIsWyJyZXR1cm4gZnVuY3Rpb24gIix0LmZ1bmNOYW1lLCJfbmRhcnJheW9wcygiLGUuam9pbigiLCIpLCIpIHtQKCIsZS5qb2luKCIsIiksIik7cmV0dXJuIGEwfSJdLmpvaW4oIiIpKShpKHQpKX12YXIgbz10KCJjd2lzZS1jb21waWxlciIpLHM9e2JvZHk6IiIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGw9e2FkZDoiKyIsc3ViOiItIixtdWw6IioiLGRpdjoiLyIsbW9kOiIlIixiYW5kOiImIixib3I6InwiLGJ4b3I6Il4iLGxzaGlmdDoiPDwiLHJzaGlmdDoiPj4iLHJyc2hpZnQ6Ij4+PiJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiBsKXt2YXIgZT1sW3RdO3JbdF09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPWIiK2UrImMifSxmdW5jTmFtZTp0fSksclt0KyJlcSJdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYSIrZSsiPWIifSxydmFsdWU6ITAsZnVuY05hbWU6dCsiZXEifSksclt0KyJzIl09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxib2R5OnthcmdzOlsiYSIsImIiLCJzIl0sYm9keToiYT1iIitlKyJzIn0sZnVuY05hbWU6dCsicyJ9KSxyW3QrInNlcSJdPWEoe2FyZ3M6WyJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwicyJdLGJvZHk6ImEiK2UrIj1zIn0scnZhbHVlOiEwLGZ1bmNOYW1lOnQrInNlcSJ9KX19KCk7dmFyIHU9e25vdDoiISIsYm5vdDoifiIsbmVnOiItIixyZWNpcDoiMS4wLyJ9OyFmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB1KXt2YXIgZT11W3RdO3JbdF09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPSIrZSsiYiJ9LGZ1bmNOYW1lOnR9KSxyW3QrImVxIl09YSh7YXJnczpbImFycmF5Il0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPSIrZSsiYSJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pfX0oKTt2YXIgYz17YW5kOiImJiIsb3I6Inx8IixlcToiPT09IixuZXE6IiE9PSIsbHQ6IjwiLGd0OiI+IixsZXE6Ijw9IixnZXE6Ij49In07IWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIGMpe3ZhciBlPWNbdF07clt0XT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9YiIrZSsiYyJ9LGZ1bmNOYW1lOnR9KSxyW3QrInMiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLGJvZHk6e2FyZ3M6WyJhIiwiYiIsInMiXSxib2R5OiJhPWIiK2UrInMifSxmdW5jTmFtZTp0KyJzIn0pLHJbdCsiZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9YSIrZSsiYiJ9LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOnQrImVxIn0pLHJbdCsic2VxIl09YSh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJzIl0sYm9keToiYT1hIitlKyJzIn0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6dCsic2VxIn0pfX0oKTt2YXIgaD1bImFicyIsImFjb3MiLCJhc2luIiwiYXRhbiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsInJvdW5kIiwic2luIiwic3FydCIsInRhbiJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aC5sZW5ndGg7Kyt0KXt2YXIgZT1oW3RdO3JbZV09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGIpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJlcSJdPWEoe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZihhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSl9fSgpO3ZhciBmPVsibWF4IiwibWluIiwiYXRhbjIiLCJwb3ciXTshZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoOysrdCl7dmFyIGU9Zlt0XTtyW2VdPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5IiwiYXJyYXkiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplfSkscltlKyJzIl09YSh7YXJnczpbImFycmF5IiwiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiIsImMiXSxib2R5OiJhPXRoaXNfZihiLGMpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZTplKyJzIn0pLHJbZSsiZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYSxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsiZXEifSkscltlKyJzZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJzY2FsYXIiXSxwcmU6e2FyZ3M6W10sYm9keToidGhpc19mPU1hdGguIitlLHRoaXNWYXJzOlsidGhpc19mIl19LGJvZHk6e2FyZ3M6WyJhIiwiYiJdLGJvZHk6ImE9dGhpc19mKGEsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LHJ2YWx1ZTohMCxjb3VudDoyLGZ1bmNOYW1lOmUrInNlcSJ9KX19KCk7dmFyIGQ9WyJhdGFuMiIsInBvdyJdOyFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZC5sZW5ndGg7Kyt0KXt2YXIgZT1kW3RdO3JbZSsib3AiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiLCJjIl0sYm9keToiYT10aGlzX2YoYyxiKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sZnVuY05hbWU6ZSsib3AifSkscltlKyJvcHMiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSIsInNjYWxhciJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIiwiYyJdLGJvZHk6ImE9dGhpc19mKGMsYikiLHRoaXNWYXJzOlsidGhpc19mIl19LGZ1bmNOYW1lOmUrIm9wcyJ9KSxyW2UrIm9wZXEiXT1hKHthcmdzOlsiYXJyYXkiLCJhcnJheSJdLHByZTp7YXJnczpbXSxib2R5OiJ0aGlzX2Y9TWF0aC4iK2UsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT10aGlzX2YoYixhKSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0scnZhbHVlOiEwLGNvdW50OjIsZnVuY05hbWU6ZSsib3BlcSJ9KSxyW2UrIm9wc2VxIl09YSh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLiIrZSx0aGlzVmFyczpbInRoaXNfZiJdfSxib2R5OnthcmdzOlsiYSIsImIiXSxib2R5OiJhPXRoaXNfZihiLGEpIix0aGlzVmFyczpbInRoaXNfZiJdfSxydmFsdWU6ITAsY291bnQ6MixmdW5jTmFtZTplKyJvcHNlcSJ9KX19KCksci5hbnk9byh7YXJnczpbImFycmF5Il0scHJlOnMsYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6ImlmKGEpe3JldHVybiB0cnVlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gZmFsc2UifSxmdW5jTmFtZToiYW55In0pLHIuYWxsPW8oe2FyZ3M6WyJhcnJheSJdLHByZTpzLGJvZHk6e2FyZ3M6W3tuYW1lOiJ4IixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJpZigheCl7cmV0dXJuIGZhbHNlfSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOltdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXSxib2R5OiJyZXR1cm4gdHJ1ZSJ9LGZ1bmNOYW1lOiJhbGwifSksci5zdW09byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLGJvZHk6InRoaXNfcys9YSIsbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl19LHBvc3Q6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToicmV0dXJuIHRoaXNfcyJ9LGZ1bmNOYW1lOiJzdW0ifSksci5wcm9kPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MSJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSxib2R5OiJ0aGlzX3MqPWEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToicHJvZCJ9KSxyLm5vcm0yc3F1YXJlZD1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2FyZ3M6W10sbG9jYWxWYXJzOltdLHRoaXNWYXJzOlsidGhpc19zIl0sYm9keToidGhpc19zPTAifSxib2R5OnthcmdzOlt7bmFtZToiYSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sYm9keToidGhpc19zKz1hKmEiLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybTJzcXVhcmVkIn0pLHIubm9ybTI9byh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InRoaXNfcz0wIn0sYm9keTp7YXJnczpbe25hbWU6ImEiLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn1dLGJvZHk6InRoaXNfcys9YSphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gTWF0aC5zcXJ0KHRoaXNfcykifSxmdW5jTmFtZToibm9ybTIifSksci5ub3JtaW5mPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjR9XSxib2R5OiJpZigtYT50aGlzX3Mpe3RoaXNfcz0tYX1lbHNlIGlmKGE+dGhpc19zKXt0aGlzX3M9YX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdfSxwb3N0OnthcmdzOltdLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbInRoaXNfcyJdLGJvZHk6InJldHVybiB0aGlzX3MifSxmdW5jTmFtZToibm9ybWluZiJ9KSxyLm5vcm0xPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJ0aGlzX3M9MCJ9LGJvZHk6e2FyZ3M6W3tuYW1lOiJhIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjN9XSxib2R5OiJ0aGlzX3MrPWE8MD8tYTphIixsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6WyJ0aGlzX3MiXSxib2R5OiJyZXR1cm4gdGhpc19zIn0sZnVuY05hbWU6Im5vcm0xIn0pLHIuc3VwPW8oe2FyZ3M6WyJhcnJheSJdLHByZTp7Ym9keToidGhpc19oPS1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPnRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmluZj1vKHthcmdzOlsiYXJyYXkiXSxwcmU6e2JvZHk6InRoaXNfaD1JbmZpbml0eSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToiaWYoX2lubGluZV8xX2FyZzBfPHRoaXNfaCl0aGlzX2g9X2lubGluZV8xX2FyZzBfIixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX0scG9zdDp7Ym9keToicmV0dXJuIHRoaXNfaCIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaCJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21pbj1vKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PUluZmluaXR5O3RoaXNfaT1faW5saW5lXzBfYXJnMl8uc2xpY2UoMCl9IixhcmdzOlt7bmFtZToiX2lubGluZV8wX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfMF9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntpZihfaW5saW5lXzFfYXJnMV88dGhpc192KXt0aGlzX3Y9X2lubGluZV8xX2FyZzFfO2Zvcih2YXIgX2lubGluZV8xX2s9MDtfaW5saW5lXzFfazxfaW5saW5lXzFfYXJnMF8ubGVuZ3RoOysrX2lubGluZV8xX2spe3RoaXNfaVtfaW5saW5lXzFfa109X2lubGluZV8xX2FyZzBfW19pbmxpbmVfMV9rXX19fSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfSx7bmFtZToiX2lubGluZV8xX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9XSx0aGlzVmFyczpbInRoaXNfaSIsInRoaXNfdiJdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9rIl19LHBvc3Q6e2JvZHk6IntyZXR1cm4gdGhpc19pfSIsYXJnczpbXSx0aGlzVmFyczpbInRoaXNfaSJdLGxvY2FsVmFyczpbXX19KSxyLmFyZ21heD1vKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNoYXBlIl0scHJlOntib2R5OiJ7dGhpc192PS1JbmZpbml0eTt0aGlzX2k9X2lubGluZV8wX2FyZzJfLnNsaWNlKDApfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMF9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV8wX2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzBfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc19pIiwidGhpc192Il0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7aWYoX2lubGluZV8xX2FyZzFfPnRoaXNfdil7dGhpc192PV9pbmxpbmVfMV9hcmcxXztmb3IodmFyIF9pbmxpbmVfMV9rPTA7X2lubGluZV8xX2s8X2lubGluZV8xX2FyZzBfLmxlbmd0aDsrK19pbmxpbmVfMV9rKXt0aGlzX2lbX2lubGluZV8xX2tdPV9pbmxpbmVfMV9hcmcwX1tfaW5saW5lXzFfa119fX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzFfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6Mn0se25hbWU6Il9pbmxpbmVfMV9hcmcxXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoyfV0sdGhpc1ZhcnM6WyJ0aGlzX2kiLCJ0aGlzX3YiXSxsb2NhbFZhcnM6WyJfaW5saW5lXzFfayJdfSxwb3N0Ontib2R5OiJ7cmV0dXJuIHRoaXNfaX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX2kiXSxsb2NhbFZhcnM6W119fSksci5yYW5kb209YSh7YXJnczpbImFycmF5Il0scHJlOnthcmdzOltdLGJvZHk6InRoaXNfZj1NYXRoLnJhbmRvbSIsdGhpc1ZhcnM6WyJ0aGlzX2YiXX0sYm9keTp7YXJnczpbImEiXSxib2R5OiJhPXRoaXNfZigpIix0aGlzVmFyczpbInRoaXNfZiJdfSxmdW5jTmFtZToicmFuZG9tIn0pLHIuYXNzaWduPWEoe2FyZ3M6WyJhcnJheSIsImFycmF5Il0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbiJ9KSxyLmFzc2lnbnM9YSh7YXJnczpbImFycmF5Iiwic2NhbGFyIl0sYm9keTp7YXJnczpbImEiLCJiIl0sYm9keToiYT1iIn0sZnVuY05hbWU6ImFzc2lnbnMifSksci5lcXVhbHM9byh7YXJnczpbImFycmF5IiwiYXJyYXkiXSxwcmU6cyxib2R5OnthcmdzOlt7bmFtZToieCIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToieSIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfV0sYm9keToiaWYoeCE9PXkpe3JldHVybiBmYWxzZX0iLGxvY2FsVmFyczpbXSx0aGlzVmFyczpbXX0scG9zdDp7YXJnczpbXSxsb2NhbFZhcnM6W10sdGhpc1ZhcnM6W10sYm9keToicmV0dXJuIHRydWUifSxmdW5jTmFtZToiZXF1YWxzIn0pfSx7ImN3aXNlLWNvbXBpbGVyIjoxMDh9XSw0NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0NjEsbmRhcnJheTo0NjV9XSw0NjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiY3dpc2UtY29tcGlsZXIiKSh7YXJnczpbImFycmF5Iiwic2NhbGFyIiwiaW5kZXgiXSxwcmU6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie1xudmFyIF9pbmxpbmVfMV92PV9pbmxpbmVfMV9hcmcxXyxfaW5saW5lXzFfaVxuZm9yKF9pbmxpbmVfMV9pPTA7X2lubGluZV8xX2k8X2lubGluZV8xX2FyZzJfLmxlbmd0aC0xOysrX2lubGluZV8xX2kpIHtcbl9pbmxpbmVfMV92PV9pbmxpbmVfMV92W19pbmxpbmVfMV9hcmcyX1tfaW5saW5lXzFfaV1dXG59XG5faW5saW5lXzFfYXJnMF89X2lubGluZV8xX3ZbX2lubGluZV8xX2FyZzJfW19pbmxpbmVfMV9hcmcyXy5sZW5ndGgtMV1dXG59IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDo0fV0sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOlsiX2lubGluZV8xX2kiLCJfaW5saW5lXzFfdiJdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGZ1bmNOYW1lOiJjb252ZXJ0IixibG9ja1NpemU6NjR9KX0seyJjd2lzZS1jb21waWxlciI6MTA4fV0sNDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7c3dpdGNoKHQpe2Nhc2UidWludDgiOnJldHVybltsLm1hbGxvY1VpbnQ4LGwuZnJlZVVpbnQ4XTtjYXNlInVpbnQxNiI6cmV0dXJuW2wubWFsbG9jVWludDE2LGwuZnJlZVVpbnQxNl07Y2FzZSJ1aW50MzIiOnJldHVybltsLm1hbGxvY1VpbnQzMixsLmZyZWVVaW50MzJdO2Nhc2UiaW50OCI6cmV0dXJuW2wubWFsbG9jSW50OCxsLmZyZWVJbnQ4XTtjYXNlImludDE2IjpyZXR1cm5bbC5tYWxsb2NJbnQxNixsLmZyZWVJbnQxNl07Y2FzZSJpbnQzMiI6cmV0dXJuW2wubWFsbG9jSW50MzIsbC5mcmVlSW50MzJdO2Nhc2UiZmxvYXQzMiI6cmV0dXJuW2wubWFsbG9jRmxvYXQsbC5mcmVlRmxvYXRdO2Nhc2UiZmxvYXQ2NCI6cmV0dXJuW2wubWFsbG9jRG91YmxlLGwuZnJlZURvdWJsZV07ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9W10scj0wO3I8dDsrK3IpZS5wdXNoKCJzIityKTtmb3IodmFyIHI9MDtyPHQ7KytyKWUucHVzaCgibiIrcik7Zm9yKHZhciByPTE7cjx0OysrcillLnB1c2goImQiK3IpO2Zvcih2YXIgcj0xO3I8dDsrK3IpZS5wdXNoKCJlIityKTtmb3IodmFyIHI9MTtyPHQ7KytyKWUucHVzaCgiZiIrcik7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBhKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX12YXIgbz1bIid1c2Ugc3RyaWN0JyJdLHM9WyJuZGFycmF5SW5zZXJ0aW9uU29ydCIsdC5qb2luKCJkIiksZV0uam9pbigiIiksbD1bImxlZnQiLCJyaWdodCIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQoaSh0Lmxlbmd0aCkpLHU9bihlKSxjPVsiaSxqLGNwdHIscHRyPWxlZnQqczArb2Zmc2V0Il07aWYodC5sZW5ndGg+MSl7Zm9yKHZhciBoPVtdLGY9MTtmPHQubGVuZ3RoOysrZiljLnB1c2goImkiK2YpLGgucHVzaCgibiIrZik7dT9jLnB1c2goInNjcmF0Y2g9bWFsbG9jKCIraC5qb2luKCIqIikrIikiKTpjLnB1c2goInNjcmF0Y2g9bmV3IEFycmF5KCIraC5qb2luKCIqIikrIikiKSxjLnB1c2goImRwdHIiLCJzcHRyIiwiYSIsImIiKX1lbHNlIGMucHVzaCgic2NyYXRjaCIpO2lmKG8ucHVzaChbImZ1bmN0aW9uICIscywiKCIsbC5qb2luKCIsIiksIil7dmFyICIsYy5qb2luKCIsIildLmpvaW4oIiIpLCJmb3IoaT1sZWZ0KzE7aTw9cmlnaHQ7KytpKXsiLCJqPWk7cHRyKz1zMCIsImNwdHI9cHRyIiksdC5sZW5ndGg+MSl7by5wdXNoKCJkcHRyPTA7c3B0cj1wdHIiKTtmb3IodmFyIGY9dC5sZW5ndGgtMTtmPj0wOy0tZil7dmFyIGQ9dFtmXTswIT09ZCYmby5wdXNoKFsiZm9yKGkiLGQsIj0wO2kiLGQsIjxuIixkLCI7KytpIixkLCIpeyJdLmpvaW4oIiIpKX1vLnB1c2goInNjcmF0Y2hbZHB0cisrXT0iLHIoInNwdHIiKSk7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDsrK2Ype3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaCgic3B0cis9ZCIrZCwifSIpfW8ucHVzaCgiX19nOndoaWxlKGotLVx4M2VsZWZ0KXsiLCJkcHRyPTAiLCJzcHRyPWNwdHItczAiKTtmb3IodmFyIGY9MTtmPHQubGVuZ3RoOysrZikxPT09ZiYmby5wdXNoKCJfX2w6Iiksby5wdXNoKFsiZm9yKGkiLGYsIj0wO2kiLGYsIjxuIixmLCI7KytpIixmLCIpeyJdLmpvaW4oIiIpKTtvLnB1c2goWyJhPSIscigic3B0ciIpLCJcbmI9c2NyYXRjaFtkcHRyXVxuaWYoYTxiKXticmVhayBfX2d9XG5pZihhPmIpe2JyZWFrIF9fbH0iXS5qb2luKCIiKSk7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MTstLWYpby5wdXNoKCJzcHRyKz1lIitmLCJkcHRyKz1mIitmLCJ9Iik7by5wdXNoKCJkcHRyPWNwdHI7c3B0cj1jcHRyLXMwIik7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaChbImZvcihpIixkLCI9MDtpIixkLCI8biIsZCwiOysraSIsZCwiKXsiXS5qb2luKCIiKSl9by5wdXNoKGEoImRwdHIiLHIoInNwdHIiKSkpO2Zvcih2YXIgZj0wO2Y8dC5sZW5ndGg7KytmKXt2YXIgZD10W2ZdOzAhPT1kJiZvLnB1c2goWyJkcHRyKz1kIixkLCI7c3B0cis9ZCIsZF0uam9pbigiIiksIn0iKX1vLnB1c2goImNwdHItPXMwXG59Iiksby5wdXNoKCJkcHRyPWNwdHI7c3B0cj0wIik7Zm9yKHZhciBmPXQubGVuZ3RoLTE7Zj49MDstLWYpe3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaChbImZvcihpIixkLCI9MDtpIixkLCI8biIsZCwiOysraSIsZCwiKXsiXS5qb2luKCIiKSl9by5wdXNoKGEoImRwdHIiLCJzY3JhdGNoW3NwdHIrK10iKSk7Zm9yKHZhciBmPTA7Zjx0Lmxlbmd0aDsrK2Ype3ZhciBkPXRbZl07MCE9PWQmJm8ucHVzaCgiZHB0cis9ZCIrZCwifSIpfX1lbHNlIG8ucHVzaCgic2NyYXRjaD0iK3IoInB0ciIpLCJ3aGlsZSgoai0tXHgzZWxlZnQpJiYoIityKCJjcHRyLXMwIikrIj5zY3JhdGNoKSl7IixhKCJjcHRyIixyKCJjcHRyLXMwIikpLCJjcHRyLT1zMCIsIn0iLGEoImNwdHIiLCJzY3JhdGNoIikpO2lmKG8ucHVzaCgifSIpLHQubGVuZ3RoPjEmJnUmJm8ucHVzaCgiZnJlZShzY3JhdGNoKSIpLG8ucHVzaCgifSByZXR1cm4gIitzKSx1KXt2YXIgcD1uZXcgRnVuY3Rpb24oIm1hbGxvYyIsImZyZWUiLG8uam9pbigiXG4iKSk7cmV0dXJuIHAodVswXSx1WzFdKX12YXIgcD1uZXcgRnVuY3Rpb24oby5qb2luKCJcbiIpKTtyZXR1cm4gcCgpfWZ1bmN0aW9uIG8odCxlLHIpe2Z1bmN0aW9uIGEodCl7cmV0dXJuWyIob2Zmc2V0KyIsdCwiKnMwKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIG8odCl7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuZ2V0KCIsdCwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl0iXS5qb2luKCIiKX1mdW5jdGlvbiBzKHQscil7cmV0dXJuImdlbmVyaWMiPT09ZT9bImRhdGEuc2V0KCIsdCwiLCIsciwiKSJdLmpvaW4oIiIpOlsiZGF0YVsiLHQsIl09IixyXS5qb2luKCIiKX1mdW5jdGlvbiBsKGUscixuKXtpZigxPT09ZS5sZW5ndGgpXy5wdXNoKCJwdHIwPSIrYShlWzBdKSk7ZWxzZSBmb3IodmFyIGk9MDtpPGUubGVuZ3RoOysraSlfLnB1c2goWyJiX3B0ciIsaSwiPXMwKiIsZVtpXV0uam9pbigiIikpO3ImJl8ucHVzaCgicGl2b3RfcHRyPTAiKSxfLnB1c2goInB0cl9zaGlmdD1vZmZzZXQiKTtmb3IodmFyIGk9dC5sZW5ndGgtMTtpPj0wOy0taSl7dmFyIG89dFtpXTswIT09byYmXy5wdXNoKFsiZm9yKGkiLG8sIj0wO2kiLG8sIjxuIixvLCI7KytpIixvLCIpeyJdLmpvaW4oIiIpKX1pZihlLmxlbmd0aD4xKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKV8ucHVzaChbInB0ciIsaSwiPWJfcHRyIixpLCIrcHRyX3NoaWZ0Il0uam9pbigiIikpO18ucHVzaChuKSxyJiZfLnB1c2goIisrcGl2b3RfcHRyIik7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDsrK2kpe3ZhciBvPXRbaV07MCE9PW8mJihlLmxlbmd0aD4xP18ucHVzaCgicHRyX3NoaWZ0Kz1kIitvKTpfLnB1c2goInB0cjArPWQiK28pLF8ucHVzaCgifSIpKX19ZnVuY3Rpb24gYyhlLHIsbixpKXtpZigxPT09ci5sZW5ndGgpXy5wdXNoKCJwdHIwPSIrYShyWzBdKSk7ZWxzZXtmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbylfLnB1c2goWyJiX3B0ciIsbywiPXMwKiIscltvXV0uam9pbigiIikpO18ucHVzaCgicHRyX3NoaWZ0PW9mZnNldCIpfW4mJl8ucHVzaCgicGl2b3RfcHRyPTAiKSxlJiZfLnB1c2goZSsiOiIpO2Zvcih2YXIgbz0xO288dC5sZW5ndGg7KytvKV8ucHVzaChbImZvcihpIixvLCI9MDtpIixvLCI8biIsbywiOysraSIsbywiKXsiXS5qb2luKCIiKSk7aWYoci5sZW5ndGg+MSlmb3IodmFyIG89MDtvPHIubGVuZ3RoOysrbylfLnB1c2goWyJwdHIiLG8sIj1iX3B0ciIsbywiK3B0cl9zaGlmdCJdLmpvaW4oIiIpKTtfLnB1c2goaSk7Zm9yKHZhciBvPXQubGVuZ3RoLTE7bz49MTstLW8pbiYmXy5wdXNoKCJwaXZvdF9wdHIrPWYiK28pLHIubGVuZ3RoPjE/Xy5wdXNoKCJwdHJfc2hpZnQrPWUiK28pOl8ucHVzaCgicHRyMCs9ZSIrbyksXy5wdXNoKCJ9Iil9ZnVuY3Rpb24gaCgpe3QubGVuZ3RoPjEmJmsmJl8ucHVzaCgiZnJlZShwaXZvdDEpIiwiZnJlZShwaXZvdDIpIil9ZnVuY3Rpb24gZihlLHIpe3ZhciBuPSJlbCIrZSxpPSJlbCIrcjtpZih0Lmxlbmd0aD4xKXt2YXIgcz0iX19sIisgKytBO2MocyxbbixpXSwhMSxbImNvbXA9IixvKCJwdHIwIiksIi0iLG8oInB0cjEiKSwiXG4iLCJpZihjb21wPjApe3RtcDA9IixuLCI7IixuLCI9IixpLCI7IixpLCI9dG1wMDticmVhayAiLHMsIn1cbiIsImlmKGNvbXA8MCl7YnJlYWsgIixzLCJ9Il0uam9pbigiIikpfWVsc2UgXy5wdXNoKFsiaWYoIixvKGEobikpLCI+IixvKGEoaSkpLCIpe3RtcDA9IixuLCI7IixuLCI9IixpLCI7IixpLCI9dG1wMH0iXS5qb2luKCIiKSl9ZnVuY3Rpb24gZChlLHIpe3QubGVuZ3RoPjE/bChbZSxyXSwhMSxzKCJwdHIwIixvKCJwdHIxIikpKTpfLnB1c2gocyhhKGUpLG8oYShyKSkpKX1mdW5jdGlvbiBwKGUscixuKXtpZih0Lmxlbmd0aD4xKXt2YXIgaT0iX19sIisgKytBO2MoaSxbcl0sITAsW2UsIj0iLG8oInB0cjAiKSwiLXBpdm90IixuLCJbcGl2b3RfcHRyXVxuIiwiaWYoIixlLCIhPT0wKXticmVhayAiLGksIn0iXS5qb2luKCIiKSl9ZWxzZSBfLnB1c2goW2UsIj0iLG8oYShyKSksIi1waXZvdCIsbl0uam9pbigiIikpfWZ1bmN0aW9uIG0oZSxyKXt0Lmxlbmd0aD4xP2woW2Uscl0sITEsWyJ0bXA9IixvKCJwdHIwIiksIlxuIixzKCJwdHIwIixvKCJwdHIxIikpLCJcbiIscygicHRyMSIsInRtcCIpXS5qb2luKCIiKSk6Xy5wdXNoKFsicHRyMD0iLGEoZSksIlxuIiwicHRyMT0iLGEociksIlxuIiwidG1wPSIsbygicHRyMCIpLCJcbiIscygicHRyMCIsbygicHRyMSIpKSwiXG4iLHMoInB0cjEiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIHYoZSxyLG4pe3QubGVuZ3RoPjE/KGwoW2UscixuXSwhMSxbInRtcD0iLG8oInB0cjAiKSwiXG4iLHMoInB0cjAiLG8oInB0cjEiKSksIlxuIixzKCJwdHIxIixvKCJwdHIyIikpLCJcbiIscygicHRyMiIsInRtcCIpXS5qb2luKCIiKSksXy5wdXNoKCIrKyIrciwiLS0iK24pKTpfLnB1c2goWyJwdHIwPSIsYShlKSwiXG4iLCJwdHIxPSIsYShyKSwiXG4iLCJwdHIyPSIsYShuKSwiXG4iLCIrKyIsciwiXG4iLCItLSIsbiwiXG4iLCJ0bXA9IixvKCJwdHIwIiksIlxuIixzKCJwdHIwIixvKCJwdHIxIikpLCJcbiIscygicHRyMSIsbygicHRyMiIpKSwiXG4iLHMoInB0cjIiLCJ0bXAiKV0uam9pbigiIikpfWZ1bmN0aW9uIGcodCxlKXttKHQsZSksXy5wdXNoKCItLSIrZSl9ZnVuY3Rpb24geShlLHIsbil7dC5sZW5ndGg+MT9sKFtlLHJdLCEwLFtzKCJwdHIwIixvKCJwdHIxIikpLCJcbiIscygicHRyMSIsWyJwaXZvdCIsbiwiW3Bpdm90X3B0cl0iXS5qb2luKCIiKSldLmpvaW4oIiIpKTpfLnB1c2gocyhhKGUpLG8oYShyKSkpLHMoYShyKSwicGl2b3QiK24pKX1mdW5jdGlvbiBiKGUscil7Xy5wdXNoKFsiaWYoKCIsciwiLSIsZSwiKTw9Iix1LCIpe1xuIiwiaW5zZXJ0aW9uU29ydCgiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLGkodC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifWVsc2V7XG4iLHcsIigiLGUsIiwiLHIsIixkYXRhLG9mZnNldCwiLGkodC5sZW5ndGgpLmpvaW4oIiwiKSwiKVxuIiwifSJdLmpvaW4oIiIpKX1mdW5jdGlvbiB4KGUscixuKXt0Lmxlbmd0aD4xPyhfLnB1c2goWyJfX2wiLCsrQSwiOndoaWxlKHRydWUpeyJdLmpvaW4oIiIpKSxsKFtlXSwhMCxbImlmKCIsbygicHRyMCIpLCIhPT1waXZvdCIsciwiW3Bpdm90X3B0cl0pe2JyZWFrIF9fbCIsQSwifSJdLmpvaW4oIiIpKSxfLnB1c2gobiwifSIpKTpfLnB1c2goWyJ3aGlsZSgiLG8oYShlKSksIj09PXBpdm90IixyLCIpeyIsbiwifSJdLmpvaW4oIiIpKX12YXIgXz1bIid1c2Ugc3RyaWN0JyJdLHc9WyJuZGFycmF5UXVpY2tTb3J0Iix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxNPVsibGVmdCIsInJpZ2h0IiwiZGF0YSIsIm9mZnNldCJdLmNvbmNhdChpKHQubGVuZ3RoKSksaz1uKGUpLEE9MDtfLnB1c2goWyJmdW5jdGlvbiAiLHcsIigiLE0uam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTt2YXIgVD1bInNpeHRoPSgocmlnaHQtbGVmdCsxKS82KXwwIiwiaW5kZXgxPWxlZnQrc2l4dGgiLCJpbmRleDU9cmlnaHQtc2l4dGgiLCJpbmRleDM9KGxlZnQrcmlnaHQpPj4xIiwiaW5kZXgyPWluZGV4My1zaXh0aCIsImluZGV4ND1pbmRleDMrc2l4dGgiLCJlbDE9aW5kZXgxIiwiZWwyPWluZGV4MiIsImVsMz1pbmRleDMiLCJlbDQ9aW5kZXg0IiwiZWw1PWluZGV4NSIsImxlc3M9bGVmdCsxIiwiZ3JlYXQ9cmlnaHQtMSIsInBpdm90c19hcmVfZXF1YWw9dHJ1ZSIsInRtcCIsInRtcDAiLCJ4IiwieSIsInoiLCJrIiwicHRyMCIsInB0cjEiLCJwdHIyIiwiY29tcF9waXZvdDE9MCIsImNvbXBfcGl2b3QyPTAiLCJjb21wPTAiXTtpZih0Lmxlbmd0aD4xKXtmb3IodmFyIFM9W10sRT0xO0U8dC5sZW5ndGg7KytFKVMucHVzaCgibiIrRSksVC5wdXNoKCJpIitFKTtmb3IodmFyIEU9MDtFPDg7KytFKVQucHVzaCgiYl9wdHIiK0UpO1QucHVzaCgicHRyMyIsInB0cjQiLCJwdHI1IiwicHRyNiIsInB0cjciLCJwaXZvdF9wdHIiLCJwdHJfc2hpZnQiLCJlbGVtZW50U2l6ZT0iK1Muam9pbigiKiIpKSxrP1QucHVzaCgicGl2b3QxPW1hbGxvYyhlbGVtZW50U2l6ZSkiLCJwaXZvdDI9bWFsbG9jKGVsZW1lbnRTaXplKSIpOlQucHVzaCgicGl2b3QxPW5ldyBBcnJheShlbGVtZW50U2l6ZSkscGl2b3QyPW5ldyBBcnJheShlbGVtZW50U2l6ZSkiKX1lbHNlIFQucHVzaCgicGl2b3QxIiwicGl2b3QyIik7aWYoXy5wdXNoKCJ2YXIgIitULmpvaW4oIiwiKSksZigxLDIpLGYoNCw1KSxmKDEsMyksZigyLDMpLGYoMSw0KSxmKDMsNCksZigyLDUpLGYoMiwzKSxmKDQsNSksdC5sZW5ndGg+MT9sKFsiZWwxIiwiZWwyIiwiZWwzIiwiZWw0IiwiZWw1IiwiaW5kZXgxIiwiaW5kZXgzIiwiaW5kZXg1Il0sITAsWyJwaXZvdDFbcGl2b3RfcHRyXT0iLG8oInB0cjEiKSwiXG4iLCJwaXZvdDJbcGl2b3RfcHRyXT0iLG8oInB0cjMiKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90c19hcmVfZXF1YWwmJihwaXZvdDFbcGl2b3RfcHRyXT09PXBpdm90MltwaXZvdF9wdHJdKVxuIiwieD0iLG8oInB0cjAiKSwiXG4iLCJ5PSIsbygicHRyMiIpLCJcbiIsIno9IixvKCJwdHI0IiksIlxuIixzKCJwdHI1IiwieCIpLCJcbiIscygicHRyNiIsInkiKSwiXG4iLHMoInB0cjciLCJ6IildLmpvaW4oIiIpKTpfLnB1c2goWyJwaXZvdDE9IixvKGEoImVsMiIpKSwiXG4iLCJwaXZvdDI9IixvKGEoImVsNCIpKSwiXG4iLCJwaXZvdHNfYXJlX2VxdWFsPXBpdm90MT09PXBpdm90MlxuIiwieD0iLG8oYSgiZWwxIikpLCJcbiIsInk9IixvKGEoImVsMyIpKSwiXG4iLCJ6PSIsbyhhKCJlbDUiKSksIlxuIixzKGEoImluZGV4MSIpLCJ4IiksIlxuIixzKGEoImluZGV4MyIpLCJ5IiksIlxuIixzKGEoImluZGV4NSIpLCJ6IildLmpvaW4oIiIpKSxkKCJpbmRleDIiLCJsZWZ0IiksZCgiaW5kZXg0IiwicmlnaHQiKSxfLnB1c2goImlmKHBpdm90c19hcmVfZXF1YWwpeyIpLF8ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHAoImNvbXAiLCJrIiwxKSxfLnB1c2goImlmKGNvbXA9PT0wKXtjb250aW51ZX0iKSxfLnB1c2goImlmKGNvbXA8MCl7IiksXy5wdXNoKCJpZihrIT09bGVzcyl7IiksbSgiayIsImxlc3MiKSxfLnB1c2goIn0iKSxfLnB1c2goIisrbGVzcyIpLF8ucHVzaCgifWVsc2V7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxwKCJjb21wIiwiZ3JlYXQiLDEpLF8ucHVzaCgiaWYoY29tcD4wKXsiKSxfLnB1c2goImdyZWF0LS0iKSxfLnB1c2goIn1lbHNlIGlmKGNvbXA8MCl7IiksdigiayIsImxlc3MiLCJncmVhdCIpLF8ucHVzaCgiYnJlYWsiKSxfLnB1c2goIn1lbHNleyIpLGcoImsiLCJncmVhdCIpLF8ucHVzaCgiYnJlYWsiKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn0iKSxfLnB1c2goIn1lbHNleyIpLF8ucHVzaCgiZm9yKGs9bGVzcztrPD1ncmVhdDsrK2speyIpLHAoImNvbXBfcGl2b3QxIiwiayIsMSksXy5wdXNoKCJpZihjb21wX3Bpdm90MTwwKXsiKSxfLnB1c2goImlmKGshPT1sZXNzKXsiKSxtKCJrIiwibGVzcyIpLF8ucHVzaCgifSIpLF8ucHVzaCgiKytsZXNzIiksXy5wdXNoKCJ9ZWxzZXsiKSxwKCJjb21wX3Bpdm90MiIsImsiLDIpLF8ucHVzaCgiaWYoY29tcF9waXZvdDI+MCl7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxwKCJjb21wIiwiZ3JlYXQiLDIpLF8ucHVzaCgiaWYoY29tcD4wKXsiKSxfLnB1c2goImlmKC0tZ3JlYXQ8ayl7YnJlYWt9IiksXy5wdXNoKCJjb250aW51ZSIpLF8ucHVzaCgifWVsc2V7IikscCgiY29tcCIsImdyZWF0IiwxKSxfLnB1c2goImlmKGNvbXA8MCl7IiksdigiayIsImxlc3MiLCJncmVhdCIpLF8ucHVzaCgifWVsc2V7IiksZygiayIsImdyZWF0IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJicmVhayIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLF8ucHVzaCgifSIpLHkoImxlZnQiLCIobGVzcy0xKSIsMSkseSgicmlnaHQiLCIoZ3JlYXQrMSkiLDIpLGIoImxlZnQiLCIobGVzcy0yKSIpLGIoIihncmVhdCsyKSIsInJpZ2h0IiksXy5wdXNoKCJpZihwaXZvdHNfYXJlX2VxdWFsKXsiKSxoKCksXy5wdXNoKCJyZXR1cm4iKSxfLnB1c2goIn0iKSxfLnB1c2goImlmKGxlc3M8aW5kZXgxJiZncmVhdD5pbmRleDUpeyIpLHgoImxlc3MiLDEsIisrbGVzcyIpLHgoImdyZWF0IiwyLCItLWdyZWF0IiksXy5wdXNoKCJmb3Ioaz1sZXNzO2s8PWdyZWF0Oysrayl7IikscCgiY29tcF9waXZvdDEiLCJrIiwxKSxfLnB1c2goImlmKGNvbXBfcGl2b3QxPT09MCl7IiksXy5wdXNoKCJpZihrIT09bGVzcyl7IiksbSgiayIsImxlc3MiKSxfLnB1c2goIn0iKSxfLnB1c2goIisrbGVzcyIpLF8ucHVzaCgifWVsc2V7IikscCgiY29tcF9waXZvdDIiLCJrIiwyKSxfLnB1c2goImlmKGNvbXBfcGl2b3QyPT09MCl7IiksXy5wdXNoKCJ3aGlsZSh0cnVlKXsiKSxwKCJjb21wIiwiZ3JlYXQiLDIpLF8ucHVzaCgiaWYoY29tcD09PTApeyIpLF8ucHVzaCgiaWYoLS1ncmVhdDxrKXticmVha30iKSxfLnB1c2goImNvbnRpbnVlIiksXy5wdXNoKCJ9ZWxzZXsiKSxwKCJjb21wIiwiZ3JlYXQiLDEpLF8ucHVzaCgiaWYoY29tcDwwKXsiKSx2KCJrIiwibGVzcyIsImdyZWF0IiksXy5wdXNoKCJ9ZWxzZXsiKSxnKCJrIiwiZ3JlYXQiKSxfLnB1c2goIn0iKSxfLnB1c2goImJyZWFrIiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksXy5wdXNoKCJ9IiksaCgpLGIoImxlc3MiLCJncmVhdCIpLF8ucHVzaCgifXJldHVybiAiK3cpLHQubGVuZ3RoPjEmJmspe3ZhciBMPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsIm1hbGxvYyIsImZyZWUiLF8uam9pbigiXG4iKSk7cmV0dXJuIEwocixrWzBdLGtbMV0pfXZhciBMPW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsXy5qb2luKCJcbiIpKTtyZXR1cm4gTChyKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9WyIndXNlIHN0cmljdCciXSxuPVsibmRhcnJheVNvcnRXcmFwcGVyIix0LmpvaW4oImQiKSxlXS5qb2luKCIiKSxzPVsiYXJyYXkiXTtyLnB1c2goWyJmdW5jdGlvbiAiLG4sIigiLHMuam9pbigiLCIpLCIpeyJdLmpvaW4oIiIpKTtmb3IodmFyIGw9WyJkYXRhPWFycmF5LmRhdGEsb2Zmc2V0PWFycmF5Lm9mZnNldHwwLHNoYXBlPWFycmF5LnNoYXBlLHN0cmlkZT1hcnJheS5zdHJpZGUiXSxjPTA7Yzx0Lmxlbmd0aDsrK2MpbC5wdXNoKFsicyIsYywiPXN0cmlkZVsiLGMsIl18MCxuIixjLCI9c2hhcGVbIixjLCJdfDAiXS5qb2luKCIiKSk7Zm9yKHZhciBoPW5ldyBBcnJheSh0Lmxlbmd0aCksZj1bXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mpe3ZhciBkPXRbY107MCE9PWQmJigwPT09Zi5sZW5ndGg/aFtkXT0iMSI6aFtkXT1mLmpvaW4oIioiKSxmLnB1c2goIm4iK2QpKX1mb3IodmFyIHA9LTEsbT0tMSxjPTA7Yzx0Lmxlbmd0aDsrK2Mpe3ZhciB2PXRbY107MCE9PXYmJihwPjA/bC5wdXNoKFsiZCIsdiwiPXMiLHYsIi1kIixwLCIqbiIscF0uam9pbigiIikpOmwucHVzaChbImQiLHYsIj1zIix2XS5qb2luKCIiKSkscD12KTt2YXIgZD10Lmxlbmd0aC0xLWM7MCE9PWQmJihtPjA/bC5wdXNoKFsiZSIsZCwiPXMiLGQsIi1lIixtLCIqbiIsbSwiLGYiLGQsIj0iLGhbZF0sIi1mIixtLCIqbiIsbV0uam9pbigiIikpOmwucHVzaChbImUiLGQsIj1zIixkLCIsZiIsZCwiPSIsaFtkXV0uam9pbigiIikpLG09ZCl9ci5wdXNoKCJ2YXIgIitsLmpvaW4oIiwiKSk7dmFyIGc9WyIwIiwibjAtMSIsImRhdGEiLCJvZmZzZXQiXS5jb25jYXQoaSh0Lmxlbmd0aCkpO3IucHVzaChbImlmKG4wPD0iLHUsIil7IiwiaW5zZXJ0aW9uU29ydCgiLGcuam9pbigiLCIpLCIpfWVsc2V7IiwicXVpY2tTb3J0KCIsZy5qb2luKCIsIiksIil9Il0uam9pbigiIikpLHIucHVzaCgifXJldHVybiAiK24pO3ZhciB5PW5ldyBGdW5jdGlvbigiaW5zZXJ0aW9uU29ydCIsInF1aWNrU29ydCIsci5qb2luKCJcbiIpKSxiPWEodCxlKTtyZXR1cm4geShiLG8odCxlLGIpKX12YXIgbD10KCJ0eXBlZGFycmF5LXBvb2wiKSx1PTMyO2UuZXhwb3J0cz1zfSx7InR5cGVkYXJyYXktcG9vbCI6NTM5fV0sNDYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5vcmRlcixyPXQuZHR5cGUsbj1bZSxyXSxvPW4uam9pbigiOiIpLHM9YVtvXTtyZXR1cm4gc3x8KGFbb109cz1pKGUscikpLHModCksdH12YXIgaT10KCIuL2xpYi9jb21waWxlX3NvcnQuanMiKSxhPXt9O2UuZXhwb3J0cz1ufSx7Ii4vbGliL2NvbXBpbGVfc29ydC5qcyI6NDYyfV0sNDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIiksaT10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPW5ldyBBcnJheShfaW5saW5lXzlfYXJnNF8pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfOV9hcmcwXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV85X2FyZzFfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9LHtuYW1lOiJfaW5saW5lXzlfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITEsY291bnQ6MH0se25hbWU6Il9pbmxpbmVfOV9hcmczXyIsbHZhbHVlOiExLHJ2YWx1ZTohMSxjb3VudDowfSx7bmFtZToiX2lubGluZV85X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxib2R5Ontib2R5OiJ7X2lubGluZV8xMF9hcmcyXyh0aGlzX3dhcnBlZCxfaW5saW5lXzEwX2FyZzBfKSxfaW5saW5lXzEwX2FyZzFfPV9pbmxpbmVfMTBfYXJnM18uYXBwbHkodm9pZCAwLHRoaXNfd2FycGVkKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzEwX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEwX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiExLGNvdW50OjB9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwTkQiLGJsb2NrU2l6ZTo2NH0pLGE9dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzEzX2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTNfYXJnMF8pLF9pbmxpbmVfMTNfYXJnMV89X2lubGluZV8xM19hcmczXyhfaW5saW5lXzEzX2FyZzRfLHRoaXNfd2FycGVkWzBdKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzEzX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzEzX2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwMUQiLGJsb2NrU2l6ZTo2NH0pLG89dCgiY3dpc2UvbGliL3dyYXBwZXIiKSh7YXJnczpbImluZGV4IiwiYXJyYXkiLCJzY2FsYXIiLCJzY2FsYXIiLCJzY2FsYXIiXSxwcmU6e2JvZHk6Int0aGlzX3dhcnBlZD1bMCwwXX0iLGFyZ3M6W10sdGhpc1ZhcnM6WyJ0aGlzX3dhcnBlZCJdLGxvY2FsVmFyczpbXX0sYm9keTp7Ym9keToie19pbmxpbmVfMTZfYXJnMl8odGhpc193YXJwZWQsX2lubGluZV8xNl9hcmcwXyksX2lubGluZV8xNl9hcmcxXz1faW5saW5lXzE2X2FyZzNfKF9pbmxpbmVfMTZfYXJnNF8sdGhpc193YXJwZWRbMF0sdGhpc193YXJwZWRbMV0pfSIsYXJnczpbe25hbWU6Il9pbmxpbmVfMTZfYXJnMF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMV8iLGx2YWx1ZTohMCxydmFsdWU6ITEsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnMl8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnM18iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMTZfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LHBvc3Q6e2JvZHk6Int9IixhcmdzOltdLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbXX0sZGVidWc6ITEsZnVuY05hbWU6IndhcnAyRCIsYmxvY2tTaXplOjY0fSkscz10KCJjd2lzZS9saWIvd3JhcHBlciIpKHthcmdzOlsiaW5kZXgiLCJhcnJheSIsInNjYWxhciIsInNjYWxhciIsInNjYWxhciJdLHByZTp7Ym9keToie3RoaXNfd2FycGVkPVswLDAsMF19IixhcmdzOltdLHRoaXNWYXJzOlsidGhpc193YXJwZWQiXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntfaW5saW5lXzE5X2FyZzJfKHRoaXNfd2FycGVkLF9pbmxpbmVfMTlfYXJnMF8pLF9pbmxpbmVfMTlfYXJnMV89X2lubGluZV8xOV9hcmczXyhfaW5saW5lXzE5X2FyZzRfLHRoaXNfd2FycGVkWzBdLHRoaXNfd2FycGVkWzFdLHRoaXNfd2FycGVkWzJdKX0iLGFyZ3M6W3tuYW1lOiJfaW5saW5lXzE5X2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzFfIixsdmFsdWU6ITAscnZhbHVlOiExLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzJfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzE5X2FyZzRfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9XSx0aGlzVmFyczpbInRoaXNfd2FycGVkIl0sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGRlYnVnOiExLGZ1bmNOYW1lOiJ3YXJwM0QiLGJsb2NrU2l6ZTo2NH0pO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7c3dpdGNoKGUuc2hhcGUubGVuZ3RoKXtjYXNlIDE6YSh0LHIsbi5kMSxlKTticmVhaztjYXNlIDI6byh0LHIsbi5kMixlKTticmVhaztjYXNlIDM6cyh0LHIsbi5kMyxlKTticmVhaztkZWZhdWx0OmkodCxyLG4uYmluZCh2b2lkIDAsZSksZS5zaGFwZS5sZW5ndGgpfXJldHVybiB0fX0seyJjd2lzZS9saWIvd3JhcHBlciI6MTExLCJuZGFycmF5LWxpbmVhci1pbnRlcnBvbGF0ZSI6NDU4fV0sNDY1OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gaSgpe3ZhciB0LGU9dGhpcy5zdHJpZGUscj1uZXcgQXJyYXkoZS5sZW5ndGgpO2Zvcih0PTA7dDxyLmxlbmd0aDsrK3Qpclt0XT1bTWF0aC5hYnMoZVt0XSksdF07ci5zb3J0KG4pO3ZhciBpPW5ldyBBcnJheShyLmxlbmd0aCk7Zm9yKHQ9MDt0PGkubGVuZ3RoOysrdClpW3RdPXJbdF1bMV07cmV0dXJuIGl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPVsiVmlldyIsZSwiZCIsdF0uam9pbigiIik7ZTwwJiYocj0iVmlld19OaWwiK3QpO3ZhciBuPSJnZW5lcmljIj09PXQ7aWYoLTE9PT1lKXt2YXIgYT0iZnVuY3Rpb24gIityKyIoYSl7dGhpcy5kYXRhPWE7fTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gLTF9O3Byb3RvLnNpemU9MDtwcm90by5kaW1lbnNpb249LTE7cHJvdG8uc2hhcGU9cHJvdG8uc3RyaWRlPXByb3RvLm9yZGVyPVtdO3Byb3RvLmxvPXByb3RvLmhpPXByb3RvLnRyYW5zcG9zZT1wcm90by5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEpO307cHJvdG8uZ2V0PXByb3RvLnNldD1mdW5jdGlvbigpe307cHJvdG8ucGljaz1mdW5jdGlvbigpe3JldHVybiBudWxsfTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0XyIrcisiKGEpe3JldHVybiBuZXcgIityKyIoYSk7fSIsbz1uZXcgRnVuY3Rpb24oYSk7cmV0dXJuIG8oKX1pZigwPT09ZSl7dmFyIGE9ImZ1bmN0aW9uICIrcisiKGEsZCkge3RoaXMuZGF0YSA9IGE7dGhpcy5vZmZzZXQgPSBkfTt2YXIgcHJvdG89IityKyIucHJvdG90eXBlO3Byb3RvLmR0eXBlPSciK3QrIic7cHJvdG8uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9O3Byb3RvLmRpbWVuc2lvbj0wO3Byb3RvLnNpemU9MTtwcm90by5zaGFwZT1wcm90by5zdHJpZGU9cHJvdG8ub3JkZXI9W107cHJvdG8ubG89cHJvdG8uaGk9cHJvdG8udHJhbnNwb3NlPXByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfY29weSgpIHtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSx0aGlzLm9mZnNldCl9O3Byb3RvLnBpY2s9ZnVuY3Rpb24gIityKyJfcGljaygpe3JldHVybiBUcml2aWFsQXJyYXkodGhpcy5kYXRhKTt9O3Byb3RvLnZhbHVlT2Y9cHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgpe3JldHVybiAiKyhuPyJ0aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KSI6InRoaXMuZGF0YVt0aGlzLm9mZnNldF0iKSsifTtwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KHYpe3JldHVybiAiKyhuPyJ0aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0LHYpIjoidGhpcy5kYXRhW3RoaXMub2Zmc2V0XT12IikrIn07cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihhLGIsYyxkKXtyZXR1cm4gbmV3ICIrcisiKGEsZCl9IixvPW5ldyBGdW5jdGlvbigiVHJpdmlhbEFycmF5IixhKTtyZXR1cm4gbyhoW3RdWzBdKX12YXIgYT1bIid1c2Ugc3RyaWN0JyJdLHM9bChlKSx1PXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJpIit0fSksYz0idGhpcy5vZmZzZXQrIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idGhpcy5zdHJpZGVbIit0KyJdKmkiK3R9KS5qb2luKCIrIiksZj1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdH0pLmpvaW4oIiwiKSxkPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJjIit0fSkuam9pbigiLCIpO2EucHVzaCgiZnVuY3Rpb24gIityKyIoYSwiK2YrIiwiK2QrIixkKXt0aGlzLmRhdGE9YSIsInRoaXMuc2hhcGU9WyIrZisiXSIsInRoaXMuc3RyaWRlPVsiK2QrIl0iLCJ0aGlzLm9mZnNldD1kfDB9IiwidmFyIHByb3RvPSIrcisiLnByb3RvdHlwZSIsInByb3RvLmR0eXBlPSciK3QrIiciLCJwcm90by5kaW1lbnNpb249IitlKSxhLnB1c2goIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90bywnc2l6ZScse2dldDpmdW5jdGlvbiAiK3IrIl9zaXplKCl7cmV0dXJuICIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInRoaXMuc2hhcGVbIit0KyJdIn0pLmpvaW4oIioiKSwifX0pIiksMT09PWU/YS5wdXNoKCJwcm90by5vcmRlcj1bMF0iKTooYS5wdXNoKCJPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG8sJ29yZGVyJyx7Z2V0OiIpLGU8ND8oYS5wdXNoKCJmdW5jdGlvbiAiK3IrIl9vcmRlcigpeyIpLAoyPT09ZT9hLnB1c2goInJldHVybiAoTWF0aC5hYnModGhpcy5zdHJpZGVbMF0pPk1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSk/WzEsMF06WzAsMV19fSkiKTozPT09ZSYmYS5wdXNoKCJ2YXIgczA9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLHMxPU1hdGguYWJzKHRoaXMuc3RyaWRlWzFdKSxzMj1NYXRoLmFicyh0aGlzLnN0cmlkZVsyXSk7aWYoczA+czEpe2lmKHMxPnMyKXtyZXR1cm4gWzIsMSwwXTt9ZWxzZSBpZihzMD5zMil7cmV0dXJuIFsxLDIsMF07fWVsc2V7cmV0dXJuIFsxLDAsMl07fX1lbHNlIGlmKHMwPnMyKXtyZXR1cm4gWzIsMCwxXTt9ZWxzZSBpZihzMj5zMSl7cmV0dXJuIFswLDEsMl07fWVsc2V7cmV0dXJuIFswLDIsMV07fX19KSIpKTphLnB1c2goIk9SREVSfSkiKSksYS5wdXNoKCJwcm90by5zZXQ9ZnVuY3Rpb24gIityKyJfc2V0KCIrdS5qb2luKCIsIikrIix2KXsiKSxuP2EucHVzaCgicmV0dXJuIHRoaXMuZGF0YS5zZXQoIitjKyIsdil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrYysiXT12fSIpLGEucHVzaCgicHJvdG8uZ2V0PWZ1bmN0aW9uICIrcisiX2dldCgiK3Uuam9pbigiLCIpKyIpeyIpLG4/YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhLmdldCgiK2MrIil9Iik6YS5wdXNoKCJyZXR1cm4gdGhpcy5kYXRhWyIrYysiXX0iKSxhLnB1c2goInByb3RvLmluZGV4PWZ1bmN0aW9uICIrcisiX2luZGV4KCIsdS5qb2luKCksIil7cmV0dXJuICIrYysifSIpLGEucHVzaCgicHJvdG8uaGk9ZnVuY3Rpb24gIityKyJfaGkoIit1LmpvaW4oIiwiKSsiKXtyZXR1cm4gbmV3ICIrcisiKHRoaXMuZGF0YSwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVyblsiKHR5cGVvZiBpIix0LCIhPT0nbnVtYmVyJ3x8aSIsdCwiPDApP3RoaXMuc2hhcGVbIix0LCJdOmkiLHQsInwwIl0uam9pbigiIil9KS5qb2luKCIsIikrIiwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ0aGlzLnN0cmlkZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsdGhpcy5vZmZzZXQpfSIpO3ZhciBwPXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSksbT1zLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYyIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KTthLnB1c2goInByb3RvLmxvPWZ1bmN0aW9uICIrcisiX2xvKCIrdS5qb2luKCIsIikrIil7dmFyIGI9dGhpcy5vZmZzZXQsZD0wLCIrcC5qb2luKCIsIikrIiwiK20uam9pbigiLCIpKTtmb3IodmFyIHY9MDt2PGU7Kyt2KWEucHVzaCgiaWYodHlwZW9mIGkiK3YrIj09PSdudW1iZXInJiZpIit2KyI+PTApe2Q9aSIrdisifDA7Yis9YyIrdisiKmQ7YSIrdisiLT1kfSIpO2EucHVzaCgicmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYSIrdH0pLmpvaW4oIiwiKSsiLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImMiK3R9KS5qb2luKCIsIikrIixiKX0iKSxhLnB1c2goInByb3RvLnN0ZXA9ZnVuY3Rpb24gIityKyJfc3RlcCgiK3Uuam9pbigiLCIpKyIpe3ZhciAiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJhIit0KyI9dGhpcy5zaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iYiIrdCsiPXRoaXMuc3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixjPXRoaXMub2Zmc2V0LGQ9MCxjZWlsPU1hdGguY2VpbCIpO2Zvcih2YXIgdj0wO3Y8ZTsrK3YpYS5wdXNoKCJpZih0eXBlb2YgaSIrdisiPT09J251bWJlcicpe2Q9aSIrdisifDA7aWYoZDwwKXtjKz1iIit2KyIqKGEiK3YrIi0xKTthIit2KyI9Y2VpbCgtYSIrdisiL2QpfWVsc2V7YSIrdisiPWNlaWwoYSIrdisiL2QpfWIiK3YrIio9ZH0iKTthLnB1c2goInJldHVybiBuZXcgIityKyIodGhpcy5kYXRhLCIrcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuImEiK3R9KS5qb2luKCIsIikrIiwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJiIit0fSkuam9pbigiLCIpKyIsYyl9Iik7Zm9yKHZhciBnPW5ldyBBcnJheShlKSx5PW5ldyBBcnJheShlKSx2PTA7djxlOysrdilnW3ZdPSJhW2kiK3YrIl0iLHlbdl09ImJbaSIrdisiXSI7YS5wdXNoKCJwcm90by50cmFuc3Bvc2U9ZnVuY3Rpb24gIityKyJfdHJhbnNwb3NlKCIrdSsiKXsiK3UubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0oIit0KyI9PT11bmRlZmluZWQ/IitlKyI6Iit0KyJ8MCkifSkuam9pbigiOyIpLCJ2YXIgYT10aGlzLnNoYXBlLGI9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyAiK3IrIih0aGlzLmRhdGEsIitnLmpvaW4oIiwiKSsiLCIreS5qb2luKCIsIikrIix0aGlzLm9mZnNldCl9IiksYS5wdXNoKCJwcm90by5waWNrPWZ1bmN0aW9uICIrcisiX3BpY2soIit1KyIpe3ZhciBhPVtdLGI9W10sYz10aGlzLm9mZnNldCIpO2Zvcih2YXIgdj0wO3Y8ZTsrK3YpYS5wdXNoKCJpZih0eXBlb2YgaSIrdisiPT09J251bWJlcicmJmkiK3YrIj49MCl7Yz0oYyt0aGlzLnN0cmlkZVsiK3YrIl0qaSIrdisiKXwwfWVsc2V7YS5wdXNoKHRoaXMuc2hhcGVbIit2KyJdKTtiLnB1c2godGhpcy5zdHJpZGVbIit2KyJdKX0iKTthLnB1c2goInZhciBjdG9yPUNUT1JfTElTVFthLmxlbmd0aCsxXTtyZXR1cm4gY3Rvcih0aGlzLmRhdGEsYSxiLGMpfSIpLGEucHVzaCgicmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdF8iK3IrIihkYXRhLHNoYXBlLHN0cmlkZSxvZmZzZXQpe3JldHVybiBuZXcgIityKyIoZGF0YSwiK3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJzaGFwZVsiK3QrIl0ifSkuam9pbigiLCIpKyIsIitzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4ic3RyaWRlWyIrdCsiXSJ9KS5qb2luKCIsIikrIixvZmZzZXQpfSIpO3ZhciBvPW5ldyBGdW5jdGlvbigiQ1RPUl9MSVNUIiwiT1JERVIiLGEuam9pbigiXG4iKSk7cmV0dXJuIG8oaFt0XSxpKX1mdW5jdGlvbiBvKHQpe2lmKHUodCkpcmV0dXJuImJ1ZmZlciI7aWYoYylzd2l0Y2goT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXtjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6cmV0dXJuImZsb2F0NjQiO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpyZXR1cm4iZmxvYXQzMiI7Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOnJldHVybiJpbnQ4IjtjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOnJldHVybiJpbnQxNiI7Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpyZXR1cm4iaW50MzIiO2Nhc2UiW29iamVjdCBVaW50OEFycmF5XSI6cmV0dXJuInVpbnQ4IjtjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpyZXR1cm4idWludDE2IjtjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4idWludDMyIjtjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpyZXR1cm4idWludDhfY2xhbXBlZCJ9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ImFycmF5IjoiZ2VuZXJpYyJ9ZnVuY3Rpb24gcyh0LGUscixuKXtpZih2b2lkIDA9PT10KXt2YXIgaT1oLmFycmF5WzBdO3JldHVybiBpKFtdKX0ibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSksdm9pZCAwPT09ZSYmKGU9W3QubGVuZ3RoXSk7dmFyIHM9ZS5sZW5ndGg7aWYodm9pZCAwPT09cil7cj1uZXcgQXJyYXkocyk7Zm9yKHZhciBsPXMtMSx1PTE7bD49MDstLWwpcltsXT11LHUqPWVbbF19aWYodm9pZCAwPT09bil7bj0wO2Zvcih2YXIgbD0wO2w8czsrK2wpcltsXTwwJiYobi09KGVbbF0tMSkqcltsXSl9Zm9yKHZhciBjPW8odCksZj1oW2NdO2YubGVuZ3RoPD1zKzE7KWYucHVzaChhKGMsZi5sZW5ndGgtMSkpO3ZhciBpPWZbcysxXTtyZXR1cm4gaSh0LGUscixuKX12YXIgbD10KCJpb3RhLWFycmF5IiksdT10KCJpcy1idWZmZXIiKSxjPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5LGg9e2Zsb2F0MzI6W10sZmxvYXQ2NDpbXSxpbnQ4OltdLGludDE2OltdLGludDMyOltdLHVpbnQ4OltdLHVpbnQxNjpbXSx1aW50MzI6W10sYXJyYXk6W10sdWludDhfY2xhbXBlZDpbXSxidWZmZXI6W10sZ2VuZXJpYzpbXX07ZS5leHBvcnRzPXN9LHsiaW90YS1hcnJheSI6MjkxLCJpcy1idWZmZXIiOjI5M31dLDQ2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8tYTphO3ZhciByPWkuaGkodCksbj1pLmxvKHQpO3JldHVybiBlPnQ9PXQ+MD9uPT09bz8ocis9MSxuPTApOm4rPTE6MD09PW4/KG49byxyLT0xKTpuLT0xLGkucGFjayhuLHIpfXZhciBpPXQoImRvdWJsZS1iaXRzIiksYT1NYXRoLnBvdygyLC0xMDc0KSxvPS0xPj4+MDtlLmV4cG9ydHM9bn0seyJkb3VibGUtYml0cyI6MTIyfV0sNDY3OltmdW5jdGlvbih0LGUscil7ci52ZXJ0ZXhOb3JtYWxzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49ZS5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT12b2lkIDA9PT1yPzFlLTY6cixvPTA7bzxuOysrbylpW29dPVswLDAsMF07Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDsrK28pZm9yKHZhciBzPXRbb10sbD0wLHU9c1tzLmxlbmd0aC0xXSxjPXNbMF0saD0wO2g8cy5sZW5ndGg7KytoKXtsPXUsdT1jLGM9c1soaCsxKSVzLmxlbmd0aF07Zm9yKHZhciBmPWVbbF0sZD1lW3VdLHA9ZVtjXSxtPW5ldyBBcnJheSgzKSx2PTAsZz1uZXcgQXJyYXkoMykseT0wLGI9MDtiPDM7KytiKW1bYl09ZltiXS1kW2JdLHYrPW1bYl0qbVtiXSxnW2JdPXBbYl0tZFtiXSx5Kz1nW2JdKmdbYl07aWYodip5PmEpZm9yKHZhciB4PWlbdV0sXz0xL01hdGguc3FydCh2KnkpLGI9MDtiPDM7KytiKXt2YXIgdz0oYisxKSUzLE09KGIrMiklMzt4W2JdKz1fKihnW3ddKm1bTV0tZ1tNXSptW3ddKX19Zm9yKHZhciBvPTA7bzxuOysrbyl7Zm9yKHZhciB4PWlbb10saz0wLGI9MDtiPDM7KytiKWsrPXhbYl0qeFtiXTtpZihrPmEpZm9yKHZhciBfPTEvTWF0aC5zcXJ0KGspLGI9MDtiPDM7KytiKXhbYl0qPV87ZWxzZSBmb3IodmFyIGI9MDtiPDM7KytiKXhbYl09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLHU9MDt1PDM7Kyt1KWxbdV09ZVtzW3VdXTtmb3IodmFyIGM9bmV3IEFycmF5KDMpLGg9bmV3IEFycmF5KDMpLHU9MDt1PDM7Kyt1KWNbdV09bFsxXVt1XS1sWzBdW3VdLGhbdV09bFsyXVt1XS1sWzBdW3VdO2Zvcih2YXIgZj1uZXcgQXJyYXkoMyksZD0wLHU9MDt1PDM7Kyt1KXt2YXIgcD0odSsxKSUzLG09KHUrMiklMztmW3VdPWNbcF0qaFttXS1jW21dKmhbcF0sZCs9Zlt1XSpmW3VdfWQ9ZD5hPzEvTWF0aC5zcXJ0KGQpOjA7Zm9yKHZhciB1PTA7dTwzOysrdSlmW3VdKj1kO2lbb109Zn1yZXR1cm4gaX19LHt9XSw0Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZihudWxsPT09dHx8dm9pZCAwPT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RyeXtpZighT2JqZWN0LmFzc2lnbilyZXR1cm4hMTt2YXIgdD1uZXcgU3RyaW5nKCJhYmMiKTtpZih0WzVdPSJkZSIsIjUiPT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModClbMF0pcmV0dXJuITE7Zm9yKHZhciBlPXt9LHI9MDtyPDEwO3IrKyllWyJfIitTdHJpbmcuZnJvbUNoYXJDb2RlKHIpXT1yO2lmKCIwMTIzNDU2Nzg5IiE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLmpvaW4oIiIpKXJldHVybiExO3ZhciBuPXt9O3JldHVybiJhYmNkZWZnaGlqa2xtbm9wcXJzdCIuc3BsaXQoIiIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLHMsbD1uKHQpLHU9MTt1PGFyZ3VtZW50cy5sZW5ndGg7dSsrKXtyPU9iamVjdChhcmd1bWVudHNbdV0pO2Zvcih2YXIgYyBpbiByKWEuY2FsbChyLGMpJiYobFtjXT1yW2NdKTtpZihpKXtzPWkocik7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspby5jYWxsKHIsc1toXSkmJihsW3NbaF1dPXJbc1toXV0pfX1yZXR1cm4gbH19LHt9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4sbztyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KHI9aSh0LGUpLG49ci53aWR0aCxvPXIuaGVpZ2h0KTp0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQ/KG49dC53aWR0aCxvPXQuaGVpZ2h0LHQ9dC5nZXRDb250ZXh0KCIyZCIpLHI9dC5nZXRJbWFnZURhdGEoMCwwLG4sbykpOnQgaW5zdGFuY2VvZiBJbWFnZURhdGEmJihuPXQud2lkdGgsbz10LmhlaWdodCxyPXQpLGEocil9ZnVuY3Rpb24gaSh0LGUpe2V8fChlPXt9KTt2YXIgcj1lLmZhbWlseXx8InNhbnMtc2VyaWYiLG49bC53aWR0aCxpPWwuaGVpZ2h0LGE9ZS53aWR0aHx8ZS5oZWlnaHR8fGUuc2l6ZTthJiZhIT1uJiYobj1pPWwud2lkdGg9bC5oZWlnaHQ9YSk7dmFyIG89ZS5mb250U2l6ZXx8bi8yO3JldHVybiB1LmZpbGxTdHlsZT0iIzAwMCIsdS5maWxsUmVjdCgwLDAsbixpKSx1LmZvbnQ9bysicHggIityLHUudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHUudGV4dEFsaWduPSJjZW50ZXIiLHUuZmlsbFN0eWxlPSJ3aGl0ZSIsdS5maWxsVGV4dCh0LG4vMixpLzIpLHUuZ2V0SW1hZ2VEYXRhKDAsMCxuLGkpfWZ1bmN0aW9uIGEodCl7dmFyIGUscixuLGksYSxsLHUsYyxoLGYsZCxwLG0sdj10LmRhdGEsZz10LndpZHRoLHk9dC5oZWlnaHQsYj1BcnJheSh5KSx4PUFycmF5KHkpLF89MCx3PTAsTT1nLGs9MCxBPTAsVD1BcnJheSh5KTtmb3Iocj0wO3I8eTtyKyspaWYobD0wLHU9MCxhPTQqcipnLGQ9byh2LnN1YmFycmF5KGEsYSs0KmcpLDQpLGRbMF0hPT1kWzFdKXtmb3IoX3x8KF89ciksdz1yLGU9ZFswXTtlPGRbMV07ZSsrKWk9NCplLG49dlthK2ldLGwrPW4sdSs9ZSpuO2Jbcl09MD09PWw/MDpsL2cseFtyXT0wPT09bD8wOnUvbCxkWzBdPE0mJihNPWRbMF0pLGRbMV0+ayYmKGs9ZFsxXSksVFtyXT1kfWZvcihsPTAsYz0wLHU9MCxyPTA7cjx5O3IrKykocD1iW3JdKSYmKGMrPXAqcixsKz1wLHUrPXhbcl0qcCk7Zm9yKGY9Yy9sLGg9dS9sLEE9MCxtPTAscj0wO3I8eTtyKyspKGQ9VFtyXSkmJihtPU1hdGgubWF4KHMoaC1kWzBdLGYtcikscyhoLWRbMV0sZi1yKSkpPkEmJihBPW0pO3JldHVybntjZW50ZXI6W2gsZl0sYm91bmRzOltNLF8sayx3KzFdLHJhZGl1czpNYXRoLnNxcnQoQSl9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj0wLG49dC5sZW5ndGgsaT0wO2ZvcihlfHwoZT00KTshdFtpXSYmaTxuOylpKz1lO2ZvcihyPWksaT10Lmxlbmd0aDshdFtpXSYmaT5yOylpLT1lO3JldHVybiBuPWksW3IvZSxuL2VdfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCp0K2UqZX1lLmV4cG9ydHM9bjt2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx1PWwuZ2V0Q29udGV4dCgiMmQiKTtsLndpZHRoPTIwMCxsLmhlaWdodD0yMDAsbi5jYW52YXM9bH0se31dLDQ3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyxsLHUpe3ZhciBjPWUrYSt1O2lmKGg+MCl7dmFyIGg9TWF0aC5zcXJ0KGMrMSk7dFswXT0uNSooby1sKS9oLHRbMV09LjUqKHMtbikvaCx0WzJdPS41KihyLWEpL2gsdFszXT0uNSpofWVsc2V7dmFyIGY9TWF0aC5tYXgoZSxhLHUpLGg9TWF0aC5zcXJ0KDIqZi1jKzEpO2U+PWY/KHRbMF09LjUqaCx0WzFdPS41KihpK3IpL2gsdFsyXT0uNSoocytuKS9oLHRbM109LjUqKG8tbCkvaCk6YT49Zj8odFswXT0uNSoocitpKS9oLHRbMV09LjUqaCx0WzJdPS41KihsK28pL2gsdFszXT0uNSoocy1uKS9oKToodFswXT0uNSoobitzKS9oLHRbMV09LjUqKG8rbCkvaCx0WzJdPS41KmgsdFszXT0uNSooci1pKS9oKX1yZXR1cm4gdH1lLmV4cG9ydHM9bn0se31dLDQ3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGE9ZVsyXSxvPWVbM10scz1pKHIsbixhLG8pO3M+MWUtNj8odFswXT1yL3MsdFsxXT1uL3MsdFsyXT1hL3MsdFszXT1vL3MpOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5yYWRpdXM9bChbcl0pLHRoaXMuY2VudGVyPWwoZSksdGhpcy5yb3RhdGlvbj1sKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9ZnVuY3Rpb24gcyh0KXt0PXR8fHt9O3ZhciBlPXQuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSxyPVtdLnNsaWNlLmNhbGwociwwLDQpLGEocixyKTt2YXIgaT1uZXcgbyhyLGUsTWF0aC5sb2cobikpO3JldHVybiBpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKSxpfWUuZXhwb3J0cz1zO3ZhciBsPXQoImZpbHRlcmVkLXZlY3RvciIpLHU9dCgiZ2wtbWF0NC9sb29rQXQiKSxjPXQoImdsLW1hdDQvZnJvbVF1YXQiKSxoPXQoImdsLW1hdDQvaW52ZXJ0IiksZj10KCIuL2xpYi9xdWF0RnJvbUZyYW1lIiksZD1vLnByb3RvdHlwZTtkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMucmFkaXVzLmxhc3RUKCksdGhpcy5jZW50ZXIubGFzdFQoKSx0aGlzLnJvdGF0aW9uLmxhc3RUKCkpfSxkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLnJhZGl1cy5jdXJ2ZSh0KSx0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnJvdGF0aW9uLmN1cnZlKHQpO3ZhciBlPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjthKGUsZSk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtjKHIsZSk7dmFyIG49dGhpcy5jb21wdXRlZENlbnRlcixpPXRoaXMuY29tcHV0ZWRFeWUsbz10aGlzLmNvbXB1dGVkVXAscz1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTtpWzBdPW5bMF0rcypyWzJdLGlbMV09blsxXStzKnJbNl0saVsyXT1uWzJdK3MqclsxMF0sb1swXT1yWzFdLG9bMV09cls1XSxvWzJdPXJbOV07Zm9yKHZhciBsPTA7bDwzOysrbCl7Zm9yKHZhciB1PTAsaD0wO2g8MzsrK2gpdSs9cltsKzQqaF0qaVtoXTtyWzEyK2xdPS11fX0sZC5nZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgcj10aGlzLmNvbXB1dGVkTWF0cml4O2lmKGUpe2Zvcih2YXIgbj0wO248MTY7KytuKWVbbl09cltuXTtyZXR1cm4gZX1yZXR1cm4gcn0sZC5pZGxlPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLnJvdGF0aW9uLmlkbGUodCl9LGQuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy5yYWRpdXMuZmx1c2godCksdGhpcy5yb3RhdGlvbi5mbHVzaCh0KX0sZC5wYW49ZnVuY3Rpb24odCxlLHIsaSl7ZT1lfHwwLHI9cnx8MCxpPWl8fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeCxvPWFbMV0scz1hWzVdLGw9YVs5XSx1PW4obyxzLGwpO28vPXUscy89dSxsLz11O3ZhciBjPWFbMF0saD1hWzRdLGY9YVs4XSxkPWMqbytoKnMrZipsO2MtPW8qZCxoLT1zKmQsZi09bCpkO3ZhciBwPW4oYyxoLGYpO2MvPXAsaC89cCxmLz1wO3ZhciBtPWFbMl0sdj1hWzZdLGc9YVsxMF0seT1tKm8rdipzK2cqbCxiPW0qYyt2KmgrZypmO20tPXkqbytiKmMsdi09eSpzK2IqaCxnLT15KmwrYipmO3ZhciB4PW4obSx2LGcpO20vPXgsdi89eCxnLz14O3ZhciBfPWMqZStvKnIsdz1oKmUrcypyLE09ZiplK2wqcjt0aGlzLmNlbnRlci5tb3ZlKHQsXyx3LE0pO3ZhciBrPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2s9TWF0aC5tYXgoMWUtNCxrK2kpLHRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGspKX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsYSl7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHwwLHI9cnx8MDt2YXIgbz10aGlzLmNvbXB1dGVkTWF0cml4LHM9b1swXSxsPW9bNF0sdT1vWzhdLGM9b1sxXSxoPW9bNV0sZj1vWzldLGQ9b1syXSxwPW9bNl0sbT1vWzEwXSx2PWUqcytyKmMsZz1lKmwrcipoLHk9ZSp1K3IqZixiPS0ocCp5LW0qZykseD0tKG0qdi1kKnkpLF89LShkKmctcCp2KSx3PU1hdGguc3FydChNYXRoLm1heCgwLDEtTWF0aC5wb3coYiwyKS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KF8sMikpKSxNPWkoYix4LF8sdyk7TT4xZS02PyhiLz1NLHgvPU0sXy89TSx3Lz1NKTooYj14PV89MCx3PTEpO3ZhciBrPXRoaXMuY29tcHV0ZWRSb3RhdGlvbixBPWtbMF0sVD1rWzFdLFM9a1syXSxFPWtbM10sTD1BKncrRSpiK1QqXy1TKngsQz1UKncrRSp4K1MqYi1BKl8sej1TKncrRSpfK0EqeC1UKmIsST1FKnctQSpiLVQqeC1TKl87aWYoYSl7Yj1kLHg9cCxfPW07dmFyIEQ9TWF0aC5zaW4oYSkvbihiLHgsXyk7Yio9RCx4Kj1ELF8qPUQsdz1NYXRoLmNvcyhlKSxMPUwqdytJKmIrQypfLXoqeCxDPUMqdytJKngreipiLUwqXyx6PXoqdytJKl8rTCp4LUMqYixJPUkqdy1MKmItQyp4LXoqX312YXIgUD1pKEwsQyx6LEkpO1A+MWUtNj8oTC89UCxDLz1QLHovPVAsSS89UCk6KEw9Qz16PTAsST0xKSx0aGlzLnJvdGF0aW9uLnNldCh0LEwsQyx6LEkpfSxkLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXIsZT1lfHx0aGlzLmNvbXB1dGVkRXllLG49bnx8dGhpcy5jb21wdXRlZFVwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXg7dShpLGUscixuKTt2YXIgbz10aGlzLmNvbXB1dGVkUm90YXRpb247ZihvLGlbMF0saVsxXSxpWzJdLGlbNF0saVs1XSxpWzZdLGlbOF0saVs5XSxpWzEwXSksYShvLG8pLHRoaXMucm90YXRpb24uc2V0KHQsb1swXSxvWzFdLG9bMl0sb1szXSk7Zm9yKHZhciBzPTAsbD0wO2w8MzsrK2wpcys9TWF0aC5wb3cocltsXS1lW2xdLDIpO3RoaXMucmFkaXVzLnNldCh0LC41Kk1hdGgubG9nKE1hdGgubWF4KHMsMWUtNikpKSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSl9LGQudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LGQuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jb21wdXRlZFJvdGF0aW9uO2YocixlWzBdLGVbMV0sZVsyXSxlWzRdLGVbNV0sZVs2XSxlWzhdLGVbOV0sZVsxMF0pLGEocixyKSx0aGlzLnJvdGF0aW9uLnNldCh0LHJbMF0sclsxXSxyWzJdLHJbM10pO3ZhciBuPXRoaXMuY29tcHV0ZWRNYXRyaXg7aChuLGUpO3ZhciBpPW5bMTVdO2lmKE1hdGguYWJzKGkpPjFlLTYpe3ZhciBvPW5bMTJdL2kscz1uWzEzXS9pLGw9blsxNF0vaTt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgdT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5zZXQodCxvLW5bMl0qdSxzLW5bNl0qdSxsLW5bMTBdKnUpLHRoaXMucmFkaXVzLmlkbGUodCl9ZWxzZSB0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCl9LGQuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0sZC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHM7cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxkLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlY2FsY01hdHJpeCh0aGlzLmxhc3RUKCkpLHtjZW50ZXI6dGhpcy5jb21wdXRlZENlbnRlci5zbGljZSgpLHJvdGF0aW9uOnRoaXMuY29tcHV0ZWRSb3RhdGlvbi5zbGljZSgpLGRpc3RhbmNlOk1hdGgubG9nKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHpvb21NaW46dGhpcy5yYWRpdXMuYm91bmRzWzBdWzBdLHpvb21NYXg6dGhpcy5yYWRpdXMuYm91bmRzWzFdWzBdfX0sZC5mcm9tSlNPTj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10LmNlbnRlcjtyJiZ0aGlzLmNlbnRlci5zZXQoZSxyWzBdLHJbMV0sclsyXSk7dmFyIG49dC5yb3RhdGlvbjtuJiZ0aGlzLnJvdGF0aW9uLnNldChlLG5bMF0sblsxXSxuWzJdLG5bM10pO3ZhciBpPXQuZGlzdGFuY2U7aSYmaT4wJiZ0aGlzLnJhZGl1cy5zZXQoZSxNYXRoLmxvZyhpKSksdGhpcy5zZXREaXN0YW5jZUxpbWl0cyh0Lnpvb21NaW4sdC56b29tTWF4KX19LHsiLi9saWIvcXVhdEZyb21GcmFtZSI6NDcwLCJmaWx0ZXJlZC12ZWN0b3IiOjEzMSwiZ2wtbWF0NC9mcm9tUXVhdCI6MTc2LCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L2xvb2tBdCI6MTgwfV0sNDcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlcGVhdC1zdHJpbmciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByPXZvaWQgMCE9PXI/cisiIjoiICIsbihyLGUpK3R9fSx7InJlcGVhdC1zdHJpbmciOjQ5OH1dLDQ3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2V8fChlPVswLCIiXSksdD1TdHJpbmcodCk7dmFyIHI9cGFyc2VGbG9hdCh0LDEwKTtyZXR1cm4gZVswXT1yLGVbMV09dC5tYXRjaCgvW1xkLlwtXCtdKlxzKiguKikvKVsxXXx8IiIsZX19LHt9XSw0NzQ6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIGk9dFtuXTsiLiI9PT1pP3Quc3BsaWNlKG4sMSk6Ii4uIj09PWk/KHQuc3BsaWNlKG4sMSkscisrKTpyJiYodC5zcGxpY2UobiwxKSxyLS0pfWlmKGUpZm9yKDtyLS07cil0LnVuc2hpZnQoIi4uIik7cmV0dXJuIHR9ZnVuY3Rpb24gbih0LGUpe2lmKHQuZmlsdGVyKXJldHVybiB0LmZpbHRlcihlKTtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSxuLHQpJiZyLnB1c2godFtuXSk7cmV0dXJuIHJ9dmFyIGk9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZXhlYyh0KS5zbGljZSgxKX07ci5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciByPSIiLGk9ITEsYT1hcmd1bWVudHMubGVuZ3RoLTE7YT49LTEmJiFpO2EtLSl7dmFyIG89YT49MD9hcmd1bWVudHNbYV06dC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtvJiYocj1vKyIvIityLGk9Ii8iPT09by5jaGFyQXQoMCkpfXJldHVybiByPWUobihyLnNwbGl0KCIvIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIWkpLmpvaW4oIi8iKSwoaT8iLyI6IiIpK3J8fCIuIn0sci5ub3JtYWxpemU9ZnVuY3Rpb24odCl7dmFyIGk9ci5pc0Fic29sdXRlKHQpLGE9Ii8iPT09byh0LC0xKTtyZXR1cm4gdD1lKG4odC5zcGxpdCgiLyIpLGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLCFpKS5qb2luKCIvIiksdHx8aXx8KHQ9Ii4iKSx0JiZhJiYodCs9Ii8iKSwoaT8iLyI6IiIpK3R9LHIuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKX0sci5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiByLm5vcm1hbGl6ZShuKHQsZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtyZXR1cm4gdH0pLmpvaW4oIi8iKSl9LHIucmVsYXRpdmU9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgmJiIiPT09dFtlXTtlKyspO2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTAmJiIiPT09dFtyXTtyLS0pO3JldHVybiBlPnI/W106dC5zbGljZShlLHItZSsxKX10PXIucmVzb2x2ZSh0KS5zdWJzdHIoMSksZT1yLnJlc29sdmUoZSkuc3Vic3RyKDEpO2Zvcih2YXIgaT1uKHQuc3BsaXQoIi8iKSksYT1uKGUuc3BsaXQoIi8iKSksbz1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCkscz1vLGw9MDtsPG87bCsrKWlmKGlbbF0hPT1hW2xdKXtzPWw7YnJlYWt9Zm9yKHZhciB1PVtdLGw9cztsPGkubGVuZ3RoO2wrKyl1LnB1c2goIi4uIik7cmV0dXJuIHU9dS5jb25jYXQoYS5zbGljZShzKSksdS5qb2luKCIvIil9LHIuc2VwPSIvIixyLmRlbGltaXRlcj0iOiIsci5kaXJuYW1lPWZ1bmN0aW9uKHQpe3ZhciBlPWEodCkscj1lWzBdLG49ZVsxXTtyZXR1cm4gcnx8bj8obiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSkscituKToiLiJ9LHIuYmFzZW5hbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1hKHQpWzJdO3JldHVybiBlJiZyLnN1YnN0cigtMSplLmxlbmd0aCk9PT1lJiYocj1yLnN1YnN0cigwLHIubGVuZ3RoLWUubGVuZ3RoKSkscn0sci5leHRuYW1lPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpWzNdfTt2YXIgbz0iYiI9PT0iYWIiLnN1YnN0cigtMSk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnN1YnN0cihlLHIpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8MCYmKGU9dC5sZW5ndGgrZSksdC5zdWJzdHIoZSxyKX19KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0ODV9XSw0NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZTt0JiZ0Lmxlbmd0aCYmKGU9dCx0PWUubGVuZ3RoKTt2YXIgcj1uZXcgVWludDhBcnJheSh0fHwwKTtyZXR1cm4gZSYmci5zZXQoZSksci5yZWFkVUludDMyTEU9YS5yZWFkVUludDMyTEUsci53cml0ZVVJbnQzMkxFPWEud3JpdGVVSW50MzJMRSxyLnJlYWRJbnQzMkxFPWEucmVhZEludDMyTEUsci53cml0ZUludDMyTEU9YS53cml0ZUludDMyTEUsci5yZWFkRmxvYXRMRT1hLnJlYWRGbG9hdExFLHIud3JpdGVGbG9hdExFPWEud3JpdGVGbG9hdExFLHIucmVhZERvdWJsZUxFPWEucmVhZERvdWJsZUxFLHIud3JpdGVEb3VibGVMRT1hLndyaXRlRG91YmxlTEUsci50b1N0cmluZz1hLnRvU3RyaW5nLHIud3JpdGU9YS53cml0ZSxyLnNsaWNlPWEuc2xpY2Usci5jb3B5PWEuY29weSxyLl9pc0J1ZmZlcj0hMCxyfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlLHIsbj10Lmxlbmd0aCxpPVtdLGE9MDthPG47YSsrKXtpZigoZT10LmNoYXJDb2RlQXQoYSkpPjU1Mjk1JiZlPDU3MzQ0KXtpZighcil7ZT41NjMxOXx8YSsxPT09bj9pLnB1c2goMjM5LDE5MSwxODkpOnI9ZTtjb250aW51ZX1pZihlPDU2MzIwKXtpLnB1c2goMjM5LDE5MSwxODkpLHI9ZTtjb250aW51ZX1lPXItNTUyOTY8PDEwfGUtNTYzMjB8NjU1MzYscj1udWxsfWVsc2UgciYmKGkucHVzaCgyMzksMTkxLDE4OSkscj1udWxsKTtlPDEyOD9pLnB1c2goZSk6ZTwyMDQ4P2kucHVzaChlPj42fDE5Miw2MyZlfDEyOCk6ZTw2NTUzNj9pLnB1c2goZT4+MTJ8MjI0LGU+PjYmNjN8MTI4LDYzJmV8MTI4KTppLnB1c2goZT4+MTh8MjQwLGU+PjEyJjYzfDEyOCxlPj42JjYzfDEyOCw2MyZlfDEyOCl9cmV0dXJuIGl9ZS5leHBvcnRzPW47dmFyIGEsbyxzLGw9dCgiaWVlZTc1NCIpO2E9e3JlYWRVSW50MzJMRTpmdW5jdGlvbih0KXtyZXR1cm4odGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSx3cml0ZVVJbnQzMkxFOmZ1bmN0aW9uKHQsZSl7dGhpc1tlXT10LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjR9LHJlYWRJbnQzMkxFOmZ1bmN0aW9uKHQpe3JldHVybih0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsodGhpc1t0KzNdPDwyNCl9LHJlYWRGbG9hdExFOmZ1bmN0aW9uKHQpe3JldHVybiBsLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxyZWFkRG91YmxlTEU6ZnVuY3Rpb24odCl7cmV0dXJuIGwucmVhZCh0aGlzLHQsITAsNTIsOCl9LHdyaXRlRmxvYXRMRTpmdW5jdGlvbih0LGUpe3JldHVybiBsLndyaXRlKHRoaXMsdCxlLCEwLDIzLDQpfSx3cml0ZURvdWJsZUxFOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwud3JpdGUodGhpcyx0LGUsITAsNTIsOCl9LHRvU3RyaW5nOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0iIixpPSIiO2U9ZXx8MCxyPU1hdGgubWluKHRoaXMubGVuZ3RoLHJ8fHRoaXMubGVuZ3RoKTtmb3IodmFyIGE9ZTthPHI7YSsrKXt2YXIgbz10aGlzW2FdO288PTEyNz8obis9ZGVjb2RlVVJJQ29tcG9uZW50KGkpK1N0cmluZy5mcm9tQ2hhckNvZGUobyksaT0iIik6aSs9IiUiK28udG9TdHJpbmcoMTYpfXJldHVybiBuKz1kZWNvZGVVUklDb21wb25lbnQoaSl9LHdyaXRlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQ9PT1vP3M6aSh0KSxuPTA7bjxyLmxlbmd0aDtuKyspdGhpc1tlK25dPXJbbl19LHNsaWNlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3ViYXJyYXkodCxlKX0sY29weTpmdW5jdGlvbih0LGUpe2U9ZXx8MDtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0W2Urcl09dGhpc1tyXX19LGEud3JpdGVJbnQzMkxFPWEud3JpdGVVSW50MzJMRSxuLmJ5dGVMZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIG89dCxzPWkodCkscy5sZW5ndGh9LG4uaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuISghdHx8IXQuX2lzQnVmZmVyKX19LHtpZWVlNzU0OjI4N31dLDQ3NjpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmJ1Zj12LmlzQnVmZmVyKHQpP3Q6bmV3IHYodHx8MCksdGhpcy5wb3M9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG49ZS5idWY7aWYocj1uW2UucG9zKytdLHQrPTI2ODQzNTQ1NiooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz0zNDM1OTczODM2OCooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz00Mzk4MDQ2NTExMTA0KigxMjcmcikscjwxMjgpcmV0dXJuIHQ7aWYocj1uW2UucG9zKytdLHQrPTU2Mjk0OTk1MzQyMTMxMiooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz03MjA1NzU5NDAzNzkyNzk0MCooMTI3JnIpLHI8MTI4KXJldHVybiB0O2lmKHI9bltlLnBvcysrXSx0Kz0weDgwMDAwMDAwMDAwMDAwMDAqKDEyNyZyKSxyPDEyOClyZXR1cm4gdDt0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHZhcmludCBub3QgbW9yZSB0aGFuIDEwIGJ5dGVzIil9ZnVuY3Rpb24gYSh0LGUpe2UucmVhbGxvYygxMCk7Zm9yKHZhciByPWUucG9zKzEwO3Q+PTE7KXtpZihlLnBvcz49cil0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIHZhcmludCBkb2Vzbid0IGZpdCBpbnRvIDEwIGJ5dGVzIik7dmFyIG49MjU1JnQ7ZS5idWZbZS5wb3MrK109bnwodD49MTI4PzEyODowKSx0Lz0xMjh9fWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWU8PTE2MzgzPzE6ZTw9MjA5NzE1MT8yOmU8PTI2ODQzNTQ1NT8zOk1hdGguY2VpbChNYXRoLmxvZyhlKS8oNypNYXRoLkxOMikpO3IucmVhbGxvYyhuKTtmb3IodmFyIGk9ci5wb3MtMTtpPj10O2ktLSlyLmJ1ZltpK25dPXIuYnVmW2ldfWZ1bmN0aW9uIHModCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlVmFyaW50KHRbcl0pfWZ1bmN0aW9uIGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlU1ZhcmludCh0W3JdKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZsb2F0KHRbcl0pfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRG91YmxlKHRbcl0pfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlQm9vbGVhbih0W3JdKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkMzIodFtyXSl9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQzMih0W3JdKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUZpeGVkNjQodFtyXSl9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQ2NCh0W3JdKX1lLmV4cG9ydHM9bjt2YXIgdj1yLkJ1ZmZlcnx8dCgiLi9idWZmZXIiKTtuLlZhcmludD0wLG4uRml4ZWQ2ND0xLG4uQnl0ZXM9MixuLkZpeGVkMzI9NTt2YXIgZz1NYXRoLnBvdygyLDYzKTtuLnByb3RvdHlwZT17ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYnVmPW51bGx9LHJlYWRGaWVsZHM6ZnVuY3Rpb24odCxlLHIpe2ZvcihyPXJ8fHRoaXMubGVuZ3RoO3RoaXMucG9zPHI7KXt2YXIgbj10aGlzLnJlYWRWYXJpbnQoKSxpPW4+PjMsYT10aGlzLnBvczt0KGksZSx0aGlzKSx0aGlzLnBvcz09PWEmJnRoaXMuc2tpcChuKX1yZXR1cm4gZX0scmVhZE1lc3NhZ2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZWFkRmllbGRzKHQsZSx0aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyl9LHJlYWRGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZFVJbnQzMkxFKHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZFNGaXhlZDMyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZEludDMyTEUodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcykrNDI5NDk2NzI5Nip0aGlzLmJ1Zi5yZWFkVUludDMyTEUodGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRTRml4ZWQ2NDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYnVmLnJlYWRVSW50MzJMRSh0aGlzLnBvcykrNDI5NDk2NzI5Nip0aGlzLmJ1Zi5yZWFkSW50MzJMRSh0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZEZsb2F0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZEZsb2F0TEUodGhpcy5wb3MpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRG91YmxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5idWYucmVhZERvdWJsZUxFKHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFZhcmludDpmdW5jdGlvbigpe3ZhciB0LGUscj10aGlzLmJ1ZjtyZXR1cm4gZT1yW3RoaXMucG9zKytdLHQ9MTI3JmUsZTwxMjg/dDooZT1yW3RoaXMucG9zKytdLHR8PSgxMjcmZSk8PDcsZTwxMjg/dDooZT1yW3RoaXMucG9zKytdLHR8PSgxMjcmZSk8PDE0LGU8MTI4P3Q6KGU9clt0aGlzLnBvcysrXSx0fD0oMTI3JmUpPDwyMSxlPDEyOD90OmkodCx0aGlzKSkpKX0scmVhZFZhcmludDY0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3MsZT10aGlzLnJlYWRWYXJpbnQoKTtpZihlPGcpcmV0dXJuIGU7Zm9yKHZhciByPXRoaXMucG9zLTI7MjU1PT09dGhpcy5idWZbcl07KXItLTtyPHQmJihyPXQpLGU9MDtmb3IodmFyIG49MDtuPHItdCsxO24rKyl7dmFyIGk9MTI3Jn50aGlzLmJ1Zlt0K25dO2UrPW48ND9pPDw3Km46aSpNYXRoLnBvdygyLDcqbil9cmV0dXJuLWUtMX0scmVhZFNWYXJpbnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKTtyZXR1cm4gdCUyPT0xPyh0KzEpLy0yOnQvMn0scmVhZEJvb2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSl9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPXRoaXMuYnVmLnRvU3RyaW5nKCJ1dGY4Iix0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkQnl0ZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPXRoaXMuYnVmLnNsaWNlKHRoaXMucG9zLHQpO3JldHVybiB0aGlzLnBvcz10LGV9LHJlYWRQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkVmFyaW50KCkpO3JldHVybiBlfSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO3JldHVybiBlfSxyZWFkUGFja2VkQm9vbGVhbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO3JldHVybiBlfSxyZWFkUGFja2VkRmxvYXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7cmV0dXJuIGV9LHJlYWRQYWNrZWREb3VibGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3JldHVybiBlfSxyZWFkUGFja2VkRml4ZWQzMjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO3JldHVybiBlfSxyZWFkUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT1bXTt0aGlzLnBvczx0OyllLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7cmV0dXJuIGV9LHJlYWRQYWNrZWRGaXhlZDY0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zLGU9W107dGhpcy5wb3M8dDspZS5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIGV9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcyxlPVtdO3RoaXMucG9zPHQ7KWUucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtyZXR1cm4gZX0sc2tpcDpmdW5jdGlvbih0KXt2YXIgZT03JnQ7aWYoZT09PW4uVmFyaW50KWZvcig7dGhpcy5idWZbdGhpcy5wb3MrK10+MTI3Oyk7ZWxzZSBpZihlPT09bi5CeXRlcyl0aGlzLnBvcz10aGlzLnJlYWRWYXJpbnQoKSt0aGlzLnBvcztlbHNlIGlmKGU9PT1uLkZpeGVkMzIpdGhpcy5wb3MrPTQ7ZWxzZXtpZihlIT09bi5GaXhlZDY0KXRocm93IG5ldyBFcnJvcigiVW5pbXBsZW1lbnRlZCB0eXBlOiAiK2UpO3RoaXMucG9zKz04fX0sd3JpdGVUYWc6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVmFyaW50KHQ8PDN8ZSl9LHJlYWxsb2M6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMubGVuZ3RofHwxNjtlPHRoaXMucG9zK3Q7KWUqPTI7aWYoZSE9PXRoaXMubGVuZ3RoKXt2YXIgcj1uZXcgdihlKTt0aGlzLmJ1Zi5jb3B5KHIpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnNsaWNlKDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmLndyaXRlVUludDMyTEUodCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlU0ZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLHRoaXMuYnVmLndyaXRlSW50MzJMRSh0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSx0aGlzLmJ1Zi53cml0ZUludDMyTEUoLTEmdCx0aGlzLnBvcyksdGhpcy5idWYud3JpdGVVSW50MzJMRShNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSx0aGlzLmJ1Zi53cml0ZUludDMyTEUoLTEmdCx0aGlzLnBvcyksdGhpcy5idWYud3JpdGVJbnQzMkxFKE1hdGguZmxvb3IodCooMS80Mjk0OTY3Mjk2KSksdGhpcy5wb3MrNCksdGhpcy5wb3MrPTh9LHdyaXRlVmFyaW50OmZ1bmN0aW9uKHQpe2lmKCh0PSt0KT4yNjg0MzU0NTUpcmV0dXJuIHZvaWQgYSh0LHRoaXMpO3RoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmdHwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPTEyNyYodD4+Pj03KXwodD4xMjc/MTI4OjApLHQ8PTEyN3x8KHRoaXMuYnVmW3RoaXMucG9zKytdPXQ+Pj43JjEyNykpKX0sd3JpdGVTVmFyaW50OmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVWYXJpbnQodDwwPzIqLXQtMToyKnQpfSx3cml0ZUJvb2xlYW46ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludChCb29sZWFuKHQpKX0sd3JpdGVTdHJpbmc6ZnVuY3Rpb24odCl7dD1TdHJpbmcodCk7dmFyIGU9di5ieXRlTGVuZ3RoKHQpO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpLHRoaXMuYnVmLndyaXRlKHQsdGhpcy5wb3MpLHRoaXMucG9zKz1lfSx3cml0ZUZsb2F0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSx0aGlzLmJ1Zi53cml0ZUZsb2F0TEUodCx0aGlzLnBvcyksdGhpcy5wb3MrPTR9LHdyaXRlRG91YmxlOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSx0aGlzLmJ1Zi53cml0ZURvdWJsZUxFKHQsdGhpcy5wb3MpLHRoaXMucG9zKz04fSx3cml0ZUJ5dGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3RoaXMud3JpdGVWYXJpbnQoZSksdGhpcy5yZWFsbG9jKGUpO2Zvcih2YXIgcj0wO3I8ZTtyKyspdGhpcy5idWZbdGhpcy5wb3MrK109dFtyXX0sd3JpdGVSYXdNZXNzYWdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5wb3MrKzt2YXIgcj10aGlzLnBvczt0KGUsdGhpcyk7dmFyIG49dGhpcy5wb3MtcjtuPj0xMjgmJm8ocixuLHRoaXMpLHRoaXMucG9zPXItMSx0aGlzLndyaXRlVmFyaW50KG4pLHRoaXMucG9zKz1ufSx3cml0ZU1lc3NhZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMud3JpdGVUYWcodCxuLkJ5dGVzKSx0aGlzLndyaXRlUmF3TWVzc2FnZShlLHIpfSx3cml0ZVBhY2tlZFZhcmludDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQscyxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxsLGUpfSx3cml0ZVBhY2tlZEJvb2xlYW46ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGgsZSl9LHdyaXRlUGFja2VkRmxvYXQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LHUsZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZU1lc3NhZ2UodCxjLGUpfSx3cml0ZVBhY2tlZEZpeGVkMzI6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGYsZSl9LHdyaXRlUGFja2VkU0ZpeGVkMzI6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlTWVzc2FnZSh0LGQsZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQscCxlKX0sd3JpdGVQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVNZXNzYWdlKHQsbSxlKX0sd3JpdGVCeXRlc0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uQnl0ZXMpLHRoaXMud3JpdGVCeXRlcyhlKX0sd3JpdGVGaXhlZDMyRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDMyKSx0aGlzLndyaXRlRml4ZWQzMihlKX0sd3JpdGVTRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uRml4ZWQzMiksdGhpcy53cml0ZVNGaXhlZDMyKGUpfSx3cml0ZUZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxuLkZpeGVkNjQpLHRoaXMud3JpdGVGaXhlZDY0KGUpfSx3cml0ZVNGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDY0KSx0aGlzLndyaXRlU0ZpeGVkNjQoZSl9LHdyaXRlVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5WYXJpbnQpLHRoaXMud3JpdGVWYXJpbnQoZSl9LHdyaXRlU1ZhcmludEZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG4uVmFyaW50KSx0aGlzLndyaXRlU1ZhcmludChlKX0sd3JpdGVTdHJpbmdGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxuLkJ5dGVzKSx0aGlzLndyaXRlU3RyaW5nKGUpfSx3cml0ZUZsb2F0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDMyKSx0aGlzLndyaXRlRmxvYXQoZSl9LHdyaXRlRG91YmxlRmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsbi5GaXhlZDY0KSx0aGlzLndyaXRlRG91YmxlKGUpfSx3cml0ZUJvb2xlYW5GaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVWYXJpbnRGaWVsZCh0LEJvb2xlYW4oZSkpfX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9idWZmZXIiOjQ3NX1dLDQ3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8aSl7Zm9yKHZhciByPTEsbj0wO248ZTsrK24pZm9yKHZhciBvPTA7bzxuOysrbylpZih0W25dPHRbb10pcj0tcjtlbHNlIGlmKHRbbl09PT10W29dKXJldHVybiAwO3JldHVybiByfWZvcih2YXIgcz1hLm1hbGxvY1VpbnQ4KGUpLG49MDtuPGU7KytuKXNbbl09MDtmb3IodmFyIHI9MSxuPTA7bjxlOysrbilpZighc1tuXSl7dmFyIGw9MTtzW25dPTE7Zm9yKHZhciBvPXRbbl07byE9PW47bz10W29dKXtpZihzW29dKXJldHVybiBhLmZyZWVVaW50OChzKSwwO2wrPTEsc1tvXT0xfTEmbHx8KHI9LXIpfXJldHVybiBhLmZyZWVVaW50OChzKSxyfWUuZXhwb3J0cz1uO3ZhciBpPTMyLGE9dCgidHlwZWRhcnJheS1wb29sIil9LHsidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10Lmxlbmd0aDtzd2l0Y2goZSl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDtjYXNlIDI6cmV0dXJuIHRbMV19dmFyIHIsbixpLHM9YS5tYWxsb2NVaW50MzIoZSksbD1hLm1hbGxvY1VpbnQzMihlKSx1PTA7Zm9yKG8odCxsKSxpPTA7aTxlOysraSlzW2ldPXRbaV07Zm9yKGk9ZS0xO2k+MDstLWkpbj1sW2ldLHI9c1tpXSxzW2ldPXNbbl0sc1tuXT1yLGxbaV09bFtyXSxsW3JdPW4sdT0odStyKSppO3JldHVybiBhLmZyZWVVaW50MzIobCksYS5mcmVlVWludDMyKHMpLHV9ZnVuY3Rpb24gaSh0LGUscil7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gcnx8W107Y2FzZSAxOnJldHVybiByPyhyWzBdPTAscik6WzBdO2Nhc2UgMjpyZXR1cm4gcj8oZT8oclswXT0wLHJbMV09MSk6KHJbMF09MSxyWzFdPTApLHIpOmU/WzAsMV06WzEsMF19cj1yfHxuZXcgQXJyYXkodCk7dmFyIG4saSxhLG89MTtmb3IoclswXT0wLGE9MTthPHQ7KythKXJbYV09YSxvPW8qYXwwO2ZvcihhPXQtMTthPjA7LS1hKW49ZS9vfDAsZT1lLW4qb3wwLG89by9hfDAsaT0wfHJbYV0sclthXT0wfHJbbl0scltuXT0wfGk7cmV0dXJuIHJ9dmFyIGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJpbnZlcnQtcGVybXV0YXRpb24iKTtyLnJhbms9bixyLnVucmFuaz1pfSx7ImludmVydC1wZXJtdXRhdGlvbiI6MjkwLCJ0eXBlZGFycmF5LXBvb2wiOjUzOX1dLDQ3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3ZhciByPXNbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIG4odCxuLGEpe2Zvcih2YXIgbyxsLHUsYz0wO2M8MjsrK2MpaWYoc1tjXVtuXS5sZW5ndGg+MCl7bz1zW2NdW25dWzBdLHU9YzticmVha31sPW9bMV51XTtmb3IodmFyIGg9MDtoPDI7KytoKWZvcih2YXIgZj1zW2hdW25dLGQ9MDtkPGYubGVuZ3RoOysrZCl7dmFyIHA9ZltkXSxtPXBbMV5oXSx2PWkoZVt0XSxlW25dLGVbbF0sZVttXSk7dj4wJiYobz1wLGw9bSx1PWgpfXJldHVybiBhP2w6KG8mJnIobyx1KSxsKX1mb3IodmFyIGE9MHxlLmxlbmd0aCxvPXQubGVuZ3RoLHM9W25ldyBBcnJheShhKSxuZXcgQXJyYXkoYSldLGw9MDtsPGE7KytsKXNbMF1bbF09W10sc1sxXVtsXT1bXTtmb3IodmFyIGw9MDtsPG87KytsKXt2YXIgdT10W2xdO3NbMF1bdVswXV0ucHVzaCh1KSxzWzFdW3VbMV1dLnB1c2godSl9Zm9yKHZhciBjPVtdLGw9MDtsPGE7KytsKXNbMF1bbF0ubGVuZ3RoK3NbMV1bbF0ubGVuZ3RoPT09MCYmYy5wdXNoKFtsXSk7Zm9yKHZhciBsPTA7bDxhOysrbClmb3IodmFyIGg9MDtoPDI7KytoKXtmb3IodmFyIGY9W107c1toXVtsXS5sZW5ndGg+MDspe3ZhciBkPShzWzBdW2xdLmxlbmd0aCxmdW5jdGlvbih0LGEpe3ZhciBvPXNbYV1bdF1bMF0sbD1bdF07cihvLGEpO2Zvcih2YXIgdT1vWzFeYV07Oyl7Zm9yKDt1IT09dDspbC5wdXNoKHUpLHU9bihsW2wubGVuZ3RoLTJdLHUsITEpO2lmKHNbMF1bdF0ubGVuZ3RoK3NbMV1bdF0ubGVuZ3RoPT09MClicmVhazt2YXIgYz1sW2wubGVuZ3RoLTFdLGg9dCxmPWxbMV0sZD1uKGMsaCwhMCk7aWYoaShlW2NdLGVbaF0sZVtmXSxlW2RdKTwwKWJyZWFrO2wucHVzaCh0KSx1PW4oYyxoKX1yZXR1cm4gbH0obCxoKSk7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMV09PT1lW2UubGVuZ3RoLTFdfShmLGQpPyhmLmxlbmd0aD4wJiZjLnB1c2goZiksZj1kKTpmLnB1c2guYXBwbHkoZixkKX1mLmxlbmd0aD4wJiZjLnB1c2goZil9cmV0dXJuIGN9ZS5leHBvcnRzPW47dmFyIGk9dCgiY29tcGFyZS1hbmdsZSIpfSx7ImNvbXBhcmUtYW5nbGUiOjk4fV0sNDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9aSh0LGUubGVuZ3RoKSxuPW5ldyBBcnJheShlLmxlbmd0aCksYT1uZXcgQXJyYXkoZS5sZW5ndGgpLG89W10scz0wO3M8ZS5sZW5ndGg7KytzKXt2YXIgbD1yW3NdLmxlbmd0aDthW3NdPWwsbltzXT0hMCxsPD0xJiZvLnB1c2gocyl9Zm9yKDtvLmxlbmd0aD4wOyl7dmFyIHU9by5wb3AoKTtuW3VdPSExO2Zvcih2YXIgYz1yW3VdLHM9MDtzPGMubGVuZ3RoOysrcyl7dmFyIGg9Y1tzXTswPT0tLWFbaF0mJm8ucHVzaChoKX19Zm9yKHZhciBmPW5ldyBBcnJheShlLmxlbmd0aCksZD1bXSxzPTA7czxlLmxlbmd0aDsrK3MpaWYobltzXSl7dmFyIHU9ZC5sZW5ndGg7ZltzXT11LGQucHVzaChlW3NdKX1lbHNlIGZbc109LTE7Zm9yKHZhciBwPVtdLHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIG09dFtzXTtuW21bMF1dJiZuW21bMV1dJiZwLnB1c2goW2ZbbVswXV0sZlttWzFdXV0pfXJldHVybltwLGRdfWUuZXhwb3J0cz1uO3ZhciBpPXQoImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0Iil9LHsiZWRnZXMtdG8tYWRqYWNlbmN5LWxpc3QiOjEyNX1dLDQ4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09W107cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciByPXQubGVuZ3RoLG49WzBdLGk9MDtpPHI7KytpKXt2YXIgYT1lW3RbaV1dLG89ZVt0WyhpKzEpJXJdXSxzPXUoLWFbMF0sYVsxXSksbD11KC1hWzBdLG9bMV0pLGg9dShvWzBdLGFbMV0pLGY9dShvWzBdLG9bMV0pO249YyhuLGMoYyhzLGwpLGMoaCxmKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdPjB9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0wO3I8ZTsrK3IpaWYoIVBbdFtyXV0pcmV0dXJuITE7cmV0dXJuITB9dmFyIGQ9Zih0LGUpO3Q9ZFswXSxlPWRbMV07Zm9yKHZhciBwPWUubGVuZ3RoLG09KHQubGVuZ3RoLG8odCxlLmxlbmd0aCkpLHY9MDt2PHA7Kyt2KWlmKG1bdl0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZz1zKHQsZSk7Zz1nLmZpbHRlcihyKTtmb3IodmFyIHk9Zy5sZW5ndGgsYj1uZXcgQXJyYXkoeSkseD1uZXcgQXJyYXkoeSksdj0wO3Y8eTsrK3Ype2Jbdl09djt2YXIgXz1uZXcgQXJyYXkoeSksdz1nW3ZdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLE09bChbd10pLGs9MDt0OmZvcih2YXIgQT0wO0E8eTsrK0EpaWYoX1tBXT0wLHYhPT1BKXtmb3IodmFyIFQ9Z1tBXSxTPVQubGVuZ3RoLEU9MDtFPFM7KytFKXt2YXIgTD1NKGVbVFtFXV0pO2lmKDAhPT1MKXtMPDAmJihfW0FdPTEsays9MSk7Y29udGludWUgdH19X1tBXT0xLGsrPTF9eFt2XT1bayx2LF9dfXguc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19KTtmb3IodmFyIHY9MDt2PHk7Kyt2KWZvcih2YXIgXz14W3ZdLEM9X1sxXSx6PV9bMl0sQT0wO0E8eTsrK0EpeltBXSYmKGJbQV09Qyk7Zm9yKHZhciBJPWkoeSksdj0wO3Y8eTsrK3YpSVt2XS5wdXNoKGJbdl0pLElbYlt2XV0ucHVzaCh2KTtmb3IodmFyIEQ9e30sUD1uKHAsITEpLHY9MDt2PHk7Kyt2KWZvcih2YXIgVD1nW3ZdLFM9VC5sZW5ndGgsQT0wO0E8UzsrK0Epe3ZhciBPPVRbQV0sUj1UWyhBKzEpJVNdLEY9TWF0aC5taW4oTyxSKSsiOiIrTWF0aC5tYXgoTyxSKTtpZihGIGluIEQpe3ZhciBqPURbRl07SVtqXS5wdXNoKHYpLElbdl0ucHVzaChqKSxQW09dPVBbUl09ITB9ZWxzZSBEW0ZdPXZ9Zm9yKHZhciBOPVtdLEI9bih5LC0xKSx2PTA7djx5OysrdiliW3ZdIT09dnx8YShnW3ZdKT9CW3ZdPS0xOihOLnB1c2godiksQlt2XT0wKTtmb3IodmFyIGQ9W107Ti5sZW5ndGg+MDspe3ZhciBVPU4ucG9wKCksVj1JW1VdO2goVixmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KTt2YXIgSCxxPVYubGVuZ3RoLEc9QltVXTtpZigwPT09Ryl7dmFyIFQ9Z1tVXTtIPVtUXX1mb3IodmFyIHY9MDt2PHE7Kyt2KXt2YXIgWT1WW3ZdO2lmKCEoQltZXT49MCkmJihCW1ldPTFeRyxOLnB1c2goWSksMD09PUcpKXt2YXIgVD1nW1ldO2EoVCl8fChULnJldmVyc2UoKSxILnB1c2goVCkpfX0wPT09RyYmZC5wdXNoKEgpfXJldHVybiBkfWUuZXhwb3J0cz1hO3ZhciBvPXQoImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0Iikscz10KCJwbGFuYXItZHVhbCIpLGw9dCgicG9pbnQtaW4tYmlnLXBvbHlnb24iKSx1PXQoInR3by1wcm9kdWN0IiksYz10KCJyb2J1c3Qtc3VtIiksaD10KCJ1bmlxIiksZj10KCIuL2xpYi90cmltLWxlYXZlcyIpfSx7Ii4vbGliL3RyaW0tbGVhdmVzIjo0ODAsImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxMjUsInBsYW5hci1kdWFsIjo0NzksInBvaW50LWluLWJpZy1wb2x5Z29uIjo0ODMsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzNyx1bmlxOjU0MX1dLDQ4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMueCx0aGlzLnkpfSxhZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHQpfSxzdWI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3ViKHQpfSxtdWx0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHQodCl9LGRpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXYodCl9LHJvdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3RhdGUodCl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LApfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxuLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgbih0WzBdLHRbMV0pOnR9fSx7fV0sNDgzOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiEwfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIGk9dFtlXTtyZXR1cm4hIWkmJiEhaS5xdWVyeVBvaW50KHIsbil9fWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXSxhPW5bMF1bMF0sbz1uWzBdWzFdLHM9blsxXVsxXSxsPVtNYXRoLm1pbihvLHMpLE1hdGgubWF4KG8scyldO2EgaW4gZT9lW2FdLnB1c2gobCk6ZVthXT1bbF19Zm9yKHZhciB1PXt9LGM9T2JqZWN0LmtleXMoZSkscj0wO3I8Yy5sZW5ndGg7KytyKXt2YXIgaD1lW2Nbcl1dO3VbY1tyXV09ZChoKX1yZXR1cm4gaSh1KX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXAubGUoZSxyWzBdKTtpZihuPDApcmV0dXJuIDE7dmFyIGk9dFtuXTtpZighaSl7aWYoIShuPjAmJmVbbl09PT1yWzBdKSlyZXR1cm4gMTtpPXRbbi0xXX1mb3IodmFyIGE9MTtpOyl7dmFyIG89aS5rZXkscz1oKHIsb1swXSxvWzFdKTtpZihvWzBdWzBdPG9bMV1bMF0paWYoczwwKWk9aS5sZWZ0O2Vsc2V7aWYoIShzPjApKXJldHVybiAwO2E9LTEsaT1pLnJpZ2h0fWVsc2UgaWYocz4wKWk9aS5sZWZ0O2Vsc2V7aWYoIShzPDApKXJldHVybiAwO2E9MSxpPWkucmlnaHR9fXJldHVybiBhfX1mdW5jdGlvbiBzKHQpe3JldHVybiAxfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGVbMF0sZVsxXSk/MDoxfX1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHJbMF0sclsxXSk/MDplKHIpfX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLG49W10saT0wO2k8ZTsrK2kpZm9yKHZhciBjPXRbaV0saD1jLmxlbmd0aCxkPWgtMSxwPTA7cDxoO2Q9cCsrKXt2YXIgbT1jW2RdLHY9Y1twXTttWzBdPT09dlswXT9uLnB1c2goW20sdl0pOnIucHVzaChbbSx2XSl9aWYoMD09PXIubGVuZ3RoKXJldHVybiAwPT09bi5sZW5ndGg/czpsKGEobikpO3ZhciBnPWYocikseT1vKGcuc2xhYnMsZy5jb29yZGluYXRlcyk7cmV0dXJuIDA9PT1uLmxlbmd0aD95OnUoYShuKSx5KX1lLmV4cG9ydHM9Yzt2YXIgaD10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXSxmPXQoInNsYWItZGVjb21wb3NpdGlvbiIpLGQ9dCgiaW50ZXJ2YWwtdHJlZS0xZCIpLHA9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6NjQsImludGVydmFsLXRyZWUtMWQiOjI4OSwicm9idXN0LW9yaWVudGF0aW9uIjo1MDYsInNsYWItZGVjb21wb3NpdGlvbiI6NTIzfV0sNDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixzKXtpLmxlbmd0aDxuLmxlbmd0aCYmKGk9bmV3IEZsb2F0NjRBcnJheShuLmxlbmd0aCksYT1uZXcgRmxvYXQ2NEFycmF5KG4ubGVuZ3RoKSxvPW5ldyBGbG9hdDY0QXJyYXkobi5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoOysrbClpW2xdPXRbbF0tbltsXSxhW2xdPWVbbF0tdFtsXSxvW2xdPXJbbF0tdFtsXTtmb3IodmFyIHU9MCxjPTAsaD0wLGY9MCxkPTAscD0wLGw9MDtsPG4ubGVuZ3RoOysrbCl7dmFyIG09YVtsXSx2PW9bbF0sZz1pW2xdO3UrPW0qbSxjKz1tKnYsaCs9dip2LGYrPWcqbSxkKz1nKnYscCs9ZypnfXZhciB5LGI9TWF0aC5hYnModSpoLWMqYykseD1jKmQtaCpmLF89YypmLXUqZDtpZih4K188PWIpaWYoeDwwKV88MCYmZjwwPyhfPTAsLWY+PXU/KHg9MSx5PXUrMipmK3ApOih4PS1mL3UseT1mKngrcCkpOih4PTAsZD49MD8oXz0wLHk9cCk6LWQ+PWg/KF89MSx5PWgrMipkK3ApOihfPS1kL2gseT1kKl8rcCkpO2Vsc2UgaWYoXzwwKV89MCxmPj0wPyh4PTAseT1wKTotZj49dT8oeD0xLHk9dSsyKmYrcCk6KHg9LWYvdSx5PWYqeCtwKTtlbHNle3ZhciB3PTEvYjt4Kj13LF8qPXcseT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3B9ZWxzZXt2YXIgTSxrLEEsVDt4PDA/KE09YytmLGs9aCtkLGs+TT8oQT1rLU0sVD11LTIqYytoLEE+PVQ/KHg9MSxfPTAseT11KzIqZitwKTooeD1BL1QsXz0xLXgseT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3ApKTooeD0wLGs8PTA/KF89MSx5PWgrMipkK3ApOmQ+PTA/KF89MCx5PXApOihfPS1kL2gseT1kKl8rcCkpKTpfPDA/KE09YytkLGs9dStmLGs+TT8oQT1rLU0sVD11LTIqYytoLEE+PVQ/KF89MSx4PTAseT1oKzIqZCtwKTooXz1BL1QseD0xLV8seT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3ApKTooXz0wLGs8PTA/KHg9MSx5PXUrMipmK3ApOmY+PTA/KHg9MCx5PXApOih4PS1mL3UseT1mKngrcCkpKTooQT1oK2QtYy1mLEE8PTA/KHg9MCxfPTEseT1oKzIqZCtwKTooVD11LTIqYytoLEE+PVQ/KHg9MSxfPTAseT11KzIqZitwKTooeD1BL1QsXz0xLXgseT14Kih1KngrYypfKzIqZikrXyooYyp4K2gqXysyKmQpK3ApKSl9Zm9yKHZhciBTPTEteC1fLGw9MDtsPG4ubGVuZ3RoOysrbClzW2xdPVMqdFtsXSt4KmVbbF0rXypyW2xdO3JldHVybiB5PDA/MDp5fXZhciBpPW5ldyBGbG9hdDY0QXJyYXkoNCksYT1uZXcgRmxvYXQ2NEFycmF5KDQpLG89bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9bn0se31dLDQ4NTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBpKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBhKHQpe2lmKGg9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKGg9PT1ufHwhaCkmJnNldFRpbWVvdXQpcmV0dXJuIGg9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBoKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBoLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBoLmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gbyh0KXtpZihmPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGY9PT1pfHwhZikmJmNsZWFyVGltZW91dClyZXR1cm4gZj1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gZih0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGYuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBmLmNhbGwodGhpcyx0KX19fWZ1bmN0aW9uIHMoKXt2JiZwJiYodj0hMSxwLmxlbmd0aD9tPXAuY29uY2F0KG0pOmc9LTEsbS5sZW5ndGgmJmwoKSl9ZnVuY3Rpb24gbCgpe2lmKCF2KXt2YXIgdD1hKHMpO3Y9ITA7Zm9yKHZhciBlPW0ubGVuZ3RoO2U7KXtmb3IocD1tLG09W107KytnPGU7KXAmJnBbZ10ucnVuKCk7Zz0tMSxlPW0ubGVuZ3RofXA9bnVsbCx2PSExLG8odCl9fWZ1bmN0aW9uIHUodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBjKCl7fXZhciBoLGYsZD1lLmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2g9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpufWNhdGNoKHQpe2g9bn10cnl7Zj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDppfWNhdGNoKHQpe2Y9aX19KCk7dmFyIHAsbT1bXSx2PSExLGc9LTE7ZC5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllW3ItMV09YXJndW1lbnRzW3JdO20ucHVzaChuZXcgdSh0LGUpKSwxIT09bS5sZW5ndGh8fHZ8fGEobCl9LHUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGQudGl0bGU9ImJyb3dzZXIiLGQuYnJvd3Nlcj0hMCxkLmVudj17fSxkLmFyZ3Y9W10sZC52ZXJzaW9uPSIiLGQudmVyc2lvbnM9e30sZC5vbj1jLGQuYWRkTGlzdGVuZXI9YyxkLm9uY2U9YyxkLm9mZj1jLGQucmVtb3ZlTGlzdGVuZXI9YyxkLnJlbW92ZUFsbExpc3RlbmVycz1jLGQuZW1pdD1jLGQucHJlcGVuZExpc3RlbmVyPWMsZC5wcmVwZW5kT25jZUxpc3RlbmVyPWMsZC5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGQuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGQuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxkLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGQudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LHt9XSw0ODY6W2Z1bmN0aW9uKGUscixuKXsoZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIGEodCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoUFt0XSl9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVtdO3ItLTspbltyXT1lKHRbcl0pO3JldHVybiBufWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LnNwbGl0KCJAIiksbj0iIjtyZXR1cm4gci5sZW5ndGg+MSYmKG49clswXSsiQCIsdD1yWzFdKSx0PXQucmVwbGFjZShELCIuIiksbitvKHQuc3BsaXQoIi4iKSxlKS5qb2luKCIuIil9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGUscixuPVtdLGk9MCxhPXQubGVuZ3RoO2k8YTspZT10LmNoYXJDb2RlQXQoaSsrKSxlPj01NTI5NiYmZTw9NTYzMTkmJmk8YT8ocj10LmNoYXJDb2RlQXQoaSsrKSw1NjMyMD09KDY0NTEyJnIpP24ucHVzaCgoKDEwMjMmZSk8PDEwKSsoMTAyMyZyKSs2NTUzNik6KG4ucHVzaChlKSxpLS0pKTpuLnB1c2goZSk7cmV0dXJuIG59ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbyh0LGZ1bmN0aW9uKHQpe3ZhciBlPSIiO3JldHVybiB0PjY1NTM1JiYodC09NjU1MzYsZSs9Rih0Pj4+MTAmMTAyM3w1NTI5NiksdD01NjMyMHwxMDIzJnQpLGUrPUYodCl9KS5qb2luKCIiKX1mdW5jdGlvbiBjKHQpe3JldHVybiB0LTQ4PDEwP3QtMjI6dC02NTwyNj90LTY1OnQtOTc8MjY/dC05NzpNfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCsyMis3NSoodDwyNiktKCgwIT1lKTw8NSl9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49MDtmb3IodD1yP1IodC9TKTp0Pj4xLHQrPVIodC9lKTt0Pk8qQT4+MTtuKz1NKXQ9Uih0L08pO3JldHVybiBSKG4rKE8rMSkqdC8odCtUKSl9ZnVuY3Rpb24gZCh0KXt2YXIgZSxyLG4saSxvLHMsbCxoLGQscCxtPVtdLHY9dC5sZW5ndGgsZz0wLHk9TCxiPUU7Zm9yKHI9dC5sYXN0SW5kZXhPZihDKSxyPDAmJihyPTApLG49MDtuPHI7KytuKXQuY2hhckNvZGVBdChuKT49MTI4JiZhKCJub3QtYmFzaWMiKSxtLnB1c2godC5jaGFyQ29kZUF0KG4pKTtmb3IoaT1yPjA/cisxOjA7aTx2Oyl7Zm9yKG89ZyxzPTEsbD1NO2k+PXYmJmEoImludmFsaWQtaW5wdXQiKSxoPWModC5jaGFyQ29kZUF0KGkrKykpLChoPj1NfHxoPlIoKHctZykvcykpJiZhKCJvdmVyZmxvdyIpLGcrPWgqcyxkPWw8PWI/azpsPj1iK0E/QTpsLWIsIShoPGQpO2wrPU0pcD1NLWQscz5SKHcvcCkmJmEoIm92ZXJmbG93Iikscyo9cDtlPW0ubGVuZ3RoKzEsYj1mKGctbyxlLDA9PW8pLFIoZy9lKT53LXkmJmEoIm92ZXJmbG93IikseSs9UihnL2UpLGclPWUsbS5zcGxpY2UoZysrLDAseSl9cmV0dXJuIHUobSl9ZnVuY3Rpb24gcCh0KXt2YXIgZSxyLG4saSxvLHMsdSxjLGQscCxtLHYsZyx5LGIseD1bXTtmb3IodD1sKHQpLHY9dC5sZW5ndGgsZT1MLHI9MCxvPUUscz0wO3M8djsrK3MpKG09dFtzXSk8MTI4JiZ4LnB1c2goRihtKSk7Zm9yKG49aT14Lmxlbmd0aCxpJiZ4LnB1c2goQyk7bjx2Oyl7Zm9yKHU9dyxzPTA7czx2OysrcykobT10W3NdKT49ZSYmbTx1JiYodT1tKTtmb3IoZz1uKzEsdS1lPlIoKHctcikvZykmJmEoIm92ZXJmbG93Iikscis9KHUtZSkqZyxlPXUscz0wO3M8djsrK3MpaWYobT10W3NdLG08ZSYmKytyPncmJmEoIm92ZXJmbG93IiksbT09ZSl7Zm9yKGM9cixkPU07cD1kPD1vP2s6ZD49bytBP0E6ZC1vLCEoYzxwKTtkKz1NKWI9Yy1wLHk9TS1wLHgucHVzaChGKGgocCtiJXksMCkpKSxjPVIoYi95KTt4LnB1c2goRihoKGMsMCkpKSxvPWYocixnLG49PWkpLHI9MCwrK259KytyLCsrZX1yZXR1cm4geC5qb2luKCIiKX1mdW5jdGlvbiBtKHQpe3JldHVybiBzKHQsZnVuY3Rpb24odCl7cmV0dXJuIHoudGVzdCh0KT9kKHQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6dH0pfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHModCxmdW5jdGlvbih0KXtyZXR1cm4gSS50ZXN0KHQpPyJ4bi0tIitwKHQpOnR9KX12YXIgZz0ib2JqZWN0Ij09dHlwZW9mIG4mJm4mJiFuLm5vZGVUeXBlJiZuLHk9Im9iamVjdCI9PXR5cGVvZiByJiZyJiYhci5ub2RlVHlwZSYmcixiPSJvYmplY3QiPT10eXBlb2YgZSYmZTtiLmdsb2JhbCE9PWImJmIud2luZG93IT09YiYmYi5zZWxmIT09Ynx8KGk9Yik7dmFyIHgsXyx3PTIxNDc0ODM2NDcsTT0zNixrPTEsQT0yNixUPTM4LFM9NzAwLEU9NzIsTD0xMjgsQz0iLSIsej0vXnhuLS0vLEk9L1teXHgyMC1ceDdFXS8sRD0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csUD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sTz1NLWssUj1NYXRoLmZsb29yLEY9U3RyaW5nLmZyb21DaGFyQ29kZTtpZih4PXt2ZXJzaW9uOiIxLjQuMSIsdWNzMjp7ZGVjb2RlOmwsZW5jb2RlOnV9LGRlY29kZTpkLGVuY29kZTpwLHRvQVNDSUk6dix0b1VuaWNvZGU6bX0sImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJvYmplY3QiPT10eXBlb2YgdC5hbWQmJnQuYW1kKXQoInB1bnljb2RlIixmdW5jdGlvbigpe3JldHVybiB4fSk7ZWxzZSBpZihnJiZ5KWlmKHIuZXhwb3J0cz09Zyl5LmV4cG9ydHM9eDtlbHNlIGZvcihfIGluIHgpeC5oYXNPd25Qcm9wZXJ0eShfKSYmKGdbX109eFtfXSk7ZWxzZSBpLnB1bnljb2RlPXh9KHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDg3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImdsLXF1YXQvc2xlcnAiKX0seyJnbC1xdWF0L3NsZXJwIjoyMjl9XSw0ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHwiJiIscj1yfHwiPSI7dmFyIG89e307aWYoInN0cmluZyIhPXR5cGVvZiB0fHwwPT09dC5sZW5ndGgpcmV0dXJuIG87dmFyIHM9L1wrL2c7dD10LnNwbGl0KGUpO3ZhciBsPTFlMzthJiYibnVtYmVyIj09dHlwZW9mIGEubWF4S2V5cyYmKGw9YS5tYXhLZXlzKTt2YXIgdT10Lmxlbmd0aDtsPjAmJnU+bCYmKHU9bCk7Zm9yKHZhciBjPTA7Yzx1OysrYyl7dmFyIGgsZixkLHAsbT10W2NdLnJlcGxhY2UocywiJTIwIiksdj1tLmluZGV4T2Yocik7dj49MD8oaD1tLnN1YnN0cigwLHYpLGY9bS5zdWJzdHIodisxKSk6KGg9bSxmPSIiKSxkPWRlY29kZVVSSUNvbXBvbmVudChoKSxwPWRlY29kZVVSSUNvbXBvbmVudChmKSxuKG8sZCk/aShvW2RdKT9vW2RdLnB1c2gocCk6b1tkXT1bb1tkXSxwXTpvW2RdPXB9cmV0dXJuIG99O3ZhciBpPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9fSx7fV0sNDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZih0Lm1hcClyZXR1cm4gdC5tYXAoZSk7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKylyLnB1c2goZSh0W25dLG4pKTtyZXR1cm4gcn12YXIgaT1mdW5jdGlvbih0KXtzd2l0Y2godHlwZW9mIHQpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gdDtjYXNlImJvb2xlYW4iOnJldHVybiB0PyJ0cnVlIjoiZmFsc2UiO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNGaW5pdGUodCk/dDoiIjtkZWZhdWx0OnJldHVybiIifX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3JldHVybiBlPWV8fCImIixyPXJ8fCI9IixudWxsPT09dCYmKHQ9dm9pZCAwKSwib2JqZWN0Ij09dHlwZW9mIHQ/bihvKHQpLGZ1bmN0aW9uKG8pe3ZhciBzPWVuY29kZVVSSUNvbXBvbmVudChpKG8pKStyO3JldHVybiBhKHRbb10pP24odFtvXSxmdW5jdGlvbih0KXtyZXR1cm4gcytlbmNvZGVVUklDb21wb25lbnQoaSh0KSl9KS5qb2luKGUpOnMrZW5jb2RlVVJJQ29tcG9uZW50KGkodFtvXSkpfSkuam9pbihlKTpzP2VuY29kZVVSSUNvbXBvbmVudChpKHMpKStyK2VuY29kZVVSSUNvbXBvbmVudChpKHQpKToiIn07dmFyIGE9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0sbz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQscikmJmUucHVzaChyKTtyZXR1cm4gZX19LHt9XSw0OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWNvZGU9ci5wYXJzZT10KCIuL2RlY29kZSIpLHIuZW5jb2RlPXIuc3RyaW5naWZ5PXQoIi4vZW5jb2RlIil9LHsiLi9kZWNvZGUiOjQ4OCwiLi9lbmNvZGUiOjQ4OX1dLDQ5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG8scyl7Zm9yKHI9cnx8MCxvPW98fHQubGVuZ3RoLTEscz1zfHxhO28+cjspe2lmKG8tcj42MDApe3ZhciBsPW8tcisxLHU9ZS1yKzEsYz1NYXRoLmxvZyhsKSxoPS41Kk1hdGguZXhwKDIqYy8zKSxmPS41Kk1hdGguc3FydChjKmgqKGwtaCkvbCkqKHUtbC8yPDA/LTE6MSk7bih0LGUsTWF0aC5tYXgocixNYXRoLmZsb29yKGUtdSpoL2wrZikpLE1hdGgubWluKG8sTWF0aC5mbG9vcihlKyhsLXUpKmgvbCtmKSkscyl9dmFyIGQ9dFtlXSxwPXIsbT1vO2ZvcihpKHQscixlKSxzKHRbb10sZCk+MCYmaSh0LHIsbyk7cDxtOyl7Zm9yKGkodCxwLG0pLHArKyxtLS07cyh0W3BdLGQpPDA7KXArKztmb3IoO3ModFttXSxkKT4wOyltLS19MD09PXModFtyXSxkKT9pKHQscixtKToobSsrLGkodCxtLG8pKSxtPD1lJiYocj1tKzEpLGU8PW0mJihvPW0tMSl9fWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTowfWUuZXhwb3J0cz1ufSx7fV0sNDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpblthXT1pKHRbYV0sZVthXSk7cmV0dXJuIG59dmFyIGk9dCgiYmlnLXJhdC9hZGQiKTtlLmV4cG9ydHM9bn0seyJiaWctcmF0L2FkZCI6NDh9XSw0OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1pKHRbcl0pO3JldHVybiBlfWUuZXhwb3J0cz1uO3ZhciBpPXQoImJpZy1yYXQiKX0seyJiaWctcmF0Ijo1MX1dLDQ5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPWkoZSksbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylvW3NdPWEodFtzXSxyKTtyZXR1cm4gb312YXIgaT10KCJiaWctcmF0IiksYT10KCJiaWctcmF0L211bCIpO2UuZXhwb3J0cz1ufSx7ImJpZy1yYXQiOjUxLCJiaWctcmF0L211bCI6NjB9XSw0OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSluW2FdPWkodFthXSxlW2FdKTtyZXR1cm4gbn12YXIgaT10KCJiaWctcmF0L3N1YiIpO2UuZXhwb3J0cz1ufSx7ImJpZy1yYXQvc3ViIjo2Mn1dLDQ5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3Quc29ydChhKTtmb3IodmFyIGU9dC5sZW5ndGgscj0wLG49MDtuPGU7KytuKXt2YXIgcz10W25dLGw9byhzKTtpZigwIT09bCl7aWYocj4wKXt2YXIgdT10W3ItMV07aWYoMD09PWkocyx1KSYmbyh1KSE9PWwpe3ItPTE7Y29udGludWV9fXRbcisrXT1zfX1yZXR1cm4gdC5sZW5ndGg9cix0fXZhciBpPXQoImNvbXBhcmUtY2VsbCIpLGE9dCgiY29tcGFyZS1vcmllbnRlZC1jZWxsIiksbz10KCJjZWxsLW9yaWVudGF0aW9uIik7ZS5leHBvcnRzPW59LHsiY2VsbC1vcmllbnRhdGlvbiI6ODMsImNvbXBhcmUtY2VsbCI6OTksImNvbXBhcmUtb3JpZW50ZWQtY2VsbCI6MTAwfV0sNDk3OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP3IuZXhwb3J0cz1pKCk6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoaSk6ZS5jcmVhdGVSRUdMPWkoKX0odGhpcyxmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYnRvYT9idG9hKHQpOiJiYXNlNjQ6Iit0fWZ1bmN0aW9uIGUodCl7dmFyIGU9bmV3IEVycm9yKCIocmVnbCkgIit0KTt0aHJvdyBjb25zb2xlLmVycm9yKGUpLGV9ZnVuY3Rpb24gcih0LHIpe3R8fGUocil9ZnVuY3Rpb24gbih0KXtyZXR1cm4gdD8iOiAiK3Q6IiJ9ZnVuY3Rpb24gaSh0LHIsaSl7dCBpbiByfHxlKCJ1bmtub3duIHBhcmFtZXRlciAoIit0KyIpIituKGkpKyIuIHBvc3NpYmxlIHZhbHVlczogIitPYmplY3Qua2V5cyhyKS5qb2luKCkpfWZ1bmN0aW9uIGEodCxyKXtRdCh0KXx8ZSgiaW52YWxpZCBwYXJhbWV0ZXIgdHlwZSIrbihyKSsiLiBtdXN0IGJlIGEgdHlwZWQgYXJyYXkiKX1mdW5jdGlvbiBvKHQscixpKXt0eXBlb2YgdCE9PXImJmUoImludmFsaWQgcGFyYW1ldGVyIHR5cGUiK24oaSkrIi4gZXhwZWN0ZWQgIityKyIsIGdvdCAiK3R5cGVvZiB0KX1mdW5jdGlvbiBzKHQscil7dD49MCYmKDB8dCk9PT10fHxlKCJpbnZhbGlkIHBhcmFtZXRlciB0eXBlLCAoIit0KyIpIituKHIpKyIuIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIil9ZnVuY3Rpb24gbCh0LHIsaSl7ci5pbmRleE9mKHQpPDAmJmUoImludmFsaWQgdmFsdWUiK24oaSkrIi4gbXVzdCBiZSBvbmUgb2Y6ICIrcil9ZnVuY3Rpb24gdSh0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RlLmluZGV4T2YodCk8MCYmZSgnaW52YWxpZCByZWdsIGNvbnN0cnVjdG9yIGFyZ3VtZW50ICInK3QrJyIuIG11c3QgYmUgb25lIG9mICcrdGUpfSl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih0Kz0iIjt0Lmxlbmd0aDxlOyl0PSIgIit0O3JldHVybiB0fWZ1bmN0aW9uIGgoKXt0aGlzLm5hbWU9InVua25vd24iLHRoaXMubGluZXM9W10sdGhpcy5pbmRleD17fSx0aGlzLmhhc0Vycm9ycz0hMX1mdW5jdGlvbiBmKHQsZSl7dGhpcy5udW1iZXI9dCx0aGlzLmxpbmU9ZSx0aGlzLmVycm9ycz1bXX1mdW5jdGlvbiBkKHQsZSxyKXt0aGlzLmZpbGU9dCx0aGlzLmxpbmU9ZSx0aGlzLm1lc3NhZ2U9cn1mdW5jdGlvbiBwKCl7dmFyIHQ9bmV3IEVycm9yLGU9KHQuc3RhY2t8fHQpLnRvU3RyaW5nKCkscj0vY29tcGlsZVByb2NlZHVyZS4qXG5ccyphdC4qXCgoLiopXCkvLmV4ZWMoZSk7aWYocilyZXR1cm4gclsxXTt2YXIgbj0vY29tcGlsZVByb2NlZHVyZS4qXG5ccyphdFxzKyguKikoXG58JCkvLmV4ZWMoZSk7cmV0dXJuIG4/blsxXToidW5rbm93biJ9ZnVuY3Rpb24gbSgpe3ZhciB0PW5ldyBFcnJvcixlPSh0LnN0YWNrfHx0KS50b1N0cmluZygpLHI9L2F0IFJFR0xDb21tYW5kLipcblxzK2F0LipcKCguKilcKS8uZXhlYyhlKTtpZihyKXJldHVybiByWzFdO3ZhciBuPS9hdCBSRUdMQ29tbWFuZC4qXG5ccythdFxzKyguKilcbi8uZXhlYyhlKTtyZXR1cm4gbj9uWzFdOiJ1bmtub3duIn1mdW5jdGlvbiB2KGUscil7dmFyIG49ZS5zcGxpdCgiXG4iKSxpPTEsYT0wLG89e3Vua25vd246bmV3IGgsMDpuZXcgaH07by51bmtub3duLm5hbWU9b1swXS5uYW1lPXJ8fHAoKSxvLnVua25vd24ubGluZXMucHVzaChuZXcgZigwLCIiKSk7Zm9yKHZhciBzPTA7czxuLmxlbmd0aDsrK3Mpe3ZhciBsPW5bc10sdT0vXlxzKlwjXHMqKFx3KylccysoLispXHMqJC8uZXhlYyhsKTtpZih1KXN3aXRjaCh1WzFdKXtjYXNlImxpbmUiOnZhciBjPS8oXGQrKShccytcZCspPy8uZXhlYyh1WzJdKTtjJiYoaT0wfGNbMV0sY1syXSYmKChhPTB8Y1syXSlpbiBvfHwob1thXT1uZXcgaCkpKTticmVhaztjYXNlImRlZmluZSI6dmFyIGQ9L1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKikkLy5leGVjKHVbMl0pO2QmJihvW2FdLm5hbWU9ZFsxXT90KGRbMl0pOmRbMl0pfW9bYV0ubGluZXMucHVzaChuZXcgZihpKyssbCkpfXJldHVybiBPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW9bdF07ZS5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UuaW5kZXhbdC5udW1iZXJdPXR9KX0pLG99ZnVuY3Rpb24gZyh0KXt2YXIgZT1bXTtyZXR1cm4gdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8NSkpe3ZhciByPS9eRVJST1JcOlxzKyhcZCspXDooXGQrKVw6XHMqKC4qKSQvLmV4ZWModCk7cj9lLnB1c2gobmV3IGQoMHxyWzFdLDB8clsyXSxyWzNdLnRyaW0oKSkpOnQubGVuZ3RoPjAmJmUucHVzaChuZXcgZCgidW5rbm93biIsMCx0KSl9fSksZX1mdW5jdGlvbiB5KHQsZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXRbZS5maWxlXTtpZihyKXt2YXIgbj1yLmluZGV4W2UubGluZV07aWYobilyZXR1cm4gbi5lcnJvcnMucHVzaChlKSx2b2lkKHIuaGFzRXJyb3JzPSEwKX10LnVua25vd24uaGFzRXJyb3JzPSEwLHQudW5rbm93bi5saW5lc1swXS5lcnJvcnMucHVzaChlKX0pfWZ1bmN0aW9uIGIodCxlLG4saSxhKXtpZighdC5nZXRTaGFkZXJQYXJhbWV0ZXIoZSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGUpLHM9aT09PXQuRlJBR01FTlRfU0hBREVSPyJmcmFnbWVudCI6InZlcnRleCI7VChuLCJzdHJpbmciLHMrIiBzaGFkZXIgc291cmNlIG11c3QgYmUgYSBzdHJpbmciLGEpO3ZhciBsPXYobixhKSx1PWcobyk7eShsLHUpLE9iamVjdC5rZXlzKGwpLmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe24ucHVzaCh0KSxpLnB1c2goZXx8IiIpfXZhciByPWxbdF07aWYoci5oYXNFcnJvcnMpe3ZhciBuPVsiIl0saT1bIiJdO2UoImZpbGUgbnVtYmVyICIrdCsiOiAiK3IubmFtZSsiXG4iLCJjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDpib2xkIiksci5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQuZXJyb3JzLmxlbmd0aD4wKXtlKGModC5udW1iZXIsNCkrInwgICIsImJhY2tncm91bmQtY29sb3I6eWVsbG93OyBmb250LXdlaWdodDpib2xkIiksZSh0LmxpbmUrIlxuIiwiY29sb3I6cmVkOyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgZm9udC13ZWlnaHQ6Ym9sZCIpO3ZhciByPTA7dC5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1uLm1lc3NhZ2UsYT0vXlxzKlwnKC4qKVwnXHMqXDpccyooLiopJC8uZXhlYyhpKTtpZihhKXt2YXIgbz1hWzFdO3N3aXRjaChpPWFbMl0sbyl7Y2FzZSJhc3NpZ24iOm89Ij0ifXI9TWF0aC5tYXgodC5saW5lLmluZGV4T2YobyxyKSwwKX1lbHNlIHI9MDtlKGMoInwgIiw2KSksZShjKCJeXl4iLHIrMykrIlxuIiwiZm9udC13ZWlnaHQ6Ym9sZCIpLGUoYygifCAiLDYpKSxlKGkrIlxuIiwiZm9udC13ZWlnaHQ6Ym9sZCIpfSksZShjKCJ8ICIsNikrIlxuIil9ZWxzZSBlKGModC5udW1iZXIsNCkrInwgICIpLGUodC5saW5lKyJcbiIsImNvbG9yOnJlZCIpfSksInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD8oaVswXT1uLmpvaW4oIiVjIiksY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSxpKSk6Y29uc29sZS5sb2cobi5qb2luKCIiKSl9fSksci5yYWlzZSgiRXJyb3IgY29tcGlsaW5nICIrcysiIHNoYWRlciwgIitsWzBdLm5hbWUpfX1mdW5jdGlvbiB4KHQsZSxuLGksYSl7aWYoIXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihlLHQuTElOS19TVEFUVVMpKXt2YXIgbz10LmdldFByb2dyYW1JbmZvTG9nKGUpLHM9dihuLGEpLGw9dihpLGEpLHU9J0Vycm9yIGxpbmtpbmcgcHJvZ3JhbSB3aXRoIHZlcnRleCBzaGFkZXIsICInK2xbMF0ubmFtZSsnIiwgYW5kIGZyYWdtZW50IHNoYWRlciAiJytzWzBdLm5hbWUrJyInOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/Y29uc29sZS5sb2coIiVjIit1KyJcbiVjIitvLCJjb2xvcjpyZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDpib2xkIiwiY29sb3I6cmVkIik6Y29uc29sZS5sb2codSsiXG4iK28pLHIucmFpc2UodSl9fWZ1bmN0aW9uIF8odCl7dC5fY29tbWFuZFJlZj1wKCl9ZnVuY3Rpb24gdyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0P24uaWQodCk6MH1mdW5jdGlvbiBhKHQsZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbihlKXt0W24uaWQoZSldPSEwfSl9Xyh0KSx0Ll9mcmFnSWQ9aSh0LnN0YXRpYy5mcmFnKSx0Ll92ZXJ0SWQ9aSh0LnN0YXRpYy52ZXJ0KTt2YXIgbz10Ll91bmlmb3JtU2V0PXt9O2EobyxlLnN0YXRpYyksYShvLGUuZHluYW1pYyk7dmFyIHM9dC5fYXR0cmlidXRlU2V0PXt9O2EocyxyLnN0YXRpYyksYShzLHIuZHluYW1pYyksdC5faGFzQ291bnQ9ImNvdW50ImluIHQuc3RhdGljfHwiY291bnQiaW4gdC5keW5hbWljfHwiZWxlbWVudHMiaW4gdC5zdGF0aWN8fCJlbGVtZW50cyJpbiB0LmR5bmFtaWN9ZnVuY3Rpb24gTSh0LHIpe3ZhciBuPW0oKTtlKHQrIiBpbiBjb21tYW5kICIrKHJ8fHAoKSkrKCJ1bmtub3duIj09PW4/IiI6IiBjYWxsZWQgZnJvbSAiK24pKX1mdW5jdGlvbiBrKHQsZSxyKXt0fHxNKGUscnx8cCgpKX1mdW5jdGlvbiBBKHQsZSxyLGkpe3QgaW4gZXx8TSgidW5rbm93biBwYXJhbWV0ZXIgKCIrdCsiKSIrbihyKSsiLiBwb3NzaWJsZSB2YWx1ZXM6ICIrT2JqZWN0LmtleXMoZSkuam9pbigpLGl8fHAoKSl9ZnVuY3Rpb24gVCh0LGUscixpKXt0eXBlb2YgdCE9PWUmJk0oImludmFsaWQgcGFyYW1ldGVyIHR5cGUiK24ocikrIi4gZXhwZWN0ZWQgIitlKyIsIGdvdCAiK3R5cGVvZiB0LGl8fHAoKSl9ZnVuY3Rpb24gUyh0KXt0KCl9ZnVuY3Rpb24gRSh0LGUscil7dC50ZXh0dXJlP2wodC50ZXh0dXJlLl90ZXh0dXJlLmludGVybmFsZm9ybWF0LGUsInVuc3VwcG9ydGVkIHRleHR1cmUgZm9ybWF0IGZvciBhdHRhY2htZW50Iik6bCh0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdCxyLCJ1bnN1cHBvcnRlZCByZW5kZXJidWZmZXIgZm9ybWF0IGZvciBhdHRhY2htZW50Iil9ZnVuY3Rpb24gTCh0LGUpe3JldHVybiB0PT09dWV8fHQ9PT1sZXx8dD09PWNlPzI6dD09PWhlPzQ6ZmVbdF0qZX1mdW5jdGlvbiBDKHQpe3JldHVybiEodCZ0LTF8fCF0KX1mdW5jdGlvbiB6KHQsZSxuKXt2YXIgaSxhPWUud2lkdGgsbz1lLmhlaWdodCxzPWUuY2hhbm5lbHM7cihhPjAmJmE8PW4ubWF4VGV4dHVyZVNpemUmJm8+MCYmbzw9bi5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB0ZXh0dXJlIHNoYXBlIiksdC53cmFwUz09PWVlJiZ0LndyYXBUPT09ZWV8fHIoQyhhKSYmQyhvKSwiaW5jb21wYXRpYmxlIHdyYXAgbW9kZSBmb3IgdGV4dHVyZSwgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IG11c3QgYmUgcG93ZXIgb2YgMiIpLDE9PT1lLm1pcG1hc2s/MSE9PWEmJjEhPT1vJiZyKHQubWluRmlsdGVyIT09bmUmJnQubWluRmlsdGVyIT09YWUmJnQubWluRmlsdGVyIT09aWUmJnQubWluRmlsdGVyIT09b2UsIm1pbiBmaWx0ZXIgcmVxdWlyZXMgbWlwbWFwIik6KHIoQyhhKSYmQyhvKSwidGV4dHVyZSBtdXN0IGJlIGEgc3F1YXJlIHBvd2VyIG9mIDIgdG8gc3VwcG9ydCBtaXBtYXBwaW5nIikscihlLm1pcG1hc2s9PT0oYTw8MSktMSwibWlzc2luZyBvciBpbmNvbXBsZXRlIG1pcG1hcCBkYXRhIikpLGUudHlwZT09PXNlJiYobi5leHRlbnNpb25zLmluZGV4T2YoIm9lc190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPDAmJnIodC5taW5GaWx0ZXI9PT1yZSYmdC5tYWdGaWx0ZXI9PT1yZSwiZmlsdGVyIG5vdCBzdXBwb3J0ZWQsIG11c3QgZW5hYmxlIG9lc190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLHIoIXQuZ2VuTWlwbWFwcywibWlwbWFwIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCB3aXRoIGZsb2F0IHRleHR1cmVzIikpO3ZhciBsPWUuaW1hZ2VzO2ZvcihpPTA7aTwxNjsrK2kpaWYobFtpXSl7dmFyIHU9YT4+aSxjPW8+Pmk7cihlLm1pcG1hc2smMTw8aSwibWlzc2luZyBtaXBtYXAgZGF0YSIpO3ZhciBoPWxbaV07aWYocihoLndpZHRoPT09dSYmaC5oZWlnaHQ9PT1jLCJpbnZhbGlkIHNoYXBlIGZvciBtaXAgaW1hZ2VzIikscihoLmZvcm1hdD09PWUuZm9ybWF0JiZoLmludGVybmFsZm9ybWF0PT09ZS5pbnRlcm5hbGZvcm1hdCYmaC50eXBlPT09ZS50eXBlLCJpbmNvbXBhdGlibGUgdHlwZSBmb3IgbWlwIGltYWdlIiksaC5jb21wcmVzc2VkKTtlbHNlIGlmKGguZGF0YSl7dmFyIGY9TWF0aC5jZWlsKEwoaC50eXBlLHMpKnUvaC51bnBhY2tBbGlnbm1lbnQpKmgudW5wYWNrQWxpZ25tZW50O3IoaC5kYXRhLmJ5dGVMZW5ndGg9PT1mKmMsImludmFsaWQgZGF0YSBmb3IgaW1hZ2UsIGJ1ZmZlciBzaXplIGlzIGluY29uc2lzdGVudCB3aXRoIGltYWdlIGZvcm1hdCIpfWVsc2UgaC5lbGVtZW50fHxoLmNvcHl9ZWxzZSB0Lmdlbk1pcG1hcHN8fHIoMD09KGUubWlwbWFzayYxPDxpKSwiZXh0cmEgbWlwbWFwIGRhdGEiKTtlLmNvbXByZXNzZWQmJnIoIXQuZ2VuTWlwbWFwcywibWlwbWFwIGdlbmVyYXRpb24gZm9yIGNvbXByZXNzZWQgaW1hZ2VzIG5vdCBzdXBwb3J0ZWQiKX1mdW5jdGlvbiBJKHQsZSxuLGkpe3ZhciBhPXQud2lkdGgsbz10LmhlaWdodCxzPXQuY2hhbm5lbHM7cihhPjAmJmE8PWkubWF4VGV4dHVyZVNpemUmJm8+MCYmbzw9aS5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB0ZXh0dXJlIHNoYXBlIikscihhPT09bywiY3ViZSBtYXAgbXVzdCBiZSBzcXVhcmUiKSxyKGUud3JhcFM9PT1lZSYmZS53cmFwVD09PWVlLCJ3cmFwIG1vZGUgbm90IHN1cHBvcnRlZCBieSBjdWJlIG1hcCIpO2Zvcih2YXIgbD0wO2w8bi5sZW5ndGg7KytsKXt2YXIgdT1uW2xdO3IodS53aWR0aD09PWEmJnUuaGVpZ2h0PT09bywiaW5jb25zaXN0ZW50IGN1YmUgbWFwIGZhY2Ugc2hhcGUiKSxlLmdlbk1pcG1hcHMmJihyKCF1LmNvbXByZXNzZWQsImNhbiBub3QgZ2VuZXJhdGUgbWlwbWFwIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIikscigxPT09dS5taXBtYXNrLCJjYW4gbm90IHNwZWNpZnkgbWlwbWFwcyBhbmQgZ2VuZXJhdGUgbWlwbWFwcyIpKTtmb3IodmFyIGM9dS5pbWFnZXMsaD0wO2g8MTY7KytoKXt2YXIgZj1jW2hdO2lmKGYpe3ZhciBkPWE+PmgscD1vPj5oO3IodS5taXBtYXNrJjE8PGgsIm1pc3NpbmcgbWlwbWFwIGRhdGEiKSxyKGYud2lkdGg9PT1kJiZmLmhlaWdodD09PXAsImludmFsaWQgc2hhcGUgZm9yIG1pcCBpbWFnZXMiKSxyKGYuZm9ybWF0PT09dC5mb3JtYXQmJmYuaW50ZXJuYWxmb3JtYXQ9PT10LmludGVybmFsZm9ybWF0JiZmLnR5cGU9PT10LnR5cGUsImluY29tcGF0aWJsZSB0eXBlIGZvciBtaXAgaW1hZ2UiKSxmLmNvbXByZXNzZWR8fChmLmRhdGE/cihmLmRhdGEuYnl0ZUxlbmd0aD09PWQqcCpNYXRoLm1heChMKGYudHlwZSxzKSxmLnVucGFja0FsaWdubWVudCksImludmFsaWQgZGF0YSBmb3IgaW1hZ2UsIGJ1ZmZlciBzaXplIGlzIGluY29uc2lzdGVudCB3aXRoIGltYWdlIGZvcm1hdCIpOmYuZWxlbWVudHx8Zi5jb3B5KX19fX1mdW5jdGlvbiBEKHQsZSl7dGhpcy5pZD1wZSsrLHRoaXMudHlwZT10LHRoaXMuZGF0YT1lfWZ1bmN0aW9uIFAodCl7cmV0dXJuIHQucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJyl9ZnVuY3Rpb24gTyh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107dmFyIGU9dC5jaGFyQXQoMCkscj10LmNoYXJBdCh0Lmxlbmd0aC0xKTtpZih0Lmxlbmd0aD4xJiZlPT09ciYmKCciJz09PWV8fCInIj09PWUpKXJldHVyblsnIicrUCh0LnN1YnN0cigxLHQubGVuZ3RoLTIpKSsnIiddO3ZhciBuPS9cWyhmYWxzZXx0cnVlfG51bGx8XGQrfCdbXiddKid8IlteIl0qIilcXS8uZXhlYyh0KTtpZihuKXJldHVybiBPKHQuc3Vic3RyKDAsbi5pbmRleCkpLmNvbmNhdChPKG5bMV0pKS5jb25jYXQoTyh0LnN1YnN0cihuLmluZGV4K25bMF0ubGVuZ3RoKSkpO3ZhciBpPXQuc3BsaXQoIi4iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuWyciJytQKHQpKyciJ107Zm9yKHZhciBhPVtdLG89MDtvPGkubGVuZ3RoOysrbylhPWEuY29uY2F0KE8oaVtvXSkpO3JldHVybiBhfWZ1bmN0aW9uIFIodCl7cmV0dXJuIlsiK08odCkuam9pbigiXVsiKSsiXSJ9ZnVuY3Rpb24gRih0LGUpe3JldHVybiBuZXcgRCh0LFIoZSsiIikpfWZ1bmN0aW9uIGoodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiF0Ll9yZWdsVHlwZXx8dCBpbnN0YW5jZW9mIER9ZnVuY3Rpb24gTih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P25ldyBEKG1lLHQpOnR9ZnVuY3Rpb24gQigpe3ZhciB0PXsiIjowfSxlPVsiIl07cmV0dXJue2lkOmZ1bmN0aW9uKHIpe3ZhciBuPXRbcl07cmV0dXJuIG58fChuPXRbcl09ZS5sZW5ndGgsZS5wdXNoKHIpLG4pfSxzdHI6ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19fX1mdW5jdGlvbiBVKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7aWYodCE9PWRvY3VtZW50LmJvZHkpe3ZhciBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZT1pLnJpZ2h0LWkubGVmdCxuPWkuYm90dG9tLWkudG9wfWEud2lkdGg9ciplLGEuaGVpZ2h0PXIqbiwkdChhLnN0eWxlLHt3aWR0aDplKyJweCIsaGVpZ2h0Om4rInB4In0pfWZ1bmN0aW9uIGkoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKSx0LnJlbW92ZUNoaWxkKGEpfXZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiAkdChhLnN0eWxlLHtib3JkZXI6MCxtYXJnaW46MCxwYWRkaW5nOjAsdG9wOjAsbGVmdDowfSksdC5hcHBlbmRDaGlsZChhKSx0PT09ZG9jdW1lbnQuYm9keSYmKGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIiwkdCh0LnN0eWxlLHttYXJnaW46MCxwYWRkaW5nOjB9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbiwhMSksbigpLHtjYW52YXM6YSxvbkRlc3Ryb3k6aX19ZnVuY3Rpb24gVih0LGUpe2Z1bmN0aW9uIHIocil7dHJ5e3JldHVybiB0LmdldENvbnRleHQocixlKX1jYXRjaCh0KXtyZXR1cm4gbnVsbH19cmV0dXJuIHIoIndlYmdsIil8fHIoImV4cGVyaW1lbnRhbC13ZWJnbCIpfHxyKCJ3ZWJnbC1leHBlcmltZW50YWwiKX1mdW5jdGlvbiBIKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdC5ub2RlTmFtZSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYXBwZW5kQ2hpbGQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdH1mdW5jdGlvbiBxKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdBcnJheXN8fCJmdW5jdGlvbiI9PXR5cGVvZiB0LmRyYXdFbGVtZW50c31mdW5jdGlvbiBHKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD90LnNwbGl0KCk6KGRlKEFycmF5LmlzQXJyYXkodCksImludmFsaWQgZXh0ZW5zaW9uIGFycmF5IiksdCl9ZnVuY3Rpb24gWSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/KGRlKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsIm5vdCBzdXBwb3J0ZWQgb3V0c2lkZSBvZiBET00iKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpKTp0fWZ1bmN0aW9uIFgodCl7dmFyIGUscixuLGksYT10fHx7fSxvPXt9LHM9W10sbD1bXSx1PSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PzE6d2luZG93LmRldmljZVBpeGVsUmF0aW8sYz0hMSxoPWZ1bmN0aW9uKHQpe3QmJmRlLnJhaXNlKHQpfSxmPWZ1bmN0aW9uKCl7fTtpZigic3RyaW5nIj09dHlwZW9mIGE/KGRlKCJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQsInNlbGVjdG9yIHF1ZXJpZXMgb25seSBzdXBwb3J0ZWQgaW4gRE9NIGVudmlyb21lbnRzIiksZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGEpLGRlKGUsImludmFsaWQgcXVlcnkgc3RyaW5nIGZvciBlbGVtZW50IikpOiJvYmplY3QiPT10eXBlb2YgYT9IKGEpP2U9YTpxKGEpPyhpPWEsbj1pLmNhbnZhcyk6KGRlLmNvbnN0cnVjdG9yKGEpLCJnbCJpbiBhP2k9YS5nbDoiY2FudmFzImluIGE/bj1ZKGEuY2FudmFzKToiY29udGFpbmVyImluIGEmJihyPVkoYS5jb250YWluZXIpKSwiYXR0cmlidXRlcyJpbiBhJiYobz1hLmF0dHJpYnV0ZXMsZGUudHlwZShvLCJvYmplY3QiLCJpbnZhbGlkIGNvbnRleHQgYXR0cmlidXRlcyIpKSwiZXh0ZW5zaW9ucyJpbiBhJiYocz1HKGEuZXh0ZW5zaW9ucykpLCJvcHRpb25hbEV4dGVuc2lvbnMiaW4gYSYmKGw9RyhhLm9wdGlvbmFsRXh0ZW5zaW9ucykpLCJvbkRvbmUiaW4gYSYmKGRlLnR5cGUoYS5vbkRvbmUsImZ1bmN0aW9uIiwiaW52YWxpZCBvciBtaXNzaW5nIG9uRG9uZSBjYWxsYmFjayIpLGg9YS5vbkRvbmUpLCJwcm9maWxlImluIGEmJihjPSEhYS5wcm9maWxlKSwicGl4ZWxSYXRpbyJpbiBhJiYodT0rYS5waXhlbFJhdGlvLGRlKHU+MCwiaW52YWxpZCBwaXhlbCByYXRpbyIpKSk6ZGUucmFpc2UoImludmFsaWQgYXJndW1lbnRzIHRvIHJlZ2wiKSxlJiYoImNhbnZhcyI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bj1lOnI9ZSksIWkpe2lmKCFuKXtkZSgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50LCJtdXN0IG1hbnVhbGx5IHNwZWNpZnkgd2ViZ2wgY29udGV4dCBvdXRzaWRlIG9mIERPTSBlbnZpcm9ubWVudHMiKTt2YXIgZD1VKHJ8fGRvY3VtZW50LmJvZHksaCx1KTtpZighZClyZXR1cm4gbnVsbDtuPWQuY2FudmFzLGY9ZC5vbkRlc3Ryb3l9aT1WKG4sbyl9cmV0dXJuIGk/e2dsOmksY2FudmFzOm4sY29udGFpbmVyOnIsZXh0ZW5zaW9uczpzLG9wdGlvbmFsRXh0ZW5zaW9uczpsLHBpeGVsUmF0aW86dSxwcm9maWxlOmMsb25Eb25lOmgsb25EZXN0cm95OmZ9OihmKCksaCgid2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZyIpLG51bGwpfWZ1bmN0aW9uIFcodCxlKXtmdW5jdGlvbiByKGUpe2RlLnR5cGUoZSwic3RyaW5nIiwiZXh0ZW5zaW9uIG5hbWUgbXVzdCBiZSBzdHJpbmciKTt2YXIgcixpPWUudG9Mb3dlckNhc2UoKTt0cnl7cj1uW2ldPXQuZ2V0RXh0ZW5zaW9uKGkpfWNhdGNoKHQpe31yZXR1cm4hIXJ9Zm9yKHZhciBuPXt9LGk9MDtpPGUuZXh0ZW5zaW9ucy5sZW5ndGg7KytpKXt2YXIgYT1lLmV4dGVuc2lvbnNbaV07aWYoIXIoYSkpcmV0dXJuIGUub25EZXN0cm95KCksZS5vbkRvbmUoJyInK2ErJyIgZXh0ZW5zaW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgV2ViR0wgY29udGV4dCwgdHJ5IHVwZ3JhZGluZyB5b3VyIHN5c3RlbSBvciBhIGRpZmZlcmVudCBicm93c2VyJyksbnVsbH1yZXR1cm4gZS5vcHRpb25hbEV4dGVuc2lvbnMuZm9yRWFjaChyKSx7ZXh0ZW5zaW9uczpuLHJlc3RvcmU6ZnVuY3Rpb24oKXtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKCFyKHQpKXRocm93IG5ldyBFcnJvcigiKHJlZ2wpOiBlcnJvciByZXN0b3JpbmcgZXh0ZW5zaW9uICIrdCl9KX19fWZ1bmN0aW9uIFoodCl7cmV0dXJuISF0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkFycmF5LmlzQXJyYXkodC5zaGFwZSkmJkFycmF5LmlzQXJyYXkodC5zdHJpZGUpJiYibnVtYmVyIj09dHlwZW9mIHQub2Zmc2V0JiZ0LnNoYXBlLmxlbmd0aD09PXQuc3RyaWRlLmxlbmd0aCYmKEFycmF5LmlzQXJyYXkodC5kYXRhKXx8UXQodC5kYXRhKSl9ZnVuY3Rpb24gSih0LGUpe2Zvcih2YXIgcj1BcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobik7cmV0dXJuIHJ9ZnVuY3Rpb24gSyh0KXtmb3IodmFyIGU9MTY7ZTw9MTw8Mjg7ZSo9MTYpaWYodDw9ZSlyZXR1cm4gZTtyZXR1cm4gMH1mdW5jdGlvbiBRKHQpe3ZhciBlLHI7cmV0dXJuIGU9KHQ+NjU1MzUpPDw0LHQ+Pj49ZSxyPSh0PjI1NSk8PDMsdD4+Pj1yLGV8PXIscj0odD4xNSk8PDIsdD4+Pj1yLGV8PXIscj0odD4zKTw8MSx0Pj4+PXIsKGV8PXIpfHQ+PjF9ZnVuY3Rpb24gJCh0KXt2YXIgZT1LKHQpLHI9RWVbUShlKT4+Ml07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIoZSl9ZnVuY3Rpb24gdHQodCl7RWVbUSh0LmJ5dGVMZW5ndGgpPj4yXS5wdXNoKHQpfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIHI9bnVsbDtzd2l0Y2godCl7Y2FzZSBfZTpyPW5ldyBJbnQ4QXJyYXkoJChlKSwwLGUpO2JyZWFrO2Nhc2Ugd2U6cj1uZXcgVWludDhBcnJheSgkKGUpLDAsZSk7YnJlYWs7Y2FzZSBNZTpyPW5ldyBJbnQxNkFycmF5KCQoMiplKSwwLGUpO2JyZWFrO2Nhc2Uga2U6cj1uZXcgVWludDE2QXJyYXkoJCgyKmUpLDAsZSk7YnJlYWs7Y2FzZSBBZTpyPW5ldyBJbnQzMkFycmF5KCQoNCplKSwwLGUpO2JyZWFrO2Nhc2UgVGU6cj1uZXcgVWludDMyQXJyYXkoJCg0KmUpLDAsZSk7YnJlYWs7Y2FzZSBTZTpyPW5ldyBGbG9hdDMyQXJyYXkoJCg0KmUpLDAsZSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gci5sZW5ndGghPT1lP3Iuc3ViYXJyYXkoMCxlKTpyfWZ1bmN0aW9uIHJ0KHQpe3R0KHQuYnVmZmVyKX1mdW5jdGlvbiBudCh0LGUscil7Zm9yKHZhciBuPTA7bjxlOysrbilyW25dPXRbbl19ZnVuY3Rpb24gaXQodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wO2E8ZTsrK2EpZm9yKHZhciBvPXRbYV0scz0wO3M8cjsrK3MpbltpKytdPW9bc119ZnVuY3Rpb24gYXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1hLHM9MDtzPGU7KytzKWZvcih2YXIgbD10W3NdLHU9MDt1PHI7Kyt1KWZvcih2YXIgYz1sW3VdLGg9MDtoPG47KytoKWlbbysrXT1jW2hdfWZ1bmN0aW9uIG90KHQsZSxyLG4saSl7Zm9yKHZhciBhPTEsbz1yKzE7bzxlLmxlbmd0aDsrK28pYSo9ZVtvXTt2YXIgcz1lW3JdO2lmKGUubGVuZ3RoLXI9PTQpe3ZhciBsPWVbcisxXSx1PWVbcisyXSxjPWVbciszXTtmb3Iobz0wO288czsrK28pYXQodFtvXSxsLHUsYyxuLGkpLGkrPWF9ZWxzZSBmb3Iobz0wO288czsrK28pb3QodFtvXSxlLHIrMSxuLGkpLGkrPWF9ZnVuY3Rpb24gc3QodCxlLHIsbil7dmFyIGk9MTtpZihlLmxlbmd0aClmb3IodmFyIGE9MDthPGUubGVuZ3RoOysrYSlpKj1lW2FdO2Vsc2UgaT0wO3ZhciBvPW58fExlLmFsbG9jVHlwZShyLGkpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpudCh0LGVbMF0sbyk7YnJlYWs7Y2FzZSAyOml0KHQsZVswXSxlWzFdLG8pO2JyZWFrO2Nhc2UgMzphdCh0LGVbMF0sZVsxXSxlWzJdLG8sMCk7YnJlYWs7ZGVmYXVsdDpvdCh0LGUsMCxvLDApfXJldHVybiBvfWZ1bmN0aW9uIGx0KHQpe2Zvcih2YXIgZT1bXSxyPXQ7ci5sZW5ndGg7cj1yWzBdKWUucHVzaChyLmxlbmd0aCk7cmV0dXJuIGV9ZnVuY3Rpb24gdXQodCl7cmV0dXJuIDB8S3RbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBjdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXX1mdW5jdGlvbiBodCh0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MCxsPTA7bDxyOysrbClmb3IodmFyIHU9MDt1PG47Kyt1KXRbcysrXT1lW2kqbCthKnUrb119ZnVuY3Rpb24gZnQodCxlLHIpe2Z1bmN0aW9uIG4oZSl7dGhpcy5pZD1oKyssdGhpcy5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0aGlzLnR5cGU9ZSx0aGlzLnVzYWdlPU9lLHRoaXMuYnl0ZUxlbmd0aD0wLHRoaXMuZGltZW5zaW9uPTEsdGhpcy5kdHlwZT1GZSx0aGlzLnBlcnNpc3RlbnREYXRhPW51bGwsci5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWQucG9wKCk7cmV0dXJuIHJ8fChyPW5ldyBuKHQpKSxyLmJpbmQoKSxzKHIsZSxSZSwwLDEsITEpLHJ9ZnVuY3Rpb24gYSh0KXtkLnB1c2godCl9ZnVuY3Rpb24gbyhlLHIsbil7ZS5ieXRlTGVuZ3RoPXIuYnl0ZUxlbmd0aCx0LmJ1ZmZlckRhdGEoZS50eXBlLHIsbil9ZnVuY3Rpb24gcyh0LGUscixuLGksYSl7dmFyIHM7aWYodC51c2FnZT1yLEFycmF5LmlzQXJyYXkoZSkpe2lmKHQuZHR5cGU9bnx8amUsZS5sZW5ndGg+MCl7dmFyIGw7aWYoQXJyYXkuaXNBcnJheShlWzBdKSl7cz1QZShlKTtmb3IodmFyIHU9MSxjPTE7YzxzLmxlbmd0aDsrK2MpdSo9c1tjXTt0LmRpbWVuc2lvbj11LGw9RGUoZSxzLHQuZHR5cGUpLG8odCxsLHIpLGE/dC5wZXJzaXN0ZW50RGF0YT1sOkxlLmZyZWVUeXBlKGwpfWVsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlWzBdKXt0LmRpbWVuc2lvbj1pO3ZhciBoPUxlLmFsbG9jVHlwZSh0LmR0eXBlLGUubGVuZ3RoKTtjdChoLGUpLG8odCxoLHIpLGE/dC5wZXJzaXN0ZW50RGF0YT1oOkxlLmZyZWVUeXBlKGgpfWVsc2UgUXQoZVswXSk/KHQuZGltZW5zaW9uPWVbMF0ubGVuZ3RoLHQuZHR5cGU9bnx8dXQoZVswXSl8fGplLGw9RGUoZSxbZS5sZW5ndGgsZVswXS5sZW5ndGhdLHQuZHR5cGUpLG8odCxsLHIpLGE/dC5wZXJzaXN0ZW50RGF0YT1sOkxlLmZyZWVUeXBlKGwpKTpkZS5yYWlzZSgiaW52YWxpZCBidWZmZXIgZGF0YSIpfX1lbHNlIGlmKFF0KGUpKXQuZHR5cGU9bnx8dXQoZSksdC5kaW1lbnNpb249aSxvKHQsZSxyKSxhJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpKTtlbHNlIGlmKFooZSkpe3M9ZS5zaGFwZTt2YXIgZj1lLnN0cmlkZSxkPWUub2Zmc2V0LHA9MCxtPTAsdj0wLGc9MDsxPT09cy5sZW5ndGg/KHA9c1swXSxtPTEsdj1mWzBdLGc9MCk6Mj09PXMubGVuZ3RoPyhwPXNbMF0sbT1zWzFdLHY9ZlswXSxnPWZbMV0pOmRlLnJhaXNlKCJpbnZhbGlkIHNoYXBlIiksdC5kdHlwZT1ufHx1dChlLmRhdGEpfHxqZSx0LmRpbWVuc2lvbj1tO3ZhciB5PUxlLmFsbG9jVHlwZSh0LmR0eXBlLHAqbSk7aHQoeSxlLmRhdGEscCxtLHYsZyxkKSxvKHQseSxyKSxhP3QucGVyc2lzdGVudERhdGE9eTpMZS5mcmVlVHlwZSh5KX1lbHNlIGRlLnJhaXNlKCJpbnZhbGlkIGJ1ZmZlciBkYXRhIil9ZnVuY3Rpb24gbChyKXtlLmJ1ZmZlckNvdW50LS07dmFyIG49ci5idWZmZXI7ZGUobiwiYnVmZmVyIG11c3Qgbm90IGJlIGRlbGV0ZWQgYWxyZWFkeSIpLHQuZGVsZXRlQnVmZmVyKG4pLHIuYnVmZmVyPW51bGwsZGVsZXRlIGZbci5pZF19ZnVuY3Rpb24gdShpLGEsbyx1KXtmdW5jdGlvbiBjKGUpe3ZhciBuPU9lLGk9bnVsbCxhPTAsbz0wLGw9MTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8UXQoZSl8fFooZSk/aT1lOiJudW1iZXIiPT10eXBlb2YgZT9hPTB8ZTplJiYoZGUudHlwZShlLCJvYmplY3QiLCJidWZmZXIgYXJndW1lbnRzIG11c3QgYmUgYW4gb2JqZWN0LCBhIG51bWJlciBvciBhbiBhcnJheSIpLCJkYXRhImluIGUmJihkZShudWxsPT09aXx8QXJyYXkuaXNBcnJheShpKXx8UXQoaSl8fFooaSksImludmFsaWQgZGF0YSBmb3IgYnVmZmVyIiksaT1lLmRhdGEpLCJ1c2FnZSJpbiBlJiYoZGUucGFyYW1ldGVyKGUudXNhZ2UsSWUsImludmFsaWQgYnVmZmVyIHVzYWdlIiksbj1JZVtlLnVzYWdlXSksInR5cGUiaW4gZSYmKGRlLnBhcmFtZXRlcihlLnR5cGUsemUsImludmFsaWQgYnVmZmVyIHR5cGUiKSxvPXplW2UudHlwZV0pLCJkaW1lbnNpb24iaW4gZSYmKGRlLnR5cGUoZS5kaW1lbnNpb24sIm51bWJlciIsImludmFsaWQgZGltZW5zaW9uIiksbD0wfGUuZGltZW5zaW9uKSwibGVuZ3RoImluIGUmJihkZS5ubmkoYSwiYnVmZmVyIGxlbmd0aCBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIpLGE9MHxlLmxlbmd0aCkpLHAuYmluZCgpLGk/cyhwLGksbixvLGwsdSk6KHQuYnVmZmVyRGF0YShwLnR5cGUsYSxuKSxwLmR0eXBlPW98fEZlLHAudXNhZ2U9bixwLmRpbWVuc2lvbj1sLHAuYnl0ZUxlbmd0aD1hKSxyLnByb2ZpbGUmJihwLnN0YXRzLnNpemU9cC5ieXRlTGVuZ3RoKk5lW3AuZHR5cGVdKSxjfWZ1bmN0aW9uIGgoZSxyKXtkZShyK2UuYnl0ZUxlbmd0aDw9cC5ieXRlTGVuZ3RoLCJpbnZhbGlkIGJ1ZmZlciBzdWJkYXRhIGNhbGwsIGJ1ZmZlciBpcyB0b28gc21hbGwuICBDYW4ndCB3cml0ZSBkYXRhIG9mIHNpemUgIitlLmJ5dGVMZW5ndGgrIiBzdGFydGluZyBmcm9tIG9mZnNldCAiK3IrIiB0byBhIGJ1ZmZlciBvZiBzaXplICIrcC5ieXRlTGVuZ3RoKSx0LmJ1ZmZlclN1YkRhdGEocC50eXBlLHIsZSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByLG49MHwoZXx8MCk7aWYocC5iaW5kKCksQXJyYXkuaXNBcnJheSh0KSl7aWYodC5sZW5ndGg+MClpZigibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBpPUxlLmFsbG9jVHlwZShwLmR0eXBlLHQubGVuZ3RoKTtjdChpLHQpLGgoaSxuKSxMZS5mcmVlVHlwZShpKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkodFswXSl8fFF0KHRbMF0pKXtyPVBlKHQpO3ZhciBhPURlKHQscixwLmR0eXBlKTtoKGEsbiksTGUuZnJlZVR5cGUoYSl9ZWxzZSBkZS5yYWlzZSgiaW52YWxpZCBidWZmZXIgZGF0YSIpfWVsc2UgaWYoUXQodCkpaCh0LG4pO2Vsc2UgaWYoWih0KSl7cj10LnNoYXBlO3ZhciBvPXQuc3RyaWRlLHM9MCxsPTAsdT0wLGY9MDsxPT09ci5sZW5ndGg/KHM9clswXSxsPTEsdT1vWzBdLGY9MCk6Mj09PXIubGVuZ3RoPyhzPXJbMF0sbD1yWzFdLHU9b1swXSxmPW9bMV0pOmRlLnJhaXNlKCJpbnZhbGlkIHNoYXBlIik7dmFyIGQ9QXJyYXkuaXNBcnJheSh0LmRhdGEpP3AuZHR5cGU6dXQodC5kYXRhKSxtPUxlLmFsbG9jVHlwZShkLHMqbCk7aHQobSx0LmRhdGEscyxsLHUsZix0Lm9mZnNldCksaChtLG4pLExlLmZyZWVUeXBlKG0pfWVsc2UgZGUucmFpc2UoImludmFsaWQgZGF0YSBmb3IgYnVmZmVyIHN1YmRhdGEiKTtyZXR1cm4gY31lLmJ1ZmZlckNvdW50Kys7dmFyIHA9bmV3IG4oYSk7cmV0dXJuIGZbcC5pZF09cCxvfHxjKGkpLGMuX3JlZ2xUeXBlPSJidWZmZXIiLGMuX2J1ZmZlcj1wLGMuc3ViZGF0YT1kLHIucHJvZmlsZSYmKGMuc3RhdHM9cC5zdGF0cyksYy5kZXN0cm95PWZ1bmN0aW9uKCl7bChwKX0sY31mdW5jdGlvbiBjKCl7eGUoZikuZm9yRWFjaChmdW5jdGlvbihlKXtlLmJ1ZmZlcj10LmNyZWF0ZUJ1ZmZlcigpLHQuYmluZEJ1ZmZlcihlLnR5cGUsZS5idWZmZXIpLHQuYnVmZmVyRGF0YShlLnR5cGUsZS5wZXJzaXN0ZW50RGF0YXx8ZS5ieXRlTGVuZ3RoLGUudXNhZ2UpfSl9dmFyIGg9MCxmPXt9O24ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0LmJpbmRCdWZmZXIodGhpcy50eXBlLHRoaXMuYnVmZmVyKX0sbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2wodGhpcyl9O3ZhciBkPVtdO3JldHVybiByLnByb2ZpbGUmJihlLmdldFRvdGFsQnVmZmVyU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24oZSl7dCs9ZltlXS5zdGF0cy5zaXplfSksdH0pLHtjcmVhdGU6dSxjcmVhdGVTdHJlYW06aSxkZXN0cm95U3RyZWFtOmEsY2xlYXI6ZnVuY3Rpb24oKXt4ZShmKS5mb3JFYWNoKGwpLGQuZm9yRWFjaChsKX0sZ2V0QnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Ll9idWZmZXIgaW5zdGFuY2VvZiBuP3QuX2J1ZmZlcjpudWxsfSxyZXN0b3JlOmMsX2luaXRCdWZmZXI6c319ZnVuY3Rpb24gZHQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWgrKyxjW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPUhlLHRoaXMudmVydENvdW50PTAsdGhpcy50eXBlPTB9ZnVuY3Rpb24gYSh0KXt2YXIgZT1kLnBvcCgpO3JldHVybiBlfHwoZT1uZXcgaShyLmNyZWF0ZShudWxsLEplLCEwLCExKS5fYnVmZmVyKSkscyhlLHQsS2UsLTEsLTEsMCwwKSxlfWZ1bmN0aW9uIG8odCl7ZC5wdXNoKHQpfWZ1bmN0aW9uIHMobixpLGEsbyxzLGwsdSl7aWYobi5idWZmZXIuYmluZCgpLGkpe3ZhciBjPXU7dXx8UXQoaSkmJighWihpKXx8UXQoaS5kYXRhKSl8fChjPWUub2VzX2VsZW1lbnRfaW5kZXhfdWludD9aZTpYZSksci5faW5pdEJ1ZmZlcihuLmJ1ZmZlcixpLGEsYywzKX1lbHNlIHQuYnVmZmVyRGF0YShKZSxsLGEpLG4uYnVmZmVyLmR0eXBlPWh8fEdlLG4uYnVmZmVyLnVzYWdlPWEsbi5idWZmZXIuZGltZW5zaW9uPTMsbi5idWZmZXIuYnl0ZUxlbmd0aD1sO3ZhciBoPXU7aWYoIXUpe3N3aXRjaChuLmJ1ZmZlci5kdHlwZSl7Y2FzZSBHZTpjYXNlIHFlOmg9R2U7YnJlYWs7Y2FzZSBYZTpjYXNlIFllOmg9WGU7YnJlYWs7Y2FzZSBaZTpjYXNlIFdlOmg9WmU7YnJlYWs7ZGVmYXVsdDpkZS5yYWlzZSgidW5zdXBwb3J0ZWQgdHlwZSBmb3IgZWxlbWVudCBhcnJheSIpfW4uYnVmZmVyLmR0eXBlPWh9bi50eXBlPWgsZGUoaCE9PVplfHwhIWUub2VzX2VsZW1lbnRfaW5kZXhfdWludCwiMzIgYml0IGVsZW1lbnQgYnVmZmVycyBub3Qgc3VwcG9ydGVkLCBlbmFibGUgb2VzX2VsZW1lbnRfaW5kZXhfdWludCBmaXJzdCIpO3ZhciBmPXM7ZjwwJiYoZj1uLmJ1ZmZlci5ieXRlTGVuZ3RoLGg9PT1YZT9mPj49MTpoPT09WmUmJihmPj49MikpLG4udmVydENvdW50PWY7dmFyIGQ9bztpZihvPDApe2Q9SGU7dmFyIHA9bi5idWZmZXIuZGltZW5zaW9uOzE9PT1wJiYoZD1VZSksMj09PXAmJihkPVZlKSwzPT09cCYmKGQ9SGUpfW4ucHJpbVR5cGU9ZH1mdW5jdGlvbiBsKHQpe24uZWxlbWVudHNDb3VudC0tLGRlKG51bGwhPT10LmJ1ZmZlciwibXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgZWxlbWVudHMiKSxkZWxldGUgY1t0LmlkXSx0LmJ1ZmZlci5kZXN0cm95KCksdC5idWZmZXI9bnVsbH1mdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gYSh0KXtpZih0KWlmKCJudW1iZXIiPT10eXBlb2YgdClvKHQpLHUucHJpbVR5cGU9SGUsdS52ZXJ0Q291bnQ9MHx0LHUudHlwZT1HZTtlbHNle3ZhciBlPW51bGwscj1RZSxuPS0xLGk9LTEsbD0wLGM9MDtBcnJheS5pc0FycmF5KHQpfHxRdCh0KXx8Wih0KT9lPXQ6KGRlLnR5cGUodCwib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgZm9yIGVsZW1lbnRzIiksImRhdGEiaW4gdCYmKGU9dC5kYXRhLGRlKEFycmF5LmlzQXJyYXkoZSl8fFF0KGUpfHxaKGUpLCJpbnZhbGlkIGRhdGEgZm9yIGVsZW1lbnQgYnVmZmVyIikpLCJ1c2FnZSJpbiB0JiYoZGUucGFyYW1ldGVyKHQudXNhZ2UsSWUsImludmFsaWQgZWxlbWVudCBidWZmZXIgdXNhZ2UiKSxyPUllW3QudXNhZ2VdKSwicHJpbWl0aXZlImluIHQmJihkZS5wYXJhbWV0ZXIodC5wcmltaXRpdmUsQmUsImludmFsaWQgZWxlbWVudCBidWZmZXIgcHJpbWl0aXZlIiksbj1CZVt0LnByaW1pdGl2ZV0pLCJjb3VudCJpbiB0JiYoZGUoIm51bWJlciI9PXR5cGVvZiB0LmNvdW50JiZ0LmNvdW50Pj0wLCJpbnZhbGlkIHZlcnRleCBjb3VudCBmb3IgZWxlbWVudHMiKSxpPTB8dC5jb3VudCksInR5cGUiaW4gdCYmKGRlLnBhcmFtZXRlcih0LnR5cGUsZiwiaW52YWxpZCBidWZmZXIgdHlwZSIpLGM9Zlt0LnR5cGVdKSwibGVuZ3RoImluIHQ/bD0wfHQubGVuZ3RoOihsPWksYz09PVhlfHxjPT09WWU/bCo9MjpjIT09WmUmJmMhPT1XZXx8KGwqPTQpKSkscyh1LGUscixuLGksbCxjKX1lbHNlIG8oKSx1LnByaW1UeXBlPUhlLHUudmVydENvdW50PTAsdS50eXBlPUdlO3JldHVybiBhfXZhciBvPXIuY3JlYXRlKG51bGwsSmUsITApLHU9bmV3IGkoby5fYnVmZmVyKTtyZXR1cm4gbi5lbGVtZW50c0NvdW50KyssYSh0KSxhLl9yZWdsVHlwZT0iZWxlbWVudHMiLGEuX2VsZW1lbnRzPXUsYS5zdWJkYXRhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uc3ViZGF0YSh0LGUpLGF9LGEuZGVzdHJveT1mdW5jdGlvbigpe2wodSl9LGF9dmFyIGM9e30saD0wLGY9e3VpbnQ4OkdlLHVpbnQxNjpYZX07ZS5vZXNfZWxlbWVudF9pbmRleF91aW50JiYoZi51aW50MzI9WmUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBkPVtdO3JldHVybntjcmVhdGU6dSxjcmVhdGVTdHJlYW06YSxkZXN0cm95U3RyZWFtOm8sZ2V0RWxlbWVudHM6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuX2VsZW1lbnRzIGluc3RhbmNlb2YgaT90Ll9lbGVtZW50czpudWxsfSxjbGVhcjpmdW5jdGlvbigpe3hlKGMpLmZvckVhY2gobCl9fX1mdW5jdGlvbiBwdCh0KXtmb3IodmFyIGU9TGUuYWxsb2NUeXBlKGVyLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKHRbcl09PT0xLzApZVtyXT0zMTc0NDtlbHNlIGlmKHRbcl09PT0tMS8wKWVbcl09NjQ1MTI7ZWxzZXskZVswXT10W3JdO3ZhciBuPXRyWzBdLGk9bj4+PjMxPDwxNSxhPShuPDwxPj4+MjQpLTEyNyxvPW4+PjEzJjEwMjM7aWYoYTwtMjQpZVtyXT1pO2Vsc2UgaWYoYTwtMTQpe3ZhciBzPS0xNC1hO2Vbcl09aSsobysxMDI0Pj5zKX1lbHNlIGVbcl09YT4xNT9pKzMxNzQ0OmkrKGErMTU8PDEwKStvfXJldHVybiBlfWZ1bmN0aW9uIG10KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxRdCh0KX1mdW5jdGlvbiB2dCh0KXtyZXR1cm4iW29iamVjdCAiK3QrIl0ifWZ1bmN0aW9uIGd0KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHl0KHQpe3JldHVybiEhQXJyYXkuaXNBcnJheSh0KSYmISgwPT09dC5sZW5ndGh8fCFtdCh0WzBdKSl9ZnVuY3Rpb24gYnQodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB4dCh0KXtyZXR1cm4gYnQodCk9PT1kbn1mdW5jdGlvbiBfdCh0KXtyZXR1cm4gYnQodCk9PT1wbn1mdW5jdGlvbiB3dCh0KXtyZXR1cm4gYnQodCk9PT1tbn1mdW5jdGlvbiBNdCh0KXtyZXR1cm4gYnQodCk9PT12bn1mdW5jdGlvbiBrdCh0KXtpZighdClyZXR1cm4hMTt2YXIgZT1idCh0KTtyZXR1cm4gZ24uaW5kZXhPZihlKT49MHx8KGd0KHQpfHx5dCh0KXx8Wih0KSl9ZnVuY3Rpb24gQXQodCl7cmV0dXJuIDB8S3RbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpXX1mdW5jdGlvbiBUdCh0LGUpe3ZhciByPWUubGVuZ3RoO3N3aXRjaCh0LnR5cGUpe2Nhc2UgT3I6Y2FzZSBScjpjYXNlIEZyOmNhc2UganI6dmFyIG49TGUuYWxsb2NUeXBlKHQudHlwZSxyKTtuLnNldChlKSx0LmRhdGE9bjticmVhaztjYXNlIHdyOnQuZGF0YT1wdChlKTticmVhaztkZWZhdWx0OmRlLnJhaXNlKCJ1bnN1cHBvcnRlZCB0ZXh0dXJlIHR5cGUsIG11c3Qgc3BlY2lmeSBhIHR5cGVkIGFycmF5Iil9fWZ1bmN0aW9uIFN0KHQsZSl7cmV0dXJuIExlLmFsbG9jVHlwZSh0LnR5cGU9PT13cj9qcjp0LnR5cGUsZSl9ZnVuY3Rpb24gRXQodCxlKXt0LnR5cGU9PT13cj8odC5kYXRhPXB0KGUpLExlLmZyZWVUeXBlKGUpKTp0LmRhdGE9ZX1mdW5jdGlvbiBMdCh0LGUscixuLGksYSl7CmZvcih2YXIgbz10LndpZHRoLHM9dC5oZWlnaHQsbD10LmNoYW5uZWxzLHU9bypzKmwsYz1TdCh0LHUpLGg9MCxmPTA7ZjxzOysrZilmb3IodmFyIGQ9MDtkPG87KytkKWZvcih2YXIgcD0wO3A8bDsrK3ApY1toKytdPWVbcipkK24qZitpKnArYV07RXQodCxjKX1mdW5jdGlvbiBDdCh0LGUscixuLGksYSl7dmFyIG87aWYobz12b2lkIDAhPT1iblt0XT9iblt0XTpmblt0XSp5bltlXSxhJiYobyo9NiksaSl7Zm9yKHZhciBzPTAsbD1yO2w+PTE7KXMrPW8qbCpsLGwvPTI7cmV0dXJuIHN9cmV0dXJuIG8qcipufWZ1bmN0aW9uIHp0KHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmludGVybmFsZm9ybWF0PW9yLHRoaXMuZm9ybWF0PW9yLHRoaXMudHlwZT1Pcix0aGlzLmNvbXByZXNzZWQ9ITEsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MSx0aGlzLmNvbG9yU3BhY2U9MCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLmNoYW5uZWxzPTB9ZnVuY3Rpb24gbCh0LGUpe3QuaW50ZXJuYWxmb3JtYXQ9ZS5pbnRlcm5hbGZvcm1hdCx0LmZvcm1hdD1lLmZvcm1hdCx0LnR5cGU9ZS50eXBlLHQuY29tcHJlc3NlZD1lLmNvbXByZXNzZWQsdC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSx0LmZsaXBZPWUuZmxpcFksdC51bnBhY2tBbGlnbm1lbnQ9ZS51bnBhY2tBbGlnbm1lbnQsdC5jb2xvclNwYWNlPWUuY29sb3JTcGFjZSx0LndpZHRoPWUud2lkdGgsdC5oZWlnaHQ9ZS5oZWlnaHQsdC5jaGFubmVscz1lLmNoYW5uZWxzfWZ1bmN0aW9uIHUodCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm4pe2lmKCJwcmVtdWx0aXBseUFscGhhImluIG4mJihkZS50eXBlKG4ucHJlbXVsdGlwbHlBbHBoYSwiYm9vbGVhbiIsImludmFsaWQgcHJlbXVsdGlwbHlBbHBoYSIpLHQucHJlbXVsdGlwbHlBbHBoYT1uLnByZW11bHRpcGx5QWxwaGEpLCJmbGlwWSJpbiBuJiYoZGUudHlwZShuLmZsaXBZLCJib29sZWFuIiwiaW52YWxpZCB0ZXh0dXJlIGZsaXAiKSx0LmZsaXBZPW4uZmxpcFkpLCJhbGlnbm1lbnQiaW4gbiYmKGRlLm9uZU9mKG4uYWxpZ25tZW50LFsxLDIsNCw4XSwiaW52YWxpZCB0ZXh0dXJlIHVucGFjayBhbGlnbm1lbnQiKSx0LnVucGFja0FsaWdubWVudD1uLmFsaWdubWVudCksImNvbG9yU3BhY2UiaW4gbiYmKGRlLnBhcmFtZXRlcihuLmNvbG9yU3BhY2UsaiwiaW52YWxpZCBjb2xvclNwYWNlIiksdC5jb2xvclNwYWNlPWpbbi5jb2xvclNwYWNlXSksInR5cGUiaW4gbil7dmFyIGk9bi50eXBlO2RlKGUub2VzX3RleHR1cmVfZmxvYXR8fCEoImZsb2F0Ij09PWl8fCJmbG9hdDMyIj09PWkpLCJ5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2Zsb2F0IGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuIiksZGUoZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0fHwhKCJoYWxmIGZsb2F0Ij09PWl8fCJmbG9hdDE2Ij09PWkpLCJ5b3UgbXVzdCBlbmFibGUgdGhlIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIGluIG9yZGVyIHRvIHVzZSAxNi1iaXQgZmxvYXRpbmcgcG9pbnQgdGV4dHVyZXMuIiksZGUoZS53ZWJnbF9kZXB0aF90ZXh0dXJlfHwhKCJ1aW50MTYiPT09aXx8InVpbnQzMiI9PT1pfHwiZGVwdGggc3RlbmNpbCI9PT1pKSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4iKSxkZS5wYXJhbWV0ZXIoaSxOLCJpbnZhbGlkIHRleHR1cmUgdHlwZSIpLHQudHlwZT1OW2ldfXZhciBhPXQud2lkdGgsbz10LmhlaWdodCxzPXQuY2hhbm5lbHMsbD0hMTsic2hhcGUiaW4gbj8oZGUoQXJyYXkuaXNBcnJheShuLnNoYXBlKSYmbi5zaGFwZS5sZW5ndGg+PTIsInNoYXBlIG11c3QgYmUgYW4gYXJyYXkiKSxhPW4uc2hhcGVbMF0sbz1uLnNoYXBlWzFdLDM9PT1uLnNoYXBlLmxlbmd0aCYmKHM9bi5zaGFwZVsyXSxkZShzPjAmJnM8PTQsImludmFsaWQgbnVtYmVyIG9mIGNoYW5uZWxzIiksbD0hMCksZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB3aWR0aCIpLGRlKG8+PTAmJm88PXIubWF4VGV4dHVyZVNpemUsImludmFsaWQgaGVpZ2h0IikpOigicmFkaXVzImluIG4mJihhPW89bi5yYWRpdXMsZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCByYWRpdXMiKSksIndpZHRoImluIG4mJihhPW4ud2lkdGgsZGUoYT49MCYmYTw9ci5tYXhUZXh0dXJlU2l6ZSwiaW52YWxpZCB3aWR0aCIpKSwiaGVpZ2h0ImluIG4mJihvPW4uaGVpZ2h0LGRlKG8+PTAmJm88PXIubWF4VGV4dHVyZVNpemUsImludmFsaWQgaGVpZ2h0IikpLCJjaGFubmVscyJpbiBuJiYocz1uLmNoYW5uZWxzLGRlKHM+MCYmczw9NCwiaW52YWxpZCBudW1iZXIgb2YgY2hhbm5lbHMiKSxsPSEwKSksdC53aWR0aD0wfGEsdC5oZWlnaHQ9MHxvLHQuY2hhbm5lbHM9MHxzO3ZhciB1PSExO2lmKCJmb3JtYXQiaW4gbil7dmFyIGM9bi5mb3JtYXQ7ZGUoZS53ZWJnbF9kZXB0aF90ZXh0dXJlfHwhKCJkZXB0aCI9PT1jfHwiZGVwdGggc3RlbmNpbCI9PT1jKSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kZXB0aF90ZXh0dXJlIGV4dGVuc2lvbiBpbiBvcmRlciB0byB1c2UgZGVwdGgvc3RlbmNpbCB0ZXh0dXJlcy4iKSxkZS5wYXJhbWV0ZXIoYyxCLCJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7dmFyIGg9dC5pbnRlcm5hbGZvcm1hdD1CW2NdO3QuZm9ybWF0PUpbaF0sYyBpbiBOJiYoInR5cGUiaW4gbnx8KHQudHlwZT1OW2NdKSksYyBpbiBVJiYodC5jb21wcmVzc2VkPSEwKSx1PSEwfSFsJiZ1P3QuY2hhbm5lbHM9Zm5bdC5mb3JtYXRdOmwmJiF1P3QuY2hhbm5lbHMhPT1oblt0LmZvcm1hdF0mJih0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PWhuW3QuY2hhbm5lbHNdKTp1JiZsJiZkZSh0LmNoYW5uZWxzPT09Zm5bdC5mb3JtYXRdLCJudW1iZXIgb2YgY2hhbm5lbHMgaW5jb25zaXN0ZW50IHdpdGggc3BlY2lmaWVkIGZvcm1hdCIpfX1mdW5jdGlvbiBjKGUpe3QucGl4ZWxTdG9yZWkoYW4sZS5mbGlwWSksdC5waXhlbFN0b3JlaShvbixlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoc24sZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKG5uLGUudW5wYWNrQWxpZ25tZW50KX1mdW5jdGlvbiBoKCl7cy5jYWxsKHRoaXMpLHRoaXMueE9mZnNldD0wLHRoaXMueU9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIGYodCxlKXt2YXIgbj1udWxsO2lmKGt0KGUpP249ZTplJiYoZGUudHlwZShlLCJvYmplY3QiLCJpbnZhbGlkIHBpeGVsIGRhdGEgdHlwZSIpLHUodCxlKSwieCJpbiBlJiYodC54T2Zmc2V0PTB8ZS54KSwieSJpbiBlJiYodC55T2Zmc2V0PTB8ZS55KSxrdChlLmRhdGEpJiYobj1lLmRhdGEpKSxkZSghdC5jb21wcmVzc2VkfHxuIGluc3RhbmNlb2YgVWludDhBcnJheSwiY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgbXVzdCBiZSBzdG9yZWQgaW4gYSB1aW50OGFycmF5IiksZS5jb3B5KXtkZSghbiwiY2FuIG5vdCBzcGVjaWZ5IGNvcHkgYW5kIGRhdGEgZmllbGQgZm9yIHRoZSBzYW1lIHRleHR1cmUiKTt2YXIgYT1pLnZpZXdwb3J0V2lkdGgsbz1pLnZpZXdwb3J0SGVpZ2h0O3Qud2lkdGg9dC53aWR0aHx8YS10LnhPZmZzZXQsdC5oZWlnaHQ9dC5oZWlnaHR8fG8tdC55T2Zmc2V0LHQubmVlZHNDb3B5PSEwLGRlKHQueE9mZnNldD49MCYmdC54T2Zmc2V0PGEmJnQueU9mZnNldD49MCYmdC55T2Zmc2V0PG8mJnQud2lkdGg+MCYmdC53aWR0aDw9YSYmdC5oZWlnaHQ+MCYmdC5oZWlnaHQ8PW8sImNvcHkgdGV4dHVyZSByZWFkIG91dCBvZiBib3VuZHMiKX1lbHNlIGlmKG4pe2lmKFF0KG4pKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9biwidHlwZSJpbiBlfHx0LnR5cGUhPT1Pcnx8KHQudHlwZT1BdChuKSk7ZWxzZSBpZihndChuKSl0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsVHQodCxuKSx0LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwO2Vsc2UgaWYoWihuKSl7dmFyIHM9bi5kYXRhO0FycmF5LmlzQXJyYXkocyl8fHQudHlwZSE9PU9yfHwodC50eXBlPUF0KHMpKTt2YXIgbCxjLGgsZixkLHAsbT1uLnNoYXBlLHY9bi5zdHJpZGU7Mz09PW0ubGVuZ3RoPyhoPW1bMl0scD12WzJdKTooZGUoMj09PW0ubGVuZ3RoLCJpbnZhbGlkIG5kYXJyYXkgcGl4ZWwgZGF0YSwgbXVzdCBiZSAyIG9yIDNEIiksaD0xLHA9MSksbD1tWzBdLGM9bVsxXSxmPXZbMF0sZD12WzFdLHQuYWxpZ25tZW50PTEsdC53aWR0aD1sLHQuaGVpZ2h0PWMsdC5jaGFubmVscz1oLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9aG5baF0sdC5uZWVkc0ZyZWU9ITAsTHQodCxzLGYsZCxwLG4ub2Zmc2V0KX1lbHNlIGlmKHh0KG4pfHxfdChuKSl4dChuKT90LmVsZW1lbnQ9bjp0LmVsZW1lbnQ9bi5jYW52YXMsdC53aWR0aD10LmVsZW1lbnQud2lkdGgsdC5oZWlnaHQ9dC5lbGVtZW50LmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZih3dChuKSl0LmVsZW1lbnQ9bix0LndpZHRoPW4ubmF0dXJhbFdpZHRoLHQuaGVpZ2h0PW4ubmF0dXJhbEhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihNdChuKSl0LmVsZW1lbnQ9bix0LndpZHRoPW4udmlkZW9XaWR0aCx0LmhlaWdodD1uLnZpZGVvSGVpZ2h0LHQuY2hhbm5lbHM9NDtlbHNlIGlmKHl0KG4pKXt2YXIgZz10LndpZHRofHxuWzBdLmxlbmd0aCx5PXQuaGVpZ2h0fHxuLmxlbmd0aCxiPXQuY2hhbm5lbHM7Yj1tdChuWzBdWzBdKT9ifHxuWzBdWzBdLmxlbmd0aDpifHwxO2Zvcih2YXIgeD1DZS5zaGFwZShuKSxfPTEsdz0wO3c8eC5sZW5ndGg7Kyt3KV8qPXhbd107dmFyIE09U3QodCxfKTtDZS5mbGF0dGVuKG4seCwiIixNKSxFdCh0LE0pLHQuYWxpZ25tZW50PTEsdC53aWR0aD1nLHQuaGVpZ2h0PXksdC5jaGFubmVscz1iLHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9aG5bYl0sdC5uZWVkc0ZyZWU9ITB9fWVsc2UgdC53aWR0aD10LndpZHRofHwxLHQuaGVpZ2h0PXQuaGVpZ2h0fHwxLHQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NDt0LnR5cGU9PT1qcj9kZShyLmV4dGVuc2lvbnMuaW5kZXhPZigib2VzX3RleHR1cmVfZmxvYXQiKT49MCwib2VzX3RleHR1cmVfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkIik6dC50eXBlPT09d3ImJmRlKHIuZXh0ZW5zaW9ucy5pbmRleE9mKCJvZXNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik+PTAsIm9lc190ZXh0dXJlX2hhbGZfZmxvYXQgZXh0ZW5zaW9uIG5vdCBlbmFibGVkIil9ZnVuY3Rpb24gZChlLHIsaSl7dmFyIGE9ZS5lbGVtZW50LG89ZS5kYXRhLHM9ZS5pbnRlcm5hbGZvcm1hdCxsPWUuZm9ybWF0LHU9ZS50eXBlLGg9ZS53aWR0aCxmPWUuaGVpZ2h0O2MoZSksYT90LnRleEltYWdlMkQocixpLGwsbCx1LGEpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhJbWFnZTJEKHIsaSxzLGgsZiwwLG8pOmUubmVlZHNDb3B5PyhuKCksdC5jb3B5VGV4SW1hZ2UyRChyLGksbCxlLnhPZmZzZXQsZS55T2Zmc2V0LGgsZiwwKSk6dC50ZXhJbWFnZTJEKHIsaSxsLGgsZiwwLGwsdSxvKX1mdW5jdGlvbiBwKGUscixpLGEsbyl7dmFyIHM9ZS5lbGVtZW50LGw9ZS5kYXRhLHU9ZS5pbnRlcm5hbGZvcm1hdCxoPWUuZm9ybWF0LGY9ZS50eXBlLGQ9ZS53aWR0aCxwPWUuaGVpZ2h0O2MoZSkscz90LnRleFN1YkltYWdlMkQocixvLGksYSxoLGYscyk6ZS5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleFN1YkltYWdlMkQocixvLGksYSx1LGQscCxsKTplLm5lZWRzQ29weT8obigpLHQuY29weVRleFN1YkltYWdlMkQocixvLGksYSxlLnhPZmZzZXQsZS55T2Zmc2V0LGQscCkpOnQudGV4U3ViSW1hZ2UyRChyLG8saSxhLGQscCxoLGYsbCl9ZnVuY3Rpb24gbSgpe3JldHVybiBLLnBvcCgpfHxuZXcgaH1mdW5jdGlvbiB2KHQpe3QubmVlZHNGcmVlJiZMZS5mcmVlVHlwZSh0LmRhdGEpLGguY2FsbCh0KSxLLnB1c2godCl9ZnVuY3Rpb24gZygpe3MuY2FsbCh0aGlzKSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PSRyLHRoaXMubWlwbWFzaz0wLHRoaXMuaW1hZ2VzPUFycmF5KDE2KX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LmltYWdlc1swXT1tKCk7dC5taXBtYXNrPTEsbi53aWR0aD10LndpZHRoPWUsbi5oZWlnaHQ9dC5oZWlnaHQ9cixuLmNoYW5uZWxzPXQuY2hhbm5lbHM9NH1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9bnVsbDtpZihrdChlKSlyPXQuaW1hZ2VzWzBdPW0oKSxsKHIsdCksZihyLGUpLHQubWlwbWFzaz0xO2Vsc2UgaWYodSh0LGUpLEFycmF5LmlzQXJyYXkoZS5taXBtYXApKWZvcih2YXIgbj1lLm1pcG1hcCxpPTA7aTxuLmxlbmd0aDsrK2kpcj10LmltYWdlc1tpXT1tKCksbChyLHQpLHIud2lkdGg+Pj1pLHIuaGVpZ2h0Pj49aSxmKHIsbltpXSksdC5taXBtYXNrfD0xPDxpO2Vsc2Ugcj10LmltYWdlc1swXT1tKCksbChyLHQpLGYocixlKSx0Lm1pcG1hc2s9MTtsKHQsdC5pbWFnZXNbMF0pLCh0LmNvbXByZXNzZWQmJnQuaW50ZXJuYWxmb3JtYXQ9PT1Ncnx8dC5pbnRlcm5hbGZvcm1hdD09PWtyfHx0LmludGVybmFsZm9ybWF0PT09QXJ8fHQuaW50ZXJuYWxmb3JtYXQ9PT1UcikmJmRlKHQud2lkdGglND09MCYmdC5oZWlnaHQlND09MCwiZm9yIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzLCBtaXBtYXAgbGV2ZWwgMCBtdXN0IGhhdmUgd2lkdGggYW5kIGhlaWdodCB0aGF0IGFyZSBhIG11bHRpcGxlIG9mIDQiKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuaW1hZ2VzLG49MDtuPHIubGVuZ3RoOysrbil7aWYoIXJbbl0pcmV0dXJuO2QocltuXSxlLG4pfX1mdW5jdGlvbiBfKCl7dmFyIHQ9US5wb3AoKXx8bmV3IGc7cy5jYWxsKHQpLHQubWlwbWFzaz0wO2Zvcih2YXIgZT0wO2U8MTY7KytlKXQuaW1hZ2VzW2VdPW51bGw7cmV0dXJuIHR9ZnVuY3Rpb24gdyh0KXtmb3IodmFyIGU9dC5pbWFnZXMscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl0mJnYoZVtyXSksZVtyXT1udWxsO1EucHVzaCh0KX1mdW5jdGlvbiBNKCl7dGhpcy5taW5GaWx0ZXI9WXIsdGhpcy5tYWdGaWx0ZXI9WXIsdGhpcy53cmFwUz1Wcix0aGlzLndyYXBUPVZyLHRoaXMuYW5pc290cm9waWM9MSx0aGlzLmdlbk1pcG1hcHM9ITEsdGhpcy5taXBtYXBIaW50PSRyfWZ1bmN0aW9uIGsodCxlKXtpZigibWluImluIGUpe3ZhciBuPWUubWluO2RlLnBhcmFtZXRlcihuLEYpLHQubWluRmlsdGVyPUZbbl0sY24uaW5kZXhPZih0Lm1pbkZpbHRlcik+PTAmJih0Lmdlbk1pcG1hcHM9ITApfWlmKCJtYWciaW4gZSl7dmFyIGk9ZS5tYWc7ZGUucGFyYW1ldGVyKGksUiksdC5tYWdGaWx0ZXI9UltpXX12YXIgYT10LndyYXBTLG89dC53cmFwVDtpZigid3JhcCJpbiBlKXt2YXIgcz1lLndyYXA7InN0cmluZyI9PXR5cGVvZiBzPyhkZS5wYXJhbWV0ZXIocyxPKSxhPW89T1tzXSk6QXJyYXkuaXNBcnJheShzKSYmKGRlLnBhcmFtZXRlcihzWzBdLE8pLGRlLnBhcmFtZXRlcihzWzFdLE8pLGE9T1tzWzBdXSxvPU9bc1sxXV0pfWVsc2V7aWYoIndyYXBTImluIGUpe3ZhciBsPWUud3JhcFM7ZGUucGFyYW1ldGVyKGwsTyksYT1PW2xdfWlmKCJ3cmFwVCJpbiBlKXt2YXIgdT1lLndyYXBUO2RlLnBhcmFtZXRlcih1LE8pLG89T1t1XX19aWYodC53cmFwUz1hLHQud3JhcFQ9bywiYW5pc290cm9waWMiaW4gZSl7dmFyIGM9ZS5hbmlzb3Ryb3BpYztkZSgibnVtYmVyIj09dHlwZW9mIGMmJmM+PTEmJmM8PXIubWF4QW5pc290cm9waWMsImFuaXNvIHNhbXBsZXMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kICIpLHQuYW5pc290cm9waWM9ZS5hbmlzb3Ryb3BpY31pZigibWlwbWFwImluIGUpe3ZhciBoPSExO3N3aXRjaCh0eXBlb2YgZS5taXBtYXApe2Nhc2Uic3RyaW5nIjpkZS5wYXJhbWV0ZXIoZS5taXBtYXAsUCwiaW52YWxpZCBtaXBtYXAgaGludCIpLHQubWlwbWFwSGludD1QW2UubWlwbWFwXSx0Lmdlbk1pcG1hcHM9ITAsaD0hMDticmVhaztjYXNlImJvb2xlYW4iOmg9dC5nZW5NaXBtYXBzPWUubWlwbWFwO2JyZWFrO2Nhc2Uib2JqZWN0IjpkZShBcnJheS5pc0FycmF5KGUubWlwbWFwKSwiaW52YWxpZCBtaXBtYXAgdHlwZSIpLHQuZ2VuTWlwbWFwcz0hMSxoPSEwO2JyZWFrO2RlZmF1bHQ6ZGUucmFpc2UoImludmFsaWQgbWlwbWFwIHR5cGUiKX0haHx8Im1pbiJpbiBlfHwodC5taW5GaWx0ZXI9V3IpfX1mdW5jdGlvbiBBKHIsbil7dC50ZXhQYXJhbWV0ZXJpKG4sR3Isci5taW5GaWx0ZXIpLHQudGV4UGFyYW1ldGVyaShuLHFyLHIubWFnRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobixOcixyLndyYXBTKSx0LnRleFBhcmFtZXRlcmkobixCcixyLndyYXBUKSxlLmV4dF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyYmdC50ZXhQYXJhbWV0ZXJpKG4scm4sci5hbmlzb3Ryb3BpYyksci5nZW5NaXBtYXBzJiYodC5oaW50KFFyLHIubWlwbWFwSGludCksdC5nZW5lcmF0ZU1pcG1hcChuKSl9ZnVuY3Rpb24gVChlKXtzLmNhbGwodGhpcyksdGhpcy5taXBtYXNrPTAsdGhpcy5pbnRlcm5hbGZvcm1hdD1vcix0aGlzLmlkPSQrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy50YXJnZXQ9ZSx0aGlzLnRleHR1cmU9dC5jcmVhdGVUZXh0dXJlKCksdGhpcy51bml0PS0xLHRoaXMuYmluZENvdW50PTAsdGhpcy50ZXhJbmZvPW5ldyBNLG8ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3NpemU6MH0pfWZ1bmN0aW9uIFMoZSl7dC5hY3RpdmVUZXh0dXJlKHVuKSx0LmJpbmRUZXh0dXJlKGUudGFyZ2V0LGUudGV4dHVyZSl9ZnVuY3Rpb24gRSgpe3ZhciBlPXJ0WzBdO2U/dC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpOnQuYmluZFRleHR1cmUobnIsbnVsbCl9ZnVuY3Rpb24gTChlKXt2YXIgcj1lLnRleHR1cmU7ZGUociwibXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgdGV4dHVyZSIpO3ZhciBuPWUudW5pdCxpPWUudGFyZ2V0O24+PTAmJih0LmFjdGl2ZVRleHR1cmUodW4rbiksdC5iaW5kVGV4dHVyZShpLG51bGwpLHJ0W25dPW51bGwpLHQuZGVsZXRlVGV4dHVyZShyKSxlLnRleHR1cmU9bnVsbCxlLnBhcmFtcz1udWxsLGUucGl4ZWxzPW51bGwsZS5yZWZDb3VudD0wLGRlbGV0ZSB0dFtlLmlkXSxhLnRleHR1cmVDb3VudC0tfWZ1bmN0aW9uIEMoZSxuKXtmdW5jdGlvbiBpKHQsZSl7dmFyIG49Yy50ZXhJbmZvO00uY2FsbChuKTt2YXIgYT1fKCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0PyJudW1iZXIiPT10eXBlb2YgZT95KGEsMHx0LDB8ZSk6eShhLDB8dCwwfHQpOnQ/KGRlLnR5cGUodCwib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgdG8gcmVnbC50ZXh0dXJlIiksayhuLHQpLGIoYSx0KSk6eShhLDEsMSksbi5nZW5NaXBtYXBzJiYoYS5taXBtYXNrPShhLndpZHRoPDwxKS0xKSxjLm1pcG1hc2s9YS5taXBtYXNrLGwoYyxhKSxkZS50ZXh0dXJlMkQobixhLHIpLGMuaW50ZXJuYWxmb3JtYXQ9YS5pbnRlcm5hbGZvcm1hdCxpLndpZHRoPWEud2lkdGgsaS5oZWlnaHQ9YS5oZWlnaHQsUyhjKSx4KGEsbnIpLEEobixuciksRSgpLHcoYSksby5wcm9maWxlJiYoYy5zdGF0cy5zaXplPUN0KGMuaW50ZXJuYWxmb3JtYXQsYy50eXBlLGEud2lkdGgsYS5oZWlnaHQsbi5nZW5NaXBtYXBzLCExKSksaS5mb3JtYXQ9cVtjLmludGVybmFsZm9ybWF0XSxpLnR5cGU9R1tjLnR5cGVdLGkubWFnPVlbbi5tYWdGaWx0ZXJdLGkubWluPVhbbi5taW5GaWx0ZXJdLGkud3JhcFM9V1tuLndyYXBTXSxpLndyYXBUPVdbbi53cmFwVF0saX1mdW5jdGlvbiBzKHQsZSxyLG4pe2RlKCEhdCwibXVzdCBzcGVjaWZ5IGltYWdlIGRhdGEiKTt2YXIgYT0wfGUsbz0wfHIscz0wfG4sdT1tKCk7cmV0dXJuIGwodSxjKSx1LndpZHRoPTAsdS5oZWlnaHQ9MCxmKHUsdCksdS53aWR0aD11LndpZHRofHwoYy53aWR0aD4+cyktYSx1LmhlaWdodD11LmhlaWdodHx8KGMuaGVpZ2h0Pj5zKS1vLGRlKGMudHlwZT09PXUudHlwZSYmYy5mb3JtYXQ9PT11LmZvcm1hdCYmYy5pbnRlcm5hbGZvcm1hdD09PXUuaW50ZXJuYWxmb3JtYXQsImluY29tcGF0aWJsZSBmb3JtYXQgZm9yIHRleHR1cmUuc3ViaW1hZ2UiKSxkZShhPj0wJiZvPj0wJiZhK3Uud2lkdGg8PWMud2lkdGgmJm8rdS5oZWlnaHQ8PWMuaGVpZ2h0LCJ0ZXh0dXJlLnN1YmltYWdlIHdyaXRlIG91dCBvZiBib3VuZHMiKSxkZShjLm1pcG1hc2smMTw8cywibWlzc2luZyBtaXBtYXAgZGF0YSIpLGRlKHUuZGF0YXx8dS5lbGVtZW50fHx1Lm5lZWRzQ29weSwibWlzc2luZyBpbWFnZSBkYXRhIiksUyhjKSxwKHUsbnIsYSxvLHMpLEUoKSx2KHUpLGl9ZnVuY3Rpb24gdShlLHIpe3ZhciBuPTB8ZSxhPTB8cnx8bjtpZihuPT09Yy53aWR0aCYmYT09PWMuaGVpZ2h0KXJldHVybiBpO2kud2lkdGg9Yy53aWR0aD1uLGkuaGVpZ2h0PWMuaGVpZ2h0PWEsUyhjKTtmb3IodmFyIHM9MDtjLm1pcG1hc2s+PnM7KytzKXQudGV4SW1hZ2UyRChucixzLGMuZm9ybWF0LG4+PnMsYT4+cywwLGMuZm9ybWF0LGMudHlwZSxudWxsKTtyZXR1cm4gRSgpLG8ucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT1DdChjLmludGVybmFsZm9ybWF0LGMudHlwZSxuLGEsITEsITEpKSxpfXZhciBjPW5ldyBUKG5yKTtyZXR1cm4gdHRbYy5pZF09YyxhLnRleHR1cmVDb3VudCsrLGkoZSxuKSxpLnN1YmltYWdlPXMsaS5yZXNpemU9dSxpLl9yZWdsVHlwZT0idGV4dHVyZTJkIixpLl90ZXh0dXJlPWMsby5wcm9maWxlJiYoaS5zdGF0cz1jLnN0YXRzKSxpLmRlc3Ryb3k9ZnVuY3Rpb24oKXtjLmRlY1JlZigpfSxpfWZ1bmN0aW9uIHooZSxuLGkscyxjLGgpe2Z1bmN0aW9uIGQodCxlLG4saSxhLHMpe3ZhciBjLGg9Qy50ZXhJbmZvO2ZvcihNLmNhbGwoaCksYz0wO2M8NjsrK2MpeltjXT1fKCk7aWYoIm51bWJlciIhPXR5cGVvZiB0JiZ0KWlmKCJvYmplY3QiPT10eXBlb2YgdClpZihlKWIoelswXSx0KSxiKHpbMV0sZSksYih6WzJdLG4pLGIoelszXSxpKSxiKHpbNF0sYSksYih6WzVdLHMpO2Vsc2UgaWYoayhoLHQpLHUoQyx0KSwiZmFjZXMiaW4gdCl7dmFyIGY9dC5mYWNlcztmb3IoZGUoQXJyYXkuaXNBcnJheShmKSYmNj09PWYubGVuZ3RoLCJjdWJlIGZhY2VzIG11c3QgYmUgYSBsZW5ndGggNiBhcnJheSIpLGM9MDtjPDY7KytjKWRlKCJvYmplY3QiPT10eXBlb2YgZltjXSYmISFmW2NdLCJpbnZhbGlkIGlucHV0IGZvciBjdWJlIG1hcCBmYWNlIiksbCh6W2NdLEMpLGIoeltjXSxmW2NdKX1lbHNlIGZvcihjPTA7Yzw2OysrYyliKHpbY10sdCk7ZWxzZSBkZS5yYWlzZSgiaW52YWxpZCBhcmd1bWVudHMgdG8gY3ViZSBtYXAiKTtlbHNle3ZhciBwPTB8dHx8MTtmb3IoYz0wO2M8NjsrK2MpeSh6W2NdLHAscCl9Zm9yKGwoQyx6WzBdKSxoLmdlbk1pcG1hcHM/Qy5taXBtYXNrPSh6WzBdLndpZHRoPDwxKS0xOkMubWlwbWFzaz16WzBdLm1pcG1hc2ssZGUudGV4dHVyZUN1YmUoQyxoLHosciksQy5pbnRlcm5hbGZvcm1hdD16WzBdLmludGVybmFsZm9ybWF0LGQud2lkdGg9elswXS53aWR0aCxkLmhlaWdodD16WzBdLmhlaWdodCxTKEMpLGM9MDtjPDY7KytjKXgoeltjXSxhcitjKTtmb3IoQShoLGlyKSxFKCksby5wcm9maWxlJiYoQy5zdGF0cy5zaXplPUN0KEMuaW50ZXJuYWxmb3JtYXQsQy50eXBlLGQud2lkdGgsZC5oZWlnaHQsaC5nZW5NaXBtYXBzLCEwKSksZC5mb3JtYXQ9cVtDLmludGVybmFsZm9ybWF0XSxkLnR5cGU9R1tDLnR5cGVdLGQubWFnPVlbaC5tYWdGaWx0ZXJdLGQubWluPVhbaC5taW5GaWx0ZXJdLGQud3JhcFM9V1toLndyYXBTXSxkLndyYXBUPVdbaC53cmFwVF0sYz0wO2M8NjsrK2Mpdyh6W2NdKTtyZXR1cm4gZH1mdW5jdGlvbiBnKHQsZSxyLG4saSl7ZGUoISFlLCJtdXN0IHNwZWNpZnkgaW1hZ2UgZGF0YSIpLGRlKCJudW1iZXIiPT10eXBlb2YgdCYmdD09PSgwfHQpJiZ0Pj0wJiZ0PDYsImludmFsaWQgZmFjZSIpO3ZhciBhPTB8cixvPTB8bixzPTB8aSx1PW0oKTtyZXR1cm4gbCh1LEMpLHUud2lkdGg9MCx1LmhlaWdodD0wLGYodSxlKSx1LndpZHRoPXUud2lkdGh8fChDLndpZHRoPj5zKS1hLHUuaGVpZ2h0PXUuaGVpZ2h0fHwoQy5oZWlnaHQ+PnMpLW8sZGUoQy50eXBlPT09dS50eXBlJiZDLmZvcm1hdD09PXUuZm9ybWF0JiZDLmludGVybmFsZm9ybWF0PT09dS5pbnRlcm5hbGZvcm1hdCwiaW5jb21wYXRpYmxlIGZvcm1hdCBmb3IgdGV4dHVyZS5zdWJpbWFnZSIpLGRlKGE+PTAmJm8+PTAmJmErdS53aWR0aDw9Qy53aWR0aCYmbyt1LmhlaWdodDw9Qy5oZWlnaHQsInRleHR1cmUuc3ViaW1hZ2Ugd3JpdGUgb3V0IG9mIGJvdW5kcyIpLGRlKEMubWlwbWFzayYxPDxzLCJtaXNzaW5nIG1pcG1hcCBkYXRhIiksZGUodS5kYXRhfHx1LmVsZW1lbnR8fHUubmVlZHNDb3B5LCJtaXNzaW5nIGltYWdlIGRhdGEiKSxTKEMpLHAodSxhcit0LGEsbyxzKSxFKCksdih1KSxkfWZ1bmN0aW9uIEwoZSl7dmFyIHI9MHxlO2lmKHIhPT1DLndpZHRoKXtkLndpZHRoPUMud2lkdGg9cixkLmhlaWdodD1DLmhlaWdodD1yLFMoQyk7Zm9yKHZhciBuPTA7bjw2Oysrbilmb3IodmFyIGk9MDtDLm1pcG1hc2s+Pmk7KytpKXQudGV4SW1hZ2UyRChhcituLGksQy5mb3JtYXQscj4+aSxyPj5pLDAsQy5mb3JtYXQsQy50eXBlLG51bGwpO3JldHVybiBFKCksby5wcm9maWxlJiYoQy5zdGF0cy5zaXplPUN0KEMuaW50ZXJuYWxmb3JtYXQsQy50eXBlLGQud2lkdGgsZC5oZWlnaHQsITEsITApKSxkfX12YXIgQz1uZXcgVChpcik7dHRbQy5pZF09QyxhLmN1YmVDb3VudCsrO3ZhciB6PW5ldyBBcnJheSg2KTtyZXR1cm4gZChlLG4saSxzLGMsaCksZC5zdWJpbWFnZT1nLGQucmVzaXplPUwsZC5fcmVnbFR5cGU9InRleHR1cmVDdWJlIixkLl90ZXh0dXJlPUMsby5wcm9maWxlJiYoZC5zdGF0cz1DLnN0YXRzKSxkLmRlc3Ryb3k9ZnVuY3Rpb24oKXtDLmRlY1JlZigpfSxkfWZ1bmN0aW9uIEkoKXtmb3IodmFyIGU9MDtlPGV0OysrZSl0LmFjdGl2ZVRleHR1cmUodW4rZSksdC5iaW5kVGV4dHVyZShucixudWxsKSxydFtlXT1udWxsO3hlKHR0KS5mb3JFYWNoKEwpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH1mdW5jdGlvbiBEKCl7eGUodHQpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTtmb3IodmFyIHI9MDtyPDMyOysrcilpZigwIT0oZS5taXBtYXNrJjE8PHIpKWlmKGUudGFyZ2V0PT09bnIpdC50ZXhJbWFnZTJEKG5yLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7ZWxzZSBmb3IodmFyIG49MDtuPDY7KytuKXQudGV4SW1hZ2UyRChhcituLHIsZS5pbnRlcm5hbGZvcm1hdCxlLndpZHRoPj5yLGUuaGVpZ2h0Pj5yLDAsZS5pbnRlcm5hbGZvcm1hdCxlLnR5cGUsbnVsbCk7QShlLnRleEluZm8sZS50YXJnZXQpfSl9dmFyIFA9eyJkb24ndCBjYXJlIjokciwiZG9udCBjYXJlIjokcixuaWNlOmVuLGZhc3Q6dG59LE89e3JlcGVhdDpVcixjbGFtcDpWcixtaXJyb3I6SHJ9LFI9e25lYXJlc3Q6WXIsbGluZWFyOlhyfSxGPSR0KHttaXBtYXA6S3IsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiOldyLCJsaW5lYXIgbWlwbWFwIG5lYXJlc3QiOlpyLCJuZWFyZXN0IG1pcG1hcCBsaW5lYXIiOkpyLCJsaW5lYXIgbWlwbWFwIGxpbmVhciI6S3J9LFIpLGo9e25vbmU6MCxicm93c2VyOmxufSxOPXt1aW50ODpPcixyZ2JhNDpwcixyZ2I1NjU6dnIsInJnYjUgYTEiOm1yfSxCPXthbHBoYTpzcixsdW1pbmFuY2U6dXIsImx1bWluYW5jZSBhbHBoYSI6Y3IscmdiOmxyLHJnYmE6b3IscmdiYTQ6aHIsInJnYjUgYTEiOmZyLHJnYjU2NTpkcn0sVT17fTtlLmV4dF9zcmdiJiYoQi5zcmdiPXhyLEIuc3JnYmE9X3IpLGUub2VzX3RleHR1cmVfZmxvYXQmJihOLmZsb2F0MzI9Ti5mbG9hdD1qciksZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiYoTi5mbG9hdDE2PU5bImhhbGYgZmxvYXQiXT13ciksZS53ZWJnbF9kZXB0aF90ZXh0dXJlJiYoJHQoQix7ZGVwdGg6eXIsImRlcHRoIHN0ZW5jaWwiOmJyfSksJHQoTix7dWludDE2OlJyLHVpbnQzMjpGciwiZGVwdGggc3RlbmNpbCI6Z3J9KSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyYmJHQoVSx7InJnYiBzM3RjIGR4dDEiOk1yLCJyZ2JhIHMzdGMgZHh0MSI6a3IsInJnYmEgczN0YyBkeHQzIjpBciwicmdiYSBzM3RjIGR4dDUiOlRyfSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfYXRjJiYkdChVLHsicmdiIGF0YyI6U3IsInJnYmEgYXRjIGV4cGxpY2l0IGFscGhhIjpFciwicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhIjpMcn0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJiYkdChVLHsicmdiIHB2cnRjIDRicHB2MSI6Q3IsInJnYiBwdnJ0YyAyYnBwdjEiOnpyLCJyZ2JhIHB2cnRjIDRicHB2MSI6SXIsInJnYmEgcHZydGMgMmJwcHYxIjpEcn0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEmJihVWyJyZ2IgZXRjMSJdPVByKTt2YXIgVj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LmdldFBhcmFtZXRlcihycikpO09iamVjdC5rZXlzKFUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9VVt0XTtWLmluZGV4T2YoZSk+PTAmJihCW3RdPWUpfSk7dmFyIEg9T2JqZWN0LmtleXMoQik7ci50ZXh0dXJlRm9ybWF0cz1IO3ZhciBxPVtdO09iamVjdC5rZXlzKEIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Qlt0XTtxW2VdPXR9KTt2YXIgRz1bXTtPYmplY3Qua2V5cyhOKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU5bdF07R1tlXT10fSk7dmFyIFk9W107T2JqZWN0LmtleXMoUikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1SW3RdO1lbZV09dH0pO3ZhciBYPVtdO09iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9Rlt0XTtYW2VdPXR9KTt2YXIgVz1bXTtPYmplY3Qua2V5cyhPKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPU9bdF07V1tlXT10fSk7dmFyIEo9SC5yZWR1Y2UoZnVuY3Rpb24odCxlKXt2YXIgcj1CW2VdO3JldHVybiByPT09dXJ8fHI9PT1zcnx8cj09PXVyfHxyPT09Y3J8fHI9PT15cnx8cj09PWJyP3Rbcl09cjpyPT09ZnJ8fGUuaW5kZXhPZigicmdiYSIpPj0wP3Rbcl09b3I6dFtyXT1scix0fSx7fSksSz1bXSxRPVtdLCQ9MCx0dD17fSxldD1yLm1heFRleHR1cmVVbml0cyxydD1BcnJheShldCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9KTtyZXR1cm4gJHQoVC5wcm90b3R5cGUse2JpbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuYmluZENvdW50Kz0xO3ZhciByPWUudW5pdDtpZihyPDApe2Zvcih2YXIgbj0wO248ZXQ7KytuKXt2YXIgaT1ydFtuXTtpZihpKXtpZihpLmJpbmRDb3VudD4wKWNvbnRpbnVlO2kudW5pdD0tMX1ydFtuXT1lLHI9bjticmVha31yPj1ldCYmZGUucmFpc2UoImluc3VmZmljaWVudCBudW1iZXIgb2YgdGV4dHVyZSB1bml0cyIpLG8ucHJvZmlsZSYmYS5tYXhUZXh0dXJlVW5pdHM8cisxJiYoYS5tYXhUZXh0dXJlVW5pdHM9cisxKSxlLnVuaXQ9cix0LmFjdGl2ZVRleHR1cmUodW4rciksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfXJldHVybiByfSx1bmJpbmQ6ZnVuY3Rpb24oKXt0aGlzLmJpbmRDb3VudC09MX0sZGVjUmVmOmZ1bmN0aW9uKCl7LS10aGlzLnJlZkNvdW50PD0wJiZMKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHR0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPXR0W2VdLnN0YXRzLnNpemV9KSx0fSkse2NyZWF0ZTJEOkMsY3JlYXRlQ3ViZTp6LGNsZWFyOkksZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpEfX1mdW5jdGlvbiBJdCh0LGUscil7cmV0dXJuIHduW3RdKmUqcn1mdW5jdGlvbiBEdCh0LGUscixuLGksYSl7ZnVuY3Rpb24gbyh0LGUscil7dGhpcy50YXJnZXQ9dCx0aGlzLnRleHR1cmU9ZSx0aGlzLnJlbmRlcmJ1ZmZlcj1yO3ZhciBuPTAsaT0wO2U/KG49ZS53aWR0aCxpPWUuaGVpZ2h0KTpyJiYobj1yLndpZHRoLGk9ci5oZWlnaHQpLHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD1pfWZ1bmN0aW9uIHModCl7dCYmKHQudGV4dHVyZSYmdC50ZXh0dXJlLl90ZXh0dXJlLmRlY1JlZigpLHQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmRlY1JlZigpKX1mdW5jdGlvbiBsKHQsZSxyKXtpZih0KWlmKHQudGV4dHVyZSl7dmFyIG49dC50ZXh0dXJlLl90ZXh0dXJlLGk9TWF0aC5tYXgoMSxuLndpZHRoKSxhPU1hdGgubWF4KDEsbi5oZWlnaHQpO2RlKGk9PT1lJiZhPT09ciwiaW5jb25zaXN0ZW50IHdpZHRoL2hlaWdodCBmb3Igc3VwcGxpZWQgdGV4dHVyZSIpLG4ucmVmQ291bnQrPTF9ZWxzZXt2YXIgbz10LnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyO2RlKG8ud2lkdGg9PT1lJiZvLmhlaWdodD09PXIsImluY29uc2lzdGVudCB3aWR0aC9oZWlnaHQgZm9yIHJlbmRlcmJ1ZmZlciIpLG8ucmVmQ291bnQrPTF9fWZ1bmN0aW9uIHUoZSxyKXtyJiYoci50ZXh0dXJlP3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoa24sZSxyLnRhcmdldCxyLnRleHR1cmUuX3RleHR1cmUudGV4dHVyZSwwKTp0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGtuLGUsQW4sci5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpKX1mdW5jdGlvbiBjKHQpe3ZhciBlPVRuLHI9bnVsbCxuPW51bGwsaT10OyJvYmplY3QiPT10eXBlb2YgdCYmKGk9dC5kYXRhLCJ0YXJnZXQiaW4gdCYmKGU9MHx0LnRhcmdldCkpLGRlLnR5cGUoaSwiZnVuY3Rpb24iLCJpbnZhbGlkIGF0dGFjaG1lbnQgZGF0YSIpO3ZhciBhPWkuX3JlZ2xUeXBlO3JldHVybiJ0ZXh0dXJlMmQiPT09YT8ocj1pLGRlKGU9PT1UbikpOiJ0ZXh0dXJlQ3ViZSI9PT1hPyhyPWksZGUoZT49U24mJmU8U24rNiwiaW52YWxpZCBjdWJlIG1hcCB0YXJnZXQiKSk6InJlbmRlcmJ1ZmZlciI9PT1hPyhuPWksZT1Bbik6ZGUucmFpc2UoImludmFsaWQgcmVnbCBvYmplY3QgZm9yIGF0dGFjaG1lbnQiKSxuZXcgbyhlLHIsbil9ZnVuY3Rpb24gaCh0LGUscixhLHMpe2lmKHIpe3ZhciBsPW4uY3JlYXRlMkQoe3dpZHRoOnQsaGVpZ2h0OmUsZm9ybWF0OmEsdHlwZTpzfSk7cmV0dXJuIGwuX3RleHR1cmUucmVmQ291bnQ9MCxuZXcgbyhUbixsLG51bGwpfXZhciB1PWkuY3JlYXRlKHt3aWR0aDp0LGhlaWdodDplLGZvcm1hdDphfSk7cmV0dXJuIHUuX3JlbmRlcmJ1ZmZlci5yZWZDb3VudD0wLG5ldyBvKEFuLG51bGwsdSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdCYmKHQudGV4dHVyZXx8dC5yZW5kZXJidWZmZXIpfWZ1bmN0aW9uIGQodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLnJlc2l6ZShlLHIpOnQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5yZXNpemUoZSxyKSl9ZnVuY3Rpb24gcCgpe3RoaXMuaWQ9QSsrLFRbdGhpcy5pZF09dGhpcyx0aGlzLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLmNvbG9yQXR0YWNobWVudHM9W10sdGhpcy5kZXB0aEF0dGFjaG1lbnQ9bnVsbCx0aGlzLnN0ZW5jaWxBdHRhY2htZW50PW51bGwsdGhpcy5kZXB0aFN0ZW5jaWxBdHRhY2htZW50PW51bGx9ZnVuY3Rpb24gbSh0KXt0LmNvbG9yQXR0YWNobWVudHMuZm9yRWFjaChzKSxzKHQuZGVwdGhBdHRhY2htZW50KSxzKHQuc3RlbmNpbEF0dGFjaG1lbnQpLHModC5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KX1mdW5jdGlvbiB2KGUpe3ZhciByPWUuZnJhbWVidWZmZXI7ZGUociwibXVzdCBub3QgZG91YmxlIGRlc3Ryb3kgZnJhbWVidWZmZXIiKSx0LmRlbGV0ZUZyYW1lYnVmZmVyKHIpLGUuZnJhbWVidWZmZXI9bnVsbCxhLmZyYW1lYnVmZmVyQ291bnQtLSxkZWxldGUgVFtlLmlkXX1mdW5jdGlvbiBnKGUpe3ZhciBuO3QuYmluZEZyYW1lYnVmZmVyKGtuLGUuZnJhbWVidWZmZXIpO3ZhciBpPWUuY29sb3JBdHRhY2htZW50cztmb3Iobj0wO248aS5sZW5ndGg7KytuKXUoRW4rbixpW25dKTtmb3Iobj1pLmxlbmd0aDtuPHIubWF4Q29sb3JBdHRhY2htZW50czsrK24pdC5mcmFtZWJ1ZmZlclRleHR1cmUyRChrbixFbituLFRuLG51bGwsMCk7dC5mcmFtZWJ1ZmZlclRleHR1cmUyRChrbix6bixUbixudWxsLDApLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoa24sTG4sVG4sbnVsbCwwKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKGtuLENuLFRuLG51bGwsMCksdShMbixlLmRlcHRoQXR0YWNobWVudCksdShDbixlLnN0ZW5jaWxBdHRhY2htZW50KSx1KHpuLGUuZGVwdGhTdGVuY2lsQXR0YWNobWVudCk7dmFyIGE9dC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGtuKTthIT09SW4mJmRlLnJhaXNlKCJmcmFtZWJ1ZmZlciBjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWQsIHN0YXR1cyA9ICIrVW5bYV0pLHQuYmluZEZyYW1lYnVmZmVyKGtuLF8ubmV4dCksXy5jdXI9Xy5uZXh0LHQuZ2V0RXJyb3IoKX1mdW5jdGlvbiB5KHQsbil7ZnVuY3Rpb24gaSh0LG4pe3ZhciBhO2RlKF8ubmV4dCE9PXMsImNhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UiKTt2YXIgbz1lLndlYmdsX2RyYXdfYnVmZmVycyx1PTAsZD0wLHA9ITAsdj0hMCx5PW51bGwsYj0hMCx4PSJyZ2JhIixBPSJ1aW50OCIsVD0xLFM9bnVsbCxFPW51bGwsTD1udWxsLEM9ITE7aWYoIm51bWJlciI9PXR5cGVvZiB0KXU9MHx0LGQ9MHxufHx1O2Vsc2UgaWYodCl7ZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnJhbWVidWZmZXIiKTt2YXIgej10O2lmKCJzaGFwZSJpbiB6KXt2YXIgST16LnNoYXBlO2RlKEFycmF5LmlzQXJyYXkoSSkmJkkubGVuZ3RoPj0yLCJpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlciIpLHU9SVswXSxkPUlbMV19ZWxzZSJyYWRpdXMiaW4geiYmKHU9ZD16LnJhZGl1cyksIndpZHRoImluIHomJih1PXoud2lkdGgpLCJoZWlnaHQiaW4geiYmKGQ9ei5oZWlnaHQpOygiY29sb3IiaW4genx8ImNvbG9ycyJpbiB6KSYmKHk9ei5jb2xvcnx8ei5jb2xvcnMsQXJyYXkuaXNBcnJheSh5KSYmZGUoMT09PXkubGVuZ3RofHxvLCJtdWx0aXBsZSByZW5kZXIgdGFyZ2V0cyBub3Qgc3VwcG9ydGVkIikpLHl8fCgiY29sb3JDb3VudCJpbiB6JiYoVD0wfHouY29sb3JDb3VudCxkZShUPjAsImludmFsaWQgY29sb3IgYnVmZmVyIGNvdW50IikpLCJjb2xvclRleHR1cmUiaW4geiYmKGI9ISF6LmNvbG9yVGV4dHVyZSx4PSJyZ2JhNCIpLCJjb2xvclR5cGUiaW4geiYmKEE9ei5jb2xvclR5cGUsYj8oZGUoZS5vZXNfdGV4dHVyZV9mbG9hdHx8ISgiZmxvYXQiPT09QXx8ImZsb2F0MzIiPT09QSksInlvdSBtdXN0IGVuYWJsZSBPRVNfdGV4dHVyZV9mbG9hdCBpbiBvcmRlciB0byB1c2UgZmxvYXRpbmcgcG9pbnQgZnJhbWVidWZmZXIgb2JqZWN0cyIpLGRlKGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdHx8ISgiaGFsZiBmbG9hdCI9PT1BfHwiZmxvYXQxNiI9PT1BKSwieW91IG11c3QgZW5hYmxlIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaW4gb3JkZXIgdG8gdXNlIDE2LWJpdCBmbG9hdGluZyBwb2ludCBmcmFtZWJ1ZmZlciBvYmplY3RzIikpOiJoYWxmIGZsb2F0Ij09PUF8fCJmbG9hdDE2Ij09PUE/KGRlKGUuZXh0X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0LCJ5b3UgbXVzdCBlbmFibGUgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IHRvIHVzZSAxNi1iaXQgcmVuZGVyIGJ1ZmZlcnMiKSx4PSJyZ2JhMTZmIik6ImZsb2F0IiE9PUEmJiJmbG9hdDMyIiE9PUF8fChkZShlLndlYmdsX2NvbG9yX2J1ZmZlcl9mbG9hdCwieW91IG11c3QgZW5hYmxlIFdFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCBpbiBvcmRlciB0byB1c2UgMzItYml0IGZsb2F0aW5nIHBvaW50IHJlbmRlcmJ1ZmZlcnMiKSx4PSJyZ2JhMzJmIiksZGUub25lT2YoQSxrLCJpbnZhbGlkIGNvbG9yIHR5cGUiKSksImNvbG9yRm9ybWF0ImluIHomJih4PXouY29sb3JGb3JtYXQsdy5pbmRleE9mKHgpPj0wP2I9ITA6TS5pbmRleE9mKHgpPj0wP2I9ITE6Yj9kZS5vbmVPZih6LmNvbG9yRm9ybWF0LHcsImludmFsaWQgY29sb3IgZm9ybWF0IGZvciB0ZXh0dXJlIik6ZGUub25lT2Yoei5jb2xvckZvcm1hdCxNLCJpbnZhbGlkIGNvbG9yIGZvcm1hdCBmb3IgcmVuZGVyYnVmZmVyIikpKSwoImRlcHRoVGV4dHVyZSJpbiB6fHwiZGVwdGhTdGVuY2lsVGV4dHVyZSJpbiB6KSYmKEM9ISghei5kZXB0aFRleHR1cmUmJiF6LmRlcHRoU3RlbmNpbFRleHR1cmUpLGRlKCFDfHxlLndlYmdsX2RlcHRoX3RleHR1cmUsIndlYmdsX2RlcHRoX3RleHR1cmUgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQiKSksImRlcHRoImluIHomJigiYm9vbGVhbiI9PXR5cGVvZiB6LmRlcHRoP3A9ei5kZXB0aDooUz16LmRlcHRoLHY9ITEpKSwic3RlbmNpbCJpbiB6JiYoImJvb2xlYW4iPT10eXBlb2Ygei5zdGVuY2lsP3Y9ei5zdGVuY2lsOihFPXouc3RlbmNpbCxwPSExKSksImRlcHRoU3RlbmNpbCJpbiB6JiYoImJvb2xlYW4iPT10eXBlb2Ygei5kZXB0aFN0ZW5jaWw/cD12PXouZGVwdGhTdGVuY2lsOihMPXouZGVwdGhTdGVuY2lsLHA9ITEsdj0hMSkpfWVsc2UgdT1kPTE7dmFyIEQ9bnVsbCxQPW51bGwsTz1udWxsLFI9bnVsbDtpZihBcnJheS5pc0FycmF5KHkpKUQ9eS5tYXAoYyk7ZWxzZSBpZih5KUQ9W2MoeSldO2Vsc2UgZm9yKEQ9bmV3IEFycmF5KFQpLGE9MDthPFQ7KythKURbYV09aCh1LGQsYix4LEEpO2RlKGUud2ViZ2xfZHJhd19idWZmZXJzfHxELmxlbmd0aDw9MSwieW91IG11c3QgZW5hYmxlIHRoZSBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGluIG9yZGVyIHRvIHVzZSBtdWx0aXBsZSBjb2xvciBidWZmZXJzLiIpLGRlKEQubGVuZ3RoPD1yLm1heENvbG9yQXR0YWNobWVudHMsInRvbyBtYW55IGNvbG9yIGF0dGFjaG1lbnRzLCBub3Qgc3VwcG9ydGVkIiksdT11fHxEWzBdLndpZHRoLGQ9ZHx8RFswXS5oZWlnaHQsUz9QPWMoUyk6cCYmIXYmJihQPWgodSxkLEMsImRlcHRoIiwidWludDMyIikpLEU/Tz1jKEUpOnYmJiFwJiYoTz1oKHUsZCwhMSwic3RlbmNpbCIsInVpbnQ4IikpLEw/Uj1jKEwpOiFTJiYhRSYmdiYmcCYmKFI9aCh1LGQsQywiZGVwdGggc3RlbmNpbCIsImRlcHRoIHN0ZW5jaWwiKSksZGUoISFTKyEhRSshIUw8PTEsImludmFsaWQgZnJhbWVidWZmZXIgY29uZmlndXJhdGlvbiwgY2FuIHNwZWNpZnkgZXhhY3RseSBvbmUgZGVwdGgvc3RlbmNpbCBhdHRhY2htZW50Iik7dmFyIEY9bnVsbDtmb3IoYT0wO2E8RC5sZW5ndGg7KythKWlmKGwoRFthXSx1LGQpLGRlKCFEW2FdfHxEW2FdLnRleHR1cmUmJlBuLmluZGV4T2YoRFthXS50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdCk+PTB8fERbYV0ucmVuZGVyYnVmZmVyJiZCbi5pbmRleE9mKERbYV0ucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0KT49MCwiZnJhbWVidWZmZXIgY29sb3IgYXR0YWNobWVudCAiK2ErIiBpcyBpbnZhbGlkIiksRFthXSYmRFthXS50ZXh0dXJlKXt2YXIgaj1PbltEW2FdLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0XSpSbltEW2FdLnRleHR1cmUuX3RleHR1cmUudHlwZV07bnVsbD09PUY/Rj1qOmRlKEY9PT1qLCJhbGwgY29sb3IgYXR0YWNobWVudHMgbXVjaCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbC4iKX1yZXR1cm4gbChQLHUsZCksZGUoIVB8fFAudGV4dHVyZSYmUC50ZXh0dXJlLl90ZXh0dXJlLmZvcm1hdD09PURufHxQLnJlbmRlcmJ1ZmZlciYmUC5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5mb3JtYXQ9PT1GbiwiaW52YWxpZCBkZXB0aCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QiKSxsKE8sdSxkKSxkZSghT3x8Ty5yZW5kZXJidWZmZXImJk8ucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZm9ybWF0PT09am4sImludmFsaWQgc3RlbmNpbCBhdHRhY2htZW50IGZvciBmcmFtZWJ1ZmZlciBvYmplY3QiKSxsKFIsdSxkKSxkZSghUnx8Ui50ZXh0dXJlJiZSLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0PT09Tm58fFIucmVuZGVyYnVmZmVyJiZSLnJlbmRlcmJ1ZmZlci5fcmVuZGVyYnVmZmVyLmZvcm1hdD09PU5uLCJpbnZhbGlkIGRlcHRoLXN0ZW5jaWwgYXR0YWNobWVudCBmb3IgZnJhbWVidWZmZXIgb2JqZWN0IiksbShzKSxzLndpZHRoPXUscy5oZWlnaHQ9ZCxzLmNvbG9yQXR0YWNobWVudHM9RCxzLmRlcHRoQXR0YWNobWVudD1QLHMuc3RlbmNpbEF0dGFjaG1lbnQ9TyxzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9UixpLmNvbG9yPUQubWFwKGYpLGkuZGVwdGg9ZihQKSxpLnN0ZW5jaWw9ZihPKSxpLmRlcHRoU3RlbmNpbD1mKFIpLGkud2lkdGg9cy53aWR0aCxpLmhlaWdodD1zLmhlaWdodCxnKHMpLGl9ZnVuY3Rpb24gbyh0LGUpe2RlKF8ubmV4dCE9PXMsImNhbiBub3QgcmVzaXplIGEgZnJhbWVidWZmZXIgd2hpY2ggaXMgY3VycmVudGx5IGluIHVzZSIpO3ZhciByPTB8dCxuPTB8ZXx8cjtpZihyPT09cy53aWR0aCYmbj09PXMuaGVpZ2h0KXJldHVybiBpO2Zvcih2YXIgYT1zLmNvbG9yQXR0YWNobWVudHMsbz0wO288YS5sZW5ndGg7KytvKWQoYVtvXSxyLG4pO3JldHVybiBkKHMuZGVwdGhBdHRhY2htZW50LHIsbiksZChzLnN0ZW5jaWxBdHRhY2htZW50LHIsbiksZChzLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQscixuKSxzLndpZHRoPWkud2lkdGg9cixzLmhlaWdodD1pLmhlaWdodD1uLGcocyksaX12YXIgcz1uZXcgcDtyZXR1cm4gYS5mcmFtZWJ1ZmZlckNvdW50KyssaSh0LG4pLCR0KGkse3Jlc2l6ZTpvLF9yZWdsVHlwZToiZnJhbWVidWZmZXIiLF9mcmFtZWJ1ZmZlcjpzLGRlc3Ryb3k6ZnVuY3Rpb24oKXt2KHMpLG0ocyl9LHVzZTpmdW5jdGlvbih0KXtfLnNldEZCTyh7ZnJhbWVidWZmZXI6aX0sdCl9fSl9ZnVuY3Rpb24gYih0KXtmdW5jdGlvbiBpKHQpe3ZhciByO2RlKG8uaW5kZXhPZihfLm5leHQpPDAsImNhbiBub3QgdXBkYXRlIGZyYW1lYnVmZmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiB1c2UiKTt2YXIgYT1lLndlYmdsX2RyYXdfYnVmZmVycyxzPXtjb2xvcjpudWxsfSxsPTAsdT1udWxsLGM9InJnYmEiLGg9InVpbnQ4IixmPTE7aWYoIm51bWJlciI9PXR5cGVvZiB0KWw9MHx0O2Vsc2UgaWYodCl7ZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnJhbWVidWZmZXIiKTt2YXIgZD10O2lmKCJzaGFwZSJpbiBkKXt2YXIgcD1kLnNoYXBlO2RlKEFycmF5LmlzQXJyYXkocCkmJnAubGVuZ3RoPj0yLCJpbnZhbGlkIHNoYXBlIGZvciBmcmFtZWJ1ZmZlciIpLGRlKHBbMF09PT1wWzFdLCJjdWJlIGZyYW1lYnVmZmVyIG11c3QgYmUgc3F1YXJlIiksbD1wWzBdfWVsc2UicmFkaXVzImluIGQmJihsPTB8ZC5yYWRpdXMpLCJ3aWR0aCJpbiBkPyhsPTB8ZC53aWR0aCwiaGVpZ2h0ImluIGQmJmRlKGQuaGVpZ2h0PT09bCwibXVzdCBiZSBzcXVhcmUiKSk6ImhlaWdodCJpbiBkJiYobD0wfGQuaGVpZ2h0KTsoImNvbG9yImluIGR8fCJjb2xvcnMiaW4gZCkmJih1PWQuY29sb3J8fGQuY29sb3JzLEFycmF5LmlzQXJyYXkodSkmJmRlKDE9PT11Lmxlbmd0aHx8YSwibXVsdGlwbGUgcmVuZGVyIHRhcmdldHMgbm90IHN1cHBvcnRlZCIpKSx1fHwoImNvbG9yQ291bnQiaW4gZCYmKGY9MHxkLmNvbG9yQ291bnQsZGUoZj4wLCJpbnZhbGlkIGNvbG9yIGJ1ZmZlciBjb3VudCIpKSwiY29sb3JUeXBlImluIGQmJihkZS5vbmVPZihkLmNvbG9yVHlwZSxrLCJpbnZhbGlkIGNvbG9yIHR5cGUiKSxoPWQuY29sb3JUeXBlKSwiY29sb3JGb3JtYXQiaW4gZCYmKGM9ZC5jb2xvckZvcm1hdCxkZS5vbmVPZihkLmNvbG9yRm9ybWF0LHcsImludmFsaWQgY29sb3IgZm9ybWF0IGZvciB0ZXh0dXJlIikpKSwiZGVwdGgiaW4gZCYmKHMuZGVwdGg9ZC5kZXB0aCksInN0ZW5jaWwiaW4gZCYmKHMuc3RlbmNpbD1kLnN0ZW5jaWwpLCJkZXB0aFN0ZW5jaWwiaW4gZCYmKHMuZGVwdGhTdGVuY2lsPWQuZGVwdGhTdGVuY2lsKX1lbHNlIGw9MTt2YXIgbTtpZih1KWlmKEFycmF5LmlzQXJyYXkodSkpZm9yKG09W10scj0wO3I8dS5sZW5ndGg7KytyKW1bcl09dVtyXTtlbHNlIG09W3VdO2Vsc2V7bT1BcnJheShmKTt2YXIgdj17cmFkaXVzOmwsZm9ybWF0OmMsdHlwZTpofTtmb3Iocj0wO3I8ZjsrK3IpbVtyXT1uLmNyZWF0ZUN1YmUodil9Zm9yKHMuY29sb3I9QXJyYXkobS5sZW5ndGgpLHI9MDtyPG0ubGVuZ3RoOysrcil7dmFyIGc9bVtyXTtkZSgiZnVuY3Rpb24iPT10eXBlb2YgZyYmInRleHR1cmVDdWJlIj09PWcuX3JlZ2xUeXBlLCJpbnZhbGlkIGN1YmUgbWFwIiksbD1sfHxnLndpZHRoLGRlKGcud2lkdGg9PT1sJiZnLmhlaWdodD09PWwsImludmFsaWQgY3ViZSBtYXAgc2hhcGUiKSxzLmNvbG9yW3JdPXt0YXJnZXQ6U24sZGF0YTptW3JdfX1mb3Iocj0wO3I8NjsrK3Ipe2Zvcih2YXIgYj0wO2I8bS5sZW5ndGg7KytiKXMuY29sb3JbYl0udGFyZ2V0PVNuK3I7cj4wJiYocy5kZXB0aD1vWzBdLmRlcHRoLHMuc3RlbmNpbD1vWzBdLnN0ZW5jaWwscy5kZXB0aFN0ZW5jaWw9b1swXS5kZXB0aFN0ZW5jaWwpLG9bcl0/b1tyXShzKTpvW3JdPXkocyl9cmV0dXJuICR0KGkse3dpZHRoOmwsaGVpZ2h0OmwsY29sb3I6bX0pfWZ1bmN0aW9uIGEodCl7dmFyIGUsbj0wfHQ7aWYoZGUobj4wJiZuPD1yLm1heEN1YmVNYXBTaXplLCJpbnZhbGlkIHJhZGl1cyBmb3IgY3ViZSBmYm8iKSxuPT09aS53aWR0aClyZXR1cm4gaTt2YXIgYT1pLmNvbG9yO2ZvcihlPTA7ZTxhLmxlbmd0aDsrK2UpYVtlXS5yZXNpemUobik7Zm9yKGU9MDtlPDY7KytlKW9bZV0ucmVzaXplKG4pO3JldHVybiBpLndpZHRoPWkuaGVpZ2h0PW4saX12YXIgbz1BcnJheSg2KTtyZXR1cm4gaSh0KSwkdChpLHtmYWNlczpvLHJlc2l6ZTphLF9yZWdsVHlwZToiZnJhbWVidWZmZXJDdWJlIixkZXN0cm95OmZ1bmN0aW9uKCl7by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSl9fSl9ZnVuY3Rpb24geCgpe3hlKFQpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5mcmFtZWJ1ZmZlcj10LmNyZWF0ZUZyYW1lYnVmZmVyKCksZyhlKX0pfXZhciBfPXtjdXI6bnVsbCxuZXh0Om51bGwsZGlydHk6ITEsc2V0RkJPOm51bGx9LHc9WyJyZ2JhIl0sTT1bInJnYmE0IiwicmdiNTY1IiwicmdiNSBhMSJdO2UuZXh0X3NyZ2ImJk0ucHVzaCgic3JnYmEiKSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmTS5wdXNoKCJyZ2JhMTZmIiwicmdiMTZmIiksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJk0ucHVzaCgicmdiYTMyZiIpO3ZhciBrPVsidWludDgiXTtlLm9lc190ZXh0dXJlX2hhbGZfZmxvYXQmJmsucHVzaCgiaGFsZiBmbG9hdCIsImZsb2F0MTYiKSxlLm9lc190ZXh0dXJlX2Zsb2F0JiZrLnB1c2goImZsb2F0IiwiZmxvYXQzMiIpO3ZhciBBPTAsVD17fTtyZXR1cm4gJHQoXyx7Z2V0RnJhbWVidWZmZXI6ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJmcmFtZWJ1ZmZlciI9PT10Ll9yZWdsVHlwZSl7dmFyIGU9dC5fZnJhbWVidWZmZXI7aWYoZSBpbnN0YW5jZW9mIHApcmV0dXJuIGV9cmV0dXJuIG51bGx9LGNyZWF0ZTp5LGNyZWF0ZUN1YmU6YixjbGVhcjpmdW5jdGlvbigpe3hlKFQpLmZvckVhY2godil9LHJlc3RvcmU6eH0pfWZ1bmN0aW9uIFB0KCl7dGhpcy5zdGF0ZT0wLHRoaXMueD0wLHRoaXMueT0wLHRoaXMuej0wLHRoaXMudz0wLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5zaXplPTAsdGhpcy5ub3JtYWxpemVkPSExLHRoaXMudHlwZT1Wbix0aGlzLm9mZnNldD0wLHRoaXMuc3RyaWRlPTAsdGhpcy5kaXZpc29yPTB9ZnVuY3Rpb24gT3QodCxlLHIsbixpKXtmb3IodmFyIGE9ci5tYXhBdHRyaWJ1dGVzLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKW9bc109bmV3IFB0O3JldHVybntSZWNvcmQ6UHQsc2NvcGU6e30sc3RhdGU6b319ZnVuY3Rpb24gUnQodCxlLHIsbil7ZnVuY3Rpb24gaSh0LGUscixuKXt0aGlzLm5hbWU9dCx0aGlzLmlkPWUsdGhpcy5sb2NhdGlvbj1yLHRoaXMuaW5mbz1ufWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdLmlkPT09ZS5pZClyZXR1cm4gdm9pZCh0W3JdLmxvY2F0aW9uPWUubG9jYXRpb24pO3QucHVzaChlKX1mdW5jdGlvbiBvKHIsbixpKXt2YXIgYT1yPT09SG4/YzpoLG89YVtuXTtpZighbyl7dmFyIHM9ZS5zdHIobik7bz10LmNyZWF0ZVNoYWRlcihyKSx0LnNoYWRlclNvdXJjZShvLHMpLHQuY29tcGlsZVNoYWRlcihvKSxkZS5zaGFkZXJFcnJvcih0LG8scyxyLGkpLGFbbl09b31yZXR1cm4gb31mdW5jdGlvbiBzKHQsZSl7dGhpcy5pZD1wKyssdGhpcy5mcmFnSWQ9dCx0aGlzLnZlcnRJZD1lLHRoaXMucHJvZ3JhbT1udWxsLHRoaXMudW5pZm9ybXM9W10sdGhpcy5hdHRyaWJ1dGVzPVtdLG4ucHJvZmlsZSYmKHRoaXMuc3RhdHM9e3VuaWZvcm1zQ291bnQ6MCxhdHRyaWJ1dGVzQ291bnQ6MH0pfWZ1bmN0aW9uIGwocixzKXt2YXIgbCx1LGM9byhIbixyLmZyYWdJZCksaD1vKHFuLHIudmVydElkKSxmPXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKTt0LmF0dGFjaFNoYWRlcihmLGMpLHQuYXR0YWNoU2hhZGVyKGYsaCksdC5saW5rUHJvZ3JhbShmKSxkZS5saW5rRXJyb3IodCxmLGUuc3RyKHIuZnJhZ0lkKSxlLnN0cihyLnZlcnRJZCkscyk7dmFyIGQ9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKGYsR24pO24ucHJvZmlsZSYmKHIuc3RhdHMudW5pZm9ybXNDb3VudD1kKTt2YXIgcD1yLnVuaWZvcm1zO2ZvcihsPTA7bDxkOysrbClpZih1PXQuZ2V0QWN0aXZlVW5pZm9ybShmLGwpKWlmKHUuc2l6ZT4xKWZvcih2YXIgbT0wO208dS5zaXplOysrbSl7dmFyIHY9dS5uYW1lLnJlcGxhY2UoIlswXSIsIlsiK20rIl0iKTthKHAsbmV3IGkodixlLmlkKHYpLHQuZ2V0VW5pZm9ybUxvY2F0aW9uKGYsdiksdSkpfWVsc2UgYShwLG5ldyBpKHUubmFtZSxlLmlkKHUubmFtZSksdC5nZXRVbmlmb3JtTG9jYXRpb24oZix1Lm5hbWUpLHUpKTt2YXIgZz10LmdldFByb2dyYW1QYXJhbWV0ZXIoZixZbik7bi5wcm9maWxlJiYoci5zdGF0cy5hdHRyaWJ1dGVzQ291bnQ9Zyk7dmFyIHk9ci5hdHRyaWJ1dGVzO2ZvcihsPTA7bDxnOysrbCkodT10LmdldEFjdGl2ZUF0dHJpYihmLGwpKSYmYSh5LG5ldyBpKHUubmFtZSxlLmlkKHUubmFtZSksdC5nZXRBdHRyaWJMb2NhdGlvbihmLHUubmFtZSksdSkpfWZ1bmN0aW9uIHUoKXtjPXt9LGg9e307Zm9yKHZhciB0PTA7dDxkLmxlbmd0aDsrK3QpbChkW3RdKX12YXIgYz17fSxoPXt9LGY9e30sZD1bXSxwPTA7cmV0dXJuIG4ucHJvZmlsZSYmKHIuZ2V0TWF4VW5pZm9ybXNDb3VudD1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0YXRzLnVuaWZvcm1zQ291bnQ+dCYmKHQ9ZS5zdGF0cy51bmlmb3Jtc0NvdW50KX0pLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uuc3RhdHMuYXR0cmlidXRlc0NvdW50PnQmJih0PWUuc3RhdHMuYXR0cmlidXRlc0NvdW50KX0pLHR9KSx7Y2xlYXI6ZnVuY3Rpb24oKXt2YXIgZT10LmRlbGV0ZVNoYWRlci5iaW5kKHQpO3hlKGMpLmZvckVhY2goZSksYz17fSx4ZShoKS5mb3JFYWNoKGUpLGg9e30sZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZGVsZXRlUHJvZ3JhbShlLnByb2dyYW0pfSksZC5sZW5ndGg9MCxmPXt9LHIuc2hhZGVyQ291bnQ9MH0scHJvZ3JhbTpmdW5jdGlvbih0LGUsbil7ZGUuY29tbWFuZCh0Pj0wLCJtaXNzaW5nIHZlcnRleCBzaGFkZXIiLG4pLGRlLmNvbW1hbmQoZT49MCwibWlzc2luZyBmcmFnbWVudCBzaGFkZXIiLG4pO3ZhciBpPWZbZV07aXx8KGk9ZltlXT17fSk7dmFyIGE9aVt0XTtyZXR1cm4gYXx8KGE9bmV3IHMoZSx0KSxyLnNoYWRlckNvdW50KyssbChhLG4pLGlbdF09YSxkLnB1c2goYSkpLGF9LHJlc3RvcmU6dSxzaGFkZXI6byxmcmFnOi0xLHZlcnQ6LTF9fWZ1bmN0aW9uIEZ0KHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKG8pe3ZhciBzO251bGw9PT1lLm5leHQ/KGRlKGkucHJlc2VydmVEcmF3aW5nQnVmZmVyLCd5b3UgbXVzdCBjcmVhdGUgYSB3ZWJnbCBjb250ZXh0IHdpdGggInByZXNlcnZlRHJhd2luZ0J1ZmZlciI6dHJ1ZSBpbiBvcmRlciB0byByZWFkIHBpeGVscyBmcm9tIHRoZSBkcmF3aW5nIGJ1ZmZlcicpLHM9V24pOihkZShudWxsIT09ZS5uZXh0LmNvbG9yQXR0YWNobWVudHNbMF0udGV4dHVyZSwiWW91IGNhbm5vdCByZWFkIGZyb20gYSByZW5kZXJidWZmZXIiKSxzPWUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZSxhLm9lc190ZXh0dXJlX2Zsb2F0P2RlKHM9PT1Xbnx8cz09PUpuLCJSZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSB0eXBlcyAndWludDgnIGFuZCAnZmxvYXQnIik6ZGUocz09PVduLCJSZWFkaW5nIGZyb20gYSBmcmFtZWJ1ZmZlciBpcyBvbmx5IGFsbG93ZWQgZm9yIHRoZSB0eXBlICd1aW50OCciKSk7dmFyIGw9MCx1PTAsYz1uLmZyYW1lYnVmZmVyV2lkdGgsaD1uLmZyYW1lYnVmZmVySGVpZ2h0LGY9bnVsbDtRdChvKT9mPW86byYmKGRlLnR5cGUobywib2JqZWN0IiwiaW52YWxpZCBhcmd1bWVudHMgdG8gcmVnbC5yZWFkKCkiKSxsPTB8by54LHU9MHxvLnksZGUobD49MCYmbDxuLmZyYW1lYnVmZmVyV2lkdGgsImludmFsaWQgeCBvZmZzZXQgZm9yIHJlZ2wucmVhZCIpLGRlKHU+PTAmJnU8bi5mcmFtZWJ1ZmZlckhlaWdodCwiaW52YWxpZCB5IG9mZnNldCBmb3IgcmVnbC5yZWFkIiksYz0wfChvLndpZHRofHxuLmZyYW1lYnVmZmVyV2lkdGgtbCksaD0wfChvLmhlaWdodHx8bi5mcmFtZWJ1ZmZlckhlaWdodC11KSxmPW8uZGF0YXx8bnVsbCksZiYmKHM9PT1Xbj9kZShmIGluc3RhbmNlb2YgVWludDhBcnJheSwiYnVmZmVyIG11c3QgYmUgJ1VpbnQ4QXJyYXknIHdoZW4gcmVhZGluZyBmcm9tIGEgZnJhbWVidWZmZXIgb2YgdHlwZSAndWludDgnIik6cz09PUpuJiZkZShmIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LCJidWZmZXIgbXVzdCBiZSAnRmxvYXQzMkFycmF5JyB3aGVuIHJlYWRpbmcgZnJvbSBhIGZyYW1lYnVmZmVyIG9mIHR5cGUgJ2Zsb2F0JyIpKSxkZShjPjAmJmMrbDw9bi5mcmFtZWJ1ZmZlcldpZHRoLCJpbnZhbGlkIHdpZHRoIGZvciByZWFkIHBpeGVscyIpLGRlKGg+MCYmaCt1PD1uLmZyYW1lYnVmZmVySGVpZ2h0LCJpbnZhbGlkIGhlaWdodCBmb3IgcmVhZCBwaXhlbHMiKSxyKCk7dmFyIGQ9YypoKjQ7cmV0dXJuIGZ8fChzPT09V24/Zj1uZXcgVWludDhBcnJheShkKTpzPT09Sm4mJihmPWZ8fG5ldyBGbG9hdDMyQXJyYXkoZCkpKSxkZS5pc1R5cGVkQXJyYXkoZiwiZGF0YSBidWZmZXIgZm9yIHJlZ2wucmVhZCgpIG11c3QgYmUgYSB0eXBlZGFycmF5IiksZGUoZi5ieXRlTGVuZ3RoPj1kLCJkYXRhIGJ1ZmZlciBmb3IgcmVnbC5yZWFkKCkgdG9vIHNtYWxsIiksdC5waXhlbFN0b3JlaShabiw0KSx0LnJlYWRQaXhlbHMobCx1LGMsaCxYbixzLGYpLGZ9ZnVuY3Rpb24gcyh0KXt2YXIgcjtyZXR1cm4gZS5zZXRGQk8oe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXJ9LGZ1bmN0aW9uKCl7cj1vKHQpfSkscn1mdW5jdGlvbiBsKHQpe3JldHVybiB0JiYiZnJhbWVidWZmZXIiaW4gdD9zKHQpOm8odCl9cmV0dXJuIGx9ZnVuY3Rpb24ganQodCl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfWZ1bmN0aW9uIE50KHQpe3JldHVybiBqdCh0KS5qb2luKCIiKX1mdW5jdGlvbiBCdCgpe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciBlPTA7ZTxsLmxlbmd0aDsrK2UpaWYobFtlXT09PXQpcmV0dXJuIHNbZV07dmFyIHI9ImciK28rKztyZXR1cm4gcy5wdXNoKHIpLGwucHVzaCh0KSxyfWZ1bmN0aW9uIGUoKXtmdW5jdGlvbiB0KCl7ci5wdXNoLmFwcGx5KHIsanQoYXJndW1lbnRzKSl9ZnVuY3Rpb24gZSgpe3ZhciB0PSJ2IitvKys7cmV0dXJuIG4ucHVzaCh0KSxhcmd1bWVudHMubGVuZ3RoPjAmJihyLnB1c2godCwiPSIpLHIucHVzaC5hcHBseShyLGp0KGFyZ3VtZW50cykpLHIucHVzaCgiOyIpKSx0fXZhciByPVtdLG49W107cmV0dXJuICR0KHQse2RlZjplLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIE50KFtuLmxlbmd0aD4wPyJ2YXIgIituKyI7IjoiIixOdChyKV0pfX0pfWZ1bmN0aW9uIHIoKXtmdW5jdGlvbiB0KHQsZSl7bih0LGUsIj0iLHIuZGVmKHQsZSksIjsiKX12YXIgcj1lKCksbj1lKCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gJHQoZnVuY3Rpb24oKXtyLmFwcGx5KHIsanQoYXJndW1lbnRzKSl9LHtkZWY6ci5kZWYsZW50cnk6cixleGl0Om4sc2F2ZTp0LHNldDpmdW5jdGlvbihlLG4saSl7dChlLG4pLHIoZSxuLCI9IixpLCI7Iil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGkoKSthKCl9fSl9ZnVuY3Rpb24gbigpe3ZhciB0PU50KGFyZ3VtZW50cyksZT1yKCksbj1yKCksaT1lLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gJHQoZSx7dGhlbjpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KGUsanQoYXJndW1lbnRzKSksdGhpc30sZWxzZTpmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KG4sanQoYXJndW1lbnRzKSksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1hKCk7cmV0dXJuIGUmJihlPSJlbHNleyIrZSsifSIpLE50KFsiaWYoIix0LCIpeyIsaSgpLCJ9IixlXSl9fSl9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD0iYSIraS5sZW5ndGg7cmV0dXJuIGkucHVzaCh0KSx0fXZhciBpPVtdO2U9ZXx8MDtmb3IodmFyIGE9MDthPGU7KythKW4oKTt2YXIgbz1yKCkscz1vLnRvU3RyaW5nO3JldHVybiBjW3RdPSR0KG8se2FyZzpuLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIE50KFsiZnVuY3Rpb24oIixpLmpvaW4oKSwiKXsiLHMoKSwifSJdKX19KX1mdW5jdGlvbiBhKCl7dmFyIHQ9WycidXNlIHN0cmljdCI7Jyx1LCJyZXR1cm4geyJdO09iamVjdC5rZXlzKGMpLmZvckVhY2goZnVuY3Rpb24oZSl7dC5wdXNoKCciJyxlLCciOicsY1tlXS50b1N0cmluZygpLCIsIil9KSx0LnB1c2goIn0iKTt2YXIgZT1OdCh0KS5yZXBsYWNlKC87L2csIjtcbiIpLnJlcGxhY2UoL30vZywifVxuIikucmVwbGFjZSgvey9nLCJ7XG4iKTtyZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCxzLmNvbmNhdChlKSkuYXBwbHkobnVsbCxsKX12YXIgbz0wLHM9W10sbD1bXSx1PWUoKSxjPXt9O3JldHVybntnbG9iYWw6dSxsaW5rOnQsYmxvY2s6ZSxwcm9jOmksc2NvcGU6cixjb25kOm4sY29tcGlsZTphfX1mdW5jdGlvbiBVdCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8UXQodCl8fFoodCl9ZnVuY3Rpb24gVnQodCl7cmV0dXJuIHQuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0PT09SWk/LTE6ZT09PUlpPzE6dDxlPy0xOjF9KX1mdW5jdGlvbiBIdCh0LGUscixuKXt0aGlzLnRoaXNEZXA9dCx0aGlzLmNvbnRleHREZXA9ZSx0aGlzLnByb3BEZXA9cix0aGlzLmFwcGVuZD1ufWZ1bmN0aW9uIHF0KHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIEd0KHQpe3JldHVybiBuZXcgSHQoITEsITEsITEsdCl9ZnVuY3Rpb24gWXQodCxlKXt2YXIgcj10LnR5cGU7aWYocj09PWVpKXt2YXIgbj10LmRhdGEubGVuZ3RoO3JldHVybiBuZXcgSHQoITAsbj49MSxuPj0yLGUpfWlmKHI9PT1haSl7dmFyIGk9dC5kYXRhO3JldHVybiBuZXcgSHQoaS50aGlzRGVwLGkuY29udGV4dERlcCxpLnByb3BEZXAsZSl9cmV0dXJuIG5ldyBIdChyPT09aWkscj09PW5pLHI9PT1yaSxlKX1mdW5jdGlvbiBYdCh0LGUscixuLGksYSxvLHMsbCx1LGMsaCxmLGQscCl7ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdC5yZXBsYWNlKCIuIiwiXyIpfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuPW0odCk7ZXQucHVzaCh0KSx0dFtuXT0kW25dPSEhcixydFtuXT1lfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPW0odCk7ZXQucHVzaCh0KSwKQXJyYXkuaXNBcnJheShyKT8oJFtuXT1yLnNsaWNlKCksdHRbbl09ci5zbGljZSgpKTokW25dPXR0W25dPXIsbnRbbl09ZX1mdW5jdGlvbiB5KCl7dmFyIHQ9QnQoKSxyPXQubGluayxuPXQuZ2xvYmFsO3QuaWQ9b3QrKyx0LmJhdGNoSWQ9IjAiO3ZhciBpPXIoaXQpLGE9dC5zaGFyZWQ9e3Byb3BzOiJhMCJ9O09iamVjdC5rZXlzKGl0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2FbdF09bi5kZWYoaSwiLiIsdCl9KSxkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuQ0hFQ0s9cihkZSksdC5jb21tYW5kU3RyPWRlLmd1ZXNzQ29tbWFuZCgpLHQuY29tbWFuZD1yKHQuY29tbWFuZFN0ciksdC5hc3NlcnQ9ZnVuY3Rpb24odCxlLG4pe3QoImlmKCEoIixlLCIpKSIsdGhpcy5DSEVDSywiLmNvbW1hbmRSYWlzZSgiLHIobiksIiwiLHRoaXMuY29tbWFuZCwiKTsiKX0sYXQuaW52YWxpZEJsZW5kQ29tYmluYXRpb25zPVVhfSk7dmFyIG89dC5uZXh0PXt9LHM9dC5jdXJyZW50PXt9O09iamVjdC5rZXlzKG50KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkoJFt0XSkmJihvW3RdPW4uZGVmKGEubmV4dCwiLiIsdCksc1t0XT1uLmRlZihhLmN1cnJlbnQsIi4iLHQpKX0pO3ZhciBsPXQuY29uc3RhbnRzPXt9O09iamVjdC5rZXlzKGF0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkoYXRbdF0pKX0pLHQuaW52b2tlPWZ1bmN0aW9uKGUsbil7c3dpdGNoKG4udHlwZSl7Y2FzZSBlaTp2YXIgaT1bInRoaXMiLGEuY29udGV4dCxhLnByb3BzLHQuYmF0Y2hJZF07cmV0dXJuIGUuZGVmKHIobi5kYXRhKSwiLmNhbGwoIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSwiKSIpO2Nhc2Ugcmk6cmV0dXJuIGUuZGVmKGEucHJvcHMsbi5kYXRhKTtjYXNlIG5pOnJldHVybiBlLmRlZihhLmNvbnRleHQsbi5kYXRhKTtjYXNlIGlpOnJldHVybiBlLmRlZigidGhpcyIsbi5kYXRhKTtjYXNlIGFpOnJldHVybiBuLmRhdGEuYXBwZW5kKHQsZSksbi5kYXRhLnJlZn19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7dmFyIG49ZS5pZCh0KTtpZihuIGluIGMpcmV0dXJuIGNbbl07dmFyIGk9dS5zY29wZVtuXTtyZXR1cm4gaXx8KGk9dS5zY29wZVtuXT1uZXcgVyksY1tuXT1yKGkpfSx0fWZ1bmN0aW9uIGIodCl7dmFyIGUscj10LnN0YXRpYyxuPXQuZHluYW1pYztpZihEaSBpbiByKXt2YXIgaT0hIXJbRGldO2U9R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gaX0pLGUuZW5hYmxlPWl9ZWxzZSBpZihEaSBpbiBuKXt2YXIgYT1uW0RpXTtlPVl0KGEsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnZva2UoZSxhKX0pfXJldHVybiBlfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYztpZihQaSBpbiByKXt2YXIgaT1yW1BpXTtyZXR1cm4gaT8oaT1zLmdldEZyYW1lYnVmZmVyKGkpLGRlLmNvbW1hbmQoaSwiaW52YWxpZCBmcmFtZWJ1ZmZlciBvYmplY3QiKSxHdChmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO2Uuc2V0KG4uZnJhbWVidWZmZXIsIi5uZXh0IixyKTt2YXIgYT1uLmNvbnRleHQ7cmV0dXJuIGUuc2V0KGEsIi4iK1ZpLHIrIi53aWR0aCIpLGUuc2V0KGEsIi4iK0hpLHIrIi5oZWlnaHQiKSxyfSkpOkd0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7ZS5zZXQoci5mcmFtZWJ1ZmZlciwiLm5leHQiLCJudWxsIik7dmFyIG49ci5jb250ZXh0O3JldHVybiBlLnNldChuLCIuIitWaSxuKyIuIitZaSksZS5zZXQobiwiLiIrSGksbisiLiIrWGkpLCJudWxsIn0pfWlmKFBpIGluIG4pe3ZhciBhPW5bUGldO3JldHVybiBZdChhLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxhKSxuPXQuc2hhcmVkLGk9bi5mcmFtZWJ1ZmZlcixvPWUuZGVmKGksIi5nZXRGcmFtZWJ1ZmZlcigiLHIsIikiKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsIiEiK3IrInx8IitvLCJpbnZhbGlkIGZyYW1lYnVmZmVyIG9iamVjdCIpfSksZS5zZXQoaSwiLm5leHQiLG8pO3ZhciBzPW4uY29udGV4dDtyZXR1cm4gZS5zZXQocywiLiIrVmksbysiPyIrbysiLndpZHRoOiIrcysiLiIrWWkpLGUuc2V0KHMsIi4iK0hpLG8rIj8iK28rIi5oZWlnaHQ6IitzKyIuIitYaSksb30pfXJldHVybiBudWxsfWZ1bmN0aW9uIF8odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCBpbiBpKXt2YXIgbj1pW3RdO2RlLmNvbW1hbmRUeXBlKG4sIm9iamVjdCIsImludmFsaWQgIit0LHIuY29tbWFuZFN0cik7dmFyIG8scyxsPSEwLHU9MHxuLngsYz0wfG4ueTtyZXR1cm4id2lkdGgiaW4gbj8obz0wfG4ud2lkdGgsZGUuY29tbWFuZChvPj0wLCJpbnZhbGlkICIrdCxyLmNvbW1hbmRTdHIpKTpsPSExLCJoZWlnaHQiaW4gbj8ocz0wfG4uaGVpZ2h0LGRlLmNvbW1hbmQocz49MCwiaW52YWxpZCAiK3Qsci5jb21tYW5kU3RyKSk6bD0hMSxuZXcgSHQoIWwmJmUmJmUudGhpc0RlcCwhbCYmZSYmZS5jb250ZXh0RGVwLCFsJiZlJiZlLnByb3BEZXAsZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0LGk9bzsid2lkdGgiaW4gbnx8KGk9ZS5kZWYociwiLiIsVmksIi0iLHUpKTt2YXIgYT1zO3JldHVybiJoZWlnaHQiaW4gbnx8KGE9ZS5kZWYociwiLiIsSGksIi0iLGMpKSxbdSxjLGksYV19KX1pZih0IGluIGEpe3ZhciBoPWFbdF0sZj1ZdChoLGZ1bmN0aW9uKGUscil7dmFyIG49ZS5pbnZva2UocixoKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgIit0KX0pO3ZhciBpPWUuc2hhcmVkLmNvbnRleHQsYT1yLmRlZihuLCIueHwwIiksbz1yLmRlZihuLCIueXwwIikscz1yLmRlZignIndpZHRoIiBpbiAnLG4sIj8iLG4sIi53aWR0aHwwOiIsIigiLGksIi4iLFZpLCItIixhLCIpIiksbD1yLmRlZignImhlaWdodCIgaW4gJyxuLCI/IixuLCIuaGVpZ2h0fDA6IiwiKCIsaSwiLiIsSGksIi0iLG8sIikiKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLHMrIj49MCYmIitsKyI+PTAiLCJpbnZhbGlkICIrdCl9KSxbYSxvLHMsbF19KTtyZXR1cm4gZSYmKGYudGhpc0RlcD1mLnRoaXNEZXB8fGUudGhpc0RlcCxmLmNvbnRleHREZXA9Zi5jb250ZXh0RGVwfHxlLmNvbnRleHREZXAsZi5wcm9wRGVwPWYucHJvcERlcHx8ZS5wcm9wRGVwKSxmfXJldHVybiBlP25ldyBIdChlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuWzAsMCxlLmRlZihyLCIuIixWaSksZS5kZWYociwiLiIsSGkpXX0pOm51bGx9dmFyIGk9dC5zdGF0aWMsYT10LmR5bmFtaWMsbz1uKElpKTtpZihvKXt2YXIgcz1vO289bmV3IEh0KG8udGhpc0RlcCxvLmNvbnRleHREZXAsby5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9cy5hcHBlbmQodCxlKSxuPXQuc2hhcmVkLmNvbnRleHQ7cmV0dXJuIGUuc2V0KG4sIi4iK3FpLHJbMl0pLGUuc2V0KG4sIi4iK0dpLHJbM10pLHJ9KX1yZXR1cm57dmlld3BvcnQ6byxzY2lzc29yX2JveDpuKHppKX19ZnVuY3Rpb24gdyh0KXtmdW5jdGlvbiByKHQpe2lmKHQgaW4gaSl7dmFyIHI9ZS5pZChpW3RdKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2Muc2hhZGVyKHFhW3RdLHIsZGUuZ3Vlc3NDb21tYW5kKCkpfSk7dmFyIG49R3QoZnVuY3Rpb24oKXtyZXR1cm4gcn0pO3JldHVybiBuLmlkPXIsbn1pZih0IGluIGEpe3ZhciBvPWFbdF07cmV0dXJuIFl0KG8sZnVuY3Rpb24oZSxyKXt2YXIgbj1lLmludm9rZShyLG8pLGk9ci5kZWYoZS5zaGFyZWQuc3RyaW5ncywiLmlkKCIsbiwiKSIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3IoZS5zaGFyZWQuc2hhZGVyLCIuc2hhZGVyKCIscWFbdF0sIiwiLGksIiwiLGUuY29tbWFuZCwiKTsiKX0pLGl9KX1yZXR1cm4gbnVsbH12YXIgbixpPXQuc3RhdGljLGE9dC5keW5hbWljLG89cihSaSkscz1yKE9pKSxsPW51bGw7cmV0dXJuIHF0KG8pJiZxdChzKT8obD1jLnByb2dyYW0ocy5pZCxvLmlkKSxuPUd0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluayhsKX0pKTpuPW5ldyBIdChvJiZvLnRoaXNEZXB8fHMmJnMudGhpc0RlcCxvJiZvLmNvbnRleHREZXB8fHMmJnMuY29udGV4dERlcCxvJiZvLnByb3BEZXB8fHMmJnMucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByLG49dC5zaGFyZWQuc2hhZGVyO3I9bz9vLmFwcGVuZCh0LGUpOmUuZGVmKG4sIi4iLFJpKTt2YXIgaTtpPXM/cy5hcHBlbmQodCxlKTplLmRlZihuLCIuIixPaSk7dmFyIGE9bisiLnByb2dyYW0oIitpKyIsIityO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2ErPSIsIit0LmNvbW1hbmR9KSxlLmRlZihhKyIpIil9KSx7ZnJhZzpvLHZlcnQ6cyxwcm9nVmFyOm4scHJvZ3JhbTpsfX1mdW5jdGlvbiBNKHQsZSl7ZnVuY3Rpb24gcih0LHIpe2lmKHQgaW4gbil7dmFyIGE9MHxuW3RdO3JldHVybiBkZS5jb21tYW5kKCFyfHxhPj0wLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLEd0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHImJih0Lk9GRlNFVD1hKSxhfSl9aWYodCBpbiBpKXt2YXIgcz1pW3RdO3JldHVybiBZdChzLGZ1bmN0aW9uKGUsbil7dmFyIGk9ZS5pbnZva2UobixzKTtyZXR1cm4gciYmKGUuT0ZGU0VUPWksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChuLGkrIj49MCIsImludmFsaWQgIit0KX0pKSxpfSl9cmV0dXJuIHImJm8/R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5PRkZTRVQ9IjAiLDB9KTpudWxsfXZhciBuPXQuc3RhdGljLGk9dC5keW5hbWljLG89ZnVuY3Rpb24oKXtpZihGaSBpbiBuKXt2YXIgdD1uW0ZpXTtVdCh0KT90PWEuZ2V0RWxlbWVudHMoYS5jcmVhdGUodCwhMCkpOnQmJih0PWEuZ2V0RWxlbWVudHModCksZGUuY29tbWFuZCh0LCJpbnZhbGlkIGVsZW1lbnRzIixlLmNvbW1hbmRTdHIpKTt2YXIgcj1HdChmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1uLG59cmV0dXJuIGUuRUxFTUVOVFM9bnVsbCxudWxsfSk7cmV0dXJuIHIudmFsdWU9dCxyfWlmKEZpIGluIGkpe3ZhciBvPWlbRmldO3JldHVybiBZdChvLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQsbj1yLmlzQnVmZmVyQXJncyxpPXIuZWxlbWVudHMsYT10Lmludm9rZShlLG8pLHM9ZS5kZWYoIm51bGwiKSxsPWUuZGVmKG4sIigiLGEsIikiKSx1PXQuY29uZChsKS50aGVuKHMsIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UocywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydCh1LmVsc2UsIiEiK2ErInx8IitzLCJpbnZhbGlkIGVsZW1lbnRzIil9KSxlLmVudHJ5KHUpLGUuZXhpdCh0LmNvbmQobCkudGhlbihpLCIuZGVzdHJveVN0cmVhbSgiLHMsIik7IikpLHQuRUxFTUVOVFM9cyxzfSl9cmV0dXJuIG51bGx9KCkscz1yKEJpLCEwKTtyZXR1cm57ZWxlbWVudHM6byxwcmltaXRpdmU6ZnVuY3Rpb24oKXtpZihqaSBpbiBuKXt2YXIgdD1uW2ppXTtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcih0LEJlLCJpbnZhbGlkIHByaW1pdHZlIixlLmNvbW1hbmRTdHIpLEd0KGZ1bmN0aW9uKGUscil7cmV0dXJuIEJlW3RdfSl9aWYoamkgaW4gaSl7dmFyIHI9aVtqaV07cmV0dXJuIFl0KHIsZnVuY3Rpb24odCxlKXt2YXIgbj10LmNvbnN0YW50cy5wcmltVHlwZXMsaT10Lmludm9rZShlLHIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsaSsiIGluICIrbiwiaW52YWxpZCBwcmltaXRpdmUsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoQmUpKX0pLGUuZGVmKG4sIlsiLGksIl0iKX0pfXJldHVybiBvP3F0KG8pP0d0KG8udmFsdWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnByaW1UeXBlIil9OmZ1bmN0aW9uKCl7cmV0dXJuIEFhfSk6bmV3IEh0KG8udGhpc0RlcCxvLmNvbnRleHREZXAsby5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gZS5kZWYociwiPyIsciwiLnByaW1UeXBlOiIsQWEpfSk6bnVsbH0oKSxjb3VudDpmdW5jdGlvbigpe2lmKE5pIGluIG4pe3ZhciB0PTB8bltOaV07cmV0dXJuIGRlLmNvbW1hbmQoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wLCJpbnZhbGlkIHZlcnRleCBjb3VudCIsZS5jb21tYW5kU3RyKSxHdChmdW5jdGlvbigpe3JldHVybiB0fSl9aWYoTmkgaW4gaSl7dmFyIHI9aVtOaV07cmV0dXJuIFl0KHIsZnVuY3Rpb24odCxlKXt2YXIgbj10Lmludm9rZShlLHIpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsInR5cGVvZiAiK24rJz09PSJudW1iZXIiJiYnK24rIj49MCYmIituKyI9PT0oIituKyJ8MCkiLCJpbnZhbGlkIHZlcnRleCBjb3VudCIpfSksbn0pfWlmKG8pe2lmKHF0KG8pKXtpZihvKXJldHVybiBzP25ldyBIdChzLnRoaXNEZXAscy5jb250ZXh0RGVwLHMucHJvcERlcCxmdW5jdGlvbih0LGUpe3ZhciByPWUuZGVmKHQuRUxFTUVOVFMsIi52ZXJ0Q291bnQtIix0Lk9GRlNFVCk7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSxyKyI+PTAiLCJpbnZhbGlkIHZlcnRleCBvZmZzZXQvZWxlbWVudCBidWZmZXIgdG9vIHNtYWxsIil9KSxyfSk6R3QoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudCIpfSk7dmFyIGE9R3QoZnVuY3Rpb24oKXtyZXR1cm4tMX0pO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2EuTUlTU0lORz0hMH0pLGF9dmFyIGw9bmV3IEh0KG8udGhpc0RlcHx8cy50aGlzRGVwLG8uY29udGV4dERlcHx8cy5jb250ZXh0RGVwLG8ucHJvcERlcHx8cy5wcm9wRGVwLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5FTEVNRU5UUztyZXR1cm4gdC5PRkZTRVQ/ZS5kZWYociwiPyIsciwiLnZlcnRDb3VudC0iLHQuT0ZGU0VULCI6LTEiKTplLmRlZihyLCI/IixyLCIudmVydENvdW50Oi0xIil9KTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtsLkRZTkFNSUM9ITB9KSxsfXJldHVybiBudWxsfSgpLGluc3RhbmNlczpyKFVpLCExKSxvZmZzZXQ6c319ZnVuY3Rpb24gayh0LGUpe3ZhciByPXQuc3RhdGljLGk9dC5keW5hbWljLGE9e307cmV0dXJuIGV0LmZvckVhY2goZnVuY3Rpb24odCl7ZnVuY3Rpb24gbyhlLG4pe2lmKHQgaW4gcil7dmFyIG89ZShyW3RdKTthW3NdPUd0KGZ1bmN0aW9uKCl7cmV0dXJuIG99KX1lbHNlIGlmKHQgaW4gaSl7dmFyIGw9aVt0XTthW3NdPVl0KGwsZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUsdC5pbnZva2UoZSxsKSl9KX19dmFyIHM9bSh0KTtzd2l0Y2godCl7Y2FzZSB2aTpjYXNlIHNpOmNhc2Ugb2k6Y2FzZSBBaTpjYXNlIGhpOmNhc2UgQ2k6Y2FzZSB4aTpjYXNlIHdpOmNhc2UgTWk6Y2FzZSBwaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4gZGUuY29tbWFuZFR5cGUociwiYm9vbGVhbiIsdCxlLmNvbW1hbmRTdHIpLHJ9LGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLCJ0eXBlb2YgIituKyc9PT0iYm9vbGVhbiInLCJpbnZhbGlkIGZsYWcgIit0LGUuY29tbWFuZFN0cil9KSxufSk7Y2FzZSBmaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcihyLFZhLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLFZhW3JdfSxmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5jb25zdGFudHMuY29tcGFyZUZ1bmNzO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiIGluICIraSwiaW52YWxpZCAiK3QrIiwgbXVzdCBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyhWYSkpfSksci5kZWYoaSwiWyIsbiwiXSIpfSk7Y2FzZSBkaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZChtdCh0KSYmMj09PXQubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHRbMF0mJiJudW1iZXIiPT10eXBlb2YgdFsxXSYmdFswXTw9dFsxXSwiZGVwdGggcmFuZ2UgaXMgMmQgYXJyYXkiLGUuY29tbWFuZFN0ciksdH0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsdC5zaGFyZWQuaXNBcnJheUxpa2UrIigiK3IrIikmJiIrcisiLmxlbmd0aD09PTImJnR5cGVvZiAiK3IrJ1swXT09PSJudW1iZXIiJiZ0eXBlb2YgJytyKydbMV09PT0ibnVtYmVyIiYmJytyKyJbMF08PSIrcisiWzFdIiwiZGVwdGggcmFuZ2UgbXVzdCBiZSBhIDJkIGFycmF5Iil9KSxbZS5kZWYoIisiLHIsIlswXSIpLGUuZGVmKCIrIixyLCJbMV0iKV19KTtjYXNlIGNpOnJldHVybiBvKGZ1bmN0aW9uKHQpe2RlLmNvbW1hbmRUeXBlKHQsIm9iamVjdCIsImJsZW5kLmZ1bmMiLGUuY29tbWFuZFN0cik7dmFyIHI9InNyY1JHQiJpbiB0P3Quc3JjUkdCOnQuc3JjLG49InNyY0FscGhhImluIHQ/dC5zcmNBbHBoYTp0LnNyYyxpPSJkc3RSR0IiaW4gdD90LmRzdFJHQjp0LmRzdCxhPSJkc3RBbHBoYSJpbiB0P3QuZHN0QWxwaGE6dC5kc3Q7cmV0dXJuIGRlLmNvbW1hbmRQYXJhbWV0ZXIocixCYSxzKyIuc3JjUkdCIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIobixCYSxzKyIuc3JjQWxwaGEiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFBhcmFtZXRlcihpLEJhLHMrIi5kc3RSR0IiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFBhcmFtZXRlcihhLEJhLHMrIi5kc3RBbHBoYSIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kKC0xPT09VWEuaW5kZXhPZihyKyIsICIraSksInVuYWxsb3dlZCBibGVuZGluZyBjb21iaW5hdGlvbiAoc3JjUkdCLCBkc3RSR0IpID0gKCIrcisiLCAiK2krIikiLGUuY29tbWFuZFN0ciksW0JhW3JdLEJhW2ldLEJhW25dLEJhW2FdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkoaSxvKXt2YXIgcz1yLmRlZignIicsaSxvLCciIGluICcsbiwiPyIsbiwiLiIsaSxvLCI6IixuLCIuIixpKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtlLmFzc2VydChyLHMrIiBpbiAiK2EsImludmFsaWQgIit0KyIuIitpK28rIiwgbXVzdCBiZSBvbmUgb2YgIitPYmplY3Qua2V5cyhCYSkpfSksc312YXIgYT1lLmNvbnN0YW50cy5ibGVuZEZ1bmNzO2RlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZS5hc3NlcnQocixuKyImJnR5cGVvZiAiK24rJz09PSJvYmplY3QiJywiaW52YWxpZCBibGVuZCBmdW5jLCBtdXN0IGJlIGFuIG9iamVjdCIpfSk7dmFyIG89aSgic3JjIiwiUkdCIikscz1pKCJkc3QiLCJSR0IiKTtkZS5vcHRpb25hbChmdW5jdGlvbigpe3ZhciB0PWUuY29uc3RhbnRzLmludmFsaWRCbGVuZENvbWJpbmF0aW9ucztlLmFzc2VydChyLHQrIi5pbmRleE9mKCIrbysnKyIsICIrJytzKyIpID09PSAtMSAiLCJ1bmFsbG93ZWQgYmxlbmRpbmcgY29tYmluYXRpb24gZm9yIChzcmNSR0IsIGRzdFJHQikiKX0pO3ZhciBsPXIuZGVmKGEsIlsiLG8sIl0iKSx1PXIuZGVmKGEsIlsiLGkoInNyYyIsIkFscGhhIiksIl0iKTtyZXR1cm5bbCxyLmRlZihhLCJbIixzLCJdIiksdSxyLmRlZihhLCJbIixpKCJkc3QiLCJBbHBoYSIpLCJdIildfSk7Y2FzZSB1aTpyZXR1cm4gbyhmdW5jdGlvbihyKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHI/KGRlLmNvbW1hbmRQYXJhbWV0ZXIocixaLCJpbnZhbGlkICIrdCxlLmNvbW1hbmRTdHIpLFtaW3JdLFpbcl1dKToib2JqZWN0Ij09dHlwZW9mIHI/KGRlLmNvbW1hbmRQYXJhbWV0ZXIoci5yZ2IsWix0KyIucmdiIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIoci5hbHBoYSxaLHQrIi5hbHBoYSIsZS5jb21tYW5kU3RyKSxbWltyLnJnYl0sWltyLmFscGhhXV0pOnZvaWQgZGUuY29tbWFuZFJhaXNlKCJpbnZhbGlkIGJsZW5kLmVxdWF0aW9uIixlLmNvbW1hbmRTdHIpfSxmdW5jdGlvbihlLHIsbil7dmFyIGk9ZS5jb25zdGFudHMuYmxlbmRFcXVhdGlvbnMsYT1yLmRlZigpLG89ci5kZWYoKSxzPWUuY29uZCgidHlwZW9mICIsbiwnPT09InN0cmluZyInKTtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQscixuKXtlLmFzc2VydCh0LG4rIiBpbiAiK2ksImludmFsaWQgIityKyIsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoWikpfXIocy50aGVuLHQsbiksZS5hc3NlcnQocy5lbHNlLG4rIiYmdHlwZW9mICIrbisnPT09Im9iamVjdCInLCJpbnZhbGlkICIrdCkscihzLmVsc2UsdCsiLnJnYiIsbisiLnJnYiIpLHIocy5lbHNlLHQrIi5hbHBoYSIsbisiLmFscGhhIil9KSxzLnRoZW4oYSwiPSIsbywiPSIsaSwiWyIsbiwiXTsiKSxzLmVsc2UoYSwiPSIsaSwiWyIsbiwiLnJnYl07IixvLCI9IixpLCJbIixuLCIuYWxwaGFdOyIpLHIocyksW2Esb119KTtjYXNlIGxpOnJldHVybiBvKGZ1bmN0aW9uKHQpe3JldHVybiBkZS5jb21tYW5kKG10KHQpJiY0PT09dC5sZW5ndGgsImJsZW5kLmNvbG9yIG11c3QgYmUgYSA0ZCBhcnJheSIsZS5jb21tYW5kU3RyKSxKKDQsZnVuY3Rpb24oZSl7cmV0dXJuK3RbZV19KX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUsdC5zaGFyZWQuaXNBcnJheUxpa2UrIigiK3IrIikmJiIrcisiLmxlbmd0aD09PTQiLCJibGVuZC5jb2xvciBtdXN0IGJlIGEgNGQgYXJyYXkiKX0pLEooNCxmdW5jdGlvbih0KXtyZXR1cm4gZS5kZWYoIisiLHIsIlsiLHQsIl0iKX0pfSk7Y2FzZSBUaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZFR5cGUodCwibnVtYmVyIixzLGUuY29tbWFuZFN0ciksMHx0fSxmdW5jdGlvbih0LGUscil7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7dC5hc3NlcnQoZSwidHlwZW9mICIrcisnPT09Im51bWJlciInLCJpbnZhbGlkIHN0ZW5jaWwubWFzayIpfSksZS5kZWYociwifDAiKX0pO2Nhc2UgU2k6cmV0dXJuIG8oZnVuY3Rpb24ocil7ZGUuY29tbWFuZFR5cGUociwib2JqZWN0IixzLGUuY29tbWFuZFN0cik7dmFyIG49ci5jbXB8fCJrZWVwIixpPXIucmVmfHwwLGE9Im1hc2siaW4gcj9yLm1hc2s6LTE7cmV0dXJuIGRlLmNvbW1hbmRQYXJhbWV0ZXIobixWYSx0KyIuY21wIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRUeXBlKGksIm51bWJlciIsdCsiLnJlZiIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kVHlwZShhLCJudW1iZXIiLHQrIi5tYXNrIixlLmNvbW1hbmRTdHIpLFtWYVtuXSxpLGFdfSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25zdGFudHMuY29tcGFyZUZ1bmNzO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt0LmFzc2VydChlLEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJndW1lbnRzLCIiKSwiaW52YWxpZCBzdGVuY2lsLmZ1bmMiKX1pKHIrIiYmdHlwZW9mICIsciwnPT09Im9iamVjdCInKSxpKCchKCJjbXAiIGluICcsciwiKXx8KCIsciwiLmNtcCBpbiAiLG4sIikiKX0pLFtlLmRlZignImNtcCIgaW4gJyxyLCI/IixuLCJbIixyLCIuY21wXSIsIjoiLERhKSxlLmRlZihyLCIucmVmfDAiKSxlLmRlZignIm1hc2siIGluICcsciwiPyIsciwiLm1hc2t8MDotMSIpXX0pO2Nhc2UgRWk6Y2FzZSBMaTpyZXR1cm4gbyhmdW5jdGlvbihyKXtkZS5jb21tYW5kVHlwZShyLCJvYmplY3QiLHMsZS5jb21tYW5kU3RyKTt2YXIgbj1yLmZhaWx8fCJrZWVwIixpPXIuemZhaWx8fCJrZWVwIixhPXIuenBhc3N8fCJrZWVwIjtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcihuLEhhLHQrIi5mYWlsIixlLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmRQYXJhbWV0ZXIoaSxIYSx0KyIuemZhaWwiLGUuY29tbWFuZFN0ciksZGUuY29tbWFuZFBhcmFtZXRlcihhLEhhLHQrIi56cGFzcyIsZS5jb21tYW5kU3RyKSxbdD09PUxpP1NhOlRhLEhhW25dLEhhW2ldLEhhW2FdXX0sZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZS5hc3NlcnQociwnISgiJytpKyciIGluICcrbisiKXx8KCIrbisiLiIraSsiIGluICIrYSsiKSIsImludmFsaWQgIit0KyIuIitpKyIsIG11c3QgYmUgb25lIG9mICIrT2JqZWN0LmtleXMoSGEpKX0pLHIuZGVmKCciJyxpLCciIGluICcsbiwiPyIsYSwiWyIsbiwiLiIsaSwiXToiLERhKX12YXIgYT1lLmNvbnN0YW50cy5zdGVuY2lsT3BzO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgIit0KX0pLFt0PT09TGk/U2E6VGEsaSgiZmFpbCIpLGkoInpmYWlsIiksaSgienBhc3MiKV19KTtjYXNlIF9pOnJldHVybiBvKGZ1bmN0aW9uKHQpe2RlLmNvbW1hbmRUeXBlKHQsIm9iamVjdCIscyxlLmNvbW1hbmRTdHIpO3ZhciByPTB8dC5mYWN0b3Isbj0wfHQudW5pdHM7cmV0dXJuIGRlLmNvbW1hbmRUeXBlKHIsIm51bWJlciIscysiLmZhY3RvciIsZS5jb21tYW5kU3RyKSxkZS5jb21tYW5kVHlwZShuLCJudW1iZXIiLHMrIi51bml0cyIsZS5jb21tYW5kU3RyKSxbcixuXX0sZnVuY3Rpb24oZSxyLG4pe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KHIsbisiJiZ0eXBlb2YgIituKyc9PT0ib2JqZWN0IicsImludmFsaWQgIit0KX0pLFtyLmRlZihuLCIuZmFjdG9yfDAiKSxyLmRlZihuLCIudW5pdHN8MCIpXX0pO2Nhc2UgZ2k6cmV0dXJuIG8oZnVuY3Rpb24odCl7dmFyIHI9MDtyZXR1cm4iZnJvbnQiPT09dD9yPVRhOiJiYWNrIj09PXQmJihyPVNhKSxkZS5jb21tYW5kKCEhcixzLGUuY29tbWFuZFN0cikscn0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUscisnPT09ImZyb250Inx8JytyKyc9PT0iYmFjayInLCJpbnZhbGlkIGN1bGwuZmFjZSIpfSksZS5kZWYociwnPT09ImZyb250Ij8nLFRhLCI6IixTYSl9KTtjYXNlIGJpOnJldHVybiBvKGZ1bmN0aW9uKHQpe3JldHVybiBkZS5jb21tYW5kKCJudW1iZXIiPT10eXBlb2YgdCYmdD49bi5saW5lV2lkdGhEaW1zWzBdJiZ0PD1uLmxpbmVXaWR0aERpbXNbMV0sImludmFsaWQgbGluZSB3aWR0aCwgbXVzdCBwb3NpdGl2ZSBudW1iZXIgYmV0d2VlbiAiK24ubGluZVdpZHRoRGltc1swXSsiIGFuZCAiK24ubGluZVdpZHRoRGltc1sxXSxlLmNvbW1hbmRTdHIpLHR9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLCJ0eXBlb2YgIityKyc9PT0ibnVtYmVyIiYmJytyKyI+PSIrbi5saW5lV2lkdGhEaW1zWzBdKyImJiIrcisiPD0iK24ubGluZVdpZHRoRGltc1sxXSwiaW52YWxpZCBsaW5lIHdpZHRoIil9KSxyfSk7Y2FzZSB5aTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZFBhcmFtZXRlcih0LEdhLHMsZS5jb21tYW5kU3RyKSxHYVt0XX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUscisnPT09ImN3Inx8JytyKyc9PT0iY2N3IicsImludmFsaWQgZnJvbnRGYWNlLCBtdXN0IGJlIG9uZSBvZiBjdyxjY3ciKX0pLGUuZGVmKHIrJz09PSJjdyI/JytFYSsiOiIrTGEpfSk7Y2FzZSBtaTpyZXR1cm4gbyhmdW5jdGlvbih0KXtyZXR1cm4gZGUuY29tbWFuZChtdCh0KSYmND09PXQubGVuZ3RoLCJjb2xvci5tYXNrIG11c3QgYmUgbGVuZ3RoIDQgYXJyYXkiLGUuY29tbWFuZFN0ciksdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuISF0fSl9LGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLHQuc2hhcmVkLmlzQXJyYXlMaWtlKyIoIityKyIpJiYiK3IrIi5sZW5ndGg9PT00IiwiaW52YWxpZCBjb2xvci5tYXNrIil9KSxKKDQsZnVuY3Rpb24odCl7cmV0dXJuIiEhIityKyJbIit0KyJdIn0pfSk7Y2FzZSBraTpyZXR1cm4gbyhmdW5jdGlvbih0KXtkZS5jb21tYW5kKCJvYmplY3QiPT10eXBlb2YgdCYmdCxzLGUuY29tbWFuZFN0cik7dmFyIHI9InZhbHVlImluIHQ/dC52YWx1ZToxLG49ISF0LmludmVydDtyZXR1cm4gZGUuY29tbWFuZCgibnVtYmVyIj09dHlwZW9mIHImJnI+PTAmJnI8PTEsInNhbXBsZS5jb3ZlcmFnZS52YWx1ZSBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSIsZS5jb21tYW5kU3RyKSxbcixuXX0sZnVuY3Rpb24odCxlLHIpe3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe3QuYXNzZXJ0KGUscisiJiZ0eXBlb2YgIityKyc9PT0ib2JqZWN0IicsImludmFsaWQgc2FtcGxlLmNvdmVyYWdlIil9KSxbZS5kZWYoJyJ2YWx1ZSIgaW4gJyxyLCI/KyIsciwiLnZhbHVlOjEiKSxlLmRlZigiISEiLHIsIi5pbnZlcnQiKV19KX19KSxhfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj10LnN0YXRpYyxuPXQuZHluYW1pYyxpPXt9O3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuLGE9clt0XTtpZigibnVtYmVyIj09dHlwZW9mIGF8fCJib29sZWFuIj09dHlwZW9mIGEpbj1HdChmdW5jdGlvbigpe3JldHVybiBhfSk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7dmFyIG89YS5fcmVnbFR5cGU7InRleHR1cmUyZCI9PT1vfHwidGV4dHVyZUN1YmUiPT09bz9uPUd0KGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsoYSl9KToiZnJhbWVidWZmZXIiPT09b3x8ImZyYW1lYnVmZmVyQ3ViZSI9PT1vPyhkZS5jb21tYW5kKGEuY29sb3IubGVuZ3RoPjAsJ21pc3NpbmcgY29sb3IgYXR0YWNobWVudCBmb3IgZnJhbWVidWZmZXIgc2VudCB0byB1bmlmb3JtICInK3QrJyInLGUuY29tbWFuZFN0ciksbj1HdChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rKGEuY29sb3JbMF0pfSkpOmRlLmNvbW1hbmRSYWlzZSgnaW52YWxpZCBkYXRhIGZvciB1bmlmb3JtICInK3QrJyInLGUuY29tbWFuZFN0cil9ZWxzZSBtdChhKT9uPUd0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmdsb2JhbC5kZWYoIlsiLEooYS5sZW5ndGgsZnVuY3Rpb24ocil7cmV0dXJuIGRlLmNvbW1hbmQoIm51bWJlciI9PXR5cGVvZiBhW3JdfHwiYm9vbGVhbiI9PXR5cGVvZiBhW3JdLCJpbnZhbGlkIHVuaWZvcm0gIit0LGUuY29tbWFuZFN0ciksYVtyXX0pLCJdIil9KTpkZS5jb21tYW5kUmFpc2UoJ2ludmFsaWQgb3IgbWlzc2luZyBkYXRhIGZvciB1bmlmb3JtICInK3QrJyInLGUuY29tbWFuZFN0cik7bi52YWx1ZT1hLGlbdF09bn0pLE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9blt0XTtpW3RdPVl0KGUsZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pfSksaX1mdW5jdGlvbiBUKHQscil7dmFyIG49dC5zdGF0aWMsYT10LmR5bmFtaWMsbz17fTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgYT1uW3RdLHM9ZS5pZCh0KSxsPW5ldyBXO2lmKFV0KGEpKWwuc3RhdGU9JG4sbC5idWZmZXI9aS5nZXRCdWZmZXIoaS5jcmVhdGUoYSxaaSwhMSwhMCkpLGwudHlwZT0wO2Vsc2V7dmFyIHU9aS5nZXRCdWZmZXIoYSk7aWYodSlsLnN0YXRlPSRuLGwuYnVmZmVyPXUsbC50eXBlPTA7ZWxzZSBpZihkZS5jb21tYW5kKCJvYmplY3QiPT10eXBlb2YgYSYmYSwiaW52YWxpZCBkYXRhIGZvciBhdHRyaWJ1dGUgIit0LHIuY29tbWFuZFN0ciksYS5jb25zdGFudCl7dmFyIGM9YS5jb25zdGFudDtsLmJ1ZmZlcj0ibnVsbCIsbC5zdGF0ZT10aSwibnVtYmVyIj09dHlwZW9mIGM/bC54PWM6KGRlLmNvbW1hbmQobXQoYykmJmMubGVuZ3RoPjAmJmMubGVuZ3RoPD00LCJpbnZhbGlkIGNvbnN0YW50IGZvciBhdHRyaWJ1dGUgIit0LHIuY29tbWFuZFN0ciksS24uZm9yRWFjaChmdW5jdGlvbih0LGUpe2U8Yy5sZW5ndGgmJihsW3RdPWNbZV0pfSkpfWVsc2V7dT1VdChhLmJ1ZmZlcik/aS5nZXRCdWZmZXIoaS5jcmVhdGUoYS5idWZmZXIsWmksITEsITApKTppLmdldEJ1ZmZlcihhLmJ1ZmZlciksZGUuY29tbWFuZCghIXUsJ21pc3NpbmcgYnVmZmVyIGZvciBhdHRyaWJ1dGUgIicrdCsnIicsci5jb21tYW5kU3RyKTt2YXIgaD0wfGEub2Zmc2V0O2RlLmNvbW1hbmQoaD49MCwnaW52YWxpZCBvZmZzZXQgZm9yIGF0dHJpYnV0ZSAiJyt0KyciJyxyLmNvbW1hbmRTdHIpO3ZhciBmPTB8YS5zdHJpZGU7ZGUuY29tbWFuZChmPj0wJiZmPDI1NiwnaW52YWxpZCBzdHJpZGUgZm9yIGF0dHJpYnV0ZSAiJyt0KyciLCBtdXN0IGJlIGludGVnZXIgYmV0d2VlZW4gWzAsIDI1NV0nLHIuY29tbWFuZFN0cik7dmFyIGQ9MHxhLnNpemU7ZGUuY29tbWFuZCghKCJzaXplImluIGEpfHxkPjAmJmQ8PTQsJ2ludmFsaWQgc2l6ZSBmb3IgYXR0cmlidXRlICInK3QrJyIsIG11c3QgYmUgMSwyLDMsNCcsci5jb21tYW5kU3RyKTt2YXIgcD0hIWEubm9ybWFsaXplZCxtPTA7InR5cGUiaW4gYSYmKGRlLmNvbW1hbmRQYXJhbWV0ZXIoYS50eXBlLHplLCJpbnZhbGlkIHR5cGUgZm9yIGF0dHJpYnV0ZSAiK3Qsci5jb21tYW5kU3RyKSxtPXplW2EudHlwZV0pO3ZhciB2PTB8YS5kaXZpc29yOyJkaXZpc29yImluIGEmJihkZS5jb21tYW5kKDA9PT12fHxLLCdjYW5ub3Qgc3BlY2lmeSBkaXZpc29yIGZvciBhdHRyaWJ1dGUgIicrdCsnIiwgaW5zdGFuY2luZyBub3Qgc3VwcG9ydGVkJyxyLmNvbW1hbmRTdHIpLGRlLmNvbW1hbmQodj49MCwnaW52YWxpZCBkaXZpc29yIGZvciBhdHRyaWJ1dGUgIicrdCsnIicsci5jb21tYW5kU3RyKSksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt2YXIgZT1yLmNvbW1hbmRTdHIsbj1bImJ1ZmZlciIsIm9mZnNldCIsImRpdmlzb3IiLCJub3JtYWxpemVkIiwidHlwZSIsInNpemUiLCJzdHJpZGUiXTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2RlLmNvbW1hbmQobi5pbmRleE9mKHIpPj0wLCd1bmtub3duIHBhcmFtZXRlciAiJytyKyciIGZvciBhdHRyaWJ1dGUgcG9pbnRlciAiJyt0KyciICh2YWxpZCBwYXJhbWV0ZXJzIGFyZSAnK24rIikiLGUpfSl9KSxsLmJ1ZmZlcj11LGwuc3RhdGU9JG4sbC5zaXplPWQsbC5ub3JtYWxpemVkPXAsbC50eXBlPW18fHUuZHR5cGUsbC5vZmZzZXQ9aCxsLnN0cmlkZT1mLGwuZGl2aXNvcj12fX1vW3RdPUd0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5hdHRyaWJDYWNoZTtpZihzIGluIHIpcmV0dXJuIHJbc107dmFyIG49e2lzU3RyZWFtOiExfTtyZXR1cm4gT2JqZWN0LmtleXMobCkuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPWxbdF19KSxsLmJ1ZmZlciYmKG4uYnVmZmVyPXQubGluayhsLmJ1ZmZlciksbi50eXBlPW4udHlwZXx8bi5idWZmZXIrIi5kdHlwZSIpLHJbc109bixufSl9KSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtmdW5jdGlvbiBpKHQpe24odVt0XSwiPSIsYSwiLiIsdCwifDA7Iil9dmFyIGE9ZS5pbnZva2UobixyKSxvPWUuc2hhcmVkLHM9by5pc0J1ZmZlckFyZ3MsbD1vLmJ1ZmZlcjtkZS5vcHRpb25hbChmdW5jdGlvbigpe2UuYXNzZXJ0KG4sYSsiJiYodHlwZW9mICIrYSsnPT09Im9iamVjdCJ8fHR5cGVvZiAnK2ErJz09PSJmdW5jdGlvbiIpJiYoJytzKyIoIithKyIpfHwiK2wrIi5nZXRCdWZmZXIoIithKyIpfHwiK2wrIi5nZXRCdWZmZXIoIithKyIuYnVmZmVyKXx8IitzKyIoIithKycuYnVmZmVyKXx8KCJjb25zdGFudCIgaW4gJythKyImJih0eXBlb2YgIithKycuY29uc3RhbnQ9PT0ibnVtYmVyInx8JytvLmlzQXJyYXlMaWtlKyIoIithKyIuY29uc3RhbnQpKSkpIiwnaW52YWxpZCBkeW5hbWljIGF0dHJpYnV0ZSAiJyt0KyciJyl9KTt2YXIgdT17aXNTdHJlYW06bi5kZWYoITEpfSxjPW5ldyBXO2Muc3RhdGU9JG4sT2JqZWN0LmtleXMoYykuZm9yRWFjaChmdW5jdGlvbih0KXt1W3RdPW4uZGVmKCIiK2NbdF0pfSk7dmFyIGg9dS5idWZmZXIsZj11LnR5cGU7cmV0dXJuIG4oImlmKCIscywiKCIsYSwiKSl7Iix1LmlzU3RyZWFtLCI9dHJ1ZTsiLGgsIj0iLGwsIi5jcmVhdGVTdHJlYW0oIixaaSwiLCIsYSwiKTsiLGYsIj0iLGgsIi5kdHlwZTsiLCJ9ZWxzZXsiLGgsIj0iLGwsIi5nZXRCdWZmZXIoIixhLCIpOyIsImlmKCIsaCwiKXsiLGYsIj0iLGgsIi5kdHlwZTsiLCd9ZWxzZSBpZigiY29uc3RhbnQiIGluICcsYSwiKXsiLHUuc3RhdGUsIj0iLHRpLCI7IiwiaWYodHlwZW9mICIrYSsnLmNvbnN0YW50ID09PSAibnVtYmVyIil7Jyx1W0tuWzBdXSwiPSIsYSwiLmNvbnN0YW50OyIsS24uc2xpY2UoMSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1W3RdfSkuam9pbigiPSIpLCI9MDsiLCJ9ZWxzZXsiLEtuLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB1W3RdKyI9IithKyIuY29uc3RhbnQubGVuZ3RoPj0iK2UrIj8iK2ErIi5jb25zdGFudFsiK2UrIl06MDsifSkuam9pbigiIiksIn19ZWxzZXsiLCJpZigiLHMsIigiLGEsIi5idWZmZXIpKXsiLGgsIj0iLGwsIi5jcmVhdGVTdHJlYW0oIixaaSwiLCIsYSwiLmJ1ZmZlcik7IiwifWVsc2V7IixoLCI9IixsLCIuZ2V0QnVmZmVyKCIsYSwiLmJ1ZmZlcik7IiwifSIsZiwnPSJ0eXBlIiBpbiAnLGEsIj8iLG8uZ2xUeXBlcywiWyIsYSwiLnR5cGVdOiIsaCwiLmR0eXBlOyIsdS5ub3JtYWxpemVkLCI9ISEiLGEsIi5ub3JtYWxpemVkOyIpLGkoInNpemUiKSxpKCJvZmZzZXQiKSxpKCJzdHJpZGUiKSxpKCJkaXZpc29yIiksbigifX0iKSxuLmV4aXQoImlmKCIsdS5pc1N0cmVhbSwiKXsiLGwsIi5kZXN0cm95U3RyZWFtKCIsaCwiKTsiLCJ9IiksdX12YXIgcj1hW3RdO29bdF09WXQocixlKX0pLG99ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnN0YXRpYyxyPXQuZHluYW1pYyxuPXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07blt0XT1HdChmdW5jdGlvbih0LGUpe3JldHVybiJudW1iZXIiPT10eXBlb2Ygcnx8ImJvb2xlYW4iPT10eXBlb2Ygcj8iIityOnQubGluayhyKX0pfSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO25bdF09WXQoZSxmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSl9KSxufWZ1bmN0aW9uIEUodCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3ZhciBlPXVbdF07ZSYmKGhbdF09ZSl9dmFyIG89dC5zdGF0aWMscz10LmR5bmFtaWM7ZGUub3B0aW9uYWwoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24odCl7ZGUuY29tbWFuZChlLmluZGV4T2YodCk+PTAsJ3Vua25vd24gcGFyYW1ldGVyICInK3QrJyInLGkuY29tbWFuZFN0cil9KX12YXIgZT1bUGksT2ksUmksRmksamksQmksTmksVWksRGldLmNvbmNhdChldCk7dChvKSx0KHMpfSk7dmFyIGw9eCh0LGkpLHU9Xyh0LGwsaSksYz1NKHQsaSksaD1rKHQsaSksZj13KHQsaSk7YShJaSksYShtKHppKSk7dmFyIGQ9T2JqZWN0LmtleXMoaCkubGVuZ3RoPjAscD17ZnJhbWVidWZmZXI6bCxkcmF3OmMsc2hhZGVyOmYsc3RhdGU6aCxkaXJ0eTpkfTtyZXR1cm4gcC5wcm9maWxlPWIodCxpKSxwLnVuaWZvcm1zPUEocixpKSxwLmF0dHJpYnV0ZXM9VChlLGkpLHAuY29udGV4dD1TKG4saSkscH1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbj10LnNoYXJlZCxpPW4uY29udGV4dCxhPXQuc2NvcGUoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Uuc2F2ZShpLCIuIituKTt2YXIgbz1yW25dO2EoaSwiLiIsbiwiPSIsby5hcHBlbmQodCxlKSwiOyIpfSksZShhKX1mdW5jdGlvbiBDKHQsZSxyLG4pe3ZhciBpLGE9dC5zaGFyZWQsbz1hLmdsLHM9YS5mcmFtZWJ1ZmZlcjtRJiYoaT1lLmRlZihhLmV4dGVuc2lvbnMsIi53ZWJnbF9kcmF3X2J1ZmZlcnMiKSk7dmFyIGwsdT10LmNvbnN0YW50cyxjPXUuZHJhd0J1ZmZlcixoPXUuYmFja0J1ZmZlcjtsPXI/ci5hcHBlbmQodCxlKTplLmRlZihzLCIubmV4dCIpLG58fGUoImlmKCIsbCwiIT09IixzLCIuY3VyKXsiKSxlKCJpZigiLGwsIil7IixvLCIuYmluZEZyYW1lYnVmZmVyKCIsamEsIiwiLGwsIi5mcmFtZWJ1ZmZlcik7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGMsIlsiLGwsIi5jb2xvckF0dGFjaG1lbnRzLmxlbmd0aF0pOyIpLGUoIn1lbHNleyIsbywiLmJpbmRGcmFtZWJ1ZmZlcigiLGphLCIsbnVsbCk7IiksUSYmZShpLCIuZHJhd0J1ZmZlcnNXRUJHTCgiLGgsIik7IiksZSgifSIscywiLmN1cj0iLGwsIjsiKSxufHxlKCJ9Iil9ZnVuY3Rpb24geih0LGUscil7dmFyIG49dC5zaGFyZWQsaT1uLmdsLGE9dC5jdXJyZW50LG89dC5uZXh0LHM9bi5jdXJyZW50LGw9bi5uZXh0LHU9dC5jb25kKHMsIi5kaXJ0eSIpO2V0LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49bShlKTtpZighKG4gaW4gci5zdGF0ZSkpe3ZhciBjLGg7aWYobiBpbiBvKXtjPW9bbl0saD1hW25dO3ZhciBmPUooJFtuXS5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHUuZGVmKGMsIlsiLHQsIl0iKX0pO3UodC5jb25kKGYubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiE9PSIraCsiWyIrZSsiXSJ9KS5qb2luKCJ8fCIpKS50aGVuKGksIi4iLG50W25dLCIoIixmLCIpOyIsZi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gaCsiWyIrZSsiXT0iK3R9KS5qb2luKCI7IiksIjsiKSl9ZWxzZXtjPXUuZGVmKGwsIi4iLG4pO3ZhciBkPXQuY29uZChjLCIhPT0iLHMsIi4iLG4pO3UoZCksbiBpbiBydD9kKHQuY29uZChjKS50aGVuKGksIi5lbmFibGUoIixydFtuXSwiKTsiKS5lbHNlKGksIi5kaXNhYmxlKCIscnRbbl0sIik7IikscywiLiIsbiwiPSIsYywiOyIpOmQoaSwiLiIsbnRbbl0sIigiLGMsIik7IixzLCIuIixuLCI9IixjLCI7Iil9fX0pLDA9PT1PYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJnUocywiLmRpcnR5PWZhbHNlOyIpLGUodSl9ZnVuY3Rpb24gSSh0LGUscixuKXt2YXIgaT10LnNoYXJlZCxhPXQuY3VycmVudCxvPWkuY3VycmVudCxzPWkuZ2w7VnQoT2JqZWN0LmtleXMocikpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIGw9cltpXTtpZighbnx8bihsKSl7dmFyIHU9bC5hcHBlbmQodCxlKTtpZihydFtpXSl7dmFyIGM9cnRbaV07cXQobCk/dT9lKHMsIi5lbmFibGUoIixjLCIpOyIpOmUocywiLmRpc2FibGUoIixjLCIpOyIpOmUodC5jb25kKHUpLnRoZW4ocywiLmVuYWJsZSgiLGMsIik7IikuZWxzZShzLCIuZGlzYWJsZSgiLGMsIik7IikpLGUobywiLiIsaSwiPSIsdSwiOyIpfWVsc2UgaWYobXQodSkpe3ZhciBoPWFbaV07ZShzLCIuIixudFtpXSwiKCIsdSwiKTsiLHUubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgrIlsiK2UrIl09Iit0fSkuam9pbigiOyIpLCI7Iil9ZWxzZSBlKHMsIi4iLG50W2ldLCIoIix1LCIpOyIsbywiLiIsaSwiPSIsdSwiOyIpfX0pfWZ1bmN0aW9uIEQodCxlKXtLJiYodC5pbnN0YW5jaW5nPWUuZGVmKHQuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpfWZ1bmN0aW9uIFAodCxlLHIsbixpKXtmdW5jdGlvbiBhKCl7cmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBwZXJmb3JtYW5jZT8iRGF0ZS5ub3coKSI6InBlcmZvcm1hbmNlLm5vdygpIn1mdW5jdGlvbiBvKHQpe3U9ZS5kZWYoKSx0KHUsIj0iLGEoKSwiOyIpLCJzdHJpbmciPT10eXBlb2YgaT90KHAsIi5jb3VudCs9IixpLCI7Iik6dChwLCIuY291bnQrKzsiKSxkJiYobj8oYz1lLmRlZigpLHQoYywiPSIsdiwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCk7IikpOnQodiwiLmJlZ2luUXVlcnkoIixwLCIpOyIpKX1mdW5jdGlvbiBzKHQpe3QocCwiLmNwdVRpbWUrPSIsYSgpLCItIix1LCI7IiksZCYmKG4/dCh2LCIucHVzaFNjb3BlU3RhdHMoIixjLCIsIix2LCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKSwiLHAsIik7Iik6dCh2LCIuZW5kUXVlcnkoKTsiKSl9ZnVuY3Rpb24gbCh0KXt2YXIgcj1lLmRlZihtLCIucHJvZmlsZSIpO2UobSwiLnByb2ZpbGU9Iix0LCI7IiksZS5leGl0KG0sIi5wcm9maWxlPSIsciwiOyIpfXZhciB1LGMsaCxmPXQuc2hhcmVkLHA9dC5zdGF0cyxtPWYuY3VycmVudCx2PWYudGltZXIsZz1yLnByb2ZpbGU7aWYoZyl7aWYocXQoZykpcmV0dXJuIHZvaWQoZy5lbmFibGU/KG8oZSkscyhlLmV4aXQpLGwoInRydWUiKSk6bCgiZmFsc2UiKSk7aD1nLmFwcGVuZCh0LGUpLGwoaCl9ZWxzZSBoPWUuZGVmKG0sIi5wcm9maWxlIik7dmFyIHk9dC5ibG9jaygpO28oeSksZSgiaWYoIixoLCIpeyIseSwifSIpO3ZhciBiPXQuYmxvY2soKTtzKGIpLGUuZXhpdCgiaWYoIixoLCIpeyIsYiwifSIpfWZ1bmN0aW9uIE8odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3N3aXRjaCh0KXtjYXNlIHVhOmNhc2UgZGE6Y2FzZSBnYTpyZXR1cm4gMjtjYXNlIGNhOmNhc2UgcGE6Y2FzZSB5YTpyZXR1cm4gMztjYXNlIGhhOmNhc2UgbWE6Y2FzZSBiYTpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX1mdW5jdGlvbiBvKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsYywiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIix1LCIpO30iKTt2YXIgcixhPWkudHlwZTtpZihyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsYywiLnR5cGUhPT0iLGEsInx8IixjLCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBjKyIuIit0KyIhPT0iK2lbdF19KS5qb2luKCJ8fCIpLCIpeyIsbCwiLmJpbmRCdWZmZXIoIixaaSwiLCIsZiwiLmJ1ZmZlcik7IixsLCIudmVydGV4QXR0cmliUG9pbnRlcigiLFt1LHIsYSxpLm5vcm1hbGl6ZWQsaS5zdHJpZGUsaS5vZmZzZXRdLCIpOyIsYywiLnR5cGU9IixhLCI7IixjLCIuc2l6ZT0iLHIsIjsiLHAubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBjKyIuIit0KyI9IitpW3RdKyI7In0pLmpvaW4oIiIpLCJ9IiksSyl7dmFyIG89aS5kaXZpc29yO2UoImlmKCIsYywiLmRpdmlzb3IhPT0iLG8sIil7Iix0Lmluc3RhbmNpbmcsIi52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoIixbdSxvXSwiKTsiLGMsIi5kaXZpc29yPSIsbywiO30iKX19ZnVuY3Rpb24gbygpe2UoImlmKCIsYywiLmJ1ZmZlcil7IixsLCIuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsdSwiKTsiLCJ9aWYoIixLbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gYysiLiIrdCsiIT09IitkW2VdfSkuam9pbigifHwiKSwiKXsiLGwsIi52ZXJ0ZXhBdHRyaWI0ZigiLHUsIiwiLGQsIik7IixLbi5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gYysiLiIrdCsiPSIrZFtlXSsiOyJ9KS5qb2luKCIiKSwifSIpfXZhciBsPXMuZ2wsdT1lLmRlZihyLCIubG9jYXRpb24iKSxjPWUuZGVmKHMuYXR0cmlidXRlcywiWyIsdSwiXSIpLGg9aS5zdGF0ZSxmPWkuYnVmZmVyLGQ9W2kueCxpLnksaS56LGkud10scD1bImJ1ZmZlciIsIm5vcm1hbGl6ZWQiLCJvZmZzZXQiLCJzdHJpZGUiXTtoPT09JG4/YSgpOmg9PT10aT9vKCk6KGUoImlmKCIsaCwiPT09IiwkbiwiKXsiKSxhKCksZSgifWVsc2V7IiksbygpLGUoIn0iKSl9dmFyIHM9dC5zaGFyZWQ7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBzLGw9bi5uYW1lLHU9ci5hdHRyaWJ1dGVzW2xdO2lmKHUpe2lmKCFpKHUpKXJldHVybjtzPXUuYXBwZW5kKHQsZSl9ZWxzZXtpZighaShZYSkpcmV0dXJuO3ZhciBjPXQuc2NvcGVBdHRyaWIobCk7ZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChlLGMrIi5zdGF0ZSIsIm1pc3NpbmcgYXR0cmlidXRlICIrbCl9KSxzPXt9LE9iamVjdC5rZXlzKG5ldyBXKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NbdF09ZS5kZWYoYywiLiIsdCl9KX1vKHQubGluayhuKSxhKG4uaW5mby50eXBlKSxzKX0pfWZ1bmN0aW9uIFIodCxyLG4saSxhKXtmb3IodmFyIG8scz10LnNoYXJlZCxsPXMuZ2wsdT0wO3U8aS5sZW5ndGg7Kyt1KXt2YXIgYyxoPWlbdV0sZj1oLm5hbWUsZD1oLmluZm8udHlwZSxwPW4udW5pZm9ybXNbZl0sbT10LmxpbmsoaCksdj1tKyIubG9jYXRpb24iO2lmKHApe2lmKCFhKHApKWNvbnRpbnVlO2lmKHF0KHApKXt2YXIgZz1wLnZhbHVlO2lmKGRlLmNvbW1hbmQobnVsbCE9PWcmJnZvaWQgMCE9PWcsJ21pc3NpbmcgdW5pZm9ybSAiJytmKyciJyx0LmNvbW1hbmRTdHIpLGQ9PT1NYXx8ZD09PWthKXtkZS5jb21tYW5kKCJmdW5jdGlvbiI9PXR5cGVvZiBnJiYoZD09PU1hJiYoInRleHR1cmUyZCI9PT1nLl9yZWdsVHlwZXx8ImZyYW1lYnVmZmVyIj09PWcuX3JlZ2xUeXBlKXx8ZD09PWthJiYoInRleHR1cmVDdWJlIj09PWcuX3JlZ2xUeXBlfHwiZnJhbWVidWZmZXJDdWJlIj09PWcuX3JlZ2xUeXBlKSksImludmFsaWQgdGV4dHVyZSBmb3IgdW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKTt2YXIgeT10LmxpbmsoZy5fdGV4dHVyZXx8Zy5jb2xvclswXS5fdGV4dHVyZSk7cihsLCIudW5pZm9ybTFpKCIsdiwiLCIseSsiLmJpbmQoKSk7Iiksci5leGl0KHksIi51bmJpbmQoKTsiKX1lbHNlIGlmKGQ9PT14YXx8ZD09PV9hfHxkPT09d2Epe2RlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZGUuY29tbWFuZChtdChnKSwiaW52YWxpZCBtYXRyaXggZm9yIHVuaWZvcm0gIitmLHQuY29tbWFuZFN0ciksZGUuY29tbWFuZChkPT09eGEmJjQ9PT1nLmxlbmd0aHx8ZD09PV9hJiY5PT09Zy5sZW5ndGh8fGQ9PT13YSYmMTY9PT1nLmxlbmd0aCwiaW52YWxpZCBsZW5ndGggZm9yIG1hdHJpeCB1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpfSk7dmFyIGI9dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KFsiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGcpKyJdKSIpLHg9MjtkPT09X2E/eD0zOmQ9PT13YSYmKHg9NCkscihsLCIudW5pZm9ybU1hdHJpeCIseCwiZnYoIix2LCIsZmFsc2UsIixiLCIpOyIpfWVsc2V7c3dpdGNoKGQpe2Nhc2UgbGE6ZGUuY29tbWFuZFR5cGUoZywibnVtYmVyIiwidW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKSxvPSIxZiI7YnJlYWs7Y2FzZSB1YTpkZS5jb21tYW5kKG10KGcpJiYyPT09Zy5sZW5ndGgsInVuaWZvcm0gIitmLHQuY29tbWFuZFN0ciksbz0iMmYiO2JyZWFrO2Nhc2UgY2E6ZGUuY29tbWFuZChtdChnKSYmMz09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjNmIjticmVhaztjYXNlIGhhOmRlLmNvbW1hbmQobXQoZykmJjQ9PT1nLmxlbmd0aCwidW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKSxvPSI0ZiI7YnJlYWs7Y2FzZSB2YTpkZS5jb21tYW5kVHlwZShnLCJib29sZWFuIiwidW5pZm9ybSAiK2YsdC5jb21tYW5kU3RyKSxvPSIxaSI7YnJlYWs7Y2FzZSBmYTpkZS5jb21tYW5kVHlwZShnLCJudW1iZXIiLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjFpIjticmVhaztjYXNlIGdhOmNhc2UgZGE6ZGUuY29tbWFuZChtdChnKSYmMj09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjJpIjticmVhaztjYXNlIHlhOmNhc2UgcGE6ZGUuY29tbWFuZChtdChnKSYmMz09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjNpIjticmVhaztjYXNlIGJhOmNhc2UgbWE6ZGUuY29tbWFuZChtdChnKSYmND09PWcubGVuZ3RoLCJ1bmlmb3JtICIrZix0LmNvbW1hbmRTdHIpLG89IjRpIn1yKGwsIi51bmlmb3JtIixvLCIoIix2LCIsIixtdChnKT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnKTpnLCIpOyIpfWNvbnRpbnVlfWM9cC5hcHBlbmQodCxyKX1lbHNle2lmKCFhKFlhKSljb250aW51ZTtjPXIuZGVmKHMudW5pZm9ybXMsIlsiLGUuaWQoZiksIl0iKX1kPT09TWE/cigiaWYoIixjLCImJiIsYywnLl9yZWdsVHlwZT09PSJmcmFtZWJ1ZmZlciIpeycsYywiPSIsYywiLmNvbG9yWzBdOyIsIn0iKTpkPT09a2EmJnIoImlmKCIsYywiJiYiLGMsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXJDdWJlIil7JyxjLCI9IixjLCIuY29sb3JbMF07IiwifSIpLGRlLm9wdGlvbmFsKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLG4pe3QuYXNzZXJ0KHIsZSwnYmFkIGRhdGEgb3IgbWlzc2luZyBmb3IgdW5pZm9ybSAiJytmKyciLiAgJytuKX1mdW5jdGlvbiBuKHQpe2UoInR5cGVvZiAiK2MrJz09PSInK3QrJyInLCJpbnZhbGlkIHR5cGUsIGV4cGVjdGVkICIrdCl9ZnVuY3Rpb24gaShyLG4pe2Uocy5pc0FycmF5TGlrZSsiKCIrYysiKSYmIitjKyIubGVuZ3RoPT09IityLCJpbnZhbGlkIHZlY3Rvciwgc2hvdWxkIGhhdmUgbGVuZ3RoICIrcix0LmNvbW1hbmRTdHIpfWZ1bmN0aW9uIGEocil7ZSgidHlwZW9mICIrYysnPT09ImZ1bmN0aW9uIiYmJytjKycuX3JlZ2xUeXBlPT09InRleHR1cmUnKyhyPT09S2k/IjJkIjoiQ3ViZSIpKyciJywiaW52YWxpZCB0ZXh0dXJlIHR5cGUiLHQuY29tbWFuZFN0cil9c3dpdGNoKGQpe2Nhc2UgZmE6bigibnVtYmVyIik7YnJlYWs7Y2FzZSBkYTppKDIsIm51bWJlciIpO2JyZWFrO2Nhc2UgcGE6aSgzLCJudW1iZXIiKTticmVhaztjYXNlIG1hOmkoNCwibnVtYmVyIik7YnJlYWs7Y2FzZSBsYTpuKCJudW1iZXIiKTticmVhaztjYXNlIHVhOmkoMiwibnVtYmVyIik7YnJlYWs7Y2FzZSBjYTppKDMsIm51bWJlciIpO2JyZWFrO2Nhc2UgaGE6aSg0LCJudW1iZXIiKTticmVhaztjYXNlIHZhOm4oImJvb2xlYW4iKTticmVhaztjYXNlIGdhOmkoMiwiYm9vbGVhbiIpO2JyZWFrO2Nhc2UgeWE6aSgzLCJib29sZWFuIik7YnJlYWs7Y2FzZSBiYTppKDQsImJvb2xlYW4iKTticmVhaztjYXNlIHhhOmkoNCwibnVtYmVyIik7YnJlYWs7Y2FzZSBfYTppKDksIm51bWJlciIpO2JyZWFrO2Nhc2Ugd2E6aSgxNiwibnVtYmVyIik7YnJlYWs7Y2FzZSBNYTphKEtpKTticmVhaztjYXNlIGthOmEoUWkpfX0pO3ZhciBfPTE7c3dpdGNoKGQpe2Nhc2UgTWE6Y2FzZSBrYTp2YXIgdz1yLmRlZihjLCIuX3RleHR1cmUiKTtyKGwsIi51bmlmb3JtMWkoIix2LCIsIix3LCIuYmluZCgpKTsiKSxyLmV4aXQodywiLnVuYmluZCgpOyIpO2NvbnRpbnVlO2Nhc2UgZmE6Y2FzZSB2YTpvPSIxaSI7YnJlYWs7Y2FzZSBkYTpjYXNlIGdhOm89IjJpIixfPTI7YnJlYWs7Y2FzZSBwYTpjYXNlIHlhOm89IjNpIixfPTM7YnJlYWs7Y2FzZSBtYTpjYXNlIGJhOm89IjRpIixfPTQ7YnJlYWs7Y2FzZSBsYTpvPSIxZiI7YnJlYWs7Y2FzZSB1YTpvPSIyZiIsXz0yO2JyZWFrO2Nhc2UgY2E6bz0iM2YiLF89MzticmVhaztjYXNlIGhhOm89IjRmIixfPTQ7YnJlYWs7Y2FzZSB4YTpvPSJNYXRyaXgyZnYiO2JyZWFrO2Nhc2UgX2E6bz0iTWF0cml4M2Z2IjticmVhaztjYXNlIHdhOm89Ik1hdHJpeDRmdiJ9aWYocihsLCIudW5pZm9ybSIsbywiKCIsdiwiLCIpLCJNIj09PW8uY2hhckF0KDApKXt2YXIgTT1NYXRoLnBvdyhkLXhhKzIsMiksaz10Lmdsb2JhbC5kZWYoIm5ldyBGbG9hdDMyQXJyYXkoIixNLCIpIik7cigiZmFsc2UsKEFycmF5LmlzQXJyYXkoIixjLCIpfHwiLGMsIiBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSk/IixjLCI6KCIsSihNLGZ1bmN0aW9uKHQpe3JldHVybiBrKyJbIit0KyJdPSIrYysiWyIrdCsiXSJ9KSwiLCIsaywiKSIpfWVsc2UgcihfPjE/SihfLGZ1bmN0aW9uKHQpe3JldHVybiBjKyJbIit0KyJdIn0pOmMpO3IoIik7Iil9fWZ1bmN0aW9uIEYodCxlLHIsbil7ZnVuY3Rpb24gaShpKXt2YXIgYT1jW2ldO3JldHVybiBhP2EuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwP2EuYXBwZW5kKHQscik6YS5hcHBlbmQodCxlKTplLmRlZih1LCIuIixpKX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gdCgpe3IodiwiLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCIsW2YscCxnLGQrIjw8KCgiK2crIi0iK1FuKyIpPj4xKSIsbV0sIik7Iil9ZnVuY3Rpb24gZSgpe3IodiwiLmRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSgiLFtmLGQscCxtXSwiKTsiKX1oP3k/dCgpOihyKCJpZigiLGgsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX1mdW5jdGlvbiBvKCl7ZnVuY3Rpb24gdCgpe3IobCsiLmRyYXdFbGVtZW50cygiK1tmLHAsZyxkKyI8PCgoIitnKyItIitRbisiKT4+MSkiXSsiKTsiKX1mdW5jdGlvbiBlKCl7cihsKyIuZHJhd0FycmF5cygiK1tmLGQscF0rIik7Iil9aD95P3QoKToocigiaWYoIixoLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9dmFyIHM9dC5zaGFyZWQsbD1zLmdsLHU9cy5kcmF3LGM9bi5kcmF3LGg9ZnVuY3Rpb24oKXt2YXIgaSxhPWMuZWxlbWVudHMsbz1lO3JldHVybiBhPygoYS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXApJiYobz1yKSxpPWEuYXBwZW5kKHQsbykpOmk9by5kZWYodSwiLiIsRmkpLGkmJm8oImlmKCIraSsiKSIrbCsiLmJpbmRCdWZmZXIoIitKaSsiLCIraSsiLmJ1ZmZlci5idWZmZXIpOyIpLGl9KCksZj1pKGppKSxkPWkoQmkpLHA9ZnVuY3Rpb24oKXt2YXIgaSxhPWMuY291bnQsbz1lO3JldHVybiBhPygoYS5jb250ZXh0RGVwJiZuLmNvbnRleHREeW5hbWljfHxhLnByb3BEZXApJiYobz1yKSxpPWEuYXBwZW5kKHQsbyksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXthLk1JU1NJTkcmJnQuYXNzZXJ0KGUsImZhbHNlIiwibWlzc2luZyB2ZXJ0ZXggY291bnQiKSxhLkRZTkFNSUMmJnQuYXNzZXJ0KG8saSsiPj0wIiwibWlzc2luZyB2ZXJ0ZXggY291bnQiKX0pKTooaT1vLmRlZih1LCIuIixOaSksZGUub3B0aW9uYWwoZnVuY3Rpb24oKXt0LmFzc2VydChvLGkrIj49MCIsIm1pc3NpbmcgdmVydGV4IGNvdW50Iil9KSksaX0oKTtpZigibnVtYmVyIj09dHlwZW9mIHApe2lmKDA9PT1wKXJldHVybn1lbHNlIHIoImlmKCIscCwiKXsiKSxyLmV4aXQoIn0iKTt2YXIgbSx2O0smJihtPWkoVWkpLHY9dC5pbnN0YW5jaW5nKTt2YXIgZz1oKyIudHlwZSIseT1jLmVsZW1lbnRzJiZxdChjLmVsZW1lbnRzKTtLJiYoIm51bWJlciIhPXR5cGVvZiBtfHxtPj0wKT8ic3RyaW5nIj09dHlwZW9mIG0/KHIoImlmKCIsbSwiPjApeyIpLGEoKSxyKCJ9ZWxzZSBpZigiLG0sIjwwKXsiKSxvKCkscigifSIpKTphKCk6bygpfWZ1bmN0aW9uIGoodCxlLHIsbixpKXt2YXIgYT15KCksbz1hLnByb2MoImJvZHkiLGkpO3JldHVybiBkZS5vcHRpb25hbChmdW5jdGlvbigpe2EuY29tbWFuZFN0cj1lLmNvbW1hbmRTdHIsYS5jb21tYW5kPWEubGluayhlLmNvbW1hbmRTdHIpfSksSyYmKGEuaW5zdGFuY2luZz1vLmRlZihhLnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKSx0KGEsbyxyLG4pLGEuY29tcGlsZSgpLmJvZHl9ZnVuY3Rpb24gTih0LGUscixuKXtEKHQsZSksTyh0LGUscixuLmF0dHJpYnV0ZXMsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLFIodCxlLHIsbi51bmlmb3JtcyxmdW5jdGlvbigpe3JldHVybiEwfSksRih0LGUsZSxyKX1mdW5jdGlvbiBCKHQsZSl7dmFyIHI9dC5wcm9jKCJkcmF3IiwxKTtEKHQsciksTCh0LHIsZS5jb250ZXh0KSxDKHQscixlLmZyYW1lYnVmZmVyKSx6KHQscixlKSxJKHQscixlLnN0YXRlKSxQKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pTih0LHIsZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBpPXQuZ2xvYmFsLmRlZigie30iKSxhPXIuZGVmKG4sIi5pZCIpLG89ci5kZWYoaSwiWyIsYSwiXSIpO3IodC5jb25kKG8pLnRoZW4obywiLmNhbGwodGhpcyxhMCk7IikuZWxzZShvLCI9IixpLCJbIixhLCJdPSIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBqKE4sdCxlLHIsMSl9KSwiKCIsbiwiKTsiLG8sIi5jYWxsKHRoaXMsYTApOyIpKX1PYmplY3Qua2V5cyhlLnN0YXRlKS5sZW5ndGg+MCYmcih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKX1mdW5jdGlvbiBVKHQsZSxyLG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4hMH10LmJhdGNoSWQ9ImExIixEKHQsZSksTyh0LGUscixuLmF0dHJpYnV0ZXMsaSksUih0LGUscixuLnVuaWZvcm1zLGkpLEYodCxlLGUscil9ZnVuY3Rpb24gVih0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB0LmNvbnRleHREZXAmJm98fHQucHJvcERlcH1mdW5jdGlvbiBhKHQpe3JldHVybiFpKHQpfUQodCxlKTt2YXIgbz1yLmNvbnRleHREZXAscz1lLmRlZigpLGw9ZS5kZWYoKTt0LnNoYXJlZC5wcm9wcz1sLHQuYmF0Y2hJZD1zO3ZhciB1PXQuc2NvcGUoKSxjPXQuc2NvcGUoKTtpZihlKHUuZW50cnksImZvcigiLHMsIj0wOyIscywiPCIsImExIiwiOysrIixzLCIpeyIsbCwiPSIsImEwIiwiWyIscywiXTsiLGMsIn0iLHUuZXhpdCksci5uZWVkc0NvbnRleHQmJkwodCxjLHIuY29udGV4dCksci5uZWVkc0ZyYW1lYnVmZmVyJiZDKHQsYyxyLmZyYW1lYnVmZmVyKSxJKHQsYyxyLnN0YXRlLGkpLHIucHJvZmlsZSYmaShyLnByb2ZpbGUpJiZQKHQsYyxyLCExLCEwKSxuKU8odCx1LHIsbi5hdHRyaWJ1dGVzLGEpLE8odCxjLHIsbi5hdHRyaWJ1dGVzLGkpLFIodCx1LHIsbi51bmlmb3JtcyxhKSxSKHQsYyxyLG4udW5pZm9ybXMsaSksRih0LHUsYyxyKTtlbHNle3ZhciBoPXQuZ2xvYmFsLmRlZigie30iKSxmPXIuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQsYyksZD1jLmRlZihmLCIuaWQiKSxwPWMuZGVmKGgsIlsiLGQsIl0iKTtjKHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLGYsIi5wcm9ncmFtKTsiLCJpZighIixwLCIpeyIscCwiPSIsaCwiWyIsZCwiXT0iLHQubGluayhmdW5jdGlvbihlKXtyZXR1cm4gaihVLHQscixlLDIpfSksIigiLGYsIik7fSIscCwiLmNhbGwodGhpcyxhMFsiLHMsIl0sIixzLCIpOyIpfX1mdW5jdGlvbiBIKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixEKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24odCl7aT1pfHxlLmNvbnRleHRbdF0ucHJvcERlcH0pLGl8fChMKHQsbixlLmNvbnRleHQpLGE9ITEpO3ZhciBvPWUuZnJhbWVidWZmZXIscz0hMTtvPyhvLnByb3BEZXA/aT1zPSEwOm8uY29udGV4dERlcCYmaSYmKHM9ITApLHN8fEModCxuLG8pKTpDKHQsbixudWxsKSxlLnN0YXRlLnZpZXdwb3J0JiZlLnN0YXRlLnZpZXdwb3J0LnByb3BEZXAmJihpPSEwKSx6KHQsbixlKSxJKHQsbixlLnN0YXRlLGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSksZS5wcm9maWxlJiZyKGUucHJvZmlsZSl8fFAodCxuLGUsITEsImExIiksZS5jb250ZXh0RGVwPWksZS5uZWVkc0NvbnRleHQ9YSxlLm5lZWRzRnJhbWVidWZmZXI9czt2YXIgbD1lLnNoYWRlci5wcm9nVmFyO2lmKGwuY29udGV4dERlcCYmaXx8bC5wcm9wRGVwKVYodCxuLGUsbnVsbCk7ZWxzZXt2YXIgdT1sLmFwcGVuZCh0LG4pO2lmKG4odC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsdSwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pVih0LG4sZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3ZhciBjPXQuZ2xvYmFsLmRlZigie30iKSxoPW4uZGVmKHUsIi5pZCIpLGY9bi5kZWYoYywiWyIsaCwiXSIpO24odC5jb25kKGYpLnRoZW4oZiwiLmNhbGwodGhpcyxhMCxhMSk7IikuZWxzZShmLCI9IixjLCJbIixoLCJdPSIsdC5saW5rKGZ1bmN0aW9uKHIpe3JldHVybiBqKFYsdCxlLHIsMil9KSwiKCIsdSwiKTsiLGYsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX19T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoPjAmJm4odC5zaGFyZWQuY3VycmVudCwiLmRpcnR5PXRydWU7Iil9ZnVuY3Rpb24gcSh0LHIpe2Z1bmN0aW9uIG4oZSl7dmFyIG49ci5zaGFkZXJbZV07biYmaS5zZXQoYS5zaGFkZXIsIi4iK2Usbi5hcHBlbmQodCxpKSl9dmFyIGk9dC5wcm9jKCJzY29wZSIsMyk7dC5iYXRjaElkPSJhMiI7dmFyIGE9dC5zaGFyZWQsbz1hLmN1cnJlbnQ7TCh0LGksci5jb250ZXh0KSxyLmZyYW1lYnVmZmVyJiZyLmZyYW1lYnVmZmVyLmFwcGVuZCh0LGkpLFZ0KE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuc3RhdGVbZV0sbz1uLmFwcGVuZCh0LGkpO210KG8pP28uZm9yRWFjaChmdW5jdGlvbihyLG4pe2kuc2V0KHQubmV4dFtlXSwiWyIrbisiXSIscil9KTppLnNldChhLm5leHQsIi4iK2Usbyl9KSxQKHQsaSxyLCEwLCEwKSxbRmksQmksTmksVWksamldLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ci5kcmF3W2VdCjtuJiZpLnNldChhLmRyYXcsIi4iK2UsIiIrbi5hcHBlbmQodCxpKSl9KSxPYmplY3Qua2V5cyhyLnVuaWZvcm1zKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2kuc2V0KGEudW5pZm9ybXMsIlsiK2UuaWQobikrIl0iLHIudW5pZm9ybXNbbl0uYXBwZW5kKHQsaSkpfSksT2JqZWN0LmtleXMoci5hdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPXIuYXR0cmlidXRlc1tlXS5hcHBlbmQodCxpKSxhPXQuc2NvcGVBdHRyaWIoZSk7T2JqZWN0LmtleXMobmV3IFcpLmZvckVhY2goZnVuY3Rpb24odCl7aS5zZXQoYSwiLiIrdCxuW3RdKX0pfSksbihPaSksbihSaSksT2JqZWN0LmtleXMoci5zdGF0ZSkubGVuZ3RoPjAmJihpKG8sIi5kaXJ0eT10cnVlOyIpLGkuZXhpdChvLCIuZGlydHk9dHJ1ZTsiKSksaSgiYTEoIix0LnNoYXJlZC5jb250ZXh0LCIsYTAsIix0LmJhdGNoSWQsIik7Iil9ZnVuY3Rpb24gRyh0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFtdCh0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZih2ZS5pc0R5bmFtaWModFtlW3JdXSkpcmV0dXJuITA7cmV0dXJuITF9fWZ1bmN0aW9uIFkodCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtvLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49aVtyXTtpZih2ZS5pc0R5bmFtaWMobikpe3ZhciBhPXQuaW52b2tlKGUsbik7ZShjLCIuIixyLCI9IixhLCI7Iil9fSl9dmFyIGk9ZS5zdGF0aWNbcl07aWYoaSYmRyhpKSl7dmFyIGE9dC5nbG9iYWwsbz1PYmplY3Qua2V5cyhpKSxzPSExLGw9ITEsdT0hMSxjPXQuZ2xvYmFsLmRlZigie30iKTtvLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9aVtlXTtpZih2ZS5pc0R5bmFtaWMocikpeyJmdW5jdGlvbiI9PXR5cGVvZiByJiYocj1pW2VdPXZlLnVuYm94KHIpKTt2YXIgbj1ZdChyLG51bGwpO3M9c3x8bi50aGlzRGVwLHU9dXx8bi5wcm9wRGVwLGw9bHx8bi5jb250ZXh0RGVwfWVsc2V7c3dpdGNoKGEoYywiLiIsZSwiPSIpLHR5cGVvZiByKXtjYXNlIm51bWJlciI6YShyKTticmVhaztjYXNlInN0cmluZyI6YSgnIicsciwnIicpO2JyZWFrO2Nhc2Uib2JqZWN0IjpBcnJheS5pc0FycmF5KHIpJiZhKCJbIixyLmpvaW4oKSwiXSIpO2JyZWFrO2RlZmF1bHQ6YSh0LmxpbmsocikpfWEoIjsiKX19KSxlLmR5bmFtaWNbcl09bmV3IHZlLkR5bmFtaWNWYXJpYWJsZShhaSx7dGhpc0RlcDpzLGNvbnRleHREZXA6bCxwcm9wRGVwOnUscmVmOmMsYXBwZW5kOm59KSxkZWxldGUgZS5zdGF0aWNbcl19fWZ1bmN0aW9uIFgodCxlLHIsbixpKXt2YXIgYT15KCk7YS5zdGF0cz1hLmxpbmsoaSksT2JqZWN0LmtleXMoZS5zdGF0aWMpLmZvckVhY2goZnVuY3Rpb24odCl7WShhLGUsdCl9KSxXaS5mb3JFYWNoKGZ1bmN0aW9uKGUpe1koYSx0LGUpfSk7dmFyIG89RSh0LGUscixuLGEpO3JldHVybiBCKGEsbykscShhLG8pLEgoYSxvKSxhLmNvbXBpbGUoKX12YXIgVz11LlJlY29yZCxaPXthZGQ6MzI3NzQsc3VidHJhY3Q6MzI3NzgsInJldmVyc2Ugc3VidHJhY3QiOjMyNzc5fTtyLmV4dF9ibGVuZF9taW5tYXgmJihaLm1pbj1DYSxaLm1heD16YSk7dmFyIEs9ci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLFE9ci53ZWJnbF9kcmF3X2J1ZmZlcnMsJD17ZGlydHk6ITAscHJvZmlsZTpwLnByb2ZpbGV9LHR0PXt9LGV0PVtdLHJ0PXt9LG50PXt9O3Yob2ksZWEpLHYoc2ksdGEpLGcobGksImJsZW5kQ29sb3IiLFswLDAsMCwwXSksZyh1aSwiYmxlbmRFcXVhdGlvblNlcGFyYXRlIixbUmEsUmFdKSxnKGNpLCJibGVuZEZ1bmNTZXBhcmF0ZSIsW09hLFBhLE9hLFBhXSksdihoaSxuYSwhMCksZyhmaSwiZGVwdGhGdW5jIixGYSksZyhkaSwiZGVwdGhSYW5nZSIsWzAsMV0pLGcocGksImRlcHRoTWFzayIsITApLGcobWksbWksWyEwLCEwLCEwLCEwXSksdih2aSwkaSksZyhnaSwiY3VsbEZhY2UiLFNhKSxnKHlpLHlpLExhKSxnKGJpLGJpLDEpLHYoeGksYWEpLGcoX2ksInBvbHlnb25PZmZzZXQiLFswLDBdKSx2KHdpLG9hKSx2KE1pLHNhKSxnKGtpLCJzYW1wbGVDb3ZlcmFnZSIsWzEsITFdKSx2KEFpLHJhKSxnKFRpLCJzdGVuY2lsTWFzayIsLTEpLGcoU2ksInN0ZW5jaWxGdW5jIixbSWEsMCwtMV0pLGcoRWksInN0ZW5jaWxPcFNlcGFyYXRlIixbVGEsRGEsRGEsRGFdKSxnKExpLCJzdGVuY2lsT3BTZXBhcmF0ZSIsW1NhLERhLERhLERhXSksdihDaSxpYSksZyh6aSwic2Npc3NvciIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxnKElpLElpLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSk7dmFyIGl0PXtnbDp0LGNvbnRleHQ6ZixzdHJpbmdzOmUsbmV4dDp0dCxjdXJyZW50OiQsZHJhdzpoLGVsZW1lbnRzOmEsYnVmZmVyOmksc2hhZGVyOmMsYXR0cmlidXRlczp1LnN0YXRlLHVuaWZvcm1zOmwsZnJhbWVidWZmZXI6cyxleHRlbnNpb25zOnIsdGltZXI6ZCxpc0J1ZmZlckFyZ3M6VXR9LGF0PXtwcmltVHlwZXM6QmUsY29tcGFyZUZ1bmNzOlZhLGJsZW5kRnVuY3M6QmEsYmxlbmRFcXVhdGlvbnM6WixzdGVuY2lsT3BzOkhhLGdsVHlwZXM6emUsb3JpZW50YXRpb25UeXBlOkdhfTtkZS5vcHRpb25hbChmdW5jdGlvbigpe2l0LmlzQXJyYXlMaWtlPW10fSksUSYmKGF0LmJhY2tCdWZmZXI9W1NhXSxhdC5kcmF3QnVmZmVyPUoobi5tYXhEcmF3YnVmZmVycyxmdW5jdGlvbih0KXtyZXR1cm4gMD09PXQ/WzBdOkoodCxmdW5jdGlvbih0KXtyZXR1cm4gTmErdH0pfSkpO3ZhciBvdD0wO3JldHVybntuZXh0OnR0LGN1cnJlbnQ6JCxwcm9jczpmdW5jdGlvbigpe3ZhciBlPXkoKSxyPWUucHJvYygicG9sbCIpLGk9ZS5wcm9jKCJyZWZyZXNoIiksYT1lLmJsb2NrKCk7cihhKSxpKGEpO3ZhciBvPWUuc2hhcmVkLHM9by5nbCxsPW8ubmV4dCx1PW8uY3VycmVudDthKHUsIi5kaXJ0eT1mYWxzZTsiKSxDKGUsciksQyhlLGksbnVsbCwhMCk7dmFyIGMsaD10LmdldEV4dGVuc2lvbigiYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpO2gmJihjPWUubGluayhoKSk7Zm9yKHZhciBmPTA7ZjxuLm1heEF0dHJpYnV0ZXM7KytmKXt2YXIgZD1pLmRlZihvLmF0dHJpYnV0ZXMsIlsiLGYsIl0iKSxwPWUuY29uZChkLCIuYnVmZmVyIik7cC50aGVuKHMsIi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGYsIik7IixzLCIuYmluZEJ1ZmZlcigiLFppLCIsIixkLCIuYnVmZmVyLmJ1ZmZlcik7IixzLCIudmVydGV4QXR0cmliUG9pbnRlcigiLGYsIiwiLGQsIi5zaXplLCIsZCwiLnR5cGUsIixkLCIubm9ybWFsaXplZCwiLGQsIi5zdHJpZGUsIixkLCIub2Zmc2V0KTsiKS5lbHNlKHMsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixmLCIpOyIscywiLnZlcnRleEF0dHJpYjRmKCIsZiwiLCIsZCwiLngsIixkLCIueSwiLGQsIi56LCIsZCwiLncpOyIsZCwiLmJ1ZmZlcj1udWxsOyIpLGkocCksaCYmaShjLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsZiwiLCIsZCwiLmRpdmlzb3IpOyIpfXJldHVybiBPYmplY3Qua2V5cyhydCkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1ydFt0XSxvPWEuZGVmKGwsIi4iLHQpLGM9ZS5ibG9jaygpO2MoImlmKCIsbywiKXsiLHMsIi5lbmFibGUoIixuLCIpfWVsc2V7IixzLCIuZGlzYWJsZSgiLG4sIil9Iix1LCIuIix0LCI9IixvLCI7IiksaShjKSxyKCJpZigiLG8sIiE9PSIsdSwiLiIsdCwiKXsiLGMsIn0iKX0pLE9iamVjdC5rZXlzKG50KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuLG8sYz1udFt0XSxoPSRbdF0sZj1lLmJsb2NrKCk7aWYoZihzLCIuIixjLCIoIiksbXQoaCkpe3ZhciBkPWgubGVuZ3RoO249ZS5nbG9iYWwuZGVmKGwsIi4iLHQpLG89ZS5nbG9iYWwuZGVmKHUsIi4iLHQpLGYoSihkLGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIn0pLCIpOyIsSihkLGZ1bmN0aW9uKHQpe3JldHVybiBvKyJbIit0KyJdPSIrbisiWyIrdCsiXTsifSkuam9pbigiIikpLHIoImlmKCIsSihkLGZ1bmN0aW9uKHQpe3JldHVybiBuKyJbIit0KyJdIT09IitvKyJbIit0KyJdIn0pLmpvaW4oInx8IiksIil7IixmLCJ9Iil9ZWxzZSBuPWEuZGVmKGwsIi4iLHQpLG89YS5kZWYodSwiLiIsdCksZihuLCIpOyIsdSwiLiIsdCwiPSIsbiwiOyIpLHIoImlmKCIsbiwiIT09IixvLCIpeyIsZiwifSIpO2koZil9KSxlLmNvbXBpbGUoKX0oKSxjb21waWxlOlh9fWZ1bmN0aW9uIFd0KCl7cmV0dXJue2J1ZmZlckNvdW50OjAsZWxlbWVudHNDb3VudDowLGZyYW1lYnVmZmVyQ291bnQ6MCxzaGFkZXJDb3VudDowLHRleHR1cmVDb3VudDowLGN1YmVDb3VudDowLHJlbmRlcmJ1ZmZlckNvdW50OjAsbWF4VGV4dHVyZVVuaXRzOjB9fWZ1bmN0aW9uIFp0KHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSnQodCl7ZnVuY3Rpb24gZSgpe2lmKDA9PT1xLmxlbmd0aClyZXR1cm4gayYmay51cGRhdGUoKSx2b2lkKEo9bnVsbCk7Sj1nZS5uZXh0KGUpLGYoKTtmb3IodmFyIHQ9cS5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9cVt0XTtyJiZyKEUsbnVsbCwwKX1nLmZsdXNoKCksayYmay51cGRhdGUoKX1mdW5jdGlvbiByKCl7IUomJnEubGVuZ3RoPjAmJihKPWdlLm5leHQoZSkpfWZ1bmN0aW9uIG4oKXtKJiYoZ2UuY2FuY2VsKGUpLEo9bnVsbCl9ZnVuY3Rpb24gaSh0KXt0LnByZXZlbnREZWZhdWx0KCksYj0hMCxuKCksRy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoKX0pfWZ1bmN0aW9uIGEodCl7Zy5nZXRFcnJvcigpLGI9ITEseC5yZXN0b3JlKCksTy5yZXN0b3JlKCksSS5yZXN0b3JlKCksUi5yZXN0b3JlKCksRi5yZXN0b3JlKCksai5yZXN0b3JlKCksayYmay5yZXN0b3JlKCksTi5wcm9jcy5yZWZyZXNoKCkscigpLFkuZm9yRWFjaChmdW5jdGlvbih0KXt0KCl9KX1mdW5jdGlvbiBvKCl7cS5sZW5ndGg9MCxuKCksSCYmKEgucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbyxpKSxILnJlbW92ZUV2ZW50TGlzdGVuZXIocm8sYSkpLE8uY2xlYXIoKSxqLmNsZWFyKCksRi5jbGVhcigpLFIuY2xlYXIoKSxELmNsZWFyKCksSS5jbGVhcigpLGsmJmsuY2xlYXIoKSxaLmZvckVhY2goZnVuY3Rpb24odCl7dCgpfSl9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIGk9dFtuXTt2ZS5pc0R5bmFtaWMoaSk/cltuXT12ZS51bmJveChpLG4pOmVbbl09aX0pLHtkeW5hbWljOnIsc3RhdGljOmV9fWZ1bmN0aW9uIHIodCl7Zm9yKDtkLmxlbmd0aDx0OylkLnB1c2gobnVsbCk7cmV0dXJuIGR9ZnVuY3Rpb24gbih0LGUpe3ZhciBuO2lmKGImJmRlLnJhaXNlKCJjb250ZXh0IGxvc3QiKSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gZi5jYWxsKHRoaXMsbnVsbCx0LDApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2ZvcihuPTA7bjx0OysrbilmLmNhbGwodGhpcyxudWxsLGUsbik7cmV0dXJufWlmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pZi5jYWxsKHRoaXMsdFtuXSxlLG4pO3JldHVybn1yZXR1cm4gZi5jYWxsKHRoaXMsdCxlLDApfWlmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYodD4wKXJldHVybiBoLmNhbGwodGhpcyxyKDB8dCksMHx0KX1lbHNle2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBjLmNhbGwodGhpcyx0KTtpZih0Lmxlbmd0aClyZXR1cm4gaC5jYWxsKHRoaXMsdCx0Lmxlbmd0aCl9fWRlKCEhdCwiaW52YWxpZCBhcmdzIHRvIHJlZ2woey4uLn0pIiksZGUudHlwZSh0LCJvYmplY3QiLCJpbnZhbGlkIGFyZ3MgdG8gcmVnbCh7Li4ufSkiKTt2YXIgaT1lKHQuY29udGV4dHx8e30pLGE9ZSh0LnVuaWZvcm1zfHx7fSksbz1lKHQuYXR0cmlidXRlc3x8e30pLHM9ZShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2lmKHQgaW4gcil7dmFyIGU9clt0XTtkZWxldGUgclt0XSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JbdCsiLiIrbl09ZVtuXX0pfX12YXIgcj0kdCh7fSx0KTtyZXR1cm4gZGVsZXRlIHIudW5pZm9ybXMsZGVsZXRlIHIuYXR0cmlidXRlcyxkZWxldGUgci5jb250ZXh0LCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIikscn0odCkpLGw9e2dwdVRpbWU6MCxjcHVUaW1lOjAsY291bnQ6MH0sdT1OLmNvbXBpbGUocyxvLGEsaSxsKSxjPXUuZHJhdyxoPXUuYmF0Y2gsZj11LnNjb3BlLGQ9W107cmV0dXJuICR0KG4se3N0YXRzOmx9KX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9MDtOLnByb2NzLnBvbGwoKTt2YXIgbj1lLmNvbG9yO24mJihnLmNsZWFyQ29sb3IoK25bMF18fDAsK25bMV18fDAsK25bMl18fDAsK25bM118fDApLHJ8PUthKSwiZGVwdGgiaW4gZSYmKGcuY2xlYXJEZXB0aCgrZS5kZXB0aCkscnw9UWEpLCJzdGVuY2lsImluIGUmJihnLmNsZWFyU3RlbmNpbCgwfGUuc3RlbmNpbCkscnw9JGEpLGRlKCEhciwiY2FsbGVkIHJlZ2wuY2xlYXIgd2l0aCBubyBidWZmZXIgc3BlY2lmaWVkIiksZy5jbGVhcihyKX1mdW5jdGlvbiB1KHQpe2lmKGRlKCJvYmplY3QiPT10eXBlb2YgdCYmdCwicmVnbC5jbGVhcigpIHRha2VzIGFuIG9iamVjdCBhcyBpbnB1dCIpLCJmcmFtZWJ1ZmZlciJpbiB0KWlmKHQuZnJhbWVidWZmZXImJiJmcmFtZWJ1ZmZlckN1YmUiPT09dC5mcmFtZWJ1ZmZlcl9yZWdsVHlwZSlmb3IodmFyIGU9MDtlPDY7KytlKUsoJHQoe2ZyYW1lYnVmZmVyOnQuZnJhbWVidWZmZXIuZmFjZXNbZV19LHQpLGwpO2Vsc2UgSyh0LGwpO2Vsc2UgbChudWxsLHQpfWZ1bmN0aW9uIGModCl7ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUoKXt2YXIgdD1adChxLGUpO3FbdF09cVtxLmxlbmd0aC0xXSxxLmxlbmd0aC09MSxxLmxlbmd0aDw9MCYmbigpfXZhciByPVp0KHEsdCk7ZGUocj49MCwiY2Fubm90IGNhbmNlbCBhIGZyYW1lIHR3aWNlIikscVtyXT1lfXJldHVybiBkZS50eXBlKHQsImZ1bmN0aW9uIiwicmVnbC5mcmFtZSgpIGNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpLHEucHVzaCh0KSxyKCkse2NhbmNlbDplfX1mdW5jdGlvbiBoKCl7dmFyIHQ9Vi52aWV3cG9ydCxlPVYuc2Npc3Nvcl9ib3g7dFswXT10WzFdPWVbMF09ZVsxXT0wLEUudmlld3BvcnRXaWR0aD1FLmZyYW1lYnVmZmVyV2lkdGg9RS5kcmF3aW5nQnVmZmVyV2lkdGg9dFsyXT1lWzJdPWcuZHJhd2luZ0J1ZmZlcldpZHRoLEUudmlld3BvcnRIZWlnaHQ9RS5mcmFtZWJ1ZmZlckhlaWdodD1FLmRyYXdpbmdCdWZmZXJIZWlnaHQ9dFszXT1lWzNdPWcuZHJhd2luZ0J1ZmZlckhlaWdodH1mdW5jdGlvbiBmKCl7RS50aWNrKz0xLEUudGltZT1wKCksaCgpLE4ucHJvY3MucG9sbCgpfWZ1bmN0aW9uIGQoKXtoKCksTi5wcm9jcy5yZWZyZXNoKCksayYmay51cGRhdGUoKX1mdW5jdGlvbiBwKCl7cmV0dXJuKHllKCktQSkvMWUzfWZ1bmN0aW9uIG0odCxlKXtkZS50eXBlKGUsImZ1bmN0aW9uIiwibGlzdGVuZXIgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIHI7c3dpdGNoKHQpe2Nhc2UiZnJhbWUiOnJldHVybiBjKGUpO2Nhc2UibG9zdCI6cj1HO2JyZWFrO2Nhc2UicmVzdG9yZSI6cj1ZO2JyZWFrO2Nhc2UiZGVzdHJveSI6cj1aO2JyZWFrO2RlZmF1bHQ6ZGUucmFpc2UoImludmFsaWQgZXZlbnQsIG11c3QgYmUgb25lIG9mIGZyYW1lLGxvc3QscmVzdG9yZSxkZXN0cm95Iil9cmV0dXJuIHIucHVzaChlKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpaWYoclt0XT09PWUpcmV0dXJuIHJbdF09cltyLmxlbmd0aC0xXSx2b2lkIHIucG9wKCl9fX12YXIgdj1YKHQpO2lmKCF2KXJldHVybiBudWxsO3ZhciBnPXYuZ2wseT1nLmdldENvbnRleHRBdHRyaWJ1dGVzKCksYj1nLmlzQ29udGV4dExvc3QoKSx4PVcoZyx2KTtpZigheClyZXR1cm4gbnVsbDt2YXIgXz1CKCksdz1XdCgpLE09eC5leHRlbnNpb25zLGs9SmEoZyxNKSxBPXllKCksVD1nLmRyYXdpbmdCdWZmZXJXaWR0aCxTPWcuZHJhd2luZ0J1ZmZlckhlaWdodCxFPXt0aWNrOjAsdGltZTowLHZpZXdwb3J0V2lkdGg6VCx2aWV3cG9ydEhlaWdodDpTLGZyYW1lYnVmZmVyV2lkdGg6VCxmcmFtZWJ1ZmZlckhlaWdodDpTLGRyYXdpbmdCdWZmZXJXaWR0aDpULGRyYXdpbmdCdWZmZXJIZWlnaHQ6UyxwaXhlbFJhdGlvOnYucGl4ZWxSYXRpb30sTD17fSxDPXtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0sej1iZShnLE0pLEk9ZnQoZyx3LHYpLEQ9ZHQoZyxNLEksdyksUD1PdChnLE0seixJLF8pLE89UnQoZyxfLHcsdiksUj16dChnLE0seixmdW5jdGlvbigpe04ucHJvY3MucG9sbCgpfSxFLHcsdiksRj1NbihnLE0seix3LHYpLGo9RHQoZyxNLHosUixGLHcpLE49WHQoZyxfLE0seixJLEQsUixqLEwsUCxPLEMsRSxrLHYpLFU9RnQoZyxqLE4ucHJvY3MucG9sbCxFLHksTSksVj1OLm5leHQsSD1nLmNhbnZhcyxxPVtdLEc9W10sWT1bXSxaPVt2Lm9uRGVzdHJveV0sSj1udWxsO0gmJihILmFkZEV2ZW50TGlzdGVuZXIoZW8saSwhMSksSC5hZGRFdmVudExpc3RlbmVyKHJvLGEsITEpKTt2YXIgSz1qLnNldEZCTz1zKHtmcmFtZWJ1ZmZlcjp2ZS5kZWZpbmUuY2FsbChudWxsLG5vLCJmcmFtZWJ1ZmZlciIpfSk7ZCgpO3ZhciBRPSR0KHMse2NsZWFyOnUscHJvcDp2ZS5kZWZpbmUuYmluZChudWxsLG5vKSxjb250ZXh0OnZlLmRlZmluZS5iaW5kKG51bGwsaW8pLHRoaXM6dmUuZGVmaW5lLmJpbmQobnVsbCxhbyksZHJhdzpzKHt9KSxidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIEkuY3JlYXRlKHQsdG8sITEsITEpfSxlbGVtZW50czpmdW5jdGlvbih0KXtyZXR1cm4gRC5jcmVhdGUodCwhMSl9LHRleHR1cmU6Ui5jcmVhdGUyRCxjdWJlOlIuY3JlYXRlQ3ViZSxyZW5kZXJidWZmZXI6Ri5jcmVhdGUsZnJhbWVidWZmZXI6ai5jcmVhdGUsZnJhbWVidWZmZXJDdWJlOmouY3JlYXRlQ3ViZSxhdHRyaWJ1dGVzOnksZnJhbWU6YyxvbjptLGxpbWl0czp6LGhhc0V4dGVuc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gei5leHRlbnNpb25zLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKT49MH0scmVhZDpVLGRlc3Ryb3k6byxfZ2w6ZyxfcmVmcmVzaDpkLHBvbGw6ZnVuY3Rpb24oKXtmKCksayYmay51cGRhdGUoKX0sbm93OnAsc3RhdHM6d30pO3JldHVybiB2Lm9uRG9uZShudWxsLFEpLFF9dmFyIEt0PXsiW29iamVjdCBJbnQ4QXJyYXldIjo1MTIwLCJbb2JqZWN0IEludDE2QXJyYXldIjo1MTIyLCJbb2JqZWN0IEludDMyQXJyYXldIjo1MTI0LCJbb2JqZWN0IFVpbnQ4QXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6NTEyMSwiW29iamVjdCBVaW50MTZBcnJheV0iOjUxMjMsIltvYmplY3QgVWludDMyQXJyYXldIjo1MTI1LCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOjUxMjYsIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6NTEyMSwiW29iamVjdCBBcnJheUJ1ZmZlcl0iOjUxMjF9LFF0PWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodClpbiBLdH0sJHQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj0wO248ci5sZW5ndGg7KytuKXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH0sdGU9WyJnbCIsImNhbnZhcyIsImNvbnRhaW5lciIsImF0dHJpYnV0ZXMiLCJwaXhlbFJhdGlvIiwiZXh0ZW5zaW9ucyIsIm9wdGlvbmFsRXh0ZW5zaW9ucyIsInByb2ZpbGUiLCJvbkRvbmUiXSxlZT0zMzA3MSxyZT05NzI4LG5lPTk5ODQsaWU9OTk4NSxhZT05OTg2LG9lPTk5ODcsc2U9NTEyNixsZT0zMjgxOSx1ZT0zMjgyMCxjZT0zMzYzNSxoZT0zNDA0MixmZT17fTtmZVs1MTIwXT1mZVs1MTIxXT0xLGZlWzUxMjJdPWZlWzUxMjNdPWZlWzM2MTkzXT1mZVtjZV09ZmVbbGVdPWZlW3VlXT0yLGZlWzUxMjRdPWZlWzUxMjVdPWZlW3NlXT1mZVtoZV09NDt2YXIgZGU9JHQocix7b3B0aW9uYWw6UyxyYWlzZTplLGNvbW1hbmRSYWlzZTpNLGNvbW1hbmQ6ayxwYXJhbWV0ZXI6aSxjb21tYW5kUGFyYW1ldGVyOkEsY29uc3RydWN0b3I6dSx0eXBlOm8sY29tbWFuZFR5cGU6VCxpc1R5cGVkQXJyYXk6YSxubmk6cyxvbmVPZjpsLHNoYWRlckVycm9yOmIsbGlua0Vycm9yOngsY2FsbFNpdGU6bSxzYXZlQ29tbWFuZFJlZjpfLHNhdmVEcmF3SW5mbzp3LGZyYW1lYnVmZmVyRm9ybWF0OkUsZ3Vlc3NDb21tYW5kOnAsdGV4dHVyZTJEOnosdGV4dHVyZUN1YmU6SX0pLHBlPTAsbWU9MCx2ZT17RHluYW1pY1ZhcmlhYmxlOkQsZGVmaW5lOkYsaXNEeW5hbWljOmosdW5ib3g6TixhY2Nlc3NvcjpSfSxnZT17bmV4dDoiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9OmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMTYpfSxjYW5jZWw6ImZ1bmN0aW9uIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSx5ZT0idW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxiZT1mdW5jdGlvbih0LGUpe3ZhciByPTE7ZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJihyPXQuZ2V0UGFyYW1ldGVyKDM0MDQ3KSk7dmFyIG49MSxpPTE7cmV0dXJuIGUud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpLHtjb2xvckJpdHM6W3QuZ2V0UGFyYW1ldGVyKDM0MTApLHQuZ2V0UGFyYW1ldGVyKDM0MTEpLHQuZ2V0UGFyYW1ldGVyKDM0MTIpLHQuZ2V0UGFyYW1ldGVyKDM0MTMpXSxkZXB0aEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNCksc3RlbmNpbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNSksc3VicGl4ZWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MDgpLGV4dGVuc2lvbnM6T2JqZWN0LmtleXMoZSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhZVt0XX0pLG1heEFuaXNvdHJvcGljOnIsbWF4RHJhd2J1ZmZlcnM6bixtYXhDb2xvckF0dGFjaG1lbnRzOmkscG9pbnRTaXplRGltczp0LmdldFBhcmFtZXRlcigzMzkwMSksbGluZVdpZHRoRGltczp0LmdldFBhcmFtZXRlcigzMzkwMiksbWF4Vmlld3BvcnREaW1zOnQuZ2V0UGFyYW1ldGVyKDMzODYpLG1heENvbWJpbmVkVGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYxKSxtYXhDdWJlTWFwU2l6ZTp0LmdldFBhcmFtZXRlcigzNDA3NiksbWF4UmVuZGVyYnVmZmVyU2l6ZTp0LmdldFBhcmFtZXRlcigzNDAyNCksbWF4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM0OTMwKSxtYXhUZXh0dXJlU2l6ZTp0LmdldFBhcmFtZXRlcigzMzc5KSxtYXhBdHRyaWJ1dGVzOnQuZ2V0UGFyYW1ldGVyKDM0OTIxKSxtYXhWZXJ0ZXhVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0NyksbWF4VmVydGV4VGV4dHVyZVVuaXRzOnQuZ2V0UGFyYW1ldGVyKDM1NjYwKSxtYXhWYXJ5aW5nVmVjdG9yczp0LmdldFBhcmFtZXRlcigzNjM0OCksbWF4RnJhZ21lbnRVbmlmb3Jtczp0LmdldFBhcmFtZXRlcigzNjM0OSksZ2xzbDp0LmdldFBhcmFtZXRlcigzNTcyNCkscmVuZGVyZXI6dC5nZXRQYXJhbWV0ZXIoNzkzNyksdmVuZG9yOnQuZ2V0UGFyYW1ldGVyKDc5MzYpLHZlcnNpb246dC5nZXRQYXJhbWV0ZXIoNzkzOCl9fSx4ZT1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LF9lPTUxMjAsd2U9NTEyMSxNZT01MTIyLGtlPTUxMjMsQWU9NTEyNCxUZT01MTI1LFNlPTUxMjYsRWU9Sig4LGZ1bmN0aW9uKCl7cmV0dXJuW119KSxMZT17YWxsb2M6JCxmcmVlOnR0LGFsbG9jVHlwZTpldCxmcmVlVHlwZTpydH0sQ2U9e3NoYXBlOmx0LGZsYXR0ZW46c3R9LHplPXtpbnQ4OjUxMjAsaW50MTY6NTEyMixpbnQzMjo1MTI0LHVpbnQ4OjUxMjEsdWludDE2OjUxMjMsdWludDMyOjUxMjUsZmxvYXQ6NTEyNixmbG9hdDMyOjUxMjZ9LEllPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LERlPUNlLmZsYXR0ZW4sUGU9Q2Uuc2hhcGUsT2U9MzUwNDQsUmU9MzUwNDAsRmU9NTEyMSxqZT01MTI2LE5lPVtdO05lWzUxMjBdPTEsTmVbNTEyMl09MixOZVs1MTI0XT00LE5lWzUxMjFdPTEsTmVbNTEyM109MixOZVs1MTI1XT00LE5lWzUxMjZdPTQ7dmFyIEJlPXtwb2ludHM6MCxwb2ludDowLGxpbmVzOjEsbGluZToxLHRyaWFuZ2xlczo0LHRyaWFuZ2xlOjQsImxpbmUgbG9vcCI6MiwibGluZSBzdHJpcCI6MywidHJpYW5nbGUgc3RyaXAiOjUsInRyaWFuZ2xlIGZhbiI6Nn0sVWU9MCxWZT0xLEhlPTQscWU9NTEyMCxHZT01MTIxLFllPTUxMjIsWGU9NTEyMyxXZT01MTI0LFplPTUxMjUsSmU9MzQ5NjMsS2U9MzUwNDAsUWU9MzUwNDQsJGU9bmV3IEZsb2F0MzJBcnJheSgxKSx0cj1uZXcgVWludDMyQXJyYXkoJGUuYnVmZmVyKSxlcj01MTIzLHJyPTM0NDY3LG5yPTM1NTMsaXI9MzQwNjcsYXI9MzQwNjksb3I9NjQwOCxzcj02NDA2LGxyPTY0MDcsdXI9NjQwOSxjcj02NDEwLGhyPTMyODU0LGZyPTMyODU1LGRyPTM2MTk0LHByPTMyODE5LG1yPTMyODIwLHZyPTMzNjM1LGdyPTM0MDQyLHlyPTY0MDIsYnI9MzQwNDEseHI9MzU5MDQsX3I9MzU5MDYsd3I9MzYxOTMsTXI9MzM3NzYsa3I9MzM3NzcsQXI9MzM3NzgsVHI9MzM3NzksU3I9MzU5ODYsRXI9MzU5ODcsTHI9MzQ3OTgsQ3I9MzU4NDAsenI9MzU4NDEsSXI9MzU4NDIsRHI9MzU4NDMsUHI9MzYxOTYsT3I9NTEyMSxScj01MTIzLEZyPTUxMjUsanI9NTEyNixOcj0xMDI0MixCcj0xMDI0MyxVcj0xMDQ5NyxWcj0zMzA3MSxIcj0zMzY0OCxxcj0xMDI0MCxHcj0xMDI0MSxZcj05NzI4LFhyPTk3MjksV3I9OTk4NCxacj05OTg1LEpyPTk5ODYsS3I9OTk4NyxRcj0zMzE3MCwkcj00MzUyLHRuPTQzNTMsZW49NDM1NCxybj0zNDA0Nixubj0zMzE3LGFuPTM3NDQwLG9uPTM3NDQxLHNuPTM3NDQzLGxuPTM3NDQ0LHVuPTMzOTg0LGNuPVtXcixKcixacixLcl0saG49WzAsdXIsY3IsbHIsb3JdLGZuPXt9O2ZuW3VyXT1mbltzcl09Zm5beXJdPTEsZm5bYnJdPWZuW2NyXT0yLGZuW2xyXT1mblt4cl09Myxmbltvcl09Zm5bX3JdPTQ7dmFyIGRuPXZ0KCJIVE1MQ2FudmFzRWxlbWVudCIpLHBuPXZ0KCJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiKSxtbj12dCgiSFRNTEltYWdlRWxlbWVudCIpLHZuPXZ0KCJIVE1MVmlkZW9FbGVtZW50IiksZ249T2JqZWN0LmtleXMoS3QpLmNvbmNhdChbZG4scG4sbW4sdm5dKSx5bj1bXTt5bltPcl09MSx5bltqcl09NCx5blt3cl09Mix5bltScl09Mix5bltGcl09NDt2YXIgYm49W107Ym5baHJdPTIsYm5bZnJdPTIsYm5bZHJdPTIsYm5bYnJdPTQsYm5bTXJdPS41LGJuW2tyXT0uNSxibltBcl09MSxibltUcl09MSxibltTcl09LjUsYm5bRXJdPTEsYm5bTHJdPTEsYm5bQ3JdPS41LGJuW3pyXT0uMjUsYm5bSXJdPS41LGJuW0RyXT0uMjUsYm5bUHJdPS41O3ZhciB4bj0zNjE2MSxfbj0zMjg1NCx3bj1bXTt3bltfbl09Mix3blszMjg1NV09Mix3blszNjE5NF09Mix3blszMzE4OV09Mix3blszNjE2OF09MSx3blszNDA0MV09NCx3blszNTkwN109NCx3blszNDgzNl09MTYsd25bMzQ4NDJdPTgsd25bMzQ4NDNdPTY7dmFyIE1uPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWgrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD1fbix0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCxpLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBvKGUpe3ZhciByPWUucmVuZGVyYnVmZmVyO2RlKHIsIm11c3Qgbm90IGRvdWJsZSBkZXN0cm95IHJlbmRlcmJ1ZmZlciIpLHQuYmluZFJlbmRlcmJ1ZmZlcih4bixudWxsKSx0LmRlbGV0ZVJlbmRlcmJ1ZmZlcihyKSxlLnJlbmRlcmJ1ZmZlcj1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgZltlLmlkXSxuLnJlbmRlcmJ1ZmZlckNvdW50LS19ZnVuY3Rpb24gcyhlLG8pe2Z1bmN0aW9uIHMoZSxuKXt2YXIgYT0wLG89MCxsPV9uO2lmKCJvYmplY3QiPT10eXBlb2YgZSYmZSl7dmFyIGY9ZTtpZigic2hhcGUiaW4gZil7dmFyIGQ9Zi5zaGFwZTtkZShBcnJheS5pc0FycmF5KGQpJiZkLmxlbmd0aD49MiwiaW52YWxpZCByZW5kZXJidWZmZXIgc2hhcGUiKSxhPTB8ZFswXSxvPTB8ZFsxXX1lbHNlInJhZGl1cyJpbiBmJiYoYT1vPTB8Zi5yYWRpdXMpLCJ3aWR0aCJpbiBmJiYoYT0wfGYud2lkdGgpLCJoZWlnaHQiaW4gZiYmKG89MHxmLmhlaWdodCk7ImZvcm1hdCJpbiBmJiYoZGUucGFyYW1ldGVyKGYuZm9ybWF0LHUsImludmFsaWQgcmVuZGVyYnVmZmVyIGZvcm1hdCIpLGw9dVtmLmZvcm1hdF0pfWVsc2UibnVtYmVyIj09dHlwZW9mIGU/KGE9MHxlLG89Im51bWJlciI9PXR5cGVvZiBuPzB8bjphKTplP2RlLnJhaXNlKCJpbnZhbGlkIGFyZ3VtZW50cyB0byByZW5kZXJidWZmZXIgY29uc3RydWN0b3IiKTphPW89MTtpZihkZShhPjAmJm8+MCYmYTw9ci5tYXhSZW5kZXJidWZmZXJTaXplJiZvPD1yLm1heFJlbmRlcmJ1ZmZlclNpemUsImludmFsaWQgcmVuZGVyYnVmZmVyIHNpemUiKSxhIT09aC53aWR0aHx8byE9PWguaGVpZ2h0fHxsIT09aC5mb3JtYXQpcmV0dXJuIHMud2lkdGg9aC53aWR0aD1hLHMuaGVpZ2h0PWguaGVpZ2h0PW8saC5mb3JtYXQ9bCx0LmJpbmRSZW5kZXJidWZmZXIoeG4saC5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh4bixsLGEsbyksaS5wcm9maWxlJiYoaC5zdGF0cy5zaXplPUl0KGguZm9ybWF0LGgud2lkdGgsaC5oZWlnaHQpKSxzLmZvcm1hdD1jW2guZm9ybWF0XSxzfWZ1bmN0aW9uIGwoZSxuKXt2YXIgYT0wfGUsbz0wfG58fGE7cmV0dXJuIGE9PT1oLndpZHRoJiZvPT09aC5oZWlnaHQ/czooZGUoYT4wJiZvPjAmJmE8PXIubWF4UmVuZGVyYnVmZmVyU2l6ZSYmbzw9ci5tYXhSZW5kZXJidWZmZXJTaXplLCJpbnZhbGlkIHJlbmRlcmJ1ZmZlciBzaXplIikscy53aWR0aD1oLndpZHRoPWEscy5oZWlnaHQ9aC5oZWlnaHQ9byx0LmJpbmRSZW5kZXJidWZmZXIoeG4saC5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSh4bixoLmZvcm1hdCxhLG8pLGkucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1JdChoLmZvcm1hdCxoLndpZHRoLGguaGVpZ2h0KSkscyl9dmFyIGg9bmV3IGEodC5jcmVhdGVSZW5kZXJidWZmZXIoKSk7cmV0dXJuIGZbaC5pZF09aCxuLnJlbmRlcmJ1ZmZlckNvdW50KysscyhlLG8pLHMucmVzaXplPWwscy5fcmVnbFR5cGU9InJlbmRlcmJ1ZmZlciIscy5fcmVuZGVyYnVmZmVyPWgsaS5wcm9maWxlJiYocy5zdGF0cz1oLnN0YXRzKSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtoLmRlY1JlZigpfSxzfWZ1bmN0aW9uIGwoKXt4ZShmKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKHhuLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoeG4sZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSx0LmJpbmRSZW5kZXJidWZmZXIoeG4sbnVsbCl9dmFyIHU9e3JnYmE0Ol9uLHJnYjU2NTozNjE5NCwicmdiNSBhMSI6MzI4NTUsZGVwdGg6MzMxODksc3RlbmNpbDozNjE2OCwiZGVwdGggc3RlbmNpbCI6MzQwNDF9O2UuZXh0X3NyZ2ImJih1LnNyZ2JhPTM1OTA3KSxlLmV4dF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCYmKHUucmdiYTE2Zj0zNDg0Mix1LnJnYjE2Zj0zNDg0MyksZS53ZWJnbF9jb2xvcl9idWZmZXJfZmxvYXQmJih1LnJnYmEzMmY9MzQ4MzYpO3ZhciBjPVtdO09iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtjW2VdPXR9KTt2YXIgaD0wLGY9e307cmV0dXJuIGEucHJvdG90eXBlLmRlY1JlZj1mdW5jdGlvbigpey0tdGhpcy5yZWZDb3VudDw9MCYmbyh0aGlzKX0saS5wcm9maWxlJiYobi5nZXRUb3RhbFJlbmRlcmJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QrPWZbZV0uc3RhdHMuc2l6ZX0pLHR9KSx7Y3JlYXRlOnMsY2xlYXI6ZnVuY3Rpb24oKXt4ZShmKS5mb3JFYWNoKG8pfSxyZXN0b3JlOmx9fSxrbj0zNjE2MCxBbj0zNjE2MSxUbj0zNTUzLFNuPTM0MDY5LEVuPTM2MDY0LExuPTM2MDk2LENuPTM2MTI4LHpuPTMzMzA2LEluPTM2MDUzLERuPTY0MDIsUG49WzY0MDhdLE9uPVtdO09uWzY0MDhdPTQ7dmFyIFJuPVtdO1JuWzUxMjFdPTEsUm5bNTEyNl09NCxSblszNjE5M109Mjt2YXIgRm49MzMxODksam49MzYxNjgsTm49MzQwNDEsQm49WzMyODU0LDMyODU1LDM2MTk0LDM1OTA3LDM0ODQyLDM0ODQzLDM0ODM2XSxVbj17fTtVbltJbl09ImNvbXBsZXRlIixVblszNjA1NF09ImluY29tcGxldGUgYXR0YWNobWVudCIsVW5bMzYwNTddPSJpbmNvbXBsZXRlIGRpbWVuc2lvbnMiLFVuWzM2MDU1XT0iaW5jb21wbGV0ZSwgbWlzc2luZyBhdHRhY2htZW50IixVblszNjA2MV09InVuc3VwcG9ydGVkIjt2YXIgVm49NTEyNixIbj0zNTYzMixxbj0zNTYzMyxHbj0zNTcxOCxZbj0zNTcyMSxYbj02NDA4LFduPTUxMjEsWm49MzMzMyxKbj01MTI2LEtuPSJ4eXp3Ii5zcGxpdCgiIiksUW49NTEyMSwkbj0xLHRpPTIsZWk9MCxyaT0xLG5pPTIsaWk9MyxhaT00LG9pPSJkaXRoZXIiLHNpPSJibGVuZC5lbmFibGUiLGxpPSJibGVuZC5jb2xvciIsdWk9ImJsZW5kLmVxdWF0aW9uIixjaT0iYmxlbmQuZnVuYyIsaGk9ImRlcHRoLmVuYWJsZSIsZmk9ImRlcHRoLmZ1bmMiLGRpPSJkZXB0aC5yYW5nZSIscGk9ImRlcHRoLm1hc2siLG1pPSJjb2xvck1hc2siLHZpPSJjdWxsLmVuYWJsZSIsZ2k9ImN1bGwuZmFjZSIseWk9ImZyb250RmFjZSIsYmk9ImxpbmVXaWR0aCIseGk9InBvbHlnb25PZmZzZXQuZW5hYmxlIixfaT0icG9seWdvbk9mZnNldC5vZmZzZXQiLHdpPSJzYW1wbGUuYWxwaGEiLE1pPSJzYW1wbGUuZW5hYmxlIixraT0ic2FtcGxlLmNvdmVyYWdlIixBaT0ic3RlbmNpbC5lbmFibGUiLFRpPSJzdGVuY2lsLm1hc2siLFNpPSJzdGVuY2lsLmZ1bmMiLEVpPSJzdGVuY2lsLm9wRnJvbnQiLExpPSJzdGVuY2lsLm9wQmFjayIsQ2k9InNjaXNzb3IuZW5hYmxlIix6aT0ic2Npc3Nvci5ib3giLElpPSJ2aWV3cG9ydCIsRGk9InByb2ZpbGUiLFBpPSJmcmFtZWJ1ZmZlciIsT2k9InZlcnQiLFJpPSJmcmFnIixGaT0iZWxlbWVudHMiLGppPSJwcmltaXRpdmUiLE5pPSJjb3VudCIsQmk9Im9mZnNldCIsVWk9Imluc3RhbmNlcyIsVmk9UGkrIldpZHRoIixIaT1QaSsiSGVpZ2h0IixxaT1JaSsiV2lkdGgiLEdpPUlpKyJIZWlnaHQiLFlpPSJkcmF3aW5nQnVmZmVyV2lkdGgiLFhpPSJkcmF3aW5nQnVmZmVySGVpZ2h0IixXaT1bY2ksdWksU2ksRWksTGksa2ksSWksemksX2ldLFppPTM0OTYyLEppPTM0OTYzLEtpPTM1NTMsUWk9MzQwNjcsJGk9Mjg4NCx0YT0zMDQyLGVhPTMwMjQscmE9Mjk2MCxuYT0yOTI5LGlhPTMwODksYWE9MzI4MjMsb2E9MzI5MjYsc2E9MzI5MjgsbGE9NTEyNix1YT0zNTY2NCxjYT0zNTY2NSxoYT0zNTY2NixmYT01MTI0LGRhPTM1NjY3LHBhPTM1NjY4LG1hPTM1NjY5LHZhPTM1NjcwLGdhPTM1NjcxLHlhPTM1NjcyLGJhPTM1NjczLHhhPTM1Njc0LF9hPTM1Njc1LHdhPTM1Njc2LE1hPTM1Njc4LGthPTM1NjgwLEFhPTQsVGE9MTAyOCxTYT0xMDI5LEVhPTIzMDQsTGE9MjMwNSxDYT0zMjc3NSx6YT0zMjc3NixJYT01MTksRGE9NzY4MCxQYT0wLE9hPTEsUmE9MzI3NzQsRmE9NTEzLGphPTM2MTYwLE5hPTM2MDY0LEJhPXswOjAsMToxLHplcm86MCxvbmU6MSwic3JjIGNvbG9yIjo3NjgsIm9uZSBtaW51cyBzcmMgY29sb3IiOjc2OSwic3JjIGFscGhhIjo3NzAsIm9uZSBtaW51cyBzcmMgYWxwaGEiOjc3MSwiZHN0IGNvbG9yIjo3NzQsIm9uZSBtaW51cyBkc3QgY29sb3IiOjc3NSwiZHN0IGFscGhhIjo3NzIsIm9uZSBtaW51cyBkc3QgYWxwaGEiOjc3MywiY29uc3RhbnQgY29sb3IiOjMyNzY5LCJvbmUgbWludXMgY29uc3RhbnQgY29sb3IiOjMyNzcwLCJjb25zdGFudCBhbHBoYSI6MzI3NzEsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSI6MzI3NzIsInNyYyBhbHBoYSBzYXR1cmF0ZSI6Nzc2fSxVYT1bImNvbnN0YW50IGNvbG9yLCBjb25zdGFudCBhbHBoYSIsIm9uZSBtaW51cyBjb25zdGFudCBjb2xvciwgY29uc3RhbnQgYWxwaGEiLCJjb25zdGFudCBjb2xvciwgb25lIG1pbnVzIGNvbnN0YW50IGFscGhhIiwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yLCBvbmUgbWludXMgY29uc3RhbnQgYWxwaGEiLCJjb25zdGFudCBhbHBoYSwgY29uc3RhbnQgY29sb3IiLCJjb25zdGFudCBhbHBoYSwgb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIiwib25lIG1pbnVzIGNvbnN0YW50IGFscGhhLCBjb25zdGFudCBjb2xvciIsIm9uZSBtaW51cyBjb25zdGFudCBhbHBoYSwgb25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIl0sVmE9e25ldmVyOjUxMixsZXNzOjUxMywiPCI6NTEzLGVxdWFsOjUxNCwiPSI6NTE0LCI9PSI6NTE0LCI9PT0iOjUxNCxsZXF1YWw6NTE1LCI8PSI6NTE1LGdyZWF0ZXI6NTE2LCI+Ijo1MTYsbm90ZXF1YWw6NTE3LCIhPSI6NTE3LCIhPT0iOjUxNyxnZXF1YWw6NTE4LCI+PSI6NTE4LGFsd2F5czo1MTl9LEhhPXswOjAsemVybzowLGtlZXA6NzY4MCxyZXBsYWNlOjc2ODEsaW5jcmVtZW50Ojc2ODIsZGVjcmVtZW50Ojc2ODMsImluY3JlbWVudCB3cmFwIjozNDA1NSwiZGVjcmVtZW50IHdyYXAiOjM0MDU2LGludmVydDo1Mzg2fSxxYT17ZnJhZzozNTYzMix2ZXJ0OjM1NjMzfSxHYT17Y3c6RWEsY2N3OkxhfSxZYT1uZXcgSHQoITEsITEsITEsZnVuY3Rpb24oKXt9KSxYYT0zNDkxOCxXYT0zNDkxOSxaYT0zNTAwNyxKYT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gZi5wb3AoKXx8aC5jcmVhdGVRdWVyeUVYVCgpfWZ1bmN0aW9uIG4odCl7Zi5wdXNoKHQpfWZ1bmN0aW9uIGkodCl7dmFyIGU9cigpO2guYmVnaW5RdWVyeUVYVChaYSxlKSxkLnB1c2goZSksdShkLmxlbmd0aC0xLGQubGVuZ3RoLHQpfWZ1bmN0aW9uIGEoKXtoLmVuZFF1ZXJ5RVhUKFphKX1mdW5jdGlvbiBvKCl7dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5lbmRRdWVyeUluZGV4PS0xLHRoaXMuc3VtPTAsdGhpcy5zdGF0cz1udWxsfWZ1bmN0aW9uIHMoKXtyZXR1cm4gcC5wb3AoKXx8bmV3IG99ZnVuY3Rpb24gbCh0KXtwLnB1c2godCl9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG49cygpO24uc3RhcnRRdWVyeUluZGV4PXQsbi5lbmRRdWVyeUluZGV4PWUsbi5zdW09MCxuLnN0YXRzPXIsbS5wdXNoKG4pfWZ1bmN0aW9uIGMoKXt2YXIgdCxlLHI9ZC5sZW5ndGg7aWYoMCE9PXIpe2cubGVuZ3RoPU1hdGgubWF4KGcubGVuZ3RoLHIrMSksdi5sZW5ndGg9TWF0aC5tYXgodi5sZW5ndGgscisxKSx2WzBdPTAsZ1swXT0wO3ZhciBpPTA7Zm9yKHQ9MCxlPTA7ZTxkLmxlbmd0aDsrK2Upe3ZhciBhPWRbZV07aC5nZXRRdWVyeU9iamVjdEVYVChhLFdhKT8oaSs9aC5nZXRRdWVyeU9iamVjdEVYVChhLFhhKSxuKGEpKTpkW3QrK109YSx2W2UrMV09aSxnW2UrMV09dH1mb3IoZC5sZW5ndGg9dCx0PTAsZT0wO2U8bS5sZW5ndGg7KytlKXt2YXIgbz1tW2VdLHM9by5zdGFydFF1ZXJ5SW5kZXgsdT1vLmVuZFF1ZXJ5SW5kZXg7by5zdW0rPXZbdV0tdltzXTt2YXIgYz1nW3NdLGY9Z1t1XTtmPT09Yz8oby5zdGF0cy5ncHVUaW1lKz1vLnN1bS8xZTYsbChvKSk6KG8uc3RhcnRRdWVyeUluZGV4PWMsby5lbmRRdWVyeUluZGV4PWYsbVt0KytdPW8pfW0ubGVuZ3RoPXR9fXZhciBoPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5O2lmKCFoKXJldHVybiBudWxsO3ZhciBmPVtdLGQ9W10scD1bXSxtPVtdLHY9W10sZz1bXTtyZXR1cm57YmVnaW5RdWVyeTppLGVuZFF1ZXJ5OmEscHVzaFNjb3BlU3RhdHM6dSx1cGRhdGU6YyxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBkLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtmLnB1c2guYXBwbHkoZixkKTtmb3IodmFyIHQ9MDt0PGYubGVuZ3RoO3QrKyloLmRlbGV0ZVF1ZXJ5RVhUKGZbdF0pO2QubGVuZ3RoPTAsZi5sZW5ndGg9MH0scmVzdG9yZTpmdW5jdGlvbigpe2QubGVuZ3RoPTAsZi5sZW5ndGg9MH19fSxLYT0xNjM4NCxRYT0yNTYsJGE9MTAyNCx0bz0zNDk2Mixlbz0id2ViZ2xjb250ZXh0bG9zdCIscm89IndlYmdsY29udGV4dHJlc3RvcmVkIixubz0xLGlvPTIsYW89MztyZXR1cm4gSnR9KX0se31dLDQ5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4cGVjdGVkIGEgc3RyaW5nIik7aWYoMT09PWUpcmV0dXJuIHQ7aWYoMj09PWUpcmV0dXJuIHQrdDt2YXIgcj10Lmxlbmd0aCplO2lmKGkhPT10fHx2b2lkIDA9PT1pKWk9dCxhPSIiO2Vsc2UgaWYoYS5sZW5ndGg+PXIpcmV0dXJuIGEuc3Vic3RyKDAscik7Zm9yKDtyPmEubGVuZ3RoJiZlPjE7KTEmZSYmKGErPXQpLGU+Pj0xLHQrPXQ7cmV0dXJuIGErPXQsYT1hLnN1YnN0cigwLHIpfXZhciBpLGE9IiI7ZS5leHBvcnRzPW59LHt9XSw0OTk6W2Z1bmN0aW9uKGUscixuKXshZnVuY3Rpb24oZSxpKXsiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5hbWQ/dChpKToib2JqZWN0Ij09dHlwZW9mIG4/ci5leHBvcnRzPWkoKTplLnJlc29sdmVVcmw9aSgpfSh0aGlzLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJyZXNvbHZlVXJsIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudDsgZ290IG5vbmUuIik7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYmFzZSIpO2lmKGUuaHJlZj1hcmd1bWVudHNbMF0sMT09PXQpcmV0dXJuIGUuaHJlZjt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO3IuaW5zZXJ0QmVmb3JlKGUsci5maXJzdENoaWxkKTtmb3IodmFyIG4saT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksYT0xO2E8dDthKyspaS5ocmVmPWFyZ3VtZW50c1thXSxuPWkuaHJlZixlLmhyZWY9bjtyZXR1cm4gci5yZW1vdmVDaGlsZChlKSxufXJldHVybiB0fSl9LHt9XSw1MDA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9dFt0Lmxlbmd0aC0xXSxuPWUsaT1lLTI7aT49MDstLWkpe3ZhciBhPXIsbz10W2ldO3I9YStvO3ZhciBzPXItYSxsPW8tcztsJiYodFstLW5dPXIscj1sKX1mb3IodmFyIHU9MCxpPW47aTxlOysraSl7dmFyIGE9dFtpXSxvPXI7cj1hK287dmFyIHM9ci1hLGw9by1zO2wmJih0W3UrK109bCl9cmV0dXJuIHRbdSsrXT1yLHQubGVuZ3RoPXUsdH1lLmV4cG9ydHM9bn0se31dLDUwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm1bIixyLCJdWyIsbiwiXSJdLmpvaW4oIiIpfXJldHVybiBlfWZ1bmN0aW9uIGEodCl7cmV0dXJuIDEmdD8iLSI6IiJ9ZnVuY3Rpb24gbyh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsbyh0LnNsaWNlKDAsZSkpLCIsIixvKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gcyh0KXtpZigyPT09dC5sZW5ndGgpcmV0dXJuWyJzdW0ocHJvZCgiLHRbMF1bMF0sIiwiLHRbMV1bMV0sIikscHJvZCgtIix0WzBdWzFdLCIsIix0WzFdWzBdLCIpKSJdLmpvaW4oIiIpO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixzKG4odCxyKSksIiwiLGEociksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gbyhlKX1mdW5jdGlvbiBsKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oInN1bSIsInNjYWxlIiwicHJvZCIsImNvbXByZXNzIixbImZ1bmN0aW9uIHJvYnVzdERldGVybWluYW50Iix0LCIobSl7cmV0dXJuIGNvbXByZXNzKCIscyhpKHQpKSwiKX07cmV0dXJuIHJvYnVzdERldGVybWluYW50Iix0XS5qb2luKCIiKSkoYyxoLHUsZil9dmFyIHU9dCgidHdvLXByb2R1Y3QiKSxjPXQoInJvYnVzdC1zdW0iKSxoPXQoInJvYnVzdC1zY2FsZSIpLGY9dCgicm9idXN0LWNvbXByZXNzIiksZD02LHA9W2Z1bmN0aW9uKCl7cmV0dXJuWzBdfSxmdW5jdGlvbih0KXtyZXR1cm5bdFswXVswXV19XTshZnVuY3Rpb24oKXtmb3IoO3AubGVuZ3RoPGQ7KXAucHVzaChsKHAubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJmdW5jdGlvbiByb2J1c3REZXRlcm1pbmFudChtKXtzd2l0Y2gobS5sZW5ndGgpeyJdLG49MDtuPGQ7KytuKXQucHVzaCgiZGV0IituKSxyLnB1c2goImNhc2UgIixuLCI6cmV0dXJuIGRldCIsbiwiKG0pOyIpO3IucHVzaCgifXZhciBkZXQ9Q0FDSEVbbS5sZW5ndGhdO2lmKCFkZXQpZGV0PUNBQ0hFW20ubGVuZ3RoXT1nZW4obS5sZW5ndGgpO3JldHVybiBkZXQobSk7fXJldHVybiByb2J1c3REZXRlcm1pbmFudCIpLHQucHVzaCgiQ0FDSEUiLCJnZW4iLHIuam9pbigiIikpO3ZhciBpPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtlLmV4cG9ydHM9aS5hcHBseSh2b2lkIDAscC5jb25jYXQoW3AsbF0pKTtmb3IodmFyIG49MDtuPHAubGVuZ3RoOysrbillLmV4cG9ydHNbbl09cFtuXX0oKX0seyJyb2J1c3QtY29tcHJlc3MiOjUwMSwicm9idXN0LXNjYWxlIjo1MDgsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPWkodFswXSxlWzBdKSxuPTE7bjx0Lmxlbmd0aDsrK24pcj1hKHIsaSh0W25dLGVbbl0pKTtyZXR1cm4gcn12YXIgaT10KCJ0d28tcHJvZHVjdCIpLGE9dCgicm9idXN0LXN1bSIpO2UuZXhwb3J0cz1ufSx7InJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxuPTE7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXJbbi0xXT1uZXcgQXJyYXkodC5sZW5ndGgtMSksYT0wLG89MDthPHQubGVuZ3RoOysrYSlhIT09ZSYmKGlbbysrXT10W25dW2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDsrK3Ipe2Vbcl09bmV3IEFycmF5KHQpO2Zvcih2YXIgbj0wO248dDsrK24pZVtyXVtuXT1bIm0iLG4sIlsiLHQtci0yLCJdIl0uam9pbigiIil9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIHRbMF07aWYoMj09PXQubGVuZ3RoKXJldHVyblsic3VtKCIsdFswXSwiLCIsdFsxXSwiKSJdLmpvaW4oIiIpO3ZhciBlPXQubGVuZ3RoPj4xO3JldHVyblsic3VtKCIsYSh0LnNsaWNlKDAsZSkpLCIsIixhKHQuc2xpY2UoZSkpLCIpIl0uam9pbigiIil9ZnVuY3Rpb24gbyh0LGUpe2lmKCJtIj09PXQuY2hhckF0KDApKXtpZigidyI9PT1lLmNoYXJBdCgwKSl7dmFyIHI9dC5zcGxpdCgiWyIpO3JldHVyblsidyIsZS5zdWJzdHIoMSksIm0iLHJbMF0uc3Vic3RyKDEpXS5qb2luKCIiKX1yZXR1cm5bInByb2QoIix0LCIsIixlLCIpIl0uam9pbigiIil9cmV0dXJuIG8oZSx0KX1mdW5jdGlvbiBzKHQpe3JldHVybiEwJnQ/Ii0iOiIifWZ1bmN0aW9uIGwodCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbImRpZmYoIixvKHRbMF1bMF0sdFsxXVsxXSksIiwiLG8odFsxXVswXSx0WzBdWzFdKSwiKSJdLmpvaW4oIiIpXTtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaChbInNjYWxlKCIsYShsKG4odCxyKSkpLCIsIixzKHIpLHRbMF1bcl0sIikiXS5qb2luKCIiKSk7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxlLTI7KytuKXIucHVzaChbInByb2QobSIsdCwiWyIsbiwiXSxtIix0LCJbIixuLCJdKSJdLmpvaW4oIiIpKTtyZXR1cm4gYShyKX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT1bXSxyPVtdLG89aSh0KSxzPTA7czx0OysrcylvWzBdW3NdPSIxIixvW3QtMV1bc109InciK3M7Zm9yKHZhciBzPTA7czx0OysrcykwPT0oMSZzKT9lLnB1c2guYXBwbHkoZSxsKG4obyxzKSkpOnIucHVzaC5hcHBseShyLGwobihvLHMpKSk7Zm9yKHZhciBjPWEoZSksaD1hKHIpLGY9ImV4YWN0SW5TcGhlcmUiK3QsZD1bXSxzPTA7czx0OysrcylkLnB1c2goIm0iK3MpO2Zvcih2YXIgcD1bImZ1bmN0aW9uICIsZiwiKCIsZC5qb2luKCksIil7Il0scz0wO3M8dDsrK3Mpe3AucHVzaCgidmFyIHciLHMsIj0iLHUocyx0KSwiOyIpO2Zvcih2YXIgYj0wO2I8dDsrK2IpYiE9PXMmJnAucHVzaCgidmFyIHciLHMsIm0iLGIsIj1zY2FsZSh3IixzLCIsbSIsYiwiWzBdKTsiKX1yZXR1cm4gcC5wdXNoKCJ2YXIgcD0iLGMsIixuPSIsaCwiLGQ9ZGlmZihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO31yZXR1cm4gIixmKSxuZXcgRnVuY3Rpb24oInN1bSIsImRpZmYiLCJwcm9kIiwic2NhbGUiLHAuam9pbigiIikpKHYsZyxtLHkpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gMH1mdW5jdGlvbiBmKCl7cmV0dXJuIDB9ZnVuY3Rpb24gZCgpe3JldHVybiAwfWZ1bmN0aW9uIHAodCl7dmFyIGU9eFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXhbdC5sZW5ndGhdPWModC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX12YXIgbT10KCJ0d28tcHJvZHVjdCIpLHY9dCgicm9idXN0LXN1bSIpLGc9dCgicm9idXN0LXN1YnRyYWN0IikseT10KCJyb2J1c3Qtc2NhbGUiKSxiPTYseD1baCxmLGRdOyFmdW5jdGlvbigpe2Zvcig7eC5sZW5ndGg8PWI7KXgucHVzaChjKHgubGVuZ3RoKSk7Zm9yKHZhciB0PVtdLHI9WyJzbG93Il0sbj0wO248PWI7KytuKXQucHVzaCgiYSIrbiksci5wdXNoKCJvIituKTtmb3IodmFyIGk9WyJmdW5jdGlvbiB0ZXN0SW5TcGhlcmUoIix0LmpvaW4oKSwiKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gMDsiXSxuPTI7bjw9YjsrK24paS5wdXNoKCJjYXNlICIsbiwiOnJldHVybiBvIixuLCIoIix0LnNsaWNlKDAsbikuam9pbigpLCIpOyIpO2kucHVzaCgifXZhciBzPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXtzW2ldPWFyZ3VtZW50c1tpXX07cmV0dXJuIHNsb3cocyk7fXJldHVybiB0ZXN0SW5TcGhlcmUiKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2UuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbcF0uY29uY2F0KHgpKTtmb3IodmFyIG49MDtuPD1iOysrbillLmV4cG9ydHNbbl09eFtuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUwOCwicm9idXN0LXN1YnRyYWN0Ijo1MTAsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0icm9idXN0TGluZWFyU29sdmUiK3QrImQiLHI9WyJmdW5jdGlvbiAiLGUsIihBLGIpe3JldHVybiBbIl0sbj0wO248dDsrK24pe3IucHVzaCgiZGV0KFsiKTtmb3IodmFyIGk9MDtpPHQ7KytpKXtpPjAmJnIucHVzaCgiLCIpLHIucHVzaCgiWyIpO2Zvcih2YXIgYT0wO2E8dDsrK2EpYT4wJiZyLnB1c2goIiwiKSxhPT09bj9yLnB1c2goIitiWyIsaSwiXSIpOnIucHVzaCgiK0FbIixpLCJdWyIsYSwiXSIpO3IucHVzaCgiXSIpfXIucHVzaCgiXSksIil9ci5wdXNoKCJkZXQoQSldfXJldHVybiAiLGUpO3ZhciBzPW5ldyBGdW5jdGlvbigiZGV0IixyLmpvaW4oIiIpKTtyZXR1cm4gcyh0PDY/b1t0XTpvKX1mdW5jdGlvbiBpKCl7cmV0dXJuWzBdfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bW2VbMF1dLFt0WzBdWzBdXV19dmFyIG89dCgicm9idXN0LWRldGVybWluYW50Iikscz02LGw9W2ksYV07IWZ1bmN0aW9uKCl7Zm9yKDtsLmxlbmd0aDxzOylsLnB1c2gobihsLmxlbmd0aCkpO2Zvcih2YXIgdD1bXSxyPVsiZnVuY3Rpb24gZGlzcGF0Y2hMaW5lYXJTb2x2ZShBLGIpe3N3aXRjaChBLmxlbmd0aCl7Il0saT0wO2k8czsrK2kpdC5wdXNoKCJzIitpKSxyLnB1c2goImNhc2UgIixpLCI6cmV0dXJuIHMiLGksIihBLGIpOyIpO3IucHVzaCgifXZhciBzPUNBQ0hFW0EubGVuZ3RoXTtpZighcylzPUNBQ0hFW0EubGVuZ3RoXT1nKEEubGVuZ3RoKTtyZXR1cm4gcyhBLGIpfXJldHVybiBkaXNwYXRjaExpbmVhclNvbHZlIiksdC5wdXNoKCJDQUNIRSIsImciLHIuam9pbigiIikpO3ZhciBhPUZ1bmN0aW9uLmFwcGx5KHZvaWQgMCx0KTtlLmV4cG9ydHM9YS5hcHBseSh2b2lkIDAsbC5jb25jYXQoW2wsbl0pKTtmb3IodmFyIGk9MDtpPHM7KytpKWUuZXhwb3J0c1tpXT1sW2ldfSgpfSx7InJvYnVzdC1kZXRlcm1pbmFudCI6NTAyfV0sNTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoLTEpLG49MTtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9cltuLTFdPW5ldyBBcnJheSh0Lmxlbmd0aC0xKSxhPTAsbz0wO2E8dC5sZW5ndGg7KythKWEhPT1lJiYoaVtvKytdPXRbbl1bYV0pO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0Oysrcil7ZVtyXT1uZXcgQXJyYXkodCk7Zm9yKHZhciBuPTA7bjx0OysrbillW3JdW25dPVsibSIsbiwiWyIsdC1yLTEsIl0iXS5qb2luKCIiKX1yZXR1cm4gZX1mdW5jdGlvbiBhKHQpe3JldHVybiAxJnQ/Ii0iOiIifWZ1bmN0aW9uIG8odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybiB0WzBdO2lmKDI9PT10Lmxlbmd0aClyZXR1cm5bInN1bSgiLHRbMF0sIiwiLHRbMV0sIikiXS5qb2luKCIiKTt2YXIgZT10Lmxlbmd0aD4+MTtyZXR1cm5bInN1bSgiLG8odC5zbGljZSgwLGUpKSwiLCIsbyh0LnNsaWNlKGUpKSwiKSJdLmpvaW4oIiIpfWZ1bmN0aW9uIHModCl7aWYoMj09PXQubGVuZ3RoKXJldHVybltbInN1bShwcm9kKCIsdFswXVswXSwiLCIsdFsxXVsxXSwiKSxwcm9kKC0iLHRbMF1bMV0sIiwiLHRbMV1bMF0sIikpIl0uam9pbigiIildO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKFsic2NhbGUoIixvKHMobih0LHIpKSksIiwiLGEociksdFswXVtyXSwiKSJdLmpvaW4oIiIpKTtyZXR1cm4gZX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXSxyPVtdLGE9aSh0KSxsPVtdLHU9MDt1PHQ7Kyt1KTA9PSgxJnUpP2UucHVzaC5hcHBseShlLHMobihhLHUpKSk6ci5wdXNoLmFwcGx5KHIscyhuKGEsdSkpKSxsLnB1c2goIm0iK3UpO3ZhciBwPW8oZSksbT1vKHIpLHY9Im9yaWVudGF0aW9uIit0KyJFeGFjdCIsZz1bImZ1bmN0aW9uICIsdiwiKCIsbC5qb2luKCksIil7dmFyIHA9IixwLCIsbj0iLG0sIixkPXN1YihwLG4pO3JldHVybiBkW2QubGVuZ3RoLTFdO307cmV0dXJuICIsdl0uam9pbigiIik7cmV0dXJuIG5ldyBGdW5jdGlvbigic3VtIiwicHJvZCIsInNjYWxlIiwic3ViIixnKShoLGMsZixkKX1mdW5jdGlvbiB1KHQpe3ZhciBlPWdbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1nW3QubGVuZ3RoXT1sKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9dmFyIGM9dCgidHdvLXByb2R1Y3QiKSxoPXQoInJvYnVzdC1zdW0iKSxmPXQoInJvYnVzdC1zY2FsZSIpLGQ9dCgicm9idXN0LXN1YnRyYWN0IikscD01LG09bCgzKSx2PWwoNCksZz1bZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24oKXtyZXR1cm4gMH0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSxmdW5jdGlvbih0LGUscil7dmFyIG4saT0odFsxXS1yWzFdKSooZVswXS1yWzBdKSxhPSh0WzBdLXJbMF0pKihlWzFdLXJbMV0pLG89aS1hO2lmKGk+MCl7aWYoYTw9MClyZXR1cm4gbztuPWkrYX1lbHNle2lmKCEoaTwwKSlyZXR1cm4gbztpZihhPj0wKXJldHVybiBvO249LShpK2EpfXZhciBzPTMuMzMwNjY5MDczODc1NDcxNmUtMTYqbjtyZXR1cm4gbz49c3x8bzw9LXM/bzptKHQsZSxyKX0sZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1uWzBdLGE9ZVswXS1uWzBdLG89clswXS1uWzBdLHM9dFsxXS1uWzFdLGw9ZVsxXS1uWzFdLHU9clsxXS1uWzFdLGM9dFsyXS1uWzJdLGg9ZVsyXS1uWzJdLGY9clsyXS1uWzJdLGQ9YSp1LHA9bypsLG09bypzLGc9aSp1LHk9aSpsLGI9YSpzLHg9YyooZC1wKStoKihtLWcpK2YqKHktYiksXz0oTWF0aC5hYnMoZCkrTWF0aC5hYnMocCkpKk1hdGguYWJzKGMpKyhNYXRoLmFicyhtKStNYXRoLmFicyhnKSkqTWF0aC5hYnMoaCkrKE1hdGguYWJzKHkpK01hdGguYWJzKGIpKSpNYXRoLmFicyhmKSx3PTcuNzcxNTYxMTcyMzc2MTAzZS0xNipfO3JldHVybiB4Pnd8fC14Pnc/eDp2KHQsZSxyLG4pfV07IWZ1bmN0aW9uKCl7Zm9yKDtnLmxlbmd0aDw9cDspZy5wdXNoKGwoZy5sZW5ndGgpKTtmb3IodmFyIHQ9W10scj1bInNsb3ciXSxuPTA7bjw9cDsrK24pdC5wdXNoKCJhIituKSxyLnB1c2goIm8iK24pO2Zvcih2YXIgaT1bImZ1bmN0aW9uIGdldE9yaWVudGF0aW9uKCIsdC5qb2luKCksIil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Il0sbj0yO248PXA7KytuKWkucHVzaCgiY2FzZSAiLG4sIjpyZXR1cm4gbyIsbiwiKCIsdC5zbGljZSgwLG4pLmpvaW4oKSwiKTsiKTtpLnB1c2goIn12YXIgcz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoOysraSl7c1tpXT1hcmd1bWVudHNbaV19O3JldHVybiBzbG93KHMpO31yZXR1cm4gZ2V0T3JpZW50YXRpb24iKSxyLnB1c2goaS5qb2luKCIiKSk7dmFyIGE9RnVuY3Rpb24uYXBwbHkodm9pZCAwLHIpO2UuZXhwb3J0cz1hLmFwcGx5KHZvaWQgMCxbdV0uY29uY2F0KGcpKTtmb3IodmFyIG49MDtuPD1wOysrbillLmV4cG9ydHNbbl09Z1tuXX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUwOCwicm9idXN0LXN1YnRyYWN0Ijo1MTAsInJvYnVzdC1zdW0iOjUxMSwidHdvLXByb2R1Y3QiOjUzN31dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoMT09PXQubGVuZ3RoKXJldHVybiBhKGUsdFswXSk7aWYoMT09PWUubGVuZ3RoKXJldHVybiBhKHQsZVswXSk7aWYoMD09PXQubGVuZ3RofHwwPT09ZS5sZW5ndGgpcmV0dXJuWzBdO3ZhciByPVswXTtpZih0Lmxlbmd0aDxlLmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbilyPWkocixhKGUsdFtuXSkpO2Vsc2UgZm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24pcj1pKHIsYSh0LGVbbl0pKTtyZXR1cm4gcn12YXIgaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc2NhbGUiKTtlLmV4cG9ydHM9bn0seyJyb2J1c3Qtc2NhbGUiOjUwOCwicm9idXN0LXN1bSI6NTExfV0sNTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Lmxlbmd0aDtpZigxPT09cil7dmFyIG49aSh0WzBdLGUpO3JldHVybiBuWzBdP246W25bMV1dfXZhciBvPW5ldyBBcnJheSgyKnIpLHM9Wy4xLC4xXSxsPVsuMSwuMV0sdT0wO2kodFswXSxlLHMpLHNbMF0mJihvW3UrK109c1swXSk7Zm9yKHZhciBjPTE7YzxyOysrYyl7aSh0W2NdLGUsbCk7dmFyIGg9c1sxXTthKGgsbFswXSxzKSxzWzBdJiYob1t1KytdPXNbMF0pO3ZhciBmPWxbMV0sZD1zWzFdLHA9ZitkLG09cC1mLHY9ZC1tO3NbMV09cCx2JiYob1t1KytdPXYpfXJldHVybiBzWzFdJiYob1t1KytdPXNbMV0pLDA9PT11JiYob1t1KytdPTApLG8ubGVuZ3RoPXUsb312YXIgaT10KCJ0d28tcHJvZHVjdCIpLGE9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1ufSx7InR3by1wcm9kdWN0Ijo1MzcsInR3by1zdW0iOjUzOH1dLDUwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8MjsrK2kpe3ZhciBhPXRbaV0sbz1lW2ldLHM9TWF0aC5taW4oYSxvKSxsPU1hdGgubWF4KGEsbyksdT1yW2ldLGM9bltpXSxoPU1hdGgubWluKHUsYyk7aWYoTWF0aC5tYXgodSxjKTxzfHxsPGgpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gaSh0LGUscixpKXt2YXIgbz1hKHQscixpKSxzPWEoZSxyLGkpO2lmKG8+MCYmcz4wfHxvPDAmJnM8MClyZXR1cm4hMTt2YXIgbD1hKHIsdCxlKSx1PWEoaSx0LGUpO3JldHVybiEobD4wJiZ1PjB8fGw8MCYmdTwwKSYmKDAhPT1vfHwwIT09c3x8MCE9PWx8fDAhPT11fHxuKHQsZSxyLGkpKX1lLmV4cG9ydHM9aTt2YXIgYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUwNn1dLDUxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9ci1uLGE9ZS1uLG89dC1pLHM9bythO3JldHVybiBzP1tzLHJdOltyXX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MHx0Lmxlbmd0aCxpPTB8ZS5sZW5ndGg7aWYoMT09PXImJjE9PT1pKXJldHVybiBuKHRbMF0sLWVbMF0pO3ZhciBhLG8scz1yK2ksbD1uZXcgQXJyYXkocyksdT0wLGM9MCxoPTAsZj1NYXRoLmFicyxkPXRbY10scD1mKGQpLG09LWVbaF0sdj1mKG0pO3A8dj8obz1kLChjKz0xKTxyJiYoZD10W2NdLHA9ZihkKSkpOihvPW0sKGgrPTEpPGkmJihtPS1lW2hdLHY9ZihtKSkpLGM8ciYmcDx2fHxoPj1pPyhhPWQsKGMrPTEpPHImJihkPXRbY10scD1mKGQpKSk6KGE9bSwoaCs9MSk8aSYmKG09LWVbaF0sdj1mKG0pKSk7Zm9yKHZhciBnLHksYix4LF8sdz1hK28sTT13LWEsaz1vLU0sQT1rLFQ9dztjPHImJmg8aTspcDx2PyhhPWQsKGMrPTEpPHImJihkPXRbY10scD1mKGQpKSk6KGE9bSwoaCs9MSk8aSYmKG09LWVbaF0sdj1mKG0pKSksbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nO2Zvcig7YzxyOylhPWQsbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nLChjKz0xKTxyJiYoZD10W2NdKTtmb3IoO2g8aTspYT1tLG89QSx3PWErbyxNPXctYSxrPW8tTSxrJiYobFt1KytdPWspLGc9VCt3LHk9Zy1ULGI9Zy15LHg9dy15LF89VC1iLEE9Xyt4LFQ9ZywoaCs9MSk8aSYmKG09LWVbaF0pO3JldHVybiBBJiYobFt1KytdPUEpLFQmJihsW3UrK109VCksdXx8KGxbdSsrXT0wKSxsLmxlbmd0aD11LGx9ZS5leHBvcnRzPWl9LHt9XSwKNTExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10K2Usbj1yLXQsaT1yLW4sYT1lLW4sbz10LWkscz1vK2E7cmV0dXJuIHM/W3Mscl06W3JdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj0wfHQubGVuZ3RoLGk9MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PWkpcmV0dXJuIG4odFswXSxlWzBdKTt2YXIgYSxvLHM9citpLGw9bmV3IEFycmF5KHMpLHU9MCxjPTAsaD0wLGY9TWF0aC5hYnMsZD10W2NdLHA9ZihkKSxtPWVbaF0sdj1mKG0pO3A8dj8obz1kLChjKz0xKTxyJiYoZD10W2NdLHA9ZihkKSkpOihvPW0sKGgrPTEpPGkmJihtPWVbaF0sdj1mKG0pKSksYzxyJiZwPHZ8fGg+PWk/KGE9ZCwoYys9MSk8ciYmKGQ9dFtjXSxwPWYoZCkpKTooYT1tLChoKz0xKTxpJiYobT1lW2hdLHY9ZihtKSkpO2Zvcih2YXIgZyx5LGIseCxfLHc9YStvLE09dy1hLGs9by1NLEE9ayxUPXc7YzxyJiZoPGk7KXA8dj8oYT1kLChjKz0xKTxyJiYoZD10W2NdLHA9ZihkKSkpOihhPW0sKGgrPTEpPGkmJihtPWVbaF0sdj1mKG0pKSksbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nO2Zvcig7YzxyOylhPWQsbz1BLHc9YStvLE09dy1hLGs9by1NLGsmJihsW3UrK109ayksZz1UK3cseT1nLVQsYj1nLXkseD13LXksXz1ULWIsQT1fK3gsVD1nLChjKz0xKTxyJiYoZD10W2NdKTtmb3IoO2g8aTspYT1tLG89QSx3PWErbyxNPXctYSxrPW8tTSxrJiYobFt1KytdPWspLGc9VCt3LHk9Zy1ULGI9Zy15LHg9dy15LF89VC1iLEE9Xyt4LFQ9ZywoaCs9MSk8aSYmKG09ZVtoXSk7cmV0dXJuIEEmJihsW3UrK109QSksVCYmKGxbdSsrXT1UKSx1fHwobFt1KytdPTApLGwubGVuZ3RoPXUsbH1lLmV4cG9ydHM9aX0se31dLDUxMjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9yLmV4cG9ydHM9aSgpOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KGkpOmUuU2hlbGZQYWNrPWkoKX0odGhpcyxmdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLHIpe3I9cnx8e30sdGhpcy53PXR8fDY0LHRoaXMuaD1lfHw2NCx0aGlzLmF1dG9SZXNpemU9ISFyLmF1dG9SZXNpemUsdGhpcy5zaGVsdmVzPVtdLHRoaXMuc3RhdHM9e30sdGhpcy5jb3VudD1mdW5jdGlvbih0KXt0aGlzLnN0YXRzW3RdPTErKDB8dGhpcy5zdGF0c1t0XSl9fWZ1bmN0aW9uIGUodCxlLHIpe3RoaXMueD0wLHRoaXMueT10LHRoaXMudz10aGlzLmZyZWU9ZSx0aGlzLmg9cn1yZXR1cm4gdC5wcm90b3R5cGUucGFjaz1mdW5jdGlvbih0LGUpe3Q9W10uY29uY2F0KHQpLGU9ZXx8e307Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10ud3x8dFtvXS53aWR0aCxuPXRbb10uaHx8dFtvXS5oZWlnaHQsciYmbil7aWYoIShpPXRoaXMucGFja09uZShyLG4pKSljb250aW51ZTtlLmluUGxhY2UmJih0W29dLng9aS54LHRbb10ueT1pLnkpLGEucHVzaChpKX1pZih0aGlzLnNoZWx2ZXMubGVuZ3RoPjApe2Zvcih2YXIgcz0wLGw9MCx1PTA7dTx0aGlzLnNoZWx2ZXMubGVuZ3RoO3UrKyl7dmFyIGM9dGhpcy5zaGVsdmVzW3VdO2wrPWMuaCxzPU1hdGgubWF4KGMudy1jLmZyZWUscyl9dGhpcy5yZXNpemUocyxsKX1yZXR1cm4gYX0sdC5wcm90b3R5cGUucGFja09uZT1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbixpLGE9MCxvPXtzaGVsZjotMSx3YXN0ZToxLzB9LHM9MDtzPHRoaXMuc2hlbHZlcy5sZW5ndGg7cysrKXtpZihuPXRoaXMuc2hlbHZlc1tzXSxhKz1uLmgscj09PW4uaCYmdDw9bi5mcmVlKXJldHVybiB0aGlzLmNvdW50KHIpLG4uYWxsb2ModCxyKTtyPm4uaHx8dD5uLmZyZWV8fHI8bi5oJiZ0PD1uLmZyZWUmJihpPW4uaC1yKTxvLndhc3RlJiYoby53YXN0ZT1pLG8uc2hlbGY9cyl9aWYoLTEhPT1vLnNoZWxmKXJldHVybiBuPXRoaXMuc2hlbHZlc1tvLnNoZWxmXSx0aGlzLmNvdW50KHIpLG4uYWxsb2ModCxyKTtpZihyPD10aGlzLmgtYSYmdDw9dGhpcy53KXJldHVybiBuPW5ldyBlKGEsdGhpcy53LHIpLHRoaXMuc2hlbHZlcy5wdXNoKG4pLHRoaXMuY291bnQociksbi5hbGxvYyh0LHIpO2lmKHRoaXMuYXV0b1Jlc2l6ZSl7dmFyIGwsdSxjLGg7cmV0dXJuIGw9dT10aGlzLmgsYz1oPXRoaXMudywoYzw9bHx8dD5jKSYmKGg9MipNYXRoLm1heCh0LGMpKSwobDxjfHxyPmwpJiYodT0yKk1hdGgubWF4KHIsbCkpLHRoaXMucmVzaXplKGgsdSksdGhpcy5wYWNrT25lKHQscil9cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zaGVsdmVzPVtdLHRoaXMuc3RhdHM9e319LHQucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LGUpe3RoaXMudz10LHRoaXMuaD1lO2Zvcih2YXIgcj0wO3I8dGhpcy5zaGVsdmVzLmxlbmd0aDtyKyspdGhpcy5zaGVsdmVzW3JdLnJlc2l6ZSh0KTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih0PnRoaXMuZnJlZXx8ZT50aGlzLmgpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy54O3JldHVybiB0aGlzLngrPXQsdGhpcy5mcmVlLT10LHt4OnIseTp0aGlzLnksdzp0LGg6ZSx3aWR0aDp0LGhlaWdodDplfX0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZyZWUrPXQtdGhpcy53LHRoaXMudz10LCEwfSx0fSl9LHt9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSw1MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gYShpKHQpKX1lLmV4cG9ydHM9bjt2YXIgaT10KCJib3VuZGFyeS1jZWxscyIpLGE9dCgicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCIpfSx7ImJvdW5kYXJ5LWNlbGxzIjo2NywicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCI6NDk2fV0sNTE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MCxuPTA7bjxlOysrbilyPTB8TWF0aC5tYXgocix0W25dLmxlbmd0aCk7cmV0dXJuIHItMX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49aC5tYWxsb2NVaW50OChyKSxpPTA7aTxyOysraSluW2ldPXRbaV08ZXwwO3JldHVybiBufWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lKihlKzEpLzIqcnwwLGk9aC5tYWxsb2NVaW50MzIoMipuKSxhPTAsbz0wO288cjsrK28pZm9yKHZhciBzPXRbb10sZT1zLmxlbmd0aCxsPTA7bDxlOysrbClmb3IodmFyIHU9MDt1PGw7Kyt1KXt2YXIgZD1zW3VdLHA9c1tsXTtpW2ErK109MHxNYXRoLm1pbihkLHApLGlbYSsrXT0wfE1hdGgubWF4KGQscCl9ZihjKGksW2EvMnwwLDJdKSk7Zm9yKHZhciBtPTIsbz0yO288YTtvKz0yKWlbby0yXT09PWlbb10mJmlbby0xXT09PWlbbysxXXx8KGlbbSsrXT1pW29dLGlbbSsrXT1pW28rMV0pO3JldHVybiBjKGksW20vMnwwLDJdKX1mdW5jdGlvbiBvKHQsZSxyLG4pe2Zvcih2YXIgaT10LmRhdGEsYT10LnNoYXBlWzBdLG89aC5tYWxsb2NEb3VibGUoYSkscz0wLGw9MDtsPGE7KytsKXt2YXIgdT1pWzIqbF0sZj1pWzIqbCsxXTtpZihyW3VdIT09cltmXSl7dmFyIGQ9ZVt1XSxwPWVbZl07aVsyKnNdPXUsaVsyKnMrMV09ZixvW3MrK109KHAtbikvKHAtZCl9fXJldHVybiB0LnNoYXBlWzBdPXMsYyhvLFtzXSl9ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWgubWFsbG9jSW50MzIoMiplKSxuPXQuc2hhcGVbMF0saT10LmRhdGE7clswXT0wO2Zvcih2YXIgYT0wLG89MDtvPG47KytvKXt2YXIgcz1pWzIqb107aWYocyE9PWEpe2ZvcihyWzIqYSsxXT1vOysrYTxzOylyWzIqYV09byxyWzIqYSsxXT1vO3JbMiphXT1vfX1mb3IoclsyKmErMV09bjsrK2E8ZTspclsyKmFdPXJbMiphKzFdPW47cmV0dXJuIHJ9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9MHx0LnNoYXBlWzBdLHI9dC5kYXRhLG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09W3JbMippXSxyWzIqaSsxXV07cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUscix1KXtpZihyPXJ8fDAsdm9pZCAwPT09dSYmKHU9bih0KSksMD09PXQubGVuZ3RofHx1PDEpcmV0dXJue2NlbGxzOltdLHZlcnRleElkczpbXSx2ZXJ0ZXhXZWlnaHRzOltdfTt2YXIgYz1pKGUsK3IpLGY9YSh0LHUpLHA9byhmLGUsYywrciksbT1zKGYsMHxlLmxlbmd0aCksdj1kKHUpKHQsZi5kYXRhLG0sYyksZz1sKGYpLHk9W10uc2xpY2UuY2FsbChwLmRhdGEsMCxwLnNoYXBlWzBdKTtyZXR1cm4gaC5mcmVlKGMpLGguZnJlZShmLmRhdGEpLGguZnJlZShwLmRhdGEpLGguZnJlZShtKSx7Y2VsbHM6dix2ZXJ0ZXhJZHM6Zyx2ZXJ0ZXhXZWlnaHRzOnl9fWUuZXhwb3J0cz11O3ZhciBjPXQoIm5kYXJyYXkiKSxoPXQoInR5cGVkYXJyYXktcG9vbCIpLGY9dCgibmRhcnJheS1zb3J0IiksZD10KCIuL2xpYi9jb2RlZ2VuIil9LHsiLi9saWIvY29kZWdlbiI6NTE2LG5kYXJyYXk6NDY1LCJuZGFycmF5LXNvcnQiOjQ2MywidHlwZWRhcnJheS1wb29sIjo1Mzl9XSw1MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT0wLHI9bmV3IEFycmF5KHQrMSk7clswXT1bW11dO2Zvcih2YXIgbj0xO248PXQ7KytuKWZvcih2YXIgaT1yW25dPW8obikscz0wO3M8aS5sZW5ndGg7KytzKWU9TWF0aC5tYXgoZSxpW25dLmxlbmd0aCk7Zm9yKHZhciBsPVsiZnVuY3Rpb24gQihDLEUsaSxqKXsiLCJ2YXIgYT1NYXRoLm1pbihpLGopfDAsYj1NYXRoLm1heChpLGopfDAsbD1DWzIqYV0saD1DWzIqYSsxXTsiLCJ3aGlsZShsPGgpeyIsInZhciBtPShsK2gpPj4xLHY9RVsyKm0rMV07IiwiaWYodj09PWIpe3JldHVybiBtfSIsImlmKGI8dil7aD1tfWVsc2V7bD1tKzF9IiwifSIsInJldHVybiBsOyIsIn07IiwiZnVuY3Rpb24gZ2V0Q29udG91ciIsdCwiZChGLEUsQyxTKXsiLCJ2YXIgbj1GLmxlbmd0aCxSPVtdOyIsImZvcih2YXIgaT0wO2k8bjsrK2kpe3ZhciBjPUZbaV0sbD1jLmxlbmd0aDsiXSxuPXQrMTtuPjE7LS1uKXtuPHQrMSYmbC5wdXNoKCJlbHNlICIpLGwucHVzaCgiaWYobD09PSIsbiwiKXsiKTtmb3IodmFyIHU9W10scz0wO3M8bjsrK3MpdS5wdXNoKCIoU1tjWyIrcysiXV08PCIrcysiKSIpO2wucHVzaCgidmFyIE09Iix1LmpvaW4oIisiKSwiO2lmKE09PT0wfHxNPT09IiwoMTw8biktMSwiKXtjb250aW51ZX1zd2l0Y2goTSl7Iik7Zm9yKHZhciBpPXJbbi0xXSxzPTA7czxpLmxlbmd0aDsrK3MpbC5wdXNoKCJjYXNlICIscywiOiIpLGZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8PTApKXtsLnB1c2goIlIucHVzaCgiKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl7dmFyIHI9dFtlXTtlPjAmJmwucHVzaCgiLCIpLGwucHVzaCgiWyIpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKXt2YXIgaT1yW25dO24+MCYmbC5wdXNoKCIsIiksbC5wdXNoKCJCKEMsRSxjWyIsaVswXSwiXSxjWyIsaVsxXSwiXSkiKX1sLnB1c2goIl0iKX1sLnB1c2goIik7Iil9fShpW3NdKSxsLnB1c2goImJyZWFrOyIpO2wucHVzaCgifX0iKX1yZXR1cm4gbC5wdXNoKCJ9cmV0dXJuIFI7fTtyZXR1cm4gZ2V0Q29udG91ciIsdCwiZCIpLG5ldyBGdW5jdGlvbigicG9vbCIsbC5qb2luKCIiKSkoYSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT1zW3RdO3JldHVybiBlfHwoZT1zW3RdPW4odCkpLGV9ZS5leHBvcnRzPWk7dmFyIGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJtYXJjaGluZy1zaW1wbGV4LXRhYmxlIikscz17fX0seyJtYXJjaGluZy1zaW1wbGV4LXRhYmxlIjo0NDMsInR5cGVkYXJyYXktcG9vbCI6NTM5fV0sNTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1c2UgcmVzdHJpY3QiO2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6dmFyIGE9dFswXSt0WzFdLWVbMF0tZVsxXTtyZXR1cm4gYXx8aSh0WzBdLHRbMV0pLWkoZVswXSxlWzFdKTtjYXNlIDM6dmFyIG89dFswXSt0WzFdLHM9ZVswXStlWzFdO2lmKGE9byt0WzJdLShzK2VbMl0pKXJldHVybiBhO3ZhciBsPWkodFswXSx0WzFdKSx1PWkoZVswXSxlWzFdKSxhPWkobCx0WzJdKS1pKHUsZVsyXSk7cmV0dXJuIGF8fGkobCt0WzJdLG8pLWkodStlWzJdLHMpO2RlZmF1bHQ6dmFyIGM9dC5zbGljZSgwKTtjLnNvcnQoKTt2YXIgaD1lLnNsaWNlKDApO2guc29ydCgpO2Zvcih2YXIgZj0wO2Y8cjsrK2YpaWYobj1jW2ZdLWhbZl0pcmV0dXJuIG47cmV0dXJuIDB9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0WzBdLGVbMF0pfWZ1bmN0aW9uIGwodCxlKXtpZihlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpbltpXT1bdFtpXSxlW2ldXTtuLnNvcnQocyk7Zm9yKHZhciBpPTA7aTxyOysraSl0W2ldPW5baV1bMF0sZVtpXT1uW2ldWzFdO3JldHVybiB0fXJldHVybiB0LnNvcnQobyksdH1mdW5jdGlvbiB1KHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9MSxyPXQubGVuZ3RoLG49MTtuPHI7KytuKXt2YXIgaT10W25dO2lmKG8oaSx0W24tMV0pKXtpZihuPT09ZSl7ZSsrO2NvbnRpbnVlfXRbZSsrXT1pfX1yZXR1cm4gdC5sZW5ndGg9ZSx0fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT0tMTtyPD1uOyl7dmFyIGE9cituPj4xLHM9byh0W2FdLGUpO3M8PTA/KDA9PT1zJiYoaT1hKSxyPWErMSk6cz4wJiYobj1hLTEpfXJldHVybiBpfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXJbbl09W107Zm9yKHZhciBhPVtdLG49MCxzPWUubGVuZ3RoO248czsrK24pZm9yKHZhciBsPWVbbl0sdT1sLmxlbmd0aCxoPTEsZj0xPDx1O2g8ZjsrK2gpe2EubGVuZ3RoPWIucG9wQ291bnQoaCk7Zm9yKHZhciBkPTAscD0wO3A8dTsrK3ApaCYxPDxwJiYoYVtkKytdPWxbcF0pO3ZhciBtPWModCxhKTtpZighKG08MCkpZm9yKDs7KWlmKHJbbSsrXS5wdXNoKG4pLG0+PXQubGVuZ3RofHwwIT09byh0W21dLGEpKWJyZWFrfXJldHVybiByfWZ1bmN0aW9uIGYodCxlKXtpZighZSlyZXR1cm4gaCh1KHAodCwwKSksdCwwKTtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09W107Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYT10W25dLG89MCxzPWEubGVuZ3RoO288czsrK28pclthW29dXS5wdXNoKG4pO3JldHVybiByfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wfGkubGVuZ3RoLG89MSxzPTE8PGE7bzxzOysrbyl7Zm9yKHZhciB1PVtdLGM9MDtjPGE7KytjKW8+Pj5jJjEmJnUucHVzaChpW2NdKTtlLnB1c2godSl9cmV0dXJuIGwoZSl9ZnVuY3Rpb24gcCh0LGUpe2lmKGU8MClyZXR1cm5bXTtmb3IodmFyIHI9W10sbj0oMTw8ZSsxKS0xLGk9MDtpPHQubGVuZ3RoOysraSlmb3IodmFyIGE9dFtpXSxvPW47bzwxPDxhLmxlbmd0aDtvPWIubmV4dENvbWJpbmF0aW9uKG8pKXtmb3IodmFyIHM9bmV3IEFycmF5KGUrMSksdT0wLGM9MDtjPGEubGVuZ3RoOysrYylvJjE8PGMmJihzW3UrK109YVtjXSk7ci5wdXNoKHMpfXJldHVybiBsKHIpfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBzPW5ldyBBcnJheShpLmxlbmd0aC0xKSx1PTAsYz0wO3U8bzsrK3UpdSE9PWEmJihzW2MrK109aVt1XSk7ZS5wdXNoKHMpfXJldHVybiBsKGUpfWZ1bmN0aW9uIHYodCxlKXtmb3IodmFyIHI9bmV3IHgoZSksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLGE9MDthPGkubGVuZ3RoOysrYSlmb3IodmFyIG89YSsxO288aS5sZW5ndGg7KytvKXIubGluayhpW2FdLGlbb10pO2Zvcih2YXIgcz1bXSxsPXIucmFua3Msbj0wO248bC5sZW5ndGg7KytuKWxbbl09LTE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciB1PXIuZmluZCh0W25dWzBdKTtsW3VdPDA/KGxbdV09cy5sZW5ndGgscy5wdXNoKFt0W25dLnNsaWNlKDApXSkpOnNbbFt1XV0ucHVzaCh0W25dLnNsaWNlKDApKX1yZXR1cm4gc31mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT11KGwocCh0LDApKSkscj1uZXcgeChlLmxlbmd0aCksbj0wO248dC5sZW5ndGg7KytuKWZvcih2YXIgaT10W25dLGE9MDthPGkubGVuZ3RoOysrYSlmb3IodmFyIG89YyhlLFtpW2FdXSkscz1hKzE7czxpLmxlbmd0aDsrK3Mpci5saW5rKG8sYyhlLFtpW3NdXSkpO2Zvcih2YXIgaD1bXSxmPXIucmFua3Msbj0wO248Zi5sZW5ndGg7KytuKWZbbl09LTE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBkPXIuZmluZChjKGUsW3Rbbl1bMF1dKSk7ZltkXTwwPyhmW2RdPWgubGVuZ3RoLGgucHVzaChbdFtuXS5zbGljZSgwKV0pKTpoW2ZbZF1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGh9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlP3YodCxlKTpnKHQpfXZhciBiPXQoImJpdC10d2lkZGxlIikseD10KCJ1bmlvbi1maW5kIik7ci5kaW1lbnNpb249bixyLmNvdW50VmVydGljZXM9aSxyLmNsb25lQ2VsbHM9YSxyLmNvbXBhcmVDZWxscz1vLHIubm9ybWFsaXplPWwsci51bmlxdWU9dSxyLmZpbmRDZWxsPWMsci5pbmNpZGVuY2U9aCxyLmR1YWw9ZixyLmV4cGxvZGU9ZCxyLnNrZWxldG9uPXAsci5ib3VuZGFyeT1tLHIuY29ubmVjdGVkQ29tcG9uZW50cz15fSx7ImJpdC10d2lkZGxlIjo2NSwidW5pb24tZmluZCI6NTQwfV0sNTE4OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzY1XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtkdXA6NjV9XSw1MTk6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNTE3XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiYml0LXR3aWRkbGUiOjUxOCxkdXA6NTE3LCJ1bmlvbi1maW5kIjo1MjB9XSw1MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7InVzZSByZXN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLnJvb3RzPW5ldyBBcnJheSh0KSx0aGlzLnJhbmtzPW5ldyBBcnJheSh0KTtmb3IodmFyIGU9MDtlPHQ7KytlKXRoaXMucm9vdHNbZV09ZSx0aGlzLnJhbmtzW2VdPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUubGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofSxuLnByb3RvdHlwZS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0sbi5wcm90b3R5cGUuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5yb290cztlW3RdIT09dDspe3ZhciByPWVbdF07ZVt0XT1lW3JdLHQ9cn1yZXR1cm4gdH0sbi5wcm90b3R5cGUubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSw1MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIE1hdGguYWJzKGEodCxlLHIpKS9NYXRoLnNxcnQoTWF0aC5wb3coZVswXS1yWzBdLDIpK01hdGgucG93KGVbMV0tclsxXSwyKSl9ZnVuY3Rpb24gaSh0LGUscil7ZnVuY3Rpb24gaSh0KXtpZihiW3RdKXJldHVybiAxLzA7dmFyIHI9dlt0XSxpPWdbdF07cmV0dXJuIHI8MHx8aTwwPzEvMDpuKGVbdF0sZVtyXSxlW2ldKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9a1t0XSxuPWtbZV07a1t0XT1uLGtbZV09cixBW3JdPWUsQVtuXT10fWZ1bmN0aW9uIHModCl7cmV0dXJuIHlba1t0XV19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gMSZ0P3QtMT4+MToodD4+MSktMX1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1zKHQpOzspe3ZhciByPWUsbj0yKnQrMSxpPTIqKHQrMSksbz10O2lmKG48VCl7dmFyIGw9cyhuKTtsPHImJihvPW4scj1sKX1pZihpPFQpe3MoaSk8ciYmKG89aSl9aWYobz09PXQpcmV0dXJuIHQ7YSh0LG8pLHQ9b319ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9cyh0KTt0PjA7KXt2YXIgcj1sKHQpO2lmKHI+PTApe2lmKGU8cyhyKSl7YSh0LHIpLHQ9cjtjb250aW51ZX19cmV0dXJuIHR9fWZ1bmN0aW9uIGgoKXtpZihUPjApe3ZhciB0PWtbMF07cmV0dXJuIGEoMCxULTEpLFQtPTEsdSgwKSx0fXJldHVybi0xfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1rW3RdO3JldHVybiB5W3JdPT09ZT90Oih5W3JdPS0xLzAsYyh0KSxoKCkseVtyXT1lLFQrPTEsYyhULTEpKX1mdW5jdGlvbiBkKHQsZSl7aWYodFtlXTwwKXJldHVybiBlO3ZhciByPWUsbj1lO2Rve3ZhciBpPXRbbl07aWYoIWJbbl18fGk8MHx8aT09PW4pYnJlYWs7aWYobj1pLGk9dFtuXSwhYltuXXx8aTwwfHxpPT09bilicmVhaztuPWkscj10W3JdfXdoaWxlKHIhPT1uKTtmb3IodmFyIGE9ZTthIT09bjthPXRbYV0pdFthXT1uO3JldHVybiBufWZvcih2YXIgcD1lLmxlbmd0aCxtPXQubGVuZ3RoLHY9bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApLHk9bmV3IEFycmF5KHApLGI9bmV3IEFycmF5KHApLHg9MDt4PHA7Kyt4KXZbeF09Z1t4XT0tMSx5W3hdPTEvMCxiW3hdPSExO2Zvcih2YXIgeD0wO3g8bTsrK3gpe3ZhciBfPXRbeF07aWYoMiE9PV8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW5wdXQgbXVzdCBiZSBhIGdyYXBoIik7dmFyIHc9X1sxXSxNPV9bMF07LTEhPT1nW01dP2dbTV09LTI6Z1tNXT13LC0xIT09dlt3XT92W3ddPS0yOnZbd109TX1mb3IodmFyIGs9W10sQT1uZXcgQXJyYXkocCkseD0wO3g8cDsrK3gpeyh5W3hdPWkoeCkpPDEvMD8oQVt4XT1rLmxlbmd0aCxrLnB1c2goeCkpOkFbeF09LTF9Zm9yKHZhciBUPWsubGVuZ3RoLHg9VD4+MTt4Pj0wOy0teCl1KHgpO2Zvcig7Oyl7dmFyIFM9aCgpO2lmKFM8MHx8eVtTXT5yKWJyZWFrOyFmdW5jdGlvbih0KXtpZighYlt0XSl7Ylt0XT0hMDt2YXIgZT12W3RdLHI9Z1t0XTt2W3JdPj0wJiYodltyXT1lKSxnW2VdPj0wJiYoZ1tlXT1yKSxBW2VdPj0wJiZmKEFbZV0saShlKSksQVtyXT49MCYmZihBW3JdLGkocikpfX0oUyl9Zm9yKHZhciBFPVtdLHg9MDt4PHA7Kyt4KWJbeF18fChBW3hdPUUubGVuZ3RoLEUucHVzaChlW3hdLnNsaWNlKCkpKTt2YXIgTD0oRS5sZW5ndGgsW10pO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9ZCh2LHRbMF0pLHI9ZChnLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1BW2VdLGk9QVtyXTtuIT09aSYmTC5wdXNoKFtuLGldKX19KSxvLnVuaXF1ZShvLm5vcm1hbGl6ZShMKSkse3Bvc2l0aW9uczpFLGVkZ2VzOkx9fWUuZXhwb3J0cz1pO3ZhciBhPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLG89dCgic2ltcGxpY2lhbC1jb21wbGV4Iil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDYsInNpbXBsaWNpYWwtY29tcGxleCI6NTE5fV0sNTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0sbj1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgaT1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLG89TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxzPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksbD1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBvPHM/by1zOmk+bD9pLWw6by1sfXI9ZVsxXSxuPWVbMF19dmFyIHUsYzt0WzBdWzFdPHRbMV1bMV0/KHU9dFswXSxjPXRbMV0pOih1PXRbMV0sYz10WzBdKTt2YXIgaD1hKG4scix1KTtyZXR1cm4gaHx8KChoPWEobixyLGMpKXx8Yy1uKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsaTtpZihlWzBdWzBdPGVbMV1bMF0pcj1lWzBdLGk9ZVsxXTtlbHNle2lmKCEoZVswXVswXT5lWzFdWzBdKSlyZXR1cm4gbihlLHQpO3I9ZVsxXSxpPWVbMF19dmFyIG8scztpZih0WzBdWzBdPHRbMV1bMF0pbz10WzBdLHM9dFsxXTtlbHNle2lmKCEodFswXVswXT50WzFdWzBdKSlyZXR1cm4tbih0LGUpO289dFsxXSxzPXRbMF19dmFyIGw9YShyLGkscyksdT1hKHIsaSxvKTtpZihsPDApe2lmKHU8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKHU+PTApcmV0dXJuIGx9ZWxzZSBpZih1KXJldHVybiB1O2lmKGw9YShzLG8saSksdT1hKHMsbyxyKSxsPDApe2lmKHU8PTApcmV0dXJuIGx9ZWxzZSBpZihsPjApe2lmKHU+PTApcmV0dXJuIGx9ZWxzZSBpZih1KXJldHVybiB1O3JldHVybiBpWzBdLXNbMF19ZS5leHBvcnRzPWk7dmFyIGE9dCgicm9idXN0LW9yaWVudGF0aW9uIil9LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MDZ9XSw1MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWgobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7dmFyIGw9YSh0LnJpZ2h0LGUpO2lmKGwpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbD1hKHQucmlnaHQsZSk7aWYobClyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTIqZSxpPW5ldyBBcnJheShyKSxhPTA7YTxlOysrYSl7dmFyIGw9dFthXSx1PWxbMF1bMF08bFsxXVswXTtpWzIqYV09bmV3IHMobFswXVswXSxsLHUsYSksaVsyKmErMV09bmV3IHMobFsxXVswXSxsLCF1LGEpfWkuc29ydChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1lLng7cmV0dXJuIHJ8fCgocj10LmNyZWF0ZS1lLmNyZWF0ZSl8fE1hdGgubWluKHQuc2VnbWVudFswXVsxXSx0LnNlZ21lbnRbMV1bMV0pLU1hdGgubWluKGUuc2VnbWVudFswXVsxXSxlLnNlZ21lbnRbMV1bMV0pKX0pO2Zvcih2YXIgaD1jKGYpLGQ9W10scD1bXSxtPVtdLGE9MDthPHI7KXtmb3IodmFyIHY9aVthXS54LGc9W107YTxyOyl7dmFyIHk9aVthXTtpZih5LnghPT12KWJyZWFrO2ErPTEseS5zZWdtZW50WzBdWzBdPT09eS54JiZ5LnNlZ21lbnRbMV1bMF09PT15Lng/eS5jcmVhdGUmJih5LnNlZ21lbnRbMF1bMV08eS5zZWdtZW50WzFdWzFdPyhnLnB1c2gobmV3IG8oeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITAsITApKSxnLnB1c2gobmV3IG8oeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITEsITEpKSk6KGcucHVzaChuZXcgbyh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMCwhMSkpLGcucHVzaChuZXcgbyh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMSwhMCkpKSk6aD15LmNyZWF0ZT9oLmluc2VydCh5LnNlZ21lbnQseS5pbmRleCk6aC5yZW1vdmUoeS5zZWdtZW50KX1kLnB1c2goaC5yb290KSxwLnB1c2godiksbS5wdXNoKGcpfXJldHVybiBuZXcgbihkLHAsbSl9ZS5leHBvcnRzPWw7dmFyIHU9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoImZ1bmN0aW9uYWwtcmVkLWJsYWNrLXRyZWUiKSxoPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGY9dCgiLi9saWIvb3JkZXItc2VnbWVudHMiKTtuLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9dS5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt2YXIgcj0odGhpcy5zbGFic1tlXSxhKHRoaXMuc2xhYnNbZV0sdCkpLG49LTE7aWYociYmKG49ci52YWx1ZSksdGhpcy5jb29yZGluYXRlc1tlXT09PXRbMF0pe3ZhciBvPW51bGw7aWYociYmKG89ci5rZXkpLGU+MCl7dmFyIHM9YSh0aGlzLnNsYWJzW2UtMV0sdCk7cyYmKG8/ZihzLmtleSxvKT4wJiYobz1zLmtleSxuPXMudmFsdWUpOihuPXMudmFsdWUsbz1zLmtleSkpfXZhciBsPXRoaXMuaG9yaXpvbnRhbFtlXTtpZihsLmxlbmd0aD4wKXt2YXIgYz11LmdlKGwsdFsxXSxpKTtpZihjPGwubGVuZ3RoKXt2YXIgZD1sW2NdO2lmKHRbMV09PT1kLnkpe2lmKGQuY2xvc2VkKXJldHVybiBkLmluZGV4O2Zvcig7YzxsLmxlbmd0aC0xJiZsW2MrMV0ueT09PXRbMV07KWlmKGMrPTEsZD1sW2NdLGQuY2xvc2VkKXJldHVybiBkLmluZGV4O2lmKGQueT09PXRbMV0mJiFkLnN0YXJ0KXtpZigoYys9MSk+PWwubGVuZ3RoKXJldHVybiBuO2Q9bFtjXX19aWYoZC5zdGFydClpZihvKXt2YXIgcD1oKG9bMF0sb1sxXSxbdFswXSxkLnldKTtvWzBdWzBdPm9bMV1bMF0mJihwPS1wKSxwPjAmJihuPWQuaW5kZXgpfWVsc2Ugbj1kLmluZGV4O2Vsc2UgZC55IT09dFsxXSYmKG49ZC5pbmRleCl9fX1yZXR1cm4gbn19LHsiLi9saWIvb3JkZXItc2VnbWVudHMiOjUyMiwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjY0LCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjoxMzMsInJvYnVzdC1vcmllbnRhdGlvbiI6NTA2fV0sNTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj11KGwodCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIGkodCxlLHIsbil7dmFyIGk9bi1lLGE9LWUvaTthPDA/YT0wOmE+MSYmKGE9MSk7Zm9yKHZhciBvPTEtYSxzPXQubGVuZ3RoLGw9bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KWxbdV09YSp0W3VdK28qclt1XTtyZXR1cm4gbH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVtdLGE9W10sbz1uKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSx1PTA7dTx0Lmxlbmd0aDsrK3Uscz1sKXtsPXRbdV07dmFyIGM9bihsLGUpO2lmKG88MCYmYz4wfHxvPjAmJmM8MCl7dmFyIGg9aShzLGMsbCxvKTtyLnB1c2goaCksYS5wdXNoKGguc2xpY2UoKSl9YzwwP2EucHVzaChsLnNsaWNlKCkpOmM+MD9yLnB1c2gobC5zbGljZSgpKTooci5wdXNoKGwuc2xpY2UoKSksYS5wdXNoKGwuc2xpY2UoKSkpLG89Y31yZXR1cm57cG9zaXRpdmU6cixuZWdhdGl2ZTphfX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPVtdLGE9bih0W3QubGVuZ3RoLTFdLGUpLG89dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLG89cyl7cz10W2xdO3ZhciB1PW4ocyxlKTsoYTwwJiZ1PjB8fGE+MCYmdTwwKSYmci5wdXNoKGkobyx1LHMsYSkpLHU+PTAmJnIucHVzaChzLnNsaWNlKCkpLGE9dX1yZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciByPVtdLGE9bih0W3QubGVuZ3RoLTFdLGUpLG89dFt0Lmxlbmd0aC0xXSxzPXRbMF0sbD0wO2w8dC5sZW5ndGg7KytsLG89cyl7cz10W2xdO3ZhciB1PW4ocyxlKTsoYTwwJiZ1PjB8fGE+MCYmdTwwKSYmci5wdXNoKGkobyx1LHMsYSkpLHU8PTAmJnIucHVzaChzLnNsaWNlKCkpLGE9dX1yZXR1cm4gcn12YXIgbD10KCJyb2J1c3QtZG90LXByb2R1Y3QiKSx1PXQoInJvYnVzdC1zdW0iKTtlLmV4cG9ydHM9YSxlLmV4cG9ydHMucG9zaXRpdmU9byxlLmV4cG9ydHMubmVnYXRpdmU9c30seyJyb2J1c3QtZG90LXByb2R1Y3QiOjUwMywicm9idXN0LXN1bSI6NTExfV0sNTI1OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIGkoYSh0KSxhcmd1bWVudHMpfWZ1bmN0aW9uIHIodCxyKXtyZXR1cm4gZS5hcHBseShudWxsLFt0XS5jb25jYXQocnx8W10pKX1mdW5jdGlvbiBpKHQscil7dmFyIG4saSxhLHMsbCx1LGMsaCxmLGQ9MSxwPXQubGVuZ3RoLG09IiI7Zm9yKGk9MDtpPHA7aSsrKWlmKCJzdHJpbmciPT10eXBlb2YgdFtpXSltKz10W2ldO2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0W2ldKSl7aWYocz10W2ldLHNbMl0pZm9yKG49cltkXSxhPTA7YTxzWzJdLmxlbmd0aDthKyspe2lmKCFuLmhhc093blByb3BlcnR5KHNbMl1bYV0pKXRocm93IG5ldyBFcnJvcihlKCdbc3ByaW50Zl0gcHJvcGVydHkgIiVzIiBkb2VzIG5vdCBleGlzdCcsc1syXVthXSkpO249bltzWzJdW2FdXX1lbHNlIG49c1sxXT9yW3NbMV1dOnJbZCsrXTtpZihvLm5vdF90eXBlLnRlc3Qoc1s4XSkmJm8ubm90X3ByaW1pdGl2ZS50ZXN0KHNbOF0pJiZuIGluc3RhbmNlb2YgRnVuY3Rpb24mJihuPW4oKSksby5udW1lcmljX2FyZy50ZXN0KHNbOF0pJiYibnVtYmVyIiE9dHlwZW9mIG4mJmlzTmFOKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoZSgiW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUIixuKSk7c3dpdGNoKG8ubnVtYmVyLnRlc3Qoc1s4XSkmJihoPW4+PTApLHNbOF0pe2Nhc2UiYiI6bj1wYXJzZUludChuLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlImMiOm49U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChuLDEwKSk7YnJlYWs7Y2FzZSJkIjpjYXNlImkiOm49cGFyc2VJbnQobiwxMCk7YnJlYWs7Y2FzZSJqIjpuPUpTT04uc3RyaW5naWZ5KG4sbnVsbCxzWzZdP3BhcnNlSW50KHNbNl0pOjApO2JyZWFrO2Nhc2UiZSI6bj1zWzddP3BhcnNlRmxvYXQobikudG9FeHBvbmVudGlhbChzWzddKTpwYXJzZUZsb2F0KG4pLnRvRXhwb25lbnRpYWwoKTticmVhaztjYXNlImYiOm49c1s3XT9wYXJzZUZsb2F0KG4pLnRvRml4ZWQoc1s3XSk6cGFyc2VGbG9hdChuKTticmVhaztjYXNlImciOm49c1s3XT9TdHJpbmcoTnVtYmVyKG4udG9QcmVjaXNpb24oc1s3XSkpKTpwYXJzZUZsb2F0KG4pO2JyZWFrO2Nhc2UibyI6bj0ocGFyc2VJbnQobiwxMCk+Pj4wKS50b1N0cmluZyg4KTticmVhaztjYXNlInMiOm49U3RyaW5nKG4pLG49c1s3XT9uLnN1YnN0cmluZygwLHNbN10pOm47YnJlYWs7Y2FzZSJ0IjpuPVN0cmluZyghIW4pLG49c1s3XT9uLnN1YnN0cmluZygwLHNbN10pOm47YnJlYWs7Y2FzZSJUIjpuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLG49c1s3XT9uLnN1YnN0cmluZygwLHNbN10pOm47YnJlYWs7Y2FzZSJ1IjpuPXBhcnNlSW50KG4sMTApPj4+MDticmVhaztjYXNlInYiOm49bi52YWx1ZU9mKCksbj1zWzddP24uc3Vic3RyaW5nKDAsc1s3XSk6bjticmVhaztjYXNlIngiOm49KHBhcnNlSW50KG4sMTApPj4+MCkudG9TdHJpbmcoMTYpO2JyZWFrO2Nhc2UiWCI6bj0ocGFyc2VJbnQobiwxMCk+Pj4wKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX1vLmpzb24udGVzdChzWzhdKT9tKz1uOighby5udW1iZXIudGVzdChzWzhdKXx8aCYmIXNbM10/Zj0iIjooZj1oPyIrIjoiLSIsbj1uLnRvU3RyaW5nKCkucmVwbGFjZShvLnNpZ24sIiIpKSx1PXNbNF0/IjAiPT09c1s0XT8iMCI6c1s0XS5jaGFyQXQoMSk6IiAiLGM9c1s2XS0oZituKS5sZW5ndGgsbD1zWzZdJiZjPjA/dS5yZXBlYXQoYyk6IiIsbSs9c1s1XT9mK24rbDoiMCI9PT11P2YrbCtuOmwrZituKX1yZXR1cm4gbX1mdW5jdGlvbiBhKHQpe2lmKHNbdF0pcmV0dXJuIHNbdF07Zm9yKHZhciBlLHI9dCxuPVtdLGk9MDtyOyl7aWYobnVsbCE9PShlPW8udGV4dC5leGVjKHIpKSluLnB1c2goZVswXSk7ZWxzZSBpZihudWxsIT09KGU9by5tb2R1bG8uZXhlYyhyKSkpbi5wdXNoKCIlIik7ZWxzZXtpZihudWxsPT09KGU9by5wbGFjZWhvbGRlci5leGVjKHIpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyIik7aWYoZVsyXSl7aXw9MTt2YXIgYT1bXSxsPWVbMl0sdT1bXTtpZihudWxsPT09KHU9by5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO2ZvcihhLnB1c2godVsxXSk7IiIhPT0obD1sLnN1YnN0cmluZyh1WzBdLmxlbmd0aCkpOylpZihudWxsIT09KHU9by5rZXlfYWNjZXNzLmV4ZWMobCkpKWEucHVzaCh1WzFdKTtlbHNle2lmKG51bGw9PT0odT1vLmluZGV4X2FjY2Vzcy5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7YS5wdXNoKHVbMV0pfWVbMl09YX1lbHNlIGl8PTI7aWYoMz09PWkpdGhyb3cgbmV3IEVycm9yKCJbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkIik7bi5wdXNoKGUpfXI9ci5zdWJzdHJpbmcoZVswXS5sZW5ndGgpfXJldHVybiBzW3RdPW59dmFyIG89e25vdF9zdHJpbmc6L1tec10vLG5vdF9ib29sOi9bXnRdLyxub3RfdHlwZTovW15UXS8sbm90X3ByaW1pdGl2ZTovW152XS8sbnVtYmVyOi9bZGllZmddLyxudW1lcmljX2FyZzovW2JjZGllZmd1eFhdLyxqc29uOi9bal0vLG5vdF9qc29uOi9bXmpdLyx0ZXh0Oi9eW15ceDI1XSsvLG1vZHVsbzovXlx4MjV7Mn0vLHBsYWNlaG9sZGVyOi9eXHgyNSg/OihbMS05XVxkKilcJHxcKChbXlwpXSspXCkpPyhcKyk/KDB8J1teJF0pPygtKT8oXGQrKT8oPzpcLihcZCspKT8oW2ItZ2lqb3N0VHV2eFhdKS8sa2V5Oi9eKFthLXpfXVthLXpfXGRdKikvaSxrZXlfYWNjZXNzOi9eXC4oW2Etel9dW2Etel9cZF0qKS9pLGluZGV4X2FjY2VzczovXlxbKFxkKylcXS8sc2lnbjovXltcK1wtXS99LHM9T2JqZWN0LmNyZWF0ZShudWxsKTt2b2lkIDAhPT1uJiYobi5zcHJpbnRmPWUsbi52c3ByaW50Zj1yKSwidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5zcHJpbnRmPWUsd2luZG93LnZzcHJpbnRmPXIsImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kJiZ0KGZ1bmN0aW9uKCl7cmV0dXJue3NwcmludGY6ZSx2c3ByaW50ZjpyfX0pKX0oKX0se31dLDUyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKSxuPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheShlKSxhPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKSxzPW5ldyBBcnJheShlKSxsPTA7bDxlOysrbClyW2xdPS0xLG5bbF09MCxpW2xdPSExLGFbbF09MCxvW2xdPS0xLHNbbF09W107Zm9yKHZhciB1PTAsYz1bXSxoPVtdLGw9MDtsPGU7KytsKXJbbF08MCYmZnVuY3Rpb24oZSl7dmFyIGw9W2VdLGY9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Zi5sZW5ndGg+MDspe2U9ZltmLmxlbmd0aC0xXTt2YXIgZD10W2VdO2lmKGFbZV08ZC5sZW5ndGgpe2Zvcih2YXIgcD1hW2VdO3A8ZC5sZW5ndGg7KytwKXt2YXIgbT1kW3BdO2lmKHJbbV08MCl7clttXT1uW21dPXUsaVttXT0hMCx1Kz0xLGwucHVzaChtKSxmLnB1c2gobSk7YnJlYWt9aVttXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bbV0pKSxvW21dPj0wJiZzW2VdLnB1c2gob1ttXSl9YVtlXT1wfWVsc2V7aWYobltlXT09PXJbZV0pe2Zvcih2YXIgdj1bXSxnPVtdLHk9MCxwPWwubGVuZ3RoLTE7cD49MDstLXApe3ZhciBiPWxbcF07aWYoaVtiXT0hMSx2LnB1c2goYiksZy5wdXNoKHNbYl0pLHkrPXNbYl0ubGVuZ3RoLG9bYl09Yy5sZW5ndGgsYj09PWUpe2wubGVuZ3RoPXA7YnJlYWt9fWMucHVzaCh2KTtmb3IodmFyIHg9bmV3IEFycmF5KHkpLHA9MDtwPGcubGVuZ3RoO3ArKylmb3IodmFyIF89MDtfPGdbcF0ubGVuZ3RoO18rKyl4Wy0teV09Z1twXVtfXTtoLnB1c2goeCl9Zi5wb3AoKX19fShsKTtmb3IodmFyIGYsbD0wO2w8aC5sZW5ndGg7bCsrKXt2YXIgZD1oW2xdO2lmKDAhPT1kLmxlbmd0aCl7ZC5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGY9W2RbMF1dO2Zvcih2YXIgcD0xO3A8ZC5sZW5ndGg7cCsrKWRbcF0hPT1kW3AtMV0mJmYucHVzaChkW3BdKTtoW2xdPWZ9fXJldHVybntjb21wb25lbnRzOmMsYWRqYWNlbmN5TGlzdDpofX1lLmV4cG9ydHM9bn0se31dLDUyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgaSh0KX1mdW5jdGlvbiBpKHQpe3RoaXMub3B0aW9ucz1kKE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSx0KSx0aGlzLnRyZWVzPW5ldyBBcnJheSh0aGlzLm9wdGlvbnMubWF4Wm9vbSsxKX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7cmV0dXJue3g6dCx5OmUsem9vbToxLzAsaWQ6bixwcm9wZXJ0aWVzOmkscGFyZW50SWQ6LTEsbnVtUG9pbnRzOnJ9fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3JldHVybnt4OnUoclswXSkseTpjKHJbMV0pLHpvb206MS8wLGlkOmUscGFyZW50SWQ6LTF9fWZ1bmN0aW9uIHModCl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLHByb3BlcnRpZXM6bCh0KSxnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOltoKHQueCksZih0LnkpXX19fWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrImsiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCsiayI6ZTtyZXR1cm4gZChkKHt9LHQucHJvcGVydGllcykse2NsdXN0ZXI6ITAsY2x1c3Rlcl9pZDp0LmlkLHBvaW50X2NvdW50OmUscG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6cn0pfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIGModCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gMzYwKih0LS41KX1mdW5jdGlvbiBmKHQpe3ZhciBlPSgxODAtMzYwKnQpKk1hdGguUEkvMTgwO3JldHVybiAzNjAqTWF0aC5hdGFuKE1hdGguZXhwKGUpKS9NYXRoLlBJLTkwfWZ1bmN0aW9uIGQodCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIG0odCl7cmV0dXJuIHQueX12YXIgdj10KCJrZGJ1c2giKTtlLmV4cG9ydHM9bixpLnByb3RvdHlwZT17b3B0aW9uczp7bWluWm9vbTowLG1heFpvb206MTYscmFkaXVzOjQwLGV4dGVudDo1MTIsbm9kZVNpemU6NjQsbG9nOiExLHJlZHVjZTpudWxsLGluaXRpYWw6ZnVuY3Rpb24oKXtyZXR1cm57fX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sbG9hZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMubG9nO2UmJmNvbnNvbGUudGltZSgidG90YWwgdGltZSIpO3ZhciByPSJwcmVwYXJlICIrdC5sZW5ndGgrIiBwb2ludHMiO2UmJmNvbnNvbGUudGltZShyKSx0aGlzLnBvaW50cz10O3ZhciBuPXQubWFwKG8pO2UmJmNvbnNvbGUudGltZUVuZChyKTtmb3IodmFyIGk9dGhpcy5vcHRpb25zLm1heFpvb207aT49dGhpcy5vcHRpb25zLm1pblpvb207aS0tKXt2YXIgYT0rRGF0ZS5ub3coKTt0aGlzLnRyZWVzW2krMV09dihuLHAsbSx0aGlzLm9wdGlvbnMubm9kZVNpemUsRmxvYXQzMkFycmF5KSxuPXRoaXMuX2NsdXN0ZXIobixpKSxlJiZjb25zb2xlLmxvZygieiVkOiAlZCBjbHVzdGVycyBpbiAlZG1zIixpLG4ubGVuZ3RoLCtEYXRlLm5vdygpLWEpfXJldHVybiB0aGlzLnRyZWVzW3RoaXMub3B0aW9ucy5taW5ab29tXT12KG4scCxtLHRoaXMub3B0aW9ucy5ub2RlU2l6ZSxGbG9hdDMyQXJyYXkpLGUmJmNvbnNvbGUudGltZUVuZCgidG90YWwgdGltZSIpLHRoaXN9LGdldENsdXN0ZXJzOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKGUpXSxuPXIucmFuZ2UodSh0WzBdKSxjKHRbM10pLHUodFsyXSksYyh0WzFdKSksaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPXIucG9pbnRzW25bYV1dO2kucHVzaChvLm51bVBvaW50cz9zKG8pOnRoaXMucG9pbnRzW28uaWRdKX1yZXR1cm4gaX0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cmVlc1tlKzFdLnBvaW50c1t0XSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT10aGlzLnRyZWVzW2UrMV0ud2l0aGluKHIueCxyLnksbiksYT1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBsPXRoaXMudHJlZXNbZSsxXS5wb2ludHNbaVtvXV07bC5wYXJlbnRJZD09PXQmJmEucHVzaChsLm51bVBvaW50cz9zKGwpOnRoaXMucG9pbnRzW2wuaWRdKX1yZXR1cm4gYX0sZ2V0TGVhdmVzOmZ1bmN0aW9uKHQsZSxyLG4pe3I9cnx8MTAsbj1ufHwwO3ZhciBpPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMoaSx0LGUscixuLDApLGl9LGdldFRpbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHQpXSxpPU1hdGgucG93KDIsdCksYT10aGlzLm9wdGlvbnMuZXh0ZW50LG89dGhpcy5vcHRpb25zLnJhZGl1cyxzPW8vYSxsPShyLXMpL2ksdT0ocisxK3MpL2ksYz17ZmVhdHVyZXM6W119O3JldHVybiB0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgoZS1zKS9pLGwsKGUrMStzKS9pLHUpLG4ucG9pbnRzLGUscixpLGMpLDA9PT1lJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgxLXMvaSxsLDEsdSksbi5wb2ludHMsaSxyLGksYyksZT09PWktMSYmdGhpcy5fYWRkVGlsZUZlYXR1cmVzKG4ucmFuZ2UoMCxsLHMvaSx1KSxuLnBvaW50cywtMSxyLGksYyksYy5mZWF0dXJlcy5sZW5ndGg/YzpudWxsfSxnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbTpmdW5jdGlvbih0LGUpe2Zvcig7ZTx0aGlzLm9wdGlvbnMubWF4Wm9vbTspe3ZhciByPXRoaXMuZ2V0Q2hpbGRyZW4odCxlKTtpZihlKyssMSE9PXIubGVuZ3RoKWJyZWFrO3Q9clswXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWR9cmV0dXJuIGV9LF9hcHBlbmRMZWF2ZXM6ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz10aGlzLmdldENoaWxkcmVuKGUscikscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdLnByb3BlcnRpZXM7aWYobC5jbHVzdGVyP2ErbC5wb2ludF9jb3VudDw9aT9hKz1sLnBvaW50X2NvdW50OmE9dGhpcy5fYXBwZW5kTGVhdmVzKHQsbC5jbHVzdGVyX2lkLHIrMSxuLGksYSk6YTxpP2ErKzp0LnB1c2gob1tzXSksdC5sZW5ndGg9PT1uKWJyZWFrfXJldHVybiBhfSxfYWRkVGlsZUZlYXR1cmVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9ZVt0W29dXTthLmZlYXR1cmVzLnB1c2goe3R5cGU6MSxnZW9tZXRyeTpbW01hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy54KmktcikpLE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCoocy55KmktbikpXV0sdGFnczpzLm51bVBvaW50cz9sKHMpOnRoaXMucG9pbnRzW3MuaWRdLnByb3BlcnRpZXN9KX19LF9saW1pdFpvb206ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy5taW5ab29tLE1hdGgubWluKHQsdGhpcy5vcHRpb25zLm1heFpvb20rMSkpfSxfY2x1c3RlcjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixlKSksaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgbz10W2ldO2lmKCEoby56b29tPD1lKSl7by56b29tPWU7dmFyIHM9dGhpcy50cmVlc1tlKzFdLGw9cy53aXRoaW4oby54LG8ueSxuKSx1PW8ubnVtUG9pbnRzfHwxLGM9by54KnUsaD1vLnkqdSxmPW51bGw7dGhpcy5vcHRpb25zLnJlZHVjZSYmKGY9dGhpcy5vcHRpb25zLmluaXRpYWwoKSx0aGlzLl9hY2N1bXVsYXRlKGYsbykpO2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7ZCsrKXt2YXIgcD1zLnBvaW50c1tsW2RdXTtpZihlPHAuem9vbSl7dmFyIG09cC5udW1Qb2ludHN8fDE7cC56b29tPWUsYys9cC54Km0saCs9cC55Km0sdSs9bSxwLnBhcmVudElkPWksdGhpcy5vcHRpb25zLnJlZHVjZSYmdGhpcy5fYWNjdW11bGF0ZShmLHApfX0xPT09dT9yLnB1c2gobyk6KG8ucGFyZW50SWQ9aSxyLnB1c2goYShjL3UsaC91LHUsaSxmKSkpfX1yZXR1cm4gcn0sX2FjY3VtdWxhdGU6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLm51bVBvaW50cz9lLnByb3BlcnRpZXM6dGhpcy5vcHRpb25zLm1hcCh0aGlzLnBvaW50c1tlLmlkXS5wcm9wZXJ0aWVzKTt0aGlzLm9wdGlvbnMucmVkdWNlKHQscil9fX0se2tkYnVzaDoyOTZ9XSw1Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluIGk/aVt0XToiIn0pLmpvaW4oIiIpfWUuZXhwb3J0cz1uO3ZhciBpPXsiICI6IiAiLDA6Ilx1MjA3MCIsMToiXHhiOSIsMjoiXHhiMiIsMzoiXHhiMyIsNDoiXHUyMDc0Iiw1OiJcdTIwNzUiLDY6Ilx1MjA3NiIsNzoiXHUyMDc3Iiw4OiJcdTIwNzgiLDk6Ilx1MjA3OSIsIisiOiJcdTIwN2EiLCItIjoiXHUyMDdiIixhOiJcdTFkNDMiLGI6Ilx1MWQ0NyIsYzoiXHUxZDljIixkOiJcdTFkNDgiLGU6Ilx1MWQ0OSIsZjoiXHUxZGEwIixnOiJcdTFkNGQiLGg6Ilx1MDJiMCIsaToiXHUyMDcxIixqOiJcdTAyYjIiLGs6Ilx1MWQ0ZiIsbDoiXHUwMmUxIixtOiJcdTFkNTAiLG46Ilx1MjA3ZiIsbzoiXHUxZDUyIixwOiJcdTFkNTYiLHI6Ilx1MDJiMyIsczoiXHUwMmUyIix0OiJcdTFkNTciLHU6Ilx1MWQ1OCIsdjoiXHUxZDViIix3OiJcdTAyYjciLHg6Ilx1MDJlMyIseToiXHUwMmI4Iix6OiJcdTFkYmIifX0se31dLDUyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj1bIid1c2Ugc3RyaWN0JzsiXSxpPSJzdXJmYWNlTmV0cyIrdC5qb2luKCJfIikrImQiK2U7bi5wdXNoKCJ2YXIgY29udG91cj1nZW5Db250b3VyKHsiLCJvcmRlcjpbIix0LmpvaW4oKSwiXSwiLCJzY2FsYXJBcmd1bWVudHM6IDMsIiwicGhhc2U6ZnVuY3Rpb24gcGhhc2VGdW5jKHAsYSxiLGMpIHsgcmV0dXJuIChwID4gYyl8MCB9LCIpLCJnZW5lcmljIj09PWUmJm4ucHVzaCgiZ2V0dGVyczpbMF0sIik7Zm9yKHZhciBhPVtdLGw9W10sdT0wO3U8cjsrK3UpYS5wdXNoKCJkIit1KSxsLnB1c2goImQiK3UpO2Zvcih2YXIgdT0wO3U8MTw8cjsrK3UpYS5wdXNoKCJ2Iit1KSxsLnB1c2goInYiK3UpO2Zvcih2YXIgdT0wO3U8MTw8cjsrK3UpYS5wdXNoKCJwIit1KSxsLnB1c2goInAiK3UpO2EucHVzaCgiYSIsImIiLCJjIiksbC5wdXNoKCJhIiwiYyIpLG4ucHVzaCgidmVydGV4OmZ1bmN0aW9uIHZlcnRleEZ1bmMoIixhLmpvaW4oKSwiKXsiKTtmb3IodmFyIGM9W10sdT0wO3U8MTw8cjsrK3UpYy5wdXNoKCIocCIrdSsiPDwiK3UrIikiKTtuLnB1c2goInZhciBtPSgiLGMuam9pbigiKyIpLCIpfDA7aWYobT09PTB8fG09PT0iLCgxPDwoMTw8cikpLTEsIil7cmV0dXJufSIpO3ZhciBoPVtdLGY9W107MTw8KDE8PHIpPD0xMjg/KG4ucHVzaCgic3dpdGNoKG0peyIpLGY9bik6bi5wdXNoKCJzd2l0Y2gobT4+PjcpeyIpO2Zvcih2YXIgdT0wO3U8MTw8KDE8PHIpOysrdSl7aWYoMTw8KDE8PHIpPjEyOCYmdSUxMjg9PTApe2gubGVuZ3RoPjAmJmYucHVzaCgifX0iKTt2YXIgZD0idkV4dHJhIitoLmxlbmd0aDtuLnB1c2goImNhc2UgIix1Pj4+NywiOiIsZCwiKG0mMHg3ZiwiLGwuam9pbigpLCIpO2JyZWFrOyIpLGY9WyJmdW5jdGlvbiAiLGQsIihtLCIsbC5qb2luKCksIil7c3dpdGNoKG0peyJdLGgucHVzaChmKX1mLnB1c2goImNhc2UgIiwxMjcmdSwiOiIpO2Zvcih2YXIgcD1uZXcgQXJyYXkociksbT1uZXcgQXJyYXkociksdj1uZXcgQXJyYXkociksZz1uZXcgQXJyYXkocikseT0wLGI9MDtiPHI7KytiKXBbYl09W10sbVtiXT1bXSx2W2JdPTAsZ1tiXT0wO2Zvcih2YXIgYj0wO2I8MTw8cjsrK2IpZm9yKHZhciB4PTA7eDxyOysreCl7dmFyIF89Yl4xPDx4O2lmKCEoXz5iKSYmISh1JjE8PF8pIT0hKHUmMTw8Yikpe3ZhciB3PTE7dSYxPDxfP21beF0ucHVzaCgidiIrXysiLXYiK2IpOihtW3hdLnB1c2goInYiK2IrIi12IitfKSx3PS13KSx3PDA/KHBbeF0ucHVzaCgiLXYiK2IrIi12IitfKSx2W3hdKz0yKToocFt4XS5wdXNoKCJ2IitiKyIrdiIrXyksdlt4XS09MikseSs9MTtmb3IodmFyIE09MDtNPHI7KytNKU0hPT14JiYoXyYxPDxNP2dbTV0rPTE6Z1tNXS09MSl9fWZvcih2YXIgaz1bXSx4PTA7eDxyOysreClpZigwPT09cFt4XS5sZW5ndGgpay5wdXNoKCJkIit4KyItMC41Iik7ZWxzZXt2YXIgQT0iIjt2W3hdPDA/QT12W3hdKyIqYyI6dlt4XT4wJiYoQT0iKyIrdlt4XSsiKmMiKTt2YXIgVD1wW3hdLmxlbmd0aC95Ki41LFM9LjUrZ1t4XS95Ki41O2sucHVzaCgiZCIreCsiLSIrUysiLSIrVCsiKigiK3BbeF0uam9pbigiKyIpK0ErIikvKCIrbVt4XS5qb2luKCIrIikrIikiKX1mLnB1c2goImEucHVzaChbIixrLmpvaW4oKSwiXSk7IiwiYnJlYWs7Iil9bi5wdXNoKCJ9fSwiKSxoLmxlbmd0aD4wJiZmLnB1c2goIn19Iik7Zm9yKHZhciBFPVtdLHU9MDt1PDE8PHItMTsrK3UpRS5wdXNoKCJ2Iit1KTtFLnB1c2goImMwIiwiYzEiLCJwMCIsInAxIiwiYSIsImIiLCJjIiksbi5wdXNoKCJjZWxsOmZ1bmN0aW9uIGNlbGxGdW5jKCIsRS5qb2luKCksIil7Iik7dmFyIEw9cyhyLTEpO24ucHVzaCgiaWYocDApe2IucHVzaCgiLEwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJbIit0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4idiIrdH0pKyJdIn0pLmpvaW4oKSwiKX1lbHNle2IucHVzaCgiLEwubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoKTtyZXR1cm4gZS5yZXZlcnNlKCksIlsiK2UubWFwKGZ1bmN0aW9uKHQpe3JldHVybiJ2Iit0fSkrIl0ifSkuam9pbigpLCIpfX19KTtmdW5jdGlvbiAiLGksIihhcnJheSxsZXZlbCl7dmFyIHZlcnRzPVtdLGNlbGxzPVtdO2NvbnRvdXIoYXJyYXksdmVydHMsY2VsbHMsbGV2ZWwpO3JldHVybiB7cG9zaXRpb25zOnZlcnRzLGNlbGxzOmNlbGxzfTt9IHJldHVybiAiLGksIjsiKTtmb3IodmFyIHU9MDt1PGgubGVuZ3RoOysrdSluLnB1c2goaFt1XS5qb2luKCIiKSk7cmV0dXJuIG5ldyBGdW5jdGlvbigiZ2VuQ29udG91ciIsbi5qb2luKCIiKSkobyl9ZnVuY3Rpb24gaSh0LGUpe2Zvcih2YXIgcj1sKHQsZSksbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbylpW29dPVtyW29dXSxhW29dPVtvXTtyZXR1cm57cG9zaXRpb25zOmksY2VsbHM6YX19ZnVuY3Rpb24gYSh0LGUpe2lmKHQuZGltZW5zaW9uPD0wKXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O2lmKDE9PT10LmRpbWVuc2lvbilyZXR1cm4gaSh0LGUpO3ZhciByPXQub3JkZXIuam9pbigpKyItIit0LmR0eXBlLGE9dVtyXSxlPStlfHwwO3JldHVybiBhfHwoYT11W3JdPW4odC5vcmRlcix0LmR0eXBlKSksYSh0LGUpfWUuZXhwb3J0cz1hO3ZhciBvPXQoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyIikscz10KCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiKSxsPXQoInplcm8tY3Jvc3NpbmdzIiksdT17fX0seyJuZGFycmF5LWV4dHJhY3QtY29udG91ciI6NDU0LCJ0cmlhbmd1bGF0ZS1oeXBlcmN1YmUiOjUzNSwiemVyby1jcm9zc2luZ3MiOjU4Mn1dLDUzMDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIHU9cltzW2xdXTtuW2krK109dVswXSxuW2krK109dVsxXSsxLjQsYT1NYXRoLm1heCh1WzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19ZnVuY3Rpb24gaSh0LGUscil7dmFyIHI9cnx8e30sbz1zW3RdO298fChvPXNbdF09eyIgIjp7ZGF0YTpuZXcgRmxvYXQzMkFycmF5KDApLHNoYXBlOi4yfX0pO3ZhciBsPW9bZV07aWYoIWwpaWYoZS5sZW5ndGg8PTF8fCEvXGQvLnRlc3QoZSkpbD1vW2VdPW4oYShlLHt0cmlhbmdsZXM6ITAsZm9udDp0LHRleHRBbGlnbjpyLnRleHRBbGlnbnx8ImxlZnQiLHRleHRCYXNlbGluZToiYWxwaGFiZXRpYyJ9KSk7ZWxzZXtmb3IodmFyIHU9ZS5zcGxpdCgvKFxkfFxzKS8pLGM9bmV3IEFycmF5KHUubGVuZ3RoKSxoPTAsZj0wLGQ9MDtkPHUubGVuZ3RoOysrZCljW2RdPWkodCx1W2RdKSxoKz1jW2RdLmRhdGEubGVuZ3RoLGYrPWNbZF0uc2hhcGUsZD4wJiYoZis9LjAyKTtmb3IodmFyIHA9bmV3IEZsb2F0MzJBcnJheShoKSxtPTAsdj0tLjUqZixkPTA7ZDxjLmxlbmd0aDsrK2Qpe2Zvcih2YXIgZz1jW2RdLmRhdGEseT0wO3k8Zy5sZW5ndGg7eSs9MilwW20rK109Z1t5XSt2LHBbbSsrXT1nW3krMV07dis9Y1tkXS5zaGFwZSsuMDJ9bD1vW2VdPXtkYXRhOnAsc2hhcGU6Zn19cmV0dXJuIGx9ZS5leHBvcnRzPWk7dmFyIGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXdpbmRvd3x8ci5nbG9iYWx8fHt9LHM9by5fX1RFWFRfQ0FDSEV8fHt9O28uX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDg1LCJ2ZWN0b3JpemUtdGV4dCI6NTUyfV0sNTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt0aGlzLmZvbnRTaXplPXR8fDI0LHRoaXMuYnVmZmVyPXZvaWQgMD09PWU/MzplLHRoaXMuY3V0b2ZmPW58fC4yNSx0aGlzLmZvbnRGYW1pbHk9aXx8InNhbnMtc2VyaWYiLHRoaXMucmFkaXVzPXJ8fDg7dmFyIGE9dGhpcy5zaXplPXRoaXMuZm9udFNpemUrMip0aGlzLmJ1ZmZlcjt0aGlzLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmNhbnZhcy53aWR0aD10aGlzLmNhbnZhcy5oZWlnaHQ9YSx0aGlzLmN0eD10aGlzLmNhbnZhcy5nZXRDb250ZXh0KCIyZCIpLHRoaXMuY3R4LmZvbnQ9dCsicHggIit0aGlzLmZvbnRGYW1pbHksdGhpcy5jdHgudGV4dEJhc2VsaW5lPSJtaWRkbGUiLHRoaXMuY3R4LmZpbGxTdHlsZT0iYmxhY2siLHRoaXMuZ3JpZE91dGVyPW5ldyBGbG9hdDY0QXJyYXkoYSphKSx0aGlzLmdyaWRJbm5lcj1uZXcgRmxvYXQ2NEFycmF5KGEqYSksdGhpcy5mPW5ldyBGbG9hdDY0QXJyYXkoYSksdGhpcy5kPW5ldyBGbG9hdDY0QXJyYXkoYSksdGhpcy56PW5ldyBGbG9hdDY0QXJyYXkoYSsxKSx0aGlzLnY9bmV3IEludDE2QXJyYXkoYSksdGhpcy5taWRkbGU9TWF0aC5yb3VuZChhLzIqKG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiR2Vja28vIik+PTA/MS4yOjEpKX1mdW5jdGlvbiBpKHQsZSxyLG4saSxvLHMpe2Zvcih2YXIgbD0wO2w8ZTtsKyspe2Zvcih2YXIgdT0wO3U8cjt1Kyspblt1XT10W3UqZStsXTtmb3IoYShuLGksbyxzLHIpLHU9MDt1PHI7dSsrKXRbdSplK2xdPWlbdV19Zm9yKHU9MDt1PHI7dSsrKXtmb3IobD0wO2w8ZTtsKyspbltsXT10W3UqZStsXTtmb3IoYShuLGksbyxzLGUpLGw9MDtsPGU7bCsrKXRbdSplK2xdPU1hdGguc3FydChpW2xdKX19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3JbMF09MCxuWzBdPS1vLG5bMV09K287Zm9yKHZhciBhPTEscz0wO2E8aTthKyspe2Zvcih2YXIgbD0odFthXSthKmEtKHRbcltzXV0rcltzXSpyW3NdKSkvKDIqYS0yKnJbc10pO2w8PW5bc107KXMtLSxsPSh0W2FdK2EqYS0odFtyW3NdXStyW3NdKnJbc10pKS8oMiphLTIqcltzXSk7cysrLHJbc109YSxuW3NdPWwsbltzKzFdPStvfWZvcihhPTAscz0wO2E8aTthKyspe2Zvcig7bltzKzFdPGE7KXMrKztlW2FdPShhLXJbc10pKihhLXJbc10pK3RbcltzXV19fWUuZXhwb3J0cz1uO3ZhciBvPTFlMjA7bi5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9ZS5kYXRhLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgYT1yWzQqbiszXS8yNTU7dGhpcy5ncmlkT3V0ZXJbbl09MT09PWE/MDowPT09YT9vOk1hdGgucG93KE1hdGgubWF4KDAsLjUtYSksMiksdGhpcy5ncmlkSW5uZXJbbl09MT09PWE/bzowPT09YT8wOk1hdGgucG93KE1hdGgubWF4KDAsYS0uNSksMil9Zm9yKGkodGhpcy5ncmlkT3V0ZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLGkodGhpcy5ncmlkSW5uZXIsdGhpcy5zaXplLHRoaXMuc2l6ZSx0aGlzLmYsdGhpcy5kLHRoaXMudix0aGlzLnopLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgcz10aGlzLmdyaWRPdXRlcltuXS10aGlzLmdyaWRJbm5lcltuXSxsPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjU1LTI1NSoocy90aGlzLnJhZGl1cyt0aGlzLmN1dG9mZikpKSk7cls0Km4rMF09bCxyWzQqbisxXT1sLHJbNCpuKzJdPWwscls0Km4rM109MjU1fXJldHVybiBlfX0se31dLDUzMjpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYodD10fHwiIixlPWV8fHt9LHQgaW5zdGFuY2VvZiBuKXJldHVybiB0O2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0LGUpO3ZhciByPWkodCk7dGhpcy5fb3JpZ2luYWxJbnB1dD10LHRoaXMuX3I9ci5yLHRoaXMuX2c9ci5nLHRoaXMuX2I9ci5iLHRoaXMuX2E9ci5hLHRoaXMuX3JvdW5kQT1WKDEwMCp0aGlzLl9hKS8xMDAsdGhpcy5fZm9ybWF0PWUuZm9ybWF0fHxyLmZvcm1hdCx0aGlzLl9ncmFkaWVudFR5cGU9ZS5ncmFkaWVudFR5cGUsdGhpcy5fcjwxJiYodGhpcy5fcj1WKHRoaXMuX3IpKSx0aGlzLl9nPDEmJih0aGlzLl9nPVYodGhpcy5fZykpLHRoaXMuX2I8MSYmKHRoaXMuX2I9Vih0aGlzLl9iKSksdGhpcy5fb2s9ci5vayx0aGlzLl90Y19pZD1VKyt9ZnVuY3Rpb24gaSh0KXt2YXIgZT17cjowLGc6MCxiOjB9LHI9MSxuPW51bGwsaT1udWxsLG89bnVsbCxsPSExLGM9ITE7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD1GKHQpKSwib2JqZWN0Ij09dHlwZW9mIHQmJihSKHQucikmJlIodC5nKSYmUih0LmIpPyhlPWEodC5yLHQuZyx0LmIpLGw9ITAsYz0iJSI9PT1TdHJpbmcodC5yKS5zdWJzdHIoLTEpPyJwcmdiIjoicmdiIik6Uih0LmgpJiZSKHQucykmJlIodC52KT8obj1EKHQucyksaT1EKHQudiksZT11KHQuaCxuLGkpLGw9ITAsYz0iaHN2Iik6Uih0LmgpJiZSKHQucykmJlIodC5sKSYmKG49RCh0LnMpLG89RCh0LmwpLGU9cyh0LmgsbixvKSxsPSEwLGM9ImhzbCIpLHQuaGFzT3duUHJvcGVydHkoImEiKSYmKHI9dC5hKSkscj1UKHIpLHtvazpsLGZvcm1hdDp0LmZvcm1hdHx8YyxyOkgoMjU1LHEoZS5yLDApKSxnOkgoMjU1LHEoZS5nLDApKSxiOkgoMjU1LHEoZS5iLDApKSxhOnJ9fWZ1bmN0aW9uIGEodCxlLHIpe3JldHVybntyOjI1NSpTKHQsMjU1KSxnOjI1NSpTKGUsMjU1KSxiOjI1NSpTKHIsMjU1KX19ZnVuY3Rpb24gbyh0LGUscil7dD1TKHQsMjU1KSxlPVMoZSwyNTUpLHI9UyhyLDI1NSkKO3ZhciBuLGksYT1xKHQsZSxyKSxvPUgodCxlLHIpLHM9KGErbykvMjtpZihhPT1vKW49aT0wO2Vsc2V7dmFyIGw9YS1vO3N3aXRjaChpPXM+LjU/bC8oMi1hLW8pOmwvKGErbyksYSl7Y2FzZSB0Om49KGUtcikvbCsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvbCsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL2wrNH1uLz02fXJldHVybntoOm4sczppLGw6c319ZnVuY3Rpb24gcyh0LGUscil7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIHI8MCYmKHIrPTEpLHI+MSYmKHItPTEpLHI8MS82P3QrNiooZS10KSpyOnI8LjU/ZTpyPDIvMz90KyhlLXQpKigyLzMtcikqNjp0fXZhciBpLGEsbztpZih0PVModCwzNjApLGU9UyhlLDEwMCkscj1TKHIsMTAwKSwwPT09ZSlpPWE9bz1yO2Vsc2V7dmFyIHM9cjwuNT9yKigxK2UpOnIrZS1yKmUsbD0yKnItcztpPW4obCxzLHQrMS8zKSxhPW4obCxzLHQpLG89bihsLHMsdC0xLzMpfXJldHVybntyOjI1NSppLGc6MjU1KmEsYjoyNTUqb319ZnVuY3Rpb24gbCh0LGUscil7dD1TKHQsMjU1KSxlPVMoZSwyNTUpLHI9UyhyLDI1NSk7dmFyIG4saSxhPXEodCxlLHIpLG89SCh0LGUscikscz1hLGw9YS1vO2lmKGk9MD09PWE/MDpsL2EsYT09byluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvbCsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvbCsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL2wrNH1uLz02fXJldHVybntoOm4sczppLHY6c319ZnVuY3Rpb24gdSh0LHIsbil7dD02KlModCwzNjApLHI9UyhyLDEwMCksbj1TKG4sMTAwKTt2YXIgaT1lLmZsb29yKHQpLGE9dC1pLG89biooMS1yKSxzPW4qKDEtYSpyKSxsPW4qKDEtKDEtYSkqciksdT1pJTY7cmV0dXJue3I6MjU1KltuLHMsbyxvLGwsbl1bdV0sZzoyNTUqW2wsbixuLHMsbyxvXVt1XSxiOjI1NSpbbyxvLGwsbixuLHNdW3VdfX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPVtJKFYodCkudG9TdHJpbmcoMTYpKSxJKFYoZSkudG9TdHJpbmcoMTYpKSxJKFYocikudG9TdHJpbmcoMTYpKV07cmV0dXJuIG4mJmlbMF0uY2hhckF0KDApPT1pWzBdLmNoYXJBdCgxKSYmaVsxXS5jaGFyQXQoMCk9PWlbMV0uY2hhckF0KDEpJiZpWzJdLmNoYXJBdCgwKT09aVsyXS5jaGFyQXQoMSk/aVswXS5jaGFyQXQoMCkraVsxXS5jaGFyQXQoMCkraVsyXS5jaGFyQXQoMCk6aS5qb2luKCIiKX1mdW5jdGlvbiBoKHQsZSxyLG4saSl7dmFyIGE9W0koVih0KS50b1N0cmluZygxNikpLEkoVihlKS50b1N0cmluZygxNikpLEkoVihyKS50b1N0cmluZygxNikpLEkoUChuKSldO3JldHVybiBpJiZhWzBdLmNoYXJBdCgwKT09YVswXS5jaGFyQXQoMSkmJmFbMV0uY2hhckF0KDApPT1hWzFdLmNoYXJBdCgxKSYmYVsyXS5jaGFyQXQoMCk9PWFbMl0uY2hhckF0KDEpJiZhWzNdLmNoYXJBdCgwKT09YVszXS5jaGFyQXQoMSk/YVswXS5jaGFyQXQoMCkrYVsxXS5jaGFyQXQoMCkrYVsyXS5jaGFyQXQoMCkrYVszXS5jaGFyQXQoMCk6YS5qb2luKCIiKX1mdW5jdGlvbiBmKHQsZSxyLG4pe3JldHVybltJKFAobikpLEkoVih0KS50b1N0cmluZygxNikpLEkoVihlKS50b1N0cmluZygxNikpLEkoVihyKS50b1N0cmluZygxNikpXS5qb2luKCIiKX1mdW5jdGlvbiBkKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPW4odCkudG9Ic2woKTtyZXR1cm4gci5zLT1lLzEwMCxyLnM9RShyLnMpLG4ocil9ZnVuY3Rpb24gcCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1uKHQpLnRvSHNsKCk7cmV0dXJuIHIucys9ZS8xMDAsci5zPUUoci5zKSxuKHIpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG4odCkuZGVzYXR1cmF0ZSgxMDApfWZ1bmN0aW9uIHYodCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9bih0KS50b0hzbCgpO3JldHVybiByLmwrPWUvMTAwLHIubD1FKHIubCksbihyKX1mdW5jdGlvbiBnKHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPW4odCkudG9SZ2IoKTtyZXR1cm4gci5yPXEoMCxIKDI1NSxyLnItVigtZS8xMDAqMjU1KSkpLHIuZz1xKDAsSCgyNTUsci5nLVYoLWUvMTAwKjI1NSkpKSxyLmI9cSgwLEgoMjU1LHIuYi1WKC1lLzEwMCoyNTUpKSksbihyKX1mdW5jdGlvbiB5KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPW4odCkudG9Ic2woKTtyZXR1cm4gci5sLT1lLzEwMCxyLmw9RShyLmwpLG4ocil9ZnVuY3Rpb24gYih0LGUpe3ZhciByPW4odCkudG9Ic2woKSxpPShyLmgrZSklMzYwO3JldHVybiByLmg9aTwwPzM2MCtpOmksbihyKX1mdW5jdGlvbiB4KHQpe3ZhciBlPW4odCkudG9Ic2woKTtyZXR1cm4gZS5oPShlLmgrMTgwKSUzNjAsbihlKX1mdW5jdGlvbiBfKHQpe3ZhciBlPW4odCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bbih0KSxuKHtoOihyKzEyMCklMzYwLHM6ZS5zLGw6ZS5sfSksbih7aDoocisyNDApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiB3KHQpe3ZhciBlPW4odCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bbih0KSxuKHtoOihyKzkwKSUzNjAsczplLnMsbDplLmx9KSxuKHtoOihyKzE4MCklMzYwLHM6ZS5zLGw6ZS5sfSksbih7aDoocisyNzApJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBNKHQpe3ZhciBlPW4odCkudG9Ic2woKSxyPWUuaDtyZXR1cm5bbih0KSxuKHtoOihyKzcyKSUzNjAsczplLnMsbDplLmx9KSxuKHtoOihyKzIxNiklMzYwLHM6ZS5zLGw6ZS5sfSldfWZ1bmN0aW9uIGsodCxlLHIpe2U9ZXx8NixyPXJ8fDMwO3ZhciBpPW4odCkudG9Ic2woKSxhPTM2MC9yLG89W24odCldO2ZvcihpLmg9KGkuaC0oYSplPj4xKSs3MjApJTM2MDstLWU7KWkuaD0oaS5oK2EpJTM2MCxvLnB1c2gobihpKSk7cmV0dXJuIG99ZnVuY3Rpb24gQSh0LGUpe2U9ZXx8Njtmb3IodmFyIHI9bih0KS50b0hzdigpLGk9ci5oLGE9ci5zLG89ci52LHM9W10sbD0xL2U7ZS0tOylzLnB1c2gobih7aDppLHM6YSx2Om99KSksbz0obytsKSUxO3JldHVybiBzfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHQ9cGFyc2VGbG9hdCh0KSwoaXNOYU4odCl8fHQ8MHx8dD4xKSYmKHQ9MSksdH1mdW5jdGlvbiBTKHQscil7Qyh0KSYmKHQ9IjEwMCUiKTt2YXIgbj16KHQpO3JldHVybiB0PUgocixxKDAscGFyc2VGbG9hdCh0KSkpLG4mJih0PXBhcnNlSW50KHQqciwxMCkvMTAwKSxlLmFicyh0LXIpPDFlLTY/MTp0JXIvcGFyc2VGbG9hdChyKX1mdW5jdGlvbiBFKHQpe3JldHVybiBIKDEscSgwLHQpKX1mdW5jdGlvbiBMKHQpe3JldHVybiBwYXJzZUludCh0LDE2KX1mdW5jdGlvbiBDKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiLiIpJiYxPT09cGFyc2VGbG9hdCh0KX1mdW5jdGlvbiB6KHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmLTEhPXQuaW5kZXhPZigiJSIpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIFAodCl7cmV0dXJuIGUucm91bmQoMjU1KnBhcnNlRmxvYXQodCkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBPKHQpe3JldHVybiBMKHQpLzI1NX1mdW5jdGlvbiBSKHQpe3JldHVybiEhVy5DU1NfVU5JVC5leGVjKHQpfWZ1bmN0aW9uIEYodCl7dD10LnJlcGxhY2UoTiwiIikucmVwbGFjZShCLCIiKS50b0xvd2VyQ2FzZSgpO3ZhciBlPSExO2lmKFlbdF0pdD1ZW3RdLGU9ITA7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OiJuYW1lIn07dmFyIHI7cmV0dXJuKHI9Vy5yZ2IuZXhlYyh0KSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdfToocj1XLnJnYmEuZXhlYyh0KSk/e3I6clsxXSxnOnJbMl0sYjpyWzNdLGE6cls0XX06KHI9Vy5oc2wuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdfToocj1XLmhzbGEuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sbDpyWzNdLGE6cls0XX06KHI9Vy5oc3YuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdfToocj1XLmhzdmEuZXhlYyh0KSk/e2g6clsxXSxzOnJbMl0sdjpyWzNdLGE6cls0XX06KHI9Vy5oZXg4LmV4ZWModCkpP3tyOkwoclsxXSksZzpMKHJbMl0pLGI6TChyWzNdKSxhOk8ocls0XSksZm9ybWF0OmU/Im5hbWUiOiJoZXg4In06KHI9Vy5oZXg2LmV4ZWModCkpP3tyOkwoclsxXSksZzpMKHJbMl0pLGI6TChyWzNdKSxmb3JtYXQ6ZT8ibmFtZSI6ImhleCJ9OihyPVcuaGV4NC5leGVjKHQpKT97cjpMKHJbMV0rIiIrclsxXSksZzpMKHJbMl0rIiIrclsyXSksYjpMKHJbM10rIiIrclszXSksYTpPKHJbNF0rIiIrcls0XSksZm9ybWF0OmU/Im5hbWUiOiJoZXg4In06ISEocj1XLmhleDMuZXhlYyh0KSkmJntyOkwoclsxXSsiIityWzFdKSxnOkwoclsyXSsiIityWzJdKSxiOkwoclszXSsiIityWzNdKSxmb3JtYXQ6ZT8ibmFtZSI6ImhleCJ9fWZ1bmN0aW9uIGoodCl7dmFyIGUscjtyZXR1cm4gdD10fHx7bGV2ZWw6IkFBIixzaXplOiJzbWFsbCJ9LGU9KHQubGV2ZWx8fCJBQSIpLnRvVXBwZXJDYXNlKCkscj0odC5zaXplfHwic21hbGwiKS50b0xvd2VyQ2FzZSgpLCJBQSIhPT1lJiYiQUFBIiE9PWUmJihlPSJBQSIpLCJzbWFsbCIhPT1yJiYibGFyZ2UiIT09ciYmKHI9InNtYWxsIikse2xldmVsOmUsc2l6ZTpyfX12YXIgTj0vXlxzKy8sQj0vXHMrJC8sVT0wLFY9ZS5yb3VuZCxIPWUubWluLHE9ZS5tYXgsRz1lLnJhbmRvbTtuLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciB0LHIsbixpLGEsbyxzPXRoaXMudG9SZ2IoKTtyZXR1cm4gdD1zLnIvMjU1LHI9cy5nLzI1NSxuPXMuYi8yNTUsaT10PD0uMDM5Mjg/dC8xMi45MjplLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpLGE9cjw9LjAzOTI4P3IvMTIuOTI6ZS5wb3coKHIrLjA1NSkvMS4wNTUsMi40KSxvPW48PS4wMzkyOD9uLzEyLjkyOmUucG93KChuKy4wNTUpLzEuMDU1LDIuNCksLjIxMjYqaSsuNzE1MiphKy4wNzIyKm99LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPVQodCksdGhpcy5fcm91bmRBPVYoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWwodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPVYoMzYwKnQuaCkscj1WKDEwMCp0LnMpLG49VigxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PW8odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1vKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPVYoMzYwKnQuaCkscj1WKDEwMCp0LnMpLG49VigxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gYyh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0aGlzLl9hLHQpfSx0b0hleDhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXg4KHQpfSx0b1JnYjpmdW5jdGlvbigpe3JldHVybntyOlYodGhpcy5fciksZzpWKHRoaXMuX2cpLGI6Vih0aGlzLl9iKSxhOnRoaXMuX2F9fSx0b1JnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitWKHRoaXMuX3IpKyIsICIrVih0aGlzLl9nKSsiLCAiK1YodGhpcy5fYikrIikiOiJyZ2JhKCIrVih0aGlzLl9yKSsiLCAiK1YodGhpcy5fZykrIiwgIitWKHRoaXMuX2IpKyIsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9QZXJjZW50YWdlUmdiOmZ1bmN0aW9uKCl7cmV0dXJue3I6VigxMDAqUyh0aGlzLl9yLDI1NSkpKyIlIixnOlYoMTAwKlModGhpcy5fZywyNTUpKSsiJSIsYjpWKDEwMCpTKHRoaXMuX2IsMjU1KSkrIiUiLGE6dGhpcy5fYX19LHRvUGVyY2VudGFnZVJnYlN0cmluZzpmdW5jdGlvbigpe3JldHVybiAxPT10aGlzLl9hPyJyZ2IoIitWKDEwMCpTKHRoaXMuX3IsMjU1KSkrIiUsICIrVigxMDAqUyh0aGlzLl9nLDI1NSkpKyIlLCAiK1YoMTAwKlModGhpcy5fYiwyNTUpKSsiJSkiOiJyZ2JhKCIrVigxMDAqUyh0aGlzLl9yLDI1NSkpKyIlLCAiK1YoMTAwKlModGhpcy5fZywyNTUpKSsiJSwgIitWKDEwMCpTKHRoaXMuX2IsMjU1KSkrIiUsICIrdGhpcy5fcm91bmRBKyIpIn0sdG9OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9hPyJ0cmFuc3BhcmVudCI6ISh0aGlzLl9hPDEpJiYoWFtjKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLCEwKV18fCExKX0sdG9GaWx0ZXI6ZnVuY3Rpb24odCl7dmFyIGU9IiMiK2YodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSkscj1lLGk9dGhpcy5fZ3JhZGllbnRUeXBlPyJHcmFkaWVudFR5cGUgPSAxLCAiOiIiO2lmKHQpe3ZhciBhPW4odCk7cj0iIyIrZihhLl9yLGEuX2csYS5fYixhLl9hKX1yZXR1cm4icHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KCIraSsic3RhcnRDb2xvcnN0cj0iK2UrIixlbmRDb2xvcnN0cj0iK3IrIikifSx0b1N0cmluZzpmdW5jdGlvbih0KXt2YXIgZT0hIXQ7dD10fHx0aGlzLl9mb3JtYXQ7dmFyIHI9ITEsbj10aGlzLl9hPDEmJnRoaXMuX2E+PTA7cmV0dXJuIGV8fCFufHwiaGV4IiE9PXQmJiJoZXg2IiE9PXQmJiJoZXgzIiE9PXQmJiJoZXg0IiE9PXQmJiJoZXg4IiE9PXQmJiJuYW1lIiE9PXQ/KCJyZ2IiPT09dCYmKHI9dGhpcy50b1JnYlN0cmluZygpKSwicHJnYiI9PT10JiYocj10aGlzLnRvUGVyY2VudGFnZVJnYlN0cmluZygpKSwiaGV4IiE9PXQmJiJoZXg2IiE9PXR8fChyPXRoaXMudG9IZXhTdHJpbmcoKSksImhleDMiPT09dCYmKHI9dGhpcy50b0hleFN0cmluZyghMCkpLCJoZXg0Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCEwKSksImhleDgiPT09dCYmKHI9dGhpcy50b0hleDhTdHJpbmcoKSksIm5hbWUiPT09dCYmKHI9dGhpcy50b05hbWUoKSksImhzbCI9PT10JiYocj10aGlzLnRvSHNsU3RyaW5nKCkpLCJoc3YiPT09dCYmKHI9dGhpcy50b0hzdlN0cmluZygpKSxyfHx0aGlzLnRvSGV4U3RyaW5nKCkpOiJuYW1lIj09PXQmJjA9PT10aGlzLl9hP3RoaXMudG9OYW1lKCk6dGhpcy50b1JnYlN0cmluZygpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuKHRoaXMudG9TdHJpbmcoKSl9LF9hcHBseU1vZGlmaWNhdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPXQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKTtyZXR1cm4gdGhpcy5fcj1yLl9yLHRoaXMuX2c9ci5fZyx0aGlzLl9iPXIuX2IsdGhpcy5zZXRBbHBoYShyLl9hKSx0aGlzfSxsaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHYsYXJndW1lbnRzKX0sYnJpZ2h0ZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oZyxhcmd1bWVudHMpfSxkYXJrZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oeSxhcmd1bWVudHMpfSxkZXNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGQsYXJndW1lbnRzKX0sc2F0dXJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24ocCxhcmd1bWVudHMpfSxncmV5c2NhbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24obSxhcmd1bWVudHMpfSxzcGluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGIsYXJndW1lbnRzKX0sX2FwcGx5Q29tYmluYXRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hcHBseShudWxsLFt0aGlzXS5jb25jYXQoW10uc2xpY2UuY2FsbChlKSkpfSxhbmFsb2dvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9LGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbih4LGFyZ3VtZW50cyl9LG1vbm9jaHJvbWF0aWM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihBLGFyZ3VtZW50cyl9LHNwbGl0Y29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKE0sYXJndW1lbnRzKX0sdHJpYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfLGFyZ3VtZW50cyl9LHRldHJhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHcsYXJndW1lbnRzKX19LG4uZnJvbVJhdGlvPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgcj17fTtmb3IodmFyIGkgaW4gdCl0Lmhhc093blByb3BlcnR5KGkpJiYocltpXT0iYSI9PT1pP3RbaV06RCh0W2ldKSk7dD1yfXJldHVybiBuKHQsZSl9LG4uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISghdHx8IWUpJiZuKHQpLnRvUmdiU3RyaW5nKCk9PW4oZSkudG9SZ2JTdHJpbmcoKX0sbi5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gbi5mcm9tUmF0aW8oe3I6RygpLGc6RygpLGI6RygpfSl9LG4ubWl4PWZ1bmN0aW9uKHQsZSxyKXtyPTA9PT1yPzA6cnx8NTA7dmFyIGk9bih0KS50b1JnYigpLGE9bihlKS50b1JnYigpLG89ci8xMDA7cmV0dXJuIG4oe3I6KGEuci1pLnIpKm8raS5yLGc6KGEuZy1pLmcpKm8raS5nLGI6KGEuYi1pLmIpKm8raS5iLGE6KGEuYS1pLmEpKm8raS5hfSl9LG4ucmVhZGFiaWxpdHk9ZnVuY3Rpb24odCxyKXt2YXIgaT1uKHQpLGE9bihyKTtyZXR1cm4oZS5tYXgoaS5nZXRMdW1pbmFuY2UoKSxhLmdldEx1bWluYW5jZSgpKSsuMDUpLyhlLm1pbihpLmdldEx1bWluYW5jZSgpLGEuZ2V0THVtaW5hbmNlKCkpKy4wNSl9LG4uaXNSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvPW4ucmVhZGFiaWxpdHkodCxlKTtzd2l0Y2goYT0hMSxpPWoociksaS5sZXZlbCtpLnNpemUpe2Nhc2UiQUFzbWFsbCI6Y2FzZSJBQUFsYXJnZSI6YT1vPj00LjU7YnJlYWs7Y2FzZSJBQWxhcmdlIjphPW8+PTM7YnJlYWs7Y2FzZSJBQUFzbWFsbCI6YT1vPj03fXJldHVybiBhfSxuLm1vc3RSZWFkYWJsZT1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbD1udWxsLHU9MDtyPXJ8fHt9LGE9ci5pbmNsdWRlRmFsbGJhY2tDb2xvcnMsbz1yLmxldmVsLHM9ci5zaXplO2Zvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKShpPW4ucmVhZGFiaWxpdHkodCxlW2NdKSk+dSYmKHU9aSxsPW4oZVtjXSkpO3JldHVybiBuLmlzUmVhZGFibGUodCxsLHtsZXZlbDpvLHNpemU6c30pfHwhYT9sOihyLmluY2x1ZGVGYWxsYmFja0NvbG9ycz0hMSxuLm1vc3RSZWFkYWJsZSh0LFsiI2ZmZiIsIiMwMDAiXSxyKSl9O3ZhciBZPW4ubmFtZXM9e2FsaWNlYmx1ZToiZjBmOGZmIixhbnRpcXVld2hpdGU6ImZhZWJkNyIsYXF1YToiMGZmIixhcXVhbWFyaW5lOiI3ZmZmZDQiLGF6dXJlOiJmMGZmZmYiLGJlaWdlOiJmNWY1ZGMiLGJpc3F1ZToiZmZlNGM0IixibGFjazoiMDAwIixibGFuY2hlZGFsbW9uZDoiZmZlYmNkIixibHVlOiIwMGYiLGJsdWV2aW9sZXQ6IjhhMmJlMiIsYnJvd246ImE1MmEyYSIsYnVybHl3b29kOiJkZWI4ODciLGJ1cm50c2llbm5hOiJlYTdlNWQiLGNhZGV0Ymx1ZToiNWY5ZWEwIixjaGFydHJldXNlOiI3ZmZmMDAiLGNob2NvbGF0ZToiZDI2OTFlIixjb3JhbDoiZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiNjQ5NWVkIixjb3Juc2lsazoiZmZmOGRjIixjcmltc29uOiJkYzE0M2MiLGN5YW46IjBmZiIsZGFya2JsdWU6IjAwMDA4YiIsZGFya2N5YW46IjAwOGI4YiIsZGFya2dvbGRlbnJvZDoiYjg4NjBiIixkYXJrZ3JheToiYTlhOWE5IixkYXJrZ3JlZW46IjAwNjQwMCIsZGFya2dyZXk6ImE5YTlhOSIsZGFya2toYWtpOiJiZGI3NmIiLGRhcmttYWdlbnRhOiI4YjAwOGIiLGRhcmtvbGl2ZWdyZWVuOiI1NTZiMmYiLGRhcmtvcmFuZ2U6ImZmOGMwMCIsZGFya29yY2hpZDoiOTkzMmNjIixkYXJrcmVkOiI4YjAwMDAiLGRhcmtzYWxtb246ImU5OTY3YSIsZGFya3NlYWdyZWVuOiI4ZmJjOGYiLGRhcmtzbGF0ZWJsdWU6IjQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIyZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGluazoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRpbWdyZXk6IjY5Njk2OSIsZG9kZ2VyYmx1ZToiMWU5MGZmIixmaXJlYnJpY2s6ImIyMjIyMiIsZmxvcmFsd2hpdGU6ImZmZmFmMCIsZm9yZXN0Z3JlZW46IjIyOGIyMiIsZnVjaHNpYToiZjBmIixnYWluc2Jvcm86ImRjZGNkYyIsZ2hvc3R3aGl0ZToiZjhmOGZmIixnb2xkOiJmZmQ3MDAiLGdvbGRlbnJvZDoiZGFhNTIwIixncmF5OiI4MDgwODAiLGdyZWVuOiIwMDgwMDAiLGdyZWVueWVsbG93OiJhZGZmMmYiLGdyZXk6IjgwODA4MCIsaG9uZXlkZXc6ImYwZmZmMCIsaG90cGluazoiZmY2OWI0IixpbmRpYW5yZWQ6ImNkNWM1YyIsaW5kaWdvOiI0YjAwODIiLGl2b3J5OiJmZmZmZjAiLGtoYWtpOiJmMGU2OGMiLGxhdmVuZGVyOiJlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6ImZmZjBmNSIsbGF3bmdyZWVuOiI3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiZmZmYWNkIixsaWdodGJsdWU6ImFkZDhlNiIsbGlnaHRjb3JhbDoiZjA4MDgwIixsaWdodGN5YW46ImUwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ImZhZmFkMiIsbGlnaHRncmF5OiJkM2QzZDMiLGxpZ2h0Z3JlZW46IjkwZWU5MCIsbGlnaHRncmV5OiJkM2QzZDMiLGxpZ2h0cGluazoiZmZiNmMxIixsaWdodHNhbG1vbjoiZmZhMDdhIixsaWdodHNlYWdyZWVuOiIyMGIyYWEiLGxpZ2h0c2t5Ymx1ZToiODdjZWZhIixsaWdodHNsYXRlZ3JheToiNzg5IixsaWdodHNsYXRlZ3JleToiNzg5IixsaWdodHN0ZWVsYmx1ZToiYjBjNGRlIixsaWdodHllbGxvdzoiZmZmZmUwIixsaW1lOiIwZjAiLGxpbWVncmVlbjoiMzJjZDMyIixsaW5lbjoiZmFmMGU2IixtYWdlbnRhOiJmMGYiLG1hcm9vbjoiODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiI2NmNkYWEiLG1lZGl1bWJsdWU6IjAwMDBjZCIsbWVkaXVtb3JjaGlkOiJiYTU1ZDMiLG1lZGl1bXB1cnBsZToiOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiM2NiMzcxIixtZWRpdW1zbGF0ZWJsdWU6IjdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IjAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiI0OGQxY2MiLG1lZGl1bXZpb2xldHJlZDoiYzcxNTg1IixtaWRuaWdodGJsdWU6IjE5MTk3MCIsbWludGNyZWFtOiJmNWZmZmEiLG1pc3R5cm9zZToiZmZlNGUxIixtb2NjYXNpbjoiZmZlNGI1IixuYXZham93aGl0ZToiZmZkZWFkIixuYXZ5OiIwMDAwODAiLG9sZGxhY2U6ImZkZjVlNiIsb2xpdmU6IjgwODAwMCIsb2xpdmVkcmFiOiI2YjhlMjMiLG9yYW5nZToiZmZhNTAwIixvcmFuZ2VyZWQ6ImZmNDUwMCIsb3JjaGlkOiJkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6ImVlZThhYSIscGFsZWdyZWVuOiI5OGZiOTgiLHBhbGV0dXJxdW9pc2U6ImFmZWVlZSIscGFsZXZpb2xldHJlZDoiZGI3MDkzIixwYXBheWF3aGlwOiJmZmVmZDUiLHBlYWNocHVmZjoiZmZkYWI5IixwZXJ1OiJjZDg1M2YiLHBpbms6ImZmYzBjYiIscGx1bToiZGRhMGRkIixwb3dkZXJibHVlOiJiMGUwZTYiLHB1cnBsZToiODAwMDgwIixyZWJlY2NhcHVycGxlOiI2NjMzOTkiLHJlZDoiZjAwIixyb3N5YnJvd246ImJjOGY4ZiIscm95YWxibHVlOiI0MTY5ZTEiLHNhZGRsZWJyb3duOiI4YjQ1MTMiLHNhbG1vbjoiZmE4MDcyIixzYW5keWJyb3duOiJmNGE0NjAiLHNlYWdyZWVuOiIyZThiNTciLHNlYXNoZWxsOiJmZmY1ZWUiLHNpZW5uYToiYTA1MjJkIixzaWx2ZXI6ImMwYzBjMCIsc2t5Ymx1ZToiODdjZWViIixzbGF0ZWJsdWU6IjZhNWFjZCIsc2xhdGVncmF5OiI3MDgwOTAiLHNsYXRlZ3JleToiNzA4MDkwIixzbm93OiJmZmZhZmEiLHNwcmluZ2dyZWVuOiIwMGZmN2YiLHN0ZWVsYmx1ZToiNDY4MmI0Iix0YW46ImQyYjQ4YyIsdGVhbDoiMDA4MDgwIix0aGlzdGxlOiJkOGJmZDgiLHRvbWF0bzoiZmY2MzQ3Iix0dXJxdW9pc2U6IjQwZTBkMCIsdmlvbGV0OiJlZTgyZWUiLHdoZWF0OiJmNWRlYjMiLHdoaXRlOiJmZmYiLHdoaXRlc21va2U6ImY1ZjVmNSIseWVsbG93OiJmZjAiLHllbGxvd2dyZWVuOiI5YWNkMzIifSxYPW4uaGV4TmFtZXM9ZnVuY3Rpb24odCl7dmFyIGU9e307Zm9yKHZhciByIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKGVbdFtyXV09cik7cmV0dXJuIGV9KFkpLFc9ZnVuY3Rpb24oKXt2YXIgdD0iKD86Wy1cXCtdP1xcZCpcXC5cXGQrJT8pfCg/OlstXFwrXT9cXGQrJT8pIixlPSJbXFxzfFxcKF0rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVxccypcXCk/IixyPSJbXFxzfFxcKF0rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVssfFxcc10rKCIrdCsiKVxccypcXCk/IjtyZXR1cm57Q1NTX1VOSVQ6bmV3IFJlZ0V4cCh0KSxyZ2I6bmV3IFJlZ0V4cCgicmdiIitlKSxyZ2JhOm5ldyBSZWdFeHAoInJnYmEiK3IpLGhzbDpuZXcgUmVnRXhwKCJoc2wiK2UpLGhzbGE6bmV3IFJlZ0V4cCgiaHNsYSIrciksaHN2Om5ldyBSZWdFeHAoImhzdiIrZSksaHN2YTpuZXcgUmVnRXhwKCJoc3ZhIityKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfX0oKTt2b2lkIDAhPT1yJiZyLmV4cG9ydHM/ci5leHBvcnRzPW46ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoZnVuY3Rpb24oKXtyZXR1cm4gbn0pOndpbmRvdy50aW55Y29sb3I9bn0oTWF0aCl9LHt9XSw1MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPW8oZ2V0Q29tcHV0ZWRTdHlsZSh0KS5nZXRQcm9wZXJ0eVZhbHVlKGUpKTtyZXR1cm4gclswXSphKHJbMV0sdCl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGVbImZvbnQtc2l6ZSJdPSIxMjgiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgaT1uKHIsImZvbnQtc2l6ZSIpLzEyODtyZXR1cm4gZS5yZW1vdmVDaGlsZChyKSxpfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fCJweCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZSIlIjpyZXR1cm4gZS5jbGllbnRIZWlnaHQvMTAwO2Nhc2UiY2giOmNhc2UiZXgiOnJldHVybiBpKHQsZSk7Y2FzZSJlbSI6cmV0dXJuIG4oZSwiZm9udC1zaXplIik7Y2FzZSJyZW0iOnJldHVybiBuKGRvY3VtZW50LmJvZHksImZvbnQtc2l6ZSIpO2Nhc2UidnciOnJldHVybiB3aW5kb3cuaW5uZXJXaWR0aC8xMDA7Y2FzZSJ2aCI6cmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodC8xMDA7Y2FzZSJ2bWluIjpyZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJ2bWF4IjpyZXR1cm4gTWF0aC5tYXgod2luZG93LmlubmVyV2lkdGgsd2luZG93LmlubmVySGVpZ2h0KS8xMDA7Y2FzZSJpbiI6cmV0dXJuIHM7Y2FzZSJjbSI6cmV0dXJuIHMvMi41NDtjYXNlIm1tIjpyZXR1cm4gcy8yNS40O2Nhc2UicHQiOnJldHVybiBzLzcyO2Nhc2UicGMiOnJldHVybiBzLzZ9cmV0dXJuIDF9dmFyIG89dCgicGFyc2UtdW5pdCIpO2UuZXhwb3J0cz1hO3ZhciBzPTk2fSx7InBhcnNlLXVuaXQiOjQ3M31dLDUzNDpbZnVuY3Rpb24oZSxyLG4peyFmdW5jdGlvbihlLGkpeyJvYmplY3QiPT10eXBlb2YgbiYmdm9pZCAwIT09cj9pKG4pOiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmFtZD90KFsiZXhwb3J0cyJdLGkpOmkoZS50b3BvanNvbj1lLnRvcG9qc29ufHx7fSl9KHRoaXMsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXt2YXIgbj1lLmlkLGk9ZS5iYm94LGE9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxvPXIodCxlKTtyZXR1cm4gbnVsbD09biYmbnVsbD09aT97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczphLGdlb21ldHJ5Om99Om51bGw9PWk/e3R5cGU6IkZlYXR1cmUiLGlkOm4scHJvcGVydGllczphLGdlb21ldHJ5Om99Ont0eXBlOiJGZWF0dXJlIixpZDpuLGJib3g6aSxwcm9wZXJ0aWVzOmEsZ2VvbWV0cnk6b319ZnVuY3Rpb24gcih0LGUpe2Z1bmN0aW9uIHIodCxlKXtlLmxlbmd0aCYmZS5wb3AoKTtmb3IodmFyIHI9aFt0PDA/fnQ6dF0sbj0wLGk9ci5sZW5ndGg7bjxpOysrbillLnB1c2godShyW25dLnNsaWNlKCksbikpO3Q8MCYmYyhlLGkpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHUodC5zbGljZSgpKX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1bXSxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXIodFtuXSxlKTtyZXR1cm4gZS5sZW5ndGg8MiYmZS5wdXNoKGVbMF0uc2xpY2UoKSksZX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT1pKHQpO2UubGVuZ3RoPDQ7KWUucHVzaChlWzBdLnNsaWNlKCkpO3JldHVybiBlfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQubWFwKGEpfWZ1bmN0aW9uIHModCl7dmFyIGUscj10LnR5cGU7c3dpdGNoKHIpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpyLGdlb21ldHJpZXM6dC5nZW9tZXRyaWVzLm1hcChzKX07Y2FzZSJQb2ludCI6ZT1uKHQuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6ZT10LmNvb3JkaW5hdGVzLm1hcChuKTticmVhaztjYXNlIkxpbmVTdHJpbmciOmU9aSh0LmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjplPXQuYXJjcy5tYXAoaSk7YnJlYWs7Y2FzZSJQb2x5Z29uIjplPW8odC5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZT10LmFyY3MubWFwKG8pO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6cixjb29yZGluYXRlczplfX12YXIgdT1sKHQpLGg9dC5hcmNzO3JldHVybiBzKGUpfWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGEsbztpZihhcmd1bWVudHMubGVuZ3RoPjEpbj1pKHQsZSxyKTtlbHNlIGZvcihhPTAsbj1uZXcgQXJyYXkobz10LmFyY3MubGVuZ3RoKTthPG87KythKW5bYV09YTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixhcmNzOmYodCxuKX19ZnVuY3Rpb24gaSh0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT10PDA/fnQ6dDsoY1tlXXx8KGNbZV09W10pKS5wdXNoKHtpOnQsZzpsfSl9ZnVuY3Rpb24gaSh0KXt0LmZvckVhY2gobil9ZnVuY3Rpb24gYSh0KXt0LmZvckVhY2goaSl9ZnVuY3Rpb24gbyh0KXt0LmZvckVhY2goYSl9ZnVuY3Rpb24gcyh0KXtzd2l0Y2gobD10LHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKHMpO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6aSh0LmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmEodC5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6byh0LmFyY3MpfX12YXIgbCx1PVtdLGM9W107cmV0dXJuIHMoZSksYy5mb3JFYWNoKG51bGw9PXI/ZnVuY3Rpb24odCl7dS5wdXNoKHRbMF0uaSl9OmZ1bmN0aW9uKHQpe3IodFswXS5nLHRbdC5sZW5ndGgtMV0uZykmJnUucHVzaCh0WzBdLmkpfSksdX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZSxyPS0xLG49dC5sZW5ndGgsaT10W24tMV0sYT0wOysrcjxuOyllPWksaT10W3JdLGErPWVbMF0qaVsxXS1lWzFdKmlbMF07cmV0dXJuIE1hdGguYWJzKGEpfWZ1bmN0aW9uIG8odCxlKXtmdW5jdGlvbiBuKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjp0Lmdlb21ldHJpZXMuZm9yRWFjaChuKTticmVhaztjYXNlIlBvbHlnb24iOmkodC5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6dC5hcmNzLmZvckVhY2goaSl9fWZ1bmN0aW9uIGkodCl7dC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZm9yRWFjaChmdW5jdGlvbihlKXsoc1tlPWU8MD9+ZTplXXx8KHNbZV09W10pKS5wdXNoKHQpfSl9KSxsLnB1c2godCl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gYShyKHQse3R5cGU6IlBvbHlnb24iLGFyY3M6W2VdfSkuY29vcmRpbmF0ZXNbMF0pfXZhciBzPXt9LGw9W10sdT1bXTtyZXR1cm4gZS5mb3JFYWNoKG4pLGwuZm9yRWFjaChmdW5jdGlvbih0KXtpZighdC5fKXt2YXIgZT1bXSxyPVt0XTtmb3IodC5fPTEsdS5wdXNoKGUpO3Q9ci5wb3AoKTspZS5wdXNoKHQpLHQuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7c1t0PDA/fnQ6dF0uZm9yRWFjaChmdW5jdGlvbih0KXt0Ll98fCh0Ll89MSxyLnB1c2godCkpfSl9KX0pfX0pLGwuZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkse3R5cGU6Ik11bHRpUG9seWdvbiIsYXJjczp1Lm1hcChmdW5jdGlvbihlKXt2YXIgcixuPVtdO2lmKGUuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NbdDwwP350OnRdLmxlbmd0aDwyJiZuLnB1c2godCl9KX0pfSksbj1mKHQsbiksKHI9bi5sZW5ndGgpPjEpZm9yKHZhciBpLGEsbD0xLHU9byhuWzBdKTtsPHI7KytsKShpPW8obltsXSkpPnUmJihhPW5bMF0sblswXT1uW2xdLG5bbF09YSx1PWkpO3JldHVybiBufSl9fXZhciBzPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxsPWZ1bmN0aW9uKHQpe2lmKG51bGw9PShlPXQudHJhbnNmb3JtKSlyZXR1cm4gczt2YXIgZSxyLG4saT1lLnNjYWxlWzBdLGE9ZS5zY2FsZVsxXSxvPWUudHJhbnNsYXRlWzBdLGw9ZS50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fChyPW49MCksdFswXT0ocis9dFswXSkqaStvLHRbMV09KG4rPXRbMV0pKmErbCx0fX0sdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3NbMF09dFswXSxzWzFdPXRbMV0sbyhzKSxzWzBdPHUmJih1PXNbMF0pLHNbMF0+aCYmKGg9c1swXSksc1sxXTxjJiYoYz1zWzFdKSxzWzFdPmYmJihmPXNbMV0pfWZ1bmN0aW9uIHIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKHIpO2JyZWFrO2Nhc2UiUG9pbnQiOmUodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2goZSl9fXZhciBuPXQuYmJveDtpZighbil7dmFyIGksYSxvPWwodCkscz1uZXcgQXJyYXkoMiksdT0xLzAsYz11LGg9LXUsZj0tdTt0LmFyY3MuZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9LTEscj10Lmxlbmd0aDsrK2U8cjspaT10W2VdLHNbMF09aVswXSxzWzFdPWlbMV0sbyhzLGUpLHNbMF08dSYmKHU9c1swXSksc1swXT5oJiYoaD1zWzBdKSxzWzFdPGMmJihjPXNbMV0pLHNbMV0+ZiYmKGY9c1sxXSl9KTtmb3IoYSBpbiB0Lm9iamVjdHMpcih0Lm9iamVjdHNbYV0pO249dC5iYm94PVt1LGMsaCxmXX1yZXR1cm4gbn0sYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPXQubGVuZ3RoLGk9bi1lO2k8LS1uOylyPXRbaV0sdFtpKytdPXRbbl0sdFtuXT1yfSxoPWZ1bmN0aW9uKHQscil7cmV0dXJuIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1yLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpyLmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHQscil9KX06ZSh0LHIpfSxmPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3JldHVybiB0LnRyYW5zZm9ybT8ocj1bMCwwXSxuLmZvckVhY2goZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpOnI9bltuLmxlbmd0aC0xXSxlPDA/W3IsaV06W2kscl19ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgciBpbiB0KXt2YXIgbj10W3JdO2RlbGV0ZSBlW24uc3RhcnRdLGRlbGV0ZSBuLnN0YXJ0LGRlbGV0ZSBuLmVuZCxuLmZvckVhY2goZnVuY3Rpb24odCl7aVt0PDA/fnQ6dF09MX0pLHMucHVzaChuKX19dmFyIGk9e30sYT17fSxvPXt9LHM9W10sbD0tMTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7dmFyIGksYT10LmFyY3NbcjwwP35yOnJdO2EubGVuZ3RoPDMmJiFhWzFdWzBdJiYhYVsxXVsxXSYmKGk9ZVsrK2xdLGVbbF09cixlW25dPWkpfSksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlLG4saT1yKHQpLHM9aVswXSxsPWlbMV07aWYoZT1vW3NdKWlmKGRlbGV0ZSBvW2UuZW5kXSxlLnB1c2godCksZS5lbmQ9bCxuPWFbbF0pe2RlbGV0ZSBhW24uc3RhcnRdO3ZhciB1PW49PT1lP2U6ZS5jb25jYXQobik7YVt1LnN0YXJ0PWUuc3RhcnRdPW9bdS5lbmQ9bi5lbmRdPXV9ZWxzZSBhW2Uuc3RhcnRdPW9bZS5lbmRdPWU7ZWxzZSBpZihlPWFbbF0paWYoZGVsZXRlIGFbZS5zdGFydF0sZS51bnNoaWZ0KHQpLGUuc3RhcnQ9cyxuPW9bc10pe2RlbGV0ZSBvW24uZW5kXTt2YXIgYz1uPT09ZT9lOm4uY29uY2F0KGUpO2FbYy5zdGFydD1uLnN0YXJ0XT1vW2MuZW5kPWUuZW5kXT1jfWVsc2UgYVtlLnN0YXJ0XT1vW2UuZW5kXT1lO2Vsc2UgZT1bdF0sYVtlLnN0YXJ0PXNdPW9bZS5lbmQ9bF09ZX0pLG4obyxhKSxuKGEsbyksZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lbdDwwP350OnRdfHxzLnB1c2goW3RdKX0pLHN9LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHA9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG09ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXIrbj4+PjE7dFtpXTxlP3I9aSsxOm49aX1yZXR1cm4gcn0sdj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Q8MCYmKHQ9fnQpO3ZhciByPWlbdF07cj9yLnB1c2goZSk6aVt0XT1bZV19KX1mdW5jdGlvbiByKHQscil7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UodCxyKX0pfWZ1bmN0aW9uIG4odCxlKXsiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXQudHlwZT90Lmdlb21ldHJpZXMuZm9yRWFjaChmdW5jdGlvbih0KXtuKHQsZSl9KTp0LnR5cGUgaW4gbyYmb1t0LnR5cGVdKHQuYXJjcyxlKX12YXIgaT17fSxhPXQubWFwKGZ1bmN0aW9uKCl7cmV0dXJuW119KSxvPXtMaW5lU3RyaW5nOmUsTXVsdGlMaW5lU3RyaW5nOnIsUG9seWdvbjpyLE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtyKHQsZSl9KX19O3QuZm9yRWFjaChuKTtmb3IodmFyIHMgaW4gaSlmb3IodmFyIGw9aVtzXSx1PWwubGVuZ3RoLGM9MDtjPHU7KytjKWZvcih2YXIgaD1jKzE7aDx1OysraCl7dmFyIGYsZD1sW2NdLHA9bFtoXTsoZj1hW2RdKVtzPW0oZixwKV0hPT1wJiZmLnNwbGljZShzLDAscCksKGY9YVtwXSlbcz1tKGYsZCldIT09ZCYmZi5zcGxpY2UocywwLGQpfXJldHVybiBhfSxnPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt0WzBdPU1hdGgucm91bmQoKHRbMF0tbykvcyksdFsxXT1NYXRoLnJvdW5kKCh0WzFdLWwpL2MpfWZ1bmN0aW9uIG4odCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKG4pO2JyZWFrO2Nhc2UiUG9pbnQiOnIodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gocil9fWlmKCEoKGU9TWF0aC5mbG9vcihlKSk+PTIpKXRocm93IG5ldyBFcnJvcigibiBtdXN0IGJlIFx1MjI2NTIiKTtpZih0LnRyYW5zZm9ybSl0aHJvdyBuZXcgRXJyb3IoImFscmVhZHkgcXVhbnRpemVkIik7dmFyIGksYT11KHQpLG89YVswXSxzPShhWzJdLW8pLyhlLTEpfHwxLGw9YVsxXSxjPShhWzNdLWwpLyhlLTEpfHwxO3QuYXJjcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT0xLGE9MSx1PXQubGVuZ3RoLGg9dFswXSxmPWhbMF09TWF0aC5yb3VuZCgoaFswXS1vKS9zKSxkPWhbMV09TWF0aC5yb3VuZCgoaFsxXS1sKS9jKTtpPHU7KytpKWg9dFtpXSxyPU1hdGgucm91bmQoKGhbMF0tbykvcyksbj1NYXRoLnJvdW5kKChoWzFdLWwpL2MpLHI9PT1mJiZuPT09ZHx8KGU9dFthKytdLGVbMF09ci1mLGY9cixlWzFdPW4tZCxkPW4pO2E8MiYmKGU9dFthKytdLGVbMF09MCxlWzFdPTApLHQubGVuZ3RoPWF9KTtmb3IoaSBpbiB0Lm9iamVjdHMpbih0Lm9iamVjdHNbaV0pO3JldHVybiB0LnRyYW5zZm9ybT17c2NhbGU6W3MsY10sdHJhbnNsYXRlOltvLGxdfSx0fSx5PWZ1bmN0aW9uKHQpe2lmKG51bGw9PShlPXQudHJhbnNmb3JtKSlyZXR1cm4gczt2YXIgZSxyLG4saT1lLnNjYWxlWzBdLGE9ZS5zY2FsZVsxXSxvPWUudHJhbnNsYXRlWzBdLGw9ZS50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgcz1NYXRoLnJvdW5kKCh0WzBdLW8pL2kpLHU9TWF0aC5yb3VuZCgodFsxXS1sKS9hKTtyZXR1cm4gdFswXT1zLXIscj1zLHRbMV09dS1uLG49dSx0fX07dC5iYm94PXUsdC5mZWF0dXJlPWgsdC5tZXNoPWQsdC5tZXNoQXJjcz1uLHQubWVyZ2U9cCx0Lm1lcmdlQXJjcz1vLHQubmVpZ2hib3JzPXYsdC5xdWFudGl6ZT1nLHQudHJhbnNmb3JtPWwsdC51bnRyYW5zZm9ybT15LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pfSx7fV0sNTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYodDwwKXJldHVybltdO2lmKDA9PT10KXJldHVybltbMF1dO2Zvcih2YXIgZT0wfE1hdGgucm91bmQobyh0KzEpKSxyPVtdLG49MDtuPGU7KytuKXtmb3IodmFyIHM9aS51bnJhbmsodCxuKSxsPVswXSx1PTAsYz0wO2M8cy5sZW5ndGg7KytjKXUrPTE8PHNbY10sbC5wdXNoKHUpO2Eocyk8MSYmKGxbMF09dSxsW3RdPTApLHIucHVzaChsKX1yZXR1cm4gcn1lLmV4cG9ydHM9bjt2YXIgaT10KCJwZXJtdXRhdGlvbi1yYW5rIiksYT10KCJwZXJtdXRhdGlvbi1wYXJpdHkiKSxvPXQoImdhbW1hIil9LHtnYW1tYToxMzQsInBlcm11dGF0aW9uLXBhcml0eSI6NDc3LCJwZXJtdXRhdGlvbi1yYW5rIjo0Nzh9XSw1MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0LDIpK01hdGgucG93KGUsMikrTWF0aC5wb3cociwyKSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgtMSx0KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT1NYXRoLmFicyh0WzBdKSxyPU1hdGguYWJzKHRbMV0pLG49TWF0aC5hYnModFsyXSksaT1bMCwwLDBdO2U+TWF0aC5tYXgocixuKT9pWzJdPTE6cj5NYXRoLm1heChlLG4pP2lbMF09MTppWzFdPTE7Zm9yKHZhciBhPTAsbz0wLHM9MDtzPDM7KytzKWErPXRbc10qdFtzXSxvKz1pW3NdKnRbc107Zm9yKHZhciBzPTA7czwzOysrcylpW3NdLT1vL2EqdFtzXTtyZXR1cm4gZihpLGkpLGl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSxvLHMpe3RoaXMuY2VudGVyPWwociksdGhpcy51cD1sKG4pLHRoaXMucmlnaHQ9bChpKSx0aGlzLnJhZGl1cz1sKFthXSksdGhpcy5hbmdsZT1sKFtvLHNdKSx0aGlzLmFuZ2xlLmJvdW5kcz1bWy0xLzAsLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgdT0wO3U8MTY7Kyt1KXRoaXMuY29tcHV0ZWRNYXRyaXhbdV09LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9ZnVuY3Rpb24gcyh0KXt0PXR8fHt9O3ZhciBlPXQuY2VudGVyfHxbMCwwLDBdLHI9dC51cHx8WzAsMSwwXSxpPXQucmlnaHR8fGEocikscz10LnJhZGl1c3x8MSxsPXQudGhldGF8fDAsdT10LnBoaXx8MDtpZihlPVtdLnNsaWNlLmNhbGwoZSwwLDMpLHI9W10uc2xpY2UuY2FsbChyLDAsMyksZihyLHIpLGk9W10uc2xpY2UuY2FsbChpLDAsMyksZihpLGkpLCJleWUiaW4gdCl7dmFyIGM9dC5leWUscD1bY1swXS1lWzBdLGNbMV0tZVsxXSxjWzJdLWVbMl1dO2goaSxwLHIpLG4oaVswXSxpWzFdLGlbMl0pPDFlLTY/aT1hKHIpOmYoaSxpKSxzPW4ocFswXSxwWzFdLHBbMl0pO3ZhciBtPWQocixwKS9zLHY9ZChpLHApL3M7dT1NYXRoLmFjb3MobSksbD1NYXRoLmFjb3Modil9cmV0dXJuIHM9TWF0aC5sb2cocyksbmV3IG8odC56b29tTWluLHQuem9vbU1heCxlLHIsaSxzLGwsdSl9ZS5leHBvcnRzPXM7dmFyIGw9dCgiZmlsdGVyZWQtdmVjdG9yIiksdT10KCJnbC1tYXQ0L2ludmVydCIpLGM9dCgiZ2wtbWF0NC9yb3RhdGUiKSxoPXQoImdsLXZlYzMvY3Jvc3MiKSxmPXQoImdsLXZlYzMvbm9ybWFsaXplIiksZD10KCJnbC12ZWMzL2RvdCIpLHA9by5wcm90b3R5cGU7cC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LGk9MCxhPTAsbz0wO288MzsrK28pYSs9ZVtvXSpyW29dLGkrPWVbb10qZVtvXTtmb3IodmFyIHM9TWF0aC5zcXJ0KGkpLGw9MCxvPTA7bzwzOysrbylyW29dLT1lW29dKmEvaSxsKz1yW29dKnJbb10sZVtvXS89cztmb3IodmFyIHU9TWF0aC5zcXJ0KGwpLG89MDtvPDM7KytvKXJbb10vPXU7dmFyIGM9dGhpcy5jb21wdXRlZFRvd2FyZDtoKGMsZSxyKSxmKGMsYyk7Zm9yKHZhciBkPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLHA9dGhpcy5jb21wdXRlZEFuZ2xlWzBdLG09dGhpcy5jb21wdXRlZEFuZ2xlWzFdLHY9TWF0aC5jb3MocCksZz1NYXRoLnNpbihwKSx5PU1hdGguY29zKG0pLGI9TWF0aC5zaW4obSkseD10aGlzLmNvbXB1dGVkQ2VudGVyLF89dip5LHc9Zyp5LE09YixrPS12KmIsQT0tZypiLFQ9eSxTPXRoaXMuY29tcHV0ZWRFeWUsRT10aGlzLmNvbXB1dGVkTWF0cml4LG89MDtvPDM7KytvKXt2YXIgTD1fKnJbb10rdypjW29dK00qZVtvXTtFWzQqbysxXT1rKnJbb10rQSpjW29dK1QqZVtvXSxFWzQqbysyXT1MLEVbNCpvKzNdPTB9dmFyIEM9RVsxXSx6PUVbNV0sST1FWzldLEQ9RVsyXSxQPUVbNl0sTz1FWzEwXSxSPXoqTy1JKlAsRj1JKkQtQypPLGo9QypQLXoqRCxOPW4oUixGLGopO1IvPU4sRi89TixqLz1OLEVbMF09UixFWzRdPUYsRVs4XT1qO2Zvcih2YXIgbz0wO288MzsrK28pU1tvXT14W29dK0VbMis0Km9dKmQ7Zm9yKHZhciBvPTA7bzwzOysrbyl7Zm9yKHZhciBsPTAsQj0wO0I8MzsrK0IpbCs9RVtvKzQqQl0qU1tCXTtFWzEyK29dPS1sfUVbMTVdPTF9LHAuZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9O3ZhciBtPVswLDAsMF07cC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5hbmdsZS5tb3ZlKHQsZSxyKSxuKXt0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4O21bMF09aVsyXSxtWzFdPWlbNl0sbVsyXT1pWzEwXTtmb3IodmFyIGE9dGhpcy5jb21wdXRlZFVwLG89dGhpcy5jb21wdXRlZFJpZ2h0LHM9dGhpcy5jb21wdXRlZFRvd2FyZCxsPTA7bDwzOysrbClpWzQqbF09YVtsXSxpWzQqbCsxXT1vW2xdLGlbNCpsKzJdPXNbbF07YyhpLGksbixtKTtmb3IodmFyIGw9MDtsPDM7KytsKWFbbF09aVs0KmxdLG9bbF09aVs0KmwrMV07dGhpcy51cC5zZXQodCxhWzBdLGFbMV0sYVsyXSksdGhpcy5yaWdodC5zZXQodCxvWzBdLG9bMV0sb1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixpKXtlPWV8fDAscj1yfHwwLGk9aXx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgYT10aGlzLmNvbXB1dGVkTWF0cml4LG89KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGFbMV0pLHM9YVs1XSxsPWFbOV0sdT1uKG8scyxsKTtvLz11LHMvPXUsbC89dTt2YXIgYz1hWzBdLGg9YVs0XSxmPWFbOF0sZD1jKm8raCpzK2YqbDtjLT1vKmQsaC09cypkLGYtPWwqZDt2YXIgcD1uKGMsaCxmKTtjLz1wLGgvPXAsZi89cDt2YXIgbT1jKmUrbypyLHY9aCplK3MqcixnPWYqZStsKnI7dGhpcy5jZW50ZXIubW92ZSh0LG0sdixnKTt2YXIgeT1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt5PU1hdGgubWF4KDFlLTQseStpKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyh5KSl9LHAudHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuY2VudGVyLm1vdmUodCxlfHwwLHJ8fDAsbnx8MCl9LHAuc2V0TWF0cml4PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPTE7Im51bWJlciI9PXR5cGVvZiByJiYobz0wfHIpLChvPDB8fG8+MykmJihvPTEpO3ZhciBzPShvKzIpJTM7ZXx8KHRoaXMucmVjYWxjTWF0cml4KHQpLGU9dGhpcy5jb21wdXRlZE1hdHJpeCk7dmFyIGw9ZVtvXSxjPWVbbys0XSxoPWVbbys4XTtpZihhKXt2YXIgZj1NYXRoLmFicyhsKSxkPU1hdGguYWJzKGMpLHA9TWF0aC5hYnMoaCksbT1NYXRoLm1heChmLGQscCk7Zj09PW0/KGw9bDwwPy0xOjEsYz1oPTApOnA9PT1tPyhoPWg8MD8tMToxLGw9Yz0wKTooYz1jPDA/LTE6MSxsPWg9MCl9ZWxzZXt2YXIgdj1uKGwsYyxoKTtsLz12LGMvPXYsaC89dn12YXIgZz1lW3NdLHk9ZVtzKzRdLGI9ZVtzKzhdLHg9ZypsK3kqYytiKmg7Zy09bCp4LHktPWMqeCxiLT1oKng7dmFyIF89bihnLHksYik7Zy89Xyx5Lz1fLGIvPV87dmFyIHc9YypiLWgqeSxNPWgqZy1sKmIsaz1sKnktYypnLEE9bih3LE0sayk7dy89QSxNLz1BLGsvPUEsdGhpcy5jZW50ZXIuanVtcCh0LHEsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LGwsYyxoKSx0aGlzLnJpZ2h0Lmp1bXAodCxnLHksYik7dmFyIFQsUztpZigyPT09byl7dmFyIEU9ZVsxXSxMPWVbNV0sQz1lWzldLHo9RSpnK0wqeStDKmIsST1FKncrTCpNK0MqaztUPVI8MD8tTWF0aC5QSS8yOk1hdGguUEkvMixTPU1hdGguYXRhbjIoSSx6KX1lbHNle3ZhciBEPWVbMl0sUD1lWzZdLE89ZVsxMF0sUj1EKmwrUCpjK08qaCxGPUQqZytQKnkrTypiLGo9RCp3K1AqTStPKms7VD1NYXRoLmFzaW4oaShSKSksUz1NYXRoLmF0YW4yKGosRil9dGhpcy5hbmdsZS5qdW1wKHQsUyxUKSx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgTj1lWzJdLEI9ZVs2XSxVPWVbMTBdLFY9dGhpcy5jb21wdXRlZE1hdHJpeDt1KFYsZSk7dmFyIEg9VlsxNV0scT1WWzEyXS9ILEc9VlsxM10vSCxZPVZbMTRdL0gsWD1NYXRoLmV4cCh0aGlzLmNvbXB1dGVkUmFkaXVzWzBdKTt0aGlzLmNlbnRlci5qdW1wKHQscS1OKlgsRy1CKlgsWS1VKlgpfSxwLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy51cC5sYXN0VCgpLHRoaXMucmlnaHQubGFzdFQoKSx0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuYW5nbGUubGFzdFQoKSl9LHAuaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMudXAuaWRsZSh0KSx0aGlzLnJpZ2h0LmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KSx0aGlzLmFuZ2xlLmlkbGUodCl9LHAuZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuZmx1c2godCksdGhpcy51cC5mbHVzaCh0KSx0aGlzLnJpZ2h0LmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMuYW5nbGUuZmx1c2godCl9LHAuc2V0RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtlPjAmJnRoaXMucmFkaXVzLnNldCh0LE1hdGgubG9nKGUpKX0scC5sb29rQXQ9ZnVuY3Rpb24odCxlLHIsYSl7dGhpcy5yZWNhbGNNYXRyaXgodCksZT1lfHx0aGlzLmNvbXB1dGVkRXllLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixhPWF8fHRoaXMuY29tcHV0ZWRVcDt2YXIgbz1hWzBdLHM9YVsxXSxsPWFbMl0sdT1uKG8scyxsKTtpZighKHU8MWUtNikpe28vPXUscy89dSxsLz11O3ZhciBjPWVbMF0tclswXSxoPWVbMV0tclsxXSxmPWVbMl0tclsyXSxkPW4oYyxoLGYpO2lmKCEoZDwxZS02KSl7Yy89ZCxoLz1kLGYvPWQ7dmFyIHA9dGhpcy5jb21wdXRlZFJpZ2h0LG09cFswXSx2PXBbMV0sZz1wWzJdLHk9byptK3MqditsKmc7bS09eSpvLHYtPXkqcyxnLT15Kmw7dmFyIGI9bihtLHYsZyk7aWYoIShiPC4wMSYmKG09cypmLWwqaCx2PWwqYy1vKmYsZz1vKmgtcypjLChiPW4obSx2LGcpKTwxZS02KSkpe20vPWIsdi89YixnLz1iLHRoaXMudXAuc2V0KHQsbyxzLGwpLHRoaXMucmlnaHQuc2V0KHQsbSx2LGcpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKSx0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhkKSk7dmFyIHg9cypnLWwqdixfPWwqbS1vKmcsdz1vKnYtcyptLE09bih4LF8sdyk7eC89TSxfLz1NLHcvPU07dmFyIGs9bypjK3MqaCtsKmYsQT1tKmMrdipoK2cqZixUPXgqYytfKmgrdypmLFM9TWF0aC5hc2luKGkoaykpLEU9TWF0aC5hdGFuMihULEEpLEw9dGhpcy5hbmdsZS5fc3RhdGUsQz1MW0wubGVuZ3RoLTFdLHo9TFtMLmxlbmd0aC0yXTtDJT0yKk1hdGguUEk7dmFyIEk9TWF0aC5hYnMoQysyKk1hdGguUEktRSksRD1NYXRoLmFicyhDLUUpLFA9TWF0aC5hYnMoQy0yKk1hdGguUEktRSk7STxEJiYoQys9MipNYXRoLlBJKSxQPEQmJihDLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksQyx6KSx0aGlzLmFuZ2xlLnNldCh0LEUsUyl9fX19fSx7ImZpbHRlcmVkLXZlY3RvciI6MTMxLCJnbC1tYXQ0L2ludmVydCI6MTc5LCJnbC1tYXQ0L3JvdGF0ZSI6MTgzLCJnbC12ZWMzL2Nyb3NzIjoyNzAsImdsLXZlYzMvZG90IjoyNzEsImdsLXZlYzMvbm9ybWFsaXplIjoyNzR9XSw1Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49dCplLGE9aSp0LG89YS10LHM9YS1vLGw9dC1zLHU9aSplLGM9dS1lLGg9dS1jLGY9ZS1oLGQ9bi1zKmgscD1kLWwqaCxtPXAtcypmLHY9bCpmLW07cmV0dXJuIHI/KHJbMF09dixyWzFdPW4scik6W3Ysbl19ZS5leHBvcnRzPW47dmFyIGk9KyhNYXRoLnBvdygyLDI3KSsxKX0se31dLDUzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj10K2UsaT1uLXQsYT1uLWksbz1lLWkscz10LWE7cmV0dXJuIHI/KHJbMF09cytvLHJbMV09bixyKTpbcytvLG5dfWUuZXhwb3J0cz1ufSx7fV0sNTM5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPXkubG9nMihlKTt3W3JdLnB1c2godCl9fWZ1bmN0aW9uIGEodCl7aSh0LmJ1ZmZlcil9ZnVuY3Rpb24gbyh0KXt2YXIgdD15Lm5leHRQb3cyKHQpLGU9eS5sb2cyKHQpLHI9d1tlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBzKHQpe3JldHVybiBuZXcgVWludDhBcnJheShvKHQpLDAsdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbmV3IFVpbnQxNkFycmF5KG8oMip0KSwwLHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG5ldyBVaW50MzJBcnJheShvKDQqdCksMCx0KX1mdW5jdGlvbiBjKHQpe3JldHVybiBuZXcgSW50OEFycmF5KG8odCksMCx0KX1mdW5jdGlvbiBoKHQpe3JldHVybiBuZXcgSW50MTZBcnJheShvKDIqdCksMCx0KX1mdW5jdGlvbiBmKHQpe3JldHVybiBuZXcgSW50MzJBcnJheShvKDQqdCksMCx0KX1mdW5jdGlvbiBkKHQpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KG8oNCp0KSwwLHQpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkobyg4KnQpLDAsdCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4geD9uZXcgVWludDhDbGFtcGVkQXJyYXkobyh0KSwwLHQpOnModCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IERhdGFWaWV3KG8odCksMCx0KX1mdW5jdGlvbiBnKHQpe3Q9eS5uZXh0UG93Mih0KTt2YXIgZT15LmxvZzIodCkscj1NW2VdO3JldHVybiByLmxlbmd0aD4wP3IucG9wKCk6bmV3IG4odCl9dmFyIHk9dCgiYml0LXR3aWRkbGUiKSxiPXQoImR1cCIpO2UuX19UWVBFREFSUkFZX1BPT0x8fChlLl9fVFlQRURBUlJBWV9QT09MPXtVSU5UODpiKFszMiwwXSksVUlOVDE2OmIoWzMyLDBdKSxVSU5UMzI6YihbMzIsMF0pLElOVDg6YihbMzIsMF0pLElOVDE2OmIoWzMyLDBdKSxJTlQzMjpiKFszMiwwXSksRkxPQVQ6YihbMzIsMF0pLERPVUJMRTpiKFszMiwwXSksREFUQTpiKFszMiwwXSksVUlOVDhDOmIoWzMyLDBdKSxCVUZGRVI6YihbMzIsMF0pfSk7dmFyIHg9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OENsYW1wZWRBcnJheSxfPWUuX19UWVBFREFSUkFZX1BPT0w7Xy5VSU5UOEN8fChfLlVJTlQ4Qz1iKFszMiwwXSkpLF8uQlVGRkVSfHwoXy5CVUZGRVI9YihbMzIsMF0pKTt2YXIgdz1fLkRBVEEsTT1fLkJVRkZFUjtyLmZyZWU9ZnVuY3Rpb24odCl7aWYobi5pc0J1ZmZlcih0KSlNW3kubG9nMih0Lmxlbmd0aCldLnB1c2godCk7ZWxzZXtpZigiW29iamVjdCBBcnJheUJ1ZmZlcl0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpJiYodD10LmJ1ZmZlciksIXQpcmV0dXJuO3ZhciBlPXQubGVuZ3RofHx0LmJ5dGVMZW5ndGgscj0wfHkubG9nMihlKTt3W3JdLnB1c2godCl9fSxyLmZyZWVVaW50OD1yLmZyZWVVaW50MTY9ci5mcmVlVWludDMyPXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9YSxyLmZyZWVBcnJheUJ1ZmZlcj1pLHIuZnJlZUJ1ZmZlcj1mdW5jdGlvbih0KXtNW3kubG9nMih0Lmxlbmd0aCldLnB1c2godCl9LHIubWFsbG9jPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZXx8ImFycmF5YnVmZmVyIj09PWUpcmV0dXJuIG8odCk7c3dpdGNoKGUpe2Nhc2UidWludDgiOnJldHVybiBzKHQpO2Nhc2UidWludDE2IjpyZXR1cm4gbCh0KTtjYXNlInVpbnQzMiI6cmV0dXJuIHUodCk7Y2FzZSJpbnQ4IjpyZXR1cm4gYyh0KTtjYXNlImludDE2IjpyZXR1cm4gaCh0KTtjYXNlImludDMyIjpyZXR1cm4gZih0KTtjYXNlImZsb2F0IjpjYXNlImZsb2F0MzIiOnJldHVybiBkKHQpO2Nhc2UiZG91YmxlIjpjYXNlImZsb2F0NjQiOnJldHVybiBwKHQpO2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIG0odCk7Y2FzZSJidWZmZXIiOnJldHVybiBnKHQpO2Nhc2UiZGF0YSI6Y2FzZSJkYXRhdmlldyI6cmV0dXJuIHYodCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1vLHIubWFsbG9jVWludDg9cyxyLm1hbGxvY1VpbnQxNj1sLHIubWFsbG9jVWludDMyPXUsci5tYWxsb2NJbnQ4PWMsci5tYWxsb2NJbnQxNj1oLHIubWFsbG9jSW50MzI9ZixyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD1kLHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT1wLHIubWFsbG9jVWludDhDbGFtcGVkPW0sci5tYWxsb2NEYXRhVmlldz12LHIubWFsbG9jQnVmZmVyPWcsci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3QpXy5VSU5UOFt0XS5sZW5ndGg9MCxfLlVJTlQxNlt0XS5sZW5ndGg9MCxfLlVJTlQzMlt0XS5sZW5ndGg9MCxfLklOVDhbdF0ubGVuZ3RoPTAsXy5JTlQxNlt0XS5sZW5ndGg9MCxfLklOVDMyW3RdLmxlbmd0aD0wLF8uRkxPQVRbdF0ubGVuZ3RoPTAsXy5ET1VCTEVbdF0ubGVuZ3RoPTAsXy5VSU5UOENbdF0ubGVuZ3RoPTAsd1t0XS5sZW5ndGg9MCxNW3RdLmxlbmd0aD0wfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9LHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYml0LXR3aWRkbGUiOjY1LGJ1ZmZlcjo3NSxkdXA6MTIzfV0sNTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiOyJ1c2UgcmVzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5yb290cz1uZXcgQXJyYXkodCksdGhpcy5yYW5rcz1uZXcgQXJyYXkodCk7Zm9yKHZhciBlPTA7ZTx0OysrZSl0aGlzLnJvb3RzW2VdPWUsdGhpcy5yYW5rc1tlXT0wfWUuZXhwb3J0cz1uO3ZhciBpPW4ucHJvdG90eXBlO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9fSksaS5tYWtlU2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yb290cy5sZW5ndGg7cmV0dXJuIHRoaXMucm9vdHMucHVzaCh0KSx0aGlzLnJhbmtzLnB1c2goMCksdH0saS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LHI9dGhpcy5yb290cztyW3RdIT09dDspdD1yW3RdO2Zvcig7cltlXSE9PXQ7KXt2YXIgbj1yW2VdO3JbZV09dCxlPW59cmV0dXJuIHR9LGkubGluaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZmluZCh0KSxuPXRoaXMuZmluZChlKTtpZihyIT09bil7dmFyIGk9dGhpcy5yYW5rcyxhPXRoaXMucm9vdHMsbz1pW3JdLHM9aVtuXTtvPHM/YVtyXT1uOnM8bz9hW25dPXI6KGFbbl09ciwrK2lbcl0pfX19LHt9XSw1NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksaT10W29dLGUoaSxhKSl7CmlmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fWZ1bmN0aW9uIGEodCxlLHIpe3JldHVybiAwPT09dC5sZW5ndGg/dDplPyhyfHx0LnNvcnQoZSksbih0LGUpKToocnx8dC5zb3J0KCksaSh0KSl9ZS5leHBvcnRzPWF9LHt9XSw1NDI6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufWUuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxuLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPTFlLTYpO3ZhciByLG4saSxhLG87Zm9yKGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKHI9MCxuPTEsKGk9dCk8cilyZXR1cm4gcjtpZihpPm4pcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG4ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9fSx7fV0sNTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5xdWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXtpZih0JiZ1LmlzT2JqZWN0KHQpJiZ0IGluc3RhbmNlb2YgbilyZXR1cm4gdDt2YXIgaT1uZXcgbjtyZXR1cm4gaS5wYXJzZSh0LGUsciksaX1mdW5jdGlvbiBhKHQpe3JldHVybiB1LmlzU3RyaW5nKHQpJiYodD1pKHQpKSx0IGluc3RhbmNlb2Ygbj90LmZvcm1hdCgpOm4ucHJvdG90eXBlLmZvcm1hdC5jYWxsKHQpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gaSh0LCExLCEwKS5yZXNvbHZlKGUpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdD9pKHQsITEsITApLnJlc29sdmVPYmplY3QoZSk6ZX12YXIgbD10KCJwdW55Y29kZSIpLHU9dCgiLi91dGlsIik7ci5wYXJzZT1pLHIucmVzb2x2ZT1vLHIucmVzb2x2ZU9iamVjdD1zLHIuZm9ybWF0PWEsci5Vcmw9bjt2YXIgYz0vXihbYS16MC05ListXSs6KS9pLGg9LzpbMC05XSokLyxmPS9eKFwvXC8/KD8hXC8pW15cP1xzXSopKFw/W15cc10qKT8kLyxkPVsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsIlxuIiwiXHQiXSxwPVsieyIsIn0iLCJ8IiwiXFwiLCJeIiwiYCJdLmNvbmNhdChkKSxtPVsiJyJdLmNvbmNhdChwKSx2PVsiJSIsIi8iLCI/IiwiOyIsIiMiXS5jb25jYXQobSksZz1bIi8iLCI/IiwiIyJdLHk9L15bK2EtejAtOUEtWl8tXXswLDYzfSQvLGI9L14oWythLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLHg9e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0sXz17amF2YXNjcmlwdDohMCwiamF2YXNjcmlwdDoiOiEwfSx3PXtodHRwOiEwLGh0dHBzOiEwLGZ0cDohMCxnb3BoZXI6ITAsZmlsZTohMCwiaHR0cDoiOiEwLCJodHRwczoiOiEwLCJmdHA6IjohMCwiZ29waGVyOiI6ITAsImZpbGU6IjohMH0sTT10KCJxdWVyeXN0cmluZyIpO24ucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyKXtpZighdS5pc1N0cmluZyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIHQpO3ZhciBuPXQuaW5kZXhPZigiPyIpLGk9LTEhPT1uJiZuPHQuaW5kZXhPZigiIyIpPyI/IjoiIyIsYT10LnNwbGl0KGkpLG89L1xcL2c7YVswXT1hWzBdLnJlcGxhY2UobywiLyIpLHQ9YS5qb2luKGkpO3ZhciBzPXQ7aWYocz1zLnRyaW0oKSwhciYmMT09PXQuc3BsaXQoIiMiKS5sZW5ndGgpe3ZhciBoPWYuZXhlYyhzKTtpZihoKXJldHVybiB0aGlzLnBhdGg9cyx0aGlzLmhyZWY9cyx0aGlzLnBhdGhuYW1lPWhbMV0saFsyXT8odGhpcy5zZWFyY2g9aFsyXSx0aGlzLnF1ZXJ5PWU/TS5wYXJzZSh0aGlzLnNlYXJjaC5zdWJzdHIoMSkpOnRoaXMuc2VhcmNoLnN1YnN0cigxKSk6ZSYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLHRoaXN9dmFyIGQ9Yy5leGVjKHMpO2lmKGQpe2Q9ZFswXTt2YXIgcD1kLnRvTG93ZXJDYXNlKCk7dGhpcy5wcm90b2NvbD1wLHM9cy5zdWJzdHIoZC5sZW5ndGgpfWlmKHJ8fGR8fHMubWF0Y2goL15cL1wvW15AXC9dK0BbXkBcL10rLykpe3ZhciBrPSIvLyI9PT1zLnN1YnN0cigwLDIpOyFrfHxkJiZfW2RdfHwocz1zLnN1YnN0cigyKSx0aGlzLnNsYXNoZXM9ITApfWlmKCFfW2RdJiYoa3x8ZCYmIXdbZF0pKXtmb3IodmFyIEE9LTEsVD0wO1Q8Zy5sZW5ndGg7VCsrKXt2YXIgUz1zLmluZGV4T2YoZ1tUXSk7LTEhPT1TJiYoLTE9PT1BfHxTPEEpJiYoQT1TKX12YXIgRSxMO0w9LTE9PT1BP3MubGFzdEluZGV4T2YoIkAiKTpzLmxhc3RJbmRleE9mKCJAIixBKSwtMSE9PUwmJihFPXMuc2xpY2UoMCxMKSxzPXMuc2xpY2UoTCsxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KEUpKSxBPS0xO2Zvcih2YXIgVD0wO1Q8di5sZW5ndGg7VCsrKXt2YXIgUz1zLmluZGV4T2YodltUXSk7LTEhPT1TJiYoLTE9PT1BfHxTPEEpJiYoQT1TKX0tMT09PUEmJihBPXMubGVuZ3RoKSx0aGlzLmhvc3Q9cy5zbGljZSgwLEEpLHM9cy5zbGljZShBKSx0aGlzLnBhcnNlSG9zdCgpLHRoaXMuaG9zdG5hbWU9dGhpcy5ob3N0bmFtZXx8IiI7dmFyIEM9IlsiPT09dGhpcy5ob3N0bmFtZVswXSYmIl0iPT09dGhpcy5ob3N0bmFtZVt0aGlzLmhvc3RuYW1lLmxlbmd0aC0xXTtpZighQylmb3IodmFyIHo9dGhpcy5ob3N0bmFtZS5zcGxpdCgvXC4vKSxUPTAsST16Lmxlbmd0aDtUPEk7VCsrKXt2YXIgRD16W1RdO2lmKEQmJiFELm1hdGNoKHkpKXtmb3IodmFyIFA9IiIsTz0wLFI9RC5sZW5ndGg7TzxSO08rKylELmNoYXJDb2RlQXQoTyk+MTI3P1ArPSJ4IjpQKz1EW09dO2lmKCFQLm1hdGNoKHkpKXt2YXIgRj16LnNsaWNlKDAsVCksaj16LnNsaWNlKFQrMSksTj1ELm1hdGNoKGIpO04mJihGLnB1c2goTlsxXSksai51bnNoaWZ0KE5bMl0pKSxqLmxlbmd0aCYmKHM9Ii8iK2ouam9pbigiLiIpK3MpLHRoaXMuaG9zdG5hbWU9Ri5qb2luKCIuIik7YnJlYWt9fX10aGlzLmhvc3RuYW1lLmxlbmd0aD4yNTU/dGhpcy5ob3N0bmFtZT0iIjp0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSxDfHwodGhpcy5ob3N0bmFtZT1sLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBCPXRoaXMucG9ydD8iOiIrdGhpcy5wb3J0OiIiLFU9dGhpcy5ob3N0bmFtZXx8IiI7dGhpcy5ob3N0PVUrQix0aGlzLmhyZWYrPXRoaXMuaG9zdCxDJiYodGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnN1YnN0cigxLHRoaXMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PXNbMF0mJihzPSIvIitzKSl9aWYoIXhbcF0pZm9yKHZhciBUPTAsST1tLmxlbmd0aDtUPEk7VCsrKXt2YXIgVj1tW1RdO2lmKC0xIT09cy5pbmRleE9mKFYpKXt2YXIgSD1lbmNvZGVVUklDb21wb25lbnQoVik7SD09PVYmJihIPWVzY2FwZShWKSkscz1zLnNwbGl0KFYpLmpvaW4oSCl9fXZhciBxPXMuaW5kZXhPZigiIyIpOy0xIT09cSYmKHRoaXMuaGFzaD1zLnN1YnN0cihxKSxzPXMuc2xpY2UoMCxxKSk7dmFyIEc9cy5pbmRleE9mKCI/Iik7aWYoLTEhPT1HPyh0aGlzLnNlYXJjaD1zLnN1YnN0cihHKSx0aGlzLnF1ZXJ5PXMuc3Vic3RyKEcrMSksZSYmKHRoaXMucXVlcnk9TS5wYXJzZSh0aGlzLnF1ZXJ5KSkscz1zLnNsaWNlKDAsRykpOmUmJih0aGlzLnNlYXJjaD0iIix0aGlzLnF1ZXJ5PXt9KSxzJiYodGhpcy5wYXRobmFtZT1zKSx3W3BdJiZ0aGlzLmhvc3RuYW1lJiYhdGhpcy5wYXRobmFtZSYmKHRoaXMucGF0aG5hbWU9Ii8iKSx0aGlzLnBhdGhuYW1lfHx0aGlzLnNlYXJjaCl7dmFyIEI9dGhpcy5wYXRobmFtZXx8IiIsWT10aGlzLnNlYXJjaHx8IiI7dGhpcy5wYXRoPUIrWX1yZXR1cm4gdGhpcy5ocmVmPXRoaXMuZm9ybWF0KCksdGhpc30sbi5wcm90b3R5cGUuZm9ybWF0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdXRofHwiIjt0JiYodD1lbmNvZGVVUklDb21wb25lbnQodCksdD10LnJlcGxhY2UoLyUzQS9pLCI6IiksdCs9IkAiKTt2YXIgZT10aGlzLnByb3RvY29sfHwiIixyPXRoaXMucGF0aG5hbWV8fCIiLG49dGhpcy5oYXNofHwiIixpPSExLGE9IiI7dGhpcy5ob3N0P2k9dCt0aGlzLmhvc3Q6dGhpcy5ob3N0bmFtZSYmKGk9dCsoLTE9PT10aGlzLmhvc3RuYW1lLmluZGV4T2YoIjoiKT90aGlzLmhvc3RuYW1lOiJbIit0aGlzLmhvc3RuYW1lKyJdIiksdGhpcy5wb3J0JiYoaSs9IjoiK3RoaXMucG9ydCkpLHRoaXMucXVlcnkmJnUuaXNPYmplY3QodGhpcy5xdWVyeSkmJk9iamVjdC5rZXlzKHRoaXMucXVlcnkpLmxlbmd0aCYmKGE9TS5zdHJpbmdpZnkodGhpcy5xdWVyeSkpO3ZhciBvPXRoaXMuc2VhcmNofHxhJiYiPyIrYXx8IiI7cmV0dXJuIGUmJiI6IiE9PWUuc3Vic3RyKC0xKSYmKGUrPSI6IiksdGhpcy5zbGFzaGVzfHwoIWV8fHdbZV0pJiYhMSE9PWk/KGk9Ii8vIisoaXx8IiIpLHImJiIvIiE9PXIuY2hhckF0KDApJiYocj0iLyIrcikpOml8fChpPSIiKSxuJiYiIyIhPT1uLmNoYXJBdCgwKSYmKG49IiMiK24pLG8mJiI/IiE9PW8uY2hhckF0KDApJiYobz0iPyIrbykscj1yLnJlcGxhY2UoL1s/I10vZyxmdW5jdGlvbih0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHQpfSksbz1vLnJlcGxhY2UoIiMiLCIlMjMiKSxlK2krcitvK259LG4ucHJvdG90eXBlLnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVzb2x2ZU9iamVjdChpKHQsITEsITApKS5mb3JtYXQoKX0sbi5wcm90b3R5cGUucmVzb2x2ZU9iamVjdD1mdW5jdGlvbih0KXtpZih1LmlzU3RyaW5nKHQpKXt2YXIgZT1uZXcgbjtlLnBhcnNlKHQsITEsITApLHQ9ZX1mb3IodmFyIHI9bmV3IG4saT1PYmplY3Qua2V5cyh0aGlzKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07cltvXT10aGlzW29dfWlmKHIuaGFzaD10Lmhhc2gsIiI9PT10LmhyZWYpcmV0dXJuIHIuaHJlZj1yLmZvcm1hdCgpLHI7aWYodC5zbGFzaGVzJiYhdC5wcm90b2NvbCl7Zm9yKHZhciBzPU9iamVjdC5rZXlzKHQpLGw9MDtsPHMubGVuZ3RoO2wrKyl7dmFyIGM9c1tsXTsicHJvdG9jb2wiIT09YyYmKHJbY109dFtjXSl9cmV0dXJuIHdbci5wcm90b2NvbF0mJnIuaG9zdG5hbWUmJiFyLnBhdGhuYW1lJiYoci5wYXRoPXIucGF0aG5hbWU9Ii8iKSxyLmhyZWY9ci5mb3JtYXQoKSxyfWlmKHQucHJvdG9jb2wmJnQucHJvdG9jb2whPT1yLnByb3RvY29sKXtpZighd1t0LnByb3RvY29sXSl7Zm9yKHZhciBoPU9iamVjdC5rZXlzKHQpLGY9MDtmPGgubGVuZ3RoO2YrKyl7dmFyIGQ9aFtmXTtyW2RdPXRbZF19cmV0dXJuIHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYoci5wcm90b2NvbD10LnByb3RvY29sLHQuaG9zdHx8X1t0LnByb3RvY29sXSlyLnBhdGhuYW1lPXQucGF0aG5hbWU7ZWxzZXtmb3IodmFyIHA9KHQucGF0aG5hbWV8fCIiKS5zcGxpdCgiLyIpO3AubGVuZ3RoJiYhKHQuaG9zdD1wLnNoaWZ0KCkpOyk7dC5ob3N0fHwodC5ob3N0PSIiKSx0Lmhvc3RuYW1lfHwodC5ob3N0bmFtZT0iIiksIiIhPT1wWzBdJiZwLnVuc2hpZnQoIiIpLHAubGVuZ3RoPDImJnAudW5zaGlmdCgiIiksci5wYXRobmFtZT1wLmpvaW4oIi8iKX1pZihyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnksci5ob3N0PXQuaG9zdHx8IiIsci5hdXRoPXQuYXV0aCxyLmhvc3RuYW1lPXQuaG9zdG5hbWV8fHQuaG9zdCxyLnBvcnQ9dC5wb3J0LHIucGF0aG5hbWV8fHIuc2VhcmNoKXt2YXIgbT1yLnBhdGhuYW1lfHwiIix2PXIuc2VhcmNofHwiIjtyLnBhdGg9bSt2fXJldHVybiByLnNsYXNoZXM9ci5zbGFzaGVzfHx0LnNsYXNoZXMsci5ocmVmPXIuZm9ybWF0KCkscn12YXIgZz1yLnBhdGhuYW1lJiYiLyI9PT1yLnBhdGhuYW1lLmNoYXJBdCgwKSx5PXQuaG9zdHx8dC5wYXRobmFtZSYmIi8iPT09dC5wYXRobmFtZS5jaGFyQXQoMCksYj15fHxnfHxyLmhvc3QmJnQucGF0aG5hbWUseD1iLE09ci5wYXRobmFtZSYmci5wYXRobmFtZS5zcGxpdCgiLyIpfHxbXSxwPXQucGF0aG5hbWUmJnQucGF0aG5hbWUuc3BsaXQoIi8iKXx8W10saz1yLnByb3RvY29sJiYhd1tyLnByb3RvY29sXTtpZihrJiYoci5ob3N0bmFtZT0iIixyLnBvcnQ9bnVsbCxyLmhvc3QmJigiIj09PU1bMF0/TVswXT1yLmhvc3Q6TS51bnNoaWZ0KHIuaG9zdCkpLHIuaG9zdD0iIix0LnByb3RvY29sJiYodC5ob3N0bmFtZT1udWxsLHQucG9ydD1udWxsLHQuaG9zdCYmKCIiPT09cFswXT9wWzBdPXQuaG9zdDpwLnVuc2hpZnQodC5ob3N0KSksdC5ob3N0PW51bGwpLGI9YiYmKCIiPT09cFswXXx8IiI9PT1NWzBdKSkseSlyLmhvc3Q9dC5ob3N0fHwiIj09PXQuaG9zdD90Lmhvc3Q6ci5ob3N0LHIuaG9zdG5hbWU9dC5ob3N0bmFtZXx8IiI9PT10Lmhvc3RuYW1lP3QuaG9zdG5hbWU6ci5ob3N0bmFtZSxyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnksTT1wO2Vsc2UgaWYocC5sZW5ndGgpTXx8KE09W10pLE0ucG9wKCksTT1NLmNvbmNhdChwKSxyLnNlYXJjaD10LnNlYXJjaCxyLnF1ZXJ5PXQucXVlcnk7ZWxzZSBpZighdS5pc051bGxPclVuZGVmaW5lZCh0LnNlYXJjaCkpe2lmKGspe3IuaG9zdG5hbWU9ci5ob3N0PU0uc2hpZnQoKTt2YXIgQT0hIShyLmhvc3QmJnIuaG9zdC5pbmRleE9mKCJAIik+MCkmJnIuaG9zdC5zcGxpdCgiQCIpO0EmJihyLmF1dGg9QS5zaGlmdCgpLHIuaG9zdD1yLmhvc3RuYW1lPUEuc2hpZnQoKSl9cmV0dXJuIHIuc2VhcmNoPXQuc2VhcmNoLHIucXVlcnk9dC5xdWVyeSx1LmlzTnVsbChyLnBhdGhuYW1lKSYmdS5pc051bGwoci5zZWFyY2gpfHwoci5wYXRoPShyLnBhdGhuYW1lP3IucGF0aG5hbWU6IiIpKyhyLnNlYXJjaD9yLnNlYXJjaDoiIikpLHIuaHJlZj1yLmZvcm1hdCgpLHJ9aWYoIU0ubGVuZ3RoKXJldHVybiByLnBhdGhuYW1lPW51bGwsci5zZWFyY2g/ci5wYXRoPSIvIityLnNlYXJjaDpyLnBhdGg9bnVsbCxyLmhyZWY9ci5mb3JtYXQoKSxyO2Zvcih2YXIgVD1NLnNsaWNlKC0xKVswXSxTPShyLmhvc3R8fHQuaG9zdHx8TS5sZW5ndGg+MSkmJigiLiI9PT1UfHwiLi4iPT09VCl8fCIiPT09VCxFPTAsTD1NLmxlbmd0aDtMPj0wO0wtLSlUPU1bTF0sIi4iPT09VD9NLnNwbGljZShMLDEpOiIuLiI9PT1UPyhNLnNwbGljZShMLDEpLEUrKyk6RSYmKE0uc3BsaWNlKEwsMSksRS0tKTtpZighYiYmIXgpZm9yKDtFLS07RSlNLnVuc2hpZnQoIi4uIik7IWJ8fCIiPT09TVswXXx8TVswXSYmIi8iPT09TVswXS5jaGFyQXQoMCl8fE0udW5zaGlmdCgiIiksUyYmIi8iIT09TS5qb2luKCIvIikuc3Vic3RyKC0xKSYmTS5wdXNoKCIiKTt2YXIgQz0iIj09PU1bMF18fE1bMF0mJiIvIj09PU1bMF0uY2hhckF0KDApO2lmKGspe3IuaG9zdG5hbWU9ci5ob3N0PUM/IiI6TS5sZW5ndGg/TS5zaGlmdCgpOiIiO3ZhciBBPSEhKHIuaG9zdCYmci5ob3N0LmluZGV4T2YoIkAiKT4wKSYmci5ob3N0LnNwbGl0KCJAIik7QSYmKHIuYXV0aD1BLnNoaWZ0KCksci5ob3N0PXIuaG9zdG5hbWU9QS5zaGlmdCgpKX1yZXR1cm4gYj1ifHxyLmhvc3QmJk0ubGVuZ3RoLGImJiFDJiZNLnVuc2hpZnQoIiIpLE0ubGVuZ3RoP3IucGF0aG5hbWU9TS5qb2luKCIvIik6KHIucGF0aG5hbWU9bnVsbCxyLnBhdGg9bnVsbCksdS5pc051bGwoci5wYXRobmFtZSkmJnUuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOiIiKSsoci5zZWFyY2g/ci5zZWFyY2g6IiIpKSxyLmF1dGg9dC5hdXRofHxyLmF1dGgsci5zbGFzaGVzPXIuc2xhc2hlc3x8dC5zbGFzaGVzLHIuaHJlZj1yLmZvcm1hdCgpLHJ9LG4ucHJvdG90eXBlLnBhcnNlSG9zdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaG9zdCxlPWguZXhlYyh0KTtlJiYoZT1lWzBdLCI6IiE9PWUmJih0aGlzLnBvcnQ9ZS5zdWJzdHIoMSkpLHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC1lLmxlbmd0aCkpLHQmJih0aGlzLmhvc3RuYW1lPXQpfX0seyIuL3V0aWwiOjU0NCxwdW55Y29kZTo0ODYscXVlcnlzdHJpbmc6NDkwfV0sNTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aXNTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fSxpc09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fSxpc051bGw6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH19fSx7fV0sNTQ1OltmdW5jdGlvbih0LGUscil7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LHt9XSw1NDY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDU0NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIGkodCxlKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOm99O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLG0oZSk/bi5zaG93SGlkZGVuPWU6ZSYmci5fZXh0ZW5kKG4sZSksXyhuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSxfKG4uZGVwdGgpJiYobi5kZXB0aD0yKSxfKG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSxfKG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWEpLGwobix0LG4uZGVwdGgpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1pLnN0eWxlc1tlXTtyZXR1cm4gcj8iXHgxYlsiK2kuY29sb3JzW3JdWzBdKyJtIit0KyJceDFiWyIraS5jb2xvcnNbcl1bMV0rIm0iOnR9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIHModCl7dmFyIGU9e307cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe2VbdF09ITB9KSxlfWZ1bmN0aW9uIGwodCxlLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmZSYmVChlLmluc3BlY3QpJiZlLmluc3BlY3QhPT1yLmluc3BlY3QmJighZS5jb25zdHJ1Y3Rvcnx8ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1lKSl7dmFyIGk9ZS5pbnNwZWN0KG4sdCk7cmV0dXJuIGIoaSl8fChpPWwodCxpLG4pKSxpfXZhciBhPXUodCxlKTtpZihhKXJldHVybiBhO3ZhciBvPU9iamVjdC5rZXlzKGUpLG09cyhvKTtpZih0LnNob3dIaWRkZW4mJihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpKSxBKGUpJiYoby5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG8uaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIGMoZSk7aWYoMD09PW8ubGVuZ3RoKXtpZihUKGUpKXt2YXIgdj1lLm5hbWU/IjogIitlLm5hbWU6IiI7cmV0dXJuIHQuc3R5bGl6ZSgiW0Z1bmN0aW9uIit2KyJdIiwic3BlY2lhbCIpfWlmKHcoZSkpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpO2lmKGsoZSkpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLCJkYXRlIik7aWYoQShlKSlyZXR1cm4gYyhlKX12YXIgZz0iIix5PSExLHg9WyJ7IiwifSJdO2lmKHAoZSkmJih5PSEwLHg9WyJbIiwiXSJdKSxUKGUpKXtnPSIgW0Z1bmN0aW9uIisoZS5uYW1lPyI6ICIrZS5uYW1lOiIiKSsiXSJ9aWYodyhlKSYmKGc9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSksayhlKSYmKGc9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLEEoZSkmJihnPSIgIitjKGUpKSwwPT09by5sZW5ndGgmJigheXx8MD09ZS5sZW5ndGgpKXJldHVybiB4WzBdK2creFsxXTtpZihuPDApcmV0dXJuIHcoZSk/dC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik6dC5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTt0LnNlZW4ucHVzaChlKTt2YXIgXztyZXR1cm4gXz15P2godCxlLG4sbSxvKTpvLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZih0LGUsbixtLHIseSl9KSx0LnNlZW4ucG9wKCksZChfLGcseCl9ZnVuY3Rpb24gdSh0LGUpe2lmKF8oZSkpcmV0dXJuIHQuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoYihlKSl7dmFyIHI9IiciK0pTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHQuc3R5bGl6ZShyLCJzdHJpbmciKX1yZXR1cm4geShlKT90LnN0eWxpemUoIiIrZSwibnVtYmVyIik6bShlKT90LnN0eWxpemUoIiIrZSwiYm9vbGVhbiIpOnYoZSk/dC5zdHlsaXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH1mdW5jdGlvbiBjKHQpe3JldHVybiJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSsiXSJ9ZnVuY3Rpb24gaCh0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKXooZSxTdHJpbmcobykpP2EucHVzaChmKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6YS5wdXNoKCIiKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cZCskLyl8fGEucHVzaChmKHQsZSxyLG4saSwhMCkpfSksYX1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbyxzLHU7aWYodT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSl8fHt2YWx1ZTplW2ldfSx1LmdldD9zPXUuc2V0P3Quc3R5bGl6ZSgiW0dldHRlci9TZXR0ZXJdIiwic3BlY2lhbCIpOnQuc3R5bGl6ZSgiW0dldHRlcl0iLCJzcGVjaWFsIik6dS5zZXQmJihzPXQuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLHoobixpKXx8KG89IlsiK2krIl0iKSxzfHwodC5zZWVuLmluZGV4T2YodS52YWx1ZSk8MD8ocz12KHIpP2wodCx1LnZhbHVlLG51bGwpOmwodCx1LnZhbHVlLHItMSkscy5pbmRleE9mKCJcbiIpPi0xJiYocz1hP3Muc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIgICIrdH0pLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrcy5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiAgICIrdH0pLmpvaW4oIlxuIikpKTpzPXQuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksXyhvKSl7aWYoYSYmaS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gcztvPUpTT04uc3RyaW5naWZ5KCIiK2kpLG8ubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8obz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpLG89dC5zdHlsaXplKG8sIm5hbWUiKSk6KG89by5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksbz10LnN0eWxpemUobywic3RyaW5nIikpfXJldHVybiBvKyI6ICIrc31mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj0wO3JldHVybiB0LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBuKyssZS5pbmRleE9mKCJcbiIpPj0wJiZuKyssdCtlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9yWzBdKygiIj09PWU/IiI6ZSsiXG4gIikrIiAiK3Quam9pbigiLFxuICAiKSsiICIrclsxXTpyWzBdK2UrIiAiK3Quam9pbigiLCAiKSsiICIrclsxXX1mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBnKHQpe3JldHVybiBudWxsPT10fWZ1bmN0aW9uIHkodCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIGIodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHgodCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fWZ1bmN0aW9uIF8odCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gTSh0KSYmIltvYmplY3QgUmVnRXhwXSI9PT1FKHQpfWZ1bmN0aW9uIE0odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBrKHQpe3JldHVybiBNKHQpJiYiW29iamVjdCBEYXRlXSI9PT1FKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIE0odCkmJigiW29iamVjdCBFcnJvcl0iPT09RSh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBUKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIFModCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fWZ1bmN0aW9uIEUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiB0PDEwPyIwIit0LnRvU3RyaW5nKDEwKTp0LnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBDKCl7dmFyIHQ9bmV3IERhdGUsZT1bTCh0LmdldEhvdXJzKCkpLEwodC5nZXRNaW51dGVzKCkpLEwodC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3QuZ2V0RGF0ZSgpLE9bdC5nZXRNb250aCgpXSxlXS5qb2luKCIgIil9ZnVuY3Rpb24geih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX12YXIgST0vJVtzZGolXS9nO3IuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCFiKHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGkoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbigiICIpfWZvcih2YXIgcj0xLG49YXJndW1lbnRzLGE9bi5sZW5ndGgsbz1TdHJpbmcodCkucmVwbGFjZShJLGZ1bmN0aW9uKHQpe2lmKCIlJSI9PT10KXJldHVybiIlIjtpZihyPj1hKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKG5bcisrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gdH19KSxzPW5bcl07cjxhO3M9blsrK3JdKXYocyl8fCFNKHMpP28rPSIgIitzOm8rPSIgIitpKHMpO3JldHVybiBvfSxyLmRlcHJlY2F0ZT1mdW5jdGlvbih0LGkpe2Z1bmN0aW9uIGEoKXtpZighbyl7aWYoZS50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtlLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLG89ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKF8obi5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5kZXByZWNhdGUodCxpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09ZS5ub0RlcHJlY2F0aW9uKXJldHVybiB0O3ZhciBvPSExO3JldHVybiBhfTt2YXIgRCxQPXt9O3IuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoXyhEKSYmKEQ9ZS5lbnYuTk9ERV9ERUJVR3x8IiIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFQW3RdKWlmKG5ldyBSZWdFeHAoIlxcYiIrdCsiXFxiIiwiaSIpLnRlc3QoRCkpe3ZhciBuPWUucGlkO1BbdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIix0LG4sZSl9fWVsc2UgUFt0XT1mdW5jdGlvbigpe307cmV0dXJuIFBbdF19LHIuaW5zcGVjdD1pLGkuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxpLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPW0sci5pc051bGw9dixyLmlzTnVsbE9yVW5kZWZpbmVkPWcsci5pc051bWJlcj15LHIuaXNTdHJpbmc9YixyLmlzU3ltYm9sPXgsci5pc1VuZGVmaW5lZD1fLHIuaXNSZWdFeHA9dyxyLmlzT2JqZWN0PU0sci5pc0RhdGU9ayxyLmlzRXJyb3I9QSxyLmlzRnVuY3Rpb249VCxyLmlzUHJpbWl0aXZlPVMsci5pc0J1ZmZlcj10KCIuL3N1cHBvcnQvaXNCdWZmZXIiKTt2YXIgTz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO3IubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coIiVzIC0gJXMiLEMoKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPXQoImluaGVyaXRzIiksci5fZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7aWYoIWV8fCFNKGUpKXJldHVybiB0O2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPXIubGVuZ3RoO24tLTspdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6NTQ2LF9wcm9jZXNzOjQ4NSxpbmhlcml0czo1NDV9XSw1NDg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHMuVmVjdG9yVGlsZT10KCIuL2xpYi92ZWN0b3J0aWxlLmpzIiksZS5leHBvcnRzLlZlY3RvclRpbGVGZWF0dXJlPXQoIi4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIiksZS5leHBvcnRzLlZlY3RvclRpbGVMYXllcj10KCIuL2xpYi92ZWN0b3J0aWxlbGF5ZXIuanMiKX0seyIuL2xpYi92ZWN0b3J0aWxlLmpzIjo1NDksIi4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzIjo1NTAsIi4vbGliL3ZlY3RvcnRpbGVsYXllci5qcyI6NTUxfV0sNTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmxheWVycz10LnJlYWRGaWVsZHMoaSx7fSxlKX1mdW5jdGlvbiBpKHQsZSxyKXtpZigzPT09dCl7dmFyIG49bmV3IGEocixyLnJlYWRWYXJpbnQoKStyLnBvcyk7bi5sZW5ndGgmJihlW24ubmFtZV09bil9fXZhciBhPXQoIi4vdmVjdG9ydGlsZWxheWVyIik7ZS5leHBvcnRzPW59LHsiLi92ZWN0b3J0aWxlbGF5ZXIiOjU1MX1dLDU1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sYSl7dGhpcy5wcm9wZXJ0aWVzPXt9LHRoaXMuZXh0ZW50PXIsdGhpcy50eXBlPTAsdGhpcy5fcGJmPXQsdGhpcy5fZ2VvbWV0cnk9LTEsdGhpcy5fa2V5cz1uLHRoaXMuX3ZhbHVlcz1hLHQucmVhZEZpZWxkcyhpLHRoaXMsZSl9ZnVuY3Rpb24gaSh0LGUscil7MT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PXQ/YShyLGUpOjM9PXQ/ZS50eXBlPXIucmVhZFZhcmludCgpOjQ9PXQmJihlLl9nZW9tZXRyeT1yLnBvcyl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49ZS5fa2V5c1t0LnJlYWRWYXJpbnQoKV0saT1lLl92YWx1ZXNbdC5yZWFkVmFyaW50KCldO2UucHJvcGVydGllc1tuXT1pfX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGU8PTEpcmV0dXJuW3RdO2Zvcih2YXIgcixuLGk9W10sYT0wO2E8ZTthKyspe3ZhciBvPXModFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yZXR1cm4gciYmaS5wdXNoKHIpLGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxyPXRbb10sbis9KHIueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn12YXIgbD10KCJwb2ludC1nZW9tZXRyeSIpO2UuZXhwb3J0cz1uLG4udHlwZXM9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLG4ucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsaT0wLGE9MCxvPTAscz1bXTt0LnBvczxyOyl7aWYoIWkpe3ZhciB1PXQucmVhZFZhcmludCgpO249NyZ1LGk9dT4+M31pZihpLS0sMT09PW58fDI9PT1uKWErPXQucmVhZFNWYXJpbnQoKSxvKz10LnJlYWRTVmFyaW50KCksMT09PW4mJihlJiZzLnB1c2goZSksZT1bXSksZS5wdXNoKG5ldyBsKGEsbykpO2Vsc2V7aWYoNyE9PW4pdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIituKTtlJiZlLnB1c2goZVswXS5jbG9uZSgpKX19cmV0dXJuIGUmJnMucHVzaChlKSxzfSxuLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLHU9LTEvMDt0LnBvczxlOyl7aWYoIW4pe3ZhciBjPXQucmVhZFZhcmludCgpO3I9NyZjLG49Yz4+M31pZihuLS0sMT09PXJ8fDI9PT1yKWkrPXQucmVhZFNWYXJpbnQoKSxhKz10LnJlYWRTVmFyaW50KCksaTxvJiYobz1pKSxpPnMmJihzPWkpLGE8bCYmKGw9YSksYT51JiYodT1hKTtlbHNlIGlmKDchPT1yKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjb21tYW5kICIrcil9cmV0dXJuW28sbCxzLHVdfSxuLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0sbj0xODAtMzYwKihyLnkrYykvbDt0W2VdPVszNjAqKHIueCt1KS9sLTE4MCwzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAobipNYXRoLlBJLzE4MCkpLTkwXX19dmFyIGEscyxsPXRoaXMuZXh0ZW50Kk1hdGgucG93KDIsciksdT10aGlzLmV4dGVudCp0LGM9dGhpcy5leHRlbnQqZSxoPXRoaXMubG9hZEdlb21ldHJ5KCksZj1uLnR5cGVzW3RoaXMudHlwZV07c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSAxOnZhciBkPVtdO2ZvcihhPTA7YTxoLmxlbmd0aDthKyspZFthXT1oW2FdWzBdO2g9ZCxpKGgpO2JyZWFrO2Nhc2UgMjpmb3IoYT0wO2E8aC5sZW5ndGg7YSsrKWkoaFthXSk7YnJlYWs7Y2FzZSAzOmZvcihoPW8oaCksYT0wO2E8aC5sZW5ndGg7YSsrKWZvcihzPTA7czxoW2FdLmxlbmd0aDtzKyspaShoW2FdW3NdKX0xPT09aC5sZW5ndGg/aD1oWzBdOmY9Ik11bHRpIitmO3ZhciBwPXt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZTpmLGNvb3JkaW5hdGVzOmh9LHByb3BlcnRpZXM6dGhpcy5wcm9wZXJ0aWVzfTtyZXR1cm4iaWQiaW4gdGhpcyYmKHAuaWQ9dGhpcy5pZCkscH19LHsicG9pbnQtZ2VvbWV0cnkiOjQ4Mn1dLDU1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy52ZXJzaW9uPTEsdGhpcy5uYW1lPW51bGwsdGhpcy5leHRlbnQ9NDA5Nix0aGlzLmxlbmd0aD0wLHRoaXMuX3BiZj10LHRoaXMuX2tleXM9W10sdGhpcy5fdmFsdWVzPVtdLHRoaXMuX2ZlYXR1cmVzPVtdLHQucmVhZEZpZWxkcyhpLHRoaXMsZSksdGhpcy5sZW5ndGg9dGhpcy5fZmVhdHVyZXMubGVuZ3RofWZ1bmN0aW9uIGkodCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGEocikpfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPW51bGwscj10LnJlYWRWYXJpbnQoKSt0LnBvczt0LnBvczxyOyl7dmFyIG49dC5yZWFkVmFyaW50KCk+PjM7ZT0xPT09bj90LnJlYWRTdHJpbmcoKToyPT09bj90LnJlYWRGbG9hdCgpOjM9PT1uP3QucmVhZERvdWJsZSgpOjQ9PT1uP3QucmVhZFZhcmludDY0KCk6NT09PW4/dC5yZWFkVmFyaW50KCk6Nj09PW4/dC5yZWFkU1ZhcmludCgpOjc9PT1uP3QucmVhZEJvb2xlYW4oKTpudWxsfXJldHVybiBlfXZhciBvPXQoIi4vdmVjdG9ydGlsZWZlYXR1cmUuanMiKTtlLmV4cG9ydHM9bixuLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe2lmKHQ8MHx8dD49dGhpcy5fZmVhdHVyZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZmVhdHVyZSBpbmRleCBvdXQgb2YgYm91bmRzIik7dGhpcy5fcGJmLnBvcz10aGlzLl9mZWF0dXJlc1t0XTt2YXIgZT10aGlzLl9wYmYucmVhZFZhcmludCgpK3RoaXMuX3BiZi5wb3M7cmV0dXJuIG5ldyBvKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX19LHsiLi92ZWN0b3J0aWxlZmVhdHVyZS5qcyI6NTUwfV0sNTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfHwoZT17fSksaSh0LGUuY2FudmFzfHxhLGUuY29udGV4dHx8byxlKX1lLmV4cG9ydHM9bjt2YXIgaT10KCIuL2xpYi92dGV4dCIpLGE9bnVsbCxvPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksYS53aWR0aD04MTkyLGEuaGVpZ2h0PTEwMjQsbz1hLmdldENvbnRleHQoIjJkIikpfSx7Ii4vbGliL3Z0ZXh0Ijo1NTN9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPWUudGV4dEFsaWdufHwic3RhcnQiLGk9ZS50ZXh0QmFzZWxpbmV8fCJhbHBoYWJldGljIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgdT10W2xdLGM9MDtjPDI7KytjKWFbY109MHxNYXRoLm1pbihhW2NdLHVbY10pLG9bY109MHxNYXRoLm1heChvW2NdLHVbY10pO3ZhciBoPTA7c3dpdGNoKG4pe2Nhc2UiY2VudGVyIjpoPS0uNSooYVswXStvWzBdKTticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6aD0tb1swXTticmVhaztjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmg9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29nbml6ZWQgdGV4dEFsaWduOiAnIituKyInIil9dmFyIGY9MDtzd2l0Y2goaSl7Y2FzZSJoYW5naW5nIjpjYXNlInRvcCI6Zj0tYVsxXTticmVhaztjYXNlIm1pZGRsZSI6Zj0tLjUqKGFbMV0rb1sxXSk7YnJlYWs7Y2FzZSJhbHBoYWJldGljIjpjYXNlImlkZW9ncmFwaGljIjpmPS0zKnI7YnJlYWs7Y2FzZSJib3R0b20iOmY9LW9bMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJyIraSsiJyIpfXZhciBkPTEvcjtyZXR1cm4ibGluZUhlaWdodCJpbiBlP2QqPStlLmxpbmVIZWlnaHQ6IndpZHRoImluIGU/ZD1lLndpZHRoLyhvWzBdLWFbMF0pOiJoZWlnaHQiaW4gZSYmKGQ9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybltkKih0WzBdK2gpLGQqKHRbMV0rZildfSl9ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT0wfE1hdGguY2VpbChlLm1lYXN1cmVUZXh0KHIpLndpZHRoKzIqbik7aWYoaT44MTkyKXRocm93IG5ldyBFcnJvcigidmVjdG9yaXplLXRleHQ6IFN0cmluZyB0b28gbG9uZyAoc29ycnksIHRoaXMgd2lsbCBnZXQgZml4ZWQgbGF0ZXIpIik7dmFyIGE9MypuO3QuaGVpZ2h0PGEmJih0LmhlaWdodD1hKSxlLmZpbGxTdHlsZT0iIzAwMCIsZS5maWxsUmVjdCgwLDAsdC53aWR0aCx0LmhlaWdodCksZS5maWxsU3R5bGU9IiNmZmYiLGUuZmlsbFRleHQocixuLDIqbik7dmFyIG89ZS5nZXRJbWFnZURhdGEoMCwwLGksYSk7cmV0dXJuIGMoby5kYXRhLFthLGksNF0pLnBpY2soLTEsLTEsMCkudHJhbnNwb3NlKDEsMCl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPXUodCwxMjgpO3JldHVybiBlP2goci5jZWxscyxyLnBvc2l0aW9ucywuMjUpOntlZGdlczpyLmNlbGxzLHBvc2l0aW9uczpyLnBvc2l0aW9uc319ZnVuY3Rpb24gbyh0LGUscixpKXt2YXIgbz1hKHQsaSkscz1uKG8ucG9zaXRpb25zLGUsciksbD1vLmVkZ2VzLHU9ImNjdyI9PT1lLm9yaWVudGF0aW9uO2lmKGYocyxsKSxlLnBvbHlnb25zfHxlLnBvbHlnb258fGUucG9seWxpbmUpe2Zvcih2YXIgYz1wKGwscyksaD1uZXcgQXJyYXkoYy5sZW5ndGgpLG09MDttPGMubGVuZ3RoOysrbSl7Zm9yKHZhciB2PWNbbV0sZz1uZXcgQXJyYXkodi5sZW5ndGgpLHk9MDt5PHYubGVuZ3RoOysreSl7Zm9yKHZhciBiPXZbeV0seD1uZXcgQXJyYXkoYi5sZW5ndGgpLF89MDtfPGIubGVuZ3RoOysrXyl4W19dPXNbYltfXV0uc2xpY2UoKTt1JiZ4LnJldmVyc2UoKSxnW3ldPXh9aFttXT1nfXJldHVybiBofXJldHVybiBlLnRyaWFuZ2xlc3x8ZS50cmlhbmd1bGF0ZXx8ZS50cmlhbmdsZT97Y2VsbHM6ZChzLGwse2RlbGF1bmF5OiExLGV4dGVyaW9yOiExLGludGVyaW9yOiEwfSkscG9zaXRpb25zOnN9OntlZGdlczpsLHBvc2l0aW9uczpzfX1mdW5jdGlvbiBzKHQsZSxyKXt0cnl7cmV0dXJuIG8odCxlLHIsITApfWNhdGNoKHQpe310cnl7cmV0dXJuIG8odCxlLHIsITEpfWNhdGNoKHQpe31yZXR1cm4gZS5wb2x5Z29uc3x8ZS5wb2x5bGluZXx8ZS5wb2x5Z29uP1tdOmUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpbXSxwb3NpdGlvbnM6W119OntlZGdlczpbXSxwb3NpdGlvbnM6W119fWZ1bmN0aW9uIGwodCxlLHIsbil7dmFyIGE9bi5zaXplfHw2NCxvPW4uZm9udHx8Im5vcm1hbCI7cmV0dXJuIHIuZm9udD1hKyJweCAiK28sci50ZXh0QWxpZ249InN0YXJ0IixyLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsci5kaXJlY3Rpb249Imx0ciIscyhpKGUscix0LGEpLG4sYSl9ZS5leHBvcnRzPWwsZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9czt2YXIgdT10KCJzdXJmYWNlLW5ldHMiKSxjPXQoIm5kYXJyYXkiKSxoPXQoInNpbXBsaWZ5LXBsYW5hci1ncmFwaCIpLGY9dCgiY2xlYW4tcHNsZyIpLGQ9dCgiY2R0MmQiKSxwPXQoInBsYW5hci1ncmFwaC10by1wb2x5bGluZSIpfSx7Y2R0MmQ6NzcsImNsZWFuLXBzbGciOjg3LG5kYXJyYXk6NDY1LCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmUiOjQ4MSwic2ltcGxpZnktcGxhbmFyLWdyYXBoIjo1MjEsInN1cmZhY2UtbmV0cyI6NTI5fV0sNTU0OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdC5sYXllcnMpZS5wdXNoKGEodC5sYXllcnNbcl0pKTt2YXIgbj1uZXcgYztyZXR1cm4gaC50aWxlLndyaXRlKHtsYXllcnM6ZX0sbiksbi5maW5pc2goKX1mdW5jdGlvbiBpKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KWVbcl09bmV3IGYodFtyXS5mZWF0dXJlcyksZVtyXS5uYW1lPXI7cmV0dXJuIG4oe2xheWVyczplfSl9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9e25hbWU6dC5uYW1lfHwiIix2ZXJzaW9uOnQudmVyc2lvbnx8MSxleHRlbnQ6dC5leHRlbnR8fDQwOTYsa2V5czpbXSx2YWx1ZXM6W10sZmVhdHVyZXM6W119LHI9e30sbj17fSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXQuZmVhdHVyZShpKTthLmdlb21ldHJ5PWwoYS5sb2FkR2VvbWV0cnkoKSk7dmFyIG89W107Zm9yKHZhciBzIGluIGEucHJvcGVydGllcyl7dmFyIGM9cltzXTt2b2lkIDA9PT1jJiYoZS5rZXlzLnB1c2gocyksYz1lLmtleXMubGVuZ3RoLTEscltzXT1jKTt2YXIgaD11KGEucHJvcGVydGllc1tzXSksZj1uW2gua2V5XTt2b2lkIDA9PT1mJiYoZS52YWx1ZXMucHVzaChoKSxmPWUudmFsdWVzLmxlbmd0aC0xLG5baC5rZXldPWYpLG8ucHVzaChjKSxvLnB1c2goZil9YS50YWdzPW8sZS5mZWF0dXJlcy5wdXNoKGEpfXJldHVybiBlfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4oZTw8MykrKDcmdCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdDw8MV50Pj4zMX1mdW5jdGlvbiBsKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj0wLGk9dC5sZW5ndGgsYT0wO2E8aTthKyspe3ZhciBsPXRbYV07ZS5wdXNoKG8oMSwxKSk7Zm9yKHZhciB1PTA7dTxsLmxlbmd0aDt1KyspezE9PT11JiZlLnB1c2gobygyLGwubGVuZ3RoLTEpKTt2YXIgYz1sW3VdLngtcixoPWxbdV0ueS1uO2UucHVzaChzKGMpLHMoaCkpLHIrPWMsbis9aH19cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXt2YXIgZSxyPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT09cj9lPXtzdHJpbmdfdmFsdWU6dH06ImJvb2xlYW4iPT09cj9lPXtib29sX3ZhbHVlOnR9OiJudW1iZXIiPT09cj9lPXQlMSE9MD97ZG91YmxlX3ZhbHVlOnR9OnQ8MD97c2ludF92YWx1ZTp0fTp7dWludF92YWx1ZTp0fToodD1KU09OLnN0cmluZ2lmeSh0KSxlPXtzdHJpbmdfdmFsdWU6dH0pLGUua2V5PXIrIjoiK3QsZX12YXIgYz10KCJwYmYiKSxoPXQoIi4vdmVjdG9yLXRpbGUtcGIiKSxmPXQoIi4vbGliL2dlb2pzb25fd3JhcHBlciIpO2UuZXhwb3J0cz1uLGUuZXhwb3J0cy5mcm9tVmVjdG9yVGlsZUpzPW4sZS5leHBvcnRzLmZyb21HZW9qc29uVnQ9aSxlLmV4cG9ydHMuR2VvSlNPTldyYXBwZXI9Zn0seyIuL2xpYi9nZW9qc29uX3dyYXBwZXIiOjU1NSwiLi92ZWN0b3ItdGlsZS1wYiI6NTU2LHBiZjo0NzZ9XSw1NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPSJudW1iZXIiPT10eXBlb2YgdC5pZD90LmlkOnZvaWQgMCx0aGlzLnR5cGU9dC50eXBlLHRoaXMucmF3R2VvbWV0cnk9MT09PXQudHlwZT9bdC5nZW9tZXRyeV06dC5nZW9tZXRyeSx0aGlzLnByb3BlcnRpZXM9dC50YWdzLHRoaXMuZXh0ZW50PTQwOTZ9dmFyIGE9dCgicG9pbnQtZ2VvbWV0cnkiKSxvPXQoInZlY3Rvci10aWxlIikuVmVjdG9yVGlsZUZlYXR1cmU7ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZmVhdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodGhpcy5mZWF0dXJlc1t0XSl9LGkucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmF3R2VvbWV0cnk7dGhpcy5nZW9tZXRyeT1bXTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7Zm9yKHZhciByPXRbZV0sbj1bXSxpPTA7aTxyLmxlbmd0aDtpKyspbi5wdXNoKG5ldyBhKHJbaV1bMF0scltpXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChuKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0saS5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0saS5wcm90b3R5cGUudG9HZW9KU09OPW8ucHJvdG90eXBlLnRvR2VvSlNPTn0seyJwb2ludC1nZW9tZXRyeSI6NDgyLCJ2ZWN0b3ItdGlsZSI6NTQ4fV0sNTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdC5yZWFkRmllbGRzKGkse2xheWVyczpbXX0sZSl9ZnVuY3Rpb24gaSh0LGUscil7Mz09PXQmJmUubGF5ZXJzLnB1c2goZihyLHIucmVhZFZhcmludCgpK3IucG9zKSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByO2lmKHZvaWQgMCE9PXQubGF5ZXJzKWZvcihyPTA7cjx0LmxheWVycy5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDMscCx0LmxheWVyc1tyXSl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0LnJlYWRGaWVsZHMocyx7fSxlKX1mdW5jdGlvbiBzKHQsZSxyKXsxPT09dD9lLnN0cmluZ192YWx1ZT1yLnJlYWRTdHJpbmcoKToyPT09dD9lLmZsb2F0X3ZhbHVlPXIucmVhZEZsb2F0KCk6Mz09PXQ/ZS5kb3VibGVfdmFsdWU9ci5yZWFkRG91YmxlKCk6ND09PXQ/ZS5pbnRfdmFsdWU9ci5yZWFkVmFyaW50KCk6NT09PXQ/ZS51aW50X3ZhbHVlPXIucmVhZFZhcmludCgpOjY9PT10P2Uuc2ludF92YWx1ZT1yLnJlYWRTVmFyaW50KCk6Nz09PXQmJihlLmJvb2xfdmFsdWU9ci5yZWFkQm9vbGVhbigpKX1mdW5jdGlvbiBsKHQsZSl7dm9pZCAwIT09dC5zdHJpbmdfdmFsdWUmJmUud3JpdGVTdHJpbmdGaWVsZCgxLHQuc3RyaW5nX3ZhbHVlKSx2b2lkIDAhPT10LmZsb2F0X3ZhbHVlJiZlLndyaXRlRmxvYXRGaWVsZCgyLHQuZmxvYXRfdmFsdWUpLHZvaWQgMCE9PXQuZG91YmxlX3ZhbHVlJiZlLndyaXRlRG91YmxlRmllbGQoMyx0LmRvdWJsZV92YWx1ZSksdm9pZCAwIT09dC5pbnRfdmFsdWUmJmUud3JpdGVWYXJpbnRGaWVsZCg0LHQuaW50X3ZhbHVlKSx2b2lkIDAhPT10LnVpbnRfdmFsdWUmJmUud3JpdGVWYXJpbnRGaWVsZCg1LHQudWludF92YWx1ZSksdm9pZCAwIT09dC5zaW50X3ZhbHVlJiZlLndyaXRlU1ZhcmludEZpZWxkKDYsdC5zaW50X3ZhbHVlKSx2b2lkIDAhPT10LmJvb2xfdmFsdWUmJmUud3JpdGVCb29sZWFuRmllbGQoNyx0LmJvb2xfdmFsdWUpfWZ1bmN0aW9uIHUodCxlKXt2YXIgcj10LnJlYWRGaWVsZHMoYyx7fSxlKTtyZXR1cm4gdm9pZCAwPT09ci50eXBlJiYoci50eXBlPSJVbmtub3duIikscn1mdW5jdGlvbiBjKHQsZSxyKXsxPT09dD9lLmlkPXIucmVhZFZhcmludCgpOjI9PT10P2UudGFncz1yLnJlYWRQYWNrZWRWYXJpbnQoKTozPT09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09PXQmJihlLmdlb21ldHJ5PXIucmVhZFBhY2tlZFZhcmludCgpKX1mdW5jdGlvbiBoKHQsZSl7dm9pZCAwIT09dC5pZCYmZS53cml0ZVZhcmludEZpZWxkKDEsdC5pZCksdm9pZCAwIT09dC50YWdzJiZlLndyaXRlUGFja2VkVmFyaW50KDIsdC50YWdzKSx2b2lkIDAhPT10LnR5cGUmJmUud3JpdGVWYXJpbnRGaWVsZCgzLHQudHlwZSksdm9pZCAwIT09dC5nZW9tZXRyeSYmZS53cml0ZVBhY2tlZFZhcmludCg0LHQuZ2VvbWV0cnkpfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC5yZWFkRmllbGRzKGQse2ZlYXR1cmVzOltdLGtleXM6W10sdmFsdWVzOltdfSxlKX1mdW5jdGlvbiBkKHQsZSxyKXsxNT09PXQ/ZS52ZXJzaW9uPXIucmVhZFZhcmludCgpOjE9PT10P2UubmFtZT1yLnJlYWRTdHJpbmcoKToyPT09dD9lLmZlYXR1cmVzLnB1c2godShyLHIucmVhZFZhcmludCgpK3IucG9zKSk6Mz09PXQ/ZS5rZXlzLnB1c2goci5yZWFkU3RyaW5nKCkpOjQ9PT10P2UudmFsdWVzLnB1c2gobyhyLHIucmVhZFZhcmludCgpK3IucG9zKSk6NT09PXQmJihlLmV4dGVudD1yLnJlYWRWYXJpbnQoKSl9ZnVuY3Rpb24gcCh0LGUpe3ZvaWQgMCE9PXQudmVyc2lvbiYmZS53cml0ZVZhcmludEZpZWxkKDE1LHQudmVyc2lvbiksdm9pZCAwIT09dC5uYW1lJiZlLndyaXRlU3RyaW5nRmllbGQoMSx0Lm5hbWUpO3ZhciByO2lmKHZvaWQgMCE9PXQuZmVhdHVyZXMpZm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoO3IrKyllLndyaXRlTWVzc2FnZSgyLGgsdC5mZWF0dXJlc1tyXSk7aWYodm9pZCAwIT09dC5rZXlzKWZvcihyPTA7cjx0LmtleXMubGVuZ3RoO3IrKyllLndyaXRlU3RyaW5nRmllbGQoMyx0LmtleXNbcl0pO2lmKHZvaWQgMCE9PXQudmFsdWVzKWZvcihyPTA7cjx0LnZhbHVlcy5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDQsbCx0LnZhbHVlc1tyXSk7dm9pZCAwIT09dC5leHRlbnQmJmUud3JpdGVWYXJpbnRGaWVsZCg1LHQuZXh0ZW50KX12YXIgbT1yLnRpbGU9e3JlYWQ6bix3cml0ZTphfTttLkdlb21UeXBlPXtVbmtub3duOjAsUG9pbnQ6MSxMaW5lU3RyaW5nOjIsUG9seWdvbjozfSxtLnZhbHVlPXtyZWFkOm8sd3JpdGU6bH0sbS5mZWF0dXJlPXtyZWFkOnUsd3JpdGU6aH0sbS5sYXllcj17cmVhZDpmLHdyaXRlOnB9fSx7fV0sNTU3OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7ZS5wZXJtaXRIb3N0T2JqZWN0c19fXyYmZS5wZXJtaXRIb3N0T2JqZWN0c19fXyh0KX1mdW5jdGlvbiByKHQpe3JldHVybiEodC5zdWJzdHIoMCxkLmxlbmd0aCk9PWQmJiJfX18iPT09dC5zdWJzdHIodC5sZW5ndGgtMykpfWZ1bmN0aW9uIG4odCl7aWYodCE9PU9iamVjdCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJOb3QgYW4gb2JqZWN0OiAiK3QpO3ZhciBlPXRbcF07aWYoZSYmZS5rZXk9PT10KXJldHVybiBlO2lmKGYodCkpe2U9e2tleTp0fTt0cnl7cmV0dXJuIGgodCxwLHt2YWx1ZTplLHdyaXRhYmxlOiExLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiExfSksZX1jYXRjaCh0KXtyZXR1cm59fX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnByb3RvdHlwZT1udWxsLE9iamVjdC5mcmVlemUodCl9ZnVuY3Rpb24gYSgpe3l8fCJ1bmRlZmluZWQiPT10eXBlb2YgY29uc29sZXx8KHk9ITAsY29uc29sZS53YXJuKCJXZWFrTWFwIHNob3VsZCBiZSBpbnZva2VkIGFzIG5ldyBXZWFrTWFwKCksIG5vdCBXZWFrTWFwKCkuIFRoaXMgd2lsbCBiZSBhbiBlcnJvciBpbiB0aGUgZnV0dXJlLiIpKX1pZigidW5kZWZpbmVkIj09dHlwZW9mIHNlc3x8IXNlcy5va3x8c2VzLm9rKCkpeyJ1bmRlZmluZWQiIT10eXBlb2Ygc2VzJiYoc2VzLndlYWtNYXBQZXJtaXRIb3N0T2JqZWN0cz10KTt2YXIgbz0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcCl7dmFyIHM9V2Vha01hcDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpO2Vsc2V7dmFyIGw9bmV3IHMsdT1PYmplY3QuZnJlZXplKHt9KTtpZihsLnNldCh1LDEpLDE9PT1sLmdldCh1KSlyZXR1cm4gdm9pZChlLmV4cG9ydHM9V2Vha01hcCk7bz0hMH19dmFyIGM9KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpLGg9T2JqZWN0LmRlZmluZVByb3BlcnR5LGY9T2JqZWN0LmlzRXh0ZW5zaWJsZSxkPSJ3ZWFrbWFwOiIscD1kKyJpZGVudDoiK01hdGgucmFuZG9tKCkrIl9fXyI7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJiJmdW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5KXt2YXIgbT1uZXcgQXJyYXlCdWZmZXIoMjUpLHY9bmV3IFVpbnQ4QXJyYXkobSk7Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyh2KSxwPWQrInJhbmQ6IitBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodixmdW5jdGlvbih0KXtyZXR1cm4odCUzNikudG9TdHJpbmcoMzYpfSkuam9pbigiIikrIl9fXyJ9aWYoaChPYmplY3QsImdldE93blByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0KS5maWx0ZXIocil9fSksImdldFByb3BlcnR5TmFtZXMiaW4gT2JqZWN0KXt2YXIgZz1PYmplY3QuZ2V0UHJvcGVydHlOYW1lcztoKE9iamVjdCwiZ2V0UHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLmZpbHRlcihyKX19KX0hZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuZnJlZXplO2goT2JqZWN0LCJmcmVlemUiLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbihlKSx0KGUpfX0pO3ZhciBlPU9iamVjdC5zZWFsO2goT2JqZWN0LCJzZWFsIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCksZSh0KX19KTt2YXIgcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7aChPYmplY3QsInByZXZlbnRFeHRlbnNpb25zIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIG4odCkscih0KX19KX0oKTt2YXIgeT0hMSxiPTAseD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt2YXIgcixpPW4odCk7cmV0dXJuIGk/dSBpbiBpP2lbdV06ZToocj1zLmluZGV4T2YodCkscj49MD9sW3JdOmUpfWZ1bmN0aW9uIGUodCl7dmFyIGU9bih0KTtyZXR1cm4gZT91IGluIGU6cy5pbmRleE9mKHQpPj0wfWZ1bmN0aW9uIHIodCxlKXt2YXIgcixpPW4odCk7cmV0dXJuIGk/aVt1XT1lOihyPXMuaW5kZXhPZih0KSxyPj0wP2xbcl09ZToocj1zLmxlbmd0aCxsW3JdPWUsc1tyXT10KSksdGhpc31mdW5jdGlvbiBvKHQpe3ZhciBlLHIsaT1uKHQpO3JldHVybiBpP3UgaW4gaSYmZGVsZXRlIGlbdV06ISgoZT1zLmluZGV4T2YodCkpPDApJiYocj1zLmxlbmd0aC0xLHNbZV09dm9pZCAwLGxbZV09bFtyXSxzW2VdPXNbcl0scy5sZW5ndGg9cixsLmxlbmd0aD1yLCEwKX10aGlzIGluc3RhbmNlb2YgeHx8YSgpO3ZhciBzPVtdLGw9W10sdT1iKys7cmV0dXJuIE9iamVjdC5jcmVhdGUoeC5wcm90b3R5cGUse2dldF9fXzp7dmFsdWU6aSh0KX0saGFzX19fOnt2YWx1ZTppKGUpfSxzZXRfX186e3ZhbHVlOmkocil9LGRlbGV0ZV9fXzp7dmFsdWU6aShvKX19KX07eC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShPYmplY3QucHJvdG90eXBlLHtnZXQ6e3ZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZ2V0X19fKHQsZSl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0saGFzOnt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXNfX18odCl9LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnNldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGRlbGV0ZTp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVsZXRlX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksImZ1bmN0aW9uIj09dHlwZW9mIHM/ZnVuY3Rpb24oKXtmdW5jdGlvbiByKCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBjP3UuaGFzKHQpP3UuZ2V0KHQpOmMuZ2V0X19fKHQsZSk6dS5nZXQodCxlKX1mdW5jdGlvbiByKHQpe3JldHVybiB1Lmhhcyh0KXx8ISFjJiZjLmhhc19fXyh0KX1mdW5jdGlvbiBuKHQpe3ZhciBlPSEhdS5kZWxldGUodCk7cmV0dXJuIGM/Yy5kZWxldGVfX18odCl8fGU6ZX10aGlzIGluc3RhbmNlb2YgeHx8YSgpO3ZhciBsLHU9bmV3IHMsYz12b2lkIDAsaD0hMTtyZXR1cm4gbD1vP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHUuc2V0KHQsZSksdS5oYXModCl8fChjfHwoYz1uZXcgeCksYy5zZXQodCxlKSksdGhpc306ZnVuY3Rpb24odCxlKXtpZihoKXRyeXt1LnNldCh0LGUpfWNhdGNoKHIpe2N8fChjPW5ldyB4KSxjLnNldF9fXyh0LGUpfWVsc2UgdS5zZXQodCxlKTtyZXR1cm4gdGhpc30sT2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTppKGUpfSxoYXNfX186e3ZhbHVlOmkocil9LHNldF9fXzp7dmFsdWU6aShsKX0sZGVsZXRlX19fOnt2YWx1ZTppKG4pfSxwZXJtaXRIb3N0T2JqZWN0c19fXzp7dmFsdWU6aShmdW5jdGlvbihlKXtpZihlIT09dCl0aHJvdyBuZXcgRXJyb3IoImJvZ3VzIGNhbGwgdG8gcGVybWl0SG9zdE9iamVjdHNfX18iKTtoPSEwfSl9fSl9byYmInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksci5wcm90b3R5cGU9eC5wcm90b3R5cGUsZS5leHBvcnRzPXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KFdlYWtNYXAucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOldlYWtNYXAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX0oKTooInVuZGVmaW5lZCIhPXR5cGVvZiBQcm94eSYmKFByb3h5PXZvaWQgMCksZS5leHBvcnRzPXgpfX0oKX0se31dLDU1ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt2YXIgdD17fTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIldlYWttYXAtc2hpbTogS2V5IG11c3QgYmUgb2JqZWN0Iik7dmFyIHI9ZS52YWx1ZU9mKHQpO3JldHVybiByJiZyLmlkZW50aXR5PT09dD9yOmkoZSx0KX19dmFyIGk9dCgiLi9oaWRkZW4tc3RvcmUuanMiKTtlLmV4cG9ydHM9bn0seyIuL2hpZGRlbi1zdG9yZS5qcyI6NTU5fV0sNTU5OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXtpZGVudGl0eTplfSxuPXQudmFsdWVPZjtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInZhbHVlT2YiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cn0sd3JpdGFibGU6ITB9KSxyfWUuZXhwb3J0cz1ufSx7fV0sNTYwOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3ZhciB0PWkoKTtyZXR1cm57Z2V0OmZ1bmN0aW9uKGUscil7dmFyIG49dChlKTtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKT9uLnZhbHVlOnJ9LHNldDpmdW5jdGlvbihlLHIpe3JldHVybiB0KGUpLnZhbHVlPXIsdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiJ2YWx1ZSJpbiB0KGUpfSxkZWxldGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0KGUpLnZhbHVlfX19dmFyIGk9dCgiLi9jcmVhdGUtc3RvcmUuanMiKTtlLmV4cG9ydHM9bn0seyIuL2NyZWF0ZS1zdG9yZS5qcyI6NTU4fV0sNTYxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2V0LWNhbnZhcy1jb250ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJ3ZWJnbCIsdCl9fSx7ImdldC1jYW52YXMtY29udGV4dCI6MTQ1fV0sNTYyOltmdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzWzNdLGk9YXJndW1lbnRzWzRdLGE9YXJndW1lbnRzWzVdLG89SlNPTi5zdHJpbmdpZnk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt2W3RdPSEwO2Zvcih2YXIgZSBpbiBpW3RdWzFdKXt2YXIgbj1pW3RdWzFdW2VdO3Zbbl18fHIobil9fQpmb3IodmFyIHMsbD1PYmplY3Qua2V5cyhhKSx1PTAsYz1sLmxlbmd0aDt1PGM7dSsrKXt2YXIgaD1sW3VdLGY9YVtoXS5leHBvcnRzO2lmKGY9PT10fHxmJiZmLmRlZmF1bHQ9PT10KXtzPWg7YnJlYWt9fWlmKCFzKXtzPU1hdGguZmxvb3IoTWF0aC5wb3coMTYsOCkqTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO2Zvcih2YXIgZD17fSx1PTAsYz1sLmxlbmd0aDt1PGM7dSsrKXt2YXIgaD1sW3VdO2RbaF09aH1pW3NdPVtGdW5jdGlvbihbInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIigiK3QrIikoc2VsZikiKSxkXX12YXIgcD1NYXRoLmZsb29yKE1hdGgucG93KDE2LDgpKk1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDE2KSxtPXt9O21bc109cyxpW3BdPVtGdW5jdGlvbihbInJlcXVpcmUiXSwidmFyIGYgPSByZXF1aXJlKCIrIG8ocykgKyIpOyhmLmRlZmF1bHQgPyBmLmRlZmF1bHQgOiBmKShzZWxmKTsiKSxtXTt2YXIgdj17fTtyKHApO3ZhciBnPSIoIituKyIpKHsiK09iamVjdC5rZXlzKHYpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gbyh0KSsiOlsiK2lbdF1bMF0rIiwiK28oaVt0XVsxXSkrIl0ifSkuam9pbigiLCIpKyJ9LHt9LFsiK28ocCkrIl0pIix5PXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkx8fHdpbmRvdy5tb3pVUkx8fHdpbmRvdy5tc1VSTCxiPW5ldyBCbG9iKFtnXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pO2lmKGUmJmUuYmFyZSlyZXR1cm4gYjt2YXIgeD15LmNyZWF0ZU9iamVjdFVSTChiKSxfPW5ldyBXb3JrZXIoeCk7cmV0dXJuIF8ub2JqZWN0VVJMPXgsX319LHt9XSw1NjM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHMuUkFESVVTPTYzNzgxMzcsZS5leHBvcnRzLkZMQVRURU5JTkc9MS8yOTguMjU3MjIzNTYzLGUuZXhwb3J0cy5QT0xBUl9SQURJVVM9NjM1Njc1Mi4zMTQyfSx7fV0sNTY0OltmdW5jdGlvbihlLHIsbil7IWZ1bmN0aW9uKGUsaSl7Im9iamVjdCI9PXR5cGVvZiBuJiZ2b2lkIDAhPT1yP2kobik6ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kP3QoWyJleHBvcnRzIl0saSk6aShlLldob29UUz1lLldob29UU3x8e30pfSh0aGlzLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLG4saSxhLG8pe3JldHVybiBvPW98fHt9LHQrIj8iK1siYmJveD0iK3IobixpLGEpLCJmb3JtYXQ9Iisoby5mb3JtYXR8fCJpbWFnZS9wbmciKSwic2VydmljZT0iKyhvLnNlcnZpY2V8fCJXTVMiKSwidmVyc2lvbj0iKyhvLnZlcnNpb258fCIxLjEuMSIpLCJyZXF1ZXN0PSIrKG8ucmVxdWVzdHx8IkdldE1hcCIpLCJzcnM9Iisoby5zcnN8fCJFUFNHOjM4NTciKSwid2lkdGg9Iisoby53aWR0aHx8MjU2KSwiaGVpZ2h0PSIrKG8uaGVpZ2h0fHwyNTYpLCJsYXllcnM9IitlXS5qb2luKCImIil9ZnVuY3Rpb24gcih0LGUscil7ZT1NYXRoLnBvdygyLHIpLWUtMTt2YXIgaT1uKDI1Nip0LDI1NiplLHIpLGE9bigyNTYqKHQrMSksMjU2KihlKzEpLHIpO3JldHVybiBpWzBdKyIsIitpWzFdKyIsIithWzBdKyIsIithWzFdfWZ1bmN0aW9uIG4odCxlLHIpe3ZhciBuPTIqTWF0aC5QSSo2Mzc4MTM3LzI1Ni9NYXRoLnBvdygyLHIpO3JldHVyblt0Km4tMipNYXRoLlBJKjYzNzgxMzcvMixlKm4tMipNYXRoLlBJKjYzNzgxMzcvMl19dC5nZXRVUkw9ZSx0LmdldFRpbGVCQm94PXIsdC5nZXRNZXJjQ29vcmRzPW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSl9LHt9XSw1NjU6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaSxhO2lmKCJvYmplY3QiPT10eXBlb2YgdClpPXQsYT1lfHx7fTtlbHNle2lmKCEoIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0xODg4JiZ0PD0yMTExKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIHllYXIgb3V0c2lkZSByYW5nZSAxODg4LTIxMTEiKTtpZighKCJudW1iZXIiPT10eXBlb2YgZSYmZT49MSYmZTw9MTIpKXRocm93IG5ldyBFcnJvcigiU29sYXIgbW9udGggb3V0c2lkZSByYW5nZSAxIC0gMTIiKTtpZighKCJudW1iZXIiPT10eXBlb2YgciYmcj49MSYmcjw9MzEpKXRocm93IG5ldyBFcnJvcigiU29sYXIgZGF5IG91dHNpZGUgcmFuZ2UgMSAtIDMxIik7aT17eWVhcjp0LG1vbnRoOmUsZGF5OnJ9LGE9bnx8e319dmFyIG89cFtpLnllYXItcFswXV0scz1pLnllYXI8PDl8aS5tb250aDw8NXxpLmRheTthLnllYXI9cz49bz9pLnllYXI6aS55ZWFyLTEsbz1wW2EueWVhci1wWzBdXTt2YXIgbCx1PW8+PjkmNDA5NSxjPW8+PjUmMTUsaD0zMSZvLGY9bmV3IERhdGUodSxjLTEsaCksbT1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtsPU1hdGgucm91bmQoKG0tZikvODY0ZTUpO3ZhciB2LGc9ZFthLnllYXItZFswXV07Zm9yKHY9MDt2PDEzO3YrKyl7dmFyIHk9ZyYxPDwxMi12PzMwOjI5O2lmKGw8eSlicmVhaztsLT15fXZhciBiPWc+PjEzO3JldHVybiFifHx2PGI/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErdik6dj09PWI/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXYpOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD12KSxhLmRheT0xK2wsYX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7dmFyIGEsbztpZigib2JqZWN0Ij09dHlwZW9mIHQpbz10LGE9ZXx8e307ZWxzZXtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMSkpdGhyb3cgbmV3IEVycm9yKCJMdW5hciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7aWYoISgibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7aWYoISgibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMCIpO3ZhciBzOyJvYmplY3QiPT10eXBlb2Ygbj8ocz0hMSxhPW4pOihzPSEhbixhPWl8fHt9KSxvPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cixpc0ludGVyY2FsYXJ5OnN9fXZhciBsO2w9by5kYXktMTt2YXIgdSxjPWRbby55ZWFyLWRbMF1dLGg9Yz4+MTM7dT1oP28ubW9udGg+aD9vLm1vbnRoOm8uaXNJbnRlcmNhbGFyeT9vLm1vbnRoOm8ubW9udGgtMTpvLm1vbnRoLTE7Zm9yKHZhciBmPTA7Zjx1O2YrKyl7bCs9YyYxPDwxMi1mPzMwOjI5fXZhciBtPXBbby55ZWFyLXBbMF1dLHY9bT4+OSY0MDk1LGc9bT4+NSYxNSx5PTMxJm0sYj1uZXcgRGF0ZSh2LGctMSx5K2wpO3JldHVybiBhLnllYXI9Yi5nZXRGdWxsWWVhcigpLGEubW9udGg9MStiLmdldE1vbnRoKCksYS5kYXk9Yi5nZXREYXRlKCksYX12YXIgbz10KCIuLi9tYWluIikscz10KCJvYmplY3QtYXNzaWduIiksbD1vLmluc3RhbmNlKCk7bi5wcm90b3R5cGU9bmV3IG8uYmFzZUNhbGVuZGFyLHMobi5wcm90b3R5cGUse25hbWU6IkNoaW5lc2UiLGpkRXBvY2g6MTcyMTQyNS41LGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkNoaW5lc2UiLGVwb2NoczpbIkJFQyIsIkVDIl0sbW9udGhOdW1iZXJzOmZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgcj10Lm1hdGNoKGMpO3JldHVybiByP3JbMF06IiJ9dmFyIG49dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGk9dC5tb250aCgpLGE9IiIrdGhpcy50b0NoaW5lc2VNb250aChuLGkpO3JldHVybiBlJiZhLmxlbmd0aDwyJiYoYT0iMCIrYSksdGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSYmKGErPSJpIiksYX0sbW9udGhOYW1lczpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2goaCk7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT10aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiksYT1bIlx1NGUwMFx1NjcwOCIsIlx1NGU4Y1x1NjcwOCIsIlx1NGUwOVx1NjcwOCIsIlx1NTZkYlx1NjcwOCIsIlx1NGU5NFx1NjcwOCIsIlx1NTE2ZFx1NjcwOCIsIlx1NGUwM1x1NjcwOCIsIlx1NTE2Ylx1NjcwOCIsIlx1NGU1ZFx1NjcwOCIsIlx1NTM0MVx1NjcwOCIsIlx1NTM0MVx1NGUwMFx1NjcwOCIsIlx1NTM0MVx1NGU4Y1x1NjcwOCJdW2ktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihhPSJcdTk1ZjAiK2EpLGF9LG1vbnRoTmFtZXNTaG9ydDpmdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPXQubWF0Y2goZik7cmV0dXJuIGU/ZVswXToiIn12YXIgcj10aGlzLl92YWxpZGF0ZVllYXIodCksbj10Lm1vbnRoKCksaT10aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiksYT1bIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSIsIlx1NTM0MVx1NGUwMCIsIlx1NTM0MVx1NGU4YyJdW2ktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihhPSJcdTk1ZjAiK2EpLGF9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKSJcdTk1ZjAiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksIlx1NjcwOCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErWyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPSJpIj09PWl8fCJJIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MTg4OHx8dD4yMTExKXRocm93IGUucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1ufHxlPDF8fGU+MTIpdGhyb3cgby5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIG4/IXImJmU8PW4/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKHQ9dC55ZWFyKCksZT10Lm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KSxuPXI/MTI6MTE7aWYoZTwwfHxlPm4pdGhyb3cgby5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHI/ZTxyP2UrMTplOmUrMX0saW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVllYXIodCksZFt0LWRbMF1dPj4xM30saXNJbnRlcmNhbGFyeU1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYodD10LnllYXIoKSxlPXQubW9udGgoKSk7dmFyIHI9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO3JldHVybiEhciYmcj09PWV9LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMuX3ZhbGlkYXRlWWVhcih0LG8ubG9jYWwuaW52YWxpZHllYXIpLGE9cFtpLXBbMF1dLHM9YT4+OSY0MDk1LHU9YT4+NSYxNSxjPTMxJmE7bj1sLm5ld0RhdGUocyx1LGMpLG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIik7dmFyIGg9dGhpcy50b0pEKHQsZSxyKS1uLnRvSkQoKTtyZXR1cm4gMStNYXRoLmZsb29yKGgvNyl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8xMzoxMn0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcj1kW3QtZFswXV07aWYoZT4ocj4+MTM/MTI6MTEpKXRocm93IG8ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByJjE8PDEyLWU/MzA6Mjl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQscyxyLG8ubG9jYWwuaW52YWxpZERhdGUpO3Q9dGhpcy5fdmFsaWRhdGVZZWFyKG4ueWVhcigpKSxlPW4ubW9udGgoKSxyPW4uZGF5KCk7dmFyIGk9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgodCxlKSxzPXRoaXMudG9DaGluZXNlTW9udGgodCxlKSx1PWEodCxzLHIsaSk7cmV0dXJuIGwudG9KRCh1LnllYXIsdS5tb250aCx1LmRheSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1sLmZyb21KRCh0KSxyPWkoZS55ZWFyKCksZS5tb250aCgpLGUuZGF5KCkpLG49dGhpcy50b01vbnRoSW5kZXgoci55ZWFyLHIubW9udGgsci5pc0ludGVyY2FsYXJ5KTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIueWVhcixuLHIuZGF5KX0sZnJvbVN0cmluZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKHUpLHI9dGhpcy5fdmFsaWRhdGVZZWFyKCtlWzFdKSxuPStlWzJdLGk9ISFlWzNdLGE9dGhpcy50b01vbnRoSW5kZXgocixuLGkpLG89K2VbNF07cmV0dXJuIHRoaXMubmV3RGF0ZShyLGEsbyl9LGFkZDpmdW5jdGlvbih0LGUscil7dmFyIGk9dC55ZWFyKCksYT10Lm1vbnRoKCksbz10aGlzLmlzSW50ZXJjYWxhcnlNb250aChpLGEpLHM9dGhpcy50b0NoaW5lc2VNb250aChpLGEpLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5hZGQuY2FsbCh0aGlzLHQsZSxyKTtpZigieSI9PT1yKXt2YXIgdT1sLnllYXIoKSxjPWwubW9udGgoKSxoPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHUscyksZj1vJiZoP3RoaXMudG9Nb250aEluZGV4KHUscywhMCk6dGhpcy50b01vbnRoSW5kZXgodSxzLCExKTtmIT09YyYmbC5tb250aChmKX1yZXR1cm4gbH19KTt2YXIgdT0vXlxzKigtP1xkXGRcZFxkfFxkXGQpWy1cL10oXGQ/XGQpKFtpSV0/KVstXC9dKFxkP1xkKS9tLGM9L15cZD9cZFtpSV0/L20saD0vXlx1OTVmMD9cdTUzNDE/W1x1NGUwMFx1NGU4Y1x1NGUwOVx1NTZkYlx1NGU5NFx1NTE2ZFx1NGUwM1x1NTE2Ylx1NGU1ZF0/XHU2NzA4L20sZj0vXlx1OTVmMD9cdTUzNDE/W1x1NGUwMFx1NGU4Y1x1NGUwOVx1NTZkYlx1NGU5NFx1NTE2ZFx1NGUwM1x1NTE2Ylx1NGU1ZF0/L207by5jYWxlbmRhcnMuY2hpbmVzZT1uO3ZhciBkPVsxODg3LDU3ODAsNTgwMiwxOTE1NywyNzQyLDUwMzU5LDExOTgsMjY0Niw0NjM3OCw3NDY2LDM0MTIsMzAxMjIsNTQ4Miw2Nzk0OSwyMzk2LDUyOTQsNDM1OTcsNjczMiw2OTU0LDM2MTgxLDI3NzIsNDk1NCwxODc4MSwyMzk2LDU0NDI3LDUyNzQsNjczMCw0Nzc4MSw1ODAwLDY4NjgsMjEyMTAsNDc5MCw1OTcwMywyMzUwLDUyNzAsNDY2NjcsMzQwMiwzNDk2LDM4MzI1LDEzODgsNDc4MiwxODczNSwyMzUwLDUyMzc0LDY4MDQsNzQ5OCw0NDQ1NywyOTA2LDEzODgsMjkyOTQsNDcwMCw2Mzc4OSw2NDQyLDY4MDQsNTYxMzgsNTgwMiwyNzcyLDM4MjM1LDEyMTAsNDY5OCwyMjgyNyw1NDE4LDYzMTI1LDM0NzYsNTgwMiw0MzcwMSwyNDg0LDUzMDIsMjcyMjMsMjY0Niw3MDk1NCw3NDY2LDM0MTIsNTQ2OTgsNTQ4MiwyNDEyLDM4MDYyLDUyOTQsMjYzNiwzMjAzOCw2OTU0LDYwMjQ1LDI3NzIsNDgyNiw0MzM1NywyMzk0LDUyNzQsMzk1MDEsNjczMCw3MjM1Nyw1ODAwLDU4NDQsNTM5NzgsNDc5MCwyMzU4LDM4MDM5LDUyNzAsODc2MjcsMzQwMiwzNDk2LDU0NzA4LDU0ODQsNDc4Miw0MzMxMSwyMzUwLDMyMjIsMjc5NzgsNzQ5OCw2ODk2NSwyOTA0LDU0ODQsNDU2NzcsNDcwMCw2NDQ0LDM5NTczLDY4MDQsNjk4NiwxOTI4NSwyNzcyLDYyODExLDEyMTAsNDY5OCw0NzQwMyw1NDE4LDU3ODAsMzg1NzAsNTU0Niw3NjQ2OSwyNDIwLDUzMDIsNTE3OTksMjY0Niw1NDE0LDM2NTAxLDM0MTIsNTU0NiwxODg2OSwyNDEyLDU0NDQ2LDUyNzYsNjczMiw0ODQyMiw2ODIyLDI5MDAsMjgwMTAsNDgyNiw5MjUwOSwyMzk0LDUyNzQsNTU4ODMsNjczMCw2ODIwLDQ3OTU2LDU4MTIsMjc3OCwxODc3OSwyMzU4LDYyNjE1LDUyNzAsNTQ1MCw0Njc1NywzNDkyLDU1NTYsMjczMTgsNDcxOCw2Nzg4NywyMzUwLDMyMjIsNTI1NTQsNzQ5OCwzNDI4LDM4MjUyLDU0NjgsNDcwMCwzMTAyMiw2NDQ0LDY0MTQ5LDY4MDQsNjk4Niw0Mzg2MSwyNzcyLDUzMzgsMzU0MjEsMjY1MCw3MDk1NSw1NDE4LDU3ODAsNTQ5NTQsNTU0NiwyNzQwLDM4MDc0LDUzMDIsMjY0NiwyOTk5MSwzMzY2LDYxMDExLDM0MTIsNTU0Niw0MzQ0NSwyNDEyLDUyOTQsMzU0MDYsNjczMiw3Mjk5OCw2ODIwLDY5OTYsNTI1ODYsMjc3OCwyMzk2LDM4MDQ1LDUyNzQsNjY5OCwyMzMzMyw2ODIwLDY0MzM4LDU4MTIsMjc0Niw0MzM1NSwyMzU4LDUyNzAsMzk0OTksNTQ1MCw3OTUyNSwzNDkyLDU1NDhdLHA9WzE4ODcsOTY2NzMyLDk2NzIzMSw5Njc3MzMsOTY4MjY1LDk2ODc2Niw5NjkyOTcsOTY5Nzk4LDk3MDI5OCw5NzA4MjksOTcxMzMwLDk3MTgzMCw5NzIzNjIsOTcyODYzLDk3MzM5NSw5NzM4OTYsOTc0Mzk3LDk3NDkyOCw5NzU0MjgsOTc1OTI5LDk3NjQ2MSw5NzY5NjIsOTc3NDYyLDk3Nzk5NCw5Nzg0OTQsOTc5MDI2LDk3OTUyNiw5ODAwMjYsOTgwNTU4LDk4MTA1OSw5ODE1NTksOTgyMDkxLDk4MjU5Myw5ODMxMjQsOTgzNjI0LDk4NDEyNCw5ODQ2NTYsOTg1MTU3LDk4NTY1Niw5ODYxODksOTg2NjkwLDk4NzE5MSw5ODc3MjIsOTg4MjIyLDk4ODc1Myw5ODkyNTQsOTg5NzU0LDk5MDI4Niw5OTA3ODgsOTkxMjg4LDk5MTgxOSw5OTIzMTksOTkyODUxLDk5MzM1Miw5OTM4NTEsOTk0MzgzLDk5NDg4NSw5OTUzODUsOTk1OTE3LDk5NjQxOCw5OTY5MTgsOTk3NDUwLDk5Nzk0OSw5OTg0ODEsOTk4OTgyLDk5OTQ4MywxMDAwMDE0LDEwMDA1MTUsMTAwMTAxNiwxMDAxNTQ4LDEwMDIwNDcsMTAwMjU3OCwxMDAzMDgwLDEwMDM1ODAsMTAwNDExMSwxMDA0NjEzLDEwMDUxMTMsMTAwNTY0NSwxMDA2MTQ2LDEwMDY2NDUsMTAwNzE3NywxMDA3Njc4LDEwMDgyMDksMTAwODcxMCwxMDA5MjExLDEwMDk3NDMsMTAxMDI0MywxMDEwNzQzLDEwMTEyNzUsMTAxMTc3NSwxMDEyMzA2LDEwMTI4MDcsMTAxMzMwOCwxMDEzODQwLDEwMTQzNDEsMTAxNDg0MSwxMDE1MzczLDEwMTU4NzQsMTAxNjQwNCwxMDE2OTA1LDEwMTc0MDUsMTAxNzkzNywxMDE4NDM4LDEwMTg5MzksMTAxOTQ3MSwxMDE5OTcyLDEwMjA0NzEsMTAyMTAwMiwxMDIxNTAzLDEwMjIwMzUsMTAyMjUzNSwxMDIzMDM2LDEwMjM1NjgsMTAyNDA2OSwxMDI0NTY4LDEwMjUxMDAsMTAyNTYwMSwxMDI2MTAyLDEwMjY2MzMsMTAyNzEzMywxMDI3NjY2LDEwMjgxNjcsMTAyODY2NiwxMDI5MTk4LDEwMjk2OTksMTAzMDE5OSwxMDMwNzMwLDEwMzEyMzEsMTAzMTc2MywxMDMyMjY0LDEwMzI3NjQsMTAzMzI5NiwxMDMzNzk3LDEwMzQyOTcsMTAzNDgyOCwxMDM1MzI5LDEwMzU4MzAsMTAzNjM2MiwxMDM2ODYxLDEwMzczOTMsMTAzNzg5NCwxMDM4Mzk0LDEwMzg5MjUsMTAzOTQyNywxMDM5OTI3LDEwNDA0NTksMTA0MDk1OSwxMDQxNDkxLDEwNDE5OTIsMTA0MjQ5MiwxMDQzMDIzLDEwNDM1MjQsMTA0NDAyNCwxMDQ0NTU2LDEwNDUwNTcsMTA0NTU1OCwxMDQ2MDkwLDEwNDY1OTAsMTA0NzEyMSwxMDQ3NjIyLDEwNDgxMjIsMTA0ODY1NCwxMDQ5MTU0LDEwNDk2NTUsMTA1MDE4NywxMDUwNjg5LDEwNTEyMTksMTA1MTcyMCwxMDUyMjIwLDEwNTI3NTEsMTA1MzI1MiwxMDUzNzUyLDEwNTQyODQsMTA1NDc4NiwxMDU1Mjg1LDEwNTU4MTcsMTA1NjMxNywxMDU2ODQ5LDEwNTczNDksMTA1Nzg1MCwxMDU4MzgyLDEwNTg4ODMsMTA1OTM4MywxMDU5OTE1LDEwNjA0MTUsMTA2MDk0NywxMDYxNDQ3LDEwNjE5NDcsMTA2MjQ3OSwxMDYyOTgxLDEwNjM0ODAsMTA2NDAxMiwxMDY0NTE0LDEwNjUwMTQsMTA2NTU0NSwxMDY2MDQ1LDEwNjY1NzcsMTA2NzA3OCwxMDY3NTc4LDEwNjgxMTAsMTA2ODYxMSwxMDY5MTEyLDEwNjk2NDIsMTA3MDE0MiwxMDcwNjc0LDEwNzExNzUsMTA3MTY3NSwxMDcyMjA3LDEwNzI3MDksMTA3MzIwOSwxMDczNzQwLDEwNzQyNDEsMTA3NDc0MSwxMDc1MjczLDEwNzU3NzMsMTA3NjMwNSwxMDc2ODA3LDEwNzczMDgsMTA3NzgzOSwxMDc4MzQwLDEwNzg4NDAsMTA3OTM3MiwxMDc5ODcxLDEwODA0MDMsMTA4MDkwNF19LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJDb3B0aWMiLGpkRXBvY2g6MTgyNTAyOS41LGRheXNQZXJNb250aDpbMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsMzAsNV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ29wdGljIixlcG9jaHM6WyJCQU0iLCJBTSJdLG1vbnRoTmFtZXM6WyJUaG91dCIsIlBhb3BpIiwiSGF0aG9yIiwiS29pYWsiLCJUb2JpIiwiTWVzaGlyIiwiUGFyZW1oYXQiLCJQYXJlbW91ZGUiLCJQYXNob25zIiwiUGFvbmkiLCJFcGlwIiwiTWVzb3JpIiwiUGkgS29naSBFbmF2b3QiXSxtb250aE5hbWVzU2hvcnQ6WyJUaG8iLCJQYW8iLCJIYXRoIiwiS29pIiwiVG9iIiwiTWVzaCIsIlBhdCIsIlBhZCIsIlBhc2giLCJQYW8iLCJFcGkiLCJNZXNvIiwiUGlLIl0sZGF5TmFtZXM6WyJUa3lyaWFrYSIsIlBlc25hdSIsIlBzaG9tZW50IiwiUGVmdG9vdSIsIlB0aW91IiwiUHNvb3UiLCJQc2FiYmF0b24iXSxkYXlOYW1lc1Nob3J0OlsiVGt5IiwiUGVzIiwiUHNoIiwiUGVmIiwiUHRpIiwiUHNvIiwiUHNhIl0sZGF5TmFtZXNNaW46WyJUayIsIlBlcyIsIlBzaCIsIlBlZiIsIlB0IiwiUHNvIiwiUHNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCk7cmV0dXJuIHQlND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhcnx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCksdDwwJiZ0Kyssbi5kYXkoKSszMCoobi5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksaS5jYWxlbmRhcnMuY29wdGljPW59LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1Njc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJEaXNjd29ybGQiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMTYsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkRpc2N3b3JsZCIsZXBvY2hzOlsiQlVDIiwiVUMiXSxtb250aE5hbWVzOlsiSWNrIiwiT2ZmbGUiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiR3J1bmUiLCJBdWd1c3QiLCJTcHVuZSIsIlNla3RvYmVyIiwiRW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkljayIsIk9mZiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkdydSIsIkF1ZyIsIlNwdSIsIlNlayIsIkVtYiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiT2N0ZWRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk9jdCIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJPYyIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjIsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLCExfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSwxM30sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLDQwMH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzgpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDh9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpLmRheSgpKzEpJTh9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZGF5T2ZXZWVrKHQsZSxyKTtyZXR1cm4gbj49MiYmbjw9Nn0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57Y2VudHVyeTpvW01hdGguZmxvb3IoKG4ueWVhcigpLTEpLzEwMCkrMV18fCIifX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCkrKG4ueWVhcigpPDA/MTowKSxlPW4ubW9udGgoKSwocj1uLmRheSgpKSsoZT4xPzE2OjApKyhlPjI/MzIqKGUtMik6MCkrNDAwKih0LTEpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpLU1hdGguZmxvb3IodGhpcy5qZEVwb2NoKS0xO3ZhciBlPU1hdGguZmxvb3IodC80MDApKzE7dC09NDAwKihlLTEpLHQrPXQ+MTU/MTY6MDt2YXIgcj1NYXRoLmZsb29yKHQvMzIpKzEsbj10LTMyKihyLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlPD0wP2UtMTplLHIsbil9fSk7dmFyIG89ezIwOiJGcnVpdGJhdCIsMjE6IkFuY2hvdnkifTtpLmNhbGVuZGFycy5kaXNjd29ybGQ9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU2ODpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6IkV0aGlvcGlhbiIsamRFcG9jaDoxNzI0MjIwLjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJFdGhpb3BpYW4iLGVwb2NoczpbIkJFRSIsIkVFIl0sbW9udGhOYW1lczpbIk1lc2tlcmVtIiwiVGlrZW1ldCIsIkhpZGFyIiwiVGFoZXNhcyIsIlRpciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNlIiwiUGFndW1lIl0sbW9udGhOYW1lc1Nob3J0OlsiTWVzIiwiVGlrIiwiSGlkIiwiVGFoIiwiVGlyIiwiWWVrIiwiTWVnIiwiTWlhIiwiR2VuIiwiU2VuIiwiSGFtIiwiTmVoIiwiUGFnIl0sZGF5TmFtZXM6WyJFaHVkIiwiU2Vnbm8iLCJNYWtzZWdubyIsIklyb2IiLCJIYW11cyIsIkFyYiIsIktpZGFtZSJdLGRheU5hbWVzU2hvcnQ6WyJFaHUiLCJTZWciLCJNYWsiLCJJcm8iLCJIYW0iLCJBcmIiLCJLaWQiXSxkYXlOYW1lc01pbjpbIkVoIiwiU2UiLCJNYSIsIklyIiwiSGEiLCJBciIsIktpIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCk7cmV0dXJuIHQlND09M3x8dCU0PT0tMX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkWWVhcnx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxM30sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMz09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9bi55ZWFyKCksdDwwJiZ0Kyssbi5kYXkoKSszMCoobi5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksaS5jYWxlbmRhcnMuZXRoaW9waWFuPW59LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1Njk6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LWUqTWF0aC5mbG9vcih0L2UpfXZhciBhPXQoIi4uL21haW4iKSxvPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgYS5iYXNlQ2FsZW5kYXIsbyhuLnByb3RvdHlwZSx7bmFtZToiSGVicmV3IixqZEVwb2NoOjM0Nzk5NS41LGRheXNQZXJNb250aDpbMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMzAsMjksMjldLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDo3LG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkhlYnJldyIsZXBvY2hzOlsiQkFNIiwiQU0iXSxtb250aE5hbWVzOlsiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW1tdXoiLCJBdiIsIkVsdWwiLCJUaXNocmVpIiwiQ2hlc2h2YW4iLCJLaXNsZXYiLCJUZXZldCIsIlNoZXZhdCIsIkFkYXIiLCJBZGFyIElJIl0sbW9udGhOYW1lc1Nob3J0OlsiTmlzIiwiSXlhIiwiU2l2IiwiVGFtIiwiQXYiLCJFbHUiLCJUaXMiLCJDaGUiLCJLaXMiLCJUZXYiLCJTaGUiLCJBZGEiLCJBZDIiXSxkYXlOYW1lczpbIllvbSBSaXNob24iLCJZb20gU2hlbmkiLCJZb20gU2hsaXNoaSIsIllvbSBSZXZpJ2kiLCJZb20gQ2hhbWlzaGkiLCJZb20gU2hpc2hpIiwiWW9tIFNoYWJiYXQiXSxkYXlOYW1lc1Nob3J0OlsiUmlzIiwiU2hlIiwiU2hsIiwiUmV2IiwiQ2hhIiwiU2hpIiwiU2hhIl0sZGF5TmFtZXNNaW46WyJSaSIsIlNoZSIsIlNobCIsIlJlIiwiQ2giLCJTaGkiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGEubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiB0aGlzLl9sZWFwWWVhcihlLnllYXIoKSl9LF9sZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10PDA/dCsxOnQsaSg3KnQrMSwxOSk8N30sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkWWVhciksdGhpcy5fbGVhcFllYXIodC55ZWFyP3QueWVhcigpOnQpPzEzOjEyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpLHRoaXMudG9KRCgtMT09PXQ/MTp0KzEsNywxKS10aGlzLnRvSkQodCw3LDEpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0LnllYXImJihlPXQubW9udGgoKSx0PXQueWVhcigpKSx0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkTW9udGgpLDEyPT09ZSYmdGhpcy5sZWFwWWVhcih0KT8zMDo4PT09ZSYmNT09PWkodGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8zMDo5PT09ZSYmMz09PWkodGhpcy5kYXlzSW5ZZWFyKHQpLDEwKT8yOTp0aGlzLmRheXNQZXJNb250aFtlLTFdfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNiE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixhLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57eWVhclR5cGU6KHRoaXMubGVhcFllYXIobik/ImVtYm9saXNtaWMiOiJjb21tb24iKSsiICIrWyJkZWZpY2llbnQiLCJyZWd1bGFyIiwiY29tcGxldGUiXVt0aGlzLmRheXNJblllYXIobiklMTAtM119fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixhLmxvY2FsLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKTt2YXIgaT10PD0wP3QrMTp0LG89dGhpcy5qZEVwb2NoK3RoaXMuX2RlbGF5MShpKSt0aGlzLl9kZWxheTIoaSkrcisxO2lmKGU8Nyl7Zm9yKHZhciBzPTc7czw9dGhpcy5tb250aHNJblllYXIodCk7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKTtmb3IodmFyIHM9MTtzPGU7cysrKW8rPXRoaXMuZGF5c0luTW9udGgodCxzKX1lbHNlIGZvcih2YXIgcz03O3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO3JldHVybiBvfSxfZGVsYXkxOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoKDIzNSp0LTIzNCkvMTkpLHI9MTIwODQrMTM3NTMqZSxuPTI5KmUrTWF0aC5mbG9vcihyLzI1OTIwKTtyZXR1cm4gaSgzKihuKzEpLDcpPDMmJm4rKyxufSxfZGVsYXkyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RlbGF5MSh0LTEpLHI9dGhpcy5fZGVsYXkxKHQpO3JldHVybiB0aGlzLl9kZWxheTEodCsxKS1yPT0zNTY/MjpyLWU9PTM4Mj8xOjB9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7Zm9yKHZhciBlPU1hdGguZmxvb3IoOTg0OTYqKHQtdGhpcy5qZEVwb2NoKS8zNTk3NTM1MSktMTt0Pj10aGlzLnRvSkQoLTE9PT1lPzE6ZSsxLDcsMSk7KWUrKztmb3IodmFyIHI9dDx0aGlzLnRvSkQoZSwxLDEpPzc6MTt0PnRoaXMudG9KRChlLHIsdGhpcy5kYXlzSW5Nb250aChlLHIpKTspcisrO3ZhciBuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLGEuY2FsZW5kYXJzLmhlYnJldz1ufSx7Ii4uL21haW4iOjU3OSwib2JqZWN0LWFzc2lnbiI6NDY4fV0sNTcwOltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfXZhciBpPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgaS5iYXNlQ2FsZW5kYXIsYShuLnByb3RvdHlwZSx7bmFtZToiSXNsYW1pYyIsamRFcG9jaDoxOTQ4NDM5LjUsZGF5c1Blck1vbnRoOlszMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSXNsYW1pYyIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBhbC10aGFuaSIsIkp1bWFkYSBhbC1hd3dhbCIsIkp1bWFkYSBhbC10aGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtYWhhZCIsIllhd20gYWwtaXRobmF5biIsIllhd20gYXRoLXRodWxhYXRoYWEnIiwiWWF3bSBhbC1hcmJpJ2FhJyIsIllhd20gYWwta2hhbVx1MDEyYnMiLCJZYXdtIGFsLWp1bSdhIiwiWWF3bSBhcy1zYWJ0Il0sZGF5TmFtZXNTaG9ydDpbIkFoYSIsIkl0aCIsIlRodSIsIkFyYiIsIktoYSIsIkp1bSIsIlNhYiJdLGRheU5hbWVzTWluOlsiQWgiLCJJdCIsIlRoIiwiQXIiLCJLaCIsIkp1IiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuKDExKnRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCkrMTQpJTMwPDExfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNTU6MzU0fSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCksdD10PD0wP3QrMTp0LHIrTWF0aC5jZWlsKDI5LjUqKGUtMSkpKzM1NCoodC0xKStNYXRoLmZsb29yKCgzKzExKnQpLzMwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTt2YXIgZT1NYXRoLmZsb29yKCgzMCoodC10aGlzLmpkRXBvY2gpKzEwNjQ2KS8xMDYzMSk7ZT1lPD0wP2UtMTplO3ZhciByPU1hdGgubWluKDEyLE1hdGguY2VpbCgodC0yOS10aGlzLnRvSkQoZSwxLDEpKS8yOS41KSsxKSxuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLGkuY2FsZW5kYXJzLmlzbGFtaWM9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3MTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6Ikp1bGlhbiIsamRFcG9jaDoxNzIxNDIzLjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSnVsaWFuIixlcG9jaHM6WyJCQyIsIkFEIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PWUueWVhcigpPDA/ZS55ZWFyKCkrMTplLnllYXIoKTtyZXR1cm4gdCU0PT0wfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCg0LShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksaS5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpO3JldHVybiB0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKSx0PDAmJnQrKyxlPD0yJiYodC0tLGUrPTEyKSxNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyLTE1MjQuNX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IodCsuNSkscj1lKzE1MjQsbj1NYXRoLmZsb29yKChyLTEyMi4xKS8zNjUuMjUpLGk9TWF0aC5mbG9vcigzNjUuMjUqbiksYT1NYXRoLmZsb29yKChyLWkpLzMwLjYwMDEpLG89YS1NYXRoLmZsb29yKGE8MTQ/MToxMykscz1uLU1hdGguZmxvb3Iobz4yPzQ3MTY6NDcxNSksbD1yLWktTWF0aC5mbG9vcigzMC42MDAxKmEpO3JldHVybiBzPD0wJiZzLS0sdGhpcy5uZXdEYXRlKHMsbyxsKX19KSxpLmNhbGVuZGFycy5qdWxpYW49bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3MjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBpKHQtMSxlKSsxfXZhciBvPXQoIi4uL21haW4iKSxzPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgby5iYXNlQ2FsZW5kYXIscyhuLnByb3RvdHlwZSx7bmFtZToiTWF5YW4iLGpkRXBvY2g6NTg0MjgyLjUsaGFzWWVhclplcm86ITAsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjAscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTWF5YW4iLGVwb2NoczpbIiIsIiJdLG1vbnRoTmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLG1vbnRoTmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3Il0sZGF5TmFtZXM6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkYXlOYW1lc1Nob3J0OlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNNaW46WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJZWVlZLm0uZCIsZmlyc3REYXk6MCxpc1JUTDohMSxoYWFiTW9udGhzOlsiUG9wIiwiVW8iLCJaaXAiLCJab3R6IiwiVHplYyIsIlh1bCIsIllheGtpbiIsIk1vbCIsIkNoZW4iLCJZYXgiLCJaYWMiLCJDZWgiLCJNYWMiLCJLYW5raW4iLCJNdWFuIiwiUGF4IiwiS2F5YWIiLCJDdW1rdSIsIlVheWViIl0sdHpvbGtpbk1vbnRoczpbIkltaXgiLCJJayIsIkFrYmFsIiwiS2FuIiwiQ2hpY2NoYW4iLCJDaW1pIiwiTWFuaWsiLCJMYW1hdCIsIk11bHVjIiwiT2MiLCJDaHVlbiIsIkViIiwiQmVuIiwiSXgiLCJNZW4iLCJDaWIiLCJDYWJhbiIsIkV0em5hYiIsIkNhdWFjIiwiQWhhdSJdfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxvLmxvY2FsLmludmFsaWRZZWFyKSwhMX0sZm9ybWF0WWVhcjpmdW5jdGlvbih0KXt0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxvLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCk7dmFyIGU9TWF0aC5mbG9vcih0LzQwMCk7cmV0dXJuIHQlPTQwMCx0Kz10PDA/NDAwOjAsZSsiLiIrTWF0aC5mbG9vcih0LzIwKSsiLiIrdCUyMH0sZm9yWWVhcjpmdW5jdGlvbih0KXtpZih0PXQuc3BsaXQoIi4iKSx0Lmxlbmd0aDwzKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1wYXJzZUludCh0W3JdLDEwKTtpZihNYXRoLmFicyhuKT4xOXx8cj4wJiZuPDApdGhyb3ciSW52YWxpZCBNYXlhbiB5ZWFyIjtlPTIwKmUrbn1yZXR1cm4gZX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkWWVhciksMTh9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixvLmxvY2FsLmludmFsaWREYXRlKSwwfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkWWVhciksMzYwfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksby5sb2NhbC5pbnZhbGlkTW9udGgpLDIwfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDV9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG8ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSksITB9LGV4dHJhSW5mbzpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSksaT1uLnRvSkQoKSxhPXRoaXMuX3RvSGFhYihpKSxzPXRoaXMuX3RvVHpvbGtpbihpKTtyZXR1cm57aGFhYk1vbnRoTmFtZTp0aGlzLmxvY2FsLmhhYWJNb250aHNbYVswXS0xXSxoYWFiTW9udGg6YVswXSxoYWFiRGF5OmFbMV0sdHpvbGtpbkRheU5hbWU6dGhpcy5sb2NhbC50em9sa2luTW9udGhzW3NbMF0tMV0sdHpvbGtpbkRheTpzWzBdLHR6b2xraW5UcmVjZW5hOnNbMV19fSxfdG9IYWFiOmZ1bmN0aW9uKHQpe3QtPXRoaXMuamRFcG9jaDt2YXIgZT1pKHQrOCszNDAsMzY1KTtyZXR1cm5bTWF0aC5mbG9vcihlLzIwKSsxLGkoZSwyMCldfSxfdG9Uem9sa2luOmZ1bmN0aW9uKHQpe3JldHVybiB0LT10aGlzLmpkRXBvY2gsW2EodCsyMCwyMCksYSh0KzQsMTMpXX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsby5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIG4uZGF5KCkrMjAqbi5tb250aCgpKzM2MCpuLnllYXIoKSt0aGlzLmpkRXBvY2h9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjUtdGhpcy5qZEVwb2NoO3ZhciBlPU1hdGguZmxvb3IodC8zNjApO3QlPTM2MCx0Kz10PDA/MzYwOjA7dmFyIHI9TWF0aC5mbG9vcih0LzIwKSxuPXQlMjA7cmV0dXJuIHRoaXMubmV3RGF0ZShlLHIsbil9fSksby5jYWxlbmRhcnMubWF5YW49bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3MzpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyO3ZhciBvPWkuaW5zdGFuY2UoImdyZWdvcmlhbiIpO2Eobi5wcm90b3R5cGUse25hbWU6Ik5hbmFrc2hhaGkiLGpkRXBvY2g6MjI1NzY3My41LGRheXNQZXJNb250aDpbMzEsMzEsMzEsMzEsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzBdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5hbmFrc2hhaGkiLGVwb2NoczpbIkJOIiwiQU4iXSxtb250aE5hbWVzOlsiQ2hldCIsIlZhaXNha2giLCJKZXRoIiwiSGFyaCIsIlNhd2FuIiwiQmhhZG9uIiwiQXNzdSIsIkthdGFrIiwiTWFnaGFyIiwiUG9oIiwiTWFnaCIsIlBoYWd1biJdLG1vbnRoTmFtZXNTaG9ydDpbIkNoZSIsIlZhaSIsIkpldCIsIkhhciIsIlNhdyIsIkJoYSIsIkFzcyIsIkthdCIsIk1nciIsIlBvaCIsIk1naCIsIlBoYSJdLGRheU5hbWVzOlsiU29tdmFhciIsIk1hbmdhbHZhciIsIkJ1ZGh2YWFyIiwiVmVlcnZhYXIiLCJTaHVrYXJ2YWFyIiwiU2FuaWNoYXJ2YWFyIiwiRXR2YWFyIl0sZGF5TmFtZXNTaG9ydDpbIlNvbSIsIk1hbmdhbCIsIkJ1ZGgiLCJWZWVyIiwiU2h1a2FyIiwiU2FuaWNoYXIiLCJFdCJdLGRheU5hbWVzTWluOlsiU28iLCJNYSIsIkJ1IiwiVmUiLCJTaCIsIlNhIiwiRXQiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC1tbS15eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXJ8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIG8ubGVhcFllYXIoZS55ZWFyKCkrKGUueWVhcigpPDE/MTowKSsxNDY5KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoMS0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsaS5sb2NhbC5pbnZhbGlkTW9udGgpLHQ9bi55ZWFyKCk7dDwwJiZ0Kys7Zm9yKHZhciBhPW4uZGF5KCkscz0xO3M8bi5tb250aCgpO3MrKylhKz10aGlzLmRheXNQZXJNb250aFtzLTFdO3JldHVybiBhK28udG9KRCh0KzE0NjgsMywxMyl9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCsuNSk7Zm9yKHZhciBlPU1hdGguZmxvb3IoKHQtKHRoaXMuamRFcG9jaC0xKSkvMzY2KTt0Pj10aGlzLnRvSkQoZSsxLDEsMSk7KWUrKztmb3IodmFyIHI9dC1NYXRoLmZsb29yKHRoaXMudG9KRChlLDEsMSkrLjUpKzEsbj0xO3I+dGhpcy5kYXlzSW5Nb250aChlLG4pOylyLT10aGlzLmRheXNJbk1vbnRoKGUsbiksbisrO3JldHVybiB0aGlzLm5ld0RhdGUoZSxuLHIpfX0pLGkuY2FsZW5kYXJzLm5hbmFrc2hhaGk9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3NDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIik7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6Ik5lcGFsaSIsamRFcG9jaDoxNzAwNzA5LjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEsZGF5c1BlclllYXI6MzY1LHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik5lcGFsaSIsZXBvY2hzOlsiQkJTIiwiQUJTIl0sbW9udGhOYW1lczpbIkJhaXNha2giLCJKZXN0aGEiLCJBc2hhZGgiLCJTaHJhd2FuIiwiQmhhZHJhIiwiQXNod2luIiwiS2FydGlrIiwiTWFuZ3NpciIsIlBhdXNoIiwiTWFuZ2giLCJGYWxndW4iLCJDaGFpdHJhIl0sbW9udGhOYW1lc1Nob3J0OlsiQmFpIiwiSmUiLCJBcyIsIlNocmEiLCJCaGEiLCJBc2giLCJLYXIiLCJNYW5nIiwiUGF1IiwiTWEiLCJGYWwiLCJDaGFpIl0sZGF5TmFtZXM6WyJBYWl0YWJhYXIiLCJTb21iYWFyIiwiTWFuZ2xiYWFyIiwiQnVkaGFiYWFyIiwiQmloaWJhYXIiLCJTaHVrcmFiYWFyIiwiU2hhbmliYWFyIl0sZGF5TmFtZXNTaG9ydDpbIkFhaXRhIiwiU29tIiwiTWFuZ2wiLCJCdWRoYSIsIkJpaGkiLCJTaHVrcmEiLCJTaGFuaSJdLGRheU5hbWVzTWluOlsiQWFpIiwiU28iLCJNYW4iLCJCdSIsIkJpIiwiU2h1IiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRheXNJblllYXIodCkhPT10aGlzLmRheXNQZXJZZWFyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtpZih0PXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XSlyZXR1cm4gdGhpcy5kYXlzUGVyWWVhcjtmb3IodmFyIGU9MCxyPXRoaXMubWluTW9udGg7cjw9MTI7cisrKWUrPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bcl07cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueWVhciYmKGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLHRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCksdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XT90aGlzLmRheXNQZXJNb250aFtlLTFdOnRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbdF1bZV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKTt0PW4ueWVhcigpLGU9bi5tb250aCgpLHI9bi5kYXkoKTt2YXIgYT1pLmluc3RhbmNlKCksbz0wLHM9ZSxsPXQ7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YSh0KTt2YXIgdT10LShzPjl8fDk9PT1zJiZyPj10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdPzU2OjU3KTtmb3IoOSE9PWUmJihvPXIscy0tKTs5IT09czspczw9MCYmKHM9MTIsbC0tKSxvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdW3NdLHMtLTtyZXR1cm4gOT09PWU/KG8rPXItdGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVswXSk8MCYmKG8rPWEuZGF5c0luWWVhcih1KSk6bys9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtsXVs5XS10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdLGEubmV3RGF0ZSh1LDEsMSkuYWRkKG8sImQiKS50b0pEKCl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1pLmluc3RhbmNlKCkscj1lLmZyb21KRCh0KSxuPXIueWVhcigpLGE9ci5kYXlPZlllYXIoKSxvPW4rNTY7dGhpcy5fY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YShvKTtmb3IodmFyIHM9OSxsPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbb11bMF0sdT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW29dW3NdLWwrMTthPnU7KXMrKyxzPjEyJiYocz0xLG8rKyksdSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtvXVtzXTt2YXIgYz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW29dW3NdLSh1LWEpO3JldHVybiB0aGlzLm5ld0RhdGUobyxzLGMpfSxfY3JlYXRlTWlzc2luZ0NhbGVuZGFyRGF0YTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmRheXNQZXJNb250aC5zbGljZSgwKTtlLnVuc2hpZnQoMTcpO2Zvcih2YXIgcj10LTE7cjx0KzI7cisrKXZvaWQgMD09PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl0mJih0aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3JdPWUpfSxORVBBTElfQ0FMRU5EQVJfREFUQTp7MTk3MDpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzE6WzE4LDMxLDMxLDMyLDMxLDMyLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTcyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk3MzpbMTksMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5NzQ6WzE5LDMxLDMxLDMyLDMwLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc1OlsxOCwzMSwzMSwzMiwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5Nzc6WzE4LDMxLDMyLDMxLDMyLDMxLDMxLDI5LDMwLDI5LDMwLDI5LDMxXSwxOTc4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3OTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTgxOlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4MjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4NTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDE5ODY6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg3OlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4ODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODk6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLAoxOTkyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk5MzpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTQ6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMTk5NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTc6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk4OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDJlMzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMDE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDAyOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMDQ6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDA1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwNjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA4OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAwOTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTA6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDExOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAxMjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwMTM6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE0OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDE3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxODpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDIwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyMTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDIzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyNDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjU6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAyNzpbMTcsMzAsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI5OlsxOCwzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzMDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMzAsMzAsMzAsMzFdLDIwMzE6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMxLDMxLDMxLDMxLDMxLDMxXSwyMDMyOlsxNywzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMl0sMjAzMzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDM1OlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwyOSwzMV0sMjAzNjpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMzc6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzOTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMzAsMzBdLDIwNDA6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQxOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNDM6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQ0OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0NTpbMTgsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQ3OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDUwOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1MTpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNTI6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUzOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1NDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDMwLDI5LDMwXSwyMDU2OlsxNywzMSwzMSwzMiwzMSwzMiwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNTg6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2MDpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjE6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDYyOlsxNywzMCwzMiwzMSwzMiwzMSwzMSwyOSwzMCwyOSwzMCwyOSwzMV0sMjA2MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjQ6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY1OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2NjpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwNjc6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY4OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNzA6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDcxOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNzM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDc0OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA3NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzY6WzE2LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwyMDc3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA3ODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDgwOlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA4MTpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgzOlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODU6WzE3LDMxLDMyLDMxLDMyLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NzpbMTYsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMzAsMjksMzAsMzAsMzBdLDIwODg6WzE2LDMwLDMxLDMyLDMyLDMwLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTE6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkyOlsxNiwzMSwzMSwzMiwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwzMCwzMF0sMjA5NjpbMTcsMzAsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwOTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwyOSwzMCwyOSwzMCwzMCwzMV0sMjA5OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMjksMzAsMzAsMzBdLDIxMDA6WzE3LDMxLDMyLDMxLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXX19KSxpLmNhbGVuZGFycy5uZXBhbGk9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3NTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9dmFyIGE9dCgiLi4vbWFpbiIpLG89dCgib2JqZWN0LWFzc2lnbiIpO24ucHJvdG90eXBlPW5ldyBhLmJhc2VDYWxlbmRhcixvKG4ucHJvdG90eXBlLHtuYW1lOiJQZXJzaWFuIixqZEVwb2NoOjE5NDgzMjAuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMxLDMxLDMxLDMxLDMwLDMwLDMwLDMwLDMwLDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJQZXJzaWFuIixlcG9jaHM6WyJCUCIsIkFQIl0sbW9udGhOYW1lczpbIkZhcnZhcmRpbiIsIk9yZGliZWhlc2h0IiwiS2hvcmRhZCIsIlRpciIsIk1vcmRhZCIsIlNoYWhyaXZhciIsIk1laHIiLCJBYmFuIiwiQXphciIsIkRheSIsIkJhaG1hbiIsIkVzZmFuZCJdLG1vbnRoTmFtZXNTaG9ydDpbIkZhciIsIk9yZCIsIktobyIsIlRpciIsIk1vciIsIlNoYSIsIk1laCIsIkFiYSIsIkF6YSIsIkRheSIsIkJhaCIsIkVzZiJdLGRheU5hbWVzOlsiWWVrc2hhbWJlIiwiRG9zaGFtYmUiLCJTZXNoYW1iZSIsIkNoXHhlNmhhcnNoYW1iZSIsIlBhbmpzaGFtYmUiLCJKb20nZSIsIlNoYW1iZSJdLGRheU5hbWVzU2hvcnQ6WyJZZWsiLCJEbyIsIlNlIiwiQ2hceGU2IiwiUGFuaiIsIkpvbSIsIlNoYSJdLGRheU5hbWVzTWluOlsiWWUiLCJEbyIsIlNlIiwiQ2giLCJQYSIsIkpvIiwiU2giXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGEubG9jYWwuaW52YWxpZFllYXIpO3JldHVybiA2ODIqKChlLnllYXIoKS0oZS55ZWFyKCk+MD80NzQ6NDczKSklMjgyMCs0NzQrMzgpJTI4MTY8NjgyfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtKG4uZGF5T2ZXZWVrKCkrMSklNywiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYS5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gNSE9PXRoaXMuZGF5T2ZXZWVrKHQsZSxyKX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYS5sb2NhbC5pbnZhbGlkRGF0ZSk7dD1uLnllYXIoKSxlPW4ubW9udGgoKSxyPW4uZGF5KCk7dmFyIG89dC0odD49MD80NzQ6NDczKSxzPTQ3NCtpKG8sMjgyMCk7cmV0dXJuIHIrKGU8PTc/MzEqKGUtMSk6MzAqKGUtMSkrNikrTWF0aC5mbG9vcigoNjgyKnMtMTEwKS8yODE2KSszNjUqKHMtMSkrMTAyOTk4MypNYXRoLmZsb29yKG8vMjgyMCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7dmFyIGU9dC10aGlzLnRvSkQoNDc1LDEsMSkscj1NYXRoLmZsb29yKGUvMTAyOTk4Myksbj1pKGUsMTAyOTk4MyksYT0yODIwO2lmKDEwMjk5ODIhPT1uKXt2YXIgbz1NYXRoLmZsb29yKG4vMzY2KSxzPWkobiwzNjYpO2E9TWF0aC5mbG9vcigoMjEzNCpvKzI4MTYqcysyODE1KS8xMDI4NTIyKStvKzF9dmFyIGw9YSsyODIwKnIrNDc0O2w9bDw9MD9sLTE6bDt2YXIgdT10LXRoaXMudG9KRChsLDEsMSkrMSxjPXU8PTE4Nj9NYXRoLmNlaWwodS8zMSk6TWF0aC5jZWlsKCh1LTYpLzMwKSxoPXQtdGhpcy50b0pEKGwsYywxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUobCxjLGgpfX0pLGEuY2FsZW5kYXJzLnBlcnNpYW49bixhLmNhbGVuZGFycy5qYWxhbGk9bn0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3NjpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX12YXIgaT10KCIuLi9tYWluIiksYT10KCJvYmplY3QtYXNzaWduIiksbz1pLmluc3RhbmNlKCk7bi5wcm90b3R5cGU9bmV3IGkuYmFzZUNhbGVuZGFyLGEobi5wcm90b3R5cGUse25hbWU6IlRhaXdhbiIsamRFcG9jaDoyNDE5NDAyLjUseWVhcnNPZmZzZXQ6MTkxMSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJUYWl3YW4iLGVwb2NoczpbIkJST0MiLCJST0MiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLHQ9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIG8ubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLndlZWtPZlllYXIodCxuLm1vbnRoKCksbi5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLnRvSkQodCxuLm1vbnRoKCksbi5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1vLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfSxfZzJ0WWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9fSksaS5jYWxlbmRhcnMudGFpd2FuPW59LHsiLi4vbWFpbiI6NTc5LCJvYmplY3QtYXNzaWduIjo0Njh9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19dmFyIGk9dCgiLi4vbWFpbiIpLGE9dCgib2JqZWN0LWFzc2lnbiIpLG89aS5pbnN0YW5jZSgpO24ucHJvdG90eXBlPW5ldyBpLmJhc2VDYWxlbmRhcixhKG4ucHJvdG90eXBlLHtuYW1lOiJUaGFpIixqZEVwb2NoOjE1MjMwOTguNSx5ZWFyc09mZnNldDo1NDMsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGhhaSIsZXBvY2hzOlsiQkJFIiwiQkUiXSxtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZFllYXIpLHQ9dGhpcy5fdDJnWWVhcihlLnllYXIoKSk7cmV0dXJuIG8ubGVhcFllYXIodCl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLndlZWtPZlllYXIodCxuLm1vbnRoKCksbi5kYXkoKSl9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGkubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixpLmxvY2FsLmludmFsaWREYXRlKSx0PXRoaXMuX3QyZ1llYXIobi55ZWFyKCkpO3JldHVybiBvLnRvSkQodCxuLm1vbnRoKCksbi5kYXkoKSl9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1vLmZyb21KRCh0KSxyPXRoaXMuX2cydFllYXIoZS55ZWFyKCkpO3JldHVybiB0aGlzLm5ld0RhdGUocixlLm1vbnRoKCksZS5kYXkoKSl9LF90MmdZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0LXRoaXMueWVhcnNPZmZzZXQtKHQ+PTEmJnQ8PXRoaXMueWVhcnNPZmZzZXQ/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQrdGhpcy55ZWFyc09mZnNldCsodD49LXRoaXMueWVhcnNPZmZzZXQmJnQ8PS0xPzE6MCl9fSksaS5jYWxlbmRhcnMudGhhaT1ufSx7Ii4uL21haW4iOjU3OSwib2JqZWN0LWFzc2lnbiI6NDY4fV0sNTc4OltmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfXZhciBpPXQoIi4uL21haW4iKSxhPXQoIm9iamVjdC1hc3NpZ24iKTtuLnByb3RvdHlwZT1uZXcgaS5iYXNlQ2FsZW5kYXIsYShuLnByb3RvdHlwZSx7bmFtZToiVW1tQWxRdXJhIixoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJVbW0gYWwtUXVyYSIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJBbC1NdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBBbC1UaGFuaSIsIkp1bWFkYSBBbC1Bd3dhbCIsIkp1bWFkYSBBbC1UaGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtQWhhZCIsIllhd20gYWwtSXRobmFpbiIsIllhd20gYWwtVGhhbFx1MDEwMXRoXHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1BcmJhXHUyMDE4XHUwMTAxXHUyMDE5IiwiWWF3bSBhbC1LaGFtXHUwMTJicyIsIllhd20gYWwtSnVtXHUyMDE4YSIsIllhd20gYWwtU2FidCJdLGRheU5hbWVzTWluOlsiQWgiLCJJdGgiLCJUaCIsIkFyIiwiS2giLCJKdSIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMH19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gMzU1PT09dGhpcy5kYXlzSW5ZZWFyKGUueWVhcigpKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0xO3I8PTEyO3IrKyllKz10aGlzLmRheXNJbk1vbnRoKHQscik7cmV0dXJuIGV9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxpLmxvY2FsLmludmFsaWRNb250aCksbj1yLnRvSkQoKS0yNGU1Ky41LGE9MCxzPTA7czxvLmxlbmd0aDtzKyspe2lmKG9bc10+bilyZXR1cm4gb1thXS1vW2EtMV07YSsrfXJldHVybiAzMH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGkubG9jYWwuaW52YWxpZERhdGUpLGE9MTIqKG4ueWVhcigpLTEpK24ubW9udGgoKS0xNTI5MjtyZXR1cm4gbi5kYXkoKStvW2EtMV0tMSsyNGU1LS41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMjRlNSsuNSxyPTAsbj0wO248by5sZW5ndGgmJiEob1tuXT5lKTtuKyspcisrO3ZhciBpPXIrMTUyOTIsYT1NYXRoLmZsb29yKChpLTEpLzEyKSxzPWErMSxsPWktMTIqYSx1PWUtb1tyLTFdKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShzLGwsdSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5pc1ZhbGlkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbiYmKHQ9bnVsbCE9dC55ZWFyP3QueWVhcjp0LG49dD49MTI3NiYmdDw9MTUwMCksbn0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPWkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5fdmFsaWRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGEueWVhcjwxMjc2fHxhLnllYXI+MTUwMCl0aHJvdyBuLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiBhfX0pLGkuY2FsZW5kYXJzLnVtbWFscXVyYT1uO3ZhciBvPVsyMCw1MCw3OSwxMDksMTM4LDE2OCwxOTcsMjI3LDI1NiwyODYsMzE1LDM0NSwzNzQsNDA0LDQzMyw0NjMsNDkyLDUyMiw1NTEsNTgxLDYxMSw2NDEsNjcwLDcwMCw3MjksNzU5LDc4OCw4MTgsODQ3LDg3Nyw5MDYsOTM2LDk2NSw5OTUsMTAyNCwxMDU0LDEwODMsMTExMywxMTQyLDExNzIsMTIwMSwxMjMxLDEyNjAsMTI5MCwxMzIwLDEzNTAsMTM3OSwxNDA5LDE0MzgsMTQ2OCwxNDk3LDE1MjcsMTU1NiwxNTg2LDE2MTUsMTY0NSwxNjc0LDE3MDQsMTczMywxNzYzLDE3OTIsMTgyMiwxODUxLDE4ODEsMTkxMCwxOTQwLDE5NjksMTk5OSwyMDI4LDIwNTgsMjA4NywyMTE3LDIxNDYsMjE3NiwyMjA1LDIyMzUsMjI2NCwyMjk0LDIzMjMsMjM1MywyMzgzLDI0MTMsMjQ0MiwyNDcyLDI1MDEsMjUzMSwyNTYwLDI1OTAsMjYxOSwyNjQ5LDI2NzgsMjcwOCwyNzM3LDI3NjcsMjc5NiwyODI2LDI4NTUsMjg4NSwyOTE0LDI5NDQsMjk3MywzMDAzLDMwMzIsMzA2MiwzMDkxLDMxMjEsMzE1MCwzMTgwLDMyMDksMzIzOSwzMjY4LDMyOTgsMzMyNywzMzU3LDMzODYsMzQxNiwzNDQ2LDM0NzYsMzUwNSwzNTM1LDM1NjQsMzU5NCwzNjIzLDM2NTMsMzY4MiwzNzEyLDM3NDEsMzc3MSwzODAwLDM4MzAsMzg1OSwzODg5LDM5MTgsMzk0OCwzOTc3LDQwMDcsNDAzNiw0MDY2LDQwOTUsNDEyNSw0MTU1LDQxODUsNDIxNCw0MjQ0LDQyNzMsNDMwMyw0MzMyLDQzNjIsNDM5MSw0NDIxLDQ0NTAsNDQ4MCw0NTA5LDQ1MzksNDU2OCw0NTk4LDQ2MjcsNDY1Nyw0Njg2LDQ3MTYsNDc0NSw0Nzc1LDQ4MDQsNDgzNCw0ODYzLDQ4OTMsNDkyMiw0OTUyLDQ5ODEsNTAxMSw1MDQwLDUwNzAsNTA5OSw1MTI5LDUxNTgsNTE4OCw1MjE4LDUyNDgsNTI3Nyw1MzA3LDUzMzYsNTM2Niw1Mzk1LDU0MjUsNTQ1NCw1NDg0LDU1MTMsNTU0Myw1NTcyLDU2MDIsNTYzMSw1NjYxLDU2OTAsNTcyMCw1NzQ5LDU3NzksNTgwOCw1ODM4LDU4NjcsNTg5Nyw1OTI2LDU5NTYsNTk4NSw2MDE1LDYwNDQsNjA3NCw2MTAzLDYxMzMsNjE2Miw2MTkyLDYyMjEsNjI1MSw2MjgxLDYzMTEsNjM0MCw2MzcwLDYzOTksNjQyOSw2NDU4LDY0ODgsNjUxNyw2NTQ3LDY1NzYsNjYwNiw2NjM1LDY2NjUsNjY5NCw2NzI0LDY3NTMsNjc4Myw2ODEyLDY4NDIsNjg3MSw2OTAxLDY5MzAsNjk2MCw2OTg5LDcwMTksNzA0OCw3MDc4LDcxMDcsNzEzNyw3MTY2LDcxOTYsNzIyNSw3MjU1LDcyODQsNzMxNCw3MzQ0LDczNzQsNzQwMyw3NDMzLDc0NjIsNzQ5Miw3NTIxLDc1NTEsNzU4MCw3NjEwLDc2MzksNzY2OSw3Njk4LDc3MjgsNzc1Nyw3Nzg3LDc4MTYsNzg0Niw3ODc1LDc5MDUsNzkzNCw3OTY0LDc5OTMsODAyMyw4MDUzLDgwODMsODExMiw4MTQyLDgxNzEsODIwMSw4MjMwLDgyNjAsODI4OSw4MzE5LDgzNDgsODM3OCw4NDA3LDg0MzcsODQ2Niw4NDk2LDg1MjUsODU1NSw4NTg0LDg2MTQsODY0Myw4NjczLDg3MDIsODczMiw4NzYxLDg3OTEsODgyMSw4ODUwLDg4ODAsODkwOSw4OTM4LDg5NjgsODk5Nyw5MDI3LDkwNTYsOTA4Niw5MTE1LDkxNDUsOTE3NSw5MjA1LDkyMzQsOTI2NCw5MjkzLDkzMjIsOTM1Miw5MzgxLDk0MTAsOTQ0MCw5NDcwLDk0OTksOTUyOSw5NTU5LDk1ODksOTYxOCw5NjQ4LDk2NzcsOTcwNiw5NzM2LDk3NjUsOTc5NCw5ODI0LDk4NTMsOTg4Myw5OTEzLDk5NDMsOTk3MiwxMDAwMiwxMDAzMiwxMDA2MSwxMDA5MCwxMDEyMCwxMDE0OSwxMDE3OCwxMDIwOCwxMDIzNywxMDI2NywxMDI5NywxMDMyNiwxMDM1NiwxMDM4NiwxMDQxNSwxMDQ0NSwxMDQ3NCwxMDUwNCwxMDUzMywxMDU2MiwxMDU5MiwxMDYyMSwxMDY1MSwxMDY4MCwxMDcxMCwxMDc0MCwxMDc3MCwxMDc5OSwxMDgyOSwxMDg1OCwxMDg4OCwxMDkxNywxMDk0NywxMDk3NiwxMTAwNSwxMTAzNSwxMTA2NCwxMTA5NCwxMTEyNCwxMTE1MywxMTE4MywxMTIxMywxMTI0MiwxMTI3MiwxMTMwMSwxMTMzMSwxMTM2MCwxMTM4OSwxMTQxOSwxMTQ0OCwxMTQ3OCwxMTUwNywxMTUzNywxMTU2NywxMTU5NiwxMTYyNiwxMTY1NSwxMTY4NSwxMTcxNSwxMTc0NCwxMTc3NCwxMTgwMywxMTgzMiwxMTg2MiwxMTg5MSwxMTkyMSwxMTk1MCwxMTk4MCwxMjAxMCwxMjAzOSwxMjA2OSwxMjA5OSwxMjEyOCwxMjE1OCwxMjE4NywxMjIxNiwxMjI0NiwxMjI3NSwxMjMwNCwxMjMzNCwxMjM2NCwxMjM5MywxMjQyMywxMjQ1MywxMjQ4MywxMjUxMiwxMjU0MiwxMjU3MSwxMjYwMCwxMjYzMCwxMjY1OSwxMjY4OCwxMjcxOCwxMjc0NywxMjc3NywxMjgwNywxMjgzNywxMjg2NiwxMjg5NiwxMjkyNiwxMjk1NSwxMjk4NCwxMzAxNCwxMzA0MywxMzA3MiwxMzEwMiwxMzEzMSwxMzE2MSwxMzE5MSwxMzIyMCwxMzI1MCwxMzI4MCwxMzMxMCwxMzMzOSwxMzM2OCwxMzM5OCwxMzQyNywxMzQ1NiwxMzQ4NiwxMzUxNSwxMzU0NSwxMzU3NCwxMzYwNCwxMzYzNCwxMzY2NCwxMzY5MywxMzcyMywxMzc1MiwxMzc4MiwxMzgxMSwxMzg0MCwxMzg3MCwxMzg5OSwxMzkyOSwxMzk1OCwxMzk4OCwxNDAxOCwxNDA0NywxNDA3NywxNDEwNywxNDEzNiwxNDE2NiwxNDE5NSwxNDIyNCwxNDI1NCwxNDI4MywxNDMxMywxNDM0MiwxNDM3MiwxNDQwMSwxNDQzMSwxNDQ2MSwxNDQ5MCwxNDUyMCwxNDU1MCwxNDU3OSwxNDYwOSwxNDYzOCwxNDY2NywxNDY5NywxNDcyNiwxNDc1NiwxNDc4NSwxNDgxNSwxNDg0NCwxNDg3NCwxNDkwNCwxNDkzMywxNDk2MywxNDk5MywxNTAyMSwxNTA1MSwxNTA4MSwxNTExMCwxNTE0MCwxNTE2OSwxNTE5OSwxNTIyOCwxNTI1OCwxNTI4NywxNTMxNywxNTM0NywxNTM3NywxNTQwNiwxNTQzNiwxNTQ2NSwxNTQ5NCwxNTUyNCwxNTU1MywxNTU4MiwxNTYxMiwxNTY0MSwxNTY3MSwxNTcwMSwxNTczMSwxNTc2MCwxNTc5MCwxNTgyMCwxNTg0OSwxNTg3OCwxNTkwOCwxNTkzNywxNTk2NiwxNTk5NiwxNjAyNSwxNjA1NSwxNjA4NSwxNjExNCwxNjE0NCwxNjE3NCwxNjIwNCwxNjIzMywxNjI2MiwxNjI5MiwxNjMyMSwxNjM1MCwxNjM4MCwxNjQwOSwxNjQzOSwxNjQ2OCwxNjQ5OCwxNjUyOCwxNjU1OCwxNjU4NywxNjYxNywxNjY0NiwxNjY3NiwxNjcwNSwxNjczNCwxNjc2NCwxNjc5MywxNjgyMywxNjg1MiwxNjg4MiwxNjkxMiwxNjk0MSwxNjk3MSwxNzAwMSwxNzAzMCwxNzA2MCwxNzA4OSwxNzExOCwxNzE0OCwxNzE3NywxNzIwNywxNzIzNiwxNzI2NiwxNzI5NSwxNzMyNSwxNzM1NSwxNzM4NCwxNzQxNCwxNzQ0NCwxNzQ3MywxNzUwMiwxNzUzMiwxNzU2MSwxNzU5MSwxNzYyMCwxNzY1MCwxNzY3OSwxNzcwOSwxNzczOCwxNzc2OCwxNzc5OCwxNzgyNywxNzg1NywxNzg4NiwxNzkxNiwxNzk0NSwxNzk3NSwxODAwNCwxODAzNCwxODA2MywxODA5MywxODEyMiwxODE1MiwxODE4MSwxODIxMSwxODI0MSwxODI3MCwxODMwMCwxODMzMCwxODM1OSwxODM4OCwxODQxOCwxODQ0NywxODQ3NiwxODUwNiwxODUzNSwxODU2NSwxODU5NSwxODYyNSwxODY1NCwxODY4NCwxODcxNCwxODc0MywxODc3MiwxODgwMiwxODgzMSwxODg2MCwxODg5MCwxODkxOSwxODk0OSwxODk3OSwxOTAwOCwxOTAzOCwxOTA2OCwxOTA5OCwxOTEyNywxOTE1NiwxOTE4NiwxOTIxNSwxOTI0NCwxOTI3NCwxOTMwMywxOTMzMywxOTM2MiwxOTM5MiwxOTQyMiwxOTQ1MiwxOTQ4MSwxOTUxMSwxOTU0MCwxOTU3MCwxOTU5OSwxOTYyOCwxOTY1OCwxOTY4NywxOTcxNywxOTc0NiwxOTc3NiwxOTgwNiwxOTgzNiwxOTg2NSwxOTg5NSwxOTkyNCwxOTk1NCwxOTk4MywyMDAxMiwyMDA0MiwyMDA3MSwyMDEwMSwyMDEzMCwyMDE2MCwyMDE5MCwyMDIxOSwyMDI0OSwyMDI3OSwyMDMwOCwyMDMzOCwyMDM2NywyMDM5NiwyMDQyNiwyMDQ1NSwyMDQ4NSwyMDUxNCwyMDU0NCwyMDU3MywyMDYwMywyMDYzMywyMDY2MiwyMDY5MiwyMDcyMSwyMDc1MSwyMDc4MCwyMDgxMCwyMDgzOSwyMDg2OSwyMDg5OCwyMDkyOCwyMDk1NywyMDk4NywyMTAxNiwyMTA0NiwyMTA3NiwyMTEwNSwyMTEzNSwyMTE2NCwyMTE5NCwyMTIyMywyMTI1MywyMTI4MiwyMTMxMiwyMTM0MSwyMTM3MSwyMTQwMCwyMTQzMCwyMTQ1OSwyMTQ4OSwyMTUxOSwyMTU0OCwyMTU3OCwyMTYwNywyMTYzNywyMTY2NiwyMTY5NiwyMTcyNSwyMTc1NCwyMTc4NCwyMTgxMywyMTg0MywyMTg3MywyMTkwMiwyMTkzMiwyMTk2MiwyMTk5MSwyMjAyMSwyMjA1MCwyMjA4MCwyMjEwOSwyMjEzOCwyMjE2OCwyMjE5NywyMjIyNywyMjI1NiwyMjI4NiwyMjMxNiwyMjM0NiwyMjM3NSwyMjQwNSwyMjQzNCwyMjQ2NCwyMjQ5MywyMjUyMiwyMjU1MiwyMjU4MSwyMjYxMSwyMjY0MCwyMjY3MCwyMjcwMCwyMjczMCwyMjc1OSwyMjc4OSwyMjgxOCwyMjg0OCwyMjg3NywyMjkwNiwyMjkzNiwyMjk2NSwyMjk5NCwyMzAyNCwyMzA1NCwyMzA4MywyMzExMywyMzE0MywyMzE3MywyMzIwMiwyMzIzMiwyMzI2MSwyMzI5MCwyMzMyMCwyMzM0OSwyMzM3OSwyMzQwOCwyMzQzOCwyMzQ2NywyMzQ5NywyMzUyNywyMzU1NiwyMzU4NiwyMzYxNiwyMzY0NSwyMzY3NCwyMzcwNCwyMzczMywyMzc2MywyMzc5MiwyMzgyMiwyMzg1MSwyMzg4MSwyMzkxMCwyMzk0MCwyMzk3MCwyMzk5OSwyNDAyOSwyNDA1OCwyNDA4OCwyNDExNywyNDE0NywyNDE3NiwyNDIwNiwyNDIzNSwyNDI2NSwyNDI5NCwyNDMyNCwyNDM1MywyNDM4MywyNDQxMywyNDQ0MiwyNDQ3MiwyNDUwMSwyNDUzMSwyNDU2MCwyNDU5MCwyNDYxOSwyNDY0OCwyNDY3OCwyNDcwNywyNDczNywyNDc2NywyNDc5NiwyNDgyNiwyNDg1NiwyNDg4NSwyNDkxNSwyNDk0NCwyNDk3NCwyNTAwMywyNTAzMiwyNTA2MiwyNTA5MSwyNTEyMSwyNTE1MCwyNTE4MCwyNTIxMCwyNTI0MCwyNTI2OSwyNTI5OSwyNTMyOCwyNTM1OCwyNTM4NywyNTQxNiwyNTQ0NiwyNTQ3NSwyNTUwNSwyNTUzNCwyNTU2NCwyNTU5NCwyNTYyNCwyNTY1MywyNTY4MywyNTcxMiwyNTc0MiwyNTc3MSwyNTgwMCwyNTgzMCwyNTg1OSwyNTg4OCwyNTkxOCwyNTk0OCwyNTk3NywyNjAwNywyNjAzNywyNjA2NywyNjA5NiwyNjEyNiwyNjE1NSwyNjE4NCwyNjIxNCwyNjI0MywyNjI3MiwyNjMwMiwyNjMzMiwyNjM2MSwyNjM5MSwyNjQyMSwyNjQ1MSwyNjQ4MCwyNjUxMCwyNjUzOSwyNjU2OCwyNjU5OCwyNjYyNywyNjY1NiwyNjY4NiwyNjcxNSwyNjc0NSwyNjc3NSwyNjgwNSwyNjgzNCwyNjg2NCwyNjg5MywyNjkyMywyNjk1MiwyNjk4MiwyNzAxMSwyNzA0MSwyNzA3MCwyNzA5OSwyNzEyOSwyNzE1OSwyNzE4OCwyNzIxOCwyNzI0OCwyNzI3NywyNzMwNywyNzMzNiwyNzM2NiwyNzM5NSwyNzQyNSwyNzQ1NCwyNzQ4NCwyNzUxMywyNzU0MiwyNzU3MiwyNzYwMiwyNzYzMSwyNzY2MSwyNzY5MSwyNzcyMCwyNzc1MCwyNzc3OSwyNzgwOSwyNzgzOCwyNzg2OCwyNzg5NywyNzkyNiwyNzk1NiwyNzk4NSwyODAxNSwyODA0NSwyODA3NCwyODEwNCwyODEzNCwyODE2MywyODE5MywyODIyMiwyODI1MiwyODI4MSwyODMxMCwyODM0MCwyODM2OSwyODM5OSwyODQyOCwyODQ1OCwyODQ4OCwyODUxNywyODU0NywyODU3NywyODYwNywyODYzNiwyODY2NSwyODY5NSwyODcyNCwyODc1NCwyODc4MywyODgxMywyODg0MywyODg3MiwyODkwMSwyODkzMSwyODk2MCwyODk5MCwyOTAxOSwyOTA0OSwyOTA3OCwyOTEwOCwyOTEzNywyOTE2NywyOTE5NiwyOTIyNiwyOTI1NSwyOTI4NSwyOTMxNSwyOTM0NSwyOTM3NSwyOTQwNCwyOTQzNCwyOTQ2MywyOTQ5MiwyOTUyMiwyOTU1MSwyOTU4MCwyOTYxMCwyOTY0MCwyOTY2OSwyOTY5OSwyOTcyOSwyOTc1OSwyOTc4OCwyOTgxOCwyOTg0NywyOTg3NiwyOTkwNiwyOTkzNSwyOTk2NCwyOTk5NCwzMDAyMywzMDA1MywzMDA4MiwzMDExMiwzMDE0MSwzMDE3MSwzMDIwMCwzMDIzMCwzMDI1OSwzMDI4OSwzMDMxOCwzMDM0OCwzMDM3OCwzMDQwOCwzMDQzNywzMDQ2NywzMDQ5NiwzMDUyNiwzMDU1NSwzMDU4NSwzMDYxNCwzMDY0NCwzMDY3MywzMDcwMywzMDczMiwzMDc2MiwzMDc5MSwzMDgyMSwzMDg1MCwzMDg4MCwzMDkwOSwzMDkzOSwzMDk2OCwzMDk5OCwzMTAyNywzMTA1NywzMTA4NiwzMTExNiwzMTE0NSwzMTE3NSwzMTIwNCwzMTIzNCwzMTI2MywzMTI5MywzMTMyMiwzMTM1MiwzMTM4MSwzMTQxMSwzMTQ0MSwzMTQ3MSwzMTUwMCwzMTUzMCwzMTU1OSwzMTU4OSwzMTYxOCwzMTY0OCwzMTY3NiwzMTcwNiwzMTczNiwzMTc2NiwzMTc5NSwzMTgyNSwzMTg1NCwzMTg4NCwzMTkxMywzMTk0MywzMTk3MiwzMjAwMiwzMjAzMSwzMjA2MSwzMjA5MCwzMjEyMCwzMjE1MCwzMjE4MCwzMjIwOSwzMjIzOSwzMjI2OCwzMjI5OCwzMjMyNywzMjM1NywzMjM4NiwzMjQxNiwzMjQ0NSwzMjQ3NSwzMjUwNCwzMjUzNCwzMjU2MywzMjU5MywzMjYyMiwzMjY1MiwzMjY4MSwzMjcxMSwzMjc0MCwzMjc3MCwzMjc5OSwzMjgyOSwzMjg1OCwzMjg4OCwzMjkxNywzMjk0NywzMjk3NiwzMzAwNiwzMzAzNSwzMzA2NSwzMzA5NCwzMzEyNCwzMzE1MywzMzE4MywzMzIxMywzMzI0MywzMzI3MiwzMzMwMiwzMzMzMSwzMzM2MSwzMzM5MCwzMzQyMCwzMzQ1MCwzMzQ3OSwzMzUwOSwzMzUzOSwzMzU2OCwzMzU5OCwzMzYyNywzMzY1NywzMzY4NiwzMzcxNiwzMzc0NSwzMzc3NSwzMzgwNCwzMzgzNCwzMzg2MywzMzg5MywzMzkyMiwzMzk1MiwzMzk4MSwzNDAxMSwzNDA0MCwzNDA2OSwzNDA5OSwzNDEyOCwzNDE1OCwzNDE4NywzNDIxNywzNDI0NywzNDI3NywzNDMwNiwzNDMzNiwzNDM2NSwzNDM5NSwzNDQyNCwzNDQ1NCwzNDQ4MywzNDUxMiwzNDU0MiwzNDU3MSwzNDYwMSwzNDYzMSwzNDY2MCwzNDY5MCwzNDcxOSwzNDc0OSwzNDc3OCwzNDgwOCwzNDgzNywzNDg2NywzNDg5NiwzNDkyNiwzNDk1NSwzNDk4NSwzNTAxNSwzNTA0NCwzNTA3NCwzNTEwMywzNTEzMywzNTE2MiwzNTE5MiwzNTIyMiwzNTI1MSwzNTI4MCwzNTMxMCwzNTM0MCwzNTM3MCwzNTM5OSwzNTQyOSwzNTQ1OCwzNTQ4OCwzNTUxNywzNTU0NywzNTU3NiwzNTYwNSwzNTYzNSwzNTY2NSwzNTY5NCwzNTcyMywzNTc1MywzNTc4MiwzNTgxMSwzNTg0MSwzNTg3MSwzNTkwMSwzNTkzMCwzNTk2MCwzNTk4OSwzNjAxOSwzNjA0OCwzNjA3OCwzNjEwNywzNjEzNiwzNjE2NiwzNjE5NSwzNjIyNSwzNjI1NCwzNjI4NCwzNjMxNCwzNjM0MywzNjM3MywzNjQwMywzNjQzMywzNjQ2MiwzNjQ5MiwzNjUyMSwzNjU1MSwzNjU4MCwzNjYxMCwzNjYzOSwzNjY2OSwzNjY5OCwzNjcyOCwzNjc1NywzNjc4NiwzNjgxNiwzNjg0NSwzNjg3NSwzNjkwNCwzNjkzNCwzNjk2MywzNjk5MywzNzAyMiwzNzA1MiwzNzA4MSwzNzExMSwzNzE0MSwzNzE3MCwzNzIwMCwzNzIyOSwzNzI1OSwzNzI4OCwzNzMxOCwzNzM0NywzNzM3NywzNzQwNiwzNzQzNiwzNzQ2NSwzNzQ5NSwzNzUyNCwzNzU1NCwzNzU4NCwzNzYxMywzNzY0MywzNzY3MiwzNzcwMSwzNzczMSwzNzc2MCwzNzc5MCwzNzgxOSwzNzg0OSwzNzg3OCwzNzkwOCwzNzkzOCwzNzk2NywzNzk5NywzODAyNywzODA1NiwzODA4NSwzODExNSwzODE0NCwzODE3NCwzODIwMywzODIzMywzODI2MiwzODI5MiwzODMyMiwzODM1MSwzODM4MSwzODQxMCwzODQ0MCwzODQ2OSwzODQ5OSwzODUyOCwzODU1OCwzODU4NywzODYxNywzODY0NiwzODY3NiwzODcwNSwzODczNSwzODc2NCwzODc5NCwzODgyMywzODg1MywzODg4MiwzODkxMiwzODk0MSwzODk3MSwzOTAwMSwzOTAzMCwzOTA1OSwzOTA4OSwzOTExOCwzOTE0OCwzOTE3OCwzOTIwOCwzOTIzNywzOTI2NywzOTI5NywzOTMyNiwzOTM1NSwzOTM4NSwzOTQxNCwzOTQ0NCwzOTQ3MywzOTUwMywzOTUzMiwzOTU2MiwzOTU5MiwzOTYyMSwzOTY1MCwzOTY4MCwzOTcwOSwzOTczOSwzOTc2OCwzOTc5OCwzOTgyNywzOTg1NywzOTg4NiwzOTkxNiwzOTk0NiwzOTk3NSw0MDAwNSw0MDAzNSw0MDA2NCw0MDA5NCw0MDEyMyw0MDE1Myw0MDE4Miw0MDIxMiw0MDI0MSw0MDI3MSw0MDMwMCw0MDMzMCw0MDM1OSw0MDM4OSw0MDQxOCw0MDQ0OCw0MDQ3Nyw0MDUwNyw0MDUzNiw0MDU2Niw0MDU5NSw0MDYyNSw0MDY1NSw0MDY4NSw0MDcxNCw0MDc0NCw0MDc3Myw0MDgwMyw0MDgzMiw0MDg2Miw0MDg5Miw0MDkyMSw0MDk1MSw0MDk4MCw0MTAwOSw0MTAzOSw0MTA2OCw0MTA5OCw0MTEyNyw0MTE1Nyw0MTE4Niw0MTIxNiw0MTI0NSw0MTI3NSw0MTMwNCw0MTMzNCw0MTM2NCw0MTM5Myw0MTQyMiw0MTQ1Miw0MTQ4MSw0MTUxMSw0MTU0MCw0MTU3MCw0MTU5OSw0MTYyOSw0MTY1OCw0MTY4OCw0MTcxOCw0MTc0OCw0MTc3Nyw0MTgwNyw0MTgzNiw0MTg2NSw0MTg5NCw0MTkyNCw0MTk1Myw0MTk4Myw0MjAxMiw0MjA0Miw0MjA3Miw0MjEwMiw0MjEzMSw0MjE2MSw0MjE5MCw0MjIyMCw0MjI0OSw0MjI3OSw0MjMwOCw0MjMzNyw0MjM2Nyw0MjM5Nyw0MjQyNiw0MjQ1Niw0MjQ4NSw0MjUxNSw0MjU0NSw0MjU3NCw0MjYwNCw0MjYzMyw0MjY2Miw0MjY5Miw0MjcyMSw0Mjc1MSw0Mjc4MCw0MjgxMCw0MjgzOSw0Mjg2OSw0Mjg5OSw0MjkyOSw0Mjk1OCw0Mjk4OCw0MzAxNyw0MzA0Niw0MzA3Niw0MzEwNSw0MzEzNSw0MzE2NCw0MzE5NCw0MzIyMyw0MzI1Myw0MzI4Myw0MzMxMiw0MzM0Miw0MzM3MSw0MzQwMSw0MzQzMCw0MzQ2MCw0MzQ4OSw0MzUxOSw0MzU0OCw0MzU3OCw0MzYwNyw0MzYzNyw0MzY2Niw0MzY5Niw0MzcyNiw0Mzc1NSw0Mzc4NSw0MzgxNCw0Mzg0NCw0Mzg3Myw0MzkwMyw0MzkzMiw0Mzk2Miw0Mzk5MSw0NDAyMSw0NDA1MCw0NDA4MCw0NDEwOSw0NDEzOSw0NDE2OSw0NDE5OCw0NDIyOCw0NDI1OCw0NDI4Nyw0NDMxNyw0NDM0Niw0NDM3NSw0NDQwNSw0NDQzNCw0NDQ2NCw0NDQ5Myw0NDUyMyw0NDU1Myw0NDU4Miw0NDYxMiw0NDY0MSw0NDY3MSw0NDcwMCw0NDczMCw0NDc1OSw0NDc4OCw0NDgxOCw0NDg0Nyw0NDg3Nyw0NDkwNiw0NDkzNiw0NDk2Niw0NDk5Niw0NTAyNSw0NTA1NSw0NTA4NCw0NTExNCw0NTE0Myw0NTE3Miw0NTIwMiw0NTIzMSw0NTI2MSw0NTI5MCw0NTMyMCw0NTM1MCw0NTM4MCw0NTQwOSw0NTQzOSw0NTQ2OCw0NTQ5OCw0NTUyNyw0NTU1Niw0NTU4Niw0NTYxNSw0NTY0NCw0NTY3NCw0NTcwNCw0NTczMyw0NTc2Myw0NTc5Myw0NTgyMyw0NTg1Miw0NTg4Miw0NTkxMSw0NTk0MCw0NTk3MCw0NTk5OSw0NjAyOCw0NjA1OCw0NjA4OCw0NjExNyw0NjE0Nyw0NjE3Nyw0NjIwNiw0NjIzNiw0NjI2NSw0NjI5NSw0NjMyNCw0NjM1NCw0NjM4Myw0NjQxMyw0NjQ0Miw0NjQ3Miw0NjUwMSw0NjUzMSw0NjU2MCw0NjU5MCw0NjYyMCw0NjY0OSw0NjY3OSw0NjcwOCw0NjczOCw0Njc2Nyw0Njc5Nyw0NjgyNiw0Njg1Niw0Njg4NSw0NjkxNSw0Njk0NCw0Njk3NCw0NzAwMyw0NzAzMyw0NzA2Myw0NzA5Miw0NzEyMiw0NzE1MSw0NzE4MSw0NzIxMCw0NzI0MCw0NzI2OSw0NzI5OCw0NzMyOCw0NzM1Nyw0NzM4Nyw0NzQxNyw0NzQ0Niw0NzQ3Niw0NzUwNiw0NzUzNSw0NzU2NSw0NzU5NCw0NzYyNCw0NzY1Myw0NzY4Miw0NzcxMiw0Nzc0MSw0Nzc3MSw0NzgwMCw0NzgzMCw0Nzg2MCw0Nzg5MCw0NzkxOSw0Nzk0OSw0Nzk3OCw0ODAwOCw0ODAzNyw0ODA2Niw0ODA5Niw0ODEyNSw0ODE1NSw0ODE4NCw0ODIxNCw0ODI0NCw0ODI3Myw0ODMwMyw0ODMzMyw0ODM2Miw0ODM5Miw0ODQyMSw0ODQ1MCw0ODQ4MCw0ODUwOSw0ODUzOCw0ODU2OCw0ODU5OCw0ODYyNyw0ODY1Nyw0ODY4Nyw0ODcxNyw0ODc0Niw0ODc3Niw0ODgwNSw0ODgzNCw0ODg2NCw0ODg5Myw0ODkyMiw0ODk1Miw0ODk4Miw0OTAxMSw0OTA0MSw0OTA3MSw0OTEwMCw0OTEzMCw0OTE2MCw0OTE4OSw0OTIxOCw0OTI0OCw0OTI3Nyw0OTMwNiw0OTMzNiw0OTM2NSw0OTM5NSw0OTQyNSw0OTQ1NSw0OTQ4NCw0OTUxNCw0OTU0Myw0OTU3Myw0OTYwMiw0OTYzMiw0OTY2MSw0OTY5MCw0OTcyMCw0OTc0OSw0OTc3OSw0OTgwOSw0OTgzOCw0OTg2OCw0OTg5OCw0OTkyNyw0OTk1Nyw0OTk4Niw1MDAxNiw1MDA0NSw1MDA3NSw1MDEwNCw1MDEzMyw1MDE2Myw1MDE5Miw1MDIyMiw1MDI1Miw1MDI4MSw1MDMxMSw1MDM0MCw1MDM3MCw1MDQwMCw1MDQyOSw1MDQ1OSw1MDQ4OCw1MDUxOCw1MDU0Nyw1MDU3Niw1MDYwNiw1MDYzNSw1MDY2NSw1MDY5NCw1MDcyNCw1MDc1NCw1MDc4NCw1MDgxMyw1MDg0Myw1MDg3Miw1MDkwMiw1MDkzMSw1MDk2MCw1MDk5MCw1MTAxOSw1MTA0OSw1MTA3OCw1MTEwOCw1MTEzOCw1MTE2Nyw1MTE5Nyw1MTIyNyw1MTI1Niw1MTI4Niw1MTMxNSw1MTM0NSw1MTM3NCw1MTQwMyw1MTQzMyw1MTQ2Miw1MTQ5Miw1MTUyMiw1MTU1Miw1MTU4Miw1MTYxMSw1MTY0MSw1MTY3MCw1MTY5OSw1MTcyOSw1MTc1OCw1MTc4Nyw1MTgxNiw1MTg0Niw1MTg3Niw1MTkwNiw1MTkzNiw1MTk2NSw1MTk5NSw1MjAyNSw1MjA1NCw1MjA4Myw1MjExMyw1MjE0Miw1MjE3MSw1MjIwMCw1MjIzMCw1MjI2MCw1MjI5MCw1MjMxOSw1MjM0OSw1MjM3OSw1MjQwOCw1MjQzOCw1MjQ2Nyw1MjQ5Nyw1MjUyNiw1MjU1NSw1MjU4NSw1MjYxNCw1MjY0NCw1MjY3Myw1MjcwMyw1MjczMyw1Mjc2Miw1Mjc5Miw1MjgyMiw1Mjg1MSw1Mjg4MSw1MjkxMCw1MjkzOSw1Mjk2OSw1Mjk5OCw1MzAyOCw1MzA1Nyw1MzA4Nyw1MzExNiw1MzE0Niw1MzE3Niw1MzIwNSw1MzIzNSw1MzI2NCw1MzI5NCw1MzMyNCw1MzM1Myw1MzM4Myw1MzQxMiw1MzQ0MSw1MzQ3MSw1MzUwMCw1MzUzMCw1MzU1OSw1MzU4OSw1MzYxOSw1MzY0OCw1MzY3OCw1MzcwOCw1MzczNyw1Mzc2Nyw1Mzc5Niw1MzgyNSw1Mzg1NSw1Mzg4NCw1MzkxMyw1Mzk0Myw1Mzk3Myw1NDAwMyw1NDAzMiw1NDA2Miw1NDA5Miw1NDEyMSw1NDE1MSw1NDE4MCw1NDIwOSw1NDIzOSw1NDI2OCw1NDI5Nyw1NDMyNyw1NDM1Nyw1NDM4Nyw1NDQxNiw1NDQ0Niw1NDQ3Niw1NDUwNSw1NDUzNSw1NDU2NCw1NDU5Myw1NDYyMyw1NDY1Miw1NDY4MSw1NDcxMSw1NDc0MSw1NDc3MCw1NDgwMCw1NDgzMCw1NDg1OSw1NDg4OSw1NDkxOSw1NDk0OCw1NDk3Nyw1NTAwNyw1NTAzNiw1NTA2Niw1NTA5NSw1NTEyNSw1NTE1NCw1NTE4NCw1NTIxMyw1NTI0Myw1NTI3Myw1NTMwMiw1NTMzMiw1NTM2MSw1NTM5MSw1NTQyMCw1NTQ1MCw1NTQ3OSw1NTUwOCw1NTUzOCw1NTU2Nyw1NTU5Nyw1NTYyNyw1NTY1Nyw1NTY4Niw1NTcxNiw1NTc0NSw1NTc3NSw1NTgwNCw1NTgzNCw1NTg2Myw1NTg5Miw1NTkyMiw1NTk1MSw1NTk4MSw1NjAxMSw1NjA0MCw1NjA3MCw1NjEwMCw1NjEyOSw1NjE1OSw1NjE4OCw1NjIxOCw1NjI0Nyw1NjI3Niw1NjMwNiw1NjMzNSw1NjM2NSw1NjM5NCw1NjQyNCw1NjQ1NCw1NjQ4Myw1NjUxMyw1NjU0Myw1NjU3Miw1NjYwMSw1NjYzMSw1NjY2MCw1NjY5MCw1NjcxOSw1Njc0OSw1Njc3OCw1NjgwOCw1NjgzNyw1Njg2Nyw1Njg5Nyw1NjkyNiw1Njk1Niw1Njk4NSw1NzAxNSw1NzA0NCw1NzA3NCw1NzEwMyw1NzEzMyw1NzE2Miw1NzE5Miw1NzIyMSw1NzI1MSw1NzI4MCw1NzMxMCw1NzM0MCw1NzM2OSw1NzM5OSw1NzQyOSw1NzQ1OCw1NzQ4Nyw1NzUxNyw1NzU0Niw1NzU3Niw1NzYwNSw1NzYzNCw1NzY2NCw1NzY5NCw1NzcyMyw1Nzc1Myw1Nzc4Myw1NzgxMyw1Nzg0Miw1Nzg3MSw1NzkwMSw1NzkzMCw1Nzk1OSw1Nzk4OSw1ODAxOCw1ODA0OCw1ODA3Nyw1ODEwNyw1ODEzNyw1ODE2Nyw1ODE5Niw1ODIyNiw1ODI1NSw1ODI4NSw1ODMxNCw1ODM0Myw1ODM3Myw1ODQwMiw1ODQzMiw1ODQ2MSw1ODQ5MSw1ODUyMSw1ODU1MSw1ODU4MCw1ODYxMCw1ODYzOSw1ODY2OSw1ODY5OCw1ODcyNyw1ODc1Nyw1ODc4Niw1ODgxNiw1ODg0NSw1ODg3NSw1ODkwNSw1ODkzNCw1ODk2NCw1ODk5NCw1OTAyMyw1OTA1Myw1OTA4Miw1OTExMSw1OTE0MSw1OTE3MCw1OTIwMCw1OTIyOSw1OTI1OSw1OTI4OCw1OTMxOCw1OTM0OCw1OTM3Nyw1OTQwNyw1OTQzNiw1OTQ2Niw1OTQ5NSw1OTUyNSw1OTU1NCw1OTU4NCw1OTYxMyw1OTY0Myw1OTY3Miw1OTcwMiw1OTczMSw1OTc2MSw1OTc5MSw1OTgyMCw1OTg1MCw1OTg3OSw1OTkwOSw1OTkzOSw1OTk2OCw1OTk5Nyw2MDAyNyw2MDA1Niw2MDA4Niw2MDExNSw2MDE0NSw2MDE3NCw2MDIwNCw2MDIzNCw2MDI2NCw2MDI5Myw2MDMyMyw2MDM1Miw2MDM4MSw2MDQxMSw2MDQ0MCw2MDQ2OSw2MDQ5OSw2MDUyOCw2MDU1OCw2MDU4OCw2MDYxOCw2MDY0OCw2MDY3Nyw2MDcwNyw2MDczNiw2MDc2NSw2MDc5NSw2MDgyNCw2MDg1Myw2MDg4Myw2MDkxMiw2MDk0Miw2MDk3Miw2MTAwMiw2MTAzMSw2MTA2MSw2MTA5MCw2MTEyMCw2MTE0OSw2MTE3OSw2MTIwOCw2MTIzNyw2MTI2Nyw2MTI5Niw2MTMyNiw2MTM1Niw2MTM4NSw2MTQxNSw2MTQ0NSw2MTQ3NCw2MTUwNCw2MTUzMyw2MTU2Myw2MTU5Miw2MTYyMSw2MTY1MSw2MTY4MCw2MTcxMCw2MTczOSw2MTc2OSw2MTc5OSw2MTgyOCw2MTg1OCw2MTg4OCw2MTkxNyw2MTk0Nyw2MTk3Niw2MjAwNiw2MjAzNSw2MjA2NCw2MjA5NCw2MjEyMyw2MjE1Myw2MjE4Miw2MjIxMiw2MjI0Miw2MjI3MSw2MjMwMSw2MjMzMSw2MjM2MCw2MjM5MCw2MjQxOSw2MjQ0OCw2MjQ3OCw2MjUwNyw2MjUzNyw2MjU2Niw2MjU5Niw2MjYyNSw2MjY1NSw2MjY4NSw2MjcxNSw2Mjc0NCw2Mjc3NCw2MjgwMyw2MjgzMiw2Mjg2Miw2Mjg5MSw2MjkyMSw2Mjk1MCw2Mjk4MCw2MzAwOSw2MzAzOSw2MzA2OSw2MzA5OSw2MzEyOCw2MzE1Nyw2MzE4Nyw2MzIxNiw2MzI0Niw2MzI3NSw2MzMwNSw2MzMzNCw2MzM2Myw2MzM5Myw2MzQyMyw2MzQ1Myw2MzQ4Miw2MzUxMiw2MzU0MSw2MzU3MSw2MzYwMCw2MzYzMCw2MzY1OSw2MzY4OSw2MzcxOCw2Mzc0Nyw2Mzc3Nyw2MzgwNyw2MzgzNiw2Mzg2Niw2Mzg5NSw2MzkyNSw2Mzk1NSw2Mzk4NCw2NDAxNCw2NDA0Myw2NDA3Myw2NDEwMiw2NDEzMSw2NDE2MSw2NDE5MCw2NDIyMCw2NDI0OSw2NDI3OSw2NDMwOSw2NDMzOSw2NDM2OCw2NDM5OCw2NDQyNyw2NDQ1Nyw2NDQ4Niw2NDUxNSw2NDU0NSw2NDU3NCw2NDYwMyw2NDYzMyw2NDY2Myw2NDY5Miw2NDcyMiw2NDc1Miw2NDc4Miw2NDgxMSw2NDg0MSw2NDg3MCw2NDg5OSw2NDkyOSw2NDk1OCw2NDk4Nyw2NTAxNyw2NTA0Nyw2NTA3Niw2NTEwNiw2NTEzNiw2NTE2Niw2NTE5NSw2NTIyNSw2NTI1NCw2NTI4Myw2NTMxMyw2NTM0Miw2NTM3MSw2NTQwMSw2NTQzMSw2NTQ2MCw2NTQ5MCw2NTUyMCw2NTU0OSw2NTU3OSw2NTYwOCw2NTYzOCw2NTY2Nyw2NTY5Nyw2NTcyNiw2NTc1NSw2NTc4NSw2NTgxNSw2NTg0NCw2NTg3NCw2NTkwMyw2NTkzMyw2NTk2Myw2NTk5Miw2NjAyMiw2NjA1MSw2NjA4MSw2NjExMCw2NjE0MCw2NjE2OSw2NjE5OSw2NjIyOCw2NjI1OCw2NjI4Nyw2NjMxNyw2NjM0Niw2NjM3Niw2NjQwNSw2NjQzNSw2NjQ2NSw2NjQ5NCw2NjUyNCw2NjU1Myw2NjU4Myw2NjYxMiw2NjY0MSw2NjY3MSw2NjcwMCw2NjczMCw2Njc2MCw2Njc4OSw2NjgxOSw2Njg0OSw2Njg3OCw2NjkwOCw2NjkzNyw2Njk2Nyw2Njk5Niw2NzAyNSw2NzA1NSw2NzA4NCw2NzExNCw2NzE0Myw2NzE3Myw2NzIwMyw2NzIzMyw2NzI2Miw2NzI5Miw2NzMyMSw2NzM1MSw2NzM4MCw2NzQwOSw2NzQzOSw2NzQ2OCw2NzQ5Nyw2NzUyNyw2NzU1Nyw2NzU4Nyw2NzYxNyw2NzY0Niw2NzY3Niw2NzcwNSw2NzczNSw2Nzc2NCw2Nzc5Myw2NzgyMyw2Nzg1Miw2Nzg4Miw2NzkxMSw2Nzk0MSw2Nzk3MSw2OGUzLDY4MDMwLDY4MDYwLDY4MDg5LDY4MTE5LDY4MTQ4LDY4MTc3LDY4MjA3LDY4MjM2LDY4MjY2LDY4Mjk1LDY4MzI1LDY4MzU0LDY4Mzg0LDY4NDE0LDY4NDQzLDY4NDczLDY4NTAyLDY4NTMyLDY4NTYxLDY4NTkxLDY4NjIwLDY4NjUwLDY4Njc5LDY4NzA4LDY4NzM4LDY4NzY4LDY4Nzk3LDY4ODI3LDY4ODU3LDY4ODg2LDY4OTE2LDY4OTQ2LDY4OTc1LDY5MDA0LDY5MDM0LDY5MDYzLDY5MDkyLDY5MTIyLDY5MTUyLDY5MTgxLDY5MjExLDY5MjQwLDY5MjcwLDY5MzAwLDY5MzMwLDY5MzU5LDY5Mzg4LDY5NDE4LDY5NDQ3LDY5NDc2LDY5NTA2LDY5NTM1LDY5NTY1LDY5NTk1LDY5NjI0LDY5NjU0LDY5Njg0LDY5NzEzLDY5NzQzLDY5NzcyLDY5ODAyLDY5ODMxLDY5ODYxLDY5ODkwLDY5OTE5LDY5OTQ5LDY5OTc4LDcwMDA4LDcwMDM4LDcwMDY3LDcwMDk3LDcwMTI2LDcwMTU2LDcwMTg2LDcwMjE1LDcwMjQ1LDcwMjc0LDcwMzAzLDcwMzMzLDcwMzYyLDcwMzkyLDcwNDIxLDcwNDUxLDcwNDgxLDcwNTEwLDcwNTQwLDcwNTcwLDcwNTk5LDcwNjI5LDcwNjU4LDcwNjg3LDcwNzE3LDcwNzQ2LDcwNzc2LDcwODA1LDcwODM1LDcwODY0LDcwODk0LDcwOTI0LDcwOTU0LDcwOTgzLDcxMDEzLDcxMDQyLDcxMDcxLDcxMTAxLDcxMTMwLDcxMTU5LDcxMTg5LDcxMjE4LDcxMjQ4LDcxMjc4LDcxMzA4LDcxMzM3LDcxMzY3LDcxMzk3LDcxNDI2LDcxNDU1LDcxNDg1LDcxNTE0LDcxNTQzLDcxNTczLDcxNjAyLDcxNjMyLDcxNjYyLDcxNjkxLDcxNzIxLDcxNzUxLDcxNzgxLDcxODEwLDcxODM5LDcxODY5LDcxODk4LDcxOTI3LDcxOTU3LDcxOTg2LDcyMDE2LDcyMDQ2LDcyMDc1LDcyMTA1LDcyMTM1LDcyMTY0LDcyMTk0LDcyMjIzLDcyMjUzLDcyMjgyLDcyMzExLDcyMzQxLDcyMzcwLDcyNDAwLDcyNDI5LDcyNDU5LDcyNDg5LDcyNTE4LDcyNTQ4LDcyNTc3LDcyNjA3LDcyNjM3LDcyNjY2LDcyNjk1LDcyNzI1LDcyNzU0LDcyNzg0LDcyODEzLDcyODQzLDcyODcyLDcyOTAyLDcyOTMxLDcyOTYxLDcyOTkxLDczMDIwLDczMDUwLDczMDgwLDczMTA5LDczMTM5LDczMTY4LDczMTk3LDczMjI3LDczMjU2LDczMjg2LDczMzE1LDczMzQ1LDczMzc1LDczNDA0LDczNDM0LDczNDY0LDczNDkzLDczNTIzLDczNTUyLDczNTgxLDczNjExLDczNjQwLDczNjY5LDczNjk5LDczNzI5LDczNzU4LDczNzg4LDczODE4LDczODQ4LDczODc3LDczOTA3LDczOTM2LDczOTY1LDczOTk1LDc0MDI0LDc0MDUzLDc0MDgzLDc0MTEzLDc0MTQyLDc0MTcyLDc0MjAyLDc0MjMxLDc0MjYxLDc0MjkxLDc0MzIwLDc0MzQ5LDc0Mzc5LDc0NDA4LDc0NDM3LDc0NDY3LDc0NDk3LDc0NTI2LDc0NTU2LDc0NTg2LDc0NjE1LDc0NjQ1LDc0Njc1LDc0NzA0LDc0NzMzLDc0NzYzLDc0NzkyLDc0ODIyLDc0ODUxLDc0ODgxLDc0OTEwLDc0OTQwLDc0OTY5LDc0OTk5LDc1MDI5LDc1MDU4LDc1MDg4LDc1MTE3LDc1MTQ3LDc1MTc2LDc1MjA2LDc1MjM1LDc1MjY0LDc1Mjk0LDc1MzIzLDc1MzUzLDc1MzgzLDc1NDEyLDc1NDQyLDc1NDcyLDc1NTAxLDc1NTMxLDc1NTYwLDc1NTkwLDc1NjE5LDc1NjQ4LDc1Njc4LDc1NzA3LDc1NzM3LDc1NzY2LDc1Nzk2LDc1ODI2LDc1ODU2LDc1ODg1LDc1OTE1LDc1OTQ0LDc1OTc0LDc2MDAzLDc2MDMyLDc2MDYyLDc2MDkxLDc2MTIxLDc2MTUwLDc2MTgwLDc2MjEwLDc2MjM5LDc2MjY5LDc2Mjk5LDc2MzI4LDc2MzU4LDc2Mzg3LDc2NDE2LDc2NDQ2LDc2NDc1LDc2NTA1LDc2NTM0LDc2NTY0LDc2NTkzLDc2NjIzLDc2NjUzLDc2NjgyLDc2NzEyLDc2NzQxLDc2NzcxLDc2ODAxLDc2ODMwLDc2ODU5LDc2ODg5LDc2OTE4LDc2OTQ4LDc2OTc3LDc3MDA3LDc3MDM2LDc3MDY2LDc3MDk2LDc3MTI1LDc3MTU1LDc3MTg1LDc3MjE0LDc3MjQzLDc3MjczLDc3MzAyLDc3MzMyLDc3MzYxLDc3MzkwLDc3NDIwLDc3NDUwLDc3NDc5LDc3NTA5LDc3NTM5LDc3NTY5LDc3NTk4LDc3NjI3LDc3NjU3LDc3Njg2LDc3NzE1LDc3NzQ1LDc3Nzc0LDc3ODA0LDc3ODMzLDc3ODYzLDc3ODkzLDc3OTIzLDc3OTUyLDc3OTgyLDc4MDExLDc4MDQxLDc4MDcwLDc4MDk5LDc4MTI5LDc4MTU4LDc4MTg4LDc4MjE3LDc4MjQ3LDc4Mjc3LDc4MzA3LDc4MzM2LDc4MzY2LDc4Mzk1LDc4NDI1LDc4NDU0LDc4NDgzLDc4NTEzLDc4NTQyLDc4NTcyLDc4NjAxLDc4NjMxLDc4NjYxLDc4NjkwLDc4NzIwLDc4NzUwLDc4Nzc5LDc4ODA4LDc4ODM4LDc4ODY3LDc4ODk3LDc4OTI2LDc4OTU2LDc4OTg1LDc5MDE1LDc5MDQ0LDc5MDc0LDc5MTA0LDc5MTMzLDc5MTYzLDc5MTkyLDc5MjIyLDc5MjUxLDc5MjgxLDc5MzEwLDc5MzQwLDc5MzY5LDc5Mzk5LDc5NDI4LDc5NDU4LDc5NDg3LDc5NTE3LDc5NTQ2LDc5NTc2LDc5NjA2LDc5NjM1LDc5NjY1LDc5Njk1LDc5NzI0LDc5NzUzLDc5NzgzLDc5ODEyLDc5ODQxLDc5ODcxLDc5OTAwLDc5OTMwLDc5OTYwLDc5OTkwXX0seyIuLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU3OTpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLnJlZ2lvbmFsT3B0aW9ucz1bXSx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl09e2ludmFsaWRDYWxlbmRhcjoiQ2FsZW5kYXIgezB9IG5vdCBmb3VuZCIsaW52YWxpZERhdGU6IkludmFsaWQgezB9IGRhdGUiLGludmFsaWRNb250aDoiSW52YWxpZCB7MH0gbW9udGgiLGludmFsaWRZZWFyOiJJbnZhbGlkIHswfSB5ZWFyIixkaWZmZXJlbnRDYWxlbmRhcnM6IkNhbm5vdCBtaXggezB9IGFuZCB7MX0gZGF0ZXMifSx0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zWyIiXSx0aGlzLmNhbGVuZGFycz17fSx0aGlzLl9sb2NhbENhbHM9e319ZnVuY3Rpb24gaSh0LGUscixuKXtpZih0aGlzLl9jYWxlbmRhcj10LHRoaXMuX3llYXI9ZSx0aGlzLl9tb250aD1yLHRoaXMuX2RheT1uLDA9PT10aGlzLl9jYWxlbmRhci5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuX2NhbGVuZGFyLmlzVmFsaWQodGhpcy5feWVhcix0aGlzLl9tb250aCx0aGlzLl9kYXkpKXRocm93KHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkucmVwbGFjZSgvXHswXH0vLHRoaXMuX2NhbGVuZGFyLmxvY2FsLm5hbWUpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdD0iIit0LCIwMDAwMDAiLnN1YnN0cmluZygwLGUtdC5sZW5ndGgpK3R9ZnVuY3Rpb24gbygpe3RoaXMuc2hvcnRZZWFyQ3V0b2ZmPSIrMTAifWZ1bmN0aW9uIHModCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0XXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfXZhciBsPXQoIm9iamVjdC1hc3NpZ24iKTtsKG4ucHJvdG90eXBlLHtpbnN0YW5jZTpmdW5jdGlvbih0LGUpe3Q9KHR8fCJncmVnb3JpYW4iKS50b0xvd2VyQ2FzZSgpLGU9ZXx8IiI7dmFyIHI9dGhpcy5fbG9jYWxDYWxzW3QrIi0iK2VdO2lmKCFyJiZ0aGlzLmNhbGVuZGFyc1t0XSYmKHI9bmV3IHRoaXMuY2FsZW5kYXJzW3RdKGUpLHRoaXMuX2xvY2FsQ2Fsc1t0KyItIitlXT1yKSwhcil0aHJvdyh0aGlzLmxvY2FsLmludmFsaWRDYWxlbmRhcnx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRDYWxlbmRhcikucmVwbGFjZSgvXHswXH0vLHQpO3JldHVybiByfSxuZXdEYXRlOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIG49KG51bGwhPXQmJnQueWVhcj90LmNhbGVuZGFyKCk6InN0cmluZyI9PXR5cGVvZiBuP3RoaXMuaW5zdGFuY2UobixpKTpuKXx8dGhpcy5pbnN0YW5jZSgpLG4ubmV3RGF0ZSh0LGUscil9LHN1YnN0aXR1dGVEaWdpdHM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/IiI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLGwoaS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyh1LmxvY2FsLmludmFsaWREYXRlfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3codS5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSkKO3ZhciBlPXRoaXMuX3llYXIhPT10Ll95ZWFyP3RoaXMuX3llYXItdC5feWVhcjp0aGlzLl9tb250aCE9PXQuX21vbnRoP3RoaXMubW9udGhPZlllYXIoKS10Lm1vbnRoT2ZZZWFyKCk6dGhpcy5fZGF5LXQuX2RheTtyZXR1cm4gMD09PWU/MDplPDA/LTE6MX0sY2FsZW5kYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXJ9LHRvSkQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KRCh0aGlzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSkQodCl9LHRvSlNEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLnRvSlNEYXRlKHRoaXMpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxlbmRhci5mcm9tSlNEYXRlKHQpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybih0aGlzLnllYXIoKTwwPyItIjoiIikrYShNYXRoLmFicyh0aGlzLnllYXIoKSksNCkrIi0iK2EodGhpcy5tb250aCgpLDIpKyItIithKHRoaXMuZGF5KCksMil9fSksbChvLnByb3RvdHlwZSx7X3ZhbGlkYXRlTGV2ZWw6MCxuZXdEYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbnVsbD09dD90aGlzLnRvZGF5KCk6KHQueWVhciYmKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSkscj10LmRheSgpLGU9dC5tb250aCgpLHQ9dC55ZWFyKCkpLG5ldyBpKHRoaXMsdCxlLHIpKX0sdG9kYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tSlNEYXRlKG5ldyBEYXRlKX0sZXBvY2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLnllYXIoKTwwP3RoaXMubG9jYWwuZXBvY2hzWzBdOnRoaXMubG9jYWwuZXBvY2hzWzFdfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybihlLnllYXIoKTwwPyItIjoiIikrYShNYXRoLmFicyhlLnllYXIoKSksNCl9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZFllYXJ8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTJ9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZE1vbnRofHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4oci5tb250aCgpK3RoaXMubW9udGhzSW5ZZWFyKHIpLXRoaXMuZmlyc3RNb250aCkldGhpcy5tb250aHNJblllYXIocikrdGhpcy5taW5Nb250aH0sZnJvbU1vbnRoT2ZZZWFyOmZ1bmN0aW9uKHQsZSl7dmFyIHI9KGUrdGhpcy5maXJzdE1vbnRoLTIqdGhpcy5taW5Nb250aCkldGhpcy5tb250aHNJblllYXIodCkrdGhpcy5taW5Nb250aDtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxyLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZE1vbnRofHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKSxyfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpO3JldHVybiB0aGlzLmxlYXBZZWFyKGUpPzM2NjozNjV9LGRheU9mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4gbi50b0pEKCktdGhpcy5uZXdEYXRlKG4ueWVhcigpLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKG4ueWVhcigpLHRoaXMubWluTW9udGgpLHRoaXMubWluRGF5KS50b0pEKCkrMX0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA3fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSk7cmV0dXJuKE1hdGguZmxvb3IodGhpcy50b0pEKG4pKSsyKSV0aGlzLmRheXNJbldlZWsoKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx7fX0sYWRkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZERhdGV8fHUucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksdGhpcy5fY29ycmVjdEFkZCh0LHRoaXMuX2FkZCh0LGUsciksZSxyKX0sX2FkZDpmdW5jdGlvbih0LGUscil7aWYodGhpcy5fdmFsaWRhdGVMZXZlbCsrLCJkIj09PXJ8fCJ3Ij09PXIpe3ZhciBuPXQudG9KRCgpK2UqKCJ3Ij09PXI/dGhpcy5kYXlzSW5XZWVrKCk6MSksaT10LmNhbGVuZGFyKCkuZnJvbUpEKG4pO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0sW2kueWVhcigpLGkubW9udGgoKSxpLmRheSgpXX10cnl7dmFyIGE9dC55ZWFyKCkrKCJ5Ij09PXI/ZTowKSxvPXQubW9udGhPZlllYXIoKSsoIm0iPT09cj9lOjApLGk9dC5kYXkoKTsieSI9PT1yPyh0Lm1vbnRoKCkhPT10aGlzLmZyb21Nb250aE9mWWVhcihhLG8pJiYobz10aGlzLm5ld0RhdGUoYSx0Lm1vbnRoKCksdGhpcy5taW5EYXkpLm1vbnRoT2ZZZWFyKCkpLG89TWF0aC5taW4obyx0aGlzLm1vbnRoc0luWWVhcihhKSksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpOiJtIj09PXImJighZnVuY3Rpb24odCl7Zm9yKDtvPHQubWluTW9udGg7KWEtLSxvKz10Lm1vbnRoc0luWWVhcihhKTtmb3IodmFyIGU9dC5tb250aHNJblllYXIoYSk7bz5lLTErdC5taW5Nb250aDspYSsrLG8tPWUsZT10Lm1vbnRoc0luWWVhcihhKX0odGhpcyksaT1NYXRoLm1pbihpLHRoaXMuZGF5c0luTW9udGgoYSx0aGlzLmZyb21Nb250aE9mWWVhcihhLG8pKSkpO3ZhciBzPVthLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbyksaV07cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxzfWNhdGNoKHQpe3Rocm93IHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSx0fX0sX2NvcnJlY3RBZGQ6ZnVuY3Rpb24odCxlLHIsbil7aWYoISh0aGlzLmhhc1llYXJaZXJvfHwieSIhPT1uJiYibSIhPT1ufHwwIT09ZVswXSYmdC55ZWFyKCk+MD09ZVswXT4wKSl7dmFyIGk9e3k6WzEsMSwieSJdLG06WzEsdGhpcy5tb250aHNJblllYXIoLTEpLCJtIl0sdzpbdGhpcy5kYXlzSW5XZWVrKCksdGhpcy5kYXlzSW5ZZWFyKC0xKSwiZCJdLGQ6WzEsdGhpcy5kYXlzSW5ZZWFyKC0xKSwiZCJdfVtuXSxhPXI8MD8tMToxO2U9dGhpcy5fYWRkKHQscippWzBdK2EqaVsxXSxpWzJdKX1yZXR1cm4gdC5kYXRlKGVbMF0sZVsxXSxlWzJdKX0sc2V0OmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTt2YXIgbj0ieSI9PT1yP2U6dC55ZWFyKCksaT0ibSI9PT1yP2U6dC5tb250aCgpLGE9ImQiPT09cj9lOnQuZGF5KCk7cmV0dXJuInkiIT09ciYmIm0iIT09cnx8KGE9TWF0aC5taW4oYSx0aGlzLmRheXNJbk1vbnRoKG4saSkpKSx0LmRhdGUobixpLGEpfSxpc1ZhbGlkOmZ1bmN0aW9uKHQsZSxyKXt0aGlzLl92YWxpZGF0ZUxldmVsKys7dmFyIG49dGhpcy5oYXNZZWFyWmVyb3x8MCE9PXQ7aWYobil7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSx0aGlzLm1pbkRheSk7bj1lPj10aGlzLm1pbk1vbnRoJiZlLXRoaXMubWluTW9udGg8dGhpcy5tb250aHNJblllYXIoaSkmJnI+PXRoaXMubWluRGF5JiZyLXRoaXMubWluRGF5PHRoaXMuZGF5c0luTW9udGgoaSl9cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxufSx0b0pTRGF0ZTpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsdS5sb2NhbC5pbnZhbGlkRGF0ZXx8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4gdS5pbnN0YW5jZSgpLmZyb21KRCh0aGlzLnRvSkQobikpLnRvSlNEYXRlKCl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbUpEKHUuaW5zdGFuY2UoKS5mcm9tSlNEYXRlKHQpLnRvSkQoKSl9LF92YWxpZGF0ZTpmdW5jdGlvbih0LGUscixuKXtpZih0LnllYXIpe2lmKDA9PT10aGlzLl92YWxpZGF0ZUxldmVsJiZ0aGlzLm5hbWUhPT10LmNhbGVuZGFyKCkubmFtZSl0aHJvdyh1LmxvY2FsLmRpZmZlcmVudENhbGVuZGFyc3x8dS5yZWdpb25hbE9wdGlvbnNbIiJdLmRpZmZlcmVudENhbGVuZGFycykucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSkucmVwbGFjZSgvXHsxXH0vLHQuY2FsZW5kYXIoKS5sb2NhbC5uYW1lKTtyZXR1cm4gdH10cnl7aWYoMT09PSsrdGhpcy5fdmFsaWRhdGVMZXZlbCYmIXRoaXMuaXNWYWxpZCh0LGUscikpdGhyb3cgbi5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiB0aGlzLl92YWxpZGF0ZUxldmVsLS0saX1jYXRjaCh0KXt0aHJvdyB0aGlzLl92YWxpZGF0ZUxldmVsLS0sdH19fSkscy5wcm90b3R5cGU9bmV3IG8sbChzLnByb3RvdHlwZSx7bmFtZToiR3JlZ29yaWFuIixqZEVwb2NoOjE3MjE0MjUuNSxkYXlzUGVyTW9udGg6WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJHcmVnb3JpYW4iLGVwb2NoczpbIkJDRSIsIkNFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSx1LmxvY2FsLmludmFsaWRZZWFyfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLHQ9ZS55ZWFyKCkrKGUueWVhcigpPDA/MTowKTtyZXR1cm4gdCU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LHUubG9jYWwuaW52YWxpZE1vbnRofHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscix1LmxvY2FsLmludmFsaWREYXRlfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpO3I9ZSsxK3ItTWF0aC5mbG9vcihyLzQpO3ZhciBuPXIrMTUyNCxpPU1hdGguZmxvb3IoKG4tMTIyLjEpLzM2NS4yNSksYT1NYXRoLmZsb29yKDM2NS4yNSppKSxvPU1hdGguZmxvb3IoKG4tYSkvMzAuNjAwMSkscz1uLWEtTWF0aC5mbG9vcigzMC42MDAxKm8pLGw9by0obz4xMy41PzEzOjEpLHU9aS0obD4yLjU/NDcxNjo0NzE1KTtyZXR1cm4gdTw9MCYmdS0tLHRoaXMubmV3RGF0ZSh1LGwscyl9LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscix1LmxvY2FsLmludmFsaWREYXRlfHx1LnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLGk9bmV3IERhdGUobi55ZWFyKCksbi5tb250aCgpLTEsbi5kYXkoKSk7cmV0dXJuIGkuc2V0SG91cnMoMCksaS5zZXRNaW51dGVzKDApLGkuc2V0U2Vjb25kcygwKSxpLnNldE1pbGxpc2Vjb25kcygwKSxpLnNldEhvdXJzKGkuZ2V0SG91cnMoKT4xMj9pLmdldEhvdXJzKCkrMjowKSxpfSxmcm9tSlNEYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm5ld0RhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSsxLHQuZ2V0RGF0ZSgpKX19KTt2YXIgdT1lLmV4cG9ydHM9bmV3IG47dS5jZGF0ZT1pLHUuYmFzZUNhbGVuZGFyPW8sdS5jYWxlbmRhcnMuZ3JlZ29yaWFuPXN9LHsib2JqZWN0LWFzc2lnbiI6NDY4fV0sNTgwOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgib2JqZWN0LWFzc2lnbiIpLGk9dCgiLi9tYWluIik7bihpLnJlZ2lvbmFsT3B0aW9uc1siIl0se2ludmFsaWRBcmd1bWVudHM6IkludmFsaWQgYXJndW1lbnRzIixpbnZhbGlkRm9ybWF0OiJDYW5ub3QgZm9ybWF0IGEgZGF0ZSBmcm9tIGFub3RoZXIgY2FsZW5kYXIiLG1pc3NpbmdOdW1iZXJBdDoiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gezB9Iix1bmtub3duTmFtZUF0OiJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gezB9Iix1bmV4cGVjdGVkTGl0ZXJhbEF0OiJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gezB9Iix1bmV4cGVjdGVkVGV4dDoiQWRkaXRpb25hbCB0ZXh0IGZvdW5kIGF0IGVuZCJ9KSxpLmxvY2FsPWkucmVnaW9uYWxPcHRpb25zWyIiXSxuKGkuY2RhdGUucHJvdG90eXBlLHtmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYoZT10LHQ9IiIpLHRoaXMuX2NhbGVuZGFyLmZvcm1hdERhdGUodHx8IiIsdGhpcyxlKX19KSxuKGkuYmFzZUNhbGVuZGFyLnByb3RvdHlwZSx7VU5JWF9FUE9DSDppLmluc3RhbmNlKCkubmV3RGF0ZSgxOTcwLDEsMSkudG9KRCgpLFNFQ1NfUEVSX0RBWTo4NjQwMCxUSUNLU19FUE9DSDppLmluc3RhbmNlKCkuamRFcG9jaCxUSUNLU19QRVJfREFZOjg2NGU5LEFUT006Inl5eXktbW0tZGQiLENPT0tJRToiRCwgZGQgTSB5eXl5IixGVUxMOiJERCwgTU0gZCwgeXl5eSIsSVNPXzg2MDE6Inl5eXktbW0tZGQiLEpVTElBTjoiSiIsUkZDXzgyMjoiRCwgZCBNIHl5IixSRkNfODUwOiJERCwgZGQtTS15eSIsUkZDXzEwMzY6IkQsIGQgTSB5eSIsUkZDXzExMjM6IkQsIGQgTSB5eXl5IixSRkNfMjgyMjoiRCwgZCBNIHl5eXkiLFJTUzoiRCwgZCBNIHl5IixUSUNLUzoiISIsVElNRVNUQU1QOiJAIixXM0M6Inl5eXktbW0tZGQiLGZvcm1hdERhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHI9ZSxlPXQsdD0iIiksIWUpcmV0dXJuIiI7aWYoZS5jYWxlbmRhcigpIT09dGhpcyl0aHJvdyBpLmxvY2FsLmludmFsaWRGb3JtYXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRm9ybWF0O3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0LHI9cnx8e307Zm9yKHZhciBuPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LGE9ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxvPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxzPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCxsPXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLHU9KHIuY2FsY3VsYXRlV2Vla3x8dGhpcy5sb2NhbC5jYWxjdWxhdGVXZWVrLGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7dituPHQubGVuZ3RoJiZ0LmNoYXJBdCh2K24pPT09ZTspbisrO3JldHVybiB2Kz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0pLGM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9IiIrZTtpZih1KHQsbikpZm9yKDtpLmxlbmd0aDxyOylpPSIwIitpO3JldHVybiBpfSxoPXRoaXMsZj10aGlzLmxvY2FsLmRpZ2l0cyxkPWZ1bmN0aW9uKHQpe3JldHVybiByLmxvY2FsTnVtYmVycyYmZj9mKHQpOnR9LHA9IiIsbT0hMSx2PTA7djx0Lmxlbmd0aDt2KyspaWYobSkiJyIhPT10LmNoYXJBdCh2KXx8dSgiJyIpP3ArPXQuY2hhckF0KHYpOm09ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQodikpe2Nhc2UiZCI6cCs9ZChjKCJkIixlLmRheSgpLDIpKTticmVhaztjYXNlIkQiOnArPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB1KHQpP25bZV06cltlXX0oIkQiLGUuZGF5T2ZXZWVrKCksbixhKTticmVhaztjYXNlIm8iOnArPWMoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpwKz1jKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOnArPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvP28uY2FsbChoLHQsdSgibSIpKTpkKGMoIm0iLHQubW9udGgoKSwyKSl9KGUpO2JyZWFrO2Nhc2UiTSI6cCs9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iZnVuY3Rpb24iPT10eXBlb2YgbD9sLmNhbGwoaCx0KTpsW3QubW9udGgoKS1oLm1pbk1vbnRoXToiZnVuY3Rpb24iPT10eXBlb2Ygcz9zLmNhbGwoaCx0KTpzW3QubW9udGgoKS1oLm1pbk1vbnRoXX0oZSx1KCJNIikpO2JyZWFrO2Nhc2UieSI6cCs9dSgieSIsMik/ZS55ZWFyKCk6KGUueWVhcigpJTEwMDwxMD8iMCI6IiIpK2UueWVhcigpJTEwMDticmVhaztjYXNlIlkiOnUoIlkiLDIpLHArPWUuZm9ybWF0WWVhcigpO2JyZWFrO2Nhc2UiSiI6cCs9ZS50b0pEKCk7YnJlYWs7Y2FzZSJAIjpwKz0oZS50b0pEKCktdGhpcy5VTklYX0VQT0NIKSp0aGlzLlNFQ1NfUEVSX0RBWTticmVhaztjYXNlIiEiOnArPShlLnRvSkQoKS10aGlzLlRJQ0tTX0VQT0NIKSp0aGlzLlRJQ0tTX1BFUl9EQVk7YnJlYWs7Y2FzZSInIjp1KCInIik/cCs9IiciOm09ITA7YnJlYWs7ZGVmYXVsdDpwKz10LmNoYXJBdCh2KX1yZXR1cm4gcH0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsZSxyKXtpZihudWxsPT1lKXRocm93IGkubG9jYWwuaW52YWxpZEFyZ3VtZW50c3x8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRBcmd1bWVudHM7aWYoIiI9PT0oZT0ib2JqZWN0Ij09dHlwZW9mIGU/ZS50b1N0cmluZygpOmUrIiIpKXJldHVybiBudWxsO3Q9dHx8dGhpcy5sb2NhbC5kYXRlRm9ybWF0LHI9cnx8e307dmFyIG49ci5zaG9ydFllYXJDdXRvZmZ8fHRoaXMuc2hvcnRZZWFyQ3V0b2ZmO249InN0cmluZyIhPXR5cGVvZiBuP246dGhpcy50b2RheSgpLnllYXIoKSUxMDArcGFyc2VJbnQobiwxMCk7Zm9yKHZhciBhPXIuZGF5TmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5kYXlOYW1lc1Nob3J0LG89ci5kYXlOYW1lc3x8dGhpcy5sb2NhbC5kYXlOYW1lcyxzPXIucGFyc2VNb250aHx8dGhpcy5sb2NhbC5wYXJzZU1vbnRoLGw9ci5tb250aE51bWJlcnN8fHRoaXMubG9jYWwubW9udGhOdW1iZXJzLHU9ci5tb250aE5hbWVzU2hvcnR8fHRoaXMubG9jYWwubW9udGhOYW1lc1Nob3J0LGM9ci5tb250aE5hbWVzfHx0aGlzLmxvY2FsLm1vbnRoTmFtZXMsaD0tMSxmPS0xLGQ9LTEscD0tMSxtPS0xLHY9ITEsZz0hMSx5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPTE7aytuPHQubGVuZ3RoJiZ0LmNoYXJBdChrK24pPT09ZTspbisrO3JldHVybiBrKz1uLTEsTWF0aC5mbG9vcihuLyhyfHwxKSk+MX0sYj1mdW5jdGlvbih0LHIpe3ZhciBuPXkodCxyKSxhPVsyLDMsbj80OjIsbj80OjIsMTAsMTEsMjBdWyJveVlKQCEiLmluZGV4T2YodCkrMV0sbz1uZXcgUmVnRXhwKCJeLT9cXGR7MSwiK2ErIn0iKSxzPWUuc3Vic3RyaW5nKE0pLm1hdGNoKG8pO2lmKCFzKXRocm93KGkubG9jYWwubWlzc2luZ051bWJlckF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0ubWlzc2luZ051bWJlckF0KS5yZXBsYWNlKC9cezBcfS8sTSk7cmV0dXJuIE0rPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSx4PXRoaXMsXz1mdW5jdGlvbih0LHIsbixhKXtmb3IodmFyIG89eSh0LGEpP246cixzPTA7czxvLmxlbmd0aDtzKyspaWYoZS5zdWJzdHIoTSxvW3NdLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PW9bc10udG9Mb3dlckNhc2UoKSlyZXR1cm4gTSs9b1tzXS5sZW5ndGgscyt4Lm1pbk1vbnRoO3Rocm93KGkubG9jYWwudW5rbm93bk5hbWVBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLnVua25vd25OYW1lQXQpLnJlcGxhY2UoL1x7MFx9LyxNKX0sdz1mdW5jdGlvbigpe2lmKGUuY2hhckF0KE0pIT09dC5jaGFyQXQoaykpdGhyb3coaS5sb2NhbC51bmV4cGVjdGVkTGl0ZXJhbEF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZExpdGVyYWxBdCkucmVwbGFjZSgvXHswXH0vLE0pO00rK30sTT0wLGs9MDtrPHQubGVuZ3RoO2srKylpZihnKSInIiE9PXQuY2hhckF0KGspfHx5KCInIik/dygpOmc9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoaykpe2Nhc2UiZCI6cD1iKCJkIik7YnJlYWs7Y2FzZSJEIjpfKCJEIixhLG8pO2JyZWFrO2Nhc2UibyI6bT1iKCJvIik7YnJlYWs7Y2FzZSJ3IjpiKCJ3Iik7YnJlYWs7Y2FzZSJtIjpkPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpe3koIm0iKTt2YXIgdD1sLmNhbGwoeCxlLnN1YnN0cmluZyhNKSk7cmV0dXJuIE0rPXQubGVuZ3RoLHR9cmV0dXJuIGIoIm0iKX0oKTticmVhaztjYXNlIk0iOmQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYyl7dmFyIHQ9eSgiTSIpP2MuY2FsbCh4LGUuc3Vic3RyaW5nKE0pKTp1LmNhbGwoeCxlLnN1YnN0cmluZyhNKSk7cmV0dXJuIE0rPXQubGVuZ3RoLHR9cmV0dXJuIF8oIk0iLHUsYyl9KCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgQT1rO3Y9IXkoInkiLDIpLGs9QSxmPWIoInkiLDIpO2JyZWFrO2Nhc2UiWSI6Zj1iKCJZIiwyKTticmVhaztjYXNlIkoiOmg9YigiSiIpKy41LCIuIj09PWUuY2hhckF0KE0pJiYoTSsrLGIoIkoiKSk7YnJlYWs7Y2FzZSJAIjpoPWIoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpoPWIoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOk09ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/dygpOmc9ITA7YnJlYWs7ZGVmYXVsdDp3KCl9aWYoTTxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1mP2Y9dGhpcy50b2RheSgpLnllYXIoKTpmPDEwMCYmdiYmKGYrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGY8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIGQmJihkPXMuY2FsbCh0aGlzLGYsZCkpLG0+LTEpe2Q9MSxwPW07Zm9yKHZhciBUPXRoaXMuZGF5c0luTW9udGgoZixkKTtwPlQ7VD10aGlzLmRheXNJbk1vbnRoKGYsZCkpZCsrLHAtPVR9cmV0dXJuIGg+LTE/dGhpcy5mcm9tSkQoaCk6dGhpcy5uZXdEYXRlKGYsZCxwKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihpPW4sbj0iIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe310PXQudG9Mb3dlckNhc2UoKTtmb3IodmFyIGU9KHQubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTphLnRvZGF5KCkuYWRkKHQsImQiKTphLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo1NzksIm9iamVjdC1hc3NpZ24iOjQ2OH1dLDU4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCJjd2lzZS1jb21waWxlciIpKHthcmdzOlsiYXJyYXkiLHtvZmZzZXQ6WzFdLGFycmF5OjB9LCJzY2FsYXIiLCJzY2FsYXIiLCJpbmRleCJdLHByZTp7Ym9keToie30iLGFyZ3M6W10sdGhpc1ZhcnM6W10sbG9jYWxWYXJzOltdfSxwb3N0Ontib2R5OiJ7fSIsYXJnczpbXSx0aGlzVmFyczpbXSxsb2NhbFZhcnM6W119LGJvZHk6e2JvZHk6IntcbiAgICAgICAgdmFyIF9pbmxpbmVfMV9kYSA9IF9pbmxpbmVfMV9hcmcwXyAtIF9pbmxpbmVfMV9hcmczX1xuICAgICAgICB2YXIgX2lubGluZV8xX2RiID0gX2lubGluZV8xX2FyZzFfIC0gX2lubGluZV8xX2FyZzNfXG4gICAgICAgIGlmKChfaW5saW5lXzFfZGEgPj0gMCkgIT09IChfaW5saW5lXzFfZGIgPj0gMCkpIHtcbiAgICAgICAgICBfaW5saW5lXzFfYXJnMl8ucHVzaChfaW5saW5lXzFfYXJnNF9bMF0gKyAwLjUgKyAwLjUgKiAoX2lubGluZV8xX2RhICsgX2lubGluZV8xX2RiKSAvIChfaW5saW5lXzFfZGEgLSBfaW5saW5lXzFfZGIpKVxuICAgICAgICB9XG4gICAgICB9IixhcmdzOlt7bmFtZToiX2lubGluZV8xX2FyZzBfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjF9LHtuYW1lOiJfaW5saW5lXzFfYXJnMV8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX0se25hbWU6Il9pbmxpbmVfMV9hcmcyXyIsbHZhbHVlOiExLHJ2YWx1ZTohMCxjb3VudDoxfSx7bmFtZToiX2lubGluZV8xX2FyZzNfIixsdmFsdWU6ITEscnZhbHVlOiEwLGNvdW50OjJ9LHtuYW1lOiJfaW5saW5lXzFfYXJnNF8iLGx2YWx1ZTohMSxydmFsdWU6ITAsY291bnQ6MX1dLHRoaXNWYXJzOltdLGxvY2FsVmFyczpbIl9pbmxpbmVfMV9kYSIsIl9pbmxpbmVfMV9kYiJdfSxmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9KX0seyJjd2lzZS1jb21waWxlciI6MTA4fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1bXTtyZXR1cm4gZT0rZXx8MCxpKHQuaGkodC5zaGFwZVswXS0xKSxyLGUpLHJ9ZS5leHBvcnRzPW47dmFyIGk9dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjU4MX1dLDU4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2NvbW1vbl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfXM9c3x8e30sbD1sfHx7fTt2YXIgYz11KCJ2aXNpYmxlIiwhbC5pdGVtSXNOb3RQbGFpbk9iamVjdCksaD11KCJjbGlja3Rvc2hvdyIpO2lmKCFjJiYhaClyZXR1cm4gZTthKHQsZSxyLHUpO2Zvcih2YXIgZj1lLnNob3dhcnJvdyxkPVsieCIsInkiXSxwPVstMTAsLTMwXSxtPXtfZnVsbExheW91dDpyfSx2PTA7djwyO3YrKyl7dmFyIGc9ZFt2XSx5PWkuY29lcmNlUmVmKHQsZSxtLGcsIiIsInBhcGVyIik7aWYoaS5jb2VyY2VQb3NpdGlvbihlLG0sdSx5LGcsLjUpLGYpe3ZhciBiPSJhIitnLHg9aS5jb2VyY2VSZWYodCxlLG0sYiwicGl4ZWwiKTsicGl4ZWwiIT09eCYmeCE9PXkmJih4PWVbYl09InBpeGVsIik7dmFyIF89InBpeGVsIj09PXg/cFt2XTouNDtpLmNvZXJjZVBvc2l0aW9uKGUsbSx1LHgsYixfKX11KGcrImFuY2hvciIpLHUoZysic2hpZnQiKX1pZihuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxmJiZuLm5vbmVPckFsbCh0LGUsWyJheCIsImF5Il0pLGgpe3ZhciB3PXUoInhjbGljayIpLE09dSgieWNsaWNrIik7ZS5feGNsaWNrPXZvaWQgMD09PXc/ZS54OmkuY2xlYW5Qb3NpdGlvbih3LG0sZS54cmVmKSxlLl95Y2xpY2s9dm9pZCAwPT09TT9lLnk6aS5jbGVhblBvc2l0aW9uKE0sbSxlLnlyZWYpfXJldHVybiBlfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9hdHRyaWJ1dGVzIjo1ODUsIi4vY29tbW9uX2RlZmF1bHRzIjo1ODh9XSw1ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPVt7cGF0aDoiIixiYWNrb2ZmOjB9LHtwYXRoOiJNLTIuNCwtM1YzTDAuNiwwWiIsYmFja29mZjouNn0se3BhdGg6Ik0tMy43LC0yLjVWMi41TDEuMywwWiIsYmFja29mZjoxLjN9LHtwYXRoOiJNLTQuNDUsLTNMLTEuNjUsLTAuMlYwLjJMLTQuNDUsM0wxLjU1LDBaIixiYWNrb2ZmOjEuNTV9LHtwYXRoOiJNLTIuMiwtMi4yTC0wLjIsLTAuMlYwLjJMLTIuMiwyLjJMLTEuNCwzTDEuNiwwTC0xLjQsLTNaIixiYWNrb2ZmOjEuNn0se3BhdGg6Ik0tNC40LC0yLjFMLTAuNiwtMC4yVjAuMkwtNC40LDIuMUwtNCwzTDIsMEwtNCwtM1oiLGJhY2tvZmY6Mn0se3BhdGg6Ik0yLDBBMiwyIDAgMSwxIDAsLTJBMiwyIDAgMCwxIDIsMFoiLGJhY2tvZmY6MH0se3BhdGg6Ik0yLDJWLTJILTJWMloiLGJhY2tvZmY6MH1dfSx7fV0sNTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXJyb3dfcGF0aHMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtfaXNMaW5rZWRUb0FycmF5OiJhbm5vdGF0aW9uIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmcifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjB9LGZvbnQ6byh7fSxpLHt9KSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGx9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoiY2VudGVyIn0sdmFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJtaWRkbGUifSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9LGJvcmRlcnBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2Fycm93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxhcnJvd2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGFycm93aGVhZDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4Om4ubGVuZ3RoLGRmbHQ6MX0sYXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjF9LGFycm93d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xfSxzdGFuZG9mZjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LGF4Ont2YWxUeXBlOiJhbnkifSxheTp7dmFsVHlwZToiYW55In0sYXhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV19LGF5cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldfSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV19LHg6e3ZhbFR5cGU6ImFueSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJhdXRvIn0seHNoaWZ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGFwZXIiLGEuaWRSZWdleC55LnRvU3RyaW5nKCldfSx5Ont2YWxUeXBlOiJhbnkifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoiYXV0byJ9LHlzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGNsaWNrdG9zaG93Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJvbm9mZiIsIm9ub3V0Il0sZGZsdDohMX0seGNsaWNrOnt2YWxUeXBlOiJhbnkifSx5Y2xpY2s6e3ZhbFR5cGU6ImFueSJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIn0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IifSxmb250Om8oe30saSx7fSl9LGNhcHR1cmVldmVudHM6e3ZhbFR5cGU6ImJvb2xlYW4ifSxfZGVwcmVjYXRlZDp7cmVmOnt2YWxUeXBlOiJzdHJpbmcifX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzY5LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9hcnJvd19wYXRocyI6NTg0fV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5fZnVsbExheW91dDtpLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcixuLGk9YS5nZXRGcm9tSWQodCxlLnhyZWYpLG89YS5nZXRGcm9tSWQodCxlLnlyZWYpLHM9MyplLmFycm93c2l6ZSplLmFycm93d2lkdGh8fDA7aSYmaS5hdXRvcmFuZ2UmJihyPXMrZS54c2hpZnQsbj1zLWUueHNoaWZ0LGUuYXhyZWY9PT1lLnhyZWY/KGEuZXhwYW5kKGksW2kucjJjKGUueCldLHtwcGFkcGx1czpyLHBwYWRtaW51czpufSksYS5leHBhbmQoaSxbaS5yMmMoZS5heCldLHtwcGFkcGx1czplLl94cGFkcGx1cyxwcGFkbWludXM6ZS5feHBhZG1pbnVzfSkpOmEuZXhwYW5kKGksW2kucjJjKGUueCldLHtwcGFkcGx1czpNYXRoLm1heChlLl94cGFkcGx1cyxyKSxwcGFkbWludXM6TWF0aC5tYXgoZS5feHBhZG1pbnVzLG4pfSkpLG8mJm8uYXV0b3JhbmdlJiYocj1zLWUueXNoaWZ0LG49cytlLnlzaGlmdCxlLmF5cmVmPT09ZS55cmVmPyhhLmV4cGFuZChvLFtvLnIyYyhlLnkpXSx7cHBhZHBsdXM6cixwcGFkbWludXM6bn0pLGEuZXhwYW5kKG8sW28ucjJjKGUuYXkpXSx7cHBhZHBsdXM6ZS5feXBhZHBsdXMscHBhZG1pbnVzOmUuX3lwYWRtaW51c30pKTphLmV4cGFuZChvLFtvLnIyYyhlLnkpXSx7cHBhZHBsdXM6TWF0aC5tYXgoZS5feXBhZHBsdXMscikscHBhZG1pbnVzOk1hdGgubWF4KGUuX3lwYWRtaW51cyxuKX0pKX0pfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4vZHJhdyIpLmRyYXc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1pLmZpbHRlclZpc2libGUoZS5hbm5vdGF0aW9ucyk7aWYoci5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aCl7dmFyIHM9e307ci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3NbdC54cmVmXT0hMCxzW3QueXJlZl09ITB9KTtpZihhLmxpc3QodCkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmF1dG9yYW5nZSYmc1t0Ll9pZF19KS5sZW5ndGgpcmV0dXJuIGkuc3luY09yQXN5bmMoW28sbl0sdCl9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9kcmF3Ijo1OTF9XSw1ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWEodCxlKTtyZXR1cm4gci5vbi5sZW5ndGg+MHx8ci5leHBsaWNpdE9mZi5sZW5ndGg+MH1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbj1hKHQsZSksaT1uLm9uLG89bi5vZmYuY29uY2F0KG4uZXhwbGljaXRPZmYpLGw9e307aWYoaS5sZW5ndGh8fG8ubGVuZ3RoKXtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWxbImFubm90YXRpb25zWyIraVtyXSsiXS52aXNpYmxlIl09ITA7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKylsWyJhbm5vdGF0aW9uc1siK29bcl0rIl0udmlzaWJsZSJdPSExO3JldHVybiBzLnVwZGF0ZSh0LHt9LGwpfX1mdW5jdGlvbiBhKHQsZSl7dmFyIHIsbixpLGEscyxsLHUsYyxoPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1bXSxkPVtdLHA9W10sbT0oZXx8W10pLmxlbmd0aDtmb3Iocj0wO3I8aC5sZW5ndGg7cisrKWlmKGk9aFtyXSxhPWkuY2xpY2t0b3Nob3cpe2ZvcihuPTA7bjxtO24rKylpZihzPWVbbl0sbD1zLnhheGlzLHU9cy55YXhpcyxsLl9pZD09PWkueHJlZiYmdS5faWQ9PT1pLnlyZWYmJmwuZDJyKHMueCk9PT1vKGkuX3hjbGljayxsKSYmdS5kMnIocy55KT09PW8oaS5feWNsaWNrLHUpKXtjPWkudmlzaWJsZT8ib25vdXQiPT09YT9kOnA6ZixjLnB1c2gocik7YnJlYWt9bj09PW0mJmkudmlzaWJsZSYmIm9ub3V0Ij09PWEmJmQucHVzaChyKX1yZXR1cm57b246ZixvZmY6ZCxleHBsaWNpdE9mZjpwfX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuImxvZyI9PT1lLnR5cGU/ZS5sMnIodCk6ZS5kMnIodCl9dmFyIHM9dCgiLi4vLi4vcGxvdGx5Iik7ZS5leHBvcnRzPXtoYXNDbGlja1RvU2hvdzpuLG9uQ2xpY2s6aX19LHsiLi4vLi4vcGxvdGx5Ijo3NTl9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXthKCJvcGFjaXR5Iik7dmFyIG89YSgiYmdjb2xvciIpLHM9YSgiYm9yZGVyY29sb3IiKSxsPWkub3BhY2l0eShzKTthKCJib3JkZXJwYWQiKTt2YXIgdT1hKCJib3JkZXJ3aWR0aCIpLGM9YSgic2hvd2Fycm93Iik7YSgidGV4dCIsYz8iICI6Im5ldyB0ZXh0IiksYSgidGV4dGFuZ2xlIiksbi5jb2VyY2VGb250KGEsImZvbnQiLHIuZm9udCksYSgid2lkdGgiKSxhKCJhbGlnbiIpLGEoImhlaWdodCIpJiZhKCJ2YWxpZ24iKSxjJiYoYSgiYXJyb3djb2xvciIsbD9lLmJvcmRlcmNvbG9yOmkuZGVmYXVsdExpbmUpLGEoImFycm93aGVhZCIpLGEoImFycm93c2l6ZSIpLGEoImFycm93d2lkdGgiLDIqKGwmJnV8fDEpKSxhKCJzdGFuZG9mZiIpKTt2YXIgaD1hKCJob3ZlcnRleHQiKSxmPXIuaG92ZXJsYWJlbHx8e307aWYoaCl7dmFyIGQ9YSgiaG92ZXJsYWJlbC5iZ2NvbG9yIixmLmJnY29sb3J8fChpLm9wYWNpdHkobyk/aS5yZ2Iobyk6aS5kZWZhdWx0TGluZSkpLHA9YSgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsZi5ib3JkZXJjb2xvcnx8aS5jb250cmFzdChkKSk7bi5jb2VyY2VGb250KGEsImhvdmVybGFiZWwuZm9udCIse2ZhbWlseTpmLmZvbnQuZmFtaWx5LHNpemU6Zi5mb250LnNpemUsY29sb3I6Zi5mb250LmNvbG9yfHxwfSl9YSgiY2FwdHVyZWV2ZW50cyIsISFoKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL2NvbG9yIjo2MDJ9XSw1ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyh0KXt2YXIgcj11W3RdLG89bnVsbDtvPXM/aShyLGUucmFuZ2UpOk1hdGgucG93KDEwLHIpLG4obyl8fChvPW51bGwpLGEoYyt0LG8pfWU9ZXx8e307dmFyIHM9ImxvZyI9PT1yJiYibGluZWFyIj09PWUudHlwZSxsPSJsaW5lYXIiPT09ciYmImxvZyI9PT1lLnR5cGU7aWYoc3x8bClmb3IodmFyIHUsYyxoPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnMsZj1lLl9pZC5jaGFyQXQoMCksZD0wO2Q8aC5sZW5ndGg7ZCsrKXU9aFtkXSxjPSJhbm5vdGF0aW9uc1siK2QrIl0uIix1W2YrInJlZiJdPT09ZS5faWQmJm8oZiksdVsiYSIrZisicmVmIl09PT1lLl9pZCYmbygiYSIrZil9fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjc0NCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDU5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxpPXQoIi4vYW5ub3RhdGlvbl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24odCxlLHtuYW1lOiJhbm5vdGF0aW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOml9KX19LHsiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NjEsIi4vYW5ub3RhdGlvbl9kZWZhdWx0cyI6NTgzfV0sNTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbiIpLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWUuYW5ub3RhdGlvbnNbcl0udmlzaWJsZSYmaSh0LHIpO3JldHVybiBsLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1yLmFubm90YXRpb25zW2VdfHx7fTthKHQsbixlLCExLGMuZ2V0RnJvbUlkKHQsbi54cmVmKSxjLmdldEZyb21JZCh0LG4ueXJlZikpfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe2Z1bmN0aW9uIGwocil7cmV0dXJuIHIuY2FsbChmLmZvbnQsRikuYXR0cih7InRleHQtYW5jaG9yIjp7bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifVtlLmFsaWduXXx8Im1pZGRsZSJ9KSxwLmNvbnZlcnRUb1RzcGFucyhyLHQsYykscn1mdW5jdGlvbiBjKCl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiJhdXRvIj09PWUmJihlPXQ8MS8zPyJsZWZ0Ijp0PjIvMz8icmlnaHQiOiJjZW50ZXIiKSx7Y2VudGVyOjAsbWlkZGxlOjAsbGVmdDouNSxib3R0b206LS41LHJpZ2h0Oi0uNSx0b3A6LjV9W2VdfXZhciBvPWouc2VsZWN0QWxsKCJhIik7aWYoMT09PW8uc2l6ZSgpJiZvLnRleHQoKT09PWoudGV4dCgpKXtDLmluc2VydCgiYSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjpvLmF0dHIoInhsaW5rOmhyZWYiKSwieGxpbms6eGxpbms6c2hvdyI6by5hdHRyKCJ4bGluazpzaG93Iil9KS5zdHlsZSh7Y3Vyc29yOiJwb2ludGVyIn0pLm5vZGUoKS5hcHBlbmRDaGlsZChQLm5vZGUoKSl9dmFyIGw9Qy5zZWxlY3QoIi5hbm5vdGF0aW9uLXRleHQtbWF0aC1ncm91cCIpLGM9IWwuZW1wdHkoKSxkPWYuYkJveCgoYz9sOmopLm5vZGUoKSkseT1kLndpZHRoLEw9ZC5oZWlnaHQsST1lLndpZHRofHx5LEY9ZS5oZWlnaHR8fEwsTj1NYXRoLnJvdW5kKEkrMipEKSxCPU1hdGgucm91bmQoRisyKkQpO2UuX3c9SSxlLl9oPUY7Zm9yKHZhciBVPSExLFY9WyJ4IiwieSJdLEg9MDtIPFYubGVuZ3RoO0grKyl7dmFyIHEsRyxZLFgsVyxaPVZbSF0sSj1lW1orInJlZiJdfHxaLEs9ZVsiYSIrWisicmVmIl0sUT17eDppLHk6YX1bWl0sJD0oQSsoIngiPT09Wj8wOi05MCkpKk1hdGguUEkvMTgwLHR0PU4qTWF0aC5jb3MoJCksZXQ9QipNYXRoLnNpbigkKSxydD1NYXRoLmFicyh0dCkrTWF0aC5hYnMoZXQpLG50PWVbWisiYW5jaG9yIl0saXQ9ZVtaKyJzaGlmdCJdKigieCI9PT1aPzE6LTEpLGF0PWtbWl07aWYoUSl7dmFyIG90PVEucjJmcmFjdGlvbihlW1pdKTtpZigodC5fZHJhZ2dpbmd8fCFRLmF1dG9yYW5nZSkmJihvdDwwfHxvdD4xKSYmKEs9PT1KPygob3Q9US5yMmZyYWN0aW9uKGVbImEiK1pdKSk8MHx8b3Q+MSkmJihVPSEwKTpVPSEwLFUpKWNvbnRpbnVlO3E9US5fb2Zmc2V0K1EucjJwKGVbWl0pLFg9LjV9ZWxzZSJ4Ij09PVo/KFk9ZVtaXSxxPV8ubCtfLncqWSk6KFk9MS1lW1pdLHE9Xy50K18uaCpZKSxYPWUuc2hvd2Fycm93Py41Olk7aWYoZS5zaG93YXJyb3cpe2F0LmhlYWQ9cTt2YXIgc3Q9ZVsiYSIrWl07Vz10dCpyKC41LGUueGFuY2hvciktZXQqciguNSxlLnlhbmNob3IpLEs9PT1KPyhhdC50YWlsPVEuX29mZnNldCtRLnIycChzdCksRz1XKTooYXQudGFpbD1xK3N0LEc9VytzdCksYXQudGV4dD1hdC50YWlsK1c7dmFyIGx0PXhbIngiPT09Wj8id2lkdGgiOiJoZWlnaHQiXTtpZigicGFwZXIiPT09SiYmKGF0LmhlYWQ9dS5jb25zdHJhaW4oYXQuaGVhZCwxLGx0LTEpKSwicGl4ZWwiPT09Syl7dmFyIHV0PS1NYXRoLm1heChhdC50YWlsLTMsYXQudGV4dCksY3Q9TWF0aC5taW4oYXQudGFpbCszLGF0LnRleHQpLWx0O3V0PjA/KGF0LnRhaWwrPXV0LGF0LnRleHQrPXV0KTpjdD4wJiYoYXQudGFpbC09Y3QsYXQudGV4dC09Y3QpfWF0LnRhaWwrPWl0LGF0LmhlYWQrPWl0fWVsc2UgVz1ydCpyKFgsbnQpLEc9VyxhdC50ZXh0PXErVzthdC50ZXh0Kz1pdCxXKz1pdCxHKz1pdCxlWyJfIitaKyJwYWRwbHVzIl09cnQvMitHLGVbIl8iK1orInBhZG1pbnVzIl09cnQvMi1HLGVbIl8iK1orInNpemUiXT1ydCxlWyJfIitaKyJzaGlmdCJdPVd9aWYoVSlyZXR1cm4gdm9pZCBDLnJlbW92ZSgpO3ZhciBodD0wLGZ0PTA7aWYoImxlZnQiIT09ZS5hbGlnbiYmKGh0PShJLXkpKigiY2VudGVyIj09PWUuYWxpZ24/LjU6MSkpLCJ0b3AiIT09ZS52YWxpZ24mJihmdD0oRi1MKSooIm1pZGRsZSI9PT1lLnZhbGlnbj8uNToxKSksYylsLnNlbGVjdCgic3ZnIikuYXR0cih7eDpEK2h0LTEseTpEK2Z0fSkuY2FsbChmLnNldENsaXBVcmwsTz9NOm51bGwpO2Vsc2V7dmFyIGR0PUQrZnQtZC50b3AscHQ9RCtodC1kLmxlZnQ7ai5jYWxsKHAucG9zaXRpb25UZXh0LHB0LGR0KS5jYWxsKGYuc2V0Q2xpcFVybCxPP006bnVsbCl9Ui5zZWxlY3QoInJlY3QiKS5jYWxsKGYuc2V0UmVjdCxELEQsSSxGKSxQLmNhbGwoZi5zZXRSZWN0LHovMix6LzIsTi16LEIteiksQy5jYWxsKGYuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoay54LnRleHQtTi8yKSxNYXRoLnJvdW5kKGsueS50ZXh0LUIvMikpLFMuYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitBKyIsIitrLngudGV4dCsiLCIray55LnRleHQrIikifSk7dmFyIG10PWZ1bmN0aW9uKHIsbyl7VC5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWFycm93LWciKS5yZW1vdmUoKTt2YXIgbD1rLnguaGVhZCxjPWsueS5oZWFkLGQ9ay54LnRhaWwrcixwPWsueS50YWlsK28sbT1rLngudGV4dCtyLHk9ay55LnRleHQrbyx4PXUucm90YXRpb25YWU1hdHJpeChBLG0seSksTT11LmFwcGx5MkRUcmFuc2Zvcm0oeCksRT11LmFwcGx5MkRUcmFuc2Zvcm0yKHgpLEw9K1AuYXR0cigid2lkdGgiKSx6PStQLmF0dHIoImhlaWdodCIpLEk9bS0uNSpMLEQ9SStMLE89eS0uNSp6LFI9Tyt6LEY9W1tJLE8sSSxSXSxbSSxSLEQsUl0sW0QsUixELE9dLFtELE8sSSxPXV0ubWFwKEUpO2lmKCFGLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiB0XiEhdS5zZWdtZW50c0ludGVyc2VjdChsLGMsbCsxZTYsYysxZTYsZVswXSxlWzFdLGVbMl0sZVszXSl9LCExKSl7Ri5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXUuc2VnbWVudHNJbnRlcnNlY3QoZCxwLGwsYyx0WzBdLHRbMV0sdFsyXSx0WzNdKTtlJiYoZD1lLngscD1lLnkpfSk7dmFyIGo9ZS5hcnJvd3dpZHRoLE49ZS5hcnJvd2NvbG9yLEI9VC5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpoLm9wYWNpdHkoTil9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxVPUIuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2QrIiwiK3ArIkwiK2wrIiwiK2MpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGorInB4IikuY2FsbChoLnN0cm9rZSxoLnJnYihOKSk7aWYoZyhVLGUuYXJyb3doZWFkLCJlbmQiLGUuYXJyb3dzaXplLGUuc3RhbmRvZmYpLHcuYW5ub3RhdGlvblBvc2l0aW9uJiZVLm5vZGUoKS5wYXJlbnROb2RlJiYhbil7dmFyIFY9bCxIPWM7aWYoZS5zdGFuZG9mZil7dmFyIHE9TWF0aC5zcXJ0KE1hdGgucG93KGwtZCwyKStNYXRoLnBvdyhjLXAsMikpO1YrPWUuc3RhbmRvZmYqKGQtbCkvcSxIKz1lLnN0YW5kb2ZmKihwLWMpL3F9dmFyIEcsWSxYLFc9Qi5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmF0dHIoe2Q6Ik0zLDNILTNWLTNIM1pNMCwwTCIrKGQtVikrIiwiKyhwLUgpLHRyYW5zZm9ybToidHJhbnNsYXRlKCIrVisiLCIrSCsiKSJ9KS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKzYrInB4IikuY2FsbChoLnN0cm9rZSwicmdiYSgwLDAsMCwwKSIpLmNhbGwoaC5maWxsLCJyZ2JhKDAsMCwwLDApIik7di5pbml0KHtlbGVtZW50Olcubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9Zi5nZXRUcmFuc2xhdGUoQyk7WT10LngsWD10LnksRz17fSxpJiZpLmF1dG9yYW5nZSYmKEdbaS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKSxhJiZhLmF1dG9yYW5nZSYmKEdbYS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49TShZLFgpLG89blswXSt0LHM9blsxXStyO0MuY2FsbChmLnNldFRyYW5zbGF0ZSxvLHMpLEdbYisiLngiXT1pP2kucDJyKGkucjJwKGUueCkrdCk6ZS54K3QvXy53LEdbYisiLnkiXT1hP2EucDJyKGEucjJwKGUueSkrcik6ZS55LXIvXy5oLGUuYXhyZWY9PT1lLnhyZWYmJihHW2IrIi5heCJdPWkucDJyKGkucjJwKGUuYXgpK3QpKSxlLmF5cmVmPT09ZS55cmVmJiYoR1tiKyIuYXkiXT1hLnAycihhLnIycChlLmF5KStyKSksQi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIiksUy5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK0ErIiwiK28rIiwiK3MrIikifSl9LGRvbmVGbjpmdW5jdGlvbihlKXtpZihlKXtzLnJlbGF5b3V0KHQsRyk7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmpzLW5vdGVzLWJveC1wYW5lbCIpO3ImJnIucmVkcmF3KHIuc2VsZWN0ZWRPYmopfX19KX19fTtpZihlLnNob3dhcnJvdyYmbXQoMCwwKSxFKXt2YXIgdnQsZ3Q7di5pbml0KHtlbGVtZW50OkMubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7Z3Q9Uy5hdHRyKCJ0cmFuc2Zvcm0iKSx2dD17fX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG89InBvaW50ZXIiO2lmKGUuc2hvd2Fycm93KWUuYXhyZWY9PT1lLnhyZWY/dnRbYisiLmF4Il09aS5wMnIoaS5yMnAoZS5heCkrdCk6dnRbYisiLmF4Il09ZS5heCt0LGUuYXlyZWY9PT1lLnlyZWY/dnRbYisiLmF5Il09YS5wMnIoYS5yMnAoZS5heSkrcik6dnRbYisiLmF5Il09ZS5heStyLG10KHQscik7ZWxzZXtpZihuKXJldHVybjtpZihpKXZ0W2IrIi54Il09ZS54K3QvaS5fbTtlbHNle3ZhciBzPWUuX3hzaXplL18udyxsPWUueCsoZS5feHNoaWZ0LWUueHNoaWZ0KS9fLnctcy8yO3Z0W2IrIi54Il09di5hbGlnbihsK3QvXy53LHMsMCwxLGUueGFuY2hvcil9aWYoYSl2dFtiKyIueSJdPWUueStyL2EuX207ZWxzZXt2YXIgdT1lLl95c2l6ZS9fLmgsYz1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvXy5oLXUvMjt2dFtiKyIueSJdPXYuYWxpZ24oYy1yL18uaCx1LDAsMSxlLnlhbmNob3IpfWkmJmF8fChvPXYuZ2V0Q3Vyc29yKGk/LjU6dnRbYisiLngiXSxhPy41OnZ0W2IrIi55Il0sZS54YW5jaG9yLGUueWFuY2hvcikpfVMuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIit0KyIsIityKyIpIitndH0pLG0oQyxvKX0sZG9uZUZuOmZ1bmN0aW9uKGUpe2lmKG0oQyksZSl7cy5yZWxheW91dCh0LHZ0KTt2YXIgcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ciYmci5yZWRyYXcoci5zZWxlY3RlZE9iail9fX0pfX12YXIgeSxiLHg9dC5fZnVsbExheW91dCxfPXQuX2Z1bGxMYXlvdXQuX3NpemUsdz10Ll9jb250ZXh0LmVkaXRzO24/KHk9ImFubm90YXRpb24tIituLGI9bisiLmFubm90YXRpb25zWyIrcisiXSIpOih5PSJhbm5vdGF0aW9uIixiPSJhbm5vdGF0aW9uc1siK3IrIl0iKSx4Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIit5KydbZGF0YS1pbmRleD0iJytyKyciXScpLnJlbW92ZSgpO3ZhciBNPSJjbGlwIit4Ll91aWQrIl9hbm4iK3I7aWYoIWUuX2lucHV0fHwhMT09PWUudmlzaWJsZSlyZXR1cm4gdm9pZCBvLnNlbGVjdEFsbCgiIyIrTSkucmVtb3ZlKCk7dmFyIGs9e3g6e30seTp7fX0sQT0rZS50ZXh0YW5nbGV8fDAsVD14Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZCh5LCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLFM9VC5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLEU9d1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxMPWUuY2FwdHVyZWV2ZW50c3x8dy5hbm5vdGF0aW9uVGV4dHx8RSxDPVMuYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixMPyJhbGwiOm51bGwpLmNhbGwobSwiZGVmYXVsdCIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt0Ll9kcmFnZ2luZz0hMTt2YXIgaT17aW5kZXg6cixhbm5vdGF0aW9uOmUuX2lucHV0LGZ1bGxBbm5vdGF0aW9uOmUsZXZlbnQ6by5ldmVudH07biYmKGkuc3VicGxvdElkPW4pLHQuZW1pdCgicGxvdGx5X2NsaWNrYW5ub3RhdGlvbiIsaSl9KTtlLmhvdmVydGV4dCYmQy5vbigibW91c2VvdmVyIixmdW5jdGlvbigpe3ZhciByPWUuaG92ZXJsYWJlbCxuPXIuZm9udCxpPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2QubG9uZUhvdmVyKHt4MDppLmxlZnQtYS5sZWZ0LHgxOmkucmlnaHQtYS5sZWZ0LHk6KGkudG9wK2kuYm90dG9tKS8yLWEudG9wLHRleHQ6ZS5ob3ZlcnRleHQsY29sb3I6ci5iZ2NvbG9yLGJvcmRlckNvbG9yOnIuYm9yZGVyY29sb3IsZm9udEZhbWlseTpuLmZhbWlseSxmb250U2l6ZTpuLnNpemUsZm9udENvbG9yOm4uY29sb3J9LHtjb250YWluZXI6eC5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6eC5fcGFwZXIubm9kZSgpLGdkOnR9KX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtkLmxvbmVVbmhvdmVyKHguX2hvdmVybGF5ZXIubm9kZSgpKX0pO3ZhciB6PWUuYm9yZGVyd2lkdGgsST1lLmJvcmRlcnBhZCxEPXorSSxQPUMuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiZyIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHorInB4IikuY2FsbChoLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5jYWxsKGguZmlsbCxlLmJnY29sb3IpLE89ZS53aWR0aHx8ZS5oZWlnaHQsUj14Ll9kZWZzLnNlbGVjdCgiLmNsaXBzIikuc2VsZWN0QWxsKCIjIitNKS5kYXRhKE8/WzBdOltdKTtSLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsTSkuYXBwZW5kKCJyZWN0IiksUi5leGl0KCkucmVtb3ZlKCk7dmFyIEY9ZS5mb250LGo9Qy5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQiLCEwKS50ZXh0KGUudGV4dCk7dy5hbm5vdGF0aW9uVGV4dD9qLmNhbGwocC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOkMsZ2Q6dH0pLmNhbGwobCkub24oImVkaXQiLGZ1bmN0aW9uKHIpe2UudGV4dD1yLHRoaXMuY2FsbChsKTt2YXIgbj17fTtuW2IrIi50ZXh0Il09ZS50ZXh0LGkmJmkuYXV0b3JhbmdlJiYobltpLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApLGEmJmEuYXV0b3JhbmdlJiYoblthLl9uYW1lKyIuYXV0b3JhbmdlIl09ITApLHMucmVsYXlvdXQodCxuKX0pOmouY2FsbChsKX12YXIgbz10KCJkMyIpLHM9dCgiLi4vLi4vcGxvdGx5IiksbD10KCIuLi8uLi9wbG90cy9wbG90cyIpLHU9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGg9dCgiLi4vY29sb3IiKSxmPXQoIi4uL2RyYXdpbmciKSxkPXQoIi4uL2Z4IikscD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxtPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSx2PXQoIi4uL2RyYWdlbGVtZW50IiksZz10KCIuL2RyYXdfYXJyb3dfaGVhZCIpO2UuZXhwb3J0cz17ZHJhdzpuLGRyYXdPbmU6aSxkcmF3UmF3OmF9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuLi9meCI6NjQzLCIuL2RyYXdfYXJyb3dfaGVhZCI6NTkyLGQzOjEyMH1dLDU5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuL2Fycm93X3BhdGhzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsdSl7ZnVuY3Rpb24gYygpe3Quc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBoKHIsaSl7ZC5wYXRoJiYoZT41JiYoaT0wKSxuLnNlbGVjdChmLnBhcmVudE5vZGUpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOnQuYXR0cigiY2xhc3MiKSxkOmQucGF0aCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK3IueCsiLCIrci55KyIpcm90YXRlKCIrMTgwKmkvTWF0aC5QSSsiKXNjYWxlKCIreSsiKSJ9KS5zdHlsZSh7ZmlsbDpiLG9wYWNpdHk6eCwic3Ryb2tlLXdpZHRoIjowfSkpfWkobCl8fChsPTEpO3ZhciBmPXQubm9kZSgpLGQ9c1tlfHwwXTsic3RyaW5nIj09dHlwZW9mIHImJnJ8fChyPSJlbmQiKTt2YXIgcCxtLHYsZyx5PShvLmdldFB4KHQsInN0cm9rZS13aWR0aCIpfHwxKSpsLGI9dC5zdHlsZSgic3Ryb2tlIil8fGEuZGVmYXVsdExpbmUseD10LnN0eWxlKCJzdHJva2Utb3BhY2l0eSIpfHwxLF89ci5pbmRleE9mKCJzdGFydCIpPj0wLHc9ci5pbmRleE9mKCJlbmQiKT49MCxNPWQuYmFja29mZip5K3U7aWYoImxpbmUiPT09Zi5ub2RlTmFtZSl7cD17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0sbT17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIGs9cC54LW0ueCxBPXAueS1tLnk7aWYodj1NYXRoLmF0YW4yKEEsayksZz12K01hdGguUEksTSl7aWYoTSpNPmsqaytBKkEpcmV0dXJuIHZvaWQgYygpO3ZhciBUPU0qTWF0aC5jb3ModiksUz1NKk1hdGguc2luKHYpO18mJihwLngtPVQscC55LT1TLHQuYXR0cih7eDE6cC54LHkxOnAueX0pKSx3JiYobS54Kz1ULG0ueSs9Uyx0LmF0dHIoe3gyOm0ueCx5MjptLnl9KSl9fWVsc2UgaWYoInBhdGgiPT09Zi5ub2RlTmFtZSl7dmFyIEU9Zi5nZXRUb3RhbExlbmd0aCgpLEw9IiI7aWYoRTxNKXJldHVybiB2b2lkIGMoKTtpZihfKXt2YXIgQz1mLmdldFBvaW50QXRMZW5ndGgoMCksej1mLmdldFBvaW50QXRMZW5ndGgoLjEpO3Y9TWF0aC5hdGFuMihDLnktei55LEMueC16LngpLHA9Zi5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKE0sRSkpLE0mJihMPSIwcHgsIitNKyJweCwiKX1pZih3KXt2YXIgST1mLmdldFBvaW50QXRMZW5ndGgoRSksRD1mLmdldFBvaW50QXRMZW5ndGgoRS0uMSk7aWYoZz1NYXRoLmF0YW4yKEkueS1ELnksSS54LUQueCksbT1mLmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxFLU0pKSxNKXt2YXIgUD1MPzIqTTpNO0wrPUUtUCsicHgsIitFKyJweCJ9fWVsc2UgTCYmKEwrPUUrInB4Iik7TCYmdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsTCl9XyYmaChwLHYpLHcmJmgobSxnKX19LHsiLi4vY29sb3IiOjYwMiwiLi4vZHJhd2luZyI6NjI2LCIuL2Fycm93X3BhdGhzIjo1ODQsZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi9jbGljayIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9ucyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmUsZHJhd1JhdzpuLmRyYXdSYXcsaGFzQ2xpY2tUb1Nob3c6aS5oYXNDbGlja1RvU2hvdyxvbkNsaWNrOmkub25DbGljayxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi9hdHRyaWJ1dGVzIjo1ODUsIi4vY2FsY19hdXRvcmFuZ2UiOjU4NiwiLi9jbGljayI6NTg3LCIuL2NvbnZlcnRfY29vcmRzIjo1ODksIi4vZGVmYXVsdHMiOjU5MCwiLi9kcmF3Ijo1OTF9XSw1OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiYW5ub3RhdGlvbiIsdmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsYXJyb3dzaXplOm4uYXJyb3dzaXplLGFycm93d2lkdGg6bi5hcnJvd3dpZHRoLHN0YW5kb2ZmOm4uc3RhbmRvZmYsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LGhvdmVybGFiZWw6bi5ob3ZlcmxhYmVsLGNhcHR1cmVldmVudHM6bi5jYXB0dXJlZXZlbnRzfX0seyIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo1ODV9XSw1OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWUuZnVsbFNjZW5lTGF5b3V0LG49ci5kb21haW4sbz1lLmZ1bGxMYXlvdXQuX3NpemUscz17cGRhdGE6bnVsbCx0eXBlOiJsaW5lYXIiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxpLmV4dGVuZEZsYXQodC5feGEscyksYS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PW8ubCtuLnhbMF0qby53LHQuX3hhLmwycD1mdW5jdGlvbigpewpyZXR1cm4uNSooMSt0LnBkYXRhWzBdL3QucGRhdGFbM10pKm8udyoobi54WzFdLW4ueFswXSl9LHQuX3lhPXt9LGkuZXh0ZW5kRmxhdCh0Ll95YSxzKSxhLnNldENvbnZlcnQodC5feWEpLHQuX3lhLl9vZmZzZXQ9by50KygxLW4ueVsxXSkqby5oLHQuX3lhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxLXQucGRhdGFbMV0vdC5wZGF0YVszXSkqby5oKihuLnlbMV0tbi55WzBdKX19dmFyIGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj1lLmFubm90YXRpb25zLGk9MDtpPHIubGVuZ3RoO2krKyluKHJbaV0sdCk7dC5mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi0iK3QuaWQpLnJlbW92ZSgpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDU5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sbyl7ZnVuY3Rpb24gdShyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsbCxyLG4pfWZ1bmN0aW9uIGModCl7dmFyIG49dCsiYXhpcyIsaT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBpLl9mdWxsTGF5b3V0W25dPXJbbl0sYS5jb2VyY2VQb3NpdGlvbihlLGksdSx0LHQsLjUpfXJldHVybiB1KCJ2aXNpYmxlIiwhby5pdGVtSXNOb3RQbGFpbk9iamVjdCk/KHModCxlLG4uZnVsbExheW91dCx1KSxjKCJ4IiksYygieSIpLGMoInoiKSxpLm5vbmVPckFsbCh0LGUsWyJ4IiwieSIsInoiXSksZS54cmVmPSJ4IixlLnlyZWY9InkiLGUuenJlZj0ieiIsdSgieGFuY2hvciIpLHUoInlhbmNob3IiKSx1KCJ4c2hpZnQiKSx1KCJ5c2hpZnQiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9InBpeGVsIixlLmF5cmVmPSJwaXhlbCIsdSgiYXgiLC0xMCksdSgiYXkiLC0zMCksaS5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSksZSk6ZX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSx7bmFtZToiYW5ub3RhdGlvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpuLGZ1bGxMYXlvdXQ6ci5mdWxsTGF5b3V0fSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vYW5ub3RhdGlvbnMvY29tbW9uX2RlZmF1bHRzIjo1ODgsIi4vYXR0cmlidXRlcyI6NTk0fV0sNTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2RyYXciKS5kcmF3UmF3LGk9dCgiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0IiksYT1bIngiLCJ5IiwieiJdO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5mdWxsU2NlbmVMYXlvdXQscj10LmRhdGFTY2FsZSxvPWUuYW5ub3RhdGlvbnMscz0wO3M8by5sZW5ndGg7cysrKXtmb3IodmFyIGw9b1tzXSx1PSExLGM9MDtjPDM7YysrKXt2YXIgaD1hW2NdLGY9bFtoXSxkPWVbaCsiYXhpcyJdLHA9ZC5yMmZyYWN0aW9uKGYpO2lmKHA8MHx8cD4xKXt1PSEwO2JyZWFrfX11P3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIit0LmlkKydbZGF0YS1pbmRleD0iJytzKyciXScpLnJlbW92ZSgpOihsLnBkYXRhPWkodC5nbHBsb3QuY2FtZXJhUGFyYW1zLFtlLnhheGlzLnIybChsLngpKnJbMF0sZS55YXhpcy5yMmwobC55KSpyWzFdLGUuemF4aXMucjJsKGwueikqclsyXV0pLG4odC5ncmFwaERpdixsLHMsdC5pZCxsLl94YSxsLl95YSkpfX19LHsiLi4vLi4vcGxvdHMvZ2wzZC9wcm9qZWN0Ijo4MTYsIi4uL2Fubm90YXRpb25zL2RyYXciOjU5MX1dLDU5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiYW5ub3RhdGlvbnMzZCIsc2NoZW1hOntsYXlvdXQ6eyJzY2VuZS5hbm5vdGF0aW9ucyI6dCgiLi9hdHRyaWJ1dGVzIil9fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb252ZXJ0OnQoIi4vY29udmVydCIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NTk0LCIuL2NvbnZlcnQiOjU5NSwiLi9kZWZhdWx0cyI6NTk2LCIuL2RyYXciOjU5N31dLDU5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvbWFpbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9jb3B0aWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9oZWJyZXciKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbWF5YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvcGVyc2lhbiIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy91bW1hbHF1cmEiKX0seyJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY2hpbmVzZSI6NTY1LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIjo1NjYsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9kaXNjd29ybGQiOjU2Nywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2V0aGlvcGlhbiI6NTY4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3Ijo1NjksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9pc2xhbWljIjo1NzAsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9qdWxpYW4iOjU3MSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIjo1NzIsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uYW5ha3NoYWhpIjo1NzMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9uZXBhbGkiOjU3NCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iOjU3NSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RhaXdhbiI6NTc2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGhhaSI6NTc3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIjo1NzgsIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iOjU3OSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvcGx1cyI6NTgwfV0sNjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbixhLG8scyxsLHU9TWF0aC5mbG9vcigoZSsuMDUpL2gpK2MsZj1pKHIpLmZyb21KRCh1KSxkPTA7LTEhPT0oZD10LmluZGV4T2YoIiUiLGQpKTspbj10LmNoYXJBdChkKzEpLCIwIj09PW58fCItIj09PW58fCJfIj09PW4/KG89MyxhPXQuY2hhckF0KGQrMiksIl8iPT09biYmKG49Ii0iKSk6KGE9bixuPSIwIixvPTIpLHM9YlthXSxzPyhsPXM9PT15P3k6Zi5mb3JtYXREYXRlKHNbbl0pLHQ9dC5zdWJzdHIoMCxkKStsK3Quc3Vic3RyKGQrbyksZCs9bC5sZW5ndGgpOmQrPW87cmV0dXJuIHR9ZnVuY3Rpb24gaSh0KXt2YXIgZT14W3RdO3JldHVybiBlfHwoZT14W3RdPXMuaW5zdGFuY2UodCkpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIGwuZXh0ZW5kRmxhdCh7fSxmLHtkZXNjcmlwdGlvbjp0fSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSB3aXRoIGAiK3QrImAgZGF0ZSBkYXRhLiJ9dmFyIHM9dCgiLi9jYWxlbmRhcnMiKSxsPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGM9dS5FUE9DSEpELGg9dS5PTkVEQVksZj17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKHMuY2FsZW5kYXJzKSxkZmx0OiJncmVnb3JpYW4ifSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXt9O3JldHVybiBpW3JdPWYsbC5jb2VyY2UodCxlLGkscixuKX0scD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylkKHQsZSxyW2ldKyJjYWxlbmRhciIsbi5jYWxlbmRhcil9LG09e2NoaW5lc2U6IjIwMDAtMDEtMDEiLGNvcHRpYzoiMjAwMC0wMS0wMSIsZGlzY3dvcmxkOiIyMDAwLTAxLTAxIixldGhpb3BpYW46IjIwMDAtMDEtMDEiLGhlYnJldzoiNTAwMC0wMS0wMSIsaXNsYW1pYzoiMTAwMC0wMS0wMSIsanVsaWFuOiIyMDAwLTAxLTAxIixtYXlhbjoiNTAwMC0wMS0wMSIsbmFuYWtzaGFoaToiMTAwMC0wMS0wMSIsbmVwYWxpOiIyMDAwLTAxLTAxIixwZXJzaWFuOiIxMDAwLTAxLTAxIixqYWxhbGk6IjEwMDAtMDEtMDEiLHRhaXdhbjoiMTAwMC0wMS0wMSIsdGhhaToiMjAwMC0wMS0wMSIsdW1tYWxxdXJhOiIxNDAwLTAxLTAxIn0sdj17Y2hpbmVzZToiMjAwMC0wMS0wMiIsY29wdGljOiIyMDAwLTAxLTAzIixkaXNjd29ybGQ6IjIwMDAtMDEtMDMiLGV0aGlvcGlhbjoiMjAwMC0wMS0wNSIsaGVicmV3OiI1MDAwLTAxLTAxIixpc2xhbWljOiIxMDAwLTAxLTAyIixqdWxpYW46IjIwMDAtMDEtMDMiLG1heWFuOiI1MDAwLTAxLTAxIixuYW5ha3NoYWhpOiIxMDAwLTAxLTA1IixuZXBhbGk6IjIwMDAtMDEtMDUiLHBlcnNpYW46IjEwMDAtMDEtMDEiLGphbGFsaToiMTAwMC0wMS0wMSIsdGFpd2FuOiIxMDAwLTAxLTA0Iix0aGFpOiIyMDAwLTAxLTA0Iix1bW1hbHF1cmE6IjE0MDAtMDEtMDYifSxnPXtjaGluZXNlOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxjb3B0aWM6WyIxNzAwLTAxLTAxIiwiMTcwMS0wMS0wMSJdLGRpc2N3b3JsZDpbIjE4MDAtMDEtMDEiLCIxODAxLTAxLTAxIl0sZXRoaW9waWFuOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxoZWJyZXc6WyI1NzAwLTAxLTAxIiwiNTcwMS0wMS0wMSJdLGlzbGFtaWM6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLGp1bGlhbjpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0sbWF5YW46WyI1MjAwLTAxLTAxIiwiNTIwMS0wMS0wMSJdLG5hbmFrc2hhaGk6WyIwNTAwLTAxLTAxIiwiMDUwMS0wMS0wMSJdLG5lcGFsaTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl0scGVyc2lhbjpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0samFsYWxpOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSx0YWl3YW46WyIwMTAwLTAxLTAxIiwiMDEwMS0wMS0wMSJdLHRoYWk6WyIyNTAwLTAxLTAxIiwiMjUwMS0wMS0wMSJdLHVtbWFscXVyYTpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl19LHk9IiMjIixiPXtkOnswOiJkZCIsIi0iOiJkIn0sZTp7MDoiZCIsIi0iOiJkIn0sYTp7MDoiRCIsIi0iOiJEIn0sQTp7MDoiREQiLCItIjoiREQifSxqOnswOiJvbyIsIi0iOiJvIn0sVzp7MDoid3ciLCItIjoidyJ9LG06ezA6Im1tIiwiLSI6Im0ifSxiOnswOiJNIiwiLSI6Ik0ifSxCOnswOiJNTSIsIi0iOiJNTSJ9LHk6ezA6Inl5IiwiLSI6Inl5In0sWTp7MDoieXl5eSIsIi0iOiJ5eXl5In0sVTp5LHc6eSxjOnswOiJEIE0gZCAlWCB5eXl5IiwiLSI6IkQgTSBkICVYIHl5eXkifSx4OnswOiJtbS9kZC95eXl5IiwiLSI6Im1tL2RkL3l5eXkifX0seD17fSxfPXt4Y2FsZW5kYXI6YShvKCJ4IikpfSx3PWwuZXh0ZW5kRmxhdCh7fSxfLHt5Y2FsZW5kYXI6YShvKCJ5IikpfSksTT1sLmV4dGVuZEZsYXQoe30sdyx7emNhbGVuZGFyOmEobygieiIpKX0pLGs9YShbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGByYW5nZWAgYW5kIGB0aWNrMGAiLCJpZiB0aGlzIGlzIGEgZGF0ZSBheGlzLiBUaGlzIGRvZXMgbm90IHNldCB0aGUgY2FsZW5kYXIgZm9yIiwiaW50ZXJwcmV0aW5nIGRhdGEgb24gdGhpcyBheGlzLCB0aGF0J3Mgc3BlY2lmaWVkIGluIHRoZSB0cmFjZSIsIm9yIHZpYSB0aGUgZ2xvYmFsIGBsYXlvdXQuY2FsZW5kYXJgIl0uam9pbigiICIpKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY2FsZW5kYXJzIixzY2hlbWE6e3RyYWNlczp7c2NhdHRlcjp3LGJhcjp3LGhlYXRtYXA6dyxjb250b3VyOncsaGlzdG9ncmFtOncsaGlzdG9ncmFtMmQ6dyxoaXN0b2dyYW0yZGNvbnRvdXI6dyxzY2F0dGVyM2Q6TSxzdXJmYWNlOk0sbWVzaDNkOk0sc2NhdHRlcmdsOncsb2hsYzpfLGNhbmRsZXN0aWNrOl99LGxheW91dDp7Y2FsZW5kYXI6YShbIlNldHMgdGhlIGRlZmF1bHQgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgaW50ZXJwcmV0aW5nIGFuZCIsImRpc3BsYXlpbmcgZGF0ZXMgdGhyb3VnaG91dCB0aGUgcGxvdC4iXS5qb2luKCIgIikpLCJ4YXhpcy5jYWxlbmRhciI6aywieWF4aXMuY2FsZW5kYXIiOmssInNjZW5lLnhheGlzLmNhbGVuZGFyIjprLCJzY2VuZS55YXhpcy5jYWxlbmRhciI6aywic2NlbmUuemF4aXMuY2FsZW5kYXIiOmt9LHRyYW5zZm9ybXM6e2ZpbHRlcjp7dmFsdWVjYWxlbmRhcjphKFsiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHZhbHVlYCwgaWYgaXQgaXMgYSBkYXRlLiJdLmpvaW4oIiAiKSksdGFyZ2V0Y2FsZW5kYXI6YShbIlNldHMgdGhlIGNhbGVuZGFyIHN5c3RlbSB0byB1c2UgZm9yIGB0YXJnZXRgLCBpZiBpdCBpcyBhbiIsImFycmF5IG9mIGRhdGVzLiBJZiBgdGFyZ2V0YCBpcyBhIHN0cmluZyAoZWcgKngqKSB3ZSB1c2UgdGhlIiwiY29ycmVzcG9uZGluZyB0cmFjZSBhdHRyaWJ1dGUgKGVnIGB4Y2FsZW5kYXJgKSBpZiBpdCBleGlzdHMsIiwiZXZlbiBpZiBgdGFyZ2V0Y2FsZW5kYXJgIGlzIHByb3ZpZGVkLiJdLmpvaW4oIiAiKSl9fX0sbGF5b3V0QXR0cmlidXRlczpmLGhhbmRsZURlZmF1bHRzOmQsaGFuZGxlVHJhY2VEZWZhdWx0czpwLENBTk9OSUNBTF9TVU5EQVk6dixDQU5PTklDQUxfVElDSzptLERGTFRSQU5HRTpnLGdldENhbDppLHdvcmxkQ2FsRm10Om59fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjQsIi4vY2FsZW5kYXJzIjo1OTl9XSw2MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5kZWZhdWx0cz1bIiMxZjc3YjQiLCIjZmY3ZjBlIiwiIzJjYTAyYyIsIiNkNjI3MjgiLCIjOTQ2N2JkIiwiIzhjNTY0YiIsIiNlMzc3YzIiLCIjN2Y3ZjdmIiwiI2JjYmQyMiIsIiMxN2JlY2YiXSxyLmRlZmF1bHRMaW5lPSIjNDQ0IixyLmxpZ2h0TGluZT0iI2VlZSIsci5iYWNrZ3JvdW5kPSIjZmZmIixyLmJvcmRlckxpbmU9IiNCRUM4RDkiLHIubGlnaHRGcmFjdGlvbj0xZTMvMTF9LHt9XSw2MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZihhKHQpfHwic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC50cmltKCk7aWYoInJnYiIhPT1lLnN1YnN0cigwLDMpKXJldHVybiB0O3ZhciByPWUubWF0Y2goL15yZ2JhP1xzKlwoKFteKCldKilcKSQvKTtpZighcilyZXR1cm4gdDt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXHMqW1xzLF1ccyovKSxpPSJhIj09PWUuY2hhckF0KDMpJiY0PT09bi5sZW5ndGg7aWYoIWkmJjMhPT1uLmxlbmd0aClyZXR1cm4gdDtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7aWYoIW5bb10ubGVuZ3RoKXJldHVybiB0O2lmKG5bb109TnVtYmVyKG5bb10pLCEobltvXT49MCkpcmV0dXJuIHQ7aWYoMz09PW8pbltvXT4xJiYobltvXT0xKTtlbHNlIGlmKG5bb10+PTEpcmV0dXJuIHR9dmFyIHM9TWF0aC5yb3VuZCgyNTUqblswXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzFdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBpPyJyZ2JhKCIrcysiLCAiK25bM10rIikiOiJyZ2IoIitzKyIpIn12YXIgaT10KCJ0aW55Y29sb3IyIiksYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89ZS5leHBvcnRzPXt9LHM9dCgiLi9hdHRyaWJ1dGVzIik7by5kZWZhdWx0cz1zLmRlZmF1bHRzO3ZhciBsPW8uZGVmYXVsdExpbmU9cy5kZWZhdWx0TGluZTtvLmxpZ2h0TGluZT1zLmxpZ2h0TGluZTt2YXIgdT1vLmJhY2tncm91bmQ9cy5iYWNrZ3JvdW5kO28udGlueVJHQj1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmdiKCk7cmV0dXJuInJnYigiK01hdGgucm91bmQoZS5yKSsiLCAiK01hdGgucm91bmQoZS5nKSsiLCAiK01hdGgucm91bmQoZS5iKSsiKSJ9LG8ucmdiPWZ1bmN0aW9uKHQpe3JldHVybiBvLnRpbnlSR0IoaSh0KSl9LG8ub3BhY2l0eT1mdW5jdGlvbih0KXtyZXR1cm4gdD9pKHQpLmdldEFscGhhKCk6MH0sby5hZGRPcGFjaXR5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0KS50b1JnYigpO3JldHVybiJyZ2JhKCIrTWF0aC5yb3VuZChyLnIpKyIsICIrTWF0aC5yb3VuZChyLmcpKyIsICIrTWF0aC5yb3VuZChyLmIpKyIsICIrZSsiKSJ9LG8uY29tYmluZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodCkudG9SZ2IoKTtpZigxPT09ci5hKXJldHVybiBpKHQpLnRvUmdiU3RyaW5nKCk7dmFyIG49aShlfHx1KS50b1JnYigpLGE9MT09PW4uYT9uOntyOjI1NSooMS1uLmEpK24ucipuLmEsZzoyNTUqKDEtbi5hKStuLmcqbi5hLGI6MjU1KigxLW4uYSkrbi5iKm4uYX0sbz17cjphLnIqKDEtci5hKStyLnIqci5hLGc6YS5nKigxLXIuYSkrci5nKnIuYSxiOmEuYiooMS1yLmEpK3IuYipyLmF9O3JldHVybiBpKG8pLnRvUmdiU3RyaW5nKCl9LG8uY29udHJhc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkodCk7cmV0dXJuIDEhPT1uLmdldEFscGhhKCkmJihuPWkoby5jb21iaW5lKHQsdSkpKSwobi5pc0RhcmsoKT9lP24ubGlnaHRlbihlKTp1OnI/bi5kYXJrZW4ocik6bCkudG9TdHJpbmcoKX0sby5zdHJva2U9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKGUpO3Quc3R5bGUoe3N0cm9rZTpvLnRpbnlSR0IociksInN0cm9rZS1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5maWxsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlKTt0LnN0eWxlKHtmaWxsOm8udGlueVJHQihyKSwiZmlsbC1vcGFjaXR5IjpyLmdldEFscGhhKCl9KX0sby5jbGVhbj1mdW5jdGlvbih0KXtpZih0JiYib2JqZWN0Ij09dHlwZW9mIHQpe3ZhciBlLHIsaSxhLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylpZihpPXNbZV0sYT10W2ldLCJjb2xvciI9PT1pLnN1YnN0cihpLmxlbmd0aC01KSlpZihBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspYVtyXT1uKGFbcl0pO2Vsc2UgdFtpXT1uKGEpO2Vsc2UgaWYoImNvbG9yc2NhbGUiPT09aS5zdWJzdHIoaS5sZW5ndGgtMTApJiZBcnJheS5pc0FycmF5KGEpKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspQXJyYXkuaXNBcnJheShhW3JdKSYmKGFbcl1bMV09bihhW3JdWzFdKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXt2YXIgbD1hWzBdO2lmKCFBcnJheS5pc0FycmF5KGwpJiZsJiYib2JqZWN0Ij09dHlwZW9mIGwpZm9yKHI9MDtyPGEubGVuZ3RoO3IrKylvLmNsZWFuKGFbcl0pfWVsc2UgYSYmIm9iamVjdCI9PXR5cGVvZiBhJiZvLmNsZWFuKGEpfX19LHsiLi9hdHRyaWJ1dGVzIjo2MDEsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSw2MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyx0aWNrZm9udDpuLnRpY2tmb250LHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrcHJlZml4Om4udGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDpuLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6bi50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Om4uc2hvd3RpY2tzdWZmaXgsc2VwYXJhdGV0aG91c2FuZHM6bi5zZXBhcmF0ZXRob3VzYW5kcyxleHBvbmVudGZvcm1hdDpuLmV4cG9uZW50Zm9ybWF0LHNob3dleHBvbmVudDpuLnNob3dleHBvbmVudCx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJDbGljayB0byBlbnRlciBjb2xvcnNjYWxlIHRpdGxlIn0sdGl0bGVmb250OmEoe30saSx7fSksdGl0bGVzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OH1dLDYwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIG4uY29lcmNlKGMsdSxzLHQsZSl9dmFyIHU9ZS5jb2xvcmJhcj17fSxjPXQuY29sb3JiYXJ8fHt9O2woInRoaWNrbmVzcyIsImZyYWN0aW9uIj09PWwoInRoaWNrbmVzc21vZGUiKT8zMC8oci53aWR0aC1yLm1hcmdpbi5sLXIubWFyZ2luLnIpOjMwKSxsKCJsZW4iLCJmcmFjdGlvbiI9PT1sKCJsZW5tb2RlIik/MTpyLmhlaWdodC1yLm1hcmdpbi50LXIubWFyZ2luLmIpLGwoIngiKSxsKCJ4YW5jaG9yIiksbCgieHBhZCIpLGwoInkiKSxsKCJ5YW5jaG9yIiksbCgieXBhZCIpLG4ubm9uZU9yQWxsKGMsdSxbIngiLCJ5Il0pLGwoIm91dGxpbmVjb2xvciIpLGwoIm91dGxpbmV3aWR0aCIpLGwoImJvcmRlcmNvbG9yIiksbCgiYm9yZGVyd2lkdGgiKSxsKCJiZ2NvbG9yIiksaShjLHUsbCwibGluZWFyIiksbyhjLHUsbCwibGluZWFyIix7b3V0ZXJUaWNrczohMSxmb250OnIuZm9udCxub0hvdmVyOiEwfSksYShjLHUsbCwibGluZWFyIix7b3V0ZXJUaWNrczohMSxmb250OnIuZm9udCxub0hvdmVyOiEwfSksbCgidGl0bGUiKSxuLmNvZXJjZUZvbnQobCwidGl0bGVmb250IixyLmZvbnQpLGwoInRpdGxlc2lkZSIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc4MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6NzgzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6Nzg0LCIuL2F0dHJpYnV0ZXMiOjYwM31dLDYwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcGxvdGx5Iiksbz10KCIuLi8uLi9wbG90cy9wbG90cyIpLHM9dCgiLi4vLi4vcmVnaXN0cnkiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksdT10KCIuLi9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vbGliIiksaD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4uL2RyYXdpbmciKSxwPXQoIi4uL2NvbG9yIiksbT10KCIuLi90aXRsZXMiKSx2PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGc9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyx5PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksYj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLF89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe2Z1bmN0aW9uIF8odCxlKXtyZXR1cm4gYy5jb2VyY2UoZXQscnQseCx0LGUpfWZ1bmN0aW9uIGsoKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNLnRpdGxlc2lkZSkpe3ZhciBlPWx0LnNlbGVjdCgiLmNidGl0bGUiKSxyPWUuc2VsZWN0KCJ0ZXh0IiksYT1bLU0ub3V0bGluZXdpZHRoLzIsTS5vdXRsaW5ld2lkdGgvMl0sbz1lLnNlbGVjdCgiLmgiK3J0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxzPTE1LjY7aWYoci5ub2RlKCkmJihzPXBhcnNlSW50KHIuc3R5bGUoImZvbnQtc2l6ZSIpLDEwKSpnKSxvPyhjdD1kLmJCb3gobykuaGVpZ2h0KT5zJiYoYVsxXS09KGN0LXMpLzIpOnIubm9kZSgpJiYhci5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIpJiYoY3Q9ZC5iQm94KHIubm9kZSgpKS5oZWlnaHQpLGN0KXtpZihjdCs9NSwidG9wIj09PU0udGl0bGVzaWRlKXJ0LmRvbWFpblsxXS09Y3QvRS5oLGFbMV0qPS0xO2Vsc2V7cnQuZG9tYWluWzBdKz1jdC9FLmg7dmFyIHU9di5saW5lQ291bnQocik7YVsxXSs9KDEtdSkqc31lLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2ErIikiKSxydC5zZXRTY2FsZSgpfX1sdC5zZWxlY3RBbGwoIi5jYmZpbGxzLC5jYmxpbmVzLC5jYmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiK01hdGgucm91bmQoRS5oKigxLXJ0LmRvbWFpblsxXSkpKyIpIik7dmFyIGg9bHQuc2VsZWN0KCIuY2JmaWxscyIpLnNlbGVjdEFsbCgicmVjdC5jYmZpbGwiKS5kYXRhKEQpO2guZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJjYmZpbGwiLCEwKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaChmdW5jdGlvbih0LGUpe3ZhciByPVswPT09ZT96WzBdOihEW2VdK0RbZS0xXSkvMixlPT09RC5sZW5ndGgtMT96WzFdOihEW2VdK0RbZSsxXSkvMl0ubWFwKHJ0LmMycCkubWFwKE1hdGgucm91bmQpO2UhPT1ELmxlbmd0aC0xJiYoclsxXSs9clsxXT5yWzBdPzE6LTEpO3ZhciBhPU8odCkucmVwbGFjZSgiZS0iLCIiKSxvPWkoYSkudG9IZXhTdHJpbmcoKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHt4Okosd2lkdGg6TWF0aC5tYXgoSCwyKSx5Om4ubWluKHIpLGhlaWdodDpNYXRoLm1heChuLm1heChyKS1uLm1pbihyKSwyKSxmaWxsOm99KX0pO3ZhciBmPWx0LnNlbGVjdCgiLmNibGluZXMiKS5zZWxlY3RBbGwoInBhdGguY2JsaW5lIikuZGF0YShNLmxpbmUuY29sb3ImJk0ubGluZS53aWR0aD9JOltdKTtyZXR1cm4gZi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNibGluZSIsITApLGYuZXhpdCgpLnJlbW92ZSgpLGYuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrSisiLCIrKE1hdGgucm91bmQocnQuYzJwKHQpKStNLmxpbmUud2lkdGgvMiUxKSsiaCIrSCkuY2FsbChkLmxpbmVHcm91cFN0eWxlLE0ubGluZS53aWR0aCxQKHQpLE0ubGluZS5kYXNoKX0pLHJ0Ll9heGlzbGF5ZXIuc2VsZWN0QWxsKCJnLiIrcnQuX2lkKyJ0aWNrLHBhdGgiKS5yZW1vdmUoKSxydC5fcG9zPUorSCsoTS5vdXRsaW5ld2lkdGh8fDApLzItKCJvdXRzaWRlIj09PU0udGlja3M/MTowKSxydC5zaWRlPSJyaWdodCIsYy5zeW5jT3JBc3luYyhbZnVuY3Rpb24oKXtyZXR1cm4gbC5kb1RpY2tzKHQscnQsITApfSxmdW5jdGlvbigpe2lmKC0xPT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSl7dmFyIGU9cnQudGl0bGVmb250LnNpemUscj1ydC5fb2Zmc2V0K3J0Ll9sZW5ndGgvMixpPUUubCsocnQucG9zaXRpb258fDApKkUudysoInJpZ2h0Ij09PXJ0LnNpZGU/MTArZSoocnQuc2hvd3RpY2tsYWJlbHM/MTouNSk6LTEwLWUqKHJ0LnNob3d0aWNrbGFiZWxzPy41OjApKTtBKCJoIitydC5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcuIitydC5faWQrInRpY2siKSxzaWRlOk0udGl0bGVzaWRlLG9mZnNldExlZnQ6RS5sLG9mZnNldFRvcDpFLnQsbWF4U2hpZnQ6Uy53aWR0aH0sYXR0cmlidXRlczp7eDppLHk6ciwidGV4dC1hbmNob3IiOiJtaWRkbGUifSx0cmFuc2Zvcm06e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH19KX19XSl9ZnVuY3Rpb24gQShlLHIpe3ZhciBuLGk9dygpO249cy50cmFjZUlzKGksIm1hcmtlckNvbG9yc2NhbGUiKT8ibWFya2VyLmNvbG9yYmFyLnRpdGxlIjoiY29sb3JiYXIudGl0bGUiO3ZhciBhPXtwcm9wQ29udGFpbmVyOnJ0LHByb3BOYW1lOm4sdHJhY2VJbmRleDppLmluZGV4LGRmbHROYW1lOiJjb2xvcnNjYWxlIixjb250YWluZXJHcm91cDpsdC5zZWxlY3QoIi5jYnRpdGxlIil9LG89ImgiPT09ZS5jaGFyQXQoMCk/ZS5zdWJzdHIoMSk6ImgiK2U7bHQuc2VsZWN0QWxsKCIuIitvKyIsLiIrbysiLW1hdGgtZ3JvdXAiKS5yZW1vdmUoKSxtLmRyYXcodCxlLGgoYSxyfHx7fSkpfWZ1bmN0aW9uIFQoKXt2YXIgcj1IK00ub3V0bGluZXdpZHRoLzIrZC5iQm94KHJ0Ll9heGlzbGF5ZXIubm9kZSgpKS53aWR0aDtpZihCPXV0LnNlbGVjdCgidGV4dCIpLEIubm9kZSgpJiYhQi5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIpKXt2YXIgbixpPXV0LnNlbGVjdCgiLmgiK3J0Ll9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKTtuPWkmJi0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKT9kLmJCb3goaSkud2lkdGg6ZC5iQm94KHV0Lm5vZGUoKSkucmlnaHQtSi1FLmwscj1NYXRoLm1heChyLG4pfXZhciBhPTIqTS54cGFkK3IrTS5ib3JkZXJ3aWR0aCtNLm91dGxpbmV3aWR0aC8yLHM9JC10dDtsdC5zZWxlY3QoIi5jYmJnIikuYXR0cih7eDpKLU0ueHBhZC0oTS5ib3JkZXJ3aWR0aCtNLm91dGxpbmV3aWR0aCkvMix5OnR0LVcsd2lkdGg6TWF0aC5tYXgoYSwyKSxoZWlnaHQ6TWF0aC5tYXgocysyKlcsMil9KS5jYWxsKHAuZmlsbCxNLmJnY29sb3IpLmNhbGwocC5zdHJva2UsTS5ib3JkZXJjb2xvcikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOk0uYm9yZGVyd2lkdGh9KSxsdC5zZWxlY3RBbGwoIi5jYm91dGxpbmUiKS5hdHRyKHt4OkoseTp0dCtNLnlwYWQrKCJ0b3AiPT09TS50aXRsZXNpZGU/Y3Q6MCksd2lkdGg6TWF0aC5tYXgoSCwyKSxoZWlnaHQ6TWF0aC5tYXgocy0yKk0ueXBhZC1jdCwyKX0pLmNhbGwocC5zdHJva2UsTS5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJOb25lIiwic3Ryb2tlLXdpZHRoIjpNLm91dGxpbmV3aWR0aH0pO3ZhciBsPSh7Y2VudGVyOi41LHJpZ2h0OjF9W00ueGFuY2hvcl18fDApKmE7bHQuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKEUubC1sKSsiLCIrRS50KyIpIiksby5hdXRvTWFyZ2luKHQsZSx7eDpNLngseTpNLnksbDphKih7cmlnaHQ6MSxjZW50ZXI6LjV9W00ueGFuY2hvcl18fDApLHI6YSooe2xlZnQ6MSxjZW50ZXI6LjV9W00ueGFuY2hvcl18fDApLHQ6cyooe2JvdHRvbToxLG1pZGRsZTouNX1bTS55YW5jaG9yXXx8MCksYjpzKih7dG9wOjEsbWlkZGxlOi41fVtNLnlhbmNob3JdfHwwKX0pfXZhciBTPXQuX2Z1bGxMYXlvdXQsRT1TLl9zaXplO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBNLmZpbGxjb2xvciYmImZ1bmN0aW9uIiE9dHlwZW9mIE0ubGluZS5jb2xvcilyZXR1cm4gdm9pZCBTLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrZSkucmVtb3ZlKCk7dmFyIEwsQyx6PW4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgTS5maWxsY29sb3I/TS5maWxsY29sb3I6TS5saW5lLmNvbG9yKS5kb21haW4oKSksST1bXSxEPVtdLFA9ImZ1bmN0aW9uIj09dHlwZW9mIE0ubGluZS5jb2xvcj9NLmxpbmUuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gTS5saW5lLmNvbG9yfSxPPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmZpbGxjb2xvcj9NLmZpbGxjb2xvcjpmdW5jdGlvbigpe3JldHVybiBNLmZpbGxjb2xvcn0sUj1NLmxldmVscy5lbmQrTS5sZXZlbHMuc2l6ZS8xMDAsRj1NLmxldmVscy5zaXplLGo9MS4wMDEqelswXS0uMDAxKnpbMV0sTj0xLjAwMSp6WzFdLS4wMDEqelswXTtmb3IoQz0wO0M8MWU1JiYoTD1NLmxldmVscy5zdGFydCtDKkYsIShGPjA/TD49UjpMPD1SKSk7QysrKUw+aiYmTDxOJiZJLnB1c2goTCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIE0uZmlsbGNvbG9yKWlmKE0uZmlsbGxldmVscylmb3IoUj1NLmZpbGxsZXZlbHMuZW5kK00uZmlsbGxldmVscy5zaXplLzEwMCxGPU0uZmlsbGxldmVscy5zaXplLEM9MDtDPDFlNSYmKEw9TS5maWxsbGV2ZWxzLnN0YXJ0K0MqRiwhKEY+MD9MPj1SOkw8PVIpKTtDKyspTD56WzBdJiZMPHpbMV0mJkQucHVzaChMKTtlbHNlIEQ9SS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQtTS5sZXZlbHMuc2l6ZS8yfSksRC5wdXNoKERbRC5sZW5ndGgtMV0rTS5sZXZlbHMuc2l6ZSk7ZWxzZSBNLmZpbGxjb2xvciYmInN0cmluZyI9PXR5cGVvZiBNLmZpbGxjb2xvciYmKEQ9WzBdKTtNLmxldmVscy5zaXplPDAmJihJLnJldmVyc2UoKSxELnJldmVyc2UoKSk7dmFyIEIsVT1TLmhlaWdodC1TLm1hcmdpbi50LVMubWFyZ2luLmIsVj1TLndpZHRoLVMubWFyZ2luLmwtUy5tYXJnaW4ucixIPU1hdGgucm91bmQoTS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1NLnRoaWNrbmVzc21vZGU/VjoxKSkscT1IL0UudyxHPU1hdGgucm91bmQoTS5sZW4qKCJmcmFjdGlvbiI9PT1NLmxlbm1vZGU/VToxKSksWT1HL0UuaCxYPU0ueHBhZC9FLncsVz0oTS5ib3JkZXJ3aWR0aCtNLm91dGxpbmV3aWR0aCkvMixaPU0ueXBhZC9FLmgsSj1NYXRoLnJvdW5kKE0ueCpFLncrTS54cGFkKSxLPU0ueC1xKih7bWlkZGxlOi41LHJpZ2h0OjF9W00ueGFuY2hvcl18fDApLFE9TS55K1kqKCh7dG9wOi0uNSxib3R0b206LjV9W00ueWFuY2hvcl18fDApLS41KSwkPU1hdGgucm91bmQoRS5oKigxLVEpKSx0dD0kLUcsZXQ9e3R5cGU6ImxpbmVhciIscmFuZ2U6eix0aWNrbW9kZTpNLnRpY2ttb2RlLG50aWNrczpNLm50aWNrcyx0aWNrMDpNLnRpY2swLGR0aWNrOk0uZHRpY2ssdGlja3ZhbHM6TS50aWNrdmFscyx0aWNrdGV4dDpNLnRpY2t0ZXh0LHRpY2tzOk0udGlja3MsdGlja2xlbjpNLnRpY2tsZW4sdGlja3dpZHRoOk0udGlja3dpZHRoLHRpY2tjb2xvcjpNLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpNLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Ok0udGlja2ZvbnQsdGlja2FuZ2xlOk0udGlja2FuZ2xlLHRpY2tmb3JtYXQ6TS50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0Ok0uZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6TS5zZXBhcmF0ZXRob3VzYW5kcyxzaG93ZXhwb25lbnQ6TS5zaG93ZXhwb25lbnQsc2hvd3RpY2twcmVmaXg6TS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4Ok0udGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDpNLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6TS50aWNrc3VmZml4LHRpdGxlOk0udGl0bGUsdGl0bGVmb250Ok0udGl0bGVmb250LHNob3dsaW5lOiEwLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MX0scnQ9e3R5cGU6ImxpbmVhciIsX2lkOiJ5IitlfSxudD17bGV0dGVyOiJ5Iixmb250OlMuZm9udCxub0hvdmVyOiEwLGNhbGVuZGFyOlMuY2FsZW5kYXJ9O2lmKHkoZXQscnQsXyxudCxTKSxiKGV0LHJ0LF8sbnQpLHJ0LnBvc2l0aW9uPU0ueCtYK3Esci5heGlzPXJ0LC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSYmKHJ0LnRpdGxlc2lkZT1NLnRpdGxlc2lkZSxydC50aXRsZXg9TS54K1gscnQudGl0bGV5PVErKCJ0b3AiPT09TS50aXRsZXNpZGU/WS1aOlopKSxNLmxpbmUuY29sb3ImJiJhdXRvIj09PU0udGlja21vZGUpe3J0LnRpY2ttb2RlPSJsaW5lYXIiLHJ0LnRpY2swPU0ubGV2ZWxzLnN0YXJ0O3ZhciBpdD1NLmxldmVscy5zaXplLGF0PWMuY29uc3RyYWluKCgkLXR0KS81MCw0LDE1KSsxLG90PSh6WzFdLXpbMF0pLygoTS5udGlja3N8fGF0KSppdCk7aWYob3Q+MSl7dmFyIHN0PU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cob3QpL01hdGguTE4xMCkpO2l0Kj1zdCpjLnJvdW5kVXAob3Qvc3QsWzIsNSwxMF0pLChNYXRoLmFicyhNLmxldmVscy5zdGFydCkvTS5sZXZlbHMuc2l6ZSsxZS02KSUxPDJlLTYmJihydC50aWNrMD0wKX1ydC5kdGljaz1pdH1ydC5kb21haW49W1ErWixRK1ktWl0scnQuc2V0U2NhbGUoKTt2YXIgbHQ9Uy5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK2UpLmRhdGEoWzBdKTtsdC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZSwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiY2JiZyIsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2JmaWxscyIsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2JsaW5lcyIsITApLHQuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2JheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSx0LmFwcGVuZCgiZyIpLmNsYXNzZWQoImNidGl0bGV1bnNoaWZ0IiwhMCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2J0aXRsZSIsITApLHQuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiY2JvdXRsaW5lIiwhMCksdC5zZWxlY3QoIi5jYnRpdGxlIikuZGF0dW0oMCl9KSxsdC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitNYXRoLnJvdW5kKEUubCkrIiwiK01hdGgucm91bmQoRS50KSsiKSIpO3ZhciB1dD1sdC5zZWxlY3QoIi5jYnRpdGxldW5zaGlmdCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgtIitNYXRoLnJvdW5kKEUubCkrIiwtIitNYXRoLnJvdW5kKEUudCkrIikiKTtydC5fYXhpc2xheWVyPWx0LnNlbGVjdCgiLmNiYXhpcyIpO3ZhciBjdD0wO2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0udGl0bGVzaWRlKSl7dmFyIGh0LGZ0PUUubCsoTS54K1gpKkUudyxkdD1ydC50aXRsZWZvbnQuc2l6ZTtodD0idG9wIj09PU0udGl0bGVzaWRlPygxLShRK1ktWikpKkUuaCtFLnQrMysuNzUqZHQ6KDEtKFErWikpKkUuaCtFLnQtMy0uMjUqZHQsQShydC5faWQrInRpdGxlIix7YXR0cmlidXRlczp7eDpmdCx5Omh0LCJ0ZXh0LWFuY2hvciI6InN0YXJ0In19KX12YXIgcHQ9Yy5zeW5jT3JBc3luYyhbby5wcmV2aW91c1Byb21pc2VzLGssby5wcmV2aW91c1Byb21pc2VzLFRdLHQpO2lmKHB0JiZwdC50aGVuJiYodC5fcHJvbWlzZXN8fFtdKS5wdXNoKHB0KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24pe3ZhciBtdCx2dCxndDt1LmluaXQoe2VsZW1lbnQ6bHQubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7bXQ9bHQuYXR0cigidHJhbnNmb3JtIiksZihsdCl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe2x0LmF0dHIoInRyYW5zZm9ybSIsbXQrIiB0cmFuc2xhdGUoIit0KyIsIitlKyIpIiksdnQ9dS5hbGlnbihLK3QvRS53LHEsMCwxLE0ueGFuY2hvciksZ3Q9dS5hbGlnbihRLWUvRS5oLFksMCwxLE0ueWFuY2hvcik7dmFyIHI9dS5nZXRDdXJzb3IodnQsZ3QsTS54YW5jaG9yLE0ueWFuY2hvcik7ZihsdCxyKX0sZG9uZUZuOmZ1bmN0aW9uKGUpe2YobHQpLGUmJnZvaWQgMCE9PXZ0JiZ2b2lkIDAhPT1ndCYmYS5yZXN0eWxlKHQseyJjb2xvcmJhci54Ijp2dCwiY29sb3JiYXIueSI6Z3R9LHcoKS5pbmRleCl9fSl9cmV0dXJuIHB0fWZ1bmN0aW9uIHcoKXt2YXIgcixuLGk9ZS5zdWJzdHIoMik7Zm9yKHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspaWYobj10Ll9mdWxsRGF0YVtyXSxuLnVpZD09PWkpcmV0dXJuIG59dmFyIE09e307cmV0dXJuIE9iamVjdC5rZXlzKF8pLmZvckVhY2goZnVuY3Rpb24odCl7TVt0XT1udWxsfSksTS5maWxsY29sb3I9bnVsbCxNLmxpbmU9e2NvbG9yOm51bGwsd2lkdGg6bnVsbCxkYXNoOm51bGx9LE0ubGV2ZWxzPXtzdGFydDpudWxsLGVuZDpudWxsLHNpemU6bnVsbH0sTS5maWxsbGV2ZWxzPW51bGwsT2JqZWN0LmtleXMoTSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNW3RdPWMuaXNQbGFpbk9iamVjdChNW3RdKT9jLmV4dGVuZEZsYXQoTVt0XSxlKTplLHIpOk1bdF19fSksci5vcHRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiByW2VdJiZyW2VdKHRbZV0pfSkscn0sci5fb3B0cz1NLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY5OCwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vbGliL3NldGN1cnNvciI6NzM5LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdGx5Ijo3NTksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjc3OCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuLi90aXRsZXMiOjY5MSwiLi9hdHRyaWJ1dGVzIjo2MDMsZDM6MTIwLHRpbnljb2xvcjI6NTMyfV0sNjA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQuY29sb3JiYXIpfX0seyIuLi8uLi9saWIiOjcyNH1dLDYwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3phdXRvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx6bWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbH0sem1heDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGx9LGNvbG9yc2NhbGU6e3ZhbFR5cGU6ImNvbG9yc2NhbGUifSxhdXRvY29sb3JzY2FsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0scmV2ZXJzZXNjYWxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaG93c2NhbGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fX0se31dLDYwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vc2NhbGVzIiksYT10KCIuL2ZsaXBfc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbDtyPyhzPW4ubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKSxsPW4ubmVzdGVkUHJvcGVydHkodC5faW5wdXQscikuZ2V0KCkpOihzPXQsbD10Ll9pbnB1dCk7dmFyIHU9bysiYXV0byIsYz1vKyJtaW4iLGg9bysibWF4IixmPXNbdV0sZD1zW2NdLHA9c1toXSxtPXMuY29sb3JzY2FsZTshMT09PWYmJnZvaWQgMCE9PWR8fChkPW4uYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKSwhMT09PWYmJnZvaWQgMCE9PXB8fChwPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpKSxkPT09cCYmKGQtPS41LHArPS41KSxzW2NdPWQsc1toXT1wLGxbY109ZCxsW2hdPXAsbFt1XT0hMSE9PWZ8fHZvaWQgMD09PWQmJnZvaWQgMD09PXAscy5hdXRvY29sb3JzY2FsZSYmKG09ZCpwPDA/aS5SZEJ1OmQ+PTA/aS5SZWRzOmkuQmx1ZXMsbC5jb2xvcnNjYWxlPW0scy5yZXZlcnNlc2NhbGUmJihtPWEobSkpLHMuY29sb3JzY2FsZT1tKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vZmxpcF9zY2FsZSI6NjEzLCIuL3NjYWxlcyI6NjIwfV0sNjA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXA7dCgiLi9zY2FsZXMuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJue2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY29sb3JzY2FsZTppKHt9LG4uY29sb3JzY2FsZSx7fSksY2F1dG86aSh7fSxuLnphdXRvLHt9KSxjbWF4Omkoe30sbi56bWF4LHt9KSxjbWluOmkoe30sbi56bWluLHt9KSxhdXRvY29sb3JzY2FsZTppKHt9LG4uYXV0b2NvbG9yc2NhbGUse30pLHJldmVyc2VzY2FsZTppKHt9LG4ucmV2ZXJzZXNjYWxlLHt9KX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi9hdHRyaWJ1dGVzIjo2MDcsIi4vc2NhbGVzLmpzIjo2MjB9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKTtlLmV4cG9ydHM9bi5SZEJ1fSx7Ii4vc2NhbGVzIjo2MjB9XSw2MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz10KCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLHM9dCgiLi9pc192YWxpZF9zY2FsZSIpLGw9dCgiLi9mbGlwX3NjYWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUsYyl7dmFyIGg9Yy5wcmVmaXgsZj1jLmNMZXR0ZXIsZD1oLnNsaWNlKDAsaC5sZW5ndGgtMSkscD1oP2kubmVzdGVkUHJvcGVydHkodCxkKS5nZXQoKXx8e306dCxtPWg/aS5uZXN0ZWRQcm9wZXJ0eShlLGQpLmdldCgpfHx7fTplLHY9cFtmKyJtaW4iXSxnPXBbZisibWF4Il0seT1wLmNvbG9yc2NhbGU7dShoK2YrImF1dG8iLCEobih2KSYmbihnKSYmdjxnKSksdShoK2YrIm1pbiIpLHUoaCtmKyJtYXgiKTt2YXIgYjt2b2lkIDAhPT15JiYoYj0hcyh5KSksdShoKyJhdXRvY29sb3JzY2FsZSIsYik7dmFyIHg9dShoKyJjb2xvcnNjYWxlIik7aWYodShoKyJyZXZlcnNlc2NhbGUiKSYmKG0uY29sb3JzY2FsZT1sKHgpKSwibWFya2VyLmxpbmUuIiE9PWgpe3ZhciBfO2gmJihfPWEocCkpLHUoaCsic2hvd3NjYWxlIixfKSYmbyhwLG0scil9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vY29sb3JiYXIvZGVmYXVsdHMiOjYwNCwiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIjo2MDYsIi4vZmxpcF9zY2FsZSI6NjEzLCIuL2lzX3ZhbGlkX3NjYWxlIjo2MTcsImZhc3QtaXNudW1lcmljIjoxMjl9XSw2MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC5sZW5ndGgsaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksbz0wO288bjtvKyspe3ZhciBzPXRbb107aVtvXT1lK3NbMF0qKHItZSksYVtvXT1zWzFdfXJldHVybntkb21haW46aSxyYW5nZTphfX19LHt9XSw2MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9ci0xLGE9MDtpPj0wO2ktLSxhKyspZT10W2ldLG5bYV09WzEtZVswXSxlWzFdXTtyZXR1cm4gbn19LHt9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKSxpPXQoIi4vZGVmYXVsdF9zY2FsZSIpLGE9dCgiLi9pc192YWxpZF9zY2FsZV9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0cnl7dD1uW3RdfHxKU09OLnBhcnNlKHQpfWNhdGNoKHIpe3Q9ZX19cmV0dXJuIGV8fChlPWkpLHQ/KCJzdHJpbmciPT10eXBlb2YgdCYmKHIoKSwic3RyaW5nIj09dHlwZW9mIHQmJnIoKSksYSh0KT90OmUpOmV9fSx7Ii4vZGVmYXVsdF9zY2FsZSI6NjEwLCIuL2lzX3ZhbGlkX3NjYWxlX2FycmF5Ijo2MTgsIi4vc2NhbGVzIjo2MjB9XSw2MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9pc192YWxpZF9zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU/aS5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHx7fTp0LG89ci5jb2xvcixzPSExO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKHZhciBsPTA7bDxvLmxlbmd0aDtsKyspaWYobihvW2xdKSl7cz0hMDticmVha31yZXR1cm4gaS5pc1BsYWluT2JqZWN0KHIpJiYoc3x8ITA9PT1yLnNob3dzY2FsZXx8bihyLmNtaW4pJiZuKHIuY21heCl8fGEoci5jb2xvcnNjYWxlKXx8aS5pc1BsYWluT2JqZWN0KHIuY29sb3JiYXIpKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vaXNfdmFsaWRfc2NhbGUiOjYxNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDYxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNjYWxlcz10KCIuL3NjYWxlcyIpLHIuZGVmYXVsdFNjYWxlPXQoIi4vZGVmYXVsdF9zY2FsZSIpLHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmhhbmRsZURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxyLmNhbGM9dCgiLi9jYWxjIiksci5oYXNDb2xvcnNjYWxlPXQoIi4vaGFzX2NvbG9yc2NhbGUiKSxyLmlzVmFsaWRTY2FsZT10KCIuL2lzX3ZhbGlkX3NjYWxlIiksci5nZXRTY2FsZT10KCIuL2dldF9zY2FsZSIpLHIuZmxpcFNjYWxlPXQoIi4vZmxpcF9zY2FsZSIpLHIuZXh0cmFjdFNjYWxlPXQoIi4vZXh0cmFjdF9zY2FsZSIpLHIubWFrZUNvbG9yU2NhbGVGdW5jPXQoIi4vbWFrZV9jb2xvcl9zY2FsZV9mdW5jIil9LHsiLi9hdHRyaWJ1dGVzIjo2MDcsIi4vY2FsYyI6NjA4LCIuL2RlZmF1bHRfc2NhbGUiOjYxMCwiLi9kZWZhdWx0cyI6NjExLCIuL2V4dHJhY3Rfc2NhbGUiOjYxMiwiLi9mbGlwX3NjYWxlIjo2MTMsIi4vZ2V0X3NjYWxlIjo2MTQsIi4vaGFzX2NvbG9yc2NhbGUiOjYxNSwiLi9pc192YWxpZF9zY2FsZSI6NjE3LCIuL21ha2VfY29sb3Jfc2NhbGVfZnVuYyI6NjE5LCIuL3NjYWxlcyI6NjIwfV0sNjE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2NhbGVzIiksaT10KCIuL2lzX3ZhbGlkX3NjYWxlX2FycmF5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1uW3RdfHxpKHQpfX0seyIuL2lzX3ZhbGlkX3NjYWxlX2FycmF5Ijo2MTgsIi4vc2NhbGVzIjo2MjB9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl07aWYoMiE9PWkubGVuZ3RofHwraVswXTxlfHwhbihpWzFdKS5pc1ZhbGlkKCkpcmV0dXJuITE7ZT0raVswXX1yZXR1cm4hMH19LHt0aW55Y29sb3IyOjUzMn1dLDYxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXtyOnRbMF0sZzp0WzFdLGI6dFsyXSxhOnRbM119O3JldHVybiBhKGUpLnRvUmdiU3RyaW5nKCl9dmFyIGk9dCgiZDMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoImZhc3QtaXNudW1lcmljIikscz10KCIuLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8e307Zm9yKHZhciByPXQuZG9tYWluLGw9dC5yYW5nZSx1PWwubGVuZ3RoLGM9bmV3IEFycmF5KHUpLGg9MDtoPHU7aCsrKXt2YXIgZj1hKGxbaF0pLnRvUmdiKCk7Y1toXT1bZi5yLGYuZyxmLmIsZi5hXX12YXIgZCxwPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKHIpLnJhbmdlKGMpLmNsYW1wKCEwKSxtPWUubm9OdW1lcmljQ2hlY2ssdj1lLnJldHVybkFycmF5O3JldHVybiBkPW0mJnY/cDptP2Z1bmN0aW9uKHQpe3JldHVybiBuKHAodCkpfTp2P2Z1bmN0aW9uKHQpe3JldHVybiBvKHQpP3AodCk6YSh0KS5pc1ZhbGlkKCk/dDpzLmRlZmF1bHRMaW5lfTpmdW5jdGlvbih0KXtyZXR1cm4gbyh0KT9uKHAodCkpOmEodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX0sZC5kb21haW49cC5kb21haW4sZC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBsfSxkfX0seyIuLi9jb2xvciI6NjAyLGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOSx0aW55Y29sb3IyOjUzMn1dLDYyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0dyZXlzOltbMCwicmdiKDAsMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLFlsR25CdTpbWzAsInJnYig4LDI5LDg4KSJdLFsuMTI1LCJyZ2IoMzcsNTIsMTQ4KSJdLFsuMjUsInJnYigzNCw5NCwxNjgpIl0sWy4zNzUsInJnYigyOSwxNDUsMTkyKSJdLFsuNSwicmdiKDY1LDE4MiwxOTYpIl0sWy42MjUsInJnYigxMjcsMjA1LDE4NykiXSxbLjc1LCJyZ2IoMTk5LDIzMywxODApIl0sWy44NzUsInJnYigyMzcsMjQ4LDIxNykiXSxbMSwicmdiKDI1NSwyNTUsMjE3KSJdXSxHcmVlbnM6W1swLCJyZ2IoMCw2OCwyNykiXSxbLjEyNSwicmdiKDAsMTA5LDQ0KSJdLFsuMjUsInJnYigzNSwxMzksNjkpIl0sWy4zNzUsInJnYig2NSwxNzEsOTMpIl0sWy41LCJyZ2IoMTE2LDE5NiwxMTgpIl0sWy42MjUsInJnYigxNjEsMjE3LDE1NSkiXSxbLjc1LCJyZ2IoMTk5LDIzMywxOTIpIl0sWy44NzUsInJnYigyMjksMjQ1LDIyNCkiXSxbMSwicmdiKDI0NywyNTIsMjQ1KSJdXSxZbE9yUmQ6W1swLCJyZ2IoMTI4LDAsMzgpIl0sWy4xMjUsInJnYigxODksMCwzOCkiXSxbLjI1LCJyZ2IoMjI3LDI2LDI4KSJdLFsuMzc1LCJyZ2IoMjUyLDc4LDQyKSJdLFsuNSwicmdiKDI1MywxNDEsNjApIl0sWy42MjUsInJnYigyNTQsMTc4LDc2KSJdLFsuNzUsInJnYigyNTQsMjE3LDExOCkiXSxbLjg3NSwicmdiKDI1NSwyMzcsMTYwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyMDQpIl1dLEJsdWVyZWQ6W1swLCJyZ2IoMCwwLDI1NSkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJkQnU6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDEwNiwxMzcsMjQ3KSJdLFsuNSwicmdiKDE5MCwxOTAsMTkwKSJdLFsuNiwicmdiKDIyMCwxNzAsMTMyKSJdLFsuNywicmdiKDIzMCwxNDUsOTApIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLFJlZHM6W1swLCJyZ2IoMjIwLDIyMCwyMjApIl0sWy4yLCJyZ2IoMjQ1LDE5NSwxNTcpIl0sWy40LCJyZ2IoMjQ1LDE2MCwxMDUpIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLEJsdWVzOltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYig0MCw2MCwxOTApIl0sWy41LCJyZ2IoNzAsMTAwLDI0NSkiXSxbLjYsInJnYig5MCwxMjAsMjQ1KSJdLFsuNywicmdiKDEwNiwxMzcsMjQ3KSJdLFsxLCJyZ2IoMjIwLDIyMCwyMjApIl1dLFBpY25pYzpbWzAsInJnYigwLDAsMjU1KSJdLFsuMSwicmdiKDUxLDE1MywyNTUpIl0sWy4yLCJyZ2IoMTAyLDIwNCwyNTUpIl0sWy4zLCJyZ2IoMTUzLDIwNCwyNTUpIl0sWy40LCJyZ2IoMjA0LDIwNCwyNTUpIl0sWy41LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWy42LCJyZ2IoMjU1LDIwNCwyNTUpIl0sWy43LCJyZ2IoMjU1LDE1MywyNTUpIl0sWy44LCJyZ2IoMjU1LDEwMiwyMDQpIl0sWy45LCJyZ2IoMjU1LDEwMiwxMDIpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSYWluYm93OltbMCwicmdiKDE1MCwwLDkwKSJdLFsuMTI1LCJyZ2IoMCwwLDIwMCkiXSxbLjI1LCJyZ2IoMCwyNSwyNTUpIl0sWy4zNzUsInJnYigwLDE1MiwyNTUpIl0sWy41LCJyZ2IoNDQsMjU1LDE1MCkiXSxbLjYyNSwicmdiKDE1MSwyNTUsMCkiXSxbLjc1LCJyZ2IoMjU1LDIzNCwwKSJdLFsuODc1LCJyZ2IoMjU1LDExMSwwKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUG9ydGxhbmQ6W1swLCJyZ2IoMTIsNTEsMTMxKSJdLFsuMjUsInJnYigxMCwxMzYsMTg2KSJdLFsuNSwicmdiKDI0MiwyMTEsNTYpIl0sWy43NSwicmdiKDI0MiwxNDMsNTYpIl0sWzEsInJnYigyMTcsMzAsMzApIl1dLEpldDpbWzAsInJnYigwLDAsMTMxKSJdLFsuMTI1LCJyZ2IoMCw2MCwxNzApIl0sWy4zNzUsInJnYig1LDI1NSwyNTUpIl0sWy42MjUsInJnYigyNTUsMjU1LDApIl0sWy44NzUsInJnYigyNTAsMCwwKSJdLFsxLCJyZ2IoMTI4LDAsMCkiXV0sSG90OltbMCwicmdiKDAsMCwwKSJdLFsuMywicmdiKDIzMCwwLDApIl0sWy42LCJyZ2IoMjU1LDIxMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEJsYWNrYm9keTpbWzAsInJnYigwLDAsMCkiXSxbLjIsInJnYigyMzAsMCwwKSJdLFsuNCwicmdiKDIzMCwyMTAsMCkiXSxbLjcsInJnYigyNTUsMjU1LDI1NSkiXSxbMSwicmdiKDE2MCwyMDAsMjU1KSJdXSxFYXJ0aDpbWzAsInJnYigwLDAsMTMwKSJdLFsuMSwicmdiKDAsMTgwLDE4MCkiXSxbLjIsInJnYig0MCwyMTAsNDApIl0sWy40LCJyZ2IoMjMwLDIzMCw1MCkiXSxbLjYsInJnYigxMjAsNzAsMjApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sRWxlY3RyaWM6W1swLCJyZ2IoMCwwLDApIl0sWy4xNSwicmdiKDMwLDAsMTAwKSJdLFsuNCwicmdiKDEyMCwwLDEwMCkiXSxbLjYsInJnYigxNjAsOTAsMCkiXSxbLjgsInJnYigyMzAsMjAwLDApIl0sWzEsInJnYigyNTUsMjUwLDIyMCkiXV0sVmlyaWRpczpbWzAsIiM0NDAxNTQiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LCIjNDgxODZhIl0sWy4xMjU0OTAxOTYwNzg0MzEzNywiIzQ3MmQ3YiJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsIiM0MjQwODYiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LCIjM2I1MjhiIl0sWy4zMTM3MjU0OTAxOTYwNzg0LCIjMzM2MzhkIl0sWy4zNzY0NzA1ODgyMzUyOTQxLCIjMmM3MjhlIl0sWy40MzkyMTU2ODYyNzQ1MDk4LCIjMjY4MjhlIl0sWy41MDE5NjA3ODQzMTM3MjU1LCIjMjE5MThjIl0sWy41NjQ3MDU4ODIzNTI5NDEyLCIjMWZhMDg4Il0sWy42Mjc0NTA5ODAzOTIxNTY5LCIjMjhhZTgwIl0sWy42OTAxOTYwNzg0MzEzNzI1LCIjM2ZiYzczIl0sWy43NTI5NDExNzY0NzA1ODgyLCIjNWVjOTYyIl0sWy44MTU2ODYyNzQ1MDk4MDM5LCIjODRkNDRiIl0sWy44Nzg0MzEzNzI1NDkwMTk2LCIjYWRkYzMwIl0sWy45NDExNzY0NzA1ODgyMzUzLCIjZDhlMjE5Il0sWzEsIiNmZGU3MjUiXV19fSx7fV0sNjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSh0LXIpLyhuLXIpLG89YStlLyhuLXIpLHM9KGErbykvMjtyZXR1cm4ibGVmdCI9PT1pfHwiYm90dG9tIj09PWk/YToiY2VudGVyIj09PWl8fCJtaWRkbGUiPT09aT9zOiJyaWdodCI9PT1pfHwidG9wIj09PWk/bzphPDIvMy1zP2E6bz40LzMtcz9vOnN9fSx7fV0sNjIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9W1sic3ctcmVzaXplIiwicy1yZXNpemUiLCJzZS1yZXNpemUiXSxbInctcmVzaXplIiwibW92ZSIsImUtcmVzaXplIl0sWyJudy1yZXNpemUiLCJuLXJlc2l6ZSIsIm5lLXJlc2l6ZSJdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIHQ9ImxlZnQiPT09cj8wOiJjZW50ZXIiPT09cj8xOiJyaWdodCI9PT1yPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKnQpLDAsMiksZT0iYm90dG9tIj09PWE/MDoibWlkZGxlIj09PWE/MToidG9wIj09PWE/MjpuLmNvbnN0cmFpbihNYXRoLmZsb29yKDMqZSksMCwyKSxpW2VdW3RdfX0seyIuLi8uLi9saWIiOjcyNH1dLDYyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC5jbGFzc05hbWU9ImRyYWdjb3ZlciI7dmFyIGU9dC5zdHlsZTtyZXR1cm4gZS5wb3NpdGlvbj0iZml4ZWQiLGUubGVmdD0wLGUucmlnaHQ9MCxlLnRvcD0wLGUuYm90dG9tPTAsZS56SW5kZXg9OTk5OTk5OTk5LGUuYmFja2dyb3VuZD0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fWZ1bmN0aW9uIGkodCl7dC5fZHJhZ2dpbmc9ITEsdC5fcmVwbG90UGVuZGluZyYmbC5wbG90KHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG8odC5jaGFuZ2VkVG91Y2hlcz90LmNoYW5nZWRUb3VjaGVzWzBdOnQsZG9jdW1lbnQuYm9keSl9dmFyIG89dCgibW91c2UtZXZlbnQtb2Zmc2V0Iikscz10KCJoYXMtaG92ZXIiKSxsPXQoIi4uLy4uL3Bsb3RseSIpLHU9dCgiLi4vLi4vbGliIiksYz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksZj1lLmV4cG9ydHM9e307Zi5hbGlnbj10KCIuL2FsaWduIiksZi5nZXRDdXJzb3I9dCgiLi9jdXJzb3IiKTt2YXIgZD10KCIuL3VuaG92ZXIiKTtmLnVuaG92ZXI9ZC53cmFwcGVkLGYudW5ob3ZlclJhdz1kLnJhdyxmLmluaXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt5Ll9kcmFnZ2VkPSExLHkuX2RyYWdnaW5nPSEwO3ZhciBpPWEoZSk7cmV0dXJuIGw9aVswXSxkPWlbMV0sZz1lLnRhcmdldCxwPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHAteS5fbW91c2VEb3duVGltZTx4P2IrPTE6KGI9MSx5Ll9tb3VzZURvd25UaW1lPXApLHQucHJlcEZuJiZ0LnByZXBGbihlLGwsZCkscz8odj1uKCksdi5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUodC5lbGVtZW50KS5jdXJzb3IpOih2PWRvY3VtZW50LG09d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jdXJzb3IsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0LmVsZW1lbnQpLmN1cnNvciksdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHIpLHYuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsbyksdi5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsbyksdi5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHIpLHYuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLG8pLHUucGF1c2VFdmVudChlKX1mdW5jdGlvbiByKGUpewp2YXIgcj1hKGUpLG49clswXS1sLGk9clsxXS1kLG89dC5taW5EcmFnfHxjLk1JTkRSQUc7cmV0dXJuIE1hdGguYWJzKG4pPG8mJihuPTApLE1hdGguYWJzKGkpPG8mJihpPTApLChufHxpKSYmKHkuX2RyYWdnZWQ9ITAsZi51bmhvdmVyKHkpKSx0Lm1vdmVGbiYmdC5tb3ZlRm4obixpLHkuX2RyYWdnZWQpLHUucGF1c2VFdmVudChlKX1mdW5jdGlvbiBvKGUpe2lmKHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixyKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG8pLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLG8pLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixyKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIixvKSxzP3UucmVtb3ZlRWxlbWVudCh2KTptJiYodi5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yPW0sbT1udWxsKSwheS5fZHJhZ2dpbmcpcmV0dXJuIHZvaWQoeS5fZHJhZ2dlZD0hMSk7aWYoeS5fZHJhZ2dpbmc9ITEsKG5ldyBEYXRlKS5nZXRUaW1lKCkteS5fbW91c2VEb3duVGltZT54JiYoYj1NYXRoLm1heChiLTEsMSkpLHQuZG9uZUZuJiZ0LmRvbmVGbih5Ll9kcmFnZ2VkLGIsZSksIXkuX2RyYWdnZWQpe3ZhciBuO3RyeXtuPW5ldyBNb3VzZUV2ZW50KCJjbGljayIsZSl9Y2F0Y2godCl7dmFyIGw9YShlKTtuPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLG4uaW5pdE1vdXNlRXZlbnQoImNsaWNrIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLGxbMF0sbFsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1nLmRpc3BhdGNoRXZlbnQobil9cmV0dXJuIGkoeSkseS5fZHJhZ2dlZD0hMSx1LnBhdXNlRXZlbnQoZSl9dmFyIGwsZCxwLG0sdixnLHk9dC5nZCxiPTEseD1oLkRCTENMSUNLREVMQVk7eS5fbW91c2VEb3duVGltZXx8KHkuX21vdXNlRG93blRpbWU9MCksdC5lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9ImFsbCIsdC5lbGVtZW50Lm9ubW91c2Vkb3duPWUsdC5lbGVtZW50Lm9udG91Y2hzdGFydD1lfSxmLmNvdmVyU2xpcD1ufSx7Ii4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RseSI6NzU5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NjksIi4vYWxpZ24iOjYyMSwiLi9jdXJzb3IiOjYyMiwiLi91bmhvdmVyIjo2MjQsImhhcy1ob3ZlciI6Mjg2LCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ1MX1dLDYyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXZlbnRzIiksaT1lLmV4cG9ydHM9e307aS53cmFwcGVkPWZ1bmN0aW9uKHQsZSxyKXsic3RyaW5nIj09dHlwZW9mIHQmJih0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSx0Ll9ob3ZlclRpbWVyJiYoY2xlYXJUaW1lb3V0KHQuX2hvdmVyVGltZXIpLHQuX2hvdmVyVGltZXI9dm9pZCAwKSxpLnJhdyh0LGUscil9LGkucmF3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxpPXQuX2hvdmVyZGF0YTtlfHwoZT17fSksZS50YXJnZXQmJiExPT09bi50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpfHwoci5faG92ZXJsYXllci5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJjaXJjbGUiKS5yZW1vdmUoKSx0Ll9ob3ZlcmRhdGE9dm9pZCAwLGUudGFyZ2V0JiZpJiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aX0pKX19LHsiLi4vLi4vbGliL2V2ZW50cyI6NzE0fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGFzaD17dmFsVHlwZToic3RyaW5nIix2YWx1ZXM6WyJzb2xpZCIsImRvdCIsImRhc2giLCJsb25nZGFzaCIsImRhc2hkb3QiLCJsb25nZGFzaGRvdCJdLGRmbHQ6InNvbGlkIn19LHt9XSw2MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMpe2lmKHUudHJhY2VJcyhyLCJzeW1ib2xzIikpe3ZhciBsPXkocik7ZS5hdHRyKCJkIixmdW5jdGlvbih0KXt2YXIgZTtlPSJ2YXJpb3VzIj09PXQubXN8fCJ2YXJpb3VzIj09PWEuc2l6ZT8zOmcuaXNCdWJibGUocik/bCh0Lm1zKTooYS5zaXplfHw2KS8yLHQubXJjPWU7dmFyIG49Yi5zeW1ib2xOdW1iZXIodC5teHx8YS5zeW1ib2wpfHwwLGk9biUxMDA7cmV0dXJuIHQub209biUyMDA+PTEwMCxiLnN5bWJvbEZ1bmNzW2ldKGUpKyhuPj0yMDA/dzoiIil9KS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuKHQubW8rMXx8YS5vcGFjaXR5KzEpLTF9KX12YXIgaCxmLGQscD0hMTtpZih0LnNvPyhkPW8ub3V0bGllcndpZHRoLGY9by5vdXRsaWVyY29sb3IsaD1hLm91dGxpZXJjb2xvcik6KGQ9KHQubWx3KzF8fG8ud2lkdGgrMXx8KHQudHJhY2U/dC50cmFjZS5tYXJrZXIubGluZS53aWR0aDowKSsxKS0xLGY9Im1sYyJpbiB0P3QubWxjYz1pKHQubWxjKTpBcnJheS5pc0FycmF5KG8uY29sb3IpP2MuZGVmYXVsdExpbmU6by5jb2xvcixBcnJheS5pc0FycmF5KGEuY29sb3IpJiYoaD1jLmRlZmF1bHRMaW5lLHA9ITApLGg9Im1jImluIHQ/dC5tY2M9bih0Lm1jKTphLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIpLHQub20pZS5jYWxsKGMuc3Ryb2tlLGgpLnN0eWxlKHsic3Ryb2tlLXdpZHRoIjooZHx8MSkrInB4IixmaWxsOiJub25lIn0pO2Vsc2V7ZS5zdHlsZSgic3Ryb2tlLXdpZHRoIixkKyJweCIpO3ZhciBtPWEuZ3JhZGllbnQsdj10Lm1ndDtpZih2P3A9ITA6dj1tJiZtLnR5cGUsdiYmIm5vbmUiIT09dil7dmFyIHg9dC5tZ2M7eD9wPSEwOng9bS5jb2xvcjt2YXIgXz0iZyIrcy5fZnVsbExheW91dC5fdWlkKyItIityLnVpZDtwJiYoXys9Ii0iK3QuaSksZS5jYWxsKGIuZ3JhZGllbnQscyxfLHYsaCx4KX1lbHNlIGUuY2FsbChjLmZpbGwsaCk7ZCYmZS5jYWxsKGMuc3Ryb2tlLGYpfX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPXRbMF0tZVswXSxhPXRbMV0tZVsxXSxzPXJbMF0tZVswXSxsPXJbMV0tZVsxXSx1PU1hdGgucG93KGkqaSthKmEsVC8yKSxjPU1hdGgucG93KHMqcytsKmwsVC8yKSxoPShjKmMqaS11KnUqcykqbixmPShjKmMqYS11KnUqbCkqbixkPTMqYyoodStjKSxwPTMqdSoodStjKTtyZXR1cm5bW28ucm91bmQoZVswXSsoZCYmaC9kKSwyKSxvLnJvdW5kKGVbMV0rKGQmJmYvZCksMildLFtvLnJvdW5kKGVbMF0tKHAmJmgvcCksMiksby5yb3VuZChlWzFdLShwJiZmL3ApLDIpXV19ZnVuY3Rpb24gYSh0KXt2YXIgZT10LmdldEF0dHJpYnV0ZSgiZGF0YS11bmZvcm1hdHRlZCIpO2lmKG51bGwhPT1lKXJldHVybiBlK3QuZ2V0QXR0cmlidXRlKCJkYXRhLW1hdGgiKSt0LmdldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiKSt0LmdldEF0dHJpYnV0ZSgic3R5bGUiKX12YXIgbz10KCJkMyIpLHM9dCgiZmFzdC1pc251bWVyaWMiKSxsPXQoInRpbnljb2xvcjIiKSx1PXQoIi4uLy4uL3JlZ2lzdHJ5IiksYz10KCIuLi9jb2xvciIpLGg9dCgiLi4vY29sb3JzY2FsZSIpLGY9dCgiLi4vLi4vbGliIiksZD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxwPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Iiksdj1tLkxJTkVfU1BBQ0lORyxnPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIikseT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxiPWUuZXhwb3J0cz17fTtiLmZvbnQ9ZnVuY3Rpb24odCxlLHIsbil7Zi5pc1BsYWluT2JqZWN0KGUpJiYobj1lLmNvbG9yLHI9ZS5zaXplLGU9ZS5mYW1pbHkpLGUmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlKSxyKzEmJnQuc3R5bGUoImZvbnQtc2l6ZSIscisicHgiKSxuJiZ0LmNhbGwoYy5maWxsLG4pfSxiLnNldFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIngiLGUpLmF0dHIoInkiLHIpfSxiLnNldFNpemU9ZnVuY3Rpb24odCxlLHIpe3QuYXR0cigid2lkdGgiLGUpLmF0dHIoImhlaWdodCIscil9LGIuc2V0UmVjdD1mdW5jdGlvbih0LGUscixuLGkpe3QuY2FsbChiLnNldFBvc2l0aW9uLGUscikuY2FsbChiLnNldFNpemUsbixpKX0sYi50cmFuc2xhdGVQb2ludD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yLmMycCh0LngpLGE9bi5jMnAodC55KTtyZXR1cm4hIShzKGkpJiZzKGEpJiZlLm5vZGUoKSkmJigidGV4dCI9PT1lLm5vZGUoKS5ub2RlTmFtZT9lLmF0dHIoIngiLGkpLmF0dHIoInkiLGEpOmUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrYSsiKSIpLCEwKX0sYi50cmFuc2xhdGVQb2ludHM9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKTtiLnRyYW5zbGF0ZVBvaW50KHQsbixlLHIpfSl9LGIuaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe2UuYXR0cigiZGlzcGxheSIsci5pc1B0V2l0aGluUmFuZ2UodCkmJm4uaXNQdFdpdGhpblJhbmdlKHQpP251bGw6Im5vbmUiKX0sYi5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoZS5faGFzQ2xpcE9uQXhpc0ZhbHNlKXt2YXIgcj1lLnhheGlzLG49ZS55YXhpczt0LmVhY2goZnVuY3Rpb24odCl7Yi5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxvLnNlbGVjdCh0aGlzKSxyLG4pfSl9fSxiLmdldFB4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE51bWJlcih0LnN0eWxlKGUpLnJlcGxhY2UoL3B4JC8sIiIpKX0sYi5jcmlzcFJvdW5kPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcyhlKT90Ll9jb250ZXh0LnN0YXRpY1Bsb3Q/ZTplPDE/MTpNYXRoLnJvdW5kKGUpOnJ8fDB9LGIuc2luZ2xlTGluZVN0eWxlPWZ1bmN0aW9uKHQsZSxyLG4saSl7ZS5zdHlsZSgiZmlsbCIsIm5vbmUiKTt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89cnx8YS53aWR0aHx8MCxzPWl8fGEuZGFzaHx8IiI7Yy5zdHJva2UoZSxufHxhLmNvbG9yKSxiLmRhc2hMaW5lKGUscyxvKX0sYi5saW5lR3JvdXBTdHlsZT1mdW5jdGlvbih0LGUscixuKXt0LnN0eWxlKCJmaWxsIiwibm9uZSIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGk9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxhPWV8fGkud2lkdGh8fDAscz1ufHxpLmRhc2h8fCIiO28uc2VsZWN0KHRoaXMpLmNhbGwoYy5zdHJva2Uscnx8aS5jb2xvcikuY2FsbChiLmRhc2hMaW5lLHMsYSl9KX0sYi5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPWIuZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7InN0cm9rZS1kYXNoYXJyYXkiOmUsInN0cm9rZS13aWR0aCI6cisicHgifSl9LGIuZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVybiJzb2xpZCI9PT10P3Q9IiI6ImRvdCI9PT10P3Q9cisicHgsIityKyJweCI6ImRhc2giPT09dD90PTMqcisicHgsIiszKnIrInB4IjoibG9uZ2Rhc2giPT09dD90PTUqcisicHgsIis1KnIrInB4IjoiZGFzaGRvdCI9PT10P3Q9MypyKyJweCwiK3IrInB4LCIrcisicHgsIityKyJweCI6ImxvbmdkYXNoZG90Ij09PXQmJih0PTUqcisicHgsIisyKnIrInB4LCIrcisicHgsIisyKnIrInB4IiksdH0sYi5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9by5zZWxlY3QodC5ub2RlKCkpLHI9ZS5kYXRhKCksbj0oKChyWzBdfHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmZpbGxjb2xvcjtuJiZ0LmNhbGwoYy5maWxsLG4pfSxiLmZpbGxHcm91cFN0eWxlPWZ1bmN0aW9uKHQpe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1vLnNlbGVjdCh0aGlzKTt0cnl7ci5jYWxsKGMuZmlsbCxlWzBdLnRyYWNlLmZpbGxjb2xvcil9Y2F0Y2goZSl7Zi5lcnJvcihlLHQpLHIucmVtb3ZlKCl9fSl9O3ZhciB4PXQoIi4vc3ltYm9sX2RlZnMiKTtiLnN5bWJvbE5hbWVzPVtdLGIuc3ltYm9sRnVuY3M9W10sYi5zeW1ib2xOZWVkTGluZXM9e30sYi5zeW1ib2xOb0RvdD17fSxiLnN5bWJvbExpc3Q9W10sT2JqZWN0LmtleXMoeCkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT14W3RdO2Iuc3ltYm9sTGlzdD1iLnN5bWJvbExpc3QuY29uY2F0KFtlLm4sdCxlLm4rMTAwLHQrIi1vcGVuIl0pLGIuc3ltYm9sTmFtZXNbZS5uXT10LGIuc3ltYm9sRnVuY3NbZS5uXT1lLmYsZS5uZWVkTGluZSYmKGIuc3ltYm9sTmVlZExpbmVzW2Uubl09ITApLGUubm9Eb3Q/Yi5zeW1ib2xOb0RvdFtlLm5dPSEwOmIuc3ltYm9sTGlzdD1iLnN5bWJvbExpc3QuY29uY2F0KFtlLm4rMjAwLHQrIi1kb3QiLGUubiszMDAsdCsiLW9wZW4tZG90Il0pfSk7dmFyIF89Yi5zeW1ib2xOYW1lcy5sZW5ndGgsdz0iTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaIjtiLnN5bWJvbE51bWJlcj1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPTA7dC5pbmRleE9mKCItb3BlbiIpPjAmJihlPTEwMCx0PXQucmVwbGFjZSgiLW9wZW4iLCIiKSksdC5pbmRleE9mKCItZG90Iik+MCYmKGUrPTIwMCx0PXQucmVwbGFjZSgiLWRvdCIsIiIpKSx0PWIuc3ltYm9sTmFtZXMuaW5kZXhPZih0KSx0Pj0wJiYodCs9ZSl9cmV0dXJuIHQlMTAwPj1ffHx0Pj00MDA/MDpNYXRoLmZsb29yKE1hdGgubWF4KHQsMCkpfTt2YXIgTT17eDE6MSx4MjowLHkxOjAseTI6MH0saz17eDE6MCx4MjowLHkxOjEseTI6MH07Yi5ncmFkaWVudD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIHM9ZS5fZnVsbExheW91dC5fZGVmcy5zZWxlY3QoIi5ncmFkaWVudHMiKS5zZWxlY3RBbGwoIiMiK3IpLmRhdGEoW24raSthXSxmLmlkZW50aXR5KTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJyYWRpYWwiPT09bj8icmFkaWFsR3JhZGllbnQiOiJsaW5lYXJHcmFkaWVudCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1vLnNlbGVjdCh0aGlzKTsiaG9yaXpvbnRhbCI9PT1uP3QuYXR0cihNKToidmVydGljYWwiPT09biYmdC5hdHRyKGspLHQuYXR0cigiaWQiLHIpO3ZhciBlPWwoaSkscz1sKGEpO3QuYXBwZW5kKCJzdG9wIikuYXR0cih7b2Zmc2V0OiIwJSIsInN0b3AtY29sb3IiOmMudGlueVJHQihzKSwic3RvcC1vcGFjaXR5IjpzLmdldEFscGhhKCl9KSx0LmFwcGVuZCgic3RvcCIpLmF0dHIoe29mZnNldDoiMTAwJSIsInN0b3AtY29sb3IiOmMudGlueVJHQihlKSwic3RvcC1vcGFjaXR5IjplLmdldEFscGhhKCl9KX0pLHQuc3R5bGUoe2ZpbGw6InVybCgjIityKyIpIiwiZmlsbC1vcGFjaXR5IjpudWxsfSl9LGIuaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9kZWZzLnNlbGVjdEFsbCgiLmdyYWRpZW50cyIpLmRhdGEoWzBdKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ3JhZGllbnRzIiwhMCksZS5zZWxlY3RBbGwoImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50IikucmVtb3ZlKCl9LGIuc2luZ2xlUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHM9ci5tYXJrZXI7bih0LGUscixpLGEscyxzLmxpbmUsbyl9LGIucG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBuPWUubWFya2VyLGk9Yi50cnlDb2xvcnNjYWxlKG4sIiIpLGE9Yi50cnlDb2xvcnNjYWxlKG4sImxpbmUiKTt0LmVhY2goZnVuY3Rpb24odCl7Yi5zaW5nbGVQb2ludFN0eWxlKHQsby5zZWxlY3QodGhpcyksZSxpLGEscil9KX19LGIudHJ5Q29sb3JzY2FsZT1mdW5jdGlvbih0LGUpe3ZhciByPWU/Zi5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpOnQsbj1yLmNvbG9yc2NhbGUsaT1yLmNvbG9yO3JldHVybiBuJiZBcnJheS5pc0FycmF5KGkpP2gubWFrZUNvbG9yU2NhbGVGdW5jKGguZXh0cmFjdFNjYWxlKG4sci5jbWluLHIuY21heCkpOmYuaWRlbnRpdHl9O3ZhciBBPXtzdGFydDoxLGVuZDotMSxtaWRkbGU6MCxib3R0b206MSx0b3A6LTF9O2IudGV4dFBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKSxpPXQudHh8fGUudGV4dDtpZighaXx8QXJyYXkuaXNBcnJheShpKSlyZXR1cm4gdm9pZCBuLnJlbW92ZSgpO3ZhciBhPXQudHB8fGUudGV4dHBvc2l0aW9uLGw9LTEhPT1hLmluZGV4T2YoInRvcCIpPyJ0b3AiOi0xIT09YS5pbmRleE9mKCJib3R0b20iKT8iYm90dG9tIjoibWlkZGxlIix1PS0xIT09YS5pbmRleE9mKCJsZWZ0Iik/ImVuZCI6LTEhPT1hLmluZGV4T2YoInJpZ2h0Iik/InN0YXJ0IjoibWlkZGxlIixjPXQudHN8fGUudGV4dGZvbnQuc2l6ZSxoPXQubXJjP3QubXJjLy44KzE6MDtjPXMoYykmJmM+MD9jOjAsbi5jYWxsKGIuZm9udCx0LnRmfHxlLnRleHRmb250LmZhbWlseSxjLHQudGN8fGUudGV4dGZvbnQuY29sb3IpLmF0dHIoInRleHQtYW5jaG9yIix1KS50ZXh0KGkpLmNhbGwoZC5jb252ZXJ0VG9Uc3BhbnMscik7dmFyIGY9by5zZWxlY3QodGhpcy5wYXJlbnROb2RlKSxwPShkLmxpbmVDb3VudChuKS0xKSp2KzEsbT1BW3VdKmgsZz0uNzUqYytBW2xdKmgrKEFbbF0tMSkqcCpjLzI7Zi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIittKyIsIitnKyIpIil9KX07dmFyIFQ9LjU7Yi5zbW9vdGhvcGVuPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIik7dmFyIHIsbj0iTSIrdFswXSxhPVtdO2ZvcihyPTE7cjx0Lmxlbmd0aC0xO3IrKylhLnB1c2goaSh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihuKz0iUSIrYVswXVswXSsiICIrdFsxXSxyPTI7cjx0Lmxlbmd0aC0xO3IrKyluKz0iQyIrYVtyLTJdWzFdKyIgIithW3ItMV1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJRIithW3QubGVuZ3RoLTNdWzFdKyIgIit0W3QubGVuZ3RoLTFdfSxiLnNtb290aGNsb3NlZD1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDMpcmV0dXJuIk0iK3Quam9pbigiTCIpKyJaIjt2YXIgcixuPSJNIit0WzBdLGE9dC5sZW5ndGgtMSxvPVtpKHRbYV0sdFswXSx0WzFdLGUpXTtmb3Iocj0xO3I8YTtyKyspby5wdXNoKGkodFtyLTFdLHRbcl0sdFtyKzFdLGUpKTtmb3Ioby5wdXNoKGkodFthLTFdLHRbYV0sdFswXSxlKSkscj0xO3I8PWE7cisrKW4rPSJDIitvW3ItMV1bMV0rIiAiK29bcl1bMF0rIiAiK3Rbcl07cmV0dXJuIG4rPSJDIitvW2FdWzFdKyIgIitvWzBdWzBdKyIgIit0WzBdKyJaIn07dmFyIFM9e2h2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK28ucm91bmQoZVswXSwyKSsiViIrby5yb3VuZChlWzFdLDIpfSx2aDpmdW5jdGlvbih0LGUpe3JldHVybiJWIitvLnJvdW5kKGVbMV0sMikrIkgiK28ucm91bmQoZVswXSwyKX0saHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIkgiK28ucm91bmQoKHRbMF0rZVswXSkvMiwyKSsiViIrby5yb3VuZChlWzFdLDIpKyJIIitvLnJvdW5kKGVbMF0sMil9LHZodjpmdW5jdGlvbih0LGUpe3JldHVybiJWIitvLnJvdW5kKCh0WzFdK2VbMV0pLzIsMikrIkgiK28ucm91bmQoZVswXSwyKSsiViIrby5yb3VuZChlWzFdLDIpfX0sRT1mdW5jdGlvbih0LGUpe3JldHVybiJMIitvLnJvdW5kKGVbMF0sMikrIiwiK28ucm91bmQoZVsxXSwyKX07Yi5zdGVwcz1mdW5jdGlvbih0KXt2YXIgZT1TW3RdfHxFO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHI9Ik0iK28ucm91bmQodFswXVswXSwyKSsiLCIrby5yb3VuZCh0WzBdWzFdLDIpLG49MTtuPHQubGVuZ3RoO24rKylyKz1lKHRbbi0xXSx0W25dKTtyZXR1cm4gcn19LGIubWFrZVRlc3Rlcj1mdW5jdGlvbigpe3ZhciB0PW8uc2VsZWN0KCJib2R5Iikuc2VsZWN0QWxsKCIjanMtcGxvdGx5LXRlc3RlciIpLmRhdGEoWzBdKTt0LmVudGVyKCkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsImpzLXBsb3RseS10ZXN0ZXIiKS5hdHRyKHAuc3ZnQXR0cnMpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwMHB4Iix0b3A6Ii0xMDAwMHB4Iix3aWR0aDoiOTAwMHB4IixoZWlnaHQ6IjkwMDBweCIsInotaW5kZXgiOiIxIn0pO3ZhciBlPXQuc2VsZWN0QWxsKCIuanMtcmVmZXJlbmNlLXBvaW50IikuZGF0YShbMF0pO2UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1yZWZlcmVuY2UtcG9pbnQiLCEwKS5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KSxiLnRlc3Rlcj10LGIudGVzdHJlZj1lfSxiLnNhdmVkQkJveGVzPXt9O3ZhciBMPTA7Yi5iQm94PWZ1bmN0aW9uKHQsZSxyKXtyfHwocj1hKHQpKTt2YXIgbjtpZihyKXtpZihuPWIuc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGYuZXh0ZW5kRmxhdCh7fSxuKX1lbHNlIGlmKDE9PT10LmNoaWxkTm9kZXMubGVuZ3RoKXt2YXIgaT10LmNoaWxkTm9kZXNbMF07aWYocj1hKGkpKXt2YXIgcz0raS5nZXRBdHRyaWJ1dGUoIngiKXx8MCxsPStpLmdldEF0dHJpYnV0ZSgieSIpfHwwLHU9aS5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpO2lmKCF1KXt2YXIgYz1iLmJCb3goaSwhMSxyKTtyZXR1cm4gcyYmKGMubGVmdCs9cyxjLnJpZ2h0Kz1zKSxsJiYoYy50b3ArPWwsYy5ib3R0b20rPWwpLGN9aWYocis9In4iK3MrIn4iK2wrIn4iK3Usbj1iLnNhdmVkQkJveGVzW3JdKXJldHVybiBmLmV4dGVuZEZsYXQoe30sbil9fXZhciBoLHA7ZT9oPXQ6KHA9Yi50ZXN0ZXIubm9kZSgpLGg9dC5jbG9uZU5vZGUoITApLHAuYXBwZW5kQ2hpbGQoaCkpLG8uc2VsZWN0KGgpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuY2FsbChkLnBvc2l0aW9uVGV4dCwwLDApO3ZhciBtPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1iLnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fHAucmVtb3ZlQ2hpbGQoaCk7dmFyIGc9e2hlaWdodDptLmhlaWdodCx3aWR0aDptLndpZHRoLGxlZnQ6bS5sZWZ0LXYubGVmdCx0b3A6bS50b3Atdi50b3AscmlnaHQ6bS5yaWdodC12LmxlZnQsYm90dG9tOm0uYm90dG9tLXYudG9wfTtyZXR1cm4gTD49MWU0JiYoYi5zYXZlZEJCb3hlcz17fSxMPTApLHImJihiLnNhdmVkQkJveGVzW3JdPWcpLEwrKyxmLmV4dGVuZEZsYXQoe30sZyl9LGIuc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUpe2lmKCFlKXJldHVybiB2b2lkIHQuYXR0cigiY2xpcC1wYXRoIixudWxsKTt2YXIgcj0iIyIrZSxuPW8uc2VsZWN0KCJiYXNlIik7bi5zaXplKCkmJm4uYXR0cigiaHJlZiIpJiYocj13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdK3IpLHQuYXR0cigiY2xpcC1wYXRoIiwidXJsKCIrcisiKSIpfSxiLmdldFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgZT0vLipcYnRyYW5zbGF0ZVwoKC0/XGQqXC4/XGQqKVteLVxkXSooLT9cZCpcLj9cZCopW15cZF0uKi8scj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLG49dFtyXSgidHJhbnNmb3JtIil8fCIiLGk9bi5yZXBsYWNlKGUsZnVuY3Rpb24odCxlLHIpe3JldHVybltlLHJdLmpvaW4oIiAiKX0pLnNwbGl0KCIgIik7cmV0dXJue3g6K2lbMF18fDAseToraVsxXXx8MH19LGIuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0vKFxidHJhbnNsYXRlXCguKj9cKTs/KS8saT10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGE9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixvPXRbaV0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxvPW8ucmVwbGFjZShuLCIiKS50cmltKCksbys9IiB0cmFuc2xhdGUoIitlKyIsICIrcisiKSIsbz1vLnRyaW0oKSx0W2FdKCJ0cmFuc2Zvcm0iLG8pLG99LGIuZ2V0U2NhbGU9ZnVuY3Rpb24odCl7dmFyIGU9Ly4qXGJzY2FsZVwoKFxkKlwuP1xkKilbXlxkXSooXGQqXC4/XGQqKVteXGRdLiovLHI9dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixuPXRbcl0oInRyYW5zZm9ybSIpfHwiIixpPW4ucmVwbGFjZShlLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KS5zcGxpdCgiICIpO3JldHVybnt4OitpWzBdfHwxLHk6K2lbMV18fDF9fSxiLnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0vKFxic2NhbGVcKC4qP1wpOz8pLyxpPXQuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSIsYT10LmF0dHI/ImF0dHIiOiJzZXRBdHRyaWJ1dGUiLG89dFtpXSgidHJhbnNmb3JtIil8fCIiO3JldHVybiBlPWV8fDEscj1yfHwxLG89by5yZXBsYWNlKG4sIiIpLnRyaW0oKSxvKz0iIHNjYWxlKCIrZSsiLCAiK3IrIikiLG89by50cmltKCksdFthXSgidHJhbnNmb3JtIixvKSxvfSxiLnNldFBvaW50R3JvdXBTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhO3JldHVybiBlPWV8fDEscj1yfHwxLGk9MT09PWUmJjE9PT1yPyIiOiIgc2NhbGUoIitlKyIsIityKyIpIixhPS9ccypzYy4qLyx0LmVhY2goZnVuY3Rpb24oKXtuPSh0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil8fCIiKS5yZXBsYWNlKGEsIiIpLG4rPWksbj1uLnRyaW0oKSx0aGlzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKX0pLGl9O3ZhciBDPS90cmFuc2xhdGVcKFteKV0qXClccyokLztiLnNldFRleHRQb2ludHNTY2FsZT1mdW5jdGlvbih0LGUscil7dC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQsbj1vLnNlbGVjdCh0aGlzKSxpPW4uc2VsZWN0KCJ0ZXh0IiksYT1wYXJzZUZsb2F0KGkuYXR0cigieCIpfHwwKSxzPXBhcnNlRmxvYXQoaS5hdHRyKCJ5Iil8fDApLGw9KG4uYXR0cigidHJhbnNmb3JtIil8fCIiKS5tYXRjaChDKTt0PTE9PT1lJiYxPT09cj9bXTpbInRyYW5zbGF0ZSgiK2ErIiwiK3MrIikiLCJzY2FsZSgiK2UrIiwiK3IrIikiLCJ0cmFuc2xhdGUoIistYSsiLCIrLXMrIikiXSxsJiZ0LnB1c2gobCksbi5hdHRyKCJ0cmFuc2Zvcm0iLHQuam9pbigiICIpKX0pfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDQwLCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vY29sb3IiOjYwMiwiLi4vY29sb3JzY2FsZSI6NjE2LCIuL3N5bWJvbF9kZWZzIjo2MjcsZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5LHRpbnljb2xvcjI6NTMyfV0sNjI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPXtjaXJjbGU6e246MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifX0sc3F1YXJlOntuOjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9fSxkaWFtb25kOntuOjIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWiJ9fSxjcm9zczp7bjozLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNCp0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrcisiLCIrZSsiSCIrZSsiViIrcisiSC0iK2UrIlYiK2UrIkgtIityKyJWLSIrZSsiSC0iK2UrIlYtIityKyJIIitlKyJWLSIrZSsiSCIrcisiWiJ9fSx4OntuOjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC44KnQvTWF0aC5zcXJ0KDIpLDIpLHI9ImwiK2UrIiwiK2UsaT0ibCIrZSsiLC0iK2UsYT0ibC0iK2UrIiwtIitlLG89ImwtIitlKyIsIitlO3JldHVybiJNMCwiK2UrcitpK2EraSthK28rYStvK3IrbytyKyJaIn19LCJ0cmlhbmdsZS11cCI6e246NSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwiK24ucm91bmQodC8yLDIpKyJIIitlKyJMMCwtIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWRvd24iOntuOjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIitlKyIsLSIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLCIrbi5yb3VuZCh0LDIpKyJaIn19LCJ0cmlhbmdsZS1sZWZ0Ijp7bjo3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwtIituLnJvdW5kKHQsMikrIiwwWiJ9fSwidHJpYW5nbGUtcmlnaHQiOntuOjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0tIituLnJvdW5kKHQvMiwyKSsiLC0iK2UrIlYiK2UrIkwiK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1uZSI6e246OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrZSsiViIrcisiWiJ9fSwidHJpYW5nbGUtc2UiOntuOjEwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTSIrZSsiLC0iK3IrIlYiK2UrIkgtIityKyJaIn19LCJ0cmlhbmdsZS1zdyI6e246MTEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJILSIrZSsiVi0iK3IrIloifX0sInRyaWFuZ2xlLW53Ijp7bjoxMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0tIitlKyIsIityKyJWLSIrZSsiSCIrcisiWiJ9fSxwZW50YWdvbjp7bjoxMyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjk1MSp0LDIpLHI9bi5yb3VuZCguNTg4KnQsMiksaT1uLnJvdW5kKC10LDIpLGE9bi5yb3VuZCgtLjMwOSp0LDIpO3JldHVybiJNIitlKyIsIithKyJMIityKyIsIituLnJvdW5kKC44MDkqdCwyKSsiSC0iK3IrIkwtIitlKyIsIithKyJMMCwiK2krIloifX0saGV4YWdvbjp7bjoxNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNIitpKyIsLSIrcisiViIrcisiTDAsIitlKyJMLSIraSsiLCIrcisiVi0iK3IrIkwwLC0iK2UrIloifX0saGV4YWdvbjI6e246MTUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvMiwyKSxpPW4ucm91bmQodCpNYXRoLnNxcnQoMykvMiwyKTtyZXR1cm4iTS0iK3IrIiwiK2krIkgiK3IrIkwiK2UrIiwwTCIrcisiLC0iK2krIkgtIityKyJMLSIrZSsiLDBaIn19LG9jdGFnb246e246MTYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC45MjQqdCwyKSxyPW4ucm91bmQoLjM4Myp0LDIpO3JldHVybiJNLSIrcisiLC0iK2UrIkgiK3IrIkwiK2UrIiwtIityKyJWIityKyJMIityKyIsIitlKyJILSIrcisiTC0iK2UrIiwiK3IrIlYtIityKyJaIn19LHN0YXI6e246MTcsZjpmdW5jdGlvbih0KXt2YXIgZT0xLjQqdCxyPW4ucm91bmQoLjIyNSplLDIpLGk9bi5yb3VuZCguOTUxKmUsMiksYT1uLnJvdW5kKC4zNjMqZSwyKSxvPW4ucm91bmQoLjU4OCplLDIpLHM9bi5yb3VuZCgtZSwyKSxsPW4ucm91bmQoLS4zMDkqZSwyKSx1PW4ucm91bmQoLjExOCplLDIpLGM9bi5yb3VuZCguODA5KmUsMik7cmV0dXJuIk0iK3IrIiwiK2wrIkgiK2krIkwiK2ErIiwiK3UrIkwiK28rIiwiK2MrIkwwLCIrbi5yb3VuZCguMzgyKmUsMikrIkwtIitvKyIsIitjKyJMLSIrYSsiLCIrdSsiTC0iK2krIiwiK2wrIkgtIityKyJMMCwiK3MrIloifX0saGV4YWdyYW06e246MTgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42Nip0LDIpLHI9bi5yb3VuZCguMzgqdCwyKSxpPW4ucm91bmQoLjc2KnQsMik7cmV0dXJuIk0tIitpKyIsMGwtIityKyIsLSIrZSsiaCIraSsibCIrcisiLC0iK2UrImwiK3IrIiwiK2UrImgiK2krImwtIityKyIsIitlKyJsIityKyIsIitlKyJoLSIraSsibC0iK3IrIiwiK2UrImwtIityKyIsLSIrZSsiaC0iK2krIloifX0sInN0YXItdHJpYW5nbGUtdXAiOntuOjE5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPSJBICIrYSsiLCIrYSsiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsIityK28rZSsiLCIrcitvKyIwLC0iK2krbysiLSIrZSsiLCIrcisiWiJ9fSwic3Rhci10cmlhbmdsZS1kb3duIjp7bjoyMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCpNYXRoLnNxcnQoMykqLjgsMikscj1uLnJvdW5kKC44KnQsMiksaT1uLnJvdW5kKDEuNip0LDIpLGE9bi5yb3VuZCg0KnQsMiksbz0iQSAiK2ErIiwiK2ErIiAwIDAgMSAiO3JldHVybiJNIitlKyIsLSIrcitvKyItIitlKyIsLSIrcitvKyIwLCIraStvK2UrIiwtIityKyJaIn19LCJzdGFyLXNxdWFyZSI6e246MjEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMSp0LDIpLHI9bi5yb3VuZCgyKnQsMiksaT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLC0iK2UraSsiLSIrZSsiLCIrZStpK2UrIiwiK2UraStlKyIsLSIrZStpKyItIitlKyIsLSIrZSsiWiJ9fSwic3Rhci1kaWFtb25kIjp7bjoyMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKDEuOSp0LDIpLGk9IkEgIityKyIsIityKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwwIitpKyIwLCIrZStpK2UrIiwwIitpKyIwLC0iK2UraSsiLSIrZSsiLDBaIn19LCJkaWFtb25kLXRhbGwiOntuOjIzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNyp0LDIpLHI9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIityKyJMIitlKyIsMEwwLC0iK3IrIkwtIitlKyIsMFoifX0sImRpYW1vbmQtd2lkZSI6e246MjQsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpLHI9bi5yb3VuZCguNyp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSxob3VyZ2xhc3M6e246MjUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIkgtIitlKyJMIitlKyIsLSIrZSsiSC0iK2UrIloifSxub0RvdDohMH0sYm93dGllOntuOjI2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJWLSIrZSsiTC0iK2UrIiwiK2UrIlYtIitlKyJaIn0sbm9Eb3Q6ITB9LCJjaXJjbGUtY3Jvc3MiOntuOjI3LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY2lyY2xlLXgiOntuOjI4LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0L01hdGguc3FydCgyKSwyKTtyZXR1cm4iTSIrcisiLCIrcisiTC0iK3IrIiwtIityKyJNIityKyIsLSIrcisiTC0iK3IrIiwiK3IrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJzcXVhcmUtY3Jvc3MiOntuOjI5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIitlKyIsIitlKyJILSIrZSsiVi0iK2UrIkgiK2UrIloifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS14Ijp7bjozMCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlKyJNIitlKyIsLSIrZSsiTC0iK2UrIiwiK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC1jcm9zcyI6e246MzEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMyp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0wLC0iK2UrIlYiK2UrIk0tIitlKyIsMEgiK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiZGlhbW9uZC14Ijp7bjozMixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMikscj1uLnJvdW5kKC42NSp0LDIpO3JldHVybiJNIitlKyIsMEwwLCIrZSsiTC0iK2UrIiwwTDAsLSIrZSsiWk0tIityKyIsLSIrcisiTCIrcisiLCIrcisiTS0iK3IrIiwiK3IrIkwiK3IrIiwtIityfSxuZWVkTGluZTohMCxub0RvdDohMH0sImNyb3NzLXRoaW4iOntuOjMzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZSsiTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJ4LXRoaW4iOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LGFzdGVyaXNrOntuOjM1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoLjg1KnQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK3IrIiwiK3IrIkwtIityKyIsLSIrcisiTSIrcisiLC0iK3IrIkwtIityKyIsIityfSxuZWVkTGluZTohMCxub0RvdDohMH0saGFzaDp7bjozNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodC8yLDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIityKyJWLSIrcisibS0iK3IrIiwwViIrcisiTSIrcisiLCIrZSsiSC0iK3IrIm0wLC0iK3IrIkgiK3J9LG5lZWRMaW5lOiEwfSwieS11cCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK2krIkwwLDBNIitlKyIsIitpKyJMMCwwTTAsLSIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwieS1kb3duIjp7bjozOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIrZSsiLC0iK2krIkwwLDBNIitlKyIsLSIraSsiTDAsME0wLCIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwieS1sZWZ0Ijp7bjozOSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNIitpKyIsIitlKyJMMCwwTSIraSsiLC0iK2UrIkwwLDBNLSIrcisiLDBMMCwwIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJ5LXJpZ2h0Ijp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIraSsiLCIrZSsiTDAsME0tIitpKyIsLSIrZSsiTDAsME0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwibGluZS1ldyI6e246NDEsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImxpbmUtbnMiOntuOjQyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTTAsIitlKyJWLSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJsaW5lLW5lIjp7bjo0MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMH0sImxpbmUtbnciOntuOjQ0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2V9LG5lZWRMaW5lOiEwLG5vRG90OiEwfX19LHtkMzoxMjB9XSw2Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyY2VudCIsImNvbnN0YW50Iiwic3FydCIsImRhdGEiXX0sc3ltbWV0cmljOnt2YWxUeXBlOiJib29sZWFuIn0sYXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxhcnJheW1pbnVzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0sdmFsdWVtaW51czp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSx0cmFjZXJlZjp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSx0cmFjZXJlZm1pbnVzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LGNvcHlfeXN0eWxlOnt2YWxUeXBlOiJib29sZWFuIn0sY29weV96c3R5bGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxjb2xvcjp7dmFsVHlwZToiY29sb3IifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MH0sX2RlcHJlY2F0ZWQ6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciJ9fX19LHt9XSw2Mjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgYT1lWyJlcnJvcl8iK25dfHx7fSxsPWEudmlzaWJsZSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2Yoci50eXBlKSx1PVtdO2lmKGwpe2Zvcih2YXIgYz1zKGEpLGg9MDtoPHQubGVuZ3RoO2grKyl7dmFyIGY9dFtoXSxkPWZbbl07aWYoaShyLmMybChkKSkpe3ZhciBwPWMoZCxoKTtpZihpKHBbMF0pJiZpKHBbMV0pKXt2YXIgbT1mW24rInMiXT1kLXBbMF0sdj1mW24rImgiXT1kK3BbMV07dS5wdXNoKG0sdil9fX1vLmV4cGFuZChyLHUse3BhZGRlZDohMH0pfX12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuL2NvbXB1dGVfZXJyb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdLHM9aVswXS50cmFjZTtpZihhLnRyYWNlSXMocywiZXJyb3JCYXJzT0siKSl7dmFyIGw9by5nZXRGcm9tSWQodCxzLnhheGlzKSx1PW8uZ2V0RnJvbUlkKHQscy55YXhpcyk7bihpLHMsbCwieCIpLG4oaSxzLHUsInkiKX19fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2NvbXB1dGVfZXJyb3IiOjYzMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDYzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuInBlcmNlbnQiPT09dD9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModCplLzEwMCl9OiJjb25zdGFudCI9PT10P2Z1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGUpfToic3FydCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5hYnModCkpfTp2b2lkIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxyPXQuc3ltbWV0cmljO2lmKCJkYXRhIj09PWUpe3ZhciBpPXQuYXJyYXksYT10LmFycmF5bWludXM7cmV0dXJuIHJ8fHZvaWQgMD09PWE/ZnVuY3Rpb24odCxlKXt2YXIgcj0raVtlXTtyZXR1cm5bcixyXX06ZnVuY3Rpb24odCxlKXtyZXR1cm5bK2FbZV0sK2lbZV1dfX12YXIgbz1uKGUsdC52YWx1ZSkscz1uKGUsdC52YWx1ZW1pbnVzKTtyZXR1cm4gcnx8dm9pZCAwPT09dC52YWx1ZW1pbnVzP2Z1bmN0aW9uKHQpe3ZhciBlPW8odCk7cmV0dXJuW2UsZV19OmZ1bmN0aW9uKHQpe3JldHVybltzKHQpLG8odCldfX19LHt9XSw2MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGEuY29lcmNlKGgsYyxvLHQsZSl9dmFyIHU9ImVycm9yXyIrcy5heGlzLGM9ZVt1XT17fSxoPXRbdV18fHt9O2lmKCExIT09bCgidmlzaWJsZSIsdm9pZCAwIT09aC5hcnJheXx8dm9pZCAwIT09aC52YWx1ZXx8InNxcnQiPT09aC50eXBlKSl7dmFyIGY9bCgidHlwZSIsImFycmF5ImluIGg/ImRhdGEiOiJwZXJjZW50IiksZD0hMDsic3FydCIhPT1mJiYoZD1sKCJzeW1tZXRyaWMiLCEoKCJkYXRhIj09PWY/ImFycmF5bWludXMiOiJ2YWx1ZW1pbnVzIilpbiBoKSkpLCJkYXRhIj09PWY/KGwoImFycmF5Iil8fChjLmFycmF5PVtdKSxsKCJ0cmFjZXJlZiIpLGR8fChsKCJhcnJheW1pbnVzIil8fChjLmFycmF5bWludXM9W10pLGwoInRyYWNlcmVmbWludXMiKSkpOiJwZXJjZW50IiE9PWYmJiJjb25zdGFudCIhPT1mfHwobCgidmFsdWUiKSxkfHxsKCJ2YWx1ZW1pbnVzIikpO3ZhciBwPSJjb3B5XyIrcy5pbmhlcml0KyJzdHlsZSI7cy5pbmhlcml0JiYoZVsiZXJyb3JfIitzLmluaGVyaXRdfHx7fSkudmlzaWJsZSYmbChwLCEoaC5jb2xvcnx8bihoLnRoaWNrbmVzcyl8fG4oaC53aWR0aCkpKSxzLmluaGVyaXQmJmNbcF18fChsKCJjb2xvciIsciksbCgidGhpY2tuZXNzIiksbCgid2lkdGgiLGkudHJhY2VJcyhlLCJnbDNkIik/MDo0KSl9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9hdHRyaWJ1dGVzIjo2MjgsImZhc3QtaXNudW1lcmljIjoxMjl9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5jYWxjRnJvbVRyYWNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQueHx8W10saT10Lnl8fFtdLGE9ci5sZW5ndGh8fGkubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7cysrKW9bc109e3g6cltzXSx5Omlbc119O3JldHVybiBvWzBdLnRyYWNlPXQsbi5jYWxjKHtjYWxjZGF0YTpbb10sX2Z1bGxMYXlvdXQ6ZX0pLG99LG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVySW5mbz1mdW5jdGlvbih0LGUscil7KGUuZXJyb3JfeXx8e30pLnZpc2libGUmJihyLnllcnI9dC55aC10LnksZS5lcnJvcl95LnN5bW1ldHJpY3x8KHIueWVycm5lZz10LnktdC55cykpLChlLmVycm9yX3h8fHt9KS52aXNpYmxlJiYoci54ZXJyPXQueGgtdC54LGUuZXJyb3JfeC5zeW1tZXRyaWN8fChyLnhlcnJuZWc9dC54LXQueHMpKX19LHsiLi9hdHRyaWJ1dGVzIjo2MjgsIi4vY2FsYyI6NjI5LCIuL2RlZmF1bHRzIjo2MzEsIi4vcGxvdCI6NjMzLCIuL3N0eWxlIjo2MzR9XSw2MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49e3g6ZS5jMnAodC54KSx5OnIuYzJwKHQueSl9O3JldHVybiB2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGEobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpLHZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksYShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSksbn12YXIgaT10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbCx1PWUueGF4aXMsYz1lLnlheGlzLGg9ciYmci5kdXJhdGlvbj4wO3QuZWFjaChmdW5jdGlvbih0KXt2YXIgZixkPXRbMF0udHJhY2UscD1kLmVycm9yX3h8fHt9LG09ZC5lcnJvcl95fHx7fTtkLmlkcyYmKGY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KTt2YXIgdj1zLmhhc01hcmtlcnMoZCkmJmQubWFya2VyLm1heGRpc3BsYXllZD4wO2lmKG0udmlzaWJsZXx8cC52aXNpYmxlKXt2YXIgZz1pLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZXJyb3JiYXIiKS5kYXRhKHQsZik7Zy5leGl0KCkucmVtb3ZlKCksZy5zdHlsZSgib3BhY2l0eSIsMSk7dmFyIHk9Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVycm9yYmFyIiwhMCk7aCYmeS5zdHlsZSgib3BhY2l0eSIsMCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwxKSxvLnNldENsaXBVcmwoZyxlLmxheWVyQ2xpcElkKSxnLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyksbz1uKHQsdSxjKTtpZighdnx8dC52aXMpe3ZhciBzO2lmKG0udmlzaWJsZSYmYShvLngpJiZhKG8ueWgpJiZhKG8ueXMpKXt2YXIgZj1tLndpZHRoO3M9Ik0iKyhvLngtZikrIiwiK28ueWgrImgiKzIqZisibS0iK2YrIiwwViIrby55cyxvLm5vWVN8fChzKz0ibS0iK2YrIiwwaCIrMipmKTt2YXIgZD1lLnNlbGVjdCgicGF0aC55ZXJyb3IiKTtsPSFkLnNpemUoKSxsP2Q9ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInllcnJvciIsITApOmgmJihkPWQudHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpKSxkLmF0dHIoImQiLHMpfWlmKHAudmlzaWJsZSYmYShvLnkpJiZhKG8ueGgpJiZhKG8ueHMpKXt2YXIgZz0ocC5jb3B5X3lzdHlsZT9tOnApLndpZHRoO3M9Ik0iK28ueGgrIiwiKyhvLnktZykrInYiKzIqZysibTAsLSIrZysiSCIrby54cyxvLm5vWFN8fChzKz0ibTAsLSIrZysidiIrMipnKTt2YXIgeT1lLnNlbGVjdCgicGF0aC54ZXJyb3IiKTtsPSF5LnNpemUoKSxsP3k9ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNsYXNzZWQoInhlcnJvciIsITApOmgmJih5PXkudHJhbnNpdGlvbigpLmR1cmF0aW9uKHIuZHVyYXRpb24pLmVhc2Uoci5lYXNpbmcpKSx5LmF0dHIoImQiLHMpfX19KX19KX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL2RyYXdpbmciOjYyNixkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjl9XSw2MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3QuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGEudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KX19LHsiLi4vY29sb3IiOjYwMixkMzoxMjB9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9LGZvbnQ6e2ZhbWlseTpuKHt9LGkuZmFtaWx5LHthcnJheU9rOiEwfSksc2l6ZTpuKHt9LGkuc2l6ZSx7YXJyYXlPazohMH0pLGNvbG9yOm4oe30saS5jb2xvcix7YXJyYXlPazohMH0pfSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsYXJyYXlPazohMH19fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sNjM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7bj1ufHxpLmlkZW50aXR5LEFycmF5LmlzQXJyYXkodCkmJihlWzBdW3JdPW4odCkpfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0LG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIHM9ZVtvXSxsPXNbMF0udHJhY2U7aWYoIWEudHJhY2VJcyhsLCJwaWUiKSl7dmFyIHU9YS50cmFjZUlzKGwsIjJkTWFwIik/bjppLmZpbGxBcnJheTt1KGwuaG92ZXJpbmZvLHMsImhpIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkuY29lcmNlSG92ZXJpbmZvKHtob3ZlcmluZm86ZX0se19tb2R1bGU6dC5fbW9kdWxlfSxyKX19KGwpKSxsLmhvdmVybGFiZWwmJih1KGwuaG92ZXJsYWJlbC5iZ2NvbG9yLHMsImhiZyIpLHUobC5ob3ZlcmxhYmVsLmJvcmRlcmNvbG9yLHMsImhiYyIpLHUobC5ob3ZlcmxhYmVsLmZvbnQuc2l6ZSxzLCJodHMiKSx1KGwuaG92ZXJsYWJlbC5mb250LmNvbG9yLHMsImh0YyIpLHUobC5ob3ZlcmxhYmVsLmZvbnQuZmFtaWx5LHMsImh0ZiIpLHUobC5ob3ZlcmxhYmVsLm5hbWVsZW5ndGgscywiaG5sIikpfX19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyfV0sNjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuL2hvdmVyIikuaG92ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKCl7dC5lbWl0KCJwbG90bHlfY2xpY2siLHtwb2ludHM6dC5faG92ZXJkYXRhLGV2ZW50OmV9KX12YXIgbz1uLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJvbkNsaWNrIikodCx0Ll9ob3ZlcmRhdGEpO3ZvaWQgMCE9PXImJmkodCxlLHIsITApLHQuX2hvdmVyZGF0YSYmZSYmZS50YXJnZXQmJihvJiZvLnRoZW4/by50aGVuKGEpOmEoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vaG92ZXIiOjY0MX1dLDYzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e01BWERJU1Q6MjAsWUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6IkFyaWFsLCBzYW5zLXNlcmlmIixIT1ZFUk1JTlRJTUU6NTB9fSx7fV0sNjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gcyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWEodCxlLHMsby5ob3ZlcmxhYmVsKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6NjM1LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY0Mn1dLDY0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXQociksaT1lKHIpO3JldHVybiBNYXRoLnNxcnQobipuK2kqaSl9fXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9jb25zdGFudHMiKTtyLmdldFN1YnBsb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3VicGxvdHx8dC54YXhpcyt0LnlheGlzfHx0Lmdlb30sci5mbGF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXJbbl09ZTtyZXR1cm4gcn0sci5wMmM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT10W25dLnAyYyhlKTtyZXR1cm4gcn0sci5nZXREaXN0YW5jZUZ1bmN0aW9uPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiJjbG9zZXN0Ij09PXQ/aXx8bihlLHIpOiJ4Ij09PXQ/ZTpyfSxyLmdldENsb3Nlc3Q9ZnVuY3Rpb24odCxlLHIpe2lmKCExIT09ci5pbmRleClyLmluZGV4Pj0wJiZyLmluZGV4PHQubGVuZ3RoP3IuZGlzdGFuY2U9MDpyLmluZGV4PSExO2Vsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPWUodFtuXSk7aTw9ci5kaXN0YW5jZSYmKHIuaW5kZXg9bixyLmRpc3RhbmNlPWkpfXJldHVybiByfSxyLmluYm94PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQqZTwwfHwwPT09dD9hLk1BWERJU1QqKC42LS4zL01hdGgubWF4KDMsTWF0aC5hYnModC1lKSkpOjEvMH0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuX2FycmF5QXR0cnM7aWYobilmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG8scz1uW2FdO2lmKG89ImlkcyI9PT1zPyJpZCI6ImxvY2F0aW9ucyI9PT1zPyJsb2NhdGlvbiI6cyx2b2lkIDA9PT10W29dKXt2YXIgbD1pLm5lc3RlZFByb3BlcnR5KGUscykuZ2V0KCk7QXJyYXkuaXNBcnJheShyKT9BcnJheS5pc0FycmF5KGwpJiZBcnJheS5pc0FycmF5KGxbclswXV0pJiYodFtvXT1sW3JbMF1dW3JbMV1dKTp0W29dPWxbcl19fX19LHsiLi4vLi4vbGliIjo3MjQsIi4vY29uc3RhbnRzIjo2Mzh9XSw2NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtpZigoInBpZSI9PT1yfHwic2Fua2V5Ij09PXIpJiYhbilyZXR1cm4gdm9pZCB0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUub3JpZ2luYWxFdmVudCxwb2ludHM6W2VdfSk7cnx8KHI9Inh5Iik7dmFyIGY9QXJyYXkuaXNBcnJheShyKT9yOltyXSxtPXQuX2Z1bGxMYXlvdXQsZz1tLl9wbG90c3x8W10saz1nW3JdO2lmKGspe3ZhciBBPWsub3ZlcmxheXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7Zj1mLmNvbmNhdChBKX1mb3IodmFyIFQ9Zi5sZW5ndGgsUz1uZXcgQXJyYXkoVCksRT1uZXcgQXJyYXkoVCksTD0wO0w8VDtMKyspe3ZhciBDPWZbTF0sej1nW0NdO2lmKHopU1tMXT14LmdldEZyb21JZCh0LHoueGF4aXMuX2lkKSxFW0xdPXguZ2V0RnJvbUlkKHQsei55YXhpcy5faWQpO2Vsc2V7dmFyIEk9bVtDXS5fc3VicGxvdDtTW0xdPUkueGF4aXMsRVtMXT1JLnlheGlzfX12YXIgRD1lLmhvdmVybW9kZXx8bS5ob3Zlcm1vZGU7aWYoLTE9PT1bIngiLCJ5IiwiY2xvc2VzdCJdLmluZGV4T2YoRCl8fCF0LmNhbGNkYXRhfHx0LnF1ZXJ5U2VsZWN0b3IoIi56b29tYm94Iil8fHQuX2RyYWdnaW5nKXJldHVybiBiLnVuaG92ZXJSYXcodCxlKTt2YXIgUCxPLFIsRixqLE4sQixVLFYsSCxxLEcsWSxYPVtdLFc9W107aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoRD0iYXJyYXkiLFI9MDtSPGUubGVuZ3RoO1IrKylqPXQuY2FsY2RhdGFbZVtSXS5jdXJ2ZU51bWJlcnx8MF0sInNraXAiIT09alswXS50cmFjZS5ob3ZlcmluZm8mJlcucHVzaChqKTtlbHNle2ZvcihGPTA7Rjx0LmNhbGNkYXRhLmxlbmd0aDtGKyspaj10LmNhbGNkYXRhW0ZdLE49alswXS50cmFjZSwic2tpcCIhPT1OLmhvdmVyaW5mbyYmLTEhPT1mLmluZGV4T2Yody5nZXRTdWJwbG90KE4pKSYmVy5wdXNoKGopO3ZhciBaLEosSz0hZS50YXJnZXQ7aWYoSylaPSJ4cHgiaW4gZT9lLnhweDpTWzBdLl9sZW5ndGgvMixKPSJ5cHgiaW4gZT9lLnlweDpFWzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09cC50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpKXJldHVybjt2YXIgUT1lLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihaPWUuY2xpZW50WC1RLmxlZnQsSj1lLmNsaWVudFktUS50b3AsWjwwfHxaPlEud2lkdGh8fEo8MHx8Sj5RLmhlaWdodClyZXR1cm4gYi51bmhvdmVyUmF3KHQsZSl9aWYoUD0ieHZhbCJpbiBlP3cuZmxhdChmLGUueHZhbCk6dy5wMmMoUyxaKSxPPSJ5dmFsImluIGU/dy5mbGF0KGYsZS55dmFsKTp3LnAyYyhFLEopLCFoKFBbMF0pfHwhaChPWzBdKSlyZXR1cm4gZC53YXJuKCJGeC5ob3ZlciBmYWlsZWQiLGUsdCksYi51bmhvdmVyUmF3KHQsZSl9dmFyICQ9MS8wO2ZvcihGPTA7RjxXLmxlbmd0aDtGKyspaWYoKGo9V1tGXSkmJmpbMF0mJmpbMF0udHJhY2UmJiEwPT09alswXS50cmFjZS52aXNpYmxlJiYoTj1qWzBdLnRyYWNlLC0xPT09WyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihOLl9tb2R1bGUubmFtZSkpKXtpZihCPXcuZ2V0U3VicGxvdChOKSxVPWYuaW5kZXhPZihCKSxWPUQsRz17Y2Q6aix0cmFjZTpOLHhhOlNbVV0seWE6RVtVXSxpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbigkLE0uTUFYRElTVCksY29sb3I6eS5kZWZhdWx0TGluZSxuYW1lOk4ubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LG1bQl0mJihHLnN1YnBsb3Q9bVtCXS5fc3VicGxvdCksWT1YLmxlbmd0aCwiYXJyYXkiPT09Vil7dmFyIHR0PWVbRl07InBvaW50TnVtYmVyImluIHR0PyhHLmluZGV4PXR0LnBvaW50TnVtYmVyLFY9ImNsb3Nlc3QiKTooVj0iIiwieHZhbCJpbiB0dCYmKEg9dHQueHZhbCxWPSJ4IiksInl2YWwiaW4gdHQmJihxPXR0Lnl2YWwsVj1WPyJjbG9zZXN0IjoieSIpKX1lbHNlIEg9UFtVXSxxPU9bVV07aWYoTi5fbW9kdWxlJiZOLl9tb2R1bGUuaG92ZXJQb2ludHMpe3ZhciBldD1OLl9tb2R1bGUuaG92ZXJQb2ludHMoRyxILHEsVik7aWYoZXQpZm9yKHZhciBydCxudD0wO250PGV0Lmxlbmd0aDtudCsrKXJ0PWV0W250XSxoKHJ0LngwKSYmaChydC55MCkmJlgucHVzaChzKHJ0LEQpKX1lbHNlIGQubG9nKCJVbnJlY29nbml6ZWQgdHJhY2UgdHlwZSBpbiBob3ZlcjoiLE4pOyJjbG9zZXN0Ij09PUQmJlgubGVuZ3RoPlkmJihYLnNwbGljZSgwLFkpLCQ9WFswXS5kaXN0YW5jZSl9aWYoMD09PVgubGVuZ3RoKXJldHVybiBiLnVuaG92ZXJSYXcodCxlKTtYLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kaXN0YW5jZS1lLmRpc3RhbmNlfSk7dmFyIGl0PXQuX2hvdmVyZGF0YSxhdD1bXTtmb3IoUj0wO1I8WC5sZW5ndGg7UisrKXt2YXIgb3Q9WFtSXSxzdD17ZGF0YTpvdC50cmFjZS5faW5wdXQsZnVsbERhdGE6b3QudHJhY2UsY3VydmVOdW1iZXI6b3QudHJhY2UuaW5kZXgscG9pbnROdW1iZXI6b3QuaW5kZXh9O290LnRyYWNlLl9tb2R1bGUuZXZlbnREYXRhP3N0PW90LnRyYWNlLl9tb2R1bGUuZXZlbnREYXRhKHN0LG90KTooc3QueD1vdC54VmFsLHN0Lnk9b3QueVZhbCxzdC54YXhpcz1vdC54YSxzdC55YXhpcz1vdC55YSx2b2lkIDAhPT1vdC56TGFiZWxWYWwmJihzdC56PW90LnpMYWJlbFZhbCkpLHcuYXBwZW5kQXJyYXlQb2ludFZhbHVlKHN0LG90LnRyYWNlLG90LmluZGV4KSxhdC5wdXNoKHN0KX1pZih0Ll9ob3ZlcmRhdGE9YXQsdSh0LGUsaXQpJiZtLl9oYXNDYXJ0ZXNpYW4pe2woWCx7aG92ZXJtb2RlOkQsZnVsbExheW91dDptLGNvbnRhaW5lcjptLl9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOm0uX3BhcGVyZGl2fSl9dmFyIGx0PSJ5Ij09PUQmJlcubGVuZ3RoPjEsdXQ9eS5jb21iaW5lKG0ucGxvdF9iZ2NvbG9yfHx5LmJhY2tncm91bmQsbS5wYXBlcl9iZ2NvbG9yKSxjdD17aG92ZXJtb2RlOkQscm90YXRlTGFiZWxzOmx0LGJnQ29sb3I6dXQsY29udGFpbmVyOm0uX2hvdmVybGF5ZXIsb3V0ZXJDb250YWluZXI6bS5fcGFwZXJkaXYsY29tbW9uTGFiZWxPcHRzOm0uaG92ZXJsYWJlbH0saHQ9aShYLGN0LHQpO2lmKGEoWCxsdD8ieGEiOiJ5YSIpLG8oaHQsbHQpLGUudGFyZ2V0JiZlLnRhcmdldC50YWdOYW1lKXsKdmFyIGZ0PV8uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImhhc0NsaWNrVG9TaG93IikodCxhdCk7dihjLnNlbGVjdChlLnRhcmdldCksZnQ/InBvaW50ZXIiOiIiKX1lLnRhcmdldCYmIW4mJnUodCxlLGl0KSYmKGl0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aXR9KSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczpTLHlheGVzOkUseHZhbHM6UCx5dmFsczpPfSkpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYT1lLmhvdmVybW9kZSxvPWUucm90YXRlTGFiZWxzLHM9ZS5iZ0NvbG9yLGw9ZS5jb250YWluZXIsdT1lLm91dGVyQ29udGFpbmVyLGg9ZS5jb21tb25MYWJlbE9wdHN8fHt9LGY9ZS5mb250RmFtaWx5fHxNLkhPVkVSRk9OVCxkPWUuZm9udFNpemV8fE0uSE9WRVJGT05UU0laRSxwPXRbMF0sdj1wLnhhLGI9cC55YSx4PSJ5Ij09PWE/InlMYWJlbCI6InhMYWJlbCIsXz1wW3hdLHc9KFN0cmluZyhfKXx8IiIpLnNwbGl0KCIgIilbMF0sQT11Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxUPUEudG9wLFM9QS53aWR0aCxFPUEuaGVpZ2h0LHo9cC5kaXN0YW5jZTw9TS5NQVhESVNUJiYoIngiPT09YXx8InkiPT09YSk7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7aT10W25dLmhvdmVyaW5mb3x8dFtuXS50cmFjZS5ob3ZlcmluZm87dmFyIEk9aS5zcGxpdCgiKyIpO2lmKC0xPT09SS5pbmRleE9mKCJhbGwiKSYmLTE9PT1JLmluZGV4T2YoYSkpe3o9ITE7YnJlYWt9fXZhciBEPWwuc2VsZWN0QWxsKCJnLmF4aXN0ZXh0IikuZGF0YSh6P1swXTpbXSk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXN0ZXh0IiwhMCksRC5leGl0KCkucmVtb3ZlKCksRC5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Yy5zZWxlY3QodGhpcyksbj1lLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoWzBdKSxpPWUuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSh7ZmlsbDpoLmJnY29sb3J8fHkuZGVmYXVsdExpbmUsc3Ryb2tlOmguYm9yZGVyY29sb3J8fHkuYmFja2dyb3VuZCwic3Ryb2tlLXdpZHRoIjoiMXB4In0pLGkuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jYWxsKGcuZm9udCxoLmZvbnQuZmFtaWx5fHxmLGguZm9udC5zaXplfHxkLGguZm9udC5jb2xvcnx8eS5iYWNrZ3JvdW5kKS5hdHRyKCJkYXRhLW5vdGV4IiwxKSxpLnRleHQoXykuY2FsbChtLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMsciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCIiKTt2YXIgbz1pLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigieCI9PT1hKXtpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChtLnBvc2l0aW9uVGV4dCwwLCJ0b3AiPT09di5zaWRlP1Qtby5ib3R0b20tTC1DOlQtby50b3ArTCtDKTt2YXIgcz0idG9wIj09PXYuc2lkZT8iLSI6IiI7bi5hdHRyKCJkIiwiTTAsMEwiK0wrIiwiK3MrTCsiSCIrKEMrby53aWR0aC8yKSsidiIrcysoMipDK28uaGVpZ2h0KSsiSC0iKyhDK28ud2lkdGgvMikrIlYiK3MrTCsiSC0iK0wrIloiKSxlLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh2Ll9vZmZzZXQrKHAueDArcC54MSkvMikrIiwiKyhiLl9vZmZzZXQrKCJ0b3AiPT09di5zaWRlPzA6Yi5fbGVuZ3RoKSkrIikiKX1lbHNle2kuYXR0cigidGV4dC1hbmNob3IiLCJyaWdodCI9PT1iLnNpZGU/InN0YXJ0IjoiZW5kIikuY2FsbChtLnBvc2l0aW9uVGV4dCwoInJpZ2h0Ij09PWIuc2lkZT8xOi0xKSooQytMKSxULW8udG9wLW8uaGVpZ2h0LzIpO3ZhciBsPSJyaWdodCI9PT1iLnNpZGU/IiI6Ii0iO24uYXR0cigiZCIsIk0wLDBMIitsK0wrIiwiK0wrIlYiKyhDK28uaGVpZ2h0LzIpKyJoIitsKygyKkMrby53aWR0aCkrIlYtIisoQytvLmhlaWdodC8yKSsiSCIrbCtMKyJWLSIrTCsiWiIpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHYuX29mZnNldCsoInJpZ2h0Ij09PWIuc2lkZT92Ll9sZW5ndGg6MCkpKyIsIisoYi5fb2Zmc2V0KyhwLnkwK3AueTEpLzIpKyIpIil9dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dC56TGFiZWxWYWx8fCh0W3hdfHwiIikuc3BsaXQoIiAiKVswXT09PXd9KX0pO3ZhciBQPWwuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCxmdW5jdGlvbih0KXtyZXR1cm5bdC50cmFjZS5pbmRleCx0LmluZGV4LHQueDAsdC55MCx0Lm5hbWUsdC5hdHRyLHQueGEsdC55YXx8IiJdLmpvaW4oIiwiKX0pO3JldHVybiBQLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWMuc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJyZWN0IikuY2FsbCh5LmZpbGwseS5hZGRPcGFjaXR5KHMsLjgpKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm5hbWUiLCEwKSx0LmFwcGVuZCgicGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLCIxcHgiKSx0LmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoIm51bXMiLCEwKS5jYWxsKGcuZm9udCxmLGQpfSksUC5leGl0KCkucmVtb3ZlKCksUC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWMuc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsIiIpLG49IiIsaT0iIixsPXkub3BhY2l0eSh0LmNvbG9yKT90LmNvbG9yOnkuZGVmYXVsdExpbmUsdT15LmNvbWJpbmUobCxzKSxoPXQuYm9yZGVyQ29sb3J8fHkuY29udHJhc3QodSk7aWYodm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSl7bj1tLnBsYWluVGV4dCh0Lm5hbWV8fCIiKTt2YXIgcD1NYXRoLnJvdW5kKHQubmFtZUxlbmd0aCk7cD4tMSYmbi5sZW5ndGg+cCYmKG49cD4zP24uc3Vic3RyKDAscC0zKSsiLi4uIjpuLnN1YnN0cigwLHApKX12b2lkIDAhPT10LmV4dHJhVGV4dCYmKGkrPXQuZXh0cmFUZXh0KSx2b2lkIDAhPT10LnpMYWJlbD8odm9pZCAwIT09dC54TGFiZWwmJihpKz0ieDogIit0LnhMYWJlbCsiPGJyPiIpLHZvaWQgMCE9PXQueUxhYmVsJiYoaSs9Ink6ICIrdC55TGFiZWwrIjxicj4iKSxpKz0oaT8iejogIjoiIikrdC56TGFiZWwpOnomJnRbYSsiTGFiZWwiXT09PV8/aT10WygieCI9PT1hPyJ5IjoieCIpKyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmKGk9dC55TGFiZWwpOmk9dm9pZCAwPT09dC55TGFiZWw/dC54TGFiZWw6IigiK3QueExhYmVsKyIsICIrdC55TGFiZWwrIikiLHQudGV4dCYmIUFycmF5LmlzQXJyYXkodC50ZXh0KSYmKGkrPShpPyI8YnI+IjoiIikrdC50ZXh0KSwiIj09PWkmJigiIj09PW4mJmUucmVtb3ZlKCksaT1uKTt2YXIgdj1lLnNlbGVjdCgidGV4dC5udW1zIikuY2FsbChnLmZvbnQsdC5mb250RmFtaWx5fHxmLHQuZm9udFNpemV8fGQsdC5mb250Q29sb3J8fGgpLnRleHQoaSkuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChtLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMsciksYj1lLnNlbGVjdCgidGV4dC5uYW1lIikseD0wO24mJm4hPT1pPyhiLmNhbGwoZy5mb250LHQuZm9udEZhbWlseXx8Zix0LmZvbnRTaXplfHxkLHUpLnRleHQobikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChtLnBvc2l0aW9uVGV4dCwwLDApLmNhbGwobS5jb252ZXJ0VG9Uc3BhbnMscikseD1iLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsyKkMpOihiLnJlbW92ZSgpLGUuc2VsZWN0KCJyZWN0IikucmVtb3ZlKCkpLGUuc2VsZWN0KCJwYXRoIikuc3R5bGUoe2ZpbGw6dSxzdHJva2U6aH0pO3ZhciB3LE0sQT12Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxJPXQueGEuX29mZnNldCsodC54MCt0LngxKS8yLEQ9dC55YS5fb2Zmc2V0Kyh0LnkwK3QueTEpLzIsUD1NYXRoLmFicyh0LngxLXQueDApLE89TWF0aC5hYnModC55MS10LnkwKSxSPUEud2lkdGgrTCtDK3g7dC50eTA9VC1BLnRvcCx0LmJ4PUEud2lkdGgrMipDLHQuYnk9QS5oZWlnaHQrMipDLHQuYW5jaG9yPSJzdGFydCIsdC50eHdpZHRoPUEud2lkdGgsdC50eDJ3aWR0aD14LHQub2Zmc2V0PTAsbz8odC5wb3M9SSx3PUQrTy8yK1I8PUUsTT1ELU8vMi1SPj0wLCJ0b3AiIT09dC5pZGVhbEFsaWduJiZ3fHwhTT93PyhEKz1PLzIsdC5hbmNob3I9InN0YXJ0Iik6dC5hbmNob3I9Im1pZGRsZSI6KEQtPU8vMix0LmFuY2hvcj0iZW5kIikpOih0LnBvcz1ELHc9SStQLzIrUjw9UyxNPUktUC8yLVI+PTAsImxlZnQiIT09dC5pZGVhbEFsaWduJiZ3fHwhTT93PyhJKz1QLzIsdC5hbmNob3I9InN0YXJ0Iik6dC5hbmNob3I9Im1pZGRsZSI6KEktPVAvMix0LmFuY2hvcj0iZW5kIikpLHYuYXR0cigidGV4dC1hbmNob3IiLHQuYW5jaG9yKSx4JiZiLmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitJKyIsIitEKyIpIisobz8icm90YXRlKCIraysiKSI6IiIpKX0pLFB9ZnVuY3Rpb24gYSh0LGUpe2Z1bmN0aW9uIHIodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07aWYoaT1lLnBtaW4tZS5wb3MtZS5kcCtlLnNpemUsYT1yLnBvcytyLmRwK3Iuc2l6ZS1lLnBtYXgsaT4uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcCs9aTtuPSExfWlmKCEoYTwuMDEpKXtpZihpPC0uMDEpe2ZvcihzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09YTtuPSExfWlmKG4pe3ZhciB1PTA7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylsPXRbb10sbC5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiZ1Kys7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKHU8PTApO28tLSlsPXRbb10sbC5wb3M+ZS5wbWF4LTEmJihsLmRlbD0hMCx1LS0pO2ZvcihvPTA7bzx0Lmxlbmd0aCYmISh1PD0wKTtvKyspaWYobD10W29dLGwucG9zPGUucG1pbisxKWZvcihsLmRlbD0hMCx1LS0sYT0yKmwuc2l6ZSxzPXQubGVuZ3RoLTE7cz49MDtzLS0pdFtzXS5kcC09YTtmb3Iobz10Lmxlbmd0aC0xO28+PTAmJiEodTw9MCk7by0tKWw9dFtvXSxsLnBvcytsLmRwK2wuc2l6ZT5lLnBtYXgmJihsLmRlbD0hMCx1LS0pfX19Zm9yKHZhciBuLGksYSxvLHMsbCx1LGM9MCxoPXQubWFwKGZ1bmN0aW9uKHQscil7dmFyIG49dFtlXTtyZXR1cm5be2k6cixkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KigieCI9PT1uLl9pZC5jaGFyQXQoMCk/VDoxKS8yLHBtaW46bi5fb2Zmc2V0LHBtYXg6bi5fb2Zmc2V0K24uX2xlbmd0aH1dfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLnBvc3JlZi1lWzBdLnBvc3JlZn0pOyFuJiZjPD10Lmxlbmd0aDspe2ZvcihjKyssbj0hMCxvPTA7bzxoLmxlbmd0aC0xOyl7dmFyIGY9aFtvXSxkPWhbbysxXSxwPWZbZi5sZW5ndGgtMV0sbT1kWzBdO2lmKChpPXAucG9zK3AuZHArcC5zaXplLW0ucG9zLW0uZHArbS5zaXplKT4uMDEmJnAucG1pbj09PW0ucG1pbiYmcC5wbWF4PT09bS5wbWF4KXtmb3Iocz1kLmxlbmd0aC0xO3M+PTA7cy0tKWRbc10uZHArPWk7Zm9yKGYucHVzaC5hcHBseShmLGQpLGguc3BsaWNlKG8rMSwxKSx1PTAscz1mLmxlbmd0aC0xO3M+PTA7cy0tKXUrPWZbc10uZHA7Zm9yKGE9dS9mLmxlbmd0aCxzPWYubGVuZ3RoLTE7cz49MDtzLS0pZltzXS5kcC09YTtuPSExfWVsc2UgbysrfWguZm9yRWFjaChyKX1mb3Iobz1oLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgdj1oW29dO2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBnPXZbc10seT10W2cuaV07eS5vZmZzZXQ9Zy5kcCx5LmRlbD1nLmRlbH19fWZ1bmN0aW9uIG8odCxlKXt0LmVhY2goZnVuY3Rpb24odCl7dmFyIHI9Yy5zZWxlY3QodGhpcyk7aWYodC5kZWwpcmV0dXJuIHZvaWQgci5yZW1vdmUoKTt2YXIgbj0iZW5kIj09PXQuYW5jaG9yPy0xOjEsaT1yLnNlbGVjdCgidGV4dC5udW1zIiksYT17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3QuYW5jaG9yXSxvPWEqKEwrQykscz1vK2EqKHQudHh3aWR0aCtDKSxsPTAsdT10Lm9mZnNldDsibWlkZGxlIj09PXQuYW5jaG9yJiYoby09dC50eDJ3aWR0aC8yLHMtPXQudHgyd2lkdGgvMiksZSYmKHUqPS1FLGw9dC5vZmZzZXQqUyksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIiwibWlkZGxlIj09PXQuYW5jaG9yPyJNLSIrdC5ieC8yKyIsLSIrdC5ieS8yKyJoIit0LmJ4KyJ2Iit0LmJ5KyJoLSIrdC5ieCsiWiI6Ik0wLDBMIisobipMK2wpKyIsIisoTCt1KSsidiIrKHQuYnkvMi1MKSsiaCIrbip0LmJ4KyJ2LSIrdC5ieSsiSCIrKG4qTCtsKSsiViIrKHUtTCkrIloiKSxpLmNhbGwobS5wb3NpdGlvblRleHQsbytsLHUrdC50eTAtdC5ieS8yK0MpLHQudHgyd2lkdGgmJihyLnNlbGVjdCgidGV4dC5uYW1lIikuY2FsbChtLnBvc2l0aW9uVGV4dCxzK2EqQytsLHUrdC50eTAtdC5ieS8yK0MpLHIuc2VsZWN0KCJyZWN0IikuY2FsbChnLnNldFJlY3QscysoYS0xKSp0LnR4MndpZHRoLzIrbCx1LXQuYnkvMi0xLHQudHgyd2lkdGgsdC5ieSsyKSl9KX1mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcihlLHIsbyl7dmFyIHM7aWYoYVtyXSlzPWFbcl07ZWxzZSBpZihpW3JdKXt2YXIgbD1pW3JdO0FycmF5LmlzQXJyYXkobCkmJkFycmF5LmlzQXJyYXkobFt0LmluZGV4WzBdXSkmJihzPWxbdC5pbmRleFswXV1bdC5pbmRleFsxXV0pfWVsc2Ugcz1kLm5lc3RlZFByb3BlcnR5KG4sbykuZ2V0KCk7cyYmKHRbZV09cyl9dmFyIG49dC50cmFjZXx8e30saT10LmNkWzBdLGE9dC5jZFt0LmluZGV4XXx8e307cigiaG92ZXJpbmZvIiwiaGkiLCJob3ZlcmluZm8iKSxyKCJjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHIoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHIoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IikscigiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHIoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHIoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx0LnBvc3JlZj0ieSI9PT1lPyh0LngwK3QueDEpLzI6KHQueTArdC55MSkvMix0LngwPWQuY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9ZC5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1kLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPWQuY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpO3ZhciBvO2lmKHZvaWQgMCE9PXQueExhYmVsVmFsKXtvPSJsb2ciPT09dC54YS50eXBlJiZ0LnhMYWJlbFZhbDw9MDt2YXIgcz14LnRpY2tUZXh0KHQueGEsdC54YS5jMmwobz8tdC54TGFiZWxWYWw6dC54TGFiZWxWYWwpLCJob3ZlciIpO28/MD09PXQueExhYmVsVmFsP3QueExhYmVsPSIwIjp0LnhMYWJlbD0iLSIrcy50ZXh0OnQueExhYmVsPXMudGV4dCx0LnhWYWw9dC54YS5jMmQodC54TGFiZWxWYWwpfWlmKHZvaWQgMCE9PXQueUxhYmVsVmFsKXtvPSJsb2ciPT09dC55YS50eXBlJiZ0LnlMYWJlbFZhbDw9MDt2YXIgbD14LnRpY2tUZXh0KHQueWEsdC55YS5jMmwobz8tdC55TGFiZWxWYWw6dC55TGFiZWxWYWwpLCJob3ZlciIpO28/MD09PXQueUxhYmVsVmFsP3QueUxhYmVsPSIwIjp0LnlMYWJlbD0iLSIrbC50ZXh0OnQueUxhYmVsPWwudGV4dCx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpfWlmKHZvaWQgMCE9PXQuekxhYmVsVmFsJiYodC56TGFiZWw9U3RyaW5nKHQuekxhYmVsVmFsKSksIShpc05hTih0LnhlcnIpfHwibG9nIj09PXQueGEudHlwZSYmdC54ZXJyPD0wKSl7dmFyIHU9eC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnhlcnJuZWc/dC54TGFiZWwrPSIgKyIrdSsiIC8gLSIreC50aWNrVGV4dCh0LnhhLHQueGEuYzJsKHQueGVycm5lZyksImhvdmVyIikudGV4dDp0LnhMYWJlbCs9IiBceGIxICIrdSwieCI9PT1lJiYodC5kaXN0YW5jZSs9MSl9aWYoIShpc05hTih0LnllcnIpfHwibG9nIj09PXQueWEudHlwZSYmdC55ZXJyPD0wKSl7dmFyIGM9eC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVyciksImhvdmVyIikudGV4dDt2b2lkIDAhPT10LnllcnJuZWc/dC55TGFiZWwrPSIgKyIrYysiIC8gLSIreC50aWNrVGV4dCh0LnlhLHQueWEuYzJsKHQueWVycm5lZyksImhvdmVyIikudGV4dDp0LnlMYWJlbCs9IiBceGIxICIrYywieSI9PT1lJiYodC5kaXN0YW5jZSs9MSl9dmFyIGg9dC5ob3ZlcmluZm98fHQudHJhY2UuaG92ZXJpbmZvO3JldHVybiJhbGwiIT09aCYmKGg9aC5zcGxpdCgiKyIpLC0xPT09aC5pbmRleE9mKCJ4IikmJih0LnhMYWJlbD12b2lkIDApLC0xPT09aC5pbmRleE9mKCJ5IikmJih0LnlMYWJlbD12b2lkIDApLC0xPT09aC5pbmRleE9mKCJ6IikmJih0LnpMYWJlbD12b2lkIDApLC0xPT09aC5pbmRleE9mKCJ0ZXh0IikmJih0LnRleHQ9dm9pZCAwKSwtMT09PWguaW5kZXhPZigibmFtZSIpJiYodC5uYW1lPXZvaWQgMCkpLHR9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPWUuaG92ZXJtb2RlLG49ZS5jb250YWluZXIsaT10WzBdLGE9aS54YSxvPWkueWEscz1hLnNob3dzcGlrZXMsbD1vLnNob3dzcGlrZXM7aWYobi5zZWxlY3RBbGwoIi5zcGlrZWxpbmUiKS5yZW1vdmUoKSwiY2xvc2VzdCI9PT1yJiYoc3x8bCkpe3ZhciB1PWUuZnVsbExheW91dCxjPWEuX29mZnNldCsoaS54MCtpLngxKS8yLGg9by5fb2Zmc2V0KyhpLnkwK2kueTEpLzIsZD15LmNvbWJpbmUodS5wbG90X2JnY29sb3IsdS5wYXBlcl9iZ2NvbG9yKSxwPWYucmVhZGFiaWxpdHkoaS5jb2xvcixkKTwxLjU/eS5jb250cmFzdChkKTppLmNvbG9yO2lmKGwpe3ZhciBtPW8uc3Bpa2Vtb2RlLHY9by5zcGlrZXRoaWNrbmVzcyxiPW8uc3Bpa2Vjb2xvcnx8cCx4PW8uX2JvdW5kaW5nQm94LF89KHgubGVmdCt4LnJpZ2h0KS8yPGM/eC5yaWdodDp4LmxlZnQ7aWYoLTEhPT1tLmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PW0uaW5kZXhPZigiYWNyb3NzIikpe3ZhciB3PV8sTT1jOy0xIT09bS5pbmRleE9mKCJhY3Jvc3MiKSYmKHc9by5fY291bnRlclNwYW5bMF0sTT1vLl9jb3VudGVyU3BhblsxXSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTp3LHgyOk0seTE6aCx5MjpoLCJzdHJva2Utd2lkdGgiOnYrMixzdHJva2U6ZH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTp3LHgyOk0seTE6aCx5MjpoLCJzdHJva2Utd2lkdGgiOnYsc3Ryb2tlOmIsInN0cm9rZS1kYXNoYXJyYXkiOmcuZGFzaFN0eWxlKG8uc3Bpa2VkYXNoLHYpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PW0uaW5kZXhPZigibWFya2VyIikmJm4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHtjeDpfKygicmlnaHQiIT09by5zaWRlP3Y6LXYpLGN5Omgscjp2LGZpbGw6Yn0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApfWlmKHMpe3ZhciBrPWEuc3Bpa2Vtb2RlLEE9YS5zcGlrZXRoaWNrbmVzcyxUPWEuc3Bpa2Vjb2xvcnx8cCxTPWEuX2JvdW5kaW5nQm94LEU9KFMudG9wK1MuYm90dG9tKS8yPGg/Uy5ib3R0b206Uy50b3A7aWYoLTEhPT1rLmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PWsuaW5kZXhPZigiYWNyb3NzIikpe3ZhciBMPUUsQz1oOy0xIT09ay5pbmRleE9mKCJhY3Jvc3MiKSYmKEw9YS5fY291bnRlclNwYW5bMF0sQz1hLl9jb3VudGVyU3BhblsxXSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTpjLHgyOmMseTE6TCx5MjpDLCJzdHJva2Utd2lkdGgiOkErMixzdHJva2U6ZH0pLmNsYXNzZWQoInNwaWtlbGluZSIsITApLmNsYXNzZWQoImNyaXNwIiwhMCksbi5hcHBlbmQoImxpbmUiKS5hdHRyKHt4MTpjLHgyOmMseTE6TCx5MjpDLCJzdHJva2Utd2lkdGgiOkEsc3Ryb2tlOlQsInN0cm9rZS1kYXNoYXJyYXkiOmcuZGFzaFN0eWxlKGEuc3Bpa2VkYXNoLEEpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PWsuaW5kZXhPZigibWFya2VyIikmJm4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHtjeDpjLGN5OkUtKCJ0b3AiIT09YS5zaWRlP0E6LUEpLHI6QSxmaWxsOlR9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIHUodCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXJbbl0sYT10Ll9ob3ZlcmRhdGFbbl07aWYoaS5jdXJ2ZU51bWJlciE9PWEuY3VydmVOdW1iZXJ8fFN0cmluZyhpLnBvaW50TnVtYmVyKSE9PVN0cmluZyhhLnBvaW50TnVtYmVyKSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgYz10KCJkMyIpLGg9dCgiZmFzdC1pc251bWVyaWMiKSxmPXQoInRpbnljb2xvcjIiKSxkPXQoIi4uLy4uL2xpYiIpLHA9dCgiLi4vLi4vbGliL2V2ZW50cyIpLG09dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksdj10KCIuLi8uLi9saWIvb3ZlcnJpZGVfY3Vyc29yIiksZz10KCIuLi9kcmF3aW5nIikseT10KCIuLi9jb2xvciIpLGI9dCgiLi4vZHJhZ2VsZW1lbnQiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksXz10KCIuLi8uLi9yZWdpc3RyeSIpLHc9dCgiLi9oZWxwZXJzIiksTT10KCIuL2NvbnN0YW50cyIpLGs9TS5ZQU5HTEUsQT1NYXRoLlBJKmsvMTgwLFQ9MS9NYXRoLnNpbihBKSxTPU1hdGguY29zKEEpLEU9TWF0aC5zaW4oQSksTD1NLkhPVkVSQVJST1dTSVpFLEM9TS5IT1ZFUlRFWFRQQUQ7ci5ob3Zlcj1mdW5jdGlvbih0LGUscixpKXtpZigic3RyaW5nIj09dHlwZW9mIHQmJih0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSx2b2lkIDA9PT10Ll9sYXN0SG92ZXJUaW1lJiYodC5fbGFzdEhvdmVyVGltZT0wKSx2b2lkIDAhPT10Ll9ob3ZlclRpbWVyJiYoY2xlYXJUaW1lb3V0KHQuX2hvdmVyVGltZXIpLHQuX2hvdmVyVGltZXI9dm9pZCAwKSxEYXRlLm5vdygpPnQuX2xhc3RIb3ZlclRpbWUrTS5IT1ZFUk1JTlRJTUUpcmV0dXJuIG4odCxlLHIsaSksdm9pZCh0Ll9sYXN0SG92ZXJUaW1lPURhdGUubm93KCkpO3QuX2hvdmVyVGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe24odCxlLHIsaSksdC5fbGFzdEhvdmVyVGltZT1EYXRlLm5vdygpLHQuX2hvdmVyVGltZXI9dm9pZCAwfSxNLkhPVkVSTUlOVElNRSl9LHIubG9uZUhvdmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2NvbG9yOnQuY29sb3J8fHkuZGVmYXVsdExpbmUseDA6dC54MHx8dC54fHwwLHgxOnQueDF8fHQueHx8MCx5MDp0LnkwfHx0Lnl8fDAseTE6dC55MXx8dC55fHwwLHhMYWJlbDp0LnhMYWJlbCx5TGFiZWw6dC55TGFiZWwsekxhYmVsOnQuekxhYmVsLHRleHQ6dC50ZXh0LG5hbWU6dC5uYW1lLGlkZWFsQWxpZ246dC5pZGVhbEFsaWduLGJvcmRlckNvbG9yOnQuYm9yZGVyQ29sb3IsZm9udEZhbWlseTp0LmZvbnRGYW1pbHksZm9udFNpemU6dC5mb250U2l6ZSxmb250Q29sb3I6dC5mb250Q29sb3IsdHJhY2U6e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowfSxuPWMuc2VsZWN0KGUuY29udGFpbmVyKSxhPWUub3V0ZXJDb250YWluZXI/Yy5zZWxlY3QoZS5vdXRlckNvbnRhaW5lcik6bixzPXtob3Zlcm1vZGU6ImNsb3Nlc3QiLHJvdGF0ZUxhYmVsczohMSxiZ0NvbG9yOmUuYmdDb2xvcnx8eS5iYWNrZ3JvdW5kLGNvbnRhaW5lcjpuLG91dGVyQ29udGFpbmVyOmF9LGw9aShbcl0scyxlLmdkKTtyZXR1cm4gbyhsLHMucm90YXRlTGFiZWxzKSxsLm5vZGUoKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9ldmVudHMiOjcxNCwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6NzMzLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2NvbnN0YW50cyI6NjM4LCIuL2hlbHBlcnMiOjY0MCxkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2k9aXx8e30scigiaG92ZXJsYWJlbC5iZ2NvbG9yIixpLmJnY29sb3IpLHIoImhvdmVybGFiZWwuYm9yZGVyY29sb3IiLGkuYm9yZGVyY29sb3IpLHIoImhvdmVybGFiZWwubmFtZWxlbmd0aCIsaS5uYW1lbGVuZ3RoKSxuLmNvZXJjZUZvbnQociwiaG92ZXJsYWJlbC5mb250IixpLmZvbnQpfX0seyIuLi8uLi9saWIiOjcyNH1dLDY0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPXMuaXNEM1NlbGVjdGlvbih0KT90Om8uc2VsZWN0KHQpO2Uuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLGUuc2VsZWN0QWxsKCIuc3Bpa2VsaW5lIikucmVtb3ZlKCl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHMuY2FzdE9wdGlvbih0LGUsImhvdmVybGFiZWwuIityKX1mdW5jdGlvbiBhKHQsZSxyKXtmdW5jdGlvbiBuKHIpe3JldHVybiBzLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOnJ9LHtfbW9kdWxlOnQuX21vZHVsZX0sZSl9cmV0dXJuIHMuY2FzdE9wdGlvbih0LHIsImhvdmVyaW5mbyIsbil9dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSx1PXQoIi4vaGVscGVycyIpLGM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJmeCIsY29uc3RhbnRzOnQoIi4vY29uc3RhbnRzIiksc2NoZW1hOntsYXlvdXQ6Y30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOmMsc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHM6dCgiLi9sYXlvdXRfZ2xvYmFsX2RlZmF1bHRzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxnZXREaXN0YW5jZUZ1bmN0aW9uOnUuZ2V0RGlzdGFuY2VGdW5jdGlvbixnZXRDbG9zZXN0OnUuZ2V0Q2xvc2VzdCxpbmJveDp1LmluYm94LGFwcGVuZEFycmF5UG9pbnRWYWx1ZTp1LmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxjYXN0SG92ZXJPcHRpb246aSxjYXN0SG92ZXJpbmZvOmEsaG92ZXI6dCgiLi9ob3ZlciIpLmhvdmVyLHVuaG92ZXI6bC51bmhvdmVyLGxvbmVIb3Zlcjp0KCIuL2hvdmVyIikubG9uZUhvdmVyLGxvbmVVbmhvdmVyOm4sY2xpY2s6dCgiLi9jbGljayIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi9hdHRyaWJ1dGVzIjo2MzUsIi4vY2FsYyI6NjM2LCIuL2NsaWNrIjo2MzcsIi4vY29uc3RhbnRzIjo2MzgsIi4vZGVmYXVsdHMiOjYzOSwiLi9oZWxwZXJzIjo2NDAsIi4vaG92ZXIiOjY0MSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjQ0LCIuL2xheW91dF9kZWZhdWx0cyI6NjQ1LCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiOjY0NixkMzoxMjB9XSw2NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXtkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiem9vbSIsInBhbiIsInNlbGVjdCIsImxhc3NvIiwib3JiaXQiLCJ0dXJudGFibGUiXSxkZmx0OiJ6b29tIn0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsImNsb3Nlc3QiLCExXX0saG92ZXJsYWJlbDp7Ymdjb2xvcjp7dmFsVHlwZToiY29sb3IifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IifSxmb250OntmYW1pbHk6bih7fSxpLmZhbWlseSx7ZGZsdDphLkhPVkVSRk9OVH0pLHNpemU6bih7fSxpLnNpemUse2RmbHQ6YS5IT1ZFUkZPTlRTSVpFfSksY29sb3I6bih7fSxpLmNvbG9yKX0sbmFtZWxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MTV9fX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9jb25zdGFudHMiOjYzOH1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0hMCxyPTA7cjx0Lmxlbmd0aDtyKyspe2lmKCJoIiE9PXRbcl0ub3JpZW50YXRpb24pe2U9ITE7YnJlYWt9fXJldHVybiBlfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfW8oImRyYWdtb2RlIik7dmFyIHM7ZS5faGFzKCJjYXJ0ZXNpYW4iKT8oZS5faXNIb3Jpej1uKHIpLHM9ZS5faXNIb3Jpej8ieSI6IngiKTpzPSJjbG9zZXN0IixvKCJob3Zlcm1vZGUiLHMpLGUuX2hhcygibWFwYm94IikmJjE9PT1lLl9iYXNlUGxvdE1vZHVsZXMubGVuZ3RoJiYiem9vbSI9PT1lLmRyYWdtb2RlJiYoZS5kcmFnbW9kZT0icGFuIil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NDR9XSw2NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aSh0LGUscil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY0MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjQ0fV0sNjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImltYWdlIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowfSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MH0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciJ9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3Njl9XSw2NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCx1LGM9dC5fZnVsbExheW91dC5pbWFnZXMsaD1lLl9pZC5jaGFyQXQoMCksZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGw9Y1tmXSx1PSJpbWFnZXNbIitmKyJdLiIsbFtoKyJyZWYiXT09PWUuX2lkKXt2YXIgZD1sW2hdLHA9bFsic2l6ZSIraF0sbT1udWxsLHY9bnVsbDtpZihvKXttPWkoZCxlLnJhbmdlKTt2YXIgZz1wL01hdGgucG93KDEwLG0pLzI7dj0yKk1hdGgubG9nKGcrTWF0aC5zcXJ0KDErZypnKSkvTWF0aC5MTjEwfWVsc2UgbT1NYXRoLnBvdygxMCxkKSx2PW0qKE1hdGgucG93KDEwLHAvMiktTWF0aC5wb3coMTAsLXAvMikpO24obSk/bih2KXx8KHY9bnVsbCk6KG09bnVsbCx2PW51bGwpLGEodStoLG0pLGEodSsic2l6ZSIraCx2KX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjc0NCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDY0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmdW5jdGlvbiBuKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxzLHIsbil9aWYoIW4oInZpc2libGUiLCEhbigic291cmNlIikpKXJldHVybiBlO24oImxheWVyIiksbigieGFuY2hvciIpLG4oInlhbmNob3IiKSxuKCJzaXpleCIpLG4oInNpemV5Iiksbigic2l6aW5nIiksbigib3BhY2l0eSIpO2Zvcih2YXIgbz17X2Z1bGxMYXlvdXQ6cn0sbD1bIngiLCJ5Il0sdT0wO3U8Mjt1Kyspe3ZhciBjPWxbdV0saD1hLmNvZXJjZVJlZih0LGUsbyxjLCJwYXBlciIpO2EuY29lcmNlUG9zaXRpb24oZSxvLG4saCxjLDApfXJldHVybiBlfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7byh0LGUse25hbWU6ImltYWdlcyIsaGFuZGxlSXRlbURlZmF1bHRzOm59KX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2F0dHJpYnV0ZXMiOjY0N31dLDY1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vZHJhd2luZyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYoIXRoaXMuaW1nfHx0aGlzLmltZy5zcmMhPT1lLnNvdXJjZSl7ci5hdHRyKCJ4bWxucyIsby5zdmcpO3ZhciBpPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oKXtyLnJlbW92ZSgpLHQoKX12YXIgaT1uZXcgSW1hZ2U7dGhpcy5pbWc9aSxpLnNldEF0dHJpYnV0ZSgiY3Jvc3NPcmlnaW4iLCJhbm9ueW1vdXMiKSxpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9dGhpcy53aWR0aCxlLmhlaWdodD10aGlzLmhlaWdodCxlLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHRoaXMsMCwwKTt2YXIgbj1lLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7ci5hdHRyKCJ4bGluazpocmVmIixuKSx0KCl9LHIub24oImVycm9yIixuKSxpLnNyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gcihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxvPWEuZ2V0RnJvbUlkKHQsZS54cmVmKSxzPWEuZ2V0RnJvbUlkKHQsZS55cmVmKSxsPXUuX3NpemUsYz1vP01hdGguYWJzKG8ubDJwKGUuc2l6ZXgpLW8ubDJwKDApKTplLnNpemV4KmwudyxoPXM/TWF0aC5hYnMocy5sMnAoZS5zaXpleSktcy5sMnAoMCkpOmUuc2l6ZXkqbC5oLGY9YyptLnhbZS54YW5jaG9yXS5vZmZzZXQsZD1oKm0ueVtlLnlhbmNob3JdLm9mZnNldCxwPW0ueFtlLnhhbmNob3JdLnNpemluZyttLnlbZS55YW5jaG9yXS5zaXppbmcsdj0obz9vLnIycChlLngpK28uX29mZnNldDplLngqbC53K2wubCkrZixnPShzP3MucjJwKGUueSkrcy5fb2Zmc2V0OmwuaC1lLnkqbC5oK2wudCkrZDtzd2l0Y2goZS5zaXppbmcpe2Nhc2UiZmlsbCI6cCs9IiBzbGljZSI7YnJlYWs7Y2FzZSJzdHJldGNoIjpwPSJub25lIn1yLmF0dHIoe3g6dix5Omcsd2lkdGg6YyxoZWlnaHQ6aCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOnAsb3BhY2l0eTplLm9wYWNpdHl9KTt2YXIgeT1vP28uX2lkOiIiLGI9cz9zLl9pZDoiIix4PXkrYjtyLmNhbGwoaS5zZXRDbGlwVXJsLHg/ImNsaXAiK3UuX3VpZCt4Om51bGwpfXZhciBzLGwsdT10Ll9mdWxsTGF5b3V0LGM9W10saD17fSxmPVtdO2ZvcihsPTA7bDx1LmltYWdlcy5sZW5ndGg7bCsrKXt2YXIgZD11LmltYWdlc1tsXTtpZihkLnZpc2libGUpaWYoImJlbG93Ij09PWQubGF5ZXImJiJwYXBlciIhPT1kLnhyZWYmJiJwYXBlciIhPT1kLnlyZWYpe3M9ZC54cmVmK2QueXJlZjt2YXIgcD11Ll9wbG90c1tzXTtpZighcCl7Zi5wdXNoKGQpO2NvbnRpbnVlfXAubWFpbnBsb3QmJihzPXAubWFpbnBsb3QuaWQpLGhbc118fChoW3NdPVtdKSxoW3NdLnB1c2goZCl9ZWxzZSJhYm92ZSI9PT1kLmxheWVyP2MucHVzaChkKTpmLnB1c2goZCl9dmFyIG09e3g6e2xlZnQ6e3NpemluZzoieE1pbiIsb2Zmc2V0OjB9LGNlbnRlcjp7c2l6aW5nOiJ4TWlkIixvZmZzZXQ6LS41fSxyaWdodDp7c2l6aW5nOiJ4TWF4IixvZmZzZXQ6LTF9fSx5Ont0b3A6e3NpemluZzoiWU1pbiIsb2Zmc2V0OjB9LG1pZGRsZTp7c2l6aW5nOiJZTWlkIixvZmZzZXQ6LS41fSxib3R0b206e3NpemluZzoiWU1heCIsb2Zmc2V0Oi0xfX19LHY9dS5faW1hZ2VMb3dlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGYpLGc9dS5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGMpO3YuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksZy5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx2LmV4aXQoKS5yZW1vdmUoKSxnLmV4aXQoKS5yZW1vdmUoKSx2LmVhY2goZnVuY3Rpb24odCl7ZS5iaW5kKHRoaXMpKHQpLHIuYmluZCh0aGlzKSh0KX0pLGcuZWFjaChmdW5jdGlvbih0KXtlLmJpbmQodGhpcykodCksci5iaW5kKHRoaXMpKHQpfSk7dmFyIHk9T2JqZWN0LmtleXModS5fcGxvdHMpO2ZvcihsPTA7bDx5Lmxlbmd0aDtsKyspe3M9eVtsXTt2YXIgYj11Ll9wbG90c1tzXTtpZihiLmltYWdlbGF5ZXIpe3ZhciB4PWIuaW1hZ2VsYXllci5zZWxlY3RBbGwoImltYWdlIikuZGF0YShoW3NdfHxbXSk7eC5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx4LmV4aXQoKS5yZW1vdmUoKSx4LmVhY2goZnVuY3Rpb24odCl7ZS5iaW5kKHRoaXMpKHQpLHIuYmluZCh0aGlzKSh0KX0pfX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uL2RyYXdpbmciOjYyNixkMzoxMjB9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImltYWdlcyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxjb252ZXJ0Q29vcmRzOnQoIi4vY29udmVydF9jb29yZHMiKX19LHsiLi9hdHRyaWJ1dGVzIjo2NDcsIi4vY29udmVydF9jb29yZHMiOjY0OCwiLi9kZWZhdWx0cyI6NjQ5LCIuL2RyYXciOjY1MH1dLDY1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInJpZ2h0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+PTIvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iY2VudGVyIj09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJib3R0b20iPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueTw9MS8zfSxyLmlzTWlkZGxlQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJtaWRkbGUiPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueT4xLzMmJnQueTwyLzN9fSx7fV0sNjUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LGZvbnQ6YSh7fSxuLHt9KSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJ2In0sdHJhY2VvcmRlcjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicmV2ZXJzZWQiLCJncm91cGVkIl0sZXh0cmFzOlsibm9ybWFsIl19LHRyYWNlZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxLjAyfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MX0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImF1dG8ifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi4vY29sb3IvYXR0cmlidXRlcyI6NjAxfV0sNjU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NCxzY3JvbGxCYXJIZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0fX0se31dLDY1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gaS5jb2VyY2UoZCxwLGEsdCxlKX1mb3IodmFyIHUsYyxoLGYsZD10LmxlZ2VuZHx8e30scD1lLmxlZ2VuZD17fSxtPTAsdj0ibm9ybWFsIixnPTA7ZzxyLmxlbmd0aDtnKyspe3ZhciB5PXJbZ107cy5sZWdlbmRHZXRzVHJhY2UoeSkmJihtKyssbi50cmFjZUlzKHksInBpZSIpJiZtKyspLChuLnRyYWNlSXMoeSwiYmFyIikmJiJzdGFjayI9PT1lLmJhcm1vZGV8fC0xIT09WyJ0b25leHR4IiwidG9uZXh0eSJdLmluZGV4T2YoeS5maWxsKSkmJih2PXMuaXNHcm91cGVkKHt0cmFjZW9yZGVyOnZ9KT8iZ3JvdXBlZCtyZXZlcnNlZCI6InJldmVyc2VkIiksdm9pZCAwIT09eS5sZWdlbmRncm91cCYmIiIhPT15LmxlZ2VuZGdyb3VwJiYodj1zLmlzUmV2ZXJzZWQoe3RyYWNlb3JkZXI6dn0pPyJyZXZlcnNlZCtncm91cGVkIjoiZ3JvdXBlZCIpfWlmKCExIT09aS5jb2VyY2UodCxlLG8sInNob3dsZWdlbmQiLG0+MSkpe2lmKGwoImJnY29sb3IiLGUucGFwZXJfYmdjb2xvciksbCgiYm9yZGVyY29sb3IiKSxsKCJib3JkZXJ3aWR0aCIpLGkuY29lcmNlRm9udChsLCJmb250IixlLmZvbnQpLGwoIm9yaWVudGF0aW9uIiksImgiPT09cC5vcmllbnRhdGlvbil7dmFyIGI9dC54YXhpcztiJiZiLnJhbmdlc2xpZGVyJiZiLnJhbmdlc2xpZGVyLnZpc2libGU/KHU9MCxoPSJsZWZ0IixjPTEuMSxmPSJib3R0b20iKToodT0wLGg9ImxlZnQiLGM9LS4xLGY9InRvcCIpfWwoInRyYWNlb3JkZXIiLHYpLHMuaXNHcm91cGVkKGUubGVnZW5kKSYmbCgidHJhY2Vncm91cGdhcCIpLGwoIngiLHUpLGwoInhhbmNob3IiLGgpLGwoInkiLGMpLGwoInlhbmNob3IiLGYpLGkubm9uZU9yQWxsKGQscCxbIngiLCJ5Il0pfX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4MTgsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXR0cmlidXRlcyI6NjUzLCIuL2hlbHBlcnMiOjY1OH1dLDY1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcihyKXt5LmNvbnZlcnRUb1RzcGFucyhyLGUsZnVuY3Rpb24oKXtvKHQsZSl9KX12YXIgbj10LmRhdGEoKVswXVswXSxpPWUuX2Z1bGxMYXlvdXQsYT1uLnRyYWNlLHM9cC50cmFjZUlzKGEsInBpZSIpLGw9YS5pbmRleCx1PXM/bi5sYWJlbDphLm5hbWUsYz10LnNlbGVjdEFsbCgidGV4dC5sZWdlbmR0ZXh0IikuZGF0YShbMF0pO2MuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJsZWdlbmR0ZXh0IiwhMCksYy5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmNhbGwodi5mb250LGkubGVnZW5kLmZvbnQpLnRleHQodSksZS5fY29udGV4dC5lZGl0cy5sZWdlbmRUZXh0JiYhcz9jLmNhbGwoeS5tYWtlRWRpdGFibGUse2dkOmV9KS5jYWxsKHIpLm9uKCJlZGl0IixmdW5jdGlvbih0KXt0aGlzLnRleHQodCkuY2FsbChyKSx0aGlzLnRleHQoKXx8KHQ9IiAgICAiKTt2YXIgaSxhPW4udHJhY2UuX2Z1bGxJbnB1dHx8e307aWYoLTEhPT1bIm9obGMiLCJjYW5kbGVzdGljayJdLmluZGV4T2YoYS50eXBlKSl7dmFyIG89bi50cmFjZS50cmFuc2Zvcm1zO2k9b1tvLmxlbmd0aC0xXS5kaXJlY3Rpb24rIi5uYW1lIn1lbHNlIGk9Im5hbWUiO2gucmVzdHlsZShlLGksdCxsKX0pOmMuY2FsbChyKX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbj0xLGk9dC5zZWxlY3RBbGwoInJlY3QiKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZHRvZ2dsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5jYWxsKGcuZmlsbCwicmdiYSgwLDAsMCwwKSIpLGkub24oIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHItZS5fbGVnZW5kTW91c2VEb3duVGltZTxTP24rPTE6KG49MSxlLl9sZWdlbmRNb3VzZURvd25UaW1lPXIpfSksaS5vbigibW91c2V1cCIsZnVuY3Rpb24oKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciByPWUuX2Z1bGxMYXlvdXQubGVnZW5kOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLWUuX2xlZ2VuZE1vdXNlRG93blRpbWU+UyYmKG49TWF0aC5tYXgobi0xLDEpKSwxPT09bj9yLl9jbGlja1RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2EodCxlLG4pfSxTKToyPT09biYmKHIuX2NsaWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHIuX2NsaWNrVGltZW91dCksZS5fbGVnZW5kTW91c2VEb3duVGltZT0wLGEodCxlLG4pKX19KX1mdW5jdGlvbiBhKHQsZSxyKXtpZighZS5fZHJhZ2dlZCYmIWUuX2VkaXRpbmcpe3ZhciBuLGksYT1lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscz9lLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5zbGljZSgpOltdLG89dC5kYXRhKClbMF1bMF0scz1lLl9mdWxsRGF0YSxsPW8udHJhY2UsdT1sLmxlZ2VuZGdyb3VwLGM9W107aWYoMT09PXImJlQmJmUuZGF0YSYmZS5fY29udGV4dC5zaG93VGlwcz8oZi5ub3RpZmllcigiRG91YmxlIGNsaWNrIG9uIGxlZ2VuZCB0byBpc29sYXRlIGluZGl2aWR1YWwgdHJhY2UiLCJsb25nIiksVD0hMSk6VD0hMSxwLnRyYWNlSXMobCwicGllIikpe3ZhciBkPW8ubGFiZWwsbT1hLmluZGV4T2YoZCk7MT09PXI/LTE9PT1tP2EucHVzaChkKTphLnNwbGljZShtLDEpOjI9PT1yJiYoYT1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goZnVuY3Rpb24odCl7ZCE9PXQubGFiZWwmJmEucHVzaCh0LmxhYmVsKX0pLGUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzJiZlLl9mdWxsTGF5b3V0LmhpZGRlbmxhYmVscy5sZW5ndGg9PT1hLmxlbmd0aCYmLTE9PT1tJiYoYT1bXSkpLGgucmVsYXlvdXQoZSwiaGlkZGVubGFiZWxzIixhKX1lbHNle3ZhciB2LGc9W10seT1bXTtmb3Iodj0wO3Y8cy5sZW5ndGg7disrKWcucHVzaCh2KSx5LnB1c2goISFwLnRyYWNlSXMoc1t2XSwibm90TGVnZW5kSXNvbGF0YWJsZSIpfHwibGVnZW5kb25seSIpO2lmKCIiPT09dSljPVtsLmluZGV4XSx5W2wuaW5kZXhdPSEwO2Vsc2UgZm9yKHY9MDt2PHMubGVuZ3RoO3YrKyluPXNbdl0sbi5sZWdlbmRncm91cD09PXUmJihjLnB1c2gobi5pbmRleCkseVtnLmluZGV4T2YodildPSEwKTtpZigxPT09cilpPSEwIT09bC52aXNpYmxlfHwibGVnZW5kb25seSIsaC5yZXN0eWxlKGUsInZpc2libGUiLGksYyk7ZWxzZSBpZigyPT09cil7dmFyIGI9ITA7Zm9yKHY9MDt2PHMubGVuZ3RoO3YrKylpZihzW3ZdLnZpc2libGUhPT15W3ZdKXtiPSExO2JyZWFrfWImJih5PSEwKTt2YXIgeD1bXTtmb3Iodj0wO3Y8cy5sZW5ndGg7disrKXgucHVzaChnW3ZdKTtoLnJlc3R5bGUoZSwidmlzaWJsZSIseSx4KX19fX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5kYXRhKClbMF1bMF07aWYoIXIudHJhY2Uuc2hvd2xlZ2VuZClyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3ZhciBuLGksYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpLHM9ZS5fZnVsbExheW91dC5sZWdlbmQsbD1zLmZvbnQuc2l6ZSpfO2lmKG8pe3ZhciB1PXYuYkJveChvKTtuPXUuaGVpZ2h0LGk9dS53aWR0aCx2LnNldFRyYW5zbGF0ZShhLDAsbi80KX1lbHNle3ZhciBjPXQuc2VsZWN0KCIubGVnZW5kdGV4dCIpLGg9eS5saW5lQ291bnQoYyksZj1jLm5vZGUoKTtuPWwqaCxpPWY/di5iQm94KGYpLndpZHRoOjA7dmFyIGQ9bCooLjMrKDEtaCkvMik7eS5wb3NpdGlvblRleHQoYyw0MCxkKX1uPU1hdGgubWF4KG4sMTYpKzMsci5oZWlnaHQ9bixyLndpZHRoPWl9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPW4ubGVnZW5kLGE9aS5ib3JkZXJ3aWR0aCxvPWsuaXNHcm91cGVkKGkpLHM9MDtpZihpLndpZHRoPTAsaS5oZWlnaHQ9MCxrLmlzVmVydGljYWwoaSkpbyYmZS5lYWNoKGZ1bmN0aW9uKHQsZSl7di5zZXRUcmFuc2xhdGUodGhpcywwLGUqaS50cmFjZWdyb3VwZ2FwKX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9ZS5oZWlnaHQsbj1lLndpZHRoO3Yuc2V0VHJhbnNsYXRlKHRoaXMsYSw1K2EraS5oZWlnaHQrci8yKSxpLmhlaWdodCs9cixpLndpZHRoPU1hdGgubWF4KGkud2lkdGgsbil9KSxpLndpZHRoKz00NSsyKmEsaS5oZWlnaHQrPTEwKzIqYSxvJiYoaS5oZWlnaHQrPShpLl9sZ3JvdXBzTGVuZ3RoLTEpKmkudHJhY2Vncm91cGdhcCkscz00MDtlbHNlIGlmKG8pe2Zvcih2YXIgbD1baS53aWR0aF0sdT1lLmRhdGEoKSxoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXt2YXIgZD11W2hdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS53aWR0aH0pLHA9NDArTWF0aC5tYXguYXBwbHkobnVsbCxkKTtpLndpZHRoKz1pLnRyYWNlZ3JvdXBnYXArcCxsLnB1c2goaS53aWR0aCl9ZS5lYWNoKGZ1bmN0aW9uKHQsZSl7di5zZXRUcmFuc2xhdGUodGhpcyxsW2VdLDApfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5zZWxlY3QodGhpcyksZT10LnNlbGVjdEFsbCgiZy50cmFjZXMiKSxyPTA7ZS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0sbj1lLmhlaWdodDt2LnNldFRyYW5zbGF0ZSh0aGlzLDAsNSthK3Irbi8yKSxyKz1ufSksaS5oZWlnaHQ9TWF0aC5tYXgoaS5oZWlnaHQscil9KSxpLmhlaWdodCs9MTArMiphLGkud2lkdGgrPTIqYX1lbHNle3ZhciBtPTAsZz0wLHk9MCxiPTA7ci5lYWNoKGZ1bmN0aW9uKHQpe3k9TWF0aC5tYXgoNDArdFswXS53aWR0aCx5KX0pLHIuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9eSxvPWkudHJhY2Vncm91cGdhcHx8NTthK2IrbytyPm4ud2lkdGgtKG4ubWFyZ2luLnIrbi5tYXJnaW4ubCkmJihiPTAsbSs9ZyxpLmhlaWdodD1pLmhlaWdodCtnLGc9MCksdi5zZXRUcmFuc2xhdGUodGhpcyxhK2IsNSthK2UuaGVpZ2h0LzIrbSksaS53aWR0aCs9bytyLGkuaGVpZ2h0PU1hdGgubWF4KGkuaGVpZ2h0LGUuaGVpZ2h0KSxiKz1vK3IsZz1NYXRoLm1heChlLmhlaWdodCxnKX0pLGkud2lkdGgrPTIqYSxpLmhlaWdodCs9MTArMiphfWkud2lkdGg9TWF0aC5jZWlsKGkud2lkdGgpLGkuaGVpZ2h0PU1hdGguY2VpbChpLmhlaWdodCksci5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF07Yy5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVnZW5kdG9nZ2xlIikuY2FsbCh2LnNldFJlY3QsMCwtci5oZWlnaHQvMiwodC5fY29udGV4dC5lZGl0cy5sZWdlbmRUZXh0PzA6aS53aWR0aCkrcyxyLmhlaWdodCl9KX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLmxlZ2VuZCxuPSJsZWZ0IjtBLmlzUmlnaHRBbmNob3Iocik/bj0icmlnaHQiOkEuaXNDZW50ZXJBbmNob3IocikmJihuPSJjZW50ZXIiKTt2YXIgaT0idG9wIjtBLmlzQm90dG9tQW5jaG9yKHIpP2k9ImJvdHRvbSI6QS5pc01pZGRsZUFuY2hvcihyKSYmKGk9Im1pZGRsZSIpLGQuYXV0b01hcmdpbih0LCJsZWdlbmQiLHt4OnIueCx5OnIueSxsOnIud2lkdGgqKHtyaWdodDoxLGNlbnRlcjouNX1bbl18fDApLHI6ci53aWR0aCooe2xlZnQ6MSxjZW50ZXI6LjV9W25dfHwwKSxiOnIuaGVpZ2h0Kih7dG9wOjEsbWlkZGxlOi41fVtpXXx8MCksdDpyLmhlaWdodCooe2JvdHRvbToxLG1pZGRsZTouNX1baV18fDApfSl9ZnVuY3Rpb24gdSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5sZWdlbmQsbj0ibGVmdCI7QS5pc1JpZ2h0QW5jaG9yKHIpP249InJpZ2h0IjpBLmlzQ2VudGVyQW5jaG9yKHIpJiYobj0iY2VudGVyIiksZC5hdXRvTWFyZ2luKHQsImxlZ2VuZCIse3g6ci54LHk6LjUsbDpyLndpZHRoKih7cmlnaHQ6MSxjZW50ZXI6LjV9W25dfHwwKSxyOnIud2lkdGgqKHtsZWZ0OjEsY2VudGVyOi41fVtuXXx8MCksYjowLHQ6MH0pfXZhciBjPXQoImQzIiksaD10KCIuLi8uLi9wbG90bHkiKSxmPXQoIi4uLy4uL2xpYiIpLGQ9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbT10KCIuLi9kcmFnZWxlbWVudCIpLHY9dCgiLi4vZHJhd2luZyIpLGc9dCgiLi4vY29sb3IiKSx5PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGI9dCgiLi9jb25zdGFudHMiKSx4PXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsdz10KCIuL2dldF9sZWdlbmRfZGF0YSIpLE09dCgiLi9zdHlsZSIpLGs9dCgiLi9oZWxwZXJzIiksQT10KCIuL2FuY2hvcl91dGlscyIpLFQ9ITAsUz14LkRCTENMSUNLREVMQVk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlKXtMLmF0dHIoImRhdGEtc2Nyb2xsIixlKS5jYWxsKHYuc2V0VHJhbnNsYXRlLDAsZSksQy5jYWxsKHYuc2V0UmVjdCxOLHQsYi5zY3JvbGxCYXJXaWR0aCxiLnNjcm9sbEJhckhlaWdodCksVC5zZWxlY3QoInJlY3QiKS5hdHRyKHt5OnkuYm9yZGVyd2lkdGgtZX0pfXZhciByPXQuX2Z1bGxMYXlvdXQsbz0ibGVnZW5kIityLl91aWQ7aWYoci5faW5mb2xheWVyJiZ0LmNhbGNkYXRhKXt0Ll9sZWdlbmRNb3VzZURvd25UaW1lfHwodC5fbGVnZW5kTW91c2VEb3duVGltZT0wKTt2YXIgeT1yLmxlZ2VuZCx4PXIuc2hvd2xlZ2VuZCYmdyh0LmNhbGNkYXRhLHkpLF89ci5oaWRkZW5sYWJlbHN8fFtdO2lmKCFyLnNob3dsZWdlbmR8fCF4Lmxlbmd0aClyZXR1cm4gci5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLnJlbW92ZSgpLHIuX3RvcGRlZnMuc2VsZWN0KCIjIitvKS5yZW1vdmUoKSx2b2lkIGQuYXV0b01hcmdpbih0LCJsZWdlbmQiKTt2YXIgaz1yLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLmxlZ2VuZCIpLmRhdGEoWzBdKTtrLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cih7Y2xhc3M6ImxlZ2VuZCIsInBvaW50ZXItZXZlbnRzIjoiYWxsIn0pO3ZhciBUPXIuX3RvcGRlZnMuc2VsZWN0QWxsKCIjIitvKS5kYXRhKFswXSk7VC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsbykuYXBwZW5kKCJyZWN0Iik7dmFyIEU9ay5zZWxlY3RBbGwoInJlY3QuYmciKS5kYXRhKFswXSk7RS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoe2NsYXNzOiJiZyIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksRS5jYWxsKGcuc3Ryb2tlLHkuYm9yZGVyY29sb3IpLEUuY2FsbChnLmZpbGwseS5iZ2NvbG9yKSxFLnN0eWxlKCJzdHJva2Utd2lkdGgiLHkuYm9yZGVyd2lkdGgrInB4Iik7dmFyIEw9ay5zZWxlY3RBbGwoImcuc2Nyb2xsYm94IikuZGF0YShbMF0pO0wuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInNjcm9sbGJveCIpO3ZhciBDPWsuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhciIpLmRhdGEoWzBdKTtDLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cih7Y2xhc3M6InNjcm9sbGJhciIscng6MjAscnk6Mix3aWR0aDowLGhlaWdodDowfSkuY2FsbChnLmZpbGwsIiM4MDhCQTQiKTt2YXIgej1MLnNlbGVjdEFsbCgiZy5ncm91cHMiKS5kYXRhKHgpO3ouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyb3VwcyIpLHouZXhpdCgpLnJlbW92ZSgpO3ZhciBJPXouc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmRhdGEoZi5pZGVudGl0eSk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2VzIiksSS5leGl0KCkucmVtb3ZlKCksSS5jYWxsKE0sdCkuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuIHAudHJhY2VJcyhlLCJwaWUiKT8tMSE9PV8uaW5kZXhPZih0WzBdLmxhYmVsKT8uNToxOiJsZWdlbmRvbmx5Ij09PWUudmlzaWJsZT8uNToxfSkuZWFjaChmdW5jdGlvbigpe2Muc2VsZWN0KHRoaXMpLmNhbGwobix0KS5jYWxsKGksdCl9KTt2YXIgRD0wIT09ay5lbnRlcigpLnNpemUoKTtEJiYocyh0LHosSSksbCh0KSk7dmFyIFA9ci53aWR0aCxPPXIuaGVpZ2h0O3ModCx6LEkpLHkuaGVpZ2h0Pk8/dSh0KTpsKHQpO3ZhciBSPXIuX3NpemUsRj1SLmwrUi53KnkueCxqPVIudCtSLmgqKDEteS55KTtBLmlzUmlnaHRBbmNob3IoeSk/Ri09eS53aWR0aDpBLmlzQ2VudGVyQW5jaG9yKHkpJiYoRi09eS53aWR0aC8yKSxBLmlzQm90dG9tQW5jaG9yKHkpP2otPXkuaGVpZ2h0OkEuaXNNaWRkbGVBbmNob3IoeSkmJihqLT15LmhlaWdodC8yKTt2YXIgTj15LndpZHRoLEI9Ui53O04+Qj8oRj1SLmwsTj1CKTooRitOPlAmJihGPVAtTiksRjwwJiYoRj0wKSxOPU1hdGgubWluKFAtRix5LndpZHRoKSk7dmFyIFU9eS5oZWlnaHQsVj1SLmg7VT5WPyhqPVIudCxVPVYpOihqK1U+TyYmKGo9Ty1VKSxqPDAmJihqPTApLFU9TWF0aC5taW4oTy1qLHkuaGVpZ2h0KSksdi5zZXRUcmFuc2xhdGUoayxGLGopO3ZhciBILHEsRz1VLWIuc2Nyb2xsQmFySGVpZ2h0LTIqYi5zY3JvbGxCYXJNYXJnaW4sWT15LmhlaWdodC1VO2lmKHkuaGVpZ2h0PD1VfHx0Ll9jb250ZXh0LnN0YXRpY1Bsb3QpRS5hdHRyKHt3aWR0aDpOLXkuYm9yZGVyd2lkdGgsaGVpZ2h0OlUteS5ib3JkZXJ3aWR0aCx4OnkuYm9yZGVyd2lkdGgvMix5OnkuYm9yZGVyd2lkdGgvMn0pLHYuc2V0VHJhbnNsYXRlKEwsMCwwKSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOk4tMip5LmJvcmRlcndpZHRoLGhlaWdodDpVLTIqeS5ib3JkZXJ3aWR0aCx4OnkuYm9yZGVyd2lkdGgseTp5LmJvcmRlcndpZHRofSksTC5jYWxsKHYuc2V0Q2xpcFVybCxvKTtlbHNle0g9Yi5zY3JvbGxCYXJNYXJnaW4scT1MLmF0dHIoImRhdGEtc2Nyb2xsIil8fDAsRS5hdHRyKHt3aWR0aDpOLTIqeS5ib3JkZXJ3aWR0aCtiLnNjcm9sbEJhcldpZHRoK2Iuc2Nyb2xsQmFyTWFyZ2luLGhlaWdodDpVLXkuYm9yZGVyd2lkdGgseDp5LmJvcmRlcndpZHRoLzIseTp5LmJvcmRlcndpZHRoLzJ9KSxULnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOk4tMip5LmJvcmRlcndpZHRoK2Iuc2Nyb2xsQmFyV2lkdGgrYi5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OlUtMip5LmJvcmRlcndpZHRoLHg6eS5ib3JkZXJ3aWR0aCx5OnkuYm9yZGVyd2lkdGgtcX0pLEwuY2FsbCh2LnNldENsaXBVcmwsbyksRCYmZShILHEpLGsub24oIndoZWVsIixudWxsKSxrLm9uKCJ3aGVlbCIsZnVuY3Rpb24oKXtxPWYuY29uc3RyYWluKEwuYXR0cigiZGF0YS1zY3JvbGwiKS1jLmV2ZW50LmRlbHRhWS9HKlksLVksMCksSD1iLnNjcm9sbEJhck1hcmdpbi1xL1kqRyxlKEgscSksMCE9PXEmJnEhPT0tWSYmYy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSksQy5vbigiLmRyYWciLG51bGwpLEwub24oIi5kcmFnIixudWxsKTt2YXIgWD1jLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZyIsZnVuY3Rpb24oKXtIPWYuY29uc3RyYWluKGMuZXZlbnQueS1iLnNjcm9sbEJhckhlaWdodC8yLGIuc2Nyb2xsQmFyTWFyZ2luLGIuc2Nyb2xsQmFyTWFyZ2luK0cpLHE9LShILWIuc2Nyb2xsQmFyTWFyZ2luKS9HKlksZShILHEpfSk7Qy5jYWxsKFgpLEwuY2FsbChYKX1pZih0Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uKXt2YXIgVyxaLEosSztrLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCksbS5pbml0KHtlbGVtZW50Omsubm9kZSgpLGdkOnQscHJlcEZuOmZ1bmN0aW9uKCl7dmFyIHQ9di5nZXRUcmFuc2xhdGUoayk7Sj10LngsSz10Lnl9LG1vdmVGbjpmdW5jdGlvbih0LGUpe3ZhciByPUordCxuPUsrZTt2LnNldFRyYW5zbGF0ZShrLHIsbiksVz1tLmFsaWduKHIsMCxSLmwsUi5sK1Iudyx5LnhhbmNob3IpLFo9bS5hbGlnbihuLDAsUi50K1IuaCxSLnQseS55YW5jaG9yKX0sZG9uZUZuOmZ1bmN0aW9uKGUsbixpKXtpZihlJiZ2b2lkIDAhPT1XJiZ2b2lkIDAhPT1aKWgucmVsYXlvdXQodCx7ImxlZ2VuZC54IjpXLCJsZWdlbmQueSI6Wn0pO2Vsc2V7dmFyIG89ci5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy50cmFjZXMiKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBpLmNsaWVudFg+PXQubGVmdCYmaS5jbGllbnRYPD10LnJpZ2h0JiZpLmNsaWVudFk+PXQudG9wJiZpLmNsaWVudFk8PXQuYm90dG9tfSk7by5zaXplKCk+MCYmKDE9PT1uP2suX2NsaWNrVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YShvLHQsbil9LFMpOjI9PT1uJiYoay5fY2xpY2tUaW1lb3V0JiZjbGVhclRpbWVvdXQoay5fY2xpY2tUaW1lb3V0KSxhKG8sdCxuKSkpfX19KX19fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2FuY2hvcl91dGlscyI6NjUyLCIuL2NvbnN0YW50cyI6NjU0LCIuL2dldF9sZWdlbmRfZGF0YSI6NjU3LCIuL2hlbHBlcnMiOjY1OCwiLi9zdHlsZSI6NjYwLGQzOjEyMH1dLDY1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LHIpe2lmKCIiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT1sLmluZGV4T2YodCk/KGwucHVzaCh0KSx1PSEwLHNbdF09W1tyXV0pOnNbdF0ucHVzaChbcl0pO2Vsc2V7CnZhciBuPSJ+fmkiK2g7bC5wdXNoKG4pLHNbbl09W1tyXV0saCsrfX12YXIgYSxvLHM9e30sbD1bXSx1PSExLGM9e30saD0wO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBmPXRbYV0sZD1mWzBdLHA9ZC50cmFjZSxtPXAubGVnZW5kZ3JvdXA7aWYoaS5sZWdlbmRHZXRzVHJhY2UocCkmJnAuc2hvd2xlZ2VuZClpZihuLnRyYWNlSXMocCwicGllIikpZm9yKGNbbV18fChjW21dPXt9KSxvPTA7bzxmLmxlbmd0aDtvKyspe3ZhciB2PWZbb10ubGFiZWw7Y1ttXVt2XXx8KHIobSx7bGFiZWw6dixjb2xvcjpmW29dLmNvbG9yLGk6ZltvXS5pLHRyYWNlOnB9KSxjW21dW3ZdPSEwKX1lbHNlIHIobSxkKX1pZighbC5sZW5ndGgpcmV0dXJuW107dmFyIGcseSxiPWwubGVuZ3RoO2lmKHUmJmkuaXNHcm91cGVkKGUpKWZvcih5PW5ldyBBcnJheShiKSxhPTA7YTxiO2ErKylnPXNbbFthXV0seVthXT1pLmlzUmV2ZXJzZWQoZSk/Zy5yZXZlcnNlKCk6ZztlbHNle2Zvcih5PVtuZXcgQXJyYXkoYildLGE9MDthPGI7YSsrKWc9c1tsW2FdXVswXSx5WzBdW2kuaXNSZXZlcnNlZChlKT9iLWEtMTphXT1nO2I9MX1yZXR1cm4gZS5fbGdyb3Vwc0xlbmd0aD1iLHl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vaGVscGVycyI6NjU4fV0sNjU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ci5sZWdlbmRHZXRzVHJhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmbi50cmFjZUlzKHQsInNob3dMZWdlbmQiKX0sci5pc0dyb3VwZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigiZ3JvdXBlZCIpfSxyLmlzVmVydGljYWw9ZnVuY3Rpb24odCl7cmV0dXJuImgiIT09dC5vcmllbnRhdGlvbn0sci5pc1JldmVyc2VkPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09KHQudHJhY2VvcmRlcnx8IiIpLmluZGV4T2YoInJldmVyc2VkIil9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImxlZ2VuZCIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxzdHlsZTp0KCIuL3N0eWxlIil9fSx7Ii4vYXR0cmlidXRlcyI6NjUzLCIuL2RlZmF1bHRzIjo2NTUsIi4vZHJhdyI6NjU2LCIuL3N0eWxlIjo2NjB9XSw2NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uL2NvbG9yIiksbD10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLHU9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLnZpc2libGUmJmUuZmlsbCYmIm5vbmUiIT09ZS5maWxsLGk9bC5oYXNMaW5lcyhlKTtlJiZlLl9tb2R1bGUmJiJjb250b3VyY2FycGV0Ij09PWUuX21vZHVsZS5uYW1lJiYoaT1lLmNvbnRvdXJzLnNob3dsaW5lcyxyPSJmaWxsIj09PWUuY29udG91cnMuY29sb3JpbmcpO3ZhciBhPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLmxlZ2VuZGZpbGwiKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKHI/W3RdOltdKTthLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtZmlsbCIsITApLGEuZXhpdCgpLnJlbW92ZSgpLGEuYXR0cigiZCIsIk01LDBoMzB2NmgtMzB6IikuY2FsbChvLmZpbGxHcm91cFN0eWxlKTt2YXIgcz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoIi5sZWdlbmRsaW5lcyIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoaT9bdF06W10pO3MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuYXR0cigiZCIsIk01LDBoMzAiKSxzLmV4aXQoKS5yZW1vdmUoKSxzLmNhbGwoby5saW5lR3JvdXBTdHlsZSl9ZnVuY3Rpb24gYyh0KXtmdW5jdGlvbiByKHQsZSxyKXt2YXIgbj1hLm5lc3RlZFByb3BlcnR5KGgsdCkuZ2V0KCksaT1BcnJheS5pc0FycmF5KG4pJiZlP2Uobik6bjtpZihyKXtpZihpPHJbMF0pcmV0dXJuIHJbMF07aWYoaT5yWzFdKXJldHVybiByWzFdfXJldHVybiBpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMF19dmFyIHMsdSxjPXRbMF0saD1jLnRyYWNlLGY9bC5oYXNNYXJrZXJzKGgpLGQ9bC5oYXNUZXh0KGgpLHA9bC5oYXNMaW5lcyhoKTtpZihmfHxkfHxwKXt2YXIgbT17fSx2PXt9O2YmJihtLm1jPXIoIm1hcmtlci5jb2xvciIsaSksbS5tbz1yKCJtYXJrZXIub3BhY2l0eSIsYS5tZWFuLFsuMiwxXSksbS5tcz1yKCJtYXJrZXIuc2l6ZSIsYS5tZWFuLFsyLDE2XSksbS5tbGM9cigibWFya2VyLmxpbmUuY29sb3IiLGkpLG0ubWx3PXIoIm1hcmtlci5saW5lLndpZHRoIixhLm1lYW4sWzAsNV0pLHYubWFya2VyPXtzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9KSxwJiYodi5saW5lPXt3aWR0aDpyKCJsaW5lLndpZHRoIixpLFswLDEwXSl9KSxkJiYobS50eD0iQWEiLG0udHA9cigidGV4dHBvc2l0aW9uIixpKSxtLnRzPTEwLG0udGM9cigidGV4dGZvbnQuY29sb3IiLGkpLG0udGY9cigidGV4dGZvbnQuZmFtaWx5IixpKSkscz1bYS5taW5FeHRlbmQoYyxtKV0sdT1hLm1pbkV4dGVuZChoLHYpfXZhciBnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSx5PWcuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKGY/czpbXSk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMjAsMCkiKSx5LmV4aXQoKS5yZW1vdmUoKSx5LmNhbGwoby5wb2ludFN0eWxlLHUsZSksZiYmKHNbMF0ubXJjPTMpO3ZhciBiPWcuc2VsZWN0QWxsKCJnLnBvaW50dGV4dCIpLmRhdGEoZD9zOltdKTtiLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicG9pbnR0ZXh0IiwhMCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksYi5leGl0KCkucmVtb3ZlKCksYi5zZWxlY3RBbGwoInRleHQiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUsdSxlKX1mdW5jdGlvbiBoKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1lLm1hcmtlcnx8e30sYT1yLmxpbmV8fHt9LG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRiYXIiKS5kYXRhKGkudHJhY2VJcyhlLCJiYXIiKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRiYXIiLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLG8uZXhpdCgpLnJlbW92ZSgpLG8uZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxpPXRbMF0sbz0oaS5tbHcrMXx8YS53aWR0aCsxKS0xO2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKS5jYWxsKHMuZmlsbCxpLm1jfHxyLmNvbG9yKSxvJiZlLmNhbGwocy5zdHJva2UsaS5tbGN8fGEuY29sb3IpfSl9ZnVuY3Rpb24gZih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRib3giKS5kYXRhKGkudHJhY2VJcyhlLCJib3giKSYmZS52aXNpYmxlP1t0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZGJveCIsITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDIwLDApIiksci5leGl0KCkucmVtb3ZlKCksci5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5saW5lLndpZHRoLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSgic3Ryb2tlLXdpZHRoIix0KyJweCIpLmNhbGwocy5maWxsLGUuZmlsbGNvbG9yKSx0JiZyLmNhbGwocy5zdHJva2UsZS5saW5lLmNvbG9yKX0pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kcGllIikuZGF0YShpLnRyYWNlSXMoZSwicGllIikmJmUudmlzaWJsZT9bdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRwaWUiLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgyMCwwKSIpLHIuZXhpdCgpLnJlbW92ZSgpLHIuc2l6ZSgpJiZyLmNhbGwodSx0WzBdLGUpfXQuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPWUuc2VsZWN0QWxsKCJnLmxheWVycyIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXJzIiwhMCksci5zdHlsZSgib3BhY2l0eSIsdFswXS50cmFjZS5vcGFjaXR5KSxyLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLHIuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgaT1yLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksaS5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KS5lYWNoKGgpLmVhY2goZikuZWFjaChkKS5lYWNoKHIpLmVhY2goYyl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi8uLi90cmFjZXMvcGllL3N0eWxlX29uZSI6MTAxMSwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL2NvbG9yIjo2MDIsIi4uL2RyYXdpbmciOjYyNixkMzoxMjB9XSw2NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByLG4saT1lLmN1cnJlbnRUYXJnZXQsYT1pLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksbz1pLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAscz10Ll9mdWxsTGF5b3V0LGw9e30sdT1mLmxpc3QodCxudWxsLCEwKSxoPSJvbiI7aWYoInpvb20iPT09YSl7dmFyIGQscD0iaW4iPT09bz8uNToyLG09KDErcCkvMix2PSgxLXApLzI7Zm9yKG49MDtuPHUubGVuZ3RoO24rKylpZihyPXVbbl0sIXIuZml4ZWRyYW5nZSlpZihkPXIuX25hbWUsImF1dG8iPT09bylsW2QrIi5hdXRvcmFuZ2UiXT0hMDtlbHNlIGlmKCJyZXNldCI9PT1vKXtpZih2b2lkIDA9PT1yLl9yYW5nZUluaXRpYWwpbFtkKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgZz1yLl9yYW5nZUluaXRpYWwuc2xpY2UoKTtsW2QrIi5yYW5nZVswXSJdPWdbMF0sbFtkKyIucmFuZ2VbMV0iXT1nWzFdfXZvaWQgMCE9PXIuX3Nob3dTcGlrZUluaXRpYWwmJihsW2QrIi5zaG93c3Bpa2VzIl09ci5fc2hvd1NwaWtlSW5pdGlhbCwib24iIT09aHx8ci5fc2hvd1NwaWtlSW5pdGlhbHx8KGg9Im9mZiIpKX1lbHNle3ZhciB5PVtyLnIybChyLnJhbmdlWzBdKSxyLnIybChyLnJhbmdlWzFdKV0sYj1bbSp5WzBdK3YqeVsxXSxtKnlbMV0rdip5WzBdXTtsW2QrIi5yYW5nZVswXSJdPXIubDJyKGJbMF0pLGxbZCsiLnJhbmdlWzFdIl09ci5sMnIoYlsxXSl9cy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1ofWVsc2V7aWYoImhvdmVybW9kZSIhPT1hfHwieCIhPT1vJiYieSIhPT1vKXtpZigiaG92ZXJtb2RlIj09PWEmJiJjbG9zZXN0Ij09PW8pe2ZvcihuPTA7bjx1Lmxlbmd0aDtuKyspcj11W25dLCJvbiIhPT1ofHxyLnNob3dzcGlrZXN8fChoPSJvZmYiKTtzLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWh9fWVsc2Ugbz1zLl9pc0hvcml6PyJ5IjoieCIsaS5zZXRBdHRyaWJ1dGUoImRhdGEtdmFsIixvKSwiY2xvc2VzdCIhPT1vJiYocy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD0ib2ZmIik7bFthXT1vfWMucmVsYXlvdXQodCxsKX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldCxuPXIuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxpPXIuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxhPXQuX2Z1bGxMYXlvdXQsbz1oLmdldFN1YnBsb3RJZHMoYSwiZ2wzZCIpLHM9e30sbD1uLnNwbGl0KCIuIiksdT0wO3U8by5sZW5ndGg7dSsrKXNbb1t1XSsiLiIrbFsxXV09aTtjLnJlbGF5b3V0KHQscyl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksaT10Ll9mdWxsTGF5b3V0LGE9aC5nZXRTdWJwbG90SWRzKGksImdsM2QiKSxvPXt9LHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGw9YVtzXSx1PWwrIi5jYW1lcmEiLGY9aVtsXS5fc2NlbmU7InJlc2V0RGVmYXVsdCI9PT1uP29bdV09bnVsbDoicmVzZXRMYXN0U2F2ZSI9PT1uJiYob1t1XT1kLmV4dGVuZERlZXAoe30sZi5jYW1lcmFJbml0aWFsKSl9Yy5yZWxheW91dCh0LG8pfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLl9wcmV2aW91c1ZhbHx8ITEsaT10LmxheW91dCxhPXQuX2Z1bGxMYXlvdXQsbz1oLmdldFN1YnBsb3RJZHMoYSwiZ2wzZCIpLHM9WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxsPVsic2hvd3NwaWtlcyIsInNwaWtlc2lkZXMiLCJzcGlrZXRoaWNrbmVzcyIsInNwaWtlY29sb3IiXSx1PXt9LGY9e30scD17fTtpZihuKXA9ZC5leHRlbmREZWVwKGksbiksci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle3A9eyJhbGxheGVzLnNob3dzcGlrZXMiOiExfTtmb3IodmFyIG09MDttPG8ubGVuZ3RoO20rKyl7dmFyIHY9b1ttXSxnPWFbdl0seT11W3ZdPXt9O3kuaG92ZXJtb2RlPWcuaG92ZXJtb2RlLHBbdisiLmhvdmVybW9kZSJdPSExO2Zvcih2YXIgYj0wO2I8MztiKyspe3ZhciB4PXNbYl07Zj15W3hdPXt9O2Zvcih2YXIgXz0wO188bC5sZW5ndGg7XysrKXt2YXIgdz1sW19dO2Zbd109Z1t4XVt3XX19fXIuX3ByZXZpb3VzVmFsPWQuZXh0ZW5kRGVlcCh7fSx1KX1jLnJlbGF5b3V0KHQscCl9ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsbj1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsYT10Ll9mdWxsTGF5b3V0LG89aC5nZXRTdWJwbG90SWRzKGEsImdlbyIpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9YVtvW3NdXS5fc3VicGxvdDtpZigiem9vbSI9PT1uKXt2YXIgdT1sLnByb2plY3Rpb24uc2NhbGUoKSxjPSJpbiI9PT1pPzIqdTouNSp1O2wucHJvamVjdGlvbi5zY2FsZShjKSxsLnpvb20uc2NhbGUoYyksbC5yZW5kZXIoKX1lbHNlInJlc2V0Ij09PW4mJmwuem9vbVJlc2V0KCl9fWZ1bmN0aW9uIGwodCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0O2U9ci5faGFzKCJjYXJ0ZXNpYW4iKT9yLl9pc0hvcml6PyJ5IjoieCI6ImNsb3Nlc3QiO3ZhciBuPSF0Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmZTtjLnJlbGF5b3V0KHQsImhvdmVybW9kZSIsbil9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGUscixuPXQuX2Z1bGxMYXlvdXQsaT1mLmxpc3QodCxudWxsLCEwKSxhPXt9LG89MDtvPGkubGVuZ3RoO28rKyllPWlbb10scj1lLl9uYW1lLGFbcisiLnNob3dzcGlrZXMiXT0ib24iPT09bi5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtyZXR1cm4gYX12YXIgYz10KCIuLi8uLi9wbG90bHkiKSxoPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vLi4vbGliIikscD10KCIuLi8uLi9zbmFwc2hvdC9kb3dubG9hZCIpLG09dCgiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iKSx2PWUuZXhwb3J0cz17fTt2LnRvSW1hZ2U9e25hbWU6InRvSW1hZ2UiLHRpdGxlOiJEb3dubG9hZCBwbG90IGFzIGEgcG5nIixpY29uOm0uY2FtZXJhLGNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPSJwbmciO2Qubm90aWZpZXIoIlRha2luZyBzbmFwc2hvdCAtIHRoaXMgbWF5IHRha2UgYSBmZXcgc2Vjb25kcyIsImxvbmciKSxkLmlzSUUoKSYmKGQubm90aWZpZXIoIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy4iLCJsb25nIiksZT0ic3ZnIikscCh0LHtmb3JtYXQ6ZX0pLnRoZW4oZnVuY3Rpb24odCl7ZC5ub3RpZmllcigiU25hcHNob3Qgc3VjY2VlZGVkIC0gIit0LCJsb25nIil9KS5jYXRjaChmdW5jdGlvbigpe2Qubm90aWZpZXIoIlNvcnJ5IHRoZXJlIHdhcyBhIHByb2JsZW0gZG93bmxvYWRpbmcgeW91ciBzbmFwc2hvdCEiLCJsb25nIil9KX19LHYuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOiJzZW5kRGF0YVRvQ2xvdWQiLHRpdGxlOiJTYXZlIGFuZCBlZGl0IHBsb3QgaW4gY2xvdWQiLGljb246bS5kaXNrLGNsaWNrOmZ1bmN0aW9uKHQpe2guc2VuZERhdGFUb0Nsb3VkKHQpfX0sdi56b29tMmQ9e25hbWU6Inpvb20yZCIsdGl0bGU6Ilpvb20iLGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246bS56b29tYm94LGNsaWNrOm59LHYucGFuMmQ9e25hbWU6InBhbjJkIix0aXRsZToiUGFuIixhdHRyOiJkcmFnbW9kZSIsdmFsOiJwYW4iLGljb246bS5wYW4sY2xpY2s6bn0sdi5zZWxlY3QyZD17bmFtZToic2VsZWN0MmQiLHRpdGxlOiJCb3ggU2VsZWN0IixhdHRyOiJkcmFnbW9kZSIsdmFsOiJzZWxlY3QiLGljb246bS5zZWxlY3Rib3gsY2xpY2s6bn0sdi5sYXNzbzJkPXtuYW1lOiJsYXNzbzJkIix0aXRsZToiTGFzc28gU2VsZWN0IixhdHRyOiJkcmFnbW9kZSIsdmFsOiJsYXNzbyIsaWNvbjptLmxhc3NvLGNsaWNrOm59LHYuem9vbUluMmQ9e25hbWU6Inpvb21JbjJkIix0aXRsZToiWm9vbSBpbiIsYXR0cjoiem9vbSIsdmFsOiJpbiIsaWNvbjptLnpvb21fcGx1cyxjbGljazpufSx2Lnpvb21PdXQyZD17bmFtZToiem9vbU91dDJkIix0aXRsZToiWm9vbSBvdXQiLGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm0uem9vbV9taW51cyxjbGljazpufSx2LmF1dG9TY2FsZTJkPXtuYW1lOiJhdXRvU2NhbGUyZCIsdGl0bGU6IkF1dG9zY2FsZSIsYXR0cjoiem9vbSIsdmFsOiJhdXRvIixpY29uOm0uYXV0b3NjYWxlLGNsaWNrOm59LHYucmVzZXRTY2FsZTJkPXtuYW1lOiJyZXNldFNjYWxlMmQiLHRpdGxlOiJSZXNldCBheGVzIixhdHRyOiJ6b29tIix2YWw6InJlc2V0IixpY29uOm0uaG9tZSxjbGljazpufSx2LmhvdmVyQ2xvc2VzdENhcnRlc2lhbj17bmFtZToiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIix0aXRsZToiU2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiLGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6bn0sdi5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIsdGl0bGU6IkNvbXBhcmUgZGF0YSBvbiBob3ZlciIsYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjptLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6bn0sdi56b29tM2Q9e25hbWU6Inpvb20zZCIsdGl0bGU6Ilpvb20iLGF0dHI6InNjZW5lLmRyYWdtb2RlIix2YWw6Inpvb20iLGljb246bS56b29tYm94LGNsaWNrOml9LHYucGFuM2Q9e25hbWU6InBhbjNkIix0aXRsZToiUGFuIixhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJwYW4iLGljb246bS5wYW4sY2xpY2s6aX0sdi5vcmJpdFJvdGF0aW9uPXtuYW1lOiJvcmJpdFJvdGF0aW9uIix0aXRsZToib3JiaXRhbCByb3RhdGlvbiIsYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoib3JiaXQiLGljb246bVsiM2Rfcm90YXRlIl0sY2xpY2s6aX0sdi50YWJsZVJvdGF0aW9uPXtuYW1lOiJ0YWJsZVJvdGF0aW9uIix0aXRsZToidHVybnRhYmxlIHJvdGF0aW9uIixhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ0dXJudGFibGUiLGljb246bVsiei1heGlzIl0sY2xpY2s6aX0sdi5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZToicmVzZXRDYW1lcmFEZWZhdWx0M2QiLHRpdGxlOiJSZXNldCBjYW1lcmEgdG8gZGVmYXVsdCIsYXR0cjoicmVzZXREZWZhdWx0IixpY29uOm0uaG9tZSxjbGljazphfSx2LnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZToicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIix0aXRsZToiUmVzZXQgY2FtZXJhIHRvIGxhc3Qgc2F2ZSIsYXR0cjoicmVzZXRMYXN0U2F2ZSIsaWNvbjptLm1vdmllLGNsaWNrOmF9LHYuaG92ZXJDbG9zZXN0M2Q9e25hbWU6ImhvdmVyQ2xvc2VzdDNkIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6b30sdi56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsdGl0bGU6Ilpvb20gaW4iLGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246bS56b29tX3BsdXMsY2xpY2s6c30sdi56b29tT3V0R2VvPXtuYW1lOiJ6b29tT3V0R2VvIix0aXRsZToiWm9vbSBvdXQiLGF0dHI6Inpvb20iLHZhbDoib3V0IixpY29uOm0uem9vbV9taW51cyxjbGljazpzfSx2LnJlc2V0R2VvPXtuYW1lOiJyZXNldEdlbyIsdGl0bGU6IlJlc2V0IixhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjptLmF1dG9zY2FsZSxjbGljazpzfSx2LmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6bH0sdi5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOiJob3ZlckNsb3Nlc3RHbDJkIix0aXRsZToiVG9nZ2xlIHNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIixhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm0udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6bH0sdi5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6ImhvdmVyQ2xvc2VzdFBpZSIsdGl0bGU6IlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIsYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246bS50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazpsfSx2LnRvZ2dsZUhvdmVyPXtuYW1lOiJ0b2dnbGVIb3ZlciIsdGl0bGU6IlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIsYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjptLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7bCh0KSxvKHQsZSl9fSx2LnJlc2V0Vmlld3M9e25hbWU6InJlc2V0Vmlld3MiLHRpdGxlOiJSZXNldCB2aWV3cyIsaWNvbjptLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQ7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInpvb20iKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLCJyZXNldCIpLG4odCxlKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwicmVzZXRMYXN0U2F2ZSIpLGEodCxlKX19LHYudG9nZ2xlU3Bpa2VsaW5lcz17bmFtZToidG9nZ2xlU3Bpa2VsaW5lcyIsdGl0bGU6IlRvZ2dsZSBTcGlrZSBMaW5lcyIsaWNvbjptLnNwaWtlbGluZSxhdHRyOiJfY2FydGVzaWFuU3Bpa2VzRW5hYmxlZCIsdmFsOiJvbiIsY2xpY2s6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPSJjbG9zZXN0Ij09PWUuaG92ZXJtb2RlJiYib24iPT09ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD8ib2ZmIjoib24iO3ZhciByPXUodCk7ci5ob3Zlcm1vZGU9ImNsb3Nlc3QiLGMucmVsYXlvdXQodCxyKX19LHYucmVzZXRWaWV3TWFwYm94PXtuYW1lOiJyZXNldFZpZXdNYXBib3giLHRpdGxlOiJSZXNldCB2aWV3IixhdHRyOiJyZXNldCIsaWNvbjptLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1oLmdldFN1YnBsb3RJZHMoZSwibWFwYm94Iiksbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspZm9yKHZhciBhPXJbaV0sbz1lW2FdLl9zdWJwbG90LHM9by52aWV3SW5pdGlhbCxsPU9iamVjdC5rZXlzKHMpLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGY9bFt1XTtuW2ErIi4iK2ZdPXNbZl19Yy5yZWxheW91dCh0LG4pfX19LHsiLi4vLi4vLi4vYnVpbGQvcGxvdGljb24iOjIsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vLi4vc25hcHNob3QvZG93bmxvYWQiOjg0NH1dLDY2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLm1hbmFnZT10KCIuL21hbmFnZSIpfSx7Ii4vbWFuYWdlIjo2NjN9XSw2NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0KXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dOy0xPT09ZS5pbmRleE9mKGkpJiZyLnB1c2goZltpXSl9Zy5wdXNoKHIpfXZhciBzPXQuX2Z1bGxMYXlvdXQsbD10Ll9mdWxsRGF0YSx1PXMuX2hhcygiY2FydGVzaWFuIiksYz1zLl9oYXMoImdsM2QiKSxoPXMuX2hhcygiZ2VvIiksZD1zLl9oYXMoInBpZSIpLHA9cy5faGFzKCJnbDJkIiksbT1zLl9oYXMoInRlcm5hcnkiKSx2PXMuX2hhcygibWFwYm94IiksZz1bXTtpZihuKFsidG9JbWFnZSIsInNlbmREYXRhVG9DbG91ZCJdKSwodXx8cHx8ZHx8bSkraCtjPjEpcmV0dXJuIG4oWyJyZXNldFZpZXdzIiwidG9nZ2xlSG92ZXIiXSksbyhnLHIpO2MmJihuKFsiem9vbTNkIiwicGFuM2QiLCJvcmJpdFJvdGF0aW9uIiwidGFibGVSb3RhdGlvbiJdKSxuKFsicmVzZXRDYW1lcmFEZWZhdWx0M2QiLCJyZXNldENhbWVyYUxhc3RTYXZlM2QiXSksbihbImhvdmVyQ2xvc2VzdDNkIl0pKSxoJiYobihbInpvb21JbkdlbyIsInpvb21PdXRHZW8iLCJyZXNldEdlbyJdKSxuKFsiaG92ZXJDbG9zZXN0R2VvIl0pKTt2YXIgeT1pKHMpLGI9W107cmV0dXJuKCh1fHxwKSYmIXl8fG0pJiYoYj1bInpvb20yZCIsInBhbjJkIl0pLHYmJihiPVsicGFuMmQiXSksYShsKSYmKGIucHVzaCgic2VsZWN0MmQiKSxiLnB1c2goImxhc3NvMmQiKSksYi5sZW5ndGgmJm4oYiksIXUmJiFwfHx5fHxtfHxuKFsiem9vbUluMmQiLCJ6b29tT3V0MmQiLCJhdXRvU2NhbGUyZCIsInJlc2V0U2NhbGUyZCJdKSx1JiZkP24oWyJ0b2dnbGVIb3ZlciJdKTpwP24oWyJob3ZlckNsb3Nlc3RHbDJkIl0pOnU/bihbInRvZ2dsZVNwaWtlbGluZXMiLCJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSk6ZD9uKFsiaG92ZXJDbG9zZXN0UGllIl0pOnYmJm4oWyJyZXNldFZpZXdNYXBib3giLCJ0b2dnbGVIb3ZlciJdKSxvKGcscil9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9bC5saXN0KHtfZnVsbExheW91dDp0fSxudWxsLCEwKSxyPSEwLG49MDtuPGUubGVuZ3RoO24rKylpZighZVtuXS5maXhlZHJhbmdlKXtyPSExO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPSExLHI9MDtyPHQubGVuZ3RoJiYhZTtyKyspe3ZhciBuPXRbcl07bi5fbW9kdWxlJiZuLl9tb2R1bGUuc2VsZWN0UG9pbnRzJiYoYy50cmFjZUlzKG4sInNjYXR0ZXItbGlrZSIpPyh1Lmhhc01hcmtlcnMobil8fHUuaGFzVGV4dChuKSkmJihlPSEwKTplPSEwKX1yZXR1cm4gZX1mdW5jdGlvbiBvKHQsZSl7aWYoZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSlmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2goZVtyXSk7ZWxzZSB0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylmb3IodmFyIHI9dFtlXSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoInN0cmluZyI9PXR5cGVvZiBpKXtpZih2b2lkIDA9PT1mW2ldKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9ucyogY29uZmlndXJhdGlvbiBvcHRpb25zIiwiaW52YWxpZCBidXR0b24gbmFtZSJdLmpvaW4oIiAiKSk7dFtlXVtuXT1mW2ldfX1yZXR1cm4gdH12YXIgbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHU9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxjPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaD10KCIuL21vZGViYXIiKSxmPXQoIi4vYnV0dG9ucyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fY29udGV4dCxpPWUuX21vZGVCYXI7aWYoIXIuZGlzcGxheU1vZGVCYXIpcmV0dXJuIHZvaWQoaSYmKGkuZGVzdHJveSgpLGRlbGV0ZSBlLl9tb2RlQmFyKSk7aWYoIUFycmF5LmlzQXJyYXkoci5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlKSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnNUb1JlbW92ZSogY29uZmlndXJhdGlvbiBvcHRpb25zIiwibXVzdCBiZSBhbiBhcnJheS4iXS5qb2luKCIgIikpO2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb0FkZCkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9BZGQqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTt2YXIgYSxvPXIubW9kZUJhckJ1dHRvbnM7YT1BcnJheS5pc0FycmF5KG8pJiZvLmxlbmd0aD9zKG8pOm4odCxyLm1vZGVCYXJCdXR0b25zVG9SZW1vdmUsci5tb2RlQmFyQnV0dG9uc1RvQWRkKSxpP2kudXBkYXRlKHQsYSk6ZS5fbW9kZUJhcj1oKHQsYSl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LCIuL2J1dHRvbnMiOjY2MSwiLi9tb2RlYmFyIjo2NjR9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy51cGRhdGUodC5ncmFwaEluZm8sdC5idXR0b25zKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9bmV3IG4oe2dyYXBoSW5mbzp0LGNvbnRhaW5lcjpyLl9wYXBlcmRpdi5ub2RlKCksYnV0dG9uczplfSk7cmV0dXJuIHIuX3ByaXZhdGVwbG90JiZhLnNlbGVjdChpLmVsZW1lbnQpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoImJhZGdlLXByaXZhdGUgZmxvYXQtLWxlZnQiLCEwKS50ZXh0KCJQUklWQVRFIiksaX12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiIpLGw9bi5wcm90b3R5cGU7bC51cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdyYXBoSW5mbz10O3ZhciByPXRoaXMuZ3JhcGhJbmZvLl9jb250ZXh0OyJob3ZlciI9PT1yLmRpc3BsYXlNb2RlQmFyP3RoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIgbW9kZWJhci0taG92ZXIiOnRoaXMuZWxlbWVudC5jbGFzc05hbWU9Im1vZGViYXIiO3ZhciBuPSF0aGlzLmhhc0J1dHRvbnMoZSksaT10aGlzLmhhc0xvZ28hPT1yLmRpc3BsYXlsb2dvOyhufHxpKSYmKHRoaXMucmVtb3ZlQWxsQnV0dG9ucygpLHRoaXMudXBkYXRlQnV0dG9ucyhlKSxyLmRpc3BsYXlsb2dvJiYodGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ2V0TG9nbygpKSx0aGlzLmhhc0xvZ289ITApKSx0aGlzLnVwZGF0ZUFjdGl2ZUJ1dHRvbigpfSxsLnVwZGF0ZUJ1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmJ1dHRvbnM9dCx0aGlzLmJ1dHRvbkVsZW1lbnRzPVtdLHRoaXMuYnV0dG9uc05hbWVzPVtdLHRoaXMuYnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciByPWUuY3JlYXRlR3JvdXAoKTt0LmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dC5uYW1lO2lmKCFuKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnbmFtZScgaW4gYnV0dG9uIGNvbmZpZyIpO2lmKC0xIT09ZS5idXR0b25zTmFtZXMuaW5kZXhPZihuKSl0aHJvdyBuZXcgRXJyb3IoImJ1dHRvbiBuYW1lICciK24rIicgaXMgdGFrZW4iKTtlLmJ1dHRvbnNOYW1lcy5wdXNoKG4pO3ZhciBpPWUuY3JlYXRlQnV0dG9uKHQpO2UuYnV0dG9uRWxlbWVudHMucHVzaChpKSxyLmFwcGVuZENoaWxkKGkpfSksZS5lbGVtZW50LmFwcGVuZENoaWxkKHIpfSl9LGwuY3JlYXRlR3JvdXA9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5jbGFzc05hbWU9Im1vZGViYXItZ3JvdXAiLHR9LGwuY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoInJlbCIsInRvb2x0aXAiKSxyLmNsYXNzTmFtZT0ibW9kZWJhci1idG4iO3ZhciBuPXQudGl0bGU7dm9pZCAwPT09biYmKG49dC5uYW1lKSwobnx8MD09PW4pJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsbiksdm9pZCAwIT09dC5hdHRyJiZyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIix0LmF0dHIpO3ZhciBpPXQudmFsO2lmKHZvaWQgMCE9PWkmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmKGk9aSh0aGlzLmdyYXBoSW5mbykpLHIuc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsaSkpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LmNsaWNrKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnY2xpY2snIGZ1bmN0aW9uIGluIGJ1dHRvbiBjb25maWciKTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24ocil7dC5jbGljayhlLmdyYXBoSW5mbyxyKSxlLnVwZGF0ZUFjdGl2ZUJ1dHRvbihyLmN1cnJlbnRUYXJnZXQpfSksci5zZXRBdHRyaWJ1dGUoImRhdGEtdG9nZ2xlIix0LnRvZ2dsZXx8ITEpLHQudG9nZ2xlJiZhLnNlbGVjdChyKS5jbGFzc2VkKCJhY3RpdmUiLCEwKSxyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlSWNvbih0Lmljb258fHMucXVlc3Rpb24sdC5uYW1lKSksci5zZXRBdHRyaWJ1dGUoImRhdGEtZ3Jhdml0eSIsdC5ncmF2aXR5fHwibiIpLHJ9LGwuY3JlYXRlSWNvbj1mdW5jdGlvbih0LGUpe3ZhciByPXQuYXNjZW50LXQuZGVzY2VudCxuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwic3ZnIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwicGF0aCIpO2kuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxZW0iKSxpLnNldEF0dHJpYnV0ZSgid2lkdGgiLHQud2lkdGgvcisiZW0iKSxpLnNldEF0dHJpYnV0ZSgidmlld0JveCIsWzAsMCx0LndpZHRoLHJdLmpvaW4oIiAiKSk7dmFyIG89InRvZ2dsZVNwaWtlbGluZXMiPT09ZT8ibWF0cml4KDEuNSAwIDAgLTEuNSAwICIrdC5hc2NlbnQrIikiOiJtYXRyaXgoMSAwIDAgLTEgMCAiK3QuYXNjZW50KyIpIjtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoImQiLHQucGF0aCksYS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbyksaS5hcHBlbmRDaGlsZChhKSxpfSxsLnVwZGF0ZUFjdGl2ZUJ1dHRvbj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdyYXBoSW5mby5fZnVsbExheW91dCxyPXZvaWQgMCE9PXQ/dC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpOm51bGw7dGhpcy5idXR0b25FbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxzPSJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIpLGw9YS5zZWxlY3QodCk7aWYocylpPT09ciYmbC5jbGFzc2VkKCJhY3RpdmUiLCFsLmNsYXNzZWQoImFjdGl2ZSIpKTtlbHNle3ZhciB1PW51bGw9PT1pP2k6by5uZXN0ZWRQcm9wZXJ0eShlLGkpLmdldCgpO2wuY2xhc3NlZCgiYWN0aXZlIix1PT09bil9fSl9LGwuaGFzQnV0dG9ucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmJ1dHRvbnM7aWYoIWUpcmV0dXJuITE7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7aWYodFtyXS5sZW5ndGghPT1lW3JdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHRbcl0ubGVuZ3RoO24rKylpZih0W3JdW25dLm5hbWUhPT1lW3JdW25dLm5hbWUpcmV0dXJuITF9cmV0dXJuITB9LGwuZ2V0TG9nbz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3JlYXRlR3JvdXAoKSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS5ocmVmPSJodHRwczovL3Bsb3QubHkvIixlLnRhcmdldD0iX2JsYW5rIixlLnNldEF0dHJpYnV0ZSgiZGF0YS10aXRsZSIsIlByb2R1Y2VkIHdpdGggUGxvdGx5IiksZS5jbGFzc05hbWU9Im1vZGViYXItYnRuIHBsb3RseWpzaWNvbiBtb2RlYmFyLWJ0bi0tbG9nbyIsZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24ocy5wbG90bHlsb2dvKSksdC5hcHBlbmRDaGlsZChlKSx0fSxsLnJlbW92ZUFsbEJ1dHRvbnM9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuZWxlbWVudC5maXJzdENoaWxkOyl0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuaGFzTG9nbz0hMX0sbC5kZXN0cm95PWZ1bmN0aW9uKCl7by5yZW1vdmVFbGVtZW50KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tb2RlYmFyIikpfSxlLmV4cG9ydHM9aX0seyIuLi8uLi8uLi9idWlsZC9wbG90aWNvbiI6MiwiLi4vLi4vbGliIjo3MjQsZDM6MTIwfV0sNjY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuL2J1dHRvbl9hdHRyaWJ1dGVzIik7bz1hKG8se19pc0xpbmtlZFRvQXJyYXk6ImJ1dHRvbiJ9KSxlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxidXR0b25zOm8seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjN9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjN9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iXSxkZmx0OiJib3R0b20ifSxmb250OmEoe30sbix7fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5saWdodExpbmV9LGFjdGl2ZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4vYnV0dG9uX2F0dHJpYnV0ZXMiOjY2Nn1dLDY2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3N0ZXA6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm1vbnRoIiwieWVhciIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJhbGwiXSxkZmx0OiJtb250aCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiYWNrd2FyZCIsInRvZGF0ZSJdLGRmbHQ6ImJhY2t3YXJkIn0sY291bnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIn19fSx7fV0sNjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eVBhZDouMDIsbWluQnV0dG9uV2lkdGg6MzAscng6MyxyeTozLGxpZ2h0QW1vdW50OjI1LGRhcmtBbW91bnQ6MTB9fSx7fV0sNjY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gYS5jb2VyY2UoaSxvLGwsdCxlKX1mb3IodmFyIGksbyxzPXQuYnV0dG9uc3x8W10sdT1lLmJ1dHRvbnM9W10sYz0wO2M8cy5sZW5ndGg7YysrKWlmKGk9c1tjXSxvPXt9LGEuaXNQbGFpbk9iamVjdChpKSl7dmFyIGg9bigic3RlcCIpOyJhbGwiIT09aCYmKCFyfHwiZ3JlZ29yaWFuIj09PXJ8fCJtb250aCIhPT1oJiYieWVhciIhPT1oP24oInN0ZXBtb2RlIik6by5zdGVwbW9kZT0iYmFja3dhcmQiLG4oImNvdW50IikpLG4oImxhYmVsIiksby5faW5kZXg9Yyx1LnB1c2gobyl9cmV0dXJuIHV9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdLmFuY2hvcj09PXQuX2lkfSksaT0wLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89ZVtuW2FdXS5kb21haW47byYmKGk9TWF0aC5tYXgob1sxXSxpKSl9cmV0dXJuW3QuZG9tYWluWzBdLGkrdS55UGFkXX12YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2NvbG9yIikscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXQoIi4vYnV0dG9uX2F0dHJpYnV0ZXMiKSx1PXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwsYyl7ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBhLmNvZXJjZShmLGQscyx0LGUpfXZhciBmPXQucmFuZ2VzZWxlY3Rvcnx8e30sZD1lLnJhbmdlc2VsZWN0b3I9e307aWYoaCgidmlzaWJsZSIsbihmLGQsYykubGVuZ3RoPjApKXt2YXIgcD1pKGUscixsKTtoKCJ4IixwWzBdKSxoKCJ5IixwWzFdKSxhLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxoKCJ4YW5jaG9yIiksaCgieWFuY2hvciIpLGEuY29lcmNlRm9udChoLCJmb250IixyLmZvbnQpO3ZhciBtPWgoImJnY29sb3IiKTtoKCJhY3RpdmVjb2xvciIsby5jb250cmFzdChtLHUubGlnaHRBbW91bnQsdS5kYXJrQW1vdW50KSksaCgiYm9yZGVyY29sb3IiKSxoKCJib3JkZXJ3aWR0aCIpfX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL2NvbG9yIjo2MDIsIi4vYXR0cmlidXRlcyI6NjY1LCIuL2J1dHRvbl9hdHRyaWJ1dGVzIjo2NjYsIi4vY29uc3RhbnRzIjo2Njd9XSw2Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9Zy5saXN0KHQsIngiLCEwKSxyPVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpLnJhbmdlc2VsZWN0b3ImJmkucmFuZ2VzZWxlY3Rvci52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24gYSh0LGUscil7aWYoImFsbCI9PT1lLnN0ZXApcmV0dXJuITA9PT10LmF1dG9yYW5nZTt2YXIgbj1PYmplY3Qua2V5cyhyKTtyZXR1cm4gdC5yYW5nZVswXT09PXJbblswXV0mJnQucmFuZ2VbMV09PT1yW25bMV1dfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShbMF0pO24uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzZWxlY3Rvci1yZWN0IiwhMCksbi5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksbi5hdHRyKHtyeDp4LnJ4LHJ5Ongucnl9KSxuLmNhbGwocC5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChwLmZpbGwscyhlLHIpKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gZS5pc0FjdGl2ZXx8ZS5pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9ZnVuY3Rpb24gbCh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3YuY29udmVydFRvVHNwYW5zKHQsbil9dmFyIGE9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoInNlbGVjdG9yLXRleHQiLCEwKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCksYS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLGEuY2FsbChtLmZvbnQsZS5mb250KS50ZXh0KHUocikpLmNhbGwoaSl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5sYWJlbD90LmxhYmVsOiJhbGwiPT09dC5zdGVwPyJhbGwiOnQuY291bnQrdC5zdGVwLmNoYXJBdCgwKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3Iud2lkdGg9MCxyLmhlaWdodD0wO3ZhciBpPXIuYm9yZGVyd2lkdGg7ZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aC5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxuPXIuZm9udC5zaXplKmIsaT1NYXRoLm1heChuKnYubGluZUNvdW50KGUpLDE2KSszO3IuaGVpZ2h0PU1hdGgubWF4KHIuaGVpZ2h0LGkpfSksZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9aC5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXJlY3QiKSxuPXQuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGE9bi5ub2RlKCkmJm0uYkJveChuLm5vZGUoKSkud2lkdGgsbz1yLmZvbnQuc2l6ZSpiLHM9di5saW5lQ291bnQobiksbD1NYXRoLm1heChhKzEwLHgubWluQnV0dG9uV2lkdGgpO3QuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGkrci53aWR0aCkrIiwiK2krIikiKSxlLmF0dHIoe3g6MCx5OjAsd2lkdGg6bCxoZWlnaHQ6ci5oZWlnaHR9KSx2LnBvc2l0aW9uVGV4dChuLGwvMixyLmhlaWdodC8yLShzLTEpKm8vMiszKSxyLndpZHRoKz1sKzV9KSxlLnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoImhlaWdodCIsci5oZWlnaHQpO3ZhciBhPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1hLmwrYS53KnIueCxyLmx5PWEudCthLmgqKDEtci55KTt2YXIgbz0ibGVmdCI7eS5pc1JpZ2h0QW5jaG9yKHIpJiYoci5seC09ci53aWR0aCxvPSJyaWdodCIpLHkuaXNDZW50ZXJBbmNob3IocikmJihyLmx4LT1yLndpZHRoLzIsbz0iY2VudGVyIik7dmFyIHM9InRvcCI7eS5pc0JvdHRvbUFuY2hvcihyKSYmKHIubHktPXIuaGVpZ2h0LHM9ImJvdHRvbSIpLHkuaXNNaWRkbGVBbmNob3IocikmJihyLmx5LT1yLmhlaWdodC8yLHM9Im1pZGRsZSIpLHIud2lkdGg9TWF0aC5jZWlsKHIud2lkdGgpLHIuaGVpZ2h0PU1hdGguY2VpbChyLmhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxkLmF1dG9NYXJnaW4odCxuKyItcmFuZ2Utc2VsZWN0b3IiLHt4OnIueCx5OnIueSxsOnIud2lkdGgqKHtyaWdodDoxLGNlbnRlcjouNX1bb118fDApLHI6ci53aWR0aCooe2xlZnQ6MSxjZW50ZXI6LjV9W29dfHwwKSxiOnIuaGVpZ2h0Kih7dG9wOjEsbWlkZGxlOi41fVtzXXx8MCksdDpyLmhlaWdodCooe2JvdHRvbToxLG1pZGRsZTouNX1bc118fDApfSl9dmFyIGg9dCgiZDMiKSxmPXQoIi4uLy4uL3Bsb3RseSIpLGQ9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxwPXQoIi4uL2NvbG9yIiksbT10KCIuLi9kcmF3aW5nIiksdj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxnPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHk9dCgiLi4vbGVnZW5kL2FuY2hvcl91dGlscyIpLGI9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyx4PXQoIi4vY29uc3RhbnRzIiksXz10KCIuL2dldF91cGRhdGVfb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIucmFuZ2VzZWxlY3RvciIpLmRhdGEobih0KSxpKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmFuZ2VzZWxlY3RvciIsITApLHIuZXhpdCgpLnJlbW92ZSgpLHIuc3R5bGUoe2N1cnNvcjoicG9pbnRlciIsInBvaW50ZXItZXZlbnRzIjoiYWxsIn0pLHIuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1oLnNlbGVjdCh0aGlzKSxuPWUsaT1uLnJhbmdlc2VsZWN0b3Iscz1yLnNlbGVjdEFsbCgiZy5idXR0b24iKS5kYXRhKGkuYnV0dG9ucyk7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJ1dHRvbiIsITApLHMuZXhpdCgpLnJlbW92ZSgpLHMuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1oLnNlbGVjdCh0aGlzKSxzPV8obixlKTtlLmlzQWN0aXZlPWEobixlLHMpLHIuY2FsbChvLGksZSksci5jYWxsKGwsaSxlLHQpLHIub24oImNsaWNrIixmdW5jdGlvbigpe3QuX2RyYWdnZWR8fGYucmVsYXlvdXQodCxzKX0pLHIub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtlLmlzSG92ZXJlZD0hMCxyLmNhbGwobyxpLGUpfSksci5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7ZS5pc0hvdmVyZWQ9ITEsci5jYWxsKG8saSxlKX0pfSksYyh0LHMsaSxuLl9uYW1lKSxyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2kubHgrIiwiK2kubHkrIikiKX0pfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjcsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4uL2NvbG9yIjo2MDIsIi4uL2RyYXdpbmciOjYyNiwiLi4vbGVnZW5kL2FuY2hvcl91dGlscyI6NjUyLCIuL2NvbnN0YW50cyI6NjY3LCIuL2dldF91cGRhdGVfb2JqZWN0Ijo2NzAsZDM6MTIwfV0sNjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuPXQucmFuZ2UsYT1uZXcgRGF0ZSh0LnIybChuWzFdKSksbz1lLnN0ZXAscz1lLmNvdW50O3N3aXRjaChlLnN0ZXBtb2RlKXtjYXNlImJhY2t3YXJkIjpyPXQubDJyKCtpLnRpbWVbb10udXRjLm9mZnNldChhLC1zKSk7YnJlYWs7Y2FzZSJ0b2RhdGUiOnZhciBsPWkudGltZVtvXS51dGMub2Zmc2V0KGEsLXMpO3I9dC5sMnIoK2kudGltZVtvXS51dGMuY2VpbChsKSl9cmV0dXJuW3IsblsxXV19dmFyIGk9dCgiZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGk9e307aWYoImFsbCI9PT1lLnN0ZXApaVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgYT1uKHQsZSk7aVtyKyIucmFuZ2VbMF0iXT1hWzBdLGlbcisiLnJhbmdlWzFdIl09YVsxXX1yZXR1cm4gaX19LHtkMzoxMjB9XSw2NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InJhbmdlc2VsZWN0b3IiLHNjaGVtYTp7bGF5b3V0OnsieGF4aXMucmFuZ2VzZWxlY3RvciI6dCgiLi9hdHRyaWJ1dGVzIil9fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjY2NSwiLi9kZWZhdWx0cyI6NjY4LCIuL2RyYXciOjY2OX1dLDY3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxib3JkZXJ3aWR0aDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDowLG1pbjowfSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi4xNSxtaW46MCxtYXg6MX0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH19fSx7Ii4uL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMX1dLDY3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdLG89YVtpLm5hbWVdO28mJm8udmlzaWJsZSYmby5hdXRvcmFuZ2UmJmEuX21pbi5sZW5ndGgmJmEuX21heC5sZW5ndGgmJihvLl9pbnB1dC5hdXRvcmFuZ2U9ITAsby5faW5wdXQucmFuZ2U9by5yYW5nZT1uLmdldEF1dG9SYW5nZShhKSl9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2NvbnN0YW50cyI6Njc0fV0sNjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmFuZ2VzbGlkZXIiLGNvbnRhaW5lckNsYXNzTmFtZToicmFuZ2VzbGlkZXItY29udGFpbmVyIixiZ0NsYXNzTmFtZToicmFuZ2VzbGlkZXItYmciLHJhbmdlUGxvdENsYXNzTmFtZToicmFuZ2VzbGlkZXItcmFuZ2VwbG90IixtYXNrTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbiIsbWFza01heENsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1tYXgiLHNsaWRlQm94Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1zbGlkZWJveCIsZ3JhYmJlck1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1taW4iLGdyYWJBcmVhTWluQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1taW4iLGhhbmRsZU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1pbiIsZ3JhYmJlck1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmJlci1tYXgiLGdyYWJBcmVhTWF4Q2xhc3NOYW1lOiJyYW5nZXNsaWRlci1ncmFiYXJlYS1tYXgiLGhhbmRsZU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItaGFuZGxlLW1heCIsbWFza0NvbG9yOiJyZ2JhKDAsMCwwLDAuNCkiLHNsaWRlQm94RmlsbDoidHJhbnNwYXJlbnQiLHNsaWRlQm94Q3Vyc29yOiJldy1yZXNpemUiLGdyYWJBcmVhRmlsbDoidHJhbnNwYXJlbnQiLGdyYWJBcmVhQ3Vyc29yOiJjb2wtcmVzaXplIixncmFiQXJlYVdpZHRoOjEwLGhhbmRsZVdpZHRoOjQsaGFuZGxlUmFkaXVzOjEsaGFuZGxlU3Ryb2tlV2lkdGg6MSxleHRyYVBhZDoxNX19LHt9XSw2NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gbi5jb2VyY2UobyxsLGksdCxlKX1pZih0W3JdLnJhbmdlc2xpZGVyKXtuLmlzUGxhaW5PYmplY3QodFtyXS5yYW5nZXNsaWRlcil8fCh0W3JdLnJhbmdlc2xpZGVyPXt9KTt2YXIgbz10W3JdLnJhbmdlc2xpZGVyLHM9ZVtyXSxsPXMucmFuZ2VzbGlkZXI9e307aWYoYSgidmlzaWJsZSIpKXtpZihhKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksYSgiYm9yZGVyY29sb3IiKSxhKCJib3JkZXJ3aWR0aCIpLGEoInRoaWNrbmVzcyIpLGEoImF1dG9yYW5nZSIsIXMuaXNWYWxpZFJhbmdlKG8ucmFuZ2UpKSxhKCJyYW5nZSIpLGwucmFuZ2Upe3ZhciB1PWwucmFuZ2UsYz1zLnJhbmdlO3VbMF09cy5sMnIoTWF0aC5taW4ocy5yMmwodVswXSkscy5yMmwoY1swXSkpKSx1WzFdPXMubDJyKE1hdGgubWF4KHMucjJsKHVbMV0pLHMucjJsKGNbMV0pKSl9cy5jbGVhblJhbmdlKCJyYW5nZXNsaWRlci5yYW5nZSIpLGwuX2lucHV0PW99fX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6NjcyfV0sNjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dy5saXN0KHtfZnVsbExheW91dDp0fSwieCIsITApLHI9QS5uYW1lLG49W107aWYodC5faGFzKCJnbDJkIikpcmV0dXJuIG47Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07YVtyXSYmYVtyXS52aXNpYmxlJiZuLnB1c2goYSl9cmV0dXJuIG59ZnVuY3Rpb24gaSh0LGUscixuKXt2YXIgaT10LnNlbGVjdCgicmVjdC4iK0Euc2xpZGVCb3hDbGFzc05hbWUpLm5vZGUoKSxvPXQuc2VsZWN0KCJyZWN0LiIrQS5ncmFiQXJlYU1pbkNsYXNzTmFtZSkubm9kZSgpLHM9dC5zZWxlY3QoInJlY3QuIitBLmdyYWJBcmVhTWF4Q2xhc3NOYW1lKS5ub2RlKCk7dC5vbigibW91c2Vkb3duIixmdW5jdGlvbigpe2Z1bmN0aW9uIGwobCl7dmFyIHUsYyx5LGI9K2wuY2xpZW50WC1mO3N3aXRjaChoKXtjYXNlIGk6eT0iZXctcmVzaXplIix1PXArYixjPXYrYjticmVhaztjYXNlIG86eT0iY29sLXJlc2l6ZSIsdT1wK2IsYz12O2JyZWFrO2Nhc2Ugczp5PSJjb2wtcmVzaXplIix1PXAsYz12K2I7YnJlYWs7ZGVmYXVsdDp5PSJldy1yZXNpemUiLHU9ZCxjPWQrYn1pZihjPHUpe3ZhciB4PWM7Yz11LHU9eH1uLl9waXhlbE1pbj11LG4uX3BpeGVsTWF4PWMsayhtLnNlbGVjdChnKSx5KSxhKHQsZSxyLG4pfWZ1bmN0aW9uIHUoKXtnLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCksZy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix1KSx5LnJlbW92ZUVsZW1lbnQoZyl9dmFyIGM9bS5ldmVudCxoPWMudGFyZ2V0LGY9Yy5jbGllbnRYLGQ9Zi10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LHA9bi5kMnAoci5fcmxbMF0pLHY9bi5kMnAoci5fcmxbMV0pLGc9TS5jb3ZlclNsaXAoKTtnLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsbCksZy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix1KX0pfWZ1bmN0aW9uIGEodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5sMnIoeS5jb25zdHJhaW4odCxuLl9ybFswXSxuLl9ybFsxXSkpfXZhciBhPWkobi5wMmQobi5fcGl4ZWxNaW4pKSxvPWkobi5wMmQobi5fcGl4ZWxNYXgpKTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7di5yZWxheW91dChlLHIuX25hbWUrIi5yYW5nZSIsW2Esb10pfSl9ZnVuY3Rpb24gbyh0LGUscixuKXtmdW5jdGlvbiBpKHQpe3JldHVybiB5LmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHkuY29uc3RyYWluKHQsLW8sbi5fd2lkdGgrbyl9dmFyIG89QS5oYW5kbGVXaWR0aC8yLHM9aShuLmQycChyLl9ybFswXSkpLGw9aShuLmQycChyLl9ybFsxXSkpO3Quc2VsZWN0KCJyZWN0LiIrQS5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIscykuYXR0cigid2lkdGgiLGwtcyksdC5zZWxlY3QoInJlY3QuIitBLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixzKSx0LnNlbGVjdCgicmVjdC4iK0EubWFza01heENsYXNzTmFtZSkuYXR0cigieCIsbCkuYXR0cigid2lkdGgiLG4uX3dpZHRoLWwpO3ZhciB1PU1hdGgucm91bmQoYShzLW8pKS0uNSxjPU1hdGgucm91bmQoYShsLW8pKSsuNTt0LnNlbGVjdCgiZy4iK0EuZ3JhYmJlck1pbkNsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLDAuNSkiKSx0LnNlbGVjdCgiZy4iK0EuZ3JhYmJlck1heENsYXNzTmFtZSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYysiLDAuNSkiKX1mdW5jdGlvbiBzKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJyZWN0LiIrQS5iZ0NsYXNzTmFtZSkuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKEEuYmdDbGFzc05hbWUsITApLmF0dHIoe3g6MCx5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSk7dmFyIGE9bi5ib3JkZXJ3aWR0aCUyPT0wP24uYm9yZGVyd2lkdGg6bi5ib3JkZXJ3aWR0aC0xLG89LW4uX29mZnNldFNoaWZ0LHM9Yi5jcmlzcFJvdW5kKGUsbi5ib3JkZXJ3aWR0aCk7aS5hdHRyKHt3aWR0aDpuLl93aWR0aCthLGhlaWdodDpuLl9oZWlnaHQrYSx0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK28rIiwiK28rIikiLGZpbGw6bi5iZ2NvbG9yLHN0cm9rZTpuLmJvcmRlcmNvbG9yLCJzdHJva2Utd2lkdGgiOnN9KX1mdW5jdGlvbiBsKHQsZSxyLG4pe3ZhciBpPWUuX2Z1bGxMYXlvdXQsYT1pLl90b3BkZWZzLnNlbGVjdEFsbCgiIyIrbi5fY2xpcElkKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsbi5fY2xpcElkKS5hcHBlbmQoInJlY3QiKS5hdHRyKHt4OjAseTowfSksYS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpuLl93aWR0aCxoZWlnaHQ6bi5faGVpZ2h0fSl9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT13LmdldFN1YnBsb3RzKGUsciksYT1lLmNhbGNkYXRhLG89dC5zZWxlY3RBbGwoImcuIitBLnJhbmdlUGxvdENsYXNzTmFtZSkuZGF0YShpLHkuaWRlbnRpdHkpO28uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuIEEucmFuZ2VQbG90Q2xhc3NOYW1lKyIgIit0fSkuY2FsbChiLnNldENsaXBVcmwsbi5fY2xpcElkKSxvLm9yZGVyKCksby5leGl0KCkucmVtb3ZlKCk7dmFyIHM7by5lYWNoKGZ1bmN0aW9uKHQsaSl7dmFyIG89bS5zZWxlY3QodGhpcyksbD0wPT09aSx1PXcuZ2V0RnJvbUlkKGUsdCwieSIpLGg9dS5fbmFtZSxmPXtkYXRhOltdLGxheW91dDp7eGF4aXM6e3R5cGU6ci50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZTpuLnJhbmdlLnNsaWNlKCksY2FsZW5kYXI6ci5jYWxlbmRhcn0sd2lkdGg6bi5fd2lkdGgsaGVpZ2h0Om4uX2hlaWdodCxtYXJnaW46e3Q6MCxiOjAsbDowLHI6MH19fTtmLmxheW91dFtoXT17dHlwZTp1LnR5cGUsZG9tYWluOlswLDFdLHJhbmdlOnUucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjp1LmNhbGVuZGFyfSxnLnN1cHBseURlZmF1bHRzKGYpO3ZhciBkPWYuX2Z1bGxMYXlvdXQueGF4aXMscD1mLl9mdWxsTGF5b3V0W2hdLHY9e2lkOnQscGxvdGdyb3VwOm8seGF4aXM6ZCx5YXhpczpwfTtsP3M9djoodi5tYWlucGxvdD0ieHkiLHYubWFpbnBsb3RpbmZvPXMpLF8ucmFuZ2VQbG90KGUsdixjKGEsdCkpfSl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EueGF4aXMrYS55YXhpcz09PWUmJnIucHVzaChpKX1yZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJyZWN0LiIrQS5tYXNrTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7aS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5tYXNrTWluQ2xhc3NOYW1lLCEwKS5hdHRyKHt4OjAseTowfSkuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoeC5maWxsLEEubWFza0NvbG9yKTt2YXIgYT10LnNlbGVjdEFsbCgicmVjdC4iK0EubWFza01heENsYXNzTmFtZSkuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKEEubWFza01heENsYXNzTmFtZSwhMCkuYXR0cigieSIsMCkuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGEuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpLmNhbGwoeC5maWxsLEEubWFza0NvbG9yKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKCFlLl9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBpPXQuc2VsZWN0QWxsKCJyZWN0LiIrQS5zbGlkZUJveENsYXNzTmFtZSkuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKEEuc2xpZGVCb3hDbGFzc05hbWUsITApLmF0dHIoInkiLDApLmF0dHIoImN1cnNvciIsQS5zbGlkZUJveEN1cnNvcikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGkuYXR0cih7aGVpZ2h0Om4uX2hlaWdodCxmaWxsOkEuc2xpZGVCb3hGaWxsfSl9fWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGk9dC5zZWxlY3RBbGwoImcuIitBLmdyYWJiZXJNaW5DbGFzc05hbWUpLmRhdGEoWzBdKTtpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChBLmdyYWJiZXJNaW5DbGFzc05hbWUsITApO3ZhciBhPXQuc2VsZWN0QWxsKCJnLiIrQS5ncmFiYmVyTWF4Q2xhc3NOYW1lKS5kYXRhKFswXSk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoQS5ncmFiYmVyTWF4Q2xhc3NOYW1lLCEwKTt2YXIgbz17eDowLHdpZHRoOkEuaGFuZGxlV2lkdGgscng6QS5oYW5kbGVSYWRpdXMsCmZpbGw6eC5iYWNrZ3JvdW5kLHN0cm9rZTp4LmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOkEuaGFuZGxlU3Ryb2tlV2lkdGgsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSxzPXt5Ok1hdGgucm91bmQobi5faGVpZ2h0LzQpLGhlaWdodDpNYXRoLnJvdW5kKG4uX2hlaWdodC8yKX0sbD1pLnNlbGVjdEFsbCgicmVjdC4iK0EuaGFuZGxlTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7bC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5oYW5kbGVNaW5DbGFzc05hbWUsITApLmF0dHIobyksbC5hdHRyKHMpO3ZhciB1PWEuc2VsZWN0QWxsKCJyZWN0LiIrQS5oYW5kbGVNYXhDbGFzc05hbWUpLmRhdGEoWzBdKTtpZih1LmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChBLmhhbmRsZU1heENsYXNzTmFtZSwhMCkuYXR0cihvKSx1LmF0dHIocyksIWUuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIGM9e3dpZHRoOkEuZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6QS5ncmFiQXJlYUZpbGwsY3Vyc29yOkEuZ3JhYkFyZWFDdXJzb3J9LGg9aS5zZWxlY3RBbGwoInJlY3QuIitBLmdyYWJBcmVhTWluQ2xhc3NOYW1lKS5kYXRhKFswXSk7aC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5ncmFiQXJlYU1pbkNsYXNzTmFtZSwhMCkuYXR0cihjKSxoLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KTt2YXIgZj1hLnNlbGVjdEFsbCgicmVjdC4iK0EuZ3JhYkFyZWFNYXhDbGFzc05hbWUpLmRhdGEoWzBdKTtmLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChBLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLCEwKS5hdHRyKGMpLGYuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpfX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2lufHx7fSxyPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTstMSE9PWkuaW5kZXhPZihBLm5hbWUpJiZnLmF1dG9NYXJnaW4odCxpKX19dmFyIG09dCgiZDMiKSx2PXQoIi4uLy4uL3Bsb3RseSIpLGc9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSx5PXQoIi4uLy4uL2xpYiIpLGI9dCgiLi4vZHJhd2luZyIpLHg9dCgiLi4vY29sb3IiKSxfPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLHc9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxNPXQoIi4uL2RyYWdlbGVtZW50Iiksaz10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksQT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3JldHVybiB0Ll9uYW1lfXZhciByPXQuX2Z1bGxMYXlvdXQsYT1uKHIpLGM9ci5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK0EuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKGEsZSk7Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoQS5jb250YWluZXJDbGFzc05hbWUsITApLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksYy5leGl0KCkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1tLnNlbGVjdCh0aGlzKSxuPXRbQS5uYW1lXTtlLnJlbW92ZSgpLHIuX3RvcGRlZnMuc2VsZWN0KCIjIituLl9jbGlwSWQpLnJlbW92ZSgpfSksYy5leGl0KCkuc2l6ZSgpJiZwKHQpLDAhPT1hLmxlbmd0aCYmYy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPW0uc2VsZWN0KHRoaXMpLGE9ZVtBLm5hbWVdLGM9clt3LmlkMm5hbWUoZS5hbmNob3IpXSxwPXIubWFyZ2luLHY9ci5fc2l6ZSx5PWUuZG9tYWluLGI9Yy5kb21haW4seD0oZS5fYm91bmRpbmdCb3h8fHt9KS5oZWlnaHR8fDA7YS5faWQ9QS5uYW1lK2UuX2lkLGEuX2NsaXBJZD1hLl9pZCsiLSIrci5fdWlkLGEuX3dpZHRoPXYudyooeVsxXS15WzBdKSxhLl9oZWlnaHQ9KHIuaGVpZ2h0LXAuYi1wLnQpKmEudGhpY2tuZXNzLGEuX29mZnNldFNoaWZ0PU1hdGguZmxvb3IoYS5ib3JkZXJ3aWR0aC8yKTt2YXIgXz1NYXRoLnJvdW5kKHAubCt2LncqeVswXSksTT1NYXRoLnJvdW5kKHAudCt2LmgqKDEtYlswXSkreCthLl9vZmZzZXRTaGlmdCtBLmV4dHJhUGFkKTtuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIiwiK00rIikiKTt2YXIgaz1lLnIybChhLnJhbmdlWzBdKSxUPWUucjJsKGEucmFuZ2VbMV0pLFM9VC1rO2EucDJkPWZ1bmN0aW9uKHQpe3JldHVybiB0L2EuX3dpZHRoKlMra30sYS5kMnA9ZnVuY3Rpb24odCl7cmV0dXJuKHQtaykvUyphLl93aWR0aH0sYS5fcmw9W2ssVF0sbi5jYWxsKHMsdCxlLGEpLmNhbGwobCx0LGUsYSkuY2FsbCh1LHQsZSxhKS5jYWxsKGgsdCxlLGEpLmNhbGwoZix0LGUsYSkuY2FsbChkLHQsZSxhKSxpKG4sdCxlLGEpLG8obix0LGUsYSksZy5hdXRvTWFyZ2luKHQsYS5faWQse3g6eVswXSx5OmJbMF0sbDowLHI6MCx0OjAsYjphLl9oZWlnaHQrcC5iK3gscGFkOkEuZXh0cmFQYWQrMiphLl9vZmZzZXRTaGlmdH0pfSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzksIi4uLy4uL3Bsb3RseSI6NzU5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2NvbnN0YW50cyI6Njc0LGQzOjEyMH1dLDY3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToicmFuZ2VzbGlkZXIiLHNjaGVtYTp7bGF5b3V0OnsieGF4aXMucmFuZ2VzbGlkZXIiOnQoIi4vYXR0cmlidXRlcyIpfX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzp0KCIuL2RyYXciKX19LHsiLi9hdHRyaWJ1dGVzIjo2NzIsIi4vY2FsY19hdXRvcmFuZ2UiOjY3MywiLi9kZWZhdWx0cyI6Njc1LCIuL2RyYXciOjY3Nn1dLDY3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxhPXQoIi4uL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6InNoYXBlIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJyZWN0IiwicGF0aCIsImxpbmUiXX0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSJ9LHhyZWY6byh7fSxuLnhyZWYse30pLHgwOnt2YWxUeXBlOiJhbnkifSx4MTp7dmFsVHlwZToiYW55In0seXJlZjpvKHt9LG4ueXJlZix7fSkseTA6e3ZhbFR5cGU6ImFueSJ9LHkxOnt2YWxUeXBlOiJhbnkifSxwYXRoOnt2YWxUeXBlOiJzdHJpbmcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sbGluZTp7Y29sb3I6aS5jb2xvcix3aWR0aDppLndpZHRoLGRhc2g6YX0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjUsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjU4NSwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjV9XSw2Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPSJjYXRlZ29yeSI9PT10LnR5cGU/dC5yMmM6dC5kMmM7aWYodm9pZCAwIT09ZSlyZXR1cm5bYShlKSxhKHIpXTtpZihuKXt2YXIgbCx1LGMsaCxmLGQ9MS8wLHA9LTEvMCxtPW4ubWF0Y2goby5zZWdtZW50UkUpO2ZvcigiZGF0ZSI9PT10LnR5cGUmJihhPXMuZGVjb2RlRGF0ZShhKSksbD0wO2w8bS5sZW5ndGg7bCsrKXU9bVtsXSx2b2lkIDAhPT0oYz1pW3UuY2hhckF0KDApXS5kcmF3bikmJighKGg9bVtsXS5zdWJzdHIoMSkubWF0Y2goby5wYXJhbVJFKSl8fGgubGVuZ3RoPGN8fChmPWEoaFtjXSksZjxkJiYoZD1mKSxmPnAmJihwPWYpKSk7cmV0dXJuIHA+PWQ/W2QscF06dm9pZCAwfX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1pLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsLHUsYz1yW3NdLGg9Yy5saW5lLndpZHRoLzI7InBhcGVyIiE9PWMueHJlZiYmKGw9YS5nZXRGcm9tSWQodCxjLnhyZWYpLCh1PW4obCxjLngwLGMueDEsYy5wYXRoLG8ucGFyYW1Jc1gpKSYmYS5leHBhbmQobCx1LHtwcGFkOmh9KSksInBhcGVyIiE9PWMueXJlZiYmKGw9YS5nZXRGcm9tSWQodCxjLnlyZWYpLCh1PW4obCxjLnkwLGMueTEsYy5wYXRoLG8ucGFyYW1Jc1kpKSYmYS5leHBhbmQobCx1LHtwcGFkOmh9KSl9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9jb25zdGFudHMiOjY4MCwiLi9oZWxwZXJzIjo2ODN9XSw2ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzZWdtZW50UkU6L1tNTEhWUUNUU1pdW15NTEhWUUNUU1pdKi9nLHBhcmFtUkU6L1teXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDY4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxpPXQoIi4vc2hhcGVfZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6aX0pfX0seyIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjc2MSwiLi9zaGFwZV9kZWZhdWx0cyI6Njg1fV0sNjgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9dC5fZnVsbExheW91dDtlLl9zaGFwZVVwcGVyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fc2hhcGVMb3dlckxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpLGUuX3NoYXBlU3VicGxvdExheWVycy5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKTtmb3IodmFyIHI9MDtyPGUuc2hhcGVzLmxlbmd0aDtyKyspZS5zaGFwZXNbcl0udmlzaWJsZSYmaSh0LHIpfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHIpe3ZhciBuPXsiZGF0YS1pbmRleCI6ZSwiZmlsbC1ydWxlIjoiZXZlbm9kZCIsZDpvKHQsaSl9LHM9aS5saW5lLndpZHRoP2kubGluZS5jb2xvcjoicmdiYSgwLDAsMCwwKSIsbD1yLmFwcGVuZCgicGF0aCIpLmF0dHIobikuc3R5bGUoIm9wYWNpdHkiLGkub3BhY2l0eSkuY2FsbChmLnN0cm9rZSxzKS5jYWxsKGYuZmlsbCxpLmZpbGxjb2xvcikuY2FsbChkLmRhc2hMaW5lLGkubGluZS5kYXNoLGkubGluZS53aWR0aCksdT0oaS54cmVmK2kueXJlZikucmVwbGFjZSgvcGFwZXIvZywiIik7bC5jYWxsKGQuc2V0Q2xpcFVybCx1PyJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrdTpudWxsKSx0Ll9jb250ZXh0LmVkaXRzLnNoYXBlUG9zaXRpb24mJmEodCxsLGksZSl9dC5fZnVsbExheW91dC5fcGFwZXIuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD0iJytlKyciXScpLnJlbW92ZSgpO3ZhciBuPSh0LmxheW91dC5zaGFwZXN8fFtdKVtlXSxpPXQuX2Z1bGxMYXlvdXQuc2hhcGVzW2VdO2lmKG4mJiExIT09aS52aXNpYmxlKWlmKCJiZWxvdyIhPT1pLmxheWVyKXIodC5fZnVsbExheW91dC5fc2hhcGVVcHBlckxheWVyKTtlbHNlIGlmKCJwYXBlciI9PT1pLnhyZWZ8fCJwYXBlciI9PT1pLnlyZWYpcih0Ll9mdWxsTGF5b3V0Ll9zaGFwZUxvd2VyTGF5ZXIpO2Vsc2V7dmFyIHM9dC5fZnVsbExheW91dC5fcGxvdHNbaS54cmVmK2kueXJlZl07aWYocyl7dmFyIGw9cy5tYWlucGxvdHx8cztyKGwuc2hhcGVsYXllcil9ZWxzZSByKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9fWZ1bmN0aW9uIGEodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt2YXIgcj1aLnJpZ2h0LVoubGVmdCxuPVouYm90dG9tLVoudG9wLGk9dC5jbGllbnRYLVoubGVmdCxhPXQuY2xpZW50WS1aLnRvcCxvPXI+WSYmbj5YJiYhdC5zaGlmdEtleT9wLmdldEN1cnNvcihpL3IsMS1hL24pOiJtb3ZlIjttKGUsbyksRz1vLnNwbGl0KCItIilbMF19ZnVuY3Rpb24gYShlKXtOPWguZ2V0RnJvbUlkKHQsci54cmVmKSxCPWguZ2V0RnJvbUlkKHQsci55cmVmKSxVPWcuZ2V0RGF0YVRvUGl4ZWwodCxOKSxWPWcuZ2V0RGF0YVRvUGl4ZWwodCxCLCEwKSxIPWcuZ2V0UGl4ZWxUb0RhdGEodCxOKSxxPWcuZ2V0UGl4ZWxUb0RhdGEodCxCLCEwKTt2YXIgYT0ic2hhcGVzWyIrbisiXSI7InBhdGgiPT09ci50eXBlPyhGPXIucGF0aCxqPWErIi5wYXRoIik6KHY9VShyLngwKSx5PVYoci55MCksYj1VKHIueDEpLHg9VihyLnkxKSxfPWErIi54MCIsdz1hKyIueTAiLE09YSsiLngxIixrPWErIi55MSIpLHY8Yj8oUz12LHo9YSsiLngwIixPPSJ4MCIsRT1iLEk9YSsiLngxIixSPSJ4MSIpOihTPWIsej1hKyIueDEiLE89IngxIixFPXYsST1hKyIueDAiLFI9IngwIikseTx4PyhBPXksTD1hKyIueTAiLEQ9InkwIixUPXgsQz1hKyIueTEiLFA9InkxIik6KEE9eCxMPWErIi55MSIsRD0ieTEiLFQ9eSxDPWErIi55MCIsUD0ieTAiKSxkPXt9LGkoZSksVy5tb3ZlRm49Im1vdmUiPT09Rz9jOmZ9ZnVuY3Rpb24gcyhyKXttKGUpLHImJnUucmVsYXlvdXQodCxkKX1mdW5jdGlvbiBjKG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gSChVKHQpK24pfTtOJiYiZGF0ZSI9PT1OLnR5cGUmJihhPWcuZW5jb2RlRGF0ZShhKSk7dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIHEoVih0KStpKX07QiYmImRhdGUiPT09Qi50eXBlJiYocz1nLmVuY29kZURhdGUocykpLHIucGF0aD1sKEYsYSxzKSxkW2pdPXIucGF0aH1lbHNlIGRbX109ci54MD1IKHYrbiksZFt3XT1yLnkwPXEoeStpKSxkW01dPXIueDE9SChiK24pLGRba109ci55MT1xKHgraSk7ZS5hdHRyKCJkIixvKHQscikpfWZ1bmN0aW9uIGYobixpKXtpZigicGF0aCI9PT1yLnR5cGUpe3ZhciBhPWZ1bmN0aW9uKHQpe3JldHVybiBIKFUodCkrbil9O04mJiJkYXRlIj09PU4udHlwZSYmKGE9Zy5lbmNvZGVEYXRlKGEpKTt2YXIgcz1mdW5jdGlvbih0KXtyZXR1cm4gcShWKHQpK2kpfTtCJiYiZGF0ZSI9PT1CLnR5cGUmJihzPWcuZW5jb2RlRGF0ZShzKSksci5wYXRoPWwoRixhLHMpLGRbal09ci5wYXRofWVsc2V7dmFyIHU9fkcuaW5kZXhPZigibiIpP0EraTpBLGM9fkcuaW5kZXhPZigicyIpP1QraTpULGg9fkcuaW5kZXhPZigidyIpP1MrbjpTLGY9fkcuaW5kZXhPZigiZSIpP0UrbjpFO2MtdT5YJiYoZFtMXT1yW0RdPXEodSksZFtDXT1yW1BdPXEoYykpLGYtaD5ZJiYoZFt6XT1yW09dPUgoaCksZFtJXT1yW1JdPUgoZikpfWUuYXR0cigiZCIsbyh0LHIpKX12YXIgZCx2LHksYix4LF8sdyxNLGssQSxULFMsRSxMLEMseixJLEQsUCxPLFIsRixqLE4sQixVLFYsSCxxLEcsWT0xMCxYPTEwLFc9e2VsZW1lbnQ6ZS5ub2RlKCksZ2Q6dCxwcmVwRm46YSxkb25lRm46c30sWj1XLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cC5pbml0KFcpLGUubm9kZSgpLm9ubW91c2Vtb3ZlPWl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saSxhLG89ZS50eXBlLGw9aC5nZXRGcm9tSWQodCxlLnhyZWYpLHU9aC5nZXRGcm9tSWQodCxlLnlyZWYpLGM9dC5fZnVsbExheW91dC5fc2l6ZTtpZihsPyhyPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2UobCksbj1mdW5jdGlvbih0KXtyZXR1cm4gbC5fb2Zmc2V0K2wucjJwKHIodCwhMCkpfSk6bj1mdW5jdGlvbih0KXtyZXR1cm4gYy5sK2Mudyp0fSx1PyhpPWcuc2hhcGVQb3NpdGlvblRvUmFuZ2UodSksYT1mdW5jdGlvbih0KXtyZXR1cm4gdS5fb2Zmc2V0K3UucjJwKGkodCwhMCkpfSk6YT1mdW5jdGlvbih0KXtyZXR1cm4gYy50K2MuaCooMS10KX0sInBhdGgiPT09bylyZXR1cm4gbCYmImRhdGUiPT09bC50eXBlJiYobj1nLmRlY29kZURhdGUobikpLHUmJiJkYXRlIj09PXUudHlwZSYmKGE9Zy5kZWNvZGVEYXRlKGEpKSxzKGUucGF0aCxuLGEpO3ZhciBmPW4oZS54MCksZD1uKGUueDEpLHA9YShlLnkwKSxtPWEoZS55MSk7aWYoImxpbmUiPT09bylyZXR1cm4iTSIrZisiLCIrcCsiTCIrZCsiLCIrbTtpZigicmVjdCI9PT1vKXJldHVybiJNIitmKyIsIitwKyJIIitkKyJWIittKyJIIitmKyJaIjt2YXIgdj0oZitkKS8yLHk9KHArbSkvMixiPU1hdGguYWJzKHYtZikseD1NYXRoLmFicyh5LXApLF89IkEiK2IrIiwiK3gsdz12K2IrIiwiK3k7cmV0dXJuIk0iK3crXysiIDAgMSwxICIrdisiLCIrKHkteCkrXysiIDAgMCwxICIrdysiWiJ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQucmVwbGFjZSh2LnNlZ21lbnRSRSxmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT12LnBhcmFtSXNYW2ldLG89di5wYXJhbUlzWVtpXSxzPXYubnVtUGFyYW1zW2ldLGw9dC5zdWJzdHIoMSkucmVwbGFjZSh2LnBhcmFtUkUsZnVuY3Rpb24odCl7cmV0dXJuIGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyxuPnMmJih0PSJYIiksdH0pO3JldHVybiBuPnMmJihsPWwucmVwbGFjZSgvW1xzLF0qWC4qLywiIiksYy5sb2coIklnbm9yaW5nIGV4dHJhIHBhcmFtcyBpbiBzZWdtZW50ICIrdCkpLGkrbH0pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiB0LnJlcGxhY2Uodi5zZWdtZW50UkUsZnVuY3Rpb24odCl7dmFyIG49MCxpPXQuY2hhckF0KDApLGE9di5wYXJhbUlzWFtpXSxvPXYucGFyYW1Jc1lbaV0scz12Lm51bVBhcmFtc1tpXTtyZXR1cm4gaSt0LnN1YnN0cigxKS5yZXBsYWNlKHYucGFyYW1SRSxmdW5jdGlvbih0KXtyZXR1cm4gbj49cz90OihhW25dP3Q9ZSh0KTpvW25dJiYodD1yKHQpKSxuKyssdCl9KX0pfXZhciB1PXQoIi4uLy4uL3Bsb3RseSIpLGM9dCgiLi4vLi4vbGliIiksaD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGY9dCgiLi4vY29sb3IiKSxkPXQoIi4uL2RyYXdpbmciKSxwPXQoIi4uL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksdj10KCIuL2NvbnN0YW50cyIpLGc9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPXtkcmF3Om4sZHJhd09uZTppfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL3NldGN1cnNvciI6NzM5LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vY29sb3IiOjYwMiwiLi4vZHJhZ2VsZW1lbnQiOjYyMywiLi4vZHJhd2luZyI6NjI2LCIuL2NvbnN0YW50cyI6NjgwLCIuL2hlbHBlcnMiOjY4M31dLDY4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnJhbmdlVG9TaGFwZVBvc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QucjJkOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5zaGFwZVBvc2l0aW9uVG9SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4ibG9nIj09PXQudHlwZT90LmQycjpmdW5jdGlvbih0KXtyZXR1cm4gdH19LHIuZGVjb2RlRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSYmKGU9ZS5yZXBsYWNlKCJfIiwiICIpKSx0KGUpfX0sci5lbmNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChlKS5yZXBsYWNlKCIgIiwiXyIpfX0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpe3ZhciBvPXIuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fb2Zmc2V0K2UucjJwKG8odCwhMCkpfSwiZGF0ZSI9PT1lLnR5cGUmJihpPXIuZGVjb2RlRGF0ZShpKSl9ZWxzZSBpPW4/ZnVuY3Rpb24odCl7cmV0dXJuIGEudCthLmgqKDEtdCl9OmZ1bmN0aW9uKHQpe3JldHVybiBhLmwrYS53KnR9O3JldHVybiBpfSxyLmdldFBpeGVsVG9EYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSl7dmFyIG89ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTtpPWZ1bmN0aW9uKHQpe3JldHVybiBvKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgaT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LWEudCkvYS5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1hLmwpL2Eud307cmV0dXJuIGl9fSx7fV0sNjg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJzaGFwZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGNBdXRvcmFuZ2U6dCgiLi9jYWxjX2F1dG9yYW5nZSIpLGRyYXc6bi5kcmF3LGRyYXdPbmU6bi5kcmF3T25lfX0seyIuL2F0dHJpYnV0ZXMiOjY3OCwiLi9jYWxjX2F1dG9yYW5nZSI6Njc5LCIuL2RlZmF1bHRzIjo2ODEsIi4vZHJhdyI6NjgyfV0sNjg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWlmKHM9c3x8e30sbD1sfHx7fSwhdSgidmlzaWJsZSIsIWwuaXRlbUlzTm90UGxhaW5PYmplY3QpKXJldHVybiBlO3UoImxheWVyIiksdSgib3BhY2l0eSIpLHUoImZpbGxjb2xvciIpLHUoImxpbmUuY29sb3IiKSx1KCJsaW5lLndpZHRoIiksdSgibGluZS5kYXNoIik7Zm9yKHZhciBjPXQucGF0aD8icGF0aCI6InJlY3QiLGg9dSgidHlwZSIsYyksZj1bIngiLCJ5Il0sZD0wO2Q8MjtkKyspe3ZhciBwPWZbZF0sbT17X2Z1bGxMYXlvdXQ6cn0sdj1pLmNvZXJjZVJlZih0LGUsbSxwLCIiLCJwYXBlciIpO2lmKCJwYXRoIiE9PWgpe3ZhciBnLHksYjsicGFwZXIiIT09dj8oZz1pLmdldEZyb21JZChtLHYpLGI9by5yYW5nZVRvU2hhcGVQb3NpdGlvbihnKSx5PW8uc2hhcGVQb3NpdGlvblRvUmFuZ2UoZykpOnk9Yj1uLmlkZW50aXR5O3ZhciB4PXArIjAiLF89cCsiMSIsdz10W3hdLE09dFtfXTt0W3hdPXkodFt4XSwhMCksdFtfXT15KHRbX10sITApLGkuY29lcmNlUG9zaXRpb24oZSxtLHUsdix4LC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLG0sdSx2LF8sLjc1KSxlW3hdPWIoZVt4XSksZVtfXT1iKGVbX10pLHRbeF09dyx0W19dPU19fXJldHVybiJwYXRoIj09PWg/dSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pLGV9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2F0dHJpYnV0ZXMiOjY3OCwiLi9oZWxwZXJzIjo2ODN9XSw2ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcCxzPXQoIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpLHU9e19pc0xpbmtlZFRvQXJyYXk6InN0ZXAiLG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIn0sdmFsdWU6e3ZhbFR5cGU6InN0cmluZyJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fTtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6InNsaWRlciIsdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYWN0aXZlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sc3RlcHM6dSxsZW5tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmFjdGlvbiIsInBpeGVscyJdLGRmbHQ6ImZyYWN0aW9uIn0sbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0seDp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSxwYWQ6byh7fSxpLHt9LHt0OntkZmx0OjIwfX0pLHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDowfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxNTB9LGVhc2luZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMudHJhbnNpdGlvbi5lYXNpbmcudmFsdWVzLGRmbHQ6ImN1YmljLWluLW91dCJ9fSxjdXJyZW50dmFsdWU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImxlZnQifSxvZmZzZXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxMH0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmcifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyJ9LGZvbnQ6YSh7fSxuLHt9KX0sZm9udDphKHt9LG4se30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmwuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmwucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpsLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpsLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmwudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpsLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6bC5taW5vclRpY2tMZW5ndGh9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NjAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4LCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6ODI2LCIuL2NvbnN0YW50cyI6Njg3fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMscixuKX1uKCJ2aXNpYmxlIixpKHQsZSkubGVuZ3RoPjApJiYobigiYWN0aXZlIiksbigieCIpLG4oInkiKSxhLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSxuKCJ4YW5jaG9yIiksbigieWFuY2hvciIpLG4oImxlbiIpLG4oImxlbm1vZGUiKSxuKCJwYWQudCIpLG4oInBhZC5yIiksbigicGFkLmIiKSxuKCJwYWQubCIpLGEuY29lcmNlRm9udChuLCJmb250IixyLmZvbnQpLG4oImN1cnJlbnR2YWx1ZS52aXNpYmxlIikmJihuKCJjdXJyZW50dmFsdWUueGFuY2hvciIpLG4oImN1cnJlbnR2YWx1ZS5wcmVmaXgiKSxuKCJjdXJyZW50dmFsdWUuc3VmZml4IiksbigiY3VycmVudHZhbHVlLm9mZnNldCIpLGEuY29lcmNlRm9udChuLCJjdXJyZW50dmFsdWUuZm9udCIsZS5mb250KSksbigidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG4oInRyYW5zaXRpb24uZWFzaW5nIiksbigiYmdjb2xvciIpLG4oImFjdGl2ZWJnY29sb3IiKSxuKCJib3JkZXJjb2xvciIpLG4oImJvcmRlcndpZHRoIiksbigidGlja2xlbiIpLG4oInRpY2t3aWR0aCIpLG4oInRpY2tjb2xvciIpLG4oIm1pbm9ydGlja2xlbiIpKX1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhLmNvZXJjZShuLGksYyx0LGUpfWZvcih2YXIgbixpLG89dC5zdGVwc3x8W10scz1lLnN0ZXBzPVtdLGw9MDtsPG8ubGVuZ3RoO2wrKyluPW9bbF0saT17fSxyKCJtZXRob2QiKSxhLmlzUGxhaW5PYmplY3QobikmJigic2tpcCI9PT1pLm1ldGhvZHx8QXJyYXkuaXNBcnJheShuLmFyZ3MpKSYmKHIoImFyZ3MiKSxyKCJsYWJlbCIsInN0ZXAtIitsKSxyKCJ2YWx1ZSIsaS5sYWJlbCkscigiZXhlY3V0ZSIpLHMucHVzaChpKSk7cmV0dXJuIHN9dmFyIGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi9jb25zdGFudHMiKSx1PWwubmFtZSxjPXMuc3RlcHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7byh0LGUse25hbWU6dSxoYW5kbGVJdGVtRGVmYXVsdHM6bn0pfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo3NjEsIi4vYXR0cmlidXRlcyI6Njg2LCIuL2NvbnN0YW50cyI6Njg3fV0sNjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHI9dFtFLm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmYS5zdGVwcy5sZW5ndGgmJihhLmdkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn1mdW5jdGlvbiBpKHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9QS50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrRS5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5zdGVwcyk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoRS5sYWJlbEdyb3VwQ2xhc3MsITApO3ZhciBuPTAsaT0wO3IuZWFjaChmdW5jdGlvbih0KXt2YXIgcj13LnNlbGVjdCh0aGlzKSxhPXUocix7c3RlcDp0fSxlKSxvPWEubm9kZSgpO2lmKG8pe3ZhciBzPUEuYkJveChvKTtpPU1hdGgubWF4KGkscy5oZWlnaHQpLG49TWF0aC5tYXgobixzLndpZHRoKX19KSxyLnJlbW92ZSgpLGUuaW5wdXRBcmVhV2lkdGg9TWF0aC5tYXgoRS5yYWlsV2lkdGgsRS5ncmlwSGVpZ2h0KTt2YXIgYT10Ll9mdWxsTGF5b3V0Ll9zaXplO2UubHg9YS5sK2EudyplLngsZS5seT1hLnQrYS5oKigxLWUueSksImZyYWN0aW9uIj09PWUubGVubW9kZT9lLm91dGVyTGVuZ3RoPU1hdGgucm91bmQoYS53KmUubGVuKTplLm91dGVyTGVuZ3RoPWUubGVuLGUubGVuUGFkPU1hdGgucm91bmQoLjUqRS5ncmlwV2lkdGgpLGUuaW5wdXRBcmVhU3RhcnQ9MCxlLmlucHV0QXJlYUxlbmd0aD1NYXRoLnJvdW5kKGUub3V0ZXJMZW5ndGgtZS5wYWQubC1lLnBhZC5yKTt2YXIgbz1lLmlucHV0QXJlYUxlbmd0aC0yKkUuc3RlcEluc2V0LGw9by8oZS5zdGVwcy5sZW5ndGgtMSksYz1uK0UubGFiZWxQYWRkaW5nO2lmKGUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoYy9sKSksZS5sYWJlbEhlaWdodD1pLGUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCxlLmN1cnJlbnRWYWx1ZUhlaWdodD0wLGUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCxlLmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIGg9QS50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXMoaCxlLHQubGFiZWwpLG49ci5ub2RlKCkmJkEuYkJveChyLm5vZGUoKSl8fHt3aWR0aDowLGhlaWdodDowfSxpPVQubGluZUNvdW50KHIpO2UuY3VycmVudFZhbHVlTWF4V2lkdGg9TWF0aC5tYXgoZS5jdXJyZW50VmFsdWVNYXhXaWR0aCxNYXRoLmNlaWwobi53aWR0aCkpLGUuY3VycmVudFZhbHVlSGVpZ2h0PU1hdGgubWF4KGUuY3VycmVudFZhbHVlSGVpZ2h0LE1hdGguY2VpbChuLmhlaWdodCkpLGUuY3VycmVudFZhbHVlTWF4TGluZXM9TWF0aC5tYXgoZS5jdXJyZW50VmFsdWVNYXhMaW5lcyxpKX0pLGUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9ZS5jdXJyZW50VmFsdWVIZWlnaHQrZS5jdXJyZW50dmFsdWUub2Zmc2V0LGgucmVtb3ZlKCl9ZS5oZWlnaHQ9ZS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCtFLnRpY2tPZmZzZXQrZS50aWNrbGVuK0UubGFiZWxPZmZzZXQrZS5sYWJlbEhlaWdodCtlLnBhZC50K2UucGFkLmI7dmFyIGY9ImxlZnQiO1MuaXNSaWdodEFuY2hvcihlKSYmKGUubHgtPWUub3V0ZXJMZW5ndGgsZj0icmlnaHQiKSxTLmlzQ2VudGVyQW5jaG9yKGUpJiYoZS5seC09ZS5vdXRlckxlbmd0aC8yLGY9ImNlbnRlciIpO3ZhciBkPSJ0b3AiO1MuaXNCb3R0b21BbmNob3IoZSkmJihlLmx5LT1lLmhlaWdodCxkPSJib3R0b20iKSxTLmlzTWlkZGxlQW5jaG9yKGUpJiYoZS5seS09ZS5oZWlnaHQvMixkPSJtaWRkbGUiKSxlLm91dGVyTGVuZ3RoPU1hdGguY2VpbChlLm91dGVyTGVuZ3RoKSxlLmhlaWdodD1NYXRoLmNlaWwoZS5oZWlnaHQpLGUubHg9TWF0aC5yb3VuZChlLmx4KSxlLmx5PU1hdGgucm91bmQoZS5seSksTS5hdXRvTWFyZ2luKHQsRS5hdXRvTWFyZ2luSWRSb290K2UuX2luZGV4LHt4OmUueCx5OmUueSxsOmUub3V0ZXJMZW5ndGgqKHtyaWdodDoxLGNlbnRlcjouNX1bZl18fDApLHI6ZS5vdXRlckxlbmd0aCooe2xlZnQ6MSxjZW50ZXI6LjV9W2ZdfHwwKSxiOmUuaGVpZ2h0Kih7dG9wOjEsbWlkZGxlOi41fVtkXXx8MCksdDplLmhlaWdodCooe2JvdHRvbToxLG1pZGRsZTouNX1bZF18fDApfSl9ZnVuY3Rpb24gbyh0LGUscil7ci5hY3RpdmU+PXIuc3RlcHMubGVuZ3RoJiYoci5hY3RpdmU9MCksZS5jYWxsKHMscikuY2FsbCh4LHIpLmNhbGwoYyxyKS5jYWxsKHAscikuY2FsbChiLHQscikuY2FsbChsLHQsciksQS5zZXRUcmFuc2xhdGUoZSxyLmx4K3IucGFkLmwsci5seStyLnBhZC50KSxlLmNhbGwodixyLHIuYWN0aXZlLyhyLnN0ZXBzLmxlbmd0aC0xKSwhMSksZS5jYWxsKHMscil9ZnVuY3Rpb24gcyh0LGUscil7aWYoZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4saSxhPXQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO3N3aXRjaChlLmN1cnJlbnR2YWx1ZS54YW5jaG9yKXtjYXNlInJpZ2h0IjpuPWUuaW5wdXRBcmVhTGVuZ3RoLUUuY3VycmVudFZhbHVlSW5zZXQtZS5jdXJyZW50VmFsdWVNYXhXaWR0aCxpPSJsZWZ0IjticmVhaztjYXNlImNlbnRlciI6bj0uNSplLmlucHV0QXJlYUxlbmd0aCxpPSJtaWRkbGUiO2JyZWFrO2RlZmF1bHQ6bj1FLmN1cnJlbnRWYWx1ZUluc2V0LGk9ImxlZnQifWEuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEUubGFiZWxDbGFzcywhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoeyJ0ZXh0LWFuY2hvciI6aSwiZGF0YS1ub3RleCI6MX0pO3ZhciBvPWUuY3VycmVudHZhbHVlLnByZWZpeD9lLmN1cnJlbnR2YWx1ZS5wcmVmaXg6IiI7aWYoInN0cmluZyI9PXR5cGVvZiByKW8rPXI7ZWxzZXtvKz1lLnN0ZXBzW2UuYWN0aXZlXS5sYWJlbH1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgmJihvKz1lLmN1cnJlbnR2YWx1ZS5zdWZmaXgpLGEuY2FsbChBLmZvbnQsZS5jdXJyZW50dmFsdWUuZm9udCkudGV4dChvKS5jYWxsKFQuY29udmVydFRvVHNwYW5zLGUuZ2QpO3ZhciBzPVQubGluZUNvdW50KGEpLGw9KGUuY3VycmVudFZhbHVlTWF4TGluZXMrMS1zKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqTDtyZXR1cm4gVC5wb3NpdGlvblRleHQoYSxuLGwpLGF9fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXQuc2VsZWN0QWxsKCJyZWN0LiIrRS5ncmlwUmVjdENsYXNzKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS5ncmlwUmVjdENsYXNzLCEwKS5jYWxsKGQsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLG4uYXR0cih7d2lkdGg6RS5ncmlwV2lkdGgsaGVpZ2h0OkUuZ3JpcEhlaWdodCxyeDpFLmdyaXBSYWRpdXMscnk6RS5ncmlwUmFkaXVzfSkuY2FsbChrLnN0cm9rZSxyLmJvcmRlcmNvbG9yKS5jYWxsKGsuZmlsbCxyLmJnY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG49dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFswXSk7cmV0dXJuIG4uZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEUubGFiZWxDbGFzcywhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KSxuLmNhbGwoQS5mb250LHIuZm9udCkudGV4dChlLnN0ZXAubGFiZWwpLmNhbGwoVC5jb252ZXJ0VG9Uc3BhbnMsci5nZCksbn1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoImcuIitFLmxhYmVsc0NsYXNzKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoRS5sYWJlbHNDbGFzcywhMCk7dmFyIG49ci5zZWxlY3RBbGwoImcuIitFLmxhYmVsR3JvdXBDbGFzcykuZGF0YShlLmxhYmVsU3RlcHMpO24uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEUubGFiZWxHcm91cENsYXNzLCEwKSxuLmV4aXQoKS5yZW1vdmUoKSxuLmVhY2goZnVuY3Rpb24odCl7dmFyIHI9dy5zZWxlY3QodGhpcyk7ci5jYWxsKHUsdCxlKSxBLnNldFRyYW5zbGF0ZShyLGcoZSx0LmZyYWN0aW9uKSxFLnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKkwrRS5sYWJlbE9mZnNldCtlLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pfWZ1bmN0aW9uIGgodCxlLHIsbixpKXt2YXIgYT1NYXRoLnJvdW5kKG4qKHIuc3RlcHMubGVuZ3RoLTEpKTthIT09ci5hY3RpdmUmJmYodCxlLHIsYSwhMCxpKX1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgbz1yLmFjdGl2ZTtyLl9pbnB1dC5hY3RpdmU9ci5hY3RpdmU9bjt2YXIgbD1yLnN0ZXBzW3IuYWN0aXZlXTtlLmNhbGwodixyLHIuYWN0aXZlLyhyLnN0ZXBzLmxlbmd0aC0xKSxhKSxlLmNhbGwocyxyKSx0LmVtaXQoInBsb3RseV9zbGlkZXJjaGFuZ2UiLHtzbGlkZXI6cixzdGVwOnIuc3RlcHNbci5hY3RpdmVdLGludGVyYWN0aW9uOmkscHJldmlvdXNBY3RpdmU6b30pLGwmJmwubWV0aG9kJiZpJiYoZS5fbmV4dE1ldGhvZD8oZS5fbmV4dE1ldGhvZC5zdGVwPWwsZS5fbmV4dE1ldGhvZC5kb0NhbGxiYWNrPWksZS5fbmV4dE1ldGhvZC5kb1RyYW5zaXRpb249YSk6KGUuX25leHRNZXRob2Q9e3N0ZXA6bCxkb0NhbGxiYWNrOmksZG9UcmFuc2l0aW9uOmF9LGUuX25leHRNZXRob2RSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3ZhciByPWUuX25leHRNZXRob2Quc3RlcDtyLm1ldGhvZCYmKHIuZXhlY3V0ZSYmTS5leGVjdXRlQVBJQ29tbWFuZCh0LHIubWV0aG9kLHIuYXJncyksZS5fbmV4dE1ldGhvZD1udWxsLGUuX25leHRNZXRob2RSYWY9bnVsbCl9KSkpfWZ1bmN0aW9uIGQodCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gci5kYXRhKClbMF19dmFyIGk9ci5ub2RlKCksYT13LnNlbGVjdChlKTt0Lm9uKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7dmFyIHQ9bigpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbz1yLnNlbGVjdCgiLiIrRS5ncmlwUmVjdENsYXNzKTt3LmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHcuZXZlbnQucHJldmVudERlZmF1bHQoKSxvLmNhbGwoay5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIHM9eSh0LHcubW91c2UoaSlbMF0pO2goZSxyLHQscywhMCksdC5fZHJhZ2dpbmc9ITAsYS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbigpe3ZhciB0PW4oKSxhPXkodCx3Lm1vdXNlKGkpWzBdKTtoKGUscix0LGEsITEpfSksYS5vbigibW91c2V1cCIsZnVuY3Rpb24oKXt2YXIgdD1uKCk7dC5fZHJhZ2dpbmc9ITEsby5jYWxsKGsuZmlsbCx0LmJnY29sb3IpLGEub24oIm1vdXNldXAiLG51bGwpLGEub24oIm1vdXNlbW92ZSIsbnVsbCksZS5lbWl0KCJwbG90bHlfc2xpZGVyZW5kIix7c2xpZGVyOnQsc3RlcDp0LnN0ZXBzW3QuYWN0aXZlXX0pfSl9KX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIitFLnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5zdGVwcyk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKGZ1bmN0aW9uKHQscil7dmFyIG49ciVlLmxhYmVsU3RyaWRlPT0wLGk9dy5zZWxlY3QodGhpcyk7aS5hdHRyKHtoZWlnaHQ6bj9lLnRpY2tsZW46ZS5taW5vcnRpY2tsZW59KS5jYWxsKGsuZmlsbCxlLnRpY2tjb2xvciksQS5zZXRUcmFuc2xhdGUoaSxnKGUsci8oZS5zdGVwcy5sZW5ndGgtMSkpLS41KmUudGlja3dpZHRoLChuP0UudGlja09mZnNldDpFLm1pbm9yVGlja09mZnNldCkrZS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9KX1mdW5jdGlvbiBtKHQpe3QubGFiZWxTdGVwcz1bXTtmb3IodmFyIGU9dC5zdGVwcy5sZW5ndGgscj0wO3I8ZTtyKz10LmxhYmVsU3RyaWRlKXQubGFiZWxTdGVwcy5wdXNoKHtmcmFjdGlvbjpyLyhlLTEpLHN0ZXA6dC5zdGVwc1tyXX0pfWZ1bmN0aW9uIHYodCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoInJlY3QuIitFLmdyaXBSZWN0Q2xhc3MpLGE9ZyhlLHIpO2lmKCFlLl9pbnZva2luZ0NvbW1hbmQpe3ZhciBvPWk7biYmZS50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihvPW8udHJhbnNpdGlvbigpLmR1cmF0aW9uKGUudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZShlLnRyYW5zaXRpb24uZWFzaW5nKSksby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoYS0uNSpFLmdyaXBXaWR0aCkrIiwiK2UuY3VycmVudFZhbHVlVG90YWxIZWlnaHQrIikiKX19ZnVuY3Rpb24gZyh0LGUpe3JldHVybiB0LmlucHV0QXJlYVN0YXJ0K0Uuc3RlcEluc2V0Kyh0LmlucHV0QXJlYUxlbmd0aC0yKkUuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIHkodCxlKXtyZXR1cm4gTWF0aC5taW4oMSxNYXRoLm1heCgwLChlLUUuc3RlcEluc2V0LXQuaW5wdXRBcmVhU3RhcnQpLyh0LmlucHV0QXJlYUxlbmd0aC0yKkUuc3RlcEluc2V0LTIqdC5pbnB1dEFyZWFTdGFydCkpKX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgicmVjdC4iK0UucmFpbFRvdWNoUmVjdENsYXNzKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS5yYWlsVG91Y2hSZWN0Q2xhc3MsITApLmNhbGwoZCxlLHQscikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksbi5hdHRyKHt3aWR0aDpyLmlucHV0QXJlYUxlbmd0aCxoZWlnaHQ6TWF0aC5tYXgoci5pbnB1dEFyZWFXaWR0aCxFLnRpY2tPZmZzZXQrci50aWNrbGVuK3IubGFiZWxIZWlnaHQpfSkuY2FsbChrLmZpbGwsci5iZ2NvbG9yKS5hdHRyKCJvcGFjaXR5IiwwKSxBLnNldFRyYW5zbGF0ZShuLDAsci5jdXJyZW50VmFsdWVUb3RhbEhlaWdodCl9ZnVuY3Rpb24geCh0LGUpe3ZhciByPXQuc2VsZWN0QWxsKCJyZWN0LiIrRS5yYWlsUmVjdENsYXNzKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoRS5yYWlsUmVjdENsYXNzLCEwKTt2YXIgbj1lLmlucHV0QXJlYUxlbmd0aC0yKkUucmFpbEluc2V0O3IuYXR0cih7d2lkdGg6bixoZWlnaHQ6RS5yYWlsV2lkdGgscng6RS5yYWlsUmFkaXVzLHJ5OkUucmFpbFJhZGl1cywic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KS5jYWxsKGsuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoay5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKSxBLnNldFRyYW5zbGF0ZShyLEUucmFpbEluc2V0LC41KihlLmlucHV0QXJlYVdpZHRoLUUucmFpbFdpZHRoKStlLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX1mdW5jdGlvbiBfKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2lufHx7fSxyPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTstMSE9PWkuaW5kZXhPZihFLmF1dG9NYXJnaW5JZFJvb3QpJiZNLmF1dG9NYXJnaW4odCxpKX19dmFyIHc9dCgiZDMiKSxNPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaz10KCIuLi9jb2xvciIpLEE9dCgiLi4vZHJhd2luZyIpLFQ9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksUz10KCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIiksRT10KCIuL2NvbnN0YW50cyIpLEw9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPW4oZSx0KSxzPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitFLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYocy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoRS5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxzLmV4aXQoKS5yZW1vdmUoKSxzLmV4aXQoKS5zaXplKCkmJl8odCksMCE9PXIubGVuZ3RoKXt2YXIgbD1zLnNlbGVjdEFsbCgiZy4iK0UuZ3JvdXBDbGFzc05hbWUpLmRhdGEocixpKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChFLmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKGUpe3cuc2VsZWN0KHRoaXMpLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlci5yZW1vdmUoKSxkZWxldGUgZS5fY29tbWFuZE9ic2VydmVyLE0uYXV0b01hcmdpbih0LEUuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleCl9KTtmb3IodmFyIHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGM9clt1XTthKHQsYyl9bC5lYWNoKGZ1bmN0aW9uKGUpe2lmKCEoZS5zdGVwcy5sZW5ndGg8Mikpe3ZhciByPXcuc2VsZWN0KHRoaXMpO20oZSksTS5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIodCxlLGUuc3RlcHMsZnVuY3Rpb24oZSl7dmFyIG49ci5kYXRhKClbMF07bi5hY3RpdmUhPT1lLmluZGV4JiYobi5fZHJhZ2dpbmd8fGYodCxyLG4sZS5pbmRleCwhMSwhMCkpfSksbyh0LHcuc2VsZWN0KHRoaXMpLGUpfX0pfX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njk4LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhd2luZyI6NjI2LCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIjo2NTIsIi4vY29uc3RhbnRzIjo2ODcsZDM6MTIwfV0sNjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6Njg2LCIuL2NvbnN0YW50cyI6Njg3LCIuL2RlZmF1bHRzIjo2ODgsIi4vZHJhdyI6Njg5fV0sNjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vcGxvdGx5Iiksbz10KCIuLi8uLi9wbG90cy9wbG90cyIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi9kcmF3aW5nIiksdT10KCIuLi9jb2xvciIpLGM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIiksZj0vQ2xpY2sgdG8gZW50ZXIgLisgdGl0bGUvOyhlLmV4cG9ydHM9e30pLmRyYXc9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGQodCl7cy5zeW5jT3JBc3luYyhbcCxtXSx0KX1mdW5jdGlvbiBwKGUpe3JldHVybiBlLmF0dHIoInRyYW5zZm9ybSIsTT8icm90YXRlKCIrW00ucm90YXRlLHcueCx3LnldKyIpIHRyYW5zbGF0ZSgwLCAiK00ub2Zmc2V0KyIpIjpudWxsKSxlLnN0eWxlKHsiZm9udC1mYW1pbHkiOlQsImZvbnQtc2l6ZSI6bi5yb3VuZChTLDIpKyJweCIsZmlsbDp1LnJnYihFKSxvcGFjaXR5OkwqdS5vcGFjaXR5KEUpLCJmb250LXdlaWdodCI6by5mb250V2VpZ2h0fSkuYXR0cih3KS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHQpLG8ucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBtKHQpe3ZhciBlPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKF8mJl8uc2VsZWN0aW9uJiZfLnNpZGUmJnope2UuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgcj0wLGE9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn1bXy5zaWRlXSxvPS0xIT09WyJsZWZ0IiwidG9wIl0uaW5kZXhPZihfLnNpZGUpPy0xOjEsdT1pKF8ucGFkKT9fLnBhZDoyLGM9bC5iQm94KGUubm9kZSgpKSxoPXtsZWZ0OjAsdG9wOjAscmlnaHQ6QS53aWR0aCxib3R0b206QS5oZWlnaHR9LGY9Xy5tYXhTaGlmdHx8KGhbXy5zaWRlXS1jW18uc2lkZV0pKigibGVmdCI9PT1fLnNpZGV8fCJ0b3AiPT09Xy5zaWRlPy0xOjEpO2lmKGY8MClyPWY7ZWxzZXt2YXIgZD1fLm9mZnNldExlZnR8fDAscD1fLm9mZnNldFRvcHx8MDtjLmxlZnQtPWQsYy5yaWdodC09ZCxjLnRvcC09cCxjLmJvdHRvbS09cCxfLnNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9bC5iQm94KHRoaXMpO3MuYkJveEludGVyc2VjdChjLHQsdSkmJihyPU1hdGgubWF4KHIsbyoodFtfLnNpZGVdLWNbYV0pK3UpKX0pLHI9TWF0aC5taW4oZixyKX1pZihyPjB8fGY8MCl7dmFyIG09e2xlZnQ6Wy1yLDBdLHJpZ2h0OltyLDBdLHRvcDpbMCwtcl0sYm90dG9tOlswLHJdfVtfLnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbSsiKSIpfX19dmFyIHYsZz1yLnByb3BDb250YWluZXIseT1yLnByb3BOYW1lLGI9ci50cmFjZUluZGV4LHg9ci5kZmx0TmFtZSxfPXIuYXZvaWR8fHt9LHc9ci5hdHRyaWJ1dGVzLE09ci50cmFuc2Zvcm0saz1yLmNvbnRhaW5lckdyb3VwLEE9dC5fZnVsbExheW91dCxUPWcudGl0bGVmb250LmZhbWlseSxTPWcudGl0bGVmb250LnNpemUsRT1nLnRpdGxlZm9udC5jb2xvcixMPTEsQz0hMSx6PWcudGl0bGUudHJpbSgpOyJ0aXRsZSI9PT15P3Y9InRpdGxlVGV4dCI6LTEhPT15LmluZGV4T2YoImF4aXMiKT92PSJheGlzVGl0bGVUZXh0Ijp5LmluZGV4T2YoITApJiYodj0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgST10Ll9jb250ZXh0LmVkaXRzW3ZdOyIiPT09eiYmKEw9MCksei5tYXRjaChmKSYmKEw9LjIsQz0hMCxJfHwoej0iIikpO3ZhciBEPXp8fEk7a3x8KGs9QS5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitlKS5kYXRhKFswXSksay5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImctIitlLCEwKSk7dmFyIFA9ay5zZWxlY3RBbGwoInRleHQiKS5kYXRhKEQ/WzBdOltdKTtpZihQLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IiksUC50ZXh0KHopLmF0dHIoImNsYXNzIixlKSxQLmV4aXQoKS5yZW1vdmUoKSxEKXtQLmNhbGwoZCk7dmFyIE89IkNsaWNrIHRvIGVudGVyICIreCsiIHRpdGxlIjtJJiYoej9QLm9uKCIub3BhY2l0eSIsbnVsbCk6ZnVuY3Rpb24oKXtMPTAsQz0hMCx6PU8sUC50ZXh0KHopLm9uKCJtb3VzZW92ZXIub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5TSE9XX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQub3BhY2l0eSIsZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oaC5ISURFX1BMQUNFSE9MREVSKS5zdHlsZSgib3BhY2l0eSIsMCl9KX0oKSxQLmNhbGwoYy5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dm9pZCAwIT09Yj9hLnJlc3R5bGUodCx5LGUsYik6YS5yZWxheW91dCh0LHksZSl9KS5vbigiY2FuY2VsIixmdW5jdGlvbigpe3RoaXMudGV4dCh0aGlzLmF0dHIoImRhdGEtdW5mb3JtYXR0ZWQiKSkuY2FsbChkKX0pLm9uKCJpbnB1dCIsZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fCIgIikuY2FsbChjLnBvc2l0aW9uVGV4dCx3Lngsdy55KX0pKSxQLmNsYXNzZWQoImpzLXBsYWNlaG9sZGVyIixDKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi4vY29sb3IiOjYwMiwiLi4vZHJhd2luZyI6NjI2LGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDY5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vLi4vcGxvdHMvcGFkX2F0dHJpYnV0ZXMiKSxzPXtfaXNMaW5rZWRUb0FycmF5OiJidXR0b24iLG1ldGhvZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicmVzdHlsZSIsInJlbGF5b3V0IiwiYW5pbWF0ZSIsInVwZGF0ZSIsInNraXAiXSxkZmx0OiJyZXN0eWxlIn0sYXJnczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In1dfSxsYWJlbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX07ZS5leHBvcnRzPXtfaXNMaW5rZWRUb0FycmF5OiJ1cGRhdGVtZW51IixfYXJyYXlBdHRyUmVnZXhwczpbL151cGRhdGVtZW51c1xbKDB8WzEtOV1bMC05XSspXF1cLmJ1dHRvbnMvXSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZHJvcGRvd24iLCJidXR0b25zIl0sZGZsdDoiZHJvcGRvd24ifSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJyaWdodCIsInVwIiwiZG93biJdLGRmbHQ6ImRvd24ifSxhY3RpdmU6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjB9LHNob3dhY3RpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGJ1dHRvbnM6cyx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxkZmx0Oi0uMDV9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJyaWdodCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MX0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHBhZDphKHt9LG8se30pLGZvbnQ6YSh7fSxuLHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3ODgsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4MjYsIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMX1dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNjk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMscixuKX1uKCJ2aXNpYmxlIixpKHQsZSkubGVuZ3RoPjApJiYobigiYWN0aXZlIiksbigiZGlyZWN0aW9uIiksbigidHlwZSIpLG4oInNob3dhY3RpdmUiKSxuKCJ4IiksbigieSIpLGEubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG4oInhhbmNob3IiKSxuKCJ5YW5jaG9yIiksbigicGFkLnQiKSxuKCJwYWQuciIpLG4oInBhZC5iIiksbigicGFkLmwiKSxhLmNvZXJjZUZvbnQobiwiZm9udCIsci5mb250KSxuKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG4oImJvcmRlcmNvbG9yIiksbigiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gaSh0LGUpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gYS5jb2VyY2UobixpLGMsdCxlKX1mb3IodmFyIG4saSxvPXQuYnV0dG9uc3x8W10scz1lLmJ1dHRvbnM9W10sbD0wO2w8by5sZW5ndGg7bCsrKW49b1tsXSxpPXt9LHIoIm1ldGhvZCIpLGEuaXNQbGFpbk9iamVjdChuKSYmKCJza2lwIj09PWkubWV0aG9kfHxBcnJheS5pc0FycmF5KG4uYXJncykpJiYocigiYXJncyIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpLGkuX2luZGV4PWwscy5wdXNoKGkpKTtyZXR1cm4gc312YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2NvbnN0YW50cyIpLHU9bC5uYW1lLGM9cy5idXR0b25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe28odCxlLHtuYW1lOnUsaGFuZGxlSXRlbURlZmF1bHRzOm59KX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6NzYxLCIuL2F0dHJpYnV0ZXMiOjY5MiwiLi9jb25zdGFudHMiOjY5M31dLDY5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT10W0wubmFtZV0scj1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5faW5kZXh9ZnVuY3Rpb24gYSh0KXtyZXR1cm4tMT09K3QuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuK3QuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lKT09PWUuX2luZGV4fWZ1bmN0aW9uIHModCxlLHIsbixpLGEsbyxzKXtlLl9pbnB1dC5hY3RpdmU9ZS5hY3RpdmU9bywiYnV0dG9ucyI9PT1lLnR5cGU/dSh0LG4sbnVsbCxudWxsLGUpOiJkcm9wZG93biI9PT1lLnR5cGUmJihpLmF0dHIoTC5tZW51SW5kZXhBdHRyTmFtZSwiLTEiKSxsKHQsbixpLGEsZSksc3x8dSh0LG4saSxhLGUpKX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIGE9ZS5zZWxlY3RBbGwoImcuIitMLmhlYWRlckNsYXNzTmFtZSkuZGF0YShbMF0pO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEwuaGVhZGVyQ2xhc3NOYW1lLCEwKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTt2YXIgcz1pLmFjdGl2ZSxsPWkuYnV0dG9uc1tzXXx8TC5ibGFua0hlYWRlck9wdHMsYz17eTppLnBhZC50LHlQYWQ6MCx4OmkucGFkLmwseFBhZDowLGluZGV4OjB9LGg9e3dpZHRoOmkuaGVhZGVyV2lkdGgsaGVpZ2h0OmkuaGVhZGVySGVpZ2h0fTthLmNhbGwoZixpLGwsdCkuY2FsbChiLGksYyxoKQo7dmFyIGQ9ZS5zZWxlY3RBbGwoInRleHQuIitMLmhlYWRlckFycm93Q2xhc3NOYW1lKS5kYXRhKFswXSk7ZC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoTC5oZWFkZXJBcnJvd0NsYXNzTmFtZSwhMCkuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwiZW5kIikuY2FsbChBLmZvbnQsaS5mb250KS50ZXh0KEwuYXJyb3dTeW1ib2xbaS5kaXJlY3Rpb25dKSxkLmF0dHIoe3g6aS5oZWFkZXJXaWR0aC1MLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6aS5oZWFkZXJIZWlnaHQvMitMLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyLmNhbGwoeCksci5hdHRyKEwubWVudUluZGV4QXR0ck5hbWUsbyhyLGkpPy0xOlN0cmluZyhpLl9pbmRleCkpLHUodCxlLHIsbixpKX0pLGEub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXthLmNhbGwodil9KSxhLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXthLmNhbGwoZyxpKX0pLEEuc2V0VHJhbnNsYXRlKGUsaS5seCxpLmx5KX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7cnx8KHI9ZSxyLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikpO3ZhciBvPWEocikmJiJidXR0b25zIiE9PWkudHlwZT9bXTppLmJ1dHRvbnMsbD0iZHJvcGRvd24iPT09aS50eXBlP0wuZHJvcGRvd25CdXR0b25DbGFzc05hbWU6TC5idXR0b25DbGFzc05hbWUsdT1yLnNlbGVjdEFsbCgiZy4iK2wpLmRhdGEobyksZD11LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLCEwKSxwPXUuZXhpdCgpOyJkcm9wZG93biI9PT1pLnR5cGU/KGQuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKSxwLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLnJlbW92ZSgpKTpwLnJlbW92ZSgpO3ZhciB5PTAseD0wLF89LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoaS5kaXJlY3Rpb24pOyJkcm9wZG93biI9PT1pLnR5cGUmJihfP3g9aS5oZWFkZXJIZWlnaHQrTC5nYXBCdXR0b25IZWFkZXI6eT1pLmhlYWRlcldpZHRoK0wuZ2FwQnV0dG9uSGVhZGVyKSwiZHJvcGRvd24iPT09aS50eXBlJiYidXAiPT09aS5kaXJlY3Rpb24mJih4PS1MLmdhcEJ1dHRvbkhlYWRlcitMLmdhcEJ1dHRvbi1pLm9wZW5IZWlnaHQpLCJkcm9wZG93biI9PT1pLnR5cGUmJiJsZWZ0Ij09PWkuZGlyZWN0aW9uJiYoeT0tTC5nYXBCdXR0b25IZWFkZXIrTC5nYXBCdXR0b24taS5vcGVuV2lkdGgpO3ZhciBrPXt4OmkubHgreStpLnBhZC5sLHk6aS5seSt4K2kucGFkLnQseVBhZDpMLmdhcEJ1dHRvbix4UGFkOkwuZ2FwQnV0dG9uLGluZGV4OjB9LEE9e2w6ay54K2kuYm9yZGVyd2lkdGgsdDprLnkraS5ib3JkZXJ3aWR0aH07dS5lYWNoKGZ1bmN0aW9uKGEsbyl7dmFyIGw9dy5zZWxlY3QodGhpcyk7bC5jYWxsKGYsaSxhLHQpLmNhbGwoYixpLGspLGwub24oImNsaWNrIixmdW5jdGlvbigpe3cuZXZlbnQuZGVmYXVsdFByZXZlbnRlZHx8KHModCxpLGEsZSxyLG4sbyksYS5leGVjdXRlJiZNLmV4ZWN1dGVBUElDb21tYW5kKHQsYS5tZXRob2QsYS5hcmdzKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTppLGJ1dHRvbjphLGFjdGl2ZTppLmFjdGl2ZX0pKX0pLGwub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtsLmNhbGwodil9KSxsLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtsLmNhbGwoZyxpKSx1LmNhbGwobSxpKX0pfSksdS5jYWxsKG0saSksXz8oQS53PU1hdGgubWF4KGkub3BlbldpZHRoLGkuaGVhZGVyV2lkdGgpLEEuaD1rLnktQS50KTooQS53PWsueC1BLmwsQS5oPU1hdGgubWF4KGkub3BlbkhlaWdodCxpLmhlYWRlckhlaWdodCkpLEEuZGlyZWN0aW9uPWkuZGlyZWN0aW9uLG4mJih1LnNpemUoKT9jKHQsZSxyLG4saSxBKTpoKG4pKX1mdW5jdGlvbiBjKHQsZSxyLG4saSxhKXt2YXIgbyxzLGwsdT1pLmRpcmVjdGlvbixjPSJ1cCI9PT11fHwiZG93biI9PT11LGg9aS5hY3RpdmU7aWYoYylmb3Iocz0wLGw9MDtsPGg7bCsrKXMrPWkuaGVpZ2h0c1tsXStMLmdhcEJ1dHRvbjtlbHNlIGZvcihvPTAsbD0wO2w8aDtsKyspbys9aS53aWR0aHNbbF0rTC5nYXBCdXR0b247bi5lbmFibGUoYSxvLHMpLG4uaGJhciYmbi5oYmFyLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIiksbi52YmFyJiZuLnZiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKX1mdW5jdGlvbiBoKHQpe3ZhciBlPSEhdC5oYmFyLHI9ISF0LnZiYXI7ZSYmdC5oYmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSksciYmdC52YmFyLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMCIpLmVhY2goImVuZCIsZnVuY3Rpb24oKXtyPSExLGV8fHQuZGlzYWJsZSgpfSl9ZnVuY3Rpb24gZih0LGUscixuKXt0LmNhbGwoZCxlKS5jYWxsKHAsZSxyLG4pfWZ1bmN0aW9uIGQodCxlKXt2YXIgcj10LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoWzBdKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChMLml0ZW1SZWN0Q2xhc3NOYW1lLCEwKS5hdHRyKHtyeDpMLnJ4LHJ5OkwucnksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5jYWxsKGsuc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoay5maWxsLGUuYmdjb2xvcikuc3R5bGUoInN0cm9rZS13aWR0aCIsZS5ib3JkZXJ3aWR0aCsicHgiKX1mdW5jdGlvbiBwKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKEwuaXRlbVRleHRDbGFzc05hbWUsITApLmNsYXNzZWQoInVzZXItc2VsZWN0LW5vbmUiLCEwKS5hdHRyKHsidGV4dC1hbmNob3IiOiJzdGFydCIsImRhdGEtbm90ZXgiOjF9KSxpLmNhbGwoQS5mb250LGUuZm9udCkudGV4dChyLmxhYmVsKS5jYWxsKFQuY29udmVydFRvVHNwYW5zLG4pfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj1lLmFjdGl2ZTt0LmVhY2goZnVuY3Rpb24odCxuKXt2YXIgaT13LnNlbGVjdCh0aGlzKTtuPT09ciYmZS5zaG93YWN0aXZlJiZpLnNlbGVjdCgicmVjdC4iK0wuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoay5maWxsLEwuYWN0aXZlQ29sb3IpfSl9ZnVuY3Rpb24gdih0KXt0LnNlbGVjdCgicmVjdC4iK0wuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoay5maWxsLEwuaG92ZXJDb2xvcil9ZnVuY3Rpb24gZyh0LGUpe3Quc2VsZWN0KCJyZWN0LiIrTC5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChrLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiB5KHQsZSl7ZS53aWR0aDE9MCxlLmhlaWdodDE9MCxlLmhlaWdodHM9W10sZS53aWR0aHM9W10sZS50b3RhbFdpZHRoPTAsZS50b3RhbEhlaWdodD0wLGUub3BlbldpZHRoPTAsZS5vcGVuSGVpZ2h0PTAsZS5seD0wLGUubHk9MDt2YXIgcj1BLnRlc3Rlci5zZWxlY3RBbGwoImcuIitMLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5kYXRhKGUuYnV0dG9ucyk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoTC5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIG49LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pO3IuZWFjaChmdW5jdGlvbihyLGkpe3ZhciBhPXcuc2VsZWN0KHRoaXMpO2EuY2FsbChmLGUscix0KTt2YXIgbz1hLnNlbGVjdCgiLiIrTC5pdGVtVGV4dENsYXNzTmFtZSkscz1vLm5vZGUoKSYmQS5iQm94KG8ubm9kZSgpKS53aWR0aCxsPU1hdGgubWF4KHMrTC50ZXh0UGFkWCxMLm1pbldpZHRoKSx1PWUuZm9udC5zaXplKkUsYz1ULmxpbmVDb3VudChvKSxoPU1hdGgubWF4KHUqYyxMLm1pbkhlaWdodCkrTC50ZXh0T2Zmc2V0WTtoPU1hdGguY2VpbChoKSxsPU1hdGguY2VpbChsKSxlLndpZHRoc1tpXT1sLGUuaGVpZ2h0c1tpXT1oLGUuaGVpZ2h0MT1NYXRoLm1heChlLmhlaWdodDEsaCksZS53aWR0aDE9TWF0aC5tYXgoZS53aWR0aDEsbCksbj8oZS50b3RhbFdpZHRoPU1hdGgubWF4KGUudG90YWxXaWR0aCxsKSxlLm9wZW5XaWR0aD1lLnRvdGFsV2lkdGgsZS50b3RhbEhlaWdodCs9aCtMLmdhcEJ1dHRvbixlLm9wZW5IZWlnaHQrPWgrTC5nYXBCdXR0b24pOihlLnRvdGFsV2lkdGgrPWwrTC5nYXBCdXR0b24sZS5vcGVuV2lkdGgrPWwrTC5nYXBCdXR0b24sZS50b3RhbEhlaWdodD1NYXRoLm1heChlLnRvdGFsSGVpZ2h0LGgpLGUub3BlbkhlaWdodD1lLnRvdGFsSGVpZ2h0KX0pLG4/ZS50b3RhbEhlaWdodC09TC5nYXBCdXR0b246ZS50b3RhbFdpZHRoLT1MLmdhcEJ1dHRvbixlLmhlYWRlcldpZHRoPWUud2lkdGgxK0wuYXJyb3dQYWRYLGUuaGVhZGVySGVpZ2h0PWUuaGVpZ2h0MSwiZHJvcGRvd24iPT09ZS50eXBlJiYobj8oZS53aWR0aDErPUwuYXJyb3dQYWRYLGUudG90YWxIZWlnaHQ9ZS5oZWlnaHQxKTplLnRvdGFsV2lkdGg9ZS53aWR0aDEsZS50b3RhbFdpZHRoKz1MLmFycm93UGFkWCksci5yZW1vdmUoKTt2YXIgaT1lLnRvdGFsV2lkdGgrZS5wYWQubCtlLnBhZC5yLGE9ZS50b3RhbEhlaWdodCtlLnBhZC50K2UucGFkLmIsbz10Ll9mdWxsTGF5b3V0Ll9zaXplO2UubHg9by5sK28udyplLngsZS5seT1vLnQrby5oKigxLWUueSk7dmFyIHM9ImxlZnQiO1MuaXNSaWdodEFuY2hvcihlKSYmKGUubHgtPWkscz0icmlnaHQiKSxTLmlzQ2VudGVyQW5jaG9yKGUpJiYoZS5seC09aS8yLHM9ImNlbnRlciIpO3ZhciBsPSJ0b3AiO1MuaXNCb3R0b21BbmNob3IoZSkmJihlLmx5LT1hLGw9ImJvdHRvbSIpLFMuaXNNaWRkbGVBbmNob3IoZSkmJihlLmx5LT1hLzIsbD0ibWlkZGxlIiksZS50b3RhbFdpZHRoPU1hdGguY2VpbChlLnRvdGFsV2lkdGgpLGUudG90YWxIZWlnaHQ9TWF0aC5jZWlsKGUudG90YWxIZWlnaHQpLGUubHg9TWF0aC5yb3VuZChlLmx4KSxlLmx5PU1hdGgucm91bmQoZS5seSksTS5hdXRvTWFyZ2luKHQsTC5hdXRvTWFyZ2luSWRSb290K2UuX2luZGV4LHt4OmUueCx5OmUueSxsOmkqKHtyaWdodDoxLGNlbnRlcjouNX1bc118fDApLHI6aSooe2xlZnQ6MSxjZW50ZXI6LjV9W3NdfHwwKSxiOmEqKHt0b3A6MSxtaWRkbGU6LjV9W2xdfHwwKSx0OmEqKHtib3R0b206MSxtaWRkbGU6LjV9W2xdfHwwKX0pfWZ1bmN0aW9uIGIodCxlLHIsbil7bj1ufHx7fTt2YXIgaT10LnNlbGVjdCgiLiIrTC5pdGVtUmVjdENsYXNzTmFtZSksYT10LnNlbGVjdCgiLiIrTC5pdGVtVGV4dENsYXNzTmFtZSksbz1lLmJvcmRlcndpZHRoLHM9ci5pbmRleDtBLnNldFRyYW5zbGF0ZSh0LG8rci54LG8rci55KTt2YXIgbD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihlLmRpcmVjdGlvbiksdT1uLmhlaWdodHx8KGw/ZS5oZWlnaHRzW3NdOmUuaGVpZ2h0MSk7aS5hdHRyKHt4OjAseTowLHdpZHRoOm4ud2lkdGh8fChsP2Uud2lkdGgxOmUud2lkdGhzW3NdKSxoZWlnaHQ6dX0pO3ZhciBjPWUuZm9udC5zaXplKkUsaD1ULmxpbmVDb3VudChhKSxmPShoLTEpKmMvMjtULnBvc2l0aW9uVGV4dChhLEwudGV4dE9mZnNldFgsdS8yLWYrTC50ZXh0T2Zmc2V0WSksbD9yLnkrPWUuaGVpZ2h0c1tzXStyLnlQYWQ6ci54Kz1lLndpZHRoc1tzXStyLnhQYWQsci5pbmRleCsrfWZ1bmN0aW9uIHgodCl7dC5zZWxlY3RBbGwoImcuIitMLmRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lKS5yZW1vdmUoKX1mdW5jdGlvbiBfKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9wdXNobWFyZ2lufHx7fSxyPU9iamVjdC5rZXlzKGUpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTstMSE9PWkuaW5kZXhPZihMLmF1dG9NYXJnaW5JZFJvb3QpJiZNLmF1dG9NYXJnaW4odCxpKX19dmFyIHc9dCgiZDMiKSxNPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaz10KCIuLi9jb2xvciIpLEE9dCgiLi4vZHJhd2luZyIpLFQ9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksUz10KCIuLi9sZWdlbmQvYW5jaG9yX3V0aWxzIiksRT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLEw9dCgiLi9jb25zdGFudHMiKSxDPXQoIi4vc2Nyb2xsYm94Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uKGUpLGE9ZS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy4iK0wuY29udGFpbmVyQ2xhc3NOYW1lKS5kYXRhKHIubGVuZ3RoPjA/WzBdOltdKTtpZihhLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmNvbnRhaW5lckNsYXNzTmFtZSwhMCkuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmV4aXQoKS5zaXplKCkmJl8odCksMCE9PXIubGVuZ3RoKXt2YXIgYz1hLnNlbGVjdEFsbCgiZy4iK0wuaGVhZGVyR3JvdXBDbGFzc05hbWUpLmRhdGEocixpKTtjLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChMLmhlYWRlckdyb3VwQ2xhc3NOYW1lLCEwKTt2YXIgaD1hLnNlbGVjdEFsbCgiZy4iK0wuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSkuZGF0YShbMF0pO2guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEwuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSwhMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7Zm9yKHZhciBmPTA7ZjxyLmxlbmd0aDtmKyspe3ZhciBkPXJbZl07eSh0LGQpfXZhciBwPSJ1cGRhdGVtZW51cyIrZS5fdWlkLG09bmV3IEModCxoLHApO2MuZW50ZXIoKS5zaXplKCkmJmguY2FsbCh4KS5hdHRyKEwubWVudUluZGV4QXR0ck5hbWUsIi0xIiksYy5leGl0KCkuZWFjaChmdW5jdGlvbihlKXt3LnNlbGVjdCh0aGlzKS5yZW1vdmUoKSxoLmNhbGwoeCkuYXR0cihMLm1lbnVJbmRleEF0dHJOYW1lLCItMSIpLE0uYXV0b01hcmdpbih0LEwuYXV0b01hcmdpbklkUm9vdCtlLl9pbmRleCl9KSxjLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dy5zZWxlY3QodGhpcyksbj0iZHJvcGRvd24iPT09ZS50eXBlP2g6bnVsbDtNLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLGZ1bmN0aW9uKGkpe3ModCxlLGUuYnV0dG9uc1tpLmluZGV4XSxyLG4sbSxpLmluZGV4LCEwKX0pLCJkcm9wZG93biI9PT1lLnR5cGU/KGwodCxyLGgsbSxlKSxvKGgsZSkmJnUodCxyLGgsbSxlKSk6dSh0LHIsbnVsbCxudWxsLGUpfSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90cy9wbG90cyI6ODI3LCIuLi9jb2xvciI6NjAyLCIuLi9kcmF3aW5nIjo2MjYsIi4uL2xlZ2VuZC9hbmNob3JfdXRpbHMiOjY1MiwiLi9jb25zdGFudHMiOjY5MywiLi9zY3JvbGxib3giOjY5NyxkMzoxMjB9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bNjkwXVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHsiLi9hdHRyaWJ1dGVzIjo2OTIsIi4vY29uc3RhbnRzIjo2OTMsIi4vZGVmYXVsdHMiOjY5NCwiLi9kcmF3Ijo2OTUsZHVwOjY5MH1dLDY5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLmdkPXQsdGhpcy5jb250YWluZXI9ZSx0aGlzLmlkPXIsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMudHJhbnNsYXRlWD1udWxsLHRoaXMudHJhbnNsYXRlWT1udWxsLHRoaXMuaGJhcj1udWxsLHRoaXMudmJhcj1udWxsLHRoaXMuYmc9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJveC1iZyIpLmRhdGEoWzBdKSx0aGlzLmJnLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLm9uKCJ3aGVlbCIsbnVsbCkucmVtb3ZlKCksdGhpcy5iZy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJveC1iZyIsITApLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoe29wYWNpdHk6MCx4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9KX1lLmV4cG9ydHM9bjt2YXIgaT10KCJkMyIpLGE9dCgiLi4vY29sb3IiKSxvPXQoIi4uL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpO24uYmFyV2lkdGg9MixuLmJhckxlbmd0aD0yMCxuLmJhclJhZGl1cz0yLG4uYmFyUGFkPTEsbi5iYXJDb2xvcj0iIzgwOEJBNCIsbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgcz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9cy53aWR0aCx1PXMuaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgYyxoLGYsZCxwPXRoaXMucG9zaXRpb24ubCxtPXRoaXMucG9zaXRpb24udyx2PXRoaXMucG9zaXRpb24udCxnPXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLGI9ImRvd24iPT09eSx4PSJsZWZ0Ij09PXksXz0icmlnaHQiPT09eSx3PSJ1cCI9PT15LE09bSxrPWc7Ynx8eHx8X3x8d3x8KHRoaXMucG9zaXRpb24uZGlyZWN0aW9uPSJkb3duIixiPSEwKSxifHx3PyhjPXAsaD1jK00sYj8oZj12LGQ9TWF0aC5taW4oZitrLHUpLGs9ZC1mKTooZD12K2ssZj1NYXRoLm1heChkLWssMCksaz1kLWYpKTooZj12LGQ9ZitrLHg/KGg9cCtNLGM9TWF0aC5tYXgoaC1NLDApLE09aC1jKTooYz1wLGg9TWF0aC5taW4oYytNLGwpLE09aC1jKSksdGhpcy5fYm94PXtsOmMsdDpmLHc6TSxoOmt9O3ZhciBBPW0+TSxUPW4uYmFyTGVuZ3RoKzIqbi5iYXJQYWQsUz1uLmJhcldpZHRoKzIqbi5iYXJQYWQsRT1wLEw9ditnO0wrUz51JiYoTD11LVMpO3ZhciBDPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItaG9yaXpvbnRhbCIpLmRhdGEoQT9bMF06W10pO0MuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksQy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci1ob3Jpem9udGFsIiwhMCkuY2FsbChhLmZpbGwsbi5iYXJDb2xvciksQT8odGhpcy5oYmFyPUMuYXR0cih7cng6bi5iYXJSYWRpdXMscnk6bi5iYXJSYWRpdXMseDpFLHk6TCx3aWR0aDpULGhlaWdodDpTfSksdGhpcy5faGJhclhNaW49RStULzIsdGhpcy5faGJhclRyYW5zbGF0ZU1heD1NLVQpOihkZWxldGUgdGhpcy5oYmFyLGRlbGV0ZSB0aGlzLl9oYmFyWE1pbixkZWxldGUgdGhpcy5faGJhclRyYW5zbGF0ZU1heCk7dmFyIHo9Zz5rLEk9bi5iYXJXaWR0aCsyKm4uYmFyUGFkLEQ9bi5iYXJMZW5ndGgrMipuLmJhclBhZCxQPXArbSxPPXY7UCtJPmwmJihQPWwtSSk7dmFyIFI9dGhpcy5jb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnNjcm9sbGJhci12ZXJ0aWNhbCIpLmRhdGEoej9bMF06W10pO1IuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkucmVtb3ZlKCksUi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNjcm9sbGJhci12ZXJ0aWNhbCIsITApLmNhbGwoYS5maWxsLG4uYmFyQ29sb3IpLHo/KHRoaXMudmJhcj1SLmF0dHIoe3J4Om4uYmFyUmFkaXVzLHJ5Om4uYmFyUmFkaXVzLHg6UCx5Ok8sd2lkdGg6SSxoZWlnaHQ6RH0pLHRoaXMuX3ZiYXJZTWluPU8rRC8yLHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXg9ay1EKTooZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpO3ZhciBGPXRoaXMuaWQsaj1jLS41LE49ej9oK0krLjU6aCsuNSxCPWYtLjUsVT1BP2QrUysuNTpkKy41LFY9cy5fdG9wZGVmcy5zZWxlY3RBbGwoIiMiK0YpLmRhdGEoQXx8ej9bMF06W10pO2lmKFYuZXhpdCgpLnJlbW92ZSgpLFYuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLEYpLmFwcGVuZCgicmVjdCIpLEF8fHo/KHRoaXMuX2NsaXBSZWN0PVYuc2VsZWN0KCJyZWN0IikuYXR0cih7eDpNYXRoLmZsb29yKGopLHk6TWF0aC5mbG9vcihCKSx3aWR0aDpNYXRoLmNlaWwoTiktTWF0aC5mbG9vcihqKSxoZWlnaHQ6TWF0aC5jZWlsKFUpLU1hdGguZmxvb3IoQil9KSx0aGlzLmNvbnRhaW5lci5jYWxsKG8uc2V0Q2xpcFVybCxGKSx0aGlzLmJnLmF0dHIoe3g6cCx5OnYsd2lkdGg6bSxoZWlnaHQ6Z30pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoby5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksQXx8eil7dmFyIEg9aS5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsZnVuY3Rpb24oKXtpLmV2ZW50LnNvdXJjZUV2ZW50LnByZXZlbnREZWZhdWx0KCl9KS5vbigiZHJhZyIsdGhpcy5fb25Cb3hEcmFnLmJpbmQodGhpcykpO3RoaXMuY29udGFpbmVyLm9uKCJ3aGVlbCIsbnVsbCkub24oIndoZWVsIix0aGlzLl9vbkJveFdoZWVsLmJpbmQodGhpcykpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChIKTt2YXIgcT1pLmJlaGF2aW9yLmRyYWcoKS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbigpe2kuZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKSxpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkub24oImRyYWciLHRoaXMuX29uQmFyRHJhZy5iaW5kKHRoaXMpKTtBJiZ0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKHEpLHomJnRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLmNhbGwocSl9dGhpcy5zZXRUcmFuc2xhdGUoZSxyKX0sbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpeyh0aGlzLmhiYXJ8fHRoaXMudmJhcikmJih0aGlzLmJnLmF0dHIoe3dpZHRoOjAsaGVpZ2h0OjB9KSx0aGlzLmNvbnRhaW5lci5vbigid2hlZWwiLG51bGwpLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChvLnNldENsaXBVcmwsbnVsbCksZGVsZXRlIHRoaXMuX2NsaXBSZWN0KSx0aGlzLmhiYXImJih0aGlzLmhiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLmhiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpLHRoaXMudmJhciYmKHRoaXMudmJhci5vbigiLmRyYWciLG51bGwpLHRoaXMudmJhci5yZW1vdmUoKSxkZWxldGUgdGhpcy52YmFyLGRlbGV0ZSB0aGlzLl92YmFyWU1pbixkZWxldGUgdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9LG4ucHJvdG90eXBlLl9vbkJveERyYWc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodC09aS5ldmVudC5keCksdGhpcy52YmFyJiYoZS09aS5ldmVudC5keSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0sbi5wcm90b3R5cGUuX29uQm94V2hlZWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRyYW5zbGF0ZVgsZT10aGlzLnRyYW5zbGF0ZVk7dGhpcy5oYmFyJiYodCs9aS5ldmVudC5kZWx0YVkpLHRoaXMudmJhciYmKGUrPWkuZXZlbnQuZGVsdGFZKSx0aGlzLnNldFRyYW5zbGF0ZSh0LGUpfSxuLnByb3RvdHlwZS5fb25CYXJEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO2lmKHRoaXMuaGJhcil7dmFyIHI9dCt0aGlzLl9oYmFyWE1pbixuPXIrdGhpcy5faGJhclRyYW5zbGF0ZU1heDt0PShzLmNvbnN0cmFpbihpLmV2ZW50LngscixuKS1yKS8obi1yKSoodGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53KX1pZih0aGlzLnZiYXIpe3ZhciBhPWUrdGhpcy5fdmJhcllNaW4sbz1hK3RoaXMuX3ZiYXJUcmFuc2xhdGVNYXg7ZT0ocy5jb25zdHJhaW4oaS5ldmVudC55LGEsbyktYSkvKG8tYSkqKHRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaCl9dGhpcy5zZXRUcmFuc2xhdGUodCxlKX0sbi5wcm90b3R5cGUuc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5wb3NpdGlvbi53LXRoaXMuX2JveC53LG49dGhpcy5wb3NpdGlvbi5oLXRoaXMuX2JveC5oO2lmKHQ9cy5jb25zdHJhaW4odHx8MCwwLHIpLGU9cy5jb25zdHJhaW4oZXx8MCwwLG4pLHRoaXMudHJhbnNsYXRlWD10LHRoaXMudHJhbnNsYXRlWT1lLHRoaXMuY29udGFpbmVyLmNhbGwoby5zZXRUcmFuc2xhdGUsdGhpcy5fYm94LmwtdGhpcy5wb3NpdGlvbi5sLXQsdGhpcy5fYm94LnQtdGhpcy5wb3NpdGlvbi50LWUpLHRoaXMuX2NsaXBSZWN0JiZ0aGlzLl9jbGlwUmVjdC5hdHRyKHt4Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi5sK3QtLjUpLHk6TWF0aC5mbG9vcih0aGlzLnBvc2l0aW9uLnQrZS0uNSl9KSx0aGlzLmhiYXIpe3ZhciBpPXQvcjt0aGlzLmhiYXIuY2FsbChvLnNldFRyYW5zbGF0ZSx0K2kqdGhpcy5faGJhclRyYW5zbGF0ZU1heCxlKX1pZih0aGlzLnZiYXIpe3ZhciBhPWUvbjt0aGlzLnZiYXIuY2FsbChvLnNldFRyYW5zbGF0ZSx0LGUrYSp0aGlzLl92YmFyVHJhbnNsYXRlTWF4KX19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9jb2xvciI6NjAyLCIuLi9kcmF3aW5nIjo2MjYsZDM6MTIwfV0sNjk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17RlJPTV9CTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbTowLG1pZGRsZTouNSx0b3A6MX0sRlJPTV9UTDp7bGVmdDowLGNlbnRlcjouNSxyaWdodDoxLGJvdHRvbToxLG1pZGRsZTouNSx0b3A6MH0sTElORV9TUEFDSU5HOjEuMyxNSURfU0hJRlQ6LjM1fX0se31dLDY5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOlsxXSxkb3Q6WzEsMV0sZGFzaDpbNCwxXSxsb25nZGFzaDpbOCwxXSxkYXNoZG90Ols0LDEsMSwxXSxsb25nZGFzaGRvdDpbOCwxLDEsMV19fSx7fV0sNzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Zvcih2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXtjaXJjbGU6e3VuaWNvZGU6Ilx1MjVjZiJ9LHNxdWFyZTp7dW5pY29kZToiXHUyNWEwIn0sZGlhbW9uZDp7dW5pY29kZToiXHUyNWM2In0sY3Jvc3M6e3VuaWNvZGU6Ilx1MjcxYSJ9LHg6e3VuaWNvZGU6Ilx1Mjc0YyJ9LCJ0cmlhbmdsZS11cCI6e3VuaWNvZGU6Ilx1MjViMiJ9LCJ0cmlhbmdsZS1kb3duIjp7dW5pY29kZToiXHUyNWJjIn0sInRyaWFuZ2xlLWxlZnQiOnt1bmljb2RlOiJcdTI1YzQifSwidHJpYW5nbGUtcmlnaHQiOnt1bmljb2RlOiJcdTI1YmEifSwidHJpYW5nbGUtbmUiOnt1bmljb2RlOiJcdTI1ZTUifSwidHJpYW5nbGUtbnciOnt1bmljb2RlOiJcdTI1ZTQifSwidHJpYW5nbGUtc2UiOnt1bmljb2RlOiJcdTI1ZTIifSwidHJpYW5nbGUtc3ciOnt1bmljb2RlOiJcdTI1ZTMifSxwZW50YWdvbjp7dW5pY29kZToiXHUyYjFmIn0saGV4YWdvbjp7dW5pY29kZToiXHUyYjIyIn0saGV4YWdvbjI6e3VuaWNvZGU6Ilx1MmIyMyJ9LHN0YXI6e3VuaWNvZGU6Ilx1MjYwNSJ9LCJkaWFtb25kLXRhbGwiOnt1bmljb2RlOiJcdTI2NjYifSxib3d0aWU6e3VuaWNvZGU6Ilx1MjlkMyJ9LCJkaWFtb25kLXgiOnt1bmljb2RlOiJcdTI3NTYifSwiY3Jvc3MtdGhpbiI6e3VuaWNvZGU6IisiLG5vQm9yZGVyOiEwfSxhc3Rlcmlzazp7dW5pY29kZToiXHUyNzMzIixub0JvcmRlcjohMH0sInktdXAiOnt1bmljb2RlOiJcdTIxNDQiLG5vQm9yZGVyOiEwfSwieS1kb3duIjp7dW5pY29kZToiWSIsbm9Cb3JkZXI6ITB9LCJsaW5lLWV3Ijp7dW5pY29kZToiXHUyNTAwIixub0JvcmRlcjohMH0sImxpbmUtbnMiOnt1bmljb2RlOiJcdTI1MDIiLG5vQm9yZGVyOiEwfX0sYT17fSxvPU9iamVjdC5rZXlzKGkpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthW2wrIi1vcGVuIl09bih7fSxpW2xdKX12YXIgdT17ImNpcmNsZS1jcm9zcy1vcGVuIjp7dW5pY29kZToiXHUyYTAxIixub0ZpbGw6ITB9LCJjaXJjbGUteC1vcGVuIjp7dW5pY29kZToiXHUyYTAyIixub0ZpbGw6ITB9LCJzcXVhcmUtY3Jvc3Mtb3BlbiI6e3VuaWNvZGU6Ilx1MjI5ZSIsbm9GaWxsOiEwfSwic3F1YXJlLXgtb3BlbiI6e3VuaWNvZGU6Ilx1MjJhMCIsbm9GaWxsOiEwfX07ZS5leHBvcnRzPW4oe30saSxhLHUpfSx7Ii4uL2xpYi9leHRlbmQiOjcxNX1dLDcwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3NvbGlkOltbXSwwXSxkb3Q6W1suNSwxXSwyMDBdLGRhc2g6W1suNSwxXSw1MF0sbG9uZ2Rhc2g6W1suNSwxXSwxMF0sZGFzaGRvdDpbWy41LC42MjUsLjg3NSwxXSw1MF0sbG9uZ2Rhc2hkb3Q6W1suNSwuNywuOCwxXSwxMF19fSx7fV0sNzAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2lyY2xlOiJcdTI1Y2YiLCJjaXJjbGUtb3BlbiI6Ilx1MjVjYiIsc3F1YXJlOiJcdTI1YTAiLCJzcXVhcmUtb3BlbiI6Ilx1MjVhMSIsZGlhbW9uZDoiXHUyNWM2IiwiZGlhbW9uZC1vcGVuIjoiXHUyNWM3Iixjcm9zczoiKyIseDoiXHUyNzRjIn19LHt9XSw3MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtTSE9XX1BMQUNFSE9MREVSOjEwMCxISURFX1BMQUNFSE9MREVSOjFlMyxEQkxDTElDS0RFTEFZOjMwMCxERVNFTEVDVERJTTouMn19LHt9XSw3MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCQUROVU06dm9pZCAwLEZQX1NBRkU6TnVtYmVyLk1BWF9WQUxVRS8xZTQsT05FQVZHWUVBUjozMTU1NzZlNSxPTkVBVkdNT05USDoyNjI5OGU1LE9ORURBWTo4NjRlNSxPTkVIT1VSOjM2ZTUsT05FTUlOOjZlNCxPTkVTRUM6MWUzLEVQT0NISkQ6MjQ0MDU4Ny41LEFMTU9TVF9FUVVBTDoxLTFlLTZ9fSx7fV0sNzA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZW50aXR5VG9Vbmljb2RlOnttdToiXHUwM2JjIiwiIzk1NiI6Ilx1MDNiYyIsYW1wOiImIiwiIzI4IjoiJiIsbHQ6IjwiLCIjNjAiOiI8IixndDoiPiIsIiM2MiI6Ij4iLG5ic3A6Ilx4YTAiLCIjMTYwIjoiXHhhMCIsdGltZXM6Ilx4ZDciLCIjMjE1IjoiXHhkNyIscGx1c21uOiJceGIxIiwiIzE3NyI6Ilx4YjEiLGRlZzoiXHhiMCIsIiMxNzYiOiJceGIwIn19fSx7fV0sNzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IueG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixyLnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHIueGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHIuc3ZnQXR0cnM9e3htbG5zOnIuc3ZnLCJ4bWxuczp4bGluayI6ci54bGlua319LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9wbG90bHkiKTtyLnZlcnNpb249IjEuMjkuMiIsdCgiZXM2LXByb21pc2UiKS5wb2x5ZmlsbCgpLHQoIi4uL2J1aWxkL3Bsb3Rjc3MiKSx0KCIuL2ZvbnRzL21hdGhqYXhfY29uZmlnIiksci5wbG90PW4ucGxvdCxyLm5ld1Bsb3Q9bi5uZXdQbG90LHIucmVzdHlsZT1uLnJlc3R5bGUsci5yZWxheW91dD1uLnJlbGF5b3V0LHIucmVkcmF3PW4ucmVkcmF3LHIudXBkYXRlPW4udXBkYXRlLHIuZXh0ZW5kVHJhY2VzPW4uZXh0ZW5kVHJhY2VzLHIucHJlcGVuZFRyYWNlcz1uLnByZXBlbmRUcmFjZXMsci5hZGRUcmFjZXM9bi5hZGRUcmFjZXMsci5kZWxldGVUcmFjZXM9bi5kZWxldGVUcmFjZXMsci5tb3ZlVHJhY2VzPW4ubW92ZVRyYWNlcyxyLnB1cmdlPW4ucHVyZ2Usci5zZXRQbG90Q29uZmlnPXQoIi4vcGxvdF9hcGkvc2V0X3Bsb3RfY29uZmlnIiksci5yZWdpc3Rlcj10KCIuL3Bsb3RfYXBpL3JlZ2lzdGVyIiksci50b0ltYWdlPXQoIi4vcGxvdF9hcGkvdG9faW1hZ2UiKSxyLmRvd25sb2FkSW1hZ2U9dCgiLi9zbmFwc2hvdC9kb3dubG9hZCIpLHIudmFsaWRhdGU9dCgiLi9wbG90X2FwaS92YWxpZGF0ZSIpLHIuYWRkRnJhbWVzPW4uYWRkRnJhbWVzLHIuZGVsZXRlRnJhbWVzPW4uZGVsZXRlRnJhbWVzLHIuYW5pbWF0ZT1uLmFuaW1hdGUsci5yZWdpc3Rlcih0KCIuL3RyYWNlcy9zY2F0dGVyIikpLHIucmVnaXN0ZXIoW3QoIi4vY29tcG9uZW50cy9meCIpLHQoIi4vY29tcG9uZW50cy9sZWdlbmQiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMiKSx0KCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCIpLHQoIi4vY29tcG9uZW50cy9zaGFwZXMiKSx0KCIuL2NvbXBvbmVudHMvaW1hZ2VzIiksdCgiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIiksdCgiLi9jb21wb25lbnRzL3NsaWRlcnMiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzbGlkZXIiKSx0KCIuL2NvbXBvbmVudHMvcmFuZ2VzZWxlY3RvciIpXSksci5JY29ucz10KCIuLi9idWlsZC9wbG90aWNvbiIpLHIuUGxvdHM9bi5QbG90cyxyLkZ4PXQoIi4vY29tcG9uZW50cy9meCIpLHIuU25hcHNob3Q9dCgiLi9zbmFwc2hvdCIpLHIuUGxvdFNjaGVtYT10KCIuL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksci5RdWV1ZT10KCIuL2xpYi9xdWV1ZSIpLHIuZDM9dCgiZDMiKX0seyIuLi9idWlsZC9wbG90Y3NzIjoxLCIuLi9idWlsZC9wbG90aWNvbiI6MiwiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIjo1OTMsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9uczNkIjo1OTgsIi4vY29tcG9uZW50cy9meCI6NjQzLCIuL2NvbXBvbmVudHMvaW1hZ2VzIjo2NTEsIi4vY29tcG9uZW50cy9sZWdlbmQiOjY1OSwiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiOjY3MSwiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIjo2NzcsIi4vY29tcG9uZW50cy9zaGFwZXMiOjY4NCwiLi9jb21wb25lbnRzL3NsaWRlcnMiOjY5MCwiLi9jb21wb25lbnRzL3VwZGF0ZW1lbnVzIjo2OTYsIi4vZm9udHMvbWF0aGpheF9jb25maWciOjcwOCwiLi9saWIvcXVldWUiOjczNiwiLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6NzUzLCIuL3Bsb3RfYXBpL3JlZ2lzdGVyIjo3NTQsIi4vcGxvdF9hcGkvc2V0X3Bsb3RfY29uZmlnIjo3NTUsIi4vcGxvdF9hcGkvdG9faW1hZ2UiOjc1NywiLi9wbG90X2FwaS92YWxpZGF0ZSI6NzU4LCIuL3Bsb3RseSI6NzU5LCIuL3NuYXBzaG90Ijo4NDcsIi4vc25hcHNob3QvZG93bmxvYWQiOjg0NCwiLi90cmFjZXMvc2NhdHRlciI6MTAzNSxkMzoxMjAsImVzNi1wcm9taXNlIjoxMjZ9XSw3MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7InVuZGVmaW5lZCIhPXR5cGVvZiBNYXRoSmF4PyhyLk1hdGhKYXg9ITAsTWF0aEpheC5IdWIuQ29uZmlnKHttZXNzYWdlU3R5bGU6Im5vbmUiLHNraXBTdGFydHVwVHlwZXNldDohMCxkaXNwbGF5QWxpZ246ImxlZnQiLHRleDJqYXg6e2lubGluZU1hdGg6W1siJCIsIiQiXSxbIlxcKCIsIlxcKSJdXX19KSxNYXRoSmF4Lkh1Yi5Db25maWd1cmVkKCkpOnIuTWF0aEpheD0hMX0se31dLDcwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7QXJyYXkuaXNBcnJheSh0KSYmKGVbcl09dFtuXSl9fSx7fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9L15bJyIlLCQjXHMnXSt8WywgXXxbJyIlLCQjXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsIiIpKSxuKHQpP051bWJlcih0KTppfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsImZhc3QtaXNudW1lcmljIjoxMjl9XSw3MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9nZXRfc2NhbGUiKSxzPShPYmplY3Qua2V5cyh0KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIikpLHQoIi4vbmVzdGVkX3Byb3BlcnR5IikpLGw9L14oWzItOV18WzEtOV1bMC05XSspJC87ci52YWxPYmplY3RzPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheSh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1TdHJpbmcocltuXSk7aWYoIi8iPT09aS5jaGFyQXQoMCkmJiIvIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGkuc3Vic3RyKDEsaS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPSJudW1iZXIiPT10eXBlb2YgdDshMCE9PW4uc3RyaWN0JiZpP2Uuc2V0KFN0cmluZyh0KSk6ZS5zZXQocil9ZWxzZSBuLm5vQmxhbmsmJiF0P2Uuc2V0KHIpOmUuc2V0KHQpfX0sY29sb3I6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtpKHQpLmlzVmFsaWQoKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9yc2NhbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtlLnNldChvKHQscikpfX0sYW5nbGU6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXsiYXV0byI9PT10P2Uuc2V0KCJhdXRvIik6bih0KT8oTWF0aC5hYnModCk+MTgwJiYodC09MzYwKk1hdGgucm91bmQodC8zNjApKSxlLnNldCgrdCkpOmUuc2V0KHIpfX0sc3VicGxvdGlkOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dmFyIG49ci5sZW5ndGg7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0LnN1YnN0cigwLG4pPT09ciYmbC50ZXN0KHQuc3Vic3RyKG4pKSlyZXR1cm4gdm9pZCBlLnNldCh0KTtlLnNldChyKX0sdmFsaWRhdGVGdW5jdGlvbjpmdW5jdGlvbih0LGUpe3ZhciByPWUuZGZsdCxuPXIubGVuZ3RoO3JldHVybiB0PT09cnx8InN0cmluZyI9PXR5cGVvZiB0JiYhKHQuc3Vic3RyKDAsbikhPT1yfHwhbC50ZXN0KHQuc3Vic3RyKG4pKSl9fSxmbGFnbGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB2b2lkIGUuc2V0KHIpO2lmKC0xIT09KG4uZXh0cmFzfHxbXSkuaW5kZXhPZih0KSlyZXR1cm4gdm9pZCBlLnNldCh0KTtmb3IodmFyIGk9dC5zcGxpdCgiKyIpLGE9MDthPGkubGVuZ3RoOyl7dmFyIG89aVthXTstMT09PW4uZmxhZ3MuaW5kZXhPZihvKXx8aS5pbmRleE9mKG8pPGE/aS5zcGxpY2UoYSwxKTphKyt9aS5sZW5ndGg/ZS5zZXQoaS5qb2luKCIrIikpOmUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiB2b2lkIGUuc2V0KG4pO3ZhciBhPWkuaXRlbXMsbz1bXTtuPUFycmF5LmlzQXJyYXkobik/bjpbXTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKylyLmNvZXJjZSh0LG8sYSwiWyIrcysiXSIsbltzXSk7ZS5zZXQobyl9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgbj1lLml0ZW1zO2lmKCFlLmZyZWVMZW5ndGgmJnQubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKCFyLnZhbGlkYXRlKHRbaV0sZS5pdGVtc1tpXSkpcmV0dXJuITF9cmV0dXJuITB9fX0sci5jb2VyY2U9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1zKG4saSkuZ2V0KCksbD1zKHQsaSksdT1zKGUsaSksYz1sLmdldCgpO3JldHVybiB2b2lkIDA9PT1hJiYoYT1vLmRmbHQpLG8uYXJyYXlPayYmQXJyYXkuaXNBcnJheShjKT8odS5zZXQoYyksYyk6KHIudmFsT2JqZWN0c1tvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uKGMsdSxhLG8pLHUuZ2V0KCkpfSxyLmNvZXJjZTI9ZnVuY3Rpb24odCxlLG4saSxhKXt2YXIgbz1zKHQsaSksbD1yLmNvZXJjZSh0LGUsbixpLGEpLHU9by5nZXQoKTtyZXR1cm4gdm9pZCAwIT09dSYmbnVsbCE9PXUmJmx9LHIuY29lcmNlRm9udD1mdW5jdGlvbih0LGUscil7dmFyIG49e307cmV0dXJuIHI9cnx8e30sbi5mYW1pbHk9dChlKyIuZmFtaWx5IixyLmZhbWlseSksbi5zaXplPXQoZSsiLnNpemUiLHIuc2l6ZSksbi5jb2xvcj10KGUrIi5jb2xvciIsci5jb2xvciksbn0sci5jb2VyY2VIb3ZlcmluZm89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89ZS5fbW9kdWxlLmF0dHJpYnV0ZXMscz1vLmhvdmVyaW5mbz97aG92ZXJpbmZvOm8uaG92ZXJpbmZvfTphLGw9cy5ob3ZlcmluZm87aWYoMT09PW4uX2RhdGFMZW5ndGgpe3ZhciB1PSJhbGwiPT09bC5kZmx0P2wuZmxhZ3Muc2xpY2UoKTpsLmRmbHQuc3BsaXQoIisiKTt1LnNwbGljZSh1LmluZGV4T2YoIm5hbWUiKSwxKSxpPXUuam9pbigiKyIpfXJldHVybiByLmNvZXJjZSh0LGUscywiaG92ZXJpbmZvIixpKX0sci52YWxpZGF0ZT1mdW5jdGlvbih0LGUpe3ZhciBuPXIudmFsT2JqZWN0c1tlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9nZXRfc2NhbGUiOjYxNCwiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyI6NjIwLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3MzAsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmTS5jb21wb25lbnRzUmVnaXN0cnkuY2FsZW5kYXJzJiYic3RyaW5nIj09dHlwZW9mIHQmJiJncmVnb3JpYW4iIT09dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIFN0cmluZyh0K01hdGgucG93KDEwLGUpKS5zdWJzdHIoMSl9ZnVuY3Rpb24gYSh0LGUscixuLGEpe2lmKChlfHxyfHxufHxhKSYmKHQrPSIgIitpKGUsMikrIjoiK2kociwyKSwobnx8YSkmJih0Kz0iOiIraShuLDIpLGEpKSl7Zm9yKHZhciBvPTQ7YSUxMD09MDspby09MSxhLz0xMDt0Kz0iLiIraShhLG8pfXJldHVybiB0fWZ1bmN0aW9uIG8odCxlLHIpe3Q9dC5yZXBsYWNlKEQsZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5taW4oK3QuY2hhckF0KDEpfHw2LDYpO3JldHVybihlLzFlMyUxKzIpLnRvRml4ZWQocikuc3Vic3RyKDIpLnJlcGxhY2UoLzArJC8sIiIpfHwiMCJ9KTt2YXIgaT1uZXcgRGF0ZShNYXRoLmZsb29yKGUrLjA1KSk7aWYobihyKSl0cnl7dD1NLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwid29ybGRDYWxGbXQiKSh0LGUscil9Y2F0Y2godCl7cmV0dXJuIkludmFsaWQifXJldHVybiBrKHQpKGkpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1tKHQrLjA1LHkpLG49aShNYXRoLmZsb29yKHIvYiksMikrIjoiK2kobShNYXRoLmZsb29yKHIveCksNjApLDIpO2lmKCJNIiE9PWUpe2QoZSl8fChlPTApO3ZhciBhPU1hdGgubWluKG0odC9fLDYwKSxQW2VdKSxvPSgxMDArYSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYobz1vLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitvfXJldHVybiBufWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQuZm9ybWF0RGF0ZSgieXl5eSIpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQuZm9ybWF0RGF0ZSgiTSB5eXl5Iil9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5mb3JtYXREYXRlKCJNIGQiKX1mdW5jdGlvbiBoKHQpe3JldHVybiB0LmZvcm1hdERhdGUoIk0gZCwgeXl5eSIpfXZhciBmPXQoImQzIiksZD10KCJmYXN0LWlzbnVtZXJpYyIpLHA9dCgiLi9sb2dnZXJzIikuZXJyb3IsbT10KCIuL21vZCIpLHY9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGc9di5CQUROVU0seT12Lk9ORURBWSxiPXYuT05FSE9VUix4PXYuT05FTUlOLF89di5PTkVTRUMsdz12LkVQT0NISkQsTT10KCIuLi9yZWdpc3RyeSIpLGs9Zi50aW1lLmZvcm1hdC51dGMsQT0vXlxzKigtP1xkXGRcZFxkfFxkXGQpKC0oXGQ/XGQpKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQ6P1xkXGQpPyk/KT8pPyk/XHMqJC9tLFQ9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkaT8pKC0oXGQ/XGQpKFsgVHRdKFswMV0/XGR8MlswLTNdKSg6KFswLTVdXGQpKDooWzAtNV1cZChcLlxkKyk/KSk/KFp8enxbK1wtXVxkXGQ6P1xkXGQpPyk/KT8pPyk/XHMqJC9tLFM9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLTcwO3IuZGF0ZVRpY2swPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCk/ZT9NLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1NVTkRBWSIpW3RdOk0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfVElDSyIpW3RdOmU/IjIwMDAtMDEtMDIiOiIyMDAwLTAxLTAxIn0sci5kZmx0UmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG4odCk/TS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsIkRGTFRSQU5HRSIpW3RdOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXX0sci5pc0pTRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5nZXRUaW1lfTt2YXIgRSxMO3IuZGF0ZVRpbWUybXM9ZnVuY3Rpb24odCxlKXtpZihyLmlzSlNEYXRlKHQpKXJldHVybiB0PU51bWJlcih0KS10LmdldFRpbWV6b25lT2Zmc2V0KCkqeCx0Pj1FJiZ0PD1MP3Q6ZztpZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gZzt0PVN0cmluZyh0KTt2YXIgaT1uKGUpLGE9dC5jaGFyQXQoMCk7IWl8fCJHIiE9PWEmJiJnIiE9PWF8fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciBvPWkmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNykscz10Lm1hdGNoKG8/VDpBKTtpZighcylyZXR1cm4gZzt2YXIgbD1zWzFdLHU9c1szXXx8IjEiLGM9TnVtYmVyKHNbNV18fDEpLGg9TnVtYmVyKHNbN118fDApLGY9TnVtYmVyKHNbOV18fDApLGQ9TnVtYmVyKHNbMTFdfHwwKTtpZihpKXtpZigyPT09bC5sZW5ndGgpcmV0dXJuIGc7bD1OdW1iZXIobCk7dmFyIHA7dHJ5e3ZhciBtPU0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZihvKXt2YXIgdj0iaSI9PT11LmNoYXJBdCh1Lmxlbmd0aC0xKTt1PXBhcnNlSW50KHUsMTApLHA9bS5uZXdEYXRlKGwsbS50b01vbnRoSW5kZXgobCx1LHYpLGMpfWVsc2UgcD1tLm5ld0RhdGUobCxOdW1iZXIodSksYyl9Y2F0Y2godCl7cmV0dXJuIGd9cmV0dXJuIHA/KHAudG9KRCgpLXcpKnkraCpiK2YqeCtkKl86Z31sPTI9PT1sLmxlbmd0aD8oTnVtYmVyKGwpKzJlMy1TKSUxMDArUzpOdW1iZXIobCksdS09MTt2YXIgaz1uZXcgRGF0ZShEYXRlLlVUQygyZTMsdSxjLGgsZikpO3JldHVybiBrLnNldFVUQ0Z1bGxZZWFyKGwpLGsuZ2V0VVRDTW9udGgoKSE9PXU/ZzprLmdldFVUQ0RhdGUoKSE9PWM/ZzprLmdldFRpbWUoKStkKl99LEU9ci5NSU5fTVM9ci5kYXRlVGltZTJtcygiLTk5OTkiKSxMPXIuTUFYX01TPXIuZGF0ZVRpbWUybXMoIjk5OTktMTItMzEgMjM6NTk6NTkuOTk5OSIpLHIuaXNEYXRlVGltZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmRhdGVUaW1lMm1zKHQsZSkhPT1nfTt2YXIgQz05MCp5LHo9MypiLEk9NSp4O3IubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8ISh0Pj1FJiZ0PD1MKSlyZXR1cm4gZztlfHwoZT0wKTt2YXIgaSxvLHMsbCx1LGMsaD1NYXRoLmZsb29yKDEwKm0odCsuMDUsMSkpLGY9TWF0aC5yb3VuZCh0LWgvMTApO2lmKG4ocikpe3ZhciBkPU1hdGguZmxvb3IoZi95KSt3LHA9TWF0aC5mbG9vcihtKHQseSkpO3RyeXtpPU0uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoZCkuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKHQpe2k9aygiRyVZLSVtLSVkIikobmV3IERhdGUoZikpfWlmKCItIj09PWkuY2hhckF0KDApKWZvcig7aS5sZW5ndGg8MTE7KWk9Ii0wIitpLnN1YnN0cigxKTtlbHNlIGZvcig7aS5sZW5ndGg8MTA7KWk9IjAiK2k7bz1lPEM/TWF0aC5mbG9vcihwL2IpOjAscz1lPEM/TWF0aC5mbG9vcihwJWIveCk6MCxsPWU8ej9NYXRoLmZsb29yKHAleC9fKTowLHU9ZTxJP3AlXyoxMCtoOjB9ZWxzZSBjPW5ldyBEYXRlKGYpLGk9aygiJVktJW0tJWQiKShjKSxvPWU8Qz9jLmdldFVUQ0hvdXJzKCk6MCxzPWU8Qz9jLmdldFVUQ01pbnV0ZXMoKTowLGw9ZTx6P2MuZ2V0VVRDU2Vjb25kcygpOjAsdT1lPEk/MTAqYy5nZXRVVENNaWxsaXNlY29uZHMoKStoOjA7cmV0dXJuIGEoaSxvLHMsbCx1KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49RSt5JiZ0PD1MLXkpKXJldHVybiBnO3ZhciBlPU1hdGguZmxvb3IoMTAqbSh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBhKGYudGltZS5mb3JtYXQoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrZSl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKHQsZSxpKXtpZihyLmlzSlNEYXRlKHQpfHwibnVtYmVyIj09dHlwZW9mIHQpe2lmKG4oaSkpcmV0dXJuIHAoIkpTIERhdGVzIGFuZCBtaWxsaXNlY29uZHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHdvcmxkIGNhbGVuZGFycyIsdCksZTtpZighKHQ9ci5tczJEYXRlVGltZUxvY2FsKCt0KSkmJnZvaWQgMCE9PWUpcmV0dXJuIGV9ZWxzZSBpZighci5pc0RhdGVUaW1lKHQsaSkpcmV0dXJuIHAoInVucmVjb2duaXplZCBkYXRlIix0KSxlO3JldHVybiB0fTt2YXIgRD0vJVxkP2YvZyxQPVs1OSw1OS45LDU5Ljk5LDU5Ljk5OSw1OS45OTk5XSxPPWsoIiVZIiksUj1rKCIlYiAlWSIpLEY9aygiJWIgJS1kIiksaj1rKCIlYiAlLWQsICVZIik7ci5mb3JtYXREYXRlPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLGY7aWYoaT1uKGkpJiZpLGUpcmV0dXJuIG8oZSx0LGkpO2lmKGkpdHJ5e3ZhciBkPU1hdGguZmxvb3IoKHQrLjA1KS95KSt3LHA9TS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImdldENhbCIpKGkpLmZyb21KRChkKTsieSI9PT1yP2Y9bChwKToibSI9PT1yP2Y9dShwKToiZCI9PT1yPyhhPWwocCksZj1jKHApKTooYT1oKHApLGY9cyh0LHIpKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9ZWxzZXt2YXIgbT1uZXcgRGF0ZShNYXRoLmZsb29yKHQrLjA1KSk7InkiPT09cj9mPU8obSk6Im0iPT09cj9mPVIobSk6ImQiPT09cj8oYT1PKG0pLGY9RihtKSk6KGE9aihtKSxmPXModCxyKSl9cmV0dXJuIGYrKGE/IlxuIithOiIiKX07dmFyIE49Myp5O3IuaW5jcmVtZW50TW9udGg9ZnVuY3Rpb24odCxlLHIpe3I9bihyKSYmcjt2YXIgaT1tKHQseSk7aWYodD1NYXRoLnJvdW5kKHQtaSkscil0cnl7dmFyIGE9TWF0aC5yb3VuZCh0L3kpK3csbz1NLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikocikscz1vLmZyb21KRChhKTtyZXR1cm4gZSUxMj9vLmFkZChzLGUsIm0iKTpvLmFkZChzLGUvMTIsInkiKSwocy50b0pEKCktdykqeStpfWNhdGNoKGUpe3AoImludmFsaWQgbXMgIit0KyIgaW4gY2FsZW5kYXIgIityKX12YXIgbD1uZXcgRGF0ZSh0K04pO3JldHVybiBsLnNldFVUQ01vbnRoKGwuZ2V0VVRDTW9udGgoKStlKStpLU59LHIuZmluZEV4YWN0RGF0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsaSxhPTAsbz0wLHM9MCxsPTAsdT1uKGUpJiZNLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiZ2V0Q2FsIikoZSksYz0wO2M8dC5sZW5ndGg7YysrKWlmKGk9dFtjXSxkKGkpKXtpZighKGkleSkpaWYodSl0cnl7cj11LmZyb21KRChpL3krdyksMT09PXIuZGF5KCk/MT09PXIubW9udGgoKT9hKys6bysrOnMrK31jYXRjaCh0KXt9ZWxzZSByPW5ldyBEYXRlKGkpLDE9PT1yLmdldFVUQ0RhdGUoKT8wPT09ci5nZXRVVENNb250aCgpP2ErKzpvKys6cysrfWVsc2UgbCsrO28rPWEscys9bzt2YXIgaD10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmEvaCxleGFjdE1vbnRoczpvL2gsZXhhY3REYXlzOnMvaH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vcmVnaXN0cnkiOjg0MiwiLi9sb2dnZXJzIjo3MjcsIi4vbW9kIjo3MjksZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwodD1bXSksdC5sZW5ndGg9ZSx0fX0se31dLDcxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG89YS5fZXZlbnRzW2VdO2lmKCFvKXJldHVybiBuOyJmdW5jdGlvbiI9PXR5cGVvZiBvJiYobz1bb10pO2Zvcih2YXIgcz1vLnBvcCgpLGw9MDtsPG8ubGVuZ3RoO2wrKylvW2xdKHIpO3JldHVybiBpPXMociksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjEyN31dLDcxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXtpZihudWxsIT09KG49dFtyXSkmJiJvYmplY3QiPT10eXBlb2YgbilyZXR1cm4hMTt2b2lkIDAhPT1uJiYoZVtyXT1uKX1yZXR1cm4hMH1mdW5jdGlvbiBpKHQsZSxyLHMpe3ZhciBsLHUsYyxoLGYsZCxwPXRbMF0sbT10Lmxlbmd0aDtpZigyPT09bSYmbyhwKSYmbyh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihuKHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciB2PTE7djxtO3YrKyl7bD10W3ZdO2Zvcih1IGluIGwpYz1wW3VdLGg9bFt1XSxzJiZvKGgpP3BbdV09aDplJiZoJiYoYShoKXx8KGY9byhoKSkpPyhmPyhmPSExLGQ9YyYmbyhjKT9jOltdKTpkPWMmJmEoYyk/Yzp7fSxwW3VdPWkoW2QsaF0sZSxyLHMpKToodm9pZCAwIT09aHx8cikmJihwW3VdPWgpfXJldHVybiBwfXZhciBhPXQoIi4vaXNfcGxhaW5fb2JqZWN0LmpzIiksbz1BcnJheS5pc0FycmF5O3IuZXh0ZW5kRmxhdD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMSwhMSwhMSl9LHIuZXh0ZW5kRGVlcD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMCwhMSwhMSl9LHIuZXh0ZW5kRGVlcEFsbD1mdW5jdGlvbigpe3JldHVybiBpKGFyZ3VtZW50cywhMCwhMCwhMSl9LHIuZXh0ZW5kRGVlcE5vQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGkoYXJndW1lbnRzLCEwLCExLCEwKX19LHsiLi9pc19wbGFpbl9vYmplY3QuanMiOjcyNn1dLDcxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNzE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyEwPT09bi52aXNpYmxlJiZlLnB1c2gobil9cmV0dXJuIGV9fSx7fV0sNzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4oMCxsW3RdKShlKX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT0wO2U8cy5sZW5ndGg7ZSsrKXt2YXIgcj1zW2VdO2lmKG5ldyBSZWdFeHAoYVtyXSkudGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gby53YXJuKCJVbnJlY29nbml6ZWQgY291bnRyeSBuYW1lOiAiK3QrIi4iKSwhMX12YXIgYT10KCJjb3VudHJ5LXJlZ2V4Iiksbz10KCIuLi9saWIiKSxzPU9iamVjdC5rZXlzKGEpLGw9eyJJU08tMyI6by5pZGVudGl0eSwiVVNBLXN0YXRlcyI6by5pZGVudGl0eSwiY291bnRyeSBuYW1lcyI6aX07ci5sb2NhdGlvblRvRmVhdHVyZT1mdW5jdGlvbih0LGUscil7dmFyIGk9bih0LGUpO2lmKGkpe2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKHMuaWQ9PT1pKXJldHVybiBzfW8ud2FybihbIkxvY2F0aW9uIHdpdGggaWQiLGksImRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyB0b3BvanNvbiBmZWF0dXJlIGF0IHRoaXMgcmVzb2x1dGlvbi4iXS5qb2luKCIgIikpfXJldHVybiExfX0seyIuLi9saWIiOjcyNCwiY291bnRyeS1yZWdleCI6MTA1fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5jYWxjVHJhY2VUb0xpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRbMF0udHJhY2Uscj1lLmNvbm5lY3RnYXBzLGk9W10sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sbD1zLmxvbmxhdDtsWzBdIT09bj9hLnB1c2gobCk6IXImJmEubGVuZ3RoPjAmJihpLnB1c2goYSksYT1bXSl9cmV0dXJuIGEubGVuZ3RoPjAmJmkucHVzaChhKSxpfSxyLm1ha2VMaW5lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307cmV0dXJuIHI9MT09PXQubGVuZ3RoP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0WzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fSxlJiYoci50cmFjZT1lKSxyfSxyLm1ha2VQb2x5Z29uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYoMT09PXQubGVuZ3RoKXI9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOnR9O2Vsc2V7Zm9yKHZhciBuPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wO2k8dC5sZW5ndGg7aSsrKW5baV09W3RbaV1dO3I9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6bn19cmV0dXJuIGUmJihyLnRyYWNlPWUpLHJ9LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbXX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNH1dLDcyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LHU9aS10LGM9by1pLGg9bi1lLGY9YS1lLGQ9cy1hLHA9bCpkLWMqaDtpZigwPT09cClyZXR1cm4gbnVsbDt2YXIgbT0odSpkLWMqZikvcCx2PSh1KmgtbCpmKS9wO3JldHVybiB2PDB8fHY+MXx8bTwwfHxtPjE/bnVsbDp7eDp0K2wqbSx5OmUraCptfX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9dmFyIGE9dCgiLi9tb2QiKTtyLnNlZ21lbnRzSW50ZXJzZWN0PW4sci5zZWdtZW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlLHIsYSxvLHMsbCx1KXtpZihuKHQsZSxyLGEsbyxzLGwsdSkpcmV0dXJuIDA7dmFyIGM9ci10LGg9YS1lLGY9bC1vLGQ9dS1zLHA9YypjK2gqaCxtPWYqZitkKmQsdj1NYXRoLm1pbihpKGMsaCxwLG8tdCxzLWUpLGkoYyxoLHAsbC10LHUtZSksaShmLGQsbSx0LW8sZS1zKSxpKGYsZCxtLHItbyxhLXMpKTtyZXR1cm4gTWF0aC5zcXJ0KHYpfTt2YXIgbyxzLGw7ci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbil7aWYodD09PXMmJm49PT1sfHwobz17fSxzPXQsbD1uKSxvW3JdKXJldHVybiBvW3JdO3ZhciBpPXQuZ2V0UG9pbnRBdExlbmd0aChhKHItbi8yLGUpKSx1PXQuZ2V0UG9pbnRBdExlbmd0aChhKHIrbi8yLGUpKSxjPU1hdGguYXRhbigodS55LWkueSkvKHUueC1pLngpKSxoPXQuZ2V0UG9pbnRBdExlbmd0aChhKHIsZSkpLGY9KDQqaC54K2kueCt1LngpLzYsZD0oNCpoLnkraS55K3UueSkvNixwPXt4OmYseTpkLHRoZXRhOmN9O3JldHVybiBvW3JdPXAscH0sci5jbGVhckxvY2F0aW9uQ2FjaGU9ZnVuY3Rpb24oKXtzPW51bGx9LHIuZ2V0VmlzaWJsZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9dC5nZXRQb2ludEF0TGVuZ3RoKGUpOzA9PT1lP2k9cjplPT09aCYmKGE9cik7dmFyIG49ci54PG8/by1yLng6ci54PnM/ci54LXM6MCxjPXIueTxsP2wtci55OnIueT51P3IueS11OjA7cmV0dXJuIE1hdGguc3FydChuKm4rYypjKX1mb3IodmFyIGksYSxvPWUubGVmdCxzPWUucmlnaHQsbD1lLnRvcCx1PWUuYm90dG9tLGM9MCxoPXQuZ2V0VG90YWxMZW5ndGgoKSxmPWgsZD1uKGMpO2Q7KXtpZigoYys9ZCtyKT5mKXJldHVybjtkPW4oYyl9Zm9yKGQ9bihmKTtkOyl7aWYoZi09ZCtyLGM+ZilyZXR1cm47ZD1uKGYpfXJldHVybnttaW46YyxtYXg6ZixsZW46Zi1jLHRvdGFsOmgsaXNDbG9zZWQ6MD09PWMmJmY9PT1oJiZNYXRoLmFicyhpLngtYS54KTwuMSYmTWF0aC5hYnMoaS55LWEueSk8LjF9fX0seyIuL21vZCI6NzI5fV0sNzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gaSh0KXtpZihzKHQpKXJldHVybiBoO3ZhciBlPWwodCk7cmV0dXJuIGUubGVuZ3RoP2U6aH1mdW5jdGlvbiBhKHQpe3JldHVybiBzKHQpP3Q6Zn1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbyxzLGMsZCxwLG09dC5jb2xvcix2PUFycmF5LmlzQXJyYXkobSksZz1BcnJheS5pc0FycmF5KGUpLHk9W10KO2lmKG89dm9pZCAwIT09dC5jb2xvcnNjYWxlP3UubWFrZUNvbG9yU2NhbGVGdW5jKHUuZXh0cmFjdFNjYWxlKHQuY29sb3JzY2FsZSx0LmNtaW4sdC5jbWF4KSk6aSxzPXY/ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dFtlXT9oOmwobyh0W2VdKSl9OmksYz1nP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/ZjphKHRbZV0pfTphLHZ8fGcpZm9yKHZhciBiPTA7YjxyO2IrKylkPXMobSxiKSxwPWMoZSxiKSx5W2JdPW4oZCxwKTtlbHNlIHk9bihsKG0pLGUpO3JldHVybiB5fXZhciBzPXQoImZhc3QtaXNudW1lcmljIiksbD10KCJjb2xvci1yZ2JhIiksdT10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxjPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGg9bChjKSxmPTE7ZS5leHBvcnRzPW99LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCJjb2xvci1yZ2JhIjo5MywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wOyhlPXQuaW5kZXhPZigiPHN1cD4iLGUpKT49MDspe3ZhciByPXQuaW5kZXhPZigiPC9zdXA+IixlKTtpZihyPGUpYnJlYWs7dD10LnNsaWNlKDAsZSkrbCh0LnNsaWNlKGUrNSxyKSkrdC5zbGljZShyKzYpfXJldHVybiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQucmVwbGFjZSgvXDxiclw+L2csIlxuIil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9cPC4qXD4vZywiIil9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dS5lbnRpdHlUb1VuaWNvZGUscj0wOyhyPXQuaW5kZXhPZigiJiIscikpPj0wOyl7dmFyIG49dC5pbmRleE9mKCI7IixyKTtpZihuPHIpcis9MTtlbHNle3ZhciBpPWVbdC5zbGljZShyKzEsbildO3Q9aT90LnNsaWNlKDAscikraSt0LnNsaWNlKG4rMSk6dC5zbGljZSgwLHIpK3Quc2xpY2UobisxKX19cmV0dXJuIHR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4iIitvKGEobihpKHQpKSkpfXZhciBsPXQoInN1cGVyc2NyaXB0LXRleHQiKSx1PXQoIi4uL2NvbnN0YW50cy9zdHJpbmdfbWFwcGluZ3MiKTtlLmV4cG9ydHM9c30seyIuLi9jb25zdGFudHMvc3RyaW5nX21hcHBpbmdzIjo3MDUsInN1cGVyc2NyaXB0LXRleHQiOjUyOH1dLDcyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSx7fV0sNzI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5GUF9TQUZFLHM9YS5CQUROVU0sbD1lLmV4cG9ydHM9e307bC5uZXN0ZWRQcm9wZXJ0eT10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGwuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGwuaXNBcnJheT10KCIuL2lzX2FycmF5IiksbC5tb2Q9dCgiLi9tb2QiKSxsLnRvTG9nUmFuZ2U9dCgiLi90b19sb2dfcmFuZ2UiKSxsLnJlbGlua1ByaXZhdGVLZXlzPXQoIi4vcmVsaW5rX3ByaXZhdGUiKSxsLmVuc3VyZUFycmF5PXQoIi4vZW5zdXJlX2FycmF5Iik7dmFyIHU9dCgiLi9jb2VyY2UiKTtsLnZhbE9iamVjdHM9dS52YWxPYmplY3RzLGwuY29lcmNlPXUuY29lcmNlLGwuY29lcmNlMj11LmNvZXJjZTIsbC5jb2VyY2VGb250PXUuY29lcmNlRm9udCxsLmNvZXJjZUhvdmVyaW5mbz11LmNvZXJjZUhvdmVyaW5mbyxsLnZhbGlkYXRlPXUudmFsaWRhdGU7dmFyIGM9dCgiLi9kYXRlcyIpO2wuZGF0ZVRpbWUybXM9Yy5kYXRlVGltZTJtcyxsLmlzRGF0ZVRpbWU9Yy5pc0RhdGVUaW1lLGwubXMyRGF0ZVRpbWU9Yy5tczJEYXRlVGltZSxsLm1zMkRhdGVUaW1lTG9jYWw9Yy5tczJEYXRlVGltZUxvY2FsLGwuY2xlYW5EYXRlPWMuY2xlYW5EYXRlLGwuaXNKU0RhdGU9Yy5pc0pTRGF0ZSxsLmZvcm1hdERhdGU9Yy5mb3JtYXREYXRlLGwuaW5jcmVtZW50TW9udGg9Yy5pbmNyZW1lbnRNb250aCxsLmRhdGVUaWNrMD1jLmRhdGVUaWNrMCxsLmRmbHRSYW5nZT1jLmRmbHRSYW5nZSxsLmZpbmRFeGFjdERhdGVzPWMuZmluZEV4YWN0RGF0ZXMsbC5NSU5fTVM9Yy5NSU5fTVMsbC5NQVhfTVM9Yy5NQVhfTVM7dmFyIGg9dCgiLi9zZWFyY2giKTtsLmZpbmRCaW49aC5maW5kQmluLGwuc29ydGVyQXNjPWguc29ydGVyQXNjLGwuc29ydGVyRGVzPWguc29ydGVyRGVzLGwuZGlzdGluY3RWYWxzPWguZGlzdGluY3RWYWxzLGwucm91bmRVcD1oLnJvdW5kVXA7dmFyIGY9dCgiLi9zdGF0cyIpO2wuYWdnTnVtcz1mLmFnZ051bXMsbC5sZW49Zi5sZW4sbC5tZWFuPWYubWVhbixsLnZhcmlhbmNlPWYudmFyaWFuY2UsbC5zdGRldj1mLnN0ZGV2LGwuaW50ZXJwPWYuaW50ZXJwO3ZhciBkPXQoIi4vbWF0cml4Iik7bC5pbml0MmRBcnJheT1kLmluaXQyZEFycmF5LGwudHJhbnNwb3NlUmFnZ2VkPWQudHJhbnNwb3NlUmFnZ2VkLGwuZG90PWQuZG90LGwudHJhbnNsYXRpb25NYXRyaXg9ZC50cmFuc2xhdGlvbk1hdHJpeCxsLnJvdGF0aW9uTWF0cml4PWQucm90YXRpb25NYXRyaXgsbC5yb3RhdGlvblhZTWF0cml4PWQucm90YXRpb25YWU1hdHJpeCxsLmFwcGx5MkRUcmFuc2Zvcm09ZC5hcHBseTJEVHJhbnNmb3JtLGwuYXBwbHkyRFRyYW5zZm9ybTI9ZC5hcHBseTJEVHJhbnNmb3JtMjt2YXIgcD10KCIuL2dlb21ldHJ5MmQiKTtsLnNlZ21lbnRzSW50ZXJzZWN0PXAuc2VnbWVudHNJbnRlcnNlY3QsbC5zZWdtZW50RGlzdGFuY2U9cC5zZWdtZW50RGlzdGFuY2UsbC5nZXRUZXh0TG9jYXRpb249cC5nZXRUZXh0TG9jYXRpb24sbC5jbGVhckxvY2F0aW9uQ2FjaGU9cC5jbGVhckxvY2F0aW9uQ2FjaGUsbC5nZXRWaXNpYmxlU2VnbWVudD1wLmdldFZpc2libGVTZWdtZW50O3ZhciBtPXQoIi4vZXh0ZW5kIik7bC5leHRlbmRGbGF0PW0uZXh0ZW5kRmxhdCxsLmV4dGVuZERlZXA9bS5leHRlbmREZWVwLGwuZXh0ZW5kRGVlcEFsbD1tLmV4dGVuZERlZXBBbGwsbC5leHRlbmREZWVwTm9BcnJheXM9bS5leHRlbmREZWVwTm9BcnJheXM7dmFyIHY9dCgiLi9sb2dnZXJzIik7bC5sb2c9di5sb2csbC53YXJuPXYud2FybixsLmVycm9yPXYuZXJyb3IsbC5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksbC5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksbC5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxsLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGwuY2xlYW5OdW1iZXI9dCgiLi9jbGVhbl9udW1iZXIiKSxsLmVuc3VyZU51bWJlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KT8odD1OdW1iZXIodCksdDwtb3x8dD5vP3M6aSh0KT9OdW1iZXIodCk6cyk6c30sbC5ub29wPXQoIi4vbm9vcCIpLGwuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGwuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWwubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSx1PW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQodSl9fSxsLnBhdXNlRXZlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uJiZ0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQmJnQucHJldmVudERlZmF1bHQoKSx0LmNhbmNlbEJ1YmJsZT0hMCwhMX0sbC5jb25zdHJhaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPnI/TWF0aC5tYXgocixNYXRoLm1pbihlLHQpKTpNYXRoLm1heChlLE1hdGgubWluKHIsdCkpfSxsLmJCb3hJbnRlcnNlY3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByPXJ8fDAsdC5sZWZ0PD1lLnJpZ2h0K3ImJmUubGVmdDw9dC5yaWdodCtyJiZ0LnRvcDw9ZS5ib3R0b20rciYmZS50b3A8PXQuYm90dG9tK3J9LGwuc2ltcGxlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpO28rKylhW29dPWUodFtvXSxyLG4pO3JldHVybiBhfSxsLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbil7aWYobnx8KG49MTYpLHZvaWQgMD09PXImJihyPTI0KSxyPD0wKXJldHVybiIwIjt2YXIgaSxhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxsPSIiO2ZvcihpPTI7cz09PTEvMDtpKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2kpKS9NYXRoLmxvZyhuKSppO3ZhciB1PXMtTWF0aC5mbG9vcihzKTtmb3IoaT0wO2k8TWF0aC5mbG9vcihzKTtpKyspbz1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobiksbD1vK2w7dSYmKGE9TWF0aC5wb3cobix1KSxvPU1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSphKS50b1N0cmluZyhuKSxsPW8rbCk7dmFyIGM9cGFyc2VJbnQobCxuKTtyZXR1cm4gZSYmZS5pbmRleE9mKGwpPi0xfHxjIT09MS8wJiZjPj1NYXRoLnBvdygyLHIpP3QoZSxyLG4pOmx9LGwuT3B0aW9uQ29udHJvbD1mdW5jdGlvbih0LGUpe3R8fCh0PXt9KSxlfHwoZT0ib3B0Iik7dmFyIHI9e307cmV0dXJuIHIub3B0aW9uTGlzdD1bXSxyLl9uZXdvcHRpb249ZnVuY3Rpb24obil7bltlXT10LHJbbi5uYW1lXT1uLHIub3B0aW9uTGlzdC5wdXNoKG4pfSxyWyJfIitlXT10LHJ9LGwuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsdT1uZXcgQXJyYXkobCksYz1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKXVbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKWk9cituKzEtZSxpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSp1W25dO2Nbcl09YX1yZXR1cm4gY30sbC5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBsLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IodmFyIGksYTt0Lmxlbmd0aDspaWYoYT10LnNwbGljZSgwLDEpWzBdLChpPWEoZSkpJiZpLnRoZW4pcmV0dXJuIGkudGhlbihuKS50aGVuKHZvaWQgMCxsLnByb21pc2VFcnJvcik7cmV0dXJuIHImJnIoZSl9LGwuc3RyaXBUcmFpbGluZ1NsYXNoPWZ1bmN0aW9uKHQpe3JldHVybiIvIj09PXQuc3Vic3RyKC0xKT90LnN1YnN0cigwLHQubGVuZ3RoLTEpOnR9LGwubm9uZU9yQWxsPWZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbixpLGE9ITEsbz0hMDtmb3Iobj0wO248ci5sZW5ndGg7bisrKWk9dFtyW25dXSx2b2lkIDAhPT1pJiZudWxsIT09aT9hPSEwOm89ITE7aWYoYSYmIW8pZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxsLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPTA7aTxuO2krKyllW2ldW3JdPXRbaV19LGwuZmlsbEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKG49bnx8bC5pZGVudGl0eSxBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sbC5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8bC5pZGVudGl0eTt2YXIgaT1sLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/bihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KGlbZVswXV0pP2lbZVswXV1bZVsxXV06aVtlXSk6aX0sbC5nZXRUYXJnZXRBcnJheT1mdW5jdGlvbih0LGUpe3ZhciByPWUudGFyZ2V0O2lmKCJzdHJpbmciPT10eXBlb2YgciYmcil7dmFyIG49bC5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpO3JldHVybiEhQXJyYXkuaXNBcnJheShuKSYmbn1yZXR1cm4hIUFycmF5LmlzQXJyYXkocikmJnJ9LGwubWluRXh0ZW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307Im9iamVjdCIhPXR5cGVvZiBlJiYoZT17fSk7dmFyIG4saSxhLG89T2JqZWN0LmtleXModCk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpPW9bbl0sYT10W2ldLCJfIiE9PWkuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgYSYmKCJtb2R1bGUiPT09aT9yW2ldPWE6QXJyYXkuaXNBcnJheShhKT9yW2ldPWEuc2xpY2UoMCwzKTpyW2ldPWEmJiJvYmplY3QiPT10eXBlb2YgYT9sLm1pbkV4dGVuZCh0W2ldLGVbaV0pOmEpO2ZvcihvPU9iamVjdC5rZXlzKGUpLG49MDtuPG8ubGVuZ3RoO24rKylpPW9bbl0sIm9iamVjdCI9PXR5cGVvZihhPWVbaV0pJiZpIGluIHImJiJvYmplY3QiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGwudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxsLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGwuaXNQbG90RGl2PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpO3JldHVybiBlLm5vZGUoKWluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuc2l6ZSgpJiZlLmNsYXNzZWQoImpzLXBsb3RseS1wbG90Iil9LGwucmVtb3ZlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10JiZ0LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX0sbC5hZGRTdHlsZVJ1bGU9ZnVuY3Rpb24odCxlKXtpZighbC5zdHlsZVNoZWV0KXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHIpLGwuc3R5bGVTaGVldD1yLnNoZWV0fXZhciBuPWwuc3R5bGVTaGVldDtuLmluc2VydFJ1bGU/bi5pbnNlcnRSdWxlKHQrInsiK2UrIn0iLDApOm4uYWRkUnVsZT9uLmFkZFJ1bGUodCxlLDApOmwud2FybigiYWRkU3R5bGVSdWxlIGZhaWxlZCIpfSxsLmlzSUU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09d2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9ifSxsLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNsYXNzZWR9LGwub2JqZWN0RnJvbVBhdGg9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10LnNwbGl0KCIuIiksaT1yPXt9LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW51bGwsbD1uW2FdLm1hdGNoKC8oLiopXFsoWzAtOV0rKVxdLyk7bD8obz1sWzFdLHM9bFsyXSxyPXJbb109W10sYT09PW4ubGVuZ3RoLTE/cltzXT1lOnJbc109e30scj1yW3NdKTooYT09PW4ubGVuZ3RoLTE/cltvXT1lOnJbb109e30scj1yW29dKX1yZXR1cm4gaX07dmFyIGc9L14oW15cW1wuXSspXC4oLispPy8seT0vXihbXlwuXSspXFsoWzAtOV0rKVxdKFwuKT8oLispPy87bC5leHBhbmRPYmplY3RQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQmJiFBcnJheS5pc0FycmF5KHQpKWZvcihyIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShyKSYmKChlPXIubWF0Y2goZykpPyhpPXRbcl0sbj1lWzFdLGRlbGV0ZSB0W3JdLHRbbl09bC5leHRlbmREZWVwTm9BcnJheXModFtuXXx8e30sbC5vYmplY3RGcm9tUGF0aChyLGwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpW25dKSk6KGU9ci5tYXRjaCh5KSk/KGk9dFtyXSxuPWVbMV0sYT1wYXJzZUludChlWzJdKSxkZWxldGUgdFtyXSx0W25dPXRbbl18fFtdLCIuIj09PWVbM10/KHM9ZVs0XSxvPXRbbl1bYV09dFtuXVthXXx8e30sbC5leHRlbmREZWVwTm9BcnJheXMobyxsLm9iamVjdEZyb21QYXRoKHMsbC5leHBhbmRPYmplY3RQYXRocyhpKSkpKTp0W25dW2FdPWwuZXhwYW5kT2JqZWN0UGF0aHMoaSkpOnRbcl09bC5leHBhbmRPYmplY3RQYXRocyh0W3JdKSk7cmV0dXJuIHR9LGwubnVtU2VwYXJhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKHJ8fChyPSExKSwic3RyaW5nIiE9dHlwZW9mIGV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNlcGFyYXRvciBzdHJpbmcgcmVxdWlyZWQgZm9yIGZvcm1hdHRpbmchIik7Im51bWJlciI9PXR5cGVvZiB0JiYodD1TdHJpbmcodCkpO3ZhciBuPS8oXGQrKShcZHszfSkvLGk9ZS5jaGFyQXQoMCksYT1lLmNoYXJBdCgxKSxvPXQuc3BsaXQoIi4iKSxzPW9bMF0sbD1vLmxlbmd0aD4xP2krb1sxXToiIjtpZihhJiYoby5sZW5ndGg+MXx8cy5sZW5ndGg+NHx8cikpZm9yKDtuLnRlc3Qocyk7KXM9cy5yZXBsYWNlKG4sIiQxIithKyIkMiIpO3JldHVybiBzK2x9fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi9jbGVhbl9udW1iZXIiOjcxMCwiLi9jb2VyY2UiOjcxMSwiLi9kYXRlcyI6NzEyLCIuL2Vuc3VyZV9hcnJheSI6NzEzLCIuL2V4dGVuZCI6NzE1LCIuL2ZpbHRlcl91bmlxdWUiOjcxNiwiLi9maWx0ZXJfdmlzaWJsZSI6NzE3LCIuL2dlb21ldHJ5MmQiOjcyMCwiLi9pZGVudGl0eSI6NzIzLCIuL2lzX2FycmF5Ijo3MjUsIi4vaXNfcGxhaW5fb2JqZWN0Ijo3MjYsIi4vbG9nZ2VycyI6NzI3LCIuL21hdHJpeCI6NzI4LCIuL21vZCI6NzI5LCIuL25lc3RlZF9wcm9wZXJ0eSI6NzMwLCIuL25vb3AiOjczMSwiLi9ub3RpZmllciI6NzMyLCIuL3B1c2hfdW5pcXVlIjo3MzUsIi4vcmVsaW5rX3ByaXZhdGUiOjczNywiLi9zZWFyY2giOjczOCwiLi9zdGF0cyI6NzQxLCIuL3RvX2xvZ19yYW5nZSI6NzQ0LGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDcyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXI6e2lzVmlldzpmdW5jdGlvbigpe3JldHVybiExfX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxuLmlzVmlldyh0KX19LHt9XSw3MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucz8iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KToiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSYmT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09T2JqZWN0LnByb3RvdHlwZX19LHt9XSw3Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKHQuYXBwbHkpdC5hcHBseSh0LGUpO2Vsc2UgZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdChlW3JdKX12YXIgaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLGE9ZS5leHBvcnRzPXt9O2EubG9nPWZ1bmN0aW9uKCl7aWYoaS5sb2dnaW5nPjEpe2Zvcih2YXIgdD1bIkxPRzoiXSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnB1c2goYXJndW1lbnRzW2VdKTtuKGNvbnNvbGUudHJhY2V8fGNvbnNvbGUubG9nLHQpfX0sYS53YXJuPWZ1bmN0aW9uKCl7aWYoaS5sb2dnaW5nPjApe2Zvcih2YXIgdD1bIldBUk46Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7bihjb25zb2xlLnRyYWNlfHxjb25zb2xlLmxvZyx0KX19LGEuZXJyb3I9ZnVuY3Rpb24oKXtpZihpLmxvZ2dpbmc+MCl7Zm9yKHZhciB0PVsiRVJST1I6Il0sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC5wdXNoKGFyZ3VtZW50c1tlXSk7bihjb25zb2xlLmVycm9yLHQpfX19LHsiLi4vcGxvdF9hcGkvcGxvdF9jb25maWciOjc1Mn1dLDcyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5MkRUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzOzM9PT1lLmxlbmd0aCYmKGU9ZVswXSk7dmFyIG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdXTtyZXR1cm4gci5kb3QodCxbblswXSxuWzFdLDFdKS5zbGljZSgwLDIpfX0sci5hcHBseTJEVHJhbnNmb3JtMj1mdW5jdGlvbih0KXt2YXIgZT1yLmFwcGx5MkRUcmFuc2Zvcm0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQuc2xpY2UoMCwyKSkuY29uY2F0KGUodC5zbGljZSgyLDQpKSl9fX0se31dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn19LHt9XSw3MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciByLGksYSxvLHMsbD10O2ZvcihvPTA7bzxlLmxlbmd0aC0xO28rKyl7aWYoLTE9PT0ocj1lW29dKSl7Zm9yKGk9ITAsYT1bXSxzPTA7czxsLmxlbmd0aDtzKyspYVtzXT1uKGxbc10sZS5zbGljZShvKzEpKSgpLGFbc10hPT1hWzBdJiYoaT0hMSk7cmV0dXJuIGk/YVswXTphfWlmKCJudW1iZXIiPT10eXBlb2YgciYmIWQobCkpcmV0dXJuO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW3JdKXx8bnVsbD09PWwpcmV0dXJufWlmKCJvYmplY3QiPT10eXBlb2YgbCYmbnVsbCE9PWwmJm51bGwhPT0oYT1sW2Vbb11dKSlyZXR1cm4gYX19ZnVuY3Rpb24gaSh0LGUpe2lmKCFjKHQpfHxwKHQpJiYiXSI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKXx8ZS5tYXRjaChnKSYmdm9pZCAwIT09dClyZXR1cm4hMTtpZighZCh0KSlyZXR1cm4hMDtpZihlLm1hdGNoKHYpKXJldHVybiEwO3ZhciByPW0oZSk7cmV0dXJuIHImJiIiPT09ci5pbmRleH1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGEsYyxoPXQsZj0iIixwPVtbdCxmXV0sbT1pKG4scik7Zm9yKGM9MDtjPGUubGVuZ3RoLTE7YysrKXtpZigibnVtYmVyIj09dHlwZW9mKGE9ZVtjXSkmJiFkKGgpKXRocm93ImFycmF5IGluZGV4IGJ1dCBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IjtpZigtMT09PWEpe2lmKG09IXMoaCxlLnNsaWNlKGMrMSksbixyKSlicmVhaztyZXR1cm59aWYoIWwoaCxhLGVbYysxXSxtKSlicmVhaztpZigib2JqZWN0IiE9dHlwZW9mKGg9aFthXSl8fG51bGw9PT1oKXRocm93ImNvbnRhaW5lciBpcyBub3QgYW4gb2JqZWN0IjtmPW8oZixhKSxwLnB1c2goW2gsZl0pfW0/KGM9PT1lLmxlbmd0aC0xJiZkZWxldGUgaFtlW2NdXSx1KHApKTpoW2VbY11dPW59fWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1lO3JldHVybiBmKGUpP3I9IlsiK2UrIl0iOnQmJihyPSIuIitlKSx0K3J9ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgbyxzPWQociksdT0hMCxjPXIsaD1uLnJlcGxhY2UoIi0xIiwwKSxmPSFzJiZpKHIsaCkscD1lWzBdO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaD1uLnJlcGxhY2UoIi0xIixvKSxzJiYoYz1yW28lci5sZW5ndGhdLGY9aShjLGgpKSxmJiYodT0hMSksbCh0LG8scCxmKSYmYSh0W29dLGUsbi5yZXBsYWNlKCItMSIsbykpKGMpO3JldHVybiB1fWZ1bmN0aW9uIGwodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH1mdW5jdGlvbiB1KHQpe3ZhciBlLHIsbixhLHMsbDtmb3IoZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtpZihuPXRbZV1bMF0sYT10W2VdWzFdLGw9ITEsZChuKSlmb3Iocj1uLmxlbmd0aC0xO3I+PTA7ci0tKWkobltyXSxvKGEscikpP2w/bltyXT12b2lkIDA6bi5wb3AoKTpsPSEwO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09bilmb3Iocz1PYmplY3Qua2V5cyhuKSxsPSExLHI9cy5sZW5ndGgtMTtyPj0wO3ItLSlpKG5bc1tyXV0sbyhhLHNbcl0pKT9kZWxldGUgbltzW3JdXTpsPSEwO2lmKGwpcmV0dXJufX1mdW5jdGlvbiBjKHQpe3JldHVybiB2b2lkIDA9PT10fHxudWxsPT09dHx8Im9iamVjdCI9PXR5cGVvZiB0JiYoZCh0KT8hdC5sZW5ndGg6IU9iamVjdC5rZXlzKHQpLmxlbmd0aCl9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX12YXIgZj10KCJmYXN0LWlzbnVtZXJpYyIpLGQ9dCgiLi9pc19hcnJheSIpLHA9dCgiLi9pc19wbGFpbl9vYmplY3QiKSxtPXQoIi4uL3Bsb3RfYXBpL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGYoZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGw9ZS5zcGxpdCgiLiIpO3M8bC5sZW5ndGg7KXtpZihyPVN0cmluZyhsW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pbFtzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7bC5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssbC5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9oKHQsZSxsKTp7c2V0OmEodCxsLGUpLGdldDpuKHQsbCksYXN0cjplLHBhcnRzOmwsb2JqOnR9fTt2YXIgdj0vKF58XC4pKChkb21haW58cmFuZ2UpKFwuW3h5XSk/fGFyZ3N8cGFyYWxsZWxzKSQvLGc9LyhefFwuKWFyZ3NcWy99LHsiLi4vcGxvdF9hcGkvY29udGFpbmVyX2FycmF5X21hdGNoIjo3NDcsIi4vaXNfYXJyYXkiOjcyNSwiLi9pc19wbGFpbl9vYmplY3QiOjcyNiwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDczMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sNzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9W107ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt0LmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDApLmVhY2goImVuZCIsZnVuY3Rpb24odCl7dmFyIGU9YS5pbmRleE9mKHQpOy0xIT09ZSYmYS5zcGxpY2UoZSwxKSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfWlmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIG89MWUzO2koZSk/bz1lOiJsb25nIj09PWUmJihvPTNlMyk7dmFyIHM9bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7cy5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCk7cy5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2UuYXBwZW5kKCJidXR0b24iKS5jbGFzc2VkKCJub3RpZmllci1jbG9zZSIsITApLmh0bWwoIiZ0aW1lczsiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuY2FsbChyKX0pO2Zvcih2YXIgaT1lLmFwcGVuZCgicCIpLGE9dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxzPTA7czxhLmxlbmd0aDtzKyspcyYmaS5hcHBlbmQoImJyIiksaS5hcHBlbmQoInNwYW4iKS50ZXh0KGFbc10pO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShvKS5jYWxsKHIpfSl9fX0se2QzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDczMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NldGN1cnNvciIpLGk9ImRhdGEtc2F2ZWRjdXJzb3IiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cihpKTtpZihlKXtpZighcil7Zm9yKHZhciBhPSh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXTswPT09cy5pbmRleE9mKCJjdXJzb3ItIikmJnQuYXR0cihpLHMuc3Vic3RyKDcpKS5jbGFzc2VkKHMsITEpfXQuYXR0cihpKXx8dC5hdHRyKGksIiEhIil9bih0LGUpfWVsc2UgciYmKHQuYXR0cihpLG51bGwpLCIhISI9PT1yP24odCk6bih0LHIpKX19LHsiLi9zZXRjdXJzb3IiOjczOX1dLDczNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21hdHJpeCIpLmRvdCxpPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT1lLmV4cG9ydHM9e307YS50ZXN0ZXI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3ZhciByPXRbMF0sbj10WzFdO3JldHVybiEocj09PWl8fHI8YXx8cj5vfHxuPT09aXx8bjxzfHxuPmwpJiYoIWV8fCFjKHQpKX1mdW5jdGlvbiByKHQsZSl7dmFyIHI9dFswXSx1PXRbMV07aWYocj09PWl8fHI8YXx8cj5vfHx1PT09aXx8dTxzfHx1PmwpcmV0dXJuITE7dmFyIGMsaCxmLGQscCxtPW4ubGVuZ3RoLHY9blswXVswXSxnPW5bMF1bMV0seT0wO2ZvcihjPTE7YzxtO2MrKylpZihoPXYsZj1nLHY9bltjXVswXSxnPW5bY11bMV0sZD1NYXRoLm1pbihoLHYpLCEocjxkfHxyPk1hdGgubWF4KGgsdil8fHU+TWF0aC5tYXgoZixnKSkpaWYodTxNYXRoLm1pbihmLGcpKXIhPT1kJiZ5Kys7ZWxzZXtpZihwPXY9PT1oP3U6Zisoci1oKSooZy1mKS8odi1oKSx1PT09cClyZXR1cm4gMSE9PWN8fCFlO3U8PXAmJnIhPT1kJiZ5Kyt9cmV0dXJuIHklMj09MX12YXIgbj10LnNsaWNlKCksYT1uWzBdWzBdLG89YSxzPW5bMF1bMV0sbD1zO24ucHVzaChuWzBdKTtmb3IodmFyIHU9MTt1PG4ubGVuZ3RoO3UrKylhPU1hdGgubWluKGEsblt1XVswXSksbz1NYXRoLm1heChvLG5bdV1bMF0pLHM9TWF0aC5taW4ocyxuW3VdWzFdKSxsPU1hdGgubWF4KGwsblt1XVsxXSk7dmFyIGMsaD0hMTtyZXR1cm4gNT09PW4ubGVuZ3RoJiYoblswXVswXT09PW5bMV1bMF0/blsyXVswXT09PW5bM11bMF0mJm5bMF1bMV09PT1uWzNdWzFdJiZuWzFdWzFdPT09blsyXVsxXSYmKGg9ITAsYz1mdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PW5bMF1bMF19KTpuWzBdWzFdPT09blsxXVsxXSYmblsyXVsxXT09PW5bM11bMV0mJm5bMF1bMF09PT1uWzNdWzBdJiZuWzFdWzBdPT09blsyXVswXSYmKGg9ITAsYz1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXT09PW5bMF1bMV19KSkse3htaW46YSx4bWF4Om8seW1pbjpzLHltYXg6bCxwdHM6bixjb250YWluczpoP2U6cixpc1JlY3Q6aH19O3ZhciBvPWEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLHU9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLGM9bih1LHUpLGg9TWF0aC5zcXJ0KGMpLGY9Wy11WzFdL2gsdVswXS9oXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sdSkpPDB8fHM+Y3x8TWF0aC5hYnMobihvLGYpKT5pKXJldHVybiEwO3JldHVybiExfTthLmZpbHRlcj1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocil7dC5wdXNoKHIpO3ZhciBzPW4ubGVuZ3RoLGw9aTtuLnNwbGljZShhKzEpO2Zvcih2YXIgdT1sKzE7dTx0Lmxlbmd0aDt1KyspKHU9PT10Lmxlbmd0aC0xfHxvKHQsbCx1KzEsZSkpJiYobi5wdXNoKHRbdV0pLG4ubGVuZ3RoPHMtMiYmKGk9dSxhPW4ubGVuZ3RoLTEpLGw9dSl9dmFyIG49W3RbMF1dLGk9MCxhPTA7aWYodC5sZW5ndGg+MSl7cih0LnBvcCgpKX1yZXR1cm57YWRkUHQ6cixyYXc6dCxmaWx0ZXJlZDpufX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuL21hdHJpeCI6NzI4fV0sNzM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe3ZhciByLG49ZS50b1N0cmluZygpO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXWluc3RhbmNlb2YgUmVnRXhwJiZ0W3JdLnRvU3RyaW5nKCk9PT1uKXJldHVybiB0O3QucHVzaChlKX1lbHNlIGUmJi0xPT09dC5pbmRleE9mKGUpJiZ0LnB1c2goZSk7cmV0dXJuIHR9fSx7fV0sNzM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIHIsbj1bXSxhPTA7YTxlLmxlbmd0aDthKyspcj1lW2FdLG5bYV09cj09PXQ/cjoib2JqZWN0Ij09dHlwZW9mIHI/QXJyYXkuaXNBcnJheShyKT9pLmV4dGVuZERlZXAoW10scik6aS5leHRlbmREZWVwQWxsKHt9LHIpOnI7cmV0dXJuIG59dmFyIGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLG89e307by5hZGQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxzO2lmKHQudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0scz10LnVuZG9RdWV1ZS5pbmRleCx0LmF1dG9wbGF5KXJldHVybiB2b2lkKHQudW5kb1F1ZXVlLmluU2VxdWVuY2V8fCh0LmF1dG9wbGF5PSExKSk7IXQudW5kb1F1ZXVlLnNlcXVlbmNlfHx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPyhvPXt1bmRvOntjYWxsczpbXSxhcmdzOltdfSxyZWRvOntjYWxsczpbXSxhcmdzOltdfX0sdC51bmRvUXVldWUucXVldWUuc3BsaWNlKHMsdC51bmRvUXVldWUucXVldWUubGVuZ3RoLXMsbyksdC51bmRvUXVldWUuaW5kZXgrPTEpOm89dC51bmRvUXVldWUucXVldWVbcy0xXSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExLG8mJihvLnVuZG8uY2FsbHMudW5zaGlmdChlKSxvLnVuZG8uYXJncy51bnNoaWZ0KHIpLG8ucmVkby5jYWxscy5wdXNoKG4pLG8ucmVkby5hcmdzLnB1c2goaSkpLHQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aD5hLnF1ZXVlTGVuZ3RoJiYodC51bmRvUXVldWUucXVldWUuc2hpZnQoKSx0LnVuZG9RdWV1ZS5pbmRleC0tKX0sby5zdGFydFNlcXVlbmNlPWZ1bmN0aW9uKHQpe3QudW5kb1F1ZXVlPXQudW5kb1F1ZXVlfHx7aW5kZXg6MCxxdWV1ZTpbXSxzZXF1ZW5jZTohMX0sdC51bmRvUXVldWUuc2VxdWVuY2U9ITAsdC51bmRvUXVldWUuYmVnaW5TZXF1ZW5jZT0hMH0sby5zdG9wU2VxdWVuY2U9ZnVuY3Rpb24odCl7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSx0LnVuZG9RdWV1ZS5zZXF1ZW5jZT0hMSx0LnVuZG9RdWV1ZS5iZWdpblNlcXVlbmNlPSExfSxvLnVuZG89ZnVuY3Rpb24odCl7dmFyIGUscjtpZih0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhcilyZXR1cm4gdm9pZCB0LmZyYW1ld29yay51bmRvKCk7aWYoISh2b2lkIDA9PT10LnVuZG9RdWV1ZXx8aXNOYU4odC51bmRvUXVldWUuaW5kZXgpfHx0LnVuZG9RdWV1ZS5pbmRleDw9MCkpe2Zvcih0LnVuZG9RdWV1ZS5pbmRleC0tLGU9dC51bmRvUXVldWUucXVldWVbdC51bmRvUXVldWUuaW5kZXhdLHQudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITAscj0wO3I8ZS51bmRvLmNhbGxzLmxlbmd0aDtyKyspby5wbG90RG8odCxlLnVuZG8uY2FsbHNbcl0sZS51bmRvLmFyZ3Nbcl0pO3QudW5kb1F1ZXVlLmluU2VxdWVuY2U9ITEsdC5hdXRvcGxheT0hMX19LG8ucmVkbz1mdW5jdGlvbih0KXt2YXIgZSxyO2lmKHQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5pc1BvbGFyKXJldHVybiB2b2lkIHQuZnJhbWV3b3JrLnJlZG8oKTtpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4Pj10LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgpKXtmb3IoZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnJlZG8uY2FsbHMubGVuZ3RoO3IrKylvLnBsb3REbyh0LGUucmVkby5jYWxsc1tyXSxlLnJlZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExLHQudW5kb1F1ZXVlLmluZGV4Kyt9fSxvLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPW4odCxyKSxlLmFwcGx5KG51bGwscil9LGUuZXhwb3J0cz1vfSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6NzUyfV0sNzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXNfYXJyYXkiKSxpPXQoIi4vaXNfcGxhaW5fb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIGE9T2JqZWN0LmtleXMocnx8e30pLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXJbc10sdT1lW3NdO2lmKCJfIj09PXMuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2YgbCl7aWYocyBpbiBlKWNvbnRpbnVlO2Vbc109bH1lbHNlIGlmKG4obCkmJm4odSkmJmkobFswXSkpZm9yKHZhciBjPTA7YzxsLmxlbmd0aDtjKyspaShsW2NdKSYmaSh1W2NdKSYmdCh1W2NdLGxbY10pO2Vsc2UgaShsKSYmaSh1KSYmKHQodSxsKSxPYmplY3Qua2V5cyh1KS5sZW5ndGh8fGRlbGV0ZSBlW3NdKX19fSx7Ii4vaXNfYXJyYXkiOjcyNSwiLi9pc19wbGFpbl9vYmplY3QiOjcyNn1dLDczODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQ8ZX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQ8PWV9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiB0PmV9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0Pj1lfXZhciBzPXQoImZhc3QtaXNudW1lcmljIiksbD10KCIuL2xvZ2dlcnMiKTtyLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKHMoZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZSktMTpNYXRoLmZsb29yKCh0LWUuc3RhcnQpL2Uuc2l6ZSk7dmFyIHUsYyxoPTAsZj1lLmxlbmd0aCxkPTA7Zm9yKGM9ZVtlLmxlbmd0aC0xXT49ZVswXT9yP246aTpyP286YTtoPGYmJmQrKzwxMDA7KXU9TWF0aC5mbG9vcigoaCtmKS8yKSxjKGVbdV0sdCk/aD11KzE6Zj11O3JldHVybiBkPjkwJiZsLmxvZygiTG9uZyBiaW5hcnkgc2VhcmNoLi4uIiksaC0xfSxyLnNvcnRlckFzYz1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LHIuc29ydGVyRGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUtdH0sci5kaXN0aW5jdFZhbHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zbGljZSgpO2Uuc29ydChyLnNvcnRlckFzYyk7Zm9yKHZhciBuPWUubGVuZ3RoLTEsaT1lW25dLWVbMF18fDEsYT1pLyhufHwxKS8xZTQsbz1bZVswXV0scz0wO3M8bjtzKyspZVtzKzFdPmVbc10rYSYmKGk9TWF0aC5taW4oaSxlW3MrMV0tZVtzXSksby5wdXNoKGVbcysxXSkpO3JldHVybnt2YWxzOm8sbWluRGlmZjppfX0sci5yb3VuZFVwPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGgtMSxvPTAscz1yPzA6MSxsPXI/MTowLHU9cj9NYXRoLmNlaWw6TWF0aC5mbG9vcjtpPGEmJm8rKzwxMDA7KW49dSgoaSthKS8yKSxlW25dPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfX0seyIuL2xvZ2dlcnMiOjcyNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDczOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsodC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSksZSYmdC5jbGFzc2VkKCJjdXJzb3ItIitlLCEwKX19LHt9XSw3NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGk9ZnVuY3Rpb24oKXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdCkiZnVuY3Rpb24iPT10eXBlb2YgdFtlXSYmKHRbZV09aSk7dC5kZXN0cm95PWZ1bmN0aW9uKCl7dC5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0LmNvbnRhaW5lcil9O3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiByLnRleHRDb250ZW50PSJXZWJnbCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlciAtIHZpc2l0IGh0dHA6Ly9nZXQud2ViZ2wub3JnIGZvciBtb3JlIGluZm8iLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sdC5jb250YWluZXIuYXBwZW5kQ2hpbGQociksdC5jb250YWluZXIuc3R5bGUuYmFja2dyb3VuZD0iI0ZGRkZGRiIsdC5jb250YWluZXIub25jbGljaz1mdW5jdGlvbigpe3dpbmRvdy5vcGVuKCJodHRwOi8vZ2V0LndlYmdsLm9yZyIpfSwhMX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjAyfV0sNzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ci5hZ2dOdW1zPWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBvLHM7aWYoYXx8KGE9aS5sZW5ndGgpLG4oZSl8fChlPSExKSxBcnJheS5pc0FycmF5KGlbMF0pKXtmb3Iocz1uZXcgQXJyYXkoYSksbz0wO288YTtvKyspc1tvXT1yLmFnZ051bXModCxlLGlbb10pO2k9c31mb3Iobz0wO288YTtvKyspbihlKT9uKGlbb10pJiYoZT10KCtlLCtpW29dKSk6ZT1pW29dO3JldHVybiBlfSxyLmxlbj1mdW5jdGlvbih0KXtyZXR1cm4gci5hZ2dOdW1zKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9LDAsdCl9LHIubWVhbj1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT1yLmxlbih0KSksci5hZ2dOdW1zKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0sMCx0KS9lfSxyLnZhcmlhbmNlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLG4oaSl8fChpPXIubWVhbih0LGUpKSxyLmFnZ051bXMoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9LDAsdCkvZX0sci5zdGRldj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIE1hdGguc3FydChyLnZhcmlhbmNlKHQsZSxuKSl9LHIuaW50ZXJwPWZ1bmN0aW9uKHQsZSl7aWYoIW4oZSkpdGhyb3cibiBzaG91bGQgYmUgYSBmaW5pdGUgbnVtYmVyIjtpZigoZT1lKnQubGVuZ3RoLS41KTwwKXJldHVybiB0WzBdO2lmKGU+dC5sZW5ndGgtMSlyZXR1cm4gdFt0Lmxlbmd0aC0xXTt2YXIgcj1lJTE7cmV0dXJuIHIqdFtNYXRoLmNlaWwoZSldKygxLXIpKnRbTWF0aC5mbG9vcihlKV19fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSw3NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1pKHQpO3JldHVybiBlLmxlbmd0aD9lOlswLDAsMCwxXX12YXIgaT10KCJjb2xvci1yZ2JhIik7ZS5leHBvcnRzPW59LHsiY29sb3ItcmdiYSI6OTN9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlcGxhY2UoZywiXFxsdCAiKS5yZXBsYWNlKHksIlxcZ3QgIil9ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49Im1hdGgtb3V0cHV0LSIrZi5yYW5kc3RyKFtdLDY0KSxhPWguc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKHtpZDpufSkuc3R5bGUoe3Zpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pLnN0eWxlKHsiZm9udC1zaXplIjplLmZvbnRTaXplKyJweCJ9KS50ZXh0KGkodCkpO01hdGhKYXguSHViLlF1ZXVlKFsiVHlwZXNldCIsTWF0aEpheC5IdWIsYS5ub2RlKCldLGZ1bmN0aW9uKCl7dmFyIGU9aC5zZWxlY3QoImJvZHkiKS5zZWxlY3QoIiNNYXRoSmF4X1NWR19nbHlwaHMiKTtpZihhLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIikuZW1wdHkoKXx8IWEuc2VsZWN0KCJzdmciKS5ub2RlKCkpZi5sb2coIlRoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgdGV4IHN5bnRheC4iLHQpLHIoKTtlbHNle3ZhciBuPWEuc2VsZWN0KCJzdmciKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cihhLnNlbGVjdCgiLk1hdGhKYXhfU1ZHIiksZSxuKX1hLnJlbW92ZSgpfSl9ZnVuY3Rpb24gbyh0LGUpe2lmKCF0KXJldHVybiBudWxsO3ZhciByPXQubWF0Y2goZSk7cmV0dXJuIHImJihyWzNdfHxyWzRdKX1mdW5jdGlvbiBzKHQsZSl7aWYoIXQpcmV0dXJuIiI7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07dD10LnJlcGxhY2Uobi5yZWdFeHAsbi5zdWIpfXJldHVybiB0fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHModCxBKX1mdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcigpe2MrKzt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZC5zdmcsInRzcGFuIik7aC5zZWxlY3QoZSkuYXR0cih7Y2xhc3M6ImxpbmUiLGR5OmMqbSsiZW0ifSksdC5hcHBlbmRDaGlsZChlKSxhPWU7dmFyIHI9dTtpZih1PVt7bm9kZTplfV0sci5sZW5ndGg+MSlmb3IodmFyIGk9MTtpPHIubGVuZ3RoO2krKyluKHJbaV0pfWZ1bmN0aW9uIG4odCl7dmFyIGUscj10LnR5cGUsbj17fTtpZigiYSI9PT1yKXtlPSJhIjt2YXIgbz10LnRhcmdldCxzPXQuaHJlZixsPXQucG9wdXA7cyYmKG49eyJ4bGluazp4bGluazpzaG93IjoiX2JsYW5rIj09PW98fCJfIiE9PW8uY2hhckF0KDApPyJuZXciOiJyZXBsYWNlIix0YXJnZXQ6bywieGxpbms6eGxpbms6aHJlZiI6c30sbCYmKG4ub25jbGljaz0nd2luZG93Lm9wZW4odGhpcy5ocmVmLmJhc2VWYWwsdGhpcy50YXJnZXQuYmFzZVZhbCwiJytsKyciKTtyZXR1cm4gZmFsc2U7JykpfWVsc2UgZT0idHNwYW4iO3Quc3R5bGUmJihuLnN0eWxlPXQuc3R5bGUpO3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhkLnN2ZyxlKTtpZigic3VwIj09PXJ8fCJzdWIiPT09cil7aShhLHcpLGEuYXBwZW5kQ2hpbGQoYyk7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGQuc3ZnLCJ0c3BhbiIpO2koZix3KSxoLnNlbGVjdChmKS5hdHRyKCJkeSIsX1tyXSksbi5keT14W3JdLGEuYXBwZW5kQ2hpbGQoYyksYS5hcHBlbmRDaGlsZChmKX1lbHNlIGEuYXBwZW5kQ2hpbGQoYyk7aC5zZWxlY3QoYykuYXR0cihuKSxhPXQubm9kZT1jLHUucHVzaCh0KX1mdW5jdGlvbiBpKHQsZSl7dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZT1sKGUpLnJlcGxhY2UoVCwiICIpO3ZhciBhLHM9ITEsdT1bXSxjPS0xO0wudGVzdChlKT9yKCk6KGE9dCx1PVt7bm9kZTp0fV0pO2Zvcih2YXIgcD1lLnNwbGl0KFMpLHY9MDt2PHAubGVuZ3RoO3YrKyl7dmFyIGc9cFt2XSx5PWcubWF0Y2goRSksaz15JiZ5WzJdLnRvTG93ZXJDYXNlKCksQT1iW2tdO2lmKCJiciI9PT1rKXIoKTtlbHNlIGlmKHZvaWQgMD09PUEpaShhLGcpO2Vsc2UgaWYoeVsxXSkhZnVuY3Rpb24odCl7dmFyIHI9dS5wb3AoKTt0IT09ci50eXBlJiZmLmxvZygiU3RhcnQgdGFnIDwiK3IudHlwZSsiPiBkb2VzbnQgbWF0Y2ggZW5kIHRhZyA8Iit0KyI+LiBQcmV0ZW5kaW5nIGl0IGRpZCBtYXRjaC4iLGUpLGE9dVt1Lmxlbmd0aC0xXS5ub2RlfShrKTtlbHNle3ZhciBPPXlbNF0sUj17dHlwZTprfSxGPW8oTyxDKTtpZihGPyhGPUYucmVwbGFjZShQLCIkMSBmaWxsOiIpLEEmJihGKz0iOyIrQSkpOkEmJihGPUEpLEYmJihSLnN0eWxlPUYpLCJhIj09PWspe3M9ITA7dmFyIGo9byhPLHopO2lmKGope3ZhciBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtOLmhyZWY9aiwtMSE9PU0uaW5kZXhPZihOLnByb3RvY29sKSYmKFIuaHJlZj1lbmNvZGVVUkkoaiksUi50YXJnZXQ9byhPLEkpfHwiX2JsYW5rIixSLnBvcHVwPW8oTyxEKSl9fW4oUil9fXJldHVybiBzfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuLGksYSxvPXIuaG9yaXpvbnRhbEFsaWduLHM9ci52ZXJ0aWNhbEFsaWdufHwidG9wIixsPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGk9ImJvdHRvbSI9PT1zP2Z1bmN0aW9uKCl7cmV0dXJuIGwuYm90dG9tLW4uaGVpZ2h0fToibWlkZGxlIj09PXM/ZnVuY3Rpb24oKXtyZXR1cm4gbC50b3ArKGwuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBsLnRvcH0sYT0icmlnaHQiPT09bz9mdW5jdGlvbigpe3JldHVybiBsLnJpZ2h0LW4ud2lkdGh9OiJjZW50ZXIiPT09bz9mdW5jdGlvbigpe3JldHVybiBsLmxlZnQrKGwud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gbC5sZWZ0fSxmdW5jdGlvbigpe3JldHVybiBuPXRoaXMubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuc3R5bGUoe3RvcDppKCktdS50b3ArInB4IixsZWZ0OmEoKS11LmxlZnQrInB4Iiwiei1pbmRleCI6MWUzfSksdGhpc319dmFyIGg9dCgiZDMiKSxmPXQoIi4uL2xpYiIpLGQ9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxwPXQoIi4uL2NvbnN0YW50cy9zdHJpbmdfbWFwcGluZ3MiKSxtPXQoIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsdj0vKFteJF0qKShbJF0rW14kXSpbJF0rKShbXiRdKikvO3IuY29udmVydFRvVHNwYW5zPWZ1bmN0aW9uKHQsZSxpKXtmdW5jdGlvbiBvKCl7Yy5lbXB0eSgpfHwoZj10LmF0dHIoImNsYXNzIikrIi1tYXRoIixjLnNlbGVjdCgic3ZnLiIrZikucmVtb3ZlKCkpLHQudGV4dCgiIikuc3R5bGUoIndoaXRlLXNwYWNlIiwicHJlIiksdSh0Lm5vZGUoKSxzKSYmdC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxyLnBvc2l0aW9uVGV4dCh0KSxpJiZpLmNhbGwodCl9dmFyIHM9dC50ZXh0KCksbD0hdC5hdHRyKCJkYXRhLW5vdGV4IikmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheCYmcy5tYXRjaCh2KSxjPWguc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKCFjLmVtcHR5KCkpe3ZhciBmPXQuYXR0cigiY2xhc3MiKT90LmF0dHIoImNsYXNzIikuc3BsaXQoIiAiKVswXToidGV4dCI7cmV0dXJuIGYrPSItbWF0aCIsYy5zZWxlY3RBbGwoInN2Zy4iK2YpLnJlbW92ZSgpLGMuc2VsZWN0QWxsKCJnLiIrZisiLWdyb3VwIikucmVtb3ZlKCksdC5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOnMsImRhdGEtbWF0aCI6Ik4ifSksbD8oZSYmZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUpe3Quc3R5bGUoImRpc3BsYXkiLCJub25lIik7dmFyIHI9e2ZvbnRTaXplOnBhcnNlSW50KHQuc3R5bGUoImZvbnQtc2l6ZSIpLDEwKX07YShsWzJdLHIsZnVuY3Rpb24ocixhLGwpe2Muc2VsZWN0QWxsKCJzdmcuIitmKS5yZW1vdmUoKSxjLnNlbGVjdEFsbCgiZy4iK2YrIi1ncm91cCIpLnJlbW92ZSgpO3ZhciB1PXImJnIuc2VsZWN0KCJzdmciKTtpZighdXx8IXUubm9kZSgpKXJldHVybiBvKCksdm9pZCBlKCk7dmFyIGg9Yy5hcHBlbmQoImciKS5jbGFzc2VkKGYrIi1ncm91cCIsITApLmF0dHIoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLCJkYXRhLXVuZm9ybWF0dGVkIjpzLCJkYXRhLW1hdGgiOiJZIn0pO2gubm9kZSgpLmFwcGVuZENoaWxkKHUubm9kZSgpKSxhJiZhLm5vZGUoKSYmdS5ub2RlKCkuaW5zZXJ0QmVmb3JlKGEubm9kZSgpLmNsb25lTm9kZSghMCksdS5ub2RlKCkuZmlyc3RDaGlsZCksdS5hdHRyKHtjbGFzczpmLGhlaWdodDpsLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBtZWV0In0pLnN0eWxlKHtvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgZD10LnN0eWxlKCJmaWxsIil8fCJibGFjayI7dS5zZWxlY3QoImciKS5hdHRyKHtmaWxsOmQsc3Ryb2tlOmR9KTt2YXIgcD1uKHUsIndpZHRoIiksbT1uKHUsImhlaWdodCIpLHY9K3QuYXR0cigieCIpLXAqe3N0YXJ0OjAsbWlkZGxlOi41LGVuZDoxfVt0LmF0dHIoInRleHQtYW5jaG9yIil8fCJzdGFydCJdLGc9cGFyc2VJbnQodC5zdHlsZSgiZm9udC1zaXplIiksMTApfHxuKHQsImhlaWdodCIpLHk9LWcvNDsieSI9PT1mWzBdPyhoLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrWy05MCwrdC5hdHRyKCJ4IiksK3QuYXR0cigieSIpXSsiKSB0cmFuc2xhdGUoIitbLXAvMix5LW0vMl0rIikifSksdS5hdHRyKHt4Oit0LmF0dHIoIngiKSx5Oit0LmF0dHIoInkiKX0pKToibCI9PT1mWzBdP3UuYXR0cih7eDp0LmF0dHIoIngiKSx5OnktbS8yfSk6ImEiPT09ZlswXT91LmF0dHIoe3g6MCx5Onl9KTp1LmF0dHIoe3g6dix5Oit0LmF0dHIoInkiKSt5LW0vMn0pLGkmJmkuY2FsbCh0LGgpLGUoaCl9KX0pKTpvKCksdH19O3ZhciBnPS8oPHwmbHQ7fCYjNjA7KS9nLHk9Lyg+fCZndDt8JiM2MjspL2csYj17c3VwOiJmb250LXNpemU6NzAlIixzdWI6ImZvbnQtc2l6ZTo3MCUiLGI6ImZvbnQtd2VpZ2h0OmJvbGQiLGk6ImZvbnQtc3R5bGU6aXRhbGljIixhOiJjdXJzb3I6cG9pbnRlciIsc3BhbjoiIixlbToiZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZCJ9LHg9e3N1YjoiMC4zZW0iLHN1cDoiLTAuNmVtIn0sXz17c3ViOiItMC4yMWVtIixzdXA6IjAuNDJlbSJ9LHc9Ilx1MjAwYiIsTT1bImh0dHA6IiwiaHR0cHM6IiwibWFpbHRvOiIsIiIsdm9pZCAwLCI6Il0saz1uZXcgUmVnRXhwKCI8Lz8oIitPYmplY3Qua2V5cyhiKS5qb2luKCJ8IikrIikoIFtePl0qKT8vPz4iLCJnIiksQT1PYmplY3Qua2V5cyhwLmVudGl0eVRvVW5pY29kZSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybntyZWdFeHA6bmV3IFJlZ0V4cCgiJiIrdCsiOyIsImciKSxzdWI6cC5lbnRpdHlUb1VuaWNvZGVbdF19fSksVD0vKFxyXG4/fFxuKS9nLFM9Lyg8W148Pl0qPikvLEU9LzwoXC8/KShbXiA+XSopKFxzKyguKikpPz4vaSxMPS88YnIoXHMrLiopPz4vaSxDPS8oXnxbXHMiJ10pc3R5bGVccyo9XHMqKCIoW14iXSopOz8ifCcoW14nXSopOz8nKS9pLHo9LyhefFtccyInXSlocmVmXHMqPVxzKigiKFteIl0qKSJ8JyhbXiddKiknKS9pLEk9LyhefFtccyInXSl0YXJnZXRccyo9XHMqKCIoW14iXHNdKikifCcoW14nXHNdKiknKS9pLEQ9LyhefFtccyInXSlwb3B1cFxzKj1ccyooIihbXHc9LF0qKSJ8JyhbXHc9LF0qKScpL2ksUD0vKF58Oylccypjb2xvcjovO3IucGxhaW5UZXh0PWZ1bmN0aW9uKHQpe3JldHVybih0fHwiIikucmVwbGFjZShrLCIgIil9LHIubGluZUNvdW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnNpemUoKXx8MX0sci5wb3NpdGlvblRleHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmVhY2goZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/bnVsbD09PShlPW4uYXR0cih0KSkmJihuLmF0dHIodCwwKSxlPTApOm4uYXR0cih0LGUpLGV9dmFyIG49aC5zZWxlY3QodGhpcyksaT10KCJ4IixlKSxhPXQoInkiLHIpOyJ0ZXh0Ij09PXRoaXMubm9kZU5hbWUmJm4uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuYXR0cih7eDppLHk6YX0pfSl9LHIubWFrZUVkaXRhYmxlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe2koKSx0LnN0eWxlKHtvcGFjaXR5OjB9KTt2YXIgZSxyPWwuYXR0cigiY2xhc3MiKTsoZT1yPyIuIityLnNwbGl0KCIgIilbMF0rIi1tYXRoLWdyb3VwIjoiW2NsYXNzKj0tbWF0aC1ncm91cF0iKSYmaC5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc2VsZWN0KGUpLnN0eWxlKHtvcGFjaXR5OjB9KX1mdW5jdGlvbiBuKHQpe3ZhciBlPXQubm9kZSgpLHI9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtyLnNlbGVjdE5vZGVDb250ZW50cyhlKTt2YXIgbj13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7bi5yZW1vdmVBbGxSYW5nZXMoKSxuLmFkZFJhbmdlKHIpLGUuZm9jdXMoKX1mdW5jdGlvbiBpKCl7dmFyIHI9aC5zZWxlY3QoYSksaT1yLnNlbGVjdCgiLnN2Zy1jb250YWluZXIiKSxvPWkuYXBwZW5kKCJkaXYiKTtvLmNsYXNzZWQoInBsdWdpbi1lZGl0YWJsZSBlZGl0YWJsZSIsITApLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLCJmb250LWZhbWlseSI6dC5zdHlsZSgiZm9udC1mYW1pbHkiKXx8IkFyaWFsIiwiZm9udC1zaXplIjp0LnN0eWxlKCJmb250LXNpemUiKXx8MTIsY29sb3I6ZS5maWxsfHx0LnN0eWxlKCJmaWxsIil8fCJibGFjayIsb3BhY2l0eToxLCJiYWNrZ3JvdW5kLWNvbG9yIjplLmJhY2tncm91bmR8fCJ0cmFuc3BhcmVudCIsb3V0bGluZToiI2ZmZmZmZjMzIDFweCBzb2xpZCIsbWFyZ2luOlstcGFyc2VGbG9hdCh0LnN0eWxlKCJmb250LXNpemUiKSkvOCsxLDAsMCwtMV0uam9pbigicHggIikrInB4IixwYWRkaW5nOiIwIiwiYm94LXNpemluZyI6ImJvcmRlci1ib3gifSkuYXR0cih7Y29udGVudGVkaXRhYmxlOiEwfSkudGV4dChlLnRleHR8fHQuYXR0cigiZGF0YS11bmZvcm1hdHRlZCIpKS5jYWxsKGModCxpLGUpKS5vbigiYmx1ciIsZnVuY3Rpb24oKXthLl9lZGl0aW5nPSExLHQudGV4dCh0aGlzLnRleHRDb250ZW50KS5zdHlsZSh7b3BhY2l0eToxfSk7dmFyIGUscj1oLnNlbGVjdCh0aGlzKS5hdHRyKCJjbGFzcyIpOyhlPXI/Ii4iK3Iuc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZoLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoZSkuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBuPXRoaXMudGV4dENvbnRlbnQ7aC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApLnJlbW92ZSgpLGguc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsbnVsbCkscy5lZGl0LmNhbGwodCxuKX0pLm9uKCJmb2N1cyIsZnVuY3Rpb24oKXt2YXIgdD10aGlzO2EuX2VkaXRpbmc9ITAsaC5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixmdW5jdGlvbigpe2lmKGguZXZlbnQudGFyZ2V0PT09dClyZXR1cm4hMTtkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09by5ub2RlKCkmJm8ubm9kZSgpLmJsdXIoKX0pfSkub24oImtleXVwIixmdW5jdGlvbigpezI3PT09aC5ldmVudC53aGljaD8oYS5fZWRpdGluZz0hMSx0LnN0eWxlKHtvcGFjaXR5OjF9KSxoLnNlbGVjdCh0aGlzKS5zdHlsZSh7b3BhY2l0eTowfSkub24oImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuITF9KS50cmFuc2l0aW9uKCkucmVtb3ZlKCkscy5jYW5jZWwuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpKToocy5pbnB1dC5jYWxsKHQsdGhpcy50ZXh0Q29udGVudCksaC5zZWxlY3QodGhpcykuY2FsbChjKHQsaSxlKSkpfSkub24oImtleWRvd24iLGZ1bmN0aW9uKCl7MTM9PT1oLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pLmNhbGwobil9dmFyIGE9ZS5nZCxvPWUuZGVsZWdhdGUscz1oLmRpc3BhdGNoKCJlZGl0IiwiaW5wdXQiLCJjYW5jZWwiKSxsPW98fHQ7aWYodC5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjpvPyJub25lIjoiYWxsIn0pLDEhPT10LnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoImJvbyIpO3JldHVybiBlLmltbWVkaWF0ZT9yKCk6bC5vbigiY2xpY2siLHIpLGgucmViaW5kKHQscywib24iKX19LHsiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njk4LCIuLi9jb25zdGFudHMvc3RyaW5nX21hcHBpbmdzIjo3MDUsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsIi4uL2xpYiI6NzI0LGQzOjEyMH1dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQ+MClyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjEwO3ZhciByPU1hdGgubG9nKE1hdGgubWluKGVbMF0sZVsxXSkpL01hdGguTE4xMDtyZXR1cm4gbihyKXx8KHI9TWF0aC5sb2coTWF0aC5tYXgoZVswXSxlWzFdKSkvTWF0aC5MTjEwLTYpLHJ9fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSw3NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPXt9LGk9dCgiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyIpLmxvY2F0aW9ubW9kZVRvTGF5ZXIsYT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO24uZ2V0VG9wb2pzb25OYW1lPWZ1bmN0aW9uKHQpe3JldHVyblt0LnNjb3BlLnJlcGxhY2UoLyAvZywiLSIpLCJfIix0LnJlc29sdXRpb24udG9TdHJpbmcoKSwibSJdLmpvaW4oIiIpfSxuLmdldFRvcG9qc29uUGF0aD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2UrIi5qc29uIn0sbi5nZXRUb3BvanNvbkZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aVt0LmxvY2F0aW9ubW9kZV0sbj1lLm9iamVjdHNbcl07cmV0dXJuIGEoZSxuKS5mZWF0dXJlc319LHsiLi4vcGxvdHMvZ2VvL2NvbnN0YW50cyI6NzkwLCJ0b3BvanNvbi1jbGllbnQiOjUzNH1dLDc0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciByPW5ldyBGbG9hdDMyQXJyYXkoZSksbj0wO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9bmV3IEZsb2F0NjRBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbih0LGUpO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIGkodCxlKTt0aHJvdyBuZXcgRXJyb3IoIlRoaXMgYXJyYXkgdHlwZSBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSBgdHJ1bmNhdGVgLiIpfX0se31dLDc0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsKIi4uL3JlZ2lzdHJ5Ijo4NDJ9XSw3NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt0cmFjZXM6ZnVuY3Rpb24oKXtyZXR1cm57ZG9jYWxjOiExLGRvY2FsY0F1dG9yYW5nZTohMSxkb3Bsb3Q6ITEsZG9zdHlsZTohMSxkb2NvbG9yYmFyczohMSxhdXRvcmFuZ2VPbjohMSxjbGVhckNhbGM6ITEsZnVsbFJlcGxvdDohMX19LGxheW91dDpmdW5jdGlvbigpe3JldHVybntkb2xlZ2VuZDohMSxkb3RpY2tzOiExLGRvbGF5b3V0c3R5bGU6ITEsZG9wbG90OiExLGRvY2FsYzohMSxkb21vZGViYXI6ITEsZG9jYW1lcmE6ITEsbGF5b3V0UmVwbG90OiExfX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9fX0se31dLDc0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT1mLmNsZWFuSWQocixuKSl9ZnVuY3Rpb24gaSh0KXt2YXIgZT0ibWlkZGxlIixyPSJjZW50ZXIiO3JldHVybi0xIT09dC5pbmRleE9mKCJ0b3AiKT9lPSJ0b3AiOi0xIT09dC5pbmRleE9mKCJib3R0b20iKSYmKGU9ImJvdHRvbSIpLC0xIT09dC5pbmRleE9mKCJsZWZ0Iik/cj0ibGVmdCI6LTEhPT10LmluZGV4T2YoInJpZ2h0IikmJihyPSJyaWdodCIpLGUrIiAiK3J9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1mdW5jdGlvbiBvKHQpe3ZhciBlPXQuc2VhcmNoKHApO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX12YXIgcz10KCJmYXN0LWlzbnVtZXJpYyIpLGw9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLHU9dCgiLi4vcmVnaXN0cnkiKSxjPXQoIi4uL2xpYiIpLGg9dCgiLi4vcGxvdHMvcGxvdHMiKSxmPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZD10KCIuLi9jb21wb25lbnRzL2NvbG9yIik7ci5nZXRHcmFwaERpdj1mdW5jdGlvbih0KXt2YXIgZTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0oZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSkpdGhyb3cgbmV3IEVycm9yKCJObyBET00gZWxlbWVudCB3aXRoIGlkICciK3QrIicgZXhpc3RzIG9uIHRoZSBwYWdlLiIpO3JldHVybiBlfWlmKG51bGw9PT10fHx2b2lkIDA9PT10KXRocm93IG5ldyBFcnJvcigiRE9NIGVsZW1lbnQgcHJvdmlkZWQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdH0sci5jbGVhclByb21pc2VRdWV1ZT1mdW5jdGlvbih0KXtBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKSYmdC5fcHJvbWlzZXMubGVuZ3RoPjAmJmMubG9nKCJDbGVhcmluZyBwcmV2aW91cyByZWplY3RlZCBwcm9taXNlcyBmcm9tIHF1ZXVlLiIpLHQuX3Byb21pc2VzPVtdfSxyLmNsZWFuTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7dHx8KHQ9e30pLHQueGF4aXMxJiYodC54YXhpc3x8KHQueGF4aXM9dC54YXhpczEpLGRlbGV0ZSB0LnhheGlzMSksdC55YXhpczEmJih0LnlheGlzfHwodC55YXhpcz10LnlheGlzMSksZGVsZXRlIHQueWF4aXMxKTt2YXIgaT1mLmxpc3Qoe19mdWxsTGF5b3V0OnR9KTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKXt2YXIgbz1pW2VdO28uYW5jaG9yJiYiZnJlZSIhPT1vLmFuY2hvciYmKG8uYW5jaG9yPWYuY2xlYW5JZChvLmFuY2hvcikpLG8ub3ZlcmxheWluZyYmKG8ub3ZlcmxheWluZz1mLmNsZWFuSWQoby5vdmVybGF5aW5nKSksby50eXBlfHwoby5pc2RhdGU/by50eXBlPSJkYXRlIjpvLmlzbG9nP28udHlwZT0ibG9nIjohMT09PW8uaXNkYXRlJiYhMT09PW8uaXNsb2cmJihvLnR5cGU9ImxpbmVhciIpKSwid2l0aHplcm8iIT09by5hdXRvcmFuZ2UmJiJ0b3plcm8iIT09by5hdXRvcmFuZ2V8fChvLmF1dG9yYW5nZT0hMCxvLnJhbmdlbW9kZT0idG96ZXJvIiksZGVsZXRlIG8uaXNsb2csZGVsZXRlIG8uaXNkYXRlLGRlbGV0ZSBvLmNhdGVnb3JpZXMsYShvLCJkb21haW4iKSYmZGVsZXRlIG8uZG9tYWluLHZvaWQgMCE9PW8uYXV0b3RpY2smJih2b2lkIDA9PT1vLnRpY2ttb2RlJiYoby50aWNrbW9kZT1vLmF1dG90aWNrPyJhdXRvIjoibGluZWFyIiksZGVsZXRlIG8uYXV0b3RpY2spfXZhciBzPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8cztlKyspe3ZhciB1PXQuYW5ub3RhdGlvbnNbZV07Yy5pc1BsYWluT2JqZWN0KHUpJiYodS5yZWYmJigicGFwZXIiPT09dS5yZWY/KHUueHJlZj0icGFwZXIiLHUueXJlZj0icGFwZXIiKToiZGF0YSI9PT11LnJlZiYmKHUueHJlZj0ieCIsdS55cmVmPSJ5IiksZGVsZXRlIHUucmVmKSxuKHUsInhyZWYiKSxuKHUsInlyZWYiKSl9dmFyIHA9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPHA7ZSsrKXt2YXIgbT10LnNoYXBlc1tlXTtjLmlzUGxhaW5PYmplY3QobSkmJihuKG0sInhyZWYiKSxuKG0sInlyZWYiKSl9dmFyIHY9dC5sZWdlbmQ7diYmKHYueD4zPyh2Lng9MS4wMix2LnhhbmNob3I9ImxlZnQiKTp2Lng8LTImJih2Lng9LS4wMix2LnhhbmNob3I9InJpZ2h0Iiksdi55PjM/KHYueT0xLjAyLHYueWFuY2hvcj0iYm90dG9tIik6di55PC0yJiYodi55PS0uMDIsdi55YW5jaG9yPSJ0b3AiKSksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSx0LnNjZW5lMSYmKHQuc2NlbmV8fCh0LnNjZW5lPXQuc2NlbmUxKSxkZWxldGUgdC5zY2VuZTEpO3ZhciBnPWguZ2V0U3VicGxvdElkcyh0LCJnbDNkIik7Zm9yKGU9MDtlPGcubGVuZ3RoO2UrKyl7dmFyIHk9dFtnW2VdXSxiPXkuY2FtZXJhcG9zaXRpb247aWYoQXJyYXkuaXNBcnJheShiKSYmND09PWJbMF0ubGVuZ3RoKXt2YXIgeD1iWzBdLF89YlsxXSx3PWJbMl0sTT1sKFtdLHgpLGs9W107Zm9yKHI9MDtyPDM7KytyKWtbcl09X1tlXSt3Kk1bMis0KnJdO3kuY2FtZXJhPXtleWU6e3g6a1swXSx5OmtbMV0sejprWzJdfSxjZW50ZXI6e3g6X1swXSx5Ol9bMV0sejpfWzJdfSx1cDp7eDpNWzFdLHk6TVs1XSx6Ok1bOV19fSxkZWxldGUgeS5jYW1lcmFwb3NpdGlvbn19cmV0dXJuIGQuY2xlYW4odCksdH0sci5jbGVhbkRhdGE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49W10sbz0odC5jb25jYXQoQXJyYXkuaXNBcnJheShlKT9lOltdKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuInVpZCJpbiB0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnVpZH0pKSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsLHA9dFtzXTtpZighKCJ1aWQiaW4gcCl8fC0xIT09bi5pbmRleE9mKHAudWlkKSl7dmFyIG07Zm9yKGw9MDtsPDEwMCYmKG09Yy5yYW5kc3RyKG8pLC0xIT09bi5pbmRleE9mKG0pKTtsKyspO3AudWlkPWMucmFuZHN0cihvKSxvLnB1c2gocC51aWQpfWlmKG4ucHVzaChwLnVpZCksImhpc3RvZ3JhbXkiPT09cC50eXBlJiYieGJpbnMiaW4gcCYmISgieWJpbnMiaW4gcCkmJihwLnliaW5zPXAueGJpbnMsZGVsZXRlIHAueGJpbnMpLHAuZXJyb3JfeSYmIm9wYWNpdHkiaW4gcC5lcnJvcl95KXt2YXIgdj1kLmRlZmF1bHRzLGc9cC5lcnJvcl95LmNvbG9yfHwodS50cmFjZUlzKHAsImJhciIpP2QuZGVmYXVsdExpbmU6dltzJXYubGVuZ3RoXSk7cC5lcnJvcl95LmNvbG9yPWQuYWRkT3BhY2l0eShkLnJnYihnKSxkLm9wYWNpdHkoZykqcC5lcnJvcl95Lm9wYWNpdHkpLGRlbGV0ZSBwLmVycm9yX3kub3BhY2l0eX1pZigiYmFyZGlyImluIHAmJigiaCIhPT1wLmJhcmRpcnx8IXUudHJhY2VJcyhwLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1wLnR5cGUuc3Vic3RyKDAsOSl8fChwLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEocCkpLGRlbGV0ZSBwLmJhcmRpciksImhpc3RvZ3JhbXkiPT09cC50eXBlJiZyLnN3YXBYWURhdGEocCksImhpc3RvZ3JhbXgiIT09cC50eXBlJiYiaGlzdG9ncmFteSIhPT1wLnR5cGV8fChwLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gcCYmKHAuY29sb3JzY2FsZT1wLnNjbCxkZWxldGUgcC5zY2wpLCJyZXZlcnNlc2NsImluIHAmJihwLnJldmVyc2VzY2FsZT1wLnJldmVyc2VzY2wsZGVsZXRlIHAucmV2ZXJzZXNjbCkscC54YXhpcyYmKHAueGF4aXM9Zi5jbGVhbklkKHAueGF4aXMsIngiKSkscC55YXhpcyYmKHAueWF4aXM9Zi5jbGVhbklkKHAueWF4aXMsInkiKSksdS50cmFjZUlzKHAsImdsM2QiKSYmcC5zY2VuZSYmKHAuc2NlbmU9aC5zdWJwbG90c1JlZ2lzdHJ5LmdsM2QuY2xlYW5JZChwLnNjZW5lKSksdS50cmFjZUlzKHAsInBpZSIpfHx1LnRyYWNlSXMocCwiYmFyIil8fChBcnJheS5pc0FycmF5KHAudGV4dHBvc2l0aW9uKT9wLnRleHRwb3NpdGlvbj1wLnRleHRwb3NpdGlvbi5tYXAoaSk6cC50ZXh0cG9zaXRpb24mJihwLnRleHRwb3NpdGlvbj1pKHAudGV4dHBvc2l0aW9uKSkpLHUudHJhY2VJcyhwLCIyZE1hcCIpJiYoIllJR25CdSI9PT1wLmNvbG9yc2NhbGUmJihwLmNvbG9yc2NhbGU9IllsR25CdSIpLCJZSU9yUmQiPT09cC5jb2xvcnNjYWxlJiYocC5jb2xvcnNjYWxlPSJZbE9yUmQiKSksdS50cmFjZUlzKHAsIm1hcmtlckNvbG9yc2NhbGUiKSYmcC5tYXJrZXIpe3ZhciB5PXAubWFya2VyOyJZSUduQnUiPT09eS5jb2xvcnNjYWxlJiYoeS5jb2xvcnNjYWxlPSJZbEduQnUiKSwiWUlPclJkIj09PXkuY29sb3JzY2FsZSYmKHkuY29sb3JzY2FsZT0iWWxPclJkIil9aWYoInN1cmZhY2UiPT09cC50eXBlJiZjLmlzUGxhaW5PYmplY3QocC5jb250b3Vycykpe3ZhciBiPVsieCIsInkiLCJ6Il07Zm9yKGw9MDtsPGIubGVuZ3RoO2wrKyl7dmFyIHg9cC5jb250b3Vyc1tiW2xdXTtjLmlzUGxhaW5PYmplY3QoeCkmJih4LmhpZ2hsaWdodENvbG9yJiYoeC5oaWdobGlnaHRjb2xvcj14LmhpZ2hsaWdodENvbG9yLGRlbGV0ZSB4LmhpZ2hsaWdodENvbG9yKSx4LmhpZ2hsaWdodFdpZHRoJiYoeC5oaWdobGlnaHR3aWR0aD14LmhpZ2hsaWdodFdpZHRoLGRlbGV0ZSB4LmhpZ2hsaWdodFdpZHRoKSl9fWlmKEFycmF5LmlzQXJyYXkocC50cmFuc2Zvcm1zKSl7dmFyIF89cC50cmFuc2Zvcm1zO2ZvcihsPTA7bDxfLmxlbmd0aDtsKyspe3ZhciB3PV9bbF07aWYoYy5pc1BsYWluT2JqZWN0KHcpKXN3aXRjaCh3LnR5cGUpe2Nhc2UiZmlsdGVyIjp3LmZpbHRlcnNyYyYmKHcudGFyZ2V0PXcuZmlsdGVyc3JjLGRlbGV0ZSB3LmZpbHRlcnNyYyksdy5jYWxlbmRhciYmKHcudmFsdWVjYWxlbmRhcnx8KHcudmFsdWVjYWxlbmRhcj13LmNhbGVuZGFyKSxkZWxldGUgdy5jYWxlbmRhcik7YnJlYWs7Y2FzZSJncm91cGJ5IjppZih3LnN0eWxlcz13LnN0eWxlc3x8dy5zdHlsZSx3LnN0eWxlcyYmIUFycmF5LmlzQXJyYXkody5zdHlsZXMpKXt2YXIgTT13LnN0eWxlcyxrPU9iamVjdC5rZXlzKE0pO3cuc3R5bGVzPVtdO2Zvcih2YXIgQT0wO0E8ay5sZW5ndGg7QSsrKXcuc3R5bGVzLnB1c2goe3RhcmdldDprW0FdLHZhbHVlOk1ba1tBXV19KX19fX1hKHAsImxpbmUiKSYmZGVsZXRlIHAubGluZSwibWFya2VyImluIHAmJihhKHAubWFya2VyLCJsaW5lIikmJmRlbGV0ZSBwLm1hcmtlci5saW5lLGEocCwibWFya2VyIikmJmRlbGV0ZSBwLm1hcmtlciksZC5jbGVhbihwKX19LHIuc3dhcFhZRGF0YT1mdW5jdGlvbih0KXt2YXIgZTtpZihjLnN3YXBBdHRycyh0LFsiPyIsIj8wIiwiZD8iLCI/YmlucyIsIm5iaW5zPyIsImF1dG9iaW4/IiwiP3NyYyIsImVycm9yXz8iXSksQXJyYXkuaXNBcnJheSh0LnopJiZBcnJheS5pc0FycmF5KHQuelswXSkmJih0LnRyYW5zcG9zZT9kZWxldGUgdC50cmFuc3Bvc2U6dC50cmFuc3Bvc2U9ITApLHQuZXJyb3JfeCYmdC5lcnJvcl95KXt2YXIgcj10LmVycm9yX3ksbj0iY29weV95c3R5bGUiaW4gcj9yLmNvcHlfeXN0eWxlOiEoci5jb2xvcnx8ci50aGlja25lc3N8fHIud2lkdGgpO2Muc3dhcEF0dHJzKHQsWyJlcnJvcl8/LmNvcHlfeXN0eWxlIl0pLG4mJmMuc3dhcEF0dHJzKHQsWyJlcnJvcl8/LmNvbG9yIiwiZXJyb3JfPy50aGlja25lc3MiLCJlcnJvcl8/LndpZHRoIl0pfWlmKCJzdHJpbmciPT10eXBlb2YgdC5ob3ZlcmluZm8pe3ZhciBpPXQuaG92ZXJpbmZvLnNwbGl0KCIrIik7Zm9yKGU9MDtlPGkubGVuZ3RoO2UrKykieCI9PT1pW2VdP2lbZV09InkiOiJ5Ij09PWlbZV0mJihpW2VdPSJ4Iik7dC5ob3ZlcmluZm89aS5qb2luKCIrIil9fSxyLmNvZXJjZVRyYWNlSW5kaWNlcz1mdW5jdGlvbih0LGUpe3JldHVybiBzKGUpP1tlXTpBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD9lOnQuZGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pfSxyLm1hbmFnZUFycmF5Q29udGFpbmVycz1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vYmosaT10LnBhcnRzLGE9aS5sZW5ndGgsbz1pW2EtMV0sbD1zKG8pO2lmKGwmJm51bGw9PT1lKXt2YXIgdT1pLnNsaWNlKDAsYS0xKS5qb2luKCIuIik7Yy5uZXN0ZWRQcm9wZXJ0eShuLHUpLmdldCgpLnNwbGljZShvLDEpfWVsc2UgbCYmdm9pZCAwPT09dC5nZXQoKT8odm9pZCAwPT09dC5nZXQoKSYmKHJbdC5hc3RyXT1udWxsKSx0LnNldChlKSk6dC5zZXQoZSl9O3ZhciBwPS8oXC5bXlxbXF1cLl0rfFxbW15cW1xdXC5dK1xdKSQvO3IuaGFzUGFyZW50PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW8oZSk7cjspe2lmKHIgaW4gdClyZXR1cm4hMDtyPW8ocil9cmV0dXJuITF9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vbGliIjo3MjQsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4uL3JlZ2lzdHJ5Ijo4NDIsImZhc3QtaXNudW1lcmljIjoxMjksImdsLW1hdDQvZnJvbVF1YXQiOjE3Nn1dLDc1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvbmVzdGVkX3Byb3BlcnR5IiksaT10KCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksYT10KCIuLi9saWIvbm9vcCIpLG89dCgiLi4vbGliL2xvZ2dlcnMiKSxzPXQoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2MsbD10KCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD10KCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciB1PXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuImFkZCI9PT10fHxpKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwicmVtb3ZlIj09PXR9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGg9ZS5hc3RyLGY9bC5nZXRDb21wb25lbnRNZXRob2QoaCwic3VwcGx5TGF5b3V0RGVmYXVsdHMiKSxkPWwuZ2V0Q29tcG9uZW50TWV0aG9kKGgsImRyYXciKSxwPWwuZ2V0Q29tcG9uZW50TWV0aG9kKGgsImRyYXdPbmUiKSxtPWkucmVwbG90fHxpLnJlY2FsY3x8Zj09PWF8fGQ9PT1hLHY9dC5sYXlvdXQsZz10Ll9mdWxsTGF5b3V0O2lmKHJbIiJdKXtPYmplY3Qua2V5cyhyKS5sZW5ndGg+MSYmby53YXJuKCJGdWxsIGFycmF5IGVkaXRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvdGhlciBlZGl0cyIsaCk7dmFyIHk9clsiIl1bIiJdO2lmKGMoeSkpZS5zZXQobnVsbCk7ZWxzZXtpZighQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gby53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBhcnJheSBlZGl0IHZhbHVlIixoLHkpLCEwO2Uuc2V0KHkpfXJldHVybiFtJiYoZih2LGcpLGQodCksITApfXZhciBiLHgsXyx3LE0sayxBLFQ9T2JqZWN0LmtleXMocikubWFwKE51bWJlcikuc29ydChzKSxTPWUuZ2V0KCksRT1TfHxbXSxMPW4oZyxoKS5nZXQoKSxDPVtdLHo9LTEsST1FLmxlbmd0aDtmb3IoYj0wO2I8VC5sZW5ndGg7YisrKWlmKF89VFtiXSx3PXJbX10sTT1PYmplY3Qua2V5cyh3KSxrPXdbIiJdLEE9dShrKSxfPDB8fF8+RS5sZW5ndGgtKEE/MDoxKSlvLndhcm4oImluZGV4IG91dCBvZiByYW5nZSIsaCxfKTtlbHNlIGlmKHZvaWQgMCE9PWspTS5sZW5ndGg+MSYmby53YXJuKCJJbnNlcnRpb24gJiByZW1vdmFsIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBlZGl0cyB0byB0aGUgc2FtZSBpbmRleC4iLGgsXyksYyhrKT9DLnB1c2goXyk6QT8oImFkZCI9PT1rJiYoaz17fSksRS5zcGxpY2UoXywwLGspLEwmJkwuc3BsaWNlKF8sMCx7fSkpOm8ud2FybigiVW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IGVkaXQgdmFsdWUiLGgsXyxrKSwtMT09PXomJih6PV8pO2Vsc2UgZm9yKHg9MDt4PE0ubGVuZ3RoO3grKyluKEVbX10sTVt4XSkuc2V0KHdbTVt4XV0pO2ZvcihiPUMubGVuZ3RoLTE7Yj49MDtiLS0pRS5zcGxpY2UoQ1tiXSwxKSxMJiZMLnNwbGljZShDW2JdLDEpO2lmKEUubGVuZ3RoP1N8fGUuc2V0KEUpOmUuc2V0KG51bGwpLG0pcmV0dXJuITE7aWYoZih2LGcpLHAhPT1hKXt2YXIgRDtpZigtMT09PXopRD1UO2Vsc2V7Zm9yKEk9TWF0aC5tYXgoRS5sZW5ndGgsSSksRD1bXSxiPTA7YjxULmxlbmd0aCYmISgoXz1UW2JdKT49eik7YisrKUQucHVzaChfKTtmb3IoYj16O2I8STtiKyspRC5wdXNoKGIpfWZvcihiPTA7YjxELmxlbmd0aDtiKyspcCh0LERbYl0pfWVsc2UgZCh0KTtyZXR1cm4hMH19LHsiLi4vbGliL2lzX3BsYWluX29iamVjdCI6NzI2LCIuLi9saWIvbG9nZ2VycyI6NzI3LCIuLi9saWIvbmVzdGVkX3Byb3BlcnR5Ijo3MzAsIi4uL2xpYi9ub29wIjo3MzEsIi4uL2xpYi9zZWFyY2giOjczOCwiLi4vcmVnaXN0cnkiOjg0MiwiLi9jb250YWluZXJfYXJyYXlfbWF0Y2giOjc0N31dLDc1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc3R5bGUoImJhY2tncm91bmQiLCJ3aGl0ZSIpLGIuZGVmYXVsdENvbmZpZy5zZXRCYWNrZ3JvdW5kKHQsZSl9ZnVuY3Rpb24gaSh0LGUpe3QuX2NvbnRleHR8fCh0Ll9jb250ZXh0PXguZXh0ZW5kRGVlcCh7fSxiLmRlZmF1bHRDb25maWcpKTt2YXIgcixpLGEsbz10Ll9jb250ZXh0O2lmKGUpe2ZvcihpPU9iamVjdC5rZXlzKGUpLHI9MDtyPGkubGVuZ3RoO3IrKykiZWRpdGFibGUiIT09KGE9aVtyXSkmJiJlZGl0cyIhPT1hJiZhIGluIG8mJigic2V0QmFja2dyb3VuZCI9PT1hJiYib3BhcXVlIj09PWVbYV0/b1thXT1uOm9bYV09ZVthXSk7ZS5wbG90M2RQaXhlbFJhdGlvJiYhby5wbG90R2xQaXhlbFJhdGlvJiYoby5wbG90R2xQaXhlbFJhdGlvPW8ucGxvdDNkUGl4ZWxSYXRpbyk7dmFyIHM9ZS5lZGl0YWJsZTtpZih2b2lkIDAhPT1zKWZvcihvLmVkaXRhYmxlPXMsaT1PYmplY3Qua2V5cyhvLmVkaXRzKSxyPTA7cjxpLmxlbmd0aDtyKyspby5lZGl0c1tpW3JdXT1zO2lmKGUuZWRpdHMpZm9yKGk9T2JqZWN0LmtleXMoZS5lZGl0cykscj0wO3I8aS5sZW5ndGg7cisrKShhPWlbcl0paW4gby5lZGl0cyYmKG8uZWRpdHNbYV09ZS5lZGl0c1thXSl9by5zdGF0aWNQbG90JiYoby5lZGl0YWJsZT0hMSxvLmVkaXRzPXt9LG8uYXV0b3NpemFibGU9ITEsby5zY3JvbGxab29tPSExLG8uZG91YmxlQ2xpY2s9ITEsby5zaG93VGlwcz0hMSxvLnNob3dMaW5rPSExLG8uZGlzcGxheU1vZGVCYXI9ITEpLCJob3ZlciIhPT1vLmRpc3BsYXlNb2RlQmFyfHx5fHwoby5kaXNwbGF5TW9kZUJhcj0hMCl9ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49di5zZWxlY3QodCkuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSk7bi5lbnRlcigpLmluc2VydCgiZGl2IiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgicGxvdC1jb250YWluZXIgcGxvdGx5IiwhMCk7dmFyIGk9bi5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLGkuaHRtbCgiIiksZSYmKHQuZGF0YT1lKSxyJiYodC5sYXlvdXQ9ciksQS5tYW5hZ2VyLmZpbGxMYXlvdXQodCksaS5zdHlsZSh7d2lkdGg6dC5fZnVsbExheW91dC53aWR0aCsicHgiLGhlaWdodDp0Ll9mdWxsTGF5b3V0LmhlaWdodCsicHgifSksdC5mcmFtZXdvcms9QS5tYW5hZ2VyLmZyYW1ld29yayh0KSx0LmZyYW1ld29yayh7ZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSxpLm5vZGUoKSksdC5mcmFtZXdvcmsuc2V0VW5kb1BvaW50KCk7dmFyIGE9dC5mcmFtZXdvcmsuc3ZnKCksbz0xLHM9dC5fZnVsbExheW91dC50aXRsZTsiIiE9PXMmJnN8fChvPTApO3ZhciBsPWZ1bmN0aW9uKCl7dGhpcy5jYWxsKEMuY29udmVydFRvVHNwYW5zLHQpfSx1PWEuc2VsZWN0KCIudGl0bGUtZ3JvdXAgdGV4dCIpLmNhbGwobCk7aWYodC5fY29udGV4dC5lZGl0cy50aXRsZVRleHQpe3MmJiJDbGljayB0byBlbnRlciB0aXRsZSIhPT1zfHwobz0uMix1LmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjoiQ2xpY2sgdG8gZW50ZXIgdGl0bGUifSkudGV4dCgiQ2xpY2sgdG8gZW50ZXIgdGl0bGUiKS5zdHlsZSh7b3BhY2l0eTpvfSkub24oIm1vdXNlb3Zlci5vcGFjaXR5IixmdW5jdGlvbigpe3Yuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxMDApLnN0eWxlKCJvcGFjaXR5IiwxKX0pLm9uKCJtb3VzZW91dC5vcGFjaXR5IixmdW5jdGlvbigpe3Yuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbigxZTMpLnN0eWxlKCJvcGFjaXR5IiwwKX0pKTt2YXIgYz1mdW5jdGlvbigpe3RoaXMuY2FsbChDLm1ha2VFZGl0YWJsZSx7Z2Q6dH0pLm9uKCJlZGl0IixmdW5jdGlvbihlKXt0LmZyYW1ld29yayh7bGF5b3V0Ont0aXRsZTplfX0pLHRoaXMudGV4dChlKS5jYWxsKGwpLHRoaXMuY2FsbChjKX0pLm9uKCJjYW5jZWwiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIik7dGhpcy50ZXh0KHQpLmNhbGwobCl9KX07dS5jYWxsKGMpfXJldHVybiB0Ll9jb250ZXh0LnNldEJhY2tncm91bmQodCx0Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3IpLGsuYWRkTGlua3ModCksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG4saT1lKzEsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKW49dFtyXSxuPDA/YS5wdXNoKGkrbik6YS5wdXNoKG4pO3JldHVybiBhfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuLGk7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7aWYoKGk9ZVtuXSkhPT1wYXJzZUludChpLDEwKSl0aHJvdyBuZXcgRXJyb3IoImFsbCB2YWx1ZXMgaW4gIityKyIgbXVzdCBiZSBpbnRlZ2VycyIpO2lmKGk+PXQuZGF0YS5sZW5ndGh8fGk8LXQuZGF0YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIrIiBtdXN0IGJlIHZhbGlkIGluZGljZXMgZm9yIGdkLmRhdGEuIik7aWYoZS5pbmRleE9mKGksbisxKT4tMXx8aT49MCYmZS5pbmRleE9mKC10LmRhdGEubGVuZ3RoK2kpPi0xfHxpPDAmJmUuaW5kZXhPZih0LmRhdGEubGVuZ3RoK2kpPi0xKXRocm93IG5ldyBFcnJvcigiZWFjaCBpbmRleCBpbiAiK3IrIiBtdXN0IGJlIHVuaXF1ZS4iKX19ZnVuY3Rpb24gbCh0LGUscil7aWYoIUFycmF5LmlzQXJyYXkodC5kYXRhKSl0aHJvdyBuZXcgRXJyb3IoImdkLmRhdGEgbXVzdCBiZSBhbiBhcnJheS4iKTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiY3VycmVudEluZGljZXMgaXMgYSByZXF1aXJlZCBhcmd1bWVudC4iKTtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLHModCxlLCJjdXJyZW50SW5kaWNlcyIpLHZvaWQgMD09PXJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksdm9pZCAwIT09ciYmcyh0LHIsIm5ld0luZGljZXMiKSx2b2lkIDAhPT1yJiZlLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiY3VycmVudCBhbmQgbmV3IGluZGljZXMgbXVzdCBiZSBvZiBlcXVhbCBsZW5ndGguIil9ZnVuY3Rpb24gdSh0LGUscil7dmFyIG4saTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LiIpO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJ0cmFjZXMgbXVzdCBiZSBkZWZpbmVkLiIpO2ZvcihBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLG49MDtuPGUubGVuZ3RoO24rKylpZigib2JqZWN0IiE9dHlwZW9mKGk9ZVtuXSl8fEFycmF5LmlzQXJyYXkoaSl8fG51bGw9PT1pKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiB0cmFjZXMgYXJyYXkgbXVzdCBiZSBub24tYXJyYXkgb2JqZWN0cyIpO2lmKHZvaWQgMD09PXJ8fEFycmF5LmlzQXJyYXkocil8fChyPVtyXSksdm9pZCAwIT09ciYmci5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImlmIGluZGljZXMgaXMgc3BlY2lmaWVkLCB0cmFjZXMubGVuZ3RoIG11c3QgZXF1YWwgaW5kaWNlcy5sZW5ndGgiKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPXguaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIXguaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO3ModCxyLCJpbmRpY2VzIik7Zm9yKHZhciBhIGluIGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX1mdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpLGEscyxsLHUsYz14LmlzUGxhaW5PYmplY3QobiksaD1bXTtBcnJheS5pc0FycmF5KHIpfHwocj1bcl0pLHI9byhyLHQuZGF0YS5sZW5ndGgtMSk7Zm9yKHZhciBmIGluIGUpZm9yKHZhciBkPTA7ZDxyLmxlbmd0aDtkKyspe2lmKGk9dC5kYXRhW3JbZF1dLHM9eC5uZXN0ZWRQcm9wZXJ0eShpLGYpLGE9cy5nZXQoKSxsPWVbZl1bZF0sIUFycmF5LmlzQXJyYXkobCkpdGhyb3cgbmV3IEVycm9yKCJhdHRyaWJ1dGU6ICIrZisiIGluZGV4OiAiK2QrIiBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIUFycmF5LmlzQXJyYXkoYSkpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIG1pc3Npbmcgb3Igbm9uLWFycmF5IGF0dHJpYnV0ZTogIitmKTt1PWM/bltmXVtkXTpuLGcodSl8fCh1PS0xKSxoLnB1c2goe3Byb3A6cyx0YXJnZXQ6YSxpbnNlcnQ6bCxtYXhwOk1hdGguZmxvb3IodSl9KX1yZXR1cm4gaH1mdW5jdGlvbiBmKHQsZSxyLG4saSxhKXtjKHQsZSxyLG4pO2Zvcih2YXIgbyxzLGwsdT1oKHQsZSxyLG4pLGY9W10sZD17fSxwPXt9LG09MDttPHUubGVuZ3RoO20rKylzPXVbbV0ucHJvcCxsPXVbbV0ubWF4cCxvPWkodVttXS50YXJnZXQsdVttXS5pbnNlcnQpLGw+PTAmJmw8by5sZW5ndGgmJihmPWEobyxsKSksbD11W21dLnRhcmdldC5sZW5ndGgscy5zZXQobyksQXJyYXkuaXNBcnJheShkW3MuYXN0cl0pfHwoZFtzLmFzdHJdPVtdKSxBcnJheS5pc0FycmF5KHBbcy5hc3RyXSl8fChwW3MuYXN0cl09W10pLGRbcy5hc3RyXS5wdXNoKGYpLHBbcy5hc3RyXS5wdXNoKGwpO3JldHVybnt1cGRhdGU6ZCxtYXhQb2ludHM6cH19ZnVuY3Rpb24gZCh0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBkLm1hcChmdW5jdGlvbigpe30pfWZ1bmN0aW9uIGkodCl7dmFyIGU9Yi5BeGVzLmlkMm5hbWUodCk7LTE9PT11LmluZGV4T2YoZSkmJnUucHVzaChlKX1mdW5jdGlvbiBhKHQpe3JldHVybiJMQVlPVVQiK3QrIi5hdXRvcmFuZ2UifWZ1bmN0aW9uIG8odCl7cmV0dXJuIkxBWU9VVCIrdCsiLnJhbmdlIn1mdW5jdGlvbiBzKHIsaSxhKXtpZihBcnJheS5pc0FycmF5KHIpKXJldHVybiB2b2lkIHIuZm9yRWFjaChmdW5jdGlvbih0KXtzKHQsaSxhKX0pO2lmKCEociBpbiBlfHxJLmhhc1BhcmVudChlLHIpKSl7dmFyIG87bz0iTEFZT1VUIj09PXIuc3Vic3RyKDAsNik/eC5uZXN0ZWRQcm9wZXJ0eSh0LmxheW91dCxyLnJlcGxhY2UoIkxBWU9VVCIsIiIpKTp4Lm5lc3RlZFByb3BlcnR5KGZbZFthXV0sciksciBpbiB2fHwodltyXT1uKCkpLHZvaWQgMD09PXZbcl1bYV0mJih2W3JdW2FdPW8uZ2V0KCkpLHZvaWQgMCE9PWkmJm8uc2V0KGkpfX12YXIgbCx1LGM9dC5fZnVsbExheW91dCxoPXQuX2Z1bGxEYXRhLGY9dC5kYXRhLGQ9SS5jb2VyY2VUcmFjZUluZGljZXModCxyKSxwPVAudHJhY2VzKCksbT17fSx2PXt9LGc9e30seT1bIm1vZGUiLCJ2aXNpYmxlIiwidHlwZSIsIm9yaWVudGF0aW9uIiwiZmlsbCIsImhpc3RmdW5jIiwiaGlzdG5vcm0iLCJ0ZXh0IiwieCIsInkiLCJ6IiwiYSIsImIiLCJjIiwib3BlbiIsImhpZ2giLCJsb3ciLCJjbG9zZSIsImJhc2UiLCJ3aWR0aCIsIm9mZnNldCIsInh0eXBlIiwieDAiLCJkeCIsInl0eXBlIiwieTAiLCJkeSIsInhheGlzIiwieWF4aXMiLCJsaW5lLndpZHRoIiwiY29ubmVjdGdhcHMiLCJ0cmFuc3Bvc2UiLCJ6c21vb3RoIiwic2hvd3NjYWxlIiwibWFya2VyLnNob3dzY2FsZSIsInphdXRvIiwibWFya2VyLmNhdXRvIiwiYXV0b2NvbG9yc2NhbGUiLCJtYXJrZXIuYXV0b2NvbG9yc2NhbGUiLCJjb2xvcnNjYWxlIiwibWFya2VyLmNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJtYXJrZXIucmV2ZXJzZXNjYWxlIiwiYXV0b2JpbngiLCJuYmluc3giLCJ4YmlucyIsInhiaW5zLnN0YXJ0IiwieGJpbnMuZW5kIiwieGJpbnMuc2l6ZSIsImF1dG9iaW55IiwibmJpbnN5IiwieWJpbnMiLCJ5Ymlucy5zdGFydCIsInliaW5zLmVuZCIsInliaW5zLnNpemUiLCJlcnJvcl95IiwiZXJyb3JfeS52aXNpYmxlIiwiZXJyb3JfeS52YWx1ZSIsImVycm9yX3kudHlwZSIsImVycm9yX3kudHJhY2VyZWYiLCJlcnJvcl95LmFycmF5IiwiZXJyb3JfeS5zeW1tZXRyaWMiLCJlcnJvcl95LmFycmF5bWludXMiLCJlcnJvcl95LnZhbHVlbWludXMiLCJlcnJvcl95LnRyYWNlcmVmbWludXMiLCJlcnJvcl94IiwiZXJyb3JfeC52aXNpYmxlIiwiZXJyb3JfeC52YWx1ZSIsImVycm9yX3gudHlwZSIsImVycm9yX3gudHJhY2VyZWYiLCJlcnJvcl94LmFycmF5IiwiZXJyb3JfeC5zeW1tZXRyaWMiLCJlcnJvcl94LmFycmF5bWludXMiLCJlcnJvcl94LnZhbHVlbWludXMiLCJlcnJvcl94LnRyYWNlcmVmbWludXMiLCJzd2FweHkiLCJzd2FweHlheGVzIiwib3JpZW50YXRpb25heGVzIiwibWFya2VyLmNvbG9ycyIsInZhbHVlcyIsImxhYmVscyIsImxhYmVsMCIsImRsYWJlbCIsInNvcnQiLCJ0ZXh0aW5mbyIsInRleHRwb3NpdGlvbiIsInRleHRmb250LnNpemUiLCJ0ZXh0Zm9udC5mYW1pbHkiLCJ0ZXh0Zm9udC5jb2xvciIsImluc2lkZXRleHRmb250LnNpemUiLCJpbnNpZGV0ZXh0Zm9udC5mYW1pbHkiLCJpbnNpZGV0ZXh0Zm9udC5jb2xvciIsIm91dHNpZGV0ZXh0Zm9udC5zaXplIiwib3V0c2lkZXRleHRmb250LmZhbWlseSIsIm91dHNpZGV0ZXh0Zm9udC5jb2xvciIsImhvbGUiLCJzY2FsZWdyb3VwIiwiZG9tYWluIiwiZG9tYWluLngiLCJkb21haW4ueSIsImRvbWFpbi54WzBdIiwiZG9tYWluLnhbMV0iLCJkb21haW4ueVswXSIsImRvbWFpbi55WzFdIiwidGlsdCIsInRpbHRheGlzIiwiZGVwdGgiLCJkaXJlY3Rpb24iLCJyb3RhdGlvbiIsInB1bGwiLCJsaW5lLnNob3dzY2FsZSIsImxpbmUuY2F1dG8iLCJsaW5lLmF1dG9jb2xvcnNjYWxlIiwibGluZS5yZXZlcnNlc2NhbGUiLCJtYXJrZXIubGluZS5zaG93c2NhbGUiLCJtYXJrZXIubGluZS5jYXV0byIsIm1hcmtlci5saW5lLmF1dG9jb2xvcnNjYWxlIiwibWFya2VyLmxpbmUucmV2ZXJzZXNjYWxlIiwieGNhbGVuZGFyIiwieWNhbGVuZGFyIiwiY3VtdWxhdGl2ZSIsImN1bXVsYXRpdmUuZW5hYmxlZCIsImN1bXVsYXRpdmUuZGlyZWN0aW9uIiwiY3VtdWxhdGl2ZS5jdXJyZW50YmluIiwiYTAiLCJkYSIsImIwIiwiZGIiLCJhdHlwZSIsImJ0eXBlIiwiY2hlYXRlcnNsb3BlIiwiY2FycGV0Iiwic3VtIl0sXz1bImNvbG9yIiwic21vb3RoaW5nIiwidGl0bGUiLCJ0aXRsZWZvbnQiLCJ0aXRsZWZvbnQuc2l6ZSIsInRpdGxlZm9udC5mYW1pbHkiLCJ0aXRsZWZvbnQuY29sb3IiLCJ0aXRsZW9mZnNldCIsInR5cGUiLCJhdXRvcmFuZ2UiLCJyYW5nZW1vZGUiLCJyYW5nZSIsImZpeGVkcmFuZ2UiLCJjaGVhdGVydHlwZSIsInRpY2ttb2RlIiwibnRpY2tzIiwidGlja3ZhbHMiLCJ0aWNrdGV4dCIsInRpY2tzIiwibWlycm9yIiwidGlja2xlbiIsInRpY2t3aWR0aCIsInRpY2tjb2xvciIsInNob3d0aWNrbGFiZWxzIiwidGlja2ZvbnQiLCJ0aWNrZm9udC5zaXplIiwidGlja2ZvbnQuZmFtaWx5IiwidGlja2ZvbnQuY29sb3IiLCJ0aWNrcHJlZml4Iiwic2hvd3RpY2twcmVmaXgiLCJ0aWNrc3VmZml4Iiwic2hvd3RpY2tzdWZmaXgiLCJzaG93ZXhwb25lbnQiLCJleHBvbmVudGZvcm1hdCIsInNlcGFyYXRldGhvdXNhbmRzIiwidGlja2Zvcm1hdCIsImNhdGVnb3J5b3JkZXIiLCJjYXRlZ29yeWFycmF5IiwibGFiZWxwYWRkaW5nIiwibGFiZWxwcmVmaXgiLCJsYWJlbHN1ZmZpeCIsImxhYmVsZm9udCIsImxhYmVsZm9udC5mYW1pbHkiLCJsYWJlbGZvbnQuc2l6ZSIsImxhYmVsZm9udC5jb2xvciIsInNob3dsaW5lIiwibGluZWNvbG9yIiwibGluZXdpZHRoIiwiZ3JpZGNvbG9yIiwiZ3JpZHdpZHRoIiwic2hvd2dyaWQiLCJtaW5vcmdyaWRjb3VudCIsIm1pbm9yZ3JpZHdpZHRoIiwibWlub3JncmlkY29sb3IiLCJzdGFydGxpbmUiLCJzdGFydGxpbmVjb2xvciIsInN0YXJ0bGluZXdpZHRoIiwiZW5kbGluZSIsImVuZGxpbmV3aWR0aCIsImVuZGxpbmVjb2xvciIsInRpY2swIiwiZHRpY2siLCJhcnJheXRpY2swIiwiYXJyYXlkdGljayIsImhvdmVyZm9ybWF0IiwidGlja2FuZ2xlIl07Zm9yKGw9MDtsPF8ubGVuZ3RoO2wrKyl5LnB1c2goImFheGlzLiIrX1tsXSkseS5wdXNoKCJiYXhpcy4iK19bbF0pO2ZvcihsPTA7bDxkLmxlbmd0aDtsKyspaWYoTS50cmFjZUlzKGhbZFtsXV0sImJveCIpKXt5LnB1c2goIm5hbWUiKTticmVha312YXIgdz1bIm1hcmtlciIsIm1hcmtlci5zaXplIiwidGV4dGZvbnQiLCJib3hwb2ludHMiLCJqaXR0ZXIiLCJwb2ludHBvcyIsIndoaXNrZXJ3aWR0aCIsImJveG1lYW4iLCJ0aWNrd2lkdGgiXSxBPVsiem1pbiIsInptYXgiLCJ6YXV0byIsInhnYXAiLCJ5Z2FwIiwibWFya2VyLmNtaW4iLCJtYXJrZXIuY21heCIsIm1hcmtlci5jYXV0byIsImxpbmUuY21pbiIsImxpbmUuY21heCIsIm1hcmtlci5saW5lLmNtaW4iLCJtYXJrZXIubGluZS5jbWF4IiwibGluZSIsImxpbmUuc21vb3RoaW5nIiwibGluZS5zaGFwZSIsImVycm9yX3kud2lkdGgiLCJlcnJvcl94LndpZHRoIiwiZXJyb3JfeC5jb3B5X3lzdHlsZSIsIm1hcmtlci5tYXhkaXNwbGF5ZWQiXSxUPVsidHlwZSIsIngiLCJ5IiwieDAiLCJ5MCIsIm9yaWVudGF0aW9uIiwieGF4aXMiLCJ5YXhpcyJdLFM9WyJ6bWluIiwiem1heCJdLEU9WyJjbWluIiwiY21heCJdLEw9WyJ4Ymlucy5zdGFydCIsInhiaW5zLmVuZCIsInhiaW5zLnNpemUiXSxDPVsieWJpbnMuc3RhcnQiLCJ5Ymlucy5lbmQiLCJ5Ymlucy5zaXplIl0sej1bImNvbnRvdXJzLnN0YXJ0IiwiY29udG91cnMuZW5kIiwiY29udG91cnMuc2l6ZSJdLEQ9WyJjYXJ0ZXNpYW4iLCJwaWUiLCJ0ZXJuYXJ5Il07Yy5fYmFzZVBsb3RNb2R1bGVzLmZvckVhY2goZnVuY3Rpb24odCl7LTE9PT1ELmluZGV4T2YodC5uYW1lKSYmKHAuZG9jYWxjPSEwKX0pO2Zvcih2YXIgTyBpbiBlKXtpZihJLmhhc1BhcmVudChlLE8pKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK08rImFuZCBhIHBhcmVudCBhdHRyaWJ1dGUgc2ltdWx0YW5lb3VzbHkiKTt2YXIgUixGLGosTixCLFU9ZVtPXTtpZihtW09dPVUsIkxBWU9VVCIhPT1PLnN1YnN0cigwLDYpKXtmb3IodltPXT1uKCksbD0wO2w8ZC5sZW5ndGg7bCsrKWlmKFI9ZltkW2xdXSxGPWhbZFtsXV0saj14Lm5lc3RlZFByb3BlcnR5KFIsTyksTj1qLmdldCgpLHZvaWQgMCE9PShCPUFycmF5LmlzQXJyYXkoVSk/VVtsJVUubGVuZ3RoXTpVKSl7aWYoLTEhPT1TLmluZGV4T2YoTykmJnMoInphdXRvIiwhMSxsKSwtMSE9PUUuaW5kZXhPZihPKSlzKCJjYXV0byIsITEsbCk7ZWxzZSBpZigiY29sb3JzY2FsZSI9PT1PKXMoImF1dG9jb2xvcnNjYWxlIiwhMSxsKTtlbHNlIGlmKCJhdXRvY29sb3JzY2FsZSI9PT1PKXMoImNvbG9yc2NhbGUiLHZvaWQgMCxsKTtlbHNlIGlmKCJtYXJrZXIuY29sb3JzY2FsZSI9PT1PKXMoIm1hcmtlci5hdXRvY29sb3JzY2FsZSIsITEsbCk7ZWxzZSBpZigibWFya2VyLmF1dG9jb2xvcnNjYWxlIj09PU8pcygibWFya2VyLmNvbG9yc2NhbGUiLHZvaWQgMCxsKTtlbHNlIGlmKCJ6YXV0byI9PT1PKXMoUyx2b2lkIDAsbCk7ZWxzZSBpZigtMSE9PUwuaW5kZXhPZihPKSlzKCJhdXRvYmlueCIsITEsbCk7ZWxzZSBpZigiYXV0b2JpbngiPT09TylzKEwsdm9pZCAwLGwpO2Vsc2UgaWYoLTEhPT1DLmluZGV4T2YoTykpcygiYXV0b2JpbnkiLCExLGwpO2Vsc2UgaWYoImF1dG9iaW55Ij09PU8pcyhDLHZvaWQgMCxsKTtlbHNlIGlmKC0xIT09ei5pbmRleE9mKE8pKXMoImF1dG9jb250b3VyIiwhMSxsKTtlbHNlIGlmKCJhdXRvY29udG91ciI9PT1PKXMoeix2b2lkIDAsbCk7ZWxzZSBpZigtMSE9PVsieDAiLCJkeCJdLmluZGV4T2YoTykmJkYueCYmInNjYWxlZCIhPT1GLnh0eXBlKXMoInh0eXBlIiwic2NhbGVkIixsKTtlbHNlIGlmKC0xIT09WyJ5MCIsImR5Il0uaW5kZXhPZihPKSYmRi55JiYic2NhbGVkIiE9PUYueXR5cGUpcygieXR5cGUiLCJzY2FsZWQiLGwpO2Vsc2UgaWYoImNvbG9yYmFyLnRoaWNrbmVzc21vZGUiPT09TyYmai5nZXQoKSE9PUImJi0xIT09WyJmcmFjdGlvbiIsInBpeGVscyJdLmluZGV4T2YoQikmJkYuY29sb3JiYXIpe3ZhciBWPS0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEYuY29sb3JiYXIub3JpZW50KT9jLmhlaWdodC1jLm1hcmdpbi50LWMubWFyZ2luLmI6Yy53aWR0aC1jLm1hcmdpbi5sLWMubWFyZ2luLnI7cygiY29sb3JiYXIudGhpY2tuZXNzIixGLmNvbG9yYmFyLnRoaWNrbmVzcyooImZyYWN0aW9uIj09PUI/MS9WOlYpLGwpfWVsc2UgaWYoImNvbG9yYmFyLmxlbm1vZGUiPT09TyYmai5nZXQoKSE9PUImJi0xIT09WyJmcmFjdGlvbiIsInBpeGVscyJdLmluZGV4T2YoQikmJkYuY29sb3JiYXIpe3ZhciBIPS0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKEYuY29sb3JiYXIub3JpZW50KT9jLndpZHRoLWMubWFyZ2luLmwtYy5tYXJnaW4ucjpjLmhlaWdodC1jLm1hcmdpbi50LWMubWFyZ2luLmI7cygiY29sb3JiYXIubGVuIixGLmNvbG9yYmFyLmxlbiooImZyYWN0aW9uIj09PUI/MS9IOkgpLGwpfWVsc2UiY29sb3JiYXIudGljazAiPT09T3x8ImNvbG9yYmFyLmR0aWNrIj09PU8/cygiY29sb3JiYXIudGlja21vZGUiLCJsaW5lYXIiLGwpOiJjb2xvcmJhci50aWNrbW9kZSI9PT1PJiZzKFsiY29sb3JiYXIudGljazAiLCJjb2xvcmJhci5kdGljayJdLHZvaWQgMCxsKTtpZigidHlwZSI9PT1PJiYicGllIj09PUIhPSgicGllIj09PU4pKXt2YXIgcT0ieCIsRz0ieSI7ImJhciIhPT1CJiYiYmFyIiE9PU58fCJoIiE9PVIub3JpZW50YXRpb258fChxPSJ5IixHPSJ4IikseC5zd2FwQXR0cnMoUixbIj8iLCI/c3JjIl0sImxhYmVscyIscSkseC5zd2FwQXR0cnMoUixbImQ/IiwiPzAiXSwibGFiZWwiLHEpLHguc3dhcEF0dHJzKFIsWyI/IiwiP3NyYyJdLCJ2YWx1ZXMiLEcpLCJwaWUiPT09Tj8oeC5uZXN0ZWRQcm9wZXJ0eShSLCJtYXJrZXIuY29sb3IiKS5zZXQoeC5uZXN0ZWRQcm9wZXJ0eShSLCJtYXJrZXIuY29sb3JzIikuZ2V0KCkpLGMuX3BpZWxheWVyLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpKTpNLnRyYWNlSXMoUiwiY2FydGVzaWFuIikmJih4Lm5lc3RlZFByb3BlcnR5KFIsIm1hcmtlci5jb2xvcnMiKS5zZXQoeC5uZXN0ZWRQcm9wZXJ0eShSLCJtYXJrZXIuY29sb3IiKS5nZXQoKSksZ1tSLnhheGlzfHwieCJdPSEwLGdbUi55YXhpc3x8InkiXT0hMCl9dltPXVtsXT1OO3ZhciBZPVsic3dhcHh5Iiwic3dhcHh5YXhlcyIsIm9yaWVudGF0aW9uIiwib3JpZW50YXRpb25heGVzIl07aWYoLTEhPT1ZLmluZGV4T2YoTykpe2lmKCJvcmllbnRhdGlvbiI9PT1PKXtpZihqLnNldChCKSxqLmdldCgpPT09dltPXVtsXSljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT1PJiYoUi5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W0Yub3JpZW50YXRpb25dKTtJLnN3YXBYWURhdGEoUil9ZWxzZSBpZigtMSE9PWsuZGF0YUFycmF5Q29udGFpbmVycy5pbmRleE9mKGoucGFydHNbMF0pKUkubWFuYWdlQXJyYXlDb250YWluZXJzKGosQix2KSxwLmRvY2FsYz0hMDtlbHNle3ZhciBYPWoucGFydHNbMF0sVz0oRi5fbW9kdWxlfHx7fSkuYXR0cmlidXRlcyxaPVcmJldbWF07aWYoWnx8KFo9ay5hdHRyaWJ1dGVzW1hdKSxaKXtmb3IodmFyIEo9MTtKPGoucGFydHMubGVuZ3RoO0orKyl7dmFyIEs9WltqLnBhcnRzW0pdXTtpZighSylicmVhaztaPUt9KCFaLnZhbFR5cGV8fFouYXJyYXlPayYmKEFycmF5LmlzQXJyYXkoQil8fEFycmF5LmlzQXJyYXkoTikpKSYmKHAuZG9jYWxjPSEwKSxQLnVwZGF0ZShwLFopfWVsc2UgcC5kb2NhbGM9ITA7ai5zZXQoQil9fWlmKC0xIT09WyJzd2FweHlheGVzIiwib3JpZW50YXRpb25heGVzIl0uaW5kZXhPZihPKSYmYi5BeGVzLnN3YXAodCxkKSwib3JpZW50YXRpb25heGVzIj09PU8pe3ZhciBRPXgubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsImhvdmVybW9kZSIpOyJ4Ij09PVEuZ2V0KCk/US5zZXQoInkiKToieSI9PT1RLmdldCgpJiZRLnNldCgieCIpfS0xIT09ZC5pbmRleE9mKDApJiYtMSE9PVQuaW5kZXhPZihPKSYmKGIuQXhlcy5jbGVhclR5cGVzKHQsZCkscC5kb2NhbGM9ITApLC0xIT09WyJhdXRvYmlueCIsImF1dG9iaW55IiwiemF1dG8iXS5pbmRleE9mKE8pJiYhMT09PUJ8fChwLmRvc3R5bGU9ITApLCgtMSE9PVsiY29sb3JiYXIiLCJsaW5lIl0uaW5kZXhPZihqLnBhcnRzWzBdKXx8Im1hcmtlciI9PT1qLnBhcnRzWzBdJiYiY29sb3JiYXIiPT09ai5wYXJ0c1sxXSkmJihwLmRvY29sb3JiYXJzPSEwKTt2YXIgJD1PLmluZGV4T2YoIlsiKSx0dD0tMT09PSQ/TzpPLnN1YnN0cigwLCQpO2lmKC0xIT09eS5pbmRleE9mKHR0KSl7aWYoLTEhPT1bIm9yaWVudGF0aW9uIiwidHlwZSJdLmluZGV4T2YoTykpe2Zvcih1PVtdLGw9MDtsPGQubGVuZ3RoO2wrKyl7dmFyIGV0PWZbZFtsXV07TS50cmFjZUlzKGV0LCJjYXJ0ZXNpYW4iKSYmKGkoZXQueGF4aXN8fCJ4IiksaShldC55YXhpc3x8InkiKSwidHlwZSI9PT1PJiZzKFsiYXV0b2JpbngiLCJhdXRvYmlueSJdLCEwLGwpKX1zKHUubWFwKGEpLCEwLDApLHModS5tYXAobyksWzAsMV0sMCl9cC5kb2NhbGM9ITB9ZWxzZS0xIT09QS5pbmRleE9mKHR0KT9wLmRvcGxvdD0hMDowPT09dHQuaW5kZXhPZigiYWF4aXMiKXx8MD09PXR0LmluZGV4T2YoImJheGlzIik/cC5kb3Bsb3Q9ITA6LTEhPT13LmluZGV4T2YodHQpJiYocC5kb2NhbGNBdXRvcmFuZ2U9ITApfWVsc2Ugaj14Lm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LE8ucmVwbGFjZSgiTEFZT1VUIiwiIikpLHZbT109W2ouZ2V0KCldLGouc2V0KEFycmF5LmlzQXJyYXkoVSk/VVswXTpVKSxwLmRvY2FsYz0hMH1iLkF4ZXMubGlzdCh0KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QuYXV0b3JhbmdlJiYocC5hdXRvcmFuZ2VPbj0hMCl9KTt2YXIgcnQ9T2JqZWN0LmtleXMoZyk7dDpmb3IobD0wO2w8cnQubGVuZ3RoO2wrKyl7Zm9yKHZhciBudD1ydFtsXSxpdD1udC5jaGFyQXQoMCksYXQ9aXQrImF4aXMiLG90PTA7b3Q8Zi5sZW5ndGg7b3QrKylpZihNLnRyYWNlSXMoZltvdF0sImNhcnRlc2lhbiIpJiYoZltvdF1bYXRdfHxpdCk9PT1udCljb250aW51ZSB0O3MoIkxBWU9VVCIrYi5BeGVzLmlkMm5hbWUobnQpLG51bGwsMCl9cmV0dXJuKHAuZG9jYWxjfHxwLmRvY2FsY0F1dG9yYW5nZSYmcC5hdXRvcmFuZ2VPbikmJihwLmNsZWFyQ2FsYz0hMCksKHAuZG9jYWxjfHxwLmRvcGxvdHx8cC5kb2NhbGNBdXRvcmFuZ2UpJiYocC5mdWxsUmVwbG90PSEwKSx7ZmxhZ3M6cCx1bmRvaXQ6dixyZWRvaXQ6bSx0cmFjZXM6ZCxldmVudERhdGE6eC5leHRlbmREZWVwTm9BcnJheXMoW10sW20sZF0pfX1mdW5jdGlvbiBwKHQsZSl7ZnVuY3Rpb24gcih0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHZvaWQgdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IodCxuKX0pO2lmKCEodCBpbiBlfHxJLmhhc1BhcmVudChlLHQpKSl7dmFyIGk9eC5uZXN0ZWRQcm9wZXJ0eShsLHQpO3QgaW4gX3x8KF9bdF09aS5nZXQoKSksdm9pZCAwIT09biYmaS5zZXQobil9fWZ1bmN0aW9uIG4oZSxyKXtpZigheC5pc1BsYWluT2JqZWN0KGUpKXJldHVybiExO3ZhciBuPWVbcisicmVmIl18fHIsaT1iLkF4ZXMuZ2V0RnJvbUlkKHQsbik7cmV0dXJuIGl8fG4uY2hhckF0KDApIT09cnx8KGk9Yi5BeGVzLmdldEZyb21JZCh0LHIpKSwoaXx8e30pLmF1dG9yYW5nZX1mdW5jdGlvbiBpKHQpe3ZhciBlPU4ubmFtZTJpZCh0LnNwbGl0KCIuIilbMF0pO3JldHVybiB3W2VdPTEsZX12YXIgYSxvLHMsbD10LmxheW91dCx1PXQuX2Z1bGxMYXlvdXQsYz1PYmplY3Qua2V5cyhlKSxoPWIuQXhlcy5saXN0KHQpLGY9e307Zm9yKG89MDtvPGMubGVuZ3RoO28rKylpZigwPT09Y1tvXS5pbmRleE9mKCJhbGxheGVzIikpe2ZvcihzPTA7czxoLmxlbmd0aDtzKyspe3ZhciBkPWhbc10uX2lkLnN1YnN0cigxKSxwPS0xIT09ZC5pbmRleE9mKCJzY2VuZSIpP2QrIi4iOiIiLG09Y1tvXS5yZXBsYWNlKCJhbGxheGVzIixwK2hbc10uX25hbWUpO2VbbV18fChlW21dPWVbY1tvXV0pfWRlbGV0ZSBlW2Nbb11dfXZhciB2LGc9UC5sYXlvdXQoKSx5PXt9LF89e30sdz17fTtmb3IodmFyIEEgaW4gZSl7aWYoSS5oYXNQYXJlbnQoZSxBKSl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzZXQgIitBKyJhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIFQ9eC5uZXN0ZWRQcm9wZXJ0eShsLEEpLFM9ZVtBXSxFPVQucGFydHMubGVuZ3RoLEw9InN0cmluZyI9PXR5cGVvZiBULnBhcnRzW0UtMV0/RS0xOkUtMixDPVQucGFydHNbMF0sRD1ULnBhcnRzW0xdLFI9VC5wYXJ0c1tMLTFdKyIuIitELEY9VC5wYXJ0cy5zbGljZSgwLEwpLmpvaW4oIi4iKSxqPXgubmVzdGVkUHJvcGVydHkodC5sYXlvdXQsRikuZ2V0KCksQj14Lm5lc3RlZFByb3BlcnR5KHUsRikuZ2V0KCksVT1ULmdldCgpO2lmKHZvaWQgMCE9PVMpe2lmKHlbQV09UyxfW0FdPSJyZXZlcnNlIj09PUQ/UzpVLC0xIT09WyJ3aWR0aCIsImhlaWdodCJdLmluZGV4T2YoQSkmJm51bGw9PT1TKXVbQV09dC5faW5pdGlhbEF1dG9TaXplW0FdO2Vsc2UgaWYoUi5tYXRjaCgvXlt4eXpdYXhpc1swLTldKlwucmFuZ2UoXFtbMHwxXVxdKT8kLykpcihGKyIuYXV0b3JhbmdlIiwhMSksaShSKSx4Lm5lc3RlZFByb3BlcnR5KHUsRisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO2Vsc2UgaWYoUi5tYXRjaCgvXlt4eXpdYXhpc1swLTldKlwuYXV0b3JhbmdlJC8pKXtyKFtGKyIucmFuZ2VbMF0iLEYrIi5yYW5nZVsxXSJdLHZvaWQgMCksaShSKSx4Lm5lc3RlZFByb3BlcnR5KHUsRisiLl9pbnB1dFJhbmdlIikuc2V0KG51bGwpO3ZhciBWPXgubmVzdGVkUHJvcGVydHkodSxGKS5nZXQoKTtWLl9pbnB1dERvbWFpbiYmKFYuX2lucHV0LmRvbWFpbj1WLl9pbnB1dERvbWFpbi5zbGljZSgpKX1lbHNlIFIubWF0Y2goL15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvKT94Lm5lc3RlZFByb3BlcnR5KHUsRisiLl9pbnB1dERvbWFpbiIpLnNldChudWxsKTpSLm1hdGNoKC9eW3h5el1heGlzWzAtOV0qXC5jb25zdHJhaW4uKiQvKT9nLmRvY2FsYz0hMDpSLm1hdGNoKC9eYXNwZWN0cmF0aW9cLlt4eXpdJC8pP3IoQysiLmFzcGVjdG1vZGUiLCJtYW51YWwiKTpSLm1hdGNoKC9eYXNwZWN0bW9kZSQvKT9yKFtGKyIueCIsRisiLnkiLEYrIi56Il0sdm9pZCAwKToidGljazAiPT09RHx8ImR0aWNrIj09PUQ/cihGKyIudGlja21vZGUiLCJsaW5lYXIiKToidGlja21vZGUiPT09RD9yKFtGKyIudGljazAiLEYrIi5kdGljayJdLHZvaWQgMCk6L1t4eV1heGlzWzAtOV0qPyQvLnRlc3QoRCkmJiFPYmplY3Qua2V5cyhTfHx7fSkubGVuZ3RoP2cuZG9jYWxjPSEwOi9beHldYXhpc1swLTldKlwuY2F0ZWdvcnlvcmRlciQvLnRlc3QoUik/Zy5kb2NhbGM9ITA6L1t4eV1heGlzWzAtOV0qXC5jYXRlZ29yeWFycmF5Ly50ZXN0KFIpJiYoZy5kb2NhbGM9ITApO2lmKC0xIT09Ui5pbmRleE9mKCJyYW5nZXNsaWRlciIpJiYoZy5kb2NhbGM9ITApLCJ0eXBlIj09PUQpe3ZhciBIPWoscT0ibGluZWFyIj09PUIudHlwZSYmImxvZyI9PT1TLEc9ImxvZyI9PT1CLnR5cGUmJiJsaW5lYXIiPT09UztpZihxfHxHKXtpZihIJiZILnJhbmdlKWlmKEIuYXV0b3JhbmdlKXEmJihILnJhbmdlPUgucmFuZ2VbMV0+SC5yYW5nZVswXT9bMSwyXTpbMiwxXSk7ZWxzZXt2YXIgWT1ILnJhbmdlWzBdLFg9SC5yYW5nZVsxXTtxPyhZPD0wJiZYPD0wJiZyKEYrIi5hdXRvcmFuZ2UiLCEwKSxZPD0wP1k9WC8xZTY6WDw9MCYmKFg9WS8xZTYpLHIoRisiLnJhbmdlWzBdIixNYXRoLmxvZyhZKS9NYXRoLkxOMTApLHIoRisiLnJhbmdlWzFdIixNYXRoLmxvZyhYKS9NYXRoLkxOMTApKToocihGKyIucmFuZ2VbMF0iLE1hdGgucG93KDEwLFkpKSxyKEYrIi5yYW5nZVsxXSIsTWF0aC5wb3coMTAsWCkpKX1lbHNlIHIoRisiLmF1dG9yYW5nZSIsITApO00uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LEIsUyxyKSxNLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsQixTLHIpfWVsc2UgcihGKyIuYXV0b3JhbmdlIiwhMCk7eC5uZXN0ZWRQcm9wZXJ0eSh1LEYrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKEQubWF0Y2goTy5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgVz14Lm5lc3RlZFByb3BlcnR5KHUsQSkuZ2V0KCksWj0oU3x8e30pLnR5cGU7WiYmIi0iIT09Wnx8KFo9ImxpbmVhciIpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNvbnZlcnRDb29yZHMiKSh0LFcsWixyKSxNLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsVyxaLHIpfXZhciBKPXouY29udGFpbmVyQXJyYXlNYXRjaChBKTtpZihKKXthPUouYXJyYXksbz1KLmluZGV4O3ZhciBLPUoucHJvcGVydHksUT14Lm5lc3RlZFByb3BlcnR5KGwsYSksJD0oUXx8W10pW29dfHx7fTtpZigiIj09PW8pLTE9PT1BLmluZGV4T2YoInVwZGF0ZW1lbnVzIikmJihnLmRvY2FsYz0hMCk7ZWxzZSBpZigiIj09PUspe3ZhciB0dD1TO3ouaXNBZGRWYWwoUyk/X1tBXT1udWxsOnouaXNSZW1vdmVWYWwoUyk/KF9bQV09JCx0dD0kKTp4Lndhcm4oInVucmVjb2duaXplZCBmdWxsIG9iamVjdCB2YWx1ZSIsZSksKG4odHQsIngiKXx8bih0dCwieSIpJiYtMT09PUEuaW5kZXhPZigidXBkYXRlbWVudXMiKSkmJihnLmRvY2FsYz0hMCl9ZWxzZSFuKCQsIngiKSYmIW4oJCwieSIpfHx4LmNvbnRhaW5zQW55KEEsWyJjb2xvciIsIm9wYWNpdHkiLCJhbGlnbiIsImRhc2giLCJ1cGRhdGVtZW51cyJdKXx8KGcuZG9jYWxjPSEwKTtmW2FdfHwoZlthXT17fSk7dmFyIGV0PWZbYV1bb107ZXR8fChldD1mW2FdW29dPXt9KSxldFtLXT1TLGRlbGV0ZSBlW0FdfWVsc2UgaWYoInJldmVyc2UiPT09RClqLnJhbmdlP2oucmFuZ2UucmV2ZXJzZSgpOihyKEYrIi5hdXRvcmFuZ2UiLCEwKSxqLnJhbmdlPVsxLDBdKSxCLmF1dG9yYW5nZT9nLmRvY2FsYz0hMDpnLmRvcGxvdD0hMDtlbHNle3ZhciBydD1TdHJpbmcoVC5wYXJ0c1sxXXx8IiIpOzA9PT1DLmluZGV4T2YoInNjZW5lIik/ImNhbWVyYSI9PT1ULnBhcnRzWzFdP2cuZG9jYW1lcmE9ITA6Zy5kb3Bsb3Q9ITA6MD09PUMuaW5kZXhPZigiZ2VvIik/Zy5kb3Bsb3Q9ITA6MD09PUMuaW5kZXhPZigidGVybmFyeSIpP2cuZG9wbG90PSEwOiJwYXBlcl9iZ2NvbG9yIj09PUE/Zy5kb3Bsb3Q9ITA6Im1hcmdpbiI9PT1DfHwiYXV0b3JhbmdlIj09PXJ0fHwicmFuZ2Vtb2RlIj09PXJ0fHwidHlwZSI9PT1ydHx8ImRvbWFpbiI9PT1ydHx8ImZpeGVkcmFuZ2UiPT09cnR8fCJzY2FsZWFuY2hvciI9PT1ydHx8InNjYWxlcmF0aW8iPT09cnR8fC0xIT09QS5pbmRleE9mKCJjYWxlbmRhciIpfHxBLm1hdGNoKC9eKGJhcnxib3h8Zm9udCkvKT9nLmRvY2FsYz0hMDohdS5faGFzKCJnbDJkIil8fC0xPT09QS5pbmRleE9mKCJheGlzIikmJiJwbG90X2JnY29sb3IiIT09QT8hdS5faGFzKCJnbDJkIil8fCJkcmFnbW9kZSIhPT1BfHwibGFzc28iIT09UyYmInNlbGVjdCIhPT1TfHwibGFzc28iPT09VXx8InNlbGVjdCI9PT1VPyJoaWRkZW5sYWJlbHMiPT09QT9nLmRvY2FsYz0hMDotMSE9PUMuaW5kZXhPZigibGVnZW5kIik/Zy5kb2xlZ2VuZD0hMDotMSE9PUEuaW5kZXhPZigidGl0bGUiKT9nLmRvdGlja3M9ITA6LTEhPT1DLmluZGV4T2YoImJnY29sb3IiKT9nLmRvbGF5b3V0c3R5bGU9ITA6RT4xJiZ4LmNvbnRhaW5zQW55KHJ0LFsidGljayIsImV4cG9uZW50IiwiZ3JpZCIsInplcm9saW5lIl0pP2cuZG90aWNrcz0hMDotMSE9PUEuaW5kZXhPZigiLmxpbmV3aWR0aCIpJiYtMSE9PUEuaW5kZXhPZigiYXhpcyIpP2cuZG90aWNrcz1nLmRvbGF5b3V0c3R5bGU9ITA6RT4xJiYtMSE9PXJ0LmluZGV4T2YoImxpbmUiKT9nLmRvbGF5b3V0c3R5bGU9ITA6RT4xJiYibWlycm9yIj09PXJ0P2cuZG90aWNrcz1nLmRvbGF5b3V0c3R5bGU9ITA6Im1hcmdpbi5wYWQiPT09QT9nLmRvdGlja3M9Zy5kb2xheW91dHN0eWxlPSEwOi0xIT09WyJob3Zlcm1vZGUiLCJkcmFnbW9kZSJdLmluZGV4T2YoQSl8fC0xIT09QS5pbmRleE9mKCJzcGlrZSIpP2cuZG9tb2RlYmFyPSEwOi0xPT09WyJoZWlnaHQiLCJ3aWR0aCIsImF1dG9zaXplIl0uaW5kZXhPZihBKSYmKGcuZG9wbG90PSEwKTpnLmRvY2FsYz0hMDpnLmRvcGxvdD0hMCxULnNldChTKX19fWZvcihhIGluIGYpe3ouYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXModCx4Lm5lc3RlZFByb3BlcnR5KGwsYSksZlthXSxnKXx8KGcuZG9wbG90PSEwKX12YXIgbnQ9dS5fYXhpc0NvbnN0cmFpbnRHcm91cHM7Zm9yKHYgaW4gdylmb3Iobz0wO288bnQubGVuZ3RoO28rKyl7dmFyIGl0PW50W29dO2lmKGl0W3ZdKXtnLmRvY2FsYz0hMDtmb3IodmFyIGF0IGluIGl0KXdbYXRdfHwoTi5nZXRGcm9tSWQodCxhdCkuX2NvbnN0cmFpbnRTaHJpbmthYmxlPSEwKX19dmFyIG90PXUud2lkdGgsc3Q9dS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZrLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LHUpLChlLmhlaWdodHx8ZS53aWR0aHx8dS53aWR0aCE9PW90fHx1LmhlaWdodCE9PXN0KSYmKGcuZG9jYWxjPSEwKSwoZy5kb3Bsb3R8fGcuZG9jYWxjKSYmKGcubGF5b3V0UmVwbG90PSEwKSx7ZmxhZ3M6Zyx1bmRvaXQ6XyxyZWRvaXQ6eSxldmVudERhdGE6eC5leHRlbmREZWVwKHt9LHkpfX1mdW5jdGlvbiBtKHQpe3ZhciBlPXYuc2VsZWN0KHQpLHI9dC5fZnVsbExheW91dDtpZihyLl9jb250YWluZXI9ZS5zZWxlY3RBbGwoIi5wbG90LWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9jb250YWluZXIuZW50ZXIoKS5pbnNlcnQoImRpdiIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInBsb3QtY29udGFpbmVyIiwhMCkuY2xhc3NlZCgicGxvdGx5IiwhMCksci5fcGFwZXJkaXY9ci5fY29udGFpbmVyLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKS5kYXRhKFswXSksci5fcGFwZXJkaXYuZW50ZXIoKS5hcHBlbmQoImRpdiIpLmNsYXNzZWQoInN2Zy1jb250YWluZXIiLCEwKS5zdHlsZSgicG9zaXRpb24iLCJyZWxhdGl2ZSIpLHIuX2dsY29udGFpbmVyPXIuX3BhcGVyZGl2LnNlbGVjdEFsbCgiLmdsLWNvbnRhaW5lciIpLmRhdGEoWzBdKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcj1yLl9wYXBlcmRpdi5pbnNlcnQoInN2ZyIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fdG9wcGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBuPVtdO3Yuc2VsZWN0QWxsKCJkZWZzIikuZWFjaChmdW5jdGlvbigpe3RoaXMuaWQmJm4ucHVzaCh0aGlzLmlkLnNwbGl0KCItIilbMV0pfSksci5fdWlkPXgucmFuZHN0cihuKX1yLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmF0dHIoTC5zdmdBdHRycyksci5fZGVmcz1yLl9wYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsImRlZnMtIityLl91aWQpLHIuX3RvcGRlZnM9ci5fdG9wcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJ0b3BkZWZzLSIrci5fdWlkKSxyLl9iZ0xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnbGF5ZXIiLCEwKSxyLl9kcmFnZ2Vycz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJkcmFnbGF5ZXIiLCEwKTt2YXIgaT1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1iZWxvdyIsITApO3IuX2ltYWdlTG93ZXJMYXllcj1pLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZUxvd2VyTGF5ZXI9aS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5fY2FydGVzaWFubGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2FydGVzaWFubGF5ZXIiLCEwKSxyLl90ZXJuYXJ5bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgidGVybmFyeWxheWVyIiwhMCksci5fZ2VvbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2VvbGF5ZXIiLCEwKTt2YXIgYT1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1hYm92ZSIsITApO3IuX2ltYWdlVXBwZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZVVwcGVyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicGllbGF5ZXIiLCEwKSxyLl9nbGltYWdlcz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJnbGltYWdlcyIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmZvbGF5ZXIiLCEwKSxyLl96b29tbGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiem9vbWxheWVyIiwhMCksci5faG92ZXJsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcmxheWVyIiwhMCksdC5lbWl0KCJwbG90bHlfZnJhbWV3b3JrIil9dmFyIHY9dCgiZDMiKSxnPXQoImZhc3QtaXNudW1lcmljIikseT10KCJoYXMtaG92ZXIiKSxiPXQoIi4uL3Bsb3RseSIpLHg9dCgiLi4vbGliIiksXz10KCIuLi9saWIvZXZlbnRzIiksdz10KCIuLi9saWIvcXVldWUiKSxNPXQoIi4uL3JlZ2lzdHJ5Iiksaz10KCIuLi9wbG90cy9wbG90cyIpLEE9dCgiLi4vcGxvdHMvcG9sYXIiKSxUPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLFM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksRT10KCIuLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLEw9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxDPXQoIi4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHo9dCgiLi9tYW5hZ2VfYXJyYXlzIiksST10KCIuL2hlbHBlcnMiKSxEPXQoIi4vc3Vicm91dGluZXMiKSxQPXQoIi4vZWRpdF90eXBlcyIpLE89dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLFI9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksRj1SLmVuZm9yY2Usaj1SLmNsZWFuLE49dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIik7Yi5wbG90PWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIG8oKXtpZihnKXJldHVybiBiLmFkZEZyYW1lcyh0LGcpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIGU9QS5fYmFzZVBsb3RNb2R1bGVzLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmRyYXdGcmFtZXdvcmsmJmVbcl0uZHJhd0ZyYW1ld29yayh0KTtyZXR1cm4geC5zeW5jT3JBc3luYyhbRC5sYXlvdXRTdHlsZXNdLHQpfWZ1bmN0aW9uIGwoKXt2YXIgZSxyLG4saT10LmNhbGNkYXRhO2ZvcihNLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KSxlPTA7ZTxpLmxlbmd0aDtlKyspcj1pW2VdLG49clswXS50cmFjZSwhMD09PW4udmlzaWJsZSYmbi5fbW9kdWxlLmNvbG9yYmFyP24uX21vZHVsZS5jb2xvcmJhcih0LHIpOmsuYXV0b01hcmdpbih0LCJjYiIrbi51aWQpO3JldHVybiBrLmRvQXV0b01hcmdpbih0KSxrLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gdSgpe2lmKEpTT04uc3RyaW5naWZ5KEEuX3NpemUpIT09eilyZXR1cm4geC5zeW5jT3JBc3luYyhbbCxELmxheW91dFN0eWxlc10sdCl9ZnVuY3Rpb24gYygpe2lmKCFMKXJldHVybiB2b2lkIEYodCk7Zm9yKHZhciBlLHIsbj1rLmdldFN1YnBsb3RJZHMoQSwiY2FydGVzaWFuIiksaT1BLl9tb2R1bGVzLGE9MDthPG4ubGVuZ3RoO2ErKyl7ZT1BLl9wbG90c1tuW2FdXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylyPWlbb10sci5zZXRQb3NpdGlvbnMmJnIuc2V0UG9zaXRpb25zKHQsZSl9cmV0dXJuIEUuY2FsYyh0KSx4LnN5bmNPckFzeW5jKFtNLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiY2FsY0F1dG9yYW5nZSIpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImNhbGNBdXRvcmFuZ2UiKSxoLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImNhbGNBdXRvcmFuZ2UiKV0sdCl9ZnVuY3Rpb24gaCgpe2lmKCF0Ll90cmFuc2l0aW9uaW5nKXtmb3IodmFyIGU9Yi5BeGVzLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO2oodCxuKSxiLkF4ZXMuZG9BdXRvUmFuZ2Uobil9Rih0KSx3JiZiLkF4ZXMuc2F2ZVJhbmdlSW5pdGlhbCh0KX19ZnVuY3Rpb24gZigpe3JldHVybiBiLkF4ZXMuZG9UaWNrcyh0LCJyZWRyYXciKX1mdW5jdGlvbiBkKCl7dmFyIGUscj10LmNhbGNkYXRhLG49QS5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy5yYW5nZXNsaWRlci1jb250YWluZXIiKTtmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKXt2YXIgaT1yW2VdWzBdLnRyYWNlLGE9ITA9PT1pLnZpc2libGUsbz1pLnVpZDtpZighYXx8IU0udHJhY2VJcyhpLCIyZE1hcCIpKXt2YXIgcz0iLmhtIitvKyIsLmNvbnRvdXIiK28rIiwjY2xpcCIrbztBLl9wYXBlci5zZWxlY3RBbGwocykucmVtb3ZlKCksbi5zZWxlY3RBbGwocykucmVtb3ZlKCl9YSYmaS5fbW9kdWxlLmNvbG9yYmFyfHxBLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuY2IiK28pLnJlbW92ZSgpfXZhciBsPUEuX2Jhc2VQbG90TW9kdWxlcztmb3IoZT0wO2U8bC5sZW5ndGg7ZSsrKWxbZV0ucGxvdCh0KTt2YXIgdT1BLl9wYXBlci5zZWxlY3RBbGwoIi5sYXllci1zdWJwbG90IikKO3JldHVybiBBLl9zaGFwZVN1YnBsb3RMYXllcnM9dS5zZWxlY3RBbGwoIi5zaGFwZWxheWVyIiksay5zdHlsZSh0KSxNLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxrLmFkZExpbmtzKHQpLEEuX3JlcGxvdHRpbmc9ITEsay5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIHAoKXtNLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJkcmF3IikodCksTS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksTS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJzbGlkZXJzIiwiZHJhdyIpKHQpLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJ1cGRhdGVtZW51cyIsImRyYXciKSh0KX12YXIgZztpZih0PUkuZ2V0R3JhcGhEaXYodCksXy5pbml0KHQpLHguaXNQbGFpbk9iamVjdChlKSl7dmFyIHk9ZTtlPXkuZGF0YSxyPXkubGF5b3V0LG49eS5jb25maWcsZz15LmZyYW1lc31pZighMT09PV8udHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2JlZm9yZXBsb3QiLFtlLHIsbl0pKXJldHVybiBQcm9taXNlLnJlamVjdCgpO2V8fHJ8fHguaXNQbG90RGl2KHQpfHx4Lndhcm4oIkNhbGxpbmcgUGxvdGx5LnBsb3QgYXMgaWYgcmVkcmF3aW5nIGJ1dCB0aGlzIGNvbnRhaW5lciBkb2Vzbid0IHlldCBoYXZlIGEgcGxvdC4iLHQpLGkodCxuKSxyfHwocj17fSksdi5zZWxlY3QodCkuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiLCEwKSxTLm1ha2VUZXN0ZXIoKSx0Ll9wcm9taXNlcz1bXTt2YXIgdz0wPT09KHQuZGF0YXx8W10pLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlKTtpZihBcnJheS5pc0FycmF5KGUpJiYoSS5jbGVhbkRhdGEoZSx0LmRhdGEpLHc/dC5kYXRhPWU6dC5kYXRhLnB1c2guYXBwbHkodC5kYXRhLGUpLHQuZW1wdHk9ITEpLHQubGF5b3V0JiYhd3x8KHQubGF5b3V0PUkuY2xlYW5MYXlvdXQocikpLHQuX2RyYWdnaW5nJiYhdC5fdHJhbnNpdGlvbmluZylyZXR1cm4gdC5fcmVwbG90UGVuZGluZz0hMCxQcm9taXNlLnJlamVjdCgpO3QuX3JlcGxvdFBlbmRpbmc9ITEsay5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgQT10Ll9mdWxsTGF5b3V0O2lmKGUmJmVbMF0mJmVbMF0ucilyZXR1cm4gYSh0LGUscik7QS5fcmVwbG90dGluZz0hMCx3JiZtKHQpLHQuZnJhbWV3b3JrIT09bSYmKHQuZnJhbWV3b3JrPW0sbSh0KSksUy5pbml0R3JhZGllbnRzKHQpLHcmJmIuQXhlcy5zYXZlU2hvd1NwaWtlSW5pdGlhbCh0KTt2YXIgTD0hdC5jYWxjZGF0YXx8dC5jYWxjZGF0YS5sZW5ndGghPT0odC5fZnVsbERhdGF8fFtdKS5sZW5ndGg7TCYmay5kb0NhbGNkYXRhKHQpO2Zvcih2YXIgQz0wO0M8dC5jYWxjZGF0YS5sZW5ndGg7QysrKXQuY2FsY2RhdGFbQ11bMF0udHJhY2U9dC5fZnVsbERhdGFbQ107dmFyIHo9SlNPTi5zdHJpbmdpZnkoQS5fc2l6ZSksUD1bay5wcmV2aW91c1Byb21pc2VzLG8scyxsLHUsYyxELmxheW91dFN0eWxlcyxmLGQscCxULGsucmVob3Zlcl07cmV0dXJuIHguc3luY09yQXN5bmMoUCx0KSxQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbihmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9hZnRlcnBsb3QiKSx0fSl9LGIucmVkcmF3PWZ1bmN0aW9uKHQpe2lmKHQ9SS5nZXRHcmFwaERpdih0KSwheC5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7cmV0dXJuIEkuY2xlYW5EYXRhKHQuZGF0YSx0LmRhdGEpLEkuY2xlYW5MYXlvdXQodC5sYXlvdXQpLHQuY2FsY2RhdGE9dm9pZCAwLGIucGxvdCh0KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlZHJhdyIpLHR9KX0sYi5uZXdQbG90PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0PUkuZ2V0R3JhcGhEaXYodCksay5jbGVhblBsb3QoW10se30sdC5fZnVsbERhdGF8fHt9LHQuX2Z1bGxMYXlvdXR8fHt9KSxrLnB1cmdlKHQpLGIucGxvdCh0LGUscixuKX0sYi5leHRlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLHIsbixpKXtlPUkuZ2V0R3JhcGhEaXYoZSk7dmFyIGE9ZihlLHIsbixpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY29uY2F0KGUpfSxmdW5jdGlvbih0LGUpe3JldHVybiB0LnNwbGljZSgwLHQubGVuZ3RoLWUpfSksbz1iLnJlZHJhdyhlKSxzPVtlLGEudXBkYXRlLG4sYS5tYXhQb2ludHNdO3JldHVybiB3LmFkZChlLGIucHJlcGVuZFRyYWNlcyxzLHQsYXJndW1lbnRzKSxvfSxiLnByZXBlbmRUcmFjZXM9ZnVuY3Rpb24gdChlLHIsbixpKXtlPUkuZ2V0R3JhcGhEaXYoZSk7dmFyIGE9ZihlLHIsbixpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29uY2F0KHQpfSxmdW5jdGlvbih0LGUpe3JldHVybiB0LnNwbGljZShlLHQubGVuZ3RoKX0pLG89Yi5yZWRyYXcoZSkscz1bZSxhLnVwZGF0ZSxuLGEubWF4UG9pbnRzXTtyZXR1cm4gdy5hZGQoZSxiLmV4dGVuZFRyYWNlcyxzLHQsYXJndW1lbnRzKSxvfSxiLmFkZFRyYWNlcz1mdW5jdGlvbiB0KGUscixuKXtlPUkuZ2V0R3JhcGhEaXYoZSk7dmFyIGksYSxvPVtdLHM9Yi5kZWxldGVUcmFjZXMsYz10LGg9W2Usb10sZj1bZSxyXTtmb3IodShlLHIsbiksQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPXIubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB4LmV4dGVuZEZsYXQoe30sdCl9KSxJLmNsZWFuRGF0YShyLGUuZGF0YSksaT0wO2k8ci5sZW5ndGg7aSsrKWUuZGF0YS5wdXNoKHJbaV0pO2ZvcihpPTA7aTxyLmxlbmd0aDtpKyspby5wdXNoKC1yLmxlbmd0aCtpKTtpZih2b2lkIDA9PT1uKXJldHVybiBhPWIucmVkcmF3KGUpLHcuYWRkKGUscyxoLGMsZiksYTtBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pO3RyeXtsKGUsbyxuKX1jYXRjaCh0KXt0aHJvdyBlLmRhdGEuc3BsaWNlKGUuZGF0YS5sZW5ndGgtci5sZW5ndGgsci5sZW5ndGgpLHR9cmV0dXJuIHcuc3RhcnRTZXF1ZW5jZShlKSx3LmFkZChlLHMsaCxjLGYpLGE9Yi5tb3ZlVHJhY2VzKGUsbyxuKSx3LnN0b3BTZXF1ZW5jZShlKSxhfSxiLmRlbGV0ZVRyYWNlcz1mdW5jdGlvbiB0KGUscil7ZT1JLmdldEdyYXBoRGl2KGUpO3ZhciBuLGksYT1bXSxsPWIuYWRkVHJhY2VzLHU9dCxjPVtlLGEscl0saD1bZSxyXTtpZih2b2lkIDA9PT1yKXRocm93IG5ldyBFcnJvcigiaW5kaWNlcyBtdXN0IGJlIGFuIGludGVnZXIgb3IgYXJyYXkgb2YgaW50ZWdlcnMuIik7Zm9yKEFycmF5LmlzQXJyYXkocil8fChyPVtyXSkscyhlLHIsImluZGljZXMiKSxyPW8ocixlLmRhdGEubGVuZ3RoLTEpLHIuc29ydCh4LnNvcnRlckRlcyksbj0wO248ci5sZW5ndGg7bis9MSlpPWUuZGF0YS5zcGxpY2UocltuXSwxKVswXSxhLnB1c2goaSk7dmFyIGY9Yi5yZWRyYXcoZSk7cmV0dXJuIHcuYWRkKGUsbCxjLHUsaCksZn0sYi5tb3ZlVHJhY2VzPWZ1bmN0aW9uIHQoZSxyLG4pe2U9SS5nZXRHcmFwaERpdihlKTt2YXIgaSxhPVtdLHM9W10sdT10LGM9dCxoPVtlLG4scl0sZj1bZSxyLG5dO2lmKGwoZSxyLG4pLHI9QXJyYXkuaXNBcnJheShyKT9yOltyXSx2b2lkIDA9PT1uKWZvcihuPVtdLGk9MDtpPHIubGVuZ3RoO2krKyluLnB1c2goLXIubGVuZ3RoK2kpO2ZvcihuPUFycmF5LmlzQXJyYXkobik/bjpbbl0scj1vKHIsZS5kYXRhLmxlbmd0aC0xKSxuPW8obixlLmRhdGEubGVuZ3RoLTEpLGk9MDtpPGUuZGF0YS5sZW5ndGg7aSsrKS0xPT09ci5pbmRleE9mKGkpJiZhLnB1c2goZS5kYXRhW2ldKTtmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKXMucHVzaCh7bmV3SW5kZXg6bltpXSx0cmFjZTplLmRhdGFbcltpXV19KTtmb3Iocy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmV3SW5kZXgtZS5uZXdJbmRleH0pLGk9MDtpPHMubGVuZ3RoO2krPTEpYS5zcGxpY2Uoc1tpXS5uZXdJbmRleCwwLHNbaV0udHJhY2UpO2UuZGF0YT1hO3ZhciBkPWIucmVkcmF3KGUpO3JldHVybiB3LmFkZChlLHUsaCxjLGYpLGR9LGIucmVzdHlsZT1mdW5jdGlvbiB0KGUscixuLGkpe2U9SS5nZXRHcmFwaERpdihlKSxJLmNsZWFyUHJvbWlzZVF1ZXVlKGUpO3ZhciBhPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgcilhW3JdPW47ZWxzZXtpZigheC5pc1BsYWluT2JqZWN0KHIpKXJldHVybiB4Lndhcm4oIlJlc3R5bGUgZmFpbC4iLHIsbixpKSxQcm9taXNlLnJlamVjdCgpO2E9eC5leHRlbmRGbGF0KHt9LHIpLHZvaWQgMD09PWkmJihpPW4pfU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmKGUuY2hhbmdlZD0hMCk7dmFyIG89ZChlLGEsaSkscz1vLmZsYWdzO3MuY2xlYXJDYWxjJiYoZS5jYWxjZGF0YT12b2lkIDApO3ZhciBsPVtdO3MuZnVsbFJlcGxvdD9sLnB1c2goYi5wbG90KToobC5wdXNoKGsucHJldmlvdXNQcm9taXNlcyksay5zdXBwbHlEZWZhdWx0cyhlKSxzLmRvc3R5bGUmJmwucHVzaChELmRvVHJhY2VTdHlsZSkscy5kb2NvbG9yYmFycyYmbC5wdXNoKEQuZG9Db2xvckJhcnMpKSxsLnB1c2goay5yZWhvdmVyKSx3LmFkZChlLHQsW2Usby51bmRvaXQsby50cmFjZXNdLHQsW2Usby5yZWRvaXQsby50cmFjZXNdKTt2YXIgdT14LnN5bmNPckFzeW5jKGwsZSk7cmV0dXJuIHUmJnUudGhlbnx8KHU9UHJvbWlzZS5yZXNvbHZlKCkpLHUudGhlbihmdW5jdGlvbigpe3JldHVybiBlLmVtaXQoInBsb3RseV9yZXN0eWxlIixvLmV2ZW50RGF0YSksZX0pfSxiLnJlbGF5b3V0PWZ1bmN0aW9uIHQoZSxyLG4pe2lmKGU9SS5nZXRHcmFwaERpdihlKSxJLmNsZWFyUHJvbWlzZVF1ZXVlKGUpLGUuZnJhbWV3b3JrJiZlLmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZSk7dmFyIGk9e307aWYoInN0cmluZyI9PXR5cGVvZiByKWlbcl09bjtlbHNle2lmKCF4LmlzUGxhaW5PYmplY3QocikpcmV0dXJuIHgud2FybigiUmVsYXlvdXQgZmFpbC4iLHIsbiksUHJvbWlzZS5yZWplY3QoKTtpPXguZXh0ZW5kRmxhdCh7fSxyKX1PYmplY3Qua2V5cyhpKS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApO3ZhciBhPXAoZSxpKSxvPWEuZmxhZ3M7by5kb2NhbGMmJihlLmNhbGNkYXRhPXZvaWQgMCk7dmFyIHM9W2sucHJldmlvdXNQcm9taXNlc107by5sYXlvdXRSZXBsb3Q/cy5wdXNoKEQubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhpKS5sZW5ndGgmJihrLnN1cHBseURlZmF1bHRzKGUpLG8uZG9sZWdlbmQmJnMucHVzaChELmRvTGVnZW5kKSxvLmRvbGF5b3V0c3R5bGUmJnMucHVzaChELmxheW91dFN0eWxlcyksby5kb3RpY2tzJiZzLnB1c2goRC5kb1RpY2tzUmVsYXlvdXQpLG8uZG9tb2RlYmFyJiZzLnB1c2goRC5kb01vZGVCYXIpLG8uZG9jYW1lcmEmJnMucHVzaChELmRvQ2FtZXJhKSkscy5wdXNoKGsucmVob3Zlciksdy5hZGQoZSx0LFtlLGEudW5kb2l0XSx0LFtlLGEucmVkb2l0XSk7dmFyIGw9eC5zeW5jT3JBc3luYyhzLGUpO3JldHVybiBsJiZsLnRoZW58fChsPVByb21pc2UucmVzb2x2ZShlKSksbC50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixhLmV2ZW50RGF0YSksZX0pfSxiLnVwZGF0ZT1mdW5jdGlvbiB0KGUscixuLGkpe2lmKGU9SS5nZXRHcmFwaERpdihlKSxJLmNsZWFyUHJvbWlzZVF1ZXVlKGUpLGUuZnJhbWV3b3JrJiZlLmZyYW1ld29yay5pc1BvbGFyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZSk7eC5pc1BsYWluT2JqZWN0KHIpfHwocj17fSkseC5pc1BsYWluT2JqZWN0KG4pfHwobj17fSksT2JqZWN0LmtleXMocikubGVuZ3RoJiYoZS5jaGFuZ2VkPSEwKSxPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihlLmNoYW5nZWQ9ITApO3ZhciBhPWQoZSx4LmV4dGVuZEZsYXQoe30sciksaSksbz1hLmZsYWdzLHM9cChlLHguZXh0ZW5kRmxhdCh7fSxuKSksbD1zLmZsYWdzOyhvLmNsZWFyQ2FsY3x8bC5kb2NhbGMpJiYoZS5jYWxjZGF0YT12b2lkIDApO3ZhciB1PVtdO2lmKG8uZnVsbFJlcGxvdCYmbC5sYXlvdXRSZXBsb3Qpe3ZhciBjPWUuZGF0YSxoPWUubGF5b3V0O2UuZGF0YT12b2lkIDAsZS5sYXlvdXQ9dm9pZCAwLHUucHVzaChmdW5jdGlvbigpe3JldHVybiBiLnBsb3QoZSxjLGgpfSl9ZWxzZSBvLmZ1bGxSZXBsb3Q/dS5wdXNoKGIucGxvdCk6bC5sYXlvdXRSZXBsb3Q/dS5wdXNoKEQubGF5b3V0UmVwbG90KToodS5wdXNoKGsucHJldmlvdXNQcm9taXNlcyksay5zdXBwbHlEZWZhdWx0cyhlKSxvLmRvc3R5bGUmJnUucHVzaChELmRvVHJhY2VTdHlsZSksby5kb2NvbG9yYmFycyYmdS5wdXNoKEQuZG9Db2xvckJhcnMpLGwuZG9sZWdlbmQmJnUucHVzaChELmRvTGVnZW5kKSxsLmRvbGF5b3V0c3R5bGUmJnUucHVzaChELmxheW91dFN0eWxlcyksbC5kb3RpY2tzJiZ1LnB1c2goRC5kb1RpY2tzUmVsYXlvdXQpLGwuZG9tb2RlYmFyJiZ1LnB1c2goRC5kb01vZGVCYXIpLGwuZG9DYW1lcmEmJnUucHVzaChELmRvQ2FtZXJhKSk7dS5wdXNoKGsucmVob3Zlciksdy5hZGQoZSx0LFtlLGEudW5kb2l0LHMudW5kb2l0LGEudHJhY2VzXSx0LFtlLGEucmVkb2l0LHMucmVkb2l0LGEudHJhY2VzXSk7dmFyIGY9eC5zeW5jT3JBc3luYyh1LGUpO3JldHVybiBmJiZmLnRoZW58fChmPVByb21pc2UucmVzb2x2ZShlKSksZi50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZW1pdCgicGxvdGx5X3VwZGF0ZSIse2RhdGE6YS5ldmVudERhdGEsbGF5b3V0OnMuZXZlbnREYXRhfSksZX0pfSxiLmFuaW1hdGU9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkocyk/dD49cy5sZW5ndGg/c1swXTpzW3RdOnN9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT90Pj1sLmxlbmd0aD9sWzBdOmxbdF06bH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9MDtyZXR1cm4gZnVuY3Rpb24oKXtpZih0JiYrK3I9PT1lKXJldHVybiB0KCl9fWlmKHQ9SS5nZXRHcmFwaERpdih0KSwheC5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYW5pbWF0aW5nIGl0LiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9wbG90Lmx5L2phdmFzY3JpcHQvYW5pbWF0aW9ucy8iKTt2YXIgbz10Ll90cmFuc2l0aW9uRGF0YTtvLl9mcmFtZVF1ZXVlfHwoby5fZnJhbWVRdWV1ZT1bXSkscj1rLnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzKHIpO3ZhciBzPXIudHJhbnNpdGlvbixsPXIuZnJhbWU7cmV0dXJuIHZvaWQgMD09PW8uX2ZyYW1lV2FpdGluZ0NudCYmKG8uX2ZyYW1lV2FpdGluZ0NudD0wKSxuZXcgUHJvbWlzZShmdW5jdGlvbihsLHUpe2Z1bmN0aW9uIGMoKXt0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShvLl9hbmltYXRpb25SYWYpLG8uX2FuaW1hdGlvblJhZj1udWxsfWZ1bmN0aW9uIGgoKXtvLl9jdXJyZW50RnJhbWUmJm8uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZvLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW8uX2N1cnJlbnRGcmFtZT1vLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsby5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxvLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGsudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCxJLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbkNvbXBsZXRlJiZlLm9uQ29tcGxldGUoKX0pLHQuZW1pdCgicGxvdGx5X2FuaW1hdGluZ2ZyYW1lIix7bmFtZTpyLGZyYW1lOmUuZnJhbWUsYW5pbWF0aW9uOntmcmFtZTplLmZyYW1lT3B0cyx0cmFuc2l0aW9uOmUudHJhbnNpdGlvbk9wdHN9fSl9ZWxzZSBjKCl9ZnVuY3Rpb24gZigpe3QuZW1pdCgicGxvdGx5X2FuaW1hdGluZyIpLG8uX2xhc3RGcmFtZUF0PS0xLzAsby5fdGltZVRvTmV4dD0wLG8uX3J1bm5pbmdUcmFuc2l0aW9ucz0wLG8uX2N1cnJlbnRGcmFtZT1udWxsO3ZhciBlPWZ1bmN0aW9uKCl7by5fYW5pbWF0aW9uUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksRGF0ZS5ub3coKS1vLl9sYXN0RnJhbWVBdD5vLl90aW1lVG9OZXh0JiZoKCl9O2UoKX1mdW5jdGlvbiBkKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHMpP3Y+PXMubGVuZ3RoP3QudHJhbnNpdGlvbk9wdHM9c1t2XTp0LnRyYW5zaXRpb25PcHRzPXNbMF06dC50cmFuc2l0aW9uT3B0cz1zLHYrKyx0fXZhciBwLG0sdj0wLGc9W10seT12b2lkIDA9PT1lfHxudWxsPT09ZSxiPUFycmF5LmlzQXJyYXkoZSk7aWYoeXx8Ynx8IXguaXNQbGFpbk9iamVjdChlKSl7aWYoeXx8LTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGUpKWZvcihwPTA7cDxvLl9mcmFtZXMubGVuZ3RoO3ArKykobT1vLl9mcmFtZXNbcF0pJiYoeXx8U3RyaW5nKG0uZ3JvdXApPT09U3RyaW5nKGUpKSYmZy5wdXNoKHt0eXBlOiJieW5hbWUiLG5hbWU6U3RyaW5nKG0ubmFtZSksZGF0YTpkKHtuYW1lOm0ubmFtZX0pfSk7ZWxzZSBpZihiKWZvcihwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBfPWVbcF07LTEhPT1bIm51bWJlciIsInN0cmluZyJdLmluZGV4T2YodHlwZW9mIF8pPyhfPVN0cmluZyhfKSxnLnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpfLGRhdGE6ZCh7bmFtZTpffSl9KSk6eC5pc1BsYWluT2JqZWN0KF8pJiZnLnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTpkKHguZXh0ZW5kRmxhdCh7fSxfKSl9KX19ZWxzZSBnLnB1c2goe3R5cGU6Im9iamVjdCIsZGF0YTpkKHguZXh0ZW5kRmxhdCh7fSxlKSl9KTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKG09Z1twXSwiYnluYW1lIj09PW0udHlwZSYmIW8uX2ZyYW1lSGFzaFttLmRhdGEubmFtZV0pcmV0dXJuIHgud2FybignYW5pbWF0ZSBmYWlsdXJlOiBmcmFtZSBub3QgZm91bmQ6ICInK20uZGF0YS5uYW1lKyciJyksdm9pZCB1KCk7LTEhPT1bIm5leHQiLCJpbW1lZGlhdGUiXS5pbmRleE9mKHIubW9kZSkmJmZ1bmN0aW9uKCl7aWYoMCE9PW8uX2ZyYW1lUXVldWUubGVuZ3RoKXtmb3IoO28uX2ZyYW1lUXVldWUubGVuZ3RoOyl7dmFyIGU9by5fZnJhbWVRdWV1ZS5wb3AoKTtlLm9uSW50ZXJydXB0JiZlLm9uSW50ZXJydXB0KCl9dC5lbWl0KCJwbG90bHlfYW5pbWF0aW9uaW50ZXJydXB0ZWQiLFtdKX19KCksInJldmVyc2UiPT09ci5kaXJlY3Rpb24mJmcucmV2ZXJzZSgpO3ZhciB3PXQuX2Z1bGxMYXlvdXQuX2N1cnJlbnRGcmFtZTtpZih3JiZyLmZyb21jdXJyZW50KXt2YXIgTT0tMTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKG09Z1twXSwiYnluYW1lIj09PW0udHlwZSYmbS5uYW1lPT09dyl7TT1wO2JyZWFrfWlmKE0+MCYmTTxnLmxlbmd0aC0xKXt2YXIgQT1bXTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKW09Z1twXSwoImJ5bmFtZSIhPT1nW3BdLnR5cGV8fHA+TSkmJkEucHVzaChtKTtnPUF9fWcubGVuZ3RoPjA/ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGM7Yz0iYnluYW1lIj09PWVbc10udHlwZT9rLmNvbXB1dGVGcmFtZSh0LGVbc10ubmFtZSk6ZVtzXS5kYXRhO3ZhciBoPWkocyksZD1uKHMpO2QuZHVyYXRpb249TWF0aC5taW4oZC5kdXJhdGlvbixoLmR1cmF0aW9uKTt2YXIgcD17ZnJhbWU6YyxuYW1lOmVbc10ubmFtZSxmcmFtZU9wdHM6aCx0cmFuc2l0aW9uT3B0czpkfTtzPT09ZS5sZW5ndGgtMSYmKHAub25Db21wbGV0ZT1hKGwsMikscC5vbkludGVycnVwdD11KSxvLl9mcmFtZVF1ZXVlLnB1c2gocCl9ImltbWVkaWF0ZSI9PT1yLm1vZGUmJihvLl9sYXN0RnJhbWVBdD0tMS8wKSxvLl9hbmltYXRpb25SYWZ8fGYoKX19KGcpOih0LmVtaXQoInBsb3RseV9hbmltYXRlZCIpLGwoKSl9KX0sYi5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe3Q9SS5nZXRHcmFwaERpdih0KTt2YXIgbj0wO2lmKG51bGw9PT1lfHx2b2lkIDA9PT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZigheC5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdC5seS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIGksYSxvLHMsbD10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImFkZEZyYW1lcyBmYWlsdXJlOiBmcmFtZUxpc3QgbXVzdCBiZSBhbiBBcnJheSBvZiBmcmFtZSBkZWZpbml0aW9ucyIrZSk7dmFyIGM9bC5sZW5ndGgrMiplLmxlbmd0aCxoPVtdO2ZvcihpPWUubGVuZ3RoLTE7aT49MDtpLS0paWYoeC5pc1BsYWluT2JqZWN0KGVbaV0pKXt2YXIgZj0odVtlW2ldLm5hbWVdfHx7fSkubmFtZSxkPWVbaV0ubmFtZTtmJiZkJiYibnVtYmVyIj09dHlwZW9mIGQmJnVbZl0mJihuKysseC53YXJuKCdhZGRGcmFtZXM6IG92ZXJ3cml0aW5nIGZyYW1lICInK3VbZl0ubmFtZSsnIiB3aXRoIGEgZnJhbWUgd2hvc2UgbmFtZSBvZiB0eXBlICJudW1iZXIiIGFsc28gZXF1YXRlcyB0byAiJytmKyciLiBUaGlzIGlzIHZhbGlkIGJ1dCBtYXkgcG90ZW50aWFsbHkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW9yIHNpbmNlIGFsbCBwbG90bHkuanMgZnJhbWUgbmFtZXMgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHN0cmluZ3MuJyksbj41JiZ4Lndhcm4oImFkZEZyYW1lczogVGhpcyBBUEkgY2FsbCBoYXMgeWllbGRlZCB0b28gbWFueSB3YXJuaW5ncy4gRm9yIHRoZSByZXN0IG9mIHRoaXMgY2FsbCwgZnVydGhlciB3YXJuaW5ncyBhYm91dCBudW1lcmljIGZyYW1lIG5hbWVzIHdpbGwgYmUgc3VwcHJlc3NlZC4iKSksaC5wdXNoKHtmcmFtZTprLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtpXSksaW5kZXg6ciYmdm9pZCAwIT09cltpXSYmbnVsbCE9PXJbaV0/cltpXTpjK2l9KX1oLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbmRleD5lLmluZGV4Py0xOnQuaW5kZXg8ZS5pbmRleD8xOjB9KTt2YXIgcD1bXSxtPVtdLHY9bC5sZW5ndGg7Zm9yKGk9aC5sZW5ndGgtMTtpPj0wO2ktLSl7aWYoYT1oW2ldLmZyYW1lLCJudW1iZXIiPT10eXBlb2YgYS5uYW1lJiZ4Lndhcm4oIldhcm5pbmc6IGFkZEZyYW1lcyBhY2NlcHRzIGZyYW1lcyB3aXRoIG51bWVyaWMgbmFtZXMsIGJ1dCB0aGUgbnVtYmVycyBhcmVpbXBsaWNpdGx5IGNhc3QgdG8gc3RyaW5ncyIpLCFhLm5hbWUpZm9yKDt1W2EubmFtZT0iZnJhbWUgIit0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcisrXTspO2lmKHVbYS5uYW1lXSl7Zm9yKG89MDtvPGwubGVuZ3RoJiYobFtvXXx8e30pLm5hbWUhPT1hLm5hbWU7bysrKTtwLnB1c2goe3R5cGU6InJlcGxhY2UiLGluZGV4Om8sdmFsdWU6YX0pLG0udW5zaGlmdCh7dHlwZToicmVwbGFjZSIsaW5kZXg6byx2YWx1ZTpsW29dfSl9ZWxzZSBzPU1hdGgubWF4KDAsTWF0aC5taW4oaFtpXS5pbmRleCx2KSkscC5wdXNoKHt0eXBlOiJpbnNlcnQiLGluZGV4OnMsdmFsdWU6YX0pLG0udW5zaGlmdCh7dHlwZToiZGVsZXRlIixpbmRleDpzfSksdisrfXZhciBnPWsubW9kaWZ5RnJhbWVzLHk9ay5tb2RpZnlGcmFtZXMsYj1bdCxtXSxfPVt0LHBdO3JldHVybiB3JiZ3LmFkZCh0LGcsYix5LF8pLGsubW9kaWZ5RnJhbWVzKHQscCl9LGIuZGVsZXRlRnJhbWVzPWZ1bmN0aW9uKHQsZSl7aWYodD1JLmdldEdyYXBoRGl2KHQpLCF4LmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTt2YXIgcixuLGk9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxhPVtdLG89W107aWYoIWUpZm9yKGU9W10scj0wO3I8aS5sZW5ndGg7cisrKWUucHVzaChyKTtmb3IoZT1lLnNsaWNlKDApLGUuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxvLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTppW25dfSk7dmFyIHM9ay5tb2RpZnlGcmFtZXMsbD1rLm1vZGlmeUZyYW1lcyx1PVt0LG9dLGM9W3QsYV07cmV0dXJuIHcmJncuYWRkKHQscyx1LGwsYyksay5tb2RpZnlGcmFtZXModCxhKX0sYi5wdXJnZT1mdW5jdGlvbih0KXt0PUkuZ2V0R3JhcGhEaXYodCk7dmFyIGU9dC5fZnVsbExheW91dHx8e30scj10Ll9mdWxsRGF0YXx8W107cmV0dXJuIGsuY2xlYW5QbG90KFtdLHt9LHIsZSksay5wdXJnZSh0KSxfLnB1cmdlKHQpLGUuX2NvbnRhaW5lciYmZS5fY29udGFpbmVyLnJlbW92ZSgpLGRlbGV0ZSB0Ll9jb250ZXh0LGRlbGV0ZSB0Ll9yZXBsb3RQZW5kaW5nLGRlbGV0ZSB0Ll9tb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9sZWdlbmRNb3VzZURvd25UaW1lLGRlbGV0ZSB0Ll9obXBpeGNvdW50LGRlbGV0ZSB0Ll9obWx1bWNvdW50LHR9fSx7Ii4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjMyLCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzA2LCIuLi9saWIiOjcyNCwiLi4vbGliL2V2ZW50cyI6NzE0LCIuLi9saWIvcXVldWUiOjczNiwiLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDMsIi4uL3Bsb3RseSI6NzU5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjc2NywiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6NzY5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjc3MSwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo3NzMsIi4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4uL3Bsb3RzL3BvbGFyIjo4MzAsIi4uL3JlZ2lzdHJ5Ijo4NDIsIi4vZWRpdF90eXBlcyI6NzQ4LCIuL2hlbHBlcnMiOjc0OSwiLi9tYW5hZ2VfYXJyYXlzIjo3NTAsIi4vc3Vicm91dGluZXMiOjc1NixkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjksImhhcy1ob3ZlciI6Mjg2fV0sNzUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxyKXt0cnl7dC5fZnVsbExheW91dC5fcGFwZXIuc3R5bGUoImJhY2tncm91bmQiLHIpfWNhdGNoKHQpe2UuZXhwb3J0cy5sb2dnaW5nPjAmJmNvbnNvbGUuZXJyb3IodCl9fWUuZXhwb3J0cz17c3RhdGljUGxvdDohMSxlZGl0YWJsZTohMSxlZGl0czp7YW5ub3RhdGlvblBvc2l0aW9uOiExLGFubm90YXRpb25UYWlsOiExLGFubm90YXRpb25UZXh0OiExLGF4aXNUaXRsZVRleHQ6ITEsY29sb3JiYXJQb3NpdGlvbjohMSxjb2xvcmJhclRpdGxlVGV4dDohMSxsZWdlbmRQb3NpdGlvbjohMSxsZWdlbmRUZXh0OiExLHNoYXBlUG9zaXRpb246ITEsdGl0bGVUZXh0OiExfSxhdXRvc2l6YWJsZTohMSxxdWV1ZUxlbmd0aDowLGZpbGxGcmFtZTohMSxmcmFtZU1hcmdpbnM6MCxzY3JvbGxab29tOiExLGRvdWJsZUNsaWNrOiJyZXNldCthdXRvc2l6ZSIsc2hvd1RpcHM6ITAsc2hvd0F4aXNEcmFnSGFuZGxlczohMCxzaG93QXhpc1JhbmdlRW50cnlCb3hlczohMCxzaG93TGluazohMSxzZW5kRGF0YTohMCxsaW5rVGV4dDoiRWRpdCBjaGFydCIsc2hvd1NvdXJjZXM6ITEsZGlzcGxheU1vZGVCYXI6ImhvdmVyIixtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOltdLG1vZGVCYXJCdXR0b25zVG9BZGQ6W10sbW9kZUJhckJ1dHRvbnM6ITEsZGlzcGxheWxvZ286ITAscGxvdEdsUGl4ZWxSYXRpbzoyLHNldEJhY2tncm91bmQ6bix0b3BvanNvblVSTDoiaHR0cHM6Ly9jZG4ucGxvdC5seS8iLG1hcGJveEFjY2Vzc1Rva2VuOm51bGwsbG9nZ2luZzohMSxnbG9iYWxUcmFuc2Zvcm1zOltdfX0se31dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlLHI7ImFyZWEiPT09dD8oZT17YXR0cmlidXRlczpifSxyPXt9KTooZT1kLm1vZHVsZXNbdF0uX21vZHVsZSxyPWUuYmFzZVBsb3RNb2R1bGUpO3ZhciBuPXt9O24udHlwZT1udWxsLE0obixtKSxNKG4sZS5hdHRyaWJ1dGVzKSxyLmF0dHJpYnV0ZXMmJk0obixyLmF0dHJpYnV0ZXMpLE9iamVjdC5rZXlzKGQuY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWQuY29tcG9uZW50c1JlZ2lzdHJ5W2VdO3Iuc2NoZW1hJiZyLnNjaGVtYS50cmFjZXMmJnIuc2NoZW1hLnRyYWNlc1t0XSYmT2JqZWN0LmtleXMoci5zY2hlbWEudHJhY2VzW3RdKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2YobixyLnNjaGVtYS50cmFjZXNbdF1bZV0sZSl9KX0pLG4udHlwZT10O3ZhciBpPXttZXRhOmUubWV0YXx8e30sYXR0cmlidXRlczpzKG4pfTtpZihlLmxheW91dEF0dHJpYnV0ZXMpe3ZhciBhPXt9O00oYSxlLmxheW91dEF0dHJpYnV0ZXMpLGkubGF5b3V0QXR0cmlidXRlcz1zKGEpfXJldHVybiBpfWZ1bmN0aW9uIGkoKXt2YXIgdD17fTtyZXR1cm4gTSh0LHYpLE9iamVjdC5rZXlzKGQuc3VicGxvdHNSZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1kLnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoci5sYXlvdXRBdHRyaWJ1dGVzKWlmKCJjYXJ0ZXNpYW4iPT09ci5uYW1lKWgodCxyLCJ4YXhpcyIpLGgodCxyLCJ5YXhpcyIpO2Vsc2V7dmFyIG49InN1YnBsb3QiPT09ci5hdHRyP3IubmFtZTpyLmF0dHI7aCh0LHIsbil9fSksdD1jKHQpLE9iamVjdC5rZXlzKGQuY29tcG9uZW50c1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWQuY29tcG9uZW50c1JlZ2lzdHJ5W2VdO3IubGF5b3V0QXR0cmlidXRlcyYmKHIuc2NoZW1hJiZyLnNjaGVtYS5sYXlvdXQ/T2JqZWN0LmtleXMoci5zY2hlbWEubGF5b3V0KS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2YodCxyLnNjaGVtYS5sYXlvdXRbZV0sZSl9KTpmKHQsci5sYXlvdXRBdHRyaWJ1dGVzLHIubmFtZSkpfSkse2xheW91dEF0dHJpYnV0ZXM6cyh0KX19ZnVuY3Rpb24gYSh0KXt2YXIgZT1kLnRyYW5zZm9ybXNSZWdpc3RyeVt0XSxyPU0oe30sZS5hdHRyaWJ1dGVzKTtyZXR1cm4gT2JqZWN0LmtleXMoZC5jb21wb25lbnRzUmVnaXN0cnkpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49ZC5jb21wb25lbnRzUmVnaXN0cnlbZV07bi5zY2hlbWEmJm4uc2NoZW1hLnRyYW5zZm9ybXMmJm4uc2NoZW1hLnRyYW5zZm9ybXNbdF0mJk9iamVjdC5rZXlzKG4uc2NoZW1hLnRyYW5zZm9ybXNbdF0pLmZvckVhY2goZnVuY3Rpb24oZSl7ZihyLG4uc2NoZW1hLnRyYW5zZm9ybXNbdF1bZV0sZSl9KX0pLHthdHRyaWJ1dGVzOnMocil9fWZ1bmN0aW9uIG8oKXt2YXIgdD17ZnJhbWVzOnAuZXh0ZW5kRGVlcCh7fSxnKX07cmV0dXJuIHModCksdC5mcmFtZXN9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbCh0KSx1KHQpLHR9ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBlKHQpe3JldHVybnt2YWxUeXBlOiJzdHJpbmcifX1mdW5jdGlvbiBuKHQsbixpKXtyLmlzVmFsT2JqZWN0KHQpPyJkYXRhX2FycmF5Ij09PXQudmFsVHlwZT8odC5yb2xlPSJkYXRhIixpW24rInNyYyJdPWUobikpOiEwPT09dC5hcnJheU9rJiYoaVtuKyJzcmMiXT1lKG4pKTpwLmlzUGxhaW5PYmplY3QodCkmJih0LnJvbGU9Im9iamVjdCIpfXIuY3Jhd2wodCxuKX1mdW5jdGlvbiB1KHQpe2Z1bmN0aW9uIGUodCxlLHIpe2lmKHQpe3ZhciBuPXRbQV07biYmKGRlbGV0ZSB0W0FdLHJbZV09e2l0ZW1zOnt9fSxyW2VdLml0ZW1zW25dPXQscltlXS5yb2xlPSJvYmplY3QiKX19ci5jcmF3bCh0LGUpfWZ1bmN0aW9uIGModCl7cmV0dXJuIHcodCx7cmFkaWFsYXhpczp4LnJhZGlhbGF4aXMsYW5ndWxhcmF4aXM6eC5hbmd1bGFyYXhpc30pLHcodCx4LmxheW91dCksdH1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj1wLm5lc3RlZFByb3BlcnR5KHQsciksaT1NKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7aVtrXT0hMCxuLnNldChpKX1mdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj1wLm5lc3RlZFByb3BlcnR5KHQscik7bi5zZXQoTShuLmdldCgpfHx7fSxlKSl9dmFyIGQ9dCgiLi4vcmVnaXN0cnkiKSxwPXQoIi4uL2xpYiIpLG09dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLHY9dCgiLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxnPXQoIi4uL3Bsb3RzL2ZyYW1lX2F0dHJpYnV0ZXMiKSx5PXQoIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksYj10KCIuLi9wbG90cy9wb2xhci9hcmVhX2F0dHJpYnV0ZXMiKSx4PXQoIi4uL3Bsb3RzL3BvbGFyL2F4aXNfYXR0cmlidXRlcyIpLF89dCgiLi9lZGl0X3R5cGVzIiksdz1wLmV4dGVuZEZsYXQsTT1wLmV4dGVuZERlZXAsaz0iX2lzU3VicGxvdE9iaiIsQT0iX2lzTGlua2VkVG9BcnJheSIsVD1bayxBLCJfYXJyYXlBdHRyUmVnZXhwcyIsIl9kZXByZWNhdGVkIl07ci5JU19TVUJQTE9UX09CSj1rLHIuSVNfTElOS0VEX1RPX0FSUkFZPUEsci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPVQsci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtkLmFsbFR5cGVzLmNvbmNhdCgiYXJlYSIpLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1uKGUpfSk7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKGQudHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09YSh0KX0pLHtkZWZzOnt2YWxPYmplY3RzOnAudmFsT2JqZWN0cyxtZXRhS2V5czpULmNvbmNhdChbImRlc2NyaXB0aW9uIiwicm9sZSJdKSxlZGl0VHlwZXM6e3RyYWNlczpfLnRyYWNlcygpLGxheW91dDpfLmxheW91dCgpfX0sdHJhY2VzOnQsbGF5b3V0OmkoKSx0cmFuc2Zvcm1zOmUsZnJhbWVzOm8oKSxhbmltYXRpb246cyh5KX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW58fDA7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgYT10W25dOy0xPT09VC5pbmRleE9mKG4pJiYoZShhLG4sdCxpKSxyLmlzVmFsT2JqZWN0KGEpfHxwLmlzUGxhaW5PYmplY3QoYSkmJnIuY3Jhd2woYSxlLGkrMSkpfSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG8scyl7aWYoYT1hLnNsaWNlKDAscykuY29uY2F0KFtyXSksZSYmKCJkYXRhX2FycmF5Ij09PWUudmFsVHlwZXx8ITA9PT1lLmFycmF5T2spJiYhKCJjb2xvcmJhciI9PT1hW3MtMV0mJigidGlja3RleHQiPT09cnx8InRpY2t2YWxzIj09PXIpKSl7dmFyIGw9bihhKSx1PXAubmVzdGVkUHJvcGVydHkodCxsKS5nZXQoKTtBcnJheS5pc0FycmF5KHUpJiZpLnB1c2gobCl9fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQuam9pbigiLiIpfXZhciBpPVtdLGE9W107aWYoci5jcmF3bChtLGUpLHQuX21vZHVsZSYmdC5fbW9kdWxlLmF0dHJpYnV0ZXMmJnIuY3Jhd2wodC5fbW9kdWxlLmF0dHJpYnV0ZXMsZSksdC50cmFuc2Zvcm1zKWZvcih2YXIgbz10LnRyYW5zZm9ybXMscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdLHU9bC5fbW9kdWxlO3UmJihhPVsidHJhbnNmb3Jtc1siK3MrIl0iXSxyLmNyYXdsKHUuYXR0cmlidXRlcyxlLDEpKX1yZXR1cm4gdC5fZnVsbElucHV0JiZ0Ll9mdWxsSW5wdXQuX21vZHVsZSYmdC5fZnVsbElucHV0Ll9tb2R1bGUuYXR0cmlidXRlcyYmKHIuY3Jhd2wodC5fZnVsbElucHV0Ll9tb2R1bGUuYXR0cmlidXRlcyxlKSxpPXAuZmlsdGVyVW5pcXVlKGkpKSxpfX0seyIuLi9saWIiOjcyNCwiLi4vcGxvdHMvYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjc2MCwiLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIjo3ODksIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4MTgsIi4uL3Bsb3RzL3BvbGFyL2FyZWFfYXR0cmlidXRlcyI6ODI4LCIuLi9wbG90cy9wb2xhci9heGlzX2F0dHJpYnV0ZXMiOjgyOSwiLi4vcmVnaXN0cnkiOjg0MiwiLi9lZGl0X3R5cGVzIjo3NDh9XSw3NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtvLnJlZ2lzdGVyKHQsdC5uYW1lLHQuY2F0ZWdvcmllcyx0Lm1ldGEpLG8uc3VicGxvdHNSZWdpc3RyeVt0LmJhc2VQbG90TW9kdWxlLm5hbWVdfHxvLnJlZ2lzdGVyU3VicGxvdCh0LmJhc2VQbG90TW9kdWxlKX1mdW5jdGlvbiBpKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVHJhbnNmb3JtIG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT0iVHJhbnNmb3JtIG1vZHVsZSAiK3QubmFtZSxyPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSxuPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIXImJiFuKXRocm93IG5ldyBFcnJvcihlKyIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuIik7ciYmbiYmcy5sb2coW2UrIiBoYXMgYm90aCBhICp0cmFuc2Zvcm0qIGFuZCAqY2FsY1RyYW5zZm9ybSogbWV0aG9kcy4iLCJQbGVhc2Ugbm90ZSB0aGF0IGFsbCAqdHJhbnNmb3JtKiBtZXRob2RzIGFyZSBleGVjdXRlZCIsImJlZm9yZSBhbGwgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIl0uam9pbigiICIpKSxzLmlzUGxhaW5PYmplY3QodC5hdHRyaWJ1dGVzKXx8cy5sb2coZSsiIHJlZ2lzdGVyZWQgd2l0aG91dCBhbiAqYXR0cmlidXRlcyogb2JqZWN0LiIpLCJmdW5jdGlvbiIhPXR5cGVvZiB0LnN1cHBseURlZmF1bHRzJiZzLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGEgKnN1cHBseURlZmF1bHRzKiBtZXRob2QuIiksby50cmFuc2Zvcm1zUmVnaXN0cnlbdC5uYW1lXT10fWZ1bmN0aW9uIGEodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb21wb25lbnQgbW9kdWxlICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiIpO28ucmVnaXN0ZXJDb21wb25lbnQodCl9dmFyIG89dCgiLi4vcmVnaXN0cnkiKSxzPXQoIi4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIk5vIGFyZ3VtZW50IHBhc3NlZCB0byBQbG90bHkucmVnaXN0ZXIuIik7dCYmIUFycmF5LmlzQXJyYXkodCkmJih0PVt0XSk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV07aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIik7c3dpdGNoKHIubW9kdWxlVHlwZSl7Y2FzZSJ0cmFjZSI6bihyKTticmVhaztjYXNlInRyYW5zZm9ybSI6aShyKTticmVhaztjYXNlImNvbXBvbmVudCI6YShyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBtb2R1bGUgd2FzIGF0dGVtcHRlZCB0byBiZSByZWdpc3RlcmVkISIpfX19fSx7Ii4uL2xpYiI6NzI0LCIuLi9yZWdpc3RyeSI6ODQyfV0sNzU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RseSIpLGk9dCgiLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpLmV4dGVuZEZsYXQobi5kZWZhdWx0Q29uZmlnLHQpfX0seyIuLi9saWIiOjcyNCwiLi4vcGxvdGx5Ijo3NTl9XSw3NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl1bMF0sYT1yW25dWzFdO2lmKCEoaVswXT49dFsxXXx8aVsxXTw9dFswXSkmJihhWzBdPGVbMV0mJmFbMV0+ZVswXSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHQuX2FuY2hvckF4aXM9PT1lJiYodC5taXJyb3J8fHQuc2lkZT09PXIpfHwiYWxsIj09PXQubWlycm9yfHwiYWxsdGlja3MiPT09dC5taXJyb3J8fHQubWlycm9ycyYmdC5taXJyb3JzW2UuX2lkK3JdfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPVtdLGk9ZS5fYW5jaG9yQXhpcztpZihpKXt2YXIgYT1pLl9tYWluQXhpcztpZigtMT09PW4uaW5kZXhPZihhKSl7bi5wdXNoKGEpO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXJbb10ub3ZlcmxheWluZz09PWEuX2lkJiYtMT09PW4uaW5kZXhPZihyW29dKSYmbi5wdXNoKHJbb10pfX1yZXR1cm4gbn1mdW5jdGlvbiBvKHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEuX2FuY2hvckF4aXM7aWYobyYmaShhLG8scikpcmV0dXJuIHAuY3Jpc3BSb3VuZCh0LGEubGluZXdpZHRoKX19ZnVuY3Rpb24gcyh0LGUscixuLGkscyl7aWYobilyZXR1cm4gcjt2YXIgbCx1PWUuX21haW5BeGlzLGM9YSh0LHUscyksaD1vKHQsYyxpKTtpZihoKXJldHVybiBoO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspaWYoc1tsXS5vdmVybGF5aW5nPT09dS5faWQmJihjPWEodCxzW2xdLHMpLGg9byh0LGMsaSkpKXJldHVybiBoO3JldHVybiAwfXZhciBsPXQoImQzIiksdT10KCIuLi9wbG90bHkiKSxjPXQoIi4uL3JlZ2lzdHJ5IiksaD10KCIuLi9wbG90cy9wbG90cyIpLGY9dCgiLi4vbGliIiksZD10KCIuLi9jb21wb25lbnRzL2NvbG9yIikscD10KCIuLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uL2NvbXBvbmVudHMvdGl0bGVzIiksdj10KCIuLi9jb21wb25lbnRzL21vZGViYXIiKSxnPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCIpLHk9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpO3IubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBmLnN5bmNPckFzeW5jKFtoLmRvQXV0b01hcmdpbixyLmxzSW5uZXJdLHQpfSxyLmxzSW5uZXI9ZnVuY3Rpb24odCl7dmFyIGUsYT10Ll9mdWxsTGF5b3V0LG89YS5fc2l6ZSxjPW8ucCxoPXUuQXhlcy5saXN0KHQpLGY9YS5faGFzKCJjYXJ0ZXNpYW4iKTtmb3IoZT0wO2U8aC5sZW5ndGg7ZSsrKWhbZV0uX2xpbmVwb3NpdGlvbnM9e307YS5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOmEud2lkdGgrInB4IixoZWlnaHQ6YS5oZWlnaHQrInB4In0pLnNlbGVjdEFsbCgiLm1haW4tc3ZnIikuY2FsbChwLnNldFNpemUsYS53aWR0aCxhLmhlaWdodCksdC5fY29udGV4dC5zZXRCYWNrZ3JvdW5kKHQsYS5wYXBlcl9iZ2NvbG9yKTt2YXIgbT1hLl9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLGc9W10sYj1bXTttLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9YS5fcGxvdHNbdF07aWYoZS5tYWlucGxvdClyZXR1cm4gZS5iZyYmZS5iZy5yZW1vdmUoKSx2b2lkKGUuYmc9dm9pZCAwKTt2YXIgcj1lLnhheGlzLmRvbWFpbixpPWUueWF4aXMuZG9tYWluLG89W107bihyLGksYik/bz1bMF06KGcucHVzaCh0KSxiLnB1c2goW3IsaV0pKTt2YXIgcz1lLnBsb3Rncm91cC5zZWxlY3RBbGwoIi5iZyIpLmRhdGEobyk7cy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImJnIiwhMCkscy5leGl0KCkucmVtb3ZlKCkscy5lYWNoKGZ1bmN0aW9uKCl7ZS5iZz1zO3ZhciB0PWUucGxvdGdyb3VwLm5vZGUoKTt0Lmluc2VydEJlZm9yZSh0aGlzLHQuY2hpbGROb2Rlc1swXSl9KX0pO3ZhciB4PWEuX2JnTGF5ZXIuc2VsZWN0QWxsKCIuYmciKS5kYXRhKGcpO3guZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLHguZXhpdCgpLnJlbW92ZSgpLHguZWFjaChmdW5jdGlvbih0KXthLl9wbG90c1t0XS5iZz1sLnNlbGVjdCh0aGlzKX0pO3ZhciBfPXt9O3JldHVybiBtLmVhY2goZnVuY3Rpb24ocil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBlPyJNIitQKyIsIit0KyJIIitSOiIifWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gZT8iTSIrdCsiLCIrSCsiViIrVToiIn12YXIgdT1hLl9wbG90c1tyXSxtPXUueGF4aXMsdj11LnlheGlzO20uc2V0U2NhbGUoKSx2LnNldFNjYWxlKCksdS5iZyYmZiYmdS5iZy5jYWxsKHAuc2V0UmVjdCxtLl9vZmZzZXQtYyx2Ll9vZmZzZXQtYyxtLl9sZW5ndGgrMipjLHYuX2xlbmd0aCsyKmMpLmNhbGwoZC5maWxsLGEucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKSx1LmNsaXBJZD0iY2xpcCIrYS5fdWlkK3IrInBsb3QiO3ZhciBnPWEuX2RlZnMuc2VsZWN0QWxsKCJnLmNsaXBzIikuc2VsZWN0QWxsKCIjIit1LmNsaXBJZCkuZGF0YShbMF0pO2cuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cih7Y2xhc3M6InBsb3RjbGlwIixpZDp1LmNsaXBJZH0pLmFwcGVuZCgicmVjdCIpLGcuc2VsZWN0QWxsKCJyZWN0IikuYXR0cih7d2lkdGg6bS5fbGVuZ3RoLGhlaWdodDp2Ll9sZW5ndGh9KSxwLnNldFRyYW5zbGF0ZSh1LnBsb3QsbS5fb2Zmc2V0LHYuX29mZnNldCk7dmFyIGIseDtmb3IodS5faGFzQ2xpcE9uQXhpc0ZhbHNlPyhiPW51bGwseD11LmNsaXBJZCk6KGI9dS5jbGlwSWQseD1udWxsKSxwLnNldENsaXBVcmwodS5wbG90LGIpLGU9MDtlPHkudHJhY2VMYXllckNsYXNzZXMubGVuZ3RoO2UrKyl7dmFyIHc9eS50cmFjZUxheWVyQ2xhc3Nlc1tlXTsic2NhdHRlcmxheWVyIiE9PXcmJnUucGxvdC5zZWxlY3RBbGwoImcuIit3KS5jYWxsKHAuc2V0Q2xpcFVybCx4KX11LmxheWVyQ2xpcElkPXg7dmFyIE09IW0uX2FuY2hvckF4aXMsaz1NJiYhX1ttLl9pZF0sQT1pKG0sdiwiYm90dG9tIiksVD1pKG0sdiwidG9wIiksUz0hdi5fYW5jaG9yQXhpcyxFPVMmJiFfW3YuX2lkXSxMPWkodixtLCJsZWZ0IiksQz1pKHYsbSwicmlnaHQiKSx6PXAuY3Jpc3BSb3VuZCh0LG0ubGluZXdpZHRoLDEpLEk9cC5jcmlzcFJvdW5kKHQsdi5saW5ld2lkdGgsMSksRD1zKHQsbSxJLEwsImxlZnQiLGgpLFA9IU0mJkQ/LWMtRDowLE89cyh0LG0sSSxDLCJyaWdodCIsaCksUj1tLl9sZW5ndGgrKCFNJiZPP2MrTzowKSxGPW8uaCooMS0obS5wb3NpdGlvbnx8MCkpK3ovMiUxLGo9di5fbGVuZ3RoK2Mrei8yLE49LWMtei8yLEI9IVMmJnModCx2LHosQSwiYm90dG9tIixoKSxVPXYuX2xlbmd0aCsoQj9jOjApLFY9IVMmJnModCx2LHosVCwidG9wIixoKSxIPVY/LWM6MCxxPW8udyoodi5wb3NpdGlvbnx8MCkrSS8yJTEsRz0tYy1JLzIsWT1tLl9sZW5ndGgrYytJLzI7bS5fbGluZXBvc2l0aW9uc1tyXT1bQT9qOnZvaWQgMCxUP046dm9pZCAwLGs/Rjp2b2lkIDBdLG0uX2FuY2hvckF4aXM9PT12P20uX2xpbmVwb3NpdGlvbnNbcl1bM109InRvcCI9PT1tLnNpZGU/TjpqOmsmJihtLl9saW5lcG9zaXRpb25zW3JdWzNdPUYpLHYuX2xpbmVwb3NpdGlvbnNbcl09W0w/Rzp2b2lkIDAsQz9ZOnZvaWQgMCxFP3E6dm9pZCAwXSx2Ll9hbmNob3JBeGlzPT09bT92Ll9saW5lcG9zaXRpb25zW3JdWzNdPSJyaWdodCI9PT12LnNpZGU/WTpHOkUmJih2Ll9saW5lcG9zaXRpb25zW3JdWzNdPXEpO3ZhciBYPSJ0cmFuc2xhdGUoIittLl9vZmZzZXQrIiwiK3YuX29mZnNldCsiKSIsVz1YLFo9WDtrJiYoVz0idHJhbnNsYXRlKCIrbS5fb2Zmc2V0KyIsIitvLnQrIikiLE4rPXYuX29mZnNldC1vLnQsais9di5fb2Zmc2V0LW8udCksRSYmKFo9InRyYW5zbGF0ZSgiK28ubCsiLCIrdi5fb2Zmc2V0KyIpIixHKz1tLl9vZmZzZXQtby5sLFkrPW0uX29mZnNldC1vLmwpLGYmJih1LnhsaW5lcy5hdHRyKCJ0cmFuc2Zvcm0iLFcpLmF0dHIoImQiLG4oaixBKStuKE4sVCkrbihGLGspfHwiTTAsMCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHorInB4IikuY2FsbChkLnN0cm9rZSxtLnNob3dsaW5lP20ubGluZWNvbG9yOiJyZ2JhKDAsMCwwLDApIiksdS55bGluZXMuYXR0cigidHJhbnNmb3JtIixaKS5hdHRyKCJkIixsKEcsTCkrbChZLEMpK2wocSxFKXx8Ik0wLDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixJKyJweCIpLmNhbGwoZC5zdHJva2Usdi5zaG93bGluZT92LmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSx1LnhheGlzbGF5ZXIuYXR0cigidHJhbnNmb3JtIixXKSx1LnlheGlzbGF5ZXIuYXR0cigidHJhbnNmb3JtIixaKSx1LmdyaWRsYXllci5hdHRyKCJ0cmFuc2Zvcm0iLFgpLHUuemVyb2xpbmVsYXllci5hdHRyKCJ0cmFuc2Zvcm0iLFgpLHUuZHJhZ2xheWVyLmF0dHIoInRyYW5zZm9ybSIsWCksayYmKF9bbS5faWRdPTEpLEUmJihfW3YuX2lkXT0xKX0pLHUuQXhlcy5tYWtlQ2xpcFBhdGhzKHQpLHIuZHJhd01haW5UaXRsZSh0KSx2Lm1hbmFnZSh0KSx0Ll9wcm9taXNlcy5sZW5ndGgmJlByb21pc2UuYWxsKHQuX3Byb21pc2VzKX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7bS5kcmF3KHQsImd0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZToidGl0bGUiLGRmbHROYW1lOiJQbG90IixhdHRyaWJ1dGVzOnt4OmUud2lkdGgvMix5OmUuX3NpemUudC8yLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5jYWxjZGF0YS5sZW5ndGg7ZSsrKXt2YXIgcj10LmNhbGNkYXRhW2VdLG49KChyWzBdfHx7fSkudHJhY2V8fHt9KS5fbW9kdWxlfHx7fSxpPW4uYXJyYXlzVG9DYWxjZGF0YTtpJiZpKHIsclswXS50cmFjZSl9cmV0dXJuIGguc3R5bGUodCksYy5nZXRDb21wb25lbnRNZXRob2QoImxlZ2VuZCIsImRyYXciKSh0KSxoLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Db2xvckJhcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0LmNhbGNkYXRhLmxlbmd0aDtlKyspe3ZhciByPXQuY2FsY2RhdGFbZV1bMF07aWYoKHIudHx8e30pLmNiKXt2YXIgbj1yLnRyYWNlLGk9ci50LmNiO2MudHJhY2VJcyhuLCJjb250b3VyIikmJmkubGluZSh7d2lkdGg6ITEhPT1uLmNvbnRvdXJzLnNob3dsaW5lcz9uLmxpbmUud2lkdGg6MCxkYXNoOm4ubGluZS5kYXNoLGNvbG9yOiJsaW5lIj09PW4uY29udG91cnMuY29sb3Jpbmc/aS5fb3B0cy5saW5lLmNvbG9yOm4ubGluZS5jb2xvcn0pLGMudHJhY2VJcyhuLCJtYXJrZXJDb2xvcnNjYWxlIik/aS5vcHRpb25zKG4ubWFya2VyLmNvbG9yYmFyKSgpOmkub3B0aW9ucyhuLmNvbG9yYmFyKSgpfX1yZXR1cm4gaC5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmxheW91dFJlcGxvdD1mdW5jdGlvbih0KXt2YXIgZT10LmxheW91dDtyZXR1cm4gdC5sYXlvdXQ9dm9pZCAwLHUucGxvdCh0LCIiLGUpfSxyLmRvTGVnZW5kPWZ1bmN0aW9uKHQpe3JldHVybiBjLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGgucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb1RpY2tzUmVsYXlvdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUuQXhlcy5kb1RpY2tzKHQsInJlZHJhdyIpLHIuZHJhd01haW5UaXRsZSh0KSxoLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9Nb2RlQmFyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQuX2Z1bGxMYXlvdXQ7Zm9yKHYubWFuYWdlKHQpLGcodCksZT1oLmdldFN1YnBsb3RJZHMoaSwiZ2wzZCIpLG49MDtuPGUubGVuZ3RoO24rKylyPWlbZVtuXV0uX3NjZW5lLHIudXBkYXRlRngoaS5kcmFnbW9kZSxpLmhvdmVybW9kZSk7Zm9yKGU9aC5nZXRTdWJwbG90SWRzKGksImdsMmQiKSxuPTA7bjxlLmxlbmd0aDtuKyspcj1pLl9wbG90c1tlW25dXS5fc2NlbmUyZCxyLnVwZGF0ZUZ4KGkuZHJhZ21vZGUpO2ZvcihlPWguZ2V0U3VicGxvdElkcyhpLCJtYXBib3giKSxuPTA7bjxlLmxlbmd0aDtuKyspcj1pW2Vbbl1dLl9zdWJwbG90LHIudXBkYXRlRngoaSk7cmV0dXJuIGgucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NhbWVyYT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWguZ2V0U3VicGxvdElkcyhlLCJnbDNkIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3NjZW5lLnNldENhbWVyYShpLmNhbWVyYSl9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi9jb21wb25lbnRzL21vZGViYXIiOjY2MiwiLi4vY29tcG9uZW50cy90aXRsZXMiOjY5MSwiLi4vbGliIjo3MjQsIi4uL3Bsb3RseSI6NzU5LCIuLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo3NjksIi4uL3Bsb3RzL2NhcnRlc2lhbi9ncmFwaF9pbnRlcmFjdCI6NzczLCIuLi9wbG90cy9wbG90cyI6ODI3LCIuLi9yZWdpc3RyeSI6ODQyLGQzOjEyMH1dLDc1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7ZnVuY3Rpb24gaCgpe3ZhciB0PXMuZ2V0RGVsYXkocC5fZnVsbExheW91dCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PXUocCksaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpLmlkPW8ucmFuZHN0cigpLGMoe2Zvcm1hdDplLmZvcm1hdCx3aWR0aDpwLl9mdWxsTGF5b3V0LndpZHRoLGhlaWdodDpwLl9mdWxsTGF5b3V0LmhlaWdodCxjYW52YXM6aSxzdmc6dCxwcm9taXNlOiEwfSkudGhlbihmdW5jdGlvbih0KXtwJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHApLHIodCl9KS5jYXRjaChmdW5jdGlvbih0KXtuKHQpfSl9LHQpfSl9ZT1lfHx7fSxlLmZvcm1hdD1lLmZvcm1hdHx8InBuZyI7dmFyIGY9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fG51bGw9PT10fHwhIShpKHQpJiZ0PjEpfTtmKGUud2lkdGgpJiZmKGUuaGVpZ2h0KXx8bihuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKSk7dmFyIGQ9bCh0LHtmb3JtYXQ6InBuZyIsaGVpZ2h0OmUuaGVpZ2h0LHdpZHRoOmUud2lkdGh9KSxwPWQuZ2Q7cC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHAuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwKTt2YXIgbT1zLmdldFJlZHJhd0Z1bmMocCk7YS5wbG90KHAsZC5kYXRhLGQubGF5b3V0LGQuY29uZmlnKS50aGVuKG0pLnRoZW4oaCkudGhlbihmdW5jdGlvbih0KXtyKHQpfSkuY2F0Y2goZnVuY3Rpb24odCl7bih0KX0pfSl9dmFyIGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL3Bsb3RseSIpLG89dCgiLi4vbGliIikscz10KCIuLi9zbmFwc2hvdC9oZWxwZXJzIiksbD10KCIuLi9zbmFwc2hvdC9jbG9uZXBsb3QiKSx1PXQoIi4uL3NuYXBzaG90L3Rvc3ZnIiksYz10KCIuLi9zbmFwc2hvdC9zdmd0b2ltZyIpO2UuZXhwb3J0cz1ufSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90bHkiOjc1OSwiLi4vc25hcHNob3QvY2xvbmVwbG90Ijo4NDMsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjg0NiwiLi4vc25hcHNob3Qvc3ZndG9pbWciOjg0OCwiLi4vc25hcHNob3QvdG9zdmciOjg1MCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDc1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLGksYSx1KXt1PXV8fFtdO2Zvcih2YXIgYz1PYmplY3Qua2V5cyh0KSxmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBkPWNbZl07aWYoInRyYW5zZm9ybXMiIT09ZCl7dmFyIHY9dS5zbGljZSgpO3YucHVzaChkKTt2YXIgZz10W2RdLHk9ZVtkXSxiPWwocixkKSx4PSJpbmZvX2FycmF5Ij09PShifHx7fSkudmFsVHlwZSxfPSJjb2xvcnNjYWxlIj09PShifHx7fSkudmFsVHlwZTtpZihzKHIsZCkpaWYocChnKSYmcCh5KSluKGcseSxiLGksYSx2KTtlbHNlIGlmKGIuaXRlbXMmJiF4JiZtKGcpKXt2YXIgdyxNLGs9Yi5pdGVtcyxBPWtbT2JqZWN0LmtleXMoaylbMF1dLFQ9W107Zm9yKHc9MDt3PHkubGVuZ3RoO3crKyl7dmFyIFM9eVt3XS5faW5kZXh8fHc7TT12LnNsaWNlKCksTS5wdXNoKFMpLHAoZ1tTXSkmJnAoeVt3XSkmJihULnB1c2goUyksbihnW1NdLHlbd10sQSxpLGEsTSkpfWZvcih3PTA7dzxnLmxlbmd0aDt3KyspTT12LnNsaWNlKCksTS5wdXNoKHcpLHAoZ1t3XSk/LTE9PT1ULmluZGV4T2YodykmJmkucHVzaChvKCJ1bnVzZWQiLGEsTSkpOmkucHVzaChvKCJvYmplY3QiLGEsTSxnW3ddKSl9ZWxzZSFwKGcpJiZwKHkpP2kucHVzaChvKCJvYmplY3QiLGEsdixnKSk6bShnKXx8IW0oeSl8fHh8fF8/ZCBpbiBlP2gudmFsaWRhdGUoZyxiKT8iZW51bWVyYXRlZCI9PT1iLnZhbFR5cGUmJihiLmNvZXJjZU51bWJlciYmZyE9PSt5fHxnIT09eSkmJmkucHVzaChvKCJkeW5hbWljIixhLHYsZyx5KSk6aS5wdXNoKG8oInZhbHVlIixhLHYsZykpOmkucHVzaChvKCJ1bnVzZWQiLGEsdixnKSk6aS5wdXNoKG8oImFycmF5IixhLHYsZykpO2Vsc2UgaS5wdXNoKG8oInNjaGVtYSIsYSx2KSl9fXJldHVybiBpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXS50eXBlLGk9dC50cmFjZXNbbl0ubGF5b3V0QXR0cmlidXRlcztpJiZoLmV4dGVuZEZsYXQodC5sYXlvdXQubGF5b3V0QXR0cmlidXRlcyxpKX1yZXR1cm4gdC5sYXlvdXQubGF5b3V0QXR0cmlidXRlc31mdW5jdGlvbiBhKHQpe3JldHVybiBtKHQpPyJJbiBkYXRhIHRyYWNlICIrdFsxXSsiLCAiOiJJbiAiK3QrIiwgIn1mdW5jdGlvbiBvKHQsZSxyLG4saSl7cj1yfHwiIjt2YXIgYSxvO20oZSk/KGE9ZVswXSxvPWVbMV0pOihhPWUsbz1udWxsKTt2YXIgcz1jKHIpLGw9dlt0XShlLHMsbixpKTtyZXR1cm4gaC5sb2cobCkse2NvZGU6dCxjb250YWluZXI6YSx0cmFjZTpvLHBhdGg6cixhc3RyOnMsbXNnOmx9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj11KGUpLG49ci5rZXlNaW51c0lkLGk9ci5pZDtyZXR1cm4hIShuIGluIHQmJnRbbl0uX2lzU3VicGxvdE9iaiYmaSl8fGUgaW4gdH1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHRbdShlKS5rZXlNaW51c0lkXX1mdW5jdGlvbiB1KHQpe3ZhciBlPS8oWzItOV18WzEtOV1bMC05XSspJC8scj10LnNwbGl0KGUpWzBdO3JldHVybntrZXlNaW51c0lkOnIsaWQ6dC5zdWJzdHIoci5sZW5ndGgsdC5sZW5ndGgpfX1mdW5jdGlvbiBjKHQpe2lmKCFtKHQpKXJldHVybiBTdHJpbmcodCk7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTsibnVtYmVyIj09dHlwZW9mIG4/ZT1lLnN1YnN0cigwLGUubGVuZ3RoLTEpKyJbIituKyJdIjplKz1uLHI8dC5sZW5ndGgtMSYmKGUrPSIuIil9cmV0dXJuIGV9dmFyIGg9dCgiLi4vbGliIiksZj10KCIuLi9wbG90cy9wbG90cyIpLGQ9dCgiLi9wbG90X3NjaGVtYSIpLHA9aC5pc1BsYWluT2JqZWN0LG09QXJyYXkuaXNBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLHM9ZC5nZXQoKSxsPVtdLHU9e307bSh0KT8odS5kYXRhPWguZXh0ZW5kRGVlcChbXSx0KSxyPXQpOih1LmRhdGE9W10scj1bXSxsLnB1c2gobygiYXJyYXkiLCJkYXRhIikpKSxwKGUpPyh1LmxheW91dD1oLmV4dGVuZERlZXAoe30sZSksYT1lKToodS5sYXlvdXQ9e30sYT17fSxhcmd1bWVudHMubGVuZ3RoPjEmJmwucHVzaChvKCJvYmplY3QiLCJsYXlvdXQiKSkpLGYuc3VwcGx5RGVmYXVsdHModSk7Zm9yKHZhciBjPXUuX2Z1bGxEYXRhLHY9ci5sZW5ndGgsZz0wO2c8djtnKyspe3ZhciB5PXJbZ10sYj1bImRhdGEiLGddO2lmKHAoeSkpe3ZhciB4PWNbZ10sXz14LnR5cGUsdz1zLnRyYWNlc1tfXS5hdHRyaWJ1dGVzO3cudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltfXX0sITE9PT14LnZpc2libGUmJiExIT09eS52aXNpYmxlJiZsLnB1c2gobygiaW52aXNpYmxlIixiKSksbih5LHgsdyxsLGIpO3ZhciBNPXkudHJhbnNmb3JtcyxrPXgudHJhbnNmb3JtcztpZihNKXttKE0pfHxsLnB1c2gobygiYXJyYXkiLGIsWyJ0cmFuc2Zvcm1zIl0pKSxiLnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIEE9MDtBPE0ubGVuZ3RoO0ErKyl7dmFyIFQ9WyJ0cmFuc2Zvcm1zIixBXSxTPU1bQV0udHlwZTtpZihwKE1bQV0pKXt2YXIgRT1zLnRyYW5zZm9ybXNbU10/cy50cmFuc2Zvcm1zW1NdLmF0dHJpYnV0ZXM6e307RS50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMocy50cmFuc2Zvcm1zKX0sbihNW0FdLGtbQV0sRSxsLGIsVCl9ZWxzZSBsLnB1c2gobygib2JqZWN0IixiLFQpKX19fWVsc2UgbC5wdXNoKG8oIm9iamVjdCIsYikpfXJldHVybiBuKGEsdS5fZnVsbExheW91dCxpKHMsYyksbCwibGF5b3V0IiksMD09PWwubGVuZ3RoP3ZvaWQgMDpsfTt2YXIgdj17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjphKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6YSh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXAocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIGEodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVyblthKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQpe3JldHVybiJUcmFjZSAiK3RbMV0rIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVyblthKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX19LHsiLi4vbGliIjo3MjQsIi4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4vcGxvdF9zY2hlbWEiOjc1M31dLDc1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRlZmF1bHRDb25maWc9dCgiLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLHIuUGxvdHM9dCgiLi9wbG90cy9wbG90cyIpLHIuQXhlcz10KCIuL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksci5Nb2RlQmFyPXQoIi4vY29tcG9uZW50cy9tb2RlYmFyIiksdCgiLi9wbG90X2FwaS9wbG90X2FwaSIpfSx7Ii4vY29tcG9uZW50cy9tb2RlYmFyIjo2NjIsIi4vcGxvdF9hcGkvcGxvdF9hcGkiOjc1MSwiLi9wbG90X2FwaS9wbG90X2NvbmZpZyI6NzUyLCIuL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4vcGxvdHMvcGxvdHMiOjgyN31dLDc2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImFmdGVyYWxsIix2YWx1ZXM6WyJpbW1lZGlhdGUiLCJuZXh0IiwiYWZ0ZXJhbGwiXX0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmb3J3YXJkIiwicmV2ZXJzZSJdLGRmbHQ6ImZvcndhcmQifSxmcm9tY3VycmVudDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZnJhbWU6e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NTAwfSxyZWRyYXc6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSx0cmFuc2l0aW9uOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0sZWFzaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjdWJpYy1pbi1vdXQiLAp2YWx1ZXM6WyJsaW5lYXIiLCJxdWFkIiwiY3ViaWMiLCJzaW4iLCJleHAiLCJjaXJjbGUiLCJlbGFzdGljIiwiYmFjayIsImJvdW5jZSIsImxpbmVhci1pbiIsInF1YWQtaW4iLCJjdWJpYy1pbiIsInNpbi1pbiIsImV4cC1pbiIsImNpcmNsZS1pbiIsImVsYXN0aWMtaW4iLCJiYWNrLWluIiwiYm91bmNlLWluIiwibGluZWFyLW91dCIsInF1YWQtb3V0IiwiY3ViaWMtb3V0Iiwic2luLW91dCIsImV4cC1vdXQiLCJjaXJjbGUtb3V0IiwiZWxhc3RpYy1vdXQiLCJiYWNrLW91dCIsImJvdW5jZS1vdXQiLCJsaW5lYXItaW4tb3V0IiwicXVhZC1pbi1vdXQiLCJjdWJpYy1pbi1vdXQiLCJzaW4taW4tb3V0IiwiZXhwLWluLW91dCIsImNpcmNsZS1pbi1vdXQiLCJlbGFzdGljLWluLW91dCIsImJhY2staW4tb3V0IiwiYm91bmNlLWluLW91dCJdfX19fSx7fV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYT1yLm5hbWUsbz1lW2FdLHM9bi5pc0FycmF5KHRbYV0pP3RbYV06W10sbD1lW2FdPVtdO2ZvcihpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciB1PXNbaV0sYz17fSxoPXt9O24uaXNQbGFpbk9iamVjdCh1KXx8KGguaXRlbUlzTm90UGxhaW5PYmplY3Q9ITAsdT17fSksci5oYW5kbGVJdGVtRGVmYXVsdHModSxjLGUscixoKSxjLl9pbnB1dD11LGMuX2luZGV4PWksbC5wdXNoKGMpfWlmKG4uaXNBcnJheShvKSl7dmFyIGY9TWF0aC5taW4oby5sZW5ndGgsbC5sZW5ndGgpO2ZvcihpPTA7aTxmO2krKyluLnJlbGlua1ByaXZhdGVLZXlzKGxbaV0sb1tpXSl9fX0seyIuLi9saWIiOjcyNH1dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIn0sdmlzaWJsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwibGVnZW5kb25seSJdLGRmbHQ6ITB9LHNob3dsZWdlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxuYW1lOnt2YWxUeXBlOiJzdHJpbmcifSx1aWQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0saWRzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGhvdmVyaW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsieCIsInkiLCJ6IiwidGV4dCIsIm5hbWUiXSxleHRyYXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGFycmF5T2s6ITAsZGZsdDoiYWxsIn0saG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsc3RyZWFtOnt0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDB9fX19LHsiLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2MzV9XSw3NjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt4YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ4In0seWF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieSJ9fX0se31dLDc2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7ZnVuY3Rpb24gYShlKXtyZXR1cm4oMSsxMDAqKGUtdCkvci5kdGljayklMTAwPDJ9Zm9yKHZhciBvPTAscz0wLGw9MCx1PTAsYz0wO2M8ZS5sZW5ndGg7YysrKWVbY10lMT09MD9sKys6YihlW2NdKXx8dSsrLGEoZVtjXSkmJm8rKyxhKGVbY10rci5kdGljay8yKSYmcysrO3ZhciBoPWUubGVuZ3RoLXU7aWYobD09PWgmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqaCYmKG8+LjMqaHx8YShuKXx8YShpKSkpe3ZhciBmPXIuZHRpY2svMjt0Kz10K2Y8bj9mOi1mfXJldHVybiB0fWZ1bmN0aW9uIGkodCxlLHIsbixpKXt2YXIgYT1fLmZpbmRFeGFjdERhdGVzKGUsaSk7aWYoYS5leGFjdERheXM+Ljgpe3ZhciBvPU51bWJlcihyLnN1YnN0cigxKSk7YS5leGFjdFllYXJzPi44JiZvJTEyPT0wP3Q9Ty50aWNrSW5jcmVtZW50KHQsIk02IiwicmV2ZXJzZSIpKzEuNSpDOmEuZXhhY3RNb250aHM+Ljg/dD1PLnRpY2tJbmNyZW1lbnQodCwiTTEiLCJyZXZlcnNlIikrMTUuNSpDOnQtPUMvMjt2YXIgcz1PLnRpY2tJbmNyZW1lbnQodCxyKTtpZihzPD1uKXJldHVybiBzfXJldHVybiB0fWZ1bmN0aW9uIGEodCl7dmFyIGUscixuPXQudGlja3ZhbHMsaT10LnRpY2t0ZXh0LGE9bmV3IEFycmF5KG4ubGVuZ3RoKSxvPV8uc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLHM9MS4wMDAxKm9bMF0tMWUtNCpvWzFdLHU9MS4wMDAxKm9bMV0tMWUtNCpvWzBdLGM9TWF0aC5taW4ocyx1KSxoPU1hdGgubWF4KHMsdSksZj0wO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdKTt2YXIgZD0iY2F0ZWdvcnkiPT09dC50eXBlP3QuZDJsX25vYWRkOnQuZDJsO2ZvcigibG9nIj09PXQudHlwZSYmIkwiIT09U3RyaW5nKHQuZHRpY2spLmNoYXJBdCgwKSYmKHQuZHRpY2s9IkwiK01hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5taW4odC5yYW5nZVswXSx0LnJhbmdlWzFdKSktMSkpLHI9MDtyPG4ubGVuZ3RoO3IrKykoZT1kKG5bcl0pKT5jJiZlPGgmJih2b2lkIDA9PT1pW3JdP2FbZl09Ty50aWNrVGV4dCh0LGUpOmFbZl09bCh0LGUsU3RyaW5nKGlbcl0pKSxmKyspO3JldHVybiBmPG4ubGVuZ3RoJiZhLnNwbGljZShmLG4ubGVuZ3RoLWYpLGF9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIGUqXy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQuZHRpY2s7aWYodC5fdGlja2V4cG9uZW50PTAsYihlKXx8InN0cmluZyI9PXR5cGVvZiBlfHwoZT0xKSwiY2F0ZWdvcnkiPT09dC50eXBlJiYodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksaT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWk+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PUMmJmk8PTEwfHxlPj0xNSpDKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj1JJiZpPD0xNnx8ZT49eil0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49RCYmaTw9MTl8fGU+PUkpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBhPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGksYSktMjB9fWVsc2UgaWYoYihlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBvPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2IoZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMob1swXSksTWF0aC5hYnMob1sxXSkpLGw9TWF0aC5mbG9vcihNYXRoLmxvZyhzKS9NYXRoLkxOMTArLjAxKTtNYXRoLmFicyhsKT4zJiYoIlNJIj09PXQuZXhwb25lbnRmb3JtYXR8fCJCIj09PXQuZXhwb25lbnRmb3JtYXQ/dC5fdGlja2V4cG9uZW50PTMqTWF0aC5yb3VuZCgobC0xKS8zKTp0Ll90aWNrZXhwb25lbnQ9bCl9ZWxzZSB0Ll90aWNrcm91bmQ9bnVsbH1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj10LnRpY2tmb250fHx7fTtyZXR1cm57eDplLGR4OjAsZHk6MCx0ZXh0OnJ8fCIiLGZvbnRTaXplOm4uc2l6ZSxmb250Om4uZmFtaWx5LGZvbnRDb2xvcjpuLmNvbG9yfX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPXQuX3RpY2tyb3VuZCxhPXImJnQuaG92ZXJmb3JtYXR8fHQudGlja2Zvcm1hdDtuJiYoaT1iKGkpPzQ6e3k6Im0iLG06ImQiLGQ6Ik0iLE06IlMiLFM6NH1baV0pO3ZhciBvLHM9Xy5mb3JtYXREYXRlKGUueCxhLGksdC5jYWxlbmRhciksbD1zLmluZGV4T2YoIlxuIik7LTEhPT1sJiYobz1zLnN1YnN0cihsKzEpLHM9cy5zdWJzdHIoMCxsKSksbiYmKCIwMDowMDowMCI9PT1zfHwiMDA6MDAiPT09cz8ocz1vLG89IiIpOjg9PT1zLmxlbmd0aCYmKHM9cy5yZXBsYWNlKC86MDAkLywiIikpKSxvJiYocj8iZCI9PT1pP3MrPSIsICIrbzpzPW8rKHM/IiwgIitzOiIiKTp0Ll9pbkNhbGNUaWNrcyYmbz09PXQuX3ByZXZEYXRlSGVhZHx8KHMrPSI8YnI+IitvLHQuX3ByZXZEYXRlSGVhZD1vKSksZS50ZXh0PXN9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBhPXQuZHRpY2ssbz1lLng7aWYoIW58fCJzdHJpbmciPT10eXBlb2YgYSYmIkwiPT09YS5jaGFyQXQoMCl8fChhPSJMMyIpLHQudGlja2Zvcm1hdHx8InN0cmluZyI9PXR5cGVvZiBhJiYiTCI9PT1hLmNoYXJBdCgwKSllLnRleHQ9ZChNYXRoLnBvdygxMCxvKSx0LGksbik7ZWxzZSBpZihiKGEpfHwiRCI9PT1hLmNoYXJBdCgwKSYmXy5tb2QobysuMDEsMSk8LjEpaWYoLTEhPT1bImUiLCJFIiwicG93ZXIiXS5pbmRleE9mKHQuZXhwb25lbnRmb3JtYXQpKXt2YXIgcz1NYXRoLnJvdW5kKG8pO2UudGV4dD0wPT09cz8xOjE9PT1zPyIxMCI6cz4xPyIxMDxzdXA+IitzKyI8L3N1cD4iOiIxMDxzdXA+XHUyMjEyIistcysiPC9zdXA+IixlLmZvbnRTaXplKj0xLjI1fWVsc2UgZS50ZXh0PWQoTWF0aC5wb3coMTAsbyksdCwiIiwiZmFrZWhvdmVyIiksIkQxIj09PWEmJiJ5Ij09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNik7ZWxzZXtpZigiRCIhPT1hLmNoYXJBdCgwKSl0aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoYSk7ZS50ZXh0PVN0cmluZyhNYXRoLnJvdW5kKE1hdGgucG93KDEwLF8ubW9kKG8sMSkpKSksZS5mb250U2l6ZSo9Ljc1fWlmKCJEMSI9PT10LmR0aWNrKXt2YXIgbD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7IjAiIT09bCYmIjEiIT09bHx8KCJ5Ij09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKG88MD8uNTouMjUpKSl9fWZ1bmN0aW9uIGgodCxlKXt2YXIgcj10Ll9jYXRlZ29yaWVzW01hdGgucm91bmQoZS54KV07dm9pZCAwPT09ciYmKHI9IiIpLGUudGV4dD1TdHJpbmcocil9ZnVuY3Rpb24gZih0LGUscixuLGkpeyJhbGwiPT09dC5zaG93ZXhwb25lbnQmJk1hdGguYWJzKGUueC90LmR0aWNrKTwxZS02JiYoaT0iaGlkZSIpLGUudGV4dD1kKGUueCx0LGksbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT10PDAsYT1lLl90aWNrcm91bmQsbz1yfHxlLmV4cG9uZW50Zm9ybWF0fHwiQiIsbD1lLl90aWNrZXhwb25lbnQsdT1lLnRpY2tmb3JtYXQsYz1lLnNlcGFyYXRldGhvdXNhbmRzO2lmKG4pe3ZhciBoPXtleHBvbmVudGZvcm1hdDplLmV4cG9uZW50Zm9ybWF0LGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6Yih0KT9NYXRoLmFicyh0KXx8MToxLHJhbmdlOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UucmFuZ2UubWFwKGUucjJkKTpbMCx0fHwxXX07cyhoKSxhPShOdW1iZXIoaC5fdGlja3JvdW5kKXx8MCkrNCxsPWguX3RpY2tleHBvbmVudCxlLmhvdmVyZm9ybWF0JiYodT1lLmhvdmVyZm9ybWF0KX1pZih1KXJldHVybiB5LmZvcm1hdCh1KSh0KS5yZXBsYWNlKC8tL2csIlx1MjIxMiIpO3ZhciBmPU1hdGgucG93KDEwLC1hKS8yO2lmKCJub25lIj09PW8mJihsPTApLCh0PU1hdGguYWJzKHQpKTxmKXQ9IjAiLGk9ITE7ZWxzZXtpZih0Kz1mLGwmJih0Kj1NYXRoLnBvdygxMCwtbCksYSs9bCksMD09PWEpdD1TdHJpbmcoTWF0aC5mbG9vcih0KSk7ZWxzZSBpZihhPDApe3Q9U3RyaW5nKE1hdGgucm91bmQodCkpLHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aCthKTtmb3IodmFyIGQ9YTtkPDA7ZCsrKXQrPSIwIn1lbHNle3Q9U3RyaW5nKHQpO3ZhciBwPXQuaW5kZXhPZigiLiIpKzE7cCYmKHQ9dC5zdWJzdHIoMCxwK2EpLnJlcGxhY2UoL1wuPzArJC8sIiIpKX10PV8ubnVtU2VwYXJhdGUodCxlLl9zZXBhcmF0b3JzLGMpfWlmKGwmJiJoaWRlIiE9PW8pe3ZhciBtO209bDwwPyJcdTIyMTIiKy1sOiJwb3dlciIhPT1vPyIrIitsOlN0cmluZyhsKSwiZSI9PT1vfHwoIlNJIj09PW98fCJCIj09PW8pJiYobD4xMnx8bDwtMTUpP3QrPSJlIittOiJFIj09PW8/dCs9IkUiK206InBvd2VyIj09PW8/dCs9Ilx4ZDcxMDxzdXA+IittKyI8L3N1cD4iOiJCIj09PW8mJjk9PT1sP3QrPSJCIjoiU0kiIT09byYmIkIiIT09b3x8KHQrPXFbbC8zKzVdKX1yZXR1cm4gaT8iXHUyMjEyIit0OnR9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLG4saT1bXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1bXSxvPXQuX2Z1bGxEYXRhW2Vbcl1dLnhheGlzLHM9dC5fZnVsbERhdGFbZVtyXV0ueWF4aXM7aWYobyYmcyl7Zm9yKG49MDtuPGkubGVuZ3RoO24rKyktMT09PWlbbl0ueC5pbmRleE9mKG8pJiYtMT09PWlbbl0ueS5pbmRleE9mKHMpfHxhLnB1c2gobik7aWYoYS5sZW5ndGgpe3ZhciBsLHU9aVthWzBdXTtpZihhLmxlbmd0aD4xKWZvcihuPTE7bjxhLmxlbmd0aDtuKyspbD1pW2Fbbl1dLG0odS54LGwueCksbSh1LnksbC55KTttKHUueCxbb10pLG0odS55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyktMT09PXQuaW5kZXhPZihlW3JdKSYmdC5wdXNoKGVbcl0pfWZ1bmN0aW9uIHYodCxlLHIpe3ZhciBuLGksYT1bXSxvPVtdLHM9dC5sYXlvdXQ7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylhLnB1c2goTy5nZXRGcm9tSWQodCxlW25dKSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylvLnB1c2goTy5nZXRGcm9tSWQodCxyW25dKSk7dmFyIGw9T2JqZWN0LmtleXMoYVswXSksdT1bImFuY2hvciIsImRvbWFpbiIsIm92ZXJsYXlpbmciLCJwb3NpdGlvbiIsInNpZGUiLCJ0aWNrYW5nbGUiXSxjPVsibGluZWFyIiwibG9nIl07Zm9yKG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGg9bFtuXSxmPWFbMF1baF0sZD1vWzBdW2hdLHA9ITAsbT0hMSx2PSExO2lmKCJfIiE9PWguY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgZiYmLTE9PT11LmluZGV4T2YoaCkpe2ZvcihpPTE7aTxhLmxlbmd0aCYmcDtpKyspe3ZhciB5PWFbaV1baF07InR5cGUiPT09aCYmLTEhPT1jLmluZGV4T2YoZikmJi0xIT09Yy5pbmRleE9mKHkpJiZmIT09eT9tPSEwOnkhPT1mJiYocD0hMSl9Zm9yKGk9MTtpPG8ubGVuZ3RoJiZwO2krKyl7dmFyIGI9b1tpXVtoXTsidHlwZSI9PT1oJiYtMSE9PWMuaW5kZXhPZihkKSYmLTEhPT1jLmluZGV4T2YoYikmJmQhPT1iP3Y9ITA6b1tpXVtoXSE9PWQmJihwPSExKX1wJiYobSYmKHNbYVswXS5fbmFtZV0udHlwZT0ibGluZWFyIiksdiYmKHNbb1swXS5fbmFtZV0udHlwZT0ibGluZWFyIiksZyhzLGgsYSxvKSl9fWZvcihuPTA7bjx0Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLmxlbmd0aDtuKyspe3ZhciB4PXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbbl07LTEhPT1lLmluZGV4T2YoeC54cmVmKSYmLTEhPT1yLmluZGV4T2YoeC55cmVmKSYmXy5zd2FwQXR0cnMocy5hbm5vdGF0aW9uc1tuXSxbIj8iXSl9fWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGksYT1fLm5lc3RlZFByb3BlcnR5LG89YSh0W3JbMF0uX25hbWVdLGUpLmdldCgpLHM9YSh0W25bMF0uX25hbWVdLGUpLmdldCgpO2ZvcigidGl0bGUiPT09ZSYmKCJDbGljayB0byBlbnRlciBYIGF4aXMgdGl0bGUiPT09byYmKG89IkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLCJDbGljayB0byBlbnRlciBZIGF4aXMgdGl0bGUiPT09cyYmKHM9IkNsaWNrIHRvIGVudGVyIFggYXhpcyB0aXRsZSIpKSxpPTA7aTxyLmxlbmd0aDtpKyspYSh0LHJbaV0uX25hbWUrIi4iK2UpLnNldChzKTtmb3IoaT0wO2k8bi5sZW5ndGg7aSsrKWEodCxuW2ldLl9uYW1lKyIuIitlKS5zZXQobyl9dmFyIHk9dCgiZDMiKSxiPXQoImZhc3QtaXNudW1lcmljIikseD10KCIuLi8uLi9yZWdpc3RyeSIpLF89dCgiLi4vLi4vbGliIiksdz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxNPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksaz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksQT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxUPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxTPVQuRlBfU0FGRSxFPVQuT05FQVZHWUVBUixMPVQuT05FQVZHTU9OVEgsQz1ULk9ORURBWSx6PVQuT05FSE9VUixJPVQuT05FTUlOLEQ9VC5PTkVTRUMsUD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULE89ZS5leHBvcnRzPXt9O08ubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksTy5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLE8uc2V0Q29udmVydD10KCIuL3NldF9jb252ZXJ0Iik7dmFyIFI9dCgiLi9heGlzX2F1dG90eXBlIiksRj10KCIuL2F4aXNfaWRzIik7Ty5pZDJuYW1lPUYuaWQybmFtZSxPLmNsZWFuSWQ9Ri5jbGVhbklkLE8ubGlzdD1GLmxpc3QsTy5saXN0SWRzPUYubGlzdElkcyxPLmdldEZyb21JZD1GLmdldEZyb21JZCxPLmdldEZyb21UcmFjZT1GLmdldEZyb21UcmFjZSxPLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSkscz1PLmxpc3RJZHMocixvKSxsPW4rInJlZiIsdT17fTtyZXR1cm4gaXx8KGk9c1swXXx8YSksYXx8KGE9aSksdVtsXT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMuY29uY2F0KGE/W2FdOltdKSxkZmx0Oml9LF8uY29lcmNlKHQsZSx1LGwpfSxPLmNvZXJjZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzO2lmKCJwYXBlciI9PT1ufHwicGl4ZWwiPT09bilvPV8uZW5zdXJlTnVtYmVyLHM9cihpLGEpO2Vsc2V7dmFyIGw9Ty5nZXRGcm9tSWQoZSxuKTthPWwuZnJhY3Rpb24ycihhKSxzPXIoaSxhKSxvPWwuY2xlYW5Qb3N9dFtpXT1vKHMpfSxPLmNsZWFuUG9zaXRpb249ZnVuY3Rpb24odCxlLHIpe3JldHVybigicGFwZXIiPT09cnx8InBpeGVsIj09PXI/Xy5lbnN1cmVOdW1iZXI6Ty5nZXRGcm9tSWQoZSxyKS5jbGVhblBvcykodCl9LE8uZ2V0RGF0YVRvQ29vcmRGdW5jPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9IngiPT09cnx8InkiPT09cnx8InoiPT09cj9yOm47aWYoQXJyYXkuaXNBcnJheShhKSl7aWYoaT17dHlwZTpSKG4pLF9jYXRlZ29yaWVzOltdfSxPLnNldENvbnZlcnQoaSksImNhdGVnb3J5Ij09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9Ty5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP2kuZDJjOiJpZHMiPT09YT9mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpfTpmdW5jdGlvbih0KXtyZXR1cm4rdH19LE8uY2xlYXJUeXBlcz1mdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RofHwoZT10Ll9mdWxsRGF0YS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHI9dC5kYXRhW2VdO2RlbGV0ZShPLmdldEZyb21JZCh0LHIueGF4aXMpfHx7fSkudHlwZSxkZWxldGUoTy5nZXRGcm9tSWQodCxyLnlheGlzKXx8e30pLnR5cGV9KX0sTy5jb3VudGVyTGV0dGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckF0KDApO3JldHVybiJ4Ij09PWU/InkiOiJ5Ij09PWU/IngiOnZvaWQgMH0sTy5taW5EdGljaz1mdW5jdGlvbih0LGUscixuKXstMT09PVsibG9nIiwiY2F0ZWdvcnkiXS5pbmRleE9mKHQudHlwZSkmJm4/dm9pZCAwPT09dC5fbWluRHRpY2s/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTp0Ll9taW5EdGljayYmKCh0Ll9taW5EdGljay9lKzFlLTYpJTE8MmUtNiYmKChyLXQuX2ZvcmNlVGljazApL2UlMSsxLjAwMDAwMSklMTwyZS02Pyh0Ll9taW5EdGljaz1lLHQuX2ZvcmNlVGljazA9cik6KChlL3QuX21pbkR0aWNrKzFlLTYpJTE+MmUtNnx8KChyLXQuX2ZvcmNlVGljazApL3QuX21pbkR0aWNrJTErMS4wMDAwMDEpJTE+MmUtNikmJih0Ll9taW5EdGljaz0wKSk6dC5fbWluRHRpY2s9MH0sTy5nZXRBdXRvUmFuZ2U9ZnVuY3Rpb24odCl7dmFyIGUscj1bXSxuPXQuX21pblswXS52YWwsaT10Ll9tYXhbMF0udmFsO2ZvcihlPTE7ZTx0Ll9taW4ubGVuZ3RoJiZuPT09aTtlKyspbj1NYXRoLm1pbihuLHQuX21pbltlXS52YWwpO2ZvcihlPTE7ZTx0Ll9tYXgubGVuZ3RoJiZuPT09aTtlKyspaT1NYXRoLm1heChpLHQuX21heFtlXS52YWwpO3ZhciBhLG8scyxsLHUsYyxoLGY9MCxkPSExO2lmKHQucmFuZ2Upe3ZhciBwPV8uc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2Q9cFsxXTxwWzBdfWZvcigicmV2ZXJzZWQiPT09dC5hdXRvcmFuZ2UmJihkPSEwLHQuYXV0b3JhbmdlPSEwKSxlPTA7ZTx0Ll9taW4ubGVuZ3RoO2UrKylmb3Iobz10Ll9taW5bZV0sYT0wO2E8dC5fbWF4Lmxlbmd0aDthKyspcz10Ll9tYXhbYV0saD1zLnZhbC1vLnZhbCxjPXQuX2xlbmd0aC1vLnBhZC1zLnBhZCxoPjAmJmM+MCYmaC9jPmYmJihsPW8sdT1zLGY9aC9jKTtpZihuPT09aSl7dmFyIG09bi0xLHY9bisxO3I9InRvemVybyI9PT10LnJhbmdlbW9kZT9uPDA/W20sMF06WzAsdl06Im5vbm5lZ2F0aXZlIj09PXQucmFuZ2Vtb2RlP1tNYXRoLm1heCgwLG0pLE1hdGgubWF4KDAsdildOlttLHZdfWVsc2UgZiYmKCJsaW5lYXIiIT09dC50eXBlJiYiLSIhPT10LnR5cGV8fCgidG96ZXJvIj09PXQucmFuZ2Vtb2RlPyhsLnZhbD49MCYmKGw9e3ZhbDowLHBhZDowfSksdS52YWw8PTAmJih1PXt2YWw6MCxwYWQ6MH0pKToibm9ubmVnYXRpdmUiPT09dC5yYW5nZW1vZGUmJihsLnZhbC1mKmwucGFkPDAmJihsPXt2YWw6MCxwYWQ6MH0pLHUudmFsPDAmJih1PXt2YWw6MSxwYWQ6MH0pKSxmPSh1LnZhbC1sLnZhbCkvKHQuX2xlbmd0aC1sLnBhZC11LnBhZCkpLHI9W2wudmFsLWYqbC5wYWQsdS52YWwrZip1LnBhZF0pO3JldHVybiByWzBdPT09clsxXSYmKCJ0b3plcm8iPT09dC5yYW5nZW1vZGU/cj1yWzBdPDA/W3JbMF0sMF06clswXT4wP1swLHJbMF1dOlswLDFdOihyPVtyWzBdLTEsclswXSsxXSwibm9ubmVnYXRpdmUiPT09dC5yYW5nZW1vZGUmJihyWzBdPU1hdGgubWF4KDAsclswXSkpKSksZCYmci5yZXZlcnNlKCksXy5zaW1wbGVNYXAocix0Lmwycnx8TnVtYmVyKX0sTy5kb0F1dG9SYW5nZT1mdW5jdGlvbih0KXt0Ll9sZW5ndGh8fHQuc2V0U2NhbGUoKTt2YXIgZT10Ll9taW4mJnQuX21heCYmdC5fbWluLmxlbmd0aCYmdC5fbWF4Lmxlbmd0aDtpZih0LmF1dG9yYW5nZSYmZSl7dC5yYW5nZT1PLmdldEF1dG9SYW5nZSh0KSx0Ll9yPXQucmFuZ2Uuc2xpY2UoKSx0Ll9ybD1fLnNpbXBsZU1hcCh0Ll9yLHQucjJsKTt2YXIgcj10Ll9pbnB1dDtyLnJhbmdlPXQucmFuZ2Uuc2xpY2UoKSxyLmF1dG9yYW5nZT10LmF1dG9yYW5nZX19LE8uc2F2ZVJhbmdlSW5pdGlhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PLmxpc3QodCwiIiwhMCksbj0hMSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz12b2lkIDA9PT1hLl9yYW5nZUluaXRpYWwscz1vfHwhKGEucmFuZ2VbMF09PT1hLl9yYW5nZUluaXRpYWxbMF0mJmEucmFuZ2VbMV09PT1hLl9yYW5nZUluaXRpYWxbMV0pOyhvJiYhMT09PWEuYXV0b3JhbmdlfHxlJiZzKSYmKGEuX3JhbmdlSW5pdGlhbD1hLnJhbmdlLnNsaWNlKCksbj0hMCl9cmV0dXJuIG59LE8uc2F2ZVNob3dTcGlrZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Ty5saXN0KHQsIiIsITApLG49ITEsaT0ib24iLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPXZvaWQgMD09PW8uX3Nob3dTcGlrZUluaXRpYWwsbD1zfHwhKG8uc2hvd3NwaWtlcz09PW8uX3Nob3dzcGlrZXMpOyhzfHxlJiZsKSYmKG8uX3Nob3dTcGlrZUluaXRpYWw9by5zaG93c3Bpa2VzLG49ITApLCJvbiIhPT1pfHxvLnNob3dzcGlrZXN8fChpPSJvZmYiKX1yZXR1cm4gdC5fZnVsbExheW91dC5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZD1pLG59LE8uZXhwYW5kPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChOdW1iZXIodFtlXXx8MCksMCl9O3ZhciBlPU1hdGgubWF4KE51bWJlcih0fHwwKSwwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gaShyKXtmdW5jdGlvbiBuKHQpe3JldHVybiBiKHQpJiZNYXRoLmFicyh0KTxTfWlmKGw9ZVtyXSxiKGwpKXtpZihoPXgocikrZyxmPXcocikrZyxwPWwtayhyKSxtPWwrTShyKSwibG9nIj09PXQudHlwZSYmcDxtLzEwJiYocD1tLzEwKSx1PXQuYzJsKHApLGM9dC5jMmwobSkseSYmKHU9TWF0aC5taW4oMCx1KSxjPU1hdGgubWF4KDAsYykpLG4odSkpe2ZvcihkPSEwLG89MDtvPHQuX21pbi5sZW5ndGgmJmQ7bysrKXM9dC5fbWluW29dLHMudmFsPD11JiZzLnBhZD49Zj9kPSExOnMudmFsPj11JiZzLnBhZDw9ZiYmKHQuX21pbi5zcGxpY2UobywxKSxvLS0pO2QmJnQuX21pbi5wdXNoKHt2YWw6dSxwYWQ6eSYmMD09PXU/MDpmfSl9aWYobihjKSl7Zm9yKGQ9ITAsbz0wO288dC5fbWF4Lmxlbmd0aCYmZDtvKyspcz10Ll9tYXhbb10scy52YWw+PWMmJnMucGFkPj1oP2Q9ITE6cy52YWw8PWMmJnMucGFkPD1oJiYodC5fbWF4LnNwbGljZShvLDEpLG8tLSk7ZCYmdC5fbWF4LnB1c2goe3ZhbDpjLHBhZDp5JiYwPT09Yz8wOmh9KX19fWlmKCh0LmF1dG9yYW5nZXx8ISFfLm5lc3RlZFByb3BlcnR5KHQsInJhbmdlc2xpZGVyLmF1dG9yYW5nZSIpLmdldCgpKSYmZSl7dC5fbWlufHwodC5fbWluPVtdKSx0Ll9tYXh8fCh0Ll9tYXg9W10pLHJ8fChyPXt9KSx0Ll9tfHx0LnNldFNjYWxlKCk7dmFyIGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2PWUubGVuZ3RoLGc9ci5wYWRkZWQ/LjA1KnQuX2xlbmd0aDowLHk9ci50b3plcm8mJigibGluZWFyIj09PXQudHlwZXx8Ii0iPT09dC50eXBlKTtnJiYiZG9tYWluIj09PXQuY29uc3RyYWluJiZ0Ll9pbnB1dERvbWFpbiYmKGcqPSh0Ll9pbnB1dERvbWFpblsxXS10Ll9pbnB1dERvbWFpblswXSkvKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSk7dmFyIHg9bigodC5fbT4wP3IucHBhZHBsdXM6ci5wcGFkbWludXMpfHxyLnBwYWR8fDApLHc9bigodC5fbT4wP3IucHBhZG1pbnVzOnIucHBhZHBsdXMpfHxyLnBwYWR8fDApLE09bihyLnZwYWRwbHVzfHxyLnZwYWQpLGs9bihyLnZwYWRtaW51c3x8ci52cGFkKTtmb3IoYT0wO2E8NjthKyspaShhKTtmb3IoYT12LTE7YT41O2EtLSlpKGEpfX0sTy5hdXRvQmluPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9Xy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksbD1fLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZihvfHwobz1lLmNhbGVuZGFyKSwiY2F0ZWdvcnkiPT09ZS50eXBlKXJldHVybntzdGFydDpzLS41LGVuZDpsKy41LHNpemU6MX07dmFyIHU7aWYocil1PShsLXMpL3I7ZWxzZXt2YXIgYz1fLmRpc3RpbmN0VmFscyh0KSxoPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coYy5taW5EaWZmKS9NYXRoLkxOMTApKSxmPWgqXy5yb3VuZFVwKGMubWluRGlmZi9oLFsuOSwxLjksNC45LDkuOV0sITApO3U9TWF0aC5tYXgoZiwyKl8uc3RkZXYodCkvTWF0aC5wb3codC5sZW5ndGgsYT8uMjU6LjQpKSxiKHUpfHwodT0xKX12YXIgZDtkPSJsb2ciPT09ZS50eXBlP3t0eXBlOiJsaW5lYXIiLHJhbmdlOltzLGxdfTp7dHlwZTplLnR5cGUscmFuZ2U6Xy5zaW1wbGVNYXAoW3MsbF0sZS5jMnIsMCxvKSxjYWxlbmRhcjpvfSxPLnNldENvbnZlcnQoZCksTy5hdXRvVGlja3MoZCx1KTt2YXIgcCxtPU8udGlja0luY3JlbWVudChPLnRpY2tGaXJzdChkKSxkLmR0aWNrLCJyZXZlcnNlIixvKTtpZigibnVtYmVyIj09dHlwZW9mIGQuZHRpY2spe209bihtLHQsZCxzLGwpO3A9bSsoMStNYXRoLmZsb29yKChsLW0pL2QuZHRpY2spKSpkLmR0aWNrfWVsc2UgZm9yKCJNIj09PWQuZHRpY2suY2hhckF0KDApJiYobT1pKG0sdCxkLmR0aWNrLHMsbykpLHA9bTtwPD1sOylwPU8udGlja0luY3JlbWVudChwLGQuZHRpY2ssITEsbyk7cmV0dXJue3N0YXJ0OmUuYzJyKG0sMCxvKSxlbmQ6ZS5jMnIocCwwLG8pLHNpemU6ZC5kdGlja319LE8uY2FsY1RpY2tzPWZ1bmN0aW9uKHQpe3ZhciBlPV8uc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpO2lmKCJhdXRvIj09PXQudGlja21vZGV8fCF0LmR0aWNrKXt2YXIgcixuPXQubnRpY2tzO258fCgiY2F0ZWdvcnkiPT09dC50eXBlPyhyPXQudGlja2ZvbnQ/MS4yKih0LnRpY2tmb250LnNpemV8fDEyKToxNSxuPXQuX2xlbmd0aC9yKToocj0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsbj1fLmNvbnN0cmFpbih0Ll9sZW5ndGgvciw0LDkpKzEpKSwiYXJyYXkiPT09dC50aWNrbW9kZSYmKG4qPTEwMCksTy5hdXRvVGlja3ModCxNYXRoLmFicyhlWzFdLWVbMF0pL24pLHQuX21pbkR0aWNrPjAmJnQuZHRpY2s8Mip0Ll9taW5EdGljayYmKHQuZHRpY2s9dC5fbWluRHRpY2ssdC50aWNrMD10Lmwycih0Ll9mb3JjZVRpY2swKSl9aWYodC50aWNrMHx8KHQudGljazA9ImRhdGUiPT09dC50eXBlPyIyMDAwLTAxLTAxIjowKSxzKHQpLCJhcnJheSI9PT10LnRpY2ttb2RlKXJldHVybiBhKHQpO3QuX3RtaW49Ty50aWNrRmlyc3QodCk7dmFyIGk9ZVsxXTxlWzBdLG89W10sbD0xLjAwMDEqZVsxXS0xZS00KmVbMF07ImNhdGVnb3J5Ij09PXQudHlwZSYmKGw9aT9NYXRoLm1heCgtLjUsbCk6TWF0aC5taW4odC5fY2F0ZWdvcmllcy5sZW5ndGgtLjUsbCkpO2Zvcih2YXIgdT1udWxsLGM9TWF0aC5tYXgoMWUzLHQuX2xlbmd0aHx8MCksaD10Ll90bWluOyhpP2g+PWw6aDw9bCkmJiEoby5sZW5ndGg+Y3x8aD09PXUpO2g9Ty50aWNrSW5jcmVtZW50KGgsdC5kdGljayxpLHQuY2FsZW5kYXIpKXU9aCxvLnB1c2goaCk7dC5fdG1heD1vW28ubGVuZ3RoLTFdLHQuX3ByZXZEYXRlSGVhZD0iIix0Ll9pbkNhbGNUaWNrcz0hMDtmb3IodmFyIGY9bmV3IEFycmF5KG8ubGVuZ3RoKSxkPTA7ZDxvLmxlbmd0aDtkKyspZltkXT1PLnRpY2tUZXh0KHQsb1tkXSk7cmV0dXJuIHQuX2luQ2FsY1RpY2tzPSExLGZ9O3ZhciBqPVsyLDUsMTBdLE49WzEsMiwzLDYsMTJdLEI9WzEsMiw1LDEwLDE1LDMwXSxVPVsxLDIsMyw3LDE0XSxWPVstLjA0NiwwLC4zMDEsLjQ3NywuNjAyLC42OTksLjc3OCwuODQ1LC45MDMsLjk1NCwxXSxIPVstLjMwMSwwLC4zMDEsLjY5OSwxXTtPLmF1dG9UaWNrcz1mdW5jdGlvbih0LGUpe3ZhciByO2lmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1fLmRhdGVUaWNrMCh0LmNhbGVuZGFyKTt2YXIgbj0yKmU7bj5FPyhlLz1FLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPSJNIisxMipvKGUscixqKSk6bj5MPyhlLz1MLHQuZHRpY2s9Ik0iK28oZSwxLE4pKTpuPkM/KHQuZHRpY2s9byhlLEMsVSksdC50aWNrMD1fLmRhdGVUaWNrMCh0LmNhbGVuZGFyLCEwKSk6bj56P3QuZHRpY2s9byhlLHosTik6bj5JP3QuZHRpY2s9byhlLEksQik6bj5EP3QuZHRpY2s9byhlLEQsQik6KHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPW8oZSxyLGopKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIGk9Xy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKGlbMV0taVswXSk8MSl7dmFyIGE9MS41Kk1hdGguYWJzKChpWzFdLWlbMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsaVsxXSktTWF0aC5wb3coMTAsaVswXSkpL2Escj1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpLHQuZHRpY2s9IkwiK28oZSxyLGopfWVsc2UgdC5kdGljaz1lPi4zPyJEMiI6IkQxIn1lbHNlImNhdGVnb3J5Ij09PXQudHlwZT8odC50aWNrMD0wLHQuZHRpY2s9TWF0aC5jZWlsKE1hdGgubWF4KGUsMSkpKToodC50aWNrMD0wLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSx0LmR0aWNrPW8oZSxyLGopKTtpZigwPT09dC5kdGljayYmKHQuZHRpY2s9MSksIWIodC5kdGljaykmJiJzdHJpbmciIT10eXBlb2YgdC5kdGljayl7dmFyIHM9dC5kdGljazt0aHJvdyB0LmR0aWNrPTEsImF4LmR0aWNrIGVycm9yOiAiK1N0cmluZyhzKX19LE8udGlja0luY3JlbWVudD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1yPy0xOjE7aWYoYihlKSlyZXR1cm4gdCtpKmU7dmFyIGE9ZS5jaGFyQXQoMCksbz1pKk51bWJlcihlLnN1YnN0cigxKSk7aWYoIk0iPT09YSlyZXR1cm4gXy5pbmNyZW1lbnRNb250aCh0LG8sbik7aWYoIkwiPT09YSlyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrbykvTWF0aC5MTjEwO2lmKCJEIj09PWEpe3ZhciBzPSJEMiI9PT1lP0g6VixsPXQrLjAxKmksdT1fLnJvdW5kVXAoXy5tb2QobCwxKSxzLHIpO3JldHVybiBNYXRoLmZsb29yKGwpK01hdGgubG9nKHkucm91bmQoTWF0aC5wb3coMTAsdSksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcoZSl9LE8udGlja0ZpcnN0PWZ1bmN0aW9uKHQpe3ZhciBlPXQucjJsfHxOdW1iZXIscj1fLnNpbXBsZU1hcCh0LnJhbmdlLGUpLG49clsxXTxyWzBdLGk9bj9NYXRoLmZsb29yOk1hdGguY2VpbCxhPTEuMDAwMSpyWzBdLTFlLTQqclsxXSxvPXQuZHRpY2sscz1lKHQudGljazApO2lmKGIobykpe3ZhciBsPWkoKGEtcykvbykqbytzO3JldHVybiJjYXRlZ29yeSI9PT10LnR5cGUmJihsPV8uY29uc3RyYWluKGwsMCx0Ll9jYXRlZ29yaWVzLmxlbmd0aC0xKSksbH12YXIgdT1vLmNoYXJBdCgwKSxjPU51bWJlcihvLnN1YnN0cigxKSk7aWYoIk0iPT09dSl7Zm9yKHZhciBoLGYsZCxwPTAsbT1zO3A8MTA7KXtpZigoKGg9Ty50aWNrSW5jcmVtZW50KG0sbyxuLHQuY2FsZW5kYXIpKS1hKSoobS1hKTw9MClyZXR1cm4gbj9NYXRoLm1pbihtLGgpOk1hdGgubWF4KG0saCk7Zj0oYS0obStoKS8yKS8oaC1tKSxkPXUrKE1hdGguYWJzKE1hdGgucm91bmQoZikpfHwxKSpjLG09Ty50aWNrSW5jcmVtZW50KG0sZCxmPDA/IW46bix0LmNhbGVuZGFyKSxwKyt9cmV0dXJuIF8uZXJyb3IoInRpY2tGaXJzdCBkaWQgbm90IGNvbnZlcmdlIix0KSxtfWlmKCJMIj09PXUpcmV0dXJuIE1hdGgubG9nKGkoKE1hdGgucG93KDEwLGEpLXMpL2MpKmMrcykvTWF0aC5MTjEwO2lmKCJEIj09PXUpe3ZhciB2PSJEMiI9PT1vP0g6VixnPV8ucm91bmRVcChfLm1vZChhLDEpLHYsbik7cmV0dXJuIE1hdGguZmxvb3IoYSkrTWF0aC5sb2coeS5yb3VuZChNYXRoLnBvdygxMCxnKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhvKX0sTy50aWNrVGV4dD1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihuKXt2YXIgaTtyZXR1cm4gdm9pZCAwPT09bnx8KHI/Im5vbmUiPT09bjooaT17Zmlyc3Q6dC5fdG1pbixsYXN0OnQuX3RtYXh9W25dLCJhbGwiIT09biYmZSE9PWkpKX12YXIgaSxhLG89bCh0LGUpLHM9ImFycmF5Ij09PXQudGlja21vZGUsZD1yfHxzLHA9ImNhdGVnb3J5Ij09PXQudHlwZT90LmQybF9ub2FkZDp0LmQybDtpZihzJiZBcnJheS5pc0FycmF5KHQudGlja3RleHQpKXt2YXIgbT1fLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSx2PU1hdGguYWJzKG1bMV0tbVswXSkvMWU0O2ZvcihhPTA7YTx0LnRpY2t0ZXh0Lmxlbmd0aCYmIShNYXRoLmFicyhlLXAodC50aWNrdmFsc1thXSkpPHYpO2ErKyk7aWYoYTx0LnRpY2t0ZXh0Lmxlbmd0aClyZXR1cm4gby50ZXh0PVN0cmluZyh0LnRpY2t0ZXh0W2FdKSxvfXJldHVybiBpPSJub25lIiE9PXQuZXhwb25lbnRmb3JtYXQmJm4odC5zaG93ZXhwb25lbnQpPyJoaWRlIjoiIiwiZGF0ZSI9PT10LnR5cGU/dSh0LG8scixkKToibG9nIj09PXQudHlwZT9jKHQsbyxyLGQsaSk6ImNhdGVnb3J5Ij09PXQudHlwZT9oKHQsbyk6Zih0LG8scixkLGkpLHQudGlja3ByZWZpeCYmIW4odC5zaG93dGlja3ByZWZpeCkmJihvLnRleHQ9dC50aWNrcHJlZml4K28udGV4dCksdC50aWNrc3VmZml4JiYhbih0LnNob3d0aWNrc3VmZml4KSYmKG8udGV4dCs9dC50aWNrc3VmZml4KSxvfTt2YXIgcT1bImYiLCJwIiwibiIsIlx1MDNiYyIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIl07Ty5zdWJwbG90TWF0Y2g9L154KFswLTldKil5KFswLTldKikkLyxPLmdldFN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9W10sbz10Ll9mdWxsRGF0YXx8dC5kYXRhfHxbXTtmb3Iocj0wO3I8by5sZW5ndGg7cisrKXt2YXIgcz1vW3JdO2lmKCExIT09cy52aXNpYmxlJiYibGVnZW5kb25seSIhPT1zLnZpc2libGUmJih4LnRyYWNlSXMocywiY2FydGVzaWFuIil8fHgudHJhY2VJcyhzLCJnbDJkIikpKXtpPShzLnhheGlzfHwieCIpKyhzLnlheGlzfHwieSIpLC0xPT09YS5pbmRleE9mKGkpJiZhLnB1c2goaSl9fXZhciBsPU8ubGlzdCh0LCIiLCEwKTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXt2YXIgdT1sW3JdLGM9dS5faWQuY2hhckF0KDApLGg9ImZyZWUiPT09dS5hbmNob3I/IngiPT09Yz8ieSI6IngiOnUuYW5jaG9yLGY9Ty5nZXRGcm9tSWQodCxoKSxkPSExO2ZvcihuPTA7bjxhLmxlbmd0aDtuKyspaWYoZnVuY3Rpb24odCxlKXtyZXR1cm4tMSE9PXQuaW5kZXhPZihlLl9pZCl9KGFbbl0sdSkpe2Q9ITA7YnJlYWt9ImZyZWUiPT09dS5hbmNob3ImJmR8fGYmJihpPSJ4Ij09PWM/dS5faWQrZi5faWQ6Zi5faWQrdS5faWQsLTE9PT1hLmluZGV4T2YoaSkmJmEucHVzaChpKSl9dmFyIHA9Ty5zdWJwbG90TWF0Y2gsbT1bXTtmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWk9YVtyXSxwLnRlc3QoaSkmJm0ucHVzaChpKTtyZXR1cm4gbS5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaChwKSxuPWUubWF0Y2gocCk7cmV0dXJuIHJbMV09PT1uWzFdPysoclsyXXx8MSktKG5bMl18fDEpOisoclsxXXx8MCktKG5bMV18fDApfSksZT9PLmZpbmRTdWJwbG90c1dpdGhBeGlzKG0sZSk6bX0sTy5maW5kU3VicGxvdHNXaXRoQXhpcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgUmVnRXhwKCJ4Ij09PWUuX2lkLmNoYXJBdCgwKT8iXiIrZS5faWQrInkiOmUuX2lkKyIkIiksbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07ci50ZXN0KGEpJiZuLnB1c2goYSl9cmV0dXJuIG59LE8ubWFrZUNsaXBQYXRocz1mdW5jdGlvbih0KXt2YXIgZSxyLG49dC5fZnVsbExheW91dCxpPW4uX2RlZnMsYT17X29mZnNldDowLF9sZW5ndGg6bi53aWR0aCxfaWQ6IiJ9LG89e19vZmZzZXQ6MCxfbGVuZ3RoOm4uaGVpZ2h0LF9pZDoiIn0scz1PLmxpc3QodCwieCIsITApLGw9Ty5saXN0KHQsInkiLCEwKSx1PVtdO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspZm9yKHUucHVzaCh7eDpzW2VdLHk6b30pLHI9MDtyPGwubGVuZ3RoO3IrKykwPT09ZSYmdS5wdXNoKHt4OmEseTpsW3JdfSksdS5wdXNoKHt4OnNbZV0seTpsW3JdfSk7dmFyIGM9aS5zZWxlY3RBbGwoImcuY2xpcHMiKS5kYXRhKFswXSk7Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCk7dmFyIGg9Yy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLmRhdGEodSxmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSk7aC5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJheGVzY2xpcCIsITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4iY2xpcCIrbi5fdWlkK3QueC5faWQrdC55Ll9pZH0pLmFwcGVuZCgicmVjdCIpLGguZXhpdCgpLnJlbW92ZSgpLGguZWFjaChmdW5jdGlvbih0KXt5LnNlbGVjdCh0aGlzKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt4OnQueC5fb2Zmc2V0fHwwLHk6dC55Ll9vZmZzZXR8fDAsd2lkdGg6dC54Ll9sZW5ndGh8fDEsaGVpZ2h0OnQueS5fbGVuZ3RofHwxfSl9KX0sTy5kb1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPXUubDJwKHQueCk7cmV0dXJuIGU+MSYmZTx1Ll9sZW5ndGgtMX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInBhdGguIitMKS5kYXRhKCJpbnNpZGUiPT09dS50aWNrcz9xOlMsRSk7ZSYmdS50aWNrcz8oci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoTCwxKS5jbGFzc2VkKCJ0aWNrcyIsMSkuY2xhc3NlZCgiY3Jpc3AiLDEpLmNhbGwoay5zdHJva2UsdS50aWNrY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLEIrInB4IikuYXR0cigiZCIsZSksci5hdHRyKCJ0cmFuc2Zvcm0iLGQpLHIuZXhpdCgpLnJlbW92ZSgpKTpyLnJlbW92ZSgpfWZ1bmN0aW9uIGEocixuKXtmdW5jdGlvbiBpKHQsZSl7dC5lYWNoKGZ1bmN0aW9uKHQpe3ZhciByPXgoZSksbj15LnNlbGVjdCh0aGlzKSxpPW4uc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIiksYT1kKHQpKyhiKGUpJiYwIT0rZT8iIHJvdGF0ZSgiK2UrIiwiK2YodCkrIiwiKyhwKHQpLXQuZm9udFNpemUvMikrIikiOiIiKTtpZihpLmVtcHR5KCkpbi5zZWxlY3QoInRleHQiKS5hdHRyKHt0cmFuc2Zvcm06YSwidGV4dC1hbmNob3IiOnJ9KTtlbHNle3ZhciBvPUEuYkJveChpLm5vZGUoKSkud2lkdGgqe2VuZDotLjUsc3RhcnQ6LjV9W3JdO2kuYXR0cigidHJhbnNmb3JtIixhKyhvPyJ0cmFuc2xhdGUoIitvKyIsMCkiOiIiKSl9fSl9ZnVuY3Rpb24gYSgpe3JldHVybiB6Lmxlbmd0aCYmUHJvbWlzZS5hbGwoeil9ZnVuY3Rpb24gcygpe2lmKGkoaCx1LnRpY2thbmdsZSksIngiPT09ZyYmIWIodS50aWNrYW5nbGUpJiYoImxvZyIhPT11LnR5cGV8fCJEIiE9PVN0cmluZyh1LmR0aWNrKS5jaGFyQXQoMCkpKXt2YXIgdD1bXTtmb3IoaC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXkuc2VsZWN0KHRoaXMpLG49ci5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKSxpPXUubDJwKGUueCk7bi5lbXB0eSgpJiYobj1yLnNlbGVjdCgidGV4dCIpKTt2YXIgYT1BLmJCb3gobi5ub2RlKCkpO3QucHVzaCh7dG9wOjAsYm90dG9tOjEwLGhlaWdodDoxMCxsZWZ0OmktYS53aWR0aC8yLHJpZ2h0OmkrYS53aWR0aC8yKzIsd2lkdGg6YS53aWR0aCsyfSl9KSx2PTA7djx0Lmxlbmd0aC0xO3YrKylpZihfLmJCb3hJbnRlcnNlY3QodFt2XSx0W3YrMV0pKXtDPTMwO2JyZWFrfWlmKEMpe01hdGguYWJzKChTW1MubGVuZ3RoLTFdLngtU1swXS54KSp1Ll9tKS8oUy5sZW5ndGgtMSk8Mi41KlQmJihDPTkwKSxpKGgsQyl9dS5fbGFzdGFuZ2xlPUN9cmV0dXJuIG8oKSxlKyIgZG9uZSJ9ZnVuY3Rpb24gbCgpe2Z1bmN0aW9uIGUodCxlKXt0WzBdPU1hdGgubWluKHRbMF0sZVswXSksdFsxXT1NYXRoLm1heCh0WzFdLGVbMV0pfXZhciBuPXIubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih1Ll9ib3VuZGluZ0JveD17d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsbGVmdDpuLmxlZnQtaS5sZWZ0LHJpZ2h0Om4ucmlnaHQtaS5sZWZ0LHRvcDpuLnRvcC1pLnRvcCxib3R0b206bi5ib3R0b20taS50b3B9LG0pe3ZhciBhPXUuX2NvdW50ZXJTcGFuPVsxLzAsLTEvMF07Zm9yKHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIG89Yy5fcGxvdHNbbVt2XV0scz1vWyJ4Ij09PWc/InlheGlzIjoieGF4aXMiXTtlKGEsW3MuX29mZnNldCxzLl9vZmZzZXQrcy5fbGVuZ3RoXSl9ImZyZWUiPT09dS5hbmNob3ImJmUoYSwieCI9PT1nP1t1Ll9ib3VuZGluZ0JveC5ib3R0b20sdS5fYm91bmRpbmdCb3gudG9wXTpbdS5fYm91bmRpbmdCb3gucmlnaHQsdS5fYm91bmRpbmdCb3gubGVmdF0pfX12YXIgaD1yLnNlbGVjdEFsbCgiZy4iK0wpLmRhdGEoUyxFKTtpZighdS5zaG93dGlja2xhYmVsc3x8IWIobikpcmV0dXJuIGgucmVtb3ZlKCksdm9pZCBvKCk7dmFyIGYscCx4LE0sazsieCI9PT1nPyhrPSJib3R0b20iPT09Vj8xOi0xLGY9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHgrUiprfSxNPW4rKEQrSSkqayxwPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K00rdC5mb250U2l6ZSooImJvdHRvbSI9PT1WPzE6LS4yKX0seD1mdW5jdGlvbih0KXtyZXR1cm4gYih0KSYmMCE9PXQmJjE4MCE9PXQ/dCprPDA/ImVuZCI6InN0YXJ0IjoibWlkZGxlIn0pOihrPSJyaWdodCI9PT1WPzE6LTEscD1mdW5jdGlvbih0KXtyZXR1cm4gdC5keSt0LmZvbnRTaXplKlAtUiprfSxmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR4K24rKEQrSSsoOTA9PT1NYXRoLmFicyh1LnRpY2thbmdsZSk/dC5mb250U2l6ZS8yOjApKSprfSx4PWZ1bmN0aW9uKHQpe3JldHVybiBiKHQpJiY5MD09PU1hdGguYWJzKHQpPyJtaWRkbGUiOiJyaWdodCI9PT1WPyJzdGFydCI6ImVuZCJ9KTt2YXIgVD0wLEM9MCx6PVtdO2guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKEwsMSkuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPXkuc2VsZWN0KHRoaXMpLG49dC5fcHJvbWlzZXMubGVuZ3RoO3IuY2FsbCh3LnBvc2l0aW9uVGV4dCxmKGUpLHAoZSkpLmNhbGwoQS5mb250LGUuZm9udCxlLmZvbnRTaXplLGUuZm9udENvbG9yKS50ZXh0KGUudGV4dCkuY2FsbCh3LmNvbnZlcnRUb1RzcGFucyx0KSxuPXQuX3Byb21pc2VzW25dLG4/ei5wdXNoKHQuX3Byb21pc2VzLnBvcCgpLnRoZW4oZnVuY3Rpb24oKXtpKHIsdS50aWNrYW5nbGUpfSkpOmkocix1LnRpY2thbmdsZSl9KSxoLmV4aXQoKS5yZW1vdmUoKSxoLmVhY2goZnVuY3Rpb24odCl7VD1NYXRoLm1heChULHQuZm9udFNpemUpfSksaShoLHUuX2xhc3RhbmdsZXx8dS50aWNrYW5nbGUpO3ZhciBPPV8uc3luY09yQXN5bmMoW2EscyxsXSk7cmV0dXJuIE8mJk8udGhlbiYmdC5fcHJvbWlzZXMucHVzaChPKSxPfWZ1bmN0aW9uIG8oKXtpZighcil7dmFyIG4saSxhLG8scz1GLmdldEZyb21JZCh0LGUpLGw9eS5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLiIrZSsidGljayIpLHU9e3NlbGVjdGlvbjpsLHNpZGU6cy5zaWRlfSxoPWUuY2hhckF0KDApLGY9dC5fZnVsbExheW91dC5fc2l6ZSxkPXMudGl0bGVmb250LnNpemU7aWYobC5zaXplKCkpe3ZhciBwPUEuZ2V0VHJhbnNsYXRlKGwubm9kZSgpLnBhcmVudE5vZGUpO3Uub2Zmc2V0TGVmdD1wLngsdS5vZmZzZXRUb3A9cC55fXZhciBtPTEwKzEuNSpkKyhzLmxpbmV3aWR0aD9zLmxpbmV3aWR0aC0xOjApOyJ4Ij09PWg/KGk9ImZyZWUiPT09cy5hbmNob3I/e19vZmZzZXQ6Zi50KygxLShzLnBvc2l0aW9ufHwwKSkqZi5oLF9sZW5ndGg6MH06Ri5nZXRGcm9tSWQodCxzLmFuY2hvciksYT1zLl9vZmZzZXQrcy5fbGVuZ3RoLzIsbz0idG9wIj09PXMuc2lkZT8tbS1kKihzLnNob3d0aWNrbGFiZWxzPzE6MCk6aS5fbGVuZ3RoK20rZCoocy5zaG93dGlja2xhYmVscz8xLjU6LjUpLG8rPWkuX29mZnNldCxzLnJhbmdlc2xpZGVyJiZzLnJhbmdlc2xpZGVyLnZpc2libGUmJnMuX2JvdW5kaW5nQm94JiYobys9KGMuaGVpZ2h0LWMubWFyZ2luLmItYy5tYXJnaW4udCkqcy5yYW5nZXNsaWRlci50aGlja25lc3Mrcy5fYm91bmRpbmdCb3guaGVpZ2h0KSx1LnNpZGV8fCh1LnNpZGU9ImJvdHRvbSIpKTooaT0iZnJlZSI9PT1zLmFuY2hvcj97X29mZnNldDpmLmwrKHMucG9zaXRpb258fDApKmYudyxfbGVuZ3RoOjB9OkYuZ2V0RnJvbUlkKHQscy5hbmNob3IpLG89cy5fb2Zmc2V0K3MuX2xlbmd0aC8yLGE9InJpZ2h0Ij09PXMuc2lkZT9pLl9sZW5ndGgrbStkKihzLnNob3d0aWNrbGFiZWxzPzE6LjUpOi1tLWQqKHMuc2hvd3RpY2tsYWJlbHM/LjU6MCksYSs9aS5fb2Zmc2V0LG49e3JvdGF0ZToiLTkwIixvZmZzZXQ6MH0sdS5zaWRlfHwodS5zaWRlPSJsZWZ0IikpLE0uZHJhdyh0LGUrInRpdGxlIix7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnMuX25hbWUrIi50aXRsZSIsZGZsdE5hbWU6aC50b1VwcGVyQ2FzZSgpKyIgYXhpcyIsYXZvaWQ6dSx0cmFuc2Zvcm06bixhdHRyaWJ1dGVzOnt4OmEseTpvLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4hMD09PXQudmlzaWJsZSYmdC54YXhpcyt0LnlheGlzPT09ZSYmKCEoIXgudHJhY2VJcyh0LCJiYXIiKXx8dC5vcmllbnRhdGlvbiE9PXt4OiJoIix5OiJ2In1bZ10pfHx0LmZpbGwmJnQuZmlsbC5jaGFyQXQodC5maWxsLmxlbmd0aC0xKT09PWcpfWZ1bmN0aW9uIGwoZSxyLGkpe3ZhciBhPWUuZ3JpZGxheWVyLG89ZS56ZXJvbGluZWxheWVyLGw9ZVsiaGlkZWdyaWQiK2ddP1tdOnEsYz11Ll9ncmlkcGF0aHx8Ik0wLDAiKygieCI9PT1nPyJ2IjoiaCIpK3IuX2xlbmd0aCxoPWEuc2VsZWN0QWxsKCJwYXRoLiIrQykuZGF0YSghMT09PXUuc2hvd2dyaWQ/W106bCxFKTtpZihoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChDLDEpLmNsYXNzZWQoImNyaXNwIiwxKS5hdHRyKCJkIixjKS5lYWNoKGZ1bmN0aW9uKHQpe3UuemVyb2xpbmUmJigibGluZWFyIj09PXUudHlwZXx8Ii0iPT09dS50eXBlKSYmTWF0aC5hYnModC54KTx1LmR0aWNrLzEwMCYmeS5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSxoLmF0dHIoInRyYW5zZm9ybSIsZCkuY2FsbChrLnN0cm9rZSx1LmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixqKyJweCIpLGguZXhpdCgpLnJlbW92ZSgpLG8pe2Zvcih2YXIgZj0hMSxwPTA7cDx0Ll9mdWxsRGF0YS5sZW5ndGg7cCsrKWlmKHModC5fZnVsbERhdGFbcF0saSkpe2Y9ITA7YnJlYWt9dmFyIG09Xy5zaW1wbGVNYXAodS5yYW5nZSx1LnIybCksdj1tWzBdKm1bMV08PTAmJnUuemVyb2xpbmUmJigibGluZWFyIj09PXUudHlwZXx8Ii0iPT09dS50eXBlKSYmbC5sZW5ndGgmJihmfHxuKHt4OjB9KXx8IXUuc2hvd2xpbmUpLGI9by5zZWxlY3RBbGwoInBhdGguIit6KS5kYXRhKHY/W3t4OjB9XTpbXSk7Yi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoeiwxKS5jbGFzc2VkKCJ6bCIsMSkuY2xhc3NlZCgiY3Jpc3AiLDEpLmF0dHIoImQiLGMpLGIuYXR0cigidHJhbnNmb3JtIixkKS5jYWxsKGsuc3Ryb2tlLHUuemVyb2xpbmVjb2xvcnx8ay5kZWZhdWx0TGluZSkuc3R5bGUoInN0cm9rZS13aWR0aCIsTisicHgiKSxiLmV4aXQoKS5yZW1vdmUoKX19dmFyIHUsYz10Ll9mdWxsTGF5b3V0LGg9ITE7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXU9ZSxlPXUuX2lkLGg9ITA7ZWxzZSBpZih1PU8uZ2V0RnJvbUlkKHQsZSksInJlZHJhdyI9PT1lJiZjLl9wYXBlci5zZWxlY3RBbGwoImcuc3VicGxvdCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9Yy5fcGxvdHNbdF0scj1lLnhheGlzLG49ZS55YXhpcztlLnhheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIityLl9pZCsidGljayIpLnJlbW92ZSgpLGUueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK24uX2lkKyJ0aWNrIikucmVtb3ZlKCksZS5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS56ZXJvbGluZWxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnJlbW92ZSgpfSksIWV8fCJyZWRyYXciPT09ZSlyZXR1cm4gXy5zeW5jT3JBc3luYyhPLmxpc3QodCwiIiwhMCkubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBmdW5jdGlvbigpe2lmKHIuX2lkKXt2YXIgbj1PLmRvVGlja3ModCxyLl9pZCk7cmV0dXJuInJlZHJhdyI9PT1lJiYoci5fcj1yLnJhbmdlLnNsaWNlKCksci5fcmw9Xy5zaW1wbGVNYXAoci5fcixyLnIybCkpLG59fX0pKTt1LnRpY2tmb3JtYXR8fCgtMT09PVsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXS5pbmRleE9mKHUuZXhwb25lbnRmb3JtYXQpJiYodS5leHBvbmVudGZvcm1hdD0iZSIpLC0xPT09WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0uaW5kZXhPZih1LnNob3dleHBvbmVudCkmJih1LnNob3dleHBvbmVudD0iYWxsIikpLHUuc2V0U2NhbGUoKTt2YXIgZixkLHAsbSx2LGc9ZS5jaGFyQXQoMCksVD1PLmNvdW50ZXJMZXR0ZXIoZSksUz1PLmNhbGNUaWNrcyh1KSxFPWZ1bmN0aW9uKHQpe3JldHVyblt0LnRleHQsdC54LHUubWlycm9yXS5qb2luKCJfIil9LEw9ZSsidGljayIsQz1lKyJncmlkIix6PWUrInpsIixJPSh1LmxpbmV3aWR0aHx8MSkvMixEPSJvdXRzaWRlIj09PXUudGlja3M/dS50aWNrbGVuOjAsUj0wLGo9QS5jcmlzcFJvdW5kKHQsdS5ncmlkd2lkdGgsMSksTj1BLmNyaXNwUm91bmQodCx1Lnplcm9saW5ld2lkdGgsaiksQj1BLmNyaXNwUm91bmQodCx1LnRpY2t3aWR0aCwxKTtpZih1Ll9jb3VudGVyYW5nbGUmJiJvdXRzaWRlIj09PXUudGlja3Mpe3ZhciBVPXUuX2NvdW50ZXJhbmdsZSpNYXRoLlBJLzE4MDtEPXUudGlja2xlbipNYXRoLmNvcyhVKSsxLFI9dS50aWNrbGVuKk1hdGguc2luKFUpfWlmKHUuc2hvd3RpY2tsYWJlbHMmJigib3V0c2lkZSI9PT11LnRpY2tzfHx1LnNob3dsaW5lKSYmKEQrPS4yKnUudGlja2ZvbnQuc2l6ZSksIngiPT09ZylmPVsiYm90dG9tIiwidG9wIl0sZD1mdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdS5sMnAodC54KSsiLDApIn0scD1mdW5jdGlvbih0LGUpe2lmKHUuX2NvdW50ZXJhbmdsZSl7dmFyIHI9dS5fY291bnRlcmFuZ2xlKk1hdGguUEkvMTgwO3JldHVybiJNMCwiK3QrImwiK01hdGguc2luKHIpKmUrIiwiK01hdGguY29zKHIpKmV9cmV0dXJuIk0wLCIrdCsidiIrZX07ZWxzZXtpZigieSIhPT1nKXJldHVybiB2b2lkIF8ud2FybigiVW5yZWNvZ25pemVkIGRvVGlja3MgYXhpczoiLGUpO2Y9WyJsZWZ0IiwicmlnaHQiXSxkPWZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoMCwiK3UubDJwKHQueCkrIikifSxwPWZ1bmN0aW9uKHQsZSl7aWYodS5fY291bnRlcmFuZ2xlKXt2YXIgcj11Ll9jb3VudGVyYW5nbGUqTWF0aC5QSS8xODA7cmV0dXJuIk0iK3QrIiwwbCIrTWF0aC5jb3MocikqZSsiLCIrLU1hdGguc2luKHIpKmV9cmV0dXJuIk0iK3QrIiwwaCIrZX19dmFyIFY9dS5zaWRlfHxmWzBdLEg9Wy0xLDEsVj09PWZbMV0/MTotMV07aWYoImluc2lkZSIhPT11LnRpY2tzPT0oIngiPT09ZykmJihIPUgubWFwKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpLHUudmlzaWJsZSl7dmFyIHE9Uy5maWx0ZXIobik7aWYoaCl7aWYoaSh1Ll9heGlzbGF5ZXIscCh1Ll9wb3MrSSpIWzJdLEhbMl0qdS50aWNrbGVuKSksdS5fY291bnRlcmF4aXMpe2woe2dyaWRsYXllcjp1Ll9ncmlkbGF5ZXIsemVyb2xpbmVsYXllcjp1Ll96ZXJvbGluZWxheWVyfSx1Ll9jb3VudGVyYXhpcyl9cmV0dXJuIGEodS5fYXhpc2xheWVyLHUuX3Bvcyl9bT1PLmdldFN1YnBsb3RzKHQsdSk7dmFyIEc9bS5tYXAoZnVuY3Rpb24odCl7dmFyIGU9Yy5fcGxvdHNbdF07aWYoYy5faGFzKCJjYXJ0ZXNpYW4iKSl7dmFyIHI9ZVtnKyJheGlzbGF5ZXIiXSxuPXUuX2xpbmVwb3NpdGlvbnNbdF18fFtdLG89ZVtUKyJheGlzIl0scz1vLl9pZD09PXUuYW5jaG9yLGg9WyExLCExLCExXSxkPSIiO2lmKCJhbGx0aWNrcyI9PT11Lm1pcnJvcj9oPVshMCwhMCwhMV06cyYmKCJ0aWNrcyI9PT11Lm1pcnJvcj9oPVshMCwhMCwhMV06aFtmLmluZGV4T2YoVildPSEwKSx1Lm1pcnJvcnMpZm9yKHY9MDt2PDI7disrKXt2YXIgbT11Lm1pcnJvcnNbby5faWQrZlt2XV07InRpY2tzIiE9PW0mJiJsYWJlbHMiIT09bXx8KGhbdl09ITApfXJldHVybiB2b2lkIDAhPT1uWzJdJiYoaFsyXT0hMCksaC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bltlXSxpPUhbZV07dCYmYihyKSYmKGQrPXAocitJKmksaSp1LnRpY2tsZW4pKX0pLGkocixkKSxsKGUsbyx0KSxhKHIsblszXSl9fSkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0LnRoZW59KTtyZXR1cm4gRy5sZW5ndGg/UHJvbWlzZS5hbGwoRyk6MH19LE8uc3dhcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1wKHQsZSksbj0wO248ci5sZW5ndGg7bisrKXYodCxyW25dLngscltuXS55KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy90aXRsZXMiOjY5MSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6Njk4LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9heGlzX2F1dG90eXBlIjo3NjUsIi4vYXhpc19pZHMiOjc2NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuL2xheW91dF9kZWZhdWx0cyI6Nzc2LCIuL3NldF9jb252ZXJ0Ijo3ODEsZDM6MTIwLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7aWYoIXQpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYobyh0W2VdKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByLG49MCxpPTAsYT1NYXRoLm1heCgxLCh0Lmxlbmd0aC0xKS8xZTMpLGw9MDtsPHQubGVuZ3RoO2wrPWEpcj10W01hdGgucm91bmQobCldLHMuaXNEYXRlVGltZShyLGUpJiYobis9MSksbyhyKSYmKGkrPTEpO3JldHVybiBuPjIqaX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZSxyPU1hdGgubWF4KDEsKHQubGVuZ3RoLTEpLzFlMyksbj0wLGk9MCxhPTA7YTx0Lmxlbmd0aDthKz1yKWU9dFtNYXRoLnJvdW5kKGEpXSxzLmNsZWFuTnVtYmVyKGUpIT09bD9uKys6InN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWUmJiJOb25lIiE9PWUmJmkrKztyZXR1cm4gaT4yKm59dmFyIG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0LGUpPyJkYXRlIjphKHQpPyJjYXRlZ29yeSI6bih0KT8ibGluZWFyIjoiLSJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjQsImZhc3QtaXNudW1lcmljIjoxMjl9XSw3NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLm1peCxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmxpZ2h0RnJhY3Rpb24scz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSx1PXQoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksYz10KCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxoPXQoIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxmPXQoIi4vc2V0X2NvbnZlcnQiKSxkPXQoIi4vb3JkZXJlZF9jYXRlZ29yaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHAsbSl7ZnVuY3Rpb24gdihyLG4pe3JldHVybiBhLmNvZXJjZTIodCxlLHMscixuKX12YXIgZz1wLmxldHRlcix5PXAuZm9udHx8e30sYj0iQ2xpY2sgdG8gZW50ZXIgIisocC50aXRsZXx8Zy50b1VwcGVyQ2FzZSgpKyIgYXhpcyIpKyIgdGl0bGUiLHg9cigidmlzaWJsZSIsIXAuY2hlYXRlcm9ubHkpLF89ZS50eXBlO2lmKCJkYXRlIj09PV8pe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLHAuY2FsZW5kYXIpfWlmKGYoZSxtKSxyKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJnIoInJhbmdlbW9kZSIpLHIoInJhbmdlIiksZS5jbGVhblJhbmdlKCksaCh0LGUsciksZS5faW5pdGlhbENhdGVnb3JpZXM9ImNhdGVnb3J5Ij09PV8/ZChnLGUuY2F0ZWdvcnlvcmRlcixlLmNhdGVnb3J5YXJyYXkscC5kYXRhKTpbXSwheClyZXR1cm4gZTt2YXIgdz1yKCJjb2xvciIpLE09dz09PXQuY29sb3I/dzp5LmNvbG9yO3IoInRpdGxlIixiKSxhLmNvZXJjZUZvbnQociwidGl0bGVmb250Iix7ZmFtaWx5OnkuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqeS5zaXplKSxjb2xvcjpNfSksbCh0LGUscixfKSxjKHQsZSxyLF8scCksdSh0LGUscixwKTt2YXIgaz12KCJsaW5lY29sb3IiLHcpLEE9digibGluZXdpZHRoIiksVD1yKCJzaG93bGluZSIsISFrfHwhIUEpO1R8fChkZWxldGUgZS5saW5lY29sb3IsZGVsZXRlIGUubGluZXdpZHRoKSwoVHx8ZS50aWNrcykmJnIoIm1pcnJvciIpO3ZhciBTPXYoImdyaWRjb2xvciIsbih3LHAuYmdDb2xvcixvKS50b1JnYlN0cmluZygpKSxFPXYoImdyaWR3aWR0aCIpO3IoInNob3dncmlkIixwLnNob3dHcmlkfHwhIVN8fCEhRSl8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgTD12KCJ6ZXJvbGluZWNvbG9yIix3KSxDPXYoInplcm9saW5ld2lkdGgiKTtyZXR1cm4gcigiemVyb2xpbmUiLHAuc2hvd0dyaWR8fCEhTHx8ISFDKXx8KGRlbGV0ZSBlLnplcm9saW5lY29sb3IsZGVsZXRlIGUuemVyb2xpbmV3aWR0aCksZX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo3NjgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NSwiLi9vcmRlcmVkX2NhdGVnb3JpZXMiOjc3NywiLi9zZXRfY29udmVydCI6NzgxLCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjc4MiwiLi90aWNrX21hcmtfZGVmYXVsdHMiOjc4MywiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo3ODQsdGlueWNvbG9yMjo1MzJ9XSw3Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0LHIpe2Zvcih2YXIgbj1PYmplY3Qua2V5cyh0KSxpPS9eW3h5el1heGlzWzAtOV0qLyxhPVtdLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXTtlJiZzLmNoYXJBdCgwKSE9PWV8fGkudGVzdChzKSYmYS5wdXNoKHIrcyl9cmV0dXJuIGEuc29ydCgpfXZhciBpPXQuX2Z1bGxMYXlvdXQ7aWYoIWkpcmV0dXJuW107dmFyIG89bihpLCIiKTtpZihyKXJldHVybiBvO2Zvcih2YXIgcz1hLmdldFN1YnBsb3RJZHMoaSwiZ2wzZCIpfHxbXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF07bz1vLmNvbmNhdChuKGlbdV0sdSsiLiIpKX1yZXR1cm4gb312YXIgaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vcGxvdHMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi9jb25zdGFudHMiKTtyLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKHMuQVhfSURfUEFUVEVSTikpe3ZhciBlPXQuc3Vic3RyKDEpO3JldHVybiIxIj09PWUmJihlPSIiKSx0LmNoYXJBdCgwKSsiYXhpcyIrZX19LHIubmFtZTJpZD1mdW5jdGlvbih0KXtpZih0Lm1hdGNoKHMuQVhfTkFNRV9QQVRURVJOKSl7dmFyIGU9dC5zdWJzdHIoNSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApK2V9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCxlKXtpZih0Lm1hdGNoKHMuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSl7dmFyIHI9dC5zdWJzdHIoMSkucmVwbGFjZSgvXjArLywiIik7cmV0dXJuIjEiPT09ciYmKHI9IiIpLHQuY2hhckF0KDApK3J9fSxyLmxpc3Q9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKHQsZSxyKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIG8ubmVzdGVkUHJvcGVydHkodC5fZnVsbExheW91dCxlKS5nZXQoKX0pfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUsITApLm1hcChyLm5hbWUyaWQpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4ieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLG4pewp2YXIgYT10Ll9mdWxsTGF5b3V0LG89bnVsbDtpZihpLnRyYWNlSXMoZSwiZ2wzZCIpKXt2YXIgcz1lLnNjZW5lOyJzY2VuZSI9PT1zLnN1YnN0cigwLDUpJiYobz1hW3NdW24rImF4aXMiXSl9ZWxzZSBvPXIuZ2V0RnJvbUlkKHQsZVtuKyJheGlzIl18fG4pO3JldHVybiBvfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vcGxvdHMiOjgyNywiLi9jb25zdGFudHMiOjc2OX1dLDc2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCJjYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBuLGk9dC5jYXRlZ29yeWFycmF5LGE9QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MDthJiYobj0iYXJyYXkiKTt2YXIgbz1yKCJjYXRlZ29yeW9yZGVyIixuKTsiYXJyYXkiPT09byYmcigiY2F0ZWdvcnlhcnJheSIpLGF8fCJhcnJheSIhPT1vfHwoZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpfX19LHt9XSw3Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtpZFJlZ2V4Ont4Oi9eeChbMi05XXxbMS05XVswLTldKyk/JC8seTovXnkoWzItOV18WzEtOV1bMC05XSspPyQvfSxhdHRyUmVnZXg6e3g6L154YXhpcyhbMi05XXxbMS05XVswLTldKyk/JC8seTovXnlheGlzKFsyLTldfFsxLTldWzAtOV0rKT8kL30seEF4aXNNYXRjaDovXnhheGlzWzAtOV0qJC8seUF4aXNNYXRjaDovXnlheGlzWzAtOV0qJC8sQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qJC8sQVhfTkFNRV9QQVRURVJOOi9eW3h5el1heGlzWzAtOV0qJC8sTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsREZMVFJBTkdFWDpbLTEsNl0sREZMVFJBTkdFWTpbLTEsNF0sdHJhY2VMYXllckNsYXNzZXM6WyJpbWFnZWxheWVyIiwibWFwbGF5ZXIiLCJiYXJsYXllciIsImNhcnBldGxheWVyIiwiYm94bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7fV0sNzcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGksYSxzLGwsdT1uW28oZSldLnR5cGUsYz1bXTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKShzPXJbYV0pIT09ZSYmKGw9bltvKHMpXSxsLnR5cGUhPT11fHxsLmZpeGVkcmFuZ2V8fGMucHVzaChzKSk7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylpZih0W2ldW2VdKXt2YXIgaD10W2ldLGY9W107Zm9yKGE9MDthPGMubGVuZ3RoO2ErKylzPWNbYV0saFtzXXx8Zi5wdXNoKHMpO3JldHVybntsaW5rYWJsZUF4ZXM6Zix0aGlzR3JvdXA6aH19cmV0dXJue2xpbmthYmxlQXhlczpjLHRoaXNHcm91cDpudWxsfX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsdTtudWxsPT09ZT8oZT17fSxlW3JdPTEsdT10Lmxlbmd0aCx0LnB1c2goZSkpOnU9dC5pbmRleE9mKGUpO3ZhciBjPU9iamVjdC5rZXlzKGUpO2ZvcihhPTA7YTx0Lmxlbmd0aDthKyspaWYocz10W2FdLGEhPT11JiZzW25dKXt2YXIgaD1zW25dO2ZvcihvPTA7bzxjLmxlbmd0aDtvKyspbD1jW29dLHNbbF09aCppKmVbbF07cmV0dXJuIHZvaWQgdC5zcGxpY2UodSwxKX1pZigxIT09aSlmb3Iobz0wO288Yy5sZW5ndGg7bysrKWVbY1tvXV0qPWk7ZVtuXT0xfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi9heGlzX2lkcyIpLmlkMm5hbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyl7dmFyIGw9cy5fYXhpc0NvbnN0cmFpbnRHcm91cHMsdT1lLl9pZCxjPXUuY2hhckF0KDApO2lmKCFlLmZpeGVkcmFuZ2UmJihyKCJjb25zdHJhaW4iKSxhLmNvZXJjZSh0LGUse2NvbnN0cmFpbnRvd2FyZDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOiJ4Ij09PWM/WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXTpbImJvdHRvbSIsIm1pZGRsZSIsInRvcCJdLGRmbHQ6IngiPT09Yz8iY2VudGVyIjoibWlkZGxlIn19LCJjb25zdHJhaW50b3dhcmQiKSx0LnNjYWxlYW5jaG9yKSl7dmFyIGg9bihsLHUsbyxzKSxmPWEuY29lcmNlKHQsZSx7c2NhbGVhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpoLmxpbmthYmxlQXhlc319LCJzY2FsZWFuY2hvciIpO2lmKGYpe3ZhciBkPXIoInNjYWxlcmF0aW8iKTtkfHwoZD1lLnNjYWxlcmF0aW89MSksaShsLGgudGhpc0dyb3VwLHUsZixkKX1lbHNlLTEhPT1vLmluZGV4T2YodC5zY2FsZWFuY2hvcikmJmEud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoZSB0YXJnZXRheGlzIGhhcyBmaXhlZCByYW5nZS4nKX19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2F4aXNfaWRzIjo3Njd9XSw3NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQuX2lucHV0RG9tYWluLG49c1t0LmNvbnN0cmFpbnRvd2FyZF0saT1yWzBdKyhyWzFdLXJbMF0pKm47dC5kb21haW49dC5faW5wdXQuZG9tYWluPVtpKyhyWzBdLWkpL2UsaSsoclsxXS1pKS9lXX12YXIgaT10KCIuL2F4aXNfaWRzIikuaWQybmFtZSxhPXQoIi4vc2NhbGVfem9vbSIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkFMTU9TVF9FUVVBTCxzPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX0JMO3IuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLHMsbCx1LGMsaCxmPXQuX2Z1bGxMYXlvdXQsZD1mLl9heGlzQ29uc3RyYWludEdyb3Vwcztmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKXt2YXIgcD1kW2VdLG09T2JqZWN0LmtleXMocCksdj0xLzAsZz0wLHk9MS8wLGI9e30seD17fSxfPSExO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspcz1tW3JdLHhbc109bD1mW2kocyldLGwuX2lucHV0RG9tYWluP2wuZG9tYWluPWwuX2lucHV0RG9tYWluLnNsaWNlKCk6bC5faW5wdXREb21haW49bC5kb21haW4uc2xpY2UoKSxsLl9pbnB1dFJhbmdlfHwobC5faW5wdXRSYW5nZT1sLnJhbmdlLnNsaWNlKCkpLGwuc2V0U2NhbGUoKSxiW3NdPXU9TWF0aC5hYnMobC5fbSkvcFtzXSx2PU1hdGgubWluKHYsdSksImRvbWFpbiIhPT1sLmNvbnN0cmFpbiYmbC5fY29uc3RyYWludFNocmlua2FibGV8fCh5PU1hdGgubWluKHksdSkpLGRlbGV0ZSBsLl9jb25zdHJhaW50U2hyaW5rYWJsZSxnPU1hdGgubWF4KGcsdSksImRvbWFpbiI9PT1sLmNvbnN0cmFpbiYmKF89ITApO2lmKCEodj5vKmcpfHxfKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYocz1tW3JdLHU9YltzXSxsPXhbc10sYz1sLmNvbnN0cmFpbix1IT09eXx8ImRvbWFpbiI9PT1jKWlmKGg9dS95LCJyYW5nZSI9PT1jKWEobCxoKTtlbHNle3ZhciB3PWwuX2lucHV0RG9tYWluLE09KGwuZG9tYWluWzFdLWwuZG9tYWluWzBdKS8od1sxXS13WzBdKSxrPShsLnIybChsLnJhbmdlWzFdKS1sLnIybChsLnJhbmdlWzBdKSkvKGwucjJsKGwuX2lucHV0UmFuZ2VbMV0pLWwucjJsKGwuX2lucHV0UmFuZ2VbMF0pKTtpZigoaC89TSkqazwxKXtsLmRvbWFpbj1sLl9pbnB1dC5kb21haW49dy5zbGljZSgpLGEobCxoKTtjb250aW51ZX1pZihrPDEmJihsLnJhbmdlPWwuX2lucHV0LnJhbmdlPWwuX2lucHV0UmFuZ2Uuc2xpY2UoKSxoKj1rKSxsLmF1dG9yYW5nZSYmbC5fbWluLmxlbmd0aCYmbC5fbWF4Lmxlbmd0aCl7dmFyIEE9bC5yMmwobC5yYW5nZVswXSksVD1sLnIybChsLnJhbmdlWzFdKSxTPShBK1QpLzIsRT1TLEw9UyxDPU1hdGguYWJzKFQtUyksej1TLUMqaCoxLjAwMDEsST1TK0MqaCoxLjAwMDE7bihsLGgpLGwuc2V0U2NhbGUoKTt2YXIgRCxQLE89TWF0aC5hYnMobC5fbSk7Zm9yKFA9MDtQPGwuX21pbi5sZW5ndGg7UCsrKShEPWwuX21pbltQXS52YWwtbC5fbWluW1BdLnBhZC9PKT56JiZEPEUmJihFPUQpO2ZvcihQPTA7UDxsLl9tYXgubGVuZ3RoO1ArKykoRD1sLl9tYXhbUF0udmFsK2wuX21heFtQXS5wYWQvTyk8SSYmRD5MJiYoTD1EKTt2YXIgUj0oTC1FKS8oMipDKTtoLz1SLEU9bC5sMnIoRSksTD1sLmwycihMKSxsLnJhbmdlPWwuX2lucHV0LnJhbmdlPUE8VD9bRSxMXTpbTCxFXX1uKGwsaCl9fX0sci5jbGVhbj1mdW5jdGlvbih0LGUpe2lmKGUuX2lucHV0RG9tYWluKXtmb3IodmFyIHI9ITEsbj1lLl9pZCxpPXQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLGE9MDthPGkubGVuZ3RoO2ErKylpZihpW2FdW25dKXtyPSEwO2JyZWFrfXImJiJkb21haW4iPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY5OCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuL2F4aXNfaWRzIjo3NjcsIi4vc2NhbGVfem9vbSI6Nzc5fV0sNzcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyl7dmFyIHM9dC5kcmFnbGF5ZXIuc2VsZWN0QWxsKCIuIitlKS5kYXRhKFswXSk7cmV0dXJuIHMuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJkcmFnIiwhMCkuY2xhc3NlZChlLCEwKS5zdHlsZSh7ZmlsbDoidHJhbnNwYXJlbnQiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJkYXRhLXN1YnBsb3QiLHQuaWQpLHMuY2FsbChTLnNldFJlY3QsbixpLGEsbykuY2FsbChFLHIpLHMubm9kZSgpfWZ1bmN0aW9uIGkodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIGEodCxlKXt2YXIgcixuPXQucmFuZ2VbZV0saT1NYXRoLmFicyhuLXQucmFuZ2VbMS1lXSk7cmV0dXJuImRhdGUiPT09dC50eXBlP246ImxvZyI9PT10LnR5cGU/KHI9TWF0aC5jZWlsKE1hdGgubWF4KDAsLU1hdGgubG9nKGkpL01hdGguTE4xMCkpKzMseC5mb3JtYXQoIi4iK3IrImciKShNYXRoLnBvdygxMCxuKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMobikpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKzQseC5mb3JtYXQoIi4iK1N0cmluZyhyKSsiZyIpKG4pKX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7dmFyIGEscyxsLHU7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKylzPXRbYV0scy5maXhlZHJhbmdlfHwobD1zLl9ybFswXSx1PXMuX3JsWzFdLWwscy5yYW5nZT1bcy5sMnIobCt1KmUpLHMubDJyKGwrdSpyKV0sbltzLl9uYW1lKyIucmFuZ2VbMF0iXT1zLnJhbmdlWzBdLG5bcy5fbmFtZSsiLnJhbmdlWzFdIl09cy5yYW5nZVsxXSk7aWYoaSYmaS5sZW5ndGgpe3ZhciBjPShlKygxLXIpKS8yO28oaSxjLDEtYyxuKX19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZml4ZWRyYW5nZXx8KG4ucmFuZ2U9W24ubDJyKG4uX3JsWzBdLWUvbi5fbSksbi5sMnIobi5fcmxbMV0tZS9uLl9tKV0pfX1mdW5jdGlvbiBsKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0PyJuc2V3Ij09PXQ/InBhbiI9PT1lPyJtb3ZlIjoiY3Jvc3NoYWlyIjp0LnRvTG93ZXJDYXNlKCkrIi1yZXNpemUiOiJwb2ludGVyIn1mdW5jdGlvbiBjKHQsZSxyLG4saSl7cmV0dXJuIHQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94Iikuc3R5bGUoe2ZpbGw6ZT4uMj8icmdiYSgwLDAsMCwwKSI6InJnYmEoMjU1LDI1NSwyNTUsMCkiLCJzdHJva2Utd2lkdGgiOjB9KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIityKyIsICIrbisiKSIpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOlQuYmFja2dyb3VuZCxzdHJva2U6VC5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UrIiwgIityKyIpIikuYXR0cigiZCIsIk0wLDBaIil9ZnVuY3Rpb24gZih0KXt0LnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9ZnVuY3Rpb24gZCh0LGUscixuLGksYSl7dC5hdHRyKCJkIixuKyJNIityLmwrIiwiK3IudCsidiIrci5oKyJoIityLncrInYtIityLmgrImgtIityLncrIloiKSxpfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLGE+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIHAodCl7eC5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBtKHQpe3JldHVybi0xIT09WyJsYXNzbyIsInNlbGVjdCJdLmluZGV4T2YodCl9ZnVuY3Rpb24gdih0LGUpe3JldHVybiJNIisodC5sLS41KSsiLCIrKGUtai0uNSkrImgtM3YiKygyKmorMSkrImgzWk0iKyh0LnIrLjUpKyIsIisoZS1qLS41KSsiaDN2IisoMipqKzEpKyJoLTNaIn1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuIk0iKyhlLWotLjUpKyIsIisodC50LS41KSsidi0zaCIrKDIqaisxKSsidjNaTSIrKGUtai0uNSkrIiwiKyh0LmIrLjUpKyJ2M2giKygyKmorMSkrInYtM1oifWZ1bmN0aW9uIHkodCl7dmFyIGU9TWF0aC5mbG9vcihNYXRoLm1pbih0LmItdC50LHQuci10LmwsaikvMik7cmV0dXJuIk0iKyh0LmwtMy41KSsiLCIrKHQudC0uNStlKSsiaDN2IistZSsiaCIrZSsidi0zaC0iKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC50LS41K2UpKyJoLTN2IistZSsiaCIrLWUrInYtM2giKyhlKzMpKyJaTSIrKHQuciszLjUpKyIsIisodC5iKy41LWUpKyJoLTN2IitlKyJoIistZSsidjNoIisoZSszKSsiWk0iKyh0LmwtMy41KSsiLCIrKHQuYisuNS1lKSsiaDN2IitlKyJoIitlKyJ2M2gtIisoZSszKSsiWiJ9ZnVuY3Rpb24gYih0LGUscil7dmFyIG4saSxhLG8scyxsLHU9ITEsYz17fSxoPXt9O2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspe2ZvcihvPXRbbl0saT0wO2k8ZS5sZW5ndGg7aSsrKWlmKG9bZVtpXV0pe2ZvcihzIGluIG8pLTE9PT0oIngiPT09cy5jaGFyQXQoMCk/ZTpyKS5pbmRleE9mKHMpJiYoY1tzXT0xKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKW9bclthXV0mJih1PSEwKX1mb3IoaT0wO2k8ci5sZW5ndGg7aSsrKWlmKG9bcltpXV0pZm9yKGwgaW4gbyktMT09PSgieCI9PT1sLmNoYXJBdCgwKT9lOnIpLmluZGV4T2YobCkmJihoW2xdPTEpfXJldHVybiB1JiYoay5leHRlbmRGbGF0KGMsaCksaD17fSkse3g6Yyx5OmgseHk6dX19dmFyIHg9dCgiZDMiKSxfPXQoInRpbnljb2xvcjIiKSx3PXQoIi4uLy4uL3Bsb3RseSIpLE09dCgiLi4vLi4vcmVnaXN0cnkiKSxrPXQoIi4uLy4uL2xpYiIpLEE9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksVD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksUz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxFPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxMPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxDPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5GUk9NX1RMLHo9dCgiLi4vcGxvdHMiKSxJPXQoIi4vYXhlcyIpLmRvVGlja3MsRD10KCIuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLFA9dCgiLi9zZWxlY3QiKSxPPXQoIi4vc2NhbGVfem9vbSIpLFI9dCgiLi9jb25zdGFudHMiKSxGPVIuTUlORFJBRyxqPVIuTUlOWk9PTSxOPSEwO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixULEUsQixVLFYpe2Z1bmN0aW9uIEgoKXtldD1bZS54YXhpc10scnQ9W2UueWF4aXNdO3ZhciByPWV0WzBdLG49cnRbMF07YXQ9ci5fbGVuZ3RoLG90PW4uX2xlbmd0aDt2YXIgYT1kdC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsbz1bci5faWRdLHM9W24uX2lkXTt0dD1bZV0uY29uY2F0KFUmJlY/ZS5vdmVybGF5czpbXSk7Zm9yKHZhciBsPTE7bDx0dC5sZW5ndGg7bCsrKXt2YXIgYz10dFtsXS54YXhpcyxoPXR0W2xdLnlheGlzOy0xPT09ZXQuaW5kZXhPZihjKSYmKGV0LnB1c2goYyksby5wdXNoKGMuX2lkKSksLTE9PT1ydC5pbmRleE9mKGgpJiYocnQucHVzaChoKSxzLnB1c2goaC5faWQpKX1zdD1pKGV0LFYpLGx0PWkocnQsVSksdXQ9dShsdCtzdCxkdC5kcmFnbW9kZSksbnQ9ci5fb2Zmc2V0LGl0PW4uX29mZnNldDt2YXIgZj1iKGEsbyxzKTtjdD1mLnh5LGh0PVtdO2Zvcih2YXIgZCBpbiBmLngpaHQucHVzaChEKHQsZCkpO2Z0PVtdO2Zvcih2YXIgcCBpbiBmLnkpZnQucHVzaChEKHQscCkpfWZ1bmN0aW9uIHEoZSxyLG4pe3ZhciBpPXZ0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3l0PXItaS5sZWZ0LGJ0PW4taS50b3AseHQ9e2w6eXQscjp5dCx3OjAsdDpidCxiOmJ0LGg6MH0sX3Q9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6Xyh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksd3Q9Ik0wLDBIIithdCsiViIrb3QrIkgwVjAiLE10PSExLGt0PSJ4eSIsQXQ9YyhwdCxfdCxudCxpdCx3dCksVHQ9aChwdCxudCxpdCksZihwdCl9ZnVuY3Rpb24gRyhlLHIpe2Z1bmN0aW9uIG4oKXtrdD0iIix4dC5yPXh0LmwseHQudD14dC5iLFR0LmF0dHIoImQiLCJNMCwwWiIpfWlmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuITE7dmFyIGk9TWF0aC5tYXgoMCxNYXRoLm1pbihhdCxlK3l0KSksYT1NYXRoLm1heCgwLE1hdGgubWluKG90LHIrYnQpKSxvPU1hdGguYWJzKGkteXQpLHM9TWF0aC5hYnMoYS1idCk7eHQubD1NYXRoLm1pbih5dCxpKSx4dC5yPU1hdGgubWF4KHl0LGkpLHh0LnQ9TWF0aC5taW4oYnQsYSkseHQuYj1NYXRoLm1heChidCxhKSxjdD9vPmp8fHM+aj8oa3Q9Inh5IixvL2F0PnMvb3Q/KHM9bypvdC9hdCxidD5hP3h0LnQ9YnQtczp4dC5iPWJ0K3MpOihvPXMqYXQvb3QseXQ+aT94dC5sPXl0LW86eHQucj15dCtvKSxUdC5hdHRyKCJkIix5KHh0KSkpOm4oKTohbHR8fHM8TWF0aC5taW4oTWF0aC5tYXgoLjYqbyxGKSxqKT9vPEY/bigpOih4dC50PTAseHQuYj1vdCxrdD0ieCIsVHQuYXR0cigiZCIsdih4dCxidCkpKTohc3R8fG88TWF0aC5taW4oLjYqcyxqKT8oeHQubD0wLHh0LnI9YXQsa3Q9InkiLFR0LmF0dHIoImQiLGcoeHQseXQpKSk6KGt0PSJ4eSIsVHQuYXR0cigiZCIseSh4dCkpKSx4dC53PXh0LnIteHQubCx4dC5oPXh0LmIteHQudCxkKEF0LFR0LHh0LHd0LE10LF90KSxNdD0hMH1mdW5jdGlvbiBZKGUscil7aWYoTWF0aC5taW4oeHQuaCx4dC53KTwyKkYpcmV0dXJuIDI9PT1yJiZLKCkscCh0KTsieHkiIT09a3QmJiJ4IiE9PWt0fHxvKGV0LHh0LmwvYXQseHQuci9hdCxTdCxodCksInh5IiE9PWt0JiYieSIhPT1rdHx8byhydCwob3QteHQuYikvb3QsKG90LXh0LnQpL290LFN0LGZ0KSxwKHQpLFEoa3QpLE4mJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKGsubm90aWZpZXIoIkRvdWJsZS1jbGljayB0bzxicj56b29tIGJhY2sgb3V0IiwibG9uZyIpLE49ITEpfWZ1bmN0aW9uIFgoZSxyKXt2YXIgbj0xPT09KFUrVikubGVuZ3RoO2lmKGUpUSgpO2Vsc2UgaWYoMiE9PXJ8fG4pe2lmKDE9PT1yJiZuKXt2YXIgaT1VP3J0WzBdOmV0WzBdLG89InMiPT09VXx8InciPT09Vj8wOjEscz1pLl9uYW1lKyIucmFuZ2VbIitvKyJdIixsPWEoaSxvKSx1PSJsZWZ0IixjPSJtaWRkbGUiO2lmKGkuZml4ZWRyYW5nZSlyZXR1cm47VT8oYz0ibiI9PT1VPyJ0b3AiOiJib3R0b20iLCJyaWdodCI9PT1pLnNpZGUmJih1PSJyaWdodCIpKToiZSI9PT1WJiYodT0icmlnaHQiKSx0Ll9jb250ZXh0LnNob3dBeGlzUmFuZ2VFbnRyeUJveGVzJiZ4LnNlbGVjdCh2dCkuY2FsbChBLm1ha2VFZGl0YWJsZSx7Z2Q6dCxpbW1lZGlhdGU6ITAsYmFja2dyb3VuZDpkdC5wYXBlcl9iZ2NvbG9yLHRleHQ6U3RyaW5nKGwpLGZpbGw6aS50aWNrZm9udD9pLnRpY2tmb250LmNvbG9yOiIjNDQ0Iixob3Jpem9udGFsQWxpZ246dSx2ZXJ0aWNhbEFsaWduOmN9KS5vbigiZWRpdCIsZnVuY3Rpb24oZSl7dmFyIHI9aS5kMnIoZSk7dm9pZCAwIT09ciYmdy5yZWxheW91dCh0LHMscil9KX19ZWxzZSBLKCl9ZnVuY3Rpb24gVyhlKXtmdW5jdGlvbiByKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LmwycihhKyhlLWEpKnIpfWlmKCF0LmZpeGVkcmFuZ2Upe3ZhciBpPWsuc2ltcGxlTWFwKHQucmFuZ2UsdC5yMmwpLGE9aVswXSsoaVsxXS1pWzBdKSplO3QucmFuZ2U9aS5tYXAobil9fWlmKHQuX2NvbnRleHQuc2Nyb2xsWm9vbXx8ZHQuX2VuYWJsZXNjcm9sbHpvb20pe2lmKHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIGsucGF1c2VFdmVudChlKTt2YXIgbj10LnF1ZXJ5U2VsZWN0b3IoIi5wbG90bHkiKTtpZihIKCksIShuLnNjcm9sbEhlaWdodC1uLmNsaWVudEhlaWdodD4xMHx8bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoPjEwKSl7Y2xlYXJUaW1lb3V0KEx0KTt2YXIgaT0tZS5kZWx0YVk7aWYoaXNGaW5pdGUoaSl8fChpPWUud2hlZWxEZWx0YS8xMCksIWlzRmluaXRlKGkpKXJldHVybiB2b2lkIGsubG9nKCJEaWQgbm90IGZpbmQgd2hlZWwgbW90aW9uIGF0dHJpYnV0ZXM6ICIsZSk7dmFyIGEsbz1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgoaSwtMjApLDIwKS8xMDApLHM9enQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9KGUuY2xpZW50WC1zLmxlZnQpL3Mud2lkdGgsdT0ocy5ib3R0b20tZS5jbGllbnRZKS9zLmhlaWdodDtpZihWfHxjdCl7Zm9yKFZ8fChsPS41KSxhPTA7YTxldC5sZW5ndGg7YSsrKXIoZXRbYV0sbCxvKTtFdFsyXSo9byxFdFswXSs9RXRbMl0qbCooMS9vLTEpfWlmKFV8fGN0KXtmb3IoVXx8KHU9LjUpLGE9MDthPHJ0Lmxlbmd0aDthKyspcihydFthXSx1LG8pO0V0WzNdKj1vLEV0WzFdKz1FdFszXSooMS11KSooMS9vLTEpfXJldHVybiAkKEV0KSxKKFUsViksTHQ9c2V0VGltZW91dChmdW5jdGlvbigpe0V0PVswLDAsYXQsb3RdO3ZhciB0O3Q9Y3Q/Inh5IjooVj8ieCI6IiIpKyhVPyJ5IjoiIiksUSh0KX0sQ3QpLGsucGF1c2VFdmVudChlKX19fWZ1bmN0aW9uIFooZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtmb3IodmFyIG4saSxhPTEtZSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107aWYoIXMuZml4ZWRyYW5nZSl7bj1zLGk9cy5fcmxbYV0rKHMuX3JsW2VdLXMuX3JsW2FdKS9sKHIvcy5fbGVuZ3RoKTt2YXIgdT1zLmwycihpKTshMSE9PXUmJnZvaWQgMCE9PXUmJihzLnJhbmdlW2VdPXUpfX1yZXR1cm4gbi5fbGVuZ3RoKihuLl9ybFtlXS1pKS8obi5fcmxbZV0tbi5fcmxbYV0pfWlmKCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZihIKCksImV3Ij09PXN0fHwibnMiPT09bHQpcmV0dXJuIHN0JiZzKGV0LGUpLGx0JiZzKHJ0LHIpLCQoW3N0Py1lOjAsbHQ/LXI6MCxhdCxvdF0pLHZvaWQgSihsdCxzdCk7aWYoY3QmJnN0JiZsdCl7dmFyIGk9InciPT09c3Q9PSgibiI9PT1sdCk/MTotMSxhPShlL2F0K2kqci9vdCkvMjtlPWEqYXQscj1pKmEqb3R9InciPT09c3Q/ZT1uKGV0LDAsZSk6ImUiPT09c3Q/ZT1uKGV0LDEsLWUpOnN0fHwoZT0wKSwibiI9PT1sdD9yPW4ocnQsMSxyKToicyI9PT1sdD9yPW4ocnQsMCwtcik6bHR8fChyPTApO3ZhciBvPSJ3Ij09PXN0P2U6MCx1PSJuIj09PWx0P3I6MDtpZihjdCl7dmFyIGM7aWYoIXN0JiYxPT09bHQubGVuZ3RoKXtmb3IoYz0wO2M8ZXQubGVuZ3RoO2MrKylldFtjXS5yYW5nZT1ldFtjXS5fci5zbGljZSgpLE8oZXRbY10sMS1yL290KTtlPXIqYXQvb3Qsbz1lLzJ9aWYoIWx0JiYxPT09c3QubGVuZ3RoKXtmb3IoYz0wO2M8cnQubGVuZ3RoO2MrKylydFtjXS5yYW5nZT1ydFtjXS5fci5zbGljZSgpLE8ocnRbY10sMS1lL2F0KTtyPWUqb3QvYXQsdT1yLzJ9fSQoW28sdSxhdC1lLG90LXJdKSxKKGx0LHN0KX19ZnVuY3Rpb24gSihlLHIpe2Z1bmN0aW9uIG4odCl7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl0W2FdLmZpeGVkcmFuZ2V8fG8ucHVzaCh0W2FdLl9pZCl9ZnVuY3Rpb24gaShuLGkscyl7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIGw9blthXTtpZigociYmLTEhPT1vLmluZGV4T2YobC54cmVmKXx8ZSYmLTEhPT1vLmluZGV4T2YobC55cmVmKSkmJihpKHQsYSkscykpcmV0dXJufX12YXIgYSxvPVtdO2Zvcigocnx8Y3QpJiYobihldCksbihodCkpLChlfHxjdCkmJihuKHJ0KSxuKGZ0KSksU3Q9e30sYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdO0kodCxzLCEwKTt2YXIgbD1EKHQscyk7U3RbbC5fbmFtZSsiLnJhbmdlWzBdIl09bC5yYW5nZVswXSxTdFtsLl9uYW1lKyIucmFuZ2VbMV0iXT1sLnJhbmdlWzFdfWkoZHQuYW5ub3RhdGlvbnN8fFtdLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSksaShkdC5zaGFwZXN8fFtdLE0uZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJkcmF3T25lIikpLGkoZHQuaW1hZ2VzfHxbXSxNLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX1mdW5jdGlvbiBLKCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlLHIsbixpPXQuX2NvbnRleHQuZG91YmxlQ2xpY2ssYT0oc3Q/ZXQ6W10pLmNvbmNhdChsdD9ydDpbXSksbz17fTtpZigicmVzZXQrYXV0b3NpemUiPT09aSlmb3IoaT0iYXV0b3NpemUiLHI9MDtyPGEubGVuZ3RoO3IrKylpZihlPWFbcl0sZS5fcmFuZ2VJbml0aWFsJiYoZS5yYW5nZVswXSE9PWUuX3JhbmdlSW5pdGlhbFswXXx8ZS5yYW5nZVsxXSE9PWUuX3JhbmdlSW5pdGlhbFsxXSl8fCFlLl9yYW5nZUluaXRpYWwmJiFlLmF1dG9yYW5nZSl7aT0icmVzZXQiO2JyZWFrfWlmKCJhdXRvc2l6ZSI9PT1pKWZvcihyPTA7cjxhLmxlbmd0aDtyKyspZT1hW3JdLGUuZml4ZWRyYW5nZXx8KG9bZS5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTtlbHNlIGlmKCJyZXNldCI9PT1pKWZvcigoc3R8fGN0KSYmKGE9YS5jb25jYXQoaHQpKSxsdCYmIWN0JiYoYT1hLmNvbmNhdChmdCkpLGN0JiYoc3Q/bHR8fChhPWEuY29uY2F0KHJ0KSk6YT1hLmNvbmNhdChldCkpLHI9MDtyPGEubGVuZ3RoO3IrKyllPWFbcl0sZS5fcmFuZ2VJbml0aWFsPyhuPWUuX3JhbmdlSW5pdGlhbCxvW2UuX25hbWUrIi5yYW5nZVswXSJdPW5bMF0sb1tlLl9uYW1lKyIucmFuZ2VbMV0iXT1uWzFdKTpvW2UuX25hbWUrIi5hdXRvcmFuZ2UiXT0hMDt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksdy5yZWxheW91dCh0LG8pfX1mdW5jdGlvbiBRKGUpe3ZvaWQgMD09PWUmJihlPShWPyJ4IjoiIikrKFU/InkiOiIiKSksJChbMCwwLGF0LG90XSksay5zeW5jT3JBc3luYyhbei5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dy5yZWxheW91dCh0LFN0KX1dLHQpfWZ1bmN0aW9uICQodCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdC5maXhlZHJhbmdlPzA6ZCYmLTEhPT1odC5pbmRleE9mKHQpP2g6cCYmLTEhPT0oY3Q/aHQ6ZnQpLmluZGV4T2YodCk/ZjowfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gZT8odC5yYW5nZT10Ll9yLnNsaWNlKCksTyh0LGUpLG4odCxlKSk6MH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQuX2xlbmd0aCooMS1lKSpDW3QuY29uc3RyYWludG93YXJkfHwibWlkZGxlIl19dmFyIGksYSxvLHMsbCx1PWR0Ll9wbG90cyxjPU9iamVjdC5rZXlzKHUpLGg9dFsyXS9ldFswXS5fbGVuZ3RoLGY9dFszXS9ydFswXS5fbGVuZ3RoLGQ9Vnx8Y3QscD1VfHxjdDtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKXt2YXIgbT11W2NbaV1dLHY9bS54YXhpcyxnPW0ueWF4aXMseT1kJiYhdi5maXhlZHJhbmdlJiYtMSE9PWV0LmluZGV4T2YodiksYj1wJiYhZy5maXhlZHJhbmdlJiYtMSE9PXJ0LmluZGV4T2YoZyk7aWYoeT8oYT1oLHM9Vj90WzBdOm4odixhKSk6KGE9ZSh2KSxzPXIodixhKSksYj8obz1mLGw9VT90WzFdOm4oZyxvKSk6KG89ZShnKSxsPXIoZyxvKSksYXx8byl7YXx8KGE9MSksb3x8KG89MSk7dmFyIHg9di5fb2Zmc2V0LXMvYSxfPWcuX29mZnNldC1sL287ZHQuX2RlZnMuc2VsZWN0KCIjIittLmNsaXBJZCsiPiByZWN0IikuY2FsbChTLnNldFRyYW5zbGF0ZSxzLGwpLmNhbGwoUy5zZXRTY2FsZSxhLG8pO3ZhciB3PW0ucGxvdC5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIgLnBvaW50cywgLmJveGxheWVyIC5wb2ludHMiKTttLnBsb3QuY2FsbChTLnNldFRyYW5zbGF0ZSx4LF8pLmNhbGwoUy5zZXRTY2FsZSwxL2EsMS9vKSx3LnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChTLnNldFBvaW50R3JvdXBTY2FsZSxhLG8pLmNhbGwoUy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLG0pLHcuc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChTLnNldFRleHRQb2ludHNTY2FsZSxhLG8pLmNhbGwoUy5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLG0pfX19dmFyIHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LHV0LGN0LGh0LGZ0LGR0PXQuX2Z1bGxMYXlvdXQscHQ9dC5fZnVsbExheW91dC5fem9vbWxheWVyLG10PVUrVj09PSJuc2V3IjtIKCk7dmFyIHZ0PW4oZSxVK1YrImRyYWciLHV0LHIsVCxFLEIpO2lmKCFsdCYmIXN0JiYhbShkdC5kcmFnbW9kZSkpcmV0dXJuIHZ0Lm9ubW91c2Vkb3duPW51bGwsdnQuc3R5bGUucG9pbnRlckV2ZW50cz1tdD8iYWxsIjoibm9uZSIsdnQ7dmFyIGd0PXtlbGVtZW50OnZ0LGdkOnQscGxvdGluZm86ZSxwcmVwRm46ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQuZHJhZ21vZGU7bXQ/ZS5zaGlmdEtleSYmKGk9InBhbiI9PT1pPyJ6b29tIjoicGFuIik6aT0icGFuIixndC5taW5EcmFnPSJsYXNzbyI9PT1pPzE6dm9pZCAwLCJ6b29tIj09PWk/KGd0Lm1vdmVGbj1HLGd0LmRvbmVGbj1ZLGd0Lm1pbkRyYWc9MSxxKGUscixuKSk6InBhbiI9PT1pPyhndC5tb3ZlRm49WixndC5kb25lRm49WCxmKHB0KSk6bShpKSYmKGd0LnhheGVzPWV0LGd0LnlheGVzPXJ0LFAoZSxyLG4sZ3QsaSkpfX07TC5pbml0KGd0KTt2YXIgeXQsYnQseHQsX3Qsd3QsTXQsa3QsQXQsVHQsU3Q9e30sRXQ9WzAsMCxhdCxvdF0sTHQ9bnVsbCxDdD1SLlJFRFJBV0RFTEFZLHp0PWUubWFpbnBsb3Q/ZHQuX3Bsb3RzW2UubWFpbnBsb3RdOmU7cmV0dXJuIFUubGVuZ3RoKlYubGVuZ3RoIT0xJiYodm9pZCAwIT09dnQub253aGVlbD92dC5vbndoZWVsPVc6dm9pZCAwIT09dnQub25tb3VzZXdoZWVsJiYodnQub25tb3VzZXdoZWVsPVcpKSx2dH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2MjMsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTgsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3MzksIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi4vcGxvdHMiOjgyNywiLi9heGVzIjo3NjQsIi4vYXhpc19pZHMiOjc2NywiLi9jb25zdGFudHMiOjc2OSwiLi9zY2FsZV96b29tIjo3NzksIi4vc2VsZWN0Ijo3ODAsZDM6MTIwLHRpbnljb2xvcjI6NTMyfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9kcmFnYm94Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoKGUuX2hhcygiY2FydGVzaWFuIil8fGUuX2hhcygiZ2wyZCIpKSYmIXQuX2NvbnRleHQuc3RhdGljUGxvdCl7T2JqZWN0LmtleXMoZS5fcGxvdHN8fHt9KS5zb3J0KGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdCgieSIpLGk9ci5zcGxpdCgieSIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBsPWUuX3Bsb3RzW3JdLHU9bC54YXhpcyxjPWwueWF4aXMsaD0odS5fbGluZXBvc2l0aW9uc1tyXXx8W10pWzNdLGY9KGMuX2xpbmVwb3NpdGlvbnNbcl18fFtdKVszXSxkPW8uRFJBR0dFUlNJWkU7aWYobihoKSYmInRvcCI9PT11LnNpZGUmJihoLT1kKSxuKGYpJiYicmlnaHQiIT09Yy5zaWRlJiYoZi09ZCksIWwubWFpbnBsb3Qpe3ZhciBwPXModCxsLDAsMCx1Ll9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7cC5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmaS5ob3Zlcih0LGUscil9LGkuaG92ZXIodCxlLHIpLHQuX2Z1bGxMYXlvdXQuX2xhc3Rob3Zlcj1wLHQuX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yfSxwLm9ubW91c2VvdXQ9ZnVuY3Rpb24oZSl7dC5fZHJhZ2dpbmd8fCh0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9bnVsbCxhLnVuaG92ZXIodCxlKSl9LHAub25jbGljaz1mdW5jdGlvbihlKXtpLmNsaWNrKHQsZSxyKX0sdC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYocyh0LGwsLWQsLWQsZCxkLCJuIiwidyIpLHModCxsLHUuX2xlbmd0aCwtZCxkLGQsIm4iLCJlIikscyh0LGwsLWQsYy5fbGVuZ3RoLGQsZCwicyIsInciKSxzKHQsbCx1Ll9sZW5ndGgsYy5fbGVuZ3RoLGQsZCwicyIsImUiKSl9dC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzJiYobihoKSYmKCJmcmVlIj09PXUuYW5jaG9yJiYoaC09ZS5fc2l6ZS5oKigxLWMuZG9tYWluWzFdKSkscyh0LGwsLjEqdS5fbGVuZ3RoLGgsLjgqdS5fbGVuZ3RoLGQsIiIsImV3Iikscyh0LGwsMCxoLC4xKnUuX2xlbmd0aCxkLCIiLCJ3Iikscyh0LGwsLjkqdS5fbGVuZ3RoLGgsLjEqdS5fbGVuZ3RoLGQsIiIsImUiKSksbihmKSYmKCJmcmVlIj09PWMuYW5jaG9yJiYoZi09ZS5fc2l6ZS53KnUuZG9tYWluWzBdKSxzKHQsbCxmLC4xKmMuX2xlbmd0aCxkLC44KmMuX2xlbmd0aCwibnMiLCIiKSxzKHQsbCxmLC45KmMuX2xlbmd0aCxkLC4xKmMuX2xlbmd0aCwicyIsIiIpLHModCxsLGYsMCxkLC4xKmMuX2xlbmd0aCwibiIsIiIpKSl9KTt2YXIgcj1lLl9ob3ZlcmxheWVyLm5vZGUoKTtyLm9ubW91c2Vtb3ZlPWZ1bmN0aW9uKHIpe3IudGFyZ2V0PWUuX2xhc3Rob3ZlcixpLmhvdmVyKHQscixlLl9ob3ZlcnN1YnBsb3QpfSxyLm9uY2xpY2s9ZnVuY3Rpb24ocil7ci50YXJnZXQ9ZS5fbGFzdGhvdmVyLGkuY2xpY2sodCxyKX0sci5vbm1vdXNlZG93bj1mdW5jdGlvbih0KXtlLl9sYXN0aG92ZXIub25tb3VzZWRvd24odCl9fX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjIzLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NDMsIi4vY29uc3RhbnRzIjo3NjksIi4vZHJhZ2JveCI6NzcyLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5fbW9kdWxlcztlLnBsb3QmJmUucGxvdC5zZWxlY3RBbGwoImc6bm90KC5zY2F0dGVybGF5ZXIpIikuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107aWYoImNhcnRlc2lhbiI9PT1sLmJhc2VQbG90TW9kdWxlLm5hbWUpe2Zvcih2YXIgdT1bXSxjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBoPXJbY10sZj1oWzBdLnRyYWNlO2YuX21vZHVsZT09PWwmJiEwPT09Zi52aXNpYmxlJiZ1LnB1c2goaCl9bC5wbG90KHQsZSx1LG4saSl9fX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9T2JqZWN0LmtleXMoZS5fcGxvdHMpLG49W10saT1bXSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1lLl9wbG90c1tvXSxsPXMueGF4aXMsdT1zLnlheGlzLGM9bC5fbWFpbkF4aXMsaD11Ll9tYWluQXhpcyxmPWMuX2lkK2guX2lkO2YhPT1vJiYtMSE9PXIuaW5kZXhPZihmKT8ocy5tYWlucGxvdD1mLHMubWFpbnBsb3RpbmZvPWUuX3Bsb3RzW2ZdLGkucHVzaChvKSk6bi5wdXNoKG8pfXJldHVybiBuPW4uY29uY2F0KGkpfWZ1bmN0aW9uIGEodCl7dmFyIGU9dC5wbG90Z3JvdXAscj10LmlkLG49Zi5sYXllclZhbHVlMmxheWVyQ2xhc3NbdC54YXhpcy5sYXllcl0saT1mLmxheWVyVmFsdWUybGF5ZXJDbGFzc1t0LnlheGlzLmxheWVyXTtpZih0Lm1haW5wbG90KXt2YXIgYT10Lm1haW5wbG90aW5mbyxvPWEucGxvdGdyb3VwLGw9cisiLXgiLHU9cisiLXkiO3QuZ3JpZGxheWVyPXMoYS5vdmVyZ3JpZCwiZyIsciksdC56ZXJvbGluZWxheWVyPXMoYS5vdmVyemVybywiZyIscikscyhhLm92ZXJsaW5lc0JlbG93LCJwYXRoIixsKSxzKGEub3ZlcmxpbmVzQmVsb3csInBhdGgiLHUpLHMoYS5vdmVyYXhlc0JlbG93LCJnIixsKSxzKGEub3ZlcmF4ZXNCZWxvdywiZyIsdSksdC5wbG90PXMoYS5vdmVycGxvdCwiZyIscikscyhhLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixsKSxzKGEub3ZlcmxpbmVzQWJvdmUsInBhdGgiLHUpLHMoYS5vdmVyYXhlc0Fib3ZlLCJnIixsKSxzKGEub3ZlcmF4ZXNBYm92ZSwiZyIsdSksdC54bGluZXM9by5zZWxlY3QoIi5vdmVybGluZXMtIituKS5zZWxlY3QoIi4iK2wpLHQueWxpbmVzPW8uc2VsZWN0KCIub3ZlcmxpbmVzLSIraSkuc2VsZWN0KCIuIit1KSx0LnhheGlzbGF5ZXI9by5zZWxlY3QoIi5vdmVyYXhlcy0iK24pLnNlbGVjdCgiLiIrbCksdC55YXhpc2xheWVyPW8uc2VsZWN0KCIub3ZlcmF4ZXMtIitpKS5zZWxlY3QoIi4iK3UpfWVsc2V7dmFyIGM9cyhlLCJnIiwibGF5ZXItc3VicGxvdCIpO3Quc2hhcGVsYXllcj1zKGMsImciLCJzaGFwZWxheWVyIiksdC5pbWFnZWxheWVyPXMoYywiZyIsImltYWdlbGF5ZXIiKSx0LmdyaWRsYXllcj1zKGUsImciLCJncmlkbGF5ZXIiKSx0Lm92ZXJncmlkPXMoZSwiZyIsIm92ZXJncmlkIiksdC56ZXJvbGluZWxheWVyPXMoZSwiZyIsInplcm9saW5lbGF5ZXIiKSx0Lm92ZXJ6ZXJvPXMoZSwiZyIsIm92ZXJ6ZXJvIikscyhlLCJwYXRoIiwieGxpbmVzLWJlbG93IikscyhlLCJwYXRoIiwieWxpbmVzLWJlbG93IiksdC5vdmVybGluZXNCZWxvdz1zKGUsImciLCJvdmVybGluZXMtYmVsb3ciKSxzKGUsImciLCJ4YXhpc2xheWVyLWJlbG93IikscyhlLCJnIiwieWF4aXNsYXllci1iZWxvdyIpLHQub3ZlcmF4ZXNCZWxvdz1zKGUsImciLCJvdmVyYXhlcy1iZWxvdyIpLHQucGxvdD1zKGUsImciLCJwbG90IiksdC5vdmVycGxvdD1zKGUsImciLCJvdmVycGxvdCIpLHMoZSwicGF0aCIsInhsaW5lcy1hYm92ZSIpLHMoZSwicGF0aCIsInlsaW5lcy1hYm92ZSIpLHQub3ZlcmxpbmVzQWJvdmU9cyhlLCJnIiwib3ZlcmxpbmVzLWFib3ZlIikscyhlLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLHMoZSwiZyIsInlheGlzbGF5ZXItYWJvdmUiKSx0Lm92ZXJheGVzQWJvdmU9cyhlLCJnIiwib3ZlcmF4ZXMtYWJvdmUiKSx0LnhsaW5lcz1lLnNlbGVjdCgiLnhsaW5lcy0iK24pLHQueWxpbmVzPWUuc2VsZWN0KCIueWxpbmVzLSIraSksdC54YXhpc2xheWVyPWUuc2VsZWN0KCIueGF4aXNsYXllci0iK24pLHQueWF4aXNsYXllcj1lLnNlbGVjdCgiLnlheGlzbGF5ZXItIitpKX1mb3IodmFyIGg9MDtoPGYudHJhY2VMYXllckNsYXNzZXMubGVuZ3RoO2grKylzKHQucGxvdCwiZyIsZi50cmFjZUxheWVyQ2xhc3Nlc1toXSk7dC54bGluZXMuc3R5bGUoImZpbGwiLCJub25lIikuY2xhc3NlZCgiY3Jpc3AiLCEwKSx0LnlsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApfWZ1bmN0aW9uIG8odCxlKXtpZih0KXt2YXIgcj17fTt0LmVhY2goZnVuY3Rpb24odCl7dmFyIG49bC5zZWxlY3QodGhpcyksaT0iY2xpcCIrZS5fdWlkK3QrInBsb3QiO24ucmVtb3ZlKCksZS5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoIiMiK2kpLnJlbW92ZSgpLHJbdF09ITB9KTtmb3IodmFyIG49ZS5fcGxvdHMsaT1PYmplY3Qua2V5cyhuKSxhPTA7YTxpLmxlbmd0aDthKyspZm9yKHZhciBvPW5baVthXV0scz1vLm92ZXJsYXlzfHxbXSx1PTA7dTxzLmxlbmd0aDt1Kyspe3ZhciBjPXNbdV07cltjLmlkXSYmYy5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgiLiIrcikuZGF0YShbMF0pO3JldHVybiBuLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQociwhMCksbn12YXIgbD10KCJkMyIpLHU9dCgiLi4vLi4vbGliIiksYz10KCIuLi9wbG90cyIpLGg9dCgiLi9heGlzX2lkcyIpLGY9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9ImNhcnRlc2lhbiIsci5hdHRyPVsieGF4aXMiLCJ5YXhpcyJdLHIuaWRSb290PVsieCIsInkiXSxyLmlkUmVnZXg9Zi5pZFJlZ2V4LHIuYXR0clJlZ2V4PWYuYXR0clJlZ2V4LHIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIudHJhbnNpdGlvbkF4ZXM9dCgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0LHM9Yy5nZXRTdWJwbG90SWRzKG8sImNhcnRlc2lhbiIpLGw9dC5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxhPTA7YTxsLmxlbmd0aDthKyspZS5wdXNoKGEpO2ZvcihhPTA7YTxzLmxlbmd0aDthKyspe2Zvcih2YXIgdSxoPXNbYV0sZj1vLl9wbG90c1toXSxkPVtdLHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIG09bFtwXSx2PW1bMF0udHJhY2U7di54YXhpcyt2LnlheGlzPT09aCYmKCgtMSE9PWUuaW5kZXhPZih2LmluZGV4KXx8di5jYXJwZXQpJiYodSYmdVswXS50cmFjZS54YXhpcyt1WzBdLnRyYWNlLnlheGlzPT09aCYmLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZih2LmZpbGwpJiYtMT09PWQuaW5kZXhPZih1KSYmZC5wdXNoKHUpLGQucHVzaChtKSksdT1tKX1uKHQsZixkLHIsaSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscyxsPW4uX21vZHVsZXN8fFtdLHU9ZS5fbW9kdWxlc3x8W107Zm9yKHM9MDtzPGwubGVuZ3RoO3MrKylpZigic2NhdHRlciI9PT1sW3NdLm5hbWUpe2k9ITA7YnJlYWt9Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpZigic2NhdHRlciI9PT11W3NdLm5hbWUpe2E9ITA7YnJlYWt9aWYoaSYmIWEpe3ZhciBjPW4uX3Bsb3RzLGY9T2JqZWN0LmtleXMoY3x8e30pO2ZvcihzPTA7czxmLmxlbmd0aDtzKyspe3ZhciBkPWNbZltzXV07ZC5wbG90JiZkLnBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfW4uX2luZm9sYXllci5zZWxlY3RBbGwoImcucmFuZ2VzbGlkZXItY29udGFpbmVyIikuc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfXZhciBwPW4uX2hhcyYmbi5faGFzKCJjYXJ0ZXNpYW4iKSxtPWUuX2hhcyYmZS5faGFzKCJjYXJ0ZXNpYW4iKTtpZihwJiYhbSl7dmFyIHY9bi5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLGc9aC5saXN0SWRzKHtfZnVsbExheW91dDpufSk7Zm9yKHYuY2FsbChvLG4pLG4uX2RlZnMuc2VsZWN0QWxsKCIuYXhlc2NsaXAiKS5yZW1vdmUoKSxzPTA7czxnLmxlbmd0aDtzKyspbi5faW5mb2xheWVyLnNlbGVjdCgiLiIrZ1tzXSsidGl0bGUiKS5yZW1vdmUoKX19LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9aSh0KSxuPWUuX2NhcnRlc2lhbmxheWVyLnNlbGVjdEFsbCgiLnN1YnBsb3QiKS5kYXRhKHIsdS5pZGVudGl0eSk7bi5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic3VicGxvdCAiK3R9KSxuLm9yZGVyKCksbi5leGl0KCkuY2FsbChvLGUpLG4uZWFjaChmdW5jdGlvbih0KXt2YXIgcj1lLl9wbG90c1t0XTtpZihyLnBsb3Rncm91cD1sLnNlbGVjdCh0aGlzKSxyLm92ZXJsYXlzPVtdLGEociksci5tYWlucGxvdCl7ZS5fcGxvdHNbci5tYWlucGxvdF0ub3ZlcmxheXMucHVzaChyKX1yLmRyYWdsYXllcj1zKGUuX2RyYWdnZXJzLCJnIix0KX0pfSxyLnJhbmdlUGxvdD1mdW5jdGlvbih0LGUscil7YShlKSxuKHQsZSxyKSxjLnN0eWxlKHQpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vcGxvdHMiOjgyNywiLi9hdHRyaWJ1dGVzIjo3NjMsIi4vYXhpc19pZHMiOjc2NywiLi9jb25zdGFudHMiOjc2OSwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuL3RyYW5zaXRpb25fYXhlcyI6Nzg1LGQzOjEyMH1dLDc3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz17dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIn0sdGl0bGVmb250Om8oe30sbix7fSksdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0ifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMH0scmFuZ2Vtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub3JtYWwiLCJ0b3plcm8iLCJub25uZWdhdGl2ZSJdLGRmbHQ6Im5vcm1hbCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHNjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W3MuaWRSZWdleC54LnRvU3RyaW5nKCkscy5pZFJlZ2V4LnkudG9TdHJpbmcoKV19LHNjYWxlcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZGZsdDoicmFuZ2UifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdfSx0aWNrbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxpbmVhciIsImFycmF5Il19LG50aWNrczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSx0aWNrMDp7dmFsVHlwZToiYW55In0sZHRpY2s6e3ZhbFR5cGU6ImFueSJ9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIiJdfSxtaXJyb3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInRpY2tzIiwhMSwiYWxsIiwiYWxsdGlja3MiXSxkZmx0OiExfSx0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6NX0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lfSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozfSxzcGlrZWRhc2g6byh7fSxhLHtkZmx0OiJkYXNoIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIn0sdGlja2ZvbnQ6byh7fSxuLHt9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0saG92ZXJmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZX0sbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4ifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lfSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSx6ZXJvbGluZTp7dmFsVHlwZToiYm9vbGVhbiJ9LHplcm9saW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmV9LHplcm9saW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiLHMuaWRSZWdleC54LnRvU3RyaW5nKCkscy5pZFJlZ2V4LnkudG9TdHJpbmcoKV19LHNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdfSxvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIixzLmlkUmVnZXgueC50b1N0cmluZygpLHMuaWRSZWdleC55LnRvU3RyaW5nKCldfSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWJvdmUgdHJhY2VzIiwiYmVsb3cgdHJhY2VzIl0sZGZsdDoiYWJvdmUgdHJhY2VzIn0sZG9tYWluOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0scG9zaXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowfSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIn0sY2F0ZWdvcnlhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LF9kZXByZWNhdGVkOnthdXRvdGljazp7dmFsVHlwZToiYm9vbGVhbiJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjUsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vZm9udF9hdHRyaWJ1dGVzIjo3ODgsIi4vY29uc3RhbnRzIjo3Njl9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4vY29uc3RhbnRzIiksbD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuL3R5cGVfZGVmYXVsdHMiKSxjPXQoIi4vYXhpc19kZWZhdWx0cyIpLGg9dCgiLi9jb25zdHJhaW50X2RlZmF1bHRzIiksZj10KCIuL3Bvc2l0aW9uX2RlZmF1bHRzIiksZD10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBwKHQsZSl7cmV0dXJuIE51bWJlcih0LnN1YnN0cig1KXx8MSktTnVtYmVyKGUuc3Vic3RyKDUpfHwxKX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIGkuY29lcmNlKE4sQixsLHQsZSl9ZnVuY3Rpb24gdih0KXt2YXIgZT17eDpQLHk6RH1bdF07cmV0dXJuIGkuc2ltcGxlTWFwKGUsZC5uYW1lMmlkKX12YXIgZyx5PU9iamVjdC5rZXlzKHQpLGI9W10seD1bXSxfPVtdLHc9W10sTT1bXSxrPVtdLEE9e30sVD17fTtmb3IoZz0wO2c8ci5sZW5ndGg7ZysrKXt2YXIgUyxFLEw9cltnXTtpZihuLnRyYWNlSXMoTCwiY2FydGVzaWFuIikpUz1iLEU9eDtlbHNle2lmKCFuLnRyYWNlSXMoTCwiZ2wyZCIpKWNvbnRpbnVlO1M9XyxFPXd9dmFyIEM9ZC5pZDJuYW1lKEwueGF4aXMpLHo9ZC5pZDJuYW1lKEwueWF4aXMpO2lmKG4udHJhY2VJcyhMLCJjYXJwZXQiKSYmKCJjYXJwZXQiIT09TC50eXBlfHxMLl9jaGVhdGVyKXx8QyYmaS5wdXNoVW5pcXVlKGssQyksImNhcnBldCI9PT1MLnR5cGUmJkwuX2NoZWF0ZXImJkMmJmkucHVzaFVuaXF1ZShNLEMpLEMmJi0xPT09Uy5pbmRleE9mKEMpJiZTLnB1c2goQykseiYmLTE9PT1FLmluZGV4T2YoeikmJkUucHVzaCh6KSxuLnRyYWNlSXMoTCwiMmRNYXAiKSYmKEFbQ109ITAsQVt6XT0hMCksbi50cmFjZUlzKEwsIm9yaWVudGVkIikpe1RbImgiPT09TC5vcmllbnRhdGlvbj96OkNdPSEwfX1pZighZS5faGFzKCJnbDNkIikmJiFlLl9oYXMoImdlbyIpKWZvcihnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciBJPXlbZ107LTE9PT1fLmluZGV4T2YoSSkmJi0xPT09Yi5pbmRleE9mKEkpJiZzLnhBeGlzTWF0Y2gudGVzdChJKT9iLnB1c2goSSk6LTE9PT13LmluZGV4T2YoSSkmJi0xPT09eC5pbmRleE9mKEkpJiZzLnlBeGlzTWF0Y2gudGVzdChJKSYmeC5wdXNoKEkpfWIubGVuZ3RoJiZ4Lmxlbmd0aCYmaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxuLnN1YnBsb3RzUmVnaXN0cnkuY2FydGVzaWFuKTt2YXIgRD1iLmNvbmNhdChfKS5zb3J0KHApLFA9eC5jb25jYXQodykuc29ydChwKSxPPUQuY29uY2F0KFApLFI9YS5iYWNrZ3JvdW5kO0QubGVuZ3RoJiZQLmxlbmd0aCYmKFI9aS5jb2VyY2UodCxlLG8sInBsb3RfYmdjb2xvciIpKTt2YXIgRixqLE4sQixVPWEuY29tYmluZShSLGUucGFwZXJfYmdjb2xvciksVj17eDp2KCJ4IikseTp2KCJ5Iil9O2ZvcihnPTA7ZzxPLmxlbmd0aDtnKyspe0Y9T1tnXSxpLmlzUGxhaW5PYmplY3QodFtGXSl8fCh0W0ZdPXt9KSxOPXRbRl0sQj1lW0ZdPXt9LHUoTixCLG0scixGKSxqPUYuY2hhckF0KDApO3ZhciBIPWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXt4OkQseTpQfVtlXSxpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTtvPT09cnx8KHRbb118fHt9KS5vdmVybGF5aW5nfHxpLnB1c2goZC5uYW1lMmlkKG8pKX1yZXR1cm4gaX0oaixGKSxxPXtsZXR0ZXI6aixmb250OmUuZm9udCxvdXRlclRpY2tzOkFbRl0sc2hvd0dyaWQ6IVRbRl0sZGF0YTpyLGJnQ29sb3I6VSxjYWxlbmRhcjplLmNhbGVuZGFyLGNoZWF0ZXJvbmx5OiJ4Ij09PWomJi0xIT09TS5pbmRleE9mKEYpJiYtMT09PWsuaW5kZXhPZihGKX07YyhOLEIsbSxxLGUpO20oInNob3dzcGlrZXMiKSYmKG0oInNwaWtlY29sb3IiKSxtKCJzcGlrZXRoaWNrbmVzcyIpLG0oInNwaWtlZGFzaCIpLG0oInNwaWtlbW9kZSIpKTt2YXIgRz17bGV0dGVyOmosY291bnRlckF4ZXM6VltqXSxvdmVybGF5YWJsZUF4ZXM6SH07ZihOLEIsbSxHKSxCLl9pbnB1dD1OfXZhciBZPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImhhbmRsZURlZmF1bHRzIiksWD1uLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzZWxlY3RvciIsImhhbmRsZURlZmF1bHRzIik7Zm9yKGc9MDtnPEQubGVuZ3RoO2crKylGPURbZ10sTj10W0ZdLEI9ZVtGXSxZKHQsZSxGKSwiZGF0ZSI9PT1CLnR5cGUmJlgoTixCLGUsUCxCLmNhbGVuZGFyKSxtKCJmaXhlZHJhbmdlIik7Zm9yKGc9MDtnPFAubGVuZ3RoO2crKyl7Rj1QW2ddLE49dFtGXSxCPWVbRl07dmFyIFc9ZVtkLmlkMm5hbWUoQi5hbmNob3IpXTttKCJmaXhlZHJhbmdlIixXJiZXLnJhbmdlc2xpZGVyJiZXLnJhbmdlc2xpZGVyLnZpc2libGUpfWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdO3ZhciBaPVYueC5jb25jYXQoVi55KTtmb3IoZz0wO2c8Ty5sZW5ndGg7ZysrKUY9T1tnXSxqPUYuY2hhckF0KDApLE49dFtGXSxCPWVbRl0saChOLEIsbSxaLGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi9sYXlvdXRfYXR0cmlidXRlcyI6ODE4LCIuL2F4aXNfZGVmYXVsdHMiOjc2NiwiLi9heGlzX2lkcyI6NzY3LCIuL2NvbnN0YW50cyI6NzY5LCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjc3MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1LCIuL3Bvc2l0aW9uX2RlZmF1bHRzIjo3NzgsIi4vdHlwZV9kZWZhdWx0cyI6Nzg2fV0sNzc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGEsbyxzLGwsdT1bXSxjPXIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3RdfSksaD1pLmJpc2VjdG9yKGUpLmxlZnQ7Zm9yKG49MDtuPGMubGVuZ3RoO24rKylmb3Iobz1jW25dLGE9MDthPG8ubGVuZ3RoO2ErKyludWxsIT09KHM9b1thXSkmJnZvaWQgMCE9PXMmJigobD1oKHUscykpPHUubGVuZ3RoJiZ1W2xdPT09c3x8dS5zcGxpY2UobCwwLHMpKTtyZXR1cm4gdX12YXIgaT10KCJkMyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtzd2l0Y2goZSl7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOltdO2Nhc2UiY2F0ZWdvcnkgYXNjZW5kaW5nIjpyZXR1cm4gbih0LGkuYXNjZW5kaW5nLGEpO2Nhc2UiY2F0ZWdvcnkgZGVzY2VuZGluZyI6cmV0dXJuIG4odCxpLmRlc2NlbmRpbmcsYSk7Y2FzZSJ0cmFjZSI6ZGVmYXVsdDpyZXR1cm5bXX19fSx7ZDM6MTIwfV0sNzc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89YS5jb3VudGVyQXhlc3x8W10scz1hLm92ZXJsYXlhYmxlQXhlc3x8W10sbD1hLmxldHRlcjsiZnJlZSI9PT1pLmNvZXJjZSh0LGUse2FuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJlZSJdLmNvbmNhdChvKSxkZmx0Om4odC5wb3NpdGlvbik/ImZyZWUiOm9bMF18fCJmcmVlIn19LCJhbmNob3IiKSYmcigicG9zaXRpb24iKSxpLmNvZXJjZSh0LGUse3NpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczoieCI9PT1sP1siYm90dG9tIiwidG9wIl06WyJsZWZ0IiwicmlnaHQiXSxkZmx0OiJ4Ij09PWw/ImJvdHRvbSI6ImxlZnQifX0sInNpZGUiKTt2YXIgdT0hMTtpZihzLmxlbmd0aCYmKHU9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExXS5jb25jYXQocyksZGZsdDohMX19LCJvdmVybGF5aW5nIikpLCF1KXt2YXIgYz1yKCJkb21haW4iKTtjWzBdPmNbMV0tLjAxJiYoZS5kb21haW49WzAsMV0pLGkubm9uZU9yQWxsKHQuZG9tYWluLGUuZG9tYWluLFswLDFdKX1yZXR1cm4gcigibGF5ZXIiKSxlfX0seyIuLi8uLi9saWIiOjcyNCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDc3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPW5bdC5jb25zdHJhaW50b3dhcmR8fCJjZW50ZXIiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldfX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo2OTh9XSw3ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5faWR9ZnVuY3Rpb24gaSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPWUuY2RbMF0udHJhY2Usbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuY3VydmVOdW1iZXI9ci5pbmRleCxpLmRhdGE9ci5faW5wdXQsaS5mdWxsRGF0YT1yLHMoaSxyLGkucG9pbnROdW1iZXIpfXJldHVybiB0fXZhciBhPXQoIi4uLy4uL2xpYi9wb2x5Z29uIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUsbD10KCIuL2F4ZXMiKSx1PXQoIi4vY29uc3RhbnRzIiksYz1hLmZpbHRlcixoPWEudGVzdGVyLGY9dS5NSU5TRUxFQ1Q7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyl7ZnVuY3Rpb24gZCh0KXt2YXIgZT0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/MTowO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gdC5wMmQocltlXSl9fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gdC1lfXZhciBtLHY9YS5nZC5fZnVsbExheW91dC5fem9vbWxheWVyLGc9YS5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHk9YS5wbG90aW5mbyxiPXkueGF4aXMuX29mZnNldCx4PXkueWF4aXMuX29mZnNldCxfPWUtZy5sZWZ0LHc9ci1nLnRvcCxNPV8saz13LEE9Ik0iK18rIiwiK3csVD1hLnhheGVzWzBdLl9sZW5ndGgsUz1hLnlheGVzWzBdLl9sZW5ndGgsRT1hLnhheGVzLm1hcChuKSxMPWEueWF4ZXMubWFwKG4pLEM9YS54YXhlcy5jb25jYXQoYS55YXhlcyk7Imxhc3NvIj09PXMmJihtPWMoW1tfLHddXSx1LkJFTkRQWCkpO3ZhciB6PXYuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lIikuZGF0YShbMSwyXSk7ei5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4ic2VsZWN0LW91dGxpbmUgc2VsZWN0LW91dGxpbmUtIit0fSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYisiLCAiK3grIikiKS5hdHRyKCJkIixBKyJaIik7dmFyIEksRCxQLE8sUixGPXYuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94LWNvcm5lcnMiKS5zdHlsZSh7ZmlsbDpvLmJhY2tncm91bmQsc3Ryb2tlOm8uZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MX0pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2IrIiwgIit4KyIpIikuYXR0cigiZCIsIk0wLDBaIiksaj1bXSxOPWEuZ2QsQj1bXTtmb3IoST0wO0k8Ti5jYWxjZGF0YS5sZW5ndGg7SSsrKWlmKEQ9Ti5jYWxjZGF0YVtJXSxQPURbMF0udHJhY2UsUC5fbW9kdWxlJiZQLl9tb2R1bGUuc2VsZWN0UG9pbnRzKWlmKGEuc3VicGxvdCl7CmlmKFAuc3VicGxvdCE9PWEuc3VicGxvdCljb250aW51ZTtqLnB1c2goe3NlbGVjdFBvaW50czpQLl9tb2R1bGUuc2VsZWN0UG9pbnRzLGNkOkQseGF4aXM6YS54YXhlc1swXSx5YXhpczphLnlheGVzWzBdfSl9ZWxzZXtpZigtMT09PUUuaW5kZXhPZihQLnhheGlzKSljb250aW51ZTtpZigtMT09PUwuaW5kZXhPZihQLnlheGlzKSljb250aW51ZTtqLnB1c2goe3NlbGVjdFBvaW50czpQLl9tb2R1bGUuc2VsZWN0UG9pbnRzLGNkOkQseGF4aXM6bC5nZXRGcm9tSWQoTixQLnhheGlzKSx5YXhpczpsLmdldEZyb21JZChOLFAueWF4aXMpfSl9dmFyIFU7VT15LmZpbGxSYW5nZUl0ZW1zP3kuZmlsbFJhbmdlSXRlbXM6InNlbGVjdCI9PT1zP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYW5nZT17fTtmb3IoST0wO0k8Qy5sZW5ndGg7SSsrKXt2YXIgbj1DW0ldLGk9bi5faWQuY2hhckF0KDApO3Jbbi5faWRdPVtuLnAyZChlW2krIm1pbiJdKSxuLnAyZChlW2krIm1heCJdKV0uc29ydChwKX19OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lmxhc3NvUG9pbnRzPXt9O2ZvcihJPTA7STxDLmxlbmd0aDtJKyspe3ZhciBpPUNbSV07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoZChpKSl9fSxhLm1vdmVGbj1mdW5jdGlvbih0LGUpe3ZhciByO009TWF0aC5tYXgoMCxNYXRoLm1pbihULHQrXykpLGs9TWF0aC5tYXgoMCxNYXRoLm1pbihTLGUrdykpO3ZhciBuPU1hdGguYWJzKE0tXyksbz1NYXRoLmFicyhrLXcpO2Zvcigic2VsZWN0Ij09PXM/KG88TWF0aC5taW4oLjYqbixmKT8ocj1oKFtbXywwXSxbXyxTXSxbTSxTXSxbTSwwXV0pLEYuYXR0cigiZCIsIk0iK3IueG1pbisiLCIrKHctZikrImgtNHYiKzIqZisiaDRaTSIrKHIueG1heC0xKSsiLCIrKHctZikrImg0diIrMipmKyJoLTRaIikpOm48TWF0aC5taW4oLjYqbyxmKT8ocj1oKFtbMCx3XSxbMCxrXSxbVCxrXSxbVCx3XV0pLEYuYXR0cigiZCIsIk0iKyhfLWYpKyIsIityLnltaW4rInYtNGgiKzIqZisidjRaTSIrKF8tZikrIiwiKyhyLnltYXgtMSkrInY0aCIrMipmKyJ2LTRaIikpOihyPWgoW1tfLHddLFtfLGtdLFtNLGtdLFtNLHddXSksRi5hdHRyKCJkIiwiTTAsMFoiKSksei5hdHRyKCJkIiwiTSIrci54bWluKyIsIityLnltaW4rIkgiKyhyLnhtYXgtMSkrIlYiKyhyLnltYXgtMSkrIkgiK3IueG1pbisiWiIpKToibGFzc28iPT09cyYmKG0uYWRkUHQoW00sa10pLHI9aChtLmZpbHRlcmVkKSx6LmF0dHIoImQiLCJNIittLmZpbHRlcmVkLmpvaW4oIkwiKSsiWiIpKSxCPVtdLEk9MDtJPGoubGVuZ3RoO0krKylPPWpbSV0sW10ucHVzaC5hcHBseShCLGkoTy5zZWxlY3RQb2ludHMoTyxyKSxPKSk7Uj17cG9pbnRzOkJ9LFUoUixyLG0pLGEuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGluZyIsUil9LGEuZG9uZUZuPWZ1bmN0aW9uKHQsZSl7aWYoRi5yZW1vdmUoKSx0fHwyIT09ZSlhLmdkLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsUik7ZWxzZXtmb3Ioei5yZW1vdmUoKSxJPTA7STxqLmxlbmd0aDtJKyspTz1qW0ldLE8uc2VsZWN0UG9pbnRzKE8sITEpO04uZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6NjQwLCIuLi8uLi9saWIvcG9seWdvbiI6NzM0LCIuL2F4ZXMiOjc2NCwiLi9jb25zdGFudHMiOjc2OX1dLDc4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiBNYXRoLnBvdygxMCx0KX12YXIgaT10KCJkMyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5jbGVhbk51bWJlcixsPW8ubXMyRGF0ZVRpbWUsdT1vLmRhdGVUaW1lMm1zLGM9by5lbnN1cmVOdW1iZXIsaD10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksZj1oLkZQX1NBRkUsZD1oLkJBRE5VTSxwPXQoIi4vY29uc3RhbnRzIiksbT10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0zKk0qTWF0aC5hYnMobi1pKSl9cmV0dXJuIGR9ZnVuY3Rpb24gaChlLHIsbil7dmFyIGk9dShlLG58fHQuY2FsZW5kYXIpO2lmKGk9PT1kKXtpZighYShlKSlyZXR1cm4gZDtpPXUobmV3IERhdGUoK2UpKX1yZXR1cm4gaX1mdW5jdGlvbiB2KGUscixuKXtyZXR1cm4gbChlLHIsbnx8dC5jYWxlbmRhcil9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gdC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUpXX1mdW5jdGlvbiB5KGUpe2lmKG51bGwhPT1lJiZ2b2lkIDAhPT1lKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goZSk7dmFyIHI9dC5fY2F0ZWdvcmllcy5sZW5ndGgtMTtyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXT1yLHJ9cmV0dXJuIGR9ZnVuY3Rpb24gYihlKXtpZih0Ll9jYXRlZ29yaWVzTWFwKXt2YXIgcj10Ll9jYXRlZ29yaWVzTWFwW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHJ9aWYoYShlKSlyZXR1cm4rZX1mdW5jdGlvbiB4KGUpe3JldHVybiBhKGUpP2kucm91bmQodC5fYit0Ll9tKmUsMik6ZH1mdW5jdGlvbiBfKGUpe3JldHVybihlLXQuX2IpL3QuX219ZT1lfHx7fTt2YXIgdz0odC5faWR8fCJ4IikuY2hhckF0KDApLE09MTA7dC5jMmw9ImxvZyI9PT10LnR5cGU/cjpjLHQubDJjPSJsb2ciPT09dC50eXBlP246Yyx0LmwycD14LHQucDJsPV8sdC5jMnA9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCxlKXtyZXR1cm4geChyKHQsZSkpfTp4LHQucDJjPSJsb2ciPT09dC50eXBlP2Z1bmN0aW9uKHQpe3JldHVybiBuKF8odCkpfTpfLC0xIT09WyJsaW5lYXIiLCItIl0uaW5kZXhPZih0LnR5cGUpPyh0LmQycj10LnIyZD10LmQyYz10LnIyYz10LmQybD10LnIybD1zLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPWMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHMoZSkpfSx0LnAyZD10LnAycj1fLHQuY2xlYW5Qb3M9Yyk6ImxvZyI9PT10LnR5cGU/KHQuZDJyPXQuZDJsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIocyh0KSxlKX0sdC5yMmQ9dC5yMmM9ZnVuY3Rpb24odCl7cmV0dXJuIG4ocyh0KSl9LHQuZDJjPXQucjJsPXMsdC5jMmQ9dC5sMnI9Yyx0LmMycj1yLHQubDJkPW4sdC5kMnA9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5sMnAodC5kMnIoZSxyKSl9LHQucDJkPWZ1bmN0aW9uKHQpe3JldHVybiBuKF8odCkpfSx0LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAocyhlKSl9LHQucDJyPV8sdC5jbGVhblBvcz1jKToiZGF0ZSI9PT10LnR5cGU/KHQuZDJyPXQucjJkPW8uaWRlbnRpdHksdC5kMmM9dC5yMmM9dC5kMmw9dC5yMmw9aCx0LmMyZD10LmMycj10LmwyZD10Lmwycj12LHQuZDJwPXQucjJwPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdC5sMnAoaChlLDAsbikpfSx0LnAyZD10LnAycj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHYoXyh0KSxlLHIpfSx0LmNsZWFuUG9zPWZ1bmN0aW9uKGUpe3JldHVybiBvLmNsZWFuRGF0ZShlLGQsdC5jYWxlbmRhcil9KToiY2F0ZWdvcnkiPT09dC50eXBlJiYodC5kMmM9dC5kMmw9eSx0LnIyZD10LmMyZD10LmwyZD1nLHQuZDJyPXQuZDJsX25vYWRkPWIsdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9YihlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQubDJyPXQuYzJyPWMsdC5yMmw9Yix0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gZyhfKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Xyx0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10P3Q6Yyh0KX0pLHQuZnJhY3Rpb24ycj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybiB0LmwycihyK2UqKG4tcikpfSx0LnIyZnJhY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHI9dC5yMmwodC5yYW5nZVswXSksbj10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4odC5yMmwoZSktcikvKG4tcil9LHQuY2xlYW5SYW5nZT1mdW5jdGlvbihlKXtlfHwoZT0icmFuZ2UiKTt2YXIgcixuLGk9by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpO2lmKG49ImRhdGUiPT09dC50eXBlP28uZGZsdFJhbmdlKHQuY2FsZW5kYXIpOiJ5Ij09PXc/cC5ERkxUUkFOR0VZOnAuREZMVFJBTkdFWCxuPW4uc2xpY2UoKSwhaXx8MiE9PWkubGVuZ3RoKXJldHVybiB2b2lkIG8ubmVzdGVkUHJvcGVydHkodCxlKS5zZXQobik7Zm9yKCJkYXRlIj09PXQudHlwZSYmKGlbMF09by5jbGVhbkRhdGUoaVswXSxkLHQuY2FsZW5kYXIpLGlbMV09by5jbGVhbkRhdGUoaVsxXSxkLHQuY2FsZW5kYXIpKSxyPTA7cjwyO3IrKylpZigiZGF0ZSI9PT10LnR5cGUpe2lmKCFvLmlzRGF0ZVRpbWUoaVtyXSx0LmNhbGVuZGFyKSl7dFtlXT1uO2JyZWFrfWlmKHQucjJsKGlbMF0pPT09dC5yMmwoaVsxXSkpe3ZhciBzPW8uY29uc3RyYWluKHQucjJsKGlbMF0pLG8uTUlOX01TKzFlMyxvLk1BWF9NUy0xZTMpO2lbMF09dC5sMnIocy0xZTMpLGlbMV09dC5sMnIocysxZTMpO2JyZWFrfX1lbHNle2lmKCFhKGlbcl0pKXtpZighYShpWzEtcl0pKXt0W2VdPW47YnJlYWt9aVtyXT1pWzEtcl0qKHI/MTA6LjEpfWlmKGlbcl08LWY/aVtyXT0tZjppW3JdPmYmJihpW3JdPWYpLGlbMF09PT1pWzFdKXt2YXIgbD1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqaVswXSkpO2lbMF0tPWwsaVsxXSs9bH19fSx0LnNldFNjYWxlPWZ1bmN0aW9uKHIpe3ZhciBuPWUuX3NpemU7aWYodC5fY2F0ZWdvcmllc3x8KHQuX2NhdGVnb3JpZXM9W10pLHQuX2NhdGVnb3JpZXNNYXB8fCh0Ll9jYXRlZ29yaWVzTWFwPXt9KSx0Lm92ZXJsYXlpbmcpe3ZhciBpPW0uZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSx0Lm92ZXJsYXlpbmcpO3QuZG9tYWluPWkuZG9tYWlufXZhciBhPXImJnQuX3I/Il9yIjoicmFuZ2UiLHM9dC5jYWxlbmRhcjt0LmNsZWFuUmFuZ2UoYSk7dmFyIGw9dC5yMmwodFthXVswXSxzKSx1PXQucjJsKHRbYV1bMV0scyk7aWYoInkiPT09dz8odC5fb2Zmc2V0PW4udCsoMS10LmRvbWFpblsxXSkqbi5oLHQuX2xlbmd0aD1uLmgqKHQuZG9tYWluWzFdLXQuZG9tYWluWzBdKSx0Ll9tPXQuX2xlbmd0aC8obC11KSx0Ll9iPS10Ll9tKnUpOih0Ll9vZmZzZXQ9bi5sK3QuZG9tYWluWzBdKm4udyx0Ll9sZW5ndGg9bi53Kih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKHUtbCksdC5fYj0tdC5fbSpsKSwhaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKSl0aHJvdyBvLm5vdGlmaWVyKCJTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGF4aXMgc2NhbGluZyIsImxvbmciKSxlLl9yZXBsb3R0aW5nPSExLG5ldyBFcnJvcigiYXhpcyBzY2FsaW5nIil9LHQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUscil7dmFyIG4saSxhLG89ImRhdGUiPT09dC50eXBlJiZlW3IrImNhbGVuZGFyIl07aWYociBpbiBlKWZvcihuPWVbcl0saT1uZXcgQXJyYXkobi5sZW5ndGgpLGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPXQuZDJjKG5bYV0sMCxvKTtlbHNle3ZhciBzPXIrIjAiaW4gZT90LmQyYyhlW3IrIjAiXSwwLG8pOjAsbD1lWyJkIityXT9OdW1iZXIoZVsiZCIrcl0pOjE7Zm9yKG49ZVt7eDoieSIseToieCJ9W3JdXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7YSsrKWlbYV09cythKmx9cmV0dXJuIGl9LHQuaXNWYWxpZFJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgmJmEodC5yMmwoZVswXSkpJiZhKHQucjJsKGVbMV0pKX0sdC5pc1B0V2l0aGluUmFuZ2U9IngiPT09dz9mdW5jdGlvbihlKXt2YXIgcj1lLng7cmV0dXJuIHI+PXQucmFuZ2VbMF0mJnI8PXQucmFuZ2VbMV19OmZ1bmN0aW9uKGUpe3ZhciByPWUueTtyZXR1cm4gcj49dC5yYW5nZVswXSYmcjw9dC5yYW5nZVsxXX0sdC5fbWluPVtdLHQuX21heD1bXSx0Ll9zZXBhcmF0b3JzPWUuc2VwYXJhdG9ycyxkZWxldGUgdC5fbWluRHRpY2ssZGVsZXRlIHQuX2ZvcmNlVGljazB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjQsIi4vYXhpc19pZHMiOjc2NywiLi9jb25zdGFudHMiOjc2OSxkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjl9XSw3ODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT1bInNob3dleHBvbmVudCIsInNob3d0aWNrcHJlZml4Iiwic2hvd3RpY2tzdWZmaXgiXSxyPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSksbj1mdW5jdGlvbihlKXtyZXR1cm4gdFtlXT09PXRbclswXV19O2lmKHIuZXZlcnkobil8fDE9PT1yLmxlbmd0aClyZXR1cm4gdFtyWzBdXX12YXIgaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1uKHQpO2lmKHIoInRpY2twcmVmaXgiKSYmcigic2hvd3RpY2twcmVmaXgiLHMpLHIoInRpY2tzdWZmaXgiKSYmcigic2hvd3RpY2tzdWZmaXgiLHMpLHIoInNob3d0aWNrbGFiZWxzIikpe3ZhciBsPW8uZm9udHx8e30sdT1lLmNvbG9yPT09dC5jb2xvcj9lLmNvbG9yOmwuY29sb3I7aS5jb2VyY2VGb250KHIsInRpY2tmb250Iix7ZmFtaWx5OmwuZmFtaWx5LHNpemU6bC5zaXplLGNvbG9yOnV9KSxyKCJ0aWNrYW5nbGUiKSwiY2F0ZWdvcnkiIT09YSYmKHIoInRpY2tmb3JtYXQiKXx8ImRhdGUiPT09YXx8KHIoInNob3dleHBvbmVudCIscykscigiZXhwb25lbnRmb3JtYXQiKSxyKCJzZXBhcmF0ZXRob3VzYW5kcyIpKSl9ImNhdGVnb3J5Ij09PWF8fG8ubm9Ib3Zlcnx8cigiaG92ZXJmb3JtYXQiKX19LHsiLi4vLi4vbGliIjo3MjR9XSw3ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4uY29lcmNlMih0LGUsaSwidGlja2xlbiIpLHM9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrd2lkdGgiKSxsPW4uY29lcmNlMih0LGUsaSwidGlja2NvbG9yIixlLmNvbG9yKTtyKCJ0aWNrcyIsYS5vdXRlclRpY2tzfHxvfHxzfHxsPyJvdXRzaWRlIjoiIil8fChkZWxldGUgZS50aWNrbGVuLGRlbGV0ZSBlLnRpY2t3aWR0aCxkZWxldGUgZS50aWNrY29sb3IpfX0seyIuLi8uLi9saWIiOjcyNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6Nzc1fV0sNzg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVEQVk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPSJhdXRvIjsiYXJyYXkiIT09dC50aWNrbW9kZXx8ImxvZyIhPT1vJiYiZGF0ZSIhPT1vfHwodC50aWNrbW9kZT0iYXV0byIpLEFycmF5LmlzQXJyYXkodC50aWNrdmFscyk/cz0iYXJyYXkiOnQuZHRpY2smJihzPSJsaW5lYXIiKTt2YXIgbD1yKCJ0aWNrbW9kZSIscyk7aWYoImF1dG8iPT09bClyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09bCl7dmFyIHU9ImRhdGUiPT09bz9hOjEsYz1yKCJkdGljayIsdSk7aWYobihjKSllLmR0aWNrPWM+MD9OdW1iZXIoYyk6dTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgYyllLmR0aWNrPXU7ZWxzZXt2YXIgaD1jLmNoYXJBdCgwKSxmPWMuc3Vic3RyKDEpO2Y9bihmKT9OdW1iZXIoZik6MCwoZjw9MHx8ISgiZGF0ZSI9PT1vJiYiTSI9PT1oJiZmPT09TWF0aC5yb3VuZChmKXx8ImxvZyI9PT1vJiYiTCI9PT1ofHwibG9nIj09PW8mJiJEIj09PWgmJigxPT09Znx8Mj09PWYpKSkmJihlLmR0aWNrPXUpfXZhciBkPSJkYXRlIj09PW8/aS5kYXRlVGljazAoZS5jYWxlbmRhcik6MCxwPXIoInRpY2swIixkKTsiZGF0ZSI9PT1vP2UudGljazA9aS5jbGVhbkRhdGUocCxkKTpuKHApJiYiRDEiIT09YyYmIkQyIiE9PWM/ZS50aWNrMD1OdW1iZXIocCk6ZS50aWNrMD1kfWVsc2V7dmFyIG09cigidGlja3ZhbHMiKTt2b2lkIDA9PT1tP2UudGlja21vZGU9ImF1dG8iOnIoInRpY2t0ZXh0Iil9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sNzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90bHkiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpLGw9LygoeHx5KShbMi05XXxbMS05XVswLTldKyk/KWF4aXMkLztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gYyhlLHIpe2Z1bmN0aW9uIG4oZSxyLG4pe2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWVbaV07aWYoLTE9PT1vLmluZGV4T2YoYS54cmVmKSYmLTE9PT1vLmluZGV4T2YoYS55cmVmKXx8cih0LGkpLG4pcmV0dXJufX12YXIgaSxvPVtdO2ZvcihvPVtlLl9pZCxyLl9pZF0saT0wO2k8by5sZW5ndGg7aSsrKXMuZG9UaWNrcyh0LG9baV0sITApO24odi5hbm5vdGF0aW9uc3x8W10sYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKSxuKHYuc2hhcGVzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhd09uZSIpKSxuKHYuaW1hZ2VzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQueGF4aXMscj10LnlheGlzO3YuX2RlZnMuc2VsZWN0KCIjIit0LmNsaXBJZCsiPiByZWN0IikuY2FsbChvLnNldFRyYW5zbGF0ZSwwLDApLmNhbGwoby5zZXRTY2FsZSwxLDEpLHQucGxvdC5jYWxsKG8uc2V0VHJhbnNsYXRlLGUuX29mZnNldCxyLl9vZmZzZXQpLmNhbGwoby5zZXRTY2FsZSwxLDEpO3ZhciBuPXQucGxvdC5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi5wb2ludHMiKTtuLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChvLnNldFBvaW50R3JvdXBTY2FsZSwxLDEpLmNhbGwoby5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpLG4uc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChvLnNldFRleHRQb2ludHNTY2FsZSwxLDEpLmNhbGwoby5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLHQpfWZ1bmN0aW9uIGYoZSxyKXt2YXIgbixpLGEscz15W2UueGF4aXMuX2lkXSxsPXlbZS55YXhpcy5faWRdLHU9W107aWYocyl7bj10Ll9mdWxsTGF5b3V0W3MuYXhpc05hbWVdLGk9bi5fcixhPXMudG8sdVswXT0oaVswXSooMS1yKStyKmFbMF0taVswXSkvKGlbMV0taVswXSkqZS54YXhpcy5fbGVuZ3RoO3ZhciBoPWlbMV0taVswXSxmPWFbMV0tYVswXTtuLnJhbmdlWzBdPWlbMF0qKDEtcikrciphWzBdLG4ucmFuZ2VbMV09aVsxXSooMS1yKStyKmFbMV0sdVsyXT1lLnhheGlzLl9sZW5ndGgqKDEtcityKmYvaCl9ZWxzZSB1WzBdPTAsdVsyXT1lLnhheGlzLl9sZW5ndGg7aWYobCl7bj10Ll9mdWxsTGF5b3V0W2wuYXhpc05hbWVdLGk9bi5fcixhPWwudG8sdVsxXT0oaVsxXSooMS1yKStyKmFbMV0taVsxXSkvKGlbMF0taVsxXSkqZS55YXhpcy5fbGVuZ3RoO3ZhciBkPWlbMV0taVswXSxwPWFbMV0tYVswXTtuLnJhbmdlWzBdPWlbMF0qKDEtcikrciphWzBdLG4ucmFuZ2VbMV09aVsxXSooMS1yKStyKmFbMV0sdVszXT1lLnlheGlzLl9sZW5ndGgqKDEtcityKnAvZCl9ZWxzZSB1WzFdPTAsdVszXT1lLnlheGlzLl9sZW5ndGg7YyhlLnhheGlzLGUueWF4aXMpO3ZhciBtPWUueGF4aXMsZz1lLnlheGlzLGI9ISFzLHg9ISFsLF89Yj9tLl9sZW5ndGgvdVsyXToxLHc9eD9nLl9sZW5ndGgvdVszXToxLE09Yj91WzBdOjAsaz14P3VbMV06MCxBPWI/dVswXS91WzJdKm0uX2xlbmd0aDowLFQ9eD91WzFdL3VbM10qZy5fbGVuZ3RoOjAsUz1tLl9vZmZzZXQtQSxFPWcuX29mZnNldC1UO3YuX2RlZnMuc2VsZWN0KCIjIitlLmNsaXBJZCsiPiByZWN0IikuY2FsbChvLnNldFRyYW5zbGF0ZSxNLGspLmNhbGwoby5zZXRTY2FsZSwxL18sMS93KSxlLnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxTLEUpLmNhbGwoby5zZXRTY2FsZSxfLHcpLnNlbGVjdEFsbCgiLnBvaW50cyIpLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChvLnNldFBvaW50R3JvdXBTY2FsZSwxL18sMS93KSxlLnBsb3Quc2VsZWN0QWxsKCIucG9pbnRzIikuc2VsZWN0QWxsKCIudGV4dHBvaW50IikuY2FsbChvLnNldFRleHRQb2ludHNTY2FsZSwxL18sMS93KX1mdW5jdGlvbiBkKCl7Zm9yKHZhciBlPXt9LHI9MDtyPGIubGVuZ3RoO3IrKyl7dmFyIG49dC5fZnVsbExheW91dFt5W2Jbcl1dLmF4aXNOYW1lXSxhPXlbYltyXV0udG87ZVtuLl9uYW1lKyIucmFuZ2VbMF0iXT1hWzBdLGVbbi5fbmFtZSsiLnJhbmdlWzFdIl09YVsxXSxuLnJhbmdlPWEuc2xpY2UoKX1yZXR1cm4gXyYmXygpLGkucmVsYXlvdXQodCxlKS50aGVuKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDx4Lmxlbmd0aDt0KyspaCh4W3RdKX0pfWZ1bmN0aW9uIHAoKXtmb3IodmFyIGU9e30scj0wO3I8Yi5sZW5ndGg7cisrKXt2YXIgbj10Ll9mdWxsTGF5b3V0W2Jbcl0rImF4aXMiXTtlW24uX25hbWUrIi5yYW5nZVswXSJdPW4ucmFuZ2VbMF0sZVtuLl9uYW1lKyIucmFuZ2VbMV0iXT1uLnJhbmdlWzFdLG4ucmFuZ2U9bi5fci5zbGljZSgpfXJldHVybiBpLnJlbGF5b3V0KHQsZSkudGhlbihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8eC5sZW5ndGg7dCsrKWgoeFt0XSl9KX1mdW5jdGlvbiBtKCl7TT1EYXRlLm5vdygpO2Zvcih2YXIgdD1NYXRoLm1pbigxLChNLXcpL3IuZHVyYXRpb24pLGU9QSh0KSxuPTA7bjx4Lmxlbmd0aDtuKyspZih4W25dLGUpO00tdz5yLmR1cmF0aW9uPyhkKCksaz13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUobSkpOms9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShtKX12YXIgdj10Ll9mdWxsTGF5b3V0LGc9W10seT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG89e307Zm9yKGUgaW4gdClpZihyPWUuc3BsaXQoIi4iKSxuPXJbMF0ubWF0Y2gobCkpe3ZhciBzPW5bMV0sdT1zKyJheGlzIjtpZihpPXZbdV0sYT17fSxBcnJheS5pc0FycmF5KHRbZV0pP2EudG89dFtlXS5zbGljZSgwKTpBcnJheS5pc0FycmF5KHRbZV0ucmFuZ2UpJiYoYS50bz10W2VdLnJhbmdlLnNsaWNlKDApKSwhYS50byljb250aW51ZTthLmF4aXNOYW1lPXUsYS5sZW5ndGg9aS5fbGVuZ3RoLGcucHVzaChzKSxvW3NdPWF9cmV0dXJuIG99KGUpLGI9T2JqZWN0LmtleXMoeSkseD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC5fcGxvdHMscz1bXTtmb3IobiBpbiBvKXt2YXIgbD1vW25dO2lmKC0xPT09cy5pbmRleE9mKGwpKXt2YXIgdT1sLnhheGlzLl9pZCxjPWwueWF4aXMuX2lkLGg9bC54YXhpcy5yYW5nZSxmPWwueWF4aXMucmFuZ2U7bC54YXhpcy5fcj1sLnhheGlzLnJhbmdlLnNsaWNlKCksbC55YXhpcy5fcj1sLnlheGlzLnJhbmdlLnNsaWNlKCksaT1yW3VdP3JbdV0udG86aCxhPXJbY10/cltjXS50bzpmLGhbMF09PT1pWzBdJiZoWzFdPT09aVsxXSYmZlswXT09PWFbMF0mJmZbMV09PT1hWzFdfHwtMT09PWUuaW5kZXhPZih1KSYmLTE9PT1lLmluZGV4T2YoYyl8fHMucHVzaChsKX19cmV0dXJuIHN9KHYsYix5KTtpZigheC5sZW5ndGgpcmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYocih0LGkpLG4pcmV0dXJufWUodi5hbm5vdGF0aW9uc3x8W10sYS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhd09uZSIpKSxlKHYuc2hhcGVzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwiZHJhd09uZSIpKSxlKHYuaW1hZ2VzfHxbXSxhLmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiZHJhdyIpLCEwKX0oKSwhMTt2YXIgXzt1JiYoXz11KCkpO3ZhciB3LE0sayxBPW4uZWFzZShyLmVhc2luZyk7cmV0dXJuIHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MucHVzaChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoayksaz1udWxsLHAoKX0pLHc9RGF0ZS5ub3coKSxrPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobSksUHJvbWlzZS5yZXNvbHZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9heGVzIjo3NjQsZDM6MTIwfV0sNzg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigiLSI9PT10LnR5cGUpe3ZhciByPXQuX2lkLG49ci5jaGFyQXQoMCk7LTEhPT1yLmluZGV4T2YoInNjZW5lIikmJihyPW4pO3ZhciB1PWkoZSxyLG4pO2lmKHUpe2lmKCJoaXN0b2dyYW0iPT09dS50eXBlJiZuPT09e3Y6InkiLGg6IngifVt1Lm9yaWVudGF0aW9ufHwidiJdKXJldHVybiB2b2lkKHQudHlwZT0ibGluZWFyIik7dmFyIGM9bisiY2FsZW5kYXIiLGg9dVtjXTtpZihvKHUsbikpe2Zvcih2YXIgZixkPWEodSkscD1bXSxtPTA7bTxlLmxlbmd0aDttKyspZj1lW21dLHMudHJhY2VJcyhmLCJib3giKSYmKGZbbisiYXhpcyJdfHxuKT09PXImJih2b2lkIDAhPT1mW2RdP3AucHVzaChmW2RdWzBdKTp2b2lkIDAhPT1mLm5hbWU/cC5wdXNoKGYubmFtZSk6cC5wdXNoKCJ0ZXh0IiksZltjXSE9PWgmJihoPXZvaWQgMCkpO3QudHlwZT1sKHAsaCl9ZWxzZSB0LnR5cGU9bCh1W25dfHxbdVtuKyIwIl1dLGgpfX19ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX1mdW5jdGlvbiBhKHQpe3JldHVybnt2OiJ4IixoOiJ5In1bdC5vcmllbnRhdGlvbnx8InYiXX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9YSh0KSxuPXMudHJhY2VJcyh0LCJib3giKSxpPXMudHJhY2VJcyh0Ll9mdWxsSW5wdXR8fHt9LCJjYW5kbGVzdGljayIpO3JldHVybiBuJiYhaSYmZT09PXImJnZvaWQgMD09PXRbcl0mJnZvaWQgMD09PXRbcisiMCJdfXZhciBzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL2F4aXNfYXV0b3R5cGUiKSx1PXQoIi4vYXhpc19pZHMiKS5uYW1lMmlkO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEpe2EmJihlLl9uYW1lPWEsZS5faWQ9dShhKSksIi0iPT09cigidHlwZSIpJiYobihlLGkpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6dC50eXBlPWUudHlwZSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXhpc19hdXRvdHlwZSI6NzY1LCIuL2F4aXNfaWRzIjo3Njd9XSw3ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saSxhLG89ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBpPXUubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLGE9cltlLnR5cGVdPXJbZS50eXBlXXx8e30sYS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZhW2UucHJvcF0hPT1pJiYobz0hMCksYVtlLnByb3BdPWkse2NoYW5nZWQ6byx2YWx1ZTppfX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZVswXSkmJjE9PT1lWzBdLmxlbmd0aCYmLTEhPT1bInN0cmluZyIsIm51bWJlciJdLmluZGV4T2YodHlwZW9mIGVbMF1bMF0pP1t7dHlwZToibGF5b3V0Iixwcm9wOiJfY3VycmVudEZyYW1lIix2YWx1ZTplWzBdWzBdLnRvU3RyaW5nKCl9XTpbXX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9W10sbj1lWzBdLGk9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWlbbl09ZVsxXTtlbHNle2lmKCF1LmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7aT1ufXJldHVybiBzKGksZnVuY3Rpb24odCxlLG4pe3IucHVzaCh7dHlwZToibGF5b3V0Iixwcm9wOnQsdmFsdWU6bn0pfSwiIiwwKSxyfWZ1bmN0aW9uIG8odCxlKXt2YXIgcixuLGksYSxvPVtdO2lmKG49ZVswXSxpPWVbMV0scj1lWzJdLGE9e30sInN0cmluZyI9PXR5cGVvZiBuKWFbbl09aTtlbHNle2lmKCF1LmlzUGxhaW5PYmplY3QobikpcmV0dXJuIG87YT1uLHZvaWQgMD09PXImJihyPWkpfXJldHVybiB2b2lkIDA9PT1yJiYocj1udWxsKSxzKGEsZnVuY3Rpb24oZSxuLGkpe3ZhciBhO2lmKEFycmF5LmlzQXJyYXkoaSkpe3ZhciBzPU1hdGgubWluKGkubGVuZ3RoLHQuZGF0YS5sZW5ndGgpO3ImJihzPU1hdGgubWluKHMsci5sZW5ndGgpKSxhPVtdO2Zvcih2YXIgbD0wO2w8cztsKyspYVtsXT1yP3JbbF06bH1lbHNlIGE9cj9yLnNsaWNlKDApOm51bGw7aWYobnVsbD09PWEpQXJyYXkuaXNBcnJheShpKSYmKGk9aVswXSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGEpKXtpZighQXJyYXkuaXNBcnJheShpKSl7dmFyIHU9aTtpPVtdO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWlbY109dX1pLmxlbmd0aD1NYXRoLm1pbihhLmxlbmd0aCxpLmxlbmd0aCl9by5wdXNoKHt0eXBlOiJkYXRhIixwcm9wOmUsdHJhY2VzOmEsdmFsdWU6aX0pfSwiIiwwKSxvfWZ1bmN0aW9uIHModCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgYT10W2ldO2lmKCJfIiE9PWlbMF0pe3ZhciBvPXIrKG4+MD8iLiI6IiIpK2k7dS5pc1BsYWluT2JqZWN0KGEpP3MoYSxlLG8sbisxKTplKG8saSxhKX19KX12YXIgbD10KCIuLi9wbG90bHkiKSx1PXQoIi4uL2xpYiIpO3IubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxpLGEpe3ZhciBvPXt9LHM9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYobz1lLl9jb21tYW5kT2JzZXJ2ZXIpLG8uY2FjaGV8fChvLmNhY2hlPXt9KSxvLmxvb2t1cFRhYmxlPXt9O3ZhciBsPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsaSxvLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGwpcmV0dXJuIG87aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLG99aWYobCl7bih0LGwsby5jYWNoZSksby5jaGVjaz1mdW5jdGlvbigpe2lmKHMpe3ZhciBlPW4odCxsLG8uY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJmEmJnZvaWQgMCE9PW8ubG9va3VwVGFibGVbZS52YWx1ZV0mJihvLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUoYSh7dmFsdWU6ZS52YWx1ZSx0eXBlOmwudHlwZSxwcm9wOmwucHJvcCx0cmFjZXM6bC50cmFjZXMsaW5kZXg6by5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKG8uZW5hYmxlLG8uZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciBjPVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxoPTA7aDxjLmxlbmd0aDtoKyspdC5faW50ZXJuYWxPbihjW2hdLG8uY2hlY2spO28ucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcihjW2VdLG8uY2hlY2spfX1lbHNlIHUud2FybigiVW5hYmxlIHRvIGF1dG9tYXRpY2FsbHkgYmluZCBwbG90IHVwZGF0ZXMgdG8gQVBJIGNvbW1hbmQiKSxvLmxvb2t1cFRhYmxlPXt9LG8ucmVtb3ZlPWZ1bmN0aW9uKCl7fTtyZXR1cm4gby5kaXNhYmxlPWZ1bmN0aW9uKCl7cz0hMX0sby5lbmFibGU9ZnVuY3Rpb24oKXtzPSEwfSxlJiYoZS5fY29tbWFuZE9ic2VydmVyPW8pLG99LHIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhLG89ZS5sZW5ndGg7Zm9yKGk9MDtpPG87aSsrKXt2YXIgcyxsPWVbaV0sdT1sLm1ldGhvZCxjPWwuYXJncztpZihBcnJheS5pc0FycmF5KGMpfHwoYz1bXSksIXUpcmV0dXJuITE7dmFyIGg9ci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzKHQsdSxjKTtpZigxIT09aC5sZW5ndGgpcmV0dXJuITE7aWYoYSl7aWYocz1oWzBdLHMudHlwZSE9PWEudHlwZSlyZXR1cm4hMTtpZihzLnByb3AhPT1hLnByb3ApcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShhLnRyYWNlcykpe2lmKCFBcnJheS5pc0FycmF5KHMudHJhY2VzKSlyZXR1cm4hMTtzLnRyYWNlcy5zb3J0KCk7Zm9yKHZhciBmPTA7ZjxhLnRyYWNlcy5sZW5ndGg7ZisrKWlmKGEudHJhY2VzW2ZdIT09cy50cmFjZXNbZl0pcmV0dXJuITF9ZWxzZSBpZihzLnByb3AhPT1hLnByb3ApcmV0dXJuITF9ZWxzZSBhPWhbMF0sQXJyYXkuaXNBcnJheShhLnRyYWNlcykmJmEudHJhY2VzLnNvcnQoKTtzPWhbMF07dmFyIGQ9cy52YWx1ZTtpZihBcnJheS5pc0FycmF5KGQpKXtpZigxIT09ZC5sZW5ndGgpcmV0dXJuITE7ZD1kWzBdfW4mJihuW2RdPWkpfXJldHVybiBhfSxyLmV4ZWN1dGVBUElDb21tYW5kPWZ1bmN0aW9uKHQsZSxyKXtpZigic2tpcCI9PT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTt2YXIgbj1sW2VdLGk9W3RdO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTtmb3IodmFyIGE9MDthPHIubGVuZ3RoO2ErKylpLnB1c2goclthXSk7cmV0dXJuIG4uYXBwbHkobnVsbCxpKS5jYXRjaChmdW5jdGlvbih0KXtyZXR1cm4gdS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pfSxyLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3N3aXRjaChBcnJheS5pc0FycmF5KHIpfHwocj1bXSksZSl7Y2FzZSJyZXN0eWxlIjpuPW8odCxyKTticmVhaztjYXNlInJlbGF5b3V0IjpuPWEodCxyKTticmVhaztjYXNlInVwZGF0ZSI6bj1vKHQsW3JbMF0sclsyXV0pLmNvbmNhdChhKHQsW3JbMV1dKSk7YnJlYWs7Y2FzZSJhbmltYXRlIjpuPWkodCxyKTticmVhaztkZWZhdWx0Om49W119cmV0dXJuIG59fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90bHkiOjc1OX1dLDc4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2ZhbWlseTp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn19fSx7fV0sNzg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17X2lzTGlua2VkVG9BcnJheToiZnJhbWVzX2VudHJ5Iixncm91cDp7dmFsVHlwZToic3RyaW5nIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIn0sdHJhY2VzOnt2YWxUeXBlOiJhbnkifSxiYXNlZnJhbWU6e3ZhbFR5cGU6InN0cmluZyJ9LGRhdGE6e3ZhbFR5cGU6ImFueSJ9LGxheW91dDp7dmFsVHlwZToiYW55In19fSx7fV0sNzkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fTtuLnByb2pOYW1lcz17ZXF1aXJlY3Rhbmd1bGFyOiJlcXVpcmVjdGFuZ3VsYXIiLG1lcmNhdG9yOiJtZXJjYXRvciIsb3J0aG9ncmFwaGljOiJvcnRob2dyYXBoaWMiLCJuYXR1cmFsIGVhcnRoIjoibmF0dXJhbEVhcnRoIixrYXZyYXlza2l5Nzoia2F2cmF5c2tpeTciLG1pbGxlcjoibWlsbGVyIixyb2JpbnNvbjoicm9iaW5zb24iLGVja2VydDQ6ImVja2VydDQiLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6ImF6aW11dGhhbEVxdWFsQXJlYSIsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6ImF6aW11dGhhbEVxdWlkaXN0YW50IiwiY29uaWMgZXF1YWwgYXJlYSI6ImNvbmljRXF1YWxBcmVhIiwiY29uaWMgY29uZm9ybWFsIjoiY29uaWNDb25mb3JtYWwiLCJjb25pYyBlcXVpZGlzdGFudCI6ImNvbmljRXF1aWRpc3RhbnQiLGdub21vbmljOiJnbm9tb25pYyIsc3RlcmVvZ3JhcGhpYzoic3RlcmVvZ3JhcGhpYyIsbW9sbHdlaWRlOiJtb2xsd2VpZGUiLGhhbW1lcjoiaGFtbWVyIiwidHJhbnN2ZXJzZSBtZXJjYXRvciI6InRyYW5zdmVyc2VNZXJjYXRvciIsImFsYmVycyB1c2EiOiJhbGJlcnNVc2EiLCJ3aW5rZWwgdHJpcGVsIjoid2lua2VsMyIsYWl0b2ZmOiJhaXRvZmYiLHNpbnVzb2lkYWw6InNpbnVzb2lkYWwifSxuLmF4ZXNOYW1lcz1bImxvbmF4aXMiLCJsYXRheGlzIl0sbi5sb25heGlzU3Bhbj17b3J0aG9ncmFwaGljOjE4MCwiYXppbXV0aGFsIGVxdWFsIGFyZWEiOjM2MCwiYXppbXV0aGFsIGVxdWlkaXN0YW50IjozNjAsImNvbmljIGNvbmZvcm1hbCI6MTgwLGdub21vbmljOjE2MCxzdGVyZW9ncmFwaGljOjE4MCwidHJhbnN2ZXJzZSBtZXJjYXRvciI6MTgwLCIqIjozNjB9LG4ubGF0YXhpc1NwYW49eyJjb25pYyBjb25mb3JtYWwiOjE1MCxzdGVyZW9ncmFwaGljOjE3OS41LCIqIjoxODB9LG4uc2NvcGVEZWZhdWx0cz17d29ybGQ6e2xvbmF4aXNSYW5nZTpbLTE4MCwxODBdLGxhdGF4aXNSYW5nZTpbLTkwLDkwXSxwcm9qVHlwZToiZXF1aXJlY3Rhbmd1bGFyIixwcm9qUm90YXRlOlswLDAsMF19LHVzYTp7bG9uYXhpc1JhbmdlOlstMTgwLC01MF0sbGF0YXhpc1JhbmdlOlsxNSw4MF0scHJvalR5cGU6ImFsYmVycyB1c2EifSxldXJvcGU6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6WzMwLDgwXSxwcm9qVHlwZToiY29uaWMgY29uZm9ybWFsIixwcm9qUm90YXRlOlsxNSwwLDBdLHByb2pQYXJhbGxlbHM6WzAsNjBdfSxhc2lhOntsb25heGlzUmFuZ2U6WzIyLDE2MF0sbGF0YXhpc1JhbmdlOlstMTUsNTVdLHByb2pUeXBlOiJtZXJjYXRvciIscHJvalJvdGF0ZTpbMCwwLDBdfSxhZnJpY2E6e2xvbmF4aXNSYW5nZTpbLTMwLDYwXSxsYXRheGlzUmFuZ2U6Wy00MCw0MF0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LCJub3J0aCBhbWVyaWNhIjp7bG9uYXhpc1JhbmdlOlstMTgwLC00NV0sbGF0YXhpc1JhbmdlOls1LDg1XSxwcm9qVHlwZToiY29uaWMgY29uZm9ybWFsIixwcm9qUm90YXRlOlstMTAwLDAsMF0scHJvalBhcmFsbGVsczpbMjkuNSw0NS41XX0sInNvdXRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xMDAsLTMwXSxsYXRheGlzUmFuZ2U6Wy02MCwxNV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19fSxuLmNsaXBQYWQ9LjAwMSxuLnByZWNpc2lvbj0uMSxuLmxhbmRDb2xvcj0iI0YwREM4MiIsbi53YXRlckNvbG9yPSIjMzM5OUZGIixuLmxvY2F0aW9ubW9kZVRvTGF5ZXI9eyJJU08tMyI6ImNvdW50cmllcyIsIlVTQS1zdGF0ZXMiOiJzdWJ1bml0cyIsImNvdW50cnkgbmFtZXMiOiJjb3VudHJpZXMifSxuLnNwaGVyZVNWRz17dHlwZToiU3BoZXJlIn0sbi5maWxsTGF5ZXJzPVsib2NlYW4iLCJsYW5kIiwibGFrZXMiXSxuLmxpbmVMYXllcnM9WyJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJyaXZlcnMiLCJmcmFtZSJdLG4uYmFzZUxheWVycz1bIm9jZWFuIiwibGFuZCIsImxha2VzIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwicml2ZXJzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSJdLG4ubGF5ZXJOYW1lVG9BZGplY3RpdmU9e29jZWFuOiJvY2VhbiIsbGFuZDoibGFuZCIsbGFrZXM6Imxha2UiLHN1YnVuaXRzOiJzdWJ1bml0Iixjb3VudHJpZXM6ImNvdW50cnkiLGNvYXN0bGluZXM6ImNvYXN0bGluZSIscml2ZXJzOiJyaXZlciIsZnJhbWU6ImZyYW1lIn0sbi5iYXNlTGF5ZXJzT3ZlckNob3JvcGxldGg9WyJyaXZlcnMiLCJsYWtlcyJdfSx7fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uVHlwZT1udWxsLHRoaXMucHJvamVjdGlvbj1udWxsLHRoaXMuY2xpcEFuZ2xlPW51bGwsdGhpcy5zZXRTY2FsZT1udWxsLHRoaXMucGF0aD1udWxsLHRoaXMuem9vbT1udWxsLHRoaXMuem9vbVJlc2V0PW51bGwsdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy50cmFjZUhhc2g9e319ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHUuZ2VvLmdyYXRpY3VsZSgpLmV4dGVudChbW3RbMF0sZVswXV0sW3RbMV0sZVsxXV1dKS5zdGVwKHIpfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPWIubGF5ZXJOYW1lVG9BZGplY3RpdmVbZV07dC5zZWxlY3QoIi4iK2UpLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5jYWxsKGMuZmlsbCxyW24rImNvbG9yIl0pfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWIubGF5ZXJOYW1lVG9BZGplY3RpdmVbZV07dC5zZWxlY3QoIi4iK2UpLnNlbGVjdEFsbCgicGF0aCIpLmF0dHIoImZpbGwiLCJub25lIikuY2FsbChjLnN0cm9rZSxyW24rImNvbG9yIl0pLmNhbGwoaC5kYXNoTGluZSwiIixyW24rIndpZHRoIl0pfWZ1bmN0aW9uIHModCxlLHIpe3Quc2VsZWN0KCIuIitlKyJncmF0aWN1bGUiKS5zZWxlY3RBbGwoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmNhbGwoYy5zdHJva2UscltlXS5ncmlkY29sb3IpLmNhbGwoaC5kYXNoTGluZSwiIixyW2VdLmdyaWR3aWR0aCl9ZnVuY3Rpb24gbCh0KXt2YXIgZT17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6cC5sYXlvdXRBdHRyaWJ1dGVzLmV4cG9uZW50Zm9ybWF0LmRmbHR9O3JldHVybiBwLnNldENvbnZlcnQoZSx0KSxlfXZhciB1PXQoImQzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxkPXQoIi4uL3Bsb3RzIikscD10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLG09dCgiLi9wcm9qZWN0aW9ucyIpLHY9dCgiLi9zZXRfc2NhbGUiKSxnPXQoIi4vem9vbSIpLHk9dCgiLi96b29tX3Jlc2V0IiksYj10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksXz10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO20odSksZS5leHBvcnRzPW47dmFyIHc9bi5wcm90b3R5cGU7dy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dGhpcyxvPWVbYS5pZF0scz1lLl9zaXplO2EucHJvamVjdGlvbj1udWxsLGEuc2V0U2NhbGU9dihvLHMpLGEubWFrZVByb2plY3Rpb24obyksYS5tYWtlUGF0aCgpLGEuYWRqdXN0TGF5b3V0KG8scyksYS56b29tPWcoYSxvKSxhLnpvb21SZXNldD15KGEsbyksYS5tb2NrQXhpcz1sKGUpLGEuZnJhbWV3b3JrLmNhbGwoYS56b29tKS5vbigiZGJsY2xpY2suem9vbSIsYS56b29tUmVzZXQpLGEuZnJhbWV3b3JrLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7dmFyIHQ9dS5tb3VzZSh0aGlzKSxlPWEucHJvamVjdGlvbi5pbnZlcnQodCk7aWYoZSYmIWlzTmFOKGVbMF0pJiYhaXNOYU4oZVsxXSkpe3ZhciByPXUuZXZlbnQ7ci54cHg9dFswXSxyLnlweD10WzFdLGEueGF4aXMuYzJwPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMF19LGEueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIGVbMF19LGEueWF4aXMuYzJwPWZ1bmN0aW9uKCl7cmV0dXJuIHRbMV19LGEueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIGVbMV19LGYuaG92ZXIoYS5ncmFwaERpdixyLGEuaWQpfX0pLGEuZnJhbWV3b3JrLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtmLmxvbmVVbmhvdmVyKGUuX3RvcHBhcGVyKX0pLGEuZnJhbWV3b3JrLm9uKCJjbGljayIsZnVuY3Rpb24oKXtmLmNsaWNrKGEuZ3JhcGhEaXYsdS5ldmVudCl9KSxuPXguZ2V0VG9wb2pzb25OYW1lKG8pLG51bGw9PT1hLnRvcG9qc29ufHxuIT09YS50b3BvanNvbk5hbWU/KGEudG9wb2pzb25OYW1lPW4sdm9pZCAwIT09UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW2EudG9wb2pzb25OYW1lXT8oYS50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bYS50b3BvanNvbk5hbWVdLGEub25jZVRvcG9qc29uSXNMb2FkZWQodCxvKSk6KGk9eC5nZXRUb3BvanNvblBhdGgoYS50b3BvanNvblVSTCxhLnRvcG9qc29uTmFtZSksci5wdXNoKG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUscil7dS5qc29uKGksZnVuY3Rpb24obixzKXtpZihuKXJldHVybiB2b2lkIHIoNDA0PT09bi5zdGF0dXM/bmV3IEVycm9yKFsicGxvdGx5LmpzIGNvdWxkIG5vdCBmaW5kIHRvcG9qc29uIGZpbGUgYXQiLGksIi4iLCJNYWtlIHN1cmUgdGhlICp0b3BvanNvblVSTCogcGxvdCBjb25maWcgb3B0aW9uIiwiaXMgc2V0IHByb3Blcmx5LiJdLmpvaW4oIiAiKSk6bmV3IEVycm9yKFsidW5leHBlY3RlZCBlcnJvciB3aGlsZSBmZXRjaGluZyB0b3BvanNvbiBmaWxlIGF0IixpXS5qb2luKCIgIikpKTthLnRvcG9qc29uPXMsUGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW2EudG9wb2pzb25OYW1lXT1zLGEub25jZVRvcG9qc29uSXNMb2FkZWQodCxvKSxlKCl9KX0pKSkpOmEub25jZVRvcG9qc29uSXNMb2FkZWQodCxvKX0sdy5vbmNlVG9wb2pzb25Jc0xvYWRlZD1mdW5jdGlvbih0LGUpe3RoaXMuZHJhd0xheW91dChlKSxkLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZSh0aGlzLHQsZSksdGhpcy5yZW5kZXIoKX0sdy5tYWtlUHJvamVjdGlvbj1mdW5jdGlvbih0KXt2YXIgZSxyPXQucHJvamVjdGlvbixuPXIudHlwZSxpPW51bGw9PT10aGlzLnByb2plY3Rpb258fG4hPT10aGlzLnByb2plY3Rpb25UeXBlO2k/KHRoaXMucHJvamVjdGlvblR5cGU9bixlPXRoaXMucHJvamVjdGlvbj11Lmdlb1tiLnByb2pOYW1lc1tuXV0oKSk6ZT10aGlzLnByb2plY3Rpb24sZS50cmFuc2xhdGUoci5fdHJhbnNsYXRlMCkucHJlY2lzaW9uKGIucHJlY2lzaW9uKSx0Ll9pc0FsYmVyc1VzYXx8ZS5yb3RhdGUoci5fcm90YXRlKS5jZW50ZXIoci5fY2VudGVyKSx0Ll9jbGlwQW5nbGU/KHRoaXMuY2xpcEFuZ2xlPXQuX2NsaXBBbmdsZSxlLmNsaXBBbmdsZSh0Ll9jbGlwQW5nbGUtYi5jbGlwUGFkKSk6dGhpcy5jbGlwQW5nbGU9bnVsbCxyLnBhcmFsbGVscyYmZS5wYXJhbGxlbHMoci5wYXJhbGxlbHMpLGkmJnRoaXMuc2V0U2NhbGUoZSksZS50cmFuc2xhdGUoci5fdHJhbnNsYXRlKS5zY2FsZShyLl9zY2FsZSl9LHcubWFrZVBhdGg9ZnVuY3Rpb24oKXt0aGlzLnBhdGg9dS5nZW8ucGF0aCgpLnByb2plY3Rpb24odGhpcy5wcm9qZWN0aW9uKX0sdy5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dCxlPSJjbGlwIit0Ll91aWQrdGhpcy5pZCxyPXQuX2RlZnMuc2VsZWN0QWxsKCJnLmNsaXBzIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjbGlwcyIsITApLCh0aGlzLmNsaXBEZWY9ci5zZWxlY3RBbGwoIiMiK2UpLmRhdGEoWzBdKSkuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLGUpLmFwcGVuZCgicmVjdCIpO3ZhciBuPXRoaXMuZnJhbWV3b3JrPXUuc2VsZWN0KHRoaXMuY29udGFpbmVyKS5hcHBlbmQoImciKTtuLmF0dHIoImNsYXNzIiwiZ2VvICIrdGhpcy5pZCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuY2FsbChoLnNldENsaXBVcmwsZSksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImJnbGF5ZXIiKS5hcHBlbmQoInJlY3QiKSxuLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYmFzZWxheWVyIiksbi5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNob3JvcGxldGhsYXllciIpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJiYXNlbGF5ZXJvdmVyY2hvcm9wbGV0aCIpLG4uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzY2F0dGVyZ2VvbGF5ZXIiKSxuLm9uKCJkYmxjbGljay56b29tIixudWxsKSx0aGlzLnhheGlzPXtfaWQ6IngifSx0aGlzLnlheGlzPXtfaWQ6InkifX0sdy5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmRvbWFpbixuPWUubCtlLncqci54WzBdK3QuX21hcmdpblgsaT1lLnQrZS5oKigxLXIueVsxXSkrdC5fbWFyZ2luWTtoLnNldFRyYW5zbGF0ZSh0aGlzLmZyYW1ld29yayxuLGkpO3ZhciBhPXt4OjAseTowLHdpZHRoOnQuX3dpZHRoLGhlaWdodDp0Ll9oZWlnaHR9O3RoaXMuY2xpcERlZi5zZWxlY3QoInJlY3QiKS5hdHRyKGEpLHRoaXMuZnJhbWV3b3JrLnNlbGVjdCgiLmJnbGF5ZXIiKS5zZWxlY3QoInJlY3QiKS5hdHRyKGEpLmNhbGwoYy5maWxsLHQuYmdjb2xvciksdGhpcy54YXhpcy5fb2Zmc2V0PW4sdGhpcy54YXhpcy5fbGVuZ3RoPXQuX3dpZHRoLHRoaXMueWF4aXMuX29mZnNldD1pLHRoaXMueWF4aXMuX2xlbmd0aD10Ll9oZWlnaHR9LHcuZHJhd1RvcG89ZnVuY3Rpb24odCxlLHIpe2lmKCEwPT09clsic2hvdyIrZV0pe3ZhciBuPXRoaXMudG9wb2pzb24saT0iZnJhbWUiPT09ZT9iLnNwaGVyZVNWRzpfKG4sbi5vYmplY3RzW2VdKTt0LmFwcGVuZCgiZyIpLmRhdHVtKGkpLmF0dHIoImNsYXNzIixlKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImJhc2VwYXRoIil9fSx3LmRyYXdHcmF0aWN1bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbZV07aWYoITA9PT1uLnNob3dncmlkKXt2YXIgYT1iLnNjb3BlRGVmYXVsdHNbci5zY29wZV0sbz1hLmxvbmF4aXNSYW5nZSxzPWEubGF0YXhpc1JhbmdlLGw9ImxvbmF4aXMiPT09ZT9bbi5kdGlja106WzAsbi5kdGlja10sdT1pKG8scyxsKTt0LmFwcGVuZCgiZyIpLmRhdHVtKHUpLmF0dHIoImNsYXNzIixlKyJncmF0aWN1bGUiKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImdyYXRpY3VsZXBhdGgiKX19LHcuZHJhd0xheW91dD1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuZnJhbWV3b3JrLnNlbGVjdCgiZy5iYXNlbGF5ZXIiKSxuPWIuYmFzZUxheWVycyxpPWIuYXhlc05hbWVzO3Iuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspZT1uW2FdLC0xIT09aS5pbmRleE9mKGUpP3RoaXMuZHJhd0dyYXRpY3VsZShyLGUsdCk6dGhpcy5kcmF3VG9wbyhyLGUsdCk7dGhpcy5zdHlsZUxheW91dCh0KX0sdy5zdHlsZUxheWVyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1iLmZpbGxMYXllcnMsaT1iLmxpbmVMYXllcnM7LTEhPT1uLmluZGV4T2YoZSk/YSh0LGUscik6LTEhPT1pLmluZGV4T2YoZSkmJm8odCxlLHIpfSx3LnN0eWxlTGF5b3V0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXRoaXMuZnJhbWV3b3JrLnNlbGVjdCgiZy5iYXNlbGF5ZXIiKSxuPWIuYmFzZUxheWVycyxpPWIuYXhlc05hbWVzLGE9MDthPG4ubGVuZ3RoO2ErKyllPW5bYV0sLTEhPT1pLmluZGV4T2YoZSk/cyhyLGUsdCk6dGhpcy5zdHlsZUxheWVyKHIsZSx0KX0sdy5pc0xvbkxhdE92ZXJFZGdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNsaXBBbmdsZTtpZihudWxsPT09ZSlyZXR1cm4hMTt2YXIgcj10aGlzLnByb2plY3Rpb24ucm90YXRlKCk7cmV0dXJuIHUuZ2VvLmRpc3RhbmNlKHQsWy1yWzBdLC1yWzFdXSk+ZSpNYXRoLlBJLzE4MH0sdy5yZW5kZXI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3ZhciBlPXIucHJvamVjdGlvbih0LmxvbmxhdCk7cmV0dXJuIGU/InRyYW5zbGF0ZSgiK2VbMF0rIiwiK2VbMV0rIikiOm51bGx9ZnVuY3Rpb24gZSh0KXtyZXR1cm4gci5pc0xvbkxhdE92ZXJFZGdlcyh0LmxvbmxhdCk/IjAiOiIxLjAifXZhciByPXRoaXMsbj1yLmZyYW1ld29yayxpPW4uc2VsZWN0KCJnLmNob3JvcGxldGhsYXllciIpLGE9bi5zZWxlY3QoImcuc2NhdHRlcmdlb2xheWVyIiksbz1yLnBhdGg7bi5zZWxlY3RBbGwoInBhdGguYmFzZXBhdGgiKS5hdHRyKCJkIixvKSxuLnNlbGVjdEFsbCgicGF0aC5ncmF0aWN1bGVwYXRoIikuYXR0cigiZCIsbyksaS5zZWxlY3RBbGwoInBhdGguY2hvcm9wbGV0aGxvY2F0aW9uIikuYXR0cigiZCIsbyksaS5zZWxlY3RBbGwoInBhdGguYmFzZXBhdGgiKS5hdHRyKCJkIixvKSxhLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuYXR0cigiZCIsbyksbnVsbCE9PXIuY2xpcEFuZ2xlPyhhLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLnN0eWxlKCJvcGFjaXR5IixlKS5hdHRyKCJ0cmFuc2Zvcm0iLHQpLGEuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLGUpLmF0dHIoInRyYW5zZm9ybSIsdCkpOihhLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmF0dHIoInRyYW5zZm9ybSIsdCksYS5zZWxlY3RBbGwoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLHQpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjc0NSwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vcGxvdHMiOjgyNywiLi9jb25zdGFudHMiOjc5MCwiLi9wcm9qZWN0aW9ucyI6Nzk4LCIuL3NldF9zY2FsZSI6Nzk5LCIuL3pvb20iOjgwMCwiLi96b29tX3Jlc2V0Ijo4MDEsZDM6MTIwLCJ0b3BvanNvbi1jbGllbnQiOjUzNH1dLDc5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2dlbyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9ImdlbyIsci5hdHRyPSJnZW8iLHIuaWRSb290PSJnZW8iLHIuaWRSZWdleD0vXmdlbyhbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyUmVnZXg9L15nZW8oWzItOV18WzEtOV1bMC05XSspPyQvLHIuYXR0cmlidXRlcz10KCIuL2xheW91dC9hdHRyaWJ1dGVzIiksci5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dC9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWkuZ2V0U3VicGxvdElkcyhlLCJnZW8iKTt2b2lkIDA9PT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzJiYod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KTtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkuZ2V0U3VicGxvdENhbGNEYXRhKHIsImdlbyIscyksdT1lW3NdLl9zdWJwbG90O3V8fCh1PW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX2dlb2xheWVyLm5vZGUoKSx0b3BvanNvblVSTDp0Ll9jb250ZXh0LnRvcG9qc29uVVJMfSksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QobCxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWkuZ2V0U3VicGxvdElkcyhuLCJnZW8iKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sbD1uW3NdLl9zdWJwbG90OyFlW3NdJiZsJiYobC5mcmFtZXdvcmsucmVtb3ZlKCksbC5jbGlwRGVmLnJlbW92ZSgpKX19fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4vZ2VvIjo3OTEsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjc5MywiLi9sYXlvdXQvZGVmYXVsdHMiOjc5NiwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjc5N31dLDc5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2dlbzp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJnZW8ifX19LHt9XSw3OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIifSx7dmFsVHlwZToibnVtYmVyIn1dfSxzaG93Z3JpZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sdGljazA6e3ZhbFR5cGU6Im51bWJlciJ9LGR0aWNrOnt2YWxUeXBlOiJudW1iZXIifSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4ubGlnaHRMaW5lfSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDF9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliIiksaT10KCIuLi9jb25zdGFudHMiKSxhPXQoIi4vYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBuLmNvZXJjZShvLHMsYSx0LGUpfWZvcih2YXIgbyxzLGw9aS5heGVzTmFtZXMsdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgYz1sW3VdO289dFtjXXx8e30scz17fTt2YXIgaD1mdW5jdGlvbih0KXt2YXIgcixuLGEsbyxzLGwsdT1lLnNjb3BlO3JldHVybiJ3b3JsZCI9PT11PyhyPWUucHJvamVjdGlvbixuPXIudHlwZSxhPXIucm90YXRpb24scz1pW3QrIlNwYW4iXSxsPXZvaWQgMCE9PXNbbl0/c1tuXS8yOnNbIioiXS8yLG89ImxvbmF4aXMiPT09dD9hLmxvbjphLmxhdCxbby1sLG8rbF0pOmkuc2NvcGVEZWZhdWx0c1t1XVt0KyJSYW5nZSJdfShjKSxmPXIoInJhbmdlIixoKTtuLm5vbmVPckFsbChvLnJhbmdlLHMucmFuZ2UsWzAsMV0pLHIoInRpY2swIixmWzBdKSxyKCJkdGljayIsImxvbmF4aXMiPT09Yz8zMDoxMCk7cigic2hvd2dyaWQiKSYmKHIoImdyaWRjb2xvciIpLHIoImdyaWR3aWR0aCIpKSxlW2NdPXMsZVtjXS5fZnVsbFJhbmdlPWh9fX0seyIuLi8uLi8uLi9saWIiOjcyNCwiLi4vY29uc3RhbnRzIjo3OTAsIi4vYXhpc19hdHRyaWJ1dGVzIjo3OTR9XSw3OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG4saT1yKCJzY29wZSIpLG89IndvcmxkIiE9PWksbD1hLnNjb3BlRGVmYXVsdHNbaV0sdT1yKCJyZXNvbHV0aW9uIiksYz1yKCJwcm9qZWN0aW9uLnR5cGUiLGwucHJvalR5cGUpLGg9ImFsYmVycyB1c2EiPT09YyxmPS0xIT09Yy5pbmRleE9mKCJjb25pYyIpO2lmKGYpe3IoInByb2plY3Rpb24ucGFyYWxsZWxzIixsLnByb2pQYXJhbGxlbHN8fFswLDYwXSl9aWYoaCllLnNjb3BlPSJ1c2EiO2Vsc2V7dmFyIGQ9bC5wcm9qUm90YXRlfHxbMCwwLDBdO3IoInByb2plY3Rpb24ucm90YXRpb24ubG9uIixkWzBdKSxyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCIsZFsxXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5yb2xsIixkWzJdKSxuPXIoInNob3djb2FzdGxpbmVzIiwhbyksbiYmKHIoImNvYXN0bGluZWNvbG9yIikscigiY29hc3RsaW5ld2lkdGgiKSksbj1yKCJzaG93b2NlYW4iKSxuJiZyKCJvY2VhbmNvbG9yIil9cigicHJvamVjdGlvbi5zY2FsZSIpLG49cigic2hvd2xhbmQiKSxuJiZyKCJsYW5kY29sb3IiKSxuPXIoInNob3dsYWtlcyIpLG4mJnIoImxha2Vjb2xvciIpLG49cigic2hvd3JpdmVycyIpLG4mJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxuPXIoInNob3djb3VudHJpZXMiLG8mJiJ1c2EiIT09aSksbiYmKHIoImNvdW50cnljb2xvciIpLHIoImNvdW50cnl3aWR0aCIpKSwoInVzYSI9PT1pfHwibm9ydGggYW1lcmljYSI9PT1pJiY1MD09PXUpJiYocigic2hvd3N1YnVuaXRzIiwhMCkscigic3VidW5pdGNvbG9yIikscigic3VidW5pdHdpZHRoIikpLG98fChuPXIoInNob3dmcmFtZSIsITApKSYmKHIoImZyYW1lY29sb3IiKSxyKCJmcmFtZXdpZHRoIikpLHIoImJnY29sb3IiKSxzKHQsZSksZS5faXNIaWdoUmVzPTUwPT09dSxlLl9jbGlwQW5nbGU9YS5sb25heGlzU3BhbltjXS8yLGUuX2lzQWxiZXJzVXNhPWgsZS5faXNDb25pYz1mLGUuX2lzU2NvcGVkPW87dmFyIHA9ZS5wcm9qZWN0aW9uLnJvdGF0aW9ufHx7fTtlLnByb2plY3Rpb24uX3JvdGF0ZT1bLXAubG9ufHwwLC1wLmxhdHx8MCxwLnJvbGx8fDBdfXZhciBpPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxhPXQoIi4uL2NvbnN0YW50cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9heGlzX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpKHQsZSxyLHt0eXBlOiJnZW8iLGF0dHJpYnV0ZXM6byxoYW5kbGVEZWZhdWx0czpuLHBhcnRpdGlvbjoieSJ9KX19LHsiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODM0LCIuLi9jb25zdGFudHMiOjc5MCwiLi9heGlzX2RlZmF1bHRzIjo3OTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc5N31dLDc5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbnN0YW50cyIpLGE9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2RvbWFpbjp7eDp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19LHk6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfX0scmVzb2x1dGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsxMTAsNTBdLGRmbHQ6MTEwLGNvZXJjZU51bWJlcjohMH0sc2NvcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhpLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOk9iamVjdC5rZXlzKGkucHJvak5hbWVzKX0scm90YXRpb246e2xvbjp7dmFsVHlwZToibnVtYmVyIn0sbGF0Ont2YWxUeXBlOiJudW1iZXIifSxyb2xsOnt2YWxUeXBlOiJudW1iZXIifX0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjF9fSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Omkud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Omkud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOmEsbGF0YXhpczphfX0sewoiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uL2NvbnN0YW50cyI6NzkwLCIuL2F4aXNfYXR0cmlidXRlcyI6Nzk0fV0sNzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybnt0eXBlOiJGZWF0dXJlIixpZDp0LmlkLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzLGdlb21ldHJ5OnIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gcihlLG4pe2lmKCFlKXJldHVybiBudWxsO2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09ZS50eXBlKXJldHVybnt0eXBlOiJHZW9tZXRyeUNvbGxlY3Rpb24iLGdlb21ldHJpZXM6b2JqZWN0Lmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiByKHQsbil9KX07aWYoIVMuaGFzT3duUHJvcGVydHkoZS50eXBlKSlyZXR1cm4gbnVsbDt2YXIgaT1TW2UudHlwZV07cmV0dXJuIHQuZ2VvLnN0cmVhbShlLG4oaSkpLGkucmVzdWx0KCl9ZnVuY3Rpb24gbigpe31mdW5jdGlvbiBpKHQpe2lmKChlPXQubGVuZ3RoKTw0KXJldHVybiExO2Zvcih2YXIgZSxyPTAsbj10W2UtMV1bMV0qdFswXVswXS10W2UtMV1bMF0qdFswXVsxXTsrK3I8ZTspbis9dFtyLTFdWzFdKnRbcl1bMF0tdFtyLTFdWzBdKnRbcl1bMV07cmV0dXJuIG48PTB9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1lWzBdLG49ZVsxXSxpPSExLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGw9dFthXSx1PWxbMF0sYz1sWzFdLGg9dFtzXSxmPWhbMF0sZD1oWzFdO2M+bl5kPm4mJnI8KGYtdSkqKG4tYykvKGQtYykrdSYmKGk9IWkpfXJldHVybiBpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ/dC9NYXRoLnNpbih0KToxfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQ+MT96OnQ8LTE/LXo6TWF0aC5hc2luKHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/QzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSgyK3opKk1hdGguc2luKGUpO2UvPTI7Zm9yKHZhciBuPTAsaT0xLzA7bjwxMCYmTWF0aC5hYnMoaSk+RTtuKyspe3ZhciBhPU1hdGguY29zKGUpO2UtPWk9KGUrTWF0aC5zaW4oZSkqKGErMiktcikvKDIqYSooMSthKSl9cmV0dXJuWzIvTWF0aC5zcXJ0KEMqKDQrQykpKnQqKDErTWF0aC5jb3MoZSkpLDIqTWF0aC5zcXJ0KEMvKDQrQykpKk1hdGguc2luKGUpXX1mdW5jdGlvbiBjKHQsZSl7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPVIoci9lLG4pO3JldHVybiBpWzBdKj10LGl9cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9dCksMT09PWU/UjplPT09MS8wP2Y6KHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9Ui5pbnZlcnQoci90LG4pO3JldHVybiBpWzBdKj1lLGl9LHIpfWZ1bmN0aW9uIGgoKXt2YXIgdD0yLGU9TyhjKSxyPWUodCk7cmV0dXJuIHIuY29lZmZpY2llbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZSh0PStyKTp0fSxyfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKS9NYXRoLmNvcyhlLz0yKSwyKk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuWzMqdC8oMipDKSpNYXRoLnNxcnQoQypDLzMtZSplKSxlXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuW3QsMS4yNSpNYXRoLmxvZyhNYXRoLnRhbihDLzQrLjQqZSkpXX1mdW5jdGlvbiBtKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixuPXQqTWF0aC5zaW4oZSksaT0zMDtkb3tlLT1yPShlK01hdGguc2luKGUpLW4pLygxK01hdGguY29zKGUpKX13aGlsZShNYXRoLmFicyhyKT5FJiYtLWk+MCk7cmV0dXJuIGUvMn19ZnVuY3Rpb24gdih0LGUpe3ZhciByPWUqZSxuPXIqcjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpyK24qKG4qKC4wMDM5NzEqci0uMDAxNTI5Km4pLS4wMTM3OTEpKSxlKigxLjAwNzIyNityKiguMDE1MDg1K24qKC4wMjg4NzQqci0uMDQ0NDc1LS4wMDU5MTYqbikpKV19ZnVuY3Rpb24gZyh0LGUpe3ZhciByLG49TWF0aC5taW4oMTgsMzYqTWF0aC5hYnMoZSkvQyksaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89KHI9altpXSlbMF0scz1yWzFdLGw9KHI9alsrK2ldKVswXSx1PXJbMV0sYz0ocj1qW01hdGgubWluKDE5LCsraSldKVswXSxoPXJbMV07cmV0dXJuW3QqKGwrYSooYy1vKS8yK2EqYSooYy0yKmwrbykvMiksKGU+MD96Oi16KSoodSthKihoLXMpLzIrYSphKihoLTIqdStzKS8yKV19ZnVuY3Rpb24geSh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLGVdfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1NYXRoLmNvcyhlKSxuPW8obChyKk1hdGguY29zKHQvPTIpKSk7cmV0dXJuWzIqcipNYXRoLnNpbih0KSpuLE1hdGguc2luKGUpKm5dfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1iKHQsZSk7cmV0dXJuWyhyWzBdK3QveikvMiwoclsxXStlKS8yXX10Lmdlby5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdHJlYW07aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJub3QgeWV0IHN1cHBvcnRlZCIpO3JldHVybih0JiZfLmhhc093blByb3BlcnR5KHQudHlwZSk/X1t0LnR5cGVdOnIpKHQsbil9O3ZhciBfPXtGZWF0dXJlOmUsRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxyKXtyZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOnQuZmVhdHVyZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQscil9KX19fSx3PVtdLE09W10saz17cG9pbnQ6ZnVuY3Rpb24odCxlKXt3LnB1c2goW3QsZV0pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD13Lmxlbmd0aD93Lmxlbmd0aDwyP3t0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6d1swXX06e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnd9Om51bGw7cmV0dXJuIHc9W10sdH19LEE9e2xpbmVTdGFydDpuLHBvaW50OmZ1bmN0aW9uKHQsZSl7dy5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3cubGVuZ3RoJiYoTS5wdXNoKHcpLHc9W10pfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1NLmxlbmd0aD9NLmxlbmd0aDwyP3t0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpNWzBdfTp7dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpNfTpudWxsO3JldHVybiBNPVtdLHR9fSxUPXtwb2x5Z29uU3RhcnQ6bixsaW5lU3RhcnQ6bixwb2ludDpmdW5jdGlvbih0LGUpe3cucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD13Lmxlbmd0aDtpZih0KXtkb3t3LnB1c2god1swXS5zbGljZSgpKX13aGlsZSgrK3Q8NCk7TS5wdXNoKHcpLHc9W119fSxwb2x5Z29uRW5kOm4scmVzdWx0OmZ1bmN0aW9uKCl7aWYoIU0ubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0PVtdLGU9W107cmV0dXJuIE0uZm9yRWFjaChmdW5jdGlvbihyKXtpKHIpP3QucHVzaChbcl0pOmUucHVzaChyKX0pLGUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdO3Quc29tZShmdW5jdGlvbih0KXtpZihhKHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pfHx0LnB1c2goW2VdKX0pLE09W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19LFM9e1BvaW50OmssTXVsdGlQb2ludDprLExpbmVTdHJpbmc6QSxNdWx0aUxpbmVTdHJpbmc6QSxQb2x5Z29uOlQsTXVsdGlQb2x5Z29uOlQsU3BoZXJlOlR9LEU9MWUtNixMPUUqRSxDPU1hdGguUEksej1DLzIsST0oTWF0aC5zcXJ0KEMpLEMvMTgwKSxEPTE4MC9DLFA9dC5nZW8ucHJvamVjdGlvbixPPXQuZ2VvLnByb2plY3Rpb25NdXRhdG9yO3QuZ2VvLmludGVycnVwdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscil7Zm9yKHZhciBuPXI8MD8tMToxLGk9bFsrKHI8MCldLGE9MCxvPWkubGVuZ3RoLTE7YTxvJiZ0PmlbYV1bMl1bMF07KythKTt2YXIgcz1lKHQtaVthXVsxXVswXSxyKTtyZXR1cm4gc1swXSs9ZShpW2FdWzFdWzBdLG4qcj5uKmlbYV1bMF1bMV0/aVthXVswXVsxXTpyKVswXSxzfWZ1bmN0aW9uIG4oKXtzPWwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXt2YXIgcixuPWUodFswXVswXSx0WzBdWzFdKVswXSxpPWUodFsyXVswXSx0WzJdWzFdKVswXSxhPWUodFsxXVswXSx0WzBdWzFdKVsxXSxvPWUodFsxXVswXSx0WzFdWzFdKVsxXTtyZXR1cm4gYT5vJiYocj1hLGE9byxvPXIpLFtbbixhXSxbaSxvXV19KX0pfWZ1bmN0aW9uIGkoKXtmb3IodmFyIGU9MWUtNixyPVtdLG49MCxpPWxbMF0ubGVuZ3RoO248aTsrK24pe3ZhciBvPWxbMF1bbl0scz0xODAqb1swXVswXS9DLHU9MTgwKm9bMF1bMV0vQyxjPTE4MCpvWzFdWzFdL0MsaD0xODAqb1syXVswXS9DLGY9MTgwKm9bMl1bMV0vQztyLnB1c2goYShbW3MrZSx1K2VdLFtzK2UsYy1lXSxbaC1lLGMtZV0sW2gtZSxmK2VdXSwzMCkpfWZvcih2YXIgbj1sWzFdLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgbz1sWzFdW25dLHM9MTgwKm9bMF1bMF0vQyx1PTE4MCpvWzBdWzFdL0MsYz0xODAqb1sxXVsxXS9DLGg9MTgwKm9bMl1bMF0vQyxmPTE4MCpvWzJdWzFdL0M7ci5wdXNoKGEoW1toLWUsZi1lXSxbaC1lLGMrZV0sW3MrZSxjK2VdLFtzK2UsdS1lXV0sMzApKX1yZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3QubWVyZ2UocildfX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByLG4saSxhPS0xLG89dC5sZW5ndGgscz10WzBdLGw9W107KythPG87KXtyPXRbYV0sbj0oclswXS1zWzBdKS9lLGk9KHJbMV0tc1sxXSkvZTtmb3IodmFyIHU9MDt1PGU7Kyt1KWwucHVzaChbc1swXSt1Km4sc1sxXSt1KmldKTtzPXJ9cmV0dXJuIGwucHVzaChyKSxsfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gTWF0aC5hYnModFswXS1lWzBdKTxFJiZNYXRoLmFicyh0WzFdLWVbMV0pPEV9dmFyIHMsbD1bW1tbLUMsMF0sWzAsel0sW0MsMF1dXSxbW1stQywwXSxbMCwtel0sW0MsMF1dXV07ZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbih0LG4pe2Zvcih2YXIgaT1zWysobjwwKV0sYT1sWysobjwwKV0sdT0wLGM9aS5sZW5ndGg7dTxjOysrdSl7dmFyIGg9aVt1XTtpZihoWzBdWzBdPD10JiZ0PGhbMV1bMF0mJmhbMF1bMV08PW4mJm48aFsxXVsxXSl7dmFyIGY9ZS5pbnZlcnQodC1lKGFbdV1bMV1bMF0sMClbMF0sbik7cmV0dXJuIGZbMF0rPWFbdV1bMV1bMF0sbyhyKGZbMF0sZlsxXSksW3Qsbl0pP2Y6bnVsbH19fSk7dmFyIHU9dC5nZW8ucHJvamVjdGlvbihyKSxjPXUuc3RyZWFtO3JldHVybiB1LnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgcj11LnJvdGF0ZSgpLG49YyhlKSxhPSh1LnJvdGF0ZShbMCwwXSksYyhlKSk7cmV0dXJuIHUucm90YXRlKHIpLG4uc3BoZXJlPWZ1bmN0aW9uKCl7dC5nZW8uc3RyZWFtKGkoKSxhKX0sbn0sdS5sb2Jlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKkMvMTgwLHRbMF1bMV0qQy8xODBdLFt0WzFdWzBdKkMvMTgwLHRbMV1bMV0qQy8xODBdLFt0WzJdWzBdKkMvMTgwLHRbMl1bMV0qQy8xODBdXX0pfSksbigpLHUpOmwubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChmdW5jdGlvbih0KXtyZXR1cm5bWzE4MCp0WzBdWzBdL0MsMTgwKnRbMF1bMV0vQ10sWzE4MCp0WzFdWzBdL0MsMTgwKnRbMV1bMV0vQ10sWzE4MCp0WzJdWzBdL0MsMTgwKnRbMl1bMV0vQ11dfSl9KX0sdX0sdS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0uNSplKk1hdGguc3FydCgoNCtDKS9DKSxuPXMociksaT1NYXRoLmNvcyhuKTtyZXR1cm5bdC8oMi9NYXRoLnNxcnQoQyooNCtDKSkqKDEraSkpLHMoKG4rciooaSsyKSkvKDIreikpXX0sKHQuZ2VvLmVja2VydDQ9ZnVuY3Rpb24oKXtyZXR1cm4gUCh1KX0pLnJhdz11O3ZhciBSPXQuZ2VvLmF6aW11dGhhbEVxdWFsQXJlYS5yYXc7Zi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0yKnMoZS8yKTtyZXR1cm5bdCpNYXRoLmNvcyhyLzIpL01hdGguY29zKHIpLHJdfSwodC5nZW8uaGFtbWVyPWgpLnJhdz1jLGQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWzIvMypDKnQvTWF0aC5zcXJ0KEMqQy8zLWUqZSksZV19LCh0Lmdlby5rYXZyYXlza2l5Nz1mdW5jdGlvbigpe3JldHVybiBQKGQpfSkucmF3PWQscC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyLjUqTWF0aC5hdGFuKE1hdGguZXhwKC44KmUpKS0uNjI1KkNdfSwodC5nZW8ubWlsbGVyPWZ1bmN0aW9uKCl7cmV0dXJuIFAocCl9KS5yYXc9cDt2YXIgRj0obShDKSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVyblt0KnIqTWF0aC5jb3Mobj1pKG4pKSxlKk1hdGguc2luKG4pXX12YXIgaT1tKHIpO3JldHVybiBuLmludmVydD1mdW5jdGlvbihuLGkpe3ZhciBhPXMoaS9lKTtyZXR1cm5bbi8odCpNYXRoLmNvcyhhKSkscygoMiphK01hdGguc2luKDIqYSkpL3IpXX0sbn0oTWF0aC5TUVJUMi96LE1hdGguU1FSVDIsQykpOyh0Lmdlby5tb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gUChGKX0pLnJhdz1GLHYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9MjU7ZG97dmFyIGE9bipuLG89YSphO24tPXI9KG4qKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShNYXRoLmFicyhyKT5FJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSwodC5nZW8ubmF0dXJhbEVhcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIFAodil9KS5yYXc9djt2YXIgaj1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ai5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMV0qPTEuMDE0NH0pLGcuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS96LG49OTAqcixpPU1hdGgubWluKDE4LE1hdGguYWJzKG4vNSkpLGE9TWF0aC5tYXgoMCxNYXRoLmZsb29yKGkpKTtkb3t2YXIgbz1qW2FdWzFdLHM9althKzFdWzFdLGw9altNYXRoLm1pbigxOSxhKzIpXVsxXSx1PWwtbyxjPWwtMipzK28saD0yKihNYXRoLmFicyhyKS1zKS91LGY9Yy91LGQ9aCooMS1mKmgqKDEtMipmKmgpKTtpZihkPj0wfHwxPT09YSl7bj0oZT49MD81Oi01KSooZCtpKTt2YXIgcCxtPTUwO2Rve2k9TWF0aC5taW4oMTgsTWF0aC5hYnMobikvNSksYT1NYXRoLmZsb29yKGkpLGQ9aS1hLG89althXVsxXSxzPWpbYSsxXVsxXSxsPWpbTWF0aC5taW4oMTksYSsyKV1bMV0sbi09KHA9KGU+PTA/ejoteikqKHMrZCoobC1vKS8yK2QqZCoobC0yKnMrbykvMiktZSkqRH13aGlsZShNYXRoLmFicyhwKT5MJiYtLW0+MCk7YnJlYWt9fXdoaWxlKC0tYT49MCk7dmFyIHY9althXVswXSxnPWpbYSsxXVswXSx5PWpbTWF0aC5taW4oMTksYSsyKV1bMF07cmV0dXJuW3QvKGcrZCooeS12KS8yK2QqZCooeS0yKmcrdikvMiksbipJXX0sKHQuZ2VvLnJvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIFAoZyl9KS5yYXc9Zyx5LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0L01hdGguY29zKGUpLGVdfSwodC5nZW8uc2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiBQKHkpfSkucmF3PXksYi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT5DKkMrRSkpe3ZhciByPXQsbj1lLGk9MjU7ZG97dmFyIGEsbz1NYXRoLnNpbihyKSxzPU1hdGguc2luKHIvMiksdT1NYXRoLmNvcyhyLzIpLGM9TWF0aC5zaW4obiksaD1NYXRoLmNvcyhuKSxmPU1hdGguc2luKDIqbiksZD1jKmMscD1oKmgsbT1zKnMsdj0xLXAqdSp1LGc9dj9sKGgqdSkqTWF0aC5zcXJ0KGE9MS92KTphPTAseT0yKmcqaCpzLXQsYj1nKmMtZSx4PWEqKHAqbStnKmgqdSpkKSxfPWEqKC41Km8qZi0yKmcqYypzKSx3PS4yNSphKihmKnMtZypjKnAqbyksTT1hKihkKnUrZyptKmgpLGs9Xyp3LU0qeDtpZighaylicmVhazt2YXIgQT0oYipfLXkqTSkvayxUPSh5KnctYip4KS9rO3ItPUEsbi09VH13aGlsZSgoTWF0aC5hYnMoQSk+RXx8TWF0aC5hYnMoVCk+RSkmJi0taT4wKTtyZXR1cm5bcixuXX19LCh0Lmdlby5haXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4gUChiKX0pLnJhdz1iLHguaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPWUsaT0yNTtkb3t2YXIgYSxvPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksdT1NYXRoLnNpbigyKm4pLGM9cypzLGg9bypvLGY9TWF0aC5zaW4ociksZD1NYXRoLmNvcyhyLzIpLHA9TWF0aC5zaW4oci8yKSxtPXAqcCx2PTEtaCpkKmQsZz12P2wobypkKSpNYXRoLnNxcnQoYT0xL3YpOmE9MCx5PS41KigyKmcqbypwK3IveiktdCxiPS41KihnKnMrbiktZSx4PS41KmEqKGgqbStnKm8qZCpjKSsuNS96LF89YSooZip1LzQtZypzKnApLHc9LjEyNSphKih1KnAtZypzKmgqZiksTT0uNSphKihjKmQrZyptKm8pKy41LGs9Xyp3LU0qeCxBPShiKl8teSpNKS9rLFQ9KHkqdy1iKngpL2s7ci09QSxuLT1UfXdoaWxlKChNYXRoLmFicyhBKT5FfHxNYXRoLmFicyhUKT5FKSYmLS1pPjApO3JldHVybltyLG5dfSwodC5nZW8ud2lua2VsMz1mdW5jdGlvbigpe3JldHVybiBQKHgpfSkucmF3PXh9ZS5leHBvcnRzPW59LHt9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXQucHJvamVjdGlvbixuPXQubG9uYXhpcyxvPXQubGF0YXhpcyxsPXQuZG9tYWluLHU9dC5mcmFtZXdpZHRofHwwLGM9ZS53KihsLnhbMV0tbC54WzBdKSxoPWUuaCoobC55WzFdLWwueVswXSksZj1uLnJhbmdlWzBdK3MsZD1uLnJhbmdlWzFdLXMscD1vLnJhbmdlWzBdK3MsbT1vLnJhbmdlWzFdLXMsdj1uLl9mdWxsUmFuZ2VbMF0rcyxnPW4uX2Z1bGxSYW5nZVsxXS1zLHk9by5fZnVsbFJhbmdlWzBdK3MsYj1vLl9mdWxsUmFuZ2VbMV0tcztyLl90cmFuc2xhdGUwPVtlLmwrYy8yLGUudCtoLzJdO3ZhciB4PWQtZixfPW0tcCx3PVtmK3gvMixwK18vMl0sTT1yLl9yb3RhdGU7cmV0dXJuIHIuX2NlbnRlcj1bd1swXStNWzBdLHdbMV0rTVsxXV0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5taW4oXypjLyh0WzFdWzBdLXRbMF1bMF0pLF8qaC8odFsxXVsxXS10WzBdWzFdKSl9dmFyIG8scyxsLHgsXz1lLnNjYWxlKCksdz1yLl90cmFuc2xhdGUwLE09aShmLHAsZCxtKSxrPWkodix5LGcsYik7bD1hKGUsTSksbz1uKGwpLHg9YShlLGspLHIuX2Z1bGxTY2FsZT1uKHgpLGUuc2NhbGUobyksbD1hKGUsTSkscz1bd1swXS1sWzBdWzBdK3Usd1sxXS1sWzBdWzFdK3VdLHIuX3RyYW5zbGF0ZT1zLGUudHJhbnNsYXRlKHMpLGw9YShlLE0pLHQuX2lzQWxiZXJzVXNhfHxlLmNsaXBFeHRlbnQobCksbz1yLnNjYWxlKm8sci5fc2NhbGU9byx0Ll93aWR0aD1NYXRoLnJvdW5kKGxbMV1bMF0pK3UsdC5faGVpZ2h0PU1hdGgucm91bmQobFsxXVsxXSkrdSx0Ll9tYXJnaW5YPShjLU1hdGgucm91bmQobFsxXVswXSkpLzIsdC5fbWFyZ2luWT0oaC1NYXRoLnJvdW5kKGxbMV1bMV0pKS8yfX1mdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPShyLXQpLzQ7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltbW3QsZV0sW3Qsbl0sW3QraSxuXSxbdCsyKmksbl0sW3QrMyppLG5dLFtyLG5dLFtyLGVdLFtyLWksZV0sW3ItMippLGVdLFtyLTMqaSxlXSxbdCxlXV1dfX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG8uZ2VvLnBhdGgoKS5wcm9qZWN0aW9uKHQpLmJvdW5kcyhlKX12YXIgbz10KCJkMyIpLHM9dCgiLi9jb25zdGFudHMiKS5jbGlwUGFkO2UuZXhwb3J0cz1ufSx7Ii4vY29uc3RhbnRzIjo3OTAsZDM6MTIwfV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4oZS5faXNTY29wZWQ/YTplLl9jbGlwQW5nbGU/czpvKSh0LGUucHJvamVjdGlvbil9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPWUuX2Z1bGxTY2FsZTtyZXR1cm4gXy5iZWhhdmlvci56b29tKCkudHJhbnNsYXRlKHQudHJhbnNsYXRlKCkpLnNjYWxlKHQuc2NhbGUoKSkuc2NhbGVFeHRlbnQoWy41KnIsMTAwKnJdKX1mdW5jdGlvbiBhKHQsZSl7ZnVuY3Rpb24gcigpe18uc2VsZWN0KHRoaXMpLnN0eWxlKGspfWZ1bmN0aW9uIG4oKXtvLnNjYWxlKF8uZXZlbnQuc2NhbGUpLnRyYW5zbGF0ZShfLmV2ZW50LnRyYW5zbGF0ZSksdC5yZW5kZXIoKX1mdW5jdGlvbiBhKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoQSl9dmFyIG89dC5wcm9qZWN0aW9uLHM9aShvLGUpO3JldHVybiBzLm9uKCJ6b29tc3RhcnQiLHIpLm9uKCJ6b29tIixuKS5vbigiem9vbWVuZCIsYSksc31mdW5jdGlvbiBvKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdi5pbnZlcnQodCl9ZnVuY3Rpb24gbih0KXt2YXIgZT12KHIodCkpO3JldHVybiBNYXRoLmFicyhlWzBdLXRbMF0pPnl8fE1hdGguYWJzKGVbMV0tdFsxXSk+eX1mdW5jdGlvbiBhKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoayksbD1fLm1vdXNlKHRoaXMpLHU9di5yb3RhdGUoKSxjPXYudHJhbnNsYXRlKCksaD11LGY9cihsKX1mdW5jdGlvbiBvKCl7aWYoZD1fLm1vdXNlKHRoaXMpLG4obCkpcmV0dXJuIGcuc2NhbGUodi5zY2FsZSgpKSx2b2lkIGcudHJhbnNsYXRlKHYudHJhbnNsYXRlKCkpO3Yuc2NhbGUoXy5ldmVudC5zY2FsZSksdi50cmFuc2xhdGUoW2NbMF0sXy5ldmVudC50cmFuc2xhdGVbMV1dKSxmP3IoZCkmJihtPXIoZCkscD1baFswXSsobVswXS1mWzBdKSx1WzFdLHVbMl1dLHYucm90YXRlKHApLGg9cCk6KGw9ZCxmPXIobCkpLHQucmVuZGVyKCl9ZnVuY3Rpb24gcygpe18uc2VsZWN0KHRoaXMpLnN0eWxlKEEpfXZhciBsLHUsYyxoLGYsZCxwLG0sdj10LnByb2plY3Rpb24sZz1pKHYsZSkseT0yO3JldHVybiBnLm9uKCJ6b29tc3RhcnQiLGEpLm9uKCJ6b29tIixvKS5vbigiem9vbWVuZCIscyksZ31mdW5jdGlvbiBzKHQsZSl7ZnVuY3Rpb24gcih0KXtnKyt8fHQoe3R5cGU6Inpvb21zdGFydCJ9KX1mdW5jdGlvbiBuKHQpe3Qoe3R5cGU6Inpvb20ifSl9ZnVuY3Rpb24gYSh0KXstLWd8fHQoe3R5cGU6Inpvb21lbmQifSl9dmFyIG8scz10LnByb2plY3Rpb24sZD17cjpzLnJvdGF0ZSgpLGs6cy5zY2FsZSgpfSxwPWkocyxlKSxtPXgocCwiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKSxnPTAseT1wLm9uO3JldHVybiBwLm9uKCJ6b29tc3RhcnQiLGZ1bmN0aW9uKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoayk7dmFyIHQ9Xy5tb3VzZSh0aGlzKSxlPXMucm90YXRlKCksaT1lLGE9cy50cmFuc2xhdGUoKSxnPXUoZSk7bz1sKHMsdCkseS5jYWxsKHAsInpvb20iLGZ1bmN0aW9uKCl7dmFyIHI9Xy5tb3VzZSh0aGlzKTtpZihzLnNjYWxlKGQuaz1fLmV2ZW50LnNjYWxlKSxvKXtpZihsKHMscikpe3Mucm90YXRlKGUpLnRyYW5zbGF0ZShhKTt2YXIgdT1sKHMscikscD1oKG8sdSkseT12KGMoZyxwKSksYj1kLnI9Zih5LG8saSk7aXNGaW5pdGUoYlswXSkmJmlzRmluaXRlKGJbMV0pJiZpc0Zpbml0ZShiWzJdKXx8KGI9aSkscy5yb3RhdGUoYiksaT1ifX1lbHNlIHQ9cixvPWwocyx0KTtuKG0ub2YodGhpcyxhcmd1bWVudHMpKX0pLHIobS5vZih0aGlzLGFyZ3VtZW50cykpfSkub24oInpvb21lbmQiLGZ1bmN0aW9uKCl7Xy5zZWxlY3QodGhpcykuc3R5bGUoQSkseS5jYWxsKHAsInpvb20iLG51bGwpLGEobS5vZih0aGlzLGFyZ3VtZW50cykpfSkub24oInpvb20ucmVkcmF3IixmdW5jdGlvbigpe3QucmVuZGVyKCl9KSxfLnJlYmluZChwLG0sIm9uIil9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPXQuaW52ZXJ0KGUpO3JldHVybiByJiZpc0Zpbml0ZShyWzBdKSYmaXNGaW5pdGUoclsxXSkmJmcocil9ZnVuY3Rpb24gdSh0KXt2YXIgZT0uNSp0WzBdKncscj0uNSp0WzFdKncsbj0uNSp0WzJdKncsaT1NYXRoLnNpbihlKSxhPU1hdGguY29zKGUpLG89TWF0aC5zaW4ocikscz1NYXRoLmNvcyhyKSxsPU1hdGguc2luKG4pLHU9TWF0aC5jb3Mobik7cmV0dXJuW2Eqcyp1K2kqbypsLGkqcyp1LWEqbypsLGEqbyp1K2kqcypsLGEqcypsLWkqbyp1XX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXSxvPWVbMF0scz1lWzFdLGw9ZVsyXSx1PWVbM107cmV0dXJuW3Iqby1uKnMtaSpsLWEqdSxyKnMrbipvK2kqdS1hKmwscipsLW4qdStpKm8rYSpzLHIqdStuKmwtaSpzK2Eqb119ZnVuY3Rpb24gaCh0LGUpe2lmKHQmJmUpe3ZhciByPWIodCxlKSxuPU1hdGguc3FydCh5KHIscikpLGk9LjUqTWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEseSh0LGUpKSkpLGE9TWF0aC5zaW4oaSkvbjtyZXR1cm4gbiYmW01hdGguY29zKGkpLHJbMl0qYSwtclsxXSphLHJbMF0qYV19fWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPW0oZSwyLHRbMF0pO249bShuLDEsdFsxXSksbj1tKG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLHM9ZVsxXSxsPWVbMl0sdT1uWzBdLGM9blsxXSxoPW5bMl0sZj1NYXRoLmF0YW4yKHMsbykqTSxwPU1hdGguc3FydChvKm8rcypzKTtNYXRoLmFicyhjKT5wPyhhPShjPjA/OTA6LTkwKS1mLGk9MCk6KGE9TWF0aC5hc2luKGMvcCkqTS1mLGk9TWF0aC5zcXJ0KHAqcC1jKmMpKTt2YXIgdj0xODAtYS0yKmYsZz0oTWF0aC5hdGFuMihoLHUpLU1hdGguYXRhbjIobCxpKSkqTSx5PShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihsLC1pKSkqTTtyZXR1cm4gZChyWzBdLHJbMV0sYSxnKTw9ZChyWzBdLHJbMV0sdix5KT9bYSxnLHJbMl1dOlt2LHksclsyXV19ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1wKHItdCksYT1wKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBwKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49cip3LGk9dC5zbGljZSgpLGE9MD09PWU/MTowLG89Mj09PWU/MToyLHM9TWF0aC5jb3MobiksbD1NYXRoLnNpbihuKTtyZXR1cm4gaVthXT10W2FdKnMtdFtvXSpsLGlbb109dFtvXSpzK3RbYV0qbCxpfWZ1bmN0aW9uIHYodCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqTSxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpNLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqTV19ZnVuY3Rpb24gZyh0KXt2YXIgZT10WzBdKncscj10WzFdKncsbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX1mdW5jdGlvbiB5KHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilyKz10W25dKmVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9MCxyPWFyZ3VtZW50cy5sZW5ndGgsbj1bXTsrK2U8cjspbi5wdXNoKGFyZ3VtZW50c1tlXSk7dmFyIGk9Xy5kaXNwYXRjaC5hcHBseShudWxsLG4pO3JldHVybiBpLm9mPWZ1bmN0aW9uKGUscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBhO3RyeXthPW4uc291cmNlRXZlbnQ9Xy5ldmVudCxuLnRhcmdldD10LF8uZXZlbnQ9bixpW24udHlwZV0uYXBwbHkoZSxyKX1maW5hbGx5e18uZXZlbnQ9YX19fSxpfXZhciBfPXQoImQzIiksdz1NYXRoLlBJLzE4MCxNPTE4MC9NYXRoLlBJLGs9e2N1cnNvcjoicG9pbnRlciJ9LEE9e2N1cnNvcjoiYXV0byJ9O2UuZXhwb3J0cz1ufSx7ZDM6MTIwfV0sODAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJvamVjdGlvbixuPXQuem9vbTtyZXR1cm4gZnVuY3Rpb24oKXt0Lm1ha2VQcm9qZWN0aW9uKGUpLHQubWFrZVBhdGgoKSxuLnNjYWxlKHIuc2NhbGUoKSksbi50cmFuc2xhdGUoci50cmFuc2xhdGUoKSksdC5yZW5kZXIoKX19fSx7fV0sODAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLnBsb3Q9ZSx0aGlzLm1vdXNlTGlzdGVuZXI9bnVsbCx0aGlzLndoZWVsTGlzdGVuZXI9bnVsbCx0aGlzLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx0aGlzLmxhc3RQb3M9WzAsMF0sdGhpcy5ib3hFbmFibGVkPSExLHRoaXMuYm94SW5pdGVkPSExLHRoaXMuYm94U3RhcnQ9WzAsMF0sdGhpcy5ib3hFbmQ9WzAsMF0sdGhpcy5kcmFnU3RhcnQ9WzAsMF19ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKCl7dC54YXhpcy5hdXRvcmFuZ2U9ITEsdC55YXhpcy5hdXRvcmFuZ2U9ITF9ZnVuY3Rpb24gcigpe2Zvcih2YXIgZT10LmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9heGlzQ29uc3RyYWludEdyb3VwcyxyPXQueGF4aXMuX2lkLG49dC55YXhpcy5faWQsaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKC0xIT09ZVtpXVtyXSl7aWYoLTEhPT1lW2ldW25dKXJldHVybiEwO2JyZWFrfXJldHVybiExfWZ1bmN0aW9uIGkobixpLGEpe2Z1bmN0aW9uIG8oZSxyLG4pe3ZhciBpPU1hdGgubWluKHIsbiksYT1NYXRoLm1heChyLG4pO2khPT1hPyhmW2VdPWksZltlKzJdPWEsaC5kYXRhQm94PWYsdC5zZXRSYW5nZXMoZikpOih0LnNlbGVjdEJveC5zZWxlY3RCb3g9WzAsMCwxLDFdLHQuZ2xwbG90LnNldERpcnR5KCkpfXZhciBzLHUsZj10LmNhbGNEYXRhQm94KCksZD1jLnZpZXdCb3gscD1oLmxhc3RQb3NbMF0sbT1oLmxhc3RQb3NbMV0sdj1sLk1JTkRSQUcqYy5waXhlbFJhdGlvLGc9bC5NSU5aT09NKmMucGl4ZWxSYXRpbztzd2l0Y2goaSo9Yy5waXhlbFJhdGlvLGEqPWMucGl4ZWxSYXRpbyxhPWRbM10tZFsxXS1hLHQuZnVsbExheW91dC5kcmFnbW9kZSl7Y2FzZSJ6b29tIjppZihuKXt2YXIgeT1pLyhkWzJdLWRbMF0pKihmWzJdLWZbMF0pK2ZbMF0sYj1hLyhkWzNdLWRbMV0pKihmWzNdLWZbMV0pK2ZbMV07aC5ib3hJbml0ZWR8fChoLmJveFN0YXJ0WzBdPXksaC5ib3hTdGFydFsxXT1iLGguZHJhZ1N0YXJ0WzBdPWksaC5kcmFnU3RhcnRbMV09YSksaC5ib3hFbmRbMF09eSxoLmJveEVuZFsxXT1iLGguYm94SW5pdGVkPSEwLGguYm94RW5hYmxlZHx8aC5ib3hTdGFydFswXT09PWguYm94RW5kWzBdJiZoLmJveFN0YXJ0WzFdPT09aC5ib3hFbmRbMV18fChoLmJveEVuYWJsZWQ9ITApO3ZhciB4PU1hdGguYWJzKGguZHJhZ1N0YXJ0WzBdLWkpPGcsXz1NYXRoLmFicyhoLmRyYWdTdGFydFsxXS1hKTxnO2lmKCFyKCl8fHgmJl8peCYmKGguYm94RW5kWzBdPWguYm94U3RhcnRbMF0pLF8mJihoLmJveEVuZFsxXT1oLmJveFN0YXJ0WzFdKTtlbHNle3M9aC5ib3hFbmRbMF0taC5ib3hTdGFydFswXSx1PWguYm94RW5kWzFdLWguYm94U3RhcnRbMV07dmFyIHc9KGZbM10tZlsxXSkvKGZbMl0tZlswXSk7TWF0aC5hYnMocyp3KT5NYXRoLmFicyh1KT8oaC5ib3hFbmRbMV09aC5ib3hTdGFydFsxXStNYXRoLmFicyhzKSp3Kih1Pj0wPzE6LTEpLGguYm94RW5kWzFdPGZbMV0/KGguYm94RW5kWzFdPWZbMV0saC5ib3hFbmRbMF09aC5ib3hTdGFydFswXSsoZlsxXS1oLmJveFN0YXJ0WzFdKS9NYXRoLmFicyh3KSk6aC5ib3hFbmRbMV0+ZlszXSYmKGguYm94RW5kWzFdPWZbM10saC5ib3hFbmRbMF09aC5ib3hTdGFydFswXSsoZlszXS1oLmJveFN0YXJ0WzFdKS9NYXRoLmFicyh3KSkpOihoLmJveEVuZFswXT1oLmJveFN0YXJ0WzBdK01hdGguYWJzKHUpL3cqKHM+PTA/MTotMSksaC5ib3hFbmRbMF08ZlswXT8oaC5ib3hFbmRbMF09ZlswXSxoLmJveEVuZFsxXT1oLmJveFN0YXJ0WzFdKyhmWzBdLWguYm94U3RhcnRbMF0pKk1hdGguYWJzKHcpKTpoLmJveEVuZFswXT5mWzJdJiYoaC5ib3hFbmRbMF09ZlsyXSxoLmJveEVuZFsxXT1oLmJveFN0YXJ0WzFdKyhmWzJdLWguYm94U3RhcnRbMF0pKk1hdGguYWJzKHcpKSl9fWVsc2UgaC5ib3hFbmFibGVkPyhzPWguYm94U3RhcnRbMF0hPT1oLmJveEVuZFswXSx1PWguYm94U3RhcnRbMV0hPT1oLmJveEVuZFsxXSxzfHx1PyhzJiYobygwLGguYm94U3RhcnRbMF0saC5ib3hFbmRbMF0pLHQueGF4aXMuYXV0b3JhbmdlPSExKSx1JiYobygxLGguYm94U3RhcnRbMV0saC5ib3hFbmRbMV0pLHQueWF4aXMuYXV0b3JhbmdlPSExKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSk6dC5nbHBsb3Quc2V0RGlydHkoKSxoLmJveEVuYWJsZWQ9ITEsaC5ib3hJbml0ZWQ9ITEpOmguYm94SW5pdGVkJiYoaC5ib3hJbml0ZWQ9ITEpO2JyZWFrO2Nhc2UicGFuIjpoLmJveEVuYWJsZWQ9ITEsaC5ib3hJbml0ZWQ9ITEsbj8oaC5wYW5uaW5nfHwoaC5kcmFnU3RhcnRbMF09aSxoLmRyYWdTdGFydFsxXT1hKSxNYXRoLmFicyhoLmRyYWdTdGFydFswXS1pKTx2JiYoaT1oLmRyYWdTdGFydFswXSksTWF0aC5hYnMoaC5kcmFnU3RhcnRbMV0tYSk8diYmKGE9aC5kcmFnU3RhcnRbMV0pLHM9KHAtaSkqKGZbMl0tZlswXSkvKGMudmlld0JveFsyXS1jLnZpZXdCb3hbMF0pLHU9KG0tYSkqKGZbM10tZlsxXSkvKGMudmlld0JveFszXS1jLnZpZXdCb3hbMV0pLGZbMF0rPXMsZlsyXSs9cyxmWzFdKz11LGZbM10rPXUsdC5zZXRSYW5nZXMoZiksaC5wYW5uaW5nPSEwLGgubGFzdElucHV0VGltZT1EYXRlLm5vdygpLGUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCkpOmgucGFubmluZyYmKGgucGFubmluZz0hMSx0LnJlbGF5b3V0Q2FsbGJhY2soKSl9aC5sYXN0UG9zWzBdPWksaC5sYXN0UG9zWzFdPWF9dmFyIHU9dC5tb3VzZUNvbnRhaW5lcixjPXQuZ2xwbG90LGg9bmV3IG4odSxjKTtyZXR1cm4gaC5tb3VzZUxpc3RlbmVyPWEodSxpKSx1LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKHQpe3ZhciBlPXModC5jaGFuZ2VkVG91Y2hlc1swXSx1KTtpKDAsZVswXSxlWzFdKSxpKDEsZVswXSxlWzFdKX0pLHUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIGU9cyh0LmNoYW5nZWRUb3VjaGVzWzBdLHUpO2koMSxlWzBdLGVbMV0pfSksdS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXtpKDAsaC5sYXN0UG9zWzBdLGgubGFzdFBvc1sxXSl9KSxoLndoZWVsTGlzdGVuZXI9byh1LGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5jYWxjRGF0YUJveCgpLGE9Yy52aWV3Qm94LG89aC5sYXN0UG9zWzBdLHM9aC5sYXN0UG9zWzFdO3N3aXRjaCh0LmZ1bGxMYXlvdXQuZHJhZ21vZGUpe2Nhc2Uiem9vbSI6YnJlYWs7Y2FzZSJwYW4iOnZhciBsPU1hdGguZXhwKC4xKm4vKGFbM10tYVsxXSkpLHU9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGY9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO2lbMF09KGlbMF0tdSkqbCt1LGlbMl09KGlbMl0tdSkqbCt1LGlbMV09KGlbMV0tZikqbCtmLGlbM109KGlbM10tZikqbCtmLHQuc2V0UmFuZ2VzKGkpLGgubGFzdElucHV0VGltZT1EYXRlLm5vdygpLGUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCksdC5yZWxheW91dENhbGxiYWNrKCl9cmV0dXJuITB9KSxofXZhciBhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1pfSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc2OSwibW91c2UtY2hhbmdlIjo0NTAsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDUxLCJtb3VzZS13aGVlbCI6NDUzfV0sODAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG4odCl9dmFyIGE9dCgiLi4vcGxvdHMiKSxvPXQoIi4uL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksdT1uLnByb3RvdHlwZSxjPVsieGF4aXMiLCJ5YXhpcyJdO3UubWVyZ2U9ZnVuY3Rpb24odCl7dGhpcy50aXRsZUVuYWJsZT0hMSx0aGlzLmJhY2tncm91bmRDb2xvcj1sKHQucGxvdF9iZ2NvbG9yKTt2YXIgZSxyLG4saSxhLG8sdSxoLGYsZCxwO2ZvcihkPTA7ZDwyOysrZCl7Zm9yKGU9Y1tkXSxyPXRbdGhpcy5zY2VuZVtlXS5fbmFtZV0sbj0vQ2xpY2sgdG8gZW50ZXIgLisgdGl0bGUvLnRlc3Qoci50aXRsZSk/IiI6ci50aXRsZSxwPTA7cDw9MjtwKz0yKXRoaXMubGFiZWxFbmFibGVbZCtwXT0hMSx0aGlzLmxhYmVsc1tkK3BdPXMobiksdGhpcy5sYWJlbENvbG9yW2QrcF09bChyLnRpdGxlZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbZCtwXT1yLnRpdGxlZm9udC5mYW1pbHksdGhpcy5sYWJlbFNpemVbZCtwXT1yLnRpdGxlZm9udC5zaXplLHRoaXMubGFiZWxQYWRbZCtwXT10aGlzLmdldExhYmVsUGFkKGUsciksdGhpcy50aWNrRW5hYmxlW2QrcF09ITEsdGhpcy50aWNrQ29sb3JbZCtwXT1sKChyLnRpY2tmb250fHx7fSkuY29sb3IpLHRoaXMudGlja0FuZ2xlW2QrcF09ImF1dG8iPT09ci50aWNrYW5nbGU/MDpNYXRoLlBJKi1yLnRpY2thbmdsZS8xODAsdGhpcy50aWNrUGFkW2QrcF09dGhpcy5nZXRUaWNrUGFkKHIpLHRoaXMudGlja01hcmtMZW5ndGhbZCtwXT0wLHRoaXMudGlja01hcmtXaWR0aFtkK3BdPXIudGlja3dpZHRofHwwLHRoaXMudGlja01hcmtDb2xvcltkK3BdPWwoci50aWNrY29sb3IpLHRoaXMuYm9yZGVyTGluZUVuYWJsZVtkK3BdPSExLHRoaXMuYm9yZGVyTGluZUNvbG9yW2QrcF09bChyLmxpbmVjb2xvciksdGhpcy5ib3JkZXJMaW5lV2lkdGhbZCtwXT1yLmxpbmV3aWR0aHx8MDt1PXRoaXMuaGFzU2hhcmVkQXhpcyhyKSxhPXRoaXMuaGFzQXhpc0luRGZsdFBvcyhlLHIpJiYhdSxvPXRoaXMuaGFzQXhpc0luQWx0clBvcyhlLHIpJiYhdSxpPXIubWlycm9yfHwhMSxoPXU/LTEhPT1TdHJpbmcoaSkuaW5kZXhPZigiYWxsIik6ISFpLGY9dT8iYWxsdGlja3MiPT09aTotMSE9PVN0cmluZyhpKS5pbmRleE9mKCJ0aWNrcyIpLGE/dGhpcy5sYWJlbEVuYWJsZVtkXT0hMDpvJiYodGhpcy5sYWJlbEVuYWJsZVtkKzJdPSEwKSxhP3RoaXMudGlja0VuYWJsZVtkXT1yLnNob3d0aWNrbGFiZWxzOm8mJih0aGlzLnRpY2tFbmFibGVbZCsyXT1yLnNob3d0aWNrbGFiZWxzKSwoYXx8aCkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbZF09ci5zaG93bGluZSksKG98fGgpJiYodGhpcy5ib3JkZXJMaW5lRW5hYmxlW2QrMl09ci5zaG93bGluZSksKGF8fGYpJiYodGhpcy50aWNrTWFya0xlbmd0aFtkXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSwob3x8ZikmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2QrMl09dGhpcy5nZXRUaWNrTWFya0xlbmd0aChyKSksdGhpcy5ncmlkTGluZUVuYWJsZVtkXT1yLnNob3dncmlkLHRoaXMuZ3JpZExpbmVDb2xvcltkXT1sKHIuZ3JpZGNvbG9yKSx0aGlzLmdyaWRMaW5lV2lkdGhbZF09ci5ncmlkd2lkdGgsdGhpcy56ZXJvTGluZUVuYWJsZVtkXT1yLnplcm9saW5lLHRoaXMuemVyb0xpbmVDb2xvcltkXT1sKHIuemVyb2xpbmVjb2xvciksdGhpcy56ZXJvTGluZVdpZHRoW2RdPXIuemVyb2xpbmV3aWR0aH19LHUuaGFzU2hhcmVkQXhpcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9YS5nZXRTdWJwbG90SWRzKGUuZnVsbExheW91dCwiZ2wyZCIpO3JldHVybiAwIT09by5maW5kU3VicGxvdHNXaXRoQXhpcyhyLHQpLmluZGV4T2YoZS5pZCl9LHUuaGFzQXhpc0luRGZsdFBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8iYm90dG9tIj09PXI6InlheGlzIj09PXQ/ImxlZnQiPT09cjp2b2lkIDB9LHUuaGFzQXhpc0luQWx0clBvcz1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2lkZTtyZXR1cm4ieGF4aXMiPT09dD8idG9wIj09PXI6InlheGlzIj09PXQ/InJpZ2h0Ij09PXI6dm9pZCAwfSx1LmdldExhYmVsUGFkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS50aXRsZWZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSx1LmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LHUuZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9aX0seyIuLi8uLi9saWIvaHRtbDJ1bmljb2RlIjo3MjIsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc0MiwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vcGxvdHMiOjgyN31dLDgwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjZW5lMmQiKSxpPXQoIi4uL3Bsb3RzIiksYT10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLG89dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLHM9dCgiLi4vY2FydGVzaWFuIik7ci5uYW1lPSJnbDJkIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD1vLmlkUmVnZXgsci5hdHRyUmVnZXg9by5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsYT1pLmdldFN1YnBsb3RJZHMoZSwiZ2wyZCIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWUuX3Bsb3RzW3NdLHU9aS5nZXRTdWJwbG90RGF0YShyLCJnbDJkIixzKSxjPWwuX3NjZW5lMmQ7dm9pZCAwPT09YyYmKGM9bmV3IG4oe2lkOnMsZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLGwuX3NjZW5lMmQ9YyksYy5wbG90KHUsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWkuZ2V0U3VicGxvdElkcyhuLCJnbDJkIiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgbD1hW29dLHU9bi5fcGxvdHNbbF07aWYodS5fc2NlbmUyZCl7MD09PWkuZ2V0U3VicGxvdERhdGEodCwiZ2wyZCIsbCkubGVuZ3RoJiYodS5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW2xdKX19cy5jbGVhbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHMuZHJhd0ZyYW1ld29yayh0KX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0U3VicGxvdElkcyhlLCJnbDJkIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgbz1lLl9wbG90c1tyW25dXSxzPW8uX3NjZW5lMmQsbD1zLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6YS5zdmcsInhsaW5rOmhyZWYiOmwseDowLHk6MCx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHMuZGVzdHJveSgpfX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vY2FydGVzaWFuIjo3NzQsIi4uL2NhcnRlc2lhbi9hdHRyaWJ1dGVzIjo3NjMsIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjc2OSwiLi4vcGxvdHMiOjgyNywiLi9zY2VuZTJkIjo4MDV9XSw4MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLnBpeGVsUmF0aW89dC5wbG90R2xQaXhlbFJhdGlvfHx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmlkPXQuaWQsdGhpcy5zdGF0aWNQbG90PSEhdC5zdGF0aWNQbG90LHRoaXMuZnVsbERhdGE9bnVsbCx0aGlzLnVwZGF0ZVJlZnMoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCksdGhpcy5nbHBsb3RPcHRpb25zPXAodGhpcyksdGhpcy5nbHBsb3RPcHRpb25zLm1lcmdlKGUpLHRoaXMuZ2xwbG90PWModGhpcy5nbHBsb3RPcHRpb25zKSx0aGlzLmNhbWVyYT1tKHRoaXMpLHRoaXMudHJhY2VzPXt9LHRoaXMuc3Bpa2VzPWgodGhpcy5nbHBsb3QpLHRoaXMuc2VsZWN0Qm94PWYodGhpcy5nbHBsb3Qse2lubmVyRmlsbDohMSxvdXRlckZpbGw6ITB9KSx0aGlzLmxhc3RCdXR0b25TdGF0ZT0wLHRoaXMucGlja1Jlc3VsdD1udWxsLHRoaXMuaXNNb3VzZU92ZXI9ITAsdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKX1mdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9dmFyIGEsbyxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGM9dCgiZ2wtcGxvdDJkIiksaD10KCJnbC1zcGlrZXMyZCIpLGY9dCgiZ2wtc2VsZWN0LWJveCIpLGQ9dCgid2ViZ2wtY29udGV4dCIpLHA9dCgiLi9jb252ZXJ0IiksbT10KCIuL2NhbWVyYSIpLHY9dCgiLi4vLi4vbGliL2h0bWwydW5pY29kZSIpLGc9dCgiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIikseT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiKSxiPXkuZW5mb3JjZSx4PXkuY2xlYW4sXz1bInhheGlzIiwieWF4aXMiXTtlLmV4cG9ydHM9bjt2YXIgdz1uLnByb3RvdHlwZTt3Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXtpZih0aGlzLnN0YXRpY1Bsb3Qpe2lmKCEob3x8KGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbz1kKHtjYW52YXM6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO3RoaXMuY2FudmFzPWEsdGhpcy5nbD1vfWVsc2V7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZT1kKHtjYW52YXM6dCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtlfHxnKHRoaXMpLHRoaXMuY2FudmFzPXQsdGhpcy5nbD1lfXZhciByPXRoaXMuY2FudmFzO3Iuc3R5bGUud2lkdGg9IjEwMCUiLHIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9IjBweCIsci5zdHlsZS5sZWZ0PSIwcHgiLHIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMudXBkYXRlU2l6ZShyKSxyLmNsYXNzTmFtZSs9InVzZXItc2VsZWN0LW5vbmUiO3ZhciBuPXRoaXMuc3ZnQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtuLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbi5zdHlsZS50b3A9bi5zdHlsZS5sZWZ0PSIwcHgiLG4uc3R5bGUud2lkdGg9bi5zdHlsZS5oZWlnaHQ9IjEwMCUiLG4uc3R5bGVbInotaW5kZXgiXT0yMCxuLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIjt2YXIgaT10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixpLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIjt2YXIgcz10aGlzLmNvbnRhaW5lcjtzLmFwcGVuZENoaWxkKHIpLHMuYXBwZW5kQ2hpbGQobikscy5hcHBlbmRDaGlsZChpKTt2YXIgbD10aGlzO2kuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIixmdW5jdGlvbigpe2wuaXNNb3VzZU92ZXI9ITB9KX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpLHRoaXMuZ2xwbG90LnNldERpcnR5KCksdGhpcy5nbHBsb3QuZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsbj1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgaT1uZXcgVWludDhBcnJheShyKm4qNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLG4sZS5SR0JBLGUuVU5TSUdORURfQllURSxpKTtmb3IodmFyIG89MCxzPW4tMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgdT0wO3U8NDsrK3Upe3ZhciBjPWlbNCoocipvK2wpK3VdO2lbNCoocipvK2wpK3VdPWlbNCoocipzK2wpK3VdLGlbNCoocipzK2wpK3VdPWN9dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7aC53aWR0aD1yLGguaGVpZ2h0PW47dmFyIGY9aC5nZXRDb250ZXh0KCIyZCIpLGQ9Zi5jcmVhdGVJbWFnZURhdGEocixuKTtkLmRhdGEuc2V0KGkpLGYucHV0SW1hZ2VEYXRhKGQsMCwwKTt2YXIgcDtzd2l0Y2godCl7Y2FzZSJqcGVnIjpwPWgudG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpwPWgudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpwPWgudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChhKSxwfSx3LnVwZGF0ZVNpemU9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5jYW52YXMpO3ZhciBlPXRoaXMucGl4ZWxSYXRpbyxyPXRoaXMuZnVsbExheW91dCxuPXIud2lkdGgsaT1yLmhlaWdodCxhPTB8TWF0aC5jZWlsKGUqbiksbz0wfE1hdGguY2VpbChlKmkpO3JldHVybiB0LndpZHRoPT09YSYmdC5oZWlnaHQ9PT1vfHwodC53aWR0aD1hLHQuaGVpZ2h0PW8pLHRoaXMucmVkcmF3JiZ0aGlzLnJlZHJhdygpLHR9LHcuY29tcHV0ZVRpY2tNYXJrcz1mdW5jdGlvbigpe3RoaXMueGF4aXMuc2V0U2NhbGUoKSx0aGlzLnlheGlzLnNldFNjYWxlKCk7Zm9yKHZhciB0PVtsLmNhbGNUaWNrcyh0aGlzLnhheGlzKSxsLmNhbGNUaWNrcyh0aGlzLnlheGlzKV0sZT0wO2U8MjsrK2UpZm9yKHZhciByPTA7cjx0W2VdLmxlbmd0aDsrK3IpdFtlXVtyXS50ZXh0PXYodFtlXVtyXS50ZXh0KyIiKTtyZXR1cm4gdH0sdy51cGRhdGVSZWZzPWZ1bmN0aW9uKHQpe3RoaXMuZnVsbExheW91dD10O3ZhciBlPWwuc3VicGxvdE1hdGNoLHI9InhheGlzIit0aGlzLmlkLm1hdGNoKGUpWzFdLG49InlheGlzIit0aGlzLmlkLm1hdGNoKGUpWzJdO3RoaXMueGF4aXM9dGhpcy5mdWxsTGF5b3V0W3JdLHRoaXMueWF4aXM9dGhpcy5mdWxsTGF5b3V0W25dfSx3LnJlbGF5b3V0Q2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy54YXhpcyxyPXRoaXMueWF4aXMsbj10LmxheW91dDtuLnhheGlzLmF1dG9yYW5nZT1lLmF1dG9yYW5nZSxuLnhheGlzLnJhbmdlPWUucmFuZ2Uuc2xpY2UoMCksbi55YXhpcy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2Usbi55YXhpcy5yYW5nZT1yLnJhbmdlLnNsaWNlKDApO3ZhciBpPXtsYXN0SW5wdXRUaW1lOnRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWV9O2lbZS5fbmFtZV09ZS5yYW5nZS5zbGljZSgwKSxpW3IuX25hbWVdPXIucmFuZ2Uuc2xpY2UoMCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSx3LmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7aShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sdy5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJnMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sdy5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFjZXM7dCYmT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3RbZV0uZGlzcG9zZSgpLGRlbGV0ZSB0W2VdfSksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuc3RhdGljUGxvdHx8dGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5jYW52YXMpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuc3ZnQ29udGFpbmVyKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm1vdXNlQ29udGFpbmVyKSx0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy5nbHBsb3Q9bnVsbCx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMubW91c2VDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGx9LHcucGxvdD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbHBsb3Q7dGhpcy51cGRhdGVSZWZzKHIpLHRoaXMudXBkYXRlVHJhY2VzKHQsZSksdGhpcy51cGRhdGVGeChyLmRyYWdtb2RlKTt2YXIgaT1yLndpZHRoLGE9ci5oZWlnaHQ7dGhpcy51cGRhdGVTaXplKHRoaXMuY2FudmFzKTt2YXIgbz10aGlzLmdscGxvdE9wdGlvbnM7by5tZXJnZShyKSxvLnNjcmVlbkJveD1bMCwwLGksYV07dmFyIHM9e19mdWxsTGF5b3V0OntfYXhpc0NvbnN0cmFpbnRHcm91cHM6dGhpcy5ncmFwaERpdi5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfX07eChzLHRoaXMueGF4aXMpLHgocyx0aGlzLnlheGlzKTt2YXIgdT1yLl9zaXplLGM9dGhpcy54YXhpcy5kb21haW4saD10aGlzLnlheGlzLmRvbWFpbjtvLnZpZXdCb3g9W3UubCtjWzBdKnUudyx1LmIraFswXSp1LmgsaS11LnItKDEtY1sxXSkqdS53LGEtdS50LSgxLWhbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGNbMV0tY1swXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGhbMV0taFswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD11LmgqKGhbMV0taFswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PXUubCtjWzBdKnUudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1oWzFdKSp1LmgrInB4Ijt2YXIgZj10aGlzLmJvdW5kcztmWzBdPWZbMV09MS8wLGZbMl09ZlszXT0tMS8wO3ZhciBkLHAsbT1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7Zm9yKHA9MDtwPG0ubGVuZ3RoOysrcClmb3IodmFyIHY9dGhpcy50cmFjZXNbbVtwXV0sZz0wO2c8MjsrK2cpZltnXT1NYXRoLm1pbihmW2ddLHYuYm91bmRzW2ddKSxmW2crMl09TWF0aC5tYXgoZltnKzJdLHYuYm91bmRzW2crMl0pO2ZvcihwPTA7cDwyOysrcClmW3BdPmZbcCsyXSYmKGZbcF09LTEsZltwKzJdPTEpLGQ9dGhpc1tfW3BdXSxkLl9sZW5ndGg9by52aWV3Qm94W3ArMl0tby52aWV3Qm94W3BdLGwuZG9BdXRvUmFuZ2UoZCksZC5zZXRTY2FsZSgpO2Iocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSx3LmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxpPXQucjJsLGE9ZS5yMmw7cmV0dXJuW2koclswXSksYShuWzBdKSxpKHJbMV0pLGEoblsxXSldfSx3LnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGk9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVtpKHRbMV0pLGkodFszXSldfSx3LnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbz1hW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihpPXRbbl0saS51aWQ9PT1vJiZpLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aT10W3JdO3ZhciBsPWVbcl0sdT10aGlzLnRyYWNlc1tpLnVpZF07dT91LnVwZGF0ZShpLGwpOih1PWkuX21vZHVsZS5wbG90KHRoaXMsaSxsKSx0aGlzLnRyYWNlc1tpLnVpZF09dSl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX3RyYWNlLmluZGV4LWUuX3RyYWNlLmluZGV4fSl9LHcudXBkYXRlRng9ZnVuY3Rpb24odCl7dGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibGFzc28iPT09dHx8InNlbGVjdCI9PT10PyJub25lIjoiYXV0byIsdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9InBhbiI9PT10PyJtb3ZlIjoiem9vbSI9PT10PyJjcm9zc2hhaXIiOm51bGx9LHcuZW1pdFBvaW50QWN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC50cmFjZS51aWQsaT10LnBvaW50SW5kZXgsYT0wO2E8dGhpcy5mdWxsRGF0YS5sZW5ndGg7YSsrKXRoaXMuZnVsbERhdGFbYV0udWlkPT09biYmKHI9dGhpcy5mdWxsRGF0YVthXSk7dmFyIG89e3g6dC50cmFjZUNvb3JkWzBdLHk6dC50cmFjZUNvb3JkWzFdLGN1cnZlTnVtYmVyOnIuaW5kZXgscG9pbnROdW1iZXI6aSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnRoaXMuZnVsbERhdGEseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfTt1LmFwcGVuZEFycmF5UG9pbnRWYWx1ZShvLHIsaSksdGhpcy5ncmFwaERpdi5lbWl0KGUse3BvaW50czpbb119KX0sdy5kcmF3PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RvcHBlZCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVkcmF3KTt2YXIgdD10aGlzLmdscGxvdCxlPXRoaXMuY2FtZXJhLHI9ZS5tb3VzZUxpc3RlbmVyLG49MT09PXRoaXMubGFzdEJ1dHRvblN0YXRlJiYwPT09ci5idXR0b25zLGk9dGhpcy5mdWxsTGF5b3V0O3RoaXMubGFzdEJ1dHRvblN0YXRlPXIuYnV0dG9ucyx0aGlzLmNhbWVyYUNoYW5nZWQoKTt2YXIgYSxvPXIueCp0LnBpeGVsUmF0aW8scz10aGlzLmNhbnZhcy5oZWlnaHQtdC5waXhlbFJhdGlvKnIueTtpZihlLmJveEVuYWJsZWQmJiJ6b29tIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBsPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLGM9MDtjPDI7YysrKWUuYm94U3RhcnRbY109PT1lLmJveEVuZFtjXSYmKGxbY109dC5kYXRhQm94W2NdLGxbYysyXT10LmRhdGFCb3hbYysyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgaD1pLl9zaXplLGY9dGhpcy54YXhpcy5kb21haW4sZD10aGlzLnlheGlzLmRvbWFpbjthPXQucGljayhvL3QucGl4ZWxSYXRpbytoLmwrZlswXSpoLncscy90LnBpeGVsUmF0aW8tKGgudCsoMS1kWzFdKSpoLmgpKTt2YXIgcD1hJiZhLm9iamVjdC5fdHJhY2UuaGFuZGxlUGljayhhKTtpZihwJiZuJiZ0aGlzLmVtaXRQb2ludEFjdGlvbihwLCJwbG90bHlfY2xpY2siKSxhJiYic2tpcCIhPT1hLm9iamVjdC5fdHJhY2UuaG92ZXJpbmZvJiZpLmhvdmVybW9kZSYmcCYmKCF0aGlzLmxhc3RQaWNrUmVzdWx0fHx0aGlzLmxhc3RQaWNrUmVzdWx0LnRyYWNlVWlkIT09cC50cmFjZS51aWR8fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzBdIT09cC5kYXRhQ29vcmRbMF18fHRoaXMubGFzdFBpY2tSZXN1bHQuZGF0YUNvb3JkWzFdIT09cC5kYXRhQ29vcmRbMV0pKXt2YXIgbT1wCjt0aGlzLmxhc3RQaWNrUmVzdWx0PXt0cmFjZVVpZDpwLnRyYWNlP3AudHJhY2UudWlkOm51bGwsZGF0YUNvb3JkOnAuZGF0YUNvb3JkLnNsaWNlKCl9LHRoaXMuc3Bpa2VzLnVwZGF0ZSh7Y2VudGVyOmEuZGF0YUNvb3JkfSksbS5zY3JlZW5Db29yZD1bKCh0LnZpZXdCb3hbMl0tdC52aWV3Qm94WzBdKSooYS5kYXRhQ29vcmRbMF0tdC5kYXRhQm94WzBdKS8odC5kYXRhQm94WzJdLXQuZGF0YUJveFswXSkrdC52aWV3Qm94WzBdKS90LnBpeGVsUmF0aW8sKHRoaXMuY2FudmFzLmhlaWdodC0odC52aWV3Qm94WzNdLXQudmlld0JveFsxXSkqKGEuZGF0YUNvb3JkWzFdLXQuZGF0YUJveFsxXSkvKHQuZGF0YUJveFszXS10LmRhdGFCb3hbMV0pLXQudmlld0JveFsxXSkvdC5waXhlbFJhdGlvXSx0aGlzLmVtaXRQb2ludEFjdGlvbihwLCJwbG90bHlfaG92ZXIiKTt2YXIgdj10aGlzLmZ1bGxEYXRhW20udHJhY2UuaW5kZXhdfHx7fSxnPW0ucG9pbnRJbmRleCx5PXUuY2FzdEhvdmVyaW5mbyh2LGksZyk7aWYoeSYmImFsbCIhPT15KXt2YXIgYj15LnNwbGl0KCIrIik7LTE9PT1iLmluZGV4T2YoIngiKSYmKG0udHJhY2VDb29yZFswXT12b2lkIDApLC0xPT09Yi5pbmRleE9mKCJ5IikmJihtLnRyYWNlQ29vcmRbMV09dm9pZCAwKSwtMT09PWIuaW5kZXhPZigieiIpJiYobS50cmFjZUNvb3JkWzJdPXZvaWQgMCksLTE9PT1iLmluZGV4T2YoInRleHQiKSYmKG0udGV4dExhYmVsPXZvaWQgMCksLTE9PT1iLmluZGV4T2YoIm5hbWUiKSYmKG0ubmFtZT12b2lkIDApfXUubG9uZUhvdmVyKHt4Om0uc2NyZWVuQ29vcmRbMF0seTptLnNjcmVlbkNvb3JkWzFdLHhMYWJlbDp0aGlzLmhvdmVyRm9ybWF0dGVyKCJ4YXhpcyIsbS50cmFjZUNvb3JkWzBdKSx5TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieWF4aXMiLG0udHJhY2VDb29yZFsxXSksekxhYmVsOm0udHJhY2VDb29yZFsyXSx0ZXh0Om0udGV4dExhYmVsLG5hbWU6bS5uYW1lLGNvbG9yOnUuY2FzdEhvdmVyT3B0aW9uKHYsZywiYmdjb2xvciIpfHxtLmNvbG9yLGJvcmRlckNvbG9yOnUuY2FzdEhvdmVyT3B0aW9uKHYsZywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OnUuY2FzdEhvdmVyT3B0aW9uKHYsZywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTp1LmNhc3RIb3Zlck9wdGlvbih2LGcsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjp1LmNhc3RIb3Zlck9wdGlvbih2LGcsImZvbnQuY29sb3IiKX0se2NvbnRhaW5lcjp0aGlzLnN2Z0NvbnRhaW5lcixnZDp0aGlzLmdyYXBoRGl2fSl9fWF8fHRoaXMudW5ob3ZlcigpLHQuZHJhdygpfX0sdy51bmhvdmVyPWZ1bmN0aW9uKCl7dGhpcy5sYXN0UGlja1Jlc3VsdCYmKHRoaXMuc3Bpa2VzLnVwZGF0ZSh7fSksdGhpcy5sYXN0UGlja1Jlc3VsdD1udWxsLHRoaXMuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiKSx1LmxvbmVVbmhvdmVyKHRoaXMuc3ZnQ29udGFpbmVyKSl9LHcuaG92ZXJGb3JtYXR0ZXI9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1lKXt2YXIgcj10aGlzW3RdO3JldHVybiBsLnRpY2tUZXh0KHIsci5jMmwoZSksImhvdmVyIikudGV4dH19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vbGliL2h0bWwydW5pY29kZSI6NzIyLCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciOjc0MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo3NzEsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vY2FtZXJhIjo4MDIsIi4vY29udmVydCI6ODAzLCJnbC1wbG90MmQiOjIxNywiZ2wtc2VsZWN0LWJveCI6MjUxLCJnbC1zcGlrZXMyZCI6MjYwLCJ3ZWJnbC1jb250ZXh0Ijo1NjF9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Z1bmN0aW9uIHIoZSxyLG4sYSl7dmFyIG89cC5rZXlCaW5kaW5nTW9kZTtpZighMSE9PW8pe3ZhciBzPSJyb3RhdGUiPT09byxsPSJwYW4iPT09byxjPSJ6b29tIj09PW8sZj0hIWEuY29udHJvbCxkPSEhYS5hbHQseT0hIWEuc2hpZnQsYj0hISgxJmUpLHg9ISEoMiZlKSxfPSEhKDQmZSksdz0xL3QuY2xpZW50SGVpZ2h0LE09dyooci1tKSxrPXcqKG4tdiksQT1wLmZsaXBYPzE6LTEsVD1wLmZsaXBZPzE6LTEsUz1pKCksRT1NYXRoLlBJKnAucm90YXRlU3BlZWQ7aWYoKHMmJmImJiFmJiYhZCYmIXl8fGImJiFmJiYhZCYmeSkmJnUucm90YXRlKFMsQSpFKk0sLVQqRSprLDApLChsJiZiJiYhZiYmIWQmJiF5fHx4fHxiJiZmJiYhZCYmIXkpJiZ1LnBhbihTLC1wLnRyYW5zbGF0ZVNwZWVkKk0qaCxwLnRyYW5zbGF0ZVNwZWVkKmsqaCwwKSxjJiZiJiYhZiYmIWQmJiF5fHxffHxiJiYhZiYmZCYmIXkpe3ZhciBMPS1wLnpvb21TcGVlZCprL3dpbmRvdy5pbm5lckhlaWdodCooUy11Lmxhc3RUKCkpKjEwMDt1LnBhbihTLDAsMCxoKihNYXRoLmV4cChMKS0xKSl9cmV0dXJuIG09cix2PW4sZz1hLCEwfX10PXR8fGRvY3VtZW50LmJvZHksZT1lfHx7fTt2YXIgbj1bLjAxLDEvMF07ImRpc3RhbmNlTGltaXRzImluIGUmJihuWzBdPWUuZGlzdGFuY2VMaW1pdHNbMF0sblsxXT1lLmRpc3RhbmNlTGltaXRzWzFdKSwiem9vbU1pbiJpbiBlJiYoblswXT1lLnpvb21NaW4pLCJ6b29tTWF4ImluIGUmJihuWzFdPWUuem9vbU1heCk7dmFyIHU9YSh7Y2VudGVyOmUuY2VudGVyfHxbMCwwLDBdLHVwOmUudXB8fFswLDEsMF0sZXllOmUuZXllfHxbMCwwLDEwXSxtb2RlOmUubW9kZXx8Im9yYml0IixkaXN0YW5jZUxpbWl0czpufSksYz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0saD0wLGY9dC5jbGllbnRXaWR0aCxkPXQuY2xpZW50SGVpZ2h0LHA9e2tleUJpbmRpbmdNb2RlOiJyb3RhdGUiLHZpZXc6dSxlbGVtZW50OnQsZGVsYXk6ZS5kZWxheXx8MTYscm90YXRlU3BlZWQ6ZS5yb3RhdGVTcGVlZHx8MSx6b29tU3BlZWQ6ZS56b29tU3BlZWR8fDEsdHJhbnNsYXRlU3BlZWQ6ZS50cmFuc2xhdGVTcGVlZHx8MSxmbGlwWDohIWUuZmxpcFgsZmxpcFk6ISFlLmZsaXBZLG1vZGVzOnUubW9kZXMsdGljazpmdW5jdGlvbigpe3ZhciBlPWkoKSxyPXRoaXMuZGVsYXksbj1lLTIqcjt1LmlkbGUoZS1yKSx1LnJlY2FsY01hdHJpeChuKSx1LmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz11LmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJmNbc109PT1vW3NdLGNbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09ZiYmdC5jbGllbnRIZWlnaHQ9PT1kO3JldHVybiBmPXQuY2xpZW50V2lkdGgsZD10LmNsaWVudEhlaWdodCxhPyFsOihoPU1hdGguZXhwKHUuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXt1Lmxvb2tBdCh1Lmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe3Uucm90YXRlKHUubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7dS5wYW4odS5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXt1LnRyYW5zbGF0ZSh1Lmxhc3RUKCksdCxlLHIpfX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocCx7bWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5jb21wdXRlZE1hdHJpeH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldE1hdHJpeCh1Lmxhc3RUKCksdCksdS5jb21wdXRlZE1hdHJpeH0sZW51bWVyYWJsZTohMH0sbW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuZ2V0TW9kZSgpfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dS5jb21wdXRlZFVwLnNsaWNlKCkscj11LmNvbXB1dGVkRXllLnNsaWNlKCksbj11LmNvbXB1dGVkQ2VudGVyLnNsaWNlKCk7aWYodS5zZXRNb2RlKHQpLCJ0dXJudGFibGUiPT09dCl7dmFyIGE9aSgpO3UuX2FjdGl2ZS5sb29rQXQoYSxyLG4sZSksdS5fYWN0aXZlLmxvb2tBdChhKzUwMCxyLG4sWzAsMCwxXSksdS5fYWN0aXZlLmZsdXNoKGEpfXJldHVybiB1LmdldE1vZGUoKX0sZW51bWVyYWJsZTohMH0sY2VudGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5jb21wdXRlZENlbnRlcn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1Lmxvb2tBdCh1Lmxhc3RUKCksbnVsbCx0KSx1LmNvbXB1dGVkQ2VudGVyfSxlbnVtZXJhYmxlOiEwfSxleWU6e2dldDpmdW5jdGlvbigpe3JldHVybiB1LmNvbXB1dGVkRXllfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHUubG9va0F0KHUubGFzdFQoKSx0KSx1LmNvbXB1dGVkRXllfSxlbnVtZXJhYmxlOiEwfSx1cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHUuY29tcHV0ZWRVcH0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1Lmxvb2tBdCh1Lmxhc3RUKCksbnVsbCxudWxsLHQpLHUuY29tcHV0ZWRVcH0sZW51bWVyYWJsZTohMH0sZGlzdGFuY2U6e2dldDpmdW5jdGlvbigpe3JldHVybiBofSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHUuc2V0RGlzdGFuY2UodS5sYXN0VCgpLHQpLHR9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlTGltaXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5nZXREaXN0YW5jZUxpbWl0cyhuKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB1LnNldERpc3RhbmNlTGltaXRzKHQpLHR9LGVudW1lcmFibGU6ITB9fSksdC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMX0pO3ZhciBtPTAsdj0wLGc9e3NoaWZ0OiExLGNvbnRyb2w6ITEsYWx0OiExLG1ldGE6ITF9O3JldHVybiBwLm1vdXNlTGlzdGVuZXI9byh0LHIpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsZnVuY3Rpb24oZSl7dmFyIG49bChlLmNoYW5nZWRUb3VjaGVzWzBdLHQpO3IoMCxuWzBdLG5bMV0sZykscigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixmdW5jdGlvbihlKXt2YXIgbj1sKGUuY2hhbmdlZFRvdWNoZXNbMF0sdCk7cigxLG5bMF0sblsxXSxnKX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGZ1bmN0aW9uKCl7cigwLG0sdixnKX0pLHAud2hlZWxMaXN0ZW5lcj1zKHQsZnVuY3Rpb24odCxlKXtpZighMSE9PXAua2V5QmluZGluZ01vZGUpe3ZhciByPXAuZmxpcFg/MTotMSxuPXAuZmxpcFk/MTotMSxhPWkoKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSl1LnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqcC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZXt2YXIgbz0tcC56b29tU3BlZWQqbiplL3dpbmRvdy5pbm5lckhlaWdodCooYS11Lmxhc3RUKCkpLzEwMDt1LnBhbihhLDAsMCxoKihNYXRoLmV4cChvKS0xKSl9fX0sITApLHB9ZS5leHBvcnRzPW47dmFyIGk9dCgicmlnaHQtbm93IiksYT10KCIzZC12aWV3Iiksbz10KCJtb3VzZS1jaGFuZ2UiKSxzPXQoIm1vdXNlLXdoZWVsIiksbD10KCJtb3VzZS1ldmVudC1vZmZzZXQiKX0seyIzZC12aWV3IjozNSwibW91c2UtY2hhbmdlIjo0NTAsIm1vdXNlLWV2ZW50LW9mZnNldCI6NDUxLCJtb3VzZS13aGVlbCI6NDUzLCJyaWdodC1ub3ciOjUwMH1dLDgwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3NjZW5lIiksaT10KCIuLi9wbG90cyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0iZ2wzZCIsci5hdHRyPSJzY2VuZSIsci5pZFJvb3Q9InNjZW5lIixyLmlkUmVnZXg9L15zY2VuZShbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyUmVnZXg9L15zY2VuZShbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbz1pLmdldFN1YnBsb3RJZHMoZSwiZ2wzZCIpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXSx1PWkuZ2V0U3VicGxvdERhdGEociwiZ2wzZCIsbCksYz1lW2xdLGg9Yy5fc2NlbmU7aHx8KGg9bmV3IG4oe2lkOmwsZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLGMuX3NjZW5lPWgpLGguY2FtZXJhSW5pdGlhbHx8KGguY2FtZXJhSW5pdGlhbD1hLmV4dGVuZERlZXAoe30sYy5jYW1lcmEpKSxoLnBsb3QodSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPWkuZ2V0U3VicGxvdElkcyhuLCJnbDNkIiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOyFlW3NdJiZuW3NdLl9zY2VuZSYmKG5bc10uX3NjZW5lLmRlc3Ryb3koKSxuLl9pbmZvbGF5ZXImJm4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrcykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0U3VicGxvdElkcyhlLCJnbDNkIiksbj1lLl9zaXplLGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIHM9ZVtyW2FdXSxsPXMuZG9tYWluLHU9cy5fc2NlbmUsYz11LnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53KmwueFswXSx5Om4udCtuLmgqKDEtbC55WzFdKSx3aWR0aDpuLncqKGwueFsxXS1sLnhbMF0pLGhlaWdodDpuLmgqKGwueVsxXS1sLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksdS5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksInNjZW5lIitlfX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vLi4vbGliIjo3MjQsIi4uL3Bsb3RzIjo4MjcsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjgwOCwiLi9sYXlvdXQvZGVmYXVsdHMiOjgxMiwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjgxMywiLi9zY2VuZSI6ODE3fV0sODA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2NlbmU6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoic2NlbmUifX19LHt9XSw4MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3Zpc2libGU6aS52aXNpYmxlLHNob3dzcGlrZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtlc2lkZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Mn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sc2hvd2JhY2tncm91bmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGJhY2tncm91bmRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KSJ9LHNob3dheGVzbGFiZWxzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb2xvcjppLmNvbG9yLGNhdGVnb3J5b3JkZXI6aS5jYXRlZ29yeW9yZGVyLGNhdGVnb3J5YXJyYXk6aS5jYXRlZ29yeWFycmF5LHRpdGxlOmkudGl0bGUsdGl0bGVmb250OmkudGl0bGVmb250LHR5cGU6aS50eXBlLGF1dG9yYW5nZTppLmF1dG9yYW5nZSxyYW5nZW1vZGU6aS5yYW5nZW1vZGUscmFuZ2U6aS5yYW5nZSx0aWNrbW9kZTppLnRpY2ttb2RlLG50aWNrczppLm50aWNrcyx0aWNrMDppLnRpY2swLGR0aWNrOmkuZHRpY2ssdGlja3ZhbHM6aS50aWNrdmFscyx0aWNrdGV4dDppLnRpY2t0ZXh0LHRpY2tzOmkudGlja3MsbWlycm9yOmkubWlycm9yLHRpY2tsZW46aS50aWNrbGVuLHRpY2t3aWR0aDppLnRpY2t3aWR0aCx0aWNrY29sb3I6aS50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6aS5zaG93dGlja2xhYmVscyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3ByZWZpeDppLnNob3d0aWNrcHJlZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3d0aWNrc3VmZml4Omkuc2hvd3RpY2tzdWZmaXgsc2hvd2V4cG9uZW50Omkuc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0OmkuZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCxob3ZlcmZvcm1hdDppLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkuc2hvd2xpbmUsbGluZWNvbG9yOmkubGluZWNvbG9yLGxpbmV3aWR0aDppLmxpbmV3aWR0aCxzaG93Z3JpZDppLnNob3dncmlkLGdyaWRjb2xvcjphKHt9LGkuZ3JpZGNvbG9yLHtkZmx0OiJyZ2IoMjA0LCAyMDQsIDIwNCkifSksZ3JpZHdpZHRoOmkuZ3JpZHdpZHRoLHplcm9saW5lOmkuemVyb2xpbmUsemVyb2xpbmVjb2xvcjppLnplcm9saW5lY29sb3IsemVyb2xpbmV3aWR0aDppLnplcm9saW5ld2lkdGh9fSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NX1dLDgxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY2FydGVzaWFuL3R5cGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksbD1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBpLmNvZXJjZShjLGgsYSx0LGUpfWZvcih2YXIgYyxoLGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGQ9bFtmXTtjPXRbZF18fHt9LGg9ZVtkXT17X2lkOmRbMF0rci5zY2VuZSxfbmFtZTpkfSxvKGMsaCx1LHIuZGF0YSkscyhjLGgsdSx7Zm9udDpyLmZvbnQsbGV0dGVyOmRbMF0sZGF0YTpyLmRhdGEsc2hvd0dyaWQ6ITAsYmdDb2xvcjpyLmJnQ29sb3IsY2FsZW5kYXI6ci5jYWxlbmRhcn0pLHUoImdyaWRjb2xvciIsbihoLmNvbG9yLHIuYmdDb2xvciwxMzYwMC8xODcpLnRvUmdiU3RyaW5nKCkpLHUoInRpdGxlIixkWzBdKSxoLnNldFNjYWxlPWkubm9vcCx1KCJzaG93c3Bpa2VzIikmJih1KCJzcGlrZXNpZGVzIiksdSgic3Bpa2V0aGlja25lc3MiKSx1KCJzcGlrZWNvbG9yIixoLmNvbG9yKSksdSgic2hvd2F4ZXNsYWJlbHMiKSx1KCJzaG93YmFja2dyb3VuZCIpJiZ1KCJiYWNrZ3JvdW5kY29sb3IiKX19fSx7Ii4uLy4uLy4uL2xpYiI6NzI0LCIuLi8uLi9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6NzY2LCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyI6Nzg2LCIuL2F4aXNfYXR0cmlidXRlcyI6ODA5LHRpbnljb2xvcjI6NTMyfV0sODExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXt0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxOCwxOCwxOF0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9WyJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiXSx0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxBbmdsZT1bMCwwLDBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzMwLDMwLDMwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVsxMCwxMCwxMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITAsITAsITBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZGVmYXVsdFRpY2tQYWQ9dGhpcy50aWNrUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExhYmVsUGFkPXRoaXMubGFiZWxQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGg9dGhpcy5saW5lVGlja0xlbmd0aC5zbGljZSgpfWZ1bmN0aW9uIGkodCl7dmFyIGU9bmV3IG47cmV0dXJuIGUubWVyZ2UodCksZX12YXIgYT10KCIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksbz10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Iikscz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO24ucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPDM7KytyKXt2YXIgbj10W3Nbcl1dO24udmlzaWJsZT8oZS5sYWJlbHNbcl09YShuLnRpdGxlKSwidGl0bGVmb250ImluIG4mJihuLnRpdGxlZm9udC5jb2xvciYmKGUubGFiZWxDb2xvcltyXT1vKG4udGl0bGVmb250LmNvbG9yKSksbi50aXRsZWZvbnQuZmFtaWx5JiYoZS5sYWJlbEZvbnRbcl09bi50aXRsZWZvbnQuZmFtaWx5KSxuLnRpdGxlZm9udC5zaXplJiYoZS5sYWJlbFNpemVbcl09bi50aXRsZWZvbnQuc2l6ZSkpLCJzaG93bGluZSJpbiBuJiYoZS5saW5lRW5hYmxlW3JdPW4uc2hvd2xpbmUpLCJsaW5lY29sb3IiaW4gbiYmKGUubGluZUNvbG9yW3JdPW8obi5saW5lY29sb3IpKSwibGluZXdpZHRoImluIG4mJihlLmxpbmVXaWR0aFtyXT1uLmxpbmV3aWR0aCksInNob3dncmlkImluIG4mJihlLmdyaWRFbmFibGVbcl09bi5zaG93Z3JpZCksImdyaWRjb2xvciJpbiBuJiYoZS5ncmlkQ29sb3Jbcl09byhuLmdyaWRjb2xvcikpLCJncmlkd2lkdGgiaW4gbiYmKGUuZ3JpZFdpZHRoW3JdPW4uZ3JpZHdpZHRoKSwibG9nIj09PW4udHlwZT9lLnplcm9FbmFibGVbcl09ITE6Inplcm9saW5lImluIG4mJihlLnplcm9FbmFibGVbcl09bi56ZXJvbGluZSksInplcm9saW5lY29sb3IiaW4gbiYmKGUuemVyb0xpbmVDb2xvcltyXT1vKG4uemVyb2xpbmVjb2xvcikpLCJ6ZXJvbGluZXdpZHRoImluIG4mJihlLnplcm9MaW5lV2lkdGhbcl09bi56ZXJvbGluZXdpZHRoKSwidGlja3MiaW4gbiYmbi50aWNrcz9lLmxpbmVUaWNrRW5hYmxlW3JdPSEwOmUubGluZVRpY2tFbmFibGVbcl09ITEsInRpY2tsZW4iaW4gbiYmKGUubGluZVRpY2tMZW5ndGhbcl09ZS5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoW3JdPW4udGlja2xlbiksInRpY2tjb2xvciJpbiBuJiYoZS5saW5lVGlja0NvbG9yW3JdPW8obi50aWNrY29sb3IpKSwidGlja3dpZHRoImluIG4mJihlLmxpbmVUaWNrV2lkdGhbcl09bi50aWNrd2lkdGgpLCJ0aWNrYW5nbGUiaW4gbiYmKGUudGlja0FuZ2xlW3JdPSJhdXRvIj09PW4udGlja2FuZ2xlPzA6TWF0aC5QSSotbi50aWNrYW5nbGUvMTgwKSwic2hvd3RpY2tsYWJlbHMiaW4gbiYmKGUudGlja0VuYWJsZVtyXT1uLnNob3d0aWNrbGFiZWxzKSwidGlja2ZvbnQiaW4gbiYmKG4udGlja2ZvbnQuY29sb3ImJihlLnRpY2tDb2xvcltyXT1vKG4udGlja2ZvbnQuY29sb3IpKSxuLnRpY2tmb250LmZhbWlseSYmKGUudGlja0ZvbnRbcl09bi50aWNrZm9udC5mYW1pbHkpLG4udGlja2ZvbnQuc2l6ZSYmKGUudGlja1NpemVbcl09bi50aWNrZm9udC5zaXplKSksIm1pcnJvciJpbiBuPy0xIT09WyJ0aWNrcyIsImFsbCIsImFsbHRpY2tzIl0uaW5kZXhPZihuLm1pcnJvcik/KGUubGluZVRpY2tNaXJyb3Jbcl09ITAsZS5saW5lTWlycm9yW3JdPSEwKTohMD09PW4ubWlycm9yPyhlLmxpbmVUaWNrTWlycm9yW3JdPSExLGUubGluZU1pcnJvcltyXT0hMCk6KGUubGluZVRpY2tNaXJyb3Jbcl09ITEsZS5saW5lTWlycm9yW3JdPSExKTplLmxpbmVNaXJyb3Jbcl09ITEsInNob3diYWNrZ3JvdW5kImluIG4mJiExIT09bi5zaG93YmFja2dyb3VuZD8oZS5iYWNrZ3JvdW5kRW5hYmxlW3JdPSEwLGUuYmFja2dyb3VuZENvbG9yW3JdPW8obi5iYWNrZ3JvdW5kY29sb3IpKTplLmJhY2tncm91bmRFbmFibGVbcl09ITEpOihlLnRpY2tFbmFibGVbcl09ITEsZS5sYWJlbEVuYWJsZVtyXT0hMSxlLmxpbmVFbmFibGVbcl09ITEsZS5saW5lVGlja0VuYWJsZVtyXT0hMSxlLmdyaWRFbmFibGVbcl09ITEsZS56ZXJvRW5hYmxlW3JdPSExLGUuYmFja2dyb3VuZEVuYWJsZVtyXT0hMSl9fSxlLmV4cG9ydHM9aX0seyIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIjo3MjIsIi4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjc0Mn1dLDgxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2Zvcih2YXIgaT1yKCJiZ2NvbG9yIikscz1hLmNvbWJpbmUoaSxuLnBhcGVyX2JnY29sb3IpLGM9T2JqZWN0LmtleXModS5jYW1lcmEpLGg9MDtoPGMubGVuZ3RoO2grKylyKCJjYW1lcmEuIitjW2hdKyIueCIpLHIoImNhbWVyYS4iK2NbaF0rIi55IikscigiY2FtZXJhLiIrY1toXSsiLnoiKTt2YXIgZj0hIXIoImFzcGVjdHJhdGlvLngiKSYmISFyKCJhc3BlY3RyYXRpby55IikmJiEhcigiYXNwZWN0cmF0aW8ueiIpLGQ9Zj8ibWFudWFsIjoiYXV0byIscD1yKCJhc3BlY3Rtb2RlIixkKTtmfHwodC5hc3BlY3RyYXRpbz1lLmFzcGVjdHJhdGlvPXt4OjEseToxLHo6MX0sIm1hbnVhbCI9PT1wJiYoZS5hc3BlY3Rtb2RlPSJhdXRvIikpLGwodCxlLHtmb250Om4uZm9udCxzY2VuZTpuLmlkLGRhdGE6bi5mdWxsRGF0YSxiZ0NvbG9yOnMsY2FsZW5kYXI6bi5jYWxlbmRhcn0pLG8uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsbikscigiZHJhZ21vZGUiLG4uZ2V0RGZsdEZyb21MYXlvdXQoImRyYWdtb2RlIikpLHIoImhvdmVybW9kZSIsbi5nZXREZmx0RnJvbUxheW91dCgiaG92ZXJtb2RlIikpfXZhciBpPXQoIi4uLy4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxsPXQoIi4vYXhpc19kZWZhdWx0cyIpLHU9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYShlKXtpZighbyl7cmV0dXJuIGkudmFsaWRhdGUodFtlXSx1W2VdKT90W2VdOnZvaWQgMH19dmFyIG89ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aD4xO3ModCxlLHIse3R5cGU6ImdsM2QiLGF0dHJpYnV0ZXM6dSxoYW5kbGVEZWZhdWx0czpuLGZ1bGxMYXlvdXQ6ZSxmb250OmUuZm9udCxmdWxsRGF0YTpyLGdldERmbHRGcm9tTGF5b3V0OmEscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsY2FsZW5kYXI6ZS5jYWxlbmRhcn0pfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uLy4uL2xpYiI6NzI0LCIuLi8uLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo4MzQsIi4vYXhpc19kZWZhdWx0cyI6ODEwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MTN9XSw4MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJue3g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDp0fSx5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6ZX0sejp7dmFsVHlwZToibnVtYmVyIixkZmx0OnJ9fX12YXIgaT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbL15zY2VuZShbMi05XXxbMS05XVswLTldKyk/XC5hbm5vdGF0aW9ucy9dLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIn0sY2FtZXJhOnt1cDphKG4oMCwwLDEpLHt9KSxjZW50ZXI6YShuKDAsMCwwKSx7fSksZXllOmEobigxLjI1LDEuMjUsMS4yNSkse30pfSxkb21haW46e3g6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfSx5Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX19LGFzcGVjdG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJjdWJlIiwiZGF0YSIsIm1hbnVhbCJdLGRmbHQ6ImF1dG8ifSxhc3BlY3RyYXRpbzp7eDp7dmFsVHlwZToibnVtYmVyIixtaW46MH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46MH0sejp7dmFsVHlwZToibnVtYmVyIixtaW46MH19LHhheGlzOmkseWF4aXM6aSx6YXhpczppLGRyYWdtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcmJpdCIsInR1cm50YWJsZSIsInpvb20iLCJwYW4iLCExXSxkZmx0OiJ0dXJudGFibGUifSxob3Zlcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb3Nlc3QiLCExXSxkZmx0OiJjbG9zZXN0In0sX2RlcHJlY2F0ZWQ6e2NhbWVyYXBvc2l0aW9uOnt2YWxUeXBlOiJpbmZvX2FycmF5In19fX0seyIuLi8uLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4vYXhpc19hdHRyaWJ1dGVzIjo4MDl9XSw4MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe3RoaXMuZW5hYmxlZD1bITAsITAsITBdLHRoaXMuY29sb3JzPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5kcmF3U2lkZXM9WyEwLCEwLCEwXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdfWZ1bmN0aW9uIGkodCl7dmFyIGU9bmV3IG47cmV0dXJuIGUubWVyZ2UodCksZX12YXIgYT10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO24ucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MzsrK2Upe3ZhciByPXRbb1tlXV07ci52aXNpYmxlPyh0aGlzLmVuYWJsZWRbZV09ci5zaG93c3Bpa2VzLHRoaXMuY29sb3JzW2VdPWEoci5zcGlrZWNvbG9yKSx0aGlzLmRyYXdTaWRlc1tlXT1yLnNwaWtlc2lkZXMsdGhpcy5saW5lV2lkdGhbZV09ci5zcGlrZXRoaWNrbmVzcyk6KHRoaXMuZW5hYmxlZFtlXT0hMSx0aGlzLmRyYXdTaWRlc1tlXT0hMSl9fSxlLmV4cG9ydHM9aX0seyIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDJ9XSw4MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KDMpLHI9MDtyPDM7KytyKXtmb3IodmFyIG49dFtyXSxpPW5ldyBBcnJheShuLmxlbmd0aCksYT0wO2E8bi5sZW5ndGg7KythKWlbYV09blthXS54O2Vbcl09aX1yZXR1cm4gZX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10LmF4ZXNPcHRpb25zLHI9dC5nbHBsb3QuYXhlc1BpeGVscyxpPXQuZnVsbFNjZW5lTGF5b3V0LGM9W1tdLFtdLFtdXSxoPTA7aDwzOysraCl7dmFyIGY9aVtsW2hdXTtpZihmLl9sZW5ndGg9KHJbaF0uaGktcltoXS5sbykqcltoXS5waXhlbHNQZXJEYXRhVW5pdC90LmRhdGFTY2FsZVtoXSxNYXRoLmFicyhmLl9sZW5ndGgpPT09MS8wKWNbaF09W107ZWxzZXtmLnJhbmdlWzBdPXJbaF0ubG8vdC5kYXRhU2NhbGVbaF0sZi5yYW5nZVsxXT1yW2hdLmhpL3QuZGF0YVNjYWxlW2hdLGYuX209MS8odC5kYXRhU2NhbGVbaF0qcltoXS5waXhlbHNQZXJEYXRhVW5pdCksZi5yYW5nZVswXT09PWYucmFuZ2VbMV0mJihmLnJhbmdlWzBdLT0xLGYucmFuZ2VbMV0rPTEpO3ZhciBkPWYudGlja21vZGU7aWYoImF1dG8iPT09Zi50aWNrbW9kZSl7Zi50aWNrbW9kZT0ibGluZWFyIjt2YXIgcD1mLm50aWNrc3x8by5jb25zdHJhaW4oZi5fbGVuZ3RoLzQwLDQsOSk7YS5hdXRvVGlja3MoZixNYXRoLmFicyhmLnJhbmdlWzFdLWYucmFuZ2VbMF0pL3ApfWZvcih2YXIgbT1hLmNhbGNUaWNrcyhmKSx2PTA7djxtLmxlbmd0aDsrK3YpbVt2XS54PW1bdl0ueCp0LmRhdGFTY2FsZVtoXSxtW3ZdLnRleHQ9cyhtW3ZdLnRleHQpO2NbaF09bSxmLnRpY2ttb2RlPWR9fWUudGlja3M9Yztmb3IodmFyIGg9MDtoPDM7KytoKXt1W2hdPS41Kih0LmdscGxvdC5ib3VuZHNbMF1baF0rdC5nbHBsb3QuYm91bmRzWzFdW2hdKTtmb3IodmFyIHY9MDt2PDI7Kyt2KWUuYm91bmRzW3ZdW2hdPXQuZ2xwbG90LmJvdW5kc1t2XVtoXX10LmNvbnRvdXJMZXZlbHM9bihjKX1lLmV4cG9ydHM9aTt2YXIgYT10KCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vLi4vbGliIikscz10KCIuLi8uLi8uLi9saWIvaHRtbDJ1bmljb2RlIiksbD1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLHU9WzAsMCwwXX0seyIuLi8uLi8uLi9saWIiOjcyNCwiLi4vLi4vLi4vbGliL2h0bWwydW5pY29kZSI6NzIyLCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyI6NzY0fV0sODE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuLGk9WzAsMCwwLDBdO2ZvcihyPTA7cjw0Oysrcilmb3Iobj0wO248NDsrK24paVtuXSs9dFs0KnIrbl0qZVtyXTtyZXR1cm4gaX1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIG4odC5wcm9qZWN0aW9uLG4odC52aWV3LG4odC5tb2RlbCxbZVswXSxlWzFdLGVbMl0sMV0pKSl9ZS5leHBvcnRzPWl9LHt9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49dC5mdWxsU2NlbmVMYXlvdXRbZV07cmV0dXJuIHYudGlja1RleHQobixuLmQybChyKSwiaG92ZXIiKS50ZXh0fXZhciByLG49dC5zdmdDb250YWluZXIsaT10LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkud2lkdGgsbz1pLmhlaWdodDtuLnNldEF0dHJpYnV0ZU5TKG51bGwsInZpZXdCb3giLCIwIDAgIithKyIgIitvKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixhKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsbyksayh0KSx0LmdscGxvdC5heGVzLnVwZGF0ZSh0LmF4ZXNPcHRpb25zKTtmb3IodmFyIHM9T2JqZWN0LmtleXModC50cmFjZXMpLGw9bnVsbCx1PXQuZ2xwbG90LnNlbGVjdGlvbixjPTA7YzxzLmxlbmd0aDsrK2Mpcj10LnRyYWNlc1tzW2NdXSwic2tpcCIhPT1yLmRhdGEuaG92ZXJpbmZvJiZyLmhhbmRsZVBpY2sodSkmJihsPXIpLHIuc2V0Q29udG91ckxldmVscyYmci5zZXRDb250b3VyTGV2ZWxzKCk7dmFyIGg7aWYobnVsbCE9PWwpe3ZhciBmPV8odC5nbHBsb3QuY2FtZXJhUGFyYW1zLHUuZGF0YUNvb3JkaW5hdGUpO3I9bC5kYXRhO3ZhciBkPXUuaW5kZXgscD1nLmNhc3RIb3ZlcmluZm8ocix0LmZ1bGxMYXlvdXQsZCksbT1lKCJ4YXhpcyIsdS50cmFjZUNvb3JkaW5hdGVbMF0pLHk9ZSgieWF4aXMiLHUudHJhY2VDb29yZGluYXRlWzFdKSxiPWUoInpheGlzIix1LnRyYWNlQ29vcmRpbmF0ZVsyXSk7aWYoImFsbCIhPT1wKXt2YXIgeD1wLnNwbGl0KCIrIik7LTE9PT14LmluZGV4T2YoIngiKSYmKG09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieSIpJiYoeT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ6IikmJihiPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInRleHQiKSYmKHUudGV4dExhYmVsPXZvaWQgMCksLTE9PT14LmluZGV4T2YoIm5hbWUiKSYmKGwubmFtZT12b2lkIDApfXQuZnVsbFNjZW5lTGF5b3V0LmhvdmVybW9kZSYmZy5sb25lSG92ZXIoe3g6KC41Ky41KmZbMF0vZlszXSkqYSx5OiguNS0uNSpmWzFdL2ZbM10pKm8seExhYmVsOm0seUxhYmVsOnksekxhYmVsOmIsdGV4dDp1LnRleHRMYWJlbCxuYW1lOmwubmFtZSxjb2xvcjpnLmNhc3RIb3Zlck9wdGlvbihyLGQsImJnY29sb3IiKXx8bC5jb2xvcixib3JkZXJDb2xvcjpnLmNhc3RIb3Zlck9wdGlvbihyLGQsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpnLmNhc3RIb3Zlck9wdGlvbihyLGQsImZvbnQuZmFtaWx5IiksZm9udFNpemU6Zy5jYXN0SG92ZXJPcHRpb24ocixkLCJmb250LnNpemUiKSxmb250Q29sb3I6Zy5jYXN0SG92ZXJPcHRpb24ocixkLCJmb250LmNvbG9yIil9LHtjb250YWluZXI6bixnZDp0LmdyYXBoRGl2fSk7dmFyIHc9e3g6dS50cmFjZUNvb3JkaW5hdGVbMF0seTp1LnRyYWNlQ29vcmRpbmF0ZVsxXSx6OnUudHJhY2VDb29yZGluYXRlWzJdLGRhdGE6ci5faW5wdXQsZnVsbERhdGE6cixjdXJ2ZU51bWJlcjpyLmluZGV4LHBvaW50TnVtYmVyOmR9O2cuYXBwZW5kQXJyYXlQb2ludFZhbHVlKHcscixkKTt2YXIgTT17cG9pbnRzOlt3XX07dS5idXR0b25zJiZ1LmRpc3RhbmNlPDU/dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfY2xpY2siLE0pOnQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X2hvdmVyIixNKSxoPU19ZWxzZSBnLmxvbmVVbmhvdmVyKG4pLHQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGgpO3QuZHJhd0Fubm90YXRpb25zKHQpfWZ1bmN0aW9uIGkodCxlLHIsaSl7dmFyIGE9e2NhbnZhczpyLGdsOmksY29udGFpbmVyOnQuY29udGFpbmVyLGF4ZXM6dC5heGVzT3B0aW9ucyxzcGlrZXM6dC5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExfTtpZih0LnN0YXRpY01vZGUpe2lmKCEoaHx8KGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksaD1kKHtjYW52YXM6YyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0pKSkpdGhyb3cgbmV3IEVycm9yKCJlcnJvciBjcmVhdGluZyBzdGF0aWMgY2FudmFzL2NvbnRleHQgZm9yIGltYWdlIHNlcnZlciIpO2EucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sYS5nbD1oLGEuY2FudmFzPWN9dHJ5e3QuZ2xwbG90PWYoYSl9Y2F0Y2goZSl7Yih0KX12YXIgbz1mdW5jdGlvbih0KXtpZighMSE9PXQuZnVsbFNjZW5lTGF5b3V0LmRyYWdtb2RlKXt2YXIgZT17fTtlW3QuaWQrIi5jYW1lcmEiXT11KHQuY2FtZXJhKSx0LnNhdmVDYW1lcmEodC5ncmFwaERpdi5sYXlvdXQpLHQuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixlKX19O2lmKHQuZ2xwbG90LmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixvLmJpbmQobnVsbCx0KSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixvLmJpbmQobnVsbCx0KSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZnVuY3Rpb24odCl7bS53YXJuKCJMb3N0IFdlYkdMIGNvbnRleHQuIiksdC5wcmV2ZW50RGVmYXVsdCgpfSksIXQuY2FtZXJhKXt2YXIgcz10LmZ1bGxTY2VuZUxheW91dC5jYW1lcmE7dC5jYW1lcmE9eCh0LmNvbnRhaW5lcix7Y2VudGVyOltzLmNlbnRlci54LHMuY2VudGVyLnkscy5jZW50ZXIuel0sZXllOltzLmV5ZS54LHMuZXllLnkscy5leWUuel0sdXA6W3MudXAueCxzLnVwLnkscy51cC56XSx6b29tTWluOi4xLHpvb21NYXg6MTAwLG1vZGU6Im9yYml0In0pfXJldHVybiB0LmdscGxvdC5jYW1lcmE9dC5jYW1lcmEsdC5nbHBsb3Qub25jb250ZXh0bG9zcz1mdW5jdGlvbigpe3QucmVjb3ZlckNvbnRleHQoKX0sdC5nbHBsb3Qub25yZW5kZXI9bi5iaW5kKG51bGwsdCksdC50cmFjZXM9e30sITB9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTthLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9YS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGEuc3R5bGVbInotaW5kZXgiXT0yMCxhLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixyLmFwcGVuZENoaWxkKGEpLHRoaXMuc3ZnQ29udGFpbmVyPWEsci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZS53aWR0aD1yLnN0eWxlLmhlaWdodD0iMTAwJSIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fCJzY2VuZSIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz13KGVbdGhpcy5pZF0pLHRoaXMuc3Bpa2VPcHRpb25zPU0oZVt0aGlzLmlkXSksdGhpcy5jb250YWluZXI9cix0aGlzLnN0YXRpY01vZGU9ISF0LnN0YXRpY1Bsb3QsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8Mix0aGlzLmRhdGFTY2FsZT1bMSwxLDFdLHRoaXMuY29udG91ckxldmVscz1bW10sW10sW11dLHRoaXMuY29udmVydEFubm90YXRpb25zPXAuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiY29udmVydCIpLHRoaXMuZHJhd0Fubm90YXRpb25zPXAuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9uczNkIiwiZHJhdyIpLGkodGhpcyxlKX1mdW5jdGlvbiBvKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89MDtvPGUubGVuZ3RoOysrbylpZihBcnJheS5pc0FycmF5KGVbb10pKWZvcih2YXIgcz0wO3M8ZVtvXS5sZW5ndGg7KytzKWE9dC5kMmwoZVtvXVtzXSwwLGkpLCFpc05hTihhKSYmaXNGaW5pdGUoYSkmJihuWzBdW3JdPU1hdGgubWluKG5bMF1bcl0sYSksblsxXVtyXT1NYXRoLm1heChuWzFdW3JdLGEpKTtlbHNlIGE9dC5kMmwoZVtvXSwwLGkpLCFpc05hTihhKSYmaXNGaW5pdGUoYSkmJihuWzBdW3JdPU1hdGgubWluKG5bMF1bcl0sYSksblsxXVtyXT1NYXRoLm1heChuWzFdW3JdLGEpKX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj10LmZ1bGxTY2VuZUxheW91dDtvKG4ueGF4aXMsZS54LDAscixlLnhjYWxlbmRhciksbyhuLnlheGlzLGUueSwxLHIsZS55Y2FsZW5kYXIpLG8obi56YXhpcyxlLnosMixyLGUuemNhbGVuZGFyKX1mdW5jdGlvbiBsKHQpe3JldHVybltbdC5leWUueCx0LmV5ZS55LHQuZXllLnpdLFt0LmNlbnRlci54LHQuY2VudGVyLnksdC5jZW50ZXIuel0sW3QudXAueCx0LnVwLnksdC51cC56XV19ZnVuY3Rpb24gdSh0KXtyZXR1cm57dXA6e3g6dC51cFswXSx5OnQudXBbMV0sejp0LnVwWzJdfSxjZW50ZXI6e3g6dC5jZW50ZXJbMF0seTp0LmNlbnRlclsxXSx6OnQuY2VudGVyWzJdfSxleWU6e3g6dC5leWVbMF0seTp0LmV5ZVsxXSx6OnQuZXllWzJdfX19dmFyIGMsaCxmPXQoImdsLXBsb3QzZCIpLGQ9dCgid2ViZ2wtY29udGV4dCIpLHA9dCgiLi4vLi4vcmVnaXN0cnkiKSxtPXQoIi4uLy4uL2xpYiIpLHY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx5PXQoIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiKSxiPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLHg9dCgiLi9jYW1lcmEiKSxfPXQoIi4vcHJvamVjdCIpLHc9dCgiLi9sYXlvdXQvY29udmVydCIpLE09dCgiLi9sYXlvdXQvc3Bpa2VzIiksaz10KCIuL2xheW91dC90aWNrX21hcmtzIiksQT1hLnByb3RvdHlwZTtBLnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybiByLmlzQ29udGV4dExvc3QoKT92b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTppKGUsZS5mdWxsTGF5b3V0LG4scik/dm9pZCBlLnBsb3QuYXBwbHkoZSxlLnBsb3RBcmdzKTp2b2lkIG0uZXJyb3IoIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LiIpfXZhciBlPXRoaXMscj10aGlzLmdscGxvdC5nbCxuPXRoaXMuZ2xwbG90LmNhbnZhczt0aGlzLmdscGxvdC5kaXNwb3NlKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpfTt2YXIgVD1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO0EucGxvdD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5wbG90QXJncz1bdCxlLHJdLCF0aGlzLmdscGxvdC5jb250ZXh0TG9zdCl7dmFyIG4saSxhLG8sbCx1LGM9ZVt0aGlzLmlkXSxoPXJbdGhpcy5pZF07Yy5iZ2NvbG9yP3RoaXMuZ2xwbG90LmNsZWFyQ29sb3I9eShjLmJnY29sb3IpOnRoaXMuZ2xwbG90LmNsZWFyQ29sb3I9WzAsMCwwLDBdLHRoaXMuZ2xwbG90LnNuYXBUb0RhdGE9ITAsdGhpcy5mdWxsTGF5b3V0PWUsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9Yyx0aGlzLmdscGxvdExheW91dD1jLHRoaXMuYXhlc09wdGlvbnMubWVyZ2UoYyksdGhpcy5zcGlrZU9wdGlvbnMubWVyZ2UoYyksdGhpcy5zZXRDYW1lcmEoYy5jYW1lcmEpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5nbHBsb3QudXBkYXRlKHt9KSx0aGlzLnNldENvbnZlcnQobCksdD9BcnJheS5pc0FycmF5KHQpfHwodD1bdF0pOnQ9W107dmFyIGY9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGE9MDthPHQubGVuZ3RoOysrYSluPXRbYV0sITA9PT1uLnZpc2libGUmJnModGhpcyxuLGYpO3ZhciBkPVsxLDEsMV07Zm9yKG89MDtvPDM7KytvKWZbMF1bb10+ZlsxXVtvXT9kW29dPTE6ZlsxXVtvXT09PWZbMF1bb10/ZFtvXT0xOmRbb109MS8oZlsxXVtvXS1mWzBdW29dKTtmb3IodGhpcy5kYXRhU2NhbGU9ZCx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucyh0aGlzKSxhPTA7YTx0Lmxlbmd0aDsrK2Epbj10W2FdLCEwPT09bi52aXNpYmxlJiYoaT10aGlzLnRyYWNlc1tuLnVpZF0saT9pLnVwZGF0ZShuKTooaT1uLl9tb2R1bGUucGxvdCh0aGlzLG4pLHRoaXMudHJhY2VzW24udWlkXT1pKSxpLm5hbWU9bi5uYW1lKTt2YXIgcD1PYmplY3Qua2V5cyh0aGlzLnRyYWNlcyk7dDpmb3IoYT0wO2E8cC5sZW5ndGg7KythKXtmb3Iobz0wO288dC5sZW5ndGg7KytvKWlmKHRbb10udWlkPT09cFthXSYmITA9PT10W29dLnZpc2libGUpY29udGludWUgdDtpPXRoaXMudHJhY2VzW3BbYV1dLGkuZGlzcG9zZSgpLGRlbGV0ZSB0aGlzLnRyYWNlc1twW2FdXX10aGlzLmdscGxvdC5vYmplY3RzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJhY2UuZGF0YS5pbmRleC1lLl90cmFjZS5kYXRhLmluZGV4fSk7dmFyIG09W1swLDAsMF0sWzAsMCwwXV0sdj1bXSxnPXt9O2ZvcihhPTA7YTwzOysrYSl7aWYobD1jW1RbYV1dLHU9bC50eXBlLHUgaW4gZz8oZ1t1XS5hY2MqPWRbYV0sZ1t1XS5jb3VudCs9MSk6Z1t1XT17YWNjOmRbYV0sY291bnQ6MX0sbC5hdXRvcmFuZ2Upe21bMF1bYV09MS8wLG1bMV1bYV09LTEvMDt2YXIgYj10aGlzLmdscGxvdC5vYmplY3RzLHg9dGhpcy5mdWxsU2NlbmVMYXlvdXQuYW5ub3RhdGlvbnN8fFtdLF89bC5fbmFtZS5jaGFyQXQoMCk7Zm9yKG89MDtvPGIubGVuZ3RoO28rKyl7dmFyIHc9YltvXS5ib3VuZHM7bVswXVthXT1NYXRoLm1pbihtWzBdW2FdLHdbMF1bYV0vZFthXSksbVsxXVthXT1NYXRoLm1heChtWzFdW2FdLHdbMV1bYV0vZFthXSl9Zm9yKG89MDtvPHgubGVuZ3RoO28rKyl7dmFyIE09eFtvXTtpZihNLnZpc2libGUpe3ZhciBrPWwucjJsKE1bX10pO21bMF1bYV09TWF0aC5taW4obVswXVthXSxrKSxtWzFdW2FdPU1hdGgubWF4KG1bMV1bYV0sayl9fWlmKCJyYW5nZW1vZGUiaW4gbCYmInRvemVybyI9PT1sLnJhbmdlbW9kZSYmKG1bMF1bYV09TWF0aC5taW4obVswXVthXSwwKSxtWzFdW2FdPU1hdGgubWF4KG1bMV1bYV0sMCkpLG1bMF1bYV0+bVsxXVthXSltWzBdW2FdPS0xLG1bMV1bYV09MTtlbHNle3ZhciBBPW1bMV1bYV0tbVswXVthXTttWzBdW2FdLT1BLzMyLG1bMV1bYV0rPUEvMzJ9fWVsc2V7dmFyIFM9bC5yYW5nZTttWzBdW2FdPWwucjJsKFNbMF0pLG1bMV1bYV09bC5yMmwoU1sxXSl9bVswXVthXT09PW1bMV1bYV0mJihtWzBdW2FdLT0xLG1bMV1bYV0rPTEpLHZbYV09bVsxXVthXS1tWzBdW2FdLHRoaXMuZ2xwbG90LmJvdW5kc1swXVthXT1tWzBdW2FdKmRbYV0sdGhpcy5nbHBsb3QuYm91bmRzWzFdW2FdPW1bMV1bYV0qZFthXX12YXIgRT1bMSwxLDFdO2ZvcihhPTA7YTwzOysrYSl7bD1jW1RbYV1dLHU9bC50eXBlO3ZhciBMPWdbdV07RVthXT1NYXRoLnBvdyhMLmFjYywxL0wuY291bnQpL2RbYV19dmFyIEM7aWYoImF1dG8iPT09Yy5hc3BlY3Rtb2RlKUM9TWF0aC5tYXguYXBwbHkobnVsbCxFKS9NYXRoLm1pbi5hcHBseShudWxsLEUpPD00P0U6WzEsMSwxXTtlbHNlIGlmKCJjdWJlIj09PWMuYXNwZWN0bW9kZSlDPVsxLDEsMV07ZWxzZSBpZigiZGF0YSI9PT1jLmFzcGVjdG1vZGUpQz1FO2Vsc2V7aWYoIm1hbnVhbCIhPT1jLmFzcGVjdG1vZGUpdGhyb3cgbmV3IEVycm9yKCJzY2VuZS5qcyBhc3BlY3RSYXRpbyB3YXMgbm90IG9uZSBvZiB0aGUgZW51bWVyYXRlZCB0eXBlcyIpO3ZhciB6PWMuYXNwZWN0cmF0aW87Qz1bei54LHoueSx6LnpdfWMuYXNwZWN0cmF0aW8ueD1oLmFzcGVjdHJhdGlvLng9Q1swXSxjLmFzcGVjdHJhdGlvLnk9aC5hc3BlY3RyYXRpby55PUNbMV0sYy5hc3BlY3RyYXRpby56PWguYXNwZWN0cmF0aW8uej1DWzJdLHRoaXMuZ2xwbG90LmFzcGVjdD1DO3ZhciBJPWMuZG9tYWlufHxudWxsLEQ9ZS5fc2l6ZXx8bnVsbDtpZihJJiZEKXt2YXIgUD10aGlzLmNvbnRhaW5lci5zdHlsZTtQLnBvc2l0aW9uPSJhYnNvbHV0ZSIsUC5sZWZ0PUQubCtJLnhbMF0qRC53KyJweCIsUC50b3A9RC50KygxLUkueVsxXSkqRC5oKyJweCIsUC53aWR0aD1ELncqKEkueFsxXS1JLnhbMF0pKyJweCIsUC5oZWlnaHQ9RC5oKihJLnlbMV0tSS55WzBdKSsicHgifXRoaXMuZ2xwbG90LnJlZHJhdygpfX0sQS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT10aGlzLmdscGxvdC5jYW1lcmE9bnVsbCx0aGlzLmdscGxvdC5kaXNwb3NlKCksdGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5nbHBsb3Q9bnVsbH0sQS5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbHBsb3QuY2FtZXJhLnZpZXcucmVjYWxjTWF0cml4KHRoaXMuY2FtZXJhLnZpZXcubGFzdFQoKSksdSh0aGlzLmdscGxvdC5jYW1lcmEpfSxBLnNldENhbWVyYT1mdW5jdGlvbih0KXt0aGlzLmdscGxvdC5jYW1lcmEubG9va0F0LmFwcGx5KHRoaXMsbCh0KSl9LEEuc2F2ZUNhbWVyYT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldENhbWVyYSgpLHI9bS5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSxuPXIuZ2V0KCksaT0hMTtpZih2b2lkIDA9PT1uKWk9ITA7ZWxzZSBmb3IodmFyIGE9MDthPDM7YSsrKWZvcih2YXIgbz0wO288MztvKyspaWYoIWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPVsidXAiLCJjZW50ZXIiLCJleWUiXSxhPVsieCIsInkiLCJ6Il07cmV0dXJuIGVbaVtyXV0mJnRbaVtyXV1bYVtuXV09PT1lW2lbcl1dW2Fbbl1dfShlLG4sYSxvKSl7aT0hMDticmVha31yZXR1cm4gaSYmci5zZXQoZSksaX0sQS51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuY2FtZXJhO3ImJigib3JiaXQiPT09dD8oci5tb2RlPSJvcmJpdCIsci5rZXlCaW5kaW5nTW9kZT0icm90YXRlIik6InR1cm50YWJsZSI9PT10PyhyLnVwPVswLDAsMV0sci5tb2RlPSJ0dXJudGFibGUiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSIpOnIua2V5QmluZGluZ01vZGU9dCksdGhpcy5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlPWV9LEEudG9JbWFnZT1mdW5jdGlvbih0KXt0fHwodD0icG5nIiksdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChjKSx0aGlzLmdscGxvdC5yZWRyYXcoKTt2YXIgZT10aGlzLmdscGxvdC5nbCxyPWUuZHJhd2luZ0J1ZmZlcldpZHRoLG49ZS5kcmF3aW5nQnVmZmVySGVpZ2h0O2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCk7dmFyIGk9bmV3IFVpbnQ4QXJyYXkocipuKjQpO2UucmVhZFBpeGVscygwLDAscixuLGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUsaSk7Zm9yKHZhciBhPTAsbz1uLTE7YTxvOysrYSwtLW8pZm9yKHZhciBzPTA7czxyOysrcylmb3IodmFyIGw9MDtsPDQ7KytsKXt2YXIgdT1pWzQqKHIqYStzKStsXTtpWzQqKHIqYStzKStsXT1pWzQqKHIqbytzKStsXSxpWzQqKHIqbytzKStsXT11fXZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2gud2lkdGg9cixoLmhlaWdodD1uO3ZhciBmPWguZ2V0Q29udGV4dCgiMmQiKSxkPWYuY3JlYXRlSW1hZ2VEYXRhKHIsbik7ZC5kYXRhLnNldChpKSxmLnB1dEltYWdlRGF0YShkLDAsMCk7dmFyIHA7c3dpdGNoKHQpe2Nhc2UianBlZyI6cD1oLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2Uid2VicCI6cD1oLnRvRGF0YVVSTCgiaW1hZ2Uvd2VicCIpO2JyZWFrO2RlZmF1bHQ6cD1oLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9cmV0dXJuIHRoaXMuc3RhdGljTW9kZSYmdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQoYykscH0sQS5zZXRDb252ZXJ0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzO3QrKyl7dmFyIGU9dGhpcy5mdWxsU2NlbmVMYXlvdXRbVFt0XV07di5zZXRDb252ZXJ0KGUsdGhpcy5mdWxsTGF5b3V0KSxlLnNldFNjYWxlPW0ubm9vcH19LGUuZXhwb3J0cz1hfSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6NzQwLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vY2FtZXJhIjo4MDYsIi4vbGF5b3V0L2NvbnZlcnQiOjgxMSwiLi9sYXlvdXQvc3Bpa2VzIjo4MTQsIi4vbGF5b3V0L3RpY2tfbWFya3MiOjgxNSwiLi9wcm9qZWN0Ijo4MTYsImdsLXBsb3QzZCI6MjE5LCJ3ZWJnbC1jb250ZXh0Ijo1NjF9XSw4MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT1uLmV4dGVuZEZsYXQsYT10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtmb250OntmYW1pbHk6aSh7fSxhLmZhbWlseSx7ZGZsdDonIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJ30pLHNpemU6aSh7fSxhLnNpemUse2RmbHQ6MTJ9KSxjb2xvcjppKHt9LGEuY29sb3Ise2RmbHQ6by5kZWZhdWx0TGluZX0pfSx0aXRsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJDbGljayB0byBlbnRlciBQbG90IHRpdGxlIn0sdGl0bGVmb250Omkoe30sYSx7fSksYXV0b3NpemU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjcwMH0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MH0sbWFyZ2luOntsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6ODB9LHI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MH0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMH0sYjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwfSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowfSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0scGFwZXJfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5iYWNrZ3JvdW5kfSxwbG90X2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om8uYmFja2dyb3VuZH0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuLCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzbWl0aDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMV0sZGZsdDohMX0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiJ9fX0seyIuLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vbGliIjo3MjQsIi4vZm9udF9hdHRyaWJ1dGVzIjo3ODh9XSw4MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsY29udHJvbENvbnRhaW5lckNsYXNzTmFtZToibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLG5vQWNjZXNzVG9rZW5FcnJvck1zZzpbIk1pc3NpbmcgTWFwYm94IGFjY2VzcyB0b2tlbi4iLCJNYXBib3ggdHJhY2UgdHlwZSByZXF1aXJlIGEgTWFwYm94IGFjY2VzcyB0b2tlbiB0byBiZSByZWdpc3RlcmVkLiIsIkZvciBleGFtcGxlOiIsIiAgUGxvdGx5LnBsb3QoZ2QsIGRhdGEsIGxheW91dCwgeyBtYXBib3hBY2Nlc3NUb2tlbjogJ215LWFjY2Vzcy10b2tlbicgfSk7IiwiTW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9kZWZpbmUtYWNjZXNzLXRva2VuLyJdLmpvaW4oIlxuIiksbWFwT25FcnJvck1zZzoiTWFwYm94IGVycm9yLiJ9fSx7fV0sODIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoIiAiKSxpPXJbMF0sYT1yWzFdLG89QXJyYXkuaXNBcnJheShlKT9uLm1lYW4oZSk6ZSxzPS41K28vMTAwLGw9MS41K28vMTAwLHU9WyIiLCIiXSxjPVswLDBdO3N3aXRjaChpKXtjYXNlInRvcCI6dVswXT0idG9wIixjWzFdPS1sO2JyZWFrO2Nhc2UiYm90dG9tIjp1WzBdPSJib3R0b20iLGNbMV09bH1zd2l0Y2goYSl7Y2FzZSJsZWZ0Ijp1WzFdPSJyaWdodCIsY1swXT0tczticmVhaztjYXNlInJpZ2h0Ijp1WzFdPSJsZWZ0IixjWzBdPXN9dmFyIGg7cmV0dXJuIGg9dVswXSYmdVsxXT91LmpvaW4oIi0iKTp1WzBdP3VbMF06dVsxXT91WzFdOiJjZW50ZXIiLHthbmNob3I6aCxvZmZzZXQ6Y319fSx7Ii4uLy4uL2xpYiI6NzI0fV0sODIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LG49dC5fY29udGV4dDtpZigiIj09PW4ubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBpPW4ubWFwYm94QWNjZXNzVG9rZW4sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1yW2VbYV1dO2lmKG8uYWNjZXNzdG9rZW4pe2k9by5hY2Nlc3N0b2tlbjticmVha319aWYoIWkpdGhyb3cgbmV3IEVycm9yKHUubm9BY2Nlc3NUb2tlbkVycm9yTXNnKTtyZXR1cm4gaX12YXIgaT10KCJtYXBib3gtZ2wiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGxvdHMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIiksbD10KCIuL21hcGJveCIpLHU9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9Im1hcGJveCIsci5hdHRyPSJzdWJwbG90IixyLmlkUm9vdD0ibWFwYm94IixyLmlkUmVnZXg9L15tYXBib3goWzItOV18WzEtOV1bMC05XSspPyQvLHIuYXR0clJlZ2V4PS9ebWFwYm94KFsyLTldfFsxLTldWzAtOV0rKT8kLyxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94In19LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxzPW8uZ2V0U3VicGxvdElkcyhlLCJtYXBib3giKSx1PW4odCxzKTtpLmFjY2Vzc1Rva2VuPXU7Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBoPXNbY10sZj1vLmdldFN1YnBsb3RDYWxjRGF0YShyLCJtYXBib3giLGgpLGQ9ZVtoXSxwPWQuX3N1YnBsb3Q7ZC5hY2Nlc3N0b2tlbj11LHB8fChwPWwoe2dkOnQsY29udGFpbmVyOmUuX2dsY29udGFpbmVyLm5vZGUoKSxpZDpoLGZ1bGxMYXlvdXQ6ZSxzdGF0aWNQbG90OnQuX2NvbnRleHQuc3RhdGljUGxvdH0pLGVbaF0uX3N1YnBsb3Q9cCkscC52aWV3SW5pdGlhbHx8KHAudmlld0luaXRpYWw9e2NlbnRlcjphLmV4dGVuZEZsYXQoe30sZC5jZW50ZXIpLHpvb206ZC56b29tLGJlYXJpbmc6ZC5iZWFyaW5nLHBpdGNoOmQucGl0Y2h9KSxwLnBsb3QoZixlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW8uZ2V0U3VicGxvdElkcyhuLCJtYXBib3giKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07IWVbc10mJm5bc10uX3N1YnBsb3QmJm5bc10uX3N1YnBsb3QuZGVzdHJveSgpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPW8uZ2V0U3VicGxvdElkcyhlLCJtYXBib3giKSxuPWUuX3NpemUsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1lW3JbaV1dLGw9YS5kb21haW4sdT1hLl9zdWJwbG90LGM9dS50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOnMuc3ZnLCJ4bGluazpocmVmIjpjLHg6bi5sK24udypsLnhbMF0seTpuLnQrbi5oKigxLWwueVsxXSksd2lkdGg6bi53KihsLnhbMV0tbC54WzBdKSxoZWlnaHQ6bi5oKihsLnlbMV0tbC55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pLHUuZGVzdHJveSgpfX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vLi4vbGliIjo3MjQsIi4uL3Bsb3RzIjo4MjcsIi4vY29uc3RhbnRzIjo4MTksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgyMywiLi9sYXlvdXRfZGVmYXVsdHMiOjgyNCwiLi9tYXBib3giOjgyNSwibWFwYm94LWdsIjozNDF9XSw4MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubWFwYm94PXQsdGhpcy5tYXA9dC5tYXAsdGhpcy51aWQ9dC51aWQrIi1sYXllciIrZSx0aGlzLmlkU291cmNlPXRoaXMudWlkKyItc291cmNlIix0aGlzLmlkTGF5ZXI9dGhpcy51aWQrIi1sYXllciIsdGhpcy5zb3VyY2VUeXBlPW51bGwsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLmxheWVyVHlwZT1udWxsLHRoaXMuYmVsb3c9bnVsbCx0aGlzLnZpc2libGU9ITF9ZnVuY3Rpb24gaSh0KXt2YXIgZT10LnNvdXJjZTtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KGUpfHwic3RyaW5nIj09dHlwZW9mIGUmJmUubGVuZ3RoPjB9ZnVuY3Rpb24gYSh0KXt2YXIgZT17fSxyPXt9O3N3aXRjaCh0LnR5cGUpe2Nhc2UiY2lyY2xlIjpzLmV4dGVuZEZsYXQocix7ImNpcmNsZS1yYWRpdXMiOnQuY2lyY2xlLnJhZGl1cywiY2lyY2xlLWNvbG9yIjp0LmNvbG9yLCJjaXJjbGUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJsaW5lIjpzLmV4dGVuZEZsYXQocix7CiJsaW5lLXdpZHRoIjp0LmxpbmUud2lkdGgsImxpbmUtY29sb3IiOnQuY29sb3IsImxpbmUtb3BhY2l0eSI6dC5vcGFjaXR5fSk7YnJlYWs7Y2FzZSJmaWxsIjpzLmV4dGVuZEZsYXQocix7ImZpbGwtY29sb3IiOnQuY29sb3IsImZpbGwtb3V0bGluZS1jb2xvciI6dC5maWxsLm91dGxpbmVjb2xvciwiZmlsbC1vcGFjaXR5Ijp0Lm9wYWNpdHl9KTticmVhaztjYXNlInN5bWJvbCI6dmFyIG49dC5zeW1ib2wsaT1sKG4udGV4dHBvc2l0aW9uLG4uaWNvbnNpemUpO3MuZXh0ZW5kRmxhdChlLHsiaWNvbi1pbWFnZSI6bi5pY29uKyItMTUiLCJpY29uLXNpemUiOm4uaWNvbnNpemUvMTAsInRleHQtZmllbGQiOm4udGV4dCwidGV4dC1zaXplIjpuLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjppLmFuY2hvciwidGV4dC1vZmZzZXQiOmkub2Zmc2V0fSkscy5leHRlbmRGbGF0KHIseyJpY29uLWNvbG9yIjp0LmNvbG9yLCJ0ZXh0LWNvbG9yIjpuLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnQub3BhY2l0eX0pfXJldHVybntsYXlvdXQ6ZSxwYWludDpyfX1mdW5jdGlvbiBvKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsaT17dHlwZTpyfSxhPSJzdHJpbmciPT10eXBlb2YgbjtyZXR1cm4iZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09ciYmKGU9YT8idXJsIjoidGlsZXMiKSxpW2VdPW4saX12YXIgcz10KCIuLi8uLi9saWIiKSxsPXQoIi4vY29udmVydF90ZXh0X29wdHMiKSx1PW4ucHJvdG90eXBlO3UudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT90aGlzLm5lZWRzTmV3U291cmNlKHQpPyh0aGlzLnVwZGF0ZUxheWVyKHQpLHRoaXMudXBkYXRlU291cmNlKHQpKTp0aGlzLm5lZWRzTmV3TGF5ZXIodCkmJnRoaXMudXBkYXRlTGF5ZXIodCk6KHRoaXMudXBkYXRlU291cmNlKHQpLHRoaXMudXBkYXRlTGF5ZXIodCkpLHRoaXMudXBkYXRlU3R5bGUodCksdGhpcy52aXNpYmxlPWkodCl9LHUubmVlZHNOZXdTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc291cmNlVHlwZSE9PXQuc291cmNldHlwZXx8dGhpcy5zb3VyY2UhPT10LnNvdXJjZXx8dGhpcy5sYXllclR5cGUhPT10LnR5cGV9LHUubmVlZHNOZXdMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXllclR5cGUhPT10LnR5cGV8fHRoaXMuYmVsb3chPT10LmJlbG93fSx1LnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtpZihlLmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmZS5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSksdGhpcy5zb3VyY2VUeXBlPXQuc291cmNldHlwZSx0aGlzLnNvdXJjZT10LnNvdXJjZSxpKHQpKXt2YXIgcj1vKHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSx1LnVwZGF0ZUxheWVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2lmKGUuZ2V0TGF5ZXIodGhpcy5pZExheWVyKSYmZS5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHRoaXMubGF5ZXJUeXBlPXQudHlwZSxpKHQpKXtlLmFkZExheWVyKHtpZDp0aGlzLmlkTGF5ZXIsc291cmNlOnRoaXMuaWRTb3VyY2UsInNvdXJjZS1sYXllciI6dC5zb3VyY2VsYXllcnx8IiIsdHlwZTp0LnR5cGV9LHQuYmVsb3cpO3ZhciByPXt2aXNpYmlsaXR5OiJ2aXNpYmxlIn07dGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldExheW91dFByb3BlcnR5IixyKX19LHUudXBkYXRlU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9YSh0KTtpKHQpJiYodGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldExheW91dFByb3BlcnR5IixlLmxheW91dCksdGhpcy5tYXBib3guc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXIsInNldFBhaW50UHJvcGVydHkiLGUucGFpbnQpKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXIpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2UpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW5ldyBuKHQsZSk7cmV0dXJuIGkudXBkYXRlKHIpLGl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo4MjB9XSw4MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9mb250X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS50ZXh0cG9zaXRpb247ZS5leHBvcnRzPXtfYXJyYXlBdHRyUmVnZXhwczpbL15tYXBib3goWzItOV18WzEtOV1bMC05XSspP1wubGF5ZXJzL10sZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxhY2Nlc3N0b2tlbjp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMH0sc3R5bGU6e3ZhbFR5cGU6ImFueSIsdmFsdWVzOlsiYmFzaWMiLCJzdHJlZXRzIiwib3V0ZG9vcnMiLCJsaWdodCIsImRhcmsiLCJzYXRlbGxpdGUiLCJzYXRlbGxpdGUtc3RyZWV0cyJdLGRmbHQ6ImJhc2ljIn0sY2VudGVyOntsb246e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfX0sem9vbTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGJlYXJpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxwaXRjaDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGxheWVyczp7X2lzTGlua2VkVG9BcnJheToibGF5ZXIiLHNvdXJjZXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImdlb2pzb24iLCJ2ZWN0b3IiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJsaW5lIiwiZmlsbCIsInN5bWJvbCJdLGRmbHQ6ImNpcmNsZSJ9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sY2lyY2xlOntyYWRpdXM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxNX19LGxpbmU6e3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6Mn19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHRleHRmb250Om4uZXh0ZW5kRGVlcCh7fSxhLHtmYW1pbHk6e2RmbHQ6Ik9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIifX0pLHRleHRwb3NpdGlvbjpuLmV4dGVuZEZsYXQoe30sbyx7YXJyYXlPazohMX0pfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjUsIi4uL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3IoImFjY2Vzc3Rva2VuIikscigic3R5bGUiKSxyKCJjZW50ZXIubG9uIikscigiY2VudGVyLmxhdCIpLHIoInpvb20iKSxyKCJiZWFyaW5nIikscigicGl0Y2giKSxpKHQsZSksZS5faW5wdXQ9dH1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhLmNvZXJjZShuLGkscy5sYXllcnMsdCxlKX1mb3IodmFyIG4saSxvPXQubGF5ZXJzfHxbXSxsPWUubGF5ZXJzPVtdLHU9MDt1PG8ubGVuZ3RoO3UrKylpZihuPW9bdV0saT17fSxhLmlzUGxhaW5PYmplY3Qobikpe3ZhciBjPXIoInNvdXJjZXR5cGUiKTtyKCJzb3VyY2UiKSwidmVjdG9yIj09PWMmJnIoInNvdXJjZWxheWVyIik7dmFyIGg9cigidHlwZSIpO3IoImJlbG93IikscigiY29sb3IiKSxyKCJvcGFjaXR5IiksImNpcmNsZSI9PT1oJiZyKCJjaXJjbGUucmFkaXVzIiksImxpbmUiPT09aCYmcigibGluZS53aWR0aCIpLCJmaWxsIj09PWgmJnIoImZpbGwub3V0bGluZWNvbG9yIiksInN5bWJvbCI9PT1oJiYocigic3ltYm9sLmljb24iKSxyKCJzeW1ib2wuaWNvbnNpemUiKSxyKCJzeW1ib2wudGV4dCIpLGEuY29lcmNlRm9udChyLCJzeW1ib2wudGV4dGZvbnQiKSxyKCJzeW1ib2wudGV4dHBvc2l0aW9uIikpLGkuX2luZGV4PXUsbC5wdXNoKGkpfX12YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6Im1hcGJveCIsYXR0cmlidXRlczpzLGhhbmRsZURlZmF1bHRzOm4scGFydGl0aW9uOiJ5In0pfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6ODM0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MjN9XSw4MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0aGlzLmlkPXQuaWQsdGhpcy5nZD10LmdkLHRoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuaXNTdGF0aWM9dC5zdGF0aWNQbG90O3ZhciBlPXQuZnVsbExheW91dDt0aGlzLnVpZD1lLl91aWQrIi0iK3RoaXMuaWQsdGhpcy5vcHRzPWVbdGhpcy5pZF0sdGhpcy5kaXY9bnVsbCx0aGlzLnhheGlzPW51bGwsdGhpcy55YXhpcz1udWxsLHRoaXMuY3JlYXRlRnJhbWV3b3JrKGUpLHRoaXMubWFwPW51bGwsdGhpcy5hY2Nlc3NUb2tlbj1udWxsLHRoaXMuc3R5bGVPYmo9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVyTGlzdD1bXX1mdW5jdGlvbiBpKHQpe3ZhciBlPWQuc3R5bGUudmFsdWVzLHI9ZC5zdHlsZS5kZmx0LG49e307cmV0dXJuIHUuaXNQbGFpbk9iamVjdCh0KT8obi5pZD10LmlkLG4uc3R5bGU9dCk6InN0cmluZyI9PXR5cGVvZiB0PyhuLmlkPXQsbi5zdHlsZT0tMSE9PWUuaW5kZXhPZih0KT9hKHQpOnQpOihuLmlkPXIsbi5zdHlsZT1hKHIpKSxufWZ1bmN0aW9uIGEodCl7cmV0dXJuIGYuc3R5bGVVcmxQcmVmaXgrdCsiLSIrZi5zdHlsZVVybFN1ZmZpeH1mdW5jdGlvbiBvKHQpe3JldHVyblt0Lmxvbix0LmxhdF19dmFyIHM9dCgibWFwYm94LWdsIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksdT10KCIuLi8uLi9saWIiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxoPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKSxmPXQoIi4vY29uc3RhbnRzIiksZD10KCIuL2xheW91dF9hdHRyaWJ1dGVzIikscD10KCIuL2xheWVycyIpLG09bi5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX0sbS5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9bi5vcHRzPWVbdGhpcy5pZF07bi5tYXAmJmkuYWNjZXNzdG9rZW4hPT1uLmFjY2Vzc1Rva2VuJiYobi5tYXAucmVtb3ZlKCksbi5tYXA9bnVsbCxuLnN0eWxlT2JqPW51bGwsbi50cmFjZUhhc2g9W10sbi5sYXllckxpc3Q9e30pO3ZhciBhO2E9bi5tYXA/bmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXtuLnVwZGF0ZU1hcCh0LGUscixpKX0pOm5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsaSl7bi5jcmVhdGVNYXAodCxlLHIsaSl9KSxyLnB1c2goYSl9LG0uY3JlYXRlTWFwPWZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGEoKXtsLmxvbmVVbmhvdmVyKGUuX3RvcHBhcGVyKX12YXIgYz10aGlzLGg9Yy5nZCxkPWMub3B0cyxwPWMuc3R5bGVPYmo9aShkLnN0eWxlKTtjLmFjY2Vzc1Rva2VuPWQuYWNjZXNzdG9rZW47dmFyIG09Yy5tYXA9bmV3IHMuTWFwKHtjb250YWluZXI6Yy5kaXYsc3R5bGU6cC5zdHlsZSxjZW50ZXI6byhkLmNlbnRlciksem9vbTpkLnpvb20sYmVhcmluZzpkLmJlYXJpbmcscGl0Y2g6ZC5waXRjaCxpbnRlcmFjdGl2ZTohYy5pc1N0YXRpYyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6Yy5pc1N0YXRpYyxkb3VibGVDbGlja1pvb206ITEsYm94Wm9vbTohMX0pLHY9Zi5jb250cm9sQ29udGFpbmVyQ2xhc3NOYW1lLGc9Yy5kaXYuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh2KVswXTtjLmRpdi5yZW1vdmVDaGlsZChnKSxtLl9jYW52YXMuY2FudmFzLnN0eWxlLmxlZnQ9IjBweCIsbS5fY2FudmFzLmNhbnZhcy5zdHlsZS50b3A9IjBweCIsYy5yZWplY3RPbkVycm9yKG4pLG0ub25jZSgibG9hZCIsZnVuY3Rpb24oKXtjLnVwZGF0ZURhdGEodCksYy51cGRhdGVMYXlvdXQoZSksYy5yZXNvbHZlT25SZW5kZXIocil9KSxjLmlzU3RhdGljfHwobS5vbigibW92ZWVuZCIsZnVuY3Rpb24odCl7aWYoYy5tYXApe3ZhciBlPWMuZ2V0VmlldygpO2lmKGQuX2lucHV0LmNlbnRlcj1kLmNlbnRlcj1lLmNlbnRlcixkLl9pbnB1dC56b29tPWQuem9vbT1lLnpvb20sZC5faW5wdXQuYmVhcmluZz1kLmJlYXJpbmc9ZS5iZWFyaW5nLGQuX2lucHV0LnBpdGNoPWQucGl0Y2g9ZS5waXRjaCx0Lm9yaWdpbmFsRXZlbnQpe3ZhciByPXt9O3JbYy5pZF09dS5leHRlbmRGbGF0KHt9LGUpLGguZW1pdCgicGxvdGx5X3JlbGF5b3V0IixyKX19fSksbS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbih0KXt2YXIgZT1jLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LmNsaWVudFg9dC5wb2ludC54K2UubGVmdCx0LmNsaWVudFk9dC5wb2ludC55K2UudG9wLHQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdD1mdW5jdGlvbigpe3JldHVybiBlfSxjLnhheGlzLnAyYz1mdW5jdGlvbigpe3JldHVybiB0LmxuZ0xhdC5sbmd9LGMueWF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIHQubG5nTGF0LmxhdH0sbC5ob3ZlcihoLHQsYy5pZCl9KSxtLm9uKCJjbGljayIsZnVuY3Rpb24odCl7bC5jbGljayhoLHQub3JpZ2luYWxFdmVudCl9KSxtLm9uKCJkcmFnc3RhcnQiLGEpLG0ub24oInpvb21zdGFydCIsYSksbS5vbigiZGJsY2xpY2siLGZ1bmN0aW9uKCl7dmFyIHQ9Yy52aWV3SW5pdGlhbDttLnNldENlbnRlcihvKHQuY2VudGVyKSksbS5zZXRab29tKHQuem9vbSksbS5zZXRCZWFyaW5nKHQuYmVhcmluZyksbS5zZXRQaXRjaCh0LnBpdGNoKTt2YXIgZT1jLmdldFZpZXcoKTtkLl9pbnB1dC5jZW50ZXI9ZC5jZW50ZXI9ZS5jZW50ZXIsZC5faW5wdXQuem9vbT1kLnpvb209ZS56b29tLGQuX2lucHV0LmJlYXJpbmc9ZC5iZWFyaW5nPWUuYmVhcmluZyxkLl9pbnB1dC5waXRjaD1kLnBpdGNoPWUucGl0Y2gsaC5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpfSkpfSxtLnVwZGF0ZU1hcD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT10aGlzLG89YS5tYXA7YS5yZWplY3RPbkVycm9yKG4pO3ZhciBzPWkoYS5vcHRzLnN0eWxlKTthLnN0eWxlT2JqLmlkIT09cy5pZD8oYS5zdHlsZU9iaj1zLG8uc2V0U3R5bGUocy5zdHlsZSksby5zdHlsZS5vbmNlKCJsb2FkIixmdW5jdGlvbigpe2EudHJhY2VIYXNoPXt9LGEudXBkYXRlRGF0YSh0KSxhLnVwZGF0ZUxheW91dChlKSxhLnJlc29sdmVPblJlbmRlcihyKX0pKTooYS51cGRhdGVEYXRhKHQpLGEudXBkYXRlTGF5b3V0KGUpLGEucmVzb2x2ZU9uUmVuZGVyKHIpKX0sbS51cGRhdGVEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcy50cmFjZUhhc2g7Zm9yKG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTtyPW9bMF0udHJhY2UsZT1hW3IudWlkXSxlP2UudXBkYXRlKG8pOnIuX21vZHVsZSYmKGFbci51aWRdPXIuX21vZHVsZS5wbG90KHRoaXMsbykpfXZhciBzPU9iamVjdC5rZXlzKGEpO3Q6Zm9yKG49MDtuPHMubGVuZ3RoO24rKyl7dmFyIGw9c1tuXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHI9dFtpXVswXS50cmFjZSxsPT09ci51aWQpY29udGludWUgdDtlPWFbbF0sZS5kaXNwb3NlKCksZGVsZXRlIGFbbF19fSxtLnVwZGF0ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcCxyPXRoaXMub3B0cztlLnNldENlbnRlcihvKHIuY2VudGVyKSksZS5zZXRab29tKHIuem9vbSksZS5zZXRCZWFyaW5nKHIuYmVhcmluZyksZS5zZXRQaXRjaChyLnBpdGNoKSx0aGlzLnVwZGF0ZUxheWVycygpLHRoaXMudXBkYXRlRnJhbWV3b3JrKHQpLHRoaXMudXBkYXRlRngodCksdGhpcy5tYXAucmVzaXplKCl9LG0ucmVzb2x2ZU9uUmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Uub24oInJlbmRlciIsZnVuY3Rpb24gcigpe2UubG9hZGVkKCkmJihlLm9mZigicmVuZGVyIixyKSx0KCkpfSl9LG0ucmVqZWN0T25FcnJvcj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dChuZXcgRXJyb3IoZi5tYXBPbkVycm9yTXNnKSl9dmFyIHI9dGhpcy5tYXA7ci5vbmNlKCJlcnJvciIsZSksci5vbmNlKCJzdHlsZS5lcnJvciIsZSksci5vbmNlKCJzb3VyY2UuZXJyb3IiLGUpLHIub25jZSgidGlsZS5lcnJvciIsZSksci5vbmNlKCJsYXllci5lcnJvciIsZSl9LG0uY3JlYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmlkPWUudWlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSxlLnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnh9fSxlLnlheGlzPXtfaWQ6InkiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnl9fSxlLnVwZGF0ZUZyYW1ld29yayh0KX0sbS51cGRhdGVGeD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPXIubWFwLnVucHJvamVjdCh0KTtyZXR1cm5bZS5sbmcsZS5sYXRdfXZhciByPXRoaXMsbj1yLm1hcCxpPXIuZ2Q7aWYoIXIuaXNTdGF0aWMpe3ZhciBhLG89dC5kcmFnbW9kZTtpZihhPSJzZWxlY3QiPT09bz9mdW5jdGlvbih0LG4peyh0LnJhbmdlPXt9KVtyLmlkXT1bZShbbi54bWluLG4ueW1pbl0pLGUoW24ueG1heCxuLnltYXhdKV19OmZ1bmN0aW9uKHQsbixpKXsodC5sYXNzb1BvaW50cz17fSlbci5pZF09aS5maWx0ZXJlZC5tYXAoZSl9LCJzZWxlY3QiPT09b3x8Imxhc3NvIj09PW8pe24uZHJhZ1Bhbi5kaXNhYmxlKCk7dmFyIHM9e2VsZW1lbnQ6ci5kaXYsZ2Q6aSxwbG90aW5mbzp7eGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOmF9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkfTtzLnByZXBGbj1mdW5jdGlvbih0LGUscil7aCh0LGUscixzLG8pfSxzLmRvbmVGbj1mdW5jdGlvbihlLHIpezI9PT1yJiZ0Ll96b29tbGF5ZXIuc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX0sYy5pbml0KHMpfWVsc2Ugbi5kcmFnUGFuLmVuYWJsZSgpLHIuZGl2Lm9ubW91c2Vkb3duPW51bGx9fSxtLnVwZGF0ZUZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuaWRdLmRvbWFpbixyPXQuX3NpemUsbj10aGlzLmRpdi5zdHlsZTtuLndpZHRoPXIudyooZS54WzFdLWUueFswXSkrInB4IixuLmhlaWdodD1yLmgqKGUueVsxXS1lLnlbMF0pKyJweCIsbi5sZWZ0PXIubCtlLnhbMF0qci53KyJweCIsbi50b3A9ci50KygxLWUueVsxXSkqci5oKyJweCIsdGhpcy54YXhpcy5fb2Zmc2V0PXIubCtlLnhbMF0qci53LHRoaXMueGF4aXMuX2xlbmd0aD1yLncqKGUueFsxXS1lLnhbMF0pLHRoaXMueWF4aXMuX29mZnNldD1yLnQrKDEtZS55WzFdKSpyLmgsdGhpcy55YXhpcy5fbGVuZ3RoPXIuaCooZS55WzFdLWUueVswXSl9LG0udXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLm9wdHMscj1lLmxheWVycyxuPXRoaXMubGF5ZXJMaXN0O2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpe2Zvcih0PTA7dDxuLmxlbmd0aDt0Kyspblt0XS5kaXNwb3NlKCk7Zm9yKG49dGhpcy5sYXllckxpc3Q9W10sdD0wO3Q8ci5sZW5ndGg7dCsrKW4ucHVzaChwKHRoaXMsdCxyW3RdKSl9ZWxzZSBmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKW5bdF0udXBkYXRlKHJbdF0pfSxtLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZGl2KX0sbS50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLmdldENhbnZhcygpLnRvRGF0YVVSTCgpfSxtLmluaXRTb3VyY2U9ZnVuY3Rpb24odCl7dmFyIGU9e3R5cGU6Imdlb2pzb24iLGRhdGE6e3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6W119fX07cmV0dXJuIHRoaXMubWFwLmFkZFNvdXJjZSh0LGUpfSxtLnNldFNvdXJjZURhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLm1hcC5nZXRTb3VyY2UodCkuc2V0RGF0YShlKX0sbS5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy5tYXAsaT1PYmplY3Qua2V5cyhyKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07bltlXSh0LG8scltvXSl9fSxtLnByb2plY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLnByb2plY3QobmV3IHMuTG5nTGF0KHRbMF0sdFsxXSkpfSxtLmdldFZpZXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hcCxlPXQuZ2V0Q2VudGVyKCk7cmV0dXJue2NlbnRlcjp7bG9uOmUubG5nLGxhdDplLmxhdH0sem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjYyMywiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNCwiLi4vY2FydGVzaWFuL3NlbGVjdCI6NzgwLCIuL2NvbnN0YW50cyI6ODE5LCIuL2xheWVycyI6ODIyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4MjMsIm1hcGJveC1nbCI6MzQxfV0sODI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17dDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LHI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9fX0se31dLDgyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZS50ZXh0KCIiKTt2YXIgcj1lLmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQodC5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIixmdW5jdGlvbigpe3Yuc2VuZERhdGFUb0Nsb3VkKHQpfSk7ZWxzZXt2YXIgbj13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoIi8iKSxpPXdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7ci5hdHRyKHsieGxpbms6eGxpbms6c2hvdyI6Im5ldyIsInhsaW5rOnhsaW5rOmhyZWYiOiIvIituWzJdLnNwbGl0KCIuIilbMF0rIi8iK25bMV0raX0pfX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbixpPXQudHJhY2UsYT1pLl9hcnJheUF0dHJzLG89e307Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sb1tuXT1kLm5lc3RlZFByb3BlcnR5KGksbikuZ2V0KCkuc2xpY2UoKTtmb3IodC50cmFjZT1lLHI9MDtyPGEubGVuZ3RoO3IrKyluPWFbcl0sZC5uZXN0ZWRQcm9wZXJ0eSh0LnRyYWNlLG4pLnNldChvW25dKX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Zvcih2YXIgaT10LnRyYW5zZm9ybXMsYT1bdF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9X1tzLnR5cGVdO2wmJmwudHJhbnNmb3JtJiYoYT1sLnRyYW5zZm9ybShhLHt0cmFuc2Zvcm06cyxmdWxsVHJhY2U6dCxmdWxsRGF0YTplLGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBhfWZ1bmN0aW9uIG8odCl7dmFyIGUscj17bGVmdDowLHJpZ2h0OjAsYm90dG9tOjAsdG9wOjB9O2lmKHQpZm9yKGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYoci5sZWZ0Kz10W2VdLmxlZnR8fDAsci5yaWdodCs9dFtlXS5yaWdodHx8MCxyLmJvdHRvbSs9dFtlXS5ib3R0b218fDAsci50b3ArPXRbZV0udG9wfHwwKTtyZXR1cm4gcn1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt0W2VdLl9jYXRlZ29yaWVzPXRbZV0uX2luaXRpYWxDYXRlZ29yaWVzLnNsaWNlKCksdFtlXS5fY2F0ZWdvcmllc01hcD17fTtmb3IodmFyIHI9MDtyPHRbZV0uX2NhdGVnb3JpZXMubGVuZ3RoO3IrKyl0W2VdLl9jYXRlZ29yaWVzTWFwW3RbZV0uX2NhdGVnb3JpZXNbcl1dPXJ9fXZhciBsPXQoImQzIiksdT10KCJmYXN0LWlzbnVtZXJpYyIpLGM9dCgiLi4vcGxvdGx5IiksaD10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGY9dCgiLi4vcmVnaXN0cnkiKSxkPXQoIi4uL2xpYiIpLHA9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLG09dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx2PWUuZXhwb3J0cz17fSxnPXQoIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiKSx5PXQoIi4vZnJhbWVfYXR0cmlidXRlcyIpLGI9ZC5yZWxpbmtQcml2YXRlS2V5cztkLmV4dGVuZEZsYXQodixmKSx2LmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksdi5hdHRyaWJ1dGVzLnR5cGUudmFsdWVzPXYuYWxsVHlwZXMsdi5mb250QXR0cnM9dCgiLi9mb250X2F0dHJpYnV0ZXMiKSx2LmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHYuZm9udFdlaWdodD0ibm9ybWFsIjt2YXIgeD12LnN1YnBsb3RzUmVnaXN0cnksXz12LnRyYW5zZm9ybXNSZWdpc3RyeSx3PXQoIi4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksTT10KCIuL2NvbW1hbmQiKTt2LmV4ZWN1dGVBUElDb21tYW5kPU0uZXhlY3V0ZUFQSUNvbW1hbmQsdi5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPU0uY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncyx2Lm1hbmFnZUNvbW1hbmRPYnNlcnZlcj1NLm1hbmFnZUNvbW1hbmRPYnNlcnZlcix2Lmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncz1NLmhhc1NpbXBsZUFQSUNvbW1hbmRCaW5kaW5ncyx2LmZpbmRTdWJwbG90SWRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoIXYuc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm4gcjtmb3IodmFyIG49di5zdWJwbG90c1JlZ2lzdHJ5W2VdLmF0dHIsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3YudHJhY2VJcyhhLGUpJiYtMT09PXIuaW5kZXhPZihhW25dKSYmci5wdXNoKGFbbl0pfXJldHVybiByfSx2LmdldFN1YnBsb3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj12LnN1YnBsb3RzUmVnaXN0cnlbZV07aWYoIXIpcmV0dXJuW107aWYoISgiY2FydGVzaWFuIiE9PWV8fHQuX2hhcyYmdC5faGFzKCJjYXJ0ZXNpYW4iKSkpcmV0dXJuW107aWYoISgiZ2wyZCIhPT1lfHx0Ll9oYXMmJnQuX2hhcygiZ2wyZCIpKSlyZXR1cm5bXTtpZigiY2FydGVzaWFuIj09PWV8fCJnbDJkIj09PWUpcmV0dXJuIE9iamVjdC5rZXlzKHQuX3Bsb3RzfHx7fSk7Zm9yKHZhciBuPXIuaWRSZWdleCxpPU9iamVjdC5rZXlzKHQpLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO24udGVzdChzKSYmYS5wdXNoKHMpfXZhciBsPXIuaWRSb290Lmxlbmd0aDtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuKyh0LnN1YnN0cihsKXx8MSktKyhlLnN1YnN0cihsKXx8MSl9KSxhfSx2LmdldFN1YnBsb3REYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighdi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO2Zvcih2YXIgbixpPXYuc3VicGxvdHNSZWdpc3RyeVtlXS5hdHRyLGE9W10sbz0wO288dC5sZW5ndGg7bysrKWlmKG49dFtvXSwiZ2wyZCI9PT1lJiZ2LnRyYWNlSXMobiwiZ2wyZCIpKXt2YXIgcz1jLkF4ZXMuc3VicGxvdE1hdGNoLGw9IngiK3IubWF0Y2gocylbMV0sdT0ieSIrci5tYXRjaChzKVsyXTtuW2lbMF1dPT09bCYmbltpWzFdXT09PXUmJmEucHVzaChuKX1lbHNlIG5baV09PT1yJiZhLnB1c2gobik7cmV0dXJuIGF9LHYuZ2V0U3VicGxvdENhbGNEYXRhPWZ1bmN0aW9uKHQsZSxyKXtpZighdi5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybltdO2Zvcih2YXIgbj12LnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cixpPVtdLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtvWzBdLnRyYWNlW25dPT09ciYmaS5wdXNoKG8pfXJldHVybiBpfSx2LnJlZHJhd1RleHQ9ZnVuY3Rpb24odCl7aWYoISh0LmRhdGEmJnQuZGF0YVswXSYmdC5kYXRhWzBdLnIpKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Zi5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiZHJhdyIpKHQpLGYuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksKHQuY2FsY2RhdGF8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RbMF0mJnRbMF0udCYmdFswXS50LmNiJiZ0WzBdLnQuY2IoKX0pLGUodi5wcmV2aW91c1Byb21pc2VzKHQpKX0sMzAwKX0pfSx2LnJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxyKXt0JiYibm9uZSIhPT1sLnNlbGVjdCh0KS5zdHlsZSgiZGlzcGxheSIpfHxyKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgcGxvdCBkaXYgZWxlbWVudC4iKSksdC5fcmVkcmF3VGltZXImJmNsZWFyVGltZW91dCh0Ll9yZWRyYXdUaW1lciksdC5fcmVkcmF3VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKHQubGF5b3V0LndpZHRoJiZ0LmxheW91dC5oZWlnaHQpcmV0dXJuIHZvaWQgZSh0KTtkZWxldGUgdC5sYXlvdXQud2lkdGgsZGVsZXRlIHQubGF5b3V0LmhlaWdodDt2YXIgcj10LmNoYW5nZWQ7dC5hdXRvcGxheT0hMCxjLnJlbGF5b3V0KHQse2F1dG9zaXplOiEwfSkudGhlbihmdW5jdGlvbigpe3QuY2hhbmdlZD1yLGUodCl9KX0sMTAwKX0pfSx2LnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24odCl7aWYoKHQuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbihmdW5jdGlvbigpe3QuX3Byb21pc2VzPVtdfSl9LHYuYWRkTGlua3M9ZnVuY3Rpb24odCl7aWYodC5fY29udGV4dC5zaG93TGlua3x8dC5fY29udGV4dC5zaG93U291cmNlcyl7dmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3BhcGVyLnNlbGVjdEFsbCgidGV4dC5qcy1wbG90LWxpbmstY29udGFpbmVyIikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwhMCkuc3R5bGUoeyJmb250LWZhbWlseSI6JyJPcGVuIFNhbnMiLCBBcmlhbCwgc2Fucy1zZXJpZicsImZvbnQtc2l6ZSI6IjEycHgiLGZpbGw6cC5kZWZhdWx0TGluZSwicG9pbnRlci1ldmVudHMiOiJhbGwifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWwuc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pO3ZhciBpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhpKSYmaS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49ZS53aWR0aC0yMD8oYVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGEueD01KTooYVsidGV4dC1hbmNob3IiXT0iZW5kIixhLng9ZS5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxzPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSx1PXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJm4odCxvKSxzLnRleHQoby50ZXh0KCkmJnUudGV4dCgpPyIgLSAiOiIiKX19LHYuc2VuZERhdGFUb0Nsb3VkPWZ1bmN0aW9uKHQpe3QuZW1pdCgicGxvdGx5X2JlZm9yZWV4cG9ydCIpO3ZhciBlPXdpbmRvdy5QTE9UTFlFTlYmJndpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkx8fCJodHRwczovL3Bsb3QubHkiLHI9bC5zZWxlY3QodCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxuPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOmUrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gbi5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9di5ncmFwaEpzb24odCwhMSwia2VlcGRhdGEiKSxuLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9LHYuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGUscj10Ll9mdWxsTGF5b3V0fHx7fSxuPXQuX2Z1bGxMYXlvdXQ9e30sYT10LmxheW91dHx8e30sbz10Ll9mdWxsRGF0YXx8W10scz10Ll9mdWxsRGF0YT1bXSxsPXQuZGF0YXx8W107aWYodC5fdHJhbnNpdGlvbkRhdGF8fHYuY3JlYXRlVHJhbnNpdGlvbkRhdGEodCksci5faW5pdGlhbEF1dG9TaXplSXNEb25lKXt2YXIgdT1yLndpZHRoLGg9ci5oZWlnaHQ7di5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyhhLG4pLGEud2lkdGh8fChuLndpZHRoPXUpLGEuaGVpZ2h0fHwobi5oZWlnaHQ9aCl9ZWxzZXt2LnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGEsbik7dmFyIGY9IWEud2lkdGh8fCFhLmhlaWdodCxkPW4uYXV0b3NpemUscD10Ll9jb250ZXh0JiZ0Ll9jb250ZXh0LmF1dG9zaXphYmxlO2YmJihkfHxwKT92LnBsb3RBdXRvU2l6ZSh0LGEsbik6ZiYmdi5zYW5pdGl6ZU1hcmdpbnModCksIWQmJmYmJihhLndpZHRoPW4ud2lkdGgsYS5oZWlnaHQ9bi5oZWlnaHQpfW4uX2luaXRpYWxBdXRvU2l6ZUlzRG9uZT0hMCxuLl9kYXRhTGVuZ3RoPWwubGVuZ3RoLG4uX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLHYuc3VwcGx5RGF0YURlZmF1bHRzKGwscyxhLG4pLG4uX2hhcz12Ll9oYXNQbG90VHlwZS5iaW5kKG4pO3ZhciBtPW4uX21vZHVsZXM7Zm9yKGU9MDtlPG0ubGVuZ3RoO2UrKyl7dmFyIGc9bVtlXTtnLmNsZWFuRGF0YSYmZy5jbGVhbkRhdGEocyl9aWYoby5sZW5ndGg9PT1sLmxlbmd0aClmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKWIoc1tlXSxvW2VdKTt2LnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzKGEsbixzLHQuX3RyYW5zaXRpb25EYXRhKSxuLl9oYXNDYXJ0ZXNpYW49bi5faGFzKCJjYXJ0ZXNpYW4iKSxuLl9oYXNHZW89bi5faGFzKCJnZW8iKSxuLl9oYXNHTDNEPW4uX2hhcygiZ2wzZCIpLG4uX2hhc0dMMkQ9bi5faGFzKCJnbDJkIiksbi5faGFzVGVybmFyeT1uLl9oYXMoInRlcm5hcnkiKSxuLl9oYXNQaWU9bi5faGFzKCJwaWUiKSx2LmNsZWFuUGxvdChzLG4sbyxyKSx2LmxpbmtTdWJwbG90cyhzLG4sbyxyKSxiKG4sciksdi5kb0F1dG9NYXJnaW4odCk7dmFyIHk9Yy5BeGVzLmxpc3QodCk7Zm9yKGU9MDtlPHkubGVuZ3RoO2UrKyl7eVtlXS5zZXRTY2FsZSgpfWlmKCh0LmNhbGNkYXRhfHxbXSkubGVuZ3RoPT09cy5sZW5ndGgpZm9yKGU9MDtlPHMubGVuZ3RoO2UrKyl7dmFyIHg9c1tlXSxfPXQuY2FsY2RhdGFbZV1bMF07XyYmXy50cmFjZSYmKF8udHJhY2UuX2hhc0NhbGNUcmFuc2Zvcm0/aShfLHgpOl8udHJhY2U9eCl9fSx2LmNyZWF0ZVRyYW5zaXRpb25EYXRhPWZ1bmN0aW9uKHQpe3QuX3RyYW5zaXRpb25EYXRhfHwodC5fdHJhbnNpdGlvbkRhdGE9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXN8fCh0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzPVtdKSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNofHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaD17fSksdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXJ8fCh0Ll90cmFuc2l0aW9uRGF0YS5fY291bnRlcj0wKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcz1bXSl9LHYuX2hhc1Bsb3RUeXBlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9iYXNlUGxvdE1vZHVsZXN8fFtdLHI9MDtyPGUubGVuZ3RoO3IrKyl7aWYoZVtyXS5uYW1lPT09dClyZXR1cm4hMH1yZXR1cm4hMX0sdi5jbGVhblBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvPW4uX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHM9b1tpXTtzLmNsZWFuJiZzLmNsZWFuKHQsZSxyLG4pfXZhciBsPSEhbi5fcGFwZXIsdT0hIW4uX2luZm9sYXllcjt0OmZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBjPXJbaV0saD1jLnVpZDtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgZj10W2FdO2lmKGg9PT1mLnVpZCljb250aW51ZSB0fXZhciBkPSIuaG0iK2grIiwuY29udG91ciIraCsiLC5jYXJwZXQiK2grIiwjY2xpcCIraCsiLC50cmFjZSIraDtsJiZuLl9wYXBlci5zZWxlY3RBbGwoZCkucmVtb3ZlKCksdSYmKG4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIraCkucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy5yYW5nZXNsaWRlci1jb250YWluZXIiKS5zZWxlY3RBbGwoZCkucmVtb3ZlKCkpfW4uX3pvb21sYXllciYmbi5fem9vbWxheWVyLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCl9LHYubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bi5fcGxvdHN8fHt9LG89ZS5fcGxvdHM9e30scz17X2Z1bGxEYXRhOnQsX2Z1bGxMYXlvdXQ6ZX0sbD1jLkF4ZXMuZ2V0U3VicGxvdHMocyk7Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIHUsaD1sW2ldLGY9YVtoXSxkPWMuQXhlcy5nZXRGcm9tSWQocyxoLCJ4IikscD1jLkF4ZXMuZ2V0RnJvbUlkKHMsaCwieSIpO2Y/KHU9b1toXT1mLHUuX3NjZW5lMmQmJnUuX3NjZW5lMmQudXBkYXRlUmVmcyhlKSx1LnhheGlzLmxheWVyIT09ZC5sYXllciYmKHUueGxpbmVzLmF0dHIoImQiLG51bGwpLHUueGF4aXNsYXllci5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSksdS55YXhpcy5sYXllciE9PXAubGF5ZXImJih1LnlsaW5lcy5hdHRyKCJkIixudWxsKSx1LnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkpKToodT1vW2hdPXt9LHUuaWQ9aCksdS54YXhpcz1kLHUueWF4aXM9cCx1Ll9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBtPTA7bTx0Lmxlbmd0aDttKyspe3ZhciB2PXRbbV07aWYodi54YXhpcz09PXUueGF4aXMuX2lkJiZ2LnlheGlzPT09dS55YXhpcy5faWQmJiExPT09di5jbGlwb25heGlzKXt1Ll9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fX12YXIgZz1jLkF4ZXMubGlzdChzLG51bGwsITApO2ZvcihpPTA7aTxnLmxlbmd0aDtpKyspe3ZhciB5PWdbaV0sYj1udWxsO3kub3ZlcmxheWluZyYmKGI9Yy5BeGVzLmdldEZyb21JZChzLHkub3ZlcmxheWluZykpJiZiLm92ZXJsYXlpbmcmJih5Lm92ZXJsYXlpbmc9ITEsYj1udWxsKSx5Ll9tYWluQXhpcz1ifHx5LGImJih5LmRvbWFpbj1iLmRvbWFpbi5zbGljZSgpKSx5Ll9hbmNob3JBeGlzPSJmcmVlIj09PXkuYW5jaG9yP251bGw6Yy5BeGVzLmdldEZyb21JZChzLHkuYW5jaG9yKX19LHYuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxpLGEpe25bYV09ZSxuLmxlbmd0aD1hKzEsImNvbG9yIj09PXQudmFsVHlwZSYmdm9pZCAwPT09dC5kZmx0JiZyLnB1c2gobi5qb2luKCIuIikpfXZhciByLG4saTtmb3Iobj1bXSxyPXQuX21vZHVsZS5fY29sb3JBdHRycyxyfHwodC5fbW9kdWxlLl9jb2xvckF0dHJzPXI9W10saC5jcmF3bCh0Ll9tb2R1bGUuYXR0cmlidXRlcyxlKSksaT0wO2k8ci5sZW5ndGg7aSsrKXtkLm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK3JbaV0pLmdldCgpfHxkLm5lc3RlZFByb3BlcnR5KHQscltpXSkuc2V0KG51bGwpfX0sdi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJihkLnB1c2hVbmlxdWUodSxyKSxkLnB1c2hVbmlxdWUoYyx0Ll9tb2R1bGUuYmFzZVBsb3RNb2R1bGUpLGgrKyl9dmFyIG8scyxsLHU9bi5fbW9kdWxlcz1bXSxjPW4uX2Jhc2VQbG90TW9kdWxlcz1bXSxoPTA7bi5fdHJhbnNmb3JtTW9kdWxlcz1bXTt2YXIgcD17fSxtPVtdO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspe2lmKGw9dFtvXSxzPXYuc3VwcGx5VHJhY2VEZWZhdWx0cyhsLGgsbixvKSxzLmluZGV4PW8scy5faW5wdXQ9bCxzLl9leHBhbmRlZEluZGV4PWgscy50cmFuc2Zvcm1zJiZzLnRyYW5zZm9ybXMubGVuZ3RoKWZvcih2YXIgZz1hKHMsZSxyLG4pLHk9MDt5PGcubGVuZ3RoO3krKyl7dmFyIGI9Z1t5XSx4PXYuc3VwcGx5VHJhY2VEZWZhdWx0cyhiLGgsbixvKTtiLnVpZD14LnVpZD1zLnVpZCt5LHguaW5kZXg9byx4Ll9pbnB1dD1sLHguX2Z1bGxJbnB1dD1zLHguX2V4cGFuZGVkSW5kZXg9aCx4Ll9leHBhbmRlZElucHV0PWIsaSh4KX1lbHNlIHMuX2Z1bGxJbnB1dD1zLHMuX2V4cGFuZGVkSW5wdXQ9cyxpKHMpO2YudHJhY2VJcyhzLCJjYXJwZXRBeGlzIikmJihwW3MuY2FycGV0XT1zKSxmLnRyYWNlSXMocywiY2FycGV0RGVwZW5kZW50IikmJm0ucHVzaChvKX1mb3Iobz0wO288bS5sZW5ndGg7bysrKWlmKHM9ZVttW29dXSxzLnZpc2libGUpe3ZhciBfPXBbcy5jYXJwZXRdO3MuX2NhcnBldD1fLF8mJl8udmlzaWJsZT8ocy54YXhpcz1fLnhheGlzLHMueWF4aXM9Xy55YXhpcyk6cy52aXNpYmxlPSExfX0sdi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7cmV0dXJuIGQuY29lcmNlKHR8fHt9LG4sZyxlLHIpfXQ9dHx8e307dmFyIHIsbj17fTtpZihlKCJtb2RlIiksZSgiZGlyZWN0aW9uIiksZSgiZnJvbWN1cnJlbnQiKSxBcnJheS5pc0FycmF5KHQuZnJhbWUpKWZvcihuLmZyYW1lPVtdLHI9MDtyPHQuZnJhbWUubGVuZ3RoO3IrKyluLmZyYW1lW3JdPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lW3JdfHx7fSk7ZWxzZSBuLmZyYW1lPXYuc3VwcGx5QW5pbWF0aW9uRnJhbWVEZWZhdWx0cyh0LmZyYW1lfHx7fSk7aWYoQXJyYXkuaXNBcnJheSh0LnRyYW5zaXRpb24pKWZvcihuLnRyYW5zaXRpb249W10scj0wO3I8dC50cmFuc2l0aW9uLmxlbmd0aDtyKyspbi50cmFuc2l0aW9uW3JdPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbltyXXx8e30pO2Vsc2Ugbi50cmFuc2l0aW9uPXYuc3VwcGx5QW5pbWF0aW9uVHJhbnNpdGlvbkRlZmF1bHRzKHQudHJhbnNpdGlvbnx8e30pO3JldHVybiBufSx2LnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBkLmNvZXJjZSh0fHx7fSxyLGcuZnJhbWUsZSxuKX12YXIgcj17fTtyZXR1cm4gZSgiZHVyYXRpb24iKSxlKCJyZWRyYXciKSxyfSx2LnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGQuY29lcmNlKHR8fHt9LHIsZy50cmFuc2l0aW9uLGUsbil9dmFyIHI9e307cmV0dXJuIGUoImR1cmF0aW9uIiksZSgiZWFzaW5nIikscn0sdi5zdXBwbHlGcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gZC5jb2VyY2UodCxyLHksZSxuKX12YXIgcj17fTtyZXR1cm4gZSgiZ3JvdXAiKSxlKCJuYW1lIiksZSgidHJhY2VzIiksZSgiYmFzZWZyYW1lIiksZSgiZGF0YSIpLGUoImxheW91dCIpLHJ9LHYuc3VwcGx5VHJhY2VEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXtmdW5jdGlvbiBpKGUscil7cmV0dXJuIGQuY29lcmNlKHQsbyx2LmF0dHJpYnV0ZXMsZSxyKX1mdW5jdGlvbiBhKGUscil7aWYodi50cmFjZUlzKG8sZSkpcmV0dXJuIGQuY29lcmNlKHQsbyx2LnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cmlidXRlcyxyKX12YXIgbz17fSxzPXAuZGVmYXVsdHNbZSVwLmRlZmF1bHRzLmxlbmd0aF0sbD1pKCJ2aXNpYmxlIik7aSgidHlwZSIpLGkoInVpZCIpLGkoIm5hbWUiLCJ0cmFjZSAiK24pO2Zvcih2YXIgdT1PYmplY3Qua2V5cyh4KSxjPTA7Yzx1Lmxlbmd0aDtjKyspe3ZhciBoPXVbY107aWYoLTE9PT1bImNhcnRlc2lhbiIsImdsMmQiXS5pbmRleE9mKGgpKXt2YXIgbT14W2hdLmF0dHI7bSYmYShoLG0pfX1pZihsKXtpKCJjdXN0b21kYXRhIiksaSgiaWRzIik7dmFyIGc9di5nZXRNb2R1bGUobyk7by5fbW9kdWxlPWcsdi50cmFjZUlzKG8sInNob3dMZWdlbmQiKSYmKGkoInNob3dsZWdlbmQiKSxpKCJsZWdlbmRncm91cCIpKSxmLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlEZWZhdWx0cyIpKHQsbyxzLHIpLGcmJihnLnN1cHBseURlZmF1bHRzKHQsbyxzLHIpLGQuY29lcmNlSG92ZXJpbmZvKHQsbyxyKSksdi50cmFjZUlzKG8sIm5vT3BhY2l0eSIpfHxpKCJvcGFjaXR5IiksYSgiY2FydGVzaWFuIiwieGF4aXMiKSxhKCJjYXJ0ZXNpYW4iLCJ5YXhpcyIpLGEoImdsMmQiLCJ4YXhpcyIpLGEoImdsMmQiLCJ5YXhpcyIpLHYudHJhY2VJcyhvLCJub3RMZWdlbmRJc29sYXRhYmxlIikmJihvLnZpc2libGU9ISFvLnZpc2libGUpLHYuc3VwcGx5VHJhbnNmb3JtRGVmYXVsdHModCxvLHIpfXJldHVybiBvfSx2LnN1cHBseVRyYW5zZm9ybURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLl9nbG9iYWxUcmFuc2Zvcm1zfHxbXSxpPXIuX3RyYW5zZm9ybU1vZHVsZXN8fFtdO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKXx8MCE9PW4ubGVuZ3RoKWZvcih2YXIgYT10LnRyYW5zZm9ybXN8fFtdLG89bi5jb25jYXQoYSkscz1lLnRyYW5zZm9ybXM9W10sbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgdSxjPW9bbF0saD1jLnR5cGUsZj1fW2hdO2Z8fGQud2FybigiVW5yZWNvZ25pemVkIHRyYW5zZm9ybSB0eXBlICIraCsiLiIpLGYmJmYuc3VwcGx5RGVmYXVsdHM/KHU9Zi5zdXBwbHlEZWZhdWx0cyhjLGUscix0KSx1LnR5cGU9aCx1Ll9tb2R1bGU9ZixkLnB1c2hVbmlxdWUoaSxmKSk6dT1kLmV4dGVuZEZsYXQoe30sYykscy5wdXNoKHUpfX0sdi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gZC5jb2VyY2UodCxlLHYubGF5b3V0QXR0cmlidXRlcyxyLG4pfXZhciBuPWQuY29lcmNlRm9udChyLCJmb250Iik7cigidGl0bGUiKSxkLmNvZXJjZUZvbnQociwidGl0bGVmb250Iix7ZmFtaWx5Om4uZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjQqbi5zaXplKSxjb2xvcjpuLmNvbG9yfSkscigiYXV0b3NpemUiLCEodC53aWR0aCYmdC5oZWlnaHQpKSxyKCJ3aWR0aCIpLHIoImhlaWdodCIpLHIoIm1hcmdpbi5sIikscigibWFyZ2luLnIiKSxyKCJtYXJnaW4udCIpLHIoIm1hcmdpbi5iIikscigibWFyZ2luLnBhZCIpLHIoIm1hcmdpbi5hdXRvZXhwYW5kIiksdC53aWR0aCYmdC5oZWlnaHQmJnYuc2FuaXRpemVNYXJnaW5zKGUpLHIoInBhcGVyX2JnY29sb3IiKSxyKCJzZXBhcmF0b3JzIikscigiaGlkZXNvdXJjZXMiKSxyKCJzbWl0aCIpLGYuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiKSxmLmdldENvbXBvbmVudE1ldGhvZCgiZngiLCJzdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cyIpKHQsZSxyKX0sdi5wbG90QXV0b1NpemU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10Ll9jb250ZXh0fHx7fSxzPWEuZnJhbWVNYXJnaW5zLGw9ZC5pc1Bsb3REaXYodCk7aWYobCYmdC5lbWl0KCJwbG90bHlfYXV0b3NpemUiKSxhLmZpbGxGcmFtZSluPXdpbmRvdy5pbm5lcldpZHRoLGk9d2luZG93LmlubmVySGVpZ2h0LGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ZWxzZSBpZih1KHMpJiZzPjApe3ZhciBjPW8odC5fYm91bmRpbmdCb3hNYXJnaW5zKSxoPWMubGVmdCtjLnJpZ2h0LGY9Yy5ib3R0b20rYy50b3AscD0xLTIqcyxtPXIuX2NvbnRhaW5lciYmci5fY29udGFpbmVyLm5vZGU/ci5fY29udGFpbmVyLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp7d2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9O249TWF0aC5yb3VuZChwKihtLndpZHRoLWgpKSxpPU1hdGgucm91bmQocCoobS5oZWlnaHQtZikpfWVsc2V7dmFyIGc9bD93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTp7fTtuPXBhcnNlRmxvYXQoZy53aWR0aCl8fHIud2lkdGgsaT1wYXJzZUZsb2F0KGcuaGVpZ2h0KXx8ci5oZWlnaHR9dmFyIHk9di5sYXlvdXRBdHRyaWJ1dGVzLndpZHRoLm1pbixiPXYubGF5b3V0QXR0cmlidXRlcy5oZWlnaHQubWluO248eSYmKG49eSksaTxiJiYoaT1iKTt2YXIgeD0hZS53aWR0aCYmTWF0aC5hYnMoci53aWR0aC1uKT4xLF89IWUuaGVpZ2h0JiZNYXRoLmFicyhyLmhlaWdodC1pKT4xOyhffHx4KSYmKHgmJihyLndpZHRoPW4pLF8mJihyLmhlaWdodD1pKSksdC5faW5pdGlhbEF1dG9TaXplfHwodC5faW5pdGlhbEF1dG9TaXplPXt3aWR0aDpuLGhlaWdodDppfSksdi5zYW5pdGl6ZU1hcmdpbnMocil9LHYuc3VwcGx5TGF5b3V0TW9kdWxlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtjLkF4ZXMuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBvPWUuX2Jhc2VQbG90TW9kdWxlcztmb3IoaT0wO2k8by5sZW5ndGg7aSsrKWE9b1tpXSwiY2FydGVzaWFuIiE9PWEubmFtZSYmYS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmYS5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIHM9ZS5fbW9kdWxlcztmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKWE9c1tpXSxhLnN1cHBseUxheW91dERlZmF1bHRzJiZhLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKTt2YXIgbD1lLl90cmFuc2Zvcm1Nb2R1bGVzO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspYT1sW2ldLGEuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJmEuc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIsbik7dmFyIHU9T2JqZWN0LmtleXMoZi5jb21wb25lbnRzUmVnaXN0cnkpO2ZvcihpPTA7aTx1Lmxlbmd0aDtpKyspYT1mLmNvbXBvbmVudHNSZWdpc3RyeVt1W2ldXSxhLnN1cHBseUxheW91dERlZmF1bHRzJiZhLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sdi5wdXJnZT1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0fHx7fTt2b2lkIDAhPT1lLl9nbGNvbnRhaW5lciYmZS5fZ2xjb250YWluZXIucmVtb3ZlKCksdm9pZCAwIT09ZS5fZ2VvY29udGFpbmVyJiZlLl9nZW9jb250YWluZXIucmVtb3ZlKCksZS5fbW9kZUJhciYmZS5fbW9kZUJhci5kZXN0cm95KCksdC5fdHJhbnNpdGlvbkRhdGEmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSxkZWxldGUgdC5kYXRhLGRlbGV0ZSB0LmxheW91dCxkZWxldGUgdC5fZnVsbERhdGEsZGVsZXRlIHQuX2Z1bGxMYXlvdXQsZGVsZXRlIHQuY2FsY2RhdGEsZGVsZXRlIHQuZnJhbWV3b3JrLGRlbGV0ZSB0LmVtcHR5LGRlbGV0ZSB0LmZpZCxkZWxldGUgdC51bmRvcXVldWUsZGVsZXRlIHQudW5kb251bSxkZWxldGUgdC5hdXRvcGxheSxkZWxldGUgdC5jaGFuZ2VkLGRlbGV0ZSB0Ll9wcm9taXNlcyxkZWxldGUgdC5fcmVkcmF3VGltZXIsZGVsZXRlIHQuZmlyc3RzY2F0dGVyLGRlbGV0ZSB0LmhtbHVtY291bnQsZGVsZXRlIHQuaG1waXhjb3VudCxkZWxldGUgdC5udW1ib3hlcyxkZWxldGUgdC5faG92ZXJUaW1lcixkZWxldGUgdC5fbGFzdEhvdmVyVGltZSxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sdi5zdHlsZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dC5fbW9kdWxlcyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5zdHlsZSYmbi5zdHlsZSh0KX19LHYuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LHYuYXV0b01hcmdpbj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fZnVsbExheW91dDtpZihuLl9wdXNobWFyZ2lufHwobi5fcHVzaG1hcmdpbj17fSksITEhPT1uLm1hcmdpbi5hdXRvZXhwYW5kKXtpZihyKXt2YXIgaT12b2lkIDA9PT1yLnBhZD8xMjpyLnBhZDtyLmwrci5yPi41Km4ud2lkdGgmJihyLmw9ci5yPTApLHIuYityLnQ+LjUqbi5oZWlnaHQmJihyLmI9ci50PTApLG4uX3B1c2htYXJnaW5bZV09e2w6e3ZhbDpyLngsc2l6ZTpyLmwraX0scjp7dmFsOnIueCxzaXplOnIucitpfSxiOnt2YWw6ci55LHNpemU6ci5iK2l9LHQ6e3ZhbDpyLnksc2l6ZTpyLnQraX19fWVsc2UgZGVsZXRlIG4uX3B1c2htYXJnaW5bZV07bi5fcmVwbG90dGluZ3x8di5kb0F1dG9NYXJnaW4odCl9fSx2LmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3NpemV8fChlLl9zaXplPXt9KSxlLl9wdXNobWFyZ2lufHwoZS5fcHVzaG1hcmdpbj17fSk7dmFyIHI9ZS5fc2l6ZSxuPUpTT04uc3RyaW5naWZ5KHIpLGk9TWF0aC5tYXgoZS5tYXJnaW4ubHx8MCwwKSxhPU1hdGgubWF4KGUubWFyZ2luLnJ8fDAsMCksbz1NYXRoLm1heChlLm1hcmdpbi50fHwwLDApLHM9TWF0aC5tYXgoZS5tYXJnaW4uYnx8MCwwKSxsPWUuX3B1c2htYXJnaW47aWYoITEhPT1lLm1hcmdpbi5hdXRvZXhwYW5kKXtsLmJhc2U9e2w6e3ZhbDowLHNpemU6aX0scjp7dmFsOjEsc2l6ZTphfSx0Ont2YWw6MSxzaXplOm99LGI6e3ZhbDowLHNpemU6c319O2Zvcih2YXIgaD1PYmplY3Qua2V5cyhsKSxmPTA7ZjxoLmxlbmd0aDtmKyspZm9yKHZhciBkPWhbZl0scD1sW2RdLmx8fHt9LG09bFtkXS5ifHx7fSx2PXAudmFsLGc9cC5zaXplLHk9bS52YWwsYj1tLnNpemUseD0wO3g8aC5sZW5ndGg7eCsrKXt2YXIgXz1oW3hdO2lmKHUoZykmJmxbX10ucil7dmFyIHc9bFtfXS5yLnZhbCxNPWxbX10uci5zaXplO2lmKHc+dil7dmFyIGs9KGcqdysoTS1lLndpZHRoKSp2KS8ody12KSxBPShNKigxLXYpKyhnLWUud2lkdGgpKigxLXcpKS8ody12KTtrPj0wJiZBPj0wJiZrK0E+aSthJiYoaT1rLGE9QSl9fWlmKHUoYikmJmxbX10udCl7dmFyIFQ9bFtfXS50LnZhbCxTPWxbX10udC5zaXplO2lmKFQ+eSl7dmFyIEU9KGIqVCsoUy1lLmhlaWdodCkqeSkvKFQteSksTD0oUyooMS15KSsoYi1lLmhlaWdodCkqKDEtVCkpLyhULXkpO0U+PTAmJkw+PTAmJkUrTD5zK28mJihzPUUsbz1MKX19fX1pZihyLmw9TWF0aC5yb3VuZChpKSxyLnI9TWF0aC5yb3VuZChhKSxyLnQ9TWF0aC5yb3VuZChvKSxyLmI9TWF0aC5yb3VuZChzKSxyLnA9TWF0aC5yb3VuZChlLm1hcmdpbi5wYWQpLHIudz1NYXRoLnJvdW5kKGUud2lkdGgpLXIubC1yLnIsci5oPU1hdGgucm91bmQoZS5oZWlnaHQpLXIudC1yLmIsIWUuX3JlcGxvdHRpbmcmJiJ7fSIhPT1uJiZuIT09SlNPTi5zdHJpbmdpZnkoZS5fc2l6ZSkpcmV0dXJuIGMucGxvdCh0KX0sdi5ncmFwaEpzb249ZnVuY3Rpb24odCxlLHIsbixpKXtmdW5jdGlvbiBhKHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBudWxsO2lmKGQuaXNQbGFpbk9iamVjdCh0KSl7dmFyIGUsbixpPXt9O2ZvcihlIGluIHQpaWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRbZV0mJi0xPT09WyJfIiwiWyJdLmluZGV4T2YoZS5jaGFyQXQoMCkpKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1lLnN1YnN0cihlLmxlbmd0aC0zKSljb250aW51ZX1lbHNlIGlmKCJrZWVwc3RyZWFtIj09PXIpe2lmKCJzdHJpbmciPT10eXBlb2Yobj10W2UrInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MCYmIWQuaXNQbGFpbk9iamVjdCh0LnN0cmVhbSkpY29udGludWV9ZWxzZSBpZigia2VlcGFsbCIhPT1yJiYic3RyaW5nIj09dHlwZW9mKG49dFtlKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjApY29udGludWU7aVtlXT1hKHRbZV0pfXJldHVybiBpfXJldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKGEpOmQuaXNKU0RhdGUodCk/ZC5tczJEYXRlVGltZUxvY2FsKCt0KTp0fShpJiZlJiYhdC5fZnVsbERhdGF8fGkmJiFlJiYhdC5fZnVsbExheW91dCkmJnYuc3VwcGx5RGVmYXVsdHModCk7dmFyIG89aT90Ll9mdWxsRGF0YTp0LmRhdGEscz1pP3QuX2Z1bGxMYXlvdXQ6dC5sYXlvdXQsbD0odC5fdHJhbnNpdGlvbkRhdGF8fHt9KS5fZnJhbWVzLHU9e2RhdGE6KG98fFtdKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9YSh0KTtyZXR1cm4gZSYmZGVsZXRlIHIuZml0LHJ9KX07cmV0dXJuIGV8fCh1LmxheW91dD1hKHMpKSx0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHU9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpLGwmJih1LmZyYW1lcz1hKGwpKSwib2JqZWN0Ij09PW4/dTpKU09OLnN0cmluZ2lmeSh1KX0sdi5tb2RpZnlGcmFtZXM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG89dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXN3aXRjaChuPWVbcl0sbi50eXBlKXtjYXNlInJlcGxhY2UiOmk9bi52YWx1ZTt2YXIgcz0oYVtuLmluZGV4XXx8e30pLm5hbWUsbD1pLm5hbWU7YVtuLmluZGV4XT1vW2xdPWksbCE9PXMmJihkZWxldGUgb1tzXSxvW2xdPWkpO2JyZWFrO2Nhc2UiaW5zZXJ0IjppPW4udmFsdWUsb1tpLm5hbWVdPWksYS5zcGxpY2Uobi5pbmRleCwwLGkpO2JyZWFrO2Nhc2UiZGVsZXRlIjppPWFbbi5pbmRleF0sZGVsZXRlIG9baS5uYW1lXSxhLnNwbGljZShuLmluZGV4LDEpfXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sdi5jb21wdXRlRnJhbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJjb21wdXRlRnJhbWUgbXVzdCBiZSBnaXZlbiBhIHN0cmluZyBmcmFtZSBuYW1lIik7dmFyIHM9b1tlLnRvU3RyaW5nKCldO2lmKCFzKXJldHVybiExO2Zvcih2YXIgbD1bc10sdT1bcy5uYW1lXTtzLmJhc2VmcmFtZSYmKHM9b1tzLmJhc2VmcmFtZS50b1N0cmluZygpXSkmJi0xPT09dS5pbmRleE9mKHMubmFtZSk7KWwucHVzaChzKSx1LnB1c2gocy5uYW1lKTtmb3IodmFyIGM9e307cz1sLnBvcCgpOylpZihzLmxheW91dCYmKGMubGF5b3V0PXYuZXh0ZW5kTGF5b3V0KGMubGF5b3V0LHMubGF5b3V0KSkscy5kYXRhKXtpZihjLmRhdGF8fChjLmRhdGE9W10pLCEobj1zLnRyYWNlcykpZm9yKG49W10scj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbltyXT1yO2ZvcihjLnRyYWNlc3x8KGMudHJhY2VzPVtdKSxyPTA7cjxzLmRhdGEubGVuZ3RoO3IrKyl2b2lkIDAhPT0oaT1uW3JdKSYmbnVsbCE9PWkmJihhPWMudHJhY2VzLmluZGV4T2YoaSksLTE9PT1hJiYoYT1jLmRhdGEubGVuZ3RoLGMudHJhY2VzW2FdPWkpLGMuZGF0YVthXT12LmV4dGVuZFRyYWNlKGMuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gY30sdi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSx2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsdSxjLGg9ZC5leHRlbmREZWVwTm9BcnJheXMoe30sZXx8e30pLGY9ZC5leHBhbmRPYmplY3RQYXRocyhoKSxwPXt9O2lmKHImJnIubGVuZ3RoKWZvcihhPTA7YTxyLmxlbmd0aDthKyspbj1kLm5lc3RlZFByb3BlcnR5KGYsclthXSksaT1uLmdldCgpLHZvaWQgMD09PWk/ZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChudWxsKToobi5zZXQobnVsbCksZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLnNldChpKSk7aWYodD1kLmV4dGVuZERlZXBOb0FycmF5cyh0fHx7fSxmKSxyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWlmKHM9ZC5uZXN0ZWRQcm9wZXJ0eShwLHJbYV0pLHU9cy5nZXQoKSl7Zm9yKGw9ZC5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pLGM9bC5nZXQoKSxBcnJheS5pc0FycmF5KGMpfHwoYz1bXSxsLnNldChjKSksbz0wO288dS5sZW5ndGg7bysrKXt2YXIgbT11W29dO2Nbb109bnVsbD09PW0/bnVsbDp2LmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGNbb10sbSl9bC5zZXQoYyl9cmV0dXJuIHR9LHYuZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiXSx2LmxheW91dEFycmF5Q29udGFpbmVycz1mLmxheW91dEFycmF5Q29udGFpbmVycyx2LmV4dGVuZFRyYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYuZGF0YUFycmF5Q29udGFpbmVycyl9LHYuZXh0ZW5kTGF5b3V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZXh0ZW5kT2JqZWN0V2l0aENvbnRhaW5lcnModCxlLHYubGF5b3V0QXJyYXlDb250YWluZXJzKX0sdi50cmFuc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmdW5jdGlvbiBvKCl7dmFyIG47Zm9yKG49MDtuPHkubGVuZ3RoO24rKyl7dmFyIGk9eVtuXSxhPXQuX2Z1bGxEYXRhW2ldLG89YS5fbW9kdWxlO28mJihvLmFuaW1hdGFibGUmJmIucHVzaChpKSx0LmRhdGFbeVtuXV09di5leHRlbmRUcmFjZSh0LmRhdGFbeVtuXV0sZVtuXSkpfXZhciBzPWQuZXhwYW5kT2JqZWN0UGF0aHMoZC5leHRlbmREZWVwTm9BcnJheXMoe30scikpLGw9L15beHldYXhpc1swLTldKiQvO2Zvcih2YXIgdSBpbiBzKWwudGVzdCh1KSYmZGVsZXRlIHNbdV0ucmFuZ2U7cmV0dXJuIHYuZXh0ZW5kTGF5b3V0KHQubGF5b3V0LHMpLGRlbGV0ZSB0LmNhbGNkYXRhLHYuc3VwcGx5RGVmYXVsdHModCksdi5kb0NhbGNkYXRhKHQpLHcuY2FsYyh0KSxQcm9taXNlLnJlc29sdmUoKX1mdW5jdGlvbiBzKHQpe3ZhciBlPVByb21pc2UucmVzb2x2ZSgpO2lmKCF0KXJldHVybiBlO2Zvcig7dC5sZW5ndGg7KWU9ZS50aGVuKHQuc2hpZnQoKSk7cmV0dXJuIGV9ZnVuY3Rpb24gbCh0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX1mdW5jdGlvbiB1KCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZShmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7cmV0dXJuIGwrKyxmdW5jdGlvbigpe3UrKyx4fHx1IT09bHx8aChlKX19dC5fdHJhbnNpdGlvbmluZz0hMCxhLmR1cmF0aW9uPjAmJih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt4PSEwfSksCmkucmVkcmF3JiZ0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXtyZXR1cm4gYy5yZWRyYXcodCl9KSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goZnVuY3Rpb24oKXt0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uaW50ZXJydXB0ZWQiLFtdKX0pO3ZhciBvLHMsbD0wLHU9MCxmPXQuX2Z1bGxMYXlvdXQuX2Jhc2VQbG90TW9kdWxlcyxwPSExO2lmKHIpZm9yKHM9MDtzPGYubGVuZ3RoO3MrKylpZihmW3NdLnRyYW5zaXRpb25BeGVzKXt2YXIgbT1kLmV4cGFuZE9iamVjdFBhdGhzKHIpO3A9ZltzXS50cmFuc2l0aW9uQXhlcyh0LG0sYSxuKXx8cH1mb3IocD8obz1kLmV4dGVuZEZsYXQoe30sYSksby5kdXJhdGlvbj0wKTpvPWEscz0wO3M8Zi5sZW5ndGg7cysrKWZbc10ucGxvdCh0LGIsbyxuKTtzZXRUaW1lb3V0KG4oKSl9KX1mdW5jdGlvbiBoKGUpe2lmKHQuX3RyYW5zaXRpb25EYXRhKXJldHVybiBsKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpZihpLnJlZHJhdylyZXR1cm4gYy5yZWRyYXcodCl9KS50aGVuKGZ1bmN0aW9uKCl7dC5fdHJhbnNpdGlvbmluZz0hMSx0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSExLHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25lZCIsW10pfSkudGhlbihlKX1mdW5jdGlvbiBmKCl7aWYodC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuIHQuX3RyYW5zaXRpb25pbmc9ITEscyh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX12YXIgcCxtLGc9QXJyYXkuaXNBcnJheShlKT9lLmxlbmd0aDowLHk9bi5zbGljZSgwLGcpLGI9W10seD0hMTtmb3IocD0wO3A8eS5sZW5ndGg7cCsrKXttPXlbcF07dmFyIF89dC5fZnVsbERhdGFbbV0sTT1fLl9tb2R1bGU7aWYoTSYmIU0uYW5pbWF0YWJsZSl7dmFyIGs9e307Zm9yKHZhciBBIGluIGVbcF0pa1tBXT1bZVtwXVtBXV19fXZhciBUPVt2LnByZXZpb3VzUHJvbWlzZXMsZixvLHYucmVob3Zlcix1XSxTPWQuc3luY09yQXN5bmMoVCx0KTtyZXR1cm4gUyYmUy50aGVufHwoUz1Qcm9taXNlLnJlc29sdmUoKSksUy50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KX0sdi5kb0NhbGNkYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz1jLkF4ZXMubGlzdCh0KSxsPXQuX2Z1bGxEYXRhLHU9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheShsLmxlbmd0aCkscD0odC5jYWxjZGF0YXx8W10pLnNsaWNlKDApO2Zvcih0LmNhbGNkYXRhPWQsdC5maXJzdHNjYXR0ZXI9ITAsdC5udW1ib3hlcz0wLHQuX2htcGl4Y291bnQ9MCx0Ll9obWx1bWNvdW50PTAsdS5fcGllY29sb3JtYXA9e30sdS5fcGllZGVmYXVsdGNvbG9yY291bnQ9MCxpPTA7aTxsLmxlbmd0aDtpKyspQXJyYXkuaXNBcnJheShlKSYmLTE9PT1lLmluZGV4T2YoaSkmJihkW2ldPXBbaV0pO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspcj1sW2ldLHIuX2FycmF5QXR0cnM9aC5maW5kQXJyYXlBdHRyaWJ1dGVzKHIpO3Mobyk7dmFyIHY9ITE7Zm9yKGk9MDtpPGwubGVuZ3RoO2krKylpZihyPWxbaV0sITA9PT1yLnZpc2libGUmJnIudHJhbnNmb3Jtcylmb3Iobj1yLl9tb2R1bGUsbiYmbi5jYWxjJiZuLmNhbGModCxyKSxhPTA7YTxyLnRyYW5zZm9ybXMubGVuZ3RoO2ErKyl7dmFyIGc9ci50cmFuc2Zvcm1zW2FdO249X1tnLnR5cGVdLG4mJm4uY2FsY1RyYW5zZm9ybSYmKHIuX2hhc0NhbGNUcmFuc2Zvcm09ITAsdj0hMCxuLmNhbGNUcmFuc2Zvcm0odCxyLGcpKX1pZih2KXtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0uX21pbj1bXSxvW2ldLl9tYXg9W10sb1tpXS5fY2F0ZWdvcmllcz1bXSxvW2ldLl9jYXRlZ29yaWVzTWFwPXt9O3Mobyl9Zm9yKGk9MDtpPGwubGVuZ3RoO2krKyl7dmFyIHk9W107cj1sW2ldLCEwPT09ci52aXNpYmxlJiYobj1yLl9tb2R1bGUpJiZuLmNhbGMmJih5PW4uY2FsYyh0LHIpKSxBcnJheS5pc0FycmF5KHkpJiZ5WzBdfHwoeT1be3g6bSx5Om19XSkseVswXS50fHwoeVswXS50PXt9KSx5WzBdLnRyYWNlPXIsZFtpXT15fWYuZ2V0Q29tcG9uZW50TWV0aG9kKCJmeCIsImNhbGMiKSh0KX0sdi5yZWhvdmVyPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3JlaG92ZXImJnQuX2Z1bGxMYXlvdXQuX3JlaG92ZXIoKX0sdi5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dC50cmFjZUhhc2gsYT17fTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbz1lW25dLHM9b1swXS50cmFjZTtzLnZpc2libGUmJihhW3MudHlwZV09YVtzLnR5cGVdfHxbXSxhW3MudHlwZV0ucHVzaChvKSl9dmFyIGw9T2JqZWN0LmtleXMoaSksdT1PYmplY3Qua2V5cyhhKTtmb3Iobj0wO248bC5sZW5ndGg7bisrKXt2YXIgYz1sW25dO2lmKC0xPT09dS5pbmRleE9mKGMpKXt2YXIgaD1pW2NdWzBdO2hbMF0udHJhY2UudmlzaWJsZT0hMSxhW2NdPVtoXX19Zm9yKHU9T2JqZWN0LmtleXMoYSksbj0wO248dS5sZW5ndGg7bisrKXt2YXIgZj1hW3Vbbl1dO2ZbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KHQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTshMD09PW5bMF0udHJhY2UudmlzaWJsZSYmZS5wdXNoKG4pfXJldHVybiBlfShmKSxyKX10LnRyYWNlSGFzaD1hfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vbGliIjo3MjQsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo3NTMsIi4uL3Bsb3RseSI6NzU5LCIuLi9yZWdpc3RyeSI6ODQyLCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo3NjAsIi4vYXR0cmlidXRlcyI6NzYyLCIuL2NvbW1hbmQiOjc4NywiLi9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9mcmFtZV9hdHRyaWJ1dGVzIjo3ODksIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjgxOCxkMzoxMjAsImZhc3QtaXNudW1lcmljIjoxMjl9XSw4Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9bi5tYXJrZXI7ZS5leHBvcnRzPXtyOm4ucix0Om4udCxtYXJrZXI6e2NvbG9yOmkuY29sb3Isc2l6ZTppLnNpemUsc3ltYm9sOmkuc3ltYm9sLG9wYWNpdHk6aS5vcGFjaXR5fX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDgyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEoe30sZSx7c2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiJ9LHRpY2tvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl19LHRpY2tsZW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjB9LHRpY2tjb2xvcjp7dmFsVHlwZToiY29sb3IifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxlbmRwYWRkaW5nOnt2YWxUeXBlOiJudW1iZXIifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn19KX12YXIgaT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89YSh7fSxpLmRvbWFpbix7fSk7ZS5leHBvcnRzPXtyYWRpYWxheGlzOm4oInJhZGlhbCIse3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LGRvbWFpbjpvLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJudW1iZXIifX0pLGFuZ3VsYXJheGlzOm4oImFuZ3VsYXIiLHtyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0se3ZhbFR5cGU6Im51bWJlciIsZGZsdDozNjB9XX0sZG9tYWluOm99KSxsYXlvdXQ6e2RpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdfSxvcmllbnRhdGlvbjp7dmFsVHlwZToiYW5nbGUifX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NzV9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7KGUuZXhwb3J0cz10KCIuL21pY3JvcG9sYXIiKSkubWFuYWdlcj10KCIuL21pY3JvcG9sYXJfbWFuYWdlciIpfSx7Ii4vbWljcm9wb2xhciI6ODMxLCIuL21pY3JvcG9sYXJfbWFuYWdlciI6ODMyfV0sODMxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5leHRlbmREZWVwQWxsLG89dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxzPWUuZXhwb3J0cz17dmVyc2lvbjoiMC4yLjIifTtzLkF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3I9dHx8cjt2YXIgYz11LmRhdGEsZj11LmxheW91dDtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiByfHxyLm5vZGVOYW1lKSYmKHI9bi5zZWxlY3QocikpLHIuZGF0dW0oYykuZWFjaChmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbCh0KSUzNjArZi5vcmllbnRhdGlvbn12YXIgYz10LnNsaWNlKCk7aD17ZGF0YTpzLnV0aWwuY2xvbmVKc29uKGMpLGxheW91dDpzLnV0aWwuY2xvbmVKc29uKGYpfTt2YXIgZD0wO2MuZm9yRWFjaChmdW5jdGlvbih0LGUpe3QuY29sb3J8fCh0LmNvbG9yPWYuZGVmYXVsdENvbG9yUmFuZ2VbZF0sZD0oZCsxKSVmLmRlZmF1bHRDb2xvclJhbmdlLmxlbmd0aCksdC5zdHJva2VDb2xvcnx8KHQuc3Ryb2tlQ29sb3I9IkxpbmVQbG90Ij09PXQuZ2VvbWV0cnk/dC5jb2xvcjpuLnJnYih0LmNvbG9yKS5kYXJrZXIoKS50b1N0cmluZygpKSxoLmRhdGFbZV0uY29sb3I9dC5jb2xvcixoLmRhdGFbZV0uc3Ryb2tlQ29sb3I9dC5zdHJva2VDb2xvcixoLmRhdGFbZV0uc3Ryb2tlRGFzaD10LnN0cm9rZURhc2gsaC5kYXRhW2VdLnN0cm9rZVNpemU9dC5zdHJva2VTaXplfSk7dmFyIHA9Yy5maWx0ZXIoZnVuY3Rpb24odCxlKXt2YXIgcj10LnZpc2libGU7cmV0dXJuIHZvaWQgMD09PXJ8fCEwPT09cn0pLG09ITEsdj1wLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBtPW18fHZvaWQgMCE9PXQuZ3JvdXBJZCx0fSk7aWYobSl7dmFyIGc9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuZ3JvdXBJZD90Lmdyb3VwSWQ6InVuc3RhY2tlZCJ9KS5lbnRyaWVzKHYpLHk9W10sYj1nLm1hcChmdW5jdGlvbih0LGUpe2lmKCJ1bnN0YWNrZWQiPT09dC5rZXkpcmV0dXJuIHQudmFsdWVzO3ZhciByPXQudmFsdWVzWzBdLnIubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIDB9KTtyZXR1cm4gdC52YWx1ZXMuZm9yRWFjaChmdW5jdGlvbih0LGUsbil7dC55U3RhY2s9W3JdLHkucHVzaChyKSxyPXMudXRpbC5zdW1BcnJheXModC5yLHIpfSksdC52YWx1ZXN9KTtwPW4ubWVyZ2UoYil9cC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dC50PUFycmF5LmlzQXJyYXkodC50WzBdKT90LnQ6W3QudF0sdC5yPUFycmF5LmlzQXJyYXkodC5yWzBdKT90LnI6W3Qucl19KTt2YXIgeD1NYXRoLm1pbihmLndpZHRoLWYubWFyZ2luLmxlZnQtZi5tYXJnaW4ucmlnaHQsZi5oZWlnaHQtZi5tYXJnaW4udG9wLWYubWFyZ2luLmJvdHRvbSkvMjt4PU1hdGgubWF4KDEwLHgpO3ZhciBfLHc9W2YubWFyZ2luLmxlZnQreCxmLm1hcmdpbi50b3AreF07aWYobSl7Xz1bMCxuLm1heChzLnV0aWwuc3VtQXJyYXlzKHMudXRpbC5hcnJheUxhc3QocCkuclswXSxzLnV0aWwuYXJyYXlMYXN0KHkpKSldfWVsc2UgXz1uLmV4dGVudChzLnV0aWwuZmxhdHRlbkFycmF5KHAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucn0pKSk7Zi5yYWRpYWxBeGlzLmRvbWFpbiE9cy5EQVRBRVhURU5UJiYoX1swXT0wKSxpPW4uc2NhbGUubGluZWFyKCkuZG9tYWluKGYucmFkaWFsQXhpcy5kb21haW4hPXMuREFUQUVYVEVOVCYmZi5yYWRpYWxBeGlzLmRvbWFpbj9mLnJhZGlhbEF4aXMuZG9tYWluOl8pLnJhbmdlKFswLHhdKSxoLmxheW91dC5yYWRpYWxBeGlzLmRvbWFpbj1pLmRvbWFpbigpO3ZhciBNLGs9cy51dGlsLmZsYXR0ZW5BcnJheShwLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR9KSksQT0ic3RyaW5nIj09dHlwZW9mIGtbMF07QSYmKGs9cy51dGlsLmRlZHVwbGljYXRlKGspLE09ay5zbGljZSgpLGs9bi5yYW5nZShrLmxlbmd0aCkscD1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXQ7cmV0dXJuIHQudD1ba10sbSYmKHIueVN0YWNrPXQueVN0YWNrKSxyfSkpO3ZhciBUPXAuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIkxpbmVQbG90Ij09PXQuZ2VvbWV0cnl8fCJEb3RQbG90Ij09PXQuZ2VvbWV0cnl9KS5sZW5ndGg9PT1wLmxlbmd0aCxTPW51bGw9PT1mLm5lZWRzRW5kU3BhY2luZz9BfHwhVDpmLm5lZWRzRW5kU3BhY2luZyxFPWYuYW5ndWxhckF4aXMuZG9tYWluJiZmLmFuZ3VsYXJBeGlzLmRvbWFpbiE9cy5EQVRBRVhURU5UJiYhQSYmZi5hbmd1bGFyQXhpcy5kb21haW5bMF0+PTAsTD1FP2YuYW5ndWxhckF4aXMuZG9tYWluOm4uZXh0ZW50KGspLEM9TWF0aC5hYnMoa1sxXS1rWzBdKTtUJiYhQSYmKEM9MCk7dmFyIHo9TC5zbGljZSgpO1MmJkEmJih6WzFdKz1DKTt2YXIgST1mLmFuZ3VsYXJBeGlzLnRpY2tzQ291bnR8fDQ7ST44JiYoST1JLyhJLzgpK0klOCksZi5hbmd1bGFyQXhpcy50aWNrc1N0ZXAmJihJPSh6WzFdLXpbMF0pL0kpO3ZhciBEPWYuYW5ndWxhckF4aXMudGlja3NTdGVwfHwoelsxXS16WzBdKS8oSSooZi5taW5vclRpY2tzKzEpKTtNJiYoRD1NYXRoLm1heChNYXRoLnJvdW5kKEQpLDEpKSx6WzJdfHwoelsyXT1EKTt2YXIgUD1uLnJhbmdlLmFwcGx5KHRoaXMseik7aWYoUD1QLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBwYXJzZUZsb2F0KHQudG9QcmVjaXNpb24oMTIpKX0pLGw9bi5zY2FsZS5saW5lYXIoKS5kb21haW4oei5zbGljZSgwLDIpKS5yYW5nZSgiY2xvY2t3aXNlIj09PWYuZGlyZWN0aW9uP1swLDM2MF06WzM2MCwwXSksaC5sYXlvdXQuYW5ndWxhckF4aXMuZG9tYWluPWwuZG9tYWluKCksaC5sYXlvdXQuYW5ndWxhckF4aXMuZW5kUGFkZGluZz1TP0M6MCx2b2lkIDA9PT0oZT1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoInN2Zy5jaGFydC1yb290IikpfHxlLmVtcHR5KCkpe3ZhciBPPShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoIjxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyBjbGFzcz0nY2hhcnQtcm9vdCc+JyArICc8ZyBjbGFzcz0nb3V0ZXItZ3JvdXAnPicgKyAnPGcgY2xhc3M9J2NoYXJ0LWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J2JhY2tncm91bmQtY2lyY2xlJz48L2NpcmNsZT4nICsgJzxnIGNsYXNzPSdnZW9tZXRyeS1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3JhZGlhbCBheGlzLWdyb3VwJz4nICsgJzxjaXJjbGUgY2xhc3M9J291dHNpZGUtY2lyY2xlJz48L2NpcmNsZT4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdhbmd1bGFyIGF4aXMtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSdndWlkZXMtZ3JvdXAnPjxsaW5lPjwvbGluZT48Y2lyY2xlIHI9JzAnPjwvY2lyY2xlPjwvZz4nICsgJzwvZz4nICsgJzxnIGNsYXNzPSdsZWdlbmQtZ3JvdXAnPjwvZz4nICsgJzxnIGNsYXNzPSd0b29sdGlwcy1ncm91cCc+PC9nPicgKyAnPGcgY2xhc3M9J3RpdGxlLWdyb3VwJz48dGV4dD48L3RleHQ+PC9nPicgKyAnPC9nPicgKyAnPC9zdmc+IiwiYXBwbGljYXRpb24veG1sIiksUj10aGlzLmFwcGVuZENoaWxkKHRoaXMub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKE8uZG9jdW1lbnRFbGVtZW50LCEwKSk7ZT1uLnNlbGVjdChSKX1lLnNlbGVjdCgiLmd1aWRlcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pLGUuc2VsZWN0KCIuYW5ndWxhci5heGlzLWdyb3VwIikuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSksZS5zZWxlY3QoIi5yYWRpYWwuYXhpcy1ncm91cCIpLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJub25lIn0pO3ZhciBGLGo9ZS5zZWxlY3QoIi5jaGFydC1ncm91cCIpLE49e2ZpbGw6Im5vbmUiLHN0cm9rZTpmLnRpY2tDb2xvcn0sQj17ImZvbnQtc2l6ZSI6Zi5mb250LnNpemUsImZvbnQtZmFtaWx5IjpmLmZvbnQuZmFtaWx5LGZpbGw6Zi5mb250LmNvbG9yLCJ0ZXh0LXNoYWRvdyI6WyItMXB4IDBweCIsIjFweCAtMXB4IiwiLTFweCAxcHgiLCIxcHggMXB4Il0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiAiK3QrIiAwICIrZi5mb250Lm91dGxpbmVDb2xvcn0pLmpvaW4oIiwiKX07aWYoZi5zaG93TGVnZW5kKXtGPWUuc2VsZWN0KCIubGVnZW5kLWdyb3VwIikuYXR0cih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUoIitbeCxmLm1hcmdpbi50b3BdKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KTt2YXIgVT1wLm1hcChmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIHIuc3ltYm9sPSJEb3RQbG90Ij09PXQuZ2VvbWV0cnk/dC5kb3RUeXBlfHwiY2lyY2xlIjoiTGluZVBsb3QiIT10Lmdlb21ldHJ5PyJzcXVhcmUiOiJsaW5lIixyLnZpc2libGVJbkxlZ2VuZD12b2lkIDA9PT10LnZpc2libGVJbkxlZ2VuZHx8dC52aXNpYmxlSW5MZWdlbmQsci5jb2xvcj0iTGluZVBsb3QiPT09dC5nZW9tZXRyeT90LnN0cm9rZUNvbG9yOnQuY29sb3Iscn0pO3MuTGVnZW5kKCkuY29uZmlnKHtkYXRhOnAubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubmFtZXx8IkVsZW1lbnQiK2V9KSxsZWdlbmRDb25maWc6YSh7fSxzLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkubGVnZW5kQ29uZmlnLHtjb250YWluZXI6RixlbGVtZW50czpVLHJldmVyc2VPcmRlcjpmLmxlZ2VuZC5yZXZlcnNlT3JkZXJ9KX0pKCk7dmFyIFY9Ri5ub2RlKCkuZ2V0QkJveCgpO3g9TWF0aC5taW4oZi53aWR0aC1WLndpZHRoLWYubWFyZ2luLmxlZnQtZi5tYXJnaW4ucmlnaHQsZi5oZWlnaHQtZi5tYXJnaW4udG9wLWYubWFyZ2luLmJvdHRvbSkvMix4PU1hdGgubWF4KDEwLHgpLHc9W2YubWFyZ2luLmxlZnQreCxmLm1hcmdpbi50b3AreF0saS5yYW5nZShbMCx4XSksaC5sYXlvdXQucmFkaWFsQXhpcy5kb21haW49aS5kb21haW4oKSxGLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1t3WzBdK3gsd1sxXS14XSsiKSIpfWVsc2UgRj1lLnNlbGVjdCgiLmxlZ2VuZC1ncm91cCIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pO2UuYXR0cih7d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHR9KS5zdHlsZSh7b3BhY2l0eTpmLm9wYWNpdHl9KSxqLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3crIikiKS5zdHlsZSh7Y3Vyc29yOiJjcm9zc2hhaXIifSk7dmFyIEg9WyhmLndpZHRoLShmLm1hcmdpbi5sZWZ0K2YubWFyZ2luLnJpZ2h0KzIqeCsoVj9WLndpZHRoOjApKSkvMiwoZi5oZWlnaHQtKGYubWFyZ2luLnRvcCtmLm1hcmdpbi5ib3R0b20rMip4KSkvMl07aWYoSFswXT1NYXRoLm1heCgwLEhbMF0pLEhbMV09TWF0aC5tYXgoMCxIWzFdKSxlLnNlbGVjdCgiLm91dGVyLWdyb3VwIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrSCsiKSIpLGYudGl0bGUpe3ZhciBxPWUuc2VsZWN0KCJnLnRpdGxlLWdyb3VwIHRleHQiKS5zdHlsZShCKS50ZXh0KGYudGl0bGUpLEc9cS5ub2RlKCkuZ2V0QkJveCgpO3EuYXR0cih7eDp3WzBdLUcud2lkdGgvMix5OndbMV0teC0yMH0pfXZhciBZPWUuc2VsZWN0KCIucmFkaWFsLmF4aXMtZ3JvdXAiKTtpZihmLnJhZGlhbEF4aXMuZ3JpZExpbmVzVmlzaWJsZSl7dmFyIFg9WS5zZWxlY3RBbGwoImNpcmNsZS5ncmlkLWNpcmNsZSIpLmRhdGEoaS50aWNrcyg1KSk7WC5lbnRlcigpLmFwcGVuZCgiY2lyY2xlIikuYXR0cih7Y2xhc3M6ImdyaWQtY2lyY2xlIn0pLnN0eWxlKE4pLFguYXR0cigiciIsaSksWC5leGl0KCkucmVtb3ZlKCl9WS5zZWxlY3QoImNpcmNsZS5vdXRzaWRlLWNpcmNsZSIpLmF0dHIoe3I6eH0pLnN0eWxlKE4pO3ZhciBXPWUuc2VsZWN0KCJjaXJjbGUuYmFja2dyb3VuZC1jaXJjbGUiKS5hdHRyKHtyOnh9KS5zdHlsZSh7ZmlsbDpmLmJhY2tncm91bmRDb2xvcixzdHJva2U6Zi5zdHJva2V9KTtpZihmLnJhZGlhbEF4aXMudmlzaWJsZSl7dmFyIFo9bi5zdmcuYXhpcygpLnNjYWxlKGkpLnRpY2tzKDUpLnRpY2tTaXplKDUpO1kuY2FsbChaKS5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK2YucmFkaWFsQXhpcy5vcmllbnRhdGlvbisiKSJ9KSxZLnNlbGVjdEFsbCgiLmRvbWFpbiIpLnN0eWxlKE4pLFkuc2VsZWN0QWxsKCJnPnRleHQiKS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudGV4dENvbnRlbnQrZi5yYWRpYWxBeGlzLnRpY2tzU3VmZml4fSkuc3R5bGUoQikuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6InN0YXJ0In0pLmF0dHIoe3g6MCx5OjAsZHg6MCxkeTowLHRyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJob3Jpem9udGFsIj09PWYucmFkaWFsQXhpcy50aWNrT3JpZW50YXRpb24/InJvdGF0ZSgiKy1mLnJhZGlhbEF4aXMub3JpZW50YXRpb24rIikgdHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIjoidHJhbnNsYXRlKCIrWzAsQlsiZm9udC1zaXplIl1dKyIpIn19KSxZLnNlbGVjdEFsbCgiZz5saW5lIikuc3R5bGUoe3N0cm9rZToiYmxhY2sifSl9dmFyIEo9ZS5zZWxlY3QoIi5hbmd1bGFyLmF4aXMtZ3JvdXAiKS5zZWxlY3RBbGwoImcuYW5ndWxhci10aWNrIikuZGF0YShQKSxLPUouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyLXRpY2siLCEwKTtKLmF0dHIoe3RyYW5zZm9ybTpmdW5jdGlvbih0LGUpe3JldHVybiJyb3RhdGUoIit1KHQsZSkrIikifX0pLnN0eWxlKHtkaXNwbGF5OmYuYW5ndWxhckF4aXMudmlzaWJsZT8iYmxvY2siOiJub25lIn0pLEouZXhpdCgpLnJlbW92ZSgpLEsuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3JpZC1saW5lIiwhMCkuY2xhc3NlZCgibWFqb3IiLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKT09MH0pLmNsYXNzZWQoIm1pbm9yIixmdW5jdGlvbih0LGUpe3JldHVybiEoZSUoZi5taW5vclRpY2tzKzEpPT0wKX0pLnN0eWxlKE4pLEsuc2VsZWN0QWxsKCIubWlub3IiKS5zdHlsZSh7c3Ryb2tlOmYubWlub3JUaWNrQ29sb3J9KSxKLnNlbGVjdCgibGluZS5ncmlkLWxpbmUiKS5hdHRyKHt4MTpmLnRpY2tMZW5ndGg/eC1mLnRpY2tMZW5ndGg6MCx4Mjp4fSkuc3R5bGUoe2Rpc3BsYXk6Zi5hbmd1bGFyQXhpcy5ncmlkTGluZXNWaXNpYmxlPyJibG9jayI6Im5vbmUifSksSy5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJheGlzLXRleHQiLCEwKS5zdHlsZShCKTt2YXIgUT1KLnNlbGVjdCgidGV4dC5heGlzLXRleHQiKS5hdHRyKHt4OngrZi5sYWJlbE9mZnNldCxkeTpvKyJlbSIsdHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dSh0LGUpLG49eCtmLmxhYmVsT2Zmc2V0LGk9Zi5hbmd1bGFyQXhpcy50aWNrT3JpZW50YXRpb247cmV0dXJuImhvcml6b250YWwiPT1pPyJyb3RhdGUoIistcisiICIrbisiIDApIjoicmFkaWFsIj09aT9yPDI3MCYmcj45MD8icm90YXRlKDE4MCAiK24rIiAwKSI6bnVsbDoicm90YXRlKCIrKHI8PTE4MCYmcj4wPy05MDo5MCkrIiAiK24rIiAwKSJ9fSkuc3R5bGUoeyJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsZGlzcGxheTpmLmFuZ3VsYXJBeGlzLmxhYmVsc1Zpc2libGU/ImJsb2NrIjoibm9uZSJ9KS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD8iIjpNP01bdF0rZi5hbmd1bGFyQXhpcy50aWNrc1N1ZmZpeDp0K2YuYW5ndWxhckF4aXMudGlja3NTdWZmaXh9KS5zdHlsZShCKTtmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyYmUS50ZXh0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUlKGYubWlub3JUaWNrcysxKSE9MD8iIjpmLmFuZ3VsYXJBeGlzLnJld3JpdGVUaWNrcyh0aGlzLnRleHRDb250ZW50LGUpfSk7dmFyICQ9bi5tYXgoai5zZWxlY3RBbGwoIi5hbmd1bGFyLXRpY2sgdGV4dCIpWzBdLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LmdldENUTSgpLmUrdC5nZXRCQm94KCkud2lkdGh9KSk7Ri5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1t4KyQsZi5tYXJnaW4udG9wXSsiKSJ9KTt2YXIgdHQ9ZS5zZWxlY3QoImcuZ2VvbWV0cnktZ3JvdXAiKS5zZWxlY3RBbGwoImciKS5zaXplKCk+MCxldD1lLnNlbGVjdCgiZy5nZW9tZXRyeS1ncm91cCIpLnNlbGVjdEFsbCgiZy5nZW9tZXRyeSIpLmRhdGEocCk7aWYoZXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKHtjbGFzczpmdW5jdGlvbih0LGUpe3JldHVybiJnZW9tZXRyeSBnZW9tZXRyeSIrZX19KSxldC5leGl0KCkucmVtb3ZlKCkscFswXXx8dHQpe3ZhciBydD1bXTtwLmZvckVhY2goZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyLnJhZGlhbFNjYWxlPWksci5hbmd1bGFyU2NhbGU9bCxyLmNvbnRhaW5lcj1ldC5maWx0ZXIoZnVuY3Rpb24odCxyKXtyZXR1cm4gcj09ZX0pLHIuZ2VvbWV0cnk9dC5nZW9tZXRyeSxyLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24sci5kaXJlY3Rpb249Zi5kaXJlY3Rpb24sci5pbmRleD1lLHJ0LnB1c2goe2RhdGE6dCxnZW9tZXRyeUNvbmZpZzpyfSl9KTt2YXIgbnQ9bi5uZXN0KCkua2V5KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuZGF0YS5ncm91cElkfHwidW5zdGFja2VkIn0pLmVudHJpZXMocnQpLGl0PVtdO250LmZvckVhY2goZnVuY3Rpb24odCxlKXsidW5zdGFja2VkIj09PXQua2V5P2l0PWl0LmNvbmNhdCh0LnZhbHVlcy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm5bdF19KSk6aXQucHVzaCh0LnZhbHVlcyl9KSxpdC5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIHI7cj1BcnJheS5pc0FycmF5KHQpP3RbMF0uZ2VvbWV0cnlDb25maWcuZ2VvbWV0cnk6dC5nZW9tZXRyeUNvbmZpZy5nZW9tZXRyeTt2YXIgbj10Lm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBhKHNbcl0uZGVmYXVsdENvbmZpZygpLHQpfSk7c1tyXSgpLmNvbmZpZyhuKSgpfSl9dmFyIGF0LG90LHN0PWUuc2VsZWN0KCIuZ3VpZGVzLWdyb3VwIiksbHQ9ZS5zZWxlY3QoIi50b29sdGlwcy1ncm91cCIpLHV0PXMudG9vbHRpcFBhbmVsKCkuY29uZmlnKHtjb250YWluZXI6bHQsZm9udFNpemU6OH0pKCksY3Q9cy50b29sdGlwUGFuZWwoKS5jb25maWcoe2NvbnRhaW5lcjpsdCxmb250U2l6ZTo4fSkoKSxodD1zLnRvb2x0aXBQYW5lbCgpLmNvbmZpZyh7Y29udGFpbmVyOmx0LGhhc1RpY2s6ITB9KSgpO2lmKCFBKXt2YXIgZnQ9c3Quc2VsZWN0KCJsaW5lIikuYXR0cih7eDE6MCx5MTowLHkyOjB9KS5zdHlsZSh7c3Ryb2tlOiJncmV5IiwicG9pbnRlci1ldmVudHMiOiJub25lIn0pO2oub24oIm1vdXNlbW92ZS5hbmd1bGFyLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5nZXRNb3VzZVBvcyhXKS5hbmdsZTtmdC5hdHRyKHt4MjoteCx0cmFuc2Zvcm06InJvdGF0ZSgiK3IrIikifSkuc3R5bGUoe29wYWNpdHk6LjV9KTt2YXIgbj0ocisxODArMzYwLWYub3JpZW50YXRpb24pJTM2MDthdD1sLmludmVydChuKTt2YXIgaT1zLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHgrMTIscisxODApO3V0LnRleHQocy51dGlsLnJvdW5kKGF0KSkubW92ZShbaVswXSt3WzBdLGlbMV0rd1sxXV0pfSkub24oIm1vdXNlb3V0LmFuZ3VsYXItZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7c3Quc2VsZWN0KCJsaW5lIikuc3R5bGUoe29wYWNpdHk6MH0pfSl9dmFyIGR0PXN0LnNlbGVjdCgiY2lyY2xlIikuc3R5bGUoe3N0cm9rZToiZ3JleSIsZmlsbDoibm9uZSJ9KTtqLm9uKCJtb3VzZW1vdmUucmFkaWFsLWd1aWRlIixmdW5jdGlvbih0LGUpe3ZhciByPXMudXRpbC5nZXRNb3VzZVBvcyhXKS5yYWRpdXM7ZHQuYXR0cih7cjpyfSkuc3R5bGUoe29wYWNpdHk6LjV9KSxvdD1pLmludmVydChzLnV0aWwuZ2V0TW91c2VQb3MoVykucmFkaXVzKTt2YXIgbj1zLnV0aWwuY29udmVydFRvQ2FydGVzaWFuKHIsZi5yYWRpYWxBeGlzLm9yaWVudGF0aW9uKTtjdC50ZXh0KHMudXRpbC5yb3VuZChvdCkpLm1vdmUoW25bMF0rd1swXSxuWzFdK3dbMV1dKX0pLm9uKCJtb3VzZW91dC5yYWRpYWwtZ3VpZGUiLGZ1bmN0aW9uKHQsZSl7ZHQuc3R5bGUoe29wYWNpdHk6MH0pLGh0LmhpZGUoKSx1dC5oaWRlKCksY3QuaGlkZSgpfSksZS5zZWxlY3RBbGwoIi5nZW9tZXRyeS1ncm91cCAubWFyayIpLm9uKCJtb3VzZW92ZXIudG9vbHRpcCIsZnVuY3Rpb24odCxyKXt2YXIgaT1uLnNlbGVjdCh0aGlzKSxhPWkuc3R5bGUoImZpbGwiKSxvPSJibGFjayIsbD1pLnN0eWxlKCJvcGFjaXR5Iil8fDE7aWYoaS5hdHRyKHsiZGF0YS1vcGFjaXR5IjpsfSksIm5vbmUiIT1hKXtpLmF0dHIoeyJkYXRhLWZpbGwiOmF9KSxvPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7ZmlsbDpvLG9wYWNpdHk6MX0pO3ZhciB1PXt0OnMudXRpbC5yb3VuZCh0WzBdKSxyOnMudXRpbC5yb3VuZCh0WzFdKX07QSYmKHUudD1NW3RbMF1dKTt2YXIgYz0idDogIit1LnQrIiwgcjogIit1LnIsaD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1baC5sZWZ0K2gud2lkdGgvMi1IWzBdLWYubGVmdCxoLnRvcCtoLmhlaWdodC8yLUhbMV0tZi50b3BdO2h0LmNvbmZpZyh7Y29sb3I6b30pLnRleHQoYyksaHQubW92ZShkKX1lbHNlIGE9aS5zdHlsZSgic3Ryb2tlIiksaS5hdHRyKHsiZGF0YS1zdHJva2UiOmF9KSxvPW4uaHNsKGEpLmRhcmtlcigpLnRvU3RyaW5nKCksaS5zdHlsZSh7c3Ryb2tlOm8sb3BhY2l0eToxfSl9KS5vbigibW91c2Vtb3ZlLnRvb2x0aXAiLGZ1bmN0aW9uKHQsZSl7aWYoMCE9bi5ldmVudC53aGljaClyZXR1cm4hMTtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkYXRhLWZpbGwiKSYmaHQuc2hvdygpfSkub24oIm1vdXNlb3V0LnRvb2x0aXAiLGZ1bmN0aW9uKHQsZSl7aHQuaGlkZSgpO3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ci5hdHRyKCJkYXRhLWZpbGwiKTtpP3Iuc3R5bGUoe2ZpbGw6aSxvcGFjaXR5OnIuYXR0cigiZGF0YS1vcGFjaXR5Iil9KTpyLnN0eWxlKHtzdHJva2U6ci5hdHRyKCJkYXRhLXN0cm9rZSIpLG9wYWNpdHk6ci5hdHRyKCJkYXRhLW9wYWNpdHkiKX0pfSl9KSxkfXZhciBlLHIsaSxsLHU9e2RhdGE6W10sbGF5b3V0Ont9fSxjPXt9LGg9e30sZj1uLmRpc3BhdGNoKCJob3ZlciIpLGQ9e307cmV0dXJuIGQucmVuZGVyPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLHRoaXN9LGQuY29uZmlnPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB1O3ZhciBlPXMudXRpbC5jbG9uZUpzb24odCk7cmV0dXJuIGUuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dS5kYXRhW2VdfHwodS5kYXRhW2VdPXt9KSxhKHUuZGF0YVtlXSxzLkF4aXMuZGVmYXVsdENvbmZpZygpLmRhdGFbMF0pLGEodS5kYXRhW2VdLHQpfSksYSh1LmxheW91dCxzLkF4aXMuZGVmYXVsdENvbmZpZygpLmxheW91dCksYSh1LmxheW91dCxlLmxheW91dCksdGhpc30sZC5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LGQuZ2V0aW5wdXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gY30sZC5yYWRpYWxTY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gaX0sZC5hbmd1bGFyU2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGx9LGQuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4ucmViaW5kKGQsZiwib24iKSxkfSxzLkF4aXMuZGVmYXVsdENvbmZpZz1mdW5jdGlvbih0LGUpe3JldHVybntkYXRhOlt7dDpbMSwyLDMsNF0scjpbMTAsMTEsMTIsMTNdLG5hbWU6IkxpbmUxIixnZW9tZXRyeToiTGluZVBsb3QiLGNvbG9yOm51bGwsc3Ryb2tlRGFzaDoic29saWQiLHN0cm9rZUNvbG9yOm51bGwsc3Ryb2tlU2l6ZToiMSIsdmlzaWJsZUluTGVnZW5kOiEwLG9wYWNpdHk6MX1dLGxheW91dDp7ZGVmYXVsdENvbG9yUmFuZ2U6bi5zY2FsZS5jYXRlZ29yeTEwKCkucmFuZ2UoKSx0aXRsZTpudWxsLGhlaWdodDo0NTAsd2lkdGg6NTAwLG1hcmdpbjp7dG9wOjQwLHJpZ2h0OjQwLGJvdHRvbTo0MCxsZWZ0OjQwfSxmb250OntzaXplOjEyLGNvbG9yOiJncmF5IixvdXRsaW5lQ29sb3I6IndoaXRlIixmYW1pbHk6IlRhaG9tYSwgc2Fucy1zZXJpZiJ9LGRpcmVjdGlvbjoiY2xvY2t3aXNlIixvcmllbnRhdGlvbjowLGxhYmVsT2Zmc2V0OjEwLHJhZGlhbEF4aXM6e2RvbWFpbjpudWxsLG9yaWVudGF0aW9uOi00NSx0aWNrc1N1ZmZpeDoiIix2aXNpYmxlOiEwLGdyaWRMaW5lc1Zpc2libGU6ITAsdGlja09yaWVudGF0aW9uOiJob3Jpem9udGFsIixyZXdyaXRlVGlja3M6bnVsbH0sYW5ndWxhckF4aXM6e2RvbWFpbjpbMCwzNjBdLHRpY2tzU3VmZml4OiIiLHZpc2libGU6ITAsZ3JpZExpbmVzVmlzaWJsZTohMCxsYWJlbHNWaXNpYmxlOiEwLHRpY2tPcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmV3cml0ZVRpY2tzOm51bGwsdGlja3NDb3VudDpudWxsLHRpY2tzU3RlcDpudWxsfSxtaW5vclRpY2tzOjAsdGlja0xlbmd0aDpudWxsLHRpY2tDb2xvcjoic2lsdmVyIixtaW5vclRpY2tDb2xvcjoiI2VlZSIsYmFja2dyb3VuZENvbG9yOiJub25lIixuZWVkc0VuZFNwYWNpbmc6bnVsbCxzaG93TGVnZW5kOiEwLGxlZ2VuZDp7cmV2ZXJzZU9yZGVyOiExfSxvcGFjaXR5OjF9fX0scy51dGlsPXt9LHMuREFUQUVYVEVOVD0iZGF0YUV4dGVudCIscy5BUkVBPSJBcmVhQ2hhcnQiLHMuTElORT0iTGluZVBsb3QiLHMuRE9UPSJEb3RQbG90IixzLkJBUj0iQmFyQ2hhcnQiLHMudXRpbC5fb3ZlcnJpZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdClyIGluIGUmJihlW3JdPXRbcl0pfSxzLnV0aWwuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0scy51dGlsLl9ybmRTbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gMipNYXRoLnJhbmRvbSgpLTErKDIqTWF0aC5yYW5kb20oKS0xKSsoMipNYXRoLnJhbmRvbSgpLTEpfSxzLnV0aWwuZGF0YUZyb21FcXVhdGlvbjI9ZnVuY3Rpb24odCxlKXt2YXIgcj1lfHw2O3JldHVybiBuLnJhbmdlKDAsMzYwK3IscikubWFwKGZ1bmN0aW9uKGUscil7dmFyIG49ZSpNYXRoLlBJLzE4MDtyZXR1cm5bZSx0KG4pXX0pfSxzLnV0aWwuZGF0YUZyb21FcXVhdGlvbj1mdW5jdGlvbih0LGUscil7dmFyIGk9ZXx8NixhPVtdLG89W107bi5yYW5nZSgwLDM2MCtpLGkpLmZvckVhY2goZnVuY3Rpb24oZSxyKXt2YXIgbj1lKk1hdGguUEkvMTgwLGk9dChuKTthLnB1c2goZSksby5wdXNoKGkpfSk7dmFyIHM9e3Q6YSxyOm99O3JldHVybiByJiYocy5uYW1lPXIpLHN9LHMudXRpbC5lbnN1cmVBcnJheT1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQpcmV0dXJuIG51bGw7dmFyIHI9W10uY29uY2F0KHQpO3JldHVybiBuLnJhbmdlKGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiByW2VdfHxyWzBdfSl9LHMudXRpbC5maWxsQXJyYXlzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKGUsbil7dFtlXT1zLnV0aWwuZW5zdXJlQXJyYXkodFtlXSxyKX0pLHR9LHMudXRpbC5jbG9uZUpzb249ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpfSxzLnV0aWwudmFsaWRhdGVLZXlzPWZ1bmN0aW9uKHQsZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KCIuIikpO3ZhciByPWUuc2hpZnQoKTtyZXR1cm4gdFtyXSYmKCFlLmxlbmd0aHx8b2JqSGFzS2V5cyh0W3JdLGUpKX0scy51dGlsLnN1bUFycmF5cz1mdW5jdGlvbih0LGUpe3JldHVybiBuLnppcCh0LGUpLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBuLnN1bSh0KX0pfSxzLnV0aWwuYXJyYXlMYXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0W3QubGVuZ3RoLTFdfSxzLnV0aWwuYXJyYXlFcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCwxKTtyLS0gPj0wJiZ0W3JdPT09ZVtyXTspO3JldHVybi0yPT09cn0scy51dGlsLmZsYXR0ZW5BcnJheT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W107IXMudXRpbC5hcnJheUVxdWFsKGUsdCk7KWU9dCx0PVtdLmNvbmNhdC5hcHBseShbXSx0KTtyZXR1cm4gdH0scy51dGlsLmRlZHVwbGljYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0LGUscil7cmV0dXJuIHIuaW5kZXhPZih0KT09ZX0pfSxzLnV0aWwuY29udmVydFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpNYXRoLlBJLzE4MDtyZXR1cm5bdCpNYXRoLmNvcyhyKSx0Kk1hdGguc2luKHIpXX0scy51dGlsLnJvdW5kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZXx8MixuPU1hdGgucG93KDEwLHIpO3JldHVybiBNYXRoLnJvdW5kKHQqbikvbn0scy51dGlsLmdldE1vdXNlUG9zPWZ1bmN0aW9uKHQpe3ZhciBlPW4ubW91c2UodC5ub2RlKCkpLHI9ZVswXSxpPWVbMV0sYT17fTtyZXR1cm4gYS54PXIsYS55PWksYS5wb3M9ZSxhLmFuZ2xlPTE4MCooTWF0aC5hdGFuMihpLHIpK01hdGguUEkpL01hdGguUEksYS5yYWRpdXM9TWF0aC5zcXJ0KHIqcitpKmkpLGF9LHMudXRpbC5kdXBsaWNhdGVzQ291bnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9e30sbj17fSxpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKWU9dFtpXSxlIGluIHI/KHJbZV0rKyxuW2VdPXJbZV0pOnJbZV09MTtyZXR1cm4gbn0scy51dGlsLmR1cGxpY2F0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHMudXRpbC5kdXBsaWNhdGVzQ291bnQodCkpfSxzLnV0aWwudHJhbnNsYXRvcj1mdW5jdGlvbih0LGUscixuKXtpZihuKXt2YXIgaT1yLnNsaWNlKCk7cj1lLGU9aX12YXIgYT1lLnJlZHVjZShmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PXQpcmV0dXJuIHRbZV19LHQpO3ZvaWQgMCE9PWEmJihlLnJlZHVjZShmdW5jdGlvbih0LHIsbil7aWYodm9pZCAwIT09dClyZXR1cm4gbj09PWUubGVuZ3RoLTEmJmRlbGV0ZSB0W3JdLHRbcl19LHQpLHIucmVkdWNlKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09dFtlXSYmKHRbZV09e30pLG49PT1yLmxlbmd0aC0xJiYodFtlXT1hKSx0W2VdfSx0KSl9LHMuUG9seUNoYXJ0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciB0PWVbMF0uZ2VvbWV0cnlDb25maWcscj10LmNvbnRhaW5lcjsic3RyaW5nIj09dHlwZW9mIHImJihyPW4uc2VsZWN0KHIpKSxyLmRhdHVtKGUpLmVhY2goZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBhKGUscil7cmV0dXJue3I6dC5yYWRpYWxTY2FsZShlWzFdKSx0Oih0LmFuZ3VsYXJTY2FsZShlWzBdKSt0Lm9yaWVudGF0aW9uKSpNYXRoLlBJLzE4MH19ZnVuY3Rpb24gbyh0KXtyZXR1cm57eDp0LnIqTWF0aC5jb3ModC50KSx5OnQucipNYXRoLnNpbih0LnQpfX12YXIgcz0hIWVbMF0uZGF0YS55U3RhY2ssbD1lLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBzP24uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdLHQuZGF0YS55U3RhY2tbMF0pOm4uemlwKHQuZGF0YS50WzBdLHQuZGF0YS5yWzBdKX0pLHU9dC5hbmd1bGFyU2NhbGUsYz10LnJhZGlhbFNjYWxlLmRvbWFpbigpWzBdLGg9e307aC5iYXI9ZnVuY3Rpb24ocixpLGEpe3ZhciBvPWVbYV0uZGF0YSxzPXQucmFkaWFsU2NhbGUoclsxXSktdC5yYWRpYWxTY2FsZSgwKSxsPXQucmFkaWFsU2NhbGUoclsyXXx8MCksYz1vLmJhcldpZHRoO24uc2VsZWN0KHRoaXMpLmF0dHIoe2NsYXNzOiJtYXJrIGJhciIsZDoiTSIrW1tzK2wsLWMvMl0sW3MrbCxjLzJdLFtsLGMvMl0sW2wsLWMvMl1dLmpvaW4oIkwiKSsiWiIsdHJhbnNmb3JtOmZ1bmN0aW9uKGUscil7cmV0dXJuInJvdGF0ZSgiKyh0Lm9yaWVudGF0aW9uK3UoZVswXSkpKyIpIn19KX0saC5kb3Q9ZnVuY3Rpb24odCxyLGkpe3ZhciBzPXRbMl0/W3RbMF0sdFsxXSt0WzJdXTp0LGw9bi5zdmcuc3ltYm9sKCkuc2l6ZShlW2ldLmRhdGEuZG90U2l6ZSkudHlwZShlW2ldLmRhdGEuZG90VHlwZSkodCxyKTtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBkb3QiLGQ6bCx0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgcj1vKGEocykpO3JldHVybiJ0cmFuc2xhdGUoIitbci54LHIueV0rIikifX0pfTt2YXIgZj1uLnN2Zy5saW5lLnJhZGlhbCgpLmludGVycG9sYXRlKGVbMF0uZGF0YS5saW5lSW50ZXJwb2xhdGlvbikucmFkaXVzKGZ1bmN0aW9uKGUpe3JldHVybiB0LnJhZGlhbFNjYWxlKGVbMV0pfSkuYW5nbGUoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYW5ndWxhclNjYWxlKGVbMF0pKk1hdGguUEkvMTgwfSk7aC5saW5lPWZ1bmN0aW9uKHIsaSxhKXt2YXIgbz1yWzJdP2xbYV0ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sdFsxXSt0WzJdXX0pOmxbYV07aWYobi5zZWxlY3QodGhpcykuZWFjaChoLmRvdCkuc3R5bGUoe29wYWNpdHk6ZnVuY3Rpb24odCxyKXtyZXR1cm4rZVthXS5kYXRhLmRvdFZpc2libGV9LGZpbGw6di5zdHJva2UocixpLGEpfSkuYXR0cih7Y2xhc3M6Im1hcmsgZG90In0pLCEoaT4wKSl7dmFyIHM9bi5zZWxlY3QodGhpcy5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInBhdGgubGluZSIpLmRhdGEoWzBdKTtzLmVudGVyKCkuaW5zZXJ0KCJwYXRoIikscy5hdHRyKHtjbGFzczoibGluZSIsZDpmKG8pLHRyYW5zZm9ybTpmdW5jdGlvbihlLHIpe3JldHVybiJyb3RhdGUoIisodC5vcmllbnRhdGlvbis5MCkrIikifSwicG9pbnRlci1ldmVudHMiOiJub25lIn0pLnN0eWxlKHtmaWxsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZmlsbChyLGksYSl9LCJmaWxsLW9wYWNpdHkiOjAsc3Ryb2tlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuc3Ryb2tlKHIsaSxhKX0sInN0cm9rZS13aWR0aCI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdlsic3Ryb2tlLXdpZHRoIl0ocixpLGEpfSwic3Ryb2tlLWRhc2hhcnJheSI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdlsic3Ryb2tlLWRhc2hhcnJheSJdKHIsaSxhKX0sb3BhY2l0eTpmdW5jdGlvbih0LGUpe3JldHVybiB2Lm9wYWNpdHkocixpLGEpfSxkaXNwbGF5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYuZGlzcGxheShyLGksYSl9fSl9fTt2YXIgZD10LmFuZ3VsYXJTY2FsZS5yYW5nZSgpLHA9TWF0aC5hYnMoZFsxXS1kWzBdKS9sWzBdLmxlbmd0aCpNYXRoLlBJLzE4MCxtPW4uc3ZnLmFyYygpLnN0YXJ0QW5nbGUoZnVuY3Rpb24odCl7cmV0dXJuLXAvMn0pLmVuZEFuZ2xlKGZ1bmN0aW9uKHQpe3JldHVybiBwLzJ9KS5pbm5lclJhZGl1cyhmdW5jdGlvbihlKXtyZXR1cm4gdC5yYWRpYWxTY2FsZShjKyhlWzJdfHwwKSl9KS5vdXRlclJhZGl1cyhmdW5jdGlvbihlKXtyZXR1cm4gdC5yYWRpYWxTY2FsZShjKyhlWzJdfHwwKSkrdC5yYWRpYWxTY2FsZShlWzFdKX0pO2guYXJjPWZ1bmN0aW9uKGUscixpKXtuLnNlbGVjdCh0aGlzKS5hdHRyKHtjbGFzczoibWFyayBhcmMiLGQ6bSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSxyKXtyZXR1cm4icm90YXRlKCIrKHQub3JpZW50YXRpb24rdShlWzBdKSs5MCkrIikifX0pfTt2YXIgdj17ZmlsbDpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGVbbl0uZGF0YS5jb2xvcn0sc3Ryb2tlOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLnN0cm9rZUNvbG9yfSwic3Ryb2tlLXdpZHRoIjpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGVbbl0uZGF0YS5zdHJva2VTaXplKyJweCJ9LCJzdHJva2UtZGFzaGFycmF5IjpmdW5jdGlvbih0LHIsbil7cmV0dXJuIGlbZVtuXS5kYXRhLnN0cm9rZURhc2hdfSxvcGFjaXR5OmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZVtuXS5kYXRhLm9wYWNpdHl9LGRpc3BsYXk6ZnVuY3Rpb24odCxyLG4pe3JldHVybiB2b2lkIDA9PT1lW25dLmRhdGEudmlzaWJsZXx8ZVtuXS5kYXRhLnZpc2libGU/ImJsb2NrIjoibm9uZSJ9fSxnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5sYXllciIpLmRhdGEobCk7Zy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoe2NsYXNzOiJsYXllciJ9KTt2YXIgeT1nLnNlbGVjdEFsbCgicGF0aC5tYXJrIikuZGF0YShmdW5jdGlvbih0LGUpe3JldHVybiB0fSk7eS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoe2NsYXNzOiJtYXJrIn0pLHkuc3R5bGUodikuZWFjaChoW3QuZ2VvbWV0cnlUeXBlXSkseS5leGl0KCkucmVtb3ZlKCksZy5leGl0KCkucmVtb3ZlKCl9KX12YXIgZT1bcy5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpXSxyPW4uZGlzcGF0Y2goImhvdmVyIiksaT17c29saWQ6Im5vbmUiLGRhc2g6WzUsMl0sZG90OlsyLDVdfTtyZXR1cm4gdC5jb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQuZm9yRWFjaChmdW5jdGlvbih0LHIpe2Vbcl18fChlW3JdPXt9KSxhKGVbcl0scy5Qb2x5Q2hhcnQuZGVmYXVsdENvbmZpZygpKSxhKGVbcl0sdCl9KSx0aGlzKTplfSx0LmdldENvbG9yU2NhbGU9ZnVuY3Rpb24oKXt9LG4ucmViaW5kKHQsciwib24iKSx0fSxzLlBvbHlDaGFydC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2RhdGE6e25hbWU6Imdlb20xIix0OltbMSwyLDMsNF1dLHI6W1sxLDIsMyw0XV0sZG90VHlwZToiY2lyY2xlIixkb3RTaXplOjY0LGRvdFZpc2libGU6ITEsYmFyV2lkdGg6MjAsY29sb3I6IiNmZmE1MDAiLHN0cm9rZVNpemU6MSxzdHJva2VDb2xvcjoic2lsdmVyIixzdHJva2VEYXNoOiJzb2xpZCIsb3BhY2l0eToxLGluZGV4OjAsdmlzaWJsZTohMCx2aXNpYmxlSW5MZWdlbmQ6ITB9LGdlb21ldHJ5Q29uZmlnOntnZW9tZXRyeToiTGluZVBsb3QiLGdlb21ldHJ5VHlwZToiYXJjIixkaXJlY3Rpb246ImNsb2Nrd2lzZSIsb3JpZW50YXRpb246MCxjb250YWluZXI6ImJvZHkiLHJhZGlhbFNjYWxlOm51bGwsYW5ndWxhclNjYWxlOm51bGwsY29sb3JTY2FsZTpuLnNjYWxlLmNhdGVnb3J5MjAoKX19fSxzLkJhckNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHMuUG9seUNoYXJ0KCl9LHMuQmFyQ2hhcnQuZGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybntnZW9tZXRyeUNvbmZpZzp7Z2VvbWV0cnlUeXBlOiJiYXIifX19LHMuQXJlYUNoYXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHMuUG9seUNoYXJ0KCl9LHMuQXJlYUNoYXJ0LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiYXJjIn19fSxzLkRvdFBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcy5Qb2x5Q2hhcnQoKX0scy5Eb3RQbG90LmRlZmF1bHRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57Z2VvbWV0cnlDb25maWc6e2dlb21ldHJ5VHlwZToiZG90Iixkb3RUeXBlOiJjaXJjbGUifX19LHMuTGluZVBsb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gcy5Qb2x5Q2hhcnQoKX0scy5MaW5lUGxvdC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue2dlb21ldHJ5Q29uZmlnOntnZW9tZXRyeVR5cGU6ImxpbmUifX19LHMuTGVnZW5kPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3ZhciByPWUubGVnZW5kQ29uZmlnLGk9ZS5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybltdLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24odCxuKXt2YXIgaT1hKHt9LHIuZWxlbWVudHNbZV0pO3JldHVybiBpLm5hbWU9dCxpLmNvbG9yPVtdLmNvbmNhdChyLmVsZW1lbnRzW2VdLmNvbG9yKVtuXSxpfSl9KSxvPW4ubWVyZ2UoaSk7bz1vLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiByLmVsZW1lbnRzW2VdJiYoci5lbGVtZW50c1tlXS52aXNpYmxlSW5MZWdlbmR8fHZvaWQgMD09PXIuZWxlbWVudHNbZV0udmlzaWJsZUluTGVnZW5kKX0pLHIucmV2ZXJzZU9yZGVyJiYobz1vLnJldmVyc2UoKSk7dmFyIHM9ci5jb250YWluZXI7KCJzdHJpbmciPT10eXBlb2Ygc3x8cy5ub2RlTmFtZSkmJihzPW4uc2VsZWN0KHMpKTt2YXIgbD1vLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LmNvbG9yfSksdT1yLmZvbnRTaXplLGM9bnVsbD09ci5pc0NvbnRpbnVvdXM/Im51bWJlciI9PXR5cGVvZiBvWzBdOnIuaXNDb250aW51b3VzLGg9Yz9yLmhlaWdodDp1Km8ubGVuZ3RoLGY9cy5jbGFzc2VkKCJsZWdlbmQtZ3JvdXAiLCEwKSxkPWYuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFswXSkscD1kLmVudGVyKCkuYXBwZW5kKCJzdmciKS5hdHRyKHt3aWR0aDozMDAsaGVpZ2h0OmgrdSx4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHZlcnNpb246IjEuMSJ9KTtwLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxlZ2VuZC1heGlzIiwhMCkscC5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmQtbWFya3MiLCEwKTt2YXIgbT1uLnJhbmdlKG8ubGVuZ3RoKSx2PW4uc2NhbGVbYz8ibGluZWFyIjoib3JkaW5hbCJdKCkuZG9tYWluKG0pLnJhbmdlKGwpLGc9bi5zY2FsZVtjPyJsaW5lYXIiOiJvcmRpbmFsIl0oKS5kb21haW4obSlbYz8icmFuZ2UiOiJyYW5nZVBvaW50cyJdKFswLGhdKSx5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MyplO3JldHVybiJsaW5lIj09PXQ/Ik0iK1tbLWUvMiwtZS8xMl0sW2UvMiwtZS8xMl0sW2UvMixlLzEyXSxbLWUvMixlLzEyXV0rIloiOi0xIT1uLnN2Zy5zeW1ib2xUeXBlcy5pbmRleE9mKHQpP24uc3ZnLnN5bWJvbCgpLnR5cGUodCkuc2l6ZShyKSgpOm4uc3ZnLnN5bWJvbCgpLnR5cGUoInNxdWFyZSIpLnNpemUocikoKX07aWYoYyl7dmFyIGI9ZC5zZWxlY3QoIi5sZWdlbmQtbWFya3MiKS5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImxpbmVhckdyYWRpZW50IikuYXR0cih7aWQ6ImdyYWQxIix4MToiMCUiLHkxOiIwJSIseDI6IjAlIix5MjoiMTAwJSJ9KS5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGwpO2IuZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxiLmF0dHIoe29mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiBlLyhsLmxlbmd0aC0xKSoxMDArIiUifX0pLnN0eWxlKHsic3RvcC1jb2xvciI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdH19KSxkLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkuYXR0cih7aGVpZ2h0OnIuaGVpZ2h0LHdpZHRoOnIuY29sb3JCYW5kV2lkdGgsZmlsbDoidXJsKCNncmFkMSkifSl9ZWxzZXt2YXIgeD1kLnNlbGVjdCgiLmxlZ2VuZC1tYXJrcyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQtbWFyayIpLmRhdGEobyk7eC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZC1tYXJrIiwhMCkseC5hdHRyKHt0cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKCIrW3UvMixnKGUpK3UvMl0rIikifSxkOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zeW1ib2w7cmV0dXJuIHkocix1KX0sZmlsbDpmdW5jdGlvbih0LGUpe3JldHVybiB2KGUpfX0pLHguZXhpdCgpLnJlbW92ZSgpfXZhciBfPW4uc3ZnLmF4aXMoKS5zY2FsZShnKS5vcmllbnQoInJpZ2h0Iiksdz1kLnNlbGVjdCgiZy5sZWdlbmQtYXhpcyIpLmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrW2M/ci5jb2xvckJhbmRXaWR0aDp1LHUvMl0rIikifSkuY2FsbChfKTtyZXR1cm4gdy5zZWxlY3RBbGwoIi5kb21haW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsc3Ryb2tlOiJub25lIn0pLHcuc2VsZWN0QWxsKCJsaW5lIikuc3R5bGUoe2ZpbGw6Im5vbmUiLHN0cm9rZTpjP3IudGV4dENvbG9yOiJub25lIn0pLHcuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoe2ZpbGw6ci50ZXh0Q29sb3IsImZvbnQtc2l6ZSI6ci5mb250U2l6ZX0pLnRleHQoZnVuY3Rpb24odCxlKXtyZXR1cm4gb1tlXS5uYW1lfSksdH12YXIgZT1zLkxlZ2VuZC5kZWZhdWx0Q29uZmlnKCkscj1uLmRpc3BhdGNoKCJob3ZlciIpO3JldHVybiB0LmNvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYShlLHQpLHRoaXMpOmV9LG4ucmViaW5kKHQsciwib24iKSx0fSxzLkxlZ2VuZC5kZWZhdWx0Q29uZmlnPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2RhdGE6WyJhIiwiYiIsImMiXSxsZWdlbmRDb25maWc6e2VsZW1lbnRzOlt7c3ltYm9sOiJsaW5lIixjb2xvcjoicmVkIn0se3N5bWJvbDoic3F1YXJlIixjb2xvcjoieWVsbG93In0se3N5bWJvbDoiZGlhbW9uZCIsY29sb3I6ImxpbWVncmVlbiJ9XSxoZWlnaHQ6MTUwLGNvbG9yQmFuZFdpZHRoOjMwLGZvbnRTaXplOjEyLGNvbnRhaW5lcjoiYm9keSIsaXNDb250aW51b3VzOm51bGwsdGV4dENvbG9yOiJncmV5IixyZXZlcnNlT3JkZXI6ITF9fX0scy50b29sdGlwUGFuZWw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsaT17Y29udGFpbmVyOm51bGwsaGFzVGljazohMSxmb250U2l6ZToxMixjb2xvcjoid2hpdGUiLHBhZGRpbmc6NX0sbz0idG9vbHRpcC0iK3MudG9vbHRpcFBhbmVsLnVpZCsrLGw9ZnVuY3Rpb24oKXt0PWkuY29udGFpbmVyLnNlbGVjdEFsbCgiZy4iK28pLmRhdGEoWzBdKTt2YXIgbj10LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChvLCEwKS5zdHlsZSh7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsZGlzcGxheToibm9uZSJ9KTtyZXR1cm4gcj1uLmFwcGVuZCgicGF0aCIpLnN0eWxlKHtmaWxsOiJ3aGl0ZSIsImZpbGwtb3BhY2l0eSI6Ljl9KS5hdHRyKHtkOiJNMCAwIn0pLGU9bi5hcHBlbmQoInRleHQiKS5hdHRyKHtkeDppLnBhZGRpbmcrMTAsZHk6LjMqK2kuZm9udFNpemV9KSxsfTtyZXR1cm4gbC50ZXh0PWZ1bmN0aW9uKGEpe3ZhciBvPW4uaHNsKGkuY29sb3IpLmwscz1vPj0uNT8iI2FhYSI6IndoaXRlIix1PW8+PS41PyJibGFjayI6IndoaXRlIixjPWF8fCIiO2Uuc3R5bGUoe2ZpbGw6dSwiZm9udC1zaXplIjppLmZvbnRTaXplKyJweCJ9KS50ZXh0KGMpO3ZhciBoPWkucGFkZGluZyxmPWUubm9kZSgpLmdldEJCb3goKSxkPXtmaWxsOmkuY29sb3Isc3Ryb2tlOnMsInN0cm9rZS13aWR0aCI6IjJweCJ9LHA9Zi53aWR0aCsyKmgrMTAsbT1mLmhlaWdodCsyKmg7cmV0dXJuIHIuYXR0cih7ZDoiTSIrW1sxMCwtbS8yXSxbMTAsLW0vNF0sW2kuaGFzVGljaz8wOjEwLDBdLFsxMCxtLzRdLFsxMCxtLzJdLFtwLG0vMl0sW3AsLW0vMl1dLmpvaW4oIkwiKSsiWiJ9KS5zdHlsZShkKSx0LmF0dHIoe3RyYW5zZm9ybToidHJhbnNsYXRlKCIrWzEwLC1tLzIrMipoXSsiKSJ9KSx0LnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxsfSxsLm1vdmU9ZnVuY3Rpb24oZSl7aWYodClyZXR1cm4gdC5hdHRyKHt0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1tlWzBdLGVbMV1dKyIpIn0pLnN0eWxlKHtkaXNwbGF5OiJibG9jayJ9KSxsfSxsLmhpZGU9ZnVuY3Rpb24oKXtpZih0KXJldHVybiB0LnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLGx9LGwuc2hvdz1mdW5jdGlvbigpe2lmKHQpcmV0dXJuIHQuc3R5bGUoe2Rpc3BsYXk6ImJsb2NrIn0pLGx9LGwuY29uZmlnPWZ1bmN0aW9uKHQpe3JldHVybiBhKGksdCksbH0sbH0scy50b29sdGlwUGFuZWwudWlkPTEscy5hZGFwdGVyPXt9LHMuYWRhcHRlci5wbG90bHk9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdC5jb252ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307aWYodC5kYXRhJiYoci5kYXRhPXQuZGF0YS5tYXAoZnVuY3Rpb24odCxyKXt2YXIgbj1hKHt9LHQpO3JldHVybltbbixbIm1hcmtlciIsImNvbG9yIl0sWyJjb2xvciJdXSxbbixbIm1hcmtlciIsIm9wYWNpdHkiXSxbIm9wYWNpdHkiXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwiY29sb3IiXSxbInN0cm9rZUNvbG9yIl1dLFtuLFsibWFya2VyIiwibGluZSIsImRhc2giXSxbInN0cm9rZURhc2giXV0sW24sWyJtYXJrZXIiLCJsaW5lIiwid2lkdGgiXSxbInN0cm9rZVNpemUiXV0sW24sWyJtYXJrZXIiLCJzeW1ib2wiXSxbImRvdFR5cGUiXV0sW24sWyJtYXJrZXIiLCJzaXplIl0sWyJkb3RTaXplIl1dLFtuLFsibWFya2VyIiwiYmFyV2lkdGgiXSxbImJhcldpZHRoIl1dLFtuLFsibGluZSIsImludGVycG9sYXRpb24iXSxbImxpbmVJbnRlcnBvbGF0aW9uIl1dLFtuLFsic2hvd2xlZ2VuZCJdLFsidmlzaWJsZUluTGVnZW5kIl1dXS5mb3JFYWNoKGZ1bmN0aW9uKHQscil7cy51dGlsLnRyYW5zbGF0b3IuYXBwbHkobnVsbCx0LmNvbmNhdChlKSl9KSxlfHxkZWxldGUgbi5tYXJrZXIsZSYmZGVsZXRlIG4uZ3JvdXBJZCxlPygiTGluZVBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIiwhMD09PW4uZG90VmlzaWJsZT8oZGVsZXRlIG4uZG90VmlzaWJsZSxuLm1vZGU9ImxpbmVzK21hcmtlcnMiKTpuLm1vZGU9ImxpbmVzIik6IkRvdFBsb3QiPT09bi5nZW9tZXRyeT8obi50eXBlPSJzY2F0dGVyIixuLm1vZGU9Im1hcmtlcnMiKToiQXJlYUNoYXJ0Ij09PW4uZ2VvbWV0cnk/bi50eXBlPSJhcmVhIjoiQmFyQ2hhcnQiPT09bi5nZW9tZXRyeSYmKG4udHlwZT0iYmFyIiksZGVsZXRlIG4uZ2VvbWV0cnkpOigic2NhdHRlciI9PT1uLnR5cGU/ImxpbmVzIj09PW4ubW9kZT9uLmdlb21ldHJ5PSJMaW5lUGxvdCI6Im1hcmtlcnMiPT09bi5tb2RlP24uZ2VvbWV0cnk9IkRvdFBsb3QiOiJsaW5lcyttYXJrZXJzIj09PW4ubW9kZSYmKG4uZ2VvbWV0cnk9IkxpbmVQbG90IixuLmRvdFZpc2libGU9ITApOiJhcmVhIj09PW4udHlwZT9uLmdlb21ldHJ5PSJBcmVhQ2hhcnQiOiJiYXIiPT09bi50eXBlJiYobi5nZW9tZXRyeT0iQmFyQ2hhcnQiKSxkZWxldGUgbi5tb2RlLGRlbGV0ZSBuLnR5cGUpLG59KSwhZSYmdC5sYXlvdXQmJiJzdGFjayI9PT10LmxheW91dC5iYXJtb2RlKSl7dmFyIGk9cy51dGlsLmR1cGxpY2F0ZXMoci5kYXRhLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmdlb21ldHJ5fSkpO3IuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7dmFyIG49aS5pbmRleE9mKHQuZ2VvbWV0cnkpOy0xIT1uJiYoci5kYXRhW2VdLmdyb3VwSWQ9bil9KX1pZih0LmxheW91dCl7dmFyIG89YSh7fSx0LmxheW91dCk7aWYoW1tvLFsicGxvdF9iZ2NvbG9yIl0sWyJiYWNrZ3JvdW5kQ29sb3IiXV0sW28sWyJzaG93bGVnZW5kIl0sWyJzaG93TGVnZW5kIl1dLFtvLFsicmFkaWFsYXhpcyJdLFsicmFkaWFsQXhpcyJdXSxbbyxbImFuZ3VsYXJheGlzIl0sWyJhbmd1bGFyQXhpcyJdXSxbby5hbmd1bGFyYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtvLmFuZ3VsYXJheGlzLFsic2hvd3RpY2tsYWJlbHMiXSxbImxhYmVsc1Zpc2libGUiXV0sW28uYW5ndWxhcmF4aXMsWyJudGlja3MiXSxbInRpY2tzQ291bnQiXV0sW28uYW5ndWxhcmF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbby5hbmd1bGFyYXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtvLmFuZ3VsYXJheGlzLFsicmFuZ2UiXSxbImRvbWFpbiJdXSxbby5hbmd1bGFyYXhpcyxbImVuZHBhZGRpbmciXSxbImVuZFBhZGRpbmciXV0sW28ucmFkaWFsYXhpcyxbInNob3dsaW5lIl0sWyJncmlkTGluZXNWaXNpYmxlIl1dLFtvLnJhZGlhbGF4aXMsWyJ0aWNrb3JpZW50YXRpb24iXSxbInRpY2tPcmllbnRhdGlvbiJdXSxbby5yYWRpYWxheGlzLFsidGlja3N1ZmZpeCJdLFsidGlja3NTdWZmaXgiXV0sW28ucmFkaWFsYXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW28uYW5ndWxhckF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbby5hbmd1bGFyQXhpcyxbInNob3d0aWNrbGFiZWxzIl0sWyJsYWJlbHNWaXNpYmxlIl1dLFtvLmFuZ3VsYXJBeGlzLFsibnRpY2tzIl0sWyJ0aWNrc0NvdW50Il1dLFtvLmFuZ3VsYXJBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW28uYW5ndWxhckF4aXMsWyJ0aWNrc3VmZml4Il0sWyJ0aWNrc1N1ZmZpeCJdXSxbby5hbmd1bGFyQXhpcyxbInJhbmdlIl0sWyJkb21haW4iXV0sW28uYW5ndWxhckF4aXMsWyJlbmRwYWRkaW5nIl0sWyJlbmRQYWRkaW5nIl1dLFtvLnJhZGlhbEF4aXMsWyJzaG93bGluZSJdLFsiZ3JpZExpbmVzVmlzaWJsZSJdXSxbby5yYWRpYWxBeGlzLFsidGlja29yaWVudGF0aW9uIl0sWyJ0aWNrT3JpZW50YXRpb24iXV0sW28ucmFkaWFsQXhpcyxbInRpY2tzdWZmaXgiXSxbInRpY2tzU3VmZml4Il1dLFtvLnJhZGlhbEF4aXMsWyJyYW5nZSJdLFsiZG9tYWluIl1dLFtvLmZvbnQsWyJvdXRsaW5lY29sb3IiXSxbIm91dGxpbmVDb2xvciJdXSxbby5sZWdlbmQsWyJ0cmFjZW9yZGVyIl0sWyJyZXZlcnNlT3JkZXIiXV0sW28sWyJsYWJlbG9mZnNldCJdLFsibGFiZWxPZmZzZXQiXV0sW28sWyJkZWZhdWx0Y29sb3JyYW5nZSJdLFsiZGVmYXVsdENvbG9yUmFuZ2UiXV1dLmZvckVhY2goZnVuY3Rpb24odCxyKXtzLnV0aWwudHJhbnNsYXRvci5hcHBseShudWxsLHQuY29uY2F0KGUpKX0pLGU/KHZvaWQgMCE9PW8udGlja0xlbmd0aCYmKG8uYW5ndWxhcmF4aXMudGlja2xlbj1vLnRpY2tMZW5ndGgsZGVsZXRlIG8udGlja0xlbmd0aCksby50aWNrQ29sb3ImJihvLmFuZ3VsYXJheGlzLnRpY2tjb2xvcj1vLnRpY2tDb2xvcixkZWxldGUgby50aWNrQ29sb3IpKTooby5hbmd1bGFyQXhpcyYmdm9pZCAwIT09by5hbmd1bGFyQXhpcy50aWNrbGVuJiYoby50aWNrTGVuZ3RoPW8uYW5ndWxhckF4aXMudGlja2xlbiksby5hbmd1bGFyQXhpcyYmdm9pZCAwIT09by5hbmd1bGFyQXhpcy50aWNrY29sb3ImJihvLnRpY2tDb2xvcj1vLmFuZ3VsYXJBeGlzLnRpY2tjb2xvcikpLG8ubGVnZW5kJiYiYm9vbGVhbiIhPXR5cGVvZiBvLmxlZ2VuZC5yZXZlcnNlT3JkZXImJihvLmxlZ2VuZC5yZXZlcnNlT3JkZXI9Im5vcm1hbCIhPW8ubGVnZW5kLnJldmVyc2VPcmRlciksby5sZWdlbmQmJiJib29sZWFuIj09dHlwZW9mIG8ubGVnZW5kLnRyYWNlb3JkZXImJihvLmxlZ2VuZC50cmFjZW9yZGVyPW8ubGVnZW5kLnRyYWNlb3JkZXI/InJldmVyc2VkIjoibm9ybWFsIixkZWxldGUgby5sZWdlbmQucmV2ZXJzZU9yZGVyKSxvLm1hcmdpbiYmdm9pZCAwIT09by5tYXJnaW4udCl7dmFyIGw9WyJ0IiwiciIsImIiLCJsIiwicGFkIl0sdT1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInBhZCJdLGM9e307bi5lbnRyaWVzKG8ubWFyZ2luKS5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7Y1t1W2wuaW5kZXhPZih0LmtleSldXT10LnZhbHVlfSksby5tYXJnaW49Y31lJiYoZGVsZXRlIG8ubmVlZHNFbmRTcGFjaW5nLGRlbGV0ZSBvLm1pbm9yVGlja0NvbG9yLGRlbGV0ZSBvLm1pbm9yVGlja3MsZGVsZXRlIG8uYW5ndWxhcmF4aXMudGlja3NDb3VudCxkZWxldGUgby5hbmd1bGFyYXhpcy50aWNrc0NvdW50LGRlbGV0ZSBvLmFuZ3VsYXJheGlzLnRpY2tzU3RlcCxkZWxldGUgby5hbmd1bGFyYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIG8uYW5ndWxhcmF4aXMubnRpY2tzLGRlbGV0ZSBvLnJhZGlhbGF4aXMudGlja3NDb3VudCxkZWxldGUgby5yYWRpYWxheGlzLnRpY2tzQ291bnQsZGVsZXRlIG8ucmFkaWFsYXhpcy50aWNrc1N0ZXAsZGVsZXRlIG8ucmFkaWFsYXhpcy5yZXdyaXRlVGlja3MsZGVsZXRlIG8ucmFkaWFsYXhpcy5udGlja3MpLHIubGF5b3V0PW99cmV0dXJuIHJ9LHR9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjY5OCwiLi4vLi4vbGliIjo3MjQsZDM6MTIwfV0sODMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4vbWljcm9wb2xhciIpLHM9dCgiLi91bmRvX21hbmFnZXIiKSxsPWkuZXh0ZW5kRGVlcEFsbCx1PWUuZXhwb3J0cz17fTt1LmZyYW1ld29yaz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsaSl7cmV0dXJuIGkmJihoPWkpLG4uc2VsZWN0KG4uc2VsZWN0KGgpLm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyPio6bm90KC5jaGFydC1yb290KSIpLnJlbW92ZSgpLHI9cj9sKHIsZSk6ZSxhfHwoYT1vLkF4aXMoKSksYz1vLmFkYXB0ZXIucGxvdGx5KCkuY29udmVydChyKSxhLmNvbmZpZyhjKS5yZW5kZXIoaCksdC5kYXRhPXIuZGF0YSx0LmxheW91dD1yLmxheW91dCx1LmZpbGxMYXlvdXQodCkscn12YXIgcixpLGEsYyxoLGY9bmV3IHM7cmV0dXJuIGUuaXNQb2xhcj0hMCxlLnN2Zz1mdW5jdGlvbigpewpyZXR1cm4gYS5zdmcoKX0sZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZS5nZXRMaXZlQ29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJuIG8uYWRhcHRlci5wbG90bHkoKS5jb252ZXJ0KGEuZ2V0TGl2ZUNvbmZpZygpLCEwKX0sZS5nZXRMaXZlU2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJue3Q6YS5hbmd1bGFyU2NhbGUoKSxyOmEucmFkaWFsU2NhbGUoKX19LGUuc2V0VW5kb1BvaW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPW8udXRpbC5jbG9uZUpzb24ocik7IWZ1bmN0aW9uKGUscil7Zi5hZGQoe3VuZG86ZnVuY3Rpb24oKXtyJiZ0KHIpfSxyZWRvOmZ1bmN0aW9uKCl7dChlKX19KX0oZSxpKSxpPW8udXRpbC5jbG9uZUpzb24oZSl9LGUudW5kbz1mdW5jdGlvbigpe2YudW5kbygpfSxlLnJlZG89ZnVuY3Rpb24oKXtmLnJlZG8oKX0sZX0sdS5maWxsTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnBsb3QtY29udGFpbmVyIikscj1lLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKSxpPXQuZnJhbWV3b3JrJiZ0LmZyYW1ld29yay5zdmcmJnQuZnJhbWV3b3JrLnN2ZygpLG89e3dpZHRoOjgwMCxoZWlnaHQ6NjAwLHBhcGVyX2JnY29sb3I6YS5iYWNrZ3JvdW5kLF9jb250YWluZXI6ZSxfcGFwZXJkaXY6cixfcGFwZXI6aX07dC5fZnVsbExheW91dD1sKG8sdC5sYXlvdXQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2xpYiI6NzI0LCIuL21pY3JvcG9sYXIiOjgzMSwiLi91bmRvX21hbmFnZXIiOjgzMyxkMzoxMjB9XSw4MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiB0PyhpPSEwLHRbZV0oKSxpPSExLHRoaXMpOnRoaXN9dmFyIGUscj1bXSxuPS0xLGk9ITE7cmV0dXJue2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gaT90aGlzOihyLnNwbGljZShuKzEsci5sZW5ndGgtbiksci5wdXNoKHQpLG49ci5sZW5ndGgtMSx0aGlzKX0sc2V0Q2FsbGJhY2s6ZnVuY3Rpb24odCl7ZT10fSx1bmRvOmZ1bmN0aW9uKCl7dmFyIGk9cltuXTtyZXR1cm4gaT8odChpLCJ1bmRvIiksbi09MSxlJiZlKGkudW5kbyksdGhpcyk6dGhpc30scmVkbzpmdW5jdGlvbigpe3ZhciBpPXJbbisxXTtyZXR1cm4gaT8odChpLCJyZWRvIiksbis9MSxlJiZlKGkucmVkbyksdGhpcyk6dGhpc30sY2xlYXI6ZnVuY3Rpb24oKXtyPVtdLG49LTF9LGhhc1VuZG86ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PW59LGhhc1JlZG86ZnVuY3Rpb24oKXtyZXR1cm4gbjxyLmxlbmd0aC0xfSxnZXRDb21tYW5kczpmdW5jdGlvbigpe3JldHVybiByfSxnZXRQcmV2aW91c0NvbW1hbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gcltuLTFdfSxnZXRJbmRleDpmdW5jdGlvbigpe3JldHVybiBufX19fSx7fV0sODM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi9wbG90cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCxjLHQsZSl9Zm9yKHZhciBzLGwsdT1hLnR5cGUsYz1hLmF0dHJpYnV0ZXMsaD1hLmhhbmRsZURlZmF1bHRzLGY9YS5wYXJ0aXRpb258fCJ4IixkPWkuZmluZFN1YnBsb3RJZHMocix1KSxwPWQubGVuZ3RoLG09MDttPHA7bSsrKXt2YXIgdj1kW21dO3M9dFt2XT90W3ZdOnRbdl09e30sZVt2XT1sPXt9LG8oImRvbWFpbi4iK2YsW20vcCwobSsxKS9wXSksbygiZG9tYWluLiIre3g6InkiLHk6IngifVtmXSksYS5pZD12LGgocyxsLG8sYSl9fX0seyIuLi9saWIiOjcyNCwiLi9wbG90cyI6ODI3fV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vdGVybmFyeSIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InRlcm5hcnkiLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9InRlcm5hcnkiLHIuaWRSZWdleD0vXnRlcm5hcnkoWzItOV18WzEtOV1bMC05XSspPyQvLHIuYXR0clJlZ2V4PS9edGVybmFyeShbMi05XXxbMS05XVswLTldKyk/JC8sci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0L2RlZmF1bHRzIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxhPWkuZ2V0U3VicGxvdElkcyhlLCJ0ZXJuYXJ5Iiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9aS5nZXRTdWJwbG90Q2FsY0RhdGEociwidGVybmFyeSIscyksdT1lW3NdLl9zdWJwbG90O3V8fCh1PW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX3Rlcm5hcnlsYXllci5ub2RlKCl9LGUpLGVbc10uX3N1YnBsb3Q9dSksdS5wbG90KGwsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1pLmdldFN1YnBsb3RJZHMobiwidGVybmFyeSIpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPW5bc10uX3N1YnBsb3Q7IWVbc10mJmwmJihsLnBsb3RDb250YWluZXIucmVtb3ZlKCksbC5jbGlwRGVmLnJlbW92ZSgpLGwuY2xpcERlZlJlbGF0aXZlLnJlbW92ZSgpKX19fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsIi4vbGF5b3V0L2F0dHJpYnV0ZXMiOjgzNiwiLi9sYXlvdXQvZGVmYXVsdHMiOjgzOSwiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MCwiLi90ZXJuYXJ5Ijo4NDF9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdWJwbG90Ont2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6InRlcm5hcnkifX19LHt9XSw4Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3RpdGxlOm4udGl0bGUsdGl0bGVmb250Om4udGl0bGVmb250LGNvbG9yOm4uY29sb3IsdGlja21vZGU6bi50aWNrbW9kZSxudGlja3M6aSh7fSxuLm50aWNrcyx7ZGZsdDo2LG1pbjoxfSksdGljazA6bi50aWNrMCxkdGljazpuLmR0aWNrLHRpY2t2YWxzOm4udGlja3ZhbHMsdGlja3RleHQ6bi50aWNrdGV4dCx0aWNrczpuLnRpY2tzLHRpY2tsZW46bi50aWNrbGVuLHRpY2t3aWR0aDpuLnRpY2t3aWR0aCx0aWNrY29sb3I6bi50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6bi5zaG93dGlja2xhYmVscyxzaG93dGlja3ByZWZpeDpuLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6bi50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4Om4uc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDpuLnRpY2tzdWZmaXgsc2hvd2V4cG9uZW50Om4uc2hvd2V4cG9uZW50LGV4cG9uZW50Zm9ybWF0Om4uZXhwb25lbnRmb3JtYXQsc2VwYXJhdGV0aG91c2FuZHM6bi5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDpuLnRpY2tmb250LHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCxob3ZlcmZvcm1hdDpuLmhvdmVyZm9ybWF0LHNob3dsaW5lOmkoe30sbi5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjpuLmxpbmVjb2xvcixsaW5ld2lkdGg6bi5saW5ld2lkdGgsc2hvd2dyaWQ6aSh7fSxuLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOm4uZ3JpZGNvbG9yLGdyaWR3aWR0aDpuLmdyaWR3aWR0aCxtaW46e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowfX19LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjc3NX1dLDgzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0aW55Y29sb3IyIikubWl4LGk9dCgiLi4vLi4vLi4vbGliIiksYT10KCIuL2F4aXNfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiB1KHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxhLHIsbil9ZS50eXBlPSJsaW5lYXIiO3ZhciBjPXUoImNvbG9yIiksaD1jPT09dC5jb2xvcj9jOnIuZm9udC5jb2xvcixmPWUuX25hbWUsZD1mLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpLHA9IkNvbXBvbmVudCAiK2QsbT11KCJ0aXRsZSIscCk7ZS5faG92ZXJ0aXRsZT1tPT09cD9tOmQsaS5jb2VyY2VGb250KHUsInRpdGxlZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZCgxLjIqci5mb250LnNpemUpLGNvbG9yOmh9KSx1KCJtaW4iKSxsKHQsZSx1LCJsaW5lYXIiKSxvKHQsZSx1LCJsaW5lYXIiLHtub0hvdmVyOiExfSkscyh0LGUsdSx7b3V0ZXJUaWNrczohMH0pLHUoInNob3d0aWNrbGFiZWxzIikmJihpLmNvZXJjZUZvbnQodSwidGlja2ZvbnQiLHtmYW1pbHk6ci5mb250LmZhbWlseSxzaXplOnIuZm9udC5zaXplLGNvbG9yOmh9KSx1KCJ0aWNrYW5nbGUiKSx1KCJ0aWNrZm9ybWF0IikpLHUoImhvdmVyZm9ybWF0IiksdSgic2hvd2xpbmUiKSYmKHUoImxpbmVjb2xvciIsYyksdSgibGluZXdpZHRoIikpLHUoInNob3dncmlkIikmJih1KCJncmlkY29sb3IiLG4oYyxyLmJnQ29sb3IsNjApLnRvUmdiU3RyaW5nKCkpLHUoImdyaWR3aWR0aCIpKX19LHsiLi4vLi4vLi4vbGliIjo3MjQsIi4uLy4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo3ODIsIi4uLy4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjc4MywiLi4vLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjc4NCwiLi9heGlzX2F0dHJpYnV0ZXMiOjgzNyx0aW55Y29sb3IyOjUzMn1dLDgzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhPXIoImJnY29sb3IiKSxvPXIoInN1bSIpO24uYmdDb2xvcj1pLmNvbWJpbmUoYSxuLnBhcGVyX2JnY29sb3IpO2Zvcih2YXIgdSxjLGgsZj0wO2Y8bC5sZW5ndGg7ZisrKXU9bFtmXSxjPXRbdV18fHt9LGg9ZVt1XT17X25hbWU6dSx0eXBlOiJsaW5lYXIifSxzKGMsaCxuKTt2YXIgZD1lLmFheGlzLHA9ZS5iYXhpcyxtPWUuY2F4aXM7ZC5taW4rcC5taW4rbS5taW4+PW8mJihkLm1pbj0wLHAubWluPTAsbS5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9dmFyIGk9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyIpLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9heGlzX2RlZmF1bHRzIiksbD1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUscix7dHlwZToidGVybmFyeSIsYXR0cmlidXRlczpvLGhhbmRsZURlZmF1bHRzOm4sZm9udDplLmZvbnQscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3J9KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9zdWJwbG90X2RlZmF1bHRzIjo4MzQsIi4vYXhpc19kZWZhdWx0cyI6ODM4LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDB9XSw4NDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuL2F4aXNfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17ZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmR9LHN1bTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsbWluOjB9LGFheGlzOmksYmF4aXM6aSxjYXhpczppfX0seyIuLi8uLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi9heGlzX2F0dHJpYnV0ZXMiOjgzN31dLDg0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmluaXQoZSksdGhpcy5tYWtlRnJhbWV3b3JrKCl9ZnVuY3Rpb24gaSh0KXthLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi56b29tYm94LC5qcy16b29tYm94LWJhY2tkcm9wLC5qcy16b29tYm94LW1lbnUsLnpvb21ib3gtY29ybmVycyIpLnJlbW92ZSgpfXZhciBhPXQoImQzIiksbz10KCJ0aW55Y29sb3IyIikscz10KCIuLi8uLi9wbG90bHkiKSxsPXQoIi4uLy4uL2xpYiIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksaD10KCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGQ9dCgiLi4vcGxvdHMiKSxwPXQoIi4uL2NhcnRlc2lhbi9heGVzIiksbT10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Iiksdj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZz10KCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyIpLHk9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLGI9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1uO3ZhciB4PW4ucHJvdG90eXBlO3guaW5pdD1mdW5jdGlvbih0KXt0aGlzLmNvbnRhaW5lcj10Ll90ZXJuYXJ5bGF5ZXIsdGhpcy5kZWZzPXQuX2RlZnMsdGhpcy5sYXlvdXRJZD10Ll91aWQsdGhpcy50cmFjZUhhc2g9e319LHgucGxvdD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1lW3IuaWRdLGk9ZS5fc2l6ZTtyLl9oYXNDbGlwT25BeGlzRmFsc2U9ITE7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspe2lmKCExPT09dFthXVswXS50cmFjZS5jbGlwb25heGlzKXtyLl9oYXNDbGlwT25BeGlzRmFsc2U9ITA7YnJlYWt9fXIuYWRqdXN0TGF5b3V0KG4saSksZC5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUocix0LG4pLHIubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5jYWxsKHUuZmlsbCxuLmJnY29sb3IpfSx4Lm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5kZWZzLnNlbGVjdEFsbCgiZy5jbGlwcyIpLmRhdGEoWzBdKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKTt2YXIgcj10LmNsaXBJZD0iY2xpcCIrdC5sYXlvdXRJZCt0LmlkO3QuY2xpcERlZj1lLnNlbGVjdEFsbCgiIyIrcikuZGF0YShbMF0pLHQuY2xpcERlZi5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIscikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik7dmFyIG49dC5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrdC5sYXlvdXRJZCt0LmlkO3QuY2xpcERlZlJlbGF0aXZlPWUuc2VsZWN0QWxsKCIjIituKS5kYXRhKFswXSksdC5jbGlwRGVmUmVsYXRpdmUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLG4pLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpLHQucGxvdENvbnRhaW5lcj10LmNvbnRhaW5lci5zZWxlY3RBbGwoImcuIit0LmlkKS5kYXRhKFswXSksdC5wbG90Q29udGFpbmVyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LmlkLCEwKSx0LmxheWVycz17fTt2YXIgaT1bImRyYWdsYXllciIsInBsb3RiZyIsImJhY2twbG90IiwiZ3JpZHMiLCJmcm9udHBsb3QiLCJhYXhpcyIsImJheGlzIiwiY2F4aXMiLCJheGxpbmVzIl07dC5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiZy50b3BsZXZlbCIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuInRvcGxldmVsICIrdH0pLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9YS5zZWxlY3QodGhpcyk7dC5sYXllcnNbZV09ciwiZnJvbnRwbG90Ij09PWU/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJzY2F0dGVybGF5ZXIiLCEwKToiYmFja3Bsb3QiPT09ZT9yLmFwcGVuZCgiZyIpLmNsYXNzZWQoIm1hcGxheWVyIiwhMCk6InBsb3RiZyI9PT1lP3IuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIik6ImF4bGluZXMiPT09ZSYmci5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKFsiYWxpbmUiLCJibGluZSIsImNsaW5lIl0pLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuZWFjaChmdW5jdGlvbih0KXthLnNlbGVjdCh0aGlzKS5jbGFzc2VkKHQsITApfSl9KSx0LnBsb3RDb250YWluZXIuc2VsZWN0KCIuZ3JpZHMiKS5zZWxlY3RBbGwoImcuZ3JpZCIpLmRhdGEoWyJhZ3JpZCIsImJncmlkIiwiY2dyaWQiXSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24odCl7cmV0dXJuImdyaWQgIit0fSkuZWFjaChmdW5jdGlvbihlKXt0LmxheWVyc1tlXT1hLnNlbGVjdCh0aGlzKX0pLHQucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5iYWNrcGxvdCwuZ3JpZHMiKS5jYWxsKGMuc2V0Q2xpcFVybCxyKX07dmFyIF89TWF0aC5zcXJ0KDQvMyk7eC5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbD10aGlzLGQ9dC5kb21haW4scD0oZC54WzBdK2QueFsxXSkvMixtPShkLnlbMF0rZC55WzFdKS8yLHY9ZC54WzFdLWQueFswXSxnPWQueVsxXS1kLnlbMF0seT12KmUudyxiPWcqZS5oLHg9dC5zdW0sdz10LmFheGlzLm1pbixNPXQuYmF4aXMubWluLGs9dC5jYXhpcy5taW47eT5fKmI/KGE9YixpPWEqXyk6KGk9eSxhPWkvXyksbz12KmkveSxzPWcqYS9iLHI9ZS5sK2UudypwLWkvMixuPWUudCtlLmgqKDEtbSktYS8yLGwueDA9cixsLnkwPW4sbC53PWksbC5oPWEsbC5zdW09eCxsLnhheGlzPXt0eXBlOiJsaW5lYXIiLHJhbmdlOlt3KzIqay14LHgtdy0yKk1dLGRvbWFpbjpbcC1vLzIscCtvLzJdLF9pZDoieCJ9LGgobC54YXhpcyxsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxsLnhheGlzLnNldFNjYWxlKCksbC54YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYT49bC5hYXhpcy5yYW5nZVswXSYmdC5hPD1sLmFheGlzLnJhbmdlWzFdJiZ0LmI+PWwuYmF4aXMucmFuZ2VbMV0mJnQuYjw9bC5iYXhpcy5yYW5nZVswXSYmdC5jPj1sLmNheGlzLnJhbmdlWzFdJiZ0LmM8PWwuY2F4aXMucmFuZ2VbMF19LGwueWF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3cseC1NLWtdLGRvbWFpbjpbbS1zLzIsbStzLzJdLF9pZDoieSJ9LGgobC55YXhpcyxsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxsLnlheGlzLnNldFNjYWxlKCksbC55YXhpcy5pc1B0V2l0aGluUmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hMH07dmFyIEE9bC55YXhpcy5kb21haW5bMF0sVD1sLmFheGlzPWYoe30sdC5hYXhpcyx7dmlzaWJsZTohMCxyYW5nZTpbdyx4LU0ta10sc2lkZToibGVmdCIsX2NvdW50ZXJhbmdsZTozMCx0aWNrYW5nbGU6KCt0LmFheGlzLnRpY2thbmdsZXx8MCktMzAsZG9tYWluOltBLEErcypfXSxfYXhpc2xheWVyOmwubGF5ZXJzLmFheGlzLF9ncmlkbGF5ZXI6bC5sYXllcnMuYWdyaWQsX3BvczowLF9pZDoieSIsX2xlbmd0aDppLF9ncmlkcGF0aDoiTTAsMGwiK2ErIiwtIitpLzJ9KTtoKFQsbC5ncmFwaERpdi5fZnVsbExheW91dCksVC5zZXRTY2FsZSgpO3ZhciBTPWwuYmF4aXM9Zih7fSx0LmJheGlzLHt2aXNpYmxlOiEwLHJhbmdlOlt4LXctayxNXSxzaWRlOiJib3R0b20iLF9jb3VudGVyYW5nbGU6MzAsZG9tYWluOmwueGF4aXMuZG9tYWluLF9heGlzbGF5ZXI6bC5sYXllcnMuYmF4aXMsX2dyaWRsYXllcjpsLmxheWVycy5iZ3JpZCxfY291bnRlcmF4aXM6bC5hYXhpcyxfcG9zOjAsX2lkOiJ4IixfbGVuZ3RoOmksX2dyaWRwYXRoOiJNMCwwbC0iK2kvMisiLC0iK2F9KTtoKFMsbC5ncmFwaERpdi5fZnVsbExheW91dCksUy5zZXRTY2FsZSgpLFQuX2NvdW50ZXJheGlzPVM7dmFyIEU9bC5jYXhpcz1mKHt9LHQuY2F4aXMse3Zpc2libGU6ITAscmFuZ2U6W3gtdy1NLGtdLHNpZGU6InJpZ2h0IixfY291bnRlcmFuZ2xlOjMwLHRpY2thbmdsZTooK3QuY2F4aXMudGlja2FuZ2xlfHwwKSszMCxkb21haW46W0EsQStzKl9dLF9heGlzbGF5ZXI6bC5sYXllcnMuY2F4aXMsX2dyaWRsYXllcjpsLmxheWVycy5jZ3JpZCxfY291bnRlcmF4aXM6bC5iYXhpcyxfcG9zOjAsX2lkOiJ5IixfbGVuZ3RoOmksX2dyaWRwYXRoOiJNMCwwbC0iK2ErIiwiK2kvMn0pO2goRSxsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxFLnNldFNjYWxlKCk7dmFyIEw9Ik0iK3IrIiwiKyhuK2EpKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7bC5jbGlwRGVmLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwpLGwubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixMKTt2YXIgQz0iTTAsIithKyJoIitpKyJsLSIraS8yKyIsLSIrYSsiWiI7bC5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQyk7dmFyIHo9InRyYW5zbGF0ZSgiK3IrIiwiK24rIikiO2wucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoIi5zY2F0dGVybGF5ZXIsLm1hcGxheWVyIikuYXR0cigidHJhbnNmb3JtIix6KSxsLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJ0cmFuc2Zvcm0iLG51bGwpO3ZhciBJPSJ0cmFuc2xhdGUoIityKyIsIisobithKSsiKSI7bC5sYXllcnMuYmF4aXMuYXR0cigidHJhbnNmb3JtIixJKSxsLmxheWVycy5iZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEkpO3ZhciBEPSJ0cmFuc2xhdGUoIisocitpLzIpKyIsIituKyIpcm90YXRlKDMwKSI7bC5sYXllcnMuYWF4aXMuYXR0cigidHJhbnNmb3JtIixEKSxsLmxheWVycy5hZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEQpO3ZhciBQPSJ0cmFuc2xhdGUoIisocitpLzIpKyIsIituKyIpcm90YXRlKC0zMCkiO2wubGF5ZXJzLmNheGlzLmF0dHIoInRyYW5zZm9ybSIsUCksbC5sYXllcnMuY2dyaWQuYXR0cigidHJhbnNmb3JtIixQKSxsLmRyYXdBeGVzKCEwKSxsLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuY3Jpc3AiKS5jbGFzc2VkKCJjcmlzcCIsITEpO3ZhciBPPWwubGF5ZXJzLmF4bGluZXM7Ty5zZWxlY3QoIi5hbGluZSIpLmF0dHIoImQiLFQuc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJsIitpLzIrIiwtIithOiJNMCwwIikuY2FsbCh1LnN0cm9rZSxULmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoVC5saW5ld2lkdGh8fDApKyJweCIpLE8uc2VsZWN0KCIuYmxpbmUiKS5hdHRyKCJkIixTLnNob3dsaW5lPyJNIityKyIsIisobithKSsiaCIraToiTTAsMCIpLmNhbGwodS5zdHJva2UsUy5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKFMubGluZXdpZHRofHwwKSsicHgiKSxPLnNlbGVjdCgiLmNsaW5lIikuYXR0cigiZCIsRS5zaG93bGluZT8iTSIrKHIraS8yKSsiLCIrbisibCIraS8yKyIsIithOiJNMCwwIikuY2FsbCh1LnN0cm9rZSxFLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoRS5saW5ld2lkdGh8fDApKyJweCIpLGwuZ3JhcGhEaXYuX2NvbnRleHQuc3RhdGljUGxvdHx8bC5pbml0SW50ZXJhY3Rpb25zKCksbC5wbG90Q29udGFpbmVyLnNlbGVjdCgiLmZyb250cGxvdCIpLmNhbGwoYy5zZXRDbGlwVXJsLGwuX2hhc0NsaXBPbkF4aXNGYWxzZT9udWxsOmwuY2xpcElkKX0seC5kcmF3QXhlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5ncmFwaERpdixuPWUuaWQuc3Vic3RyKDcpKyJ0aXRsZSIsaT1lLmFheGlzLGE9ZS5iYXhpcyxvPWUuY2F4aXM7aWYocC5kb1RpY2tzKHIsaSwhMCkscC5kb1RpY2tzKHIsYSwhMCkscC5kb1RpY2tzKHIsbywhMCksdCl7dmFyIHM9TWF0aC5tYXgoaS5zaG93dGlja2xhYmVscz9pLnRpY2tmb250LnNpemUvMjowLChvLnNob3d0aWNrbGFiZWxzPy43NSpvLnRpY2tmb250LnNpemU6MCkrKCJvdXRzaWRlIj09PW8udGlja3M/Ljg3Km8udGlja2xlbjowKSk7Zy5kcmF3KHIsImEiK24se3Byb3BDb250YWluZXI6aSxwcm9wTmFtZTplLmlkKyIuYWF4aXMudGl0bGUiLGRmbHROYW1lOiJDb21wb25lbnQgQSIsYXR0cmlidXRlczp7eDplLngwK2Uudy8yLHk6ZS55MC1pLnRpdGxlZm9udC5zaXplLzMtcywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pO3ZhciBsPShhLnNob3d0aWNrbGFiZWxzP2EudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztnLmRyYXcociwiYiIrbix7cHJvcENvbnRhaW5lcjphLHByb3BOYW1lOmUuaWQrIi5iYXhpcy50aXRsZSIsZGZsdE5hbWU6IkNvbXBvbmVudCBCIixhdHRyaWJ1dGVzOnt4OmUueDAtbCx5OmUueTArZS5oKy44MyphLnRpdGxlZm9udC5zaXplK2wsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxnLmRyYXcociwiYyIrbix7cHJvcENvbnRhaW5lcjpvLHByb3BOYW1lOmUuaWQrIi5jYXhpcy50aXRsZSIsZGZsdE5hbWU6IkNvbXBvbmVudCBDIixhdHRyaWJ1dGVzOnt4OmUueDArZS53K2wseTplLnkwK2UuaCsuODMqby50aXRsZWZvbnQuc2l6ZStsLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9fTt2YXIgdz1iLk1JTlpPT00vMisuODcsTT0ibS0wLjg3LC41aCIrdysidjNoLSIrKHcrNS4yKSsibCIrKHcvMisyLjYpKyIsLSIrKC44Nyp3KzQuNSkrImwyLjYsMS41bC0iK3cvMisiLCIrLjg3KncrIloiLGs9Im0wLjg3LC41aC0iK3crInYzaCIrKHcrNS4yKSsibC0iKyh3LzIrMi42KSsiLC0iKyguODcqdys0LjUpKyJsLTIuNiwxLjVsIit3LzIrIiwiKy44Nyp3KyJaIixBPSJtMCwxbCIrdy8yKyIsIisuODcqdysibDIuNiwtMS41bC0iKyh3LzIrMi42KSsiLC0iKyguODcqdys0LjUpKyJsLSIrKHcvMisyLjYpKyIsIisoLjg3KncrNC41KSsibDIuNiwxLjVsIit3LzIrIiwtIisuODcqdysiWiIsVD0hMDt4LmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyKXt2YXIgbj1GLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3c9ZS1uLmxlZnQsUz1yLW4udG9wLEU9e2E6Ui5hYXhpcy5yYW5nZVswXSxiOlIuYmF4aXMucmFuZ2VbMV0sYzpSLmNheGlzLnJhbmdlWzFdfSxDPUUsTD1SLmFheGlzLnJhbmdlWzFdLUUuYSx6PW8oUi5ncmFwaERpdi5fZnVsbExheW91dFtSLmlkXS5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSxJPSJNMCwiK1IuaCsiTCIrUi53LzIrIiwgMEwiK1IudysiLCIrUi5oKyJaIixEPSExLFA9Ti5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3giKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitSLngwKyIsICIrUi55MCsiKSIpLnN0eWxlKHtmaWxsOno+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZCIsSSksTz1OLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUi54MCsiLCAiK1IueTArIikiKS5zdHlsZSh7ZmlsbDp1LmJhY2tncm91bmQsc3Ryb2tlOnUuZGVmYXVsdExpbmUsInN0cm9rZS13aWR0aCI6MSxvcGFjaXR5OjB9KS5hdHRyKCJkIiwiTTAsMFoiKSxnKCl9ZnVuY3Rpb24gZSh0LGUpe3JldHVybiAxLWUvUi5ofWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gMS0odCsoUi5oLWUpL01hdGguc3FydCgzKSkvUi53fWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4odC0oUi5oLWUpL01hdGguc3FydCgzKSkvUi53fWZ1bmN0aW9uIGEodCxpKXt2YXIgYT13K3Qsbz1TK2kscz1NYXRoLm1heCgwLE1hdGgubWluKDEsZSh3LFMpLGUoYSxvKSkpLGw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHIodyxTKSxyKGEsbykpKSx1PU1hdGgubWF4KDAsTWF0aC5taW4oMSxuKHcsUyksbihhLG8pKSksYz0ocy8yK3UpKlIudyxoPSgxLXMvMi1sKSpSLncsZj0oYytoKS8yLGQ9aC1jLHA9KDEtcykqUi5oLG09cC1kL187ZDxiLk1JTlpPT00/KEM9RSxQLmF0dHIoImQiLEkpLE8uYXR0cigiZCIsIk0wLDBaIikpOihDPXthOkUuYStzKkwsYjpFLmIrbCpMLGM6RS5jK3UqTH0sUC5hdHRyKCJkIixJKyJNIitjKyIsIitwKyJIIitoKyJMIitmKyIsIittKyJMIitjKyIsIitwKyJaIiksTy5hdHRyKCJkIiwiTSIrdysiLCIrUysibTAuNSwwLjVoNXYtMmgtNXYtNWgtMnY1aC01djJoNXY1aDJaTSIrYysiLCIrcCtNKyJNIitoKyIsIitwK2srIk0iK2YrIiwiK20rQSkpLER8fChQLnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsej4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxPLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSxEPSEwKX1mdW5jdGlvbiBoKHQsZSl7aWYoQz09PUUpcmV0dXJuIDI9PT1lJiZ4KCksaShqKTtpKGopO3ZhciByPXt9O3JbUi5pZCsiLmFheGlzLm1pbiJdPUMuYSxyW1IuaWQrIi5iYXhpcy5taW4iXT1DLmIscltSLmlkKyIuY2F4aXMubWluIl09Qy5jLHMucmVsYXlvdXQoaixyKSxUJiZqLmRhdGEmJmouX2NvbnRleHQuc2hvd1RpcHMmJihsLm5vdGlmaWVyKCJEb3VibGUtY2xpY2sgdG88YnI+em9vbSBiYWNrIG91dCIsImxvbmciKSxUPSExKX1mdW5jdGlvbiBmKCl7RT17YTpSLmFheGlzLnJhbmdlWzBdLGI6Ui5iYXhpcy5yYW5nZVsxXSxjOlIuY2F4aXMucmFuZ2VbMV19LEM9RX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC9SLnhheGlzLl9tLG49ZS9SLnlheGlzLl9tO0M9e2E6RS5hLW4sYjpFLmIrKHIrbikvMixjOkUuYy0oci1uKS8yfTt2YXIgaT1bQy5hLEMuYixDLmNdLnNvcnQoKSxhPXthOmkuaW5kZXhPZihDLmEpLGI6aS5pbmRleE9mKEMuYiksYzppLmluZGV4T2YoQy5jKX07aVswXTwwJiYoaVsxXStpWzBdLzI8MD8oaVsyXSs9aVswXStpWzFdLGlbMF09aVsxXT0wKTooaVsyXSs9aVswXS8yLGlbMV0rPWlbMF0vMixpWzBdPTApLEM9e2E6aVthLmFdLGI6aVthLmJdLGM6aVthLmNdfSxlPShFLmEtQy5hKSpSLnlheGlzLl9tLHQ9KEUuYy1DLmMtRS5iK0MuYikqUi54YXhpcy5fbSk7dmFyIG89InRyYW5zbGF0ZSgiKyhSLngwK3QpKyIsIisoUi55MCtlKSsiKSI7Ui5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pO3ZhciBzPSJ0cmFuc2xhdGUoIistdCsiLCIrLWUrIikiO2lmKFIuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIscyksUi5hYXhpcy5yYW5nZT1bQy5hLFIuc3VtLUMuYi1DLmNdLFIuYmF4aXMucmFuZ2U9W1Iuc3VtLUMuYS1DLmMsQy5iXSxSLmNheGlzLnJhbmdlPVtSLnN1bS1DLmEtQy5iLEMuY10sUi5kcmF3QXhlcyghMSksUi5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLmNyaXNwIikuY2xhc3NlZCgiY3Jpc3AiLCExKSxSLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciBsPVIucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi5wb2ludHMiKTtsLnNlbGVjdEFsbCgiLnBvaW50IikuY2FsbChjLmhpZGVPdXRzaWRlUmFuZ2VQb2ludHMsUiksbC5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKGMuaGlkZU91dHNpZGVSYW5nZVBvaW50cyxSKX19ZnVuY3Rpb24gcCh0LGUpe2lmKHQpe3ZhciByPXt9O3JbUi5pZCsiLmFheGlzLm1pbiJdPUMuYSxyW1IuaWQrIi5iYXhpcy5taW4iXT1DLmIscltSLmlkKyIuY2F4aXMubWluIl09Qy5jLHMucmVsYXlvdXQoaixyKX1lbHNlIDI9PT1lJiZ4KCl9ZnVuY3Rpb24gZygpe04uc2VsZWN0QWxsKCIuc2VsZWN0LW91dGxpbmUiKS5yZW1vdmUoKX1mdW5jdGlvbiB4KCl7dmFyIHQ9e307dFtSLmlkKyIuYWF4aXMubWluIl09MCx0W1IuaWQrIi5iYXhpcy5taW4iXT0wLHRbUi5pZCsiLmNheGlzLm1pbiJdPTAsai5lbWl0KCJwbG90bHlfZG91YmxlY2xpY2siLG51bGwpLHMucmVsYXlvdXQoaix0KX12YXIgdyxTLEUsTCxDLHosSSxELFAsTyxSPXRoaXMsRj1SLmxheWVycy5wbG90Ymcuc2VsZWN0KCJwYXRoIikubm9kZSgpLGo9Ui5ncmFwaERpdixOPWouX2Z1bGxMYXlvdXQuX3pvb21sYXllcixCPXtlbGVtZW50OkYsZ2Q6aixwbG90aW5mbzp7eGF4aXM6Ui54YXhpcyx5YXhpczpSLnlheGlzfSxkb3VibGVjbGljazp4LHN1YnBsb3Q6Ui5pZCxwcmVwRm46ZnVuY3Rpb24oZSxyLG4pe0IueGF4ZXM9W1IueGF4aXNdLEIueWF4ZXM9W1IueWF4aXNdO3ZhciBpPWouX2Z1bGxMYXlvdXQuZHJhZ21vZGU7ZS5zaGlmdEtleSYmKGk9InBhbiI9PT1pPyJ6b29tIjoicGFuIiksQi5taW5EcmFnPSJsYXNzbyI9PT1pPzE6dm9pZCAwLCJ6b29tIj09PWk/KEIubW92ZUZuPWEsQi5kb25lRm49aCx0KGUscixuKSk6InBhbiI9PT1pPyhCLm1vdmVGbj1kLEIuZG9uZUZuPXAsZigpLGcoKSk6InNlbGVjdCIhPT1pJiYibGFzc28iIT09aXx8eShlLHIsbixCLGkpfX07Ri5vbm1vdXNlbW92ZT1mdW5jdGlvbih0KXt2LmhvdmVyKGosdCxSLmlkKSxqLl9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9RixqLl9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9Ui5pZH0sRi5vbm1vdXNlb3V0PWZ1bmN0aW9uKHQpe2ouX2RyYWdnaW5nfHxtLnVuaG92ZXIoaix0KX0sRi5vbmNsaWNrPWZ1bmN0aW9uKHQpe3YuY2xpY2soaix0LFIuaWQpfSxtLmluaXQoQil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjIzLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NjkxLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90bHkiOjc1OSwiLi4vY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6NzY5LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo3ODAsIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzgxLCIuLi9wbG90cyI6ODI3LGQzOjEyMCx0aW55Y29sb3IyOjUzMn1dLDg0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe2lmKHQubGF5b3V0QXR0cmlidXRlcyl7dmFyIGU9dC5sYXlvdXRBdHRyaWJ1dGVzLl9hcnJheUF0dHJSZWdleHBzO2lmKGUpZm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspcyhyLmxheW91dEFycmF5UmVnZXhlcyxlW25dKX19ZnVuY3Rpb24gaSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJih0PXQudHlwZSksdH12YXIgYT10KCIuL2xpYi9sb2dnZXJzIiksbz10KCIuL2xpYi9ub29wIikscz10KCIuL2xpYi9wdXNoX3VuaXF1ZSIpLGw9dCgiLi9wbG90cy9hdHRyaWJ1dGVzIik7ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnJlZ2lzdGVyPWZ1bmN0aW9uKHQsZSxuLGkpe2lmKHIubW9kdWxlc1tlXSlyZXR1cm4gdm9pZCBhLmxvZygiVHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQiKTtmb3IodmFyIG89e30scz0wO3M8bi5sZW5ndGg7cysrKW9bbltzXV09ITAsci5hbGxDYXRlZ29yaWVzW25bc11dPSEwO3IubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30saSYmT2JqZWN0LmtleXMoaSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9aSksci5hbGxUeXBlcy5wdXNoKGUpfSxyLnJlZ2lzdGVyU3VicGxvdD1mdW5jdGlvbih0KXt2YXIgZT10Lm5hbWU7aWYoci5zdWJwbG90c1JlZ2lzdHJ5W2VdKXJldHVybiB2b2lkIGEubG9nKCJQbG90IHR5cGUgIitlKyIgYWxyZWFkeSByZWdpc3RlcmVkLiIpO24odCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXR9LHIucmVnaXN0ZXJDb21wb25lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5uYW1lO3IuY29tcG9uZW50c1JlZ2lzdHJ5W2VdPXQsdC5sYXlvdXRBdHRyaWJ1dGVzJiYodC5sYXlvdXRBdHRyaWJ1dGVzLl9pc0xpbmtlZFRvQXJyYXkmJnMoci5sYXlvdXRBcnJheUNvbnRhaW5lcnMsZSksbih0KSl9LHIuZ2V0TW9kdWxlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQucilyZXR1cm4gYS53YXJuKCJUcmllZCB0byBwdXQgYSBwb2xhciB0cmFjZSBvbiBhbiBpbmNvbXBhdGlibGUgZ3JhcGggb2YgY2FydGVzaWFuIGRhdGEuIElnbm9yaW5nIHRoaXMgZGF0YXNldC4iLHQpLCExO3ZhciBlPXIubW9kdWxlc1tpKHQpXTtyZXR1cm4hIWUmJmUuX21vZHVsZX0sci50cmFjZUlzPWZ1bmN0aW9uKHQsZSl7aWYoInZhcmlvdXMiPT09KHQ9aSh0KSkpcmV0dXJuITE7dmFyIG49ci5tb2R1bGVzW3RdO3JldHVybiBufHwodCYmImFyZWEiIT09dCYmYS5sb2coIlVucmVjb2duaXplZCB0cmFjZSB0eXBlICIrdCsiLiIpLG49ci5tb2R1bGVzW2wudHlwZS5kZmx0XSksISFuLmNhdGVnb3JpZXNbZV19LHIuZ2V0Q29tcG9uZW50TWV0aG9kPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jb21wb25lbnRzUmVnaXN0cnlbdF07cmV0dXJuIG4/bltlXXx8bzpvfX0seyIuL2xpYi9sb2dnZXJzIjo3MjcsIi4vbGliL25vb3AiOjczMSwiLi9saWIvcHVzaF91bmlxdWUiOjczNSwiLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjJ9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSJ0aGVtZXNfX3RodW1iIjplPXthdXRvc2l6ZTohMCx3aWR0aDoxNTAsaGVpZ2h0OjE1MCx0aXRsZToiIixzaG93bGVnZW5kOiExLG1hcmdpbjp7bDo1LHI6NSx0OjUsYjo1LHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7Y2FzZSJ0aHVtYm5haWwiOmU9e3RpdGxlOiIiLGhpZGVzb3VyY2VzOiEwLHNob3dsZWdlbmQ6ITEsYm9yZGVyd2lkdGg6MCxib3JkZXJjb2xvcjoiIixtYXJnaW46e2w6MSxyOjEsdDoxLGI6MSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2RlZmF1bHQ6ZT17fX1yZXR1cm4gZX1mdW5jdGlvbiBpKHQpe3JldHVyblsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl0uaW5kZXhPZih0LnNsaWNlKDAsNSkpPi0xfXZhciBhPXQoIi4uL2xpYiIpLG89dCgiLi4vcGxvdHMvcGxvdHMiKSxzPWEuZXh0ZW5kRmxhdCxsPWEuZXh0ZW5kRGVlcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmZyYW1ld29yayYmdC5mcmFtZXdvcmsuaXNQb2xhciYmKHQ9dC5mcmFtZXdvcmsuZ2V0Q29uZmlnKCkpO3ZhciByLGE9dC5kYXRhLHU9dC5sYXlvdXQsYz1sKFtdLGEpLGg9bCh7fSx1LG4oZS50aWxlQ2xhc3MpKSxmPXQuX2NvbnRleHR8fHt9O2lmKGUud2lkdGgmJihoLndpZHRoPWUud2lkdGgpLGUuaGVpZ2h0JiYoaC5oZWlnaHQ9ZS5oZWlnaHQpLCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3N8fCJ0aGVtZXNfX3RodW1iIj09PWUudGlsZUNsYXNzKXtoLmFubm90YXRpb25zPVtdO3ZhciBkPU9iamVjdC5rZXlzKGgpO2ZvcihyPTA7cjxkLmxlbmd0aDtyKyspaShkW3JdKSYmKGhbZFtyXV0udGl0bGU9IiIpO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07cC5zaG93c2NhbGU9ITEscC5tYXJrZXImJihwLm1hcmtlci5zaG93c2NhbGU9ITEpLCJwaWUiPT09cC50eXBlJiYocC50ZXh0cG9zaXRpb249Im5vbmUiKX19aWYoQXJyYXkuaXNBcnJheShlLmFubm90YXRpb25zKSlmb3Iocj0wO3I8ZS5hbm5vdGF0aW9ucy5sZW5ndGg7cisrKWguYW5ub3RhdGlvbnMucHVzaChlLmFubm90YXRpb25zW3JdKTt2YXIgbT1vLmdldFN1YnBsb3RJZHMoaCwiZ2wzZCIpO2lmKG0ubGVuZ3RoKXt2YXIgdj17fTtmb3IoInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzcyYmKHY9e3RpdGxlOiIiLHNob3dheGVzbGFiZWxzOiExLHNob3d0aWNrbGFiZWxzOiExLGxpbmV0aWNrZW5hYmxlOiExfSkscj0wO3I8bS5sZW5ndGg7cisrKXt2YXIgZz1oW21bcl1dO2cueGF4aXN8fChnLnhheGlzPXt9KSxnLnlheGlzfHwoZy55YXhpcz17fSksZy56YXhpc3x8KGcuemF4aXM9e30pLHMoZy54YXhpcyx2KSxzKGcueWF4aXMsdikscyhnLnpheGlzLHYpLGcuX3NjZW5lPW51bGx9fXZhciB5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UudGlsZUNsYXNzJiYoeS5jbGFzc05hbWU9ZS50aWxlQ2xhc3MpO3ZhciBiPXtnZDp5LHRkOnksbGF5b3V0OmgsZGF0YTpjLGNvbmZpZzp7c3RhdGljUGxvdDp2b2lkIDA9PT1lLnN0YXRpY1Bsb3R8fGUuc3RhdGljUGxvdCxwbG90R2xQaXhlbFJhdGlvOnZvaWQgMD09PWUucGxvdEdsUGl4ZWxSYXRpbz8yOmUucGxvdEdsUGl4ZWxSYXRpbyxkaXNwbGF5bG9nbzplLmRpc3BsYXlsb2dvfHwhMSxzaG93TGluazplLnNob3dMaW5rfHwhMSxzaG93VGlwczplLnNob3dUaXBzfHwhMSxtYXBib3hBY2Nlc3NUb2tlbjpmLm1hcGJveEFjY2Vzc1Rva2VufX07cmV0dXJuInRyYW5zcGFyZW50IiE9PWUuc2V0QmFja2dyb3VuZCYmKGIuY29uZmlnLnNldEJhY2tncm91bmQ9ZS5zZXRCYWNrZ3JvdW5kfHwib3BhcXVlIiksYi5nZC5kZWZhdWx0TGF5b3V0PW4oZS50aWxlQ2xhc3MpLGJ9fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90cy9wbG90cyI6ODI3fV0sODQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gZT1lfHx7fSxlLmZvcm1hdD1lLmZvcm1hdHx8InBuZyIsbmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXt0Ll9zbmFwc2hvdEluUHJvZ3Jlc3MmJm4obmV3IEVycm9yKCJTbmFwc2hvdHRpbmcgYWxyZWFkeSBpbiBwcm9ncmVzcy4iKSksYS5pc0lFKCkmJiJzdmciIT09ZS5mb3JtYXQmJm4obmV3IEVycm9yKCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4iKSksdC5fc25hcHNob3RJblByb2dyZXNzPSEwO3ZhciBzPWkodCxlKSxsPWUuZmlsZW5hbWV8fHQuZm58fCJuZXdwbG90IjtsKz0iLiIrZS5mb3JtYXQscy50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEsbyhlLGwpfSkudGhlbihmdW5jdGlvbih0KXtyKHQpfSkuY2F0Y2goZnVuY3Rpb24oZSl7dC5fc25hcHNob3RJblByb2dyZXNzPSExLG4oZSl9KX0pfXZhciBpPXQoIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIiksYT10KCIuLi9saWIiKSxvPXQoIi4vZmlsZXNhdmVyIik7ZS5leHBvcnRzPW59LHsiLi4vbGliIjo3MjQsIi4uL3Bsb3RfYXBpL3RvX2ltYWdlIjo3NTcsIi4vZmlsZXNhdmVyIjo4NDV9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49ZnVuY3Rpb24odCxlKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksbj0iZG93bmxvYWQiaW4gcixpPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsbyl7InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9NU0lFIFsxLTldXC4vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJm8obmV3IEVycm9yKCJJRSA8IDEwIHVuc3VwcG9ydGVkIikpLGkmJihkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIrdC5zbGljZSh0LnNlYXJjaCgvWyw7XS8pKSxhKGUpKSxlfHwoZT0iZG93bmxvYWQiKSxuJiYoci5ocmVmPXQsci5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksci5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksYShlKSksInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5tc1NhdmVCbG9iJiYobmF2aWdhdG9yLm1zU2F2ZUJsb2IobmV3IEJsb2IoW3RdKSxlKSxhKGUpKSxvKG5ldyBFcnJvcigiZG93bmxvYWQgZXJyb3IiKSl9KX07ZS5leHBvcnRzPW59LHt9XSw4NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5nZXREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdC5faGFzJiYodC5faGFzKCJnbDNkIil8fHQuX2hhcygiZ2wyZCIpKT81MDA6MH0sci5nZXRSZWRyYXdGdW5jPWZ1bmN0aW9uKHQpe2lmKCEodC5kYXRhJiZ0LmRhdGFbMF0mJnQuZGF0YVswXS5yKSlyZXR1cm4gZnVuY3Rpb24oKXsodC5jYWxjZGF0YXx8W10pLmZvckVhY2goZnVuY3Rpb24odCl7dFswXSYmdFswXS50JiZ0WzBdLnQuY2ImJnRbMF0udC5jYigpfSl9fX0se31dLDg0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hlbHBlcnMiKSxpPXtnZXREZWxheTpuLmdldERlbGF5LGdldFJlZHJhd0Z1bmM6bi5nZXRSZWRyYXdGdW5jLGNsb25lOnQoIi4vY2xvbmVwbG90IiksdG9TVkc6dCgiLi90b3N2ZyIpLHN2Z1RvSW1nOnQoIi4vc3ZndG9pbWciKSx0b0ltYWdlOnQoIi4vdG9pbWFnZSIpLGRvd25sb2FkSW1hZ2U6dCgiLi9kb3dubG9hZCIpfTtlLmV4cG9ydHM9aX0seyIuL2Nsb25lcGxvdCI6ODQzLCIuL2Rvd25sb2FkIjo4NDQsIi4vaGVscGVycyI6ODQ2LCIuL3N2Z3RvaW1nIjo4NDgsIi4vdG9pbWFnZSI6ODQ5LCIuL3Rvc3ZnIjo4NTB9XSw4NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBhLHI9bmV3IFByb21pc2UoZnVuY3Rpb24obixhKXt2YXIgbz13aW5kb3cuSW1hZ2Uscz10LnN2ZyxsPXQuZm9ybWF0fHwicG5nIjtpZihpLmlzSUUoKSYmKHM9cy5yZXBsYWNlKC8iL2dpLCInIikscz1zLnJlcGxhY2UoLyhcKCcjKShbXiddKikoJ1wpKS9naSwnKCIkMiIpJykscz1zLnJlcGxhY2UoLyhcXCcpL2dpLCciJyksInN2ZyIhPT1sKSl7dmFyIHU9bmV3IEVycm9yKCJTb3JyeSBJRSBkb2VzIG5vdCBzdXBwb3J0IGRvd25sb2FkaW5nIGZyb20gY2FudmFzLiBUcnkge2Zvcm1hdDonc3ZnJ30gaW5zdGVhZC4iKTtyZXR1cm4gYSh1KSx0LnByb21pc2U/cjplLmVtaXQoImVycm9yIix1KX12YXIgYz10LmNhbnZhcyxoPWMuZ2V0Q29udGV4dCgiMmQiKSxmPW5ldyBvLGQ9ImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudChzKTtjLmhlaWdodD10LmhlaWdodHx8MTUwLGMud2lkdGg9dC53aWR0aHx8MzAwLGYub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHI7c3dpdGNoKCJzdmciIT09bCYmaC5kcmF3SW1hZ2UoZiwwLDApLGwpe2Nhc2UianBlZyI6cj1jLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIpO2JyZWFrO2Nhc2UicG5nIjpyPWMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTticmVhaztjYXNlIndlYnAiOnI9Yy50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztjYXNlInN2ZyI6cj1kO2JyZWFrO2RlZmF1bHQ6aWYoYShuZXcgRXJyb3IoIkltYWdlIGZvcm1hdCBpcyBub3QganBlZywgcG5nIG9yIHN2ZyIpKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIiwiSW1hZ2UgZm9ybWF0IGlzIG5vdCBqcGVnLCBwbmcgb3Igc3ZnIil9bihyKSx0LnByb21pc2V8fGUuZW1pdCgic3VjY2VzcyIscil9LGYub25lcnJvcj1mdW5jdGlvbihyKXtpZihhKHIpLCF0LnByb21pc2UpcmV0dXJuIGUuZW1pdCgiZXJyb3IiLHIpfSxmLnNyYz1kfSk7cmV0dXJuIHQucHJvbWlzZT9yOmV9dmFyIGk9dCgiLi4vbGliIiksYT10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZS5leHBvcnRzPW59LHsiLi4vbGliIjo3MjQsZXZlbnRzOjEyN31dLDg0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcigpe3ZhciB0PXMuZ2V0RGVsYXkoZi5fZnVsbExheW91dCk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciB0PXUoZikscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyLmlkPW8ucmFuZHN0cigpLG49Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmYuX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmYuX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpyLGVtaXR0ZXI6bixzdmc6dH0pLG4uY2xlYW49ZnVuY3Rpb24oKXtmJiZkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGYpfX0sdCl9dmFyIG49bmV3IGksaD1sKHQse2Zvcm1hdDoicG5nIn0pLGY9aC5nZDtmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpO3ZhciBkPXMuZ2V0UmVkcmF3RnVuYyhmKTtyZXR1cm4gYS5wbG90KGYsaC5kYXRhLGgubGF5b3V0LGguY29uZmlnKS50aGVuKGQpLnRoZW4ocikuY2F0Y2goZnVuY3Rpb24odCl7bi5lbWl0KCJlcnJvciIsdCl9KSxufXZhciBpPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixhPXQoIi4uL3Bsb3RseSIpLG89dCgiLi4vbGliIikscz10KCIuL2hlbHBlcnMiKSxsPXQoIi4vY2xvbmVwbG90IiksdT10KCIuL3Rvc3ZnIiksYz10KCIuL3N2Z3RvaW1nIik7ZS5leHBvcnRzPW59LHsiLi4vbGliIjo3MjQsIi4uL3Bsb3RseSI6NzU5LCIuL2Nsb25lcGxvdCI6ODQzLCIuL2hlbHBlcnMiOjg0NiwiLi9zdmd0b2ltZyI6ODQ4LCIuL3Rvc3ZnIjo4NTAsZXZlbnRzOjEyN31dLDg1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3ZhciBlPWEuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5zdHlsZSh7ZGlzcGxheToibm9uZSJ9KS5odG1sKCIiKSxyPXQucmVwbGFjZSgvKCZbXjtdKjspL2dpLGZ1bmN0aW9uKHQpe3JldHVybiImbHQ7Ij09PXQ/IiYjNjA7IjoiJnJ0OyI9PT10PyImIzYyOyI6LTEhPT10LmluZGV4T2YoIjwiKXx8LTEhPT10LmluZGV4T2YoIj4iKT8iIjplLmh0bWwodCkudGV4dCgpfSk7cmV0dXJuIGUucmVtb3ZlKCkscn1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlcGxhY2UoLyYoPyFcdys7fFwjWzAtOV0rO3wgXCN4WzAtOUEtRl0rOykvZywiJmFtcDsiKX12YXIgYT10KCJkMyIpLG89dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHU9LyIvZyxjPW5ldyBSZWdFeHAoJygiVE9CRVNUUklQUEVEKXwoVE9CRVNUUklQUEVEIiknLCJnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaD10Ll9mdWxsTGF5b3V0LGY9aC5fcGFwZXIsZD1oLl90b3BwYXBlcjtmLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmNhbGwoby5zZXRSZWN0LDAsMCxoLndpZHRoLGguaGVpZ2h0KS5jYWxsKHMuZmlsbCxoLnBhcGVyX2JnY29sb3IpO3ZhciBwPWguX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKyl7dmFyIG09cFtyXTttLnRvU1ZHJiZtLnRvU1ZHKHQpfWlmKGQpe3ZhciB2PWQubm9kZSgpLmNoaWxkTm9kZXMsZz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2KTtmb3Iocj0wO3I8Zy5sZW5ndGg7cisrKXt2YXIgeT1nW3JdO3kuY2hpbGROb2Rlcy5sZW5ndGgmJmYubm9kZSgpLmFwcGVuZENoaWxkKHkpfX1oLl9kcmFnZ2VycyYmaC5fZHJhZ2dlcnMucmVtb3ZlKCksZi5ub2RlKCkuc3R5bGUuYmFja2dyb3VuZD0iIixmLnNlbGVjdEFsbCgidGV4dCIpLmF0dHIoeyJkYXRhLXVuZm9ybWF0dGVkIjpudWxsLCJkYXRhLW1hdGgiOm51bGx9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9YS5zZWxlY3QodGhpcyk7aWYoImhpZGRlbiI9PT10LnN0eWxlKCJ2aXNpYmlsaXR5Iil8fCJub25lIj09PXQuc3R5bGUoImRpc3BsYXkiKSlyZXR1cm4gdm9pZCB0LnJlbW92ZSgpO3Quc3R5bGUoe3Zpc2liaWxpdHk6bnVsbCxkaXNwbGF5Om51bGx9KTt2YXIgZT10LnN0eWxlKCJmb250LWZhbWlseSIpO2UmJi0xIT09ZS5pbmRleE9mKCciJykmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlLnJlcGxhY2UodSwiVE9CRVNUUklQUEVEIikpfSksZi5zZWxlY3RBbGwoIi5wb2ludCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1hLnNlbGVjdCh0aGlzKSxlPXQuc3R5bGUoImZpbGwiKTtlJiYtMSE9PWUuaW5kZXhPZigidXJsKCIpJiZ0LnN0eWxlKCJmaWxsIixlLnJlcGxhY2UodSwiVE9CRVNUUklQUEVEIikpfSksInBkZiIhPT1lJiYiZXBzIiE9PWV8fGYuc2VsZWN0QWxsKCIjTWF0aEpheF9TVkdfZ2x5cGhzIHBhdGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLDApLGYubm9kZSgpLnNldEF0dHJpYnV0ZU5TKGwueG1sbnMsInhtbG5zIixsLnN2ZyksZi5ub2RlKCkuc2V0QXR0cmlidXRlTlMobC54bWxucywieG1sbnM6eGxpbmsiLGwueGxpbmspO3ZhciBiPShuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKGYubm9kZSgpKTtyZXR1cm4gYj1uKGIpLGI9aShiKSxiPWIucmVwbGFjZShjLCInIil9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3MDYsZDM6MTIwfV0sODUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7bihlLnRleHQsdCwidHgiKSxuKGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciByPWUubWFya2VyO2lmKHIpe24oci5vcGFjaXR5LHQsIm1vIiksbihyLmNvbG9yLHQsIm1jIik7dmFyIGk9ci5saW5lO2kmJihuKGkuY29sb3IsdCwibWxjIiksbihpLndpZHRoLHQsIm1sdyIpKX19fSx7Ii4uLy4uL2xpYiI6NzI0fV0sODUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwLGM9dSh7fSxzKTtjLmZhbWlseS5hcnJheU9rPSEwLGMuc2l6ZS5hcnJheU9rPSEwLGMuY29sb3IuYXJyYXlPaz0hMDt2YXIgaD1uLm1hcmtlcixmPWgubGluZSxkPWwoe30sZi53aWR0aCx7ZGZsdDowfSkscD1sKHt9LHt3aWR0aDpkfSxpKCJtYXJrZXIubGluZSIpKSxtPWwoe30se2xpbmU6cH0saSgibWFya2VyIikse3Nob3dzY2FsZTpoLnNob3dzY2FsZSxjb2xvcmJhcjpvfSk7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJhdXRvIiwibm9uZSJdLGRmbHQ6Im5vbmUiLGFycmF5T2s6ITB9LHRleHRmb250Omwoe30sYyx7fSksaW5zaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvdXRzaWRldGV4dGZvbnQ6bCh7fSxjLHt9KSxvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXX0sYmFzZTp7dmFsVHlwZToiYW55IixkZmx0Om51bGwsYXJyYXlPazohMH0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsYXJyYXlPazohMH0sbWFya2VyOm0scjpuLnIsdDpuLnQsZXJyb3JfeTphLGVycm9yX3g6YSxfZGVwcmVjYXRlZDp7YmFyZGlyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIjo2MjgsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3ODgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDg1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxzPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCx1LGMsaCxmPWkuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxwPWUub3JpZW50YXRpb258fChlLngmJiFlLnk/ImgiOiJ2Iik7ImgiPT09cD8ocj1mLHU9Zi5tYWtlQ2FsY2RhdGEoZSwieCIpLGw9ZC5tYWtlQ2FsY2RhdGEoZSwieSIpLGg9ZS54Y2FsZW5kYXIpOihyPWQsdT1kLm1ha2VDYWxjZGF0YShlLCJ5IiksbD1mLm1ha2VDYWxjZGF0YShlLCJ4IiksaD1lLnljYWxlbmRhcik7dmFyIG09TWF0aC5taW4obC5sZW5ndGgsdS5sZW5ndGgpLHY9bmV3IEFycmF5KG0pO2ZvcihjPTA7YzxtO2MrKyl2W2NdPXtwOmxbY10sczp1W2NdfTt2YXIgZyx5PWUuYmFzZTtpZihBcnJheS5pc0FycmF5KHkpKXtmb3IoYz0wO2M8TWF0aC5taW4oeS5sZW5ndGgsdi5sZW5ndGgpO2MrKylnPXIuZDJjKHlbY10sMCxoKSx2W2NdLmI9bihnKT9nOjA7Zm9yKDtjPHYubGVuZ3RoO2MrKyl2W2NdLmI9MH1lbHNlIGZvcihnPXIuZDJjKHksMCxoKSxnPW4oZyk/ZzowLGM9MDtjPHYubGVuZ3RoO2MrKyl2W2NdLmI9ZztyZXR1cm4gYShlLCJtYXJrZXIiKSYmbyhlLGUubWFya2VyLmNvbG9yLCJtYXJrZXIiLCJjIiksYShlLCJtYXJrZXIubGluZSIpJiZvKGUsZS5tYXJrZXIubGluZS5jb2xvciwibWFya2VyLmxpbmUiLCJjIikscyh2LGUpLHZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSI6NjE1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2FycmF5c190b19jYWxjZGF0YSI6ODUxLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sODU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLG89dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX12YXIgaD1uLmNvZXJjZUZvbnQ7aWYoIWEodCxlLHUsYykpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtjKCJvcmllbnRhdGlvbiIsZS54JiYhZS55PyJoIjoidiIpLGMoImJhc2UiKSxjKCJvZmZzZXQiKSxjKCJ3aWR0aCIpLGMoInRleHQiKSxjKCJob3ZlcnRleHQiKTt2YXIgZj1jKCJ0ZXh0cG9zaXRpb24iKSxkPUFycmF5LmlzQXJyYXkoZil8fCJhdXRvIj09PWYscD1kfHwiaW5zaWRlIj09PWYsbT1kfHwib3V0c2lkZSI9PT1mO2lmKHB8fG0pe3ZhciB2PWgoYywidGV4dGZvbnQiLHUuZm9udCk7cCYmaChjLCJpbnNpZGV0ZXh0Zm9udCIsdiksbSYmaChjLCJvdXRzaWRldGV4dGZvbnQiLHYpfW8odCxlLGMscix1KSxzKHQsZSxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHModCxlLGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6ODYzLCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMDQ3LCIuL2F0dHJpYnV0ZXMiOjg1Mn1dLDg1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcyxsLHUsYyxoLGYsZCxwPXQuY2QsbT1wWzBdLnRyYWNlLHY9cFswXS50LGc9dC54YSx5PXQueWEsYj1mdW5jdGlvbih0KXtyZXR1cm4gbi5pbmJveChjKHQpLXMsaCh0KS1zKX07ImgiPT09bS5vcmllbnRhdGlvbj8ocz1yLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQueS10LncvMn0sdT1mdW5jdGlvbih0KXtyZXR1cm4gdC55K3Qudy8yfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBuLmluYm94KHQuYi1lLHQueC1lKSsodC54LWUpLyh0LngtdC5iKX0sZD1iKToocz1lLGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQueC10LncvMn0sdT1mdW5jdGlvbih0KXtyZXR1cm4gdC54K3Qudy8yfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBuLmluYm94KHQuYi1yLHQueS1yKSsodC55LXIpLyh0LnktdC5iKX0sZj1iKSxjPSJjbG9zZXN0Ij09PW8/bDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4obCh0KSx0LnAtdi5iYXJncm91cHdpZHRoLzIpfSxoPSJjbG9zZXN0Ij09PW8/dTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgodSh0KSx0LnArdi5iYXJncm91cHdpZHRoLzIpfTt2YXIgeD1uLmdldERpc3RhbmNlRnVuY3Rpb24obyxmLGQpO2lmKG4uZ2V0Q2xvc2VzdChwLHgsdCksITEhPT10LmluZGV4KXt2YXIgXz10LmluZGV4LHc9cFtfXSxNPXcubWNjfHxtLm1hcmtlci5jb2xvcixrPXcubWxjY3x8bS5tYXJrZXIubGluZS5jb2xvcixBPXcubWx3fHxtLm1hcmtlci5saW5lLndpZHRoO2Eub3BhY2l0eShNKT90LmNvbG9yPU06YS5vcGFjaXR5KGspJiZBJiYodC5jb2xvcj1rKTt2YXIgVD1tLmJhc2U/dy5iK3cuczp3LnM7cmV0dXJuImgiPT09bS5vcmllbnRhdGlvbj8odC54MD10LngxPWcuYzJwKHcueCwhMCksdC54TGFiZWxWYWw9VCx0LnkwPXkuYzJwKGModyksITApLHQueTE9eS5jMnAoaCh3KSwhMCksdC55TGFiZWxWYWw9dy5wKToodC55MD10LnkxPXkuYzJwKHcueSwhMCksdC55TGFiZWxWYWw9VCx0LngwPWcuYzJwKGModyksITApLHQueDE9Zy5jMnAoaCh3KSwhMCksdC54TGFiZWxWYWw9dy5wKSx3Lmh0eD90LnRleHQ9dy5odHg6bS5ob3ZlcnRleHQ/dC50ZXh0PW0uaG92ZXJ0ZXh0OncudHg/dC50ZXh0PXcudHg6bS50ZXh0JiYodC50ZXh0PW0udGV4dCksaS5ob3ZlckluZm8odyxtLHQpLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjYzMiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzfV0sODU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5zZXRQb3NpdGlvbnM9dCgiLi9zZXRfcG9zaXRpb25zIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5hcnJheXNUb0NhbGNkYXRhPXQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iYmFyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsImJhciIsIm9yaWVudGVkIiwibWFya2VyQ29sb3JzY2FsZSIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwKIi4uL3NjYXR0ZXIvY29sb3JiYXIiOjEwMjgsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjo4NTEsIi4vYXR0cmlidXRlcyI6ODUyLCIuL2NhbGMiOjg1MywiLi9kZWZhdWx0cyI6ODU0LCIuL2hvdmVyIjo4NTUsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg1NywiLi9sYXlvdXRfZGVmYXVsdHMiOjg1OCwiLi9wbG90Ijo4NTksIi4vc2V0X3Bvc2l0aW9ucyI6ODYwLCIuL3N0eWxlIjo4NjJ9XSw4NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtiYXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFjayIsImdyb3VwIiwib3ZlcmxheSIsInJlbGF0aXZlIl0sZGZsdDoiZ3JvdXAifSxiYXJub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJmcmFjdGlvbiIsInBlcmNlbnQiXSxkZmx0OiIifSxiYXJnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LGJhcmdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MH19fSx7fV0sODU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxvLHIsbil9Zm9yKHZhciBsPSExLHU9ITEsYz0hMSxoPXt9LGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGQ9cltmXTtpZihuLnRyYWNlSXMoZCwiYmFyIikpe2lmKGw9ITAsIm92ZXJsYXkiIT09dC5iYXJtb2RlJiYic3RhY2siIT09dC5iYXJtb2RlKXt2YXIgcD1kLnhheGlzK2QueWF4aXM7aFtwXSYmKGM9ITApLGhbcF09ITB9aWYoZC52aXNpYmxlJiYiaGlzdG9ncmFtIj09PWQudHlwZSl7ImNhdGVnb3J5IiE9PWkuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSxkWyJ2Ij09PWQub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSkudHlwZSYmKHU9ITApfX19aWYobCl7Im92ZXJsYXkiIT09cygiYmFybW9kZSIpJiZzKCJiYXJub3JtIikscygiYmFyZ2FwIix1JiYhYz8wOi4yKSxzKCJiYXJncm91cGdhcCIpfX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg1N31dLDg1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4sbyxmLGQscCl7ZnVuY3Rpb24gbShlLHIsbil7cmV0dXJuIGUuYXBwZW5kKCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGsuZm9udCxuKS5jYWxsKHcuY29udmVydFRvVHNwYW5zLHQpfXZhciB2PXJbMF0udHJhY2UsZz12Lm9yaWVudGF0aW9uLHk9cyh2LG4pO2lmKHkpe3ZhciBiPWwodixuKTtpZigibm9uZSIhPT1iKXt2YXIgeCxfLE0sQSxUPXUodixuLHQuX2Z1bGxMYXlvdXQuZm9udCksUz1jKHYsbixUKSxFPWgodixuLFQpLEw9dC5fZnVsbExheW91dC5iYXJtb2RlLEM9InN0YWNrIj09PUwsej0icmVsYXRpdmUiPT09TCxEPUN8fHosUD1yW25dLE89IUR8fFAuX291dG1vc3QsUj1NYXRoLmFicyhmLW8pLTIqSSxGPU1hdGguYWJzKHAtZCktMipJO2lmKCJvdXRzaWRlIj09PWImJihPfHwoYj0iaW5zaWRlIikpLCJhdXRvIj09PWIpaWYoTyl7eD1tKGUseSxTKSxfPWsuYkJveCh4Lm5vZGUoKSksTT1fLndpZHRoLEE9Xy5oZWlnaHQ7dmFyIGo9TT4wJiZBPjAsTj1NPD1SJiZBPD1GLEI9TTw9RiYmQTw9UixVPSJoIj09PWc/Uj49TSooRi9BKTpGPj1BKihSL00pO2omJihOfHxCfHxVKT9iPSJpbnNpZGUiOihiPSJvdXRzaWRlIix4LnJlbW92ZSgpLHg9bnVsbCl9ZWxzZSBiPSJpbnNpZGUiO2lmKCF4JiYoeD1tKGUseSwib3V0c2lkZSI9PT1iP0U6UyksXz1rLmJCb3goeC5ub2RlKCkpLE09Xy53aWR0aCxBPV8uaGVpZ2h0LE08PTB8fEE8PTApKXJldHVybiB2b2lkIHgucmVtb3ZlKCk7dmFyIFY7Vj0ib3V0c2lkZSI9PT1iP2EobyxmLGQscCxfLGcpOmkobyxmLGQscCxfLGcpLHguYXR0cigidHJhbnNmb3JtIixWKX19fWZ1bmN0aW9uIGkodCxlLHIsbixpLGEpe3ZhciBzLGwsdSxjLGgsZj1pLndpZHRoLGQ9aS5oZWlnaHQscD0oaS5sZWZ0K2kucmlnaHQpLzIsbT0oaS50b3AraS5ib3R0b20pLzIsdj1NYXRoLmFicyhlLXQpLGc9TWF0aC5hYnMobi1yKTt2PjIqSSYmZz4yKkk/KGg9SSx2LT0yKmgsZy09MipoKTpoPTA7dmFyIHksYjtyZXR1cm4gZjw9diYmZDw9Zz8oeT0hMSxiPTEpOmY8PWcmJmQ8PXY/KHk9ITAsYj0xKTpmPGQ9PXY8Zz8oeT0hMSxiPU1hdGgubWluKHYvZixnL2QpKTooeT0hMCxiPU1hdGgubWluKGcvZix2L2QpKSx5JiYoeT05MCkseT8ocz1iKmQsbD1iKmYpOihzPWIqZixsPWIqZCksImgiPT09YT9lPHQ/KHU9ZStoK3MvMixjPShyK24pLzIpOih1PWUtaC1zLzIsYz0ocituKS8yKTpuPnI/KHU9KHQrZSkvMixjPW4taC1sLzIpOih1PSh0K2UpLzIsYz1uK2grbC8yKSxvKHAsbSx1LGMsYix5KX1mdW5jdGlvbiBhKHQsZSxyLG4saSxhKXt2YXIgcyxsPSJoIj09PWE/TWF0aC5hYnMobi1yKTpNYXRoLmFicyhlLXQpO2w+MipJJiYocz1JLGwtPTIqcyk7dmFyIHUsYyxoLGYsZD0iaCI9PT1hP01hdGgubWluKDEsbC9pLmhlaWdodCk6TWF0aC5taW4oMSxsL2kud2lkdGgpLHA9KGkubGVmdCtpLnJpZ2h0KS8yLG09KGkudG9wK2kuYm90dG9tKS8yO3JldHVybiB1PWQqaS53aWR0aCxjPWQqaS5oZWlnaHQsImgiPT09YT9lPHQ/KGg9ZS1zLXUvMixmPShyK24pLzIpOihoPWUrcyt1LzIsZj0ocituKS8yKTpuPnI/KGg9KHQrZSkvMixmPW4rcytjLzIpOihoPSh0K2UpLzIsZj1uLXMtYy8yKSxvKHAsbSxoLGYsZCwhMSl9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dmFyIG8scztyZXR1cm4gaTwxP289InNjYWxlKCIraSsiKSAiOihpPTEsbz0iIikscz1hPyJyb3RhdGUoIithKyIgIit0KyIgIitlKyIpICI6IiIsInRyYW5zbGF0ZSgiKyhyLWkqdCkrIiAiKyhuLWkqZSkrIikiK28rc31mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZCh0LnRleHQsZSk7cmV0dXJuIHAoUyxyKX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9ZCh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gbShFLHIpfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiBmKEwsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIGModCxlLHIpe3JldHVybiBmKEMsdC5pbnNpZGV0ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiBmKHosdC5vdXRzaWRldGV4dGZvbnQsZSxyKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2U9ZXx8e307dmFyIGk9ZChlLmZhbWlseSxyKSxhPWQoZS5zaXplLHIpLG89ZChlLmNvbG9yLHIpO3JldHVybntmYW1pbHk6cCh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOnYodC5zaXplLGEsbi5zaXplKSxjb2xvcjpnKHQuY29sb3IsbyxuLmNvbG9yKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U8dC5sZW5ndGgmJihyPXRbZV0pOnI9dCxyfWZ1bmN0aW9uIHAodCxlLHIpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoZXx8IXQubm9CbGFuaylyZXR1cm4gZX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZSYmIXQuc3RyaWN0KXJldHVybiBTdHJpbmcoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9ZnVuY3Rpb24gbSh0LGUscil7cmV0dXJuIHQuY29lcmNlTnVtYmVyJiYoZT0rZSksLTEhPT10LnZhbHVlcy5pbmRleE9mKGUpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH1mdW5jdGlvbiB2KHQsZSxyKXtpZihiKGUpKXtlPStlO3ZhciBuPXQubWluLGk9dC5tYXg7aWYoISh2b2lkIDAhPT1uJiZlPG58fHZvaWQgMCE9PWkmJmU+aSkpcmV0dXJuIGV9cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmRmbHR9ZnVuY3Rpb24gZyh0LGUscil7cmV0dXJuIHgoZSkuaXNWYWxpZCgpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH12YXIgeT10KCJkMyIpLGI9dCgiZmFzdC1pc251bWVyaWMiKSx4PXQoInRpbnljb2xvcjIiKSxfPXQoIi4uLy4uL2xpYiIpLHc9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksTT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxBPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksVD10KCIuL2F0dHJpYnV0ZXMiKSxTPVQudGV4dCxFPVQudGV4dHBvc2l0aW9uLEw9VC50ZXh0Zm9udCxDPVQuaW5zaWRldGV4dGZvbnQsej1ULm91dHNpZGV0ZXh0Zm9udCxJPTM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1lLnhheGlzLGE9ZS55YXhpcyxvPXQuX2Z1bGxMYXlvdXQscz1lLnBsb3Quc2VsZWN0KCIuYmFybGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UuYmFycyIpLmRhdGEocik7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgYmFycyIpLHMuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udCxzPWVbMF0udHJhY2UsbD1yLnBvZmZzZXQsdT1BcnJheS5pc0FycmF5KGwpO3kuc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoXy5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLmVhY2goZnVuY3Rpb24ocixjKXtmdW5jdGlvbiBoKHQpe3JldHVybiAwPT09by5iYXJnYXAmJjA9PT1vLmJhcmdyb3VwZ2FwP3kucm91bmQoTWF0aC5yb3VuZCh0KS1BLDIpOnR9ZnVuY3Rpb24gZih0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPj0yP2godCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfXZhciBkLHAsbSx2LGc9ci5wKyh1P2xbY106bCkseD1nK3IudyxfPXIuYix3PV8rci5zO2lmKCJoIj09PXMub3JpZW50YXRpb24/KG09YS5jMnAoZywhMCksdj1hLmMycCh4LCEwKSxkPWkuYzJwKF8sITApLHA9aS5jMnAodywhMCkpOihkPWkuYzJwKGcsITApLHA9aS5jMnAoeCwhMCksbT1hLmMycChfLCEwKSx2PWEuYzJwKHcsITApKSwhKGIoZCkmJmIocCkmJmIobSkmJmIodikmJmQhPT1wJiZtIT09dikpcmV0dXJuIHZvaWQgeS5zZWxlY3QodGhpcykucmVtb3ZlKCk7dmFyIGs9KHIubWx3KzF8fHMubWFya2VyLmxpbmUud2lkdGgrMXx8KHIudHJhY2U/ci50cmFjZS5tYXJrZXIubGluZS53aWR0aDowKSsxKS0xLEE9eS5yb3VuZChrLzIlMSwyKTtpZighdC5fY29udGV4dC5zdGF0aWNQbG90KXt2YXIgVD1NLm9wYWNpdHkoci5tY3x8cy5tYXJrZXIuY29sb3IpLFM9VDwxfHxrPi4wMT9oOmY7ZD1TKGQscCkscD1TKHAsZCksbT1TKG0sdiksdj1TKHYsbSl9dmFyIEU9eS5zZWxlY3QodGhpcyk7RS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImQiLCJNIitkKyIsIittKyJWIit2KyJIIitwKyJWIittKyJaIiksbih0LEUsZSxjLGQscCxtLHYpfSl9KSxzLmNhbGwoQS5wbG90LGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjMyLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo3NDMsIi4vYXR0cmlidXRlcyI6ODUyLGQzOjEyMCwiZmFzdC1pc251bWVyaWMiOjEyOSx0aW55Y29sb3IyOjUzMn1dLDg2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe2lmKG4ubGVuZ3RoKXt2YXIgcyxsLHUsYyxoLGY9dC5fZnVsbExheW91dC5iYXJtb2RlLGQ9Im92ZXJsYXkiPT09ZixwPSJncm91cCI9PT1mO2lmKGQpaSh0LGUscixuKTtlbHNlIGlmKHApe2ZvcihzPVtdLGw9W10sdT0wO3U8bi5sZW5ndGg7dSsrKWM9blt1XSxoPWNbMF0udHJhY2Usdm9pZCAwPT09aC5vZmZzZXQ/bC5wdXNoKGMpOnMucHVzaChjKTtsLmxlbmd0aCYmYSh0LGUscixsKSxzLmxlbmd0aCYmaSh0LGUscixzKX1lbHNle2ZvcihzPVtdLGw9W10sdT0wO3U8bi5sZW5ndGg7dSsrKWM9blt1XSxoPWNbMF0udHJhY2Usdm9pZCAwPT09aC5iYXNlP2wucHVzaChjKTpzLnB1c2goYyk7bC5sZW5ndGgmJm8odCxlLHIsbCkscy5sZW5ndGgmJmkodCxlLHIscyl9fX1mdW5jdGlvbiBpKHQsZSxyLG4pe2Zvcih2YXIgaT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sYT0haSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBsPW5bb10sdT1uZXcgdyhbbF0sITEsYSk7cyh0LGUsdSksaT8obSh0LHIsdSksdih0LHIsdSkpOmQodCxyLHUpfX1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpPXQuX2Z1bGxMYXlvdXQsYT1pLmJhcm5vcm0sbz0hYSxzPW5ldyB3KG4sITEsbyk7bCh0LGUscyksYT8obSh0LHIscyksdih0LHIscykpOmQodCxyLHMpfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxhPWkuYmFybW9kZSxvPSJzdGFjayI9PT1hLGw9InJlbGF0aXZlIj09PWEsdT10Ll9mdWxsTGF5b3V0LmJhcm5vcm0sYz1sLGg9ISh1fHxvfHxsKSxmPW5ldyB3KG4sYyxoKTtzKHQsZSxmKSxwKHQscixmKTtmb3IodmFyIGQ9MDtkPG4ubGVuZ3RoO2QrKylmb3IodmFyIG09bltkXSxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PW1bZ107aWYoeS5zIT09Yil7dmFyIHg9eS5iK3kucz09PWYuZ2V0KHkucCx5LnMpO3gmJih5Ll9vdXRtb3N0PSEwKX19dSYmdih0LHIsZil9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5iYXJnYXAsZj1zLmJhcmdyb3VwZ2FwLGQ9ci5taW5EaWZmLHA9ci50cmFjZXMsbT1kKigxLWwpLHY9bSxnPXYqKDEtZikseT0tZy8yO2ZvcihuPTA7bjxwLmxlbmd0aDtuKyspaT1wW25dLGE9aVswXSxvPWEudCxvLmJhcndpZHRoPWcsby5wb2Zmc2V0PXksby5iYXJncm91cHdpZHRoPW07ci5iaW5XaWR0aD1wWzBdWzBdLnQuYmFyd2lkdGgvMTAwLHUociksYyh0LGUsciksaCh0LGUscil9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG4saSxhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5iYXJnYXAsZj1zLmJhcmdyb3VwZ2FwLGQ9ci5wb3NpdGlvbnMscD1yLmRpc3RpbmN0UG9zaXRpb25zLG09ci5taW5EaWZmLHY9ci50cmFjZXMsZz1kLmxlbmd0aCE9PXAubGVuZ3RoLHk9di5sZW5ndGgsYj1tKigxLWwpLHg9Zz9iL3k6YixfPXgqKDEtZik7Zm9yKG49MDtuPHk7bisrKXtpPXZbbl0sYT1pWzBdO3ZhciB3PWc/KCgyKm4rMS15KSp4LV8pLzI6LV8vMjtvPWEudCxvLmJhcndpZHRoPV8sby5wb2Zmc2V0PXcsby5iYXJncm91cHdpZHRoPWJ9ci5iaW5XaWR0aD12WzBdWzBdLnQuYmFyd2lkdGgvMTAwLHUociksYyh0LGUsciksaCh0LGUscixnKX1mdW5jdGlvbiB1KHQpe3ZhciBlLHIsbixpLGEsbyxzPXQudHJhY2VzO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspe3I9c1tlXSxuPXJbMF0saT1uLnRyYWNlLG89bi50O3ZhciBsLHU9aS5vZmZzZXQsYz1vLnBvZmZzZXQ7aWYoQXJyYXkuaXNBcnJheSh1KSl7Zm9yKGw9dS5zbGljZSgwLHIubGVuZ3RoKSxhPTA7YTxsLmxlbmd0aDthKyspeShsW2FdKXx8KGxbYV09Yyk7Zm9yKGE9bC5sZW5ndGg7YTxyLmxlbmd0aDthKyspbC5wdXNoKGMpO28ucG9mZnNldD1sfWVsc2Ugdm9pZCAwIT09dSYmKG8ucG9mZnNldD11KTt2YXIgaD1pLndpZHRoLGY9by5iYXJ3aWR0aDtpZihBcnJheS5pc0FycmF5KGgpKXt2YXIgZD1oLnNsaWNlKDAsci5sZW5ndGgpO2ZvcihhPTA7YTxkLmxlbmd0aDthKyspeShkW2FdKXx8KGRbYV09Zik7Zm9yKGE9ZC5sZW5ndGg7YTxyLmxlbmd0aDthKyspZC5wdXNoKGYpO2lmKG8uYmFyd2lkdGg9ZCx2b2lkIDA9PT11KXtmb3IobD1bXSxhPTA7YTxyLmxlbmd0aDthKyspbC5wdXNoKGMrKGYtZFthXSkvMik7by5wb2Zmc2V0PWx9fWVsc2Ugdm9pZCAwIT09aCYmKG8uYmFyd2lkdGg9aCx2b2lkIDA9PT11JiYoby5wb2Zmc2V0PWMrKGYtaCkvMikpfX1mdW5jdGlvbiBjKHQsZSxyKXtmb3IodmFyIG49ci50cmFjZXMsaT1nKGUpLGE9MDthPG4ubGVuZ3RoO2ErKylmb3IodmFyIG89blthXSxzPW9bMF0udCxsPXMucG9mZnNldCx1PUFycmF5LmlzQXJyYXkobCksYz1zLmJhcndpZHRoLGg9QXJyYXkuaXNBcnJheShjKSxmPTA7ZjxvLmxlbmd0aDtmKyspe3ZhciBkPW9bZl0scD1kLnc9aD9jW2ZdOmM7ZFtpXT1kLnArKHU/bFtmXTpsKStwLzJ9fWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGk9ci50cmFjZXMsYT1yLmRpc3RpbmN0UG9zaXRpb25zLG89YVswXSxzPXIubWluRGlmZixsPXMvMjtfLm1pbkR0aWNrKGUscyxvLG4pO2Zvcih2YXIgdT1NYXRoLm1pbi5hcHBseShNYXRoLGEpLWwsYz1NYXRoLm1heC5hcHBseShNYXRoLGEpK2wsaD0wO2g8aS5sZW5ndGg7aCsrKXt2YXIgZj1pW2hdLGQ9ZlswXSxwPWQudHJhY2U7aWYodm9pZCAwIT09cC53aWR0aHx8dm9pZCAwIT09cC5vZmZzZXQpZm9yKHZhciBtPWQudCx2PW0ucG9mZnNldCxnPW0uYmFyd2lkdGgseT1BcnJheS5pc0FycmF5KHYpLGI9QXJyYXkuaXNBcnJheShnKSx4PTA7eDxmLmxlbmd0aDt4Kyspe3ZhciB3PWZbeF0sTT15P3ZbeF06dixrPWI/Z1t4XTpnLEE9dy5wLFQ9QStNLFM9VCtrO3U9TWF0aC5taW4odSxUKSxjPU1hdGgubWF4KGMsUyl9fV8uZXhwYW5kKGUsW3UsY10se3BhZGRlZDohMX0pfWZ1bmN0aW9uIGYodCxlKXt5KHRbMF0pP3RbMF09TWF0aC5taW4odFswXSxlKTp0WzBdPWUseSh0WzFdKT90WzFdPU1hdGgubWF4KHRbMV0sZSk6dFsxXT1lfWZ1bmN0aW9uIGQodCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPWcoZSksYT1lLmwyYyhlLmMybCgwKSksbz1bYSxhXSxzPTA7czxuLmxlbmd0aDtzKyspZm9yKHZhciBsPW5bc10sdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgYz1sW3VdLGg9Yy5iLGQ9aCtjLnM7Y1tpXT1kLHkoZS5jMmwoZCkpJiZmKG8sZCkseShlLmMybChoKSkmJmYobyxoKX1fLmV4cGFuZChlLG8se3RvemVybzohMCxwYWRkZWQ6ITB9KX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbixpLGEsbyxzPXQuX2Z1bGxMYXlvdXQsbD1zLmJhcm5vcm0sdT1nKGUpLGM9ci50cmFjZXMsaD1lLmwyYyhlLmMybCgwKSksZD1baCxoXTtmb3Iobj0wO248Yy5sZW5ndGg7bisrKWZvcihpPWNbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKWlmKG89aVthXSxvLnMhPT1iKXt2YXIgcD1yLnB1dChvLnAsby5iK28ucyksbT1wK28uYitvLnM7by5iPXAsb1t1XT1tLGx8fCh5KGUuYzJsKG0pKSYmZihkLG0pLHkoZS5jMmwocCkpJiZmKGQscCkpfWx8fF8uZXhwYW5kKGUsZCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pfWZ1bmN0aW9uIG0odCxlLHIpe2Zvcih2YXIgbj1yLnRyYWNlcyxpPTA7aTxuLmxlbmd0aDtpKyspZm9yKHZhciBhPW5baV0sbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO3MucyE9PWImJnIucHV0KHMucCxzLmIrcy5zKX19ZnVuY3Rpb24gdih0LGUscil7ZnVuY3Rpb24gbih0KXt5KGUuYzJsKHQpKSYmKHQ8bC1zfHx0PnUrc3x8IXkobCkpJiYoaD0hMCxmKGMsdCkpfWZvcih2YXIgaT1yLnRyYWNlcyxhPWcoZSksbz0iZnJhY3Rpb24iPT09dC5fZnVsbExheW91dC5iYXJub3JtPzE6MTAwLHM9by8xZTksbD1lLmwyYyhlLmMybCgwKSksdT0ic3RhY2siPT09dC5fZnVsbExheW91dC5iYXJtb2RlP286bCxjPVtsLHVdLGg9ITEsZD0wO2Q8aS5sZW5ndGg7ZCsrKWZvcih2YXIgcD1pW2RdLG09MDttPHAubGVuZ3RoO20rKyl7dmFyIHY9cFttXTtpZih2LnMhPT1iKXt2YXIgeD1NYXRoLmFicyhvL3IuZ2V0KHYucCx2LnMpKTt2LmIqPXgsdi5zKj14O3ZhciB3PXYuYixNPXcrdi5zO3ZbYV09TSxuKE0pLG4odyl9fV8uZXhwYW5kKGUsYyx7dG96ZXJvOiEwLHBhZGRlZDpofSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5faWQuY2hhckF0KDApfXZhciB5PXQoImZhc3QtaXNudW1lcmljIiksYj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHg9dCgiLi4vLi4vcmVnaXN0cnkiKSxfPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksdz10KCIuL3NpZXZlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1lLnhheGlzLGE9ZS55YXhpcyxvPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPVtdLHU9W107Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyl7dmFyIGM9b1tyXTshMD09PWMudmlzaWJsZSYmeC50cmFjZUlzKGMsImJhciIpJiZjLnhheGlzPT09aS5faWQmJmMueWF4aXM9PT1hLl9pZCYmKCJoIj09PWMub3JpZW50YXRpb24/bC5wdXNoKHNbcl0pOnUucHVzaChzW3JdKSl9bih0LGksYSx1KSxuKHQsYSxpLGwpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vc2lldmUuanMiOjg2MSwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDg2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt0aGlzLnRyYWNlcz10LHRoaXMuc2VwYXJhdGVOZWdhdGl2ZVZhbHVlcz1lLHRoaXMuZG9udE1lcmdlT3ZlcmxhcHBpbmdEYXRhPXI7Zm9yKHZhciBuPVtdLG89MDtvPHQubGVuZ3RoO28rKylmb3IodmFyIHM9dFtvXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF07dS5wIT09YSYmbi5wdXNoKHUucCl9dGhpcy5wb3NpdGlvbnM9bjt2YXIgYz1pLmRpc3RpbmN0VmFscyh0aGlzLnBvc2l0aW9ucyk7dGhpcy5kaXN0aW5jdFBvc2l0aW9ucz1jLnZhbHMsdGhpcy5taW5EaWZmPWMubWluRGlmZix0aGlzLmJpbldpZHRoPXRoaXMubWluRGlmZix0aGlzLmJpbnM9e319ZS5leHBvcnRzPW47dmFyIGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO24ucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxuLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sbi5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcGFyYXRlTmVnYXRpdmVWYWx1ZXM/InYiOiJeIikrKHRoaXMuZG9udE1lcmdlT3ZlcmxhcHBpbmdEYXRhP3Q6TWF0aC5yb3VuZCh0L3RoaXMuYmluV2lkdGgpKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi8uLi9saWIiOjcyNH1dLDg2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYmFycyIpLHI9ZS5zaXplKCkscz10Ll9mdWxsTGF5b3V0O2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KS5lYWNoKGZ1bmN0aW9uKHQpeygic3RhY2siPT09cy5iYXJtb2RlJiZyPjF8fDA9PT1zLmJhcmdhcCYmMD09PXMuYmFyZ3JvdXBnYXAmJiF0WzBdLnRyYWNlLm1hcmtlci5saW5lLndpZHRoKSYmbi5zZWxlY3QodGhpcykuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSksZS5zZWxlY3RBbGwoImcucG9pbnRzIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5tYXJrZXIsbz1yLmxpbmUscz1hLnRyeUNvbG9yc2NhbGUociwiIiksbD1hLnRyeUNvbG9yc2NhbGUociwibGluZSIpO24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aCIpLmVhY2goZnVuY3Rpb24odCl7dmFyIGUsYSx1PSh0Lm1sdysxfHxvLndpZHRoKzEpLTEsYz1uLnNlbGVjdCh0aGlzKTtlPSJtYyJpbiB0P3QubWNjPXModC5tYyk6QXJyYXkuaXNBcnJheShyLmNvbG9yKT9pLmRlZmF1bHRMaW5lOnIuY29sb3IsYy5zdHlsZSgic3Ryb2tlLXdpZHRoIix1KyJweCIpLmNhbGwoaS5maWxsLGUpLHUmJihhPSJtbGMiaW4gdD90Lm1sY2M9bCh0Lm1sYyk6QXJyYXkuaXNBcnJheShvLmNvbG9yKT9pLmRlZmF1bHRMaW5lOm8uY29sb3IsYy5jYWxsKGkuc3Ryb2tlLGEpKX0pfSksZS5jYWxsKG8uc3R5bGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjMyLGQzOjEyMH1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3IoIm1hcmtlci5jb2xvciIsbyksaSh0LCJtYXJrZXIiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUscyxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjExLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNX1dLDg2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz1uLm1hcmtlcixzPW8ubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seDA6e3ZhbFR5cGU6ImFueSJ9LHkwOnt2YWxUeXBlOiJhbnkifSx4Y2FsZW5kYXI6bi54Y2FsZW5kYXIseWNhbGVuZGFyOm4ueWNhbGVuZGFyLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41fSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxkZmx0OiJvdXRsaWVycyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZGZsdDohMX0saml0dGVyOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSxwb2ludHBvczp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdfSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwgMCwgMCwgMCkifSxzeW1ib2w6YSh7fSxvLnN5bWJvbCx7YXJyYXlPazohMX0pLG9wYWNpdHk6YSh7fSxvLm9wYWNpdHkse2FycmF5T2s6ITEsZGZsdDoxfSksc2l6ZTphKHt9LG8uc2l6ZSx7YXJyYXlPazohMX0pLGNvbG9yOmEoe30sby5jb2xvcix7YXJyYXlPazohMX0pLGxpbmU6e2NvbG9yOmEoe30scy5jb2xvcix7YXJyYXlPazohMSxkZmx0OmkuZGVmYXVsdExpbmV9KSx3aWR0aDphKHt9LHMud2lkdGgse2FycmF5T2s6ITEsZGZsdDowfSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LG91dGxpZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9fX0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfX0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjV9XSw4NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvLHMsbCx1LGMsaCxmLGQscD1hLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksbT1hLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iiksdj1lLm9yaWVudGF0aW9uLGc9W107ImgiPT09dj8ocj1wLG89IngiLHU9bSxjPSJ5Iik6KHI9bSxvPSJ5Iix1PXAsYz0ieCIpLHM9ci5tYWtlQ2FsY2RhdGEoZSxvKSxhLmV4cGFuZChyLHMse3BhZGRlZDohMH0pLGg9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcztyZXR1cm4gciBpbiBlP2g9YS5tYWtlQ2FsY2RhdGEoZSxyKToocz1yKyIwImluIGU/ZVtyKyIwIl06Im5hbWUiaW4gZSYmKCJjYXRlZ29yeSI9PT1hLnR5cGV8fG4oZS5uYW1lKSYmLTEhPT1bImxpbmVhciIsImxvZyJdLmluZGV4T2YoYS50eXBlKXx8aS5pc0RhdGVUaW1lKGUubmFtZSkmJiJkYXRlIj09PWEudHlwZSk/ZS5uYW1lOnQubnVtYm94ZXMscz1hLmQyYyhzLDAsZVtyKyJjYWxlbmRhciJdKSxoPW8ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSksaH0odCxlLGMsdSxzKTt2YXIgeT1pLmRpc3RpbmN0VmFscyhoKTtyZXR1cm4gZj15LnZhbHMsZD15Lm1pbkRpZmYvMixsPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHMsbCx1LGMsaD1hLmxlbmd0aCxmPWUubGVuZ3RoLGQ9W10scD1bXTtmb3Iocz0wO3M8aDsrK3MpbD1hW3NdLHRbc109e3BvczpsfSxwW3NdPWwtbyxkW3NdPVtdO2ZvcihwLnB1c2goYVtoLTFdK28pLHM9MDtzPGY7KytzKWM9ZVtzXSxuKGMpJiYodT1pLmZpbmRCaW4ocltzXSxwKSk+PTAmJnU8ZiYmZFt1XS5wdXNoKGMpO3JldHVybiBkfShnLHMsaCxmLGQpLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixhLG87Zm9yKG89MDtvPGUubGVuZ3RoOysrbylyPWVbb10uc29ydChpLnNvcnRlckFzYyksbj1yLmxlbmd0aCxhPXRbb10sYS52YWw9cixhLm1pbj1yWzBdLGEubWF4PXJbbi0xXSxhLm1lYW49aS5tZWFuKHIsbiksYS5zZD1pLnN0ZGV2KHIsbixhLm1lYW4pLGEucTE9aS5pbnRlcnAociwuMjUpLGEubWVkPWkuaW50ZXJwKHIsLjUpLGEucTM9aS5pbnRlcnAociwuNzUpLGEubGY9TWF0aC5taW4oYS5xMSxyW01hdGgubWluKGkuZmluZEJpbigyLjUqYS5xMS0xLjUqYS5xMyxyLCEwKSsxLG4tMSldKSxhLnVmPU1hdGgubWF4KGEucTMscltNYXRoLm1heChpLmZpbmRCaW4oMi41KmEucTMtMS41KmEucTEsciksMCldKSxhLmxvPTQqYS5xMS0zKmEucTMsYS51bz00KmEucTMtMyphLnExfShnLGwpLGc9Zy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsJiZ0LnZhbC5sZW5ndGh9KSxnLmxlbmd0aD8oZ1swXS50PXtib3hudW06dC5udW1ib3hlcyxkUG9zOmR9LHQubnVtYm94ZXMrKyxnKTpbe3Q6e2VtcHR5Ym94OiEwfX1dfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfXZhciB1LGM9bCgieSIpLGg9bCgieCIpO2lmKGMmJmMubGVuZ3RoKXU9InYiLGh8fGwoIngwIik7ZWxzZXtpZighaHx8IWgubGVuZ3RoKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dT0iaCIsbCgieTAiKX1pLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0scyksbCgib3JpZW50YXRpb24iLHUpLGwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxsKCJsaW5lLndpZHRoIiwyKSxsKCJmaWxsY29sb3IiLGEuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKSxsKCJ3aGlza2Vyd2lkdGgiKSxsKCJib3htZWFuIik7dmFyIGY9bi5jb2VyY2UyKHQsZSxvLCJtYXJrZXIub3V0bGllcmNvbG9yIiksZD1sKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiKSxwPWZ8fGQ/bCgiYm94cG9pbnRzIiwic3VzcGVjdGVkb3V0bGllcnMiKTpsKCJib3hwb2ludHMiKTtwJiYobCgiaml0dGVyIiwiYWxsIj09PXA/LjM6MCksbCgicG9pbnRwb3MiLCJhbGwiPT09cD8tMS41OjApLGwoIm1hcmtlci5zeW1ib2wiKSxsKCJtYXJrZXIub3BhY2l0eSIpLGwoIm1hcmtlci5zaXplIiksbCgibWFya2VyLmNvbG9yIixlLmxpbmUuY29sb3IpLGwoIm1hcmtlci5saW5lLmNvbG9yIiksbCgibWFya2VyLmxpbmUud2lkdGgiKSwic3VzcGVjdGVkb3V0bGllcnMiPT09cCYmKGwoIm1hcmtlci5saW5lLm91dGxpZXJjb2xvciIsZS5tYXJrZXIuY29sb3IpLGwoIm1hcmtlci5saW5lLm91dGxpZXJ3aWR0aCIpKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXR0cmlidXRlcyI6ODY0fV0sODY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7dmFyIGwsdSxjLGgsZixkLHAsbSx2LGc9dC5jZCx5PWdbMF0udHJhY2UsYj1nWzBdLnQseD10LnhhLF89dC55YSx3PVtdO2lmKGg9ImNsb3Nlc3QiPT09cz8yLjUqYi5iZFBvczpiLmJkUG9zLCJoIj09PXkub3JpZW50YXRpb24/KGw9ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4tZSx0Lm1heC1lKX0sdT1mdW5jdGlvbih0KXt2YXIgZT10LnBvcytiLmJQb3MtcjtyZXR1cm4gYS5pbmJveChlLWgsZStoKX0sZj0ieSIsZD1fLG09IngiLHY9eCk6KGw9ZnVuY3Rpb24odCl7dmFyIHI9dC5wb3MrYi5iUG9zLWU7cmV0dXJuIGEuaW5ib3goci1oLHIraCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4tcix0Lm1heC1yKX0sZj0ieCIsZD14LG09InkiLHY9XyksYz1hLmdldERpc3RhbmNlRnVuY3Rpb24ocyxsLHUpLGEuZ2V0Q2xvc2VzdChnLGMsdCksITEhPT10LmluZGV4KXt2YXIgTT1nW3QuaW5kZXhdLGs9eS5saW5lLmNvbG9yLEE9KHkubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KGspJiZ5LmxpbmUud2lkdGg/dC5jb2xvcj1rOm8ub3BhY2l0eShBKSYmeS5ib3hwb2ludHM/dC5jb2xvcj1BOnQuY29sb3I9eS5maWxsY29sb3IsdFtmKyIwIl09ZC5jMnAoTS5wb3MrYi5iUG9zLWIuYmRQb3MsITApLHRbZisiMSJdPWQuYzJwKE0ucG9zK2IuYlBvcytiLmJkUG9zLCEwKSxuLnRpY2tUZXh0KGQsZC5jMmwoTS5wb3MpLCJob3ZlciIpLnRleHQsdFtmKyJMYWJlbFZhbCJdPU0ucG9zO3ZhciBULFMsRT17fSxMPVsibWVkIiwibWluIiwicTEiLCJxMyIsIm1heCJdO3kuYm94bWVhbiYmTC5wdXNoKCJtZWFuIikseS5ib3hwb2ludHMmJltdLnB1c2guYXBwbHkoTCxbImxmIiwidWYiXSk7Zm9yKHZhciBDPTA7QzxMLmxlbmd0aDtDKyspKFQ9TFtDXSlpbiBNJiYhKE1bVF1pbiBFKSYmKEVbTVtUXV09ITAscD12LmMycChNW1RdLCEwKSxTPWkuZXh0ZW5kRmxhdCh7fSx0KSxTW20rIjAiXT1TW20rIjEiXT1wLFNbbSsiTGFiZWxWYWwiXT1NW1RdLFMuYXR0cj1ULCJtZWFuIj09PVQmJiJzZCJpbiBNJiYic2QiPT09eS5ib3htZWFuJiYoU1ttKyJlcnIiXT1NLnNkKSx0Lm5hbWU9IiIsdy5wdXNoKFMpKTtyZXR1cm4gd319fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDg2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uc2V0UG9zaXRpb25zPXQoIi4vc2V0X3Bvc2l0aW9ucyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImJveCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxuLmNhdGVnb3JpZXM9WyJjYXJ0ZXNpYW4iLCJzeW1ib2xzIiwib3JpZW50ZWQiLCJib3giLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc0LCIuL2F0dHJpYnV0ZXMiOjg2NCwiLi9jYWxjIjo4NjUsIi4vZGVmYXVsdHMiOjg2NiwiLi9ob3ZlciI6ODY3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjksIi4vbGF5b3V0X2RlZmF1bHRzIjo4NzAsIi4vcGxvdCI6ODcxLCIuL3NldF9wb3NpdGlvbnMiOjg3MiwiLi9zdHlsZSI6ODczfV0sODY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSJ9LGJveGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zfSxib3hncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zfX19LHt9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbyhyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfWZvcih2YXIgcyxsPTA7bDxyLmxlbmd0aDtsKyspaWYobi50cmFjZUlzKHJbbF0sImJveCIpKXtzPSEwO2JyZWFrfXMmJihvKCJib3htb2RlIiksbygiYm94Z2FwIiksbygiYm94Z3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4Njl9XSw4NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbigpe2w9MmU5fWZ1bmN0aW9uIGkoKXt2YXIgdD1sO3JldHVybiBsPSg2OTA2OSpsKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMobC10KTw0Mjk0OTY3Mjk/aSgpOmwvNDI5NDk2NzI5Nn12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPTJlOTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsLHUsYz10Ll9mdWxsTGF5b3V0LGg9ZS54YXhpcyxmPWUueWF4aXM7ZS5wbG90LnNlbGVjdCgiLmJveGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLmJveGVzIikuZGF0YShyKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgYm94ZXMiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udCxkPWVbMF0udHJhY2UscD0iZ3JvdXAiPT09Yy5ib3htb2RlJiZ0Lm51bWJveGVzPjEsbT1yLmRQb3MqKDEtYy5ib3hnYXApKigxLWMuYm94Z3JvdXBnYXApLyhwP3QubnVtYm94ZXM6MSksdj1wPzIqci5kUG9zKigoci5ib3hudW0rLjUpL3QubnVtYm94ZXMtLjUpKigxLWMuYm94Z2FwKTowLGc9bSpkLndoaXNrZXJ3aWR0aDtpZighMCE9PWQudmlzaWJsZXx8ci5lbXB0eWJveClyZXR1cm4gdm9pZCBhLnNlbGVjdCh0aGlzKS5yZW1vdmUoKTsiaCI9PT1kLm9yaWVudGF0aW9uPyhsPWYsdT1oKToobD1oLHU9Ziksci5iUG9zPXYsci5iZFBvcz1tLG4oKSxhLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguYm94IikuZGF0YShvLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuYXR0cigiY2xhc3MiLCJib3giKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWwuYzJwKHQucG9zK3YsITApLHI9bC5jMnAodC5wb3Mrdi1tLCEwKSxuPWwuYzJwKHQucG9zK3YrbSwhMCksaT1sLmMycCh0LnBvcyt2LWcsITApLHM9bC5jMnAodC5wb3MrditnLCEwKSxjPXUuYzJwKHQucTEsITApLGg9dS5jMnAodC5xMywhMCksZj1vLmNvbnN0cmFpbih1LmMycCh0Lm1lZCwhMCksTWF0aC5taW4oYyxoKSsxLE1hdGgubWF4KGMsaCktMSkscD11LmMycCghMT09PWQuYm94cG9pbnRzP3QubWluOnQubGYsITApLHk9dS5jMnAoITE9PT1kLmJveHBvaW50cz90Lm1heDp0LnVmLCEwKTsiaCI9PT1kLm9yaWVudGF0aW9uP2Euc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitmKyIsIityKyJWIituKyJNIitjKyIsIityKyJWIituKyJIIitoKyJWIityKyJaTSIrYysiLCIrZSsiSCIrcCsiTSIraCsiLCIrZSsiSCIreSsoMD09PWQud2hpc2tlcndpZHRoPyIiOiJNIitwKyIsIitpKyJWIitzKyJNIit5KyIsIitpKyJWIitzKSk6YS5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK3IrIiwiK2YrIkgiK24rIk0iK3IrIiwiK2MrIkgiK24rIlYiK2grIkgiK3IrIlpNIitlKyIsIitjKyJWIitwKyJNIitlKyIsIitoKyJWIit5KygwPT09ZC53aGlza2Vyd2lkdGg/IiI6Ik0iK2krIiwiK3ArIkgiK3MrIk0iK2krIiwiK3krIkgiK3MpKX0pLGQuYm94cG9pbnRzJiZhLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcucG9pbnRzIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudD1yLHQudHJhY2U9ZH0pLHR9KS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxyLG4sYSxzLGwsdSxjPSJhbGwiPT09ZC5ib3hwb2ludHM/dC52YWw6dC52YWwuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlPHQubGZ8fGU+dC51Zn0pLGg9TWF0aC5tYXgoKHQubWF4LXQubWluKS8xMCx0LnEzLXQucTEpLGY9MWUtOSpoLHA9LjAxKmgsZz1bXSx5PTA7aWYoZC5qaXR0ZXIpe2lmKDA9PT1oKWZvcih5PTEsZz1uZXcgQXJyYXkoYy5sZW5ndGgpLGU9MDtlPGMubGVuZ3RoO2UrKylnW2VdPTE7ZWxzZSBmb3IoZT0wO2U8Yy5sZW5ndGg7ZSsrKXI9TWF0aC5tYXgoMCxlLTUpLGE9Y1tyXSxuPU1hdGgubWluKGMubGVuZ3RoLTEsZSs1KSxzPWNbbl0sImFsbCIhPT1kLmJveHBvaW50cyYmKGNbZV08dC5sZj9zPU1hdGgubWluKHMsdC5sZik6YT1NYXRoLm1heChhLHQudWYpKSxsPU1hdGguc3FydChwKihuLXIpLyhzLWErZikpfHwwLGw9by5jb25zdHJhaW4oTWF0aC5hYnMobCksMCwxKSxnLnB1c2gobCkseT1NYXRoLm1heChsLHkpO3U9MipkLmppdHRlci95fXJldHVybiBjLm1hcChmdW5jdGlvbihlLHIpe3ZhciBuLGE9ZC5wb2ludHBvcztyZXR1cm4gZC5qaXR0ZXImJihhKz11Kmdbcl0qKGkoKS0uNSkpLG49ImgiPT09ZC5vcmllbnRhdGlvbj97eTp0LnBvcythKm0rdix4OmV9Ont4OnQucG9zK2EqbSt2LHk6ZX0sInN1c3BlY3RlZG91dGxpZXJzIj09PWQuYm94cG9pbnRzJiZlPHQudW8mJmU+dC5sbyYmKG4uc289ITApLG59KX0pLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKS5jYWxsKHMudHJhbnNsYXRlUG9pbnRzLGgsZiksZC5ib3htZWFuJiZhLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgubWVhbiIpLmRhdGEoby5pZGVudGl0eSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsIm1lYW4iKS5zdHlsZSh7ZmlsbDoibm9uZSIsInZlY3Rvci1lZmZlY3QiOiJub24tc2NhbGluZy1zdHJva2UifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1sLmMycCh0LnBvcyt2LCEwKSxyPWwuYzJwKHQucG9zK3YtbSwhMCksbj1sLmMycCh0LnBvcyt2K20sITApLGk9dS5jMnAodC5tZWFuLCEwKSxvPXUuYzJwKHQubWVhbi10LnNkLCEwKSxzPXUuYzJwKHQubWVhbit0LnNkLCEwKTsiaCI9PT1kLm9yaWVudGF0aW9uP2Euc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitpKyIsIityKyJWIituKygic2QiIT09ZC5ib3htZWFuPyIiOiJtMCwwTCIrbysiLCIrZSsiTCIraSsiLCIrcisiTCIrcysiLCIrZSsiWiIpKTphLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrcisiLCIraSsiSCIrbisoInNkIiE9PWQuYm94bWVhbj8iIjoibTAsMEwiK2UrIiwiK28rIkwiK3IrIiwiK2krIkwiK2UrIiwiK3MrIloiKSl9KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vbGliIjo3MjQsZDM6MTIwfV0sODcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbyxzLGwsdT10Ll9mdWxsTGF5b3V0LGM9ZS54YXhpcyxoPWUueWF4aXMsZj1bInYiLCJoIl07Zm9yKG89MDtvPGYubGVuZ3RoOysrbyl7dmFyIGQscCxtLHY9ZltvXSxnPVtdLHk9W10sYj0wLHg9MDtmb3Iocj0iaCI9PT12P2g6YyxzPTA7czx0LmNhbGNkYXRhLmxlbmd0aDsrK3MpZD10LmNhbGNkYXRhW3NdLHA9ZFswXS50LG09ZFswXS50cmFjZSwhMD09PW0udmlzaWJsZSYmbi50cmFjZUlzKG0sImJveCIpJiYhcC5lbXB0eWJveCYmbS5vcmllbnRhdGlvbj09PXYmJm0ueGF4aXM9PT1jLl9pZCYmbS55YXhpcz09PWguX2lkJiYoZy5wdXNoKHMpLCExIT09bS5ib3hwb2ludHMmJihiPU1hdGgubWF4KGIsbS5qaXR0ZXItbS5wb2ludHBvcy0xKSx4PU1hdGgubWF4KHgsbS5qaXR0ZXIrbS5wb2ludHBvcy0xKSkpO2ZvcihzPTA7czxnLmxlbmd0aDtzKyspZm9yKGQ9dC5jYWxjZGF0YVtnW3NdXSxsPTA7bDxkLmxlbmd0aDtsKyspeS5wdXNoKGRbbF0ucG9zKTtpZih5Lmxlbmd0aCl7dmFyIF89YS5kaXN0aW5jdFZhbHMoeSksdz1fLm1pbkRpZmYvMjtmb3IoeS5sZW5ndGg9PT1fLnZhbHMubGVuZ3RoJiYodC5udW1ib3hlcz0xKSxpLm1pbkR0aWNrKHIsXy5taW5EaWZmLF8udmFsc1swXSwhMCksbz0wO288Zy5sZW5ndGg7bysrKXt2YXIgTT1nW29dO3QuY2FsY2RhdGFbTV1bMF0udC5kUG9zPXd9dmFyIGs9KDEtdS5ib3hnYXApKigxLXUuYm94Z3JvdXBnYXApKncvdC5udW1ib3hlcztpLmV4cGFuZChyLF8udmFscyx7dnBhZG1pbnVzOncrYiprLHZwYWRwbHVzOncreCprfSl9fX19LHsiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYm94ZXMiKS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pLmVhY2goZnVuY3Rpb24oZSl7dmFyIHI9ZVswXS50cmFjZSxvPXIubGluZS53aWR0aDtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguYm94Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsbysicHgiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgicGF0aC5tZWFuIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOm8sInN0cm9rZS1kYXNoYXJyYXkiOjIqbysicHgsIitvKyJweCJ9KS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvciksbi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBvaW50cyBwYXRoIikuY2FsbChhLnBvaW50U3R5bGUscix0KX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LGQzOjEyMH1dLDg3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL29obGMvYXR0cmlidXRlcyIpLGE9dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxvPXtuYW1lOmkuaW5jcmVhc2luZy5uYW1lLHNob3dsZWdlbmQ6aS5pbmNyZWFzaW5nLnNob3dsZWdlbmQsbGluZTp7Y29sb3I6bi5leHRlbmRGbGF0KHt9LGEubGluZS5jb2xvciksd2lkdGg6bi5leHRlbmRGbGF0KHt9LGEubGluZS53aWR0aCl9LGZpbGxjb2xvcjpuLmV4dGVuZEZsYXQoe30sYS5maWxsY29sb3IpfTtlLmV4cG9ydHM9e3g6aS54LG9wZW46aS5vcGVuLGhpZ2g6aS5oaWdoLGxvdzppLmxvdyxjbG9zZTppLmNsb3NlLGxpbmU6e3dpZHRoOm4uZXh0ZW5kRmxhdCh7fSxhLmxpbmUud2lkdGgse30pfSxpbmNyZWFzaW5nOm4uZXh0ZW5kRGVlcCh7fSxvLHtsaW5lOntjb2xvcjp7ZGZsdDppLmluY3JlYXNpbmcubGluZS5jb2xvci5kZmx0fX19KSxkZWNyZWFzaW5nOm4uZXh0ZW5kRGVlcCh7fSxvLHtsaW5lOntjb2xvcjp7ZGZsdDppLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0fX19KSx0ZXh0OmkudGV4dCx3aGlza2Vyd2lkdGg6bi5leHRlbmRGbGF0KHt9LGEud2hpc2tlcndpZHRoLHtkZmx0OjB9KX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL2JveC9hdHRyaWJ1dGVzIjo4NjQsIi4uL29obGMvYXR0cmlidXRlcyI6OTg0fV0sODc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7byh0LGUscixuKSxyKG4rIi5saW5lLmNvbG9yIikscihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiKX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL29obGMvb2hsY19kZWZhdWx0cyIpLG89dCgiLi4vb2hsYy9kaXJlY3Rpb25fZGVmYXVsdHMiKSxzPXQoIi4uL29obGMvaGVscGVycyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHUocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGwscixuKX1pZihzLnB1c2hEdW1teVRyYW5zZm9ybU9wdHModCxlKSwwPT09YSh0LGUsdSxvKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3UoImxpbmUud2lkdGgiKSxuKHQsZSx1LCJpbmNyZWFzaW5nIiksbih0LGUsdSwiZGVjcmVhc2luZyIpLHUoInRleHQiKSx1KCJ3aGlza2Vyd2lkdGgiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL29obGMvZGlyZWN0aW9uX2RlZmF1bHRzIjo5ODYsIi4uL29obGMvaGVscGVycyI6OTg3LCIuLi9vaGxjL29obGNfZGVmYXVsdHMiOjk4OSwiLi9hdHRyaWJ1dGVzIjo4NzR9XSw4NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvcmVnaXN0ZXIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjYW5kbGVzdGljayIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInNob3dMZWdlbmQiLCJjYW5kbGVzdGljayJdLG1ldGE6e30sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIil9LG4odCgiLi4vYm94IikpLG4odCgiLi90cmFuc2Zvcm0iKSl9LHsiLi4vLi4vcGxvdF9hcGkvcmVnaXN0ZXIiOjc1NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4uL2JveCI6ODY4LCIuL2F0dHJpYnV0ZXMiOjg3NCwiLi9kZWZhdWx0cyI6ODc1LCIuL3RyYW5zZm9ybSI6ODc3fV0sODc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXt0eXBlOiJib3giLGJveHBvaW50czohMSx2aXNpYmxlOnQudmlzaWJsZSxob3ZlcmluZm86dC5ob3ZlcmluZm8sb3BhY2l0eTp0Lm9wYWNpdHkseGF4aXM6dC54YXhpcyx5YXhpczp0LnlheGlzLHRyYW5zZm9ybXM6by5tYWtlVHJhbnNmb3JtKHQsZSxyKX0saT10W3JdO3JldHVybiBpJiZhLmV4dGVuZEZsYXQobix7eDp0Lnh8fFswXSx4Y2FsZW5kYXI6dC54Y2FsZW5kYXIseTpbXS5jb25jYXQodC5sb3cpLmNvbmNhdCh0LmhpZ2gpLHdoaXNrZXJ3aWR0aDp0LndoaXNrZXJ3aWR0aCx0ZXh0OnQudGV4dCxuYW1lOmkubmFtZSxzaG93bGVnZW5kOmkuc2hvd2xlZ2VuZCxsaW5lOmkubGluZSxmaWxsY29sb3I6aS5maWxsY29sb3J9KSxufXZhciBpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL29obGMvaGVscGVycyIpO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImNhbmRsZXN0aWNrIixyLmF0dHJpYnV0ZXM9e30sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gby5jbGVhckVwaGVtZXJhbFRyYW5zZm9ybU9wdHMobiksby5jb3B5T0hMQyh0LGUpLHR9LHIudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsiY2FuZGxlc3RpY2siPT09YS50eXBlP3IucHVzaChuKGEsZSwiaW5jcmVhc2luZyIpLG4oYSxlLCJkZWNyZWFzaW5nIikpOnIucHVzaChhKX1yZXR1cm4gby5hZGRSYW5nZVNsaWRlcihyLGUubGF5b3V0KSxyfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yLmRpcmVjdGlvbixhPW8uZ2V0RmlsdGVyRm4obikscz1lLm9wZW4sbD1lLmhpZ2gsdT1lLmxvdyxjPWUuY2xvc2UsaD1zLmxlbmd0aCxmPVtdLGQ9W10scD1lLl9mdWxsSW5wdXQueD9mdW5jdGlvbih0KXt2YXIgcj1lLnhbdF07Zi5wdXNoKHIscixyLHIscixyKX06ZnVuY3Rpb24odCl7Zi5wdXNoKHQsdCx0LHQsdCx0KX0sbT0wO208aDttKyspYShzW21dLGNbbV0pJiZpKGxbbV0pJiZpKHVbbV0pJiYocChtKSxmdW5jdGlvbih0LGUscixuKXtkLnB1c2gocix0LG4sbixuLGUpfShzW21dLGxbbV0sdVttXSxjW21dKSk7ZS54PWYsZS55PWR9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9vaGxjL2hlbHBlcnMiOjk4NywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDg3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4pe1siYWF4aXMiLCJiYXhpcyJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG89YS5jaGFyQXQoMCkscz10W2FdfHx7fSxsPXt9LHU9e3RpY2tmb250OiJ4IixpZDpvKyJheGlzIixsZXR0ZXI6byxmb250OmUuZm9udCxuYW1lOmEsZGF0YTp0W29dLGNhbGVuZGFyOmUuY2FsZW5kYXIsZGZsdENvbG9yOm4sYmdDb2xvcjpyLnBhcGVyX2JnY29sb3IsZnVsbExheW91dDpyfTtpKHMsbCx1KSxsLl9jYXRlZ29yaWVzPWwuX2NhdGVnb3JpZXN8fFtdLGVbYV09bCx0W2FdfHwiLSI9PT1zLnR5cGV8fCh0W2FdPXt0eXBlOnMudHlwZX0pfSl9dmFyIGk9dCgiLi9heGlzX2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSl7aSgiYSIpfHwoaSgiZGEiKSxpKCJhMCIpKSxpKCJiIil8fChpKCJkYiIpLGkoImIwIikpLG4odCxlLHIsYSl9fSx7Ii4vYXhpc19kZWZhdWx0cyI6ODgzfV0sODc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KXx8ZT49MTApcmV0dXJuIG51bGw7Zm9yKHZhciByPTEvMCxpPS0xLzAsYT10Lmxlbmd0aCxvPTA7bzxhO28rKyl7dmFyIHM9dFtvXTtpZihBcnJheS5pc0FycmF5KHMpKXt2YXIgbD1uKHMsZSsxKTtsJiYocj1NYXRoLm1pbihsWzBdLHIpLGk9TWF0aC5tYXgobFsxXSxpKSl9ZWxzZSByPU1hdGgubWluKHMsciksaT1NYXRoLm1heChzLGkpfXJldHVybltyLGldfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0LDApfX0se31dLDg4MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmcifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxhMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGRhOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MX0sYjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGIwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sZGI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxjaGVhdGVyc2xvcGU6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxhYXhpczpuKHt9LGEpLGJheGlzOm4oe30sYSksZm9udDp7ZmFtaWx5Om4oe30saS5mYW1pbHkse2RmbHQ6JyJPcGVuIFNhbnMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZid9KSxzaXplOm4oe30saS5zaXplLHtkZmx0OjEyfSksY29sb3I6bih7fSxpLmNvbG9yLHtkZmx0Om8uZGVmYXVsdExpbmV9KX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om8uZGVmYXVsdExpbmV9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi9heGlzX2F0dHJpYnV0ZXMiOjg4Mn1dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCx1LGMsaCxmLGQscCxtLHYsZz1BcnJheS5pc0FycmF5KHIpPyJhIjoiYiIseT0iYSI9PT1nP3QuYWF4aXM6dC5iYXhpcyxiPXkuc21vb3RoaW5nLHg9ImEiPT09Zz90LmEyaTp0LmIyaixfPSJhIj09PWc/cjpuLHc9ImEiPT09Zz9uOnIsTT0iYSI9PT1nP2UuYS5sZW5ndGg6ZS5iLmxlbmd0aCxrPSJhIj09PWc/ZS5iLmxlbmd0aDplLmEubGVuZ3RoLEE9TWF0aC5mbG9vcigiYSI9PT1nP3QuYjJqKHcpOnQuYTJpKHcpKSxUPSJhIj09PWc/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsQSl9OmZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxBLGUpfTtiJiYobz1NYXRoLm1heCgwLE1hdGgubWluKGstMixBKSkscz1BLW8sYT0iYSI9PT1nP2Z1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9OmZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sbyxlLHMscil9KTt2YXIgUz14KF9bMF0pLEU9eChfWzFdKSxMPVM8RT8xOi0xLEM9MWUtOCooRS1TKSx6PUw+MD9NYXRoLmZsb29yOk1hdGguY2VpbCxJPUw+MD9NYXRoLmNlaWw6TWF0aC5mbG9vcixEPUw+MD9NYXRoLm1pbjpNYXRoLm1heCxQPUw+MD9NYXRoLm1heDpNYXRoLm1pbixPPXooUytDKSxSPUkoRS1DKTtjPVQoUyk7dmFyIEY9W1tjXV07Zm9yKGk9TztpKkw8UipMO2krPUwpbD1bXSxwPVAoUyxpKSxtPUQoRSxpK0wpLHY9bS1wLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNLTIsTWF0aC5mbG9vciguNSoocCttKSkpKSxoPVQobSksYiYmKGY9YSh1LHAtdSksZD1hKHUsbS11KSxsLnB1c2goW2NbMF0rZlswXS8zKnYsY1sxXStmWzFdLzMqdl0pLGwucHVzaChbaFswXS1kWzBdLzMqdixoWzFdLWRbMV0vMyp2XSkpLGwucHVzaChoKSxGLnB1c2gobCksYz1oO3JldHVybiBGfX0se31dLDg4MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IifSxzbW9vdGhpbmc6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowLG1heDoxLjN9LHRpdGxlOnt2YWxUeXBlOiJzdHJpbmcifSx0aXRsZWZvbnQ6bih7fSxpLHt9KSx0aXRsZW9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyItIiwibGluZWFyIiwiZGF0ZSIsImNhdGVnb3J5Il0sZGZsdDoiLSJ9LGF1dG9yYW5nZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwicmV2ZXJzZWQiXSxkZmx0OiEwfSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY2hlYXRlcnR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGV4IiwidmFsdWUiXSxkZmx0OiJ2YWx1ZSJ9LHRpY2ttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJhcnJheSJdLGRmbHQ6ImFycmF5In0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LHRpY2t2YWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJlbmQiLCJib3RoIiwibm9uZSJdLGRmbHQ6InN0YXJ0In0sdGlja2ZvbnQ6bih7fSxpLHt9KSx0aWNrYW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OiJhdXRvIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzaG93dGlja3ByZWZpeDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCJ9LHRpY2tzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxzaG93ZXhwb25lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwifSxleHBvbmVudGZvcm1hdDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsImUiLCJFIiwicG93ZXIiLCJTSSIsIkIiXSxkZmx0OiJCIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sY2F0ZWdvcnlvcmRlcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidHJhY2UiLCJjYXRlZ29yeSBhc2NlbmRpbmciLCJjYXRlZ29yeSBkZXNjZW5kaW5nIiwiYXJyYXkiXSxkZmx0OiJ0cmFjZSJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYWJlbHBhZGRpbmc6e3ZhbFR5cGU6ImludGVnZXIiLGRmbHQ6MTB9LGxhYmVscHJlZml4Ont2YWxUeXBlOiJzdHJpbmcifSxsYWJlbHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzaG93bGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lfSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LG1pbm9yZ3JpZGNvdW50Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LG1pbm9yZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3JncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGlnaHRMaW5lfSxzdGFydGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxzdGFydGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IifSxzdGFydGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LGVuZGxpbmU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxlbmRsaW5ld2lkdGg6ewp2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MX0sZW5kbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHRpY2swOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxhcnJheXRpY2swOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LGFycmF5ZHRpY2s6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGRmbHQ6MX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjAxLCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sODgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtpZigiLSI9PT10LnR5cGUpe3ZhciByPXQuX2lkLG49ci5jaGFyQXQoMCksaT1uKyJjYWxlbmRhciIsYT10W2ldO3QudHlwZT1kKGUsYSl9fXZhciBpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmFkZE9wYWNpdHksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vb3JkZXJlZF9jYXRlZ29yaWVzIiksZD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gZChyLG4pe3JldHVybiBzLmNvZXJjZSh0LGUsZyxyLG4pfWZ1bmN0aW9uIHAocixuKXtyZXR1cm4gcy5jb2VyY2UyKHQsZSxnLHIsbil9dmFyIG09ci5sZXR0ZXIsdj1yLmZvbnR8fHt9LGc9aVttKyJheGlzIl07ci5ub0hvdmVyPSEwLHIubmFtZSYmKGUuX25hbWU9ci5uYW1lLGUuX2lkPXIubmFtZSk7dmFyIHk9ZCgidHlwZSIpO2lmKCItIj09PXkmJihyLmRhdGEmJm4oZSxyLmRhdGEpLCItIj09PWUudHlwZT9lLnR5cGU9ImxpbmVhciI6eT10LnR5cGU9ZS50eXBlKSxkKCJzbW9vdGhpbmciKSxkKCJjaGVhdGVydHlwZSIpLGQoInNob3d0aWNrbGFiZWxzIiksZCgibGFiZWxwcmVmaXgiLG0rIiA9ICIpLGQoImxhYmVsc3VmZml4IiksZCgic2hvd3RpY2twcmVmaXgiKSxkKCJzaG93dGlja3N1ZmZpeCIpLGQoInNlcGFyYXRldGhvdXNhbmRzIiksZCgidGlja2Zvcm1hdCIpLGQoImV4cG9uZW50Zm9ybWF0IiksZCgic2hvd2V4cG9uZW50IiksZCgiY2F0ZWdvcnlvcmRlciIpLGQoInRpY2ttb2RlIiksZCgidGlja3ZhbHMiKSxkKCJ0aWNrdGV4dCIpLGQoInRpY2swIiksZCgiZHRpY2siKSwiYXJyYXkiPT09ZS50aWNrbW9kZSYmKGQoImFycmF5dGljazAiKSxkKCJhcnJheWR0aWNrIikpLGQoImxhYmVscGFkZGluZyIpLGUuX2hvdmVydGl0bGU9bSwiZGF0ZSI9PT15KXtvLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIixyLmNhbGVuZGFyKX1oKGUsci5mdWxsTGF5b3V0KTt2YXIgYj1kKCJjb2xvciIsci5kZmx0Q29sb3IpLHg9Yj09PXQuY29sb3I/Yjp2LmNvbG9yO2QoInRpdGxlIikscy5jb2VyY2VGb250KGQsInRpdGxlZm9udCIse2ZhbWlseTp2LmZhbWlseSxzaXplOk1hdGgucm91bmQoMS4yKnYuc2l6ZSksY29sb3I6eH0pLGQoInRpdGxlb2Zmc2V0IiksZCgidGlja2FuZ2xlIiksZCgiYXV0b3JhbmdlIiwhZS5pc1ZhbGlkUmFuZ2UodC5yYW5nZSkpJiZkKCJyYW5nZW1vZGUiKSxkKCJyYW5nZSIpLGUuY2xlYW5SYW5nZSgpLGQoImZpeGVkcmFuZ2UiKSxsKHQsZSxkLHkpLHUodCxlLGQseSxyKSxjKHQsZSxkKTt2YXIgXz1wKCJncmlkY29sb3IiLGEoYiwuMykpLHc9cCgiZ3JpZHdpZHRoIiksTT1kKCJzaG93Z3JpZCIpO018fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgaz1wKCJzdGFydGxpbmVjb2xvciIsYiksQT1wKCJzdGFydGxpbmV3aWR0aCIsdyk7ZCgic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIWt8fCEhQSl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIFQ9cCgiZW5kbGluZWNvbG9yIixiKSxTPXAoImVuZGxpbmV3aWR0aCIsdyk7cmV0dXJuIGQoImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhVHx8ISFTKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLE0/KGQoIm1pbm9yZ3JpZGNvdW50IiksZCgibWlub3Jncmlkd2lkdGgiLHcpLGQoIm1pbm9yZ3JpZGNvbG9yIixhKF8sLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLGUuX3NlcGFyYXRvcnM9ci5mdWxsTGF5b3V0LnNlcGFyYXRvcnMsZS5faW5pdGlhbENhdGVnb3JpZXM9ImNhdGVnb3J5Ij09PXk/ZihtLGUuY2F0ZWdvcnlvcmRlcixlLmNhdGVnb3J5YXJyYXksci5kYXRhKTpbXSwibm9uZSI9PT1lLnNob3d0aWNrbGFiZWxzJiYoZGVsZXRlIGUudGlja2ZvbnQsZGVsZXRlIGUudGlja2FuZ2xlLGRlbGV0ZSBlLnNob3dleHBvbmVudCxkZWxldGUgZS5leHBvbmVudGZvcm1hdCxkZWxldGUgZS50aWNrZm9ybWF0LGRlbGV0ZSBlLnNob3d0aWNrc3VmZml4LGRlbGV0ZSBlLnNob3d0aWNrcHJlZml4KSxlLnNob3d0aWNrc3VmZml4fHxkZWxldGUgZS50aWNrc3VmZml4LGUuc2hvd3RpY2twcmVmaXh8fGRlbGV0ZSBlLnRpY2twcmVmaXgsZCgidGlja21vZGUiKSwoIWUudGl0bGV8fGUudGl0bGUmJjA9PT1lLnRpdGxlLmxlbmd0aCkmJihkZWxldGUgZS50aXRsZWZvbnQsZGVsZXRlIGUudGl0bGVvZmZzZXQpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo3NjUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6NzY4LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vb3JkZXJlZF9jYXRlZ29yaWVzIjo3NzcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6NzgxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6NzgyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6Nzg0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2F0dHJpYnV0ZXMiOjg4MH1dLDg4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi9jaGVhdGVyX2Jhc2lzIiksYT10KCIuL2FycmF5X21pbm1heCIpLG89dCgiLi9tYXBfMmRfYXJyYXkiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSx1PXQoIi4vY2FsY19jbGlwcGF0aCIpLGM9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGg9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGY9bi5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzfHwieSIpLHA9ZS5hYXhpcyxtPWUuYmF4aXMsdj1lLl9hPWUuYSxnPWUuX2I9ZS5iLHk9e30sYj1lLnk7aWYoZS5fY2hlYXRlcil7dmFyIHg9ImluZGV4Ij09PXAuY2hlYXRlcnR5cGU/di5sZW5ndGg6dixfPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP2cubGVuZ3RoOmc7ZS54PXI9aSh4LF8sZS5jaGVhdGVyc2xvcGUpfWVsc2Ugcj1lLng7ZS5feD1lLng9cj1jKHIpLGUuX3k9ZS55PWI9YyhiKSxoKHIsdixnKSxoKGIsdixnKSxlLnNldFNjYWxlKCkseS54cD1lLnhwPW8oZS54cCxyLGYuYzJwKSx5LnlwPWUueXA9byhlLnlwLGIsZC5jMnApO3ZhciB3PWEociksTT1hKGIpLGs9LjUqKHdbMV0td1swXSksQT0uNSood1sxXSt3WzBdKSxUPS41KihNWzFdLU1bMF0pLFM9LjUqKE1bMV0rTVswXSk7cmV0dXJuIHc9W0EtMS4zKmssQSsxLjMqa10sTT1bUy0xLjMqVCxTKzEuMypUXSxuLmV4cGFuZChmLHcse3BhZGRlZDohMH0pLG4uZXhwYW5kKGQsTSx7cGFkZGVkOiEwfSkscyhlLHksImEiLCJiIikscyhlLHksImIiLCJhIiksbChlLHApLGwoZSxtKSx5LmNsaXBzZWdtZW50cz11KGUueGN0cmwsZS55Y3RybCxwLG0pLHkueD1yLHkueT1iLHkuYT12LHkuYj1nLFt5XX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSI6OTQ0LCIuL2FycmF5X21pbm1heCI6ODc5LCIuL2NhbGNfY2xpcHBhdGgiOjg4NSwiLi9jYWxjX2dyaWRsaW5lcyI6ODg2LCIuL2NhbGNfbGFiZWxzIjo4ODcsIi4vY2hlYXRlcl9iYXNpcyI6ODg5LCIuL21hcF8yZF9hcnJheSI6OTAxLCIuL3Ntb290aF9maWxsXzJkX2FycmF5Ijo5MDV9XSw4ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPVtdLGw9ISFyLnNtb290aGluZyx1PSEhbi5zbW9vdGhpbmcsYz10WzBdLmxlbmd0aC0xLGg9dC5sZW5ndGgtMTtmb3IoaT0wLGE9W10sbz1bXTtpPD1jO2krKylhW2ldPXRbMF1baV0sb1tpXT1lWzBdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT0wLGE9W10sbz1bXTtpPD1oO2krKylhW2ldPXRbaV1bY10sb1tpXT1lW2ldW2NdO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzp1fSksaT1jLGE9W10sbz1bXTtpPj0wO2ktLSlhW2MtaV09dFtoXVtpXSxvW2MtaV09ZVtoXVtpXTtmb3Iocy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6bH0pLGk9aCxhPVtdLG89W107aT49MDtpLS0pYVtoLWldPXRbaV1bMF0sb1toLWldPWVbaV1bMF07cmV0dXJuIHMucHVzaCh7eDphLHk6byxiaWN1YmljOnV9KSxzfX0se31dLDg4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2Z1bmN0aW9uIG8oZSl7dmFyIG4saSxvLHMsbCx1LGMsaCxmLGQscCx2LGc9W10seT1bXSxiPXt9O2lmKCJiIj09PXIpZm9yKGk9dC5iMmooZSksbz1NYXRoLmZsb29yKE1hdGgubWF4KDAsTWF0aC5taW4oUC0yLGkpKSkscz1pLW8sYi5sZW5ndGg9UCxiLmNyb3NzTGVuZ3RoPUQsYi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxpKX0sYi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixzKX0sbj0wO248RDtuKyspdT1NYXRoLm1pbihELTIsbiksYz1uLXUsaD10LmV2YWx4eShbXSxuLGkpLEUuc21vb3RoaW5nJiZuPjAmJihmPXQuZHh5ZGkoW10sbi0xLG8sMCxzKSxnLnB1c2gobFswXStmWzBdLzMpLHkucHVzaChsWzFdK2ZbMV0vMyksZD10LmR4eWRpKFtdLG4tMSxvLDEscyksZy5wdXNoKGhbMF0tZFswXS8zKSx5LnB1c2goaFsxXS1kWzFdLzMpKSxnLnB1c2goaFswXSkseS5wdXNoKGhbMV0pLGw9aDtlbHNlIGZvcihuPXQuYTJpKGUpLHU9TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKEQtMixuKSkpLGM9bi11LGIubGVuZ3RoPUQsYi5jcm9zc0xlbmd0aD1QLGIueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLG4sZSl9LGIuZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGooW10sdSxlLGMscil9LGk9MDtpPFA7aSsrKW89TWF0aC5taW4oUC0yLGkpLHM9aS1vLGg9dC5ldmFseHkoW10sbixpKSxFLnNtb290aGluZyYmaT4wJiYocD10LmR4eWRqKFtdLHUsaS0xLGMsMCksZy5wdXNoKGxbMF0rcFswXS8zKSx5LnB1c2gobFsxXStwWzFdLzMpLHY9dC5keHlkaihbXSx1LGktMSxjLDEpLGcucHVzaChoWzBdLXZbMF0vMykseS5wdXNoKGhbMV0tdlsxXS8zKSksZy5wdXNoKGhbMF0pLHkucHVzaChoWzFdKSxsPWg7cmV0dXJuIGIuYXhpc0xldHRlcj1yLGIuYXhpcz1NLGIuY3Jvc3NBeGlzPUUsYi52YWx1ZT1lLGIuY29uc3R2YXI9YSxiLmluZGV4PW0sYi54PWcsYi55PXksYi5zbW9vdGhpbmc9RS5zbW9vdGhpbmcsYn1mdW5jdGlvbiBzKGUpe3ZhciBuLGksbyxzLGwsdT1bXSxjPVtdLGg9e307aWYoaC5sZW5ndGg9dy5sZW5ndGgsaC5jcm9zc0xlbmd0aD1TLmxlbmd0aCwiYiI9PT1yKWZvcihvPU1hdGgubWF4KDAsTWF0aC5taW4oUC0yLGUpKSxsPU1hdGgubWluKDEsTWF0aC5tYXgoMCxlLW8pKSxoLnh5PWZ1bmN0aW9uKHIpe3JldHVybiB0LmV2YWx4eShbXSxyLGUpfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRpKFtdLGUsbyxyLGwpfSxuPTA7bjx6O24rKyl1W25dPUxbZSpPXVtuXSxjW25dPUNbZSpPXVtuXTtlbHNlIGZvcihpPU1hdGgubWF4KDAsTWF0aC5taW4oRC0yLGUpKSxzPU1hdGgubWluKDEsTWF0aC5tYXgoMCxlLWkpKSxoLnh5PWZ1bmN0aW9uKHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSxoLmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGksZSxzLHIpfSxuPTA7bjxJO24rKyl1W25dPUxbbl1bZSpPXSxjW25dPUNbbl1bZSpPXTtyZXR1cm4gaC5heGlzTGV0dGVyPXIsaC5heGlzPU0saC5jcm9zc0F4aXM9RSxoLnZhbHVlPXdbZV0saC5jb25zdHZhcj1hLGguaW5kZXg9ZSxoLng9dSxoLnk9YyxoLnNtb290aGluZz1FLnNtb290aGluZyxofXZhciBsLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF8sdz10W3JdLE09dFtyKyJheGlzIl0saz1NLl9ncmlkbGluZXM9W10sQT1NLl9taW5vcmdyaWRsaW5lcz1bXSxUPU0uX2JvdW5kYXJ5bGluZXM9W10sUz10W2FdLEU9dFthKyJheGlzIl07aWYoImFycmF5Ij09PU0udGlja21vZGUpZm9yKE0udGlja3ZhbHM9W10sbD0wO2w8dy5sZW5ndGg7bCsrKU0udGlja3ZhbHMucHVzaCh3W2xdKTt2YXIgTD10LnhjdHJsLEM9dC55Y3RybCx6PUxbMF0ubGVuZ3RoLEk9TC5sZW5ndGgsRD10LmEubGVuZ3RoLFA9dC5iLmxlbmd0aDtuLmNhbGNUaWNrcyhNKTt2YXIgTz1NLnNtb290aGluZz8zOjE7aWYoImFycmF5Ij09PU0udGlja21vZGUpe2ZvcihoPTVlLTE1LGY9W01hdGguZmxvb3IoKHcubGVuZ3RoLTEtTS5hcnJheXRpY2swKS9NLmFycmF5ZHRpY2sqKDEraCkpLE1hdGguY2VpbCgtTS5hcnJheXRpY2swL00uYXJyYXlkdGljay8oMStoKSldLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSksZD1mWzBdLTEscD1mWzFdKzEsbT1kO208cDttKyspKHU9TS5hcnJheXRpY2swK00uYXJyYXlkdGljayptKTwwfHx1PncubGVuZ3RoLTF8fGsucHVzaChpKHModSkse2NvbG9yOk0uZ3JpZGNvbG9yLHdpZHRoOk0uZ3JpZHdpZHRofSkpO2ZvcihtPWQ7bTxwO20rKylpZihjPU0uYXJyYXl0aWNrMCtNLmFycmF5ZHRpY2sqbSx5PU1hdGgubWluKGMrTS5hcnJheWR0aWNrLHcubGVuZ3RoLTEpLCEoYzwwfHxjPncubGVuZ3RoLTF8fHk8MHx8eT53Lmxlbmd0aC0xKSlmb3IoYj13W2NdLHg9d1t5XSxsPTA7bDxNLm1pbm9yZ3JpZGNvdW50O2wrKykoXz15LWMpPD0wfHwoZz1iKyh4LWIpKihsKzEpLyhNLm1pbm9yZ3JpZGNvdW50KzEpKihNLmFycmF5ZHRpY2svXykpPHdbMF18fGc+d1t3Lmxlbmd0aC0xXXx8QS5wdXNoKGkobyhnKSx7Y29sb3I6TS5taW5vcmdyaWRjb2xvcix3aWR0aDpNLm1pbm9yZ3JpZHdpZHRofSkpO00uc3RhcnRsaW5lJiZULnB1c2goaShzKDApLHtjb2xvcjpNLnN0YXJ0bGluZWNvbG9yLHdpZHRoOk0uc3RhcnRsaW5ld2lkdGh9KSksTS5lbmRsaW5lJiZULnB1c2goaShzKHcubGVuZ3RoLTEpLHtjb2xvcjpNLmVuZGxpbmVjb2xvcix3aWR0aDpNLmVuZGxpbmV3aWR0aH0pKX1lbHNle2ZvcihoPTVlLTE1LGY9W01hdGguZmxvb3IoKHdbdy5sZW5ndGgtMV0tTS50aWNrMCkvTS5kdGljayooMStoKSksTWF0aC5jZWlsKCh3WzBdLU0udGljazApL00uZHRpY2svKDEraCkpXS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pLGQ9ZlswXSxwPWZbMV0sbT1kO208PXA7bSsrKXY9TS50aWNrMCtNLmR0aWNrKm0say5wdXNoKGkobyh2KSx7Y29sb3I6TS5ncmlkY29sb3Isd2lkdGg6TS5ncmlkd2lkdGh9KSk7Zm9yKG09ZC0xO208cCsxO20rKylmb3Iodj1NLnRpY2swK00uZHRpY2sqbSxsPTA7bDxNLm1pbm9yZ3JpZGNvdW50O2wrKykoZz12K00uZHRpY2sqKGwrMSkvKE0ubWlub3JncmlkY291bnQrMSkpPHdbMF18fGc+d1t3Lmxlbmd0aC0xXXx8QS5wdXNoKGkobyhnKSx7Y29sb3I6TS5taW5vcmdyaWRjb2xvcix3aWR0aDpNLm1pbm9yZ3JpZHdpZHRofSkpO00uc3RhcnRsaW5lJiZULnB1c2goaShvKHdbMF0pLHtjb2xvcjpNLnN0YXJ0bGluZWNvbG9yLHdpZHRoOk0uc3RhcnRsaW5ld2lkdGh9KSksTS5lbmRsaW5lJiZULnB1c2goaShvKHdbdy5sZW5ndGgtMV0pLHtjb2xvcjpNLmVuZGxpbmVjb2xvcix3aWR0aDpNLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDg4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NH1dLDg4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLHU9TWF0aC5wb3cobypvK3MqcywuMjUpLGM9KHUqdSppLWwqbCpvKSpuLGg9KHUqdSphLWwqbCpzKSpuLGY9dSoobCt1KSozLGQ9bCoobCt1KSozO3JldHVybltbZVswXSsoZiYmYy9mKSxlWzFdKyhmJiZoL2YpXSxbZVswXS0oZCYmYy9kKSxlWzFdLShkJiZoL2QpXV19fSx7fV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLHUsYz1bXSxoPW4odCk/dC5sZW5ndGg6dCxmPW4oZSk/ZS5sZW5ndGg6ZSxkPW4odCk/dDpudWxsLHA9bihlKT9lOm51bGw7ZCYmKG89KGQubGVuZ3RoLTEpLyhkW2QubGVuZ3RoLTFdLWRbMF0pLyhoLTEpKSxwJiYocz0ocC5sZW5ndGgtMSkvKHBbcC5sZW5ndGgtMV0tcFswXSkvKGYtMSkpO3ZhciBtLHY9MS8wLGc9LTEvMDtmb3IoYT0wO2E8ZjthKyspZm9yKGNbYV09W10sdT1wPyhwW2FdLXBbMF0pKnM6YS8oZi0xKSxpPTA7aTxoO2krKylsPWQ/KGRbaV0tZFswXSkqbzppLyhoLTEpLG09bC11KnIsdj1NYXRoLm1pbihtLHYpLGc9TWF0aC5tYXgobSxnKSxjW2FdW2ldPW07dmFyIHk9MS8oZy12KSxiPS12Knk7Zm9yKGE9MDthPGY7YSsrKWZvcihpPTA7aTxoO2krKyljW2FdW2ldPXkqY1thXVtpXStiO3JldHVybiBjfX0seyIuLi8uLi9saWIiOjcyNH1dLDg5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj0tLjUqclswXSsxLjUqZVswXSxpPS0uNSpyWzFdKzEuNSplWzFdO3JldHVyblsoMipuK3RbMF0pLzMsKDIqaSt0WzFdKS8zXX12YXIgaT10KCIuL2NhdG11bGxfcm9tIiksYT10KCIuLi8uLi9saWIiKS5lbnN1cmVBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciB1LGMsaCxmLGQscCxtLHYsZyx5LGI9clswXS5sZW5ndGgseD1yLmxlbmd0aCxfPXM/MypiLTI6Yix3PWw/Myp4LTI6eDtmb3IodD1hKHQsdyksZT1hKGUsdyksaD0wO2g8dztoKyspdFtoXT1hKHRbaF0sXyksZVtoXT1hKGVbaF0sXyk7Zm9yKGM9MCxmPTA7Yzx4O2MrKyxmKz1sPzM6MSlmb3IoZD10W2ZdLHA9ZVtmXSxtPXJbY10sdj1vW2NdLHU9MCxoPTA7dTxiO3UrKyxoKz1zPzM6MSlkW2hdPW1bdV0scFtoXT12W3VdO2lmKHMpZm9yKGM9MCxmPTA7Yzx4O2MrKyxmKz1sPzM6MSl7Zm9yKHU9MSxoPTM7dTxiLTE7dSsrLGgrPTMpZz1pKFtyW2NdW3UtMV0sb1tjXVt1LTFdXSxbcltjXVt1XSxvW2NdW3VdXSxbcltjXVt1KzFdLG9bY11bdSsxXV0scyksdFtmXVtoLTFdPWdbMF1bMF0sZVtmXVtoLTFdPWdbMF1bMV0sdFtmXVtoKzFdPWdbMV1bMF0sZVtmXVtoKzFdPWdbMV1bMV07eT1uKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPXlbMF0sZVtmXVsxXT15WzFdLHk9bihbdFtmXVtfLTFdLGVbZl1bXy0xXV0sW3RbZl1bXy0zXSxlW2ZdW18tM11dLFt0W2ZdW18tNF0sZVtmXVtfLTRdXSksdFtmXVtfLTJdPXlbMF0sZVtmXVtfLTJdPXlbMV19aWYobClmb3IoaD0wO2g8XztoKyspe2ZvcihmPTM7Zjx3LTM7Zis9MylnPWkoW3RbZi0zXVtoXSxlW2YtM11baF1dLFt0W2ZdW2hdLGVbZl1baF1dLFt0W2YrM11baF0sZVtmKzNdW2hdXSxsKSx0W2YtMV1baF09Z1swXVswXSxlW2YtMV1baF09Z1swXVsxXSx0W2YrMV1baF09Z1sxXVswXSxlW2YrMV1baF09Z1sxXVsxXTt5PW4oW3RbMF1baF0sZVswXVtoXV0sW3RbMl1baF0sZVsyXVtoXV0sW3RbM11baF0sZVszXVtoXV0pLHRbMV1baF09eVswXSxlWzFdW2hdPXlbMV0seT1uKFt0W3ctMV1baF0sZVt3LTFdW2hdXSxbdFt3LTNdW2hdLGVbdy0zXVtoXV0sW3Rbdy00XVtoXSxlW3ctNF1baF1dKSx0W3ctMl1baF09eVswXSxlW3ctMl1baF09eVsxXX1pZihzJiZsKWZvcihmPTE7Zjx3O2YrPShmKzEpJTM9PTA/MjoxKXtmb3IoaD0zO2g8Xy0zO2grPTMpZz1pKFt0W2ZdW2gtM10sZVtmXVtoLTNdXSxbdFtmXVtoXSxlW2ZdW2hdXSxbdFtmXVtoKzNdLGVbZl1baCszXV0scyksdFtmXVtoLTFdPS41Kih0W2ZdW2gtMV0rZ1swXVswXSksZVtmXVtoLTFdPS41KihlW2ZdW2gtMV0rZ1swXVsxXSksdFtmXVtoKzFdPS41Kih0W2ZdW2grMV0rZ1sxXVswXSksZVtmXVtoKzFdPS41KihlW2ZdW2grMV0rZ1sxXVsxXSk7eT1uKFt0W2ZdWzBdLGVbZl1bMF1dLFt0W2ZdWzJdLGVbZl1bMl1dLFt0W2ZdWzNdLGVbZl1bM11dKSx0W2ZdWzFdPS41Kih0W2ZdWzFdK3lbMF0pLGVbZl1bMV09LjUqKGVbZl1bMV0reVsxXSkseT1uKFt0W2ZdW18tMV0sZVtmXVtfLTFdXSxbdFtmXVtfLTNdLGVbZl1bXy0zXV0sW3RbZl1bXy00XSxlW2ZdW18tNF1dKSx0W2ZdW18tMl09LjUqKHRbZl1bXy0yXSt5WzBdKSxlW2ZdW18tMl09LjUqKGVbZl1bXy0yXSt5WzFdKX1yZXR1cm5bdCxlXX19LHsiLi4vLi4vbGliIjo3MjQsIi4vY2F0bXVsbF9yb20iOjg4OH1dLDg5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1JFTEFUSVZFX0NVTExfVE9MRVJBTkNFOjFlLTZ9fSx7fV0sODkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJnI/ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLHUsYyxoO3IqPTMsbio9Mzt2YXIgZj1pKmksZD0xLWkscD1kKmQsbT1kKmkqMix2PS0zKnAsZz0zKihwLW0pLHk9MyoobS1mKSxiPTMqZix4PWEqYSxfPXgqYSx3PTEtYSxNPXcqdyxrPU0qdztmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKWM9dFtoXSxvPXYqY1tuXVtyXStnKmNbbl1bcisxXSt5KmNbbl1bcisyXStiKmNbbl1bciszXSxzPXYqY1tuKzFdW3JdK2cqY1tuKzFdW3IrMV0reSpjW24rMV1bcisyXStiKmNbbisxXVtyKzNdLGw9dipjW24rMl1bcl0rZypjW24rMl1bcisxXSt5KmNbbisyXVtyKzJdK2IqY1tuKzJdW3IrM10sdT12KmNbbiszXVtyXStnKmNbbiszXVtyKzFdK3kqY1tuKzNdW3IrMl0rYipjW24rM11bciszXSxlW2hdPWsqbyszKihNKmEqcyt3KngqbCkrXyp1O3JldHVybiBlfTplP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1O3IqPTM7dmFyIGM9aSppLGg9MS1pLGY9aCpoLGQ9aCppKjIscD0tMypmLG09MyooZi1kKSx2PTMqKGQtYyksZz0zKmMseT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyl1PXRbbF0sbz1wKnVbbl1bcl0rbSp1W25dW3IrMV0rdip1W25dW3IrMl0rZyp1W25dW3IrM10scz1wKnVbbisxXVtyXSttKnVbbisxXVtyKzFdK3YqdVtuKzFdW3IrMl0rZyp1W24rMV1bciszXSxlW2xdPXkqbythKnM7cmV0dXJuIGV9OnI/ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLHUsYyxoO24qPTM7dmFyIGY9YSphLGQ9ZiphLHA9MS1hLG09cCpwLHY9bSpwO2ZvcihjPTA7Yzx0Lmxlbmd0aDtjKyspaD10W2NdLG89aFtuXVtyKzFdLWhbbl1bcl0scz1oW24rMV1bcisxXS1oW24rMV1bcl0sbD1oW24rMl1bcisxXS1oW24rMl1bcl0sdT1oW24rM11bcisxXS1oW24rM11bcl0sZVtjXT12Km8rMyoobSphKnMrcCpmKmwpK2QqdTtyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4saSxhKXtlfHwoZT1bXSk7dmFyIG8scyxsLHUsYz0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyl1PXRbbF0sbz11W25dW3IrMV0tdVtuXVtyXSxzPXVbbisxXVtyKzFdLXVbbisxXVtyXSxlW2xdPWMqbythKnM7cmV0dXJuIGV9fX0se31dLDg5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1LGMsaDtyKj0zLG4qPTM7dmFyIGY9aSppLGQ9ZippLHA9MS1pLG09cCpwLHY9bSpwLGc9YSphLHk9MS1hLGI9eSp5LHg9eSphKjIsXz0tMypiLHc9MyooYi14KSxNPTMqKHgtZyksaz0zKmc7Zm9yKGg9MDtoPHQubGVuZ3RoO2grKyljPXRbaF0sbz1fKmNbbl1bcl0rdypjW24rMV1bcl0rTSpjW24rMl1bcl0raypjW24rM11bcl0scz1fKmNbbl1bcisxXSt3KmNbbisxXVtyKzFdK00qY1tuKzJdW3IrMV0raypjW24rM11bcisxXSxsPV8qY1tuXVtyKzJdK3cqY1tuKzFdW3IrMl0rTSpjW24rMl1bcisyXStrKmNbbiszXVtyKzJdLHU9XypjW25dW3IrM10rdypjW24rMV1bciszXStNKmNbbisyXVtyKzNdK2sqY1tuKzNdW3IrM10sZVtoXT12Km8rMyoobSppKnMrcCpmKmwpK2QqdTtyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe2V8fChlPVtdKTt2YXIgbyxzLGwsdSxjLGg7cio9Mzt2YXIgZj1hKmEsZD1mKmEscD0xLWEsbT1wKnAsdj1tKnA7Zm9yKGM9MDtjPHQubGVuZ3RoO2MrKyloPXRbY10sbz1oW24rMV1bcl0taFtuXVtyXSxzPWhbbisxXVtyKzFdLWhbbl1bcisxXSxsPWhbbisxXVtyKzJdLWhbbl1bcisyXSx1PWhbbisxXVtyKzNdLWhbbl1bciszXSxlW2NdPXYqbyszKihtKmEqcytwKmYqbCkrZCp1O3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1O24qPTM7dmFyIGM9MS1pLGg9YSphLGY9MS1hLGQ9ZipmLHA9ZiphKjIsbT0tMypkLHY9MyooZC1wKSxnPTMqKHAtaCkseT0zKmg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKyl1PXRbbF0sbz1tKnVbbl1bcl0rdip1W24rMV1bcl0rZyp1W24rMl1bcl0reSp1W24rM11bcl0scz1tKnVbbl1bcisxXSt2KnVbbisxXVtyKzFdK2cqdVtuKzJdW3IrMV0reSp1W24rM11bcisxXSxlW2xdPWMqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7ZXx8KGU9W10pO3ZhciBvLHMsbCx1LGM9MS1pO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspdT10W2xdLG89dVtuKzFdW3JdLXVbbl1bcl0scz11W24rMV1bcisxXS11W25dW3IrMV0sZVtsXT1jKm8raSpzO3JldHVybiBlfX19LHt9XSw4OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ZS0yLG89ci0yO3JldHVybiBuJiZpP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLHUsYyxoLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1kKSk7Zio9MyxkKj0zO3ZhciB2PXAqcCxnPXYqcCx5PTEtcCxiPXkqeSx4PWIqeSxfPW0qbSx3PV8qbSxNPTEtbSxrPU0qTSxBPWsqTTtmb3IoaD0wO2g8dC5sZW5ndGg7aCsrKWM9dFtoXSxpPXgqY1tkXVtmXSszKihiKnAqY1tkXVtmKzFdK3kqdipjW2RdW2YrMl0pK2cqY1tkXVtmKzNdLHM9eCpjW2QrMV1bZl0rMyooYipwKmNbZCsxXVtmKzFdK3kqdipjW2QrMV1bZisyXSkrZypjW2QrMV1bZiszXSxsPXgqY1tkKzJdW2ZdKzMqKGIqcCpjW2QrMl1bZisxXSt5KnYqY1tkKzJdW2YrMl0pK2cqY1tkKzJdW2YrM10sdT14KmNbZCszXVtmXSszKihiKnAqY1tkKzNdW2YrMV0reSp2KmNbZCszXVtmKzJdKStnKmNbZCszXVtmKzNdLGVbaF09QSppKzMqKGsqbSpzK00qXypsKSt3KnU7cmV0dXJuIGV9Om4/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsdSxjLGgsZj1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxwPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWYpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLWQpKTtmKj0zO3ZhciB2PXAqcCxnPXYqcCx5PTEtcCxiPXkqeSx4PWIqeSxfPTEtbTtmb3IoYz0wO2M8dC5sZW5ndGg7YysrKWg9dFtjXSxpPV8qaFtkXVtmXSttKmhbZCsxXVtmXSxzPV8qaFtkXVtmKzFdK20qaFtkKzFdW2YrMV0sbD1fKmhbZF1bZisyXSttKmhbZCsxXVtmKzFdLHU9XypoW2RdW2YrM10rbSpoW2QrMV1bZisxXSxlW2NdPXgqaSszKihiKnAqcyt5KnYqbCkrZyp1O3JldHVybiBlfTppP2Z1bmN0aW9uKGUscixuKXtlfHwoZT1bXSk7dmFyIGkscyxsLHUsYyxoLGY9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsci1mKSksbT1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1kKSk7ZCo9Mzt2YXIgdj1tKm0sZz12Km0seT0xLW0sYj15KnkseD1iKnksXz0xLXA7Zm9yKGM9MDtjPHQubGVuZ3RoO2MrKyloPXRbY10saT1fKmhbZF1bZl0rcCpoW2RdW2YrMV0scz1fKmhbZCsxXVtmXStwKmhbZCsxXVtmKzFdLGw9XypoW2QrMl1bZl0rcCpoW2QrMl1bZisxXSx1PV8qaFtkKzNdW2ZdK3AqaFtkKzNdW2YrMV0sZVtjXT14KmkrMyooYiptKnMreSp2KmwpK2cqdTtyZXR1cm4gZX06ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsdSxjPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSksaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGY9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItYykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4taCkpLHA9MS1kLG09MS1mO2ZvcihsPTA7bDx0Lmxlbmd0aDtsKyspdT10W2xdLGk9bSp1W2hdW2NdK2YqdVtoXVtjKzFdLHM9bSp1W2grMV1bY10rZip1W2grMV1bYysxXSxlW2xdPXAqaStkKnM7cmV0dXJuIGV9fX0se31dLDg5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4veHlfZGVmYXVsdHMiKSxhPXQoIi4vYWJfZGVmYXVsdHMiKSxvPXQoIi4vc2V0X2NvbnZlcnQiKSxzPXQoIi4vYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1lLl9jbGlwUGF0aElkPSJjbGlwIitlLnVpZCsiY2FycGV0Ijt2YXIgaD1jKCJjb2xvciIsbC5kZWZhdWx0TGluZSk7aWYobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSx1LGMsaCksIWUuYXx8IWUuYilyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2UuYS5sZW5ndGg8MyYmKGUuYWF4aXMuc21vb3RoaW5nPTApLGUuYi5sZW5ndGg8MyYmKGUuYmF4aXMuc21vb3RoaW5nPTApO3ZhciBmPWkodCxlLGMpO28oZSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIiksZnx8KGUudmlzaWJsZT0hMSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjAxLCIuLi8uLi9saWIiOjcyNCwiLi9hYl9kZWZhdWx0cyI6ODc4LCIuL2F0dHJpYnV0ZXMiOjg4MCwiLi9zZXRfY29udmVydCI6OTA0LCIuL3h5X2RlZmF1bHRzIjo5MDZ9XSw4OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHRbMF0pfX0se31dLDg5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLmFuaW1hdGFibGU9ITAsbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjYXJwZXQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4vYXR0cmlidXRlcyI6ODgwLCIuL2NhbGMiOjg4NCwiLi9kZWZhdWx0cyI6ODk1LCIuL3Bsb3QiOjkwM31dLDg5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj10Ll9mdWxsRGF0YS5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXQuX2Z1bGxEYXRhW2ldO2lmKGEuaW5kZXghPT1lLmluZGV4JiYoImNhcnBldCI9PT1hLnR5cGUmJihyfHwocj1hKSxhLmNhcnBldD09PWUuY2FycGV0KSkpcmV0dXJuIGF9cmV0dXJuIHJ9fSx7fV0sODk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoMD09PXQubGVuZ3RoKXJldHVybiIiO3ZhciBuLGk9W10sYT1yPzM6MTtmb3Iobj0wO248dC5sZW5ndGg7bis9YSlpLnB1c2godFtuXSsiLCIrZVtuXSksciYmbjx0Lmxlbmd0aC1hJiYoaS5wdXNoKCJDIiksaS5wdXNoKFt0W24rMV0rIiwiK2VbbisxXSx0W24rMl0rIiwiK2VbbisyXSsiICJdLmpvaW4oIiAiKSkpO3JldHVybiBpLmpvaW4ocj8iIjoiTCIpfX0se31dLDkwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2ZvcihBcnJheS5pc0FycmF5KHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl0W25dPXIoZVtuXSk7cmV0dXJuIHR9fSx7fV0sOTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saTtmb3IoQXJyYXkuaXNBcnJheSh0KT90Lmxlbmd0aD5lLmxlbmd0aCYmKHQ9dC5zbGljZSgwLGUubGVuZ3RoKSk6dD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspZm9yKEFycmF5LmlzQXJyYXkodFtuXSk/dFtuXS5sZW5ndGg+ZS5sZW5ndGgmJih0W25dPXRbbl0uc2xpY2UoMCxlLmxlbmd0aCkpOnRbbl09W10saT0wO2k8ZVswXS5sZW5ndGg7aSsrKXRbbl1baV09cihlW25dW2ldKTtyZXR1cm4gdH19LHt9XSw5MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1pWzBdKnQuZHBkeChlKSxzPWlbMV0qdC5kcGR5KHIpLGw9MSx1PTE7aWYoYSl7dmFyIGM9TWF0aC5zcXJ0KGlbMF0qaVswXStpWzFdKmlbMV0pLGg9TWF0aC5zcXJ0KGFbMF0qYVswXSthWzFdKmFbMV0pLGY9KGlbMF0qYVswXStpWzFdKmFbMV0pL2MvaDt1PU1hdGgubWF4KDAsZil9dmFyIGQ9MTgwKk1hdGguYXRhbjIocyxvKS9NYXRoLlBJO3JldHVybiBkPC05MD8oZCs9MTgwLGw9LWwpOmQ+OTAmJihkLT0xODAsbD0tbCkse2FuZ2xlOmQsZmxpcDpsLHA6dC5jMnAobixlLHIpLG9mZnNldE11bHRwbGllcjp1fX19LHt9XSw5MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49dC5zZWxlY3RBbGwoZSsiLiIrcikuZGF0YShbMF0pO3JldHVybiBuLmVudGVyKCkuYXBwZW5kKGUpLmNsYXNzZWQociwhMCksbn1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgaT1yWzBdLHU9clswXS50cmFjZSxjPWUueGF4aXMsaD1lLnlheGlzLGY9dS5hYXhpcyxkPXUuYmF4aXMscD10Ll9mdWxsTGF5b3V0LG09ZS5wbG90LnNlbGVjdEFsbCgiLmNhcnBldGxheWVyIiksdj1uKHAuX2RlZnMsImciLCJjbGlwcyIpLGc9bihtLCJnIiwiY2FycGV0Iit1LnVpZCkuY2xhc3NlZCgidHJhY2UiLCEwKSx5PW4oZywiZyIsIm1pbm9ybGF5ZXIiKSxiPW4oZywiZyIsIm1ham9ybGF5ZXIiKSx4PW4oZywiZyIsImJvdW5kYXJ5bGF5ZXIiKSxfPW4oZywiZyIsImxhYmVsbGF5ZXIiKTtnLnN0eWxlKCJvcGFjaXR5Iix1Lm9wYWNpdHkpLG8oYyxoLGIsZiwiYSIsZi5fZ3JpZGxpbmVzKSxvKGMsaCxiLGQsImIiLGQuX2dyaWRsaW5lcyksbyhjLGgseSxmLCJhIixmLl9taW5vcmdyaWRsaW5lcyksbyhjLGgseSxkLCJiIixkLl9taW5vcmdyaWRsaW5lcyksbyhjLGgseCxmLCJhLWJvdW5kYXJ5IixmLl9ib3VuZGFyeWxpbmVzKSxvKGMsaCx4LGQsImItYm91bmRhcnkiLGQuX2JvdW5kYXJ5bGluZXMpLGwodCxfLHUsaSxjLGgscyh0LGMsaCx1LGksXyxmLl9sYWJlbHMsImEtbGFiZWwiKSxzKHQsYyxoLHUsaSxfLGQuX2xhYmVscywiYi1sYWJlbCIpKSxhKHUsaSx2LGMsaCl9ZnVuY3Rpb24gYSh0LGUscixpLGEpe3ZhciBvLHMsbCx1LGM9ci5zZWxlY3QoIiMiK3QuX2NsaXBQYXRoSWQpO2Muc2l6ZSgpfHwoYz1yLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjYXJwZXRjbGlwIiwhMCkpO3ZhciBoPW4oYywicGF0aCIsImNhcnBldGJvdW5kYXJ5IikscD1lLmNsaXBzZWdtZW50cyxtPVtdO2Zvcih1PTA7dTxwLmxlbmd0aDt1Kyspbz1wW3VdLHM9ZihbXSxvLngsaS5jMnApLGw9ZihbXSxvLnksYS5jMnApLG0ucHVzaChkKHMsbCxvLmJpY3ViaWMpKTt2YXIgdj0iTSIrbS5qb2luKCJMIikrIloiO2MuYXR0cigiaWQiLHQuX2NsaXBQYXRoSWQpLGguYXR0cigiZCIsdil9ZnVuY3Rpb24gbyh0LGUscixuLGksYSl7dmFyIG89ImNvbnN0LSIraSsiLWxpbmVzIixzPXIuc2VsZWN0QWxsKCIuIitvKS5kYXRhKGEpO3MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG8sITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikscy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXIsaT1uLngsYT1uLnksbz1mKFtdLGksdC5jMnApLHM9ZihbXSxhLGUuYzJwKSxsPSJNIitkKG8scyxuLnNtb290aGluZyk7Yy5zZWxlY3QodGhpcykuYXR0cigiZCIsbCkuc3R5bGUoInN0cm9rZS13aWR0aCIsbi53aWR0aCkuc3R5bGUoInN0cm9rZSIsbi5jb2xvcikuc3R5bGUoImZpbGwiLCJub25lIil9KSxzLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9YS5zZWxlY3RBbGwoInRleHQuIitzKS5kYXRhKG8pO2wuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHMsITApO3ZhciB1PTA7cmV0dXJuIGwuZWFjaChmdW5jdGlvbihpKXt2YXIgYTtpZigiYXV0byI9PT1pLmF4aXMudGlja2FuZ2xlKWE9cChuLGUscixpLnh5LGkuZHh5KTtlbHNle3ZhciBvPShpLmF4aXMudGlja2FuZ2xlKzE4MCkqTWF0aC5QSS8xODA7YT1wKG4sZSxyLGkueHksW01hdGguY29zKG8pLE1hdGguc2luKG8pXSl9dmFyIHM9KGkuZW5kQW5jaG9yPy0xOjEpKmEuZmxpcCxsPWMuc2VsZWN0KHRoaXMpLmF0dHIoeyJ0ZXh0LWFuY2hvciI6cz4wPyJzdGFydCI6ImVuZCIsImRhdGEtbm90ZXgiOjF9KS5jYWxsKGguZm9udCxpLmZvbnQpLnRleHQoaS50ZXh0KS5jYWxsKG0uY29udmVydFRvVHNwYW5zLHQpLGY9aC5iQm94KHRoaXMpO2wuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS5wWzBdKyIsIithLnBbMV0rIikgcm90YXRlKCIrYS5hbmdsZSsiKXRyYW5zbGF0ZSgiK2kuYXhpcy5sYWJlbHBhZGRpbmcqcysiLCIrLjMqZi5oZWlnaHQrIikiKSx1PU1hdGgubWF4KHUsZi53aWR0aCtpLmF4aXMubGFiZWxwYWRkaW5nKX0pLGwuZXhpdCgpLnJlbW92ZSgpLHV9ZnVuY3Rpb24gbCh0LGUscixuLGksYSxvLHMpe3ZhciBsLGMsaCxmO2w9LjUqKHIuYVswXStyLmFbci5hLmxlbmd0aC0xXSksYz1yLmJbMF0saD1yLmFiMnh5KGwsYywhMCksZj1yLmR4eWRhX3JvdWdoKGwsYyksdSh0LGUscixuLGgsZixyLmFheGlzLGksYSxvLCJhLXRpdGxlIiksbD1yLmFbMF0sYz0uNSooci5iWzBdK3IuYltyLmIubGVuZ3RoLTFdKSxoPXIuYWIyeHkobCxjLCEwKSxmPXIuZHh5ZGJfcm91Z2gobCxjKSx1KHQsZSxyLG4saCxmLHIuYmF4aXMsaSxhLHMsImItdGl0bGUiKX1mdW5jdGlvbiB1KHQsZSxyLG4saSxhLG8scyxsLHUsZil7dmFyIGQ9W107by50aXRsZSYmZC5wdXNoKG8udGl0bGUpO3ZhciB2PWUuc2VsZWN0QWxsKCJ0ZXh0LiIrZikuZGF0YShkKTt2LmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChmLCEwKSx2LmVhY2goZnVuY3Rpb24oKXt2YXIgZT1wKHIscyxsLGksYSk7LTE9PT1bInN0YXJ0IiwiYm90aCJdLmluZGV4T2Yoby5zaG93dGlja2xhYmVscykmJih1PTApLHUrPW8udGl0bGVmb250LnNpemUrby50aXRsZW9mZnNldCxjLnNlbGVjdCh0aGlzKS50ZXh0KG8udGl0bGV8fCIiKS5jYWxsKG0uY29udmVydFRvVHNwYW5zLHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2UucFswXSsiLCIrZS5wWzFdKyIpIHJvdGF0ZSgiK2UuYW5nbGUrIikgdHJhbnNsYXRlKDAsIit1KyIpIikuY2xhc3NlZCgidXNlci1zZWxlY3Qtbm9uZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuY2FsbChoLmZvbnQsby50aXRsZWZvbnQpfSksdi5leGl0KCkucmVtb3ZlKCl9dmFyIGM9dCgiZDMiKSxoPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi9tYXBfMWRfYXJyYXkiKSxkPXQoIi4vbWFrZXBhdGgiKSxwPXQoIi4vb3JpZW50X3RleHQiKSxtPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspaSh0LGUscltuXSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi9tYWtlcGF0aCI6ODk5LCIuL21hcF8xZF9hcnJheSI6OTAwLCIuL29yaWVudF90ZXh0Ijo5MDIsZDM6MTIwfV0sOTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvc2VhcmNoIikuZmluZEJpbixhPXQoIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyIpLG89dCgiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciIpLHM9dCgiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciIpLGw9dCgiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmEscj10LmIsdT10LmEubGVuZ3RoLGM9dC5iLmxlbmd0aCxoPXQuYWF4aXMsZj10LmJheGlzLGQ9ZVswXSxwPWVbdS0xXSxtPXJbMF0sdj1yW2MtMV0sZz1lW2UubGVuZ3RoLTFdLWVbMF0seT1yW3IubGVuZ3RoLTFdLXJbMF0sYj1nKm4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0UseD15Km4uUkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U7ZC09YixwKz1iLG0tPXgsdis9eCx0LmlzVmlzaWJsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0PmQmJnQ8cCYmZT5tJiZlPHZ9LHQuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB0PGR8fHQ+cHx8ZTxtfHxlPnZ9LGguYzJwPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxmLmMycD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdC5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBlPXQueCxyPXQueSxuPWEodC54Y3RybCx0LnljdHJsLGUscixoLnNtb290aGluZyxmLnNtb290aGluZyk7dC54Y3RybD1uWzBdLHQueWN0cmw9blsxXSx0LmV2YWx4eT1vKFt0LnhjdHJsLHQueWN0cmxdLHUsYyxoLnNtb290aGluZyxmLnNtb290aGluZyksdC5keHlkaT1zKFt0LnhjdHJsLHQueWN0cmxdLGguc21vb3RoaW5nLGYuc21vb3RoaW5nKSx0LmR4eWRqPWwoW3QueGN0cmwsdC55Y3RybF0saC5zbW9vdGhpbmcsZi5zbW9vdGhpbmcpfSx0LmkyYT1mdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1heCgwLE1hdGguZmxvb3IodFswXSksdS0yKSxuPXRbMF0tcjtyZXR1cm4oMS1uKSplW3JdK24qZVtyKzFdfSx0LmoyYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGguZmxvb3IodFsxXSksdS0yKSxuPXRbMV0tZTtyZXR1cm4oMS1uKSpyW2VdK24qcltlKzFdfSx0LmlqMmFiPWZ1bmN0aW9uKGUpe3JldHVyblt0LmkyYShlWzBdKSx0LmoyYihlWzFdKV19LHQuYTJpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LGUpLHUtMikpLG49ZVtyXSxhPWVbcisxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih1LTEscisodC1uKS8oYS1uKSkpfSx0LmIyaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKGkodCxyKSxjLTIpKSxuPXJbZV0sYT1yW2UrMV07cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oYy0xLGUrKHQtbikvKGEtbikpKX0sdC5hYjJpaj1mdW5jdGlvbihlKXtyZXR1cm5bdC5hMmkoZVswXSksdC5iMmooZVsxXSldfSx0LmkyYz1mdW5jdGlvbihlLHIpe3JldHVybiB0LmV2YWx4eShbXSxlLHIpfSx0LmFiMnh5PWZ1bmN0aW9uKG4saSxhKXtpZighYSYmKG48ZVswXXx8bj5lW3UtMV18aTxyWzBdfHxpPnJbYy0xXSkpcmV0dXJuWyExLCExXTt2YXIgbz10LmEyaShuKSxzPXQuYjJqKGkpLGw9dC5ldmFseHkoW10sbyxzKTtpZihhKXt2YXIgaCxmLGQscCxtPTAsdj0wLGc9W107bjxlWzBdPyhoPTAsZj0wLG09KG4tZVswXSkvKGVbMV0tZVswXSkpOm4+ZVt1LTFdPyhoPXUtMixmPTEsbT0obi1lW3UtMV0pLyhlW3UtMV0tZVt1LTJdKSk6KGg9TWF0aC5tYXgoMCxNYXRoLm1pbih1LTIsTWF0aC5mbG9vcihvKSkpLGY9by1oKSxpPHJbMF0/KGQ9MCxwPTAsdj0oaS1yWzBdKS8oclsxXS1yWzBdKSk6aT5yW2MtMV0/KGQ9Yy0yLHA9MSx2PShpLXJbYy0xXSkvKHJbYy0xXS1yW2MtMl0pKTooZD1NYXRoLm1heCgwLE1hdGgubWluKGMtMixNYXRoLmZsb29yKHMpKSkscD1zLWQpLG0mJih0LmR4eWRpKGcsaCxkLGYscCksbFswXSs9Z1swXSptLGxbMV0rPWdbMV0qbSksdiYmKHQuZHh5ZGooZyxoLGQsZixwKSxsWzBdKz1nWzBdKnYsbFsxXSs9Z1sxXSp2KX1yZXR1cm4gbH0sdC5jMnA9ZnVuY3Rpb24odCxlLHIpe3JldHVybltlLmMycCh0WzBdKSxyLmMycCh0WzFdKV19LHQucDJ4PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5wMmModFswXSksci5wMmModFsxXSldfSx0LmRhZGk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihlLmxlbmd0aC0yLHQpKTtyZXR1cm4gZVtyKzFdLWVbcl19LHQuZGJkaj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHIubGVuZ3RoLTIsdCkpO3JldHVybiByW2UrMV0tcltlXX0sdC5keHlkYT1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmR4eWRpKG51bGwsZSxyLG4saSksbz10LmRhZGkoZSxuKTtyZXR1cm5bYVswXS9vLGFbMV0vb119LHQuZHh5ZGI9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaihudWxsLGUscixuLGkpLG89dC5kYmRqKHIsaSk7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRhX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1nKihufHwuMSksYT10LmFiMnh5KGUraSxyLCEwKSxvPXQuYWIyeHkoZS1pLHIsITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmR4eWRiX3JvdWdoPWZ1bmN0aW9uKGUscixuKXt2YXIgaT15KihufHwuMSksYT10LmFiMnh5KGUscitpLCEwKSxvPXQuYWIyeHkoZSxyLWksITApO3JldHVyblsuNSooYVswXS1vWzBdKS9pLC41KihhWzFdLW9bMV0pL2ldfSx0LmRwZHg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219LHQuZHBkeT1mdW5jdGlvbih0KXtyZXR1cm4gdC5fbX19fSx7Ii4uLy4uL2xpYi9zZWFyY2giOjczOCwiLi9jb21wdXRlX2NvbnRyb2xfcG9pbnRzIjo4OTAsIi4vY29uc3RhbnRzIjo4OTEsIi4vY3JlYXRlX2lfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiOjg5MiwiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciI6ODkzLCIuL2NyZWF0ZV9zcGxpbmVfZXZhbHVhdG9yIjo4OTR9XSw5MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scz1bXSxsPVtdLHU9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCxoPTA7Zm9yKGk9MDtpPHU7aSsrKWZvcihhPTA7YTxjO2ErKyl2b2lkIDA9PT10W2FdW2ldJiYocy5wdXNoKGkpLGwucHVzaChhKSx0W2FdW2ldPWZ1bmN0aW9uKGUscil7dmFyIG4saT0wLGE9MDtyZXR1cm4gZT4wJiZ2b2lkIDAhPT0obj10W3JdW2UtMV0pJiYoYSsrLGkrPW4pLGU8dS0xJiZ2b2lkIDAhPT0obj10W3JdW2UrMV0pJiYoYSsrLGkrPW4pLHI+MCYmdm9pZCAwIT09KG49dFtyLTFdW2VdKSYmKGErKyxpKz1uKSxyPGMtMSYmdm9pZCAwIT09KG49dFtyKzFdW2VdKSYmKGErKyxpKz1uKSxpL01hdGgubWF4KDEsYSl9KGksYSkpLGg9TWF0aC5tYXgoaCxNYXRoLmFicyh0W2FdW2ldKSk7aWYoIXMubGVuZ3RoKXJldHVybiB0O3ZhciBmLGQscCxtLHYsZyx5LGIseCxfLHcsTT0wLGs9MCxBPXMubGVuZ3RoO2Rve2ZvcihNPTAsbz0wO288QTtvKyspe2k9c1tvXSxhPWxbb107dmFyIFQsUyxFLEwsQyx6LEk9MCxEPTA7MD09PWk/KEM9TWF0aC5taW4odS0xLDIpLEU9ZVtDXSxMPWVbMV0sVD10W2FdW0NdLFM9dFthXVsxXSxEKz1TKyhTLVQpKihlWzBdLUwpLyhMLUUpLEkrKyk6aT09PXUtMSYmKEM9TWF0aC5tYXgoMCx1LTMpLEU9ZVtDXSxMPWVbdS0yXSxUPXRbYV1bQ10sUz10W2FdW3UtMl0sRCs9UysoUy1UKSooZVt1LTFdLUwpLyhMLUUpLEkrKyksKDA9PT1pfHxpPT09dS0xKSYmYT4wJiZhPGMtMSYmKGY9clthKzFdLXJbYV0sZD1yW2FdLXJbYS0xXSxEKz0oZCp0W2ErMV1baV0rZip0W2EtMV1baV0pLyhkK2YpLEkrKyksMD09PWE/KHo9TWF0aC5taW4oYy0xLDIpLEU9clt6XSxMPXJbMV0sVD10W3pdW2ldLFM9dFsxXVtpXSxEKz1TKyhTLVQpKihyWzBdLUwpLyhMLUUpLEkrKyk6YT09PWMtMSYmKHo9TWF0aC5tYXgoMCxjLTMpLEU9clt6XSxMPXJbYy0yXSxUPXRbel1baV0sUz10W2MtMl1baV0sRCs9UysoUy1UKSoocltjLTFdLUwpLyhMLUUpLEkrKyksKDA9PT1hfHxhPT09Yy0xKSYmaT4wJiZpPHUtMSYmKGY9ZVtpKzFdLWVbaV0sZD1lW2ldLWVbaS0xXSxEKz0oZCp0W2FdW2krMV0rZip0W2FdW2ktMV0pLyhkK2YpLEkrKyksST9ELz1JOihwPWVbaSsxXS1lW2ldLG09ZVtpXS1lW2ktMV0sdj1yW2ErMV0tclthXSxnPXJbYV0tclthLTFdLHk9cCptKihwK20pLGI9dipnKih2K2cpLEQ9KHkqKGcqdFthKzFdW2ldK3YqdFthLTFdW2ldKStiKihtKnRbYV1baSsxXStwKnRbYV1baS0xXSkpLyhiKihtK3ApK3kqKGcrdikpKSx4PUQtdFthXVtpXSxfPXgvaCxNKz1fKl8sdz1JPzA6Ljg1LHRbYV1baV0rPXgqKDErdyl9TT1NYXRoLnNxcnQoTSl9d2hpbGUoaysrPDEwMCYmTT4xZS01KTtyZXR1cm4gbi5sb2coIlNtb290aGVyIGNvbnZlcmdlZCB0byIsTSwiYWZ0ZXIiLGssIml0ZXJhdGlvbnMiKSx0fX0seyIuLi8uLi9saWIiOjcyNH1dLDkwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2hhc19jb2x1bW5zIiksaT10KCIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9W10sbz1yKCJ4Iik7byYmIW4obykmJmEucHVzaCgieCIpLGUuX2NoZWF0ZXI9IW87dmFyIHM9cigieSIpO2lmKHMmJiFuKHMpJiZhLnB1c2goInkiKSxvfHxzKXJldHVybiBhLmxlbmd0aCYmaShlLGUuYWF4aXMsZS5iYXhpcywiYSIsImIiLGEpLCEwfX0seyIuLi9oZWF0bWFwL2NvbnZlcnRfY29sdW1uX3h5eiI6OTQ2LCIuL2hhc19jb2x1bW5zIjo4OTZ9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPW4ubWFya2VyLmxpbmU7ZS5leHBvcnRzPXMoe30se2xvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxvY2F0aW9ubW9kZTpuLmxvY2F0aW9ubW9kZSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG1hcmtlcjp7bGluZTp7Y29sb3I6bC5jb2xvcix3aWR0aDpzKHt9LGwud2lkdGgse2RmbHQ6MX0pfX0saG92ZXJpbmZvOnMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsibG9jYXRpb24iLCJ6IiwidGV4dCIsIm5hbWUiXX0pfSxpLHtjb2xvcmJhcjphfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwNjJ9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtuKGUsZS56LCIiLCJ6Iil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDh9XSw5MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGwsdT1zKCJsb2NhdGlvbnMiKTtpZih1JiYobD11Lmxlbmd0aCksIXV8fCFsKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dmFyIGM9cygieiIpO2lmKCFBcnJheS5pc0FycmF5KGMpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7Yy5sZW5ndGg+bCYmKGUuej1jLnNsaWNlKDAsbCkpLHMoImxvY2F0aW9ubW9kZSIpLHMoInRleHQiKSxzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5saW5lLndpZHRoIiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MTEsIi4uLy4uL2xpYiI6NzI0LCIuL2F0dHJpYnV0ZXMiOjkwN31dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb2NhdGlvbj1lLmxvY2F0aW9uLHQuej1lLnosdH19LHt9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgbz1lLmhvdmVyaW5mbyxzPSJhbGwiPT09bz9hLmhvdmVyaW5mby5mbGFnczpvLnNwbGl0KCIrIiksbD0tMSE9PXMuaW5kZXhPZigibmFtZSIpLHU9LTEhPT1zLmluZGV4T2YoImxvY2F0aW9uIiksYz0tMSE9PXMuaW5kZXhPZigieiIpLGg9LTEhPT1zLmluZGV4T2YoInRleHQiKSxmPSFsJiZ1LGQ9W107Zj90Lm5hbWVPdmVycmlkZT1yLmlkOihsJiYodC5uYW1lT3ZlcnJpZGU9ZS5uYW1lKSx1JiZkLnB1c2goci5pZCkpLGMmJmQucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gaS50aWNrVGV4dChuLG4uYzJsKHQpLCJob3ZlciIpLnRleHR9KHIueikpLGgmJmQucHVzaChyLnR4KSx0LmV4dHJhVGV4dD1kLmpvaW4oIjxicj4iKX12YXIgaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2Qscj1lWzBdLnRyYWNlLGk9dC5zdWJwbG90LGE9aS5jaG9yb3BsZXRoSG92ZXJQdDtpZihhKXt2YXIgbz1pLnByb2plY3Rpb24oYS5wcm9wZXJ0aWVzLmN0KTtyZXR1cm4gdC54MD10LngxPW9bMF0sdC55MD10LnkxPW9bMV0sdC5pbmRleD1hLmluZGV4LHQubG9jYXRpb249YS5pZCx0Lno9YS56LG4odCxyLGEsaS5tb2NrQXhpcyksW3RdfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi9hdHRyaWJ1dGVzIjo5MDd9XSw5MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjaG9yb3BsZXRoIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dlbyIpLG4uY2F0ZWdvcmllcz1bImdlbyIsIm5vT3BhY2l0eSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9nZW8iOjc5MiwiLi4vaGVhdG1hcC9jb2xvcmJhciI6OTQ1LCIuL2F0dHJpYnV0ZXMiOjkwNywiLi9jYWxjIjo5MDgsIi4vZGVmYXVsdHMiOjkwOSwiLi9ldmVudF9kYXRhIjo5MTAsIi4vaG92ZXIiOjkxMSwiLi9wbG90Ijo5MTN9XSw5MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcixuPVtdLGk9dC5sb2NhdGlvbnMsYT1pLmxlbmd0aCxvPXUodCxlKSxzPSh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9LGw9MDtsPGE7bCsrKShyPWModC5sb2NhdGlvbm1vZGUsaVtsXSxvKSkmJihyLno9dC56W2xdLHZvaWQgMCE9PXQudGV4dCYmKHIudHg9dC50ZXh0W2xdKSxoKHMuY29sb3IsciwibWxjIixsKSxoKHMud2lkdGgsciwibWx3IixsKSxyLmluZGV4PWwsbi5wdXNoKHIpKTtyZXR1cm4gbi5sZW5ndGg+MCYmKG5bMF0udHJhY2U9dCksbn1mdW5jdGlvbiBpKHQpe3QuZnJhbWV3b3JrLnNlbGVjdEFsbCgiZy50cmFjZS5jaG9yb3BsZXRoIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9YS5zZWxlY3QodGhpcyksbj1lLm1hcmtlcnx8e30saT1uLmxpbmV8fHt9LHU9bC5tYWtlQ29sb3JTY2FsZUZ1bmMobC5leHRyYWN0U2NhbGUoZS5jb2xvcnNjYWxlLGUuem1pbixlLnptYXgpKTtyLnNlbGVjdEFsbCgicGF0aC5jaG9yb3BsZXRobG9jYXRpb24iKS5lYWNoKGZ1bmN0aW9uKHQpe2Euc2VsZWN0KHRoaXMpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHQpe3JldHVybiB1KHQueil9KS5jYWxsKG8uc3Ryb2tlLHQubWxjfHxpLmNvbG9yKS5jYWxsKHMuZGFzaExpbmUsIiIsdC5tbHd8fGkud2lkdGh8fDApfSl9KX12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx1PXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMsYz10KCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIikubG9jYXRpb25Ub0ZlYXR1cmUsaD10KCIuLi8uLi9saWIvYXJyYXlfdG9fY2FsY19pdGVtIiksZj10KCIuLi8uLi9wbG90cy9nZW8vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBvKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH12YXIgcyxsPXQuZnJhbWV3b3JrLHU9bC5zZWxlY3QoImcuY2hvcm9wbGV0aGxheWVyIiksYz1sLnNlbGVjdCgiZy5iYXNlbGF5ZXIiKSxoPWwuc2VsZWN0KCJnLmJhc2VsYXllcm92ZXJjaG9yb3BsZXRoIiksZD1mLmJhc2VMYXllcnNPdmVyQ2hvcm9wbGV0aCxwPXUuc2VsZWN0QWxsKCJnLnRyYWNlLmNob3JvcGxldGgiKS5kYXRhKGUsbyk7cC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2UgY2hvcm9wbGV0aCIpLHAuZXhpdCgpLnJlbW92ZSgpLHAuZWFjaChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLGk9bihyLHQudG9wb2pzb24pLG89YS5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmNob3JvcGxldGhsb2NhdGlvbiIpLmRhdGEoaSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNob3JvcGxldGhsb2NhdGlvbiIsITApLm9uKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe3QuY2hvcm9wbGV0aEhvdmVyUHQ9ZX0pLm9uKCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0LmNob3JvcGxldGhIb3ZlclB0PW51bGx9KSxvLmV4aXQoKS5yZW1vdmUoKX0pLGguc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7Zm9yKHZhciBtPTA7bTxkLmxlbmd0aDttKyspcz1kW21dLGMuc2VsZWN0KCJnLiIrcykucmVtb3ZlKCksdC5kcmF3VG9wbyhoLHMsciksdC5zdHlsZUxheWVyKGgscyxyKTtpKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vbGliL2FycmF5X3RvX2NhbGNfaXRlbSI6NzA5LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3MTgsIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzQ1LCIuLi8uLi9wbG90cy9nZW8vY29uc3RhbnRzIjo3OTAsZDM6MTIwfV0sOTE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9aS5saW5lO2UuZXhwb3J0cz11KHt9LHt6Om4ueix4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6bi50ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSx4dHlwZTpuLnh0eXBlLHl0eXBlOm4ueXR5cGUsCmNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsYXV0b2NvbnRvdXI6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImRvY2FsYyJ9LG5jb250b3Vyczp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZToiZG9jYWxjIn0sY29udG91cnM6e3N0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiZG9wbG90In0sZW5kOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToiZG9wbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6ImRvcGxvdCJ9LGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiaGVhdG1hcCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJkb2NhbGMifSxzaG93bGluZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImRvcGxvdCJ9LHNob3dsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImRvcGxvdCJ9LGxhYmVsZm9udDp1KHt9LGwse2ZhbWlseTp1KHt9LGwuZmFtaWx5LHtlZGl0VHlwZToiZG9wbG90In0pLHNpemU6dSh7fSxsLnNpemUse2VkaXRUeXBlOiJkb3Bsb3QifSksY29sb3I6dSh7fSxsLmNvbG9yLHtlZGl0VHlwZToiZG9zdHlsZSJ9KX0pLGxhYmVsZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImRvcGxvdCJ9fSxsaW5lOntjb2xvcjp1KHt9LGMuY29sb3Ise30pLHdpZHRoOmMud2lkdGgsZGFzaDpzLHNtb290aGluZzp1KHt9LGMuc21vb3RoaW5nLHt9KX19LGEse2F1dG9jb2xvcnNjYWxlOnUoe30sYS5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHptaW46dSh7fSxhLnptaW4se2VkaXRUeXBlOiJkb2NhbGMifSksem1heDp1KHt9LGEuem1heCx7ZWRpdFR5cGU6ImRvY2FsYyJ9KX0se2NvbG9yYmFyOm99KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYyNSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OCwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NDIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDkxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj17dHlwZToibGluZWFyIixyYW5nZTpbdCxlXX07cmV0dXJuIGkuYXV0b1RpY2tzKG4sKGUtdCkvKHJ8fDE1KSksbn12YXIgaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdCxvPXQoIi4uL2hlYXRtYXAvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW8odCxlKSxzPWUuY29udG91cnM7aWYoITEhPT1lLmF1dG9jb250b3VyKXt2YXIgbD1uKGUuem1pbixlLnptYXgsZS5uY29udG91cnMpO3Muc2l6ZT1sLmR0aWNrLHMuc3RhcnQ9aS50aWNrRmlyc3QobCksbC5yYW5nZS5yZXZlcnNlKCkscy5lbmQ9aS50aWNrRmlyc3QobCkscy5zdGFydD09PWUuem1pbiYmKHMuc3RhcnQrPXMuc2l6ZSkscy5lbmQ9PT1lLnptYXgmJihzLmVuZC09cy5zaXplKSxzLnN0YXJ0PnMuZW5kJiYocy5zdGFydD1zLmVuZD0ocy5zdGFydCtzLmVuZCkvMiksZS5faW5wdXQuY29udG91cnN8fChlLl9pbnB1dC5jb250b3Vycz17fSksYShlLl9pbnB1dC5jb250b3Vycyx7c3RhcnQ6cy5zdGFydCxlbmQ6cy5lbmQsc2l6ZTpzLnNpemV9KSxlLl9pbnB1dC5hdXRvY29udG91cj0hMH1lbHNle3ZhciB1PXMuc3RhcnQsYz1zLmVuZCxoPWUuX2lucHV0LmNvbnRvdXJzO2lmKHU+YyYmKHMuc3RhcnQ9aC5zdGFydD1jLGM9cy5lbmQ9aC5lbmQ9dSx1PXMuc3RhcnQpLCEocy5zaXplPjApKXt2YXIgZjtmPXU9PT1jPzE6bih1LGMsZS5uY29udG91cnMpLmR0aWNrLGguc2l6ZT1zLnNpemU9Zn19cmV0dXJuIHJ9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9oZWF0bWFwL2NhbGMiOjk0M31dLDkxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3IiksYT10KCIuL21ha2VfY29sb3JfbWFwIiksbz10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxzPSJjYiIrci51aWQ7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrcykucmVtb3ZlKCksIXIuc2hvd3NjYWxlKXJldHVybiB2b2lkIG4uYXV0b01hcmdpbih0LHMpO3ZhciBsPWkodCxzKTtlWzBdLnQuY2I9bDt2YXIgdT1yLmNvbnRvdXJzLGM9ci5saW5lLGg9dS5zaXplfHwxLGY9dS5jb2xvcmluZyxkPWEocix7aXNDb2xvcmJhcjohMH0pOyJoZWF0bWFwIj09PWYmJmwuZmlsbGxldmVscyh7c3RhcnQ6ci56bWluLGVuZDpyLnptYXgsc2l6ZTooci56bWF4LXIuem1pbikvMjU0fSksbC5maWxsY29sb3IoImZpbGwiPT09Znx8ImhlYXRtYXAiPT09Zj9kOiIiKS5saW5lKHtjb2xvcjoibGluZXMiPT09Zj9kOmMuY29sb3Isd2lkdGg6ITEhPT11LnNob3dsaW5lcz9jLndpZHRoOjAsZGFzaDpjLmRhc2h9KS5sZXZlbHMoe3N0YXJ0OnUuc3RhcnQsZW5kOm8odSksc2l6ZTpofSkub3B0aW9ucyhyLmNvbG9yYmFyKSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciOjYwNSwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi9lbmRfcGx1cyI6OTIwLCIuL21ha2VfY29sb3JfbWFwIjo5MjR9XSw5MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtCT1RUT01TVEFSVDpbMSw5LDEzLDEwNCw3MTNdLFRPUFNUQVJUOls0LDYsNywxMDQsNzEzXSxMRUZUU1RBUlQ6WzgsMTIsMTQsMjA4LDExMTRdLFJJR0hUU1RBUlQ6WzIsMywxMSwyMDgsMTExNF0sTkVXREVMVEE6W251bGwsWy0xLDBdLFswLC0xXSxbLTEsMF0sWzEsMF0sbnVsbCxbMCwtMV0sWy0xLDBdLFswLDFdLFswLDFdLG51bGwsWzAsMV0sWzEsMF0sWzEsMF0sWzAsLTFdXSxDSE9PU0VTQURETEU6ezEwNDpbNCwxXSwyMDg6WzIsOF0sNzEzOls3LDEzXSwxMTE0OlsxMSwxNF19LFNBRERMRVJFTUFJTkRFUjp7MTo0LDI6OCw0OjEsNzoxMyw4OjIsMTE6MTQsMTM6NywxNDoxMX0sTEFCRUxESVNUQU5DRToyLExBQkVMSU5DUkVBU0U6MTAsTEFCRUxNSU46MyxMQUJFTE1BWDoxMCxMQUJFTE9QVElNSVpFUjp7RURHRUNPU1Q6MSxBTkdMRUNPU1Q6MSxORUlHSEJPUkNPU1Q6NSxTQU1FTEVWRUxGQUNUT1I6MTAsU0FNRUxFVkVMRElTVEFOQ0U6NSxNQVhDT1NUOjEwMCxJTklUSUFMU0VBUkNIUE9JTlRTOjEwLElURVJBVElPTlM6NX19fSx7fV0sOTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPW4uY29lcmNlMih0LGUsaSwiY29udG91cnMuc3RhcnQiKSxzPW4uY29lcmNlMih0LGUsaSwiY29udG91cnMuZW5kIiksbD0hMT09PW98fCExPT09cyx1PXIoImNvbnRvdXJzLnNpemUiKTshKGE9bD9lLmF1dG9jb250b3VyPSEwOnIoImF1dG9jb250b3VyIiwhMSkpJiZ1fHxyKCJuY29udG91cnMiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTE0fV0sOTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC9oYXNfY29sdW1ucyIpLGE9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxvPXQoIi4vY29udG91cnNfZGVmYXVsdHMiKSxzPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9aWYoIWEodCxlLGMsdSkpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTtjKCJ0ZXh0IiksYygiY29ubmVjdGdhcHMiLGkoZSkpLG8odCxlLGMpLHModCxlLGMsdSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9oZWF0bWFwL2hhc19jb2x1bW5zIjo5NDksIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjo5NTcsIi4vYXR0cmlidXRlcyI6OTE0LCIuL2NvbnRvdXJzX2RlZmF1bHRzIjo5MTgsIi4vc3R5bGVfZGVmYXVsdHMiOjkyOH1dLDkyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZW5kK3Quc2l6ZS8xZTZ9fSx7fV0sOTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIE1hdGguYWJzKHRbMF0tZVswXSk8ciYmTWF0aC5hYnModFsxXS1lWzFdKTxufWZ1bmN0aW9uIGkodCxlKXt2YXIgcj10WzJdLWVbMl0sbj10WzNdLWVbM107cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX1mdW5jdGlvbiBhKHQsZSxyLGEsYyl7ZnVuY3Rpb24gaCh0KXtyZXR1cm4gZ1t0JWcubGVuZ3RoXX12YXIgZixkPWUuam9pbigiLCIpLHA9ZCxtPXQuY3Jvc3NpbmdzW3BdLHY9byhtLHIsZSksZz1bcyh0LGUsWy12WzBdLC12WzFdXSldLHk9di5qb2luKCIsIiksYj10LnoubGVuZ3RoLHg9dC56WzBdLmxlbmd0aDtmb3IoZj0wO2Y8MWU0O2YrKyl7aWYobT4yMD8obT11LkNIT09TRVNBRERMRVttXVsodlswXXx8dlsxXSk8MD8wOjFdLHQuY3Jvc3NpbmdzW3BdPXUuU0FERExFUkVNQUlOREVSW21dKTpkZWxldGUgdC5jcm9zc2luZ3NbcF0sISh2PXUuTkVXREVMVEFbbV0pKXtsLmxvZygiRm91bmQgYmFkIG1hcmNoaW5nIGluZGV4OiIsbSxlLHQubGV2ZWwpO2JyZWFrfWcucHVzaChzKHQsZSx2KSksZVswXSs9dlswXSxlWzFdKz12WzFdLG4oZ1tnLmxlbmd0aC0xXSxnW2cubGVuZ3RoLTJdLGEsYykmJmcucG9wKCkscD1lLmpvaW4oIiwiKTt2YXIgXz12WzBdJiYoZVswXTwwfHxlWzBdPngtMil8fHZbMV0mJihlWzFdPDB8fGVbMV0+Yi0yKTtpZihwPT09ZCYmdi5qb2luKCIsIik9PT15fHxyJiZfKWJyZWFrO209dC5jcm9zc2luZ3NbcF19MWU0PT09ZiYmbC5sb2coIkluZmluaXRlIGxvb3AgaW4gY29udG91cj8iKTt2YXIgdyxNLGssQSxULFMsRSxMPW4oZ1swXSxnW2cubGVuZ3RoLTFdLGEsYyksQz0wLHo9LjIqdC5zbW9vdGhpbmcsST1bXSxEPTA7Zm9yKGY9MTtmPGcubGVuZ3RoO2YrKylFPWkoZ1tmXSxnW2YtMV0pLEMrPUUsSS5wdXNoKEUpO3ZhciBQPUMvSS5sZW5ndGgqejtmb3IoZj1nLmxlbmd0aC0yO2Y+PUQ7Zi0tKWlmKCh3PUlbZl0pPFApe2ZvcihrPTAsTT1mLTE7TT49RCYmdytJW01dPFA7TS0tKXcrPUlbTV07aWYoTCYmZj09PWcubGVuZ3RoLTIpZm9yKGs9MDtrPE0mJncrSVtrXTxQO2srKyl3Kz1JW2tdO1Q9Zi1NK2srMSxTPU1hdGguZmxvb3IoKGYrTStrKzIpLzIpLEE9THx8ZiE9PWcubGVuZ3RoLTI/THx8LTEhPT1NP1QlMj9oKFMpOlsoaChTKVswXStoKFMrMSlbMF0pLzIsKGgoUylbMV0raChTKzEpWzFdKS8yXTpnWzBdOmdbZy5sZW5ndGgtMV0sZy5zcGxpY2UoTSsxLGYtTSsxLEEpLGY9TSsxLGsmJihEPWspLEwmJihmPT09Zy5sZW5ndGgtMj9nW2tdPWdbZy5sZW5ndGgtMV06MD09PWYmJihnW2cubGVuZ3RoLTFdPWdbMF0pKX1mb3IoZy5zcGxpY2UoMCxEKSxmPTA7ZjxnLmxlbmd0aDtmKyspZ1tmXS5sZW5ndGg9MjtpZighKGcubGVuZ3RoPDIpKWlmKEwpZy5wb3AoKSx0LnBhdGhzLnB1c2goZyk7ZWxzZXtyfHxsLmxvZygiVW5jbG9zZWQgaW50ZXJpb3IgY29udG91cj8iLHQubGV2ZWwsZCxnLmpvaW4oIkwiKSk7dmFyIE89ITE7dC5lZGdlcGF0aHMuZm9yRWFjaChmdW5jdGlvbihlLHIpe2lmKCFPJiZuKGVbMF0sZ1tnLmxlbmd0aC0xXSxhLGMpKXtnLnBvcCgpLE89ITA7dmFyIGk9ITE7dC5lZGdlcGF0aHMuZm9yRWFjaChmdW5jdGlvbihlLG8peyFpJiZuKGVbZS5sZW5ndGgtMV0sZ1swXSxhLGMpJiYoaT0hMCxnLnNwbGljZSgwLDEpLHQuZWRnZXBhdGhzLnNwbGljZShyLDEpLG89PT1yP3QucGF0aHMucHVzaChnLmNvbmNhdChlKSk6dC5lZGdlcGF0aHNbb109dC5lZGdlcGF0aHNbb10uY29uY2F0KGcsZSkpfSksaXx8KHQuZWRnZXBhdGhzW3JdPWcuY29uY2F0KGUpKX19KSx0LmVkZ2VwYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGUscil7IU8mJm4oZVtlLmxlbmd0aC0xXSxnWzBdLGEsYykmJihnLnNwbGljZSgwLDEpLHQuZWRnZXBhdGhzW3JdPWUuY29uY2F0KGcpLE89ITApfSksT3x8dC5lZGdlcGF0aHMucHVzaChnKX19ZnVuY3Rpb24gbyh0LGUscil7dmFyIG49MCxpPTA7cmV0dXJuIHQ+MjAmJmU/MjA4PT09dHx8MTExND09PXQ/bj0wPT09clswXT8xOi0xOmk9MD09PXJbMV0/MTotMTotMSE9PXUuQk9UVE9NU1RBUlQuaW5kZXhPZih0KT9pPTE6LTEhPT11LkxFRlRTVEFSVC5pbmRleE9mKHQpP249MTotMSE9PXUuVE9QU1RBUlQuaW5kZXhPZih0KT9pPS0xOm49LTEsW24saV19ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZVswXStNYXRoLm1heChyWzBdLDApLGk9ZVsxXStNYXRoLm1heChyWzFdLDApLGE9dC56W2ldW25dLG89dC54YXhpcyxzPXQueWF4aXM7aWYoclsxXSl7dmFyIGw9KHQubGV2ZWwtYSkvKHQueltpXVtuKzFdLWEpO3JldHVybltvLmMycCgoMS1sKSp0Lnhbbl0rbCp0LnhbbisxXSwhMCkscy5jMnAodC55W2ldLCEwKSxuK2wsaV19dmFyIHU9KHQubGV2ZWwtYSkvKHQueltpKzFdW25dLWEpO3JldHVybltvLmMycCh0Lnhbbl0sITApLHMuYzJwKCgxLXUpKnQueVtpXSt1KnQueVtpKzFdLCEwKSxuLGkrdV19dmFyIGw9dCgiLi4vLi4vbGliIiksdT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLHMsdTtmb3IoZT1lfHwuMDEscj1yfHwuMDEsbz0wO288dC5sZW5ndGg7bysrKXtmb3Iocz10W29dLHU9MDt1PHMuc3RhcnRzLmxlbmd0aDt1KyspaT1zLnN0YXJ0c1t1XSxhKHMsaSwiZWRnZSIsZSxyKTtmb3Iobj0wO09iamVjdC5rZXlzKHMuY3Jvc3NpbmdzKS5sZW5ndGgmJm48MWU0OyluKyssaT1PYmplY3Qua2V5cyhzLmNyb3NzaW5ncylbMF0uc3BsaXQoIiwiKS5tYXAoTnVtYmVyKSxhKHMsaSx2b2lkIDAsZSxyKTsxZTQ9PT1uJiZsLmxvZygiSW5maW5pdGUgbG9vcCBpbiBjb250b3VyPyIpfX19LHsiLi4vLi4vbGliIjo3MjQsIi4vY29uc3RhbnRzIjo5MTd9XSw5MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbih0LGUscixpLCEwKX19LHsiLi4vaGVhdG1hcC9ob3ZlciI6OTUwfV0sOTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLnBsb3Qsbi5zdHlsZT10KCIuL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsIjJkTWFwIiwiY29udG91ciJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi9hdHRyaWJ1dGVzIjo5MTQsIi4vY2FsYyI6OTE1LCIuL2NvbG9yYmFyIjo5MTYsIi4vZGVmYXVsdHMiOjkxOSwiLi9ob3ZlciI6OTIyLCIuL3Bsb3QiOjkyNiwiLi9zdHlsZSI6OTI3fV0sOTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5jb250b3VycyxyPWUuc3RhcnQsbz1hKGUpLHM9ZS5zaXplfHwxLGw9TWF0aC5mbG9vcigoby1yKS9zKSsxLHU9ImxpbmVzIj09PWUuY29sb3Jpbmc/MDoxO2lzRmluaXRlKHMpfHwocz0xLGw9MSk7dmFyIGMsaCxmPXQuY29sb3JzY2FsZSxkPWYubGVuZ3RoLHA9bmV3IEFycmF5KGQpLG09bmV3IEFycmF5KGQpO2lmKCJoZWF0bWFwIj09PWUuY29sb3Jpbmcpe2Zvcih0LnphdXRvJiYhMT09PXQuYXV0b2NvbnRvdXImJih0LnptaW49ci1zLzIsdC56bWF4PXQuem1pbitsKnMpLGg9MDtoPGQ7aCsrKWM9ZltoXSxwW2hdPWNbMF0qKHQuem1heC10LnptaW4pK3Quem1pbixtW2hdPWNbMV07dmFyIHY9bi5leHRlbnQoW3Quem1pbix0LnptYXgsZS5zdGFydCxlLnN0YXJ0K3MqKGwtMSldKSxnPXZbdC56bWluPHQuem1heD8wOjFdLHk9dlt0LnptaW48dC56bWF4PzE6MF07ZyE9PXQuem1pbiYmKHAuc3BsaWNlKDAsMCxnKSxtLnNwbGljZSgwLDAsUmFuZ2VbMF0pKSx5IT09dC56bWF4JiYocC5wdXNoKHkpLG0ucHVzaChtW20ubGVuZ3RoLTFdKSl9ZWxzZSBmb3IoaD0wO2g8ZDtoKyspYz1mW2hdLHBbaF09KGNbMF0qKGwrdS0xKS11LzIpKnMrcixtW2hdPWNbMV07cmV0dXJuIGkubWFrZUNvbG9yU2NhbGVGdW5jKHtkb21haW46cCxyYW5nZTptfSx7bm9OdW1lcmljQ2hlY2s6ITB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MTYsIi4vZW5kX3BsdXMiOjkyMCxkMzoxMjB9XSw5MjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPShlWzBdWzBdPnQ/MDoxKSsoZVswXVsxXT50PzA6MikrKGVbMV1bMV0+dD8wOjQpKyhlWzFdWzBdPnQ/MDo4KTtpZig1PT09cnx8MTA9PT1yKXtyZXR1cm4gdD4oZVswXVswXStlWzBdWzFdK2VbMV1bMF0rZVsxXVsxXSkvND81PT09cj83MTM6MTExNDo1PT09cj8xMDQ6MjA4fXJldHVybiAxNT09PXI/MDpyfXZhciBpPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYSxvLHMsbCx1LGMsaCxmPXRbMF0ueixkPWYubGVuZ3RoLHA9ZlswXS5sZW5ndGgsbT0yPT09ZHx8Mj09PXA7Zm9yKHI9MDtyPGQtMTtyKyspZm9yKG89W10sMD09PXImJihvPW8uY29uY2F0KGkuQk9UVE9NU1RBUlQpKSxyPT09ZC0yJiYobz1vLmNvbmNhdChpLlRPUFNUQVJUKSksZT0wO2U8cC0xO2UrKylmb3IoYT1vLnNsaWNlKCksMD09PWUmJihhPWEuY29uY2F0KGkuTEVGVFNUQVJUKSksZT09PXAtMiYmKGE9YS5jb25jYXQoaS5SSUdIVFNUQVJUKSkscz1lKyIsIityLGw9W1tmW3JdW2VdLGZbcl1bZSsxXV0sW2ZbcisxXVtlXSxmW3IrMV1bZSsxXV1dLGg9MDtoPHQubGVuZ3RoO2grKyljPXRbaF0sKHU9bihjLmxldmVsLGwpKSYmKGMuY3Jvc3NpbmdzW3NdPXUsLTEhPT1hLmluZGV4T2YodSkmJihjLnN0YXJ0cy5wdXNoKFtlLHJdKSxtJiYtMSE9PWEuaW5kZXhPZih1LGEuaW5kZXhPZih1KSsxKSYmYy5zdGFydHMucHVzaChbZSxyXSkpKX19LHsiLi9jb25zdGFudHMiOjkxN31dLDkyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxuKXt2YXIgcz1uWzBdLnRyYWNlLHU9blswXS54LGg9blswXS55LGY9cy5jb250b3VycyxkPXMudWlkLHA9ZS54YXhpcyxtPWUueWF4aXMsdj10Ll9mdWxsTGF5b3V0LGc9ImNvbnRvdXIiK2QsXz1pKGYsZSxuWzBdKTtpZighMCE9PXMudmlzaWJsZSlyZXR1cm4gdi5fcGFwZXIuc2VsZWN0QWxsKCIuIitnKyIsLmhtIitkKS5yZW1vdmUoKSx2b2lkIHYuX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrZCkucmVtb3ZlKCk7ImhlYXRtYXAiPT09Zi5jb2xvcmluZz8ocy56YXV0byYmITE9PT1zLmF1dG9jb250b3VyJiYocy5faW5wdXQuem1pbj1zLnptaW49Zi5zdGFydC1mLnNpemUvMixzLl9pbnB1dC56bWF4PXMuem1heD1zLnptaW4rXy5sZW5ndGgqZi5zaXplKSx5KHQsZSxbbl0pKToodi5fcGFwZXIuc2VsZWN0QWxsKCIuaG0iK2QpLnJlbW92ZSgpLHYuX2luZm9sYXllci5zZWxlY3RBbGwoImcucmFuZ2VzbGlkZXItY29udGFpbmVyIikuc2VsZWN0QWxsKCIuaG0iK2QpLnJlbW92ZSgpKSxiKF8pLHgoXyk7dmFyIHc9cC5jMnAodVswXSwhMCksTT1wLmMycCh1W3UubGVuZ3RoLTFdLCEwKSxrPW0uYzJwKGhbMF0sITApLEE9bS5jMnAoaFtoLmxlbmd0aC0xXSwhMCksVD1bW3csQV0sW00sQV0sW00sa10sW3csa11dLFM9ci5tYWtlQ29udG91ckdyb3VwKGUsbixnKTthKFMsVCxmKSxvKFMsXyxULGYpLGwoUyxfLHQsblswXSxmLFQpLGMoUyxlLHYuX2RlZnMsblswXSxUKX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49dC5zaXplLGk9W10sYT1fKHQpLG89dC5zdGFydDtvPGE7bys9bilpZihpLnB1c2goe2xldmVsOm8sY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6ci54LHk6ci55LHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSksaS5sZW5ndGg+MWUzKXtkLndhcm4oIlRvbyBtYW55IGNvbnRvdXJzLCBjbGlwcGluZyBhdCAxMDAwIix0KTticmVha31yZXR1cm4gaX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnNlbGVjdEFsbCgiZy5jb250b3VyYmciKS5kYXRhKFswXSk7bi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJiZyIsITApO3ZhciBpPW4uc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7aS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLGkuZXhpdCgpLnJlbW92ZSgpLGkuYXR0cigiZCIsIk0iK2Uuam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX1mdW5jdGlvbiBvKHQsZSxyLG4pe3ZhciBpPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIikuZGF0YShbMF0pO2kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VyZmlsbCIsITApO3ZhciBhPWkuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1uLmNvbG9yaW5nP2U6W10pO2EuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxhLmV4aXQoKS5yZW1vdmUoKSxhLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9cyh0LHIpO2U/Zi5zZWxlY3QodGhpcykuYXR0cigiZCIsZSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpmLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfWZ1bmN0aW9uIHModCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IodmFyIG4saSxhLG8scyxsLHU9TWF0aC5taW4odC56WzBdWzBdLHQuelswXVsxXSksYz10LmVkZ2VwYXRocy5sZW5ndGh8fHU8PXQubGV2ZWw/IiI6Ik0iK2Uuam9pbigiTCIpKyJaIixoPTAsZj10LmVkZ2VwYXRocy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLG09ITA7Zi5sZW5ndGg7KXtmb3IobD1wLnNtb290aG9wZW4odC5lZGdlcGF0aHNbaF0sdC5zbW9vdGhpbmcpLGMrPW0/bDpsLnJlcGxhY2UoL15NLywiTCIpLGYuc3BsaWNlKGYuaW5kZXhPZihoKSwxKSxuPXQuZWRnZXBhdGhzW2hdW3QuZWRnZXBhdGhzW2hdLmxlbmd0aC0xXSxvPS0xLGE9MDthPDQ7YSsrKXtpZighbil7ZC5sb2coIk1pc3NpbmcgZW5kPyIsaCx0KTticmVha31mb3IoIWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMF1bMV0pPC4wMX0obil8fHIobik/IWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX0obik/IWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX0obik/cihuKSYmKGk9ZVsyXSk6aT1lWzNdOmk9ZVswXTppPWVbMV0scz0wO3M8dC5lZGdlcGF0aHMubGVuZ3RoO3MrKyl7dmFyIHY9dC5lZGdlcGF0aHNbc11bMF07TWF0aC5hYnMoblswXS1pWzBdKTwuMDE/TWF0aC5hYnMoblswXS12WzBdKTwuMDEmJih2WzFdLW5bMV0pKihpWzFdLXZbMV0pPj0wJiYoaT12LG89cyk6TWF0aC5hYnMoblsxXS1pWzFdKTwuMDE/TWF0aC5hYnMoblsxXS12WzFdKTwuMDEmJih2WzBdLW5bMF0pKihpWzBdLXZbMF0pPj0wJiYoaT12LG89cyk6ZC5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsbixpLHYpfWlmKG49aSxvPj0wKWJyZWFrO2MrPSJMIitpfWlmKG89PT10LmVkZ2VwYXRocy5sZW5ndGgpe2QubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfWg9byxtPS0xPT09Zi5pbmRleE9mKGgpLG0mJihoPWZbMF0sYys9IloiKX1mb3IoaD0wO2g8dC5wYXRocy5sZW5ndGg7aCsrKWMrPXAuc21vb3RoY2xvc2VkKHQucGF0aHNbaF0sdC5zbW9vdGhpbmcpO3JldHVybiBjfWZ1bmN0aW9uIGwodCxlLG4saSxhLG8pe3ZhciBzPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsaW5lcyIpLmRhdGEoWzBdKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxpbmVzIiwhMCk7dmFyIGw9ITEhPT1hLnNob3dsaW5lcyx1PWEuc2hvd2xhYmVscyxjPWwmJnUsaD1yLmNyZWF0ZUxpbmVzKHMsbHx8dSxlKSxtPXIuY3JlYXRlTGluZUNsaXAocyxjLG4uX2Z1bGxMYXlvdXQuX2RlZnMsaS50cmFjZS51aWQpLHY9dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEodT9bMF06W10pO2lmKHYuZXhpdCgpLnJlbW92ZSgpLHYuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksdSl7dmFyIGc9W29dLHk9W107ZC5jbGVhckxvY2F0aW9uQ2FjaGUoKTt2YXIgYj1yLmxhYmVsRm9ybWF0dGVyKGEsaS50LmNiLG4uX2Z1bGxMYXlvdXQpLHg9cC50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChwLmZvbnQsYS5sYWJlbGZvbnQpLF89ZVswXS54YXhpcy5fbGVuZ3RoLE09ZVswXS55YXhpcy5fbGVuZ3RoLGs9e2xlZnQ6TWF0aC5tYXgob1swXVswXSwwKSxyaWdodDpNYXRoLm1pbihvWzJdWzBdLF8pLHRvcDpNYXRoLm1heChvWzBdWzFdLDApLGJvdHRvbTpNYXRoLm1pbihvWzJdWzFdLE0pfTtrLm1pZGRsZT0oay50b3Aray5ib3R0b20pLzIsay5jZW50ZXI9KGsubGVmdCtrLnJpZ2h0KS8yO3ZhciBBPU1hdGguc3FydChfKl8rTSpNKSxUPXcuTEFCRUxESVNUQU5DRSpBL01hdGgubWF4KDEsZS5sZW5ndGgvdy5MQUJFTElOQ1JFQVNFKTtoLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCxiLHgsbik7Zi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1kLmdldFZpc2libGVTZWdtZW50KHQsayxlLmhlaWdodC8yKTtpZihuJiYhKG4ubGVuPChlLndpZHRoK2UuaGVpZ2h0KSp3LkxBQkVMTUlOKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL1QpLHcuTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHQsbixlLHksayk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksZyl9fSl9KSx4LnJlbW92ZSgpLHIuZHJhd0xhYmVscyh2LHksbixtLGM/ZzpudWxsKX11JiYhbCYmaC5yZW1vdmUoKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lngscz10LnksbD10LnRoZXRhLHU9TWF0aC5jb3MobCkqaSxjPU1hdGguc2luKGwpKmksaD0obz5uLmNlbnRlcj9uLnJpZ2h0LW86by1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGwpKmEpKSxmPShzPm4ubWlkZGxlP24uYm90dG9tLXM6cy1uLnRvcCkvKE1hdGguYWJzKGMpK01hdGguY29zKGwpKmEpO2lmKGg8MXx8ZjwxKXJldHVybiAxLzA7dmFyIHA9TS5FREdFQ09TVCooMS8oaC0xKSsxLyhmLTEpKTtwKz1NLkFOR0xFQ09TVCpsKmw7Zm9yKHZhciBtPW8tdSx2PXMtYyxnPW8rdSx5PXMrYyxiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciB4PXJbYl0sXz1NYXRoLmNvcyh4LnRoZXRhKSp4LndpZHRoLzIsdz1NYXRoLnNpbih4LnRoZXRhKSp4LndpZHRoLzIsaz0yKmQuc2VnbWVudERpc3RhbmNlKG0sdixnLHkseC54LV8seC55LXcseC54K18seC55K3cpLyhlLmhlaWdodCt4LmhlaWdodCksQT14LmxldmVsPT09ZS5sZXZlbCxUPUE/TS5TQU1FTEVWRUxESVNUQU5DRToxO2lmKGs8PVQpcmV0dXJuIDEvMDtwKz1NLk5FSUdIQk9SQ09TVCooQT9NLlNBTUVMRVZFTEZBQ1RPUjoxKS8oay1UKX1yZXR1cm4gcH1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dmFyIGE9ImNsaXAiK24udHJhY2UudWlkLG89ci5zZWxlY3QoIi5jbGlwcyIpLnNlbGVjdEFsbCgiIyIrYSkuZGF0YShuLnRyYWNlLmNvbm5lY3RnYXBzP1tdOlswXSk7aWYoby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VyY2xpcCIsITApLmF0dHIoImlkIixhKSxvLmV4aXQoKS5yZW1vdmUoKSwhMT09PW4udHJhY2UuY29ubmVjdGdhcHMpe3ZhciBsPXtsZXZlbDouOSxjcm9zc2luZ3M6e30sc3RhcnRzOltdLGVkZ2VwYXRoczpbXSxwYXRoczpbXSx4YXhpczplLnhheGlzLHlheGlzOmUueWF4aXMseDpuLngseTpuLnksejpoKG4pLHNtb290aGluZzowfTtiKFtsXSkseChbbF0pO3ZhciB1PXMobCxpKSxjPW8uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShbMF0pO2MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxjLmF0dHIoImQiLHUpfWVsc2UgYT1udWxsO3QuY2FsbChwLnNldENsaXBVcmwsYSksZS5wbG90LnNlbGVjdEFsbCgiLmhtIituLnRyYWNlLnVpZCkuY2FsbChwLnNldENsaXBVcmwsYSl9ZnVuY3Rpb24gaCh0KXt2YXIgZSxyLG49dC50cmFjZS5fZW1wdHlwb2ludHMsaT1bXSxhPXQuei5sZW5ndGgsbz10LnpbMF0ubGVuZ3RoLHM9W107Zm9yKGU9MDtlPG87ZSsrKXMucHVzaCgxKTtmb3IoZT0wO2U8YTtlKyspaS5wdXNoKHMuc2xpY2UoKSk7Zm9yKGU9MDtlPG4ubGVuZ3RoO2UrKylyPW5bZV0saVtyWzBdXVtyWzFdXT0wO3JldHVybiB0LnptYXNrPWksaX12YXIgZj10KCJkMyIpLGQ9dCgiLi4vLi4vbGliIikscD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxtPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHY9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLHk9dCgiLi4vaGVhdG1hcC9wbG90IiksYj10KCIuL21ha2VfY3Jvc3NpbmdzIikseD10KCIuL2ZpbmRfYWxsX3BhdGhzIiksXz10KCIuL2VuZF9wbHVzIiksdz10KCIuL2NvbnN0YW50cyIpLE09dy5MQUJFTE9QVElNSVpFUjtyLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKW4odCxlLHJbaV0pfSxyLm1ha2VDb250b3VyR3JvdXA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQucGxvdC5zZWxlY3QoIi5tYXBsYXllciIpLnNlbGVjdEFsbCgiZy5jb250b3VyLiIrcikuZGF0YShlKTtyZXR1cm4gbi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXIiLCEwKS5jbGFzc2VkKHIsITApLG4uZXhpdCgpLnJlbW92ZSgpLG59LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZGF0YShlP3I6W10pO2lmKGkuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGV2ZWwiLCEwKSxlKXt2YXIgYT1pLnNlbGVjdEFsbCgicGF0aC5vcGVubGluZSIpLmRhdGEoZnVuY3Rpb24odCl7cmV0dXJuIHQucGVkZ2VwYXRoc3x8dC5lZGdlcGF0aHN9KTthLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgib3BlbmxpbmUiLCEwKSxhLmF0dHIoImQiLGZ1bmN0aW9uKHQpe3JldHVybiBwLnNtb290aG9wZW4odCxuKX0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKTt2YXIgbz1pLnNlbGVjdEFsbCgicGF0aC5jbG9zZWRsaW5lIikuZGF0YShmdW5jdGlvbih0KXtyZXR1cm4gdC5wcGF0aHN8fHQucGF0aHN9KTtvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2xvc2VkbGluZSIsITApLG8uYXR0cigiZCIsZnVuY3Rpb24odCl7cmV0dXJuIHAuc21vb3RoY2xvc2VkKHQsbil9KS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIil9cmV0dXJuIGl9LHIuY3JlYXRlTGluZUNsaXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZT8iY2xpcGxpbmUiK246bnVsbCxhPXIuc2VsZWN0KCIuY2xpcHMiKS5zZWxlY3RBbGwoIiMiK2kpLmRhdGEoZT9bMF06W10pO3JldHVybiBhLmV4aXQoKS5yZW1vdmUoKSxhLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImNvbnRvdXJsaW5lY2xpcCIsITApLmF0dHIoImlkIixpKSxwLnNldENsaXBVcmwodCxpKSxhfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmxhYmVsZm9ybWF0KXJldHVybiBmLmZvcm1hdCh0LmxhYmVsZm9ybWF0KTt2YXIgbjtyZXR1cm4gZT9uPWUuYXhpczoobj17dHlwZToibGluZWFyIixfc2VwYXJhdG9yczoiLiwiLF9pZDoieWNvbnRvdXIiLG50aWNrczoodC5lbmQtdC5zdGFydCkvdC5zaXplLHNob3dleHBvbmVudDoiYWxsIixyYW5nZTpbdC5zdGFydCx0LmVuZF19LGcobixyKSx2LmNhbGNUaWNrcyhuKSxuLl90bWluPW51bGwsbi5fdG1heD1udWxsKSxmdW5jdGlvbih0KXtyZXR1cm4gdi50aWNrVGV4dChuLHQpLnRleHR9fSxyLmNhbGNUZXh0T3B0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lKHQpO3IudGV4dChpKS5jYWxsKG0uY29udmVydFRvVHNwYW5zLG4pO3ZhciBhPXAuYkJveChyLm5vZGUoKSwhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodCxsZXZlbDp0LGR5OihhLnRvcCthLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHMsbCxjLGg9ci53aWR0aDtlLmlzQ2xvc2VkPyhvPWUubGVuL00uSU5JVElBTFNFQVJDSFBPSU5UUyxhPWUubWluK28vMixzPWUubWF4KToobz0oZS5sZW4taCkvKE0uSU5JVElBTFNFQVJDSFBPSU5UUysxKSxhPWUubWluK28raC8yLHM9ZS5tYXgtKG8raCkvMik7Zm9yKHZhciBmPTEvMCxwPTA7cDxNLklURVJBVElPTlM7cCsrKXtmb3IodmFyIG09YTttPHM7bSs9byl7dmFyIHY9ZC5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLG0saCksZz11KHYscixuLGkpO2c8ZiYmKGY9ZyxjPXYsbD1tKX1pZihmPjIqTS5NQVhDT1NUKWJyZWFrO3AmJihvLz0yKSxhPWwtby8yLHM9YSsxLjUqb31pZihmPD1NLk1BWENPU1QpcmV0dXJuIGN9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lngscz10LnksbD10LnRoZXRhLHU9TWF0aC5zaW4obCksYz1NYXRoLmNvcyhsKSxoPWkqYyxmPWEqdSxkPWkqdSxwPS1hKmMsbT1bW28taC1mLHMtZC1wXSxbbytoLWYscytkLXBdLFtvK2grZixzK2QrcF0sW28taCtmLHMtZCtwXV07ci5wdXNoKHt0ZXh0OmUudGV4dCx4Om8seTpzLGR5OmUuZHksdGhldGE6bCxsZXZlbDplLmxldmVsLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fSksbi5wdXNoKG0pfSxyLmRyYXdMYWJlbHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT10LnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoZSxmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0KyIsIit0LngrIiwiK3QueSsiLCIrdC50aGV0YX0pO2lmKGEuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaChmdW5jdGlvbih0KXt2YXIgZT10LngrTWF0aC5zaW4odC50aGV0YSkqdC5keSxuPXQueS1NYXRoLmNvcyh0LnRoZXRhKSp0LmR5O2Yuc2VsZWN0KHRoaXMpLnRleHQodC50ZXh0KS5hdHRyKHt4OmUseTpuLHRyYW5zZm9ybToicm90YXRlKCIrMTgwKnQudGhldGEvTWF0aC5QSSsiICIrZSsiICIrbisiKSJ9KS5jYWxsKG0uY29udmVydFRvVHNwYW5zLHIpfSksaSl7Zm9yKHZhciBvPSIiLHM9MDtzPGkubGVuZ3RoO3MrKylvKz0iTSIraVtzXS5qb2luKCJMIikrIloiO3ZhciBsPW4uc2VsZWN0QWxsKCJwYXRoIikuZGF0YShbMF0pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxsLmF0dHIoImQiLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjc0MywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo3ODEsIi4uL2hlYXRtYXAvcGxvdCI6OTU1LCIuL2NvbnN0YW50cyI6OTE3LCIuL2VuZF9wbHVzIjo5MjAsIi4vZmluZF9hbGxfcGF0aHMiOjkyMSwiLi9tYWtlX2Nyb3NzaW5ncyI6OTI1LGQzOjEyMH1dLDkyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi9oZWF0bWFwL3N0eWxlIiksbz10KCIuL21ha2VfY29sb3JfbWFwIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy5jb250b3VyIik7ZS5zdHlsZSgib3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhY2Uub3BhY2l0eX0pLGUuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXQudHJhY2UsYT1yLmNvbnRvdXJzLHM9ci5saW5lLGw9YS5zaXplfHwxLHU9YS5zdGFydCxjPSJjb25zdHJhaW50Ij09PWEudHlwZSxoPSFjJiYibGluZXMiPT09YS5jb2xvcmluZyxmPSFjJiYiZmlsbCI9PT1hLmNvbG9yaW5nLGQ9aHx8Zj9vKHIpOm51bGw7ZS5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZWFjaChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxoP2QodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSk7dmFyIHA9YS5sYWJlbGZvbnQ7aWYoZS5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyB0ZXh0IikuZWFjaChmdW5jdGlvbih0KXtpLmZvbnQobi5zZWxlY3QodGhpcykse2ZhbWlseTpwLmZhbWlseSxzaXplOnAuc2l6ZSxjb2xvcjpwLmNvbG9yfHwoaD9kKHQubGV2ZWwpOnMuY29sb3IpfSl9KSxjKWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoZil7dmFyIG07ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09bSYmKG09dC5sZXZlbCksZCh0LmxldmVsKy41KmwpfSksdm9pZCAwPT09bSYmKG09dSksZS5zZWxlY3RBbGwoImcuY29udG91cmJnIHBhdGgiKS5zdHlsZSgiZmlsbCIsZChtLS41KmwpKX19KSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vaGVhdG1hcC9zdHlsZSI6OTU2LCIuL21ha2VfY29sb3JfbWFwIjo5MjQsZDM6MTIwfV0sOTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXt2YXIgbCx1PXIoImNvbnRvdXJzLmNvbG9yaW5nIiksYz0iIjtpZigiZmlsbCI9PT11JiYobD1yKCJjb250b3Vycy5zaG93bGluZXMiKSksITEhPT1sJiYoImxpbmVzIiE9PXUmJihjPXIoImxpbmUuY29sb3IiLG98fCIjMDAwIikpLHIoImxpbmUud2lkdGgiLHZvaWQgMD09PXM/LjU6cykscigibGluZS5kYXNoIikpLHIoImxpbmUuc21vb3RoaW5nIiksIm5vbmUiIT09dSYmbih0LGUsYSxyLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxyKCJjb250b3Vycy5zaG93bGFiZWxzIikpe3ZhciBoPWEuZm9udDtpLmNvZXJjZUZvbnQociwiY29udG91cnMubGFiZWxmb250Iix7ZmFtaWx5OmguZmFtaWx5LHNpemU6aC5zaXplLGNvbG9yOmN9KSxyKCJjb250b3Vycy5sYWJlbGZvcm1hdCIpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MTEsIi4uLy4uL2xpYiI6NzI0fV0sOTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT1pLmNvbnRvdXJzLG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW8ubGluZSxoPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXUoe30se2NhcnBldDp7dmFsVHlwZToic3RyaW5nIn0sejpuLnosYTpuLngsYTA6bi54MCxkYTpuLmR4LGI6bi55LGIwOm4ueTAsZGI6bi5keSx0ZXh0Om4udGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwiZmlsbCJdLGV4dHJhczpbIm5vbmUiXX0sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIn0sYXV0b2NvbnRvdXI6aS5hdXRvY29udG91cixuY29udG91cnM6aS5uY29udG91cnMsY29udG91cnM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxldmVscyIsImNvbnN0cmFpbnQiXSxkZmx0OiJsZXZlbHMiLGVkaXRUeXBlOiJkb2NhbGMifSxzdGFydDphLnN0YXJ0LGVuZDphLmVuZCxzaXplOmEuc2l6ZSxjb2xvcmluZzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZmlsbCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJkb2NhbGMifSxzaG93bGluZXM6YS5zaG93bGluZXMsc2hvd2xhYmVsczphLnNob3dsYWJlbHMsbGFiZWxmb250OmEubGFiZWxmb250LGxhYmVsZm9ybWF0OmEubGFiZWxmb3JtYXQsb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KGguSU5FUVVBTElUWV9PUFMpLmNvbmNhdChoLklOVEVSVkFMX09QUykuY29uY2F0KGguU0VUX09QUyksZGZsdDoiPSIsZWRpdFR5cGU6ImRvY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiZG9jYWxjIn19LGxpbmU6e2NvbG9yOnUoe30sYy5jb2xvcix7fSksd2lkdGg6Yy53aWR0aCxkYXNoOmMuZGFzaCxzbW9vdGhpbmc6dSh7fSxjLnNtb290aGluZyx7fSl9fSxzLHthdXRvY29sb3JzY2FsZTp1KHt9LHMuYXV0b2NvbG9yc2NhbGUse2RmbHQ6ITF9KX0se2NvbG9yYmFyOmx9KX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiOjkxNCwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NDIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNSwiLi9jb25zdGFudHMiOjkzMn1dLDkzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj17dHlwZToibGluZWFyIixyYW5nZTpbdCxlXX07cmV0dXJuIG8uYXV0b1RpY2tzKG4sKGUtdCkvKHJ8fDE1KSksbn1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0KXtBPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGEubm90aWZpZXIoImNhbm5vdCBmYXN0LXpzbW9vdGg6ICIrdCl9dmFyIG4saSxvLHMsZyx5LGIseCxfPWUuY2FycGV0VHJhY2Usdz1fLmFheGlzLE09Xy5iYXhpcyxrPWwudHJhY2VJcyhlLCJjb250b3VyIiksQT1rPyJiZXN0IjplLnpzbW9vdGg7aWYody5fbWluRHRpY2s9MCxNLl9taW5EdGljaz0wLGMoZSkmJmgoZSx3LE0sImEiLCJiIixbInoiXSksbj1lLmE/dy5tYWtlQ2FsY2RhdGEoZSwiYSIpOltdLHM9ZS5iP00ubWFrZUNhbGNkYXRhKGUsImIiKTpbXSxpPWUuYTB8fDAsbz1lLmRhfHwxLGc9ZS5iMHx8MCx5PWUuZGJ8fDEsYj1mKGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bShiKSxlLl9pbnRlcnB6PXAoYixlLl9lbXB0eXBvaW50cyxlLl9pbnRlcnB6KSwiZmFzdCI9PT1BKWlmKCJsb2ciPT09dy50eXBlfHwibG9nIj09PU0udHlwZSlyKCJsb2cgYXhpcyBmb3VuZCIpO2Vsc2V7aWYobi5sZW5ndGgpe3ZhciBUPShuW24ubGVuZ3RoLTFdLW5bMF0pLyhuLmxlbmd0aC0xKSxTPU1hdGguYWJzKFQvMTAwKTtmb3IoeD0wO3g8bi5sZW5ndGgtMTt4KyspaWYoTWF0aC5hYnMoblt4KzFdLW5beF0tVCk+Uyl7cigiYSBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fWlmKHMubGVuZ3RoJiYiZmFzdCI9PT1BKXt2YXIgRT0oc1tzLmxlbmd0aC0xXS1zWzBdKS8ocy5sZW5ndGgtMSksTD1NYXRoLmFicyhFLzEwMCk7Zm9yKHg9MDt4PHMubGVuZ3RoLTE7eCsrKWlmKE1hdGguYWJzKHNbeCsxXS1zW3hdLUUpPkwpe3IoImIgc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX19dmFyIEM9ZChiKSx6PSJzY2FsZWQiPT09ZS54dHlwZT8iIjpuLEk9dihlLHosaSxvLEMsdyksRD0ic2NhbGVkIj09PWUueXR5cGU/IiI6cyxQPXYoZSxELGcseSxiLmxlbmd0aCxNKSxPPXthOkksYjpQLHo6Yn07cmV0dXJuImxldmVscyI9PT1lLmNvbnRvdXJzLnR5cGUmJnUoZSxiLCIiLCJ6IiksW09dfXZhciBhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsbD10KCIuLi8uLi9yZWdpc3RyeSIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxjPXQoIi4uL2hlYXRtYXAvaGFzX2NvbHVtbnMiKSxoPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IiksZj10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5IiksZD10KCIuLi9oZWF0bWFwL21heF9yb3dfbGVuZ3RoIikscD10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbT10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLHY9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksZz10KCIuL2RlZmF1bHRzIikseT10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5jYXJwZXRUcmFjZT15KHQsZSk7aWYociYmci52aXNpYmxlJiYibGVnZW5kb25seSIhPT1yLnZpc2libGUpe2lmKCFlLmF8fCFlLmIpe3ZhciBhPXQuZGF0YVtyLmluZGV4XSxsPXQuZGF0YVtlLmluZGV4XTtsLmF8fChsLmE9YS5hKSxsLmJ8fChsLmI9YS5iKSxnKGwsZSxlLl9kZWZhdWx0Q29sb3IsdC5fZnVsbExheW91dCl9dmFyIHU9aSh0LGUpLGM9ZS5jb250b3VycztpZighMD09PWUuYXV0b2NvbnRvdXIpe3ZhciBoPW4oZS56bWluLGUuem1heCxlLm5jb250b3Vycyk7Yy5zaXplPWguZHRpY2ssYy5zdGFydD1vLnRpY2tGaXJzdChoKSxoLnJhbmdlLnJldmVyc2UoKSxjLmVuZD1vLnRpY2tGaXJzdChoKSxjLnN0YXJ0PT09ZS56bWluJiYoYy5zdGFydCs9Yy5zaXplKSxjLmVuZD09PWUuem1heCYmKGMuZW5kLT1jLnNpemUpLGMuc3RhcnQ+Yy5lbmQmJihjLnN0YXJ0PWMuZW5kPShjLnN0YXJ0K2MuZW5kKS8yKSxlLl9pbnB1dC5jb250b3Vycz1zKHt9LGMpfWVsc2V7dmFyIGY9Yy5zdGFydCxkPWMuZW5kLHA9ZS5faW5wdXQuY29udG91cnM7aWYoZj5kJiYoYy5zdGFydD1wLnN0YXJ0PWQsZD1jLmVuZD1wLmVuZD1mLGY9Yy5zdGFydCksIShjLnNpemU+MCkpe3ZhciBtO209Zj09PWQ/MTpuKGYsZCxlLm5jb250b3VycykuZHRpY2sscC5zaXplPWMuc2l6ZT1tfX1yZXR1cm4gdX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDgsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo4OTgsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjk0NCwiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiOjk0NiwiLi4vaGVhdG1hcC9maW5kX2VtcHRpZXMiOjk0OCwiLi4vaGVhdG1hcC9oYXNfY29sdW1ucyI6OTQ5LCIuLi9oZWF0bWFwL2ludGVycDJkIjo5NTIsIi4uL2hlYXRtYXAvbWFrZV9ib3VuZF9hcnJheSI6OTUzLCIuLi9oZWF0bWFwL21heF9yb3dfbGVuZ3RoIjo5NTQsIi4vZGVmYXVsdHMiOjkzNn1dLDkzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9bi5hLmxlbmd0aCxsPW4uYi5sZW5ndGgsdT1uLnosYz0tMS8wLGg9MS8wO2ZvcihpPTA7aTxsO2krKyloPU1hdGgubWluKGgsdVtpXVswXSksaD1NYXRoLm1pbihoLHVbaV1bcy0xXSksYz1NYXRoLm1heChjLHVbaV1bMF0pLGM9TWF0aC5tYXgoYyx1W2ldW3MtMV0pO2ZvcihpPTE7aTxzLTE7aSsrKWg9TWF0aC5taW4oaCx1WzBdW2ldKSxoPU1hdGgubWluKGgsdVtsLTFdW2ldKSxjPU1hdGgubWF4KGMsdVswXVtpXSksYz1NYXRoLm1heChjLHVbbC0xXVtpXSk7c3dpdGNoKGUpe2Nhc2UiPiI6Y2FzZSI+PSI6bi5jb250b3Vycy52YWx1ZT5jJiYodFswXS5wcmVmaXhCb3VuZGFyeT0hMCk7YnJlYWs7Y2FzZSI8IjpjYXNlIjw9IjpuLmNvbnRvdXJzLnZhbHVlPGgmJih0WzBdLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIltdIjpjYXNlIigpIjphPU1hdGgubWluLmFwcGx5KG51bGwsbi5jb250b3Vycy52YWx1ZSksbz1NYXRoLm1heC5hcHBseShudWxsLG4uY29udG91cnMudmFsdWUpLG88aCYmKHRbMF0ucHJlZml4Qm91bmRhcnk9ITApLGE+YyYmKHRbMF0ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiXVsiOmNhc2UiKSgiOmE9TWF0aC5taW4uYXBwbHkobnVsbCxuLmNvbnRvdXJzLnZhbHVlKSxvPU1hdGgubWF4LmFwcGx5KG51bGwsbi5jb250b3Vycy52YWx1ZSksYTxoJiZvPmMmJih0WzBdLnByZWZpeEJvdW5kYXJ5PSEwKX19fSx7fV0sOTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17SU5FUVVBTElUWV9PUFM6WyI9IiwiPCIsIj49IiwiPiIsIjw9Il0sSU5URVJWQUxfT1BTOlsiW10iLCIoKSIsIlspIiwiKF0iLCJdWyIsIikoIiwiXSgiLCIpWyJdLFNFVF9PUFM6WyJ7fSIsIn17Il19fSx7fV0sOTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBzKHQpPyt0Om51bGx9dmFyIG4saT1BcnJheS5pc0FycmF5KGUpO3JldHVybi0xIT09by5JTkVRVUFMSVRZX09QUy5pbmRleE9mKHQpP249cihpP2VbMF06ZSk6LTEhPT1vLklOVEVSVkFMX09QUy5pbmRleE9mKHQpP249aT9bcihlWzBdKSxyKGVbMV0pXTpbcihlKSxyKGUpXTotMSE9PW8uU0VUX09QUy5pbmRleE9mKHQpJiYobj1pP2UubWFwKHIpOltyKGUpXSksbn1mdW5jdGlvbiBpKHQpe3JldHVybiBmdW5jdGlvbihlKXtlPW4odCxlKTt2YXIgcj1NYXRoLm1pbihlWzBdLGVbMV0pLGk9TWF0aC5tYXgoZVswXSxlWzFdKTtyZXR1cm57c3RhcnQ6cixlbmQ6aSxzaXplOmktcn19fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPW4odCxlKSx7c3RhcnQ6ZSxlbmQ6MS8wLHNpemU6MS8wfX19dmFyIG89dCgiLi9jb25zdGFudHMiKSxzPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzWyJbXSJdPWkoIltdIiksZS5leHBvcnRzWyIoKSJdPWkoIigpIiksZS5leHBvcnRzWyJbKSJdPWkoIlspIiksZS5leHBvcnRzWyIoXSJdPWkoIihdIiksZS5leHBvcnRzWyJdWyJdPWkoIl1bIiksZS5leHBvcnRzWyIpKCJdPWkoIikoIiksZS5leHBvcnRzWyIpWyJdPWkoIilbIiksZS5leHBvcnRzWyJdKCJdPWkoIl0oIiksZS5leHBvcnRzWyI+Il09YSgiPiIpLGUuZXhwb3J0c1siPj0iXT1hKCI+PSIpLGUuZXhwb3J0c1siPCJdPWEoIjwiKSxlLmV4cG9ydHNbIjw9Il09YSgiPD0iKSxlLmV4cG9ydHNbIj0iXT1hKCI9Iil9LHsiLi9jb25zdGFudHMiOjkzMiwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDkzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnN0cmFpbnRfbWFwcGluZyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcjstMT09PVsiPSIsIjwiLCI8PSIsIj4iLCI+PSJdLmluZGV4T2YoZS5vcGVyYXRpb24pPyh0KCJjb250b3Vycy52YWx1ZSIsWzAsMV0pLEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZS5sZW5ndGg+Mj9lLnZhbHVlPWUudmFsdWUuc2xpY2UoMik6MD09PWUubGVuZ3RoP2UudmFsdWU9WzAsMV06ZS5sZW5ndGg8Mj8ocj1wYXJzZUZsb2F0KGUudmFsdWVbMF0pLGUudmFsdWU9W3IscisxXSk6ZS52YWx1ZT1bcGFyc2VGbG9hdChlLnZhbHVlWzBdKSxwYXJzZUZsb2F0KGUudmFsdWVbMV0pXTppKGUudmFsdWUpJiYocj1wYXJzZUZsb2F0KGUudmFsdWUpLGUudmFsdWU9W3IscisxXSkpOih0KCJjb250b3Vycy52YWx1ZSIsMCksaShlLnZhbHVlKXx8KEFycmF5LmlzQXJyYXkoZS52YWx1ZSk/ZS52YWx1ZT1wYXJzZUZsb2F0KGUudmFsdWVbMF0pOmUudmFsdWU9MCkpO3ZhciBhPW5bZS5vcGVyYXRpb25dKGUudmFsdWUpO2Uuc3RhcnQ9YS5zdGFydCxlLmVuZD1hLmVuZCxlLnNpemU9YS5zaXplfX0seyIuL2NvbnN0cmFpbnRfbWFwcGluZyI6OTMzLCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJldmVyc2UoKX0scz1mdW5jdGlvbih0KXtyZXR1cm4gdH07c3dpdGNoKGUpe2Nhc2UiXVsiOmNhc2UiKVsiOmNhc2UiXSgiOmNhc2UiKSgiOnZhciBsPW87bz1zLHM9bDtjYXNlIltdIjpjYXNlIlspIjpjYXNlIihdIjpjYXNlIigpIjppZigyIT09dC5sZW5ndGgpcmV0dXJuIHZvaWQgbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IHJhbmdlIG9wZXJhdGlvbi4iKTtmb3IoaT10WzBdLGE9dFsxXSxyPTA7cjxpLmVkZ2VwYXRocy5sZW5ndGg7cisrKWkuZWRnZXBhdGhzW3JdPW8oaS5lZGdlcGF0aHNbcl0pO2ZvcihyPTA7cjxpLnBhdGhzLmxlbmd0aDtyKyspaS5wYXRoc1tyXT1vKGkucGF0aHNbcl0pO2Zvcig7YS5lZGdlcGF0aHMubGVuZ3RoOylpLmVkZ2VwYXRocy5wdXNoKHMoYS5lZGdlcGF0aHMuc2hpZnQoKSkpO2Zvcig7YS5wYXRocy5sZW5ndGg7KWkucGF0aHMucHVzaChzKGEucGF0aHMuc2hpZnQoKSkpO3QucG9wKCk7YnJlYWs7Y2FzZSI+PSI6Y2FzZSI+IjppZigxIT09dC5sZW5ndGgpcmV0dXJuIHZvaWQgbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IG9wZXJhdGlvbi4iKTtmb3IoaT10WzBdLHI9MDtyPGkuZWRnZXBhdGhzLmxlbmd0aDtyKyspaS5lZGdlcGF0aHNbcl09byhpLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGkucGF0aHMubGVuZ3RoO3IrKylpLnBhdGhzW3JdPW8oaS5wYXRoc1tyXSl9fX0seyIuLi8uLi9saWIiOjcyNH1dLDkzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksbD10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksdT10KCIuL2NvbnN0cmFpbnRfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5hZGRPcGFjaXR5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aWYoZigiY2FycGV0IiksdC5hJiZ0LmIpe3ZhciBkLHAsbSx2LGc7aWYoIWkodCxlLGYsaCwiYSIsImIiKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2YoInRleHQiKSxmKCJjb250b3Vycy50eXBlIik7dmFyIHk9ZS5jb250b3VycztpZigiY29uc3RyYWludCI9PT15LnR5cGUpe2YoImNvbnRvdXJzLm9wZXJhdGlvbiIpLHUoZix5KSxuLmNvZXJjZSh0LGUsbCwic2hvd2xlZ2VuZCIsITApLGYoImNvbnRvdXJzLmNvbG9yaW5nIiwiPSI9PT15Lm9wZXJhdGlvbj8ibGluZXMiOiJmaWxsIiksZigiY29udG91cnMuc2hvd2xpbmVzIiwhMCksIj0iPT09eS5vcGVyYXRpb24mJih5LmNvbG9yaW5nPSJsaW5lcyIpLHModCxlLHIsZik7dmFyIGI9ZS5maWxsY29sb3I/YyhlLmZpbGxjb2xvciwxKTpyO28odCxlLGYsaCxiLDIpLCI9Ij09PXkub3BlcmF0aW9uJiYoZigibGluZS5jb2xvciIsciksImZpbGwiPT09eS5jb2xvcmluZyYmKHkuY29sb3Jpbmc9ImxpbmVzIiksImxpbmVzIj09PXkuY29sb3JpbmcmJmRlbGV0ZSBlLmZpbGxjb2xvciksZGVsZXRlIGUuc2hvd3NjYWxlLGRlbGV0ZSBlLmF1dG9jb250b3VyLGRlbGV0ZSBlLmF1dG9jb2xvcnNjYWxlLGRlbGV0ZSBlLmNvbG9yc2NhbGUsZGVsZXRlIGUubmNvbnRvdXJzLGRlbGV0ZSBlLmNvbG9yYmFyLGUubGluZSYmKGRlbGV0ZSBlLmxpbmUuYXV0b2NvbG9yc2NhbGUsZGVsZXRlIGUubGluZS5jb2xvcnNjYWxlLGRlbGV0ZSBlLmxpbmUubWluY29sb3IsZGVsZXRlIGUubGluZS5tYXhjb2xvcil9ZWxzZSBuLmNvZXJjZSh0LGUsbCwic2hvd2xlZ2VuZCIsITEpLHA9bi5jb2VyY2UyKHQsZSxhLCJjb250b3Vycy5zdGFydCIpLG09bi5jb2VyY2UyKHQsZSxhLCJjb250b3Vycy5lbmQiKSxkPWYoImNvbnRvdXJzLnNpemUiKSxmKCJjb250b3Vycy5jb2xvcmluZyIpLHY9ITE9PT1wfHwhMT09PW0sZz12P2UuYXV0b2NvbnRvdXI9ITA6ZigiYXV0b2NvbnRvdXIiLCExKSwhZyYmZHx8ZigibmNvbnRvdXJzIiksbyh0LGUsZixoKSxkZWxldGUgZS52YWx1ZSxkZWxldGUgZS5vcGVyYXRpb259ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjo5MjgsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjo5NTcsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuL2F0dHJpYnV0ZXMiOjkyOSwiLi9jb25zdHJhaW50X3ZhbHVlX2RlZmF1bHRzIjo5MzR9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGk9dC5zaXplLGE9W10sbz1yLnRyYWNlLmNhcnBldFRyYWNlLHM9dC5zdGFydDtzPHQuZW5kK2kvMTA7cys9aSlpZihhLnB1c2goe2xldmVsOnMsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6by5hYXhpcyx5YXhpczpvLmJheGlzLHg6ci5hLHk6ci5iLHo6ci56LHNtb290aGluZzpyLnRyYWNlLmxpbmUuc21vb3RoaW5nfSksYS5sZW5ndGg+MWUzKXtuLndhcm4oIlRvbyBtYW55IGNvbnRvdXJzLCBjbGlwcGluZyBhdCAxMDAwIix0KTticmVha31yZXR1cm4gYX19LHsiLi4vLi4vbGliIjo3MjR9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vY29udG91ci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJjb250b3VyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnRlc2lhbiIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc0LCIuLi9jb250b3VyL2NvbG9yYmFyIjo5MTYsIi4uL2NvbnRvdXIvc3R5bGUiOjkyNywiLi9hdHRyaWJ1dGVzIjo5MjksIi4vY2FsYyI6OTMwLCIuL2RlZmF1bHRzIjo5MzYsIi4vcGxvdCI6OTQxfV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGk9dCgiLi4vY2FycGV0L2F4aXNfYWxpZ25lZF9saW5lIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwsdSxjKXtmdW5jdGlvbiBoKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMF1bMV0pPFN9ZnVuY3Rpb24gZih0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzJdWzFdKTxTfWZ1bmN0aW9uIGQodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclswXVswXSk8VH1mdW5jdGlvbiBwKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMl1bMF0pPFR9ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG4sYSxvLG09IiI7Zm9yKGgodCkmJiFwKHQpfHxmKHQpJiYhZCh0KT8obz1zLmFheGlzLGE9aShzLGwsW3RbMF0sZVswXV0sLjUqKHRbMV0rZVsxXSkpKToobz1zLmJheGlzLGE9aShzLGwsLjUqKHRbMF0rZVswXSksW3RbMV0sZVsxXV0pKSxyPTE7cjxhLmxlbmd0aDtyKyspZm9yKG0rPW8uc21vb3RoaW5nPyJDIjoiTCIsbj0wO248YVtyXS5sZW5ndGg7bisrKXt2YXIgdj1hW3JdW25dO20rPVt1LmMycCh2WzBdKSxjLmMycCh2WzFdKV0rIiAifXJldHVybiBtfXZhciB2LGcseSxiLHgsXyx3LE09IiIsaz1lLmVkZ2VwYXRocy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pLEE9ITAsVD0xZS00Kk1hdGguYWJzKHJbMF1bMF0tclsyXVswXSksUz0xZS00Kk1hdGguYWJzKHJbMF1bMV0tclsyXVsxXSk7Zm9yKHY9MCxnPW51bGw7ay5sZW5ndGg7KXt2YXIgRT1lLmVkZ2VwYXRoc1t2XVswXTtmb3IoZyYmKE0rPW0oZyxFKSksdz1uLnNtb290aG9wZW4oZS5lZGdlcGF0aHNbdl0ubWFwKG8pLGUuc21vb3RoaW5nKSxNKz1BP3c6dy5yZXBsYWNlKC9eTS8sIkwiKSxrLnNwbGljZShrLmluZGV4T2YodiksMSksZz1lLmVkZ2VwYXRoc1t2XVtlLmVkZ2VwYXRoc1t2XS5sZW5ndGgtMV0seD0tMSxiPTA7Yjw0O2IrKyl7aWYoIWcpe2EubG9nKCJNaXNzaW5nIGVuZD8iLHYsZSk7YnJlYWt9Zm9yKGgoZykmJiFwKGcpP3k9clsxXTpkKGcpP3k9clswXTpmKGcpP3k9clszXTpwKGcpJiYoeT1yWzJdKSxfPTA7XzxlLmVkZ2VwYXRocy5sZW5ndGg7XysrKXt2YXIgTD1lLmVkZ2VwYXRoc1tfXVswXTtNYXRoLmFicyhnWzBdLXlbMF0pPFQ/TWF0aC5hYnMoZ1swXS1MWzBdKTxUJiYoTFsxXS1nWzFdKSooeVsxXS1MWzFdKT49MCYmKHk9TCx4PV8pOk1hdGguYWJzKGdbMV0teVsxXSk8Uz9NYXRoLmFicyhnWzFdLUxbMV0pPFMmJihMWzBdLWdbMF0pKih5WzBdLUxbMF0pPj0wJiYoeT1MLHg9Xyk6YS5sb2coImVuZHB0IHRvIG5ld2VuZHB0IGlzIG5vdCB2ZXJ0LiBvciBob3J6LiIsZyx5LEwpfWlmKHg+PTApYnJlYWs7TSs9bShnLHkpLGc9eX1pZih4PT09ZS5lZGdlcGF0aHMubGVuZ3RoKXthLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha312PXgsQT0tMT09PWsuaW5kZXhPZih2KSxBJiYodj1rWzBdLE0rPW0oZyx5KSsiWiIsZz1udWxsKX1mb3Iodj0wO3Y8ZS5wYXRocy5sZW5ndGg7disrKU0rPW4uc21vb3RoY2xvc2VkKGUucGF0aHNbdl0ubWFwKG8pLGUuc21vb3RoaW5nKTtyZXR1cm4gTX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uLy4uL2xpYiI6NzI0LCIuLi9jYXJwZXQvYXhpc19hbGlnbmVkX2xpbmUiOjg4MX1dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXsKdmFyIHIsbixpLGEsbyxzLGwsdSxjO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihhPXRbcl0sbz1hLnBlZGdlcGF0aHM9W10scz1hLnBwYXRocz1bXSxuPTA7bjxhLmVkZ2VwYXRocy5sZW5ndGg7bisrKXtmb3IoYz1hLmVkZ2VwYXRoc1tuXSxsPVtdLGk9MDtpPGMubGVuZ3RoO2krKylsW2ldPWUoY1tpXSk7by5wdXNoKGwpfWZvcihuPTA7bjxhLnBhdGhzLmxlbmd0aDtuKyspe2ZvcihjPWEucGF0aHNbbl0sdT1bXSxpPTA7aTxjLmxlbmd0aDtpKyspdVtpXT1lKGNbaV0pO3MucHVzaCh1KX19fX0se31dLDk0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW8uYWIyeHkodFswXSx0WzFdLCEwKTtyZXR1cm5bXy5jMnAoZVswXSksVC5jMnAoZVsxXSldfXZhciBhPXJbMF0udHJhY2Usbz1hLmNhcnBldFRyYWNlPWsodCxhKSxzPXQuY2FsY2RhdGFbby5pbmRleF1bMF07aWYoby52aXNpYmxlJiYibGVnZW5kb25seSIhPT1vLnZpc2libGUpe3ZhciBsPXJbMF0uYSxoPXJbMF0uYixtPWEuY29udG91cnMsYj1hLnVpZCxfPWUueGF4aXMsVD1lLnlheGlzLFM9dC5fZnVsbExheW91dCxFPSJjb250b3VyIitiLEw9dyhtLGUsclswXSksQz0iY29uc3RyYWludCI9PT1hLmNvbnRvdXJzLnR5cGU7aWYoITAhPT1hLnZpc2libGUpcmV0dXJuIHZvaWQgUy5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmNiIitiKS5yZW1vdmUoKTt2YXIgej1bW2xbMF0saFtoLmxlbmd0aC0xXV0sW2xbbC5sZW5ndGgtMV0saFtoLmxlbmd0aC0xXV0sW2xbbC5sZW5ndGgtMV0saFswXV0sW2xbMF0saFswXV1dO3YoTCk7dmFyIEk9MWUtOCoobFtsLmxlbmd0aC0xXS1sWzBdKSxEPTFlLTgqKGhbaC5sZW5ndGgtMV0taFswXSk7ZyhMLEksRCksImNvbnN0cmFpbnQiPT09YS5jb250b3Vycy50eXBlJiYoeChMLGEuY29udG91cnMub3BlcmF0aW9uKSxBKEwsYS5jb250b3Vycy5vcGVyYXRpb24seixhKSksTShMLG4pO3ZhciBQLE8sUixGLGo9eS5tYWtlQ29udG91ckdyb3VwKGUscixFKSxOPVtdO2ZvcihGPXMuY2xpcHNlZ21lbnRzLmxlbmd0aC0xO0Y+PTA7Ri0tKVA9cy5jbGlwc2VnbWVudHNbRl0sTz1mKFtdLFAueCxfLmMycCksUj1mKFtdLFAueSxULmMycCksTy5yZXZlcnNlKCksUi5yZXZlcnNlKCksTi5wdXNoKGQoTyxSLFAuYmljdWJpYykpO3ZhciBCPSJNIitOLmpvaW4oIkwiKSsiWiI7dShqLHMuY2xpcHNlZ21lbnRzLF8sVCxDLG0uY29sb3JpbmcpLGMoYSxqLF8sVCxMLHosbixvLHMsbS5jb2xvcmluZyxCKSxpKGosTCx0LHJbMF0sbSxlLG8pLHAuc2V0Q2xpcFVybChqLG8uX2NsaXBQYXRoSWQpfX1mdW5jdGlvbiBpKHQsZSxyLG4saSxvLHMpe3ZhciBsPXQuc2VsZWN0QWxsKCJnLmNvbnRvdXJsaW5lcyIpLmRhdGEoWzBdKTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmxpbmVzIiwhMCk7dmFyIHU9ITEhPT1pLnNob3dsaW5lcyxjPWkuc2hvd2xhYmVscyxmPXUmJmMsZD15LmNyZWF0ZUxpbmVzKGwsdXx8YyxlKSx2PXkuY3JlYXRlTGluZUNsaXAobCxmLHIuX2Z1bGxMYXlvdXQuX2RlZnMsbi50cmFjZS51aWQpLGc9dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoYz9bMF06W10pO2lmKGcuZXhpdCgpLnJlbW92ZSgpLGcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksYyl7dmFyIHg9by54YXhpcyxfPW8ueWF4aXMsdz14Ll9sZW5ndGgsTT1fLl9sZW5ndGgsaz1bW1swLDBdLFt3LDBdLFt3LE1dLFswLE1dXV0sQT1bXTttLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciBUPXkubGFiZWxGb3JtYXR0ZXIoaSxuLnQuY2Isci5fZnVsbExheW91dCksUz1wLnRlc3Rlci5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKS5jYWxsKHAuZm9udCxpLmxhYmVsZm9udCksRT17bGVmdDowLHJpZ2h0OncsY2VudGVyOncvMix0b3A6MCxib3R0b206TSxtaWRkbGU6TS8yfSxMPU1hdGguc3FydCh3KncrTSpNKSxDPWIuTEFCRUxESVNUQU5DRSpML01hdGgubWF4KDEsZS5sZW5ndGgvYi5MQUJFTElOQ1JFQVNFKTtkLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9eS5jYWxjVGV4dE9wdHModC5sZXZlbCxULFMscik7aC5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaChmdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9bS5nZXRWaXNpYmxlU2VnbWVudChuLEUsZS5oZWlnaHQvMik7aWYoaSYmKGEobixyLHQsaSxzLGUuaGVpZ2h0KSwhKGkubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpiLkxBQkVMTUlOKSkpZm9yKHZhciBvPU1hdGgubWluKE1hdGguY2VpbChpLmxlbi9DKSxiLkxBQkVMTUFYKSxsPTA7bDxvO2wrKyl7dmFyIHU9eS5maW5kQmVzdFRleHRMb2NhdGlvbihuLGksZSxBLEUpO2lmKCF1KWJyZWFrO3kuYWRkTGFiZWxEYXRhKHUsZSxBLGspfX0pfSksUy5yZW1vdmUoKSx5LmRyYXdMYWJlbHMoZyxBLHIsdixmP2s6bnVsbCl9YyYmIXUmJmQucmVtb3ZlKCl9ZnVuY3Rpb24gYSh0LGUscixuLGksYSl7ZnVuY3Rpb24gdSh0LGUpe3ZhciByLG49MDtyZXR1cm4oTWF0aC5hYnModFswXS1mKTwuMXx8TWF0aC5hYnModFswXS1kKTwuMSkmJihyPXMoaS5keHlkYl9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSpsKGUscikvMikpLChNYXRoLmFicyh0WzFdLXApPC4xfHxNYXRoLmFicyh0WzFdLW0pPC4xKSYmKHI9cyhpLmR4eWRhX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKmwoZSxyKS8yKSksbn1mb3IodmFyIGMsaD0wO2g8ci5wZWRnZXBhdGhzLmxlbmd0aDtoKyspZT09PXIucGVkZ2VwYXRoc1toXSYmKGM9ci5lZGdlcGF0aHNbaF0pO2lmKGMpe3ZhciBmPWkuYVswXSxkPWkuYVtpLmEubGVuZ3RoLTFdLHA9aS5iWzBdLG09aS5iW2kuYi5sZW5ndGgtMV0sdj1vKHQsMCwxKSxnPW8odCxuLnRvdGFsLG4udG90YWwtMSkseT11KGNbMF0sdiksYj1uLnRvdGFsLXUoY1tjLmxlbmd0aC0xXSxnKTtuLm1pbjx5JiYobi5taW49eSksbi5tYXg+YiYmKG4ubWF4PWIpLG4ubGVuPW4ubWF4LW4ubWlufX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj10LmdldFBvaW50QXRMZW5ndGgoZSksaT10LmdldFBvaW50QXRMZW5ndGgociksYT1pLngtbi54LG89aS55LW4ueSxzPU1hdGguc3FydChhKmErbypvKTtyZXR1cm5bYS9zLG8vc119ZnVuY3Rpb24gcyh0KXt2YXIgZT1NYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSk7cmV0dXJuW3RbMF0vZSx0WzFdL2VdfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1NYXRoLmFicyh0WzBdKmVbMF0rdFsxXSplWzFdKTtyZXR1cm4gTWF0aC5zcXJ0KDEtcipyKS9yfWZ1bmN0aW9uIHUodCxlLHIsbixpLGEpe3ZhciBvLHMsbCx1LGM9dC5zZWxlY3RBbGwoImcuY29udG91cmJnIikuZGF0YShbMF0pO2MuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VyYmciLCEwKTt2YXIgaD1jLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiIT09YXx8aT9bXTpbMF0pO2guZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxoLmV4aXQoKS5yZW1vdmUoKTt2YXIgcD1bXTtmb3IodT0wO3U8ZS5sZW5ndGg7dSsrKW89ZVt1XSxzPWYoW10sby54LHIuYzJwKSxsPWYoW10sby55LG4uYzJwKSxwLnB1c2goZChzLGwsby5iaWN1YmljKSk7aC5hdHRyKCJkIiwiTSIrcC5qb2luKCJMIikrIloiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfWZ1bmN0aW9uIGModCxlLHIsbixpLGEsbyxzLGwsdSxjKXt2YXIgZj1lLnNlbGVjdEFsbCgiZy5jb250b3VyZmlsbCIpLmRhdGEoWzBdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY29udG91cmZpbGwiLCEwKTt2YXIgZD1mLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoImZpbGwiPT09dT9pOltdKTtkLmVudGVyKCkuYXBwZW5kKCJwYXRoIiksZC5leGl0KCkucmVtb3ZlKCksZC5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPV8odCxlLGEsbyxzLGwscixuKTtlLnByZWZpeEJvdW5kYXJ5JiYoaT1jK2kpLGk/aC5zZWxlY3QodGhpcykuYXR0cigiZCIsaSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpoLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pfXZhciBoPXQoImQzIiksZj10KCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5IiksZD10KCIuLi9jYXJwZXQvbWFrZXBhdGgiKSxwPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG09dCgiLi4vLi4vbGliIiksdj10KCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIiksZz10KCIuLi9jb250b3VyL2ZpbmRfYWxsX3BhdGhzIikseT10KCIuLi9jb250b3VyL3Bsb3QiKSxiPXQoIi4uL2NvbnRvdXIvY29uc3RhbnRzIikseD10KCIuL2NvbnZlcnRfdG9fY29uc3RyYWludHMiKSxfPXQoIi4vam9pbl9hbGxfcGF0aHMiKSx3PXQoIi4vZW1wdHlfcGF0aGluZm8iKSxNPXQoIi4vbWFwX3BhdGhpbmZvIiksaz10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksQT10KCIuL2Nsb3NlX2JvdW5kYXJpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKW4odCxlLHJbaV0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vbGliIjo3MjQsIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjg5OCwiLi4vY2FycGV0L21ha2VwYXRoIjo4OTksIi4uL2NhcnBldC9tYXBfMWRfYXJyYXkiOjkwMCwiLi4vY29udG91ci9jb25zdGFudHMiOjkxNywiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6OTIxLCIuLi9jb250b3VyL21ha2VfY3Jvc3NpbmdzIjo5MjUsIi4uL2NvbnRvdXIvcGxvdCI6OTI2LCIuL2Nsb3NlX2JvdW5kYXJpZXMiOjkzMSwiLi9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIjo5MzUsIi4vZW1wdHlfcGF0aGluZm8iOjkzNywiLi9qb2luX2FsbF9wYXRocyI6OTM5LCIuL21hcF9wYXRoaW5mbyI6OTQwLGQzOjEyMH1dLDk0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1vKHt9LHt6Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdHJhbnNwb3NlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx4dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXJyYXkiLCJzY2FsZWQiXX0seXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl19LHpzbW9vdGg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZhc3QiLCJiZXN0IiwhMV0sZGZsdDohMX0sY29ubmVjdGdhcHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowfSx5Z2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH19LGkse2F1dG9jb2xvcnNjYWxlOm8oe30saS5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pfSx7Y29sb3JiYXI6YX0pfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjA3LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDk0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vaGlzdG9ncmFtMmQvY2FsYyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxsPXQoIi4vaGFzX2NvbHVtbnMiKSx1PXQoIi4vY29udmVydF9jb2x1bW5feHl6IiksYz10KCIuL21heF9yb3dfbGVuZ3RoIiksaD10KCIuL2NsZWFuXzJkX2FycmF5IiksZj10KCIuL2ludGVycDJkIiksZD10KCIuL2ZpbmRfZW1wdGllcyIpLHA9dCgiLi9tYWtlX2JvdW5kX2FycmF5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtFPWUuX2lucHV0LnpzbW9vdGg9ZS56c21vb3RoPSExLGkubm90aWZpZXIoImNhbm5vdCBmYXN0LXpzbW9vdGg6ICIrdCl9dmFyIG0sdixnLHksYix4LF8sdyxNPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxrPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxBPW4udHJhY2VJcyhlLCJjb250b3VyIiksVD1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksUz1uLnRyYWNlSXMoZSwiZ2wyZCIpLEU9QT8iYmVzdCI6ZS56c21vb3RoO2lmKE0uX21pbkR0aWNrPTAsay5fbWluRHRpY2s9MCxUKXt2YXIgTD1vKHQsZSk7bT1MLngsdj1MLngwLGc9TC5keCx5PUwueSxiPUwueTAseD1MLmR5LF89TC56fWVsc2UgbChlKT8odShlLE0saywieCIsInkiLFsieiJdKSxtPWUueCx5PWUueSk6KG09ZS54P00ubWFrZUNhbGNkYXRhKGUsIngiKTpbXSx5PWUueT9rLm1ha2VDYWxjZGF0YShlLCJ5Iik6W10pLHY9ZS54MHx8MCxnPWUuZHh8fDEsYj1lLnkwfHwwLHg9ZS5keXx8MSxfPWgoZS56LGUudHJhbnNwb3NlKSwoQXx8ZS5jb25uZWN0Z2FwcykmJihlLl9lbXB0eXBvaW50cz1kKF8pLGUuX2ludGVycHo9ZihfLGUuX2VtcHR5cG9pbnRzLGUuX2ludGVycHopKTtpZigiZmFzdCI9PT1FKWlmKCJsb2ciPT09TS50eXBlfHwibG9nIj09PWsudHlwZSlyKCJsb2cgYXhpcyBmb3VuZCIpO2Vsc2UgaWYoIVQpe2lmKG0ubGVuZ3RoKXt2YXIgQz0obVttLmxlbmd0aC0xXS1tWzBdKS8obS5sZW5ndGgtMSksej1NYXRoLmFicyhDLzEwMCk7Zm9yKHc9MDt3PG0ubGVuZ3RoLTE7dysrKWlmKE1hdGguYWJzKG1bdysxXS1tW3ddLUMpPnope3IoInggc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX1pZih5Lmxlbmd0aCYmImZhc3QiPT09RSl7dmFyIEk9KHlbeS5sZW5ndGgtMV0teVswXSkvKHkubGVuZ3RoLTEpLEQ9TWF0aC5hYnMoSS8xMDApO2Zvcih3PTA7dzx5Lmxlbmd0aC0xO3crKylpZihNYXRoLmFicyh5W3crMV0teVt3XS1JKT5EKXtyKCJ5IHNjYWxlIGlzIG5vdCBsaW5lYXIiKTticmVha319fXZhciBQPWMoXyksTz0ic2NhbGVkIj09PWUueHR5cGU/IiI6bSxSPXAoZSxPLHYsZyxQLE0pLEY9InNjYWxlZCI9PT1lLnl0eXBlPyIiOnksaj1wKGUsRixiLHgsXy5sZW5ndGgsayk7U3x8KGEuZXhwYW5kKE0sUiksYS5leHBhbmQoayxqKSk7dmFyIE49e3g6Uix5OmosejpfLHRleHQ6ZS50ZXh0fTtpZihzKGUsXywiIiwieiIpLEEmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBCPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtOLnhmaWxsPXAoQixPLHYsZyxQLE0pLE4ueWZpbGw9cChCLEYsYix4LF8ubGVuZ3RoLGspfXJldHVybltOXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwOCwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uL2hpc3RvZ3JhbTJkL2NhbGMiOjk3MSwiLi9jbGVhbl8yZF9hcnJheSI6OTQ0LCIuL2NvbnZlcnRfY29sdW1uX3h5eiI6OTQ2LCIuL2ZpbmRfZW1wdGllcyI6OTQ4LCIuL2hhc19jb2x1bW5zIjo5NDksIi4vaW50ZXJwMmQiOjk1MiwiLi9tYWtlX2JvdW5kX2FycmF5Ijo5NTMsIi4vbWF4X3Jvd19sZW5ndGgiOjk1NH1dLDk0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHMsbDtpZihlKXtmb3Iocj0wLHM9MDtzPHQubGVuZ3RoO3MrKylyPU1hdGgubWF4KHIsdFtzXS5sZW5ndGgpO2lmKDA9PT1yKXJldHVybiExO2E9ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RofSxvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtyXVtlXX19ZWxzZSByPXQubGVuZ3RoLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXS5sZW5ndGh9LG89ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdW3JdfTt2YXIgdT1uZXcgQXJyYXkocik7Zm9yKHM9MDtzPHI7cysrKWZvcihpPWEodCxzKSx1W3NdPW5ldyBBcnJheShpKSxsPTA7bDxpO2wrKyl1W3NdW2xdPWZ1bmN0aW9uKHQpe2lmKG4odCkpcmV0dXJuK3R9KG8odCxzLGwpKTtyZXR1cm4gdX19LHsiZmFzdC1pc251bWVyaWMiOjEyOX1dLDk0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLnRyYWNlLGw9ImNiIityLnVpZCx1PXIuem1pbixjPXIuem1heDtpZihuKHUpfHwodT1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLnopKSxuKGMpfHwoYz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxyLnopKSx0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIitsKS5yZW1vdmUoKSwhci5zaG93c2NhbGUpcmV0dXJuIHZvaWQgYS5hdXRvTWFyZ2luKHQsbCk7dmFyIGg9ZVswXS50LmNiPXModCxsKSxmPW8ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHIuY29sb3JzY2FsZSx1LGMpLHtub051bWVyaWNDaGVjazohMH0pO2guZmlsbGNvbG9yKGYpLmZpbGxsZXZlbHMoe3N0YXJ0OnUsZW5kOmMsc2l6ZTooYy11KS8yNTR9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NjA1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYxNiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsImZhc3QtaXNudW1lcmljIjoxMjl9XSw5NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7YT1hfHwieCIsbz1vfHwieSIscz1zfHxbInoiXTt2YXIgbCx1LGMsaCxmLGQ9dFthXS5zbGljZSgpLHA9dFtvXS5zbGljZSgpLG09dC50ZXh0LHY9TWF0aC5taW4oZC5sZW5ndGgscC5sZW5ndGgpLGc9dm9pZCAwIT09bSYmIUFycmF5LmlzQXJyYXkobVswXSkseT10W2ErImNhbGVuZGFyIl0sYj10W28rImNhbGVuZGFyIl07Zm9yKGw9MDtsPHMubGVuZ3RoO2wrKykoYz10W3NbbF1dKSYmKHY9TWF0aC5taW4odixjLmxlbmd0aCkpO2Zvcih2PGQubGVuZ3RoJiYoZD1kLnNsaWNlKDAsdikpLHY8cC5sZW5ndGgmJihwPXAuc2xpY2UoMCx2KSksbD0wO2w8djtsKyspZFtsXT1lLmQyYyhkW2xdLDAseSkscFtsXT1yLmQyYyhwW2xdLDAsYik7dmFyIHg9bi5kaXN0aW5jdFZhbHMoZCksXz14LnZhbHMsdz1uLmRpc3RpbmN0VmFscyhwKSxNPXcudmFscyxrPVtdO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspa1tsXT1uLmluaXQyZEFycmF5KE0ubGVuZ3RoLF8ubGVuZ3RoKTt2YXIgQSxULFM7Zm9yKGcmJihTPW4uaW5pdDJkQXJyYXkoTS5sZW5ndGgsXy5sZW5ndGgpKSxsPTA7bDx2O2wrKylpZihkW2xdIT09aSYmcFtsXSE9PWkpe2ZvcihBPW4uZmluZEJpbihkW2xdK3gubWluRGlmZi8yLF8pLFQ9bi5maW5kQmluKHBbbF0rdy5taW5EaWZmLzIsTSksdT0wO3U8cy5sZW5ndGg7dSsrKWY9c1t1XSxjPXRbZl0saD1rW3VdLGhbVF1bQV09Y1tsXTtnJiYoU1tUXVtBXT1tW2xdKX1mb3IodFthXT1fLHRbb109TSx1PTA7dTxzLmxlbmd0aDt1KyspdFtzW3VdXT1rW3VdO2cmJih0LnRleHQ9Uyl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjcwNCwiLi4vLi4vbGliIjo3MjR9XSw5NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2hhc19jb2x1bW5zIiksYT10KCIuL3h5el9kZWZhdWx0cyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gdShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWlmKCFhKHQsZSx1LGwpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dSgidGV4dCIpLCExPT09dSgienNtb290aCIpJiYodSgieGdhcCIpLHUoInlnYXAiKSksdSgiY29ubmVjdGdhcHMiLGkoZSkmJiExIT09ZS56c21vb3RoKSxvKHQsZSxsLHUse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTQyLCIuL2hhc19jb2x1bW5zIjo5NDksIi4veHl6X2RlZmF1bHRzIjo5NTd9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXhfcm93X2xlbmd0aCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGksYSxvLHMsbCx1LGM9W10saD17fSxmPVtdLGQ9dFswXSxwPVtdLG09WzAsMCwwXSx2PW4odCk7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoZT1wLHA9ZCxkPXRbcisxXXx8W10saT0wO2k8djtpKyspdm9pZCAwPT09cFtpXSYmKHM9KHZvaWQgMCE9PXBbaS0xXT8xOjApKyh2b2lkIDAhPT1wW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1kW2ldPzE6MCkscz8oMD09PXImJnMrKywwPT09aSYmcysrLHI9PT10Lmxlbmd0aC0xJiZzKyssaT09PXAubGVuZ3RoLTEmJnMrKyxzPDQmJihoW1tyLGldXT1bcixpLHNdKSxjLnB1c2goW3IsaSxzXSkpOmYucHVzaChbcixpXSkpO2Zvcig7Zi5sZW5ndGg7KXtmb3IobD17fSx1PSExLG89Zi5sZW5ndGgtMTtvPj0wO28tLSlhPWZbb10scj1hWzBdLGk9YVsxXSwocz0oKGhbW3ItMSxpXV18fG0pWzJdKyhoW1tyKzEsaV1dfHxtKVsyXSsoaFtbcixpLTFdXXx8bSlbMl0rKGhbW3IsaSsxXV18fG0pWzJdKS8yMCkmJihsW2FdPVtyLGksc10sZi5zcGxpY2UobywxKSx1PSEwKTtpZighdSl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpaFthXT1sW2FdLGMucHVzaChsW2FdKX1yZXR1cm4gYy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMl0tdFsyXX0pfX0seyIuL21heF9yb3dfbGVuZ3RoIjo5NTR9XSw5NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFBcnJheS5pc0FycmF5KHQuelswXSl9fSx7fV0sOTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2xpYiIpLGE9bi5jb25zdGFudHMuTUFYRElTVDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtpZighKHQuZGlzdGFuY2U8YSkpe3ZhciBsLHUsYyxoLGY9dC5jZFswXSxkPWYudHJhY2UscD10LnhhLG09dC55YSx2PWYueCxnPWYueSx5PWYueixiPWYuem1hc2sseD12LF89ZztpZighMSE9PXQuaW5kZXgpe3RyeXtjPU1hdGgucm91bmQodC5pbmRleFsxXSksaD1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IoIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDoiLHQuaW5kZXgpfWlmKGM8MHx8Yz49eVswXS5sZW5ndGh8fGg8MHx8aD55Lmxlbmd0aClyZXR1cm59ZWxzZXtpZihuLmluYm94KGUtdlswXSxlLXZbdi5sZW5ndGgtMV0pPmF8fG4uaW5ib3goci1nWzBdLHItZ1tnLmxlbmd0aC0xXSk+YSlyZXR1cm47aWYocyl7dmFyIHc7Zm9yKHg9WzIqdlswXS12WzFdXSx3PTE7dzx2Lmxlbmd0aDt3KyspeC5wdXNoKCh2W3ddK3Zbdy0xXSkvMik7Zm9yKHgucHVzaChbMip2W3YubGVuZ3RoLTFdLXZbdi5sZW5ndGgtMl1dKSxfPVsyKmdbMF0tZ1sxXV0sdz0xO3c8Zy5sZW5ndGg7dysrKV8ucHVzaCgoZ1t3XStnW3ctMV0pLzIpO18ucHVzaChbMipnW2cubGVuZ3RoLTFdLWdbZy5sZW5ndGgtMl1dKX1jPU1hdGgubWF4KDAsTWF0aC5taW4oeC5sZW5ndGgtMixpLmZpbmRCaW4oZSx4KSkpLGg9TWF0aC5tYXgoMCxNYXRoLm1pbihfLmxlbmd0aC0yLGkuZmluZEJpbihyLF8pKSl9dmFyIE09cC5jMnAodltjXSksaz1wLmMycCh2W2MrMV0pLEE9bS5jMnAoZ1toXSksVD1tLmMycChnW2grMV0pO3M/KGs9TSxsPXZbY10sVD1BLHU9Z1toXSk6KGw9KHZbY10rdltjKzFdKS8yLHU9KGdbaF0rZ1toKzFdKS8yLGQuenNtb290aCYmKE09az0oTStrKS8yLEE9VD0oQStUKS8yKSk7dmFyIFM9eVtoXVtjXTtiJiYhYltoXVtjXSYmKFM9dm9pZCAwKTt2YXIgRTtyZXR1cm4gQXJyYXkuaXNBcnJheShmLnRleHQpJiZBcnJheS5pc0FycmF5KGYudGV4dFtoXSkmJihFPWYudGV4dFtoXVtjXSksW2kuZXh0ZW5kRmxhdCh0LHtpbmRleDpbaCxjXSxkaXN0YW5jZTphKzEwLHgwOk0seDE6ayx5MDpBLHkxOlQseExhYmVsVmFsOmwseUxhYmVsVmFsOnUsekxhYmVsVmFsOlMsdGV4dDpFfSldfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNH1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImhlYXRtYXAiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4vYXR0cmlidXRlcyI6OTQyLCIuL2NhbGMiOjk0MywiLi9jb2xvcmJhciI6OTQ1LCIuL2RlZmF1bHRzIjo5NDcsIi4vaG92ZXIiOjk1MCwiLi9wbG90Ijo5NTUsIi4vc3R5bGUiOjk1Nn1dLDk1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybi41LS4yNSpNYXRoLm1pbigxLC41KnQpfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGksYSxzLGwsdSxjLGgsZixkLHAsbSx2LGc9MDtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKXtmb3Iobj1lW3NdLGk9blswXSxhPW5bMV0scD10W2ldW2FdLGQ9MCxmPTAsbD0wO2w8NDtsKyspdT1vW2xdLChjPXRbaSt1WzBdXSkmJnZvaWQgMCE9PShoPWNbYSt1WzFdXSkmJigwPT09ZD9tPXY9aDoobT1NYXRoLm1pbihtLGgpLHY9TWF0aC5tYXgodixoKSksZisrLGQrPWgpO2lmKDA9PT1mKXRocm93Iml0ZXJhdGVJbnRlcnAyZCBvcmRlciBpcyB3cm9uZzogbm8gZGVmaW5lZCBuZWlnaGJvcnMiO3RbaV1bYV09ZC9mLHZvaWQgMD09PXA/Zjw0JiYoZz0xKToodFtpXVthXT0oMStyKSp0W2ldW2FdLXIqcCx2Pm0mJihnPU1hdGgubWF4KGcsTWF0aC5hYnModFtpXVthXS1wKS8odi1tKSkpKX1yZXR1cm4gZ312YXIgYT10KCIuLi8uLi9saWIiKSxvPVtbLTEsMF0sWzEsMF0sWzAsLTFdLFswLDFdXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHMsbD0xO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKG89MDtvPGUubGVuZ3RoO28rKylzPWVbb10sdFtzWzBdXVtzWzFdXT1yW3NbMF1dW3NbMV1dO2Vsc2UgaSh0LGUpO2ZvcihvPTA7bzxlLmxlbmd0aCYmIShlW29dWzJdPDQpO28rKyk7Zm9yKGU9ZS5zbGljZShvKSxvPTA7bzwxMDAmJmw+LjAxO28rKylsPWkodCxlLG4obCkpO3JldHVybiBsPi4wMSYmYS5sb2coImludGVycDJkIGRpZG4ndCBjb252ZXJnZSBxdWlja2x5IixsKSx0fX0seyIuLi8uLi9saWIiOjcyNH1dLDk1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsbyl7dmFyIHMsbCx1LGM9W10saD1uLnRyYWNlSXModCwiY29udG91ciIpLGY9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4xJiYhZiYmImNhdGVnb3J5IiE9PW8udHlwZSl7dmFyIHA9ZS5sZW5ndGg7aWYoIShwPD1hKSlyZXR1cm4gaD9lLnNsaWNlKDAsYSk6ZS5zbGljZSgwLGErMSk7aWYoaHx8ZCljPWUuc2xpY2UoMCxhKTtlbHNlIGlmKDE9PT1hKWM9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoYz1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8cDt1KyspYy5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2MucHVzaCgxLjUqZVtwLTFdLS41KmVbcC0yXSl9aWYocDxhKXt2YXIgbT1jW2MubGVuZ3RoLTFdLHY9bS1jW2MubGVuZ3RoLTJdO2Zvcih1PXA7dTxhO3UrKyltKz12LGMucHVzaChtKX19ZWxzZXtsPWl8fDE7dmFyIGc9dFtvLl9pZC5jaGFyQXQoMCkrImNhbGVuZGFyIl07Zm9yKHM9Znx8ImNhdGVnb3J5Ij09PW8udHlwZT9vLnIyYyhyLDAsZyl8fDA6QXJyYXkuaXNBcnJheShlKSYmMT09PWUubGVuZ3RoP2VbMF06dm9pZCAwPT09cj8wOm8uZDJjKHIsMCxnKSx1PWh8fGQ/MDotLjU7dTxhO3UrKyljLnB1c2gocytsKnUpfXJldHVybiBjfX0seyIuLi8uLi9yZWdpc3RyeSI6ODQyfV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLHRbcl0ubGVuZ3RoKTtyZXR1cm4gZX19LHt9XSw5NTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWUubGVuZ3RoLTIsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPWVbbisxXSxzPW8uY29uc3RyYWluKG4rKHQtaSkvKGEtaSktLjUsMCxyKSxsPU1hdGgucm91bmQocyksdT1NYXRoLmFicyhzLWwpO3JldHVybiBzJiZzIT09ciYmdT97YmluMDpsLGZyYWM6dSxiaW4xOk1hdGgucm91bmQobCt1LyhzLWwpKX06e2JpbjA6bCxiaW4xOmwsZnJhYzowfX1mdW5jdGlvbiBjKHQsZSl7aWYodm9pZCAwIT09dCl7dmFyIHI9cSh0KTtyZXR1cm4gclswXT1NYXRoLnJvdW5kKHJbMF0pLHJbMV09TWF0aC5yb3VuZChyWzFdKSxyWzJdPU1hdGgucm91bmQoclsyXSkscnQrPWUsbnQrPXJbMF0qZSxpdCs9clsxXSplLGF0Kz1yWzJdKmUscn1yZXR1cm5bMCwwLDAsMF19ZnVuY3Rpb24gaCh0LGUscil7dFtlXT1yWzBdLHRbZSsxXT1yWzFdLHRbZSsyXT1yWzJdLHRbZSszXT1NYXRoLnJvdW5kKDI1NSpyWzNdKX12YXIgZj1yWzBdLnRyYWNlLGQ9Zi51aWQscD1lLnhheGlzLG09ZS55YXhpcyx2PXQuX2Z1bGxMYXlvdXQsZz0iaG0iK2Q7aWYodi5fcGFwZXIuc2VsZWN0QWxsKCIuY29udG91ciIrZCkucmVtb3ZlKCksdi5faW5mb2xheWVyLnNlbGVjdEFsbCgiZy5yYW5nZXNsaWRlci1jb250YWluZXIiKS5zZWxlY3RBbGwoIi5jb250b3VyIitkKS5yZW1vdmUoKSwhMCE9PWYudmlzaWJsZSlyZXR1cm4gdi5fcGFwZXIuc2VsZWN0QWxsKCIuIitnKS5yZW1vdmUoKSx2b2lkIHYuX2luZm9sYXllci5zZWxlY3RBbGwoIi5jYiIrZCkucmVtb3ZlKCk7dmFyIHksYix4LF8sdyxNLGs9clswXS56LEE9clswXS54LFQ9clswXS55LFM9YS50cmFjZUlzKGYsImNvbnRvdXIiKSxFPVM/ImJlc3QiOmYuenNtb290aCxMPWsubGVuZ3RoLEM9dShrKSx6PSExLEk9ITE7Zm9yKE09MDt2b2lkIDA9PT15JiZNPEEubGVuZ3RoLTE7KXk9cC5jMnAoQVtNXSksTSsrO2ZvcihNPUEubGVuZ3RoLTE7dm9pZCAwPT09YiYmTT4wOyliPXAuYzJwKEFbTV0pLE0tLTtmb3IoYjx5JiYoeD1iLGI9eSx5PXgsej0hMCksTT0wO3ZvaWQgMD09PV8mJk08VC5sZW5ndGgtMTspXz1tLmMycChUW01dKSxNKys7Zm9yKE09VC5sZW5ndGgtMTt2b2lkIDA9PT13JiZNPjA7KXc9bS5jMnAoVFtNXSksTS0tO2lmKHc8XyYmKHg9XyxfPXcsdz14LEk9ITApLFMmJihBPXJbMF0ueGZpbGwsVD1yWzBdLnlmaWxsKSwiZmFzdCIhPT1FKXt2YXIgRD0iYmVzdCI9PT1FPzA6LjU7eT1NYXRoLm1heCgtRCpwLl9sZW5ndGgseSksYj1NYXRoLm1pbigoMStEKSpwLl9sZW5ndGgsYiksXz1NYXRoLm1heCgtRCptLl9sZW5ndGgsXyksdz1NYXRoLm1pbigoMStEKSptLl9sZW5ndGgsdyl9dmFyIFA9TWF0aC5yb3VuZChiLXkpLE89TWF0aC5yb3VuZCh3LV8pLFI9UDw9MHx8Tzw9MCxGPWUucGxvdC5zZWxlY3QoIi5pbWFnZWxheWVyIikuc2VsZWN0QWxsKCJnLmhtLiIrZykuZGF0YShSP1tdOlswXSk7aWYoRi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImhtIiwhMCkuY2xhc3NlZChnLCEwKSxGLmV4aXQoKS5yZW1vdmUoKSwhUil7dmFyIGosTjsiZmFzdCI9PT1FPyhqPUMsTj1MKTooaj1QLE49Tyk7dmFyIEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Qi53aWR0aD1qLEIuaGVpZ2h0PU47dmFyIFUsVixIPUIuZ2V0Q29udGV4dCgiMmQiKSxxPXMubWFrZUNvbG9yU2NhbGVGdW5jKHMuZXh0cmFjdFNjYWxlKGYuY29sb3JzY2FsZSxmLnptaW4sZi56bWF4KSx7bm9OdW1lcmljQ2hlY2s6ITAscmV0dXJuQXJyYXk6ITB9KTsiZmFzdCI9PT1FPyhVPXo/ZnVuY3Rpb24odCl7cmV0dXJuIEMtMS10fTpvLmlkZW50aXR5LFY9ST9mdW5jdGlvbih0KXtyZXR1cm4gTC0xLXR9Om8uaWRlbnRpdHkpOihVPWZ1bmN0aW9uKHQpe3JldHVybiBvLmNvbnN0cmFpbihNYXRoLnJvdW5kKHAuYzJwKEFbdF0pLXkpLDAsUCl9LFY9ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQobS5jMnAoVFt0XSktXyksMCxPKX0pO3ZhciBHLFksWCxXLFosSixLLFE9VigwKSwkPVtRLFFdLHR0PXo/MDoxLGV0PUk/MDoxLHJ0PTAsbnQ9MCxpdD0wLGF0PTA7aWYoRSl7dmFyIG90LHN0PTA7dHJ5e290PW5ldyBVaW50OEFycmF5KFAqTyo0KX1jYXRjaCh0KXtvdD1uZXcgQXJyYXkoUCpPKjQpfWlmKCJiZXN0Ij09PUUpe3ZhciBsdCx1dCxjdCxodD1uZXcgQXJyYXkoQS5sZW5ndGgpLGZ0PW5ldyBBcnJheShULmxlbmd0aCksZHQ9bmV3IEFycmF5KFApO2ZvcihNPTA7TTxBLmxlbmd0aDtNKyspaHRbTV09TWF0aC5yb3VuZChwLmMycChBW01dKS15KTtmb3IoTT0wO008VC5sZW5ndGg7TSsrKWZ0W01dPU1hdGgucm91bmQobS5jMnAoVFtNXSktXyk7Zm9yKE09MDtNPFA7TSsrKWR0W01dPW4oTSxodCk7Zm9yKFg9MDtYPE87WCsrKWZvcihsdD1uKFgsZnQpLHV0PWtbbHQuYmluMF0sY3Q9a1tsdC5iaW4xXSxNPTA7TTxQO00rKyxzdCs9NClLPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbci5iaW4wXTtpZih2b2lkIDA9PT1pKXJldHVybiBjKHZvaWQgMCwxKTt2YXIgYSxvPXRbci5iaW4xXSxzPWVbci5iaW4wXSxsPWVbci5iaW4xXSx1PW8taXx8MCxoPXMtaXx8MDtyZXR1cm4gYT12b2lkIDA9PT1vP3ZvaWQgMD09PWw/MDp2b2lkIDA9PT1zPzIqKGwtaSk6MiooMipsLXMtaSkvMzp2b2lkIDA9PT1sP3ZvaWQgMD09PXM/MDoyKigyKmktby1zKS8zOnZvaWQgMD09PXM/MiooMipsLW8taSkvMzpsK2ktby1zLGMoaStyLmZyYWMqdStuLmZyYWMqKGgrci5mcmFjKmEpKX0odXQsY3QsZHRbTV0sbHQpLGgob3Qsc3QsSyl9ZWxzZSBmb3IoWD0wO1g8TDtYKyspZm9yKEo9a1tYXSwkPVYoWCksTT0wO008UDtNKyspSz1jKEpbTV0sMSksc3Q9NCooJCpQK1UoTSkpLGgob3Qsc3QsSyk7dmFyIHB0PUguY3JlYXRlSW1hZ2VEYXRhKFAsTyk7dHJ5e3B0LmRhdGEuc2V0KG90KX1jYXRjaCh0KXt2YXIgbXQ9cHQuZGF0YSx2dD1tdC5sZW5ndGg7Zm9yKFg9MDtYPHZ0O1grKyltdFtYXT1vdFtYXX1ILnB1dEltYWdlRGF0YShwdCwwLDApfWVsc2UgZm9yKFg9MDtYPEw7WCsrKWlmKEo9a1tYXSwkLnJldmVyc2UoKSwkW2V0XT1WKFgrMSksJFswXSE9PSRbMV0mJnZvaWQgMCE9PSRbMF0mJnZvaWQgMCE9PSRbMV0pZm9yKFc9VSgwKSxZPVtXLFddLE09MDtNPEM7TSsrKVkucmV2ZXJzZSgpLFlbdHRdPVUoTSsxKSxZWzBdIT09WVsxXSYmdm9pZCAwIT09WVswXSYmdm9pZCAwIT09WVsxXSYmKFo9SltNXSxLPWMoWiwoWVsxXS1ZWzBdKSooJFsxXS0kWzBdKSksSC5maWxsU3R5bGU9InJnYmEoIitLLmpvaW4oIiwiKSsiKSIsRz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCl7dmFyIHU9e3gwOmUseDE6cix5MDpuLHkxOml9LGM9Mip0LnhnYXAvMyxoPTIqdC55Z2FwLzMsZj10LnhnYXAvMyxkPXQueWdhcC8zO3JldHVybiBzPT09bC0xJiYodS55MT1pLWgpLGE9PT1vLTEmJih1LngwPWUrYyksMD09PXMmJih1LnkwPW4raCksMD09PWEmJih1LngxPXItYyksYT4wJiZhPG8tMSYmKHUueDA9ZStmLHUueDE9ci1mKSxzPjAmJnM8bC0xJiYodS55MD1uK2QsdS55MT1pLWQpLHV9KGYsWVswXSxZWzFdLCRbMF0sJFsxXSxNLEMsWCxMKSxILmZpbGxSZWN0KEcueDAsRy55MCxHLngxLUcueDAsRy55MS1HLnkwKSk7bnQ9TWF0aC5yb3VuZChudC9ydCksaXQ9TWF0aC5yb3VuZChpdC9ydCksYXQ9TWF0aC5yb3VuZChhdC9ydCk7dmFyIGd0PWkoInJnYigiK250KyIsIitpdCsiLCIrYXQrIikiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStydCx0Ll9obWx1bWNvdW50PSh0Ll9obWx1bWNvdW50fHwwKStydCpndC5nZXRMdW1pbmFuY2UoKTt2YXIgeXQ9Ri5zZWxlY3RBbGwoImltYWdlIikuZGF0YShyKTt5dC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSx5dC5hdHRyKHtoZWlnaHQ6Tyx3aWR0aDpQLHg6eSx5Ol8sInhsaW5rOmhyZWYiOkIudG9EYXRhVVJMKCJpbWFnZS9wbmciKX0pLHl0LmV4aXQoKS5yZW1vdmUoKX19dmFyIGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHU9dCgiLi9tYXhfcm93X2xlbmd0aCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspbih0LGUscltpXSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzA2LCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcmVnaXN0cnkiOjg0MiwiLi9tYXhfcm93X2xlbmd0aCI6OTU0LHRpbnljb2xvcjI6NTMyfV0sOTU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmhtIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KX19LHtkMzoxMjB9XSw5NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3ZhciByPWUodCk7cmV0dXJuInNjYWxlZCI9PT0ocj9lKHQrInR5cGUiLCJhcnJheSIpOiJzY2FsZWQiKSYmKGUodCsiMCIpLGUoImQiK3QpKSxyfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlLHI9ITAsbj0hMSxpPSExLG89MDtvPHQubGVuZ3RoO28rKyl7aWYoZT10W29dLCFBcnJheS5pc0FycmF5KGUpKXtyPSExO2JyZWFrfWUubGVuZ3RoPjAmJihuPSEwKTtmb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKylpZihhKGVbc10pKXtpPSEwO2JyZWFrfX1yZXR1cm4gciYmbiYmaX12YXIgYT10KCJmYXN0LWlzbnVtZXJpYyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4vaGFzX2NvbHVtbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxsLHUpe3ZhciBjPXIoInoiKTtsPWx8fCJ4Iix1PXV8fCJ5Ijt2YXIgaCxmO2lmKHZvaWQgMD09PWN8fCFjLmxlbmd0aClyZXR1cm4gMDtpZihzKHQpKXtpZihoPXIobCksZj1yKHUpLCFofHwhZilyZXR1cm4gMH1lbHNle2lmKGg9bihsLHIpLGY9bih1LHIpLCFpKGMpKXJldHVybiAwO3IoInRyYW5zcG9zZSIpfXJldHVybiBvLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbbCx1XSxhKSxlLnoubGVuZ3RofX0seyIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2hhc19jb2x1bW5zIjo5NDksImZhc3QtaXNudW1lcmljIjoxMjl9XSw5NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGM9c1t1XTtsW2NdPW5bY119byhsLGkse2F1dG9jb2xvcnNjYWxlOm8oe30saS5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pfSx7Y29sb3JiYXI6YX0pLGUuZXhwb3J0cz1sfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjA3LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6OTQyfV0sOTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9ImhlYXRtYXBnbCIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9byh0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc31mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10LmNvbG9yc2NhbGUscj10LnptaW4sbj10LnptYXgsaT1lLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheSg0KmkpLHM9MDtzPGk7cysrKXt2YXIgdT1lW3NdLGM9bCh1WzFdKTthW3NdPXIrdVswXSoobi1yKTtmb3IodmFyIGg9MDtoPDQ7aCsrKW9bNCpzK2hdPWNbaF19cmV0dXJue2NvbG9yTGV2ZWxzOmEsY29sb3JWYWx1ZXM6b319ZnVuY3Rpb24gYSh0LGUscil7dmFyIGk9bmV3IG4odCxlLnVpZCk7cmV0dXJuIGkudXBkYXRlKGUsciksaX12YXIgbz10KCJnbC1oZWF0bWFwMmQiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksdT1uLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxpPW4lclswXSxhPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFtpXSxlLnlbYV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2EsaV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIGE9blswXS5sZW5ndGgsbz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W2Esb10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueTt2YXIgbD1pKHQpO3RoaXMub3B0aW9ucy5jb2xvckxldmVscz1sLmNvbG9yTGV2ZWxzLHRoaXMub3B0aW9ucy5jb2xvclZhbHVlcz1sLmNvbG9yVmFsdWVzLHRoaXMudGV4dExhYmVscz1bXS5jb25jYXQuYXBwbHkoW10sdC50ZXh0KSx0aGlzLmhlYXRtYXAudXBkYXRlKHRoaXMub3B0aW9ucykscy5leHBhbmQodGhpcy5zY2VuZS54YXhpcyxyLngpLHMuZXhwYW5kKHRoaXMuc2NlbmUueWF4aXMsci55KX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWF9LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCJnbC1oZWF0bWFwMmQiOjE2NH1dLDk2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuLi9oZWF0bWFwL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9oZWF0bWFwL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4uL2hlYXRtYXAvY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9ImhlYXRtYXBnbCIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDJkIiksbi5jYXRlZ29yaWVzPVsiZ2wyZCIsIjJkTWFwIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjgwNCwiLi4vaGVhdG1hcC9jYWxjIjo5NDMsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjk0NSwiLi4vaGVhdG1hcC9kZWZhdWx0cyI6OTQ3LCIuL2F0dHJpYnV0ZXMiOjk1OCwiLi9jb252ZXJ0Ijo5NTl9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpudWxsfSxlbmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpudWxsfSxzaXplOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbH19fXZhciBpPXQoIi4uL2Jhci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6aS50ZXh0LG9yaWVudGF0aW9uOmkub3JpZW50YXRpb24saGlzdGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWluIiwibWF4Il0sZGZsdDoiY291bnQifSxoaXN0bm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwicGVyY2VudCIsInByb2JhYmlsaXR5IiwiZGVuc2l0eSIsInByb2JhYmlsaXR5IGRlbnNpdHkiXSxkZmx0OiIifSxjdW11bGF0aXZlOntlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxkaXJlY3Rpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY3JlYXNpbmciLCJkZWNyZWFzaW5nIl0sZGZsdDoiaW5jcmVhc2luZyJ9LGN1cnJlbnRiaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY2x1ZGUiLCJleGNsdWRlIiwiaGFsZiJdLGRmbHQ6ImluY2x1ZGUifX0sYXV0b2Jpbng6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbH0sbmJpbnN4Ont2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjB9LHhiaW5zOm4oIngiKSxhdXRvYmlueTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsfSxuYmluc3k6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MH0seWJpbnM6bigieSIpLG1hcmtlcjppLm1hcmtlcixlcnJvcl95OmkuZXJyb3JfeSxlcnJvcl94OmkuZXJyb3JfeCxfZGVwcmVjYXRlZDp7YmFyZGlyOmkuX2RlcHJlY2F0ZWQuYmFyZGlyfX19LHsiLi4vYmFyL2F0dHJpYnV0ZXMiOjg1Mn1dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wLGk9MDtpPHI7aSsrKWVbaV0/KHRbaV0vPWVbaV0sbis9dFtpXSk6dFtpXT1udWxsO3JldHVybiBufX0se31dLDk2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHIoImhpc3Rub3JtIiksbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IodCsiYmlucy5zdGFydCIpLHIodCsiYmlucy5lbmQiKSxyKHQrImJpbnMuc2l6ZSIpLHIoImF1dG9iaW4iK3QpLHIoIm5iaW5zIit0KX0pLGV9fSx7fV0sOTY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSw5NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbihlKXtzPXRbZV0sdFtlXS89Mn1mdW5jdGlvbiBpKGUpe289dFtlXSx0W2VdPXMrby8yLHMrPW99dmFyIGEsbyxzO2lmKCJoYWxmIj09PXIpaWYoImluY3JlYXNpbmciPT09ZSlmb3IobigwKSxhPTE7YTx0Lmxlbmd0aDthKyspaShhKTtlbHNlIGZvcihuKHQubGVuZ3RoLTEpLGE9dC5sZW5ndGgtMjthPj0wO2EtLSlpKGEpO2Vsc2UgaWYoImluY3JlYXNpbmciPT09ZSl7Zm9yKGE9MTthPHQubGVuZ3RoO2ErKyl0W2FdKz10W2EtMV07ImV4Y2x1ZGUiPT09ciYmKHQudW5zaGlmdCgwKSx0LnBvcCgpKX1lbHNle2ZvcihhPXQubGVuZ3RoLTI7YT49MDthLS0pdFthXSs9dFthKzFdOyJleGNsdWRlIj09PXImJih0LnB1c2goMCksdC5zaGlmdCgpKX19dmFyIGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4vYmluX2Z1bmN0aW9ucyIpLHU9dCgiLi9ub3JtX2Z1bmN0aW9ucyIpLGM9dCgiLi9hdmVyYWdlIiksaD10KCIuL2NsZWFuX2JpbnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighMD09PWUudmlzaWJsZSl7dmFyIHIsZj1bXSxkPVtdLHA9by5nZXRGcm9tSWQodCwiaCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXN8fCJ5IjplLnhheGlzfHwieCIpLG09ImgiPT09ZS5vcmllbnRhdGlvbj8ieSI6IngiLHY9e3g6InkiLHk6IngifVttXSxnPWVbbSsiY2FsZW5kYXIiXSx5PWUuY3VtdWxhdGl2ZTtoKGUscCxtKTt2YXIgYj1wLm1ha2VDYWxjZGF0YShlLG0pLHg9bSsiYmlucyIsXz0iYXV0b2JpbiIrbSx3PWVbeF07ITE9PT1lW19dJiZ3JiZudWxsIT09dy5zdGFydCYmbnVsbCE9PXcuZW5kfHwodz1vLmF1dG9CaW4oYixwLGVbIm5iaW5zIittXSwhMSxnKSx5LmVuYWJsZWQmJiJpbmNsdWRlIiE9PXkuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PXkuZGlyZWN0aW9uP3cuc3RhcnQ9cC5jMnIocC5yMmMody5zdGFydCktdy5zaXplKTp3LmVuZD1wLmMycihwLnIyYyh3LmVuZCkrdy5zaXplKSksZS5faW5wdXRbeF09ZVt4XT13LGUuX2lucHV0W19dPWVbX10pO3ZhciBNLGssQSxUPSJzdHJpbmciPT10eXBlb2Ygdy5zaXplLFM9VD9bXTp3LEU9W10sTD1bXSxDPTAsej1lLmhpc3Rub3JtLEk9ZS5oaXN0ZnVuYyxEPS0xIT09ei5pbmRleE9mKCJkZW5zaXR5Iik7eS5lbmFibGVkJiZEJiYoej16LnJlcGxhY2UoLyA/ZGVuc2l0eSQvLCIiKSxEPSExKTt2YXIgUCxPPSJtYXgiPT09SXx8Im1pbiI9PT1JLFI9Tz9udWxsOjAsRj1sLmNvdW50LGo9dVt6XSxOPSExLEI9ZnVuY3Rpb24odCl7cmV0dXJuIHAucjJjKHQsMCxnKX07Zm9yKEFycmF5LmlzQXJyYXkoZVt2XSkmJiJjb3VudCIhPT1JJiYoUD1lW3ZdLE49ImF2ZyI9PT1JLEY9bFtJXSkscj1CKHcuc3RhcnQpLGs9Qih3LmVuZCkrKHItby50aWNrSW5jcmVtZW50KHIsdy5zaXplLCExLGcpKS8xZTY7cjxrJiZmLmxlbmd0aDwxZTYmJihNPW8udGlja0luY3JlbWVudChyLHcuc2l6ZSwhMSxnKSxmLnB1c2goKHIrTSkvMiksZC5wdXNoKFIpLFQmJlMucHVzaChyKSxEJiZFLnB1c2goMS8oTS1yKSksTiYmTC5wdXNoKDApLCEoTTw9cikpOylyPU07VHx8ImRhdGUiIT09cC50eXBlfHwoUz17c3RhcnQ6QihTLnN0YXJ0KSxlbmQ6QihTLmVuZCksc2l6ZTpTLnNpemV9KTt2YXIgVT1kLmxlbmd0aDtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKShBPWEuZmluZEJpbihiW3JdLFMpKT49MCYmQTxVJiYoQys9RihBLHIsZCxQLEwpKTtOJiYoQz1jKGQsTCkpLGomJmooZCxDLEUpLHkuZW5hYmxlZCYmbihkLHkuZGlyZWN0aW9uLHkuY3VycmVudGJpbik7dmFyIFY9TWF0aC5taW4oZi5sZW5ndGgsZC5sZW5ndGgpLEg9W10scT0wLEc9Vi0xO2ZvcihyPTA7cjxWO3IrKylpZihkW3JdKXtxPXI7YnJlYWt9Zm9yKHI9Vi0xO3I+cTtyLS0paWYoZFtyXSl7Rz1yO2JyZWFrfWZvcihyPXE7cjw9RztyKyspaShmW3JdKSYmaShkW3JdKSYmSC5wdXNoKHtwOmZbcl0sczpkW3JdLGI6MH0pO3JldHVybiBzKEgsZSksSH19fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIjo4NTEsIi4vYXZlcmFnZSI6OTYyLCIuL2Jpbl9mdW5jdGlvbnMiOjk2NCwiLi9jbGVhbl9iaW5zIjo5NjYsIi4vbm9ybV9mdW5jdGlvbnMiOjk2OSwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDk2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIikuY2xlYW5EYXRlLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLG89YS5PTkVEQVkscz1hLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWUudHlwZSxsPXIrImJpbnMiLHU9dFtsXTt1fHwodT10W2xdPXt9KTt2YXIgYz0iZGF0ZSI9PT1hP2Z1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dD9pKHQscyx1LmNhbGVuZGFyKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07dS5zdGFydD1jKHUuc3RhcnQpLHUuZW5kPWModS5lbmQpO3ZhciBoPSJkYXRlIj09PWE/bzoxLGY9dS5zaXplO2lmKG4oZikpdS5zaXplPWY+MD9OdW1iZXIoZik6aDtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZil1LnNpemU9aDtlbHNle3ZhciBkPWYuY2hhckF0KDApLHA9Zi5zdWJzdHIoMSk7cD1uKHApP051bWJlcihwKTowLChwPD0wfHwiZGF0ZSIhPT1hfHwiTSIhPT1kfHxwIT09TWF0aC5yb3VuZChwKSkmJih1LnNpemU9aCl9dmFyIG09ImF1dG9iaW4iK3I7ImJvb2xlYW4iIT10eXBlb2YgdFttXSYmKHRbbV09ISgodS5zdGFydHx8MD09PXUuc3RhcnQpJiYodS5lbmR8fDA9PT11LmVuZCkpKSx0W21dfHxkZWxldGUgdFsibmJpbnMiK3JdfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4vYmluX2RlZmF1bHRzIikscz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2RlZmF1bHRzIiksdT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsdSxyLG4pfXZhciBmPWgoIngiKSxkPWgoInkiKTtoKCJjdW11bGF0aXZlLmVuYWJsZWQiKSYmKGgoImN1bXVsYXRpdmUuZGlyZWN0aW9uIiksaCgiY3VtdWxhdGl2ZS5jdXJyZW50YmluIikpLGgoInRleHQiKTt2YXIgcD1oKCJvcmllbnRhdGlvbiIsZCYmIWY/ImgiOiJ2IiksbT1lWyJ2Ij09PXA/IngiOiJ5Il07aWYoIW18fCFtLmxlbmd0aClyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO24uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxjKSxlWyJoIj09PXA/IngiOiJ5Il0mJmgoImhpc3RmdW5jIiksbyh0LGUsaCwiaCI9PT1wP1sieSJdOlsieCJdKSxzKHQsZSxoLHIsYyksbCh0LGUsYS5kZWZhdWx0TGluZSx7YXhpczoieSJ9KSxsKHQsZSxhLmRlZmF1bHRMaW5lLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2RlZmF1bHRzIjo2MzEsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjg2MywiLi9hdHRyaWJ1dGVzIjo5NjEsIi4vYmluX2RlZmF1bHRzIjo5NjN9XSw5Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubGF5b3V0QXR0cmlidXRlcz10KCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5zZXRQb3NpdGlvbnM9dCgiLi4vYmFyL3NldF9wb3NpdGlvbnMiKSxuLnBsb3Q9dCgiLi4vYmFyL3Bsb3QiKSxuLnN0eWxlPXQoIi4uL2Jhci9zdHlsZSIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uaG92ZXJQb2ludHM9dCgiLi4vYmFyL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4uL2Jhci9ob3ZlciI6ODU1LCIuLi9iYXIvbGF5b3V0X2F0dHJpYnV0ZXMiOjg1NywiLi4vYmFyL2xheW91dF9kZWZhdWx0cyI6ODU4LCIuLi9iYXIvcGxvdCI6ODU5LCIuLi9iYXIvc2V0X3Bvc2l0aW9ucyI6ODYwLCIuLi9iYXIvc3R5bGUiOjg2MiwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi9hdHRyaWJ1dGVzIjo5NjEsIi4vY2FsYyI6OTY1LCIuL2RlZmF1bHRzIjo5Njd9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtwZXJjZW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MTAwL2UsaT0wO2k8cjtpKyspdFtpXSo9bn0scHJvYmFiaWxpdHk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspdFtuXS89ZX0sZGVuc2l0eTpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuPW58fDE7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdKm59LCJwcm9iYWJpbGl0eSBkZW5zaXR5IjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Lmxlbmd0aDtuJiYoZS89bik7Zm9yKHZhciBhPTA7YTxpO2ErKyl0W2FdKj1yW2FdL2V9fX0se31dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0vYXR0cmlidXRlcyIpLGk9dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7fSx7eDpuLngseTpuLnksejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX0saGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLGF1dG9iaW54Om4uYXV0b2JpbngsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOm4ueGJpbnMsYXV0b2Jpbnk6bi5hdXRvYmlueSxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55Ymlucyx4Z2FwOmkueGdhcCx5Z2FwOmkueWdhcCx6c21vb3RoOmkuenNtb290aH0sYSx7YXV0b2NvbG9yc2NhbGU6cyh7fSxhLmF1dG9jb2xvcnNjYWxlLHtkZmx0OiExfSl9LHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIjo5NDIsIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIjo5NjF9XSw5NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiKSxvPXQoIi4uL2hpc3RvZ3JhbS9ub3JtX2Z1bmN0aW9ucyIpLHM9dCgiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiKSxsPXQoIi4uL2hpc3RvZ3JhbS9jbGVhbl9iaW5zIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxjLGgsZixkLHA9aS5nZXRGcm9tSWQodCxlLnhheGlzfHwieCIpLG09ZS54P3AubWFrZUNhbGNkYXRhKGUsIngiKTpbXSx2PWkuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxnPWUueT92Lm1ha2VDYWxjZGF0YShlLCJ5Iik6W10seT1lLnhjYWxlbmRhcixiPWUueWNhbGVuZGFyLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHAucjJjKHQsMCx5KX0sXz1mdW5jdGlvbih0KXtyZXR1cm4gdi5yMmModCwwLGIpfSx3PWZ1bmN0aW9uKHQpe3JldHVybiBwLmMycih0LDAseSl9LE09ZnVuY3Rpb24odCl7cmV0dXJuIHYuYzJyKHQsMCxiKX07bChlLHAsIngiKSxsKGUsdiwieSIpO3ZhciBrPU1hdGgubWluKG0ubGVuZ3RoLGcubGVuZ3RoKTttLmxlbmd0aD5rJiZtLnNwbGljZShrLG0ubGVuZ3RoLWspLGcubGVuZ3RoPmsmJmcuc3BsaWNlKGssZy5sZW5ndGgtayksIWUuYXV0b2JpbngmJmUueGJpbnMmJm51bGwhPT1lLnhiaW5zLnN0YXJ0JiZudWxsIT09ZS54Ymlucy5lbmR8fChlLnhiaW5zPWkuYXV0b0JpbihtLHAsZS5uYmluc3gsIjJkIix5KSwiaGlzdG9ncmFtMmRjb250b3VyIj09PWUudHlwZSYmKGUueGJpbnMuc3RhcnQ9dyhpLnRpY2tJbmNyZW1lbnQoeChlLnhiaW5zLnN0YXJ0KSxlLnhiaW5zLnNpemUsITAseSkpLGUueGJpbnMuZW5kPXcoaS50aWNrSW5jcmVtZW50KHgoZS54Ymlucy5lbmQpLGUueGJpbnMuc2l6ZSwhMSx5KSkpLGUuX2lucHV0LnhiaW5zPWUueGJpbnMsZS5faW5wdXQuYXV0b2Jpbng9ZS5hdXRvYmlueCksIWUuYXV0b2JpbnkmJmUueWJpbnMmJm51bGwhPT1lLnliaW5zLnN0YXJ0JiZudWxsIT09ZS55Ymlucy5lbmR8fChlLnliaW5zPWkuYXV0b0JpbihnLHYsZS5uYmluc3ksIjJkIixiKSwiaGlzdG9ncmFtMmRjb250b3VyIj09PWUudHlwZSYmKGUueWJpbnMuc3RhcnQ9TShpLnRpY2tJbmNyZW1lbnQoXyhlLnliaW5zLnN0YXJ0KSxlLnliaW5zLnNpemUsITAsYikpLGUueWJpbnMuZW5kPU0oaS50aWNrSW5jcmVtZW50KF8oZS55Ymlucy5lbmQpLGUueWJpbnMuc2l6ZSwhMSxiKSkpLGUuX2lucHV0LnliaW5zPWUueWJpbnMsCmUuX2lucHV0LmF1dG9iaW55PWUuYXV0b2JpbnkpLGY9W107dmFyIEEsVCxTPVtdLEU9W10sTD0ic3RyaW5nIj09dHlwZW9mIGUueGJpbnMuc2l6ZSxDPSJzdHJpbmciPT10eXBlb2YgZS55Ymlucy5zaXplLHo9TD9bXTplLnhiaW5zLEk9Qz9bXTplLnliaW5zLEQ9MCxQPVtdLE89ZS5oaXN0bm9ybSxSPWUuaGlzdGZ1bmMsRj0tMSE9PU8uaW5kZXhPZigiZGVuc2l0eSIpLGo9Im1heCI9PT1SfHwibWluIj09PVIsTj1qP251bGw6MCxCPWEuY291bnQsVT1vW09dLFY9ITEsSD1bXSxxPVtdLEc9InoiaW4gZT9lLno6Im1hcmtlciJpbiBlJiZBcnJheS5pc0FycmF5KGUubWFya2VyLmNvbG9yKT9lLm1hcmtlci5jb2xvcjoiIjtHJiYiY291bnQiIT09UiYmKFY9ImF2ZyI9PT1SLEI9YVtSXSk7dmFyIFk9ZS54YmlucyxYPXgoWS5zdGFydCksVz14KFkuZW5kKSsoWC1pLnRpY2tJbmNyZW1lbnQoWCxZLnNpemUsITEseSkpLzFlNjtmb3IoZD1YO2Q8VztkPWkudGlja0luY3JlbWVudChkLFkuc2l6ZSwhMSx5KSlTLnB1c2goTiksTCYmei5wdXNoKGQpLFYmJkUucHVzaCgwKTtMJiZ6LnB1c2goZCk7dmFyIFo9Uy5sZW5ndGg7cj1lLnhiaW5zLnN0YXJ0O3ZhciBKPXgocik7Zm9yKHU9KGQtSikvWixyPXcoSit1LzIpLFk9ZS55YmlucyxYPV8oWS5zdGFydCksVz1fKFkuZW5kKSsoWC1pLnRpY2tJbmNyZW1lbnQoWCxZLnNpemUsITEsYikpLzFlNixkPVg7ZDxXO2Q9aS50aWNrSW5jcmVtZW50KGQsWS5zaXplLCExLGIpKWYucHVzaChTLmNvbmNhdCgpKSxDJiZJLnB1c2goZCksViYmUC5wdXNoKEUuY29uY2F0KCkpO0MmJkkucHVzaChkKTt2YXIgSz1mLmxlbmd0aDtjPWUueWJpbnMuc3RhcnQ7dmFyIFE9XyhjKTtmb3IoaD0oZC1RKS9LLGM9TShRK2gvMiksRiYmKEg9Uy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gTD8xLyh6W2UrMV0teltlXSk6MS91fSkscT1mLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBDPzEvKElbZSsxXS1JW2VdKToxL2h9KSksTHx8ImRhdGUiIT09cC50eXBlfHwoej17c3RhcnQ6eCh6LnN0YXJ0KSxlbmQ6eCh6LmVuZCksc2l6ZTp6LnNpemV9KSxDfHwiZGF0ZSIhPT12LnR5cGV8fChJPXtzdGFydDpfKEkuc3RhcnQpLGVuZDpfKEkuZW5kKSxzaXplOkkuc2l6ZX0pLGQ9MDtkPGs7ZCsrKUE9bi5maW5kQmluKG1bZF0seiksVD1uLmZpbmRCaW4oZ1tkXSxJKSxBPj0wJiZBPFomJlQ+PTAmJlQ8SyYmKEQrPUIoQSxkLGZbVF0sRyxQW1RdKSk7aWYoVilmb3IoVD0wO1Q8SztUKyspRCs9cyhmW1RdLFBbVF0pO2lmKFUpZm9yKFQ9MDtUPEs7VCsrKVUoZltUXSxELEgscVtUXSk7cmV0dXJue3g6bSx4MDpyLGR4OnUseTpnLHkwOmMsZHk6aCx6OmZ9fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vaGlzdG9ncmFtL2F2ZXJhZ2UiOjk2MiwiLi4vaGlzdG9ncmFtL2Jpbl9mdW5jdGlvbnMiOjk2NCwiLi4vaGlzdG9ncmFtL2NsZWFuX2JpbnMiOjk2NiwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIjo5Njl9XSw5NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLGwscyksITE9PT1sKCJ6c21vb3RoIikmJihsKCJ4Z2FwIiksbCgieWdhcCIpKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTcwLCIuL3NhbXBsZV9kZWZhdWx0cyI6OTc0fV0sOTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi4vaGVhdG1hcC9jYWxjIiksbi5wbG90PXQoIi4uL2hlYXRtYXAvcGxvdCIpLG4uY29sb3JiYXI9dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLG4uc3R5bGU9dCgiLi4vaGVhdG1hcC9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi4vaGVhdG1hcC9ob3ZlciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0iaGlzdG9ncmFtMmQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiLCJoaXN0b2dyYW0iXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4uL2hlYXRtYXAvY2FsYyI6OTQzLCIuLi9oZWF0bWFwL2NvbG9yYmFyIjo5NDUsIi4uL2hlYXRtYXAvaG92ZXIiOjk1MCwiLi4vaGVhdG1hcC9wbG90Ijo5NTUsIi4uL2hlYXRtYXAvc3R5bGUiOjk1NiwiLi9hdHRyaWJ1dGVzIjo5NzAsIi4vZGVmYXVsdHMiOjk3Mn1dLDk3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vaGlzdG9ncmFtL2Jpbl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1yKCJ4Iikscz1yKCJ5Iik7aWYoIShvJiZvLmxlbmd0aCYmcyYmcy5sZW5ndGgpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxpKHQsZSxyLFsieCIsInkiXSl9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uL2hpc3RvZ3JhbS9iaW5fZGVmYXVsdHMiOjk2M31dLDk3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb250b3VyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHt9LHt4Om4ueCx5Om4ueSx6Om4ueixtYXJrZXI6bi5tYXJrZXIsaGlzdG5vcm06bi5oaXN0bm9ybSxoaXN0ZnVuYzpuLmhpc3RmdW5jLGF1dG9iaW54Om4uYXV0b2JpbngsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOm4ueGJpbnMsYXV0b2Jpbnk6bi5hdXRvYmlueSxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3VyczppLmNvbnRvdXJzLGxpbmU6aS5saW5lfSxhLHt6bWluOnMoe30sYS56bWluLHtlZGl0VHlwZToiZG9jYWxjIn0pLHptYXg6cyh7fSxhLnptYXgse2VkaXRUeXBlOiJkb2NhbGMifSl9LHtjb2xvcmJhcjpvfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjo5MTQsIi4uL2hpc3RvZ3JhbTJkL2F0dHJpYnV0ZXMiOjk3MH1dLDk3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSx1LGwpLGEodCxlLHUpLG8odCxlLHUsbCl9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjo5MTgsIi4uL2NvbnRvdXIvc3R5bGVfZGVmYXVsdHMiOjkyOCwiLi4vaGlzdG9ncmFtMmQvc2FtcGxlX2RlZmF1bHRzIjo5NzQsIi4vYXR0cmlidXRlcyI6OTc1fV0sOTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi4vY29udG91ci9jYWxjIiksbi5wbG90PXQoIi4uL2NvbnRvdXIvcGxvdCIpLnBsb3Qsbi5zdHlsZT10KCIuLi9jb250b3VyL3N0eWxlIiksbi5jb2xvcmJhcj10KCIuLi9jb250b3VyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuLi9jb250b3VyL2hvdmVyIiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJoaXN0b2dyYW0yZGNvbnRvdXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwiMmRNYXAiLCJjb250b3VyIiwiaGlzdG9ncmFtIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6Nzc0LCIuLi9jb250b3VyL2NhbGMiOjkxNSwiLi4vY29udG91ci9jb2xvcmJhciI6OTE2LCIuLi9jb250b3VyL2hvdmVyIjo5MjIsIi4uL2NvbnRvdXIvcGxvdCI6OTI2LCIuLi9jb250b3VyL3N0eWxlIjo5MjcsIi4vYXR0cmlidXRlcyI6OTc1LCIuL2RlZmF1bHRzIjo5NzZ9XSw5Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxqOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sazp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGRlbGF1bmF5YXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsieCIsInkiLCJ6Il0sZGZsdDoieiJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xfSxpbnRlbnNpdHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxjb2xvcjp7dmFsVHlwZToiY29sb3IifSx2ZXJ0ZXhjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG9wYWNpdHk6byh7fSxhLm9wYWNpdHkpLGZsYXRzaGFkaW5nOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb250b3VyOntzaG93Om8oe30sYS5jb250b3Vycy54LnNob3cse30pLGNvbG9yOm8oe30sYS5jb250b3Vycy54LmNvbG9yKSx3aWR0aDpvKHt9LGEuY29udG91cnMueC53aWR0aCl9LGNhdXRvOm4uemF1dG8sY21pbjpuLnptaW4sY21heDpuLnptYXgsY29sb3JzY2FsZTpuLmNvbG9yc2NhbGUscmV2ZXJzZXNjYWxlOm4ucmV2ZXJzZXNjYWxlLGF1dG9jb2xvcnNjYWxlOm8oe30sbi5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHNob3dzY2FsZTpuLnNob3dzY2FsZSxjb2xvcmJhcjppLGxpZ2h0cG9zaXRpb246e3g6byh7fSxhLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Om8oe30sYS5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpvKHt9LGEubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KX0sbGlnaHRpbmc6byh7fSx7dmVydGV4bm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS0xMn0sZmFjZW5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtNn19LGEubGlnaHRpbmcpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjYwNywiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiOjEwOTF9XSw5Nzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLmludGVuc2l0eSYmbihlLGUuaW50ZW5zaXR5LCIiLCJjIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDh9XSw5ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPSJjYiIrci51aWQsdT1yLmNtaW4sYz1yLmNtYXgsaD1yLmludGVuc2l0eXx8W107aWYobih1KXx8KHU9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsaCkpLG4oYyl8fChjPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGgpKSx0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIitsKS5yZW1vdmUoKSwhci5zaG93c2NhbGUpcmV0dXJuIHZvaWQgYS5hdXRvTWFyZ2luKHQsbCk7dmFyIGY9ZVswXS50LmNiPXModCxsKSxkPW8ubWFrZUNvbG9yU2NhbGVGdW5jKG8uZXh0cmFjdFNjYWxlKHIuY29sb3JzY2FsZSx1LGMpLHtub051bWVyaWNDaGVjazohMH0pO2YuZmlsbGNvbG9yKGQpLmZpbGxsZXZlbHMoe3N0YXJ0OnUsZW5kOmMsc2l6ZTooYy11KS8yNTR9KS5vcHRpb25zKHIuY29sb3JiYXIpKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyI6NjA1LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYxNiwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4MjcsImZhc3QtaXNudW1lcmljIjoxMjl9XSw5ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5tZXNoPWUsdGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9IiNmZmYiLHRoaXMuZGF0YT1udWxsLHRoaXMuc2hvd0NvbnRvdXI9ITF9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXUodFsxXSksbj1yLnRvUmdiKCk7cmV0dXJue2luZGV4OmUscmdiOltuLnIsbi5nLG4uYiwxXX19KX1mdW5jdGlvbiBhKHQpe3JldHVybiB0Lm1hcChkKX1mdW5jdGlvbiBvKHQsZSxyKXtmb3IodmFyIG49bmV3IEFycmF5KHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDsrK2kpbltpXT1bdFtpXSxlW2ldLHJbaV1dO3JldHVybiBufWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPWwoe2dsOnJ9KSxhPW5ldyBuKHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9dmFyIGw9dCgiZ2wtbWVzaDNkIiksdT10KCJ0aW55Y29sb3IyIiksYz10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGg9dCgiYWxwaGEtc2hhcGUiKSxmPXQoImNvbnZleC1odWxsIiksZD10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IikscD1uLnByb3RvdHlwZTtwLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5kYXRhLnhbZV0sdGhpcy5kYXRhLnlbZV0sdGhpcy5kYXRhLnpbZV1dLCEwfX0scC51cGRhdGU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUscixuKXtyZXR1cm4gZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSl9dmFyIHI9dGhpcy5zY2VuZSxuPXIuZnVsbFNjZW5lTGF5b3V0O3RoaXMuZGF0YT10O3ZhciBzLGw9byhlKG4ueGF4aXMsdC54LHIuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxlKG4ueWF4aXMsdC55LHIuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxlKG4uemF4aXMsdC56LHIuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuaylzPW8odC5pLHQuaix0LmspO2Vsc2UgaWYoMD09PXQuYWxwaGFodWxsKXM9ZihsKTtlbHNlIGlmKHQuYWxwaGFodWxsPjApcz1oKHQuYWxwaGFodWxsLGwpO2Vsc2V7dmFyIHU9WyJ4IiwieSIsInoiXS5pbmRleE9mKHQuZGVsYXVuYXlheGlzKTtzPWMobC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3RbKHUrMSklM10sdFsodSsyKSUzXV19KSl9dmFyIHA9e3Bvc2l0aW9uczpsLGNlbGxzOnMsbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LGNvbnRvdXJFbmFibGU6dC5jb250b3VyLnNob3csY29udG91ckNvbG9yOmQodC5jb250b3VyLmNvbG9yKS5zbGljZSgwLDMpLGNvbnRvdXJXaWR0aDp0LmNvbnRvdXIud2lkdGgsdXNlRmFjZXROb3JtYWxzOnQuZmxhdHNoYWRpbmd9O3QuaW50ZW5zaXR5Pyh0aGlzLmNvbG9yPSIjZmZmIixwLnZlcnRleEludGVuc2l0eT10LmludGVuc2l0eSxwLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdC5jbWluLHQuY21heF0scC5jb2xvcm1hcD1pKHQuY29sb3JzY2FsZSkpOnQudmVydGV4Y29sb3I/KHRoaXMuY29sb3I9dC52ZXJ0ZXhjb2xvclswXSxwLnZlcnRleENvbG9ycz1hKHQudmVydGV4Y29sb3IpKTp0LmZhY2Vjb2xvcj8odGhpcy5jb2xvcj10LmZhY2Vjb2xvclswXSxwLmNlbGxDb2xvcnM9YSh0LmZhY2Vjb2xvcikpOih0aGlzLmNvbG9yPXQuY29sb3IscC5tZXNoQ29sb3I9ZCh0LmNvbG9yKSksdGhpcy5tZXNoLnVwZGF0ZShwKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPXN9LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQyLCJhbHBoYS1zaGFwZSI6NDEsImNvbnZleC1odWxsIjoxMDEsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxMjEsImdsLW1lc2gzZCI6MjAzLHRpbnljb2xvcjI6NTMyfV0sOTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7cmV0dXJuIGUmJkFycmF5LmlzQXJyYXkoZSk/ZTpudWxsfSk7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSYmZX12YXIgYz11KFsieCIsInkiLCJ6Il0pLGg9dShbImkiLCJqIiwiayJdKTtpZighYylyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2gmJmguZm9yRWFjaChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoOysrZSl0W2VdfD0wfSksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxzKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJjb250b3VyLnNob3ciLCJjb250b3VyLmNvbG9yIiwiY29udG91ci53aWR0aCIsImNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJmbGF0c2hhZGluZyIsImFscGhhaHVsbCIsImRlbGF1bmF5YXhpcyIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2wodCl9KSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGEodCxlLHMsbCx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkpOihlLnNob3dzY2FsZT0hMSwiZmFjZWNvbG9yImluIHQ/bCgiZmFjZWNvbG9yIik6InZlcnRleGNvbG9yImluIHQ/bCgidmVydGV4Y29sb3IiKTpsKCJjb2xvciIscikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4vYXR0cmlidXRlcyI6OTc4fV0sOTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5jb2xvcmJhcj10KCIuL2NvbG9yYmFyIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ibWVzaDNkIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxuLmNhdGVnb3JpZXM9WyJnbDNkIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjgwNywiLi9hdHRyaWJ1dGVzIjo5NzgsIi4vY2FsYyI6OTc5LCIuL2NvbG9yYmFyIjo5ODAsIi4vY29udmVydCI6OTgxLCIuL2RlZmF1bHRzIjo5ODJ9XSw5ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPWkubGluZSxzPXtuYW1lOnt2YWxUeXBlOiJzdHJpbmcifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxsaW5lOntjb2xvcjpvLmNvbG9yLHdpZHRoOm8ud2lkdGgsZGFzaDphfX07ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sb3Blbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0saGlnaDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sbG93Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxjbG9zZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sbGluZTp7d2lkdGg6bi5leHRlbmRGbGF0KHt9LG8ud2lkdGgse30pLGRhc2g6bi5leHRlbmRGbGF0KHt9LGEse30pfSxpbmNyZWFzaW5nOm4uZXh0ZW5kRGVlcCh7fSxzLHtsaW5lOntjb2xvcjp7ZGZsdDoiIzNEOTk3MCJ9fX0pLGRlY3JlYXNpbmc6bi5leHRlbmREZWVwKHt9LHMse2xpbmU6e2NvbG9yOntkZmx0OiIjRkY0MTM2In19fSksdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LHRpY2t3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6LjUsZGZsdDouM319fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjUsIi4uLy4uL2xpYiI6NzI0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjV9XSw5ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuKXtvKHQsZSxyLG4pLHIobisiLmxpbmUuY29sb3IiKSxyKG4rIi5saW5lLndpZHRoIixlLmxpbmUud2lkdGgpLHIobisiLmxpbmUuZGFzaCIsZS5saW5lLmRhc2gpfXZhciBpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9vaGxjX2RlZmF1bHRzIiksbz10KCIuL2RpcmVjdGlvbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIiksbD10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7ZnVuY3Rpb24gdShyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUscyxyLG4pfWlmKGwucHVzaER1bW15VHJhbnNmb3JtT3B0cyh0LGUpLDA9PT1hKHQsZSx1LG8pKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dSgibGluZS53aWR0aCIpLHUoImxpbmUuZGFzaCIpLG4odCxlLHUsImluY3JlYXNpbmciKSxuKHQsZSx1LCJkZWNyZWFzaW5nIiksdSgidGV4dCIpLHUoInRpY2t3aWR0aCIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi9hdHRyaWJ1dGVzIjo5ODQsIi4vZGlyZWN0aW9uX2RlZmF1bHRzIjo5ODYsIi4vaGVscGVycyI6OTg3LCIuL29obGNfZGVmYXVsdHMiOjk4OX1dLDk4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cihuKyIuc2hvd2xlZ2VuZCIpLCExPT09dC5zaG93bGVnZW5kJiYoZVtuXS5zaG93bGVnZW5kPSExKSxyKG4rIi5uYW1lIixlLm5hbWUrIiAtICIrbil9fSx7fV0sOTg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PT09ZT9lPm8/YT0hMDplPG8mJihhPSExKTphPXQ8ZSxvPWUsYX1mdW5jdGlvbiByKHQscil7cmV0dXJuIGkodCkmJmkocikmJmUoK3QsK3IpfWZ1bmN0aW9uIG4odCxyKXtyZXR1cm4gaSh0KSYmaShyKSYmIWUoK3QsK3IpfXZhciBhPSEwLG89bnVsbDtyZXR1cm4iaW5jcmVhc2luZyI9PT10P3I6bn12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIik7ci5wdXNoRHVtbXlUcmFuc2Zvcm1PcHRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e3R5cGU6ZS50eXBlLF9lcGhlbWVyYWw6ITB9O0FycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKT90LnRyYW5zZm9ybXMucHVzaChyKTp0LnRyYW5zZm9ybXM9W3JdfSxyLmNsZWFyRXBoZW1lcmFsVHJhbnNmb3JtT3B0cz1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5fZXBoZW1lcmFsJiZlLnNwbGljZShyLDEpOzA9PT1lLmxlbmd0aCYmZGVsZXRlIHQudHJhbnNmb3Jtc319LHIuY29weU9ITEM9ZnVuY3Rpb24odCxlKXt0Lm9wZW4mJihlLm9wZW49dC5vcGVuKSx0LmhpZ2gmJihlLmhpZ2g9dC5oaWdoKSx0LmxvdyYmKGUubG93PXQubG93KSx0LmNsb3NlJiYoZS5jbG9zZT10LmNsb3NlKX0sci5tYWtlVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hLmV4dGVuZEZsYXQoW10sdC50cmFuc2Zvcm1zKTtyZXR1cm4gbltlLnRyYW5zZm9ybUluZGV4XT17dHlwZTp0LnR5cGUsZGlyZWN0aW9uOnIsb3Blbjp0Lm9wZW4saGlnaDp0LmhpZ2gsbG93OnQubG93LGNsb3NlOnQuY2xvc2V9LG59LHIuZ2V0RmlsdGVyRm49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfSxyLmFkZFJhbmdlU2xpZGVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPSExLG49MDtuPHQubGVuZ3RoO24rKylpZighMD09PXRbbl0udmlzaWJsZSl7cj0hMDticmVha31yJiYoZS54YXhpc3x8KGUueGF4aXM9e30pLGUueGF4aXMucmFuZ2VzbGlkZXJ8fChlLnhheGlzLnJhbmdlc2xpZGVyPXt9KSl9fSx7Ii4uLy4uL2xpYiI6NzI0LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RfYXBpL3JlZ2lzdGVyIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToib2hsYyIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInNob3dMZWdlbmQiXSxtZXRhOnt9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpfSxuKHQoIi4uL3NjYXR0ZXIiKSksbih0KCIuL3RyYW5zZm9ybSIpKX0seyIuLi8uLi9wbG90X2FwaS9yZWdpc3RlciI6NzU0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi4vc2NhdHRlciI6MTAzNSwiLi9hdHRyaWJ1dGVzIjo5ODQsIi4vZGVmYXVsdHMiOjk4NSwiLi90cmFuc2Zvcm0iOjk5MH1dLDk4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvPXIoIngiKSxzPXIoIm9wZW4iKSxsPXIoImhpZ2giKSx1PXIoImxvdyIpLGM9cigiY2xvc2UiKTtyZXR1cm4gbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4Il0saSksYT1NYXRoLm1pbihzLmxlbmd0aCxsLmxlbmd0aCx1Lmxlbmd0aCxjLmxlbmd0aCksbyYmKGE9TWF0aC5taW4oYSxvLmxlbmd0aCkpPG8ubGVuZ3RoJiYoZS54PW8uc2xpY2UoMCxhKSksYTxzLmxlbmd0aCYmKGUub3Blbj1zLnNsaWNlKDAsYSkpLGE8bC5sZW5ndGgmJihlLmhpZ2g9bC5zbGljZSgwLGEpKSxhPHUubGVuZ3RoJiYoZS5sb3c9dS5zbGljZSgwLGEpKSxhPGMubGVuZ3RoJiYoZS5jbG9zZT1jLnNsaWNlKDAsYSkpLGF9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSw5OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dmFyIG49e3R5cGU6InNjYXR0ZXIiLG1vZGU6ImxpbmVzIixjb25uZWN0Z2FwczohMSx2aXNpYmxlOnQudmlzaWJsZSxvcGFjaXR5OnQub3BhY2l0eSx4YXhpczp0LnhheGlzLHlheGlzOnQueWF4aXMsaG92ZXJpbmZvOmkodCksdHJhbnNmb3JtczpsLm1ha2VUcmFuc2Zvcm0odCxlLHIpfSxhPXRbcl07cmV0dXJuIGEmJnMuZXh0ZW5kRmxhdChuLHt4OnQueHx8WzBdLHhjYWxlbmRhcjp0LnhjYWxlbmRhcix5OltdLmNvbmNhdCh0LmxvdykuY29uY2F0KHQuaGlnaCksdGV4dDp0LnRleHQsbmFtZTphLm5hbWUsc2hvd2xlZ2VuZDphLnNob3dsZWdlbmQsbGluZTphLmxpbmV9KSxufWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5ob3ZlcmluZm87aWYoImFsbCI9PT1lKXJldHVybiJ4K3RleHQrbmFtZSI7dmFyIHI9ZS5zcGxpdCgiKyIpLG49ci5pbmRleE9mKCJ5IiksaT1yLmluZGV4T2YoInRleHQiKTtyZXR1cm4tMSE9PW4mJihyLnNwbGljZShuLDEpLC0xPT09aSYmci5wdXNoKCJ0ZXh0IikpLHIuam9pbigiKyIpfWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXIuX2Z1bGxJbnB1dCxpPW4udGlja3dpZHRoLGE9bi5fbWluRGlmZjtpZighYSl7dmFyIG89dC5fZnVsbERhdGEsbD1bXTthPTEvMDt2YXIgdTtmb3IodT0wO3U8by5sZW5ndGg7dSsrKXt2YXIgYz1vW3VdLl9mdWxsSW5wdXQ7aWYoIm9obGMiPT09Yy50eXBlJiYhMD09PWMudmlzaWJsZSYmYy54YXhpcz09PWUuX2lkJiYobC5wdXNoKGMpLGMueCYmYy54Lmxlbmd0aD4xKSl7dmFyIGg9cy5zaW1wbGVNYXAoYy54LGUuZDJjLDAsci54Y2FsZW5kYXIpLGY9cy5kaXN0aW5jdFZhbHMoaCkubWluRGlmZjthPU1hdGgubWluKGEsZil9fWZvcihhPT09MS8wJiYoYT0xKSx1PTA7dTxsLmxlbmd0aDt1KyspbFt1XS5fbWluRGlmZj1hfXJldHVybiBhKml9dmFyIG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi9oZWxwZXJzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIik7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0ib2hsYyIsci5hdHRyaWJ1dGVzPXt9LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGwuY2xlYXJFcGhlbWVyYWxUcmFuc2Zvcm1PcHRzKG4pLGwuY29weU9ITEModCxlKSx0fSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPXRbaV07Im9obGMiPT09YS50eXBlP3IucHVzaChuKGEsZSwiaW5jcmVhc2luZyIpLG4oYSxlLCJkZWNyZWFzaW5nIikpOnIucHVzaChhKX1yZXR1cm4gbC5hZGRSYW5nZVNsaWRlcihyLGUubGF5b3V0KSxyfSxyLmNhbGNUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9ci5kaXJlY3Rpb24scz1sLmdldEZpbHRlckZuKGkpLGg9Yy5nZXRGcm9tVHJhY2UodCxlLCJ4IiksZj1jLmdldEZyb21UcmFjZSh0LGUsInkiKSxkPWEodCxoLGUpLHA9ZS5vcGVuLG09ZS5oaWdoLHY9ZS5sb3csZz1lLmNsb3NlLHk9ZS50ZXh0LGI9cC5sZW5ndGgseD1bXSxfPVtdLHc9W107bj1lLl9mdWxsSW5wdXQueD9mdW5jdGlvbih0KXt2YXIgcj1lLnhbdF0sbj1lLnhjYWxlbmRhcixpPWguZDJjKHIsMCxuKTt4LnB1c2goaC5jMmQoaS1kLDAsbikscixyLHIscixoLmMyZChpK2QsMCxuKSxudWxsKX06ZnVuY3Rpb24odCl7eC5wdXNoKHQtZCx0LHQsdCx0LHQrZCxudWxsKX07Zm9yKHZhciBNPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUudGlja1RleHQodCx0LmMybChlKSwiaG92ZXIiKS50ZXh0fSxrPWUuX2Z1bGxJbnB1dC5ob3ZlcmluZm8sQT1rLnNwbGl0KCIrIiksVD0iYWxsIj09PWssUz1UfHwtMSE9PUEuaW5kZXhPZigieSIpLEU9VHx8LTEhPT1BLmluZGV4T2YoInRleHQiKSxMPUFycmF5LmlzQXJyYXkoeSk/ZnVuY3Rpb24odCl7cmV0dXJuIHlbdF18fCIifTpmdW5jdGlvbigpe3JldHVybiB5fSxDPTA7QzxiO0MrKylzKHBbQ10sZ1tDXSkmJm8obVtDXSkmJm8odltDXSkmJihuKEMpLGZ1bmN0aW9uKHQsZSxyLG4pe18ucHVzaCh0LHQsZSxyLG4sbixudWxsKX0ocFtDXSxtW0NdLHZbQ10sZ1tDXSksZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1bXTtTJiYoYS5wdXNoKCJPcGVuOiAiK00oZixlKSksYS5wdXNoKCJIaWdoOiAiK00oZixyKSksYS5wdXNoKCJMb3c6ICIrTShmLG4pKSxhLnB1c2goIkNsb3NlOiAiK00oZixpKSkpLEUmJmEucHVzaChMKHQpKTt2YXIgbz1hLmpvaW4oIjxicj4iKTt3LnB1c2gobyxvLG8sbyxvLG8sbnVsbCl9KEMscFtDXSxtW0NdLHZbQ10sZ1tDXSkpO2UueD14LGUueT1fLGUudGV4dD13fX0seyIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo3NjcsIi4vaGVscGVycyI6OTg3LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sOTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcCx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17ZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxsYWJlbGZvbnQ6dSh7fSxzLHt9KSx0aWNrZm9udDp1KHt9LHMse30pLHJhbmdlZm9udDp1KHt9LHMse30pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHRpY2t2YWxzOm8udGlja3ZhbHMsdGlja3RleHQ6by50aWNrdGV4dCx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IjNzIn0sdmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX19LGxpbmU6dSh7fSxsKHt9LG4oImxpbmUiKSx7Y29sb3JzY2FsZTpsKHt9LG4oImxpbmUiKS5jb2xvcnNjYWxlLHtkZmx0OmEuVmlyaWRpc30pLGF1dG9jb2xvcnNjYWxlOmwoe30sbigibGluZSIpLmF1dG9jb2xvcnNjYWxlLHtkZmx0OiExfSl9KSx7c2hvd3NjYWxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhcjppfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvc2NhbGVzIjo2MjAsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo3NzUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6Nzg4fV0sOTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzIiksaT10KCIuLi8uLi9wbG90cy9wbG90cyIpLGE9dCgiLi9wbG90Iiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi9jb25zdGFudHMiKTtyLm5hbWU9InBhcmNvb3JkcyIsci5hdHRyPSJ0eXBlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aS5nZXRTdWJwbG90Q2FsY0RhdGEodC5jYWxjZGF0YSwicGFyY29vcmRzIiwicGFyY29vcmRzIik7ZS5sZW5ndGgmJmEodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygicGFyY29vcmRzIiksYT1lLl9oYXMmJmUuX2hhcygicGFyY29vcmRzIik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMtbGluZS1sYXllcnMiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMtbGluZS1sYXllcnMiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjb29yZHMiKS5yZW1vdmUoKSxuLl9nbGltYWdlcy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSl9LHIudG9TVkc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt2YXIgbj10aGlzLGk9bi50b0RhdGFVUkwoImltYWdlL3BuZyIpLGE9ci5hcHBlbmQoInN2ZzppbWFnZSIpLGw9dC5fZnVsbExheW91dC5fc2l6ZSx1PXQuX2Z1bGxEYXRhW2UubW9kZWwua2V5XS5kb21haW47YS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6aSx4OmwubCtsLncqdS54WzBdLXMub3ZlcmRyYWcseTpsLnQrbC5oKigxLXUueVsxXSksd2lkdGg6KHUueFsxXS11LnhbMF0pKmwudysyKnMub3ZlcmRyYWcsaGVpZ2h0Oih1LnlbMV0tdS55WzBdKSpsLmgscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KX12YXIgcj10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxpPW4uc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO2kuZmlsdGVyKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9PT1pLnNpemUoKS0xfSkuc2VsZWN0QWxsKCIucGFyY29vcmRzLWxpbmVzLmNvbnRleHQsIC5wYXJjb29yZHMtbGluZXMuZm9jdXMiKS5lYWNoKGUpLHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5zZWxlY3RBbGwoIiNmaWx0ZXJCYXJQYXR0ZXJuIikuYXR0cigiaWQiLCJmaWx0ZXJCYXJQYXR0ZXJuIil9LDYwKX19LHsiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjcwNiwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiLi9jb25zdGFudHMiOjk5NSwiLi9wbG90IjoxZTMsZDM6MTIwfV0sOTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSEhZS5saW5lLmNvbG9yc2NhbGUmJmEuaXNBcnJheShlLmxpbmUuY29sb3IpLG89cj9lLmxpbmUuY29sb3I6QXJyYXkuYXBwbHkoMCxBcnJheShlLmRpbWVuc2lvbnMucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS52YWx1ZXMubGVuZ3RoKX0sMCkpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4uNX0pLHM9cj9lLmxpbmUuY29sb3JzY2FsZTpbWzAsZS5saW5lLmNvbG9yXSxbMSxlLmxpbmUuY29sb3JdXTtyZXR1cm4gbihlLCJsaW5lIikmJmkoZSxlLmxpbmUuY29sb3IsImxpbmUiLCJjIiksW3tsaW5lQ29sb3I6byxjc2NhbGU6c31dfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjA4LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNSwiLi4vLi4vbGliIjo3MjR9XSw5OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPXIubGluZSx1PSJjYiIrci51aWQ7aWYodC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrdSkucmVtb3ZlKCksdm9pZCAwPT09bHx8IWwuc2hvd3NjYWxlKXJldHVybiB2b2lkIGEuYXV0b01hcmdpbih0LHUpO3ZhciBjPWwuY29sb3IsaD1sLmNtaW4sZj1sLmNtYXg7bihoKXx8KGg9aS5hZ2dOdW1zKE1hdGgubWluLG51bGwsYykpLG4oZil8fChmPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGMpKTt2YXIgZD1lWzBdLnQuY2I9cyh0LHUpLHA9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUobC5jb2xvcnNjYWxlLGgsZikse25vTnVtZXJpY0NoZWNrOiEwfSk7ZC5maWxsY29sb3IocCkuZmlsbGxldmVscyh7c3RhcnQ6aCxlbmQ6ZixzaXplOihmLWgpLzI1NH0pLm9wdGlvbnMobC5jb2xvcmJhcikoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo2MDUsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDk5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHZlcnRpY2FsUGFkZGluZzoyLHRpY2tEaXN0YW5jZTo1MCxjYW52YXNQaXhlbFJhdGlvOjEsYmxvY2tMaW5lQ291bnQ6NWUzLHNjYXR0ZXI6ITEsbGF5ZXJzOlsiY29udGV4dExpbmVMYXllciIsImZvY3VzTGluZUxheWVyIiwicGlja0xpbmVMYXllciJdLGF4aXNUaXRsZU9mZnNldDoyOCxheGlzRXh0ZW50T2Zmc2V0OjEwLGJhcjp7d2lkdGg6NCxjYXB0dXJld2lkdGg6MTAsZmlsbGNvbG9yOiJtYWdlbnRhIixmaWxsb3BhY2l0eToxLHN0cm9rZWNvbG9yOiJ3aGl0ZSIsc3Ryb2tlb3BhY2l0eToxLHN0cm9rZXdpZHRoOjEsaGFuZGxlaGVpZ2h0OjE2LGhhbmRsZW9wYWNpdHk6MSxoYW5kbGVvdmVybGFwOjB9fX0se31dLDk5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7aSgibGluZS5jb2xvciIscikscyh0LCJsaW5lIikmJmEuaXNBcnJheSh0LmxpbmUuY29sb3IpPyhpKCJsaW5lLmNvbG9yc2NhbGUiKSxsKHQsZSxuLGkse3ByZWZpeDoibGluZS4iLGNMZXR0ZXI6ImMifSkpOmkoImxpbmUuY29sb3IiLHIpfWZ1bmN0aW9uIGkodCxlKXtmdW5jdGlvbiByKHQsZSl7cmV0dXJuIGEuY29lcmNlKG4saSxvLmRpbWVuc2lvbnMsdCxlKX12YXIgbixpLHMsbD10LmRpbWVuc2lvbnN8fFtdLGM9ZS5kaW1lbnNpb25zPVtdLGg9MS8wO2ZvcihsLmxlbmd0aD51JiYoYS5sb2coInBhcmNvb3JkcyB0cmFjZXMgc3VwcG9ydCB1cCB0byAiK3UrIiBkaW1lbnNpb25zIGF0IHRoZSBtb21lbnQiKSxsLnNwbGljZSh1KSkscz0wO3M8bC5sZW5ndGg7cysrKWlmKG49bFtzXSxpPXt9LGEuaXNQbGFpbk9iamVjdChuKSl7dmFyIGY9cigidmFsdWVzIiksZD1yKCJ2aXNpYmxlIixmLmxlbmd0aD4wKTtkJiYocigibGFiZWwiKSxyKCJ0aWNrdmFscyIpLHIoInRpY2t0ZXh0IikscigidGlja2Zvcm1hdCIpLHIoInJhbmdlIikscigiY29uc3RyYWludHJhbmdlIiksaD1NYXRoLm1pbihoLGkudmFsdWVzLmxlbmd0aCkpLGkuX2luZGV4PXMsYy5wdXNoKGkpfWlmKGlzRmluaXRlKGgpKWZvcihzPTA7czxjLmxlbmd0aDtzKyspaT1jW3NdLGkudmlzaWJsZSYmaS52YWx1ZXMubGVuZ3RoPmgmJihpLnZhbHVlcz1pLnZhbHVlcy5zbGljZSgwLGgpKTtyZXR1cm4gY312YXIgYT10KCIuLi8uLi9saWIiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSx1PXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLG8scixuKX12YXIgdT1pKHQsZSk7bih0LGUscixzLGwpLGwoImRvbWFpbi54IiksbCgiZG9tYWluLnkiKSxBcnJheS5pc0FycmF5KHUpJiZ1Lmxlbmd0aHx8KGUudmlzaWJsZT0hMSk7dmFyIGM9e2ZhbWlseTpzLmZvbnQuZmFtaWx5LHNpemU6TWF0aC5yb3VuZChzLmZvbnQuc2l6ZSooMTAvMTIpKSxjb2xvcjpzLmZvbnQuY29sb3J9O2EuY29lcmNlRm9udChsLCJsYWJlbGZvbnQiLGMpLGEuY29lcmNlRm9udChsLCJ0aWNrZm9udCIsYyksYS5jb2VyY2VGb250KGwsInJhbmdlZm9udCIsYyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjExLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6OTkxLCIuL2NvbnN0YW50cyI6OTk1fV0sOTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uY29sb3JiYXI9dCgiLi9jb2xvcmJhciIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0icGFyY29vcmRzIixuLmJhc2VQbG90TW9kdWxlPXQoIi4vYmFzZV9wbG90Iiksbi5jYXRlZ29yaWVzPVsiZ2wiLCJub09wYWNpdHkiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjo5OTEsIi4vYmFzZV9wbG90Ijo5OTIsIi4vY2FsYyI6OTkzLCIuL2NvbG9yYmFyIjo5OTQsIi4vZGVmYXVsdHMiOjk5NiwiLi9wbG90IjoxZTN9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt0LnJlYWQoe3g6MCx5OjAsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOnh9KX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGE9dC5fZ2w7YS5lbmFibGUoYS5TQ0lTU09SX1RFU1QpLGEuc2Npc3NvcihlLHIsbixpKSx0LmNsZWFyKHtjb2xvcjpbMCwwLDAsMF0sZGVwdGg6MX0pfWZ1bmN0aW9uIGEodCxlLHIsYSxvLHMpe2Z1bmN0aW9uIGwobil7dmFyIGM7Yz1NYXRoLm1pbihhLG8tbiphKSxzLm9mZnNldD1nKm4qYSxzLmNvdW50PWcqYywwPT09biYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyLmN1cnJlbnRSYWZzW3VdKSxkZWxldGUgci5jdXJyZW50UmFmc1t1XSxpKHQscy5zY2lzc29yWCxzLnNjaXNzb3JZLHMuc2Npc3NvcldpZHRoLHMudmlld0JveFNpemVbMV0pKSxyLmNsZWFyT25seXx8KGUocyksbiphK2M8byYmKHIuY3VycmVudFJhZnNbdV09d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2wobisxKX0pKSxyLmRyYXdDb21wbGV0ZWQ9ITEpfXZhciB1PXMua2V5O3IuZHJhd0NvbXBsZXRlZHx8KG4odCksci5kcmF3Q29tcGxldGVkPSEwKSxsKDApfWZ1bmN0aW9uIG8odCl7cmV0dXJuIE1hdGgubWF4KG0sTWF0aC5taW4oMS1tLHQpKX1mdW5jdGlvbiBzKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8MjU2O2krKyl7dmFyIGE9dChpLzI1NSk7bi5wdXNoKChlP2I6YSkuY29uY2F0KHIpKX1yZXR1cm4gbn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuKHQ+Pj44KmUpJTI1Ni8yNTV9ZnVuY3Rpb24gdSh0LGUscixuKXtmb3IodmFyIGk9W10sYT0wO2E8dDthKyspZm9yKHZhciBzPTA7czx2O3MrKylpLnB1c2goczxlP3Jbc10ucGFkZGVkVW5pdFZhbHVlc1thXTpzPT09di0xP28oblthXSk6cz49di00P2woYSx2LTItcyk6LjUpO3JldHVybiBpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuLGksYSxvPVtdO2ZvcihpPTA7aTx0O2krKylmb3IoYT0wO2E8ZzthKyspZm9yKG49MDtuPHk7bisrKW8ucHVzaChlW2kqdityKnkrbl0pLHIqeStuPT09di0xJiZhJTI9PTAmJihvW28ubGVuZ3RoLTFdKj0tMSk7cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe3ZhciByPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1XSxuPXIubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBjKHQsZSxyKX0pLGk9e307cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0LGUpe2lbInAiK2UudG9TdHJpbmcoMTYpXT10fSksaX1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gdCtlPD1yfXZhciBkPXQoInJlZ2wiKSxwPXQoIi4vY29uc3RhbnRzIikudmVydGljYWxQYWRkaW5nLG09MWUtNix2PTY0LGc9Mix5PTQsYj1bMTE5LDExOSwxMTldLHg9bmV3IFVpbnQ4QXJyYXkoNCksXz1uZXcgVWludDhBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixvLGwsYyxtLHYsZyl7ZnVuY3Rpb24geSh0KXtqWzBdPXRbMF0salsxXT10WzFdfWZ1bmN0aW9uIGIodCxlLGksYSxvLHMsbCx1LGMsaCxkKXt2YXIgdixnLHksYix4PVt0LGVdLF89cC9zLHc9WzAsMV0ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuWzAsMSwyLDNdLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KDE2KX0pfSksTT1bMCwxXS5tYXAoZnVuY3Rpb24oKXtyZXR1cm5bMCwxLDIsM10ubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkoMTYpfSl9KTtmb3Iodj0wO3Y8Mjt2KyspZm9yKGI9eFt2XSxnPTA7Zzw0O2crKylmb3IoeT0wO3k8MTY7eSsrKXt2YXIgaz15KzE2Kmc7d1t2XVtnXVt5XT15KzE2Kmc9PT1iPzE6MCxNW3ZdW2ddW3ldPSghbSYmZih5LDE2KmcsSSk/QVswPT09az8wOjErKGstMSklKEEubGVuZ3RoLTEpXS5maWx0ZXJbdl06dikrKDIqdi0xKSpffXJldHVybntrZXk6bCxyZXNvbHV0aW9uOltyLG5dLHZpZXdCb3hQb3NpdGlvbjpbaSt6LGFdLHZpZXdCb3hTaXplOltvLHNdLGk6dCxpaTplLGRpbTFBOndbMF1bMF0sZGltMUI6d1swXVsxXSxkaW0xQzp3WzBdWzJdLGRpbTFEOndbMF1bM10sZGltMkE6d1sxXVswXSxkaW0yQjp3WzFdWzFdLGRpbTJDOndbMV1bMl0sZGltMkQ6d1sxXVszXSxsb0E6TVswXVswXSxsb0I6TVswXVsxXSxsb0M6TVswXVsyXSxsb0Q6TVswXVszXSxoaUE6TVsxXVswXSxoaUI6TVsxXVsxXSxoaUM6TVsxXVsyXSxoaUQ6TVsxXVszXSxjb2xvckNsYW1wOmosc2NhdHRlcjp1fHwwLHNjaXNzb3JYOmM9PT1oPzA6aSt6LHNjaXNzb3JXaWR0aDooYz09PWQ/ci1pK3o6bysuNSkrKGM9PT1oP2krejowKSxzY2lzc29yWTphLHNjaXNzb3JIZWlnaHQ6c319ZnVuY3Rpb24geCh0LG8scyl7dmFyIGwsdSxjLGg9MS8wLGY9LTEvMDtmb3IobD0wO2w8STtsKyspdFtsXS5kaW0yLmNhbnZhc1g+ZiYmKGY9dFtsXS5kaW0yLmNhbnZhc1gsYz1sKSx0W2xdLmRpbTEuY2FudmFzWDxoJiYoaD10W2xdLmRpbTEuY2FudmFzWCx1PWwpO2ZvcigwPT09SSYmaShPLDAsMCxyLG4pLGw9MDtsPEk7bCsrKXt2YXIgZD10W2xdLHA9ZC5kaW0xLG09cC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHY9ZC5jYW52YXNYLHk9ZC5jYW52YXNZLHg9ZC5kaW0yLF89eC5jcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4LHc9ZC5wYW5lbFNpemVYLE09ZC5wYW5lbFNpemVZLEE9dit3O2lmKG98fCFOW21dfHxOW21dWzBdIT09dnx8TlttXVsxXSE9PUEpe05bbV09W3YsQV07dmFyIFQ9YihtLF8sdix5LHcsTSxwLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsZ3x8cC5zY2F0dGVyPzE6MCxsLHUsYyk7ay5jbGVhck9ubHk9cyxhKE8sRixrLG8/ZS5ibG9ja0xpbmVDb3VudDpTLFMsVCl9fX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIE8ucmVhZCh7eDp0LHk6ZSx3aWR0aDoxLGhlaWdodDoxLGRhdGE6X30pLF99ZnVuY3Rpb24gTSh0LGUscixuKXt2YXIgaT1uZXcgVWludDhBcnJheSg0KnIqbik7cmV0dXJuIE8ucmVhZCh7eDp0LHk6ZSx3aWR0aDpyLGhlaWdodDpuLGRhdGE6aX0pLGl9dmFyIGs9e2N1cnJlbnRSYWZzOnt9LGRyYXdDb21wbGV0ZWQ6ITAsY2xlYXJPbmx5OiExfSxBPW8uc2xpY2UoKSxUPUEubGVuZ3RoLFM9QVswXT9BWzBdLnZhbHVlcy5sZW5ndGg6MCxFPW0sTD12P2UuY29sb3IubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIvZS5jb2xvci5sZW5ndGh9KTplLmNvbG9yLEM9TWF0aC5tYXgoMS8yNTUsTWF0aC5wb3coMS9MLmxlbmd0aCwxLzMpKSx6PWUuY2FudmFzT3ZlcmRyYWcsST1sLmxlbmd0aCxEPXUoUyxULEEsTCksUD1oKFMsRCksTz1kKHtjYW52YXM6dCxhdHRyaWJ1dGVzOntwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITAsYW50aWFsaWFzOiF2fX0pLFI9Ty50ZXh0dXJlKHtzaGFwZTpbMjU2LDFdLGZvcm1hdDoicmdiYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0IixkYXRhOnMoYyxtLE1hdGgucm91bmQoMjU1KihtP0M6MSkpKX0pLEY9Tyh7cHJvZmlsZTohMSxibGVuZDp7ZW5hYmxlOkUsZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6MSxkc3RBbHBoYToxfSxlcXVhdGlvbjp7cmdiOiJhZGQiLGFscGhhOiJhZGQifSxjb2xvcjpbMCwwLDAsMF19LGRlcHRoOntlbmFibGU6IUUsbWFzazohMCxmdW5jOiJsZXNzIixyYW5nZTpbMCwxXX0sY3VsbDp7ZW5hYmxlOiEwLGZhY2U6ImJhY2sifSxzY2lzc29yOntlbmFibGU6ITAsYm94Ont4Ok8ucHJvcCgic2Npc3NvclgiKSx5Ok8ucHJvcCgic2Npc3NvclkiKSx3aWR0aDpPLnByb3AoInNjaXNzb3JXaWR0aCIpLGhlaWdodDpPLnByb3AoInNjaXNzb3JIZWlnaHQiKX19LGRpdGhlcjohMSx2ZXJ0OnY/InByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWM0IHAwLCBwMSwgcDIsIHAzLFxuICAgICAgICAgICAgICAgcDQsIHA1LCBwNiwgcDcsXG4gICAgICAgICAgICAgICBwOCwgcDksIHBhLCBwYixcbiAgICAgICAgICAgICAgIHBjLCBwZCwgcGU7XG5cbmF0dHJpYnV0ZSB2ZWM0IHBmO1xuXG51bmlmb3JtIG1hdDQgZGltMUEsIGRpbTJBLCBkaW0xQiwgZGltMkIsIGRpbTFDLCBkaW0yQywgZGltMUQsIGRpbTJELFxuICAgICAgICAgICAgIGxvQSwgaGlBLCBsb0IsIGhpQiwgbG9DLCBoaUMsIGxvRCwgaGlEO1xuXG51bmlmb3JtIHZlYzIgcmVzb2x1dGlvbixcbiAgICAgICAgICAgICB2aWV3Qm94UG9zaXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFNpemU7XG5cbnVuaWZvcm0gc2FtcGxlcjJEIHBhbGV0dGU7XG5cbnVuaWZvcm0gdmVjMiBjb2xvckNsYW1wO1xuXG51bmlmb3JtIGZsb2F0IHNjYXR0ZXI7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZlYzQgemVybyA9IHZlYzQoMCwgMCwgMCwgMCk7XG52ZWM0IHVuaXQgPSB2ZWM0KDEsIDEsIDEsIDEpO1xudmVjMiB4eVByb2plY3Rpb24gPSB2ZWMyKDEsIDEpO1xuXG5tYXQ0IG1jbGFtcChtYXQ0IG0sIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWF0NChjbGFtcChtWzBdLCBsb1swXSwgaGlbMF0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMV0sIGxvWzFdLCBoaVsxXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVsyXSwgbG9bMl0sIGhpWzJdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzNdLCBsb1szXSwgaGlbM10pKTtcbn1cblxuYm9vbCBtc2hvdyhtYXQ0IHAsIG1hdDQgbG8sIG1hdDQgaGkpIHtcbiAgICByZXR1cm4gbWNsYW1wKHAsIGxvLCBoaSkgPT0gcDtcbn1cblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIHVuaXQsIHVuaXQpO1xufVxuXG52b2lkIG1haW4oKSB7XG5cbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbihwZlszXSkgKyAwLjU7XG4gICAgZmxvYXQgcHJvbWluZW5jZSA9IGFicyhwZlszXSk7XG4gICAgZmxvYXQgZGVwdGggPSAxLjAgLSBwcm9taW5lbmNlO1xuXG4gICAgbWF0NCBwQSA9IG1hdDQocDAsIHAxLCBwMiwgcDMpO1xuICAgIG1hdDQgcEIgPSBtYXQ0KHA0LCBwNSwgcDYsIHA3KTtcbiAgICBtYXQ0IHBDID0gbWF0NChwOCwgcDksIHBhLCBwYik7XG4gICAgbWF0NCBwRCA9IG1hdDQocGMsIHBkLCBwZSwgYWJzKHBmKSk7XG5cbiAgICBmbG9hdCBzaG93ID0gZmxvYXQobXNob3cocEEsIGxvQSwgaGlBKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICBtc2hvdyhwQiwgbG9CLCBoaUIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIG1zaG93KHBDLCBsb0MsIGhpQykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbXNob3cocEQsIGxvRCwgaGlEKSk7XG5cbiAgICB2ZWMyIHl5ID0gc2hvdyAqIHZlYzIodmFsKHBBLCBkaW0yQSkgKyB2YWwocEIsIGRpbTJCKSArIHZhbChwQywgZGltMkMpICsgdmFsKHBELCBkaW0yRCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbChwQSwgZGltMUEpICsgdmFsKHBCLCBkaW0xQikgKyB2YWwocEMsIGRpbTFDKSArIHZhbChwRCwgZGltMUQpKTtcblxuICAgIHZlYzIgZGltZW5zaW9uVG9nZ2xlID0gdmVjMih4LCAxLjAgLSB4KTtcblxuICAgIHZlYzIgc2NhdHRlclRvZ2dsZSA9IHZlYzIoc2NhdHRlciwgMS4wIC0gc2NhdHRlcik7XG5cbiAgICBmbG9hdCB5ID0gZG90KHl5LCBkaW1lbnNpb25Ub2dnbGUpO1xuICAgIG1hdDIgeHkgPSBtYXQyKHZpZXdCb3hTaXplICogeXkgKyBkaW1lbnNpb25Ub2dnbGUsIHZpZXdCb3hTaXplICogdmVjMih4LCB5KSk7XG5cbiAgICB2ZWMyIHZpZXdCb3hYWSA9IHZpZXdCb3hQb3NpdGlvbiArIHh5ICogc2NhdHRlclRvZ2dsZTtcblxuICAgIGZsb2F0IGRlcHRoT3JIaWRlID0gZGVwdGggKyAyLjAgKiAoMS4wIC0gc2hvdyk7XG5cbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoXG4gICAgICAgIHh5UHJvamVjdGlvbiAqICgyLjAgKiB2aWV3Qm94WFkgLyByZXNvbHV0aW9uIC0gMS4wKSxcbiAgICAgICAgZGVwdGhPckhpZGUsXG4gICAgICAgIDEuMFxuICAgICk7XG5cbiAgICAvLyBwaWNrIGNvbG9yaW5nXG4gICAgZnJhZ0NvbG9yID0gdmVjNChwZi5yZ2IsIDEuMCk7XG59XG4iOiJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjNCBwMCwgcDEsIHAyLCBwMyxcbiAgICAgICAgICAgICAgIHA0LCBwNSwgcDYsIHA3LFxuICAgICAgICAgICAgICAgcDgsIHA5LCBwYSwgcGIsXG4gICAgICAgICAgICAgICBwYywgcGQsIHBlO1xuXG5hdHRyaWJ1dGUgdmVjNCBwZjtcblxudW5pZm9ybSBtYXQ0IGRpbTFBLCBkaW0yQSwgZGltMUIsIGRpbTJCLCBkaW0xQywgZGltMkMsIGRpbTFELCBkaW0yRCxcbiAgICAgICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRDtcblxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sXG4gICAgICAgICAgICAgdmlld0JveFBvc2l0aW9uLFxuICAgICAgICAgICAgIHZpZXdCb3hTaXplO1xuXG51bmlmb3JtIHNhbXBsZXIyRCBwYWxldHRlO1xuXG51bmlmb3JtIHZlYzIgY29sb3JDbGFtcDtcblxudW5pZm9ybSBmbG9hdCBzY2F0dGVyO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52ZWM0IHplcm8gPSB2ZWM0KDAsIDAsIDAsIDApO1xudmVjNCB1bml0ID0gdmVjNCgxLCAxLCAxLCAxKTtcbnZlYzIgeHlQcm9qZWN0aW9uID0gdmVjMigxLCAxKTtcblxubWF0NCBtY2xhbXAobWF0NCBtLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1hdDQoY2xhbXAobVswXSwgbG9bMF0sIGhpWzBdKSxcbiAgICAgICAgICAgICAgICBjbGFtcChtWzFdLCBsb1sxXSwgaGlbMV0pLFxuICAgICAgICAgICAgICAgIGNsYW1wKG1bMl0sIGxvWzJdLCBoaVsyXSksXG4gICAgICAgICAgICAgICAgY2xhbXAobVszXSwgbG9bM10sIGhpWzNdKSk7XG59XG5cbmJvb2wgbXNob3cobWF0NCBwLCBtYXQ0IGxvLCBtYXQ0IGhpKSB7XG4gICAgcmV0dXJuIG1jbGFtcChwLCBsbywgaGkpID09IHA7XG59XG5cbmZsb2F0IHZhbChtYXQ0IHAsIG1hdDQgdikge1xuICAgIHJldHVybiBkb3QobWF0cml4Q29tcE11bHQocCwgdikgKiB1bml0LCB1bml0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXG4gICAgZmxvYXQgeCA9IDAuNSAqIHNpZ24ocGZbM10pICsgMC41O1xuICAgIGZsb2F0IHByb21pbmVuY2UgPSBhYnMocGZbM10pO1xuICAgIGZsb2F0IGRlcHRoID0gMS4wIC0gcHJvbWluZW5jZTtcblxuICAgIG1hdDQgcEEgPSBtYXQ0KHAwLCBwMSwgcDIsIHAzKTtcbiAgICBtYXQ0IHBCID0gbWF0NChwNCwgcDUsIHA2LCBwNyk7XG4gICAgbWF0NCBwQyA9IG1hdDQocDgsIHA5LCBwYSwgcGIpO1xuICAgIG1hdDQgcEQgPSBtYXQ0KHBjLCBwZCwgcGUsIGFicyhwZikpO1xuXG4gICAgZmxvYXQgc2hvdyA9IGZsb2F0KG1zaG93KHBBLCBsb0EsIGhpQSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgbXNob3cocEIsIGxvQiwgaGlCKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICBtc2hvdyhwQywgbG9DLCBoaUMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgIG1zaG93KHBELCBsb0QsIGhpRCkpO1xuXG4gICAgdmVjMiB5eSA9IHNob3cgKiB2ZWMyKHZhbChwQSwgZGltMkEpICsgdmFsKHBCLCBkaW0yQikgKyB2YWwocEMsIGRpbTJDKSArIHZhbChwRCwgZGltMkQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwocEEsIGRpbTFBKSArIHZhbChwQiwgZGltMUIpICsgdmFsKHBDLCBkaW0xQykgKyB2YWwocEQsIGRpbTFEKSk7XG5cbiAgICB2ZWMyIGRpbWVuc2lvblRvZ2dsZSA9IHZlYzIoeCwgMS4wIC0geCk7XG5cbiAgICB2ZWMyIHNjYXR0ZXJUb2dnbGUgPSB2ZWMyKHNjYXR0ZXIsIDEuMCAtIHNjYXR0ZXIpO1xuXG4gICAgZmxvYXQgeSA9IGRvdCh5eSwgZGltZW5zaW9uVG9nZ2xlKTtcbiAgICBtYXQyIHh5ID0gbWF0Mih2aWV3Qm94U2l6ZSAqIHl5ICsgZGltZW5zaW9uVG9nZ2xlLCB2aWV3Qm94U2l6ZSAqIHZlYzIoeCwgeSkpO1xuXG4gICAgdmVjMiB2aWV3Qm94WFkgPSB2aWV3Qm94UG9zaXRpb24gKyB4eSAqIHNjYXR0ZXJUb2dnbGU7XG5cbiAgICBmbG9hdCBkZXB0aE9ySGlkZSA9IGRlcHRoICsgMi4wICogKDEuMCAtIHNob3cpO1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KFxuICAgICAgICB4eVByb2plY3Rpb24gKiAoMi4wICogdmlld0JveFhZIC8gcmVzb2x1dGlvbiAtIDEuMCksXG4gICAgICAgIGRlcHRoT3JIaWRlLFxuICAgICAgICAxLjBcbiAgICApO1xuXG4gICAgLy8gdmlzaWJsZSBjb2xvcmluZ1xuICAgIGZsb2F0IGNsYW1wZWRDb2xvckluZGV4ID0gY2xhbXAoKHByb21pbmVuY2UgLSBjb2xvckNsYW1wWzBdKSAvIChjb2xvckNsYW1wWzFdIC0gY29sb3JDbGFtcFswXSksIDAuMCwgMS4wKTtcbiAgICBmcmFnQ29sb3IgPSB0ZXh0dXJlMkQocGFsZXR0ZSwgdmVjMigoY2xhbXBlZENvbG9ySW5kZXggKiAyNTUuMCArIDAuNSkgLyAyNTYuMCwgMC41KSk7XG59XG4iLApmcmFnOiJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbnZvaWQgbWFpbigpIHtcbiAgICBnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iLHByaW1pdGl2ZToibGluZXMiLGxpbmVXaWR0aDoxLGF0dHJpYnV0ZXM6UCx1bmlmb3Jtczp7cmVzb2x1dGlvbjpPLnByb3AoInJlc29sdXRpb24iKSx2aWV3Qm94UG9zaXRpb246Ty5wcm9wKCJ2aWV3Qm94UG9zaXRpb24iKSx2aWV3Qm94U2l6ZTpPLnByb3AoInZpZXdCb3hTaXplIiksZGltMUE6Ty5wcm9wKCJkaW0xQSIpLGRpbTJBOk8ucHJvcCgiZGltMkEiKSxkaW0xQjpPLnByb3AoImRpbTFCIiksZGltMkI6Ty5wcm9wKCJkaW0yQiIpLGRpbTFDOk8ucHJvcCgiZGltMUMiKSxkaW0yQzpPLnByb3AoImRpbTJDIiksZGltMUQ6Ty5wcm9wKCJkaW0xRCIpLGRpbTJEOk8ucHJvcCgiZGltMkQiKSxsb0E6Ty5wcm9wKCJsb0EiKSxoaUE6Ty5wcm9wKCJoaUEiKSxsb0I6Ty5wcm9wKCJsb0IiKSxoaUI6Ty5wcm9wKCJoaUIiKSxsb0M6Ty5wcm9wKCJsb0MiKSxoaUM6Ty5wcm9wKCJoaUMiKSxsb0Q6Ty5wcm9wKCJsb0QiKSxoaUQ6Ty5wcm9wKCJoaUQiKSxwYWxldHRlOlIsY29sb3JDbGFtcDpPLnByb3AoImNvbG9yQ2xhbXAiKSxzY2F0dGVyOk8ucHJvcCgic2NhdHRlciIpfSxvZmZzZXQ6Ty5wcm9wKCJvZmZzZXQiKSxjb3VudDpPLnByb3AoImNvdW50Iil9KSxqPVswLDFdLE49W107cmV0dXJue3NldENvbG9yRG9tYWluOnkscmVuZGVyOngscmVhZFBpeGVsOncscmVhZFBpeGVsczpNLGRlc3Ryb3k6Ty5kZXN0cm95fX19LHsiLi9jb25zdGFudHMiOjk5NSxyZWdsOjQ5N31dLDk5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBpKHQpe3JldHVyblt0XX1mdW5jdGlvbiBhKHQpe3JldHVybiEoInZpc2libGUiaW4gdCl8fHQudmlzaWJsZX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQucmFuZ2U/dC5yYW5nZVswXTpfLm1pbih0LnZhbHVlcykscj10LnJhbmdlP3QucmFuZ2VbMV06Xy5tYXgodC52YWx1ZXMpO3JldHVybiFpc05hTihlKSYmaXNGaW5pdGUoZSl8fChlPTApLCFpc05hTihyKSYmaXNGaW5pdGUocil8fChyPTApLGU9PT1yJiYodm9pZCAwPT09ZT8oZT0wLHI9MSk6MD09PWU/KGUtPTEscis9MSk6KGUqPS45LHIqPTEuMSkpLFtlLHJdfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGksYSxvO2ZvcihyPTAsbj10LnJhbmdlKCksaT0xLzAsYT1uWzBdLG87cjxuLmxlbmd0aDtyKyspe2lmKChvPU1hdGguYWJzKG5bcl0tZSkpPmkpcmV0dXJuIGE7aT1vLGE9bltyXX1yZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1vKHIpO3JldHVybiByLnRpY2t2YWxzP18uc2NhbGUub3JkaW5hbCgpLmRvbWFpbihyLnRpY2t2YWxzKS5yYW5nZShyLnRpY2t2YWxzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1uWzBdKS8oblsxXS1uWzBdKX0pLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gdC1lK3IqKGUtKHQtZSkpfSkpOl8uc2NhbGUubGluZWFyKCkuZG9tYWluKG4pLnJhbmdlKFt0LWUsZV0pfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gXy5zY2FsZS5saW5lYXIoKS5yYW5nZShbdC1lLGVdKX1mdW5jdGlvbiBjKHQpe3JldHVybiBfLnNjYWxlLmxpbmVhcigpLmRvbWFpbihvKHQpKX1mdW5jdGlvbiBoKHQpe3ZhciBlPW8odCk7cmV0dXJuIHQudGlja3ZhbHMmJl8uc2NhbGUub3JkaW5hbCgpLmRvbWFpbih0LnRpY2t2YWxzKS5yYW5nZSh0LnRpY2t2YWxzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4odC1lWzBdKS8oZVsxXS1lWzBdKX0pKX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkscj10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0pLG49ci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIF8ucmdiKHQpfSksaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGVbdF19fSxhPSJyZ2IiLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIF8uc2NhbGUubGluZWFyKCkuY2xhbXAoITApLmRvbWFpbihlKS5yYW5nZShuLm1hcChpKHQpKSl9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSl9fWZ1bmN0aW9uIGQodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49ZChlKSxpPW4udHJhY2Usbz1uLmxpbmVDb2xvcixzPW4uY3NjYWxlLGw9aS5saW5lLHU9aS5kb21haW4saD1pLmRpbWVuc2lvbnMscD10LndpZHRoLG09aS5sYWJlbGZvbnQsdj1pLnRpY2tmb250LGc9aS5yYW5nZWZvbnQseT14LmV4dGVuZERlZXAoe30sbCx7Y29sb3I6by5tYXAoYyh7dmFsdWVzOm8scmFuZ2U6W2wuY21pbixsLmNtYXhdfSkpLGJsb2NrTGluZUNvdW50OmIuYmxvY2tMaW5lQ291bnQsY2FudmFzT3ZlcmRyYWc6Yi5vdmVyZHJhZypiLmNhbnZhc1BpeGVsUmF0aW99KSxfPU1hdGguZmxvb3IocCoodS54WzFdLXUueFswXSkpLHc9TWF0aC5mbG9vcih0LmhlaWdodCoodS55WzFdLXUueVswXSkpLE09dC5tYXJnaW58fHtsOjgwLHI6ODAsdDoxMDAsYjo4MH0saz1fLEE9dztyZXR1cm57a2V5OnIsY29sQ291bnQ6aC5maWx0ZXIoYSkubGVuZ3RoLGRpbWVuc2lvbnM6aCx0aWNrRGlzdGFuY2U6Yi50aWNrRGlzdGFuY2UsdW5pdFRvQ29sb3I6ZihzKSxsaW5lczp5LGxhYmVsRm9udDptLHRpY2tGb250OnYscmFuZ2VGb250OmcsdHJhbnNsYXRlWDp1LnhbMF0qcCx0cmFuc2xhdGVZOnQuaGVpZ2h0LXUueVsxXSp0LmhlaWdodCxwYWQ6TSxjYW52YXNXaWR0aDprKmIuY2FudmFzUGl4ZWxSYXRpbysyKnkuY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0OkEqYi5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOmssaGVpZ2h0OkEsY2FudmFzUGl4ZWxSYXRpbzpiLmNhbnZhc1BpeGVsUmF0aW99fWZ1bmN0aW9uIG0odCl7dmFyIGU9dC53aWR0aCxyPXQuaGVpZ2h0LG49dC5kaW1lbnNpb25zLGk9dC5jYW52YXNQaXhlbFJhdGlvLG89ZnVuY3Rpb24ocil7cmV0dXJuIGUqci9NYXRoLm1heCgxLHQuY29sQ291bnQtMSl9LHM9Yi52ZXJ0aWNhbFBhZGRpbmcvKHIqaSksZj0xLTIqcyxkPWZ1bmN0aW9uKHQpe3JldHVybiBzK2YqdH0scD17a2V5OnQua2V5LHhTY2FsZTpvLG1vZGVsOnR9LG09e307cmV0dXJuIHAuZGltZW5zaW9ucz1uLmZpbHRlcihhKS5tYXAoZnVuY3Rpb24oZSxuKXt2YXIgYT1jKGUpLHM9bVtlLmxhYmVsXTtyZXR1cm4gbVtlLmxhYmVsXT0oc3x8MCkrMSx7a2V5OmUubGFiZWwrKHM/Il9fIitzOiIiKSxsYWJlbDplLmxhYmVsLHRpY2tGb3JtYXQ6ZS50aWNrZm9ybWF0LHRpY2t2YWxzOmUudGlja3ZhbHMsdGlja3RleHQ6ZS50aWNrdGV4dCxvcmRpbmFsOiEhZS50aWNrdmFscyxzY2F0dGVyOmIuc2NhdHRlcnx8ZS5zY2F0dGVyLHhJbmRleDpuLGNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXg6bix2aXNpYmxlSW5kZXg6ZS5faW5kZXgsaGVpZ2h0OnIsdmFsdWVzOmUudmFsdWVzLHBhZGRlZFVuaXRWYWx1ZXM6ZS52YWx1ZXMubWFwKGEpLm1hcChkKSx4U2NhbGU6byx4Om8obiksY2FudmFzWDpvKG4pKmksdW5pdFNjYWxlOnUocixiLnZlcnRpY2FsUGFkZGluZyksZG9tYWluU2NhbGU6bChyLGIudmVydGljYWxQYWRkaW5nLGUpLG9yZGluYWxTY2FsZTpoKGUpLGRvbWFpblRvVW5pdFNjYWxlOmEsZmlsdGVyOmUuY29uc3RyYWludHJhbmdlP2UuY29uc3RyYWludHJhbmdlLm1hcChhKTpbMCwxXSxwYXJlbnQ6cCxtb2RlbDp0fX0pLHB9ZnVuY3Rpb24gdih0KXtyZXR1cm4gYi5sYXllcnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybntrZXk6ZSxjb250ZXh0OiJjb250ZXh0TGluZUxheWVyIj09PWUscGljazoicGlja0xpbmVMYXllciI9PT1lLHZpZXdNb2RlbDp0LG1vZGVsOnQubW9kZWx9fSl9ZnVuY3Rpb24gZyh0KXt0LmNsYXNzZWQoImF4aXNFeHRlbnRUZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKX12YXIgeT10KCIuL2xpbmVzIiksYj10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi4vLi4vbGliIiksXz10KCJkMyIpLHc9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7ZnVuY3Rpb24gbCh0KXt2YXIgZT10LnNlbGVjdEFsbCgiZGVmcyIpLmRhdGEoaSxuKTtlLmVudGVyKCkuYXBwZW5kKCJkZWZzIik7dmFyIHI9ZS5zZWxlY3RBbGwoIiNmaWx0ZXJCYXJQYXR0ZXJuIikuZGF0YShpLG4pO3IuZW50ZXIoKS5hcHBlbmQoInBhdHRlcm4iKS5hdHRyKCJpZCIsImZpbHRlckJhclBhdHRlcm4iKS5hdHRyKCJwYXR0ZXJuVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLHIuYXR0cigieCIsLWIuYmFyLndpZHRoKS5hdHRyKCJ3aWR0aCIsYi5iYXIuY2FwdHVyZXdpZHRoKS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmhlaWdodH0pO3ZhciBhPXIuc2VsZWN0QWxsKCJyZWN0IikuZGF0YShpLG4pO2EuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksYS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmhlaWdodH0pLmF0dHIoIndpZHRoIixiLmJhci53aWR0aCkuYXR0cigieCIsYi5iYXIud2lkdGgvMikuYXR0cigiZmlsbCIsYi5iYXIuZmlsbGNvbG9yKS5hdHRyKCJmaWxsLW9wYWNpdHkiLGIuYmFyLmZpbGxvcGFjaXR5KS5hdHRyKCJzdHJva2UiLGIuYmFyLnN0cm9rZWNvbG9yKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsYi5iYXIuc3Ryb2tlb3BhY2l0eSkuYXR0cigic3Ryb2tlLXdpZHRoIixiLmJhci5zdHJva2V3aWR0aCl9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5kaW1lbnNpb25zLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmZpbHRlclswXXx8MSE9PXQuZmlsdGVyWzFdfSl9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgcj1lLnBhbmVsc3x8KGUucGFuZWxzPVtdKSxuPXQuZWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdH0pW2Uua2V5XS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuX19kYXRhX199KSxpPW4ubGVuZ3RoLTEsYT0wO2E8MTthKyspZm9yKHZhciBvPTA7bzxpO28rKyl7dmFyIHM9cltvK2EqaV18fChyW28rYSppXT17fSksbD1uW29dLHU9bltvKzFdO3MuZGltMT1sLHMuZGltMj11LHMuY2FudmFzWD1sLmNhbnZhc1gscy5wYW5lbFNpemVYPXUuY2FudmFzWC1sLmNhbnZhc1gscy5wYW5lbFNpemVZPWUubW9kZWwuY2FudmFzSGVpZ2h0LzEscy55PWEqcy5wYW5lbFNpemVZLHMuY2FudmFzWT1lLm1vZGVsLmNhbnZhc0hlaWdodC1zLnktcy5wYW5lbFNpemVZfX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPWUucGFuZWxzfHwoZS5wYW5lbHM9W10pLG49dC5lYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSlbZS5rZXldLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5fX2RhdGFfX30pLGk9bi5sZW5ndGgtMSxhPWksbz0wO288aTtvKyspZm9yKHZhciBzPTA7czxpO3MrKyl7dmFyIGw9cltzK28qaV18fChyW3MrbyppXT17fSksdT1uW3NdLGM9bltzKzFdO2wuZGltMT1uW28rMV0sbC5kaW0yPWMsbC5jYW52YXNYPXUuY2FudmFzWCxsLnBhbmVsU2l6ZVg9Yy5jYW52YXNYLXUuY2FudmFzWCxsLnBhbmVsU2l6ZVk9ZS5tb2RlbC5jYW52YXNIZWlnaHQvYSxsLnk9bypsLnBhbmVsU2l6ZVksbC5jYW52YXNZPWUubW9kZWwuY2FudmFzSGVpZ2h0LWwueS1sLnBhbmVsU2l6ZVl9fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4oYi5zY2F0dGVyP2g6YykodCxlKX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Lm9yZGluYWw/ZnVuY3Rpb24oKXtyZXR1cm4iIn06Xy5mb3JtYXQodC50aWNrRm9ybWF0KX1mdW5jdGlvbiBNKCl7WD0hMCxUPSEwfWZ1bmN0aW9uIGsodCl7Uz0hMTt2YXIgZT10LnBhcmVudCxyPXQuYnJ1c2guZXh0ZW50KCksbj1lLmRpbWVuc2lvbnMsaT1uW3QueEluZGV4XS5maWx0ZXIsYT1YJiZyWzBdPT09clsxXTthJiYodC5icnVzaC5jbGVhcigpLF8uc2VsZWN0KHRoaXMpLnNlbGVjdCgicmVjdC5leHRlbnQiKS5hdHRyKCJ5IiwtMTAwKSk7dmFyIG89YT9bMCwxXTpyLnNsaWNlKCk7aWYob1swXSE9PWlbMF18fG9bMV0hPT1pWzFdKXtuW3QueEluZGV4XS5maWx0ZXI9byxlLmZvY3VzTGluZUxheWVyJiZlLmZvY3VzTGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCk7dmFyIHM9dShlKTshVyYmcz8oZS5jb250ZXh0TGluZUxheWVyJiZlLmNvbnRleHRMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxXPSEwKTpXJiYhcyYmKGUuY29udGV4dExpbmVMYXllciYmZS5jb250ZXh0TGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksVz0hMSl9WD0hMX1mdW5jdGlvbiBBKHQpe3ZhciBlPXQucGFyZW50LHI9dC5icnVzaC5leHRlbnQoKSxuPXJbMF09PT1yWzFdLGk9ZS5kaW1lbnNpb25zLGE9aVt0LnhJbmRleF0uZmlsdGVyO2lmKCFuJiZ0Lm9yZGluYWwmJihhWzBdPXModC5vcmRpbmFsU2NhbGUsYVswXSksYVsxXT1zKHQub3JkaW5hbFNjYWxlLGFbMV0pLGFbMF09PT1hWzFdJiYoYVswXT1NYXRoLm1heCgwLGFbMF0tLjA1KSxhWzFdPU1hdGgubWluKDEsYVsxXSsuMDUpKSxfLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMTUwKS5jYWxsKHQuYnJ1c2guZXh0ZW50KGEpKSxlLmZvY3VzTGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCkpLGUucGlja0xpbmVMYXllciYmZS5waWNrTGluZUxheWVyLnJlbmRlcihlLnBhbmVscywhMCksUz0hMCxUPSJlbmRpbmciLG8mJm8uZmlsdGVyQ2hhbmdlZCl7dmFyIGw9dC5kb21haW5Ub1VuaXRTY2FsZS5pbnZlcnQsdT1hLm1hcChsKTtvLmZpbHRlckNoYW5nZWQoZS5rZXksdC52aXNpYmxlSW5kZXgsdSl9fXZhciBUPSExLFM9ITAsRT1yLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZCh0KS50cmFjZS52aXNpYmxlfSkubWFwKHAuYmluZCgwLGEpKS5tYXAobSk7dC5zZWxlY3RBbGwoIi5wYXJjb29yZHMtbGluZS1sYXllcnMiKS5yZW1vdmUoKTt2YXIgTD10LnNlbGVjdEFsbCgiLnBhcmNvb3Jkcy1saW5lLWxheWVycyIpLmRhdGEoRSxuKTtMLmVudGVyKCkuaW5zZXJ0KCJkaXYiLCIuIitlLmF0dHIoImNsYXNzIikuc3BsaXQoIiAiKS5qb2luKCIgLiIpKS5jbGFzc2VkKCJwYXJjb29yZHMtbGluZS1sYXllcnMiLCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94IiksTC5zdHlsZSgidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQubW9kZWwudHJhbnNsYXRlWC1iLm92ZXJkcmFnKSsicHgsIit0Lm1vZGVsLnRyYW5zbGF0ZVkrInB4KSJ9KTt2YXIgQz1MLnNlbGVjdEFsbCgiLnBhcmNvb3Jkcy1saW5lcyIpLmRhdGEodixuKSx6PXtyZW5kZXJlcnM6W10sZGltZW5zaW9uczpbXX0sST1udWxsO0MuZW50ZXIoKS5hcHBlbmQoImNhbnZhcyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4icGFyY29vcmRzLWxpbmVzICIrKHQuY29udGV4dD8iY29udGV4dCI6dC5waWNrPyJwaWNrIjoiZm9jdXMiKX0pLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgiZmxvYXQiLCJsZWZ0Iikuc3R5bGUoImNsZWFyIiwiYm90aCIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoInBvc2l0aW9uIixmdW5jdGlvbih0LGUpe3JldHVybiJhYnNvbHV0ZSJ9KS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQucGlja30pLm9uKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHQpe2lmKFMmJnQubGluZUxheWVyJiZvJiZvLmhvdmVyKXt2YXIgZT1fLmV2ZW50LHI9dGhpcy53aWR0aCxuPXRoaXMuaGVpZ2h0LGk9Xy5tb3VzZSh0aGlzKSxhPWlbMF0scz1pWzFdO2lmKGE8MHx8czwwfHxhPj1yfHxzPj1uKXJldHVybjt2YXIgbD10LmxpbmVMYXllci5yZWFkUGl4ZWwoYSxuLTEtcyksdT0wIT09bFszXSxjPXU/bFsyXSsyNTYqKGxbMV0rMjU2KmxbMF0pOm51bGwsaD17eDphLHk6cyxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WSxkYXRhSW5kZXg6dC5tb2RlbC5rZXksY3VydmVOdW1iZXI6Y307YyE9PUkmJih1P28uaG92ZXIoaCk6by51bmhvdmVyJiZvLnVuaG92ZXIoaCksST1jKX19KSxDLnN0eWxlKCJtYXJnaW4iLGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwucGFkO3JldHVybiBlLnQrInB4ICIrZS5yKyJweCAiK2UuYisicHggIitlLmwrInB4In0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jYW52YXNXaWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuY2FudmFzSGVpZ2h0fSkuc3R5bGUoIndpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC53aWR0aCsyKmIub3ZlcmRyYWcrInB4In0pLnN0eWxlKCJoZWlnaHQiLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmhlaWdodCsicHgifSkuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpY2s/LjAxOjF9KSxlLnN0eWxlKCJiYWNrZ3JvdW5kIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKSIpO3ZhciBEPWUuc2VsZWN0QWxsKCIucGFyY29vcmRzIikuZGF0YShFLG4pO0QuZXhpdCgpLnJlbW92ZSgpLEQuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwYXJjb29yZHMiLCEwKS5hdHRyKCJvdmVyZmxvdyIsInZpc2libGUiKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLmNhbGwobCksRC5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwud2lkdGgrdC5tb2RlbC5wYWQubCt0Lm1vZGVsLnBhZC5yfSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5oZWlnaHQrdC5tb2RlbC5wYWQudCt0Lm1vZGVsLnBhZC5ifSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrdC5tb2RlbC50cmFuc2xhdGVYKyIsIit0Lm1vZGVsLnRyYW5zbGF0ZVkrIikifSk7dmFyIFA9RC5zZWxlY3RBbGwoIi5wYXJjb29yZHNDb250cm9sVmlldyIpLmRhdGEoaSxuKTtQLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicGFyY29vcmRzQ29udHJvbFZpZXciLCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94IiksUC5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0Lm1vZGVsLnBhZC5sKyIsIit0Lm1vZGVsLnBhZC50KyIpIn0pO3ZhciBPPVAuc2VsZWN0QWxsKCIueUF4aXMiKS5kYXRhKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9LG4pO08uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5QXhpcyIsITApLmVhY2goZnVuY3Rpb24odCl7ei5kaW1lbnNpb25zLnB1c2godCl9KSxQLmVhY2goZnVuY3Rpb24odCl7ZihPLHQpfSksQy5lYWNoKGZ1bmN0aW9uKHQpe3QubGluZUxheWVyPXkodGhpcyx0Lm1vZGVsLmxpbmVzLHQubW9kZWwuY2FudmFzV2lkdGgsdC5tb2RlbC5jYW52YXNIZWlnaHQsdC52aWV3TW9kZWwuZGltZW5zaW9ucyx0LnZpZXdNb2RlbC5wYW5lbHMsdC5tb2RlbC51bml0VG9Db2xvcix0LmNvbnRleHQsdC5waWNrLGIuc2NhdHRlciksdC52aWV3TW9kZWxbdC5rZXldPXQubGluZUxheWVyLHoucmVuZGVyZXJzLnB1c2goZnVuY3Rpb24oKXt0LmxpbmVMYXllci5yZW5kZXIodC52aWV3TW9kZWwucGFuZWxzLCEwKX0pLHQubGluZUxheWVyLnJlbmRlcih0LnZpZXdNb2RlbC5wYW5lbHMsIXQuY29udGV4dCl9KSxPLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueFNjYWxlKHQueEluZGV4KSsiLCAwKSJ9KSxPLmNhbGwoXy5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkub24oImRyYWciLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O1M9ITEsVHx8KHQueD1NYXRoLm1heCgtYi5vdmVyZHJhZyxNYXRoLm1pbih0Lm1vZGVsLndpZHRoK2Iub3ZlcmRyYWcsXy5ldmVudC54KSksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sTy5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueC1lLnh9KS5lYWNoKGZ1bmN0aW9uKGUscil7ZS54SW5kZXg9cixlLng9dD09PWU/ZS54OmUueFNjYWxlKGUueEluZGV4KSxlLmNhbnZhc1g9ZS54KmUubW9kZWwuY2FudmFzUGl4ZWxSYXRpb30pLGYoTyxlKSxPLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMCE9PU1hdGguYWJzKHQueEluZGV4LWUueEluZGV4KX0pLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueFNjYWxlKHQueEluZGV4KSsiLCAwKSJ9KSxfLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgMCkiKSxPLmVhY2goZnVuY3Rpb24ocixuLGkpe2k9PT10LnBhcmVudC5rZXkmJihlLmRpbWVuc2lvbnNbbl09cil9KSxlLmNvbnRleHRMaW5lTGF5ZXImJmUuY29udGV4dExpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXUoZSkpLGUuZm9jdXNMaW5lTGF5ZXIucmVuZGVyJiZlLmZvY3VzTGluZUxheWVyLnJlbmRlcihlLnBhbmVscykpfSkub24oImRyYWdlbmQiLGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50O2lmKFQpcmV0dXJuIHZvaWQoImVuZGluZyI9PT1UJiYoVD0hMSkpO3QueD10LnhTY2FsZSh0LnhJbmRleCksdC5jYW52YXNYPXQueCp0Lm1vZGVsLmNhbnZhc1BpeGVsUmF0aW8sZihPLGUpLF8uc2VsZWN0KHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3QueCsiLCAwKSJ9KSxlLmNvbnRleHRMaW5lTGF5ZXImJmUuY29udGV4dExpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIXUoZSkpLGUuZm9jdXNMaW5lTGF5ZXImJmUuZm9jdXNMaW5lTGF5ZXIucmVuZGVyKGUucGFuZWxzKSxlLnBpY2tMaW5lTGF5ZXImJmUucGlja0xpbmVMYXllci5yZW5kZXIoZS5wYW5lbHMsITApLFM9ITAsbyYmby5heGVzTW92ZWQmJm8uYXhlc01vdmVkKGUua2V5LGUuZGltZW5zaW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKX0pKSxPLmV4aXQoKS5yZW1vdmUoKTt2YXIgUj1PLnNlbGVjdEFsbCgiLmF4aXNPdmVybGF5cyIpLmRhdGEoaSxuKTtSLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpc092ZXJsYXlzIiwhMCksUi5zZWxlY3RBbGwoIi5heGlzIikucmVtb3ZlKCk7dmFyIEY9Ui5zZWxlY3RBbGwoIi5heGlzIikuZGF0YShpLG4pO0YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzIiwhMCksRi5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxuPXIuZG9tYWluKCksaT10LnRpY2t0ZXh0O18uc2VsZWN0KHRoaXMpLmNhbGwoXy5zdmcuYXhpcygpLm9yaWVudCgibGVmdCIpLnRpY2tTaXplKDQpLm91dGVyVGlja1NpemUoMikudGlja3MoZSx0LnRpY2tGb3JtYXQpLnRpY2tWYWx1ZXModC5vcmRpbmFsP24ubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkmJmlbZV18fHR9KTpudWxsKS50aWNrRm9ybWF0KHQub3JkaW5hbD9mdW5jdGlvbih0KXtyZXR1cm4gdH06bnVsbCkuc2NhbGUocikpLHcuZm9udChGLnNlbGVjdEFsbCgidGV4dCIpLHQubW9kZWwudGlja0ZvbnQpfSksRi5zZWxlY3RBbGwoIi5kb21haW4sIC50aWNrPmxpbmUiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLC4yNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IiksRi5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1zaGFkb3ciLCIxcHggMXB4IDFweCAjZmZmLCAtMXB4IC0xcHggMXB4ICNmZmYsIDFweCAtMXB4IDFweCAjZmZmLCAtMXB4IDFweCAxcHggI2ZmZiIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iikuc3R5bGUoInVzZXItc2VsZWN0Iiwibm9uZSIpO3ZhciBqPVIuc2VsZWN0QWxsKCIuYXhpc0hlYWRpbmciKS5kYXRhKGksbik7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXNIZWFkaW5nIiwhMCk7dmFyIE49ai5zZWxlY3RBbGwoIi5heGlzVGl0bGUiKS5kYXRhKGksbik7Ti5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXNUaXRsZSIsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLnN0eWxlKCJ1c2VyLXNlbGVjdCIsIm5vbmUiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIiksTi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwiKy1iLmF4aXNUaXRsZU9mZnNldCsiKSIpLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHQubGFiZWx9KS5lYWNoKGZ1bmN0aW9uKHQpe3cuZm9udChOLHQubW9kZWwubGFiZWxGb250KX0pO3ZhciBCPVIuc2VsZWN0QWxsKCIuYXhpc0V4dGVudCIpLmRhdGEoaSxuKTtCLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpc0V4dGVudCIsITApO3ZhciBVPUIuc2VsZWN0QWxsKCIuYXhpc0V4dGVudFRvcCIpLmRhdGEoaSxuKTtVLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpc0V4dGVudFRvcCIsITApLFUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKDAsIistYi5heGlzRXh0ZW50T2Zmc2V0KyIpIik7dmFyIFY9VS5zZWxlY3RBbGwoIi5heGlzRXh0ZW50VG9wVGV4dCIpLmRhdGEoaSxuKTtWLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpc0V4dGVudFRvcFRleHQiLCEwKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhZnRlci1lZGdlIikuY2FsbChnKSxWLnRleHQoZnVuY3Rpb24odCl7cmV0dXJuIHgodCkodC5kb21haW5TY2FsZS5kb21haW4oKS5zbGljZSgtMSlbMF0pfSkuZWFjaChmdW5jdGlvbih0KXt3LmZvbnQoVix0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgSD1CLnNlbGVjdEFsbCgiLmF4aXNFeHRlbnRCb3R0b20iKS5kYXRhKGksbik7SC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXNFeHRlbnRCb3R0b20iLCEwKSxILmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQubW9kZWwuaGVpZ2h0K2IuYXhpc0V4dGVudE9mZnNldCkrIikifSk7dmFyIHE9SC5zZWxlY3RBbGwoIi5heGlzRXh0ZW50Qm90dG9tVGV4dCIpLmRhdGEoaSxuKTtxLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpc0V4dGVudEJvdHRvbVRleHQiLCEwKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJiZWZvcmUtZWRnZSIpLmNhbGwoZykscS50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB4KHQpKHQuZG9tYWluU2NhbGUuZG9tYWluKClbMF0pfSkuZWFjaChmdW5jdGlvbih0KXt3LmZvbnQocSx0Lm1vZGVsLnJhbmdlRm9udCl9KTt2YXIgRz1SLnNlbGVjdEFsbCgiLmF4aXNCcnVzaCIpLmRhdGEoaSxuKSxZPUcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzQnJ1c2giLCEwKTtHLmVhY2goZnVuY3Rpb24odCl7dC5icnVzaHx8KHQuYnJ1c2g9Xy5zdmcuYnJ1c2goKS55KHQudW5pdFNjYWxlKS5vbigiYnJ1c2hzdGFydCIsTSkub24oImJydXNoIixrKS5vbigiYnJ1c2hlbmQiLEEpLDA9PT10LmZpbHRlclswXSYmMT09PXQuZmlsdGVyWzFdfHx0LmJydXNoLmV4dGVudCh0LmZpbHRlciksXy5zZWxlY3QodGhpcykuY2FsbCh0LmJydXNoKSl9KSxZLnNlbGVjdEFsbCgicmVjdCIpLmF0dHIoIngiLC1iLmJhci5jYXB0dXJld2lkdGgvMikuYXR0cigid2lkdGgiLGIuYmFyLmNhcHR1cmV3aWR0aCksWS5zZWxlY3RBbGwoInJlY3QuZXh0ZW50IikuYXR0cigiZmlsbCIsInVybCgjZmlsdGVyQmFyUGF0dGVybikiKS5zdHlsZSgiY3Vyc29yIiwibnMtcmVzaXplIikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5maWx0ZXJbMF0mJjE9PT10LmZpbHRlclsxXX0pLmF0dHIoInkiLC0xMDApLFkuc2VsZWN0QWxsKCIucmVzaXplIHJlY3QiKS5hdHRyKCJoZWlnaHQiLGIuYmFyLmhhbmRsZWhlaWdodCkuYXR0cigib3BhY2l0eSIsMCkuc3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIiksWS5zZWxlY3RBbGwoIi5yZXNpemUubiByZWN0Iikuc3R5bGUoImN1cnNvciIsIm4tcmVzaXplIikuYXR0cigieSIsYi5iYXIuaGFuZGxlb3ZlcmxhcC1iLmJhci5oYW5kbGVoZWlnaHQpLFkuc2VsZWN0QWxsKCIucmVzaXplLnMgcmVjdCIpLnN0eWxlKCJjdXJzb3IiLCJzLXJlc2l6ZSIpLmF0dHIoInkiLGIuYmFyLmhhbmRsZW92ZXJsYXApO3ZhciBYPSExLFc9ITE7cmV0dXJuIHp9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9saWIiOjcyNCwiLi9jb25zdGFudHMiOjk5NSwiLi9saW5lcyI6OTk4LGQzOjEyMH1dLDFlMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9wYXBlcixhPXIuX3BhcGVyZGl2LG89e30scz17fSxsPXIuX3NpemU7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7b1tyXT10LmRhdGFbcl0uZGltZW5zaW9ucyxzW3JdPXQuZGF0YVtyXS5kaW1lbnNpb25zLnNsaWNlKCl9KTt2YXIgdT1mdW5jdGlvbihlLHIsbil7dmFyIGk9c1tlXVtyXSxhPWkuY29uc3RyYWludHJhbmdlO2EmJjI9PT1hLmxlbmd0aHx8KGE9aS5jb25zdHJhaW50cmFuZ2U9W10pLGFbMF09blswXSxhWzFdPW5bMV0sdC5lbWl0KCJwbG90bHlfcmVzdHlsZSIpfSxjPWZ1bmN0aW9uKGUpe3QuZW1pdCgicGxvdGx5X2hvdmVyIixlKX0saD1mdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV91bmhvdmVyIixlKX0sZj1mdW5jdGlvbihlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuISgidmlzaWJsZSJpbiB0KXx8dC52aXNpYmxlfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX12YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gaShyLHQsZSktaShyLHQsbil9fShzW2VdLmZpbHRlcihuKSk7b1tlXS5zb3J0KGEpLHNbZV0uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFuKHQpfSkuc29ydChmdW5jdGlvbih0KXtyZXR1cm4gc1tlXS5pbmRleE9mKHQpfSkuZm9yRWFjaChmdW5jdGlvbih0KXtvW2VdLnNwbGljZShvW2VdLmluZGV4T2YodCksMSksb1tlXS5zcGxpY2Uoc1tlXS5pbmRleE9mKHQpLDAsdCl9KSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIil9O24oYSxpLGUse3dpZHRoOmwudyxoZWlnaHQ6bC5oLG1hcmdpbjp7dDpsLnQscjpsLnIsYjpsLmIsbDpsLmx9fSx7ZmlsdGVyQ2hhbmdlZDp1LGhvdmVyOmMsdW5ob3ZlcjpoLGF4ZXNNb3ZlZDpmfSl9fSx7Ii4vcGFyY29vcmRzIjo5OTl9XSwxMDAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjB9LGRsYWJlbDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmUsYXJyYXlPazohMH0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITB9fX0sdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LHNjYWxlZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdLGV4dHJhczpbIm5vbmUiXX0saG92ZXJpbmZvOm8oe30sYS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbnNpZGUiLCJvdXRzaWRlIiwiYXV0byIsIm5vbmUiXSxkZmx0OiJhdXRvIixhcnJheU9rOiEwfSx0ZXh0Zm9udDpvKHt9LGkse30pLGluc2lkZXRleHRmb250Om8oe30saSx7fSksb3V0c2lkZXRleHRmb250Om8oe30saSx7fSksZG9tYWluOnt4Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX0seTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfSx7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX1dLGRmbHQ6WzAsMV19fSxob2xlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MH0sc29ydDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSJ9LHJvdGF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMzYwLG1heDozNjAsZGZsdDowfSxwdWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxhcnJheU9rOiEwfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjc4OH1dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl0sYT1pWzBdLnRyYWNlO2EuX21vZHVsZT09PWUmJiEwPT09YS52aXNpYmxlJiZyLnB1c2goaSl9cmV0dXJuIHJ9dmFyIGk9dCgiLi4vLi4vcmVnaXN0cnkiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQpe3ZhciBlPWkuZ2V0TW9kdWxlKCJwaWUiKSxyPW4odC5jYWxjZGF0YSxlKTtyLmxlbmd0aCYmZS5wbG90KHQscil9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInBpZSIpLGE9ZS5faGFzJiZlLl9oYXMoInBpZSIpO2kmJiFhJiZuLl9waWVsYXllci5zZWxlY3RBbGwoImcudHJhY2UiKS5yZW1vdmUoKX19LHsiLi4vLi4vcmVnaXN0cnkiOjg0Mn1dLDEwMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtpZighbCl7dmFyIGU9by5kZWZhdWx0cztsPWUuc2xpY2UoKTt2YXIgcjtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKWwucHVzaChhKGVbcl0pLmxpZ2h0ZW4oMjApLnRvSGV4U3RyaW5nKCkpO2ZvcihyPTA7cjxvLmRlZmF1bHRzLmxlbmd0aDtyKyspbC5wdXNoKGEoZVtyXSkuZGFya2VuKDIwKS50b0hleFN0cmluZygpKX1yZXR1cm4gbFt0JWwubGVuZ3RoXX12YXIgaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgidGlueWNvbG9yMiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbCx1LGMsaCxmLGQ9ZS52YWx1ZXMscD1lLmxhYmVscyxtPVtdLHY9dC5fZnVsbExheW91dCxnPXYuX3BpZWNvbG9ybWFwLHk9e30sYj0hMSx4PTAsXz12LmhpZGRlbmxhYmVsc3x8W107aWYoZS5kbGFiZWwpZm9yKHA9bmV3IEFycmF5KGQubGVuZ3RoKSxyPTA7cjxkLmxlbmd0aDtyKyspcFtyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7Zm9yKHI9MDtyPGQubGVuZ3RoO3IrKylsPWRbcl0saShsKSYmKChsPStsKTwwfHwodT1wW3JdLHZvaWQgMCE9PXUmJiIiIT09dXx8KHU9ciksdT1TdHJpbmcodSksdm9pZCAwPT09eVt1XSYmKHlbdV09ITAsYz1hKGUubWFya2VyLmNvbG9yc1tyXSksYy5pc1ZhbGlkKCk/KGM9by5hZGRPcGFjaXR5KGMsYy5nZXRBbHBoYSgpKSxnW3VdfHwoZ1t1XT1jKSk6Z1t1XT9jPWdbdV06KGM9ITEsYj0hMCksaD0tMSE9PV8uaW5kZXhPZih1KSxofHwoeCs9bCksbS5wdXNoKHt2OmwsbGFiZWw6dSxjb2xvcjpjLGk6cixoaWRkZW46aH0pKSkpO2lmKGUuc29ydCYmbS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudi10LnZ9KSxiKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspZj1tW3JdLCExPT09Zi5jb2xvciYmKGdbZi5sYWJlbF09Zi5jb2xvcj1uKHYuX3BpZWRlZmF1bHRjb2xvcmNvdW50KSx2Ll9waWVkZWZhdWx0Y29sb3Jjb3VudCsrKTtpZihtWzBdJiYobVswXS52VG90YWw9eCksZS50ZXh0aW5mbyYmIm5vbmUiIT09ZS50ZXh0aW5mbyl7dmFyIHcsTT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigibGFiZWwiKSxrPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKCJ0ZXh0IiksQT0tMSE9PWUudGV4dGluZm8uaW5kZXhPZigidmFsdWUiKSxUPS0xIT09ZS50ZXh0aW5mby5pbmRleE9mKCJwZXJjZW50IiksUz12LnNlcGFyYXRvcnM7Zm9yKHI9MDtyPG0ubGVuZ3RoO3IrKylmPW1bcl0sdz1NP1tmLmxhYmVsXTpbXSxrJiZlLnRleHRbZi5pXSYmdy5wdXNoKGUudGV4dFtmLmldKSxBJiZ3LnB1c2gocy5mb3JtYXRQaWVWYWx1ZShmLnYsUykpLFQmJncucHVzaChzLmZvcm1hdFBpZVBlcmNlbnQoZi52L3gsUykpLGYudGV4dD13LmpvaW4oIjxicj4iKX1yZXR1cm4gbX07dmFyIGx9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuL2hlbHBlcnMiOjEwMDUsImZhc3QtaXNudW1lcmljIjoxMjksdGlueWNvbG9yMjo1MzJ9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgcz1uLmNvZXJjZUZvbnQsbD1vKCJ2YWx1ZXMiKTtpZighQXJyYXkuaXNBcnJheShsKXx8IWwubGVuZ3RoKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7dmFyIHU9bygibGFiZWxzIik7QXJyYXkuaXNBcnJheSh1KXx8KG8oImxhYmVsMCIpLG8oImRsYWJlbCIpKSxvKCJtYXJrZXIubGluZS53aWR0aCIpJiZvKCJtYXJrZXIubGluZS5jb2xvciIpO3ZhciBjPW8oIm1hcmtlci5jb2xvcnMiKTtBcnJheS5pc0FycmF5KGMpfHwoZS5tYXJrZXIuY29sb3JzPVtdKSxvKCJzY2FsZWdyb3VwIik7dmFyIGg9bygidGV4dCIpLGY9bygidGV4dGluZm8iLEFycmF5LmlzQXJyYXkoaCk/InRleHQrcGVyY2VudCI6InBlcmNlbnQiKTtpZihvKCJob3ZlcnRleHQiKSxmJiYibm9uZSIhPT1mKXt2YXIgZD1vKCJ0ZXh0cG9zaXRpb24iKSxwPUFycmF5LmlzQXJyYXkoZCl8fCJhdXRvIj09PWQsbT1wfHwiaW5zaWRlIj09PWQsdj1wfHwib3V0c2lkZSI9PT1kO2lmKG18fHYpe3ZhciBnPXMobywidGV4dGZvbnQiLGEuZm9udCk7bSYmcyhvLCJpbnNpZGV0ZXh0Zm9udCIsZyksdiYmcyhvLCJvdXRzaWRldGV4dGZvbnQiLGcpfX1vKCJkb21haW4ueCIpLG8oImRvbWFpbi55IiksbygiaG9sZSIpLG8oInNvcnQiKSxvKCJkaXJlY3Rpb24iKSxvKCJyb3RhdGlvbiIpLG8oInB1bGwiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6MTAwMX1dLDEwMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KDEwMCp0KS50b1ByZWNpc2lvbigzKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKSsiJSJ9LHIuZm9ybWF0UGllVmFsdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnRvUHJlY2lzaW9uKDEwKTtyZXR1cm4tMSE9PXIubGFzdEluZGV4T2YoIi4iKSYmKHI9ci5yZXBsYWNlKC9bLl0/MCskLywiIikpLG4ubnVtU2VwYXJhdGUocixlKX19LHsiLi4vLi4vbGliIjo3MjR9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLnN1cHBseUxheW91dERlZmF1bHRzPXQoIi4vbGF5b3V0X2RlZmF1bHRzIiksbi5sYXlvdXRBdHRyaWJ1dGVzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uc3R5bGVPbmU9dCgiLi9zdHlsZV9vbmUiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBpZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuL2Jhc2VfcGxvdCIpLG4uY2F0ZWdvcmllcz1bInBpZSIsInNob3dMZWdlbmQiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi9hdHRyaWJ1dGVzIjoxMDAxLCIuL2Jhc2VfcGxvdCI6MTAwMiwiLi9jYWxjIjoxMDAzLCIuL2RlZmF1bHRzIjoxMDA0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDA3LCIuL2xheW91dF9kZWZhdWx0cyI6MTAwOCwiLi9wbG90IjoxMDA5LCIuL3N0eWxlIjoxMDEwLCIuL3N0eWxlX29uZSI6MTAxMX1dLDEwMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifX19LHt9XSwxMDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyFmdW5jdGlvbihyLGEpe24uY29lcmNlKHQsZSxpLHIsYSl9KCJoaWRkZW5sYWJlbHMiKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwMDd9XSwxMDA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPU1hdGguc3FydCh0LndpZHRoKnQud2lkdGgrdC5oZWlnaHQqdC5oZWlnaHQpLGE9dC53aWR0aC90LmhlaWdodCxvPU1hdGguUEkqTWF0aC5taW4oZS52L3IudlRvdGFsLC41KSxzPTEtci50cmFjZS5ob2xlLGw9aShlLHIpLHU9e3NjYWxlOmwqci5yKjIvbixyQ2VudGVyOjEtbCxyb3RhdGU6MH07aWYodS5zY2FsZT49MSlyZXR1cm4gdTt2YXIgYz1hKzEvKDIqTWF0aC50YW4obykpLGg9ci5yKk1hdGgubWluKDEvKE1hdGguc3FydChjKmMrLjUpK2MpLHMvKE1hdGguc3FydChhKmErcy8yKSthKSksZj17c2NhbGU6MipoL3QuaGVpZ2h0LHJDZW50ZXI6TWF0aC5jb3MoaC9yLnIpLWgqYS9yLnIscm90YXRlOigxODAvTWF0aC5QSSplLm1pZGFuZ2xlKzcyMCklMTgwLTkwfSxkPTEvYSxwPWQrMS8oMipNYXRoLnRhbihvKSksbT1yLnIqTWF0aC5taW4oMS8oTWF0aC5zcXJ0KHAqcCsuNSkrcCkscy8oTWF0aC5zcXJ0KGQqZCtzLzIpK2QpKSx2PXtzY2FsZToyKm0vdC53aWR0aCxyQ2VudGVyOk1hdGguY29zKG0vci5yKS1tL2Evci5yLHJvdGF0ZTooMTgwL01hdGguUEkqZS5taWRhbmdsZSs4MTApJTE4MC05MH0sZz12LnNjYWxlPmYuc2NhbGU/djpmO3JldHVybiB1LnNjYWxlPDEmJmcuc2NhbGU+dS5zY2FsZT9nOnV9ZnVuY3Rpb24gaSh0LGUpe2lmKHQudj09PWUudlRvdGFsJiYhZS50cmFjZS5ob2xlKXJldHVybiAxO3ZhciByPU1hdGguUEkqTWF0aC5taW4odC52L2UudlRvdGFsLC41KTtyZXR1cm4gTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHIpKSwoMS1lLnRyYWNlLmhvbGUpLzIpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1lLnB4bWlkWzBdLG49ZS5weG1pZFsxXSxpPXQud2lkdGgvMixhPXQuaGVpZ2h0LzI7cmV0dXJuIHI8MCYmKGkqPS0xKSxuPDAmJihhKj0tMSkse3NjYWxlOjEsckNlbnRlcjoxLHJvdGF0ZTowLHg6aStNYXRoLmFicyhhKSooaT4wPzE6LTEpLzIseTphLygxK3Iqci8obipuKSksb3V0c2lkZTohMH19ZnVuY3Rpb24gbyh0LGUpe2Z1bmN0aW9uIHIodCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIG4odCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfXZhciBpLGEsbyxzLGwsdSxjLGgsZixkLHAsbSx2O2ZvcihhPTA7YTwyO2ErKylmb3Iobz1hP3I6bixsPWE/TWF0aC5tYXg6TWF0aC5taW4sYz1hPzE6LTEsaT0wO2k8MjtpKyspe2ZvcihzPWk/TWF0aC5tYXg6TWF0aC5taW4sdT1pPzE6LTEsaD10W2FdW2ldLGguc29ydChvKSxmPXRbMS1hXVtpXSxkPWYuY29uY2F0KGgpLG09W10scD0wO3A8aC5sZW5ndGg7cCsrKXZvaWQgMCE9PWhbcF0ueUxhYmVsTWlkJiZtLnB1c2goaFtwXSk7Zm9yKHY9ITEscD0wO2EmJnA8Zi5sZW5ndGg7cCsrKWlmKHZvaWQgMCE9PWZbcF0ueUxhYmVsTWlkKXt2PWZbcF07YnJlYWt9Zm9yKHA9MDtwPG0ubGVuZ3RoO3ArKyl7dmFyIGc9cCYmbVtwLTFdO3YmJiFwJiYoZz12KSxmdW5jdGlvbih0LHIpe3J8fChyPXt9KTt2YXIgbixpLG8saCxmLHAsbT1yLmxhYmVsRXh0cmFZKyhhP3IueUxhYmVsTWF4OnIueUxhYmVsTWluKSx2PWE/dC55TGFiZWxNaW46dC55TGFiZWxNYXgsZz1hP3QueUxhYmVsTWF4OnQueUxhYmVsTWluLHk9dC5jeUZpbmFsK2wodC5weDBbMV0sdC5weDFbMV0pLGI9bS12O2lmKGIqYz4wJiYodC5sYWJlbEV4dHJhWT1iKSxBcnJheS5pc0FycmF5KGUucHVsbCkpZm9yKGk9MDtpPGQubGVuZ3RoO2krKykobz1kW2ldKT09PXR8fChlLnB1bGxbdC5pXXx8MCk+PWUucHVsbFtvLmldfHwoKHQucHhtaWRbMV0tby5weG1pZFsxXSkqYz4wPyhoPW8uY3lGaW5hbCtsKG8ucHgwWzFdLG8ucHgxWzFdKSwoYj1oLXYtdC5sYWJlbEV4dHJhWSkqYz4wJiYodC5sYWJlbEV4dHJhWSs9YikpOihnK3QubGFiZWxFeHRyYVkteSkqYz4wJiYobj0zKnUqTWF0aC5hYnMoaS1kLmluZGV4T2YodCkpLGY9by5jeEZpbmFsK3Moby5weDBbMF0sby5weDFbMF0pLChwPWYrbi0odC5jeEZpbmFsK3QucHhtaWRbMF0pLXQubGFiZWxFeHRyYVgpKnU+MCYmKHQubGFiZWxFeHRyYVgrPXApKSl9KG1bcF0sZyl9fX1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyxoLGYsZD1bXTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXtpZihvPXRbaV1bMF0scz1vLnRyYWNlLHI9ZS53KihzLmRvbWFpbi54WzFdLXMuZG9tYWluLnhbMF0pLG49ZS5oKihzLmRvbWFpbi55WzFdLXMuZG9tYWluLnlbMF0pLGw9cy50aWx0YXhpcypNYXRoLlBJLzE4MCxjPXMucHVsbCxBcnJheS5pc0FycmF5KGMpKWZvcihjPTAsYT0wO2E8cy5wdWxsLmxlbmd0aDthKyspcy5wdWxsW2FdPmMmJihjPXMucHVsbFthXSk7by5yPU1hdGgubWluKHIvdShzLnRpbHQsTWF0aC5zaW4obCkscy5kZXB0aCksbi91KHMudGlsdCxNYXRoLmNvcyhsKSxzLmRlcHRoKSkvKDIrMipjKSxvLmN4PWUubCtlLncqKHMuZG9tYWluLnhbMV0rcy5kb21haW4ueFswXSkvMixvLmN5PWUudCtlLmgqKDItcy5kb21haW4ueVsxXS1zLmRvbWFpbi55WzBdKS8yLHMuc2NhbGVncm91cCYmLTE9PT1kLmluZGV4T2Yocy5zY2FsZWdyb3VwKSYmZC5wdXNoKHMuc2NhbGVncm91cCl9Zm9yKGE9MDthPGQubGVuZ3RoO2ErKyl7Zm9yKGY9MS8wLGg9ZFthXSxpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLG8udHJhY2Uuc2NhbGVncm91cD09PWgmJihmPU1hdGgubWluKGYsby5yKm8uci9vLnZUb3RhbCkpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspbz10W2ldWzBdLG8udHJhY2Uuc2NhbGVncm91cD09PWgmJihvLnI9TWF0aC5zcXJ0KGYqby52VG90YWwpKX19ZnVuY3Rpb24gbCh0KXtmdW5jdGlvbiBlKHQpe3ZhciBlPWgucipNYXRoLnNpbih0KSxyPS1oLnIqTWF0aC5jb3ModCk7cmV0dXJuIGQ/W2UqKDEtcypuKm4pK3IqbypzLGUqbypzK3IqKDEtcyppKmkpLE1hdGguc2luKGEpKihyKmktZSpuKV06W2Uscl19dmFyIHIsbixpLGEsbyxzLGwsdSxjLGg9dFswXSxmPWgudHJhY2UsZD1mLnRpbHQscD1mLnJvdGF0aW9uKk1hdGguUEkvMTgwLG09MipNYXRoLlBJL2gudlRvdGFsLHY9InB4MCIsZz0icHgxIjtpZigiY291bnRlcmNsb2Nrd2lzZSI9PT1mLmRpcmVjdGlvbil7Zm9yKGw9MDtsPHQubGVuZ3RoJiZ0W2xdLmhpZGRlbjtsKyspO2lmKGw9PT10Lmxlbmd0aClyZXR1cm47cCs9bSp0W2xdLnYsbSo9LTEsdj0icHgxIixnPSJweDAifWZvcihkJiYoYT1kKk1hdGguUEkvMTgwLHI9Zi50aWx0YXhpcypNYXRoLlBJLzE4MCxvPU1hdGguc2luKHIpKk1hdGguY29zKHIpLHM9MS1NYXRoLmNvcyhhKSxuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MocikpLGM9ZShwKSxsPTA7bDx0Lmxlbmd0aDtsKyspdT10W2xdLHUuaGlkZGVufHwodVt2XT1jLHArPW0qdS52LzIsdS5weG1pZD1lKHApLHUubWlkYW5nbGU9cCxwKz1tKnUudi8yLGM9ZShwKSx1W2ddPWMsdS5sYXJnZUFyYz11LnY+aC52VG90YWwvMj8xOjApfWZ1bmN0aW9uIHUodCxlLHIpe2lmKCF0KXJldHVybiAxO3ZhciBuPU1hdGguc2luKHQqTWF0aC5QSS8xODApO3JldHVybiBNYXRoLm1heCguMDEscipuKk1hdGguYWJzKGUpKzIqTWF0aC5zcXJ0KDEtbipuKmUqZSkpfXZhciBjPXQoImQzIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLG09dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtzKGUsci5fc2l6ZSk7dmFyIHU9ci5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikuZGF0YShlKTt1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cih7InN0cm9rZS1saW5lam9pbiI6InJvdW5kIixjbGFzczoidHJhY2UifSksdS5leGl0KCkucmVtb3ZlKCksdS5vcmRlcigpLHUuZWFjaChmdW5jdGlvbihlKXt2YXIgcz1jLnNlbGVjdCh0aGlzKSx1PWVbMF0sdj11LnRyYWNlLGc9KHYuZGVwdGh8fDApKnUucipNYXRoLnNpbigwKS8yLHk9di50aWx0YXhpc3x8MCxiPXkqTWF0aC5QSS8xODAseD1bZypNYXRoLnNpbihiKSxnKk1hdGguY29zKGIpXSxfPXUucipNYXRoLmNvcygwKSx3PXMuc2VsZWN0QWxsKCJnLnBhcnQiKS5kYXRhKHYudGlsdD9bInRvcCIsInNpZGVzIl06WyJ0b3AiXSk7dy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbih0KXtyZXR1cm4gdCsiIHBhcnQifSksdy5leGl0KCkucmVtb3ZlKCksdy5vcmRlcigpLGwoZSkscy5zZWxlY3RBbGwoIi50b3AiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9Yy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YShlKTtzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSxzLmV4aXQoKS5yZW1vdmUoKTt2YXIgbD1bW1tdLFtdXSxbW10sW11dXSxnPSExO3MuZWFjaChmdW5jdGlvbihlKXtmdW5jdGlvbiBvKG4pe24ub3JpZ2luYWxFdmVudD1jLmV2ZW50O3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz10Ll9mdWxsRGF0YVt2LmluZGV4XSxzPWguY2FzdEhvdmVyaW5mbyhvLGEsZS5pKTtpZigiYWxsIj09PXMmJihzPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLHQuX2RyYWdnaW5nfHwhMT09PWEuaG92ZXJtb2RlfHwibm9uZSI9PT1zfHwic2tpcCI9PT1zfHwhcylyZXR1cm4gdm9pZCBoLmhvdmVyKHQsbiwicGllIik7dmFyIGw9aShlLHUpLGY9dytlLnB4bWlkWzBdKigxLWwpLGQ9TStlLnB4bWlkWzFdKigxLWwpLHA9ci5zZXBhcmF0b3JzLGc9W107LTEhPT1zLmluZGV4T2YoImxhYmVsIikmJmcucHVzaChlLmxhYmVsKSwtMSE9PXMuaW5kZXhPZigidGV4dCIpJiYoby5ob3ZlcnRleHQ/Zy5wdXNoKEFycmF5LmlzQXJyYXkoby5ob3ZlcnRleHQpP28uaG92ZXJ0ZXh0W2UuaV06by5ob3ZlcnRleHQpOm8udGV4dCYmby50ZXh0W2UuaV0mJmcucHVzaChvLnRleHRbZS5pXSkpLC0xIT09cy5pbmRleE9mKCJ2YWx1ZSIpJiZnLnB1c2gobS5mb3JtYXRQaWVWYWx1ZShlLnYscCkpLC0xIT09cy5pbmRleE9mKCJwZXJjZW50IikmJmcucHVzaChtLmZvcm1hdFBpZVBlcmNlbnQoZS52L3UudlRvdGFsLHApKSxoLmxvbmVIb3Zlcih7eDA6Zi1sKnUucix4MTpmK2wqdS5yLHk6ZCx0ZXh0Omcuam9pbigiPGJyPiIpLG5hbWU6LTEhPT1zLmluZGV4T2YoIm5hbWUiKT9vLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246ZS5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiLGNvbG9yOmguY2FzdEhvdmVyT3B0aW9uKHYsZS5pLCJiZ2NvbG9yIil8fGUuY29sb3IsYm9yZGVyQ29sb3I6aC5jYXN0SG92ZXJPcHRpb24odixlLmksImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpoLmNhc3RIb3Zlck9wdGlvbih2LGUuaSwiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpoLmNhc3RIb3Zlck9wdGlvbih2LGUuaSwiZm9udC5zaXplIiksZm9udENvbG9yOmguY2FzdEhvdmVyT3B0aW9uKHYsZS5pLCJmb250LmNvbG9yIil9LHtjb250YWluZXI6YS5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6YS5fcGFwZXIubm9kZSgpLGdkOnR9KSxoLmhvdmVyKHQsbiwicGllIiksVD0hMH1mdW5jdGlvbiBzKGUpe2Uub3JpZ2luYWxFdmVudD1jLmV2ZW50LHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpjLmV2ZW50LHBvaW50czpbZV19KSxUJiYoaC5sb25lVW5ob3ZlcihyLl9ob3ZlcmxheWVyLm5vZGUoKSksVD0hMSl9ZnVuY3Rpb24gZigpe3QuX2hvdmVyZGF0YT1bZV0sdC5faG92ZXJkYXRhLnRyYWNlPXUudHJhY2UsaC5jbGljayh0LGMuZXZlbnQpfWZ1bmN0aW9uIGIodCxyLG4saSl7cmV0dXJuImEiK2kqdS5yKyIsIitpKl8rIiAiK3krIiAiK2UubGFyZ2VBcmMrKG4/IiAxICI6IiAwICIpK2kqKHJbMF0tdFswXSkrIiwiK2kqKHJbMV0tdFsxXSl9aWYoZS5oaWRkZW4pcmV0dXJuIHZvaWQgYy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLGciKS5yZW1vdmUoKTtlLnBvaW50TnVtYmVyPWUuaSxlLmN1cnZlTnVtYmVyPXYuaW5kZXgsbFtlLnB4bWlkWzFdPDA/MDoxXVtlLnB4bWlkWzBdPDA/MDoxXS5wdXNoKGUpO3ZhciB3PXUuY3greFswXSxNPXUuY3kreFsxXSxrPWMuc2VsZWN0KHRoaXMpLEE9ay5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW2VdKSxUPSExO2lmKEEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzdXJmYWNlIiwhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxrLnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpLGsub24oIm1vdXNlb3ZlciIsbykub24oIm1vdXNlb3V0IixzKS5vbigiY2xpY2siLGYpLHYucHVsbCl7dmFyIFM9KyhBcnJheS5pc0FycmF5KHYucHVsbCk/di5wdWxsW2UuaV06di5wdWxsKXx8MDtTPjAmJih3Kz1TKmUucHhtaWRbMF0sTSs9UyplLnB4bWlkWzFdKX1lLmN4RmluYWw9dyxlLmN5RmluYWw9TTt2YXIgRT12LmhvbGU7aWYoZS52PT09dS52VG90YWwpe3ZhciBMPSJNIisodytlLnB4MFswXSkrIiwiKyhNK2UucHgwWzFdKStiKGUucHgwLGUucHhtaWQsITAsMSkrYihlLnB4bWlkLGUucHgwLCEwLDEpKyJaIjtFP0EuYXR0cigiZCIsIk0iKyh3K0UqZS5weDBbMF0pKyIsIisoTStFKmUucHgwWzFdKStiKGUucHgwLGUucHhtaWQsITEsRSkrYihlLnB4bWlkLGUucHgwLCExLEUpKyJaIitMKTpBLmF0dHIoImQiLEwpfWVsc2V7dmFyIEM9YihlLnB4MCxlLnB4MSwhMCwxKTtpZihFKXt2YXIgej0xLUU7QS5hdHRyKCJkIiwiTSIrKHcrRSplLnB4MVswXSkrIiwiKyhNK0UqZS5weDFbMV0pK2IoZS5weDEsZS5weDAsITEsRSkrImwiK3oqZS5weDBbMF0rIiwiK3oqZS5weDBbMV0rQysiWiIpfWVsc2UgQS5hdHRyKCJkIiwiTSIrdysiLCIrTSsibCIrZS5weDBbMF0rIiwiK2UucHgwWzFdK0MrIloiKX12YXIgST1BcnJheS5pc0FycmF5KHYudGV4dHBvc2l0aW9uKT92LnRleHRwb3NpdGlvbltlLmldOnYudGV4dHBvc2l0aW9uLEQ9ay5zZWxlY3RBbGwoImcuc2xpY2V0ZXh0IikuZGF0YShlLnRleHQmJiJub25lIiE9PUk/WzBdOltdKTtELmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCksRC5leGl0KCkucmVtb3ZlKCksRC5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9Yy5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0ZXh0IikuZGF0YShbMF0pO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJkYXRhLW5vdGV4IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLnRleHQoZS50ZXh0KS5hdHRyKHtjbGFzczoic2xpY2V0ZXh0Iix0cmFuc2Zvcm06IiIsInRleHQtYW5jaG9yIjoibWlkZGxlIn0pLmNhbGwoZC5mb250LCJvdXRzaWRlIj09PUk/di5vdXRzaWRldGV4dGZvbnQ6di5pbnNpZGV0ZXh0Zm9udCkuY2FsbChwLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgaSxvPWQuYkJveChyLm5vZGUoKSk7Im91dHNpZGUiPT09ST9pPWEobyxlKTooaT1uKG8sZSx1KSwiYXV0byI9PT1JJiZpLnNjYWxlPDEmJihyLmNhbGwoZC5mb250LHYub3V0c2lkZXRleHRmb250KSx2Lm91dHNpZGV0ZXh0Zm9udC5mYW1pbHk9PT12Lmluc2lkZXRleHRmb250LmZhbWlseSYmdi5vdXRzaWRldGV4dGZvbnQuc2l6ZT09PXYuaW5zaWRldGV4dGZvbnQuc2l6ZXx8KG89ZC5iQm94KHIubm9kZSgpKSksaT1hKG8sZSkpKTt2YXIgcz13K2UucHhtaWRbMF0qaS5yQ2VudGVyKyhpLnh8fDApLGw9TStlLnB4bWlkWzFdKmkuckNlbnRlcisoaS55fHwwKTtpLm91dHNpZGUmJihlLnlMYWJlbE1pbj1sLW8uaGVpZ2h0LzIsZS55TGFiZWxNaWQ9bCxlLnlMYWJlbE1heD1sK28uaGVpZ2h0LzIsZS5sYWJlbEV4dHJhWD0wLGUubGFiZWxFeHRyYVk9MCxnPSEwKSxyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3MrIiwiK2wrIikiKyhpLnNjYWxlPDE/InNjYWxlKCIraS5zY2FsZSsiKSI6IiIpKyhpLnJvdGF0ZT8icm90YXRlKCIraS5yb3RhdGUrIikiOiIiKSsidHJhbnNsYXRlKCIrLShvLmxlZnQrby5yaWdodCkvMisiLCIrLShvLnRvcCtvLmJvdHRvbSkvMisiKSIpfSl9KSxnJiZvKGwsdikscy5lYWNoKGZ1bmN0aW9uKHQpe2lmKHQubGFiZWxFeHRyYVh8fHQubGFiZWxFeHRyYVkpe3ZhciBlPWMuc2VsZWN0KHRoaXMpLHI9ZS5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTtyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QubGFiZWxFeHRyYVgrIiwiK3QubGFiZWxFeHRyYVkrIikiK3IuYXR0cigidHJhbnNmb3JtIikpO3ZhciBuPXQuY3hGaW5hbCt0LnB4bWlkWzBdLGk9dC5jeUZpbmFsK3QucHhtaWRbMV0sYT0iTSIrbisiLCIraSxvPSh0LnlMYWJlbE1heC10LnlMYWJlbE1pbikqKHQucHhtaWRbMF08MD8tMToxKS80O2lmKHQubGFiZWxFeHRyYVgpe3ZhciBzPXQubGFiZWxFeHRyYVgqdC5weG1pZFsxXS90LnB4bWlkWzBdLGw9dC55TGFiZWxNaWQrdC5sYWJlbEV4dHJhWS0odC5jeUZpbmFsK3QucHhtaWRbMV0pO01hdGguYWJzKHMpPk1hdGguYWJzKGwpP2ErPSJsIitsKnQucHhtaWRbMF0vdC5weG1pZFsxXSsiLCIrbCsiSCIrKG4rdC5sYWJlbEV4dHJhWCtvKTphKz0ibCIrdC5sYWJlbEV4dHJhWCsiLCIrcysidiIrKGwtcykrImgiK299ZWxzZSBhKz0iViIrKHQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVkpKyJoIitvO2UuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgidGV4dGxpbmUiLCEwKS5jYWxsKGYuc3Ryb2tlLHYub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLHYub3V0c2lkZXRleHRmb250LnNpemUvOCksZDphLGZpbGw6Im5vbmUifSl9fSl9KX0pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt1LnNlbGVjdEFsbCgidHNwYW4iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSl9LDApfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NDMsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6NzQzLCIuL2hlbHBlcnMiOjEwMDUsZDM6MTIwfV0sMTAxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi9zdHlsZV9vbmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj1lLnRyYWNlLGE9bi5zZWxlY3QodGhpcyk7YS5zdHlsZSh7b3BhY2l0eTpyLm9wYWNpdHl9KSxhLnNlbGVjdEFsbCgiLnRvcCBwYXRoLnN1cmZhY2UiKS5lYWNoKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwoaSx0LHIpfSl9KX19LHsiLi9zdHlsZV9vbmUiOjEwMTEsZDM6MTIwfV0sMTAxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLm1hcmtlci5saW5lLmNvbG9yO0FycmF5LmlzQXJyYXkoaSkmJihpPWlbZS5pXXx8bi5kZWZhdWx0TGluZSk7dmFyIGE9ci5tYXJrZXIubGluZS53aWR0aHx8MDtBcnJheS5pc0FycmF5KGEpJiYoYT1hW2UuaV18fDApLHQuc3R5bGUoeyJzdHJva2Utd2lkdGgiOmF9KS5jYWxsKG4uZmlsbCxlLmNvbG9yKS5jYWxsKG4uc3Ryb2tlLGkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDJ9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXt4Om4ueCx5Om4ueSx4eTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGluZGljZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5In0seWJvdW5kczp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6bi50ZXh0LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExfSxibGVuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsfSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxtYXg6MixkZmx0Oi41fSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwfSxib3JkZXI6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMX0sYXJlYXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MH19fX19LHsiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEwNjl9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9InBvaW50Y2xvdWQiLHRoaXMucGlja1hEYXRhPVtdLHRoaXMucGlja1lEYXRhPVtdLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnRleHRMYWJlbHM9W10sdGhpcy5jb2xvcj0icmdiKDAsIDAsIDApIix0aGlzLm5hbWU9IiIsdGhpcy5ob3ZlcmluZm89ImFsbCIsdGhpcy5pZFRvSW5kZXg9bmV3IEludDMyQXJyYXkoMCksdGhpcy5ib3VuZHM9WzAsMCwwLDBdLHRoaXMucG9pbnRjbG91ZE9wdGlvbnM9e3Bvc2l0aW9uczpuZXcgRmxvYXQzMkFycmF5KDApLGlkVG9JbmRleDp0aGlzLmlkVG9JbmRleCxzaXplbWluOi41LHNpemVtYXg6MTIsY29sb3I6WzAsMCwwLDFdLGFyZWFSYXRpbzoxLGJvcmRlckNvbG9yOlswLDAsMCwxXX0sdGhpcy5wb2ludGNsb3VkPWEodC5nbHBsb3QsdGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5wb2ludGNsb3VkLl90cmFjZT10aGlzfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1uZXcgbih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn0KdmFyIGE9dCgiZ2wtcG9pbnRjbG91ZDJkIiksbz10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iikscz10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLGw9WyJ4YXhpcyIsInlheGlzIl0sdT1uLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXTtyZXR1cm57dHJhY2U6dGhpcyxkYXRhQ29vcmQ6dC5kYXRhQ29vcmQsdHJhY2VDb29yZDp0aGlzLnBpY2tYWURhdGE/W3RoaXMucGlja1hZRGF0YVsyKmVdLHRoaXMucGlja1hZRGF0YVsyKmUrMV1dOlt0aGlzLnBpY2tYRGF0YVtlXSx0aGlzLnBpY2tZRGF0YVtlXV0sdGV4dExhYmVsOkFycmF5LmlzQXJyYXkodGhpcy50ZXh0TGFiZWxzKT90aGlzLnRleHRMYWJlbHNbZV06dGhpcy50ZXh0TGFiZWxzLGNvbG9yOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LHUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLnRleHRMYWJlbHM9dC50ZXh0LHRoaXMubmFtZT10Lm5hbWUsdGhpcy5ob3ZlcmluZm89dC5ob3ZlcmluZm8sdGhpcy5ib3VuZHM9WzEvMCwxLzAsLTEvMCwtMS8wXSx0aGlzLnVwZGF0ZUZhc3QodCksdGhpcy5jb2xvcj1zKHQse30pfSx1LnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxzLGw9dGhpcy54RGF0YT10aGlzLnBpY2tYRGF0YT10LngsdT10aGlzLnlEYXRhPXRoaXMucGlja1lEYXRhPXQueSxjPXRoaXMucGlja1hZRGF0YT10Lnh5LGg9dC54Ym91bmRzJiZ0Lnlib3VuZHMsZj10LmluZGljZXMsZD10aGlzLmJvdW5kcztpZihjKXtpZihuPWMsZT1jLmxlbmd0aD4+PjEsaClkWzBdPXQueGJvdW5kc1swXSxkWzJdPXQueGJvdW5kc1sxXSxkWzFdPXQueWJvdW5kc1swXSxkWzNdPXQueWJvdW5kc1sxXTtlbHNlIGZvcihzPTA7czxlO3MrKylpPW5bMipzXSxhPW5bMipzKzFdLGk8ZFswXSYmKGRbMF09aSksaT5kWzJdJiYoZFsyXT1pKSxhPGRbMV0mJihkWzFdPWEpLGE+ZFszXSYmKGRbM109YSk7aWYoZilyPWY7ZWxzZSBmb3Iocj1uZXcgSW50MzJBcnJheShlKSxzPTA7czxlO3MrKylyW3NdPXN9ZWxzZSBmb3IoZT1sLmxlbmd0aCxuPW5ldyBGbG9hdDMyQXJyYXkoMiplKSxyPW5ldyBJbnQzMkFycmF5KGUpLHM9MDtzPGU7cysrKWk9bFtzXSxhPXVbc10scltzXT1zLG5bMipzXT1pLG5bMipzKzFdPWEsaTxkWzBdJiYoZFswXT1pKSxpPmRbMl0mJihkWzJdPWkpLGE8ZFsxXSYmKGRbMV09YSksYT5kWzNdJiYoZFszXT1hKTt0aGlzLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuaWRUb0luZGV4PXIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5wb3NpdGlvbnM9bjt2YXIgcD1vKHQubWFya2VyLmNvbG9yKSxtPW8odC5tYXJrZXIuYm9yZGVyLmNvbG9yKSx2PXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5O3BbM10qPXYsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5jb2xvcj1wO3ZhciBnPXQubWFya2VyLmJsZW5kO2lmKG51bGw9PT1nKXtnPWwubGVuZ3RoPDEwMHx8dS5sZW5ndGg8MTAwfXRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYmxlbmQ9ZyxtWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuYm9yZGVyQ29sb3I9bTt2YXIgeT10Lm1hcmtlci5zaXplbWluLGI9TWF0aC5tYXgodC5tYXJrZXIuc2l6ZW1heCx0Lm1hcmtlci5zaXplbWluKTt0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNaW49eSx0aGlzLnBvaW50Y2xvdWRPcHRpb25zLnNpemVNYXg9Yix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmFyZWFSYXRpbz10Lm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvLHRoaXMucG9pbnRjbG91ZC51cGRhdGUodGhpcy5wb2ludGNsb3VkT3B0aW9ucyksdGhpcy5leHBhbmRBeGVzRmFzdChkLGIvMil9LHUuZXhwYW5kQXhlc0Zhc3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9ZXx8LjUsbz0wO288MjtvKyspcj10aGlzLnNjZW5lW2xbb11dLG49ci5fbWluLG58fChuPVtdKSxuLnB1c2goe3ZhbDp0W29dLHBhZDphfSksaT1yLl9tYXgsaXx8KGk9W10pLGkucHVzaCh7dmFsOnRbbysyXSxwYWQ6YX0pfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnBvaW50Y2xvdWQuZGlzcG9zZSgpfSxlLmV4cG9ydHM9aX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMDMzLCJnbC1wb2ludGNsb3VkMmQiOjIyOH1dLDEwMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIGEocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKCJ4IiksYSgieSIpLGEoInhib3VuZHMiKSxhKCJ5Ym91bmRzIiksdC54eSYmdC54eSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmKGUueHk9dC54eSksdC5pbmRpY2VzJiZ0LmluZGljZXMgaW5zdGFuY2VvZiBJbnQzMkFycmF5JiYoZS5pbmRpY2VzPXQuaW5kaWNlcyksYSgidGV4dCIpLGEoIm1hcmtlci5jb2xvciIsciksYSgibWFya2VyLm9wYWNpdHkiKSxhKCJtYXJrZXIuYmxlbmQiKSxhKCJtYXJrZXIuc2l6ZW1pbiIpLGEoIm1hcmtlci5zaXplbWF4IiksYSgibWFya2VyLmJvcmRlci5jb2xvciIsciksYSgibWFya2VyLmJvcmRlci5hcmVhcmF0aW8iKX19LHsiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6MTAxMn1dLDEwMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY2FsYz10KCIuLi9zY2F0dGVyM2QvY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InBvaW50Y2xvdWQiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLG4uY2F0ZWdvcmllcz1bImdsMmQiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsMmQiOjgwNCwiLi4vc2NhdHRlcjNkL2NhbGMiOjEwNDksIi4vYXR0cmlidXRlcyI6MTAxMiwiLi9jb252ZXJ0IjoxMDEzLCIuL2RlZmF1bHRzIjoxMDE0fV0sMTAxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtob3ZlcmluZm86cyh7fSxhLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsInBlcmNlbnQiLCJuYW1lIl19KSxkb21haW46e3g6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MX0se3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9XSxkZmx0OlswLDFdfSx5Ont2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjF9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxfV0sZGZsdDpbMCwxXX19LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgifSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuM3MifSx2YWx1ZXN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxhcnJhbmdlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic25hcCIsInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoic25hcCJ9LHRleHRmb250Omksbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnMoe30sbi5maWxsY29sb3Ise2FycmF5T2s6ITB9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0Oi41LGFycmF5T2s6ITB9fSxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MCxkZmx0OjIwfSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMSxtaW46MSxkZmx0OjIwfX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnMoe30sbi5maWxsY29sb3Ise2FycmF5T2s6ITB9KSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6by5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdGFyZ2V0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYwMSwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvYXR0cmlidXRlcyI6Njc4LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjc2MiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo3ODh9XSwxMDE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksaT10KCIuL3Bsb3QiKTtyLm5hbWU9InNhbmtleSIsci5hdHRyPSJ0eXBlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bi5nZXRTdWJwbG90Q2FsY0RhdGEodC5jYWxjZGF0YSwic2Fua2V5Iiwic2Fua2V5Iik7ZS5sZW5ndGgmJmkodCxlKX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygic2Fua2V5IiksYT1lLl9oYXMmJmUuX2hhcygic2Fua2V5Iik7aSYmIWEmJm4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnNhbmtleSIpLnJlbW92ZSgpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODI3LCIuL3Bsb3QiOjEwMjJ9XSwxMDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj10Lm1hcChmdW5jdGlvbigpe3JldHVybltdfSksYT0wO2E8TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO2ErKyl7aWYoZVthXT09PXJbYV0pcmV0dXJuITA7bltlW2FdXS5wdXNoKHJbYV0pfXJldHVybiBpKG4pLmNvbXBvbmVudHMuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MX0pfXZhciBpPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIiksYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlLm5vZGUubGFiZWwsZS5saW5rLnNvdXJjZSxlLmxpbmsudGFyZ2V0KSYmKGEuZXJyb3IoIkNpcmN1bGFyaXR5IGlzIHByZXNlbnQgaW4gdGhlIFNhbmtleSBkYXRhLiBSZW1vdmluZyBhbGwgbm9kZXMgYW5kIGxpbmtzLiIpLGUubGluay5sYWJlbD1bXSxlLmxpbmsuc291cmNlPVtdLGUubGluay50YXJnZXQ9W10sZS5saW5rLnZhbHVlPVtdLGUubGluay5jb2xvcj1bXSxlLm5vZGUubGFiZWw9W10sZS5ub2RlLmNvbG9yPVtdKSxbe2xpbms6ZS5saW5rLG5vZGU6ZS5ub2RlfV19fSx7Ii4uLy4uL2xpYiI6NzI0LCJzdHJvbmdseS1jb25uZWN0ZWQtY29tcG9uZW50cyI6NTI2fV0sMTAxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25vZGVUZXh0T2Zmc2V0SG9yaXpvbnRhbDo0LG5vZGVUZXh0T2Zmc2V0VmVydGljYWw6Myxub2RlUGFkQWNyb3NzOjEwLHNhbmtleUl0ZXJhdGlvbnM6NTAsZm9yY2VJdGVyYXRpb25zOjUsZm9yY2VUaWNrc1BlckZyYW1lOjEwLGR1cmF0aW9uOjUwMCxlYXNlOiJjdWJpYy1pbi1vdXQifX0se31dLDEwMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgidGlueWNvbG9yMiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dSgibm9kZS5sYWJlbCIpLHUoIm5vZGUucGFkIiksdSgibm9kZS50aGlja25lc3MiKSx1KCJub2RlLmxpbmUuY29sb3IiKSx1KCJub2RlLmxpbmUud2lkdGgiKTt2YXIgYz1mdW5jdGlvbih0KXtyZXR1cm4gYVt0JWEubGVuZ3RoXX07dSgibm9kZS5jb2xvciIsZS5ub2RlLmxhYmVsLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiBvLmFkZE9wYWNpdHkoYyhlKSwuOCl9KSksdSgibGluay5sYWJlbCIpLHUoImxpbmsuc291cmNlIiksdSgibGluay50YXJnZXQiKSx1KCJsaW5rLnZhbHVlIiksdSgibGluay5saW5lLmNvbG9yIiksdSgibGluay5saW5lLndpZHRoIiksdSgibGluay5jb2xvciIsZS5saW5rLnZhbHVlLm1hcChmdW5jdGlvbigpe3JldHVybiBzKGwucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz8icmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjoicmdiYSgwLCAwLCAwLCAwLjIpIn0pKSx1KCJkb21haW4ueCIpLHUoImRvbWFpbi55IiksdSgib3JpZW50YXRpb24iKSx1KCJ2YWx1ZWZvcm1hdCIpLHUoInZhbHVlc3VmZml4IiksdSgiYXJyYW5nZW1lbnQiKSxuLmNvZXJjZUZvbnQodSwidGV4dGZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxsLmZvbnQpKTt2YXIgaD1mdW5jdGlvbih0LHIpe3JldHVybi0xPT09ZS5saW5rLnNvdXJjZS5pbmRleE9mKHIpJiYtMT09PWUubGluay50YXJnZXQuaW5kZXhPZihyKX07ZS5ub2RlLmxhYmVsLnNvbWUoaCkmJm4ud2FybigiU29tZSBvZiB0aGUgbm9kZXMgYXJlIG5laXRoZXIgc291cmNlcyBub3IgdGFyZ2V0cywgdGhleSB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQuIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MDEsIi4uLy4uL2xpYiI6NzI0LCIuL2F0dHJpYnV0ZXMiOjEwMTYsdGlueWNvbG9yMjo1MzJ9XSwxMDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2Fua2V5IixuLmJhc2VQbG90TW9kdWxlPXQoIi4vYmFzZV9wbG90Iiksbi5jYXRlZ29yaWVzPVsibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4vYXR0cmlidXRlcyI6MTAxNiwiLi9iYXNlX3Bsb3QiOjEwMTcsIi4vY2FsYyI6MTAxOCwiLi9kZWZhdWx0cyI6MTAyMCwiLi9wbG90IjoxMDIyfV0sMTAyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiIiIT09dH1mdW5jdGlvbiBpKHQsZSl7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleT09PWUudHJhY2VJZH0pfWZ1bmN0aW9uIGEodCxlKXtwLnNlbGVjdCh0KS5zZWxlY3QoInBhdGgiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKSxwLnNlbGVjdCh0KS5zZWxlY3QoInJlY3QiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKX1mdW5jdGlvbiBvKHQpe3Auc2VsZWN0KHQpLnNlbGVjdCgidGV4dC5uYW1lIikuc3R5bGUoImZpbGwiLCJibGFjayIpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gdSh0LGUscil7ZSYmciYmaShyLGUpLnNlbGVjdEFsbCgiLnNhbmtleUxpbmsiKS5maWx0ZXIocyhlKSkuY2FsbChoLmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiBjKHQsZSxyKXtlJiZyJiZpKHIsZSkuc2VsZWN0QWxsKCIuc2Fua2V5TGluayIpLmZpbHRlcihzKGUpKS5jYWxsKGYuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIGgodCxlLHIsbil7dmFyIGE9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNCksYSYmaShlLHQpLnNlbGVjdEFsbCgiLnNhbmtleUxpbmsiKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluay5sYWJlbD09PWF9KS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwuNCksciYmaShlLHQpLnNlbGVjdEFsbCgiLnNhbmtleU5vZGUiKS5maWx0ZXIobCh0KSkuY2FsbCh1KX1mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBhPW4uZGF0dW0oKS5saW5rLmxhYmVsO24uc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxhJiZpKGUsdCkuc2VsZWN0QWxsKCIuc2Fua2V5TGluayIpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5rLmxhYmVsPT09YX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSksciYmaShlLHQpLnNlbGVjdEFsbCgiLnNhbmtleU5vZGUiKS5maWx0ZXIobCh0KSkuY2FsbChjKX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5ob3ZlcmxhYmVsfHx7fSxuPXkubmVzdGVkUHJvcGVydHkocixlKS5nZXQoKTtyZXR1cm4hQXJyYXkuaXNBcnJheShuKSYmbn12YXIgcD10KCJkMyIpLG09dCgiLi9yZW5kZXIiKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxnPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx5PXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9wYXBlcixzPXIuX3NpemUsbD1mdW5jdGlvbihlLHIpe3ZhciBuPXIubGluaztuLm9yaWdpbmFsRXZlbnQ9cC5ldmVudCx0Ll9ob3ZlcmRhdGE9W25dLHYuY2xpY2sodCx7dGFyZ2V0OiEwfSl9LHk9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9cC5ldmVudCxwLnNlbGVjdChlKS5jYWxsKGguYmluZCgwLHIsbiwhMCkpLHYuaG92ZXIodCxpLCJzYW5rZXkiKX0sYj1mdW5jdGlvbihlLGkpe3ZhciBzPWkubGluay50cmFjZSxsPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9dS5sZWZ0K3Uud2lkdGgvMixoPXUudG9wK3UuaGVpZ2h0LzIsZj12LmxvbmVIb3Zlcih7eDpjLWwubGVmdCx5OmgtbC50b3AsbmFtZTpwLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLmxpbmsudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5saW5rLmxhYmVsLFsiU291cmNlOiIsaS5saW5rLnNvdXJjZS5sYWJlbF0uam9pbigiICIpLFsiVGFyZ2V0OiIsaS5saW5rLnRhcmdldC5sYWJlbF0uam9pbigiICIpXS5maWx0ZXIobikuam9pbigiPGJyPiIpLGNvbG9yOmQocywiYmdjb2xvciIpfHxnLmFkZE9wYWNpdHkoaS50aW55Q29sb3JIdWUsMSksYm9yZGVyQ29sb3I6ZChzLCJib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6ZChzLCJmb250LmZhbWlseSIpLGZvbnRTaXplOmQocywiZm9udC5zaXplIiksZm9udENvbG9yOmQocywiZm9udC5jb2xvciIpLGlkZWFsQWxpZ246cC5ldmVudC54PGM/InJpZ2h0IjoibGVmdCJ9LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnR9KTthKGYsLjY1KSxvKGYpfSx4PWZ1bmN0aW9uKGUsbixpKXtwLnNlbGVjdChlKS5jYWxsKGYuYmluZCgwLG4saSwhMCkpLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpwLmV2ZW50LHBvaW50czpbbi5saW5rXX0pLHYubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpfSxfPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLm5vZGU7aS5vcmlnaW5hbEV2ZW50PXAuZXZlbnQsdC5faG92ZXJkYXRhPVtpXSxwLnNlbGVjdChlKS5jYWxsKGMscixuKSx2LmNsaWNrKHQse3RhcmdldDohMH0pfSx3PWZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLm5vZGU7aS5vcmlnaW5hbEV2ZW50PXAuZXZlbnQscC5zZWxlY3QoZSkuY2FsbCh1LHIsbiksdi5ob3Zlcih0LGksInNhbmtleSIpfSxNPWZ1bmN0aW9uKGUsaSl7dmFyIHM9aS5ub2RlLnRyYWNlLGw9cC5zZWxlY3QoZSkuc2VsZWN0KCIubm9kZVJlY3QiKSx1PXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYz1sLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWMubGVmdC0yLXUubGVmdCxmPWMucmlnaHQrMi11LmxlZnQsbT1jLnRvcCtjLmhlaWdodC80LXUudG9wLGc9di5sb25lSG92ZXIoe3gwOmgseDE6Zix5Om0sbmFtZTpwLmZvcm1hdChpLnZhbHVlRm9ybWF0KShpLm5vZGUudmFsdWUpK2kudmFsdWVTdWZmaXgsdGV4dDpbaS5ub2RlLmxhYmVsLFsiSW5jb21pbmcgZmxvdyBjb3VudDoiLGkubm9kZS50YXJnZXRMaW5rcy5sZW5ndGhdLmpvaW4oIiAiKSxbIk91dGdvaW5nIGZsb3cgY291bnQ6IixpLm5vZGUuc291cmNlTGlua3MubGVuZ3RoXS5qb2luKCIgIildLmZpbHRlcihuKS5qb2luKCI8YnI+IiksY29sb3I6ZChzLCJiZ2NvbG9yIil8fGkudGlueUNvbG9ySHVlLGJvcmRlckNvbG9yOmQocywiYm9yZGVyY29sb3IiKSxmb250RmFtaWx5OmQocywiZm9udC5mYW1pbHkiKSxmb250U2l6ZTpkKHMsImZvbnQuc2l6ZSIpLGZvbnRDb2xvcjpkKHMsImZvbnQuY29sb3IiKSxpZGVhbEFsaWduOiJsZWZ0In0se2NvbnRhaW5lcjpyLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpyLl9wYXBlci5ub2RlKCksZ2Q6dH0pO2EoZywuODUpLG8oZyl9LGs9ZnVuY3Rpb24oZSxuLGkpe3Auc2VsZWN0KGUpLmNhbGwoYyxuLGkpLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpwLmV2ZW50LHBvaW50czpbbi5ub2RlXX0pLHYubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpfTttKGksZSx7d2lkdGg6cy53LGhlaWdodDpzLmgsbWFyZ2luOnt0OnMudCxyOnMucixiOnMuYixsOnMubH19LHtsaW5rRXZlbnRzOntob3Zlcjp5LGZvbGxvdzpiLHVuaG92ZXI6eCxzZWxlY3Q6bH0sbm9kZUV2ZW50czp7aG92ZXI6dyxmb2xsb3c6TSx1bmhvdmVyOmssc2VsZWN0Ol99fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9meCI6NjQzLCIuLi8uLi9saWIiOjcyNCwiLi9yZW5kZXIiOjEwMjMsZDM6MTIwfV0sMTAyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBpKHQpe3JldHVyblt0XX1mdW5jdGlvbiBhKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIG8odCl7dmFyIGUscj1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxYPXRbZV0ueCx0W2VdLm9yaWdpbmFsWT10W2VdLnksLTE9PT1yLmluZGV4T2YodFtlXS54KSYmci5wdXNoKHRbZV0ueCk7Zm9yKHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSxlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5vcmlnaW5hbExheWVySW5kZXg9ci5pbmRleE9mKHRbZV0ub3JpZ2luYWxYKSx0W2VdLm9yaWdpbmFsTGF5ZXI9dFtlXS5vcmlnaW5hbExheWVySW5kZXgvKHIubGVuZ3RoLTEpfWZ1bmN0aW9uIHModCl7dC5sYXN0RHJhZ2dlZFg9dC54LHQubGFzdERyYWdnZWRZPXQueX1mdW5jdGlvbiBsKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlLm9yaWdpbmFsWD09PXQubm9kZS5vcmlnaW5hbFh9fWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55PXRbZV0ueSt0W2VdLmR5LzJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLnk9dFtlXS55LXRbZV0uZHkvMn1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG4saT1hKGUpLnRyYWNlLG89aS5kb21haW4scz1pLm5vZGUsbD1pLmxpbmssYz1pLmFycmFuZ2VtZW50LGg9ImgiPT09aS5vcmllbnRhdGlvbixmPWkubm9kZS5wYWQsZD1pLm5vZGUudGhpY2tuZXNzLHA9aS5ub2RlLmxpbmUuY29sb3IsbT1pLm5vZGUubGluZS53aWR0aCx2PWkubGluay5saW5lLmNvbG9yLGc9aS5saW5rLmxpbmUud2lkdGgseT1pLnZhbHVlZm9ybWF0LGI9aS52YWx1ZXN1ZmZpeCx4PWkudGV4dGZvbnQsXz10LndpZHRoKihvLnhbMV0tby54WzBdKSx3PXQuaGVpZ2h0KihvLnlbMV0tby55WzBdKSxNPXMubGFiZWwubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BvaW50TnVtYmVyOmUsbGFiZWw6dCxjb2xvcjpCLmlzQXJyYXkocy5jb2xvcik/cy5jb2xvcltlXTpzLmNvbG9yfX0pLGs9bC52YWx1ZS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm57cG9pbnROdW1iZXI6ZSxsYWJlbDpsLmxhYmVsW2VdLGNvbG9yOkIuaXNBcnJheShsLmNvbG9yKT9sLmNvbG9yW2VdOmwuY29sb3Isc291cmNlOmwuc291cmNlW2VdLHRhcmdldDpsLnRhcmdldFtlXSx2YWx1ZTp0fX0pLEE9aigpLnNpemUoaD9bXyx3XTpbdyxfXSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKGYpLm5vZGVzKE0pLmxpbmtzKGspLmxheW91dChELnNhbmtleUl0ZXJhdGlvbnMpLFQ9QS5ub2RlcygpLFM9MDtTPFQubGVuZ3RoO1MrKyluPVRbU10sbi53aWR0aD1fLG4uaGVpZ2h0PXc7cmV0dXJuIHUoTSkse2tleTpyLHRyYWNlOmksZ3VpZDpNYXRoLmZsb29yKDFlMTIqKDErTWF0aC5yYW5kb20oKSkpLGhvcml6b250YWw6aCx3aWR0aDpfLGhlaWdodDp3LG5vZGVQYWQ6Zixub2RlTGluZUNvbG9yOnAsbm9kZUxpbmVXaWR0aDptLGxpbmtMaW5lQ29sb3I6dixsaW5rTGluZVdpZHRoOmcsdmFsdWVGb3JtYXQ6eSx2YWx1ZVN1ZmZpeDpiLHRleHRGb250OngsdHJhbnNsYXRlWDpvLnhbMF0qXyt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtby55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOmg/dzpfLGRyYWdQZXJwZW5kaWN1bGFyOmg/Xzp3LG5vZGVzOk0sbGlua3M6ayxhcnJhbmdlbWVudDpjLHNhbmtleTpBLGZvcmNlTGF5b3V0czp7fSxpbnRlcmFjdGlvblN0YXRlOntkcmFnSW5Qcm9ncmVzczohMSxob3ZlcmVkOiExfX19ZnVuY3Rpb24gZih0LGUscil7dmFyIG49TyhyLmNvbG9yKSxpPXIuc291cmNlLmxhYmVsKyJ8IityLnRhcmdldC5sYWJlbCxhPXRbaV07dFtpXT0odm9pZCAwPT09YT9hOjApKzE7dmFyIG89aSsodm9pZCAwPT09YT8iIjoiX18iK2EpO3JldHVybiByLnRyYWNlPWUudHJhY2Usci5jdXJ2ZU51bWJlcj1lLnRyYWNlLmluZGV4LHtrZXk6byx0cmFjZUlkOmUua2V5LGxpbms6cix0aW55Q29sb3JIdWU6Ui50aW55UkdCKG4pLHRpbnlDb2xvckFscGhhOm4uZ2V0QWxwaGEoKSxsaW5rTGluZUNvbG9yOmUubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOmUubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDplLnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OmUudmFsdWVTdWZmaXgsc2Fua2V5OmUuc2Fua2V5LGludGVyYWN0aW9uU3RhdGU6ZS5pbnRlcmFjdGlvblN0YXRlfX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1PKHIuY29sb3IpLGk9RC5ub2RlUGFkQWNyb3NzLGE9ZS5ub2RlUGFkLzIsbz1yLmR4Ky41LHM9ci5keS0uNSxsPXIubGFiZWwsdT10W2xdO3RbbF09KHZvaWQgMD09PXU/dTowKSsxO3ZhciBjPWwrKHZvaWQgMD09PXU/IiI6Il9fIit1KTtyZXR1cm4gci50cmFjZT1lLnRyYWNlLHIuY3VydmVOdW1iZXI9ZS50cmFjZS5pbmRleCx7a2V5OmMsdHJhY2VJZDplLmtleSxub2RlOnIsbm9kZVBhZDplLm5vZGVQYWQsbm9kZUxpbmVDb2xvcjplLm5vZGVMaW5lQ29sb3Isbm9kZUxpbmVXaWR0aDplLm5vZGVMaW5lV2lkdGgsdGV4dEZvbnQ6ZS50ZXh0Rm9udCxzaXplOmUuaG9yaXpvbnRhbD9lLmhlaWdodDplLndpZHRoLHZpc2libGVXaWR0aDpNYXRoLmNlaWwobyksdmlzaWJsZUhlaWdodDpNYXRoLmNlaWwocyksem9uZVg6LWksem9uZVk6LWEsem9uZVdpZHRoOm8rMippLHpvbmVIZWlnaHQ6cysyKmEsbGFiZWxZOmUuaG9yaXpvbnRhbD9yLmR5LzIrMTpyLmR4LzIrMSxsZWZ0OjE9PT1yLm9yaWdpbmFsTGF5ZXIsc2l6ZUFjcm9zczplLndpZHRoLGZvcmNlTGF5b3V0czplLmZvcmNlTGF5b3V0cyxob3Jpem9udGFsOmUuaG9yaXpvbnRhbCxkYXJrQmFja2dyb3VuZDpuLmdldEJyaWdodG5lc3MoKTw9MTI4LHRpbnlDb2xvckh1ZTpSLnRpbnlSR0IobiksdGlueUNvbG9yQWxwaGE6bi5nZXRBbHBoYSgpLHZhbHVlRm9ybWF0OmUudmFsdWVGb3JtYXQsdmFsdWVTdWZmaXg6ZS52YWx1ZVN1ZmZpeCxzYW5rZXk6ZS5zYW5rZXksYXJyYW5nZW1lbnQ6ZS5hcnJhbmdlbWVudCx1bmlxdWVOb2RlTGFiZWxQYXRoSWQ6W2UuZ3VpZCxlLmtleSxjXS5qb2luKCIgIiksaW50ZXJhY3Rpb25TdGF0ZTplLmludGVyYWN0aW9uU3RhdGV9fWZ1bmN0aW9uIHAodCl7UC5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX1mdW5jdGlvbiBtKHQpe3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQubm9kZS54LS41KSsiLCAiKyh0Lm5vZGUueS10Lm5vZGUuZHkvMisuNSkrIikifSl9ZnVuY3Rpb24gdih0KXt2YXIgZT10LnNhbmtleS5ub2RlcygpO2MoZSk7dmFyIHI9dC5zYW5rZXkubGluaygpKHQubGluayk7cmV0dXJuIHUoZSkscn1mdW5jdGlvbiBnKHQpe1Auc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJvcHRpbWl6ZVNwZWVkIiksdC5jYWxsKG0pfWZ1bmN0aW9uIHkodCxlKXt0LmNhbGwoZyksZS5hdHRyKCJkIix2KX1mdW5jdGlvbiBiKHQpe3QuYXR0cigid2lkdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVXaWR0aH0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZUhlaWdodH0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuIHQubGluay5keT4xfHx0LmxpbmtMaW5lV2lkdGg+MH1mdW5jdGlvbiBfKHQpe3JldHVybiJ0cmFuc2xhdGUoIit0LnRyYW5zbGF0ZVgrIiwiK3QudHJhbnNsYXRlWSsiKSIrKHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkiKX1mdW5jdGlvbiB3KHQpe3JldHVybiJ0cmFuc2xhdGUoIisodC5ob3Jpem9udGFsPzA6dC5sYWJlbFkpKyIgIisodC5ob3Jpem9udGFsP3QubGFiZWxZOjApKyIpIn1mdW5jdGlvbiBNKHQpe3JldHVybiBQLnN2Zy5saW5lKCkoW1t0Lmhvcml6b250YWw/dC5sZWZ0Py10LnNpemVBY3Jvc3M6dC52aXNpYmxlV2lkdGgrRC5ub2RlVGV4dE9mZnNldEhvcml6b250YWw6RC5ub2RlVGV4dE9mZnNldEhvcml6b250YWwsMF0sW3QuaG9yaXpvbnRhbD90LmxlZnQ/LUQubm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOnQuc2l6ZUFjcm9zczp0LnZpc2libGVIZWlnaHQtRC5ub2RlVGV4dE9mZnNldEhvcml6b250YWwsMF1dKX1mdW5jdGlvbiBrKHQpe3JldHVybiB0Lmhvcml6b250YWw/Im1hdHJpeCgxIDAgMCAxIDAgMCkiOiJtYXRyaXgoMCAxIDEgMCAwIDApIn1mdW5jdGlvbiBBKHQpe3JldHVybiB0Lmhvcml6b250YWw/InNjYWxlKDEgMSkiOiJzY2FsZSgtMSAxKSJ9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gdC5kYXJrQmFja2dyb3VuZCYmIXQuaG9yaXpvbnRhbD8icmdiKDI1NSwyNTUsMjU1KSI6InJnYigwLDAsMCkifWZ1bmN0aW9uIFModCl7cmV0dXJuIHQuaG9yaXpvbnRhbCYmdC5sZWZ0PyIxMDAlIjoiMCUifWZ1bmN0aW9uIEUodCxlLHIpe3Qub24oIi5iYXNpYyIsbnVsbCkub24oIm1vdXNlb3Zlci5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHwoci5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkub24oIm1vdXNlbW92ZS5iYXNpYyIsZnVuY3Rpb24odCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHwoci5mb2xsb3codGhpcyx0KSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KS5vbigibW91c2VvdXQuYmFzaWMiLGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8KHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpfSkub24oImNsaWNrLmJhc2ljIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpLHQuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8ci5zZWxlY3QodGhpcyx0LGUpfSl9ZnVuY3Rpb24gTCh0LGUscil7dmFyIG49UC5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGV9KS5vbigiZHJhZ3N0YXJ0IixmdW5jdGlvbihuKXtpZigiZml4ZWQiIT09bi5hcnJhbmdlbWVudCYmKHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKSxuLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9bi5ub2RlLHMobi5ub2RlKSxuLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZCYmKHIubm9kZUV2ZW50cy51bmhvdmVyLmFwcGx5KDAsbi5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQpLG4uaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkPSExKSwic25hcCI9PT1uLmFycmFuZ2VtZW50KSl7dmFyIGk9bi50cmFjZUlkKyJ8IitNYXRoLmZsb29yKG4ubm9kZS5vcmlnaW5hbFgpO24uZm9yY2VMYXlvdXRzW2ldP24uZm9yY2VMYXlvdXRzW2ldLmFscGhhKDEpOkModCxpLG4pLHoodCxlLG4saSl9fSkub24oImRyYWciLGZ1bmN0aW9uKHIpe2lmKCJmaXhlZCIhPT1yLmFycmFuZ2VtZW50KXt2YXIgbj1QLmV2ZW50LngsaT1QLmV2ZW50Lnk7InNuYXAiPT09ci5hcnJhbmdlbWVudD8oci5ub2RlLng9bixyLm5vZGUueT1pKTooImZyZWVmb3JtIj09PXIuYXJyYW5nZW1lbnQmJihyLm5vZGUueD1uKSxyLm5vZGUueT1NYXRoLm1heChyLm5vZGUuZHkvMixNYXRoLm1pbihyLnNpemUtci5ub2RlLmR5LzIsaSkpKSxzKHIubm9kZSksInNuYXAiIT09ci5hcnJhbmdlbWVudCYmKHIuc2Fua2V5LnJlbGF5b3V0KCkseSh0LmZpbHRlcihsKHIpKSxlKSx0LmNhbGwocCkpfX0pLm9uKCJkcmFnZW5kIixmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M9ITF9KTt0Lm9uKCIuZHJhZyIsbnVsbCkuY2FsbChuKX1mdW5jdGlvbiBDKHQsZSxyKXt2YXIgbj1yLnNhbmtleS5ub2RlcygpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbFg9PT1yLm5vZGUub3JpZ2luYWxYfSk7ci5mb3JjZUxheW91dHNbZV09Ti5mb3JjZVNpbXVsYXRpb24obikuYWxwaGFEZWNheSgwKS5mb3JjZSgiY29sbGlkZSIsTi5mb3JjZUNvbGxpZGUoKS5yYWRpdXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkvMityLm5vZGVQYWQvMn0pLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMoRC5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixJKHQsZSxuLHIpKS5zdG9wKCl9ZnVuY3Rpb24geih0LGUscixuKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIGkoKXtmb3IodmFyIGE9MDthPEQuZm9yY2VUaWNrc1BlckZyYW1lO2ErKylyLmZvcmNlTGF5b3V0c1tuXS50aWNrKCk7ci5zYW5rZXkucmVsYXlvdXQoKSx5KHQuZmlsdGVyKGwocikpLGUpLHIuZm9yY2VMYXlvdXRzW25dLmFscGhhKCk+MCYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX0pfWZ1bmN0aW9uIEkodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdO289PT1uLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3M/KG8ueD1vLmxhc3REcmFnZ2VkWCxvLnk9by5sYXN0RHJhZ2dlZFkpOihvLnZ4PShvLm9yaWdpbmFsWC1vLngpL0QuZm9yY2VUaWNrc1BlckZyYW1lLG8ueT1NYXRoLm1pbihuLnNpemUtby5keS8yLE1hdGgubWF4KG8uZHkvMixvLnkpKSksaT1NYXRoLm1heChpLE1hdGguYWJzKG8udngpLE1hdGguYWJzKG8udnkpKX0hbi5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzJiZpPC4xJiZuLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgpPjAmJihuLmZvcmNlTGF5b3V0c1tlXS5hbHBoYSgwKSx3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3QuY2FsbChwKX0sMzApKX19dmFyIEQ9dCgiLi9jb25zdGFudHMiKSxQPXQoImQzIiksTz10KCJ0aW55Y29sb3IyIiksUj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksRj10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxqPXQoIkBwbG90bHkvZDMtc2Fua2V5Iikuc2Fua2V5LE49dCgiZDMtZm9yY2UiKSxCPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXt2YXIgbD10LnNlbGVjdEFsbCgiLnNhbmtleSIpLmRhdGEoZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGEodCkudHJhY2UudmlzaWJsZX0pLm1hcChoLmJpbmQobnVsbCxyKSksbik7bC5leGl0KCkucmVtb3ZlKCksbC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNhbmtleSIsITApLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYXV0byIpLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLGwudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pO3ZhciB1PWwuc2VsZWN0QWxsKCIuc2Fua2V5TGlua3MiKS5kYXRhKGksbik7dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNhbmtleUxpbmtzIiwhMCkuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGM9dS5zZWxlY3RBbGwoIi5zYW5rZXlMaW5rIikuZGF0YShmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gdC5zYW5rZXkubGlua3MoKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWV9KS5tYXAoZi5iaW5kKG51bGwsZSx0KSl9LG4pO2MuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzYW5rZXlMaW5rIiwhMCkuYXR0cigiZCIsdikuY2FsbChFLGwscy5saW5rRXZlbnRzKSxjLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKHQpe3JldHVybiB4KHQpP1IudGlueVJHQihPKHQubGlua0xpbmVDb2xvcikpOnQudGlueUNvbG9ySHVlfSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4geCh0KT9SLm9wYWNpdHkodC5saW5rTGluZUNvbG9yKTp0LnRpbnlDb2xvckFscGhhfSkuc3R5bGUoInN0cm9rZS13aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHgodCk/dC5saW5rTGluZVdpZHRoOjF9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSxjLnRyYW5zaXRpb24oKS5lYXNlKEQuZWFzZSkuZHVyYXRpb24oRC5kdXJhdGlvbikuYXR0cigiZCIsdiksYy5leGl0KCkudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk7dmFyIHA9bC5zZWxlY3RBbGwoIi5zYW5rZXlOb2RlU2V0IikuZGF0YShpLG4pO3AuZW50ZXIoKS5hcHBlbmQoImciKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIikuY2xhc3NlZCgic2Fua2V5Tm9kZVNldCIsITApLHAuc3R5bGUoImN1cnNvciIsZnVuY3Rpb24odCl7c3dpdGNoKHQuYXJyYW5nZW1lbnQpe2Nhc2UiZml4ZWQiOnJldHVybiJkZWZhdWx0IjtjYXNlInBlcnBlbmRpY3VsYXIiOnJldHVybiJucy1yZXNpemUiO2RlZmF1bHQ6cmV0dXJuIm1vdmUifX0pO3ZhciBnPXAuc2VsZWN0QWxsKCIuc2Fua2V5Tm9kZSIpLmRhdGEoZnVuY3Rpb24odCl7dmFyIGU9dC5zYW5rZXkubm9kZXMoKSxyPXt9O3JldHVybiBvKGUpLGUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkubWFwKGQuYmluZChudWxsLHIsdCkpfSxuKTtnLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2Fua2V5Tm9kZSIsITApLmNhbGwobSkuY2FsbChFLGwscy5ub2RlRXZlbnRzKSxnLmNhbGwoTCxjLHMpLGcudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5jYWxsKG0pLGcuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKEQuZWFzZSkuZHVyYXRpb24oRC5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciB5PWcuc2VsZWN0QWxsKCIubm9kZVJlY3QiKS5kYXRhKGkpO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJub2RlUmVjdCIsITApLmNhbGwoYikseS5zdHlsZSgic3Ryb2tlLXdpZHRoIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTGluZVdpZHRofSkuc3R5bGUoInN0cm9rZSIsZnVuY3Rpb24odCl7cmV0dXJuIFIudGlueVJHQihPKHQubm9kZUxpbmVDb2xvcikpfSkuc3R5bGUoInN0cm9rZS1vcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gUi5vcGFjaXR5KHQubm9kZUxpbmVDb2xvcil9KS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9ySHVlfSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSx5LnRyYW5zaXRpb24oKS5lYXNlKEQuZWFzZSkuZHVyYXRpb24oRC5kdXJhdGlvbikuY2FsbChiKTt2YXIgQz1nLnNlbGVjdEFsbCgiLm5vZGVDYXB0dXJlIikuZGF0YShpKTtDLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgibm9kZUNhcHR1cmUiLCEwKS5zdHlsZSgiZmlsbC1vcGFjaXR5IiwwKSxDLmF0dHIoIngiLGZ1bmN0aW9uKHQpe3JldHVybiB0LnpvbmVYfSkuYXR0cigieSIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVl9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24odCl7cmV0dXJuIHQuem9uZVdpZHRofSkuYXR0cigiaGVpZ2h0IixmdW5jdGlvbih0KXtyZXR1cm4gdC56b25lSGVpZ2h0fSk7dmFyIHo9Zy5zZWxlY3RBbGwoIi5ub2RlQ2VudGVyZWQiKS5kYXRhKGkpO3ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJub2RlQ2VudGVyZWQiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLHcpLHoudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLHcpO3ZhciBJPXouc2VsZWN0QWxsKCIubm9kZUxhYmVsR3VpZGUiKS5kYXRhKGkpO0kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJub2RlTGFiZWxHdWlkZSIsITApLmF0dHIoImlkIixmdW5jdGlvbih0KXtyZXR1cm4gdC51bmlxdWVOb2RlTGFiZWxQYXRoSWR9KS5hdHRyKCJkIixNKS5hdHRyKCJ0cmFuc2Zvcm0iLGspLEkudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJkIixNKS5hdHRyKCJ0cmFuc2Zvcm0iLGspO3ZhciBQPXouc2VsZWN0QWxsKCIubm9kZUxhYmVsIikuZGF0YShpKTtQLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgibm9kZUxhYmVsIiwhMCkuYXR0cigidHJhbnNmb3JtIixBKS5zdHlsZSgidXNlci1zZWxlY3QiLCJub25lIikuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKS5zdHlsZSgiZmlsbCIsImJsYWNrIiksUC5zdHlsZSgidGV4dC1zaGFkb3ciLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWw/Ii0xcHggMXB4IDFweCAjZmZmLCAxcHggMXB4IDFweCAjZmZmLCAxcHggLTFweCAxcHggI2ZmZiwgLTFweCAtMXB4IDFweCAjZmZmIjoibm9uZSJ9KS5lYWNoKGZ1bmN0aW9uKHQpe0YuZm9udChQLHQudGV4dEZvbnQpfSksUC50cmFuc2l0aW9uKCkuZWFzZShELmVhc2UpLmR1cmF0aW9uKEQuZHVyYXRpb24pLmF0dHIoInRyYW5zZm9ybSIsQSk7dmFyIGo9UC5zZWxlY3RBbGwoIi5ub2RlTGFiZWxUZXh0UGF0aCIpLmRhdGEoaSk7ai5lbnRlcigpLmFwcGVuZCgidGV4dFBhdGgiKS5jbGFzc2VkKCJub2RlTGFiZWxUZXh0UGF0aCIsITApLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInhsaW5rOmhyZWYiLGZ1bmN0aW9uKHQpe3JldHVybiIjIit0LnVuaXF1ZU5vZGVMYWJlbFBhdGhJZH0pLmF0dHIoInN0YXJ0T2Zmc2V0IixTKS5zdHlsZSgiZmlsbCIsVCksai50ZXh0KGZ1bmN0aW9uKHQpe3JldHVybiB0Lmhvcml6b250YWx8fHQubm9kZS5keT41P3Qubm9kZS5sYWJlbDoiIn0pLmF0dHIoInRleHQtYW5jaG9yIixmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/ImVuZCI6InN0YXJ0In0pLGoudHJhbnNpdGlvbigpLmVhc2UoRC5lYXNlKS5kdXJhdGlvbihELmR1cmF0aW9uKS5hdHRyKCJzdGFydE9mZnNldCIsUykuc3R5bGUoImZpbGwiLFQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9saWIiOjcyNCwiLi9jb25zdGFudHMiOjEwMTksIkBwbG90bHkvZDMtc2Fua2V5IjozNixkMzoxMjAsImQzLWZvcmNlIjoxMTYsdGlueWNvbG9yMjo1MzJ9XSwxMDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iiksbi5tZXJnZUFycmF5KGUuY3VzdG9tZGF0YSx0LCJkYXRhIiksbi5tZXJnZUFycmF5KGUudGV4dHBvc2l0aW9uLHQsInRwIiksZS50ZXh0Zm9udCYmKG4ubWVyZ2VBcnJheShlLnRleHRmb250LnNpemUsdCwidHMiKSxuLm1lcmdlQXJyYXkoZS50ZXh0Zm9udC5jb2xvcix0LCJ0YyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmZhbWlseSx0LCJ0ZiIpKTt2YXIgaT1lLm1hcmtlcjtpZihpKXtuLm1lcmdlQXJyYXkoaS5zaXplLHQsIm1zIiksbi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLnN5bWJvbCx0LCJteCIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2kubGluZSYmKG4ubWVyZ2VBcnJheShhLmNvbG9yLHQsIm1sYyIpLG4ubWVyZ2VBcnJheShhLndpZHRoLHQsIm1sdyIpKTt2YXIgbz1pLmdyYWRpZW50O28mJiJub25lIiE9PW8udHlwZSYmKG4ubWVyZ2VBcnJheShvLnR5cGUsdCwibWd0Iiksbi5tZXJnZUFycmF5KG8uY29sb3IsdCwibWdjIikpfX19LHsiLi4vLi4vbGliIjo3MjR9XSwxMDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9KHQoIi4vY29uc3RhbnRzIiksdCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQpO2UuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MH0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTA6e3ZhbFR5cGU6ImFueSIsZGZsdDowfSxkeTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjF9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwfSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdfSxob3Zlcm9uOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJwb2ludHMiLCJmaWxscyJdfSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjJ9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLjMsZGZsdDoxfSxkYXNoOm8sc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSxjb25uZWN0Z2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiZG9wbG90In0sZmlsbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9uZSIsInRvemVyb3kiLCJ0b3plcm94IiwidG9uZXh0eSIsInRvbmV4dHgiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LG1hcmtlcjpsKHt9LHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnN5bWJvbExpc3QsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGFycmF5T2s6ITB9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxzaXplbWluOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRpYW1ldGVyIiwiYXJlYSJdLGRmbHQ6ImRpYW1ldGVyIn0sc2hvd3NjYWxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxjb2xvcmJhcjphLGxpbmU6bCh7fSx7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsYXJyYXlPazohMH19LG4oIm1hcmtlci5saW5lIikpLGdyYWRpZW50Ont0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYWwiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJub25lIl0sYXJyYXlPazohMCxkZmx0OiJub25lIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfX19LG4oIm1hcmtlciIpKSx0ZXh0cG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBsZWZ0IiwibWlkZGxlIGNlbnRlciIsIm1pZGRsZSByaWdodCIsImJvdHRvbSBsZWZ0IiwiYm90dG9tIGNlbnRlciIsImJvdHRvbSByaWdodCJdLGRmbHQ6Im1pZGRsZSBjZW50ZXIiLGFycmF5T2s6ITB9LHRleHRmb250OntmYW1pbHk6e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITAsYXJyYXlPazohMH0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MSxhcnJheU9rOiEwfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITB9fSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sdDp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGVycm9yX3k6aSxlcnJvcl94Oml9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvYXR0cmlidXRlcyI6NjAzLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYyNSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvYXR0cmlidXRlcyI6NjI4LCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4vY29uc3RhbnRzIjoxMDMwfV0sMTAyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sbz10KCIuL3N1YnR5cGVzIikscz10KCIuL2NvbG9yc2NhbGVfY2FsYyIpLGw9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGMsaD1pLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZj1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksZD1oLm1ha2VDYWxjZGF0YShlLCJ4IikscD1mLm1ha2VDYWxjZGF0YShlLCJ5IiksbT1NYXRoLm1pbihkLmxlbmd0aCxwLmxlbmd0aCk7aC5fbWluRHRpY2s9MCxmLl9taW5EdGljaz0wLGQubGVuZ3RoPm0mJmQuc3BsaWNlKG0sZC5sZW5ndGgtbSkscC5sZW5ndGg+bSYmcC5zcGxpY2UobSxwLmxlbmd0aC1tKTt2YXIgdj17cGFkZGVkOiEwfSxnPXtwYWRkZWQ6ITB9O2lmKG8uaGFzTWFya2VycyhlKSl7aWYocj1lLm1hcmtlcix1PXIuc2l6ZSxBcnJheS5pc0FycmF5KHUpKXt2YXIgeT17dHlwZToibGluZWFyIn07aS5zZXRDb252ZXJ0KHkpLHU9eS5tYWtlQ2FsY2RhdGEoZS5tYXJrZXIsInNpemUiKSx1Lmxlbmd0aD5tJiZ1LnNwbGljZShtLHUubGVuZ3RoLW0pfXZhciBiLHg9MS42KihlLm1hcmtlci5zaXplcmVmfHwxKTtiPSJhcmVhIj09PWUubWFya2VyLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQoKHR8fDApL3gpLDMpfTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoKHR8fDApL3gsMyl9LHYucHBhZD1nLnBwYWQ9QXJyYXkuaXNBcnJheSh1KT91Lm1hcChiKTpiKHUpfXMoZSksISgidG96ZXJveCI9PT1lLmZpbGx8fCJ0b25leHR4Ij09PWUuZmlsbCYmdC5maXJzdHNjYXR0ZXIpfHxkWzBdPT09ZFttLTFdJiZwWzBdPT09cFttLTFdP2UuZXJyb3JfeS52aXNpYmxlfHwtMT09PVsidG9uZXh0eSIsInRvemVyb3kiXS5pbmRleE9mKGUuZmlsbCkmJihvLmhhc01hcmtlcnMoZSl8fG8uaGFzVGV4dChlKSl8fCh2LnBhZGRlZD0hMSx2LnBwYWQ9MCk6di50b3plcm89ITAsISgidG96ZXJveSI9PT1lLmZpbGx8fCJ0b25leHR5Ij09PWUuZmlsbCYmdC5maXJzdHNjYXR0ZXIpfHxkWzBdPT09ZFttLTFdJiZwWzBdPT09cFttLTFdPy0xIT09WyJ0b25leHR4IiwidG96ZXJveCJdLmluZGV4T2YoZS5maWxsKSYmKGcucGFkZGVkPSExKTpnLnRvemVybz0hMCxpLmV4cGFuZChoLGQsdiksaS5leHBhbmQoZixwLGcpO3ZhciBfPW5ldyBBcnJheShtKTtmb3IoYz0wO2M8bTtjKyspX1tjXT1uKGRbY10pJiZuKHBbY10pP3t4OmRbY10seTpwW2NdfTp7eDphLHk6YX0sZS5pZHMmJihfW2NdLmlkPVN0cmluZyhlLmlkc1tjXSkpO3JldHVybiBsKF8sZSksdC5maXJzdHNjYXR0ZXI9ITEsX319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi9jb2xvcnNjYWxlX2NhbGMiOjEwMjksIi4vc3VidHlwZXMiOjEwNDUsImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtpZigic2NhdHRlciI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZigibm9uZSIhPT1uJiYidG9zZWxmIiE9PW4mJihyLm9wYWNpdHk9dm9pZCAwLCJ0b25leHR5Ij09PW58fCJ0b25leHR4Ij09PW4pKWZvcih2YXIgaT1lLTE7aT49MDtpLS0pe3ZhciBhPXRbaV07aWYoInNjYXR0ZXIiPT09YS50eXBlJiZhLnhheGlzPT09ci54YXhpcyYmYS55YXhpcz09PXIueWF4aXMpe2Eub3BhY2l0eT12b2lkIDA7YnJlYWt9fX19fX0se31dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxsPXIubWFya2VyLHU9ImNiIityLnVpZDtpZih0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCIuIit1KS5yZW1vdmUoKSx2b2lkIDA9PT1sfHwhbC5zaG93c2NhbGUpcmV0dXJuIHZvaWQgYS5hdXRvTWFyZ2luKHQsdSk7dmFyIGM9bC5jb2xvcixoPWwuY21pbixmPWwuY21heDtuKGgpfHwoaD1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxjKSksbihmKXx8KGY9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsYykpO3ZhciBkPWVbMF0udC5jYj1zKHQsdSkscD1vLm1ha2VDb2xvclNjYWxlRnVuYyhvLmV4dHJhY3RTY2FsZShsLmNvbG9yc2NhbGUsaCxmKSx7bm9OdW1lcmljQ2hlY2s6ITB9KTtkLmZpbGxjb2xvcihwKS5maWxsbGV2ZWxzKHtzdGFydDpoLGVuZDpmLHNpemU6KGYtaCkvMjU0fSkub3B0aW9ucyhsLmNvbG9yYmFyKSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2RyYXciOjYwNSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2MTYsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9wbG90cy9wbG90cyI6ODI3LCJmYXN0LWlzbnVtZXJpYyI6MTI5fV0sMTAyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2EuaGFzTGluZXModCkmJm4odCwibGluZSIpJiZpKHQsdC5saW5lLmNvbG9yLCJsaW5lIiwiYyIpLGEuaGFzTWFya2Vycyh0KSYmKG4odCwibWFya2VyIikmJmkodCx0Lm1hcmtlci5jb2xvciwibWFya2VyIiwiYyIpLG4odCwibWFya2VyLmxpbmUiKSYmaSh0LHQubWFya2VyLmxpbmUuY29sb3IsIm1hcmtlci5saW5lIiwiYyIpKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjYwOCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo2MTUsIi4vc3VidHlwZXMiOjEwNDV9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UFRTX0xJTkVTT05MWToyMH19LHt9XSwxMDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuL2NvbnN0YW50cyIpLG89dCgiLi9zdWJ0eXBlcyIpLHM9dCgiLi94eV9kZWZhdWx0cyIpLGw9dCgiLi9tYXJrZXJfZGVmYXVsdHMiKSx1PXQoIi4vbGluZV9kZWZhdWx0cyIpLGM9dCgiLi9saW5lX3NoYXBlX2RlZmF1bHRzIiksaD10KCIuL3RleHRfZGVmYXVsdHMiKSxmPXQoIi4vZmlsbGNvbG9yX2RlZmF1bHRzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixwKXtmdW5jdGlvbiBtKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIHY9cyh0LGUscCxtKSxnPXY8YS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiO2lmKCF2KXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bSgidGV4dCIpLG0oImhvdmVydGV4dCIpLG0oIm1vZGUiLGcpLG8uaGFzTGluZXMoZSkmJih1KHQsZSxyLHAsbSksYyh0LGUsbSksbSgiY29ubmVjdGdhcHMiKSxtKCJsaW5lLnNpbXBsaWZ5IikpLG8uaGFzTWFya2VycyhlKSYmbCh0LGUscixwLG0se2dyYWRpZW50OiEwfSksby5oYXNUZXh0KGUpJiZoKHQsZSxwLG0pO3ZhciB5PVtdOyhvLmhhc01hcmtlcnMoZSl8fG8uaGFzVGV4dChlKSkmJihtKCJtYXJrZXIubWF4ZGlzcGxheWVkIikseS5wdXNoKCJwb2ludHMiKSksbSgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGYodCxlLHIsbSksby5oYXNMaW5lcyhlKXx8Yyh0LGUsbSkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8eS5wdXNoKCJmaWxscyIpLG0oImhvdmVyb24iLHkuam9pbigiKyIpfHwicG9pbnRzIiksZCh0LGUscix7YXhpczoieSJ9KSxkKHQsZSxyLHtheGlzOiJ4Iixpbmhlcml0OiJ5In0pLG0oImNsaXBvbmF4aXMiKX19LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4vYXR0cmlidXRlcyI6MTAyNSwiLi9jb25zdGFudHMiOjEwMzAsIi4vZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuL2xpbmVfZGVmYXVsdHMiOjEwMzYsIi4vbGluZV9zaGFwZV9kZWZhdWx0cyI6MTAzOCwiLi9tYXJrZXJfZGVmYXVsdHMiOjEwNDEsIi4vc3VidHlwZXMiOjEwNDUsIi4vdGV4dF9kZWZhdWx0cyI6MTA0NiwiLi94eV9kZWZhdWx0cyI6MTA0N31dLDEwMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT0hMTtpZihlLm1hcmtlcil7dmFyIG89ZS5tYXJrZXIuY29sb3Iscz0oZS5tYXJrZXIubGluZXx8e30pLmNvbG9yO28mJiFBcnJheS5pc0FycmF5KG8pP2E9bzpzJiYhQXJyYXkuaXNBcnJheShzKSYmKGE9cyl9aSgiZmlsbGNvbG9yIixuLmFkZE9wYWNpdHkoKGUubGluZXx8e30pLmNvbG9yfHxhfHxyLC41KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMn1dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGE7aWYoImxpbmVzIj09PXQubW9kZSlyZXR1cm4gcj10LmxpbmUuY29sb3IsciYmbi5vcGFjaXR5KHIpP3I6dC5maWxsY29sb3I7aWYoIm5vbmUiPT09dC5tb2RlKXJldHVybiB0LmZpbGw/dC5maWxsY29sb3I6IiI7dmFyIG89ZS5tY2N8fCh0Lm1hcmtlcnx8e30pLmNvbG9yLHM9ZS5tbGNjfHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLmNvbG9yO3JldHVybiBhPW8mJm4ub3BhY2l0eShvKT9vOnMmJm4ub3BhY2l0eShzKSYmKGUubWx3fHwoKHQubWFya2VyfHx7fSkubGluZXx8e30pLndpZHRoKT9zOiIiLGE/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcixyJiZuLm9wYWNpdHkocikmJmkuaGFzTGluZXModCkmJnQubGluZS53aWR0aD9yOnQuZmlsbGNvbG9yKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuL3N1YnR5cGVzIjoxMDQ1fV0sMTAzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIiksbz10KCIuL2dldF90cmFjZV9jb2xvciIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9aS5jb25zdGFudHMuTUFYRElTVDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7dmFyIGM9dC5jZCxoPWNbMF0udHJhY2UsZj10LnhhLGQ9dC55YSxwPWYuYzJwKGUpLG09ZC5jMnAociksdj1bcCxtXSxnPWguaG92ZXJvbnx8IiI7aWYoLTEhPT1nLmluZGV4T2YoInBvaW50cyIpKXt2YXIgeT1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZi5jMnAodC54KS1wKS1lLDEtMy9lKX0sYj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZC5jMnAodC55KS1tKS1lLDEtMy9lKX0seD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKSxyPWYuYzJwKHQueCktcCxuPWQuYzJwKHQueSktbTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHIqcituKm4pLWUsMS0zL2UpfSxfPWkuZ2V0RGlzdGFuY2VGdW5jdGlvbih1LHksYix4KQo7aWYoaS5nZXRDbG9zZXN0KGMsXyx0KSwhMSE9PXQuaW5kZXgpe3ZhciB3PWNbdC5pbmRleF0sTT1mLmMycCh3LngsITApLGs9ZC5jMnAody55LCEwKSxBPXcubXJjfHwxO3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhoLHcpLHgwOk0tQSx4MTpNK0EseExhYmVsVmFsOncueCx5MDprLUEseTE6aytBLHlMYWJlbFZhbDp3Lnl9KSx3Lmh0eD90LnRleHQ9dy5odHg6aC5ob3ZlcnRleHQ/dC50ZXh0PWguaG92ZXJ0ZXh0OncudHg/dC50ZXh0PXcudHg6aC50ZXh0JiYodC50ZXh0PWgudGV4dCksYS5ob3ZlckluZm8odyxoLHQpLFt0XX19aWYoLTEhPT1nLmluZGV4T2YoImZpbGxzIikmJmguX3BvbHlnb25zKXt2YXIgVCxTLEUsTCxDLHosSSxELFAsTz1oLl9wb2x5Z29ucyxSPVtdLEY9ITEsaj0xLzAsTj0tMS8wLEI9MS8wLFU9LTEvMDtmb3IoVD0wO1Q8Ty5sZW5ndGg7VCsrKUU9T1tUXSxFLmNvbnRhaW5zKHYpJiYoRj0hRixSLnB1c2goRSksQj1NYXRoLm1pbihCLEUueW1pbiksVT1NYXRoLm1heChVLEUueW1heCkpO2lmKEYpe0I9TWF0aC5tYXgoQiwwKSxVPU1hdGgubWluKFUsZC5fbGVuZ3RoKTt2YXIgVj0oQitVKS8yO2ZvcihUPTA7VDxSLmxlbmd0aDtUKyspZm9yKEw9UltUXS5wdHMsUz0xO1M8TC5sZW5ndGg7UysrKUQ9TFtTLTFdWzFdLFA9TFtTXVsxXSxEPlYhPVA+PVYmJih6PUxbUy0xXVswXSxJPUxbU11bMF0sQz16KyhJLXopKihWLUQpLyhQLUQpLGo9TWF0aC5taW4oaixDKSxOPU1hdGgubWF4KE4sQykpO2o9TWF0aC5tYXgoaiwwKSxOPU1hdGgubWluKE4sZi5fbGVuZ3RoKTt2YXIgSD1zLmRlZmF1bHRMaW5lO3JldHVybiBzLm9wYWNpdHkoaC5maWxsY29sb3IpP0g9aC5maWxsY29sb3I6cy5vcGFjaXR5KChoLmxpbmV8fHt9KS5jb2xvcikmJihIPWgubGluZS5jb2xvciksbi5leHRlbmRGbGF0KHQse2Rpc3RhbmNlOmwrMTAseDA6aix4MTpOLHkwOlYseTE6Vixjb2xvcjpIfSksZGVsZXRlIHQuaW5kZXgsaC50ZXh0JiYhQXJyYXkuaXNBcnJheShoLnRleHQpP3QudGV4dD1TdHJpbmcoaC50ZXh0KTp0LnRleHQ9aC5uYW1lLFt0XX19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vbGliIjo3MjQsIi4vZ2V0X3RyYWNlX2NvbG9yIjoxMDMzfV0sMTAzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fSxpPXQoIi4vc3VidHlwZXMiKTtuLmhhc0xpbmVzPWkuaGFzTGluZXMsbi5oYXNNYXJrZXJzPWkuaGFzTWFya2VycyxuLmhhc1RleHQ9aS5oYXNUZXh0LG4uaXNCdWJibGU9aS5pc0J1YmJsZSxuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jbGVhbkRhdGE9dCgiLi9jbGVhbl9kYXRhIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4uYXJyYXlzVG9DYWxjZGF0YT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLnN0eWxlPXQoIi4vc3R5bGUiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4uYW5pbWF0YWJsZT0hMCxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXIiLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksbi5jYXRlZ29yaWVzPVsiY2FydGVzaWFuIiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo3NzQsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDI0LCIuL2F0dHJpYnV0ZXMiOjEwMjUsIi4vY2FsYyI6MTAyNiwiLi9jbGVhbl9kYXRhIjoxMDI3LCIuL2NvbG9yYmFyIjoxMDI4LCIuL2RlZmF1bHRzIjoxMDMxLCIuL2hvdmVyIjoxMDM0LCIuL3Bsb3QiOjEwNDIsIi4vc2VsZWN0IjoxMDQzLCIuL3N0eWxlIjoxMDQ0LCIuL3N1YnR5cGVzIjoxMDQ1fV0sMTAzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9KHQubWFya2VyfHx7fSkuY29sb3I7aWYobygibGluZS5jb2xvciIsciksbih0LCJsaW5lIikpaSh0LGUsYSxvLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pO2Vsc2V7bygibGluZS5jb2xvciIsIUFycmF5LmlzQXJyYXkobCkmJmx8fHIpfW8oImxpbmUud2lkdGgiKSwoc3x8e30pLm5vRGFzaHx8bygibGluZS5kYXNoIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjExLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGFzX2NvbG9yc2NhbGUiOjYxNX1dLDEwMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByPV8uYzJwKHRbZV0ueCksaT13LmMycCh0W2VdLnkpO3JldHVybiByIT09biYmaSE9PW4mJltyLGldfWZ1bmN0aW9uIGkodCl7dmFyIGU9dFswXS9fLl9sZW5ndGgscj10WzFdL3cuX2xlbmd0aDtyZXR1cm4oMSsxMCpNYXRoLm1heCgwLC1lLGUtMSwtcixyLTEpKSpBfXZhciBhLG8scyxsLHUsYyxoLGYsZCxwLG0sdixnLHksYix4LF89ZS54YXhpcyx3PWUueWF4aXMsTT1lLnNpbXBsaWZ5LGs9ZS5jb25uZWN0R2FwcyxBPWUuYmFzZVRvbGVyYW5jZSxUPWUubGluZWFyLFM9W10sRT0uMixMPW5ldyBBcnJheSh0Lmxlbmd0aCksQz0wO2ZvcihNfHwoQT1FPS0xKSxhPTA7YTx0Lmxlbmd0aDthKyspaWYobz1yKGEpKXtmb3IoQz0wLExbQysrXT1vLGErKzthPHQubGVuZ3RoO2ErKyl7aWYoIShsPXIoYSkpKXtpZihrKWNvbnRpbnVlO2JyZWFrfWlmKFQpe2lmKCEoKGg9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX0obCxvKSk8aShsKSpFKSl7Zm9yKGQ9WyhsWzBdLW9bMF0pL2gsKGxbMV0tb1sxXSkvaF0sdT1vLG09aCx2PXk9Yj0wLGY9ITEscz1sLGErKzthPHQubGVuZ3RoO2ErKyl7aWYoIShjPXIoYSkpKXtpZihrKWNvbnRpbnVlO2JyZWFrfWlmKHA9W2NbMF0tb1swXSxjWzFdLW9bMV1dLHg9cFswXSpkWzFdLXBbMV0qZFswXSx5PU1hdGgubWluKHkseCksKGI9TWF0aC5tYXgoYix4KSkteT5pKGMpKWJyZWFrO3M9YyxnPXBbMF0qZFswXStwWzFdKmRbMV0sZz5tPyhtPWcsbD1jLGY9ITEpOmc8diYmKHY9Zyx1PWMsZj0hMCl9aWYoZj8oTFtDKytdPWwscyE9PXUmJihMW0MrK109dSkpOih1IT09byYmKExbQysrXT11KSxzIT09bCYmKExbQysrXT1sKSksTFtDKytdPXMsYT49dC5sZW5ndGh8fCFjKWJyZWFrO0xbQysrXT1jLG89Y319ZWxzZSBMW0MrK109bH1TLnB1c2goTC5zbGljZSgwLEMpKX1yZXR1cm4gU319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0fV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDEwMzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxhPW51bGwsbz0wO288ci5sZW5ndGg7KytvKW49cltvXSxpPW5bMF0udHJhY2UsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLC0xIT09WyJ0b25leHR4IiwidG9uZXh0eSIsInRvbmV4dCJdLmluZGV4T2YoaS5maWxsKSYmKGkuX3ByZXZ0cmFjZT1hLGEmJihhLl9uZXh0dHJhY2U9aSkpLGE9aSk6aS5fcHJldnRyYWNlPWkuX25leHR0cmFjZT1udWxsfX0se31dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXJrZXIscj1lLnNpemVyZWZ8fDEsaT1lLnNpemVtaW58fDAsYT0iYXJlYSI9PT1lLnNpemVtb2RlP2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQodC9yKX06ZnVuY3Rpb24odCl7cmV0dXJuIHQvcn07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWEodC8yKTtyZXR1cm4gbihlKSYmZT4wP01hdGgubWF4KGUsaSk6MH19fSx7ImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oYXNfY29sb3JzY2FsZSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCx1KXt2YXIgYyxoPW8uaXNCdWJibGUodCksZj0odC5saW5lfHx7fSkuY29sb3I7aWYodT11fHx7fSxmJiYocj1mKSxsKCJtYXJrZXIuc3ltYm9sIiksbCgibWFya2VyLm9wYWNpdHkiLGg/Ljc6MSksbCgibWFya2VyLnNpemUiKSxsKCJtYXJrZXIuY29sb3IiLHIpLGkodCwibWFya2VyIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pLHUubm9MaW5lfHwoYz1mJiYhQXJyYXkuaXNBcnJheShmKSYmZS5tYXJrZXIuY29sb3IhPT1mP2Y6aD9uLmJhY2tncm91bmQ6bi5kZWZhdWx0TGluZSxsKCJtYXJrZXIubGluZS5jb2xvciIsYyksaSh0LCJtYXJrZXIubGluZSIpJiZhKHQsZSxzLGwse3ByZWZpeDoibWFya2VyLmxpbmUuIixjTGV0dGVyOiJjIn0pLGwoIm1hcmtlci5saW5lLndpZHRoIixoPzE6MCkpLGgmJihsKCJtYXJrZXIuc2l6ZXJlZiIpLGwoIm1hcmtlci5zaXplbWluIiksbCgibWFya2VyLnNpemVtb2RlIikpLHUuZ3JhZGllbnQpeyJub25lIiE9PWwoIm1hcmtlci5ncmFkaWVudC50eXBlIikmJmwoIm1hcmtlci5ncmFkaWVudC5jb2xvciIpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjAyLCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjYxMSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hhc19jb2xvcnNjYWxlIjo2MTUsIi4vc3VidHlwZXMiOjEwNDV9XSwxMDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuO2Uuc2VsZWN0QWxsKCJnLnRyYWNlIikuZWFjaChmdW5jdGlvbih0KXt2YXIgZT1vLnNlbGVjdCh0aGlzKTtpZihuPXRbMF0udHJhY2Usbi5fbmV4dHRyYWNlKXtpZihuLl9uZXh0RmlsbD1lLnNlbGVjdCgiLmpzLWZpbGwuanMtdG9uZXh0IiksIW4uX25leHRGaWxsLnNpemUoKSl7dmFyIGk9IjpmaXJzdC1jaGlsZCI7ZS5zZWxlY3QoIi5qcy1maWxsLmpzLXRvemVybyIpLnNpemUoKSYmKGkrPSIgKyAqIiksbi5fbmV4dEZpbGw9ZS5pbnNlcnQoInBhdGgiLGkpLmF0dHIoImNsYXNzIiwianMtZmlsbCBqcy10b25leHQiKX19ZWxzZSBlLnNlbGVjdEFsbCgiLmpzLWZpbGwuanMtdG9uZXh0IikucmVtb3ZlKCksbi5fbmV4dEZpbGw9bnVsbDtuLmZpbGwmJigidG96ZXJvIj09PW4uZmlsbC5zdWJzdHIoMCw2KXx8InRvc2VsZiI9PT1uLmZpbGx8fCJ0byI9PT1uLmZpbGwuc3Vic3RyKDAsMikmJiFuLl9wcmV2dHJhY2UpPyhuLl9vd25GaWxsPWUuc2VsZWN0KCIuanMtZmlsbC5qcy10b3plcm8iKSxuLl9vd25GaWxsLnNpemUoKXx8KG4uX293bkZpbGw9ZS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImpzLWZpbGwganMtdG96ZXJvIikpKTooZS5zZWxlY3RBbGwoIi5qcy1maWxsLmpzLXRvemVybyIpLnJlbW92ZSgpLG4uX293bkZpbGw9bnVsbCksZS5zZWxlY3RBbGwoIi5qcy1maWxsIikuY2FsbChsLnNldENsaXBVcmwsci5sYXllckNsaXBJZCl9KX1mdW5jdGlvbiBpKHQsZSxyLG4saSxmLHApe2Z1bmN0aW9uIG0odCl7cmV0dXJuIE0/dC50cmFuc2l0aW9uKCk6dH1mdW5jdGlvbiB2KHQpe3JldHVybiB0LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHkodCl7aWYodC5pZHMpcmV0dXJuIGd9ZnVuY3Rpb24gYigpe3JldHVybiExfWZ1bmN0aW9uIHgoZSl7dmFyIG4saSxhLHU9ZVswXS50cmFjZSxoPW8uc2VsZWN0KHRoaXMpLGY9Yy5oYXNNYXJrZXJzKHUpLGQ9Yy5oYXNUZXh0KHUpLHA9eSh1KSxnPWIseD1iO2YmJihnPXUubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP3Y6cy5pZGVudGl0eSksZCYmKHg9dS5tYXJrZXIubWF4ZGlzcGxheWVkfHx1Ll9uZWVkc0N1bGw/djpzLmlkZW50aXR5KSxpPWguc2VsZWN0QWxsKCJwYXRoLnBvaW50Iiksbj1pLmRhdGEoZyxwKTt2YXIgXz1uLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTtNJiZfLmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyxrLEEpLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciB3PWYmJmwudHJ5Q29sb3JzY2FsZSh1Lm1hcmtlciwiIiksVD1mJiZsLnRyeUNvbG9yc2NhbGUodS5tYXJrZXIsImxpbmUiKTtuLm9yZGVyKCksbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPW8uc2VsZWN0KHRoaXMpLGk9bShuKTthPWwudHJhbnNsYXRlUG9pbnQoZSxpLGssQSksYT8obC5zaW5nbGVQb2ludFN0eWxlKGUsaSx1LHcsVCx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGksayxBKSx1LmN1c3RvbWRhdGEmJm4uY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT1lLmRhdGEmJnZvaWQgMCE9PWUuZGF0YSkpOmkucmVtb3ZlKCl9KSxNP24uZXhpdCgpLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCk6bi5leGl0KCkucmVtb3ZlKCksaT1oLnNlbGVjdEFsbCgiZyIpLG49aS5kYXRhKHgscCksbi5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG4ub3JkZXIoKSxuLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9by5zZWxlY3QodGhpcyksbj1tKGUuc2VsZWN0KCJ0ZXh0IikpO2E9bC50cmFuc2xhdGVQb2ludCh0LG4sayxBKSxhP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSxrLEEpOmUucmVtb3ZlKCl9KSxuLnNlbGVjdEFsbCgidGV4dCIpLmNhbGwobC50ZXh0UG9pbnRTdHlsZSx1LHQpLmVhY2goZnVuY3Rpb24odCl7dmFyIGU9ay5jMnAodC54KSxyPUEuYzJwKHQueSk7by5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaChmdW5jdGlvbigpe20oby5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pfSksbi5leGl0KCkucmVtb3ZlKCl9dmFyIF8sdzthKHQsZSxyLG4saSk7dmFyIE09ISFwJiZwLmR1cmF0aW9uPjAsaz1yLnhheGlzLEE9ci55YXhpcyxUPW5bMF0udHJhY2UsUz1ULmxpbmUsRT1vLnNlbGVjdChmKTtpZihFLmNhbGwodS5wbG90LHIscCksITA9PT1ULnZpc2libGUpe20oRSkuc3R5bGUoIm9wYWNpdHkiLFQub3BhY2l0eSk7dmFyIEwsQyx6PVQuZmlsbC5jaGFyQXQoVC5maWxsLmxlbmd0aC0xKTsieCIhPT16JiYieSIhPT16JiYoej0iIiksblswXS5ub2RlMz1FO3ZhciBJPSIiLEQ9W10sUD1ULl9wcmV2dHJhY2U7UCYmKEk9UC5fcHJldlJldnBhdGh8fCIiLEM9UC5fbmV4dEZpbGwsRD1QLl9wb2x5Z29ucyk7dmFyIE8sUixGLGosTixCLFUsVixILHE9IiIsRz0iIixZPVtdLFg9W10sVz1zLm5vb3A7aWYoTD1ULl9vd25GaWxsLGMuaGFzTGluZXMoVCl8fCJub25lIiE9PVQuZmlsbCl7Zm9yKEMmJkMuZGF0dW0obiksLTEhPT1bImh2IiwidmgiLCJodmgiLCJ2aHYiXS5pbmRleE9mKFMuc2hhcGUpPyhGPWwuc3RlcHMoUy5zaGFwZSksaj1sLnN0ZXBzKFMuc2hhcGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSkpOkY9aj0ic3BsaW5lIj09PVMuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksUy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LFMuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuIk0iK3Quam9pbigiTCIpfSxOPWZ1bmN0aW9uKHQpe3JldHVybiBqKHQucmV2ZXJzZSgpKX0sWT1oKG4se3hheGlzOmsseWF4aXM6QSxjb25uZWN0R2FwczpULmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgoUy53aWR0aHx8MSwzKS80LGxpbmVhcjoibGluZWFyIj09PVMuc2hhcGUsc2ltcGxpZnk6Uy5zaW1wbGlmeX0pLEg9VC5fcG9seWdvbnM9bmV3IEFycmF5KFkubGVuZ3RoKSx3PTA7dzxZLmxlbmd0aDt3KyspVC5fcG9seWdvbnNbd109ZChZW3ddKTtZLmxlbmd0aCYmKEI9WVswXVswXSxVPVlbWS5sZW5ndGgtMV0sVj1VW1UubGVuZ3RoLTFdKSxYPVkuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSksVz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoTz1GKGUpLFI9TihlKSxxP3o/KHErPSJMIitPLnN1YnN0cigxKSxHPVIrIkwiK0cuc3Vic3RyKDEpKToocSs9IloiK08sRz1SKyJaIitHKToocT1PLEc9UiksYy5oYXNMaW5lcyhUKSYmZS5sZW5ndGg+MSl7dmFyIHI9by5zZWxlY3QodGhpcyk7aWYoci5kYXR1bShuKSx0KW0oci5zdHlsZSgib3BhY2l0eSIsMCkuYXR0cigiZCIsTykuY2FsbChsLmxpbmVHcm91cFN0eWxlKSkuc3R5bGUoIm9wYWNpdHkiLDEpO2Vsc2V7dmFyIGk9bShyKTtpLmF0dHIoImQiLE8pLGwuc2luZ2xlTGluZVN0eWxlKG4saSl9fX19fXZhciBaPUUuc2VsZWN0QWxsKCIuanMtbGluZSIpLmRhdGEoWCk7bShaLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpLFouZWFjaChXKCExKSksWi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmNhbGwobC5saW5lR3JvdXBTdHlsZSkuZWFjaChXKCEwKSksbC5zZXRDbGlwVXJsKFosci5sYXllckNsaXBJZCksWS5sZW5ndGgmJihMP0ImJlYmJih6PygieSI9PT16P0JbMV09VlsxXT1BLmMycCgwLCEwKToieCI9PT16JiYoQlswXT1WWzBdPWsuYzJwKDAsITApKSxtKEwpLmF0dHIoImQiLCJNIitWKyJMIitCKyJMIitxLnN1YnN0cigxKSkuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpOm0oTCkuYXR0cigiZCIscSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKToidG9uZXh0Ij09PVQuZmlsbC5zdWJzdHIoMCw2KSYmcSYmSSYmKCJ0b25leHQiPT09VC5maWxsP20oQykuYXR0cigiZCIscSsiWiIrSSsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpOm0oQykuYXR0cigiZCIscSsiTCIrSS5zdWJzdHIoMSkrIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKSxULl9wb2x5Z29ucz1ULl9wb2x5Z29ucy5jb25jYXQoRCkpLFQuX3ByZXZSZXZwYXRoPUcsVC5fcHJldlBvbHlnb25zPUgpO3ZhciBKPUUuc2VsZWN0QWxsKCIucG9pbnRzIik7Xz1KLmRhdGEoW25dKSxKLmVhY2goeCksXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvaW50cyIsITApLmVhY2goeCksXy5leGl0KCkucmVtb3ZlKCksXy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPSExPT09dFswXS50cmFjZS5jbGlwb25heGlzO2wuc2V0Q2xpcFVybChvLnNlbGVjdCh0aGlzKSxlP251bGw6ci5sYXllckNsaXBJZCl9KX19ZnVuY3Rpb24gYSh0LGUscixuLGkpe3ZhciBhPXIueGF4aXMsbD1yLnlheGlzLHU9by5leHRlbnQocy5zaW1wbGVNYXAoYS5yYW5nZSxhLnIyYykpLGg9by5leHRlbnQocy5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGY9blswXS50cmFjZTtpZihjLmhhc01hcmtlcnMoZikpe3ZhciBkPWYubWFya2VyLm1heGRpc3BsYXllZDtpZigwIT09ZCl7dmFyIHA9bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQueD49dVswXSYmdC54PD11WzFdJiZ0Lnk+PWhbMF0mJnQueTw9aFsxXX0pLG09TWF0aC5jZWlsKHAubGVuZ3RoL2QpLHY9MDtpLmZvckVhY2goZnVuY3Rpb24odCxyKXt2YXIgbj10WzBdLnRyYWNlO2MuaGFzTWFya2VycyhuKSYmbi5tYXJrZXIubWF4ZGlzcGxheWVkPjAmJnI8ZSYmdisrfSk7dmFyIGc9TWF0aC5yb3VuZCh2Km0vMytNYXRoLmZsb29yKHYvMykqbS83LjEpO24uZm9yRWFjaChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSxwLmZvckVhY2goZnVuY3Rpb24odCxlKXswPT09TWF0aC5yb3VuZCgoZStnKSVtKSYmKHQudmlzPSEwKX0pfX19dmFyIG89dCgiZDMiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLGM9dCgiLi9zdWJ0eXBlcyIpLGg9dCgiLi9saW5lX3BvaW50cyIpLGY9dCgiLi9saW5rX3RyYWNlcyIpLGQ9dCgiLi4vLi4vbGliL3BvbHlnb24iKS50ZXN0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyl7dmFyIGwsdSxjLGgsZCxwPWUucGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbT0hYSx2PSEhYSYmYS5kdXJhdGlvbj4wO2ZvcihjPXAuc2VsZWN0QWxsKCJnLnRyYWNlIiksaD1jLmRhdGEocixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS51aWR9KSxoLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMiksZih0LGUsciksbih0LHAsZSksbD0wLHU9e307bDxyLmxlbmd0aDtsKyspdVtyW2xdWzBdLnRyYWNlLnVpZF09bDtpZihwLnNlbGVjdEFsbCgiZy50cmFjZSIpLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdVt0WzBdLnRyYWNlLnVpZF0+dVtlWzBdLnRyYWNlLnVpZF0/MTotMX0pLHYpe3MmJihkPXMoKSk7by50cmFuc2l0aW9uKCkuZHVyYXRpb24oYS5kdXJhdGlvbikuZWFzZShhLmVhc2luZykuZWFjaCgiZW5kIixmdW5jdGlvbigpe2QmJmQoKX0pLmVhY2goImludGVycnVwdCIsZnVuY3Rpb24oKXtkJiZkKCl9KS5lYWNoKGZ1bmN0aW9uKCl7cC5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKGZ1bmN0aW9uKG4sbyl7aSh0LG8sZSxuLHIsdGhpcyxhKX0pfSl9ZWxzZSBwLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goZnVuY3Rpb24obixvKXtpKHQsbyxlLG4scix0aGlzLGEpfSk7bSYmaC5leGl0KCkucmVtb3ZlKCkscC5zZWxlY3RBbGwoInBhdGg6bm90KFtkXSkiKS5yZW1vdmUoKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2MjYsIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvcG9seWdvbiI6NzM0LCIuL2xpbmVfcG9pbnRzIjoxMDM3LCIuL2xpbmtfdHJhY2VzIjoxMDM5LCIuL3N1YnR5cGVzIjoxMDQ1LGQzOjEyMH1dLDEwNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGEsbyxzLGw9dC5jZCx1PXQueGF4aXMsYz10LnlheGlzLGg9W10sZj1sWzBdLnRyYWNlLGQ9Zi5tYXJrZXIscD0hbi5oYXNNYXJrZXJzKGYpJiYhbi5oYXNUZXh0KGYpO2lmKCEwPT09Zi52aXNpYmxlJiYhcCl7dmFyIG09QXJyYXkuaXNBcnJheShkLm9wYWNpdHkpPzE6ZC5vcGFjaXR5O2lmKCExPT09ZSlmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWxbcl0uZGltPTA7ZWxzZSBmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWE9bFtyXSxvPXUuYzJwKGEueCkscz1jLmMycChhLnkpLGUuY29udGFpbnMoW28sc10pPyhoLnB1c2goe3BvaW50TnVtYmVyOnIseDphLngseTphLnl9KSxhLmRpbT0wKTphLmRpbT0xO3JldHVybiBsWzBdLm5vZGUzLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4oKHQubW8rMXx8bSsxKS0xKSoodC5kaW0/aToxKX0pLGxbMF0ubm9kZTMuc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbT9pOjF9KSxofX19LHsiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzAzLCIuL3N1YnR5cGVzIjoxMDQ1fV0sMTA0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2Uuc2NhdHRlciIpO2Uuc3R5bGUoIm9wYWNpdHkiLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxvPWUudHJhY2V8fGVbMF0udHJhY2U7YS5jYWxsKGkucG9pbnRTdHlsZSxvLHQpLHIuc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChpLnRleHRQb2ludFN0eWxlLG8sdCl9KSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSksZS5jYWxsKGEuc3R5bGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjYyNiwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMiOjYzMixkMzoxMjB9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17aGFzTGluZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmdC5tb2RlJiYtMSE9PXQubW9kZS5pbmRleE9mKCJsaW5lcyIpfSxoYXNNYXJrZXJzOmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibWFya2VycyIpfSxoYXNUZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGUmJnQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigidGV4dCIpfSxpc0J1YmJsZTpmdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQubWFya2VyKSYmQXJyYXkuaXNBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7Ii4uLy4uL2xpYiI6NzI0fV0sMTA0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7aSgidGV4dHBvc2l0aW9uIiksbi5jb2VyY2VGb250KGksInRleHRmb250IixyLmZvbnQpfX0seyIuLi8uLi9saWIiOjcyNH1dLDEwNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbz1pKCJ4Iikscz1pKCJ5Iik7aWYobi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLHIpLG8pcz8oYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCksYTxvLmxlbmd0aCYmKGUueD1vLnNsaWNlKDAsYSkpLGE8cy5sZW5ndGgmJihlLnk9cy5zbGljZSgwLGEpKSk6KGE9by5sZW5ndGgsaSgieTAiKSxpKCJkeSIpKTtlbHNle2lmKCFzKXJldHVybiAwO2E9ZS55Lmxlbmd0aCxpKCJ4MCIpLGkoImR4Iil9cmV0dXJuIGF9fSx7Ii4uLy4uL3JlZ2lzdHJ5Ijo4NDJ9XSwxMDQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJue3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fX12YXIgaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiKSxsPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9aS5saW5lLGg9aS5tYXJrZXIsZj1oLmxpbmU7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx0ZXh0OnUoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6dSh7fSxpLmhvdmVydGV4dCx7fSksbW9kZTp1KHt9LGkubW9kZSx7ZGZsdDoibGluZXMrbWFya2VycyJ9KSxzdXJmYWNlYXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlstMSwwLDEsMl0sZGZsdDotMX0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHByb2plY3Rpb246e3g6bigieCIpLHk6bigieSIpLHo6bigieiIpfSxjb25uZWN0Z2FwczppLmNvbm5lY3RnYXBzLGxpbmU6dSh7fSx7d2lkdGg6Yy53aWR0aCxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMocyksZGZsdDoic29saWQifSxzaG93c2NhbGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxhKCJsaW5lIikpLG1hcmtlcjp1KHt9LHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhsKSxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LHNpemU6dSh7fSxoLnNpemUse2RmbHQ6OH0pLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsb3BhY2l0eTp1KHt9LGgub3BhY2l0eSx7YXJyYXlPazohMX0pLHNob3dzY2FsZTpoLnNob3dzY2FsZSxjb2xvcmJhcjpoLmNvbG9yYmFyLGxpbmU6dSh7fSx7d2lkdGg6dSh7fSxmLndpZHRoLHthcnJheU9rOiExfSl9LGEoIm1hcmtlci5saW5lIikpfSxhKCJtYXJrZXIiKSksdGV4dHBvc2l0aW9uOnUoe30saS50ZXh0cG9zaXRpb24se2RmbHQ6InRvcCBjZW50ZXIifSksdGV4dGZvbnQ6aS50ZXh0Zm9udCxlcnJvcl94Om8sZXJyb3JfeTpvLGVycm9yX3o6b319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYwOSwiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvYXR0cmlidXRlcyI6NjI4LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiOjcwMSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NzAyLCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxpPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W3t4OiExLHk6ITEsdHJhY2U6ZSx0Ont9fV07cmV0dXJuIG4ocixlKSxpKGUpLHJ9fSx7Ii4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDI0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTAyOX1dLDEwNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7aWYoIWV8fCFlLnZpc2libGUpcmV0dXJuIG51bGw7Zm9yKHZhciBuPW8oZSksaT1uZXcgQXJyYXkodC5sZW5ndGgpLGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIHM9bigrdFthXSxhKTtpW2FdPVstc1swXSpyLHNbMV0qcl19cmV0dXJuIGl9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKylpZih0W2VdKXJldHVybiB0W2VdLmxlbmd0aDtyZXR1cm4gMH1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9W24odC54LHQuZXJyb3JfeCxlWzBdKSxuKHQueSx0LmVycm9yX3ksZVsxXSksbih0LnosdC5lcnJvcl96LGVbMl0pXSxhPWkocik7aWYoMD09PWEpcmV0dXJuIG51bGw7Zm9yKHZhciBvPW5ldyBBcnJheShhKSxzPTA7czxhO3MrKyl7Zm9yKHZhciBsPVtbMCwwLDBdLFswLDAsMF1dLHU9MDt1PDM7dSsrKWlmKHJbdV0pZm9yKHZhciBjPTA7YzwyO2MrKylsW2NdW3VdPXJbdV1bc11bY107b1tzXT1sfXJldHVybiBvfXZhciBvPXQoIi4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzL2NvbXB1dGVfZXJyb3IiKTtlLmV4cG9ydHM9YX0seyIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9jb21wdXRlX2Vycm9yIjo2MzB9XSwxMDUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLmxpbmVQbG90PW51bGwsdGhpcy5zY2F0dGVyUGxvdD1udWxsLHRoaXMuZXJyb3JCYXJzPW51bGwsdGhpcy50ZXh0TWFya2Vycz1udWxsLHRoaXMuZGVsYXVuYXlNZXNoPW51bGwsdGhpcy5jb2xvcj1udWxsLHRoaXMubW9kZT0iIix0aGlzLmRhdGFQb2ludHM9W10sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMudGV4dExhYmVscz1udWxsLHRoaXMuZGF0YT1udWxsfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuLGk9KHIrMSklMyxhPShyKzIpJTMsbz1bXSxzPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBsPXRbbl07IWlzTmFOKGxbaV0pJiZpc0Zpbml0ZShsW2ldKSYmIWlzTmFOKGxbYV0pJiZpc0Zpbml0ZShsW2FdKSYmKG8ucHVzaChbbFtpXSxsW2FdXSkscy5wdXNoKG4pKX12YXIgdT1nKG8pO2ZvcihuPTA7bjx1Lmxlbmd0aDsrK24pZm9yKHZhciBjPXVbbl0saD0wO2g8Yy5sZW5ndGg7KytoKWNbaF09c1tjW2hdXTtyZXR1cm57cG9zaXRpb25zOnQsY2VsbHM6dSxtZXNoQ29sb3I6ZX19ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9WzAsMCwwXSxyPVtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0sbj1bMCwwLDBdLGk9MDtpPDM7aSsrKXt2YXIgYT10W2ldO2EmJiExIT09YS5jb3B5X3pzdHlsZSYmKGE9dFsyXSksYSYmKGVbaV09YS53aWR0aC8yLHJbaV09YihhLmNvbG9yKSxuPWEudGhpY2tuZXNzKX1yZXR1cm57Y2FwU2l6ZTplLGNvbG9yOnIsbGluZVdpZHRoOm59fWZ1bmN0aW9uIG8odCl7dmFyIGU9WzAsMF07cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/WzAsLTFdOih0LmluZGV4T2YoImJvdHRvbSIpPj0wJiYoZVsxXSs9MSksdC5pbmRleE9mKCJ0b3AiKT49MCYmKGVbMV0tPTEpLHQuaW5kZXhPZigibGVmdCIpPj0wJiYoZVswXS09MSksdC5pbmRleE9mKCJyaWdodCIpPj0wJiYoZVswXSs9MSksZSl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBlKDQqdCl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gTVt0XX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIGE9bnVsbDtpZihBcnJheS5pc0FycmF5KHQpKXthPVtdO2Zvcih2YXIgbz0wO288ZTtvKyspdm9pZCAwPT09dFtvXT9hW29dPW46YVtvXT1yKHRbb10saSl9ZWxzZSBhPXIodCx5LmlkZW50aXR5KTtyZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSl7dmFyIHIsbixpLGMsaCxmLGQ9W10scD10LmZ1bGxTY2VuZUxheW91dCxtPXQuZGF0YVNjYWxlLHY9cC54YXhpcyxnPXAueWF4aXMsdz1wLnpheGlzLE09ZS5tYXJrZXIsQT1lLmxpbmUsVD1lLnh8fFtdLFM9ZS55fHxbXSxFPWUuenx8W10sTD1ULmxlbmd0aCxDPWUueGNhbGVuZGFyLHo9ZS55Y2FsZW5kYXIsST1lLnpjYWxlbmRhcjtmb3Iobj0wO248TDtuKyspaT12LmQybChUW25dLDAsQykqbVswXSxjPWcuZDJsKFNbbl0sMCx6KSptWzFdLGg9dy5kMmwoRVtuXSwwLEkpKm1bMl0sZFtuXT1baSxjLGhdO2lmKEFycmF5LmlzQXJyYXkoZS50ZXh0KSlmPWUudGV4dDtlbHNlIGlmKHZvaWQgMCE9PWUudGV4dClmb3IoZj1uZXcgQXJyYXkoTCksbj0wO248TDtuKyspZltuXT1lLnRleHQ7aWYocj17cG9zaXRpb246ZCxtb2RlOmUubW9kZSx0ZXh0OmZ9LCJsaW5lImluIGUmJihyLmxpbmVDb2xvcj14KEEsMSxMKSxyLmxpbmVXaWR0aD1BLndpZHRoLHIubGluZURhc2hlcz1BLmRhc2gpLCJtYXJrZXIiaW4gZSl7dmFyIEQ9XyhlKTtyLnNjYXR0ZXJDb2xvcj14KE0sMSxMKSxyLnNjYXR0ZXJTaXplPXUoTS5zaXplLEwscywyMCxEKSxyLnNjYXR0ZXJNYXJrZXI9dShNLnN5bWJvbCxMLGwsIlx1MjVjZiIpLHIuc2NhdHRlckxpbmVXaWR0aD1NLmxpbmUud2lkdGgsci5zY2F0dGVyTGluZUNvbG9yPXgoTS5saW5lLDEsTCksci5zY2F0dGVyQW5nbGU9MH0idGV4dHBvc2l0aW9uImluIGUmJihyLnRleHRPZmZzZXQ9byhlLnRleHRwb3NpdGlvbiksci50ZXh0Q29sb3I9eChlLnRleHRmb250LDEsTCksci50ZXh0U2l6ZT11KGUudGV4dGZvbnQuc2l6ZSxMLHkuaWRlbnRpdHksMTIpLHIudGV4dEZvbnQ9ZS50ZXh0Zm9udC5mYW1pbHksci50ZXh0QW5nbGU9MCk7dmFyIFA9WyJ4IiwieSIsInoiXTtmb3Ioci5wcm9qZWN0PVshMSwhMSwhMV0sci5wcm9qZWN0U2NhbGU9WzEsMSwxXSxyLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sbj0wO248MzsrK24pe3ZhciBPPWUucHJvamVjdGlvbltQW25dXTsoci5wcm9qZWN0W25dPU8uc2hvdykmJihyLnByb2plY3RPcGFjaXR5W25dPU8ub3BhY2l0eSxyLnByb2plY3RTY2FsZVtuXT1PLnNjYWxlKX1yLmVycm9yQm91bmRzPWsoZSxtKTt2YXIgUj1hKFtlLmVycm9yX3gsZS5lcnJvcl95LGUuZXJyb3Jfel0pO3JldHVybiByLmVycm9yQ29sb3I9Ui5jb2xvcixyLmVycm9yTGluZVdpZHRoPVIubGluZVdpZHRoLHIuZXJyb3JDYXBTaXplPVIuY2FwU2l6ZSxyLmRlbGF1bmF5QXhpcz1lLnN1cmZhY2VheGlzLHIuZGVsYXVuYXlDb2xvcj1iKGUuc3VyZmFjZWNvbG9yKSxyfWZ1bmN0aW9uIGgodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7dmFyIGU9dFswXTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmKHQ9ZSksInJnYigiK3Quc2xpY2UoMCwzKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMjU1KnQpfSkrIikifXJldHVybiBudWxsfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1uZXcgbih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn12YXIgZD10KCJnbC1saW5lM2QiKSxwPXQoImdsLXNjYXR0ZXIzZCIpLG09dCgiZ2wtZXJyb3IzZCIpLHY9dCgiZ2wtbWVzaDNkIiksZz10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLHk9dCgiLi4vLi4vbGliIiksYj10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IikseD10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIiksXz10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHc9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIiksTT10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksaz10KCIuL2NhbGNfZXJyb3JzIiksQT1uLnByb3RvdHlwZTtBLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3QmJih0Lm9iamVjdD09PXRoaXMubGluZVBsb3R8fHQub2JqZWN0PT09dGhpcy5kZWxhdW5heU1lc2h8fHQub2JqZWN0PT09dGhpcy50ZXh0TWFya2Vyc3x8dC5vYmplY3Q9PT10aGlzLnNjYXR0ZXJQbG90KSl7dC5vYmplY3QuaGlnaGxpZ2h0JiZ0Lm9iamVjdC5oaWdobGlnaHQobnVsbCksdGhpcy5zY2F0dGVyUGxvdCYmKHQub2JqZWN0PXRoaXMuc2NhdHRlclBsb3QsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHQodC5kYXRhKSksdGhpcy50ZXh0TGFiZWxzP3ZvaWQgMCE9PXRoaXMudGV4dExhYmVsc1t0LmRhdGEuaW5kZXhdP3QudGV4dExhYmVsPXRoaXMudGV4dExhYmVsc1t0LmRhdGEuaW5kZXhdOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVsczp0LnRleHRMYWJlbD0iIjt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDtyZXR1cm4gdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LEEudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLG89dGhpcy5zY2VuZS5nbHBsb3QuZ2wscz13LnNvbGlkO3RoaXMuZGF0YT10O3ZhciBsPWModGhpcy5zY2VuZSx0KTsibW9kZSJpbiBsJiYodGhpcy5tb2RlPWwubW9kZSksImxpbmVEYXNoZXMiaW4gbCYmbC5saW5lRGFzaGVzIGluIHcmJihzPXdbbC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1oKGwuc2NhdHRlckNvbG9yKXx8aChsLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPWwucG9zaXRpb24sZT17Z2w6byxwb3NpdGlvbjpsLnBvc2l0aW9uLGNvbG9yOmwubGluZUNvbG9yLGxpbmVXaWR0aDpsLmxpbmVXaWR0aHx8MSxkYXNoZXM6c1swXSxkYXNoU2NhbGU6c1sxXSxvcGFjaXR5OnQub3BhY2l0eSxjb25uZWN0R2Fwczp0LmNvbm5lY3RnYXBzfSwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJsaW5lcyIpP3RoaXMubGluZVBsb3Q/dGhpcy5saW5lUGxvdC51cGRhdGUoZSk6KHRoaXMubGluZVBsb3Q9ZChlKSx0aGlzLmxpbmVQbG90Ll90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmxpbmVQbG90KSk6dGhpcy5saW5lUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmxpbmVQbG90KSx0aGlzLmxpbmVQbG90LmRpc3Bvc2UoKSx0aGlzLmxpbmVQbG90PW51bGwpO3ZhciB1PXQub3BhY2l0eTtpZih0Lm1hcmtlciYmdC5tYXJrZXIub3BhY2l0eSYmKHUqPXQubWFya2VyLm9wYWNpdHkpLHI9e2dsOm8scG9zaXRpb246bC5wb3NpdGlvbixjb2xvcjpsLnNjYXR0ZXJDb2xvcixzaXplOmwuc2NhdHRlclNpemUsZ2x5cGg6bC5zY2F0dGVyTWFya2VyLG9wYWNpdHk6dSxvcnRob2dyYXBoaWM6ITAsbGluZVdpZHRoOmwuc2NhdHRlckxpbmVXaWR0aCxsaW5lQ29sb3I6bC5zY2F0dGVyTGluZUNvbG9yLHByb2plY3Q6bC5wcm9qZWN0LHByb2plY3RTY2FsZTpsLnByb2plY3RTY2FsZSxwcm9qZWN0T3BhY2l0eTpsLnByb2plY3RPcGFjaXR5fSwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJtYXJrZXJzIik/dGhpcy5zY2F0dGVyUGxvdD90aGlzLnNjYXR0ZXJQbG90LnVwZGF0ZShyKToodGhpcy5zY2F0dGVyUGxvdD1wKHIpLHRoaXMuc2NhdHRlclBsb3QuX3RyYWNlPXRoaXMsdGhpcy5zY2F0dGVyUGxvdC5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnNjYXR0ZXJQbG90KSk6dGhpcy5zY2F0dGVyUGxvdCYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnNjYXR0ZXJQbG90KSx0aGlzLnNjYXR0ZXJQbG90LmRpc3Bvc2UoKSx0aGlzLnNjYXR0ZXJQbG90PW51bGwpLGE9e2dsOm8scG9zaXRpb246bC5wb3NpdGlvbixnbHlwaDpsLnRleHQsY29sb3I6bC50ZXh0Q29sb3Isc2l6ZTpsLnRleHRTaXplLGFuZ2xlOmwudGV4dEFuZ2xlLGFsaWdubWVudDpsLnRleHRPZmZzZXQsZm9udDpsLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShhKToodGhpcy50ZXh0TWFya2Vycz1wKGEpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLG49e2dsOm8scG9zaXRpb246bC5wb3NpdGlvbixjb2xvcjpsLmVycm9yQ29sb3IsZXJyb3I6bC5lcnJvckJvdW5kcyxsaW5lV2lkdGg6bC5lcnJvckxpbmVXaWR0aCxjYXBTaXplOmwuZXJyb3JDYXBTaXplLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLmVycm9yQmFycz9sLmVycm9yQm91bmRzP3RoaXMuZXJyb3JCYXJzLnVwZGF0ZShuKToodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCksdGhpcy5lcnJvckJhcnM9bnVsbCk6bC5lcnJvckJvdW5kcyYmKHRoaXMuZXJyb3JCYXJzPW0obiksdGhpcy5lcnJvckJhcnMuX3RyYWNlPXRoaXMsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuZXJyb3JCYXJzKSksbC5kZWxhdW5heUF4aXM+PTApe3ZhciBmPWkobC5wb3NpdGlvbixsLmRlbGF1bmF5Q29sb3IsbC5kZWxhdW5heUF4aXMpO2Yub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKGYpOihmLmdsPW8sdGhpcy5kZWxhdW5heU1lc2g9dihmKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LEEuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9Zn0seyIuLi8uLi9jb25zdGFudHMvZ2wzZF9kYXNoZXMiOjcwMSwiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NzAyLCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzIxLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDQwLCIuL2NhbGNfZXJyb3JzIjoxMDUwLCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTIxLCJnbC1lcnJvcjNkIjoxNTksImdsLWxpbmUzZCI6MTcwLCJnbC1tZXNoM2QiOjIwMywiZ2wtc2NhdHRlcjNkIjoyNDl9XSwxMDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGE9MCxvPXIoIngiKSxzPXIoInkiKSxsPXIoInoiKTtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxuKSxvJiZzJiZsJiYoYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksYTxvLmxlbmd0aCYmKGUueD1vLnNsaWNlKDAsYSkpLGE8cy5sZW5ndGgmJihlLnk9cy5zbGljZSgwLGEpKSxhPGwubGVuZ3RoJiYoZS56PWwuc2xpY2UoMCxhKSkpLGF9dmFyIGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycy9kZWZhdWx0cyIpLGg9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGYocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGgscixuKX1pZighbih0LGUsZixpKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2YoInRleHQiKSxmKCJob3ZlcnRleHQiKSxmKCJtb2RlIiksby5oYXNMaW5lcyhlKSYmKGYoImNvbm5lY3RnYXBzIiksbCh0LGUscixpLGYpKSxvLmhhc01hcmtlcnMoZSkmJnModCxlLHIsaSxmKSxvLmhhc1RleHQoZSkmJnUodCxlLGksZik7dmFyIGQ9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7Zigic3VyZmFjZWF4aXMiKT49MCYmZigic3VyZmFjZWNvbG9yIixkfHxwKTtmb3IodmFyIG09WyJ4IiwieSIsInoiXSx2PTA7djwzOysrdil7dmFyIGc9InByb2plY3Rpb24uIittW3ZdO2YoZysiLnNob3ciKSYmKGYoZysiLm9wYWNpdHkiKSxmKGcrIi5zY2FsZSIpKX1jKHQsZSxyLHtheGlzOiJ6In0pLGModCxlLHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksYyh0LGUscix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4uLy4uL3JlZ2lzdHJ5Ijo4NDIsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAzNiwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNDEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA0NiwiLi9hdHRyaWJ1dGVzIjoxMDQ4fV0sMTA1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLnBsb3Q9dCgiLi9jb252ZXJ0Iiksbi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4ubWFya2VyU3ltYm9scz10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcjNkIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxuLmNhdGVnb3JpZXM9WyJnbDNkIiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiOjcwMiwiLi4vLi4vcGxvdHMvZ2wzZCI6ODA3LCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDI4LCIuL2F0dHJpYnV0ZXMiOjEwNDgsIi4vY2FsYyI6MTA0OSwiLi9jb252ZXJ0IjoxMDUxLCIuL2RlZmF1bHRzIjoxMDUyfV0sMTA1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9bi5tYXJrZXIsdT1uLmxpbmUsYz1sLmxpbmU7ZS5leHBvcnRzPXtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyJ9LGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sbW9kZTpzKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0OnMoe30sbi50ZXh0LHt9KSxsaW5lOntjb2xvcjp1LmNvbG9yLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc2hhcGU6cyh7fSx1LnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzp1LnNtb290aGluZ30sY29ubmVjdGdhcHM6bi5jb25uZWN0Z2FwcyxmaWxsOnMoe30sbi5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il19KSxmaWxsY29sb3I6bi5maWxsY29sb3IsbWFya2VyOnMoe30se3N5bWJvbDpsLnN5bWJvbCxvcGFjaXR5Omwub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6bC5tYXhkaXNwbGF5ZWQsc2l6ZTpsLnNpemUsc2l6ZXJlZjpsLnNpemVyZWYsc2l6ZW1pbjpsLnNpemVtaW4sc2l6ZW1vZGU6bC5zaXplbW9kZSxsaW5lOnMoe30se3dpZHRoOmMud2lkdGh9LGEoIm1hcmtlciIubGluZSkpLGdyYWRpZW50OmwuZ3JhZGllbnR9LGEoIm1hcmtlciIpLHtzaG93c2NhbGU6bC5zaG93c2NhbGUsY29sb3JiYXI6b30pLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGhvdmVyaW5mbzpzKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9ufX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiOjYwMywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYwOSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7dmFyIHU7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgYyxoLGY9ZS5hLmxlbmd0aCxkPW5ldyBBcnJheShmKSxwPSExO2Zvcih1PTA7dTxmO3UrKylpZihjPWUuYVt1XSxoPWUuYlt1XSxuKGMpJiZuKGgpKXt2YXIgbT1yLmFiMnh5KCtjLCtoLCEwKSx2PXIuaXNWaXNpYmxlKCtjLCtoKTt2fHwocD0hMCksZFt1XT17eDptWzBdLHk6bVsxXSxhOmMsYjpoLHZpczp2fX1lbHNlIGRbdV09e3g6ITEseTohMX07ZS5fbmVlZHNDdWxsPXAsZFswXS5jYXJwZXQ9cixkWzBdLnRyYWNlPWU7dmFyIGcseTtpZihhLmhhc01hcmtlcnMoZSkmJihnPWUubWFya2VyLHk9Zy5zaXplLEFycmF5LmlzQXJyYXkoeSkpKXt2YXIgYj17dHlwZToibGluZWFyIn07aS5zZXRDb252ZXJ0KGIpLHk9Yi5tYWtlQ2FsY2RhdGEoZS5tYXJrZXIsInNpemUiKSx5Lmxlbmd0aD5mJiZ5LnNwbGljZShmLHkubGVuZ3RoLWYpfXJldHVybiBvKGUpLHMoZCxlKSxkfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCI6ODk4LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMjksIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGg9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGgscixpKX1kKCJjYXJwZXQiKSxlLnhheGlzPSJ4IixlLnlheGlzPSJ5Ijt2YXIgcCxtPWQoImEiKSx2PWQoImIiKTtpZighKHA9TWF0aC5taW4obS5sZW5ndGgsdi5sZW5ndGgpKSlyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO20mJnA8bS5sZW5ndGgmJihlLmE9bS5zbGljZSgwLHApKSx2JiZwPHYubGVuZ3RoJiYoZS5iPXYuc2xpY2UoMCxwKSksZCgic3VtIiksZCgidGV4dCIpLGQoIm1vZGUiLHA8aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLGQpLGwodCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLGQse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZ1KHQsZSxmLGQpO3ZhciBnPVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihkKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksZy5wdXNoKCJwb2ludHMiKSksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIsZCksYS5oYXNMaW5lcyhlKXx8bCh0LGUsZCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8Zy5wdXNoKCJmaWxscyIpLGQoImhvdmVyb24iLGcuam9pbigiKyIpfHwicG9pbnRzIil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9zY2F0dGVyL2NvbnN0YW50cyI6MTAzMCwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjEwMzIsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTAzNiwiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMDM4LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA0MSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDQ2LCIuL2F0dHJpYnV0ZXMiOjEwNTR9XSwxMDU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7ZnVuY3Rpb24gYSh0LGUpe3YucHVzaCgodC5sYWJlbHByZWZpeCYmdC5sYWJlbHByZWZpeC5sZW5ndGg+MD90LmxhYmVscHJlZml4OnQuX2hvdmVydGl0bGUrIjogIikrZS50b0ZpeGVkKDMpK3QubGFiZWxzdWZmaXgpfXZhciBvPW4odCxlLHIsaSk7aWYobyYmITEhPT1vWzBdLmluZGV4KXt2YXIgcz1vWzBdO2lmKHZvaWQgMD09PXMuaW5kZXgpe3ZhciBsPTEtcy55MC90LnlhLl9sZW5ndGgsdT10LnhhLl9sZW5ndGgsYz11KmwvMixoPXUtYztyZXR1cm4gcy54MD1NYXRoLm1heChNYXRoLm1pbihzLngwLGgpLGMpLHMueDE9TWF0aC5tYXgoTWF0aC5taW4ocy54MSxoKSxjKSxvfXZhciBmPXMuY2Rbcy5pbmRleF07cy5hPWYuYSxzLmI9Zi5iLHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDA7dmFyIGQ9cy50cmFjZSxwPWQuX2NhcnBldCxtPWQuaG92ZXJpbmZvLnNwbGl0KCIrIiksdj1bXTstMSE9PW0uaW5kZXhPZigiYWxsIikmJihtPVsiYSIsImIiXSksLTEhPT1tLmluZGV4T2YoImEiKSYmYShwLmFheGlzLGYuYSksLTEhPT1tLmluZGV4T2YoImIiKSYmYShwLmJheGlzLGYuYik7dmFyIGc9cC5hYjJpaihbZi5hLGYuYl0pLHk9TWF0aC5mbG9vcihnWzBdKSxiPWdbMF0teSx4PU1hdGguZmxvb3IoZ1sxXSksXz1nWzFdLXgsdz1wLmV2YWx4eShbXSx5LHgsYixfKTtyZXR1cm4gdi5wdXNoKCJ5OiAiK3dbMV0udG9GaXhlZCgzKSkscy5leHRyYVRleHQ9di5qb2luKCI8YnI+Iiksb319fSx7Ii4uL3NjYXR0ZXIvaG92ZXIiOjEwMzR9XSwxMDU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4uL3NjYXR0ZXIvY29sb3JiYXIiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vcGxvdCIpLG4uc3R5bGU9dCgiLi9zdHlsZSIpLG4uaG92ZXJQb2ludHM9dCgiLi9ob3ZlciIpLG4uc2VsZWN0UG9pbnRzPXQoIi4vc2VsZWN0Iiksbi5tb2R1bGVUeXBlPSJ0cmFjZSIsbi5uYW1lPSJzY2F0dGVyY2FycGV0IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLG4uY2F0ZWdvcmllcz1bImNhcnBldCIsInN5bWJvbHMiLCJtYXJrZXJDb2xvcnNjYWxlIiwic2hvd0xlZ2VuZCIsImNhcnBldERlcGVuZGVudCJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjc3NCwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi9hdHRyaWJ1dGVzIjoxMDU0LCIuL2NhbGMiOjEwNTUsIi4vZGVmYXVsdHMiOjEwNTYsIi4vaG92ZXIiOjEwNTcsIi4vcGxvdCI6MTA1OSwiLi9zZWxlY3QiOjEwNjAsIi4vc3R5bGUiOjEwNjF9XSwxMDU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scyxsLHU9clswXVswXS5jYXJwZXQsYz17eGF4aXM6aS5nZXRGcm9tSWQodCx1LnhheGlzfHwieCIpLHlheGlzOmkuZ2V0RnJvbUlkKHQsdS55YXhpc3x8InkiKSxwbG90OmUucGxvdH07Zm9yKG4odCxjLHIpLG89MDtvPHIubGVuZ3RoO28rKylzPXJbb11bMF0udHJhY2UsbD1jLnBsb3Quc2VsZWN0QWxsKCJnLnRyYWNlIitzLnVpZCsiIC5qcy1saW5lIiksYS5zZXRDbGlwVXJsKGwsdS5fY2xpcFBhdGhJZCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9zY2F0dGVyL3Bsb3QiOjEwNDJ9XSwxMDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc2VsZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0LGUpO2lmKHIpe3ZhciBpLGEsbyxzPXQuY2Q7Zm9yKG89MDtvPHIubGVuZ3RoO28rKylpPXJbb10sYT1zW2kucG9pbnROdW1iZXJdLGkuYT1hLmEsaS5iPWEuYixpLmM9YS5jLGRlbGV0ZSBpLngsZGVsZXRlIGkueTtyZXR1cm4gcn19fSx7Ii4uL3NjYXR0ZXIvc2VsZWN0IjoxMDQzfV0sMTA2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL3N0eWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0Ll9tb2R1bGVzLHI9MDtyPGUubGVuZ3RoO3IrKylpZigic2NhdHRlciI9PT1lW3JdLm5hbWUpcmV0dXJuO24odCl9fSx7Ii4uL3NjYXR0ZXIvc3R5bGUiOjEwNDR9XSwxMDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9bi5tYXJrZXIsdT1uLmxpbmUsYz1sLmxpbmU7ZS5leHBvcnRzPXtsb246e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsYXQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxsb2NhdGlvbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIklTTy0zIiwiVVNBLXN0YXRlcyIsImNvdW50cnkgbmFtZXMiXSxkZmx0OiJJU08tMyJ9LG1vZGU6cyh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpzKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0OnMoe30sbi5ob3ZlcnRleHQse30pLHRleHRmb250Om4udGV4dGZvbnQsdGV4dHBvc2l0aW9uOm4udGV4dHBvc2l0aW9uLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aCxkYXNoOm99LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsbWFya2VyOnMoe30se3N5bWJvbDpsLnN5bWJvbCxvcGFjaXR5Omwub3BhY2l0eSxzaXplOmwuc2l6ZSxzaXplcmVmOmwuc2l6ZXJlZixzaXplbWluOmwuc2l6ZW1pbixzaXplbW9kZTpsLnNpemVtb2RlLHNob3dzY2FsZTpsLnNob3dzY2FsZSxjb2xvcmJhcjpsLmNvbG9yYmFyLGxpbmU6cyh7fSx7d2lkdGg6Yy53aWR0aH0sYSgibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6bC5ncmFkaWVudH0sYSgibWFya2VyIikpLGZpbGw6ewp2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG9zZWxmIl0sZGZsdDoibm9uZSJ9LGZpbGxjb2xvcjpuLmZpbGxjb2xvcixob3ZlcmluZm86cyh7fSxpLmhvdmVyaW5mbyx7ZmxhZ3M6WyJsb24iLCJsYXQiLCJsb2NhdGlvbiIsInRleHQiLCJuYW1lIl19KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NvbG9yX2F0dHJpYnV0ZXMiOjYwOSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjYyNSwiLi4vLi4vbGliL2V4dGVuZCI6NzE1LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo3NjIsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLG89dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9QXJyYXkuaXNBcnJheShlLmxvY2F0aW9ucykscz1yP2UubG9jYXRpb25zLmxlbmd0aDplLmxvbi5sZW5ndGgsbD1uZXcgQXJyYXkocyksdT0wO3U8czt1Kyspe3ZhciBjPWxbdV09e307aWYocil7dmFyIGg9ZS5sb2NhdGlvbnNbdV07Yy5sb2M9InN0cmluZyI9PXR5cGVvZiBoP2g6bnVsbH1lbHNle3ZhciBmPWUubG9uW3VdLGQ9ZS5sYXRbdV07bihmKSYmbihkKT9jLmxvbmxhdD1bK2YsK2RdOmMubG9ubGF0PVtpLGldfX1yZXR1cm4gbyhsLGUpLGEoZSksbH19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMjksImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuLGksYT0wLG89cigibG9jYXRpb25zIik7cmV0dXJuIG8/KHIoImxvY2F0aW9ubW9kZSIpLGE9by5sZW5ndGgpOihuPXIoImxvbiIpfHxbXSxpPXIoImxhdCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKSxhPG4ubGVuZ3RoJiYoZS5sb249bi5zbGljZSgwLGEpKSxhPGkubGVuZ3RoJiYoZS5sYXQ9aS5zbGljZSgwLGEpKSxhKX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9aWYoIW4odCxlLGYpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7ZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLGYpLGYoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixoLGYse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZsKHQsZSxoLGYpLGYoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJnUodCxlLHIsZil9fSx7Ii4uLy4uL2xpYiI6NzI0LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTAzMiwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDM2LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA0MSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIjoxMDQ2LCIuL2F0dHJpYnV0ZXMiOjEwNjJ9XSwxMDY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGwsdH19LHt9XSwxMDY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGEudGlja1RleHQocixyLmMybCh0KSwiaG92ZXIiKS50ZXh0KyJceGIwIn12YXIgaT10LmhvdmVyaW5mbyxvPSJhbGwiPT09aT9sLmhvdmVyaW5mby5mbGFnczppLnNwbGl0KCIrIikscz0tMSE9PW8uaW5kZXhPZigibG9jYXRpb24iKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksdT0tMSE9PW8uaW5kZXhPZigibG9uIiksYz0tMSE9PW8uaW5kZXhPZigibGF0IiksaD0tMSE9PW8uaW5kZXhPZigidGV4dCIpLGY9W107aWYocz9mLnB1c2goZS5sb2MpOnUmJmM/Zi5wdXNoKCIoIituKGUubG9ubGF0WzBdKSsiLCAiK24oZS5sb25sYXRbMV0pKyIpIik6dT9mLnB1c2goImxvbjogIituKGUubG9ubGF0WzBdKSk6YyYmZi5wdXNoKCJsYXQ6ICIrbihlLmxvbmxhdFsxXSkpLGgpe3ZhciBkO2UuaHR4P2Q9ZS5odHg6dC5ob3ZlcnRleHQ/ZD10LmhvdmVydGV4dDplLnR4P2Q9ZS50eDp0LnRleHQmJihkPXQudGV4dCksQXJyYXkuaXNBcnJheShkKXx8Zi5wdXNoKGQpfXJldHVybiBmLmpvaW4oIjxicj4iKX12YXIgaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxzPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gaC5wcm9qZWN0aW9uKHQpfWZ1bmN0aW9uIHIodCl7dmFyIHI9dC5sb25sYXQ7aWYoclswXT09PW8pcmV0dXJuIDEvMDtpZihoLmlzTG9uTGF0T3ZlckVkZ2VzKHIpKXJldHVybiAxLzA7dmFyIG49ZShyKSxpPXUuYzJwKCksYT1jLmMycCgpLHM9TWF0aC5hYnMoaS1uWzBdKSxsPU1hdGguYWJzKGEtblsxXSksZj1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KHMqcytsKmwpLWYsMS0zL2YpfXZhciBhPXQuY2QsbD1hWzBdLnRyYWNlLHU9dC54YSxjPXQueWEsaD10LnN1YnBsb3Q7aWYoaS5nZXRDbG9zZXN0KGEscix0KSwhMSE9PXQuaW5kZXgpe3ZhciBmPWFbdC5pbmRleF0sZD1mLmxvbmxhdCxwPWUoZCksbT1mLm1yY3x8MTtyZXR1cm4gdC54MD1wWzBdLW0sdC54MT1wWzBdK20sdC55MD1wWzFdLW0sdC55MT1wWzFdK20sdC5sb2M9Zi5sb2MsdC5sb249ZFswXSx0LmxhdD1kWzFdLHQuY29sb3I9cyhsLGYpLHQuZXh0cmFUZXh0PW4obCxmLGgubW9ja0F4aXMpLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTAzMywiLi9hdHRyaWJ1dGVzIjoxMDYyfV0sMTA2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL3Bsb3QiKSxuLmhvdmVyUG9pbnRzPXQoIi4vaG92ZXIiKSxuLmV2ZW50RGF0YT10KCIuL2V2ZW50X2RhdGEiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJnZW8iLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvZ2VvIiksbi5jYXRlZ29yaWVzPVsiZ2VvIiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dlbyI6NzkyLCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDI4LCIuL2F0dHJpYnV0ZXMiOjEwNjIsIi4vY2FsYyI6MTA2MywiLi9kZWZhdWx0cyI6MTA2NCwiLi9ldmVudF9kYXRhIjoxMDY1LCIuL2hvdmVyIjoxMDY2LCIuL3Bsb3QiOjEwNjh9XSwxMDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10WzBdLnRyYWNlO2lmKEFycmF5LmlzQXJyYXkoci5sb2NhdGlvbnMpKWZvcih2YXIgbj1jKHIsZSksaT1yLmxvY2F0aW9ubW9kZSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0scz1oKGksby5sb2Msbik7by5sb25sYXQ9cz9zLnByb3BlcnRpZXMuY3Q6W3UsdV19fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5mcmFtZXdvcmsuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXJnZW8iKTtlLnN0eWxlKCJvcGFjaXR5IixmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSksZS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciByPWVbMF0udHJhY2Usbj1hLnNlbGVjdCh0aGlzKTtuLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLmNhbGwoby5wb2ludFN0eWxlLHIsdC5ncmFwaERpdiksbi5zZWxlY3RBbGwoInRleHQiKS5jYWxsKG8udGV4dFBvaW50U3R5bGUscix0LmdyYXBoRGl2KX0pLGUuc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWEuc2VsZWN0KHRoaXMpLHI9dC50cmFjZSxuPXIubGluZXx8e307ZS5jYWxsKHMuc3Ryb2tlLG4uY29sb3IpLmNhbGwoby5kYXNoTGluZSxuLmRhc2h8fCIiLG4ud2lkdGh8fDApLCJub25lIiE9PXIuZmlsbCYmZS5jYWxsKHMuZmlsbCxyLmZpbGxjb2xvcil9KX12YXIgYT10KCJkMyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbD10KCIuLi8uLi9saWIiKSx1PXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYz10KCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiKS5nZXRUb3BvanNvbkZlYXR1cmVzLGg9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLmxvY2F0aW9uVG9GZWF0dXJlLGY9dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxkPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH1mdW5jdGlvbiBvKHQsZSl7dC5sb25sYXRbMF09PT11JiZhLnNlbGVjdChlKS5yZW1vdmUoKX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyluKGVbc10sdC50b3BvanNvbik7dmFyIGM9dC5mcmFtZXdvcmsuc2VsZWN0KCIuc2NhdHRlcmdlb2xheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXJnZW8iKS5kYXRhKGUscik7Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2Ugc2NhdHRlcmdlbyIpLGMuZXhpdCgpLnJlbW92ZSgpLGMuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksYy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPWEuc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZTtpZihkLmhhc0xpbmVzKHIpfHwibm9uZSIhPT1yLmZpbGwpe3ZhciBuPWYuY2FsY1RyYWNlVG9MaW5lQ29vcmRzKHQpLGk9Im5vbmUiIT09ci5maWxsP2YubWFrZVBvbHlnb24obixyKTpmLm1ha2VMaW5lKG4scik7ZS5zZWxlY3RBbGwoInBhdGguanMtbGluZSIpLmRhdGEoW2ldKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKX1kLmhhc01hcmtlcnMocikmJmUuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShsLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCkuZWFjaChmdW5jdGlvbih0KXtvKHQsdGhpcyl9KSxkLmhhc1RleHQocikmJmUuc2VsZWN0QWxsKCJnIikuZGF0YShsLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgiZyIpLmFwcGVuZCgidGV4dCIpLmVhY2goZnVuY3Rpb24odCl7byh0LHRoaXMpfSl9KSxpKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MDIsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjI2LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3MTgsIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3MTksIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6NzQ1LCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LGQzOjEyMH1dLDEwNjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL2dsMmRfZGFzaGVzIiksbz10KCIuLi8uLi9jb25zdGFudHMvZ2wyZF9tYXJrZXJzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmREZWVwLHU9bi5saW5lLGM9bi5tYXJrZXIsaD1jLmxpbmU7ZS5leHBvcnRzPXt4Om4ueCx4MDpuLngwLGR4Om4uZHgseTpuLnkseTA6bi55MCxkeTpuLmR5LHRleHQ6cyh7fSxuLnRleHQse30pLG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyJdLGV4dHJhczpbIm5vbmUiXX0sbGluZTp7Y29sb3I6dS5jb2xvcix3aWR0aDp1LndpZHRoLGRhc2g6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpPYmplY3Qua2V5cyhhKSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6bCh7fSxpKCJtYXJrZXIiKSx7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMobyksZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxzaXplOmMuc2l6ZSxzaXplcmVmOmMuc2l6ZXJlZixzaXplbWluOmMuc2l6ZW1pbixzaXplbW9kZTpjLnNpemVtb2RlLG9wYWNpdHk6Yy5vcGFjaXR5LHNob3dzY2FsZTpjLnNob3dzY2FsZSxjb2xvcmJhcjpjLmNvbG9yYmFyLGxpbmU6bCh7fSxpKCJtYXJrZXIubGluZSIpLHt3aWR0aDpoLndpZHRofSl9KSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGZpbGw6cyh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCJdfSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLGVycm9yX3k6bi5lcnJvcl95LGVycm9yX3g6bi5lcnJvcl94fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyI6NjA5LCIuLi8uLi9jb25zdGFudHMvZ2wyZF9kYXNoZXMiOjY5OSwiLi4vLi4vY29uc3RhbnRzL2dsMmRfbWFya2VycyI6NzAwLCIuLi8uLi9saWIvZXh0ZW5kIjo3MTUsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTAyNX1dLDEwNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksYT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG89dC5fZnVsbExheW91dC5kcmFnbW9kZTtpZigibGFzc28iPT09b3x8InNlbGVjdCI9PT1vKXt2YXIgcyxsPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx1PW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxjPWwubWFrZUNhbGNkYXRhKGUsIngiKSxoPXUubWFrZUNhbGNkYXRhKGUsInkiKSxmPU1hdGgubWluKGMubGVuZ3RoLGgubGVuZ3RoKTtmb3Iocj1uZXcgQXJyYXkoZikscz0wO3M8ZjtzKyspcltzXT17eDpjW3NdLHk6aFtzXX19ZWxzZSByPVt7eDohMSx5OiExLHRyYWNlOmUsdDp7fX1dLGkocixlKTtyZXR1cm4gYShlKSxyfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTAyNCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjEwMjl9XSwxMDcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9InNjYXR0ZXJnbCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPSJyZ2IoMCwgMCwgMCkiLHRoaXMubmFtZT0iIix0aGlzLmhvdmVyaW5mbz0iYWxsIix0aGlzLmNvbm5lY3RnYXBzPSEwLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5pc1Zpc2libGU9ITEsdGhpcy5oYXNMaW5lcz0hMSx0aGlzLmhhc0Vycm9yWD0hMSx0aGlzLmhhc0Vycm9yWT0hMSx0aGlzLmhhc01hcmtlcnM9ITEsdGhpcy5saW5lPXRoaXMuaW5pdE9iamVjdChtLHtwb3NpdGlvbnM6bmV3IEZsb2F0NjRBcnJheSgwKSxjb2xvcjpbMCwwLDAsMV0sd2lkdGg6MSxmaWxsOlshMSwhMSwhMSwhMV0sZmlsbENvbG9yOltbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLGRhc2hlczpbMV19LDApLHRoaXMuZXJyb3JYPXRoaXMuaW5pdE9iamVjdCh2LHtwb3NpdGlvbnM6bmV3IEZsb2F0NjRBcnJheSgwKSxlcnJvcnM6bmV3IEZsb2F0NjRBcnJheSgwKSxsaW5lV2lkdGg6MSxjYXBTaXplOjAsY29sb3I6WzAsMCwwLDFdfSwxKSx0aGlzLmVycm9yWT10aGlzLmluaXRPYmplY3Qodix7cG9zaXRpb25zOm5ldyBGbG9hdDY0QXJyYXkoMCksZXJyb3JzOm5ldyBGbG9hdDY0QXJyYXkoMCksbGluZVdpZHRoOjEsY2FwU2l6ZTowLGNvbG9yOlswLDAsMCwxXX0sMik7dmFyIHI9e3Bvc2l0aW9uczpuZXcgRmxvYXQ2NEFycmF5KDApLHNpemVzOltdLGNvbG9yczpbXSxnbHlwaHM6W10sYm9yZGVyV2lkdGhzOltdLGJvcmRlckNvbG9yczpbXSxzaXplOjEyLGNvbG9yOlswLDAsMCwxXSxib3JkZXJTaXplOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdLHNuYXBQb2ludHM6ITB9LG49eS5leHRlbmRGbGF0KHt9LHIse3NuYXBQb2ludHM6ITF9KTt0aGlzLnNjYXR0ZXI9dGhpcy5pbml0T2JqZWN0KGQsciwzKSx0aGlzLmZhbmN5U2NhdHRlcj10aGlzLmluaXRPYmplY3QocCxyLDQpLHRoaXMuc2VsZWN0U2NhdHRlcj10aGlzLmluaXRPYmplY3QoZCxuLDUpfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfHwoZT1bZV0pLGEodCxlLHIpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkociksaT1lWzBdLGE9MDthPHI7KythKW5bYV09dChhPj1lLmxlbmd0aD9pOmVbYV0pO3JldHVybiBufWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBsKE8odCxyKSxQKGUscikscil9ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1rKHQsZSxuKTtyZXR1cm4gaT1BcnJheS5pc0FycmF5KGlbMF0pP2k6YSh5LmlkZW50aXR5LFtpXSxuKSxsKGksUChyLG4pLG4pfWZ1bmN0aW9uIGwodCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoNCpyKSxpPTA7aTxyOysraSl7Zm9yKHZhciBhPTA7YTwzOysrYSluWzQqaSthXT10W2ldW2FdO25bNCppKzNdPXRbaV1bM10qZVtpXX1yZXR1cm4gbn1mdW5jdGlvbiB1KHQpe3JldHVybiIiPT09dC5zcGxpdCgiLW9wZW4iKVsxXX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dmFyIGEsbz1pP0M6MTtmb3IoYT0wO2E8MzthKyspdFs0KnIrYV09ZVs0Km4rYV07dFs0KnIrYV09byplWzQqbithXX1mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49TWF0aC5tYXgoMSwoci0xKS9NYXRoLm1pbihNYXRoLm1heChyLDEpLDFlMykpLGk9MDtpPHI7aSs9bilpZihlPXRbTWF0aC5mbG9vcihpKV0sIShnKGUpfHxlIGluc3RhbmNlb2YgRGF0ZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9bmV3IG4odCxlLnVpZCk7cmV0dXJuIGkudXBkYXRlKGUsciksaX12YXIgZD10KCJnbC1zY2F0dGVyMmQiKSxwPXQoImdsLXNjYXR0ZXIyZC1zZGYiKSxtPXQoImdsLWxpbmUyZCIpLHY9dCgiZ2wtZXJyb3IyZCIpLGc9dCgiZmFzdC1pc251bWVyaWMiKSx5PXQoIi4uLy4uL2xpYiIpLGI9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSx4PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIiksXz10KCIuLi8uLi9jb21wb25lbnRzL2Vycm9yYmFycyIpLHc9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLE09dCgiLi4vLi4vbGliL3R5cGVkX2FycmF5X3RydW5jYXRlIiksaz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIiksQT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksVD10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLFM9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxFPXQoIi4uLy4uL2NvbnN0YW50cy9nbDJkX21hcmtlcnMiKSxMPXQoIi4uLy4uL2NvbnN0YW50cy9nbDJkX2Rhc2hlcyIpLEM9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLHo9WyJ4YXhpcyIsInlheGlzIl0sST1bMCwwLDAsMF0sRD1uLnByb3RvdHlwZTtELmluaXRPYmplY3Q9ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt1fHwodT10KHMsZSksdS5fdHJhY2U9byx1Ll9pbmRleD1yKSx1LnVwZGF0ZShlKX1mdW5jdGlvbiBpKCl7dSYmdS51cGRhdGUobCl9ZnVuY3Rpb24gYSgpe3UmJnUuZGlzcG9zZSgpfXZhciBvPXRoaXMscz1vLnNjZW5lLmdscGxvdCxsPXkuZXh0ZW5kRmxhdCh7fSxlKSx1PW51bGw7cmV0dXJue29wdGlvbnM6ZSx1cGRhdGU6bixjbGVhcjppLGRpc3Bvc2U6YX19LEQuaGFuZGxlUGljaz1mdW5jdGlvbih0KXt2YXIgZT10LnBvaW50SWQ7KHQub2JqZWN0IT09dGhpcy5saW5lfHx0aGlzLmNvbm5lY3RnYXBzKSYmKGU9dGhpcy5pZFRvSW5kZXhbdC5wb2ludElkXSk7dmFyIHI9dGhpcy5waWNrWERhdGFbZV07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2cocil8fCF5LmlzRGF0ZVRpbWUocik/cjp5LmRhdGVUaW1lMm1zKHIpLHRoaXMucGlja1lEYXRhW2VdXSx0ZXh0TGFiZWw6QXJyYXkuaXNBcnJheSh0aGlzLnRleHRMYWJlbHMpP3RoaXMudGV4dExhYmVsc1tlXTp0aGlzLnRleHRMYWJlbHMsY29sb3I6QXJyYXkuaXNBcnJheSh0aGlzLmNvbG9yKT90aGlzLmNvbG9yW2VdOnRoaXMuY29sb3IsbmFtZTp0aGlzLm5hbWUscG9pbnRJbmRleDplLGhvdmVyaW5mbzp0aGlzLmhvdmVyaW5mb319LEQuaXNGYW5jeT1mdW5jdGlvbih0KXtpZigibGluZWFyIiE9PXRoaXMuc2NlbmUueGF4aXMudHlwZSYmImRhdGUiIT09dGhpcy5zY2VuZS54YXhpcy50eXBlKXJldHVybiEwO2lmKCJsaW5lYXIiIT09dGhpcy5zY2VuZS55YXhpcy50eXBlKXJldHVybiEwO2lmKCF0Lnh8fCF0LnkpcmV0dXJuITA7aWYodGhpcy5oYXNNYXJrZXJzKXt2YXIgZT10Lm1hcmtlcnx8e307aWYoQXJyYXkuaXNBcnJheShlLnN5bWJvbCl8fCJjaXJjbGUiIT09ZS5zeW1ib2x8fEFycmF5LmlzQXJyYXkoZS5zaXplKXx8QXJyYXkuaXNBcnJheShlLmNvbG9yKXx8QXJyYXkuaXNBcnJheShlLmxpbmUud2lkdGgpfHxBcnJheS5pc0FycmF5KGUubGluZS5jb2xvcil8fEFycmF5LmlzQXJyYXkoZS5vcGFjaXR5KSlyZXR1cm4hMH1yZXR1cm4hKCF0aGlzLmhhc0xpbmVzfHx0aGlzLmNvbm5lY3RnYXBzKXx8KCEhdGhpcy5oYXNFcnJvclh8fCEhdGhpcy5oYXNFcnJvclkpfTt2YXIgUD1pLmJpbmQobnVsbCxmdW5jdGlvbih0KXtyZXR1cm4rdH0pLE89aS5iaW5kKG51bGwsdyksUj1pLmJpbmQobnVsbCxmdW5jdGlvbih0KXtyZXR1cm4gRVt0XT90OiJjaXJjbGUifSk7RC51cGRhdGU9ZnVuY3Rpb24odCxlKXshMCE9PXQudmlzaWJsZT8odGhpcy5pc1Zpc2libGU9ITEsdGhpcy5oYXNMaW5lcz0hMSx0aGlzLmhhc0Vycm9yWD0hMSx0aGlzLmhhc0Vycm9yWT0hMSx0aGlzLmhhc01hcmtlcnM9ITEpOih0aGlzLmlzVmlzaWJsZT0hMCx0aGlzLmhhc0xpbmVzPUEuaGFzTGluZXModCksdGhpcy5oYXNFcnJvclg9ITA9PT10LmVycm9yX3gudmlzaWJsZSx0aGlzLmhhc0Vycm9yWT0hMD09PXQuZXJyb3JfeS52aXNpYmxlLHRoaXMuaGFzTWFya2Vycz1BLmhhc01hcmtlcnModCkpLHRoaXMudGV4dExhYmVscz10LnRleHQsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmhvdmVyaW5mbz10LmhvdmVyaW5mbyx0aGlzLmJvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuY29ubmVjdGdhcHM9ISF0LmNvbm5lY3RnYXBzLHRoaXMuaXNWaXNpYmxlP3RoaXMuaXNGYW5jeSh0KT90aGlzLnVwZGF0ZUZhbmN5KHQpOnRoaXMudXBkYXRlRmFzdCh0KToodGhpcy5saW5lLmNsZWFyKCksdGhpcy5lcnJvclguY2xlYXIoKSx0aGlzLmVycm9yWS5jbGVhcigpLHRoaXMuc2NhdHRlci5jbGVhcigpLHRoaXMuZmFuY3lTY2F0dGVyLmNsZWFyKCkpLHRoaXMuc2NlbmUuZ2xwbG90Lm9iamVjdHMuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll9pbmRleC1lLl9pbmRleH0pLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmNvbG9yPVModCx7fSksZSYmZVswXSYmIWVbMF0uX2dsVHJhY2UmJihlWzBdLl9nbFRyYWNlPXRoaXMpfSxELnVwZGF0ZUZhc3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHM9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksbD1vLmxlbmd0aCx1PW5ldyBBcnJheShsKSxjPW5ldyBGbG9hdDY0QXJyYXkoMipsKSxmPXRoaXMuYm91bmRzLGQ9MCxwPTAsbT10LnNlbGVjdGlvbix2PXQueGNhbGVuZGFyLGI9aChvKSxfPSFiJiYiZGF0ZSI9PT14KG8sdik7aWYoYnx8Xylmb3IoZT0wO2U8bDsrK2UpaT1vW2VdLGE9c1tlXSxnKGEpJiYoYnx8KGk9eS5kYXRlVGltZTJtcyhpLHYpKSxjW3ArK109aSxjW3ArK109YSx1W2QrK109ZSxmWzBdPU1hdGgubWluKGZbMF0saSksZlsxXT1NYXRoLm1pbihmWzFdLGEpLGZbMl09TWF0aC5tYXgoZlsyXSxpKSxmWzNdPU1hdGgubWF4KGZbM10sYSkpO2lmKGM9TShjLHApLHRoaXMuaWRUb0luZGV4PXUsbSYmbS5sZW5ndGgpZm9yKHI9bmV3IEZsb2F0NjRBcnJheSgyKm0ubGVuZ3RoKSxlPTAsbj1tLmxlbmd0aDtlPG47ZSsrKXJbMiplKzBdPW1bZV0ueCxyWzIqZSsxXT1tW2VdLnk7dGhpcy51cGRhdGVMaW5lcyh0LGMpLHRoaXMudXBkYXRlRXJyb3IoIlgiLHQpLHRoaXMudXBkYXRlRXJyb3IoIlkiLHQpO3ZhciBrO2lmKHRoaXMuaGFzTWFya2Vycyl7dmFyIEEsVCxTO3I/KHRoaXMuc2NhdHRlci5vcHRpb25zLnBvc2l0aW9ucz1udWxsLEE9dyh0Lm1hcmtlci5jb2xvciksVD13KHQubWFya2VyLmxpbmUuY29sb3IpLFM9dC5vcGFjaXR5KnQubWFya2VyLm9wYWNpdHkqQyxBWzNdKj1TLHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9yPUEsVFszXSo9Uyx0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcj1ULGs9dC5tYXJrZXIuc2l6ZSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5zaXplPWssdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyU2l6ZT10Lm1hcmtlci5saW5lLndpZHRoLHRoaXMuc2NhdHRlci51cGRhdGUoKSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5wb3NpdGlvbnM9Yyx0aGlzLnNlbGVjdFNjYXR0ZXIub3B0aW9ucy5wb3NpdGlvbnM9cixBPXcodC5tYXJrZXIuY29sb3IpLFQ9dyh0Lm1hcmtlci5saW5lLmNvbG9yKSxTPXQub3BhY2l0eSp0Lm1hcmtlci5vcGFjaXR5LEFbM10qPVMsdGhpcy5zZWxlY3RTY2F0dGVyLm9wdGlvbnMuY29sb3I9QSxUWzNdKj1TLHRoaXMuc2VsZWN0U2NhdHRlci5vcHRpb25zLmJvcmRlckNvbG9yPVQsaz10Lm1hcmtlci5zaXplLHRoaXMuc2VsZWN0U2NhdHRlci5vcHRpb25zLnNpemU9ayx0aGlzLnNlbGVjdFNjYXR0ZXIub3B0aW9ucy5ib3JkZXJTaXplPXQubWFya2VyLmxpbmUud2lkdGgsdGhpcy5zZWxlY3RTY2F0dGVyLnVwZGF0ZSgpKToodGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPWMsQT13KHQubWFya2VyLmNvbG9yKSxUPXcodC5tYXJrZXIubGluZS5jb2xvciksUz10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eSxBWzNdKj1TLHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9yPUEsVFszXSo9Uyx0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcj1ULGs9dC5tYXJrZXIuc2l6ZSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5zaXplPWssdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyU2l6ZT10Lm1hcmtlci5saW5lLndpZHRoLHRoaXMuc2NhdHRlci51cGRhdGUoKSl9ZWxzZSB0aGlzLnNjYXR0ZXIuY2xlYXIoKTt0aGlzLmZhbmN5U2NhdHRlci5jbGVhcigpLHRoaXMuZXhwYW5kQXhlc0Zhc3QoZixrKX0sRC51cGRhdGVGYW5jeT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS54YXhpcyxuPWUueWF4aXMsYT10aGlzLmJvdW5kcyxvPXQuc2VsZWN0aW9uLGw9dGhpcy5waWNrWERhdGE9ci5tYWtlQ2FsY2RhdGEodCwieCIpLnNsaWNlKCksaD10aGlzLnBpY2tZRGF0YT1uLm1ha2VDYWxjZGF0YSh0LCJ5Iikuc2xpY2UoKTt0aGlzLnhEYXRhPWwuc2xpY2UoKSx0aGlzLnlEYXRhPWguc2xpY2UoKTt2YXIgZixkLHAsbSx2LGcseSxiPV8uY2FsY0Zyb21UcmFjZSh0LGUuZnVsbExheW91dCkseD1sLmxlbmd0aCx3PW5ldyBBcnJheSh4KSxrPW5ldyBGbG9hdDY0QXJyYXkoMip4KSxBPW5ldyBGbG9hdDY0QXJyYXkoNCp4KSxTPW5ldyBGbG9hdDY0QXJyYXkoNCp4KSxMPTAsQz0wLHo9MCxEPTAsTz0ibG9nIj09PXIudHlwZT9yLmQybDpmdW5jdGlvbih0KXtyZXR1cm4gdH0sRj0ibG9nIj09PW4udHlwZT9uLmQybDpmdW5jdGlvbih0KXtyZXR1cm4gdH07Zm9yKGY9MDtmPHg7KytmKXRoaXMueERhdGFbZl09ZD1PKGxbZl0pLHRoaXMueURhdGFbZl09cD1GKGhbZl0pLGlzTmFOKGQpfHxpc05hTihwKXx8KHdbTCsrXT1mLGtbQysrXT1kLGtbQysrXT1wLG09QVt6KytdPWQtYltmXS54c3x8MCx2PUFbeisrXT1iW2ZdLnhoLWR8fDAsQVt6KytdPTAsQVt6KytdPTAsU1tEKytdPTAsU1tEKytdPTAsZz1TW0QrK109cC1iW2ZdLnlzfHwwLHk9U1tEKytdPWJbZl0ueWgtcHx8MCxhWzBdPU1hdGgubWluKGFbMF0sZC1tKSxhWzFdPU1hdGgubWluKGFbMV0scC1nKSxhWzJdPU1hdGgubWF4KGFbMl0sZCt2KSxhWzNdPU1hdGgubWF4KGFbM10scCt5KSk7az1NKGssQyksdGhpcy5pZFRvSW5kZXg9dyx0aGlzLnVwZGF0ZUxpbmVzKHQsayksdGhpcy51cGRhdGVFcnJvcigiWCIsdCxrLEEpLHRoaXMudXBkYXRlRXJyb3IoIlkiLHQsayxTKTt2YXIgaixOO2lmKG8mJm8ubGVuZ3RoKWZvcihOPXt9LGY9MDtmPG8ubGVuZ3RoO2YrKylOW29bZl0ucG9pbnROdW1iZXJdPSEwO2lmKHRoaXMuaGFzTWFya2Vycyl7dGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPWssdGhpcy5zY2F0dGVyLm9wdGlvbnMuc2l6ZXM9bmV3IEFycmF5KEwpLHRoaXMuc2NhdHRlci5vcHRpb25zLmdseXBocz1uZXcgQXJyYXkoTCksdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyV2lkdGhzPW5ldyBBcnJheShMKSx0aGlzLnNjYXR0ZXIub3B0aW9ucy5jb2xvcnM9bmV3IEFycmF5KDQqTCksdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyQ29sb3JzPW5ldyBBcnJheSg0KkwpO3ZhciBCLFUsVixILHEsRyxZLFgsVyxaLEo9VCh0KSxLPXQubWFya2VyLFE9Sy5vcGFjaXR5LCQ9dC5vcGFjaXR5LHR0PVIoSy5zeW1ib2wseCksZXQ9cyhLLFEsJCx4KSxydD1QKEsubGluZS53aWR0aCx4KSxudD1zKEsubGluZSxRLCQseCk7Zm9yKGo9aShKLEsuc2l6ZSx4KSxmPTA7ZjxMOysrZilCPXdbZl0sVj10dFtCXSxIPUVbVl0scT11KFYpLEc9TiYmIU5bQl0sWT1ILm5vQm9yZGVyJiYhcT9udDpldCxYPXE/ZXQ6bnQsVT1qW0JdLFc9cnRbQl0sWj1ILm5vQm9yZGVyfHxILm5vRmlsbD8uMSpVOjAsdGhpcy5zY2F0dGVyLm9wdGlvbnMuc2l6ZXNbZl09NCpVLHRoaXMuc2NhdHRlci5vcHRpb25zLmdseXBoc1tmXT1ILnVuaWNvZGUsdGhpcy5zY2F0dGVyLm9wdGlvbnMuYm9yZGVyV2lkdGhzW2ZdPS41KihXPlo/Vy1aOjApLCFxfHxILm5vQm9yZGVyfHxILm5vRmlsbD9jKHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9ycyxZLGYsQixHKTpjKHRoaXMuc2NhdHRlci5vcHRpb25zLmNvbG9ycyxJLGYsMCksYyh0aGlzLnNjYXR0ZXIub3B0aW9ucy5ib3JkZXJDb2xvcnMsWCxmLEIsRyk7Tj8odGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPW51bGwsdGhpcy5mYW5jeVNjYXR0ZXIudXBkYXRlKCksdGhpcy5zY2F0dGVyLm9wdGlvbnMucG9zaXRpb25zPWspOnRoaXMuZmFuY3lTY2F0dGVyLnVwZGF0ZSgpfWVsc2UgdGhpcy5mYW5jeVNjYXR0ZXIuY2xlYXIoKTt0aGlzLnNjYXR0ZXIuY2xlYXIoKSx0aGlzLmV4cGFuZEF4ZXNGYW5jeShsLGgsail9LEQudXBkYXRlTGluZXM9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZih0aGlzLmhhc0xpbmVzKXt2YXIgbj1lO2lmKCF0LmNvbm5lY3RnYXBzKXt2YXIgaT0wLGE9dGhpcy54RGF0YSxzPXRoaXMueURhdGE7Zm9yKG49bmV3IEZsb2F0NjRBcnJheSgyKmEubGVuZ3RoKSxyPTA7cjxhLmxlbmd0aDsrK3IpbltpKytdPWFbcl0sbltpKytdPXNbcl19dGhpcy5saW5lLm9wdGlvbnMucG9zaXRpb25zPW47dmFyIGw9byh0LmxpbmUuY29sb3IsdC5vcGFjaXR5LDEpLHU9TWF0aC5yb3VuZCguNSp0aGlzLmxpbmUub3B0aW9ucy53aWR0aCksYz0oTFt0LmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8Yy5sZW5ndGg7KytyKWNbcl0qPXU7c3dpdGNoKHQuZmlsbCl7Y2FzZSJ0b3plcm95Ijp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMSwhMCwhMSwhMV07YnJlYWs7Y2FzZSJ0b3plcm94Ijp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMCwhMSwhMSwhMV07YnJlYWs7ZGVmYXVsdDp0aGlzLmxpbmUub3B0aW9ucy5maWxsPVshMSwhMSwhMSwhMV19dmFyIGg9dyh0LmZpbGxjb2xvcik7dGhpcy5saW5lLm9wdGlvbnMuY29sb3I9bCx0aGlzLmxpbmUub3B0aW9ucy53aWR0aD0yKnQubGluZS53aWR0aCx0aGlzLmxpbmUub3B0aW9ucy5kYXNoZXM9Yyx0aGlzLmxpbmUub3B0aW9ucy5maWxsQ29sb3I9W2gsaCxoLGhdLHRoaXMubGluZS51cGRhdGUoKX1lbHNlIHRoaXMubGluZS5jbGVhcigpfSxELnVwZGF0ZUVycm9yPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXNbImVycm9yIit0XSxhPWVbImVycm9yXyIrdC50b0xvd2VyQ2FzZSgpXTsieCI9PT10LnRvTG93ZXJDYXNlKCkmJmEuY29weV95c3R5bGUmJihhPWUuZXJyb3JfeSksdGhpc1siaGFzRXJyb3IiK3RdPyhpLm9wdGlvbnMucG9zaXRpb25zPXIsaS5vcHRpb25zLmVycm9ycz1uLGkub3B0aW9ucy5jYXBTaXplPWEud2lkdGgsaS5vcHRpb25zLmxpbmVXaWR0aD1hLnRoaWNrbmVzcy8yLGkub3B0aW9ucy5jb2xvcj1vKGEuY29sb3IsMSwxKSxpLnVwZGF0ZSgpKTppLmNsZWFyKCl9LEQuZXhwYW5kQXhlc0Zhc3Q9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpLGE9ZXx8MTAsbz0wO288MjtvKyspcj10aGlzLnNjZW5lW3pbb11dLG49ci5fbWluLG58fChuPVtdKSxuLnB1c2goe3ZhbDp0W29dLHBhZDphfSksaT1yLl9tYXgsaXx8KGk9W10pLGkucHVzaCh7dmFsOnRbbysyXSxwYWQ6YX0pfSxELmV4cGFuZEF4ZXNGYW5jeT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zY2VuZSxpPXtwYWRkZWQ6ITAscHBhZDpyfTtiLmV4cGFuZChuLnhheGlzLHQsaSksYi5leHBhbmQobi55YXhpcyxlLGkpfSxELmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmxpbmUuZGlzcG9zZSgpLHRoaXMuZXJyb3JYLmRpc3Bvc2UoKSx0aGlzLmVycm9yWS5kaXNwb3NlKCksdGhpcy5zY2F0dGVyLmRpc3Bvc2UoKSx0aGlzLmZhbmN5U2NhdHRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mfSx7Ii4uLy4uL2NvbXBvbmVudHMvZXJyb3JiYXJzIjo2MzIsIi4uLy4uL2NvbnN0YW50cy9nbDJkX2Rhc2hlcyI6Njk5LCIuLi8uLi9jb25zdGFudHMvZ2wyZF9tYXJrZXJzIjo3MDAsIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiOjcwMywiLi4vLi4vbGliIjo3MjQsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjcyMSwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6NzQyLCIuLi8uLi9saWIvdHlwZWRfYXJyYXlfdHJ1bmNhdGUiOjc0NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjc2NSwiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiOjEwMzMsIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMDQwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LCJmYXN0LWlzbnVtZXJpYyI6MTI5LCJnbC1lcnJvcjJkIjoxNTcsImdsLWxpbmUyZCI6MTY4LCJnbC1zY2F0dGVyMmQiOjI0NiwiZ2wtc2NhdHRlcjJkLXNkZiI6MjQxfV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiKSxoPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBkKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxoLHIsaSl9dmFyIHA9byh0LGUsZixkKTtpZighcClyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO2QoInRleHQiKSxkKCJtb2RlIixwPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKGQoImNvbm5lY3RnYXBzIiksbCh0LGUscixmLGQpKSxhLmhhc01hcmtlcnMoZSkmJnModCxlLHIsZixkKSxkKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZ1KHQsZSxyLGQpLGModCxlLHIse2F4aXM6InkifSksYyh0LGUscix7YXhpczoieCIsaW5oZXJpdDoieSJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9lcnJvcmJhcnMvZGVmYXVsdHMiOjYzMSwiLi4vLi4vbGliIjo3MjQsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMDMwLCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTAzMiwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMDM2LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTA0MSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTA0NywiLi9hdHRyaWJ1dGVzIjoxMDY5fV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fTtuLmF0dHJpYnV0ZXM9dCgiLi9hdHRyaWJ1dGVzIiksbi5zdXBwbHlEZWZhdWx0cz10KCIuL2RlZmF1bHRzIiksbi5jb2xvcmJhcj10KCIuLi9zY2F0dGVyL2NvbG9yYmFyIiksbi5ob3ZlclBvaW50cz10KCIuLi9zY2F0dGVyL2hvdmVyIiksbi5jYWxjPXQoIi4vY2FsYyIpLG4ucGxvdD10KCIuL2NvbnZlcnQiKSxuLnNlbGVjdFBvaW50cz10KCIuL3NlbGVjdCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic2NhdHRlcmdsIixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL2dsMmQiKSxuLmNhdGVnb3JpZXM9WyJnbDJkIiwic3ltYm9scyIsImVycm9yQmFyc09LIiwibWFya2VyQ29sb3JzY2FsZSIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxuLm1ldGE9e30sZS5leHBvcnRzPW59LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODA0LCIuLi9zY2F0dGVyL2NvbG9yYmFyIjoxMDI4LCIuLi9zY2F0dGVyL2hvdmVyIjoxMDM0LCIuL2F0dHJpYnV0ZXMiOjEwNjksIi4vY2FsYyI6MTA3MCwiLi9jb252ZXJ0IjoxMDcxLCIuL2RlZmF1bHRzIjoxMDcyLCIuL3NlbGVjdCI6MTA3NH1dLDEwNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYSxvLHM9dC5jZCxsPXQueGF4aXMsdT10LnlheGlzLGM9W10saD1zWzBdLnRyYWNlLGY9c1swXS5fZ2xUcmFjZSxkPWYuc2NlbmUscD0hbi5oYXNNYXJrZXJzKGgpJiYhbi5oYXNUZXh0KGgpO2lmKCEwPT09aC52aXNpYmxlJiYhcCl7aWYoITE9PT1lKWZvcihyPTA7cjxzLmxlbmd0aDtyKyspc1tyXS5kaW09MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspaT1zW3JdLGE9bC5jMnAoaS54KSxvPXUuYzJwKGkueSksZS5jb250YWlucyhbYSxvXSk/KGMucHVzaCh7cG9pbnROdW1iZXI6cix4OmkueCx5OmkueX0pLGkuZGltPTApOmkuZGltPTE7cmV0dXJuIGguc2VsZWN0aW9uPWMsZi51cGRhdGUoaCxzKSxkLmdscGxvdC5zZXREaXJ0eSgpLGN9fX0seyIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1fV0sMTA3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2xheW91dF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yYmFyL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHU9bi5saW5lLGM9bi5tYXJrZXI7ZS5leHBvcnRzPXtsb246bi5sb24sbGF0Om4ubGF0LG1vZGU6bCh7fSxpLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LGkudGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30saS5ob3ZlcnRleHQse30pLGxpbmU6e2NvbG9yOnUuY29sb3Isd2lkdGg6dS53aWR0aH0sY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LG9wYWNpdHk6Yy5vcGFjaXR5LHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsY29sb3I6Yy5jb2xvcixjb2xvcnNjYWxlOmMuY29sb3JzY2FsZSxjYXV0bzpjLmNhdXRvLGNtYXg6Yy5jbWF4LGNtaW46Yy5jbWluLGF1dG9jb2xvcnNjYWxlOmMuYXV0b2NvbG9yc2NhbGUscmV2ZXJzZXNjYWxlOmMucmV2ZXJzZXNjYWxlLHNob3dzY2FsZTpjLnNob3dzY2FsZSxjb2xvcmJhcjpzfSxmaWxsOm4uZmlsbCxmaWxsY29sb3I6aS5maWxsY29sb3IsdGV4dGZvbnQ6YS5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjphLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLGhvdmVyaW5mbzpsKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsInRleHQiLCJuYW1lIl19KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjgyMywiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMDI1LCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiOjEwNjJ9XSwxMDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oKXtyZXR1cm57Z2VvanNvbjp2Lm1ha2VCbGFuaygpLGxheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fX1mdW5jdGlvbiBpKHQsZSl7ZnVuY3Rpb24gcih0LGUpe3JldHVybiBhLm9wYWNpdHkqZSoodC5kaW0/XzoxKX1mdW5jdGlvbiBuKHQscixuLGkpe3ZvaWQgMD09PWVbcl1bbl0mJihlW3JdW25dPWkpLHRbcl09ZVtyXVtuXX12YXIgaSxhPXRbMF0udHJhY2Usbz1hLm1hcmtlcjtnLmhhc0NvbG9yc2NhbGUoYSwibWFya2VyIik/aT1nLm1ha2VDb2xvclNjYWxlRnVuYyhnLmV4dHJhY3RTY2FsZShvLmNvbG9yc2NhbGUsby5jbWluLG8uY21heCkpOkFycmF5LmlzQXJyYXkoby5jb2xvcikmJihpPXAuaWRlbnRpdHkpO3ZhciBzO2IuaXNCdWJibGUoYSkmJihzPXkoYSkpO3ZhciBsO0FycmF5LmlzQXJyYXkoby5vcGFjaXR5KT9sPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsZCh0Lm1vKT8rcC5jb25zdHJhaW4odC5tbywwLDEpOjApfTphLl9oYXNEaW1tZWRQdHMmJihsPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsby5vcGFjaXR5KX0pO2Zvcih2YXIgdT1bXSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBoPXRbY10sbT1oLmxvbmxhdDtpZighZihtKSl7dmFyIHY9e307aWYoaSl7dmFyIHg9aC5tY2M9aShoLm1jKTtuKHYsdyx4LGMpfXMmJm4odixNLHMoaC5tcyksYyksbCYmbih2LGssbChoKSxjKSx1LnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6bX0scHJvcGVydGllczp2fSl9fXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6dX19ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dFswXS50cmFjZSxyPWUubWFya2VyfHx7fSxuPXIuc3ltYm9sLGk9ZS50ZXh0LGE9ImNpcmNsZSIhPT1uP3Uobik6YyxvPWIuaGFzVGV4dChlKT91KGkpOmMscz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBoPXRbbF07ZihoLmxvbmxhdCl8fHMucHVzaCh7dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpoLmxvbmxhdH0scHJvcGVydGllczp7c3ltYm9sOmEoaC5teCksdGV4dDpvKGgudHgpfX0pfXJldHVybnt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6c319ZnVuY3Rpb24gbyh0LGUpe3ZhciByLG49dC5tYXJrZXI7aWYoQXJyYXkuaXNBcnJheShuLmNvbG9yKSl7Zm9yKHZhciBpPU9iamVjdC5rZXlzKGVbd10pLGE9W10sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2EucHVzaChbZVt3XVtzXSxzXSl9cj17cHJvcGVydHk6dyxzdG9wczphfX1lbHNlIHI9bi5jb2xvcjtyZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSl7dmFyIHIsbj10Lm1hcmtlcjtpZihBcnJheS5pc0FycmF5KG4uc2l6ZSkpe2Zvcih2YXIgaT1PYmplY3Qua2V5cyhlW01dKSxhPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXTthLnB1c2goW2VbTV1bc10sK3NdKX1yPXtwcm9wZXJ0eTpNLHN0b3BzOmEuc29ydChoKX19ZWxzZSByPW4uc2l6ZS8yO3JldHVybiByfWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuPXQubWFya2VyO2lmKEFycmF5LmlzQXJyYXkobi5vcGFjaXR5KXx8dC5faGFzRGltbWVkUHRzKXtmb3IodmFyIGk9T2JqZWN0LmtleXMoZVtrXSksYT1bXSxvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBzPWlbb107YS5wdXNoKFtlW2tdW3NdLCtzXSl9cj17cHJvcGVydHk6ayxzdG9wczphLnNvcnQoaCl9fWVsc2Ugcj10Lm9wYWNpdHkqbi5vcGFjaXR5O3JldHVybiByfWZ1bmN0aW9uIHUodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZnVuY3Rpb24odCl7cmV0dXJuIHR9OnQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06Y31mdW5jdGlvbiBjKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdFswXT09PW19dmFyIGQ9dCgiZmFzdC1pc251bWVyaWMiKSxwPXQoIi4uLy4uL2xpYiIpLG09dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSx2PXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIiksZz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSx5PXQoIi4uL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIiksYj10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIikseD10KCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSx3PSJjaXJjbGUtY29sb3IiLE09ImNpcmNsZS1yYWRpdXMiLGs9ImNpcmNsZS1vcGFjaXR5IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPSEwPT09ZS52aXNpYmxlLHU9Im5vbmUiIT09ZS5maWxsLGM9Yi5oYXNMaW5lcyhlKSxoPWIuaGFzTWFya2VycyhlKSxmPWIuaGFzVGV4dChlKSxkPWgmJiJjaXJjbGUiPT09ZS5tYXJrZXIuc3ltYm9sLG09aCYmImNpcmNsZSIhPT1lLm1hcmtlci5zeW1ib2wsZz1uKCkseT1uKCksXz1uKCksQT1uKCksVD17ZmlsbDpnLGxpbmU6eSxjaXJjbGU6XyxzeW1ib2w6QX07aWYoIXIpcmV0dXJuIFQ7dmFyIFM7aWYoKHV8fGMpJiYoUz12LmNhbGNUcmFjZVRvTGluZUNvb3Jkcyh0KSksdSYmKGcuZ2VvanNvbj12Lm1ha2VQb2x5Z29uKFMpLGcubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLHAuZXh0ZW5kRmxhdChnLnBhaW50LHsiZmlsbC1jb2xvciI6ZS5maWxsY29sb3J9KSksYyYmKHkuZ2VvanNvbj12Lm1ha2VMaW5lKFMpLHkubGF5b3V0LnZpc2liaWxpdHk9InZpc2libGUiLHAuZXh0ZW5kRmxhdCh5LnBhaW50LHsibGluZS13aWR0aCI6ZS5saW5lLndpZHRoLCJsaW5lLWNvbG9yIjplLmxpbmUuY29sb3IsImxpbmUtb3BhY2l0eSI6ZS5vcGFjaXR5fSkpLGQpe3ZhciBFPXt9O0Vbd109e30sRVtNXT17fSxFW2tdPXt9LF8uZ2VvanNvbj1pKHQsRSksXy5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIscC5leHRlbmRGbGF0KF8ucGFpbnQseyJjaXJjbGUtb3BhY2l0eSI6bChlLEUpLCJjaXJjbGUtY29sb3IiOm8oZSxFKSwiY2lyY2xlLXJhZGl1cyI6cyhlLEUpfSl9aWYoKG18fGYpJiYoQS5nZW9qc29uPWEodCkscC5leHRlbmRGbGF0KEEubGF5b3V0LHt2aXNpYmlsaXR5OiJ2aXNpYmxlIiwiaWNvbi1pbWFnZSI6IntzeW1ib2x9LTE1IiwidGV4dC1maWVsZCI6Int0ZXh0fSJ9KSxtJiYocC5leHRlbmRGbGF0KEEubGF5b3V0LHsiaWNvbi1zaXplIjplLm1hcmtlci5zaXplLzEwfSkscC5leHRlbmRGbGF0KEEucGFpbnQseyJpY29uLW9wYWNpdHkiOmUub3BhY2l0eSplLm1hcmtlci5vcGFjaXR5LCJpY29uLWNvbG9yIjplLm1hcmtlci5jb2xvcn0pKSxmKSl7dmFyIEw9KGUubWFya2VyfHx7fSkuc2l6ZSxDPXgoZS50ZXh0cG9zaXRpb24sTCk7cC5leHRlbmRGbGF0KEEubGF5b3V0LHsidGV4dC1zaXplIjplLnRleHRmb250LnNpemUsInRleHQtYW5jaG9yIjpDLmFuY2hvciwidGV4dC1vZmZzZXQiOkMub2Zmc2V0fSkscC5leHRlbmRGbGF0KEEucGFpbnQseyJ0ZXh0LWNvbG9yIjplLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOmUub3BhY2l0eX0pfXJldHVybiBUfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjYxNiwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzAzLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3MDQsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzE5LCIuLi8uLi9wbG90cy9tYXBib3gvY29udmVydF90ZXh0X29wdHMiOjgyMCwiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEwNDAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsImZhc3QtaXNudW1lcmljIjoxMjl9XSwxMDc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBuPXIoImxvbiIpfHxbXSxpPXIoImxhdCIpfHxbXSxhPU1hdGgubWluKG4ubGVuZ3RoLGkubGVuZ3RoKTtyZXR1cm4gYTxuLmxlbmd0aCYmKGUubG9uPW4uc2xpY2UoMCxhKSksYTxpLmxlbmd0aCYmKGUubGF0PWkuc2xpY2UoMCxhKSksYX12YXIgaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxvPXQoIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBmKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxjLHIsbil9aWYoIW4odCxlLGYpKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7aWYoZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoIm1vZGUiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixoLGYse25vRGFzaDohMH0pLGYoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSl7byh0LGUscixoLGYse25vTGluZTohMH0pO3ZhciBkPWUubWFya2VyO2QubGluZT17d2lkdGg6MH0sImNpcmNsZSIhPT1kLnN5bWJvbCYmKEFycmF5LmlzQXJyYXkoZC5zaXplKSYmKGQuc2l6ZT1kLnNpemVbMF0pLEFycmF5LmlzQXJyYXkoZC5jb2xvcikmJihkLmNvbG9yPWQuY29sb3JbMF0pKX1hLmhhc1RleHQoZSkmJmwodCxlLGgsZiksZigiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmdSh0LGUscixmKX19LHsiLi4vLi4vbGliIjo3MjQsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwMzYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMDQxLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMDQ1LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEwNDYsIi4vYXR0cmlidXRlcyI6MTA3NX1dLDEwNzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubG9uPWUubG9uLHQubGF0PWUubGF0LHR9fSx7fV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdCsiXHhiMCJ9dmFyIG49dC5ob3ZlcmluZm8uc3BsaXQoIisiKSxpPS0xIT09bi5pbmRleE9mKCJhbGwiKSxhPS0xIT09bi5pbmRleE9mKCJsb24iKSxvPS0xIT09bi5pbmRleE9mKCJsYXQiKSxzPWUubG9ubGF0LGw9W107aWYoaXx8YSYmbz9sLnB1c2goIigiK3Ioc1swXSkrIiwgIityKHNbMV0pKyIpIik6YT9sLnB1c2goImxvbjogIityKHNbMF0pKTpvJiZsLnB1c2goImxhdDogIityKHNbMV0pKSxpfHwtMSE9PW4uaW5kZXhPZigidGV4dCIpKXt2YXIgdTtlLmh0eD91PWUuaHR4OnQuaG92ZXJ0ZXh0P3U9dC5ob3ZlcnRleHQ6ZS50eD91PWUudHg6dC50ZXh0JiYodT10LnRleHQpLEFycmF5LmlzQXJyYXkodSl8fGwucHVzaCh1KX1yZXR1cm4gbC5qb2luKCI8YnI+Iil9dmFyIGk9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGE9dCgiLi4vc2NhdHRlci9nZXRfdHJhY2VfY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHQpe3ZhciBlPXQubG9ubGF0O2lmKGVbMF09PT1vKXJldHVybiAxLzA7dmFyIG49TWF0aC5hYnMoYy5jMnAoZSktYy5jMnAoW3AsZVsxXV0pKSxpPU1hdGguYWJzKGguYzJwKGUpLWguYzJwKFtlWzBdLHJdKSksYT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KG4qbitpKmkpLWEsMS0zL2EpfXZhciBsPXQuY2QsdT1sWzBdLnRyYWNlLGM9dC54YSxoPXQueWEsZj1lPj0wP01hdGguZmxvb3IoKGUrMTgwKS8zNjApOk1hdGguY2VpbCgoZS0xODApLzM2MCksZD0zNjAqZixwPWUtZDtpZihpLmdldENsb3Nlc3QobCxzLHQpLCExIT09dC5pbmRleCl7dmFyIG09bFt0LmluZGV4XSx2PW0ubG9ubGF0LGc9W3ZbMF0rZCx2WzFdXSx5PWMuYzJwKGcpLGI9aC5jMnAoZykseD1tLm1yY3x8MTtyZXR1cm4gdC54MD15LXgsdC54MT15K3gsdC55MD1iLXgsdC55MT1iK3gsdC5jb2xvcj1hKHUsbSksdC5leHRyYVRleHQ9bih1LG0pLFt0XX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY0MywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzA0LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTAzM31dLDEwODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uY2FsYz10KCIuLi9zY2F0dGVyZ2VvL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5ldmVudERhdGE9dCgiLi9ldmVudF9kYXRhIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJtYXBib3giLG4uYmFzZVBsb3RNb2R1bGU9dCgiLi4vLi4vcGxvdHMvbWFwYm94Iiksbi5jYXRlZ29yaWVzPVsibWFwYm94IiwiZ2wiLCJzeW1ib2xzIiwibWFya2VyQ29sb3JzY2FsZSIsInNob3dMZWdlbmQiLCJzY2F0dGVybGlrZSJdLG4ubWV0YT17fSxlLmV4cG9ydHM9bn0seyIuLi8uLi9wbG90cy9tYXBib3giOjgyMSwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi4vc2NhdHRlcmdlby9jYWxjIjoxMDYzLCIuL2F0dHJpYnV0ZXMiOjEwNzUsIi4vZGVmYXVsdHMiOjEwNzcsIi4vZXZlbnRfZGF0YSI6MTA3OCwiLi9ob3ZlciI6MTA3OSwiLi9wbG90IjoxMDgxLCIuL3NlbGVjdCI6MTA4Mn1dLDEwODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMubWFwYm94PXQsdGhpcy5tYXA9dC5tYXAsdGhpcy51aWQ9ZSx0aGlzLmlkU291cmNlRmlsbD1lKyItc291cmNlLWZpbGwiLHRoaXMuaWRTb3VyY2VMaW5lPWUrIi1zb3VyY2UtbGluZSIsdGhpcy5pZFNvdXJjZUNpcmNsZT1lKyItc291cmNlLWNpcmNsZSIsdGhpcy5pZFNvdXJjZVN5bWJvbD1lKyItc291cmNlLXN5bWJvbCIsdGhpcy5pZExheWVyRmlsbD1lKyItbGF5ZXItZmlsbCIsdGhpcy5pZExheWVyTGluZT1lKyItbGF5ZXItbGluZSIsdGhpcy5pZExheWVyQ2lyY2xlPWUrIi1sYXllci1jaXJjbGUiLHRoaXMuaWRMYXllclN5bWJvbD1lKyItbGF5ZXItc3ltYm9sIix0aGlzLm1hcGJveC5pbml0U291cmNlKHRoaXMuaWRTb3VyY2VGaWxsKSx0aGlzLm1hcGJveC5pbml0U291cmNlKHRoaXMuaWRTb3VyY2VMaW5lKSx0aGlzLm1hcGJveC5pbml0U291cmNlKHRoaXMuaWRTb3VyY2VDaXJjbGUpLHRoaXMubWFwYm94LmluaXRTb3VyY2UodGhpcy5pZFNvdXJjZVN5bWJvbCksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllckZpbGwsc291cmNlOnRoaXMuaWRTb3VyY2VGaWxsLHR5cGU6ImZpbGwifSksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllckxpbmUsc291cmNlOnRoaXMuaWRTb3VyY2VMaW5lLHR5cGU6ImxpbmUifSksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllckNpcmNsZSxzb3VyY2U6dGhpcy5pZFNvdXJjZUNpcmNsZSx0eXBlOiJjaXJjbGUifSksdGhpcy5tYXAuYWRkTGF5ZXIoe2lkOnRoaXMuaWRMYXllclN5bWJvbCxzb3VyY2U6dGhpcy5pZFNvdXJjZVN5bWJvbCx0eXBlOiJzeW1ib2wifSl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4idmlzaWJsZSI9PT10LmxheW91dC52aXNpYmlsaXR5fXZhciBhPXQoIi4vY29udmVydCIpLG89bi5wcm90b3R5cGU7by51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tYXBib3gscj1hKHQpO2Uuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJGaWxsLCJzZXRMYXlvdXRQcm9wZXJ0eSIsci5maWxsLmxheW91dCksZS5zZXRPcHRpb25zKHRoaXMuaWRMYXllckxpbmUsInNldExheW91dFByb3BlcnR5IixyLmxpbmUubGF5b3V0KSxlLnNldE9wdGlvbnModGhpcy5pZExheWVyQ2lyY2xlLCJzZXRMYXlvdXRQcm9wZXJ0eSIsci5jaXJjbGUubGF5b3V0KSxlLnNldE9wdGlvbnModGhpcy5pZExheWVyU3ltYm9sLCJzZXRMYXlvdXRQcm9wZXJ0eSIsci5zeW1ib2wubGF5b3V0KSxpKHIuZmlsbCkmJihlLnNldFNvdXJjZURhdGEodGhpcy5pZFNvdXJjZUZpbGwsci5maWxsLmdlb2pzb24pLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJGaWxsLCJzZXRQYWludFByb3BlcnR5IixyLmZpbGwucGFpbnQpKSxpKHIubGluZSkmJihlLnNldFNvdXJjZURhdGEodGhpcy5pZFNvdXJjZUxpbmUsci5saW5lLmdlb2pzb24pLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJMaW5lLCJzZXRQYWludFByb3BlcnR5IixyLmxpbmUucGFpbnQpKSxpKHIuY2lyY2xlKSYmKGUuc2V0U291cmNlRGF0YSh0aGlzLmlkU291cmNlQ2lyY2xlLHIuY2lyY2xlLmdlb2pzb24pLGUuc2V0T3B0aW9ucyh0aGlzLmlkTGF5ZXJDaXJjbGUsInNldFBhaW50UHJvcGVydHkiLHIuY2lyY2xlLnBhaW50KSksaShyLnN5bWJvbCkmJihlLnNldFNvdXJjZURhdGEodGhpcy5pZFNvdXJjZVN5bWJvbCxyLnN5bWJvbC5nZW9qc29uKSxlLnNldE9wdGlvbnModGhpcy5pZExheWVyU3ltYm9sLCJzZXRQYWludFByb3BlcnR5IixyLnN5bWJvbC5wYWludCkpLHRbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30sby5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXA7dC5yZW1vdmVMYXllcih0aGlzLmlkTGF5ZXJGaWxsKSx0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllckxpbmUpLHQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyQ2lyY2xlKSx0LnJlbW92ZUxheWVyKHRoaXMuaWRMYXllclN5bWJvbCksdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZUZpbGwpLHQucmVtb3ZlU291cmNlKHRoaXMuaWRTb3VyY2VMaW5lKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlQ2lyY2xlKSx0LnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlU3ltYm9sKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxpPW5ldyBuKHQsci51aWQpO3JldHVybiBpLnVwZGF0ZShlKSxpfX0seyIuL2NvbnZlcnQiOjEwNzZ9XSwxMDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzLGw9dC5jZCx1PXQueGF4aXMsYz10LnlheGlzLGg9W10sZj1sWzBdLnRyYWNlO2lmKGYuX2hhc0RpbW1lZFB0cz0hMSwhMD09PWYudmlzaWJsZSYmbi5oYXNNYXJrZXJzKGYpKXtpZighMT09PWUpZm9yKHM9MDtzPGwubGVuZ3RoO3MrKylsW3NdLmRpbT0wO2Vsc2UgZm9yKHM9MDtzPGwubGVuZ3RoO3MrKylyPWxbc10saT1yLmxvbmxhdCxhPXUuYzJwKGkpLG89Yy5jMnAoaSksZS5jb250YWlucyhbYSxvXSk/KGYuX2hhc0RpbW1lZFB0cz0hMCxoLnB1c2goe3BvaW50TnVtYmVyOnMsbG9uOmlbMF0sbGF0OmlbMV19KSxyLmRpbT0wKTpyLmRpbT0xO3JldHVybiBmLl9nbFRyYWNlLnVwZGF0ZShsKSxofX19LHsiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NX1dLDEwODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY29sb3JfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PW4ubWFya2VyLGM9bi5saW5lLGg9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxjOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sbW9kZTpsKHt9LG4ubW9kZSx7ZGZsdDoibWFya2VycyJ9KSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6Yy5jb2xvcix3aWR0aDpjLndpZHRoLGRhc2g6cyxzaGFwZTpsKHt9LGMuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmMuc21vb3RoaW5nfSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGNsaXBvbmF4aXM6bi5jbGlwb25heGlzLGZpbGw6bCh7fSxuLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXX0pLGZpbGxjb2xvcjpuLmZpbGxjb2xvcixtYXJrZXI6bCh7fSx7c3ltYm9sOnUuc3ltYm9sLG9wYWNpdHk6dS5vcGFjaXR5LG1heGRpc3BsYXllZDp1Lm1heGRpc3BsYXllZCxzaXplOnUuc2l6ZSxzaXplcmVmOnUuc2l6ZXJlZixzaXplbWluOnUuc2l6ZW1pbixzaXplbW9kZTp1LnNpemVtb2RlLGxpbmU6bCh7fSx7d2lkdGg6aC53aWR0aH0sYSgibWFya2VyIi5saW5lKSksZ3JhZGllbnQ6dS5ncmFkaWVudH0sYSgibWFya2VyIikse3Nob3dzY2FsZTp1LnNob3dzY2FsZSxjb2xvcmJhcjpvfSksdGV4dGZvbnQ6bi50ZXh0Zm9udCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24sCmhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwiYyIsInRleHQiLCJuYW1lIl19KSxob3Zlcm9uOm4uaG92ZXJvbn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jb2xvcl9hdHRyaWJ1dGVzIjo2MDksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2MjUsIi4uLy4uL2xpYi9leHRlbmQiOjcxNSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6NzYyLCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjEwMjV9XSwxMDg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxzPXQoIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbD1bImEiLCJiIiwiYyJdLHU9e2E6WyJiIiwiYyJdLGI6WyJhIiwiYyJdLGM6WyJhIiwiYiJdfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLGgsZixkLHAsbT10Ll9mdWxsTGF5b3V0W2Uuc3VicGxvdF0sdj1tLnN1bSxnPWUuc3VtfHx2O2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspaWYoaD1sW3JdLCFlW2hdKXtmb3IoZD1lW3VbaF1bMF1dLHA9ZVt1W2hdWzFdXSxmPW5ldyBBcnJheShkLmxlbmd0aCksYz0wO2M8ZC5sZW5ndGg7YysrKWZbY109Zy1kW2NdLXBbY107ZVtoXT1mfXZhciB5LGIseCxfLHcsTSxrPWUuYS5sZW5ndGgsQT1uZXcgQXJyYXkoayk7Zm9yKHI9MDtyPGs7cisrKXk9ZS5hW3JdLGI9ZS5iW3JdLHg9ZS5jW3JdLG4oeSkmJm4oYikmJm4oeCk/KHk9K3ksYj0rYix4PSt4LF89di8oeStiK3gpLDEhPT1fJiYoeSo9XyxiKj1fLHgqPV8pLE09eSx3PXgtYixBW3JdPXt4OncseTpNLGE6eSxiOmIsYzp4fSk6QVtyXT17eDohMSx5OiExfTt2YXIgVCxTO2lmKGEuaGFzTWFya2VycyhlKSYmKFQ9ZS5tYXJrZXIsUz1ULnNpemUsQXJyYXkuaXNBcnJheShTKSkpe3ZhciBFPXt0eXBlOiJsaW5lYXIifTtpLnNldENvbnZlcnQoRSksUz1FLm1ha2VDYWxjZGF0YShlLm1hcmtlciwic2l6ZSIpLFMubGVuZ3RoPmsmJlMuc3BsaWNlKGssUy5sZW5ndGgtayl9cmV0dXJuIG8oZSkscyhBLGUpLEF9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo3NjQsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDI0LCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTAyOSwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTA0NSwiZmFzdC1pc251bWVyaWMiOjEyOX1dLDEwODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksaD10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7ZnVuY3Rpb24gZChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsaCxyLGkpfXZhciBwLG09ZCgiYSIpLHY9ZCgiYiIpLGc9ZCgiYyIpO2lmKG0/KHA9bS5sZW5ndGgsdj8ocD1NYXRoLm1pbihwLHYubGVuZ3RoKSxnJiYocD1NYXRoLm1pbihwLGcubGVuZ3RoKSkpOnA9Zz9NYXRoLm1pbihwLGcubGVuZ3RoKTowKTp2JiZnJiYocD1NYXRoLm1pbih2Lmxlbmd0aCxnLmxlbmd0aCkpLCFwKXJldHVybiB2b2lkKGUudmlzaWJsZT0hMSk7bSYmcDxtLmxlbmd0aCYmKGUuYT1tLnNsaWNlKDAscCkpLHYmJnA8di5sZW5ndGgmJihlLmI9di5zbGljZSgwLHApKSxnJiZwPGcubGVuZ3RoJiYoZS5jPWcuc2xpY2UoMCxwKSksZCgic3VtIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLGQoIm1vZGUiLHA8aS5QVFNfTElORVNPTkxZPyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxhLmhhc0xpbmVzKGUpJiYocyh0LGUscixmLGQpLGwodCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGEuaGFzTWFya2VycyhlKSYmbyh0LGUscixmLGQse2dyYWRpZW50OiEwfSksYS5oYXNUZXh0KGUpJiZ1KHQsZSxmLGQpO3ZhciB5PVtdOyhhLmhhc01hcmtlcnMoZSl8fGEuaGFzVGV4dChlKSkmJihkKCJtYXJrZXIubWF4ZGlzcGxheWVkIikseS5wdXNoKCJwb2ludHMiKSksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIsZCksYS5oYXNMaW5lcyhlKXx8bCh0LGUsZCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8eS5wdXNoKCJmaWxscyIpLGQoImhvdmVyb24iLHkuam9pbigiKyIpfHwicG9pbnRzIiksZCgiY2xpcG9uYXhpcyIpfX0seyIuLi8uLi9saWIiOjcyNCwiLi4vc2NhdHRlci9jb25zdGFudHMiOjEwMzAsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMDMyLCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEwMzYsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTAzOCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEwNDEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEwNDUsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTA0NiwiLi9hdHRyaWJ1dGVzIjoxMDgzfV0sMTA4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtmdW5jdGlvbiBvKHQsZSl7Zy5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitpLnRpY2tUZXh0KHQsZSwiaG92ZXIiKS50ZXh0KX12YXIgcz1uKHQsZSxyLGEpO2lmKHMmJiExIT09c1swXS5pbmRleCl7dmFyIGw9c1swXTtpZih2b2lkIDA9PT1sLmluZGV4KXt2YXIgdT0xLWwueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLGg9Yyp1LzIsZj1jLWg7cmV0dXJuIGwueDA9TWF0aC5tYXgoTWF0aC5taW4obC54MCxmKSxoKSxsLngxPU1hdGgubWF4KE1hdGgubWluKGwueDEsZiksaCksc312YXIgZD1sLmNkW2wuaW5kZXhdO2wuYT1kLmEsbC5iPWQuYixsLmM9ZC5jLGwueExhYmVsVmFsPXZvaWQgMCxsLnlMYWJlbFZhbD12b2lkIDA7dmFyIHA9bC50cmFjZSxtPXAuX3Rlcm5hcnksdj1wLmhvdmVyaW5mby5zcGxpdCgiKyIpLGc9W107cmV0dXJuLTEhPT12LmluZGV4T2YoImFsbCIpJiYodj1bImEiLCJiIiwiYyJdKSwtMSE9PXYuaW5kZXhPZigiYSIpJiZvKG0uYWF4aXMsZC5hKSwtMSE9PXYuaW5kZXhPZigiYiIpJiZvKG0uYmF4aXMsZC5iKSwtMSE9PXYuaW5kZXhPZigiYyIpJiZvKG0uY2F4aXMsZC5jKSxsLmV4dHJhVGV4dD1nLmpvaW4oIjxicj4iKSxzfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjc2NCwiLi4vc2NhdHRlci9ob3ZlciI6MTAzNH1dLDEwODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307bi5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLG4uc3VwcGx5RGVmYXVsdHM9dCgiLi9kZWZhdWx0cyIpLG4uY29sb3JiYXI9dCgiLi4vc2NhdHRlci9jb2xvcmJhciIpLG4uY2FsYz10KCIuL2NhbGMiKSxuLnBsb3Q9dCgiLi9wbG90Iiksbi5zdHlsZT10KCIuL3N0eWxlIiksbi5ob3ZlclBvaW50cz10KCIuL2hvdmVyIiksbi5zZWxlY3RQb2ludHM9dCgiLi9zZWxlY3QiKSxuLm1vZHVsZVR5cGU9InRyYWNlIixuLm5hbWU9InNjYXR0ZXJ0ZXJuYXJ5IixuLmJhc2VQbG90TW9kdWxlPXQoIi4uLy4uL3Bsb3RzL3Rlcm5hcnkiKSxuLmNhdGVnb3JpZXM9WyJ0ZXJuYXJ5Iiwic3ltYm9scyIsIm1hcmtlckNvbG9yc2NhbGUiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL3Rlcm5hcnkiOjgzNSwiLi4vc2NhdHRlci9jb2xvcmJhciI6MTAyOCwiLi9hdHRyaWJ1dGVzIjoxMDgzLCIuL2NhbGMiOjEwODQsIi4vZGVmYXVsdHMiOjEwODUsIi4vaG92ZXIiOjEwODYsIi4vcGxvdCI6MTA4OCwiLi9zZWxlY3QiOjEwODksIi4vc3R5bGUiOjEwOTB9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucGxvdENvbnRhaW5lcjtyLnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2Zvcih2YXIgaT17eGF4aXM6dC54YXhpcyx5YXhpczp0LnlheGlzLHBsb3Q6cixsYXllckNsaXBJZDp0Ll9oYXNDbGlwT25BeGlzRmFsc2U/dC5jbGlwSWRSZWxhdGl2ZTpudWxsfSxhPTA7YTxlLmxlbmd0aDthKyspZVthXVswXS50cmFjZS5fdGVybmFyeT10O24odC5ncmFwaERpdixpLGUpfX0seyIuLi9zY2F0dGVyL3Bsb3QiOjEwNDJ9XSwxMDg5OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzEwNjBdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyIuLi9zY2F0dGVyL3NlbGVjdCI6MTA0MyxkdXA6MTA2MH1dLDEwOTA6W2Z1bmN0aW9uKHQsZSxyKXthcmd1bWVudHNbNF1bMTA2MV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4uL3NjYXR0ZXIvc3R5bGUiOjEwNDQsZHVwOjEwNjF9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJue3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fWZ1bmN0aW9uIGkodCl7cmV0dXJue3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHByb2plY3Q6e3g6bigieCIpLHk6bigieSIpLHo6bigieiIpfSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZX0sdXNlY29sb3JtYXA6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLG1heDoxNixkZmx0OjJ9LGhpZ2hsaWdodDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0saGlnaGxpZ2h0Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmV9LGhpZ2hsaWdodHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLG1heDoxNixkZmx0OjJ9fX12YXIgYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxzdXJmYWNlY29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSxjYXV0bzpvLnphdXRvLGNtaW46by56bWluLGNtYXg6by56bWF4LGNvbG9yc2NhbGU6by5jb2xvcnNjYWxlLGF1dG9jb2xvcnNjYWxlOmwoe30sby5hdXRvY29sb3JzY2FsZSx7ZGZsdDohMX0pLHJldmVyc2VzY2FsZTpvLnJldmVyc2VzY2FsZSxzaG93c2NhbGU6by5zaG93c2NhbGUsY29sb3JiYXI6cyxjb250b3Vyczp7eDppKCJ4IikseTppKCJ5IiksejppKCJ6Iil9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxvLnphdXRvLHt9KSx6bWluOmwoe30sby56bWluLHt9KSx6bWF4Omwoe30sby56bWF4LHt9KX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYwMiwiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9hdHRyaWJ1dGVzIjo2MDMsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2MDcsIi4uLy4uL2xpYi9leHRlbmQiOjcxNX1dLDEwOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlLnN1cmZhY2Vjb2xvcj9uKGUsZS5zdXJmYWNlY29sb3IsIiIsImMiKTpuKGUsZS56LCIiLCJjIil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2MDh9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JiYXIvZHJhdyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsbD0iY2IiK3IudWlkLHU9ci5jbWluLGM9ci5jbWF4LGg9ci5zdXJmYWNlY29sb3J8fHIuejtpZihuKHUpfHwodT1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxoKSksbihjKXx8KGM9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsaCkpLHQuX2Z1bGxMYXlvdXQuX2luZm9sYXllci5zZWxlY3RBbGwoIi4iK2wpLnJlbW92ZSgpLCFyLnNob3dzY2FsZSlyZXR1cm4gdm9pZCBhLmF1dG9NYXJnaW4odCxsKTt2YXIgZj1lWzBdLnQuY2I9cyh0LGwpLGQ9by5tYWtlQ29sb3JTY2FsZUZ1bmMoby5leHRyYWN0U2NhbGUoci5jb2xvcnNjYWxlLHUsYykse25vTnVtZXJpY0NoZWNrOiEwfSk7Zi5maWxsY29sb3IoZCkuZmlsbGxldmVscyh7c3RhcnQ6dSxlbmQ6YyxzaXplOihjLXUpLzI1NH0pLm9wdGlvbnMoci5jb2xvcmJhcikoKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcmJhci9kcmF3Ijo2MDUsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjE2LCIuLi8uLi9saWIiOjcyNCwiLi4vLi4vcGxvdHMvcGxvdHMiOjgyNywiZmFzdC1pc251bWVyaWMiOjEyOX1dLDEwOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dGhpcy5zY2VuZT10LHRoaXMudWlkPXIsdGhpcy5zdXJmYWNlPWUsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj1bITEsITEsITFdLHRoaXMuZGF0YVNjYWxlPTF9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0xKSx0Lm1hcChmdW5jdGlvbih0KXt2YXIgcj10WzBdLG49cCh0WzFdKSxpPW4udG9SZ2IoKTtyZXR1cm57aW5kZXg6cixyZ2I6W2kucixpLmcsaS5iLGVdfX0pfWZ1bmN0aW9uIGEodCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119ZnVuY3Rpb24gbyh0KXt2YXIgZT10LnNoYXBlLHI9W2VbMF0rMixlWzFdKzJdLG49YyhuZXcgRmxvYXQzMkFycmF5KHJbMF0qclsxXSkscik7cmV0dXJuIGQuYXNzaWduKG4ubG8oMSwxKS5oaShlWzBdLGVbMV0pLHQpLGQuYXNzaWduKG4ubG8oMSkuaGkoZVswXSwxKSx0LmhpKGVbMF0sMSkpLGQuYXNzaWduKG4ubG8oMSxyWzFdLTEpLmhpKGVbMF0sMSksdC5sbygwLGVbMV0tMSkuaGkoZVswXSwxKSksZC5hc3NpZ24obi5sbygwLDEpLmhpKDEsZVsxXSksdC5oaSgxKSksZC5hc3NpZ24obi5sbyhyWzBdLTEsMSkuaGkoMSxlWzFdKSx0LmxvKGVbMF0tMSkpLG4uc2V0KDAsMCx0LmdldCgwLDApKSxuLnNldCgwLHJbMV0tMSx0LmdldCgwLGVbMV0tMSkpLG4uc2V0KHJbMF0tMSwwLHQuZ2V0KGVbMF0tMSwwKSksbi5zZXQoclswXS0xLHJbMV0tMSx0LmdldChlWzBdLTEsZVsxXS0xKSksbn1mdW5jdGlvbiBzKHQpe3ZhciBlPU1hdGgubWF4KHRbMF0uc2hhcGVbMF0sdFswXS5zaGFwZVsxXSk7aWYoZTx2KXtmb3IodmFyIHI9di9lLG49WzB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzBdKnIrMSksMHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMV0qcisxKV0saT1uWzBdKm5bMV0sYT0wO2E8dC5sZW5ndGg7KythKXt2YXIgcz1vKHRbYV0pLGw9YyhuZXcgRmxvYXQzMkFycmF5KGkpLG4pO2gobCxzLFtyLDAsMCwwLHIsMCwwLDAsMV0pLHRbYV09bH1yZXR1cm4gcn1yZXR1cm4gMX1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT11KHtnbDpyfSksYT1uZXcgbih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfXZhciB1PXQoImdsLXN1cmZhY2UzZCIpLGM9dCgibmRhcnJheSIpLGg9dCgibmRhcnJheS1ob21vZ3JhcGh5IiksZj10KCJuZGFycmF5LWZpbGwiKSxkPXQoIm5kYXJyYXktb3BzIikscD10KCJ0aW55Y29sb3IyIiksbT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksdj0xMjgsZz1uLnByb3RvdHlwZTtnLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLnN1cmZhY2Upe3ZhciBlPXQuaW5kZXg9W01hdGgubWluKDB8TWF0aC5yb3VuZCh0LmRhdGEuaW5kZXhbMF0vdGhpcy5kYXRhU2NhbGUtMSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLE1hdGgubWluKDB8TWF0aC5yb3VuZCh0LmRhdGEuaW5kZXhbMV0vdGhpcy5kYXRhU2NhbGUtMSksdGhpcy5kYXRhLnoubGVuZ3RoLTEpXSxyPVswLDAsMF07QXJyYXkuaXNBcnJheSh0aGlzLmRhdGEueFswXSk/clswXT10aGlzLmRhdGEueFtlWzFdXVtlWzBdXTpyWzBdPXRoaXMuZGF0YS54W2VbMF1dLEFycmF5LmlzQXJyYXkodGhpcy5kYXRhLnlbMF0pP3JbMV09dGhpcy5kYXRhLnlbZVsxXV1bZVswXV06clsxXT10aGlzLmRhdGEueVtlWzFdXSxyWzJdPXRoaXMuZGF0YS56W2VbMV1dW2VbMF1dLHQudHJhY2VDb29yZGluYXRlPXI7dmFyIG49dGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQ7dC5kYXRhQ29vcmRpbmF0ZT1bbi54YXhpcy5kMmwoclswXSwwLHRoaXMuZGF0YS54Y2FsZW5kYXIpKnRoaXMuc2NlbmUuZGF0YVNjYWxlWzBdLG4ueWF4aXMuZDJsKHJbMV0sMCx0aGlzLmRhdGEueWNhbGVuZGFyKSp0aGlzLnNjZW5lLmRhdGFTY2FsZVsxXSxuLnpheGlzLmQybChyWzJdLDAsdGhpcy5kYXRhLnpjYWxlbmRhcikqdGhpcy5zY2VuZS5kYXRhU2NhbGVbMl1dO3ZhciBpPXRoaXMuZGF0YS50ZXh0O3JldHVybiBpJiZpW2VbMV1dJiZ2b2lkIDAhPT1pW2VbMV1dW2VbMF1dP3QudGV4dExhYmVsPWlbZVsxXV1bZVswXV06dC50ZXh0TGFiZWw9IiIsdC5kYXRhLmRhdGFDb29yZGluYXRlPXQuZGF0YUNvb3JkaW5hdGUuc2xpY2UoKSx0aGlzLnN1cmZhY2UuaGlnaGxpZ2h0KHQuZGF0YSksdGhpcy5zY2VuZS5nbHBsb3Quc3Bpa2VzLnBvc2l0aW9uPXQuZGF0YUNvb3JkaW5hdGUsITB9fSxnLnNldENvbnRvdXJMZXZlbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W1tdLFtdLFtdXSxlPSExLHI9MDtyPDM7KytyKXRoaXMuc2hvd0NvbnRvdXJbcl0mJihlPSEwLHRbcl09dGhpcy5zY2VuZS5jb250b3VyTGV2ZWxzW3JdKTtlJiZ0aGlzLnN1cmZhY2UudXBkYXRlKHtsZXZlbHM6dH0pfSxnLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuc2NlbmUsbj1yLmZ1bGxTY2VuZUxheW91dCxvPXRoaXMuc3VyZmFjZSxsPXQub3BhY2l0eSx1PWkodC5jb2xvcnNjYWxlLGwpLGg9dC56LGQ9dC54LHA9dC55LHY9bi54YXhpcyxnPW4ueWF4aXMseT1uLnpheGlzLGI9ci5kYXRhU2NhbGUseD1oWzBdLmxlbmd0aCxfPWgubGVuZ3RoLHc9W2MobmV3IEZsb2F0MzJBcnJheSh4Kl8pLFt4LF9dKSxjKG5ldyBGbG9hdDMyQXJyYXkoeCpfKSxbeCxfXSksYyhuZXcgRmxvYXQzMkFycmF5KHgqXyksW3gsX10pXSxNPXdbMF0saz13WzFdLEE9ci5jb250b3VyTGV2ZWxzO3RoaXMuZGF0YT10O3ZhciBUPXQueGNhbGVuZGFyLFM9dC55Y2FsZW5kYXIsRT10LnpjYWxlbmRhcjtmKHdbMl0sZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kMmwoaFtlXVt0XSwwLEUpKmJbMl19KSxBcnJheS5pc0FycmF5KGRbMF0pP2YoTSxmdW5jdGlvbih0LGUpe3JldHVybiB2LmQybChkW2VdW3RdLDAsVCkqYlswXX0pOmYoTSxmdW5jdGlvbih0KXtyZXR1cm4gdi5kMmwoZFt0XSwwLFQpKmJbMF19KSxBcnJheS5pc0FycmF5KHBbMF0pP2YoayxmdW5jdGlvbih0LGUpe3JldHVybiBnLmQybChwW2VdW3RdLDAsUykqYlsxXX0pOmYoayxmdW5jdGlvbih0LGUpe3JldHVybiBnLmQybChwW2VdLDAsUykqYlsxXX0pO3ZhciBMPXtjb2xvcm1hcDp1LGxldmVsczpbW10sW10sW11dLHNob3dDb250b3VyOlshMCwhMCwhMF0sc2hvd1N1cmZhY2U6IXQuaGlkZXN1cmZhY2UsY29udG91clByb2plY3Q6W1shMSwhMSwhMV0sWyExLCExLCExXSxbITEsITEsITFdXSxjb250b3VyV2lkdGg6WzEsMSwxXSxjb250b3VyQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxjb250b3VyVGludDpbMSwxLDFdLGR5bmFtaWNDb2xvcjpbWzEsMSwxLDFdLFsxLDEsMSwxXSxbMSwxLDEsMV1dLGR5bmFtaWNXaWR0aDpbMSwxLDFdLGR5bmFtaWNUaW50OlsxLDEsMV0sb3BhY2l0eTp0Lm9wYWNpdHl9O2lmKEwuaW50ZW5zaXR5Qm91bmRzPVt0LmNtaW4sdC5jbWF4XSx0LnN1cmZhY2Vjb2xvcil7dmFyIEM9YyhuZXcgRmxvYXQzMkFycmF5KHgqXyksW3gsX10pO2YoQyxmdW5jdGlvbihlLHIpe3JldHVybiB0LnN1cmZhY2Vjb2xvcltyXVtlXX0pLHcucHVzaChDKX1lbHNlIEwuaW50ZW5zaXR5Qm91bmRzWzBdKj1iWzJdLEwuaW50ZW5zaXR5Qm91bmRzWzFdKj1iWzJdO3RoaXMuZGF0YVNjYWxlPXModyksdC5zdXJmYWNlY29sb3ImJihMLmludGVuc2l0eT13LnBvcCgpKTt2YXIgej1bITAsITAsITBdLEk9WyJ4IiwieSIsInoiXTtmb3IoZT0wO2U8MzsrK2Upe3ZhciBEPXQuY29udG91cnNbSVtlXV07eltlXT1ELmhpZ2hsaWdodCxMLnNob3dDb250b3VyW2VdPUQuc2hvd3x8RC5oaWdobGlnaHQsTC5zaG93Q29udG91cltlXSYmKEwuY29udG91clByb2plY3RbZV09W0QucHJvamVjdC54LEQucHJvamVjdC55LEQucHJvamVjdC56XSxELnNob3c/KHRoaXMuc2hvd0NvbnRvdXJbZV09ITAsTC5sZXZlbHNbZV09QVtlXSxvLmhpZ2hsaWdodENvbG9yW2VdPUwuY29udG91ckNvbG9yW2VdPW0oRC5jb2xvciksRC51c2Vjb2xvcm1hcD9vLmhpZ2hsaWdodFRpbnRbZV09TC5jb250b3VyVGludFtlXT0wOm8uaGlnaGxpZ2h0VGludFtlXT1MLmNvbnRvdXJUaW50W2VdPTEsTC5jb250b3VyV2lkdGhbZV09RC53aWR0aCk6dGhpcy5zaG93Q29udG91cltlXT0hMSxELmhpZ2hsaWdodCYmKEwuZHluYW1pY0NvbG9yW2VdPW0oRC5oaWdobGlnaHRjb2xvciksTC5keW5hbWljV2lkdGhbZV09RC5oaWdobGlnaHR3aWR0aCkpfWEodSkmJihMLnZlcnRleENvbG9yPSEwKSxMLmNvb3Jkcz13LG8udXBkYXRlKEwpLG8udmlzaWJsZT10LnZpc2libGUsby5lbmFibGVEeW5hbWljPXosby5zbmFwVG9EYXRhPSEwLCJsaWdodGluZyJpbiB0JiYoby5hbWJpZW50TGlnaHQ9dC5saWdodGluZy5hbWJpZW50LG8uZGlmZnVzZUxpZ2h0PXQubGlnaHRpbmcuZGlmZnVzZSxvLnNwZWN1bGFyTGlnaHQ9dC5saWdodGluZy5zcGVjdWxhcixvLnJvdWdobmVzcz10LmxpZ2h0aW5nLnJvdWdobmVzcyxvLmZyZXNuZWw9dC5saWdodGluZy5mcmVzbmVsKSwibGlnaHRwb3NpdGlvbiJpbiB0JiYoby5saWdodFBvc2l0aW9uPVt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0pLGwmJmw8MSYmKG8uc3VwcG9ydHNUcmFuc3BhcmVuY3k9ITApfSxnLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zdXJmYWNlKSx0aGlzLnN1cmZhY2UuZGlzcG9zZSgpfSxlLmV4cG9ydHM9bH0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo3NDIsImdsLXN1cmZhY2UzZCI6MjY0LG5kYXJyYXk6NDY1LCJuZGFycmF5LWZpbGwiOjQ1NSwibmRhcnJheS1ob21vZ3JhcGh5Ijo0NTcsIm5kYXJyYXktb3BzIjo0NTksdGlueWNvbG9yMjo1MzJ9XSwxMDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlLHIpe2UgaW4gdCYmIShyIGluIHQpJiYodFtyXT10W2VdKX12YXIgaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiB1KHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxzLHIsbil9dmFyIGMsaCxmPXUoInoiKTtpZighZilyZXR1cm4gdm9pZChlLnZpc2libGU9ITEpO3ZhciBkPWZbMF0ubGVuZ3RoLHA9Zi5sZW5ndGg7aWYodSgieCIpLHUoInkiKSxpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLGwpLCFBcnJheS5pc0FycmF5KGUueCkpZm9yKGUueD1bXSxjPTA7YzxkOysrYyllLnhbY109YztpZih1KCJ0ZXh0IiksIUFycmF5LmlzQXJyYXkoZS55KSlmb3IoZS55PVtdLGM9MDtjPHA7KytjKWUueVtjXT1jO1sibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJoaWRlc3VyZmFjZSIsIm9wYWNpdHkiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3UodCl9KTt2YXIgbT11KCJzdXJmYWNlY29sb3IiKTt1KCJjb2xvcnNjYWxlIik7dmFyIHY9WyJ4IiwieSIsInoiXTtmb3IoYz0wO2M8MzsrK2Mpe3ZhciBnPSJjb250b3Vycy4iK3ZbY10seT11KGcrIi5zaG93IiksYj11KGcrIi5oaWdobGlnaHQiKTtpZih5fHxiKWZvcihoPTA7aDwzOysraCl1KGcrIi5wcm9qZWN0LiIrdltoXSk7eSYmKHUoZysiLmNvbG9yIiksdShnKyIud2lkdGgiKSx1KGcrIi51c2Vjb2xvcm1hcCIpKSxiJiYodShnKyIuaGlnaGxpZ2h0Y29sb3IiKSx1KGcrIi5oaWdobGlnaHR3aWR0aCIpKX1tfHwobih0LCJ6bWluIiwiY21pbiIpLG4odCwiem1heCIsImNtYXgiKSxuKHQsInphdXRvIiwiY2F1dG8iKSksbyh0LGUsbCx1LHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2MTEsIi4uLy4uL2xpYiI6NzI0LCIuLi8uLi9yZWdpc3RyeSI6ODQyLCIuL2F0dHJpYnV0ZXMiOjEwOTF9XSwxMDk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O24uYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxuLnN1cHBseURlZmF1bHRzPXQoIi4vZGVmYXVsdHMiKSxuLmNvbG9yYmFyPXQoIi4vY29sb3JiYXIiKSxuLmNhbGM9dCgiLi9jYWxjIiksbi5wbG90PXQoIi4vY29udmVydCIpLG4ubW9kdWxlVHlwZT0idHJhY2UiLG4ubmFtZT0ic3VyZmFjZSIsbi5iYXNlUGxvdE1vZHVsZT10KCIuLi8uLi9wbG90cy9nbDNkIiksbi5jYXRlZ29yaWVzPVsiZ2wzZCIsIjJkTWFwIiwibm9PcGFjaXR5Il0sbi5tZXRhPXt9LGUuZXhwb3J0cz1ufSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjgwNywiLi9hdHRyaWJ1dGVzIjoxMDkxLCIuL2NhbGMiOjEwOTIsIi4vY29sb3JiYXIiOjEwOTMsIi4vY29udmVydCI6MTA5NCwiLi9kZWZhdWx0cyI6MTA5NX1dLDEwOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7ZnVuY3Rpb24gbih0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZihhKX12YXIgaSxhPXQub3BlcmF0aW9uLG89dC52YWx1ZSxjPUFycmF5LmlzQXJyYXkobyksaD1mdW5jdGlvbihyKXtyZXR1cm4gZShyLDAsdC52YWx1ZWNhbGVuZGFyKX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gZSh0LDAscil9O3N3aXRjaChuKHMpP2k9aChjP29bMF06byk6bihsKT9pPWM/W2gob1swXSksaChvWzFdKV06W2gobyksaChvKV06bih1KSYmKGk9Yz9vLm1hcChoKTpbaChvKV0pLGEpe2Nhc2UiPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPT09aX07Y2FzZSIhPSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpIT09aX07Y2FzZSI8IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk8aX07Y2FzZSI8PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmKHQpPD1pfTtjYXNlIj4iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZih0KT5pfTtjYXNlIj49IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGYodCk+PWl9O2Nhc2UiW10iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1pWzBdJiZlPD1pWzFdfTtjYXNlIigpIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZT5pWzBdJiZlPGlbMV19O2Nhc2UiWykiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPj1pWzBdJiZlPGlbMV19O2Nhc2UiKF0iOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPmlbMF0mJmU8PWlbMV19O2Nhc2UiXVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1pWzBdfHxlPj1pWzFdfTtjYXNlIikoIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zih0KTtyZXR1cm4gZTxpWzBdfHxlPmlbMV19O2Nhc2UiXSgiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPD1pWzBdfHxlPmlbMV19O2Nhc2UiKVsiOnJldHVybiBmdW5jdGlvbih0KXt2YXIgZT1mKHQpO3JldHVybiBlPGlbMF18fGU+PWlbMV19O2Nhc2Uie30iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMSE9PWkuaW5kZXhPZihmKHQpKX07Y2FzZSJ9eyI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi0xPT09aS5pbmRleE9mKGYodCkpfX19dmFyIGk9dCgiLi4vbGliIiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPVsiPSIsIiE9IiwiPCIsIj49IiwiPiIsIjw9Il0sbD1bIltdIiwiKCkiLCJbKSIsIihdIiwiXVsiLCIpKCIsIl0oIiwiKVsiXSx1PVsie30iLCJ9eyJdO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9ImZpbHRlciIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4In0sb3BlcmF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6W10uY29uY2F0KHMpLmNvbmNhdChsKS5jb25jYXQodSksZGZsdDoiPSJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MH0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsYSl7cmV0dXJuIGkuY29lcmNlKHQsbixyLmF0dHJpYnV0ZXMsZSxhKX12YXIgbj17fTtpZihlKCJlbmFibGVkIikpe2UoInByZXNlcnZlZ2FwcyIpLGUoIm9wZXJhdGlvbiIpLGUoInZhbHVlIiksZSgidGFyZ2V0Iik7dmFyIG89YS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7byh0LG4sInZhbHVlY2FsZW5kYXIiLG51bGwpLG8odCxuLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gYSh0LHIpe2Zvcih2YXIgbj0wO248aC5sZW5ndGg7bisrKXt0KGkubmVzdGVkUHJvcGVydHkoZSxoW25dKSxyKX19aWYoci5lbmFibGVkKXt2YXIgcz1pLmdldFRhcmdldEFycmF5KGUscik7aWYocyl7dmFyIGw9ci50YXJnZXQsdT1zLmxlbmd0aCxjPXIudGFyZ2V0Y2FsZW5kYXIsaD1lLl9hcnJheUF0dHJzO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7dmFyIGY9aS5uZXN0ZWRQcm9wZXJ0eShlLGwrImNhbGVuZGFyIikuZ2V0KCk7ZiYmKGM9Zil9dmFyIGQscCxtPW8uZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxsLHMpLHY9bihyLG0sYyksZz17fTtyLnByZXNlcnZlZ2Fwcz8oZD1mdW5jdGlvbih0KXtnW3QuYXN0cl09aS5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheSh1KSl9LHA9ZnVuY3Rpb24odCxlKXt2YXIgcj1nW3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KGQ9ZnVuY3Rpb24odCl7Z1t0LmFzdHJdPWkuZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LHA9ZnVuY3Rpb24odCxlKXt2YXIgcj1nW3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksYShkKTtmb3IodmFyIHk9MDt5PHU7eSsrKXt2KHNbeV0pJiZhKHAseSl9fX19fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0LCIuLi9yZWdpc3RyeSI6ODQyfV0sMTA5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLnNldChbXSl9ZnVuY3Rpb24gaSh0LGUscixuKXtvLm5lc3RlZFByb3BlcnR5KHQsbikuc2V0KG8ubmVzdGVkUHJvcGVydHkodCxuKS5nZXQoKS5jb25jYXQoW28ubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQoKVtyXV0pKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHIsYT1lLnRyYW5zZm9ybSx1PXQudHJhbnNmb3Jtc1tlLnRyYW5zZm9ybUluZGV4XS5ncm91cHM7aWYoIUFycmF5LmlzQXJyYXkodSl8fDA9PT11Lmxlbmd0aClyZXR1cm4gdDt2YXIgYz1vLmZpbHRlclVuaXF1ZSh1KSxoPW5ldyBBcnJheShjLmxlbmd0aCksZj11Lmxlbmd0aCxkPXMuZmluZEFycmF5QXR0cmlidXRlcyh0KSxwPWEuc3R5bGVzfHxbXSxtPXt9O2ZvcihyPTA7cjxwLmxlbmd0aDtyKyspbVtwW3JdLnRhcmdldF09cFtyXS52YWx1ZTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXt2YXIgdj1jW3JdLGc9aFtyXT1vLmV4dGVuZERlZXBOb0FycmF5cyh7fSx0KTtkLmZvckVhY2gobi5iaW5kKG51bGwsZykpO2Zvcih2YXIgeT0wO3k8Zjt5KyspdVt5XT09PXYmJmQuZm9yRWFjaChpLmJpbmQoMCxnLHQseSkpO2cubmFtZT12LGwuY2xlYXJFeHBhbmRlZFRyYWNlRGVmYXVsdENvbG9ycyhnKSxnPW8uZXh0ZW5kRGVlcE5vQXJyYXlzKGcsbVt2XXx8e30pfXJldHVybiBofXZhciBvPXQoIi4uL2xpYiIpLHM9dCgiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiKSxsPXQoIi4uL3Bsb3RzL3Bsb3RzIik7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZ3JvdXBieSIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxncm91cHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LHN0eWxlczp7X2lzTGlua2VkVG9BcnJheToic3R5bGUiLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX19fSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxpKXtyZXR1cm4gby5jb2VyY2UodCxuLHIuYXR0cmlidXRlcyxlLGkpfXZhciBuPXt9O2lmKCFlKCJlbmFibGVkIikpcmV0dXJuIG47ZSgiZ3JvdXBzIik7dmFyIGk9dC5zdHlsZXMsYT1uLnN0eWxlcz1bXTtpZihpKWZvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWFbc109e30sby5jb2VyY2UoaVtzXSxhW3NdLHIuYXR0cmlidXRlcy5zdHlsZXMsInRhcmdldCIpLG8uY29lcmNlKGlbc10sYVtzXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ2YWx1ZSIpO3JldHVybiBufSxyLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspcj1yLmNvbmNhdChhKHRbbl0sZSkpO3JldHVybiByfX0seyIuLi9saWIiOjcyNCwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjc1MywiLi4vcGxvdHMvcGxvdHMiOjgyN31dLDEwOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7Zm9yKHZhciBuPWUubGVuZ3RoLGE9bmV3IEFycmF5KG4pLG89ZS5zbGljZSgpLnNvcnQoaSh0LHIpKSxzPTA7czxuO3MrKylmb3IodmFyIGw9ZVtzXSx1PTA7dTxuO3UrKyl7dmFyIGM9b1t1XTtpZihsPT09Yyl7YVt1XT1zLG9bdV09bnVsbDticmVha319cmV0dXJuIGF9ZnVuY3Rpb24gaSh0LGUpe3N3aXRjaCh0Lm9yZGVyKXtjYXNlImFzY2VuZGluZyI6cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCktZShyKX07Y2FzZSJkZXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZShyKS1lKHQpfX19dmFyIGE9dCgiLi4vbGliIiksbz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO3IubW9kdWxlVHlwZT0idHJhbnNmb3JtIixyLm5hbWU9InNvcnQiLHIuYXR0cmlidXRlcz17ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sdGFyZ2V0Ont2YWxUeXBlOiJzdHJpbmciLHN0cmljdDohMCxub0JsYW5rOiEwLGFycmF5T2s6ITAsZGZsdDoieCJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIn19LHIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGkpe3JldHVybiBhLmNvZXJjZSh0LG4sci5hdHRyaWJ1dGVzLGUsaSl9dmFyIG49e307cmV0dXJuIGUoImVuYWJsZWQiKSYmKGUoInRhcmdldCIpLGUoIm9yZGVyIikpLG59LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1hLmdldFRhcmdldEFycmF5KGUscik7aWYoaSlmb3IodmFyIHM9ci50YXJnZXQsbD1pLmxlbmd0aCx1PWUuX2FycmF5QXR0cnMsYz1vLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUscyxpKSxoPW4ocixpLGMpLGY9MDtmPHUubGVuZ3RoO2YrKyl7Zm9yKHZhciBkPWEubmVzdGVkUHJvcGVydHkoZSx1W2ZdKSxwPWQuZ2V0KCksbT1uZXcgQXJyYXkobCksdj0wO3Y8bDt2KyspbVt2XT1wW2hbdl1dO2Quc2V0KG0pfX19fSx7Ii4uL2xpYiI6NzI0LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6NzY0fV19LHt9LFsxOV0pKDE5KX0pOw=="></script>
<div id="rifiuti-urbani-in-emilia-romagna-2015-e-2016" class="section level1">
<p><a href="www.arpae.it">ARPAE Emilia-Romagna</a> ha pubblicato i <a href="https://dati.arpae.it/dataset/rifiuti-urbani-per-comune">dati sui Rifiuti Urbani per Comune</a> per il periodo 2010-2016 a partire dai valori ufficiali caricati sull’applicativo <a href="https://www.arpae.it/dettaglio_generale.asp?id=2075&idlivello=1838">ORSo (Osservatorio Rifiuti Sovraregionale)</a> dai gestori.</p>
<p>I file sorgenti sono reperibili su <a href="https://github.com/mfortini/RifiutiUrbani_ARPA_ER">questo repository GitHub</a>.</p>
<p>In Emilia Romagna i rifiuti urbani sono aumentati dal 2015 al 2016 di 7033.636 tonnellate</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAPACAMAAADDuCPrAAACJVBMVEUAv8Q8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29wcHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PD4dm3p3qhAAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nO3d+YNU9bkt/PMFmboxKENACYOioAwxirN5j/eKRxMxhnMImKOeGI45wQHDCRK56o36XiKOiRpzacUZUFSQqdnv3/d21d7VNfSuqqcenlWrCtbnh9DVXfR3d7nWSs/8UyYiIi7/xL4AEZFhpQEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk7sAX0/tXO011d1R/73TldvXF99em7JS3rw0dSrmjZvxf0vjff6ioaM4e1ufUjH9929Zu4ls+feUrmxuvqyeY6T2/+X2pu/ZHnTM1flz9zd7tWN5S/f6riS3i/ypbZRTum2oKNDYh3hseINW8U4fJBoQDsoGZK8xa/1+pqGi+HtbnlIj/+4uMv1lVsa0FYX3IAuq71lHzJOHyAa0A7aDUmavqvXVzVUDG93y0P6z7V7aEBLXWgDWq/to4TTB4kGtIO2Q5Kmv9Hr6xomhre7+SH9cPIOPQ7oeMu+XJQD2vogdDAoA7pl8i37EeH0QaIB7aD9kKSlF/LnQQ1vd/ND+sfipdM0oOUusAEdX1B/0z7o//GDZFAGdN4UX/X6qnADWrukH0yv5+alXl/ZEDG83c0P6a/zWz87ear6f3sX54C+Us/ujPwesyef8T87vb7hG9DXGv6/IfjBHTYDMqCXBLyqJ++tOlu90ZS0ppf0oDYkJ2vPOPv5nsXF8+4LuOJBZXi7mx/S/5G/7LPi7o9WX/aQ4aTW7Wj/X2qABrR7nG7Oz/2N7fV5B9Qb6/N3b8OALjrX//MHyAU0oE2akuY1ZUgmfHdZ/rxl5/eqB1rPb3fxvtD3PZ9k344BGtDu+jOgNKdGGwY0vU2+Gi4NaAdlQ5LtyJ83en6veqD1/HbfUXJ/Ew1oNoQD+kLx3yL/4xfkq+Ea8AH9fLIBx3auXzhz/jVb3q8+f/z/3L9i3sz56x7+tH7fpnC1v1Hx2RN3L7981sx5S29/5P0OF1c6JK/kz5ve8Kxzf3v8puXzZly2/KbfvNPwAU0vF9/tqj565PoFs6649aWJj9eeqr7WWfnzZ1Vv/HjiqQ/+7doFM+Zd9Ys37K/0PN7u5oe0ZUAbPwf6t/xF9e92+fHk5X+6a9fT+UtX7tq16x9TX20jw4DWH4vjj6z/wbqscUC/fnLD4pnzr3uo9TFo8/B0fFi7r1j5gJbGpORB6HBdnWNdU3/MT+7ZeOWsy6+5/7WWr3mee+eR9VeOzF6ydusbjZ8BmPoIlro9f/3v5J8av7zpdXd85LqmtV2VBtewDOif5hWlTvccz7IP19ZuTd9ypnZf84B+tHFaqlv5l7YXVzokRToXTz7j3ItXN766fZN56uXiO1/VN5OfdLr6s/IB/e7uyb+64bDllW7Lv7qxxfl21x/Sli8+V76kYRzQ5r/5u+ZX26qXAX3+0ok/mwZ03+QHnT/+rOHvt314Oj6svgFtE5OSB6HDdfU4oO9MfrV8RdMH2n+5pv7alzZ8OXTqI1jm25nVu63J1uevoSmqHR+5LmltX6XBNSQD+h8Nj+uqU2/Pbrh5e+3/qKwD+uLM1KztR1qlQ/JyqqUsd/y2lle38RvHxXe8qg8bvmvkB/8oG9CjVzT8zcs/NbzSh/Jn3O98uwd5QJ+rvmfUOKA7G86Z88rkX2//8HR8WF0D2i4mZQPa/rp6G9BXZ9RfxbT/mnzx+EPNr/3OUy1vdsMjWObZ/K89kT2ZP9H09dSOj1zntHao0uAajgFd0PSw3tr0Oey0s7ivcUAPXJJa/anN6aVD8nj+vH8tbn69bMqru+JI7xff6ao+mt/47MWPVv9oGtA1a5r+5jXj3V9pzwPa/HYP8IB+kH9k2TCga6Y3HjTzQPfHvOPD6hnQtjEpeRA6XFdPA3rfD5peRy1q537a+trX1f5DT30EyxTveH6WHcnfT57b+I1UHR+5ji/sVKXBNRwD2tH84rM4tgE9vbTkNZwpOTorH5Lj+Vejp3+e3xy/oeSK1p/t9eI7XdXZa5qfn7970jSgrV7o/qb2OqAtb/fgDuiGDfkzGwa0xaVfd314Oj2sngFtH5OpD0Kn6+ppQKc1v45Lim95f2Lqq38ga/cIlvgyf72rJ55cl9/x5YaXdnzkOr6wU5UG14AM6JRvpL89f3F9g0bX3d4YrNF1t11Ze/qd/L62AX2+9l/m0af/8FgRgNTm06BThmT8yPNL8mdtKp6zo7jL9I07/nvHxtp7Oo/3evGdruq3xc1p6zffW38tUwb08g23LatV5ubub2pPAzr17a4/pJ/u2rWr+MzVzoknK+9OGAc0m/oF6IABrX2GpGVAl2568Ce1/zybuj48nR5Wz4DuKF5DWUxaH4RO19XTgFYfr3/Z/JPaO7TXVl94qPj8wO1//mjspeJC0/52j2CJ4m35z4kni0+N3N3w0o6PXMcXdnyMBtagDGir4lNttQ2a/u+V/wt+qfa5oUserfwf077iUzxP5ve1DWjxFcTn85cU/9HafBa0NiSXzy9Mfmy1vtiWk8V3Ry55t3rzveKTO5ed6vHiO1zVqeIrUMurX6F9sfZhWcuArqh+XPpOMbAj413fVMuAtn+7Q74Kn0EGtGLB+k0/rXwf/+SAzq2+l/NZ8cHntI+7PTydHlbHgHaMSeuD0Om6ehzQy6qf7/289quyXq/c2pw//Ux+193Ff9d2j2CJlfk9Kp+6PJxv4OyGD1U6PnKdXtj5MRpYQzKg/57ffLS4+Vh+c3t+65H8lm1AF1afvrE4/vv8/+jaRKXtz4TfWvuW8Wfy2z8oPrDNDhdr92yPF9/hqoqfM59f/G6AD4oQNg/o0iLC7xb/r36k65tqGdD2b/dAD+jSV2svrw3o9L/mt08Vn33b2u3h6fSwOga0Y0xaH4RO19XbgM78v81v9j9PPH08f//y9tp9i+/v+KDNIzjVwfwu+buzxTeU7Ku/uOMj1+mFnR+jgTUcAzq3eMTfKR7k4v+VXs9vFt8nbRrQM+vXVfx3cfzh/DWUzkjbIbmm/hH/7a3/kXflz7irt4vvdFXFVyZ/Vzvh3/LbzQP6Vu2lxYd8B3t9U3t8uwd5QBecmHx5bUDvqT2jeNAXdHt4OjysngHtGJOWB6HjdfU2oLVPbWYH8tuj45Pfzlv7Qlr298b/PlMfwam25ffZUb3x+/zG7fUXd3zkOr2w82M0sIZjQGufjfmk6YUtP2jSwzfS15x9sCGer+5u8GXlOW2G5PrXa39/fG4ezPqHGcVPuc071+PFt72qc5fmFz+Z6a/ydyGaBnT25DfM3Zf/1anfM9/0Srvo+nYP9IA2vDtUPMbTP5p8TlHZz7MWLQ9Px4e15wHtHJOOP4nUcl09Degl9bfyuvw5B2v7N3PyUsbzfN3Y8GY3PoJTnPthfp9PqreKLyjN/G7y5R0fuQ4v7PIYDazhGNB7i3t/0pSm8xrQ0x/s3X7bwtTwCmufKaqqfgzT9kPZjd81Xd6PG15v8Wm2wz1efNurOpQ/3fD/8fm7pM3fxjT5wofrkezwSrvo+nYP8oBOb/ikWfEYL6k/p/iKXONElD08HR/Wnge0c0zaDWjZdfU0oCvrz3kkf87eLLux/L/sSJtHcIq38vvX/imP/BrSf0++vOMj1+GFXR6jgTUgA9rl25g2FzeLDap9Hs87oF/vu3d507cG9jqgtS8cvt/w1wv/kj/rHz1efNurKgL7y/oJ/1p9xpQf5cz9e2Ne277SLrq+3YM8oIsbXl48xj+pP+d/5c95osvD0/Fh7XlAO8ekbEDbXVdPA9rwCvfkz9k5+ZBN8X35IzjFz/O71744/l/5zZsmX97xkevwwi6P0cC6CAf09fUt3yDXdUBrw3D64+eK7+ZJY9Vn7G9OU0XxY0ev93jxba/qf+dP/75+Qv7ZdtOAtnulXXR9uwd5QBu/+aZ4jH9Wf06Rt+1dHp7YAe0ck6kD2v66ehrQhv/TfTN/ziNZ9sPW11z4ovwRbHW6+C6Qj4vbX+RXOn3y1597B7TLYzSwLr4B3dYYm6XT6/HsPqATvim+Nvin6q3iv/pvG654R/6s/9Pjxbe9qj/lz2r4R5ieqz7DMqBtX2kXXd/uQR7Qxg8Ci8f4X+rP+aDhP0KHhwcyoG1iMuVB6HBd3gF9O3/OxIDOS+X+Uf4Itip+oLf+fdvF1D9Zu8N5Dmi7x2hgXXQD+l+1xMy85t6nP81m1+NpGtDav+e6vfHqG0fp/vxZ7/V28e2v6tX8+Q/XT8g/n2UY0PavtIuubzdhQIuf2FnY9MzixxH2lj8Wk4/xDVNezaNdHh74h/ANMWl9EDpdV08D2vB58/z/dCszl3/v5YJdrb4tfwRb/T+p3OR7rYEfwjc+RgPrYhvQb0eqT0+7+43qZ8pPNPxnsw3oC41pLy6voaBZ8WNwn/d08R2uqvjmp4Yf9sh//Xv3Ae3wSrvo+nafz4Cuabx8+4AWnwue1vgFjjPFpwkPlD8Wk49xwyf1/jN/ztNdHp7YAe0ck5YHoeN1necXkfbVvh7f5rfZdh3Q4+U/jDlxuV+0eRXWAe3yGA2si21Ai48Ei++9r30XXJfvA20ckuKzSfn/447n32lxaf23KZzKvxtj5GxPF9/hqo7mTy+e/NaP0/lnsboPaE9vam9vd+8DWnsQsvGm78KyD2jx3Qjp/5Zc51j5Y1H2bUzFz1sf6PLwxA5o55i0PAgdr6unAZ3x5eRzim94P5RlxS+SK/8Xx7oOaPHFqBJPtHkV1gHt8hgNrIttQIt/j7X2OfDfN8WzVdmQ/CV/1jX5reK73Ou/Ev3ZhjLYL77TVRU/0ra3dkLx88fdB7SnN7XHt9s+oMUnHSe/EP5m0+XbB/RM8VusHml43m/yZ805Xf5Y1L+RvvYT/LXPBVa+DbLjwxM7oJ1j0vIgdLyu3r6R/sHaM4p/BG7+xJPFb28+MPVvlbzZU7T5JqhU/74m74B2eYwG1sU2oJvyv1K8z/LdvKZ4tiobkuInOYovZjyV35pX+161z4svUj7Z28V3uqrimzmWFT9Febj4keHuA9rTm9rj220f0OJBmJ7/KEp2cmnT5RfbcUtW+mqbFO86za7/M7oH8w92J39Wpf2AXvL3/Pbp4j2xn3R7eIIHtGNMWh6EjtfV449yFq/k1LX57fvqD8nkPxM6/i93VGxv8wg2O9L0rVXNPjI8cp1e2PkxGlgX24A+kP+Vn1efX/vlEr0M6Iv5s4pPq31f/Fdemtf6veLfrpz3fW8X3+mqinea0vrqZ5neqP3rmN0HtPOb+nD+a0L+NSvR/e22D+jp4rNmK6qP0Bsrmi+/2I61WemrbVJ8P1cafTb/NOjp/55bPOd/ZeWPRcMvE7ms+jntL39S3Hy528MTPKAdY9LyIHS8rh5/mcj86m9Z+rz4ZGL+lfZ1zQ9a8cXBnW0ewWbFu8PN3+dU/KD9o4ZHrtMLOz9GA2tABrTk34WvVjV8QItfC5zWPL7n8f85pxa0Hga0+D6O+cXN2m+bn37b75/7r1tq/wed/6Cw/eI7XlXt14HOvPWX919Ve5lhQDu/qb3+PtCWt9s8oLXPOqbpV911Y+3naiYv/1zxy02PlL7aJucm/yWUkWvueuin107+YurVtZ/16zCgEwP+s1/eUvsF7SvOdXt4gge0Y0xaHoSO19XjgKZ01c9/ubH2u7Ruqb6w+A85/eevHjo69sfiK6cLT7R5BJsV78nubHpm8ftFlxkeuY4v7PgYDaxBGdCp5lReHD6gH5Se1cOAvpE/q/ZlzDPrSl7dDU2/UNlw8R2v6t3Sj5u6D2jnN7XXAW15u+0D+lzpZRSXX/vdaD+46Ybnpr7aZu/NKH1Nl/ytdoeOA9r4N97t+phHD2inmLQ8CB2vq+cBbTBafE1pyi+kT2nay+0ewSZFLqY1/3DlZ8UrafyFTp4B7fwYDaqLbUCz5l97vTD/NFqbT1SXDUkt37UfvTg69feHLz+Wv6iHi+94Vb9pfvX5hzqG7wPt+Ep7HdCWt9s+oGdXNl3G3MWNl9/Q5i6/kX7CS2X/TzK9/mPt7b8K3/xXinegOj080QPaKSatD0Kn6+ppQDc0vd2X1P7xuOPLp1xK7V3KLgNafDNU608qFe+X/qr7I9f55+Y6PkaD6qIb0E8a/4Gh1Ufyz8nNb/xXXerKhqT49WL1X0fx7c2p2R3Hi5f0cPGdr+rRhhemB/IvwxsGtOMr7XVAW95u+4Bmhxp/+GX03aZvpK/9nECyDGj20tzUanTKr6IsGdDNGxr+xvRnav89Ojw84QPaISatD0Kn6+ppQB9tzM3M/12/lJZ/O6P+GHYZ0OLnFlq/rLMjf/YPz3V95Lr85oZOj9GguugGNPt4zWRw/vN0dkv+5OT3uTQp/cfVir/+g8lfajj+fOP7WNe8NPnrt3q5+M5X9crkvwDyg93t/l34XFMkO73Snv9Ruea3u4cBzT6f/OxluvGz5p9EyrLHah+YGwY0O3Jn8w+JT7ut8aPJtgO69eQvJ98ZWz35EX+nhyd+QNvHZMqD0OG6ehvQc7+f/Oc9N3zY8PKzT9c/GZ1mbq4/hp0H9K/5X5je+g+9FcHO/3Wa8xnQjo/RgLr4BjQbf/X+9QtmLbnlD5V/M3VfcdqhsosrHZLi2y0afrYmO/fOf9z4o3mXzFu28fF3G+7Z0y8T6XxVp/+8acWlMxdu+P2xrIcB7fRKex7Q5re7lwHNstceWHHpjPmrHqr84+QtA5p9/tDaRZUvc1gGdGJctv5oMiFLtzT/V2s/oFn24aPXLZw57+rNrzd2sv3DAxjQtjGZ8iB0uK7eBnQic4+tWTDzslUPvdNyj1MvP3TtwlmzLr/2vr2N7+R1HtAiMuunvGBVQ7LPa0A7PkaDiT2g0rP8Z6Vnsy+D5pv9z+38zc49+wf+02M0U358VmA0oEMn/1dsrmBfhgwsDWj/aEAH3VuvVk1+pDWefwy7gXlNMtA0oP2jAR10G/M2/Eft9o789qB/g7HwaED7RwM66IqftZv9/1Zvje/Mv2A74zPyZcng0oD2jwZ00B0tfmXGtI1Pvfzc9tq3eTzc/S/KxUoD2j8a0IH34pR/ICelmzr9w4lykdOA9o8GdPD9eaR1PzeV/+SUSIUGtH80oEPgyObZDes5bf1g/zuFwqYB7R8N6FA4+cJD6xeNTp+z4OpNOz9lX4wMOA1o/2hARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlAh9jJY8dOsK9BBtCZY8e+Y1/DRUIDOsS+Hhs7zL4GGUDfj419wr6Gi4QGdIhpQKWUBrRvNKBDTAMqpTSgfaMBHWIaUCmlAe0bDegQ04BKKQ1o32hAh5gGVEppQPtGAzrENKBSSgPaNxrQIaYBlVIa0L7RgA4xDaiU0oD2jQZ0iGlApZQGtG80oENMAyqlNKB9owEdYhpQKaUB7RsN6BDTgEopDWjfaECHmAZUSmlA+0YDOsQ0oFJKA9o3GtAhpgGVUhrQvtGADjENqJTSgPaNBnSIaUCllAa0b+wDeuyXa+fO3/Cfpy333bN2dGT1U+PFrY8fWDxr+f2qejgNqJTSgPaNeUDfvixVXXmk613P3ZPf9daz1ZuvzKneGvmr/yqllAZUSmlA+8Y6oGeWpRV/+fbIH+am27re98mUto4deiSlRyu3PpydNu7/5q2r05Lvz+dCZSoNqJTSgPaNdUCfS7Oq73o+n9KXXe56en76WeXPbWm08m9G3pXWn5r448hoet5/mVJGAyqlNKB9Yx3QLemfq3+enp5e7XLX/Sl9Ufnzu0vSixPDOS29U332tpW/9l6klNOASikNaN9YB/SW9HD+xGjaW/nj7DPrLp2z6rFjJXfdnlbmT6xPD2bZ7rTk/K9SSmlApZQGtG+sA3rq5Jnqn4dS+mDij2+uy79OtOBg7Q5v3FP7ItGmdH/+xNZ0R+Vd101xVytNNKBSSgPaN719H+jxP69It1aeuDnN3vn51/sWpPknihftTvuKpzamX+VP7Ehrs+zutPXoLxbPWnnvoaArlkkaUCmlAe2bXgb0pRkpTd98cuKpA2naW5XnHLk0PVK8sD6gV6Xf1p51RZZtSPfNq76zOuuPra/v9OdyXj4eGzvEvgYZQJ+OjX3EvoZh9038gO6r7OCGykfwm9NP82ftSNdOGdBF6ana/UezbFlKMx87+NVrq9PM1vdBT46JiAyi7t/v3vOATnzM+Nq6NHIwy25Iz+TPeDtNH28d0Ktr74E+mxZl2ZKUXq7cOH1luksDKiJDATKgWXZqefoflXcy645n762bsDQtq/zxUdPnQNdk2dp0XX7rqbSw5XWd/VbOyxdjY5+xr0EG0NGxsUPsaxh2JzEDmj2Wrsyy+WnR8pqvsgMNc/p+w1fht6Xbs+zO9EB+682Uvuv1MOlIX0SSUvoiUt8YB/SrSy75MH/qmbQgy9bl3wzaqP4h/Pa0Kn/ixrQ5yx6sfRvT62nGmfO8WGmmAZVSGtC+sb4HuqC2jw+ljVl2b9qS3zqyv/bdn/UB3Z9S9fMHJ2emF7JsT1p2rvrsJ2rfXy9RNKBSSgPaN9YBvStdW/1q0ZHRyq8IeSHN/qxy69xNtc93Ngzo6flpe/6cuSey7NistKty69vL09bA65ZMAyptaED7xjqgYzPSDW9+9fmfflj9pUrjq9OCvYdP/f3ONPJpcYf6gGZPpmlPHz+xdyQ9Xrm1PU3fdvDon69IC0+UvmZx04BKKQ1o35i/iLRzRv5VoiXvVm598aP81uwDtZc3DGjl94HOmLj7ndX3Wc/cUvzFvwVetlRoQK3+SS50rGSZ7zl2z9VzFt74+Kn81sknbl04umrL0fL77rl+ZM7qXfnnPrPxP6ydO3fDw/ptoOE0oFbsdgscK1mkcyH+P7ng+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEjijUk0AACAASURBVHuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W6VwIdrkFz5cMdrsFLnZK7MkinQvBLrfg+ZLBbrfAxU6JPVmkcyHY5RY8XzLY7Ra42CmxJ4t0LgS73ILnSwa73QIXOyX2ZJHOhWCXW/B8yWC3W+Bip8SeLNK5EOxyC54vGex2C1zslNiTRToXgl1uwfMlg91ugYudEnuySOdCsMsteL5ksNstcLFTYk8W5LXuWTs6svqp8eLWxw8snrX8/sOQk5qwyy14vmSw2y1wsVNiT5b5nmd+95NFI2s2f9H9nufuSVW3nq3efGVO9dbIX73XaMYut+D5ksFut8DFTok9WdY7frIiX8XZu7ve9cmUto4deiSlRyu3PpydNu7/5q2r05Lvz+M6TdjlFjxfMtjtFrjYKbEny3rHNWnkmS+++8u1acZ7Xe55en76WeXPbWn0xMQfd6X1pyb+ODKanj+P6zRhl1vwfMlgt1vgYqfEnizj/d5O6aXKn6dWpJu73HV/StWP87+7JL04MZzT0jvVZ29b+Wv3VRqxyy14vmSw2y1wsVNiT5bxfjvT0vyJZ9O8yh9nn1l36ZxVjx0ruev2tDJ/Yn16MMt2pyXnf5VG7HILni8Z7HYLXOyU2JNlvN8D6e78iQNp2sRH5N9cl39GdMHB2h3euKf2RaJN6f78ia3pjizbkjbFXW0X7HILni8Z7HYLXOyU2JNlvN/BNz/Jn3gi/XDif29Os3d+/vW+BWn+ieIOu9O+4qmN6Vf5EzvS2iy7O209+ovFs1bee2jK6zx3Khi73ILnSwa73QIXOyWnTp2NHdCaL+dXvrY+8W7oW5VbRy5Nj0wZ0KvSb2vPuiLLNqT75lXfWZ31x9bXdXIsGLvcgudLBrvdAhc7JWNjRyAD+vbitOJ4lm1OP81v70jXThnQRemp/Il9aTTLlqU087GDX722Os1sfR9UAyo98yWD3W6Bi50SzIAe3jQtXVV5xTekZ4pBTdPHWwf06tp7oM+mRVm2JKWXKzdOX5nuah3Qj4Kxyy14vmSw2y1wsVPy0UdHwwd0/InZadZjZypPLkp1x7P31k1YmpZV/vio6XOga7Jsbbouv/VUWmg/y4ddbsHzJYPdboGLnRJ7ssz3/HBNml77gfb5adHymq+yAw1z+n7DV+G3pduz7M70QH7rzZS+C774VuxyC54vGex2C1zslNiTZb3jocvSkndrN9alva0vr38Ivz2typ+4MW3Osgdr38b0eppx5jwu1IJdbsHzJYPdboGLnRJ7soz3O7U43Xl88ta9aUv+xJH9te/+rA/o/pSqn4A9OTO9kGV70rJz1Wc/Ufv+ehx2uQXPlwx2uwUudkrsyTLeb3dafrp+64U0+7PKn+duqn2+s2FAT89P2/PnzD2RZcdmpV2VW99enraGXHEH7HILni8Z7HYLXOyU2JNlvN+6dM+BwhtZNr46Ldh7+NTf70wjnxZ3qA9o9mSa9vTxE3tH0uOVW9vT9G0Hj/75irTwROlrDsQut+D5ksFut8DFTok9Wcb7zat/nWjOxM0vflT8crsDtTs0DGjl94HOmJHSndXvcDpzS37XJX8LvfAy7HILni8Z7HYLXOyU2JNlu9vx1Dyg2cknbl04umpLm2+W2nP9yJzVu/LPfWbjf1g7d+6Gh+G/DVQDejHwJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnqye7r3/T7b77Vk7OrL6qfHi1scPLJ61/P7DPZ3kwi634PmSwW63wMVOiT1Zvdx5/PLFlruduydV3Xq2evOVOdVbI391XF5v2OUWPF8y2O0WuNgpsSerlzvvSaYBfTKlrWOHHknp0cqtD2enjfu/eevqtOR7zwX2gl1uwfMlg91ugYudEnuy7Hc99rvZpgE9PT/9rPLntjR6YuKPu9L6UxN/HBlNz7uusAfscgueLxnsdgtc7JTYk2W948sLKh+HWwZ0f0pfVP787pL04sRwTkvvVJ+9beWvfZdoxy634PmSwW63wMVOiT1Z1js+v3DhwkvrA3r2mXWXzln12LGSe25PK/Mn1qcHs2x3WnLeF2nFLrfg+ZLBbrfAxU6JPVm93Ln+OdBvrsu/TrTgYO1lb9xT+yLRpnR//sTWdEeWbUmbIq7ThF1uwfMlg91ugYudEnuyerlzfUBvTrN3fv71vgVp/oniObvTvuKpjelX+RM70tosuzttPfqLxbNW3nso5Ho7Ypdb8HzJYLdb4GKnxJ6sXu48OaAH0rS3Kn8euTQ9UrysPqBXpd/WnnVFlm1I982rvrM664+tr+70l8HY5RY8XzLY7Ra42Cn58stvkQO6Of00f2JHunbKgC5KT+VP7EujWbYspZmPHfzqtdVpZuv7oCfHgrHLLXi+ZLDbLXCxUzI2dgQ5oDekZ/In3k7Tx1sH9Orae6DPpkVZtiSllys3Tl+Z7tKAyvnyJYPdboGLnRLwgC5Kdcez99ZNWJqWVf74qOlzoGuybG26Lr/1VFrY8urOHgvGLrfg+ZLBbrfAxU7JsWMnMhPfgM5Pi5bXfJUdaJjTUFra2wAAGclJREFU9xu+Cr8t3Z5ld6YH8ltvpvRdL4c5sMsteL5ksNstcLFTYk9WL3eeHNB1aW/ry+ofwm9Pq/Inbkybs+zB2rcxvZ5mnHFfpg273ILnSwa73QIXOyX2ZPVy58kBvTdtyZ84sr/23Z/1Ad2fUvXzBydnphcqf2fZueqzn6h9fz0Ou9yC50sGu90CFzsl9mT1cufJAX0hzf6s8ue5m2qf72wY0NPz0/b8OXNPZNmxWWlX5da3l6etERfcCbvcgudLBrvdAhc7JfZk9XLnyQEdX50W7D186u93ppFPi5fVBzR7Mk17+viJvSPp8cqt7Wn6toNH/3xFWmj8tKwfu9yC50sGu90CFzsl9mT1cuf6TyJ98aP8a0azD9Re1jCgld8HOmNGSndWv8PpzC35XZf8LeJ6O2KXW/B8yWC3W+Bip8SerF7u3PD7QE8+cevC0VVbjra54/Ujc1bvyj/3mY3/Ye3cuRsehv82UA3oxcCXDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPFulcCHa5Bc+XDHa7BS52SuzJIp0LwS634PmSwW63wMVOiT1ZpHMh2OUWPF8y2O0WuNgpsSeLdC4Eu9yC50sGu90CFzsl9mSRzoVgl1vwfMlgt1vgYqfEnizSuRDscgueLxnsdgtc7JTYk0U6F4JdbsHzJYPdboGLnRJ7skjnQrDLLXi+ZLDbLXCxU2JPlv2ue9aOjqx+arz3u/bwF88Pu9yC50sGu90CFzsl9mRZ73junlR169ke79rDXzxf7HILni8Z7HYLXOyU2JNlveOTKW0dO/RISo/2eNce/uL5Ypdb8HzJYLdb4GKnxJ4s4/1Oz08/q/y5LY2e6OmuPfzF88Yut+D5ksFut8DFTok9Wcb77U/pi8qf312SXuzprj38xfPGLrfg+ZLBbrfAxU6JPVnG+21PK/Mn1qcHK3+cfWbdpXNWPXas611b/yISu9yC50sGu90CFzsl9mQZ77cp3Z8/sTXdMfG/31yXf2VowcHaHd6456+ld235i1DscgueLxnsdgtc7JTYk2W838b0q/yJHWntxP/enGbv/PzrfQvS/NonNnenfaV3bfmLjc6dCcYut+D5ksFut8DFTsmZM8ZvGrIO6FXpt7WhvCLLDqRpb1VuHLk0PTJlQJvv2nyrycmxYOxyC54vGex2C1zslIyNHYkd0EXpqfyJfWk0yzann+a3dqRrpwxo812bb2EHVEQkRPCAXl17R/LZtCjLbkjP5LfeTtPHWwe0+a7Nt5oH9CM5Lx+OjX3IvgYZRArGeTsaO6ANn8pcU3m3su549t66CUvTssofH7XetfmWRPp6bOww+xpkAH0/NvYJ+xouEj1/FX5buj3L5qdFy2u+yg40zOn7rXdtviWRNKBSSgPaN/bvA12VP3Fj2pxl69Le1jvUP4RvvmvzLYmkAZVSGtC+6eEnkaqfVT05M72QZfemLfmzj+yvffdnfUCb79p8SyJpQKWUBrRvevhZ+O2VP3enuSey7IU0+7PKrXM31T7D2TCgzXdtviWRNKBSSgPaNz38NqZpTx8/sXckPT5xY3x1WrD38Km/35lGPi1eXh/Q5ru23JJAGlAppQHtm55+H+iMGSndWf22pS9+lH/NaPaB2ssbBrT5rs23JJAGVEppQPuml99If/3InNW7zuU3Tj5x68LRVVvafLNU011bbkkYDaiU0oD2zQX1byJdbDSgUkoD2jca0CGmAZVSGtC+0YAOMQ2olNKA9o0GdIhpQKWUBrRvNKBDTAMqpTSgfaMBHWIaUCmlAe0bDegQ04BKKQ1o32hAh5gGVEppQPtGAzrENKBSSgPaNxrQIaYBlVIa0L7RgA4xDaiU0oD2jQZ0iGlApZQGtG80oENMAyqlNKB9owEdYhpQKaUB7RsN6BDTgEopDWjfaECHmAZUSmlA+0YDOsQ0oFJKA9o3GtAhpgGVUhrQvtGADjENqJTSgPaNBnSIaUCllAa0bzSgQ0wDKqU0oH2jAR1iGlAppQHtGw3oENOASikNaN9oQIeYBlRKaUD7RgM6xDSgUkoD2jca0CGmAZVSGtC+0YAOsTPff3+afQ0ygMa///4k+xouEhpQEREnDaiIiJMGVETESQMqIuKkARURcdKAiog4aUBFRJw0oCIiThpQEREnDaiIiJMGVETESQMqIuKkARURcdKAiog4aUCH0J61oyOrnxqvP2P/n4onjh+o+Z5xYcLVPhhZ9vEDi2ctv1+/PzaYBnQYnPndTxaNrNn8RfXGuXtS1a1nay8ev3xx8dQrqeYfjOuUPjMHI3tlTvVlI38lXOWFTAM6BD5ZkTdj9u7KrSdT2jp26JGUHq29fE+q9eR3GtCLiT0YH85OG/d/89bVaYk+NAmlAR0Ca9LIM19895dr04z3suz0/PSzyjO3pdET1Zce+93syZ78PP2KdZHSf/Zg3JXWn5r448hoep50rRcoDejgezullyp/nlqRbs6y/SlVP2L77pL04sQfLy+ovAtS68mG9BzrKqXv7ME4Mi29U31i28pfc671QqUBHXw709L8iWfTvCzbnlbmt9anByf+9/mFCxdeOjmgC9IHjCsUCnswdqcllCu88GlAB98D6e78iQNp2qlsU7o/v7U13VHcYfJTXSfS9Lfu+OHoun/7tu8XKf1nD8aWtKnvV3dx0IAOvoNvFv9G7RPph1m2sfZpzh1pbXGHyZ68n6ZNq35VYcEbfb9K6Tt7MO5OW4/+YvGslfce6vtFXuA0oMPjy/mVr69elX6b39ydriheMNmT51Na+tKRT3f/IF3+HeUShaF7MDak++ZV/5911h8pV3jh0oAOjbcXpxXHs2xReiq/vS+NFi+Z7MmulTd9Xfnzk1npl4QrFApDMJalNPOxg1+9tjrN1PugoTSgQ+LwpmnpqiMTT1xde0fj2bSoeFn92/1qtqQV/bs0YTIFY0lKL1f+PH1luqvvV3hB04AOhfEnZqdZj52pPNnwqa41xUunDuiLacaZ/l2d0BiDsTZdlz/xVFrY5yu8wGlAh8GHa9L02o8xT36xdVu6vXjx1AF9N6Vv+nVxwmMNxp3pgfyJN1PSZ8cjaUCHwKHL0pJ3aze2p1X5EzemzcWzaj05++qrx/PnvJwu6+cFCoc1GNmDtW9jel0fmsTSgA6+U4vTnccnb+1PqfIZr+zkzPRC8azJnvwo7cyfeDj9uJ9XKBT2YOxJy85Vn3ii9t32EkMDOvh2p+Wn67dOz0/b8+fOPVE8a7Inv04/PFb58/CctKevlygM9mAcm5V2Vf789vK0ta+XeMHTgA6+deme2m/5rHx//JNp2tPHT+wdSY/X7jDZk8OXpZWvfvXxnsvT2nOki5X+sQdj4uP76dsOHv3zFWnhifLXJT4a0ME3b/J31KU5Wf5rH2fMSOnOyV+cW+/J67Pz+y37jHOp0k89BOPMLfn9lvyNcqUXLg3owDuemnsy0YvrR+as3lV/H7Phq/BHHrp6ZOFtvz/V/8uUfuspGON/WDt37oaH9dtAg2lARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLipAEVEXHSgIqIOGlARUScNKAiIk4aUBERJw2oiIiTBlRExEkDKiLi9P8D6AysW8kxYDEAAAAASUVORK5CYII=" width="672" /></p>
<div id="la-raccolta-differenziata" class="section level2">
<h2>La Raccolta Differenziata</h2>
<p>La quantità di raccolta differenziata è aumentata, in Emilia Romagna, da un minimo di 50% nel 2010 a un massimo di 62% nel 2016</p>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAPACAMAAADDuCPrAAACxFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERETExMUFBQVFRUWFhYXFxcYGBgZGRkaGhobGxscHBweHh4fHx8gICAjIyMkJCQlJSUmJiYnJycoKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY4ODg5OTk6Ojo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29wcHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PCOJRaLAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nO3d+6NU9X3vf5u0id/Tb3pszzml/faU9ny/9JzvOV/bntamH3Bzv19ERS5egMolRhEVE2qjoom32CCYgASJIqIQEhStEpCGoEYlahS3itsLiCiXvYG955/4zsxaa2bN7DVrr7X2vF8zw34+fnDPba/5zIfPfjrXNefkAACZnNPoAQBAqyKgAJARAQWAjAgoAGREQAEgIwIKABkRUADIiIACQEYEFAAyIqAAkBEBBYCMCCgAZERAASAjAgoAGRFQAMiIgAJARgQUADIioACQEQEFgIwIKABkREABICMCCgAZEVAAyIiAAkBGBBQAMiKgAJARAQWAjAgoAGREQAEgIwIKABkRUADIiIACQEYEFAAyIqAAkBEBBYCMCCgAZERAASAjQUDfdLV8mnZTy7zfO1U8cnXx8NiIc1J4r/eohk6YfefO7rQbQhOqWCJZ3e8ti/eKR2qvs6ZbSXW58XsqbtCwCZfOu+XJ9sqLVE9J97O3zB974cixS72jp366/MpRbSPHfa9/A6mHrJGIQ0CjzdqXdktoPg0OaGNXkkFAffP2hi9SNSXHv+Ff6uri0UNX+Edv6d9A6oGA6gLqhm1Juyk0nWYIaMNWkl1Anbups3yRqin55+AyXkAXBEcJaFatGVA37OW020K9dHv/BDf2dztNEdBGraSKG591RmsE1C08VrpI5ZS8W7pIMaD7SkdbKKBpJouA1jSD50Eb5ewKaINWkmlA3ZLSRSqn5Of++UOHFgP6kH90GAHNLAjohF6OpN2UXUCDIY0fVl4jO9NuDHXSygFtmpVUz4AO827TmFBBtwUXqZySH3rHvtvZXXyUf5t3dO2p7s7oK1Bq7YBeWIdNPX570ZnikYoFUnFOCsGyL/3znvlo+3T/tDvqMGJk0bwBrb3Omm4l1TOgU/2jXW+tGe/fpjGH/NMqp+RfvHM/9M9c5PX3dL9uSb0kjcTZG9AKdfnr6LXs845N9E6b2b9NI7PmDWhtTbeSLAKad+Q6/4b+a+Qv+PfyTvpH5xWPTUh7tY1FQJOLWva5Df7/Y/u3aWR2tgS0oSvJKKC5zn/yThvXFfULyypngYD2Xx8B/cg7e2Uud3TToqnDJ191/5vF07t/eefsCcMnL3ywo3zZijVR+0jBh4/cMmvSiOETZty05s2YwUUu+xe804aFTur5zfrrZk1omzjruh+/1pNt8H2N6r01V08ZcckNO/OPMDYXtzrCO31E8cg38ofe+sHcKW0TLr/35eQbreE33rjX5v8cti+5dMSkq+7cV/VCR89raxZdOnrkxQtWvhx+yFMezPE1i8YvLJ1+dMcdV04dMWr6N9b8JpdyQ9W3qmPLlie84c3ZsmXL2xWj9X0jPD8xU9BrVdQYTG+v3z938ojp12w+WhXQ2klOuJLi/rFqT2LcWTWWZmiovWe0z6EEIgKae8d/dndb9fUU9B3QdCsr9fIJ/iYrneo90hozkHKymiigOyYEt/bW47ncu6U3kA27v/QMSuKAvrdkaGj25vyq5uAil73/Bzu9dELP81eEN/dsKTZpBh8/qs9vD06/4sPogB67pfSriw8l2egq75n/+yNudilJr00JfnP2q+EL/Oqq8jZnhF4DKS3cZ8blfwbL/OjKkeWLL3glzYZ636qdLuzRXN8BrTkF1X8xtQZT7eA3g0uN/0W/Alq9kuJWQMwkxpxVc2mGhtp7RvsYSllUQHP+P9kN8ddTZbL/y+lWVvrlkzyg0TOQcrKaJ6DrQiO8suvV0IpxNwX/Y00a0OeHV83fj2sNLnLZ73bBP6bn+I1Vm1vyeYbBx47q3Snlk8e/HRXQTy8J/eakjgQbvc874c6Imx0kaU9b+ReHbiyd3X1f5TZvLj1aCxbuU8V7If4yf2NKxaWH/Sj5hiJuVeqA1p6CylVRezBVXhgRutSW/gS0aiXFrYDakxh3Vu2l2UdAE/6JRAb0F96J43pir6fK5D7+DaJWVpblkzigNWYg5WQ1TUAr18gNYyqObvIvmzCgL17YawJ31Lj2yGW/3jsteJb8s5m9NnfJ4fSDjxvVe5PDJ09fW/xREdD58yt+86ruvjfad0DvGF/xm8FIe75dvc2Fwfz4C/ct71Gct8x/PaL64j9KuqGoW5U2oDFTULEqYgZTaXdb+EJt/hAzBbRyJcX9Y9WexLizYpZmfECT/olEBrTTfwz/buz1VJncx79BxMrKtHySBrTWDKScrKYJaKzJ/tMfyQJ6akbEFmq8kSJq2R/3Xjsd9pF3tPuaiBEtOpN28HGjOnNV5ene//AqAlrtub5vat8BHVr5mxe+5Z37SO+N3pULD2bxYu/U4jI/MqX3xf894YaiblXKgMZNQcUSiRlMhU/G9L6gyxbQypUUN9KYSYw5K25pxgY08Z9IZEBz/m9vj72e6s0nWhAVKyvT8kkY0JozkHKyGvhG+pu8s8u3d8zCm8JDHbPwxkuDw695l00W0Gf8X1q09omfPrTQP1LjOZ5ey7778DMXeyfd5p+ywb/IsCUbfrZhSfD26PVpBx83qof9o0MX3X17eSu9Ajpp8Y0zg+Zd3/dN7TugBbNW3P3N4P+wc4tnvu8/YLlp13vtO6/3z9obHkzwFEVxmX/HPzL7wa2P3O7/6owzyTYUfauqXwaNDWjcFIRXRdxgKizxz7vw2ntuC/2Tpg5or5UUN9Lakxh31gb/rKilGfsqfOI/keiA3uSd+nDV9XRs2bLFf0Z20xbPRcVjI/OHnurj36D3ysq4fDqfLbvVP2NWd/WMxM1Amslq4Ec5/SeGggYN+1Gx/8GzDReuLayRZ/1HU497l00WUP+f9xnvnA3esRrPggbLftJkX+ne+iL/L6HTfy/fxa8Xj77hP+sysSvl4GNG1eW/AjWr+Jrf88Hj6qqAzn6xcOw1/296dHefNzVJQCe+ULwZwR50Xiocu9s7/KR30W3+dFQOxrkpi2779n35Uz7xZ+yR4jNiB/27S/+edENRtypVQOOmILwq4gYT9oY/sG9+Ujj2b6W7o0kDWnslxYw0ZhJjzopdmrEBTfwnEh3QO71TV0ZMSeyr8OlWVublU/K23+PxB3uNNG4G0kxW8wTUf15nrX/0Ie/oau/YGu9YsoBOLR6+1r/6k97/mO+LHlzNTzDfELwV+En/38B/QJ875Ndua8rBx4zK//zwZH/fAG/5q6MyoDP8Nfm6/7/bw33e1AQBHX7AO97lP5n0z/nDx71Vd1NwWf/tAW+FB+Nm7AnOftA74W7/6F7v6O0JNxR5q1IFNG4KQqsidjBh/p2Whf4H/l4N7tclDWgvpZUUM9Lakxh3VuzSjA1o4j+R6IB+3zv1jogpiQtoupWVffkEPvXu/7oLX8r1GmncDKSZrKYJ6Fh/Kl7zF4X/ettL3lHv/3XJAnp60cKCn/lXf8jbQlRGcjWX/VXlhzP+/3+2lk7Y4p3wrXSDjxuV/0rqo8E1/MA7XhnQ0ptX/AcR76S9qWFBQEtPAr7oHR/TXXrv4ovBWb/1jq8ND2bKidKm/LdVl/ayO7t4dHYu2YaiblWqgMZOQWhVxA4mpNu/y/lacELwQkbGgJZXUtxIa09i3FmxSzMuoMnXTXRA/XsG346YkriApltZ2ZePr+tq/9/Avw+bOBJpJqtpAhq88euDijNz7d7RNAGtdOae0A3esy2k+BCtxrK/+qXg97vHFk8YU37LS5f3JzahJ+Xga46qZ5w3+NLSOeL9v7cioCNLj07u8H6193ufKzYaz0/ShR+VTvH/TvMrcFXxwPDSDe72hndtaDDu2fJseM9TXFU64ZHpBYUdECXYUI1bleYeaNwUhFZF7GBC/NX6zdIJb/lLImNAyyspZqQxkxhzVvzSTP5JpLh1Ex3Q+8O/kDyg6VZW9uXj+47/T1C6Z50sEukmq2kCert/6Q8qx9efgJ566+nVN051oQ0GT/UVFR8q1HzgteRYxfC+Edqut4MEdyjl4GuO6n3v8E3ly3h3SSvfxlQ6039M92b8RuP5SZpTPmWNd8rTudy10RMyOjSYYeW/Wb8vUQ//Emyoxq3KEtCoKQititjBhPh34h4rn+I/65j5IXywkmJGGjOJMWfFL81EAe1z3cQ+B/pAxJTEBTTdysq+fDzBe7OvLX2CKVkk0k1W07yNKXiO54PKBZM1oJ89e/us0P7E0gc0eEH4zcr5KljhnfR2ysHXHNUr3uHvl6/hX4sn9Poop+dH3sXfjN9oPD9JoSWy3TtlUy53ZY0JOVkeTPkzWsHTFA9FXEmCDdW4VWkDWmsKQqsidjAh/g4sd5dP8T9VljmgwUqKGWnMJMacFb80+wxoonUT+yr8TyKmJC6g6VZW9uVTtNN/WvSyL0onJYtEusk6OwP60qKqdzj2GdDgH/zUwaf89574zzr5T9qvD43Y/1/bSykHX3NU/gc7Qnd6vFcHEgW01kbj+UkKNfvX3ilrcrmLqrfn+7g8mPJn4HPPe2c+WX0NuUQbqktAa09BaFXEDibEf30k9GTad7xT0r6NqddKihlpzCTGnBW/NPsIaMJ1Ex1Q/+37T0VMSVxA062s7Mun4E3/Bfix75e3mCwS6SbrrAzoqvAtnTGsfIP7Dmje5/5rmTuKx/xV+nBoxBu8k36ZcvA1R7XDO2lL+RqeKp6QJKA1Nxqvd0Bf9U7JB3SCi/Z21GCCwW+tvoZcyg1lD2jMFIRWRexgQvy3LoS+edJ/ei3DG+krV1LfKyBqEmPOil+a8QFNum4iA9rlv7Oq95uD4gOabmVlXz55h/2H2sPCb25NFol0k3U2BnRjcFuHX3X7Ex25keUbnCigwaO41eHRhxeX/wzQG+kGX3tU/iJ9sHwN3hOSCQJae6Px/CSFnnb1ml14z6r3nropW6p9ETWY3C+931sTcSWpNpQ5oHFTEFoVsYMJ8Z8LfiFXdWWZPolUsZJiRhoziTFnxS/N2IAmXjeRAfU/4T8xFzElcQFNt7KyL5984uf5t+/x8LiTRSLdZJ2FAf1idPHw0FteLj4hfSK0zJIF9Lnw/PnDuyZ0vv9ps49SDT5mVP6bn0JfGuPt1rvvgMZsNF7NF5GeDV6Pr7ELy17L3N/S7RGXTbWhVAGdX56f2CkIrYrYwYQ87m1gU/mUad4pWQJasZJiRhoziTFnxS/NuIAmXzeRAf2Od6L/v9/kAU23srIvn1zPcv8fo/KzuskikW6yzsKAPu39SvD/7N/WXh256GXvPx3o7xDGe2fIuPIXqXR57x4ZfSbV4GNG9al3eHrpPRmnvKd/+g5oqpsa5v9Ztn1SOsV/qeT90s7Kor+wqtcy/8y79JWlEz5vL+pJuaEEAQ1mOdcdeptX7BSEVkXsYEL8pzJuKJ1w0H/6K0tAK1ZSzEhjJjHmrPilGRfQ5OsmKqDt/qsp3lOgKQKabmVlXz7BvQF3TeXH+5NGIs1knYUB9d+kdtDfwmO1V0cuetn/yjvJf+ud/y730ndo5baGpjf54ONG5X8E7+ngGjZ5x/sOaKqbGha8kf6e4AT/62cLe3zwdyf7YuQv9lrmwQsKpbc0f6t4dGLaDcUF1H8rT+m9mb8OzU/sFIRWRexgQrqGhweSK30tWqaAVqykuJHWnsS4s2KXZlxAk6+biIB2+f+vneCHO3lA062s7Msn+PD6pZ9X/lLSSKSZrLMwoP6K918GODah9urIRS97/yMQs7xjm/3lEuzD+CP/o+qPpxt83Kj8N5/M9N9Sc8j/iHPfAU11U8NKH+X0f7Vrrnf8jvKovxNctnvFsoLVkYPJ5e7yLh58za2/u/Ib0m4oKqBLgyn3jg7zXxrvnBGan9gpCK2K2MGE3eBd8Br/3YNvpP0oZ82VFDfS2pMYd1bs0owMqD+jyddN74B+FuzWI3jOPnlA062szMvnN/578se8W3VjkkYizWSdhQH1V9z3iqd/6L+1OE1A/XeO+G9JO+mvyhneh3Df8L9pccLJdIOPG5X/sNEtKr5D4+Xguxz7Dmj8TX3Q26lF1Jd/lXYmMrm4d5uP/OfOvFc4/Y/F/Zt/Wf+VkE2Rgyl/Usfb9f5H/lt3nk27oaiALvDPO+X/Rcwu/hO8PDs8P7FTEF4icYMJ86PnbijumWB3aY+pWQJasZLiRhoziTFnxS7NyID6M5r8T6QqoKfeWRu8OD7O33NDmp2JpFtZGZfPJ/6+dYf9e/WNSRqJNJPV0O+FLy6sugfU34mtm79++/rvjHIxqyMXvez9FxmD7yAIPtEw7MbHntq4NLhDsiGXbvCxowp2Bzr8hu/feXlwXoKAxt/UZLuzu/x7318S7Dhoafj2D/venvc/bf+5/8Lb1BORg8kLvv7i0gd/vulO/wHwRafSbqgioD3+DlGDfUMEu70cdvm3rg0+CuLPT+wUhJdI3GDCuoN/gPw/xneDVrtsAa1YSbEjrT2JcWfFLc3KoVbOaPI/kdrfC196wilFQNOtrIzLJ3gD/nWh3do9+27VSGNnIM1kNfCjnM6NKpxd94C+5aKkCOjL3knB63+nF0Zs7pqKHSonGHzsqF4fFnVm3wGNv6nJAhoyxn9NqdeOwJ0bujt6MHnvj+598b2pN1T5KsAc79j4664pvlLxVORwR/Q5rxVLJGYwFaL/MTIFtGIlxY40ZhJjzopbmlVDrZjR5H8ieyIv6cLvgEsR0JQrK9vy6b37eOf/TyVxJFJM1lkY0FzlbrqneuuvxneURi37YMaCxyif9t4j9ayj3lkpBh87qh9Xbt57aJbgfaCxG+07oIsrWnFh8KVdx2f1usHBQ92IZZ57vldx1qffUGVAy386xV1UnZlTsY2x00PzEzcFFUskZjCVHqu8kH/rsgS0ciXF/mPVnsS4s2KWZtVQK2c08Z9IrYBeW/4IbJqApltZ2ZZPooDGz0CKyTobA/pB+AuG5h32HoZNLr/ZIyxq2fs7rCrvGOaL612lZcf9c1IMPn5Ua0Nnuru8l+ETBDR2owm+VC58tcN/UTr7i6qvihhTmoqogOZ+WfklGMM3ZdhQZUDLf7fePv7eD38sZczr4TfSx01B5d927cFU+Un4g3vX+c+BZQlo5UqKXwG1JzHurNpLs2qolTOa+E+kRkC/E7pomoCmXFmZlk+ygMbOQIrJOhsDmjtY+q6pMT85lVvqHQy+oaNS5FeB+b8+vvTWke5nwneBrtpZ+qLNNIOPH9ULpW8AGb+t1vfCeypSE7fRBAHteaz0fYOLw69Znnmi/FSjG353+VuUIwOa++jO8vewDb3+nSwbqvooyUPBBv2dpH5U+qJod+2HlR/ljJmCqtzVHEy1V0t3fdpWdvXnWzkrV1L8Cqg9iXFn1Vya1UOtnNGkfyKRAV1U8Q3YqQKacmVlWT7JAho/A8kn66wMaK57z52Lpoy4eOlPC28Ee9a/ttBeBcoil73/9pDw3nZ7Xlt37WUTLpwwc8n610OXTLUzkfhRndp12+xxw6cufuxoLkVA4zaaIKD5IT80f8rwiVfe91rVJbp23zd36ogRk+be8fTx0MnRAc3f19r2L3MmDx998fXrq987knBD1R9m/ui+BdMudKG9TO+7a/a4tslX3lf4463cmUjtKeiVuxqD6aV73x1XThw+dcG6g7l+fS981UrqY13WnsS4s2oszV5DrZzRhH8ilQEdNv7SebduO1h5kXQBTbuy0i+fhAGNn4HEkyUIKFLzPn070u4Ken04EkAGBLQZeV//condFRBQoB4IaBN4ZU9R6SFK92XFvC22u0YCCtQDAW0C/jeRrwuObwg9b2ODgAL1QECbgP8htZHeZ8+6N3kvAbZ9aHeNBBSoBwLaBD71P2sydMnm3U+tDt6W8mDfv5gZAQXqgYA2g+d7feWKc9d19f17mRFQoB4IaFPY1evzzrdFf3KqTggoUA8EtDkcvntkqJ5DF71ke3UEFKgHAtosOp+7b9G0McNGTbnitk0d1ldGQIF6IKAAkBEBBYCMCCgAZERAASAjAgoAGRFQAMiIgAJARgQUADIioACQEQEFgIwIKABkREABICMCCgAZEVAAyIiAAkBGBBQAMmrKgB47etT0Cy1Q4YujR880egwDyOdMt9LRo0d7DDfflAH9sL39eKPHMIB80N5+stFjGEDeb2/n7oHOu+3tlv+/IqAgoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVKqpArp3R+ng9gVjRs/b3B15rL8IqBQBlSKgUs0U0O5J0/1DPbe6ohvO9D7WfwRUioBKEVCpZgrodhcE9HHnVra/v8a5tb2P9R8BlSKgUgRUqnkCevTRkUFAT0123y38XOXGnKg+VgcEVIqAShFQqWYJ6O4phQfpfkD3Ovdx4eexC93z1cfqgIBKEVApAirVLAF9ZurUqeOCgK52c7wDi9w91cfqgIBKEVApAirVLAEtKD0Hepu70zuw0i2rPlYHBFSKgEoRUKmmDOgS94B3YINbUH2sQk9XFh3t7Ucz/SKyONje/kWjxzCAvJe/e9DoMQwg+YCeyPJ7CaubLaCXu4e9A9vcJdXHKnS2A0DLOWwZ0Glus3fgWTem+hgBBdDqTAN6RXCfc6ubVn2sMqDvZZG/1/1upl9EFu1Mt1J+uhs9hIEk63R/ahnQ0LOe86uP1QEvIknxIpIULyJJNeWLSKXX3Ve5m6qP1QEBlSKgUgRUqikDutpd6R241t1dfawOCKgUAZUioFJNGdC9zhWfY+0c7p6rPlYHBFSKgEoRUKmmDOipyW514ec2N/ZE9bE6IKBSBFSKgEo1ZUBzj7uhTxw/8fRot773sf4joFIEVIqASjVnQAt7AG1rc+7m7t7H+o+AShFQKQIq1ZwBzR++evSoeVt6Io/1FwGVIqBSBFSqmQKqQkClCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFKtENDjLwbq84dIQKUIqBQBlWrKgM5xZbtzuRdKR96uy6AIqBQBlSKgUq0Q0EcJaCsjoFvNmeAAACAASURBVFIEVKopA7o/eMi+wV3Wmct9zz1Q10ERUCkCKkVApZoyoIGuWcPfyv9Y7J6qz2h8BFSKgEoRUKmmDuh97rHCjynurboMJkBApQioFAGVauaA7h36zZ78jxNu2CvLLhqz8Adf1GlQBFSKgEoRUKkmDujpGcMOFH6+6YYOLb6ENOXl+gyKgEoRUCkCKtXEAd3sbi/+fMa5GTsPd2wb7yYdq7pI53tZ5G/zu5l+EVm0M91K+elu9BAGkqzT/al5QE9OGv5x8cCWOdd9Vvj5wQj3/eqAtgNAyzlsHtC1vXJ5v5tNQAG0PvOAnpro2qtOet61na48pacri4729qOZfhFZHGxv/6LRYxhA8g8qjzd6DAPIu+3tJ7L8XsInTrMH9Bn3T9Unve7c55m3F8KLSFK8iCTFi0hSTfsi0iK31TtwZs8eP3e73cQ6DImAihFQKQIq1awBfdcNDyJ3mdvkHXjQfaMOQyKgYgRUioBKNWtAf+wWBgd/6C46Wvh5aJTbXo8xEVAtAipFQKWaNaAL3erg4KGJbs6eIwe3T3ILeuoyKAIqRUClCKhUkwb0+IVuT+nISyO9ndnN/LA+gyKgUgRUioBKNWlAd7phoU8dHb7vitFTb3ysqy5DIqBiBFSKgEo1aUBNEVApAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlXph687ThpsnoCCgUgRU5/R3/+ycc875z986YXYNBBQEVIqAyhz/+jmev/rE6ioIKAioFAGVmX1OoM3qKggoCKgUAVV5+0ulgJ7zvNF1EFAQUCkCqtB95P03ryv385zrjK6HgIKAShHQejvZsX/frq0b1927YvnimdPGXXD+kEHn/c45laYYXTcBBQGVIqDZnew4sH/Xjq3rVt27fOnimePaLhgyeNDvnZPERUYjIqAgoFIENIljHx94efeOx9atXPGta+deMqHtr4f8+XlfTZTKvK+c9+dD/rpt/F+HTlpmNE4CCgIq1ZoBff1fLp1+4y6TTYfuVi6em+puZd655w0acv4F46bNXLx8xb3rNm7dtW9/R7CaO75SvtyLJkMnoCCgYq0Y0JNzvRe0R3zYv80ciXi2Mmkqzzl30OAhF7SNm7l46fJ7V63bumPX/o4j8Z/SvL70u5f2a9wxCCgIqFQLBrRnXBCiIUcT/krU3crfTXm3cubc0N3KzgzjPn2pv8HhZh9FIqAgoFItGND15bZd2+vM8t3Kwgs7me5WFh6BJ75bmcqmf/zdc770N2u667fFKgQUBFSqBQP6j+Xg/cHz+buVhUfg/b9buf9ApruVKR14+bfsjQmWCKhUiwX06Os7NyR+ScdP5R8O/u9/2zZpxtwly1es+vHjO/a8cuCQ3e48+sDu7GCMgEq1QkA739+zZdXyqyf8/X89NzaVv3Pen/zF+f84etqVi5auuPfBjT97bt9vDx7pafToKxBQGCOgUs0b0I9fe3rdd6+ZMXTIH8Y086Lrl9+xav3mHf/+6oHDrbBsCCiMEVCpJgvoyY59W1ctXzztgsGRD9TPG9I2c/FflI//F7vXY2wQUBgjoFJNEdAj+3esu3fpzLYhgyKfxBx8wbi5y1dt3dfhteeJ8lnLGzzw1AgojBFQqcYF9OSBXfk7m3PHXTA46qXzrw46f9zMpfdu3LX/i16/OTO40N+13EohoDBGQKXEAe3syN/ZXJF/iD7ka9EP0S+YtnjFuvydzbjXfk4vK34O/UuXJX0fffMgoDBGQKUkAc3f2dyYf4g+7vxBX4qo5rn5O5tzl+fvbB5IPJKOBxYvuOsNyyEbIaAwRkCl7AKa4PWgpfeu27H/M5urb04EFMYIqFS9A1p6PSjy85PnDs4/RA+9HjTgEFAYI6BSdQlo8HrQ+YO+XOMhuvd60LE6DLi1EVAYI6BS2QPamX+I7r0e9H/GvB60Y3/s60EDDQGFMQKqdOShFSvfSvUL+4PXg6q/56f8etCqrbsOnLYacWsjoDBGQHU+n1fcS/rw1/u4XPzrQV8ZFLwe1HpvK1IjoDBGQGUODfET+Pt7os4+UnzL5sy2If8x/vWgVvs4ZSMRUBgjoDLTSzX8s9KUF9+y2ffrQQe6Gjnw1kVAYYyAqrSHnsW82X896PejXw9qm8nrQXVBQGGMgGp0dSyPimXJH/zfX79k8YqHfv7KhzxErx8CCmME1M7R376wdc2d180e9/d/EflR9HO++n/93fi5y//1yRf4N7BBQGGMgNbXkf27Cg/PZ467YPBXIqNZ9MfeLjy4s2mMgMIYAe23T9/YveVHK66dNfZ/D458j3vel//LkK9fEDq+pNFjHiAIKIwR0CxOduwvfJpyceEd7rW+dO3cQYUPBy0vvGGzo/A+987y7ot/56VG34ABgoDCGAFNqvD29nWFtxxdMCTyY0HFaA6+YFzhFfStuyLe5b6x9FtXN2D4AxIBhTECGiPhHc22mf4dzT7+WFf733J5JR+8FCGgMEZAq4TvaNZoZmHPHYU3uOfvaB7oTLPt9iX/44//YuYuq6GjGgGFMQLq3dHceO/ywscoB0V9YVD4jubGXfv78+J5U3yp3MBBQGFsoAa0sE/Nwq6I83c0Iz97XnVHs14fpSSgUgQUxlozoC9dP7rtisdS/m0I72jWREClCCiMtWJAT87xavdX+/u+aPmO5h/UaOZXBw0pfBF6Xe9o1kRApQgojLViQCcG7fvj9yLODd/RjNrFkXdH8/xxMwt7h9sl3mMHAZUioDDWggHdXA7hdP+k0Acov1r7wbl/R3NfR+MaRkClCCiMtWBAx5Wr+OWlhZ3CNd8dzZoIqBQBhbHWCmjx+yhrfeC8ie5o1kRApQgojLVAQD/Z/28P33PD7LHn/0n0/o2+9J+H/MOkecvu+fHP9713otGD7QMBlSKgMNakAe356LUdP777+lmj/2fNdxwV3bHr9U+a48F5MgRUioDCWFMFtPglvoVPUUZ+HWXhDUeFL7sI7Rfua6k+SdkECKgUAYWxxgc0qOb50fc1zy19i2/wOtCvvlQ68/rGDj09AipFQGGsQQEtVnPpzBrfRhl8HWWNL1YrfbvQ37bcSiGgUgQUxoQB7erYv2Ndomoe6WNLq/+ocPkvX/G5ZNz1REClCCiMWQe0s1zNL8VUc+Ou/Z+l2OrxJ/552YNRH0NqdgRUioDCmElATxaquaL4YcrIfbcXdtw+t7jHjta7D9k/BFSKgMJY/QJa3BNxomp+UZ8rbEUEVIqAwlg/AxqqZlQ0/WquUuzoqCUQUCkCCmOv/Oz51NPtV3NarX0R56s5rfgJ9APEogoBlSKgMLX+f+Z79x8XH05w0eLH0JcXqhm9Y83zhgTV5CvTaiOgUgQUhrpn+/H70zdrXKJczeg9eATV3NdBNRMhoFIEFIZWlEL4l+FnKEvVHBy9847zih+oLOzuyHJxnp0IqBQBhZ2TXytH8Yf5aib4GDrV7CcCKkVAYaLnyIcHfn1fKJDRbzz6s78bd8XN9z268/W+PhqEhAioFAFFvxz95MBr+5752ca1q+74l6UL506b0PZ3/9/gPz0v8k5mUM3/+vfj5377+5t+8cZAe5O7AgGVIqBI5GTHgf37dm3duG7VvcuXLp45bVzbBUMGDzov8sOTkX4vbucdqBsCKkVAW8Xexf/wN5MfMB74iSPvvLHvFzsee3jV3SuWXjN3xrS2r5//3/78vP8jcSY9X/ujwUPOHzZq2vDQadNsRw4fAZUioK2h0/+i8j/ZVZfNnTzSkb8/uWNr/v7kiuWL587M3588f8ig2AfeUc4dlA/lBeOmzZy7ePmKe1et27pj1779HUdKK+rUfypfdkNdBo6+EFApAtoaLg469Pu/TvFb1Z2cNi7fycGDot87lLqTCd6Yubq0jb/hpXUNAipFQFvC0+Wafb33uflOHtif7+TGdRWdPDdtJ88blO9k27h8J5cuz3dy49Z8Jw909Osj5jf6L77/VUd/toLkCKgUAW0Jl4U6d//aVStuWbrAf8H7T86L/Uq03r583qDB/+t/t42bduXVS/95xQNrNm7b8atXDnxk9TaifxuV7/hfrmieb0U62xFQKQLa7Do79m1d9Z/6DmPE/cnBQ/L3J6fNzN+fXHFv/v7kjl35+5P6kr237zfkU4eAShHQ5nT0N8+tv+ubM9z/E71fjbLgBe9Zc69ftuK+VY8+seOFfQcOHmmiXbs1/kvlBhQCKkVAm0jPR6/8bO2ti6ZcMDju6cvpK+5dtWHTjl37fvvukVYoEwGVIqBSBLTxjhS/nWJa9GfEi3u+XDGmfMJXW+3jOwRUioBKEdAGKewyeFXxu8qjvj/yvOI3lW8s7S/4nfJd0qsbO+70CKgUAZUioFLFPRIVv0AyYt8aha+P9L6covc/yZrg8v+r1e6AElAtAipFQAWOeN+72zbka72rWfp2in3xnxH/6eDChX/vypbrJwHVIqBSBNRKV0fcU5vFHa2vWLdj/9Gk2zuz894VD7fi29EJqBQBlSKg9ZXuqc0BgYBKEVApAloP5ac2ox6j+09tDtQ9rRNQKQIqRUCzKz21GfV1aN7bj9b19dTmAEBApQioFAFNqa+nNovf67Njf+u91mOGgEoRUKnmDOjxFwPen972BWNGz9vcXadBZQho+anNiF2wf2XQQHxqMzECKkVApZozoC+4wNv5Yz23eodvqMtIO5b9v3/0p2M3Jqmx/9Rm2xCe2uwHAipFQKWaM6CPVgT0cedWtr+/xrm1dRjRk/7eOYbV3H+b98nK+Kc2d+xvxTcUNQYBlSKgUs0Z0O+5B8pHTk123y38XOXGnOj3gHaV9sb+9Yr7oF35x+jeU5tRu9f03n6Uz+YX/R7AwENApQioVHMGdLF7qnxkr3MfF34eu9A93+8B/W25ihsSP7WZ4LsrUBMBlSKgUs0Z0CnurfKR1W6Od2CRu6e/43krFMg//Mv/EHFn8z/85T9MX3zHuqdfO9Tf64KHgEoRUKmmDOgJN+yVZReNWfiD4iPm29yd3skr3bL+jmdLRDJ5atMWAZUioFJNGdA33dChxZeQprycP7YkeEJ0g1vQ3/H8hKc25QioFAGVasqAPuPcjJ2HO7aNd5OO5XKXu4e9k7e5S6oueOqTlML3QId8mPa3kUV+iTHTOvnp/rjRYxhAsk53wvts2QK6Zc51nxV+fjDCfT+Xm+Y2eyc/68ZUXbCzPaXfht6adHXaXwaAujhsGdCS+93sXO6K4B7oVjetvwFtv6bUz9//pcG0AEDfNAF93rWdDj8HOr/q/DNH0zo83O/n7/4k9e8ik/fyq6XRYxhA8o8pP230GAaQ/HQfyfJ7Cd/S3s+Avu7c5+VX4Ve5m/q3uYLTt/5hoZ8X7O3/ppAILyJJ8SKSVDO+iHRmzx5/Zx+73cTC+0Cv9I5d6+6ux5g6n7zngdfqsSEkQkClCKhUMwY0d5nb5B140H2j+Emk4hMGncPdc3UZVFN8K+fAQUClCKhUUwb0h+6i4lcFHRrlthc/C7+6cGybG9v/z8IXEFApAipFQKWaMqCHJro5e44c3D7JLSjszv1xN/SJ4yeeHu3W12dQBFSKgEoRUKmmDGjupZHezuxmflg4VtgfaFubczfXaY/KBFSKgEoRUKnmDGju8H1XjJ5642Nd/tHtV48eNW9Lvb5ciIBKEVApAirVpAE1RUClCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlWqFgB5/MVCfP0QCKkVApQioVJMG9PSj35w2ev7dHxePvOACb9dlUARUioBKEVCp5gzoB7O9YI7cVjj2KAFtZQRUioBKNWdA57vRT3587FdzXdsb+WPfcw/UdVAEVIqAShFQqaYM6KvO7Sz87Jrtrs//WOyequeYCKgWAZUioFJNGdBNboZ3YKubkP/vFPdW/UaUI6BiBFSKgEo1ZUDvcrd4B150Q7tyJ9ywV5ZdNGbhD76o06AIqBQBlSKgUk0Z0Hd+/YF34BF3US73phs6tPgS0pSXqy945oss8n/RhzP9IrLI/0V/2ugxDCDvtbd/1ugxDCD5gB7N8nudlgENfDLZrc3lnnFuxs7DHdvGu0nHqi7Q2Q4ALeewIKCvTnez84+1t8y57rPC0Q9GuO8TUACtzz6gh24b6i6vuJr73eyqy5z6JIv8Y8oPM/0isniX6VbKT/fHjR7DAJJ1uhO+oJM5oN2PjHQjHjpdcdrzru10jYunwotIUryIJMWLSFJN+SJSfljz3bA7D1Wd+Lpzn/d3QAUEVIqAShFQqeYM6PsT3cWv+4fP7Nnj5263m1iXQRFQKQIqRUClmjKgXdPdzeXEXeY2eQcedN+ox5gIqBYBlSKgUk0Z0G1uVmgN/NBddLTw89Aot70ugyKgUgRUioBKNWVAF7pbgz2AvpwP50Q3Z8+Rg9snuQU9dRkUAZUioFIEVKopAzqhtP86Nyp/9KWR3uGZH9ZnUARUioBKEVCpZgzocVcZ0Nzh+64YPfXGx7rqNCgCKkVApQioVDMG1BoBlSKgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKtUZAty8YM3re5u76bIyAahFQKQIq1QoB7bnVFd1Qp5ESUCkCnVOucAAAB/FJREFUKkVApVohoI87t7L9/TXOra3H1gioGAGVIqBSLRDQU5Pddws/V7kxJ+qwOQIqRkClCKhUCwR0r3MfF34eu9A9X4fNEVAxAipFQKVaIKCr3RzvwCJ3Tx02R0DFCKgUAZVqgYDe5u70Dqx0y+qwOQIqRkClCKhUCwR0iXvAO7DBLag6q+d0FvmAfp7pF5HFwfb2Y40ewwDyXv7/V40ewwCSD2hnlt9LWN16BPRy97B3YJu7pOqsznYAaDmHdQGd5jZ7B551YwgogNYnDOgVwT3QrW5adUDfyyJ/r/vdTL+ILNqZbqX8dDd6CANJ1un+VBfQ0HOg8+uwOV5EEuNFJCleRJJqgReRSq/Cr3I31WFzBFSMgEoRUKkWCOhqd6V34Fp3dx02R0DFCKgUAZVqgYDuda74jGvncPdcHTZHQMUIqBQBlWqBgJ6a7FYXfm5zY/ksfAsioFIEVKoFApp73A194viJp0e79fXYGgEVI6BSBFSqFQJa2B9oW5tzN9dpj8oEVIqAShFQqVYIaC63/erRo+Zt6anPxgioFgGVIqBSrRHQ+iKgUgRUioBKEVAYI6BSBFSKgMIYAZUioFIEFMYIqBQBlSKgMEZApQioFAGFMQIqRUClCCiMEVApAipFQGGMgEoRUCkCCmMEVIqAShFQGCOgUgRUioDCGAGVIqBSBBTGCKgUAZUioDBGQKUIqBQBhTECKkVApQgojBFQKQIqRUBhjIBKEVApAgpjBFSKgEoRUBgjoFIEVIqAwhgBlSKgUgQUxgioFAGVIqAwRkClCKgUAYUxAipFQKUIKIwRUCkCKkVAYYyAShFQKQIKYwRUioBKEVAYI6BSBFRqIAa06+RJy9uMSp0nT3Y3egwDSH66exo9hgHkpO10N2VAAaAVEFAAyIiAAkBGBBQAMiKgAJARAQWAjAgoAGREQAEgIwIKABkRUADIiIACQEYEFAAyIqAAkBEBBYCMmiqg2xeMGT1vc2jXant31D4P/RU33ai7vqb76JaXtQM6u8VN98G7po+YdeehelxNYwN6+tFvThs9/+6Pi0d6bnVFN5T2Bdo9abp/qPd5SC/xdFdeEtkkn+6ib7vbteM7yySf7hdGFc8bvb8O19rQgH4w27uVI7cVjj3u3Mr299c4tzY4f7sLbnPv85Ba8umuvCQyST7dRU87Atofyaf73ZFuyd7PX7nCXVyHL2JoaEDnu9FPfnzsV3Nd2xu53KnJ7ruFE1e5MSeK5x59dGRwm3udhwwST3flJZFN8ukuODSWgPZL8un+llvUlf9xeIx7pv9X28iAvurczsLPrtnu+lxur3PFe9/HLnTP53/snlL434l/m6vOQxbJp7vyksgk+XQX9FznRhHQfkg+3YeHuteKB1bN+WH/r7eRAd3kZngHtroJudxqN8c7tsjdk//vM1OnTh0X3Oaq85BF8umuvCQyST7dBZvdwtsIaD8kn+5t7uI6Xm8jA3qXu8U78KIb2pW7zd3pHVvplvkXKD1tEXEe0ko+3ZWXRCbJpzvv4MiRH9xOQPsh+XTf726r4/U2MqDv/PoD78Aj7qJcbol7wDu2wS3wL1C6zRHnIa3k0115SWSSfLpzue6r3ZM5Atofyaf7Frfy03unj5hz+/v1uN5meB/oJ5MLr5Vd7h72jm5zl/hnlG5zxHnIqu/prrwk+iXJdK93S3IEtC76nu7F7o4JxdfrR/y8DtfXBAF9dbqbfTyXm+Y2e8efdWP8c0q3OeI8ZJRguisvif5IMt1vtY09REDrIsF0z3Ru+EPvHNk3zw2vw33Qhgf00G1D3eWH8weuCP6nsdVN888r3eaI85BJoumuvCSySzTdp+a4p3MEtA4STffFzu0u/Dx1qftW/6+ywQHtfmSkG/HQ6cLB0NMW8/1zo54DnZ9DZgmnu/KSyCrhdK/0/pAJaD8lnO4F7p+8A5vd1P5faWMD+u58Nyz4SGrphbNV7ib/7N6vwpfPQ3pJp7vyksgo4XS/M2z8h515t7pbOzvZ2UNmSVf3ze4u78CvnTvW72ttaEDfn+gufj04stpd6R241t3tn7S9/D7QXuchtcTTXXlJZJN0uve6kN3qUZ41Eq/ue4K3Mb3k2vr/EKuRAe2a7m4uv0iRX0fFZ9w6h7vn/JNKtzniPKSVfLorL4lMEk83Aa2H5Kt7u5vZUzzwSPBu+/5oZEC3uVmnysdOTXarvVPHBp93Lz/N3vs8pJV8uisviUyST7eP50D7I/l0Hx3hthR+fjHJrez/9TYyoAvdrS/6CntCfNwNfeL4iadHu/XBBcJ7Y6o+D2kln+6qSyKLFKvbQ0D7I8V0r3bDVr3z6a5L3NQ63BtrZEAnlB+5jMp5u/Bra3Pu5tIT6eXb3Ps8pJV8uqsuiSxSrG4PAe2PFNN9eql3uYt/U4frbWBAj7vqv9PtV48eNW9LT+kS4SVWfR5SSj7dvS+J1NKt7gIC2g+pprv7pwvGjl38YB32BtrotzEBQAsjoACQEQEFgIwIKABkREABICMCCgAZEVAAyIiAAkBGBBQAMiKgAJARAQWAjAgoAGREQAEgIwIKABkRUADIiIACQEYEFAAyIqAAkBEBBYCMCCgAZERAASAjAgoAGRFQAMiIgAJARgQUADIioACQEQEFgIwIKABkREABICMCCgAZEVAAyIiAAkBGBBQAMiKgAJARAQWAjAgoAGREQAEgIwIKABn9/2TdEGRUsRGSAAAAAElFTkSuQmCC" width="672" /></p>
<p>È interessante notare come, nonostante la media di raccolta sia aumentata, la variabilità fra i comuni sia rimasta sempre molto ampia. <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAPACAMAAADDuCPrAAACOlBMVEUzMzM0NDQ1NTU3Nzc4ODg5OTk7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29wcHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fH///+LJzptAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nO3d+YMU1aG38b73vfcehk1QdtGIAu4JixtR0SzeKJGoedFEI64xRgUXDLm4cCOJkmjUqDeuV9wXUFFABhjq5X97Z7qqu6p7uqtO1fmeUz3t8/mB6eruqT595szD9N6IAACVNOoeAABMVQQUACoioABQEQEFgIoIKABUREABoCICCgAVEVAAqIiAAkBFBBQAKiKgAFARAQWAiggoAFREQAGgIgIKABURUACoiIACQEUEFAAqIqAAUBEBBYCKCCgAVERAAaAiAgoAFRFQAKiIgAJARQQUACoioABQEQEFgIoIKABUREABoCICCgAVEVAAqIiAAkBFBBQAKiKgAFARAQWAiggoAFTkJaBvmn6+KLurq+LvO9Lc+EHz8Mk9Tinh/cmjmjZ/xcZdY2V3hAHUsUSquiVeFu83N/qvs4FbSZIrv7vjCo3MP+OCax7b03mW7ikZ23nNhSdPn33y5fHmkT/85NyTZsw+5Qa3gShUjYQ9Atqy/O9l94TBU3NA611JHgKauOD57Fm6puTgRcm5ftDc3HtOsnmN20AUCGi4gJqRbWV3hYEzCAGtbSX5C6gx6w+nZ+makp+2zhMHdFVrk4BWNTUDakZeLrsvqIzFP4IrXfczEAGtayV1XPmqM9onoGb1gfZZOqfkvfZZmgH9e3tzCgW0+vIjoBnLuB+0LsMV0JpWkteAmnXts3ROyX8lp0+b1gzoPcnmCAGtrBXQ+ZN8WXZX/gLaGtK8kXSN7Cq7M4hM5YAOzEpSBnQkvk5zMwXd3jpL55TcEW/94vBY81b+dfHm3UfGDve+gJCmdkCnC3b18IamY82NjgXScUoJrWXf/vEe+3THaclx1wtGjCoGN6D919nArSRlQJckm6Nv3zUvuU5z9ybHdU7Jf8anfpKcuCbu71Gna6JiG4nhDWgHyW/HpGU/7sCC+Liz3HaNygY3oP0N3EryEdBxX16WXNFf9fyG5K+8b5PNC5pb88tebL0IqL1eyz66P/k/1m3XqGxYAlrrSvIU0Ojw9+PjThnt9Q1Xdc4CAXVXENBP45NvjaL9W9csmbnovFvebB4/9reNK+bPXLR688fpeTvWRP+NCZ88cM3yhbNmzl+2/q43cwbXc9k/Fx83kjnq+D/vu2z5/BkLll/229eOVxt80ajev+sHi2d974pd47cwHmnudVZ8/KzmxkXjh97+9fmLZ8w/+/++bL/TPv4Zj/vu8V+HHevOmLXwvI1/73qg4/hrd605Y87s01fd+nL2Jk86mIN3rZm3un38/qeuP3fJrJNOu+iuf0Yld9R9rT7etu3ReHgrt23b9k7HaBMXZecnZwomrYo+g5ns9VvOXzTrtIsf2d8V0P5JtlxJeT+s/pOYd1KfpZkZ6uQZLRxKS4+ARu8m9+5u776cCcUBLbeySi+f1u9kpyOTR9pnBhwmq+aAPjW/dW2vPRhF77WfQDZyS/seFOuAvr9uWmb2Vr7Qd3A9l33yC3ta+4jjz5yT3d3OdmzKDD5/VF9vaB1/zie9A3rgmva3rt1rs9PfxPf839LjareT9Nri1neueDV7hhfOS/e5LPMYSHvhPn3K+NfWMt9/6+z07KteKbOjyddql8l6MCoOaN8p6P6N6TeYbh9e0jrXvD87BbR7JeWtgJxJzDmp79LMDHXyjBYMJdUroFHyI7si/3K6LEq+udzKKr987APaewYcJqvegN6bGeG5o69mVoxZ3/qP1Tagz8zsmr/f9htcz2X/rGn9MGMHr+za3bqvKww+d1TvLU6PnvdOr4B+8b3Mdy782GKnm+IjNva42q0k7Z6RfuO0h9onj23q3OfV7VtrrYX7RPOvkGSZv7G449wjd9rvqMe1Kh3Q/lPQuSr6D6bLc7My59rmEtCulZS3AvpPYt5J/ZdmQUAtf0V6BvTP8ZGnHM+9nC6LCn4GvVZWleVjHdA+M+AwWbUGtHONXDG3Y3Nrcl7LgL44fdIEPtXn0nsu+/vi41r3kn911qTdfW9f+cHnjer9RdmjT7u7+aUjoBde2PGd540V77Q4oNfP6/jO1kiP/7h7n6tb85Ms3LfjW3HxMv/HrO6z32m7o17XqmxAc6agY1XkDKbTszOyZ5qRDLFSQDtXUt4Pq/8k5p2UszTzA2r7K9IzoIeT2/Dv5V5Ol0UFP4MeK6vS8rENaL8ZcJisWgOaa1Fy94ddQI8s67GHPk+k6LXsD8aPnY58Gm+OXdxjRGuOlR183qiOndd5fPwfXkdAu/2p+KoWB3Ra53dOfzs+9YHJO70xyg5m7dr42OYy/3Lx5LP/1XJHva5VyYDmTUHHEskZTIfP504+o6kW0M6VlDfSnEnMOSlvaeYG1PpXpGdAo+S7d+ReTvfurRZEx8qqtHwsA9p3BhwmK/AT6dfHJ6fXd+7q9dmhzl195Rmtw6/F57UL6NPJN625+9E/3LM62ehzt8WkZT+27+nT46OuS465PznLyLr7/3j/utbTo+8rO/i8Uf0u2Zy25qYN6V4mBXTh2ivPajXvh8VXtTigE5b//KZLWv/Dnt888YPkBsv6v7y/Z9cPk5Oezw6mdRdFc5n/LNlYsfnxBzYk37rsmN2Oel+r7odBcwOaNwXZVZE3mA7rktOmX/rL6zI/0tIBnbSS8kbafxLzTro/OanX0sx9FN76V6R3QNfHx/6u63I+3rZtW3KP7NZtsaXNrdnjh54o+BlMXlkVl8/hnalrkxOWj3XPSN4MVJ2swC/lTO4YajVo5M5m/1v3Nky/e2KN7ExuTT0cn9cuoMmP9+n4lPvjrT73WrSW/cJFifZf62uS34TDyXP5Tn+9uflGcq/LgtGSg88Z1WjyCNTy5mN+z7RuV3cFdMWLE1uvJb/Tc8YKr6pNQBc817warXfQeWli66b48GPxWbcn09E5GGMWr7nux5vGj/k8mbEHmveIfZj8ufRX2x31ulalApo3BdlVkTeYrDeSgV3y+cTWf7f/HLUNaP+VlDPSnEnMOSl3aeYG1PpXpHdAN8bH3tpjSnIfhS+3siovn7Z3kh7P+3DSSPNmoOpk1RvQ5H6du5PNe+LN2+Otu+Itu4AuaR6+NLn4b+P/mDf1HlzfVzBf0Xoq8GPJzyC5QR/tTWr3eMnB54wqef3wouS9Ad5OVkdnQJcla/L15L/bfYVX1SKgM/833h5N7kz66fjhg/GqW986b/L0gLezgzHLdrdO3hwfcVOy+Xy8ucFyRz2vVamA5k1BZlXkDiYr+aNldfKCv1dbf9fZBnSS9krKGWn/Scw7KXdp5gbU+lekd0Bvjo+9vseU5AW03Mqqvnxavoj//jXTX4omjTRvBqpOVq0BPTmZiteSRZE83vZSvBn/X2cX0KNrVk/4Y3Lxe+M99MpI1HfZn5f+hZ78//N4+4ht8RE/Kjf4vFElj6Q+2LqEX8fbnQFtP3kluRHxbtmrmtUKaPtOwBfj7blj7ecuvtg66a14++7sYBYfau8qeVp1+112VzQ3V0R2O+p1rUoFNHcKMqsidzAZY8mfnK+1jmg9kFExoOlKyhtp/0nMOyl3aeYF1H7d9A5o8pfBj3tMSV5Ay62s6ssnMfqD5GeQ/A1rHYmqk1VrQFtP/Pqo48RoT7xZJqCdjv0yc4V3b89o3kTrs+x/8FLr+8dObh4xN33Ky2j8Kzb/eMnB9x3V8VPiwbeXzpfx/70dAZ3dvnVyffytk5/O27HTfEmSpn/aPib5PR1fgb9pHpjZvsJj8fAuzQzG7ExnI76f4rz2EQ+cNmHiDYgsdtTnWpX5CzRvCjKrIncwGclqvaR9xNvJkqgY0HQl5Yw0ZxJzTspfmvavRMpbN70Dekv2G+wDWm5lVV8+iZ8lP4L2H4t2kag+WbUGdENy7o86x+cS0CNvP3n7lUtMZoetu/qamjcV+t7wWnegY3gXZfYbv0GC2Vty8H1H9UF8eH16nvhP0s6nMbVPTG7TvZm/03xJklamx9wVH/NkFF3ae0LmZAYzkv7OJn3pdYvGYkd9rlWVgPaagsyqyB1MRvJH3Jb0mORex8o34dcd6Drn5JHmTGLOSflL0yqghesm9z7Q23pMSV5Ay62s6ssn1npu9qXtVzDZRaL6ZNX6NKbWfTwfdS6YqgH9aueG5Zn3Eysf0NYDwm9Onq+fx0e9U3LwfUf1Snz45vQSftU8YtJLOWN3xmd/M3+n+ZIkZZbIjviYrVF0bp8J+TYdTPoardbdFPf0uBCLHfW5VmUD2m8KMqsidzAZyRtYPpsek7yqrHJAWyspZ6Q5k5hzUv7SLAyo1brJfRT+9z2mJC+g5VZW9eXTtCu5W/TMb9pH2UWi+mQNT0BfWtP1DMfCgLZ+4Ec+fCJ57klyr1Nyp/19mREn/7W9VHLwfUeVvLAj80dP/OiAVUD77TRfkqRMs/8RH3NXFC3t3l/is3Qw6Wvgo2fiEx/rvoTIakeSgPafgsyqyB1MRvL4SObOtJ/Fx5R9GtOklZQz0pxJzDkpf2kWBNRy3fQOaPL0/Sd6TEleQMutrOrLZ8KbyQPwJ3+Q7tEuEtUna2gC+pvsNV02kl7h4oCO+zp5LPOp5laySn+XGfH98VF/Kzn4vqN6Kj5qW3oJTzSPsAlo353mmxzQV+NjxgM63/T2Tq/BtAb/ePclRCV3VD2gOVOQWRW5g8lInrqQ+eTJ5O61Ck+k71xJxSug1yTmnJS/NPMDartuegZ0NHlm1eQnB+UHtNzKqr58xu1LbmqPZJ+vaReJ6pM1LAF9qHVdZ5634dGPo9npFbYKaOtW3O3Z0WfnK7kH6I1yg+8/qmSRbk4vIb5D0iKg/XeaL0lS5m7XuNkTz1mNn1O3eFu3b3oNJvpb/H139biQUjuqHNC8KcisitzBZCT3BT8XdV1YpVcidayknJHmTGLOSflLMzeg1uumZ0CTV/gviHpMSV5Ay62s6stnPPEXJNfv4ey47SJRfbKGJKDfzGkennbNy807pA9llpldQP+Unb9keBdnTk9ebfZpqcHnjCp58lPmQ2Pit/UuDmjOTvP1fRBpZ+vx+D5vYTlpmSd72tDjvKV2VCqgF6bzkzsFmVWRO5iMh+MdbE2POTU+pkpAO1ZSzkhzJjHnpPylmRdQ+3XTM6A/i49M/vu1D2i5lVV9+UTHf5L8MDpfq2sXieqTNSQBfTL+ltb/2W/lXeGeyz65OzB5Q5j4mSGnpB+kMho/e2TOsVKDzxnVF/Hh09rPyTgS3/1THNBSVzUr+bWc8Xn7mOShkg/ab1bW+wOrJi3zr+Jzn9s+4us9TcdL7sgioK1ZjsYyT/PKnYLMqsgdTEZyV8YV7SM+TO7+qhLQjpWUM9KcScw5KX9p5gXUft30Cuie5NGU+C7QEgEtt7KqL5/WXwPm4s5XrNtGoupkDUlAkyepfZjsYUveFe657F+Ij0qeepc8y739GVrR45nptR983qiSl+A92bqErfF2cUBLXdWs1hPpf9k6Ivn42Yl3fEjeTvbFnt84aZm3HlBoP6X5R83NBWV3lBfQ5Kk87edm/iMzP7lTkFkVuYPJGJ2ZHUjU/li0SgHtWEl5I+0/iXkn5S7NvIDar5seAR1N/q+dn4TbPqDlVlb15dN68foZX3d+k20kqk7WkAQ0WfHJwwAH5udd4Z7LPnkJxPJ465FkubTew/jT5KXqD5cbfN6okiefnJU8pWZv8hLn4oCWuqpZ7ZdyJt86en68fX066p+1zjv286sm3N5zMFF0Y3z21sfcJm9XfkXZHfUK6OWtKY83R5KHxg8vy8xP7hRkVkXuYLKuiM94cfLswTfKvpSz70rKG2n/Scw7KXdp9gxoMqP262ZyQL9qva1H6z57+4CWW1mVl88/k+fkz32v68rYRqLqZA1JQJMVd0Pz+E+SpxaXCWjyzJHkKWnfJqtyWfwi3DeST1qc/225weeNKrnZaNY0n6HxcuuzHIsDmn9VN8dvatHrw7/abyayqPnuNp8m953Fj3AmL4v77+S8ySMhW3sOJn2lTvzW+58mT93ZWXZHvQK6KjntSPIbsaL5I3h5RXZ+cqcgu0TyBpOVRM9c0Xxngmfb75haJaAdKylvpDmTmHNS7tLsGdBkRu1/RboCeuTdu1sPjp+SvHNDmTcTKbeyKi6fz5P31h35a/eVsY1E1ckK/rnwzYUlD2jyJrbmwvt23Pezk0zuFe657JMHGVufQdB6RcPIlVueeOjy1h8k90flBp87qtbbgc684uaNZ7dOswho/lW1ezu7s2+4eV3rjYMuz17/kRt2f/DFnv9KHnhbcqjnYMa1Pv7ijM3/tXVjcgN46ZGyO+oI6PHkDVFb7w3RetvLkbN/dGnrpSDJ/OROQXaJ5A0ma6z1Axj/Yfyi1WpTLaAdKyl3pP0nMe+kvKXZOdTOGbX/Fen/ufDtO5xKBLTcyqq4fFpPwL8s87Z2O9/rGmnuDFSdrMAv5TTmpImT5QF92/RSIqAvx0e1Hv87urrH7i7ueENli8Hnjur1kV4nFgc0/6raBTRjbvKY0qQ3Ajdm2rO9BzPugzmTz/586R11PgqwMt6ad9nFzUcqnug53FmF89qxRHIG06H3D6NSQDtWUu5IcyYx56S8pdk11I4Ztf8V2d3znCb7DLgSAS25sqotn8lvH2+S/1SsI1FxsoYkoFHn23Qviddfn88o7bXsWzPWuo3yxeR3pF6+Pz6pxOBzR/Xbzt3HN80sngeau9PigK7taMX01od2HVw+6Qq3bur2WObRM5OKc1/5HXUGNP3Vab5F1bGVHfs4+bTM/ORNQccSyRlMpy2dZ0quXZWAdq6k3B9W/0nMOylnaXYNtXNGrX9F+gX00vQlsGUCWm5lVVs+VgHNn4GKkzUsAf0o+wFDF+yLb4YtSp/skdVr2SdvWJW+Mcw3PzSdrjqYnFJi8PmjujtzorkxfhjeIqC5O7X4ULnsxc78c/vkb7o+KmJueyp6BTT6W+eHYMzcWmFHnQFNf2/j9/j7IPuylLmvZ59InzcFnb/b/QfT5ffZF+5dltwHViWgnSspfwX0n8S8k/ovza6hds6o9a9In4D+LHPWMgEtubIqLR+7gObOQMXJGpaARh+2P2tq7u+PRJfHB1uf0NGp50eBJd8+r/3UkbGns38Cnber/UGbZQafP6rn2p8AMm97v8+Fj3WkJm+nFgE9vqX9eYNrs49ZHns0vavRzLwp/RTlngGNPt2Yfg7btB++W2VHXS8luae1w+RNUj9tf1C0ufSTzpdy5kxBV+76Dqbbq+0/fWbcOuryqZydKyl/BfSfxLyT+i7N7qF2zqjtr0jPgK7p+ATsUgEtubKqLB+7gObPQLXJGpqARmO7N65ZPOv0y/8w8USwncmlZd5VINVz2SdPD8m+2+7x1+699Mz50+efte6+1zPnLPVmIvmjOvKX61acMnPJ2i37oxIBzdupRUDHh3zPhYtnLjh302td5xh9dtP5S2bNWnj+9U8ezBzdO6Djf2tt/8+Vi2bOOf2H93U/d8RyR90vZv5006pTp5vMu0z//cYVp8xYdO6miV/ezjcT6T8Fk3LXZzCTjP39+nMXzFyy6t4PI6fPhe9aSQXrsv8k5p3UZ2lOGmrnjFr+inQGdGTeGRdcu/3DzrOUC2jZlVV++VgGNH8GKk2Wp4CitPjVt7P9XcCkF0cCcEZAB0P88S/f83cBBBTQI6C1eGV3U/smytiZzbyt9XeJBBTQI6C1SD6J/N7W9v2Z+238IKCAHgGtRfIitdnxa8/GtsYPAc74xN8lElBAj4DW4ovktSbT1j3y7BO3t56Wsrn4GysjoIAeAa3HM5M+csWYy0aLv68yAgroEdCa/GXS652v6/3KKRECCugR0Lrsu2l2pp7T1rzk9+IIKKBHQOtz+E+b1pw6d+Skxedct/Vj3xdGQAE9AgoAFRFQAKiIgAJARQQUACoioABQEQEFgIoIKABUREABoCICCgAVEVAAqIiAAkBFBBQAKiKgAFARAQWAiggoAFREQAGgIgIaytH9+w/UPYbhcGT//oN1j2E4jO7ff6juMUxxBDSUQ3v2eH/b+e+GA3v2fFb3GIbD13v27K17DFMcAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFRlSgT0tQ0bnq17DP0R0FAIqAoBVZkSAf1jo3Fn3WPoj4CGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCr7X3vt/brHMBwIqDMCGgoBVXm20fhx3WMYDgTUGQENhYCqEFAVAuqMgIZCQFUIqMqL69c/XvcYChFQTCCgKgRUZXujcWPdYyhEQDGBgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVaZEQF9auPCuusdQiIA6I6ChEFCVKRHQ5xqNm+oeQyEC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhvLZ5s3/VfcYhgMBVSGgzghoKK81GhfXPYbhQEBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXU2FAEdff31D+oeQyECqkJAVQios6EI6AeNxqV1j6EQAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoUyJgL67fPntdY+hEAFVIaDOCGgoUyKg/9No/KTuMRQioCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOiOgoRBQFQKqQkCdEdBQCKgKAVUhoM4IaCgEVIWAqhBQZwQ0FAKqQkBVCKgzAhoKAVUhoCoE1BkBDYWAqhBQFQLqjICGQkBVCKgKAXVGQEMhoCoEVIWAOqsY0IMvtnyrHU8lBFSFgKoQUJXhCOhKk3p2fHm0N97xOjw7BFSFgKoQUJWhDOiDBLQsAqpCQFUIqDPbgP5P6yb7/ebMw1F0g7nN67DKIaAqBFSFgKoMR0BbRpfPfHv8y1rzhI/RVERAVQioCgFVGa6AbjJbJr4sNm97GExVBFSFgKoQUJWhCujz0y45Pv7lkBl55aqlc1f/+hsvgyqLgKoQUBUCqjJMAT26bOR/J76+aaZNaz6EtPhlH4Mqi4CqEFAVAqoyTAF9xGxofn3amGW79n28fZ5ZeKDrLEe/DG+8TWtquNhy/tZoXFT3GAr9tdFYX/cYCj3daFxd9xgKPdlobKh7DIUeaTQ21j2GQlsajQlgkwcAACAASURBVF/VcLGHPAT024UzP2se2Lbysq8mvn40y9zcdZ7De8Lb3Wh8v4aLLWdXo7G27jEUGm/TZXWPodD4301X1T2GQo82Gj+tewyFHhivfN1jKHTv+J/JNVzsPg8BvXtSLm8xKwioHQKqQkBVCGh/HgJ6ZIHZ03XUM2bG0c5juAnfBzfhVbgJr8JN+P483IR/2ny/+6jXjfm6xB484UEkFR5EUuFBJJXheRBpjXk8PnBs9+6D8aFnzQL5kMojoCoEVIWAqgxNQN8zM5NsRmearfGBzeYi+ZDKI6AqBFSFgKoMTUB/a1a3Dt5hlu6f+Lr3JLNDP6bSCKgKAVUhoCpDE9DV5vbWwb0LzMrdX364Y6FZddzHqEoioCoEVIWAqgxLQA9ON7vbGy/Njt/M7qxPfAyqLAKqQkBVCGjG+087+EWjcZXL97/l9arZB3SXGcm86mjfpnPmLLlyy6iHIZVHQFUIqAoBTX3xH40a/avXgvKZSKEQUBUCqhIooK/W2c9Gw+s7bxLQUAioCgFVCRfQsx+qycUEtBgBVSGgKgQ0NR7Qn5+oyW8JaDECqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVQgX0+NcOtjYaG1y+/5jdGAnogCOgKgRUJVBAj6yo4/2NWk7+1GqQBHTAEVAVAqoSKKD/W2c/G43tVoMkoAOOgKoQUJVAAX2r0Zh5dk3mNRqPWw2SgA44AqpCQFXCBfSndbVpCwEloOEQUBUCmiKgBQioBQKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkBVCGiKgA44AqpCQFUIaIqADjgCqkJAVQhoioAOOAKqQkAznrz6yurObzSWOHz7+juPWo2RgBYgoBYIqAoBTX3xr406PWk1SAJagIBaIKAqBDT1fq39bDxkNUgCWoCAWiCgKgQ0NR7QVR/W5HYCKkJALRBQFQKaGg/oFXX92j9OQEUIqAUCqkJAUwS0AAGNCGg4BFSFgKYIaAECaoGAqhDQFAEtQEAjAhoOAVUhoCkCWoCAWiCgKgQ0RUALENCIgIZDQFUIaIqAFiCgFgioCgFNEdACBDQioOEQUBUCmiKgBQioBQKqQkBTBLQAAY0IaDgEVIWApghoAQJqgYCqENAUAS1AQCMCGg4BVSGgKQJagIBaIKAqBDRFQAsQ0IiAhkNAVQhoioAWIKAWCKgKAU0R0AIENCKg4RBQFQKaIqAFCKgFAqpCQFMEtAABjQhoOARUhYCmCGgBAmqBgKoQ0BQBLUBAIwIaDgFVIaApAlqAgFogoCoENEVACxDQiICGQ0BVCGiKgBYgoBYIqAoBTRHQAgQ0IqDhENCMsY8cbGs01rl8/0G7MRLQAgQ0IqDhENDU2IpGjf7jTatBEtACBDQioOEQ0NTeOvvZaPzOapAEtAABjQhoOAQ09XmjMfOimpzRaPzWapAEtAABjQhoOAQ0NR7Qi+r6jXqKgIoQ0IiAhkNAUwS0AAFVIaAWCKgKAU0R0AIENCKg4RDQFAEtQEBVCKgFAqpCQFMEtAABjQhoOAQ0RUALEFAVAmqBgKoQ0BQBLUBAIwIaDgFNEdACBFSFgFogoCoENEVACxDQiICGQ0BTBLQAAVUhoBYIqAoBTRHQAgQ0IqDhENAUAS1AQFUIqAUCqkJAUwS0AAGNCGg4BDRFQAsQUBUCaoGAqhDQFAEtQEAjAhoOAU0R0AIEVIWAWiCgKgQ0RUALENCIgIZDQFMEtAABVSGgFghoxuZFC6s7udEwDt++8ILPrcZIQAsQUBUCaoGApg79S8iPZ5vErk0EtAABVSGgFghoan+t/WxsthokAS1AQFUIqAUCmhoP6IV1LdY/E1ARAqpCQC0Q0BQBLUBAVQhoREDDIaApAlpg6AJ69kM1uZiAFiOgKQJagICqlAlonQhoEQKaIqAFCKgKAY0IaDgENEVACxBQAhpQqIA+dvby6pY2GiMO3758/RdWYySgBQioCgGNCGgZx/6t1nVwh9UgCWgBAqpCQCMCWsZovevgV1aDJKAFCKhKmYBe/mFNbiCgxcIF9Kz/V5NdBFSEgKrwPNCIgJYxHtAVda2DFwioCAFVIaARAS2DgBYgoCoEVIWAWiCgKQJagICqENCIgJZBQAsQUBUCqkJALRDQFAEtQEBVCGhEQMsgoAUIqAoBVSGgFghoioAWIKAqBDQioGUQ0AIEVIWAqhBQCwQ0RUALEFAVAhoR0DIIaAECqlImoJd/U5M7CCgBLYOAFiCgKmUCWicCSkDtEdACBFSFgKoQUAsENEVACxBQAipEQO0R0AIEVIWAqhBQCwQ0RUALEFACKkRA7RHQAgRUpUxAT99ck9UElICWQUALEFAVngeqQkAtENAUAS1AQFUIaERAyyCgBQioCgFVIaAWCGiKgBYgoCoENBqcgD6ywuEj07/XaEx3+cj11R9bjZGAFiCgKgRU5bsS0H+v9dkYdm0ioAUIqAoBVfmuBLTWfjZutBojAS0wdAGdfVFNTiOgIt+dgJ5e1xS/SkBFhi6gdSKgEgTUOwKqQkAJaC8E1D8Cmo+AqhBQFQIaEdATBFSHgBLQXgiofwQ0HwFVKRPQf5tZk/8goCIE1DsCqjJ0AeVpTHkIaERATxBQHQKqQkBVCKh3BFSFgKoQUBUC6h0BVSGgKgRUhYB6R0BVCKgKAVUhoN4RUBUCqkJAVQiodwRUhYCqEFAVAuodAVUhoCoEVIWAekdAVQioCgFVIaDeEVAVAqpCQFUIqHcEVIWAqhBQFQLqHQFVIaAqBFSFgHpHQFUIqAoBVSGg3hFQFQKqQkBVCKh3BFSFgKoQUBUC6h0BVSGgKgRUhYB6R0BVygT09B01uY6AihDQiICeIKA6ZQJaJwIqQUAjAnqCgOoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqlAnoyn/W5DYCKkJAIwJ6goDq8DxQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvhi6gy+r6tIw7CagIAVUhoN4NXUDrREAlCKgKAfWOgBLQXghoAQIaEdATBJSA9kZACxDQiICeIKAEtDcCWoCARgT0BAEloL0R0AIENCKgJ4YwoAsfqsk1BFSEgKoQUO+GLqA8DzQPAVUhoBEBPUFAdQioCgFVIaDeEVAVAqpCQFUIqHcEVIWAqhBQFQLqHQFVIaAqBFSFgHpHQFUIqAoBVSGg3hFQFQKqQkBVCKh3BFSFgKoQUBUC6h0BVSGgKgRUZWACevDFlm+b2ztWzZ1zwSNjsnEQ0FwEVIWAqhDQqERAnzMt74xvHb82PnzFMdU4CGguAqpCQFUIaFQioA92BPRhY27d88FdxtytGgcBzUVAVQioCgGNSgT0BnNbunFkkfnFxNffmLmHROMgoLkIqAoBVSGgUYmArjWZcTxvzGcTXw9MN8+IxkFAcxFQFQKqQkCjEgFdbN5ON243K+MDa8wvReOYGgGdfWNNLiGgIgRUhYBG9gE9ZEZeuWrp3NW//mZi6zqzMT76VnOVaBxTI6B1IqASBFSFgEb2AX3TTJvWfAhp8cvjW+tad4jeb1Z1nfH4WCU1B9RqjN/WG9BbrAb5Zb0Bvd1qkJ/WG9B7rQb5Xr0BfdBqkG/UG9BtVoN8pd6A7rAaZLfj2oA+bcyyXfs+3j7PLDwQRWeb38VHbzff6zrj4T2V1BvQn1iN8a16A3qd1SBfrTegv7Aa5Iv1BnST1SB31xvQ26wG+ad6A3qX1SCfrDegv7MaZLd92oBuW3nZVxNfP5plbo6iU80j8dE7zVwCSkATBFSFgKoMSkDbbjErouic1l+gj5tTCSgBTRBQFQKqMnABfcbMOJq9D/TCrtOH+z7QM76pyQ7uAxXhPlAV7gOtEtDXjfk6fRT+N2Z92R30GcfUeBSe54Hm4VF4FR6FVxmQR+GP7d59MD70rFkw8TzQc+OtS81NonEQ0FwEVIWAqhDQyP4v0DPN1vjAZnNR85VIzbsIDs80fxKNg4DmIqAqBFSFgEb2Ab3DLN0/8XXvSWZH87Xwt09sbTcn81r4IAioCgFVIaCRfUD3LjArd3/54Y6FZtXEvasPm2mPHjz05Bxzn2ocBDQXAVUhoCoENCrxINJLs+M3szvrk4mtifcDnTHDmKtV76hMQPMRUBUCqkJAozKPwu/bdM6cJVduGU02d/xgzkkXbLN8rN9iHAQ0FwFVIaAqBDTiM5FOEFAdAqpCQFUIqHcEVIWAqhBQFQLqHQFVIaAqBFSFgHpHQFUIqAoBVSGg3hFQFQKqQkBVCKh3BFSFgKoQUBUC6h0BVSGgKgRUhYB6R0BVCKgKAVUhoN4RUBUCqkJAVb47AT3poZpsJKAiBFSFgKp8dwJaJwIqQUBVCKgKASWgEwioCgFVIaARASWgQgRUhYCqEFACOoGAqhBQFQIaEVACKkRAVQioyncnoAv+WZMHCagIAVUhoCrfnYDyPNA8BFSFgKoQ0IiAniCgOgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFRl6AJaJwLqFwFVIaAqwxXQt+oN6J+sBlkRASWgMgRUZbgCOnbdQgezG40ZLt//w8NWg6yIgBJQGQKqMlwBdfPHRuPOABdTEQEloDIEVIWApgioDQKaj4CqEFAVAhoR0BMEVIeAqhDQFAG1QUDzEVAVAqpCQCMCeoKA6hBQFQKaIqA2CGg+AqpCQFUIaERATxBQHQKqUiag839ck7MIKAE9QUB1CKiKdUDfrvdFPn+wGqQbAmqDgOYjoCrDFdDDC+vsp3nPapBuCKgNApqPgKoMV0Cj0Tder25zo3GVw7e/9Y3dGN0QUBsENB8BVRmygDrZbrv060RAbRDQfARUhYCmCKgzAkpAZQioCgFNEVAbBDQfAVUhoCkC6oyAElAZAqpCQFME1AYBzUdAVQhoioA6I6AEVIaAqhDQFAG1QUDzEVAVApoioM4IKAGVIaAqBDRFQG0Q0HwEVIWApgioMwJKQGUIqAoBTRFQGwQ0HwFVIaApAuqMgBJQGQKqQkBTBNQGAc1HQFUIaIqAOiOgBFRm6AJ6wT9rsomAthFQGwQ0HwFVKRPQOhHQBAG1QUDzEVAV64Du/z+1BvS/rQbphoA6I6AEVGa4AhrtvsXBleOLxeX7t4zZDdIJAXVGQAmozJAF1MlzjcZNAS7GDQF1RkAJqAwBTRFQFQJqg4DmI6AqBDRFQJ0RUAIqQ0BTBFSFgNogoPkIqAoBTRFQZwSUgMoQ0BQBVSGgNghoPgKqQkBTBNQZASWgMgQ0RUBVCKgNApqPgKoQ0BQBdUZACahMmYCurOt9Om4joG0E1BkBJaAyZQJaJwKaIKDOCCgBlbEO6KF/rzWgf7QapBsCqkJAbRDQfMMV0Oj5X2yo7qJGY4nDt2944JjdIJ0QUBUCaoOA5huygDp5ttH4cYCLcUNAVQioDQKaj4CmCKgKAXVGQAmoDAFNEVAVAmqDgOYjoCkCqkJAnRFQAipDQFMEVIWA2iCg+QhoioCqEFBnBJSAyhDQFAFVIaA2CGg+ApoioCoE1BkBJaAyBDRFQFUIqA0Cmo+ApgioCgF1RkAJqAwBTRFQFQJqg4DmI6ApAqpCQJ0R0OEL6Nwba7KWgLYRUBUCaoOA5rMO6Ne1vlFc4w6XRWCJgKoQUGcEdMgCenxpnf3817+6LAJLBFSFgDojoEMW0Ojg8w62NBqrXb7/XYclYI2AqhBQZwR02ALq5H8ajZ8EuBg3BFSFgDojoAQ0g4CqEFAVAmpjigR0dl0PcF9CQNsIqAoBdUZASwW0TgQ0QUBVCKgzAmof0OjMOvv5L3/2+xNoIqAqBFSFgNqYEgH99gWHB6gfajTOHvgHuAmoCgFVIaA2pkRAnbzWaFwc4GLcEFAVAqpCQG0Q0IFAQFUIqAoBtUFABwIBVSGgKgTUBgEdCARUhYCqEFAbBHQgEFAVAqpCQG0Q0IFAQFUIqAoBtUFABwIBVSGgKgTUBgEdCARUhYCqEFAbBHQgEFAVAqpCQG0Q0IFAQFUIqAoBtUFABwIBVSGgKgTUBgEdCARUhYCqEFAbBHQgEFAVAqpCQG0Q0IFAQFUIqAoBtUFABwIBVSGgKgTUBgEdCARUhYCqEFAbBHQgEFAVAqpCQG0Q0IFAQFUIqAoBtUFABwIBVSGgKgTUBgEdCARUhYCqEFAbBHQgEFAVAqpCQG0Q0IFAQFUIqAoBtdFozNtdk7sIaBsBVSGgKgTURqNWBDRBQFUIqAoBtTGv1oDeH+AaElAVAqpCQJ0NSkDf++291d3caJzm8O33PnYswDUkoCoEVIWAOhuUgDr5oNG4tO4xFCKgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUWcWAHnyx5VvteCohoCoEVIWAqgxLQI8+eMmpcy686bPmxnOm5R1fIyuBgKoQUBUCqjIkAf1oRRzM2dsnth4koGURUBUCqkJAnVkH9EIz57HPDrxwvpnxxvjWDeY2j4Mqi4CqEFAVAqoyHAF91ZhdE19HV5gfjn9Za57wN6bSCKgKAVUhoCrDEdCtZll84HEzf/zfxeZtXyOqgICqEFAVAqoyHAG90VwTH3jRTBuNDpmRV65aOnf1r7/xNrAyCKgKAVUhoCrDEdB3//FRfOABszSK3jTTpjUfQlr8cvcZj34Z3nib1tRwseX8rdG4qO4xFPpro7G+7jEUerrRuLruMRR6stHYUPcYCj3SaGysewyFtjQav6rhYg9pA9ry+SJzdxQ9bcyyXfs+3j7PLDzQdYbDe8Lb3Wh8v4aLLWdXo7G27jEUGm/TZXWPodD4301X1T2GQo82Gj+tewyFHhivfN1jKHTv+J/JNVzsPi8BffU0s+JgFG1bedlXE5sfzTI3E1A7BFSFgKoQ0P58BHTvddPM2R07vsWs6DoPN+H74Ca8CjfhVbgJ35/+JvzYA7PNrHuOdhz3jJlxtM/ZA+JBJBUeRFLhQSSV4XgQKYreu9CMbNzbdeTrxnytHVAVBFSFgKoQUJUhCegHC8zpryeHj+3efTA+9KxZ4GFQZRFQFQKqQkBVhiOgo6eZqw+2t840W+MDm81F+jGVRkBVCKgKAVUZjoBuN8uPpFt3mKX7J77uPcns8DCosgioCgFVIaAqwxHQ1eba1juAvjwezgVm5e4vP9yx0Kw67nV4dgioCgFVIaAqwxHQ+e33rzMnjW++NDs+fNYnPgdni4CqEFAVAqoyFAE9aDoDGu3bdM6cJVduGfU5NmsEVIWAqhBQlaEI6GAjoCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVUhoCoE1DsCqkJAVQioCgH1joCqEFAVAqpCQL0joCoEVIWAqhBQ7wioCgFVIaAqBNQ7AqpCQFUIqAoB9Y6AqhBQFQKqQkC9I6AqBFSFgKoQUO8IqAoBVSGgKgTUOwKqQkBVCKgKAfWOgKoQUBUCqkJAvSOgKgRUhYCqEFDvCKgKAVWZEgH9eOfON+oeQyEC6h0BVSGgKlMioF/v2bO37jEUIqDeEVAVAqpCQFUIqHcEVIWAqhBQFQLqHQFVIaAqBFSFgHpHQFUIqAoBVSGg3hFQFQKqQkBVCKh3BFSFgKoQUBUC6h0BVSGgKgRUhYB6R0BVCKgKAVUhoN4RUBUCqkJAVQiodwRUhYCqEFAVAuodAVUhoCoEVIWAekdAVQioykf33vtC3WMoRECdEdBQCKjKlAjolEBAnRHQUAioyv7XXnu/7jEMBwLqjICGQkBVDuzZ81ndYxgOBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVGfaQiAAAB2tJREFUIaDOCGgoUyKgn91yy1N1j6EQAVUhoM4IaChTIqBTAgFVIaDOCGgoBFSFgKoQUGcENBQCqkJAVQioMwIaCgFVIaAqBNQZAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKG8dfrpP697DMOBgKpMiYA+t3z5trrH0B8BDeXQnj0f1z2G4UBAVaZEQAcbAQ2FgKoQUBUC6oyAhkJAVQioCgF1RkBDIaAqBFSFgDojoKEQUBUCqkJAnRHQUAioCgFVIaDOhiKgBx955Lm6x1CIgKoQUBUC6mwoAjolEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDQUAqpCQFUIqDMCGgoBVSGgKgTUGQENhYCqEFAVAuqMgIZCQFUIqAoBdUZAQyGgKgRUhYA6I6ChEFAVAqpCQJ0R0FAIqAoBVSGgzghoKARUhYCqEFBnBDSUY99+e7juMQyH8ZkcrXsMw2F8Jo/UPYYpjoACQEUEFAAqIqAAUBEBBYCKCCgAVERAAaAiAgoAFRFQAKiIgAJARQQUACoioABQEQEFgIoIKABUREABoCIC6tuOVXPnXPDIWHrE809lT+7cQo6cmdx/86qTF639Pe/NZqf/TB58seXbOgY29RBQuaMPXnLqnAtvit/z9/i1pumKY62Txxaeljlz5xY6WM/kqwvi087YV8cwpwDrmXzOtLxTxzinHgKq9tGKeAHO3j6x9bAxt+754C5j7m6dvsNkk9m5hSzrmTx6llnxwjf7/nCyubKekQ46+zX5IAEth4CqXWjmPPbZgRfONzPeiKIji8wvJo78jZl7qHnq/gdnZ5LZuYVO1jP5hJnV/NPzaWM+r2msg81+Td5gbqtrkFMTARV71ZhdE19HV5gfRtHzxjRvNh2Ybp4Z//Ls4on/21uLtXMLXexn8hbz0+bXIyNmdz1jHWwl1uRa80Rdo5yaCKjYVrMsPvC4mR9Ft5uV8dYa88vxf59esmTJKe3F2rmFLvYzebnZHB+Ya54MPswpoMSaXGzermOEUxcBFbvRXBMfeNFMG42uMxvjrVvNVckZuA/Ukv1Mjh4+2vz6geHXvxf7mTxkRl65aunc1b/+JvggpygCKvbuPz6KDzxglkbRutZdSvebVckZCKilkjMZHfzLCnNFwPFNHfYz+aaZNq35ENLil4OPcmoioJ58vmjiQc6zze/ize3me8kJBLQku5ncNcOYkZv44Og8xTP5tDHLdu37ePs8s/BALUOccgioH6+eZlYcjKJTzSPx9k4zNzmFgJZjOZM7J/5uWsst+BwWM7lt5WVfTXz9aJa5uYYRTkEE1Ie9100zZ088s+ac1v/2j5tTk9MIaBn2Mxl99ffVZs67QUc3lZSYyWjiiQ0rwg1tKiOgemMPzDaz7mk+rpG5v+nC5FQCaq/MTI4bXW7+M+DoppKSMxk9Y2YcDTe6KYyAyr13oRnZuDc+3H7E8zdmfXIyAbVWaiYn3GPOCDW2qaX0TL5uzNehBjelEVC1DxaY019vbdxuzo0PXGpuSo4ioLZsZ/LL6dPfi495zCwOOcApw3Ymj+3efTA+5lmzIOQApy4CKjZ6mrn6YHvreWOaLzI8PNP8KTmKgFqyn8nFZmd8YJNZF3KEU4X9TJ5ptsYHNpuLQo5w6iKgYtvN8sybqh1ZZG6Pjz35UHIUAbVkP5M/Muc335pt39z0/TGQsp/JO8zS/RNf955kdgQd4pRFQMVWm2tb76g48Vzkh820Rw8eenKOua91BgJqyX4m98wwF//jy0+fWmpO510se7Cfyb0LzMrdX364Y6FZdbymwU4xBFRsfvv9wMxJUfzeizNmGHN1+91rCailEjO5dUZ8vvSOPmSUmMmXZsfnO+uTeoY65RBQrYOmc7GOL84fzDnpgm3p/+cE1E6pmdxz7TknLbn0vtHww5wCSs3kvk3nzFly5RZm0hIBBYCKCCgAVERAAaAiAgoAFRFQAKiIgAJARQQUACoioABQEQEFgIoIKABUREABoCICCgAVEVAAqIiAAkBFBBQAKiKgAFARAQWAiggoAFREQAGgIgIKABURUACoiIACQEUEFAAqIqAAUBEBBYCKCCgAVERAAaAiAgoAFRFQAKiIgAJARQQUACoioABQEQEFgIoIKABUREABoCICCgAVEVAAqIiAAkBF/x9I0qpiOJNnXQAAAABJRU5ErkJggg==" width="672" /></p>
</div>
<div id="comuni-ricicloni" class="section level2">
<h2>Comuni “ricicloni”</h2>
<p>La mappa sottostante mostra la percentuale di raccolta nei vari Comuni della Regione per l’anno 2016.</p>
<div id="htmlwidget-18d4dd769963b844101c" style="width:672px;height:480px;" class="leaflet html-widget"></div>
<script type="application/json" data-for="htmlwidget-18d4dd769963b844101c">{"x":{"options":{"crs":{"crsClass":"L.CRS.EPSG3857","code":null,"proj4def":null,"projectedBounds":null,"options":{}}},"calls":[{"method":"addPolygons","args":[[[[{"lng":[9.51130347,9.51296324,9.51634547,9.52590567,9.5283935,9.53022486,9.54849497,9.5310562,9.51725739,9.51614955,9.50931643,9.5078398,9.5026311,9.48891474,9.48897744,9.46335405,9.45488877,9.45834272,9.45890519,9.45939059,9.46045051,9.46236501,9.46332169,9.47927954,9.48406032,9.49951447,9.51088791,9.51130347],"lat":[45.00105721,44.99545963,44.99629955,44.98873036,44.98613535,44.97994255,44.97908211,44.94478621,44.93263388,44.93204478,44.92889777,44.92813917,44.92808119,44.93940219,44.94557726,44.9540379,44.96088639,44.97746309,44.97801896,44.97844909,44.979354,44.98084958,44.98152087,44.99238328,44.9951717,45.00075381,45.01193781,45.00105721]}]],[[{"lng":[9.98821663,9.97940214,9.98740878,9.99912449,9.99391349,10.01089591,10.00947845,10.00325577,9.99463695,9.98350793,9.98433171,9.98668165,9.96510051,9.96268495,9.9551772,9.94849146,9.94126266,9.92507849,9.91911371,9.92424189,9.89019873,9.89507874,9.90485033,9.91498157,9.91831397,9.93326052,9.94680842,9.95586966,9.96022792,9.96630448,9.96653637,9.96933739,9.97402469,9.97563147,9.97887714,9.97998881,9.98119383,9.99057746,9.98821663],"lat":[44.94855966,44.9371221,44.93593178,44.92918255,44.90771329,44.87564305,44.87422426,44.87238867,44.86738692,44.85759904,44.85172257,44.84556288,44.83608805,44.83614445,44.84042049,44.83771313,44.85384111,44.85794328,44.85766755,44.86879808,44.90074617,44.89934871,44.90136917,44.90046926,44.89657164,44.89433499,44.90803256,44.91514965,44.92352094,44.94132958,44.94155266,44.94079076,44.94364951,44.9502072,44.94873912,44.94851353,44.9485572,44.95241903,44.94855966]}]],[[{"lng":[9.997304,10.03102302,10.02866075,10.01607095,10.00778096,10.00442041,9.98740878,9.99057746,9.97998881,9.97425758,9.93735425,9.92885151,9.93848073,9.94079792,9.94193825,9.94848991,9.94561733,9.997304],"lat":[45.00114174,44.98383775,44.98083441,44.97393465,44.96982225,44.96836653,44.93593178,44.95241903,44.94851353,44.9589148,44.95918768,44.96262387,44.97773134,44.97982771,44.9797553,44.98817352,44.99089698,45.00114174]}]],[[{"lng":[9.57143265,9.58223692,9.59496247,9.61186792,9.62797083,9.65901338,9.66299561,9.66368911,9.66446982,9.66947098,9.68425722,9.68359738,9.68137735,9.68055996,9.67994926,9.67995471,9.68093236,9.68067719,9.67900767,9.65943105,9.6509071,9.6514085,9.66284578,9.66559425,9.66789753,9.67021068,9.66111257,9.64672963,9.63938917,9.62771448,9.62014137,9.61326247,9.59784905,9.58503789,9.57101088,9.57680691,9.57934796,9.57406685,9.5679421,9.5434727,9.53924631,9.53254624,9.52257782,9.50187461,9.50116318,9.50302451,9.50618698,9.50615519,9.49749785,9.49830183,9.51320519,9.51381271,9.51939495,9.53068631,9.53517169,9.53966066,9.54481419,9.55043282,9.55503421,9.55919878,9.55834198,9.57143265],"lat":[44.83782725,44.83650339,44.8313696,44.83534023,44.8199582,44.8236182,44.82673689,44.82764208,44.83063524,44.83318065,44.82972622,44.82634537,44.823658,44.82191645,44.81407923,44.81346705,44.81057154,44.80392946,44.79958235,44.78257492,44.76641985,44.75706368,44.74296335,44.74030971,44.73921245,44.73537646,44.72277229,44.71703916,44.71888997,44.72646264,44.72546875,44.72218405,44.7262538,44.72309733,44.73097331,44.73599446,44.74256224,44.74499251,44.74129621,44.75850155,44.75646006,44.74778633,44.74202593,44.74633185,44.74879258,44.7507469,44.76614924,44.76639695,44.7721334,44.79067444,44.79051841,44.79059669,44.79844834,44.79852246,44.80229146,44.80909397,44.80845735,44.80488356,44.80342094,44.80388674,44.82779163,44.83782725]}]],[[{"lng":[9.47495487,9.47989254,9.4685394,9.46893451,9.45118105,9.44613728,9.44233247,9.4376896,9.43546501,9.4338203,9.4327003,9.41458061,9.43940376,9.44626723,9.40616679,9.40037633,9.4000628,9.40985596,9.40412696,9.40035283,9.39870411,9.39850832,9.39830786,9.39222728,9.3796218,9.35513748,9.34780391,9.33258079,9.32854716,9.28589944,9.32152808,9.35419431,9.36309823,9.36780556,9.36878179,9.3713794,9.37396196,9.3767442,9.37788388,9.37995024,9.3806361,9.38752212,9.39722527,9.3980627,9.39907599,9.40222798,9.41134601,9.41552174,9.42008708,9.42103947,9.42963857,9.43070359,9.44537432,9.44628586,9.44721106,9.44789634,9.44888315,9.47495487],"lat":[44.84490381,44.83151503,44.81835603,44.80955933,44.80143887,44.8032411,44.81332933,44.81145677,44.80825151,44.80477393,44.80380593,44.79632906,44.78571297,44.77744934,44.7670574,44.74651673,44.73585915,44.72762335,44.72459198,44.72663979,44.72928322,44.73019315,44.7304279,44.73512113,44.73882764,44.73986065,44.74278196,44.73504035,44.73606027,44.75942783,44.80003204,44.81186328,44.82240383,44.82536847,44.82571641,44.82641016,44.82672581,44.82661764,44.82680292,44.82748022,44.82790103,44.83988672,44.84520963,44.84553978,44.84568029,44.84584928,44.84508763,44.84684591,44.85168135,44.85212794,44.85466151,44.85491856,44.85524937,44.85529084,44.85545825,44.85569863,44.85727911,44.84490381]}],[{"lng":[9.48099204,9.48052555,9.48010248,9.48016569,9.4821116,9.48193514,9.48155359,9.48099204],"lat":[44.83014207,44.83014404,44.83032587,44.83127081,44.83090253,44.83040817,44.83016672,44.83014207]}]],[[{"lng":[9.50668711,9.52087886,9.52884409,9.53424656,9.53472338,9.53368861,9.52929976,9.52937114,9.52986079,9.53351594,9.53473271,9.53283315,9.51088791,9.50939575,9.50479506,9.49951447,9.46332169,9.45939059,9.45890519,9.45370398,9.449173,9.44060995,9.43286447,9.40158675,9.40144139,9.40902813,9.4182468,9.42557047,9.41453933,9.41873194,9.44324999,9.45579169,9.4583928,9.46107213,9.47034938,9.48778008,9.500302,9.50668711],"lat":[45.04625794,45.04216129,45.03882102,45.03704952,45.03644417,45.03575588,45.03600135,45.0314371,45.03093072,45.02955444,45.02943622,45.02308982,45.01193781,45.01146288,45.00852171,45.00075381,44.98152087,44.97844909,44.97801896,44.97304367,44.9693348,44.96423037,44.95406751,44.9683328,44.97112389,44.97336546,44.97496141,44.98263098,45.00550029,45.03121997,45.04074508,45.03764164,45.03913479,45.03927678,45.03309072,45.03527704,45.04630408,45.04625794]}]],[[{"lng":[9.86608404,9.9007028,9.88673309,9.8724308,9.8682944,9.86583672,9.86033844,9.85438178,9.84778366,9.84643429,9.84239226,9.84484485,9.8384588,9.82643191,9.80937256,9.81319714,9.82284929,9.81688337,9.80895486,9.8117291,9.81174822,9.81072238,9.81136175,9.83365345,9.84894251,9.86608404],"lat":[45.0078655,44.99523987,44.97105141,44.95865791,44.95340531,44.93581617,44.93340918,44.93339089,44.93482634,44.93501641,44.93853906,44.94762192,44.95042358,44.95066429,44.94462014,44.95066026,44.95633436,44.95940183,44.96180778,44.96881858,44.97376949,44.98376887,44.98593379,45.00988021,45.01659097,45.0078655]}]],[[{"lng":[9.63366875,9.63182778,9.67689296,9.67179083,9.6611495,9.65431152,9.64480396,9.64361493,9.64312883,9.64258994,9.63355863,9.57545086,9.57158695,9.53721564,9.55299541,9.58744699,9.61896546,9.63366875],"lat":[45.12913592,45.08676767,45.07760824,45.0726364,45.07192434,45.07051445,45.06664377,45.06595734,45.06565401,45.06517095,45.0559676,45.07023691,45.0994129,45.1260537,45.13064425,45.09962499,45.13354785,45.12913592]}]],[[{"lng":[9.31473275,9.31201249,9.30950524,9.2988341,9.29584277,9.28954634,9.29228315,9.29446007,9.31473275],"lat":[44.91208192,44.90569798,44.90584883,44.90968509,44.9093508,44.90924992,44.91237952,44.92303741,44.91208192]}],[{"lng":[9.30465602,9.29128997,9.28634581,9.29960399,9.30465602],"lat":[44.93265177,44.92507098,44.93395042,44.9347356,44.93265177]}]],[[{"lng":[9.84759674,9.88446455,9.91053777,9.89755196,9.89644289,9.89561878,9.89549693,9.89702115,9.89669116,9.89217245,9.89154758,9.887952,9.87593163,9.86722589,9.85515446,9.84593661,9.84130954,9.79750955,9.80212211,9.80789672,9.80879775,9.80935076,9.81171288,9.81701232,9.8202497,9.83127547,9.83258242,9.84759674],"lat":[45.09650368,45.06676743,45.05844292,45.04346775,45.04155908,45.04000823,45.03952309,45.033876,45.03306843,45.02739667,45.02721251,45.02864481,45.03286947,45.01962223,45.02465527,45.02189736,45.01969009,45.03527145,45.04828273,45.05076253,45.05072015,45.05031114,45.04672968,45.04703394,45.04787491,45.05776466,45.09092655,45.09650368]}]],[[{"lng":[9.81688337,9.82284929,9.82153374,9.81766789,9.81319714,9.80937256,9.82643191,9.84484485,9.84239226,9.84778366,9.84527989,9.85014994,9.85043699,9.84486068,9.84026,9.83720096,9.83475212,9.79698343,9.7857624,9.78193422,9.77685429,9.76578624,9.75563094,9.7503578,9.77001533,9.76795178,9.764038,9.76063632,9.75394379,9.73717654,9.73207677,9.75258092,9.75776565,9.75903696,9.76065344,9.76216793,9.76328652,9.76644084,9.76631206,9.76273858,9.76299154,9.78438619,9.79357152,9.7944576,9.7957968,9.79616349,9.80052849,9.80117635,9.81688337],"lat":[44.95940183,44.95633436,44.95387731,44.95214967,44.95066026,44.94462014,44.95066429,44.94762192,44.93853906,44.93482634,44.92803045,44.92143186,44.91426414,44.90894034,44.90921734,44.90792552,44.90611604,44.84431672,44.83893022,44.8402708,44.84639989,44.84576348,44.8307166,44.83185861,44.85451208,44.86684082,44.86762325,44.86404512,44.87012989,44.86962722,44.87476419,44.88794492,44.89414904,44.89644512,44.90281678,44.90815387,44.91131511,44.91607405,44.9174072,44.92447968,44.92635939,44.93976241,44.94317369,44.94308652,44.94277112,44.94270555,44.94213492,44.94223841,44.95940183]}]],[[{"lng":[9.87835114,9.89019873,9.89260137,9.92424189,9.90901028,9.92022574,9.90823856,9.86381862,9.86302176,9.86285739,9.86251992,9.8480273,9.84128318,9.83093003,9.83060839,9.83149518,9.82937516,9.82275713,9.82467993,9.81585697,9.81985338,9.83127393,9.83570122,9.83650521,9.83605341,9.83456685,9.83720096,9.84486068,9.85212177,9.85937181,9.87835114],"lat":[44.90291737,44.90074617,44.89149133,44.86879808,44.85061261,44.84092353,44.83497008,44.83070565,44.82986548,44.82732813,44.82675454,44.82098469,44.82603075,44.84499114,44.8465585,44.85470291,44.85656297,44.85664684,44.86012578,44.86811998,44.87409574,44.88884853,44.89534268,44.90051296,44.90268575,44.90551426,44.90792552,44.90894034,44.90310711,44.90938118,44.90291737]}]],[[{"lng":[9.4815741,9.48352062,9.47969833,9.48369378,9.48263648,9.47520873,9.4739373,9.47351662,9.47189918,9.46027722,9.4583928,9.45675613,9.41873194,9.41589365,9.40407522,9.40152442,9.36944768,9.37081994,9.41077773,9.4815741],"lat":[45.0937788,45.08771205,45.07882584,45.06635957,45.06297317,45.06223732,45.06271804,45.06269349,45.06207006,45.04761564,45.03913479,45.03768279,45.03121997,45.0188361,45.02382052,45.02559387,45.02372624,45.04815367,45.08275458,45.0937788]}]],[[{"lng":[9.97833635,10.02738823,10.02164955,10.02966821,10.0407025,10.03967154,10.00770094,9.99407801,9.99037825,9.98810347,9.9869864,9.98536069,9.97418119,9.96888497,9.96296699,9.95292467,9.95068084,9.95334767,9.96295819,9.96127346,9.96166795,9.97644994,9.96641607,9.97833635],"lat":[45.13373511,45.09764869,45.07588899,45.06680623,45.06377312,45.06225521,45.06365803,45.05302032,45.05560027,45.05628937,45.05640349,45.05639952,45.05620738,45.05544229,45.05621249,45.06101365,45.06389107,45.07041696,45.07914003,45.08620654,45.08949716,45.11078246,45.12747244,45.13373511]}]],[[{"lng":[9.36631689,9.38624462,9.38617638,9.39805704,9.40635433,9.40250606,9.40273962,9.39337447,9.38288932,9.37068207,9.37554509,9.33121292,9.31483315,9.3057747,9.29850587,9.36631689],"lat":[44.69001558,44.67118907,44.66170523,44.65802746,44.63797688,44.62300594,44.6166764,44.61825746,44.61839211,44.61717655,44.64041848,44.66425898,44.66381018,44.66564426,44.68102155,44.69001558]}]],[[{"lng":[9.50457469,9.50985614,9.51013108,9.51092831,9.51624284,9.49830183,9.49749785,9.50618698,9.50302451,9.4681667,9.46311933,9.46977193,9.46434487,9.46372169,9.47217792,9.45538968,9.44734537,9.40089891,9.40985596,9.40616679,9.44626723,9.41458061,9.4327003,9.4338203,9.4376896,9.44233247,9.44613728,9.44750643,9.45118105,9.45199472,9.46893451,9.4685394,9.47365422,9.47783901,9.47920544,9.49837297,9.50457469],"lat":[44.81933678,44.80499089,44.80318924,44.80182635,44.79517685,44.79067444,44.7721334,44.76614924,44.7507469,44.74568281,44.73687216,44.72552012,44.71640499,44.71425598,44.70151004,44.69662695,44.69276072,44.71428672,44.72762335,44.7670574,44.77744934,44.79632906,44.80380593,44.80477393,44.81145677,44.81332933,44.8032411,44.80206548,44.80143887,44.80139965,44.80955933,44.81835603,44.81897409,44.81723726,44.81729455,44.8209664,44.81933678]}]],[[{"lng":[9.35454606,9.37726204,9.3796218,9.39222728,9.40035283,9.40412696,9.40089891,9.41751358,9.42368751,9.44734537,9.41710252,9.39322099,9.38952545,9.38647141,9.38624462,9.37191476,9.36735282,9.36631689,9.36633188,9.36317925,9.30943511,9.31258182,9.32591046,9.32957528,9.33258079,9.33485793,9.34780391,9.35454606],"lat":[44.74022259,44.73915956,44.73882764,44.73512113,44.72663979,44.72459198,44.71428672,44.71076131,44.70910915,44.69276072,44.68340471,44.68231912,44.6799311,44.67300672,44.67118907,44.67931169,44.68619526,44.69001558,44.69042991,44.69278931,44.70234602,44.71710124,44.72309553,44.72806327,44.73504035,44.7386166,44.74278196,44.74022259]}],[{"lng":[9.29534259,9.30055988,9.3026008,9.28986246,9.29534259],"lat":[44.70494899,44.70436527,44.70326456,44.70082197,44.70494899]}],[{"lng":[9.30022428,9.29893978,9.30420301,9.30412176,9.30022428],"lat":[44.69246735,44.69372283,44.69655519,44.69369829,44.69246735]}]],[[{"lng":[9.88749854,9.88393778,9.8814558,9.88125811,9.90762024,9.9326514,9.93429038,9.9317396,9.92893764,9.94794766,9.97542819,9.98922918,9.9908842,9.997304,9.94561733,9.94848991,9.92885151,9.92525028,9.92490939,9.92548507,9.9185732,9.91542398,9.91312831,9.91066704,9.90813078,9.90175401,9.90287844,9.90716962,9.91193187,9.89523985,9.9007028,9.86997691,9.84894251,9.83365345,9.84593661,9.85515446,9.86722589,9.87134149,9.87593163,9.88749854],"lat":[45.02558773,45.01938608,45.01809999,45.01762442,45.00968537,45.0233825,45.02191982,45.01803387,45.01193543,45.005766,45.01001749,45.01705521,45.00410522,45.00114174,44.99089698,44.98817352,44.96262387,44.96103275,44.96021216,44.95877167,44.96086668,44.97627157,44.97697368,44.96890964,44.96810166,44.97275665,44.97359845,44.97469869,44.97946858,44.98419519,44.99523987,44.99678163,45.01659097,45.00988021,45.02189736,45.02465527,45.01962223,45.0215173,45.03286947,45.02558773]}]],[[{"lng":[9.54369919,9.5679421,9.57934796,9.57101088,9.58503789,9.61326247,9.62014137,9.62709791,9.62771448,9.62864559,9.63756781,9.63938917,9.64367757,9.64672963,9.65229747,9.65447955,9.66182134,9.66265411,9.6645641,9.66570419,9.66762784,9.66988105,9.67521222,9.65355534,9.63503128,9.6248772,9.63179549,9.60217492,9.56494977,9.52727735,9.51075193,9.51101594,9.51018285,9.50948551,9.49968836,9.49201211,9.46904612,9.47217792,9.46372169,9.46977193,9.46339665,9.46311933,9.46706255,9.4681667,9.47680134,9.48220367,9.50150325,9.50116318,9.50106994,9.50187461,9.50311427,9.51002494,9.52189399,9.52257782,9.53254624,9.53812388,9.53889918,9.53924631,9.54082718,9.54300491,9.5434727,9.54369919],"lat":[44.75840145,44.74129621,44.74256224,44.73097331,44.72309733,44.72218405,44.72546875,44.72652004,44.72646264,44.7260074,44.72089865,44.71888997,44.71734448,44.71703916,44.71815079,44.71123354,44.70630298,44.70627115,44.70550385,44.70475002,44.70298333,44.70025144,44.68761677,44.67172757,44.66328882,44.65626895,44.64061171,44.6294917,44.69601149,44.69622764,44.6900101,44.68001209,44.67837261,44.67798863,44.67727571,44.67817326,44.69976751,44.70151004,44.71425598,44.72552012,44.72889502,44.73687216,44.74503917,44.74568281,44.74498991,44.74297773,44.74940325,44.74879258,44.74823485,44.74633185,44.74507509,44.74231673,44.74183101,44.74202593,44.74778633,44.75259439,44.75581354,44.75646006,44.75798297,44.75846777,44.75850155,44.75840145]}]],[[{"lng":[9.46904612,9.49968836,9.51018285,9.52727735,9.53551969,9.56494977,9.56538483,9.58001449,9.58917884,9.59290835,9.5968424,9.60228557,9.60176595,9.58907722,9.58497462,9.58094846,9.57616241,9.56328414,9.55869394,9.55255787,9.55340732,9.55236407,9.54909803,9.54598661,9.54141006,9.53914212,9.53229683,9.51474364,9.49782023,9.42307656,9.42130623,9.39486331,9.3985851,9.40273962,9.40387965,9.40250606,9.40635433,9.38617638,9.38647141,9.39322099,9.40061547,9.41710252,9.43955224,9.44395461,9.45538968,9.46904612],"lat":[44.69976751,44.67727571,44.67837261,44.69622764,44.69766567,44.69601149,44.68275789,44.64870952,44.64568743,44.63562583,44.63196835,44.62922104,44.62895371,44.62458165,44.62275723,44.61466658,44.60990151,44.60745407,44.6045058,44.59794583,44.59053268,44.58945742,44.58778969,44.58781363,44.58878966,44.58875539,44.58549258,44.56331431,44.55714606,44.57461223,44.5926043,44.61115837,44.61542162,44.6166764,44.61749159,44.62300594,44.63797688,44.66170523,44.67300672,44.68231912,44.68417492,44.68340471,44.68859589,44.69000123,44.69662695,44.69976751]}]],[[{"lng":[9.90516656,9.90813078,9.91312831,9.91542398,9.92548507,9.97425758,9.97314246,9.97563147,9.97501147,9.97402469,9.97103684,9.96933739,9.96852496,9.96653637,9.96630448,9.96553114,9.96022792,9.95629875,9.95586966,9.9554415,9.93326052,9.93059028,9.91831397,9.91498157,9.85937181,9.85212177,9.84581737,9.84486068,9.8496134,9.85043699,9.85069832,9.85014994,9.84527989,9.84778366,9.86583672,9.89445632,9.91193187,9.90790122,9.90716962,9.90516656],"lat":[44.97394041,44.96810166,44.97697368,44.97627157,44.95877167,44.9589148,44.94994938,44.9502072,44.94578355,44.94364951,44.9416045,44.94079076,44.94071665,44.94155266,44.94132958,44.94056195,44.92352094,44.91581221,44.91514965,44.9145411,44.89433499,44.89367264,44.89657164,44.90046926,44.90938118,44.90310711,44.90507139,44.90894034,44.91339707,44.91426414,44.91480232,44.92143186,44.92803045,44.93482634,44.93581617,44.98367419,44.97946858,44.97525099,44.97469869,44.97394041]}]],[[{"lng":[9.59136813,9.59298537,9.59744969,9.5976321,9.54095712,9.5324975,9.52062392,9.51986019,9.51643243,9.51624914,9.51500318,9.50227733,9.506174,9.49596505,9.50941679,9.50931643,9.5310562,9.53304902,9.54849497,9.55971635,9.57584637,9.59136813],"lat":[44.98820301,44.93578554,44.92998302,44.92801963,44.91117138,44.90186706,44.89986935,44.89944974,44.89430714,44.8851439,44.88316006,44.88747471,44.89429005,44.90444411,44.91740178,44.92889777,44.94478621,44.95467005,44.97908211,44.97929712,44.98732822,44.98820301]}]],[[{"lng":[9.59973809,9.62113313,9.61502343,9.63104726,9.66592648,9.67325907,9.67051697,9.6641015,9.63122603,9.62751525,9.60699387,9.59415449,9.59973809],"lat":[45.03026942,45.02981057,45.0113176,45.00083529,44.99661009,45.00397105,44.9929779,44.96583869,44.97086815,44.97015045,44.95662347,44.95697905,45.03026942]}]],[[{"lng":[9.60272934,9.59973809,9.597898,9.5956903,9.59031942,9.59136813,9.55971635,9.53022486,9.52590567,9.51634547,9.51296324,9.51135663,9.51105967,9.51088791,9.54744182,9.55001675,9.56761297,9.57785261,9.60510266,9.6155048,9.60272934],"lat":[45.03242376,45.03026942,45.02685003,45.01593336,45.00077507,44.98820301,44.97929712,44.97994255,44.98873036,44.99629955,44.99545963,44.99863414,45.00030424,45.01193781,45.02749464,45.04038185,45.04336534,45.03216977,45.04320436,45.04230261,45.03242376]}]],[[{"lng":[9.73345731,9.73717654,9.75257014,9.75394379,9.76063632,9.764038,9.76757447,9.76795178,9.76927249,9.77069149,9.77001533,9.76289297,9.75236561,9.74980589,9.7503578,9.75131592,9.75563094,9.74865434,9.74301028,9.74054675,9.73983482,9.73972904,9.734822,9.70082856,9.68922688,9.68879173,9.67390067,9.66721954,9.6663234,9.66559425,9.6509071,9.67900767,9.68067719,9.68093236,9.67994926,9.68055996,9.6828611,9.68359738,9.68435158,9.68460181,9.68425722,9.68374435,9.68404563,9.68639919,9.71396246,9.71753088,9.71908475,9.73207677,9.73345731],"lat":[44.87182065,44.86962722,44.87060705,44.87012989,44.86404512,44.86762325,44.8670234,44.86684082,44.86335712,44.85586684,44.85451208,44.84706115,44.83935317,44.83222234,44.83185861,44.83160025,44.8307166,44.82242657,44.81335327,44.80762589,44.80436272,44.80103261,44.7969593,44.78476796,44.77115523,44.76537842,44.7475168,44.74075495,44.74000837,44.74030971,44.76641985,44.79958235,44.80392946,44.81057154,44.81407923,44.82191645,44.82505346,44.82634537,44.82807825,44.82891395,44.82972622,44.8302154,44.83215806,44.8375272,44.86575079,44.86769087,44.86845527,44.87476419,44.87182065]}]],[[{"lng":[9.82483615,9.83149518,9.8480273,9.8401081,9.78441995,9.7838721,9.78336482,9.78303749,9.78247962,9.77964649,9.77612175,9.77348532,9.76313087,9.7619278,9.76056053,9.75414339,9.73761572,9.73160438,9.73059641,9.72171335,9.72045198,9.71549177,9.71134172,9.71842938,9.6973972,9.70043019,9.70082856,9.7020077,9.73972904,9.74301028,9.75471751,9.75563094,9.75615488,9.76127899,9.76499654,9.76578624,9.76659781,9.77685429,9.7808149,9.78193422,9.78272589,9.7857624,9.79054252,9.79698343,9.79763838,9.81585697,9.82467993,9.82212058,9.82275713,9.82353262,9.82483615],"lat":[44.8551105,44.85470291,44.82098469,44.81305831,44.79779066,44.79187999,44.78895777,44.78812282,44.78706439,44.78319481,44.77788563,44.77520521,44.77088067,44.77044075,44.77003392,44.76850548,44.76615378,44.76343777,44.76366927,44.77077449,44.78316049,44.78518496,44.78199385,44.76887773,44.77693905,44.78423027,44.78476796,44.78571495,44.80103261,44.81335327,44.82858013,44.8307166,44.83305368,44.84173367,44.84537269,44.84576348,44.84589307,44.84639989,44.84451844,44.8402708,44.83986928,44.83893022,44.84059863,44.84431672,44.84501432,44.86811998,44.86012578,44.85727258,44.85664684,44.85600211,44.8551105]}]],[[{"lng":[9.91740731,9.96641607,9.97644994,9.9696506,9.96166795,9.96127346,9.96291948,9.96295819,9.96173162,9.95068084,9.96296699,9.96888497,9.9869864,9.99037825,9.96889912,9.9540591,9.95428751,9.94528809,9.93841282,9.93644524,9.93547691,9.93195799,9.92788433,9.92669055,9.91053777,9.88446455,9.90083231,9.87571294,9.91972011,9.91740731],"lat":[45.09962939,45.12747244,45.11078246,45.10410222,45.08949716,45.08620654,45.07986048,45.07914003,45.07645885,45.06389107,45.05621249,45.05544229,45.05640349,45.05560027,45.04123735,45.0413983,45.03833579,45.03769951,45.04428251,45.05520881,45.05813333,45.06277101,45.0629932,45.05828598,45.05844292,45.06676743,45.09469338,45.12250596,45.13758885,45.09962939]}]],[[{"lng":[10.17550401,10.18072316,10.18148831,10.18302229,10.18756938,10.1827518,10.1995397,10.20825719,10.21244203,10.2102433,10.2114106,10.22014631,10.22578323,10.23845548,10.24558612,10.2399881,10.24228456,10.2229968,10.17545583,10.17442734,10.16829898,10.16604536,10.1683807,10.16203701,10.15905978,10.10491279,10.10603066,10.10551324,10.10274895,10.10225341,10.11534743,10.12621887,10.13804579,10.14150158,10.14727561,10.149435,10.15458492,10.15984714,10.17559377,10.17550401],"lat":[44.91777194,44.91526057,44.91550471,44.91740623,44.91672891,44.90422112,44.90200256,44.89912903,44.89395351,44.89177134,44.89127285,44.88996457,44.89183063,44.89184632,44.89049108,44.87690493,44.87065956,44.86432327,44.86567776,44.87174672,44.87165205,44.86478401,44.85883679,44.85304117,44.838371,44.85449941,44.85736024,44.86140719,44.86843751,44.87736912,44.88890283,44.9008228,44.90395528,44.90704448,44.91584456,44.91866748,44.91959674,44.91791405,44.92279412,44.91777194]}]],[[{"lng":[10.17442734,10.24228456,10.24578524,10.22378613,10.18369354,10.17267556,10.15905978,10.17442734],"lat":[44.87174672,44.87065956,44.86393269,44.82270715,44.83156478,44.83465798,44.838371,44.87174672]}]],[[{"lng":[10.17700427,10.18654406,10.17460832,10.16605529,10.16617972,10.16971873,10.16984632,10.16977733,10.16649214,10.16347191,10.16203434,10.12743429,10.1088937,10.10850466,10.10773538,10.10719224,10.09140684,10.07068704,10.04504759,10.01871842,10.03699716,10.04657616,10.0708033,10.08064328,10.08809219,10.08882108,10.08950221,10.09059715,10.09048069,10.09116961,10.09129901,10.09513175,10.09576043,10.10573675,10.10680908,10.11714306,10.12097093,10.1222075,10.15020862,10.17700427],"lat":[44.70914994,44.70218898,44.691179,44.67814126,44.67616847,44.67209022,44.67155,44.65826647,44.65475315,44.65243514,44.65119316,44.65259329,44.63407684,44.63371603,44.63349843,44.63344518,44.63395723,44.64352489,44.62154444,44.62963246,44.63947863,44.65399312,44.6738258,44.67989071,44.68215158,44.68266677,44.68332645,44.68788019,44.68974478,44.69148466,44.69367098,44.69747827,44.69802138,44.70426284,44.70489162,44.71057048,44.71201833,44.71133102,44.68965391,44.70914994]}]],[[{"lng":[10.29339209,10.29322782,10.30589154,10.30889617,10.29198212,10.28865808,10.28677955,10.27820557,10.27513613,10.27925516,10.27916219,10.2639102,10.25268451,10.25084407,10.24720128,10.24533801,10.24124685,10.17364657,10.17362533,10.16689854,10.17101493,10.19441187,10.21126966,10.21033567,10.20977904,10.20296955,10.19758677,10.20962969,10.21521346,10.22436171,10.23867623,10.26263904,10.27227722,10.27982507,10.28453761,10.29339209],"lat":[44.69130871,44.67428716,44.66641903,44.66259045,44.65608949,44.65573995,44.655203,44.64881757,44.6409298,44.62965773,44.61893239,44.60398261,44.59026053,44.58778702,44.58110201,44.57701722,44.57231743,44.56086081,44.56602849,44.57214261,44.59737494,44.60628362,44.61930812,44.62296401,44.62347404,44.62827226,44.63701616,44.64768761,44.6475923,44.64672939,44.65235903,44.67282903,44.67337921,44.68212616,44.68810481,44.69130871]}]],[[{"lng":[10.33566753,10.34334948,10.3438819,10.32559575,10.32287976,10.33561649,10.34435066,10.34060526,10.33834994,10.31145049,10.30995238,10.30606143,10.29442611,10.28795098,10.28191891,10.27955842,10.2643384,10.23908791,10.24124685,10.24533801,10.25084407,10.25268451,10.26312281,10.2639102,10.26789925,10.27446728,10.27916219,10.27513613,10.27820557,10.30722168,10.30889617,10.32116695,10.33566753],"lat":[44.66355395,44.656451,44.63708061,44.62375473,44.61951007,44.61771437,44.61222843,44.60534959,44.60371959,44.59619955,44.59401114,44.58370288,44.57928009,44.57802995,44.57751267,44.57781823,44.56645554,44.57088248,44.57231743,44.57701722,44.58778702,44.59026053,44.60308208,44.60398261,44.60789047,44.61332685,44.61893239,44.6409298,44.64881757,44.66154703,44.66259045,44.67123062,44.66355395]}]],[[{"lng":[10.15081171,10.18100409,10.18266581,10.17323246,10.17064286,10.16970809,10.16902228,10.16145843,10.15519901,10.14096351,10.10680908,10.09576043,10.09116961,10.02182372,10.01838589,10.00576832,9.98649598,9.98322481,10.00883434,10.03414078,10.0389517,10.04871141,10.06813047,10.07701198,10.07965699,10.07840079,10.07048605,10.06949021,10.07266017,10.11448994,10.15081171],"lat":[44.78183996,44.77046798,44.77015371,44.75550539,44.74300986,44.74112897,44.74031678,44.73474056,44.73054599,44.72397342,44.70489162,44.69802138,44.69148466,44.71098607,44.71723736,44.72500113,44.72558335,44.74864835,44.76697855,44.77166739,44.77426136,44.76674533,44.76930202,44.76640991,44.76056049,44.7602753,44.75999868,44.75944086,44.75799778,44.75846141,44.78183996]}]],[[{"lng":[10.44165634,10.50431523,10.49604931,10.48979751,10.47839704,10.46768488,10.45668401,10.45059666,10.44288758,10.42207277,10.41514343,10.41087276,10.40451512,10.39285882,10.38944832,10.38725383,10.40977123,10.41348703,10.40721232,10.42319101,10.41293173,10.41366834,10.42516317,10.44165634],"lat":[44.94083646,44.9224276,44.90838229,44.90469219,44.9071494,44.90337172,44.90813514,44.91006253,44.91130347,44.89482989,44.88133194,44.89050384,44.89126806,44.89234536,44.892711,44.89308876,44.89828619,44.90468567,44.91365169,44.93141803,44.94972936,44.95391514,44.96020821,44.94083646]}]],[[{"lng":[10.13295932,10.13659816,10.14678007,10.14987698,10.15385797,10.166665,10.16966848,10.17660615,10.1465145,10.15994194,10.14203472,10.09827285,10.05317828,10.07095713,10.08699629,10.0896528,10.10058707,10.10109299,10.11820699,10.13295932],"lat":[44.45308742,44.44123073,44.43895029,44.43611932,44.42970524,44.42693732,44.42705965,44.41667126,44.39270586,44.38078621,44.35386763,44.34629331,44.37303332,44.42636247,44.42831758,44.43005679,44.43899966,44.43917485,44.43539847,44.45308742]}]],[[{"lng":[10.40653779,10.44707085,10.4465913,10.44579423,10.42926354,10.42851981,10.41896062,10.41539095,10.38635171,10.36745315,10.35877301,10.35401282,10.35438867,10.35276212,10.34058705,10.33113044,10.3344007,10.33333936,10.33362594,10.33904509,10.35881981,10.37165819,10.38084637,10.38653888,10.40244727,10.40653779],"lat":[44.7451277,44.72334016,44.71676559,44.71568641,44.69500921,44.69401926,44.67623284,44.66685726,44.67488695,44.6695694,44.67277883,44.67856986,44.6827875,44.68392307,44.67907937,44.68101747,44.69488505,44.69750817,44.699038,44.7194818,44.70769826,44.70449297,44.72938155,44.7382428,44.7484461,44.7451277]}]],[[{"lng":[10.34106318,10.34075147,10.36176783,10.39911447,10.39913187,10.39872478,10.40270676,10.40160063,10.39695556,10.36332812,10.34194066,10.33846374,10.338144,10.34003189,10.33990572,10.33515431,10.33212414,10.33240608,10.33217288,10.3316066,10.32400949,10.30313379,10.2705655,10.27708178,10.26851609,10.23274645,10.23479937,10.24930463,10.25548213,10.25568171,10.25600517,10.25602568,10.25517921,10.25195457,10.24166097,10.24010964,10.23762451,10.22948078,10.26355234,10.2643384,10.27341103,10.27955842,10.30606143,10.31145049,10.34106318],"lat":[44.59831329,44.59349163,44.58609498,44.58793913,44.58548124,44.58373973,44.57017817,44.56292673,44.55766317,44.54292736,44.52510357,44.51615081,44.51207639,44.50606753,44.50550185,44.4958887,44.48765068,44.48622498,44.48537245,44.48480289,44.47903951,44.47014435,44.49008069,44.50037901,44.50972015,44.50536752,44.5183631,44.52596554,44.53472031,44.53522224,44.53738831,44.5377572,44.53995412,44.53922429,44.54102017,44.54913931,44.55388348,44.56377532,44.56621217,44.56645554,44.57482609,44.57781823,44.58370288,44.59619955,44.59831329]}]],[[{"lng":[10.13084037,10.15905978,10.18369354,10.22378613,10.22048545,10.21353331,10.19210791,10.18627549,10.18559964,10.18215921,10.18181877,10.18216355,10.16020277,10.15081171,10.14689718,10.11448994,10.09359388,10.07266017,10.06975816,10.06949021,10.07048605,10.07648475,10.07840079,10.07940046,10.07965699,10.07972434,10.07701198,10.07148553,10.06813047,10.0599446,10.04871141,10.04128853,10.0389517,10.03851411,10.03867166,10.0410967,10.04876975,10.05263269,10.05647278,10.06317686,10.0642763,10.06595168,10.06645099,10.06661241,10.06575282,10.09205502,10.09470007,10.09307307,10.09400843,10.094839,10.10499846,10.10491279,10.13084037],"lat":[44.84644347,44.838371,44.83156478,44.82270715,44.81194892,44.80547846,44.78192041,44.77733602,44.77642483,44.77133825,44.77075662,44.77031196,44.77866618,44.78183996,44.78267152,44.75846141,44.75722308,44.75799778,44.75889822,44.75944086,44.75999868,44.76051843,44.7602753,44.76035588,44.76056049,44.76078491,44.76640991,44.76895551,44.76930202,44.76670463,44.76674533,44.77067521,44.77426136,44.77452642,44.7753104,44.77687948,44.77974399,44.78004198,44.77935791,44.7789536,44.77894335,44.77932382,44.77967024,44.78019987,44.78362873,44.80495842,44.80775077,44.83587999,44.84072317,44.84248862,44.847729,44.85449941,44.84644347]}]],[[{"lng":[10.2705655,10.2874748,10.30313379,10.29716909,10.28427512,10.25464862,10.23607579,10.230591,10.22981911,10.22573912,10.22381127,10.22315555,10.21397231,10.20525275,10.16694867,10.15994194,10.1465145,10.1766565,10.17660615,10.16966848,10.15385797,10.13659816,10.14099201,10.14905848,10.18933979,10.21607691,10.22510567,10.22743678,10.22915544,10.22983583,10.2705655],"lat":[44.49008069,44.4830403,44.47014435,44.467275,44.4594624,44.45170732,44.43577703,44.42892218,44.4256265,44.41434493,44.4104404,44.40967319,44.4016327,44.39220011,44.38443241,44.38078621,44.39270586,44.41604954,44.41667126,44.42705965,44.42970524,44.44123073,44.461542,44.46783501,44.46401061,44.47199346,44.47150083,44.47054853,44.470368,44.47051372,44.49008069]}]],[[{"lng":[10.29159996,10.29684848,10.36446475,10.36555059,10.36735899,10.37897472,10.39405617,10.40651542,10.41614404,10.39570745,10.38442173,10.41580504,10.44207566,10.43749401,10.43770836,10.43733454,10.43608556,10.42484092,10.42424109,10.42383796,10.42351513,10.42611124,10.40244727,10.38653888,10.37165819,10.33904509,10.33362594,10.3344007,10.33113044,10.30889617,10.29322782,10.29795413,10.28517347,10.28037823,10.27499967,10.25826177,10.24225625,10.24478639,10.25825515,10.28318844,10.23259548,10.24283663,10.21353331,10.22011586,10.23901528,10.24578524,10.2399881,10.27417876,10.29159996],"lat":[44.90097133,44.88541036,44.87033616,44.87021516,44.87067062,44.87414975,44.880052,44.88007023,44.88139146,44.85370142,44.82475914,44.83240651,44.8196098,44.80818986,44.80103946,44.80024297,44.79984459,44.79967039,44.79944382,44.79898974,44.79820157,44.74394896,44.7484461,44.7382428,44.70449297,44.7194818,44.699038,44.69488505,44.68101747,44.66259045,44.67428716,44.70416689,44.70943312,44.70780357,44.70776473,44.71306368,44.72381662,44.72933446,44.73780199,44.7652514,44.77488295,44.79922186,44.80547846,44.8112147,44.84100624,44.86393269,44.87690493,44.87893207,44.90097133]}]],[[{"lng":[9.90110351,9.90641503,9.91188129,9.92340608,9.92275572,9.92367592,9.93228568,9.93725869,9.9417944,9.95200628,9.97828034,9.98460259,9.98322481,9.982759,9.98649598,9.96961993,9.96921857,9.96802409,9.96730419,9.96958453,9.96709661,9.96670113,9.95112371,9.94044636,9.89990441,9.87624159,9.87363433,9.86292349,9.84708137,9.84574639,9.84513902,9.85503883,9.85943483,9.85015228,9.84411554,9.83203383,9.84978305,9.85524753,9.86500696,9.88066133,9.87252041,9.87863506,9.88216705,9.88252339,9.8918396,9.89903639,9.90032548,9.90110351],"lat":[44.80411342,44.79853492,44.79960765,44.80000118,44.7933088,44.79076276,44.78609267,44.77938135,44.76138462,44.75864879,44.75358803,44.75018485,44.74864835,44.74501544,44.72558335,44.72903172,44.72844098,44.72572343,44.72344294,44.71708599,44.70795175,44.70770303,44.70463802,44.70552765,44.71637803,44.69823335,44.70069296,44.70190868,44.70704158,44.70812274,44.70889244,44.72964105,44.73313694,44.75037372,44.75223695,44.75194752,44.76655349,44.76778199,44.7621091,44.76868712,44.78277504,44.79756374,44.80366699,44.80381728,44.80444707,44.80701027,44.8077743,44.80411342]}]],[[{"lng":[10.22901463,10.26511448,10.25562628,10.25374202,10.25179823,10.23739026,10.23480907,10.24431666,10.24379984,10.2299982,10.2330611,10.23441476,10.23676048,10.24015553,10.24437422,10.24476492,10.24218372,10.23923708,10.23452911,10.23326899,10.23166324,10.17584564,10.18210603,10.16803355,10.17779791,10.17992611,10.18094596,10.22901463],"lat":[45.02790937,45.004778,45.0008529,44.99415821,44.9911189,44.97947449,44.9827161,44.99829415,45.00020818,44.99381332,44.9775049,44.97557287,44.97436823,44.97301714,44.96988358,44.96449618,44.96416422,44.96805806,44.97085463,44.97122833,44.9714527,44.9624541,44.97710756,44.99173641,45.01260143,45.02110061,45.03046292,45.02790937]}]],[[{"lng":[10.19062188,10.22718837,10.23489937,10.23908694,10.24478639,10.24225625,10.22784245,10.18539961,10.18327996,10.18242051,10.18212314,10.18147228,10.17290751,10.16352331,10.16347191,10.16977733,10.16984632,10.16617972,10.16605529,10.18654406,10.18354836,10.1694046,10.19062188],"lat":[44.73602061,44.72614897,44.7258229,44.73151197,44.72933446,44.72381662,44.69785686,44.65940174,44.65681302,44.65354507,44.6499652,44.64830649,44.63983799,44.6519432,44.65243514,44.65826647,44.67155,44.67616847,44.67814126,44.70218898,44.70876722,44.71165864,44.73602061]}]],[[{"lng":[10.01546121,10.02076368,10.02579045,10.04253732,10.04938264,10.05055059,10.0513617,10.05148394,10.0413598,10.02482577,10.03414078,10.00883434,10.00569028,9.98460259,9.97828034,9.9417944,9.92367592,9.92340608,9.90641503,9.90130918,9.90110351,9.90032548,9.93691155,9.94849146,9.9551772,9.96510051,9.97311543,9.98668165,9.99107621,10.00709891,10.01190427,10.01446521,10.01512274,10.01546121],"lat":[44.85375453,44.84299478,44.84532628,44.8386391,44.83796426,44.8374854,44.83686579,44.83663062,44.7922168,44.78304013,44.77166739,44.76697855,44.76566497,44.75018485,44.75358803,44.76138462,44.79076276,44.80000118,44.79853492,44.80354452,44.80411342,44.8077743,44.83681792,44.83771313,44.84042049,44.83608805,44.84323071,44.84556288,44.84577687,44.85247827,44.85371409,44.85397044,44.85393759,44.85375453]}]],[[{"lng":[10.23289158,10.23440673,10.23256703,10.23261597,10.23310224,10.24442392,10.25915999,10.25924482,10.25921465,10.25428207,10.25118279,10.24443532,10.24558612,10.23845548,10.22014631,10.2114106,10.21244203,10.20825719,10.1827518,10.18940688,10.18928061,10.18756938,10.18716251,10.17559377,10.15984714,10.15458492,10.15630243,10.16172096,10.17678161,10.18423781,10.20082733,10.20284571,10.20319144,10.20306742,10.23289158],"lat":[44.96485906,44.95628186,44.94437417,44.9436985,44.94273004,44.9434444,44.93624333,44.93548624,44.9346854,44.91768096,44.90914507,44.90172014,44.89049108,44.89184632,44.88996457,44.89127285,44.89395351,44.89912903,44.90422112,44.9099943,44.91247115,44.91672891,44.91727326,44.92279412,44.91791405,44.91959674,44.91994843,44.92162182,44.93070363,44.94573181,44.95895342,44.96149772,44.96408663,44.96482611,44.96485906]}]],[[{"lng":[10.09048069,10.08882108,10.03699716,10.02004698,10.01871842,10.01297468,10.0058629,9.9835358,9.97764833,9.95955219,9.9478188,9.92631507,9.92578164,9.92748957,9.92742088,9.915264,9.91142676,9.90356431,9.90761178,9.92292011,9.93566693,9.92443076,9.91097462,9.88795415,9.90885266,9.94707611,9.952011,9.95936443,9.96350403,9.97196287,9.97552689,9.97780256,9.99042018,9.99158543,9.98798116,10.00914698,10.01162819,10.01621242,10.03927635,10.04494545,10.05329354,10.09048069],"lat":[44.68974478,44.68266677,44.63947863,44.62990868,44.62963246,44.62991763,44.62691066,44.61338541,44.60652208,44.59504438,44.60568426,44.59043046,44.58777905,44.58664888,44.58628935,44.59093368,44.60013789,44.61305589,44.61418511,44.61327921,44.61868498,44.65019494,44.66042176,44.65576879,44.68066698,44.6785829,44.67122592,44.66857774,44.66868692,44.66304277,44.65818712,44.65775355,44.66099369,44.67163338,44.68299858,44.6781863,44.66560605,44.66228849,44.66119868,44.66712452,44.68227981,44.68974478]}]],[[{"lng":[10.17688183,10.20319144,10.20082733,10.18423781,10.17678161,10.16172096,10.15630243,10.149435,10.14907565,10.13804579,10.12621887,10.10829925,10.10180727,10.10915444,10.10830146,10.10029657,10.09700261,10.0933643,10.09055917,10.08195274,10.07437836,10.07402957,10.08444729,10.13564019,10.14585635,10.18186879,10.17645421,10.17575858,10.17584564,10.17688183],"lat":[44.9622814,44.96408663,44.95895342,44.94573181,44.93070363,44.92162182,44.91994843,44.91866748,44.91843705,44.90395528,44.9008228,44.8839033,44.89603784,44.9053378,44.90709248,44.91347077,44.91377303,44.91297974,44.91336664,44.9151589,44.91729186,44.91761022,44.93259907,44.95645004,44.98526371,44.97729006,44.97113467,44.96315715,44.9624541,44.9622814]}]],[[{"lng":[10.45059666,10.45668401,10.46768488,10.47084819,10.47839704,10.48979751,10.4637302,10.47431294,10.46786211,10.4643141,10.45885056,10.45265323,10.45346846,10.45490031,10.45516736,10.45471607,10.44207566,10.41580504,10.38442173,10.39570745,10.40949558,10.42207277,10.45059666],"lat":[44.91006253,44.90813514,44.90337172,44.903241,44.9071494,44.90469219,44.89777374,44.87581668,44.87057509,44.85303062,44.85116962,44.84687811,44.84451371,44.83805898,44.83299188,44.8306751,44.8196098,44.83240651,44.82475914,44.85370142,44.86418988,44.89482989,44.91006253]}]],[[{"lng":[10.1467738,10.16347191,10.17290751,10.16198624,10.16109354,10.15386829,10.12256051,10.11147019,10.11087316,10.10767249,10.10730236,10.09614197,10.04976706,10.04663391,10.02126749,9.97764833,9.9835358,9.99485267,10.00396344,10.0058629,10.01193638,10.01297468,10.01423689,10.01871842,10.02243811,10.03138693,10.03448215,10.04504759,10.05967948,10.07068704,10.08393021,10.09140684,10.10773538,10.12743429,10.1467738],"lat":[44.65303987,44.65243514,44.63983799,44.62090954,44.62035148,44.61691376,44.61609151,44.61197784,44.61173158,44.60496131,44.6013144,44.58979089,44.57936961,44.57604043,44.56297337,44.60652208,44.61338541,44.61776161,44.62568504,44.62691066,44.62965675,44.62991763,44.63000545,44.62963246,44.62967125,44.62813238,44.6270871,44.62154444,44.63941445,44.64352489,44.64084327,44.63395723,44.63349843,44.65259329,44.65303987]}]],[[{"lng":[10.23665776,10.24010964,10.24011181,10.23978774,10.24166097,10.25195457,10.25338314,10.25517921,10.25600517,10.24930463,10.23479937,10.23274645,10.24570378,10.26851609,10.27093765,10.24407441,10.22915544,10.22510567,10.21607691,10.19505884,10.18933979,10.14905848,10.13676822,10.13802132,10.12530247,10.13241404,10.14203871,10.14261318,10.15236095,10.15464534,10.15612723,10.15943553,10.16582154,10.17038079,10.17362893,10.1746097,10.18873297,10.18974039,10.19275251,10.23665776],"lat":[44.5550528,44.54913931,44.54687064,44.5452447,44.54102017,44.53922429,44.54009988,44.53995412,44.53738831,44.52596554,44.5183631,44.50536752,44.50411059,44.50972015,44.49157998,44.48206294,44.470368,44.47150083,44.47199346,44.46643563,44.46401061,44.46783501,44.48464893,44.49408021,44.50422616,44.51742568,44.52582829,44.52624566,44.53240449,44.5333627,44.53383384,44.53462288,44.53536475,44.53680805,44.53813859,44.53871368,44.54809222,44.5493421,44.55446913,44.5550528]}]],[[{"lng":[9.631837,9.64489851,9.64517122,9.64099804,9.64209262,9.64867499,9.65552543,9.66027708,9.65645413,9.637283,9.6219463,9.62352494,9.55917752,9.47903434,9.47256479,9.4383937,9.46887309,9.49680342,9.50394878,9.50621347,9.50667325,9.50842997,9.50926329,9.51141107,9.51213298,9.5208454,9.52766495,9.55830404,9.57795886,9.5928022,9.60532648,9.60381868,9.61651934,9.61791616,9.61964488,9.631837],"lat":[44.49205165,44.48714422,44.48678256,44.48008107,44.47784228,44.47513128,44.47501115,44.47059046,44.45817079,44.44515728,44.42658197,44.42161514,44.43813525,44.40925851,44.42428409,44.41854155,44.48188067,44.4827304,44.48020985,44.47890344,44.47845127,44.47657992,44.4755319,44.47247938,44.46732663,44.45497153,44.44886339,44.44013813,44.4660222,44.45354939,44.45067486,44.46405185,44.48837225,44.48964308,44.49018287,44.49205165]}]],[[{"lng":[11.77379612,11.82765234,11.84488739,11.84758397,11.84330359,11.85374464,11.86452639,11.85964277,11.85588346,11.85555953,11.85503076,11.85207787,11.85685127,11.84965442,11.83856056,11.84977073,11.85423919,11.85361945,11.84094371,11.84042771,11.82731895,11.799092,11.79733209,11.78133445,11.79891166,11.79141933,11.78828281,11.78038132,11.79670582,11.74977277,11.77379612],"lat":[44.5056708,44.47312785,44.46900385,44.47193703,44.48936276,44.49637613,44.49052449,44.48478637,44.47166489,44.4709528,44.47016481,44.46452207,44.45661187,44.44701873,44.4373411,44.43290123,44.42706207,44.42649005,44.42806956,44.42357008,44.4177489,44.43048558,44.43114114,44.43626721,44.46076546,44.46345615,44.46351931,44.46724107,44.48569339,44.49756929,44.5056708]}]],[[{"lng":[12.26873132,12.28916365,12.34772996,12.2746175,12.25951576,12.25519113,12.2503817,12.24427746,12.23182186,12.22985615,12.22624686,12.21314686,12.20727142,12.20167298,12.20997879,12.20881951,12.17124083,12.16119637,12.1032467,12.09677615,12.07274262,12.05453684,12.04990144,12.0472839,12.04930248,12.04899227,12.04591691,12.03558723,12.05055784,12.05923985,12.1034085,12.07435339,12.09664898,12.10006811,12.10584644,12.0808206,12.07704684,12.06832375,12.06442281,12.06384066,12.06347498,12.05063127,12.04437299,12.02811312,12.04234159,12.08142472,12.06984571,12.06513599,12.10451201,12.11413598,12.11701718,12.125991,12.13072211,12.15378113,12.23708404,12.26873132],"lat":[44.62922093,44.46346822,44.30122982,44.30042395,44.2543625,44.25129433,44.25107131,44.24803108,44.21774843,44.21721017,44.21412036,44.22083578,44.22046667,44.22618754,44.2380178,44.2556056,44.24424262,44.25095701,44.27197532,44.29610128,44.29922352,44.30566301,44.31153066,44.31680885,44.32513162,44.32552267,44.32756271,44.33080882,44.33724258,44.34643588,44.36197901,44.3708678,44.36944572,44.38237507,44.38960001,44.40201321,44.40303329,44.40059893,44.40002856,44.39999469,44.40004051,44.40592115,44.40583171,44.41169753,44.43675997,44.46910109,44.47881459,44.49305199,44.54379866,44.54722736,44.54672558,44.54575089,44.54571119,44.54845202,44.62058595,44.62922093]}]],[[{"lng":[11.68048385,11.68319509,11.68394277,11.68497436,11.69755091,11.69777196,11.69814202,11.69731845,11.69156114,11.69110619,11.70265859,11.71388159,11.73297199,11.73649858,11.76724905,11.76562682,11.76500863,11.76437143,11.76111149,11.76112389,11.76148842,11.76591841,11.76557088,11.73929138,11.69161771,11.68638208,11.66484934,11.63243541,11.63994473,11.66544235,11.67153902,11.66763231,11.66759797,11.68048385],"lat":[44.31439468,44.31428597,44.31411534,44.31381199,44.30933822,44.30896388,44.30719061,44.30460829,44.29837478,44.28951783,44.28793949,44.29833242,44.30607388,44.30917276,44.2868735,44.28648969,44.28613555,44.28537676,44.27707413,44.27680375,44.27656085,44.27563435,44.27410331,44.25566019,44.25160871,44.24354851,44.25706675,44.25994799,44.27374235,44.27871802,44.28822193,44.31136925,44.31185619,44.31439468]}]],[[{"lng":[12.04437299,12.04668847,12.05063127,12.06384066,12.07704684,12.10584644,12.10006811,12.09952876,12.09664898,12.09170879,12.08264459,12.07864433,12.07435339,12.10104636,12.1034085,12.07985249,12.06966138,12.05923985,12.05055784,12.04107819,12.02918485,12.01612071,12.03060917,11.98769481,12.02811312,12.04437299],"lat":[44.40583171,44.40721481,44.40592115,44.39999469,44.40303329,44.38960001,44.38237507,44.37553429,44.36944572,44.37100207,44.37503287,44.37580705,44.3708678,44.36441091,44.36197901,44.35003162,44.3478035,44.34643588,44.33724258,44.33366948,44.32811412,44.33829046,44.35297047,44.37798624,44.41169753,44.40583171]}]],[[{"lng":[11.87101595,11.87055193,11.88376221,11.88377847,11.88359716,11.87481596,11.86074638,11.85716168,11.85887605,11.85842542,11.85810253,11.85745865,11.85692395,11.84977073,11.83856056,11.85685127,11.85503076,11.88123568,11.87101595],"lat":[44.44568211,44.44416336,44.43886093,44.43868048,44.43831595,44.42811257,44.43328248,44.43397545,44.42662246,44.42562547,44.42544451,44.4253796,44.42549201,44.43290123,44.4373411,44.45661187,44.47016481,44.46157504,44.44568211]}]],[[{"lng":[11.86193699,11.86122626,11.87536653,11.85763745,11.84809683,11.84383902,11.79589772,11.79376573,11.79953351,11.7999721,11.80366933,11.80640813,11.80785534,11.80927912,11.80968989,11.82527664,11.84099548,11.85106518,11.85243757,11.86193699],"lat":[44.38201011,44.37154893,44.35530395,44.33091548,44.32554532,44.32489528,44.35006601,44.36471274,44.37211108,44.37943294,44.37940971,44.37791548,44.37753328,44.38102276,44.38094963,44.37486621,44.37598844,44.38302943,44.38569592,44.38201011]}]],[[{"lng":[12.10999539,12.1124835,12.10806392,12.09961184,12.08859112,12.08356766,12.08287665,12.07101432,12.06880128,12.08424666,12.06033368,12.05495173,12.05446542,12.03996411,12.03728036,12.0346257,12.03046608,12.02173281,12.02110047,12.0193954,12.01809896,12.00568253,11.99879734,11.99676252,11.99523462,11.98625539,11.98209439,11.96168234,11.91878774,11.90974763,11.84167455,11.788468,11.78981575,11.79035495,11.78953059,11.7894628,11.79042681,11.8040536,11.81340583,11.84007386,11.82253011,11.81592787,11.83870317,11.88474958,11.88720286,11.86710685,11.9087013,11.91062867,11.91341897,11.94678948,11.95205894,11.956102,11.95945853,11.98533638,12.00849189,12.01103565,12.03073254,12.02816456,12.0308448,12.05002297,12.05225622,12.05127048,12.0548749,12.05722615,12.06085362,12.10278146,12.10999539],"lat":[43.94872623,43.94471358,43.93069023,43.92554522,43.92801366,43.92578165,43.92181195,43.90212685,43.8915357,43.87337436,43.86623017,43.8614856,43.85976102,43.85133396,43.84454499,43.84003297,43.83674025,43.83227206,43.83132545,43.8258786,43.82433733,43.82001021,43.81933594,43.81992054,43.81995163,43.81792703,43.81052709,43.79020687,43.7936882,43.8127191,43.80802426,43.84508476,43.8476903,43.85098131,43.85304519,43.85399219,43.85678665,43.85737115,43.85648389,43.87543267,43.87738923,43.88466476,43.89111429,43.89051842,43.89671359,43.91769314,43.9283181,43.93079885,43.93767807,43.90702137,43.90575533,43.90723078,43.90912451,43.90664116,43.9146673,43.93841337,43.94133133,43.93051477,43.92074734,43.91849,43.91905152,43.92948541,43.93151375,43.92974921,43.92930991,43.95030748,43.94872623]}]],[[{"lng":[12.20167298,12.20727142,12.21314686,12.21276359,12.17399591,12.18609714,12.16047629,12.15098842,12.14183279,12.10204613,12.10396455,12.0806399,12.08109705,12.0842802,12.08841585,12.09010416,12.09159776,12.09065393,12.08810954,12.08709233,12.08739258,12.09279065,12.0949368,12.10064497,12.11868328,12.13154534,12.14203707,12.1549231,12.16070106,12.16178756,12.16111634,12.168071,12.1708443,12.18785545,12.20028641,12.20167298],"lat":[44.22618754,44.22046667,44.22083578,44.21517948,44.17957706,44.15902288,44.10839581,44.10599417,44.11207029,44.10590715,44.12440085,44.14331416,44.14658219,44.14696437,44.14642941,44.14643771,44.14750462,44.15217562,44.15421611,44.15581012,44.15964619,44.16146253,44.15946887,44.15766642,44.16512438,44.17702495,44.17483701,44.17369826,44.18233408,44.18533791,44.19500745,44.20802158,44.21747843,44.22131074,44.23016961,44.22618754]}]],[[{"lng":[12.35898127,12.35917481,12.35989964,12.36423456,12.38117602,12.39529123,12.38572597,12.37680796,12.36942346,12.36682555,12.36340394,12.35467271,12.3528725,12.35342768,12.35343662,12.35328541,12.35131599,12.33626523,12.32492041,12.32360904,12.31387334,12.35394805,12.35810689,12.35898127],"lat":[44.05259391,44.05182297,44.05051423,44.04683041,44.0363726,44.03024571,44.00978731,44.00035995,43.98977473,43.98771772,43.98674725,43.98592387,43.98606231,43.98811645,43.98834148,43.98874204,43.98983521,43.98992505,43.98777132,44.01362081,44.02717416,44.05274194,44.05432118,44.05259391]}]],[[{"lng":[11.92317787,11.93710791,11.9355263,11.9381345,11.94982144,11.96235442,11.96973817,11.96767656,11.97142515,11.98557048,11.9690249,11.91091479,11.91139094,11.90830475,11.90705566,11.90590478,11.90763966,11.91229635,11.9082308,11.9078758,11.89536406,11.88959451,11.88879442,11.88861015,11.92317787],"lat":[44.20599601,44.20218044,44.1917599,44.1901263,44.20738027,44.20572327,44.19406184,44.18311407,44.17505807,44.15989732,44.15789815,44.13040571,44.13475097,44.13808867,44.14014614,44.14493794,44.14665834,44.14883534,44.15792383,44.15830198,44.16379667,44.16958766,44.1705082,44.1706569,44.20599601]}]],[[{"lng":[12.29033551,12.30245806,12.34933607,12.33287143,12.33517779,12.36183932,12.3621776,12.35106734,12.34152245,12.33301891,12.32584533,12.32226793,12.33021097,12.33150796,12.31794422,12.30241586,12.29199043,12.2828557,12.27614267,12.27453984,12.27121306,12.24695615,12.24028111,12.2368486,12.2310535,12.22895809,12.22925353,12.20673648,12.2109151,12.20187053,12.20412192,12.21944922,12.22663265,12.23270154,12.21263764,12.20114028,12.1980495,12.18910275,12.18605744,12.18120022,12.17849665,12.16797293,12.14997342,12.09454994,12.09956518,12.11915698,12.11645742,12.11435241,12.12947849,12.13491222,12.11988964,12.11948347,12.11886,12.12021822,12.12512231,12.14183279,12.14650232,12.15098842,12.16047629,12.15715972,12.16453302,12.16695755,12.1691554,12.17385222,12.18609714,12.18370533,12.17399591,12.21314686,12.22624686,12.23964657,12.24712624,12.29033551],"lat":[44.2269424,44.21945002,44.19073231,44.17881444,44.15665744,44.14800948,44.13293923,44.13149597,44.12659049,44.12578203,44.12348153,44.11645252,44.1106742,44.10620561,44.10978343,44.09727323,44.07728436,44.06836727,44.06892785,44.06808252,44.06870558,44.07876506,44.08563266,44.0880777,44.07915342,44.07261719,44.06560136,44.05916256,44.04814129,44.0422899,44.03786787,44.04107321,44.05003865,44.04609856,44.027661,44.0275634,44.03142696,44.04067304,44.05117674,44.05126381,44.05256913,44.04678401,44.0320544,44.02421971,44.03425322,44.05097528,44.05721075,44.06070626,44.07012926,44.0778613,44.09864893,44.10288566,44.10497839,44.10702368,44.1055479,44.11207029,44.11117444,44.10599417,44.10839581,44.12182344,44.12487865,44.13826658,44.14210854,44.14892689,44.15902288,44.17123374,44.17957706,44.22083578,44.21412036,44.21765017,44.23079669,44.2269424]}]],[[{"lng":[12.38566231,12.43696477,12.39441177,12.38124329,12.3749101,12.3639419,12.36254731,12.36183932,12.33810214,12.33517779,12.33287143,12.34933607,12.3747569,12.38352372,12.38566231],"lat":[44.22215214,44.17408845,44.14358092,44.14089295,44.1376954,44.13013286,44.12978685,44.14800948,44.14902029,44.15665744,44.17881444,44.19073231,44.21825606,44.22449406,44.22215214]}]],[[{"lng":[11.99957843,12.02759268,12.04524094,12.05686596,12.08764029,12.09128976,12.08826352,12.08707573,12.08780979,12.09956518,12.09454994,12.05472751,12.03796584,12.03655851,12.03592723,12.03266297,12.04294837,12.06610854,12.06389645,12.04804376,12.01981501,12.00167493,11.99512217,11.9913228,11.98904553,11.96357088,11.93580472,11.91967688,11.92487218,11.93934778,11.93487004,11.96489279,11.96643165,11.97363565,11.98874936,11.99026639,11.98955414,11.98784663,11.98761125,11.98851677,11.99957843],"lat":[44.07703317,44.06433238,44.06118004,44.06931404,44.07160973,44.06903514,44.06511077,44.06147873,44.05494977,44.03425322,44.02421971,44.00639575,44.00620386,44.00526897,43.98068059,43.97460929,43.96924888,43.97043879,43.95458085,43.94507487,43.94447461,43.95689105,43.95595579,43.96170031,43.96326347,43.96782594,43.99147407,44.00029789,44.00964368,44.01431356,44.03072419,44.03889731,44.04297169,44.0502477,44.06134973,44.07312183,44.0741038,44.07491375,44.07519901,44.07730898,44.07703317]}]],[[{"lng":[11.88959451,11.9078758,11.9082308,11.91007228,11.91222486,11.91229635,11.91206139,11.90763966,11.90590478,11.91206342,11.89183537,11.87041143,11.84196041,11.86146976,11.86160974,11.86076453,11.86019945,11.83118733,11.83766156,11.86800492,11.8747748,11.88959451],"lat":[44.16958766,44.15830198,44.15792383,44.15442881,44.14916126,44.14883534,44.14863427,44.14665834,44.14493794,44.09711975,44.09780506,44.0769098,44.09321473,44.10378296,44.10409456,44.10806801,44.10904548,44.11816842,44.12470583,44.14580648,44.16395697,44.16958766]}]],[[{"lng":[12.06444968,12.08693829,12.09677615,12.1032467,12.14504873,12.1506214,12.16119637,12.17124083,12.18892537,12.20881951,12.20997879,12.20797081,12.20028641,12.1938912,12.18785545,12.18080633,12.17306121,12.1708443,12.1704168,12.16987252,12.13572775,12.11164589,12.08828382,12.09246306,12.09567681,12.09574989,12.09471115,12.09443359,12.09279065,12.09054941,12.08928038,12.08739258,12.08695777,12.08671057,12.08709233,12.08750931,12.08810954,12.09018453,12.09065393,12.09105057,12.09159776,12.09089611,12.09010416,12.08910525,12.08109705,12.0806399,12.05736116,12.05267591,12.04798837,12.04581878,12.04450671,12.03373535,12.02911761,12.02378948,12.01562922,12.01056181,12.00123823,12.00025607,12.00381496,12.00595414,12.00000044,12.00499419,11.97142515,11.96973817,11.96235442,11.9381345,11.93710791,11.92317787,11.92151122,11.92829151,11.92952983,11.92555256,11.92554932,11.92624774,11.92719291,11.93058394,11.94749363,11.97586245,12.00164829,12.01121345,12.02154409,12.02772379,12.02918485,12.04899227,12.0472839,12.04990144,12.06444968],"lat":[44.30221931,44.30052389,44.29610128,44.27197532,44.25442808,44.25252784,44.25095701,44.24424262,44.25426993,44.2556056,44.2380178,44.23563455,44.23016961,44.22420894,44.22131074,44.22440336,44.21982953,44.21747843,44.21697716,44.21569713,44.21741344,44.20966998,44.17575506,44.16979909,44.16357206,44.16305692,44.16113149,44.16108501,44.16146253,44.16142432,44.16107156,44.15964619,44.15898274,44.15808014,44.15581012,44.15493457,44.15421611,44.15276451,44.15217562,44.15139064,44.14750462,44.14675838,44.14643771,44.14637515,44.14658219,44.14331416,44.15033562,44.15091102,44.15056147,44.14959974,44.14669982,44.1395053,44.13721518,44.13789663,44.13353908,44.12729884,44.12611386,44.126922,44.13006042,44.14068146,44.14975091,44.15259947,44.17505807,44.19406184,44.20572327,44.1901263,44.20218044,44.20599601,44.21090829,44.21562754,44.21937693,44.22977358,44.24004579,44.24098218,44.24160614,44.24155063,44.23588461,44.25569716,44.29616413,44.30255611,44.31453566,44.32229417,44.32811412,44.32552267,44.31680885,44.31153066,44.30221931]}]],[[{"lng":[12.14102514,12.16987252,12.16111634,12.16178756,12.16070106,12.15872012,12.15660106,12.1549231,12.1539527,12.14203707,12.13154534,12.0949368,12.09443359,12.09567681,12.09246306,12.08828382,12.11164589,12.11395753,12.12029559,12.12097664,12.14102514],"lat":[44.21580931,44.21569713,44.19500745,44.18533791,44.18233408,44.17710431,44.17490326,44.17369826,44.17356304,44.17483701,44.17702495,44.15946887,44.16108501,44.16357206,44.16979909,44.17575506,44.20966998,44.20884475,44.20633093,44.20613472,44.21580931]}]],[[{"lng":[11.889103,11.89215199,11.88991624,11.90440081,11.93487004,11.93898405,11.93947375,11.93934778,11.93903231,11.92487218,11.91967688,11.92018495,11.96357088,11.9913228,11.97548634,11.96252752,11.93640353,11.93170138,11.92936411,11.92248143,11.91700063,11.89625145,11.86765487,11.86735667,11.8697805,11.86994743,11.86938945,11.85039661,11.85185078,11.86521123,11.87637598,11.88159111,11.88123152,11.88148783,11.889103],"lat":[44.05713596,44.0539201,44.04667194,44.03433938,44.03072419,44.02435227,44.01485597,44.01431356,44.01373649,44.00964368,44.00029789,43.99933818,43.96782594,43.96170031,43.93510498,43.93381243,43.94622735,43.95247028,43.95410582,43.95429121,43.95561978,43.96769898,43.97777503,43.97934905,43.98462696,43.98524397,43.99255047,44.02553618,44.02723743,44.03477241,44.03925333,44.04769265,44.04950563,44.04993699,44.05713596]}]],[[{"lng":[12.36254731,12.36540048,12.36689612,12.37037969,12.34649135,12.33604833,12.33148085,12.33150796,12.33021097,12.32226793,12.36254731],"lat":[44.12978685,44.12940565,44.11081134,44.10423102,44.11036391,44.1042675,44.1061009,44.10620561,44.1106742,44.11645252,44.12978685]}]],[[{"lng":[12.44271848,12.43983232,12.43102922,12.40942435,12.40514067,12.40500355,12.40426411,12.40354208,12.4026967,12.39781471,12.39191468,12.38962756,12.37488094,12.37337001,12.36975286,12.36689612,12.36637669,12.36540048,12.3639419,12.36439323,12.37353804,12.3749101,12.38124329,12.39441177,12.43696477,12.44271848],"lat":[44.16975398,44.16679812,44.16424532,44.1465724,44.13818374,44.13775569,44.13315935,44.12973284,44.12698522,44.115094,44.10502438,44.10326478,44.10100103,44.10013643,44.10814772,44.11081134,44.12327299,44.12940565,44.13013286,44.1305967,44.13687171,44.1376954,44.14089295,44.14358092,44.17408845,44.16975398]}]],[[{"lng":[12.37053303,12.37322888,12.36427183,12.36220635,12.36589524,12.3714219,12.35906246,12.35535252,12.3454138,12.34461315,12.34134814,12.33536935,12.32665492,12.31541048,12.31487811,12.31407475,12.31225199,12.30938573,12.31419127,12.31632094,12.31101473,12.31794422,12.33604833,12.34649135,12.37053303],"lat":[44.1036323,44.09699862,44.08291259,44.07203505,44.07102603,44.06808102,44.05422855,44.05616674,44.05303744,44.0530069,44.05332761,44.05467286,44.0571059,44.0688127,44.06887317,44.06879748,44.06835525,44.06666483,44.07356559,44.09132929,44.09636348,44.10978343,44.1042675,44.11036391,44.1036323]}]],[[{"lng":[12.05267591,12.10396455,12.09944015,12.10204613,12.11948347,12.13495278,12.13491222,12.12947849,12.11435241,12.11915698,12.1040784,12.09956518,12.09611982,12.09262111,12.08780979,12.08681499,12.08707573,12.08826352,12.09143856,12.09128976,12.09051603,12.08998375,12.08764029,12.08218852,12.05686596,12.04524094,11.99657517,12.01249705,12.01165169,12.00167623,11.99805275,12.00025607,12.01056181,12.01562922,12.02911761,12.04581878,12.05267591],"lat":[44.15091102,44.12440085,44.10935402,44.10590715,44.10288566,44.07873176,44.0778613,44.07012926,44.06070626,44.05097528,44.03556159,44.03425322,44.03452212,44.03755192,44.05494977,44.05958616,44.06147873,44.06511077,44.06853596,44.06903514,44.07072162,44.07105114,44.07160973,44.06738166,44.06931404,44.06118004,44.08281457,44.10808971,44.11063281,44.11499188,44.11821111,44.126922,44.12729884,44.13353908,44.13721518,44.14959974,44.15091102]}]],[[{"lng":[12.18120022,12.18605744,12.18910275,12.19963291,12.19786679,12.19747293,12.19416014,12.19696207,12.19773418,12.19836939,12.20074238,12.20131201,12.20172297,12.20277131,12.20065843,12.20341804,12.20366408,12.21600063,12.22121951,12.22186562,12.22341351,12.22376096,12.22175805,12.22006488,12.21982078,12.22254343,12.20197864,12.21193884,12.22387152,12.22494801,12.2255722,12.22760106,12.22863819,12.24575522,12.2497724,12.2507801,12.2574423,12.27018674,12.25474197,12.23651989,12.23120469,12.2266789,12.21857478,12.21109154,12.18600249,12.1732422,12.15826069,12.16428063,12.1609117,12.15513022,12.15217698,12.14527619,12.14710166,12.1449403,12.1426155,12.13471651,12.13388625,12.13438061,12.13312439,12.11102314,12.12182092,12.12929483,12.13353731,12.11990229,12.12071424,12.10926402,12.09770686,12.07654103,12.07841007,12.09121399,12.09523459,12.09725896,12.0973574,12.10187893,12.11808915,12.14997342,12.18120022],"lat":[44.05126381,44.05117674,44.04067304,44.02893747,44.02819909,44.02772159,44.02155617,44.01892206,44.01843227,44.0181804,44.01799684,44.01791784,44.01767225,44.01605831,44.00809599,44.00375117,44.00345617,43.99955309,44.00011717,44.00007192,43.99940701,43.99753359,43.98726379,43.98570003,43.97727116,43.9676872,43.96287315,43.94995313,43.94109991,43.94096147,43.94121392,43.94278611,43.94652004,43.95010394,43.9501877,43.94969986,43.94345993,43.92870686,43.91232539,43.91675899,43.93594093,43.93956211,43.93276856,43.93191696,43.94219016,43.93420882,43.93831553,43.95642491,43.95799474,43.95919904,43.96038799,43.95881376,43.954442,43.9489107,43.94665196,43.94406919,43.94107598,43.93649789,43.93464174,43.94872372,43.95169704,43.94973681,43.95007958,43.96931434,43.97386566,43.97852657,43.97469941,43.98102471,43.99594629,43.99706777,44.00243262,44.00681618,44.02067805,44.0205653,44.0224138,44.0320544,44.05126381]}]],[[{"lng":[11.83352129,11.85274257,11.86428841,11.88879442,11.8747748,11.83142575,11.83118733,11.83130359,11.83337329,11.83897549,11.83322191,11.83267001,11.83202519,11.82985052,11.82733365,11.81084753,11.80684389,11.79638367,11.79593659,11.79489234,11.79380781,11.78645333,11.78497041,11.78378026,11.78317113,11.78548906,11.78489889,11.78475359,11.78325689,11.78069642,11.77864251,11.77829545,11.78571988,11.74485559,11.71588519,11.72144957,11.72186797,11.71971023,11.71967372,11.72022829,11.72861269,11.75283866,11.77138614,11.77379729,11.77601262,11.77808629,11.78081344,11.78246647,11.79297305,11.8060783,11.82214849,11.83352129],"lat":[44.1966154,44.18602648,44.18007456,44.1705082,44.16395697,44.1187117,44.11816842,44.11746332,44.11187519,44.11143889,44.08496919,44.08465879,44.08449472,44.0847107,44.09553157,44.09798236,44.09099557,44.08635467,44.08587947,44.08336619,44.0820513,44.08288827,44.08349165,44.08474507,44.08613738,44.0905463,44.09580041,44.09616407,44.09781211,44.09809056,44.09958104,44.10070586,44.11539776,44.12602482,44.12255729,44.13495383,44.14813312,44.15639517,44.15723331,44.15868757,44.17183872,44.1934851,44.19887013,44.18683781,44.18207548,44.18094468,44.18041012,44.18071196,44.19124076,44.19947202,44.19456542,44.1966154]}]],[[{"lng":[12.30241586,12.31632094,12.31419127,12.30871582,12.30846341,12.30705996,12.2746931,12.27384551,12.27614267,12.28262969,12.2828557,12.28439047,12.29199043,12.30241586],"lat":[44.09727323,44.09132929,44.07356559,44.06584699,44.06020054,44.05652303,44.05953599,44.06612338,44.06892785,44.06831538,44.06836727,44.06928214,44.07728436,44.09727323]}]],[[{"lng":[11.77031067,11.77426384,11.77996218,11.78845544,11.79721561,11.7823461,11.77518405,11.76755226,11.76075189,11.76024355,11.75887034,11.7536029,11.72185956,11.71668702,11.70545629,11.70248812,11.69919422,11.69516524,11.64563981,11.66069703,11.68188876,11.72405612,11.73090848,11.72604025,11.72999576,11.73954202,11.75470145,11.75834639,11.75869298,11.75669021,11.75808701,11.76156494,11.76850868,11.77031067],"lat":[44.03953563,44.03706285,44.04945642,44.05064475,44.01486648,44.00960498,43.99892162,43.99653201,43.99188901,43.99141512,43.98654164,43.98211325,43.9655074,43.96442418,43.96469984,43.96270843,43.95639411,43.95358127,43.98937976,44.0197067,44.02120404,44.01341446,44.01786709,44.02150434,44.02517486,44.02890728,44.02648083,44.03131748,44.03955586,44.04183994,44.04879858,44.05270734,44.05045824,44.03953563]}]],[[{"lng":[11.98557048,12.00499419,12.00000044,12.00381496,12.00025607,11.99705778,11.99805275,11.99924565,12.00167623,12.01100859,12.01165169,12.01206557,12.01250166,12.01249705,12.01202919,12.00365338,11.99657517,11.98893173,11.98851677,11.98821476,11.98761125,11.98955414,11.99026639,11.98874936,11.96541199,11.96489279,11.95204562,11.93487004,11.92916745,11.90440081,11.88991624,11.89215199,11.891314,11.8886259,11.89494987,11.89710541,11.8938104,11.91323653,11.90858148,11.98557048],"lat":[44.15989732,44.15259947,44.14975091,44.13006042,44.126922,44.12250459,44.11821111,44.11659526,44.11499188,44.1110099,44.11063281,44.11017174,44.10891783,44.10808971,44.10675161,44.09014595,44.08281457,44.07761322,44.07730898,44.07676772,44.07519901,44.0741038,44.07312183,44.06134973,44.03929796,44.03889731,44.03231598,44.03072419,44.02844884,44.03433938,44.04667194,44.0539201,44.05666584,44.05733709,44.0608231,44.06915916,44.07890289,44.09328161,44.1279444,44.15989732]}]],[[{"lng":[11.86521123,11.85602698,11.85240863,11.85185078,11.85140033,11.85039661,11.84960017,11.8697805,11.86795577,11.85756926,11.85304873,11.85051658,11.85028638,11.85021463,11.85118271,11.85050069,11.84963601,11.84940505,11.83200524,11.82873433,11.80224897,11.79208497,11.77077523,11.76825388,11.75963561,11.74561563,11.74494591,11.72526545,11.72471414,11.71990607,11.71393668,11.71703165,11.68219866,11.68904209,11.69259967,11.69453546,11.69516524,11.69589074,11.69919422,11.70113767,11.70156065,11.70248812,11.70324262,11.7823461,11.80882919,11.86521123],"lat":[44.03477241,44.02843847,44.02742156,44.02723743,44.02695159,44.02553618,44.01907388,43.98462696,43.98085101,43.98012563,43.97737571,43.97422487,43.97384349,43.97338611,43.96236019,43.95956825,43.95842845,43.95829015,43.95197975,43.94476834,43.94701498,43.94444601,43.91892805,43.91773777,43.9185586,43.91676282,43.91655385,43.90723882,43.90689183,43.90139748,43.89866339,43.9218176,43.93784964,43.95003885,43.95323965,43.95343408,43.95358127,43.95391527,43.95639411,43.95885102,43.96074067,43.96270843,43.96343782,44.00960498,44.01225162,44.03477241]}]],[[{"lng":[11.84668807,11.86160974,11.85033151,11.84363495,11.84196041,11.8549157,11.87041143,11.89183537,11.91323653,11.90939323,11.8938104,11.89710541,11.89494987,11.88798913,11.88524065,11.88148783,11.88159111,11.87945,11.87637598,11.87592402,11.86740693,11.86521123,11.86309572,11.84504149,11.83043899,11.80882919,11.79750425,11.79266414,11.82649231,11.82051684,11.80219185,11.79489234,11.79593659,11.80228102,11.80684389,11.81084753,11.81615794,11.82477787,11.82733365,11.83169747,11.8293403,11.82985052,11.83267001,11.83897549,11.84668807],"lat":[44.11230916,44.10409456,44.10052346,44.09739541,44.09321473,44.09012758,44.0769098,44.09780506,44.09328161,44.08922196,44.07890289,44.06915916,44.0608231,44.05733521,44.05446974,44.04993699,44.04769265,44.04345226,44.03925333,44.03894061,44.03493245,44.03477241,44.03711135,44.03172877,44.02532925,44.01225162,44.01440232,44.05859955,44.05931553,44.07383205,44.08004522,44.08336619,44.08587947,44.08737972,44.09099557,44.09798236,44.09458342,44.09563987,44.09553157,44.09200229,44.08815346,44.0847107,44.08465879,44.11143889,44.11230916]}]],[[{"lng":[12.2408761,12.24695615,12.27614267,12.2746931,12.28264107,12.30001193,12.30684603,12.30705996,12.30818186,12.30846341,12.30871582,12.31487811,12.32665492,12.34461315,12.35535252,12.35810689,12.34685405,12.32346331,12.31387334,12.30756557,12.2888818,12.28486818,12.28122733,12.25316938,12.23945187,12.23866059,12.23535764,12.21603385,12.20779431,12.20685341,12.20310154,12.20074238,12.19696207,12.19786679,12.20522356,12.2092162,12.21263764,12.21298318,12.23256528,12.23270154,12.23249125,12.22806582,12.22663265,12.21944922,12.20633123,12.20412192,12.20223549,12.20187053,12.20673648,12.22925353,12.2408761],"lat":[44.08411612,44.07876506,44.06892785,44.05953599,44.05651678,44.05325196,44.05626815,44.05652303,44.05895729,44.06020054,44.06584699,44.06887317,44.0571059,44.0530069,44.05616674,44.05432118,44.04492867,44.03131571,44.02717416,44.02190139,44.02494412,44.02727443,44.03274486,44.00962737,44.01359169,44.01372218,44.01400491,44.0153883,44.01828502,44.01841951,44.01871392,44.01799684,44.01892206,44.02819909,44.02592989,44.02633585,44.027661,44.02782706,44.04572601,44.04609856,44.04633878,44.05014016,44.05003865,44.04107321,44.03680812,44.03786787,44.0401201,44.0422899,44.05916256,44.06560136,44.08411612]}]],[[{"lng":[12.45006944,12.45061646,12.44111578,12.42872041,12.44201798,12.44264495,12.4393894,12.44121658,12.44524974,12.44720995,12.45228993,12.45219904,12.4550878,12.45452355,12.45207991,12.43905525,12.42531067,12.40895309,12.40564787,12.42116607,12.42627675,12.44514802,12.45006944],"lat":[44.16279826,44.1622239,44.15962478,44.14734463,44.1407459,44.14034887,44.12756866,44.12502881,44.12388981,44.1221381,44.11465629,44.10872154,44.10311995,44.09319055,44.08719968,44.08866886,44.08849685,44.09875941,44.10875663,44.13578681,44.14870541,44.16696184,44.16279826]}]],[[{"lng":[11.99408431,11.99512217,12.00167493,12.01981501,12.04804376,12.04514366,12.04481791,12.05225622,12.0308448,12.03125268,12.03073254,12.02522278,12.01103565,12.00872504,12.00849189,12.00206737,11.98533638,11.96985042,11.95945853,11.9587225,11.95205894,11.91341897,11.86710685,11.88474958,11.81592787,11.84007386,11.79042681,11.7894628,11.78981575,11.788468,11.71016673,11.72471414,11.74561563,11.76825388,11.77077523,11.79208497,11.80224897,11.80682714,11.81110865,11.82873433,11.84963601,11.85118271,11.85028638,11.85756926,11.86795577,11.86735667,11.86723104,11.86765487,11.86791366,11.91700063,11.92936411,11.93640353,11.95575819,11.96252752,11.96661081,11.97398582,11.97548634,11.97585043,11.99408431],"lat":[43.95663123,43.95595579,43.95689105,43.94447461,43.94507487,43.94123593,43.93559071,43.91905152,43.92074734,43.94053426,43.94133133,43.94103631,43.93841337,43.93607947,43.9146673,43.90950657,43.90664116,43.9072431,43.90912451,43.90909856,43.90575533,43.93767807,43.91769314,43.89051842,43.88466476,43.87543267,43.85678665,43.85399219,43.8476903,43.84508476,43.87744594,43.90689183,43.91676282,43.91773777,43.91892805,43.94444601,43.94701498,43.94500288,43.94410527,43.94476834,43.95842845,43.96236019,43.97384349,43.98012563,43.98085101,43.97934905,43.97881202,43.97777503,43.97745342,43.95561978,43.95410582,43.94622735,43.94075821,43.93381243,43.9325,43.93449586,43.93510498,43.9354106,43.95663123]}]],[[{"lng":[12.1732422,12.1702824,12.16440249,12.15949761,12.15922921,12.15845388,12.16805073,12.14215528,12.13825978,12.13367012,12.12616641,12.12362155,12.11798832,12.10691646,12.10164635,12.09667854,12.08085662,12.06880128,12.07101432,12.08356766,12.1124835,12.11416321,12.13312439,12.13372279,12.1449403,12.14710166,12.14495848,12.14508163,12.14527619,12.14577188,12.15217698,12.1609117,12.16428063,12.15763799,12.15826069,12.16440767,12.1732422],"lat":[43.93420882,43.92534388,43.92439467,43.92174736,43.92141467,43.91923302,43.89755736,43.86233261,43.84764094,43.8530049,43.85701894,43.85736768,43.85766572,43.85554572,43.85252893,43.85317696,43.88848307,43.8915357,43.90212685,43.92578165,43.94471358,43.94275913,43.93464174,43.9348864,43.9489107,43.954442,43.95633769,43.95819792,43.95881376,43.95923225,43.96038799,43.95799474,43.95642491,43.93902599,43.93831553,43.93629067,43.93420882]}],[{"lng":[12.09780559,12.09523286,12.09725896,12.09523459,12.07841007,12.07654103,12.09770686,12.12071424,12.13353731,12.12182092,12.10278146,12.07862793,12.06085362,12.05127048,12.04514366,12.06389645,12.06610854,12.03266297,12.03655851,12.05472751,12.09780559],"lat":[44.0229682,44.0119848,44.00681618,44.00243262,43.99594629,43.98102471,43.97469941,43.97386566,43.95007958,43.95169704,43.95030748,43.93553922,43.92930991,43.92948541,43.94123593,43.95458085,43.97043879,43.97460929,44.00526897,44.00639575,44.0229682]}],[{"lng":[12.06297146,12.06885418,12.08383265,12.08321581,12.06795631,12.06089622,12.06297146],"lat":[43.85893892,43.85840281,43.85835935,43.8543606,43.85157555,43.84684034,43.85893892]}]],[[{"lng":[12.44312171,12.42627675,12.40564787,12.42531067,12.39987233,12.39264511,12.37047371,12.3714219,12.37131994,12.36589524,12.36225417,12.36220635,12.36241992,12.36328191,12.36427183,12.37123158,12.37322888,12.37337001,12.38962756,12.39191468,12.39781471,12.4026967,12.40354208,12.40426411,12.40514067,12.40942435,12.44312171],"lat":[44.16838242,44.14870541,44.10875663,44.08849685,44.06648074,44.06367987,44.066031,44.06808102,44.0682641,44.07102603,44.07182742,44.07203505,44.07382032,44.07933164,44.08291259,44.09288836,44.09699862,44.10013643,44.10326478,44.10502438,44.115094,44.12698522,44.12973284,44.13315935,44.13818374,44.1465724,44.16838242]}]],[[{"lng":[12.2888818,12.31387334,12.31883673,12.32360904,12.32376635,12.31813872,12.32492041,12.32733053,12.33626523,12.35343662,12.3528725,12.35079357,12.34653033,12.34306597,12.33547037,12.32606432,12.3231648,12.32282757,12.32095269,12.31252582,12.29476195,12.27796308,12.27018674,12.25710958,12.2497724,12.22494801,12.21193884,12.20954159,12.20197864,12.2019197,12.20393902,12.22254343,12.21982078,12.22006488,12.22376096,12.22186562,12.20366408,12.20065843,12.20074238,12.20685341,12.20927297,12.2138173,12.21603385,12.2341206,12.23866059,12.23945187,12.24285185,12.24514597,12.25316938,12.28122733,12.28292042,12.28486818,12.2888818],"lat":[44.02494412,44.02717416,44.01573133,44.01362081,44.00929485,44.00041529,43.98777132,43.98761105,43.98992505,43.98834148,43.98606231,43.98465588,43.97397748,43.97203085,43.96979527,43.96520818,43.96194354,43.96060115,43.95660159,43.94023474,43.9281896,43.92474944,43.92870686,43.93965216,43.9501877,43.94096147,43.94995313,43.9558815,43.96287315,43.96548567,43.96664441,43.9676872,43.97727116,43.98570003,43.99753359,44.00007192,44.00345617,44.00809599,44.01799684,44.01841951,44.01701906,44.01569382,44.0153883,44.01396795,44.01372218,44.01359169,44.01051518,44.00935161,44.00962737,44.03274486,44.03245355,44.02727443,44.02494412]}],[{"lng":[12.20887415,12.21109154,12.21789904,12.21857478,12.21933849,12.22022043,12.2266789,12.23651989,12.23479725,12.22223625,12.21908817,12.20319861,12.17601138,12.1734315,12.1702824,12.1732422,12.17397762,12.18570341,12.18600249,12.1886976,12.19176722,12.20887415],"lat":[43.93215038,43.93191696,43.93248152,43.93276856,43.93353029,43.9355581,43.93956211,43.91675899,43.91695828,43.91528955,43.90805634,43.91648858,43.92040219,43.92421937,43.92534388,43.93420882,43.93515169,43.94218951,43.94219016,43.9408635,43.93792376,43.93215038]}]],[[{"lng":[11.77455607,11.78571988,11.78564745,11.7836302,11.77829545,11.77864251,11.78325689,11.78489889,11.78548906,11.78317113,11.78378026,11.79489234,11.82051684,11.82532238,11.82640862,11.82649231,11.82617086,11.79266414,11.77996218,11.77815491,11.77506289,11.77476722,11.77426384,11.77395753,11.7720037,11.76506474,11.76850868,11.76156494,11.75808701,11.75669021,11.75834639,11.75470145,11.72605891,11.72405612,11.71227141,11.69296876,11.68575592,11.68188876,11.70069524,11.75156105,11.77455607],"lat":[44.11529694,44.11539776,44.11199643,44.10815637,44.10070586,44.09958104,44.09781211,44.09580041,44.0905463,44.08613738,44.08474507,44.08336619,44.07383205,44.06829344,44.06070407,44.05931553,44.05887334,44.05859955,44.04945642,44.04392756,44.03787171,44.03741974,44.03706285,44.03691723,44.037838,44.04345308,44.05045824,44.05270734,44.04879858,44.04183994,44.03131748,44.02648083,44.01383481,44.01341446,44.01268667,44.01389083,44.01713979,44.02120404,44.05555895,44.11942674,44.11529694]}]],[[{"lng":[12.0833617,12.09009708,12.09246894,12.09667854,12.10164635,12.11798832,12.12616641,12.15055874,12.1308041,12.11273702,12.10289302,12.10744557,12.07054291,12.05300257,11.95146264,11.95117234,11.96168234,11.9623265,11.96549381,11.98209439,11.98625539,12.00568253,12.01809896,12.0193954,12.02051366,12.02110047,12.02132509,12.02173281,12.02316644,12.03046608,12.03435069,12.0346257,12.0352629,12.03728036,12.03941807,12.03996411,12.04713902,12.05446542,12.06089622,12.06304682,12.06795631,12.08321581,12.08383265,12.05495173,12.0833617],"lat":[43.87166067,43.86424906,43.85718041,43.85317696,43.85252893,43.85766572,43.85701894,43.83714889,43.82475929,43.79643411,43.79227068,43.75377137,43.7407306,43.75696563,43.77757201,43.78698508,43.79020687,43.79041524,43.79238576,43.81052709,43.81792703,43.82001021,43.82433733,43.8258786,43.82906317,43.83132545,43.83183269,43.83227206,43.83332349,43.83674025,43.83976117,43.84003297,43.8410694,43.84454499,43.85087135,43.85133396,43.85663462,43.85976102,43.84684034,43.84753892,43.85157555,43.8543606,43.85835935,43.8614856,43.87166067]}]],[[{"lng":[9.71762804,9.72171335,9.73160438,9.73761572,9.75414339,9.7619278,9.77964649,9.79208693,9.79925736,9.75929259,9.76353369,9.76803607,9.76216622,9.76515641,9.75239834,9.74146677,9.72299616,9.70201141,9.69654209,9.68666166,9.67521222,9.66762784,9.6645641,9.65447955,9.65229747,9.66111257,9.67015664,9.67021068,9.66789753,9.6663234,9.68922688,9.6973972,9.70473612,9.70695664,9.70879388,9.71121658,9.71842938,9.71134172,9.71762804],"lat":[44.78376341,44.77077449,44.76343777,44.76615378,44.76850548,44.77044075,44.78319481,44.78522471,44.77446213,44.7347199,44.72493315,44.71007491,44.70541629,44.68134207,44.67832103,44.67991392,44.67802483,44.67138147,44.67207664,44.67510726,44.68761677,44.70298333,44.70550385,44.71123354,44.71815079,44.72277229,44.73288315,44.73537646,44.73921245,44.74000837,44.77115523,44.77693905,44.77347316,44.7721271,44.7704503,44.76912092,44.76887773,44.78199385,44.78376341]}]],[[{"lng":[9.38974608,9.43286447,9.40755579,9.40339008,9.39446742,9.3882981,9.38057889,9.37510526,9.37560865,9.37280733,9.35695826,9.34704736,9.32961543,9.32583513,9.32191816,9.31417986,9.31838167,9.31800858,9.27740952,9.28850607,9.28954634,9.2988341,9.30950524,9.31042865,9.31201249,9.31241678,9.31473275,9.31459708,9.29128997,9.31525809,9.32758604,9.34949191,9.38262916,9.38974608],"lat":[44.97025404,44.95406751,44.9517031,44.94920186,44.94533969,44.94401954,44.94020169,44.93269417,44.92826355,44.92422183,44.91848419,44.9137617,44.90274088,44.9017255,44.90343798,44.88732791,44.87925944,44.87780216,44.89560889,44.91112913,44.90924992,44.90968509,44.90584883,44.90561227,44.90569798,44.9057959,44.91208192,44.91275745,44.92507098,44.93749306,44.95909902,44.97007943,44.95501204,44.97025404]}]],[[{"lng":[9.22503085,9.23490407,9.2452712,9.28508507,9.29248743,9.3037783,9.30478975,9.30672114,9.3057747,9.32654783,9.33121292,9.35671778,9.35792887,9.37554509,9.37663159,9.37068207,9.40273962,9.3985851,9.39485413,9.39486331,9.39538737,9.40562892,9.4031449,9.34222418,9.30041024,9.27223047,9.24564231,9.25653892,9.24550262,9.20297322,9.20193134,9.21741798,9.21989107,9.22503085],"lat":[44.67337513,44.67091638,44.65617118,44.65944113,44.64476199,44.64379625,44.6443067,44.64701576,44.66564426,44.66577581,44.66425898,44.65427052,44.6522682,44.64041848,44.63879446,44.61717655,44.6166764,44.61542162,44.61166254,44.61115837,44.61038235,44.6008068,44.59145001,44.57778043,44.60777737,44.59591522,44.59971154,44.61059408,44.61964781,44.61349411,44.67161711,44.67412884,44.67419612,44.67337513]}]],[[{"lng":[9.3571145,9.35659857,9.38117737,9.3969456,9.41338705,9.44505177,9.44789634,9.44628586,9.44537432,9.43800801,9.43070359,9.42963857,9.42008708,9.41134601,9.4063738,9.40407264,9.40222798,9.3980627,9.38752212,9.37995024,9.3767442,9.36878179,9.36309823,9.35826755,9.34167518,9.31417986,9.3571145],"lat":[44.9171154,44.91358823,44.89654906,44.88185804,44.89513171,44.86759248,44.85569863,44.85529084,44.85524937,44.85517884,44.85491856,44.85466151,44.85168135,44.84508763,44.84518644,44.84544666,44.84584928,44.84553978,44.83988672,44.82748022,44.82661764,44.82571641,44.82240383,44.82429152,44.86981198,44.88732791,44.9171154]}]],[[{"lng":[9.75753568,9.81326234,9.82381971,9.81701232,9.80879775,9.80212211,9.8008748,9.79750955,9.79289125,9.79194477,9.79110643,9.76002394,9.73178774,9.72279184,9.70868692,9.69805906,9.69142684,9.68746563,9.66980065,9.66592648,9.63104726,9.61502343,9.62113313,9.59973809,9.629192,9.64361493,9.65431152,9.6611495,9.66975088,9.67179083,9.67689296,9.72768161,9.75037187,9.74506913,9.75753568],"lat":[45.11253851,45.07810328,45.05242211,45.04703394,45.05072015,45.04828273,45.04426768,45.03527145,45.02996553,45.02576824,45.02388367,44.99243528,44.99567135,45.00366828,44.99891367,44.99613454,45.00073884,45.00569577,45.00445047,44.99661009,45.00083529,45.0113176,45.02981057,45.03026942,45.04922242,45.06595734,45.07051445,45.07192434,45.07200926,45.0726364,45.07760824,45.06213546,45.07904693,45.11093871,45.11253851]}]],[[{"lng":[9.45600998,9.45118695,9.45094382,9.45128749,9.45167749,9.45199648,9.45742329,9.45778809,9.45798577,9.45804421,9.45747587,9.45521345,9.45169105,9.44767175,9.42790416,9.42434783,9.41529251,9.41267684,9.41159671,9.41152498,9.41365577,9.41338705,9.41225463,9.39987963,9.3969456,9.38788115,9.38117737,9.36054125,9.35705329,9.35659857,9.35624629,9.3571145,9.35695826,9.36115759,9.37133271,9.37280733,9.37395409,9.37560865,9.37487381,9.37510526,9.38057889,9.42695578,9.43213606,9.43286447,9.44060995,9.449173,9.45370398,9.45834272,9.459644,9.45488877,9.45600998],"lat":[44.95036766,44.94476961,44.93962146,44.93818878,44.93781817,44.93788892,44.93518472,44.93484118,44.93420125,44.93357989,44.93223187,44.92978337,44.92823102,44.92794079,44.90753704,44.90625401,44.91000512,44.90912292,44.90691281,44.90573382,44.89974137,44.89513171,44.89262425,44.88135268,44.88185804,44.8877225,44.89654906,44.91199151,44.91337076,44.91358823,44.91398543,44.9171154,44.91848419,44.9193802,44.92347948,44.92422183,44.92519931,44.92826355,44.93218181,44.93269417,44.94020169,44.950525,44.95329611,44.95406751,44.96423037,44.9693348,44.97304367,44.97746309,44.9752434,44.96088639,44.95036766]}]],[[{"lng":[9.46335405,9.47266024,9.48897744,9.49053764,9.49019753,9.48891474,9.50931643,9.51152982,9.50941679,9.49846352,9.49596505,9.50273574,9.47702243,9.46121266,9.45340381,9.44888315,9.44505177,9.43180214,9.43097149,9.43329565,9.41338705,9.41365577,9.41152498,9.41159671,9.41529251,9.42790416,9.45521345,9.45798577,9.45742329,9.45167749,9.45128749,9.45118695,9.46335405],"lat":[44.9540379,44.95413479,44.94557726,44.94244689,44.94120608,44.93940219,44.92889777,44.92413482,44.91740178,44.9092043,44.90444411,44.88921909,44.87769876,44.87825881,44.86886493,44.85727911,44.86759248,44.86643707,44.86707935,44.87333115,44.89513171,44.89974137,44.90573382,44.90691281,44.91000512,44.90753704,44.92978337,44.93420125,44.93518472,44.93781817,44.93818878,44.94476961,44.9540379]}]],[[{"lng":[9.67600168,9.68746563,9.68846637,9.69805906,9.72279184,9.73178774,9.76037332,9.73256986,9.7153811,9.7082964,9.70284123,9.70062055,9.6999743,9.69493349,9.68831297,9.6785605,9.66721348,9.65593627,9.6476152,9.6641015,9.67325907,9.66980065,9.67600168],"lat":[45.00628631,45.00569577,45.00555472,44.99613454,45.00366828,44.99567135,44.98815707,44.96344857,44.93425622,44.93628983,44.93168753,44.92936066,44.92832039,44.92854022,44.93018267,44.94139445,44.94769965,44.94588359,44.95890287,44.96583869,45.00397105,45.00445047,45.00628631]}]],[[{"lng":[9.70036713,9.69722719,9.69981773,9.71908475,9.68374435,9.66947098,9.66446982,9.66368911,9.66299561,9.6606415,9.659992,9.65901338,9.64796743,9.62797083,9.61874029,9.61802411,9.61186792,9.61107349,9.61052544,9.6112004,9.61448281,9.62677483,9.62857178,9.63973778,9.64683244,9.65051534,9.65811238,9.66712491,9.67649449,9.68611416,9.68995346,9.70036713],"lat":[44.89911553,44.89082587,44.88619198,44.86845527,44.8302154,44.83318065,44.83063524,44.82764208,44.82673689,44.82440998,44.82402664,44.8236182,44.82106178,44.8199582,44.82257421,44.82657502,44.83534023,44.83678482,44.84119879,44.84280655,44.84567862,44.86015019,44.86244484,44.87177199,44.87450466,44.87664423,44.88558474,44.89406638,44.90036668,44.90515238,44.90843298,44.89911553]}]],[[{"lng":[9.81947858,9.81598201,9.81397147,9.81136175,9.81075383,9.80117635,9.77636229,9.7537575,9.76037332,9.76013097,9.76002394,9.75867938,9.75853471,9.79750955,9.80182827,9.84130954,9.83365345,9.83186424,9.81917364,9.81947858],"lat":[44.99206913,44.9879353,44.98749054,44.98593379,44.98510094,44.94223841,44.97353844,44.97795679,44.98815707,44.99189445,44.99243528,44.99533381,44.99782829,45.03527145,45.03349955,45.01969009,45.00988021,45.00725573,44.99292648,44.99206913]}]],[[{"lng":[9.63509288,9.63049343,9.63572712,9.64568416,9.6476152,9.65109711,9.65593627,9.65852097,9.65608141,9.65264197,9.65067312,9.64965959,9.64823135,9.64322573,9.63774275,9.63702131,9.63654659,9.63591569,9.63537772,9.631019,9.62195913,9.61692225,9.60751328,9.606716,9.60572197,9.6055651,9.60944514,9.60461324,9.57891242,9.55864112,9.57907804,9.57970493,9.58065186,9.582873,9.58862075,9.5979174,9.59415449,9.60699387,9.63509288],"lat":[44.96963146,44.96303154,44.96275946,44.95968796,44.95890287,44.95736173,44.94588359,44.94467145,44.92412502,44.92027388,44.91983501,44.91984078,44.92128022,44.92234375,44.91348953,44.90093577,44.89923704,44.89830435,44.8977582,44.90222037,44.90072173,44.89637407,44.88685535,44.88569833,44.8838852,44.88341791,44.87793305,44.86748932,44.85574878,44.87838189,44.88867745,44.88931342,44.89155011,44.90332244,44.90801002,44.92864828,44.95697905,44.95662347,44.96963146]}]],[[{"lng":[9.55744662,9.57158695,9.57545086,9.63355863,9.63248721,9.6155048,9.60510266,9.57873475,9.57785261,9.57457333,9.56761297,9.54744182,9.54260914,9.54163282,9.53351594,9.52986079,9.53472338,9.52884409,9.52590366,9.53150647,9.52711307,9.55133039,9.53721564,9.55744662],"lat":[45.10750332,45.0994129,45.07023691,45.0559676,45.05324601,45.04230261,45.04320436,45.03231383,45.03216977,45.03756039,45.04336534,45.02749464,45.02897598,45.02909765,45.02955444,45.03093072,45.03644417,45.03882102,45.04345252,45.05235996,45.07230662,45.09211309,45.1260537,45.10750332]}]],[[{"lng":[9.76187238,9.77636229,9.7957968,9.76299154,9.75776565,9.71908475,9.69981773,9.69722719,9.70218329,9.70200805,9.68995346,9.69681816,9.69845771,9.701724,9.70332183,9.71490442,9.71947708,9.7232827,9.72456058,9.72549163,9.73256986,9.73660974,9.74124401,9.74316339,9.75177054,9.7537575,9.76187238],"lat":[44.97683171,44.97353844,44.94277112,44.92635939,44.89414904,44.86845527,44.88619198,44.89082587,44.89640376,44.89891641,44.90843298,44.91986883,44.92133513,44.92319653,44.92433895,44.93362908,44.93851543,44.94483777,44.94767427,44.95114311,44.96344857,44.96504293,44.96452683,44.96489244,44.97051631,44.97795679,44.97683171]}]],[[{"lng":[9.93571695,9.93798332,9.93841282,9.94195508,9.94263142,9.94528809,9.95428751,9.95335771,9.9540591,9.96335042,9.96889912,9.96644945,9.96758303,9.96907353,9.97728503,9.98084853,9.98476179,9.94794766,9.92893764,9.93429038,9.93431595,9.9326514,9.9202954,9.90762024,9.88125811,9.88393778,9.8869939,9.88749854,9.887952,9.89669116,9.89549693,9.89644289,9.90631807,9.91053777,9.93571695],"lat":[45.05727619,45.04519522,45.04428251,45.03884325,45.03827957,45.03769951,45.03833579,45.04121514,45.0413983,45.04198643,45.04123735,45.03902568,45.03848496,45.03803123,45.03562079,45.03464505,45.01705782,45.005766,45.01193543,45.02191982,45.02271177,45.0233825,45.02698445,45.00968537,45.01762442,45.01938608,45.02332319,45.02558773,45.02864481,45.03306843,45.03952309,45.04155908,45.04860154,45.05844292,45.05727619]}]],[[{"lng":[9.50505162,9.53202619,9.52711307,9.52679916,9.53150647,9.52884409,9.52087886,9.51641151,9.50956171,9.50542021,9.50355858,9.500302,9.48840252,9.48778008,9.47034938,9.46214911,9.4583928,9.46027722,9.47189918,9.47351662,9.47520873,9.48263648,9.48369378,9.47969833,9.48352062,9.48020561,9.50505162],"lat":[45.10207599,45.07843202,45.07230662,45.0699406,45.05235996,45.03882102,45.04216129,45.04362186,45.045552,45.04658761,45.04697391,45.04630408,45.03540941,45.03527704,45.03309072,45.03446547,45.03913479,45.04761564,45.06207006,45.06269349,45.06223732,45.06297317,45.06635957,45.07882584,45.08771205,45.09880751,45.10207599]}]],[[{"lng":[9.58727549,9.58862075,9.57970493,9.57835311,9.56633855,9.55864112,9.56808709,9.57891242,9.57982104,9.57295885,9.55891205,9.55834198,9.56059095,9.56500306,9.55919878,9.55503421,9.54481419,9.53966066,9.53517169,9.53314351,9.53068631,9.52975762,9.51939495,9.51581804,9.50457469,9.49837297,9.47564771,9.47989254,9.47688957,9.47554712,9.47495487,9.47153836,9.45662305,9.44888315,9.46121266,9.50071154,9.50273574,9.50227733,9.50870942,9.51500318,9.51643243,9.51986019,9.54095712,9.58727549],"lat":[44.91646982,44.90801002,44.88931342,44.88836605,44.88607674,44.87838189,44.87203388,44.85574878,44.85044193,44.84501229,44.82918416,44.82779163,44.82098401,44.81557897,44.80388674,44.80342094,44.80845735,44.80909397,44.80229146,44.80036547,44.79852246,44.79789664,44.79844834,44.7957459,44.81933678,44.8209664,44.81838067,44.83151503,44.84321235,44.84460427,44.84490381,44.84635831,44.85013678,44.85727911,44.87825881,44.89090236,44.88921909,44.88747471,44.88308026,44.88316006,44.89430714,44.89944974,44.91117138,44.91646982]},{"lng":[9.48052555,9.48155359,9.4821116,9.48016569,9.48052555],"lat":[44.83014404,44.83016672,44.83090253,44.83127081,44.83014404]}]],[[{"lng":[9.92507849,9.94849146,9.93691155,9.89903639,9.8918396,9.88868326,9.88216705,9.87667338,9.87333358,9.87252041,9.88066133,9.86500696,9.85814665,9.85613268,9.85539638,9.85524753,9.85375602,9.84978305,9.83646923,9.82326066,9.81975276,9.8141446,9.82006808,9.81626489,9.79938341,9.79109082,9.78696656,9.76803607,9.76353369,9.7593435,9.75929259,9.79551642,9.79925736,9.77964649,9.78336482,9.7841356,9.78441995,9.80158783,9.8401081,9.86251992,9.86302176,9.86381862,9.89333545,9.90722601,9.90823856,9.9127985,9.91487473,9.92022574,9.90901028,9.92507849],"lat":[44.85794328,44.83771313,44.83681792,44.80701027,44.80444707,44.80394054,44.80366699,44.78741537,44.78473129,44.78277504,44.76868712,44.7621091,44.76387129,44.76610995,44.76759185,44.76778199,44.76775715,44.76655349,44.75815367,44.75867276,44.76167775,44.7572116,44.7509178,44.73920612,44.73136753,44.72244099,44.71720316,44.71007491,44.72493315,44.73378333,44.7347199,44.76709745,44.77446213,44.78319481,44.78895777,44.79733351,44.79779066,44.79857166,44.81305831,44.82675454,44.82986548,44.83070565,44.83688243,44.83494212,44.83497008,44.836113,44.83699659,44.84092353,44.85061261,44.85794328]}]],[[{"lng":[9.66721348,9.6785605,9.68392695,9.68831297,9.6890568,9.69493349,9.69675412,9.69945294,9.6999743,9.70033259,9.70062055,9.70284123,9.70616196,9.7082964,9.7153811,9.70332183,9.69845771,9.69681816,9.68995346,9.68810735,9.68611416,9.68400941,9.67649449,9.66712491,9.65051534,9.62857178,9.61186792,9.56795019,9.60461324,9.60944514,9.60920271,9.60627829,9.60572197,9.61692225,9.631019,9.63591569,9.63774275,9.64322573,9.64965959,9.65264197,9.65852097,9.66721348],"lat":[44.94769965,44.94139445,44.93647439,44.93018267,44.92986311,44.92854022,44.92819606,44.92817055,44.92832039,44.92860626,44.92936066,44.93168753,44.93479373,44.93628983,44.93425622,44.92433895,44.92133513,44.91986883,44.90843298,44.9065897,44.90515238,44.90391371,44.90036668,44.89406638,44.87664423,44.86244484,44.83534023,44.83879885,44.86748932,44.87793305,44.8813551,44.88260395,44.8838852,44.89637407,44.90222037,44.89830435,44.91348953,44.92234375,44.91984078,44.92027388,44.94467145,44.94769965]}]],[[{"lng":[10.0407025,10.05022356,10.08347462,10.04545946,10.03400763,10.03102302,10.0073774,9.997304,9.9908842,9.99586057,9.98084853,9.97728503,9.96907353,9.96644945,9.99463795,10.00770094,10.0407025],"lat":[45.06377312,45.04127903,45.0439638,45.0292472,45.00076129,44.98383775,44.99518328,45.00114174,45.00410522,45.01229861,45.03464505,45.03562079,45.03803123,45.03902568,45.05308745,45.06365803,45.06377312]}]],[[{"lng":[9.25631915,9.29850587,9.30478975,9.28508507,9.26406454,9.2452712,9.23626769,9.23490407,9.21989107,9.20788302,9.20193134,9.19939175,9.24048279,9.23508364,9.25631915],"lat":[44.68517509,44.68102155,44.6443067,44.65944113,44.6543873,44.65617118,44.6677972,44.67091638,44.67419612,44.67146389,44.67161711,44.67859991,44.68830633,44.71635982,44.68517509]}]],[[{"lng":[9.40407522,9.41453933,9.42545362,9.42576668,9.42557047,9.42533671,9.42150901,9.4182468,9.4169622,9.40902813,9.40473365,9.40144139,9.40047391,9.38185406,9.38262916,9.34949191,9.3362893,9.34746312,9.40407522],"lat":[45.02382052,45.00550029,45.00472392,44.98350114,44.98263098,44.9818937,44.97708287,44.97496141,44.974453,44.97336546,44.97222851,44.97112389,44.97059619,44.97171319,44.95501204,44.97007943,44.96657234,44.99741085,45.02382052]}]],[[{"lng":[9.72812019,9.72838063,9.71704587,9.71150087,9.71853091,9.72218356,9.73307409,9.73536287,9.76346398,9.76255513,9.75606432,9.75452875,9.75513414,9.75700374,9.74512402,9.74231995,9.76047516,9.67497944,9.65528952,9.6219463,9.65645413,9.65552543,9.66757602,9.66795483,9.66391919,9.66617565,9.6741016,9.67772531,9.68286986,9.69856524,9.70560957,9.72812019],"lat":[44.51304472,44.50763648,44.5063128,44.49743488,44.49746288,44.497989,44.4910236,44.4731746,44.46897502,44.45529699,44.44497803,44.44186424,44.43703829,44.43129667,44.42354239,44.41638546,44.3900499,44.36471301,44.4116603,44.42658197,44.45817079,44.47501115,44.47574259,44.47918838,44.48355121,44.48734619,44.49101778,44.48796244,44.48587919,44.48521709,44.50493461,44.51304472]}]],[[{"lng":[9.68373281,9.70201141,9.74146677,9.76515641,9.78586329,9.81490905,9.83354556,9.83182567,9.82435242,9.81257656,9.80534164,9.79098535,9.7834584,9.78124849,9.77936914,9.76971003,9.75639041,9.75319542,9.74938793,9.74106996,9.80089339,9.82192613,9.80144098,9.80003555,9.78058277,9.74903329,9.7435135,9.73640909,9.72798442,9.72529659,9.72346189,9.72284529,9.72227286,9.72163783,9.71603554,9.70203186,9.69597791,9.69187234,9.684048,9.67164079,9.66088614,9.66004697,9.66282012,9.66344122,9.66125429,9.65944244,9.63812807,9.61601616,9.61600784,9.61786274,9.61620058,9.5915936,9.56950349,9.56732126,9.55536076,9.55340732,9.55236996,9.55255787,9.55383365,9.55869394,9.56328414,9.56764203,9.57616241,9.57661884,9.58094846,9.58497462,9.60176595,9.60228557,9.60217492,9.60658158,9.60978937,9.62794939,9.63179549,9.63503128,9.65355534,9.66298803,9.67521222,9.68373281],"lat":[44.68031919,44.67138147,44.67991392,44.68134207,44.67579104,44.6822222,44.66166133,44.65782536,44.65603855,44.65165777,44.63897061,44.62873616,44.62949924,44.63198104,44.63568487,44.63827106,44.63274255,44.630261,44.62522666,44.6221571,44.61040114,44.59909765,44.57517956,44.55638312,44.54663295,44.56030303,44.55778238,44.55143661,44.54609808,44.54748357,44.54971884,44.55069503,44.55225608,44.55282726,44.55574334,44.55310251,44.56152094,44.57614798,44.58585481,44.58705376,44.58627026,44.58669824,44.59506983,44.60379229,44.61206924,44.61233179,44.60173994,44.59959273,44.5928409,44.58835664,44.58231594,44.56800151,44.58490799,44.58590013,44.59060421,44.59053268,44.5967314,44.59794583,44.59960511,44.6045058,44.60745407,44.60720743,44.60990151,44.61017829,44.61466658,44.62275723,44.62895371,44.62922104,44.6294917,44.63257422,44.6343036,44.6394176,44.64061171,44.66328882,44.67172757,44.68022544,44.68761677,44.68031919]}]],[[{"lng":[9.66092052,9.66282012,9.66088614,9.65374216,9.65271644,9.66752102,9.65955327,9.66657072,9.66125836,9.65821672,9.65267922,9.64682038,9.64489851,9.61791616,9.61782521,9.60593033,9.60381868,9.60604442,9.60532648,9.5928022,9.58441074,9.57795886,9.56601575,9.55890163,9.55830404,9.54158421,9.53784605,9.53584527,9.53310942,9.52766495,9.51213298,9.51159406,9.51141107,9.50842997,9.50621347,9.49680342,9.49632331,9.50460767,9.49109549,9.51474364,9.53229683,9.53691675,9.53914212,9.54003787,9.54141006,9.54598661,9.54909803,9.55536076,9.56732126,9.58179727,9.5915936,9.60249216,9.60798707,9.60975419,9.61430492,9.61620058,9.61786274,9.61785511,9.61600784,9.61601616,9.62461853,9.63243665,9.63812807,9.66092052],"lat":[44.61153104,44.59506983,44.58627026,44.57197037,44.54810149,44.52755306,44.51751644,44.51064272,44.49944732,44.49407231,44.49257364,44.48921297,44.48714422,44.48964308,44.477526,44.46766876,44.46405185,44.45568555,44.45067486,44.45354939,44.46266737,44.4660222,44.4580426,44.44482564,44.44013813,44.44847414,44.44923902,44.44896935,44.44793783,44.44886339,44.46732663,44.46895853,44.47247938,44.47657992,44.47890344,44.4827304,44.48394784,44.52996,44.55397926,44.56331431,44.58549258,44.58787462,44.58875539,44.58889521,44.58878966,44.58781363,44.58778969,44.59060421,44.58590013,44.57303924,44.56800151,44.57704158,44.58098257,44.58140526,44.58173197,44.58231594,44.58835664,44.58882482,44.5928409,44.59959273,44.60277789,44.60328402,44.60173994,44.61153104]}]],[[{"lng":[9.98525068,10.01468614,10.02126749,10.04663391,10.04473131,10.04461158,10.04481211,10.04504716,10.05172768,10.06806229,10.06515622,10.07108559,10.07142278,10.06519892,10.00453872,9.9712568,9.90334513,9.89995048,9.90762878,9.90738043,9.90348349,9.90610978,9.90406548,9.88636603,9.90884964,9.91954014,9.92074171,9.92778544,9.94865114,9.94868808,9.94844927,9.94390553,9.92578164,9.9478188,9.95955219,9.97764833,9.98525068],"lat":[44.59501242,44.56314008,44.56297337,44.57604043,44.57318605,44.57142265,44.5706646,44.57042839,44.56549086,44.5557394,44.54482845,44.54140604,44.53782886,44.52430221,44.49288363,44.46324668,44.470394,44.47270748,44.48151885,44.48983477,44.50125399,44.5067608,44.52491725,44.53753357,44.54852002,44.54875853,44.54916297,44.55272498,44.57144143,44.57169264,44.57249584,44.58269733,44.58777905,44.60568426,44.59504438,44.60652208,44.59501242]}]],[[{"lng":[9.82326066,9.83183852,9.84411554,9.85015228,9.85943483,9.85503883,9.84574639,9.87363433,9.88328475,9.82701367,9.8185769,9.81490905,9.80734995,9.79864167,9.78586329,9.78472738,9.76599873,9.76515641,9.76580303,9.76216622,9.78696656,9.81526651,9.81626489,9.81665225,9.81831758,9.82006808,9.8141446,9.82326066],"lat":[44.75867276,44.75154386,44.75223695,44.75037372,44.73313694,44.72964105,44.70812274,44.70069296,44.69119327,44.68852685,44.68551784,44.6822222,44.67853091,44.67653061,44.67579104,44.67576285,44.68014812,44.68134207,44.69785703,44.70541629,44.71720316,44.73826801,44.73920612,44.73980651,44.74325145,44.7509178,44.7572116,44.75867276]}]],[[{"lng":[9.80421451,9.84003542,9.83260365,9.86109028,9.86366692,9.86450763,9.88636603,9.89700123,9.90406548,9.90348349,9.90738043,9.90760989,9.90762878,9.90748047,9.90346033,9.90171393,9.89995048,9.89264409,9.81993668,9.75738202,9.74231995,9.75700374,9.75452875,9.76346398,9.73536287,9.73307409,9.71150087,9.72838063,9.72812019,9.70560957,9.701805,9.70060701,9.6980704,9.69811428,9.69875594,9.70436246,9.70480768,9.70487636,9.7048687,9.70326109,9.70043012,9.70012144,9.70000012,9.70203186,9.70584694,9.7121207,9.71603554,9.72163783,9.72227286,9.72346189,9.72529659,9.72798442,9.7435135,9.74903329,9.76198042,9.77113926,9.78058277,9.78135146,9.80003555,9.80240571,9.80344765,9.80421451],"lat":[44.5663466,44.55801345,44.55074882,44.52955259,44.52896901,44.52921168,44.53753357,44.53194995,44.52491725,44.50125399,44.48983477,44.48841052,44.48151885,44.48011561,44.4737871,44.47305368,44.47270748,44.47022156,44.4664229,44.40715774,44.41638546,44.43129667,44.44186424,44.46897502,44.4731746,44.4910236,44.49743488,44.50763648,44.51304472,44.50493461,44.50749678,44.50935868,44.51798971,44.5195559,44.52579978,44.53880109,44.54022974,44.54070646,44.5420929,44.54755837,44.55077168,44.5512777,44.55270986,44.55310251,44.55520359,44.55672209,44.55574334,44.55282726,44.55225608,44.54971884,44.54748357,44.54609808,44.55778238,44.56030303,44.55026057,44.54721025,44.54663295,44.54669071,44.55638312,44.55940937,44.56644201,44.5663466]}]],[[{"lng":[10.05650741,10.09860814,10.09549596,10.10613831,10.11438453,10.12593193,10.12917996,10.14265084,10.14585635,10.13564019,10.13066962,10.08444729,10.07437836,10.06333358,10.05373427,10.05552833,10.06243614,10.06479711,10.06570426,10.05859281,10.05344948,10.04664672,10.03855159,10.03304268,10.02329823,10.01437655,10.01632657,10.01651451,10.01232683,10.02185172,10.02080044,10.01703569,10.01234052,10.00933154,10.0025218,10.00180459,9.99890216,9.99775105,9.99391349,9.98740878,9.99416253,10.00442041,10.01607095,10.02866075,10.03003943,10.0333834,10.03513691,10.03948856,10.03944801,10.03983613,10.05650741],"lat":[45.00119447,45.00180459,44.98445268,44.9849355,44.98518811,44.98541689,44.98545685,44.98544885,44.98526371,44.95645004,44.95218006,44.93259907,44.91729186,44.90852828,44.9100666,44.9139569,44.91619735,44.91849785,44.92752458,44.93043814,44.92775811,44.93275374,44.93432198,44.93890881,44.93247926,44.92096432,44.91802135,44.91359069,44.90164624,44.89806862,44.89162357,44.89070295,44.88790002,44.89695569,44.90447835,44.9047547,44.9046541,44.90474519,44.90771329,44.93593178,44.95520548,44.96836653,44.97393465,44.98083441,44.98203724,44.98672402,44.99111906,45.01218887,45.00994778,45.00965619,45.00119447]}]],[[{"lng":[10.18930262,10.21126966,10.17101493,10.16807447,10.16689854,10.15987942,10.14739571,10.1399316,10.13345027,10.11169527,10.09655293,10.09532033,10.07706188,10.07108559,10.06997195,10.06515622,10.06801341,10.06806229,10.05172768,10.04481211,10.04976706,10.08937333,10.09614197,10.11087316,10.12256051,10.16109354,10.17290751,10.17834758,10.18930262],"lat":[44.63942592,44.61930812,44.59737494,44.57237364,44.57214261,44.56936481,44.56647508,44.56214761,44.55645951,44.56033738,44.55845822,44.55517512,44.54679638,44.54140604,44.5410834,44.54482845,44.55444349,44.5557394,44.56549086,44.5706646,44.57936961,44.5867408,44.58979089,44.61173158,44.61609151,44.62035148,44.63983799,44.64462979,44.63942592]}]],[[{"lng":[10.2384203,10.28318844,10.25825515,10.23908694,10.23489937,10.18938958,10.1566313,10.15434576,10.15020862,10.13942665,10.12097093,10.15519901,10.16902228,10.17064286,10.17323246,10.18065147,10.18272184,10.18266581,10.18181877,10.18559964,10.19210791,10.21353331,10.24283663,10.23259548,10.2384203],"lat":[44.77363164,44.7652514,44.73780199,44.73151197,44.7258229,44.73631651,44.7022913,44.6990736,44.68965391,44.69520842,44.71201833,44.73054599,44.74031678,44.74300986,44.75550539,44.76618657,44.76980205,44.77015371,44.77075662,44.77642483,44.78192041,44.80547846,44.79922186,44.77488295,44.77363164]}]],[[{"lng":[10.4221255,10.42516317,10.41366834,10.41261651,10.41293173,10.41344478,10.41724755,10.42319101,10.42298031,10.40721232,10.40977123,10.38024062,10.3668924,10.3282996,10.33094678,10.33943471,10.34464801,10.34507738,10.34638183,10.32125072,10.32725953,10.32955715,10.34446402,10.35602802,10.39928495,10.4221255],"lat":[44.96549464,44.96020821,44.95391514,44.95083149,44.94972936,44.94893986,44.94584337,44.93141803,44.92853103,44.91365169,44.89828619,44.90484934,44.91446412,44.91884234,44.92319548,44.92258311,44.92499739,44.92547844,44.93358282,44.94793743,44.9550963,44.95686995,44.96380691,44.96219385,44.98465377,44.96549464]}]],[[{"lng":[9.67164079,9.684048,9.69187234,9.69449786,9.69597791,9.70203186,9.70012144,9.70487636,9.70287983,9.69875594,9.6980704,9.70560957,9.69856524,9.68286986,9.6754696,9.67490533,9.6741016,9.67314635,9.66644199,9.66617565,9.664081,9.66391919,9.66434905,9.66795483,9.66757602,9.64867499,9.64099804,9.64338962,9.64525733,9.64682038,9.66125836,9.65955327,9.66752102,9.65271644,9.65679596,9.65385147,9.65374216,9.67164079],"lat":[44.58705376,44.58585481,44.57614798,44.57034342,44.56152094,44.55310251,44.5512777,44.54070646,44.53790996,44.52579978,44.51798971,44.50493461,44.48521709,44.48587919,44.49076662,44.49091401,44.49101778,44.49106842,44.48754269,44.48734619,44.48562088,44.48355121,44.48240651,44.47918838,44.47574259,44.47513128,44.48008107,44.48258838,44.48546769,44.48921297,44.49944732,44.51751644,44.52755306,44.54810149,44.55934931,44.56943104,44.57197037,44.58705376]}]],[[{"lng":[10.17362533,10.17364657,10.19275251,10.18974039,10.17362893,10.16582154,10.16468433,10.15943553,10.15464534,10.14261318,10.12530247,10.13802132,10.13676822,10.14327882,10.14812547,10.14905848,10.12951432,10.12902711,10.12613624,10.11820699,10.11287723,10.10431967,10.10109299,10.10058707,10.09639667,10.0896528,10.08699629,10.07095713,10.06499919,10.05317828,9.98928471,10.00693708,9.96980943,9.98903525,9.99425417,10.00453872,10.04625073,10.06519892,10.07108559,10.07427047,10.07706188,10.08721392,10.09532033,10.09655293,10.16689854,10.17362533],"lat":[44.56602849,44.56086081,44.55446913,44.5493421,44.53813859,44.53536475,44.53514229,44.53462288,44.5333627,44.52624566,44.50422616,44.49408021,44.48464893,44.48008261,44.47531209,44.46783501,44.45367972,44.45309937,44.44533157,44.43539847,44.43457727,44.43840547,44.43917485,44.43899966,44.43527685,44.43005679,44.42831758,44.42636247,44.41434551,44.37303332,44.40433116,44.4317343,44.45781236,44.47090843,44.47977576,44.49288363,44.50959608,44.52430221,44.54140604,44.54492314,44.54679638,44.55050825,44.55517512,44.55845822,44.57214261,44.56602849]}]],[[{"lng":[10.24806587,10.25826177,10.28517347,10.29795413,10.29339209,10.27227722,10.26263904,10.23867623,10.17834758,10.22784245,10.24100319,10.24225625,10.24806587],"lat":[44.72210584,44.71306368,44.70943312,44.70416689,44.69130871,44.67337921,44.67282903,44.65235903,44.64462979,44.69785686,44.7224979,44.72381662,44.72210584]}]],[[{"lng":[10.03855159,10.05344948,10.06570426,10.06479711,10.05552833,10.05373427,10.05512832,10.10915444,10.10180727,10.10829925,10.10225341,10.10274895,10.10603066,10.10491279,10.10499846,10.09963032,10.094839,10.09307307,10.09470007,10.09205502,10.08511444,10.06575282,10.06661241,10.06595168,10.06317686,10.04876975,10.0410967,10.0389517,10.03414078,10.02482577,10.0413598,10.0414974,10.04103976,10.0513617,10.02076368,10.01578716,10.01512274,10.00709891,9.99107621,9.98668165,9.98433171,9.9832592,9.98350793,9.98409924,9.99463695,10.00325577,10.00672422,10.00881427,10.00947845,10.00997826,10.01089591,10.01101741,10.01234052,10.02053273,10.02080044,10.02185242,10.02185172,10.01232701,10.01232683,10.01265845,10.01591843,10.01651451,10.01632657,10.01414551,10.01437655,10.01596051,10.02329823,10.03304268,10.03855159],"lat":[44.93432198,44.92775811,44.92752458,44.91849785,44.9139569,44.9100666,44.90871243,44.9053378,44.89603784,44.8839033,44.87736912,44.86843751,44.85736024,44.85449941,44.847729,44.84426101,44.84248862,44.83587999,44.80775077,44.80495842,44.80031646,44.78362873,44.78019987,44.77932382,44.7789536,44.77974399,44.77687948,44.77426136,44.77166739,44.78304013,44.7922168,44.81321758,44.82292605,44.83686579,44.84299478,44.84565877,44.85393759,44.85247827,44.84577687,44.84556288,44.85172257,44.85711507,44.85759904,44.85813407,44.86738692,44.87238867,44.87309631,44.87388806,44.87422426,44.87457092,44.87564305,44.87607406,44.88790002,44.89080677,44.89162357,44.89739347,44.89806862,44.90093508,44.90164624,44.90249849,44.90923903,44.91359069,44.91802135,44.92007518,44.92096432,44.92384887,44.93247926,44.93890881,44.93432198]}]],[[{"lng":[10.34507738,10.33943471,10.33787016,10.3347982,10.33094678,10.3282996,10.34283512,10.34786005,10.34939729,10.34979938,10.3668924,10.37659043,10.38024062,10.3944343,10.38725383,10.38944832,10.40451512,10.41087276,10.40651542,10.36555059,10.36130695,10.34328995,10.34192922,10.33179816,10.31295284,10.29684848,10.29636432,10.29153694,10.29333511,10.30243846,10.30680862,10.32125072,10.34507738],"lat":[44.92547844,44.92258311,44.92396076,44.92426677,44.92319548,44.91884234,44.91408132,44.91171761,44.9091969,44.90905711,44.91446412,44.91120931,44.90484934,44.90094107,44.89308876,44.892711,44.89126806,44.89050384,44.88007023,44.87021516,44.87402129,44.87813094,44.878417,44.87996694,44.8841911,44.88541036,44.8987726,44.90607617,44.90718107,44.91539543,44.92151186,44.94793743,44.92547844]}]],[[{"lng":[10.35438867,10.36745315,10.41539095,10.41376976,10.41386308,10.41678211,10.40261035,10.39913187,10.36176783,10.34075147,10.34435066,10.32287976,10.34334948,10.32116695,10.35438867],"lat":[44.6827875,44.6695694,44.66685726,44.66586351,44.66396285,44.63947623,44.61644298,44.58548124,44.58609498,44.59349163,44.61222843,44.61951007,44.656451,44.67123062,44.6827875]}]],[[{"lng":[9.90599032,9.90356431,9.915264,9.94868808,9.93150685,9.92833222,9.92840446,9.92922631,9.92868506,9.92074171,9.90884964,9.88636603,9.87250724,9.8650649,9.86366692,9.83260365,9.83454003,9.84003542,9.83782321,9.82866365,9.82418494,9.80344765,9.80405317,9.80170573,9.80144098,9.82192613,9.8285231,9.84208749,9.84410154,9.85468693,9.8703208,9.89877721,9.90599032],"lat":[44.61689873,44.61305589,44.59093368,44.57169264,44.56191329,44.5586082,44.55760834,44.55465782,44.55355491,44.54916297,44.54852002,44.53753357,44.533175,44.52945054,44.52896901,44.55074882,44.55321937,44.55801345,44.55828177,44.5586637,44.55960535,44.56644201,44.56834629,44.57153168,44.57517956,44.59909765,44.60225486,44.60298387,44.6037072,44.60926402,44.61689705,44.62473383,44.61689873]}]],[[{"lng":[9.97670309,10.00576832,10.01838589,10.01931218,10.02182372,10.07061014,10.09116961,10.05329354,10.03927635,10.01621242,10.00914698,9.98798116,9.99042018,9.98096443,9.97780256,9.9769318,9.97552689,9.97303673,9.97196287,9.96808072,9.96350403,9.96310323,9.952011,9.94707611,9.87624159,9.8994155,9.89990441,9.96670113,9.96958453,9.96921857,9.97670309],"lat":[44.7251994,44.72500113,44.71723736,44.71246688,44.71098607,44.70375137,44.69148466,44.68227981,44.66119868,44.66228849,44.6781863,44.68299858,44.66099369,44.65826658,44.65775355,44.65772499,44.65818712,44.66012586,44.66304277,44.6662536,44.66868692,44.66886136,44.67122592,44.6785829,44.69823335,44.7125289,44.71637803,44.70770303,44.71708599,44.72844098,44.7251994]}]],[[{"lng":[9.87347212,9.88328475,9.88448824,9.89935023,9.90885266,9.89414233,9.88740259,9.88795415,9.88804777,9.92443076,9.93566693,9.89952337,9.89877721,9.89455753,9.88767584,9.8703208,9.84410154,9.84208749,9.82192613,9.74100698,9.74106996,9.75467623,9.75639041,9.76971003,9.7834584,9.79098535,9.83182567,9.81474301,9.81490905,9.8185769,9.82701367,9.84994977,9.87347212],"lat":[44.69158384,44.69119327,44.68734896,44.68711587,44.68066698,44.67178073,44.66100346,44.65576879,44.65529094,44.65019494,44.61868498,44.62489,44.62473383,44.62320054,44.61974328,44.61689705,44.6037072,44.60298387,44.59909765,44.6191867,44.6221571,44.63168259,44.63274255,44.63827106,44.62949924,44.62873616,44.65782536,44.67937864,44.6822222,44.68551784,44.68852685,44.69170731,44.69158384]}]],[[{"lng":[10.27446659,10.30378228,10.35883187,10.34446402,10.32725953,10.32018926,10.31481036,10.3043171,10.27417876,10.2399881,10.24321536,10.24558612,10.24659329,10.24676934,10.24572892,10.24443532,10.25924482,10.24442392,10.23261597,10.23440673,10.23326899,10.24218372,10.24419683,10.24476492,10.24518635,10.24534274,10.24476045,10.24437422,10.24360372,10.24275715,10.24015553,10.23930326,10.23441476,10.2330611,10.2299982,10.24379984,10.23480907,10.23739026,10.25179823,10.25458478,10.25562628,10.25719945,10.26511448,10.27446659],"lat":[44.99793011,44.99939951,44.96548672,44.96380691,44.9550963,44.94697749,44.93901884,44.92675249,44.87893207,44.87690493,44.88742923,44.89049108,44.8913893,44.89191849,44.89769113,44.90172014,44.93548624,44.9434444,44.9436985,44.95628186,44.97122833,44.96416422,44.96402527,44.96449618,44.96522075,44.9660022,44.96897918,44.96988358,44.97061213,44.97134149,44.97301714,44.97348548,44.97557287,44.9775049,44.99381332,45.00020818,44.9827161,44.97947449,44.9911189,44.9996401,45.0008529,45.00200582,45.004778,44.99793011]}]],[[{"lng":[10.17980978,10.17779791,10.16803355,10.17043162,10.15168863,10.14585635,10.14265084,10.12917996,10.11438453,10.09713074,10.09549596,10.09037889,10.09263955,10.09860814,10.06165614,10.05650741,10.05243013,10.0417783,10.03944801,10.03948856,10.04316293,10.04545946,10.08347462,10.1061908,10.16477342,10.17980978],"lat":[45.02216179,45.01260143,44.99173641,44.98116165,44.98513301,44.98526371,44.98544885,44.98545685,44.98518811,44.98437397,44.98445268,44.98651435,44.99367096,45.00180459,44.99912128,45.00119447,45.00580504,45.00899036,45.00994778,45.01218887,45.01955486,45.0292472,45.0439638,45.02213035,45.04432239,45.02216179]}]],[[{"lng":[10.60945751,10.66242978,10.65738412,10.63762466,10.56748216,10.56672028,10.56830978,10.56976696,10.57090473,10.56353402,10.60945751],"lat":[44.64524387,44.63069489,44.59599653,44.57288426,44.59154957,44.60477561,44.60466376,44.60592658,44.61313087,44.62081207,44.64524387]}]],[[{"lng":[10.66810935,10.68704497,10.69384417,10.69326411,10.70264748,10.73057031,10.73292079,10.70307781,10.70246265,10.70235174,10.70579926,10.69276677,10.6866744,10.67404455,10.66658745,10.65687293,10.65062336,10.65036398,10.6500674,10.65009865,10.65121885,10.65534778,10.65049935,10.66810935],"lat":[44.81668874,44.80733636,44.80123128,44.79955647,44.79442973,44.79596338,44.79055027,44.77623445,44.77554145,44.77477792,44.76224676,44.76498887,44.75479294,44.74964956,44.75162736,44.75641415,44.76312089,44.76379944,44.765343,44.76613591,44.77037965,44.77946156,44.81300625,44.81668874]}]],[[{"lng":[10.64517632,10.65881256,10.67020156,10.66405071,10.66314561,10.65779489,10.65482533,10.65423068,10.66819582,10.65342969,10.62152266,10.59041848,10.59778331,10.60246568,10.60295587,10.60426676,10.59768864,10.60218334,10.60080057,10.59369831,10.59280317,10.58984713,10.58810319,10.58284129,10.5759267,10.57531203,10.57048906,10.56678696,10.56656204,10.56679063,10.5702894,10.57079702,10.56995661,10.62078571,10.61831059,10.63578324,10.63994518,10.64197064,10.64517632],"lat":[44.5410149,44.53680249,44.5222054,44.50767955,44.50681949,44.50487173,44.502151,44.47848281,44.46778259,44.43330565,44.40585934,44.41087916,44.4198781,44.42206315,44.42299255,44.42774556,44.4389381,44.45255916,44.45807017,44.46816244,44.46899418,44.47125002,44.47228259,44.47390409,44.47994147,44.48093122,44.49280008,44.49871162,44.49923685,44.49978738,44.50679734,44.5083658,44.51314422,44.53470185,44.54119178,44.54670441,44.54252155,44.54158318,44.5410149]}]],[[{"lng":[10.49634283,10.51154819,10.50540505,10.51298305,10.51755438,10.47224255,10.44757884,10.43617839,10.4397706,10.44068113,10.44128334,10.44764961,10.45816994,10.45984446,10.49546663,10.49722454,10.49756764,10.50210026,10.50727399,10.49634283],"lat":[44.70381381,44.69345895,44.68052638,44.67408609,44.66377249,44.65321894,44.63799617,44.65802187,44.66622733,44.67396233,44.6768805,44.68021183,44.68072613,44.68108284,44.7109641,44.7130116,44.71358774,44.7223123,44.72531783,44.70381381]}]],[[{"lng":[10.59151733,10.58976685,10.5957044,10.55879708,10.54773292,10.53631807,10.52570354,10.52839117,10.52800799,10.52702571,10.52681125,10.59151733],"lat":[44.91481517,44.9041992,44.87767297,44.88045133,44.8777212,44.88029689,44.89686792,44.90315137,44.90733344,44.91233368,44.91265783,44.91481517]}]],[[{"lng":[10.51985302,10.52702571,10.52570354,10.53222308,10.49624567,10.47055657,10.45516736,10.45265323,10.4643141,10.47431294,10.4637302,10.48979751,10.49422693,10.49604931,10.49942825,10.50431523,10.51985302],"lat":[44.91272645,44.91233368,44.89686792,44.88152669,44.88280951,44.83324032,44.83299188,44.84687811,44.85303062,44.87581668,44.89777374,44.90469219,44.90698384,44.90838229,44.91799709,44.9224276,44.91272645]}]],[[{"lng":[10.65900892,10.65049935,10.65009865,10.65010069,10.64972888,10.6494452,10.63754162,10.63240587,10.61395927,10.61116638,10.60875808,10.60170269,10.58900084,10.55530948,10.55621951,10.56070366,10.56308437,10.56413404,10.56762305,10.57636084,10.57646812,10.57647148,10.57629688,10.59656503,10.5984031,10.61524052,10.62253244,10.62814926,10.63596353,10.64030751,10.64116109,10.65851178,10.65887195,10.66166848,10.66126383,10.65985627,10.65760621,10.65939755,10.65900892],"lat":[44.81730295,44.81300625,44.76613591,44.76654927,44.76771548,44.76790781,44.77139287,44.7669394,44.77402826,44.77271115,44.76125047,44.75296967,44.74901746,44.76464762,44.76671039,44.77317609,44.77673797,44.77813695,44.77956096,44.78934303,44.78964529,44.78987799,44.79024413,44.79810495,44.79962312,44.81654872,44.82660421,44.83599446,44.84740092,44.85195666,44.85260155,44.8601016,44.8550147,44.84100282,44.83795699,44.83388151,44.82520467,44.81939781,44.81730295]}]],[[{"lng":[10.78283663,10.77544191,10.79702592,10.77855349,10.77375132,10.73797932,10.73577608,10.72048664,10.74384482,10.74153198,10.74514403,10.75571557,10.75745286,10.78821693,10.79388435,10.78283663],"lat":[44.88402771,44.86882599,44.8505652,44.83141448,44.81158103,44.80723403,44.81048132,44.82144776,44.8370541,44.85429686,44.85907581,44.86581381,44.86716439,44.89987262,44.89883849,44.88402771]}]],[[{"lng":[10.53272517,10.57444239,10.57646812,10.56413404,10.56070366,10.55349389,10.52197985,10.51165804,10.50913001,10.51662584,10.51011337,10.49148276,10.49003995,10.48926284,10.48829835,10.482786,10.48520857,10.53272517],"lat":[44.79888078,44.79360951,44.78964529,44.77813695,44.77317609,44.76873051,44.75694494,44.75547645,44.75413467,44.75908557,44.76126942,44.75907019,44.75946712,44.75971133,44.76003897,44.77354647,44.78445264,44.79888078]}]],[[{"lng":[10.51695571,10.53465287,10.56679063,10.56678696,10.57048906,10.5759267,10.58284129,10.59280317,10.60080057,10.59768864,10.60426676,10.60246568,10.59041848,10.5876519,10.58379583,10.57707253,10.57394941,10.55149122,10.5201176,10.47648649,10.4718588,10.46874945,10.46759902,10.46483677,10.46123644,10.45996313,10.45593114,10.46650027,10.46880129,10.47782604,10.47926219,10.48334256,10.47760711,10.47583039,10.46753056,10.51695571],"lat":[44.49998766,44.48337096,44.49978738,44.49871162,44.49280008,44.47994147,44.47390409,44.46899418,44.45807017,44.4389381,44.42774556,44.42206315,44.41087916,44.41127326,44.41402764,44.41760474,44.41961941,44.41953964,44.40697968,44.40800228,44.40573031,44.40490158,44.41718258,44.42021594,44.42138742,44.42221394,44.43127712,44.43697563,44.43754023,44.43871117,44.43938579,44.45116238,44.45944291,44.46368787,44.48952435,44.49998766]}]],[[{"lng":[10.78643542,10.78676871,10.78677072,10.78567235,10.78530907,10.77967973,10.77692899,10.76496176,10.70577599,10.72597888,10.75546416,10.75736168,10.74181609,10.73639508,10.7404023,10.73691583,10.77099874,10.78196925,10.7844252,10.78643542],"lat":[44.61932195,44.60649612,44.60596876,44.6009941,44.59982946,44.59002367,44.58331918,44.54042344,44.56589081,44.60578313,44.60826388,44.61644039,44.6166426,44.62124888,44.62542798,44.62717795,44.63753756,44.62776737,44.62481595,44.61932195]}]],[[{"lng":[10.50191331,10.5264815,10.52788843,10.53033929,10.53474886,10.54056809,10.54300981,10.54325738,10.56238447,10.56458928,10.56645365,10.53465287,10.51698854,10.51046579,10.46753056,10.45267298,10.44081509,10.43622233,10.43673452,10.44106653,10.4397278,10.42983185,10.41555714,10.41709781,10.46470525,10.47070793,10.46797733,10.47684547,10.47809312,10.47778323,10.50191331],"lat":[44.57101398,44.56572781,44.55405074,44.54764414,44.53918111,44.53697364,44.53209956,44.51679863,44.50191834,44.50063679,44.49988654,44.48337096,44.50037434,44.50339565,44.48952435,44.49712346,44.508716,44.5173263,44.5192554,44.5229999,44.52740103,44.51735247,44.52112686,44.53847816,44.54553407,44.54848178,44.55801457,44.56270755,44.56871408,44.57040156,44.57101398]}]],[[{"lng":[10.6925763,10.76496176,10.75970797,10.7590275,10.75160006,10.74137949,10.73003205,10.72286921,10.70263765,10.69301706,10.68720679,10.68432944,10.67359556,10.66819582,10.65482533,10.67020156,10.6566092,10.65881256,10.66893894,10.67070908,10.6794671,10.67489192,10.67573998,10.6925763],"lat":[44.56668142,44.54042344,44.53441433,44.53355158,44.52339388,44.51058655,44.50162595,44.49915051,44.48803421,44.47755419,44.47358903,44.47234414,44.47023331,44.46778259,44.502151,44.5222054,44.53006457,44.53680249,44.53926565,44.54042359,44.55438403,44.56471857,44.56662366,44.56668142]}]],[[{"lng":[10.59317246,10.62814926,10.5984031,10.52879928,10.52995325,10.53875325,10.57908864,10.56726678,10.58273643,10.57802498,10.59317246],"lat":[44.85596451,44.83599446,44.79962312,44.80004518,44.81673319,44.83122085,44.84341709,44.84692875,44.87709279,44.86273223,44.85596451]}]],[[{"lng":[10.4374701,10.44081509,10.45267298,10.46753056,10.47083422,10.48334256,10.45593114,10.46759902,10.46874945,10.3711912,10.32826262,10.3304665,10.33201618,10.33405701,10.35996339,10.37342461,10.38508833,10.38722001,10.38401493,10.38802619,10.39203089,10.40879235,10.41556011,10.41141693,10.41182993,10.41454996,10.42004714,10.42084021,10.42049017,10.41371637,10.41574929,10.42701716,10.43033461,10.42983185,10.43034706,10.43596817,10.43913224,10.4397278,10.4408057,10.44120473,10.44106653,10.4407151,10.4374701],"lat":[44.51948922,44.508716,44.49712346,44.48952435,44.48539465,44.45116238,44.43127712,44.41718258,44.40490158,44.38434147,44.41953643,44.42809037,44.42773019,44.42856163,44.44388474,44.44729771,44.44850723,44.45148825,44.45517322,44.46479339,44.46723838,44.46851826,44.4780764,44.48195379,44.48500057,44.48931517,44.49092144,44.49250502,44.49621846,44.50117292,44.50356944,44.51283688,44.51630189,44.51735247,44.51886746,44.52596296,44.52771463,44.52740103,44.52671225,44.5235023,44.5229999,44.5225272,44.51948922]}]],[[{"lng":[10.5223089,10.554508,10.56083906,10.51298305,10.51154819,10.49634283,10.49741681,10.50727399,10.5223089],"lat":[44.72436225,44.72021759,44.71368285,44.67408609,44.69345895,44.70381381,44.70630237,44.72531783,44.72436225]}]],[[{"lng":[10.43483871,10.44019133,10.47809312,10.4682904,10.46797733,10.46782423,10.47070793,10.41709781,10.41555714,10.41749996,10.42983185,10.43041493,10.43033461,10.42701716,10.42229652,10.41574929,10.41371637,10.41344033,10.41436901,10.36275898,10.35453691,10.36332812,10.40160063,10.39872478,10.39955517,10.40306441,10.40350853,10.40261035,10.43483871],"lat":[44.59395957,44.58294519,44.56871408,44.5589468,44.55801457,44.55242597,44.54848178,44.53847816,44.52112686,44.51925723,44.51735247,44.51649894,44.51630189,44.51283688,44.50852954,44.50356944,44.50117292,44.5006812,44.49948586,44.51255952,44.5328501,44.54292736,44.56292673,44.58373973,44.58671917,44.59381074,44.59549977,44.61644298,44.59395957]}]],[[{"lng":[10.76270878,10.77375132,10.76114132,10.76111868,10.77012221,10.77262424,10.79064395,10.79884187,10.81064279,10.81499191,10.84204233,10.82751826,10.81619403,10.81541594,10.78290779,10.77104817,10.77395047,10.76845698,10.76754634,10.76136567,10.74579795,10.74296994,10.72645694,10.71835709,10.7245848,10.72380002,10.70246265,10.73292079,10.73057031,10.73797932,10.75333384,10.76270878],"lat":[44.81482628,44.81158103,44.79823676,44.79749289,44.79601406,44.80165256,44.7976701,44.80345112,44.80073497,44.80722611,44.79553861,44.76583027,44.7574246,44.74161798,44.73767421,44.74123501,44.73490659,44.72170432,44.71305725,44.71232063,44.70049261,44.69541129,44.70055997,44.717351,44.73578836,44.74343944,44.77554145,44.79055027,44.79596338,44.80723403,44.81554677,44.81482628]}]],[[{"lng":[10.84264467,10.84310217,10.84645322,10.85006838,10.84678674,10.81526543,10.79702592,10.77544191,10.79388435,10.81379456,10.81580363,10.82307765,10.83098889,10.83428795,10.84196909,10.84264467],"lat":[44.90311653,44.87308744,44.86745203,44.86651889,44.86005588,44.84988056,44.8505652,44.86882599,44.89883849,44.89441001,44.89466613,44.89761537,44.90263341,44.9032151,44.90337949,44.90311653]}]],[[{"lng":[10.47055657,10.46568874,10.47235742,10.49996957,10.50813123,10.51180455,10.51741527,10.52026938,10.52995325,10.53349677,10.53651673,10.52879928,10.51496682,10.48520857,10.482786,10.47577654,10.47346546,10.44155685,10.43158361,10.42966154,10.43509568,10.43553133,10.42992548,10.42833933,10.42969763,10.42728629,10.42419398,10.42383796,10.42484092,10.42883025,10.43608556,10.43733454,10.43770836,10.43728215,10.43749401,10.44207566,10.44064355,10.4459668,10.44782074,10.44998282,10.45516736,10.47055657],"lat":[44.83324032,44.82496247,44.82406647,44.83128684,44.82275336,44.82149849,44.82084793,44.82019782,44.81673319,44.81586195,44.81293167,44.80004518,44.79669172,44.78445264,44.77354647,44.77273707,44.76839185,44.76452185,44.76731819,44.76550415,44.75446133,44.75061743,44.74737983,44.74876431,44.75313139,44.7737226,44.78468086,44.79898974,44.79967039,44.79993561,44.79984459,44.80024297,44.80103946,44.8067882,44.80818986,44.8196098,44.82294967,44.82843667,44.82922338,44.82816971,44.83299188,44.83324032]}]],[[{"lng":[10.64107378,10.64835794,10.64875827,10.64883729,10.64816694,10.64564224,10.64307336,10.63804219,10.64116109,10.62814926,10.61037866,10.59607041,10.57802498,10.5957044,10.59537541,10.58976685,10.59244063,10.62518043,10.62788141,10.64107378],"lat":[44.91467624,44.90795376,44.90656277,44.90489626,44.90318655,44.89860495,44.89293019,44.87992704,44.85260155,44.83599446,44.84293054,44.84620117,44.86273223,44.87767297,44.89044693,44.9041992,44.91480234,44.92562493,44.92420179,44.91467624]}]],[[{"lng":[10.65497658,10.67020848,10.68810684,10.69319133,10.71003923,10.72285667,10.72747282,10.7304416,10.73150411,10.73437014,10.74916657,10.75102722,10.74916416,10.73924448,10.73096355,10.68580815,10.64116109,10.64534436,10.63851461,10.63804219,10.64816694,10.64875827,10.62788141,10.65497658],"lat":[44.94561783,44.94243439,44.93128329,44.93054186,44.93117744,44.92884227,44.92684611,44.92488373,44.92439953,44.92363586,44.92230289,44.90977962,44.90810681,44.90807381,44.8863023,44.87806599,44.85260155,44.86612094,44.87652649,44.87992704,44.90318655,44.90656277,44.92420179,44.94561783]}]],[[{"lng":[10.72998736,10.74371981,10.77065061,10.76824387,10.75908793,10.74916657,10.6503332,10.68667999,10.69474094,10.72998736],"lat":[44.98877271,44.94907685,44.94411429,44.9410907,44.93266024,44.92230289,44.94807474,44.98659263,44.9619401,44.98877271]}]],[[{"lng":[10.46401077,10.47585095,10.50210026,10.49722454,10.48547994,10.45984446,10.45816994,10.44991353,10.44764961,10.44068113,10.41896062,10.42851981,10.44579423,10.4465913,10.4470557,10.44707085,10.44625652,10.44146491,10.46401077],"lat":[44.73909872,44.72990804,44.7223123,44.7130116,44.70599918,44.68108284,44.68072613,44.68042618,44.68021183,44.67396233,44.67623284,44.69401926,44.71568641,44.71676559,44.71766893,44.72334016,44.72613218,44.73047785,44.73909872]}]],[[{"lng":[10.76285034,10.76839749,10.77824701,10.75745286,10.74153198,10.74384482,10.72048664,10.73797932,10.73536385,10.73057031,10.70865066,10.70264748,10.69326411,10.69384417,10.69093661,10.68704497,10.68318434,10.66901023,10.66810935,10.65939755,10.66166848,10.65851178,10.68580815,10.73096355,10.74191573,10.76285034],"lat":[44.88509874,44.88141214,44.88956352,44.86716439,44.85429686,44.8370541,44.82144776,44.80723403,44.79640598,44.79596338,44.79217851,44.79442973,44.79955647,44.80123128,44.80465918,44.80733636,44.80978791,44.8163515,44.81668874,44.81939781,44.84100282,44.8601016,44.87806599,44.8863023,44.89756377,44.88509874]}]],[[{"lng":[10.50065156,10.54773292,10.55879708,10.58273643,10.57834861,10.57204327,10.56726678,10.57908864,10.53875325,10.52995325,10.49996957,10.46568874,10.50065156],"lat":[44.88084327,44.8777212,44.88045133,44.87709279,44.86713426,44.85409175,44.84692875,44.84341709,44.83122085,44.81673319,44.83128684,44.82496247,44.88084327]}]],[[{"lng":[10.56307778,10.56655906,10.56678082,10.58769778,10.56353402,10.56830978,10.56248673,10.54690023,10.51401272,10.49346557,10.48261822,10.48098465,10.45383241,10.47224255,10.51892707,10.55278067,10.55414819,10.55641688,10.56379483,10.56307778],"lat":[44.65190768,44.64940307,44.64313356,44.64301585,44.62081207,44.60466376,44.60840757,44.61327406,44.60960075,44.5949228,44.59293509,44.60767077,44.62009195,44.65321894,44.64998743,44.65597326,44.65570259,44.65515837,44.65326628,44.65190768]}]],[[{"lng":[10.79363386,10.86539138,10.876633,10.87321308,10.86567408,10.84196909,10.83428795,10.83098889,10.81580363,10.78857754,10.78821693,10.77990225,10.76839749,10.76285034,10.75514375,10.74191573,10.73096355,10.72401897,10.73924448,10.75102722,10.77065061,10.79363386],"lat":[44.93956283,44.92961802,44.91705876,44.90725762,44.90510553,44.90337949,44.9032151,44.90263341,44.89466613,44.90006501,44.89987262,44.89108606,44.88141214,44.88509874,44.88942141,44.89756377,44.8863023,44.88993616,44.90807381,44.90977962,44.94411429,44.93956283]}]],[[{"lng":[10.61600106,10.63240587,10.6494452,10.65010069,10.6500674,10.65062336,10.65687293,10.67404455,10.70579926,10.71073425,10.71710623,10.72380002,10.7245848,10.71849994,10.71835709,10.72645694,10.73954107,10.75821906,10.77099874,10.73691583,10.73177014,10.71501867,10.70622435,10.67313285,10.67305472,10.67570041,10.67601938,10.67396044,10.60772153,10.60222311,10.58834623,10.58769778,10.57696224,10.56678082,10.56431635,10.56655906,10.56379483,10.55414819,10.55137465,10.51892707,10.50921879,10.51755438,10.51251706,10.50934796,10.51155219,10.51298305,10.51662775,10.53412901,10.54095431,10.54107611,10.54081292,10.54113679,10.56083906,10.554508,10.54464027,10.53469776,10.5223089,10.49089032,10.5022961,10.51024999,10.51165804,10.56070366,10.58900084,10.60170269,10.61116638,10.61600106],"lat":[44.77298279,44.7669394,44.76790781,44.76654927,44.765343,44.76312089,44.75641415,44.74964956,44.76224676,44.7521424,44.75028718,44.74343944,44.73578836,44.7273707,44.717351,44.70055997,44.68726198,44.68168249,44.63753756,44.62717795,44.64313622,44.64418127,44.6242564,44.63241548,44.63276772,44.63533061,44.63592008,44.63929465,44.64597276,44.64569246,44.63625956,44.64301585,44.64048787,44.64313356,44.64508637,44.64940307,44.65326628,44.65570259,44.65190595,44.64998743,44.65397724,44.66377249,44.66993485,44.6725907,44.67358361,44.67408609,44.67567014,44.68274704,44.68709907,44.69028658,44.69267669,44.69438059,44.71368285,44.72021759,44.71704485,44.72008208,44.72436225,44.72648703,44.74869004,44.75050612,44.75547645,44.77317609,44.74901746,44.75296967,44.77271115,44.77298279]}]],[[{"lng":[10.839171,10.84678674,10.84591291,10.82295435,10.81605503,10.81499191,10.81251771,10.81148566,10.81064279,10.80675964,10.79884187,10.79836252,10.79064395,10.78328546,10.77600627,10.77262424,10.77145872,10.76111868,10.76114132,10.77173267,10.77435622,10.77855349,10.79702592,10.80102442,10.81526543,10.83746367,10.839171],"lat":[44.86138066,44.86005588,44.85792647,44.82068411,44.80907214,44.80722611,44.80284323,44.80140578,44.80073497,44.80190376,44.80345112,44.8033916,44.7976701,44.79851446,44.80078585,44.80165256,44.80162812,44.79749289,44.79823676,44.80887124,44.8123098,44.83141448,44.8505652,44.85369317,44.84988056,44.86182225,44.86138066]}]],[[{"lng":[10.89799094,10.88788567,10.8771456,10.87917682,10.87813444,10.84645322,10.84310217,10.84196909,10.87321308,10.89799094],"lat":[44.92180546,44.91427123,44.90188517,44.88965934,44.86752206,44.86745203,44.87308744,44.90337949,44.90725762,44.92180546]}]],[[{"lng":[10.80739037,10.80895314,10.80748381,10.80615318,10.80616272,10.8067436,10.81340449,10.82065767,10.81528894,10.78196925,10.77099874,10.762879,10.75572189,10.75821906,10.76157416,10.77826426,10.78662333,10.80739037],"lat":[44.70321611,44.70313734,44.70135116,44.69752825,44.69702397,44.69662768,44.69450556,44.6903571,44.65653085,44.62776737,44.63753756,44.65207661,44.67699206,44.68168249,44.68504542,44.68954142,44.70187306,44.70321611]}]],[[{"lng":[10.81009936,10.81541594,10.81489754,10.82151714,10.82147836,10.81628175,10.80960811,10.80088424,10.78662333,10.7819444,10.77826426,10.75821906,10.73954107,10.76754634,10.77395047,10.77104817,10.81009936],"lat":[44.74313417,44.74161798,44.73916564,44.73527584,44.73474255,44.71758359,44.70308585,44.70466926,44.70187306,44.6943985,44.68954142,44.68168249,44.68726198,44.71305725,44.73490659,44.74123501,44.74313417]}]],[[{"lng":[10.43076139,10.44068113,10.43617839,10.45614264,10.46017812,10.48098465,10.4782613,10.4826431,10.47153899,10.45211469,10.44019133,10.43483871,10.42756892,10.40261035,10.41376976,10.43076139],"lat":[44.67437513,44.67396233,44.65802187,44.61361679,44.61016235,44.60767077,44.60206154,44.58991893,44.57695498,44.58429759,44.58294519,44.59395957,44.60118963,44.61644298,44.66586351,44.67437513]}]],[[{"lng":[10.48764712,10.48926284,10.49148276,10.49705379,10.51011337,10.51662584,10.51337369,10.50602181,10.49229543,10.46536743,10.44146491,10.42521596,10.43553133,10.42966154,10.43158361,10.44155685,10.46744384,10.47346546,10.47507757,10.47577654,10.482786,10.48764712],"lat":[44.76850954,44.75971133,44.75907019,44.76050065,44.76126942,44.75908557,44.75695921,44.75652528,44.72935484,44.74280375,44.73047785,44.739387,44.75061743,44.76550415,44.76731819,44.76452185,44.76617385,44.76839185,44.76917223,44.77273707,44.77354647,44.76850954]}]],[[{"lng":[10.72663626,10.73177014,10.73037806,10.73436255,10.7404023,10.73639508,10.75736168,10.75546416,10.72597888,10.70627869,10.70577599,10.6854927,10.67573998,10.6794671,10.66893894,10.65159547,10.63771959,10.63762466,10.63525602,10.65738412,10.66077948,10.66137918,10.66242978,10.66815997,10.67396044,10.70622435,10.71052156,10.71501867,10.72581814,10.72663626],"lat":[44.64390716,44.64313622,44.63194041,44.62774787,44.62542798,44.62124888,44.61644039,44.60826388,44.60578313,44.57616412,44.56589081,44.57123341,44.56662366,44.55438403,44.53926565,44.57267403,44.57267585,44.57288426,44.57644719,44.59599653,44.62903557,44.62972904,44.63069489,44.63662033,44.63929465,44.6242564,44.64210617,44.64418127,44.64608459,44.64390716]}]],[[{"lng":[10.57707253,10.5876519,10.60713146,10.62152266,10.61881798,10.61274563,10.60229662,10.59579633,10.5512232,10.52802969,10.5261579,10.52631627,10.51865017,10.5046608,10.50282866,10.50015537,10.50091486,10.50095561,10.49745184,10.49307359,10.4714639,10.48043852,10.4790814,10.47836852,10.47539042,10.47262187,10.47231242,10.4718588,10.47546569,10.47648649,10.47770341,10.48546157,10.49081647,10.49689338,10.5201176,10.55005407,10.55149122,10.5538427,10.57292199,10.57394941,10.57483394,10.57707253],"lat":[44.41760474,44.41127326,44.40586473,44.40585934,44.3785429,44.3736863,44.36886387,44.36338217,44.35982806,44.35088587,44.34550922,44.34387121,44.34580709,44.34262549,44.34260459,44.3479064,44.34964296,44.35068675,44.35841214,44.36135936,44.38462395,44.39551832,44.39747151,44.39802091,44.39937382,44.40113808,44.40181728,44.40573031,44.40786242,44.40800228,44.40795051,44.40645445,44.40442207,44.40464866,44.40697968,44.41931607,44.41953964,44.4196337,44.41968759,44.41961941,44.41934614,44.41760474]}]],[[{"lng":[10.37208797,10.39292695,10.41436901,10.41988429,10.42049017,10.42082695,10.42097937,10.42084021,10.42037064,10.42004714,10.41675161,10.41454996,10.41182993,10.40879235,10.38802619,10.38401493,10.38508833,10.33201618,10.3282632,10.32182348,10.3157022,10.3116703,10.29237384,10.28972083,10.28543038,10.32400949,10.33217288,10.33515431,10.34003189,10.33846374,10.34479163,10.35342014,10.35147695,10.36275898,10.37208797],"lat":[44.50863071,44.49902021,44.49948586,44.49664913,44.49621846,44.4955841,44.49357461,44.49250502,44.49129551,44.49092144,44.49038621,44.48931517,44.48500057,44.46851826,44.46479339,44.45517322,44.44850723,44.42773019,44.43114094,44.44476471,44.44971484,44.45150775,44.45171876,44.45391838,44.45998054,44.47903951,44.48537245,44.4958887,44.50606753,44.51615081,44.52711362,44.52997351,44.52458598,44.51255952,44.50863071]}]],[[{"lng":[10.54757697,10.56248673,10.56672028,10.56889946,10.57057856,10.56818062,10.56748216,10.56692777,10.56662095,10.55478033,10.5518594,10.55191687,10.5596707,10.56536944,10.5682949,10.56871047,10.56673395,10.56370498,10.55691328,10.54056809,10.53716707,10.53474886,10.52788843,10.5264815,10.49848047,10.47778323,10.47749567,10.47047088,10.47153899,10.47266246,10.4733598,10.4826431,10.48261822,10.51313622,10.51401272,10.54088255,10.54690023,10.54757697],"lat":[44.61312984,44.60840757,44.60477561,44.60266612,44.59381164,44.59175602,44.59154957,44.59154816,44.59138133,44.58140118,44.57543248,44.57191173,44.564244,44.55701804,44.55298978,44.55205681,44.54358558,44.53906281,44.53542858,44.53697364,44.5363668,44.53918111,44.55405074,44.56572781,44.57416494,44.57040156,44.56899187,44.57655463,44.57695498,44.57755266,44.57826386,44.58991893,44.59293509,44.60933329,44.60960075,44.61304934,44.61327406,44.61312984]}]],[[{"lng":[10.57106435,10.61969566,10.63046205,10.6354661,10.63771959,10.63978218,10.65159547,10.66893894,10.65881256,10.64197064,10.63807338,10.63578324,10.61831059,10.61731033,10.62078571,10.58217858,10.56995661,10.56458928,10.54056809,10.56673395,10.5682949,10.55191687,10.5518594,10.57106435],"lat":[44.58650397,44.57027721,44.57343688,44.57315827,44.57267585,44.57260122,44.57267403,44.53926565,44.53680249,44.54158318,44.54579832,44.54670441,44.54119178,44.53916237,44.53470185,44.52219864,44.51314422,44.50063679,44.53697364,44.54358558,44.55298978,44.57191173,44.57543248,44.58650397]}]],[[{"lng":[10.47755471,10.47173905,10.47106206,10.4712238,10.4714639,10.47185481,10.50237179,10.50282866,10.50358507,10.5046608,10.51865017,10.52631627,10.52556501,10.52594651,10.52608207,10.52689965,10.52689428,10.52534628,10.51048671,10.51122822,10.51510437,10.51600155,10.50681911,10.4960537,10.48689325,10.48073235,10.43026342,10.40739755,10.42016862,10.39107947,10.38876484,10.37361353,10.38926374,10.40320448,10.3961874,10.36860353,10.36048236,10.34558338,10.33804695,10.33599465,10.3692914,10.42398468,10.4718588,10.47262187,10.47836852,10.4790814,10.47963244,10.48030771,10.48043852,10.47755471],"lat":[44.39418725,44.3936956,44.38756403,44.38556332,44.38462395,44.38369163,44.3428897,44.34260459,44.34251432,44.34262549,44.34580709,44.34387121,44.34248319,44.33932709,44.3387491,44.33690161,44.33575831,44.32800055,44.29975802,44.29396835,44.28579639,44.28218331,44.2710512,44.26503471,44.26346179,44.23163534,44.22743489,44.24930811,44.26748905,44.27961388,44.28080343,44.29833527,44.29867715,44.31762883,44.31781388,44.33711678,44.34814326,44.34723944,44.34571646,44.36019903,44.3841302,44.38683284,44.40573031,44.40113808,44.39802091,44.39747151,44.39691519,44.39580811,44.39551832,44.39418725]}]],[[{"lng":[10.28797615,10.29237384,10.3116703,10.31478636,10.3157022,10.3212231,10.32182348,10.32767578,10.3282632,10.33079501,10.3304665,10.33029507,10.32791462,10.32826262,10.36980533,10.3711912,10.3692914,10.36571744,10.33967097,10.33599465,10.33695999,10.33763982,10.33804695,10.33877297,10.36048236,10.40320448,10.37349205,10.37361353,10.37400343,10.37540906,10.37811397,10.38876484,10.42016862,10.40739755,10.307116,10.25385666,10.14203472,10.15736122,10.15994194,10.16255548,10.16694867,10.19119407,10.20525275,10.2080714,10.21397231,10.22381127,10.22573912,10.22972841,10.230591,10.23098276,10.23607579,10.23861065,10.25464862,10.25542784,10.26755326,10.27548457,10.28427512,10.28543038,10.28797615],"lat":[44.45742211,44.45171876,44.45150775,44.45034659,44.44971484,44.44544685,44.44476471,44.43582017,44.43114094,44.42837913,44.42809037,44.42773226,44.42080987,44.41953643,44.38894053,44.38434147,44.3841302,44.38267853,44.36623286,44.36019903,44.34808794,44.34601834,44.34571646,44.34564493,44.34814326,44.31762883,44.29903896,44.29833527,44.29734928,44.29419935,44.28933218,44.28080343,44.26748905,44.24930811,44.28432391,44.26858068,44.35386763,44.37937137,44.38078621,44.3824876,44.38443241,44.38731507,44.39220011,44.39433101,44.4016327,44.4104404,44.41434493,44.42673031,44.42892218,44.42962917,44.43577703,44.43859442,44.45170732,44.45229294,44.45860491,44.45750831,44.4594624,44.45998054,44.45742211]}]],[[{"lng":[10.99715504,11.01824702,11.02405153,11.00081113,10.96592661,10.99715504],"lat":[44.73287183,44.73084449,44.7343516,44.70055409,44.71941991,44.73287183]}]],[[{"lng":[11.11197122,11.11523,11.11672256,11.11689726,11.1166028,11.1117944,11.10588449,11.10168746,11.10148721,11.10141068,11.10159024,11.10334408,11.10342657,11.09931589,11.09605405,11.08873124,11.04997628,11.04181044,11.04216463,11.04907234,11.04601639,11.03897374,11.03844689,11.03233777,11.03172397,11.02217816,11.01667698,11.008747,10.9963065,11.00266862,11.00308364,11.00483972,11.00606188,11.00789843,11.01045832,11.00559645,11.02405153,10.99715504,10.98628014,10.99504476,10.99194819,10.98517121,10.98562973,11.01959569,11.0330064,11.03402648,11.03629064,11.07326195,11.07385328,11.07519955,11.07606457,11.0866581,11.11197122],"lat":[44.80038608,44.79876548,44.79673035,44.79632201,44.79518419,44.78714432,44.78592119,44.78208259,44.78178921,44.78142154,44.78079708,44.77829819,44.77641521,44.77181876,44.7714106,44.7635869,44.74295875,44.7305695,44.7295099,44.72252306,44.71809813,44.71956547,44.7193048,44.71501164,44.71442841,44.69987471,44.69263967,44.68446137,44.6878272,44.69842085,44.69864987,44.69864655,44.69882558,44.69932795,44.7012141,44.70427225,44.7343516,44.73287183,44.73719358,44.74052461,44.74485474,44.74905078,44.74952892,44.76723452,44.75771524,44.75728296,44.75841289,44.78627527,44.78690369,44.78849062,44.78969917,44.80679011,44.80038608]}]],[[{"lng":[10.87162338,10.86902651,10.88333867,10.8848207,10.88502423,10.88508039,10.88563029,10.88428172,10.87818528,10.87621769,10.87271904,10.85262925,10.85056304,10.81528894,10.82065767,10.8067436,10.80615318,10.80748381,10.80960811,10.81200491,10.81628175,10.82147836,10.81489754,10.81745398,10.8193372,10.81981685,10.82043084,10.82421634,10.83930418,10.87162338],"lat":[44.72405751,44.71839064,44.71383605,44.71340424,44.71370165,44.71368334,44.71250584,44.70871115,44.69669004,44.69673139,44.69819319,44.67150057,44.65821064,44.65653085,44.6903571,44.69662768,44.69752825,44.70135116,44.70308585,44.70757027,44.71758359,44.73474255,44.73916564,44.74632916,44.74188472,44.74136026,44.74105593,44.73968948,44.73689246,44.72405751]}]],[[{"lng":[11.22186998,11.21240011,11.17920756,11.17819336,11.1777781,11.17596952,11.13585735,11.11068215,11.10835189,11.10498714,11.09931589,11.10148721,11.10588449,11.10788461,11.1117944,11.11672256,11.0866581,11.10594031,11.1344384,11.13785612,11.14173268,11.14249154,11.15432091,11.16043932,11.17620978,11.20185975,11.19349132,11.21424548,11.22186998],"lat":[44.81297492,44.80704643,44.79760256,44.79618608,44.79289922,44.79187146,44.78568839,44.77782967,44.77320961,44.77103917,44.77181876,44.78178921,44.78592119,44.78669446,44.78714432,44.79673035,44.80679011,44.82647019,44.80469142,44.80547366,44.80669281,44.80669656,44.80384531,44.80380168,44.80658084,44.81041898,44.82044639,44.82628847,44.81297492]}]],[[{"lng":[10.93478153,10.93205663,10.92861835,10.91902084,10.91691937,10.93590555,10.95144711,10.96328793,10.96689169,10.97091758,10.97350066,10.97415079,10.97522212,10.97665396,10.97690038,10.97732827,10.97812206,10.97856551,10.97905863,10.98049681,10.98230833,10.98265624,10.98414228,10.98469174,10.99198995,11.00655605,11.00799038,11.00609528,11.00290258,11.00229973,10.99774913,10.99481607,10.99364004,10.99403817,10.98534345,10.98365833,10.9730318,10.95395871,10.94982736,10.95369224,10.9536634,10.93730744,10.93712829,10.92979201,10.91670302,10.89878168,10.89634719,10.8970022,10.89679133,10.8942911,10.89074164,10.8848207,10.87344904,10.87162338,10.8633686,10.83930418,10.83291945,10.8305817,10.82741066,10.82421634,10.81981685,10.81619403,10.81805863,10.82751826,10.84204233,10.82408636,10.81499191,10.84591291,10.85006838,10.87687135,10.92907728,10.93478153],"lat":[44.890057,44.87606873,44.87071963,44.86295778,44.83389627,44.80425378,44.79860402,44.82432832,44.82676482,44.82542779,44.82517742,44.82539556,44.82578307,44.82728584,44.82745165,44.82764584,44.82794191,44.82803248,44.82809503,44.82807742,44.82754805,44.82743454,44.82671105,44.82636505,44.82058799,44.81409388,44.81005541,44.80937755,44.806558,44.79697578,44.78928262,44.78707494,44.77857325,44.77230923,44.77127474,44.77502305,44.7787203,44.77133911,44.77296826,44.7795739,44.77970268,44.78448148,44.78979623,44.79133101,44.78458217,44.75972845,44.75203265,44.74784813,44.74388785,44.7420524,44.73727073,44.71340424,44.7237285,44.72405751,44.72702119,44.73689246,44.73858405,44.7389237,44.73912414,44.73968948,44.74136026,44.7574246,44.76020079,44.76583027,44.79553861,44.80263535,44.80722611,44.85792647,44.86651889,44.86658579,44.88179235,44.890057]}]],[[{"lng":[11.00063936,11.04926044,11.05011392,11.05356651,11.06855723,11.07809108,11.08157029,11.08527213,11.12335545,11.12779278,11.12359625,11.11829163,11.12420691,11.13994866,11.14279053,11.15245487,11.15000128,11.14088754,11.13265707,11.13160657,11.107712,11.10450505,11.11365224,11.10815167,11.07295513,11.06804297,11.05614262,11.055788,11.04859906,11.04848152,11.05494818,11.03434638,11.0047049,10.99613202,10.98968252,10.98396851,10.98872163,10.98358608,11.00063936],"lat":[44.65833952,44.64244315,44.64944061,44.6549111,44.65046723,44.64702985,44.64571614,44.64450527,44.63253233,44.63135593,44.62621721,44.61784003,44.61165963,44.60664676,44.60567658,44.58661985,44.58364578,44.58238118,44.57587344,44.5674275,44.54513872,44.53941831,44.53499348,44.52467021,44.52221561,44.5231711,44.53406923,44.53747918,44.54817031,44.5486032,44.56786413,44.59946063,44.63228328,44.63062182,44.62222075,44.62797745,44.63641098,44.65127319,44.65833952]}]],[[{"lng":[10.89671458,10.93462746,10.97128395,10.97267349,10.92092652,10.91248168,10.92073099,10.8795087,10.89671458],"lat":[44.59384881,44.5634802,44.57920159,44.55967379,44.53714072,44.54362925,44.55447389,44.57371394,44.59384881]}]],[[{"lng":[10.95625447,10.99024469,10.98424641,10.97764574,10.97447874,10.97360818,10.98295008,10.92698886,10.92428017,10.91883401,10.89568413,10.88058157,10.87930766,10.87835363,10.87843847,10.87888665,10.89647152,10.91058116,10.91344827,10.90373084,10.90097525,10.90630685,10.92843367,10.9529621,10.95625447],"lat":[44.54226091,44.53073788,44.51950067,44.52227693,44.51459859,44.5066554,44.50355871,44.47657748,44.47259,44.46140139,44.45482909,44.45881493,44.46335522,44.47343185,44.48754148,44.48818228,44.50734158,44.51220178,44.51523263,44.52314624,44.52893128,44.53879915,44.5342097,44.54332658,44.54226091]}]],[[{"lng":[10.99946634,11.01278236,11.01538832,11.02224898,11.02313607,11.0274492,11.02827618,11.03133905,11.04232045,11.04640834,11.03756712,11.03246518,11.02755884,11.01584958,11.01214955,10.99198995,10.98265624,10.97856551,10.97690038,10.97522212,10.97415079,10.97091758,10.95506747,10.99946634],"lat":[44.86530223,44.85993706,44.86026016,44.86212828,44.86179751,44.85848925,44.85106586,44.84714052,44.8435598,44.84110555,44.82291296,44.81990718,44.82244301,44.81024997,44.81362803,44.82058799,44.82743454,44.82803248,44.82745165,44.82578307,44.82539556,44.82542779,44.83464953,44.86530223]}]],[[{"lng":[11.00881774,11.05731212,11.06376363,11.03556343,11.00231986,10.96166634,10.95637511,10.95353495,10.94842921,10.94554919,10.95586263,10.96409593,10.95059492,11.00881774],"lat":[44.95473472,44.95010827,44.93580661,44.90360617,44.90883094,44.87953759,44.88249862,44.88397379,44.88633322,44.88797054,44.8958665,44.90830146,44.93332884,44.95473472]}]],[[{"lng":[10.82662429,10.83402022,10.85016753,10.85907942,10.86040635,10.86125043,10.85183554,10.85028285,10.85013363,10.8552,10.80885936,10.80691303,10.8056016,10.81476202,10.75614851,10.71605236,10.71239634,10.7078837,10.70202588,10.70022497,10.70053911,10.70607695,10.70423723,10.72557187,10.72557046,10.72568867,10.72811701,10.72886719,10.72946136,10.73211692,10.75138944,10.78583384,10.8033822,10.79740136,10.82662429],"lat":[44.24856972,44.24278555,44.23572787,44.23281922,44.23241049,44.2321901,44.22862453,44.22782142,44.22745471,44.20738595,44.1548495,44.14785231,44.14110838,44.11618494,44.15331791,44.15571002,44.1572129,44.15973531,44.16635898,44.17044618,44.1731064,44.18252202,44.19118337,44.19847956,44.20571799,44.20633742,44.21447541,44.21615662,44.21635468,44.21641348,44.21665071,44.21811595,44.23401848,44.24486228,44.24856972]}]],[[{"lng":[11.2453826,11.34112864,11.36850196,11.36641169,11.35252733,11.34749072,11.31160934,11.30156737,11.29334728,11.17819336,11.21240011,11.22186998,11.21424548,11.19349132,11.18331892,11.19141717,11.21959538,11.22397972,11.22511107,11.23474353,11.2453826],"lat":[44.89825052,44.87259427,44.84079106,44.83730599,44.83611629,44.83013922,44.8274944,44.8104213,44.80280764,44.79618608,44.80704643,44.81297492,44.82628847,44.82044639,44.84108514,44.86413274,44.88467101,44.88639508,44.88716521,44.90597572,44.89825052]}]],[[{"lng":[10.82761776,10.83460426,10.86581532,10.848655,10.82534516,10.82887737,10.8248391,10.81939888,10.791348,10.81437412,10.79232472,10.79472953,10.80230759,10.80356963,10.81505168,10.82761776],"lat":[44.55755071,44.5506643,44.54927626,44.51312673,44.5058451,44.4953231,44.49272746,44.49248117,44.49395247,44.51384452,44.5181612,44.52640944,44.54138271,44.55169891,44.56853073,44.55755071]}]],[[{"lng":[10.63231949,10.6794599,10.69723259,10.70008819,10.70423723,10.70607695,10.70053911,10.70022497,10.71239634,10.6412097,10.62405584,10.60984676,10.61811453,10.61831265,10.61336051,10.61022348,10.60684516,10.60572496,10.60353223,10.60201362,10.60167843,10.60185202,10.60533074,10.60679619,10.62361132,10.63078528,10.63130292,10.63272258,10.62722383,10.63231949],"lat":[44.20228129,44.20168783,44.195195,44.19354099,44.19118337,44.18252202,44.1731064,44.17044618,44.1572129,44.15983508,44.12036609,44.11861057,44.12817212,44.13689721,44.13995242,44.13952852,44.14126869,44.14191466,44.14358403,44.14614421,44.14715727,44.14802813,44.15965629,44.16987216,44.18004188,44.18568362,44.18630645,44.19104875,44.20220996,44.20228129]}]],[[{"lng":[10.79945971,10.80568511,10.80799961,10.80900646,10.82671887,10.8306469,10.85895975,10.88135954,10.89399972,10.8795087,10.89615101,10.90719035,10.92073099,10.9207568,10.91248168,10.90630685,10.90258677,10.89869412,10.83765838,10.83693504,10.83653105,10.83460426,10.8343417,10.82823701,10.82761776,10.82540209,10.82307056,10.79463908,10.79372799,10.79446981,10.78676871,10.7844252,10.78780418,10.79871853,10.79652228,10.79945971],"lat":[44.62633995,44.61817102,44.61763926,44.62002695,44.61813351,44.59939059,44.60097666,44.59468165,44.59354561,44.57371394,44.55980938,44.5562661,44.55447389,44.55372165,44.54362925,44.53879915,44.53817701,44.54308516,44.55689891,44.55669449,44.55468443,44.5506643,44.55072252,44.55674407,44.55755071,44.56073253,44.56386662,44.58330388,44.58845347,44.60395244,44.60649612,44.62481595,44.62401589,44.623975,44.62837575,44.62633995]}]],[[{"lng":[10.55196158,10.5592968,10.58774789,10.60177701,10.60430235,10.59231026,10.59233494,10.60004602,10.59699145,10.59396384,10.5895734,10.58862015,10.58983937,10.58336842,10.58525841,10.55854469,10.50782402,10.48521494,10.49290258,10.47012966,10.48073235,10.48475282,10.48689325,10.4960537,10.50047554,10.50681911,10.50986266,10.51581597,10.51600155,10.51510437,10.51122822,10.51048671,10.52534628,10.52689428,10.52689965,10.52594651,10.52556501,10.52631627,10.52644166,10.54110762,10.55196158],"lat":[44.32614749,44.32262649,44.32308974,44.31832938,44.31574612,44.30538061,44.30259263,44.2968735,44.29122574,44.29189825,44.28572944,44.2838431,44.26910637,44.24649087,44.2417831,44.21945427,44.18705805,44.20449608,44.21700007,44.2260554,44.23163534,44.23566149,44.26346179,44.26503471,44.26697536,44.2710512,44.27345079,44.28178965,44.28218331,44.28579639,44.29396835,44.29975802,44.32800055,44.33575831,44.33690161,44.33932709,44.34248319,44.34387121,44.34532537,44.33264148,44.32614749]}],[{"lng":[10.4808027,10.48064449,10.4818016,10.48168664,10.4808027],"lat":[44.18949128,44.19016856,44.19040564,44.18981293,44.18949128]}]],[[{"lng":[10.96078736,10.98532734,10.99022956,11.00438191,11.00285636,10.99466773,10.99349162,10.98884541,10.96836734,10.96676077,10.9760037,10.9616117,10.95008599,10.94274466,10.93632012,10.92373335,10.91610297,10.91297819,10.91398626,10.91407126,10.91469343,10.91560696,10.91723872,10.92069492,10.92337236,10.92314392,10.92412463,10.96078736],"lat":[44.44381066,44.43985394,44.44050566,44.40822855,44.40632809,44.40261067,44.39971455,44.39339245,44.37825585,44.37634214,44.35960468,44.35557769,44.35981104,44.3601069,44.35833783,44.35168728,44.36979106,44.38201514,44.38521223,44.38530629,44.38572999,44.38636741,44.38788435,44.39209682,44.39734663,44.41385678,44.41854714,44.44381066]}]],[[{"lng":[10.70572805,10.71065293,10.72677614,10.7398214,10.76199581,10.78177908,10.77222083,10.76245033,10.75924193,10.66645384,10.66268881,10.65707425,10.64428253,10.63954409,10.63519265,10.67514412,10.6754733,10.67560047,10.67216707,10.66867671,10.66771544,10.66712694,10.6669104,10.66728204,10.66787369,10.67357503,10.6751625,10.67567052,10.67657637,10.69742421,10.70572805],"lat":[44.36537611,44.33316248,44.32736506,44.31724593,44.3270251,44.31062108,44.30548515,44.30534828,44.30496562,44.24403929,44.25279101,44.25669886,44.26112414,44.27363428,44.27486706,44.30718454,44.30773788,44.31573055,44.32111055,44.32361938,44.32465975,44.32557763,44.32634602,44.32751097,44.32891577,44.33939266,44.34183615,44.34249491,44.34349444,44.36348811,44.36537611]}]],[[{"lng":[10.8709812,10.87545108,10.89869412,10.90630685,10.90097525,10.90373084,10.91248714,10.91344827,10.91058116,10.90092844,10.89647152,10.87888665,10.87930766,10.8695123,10.8509068,10.85176322,10.8469482,10.82702736,10.8242763,10.8248391,10.82887737,10.82397443,10.82534516,10.83704261,10.848655,10.8709812],"lat":[44.54624284,44.54749344,44.54308516,44.53879915,44.52893128,44.52314624,44.51854366,44.51523263,44.51220178,44.50977017,44.50734158,44.48818228,44.46335522,44.45891568,44.47779118,44.47942478,44.49016182,44.49176519,44.49255189,44.49272746,44.4953231,44.50263509,44.5058451,44.51389032,44.51312673,44.54624284]}]],[[{"lng":[10.94962301,10.97200196,10.98820093,10.97972362,10.95101879,10.93748131,10.92412463,10.91469343,10.89724196,10.88868508,10.88503474,10.88473969,10.8809307,10.88138135,10.88422739,10.88435608,10.87853529,10.88671643,10.88633204,10.88065598,10.87698088,10.87229405,10.86646343,10.86740822,10.87930766,10.89568413,10.91883401,10.91955832,10.92129922,10.92428017,10.92698886,10.94962301],"lat":[44.47712571,44.46659082,44.45771938,44.45391112,44.45001333,44.43937244,44.41854714,44.38572999,44.38906574,44.38608476,44.38537876,44.38557269,44.39124419,44.3923531,44.39420574,44.40168487,44.40768204,44.41568107,44.41617808,44.41852237,44.43159168,44.43312707,44.44055069,44.4575547,44.46335522,44.45482909,44.46140139,44.46240652,44.46604129,44.47259,44.47657748,44.47712571]}]],[[{"lng":[11.08880775,11.08548303,11.08549632,11.08597595,11.08830498,11.0892539,11.10289289,11.11007247,11.11051856,11.11441836,11.11446592,11.10261191,11.10594031,11.0866581,11.07041882,11.04775117,11.03756712,11.04640834,11.04232045,11.04357261,11.05537956,11.06525362,11.0731766,11.08880775],"lat":[44.87447337,44.8623454,44.86201207,44.86092308,44.85847695,44.8581175,44.8545543,44.85470088,44.85444058,44.84930476,44.8485297,44.82744975,44.82647019,44.80679011,44.80943084,44.81981405,44.82291296,44.84110555,44.8435598,44.84891162,44.85821033,44.86432454,44.86502712,44.87447337]}]],[[{"lng":[11.07979425,11.15128666,11.24620567,11.26043375,11.25651205,11.2548628,11.24328363,11.23662776,11.22397972,11.19109596,11.17849749,11.17556237,11.17479447,11.15586539,11.14714801,11.14097918,11.13824835,11.13230036,11.1195375,11.10639104,11.09796923,11.08880775,11.08353629,11.0731766,11.05537956,11.04232045,11.03133905,11.0274492,11.02313607,11.02224898,11.01278236,10.99946634,11.00123328,11.00779626,11.01427885,11.01639493,11.01540331,11.02425518,11.03059812,11.03703482,11.06376363,11.05957064,11.07979425],"lat":[44.96032353,44.93333821,44.95143857,44.93310137,44.92620246,44.92453369,44.91678161,44.9094856,44.88639508,44.88170184,44.87895431,44.87632768,44.87610827,44.87328963,44.87475022,44.87771073,44.87815799,44.87718001,44.87019809,44.87241286,44.87543961,44.87447337,44.87431764,44.86502712,44.85821033,44.8435598,44.84714052,44.85848925,44.86179751,44.86212828,44.85993706,44.86530223,44.8782972,44.87845202,44.88067836,44.88615923,44.8900116,44.89619238,44.89759206,44.90163631,44.93580661,44.94924823,44.96032353]}]],[[{"lng":[10.89138083,10.89669879,10.90072281,10.90203469,10.89994172,10.90410272,10.92172875,10.92805502,10.9465104,10.95548864,10.96592661,10.9963905,11.00081113,11.00559645,11.01062587,11.01045832,11.0102132,11.00789843,11.00606188,11.00308364,11.00266862,10.9963065,11.008747,10.99037215,10.98358608,10.98396851,10.98900304,10.98968252,10.99027589,10.99606247,10.99866271,10.99970006,11.00746127,11.01095034,11.00365675,10.99198463,10.98902519,10.98183464,10.97350117,10.97143005,10.96674116,10.95794585,10.93462746,10.9270841,10.89691072,10.89671458,10.88135954,10.85895975,10.8306469,10.82671887,10.80799961,10.80284795,10.79945971,10.79652228,10.78780418,10.78196925,10.78322701,10.78905422,10.79316109,10.79445037,10.79491268,10.79691008,10.80462994,10.81528894,10.82762292,10.83596985,10.85056304,10.85262925,10.86478956,10.87271904,10.87564498,10.87621769,10.87818528,10.88428172,10.88502423,10.8888388,10.89138083],"lat":[44.72604532,44.72587536,44.72472916,44.72355561,44.72004201,44.71835227,44.71759333,44.70892101,44.70477736,44.71274397,44.71941991,44.70064144,44.70055409,44.70427225,44.70153713,44.7012141,44.70095406,44.69932795,44.69882558,44.69864987,44.69842085,44.6878272,44.68446137,44.66593266,44.65127319,44.62797745,44.62227688,44.62222075,44.62248836,44.62598435,44.61773751,44.61674709,44.61163705,44.60619672,44.59785904,44.59513217,44.57100775,44.56766686,44.57923532,44.58018565,44.57746146,44.57993076,44.5634802,44.56611046,44.58828916,44.59384881,44.59468165,44.60097666,44.59939059,44.61813351,44.61763926,44.62668261,44.62633995,44.62837575,44.62401589,44.62776737,44.63094279,44.63434005,44.63873631,44.64251953,44.65012376,44.65273004,44.65524146,44.65653085,44.6598315,44.6601837,44.65821064,44.67150057,44.68007048,44.69819319,44.69745296,44.69673139,44.69669004,44.70871115,44.71370165,44.72243067,44.72604532]}],[{"lng":[10.89244935,10.89554251,10.8912333,10.89244935],"lat":[44.73501057,44.72874827,44.72889054,44.73501057]}],[{"lng":[10.89504281,10.89074164,10.8942911,10.89504281],"lat":[44.74229276,44.73727073,44.7420524,44.74229276]}]],[[{"lng":[10.77987995,10.79217731,10.77686403,10.7751325,10.75597751,10.7511774,10.74560939,10.73273078,10.70541257,10.7131841,10.71313963,10.70287831,10.68905427,10.68195857,10.6967596,10.71213822,10.7218032,10.72916692,10.72783492,10.72817315,10.74315267,10.77987995],"lat":[44.2979837,44.29716116,44.27612667,44.27480317,44.26569129,44.25846364,44.25656825,44.24288187,44.19814767,44.21493447,44.21858135,44.22392955,44.23479435,44.24725111,44.25541389,44.27210984,44.26925465,44.27682286,44.28054321,44.28139338,44.29169005,44.2979837]}]],[[{"lng":[10.64667838,10.64965924,10.64116221,10.62292355,10.61693179,10.61376969,10.61309487,10.61246062,10.60329053,10.60004602,10.59233494,10.60430235,10.60177701,10.5592968,10.54110762,10.53308278,10.52644166,10.5261579,10.5512232,10.58866172,10.59478806,10.59579633,10.59692504,10.59920753,10.60171659,10.60229662,10.60372729,10.61274563,10.61424353,10.61881798,10.62010572,10.64667838],"lat":[44.36061615,44.35557659,44.33763039,44.31621223,44.30670018,44.30202741,44.30119067,44.30046139,44.29626012,44.2968735,44.30259263,44.31574612,44.31832938,44.32262649,44.33264148,44.340744,44.34532537,44.34550922,44.35982806,44.36128496,44.36304965,44.36338217,44.36381653,44.365144,44.36830482,44.36886387,44.36978007,44.3736863,44.37475447,44.3785429,44.38244983,44.36061615]}]],[[{"lng":[10.9895672,11.00390732,11.00358496,10.96670558,10.94974477,10.97372082,10.96730092,10.96586637,10.95705504,10.94843739,10.94607086,10.94325914,10.94265761,10.9402918,10.90724322,10.8937634,10.8932221,10.88970292,10.88167437,10.8742154,10.86125043,10.86985384,10.86588853,10.85952462,10.85731651,10.85594016,10.86457523,10.86667796,10.86625122,10.86408535,10.86319284,10.863641,10.88152414,10.89431864,10.91788315,10.92730116,10.9435854,10.97942281,10.9895672],"lat":[44.32493358,44.32318302,44.30663342,44.30224709,44.29294993,44.2769811,44.27226185,44.26789766,44.22602403,44.22481926,44.22495358,44.22582693,44.22621415,44.22561067,44.20543403,44.21131745,44.21590894,44.22446601,44.22514776,44.22681894,44.2321901,44.23695572,44.23867712,44.24019439,44.24046439,44.2409009,44.24982617,44.25531961,44.26004412,44.26167299,44.26395629,44.26703698,44.28287687,44.29960869,44.31337677,44.32203799,44.31442638,44.32421593,44.32493358]}]],[[{"lng":[11.08346707,11.08891277,11.09031391,11.09325202,11.10166065,11.11699352,11.11483901,11.10536168,11.09160773,11.07809108,11.05356651,11.05011392,11.05005481,11.04926044,10.99056127,10.99037215,10.99985222,11.01667698,11.03172397,11.03844689,11.04601639,11.08346707],"lat":[44.72635548,44.72433848,44.72329558,44.71843267,44.71441958,44.71043589,44.70580262,44.69051642,44.66935731,44.64702985,44.6549111,44.64944061,44.64434643,44.64244315,44.66429841,44.66593266,44.67408883,44.69263967,44.71442841,44.7193048,44.71809813,44.72635548]}]],[[{"lng":[10.94668744,10.96409593,10.94554919,10.94842921,10.95637511,10.96166634,10.95914501,10.96565811,10.96453233,10.95944931,10.95844418,10.96096197,10.96964184,10.97124888,10.95537084,10.95506747,10.95708537,10.96689169,10.95144711,10.91691937,10.93754689,10.93331007,10.92907728,10.88057091,10.87831039,10.87917682,10.87688775,10.8771456,10.88788567,10.94668744],"lat":[44.92265955,44.90830146,44.88797054,44.88633322,44.88249862,44.87953759,44.87128102,44.86373954,44.86297859,44.86124753,44.85624164,44.85510015,44.8565711,44.85438015,44.83763304,44.83464953,44.83159027,44.82676482,44.79860402,44.83389627,44.88969203,44.89040003,44.88179235,44.86766703,44.86774816,44.88965934,44.89014901,44.90188517,44.91427123,44.92265955]}]],[[{"lng":[10.66603915,10.66895412,10.6688593,10.69132752,10.69742421,10.69466762,10.69253413,10.68353505,10.67567052,10.66728204,10.66771544,10.67560047,10.6754733,10.58504409,10.58983937,10.5895734,10.59699145,10.60004602,10.61309487,10.62292355,10.64116221,10.64965924,10.62010572,10.62232073,10.66603915],"lat":[44.40321542,44.39584464,44.3898862,44.36640055,44.36348811,44.35958096,44.3534727,44.34554822,44.34249491,44.32751097,44.32465975,44.31573055,44.30773788,44.24359568,44.26910637,44.28572944,44.29122574,44.2968735,44.30119067,44.31621223,44.33763039,44.35557659,44.38244983,44.39797831,44.40321542]}]],[[{"lng":[10.88138135,10.88503474,10.91469343,10.91610297,10.92246142,10.92373335,10.92635228,10.93109384,10.88622411,10.86520773,10.85518536,10.84810731,10.83851997,10.82193961,10.81646541,10.81265653,10.79217731,10.77674946,10.76001884,10.75924193,10.77222083,10.77762379,10.78153063,10.78177908,10.78188451,10.76199581,10.76780068,10.76798645,10.763153,10.7675098,10.79124366,10.79229289,10.79304534,10.80949563,10.8326603,10.8520843,10.87853529,10.88138135],"lat":[44.3923531,44.38537876,44.38572999,44.36979106,44.35550452,44.35168728,44.34725126,44.33003439,44.29345871,44.26898449,44.26661747,44.26750549,44.27103634,44.27231938,44.27340594,44.27586123,44.29716116,44.2994891,44.29656299,44.30496562,44.30548515,44.30754385,44.31028286,44.31062108,44.31120463,44.3270251,44.33609124,44.34514068,44.36238822,44.3810781,44.38314799,44.38379773,44.38950264,44.39253363,44.38912127,44.39285007,44.40768204,44.3923531]}]],[[{"lng":[10.58525841,10.62729793,10.62722383,10.63050274,10.63272258,10.63078528,10.61125551,10.60679619,10.60533074,10.60167843,10.60572496,10.61022348,10.61336051,10.61831265,10.61811453,10.60509357,10.52512166,10.51001441,10.51153085,10.51681177,10.53148955,10.55854469,10.57399542,10.58525841],"lat":[44.2417831,44.2162626,44.20220996,44.19313317,44.19104875,44.18568362,44.17392374,44.16987216,44.15965629,44.14715727,44.14191466,44.13952852,44.13995242,44.13689721,44.12817212,44.11468908,44.15623594,44.18691385,44.18889969,44.19234087,44.20103098,44.21945427,44.23645608,44.2417831]}]],[[{"lng":[10.7265897,10.72821244,10.73417113,10.74712001,10.75053298,10.76419785,10.763153,10.76357402,10.76798645,10.76829626,10.76780068,10.76640337,10.76199581,10.7398214,10.71065293,10.70572805,10.69742421,10.69252709,10.69132752,10.69067108,10.6847786,10.6688593,10.66827553,10.66895412,10.67244923,10.68404903,10.68452507,10.69986802,10.71982635,10.72481604,10.7265897],"lat":[44.42553386,44.42411389,44.41294124,44.39963592,44.38660172,44.37655142,44.36238822,44.35184848,44.34514068,44.34170132,44.33609124,44.33180053,44.3270251,44.31724593,44.33316248,44.36537611,44.36348811,44.36534747,44.36640055,44.36711249,44.37643642,44.3898862,44.3914342,44.39584464,44.39511828,44.39682037,44.39721848,44.4196059,44.42564493,44.42638891,44.42553386]}]],[[{"lng":[10.76513637,10.76641233,10.76720756,10.77312514,10.77563159,10.77583244,10.77634061,10.78669379,10.79032201,10.79370155,10.78563376,10.75928497,10.75382875,10.75428198,10.75644095,10.76023375,10.75995957,10.73898103,10.72821244,10.72481604,10.68404903,10.6629168,10.62232073,10.65342969,10.66701689,10.66819582,10.67058582,10.67359556,10.68432944,10.68594366,10.68720679,10.6882288,10.69301706,10.70263765,10.72286921,10.72635546,10.72110263,10.72645076,10.74290451,10.76513637],"lat":[44.50090247,44.50164692,44.50092359,44.4922639,44.49021704,44.49015343,44.49019391,44.49111915,44.49230347,44.48410125,44.45975861,44.45707274,44.43219483,44.42765951,44.42599686,44.41518023,44.41483335,44.40873585,44.42411389,44.42638891,44.39682037,44.40711335,44.39797831,44.43330565,44.46699858,44.46778259,44.46917905,44.47023331,44.47234414,44.47295049,44.47358903,44.47415009,44.47755419,44.48803421,44.49915051,44.49983755,44.49554951,44.48966171,44.4867701,44.50090247]}]],[[{"lng":[11.12747999,11.11699352,11.08620939,11.08346707,11.06604331,11.05358932,11.04907234,11.04525731,11.04216463,11.04185234,11.04181044,11.04210981,11.04448256,11.04945916,11.04997628,11.0511058,11.09665095,11.09879017,11.09931589,11.10045048,11.10138014,11.10435537,11.10498714,11.1060222,11.12989021,11.12747999],"lat":[44.77139638,44.71043589,44.72571124,44.72635548,44.72536232,44.72125697,44.72252306,44.72698793,44.7295099,44.7299656,44.7305695,44.73118079,44.73508131,44.74226586,44.74295875,44.74418076,44.77184075,44.77193647,44.77181876,44.77139281,44.77124067,44.77104182,44.77103917,44.77135316,44.7829192,44.77139638]}]],[[{"lng":[10.66645384,10.68195857,10.71313963,10.70008819,10.6794599,10.67575443,10.64361618,10.64268999,10.63231949,10.62722383,10.62729793,10.61329425,10.58504409,10.63519265,10.64428253,10.66268881,10.66645384],"lat":[44.24403929,44.24725111,44.21858135,44.19354099,44.20168783,44.20165222,44.19941837,44.19941368,44.20228129,44.20220996,44.2162626,44.23016381,44.24359568,44.27486706,44.26112414,44.25279101,44.24403929]}]],[[{"lng":[11.00471702,11.05494818,11.04848152,11.05407522,11.055788,11.0561321,11.05614262,11.05498648,11.04255633,11.03088776,11.03012041,11.03019989,11.03074314,11.03343916,11.03382044,11.03398898,11.03248992,10.9997727,10.99785117,10.98902519,10.98879649,10.99198463,11.01095034,10.99903747,10.99866271,10.99826664,10.99805441,10.99602152,10.99593302,10.99606247,10.99613202,11.00471702],"lat":[44.63180902,44.56786413,44.5486032,44.54030437,44.53747918,44.53652773,44.53406923,44.52628256,44.52813412,44.52755849,44.53080403,44.53200444,44.5342364,44.54115635,44.54270699,44.54427041,44.54819518,44.5682543,44.56914318,44.57100775,44.57131782,44.59513217,44.60619672,44.61727183,44.61773751,44.61829358,44.61872042,44.62406287,44.62462186,44.62598435,44.63062182,44.63180902]}]],[[{"lng":[11.21959538,11.21798862,11.19141717,11.18331892,11.18113293,11.19196438,11.20185975,11.1995779,11.16043932,11.14249154,11.14173268,11.1344384,11.12786648,11.10738764,11.10646597,11.10261191,11.11051856,11.10289289,11.0892539,11.08549632,11.08880775,11.1195375,11.13824835,11.14714801,11.15586539,11.17479447,11.17849749,11.19109596,11.22397972,11.21959538],"lat":[44.88467101,44.88108343,44.86413274,44.84108514,44.83072953,44.82218611,44.81041898,44.80994083,44.80380168,44.80669656,44.80669281,44.80469142,44.81638632,44.82592135,44.82631645,44.82744975,44.85444058,44.8545543,44.8581175,44.86201207,44.87447337,44.87019809,44.87815799,44.87475022,44.87328963,44.87610827,44.87895431,44.88170184,44.88639508,44.88467101]}]],[[{"lng":[11.03057736,11.03556343,11.03703482,11.01427885,11.00123328,10.97684407,10.95844418,10.96565811,10.95914501,10.96175887,10.96166634,10.96149785,10.96256107,10.98549698,11.00231986,11.0126731,11.03057736],"lat":[44.90453297,44.90360617,44.90163631,44.88067836,44.8782972,44.85812099,44.85624164,44.86373954,44.87128102,44.87480995,44.87953759,44.88200703,44.88534651,44.90211223,44.90883094,44.90948156,44.90453297]}]],[[{"lng":[11.04775117,11.0866581,11.08154254,11.07606457,11.07385328,11.06937539,11.06150556,11.04663211,11.03402648,11.0330064,11.01959569,10.98267567,10.98320624,10.99620069,10.9917457,10.99403817,10.99364004,10.99451704,10.99481607,10.99500306,11.00290258,11.00799038,11.00717701,11.00655605,11.00437059,11.01584958,11.04775117],"lat":[44.81981405,44.80679011,44.79959178,44.78969917,44.78690369,44.78365865,44.78093837,44.76643793,44.75728296,44.75771524,44.76723452,44.75037246,44.75219518,44.76339043,44.77053859,44.77230923,44.77857325,44.785848,44.78707494,44.78754878,44.806558,44.81005541,44.81340104,44.81409388,44.81570331,44.81024997,44.81981405]}]],[[{"lng":[10.80871726,10.80356963,10.80230759,10.79232472,10.81404331,10.81437412,10.81293894,10.80149432,10.791348,10.79032201,10.77583244,10.77312514,10.76641233,10.76140766,10.74290451,10.72110263,10.7220988,10.72635546,10.73003205,10.74137949,10.75160006,10.75970797,10.76316791,10.76496176,10.76582288,10.76672862,10.77692899,10.78530907,10.78676871,10.79446981,10.79372799,10.79463908,10.79699691,10.81505168,10.80871726],"lat":[44.5578855,44.55169891,44.54138271,44.5181612,44.51496801,44.51384452,44.51123238,44.49908489,44.49395247,44.49230347,44.49015343,44.4922639,44.50164692,44.50206961,44.4867701,44.49554951,44.49822206,44.49983755,44.50162595,44.51058655,44.52339388,44.53441433,44.53854263,44.54042344,44.54142741,44.54268276,44.58331918,44.59982946,44.60649612,44.60395244,44.58845347,44.58330388,44.57849427,44.56853073,44.5578855]}]],[[{"lng":[11.04255633,11.04260197,11.05797346,11.0590854,11.05614838,11.0653635,11.06266232,11.05513641,11.05072652,11.05120495,11.05056075,11.04753323,11.0448445,11.02691999,11.01347658,11.00950325,10.9908497,10.99022956,10.96078736,10.94254992,10.95101879,10.95388141,10.97972362,10.98610418,10.98820093,11.00035442,11.00689823,11.02732682,11.03706905,11.03855819,11.0397092,11.03974255,11.03941808,11.03899996,11.03560093,11.03195446,11.03105654,11.03075104,11.04255633],"lat":[44.52813412,44.52608014,44.52526843,44.52222805,44.51309842,44.50007646,44.49441769,44.48818016,44.48038841,44.47820852,44.47070068,44.46692836,44.46575895,44.46019539,44.44722643,44.44528886,44.4413754,44.44050566,44.44381066,44.44303676,44.45001333,44.45097742,44.45391112,44.45625756,44.45771938,44.46980607,44.47402146,44.47761716,44.49668673,44.50045921,44.50746964,44.50984571,44.51136393,44.51236167,44.51876011,44.52457767,44.52625912,44.52724583,44.52813412]}]],[[{"lng":[10.80473468,10.81939888,10.8242763,10.8469482,10.86958835,10.8695123,10.86740822,10.86707693,10.86579522,10.86646343,10.88065598,10.88671643,10.8520843,10.8326603,10.82144856,10.80949563,10.79549858,10.79304534,10.79225339,10.79238803,10.79229289,10.79187766,10.79124366,10.77865438,10.7675098,10.76419785,10.76030399,10.75759938,10.75458265,10.75292106,10.75053298,10.74712001,10.73898103,10.76023375,10.75928497,10.78563376,10.79370155,10.78846331,10.78838806,10.79032201,10.791348,10.80473468],"lat":[44.49337109,44.49248117,44.49255189,44.49016182,44.46284858,44.45891568,44.4575547,44.45701998,44.45229653,44.44055069,44.41852237,44.41568107,44.39285007,44.38912127,44.39263167,44.39253363,44.39007627,44.38950264,44.38823668,44.38485856,44.38379773,44.3833811,44.38314799,44.38148122,44.3810781,44.37655142,44.38224723,44.38371132,44.38442392,44.38511565,44.38660172,44.39963592,44.40873585,44.41518023,44.45707274,44.45975861,44.48410125,44.48706425,44.4897605,44.49230347,44.49395247,44.49337109]}]],[[{"lng":[10.82193961,10.86520773,10.86390654,10.863641,10.86338631,10.86319284,10.86625122,10.86667796,10.85594016,10.85731651,10.86588853,10.86985384,10.86944097,10.86125043,10.86040635,10.8254464,10.81653392,10.79740136,10.79563937,10.8033822,10.79332075,10.78583384,10.75138944,10.72946136,10.72568867,10.72609467,10.72557187,10.70008819,10.70811631,10.70994757,10.72304595,10.73281009,10.73273078,10.7511774,10.75597751,10.77686403,10.79217731,10.82193961],"lat":[44.27231938,44.26898449,44.2675098,44.26703698,44.26650996,44.26395629,44.26004412,44.25531961,44.2409009,44.24046439,44.23867712,44.23695572,44.23499085,44.2321901,44.23241049,44.24942304,44.25000631,44.24486228,44.24087468,44.23401848,44.22638938,44.21811595,44.21665071,44.21635468,44.20633742,44.19966907,44.19847956,44.19354099,44.20028149,44.20215373,44.22387011,44.23193309,44.24288187,44.25846364,44.26569129,44.27612667,44.29716116,44.27231938]}]],[[{"lng":[10.95395871,10.9917457,10.99582537,10.99620069,10.99588572,10.98975297,10.98320624,10.98256911,10.98267567,10.98390162,10.98517121,10.98626312,10.99019971,10.99194819,10.99485766,10.99504476,10.9950296,10.9947512,10.98628014,10.98383083,10.97043193,10.96592661,10.95548864,10.94753806,10.9465104,10.94562071,10.92939456,10.92805502,10.92172875,10.90410272,10.89994172,10.90072281,10.89138083,10.89554251,10.89878168,10.91450638,10.91670302,10.92979201,10.93712829,10.9536634,10.94982736,10.95395871],"lat":[44.77133911,44.77053859,44.76492042,44.76339043,44.76265981,44.75595221,44.75219518,44.75058137,44.75037246,44.74960398,44.74905078,44.74847365,44.74617254,44.74485474,44.74095999,44.74052461,44.74008378,44.73970153,44.73719358,44.73057453,44.7219799,44.71941991,44.71274397,44.7045798,44.70477736,44.70497258,44.7085833,44.70892101,44.71759333,44.71835227,44.72004201,44.72472916,44.72604532,44.72874827,44.75972845,44.78320907,44.78458217,44.79133101,44.78979623,44.77970268,44.77296826,44.77133911]}]],[[{"lng":[10.98183464,11.03248992,11.03382044,11.03074314,11.03012041,11.03088776,11.03075104,11.03105654,11.03560093,11.03941808,11.03912206,11.02138412,11.00187163,10.98295008,10.97360818,10.97764574,10.99024469,10.95662393,10.96200268,10.96249113,10.9660027,10.96740414,10.97267349,10.97366498,10.97293071,10.97128395,10.97143005,10.98183464],"lat":[44.56766686,44.54819518,44.54270699,44.5342364,44.53080403,44.52755849,44.52724583,44.52625912,44.51876011,44.51136393,44.50474787,44.50571148,44.51036751,44.50355871,44.5066554,44.52227693,44.53073788,44.54231384,44.55351093,44.55380861,44.55452242,44.55501142,44.55967379,44.56513914,44.57244832,44.57920159,44.58018565,44.56766686]}]],[[{"lng":[10.99505354,10.99687611,11.00187163,11.00315104,11.03912206,11.02732682,11.00689823,10.98820093,10.94962301,10.9640444,10.98295008,10.9846635,10.99505354],"lat":[44.50889341,44.50995085,44.51036751,44.51025504,44.50474787,44.47761716,44.47402146,44.45771938,44.47712571,44.48425991,44.50355871,44.50926355,44.50889341]}]],[[{"lng":[11.01328668,11.04816659,11.02237352,11.02262512,11.03609238,11.03760421,11.04018709,11.03162219,11.03069161,11.00786631,11.00223055,11.00358496,11.00407825,11.00648592,11.00390732,11.00268673,10.98549879,10.97942281,10.97486587,10.97003435,10.9435854,10.92730116,10.93055105,10.93109384,10.9313217,10.92635228,10.92592371,10.92373335,10.94274466,10.9760037,10.96676077,10.98884541,10.99466773,11.00438191,10.9966656,11.01328668],"lat":[44.43026882,44.41610732,44.3735219,44.35781667,44.34585911,44.34258845,44.33180529,44.32336485,44.31684145,44.29693476,44.30599154,44.30663342,44.30717109,44.31208552,44.32318302,44.32415046,44.32554635,44.32421593,44.32272778,44.31957776,44.31442638,44.32203799,44.32801792,44.33003439,44.33370366,44.34725126,44.34833883,44.35168728,44.3601069,44.35960468,44.37634214,44.39339245,44.40261067,44.40822855,44.42953992,44.43026882]}]],[[{"lng":[11.2337067,11.22359804,11.22628285,11.21606638,11.21610874,11.21771336,11.23627061,11.22979555,11.22212949,11.1958288,11.19348756,11.18037643,11.18212808,11.14531234,11.13160657,11.1275841,11.12922486,11.13265707,11.14088754,11.14363011,11.15000128,11.15084575,11.15245487,11.15227635,11.15619446,11.15753357,11.16572906,11.15233496,11.14949258,11.1834212,11.2337067],"lat":[44.61507735,44.59155737,44.58806724,44.57166839,44.56200965,44.55954333,44.54189265,44.53104868,44.53262055,44.53001406,44.52394975,44.52307731,44.54990327,44.56263511,44.5674275,44.56891306,44.57242205,44.57587344,44.58238118,44.58374309,44.58364578,44.58410701,44.58661985,44.58914983,44.58680417,44.58643847,44.58837071,44.57742165,44.56860668,44.58044858,44.61507735]}]],[[{"lng":[11.29718335,11.30746025,11.32143429,11.33334251,11.34334927,11.34654537,11.34616558,11.34697601,11.35459122,11.35224675,11.34525409,11.35055824,11.35876786,11.35939026,11.35940533,11.34529292,11.35040273,11.3686824,11.36975906,11.38386843,11.38863093,11.37542041,11.36212552,11.36266228,11.33200335,11.31305897,11.31314074,11.31351112,11.31378893,11.31414337,11.31526787,11.31807854,11.31772373,11.31741584,11.31721674,11.31625045,11.31369132,11.29912174,11.30620395,11.30571531,11.30248023,11.29933212,11.2977605,11.29366652,11.29422443,11.2948679,11.29912817,11.29701646,11.28823266,11.29718335],"lat":[44.66806391,44.6736344,44.66995137,44.66862681,44.66909079,44.66845855,44.66797629,44.66498662,44.6609588,44.65622525,44.64817591,44.64233796,44.63954105,44.63840965,44.62966581,44.6247578,44.61417508,44.60947102,44.60114455,44.59244253,44.5878176,44.58040917,44.58426183,44.58937432,44.60362809,44.60659723,44.60699,44.60820513,44.60875426,44.60930973,44.61096756,44.61418062,44.61725988,44.61783666,44.6181389,44.61915653,44.62053358,44.62406261,44.63454983,44.63564111,44.6361706,44.63323852,44.63418559,44.64435111,44.64746651,44.65037202,44.66363163,44.66587577,44.66871688,44.66806391]}]],[[{"lng":[11.59750907,11.61456681,11.63245939,11.59935945,11.59654867,11.56785419,11.51942324,11.49944167,11.52006828,11.53756052,11.54974404,11.5399094,11.54863119,11.57422569,11.59750907],"lat":[44.70702496,44.69012295,44.67294507,44.64277361,44.64626016,44.63476583,44.64088704,44.6490661,44.65875867,44.67771181,44.68975265,44.68887029,44.69751773,44.69244334,44.70702496]}]],[[{"lng":[11.4851662,11.48163566,11.48139283,11.47639502,11.47295221,11.46866985,11.46979721,11.46837233,11.41648124,11.41369265,11.40947927,11.39848679,11.38682406,11.38663544,11.38863093,11.38386843,11.37810699,11.36975906,11.36896039,11.37034745,11.38272597,11.38258992,11.38543996,11.40509728,11.41951377,11.42202732,11.44554666,11.4480263,11.44944335,11.45111804,11.46190853,11.46654101,11.4851662],"lat":[44.68119187,44.67299617,44.6729598,44.67426791,44.67081817,44.65100512,44.64711256,44.64321445,44.59165884,44.58489688,44.58557105,44.58329653,44.58608979,44.58619388,44.5878176,44.59244253,44.59414264,44.60114455,44.61388541,44.61703783,44.62939239,44.63453724,44.63997532,44.64756192,44.67073635,44.67173686,44.66812677,44.67211451,44.67520395,44.67918188,44.6809549,44.68719979,44.68119187]}]],[[{"lng":[11.37059999,11.38861288,11.40600976,11.41488841,11.40746436,11.42537021,11.43370377,11.42606049,11.40024667,11.39140113,11.37475596,11.37410076,11.37414607,11.37434126,11.37460769,11.37315142,11.36226108,11.35874661,11.35823763,11.35523311,11.34623237,11.33735823,11.33330321,11.32480117,11.31340773,11.28226468,11.2810692,11.28377063,11.28373273,11.28654097,11.29028973,11.2966916,11.29662177,11.29460427,11.26821317,11.26169336,11.25694259,11.23570711,11.23750188,11.24123513,11.2389443,11.23700414,11.23290939,11.23207944,11.22964224,11.24505172,11.2690439,11.28161563,11.30903328,11.3111492,11.32052892,11.37059999],"lat":[44.55167469,44.54156185,44.54279272,44.54002153,44.52856635,44.52277846,44.51317043,44.48740257,44.46425587,44.4619405,44.45891204,44.45804004,44.45644508,44.45492353,44.45370601,44.4492502,44.45099358,44.44779214,44.44682643,44.44358901,44.43654922,44.43164007,44.42595277,44.42269156,44.42112042,44.42582416,44.44332548,44.45046905,44.45171271,44.45915733,44.47971604,44.48309897,44.48574487,44.48980906,44.49007593,44.49142626,44.49752046,44.50324301,44.5120146,44.52166575,44.52384486,44.52419685,44.52416956,44.52439059,44.53053572,44.55565047,44.5325079,44.54857878,44.53167001,44.54824572,44.54527818,44.55167469]}]],[[{"lng":[11.65497556,11.66520019,11.66559595,11.66557266,11.66580053,11.66544235,11.63994473,11.63340144,11.63243541,11.63441586,11.6331768,11.6270233,11.62599231,11.62113291,11.61853892,11.61068447,11.60808209,11.60105567,11.57582585,11.57160594,11.57530199,11.55585295,11.58945288,11.62573513,11.65050054,11.65497556],"lat":[44.29600693,44.28577845,44.28304813,44.28281477,44.27997005,44.27871802,44.27374235,44.26362585,44.25994799,44.25830881,44.25552854,44.24777937,44.24712789,44.24543902,44.24484134,44.2439319,44.24314063,44.23864514,44.25751562,44.26388908,44.26905662,44.2777819,44.29334384,44.28603531,44.30157446,44.29600693]}]],[[{"lng":[11.59881324,11.6239115,11.61980723,11.59358518,11.5820933,11.62914376,11.61215479,11.6209383,11.59771879,11.56865552,11.53112889,11.52468235,11.52067424,11.50114218,11.48990028,11.50869766,11.51600876,11.48828116,11.48290212,11.47573204,11.474037,11.47071391,11.47181761,11.47633224,11.46357468,11.47425829,11.45927429,11.46406537,11.47280726,11.5238368,11.53554561,11.55065186,11.55764931,11.57004248,11.57370882,11.57550136,11.58907363,11.59654867,11.59881324],"lat":[44.62699938,44.61283161,44.60923326,44.60023059,44.58357008,44.5775193,44.55686576,44.55113185,44.53776126,44.51019018,44.4907887,44.48765118,44.48392383,44.4936919,44.4919712,44.50350536,44.51300577,44.53893751,44.54246038,44.5442844,44.5418258,44.54292348,44.54459372,44.55162242,44.56265638,44.57996534,44.5851634,44.5955062,44.60271371,44.58877119,44.60720902,44.60614436,44.61119394,44.63253689,44.63529788,44.63620267,44.64299504,44.64626016,44.62699938]}]],[[{"lng":[11.28612719,11.31765189,11.32128383,11.308252,11.30812345,11.30808299,11.30871901,11.31576472,11.31614017,11.31628435,11.31613633,11.31550652,11.31271777,11.3113258,11.30903328,11.28161563,11.2690439,11.25117273,11.24505172,11.23627061,11.21610874,11.22628285,11.23574348,11.24248628,11.25959983,11.26748704,11.28612719],"lat":[44.59916144,44.59195566,44.56819654,44.56443671,44.56405221,44.56366592,44.56255477,44.5566955,44.5560037,44.55456039,44.55432032,44.55336084,44.55171254,44.54984458,44.53167001,44.54857878,44.5325079,44.55570097,44.55565047,44.54189265,44.56200965,44.58806724,44.5757781,44.57616455,44.58073339,44.6065714,44.59916144]}]],[[{"lng":[11.06360246,11.08118532,11.09031774,11.09526029,11.11674684,11.11935305,11.13106444,11.14130952,11.15904283,11.17890978,11.13785311,11.12704352,11.08942891,11.0294936,11.0402054,11.06276166,11.06569048,11.05740114,11.05698164,11.05387371,11.05375418,11.05327771,11.05317574,11.05395898,11.05656326,11.05846413,11.06074025,11.06360246],"lat":[44.21418031,44.21398779,44.21175649,44.20987769,44.20913593,44.2086245,44.20532583,44.19909151,44.1784818,44.16955273,44.14936139,44.10884813,44.08995184,44.09745585,44.1480462,44.149966,44.15546793,44.17763497,44.18465922,44.19401129,44.19446471,44.19727376,44.19805379,44.20078561,44.20360731,44.21200713,44.21403506,44.21418031]}]],[[{"lng":[11.26169336,11.29460427,11.29662177,11.29673962,11.2966916,11.29445959,11.29217319,11.29028973,11.28947892,11.28654097,11.28373273,11.28377063,11.27898491,11.27135005,11.26792525,11.2613938,11.24809088,11.23311687,11.24165308,11.24191269,11.24010274,11.2468144,11.26169336],"lat":[44.49142626,44.48980906,44.48574487,44.48324092,44.48309897,44.48193807,44.48217531,44.47971604,44.47078321,44.45915733,44.45171271,44.45046905,44.45084095,44.44971362,44.44896135,44.44970984,44.45212984,44.45170914,44.46330314,44.46503556,44.47559733,44.49108484,44.49142626]}]],[[{"lng":[11.58460081,11.60562193,11.60627868,11.60037478,11.5975567,11.59014798,11.58860772,11.58409646,11.61943536,11.62439053,11.62806799,11.64028595,11.58945288,11.55598214,11.54884485,11.53774433,11.53640524,11.53232515,11.52094756,11.52308045,11.52076553,11.51542192,11.51460261,11.51017587,11.50442066,11.49476269,11.50981613,11.52577789,11.5330946,11.52003867,11.54121076,11.47596287,11.46702097,11.46012828,11.43876539,11.43085387,11.47405069,11.48072342,11.49771401,11.50193251,11.50825527,11.5225565,11.52059197,11.52721973,11.55623292,11.53619714,11.53976832,11.57332164,11.58460081],"lat":[44.35835481,44.34437572,44.32878665,44.32740828,44.32815102,44.33109502,44.33067026,44.31939475,44.3107136,44.30780275,44.30166214,44.29619292,44.29334384,44.27835856,44.27906451,44.29011624,44.29549251,44.29343369,44.29104827,44.28599562,44.26548499,44.26263531,44.26385804,44.26905217,44.27455323,44.23794549,44.23692683,44.25393896,44.24965526,44.23677083,44.22146653,44.24248932,44.24422802,44.2410412,44.24316732,44.25052485,44.27861344,44.30883044,44.31185116,44.31176216,44.30844207,44.31092286,44.3209497,44.32903761,44.34334921,44.35274873,44.35630473,44.35653115,44.35835481]}]],[[{"lng":[11.03479012,11.04348721,11.04063209,11.03647136,11.03509355,11.03335971,11.03286437,11.03276082,11.0326934,11.03177376,11.03240512,11.03376352,11.08446187,11.05163435,11.03733074,11.03553519,11.00567136,10.98849392,10.98173445,10.96780189,10.96380669,10.97372082,10.94889216,10.94972425,10.94974477,10.94990678,10.96670558,11.00223055,11.00786631,11.03162219,11.03479012],"lat":[44.32034596,44.31947774,44.31428185,44.31144598,44.31098834,44.31086224,44.31060998,44.31044807,44.31033393,44.30855031,44.30141559,44.29977596,44.2737916,44.2495405,44.25274,44.25290874,44.24932232,44.27117283,44.26794409,44.25308495,44.25350147,44.2769811,44.28640591,44.29285125,44.29294993,44.29315874,44.30224709,44.30599154,44.29693476,44.32336485,44.32034596]}]],[[{"lng":[11.4385165,11.43876539,11.46012828,11.47596287,11.54121076,11.55436522,11.55315131,11.5491291,11.56225424,11.56167682,11.55600878,11.53563487,11.51613249,11.447627,11.45129722,11.42106489,11.4385165],"lat":[44.24333808,44.24316732,44.2410412,44.24248932,44.22146653,44.21397013,44.20876479,44.20502768,44.18802215,44.18549325,44.18502761,44.19038947,44.15755237,44.19948529,44.22056833,44.23924426,44.24333808]}]],[[{"lng":[11.02641639,11.05395898,11.05327771,11.05698164,11.05740114,11.06569048,11.06276166,11.05697906,11.04433675,11.0402054,11.04203684,11.03041171,11.0294936,11.03220005,11.03148111,11.00160351,11.01430906,10.97424106,11.02641639],"lat":[44.20774745,44.20078561,44.19727376,44.18465922,44.17763497,44.15546793,44.149966,44.14971132,44.15378488,44.1480462,44.11730463,44.10030308,44.09745585,44.09600742,44.09582326,44.11183591,44.13748732,44.16424464,44.20774745]}]],[[{"lng":[11.72290224,11.67652062,11.65432377,11.64345951,11.63865451,11.62348009,11.60499206,11.60557653,11.61737188,11.62180734,11.64913032,11.6657939,11.6767892,11.71554933,11.73230489,11.72290224],"lat":[44.46941179,44.42045313,44.42610858,44.42405774,44.42170504,44.42772701,44.43191689,44.43822673,44.45319421,44.46178302,44.46086988,44.44940035,44.45103523,44.46949975,44.48670029,44.46941179]}]],[[{"lng":[11.34923538,11.34962838,11.35103127,11.35569138,11.3578313,11.34928883,11.34718854,11.3566875,11.35802045,11.3528393,11.34616558,11.34334927,11.32143429,11.30746025,11.29718335,11.2960016,11.28823266,11.27104507,11.26364959,11.25902863,11.24712336,11.26309945,11.26671476,11.27037004,11.27543385,11.2774338,11.31179407,11.31988067,11.33133009,11.33043704,11.34959423,11.34923538],"lat":[44.70145279,44.69786911,44.69696196,44.69487299,44.6930835,44.68343085,44.67798157,44.67305682,44.67127836,44.66636874,44.66797629,44.66909079,44.66995137,44.6736344,44.66806391,44.67464968,44.66871688,44.66879288,44.67974927,44.6826152,44.68434907,44.68690403,44.69090414,44.69857737,44.70557786,44.70902494,44.69930277,44.7081657,44.71220455,44.71042007,44.70213294,44.70145279]}],[{"lng":[11.29422443,11.29933212,11.29663518,11.2899109,11.28276884,11.29104651,11.29464246,11.29701646,11.29422443],"lat":[44.64746651,44.63323852,44.63034962,44.64122111,44.64375879,44.64652489,44.65089081,44.66587577,44.64746651]}]],[[{"lng":[11.33200335,11.33878686,11.34835022,11.36266228,11.36212552,11.37542041,11.38663544,11.40947927,11.40599334,11.38217302,11.37059999,11.35917363,11.34825813,11.32052892,11.3111492,11.31271777,11.31613633,11.31614017,11.30871901,11.30812345,11.31839436,11.32128383,11.32309571,11.3159354,11.31305897,11.31796635,11.33200335],"lat":[44.60362809,44.59674709,44.59601172,44.58937432,44.58426183,44.58040917,44.58619388,44.58557105,44.57338839,44.54840382,44.55167469,44.5529427,44.55212406,44.54527818,44.54824572,44.55171254,44.55432032,44.5560037,44.56255477,44.56405221,44.56312501,44.56819654,44.59518715,44.59714887,44.60659723,44.60372215,44.60362809]}]],[[{"lng":[11.55797155,11.56479236,11.58553855,11.59243849,11.60995499,11.61158536,11.62193142,11.60557653,11.60499206,11.62348009,11.63843688,11.63865451,11.63918086,11.63197284,11.62276408,11.6070181,11.60639828,11.53976832,11.55700664,11.55623292,11.55609703,11.54106157,11.52721973,11.5225565,11.50825527,11.49771401,11.48072342,11.48361907,11.4837265,11.48276372,11.48434008,11.48712515,11.48884756,11.48941643,11.48542836,11.45527408,11.45582608,11.47671702,11.49054908,11.49997938,11.52168919,11.53373351,11.54622979,11.55797155],"lat":[44.47831825,44.47330325,44.47142067,44.46884867,44.46417667,44.46614377,44.46199026,44.43822673,44.43191689,44.42772701,44.42175395,44.42170504,44.42174689,44.39390291,44.37868213,44.36831959,44.36258949,44.35630473,44.34444484,44.34334921,44.34318121,44.33531995,44.32903761,44.31092286,44.30844207,44.31185116,44.30883044,44.31695095,44.32320888,44.33118766,44.33408093,44.33650277,44.33872604,44.3441991,44.3481622,44.36382055,44.37916215,44.39078783,44.40519492,44.42564805,44.44168798,44.45502691,44.47477777,44.47831825]}]],[[{"lng":[11.46053583,11.47181761,11.474037,11.48290212,11.48648292,11.51600876,11.50869766,11.49614905,11.48990028,11.49245122,11.479169,11.46981329,11.45498286,11.45044951,11.44895752,11.4479381,11.44393759,11.4432659,11.44610155,11.44266775,11.42606049,11.41726499,11.43370377,11.42445666,11.42537021,11.43110096,11.4393399,11.4442845,11.4426956,11.46053583],"lat":[44.54367112,44.54459372,44.5418258,44.54246038,44.52927826,44.51300577,44.50350536,44.50012039,44.4919712,44.4873462,44.47767248,44.47800808,44.48363894,44.48375155,44.48335088,44.48338682,44.48474021,44.48503028,44.4896323,44.49073212,44.48740257,44.49063089,44.51317043,44.52164949,44.52277846,44.52088194,44.52992525,44.53757959,44.54501136,44.54367112]}]],[[{"lng":[11.18439806,11.18235387,11.19214208,11.1948974,11.19441105,11.20458087,11.20514372,11.20307206,11.19653054,11.19384321,11.26368792,11.12764259,11.13785311,11.1493086,11.15473154,11.17227288,11.17890978,11.14132179,11.16108543,11.16253235,11.15983416,11.15893495,11.16317393,11.18439806],"lat":[44.23582927,44.22492929,44.21158741,44.20630267,44.20472919,44.18093322,44.17902159,44.17166339,44.16293893,44.14560979,44.10427195,44.10968456,44.14936139,44.1521691,44.15731902,44.15987212,44.16955273,44.19953861,44.20766729,44.21415632,44.21730495,44.21988835,44.22895901,44.23582927]}]],[[{"lng":[11.26356623,11.29334728,11.29033679,11.27348012,11.24608308,11.241301,11.20668233,11.20617203,11.20680708,11.20857097,11.20963996,11.19136952,11.14830789,11.10536168,11.11699352,11.13196854,11.15208928,11.17596952,11.17819336,11.20784504,11.22434992,11.26356623],"lat":[44.80421583,44.80280764,44.8002655,44.78439417,44.75838253,44.74130364,44.73853704,44.7372202,44.73399414,44.72536348,44.71994482,44.69327117,44.70087402,44.69051642,44.71043589,44.78443778,44.78630437,44.79187146,44.79618608,44.80430345,44.80155694,44.80421583]}]],[[{"lng":[11.66321126,11.67652062,11.65210124,11.66013566,11.66194167,11.64546184,11.62898695,11.61341396,11.61166269,11.60967549,11.60958107,11.60562193,11.59076444,11.60639828,11.62276408,11.63918086,11.65432377,11.66321126],"lat":[44.42407291,44.42045313,44.3936733,44.37766593,44.36179721,44.35606868,44.35349813,44.34832306,44.34552786,44.34430225,44.3442774,44.34437572,44.3572366,44.36258949,44.37868213,44.42174689,44.42610858,44.42407291]}]],[[{"lng":[11.53603113,11.53640524,11.53826709,11.53774433,11.54884485,11.57530199,11.57582585,11.59663328,11.60070747,11.6013149,11.60105567,11.6012854,11.60109797,11.60087659,11.59934959,11.59869439,11.59456339,11.59025989,11.57881047,11.56821249,11.55555846,11.55544123,11.55187156,11.55136205,11.55093132,11.52003867,11.52577789,11.50981613,11.49554879,11.49482729,11.49476269,11.49471106,11.49627455,11.49930058,11.50361614,11.50442066,11.5046201,11.51017587,11.51517308,11.51542192,11.5162653,11.51885783,11.52076553,11.52080534,11.52308045,11.52094756,11.53603113],"lat":[44.29550082,44.29549251,44.29448446,44.29011624,44.27906451,44.26905662,44.25751562,44.24819392,44.24298646,44.23968546,44.23864514,44.23850171,44.23822689,44.23803388,44.23709184,44.23675115,44.23521561,44.23666377,44.232201,44.21949836,44.22320341,44.22317001,44.2198378,44.219273,44.21678333,44.23677083,44.25393896,44.23692683,44.23686036,44.23782592,44.23794549,44.23818689,44.26246536,44.26833312,44.27358901,44.27455323,44.27473117,44.26905217,44.26284055,44.26263531,44.26228925,44.26234255,44.26548499,44.26559214,44.28599562,44.29104827,44.29550082]}]],[[{"lng":[10.98849392,11.00567136,11.05163435,11.04504265,11.03100138,10.99774361,10.99438395,10.98050742,10.95551286,10.94944327,10.94130536,10.93461161,10.90724322,10.9402918,10.94265761,10.94843739,10.95356452,10.95641325,10.9567907,10.95705504,10.95715948,10.98849392],"lat":[44.27117283,44.24932232,44.2495405,44.22911245,44.22376774,44.18531593,44.18472644,44.1788026,44.18528053,44.18274475,44.17549473,44.17498036,44.20543403,44.22561067,44.22621415,44.22481926,44.22515705,44.22576043,44.22588675,44.22602403,44.22610608,44.27117283]}]],[[{"lng":[11.4076275,11.4128987,11.43392016,11.43785503,11.4444406,11.44666877,11.44842216,11.4521916,11.45278097,11.45336535,11.51831257,11.48326618,11.45055993,11.43220294,11.41887366,11.40719613,11.39080803,11.35003698,11.35279011,11.37699763,11.3883459,11.39170203,11.39325193,11.39397146,11.3953084,11.39924104,11.4076275],"lat":[44.76628121,44.76530118,44.75987666,44.75977917,44.76059255,44.76073385,44.76077728,44.76065133,44.76050814,44.76028404,44.72252937,44.72323651,44.73362527,44.73563158,44.72796691,44.74086255,44.73524473,44.75134735,44.75323117,44.77407653,44.77865465,44.77675244,44.77507257,44.77405825,44.77181565,44.76857413,44.76628121]}]],[[{"lng":[11.43882182,11.45927429,11.47425829,11.46636195,11.46357468,11.47633224,11.4426956,11.4442845,11.43110096,11.42537021,11.4144035,11.40746436,11.41488841,11.38861288,11.38102468,11.38217302,11.38767667,11.40303902,11.40599334,11.40947927,11.41648124,11.43882182],"lat":[44.59768624,44.5851634,44.57996534,44.56748844,44.56265638,44.55162242,44.54501136,44.53757959,44.52088194,44.52277846,44.5257252,44.52856635,44.54002153,44.54156185,44.54833462,44.54840382,44.55130464,44.56753996,44.57338839,44.58557105,44.59165884,44.59768624]}]],[[{"lng":[11.17755408,11.19566751,11.19477135,11.18439806,11.16317393,11.15893495,11.16108543,11.15311114,11.14224754,11.14132179,11.14130952,11.11935305,11.11674684,11.09526029,11.09255749,11.09031774,11.08118532,11.06074025,11.05656326,11.05395898,11.05121001,11.02641639,11.02512113,11.03100138,11.04323661,11.04504265,11.04890439,11.06228682,11.06818064,11.09425609,11.09694987,11.10871158,11.1184581,11.16019831,11.16086489,11.16406776,11.17769041,11.17755408],"lat":[44.31095867,44.28171952,44.24705106,44.23582927,44.22895901,44.21988835,44.20766729,44.2056533,44.20009068,44.19953861,44.19909151,44.2086245,44.20913593,44.20987769,44.21051864,44.21175649,44.21398779,44.21403506,44.20360731,44.20078561,44.20048109,44.20774745,44.20841414,44.22376774,44.22911552,44.22911245,44.22809398,44.22781029,44.23084178,44.23477062,44.23606993,44.25782203,44.29481377,44.31284416,44.31289963,44.31189929,44.31356349,44.31095867]}]],[[{"lng":[11.78967724,11.77868843,11.77379612,11.76311264,11.74977277,11.79670582,11.78038132,11.78828281,11.79891166,11.78133445,11.75521552,11.80994406,11.80785534,11.80447297,11.80366933,11.8026701,11.7999721,11.79892461,11.79953351,11.78880562,11.78596702,11.77443125,11.75876228,11.73297199,11.71388159,11.71104292,11.70901494,11.70265859,11.69110619,11.69156114,11.69777196,11.68394277,11.66759797,11.66763231,11.67144658,11.67153902,11.66557266,11.65050054,11.64028595,11.63586196,11.58420679,11.58409646,11.58400241,11.58414837,11.58860772,11.59014798,11.59431357,11.5975567,11.60011892,11.60037478,11.60420272,11.60612015,11.60627868,11.60244005,11.59702447,11.60145361,11.60562193,11.60967549,11.62898695,11.66194167,11.66013566,11.65410685,11.65210124,11.66411368,11.66704064,11.67652062,11.67771538,11.70378877,11.71848286,11.72388084,11.72604178,11.73053596,11.73230489,11.73314768,11.73351607,11.73566192,11.74829343,11.76162459,11.76526842,11.76515611,11.76452815,11.76887223,11.7735256,11.77518895,11.77357722,11.773469,11.77418327,11.78967724],"lat":[44.56575964,44.50351639,44.5056708,44.51035917,44.49756929,44.48569339,44.46724107,44.46351931,44.46076546,44.43626721,44.40248116,44.38322396,44.37753328,44.37911988,44.37940971,44.3796458,44.37943294,44.37845935,44.37211108,44.36048578,44.34805946,44.33603834,44.33228142,44.30607388,44.29833242,44.29501035,44.29036808,44.28793949,44.28951783,44.29837478,44.30896388,44.31411534,44.31185619,44.31136925,44.28901634,44.28822193,44.28281477,44.30157446,44.29619292,44.29673685,44.31928366,44.31939475,44.31950868,44.32428823,44.33067026,44.33109502,44.32985033,44.32815102,44.32743662,44.32740828,44.32724055,44.32839302,44.32878665,44.33387015,44.33534053,44.34322055,44.34437572,44.34430225,44.35349813,44.36179721,44.37766593,44.38704185,44.3936733,44.41518207,44.4190394,44.42045313,44.42117176,44.44055849,44.4626381,44.47088736,44.47422858,44.48249852,44.48670029,44.48936228,44.48991162,44.49179347,44.50106749,44.51474392,44.5229475,44.52675543,44.53186601,44.54547755,44.55798422,44.56276005,44.56370454,44.56392773,44.56631963,44.56575964]}]],[[{"lng":[10.88167437,10.88553024,10.88908331,10.88970292,10.89009384,10.8932221,10.89332376,10.8937634,10.89424795,10.89884495,10.90724322,10.9093985,10.93647525,10.93461161,10.90901606,10.90370276,10.89346617,10.88110604,10.87902021,10.87865562,10.87858513,10.87858325,10.88191717,10.87870727,10.84866482,10.81503692,10.81408104,10.81101011,10.8056016,10.80691303,10.8552,10.85586913,10.85028285,10.88167437],"lat":[44.22514776,44.22513818,44.22466533,44.22446601,44.22416245,44.21590894,44.21244111,44.21131745,44.21081426,44.20663256,44.20543403,44.20428912,44.17810096,44.17498036,44.16975328,44.16458984,44.12462552,44.11228171,44.10758323,44.10640362,44.10580552,44.10569694,44.10250335,44.09861952,44.09805853,44.11562143,44.12038392,44.1286795,44.14110838,44.14785231,44.20738595,44.21274985,44.22782142,44.22514776]}]],[[{"lng":[11.30492749,11.31081336,11.32359534,11.33062127,11.36487215,11.36876045,11.36722492,11.36456286,11.36457725,11.37397055,11.36584525,11.33222802,11.31223639,11.30440656,11.29762374,11.29390694,11.28953647,11.28989478,11.27978533,11.27856981,11.27862201,11.27975505,11.28289762,11.29566768,11.30492749],"lat":[44.33041538,44.32427863,44.31491966,44.31183649,44.3136124,44.30801703,44.30609584,44.29861682,44.29396097,44.26054796,44.24876818,44.23547281,44.23978499,44.24866762,44.25265191,44.25434827,44.25578924,44.28751023,44.2975723,44.31092517,44.31107887,44.31350444,44.31508182,44.31499682,44.33041538]}]],[[{"lng":[11.55279664,11.58303046,11.57761642,11.54863119,11.47033979,11.45109799,11.45443946,11.46837233,11.46843518,11.46979721,11.46866985,11.47295221,11.48163566,11.4851662,11.48610584,11.46654101,11.46898474,11.4709342,11.47116124,11.47132981,11.46474279,11.46580011,11.46609874,11.46612577,11.48317466,11.48326618,11.49900493,11.51831257,11.51613267,11.55279664],"lat":[44.7214375,44.70718923,44.69526439,44.69751773,44.6220243,44.62551792,44.62862338,44.64321445,44.64330254,44.64711256,44.65100512,44.67081817,44.67299617,44.68119187,44.68390978,44.68719979,44.69049186,44.69330225,44.69363324,44.69390584,44.69576826,44.70002937,44.70113469,44.70119543,44.72320024,44.72323651,44.72243809,44.72252937,44.733568,44.7214375]}]],[[{"lng":[11.18000893,11.18312378,11.19902927,11.2077209,11.24396033,11.26646705,11.28213012,11.2816631,11.2704638,11.23857925,11.23218409,11.2215358,11.226028,11.23167748,11.24065062,11.24437493,11.24294072,11.23806172,11.212762,11.20984151,11.20146833,11.20095692,11.19566751,11.19459642,11.17753566,11.17648989,11.17769041,11.12364871,11.12815558,11.16668454,11.16566903,11.16477424,11.16242986,11.1561663,11.15375364,11.16074433,11.16111894,11.16168703,11.16274788,11.16373409,11.16363826,11.16525348,11.18000893],"lat":[44.38627031,44.38299402,44.37788526,44.37209927,44.38468632,44.3478427,44.33513955,44.33233665,44.32304965,44.33094844,44.33102864,44.31328651,44.30771802,44.30516966,44.30427932,44.30239155,44.29931715,44.29627992,44.29185752,44.28976861,44.28226671,44.28186976,44.28171952,44.28219251,44.29497343,44.30012778,44.31356349,44.33392166,44.34609669,44.34821181,44.35374356,44.35465911,44.35492692,44.35858289,44.36375548,44.36803809,44.36813565,44.36816203,44.36825618,44.36894363,44.37615886,44.37881667,44.38627031]}]],[[{"lng":[11.74905062,11.77518895,11.76452815,11.76162459,11.6767892,11.64913032,11.62180734,11.62193142,11.61158536,11.58829724,11.58553855,11.5842076,11.56479236,11.56639717,11.55797155,11.55056665,11.53112889,11.59771879,11.61060928,11.61417623,11.61701109,11.62258693,11.62660411,11.62772029,11.62868725,11.62902068,11.63011689,11.68065568,11.69660524,11.69834841,11.74905062],"lat":[44.57679833,44.56276005,44.53186601,44.51474392,44.45103523,44.46086988,44.46178302,44.46199026,44.46614377,44.47086582,44.47142067,44.47158472,44.47330325,44.47549677,44.47831825,44.4781009,44.4907887,44.53776126,44.53952196,44.54159639,44.54398965,44.54674075,44.5476285,44.54755161,44.54732397,44.54728536,44.54737657,44.56036206,44.57310954,44.57988819,44.57679833]}]],[[{"lng":[11.51942324,11.52517688,11.56785419,11.57550136,11.55764931,11.53554561,11.52995866,11.5238368,11.47280726,11.45927429,11.42953198,11.45109799,11.47033979,11.49630687,11.49944167,11.51942324],"lat":[44.64088704,44.64248326,44.63476583,44.63620267,44.61119394,44.60720902,44.59871268,44.58877119,44.60271371,44.5851634,44.60390244,44.62551792,44.6220243,44.64127456,44.6490661,44.64088704]}]],[[{"lng":[11.64065881,11.67399974,11.69077754,11.6953466,11.72387495,11.7280364,11.77185786,11.77660905,11.79678251,11.80128894,11.80425578,11.80639882,11.78527487,11.78562361,11.69834841,11.68065568,11.61060928,11.6209383,11.61215479,11.62914376,11.5820933,11.59678958,11.59358518,11.60573079,11.60974165,11.61980723,11.6239115,11.59881324,11.60716937,11.59935945,11.60584588,11.63245939,11.64065881],"lat":[44.6648449,44.63226128,44.62871613,44.63516368,44.63671103,44.65421897,44.64079894,44.64396758,44.63215403,44.62901479,44.62652087,44.62356382,44.60571071,44.5850455,44.57988819,44.56036206,44.53952196,44.55113185,44.55686576,44.5775193,44.58357008,44.59676778,44.60023059,44.60626345,44.60737981,44.60923326,44.61283161,44.62699938,44.63164024,44.64277361,44.6581749,44.67294507,44.6648449]}]],[[{"lng":[11.29297719,11.30440656,11.30935977,11.31223639,11.33222802,11.33774075,11.35820677,11.36584525,11.36352204,11.37355832,11.38923547,11.38738848,11.34280936,11.29595749,11.29433018,11.30117758,11.30209664,11.29011821,11.27958766,11.27597824,11.27753648,11.2809288,11.28089394,11.27164297,11.29297719],"lat":[44.2545577,44.24866762,44.24451794,44.23978499,44.23547281,44.24345081,44.24796966,44.24876818,44.24414213,44.22573185,44.21245783,44.20522359,44.20581921,44.17155149,44.17468679,44.18074291,44.18255816,44.18465702,44.19076299,44.20430054,44.2082994,44.21244222,44.21352495,44.23307458,44.2545577]}]],[[{"lng":[11.45702512,11.45527408,11.48941643,11.48276372,11.48072342,11.48177675,11.47692488,11.47405069,11.47202138,11.43735075,11.43227732,11.43085387,11.42989964,11.42809101,11.38923547,11.36352204,11.37397055,11.36722492,11.40029472,11.40144072,11.41093465,11.41107198,11.41101515,11.41012735,11.41050244,11.42009976,11.42134143,11.42366927,11.42831744,11.4360225,11.44711549,11.45582608,11.45702512],"lat":[44.37637479,44.36382055,44.3441991,44.33118766,44.30883044,44.29262622,44.282056,44.27861344,44.27625985,44.25250083,44.25083661,44.25052485,44.25039298,44.24975929,44.21245783,44.24414213,44.26054796,44.30609584,44.32988208,44.34911591,44.35795507,44.35837698,44.35984055,44.3617718,44.36330559,44.36302545,44.36112432,44.35960353,44.35874292,44.35937662,44.36685465,44.37916215,44.37637479]}]],[[{"lng":[11.17288608,11.16793269,11.17146938,11.17060165,11.20033127,11.19318442,11.19211635,11.1900796,11.18456113,11.18040139,11.17431959,11.1738769,11.17266055,11.17055837,11.16485069,11.16176399,11.16125633,11.15913775,11.16136582,11.16177043,11.16363826,11.16387436,11.16440589,11.16415378,11.16373409,11.16302145,11.16274788,11.16074433,11.15375364,11.15373722,11.1561663,11.16242986,11.16566903,11.16668454,11.14943891,11.13751669,11.13544527,11.13418212,11.10617421,11.1056516,11.10485315,11.10012696,11.09910364,11.10511869,11.10785602,11.10834757,11.10648238,11.08850441,11.0890505,11.10322332,11.11406112,11.12600733,11.12557935,11.11489375,11.11453328,11.11824579,11.13600606,11.13610606,11.13135495,11.13198366,11.17288608],"lat":[44.50687776,44.49757047,44.48515854,44.4778706,44.4593312,44.44672162,44.43899991,44.43655315,44.43646757,44.43518207,44.42608894,44.42501256,44.4175292,44.40858342,44.39859644,44.39692507,44.3954444,44.38322791,44.37691313,44.37660949,44.37615886,44.37607337,44.37563735,44.36975381,44.36894363,44.36837871,44.36825618,44.36803809,44.36375548,44.36339286,44.35858289,44.35492692,44.35374356,44.34821181,44.35195995,44.36249697,44.36184871,44.35972181,44.35842616,44.35929331,44.36708639,44.37449601,44.37804163,44.3850025,44.38691853,44.39252206,44.39499621,44.40395218,44.40498313,44.41494431,44.42689151,44.4281146,44.44617114,44.45677772,44.45780337,44.46678777,44.46678208,44.47135296,44.47650345,44.48243621,44.50687776]}]],[[{"lng":[11.29942018,11.3131548,11.31924888,11.31951354,11.3132761,11.30439581,11.30410543,11.2944978,11.29566768,11.28289762,11.27862201,11.27978533,11.28699458,11.28989478,11.28953647,11.27164297,11.20881827,11.20065545,11.19477135,11.19566751,11.212762,11.23806172,11.24294072,11.24428592,11.24437493,11.24082031,11.24065062,11.23959944,11.23803124,11.23167748,11.226028,11.2215358,11.23051096,11.23218409,11.2325088,11.23857925,11.2704638,11.294001,11.29819784,11.29942018],"lat":[44.34658393,44.34664688,44.34312809,44.34192649,44.33522166,44.33187105,44.33108186,44.31942268,44.31499682,44.31508182,44.31107887,44.2975723,44.29456297,44.28751023,44.25578924,44.23307458,44.25212618,44.24729959,44.24705106,44.28171952,44.29185752,44.29627992,44.29931715,44.30194709,44.30239155,44.30422929,44.30427932,44.30389707,44.3039087,44.30516966,44.30771802,44.31328651,44.32994668,44.33102864,44.33107462,44.33094844,44.32304965,44.33771667,44.34849179,44.34658393]}]],[[{"lng":[11.80796774,11.82731895,11.84042771,11.83685737,11.83621144,11.82629599,11.8250128,11.81444662,11.80994406,11.75521552,11.78133445,11.80796774],"lat":[44.42519911,44.4177489,44.42357008,44.4140453,44.41260836,44.40219531,44.40103875,44.39350347,44.38322396,44.40248116,44.43626721,44.42519911]}]],[[{"lng":[11.50114218,11.50927681,11.52067424,11.53112889,11.55134945,11.55056665,11.54622979,11.54360267,11.52168919,11.49997938,11.49054908,11.47671702,11.45582608,11.45039557,11.44711549,11.44445496,11.4360225,11.42926324,11.42831744,11.42765438,11.42366927,11.42009976,11.41012735,11.40259382,11.40225843,11.40219798,11.40279894,11.40529074,11.4137672,11.42519702,11.45350298,11.4600462,11.46155496,11.46930231,11.47849594,11.48625431,11.46981329,11.479169,11.49245122,11.49152129,11.50114218],"lat":[44.4936919,44.48525244,44.48392383,44.4907887,44.47996818,44.4781009,44.47477777,44.47220819,44.44168798,44.42564805,44.40519492,44.39078783,44.37916215,44.37446524,44.36685465,44.36438753,44.35937662,44.35868509,44.35874292,44.35884873,44.35960353,44.36302545,44.3617718,44.3648925,44.36536038,44.3655704,44.36823886,44.37639343,44.39238102,44.40676299,44.42818015,44.44434525,44.45940832,44.46109327,44.46491701,44.47064269,44.47800808,44.47767248,44.4873462,44.49138443,44.4936919]}]],[[{"lng":[11.35823763,11.37261493,11.37829019,11.38334662,11.39880409,11.40985414,11.40491291,11.40416041,11.41016394,11.41110205,11.41873302,11.42587156,11.4137672,11.41207673,11.40786852,11.40529074,11.40225843,11.41012735,11.41107198,11.40677319,11.40144072,11.40029472,11.36876045,11.33062127,11.31081336,11.30439581,11.30825706,11.3132761,11.31924888,11.29942018,11.30356205,11.27622128,11.294269,11.32015075,11.31307582,11.31455746,11.31659002,11.33151262,11.33241053,11.32480117,11.35823763],"lat":[44.44682643,44.43866139,44.43795474,44.44178848,44.43421876,44.41973096,44.41567597,44.41399875,44.40639042,44.40593567,44.41050737,44.40899086,44.39238102,44.38475776,44.37861001,44.37639343,44.36536038,44.3617718,44.35837698,44.35670598,44.34911591,44.32988208,44.30801703,44.31183649,44.32427863,44.33187105,44.33413995,44.33522166,44.34312809,44.34658393,44.35943395,44.37638019,44.39497458,44.39953125,44.40714083,44.41111247,44.41254992,44.41625903,44.41674822,44.42269156,44.44682643]}]],[[{"lng":[11.35279011,11.33202516,11.3299969,11.32553121,11.31988067,11.31303291,11.31179407,11.2774338,11.28909205,11.30178791,11.30548517,11.30769762,11.30871696,11.31948054,11.32083199,11.32476307,11.32697727,11.33025416,11.33287279,11.33358535,11.33409711,11.33901383,11.34074513,11.34471549,11.34483568,11.34639968,11.34692871,11.34800486,11.35971259,11.37397834,11.37468349,11.37807031,11.3819606,11.3883459,11.35279011],"lat":[44.75323117,44.73984514,44.72015147,44.71133259,44.7081657,44.70002373,44.69930277,44.70902494,44.71394612,44.72623541,44.73307899,44.73528034,44.73606092,44.7440482,44.74501097,44.747123,44.74807714,44.7493426,44.75041438,44.7507374,44.75101501,44.75385357,44.75492084,44.75847623,44.75864168,44.76083168,44.76153199,44.76279267,44.774173,44.78007967,44.78016852,44.78038607,44.78035897,44.77865465,44.75323117]}]],[[{"lng":[11.25902863,11.27104507,11.29654744,11.29464246,11.29104651,11.28564795,11.28329373,11.28279595,11.28276884,11.28279656,11.29663518,11.30571531,11.29912174,11.31741584,11.31807854,11.31768897,11.31661509,11.31526787,11.31378893,11.31314074,11.31305897,11.31293081,11.31288041,11.3159354,11.32277295,11.32309571,11.32256344,11.32019039,11.31679166,11.30200959,11.29399818,11.28612719,11.26748704,11.25959983,11.24491637,11.23574348,11.22359804,11.25375977,11.24258436,11.24250574,11.24264432,11.24272405,11.2429851,11.24323275,11.24350369,11.24512664,11.24550027,11.25059908,11.25902863],"lat":[44.6826152,44.66879288,44.6657378,44.65089081,44.64652489,44.64665113,44.64530513,44.64432932,44.64375879,44.64362151,44.63034962,44.63564111,44.62406261,44.61783666,44.61418062,44.6134374,44.61244135,44.61096756,44.60875426,44.60699,44.60659723,44.60588808,44.60493654,44.59714887,44.59609845,44.59518715,44.59370638,44.59145847,44.5933325,44.59662934,44.6004186,44.59916144,44.6065714,44.58073339,44.57877842,44.5757781,44.59155737,44.64786076,44.66656429,44.67731964,44.67766181,44.67776602,44.67793025,44.67801316,44.67806578,44.67829213,44.67853233,44.68317049,44.6826152]}]],[[{"lng":[11.20881827,11.27164297,11.28089394,11.2809288,11.27597824,11.27958766,11.30209664,11.29433018,11.29470706,11.29809995,11.19573059,11.19653054,11.20514372,11.19441105,11.1948974,11.19214208,11.18602964,11.18259122,11.18235387,11.18226153,11.18439806,11.18737482,11.18671539,11.18826026,11.19477135,11.20065545,11.20881827],"lat":[44.25212618,44.23307458,44.21352495,44.21244222,44.20430054,44.19076299,44.18255816,44.17468679,44.17229389,44.16792449,44.15141455,44.16293893,44.17902159,44.20472919,44.20630267,44.21158741,44.21887486,44.22442847,44.22492929,44.22535306,44.23582927,44.24209006,44.24640943,44.24716027,44.24705106,44.24729959,44.25212618]}]],[[{"lng":[11.37477137,11.38225495,11.39176962,11.39196784,11.39214712,11.39679206,11.39181522,11.39892661,11.40515166,11.40850042,11.41951377,11.38982549,11.38543996,11.38258992,11.38272597,11.37034745,11.36896039,11.36879074,11.3686824,11.34529292,11.34859527,11.35940533,11.35947023,11.35939026,11.35876786,11.35055824,11.34546646,11.34525409,11.34517903,11.34616558,11.35802045,11.34720953,11.34717781,11.34718854,11.34722595,11.34928883,11.3578313,11.35569138,11.34962838,11.34923538,11.34931684,11.34959423,11.36380327,11.3600616,11.37070041,11.37477137],"lat":[44.68896092,44.68779223,44.69165383,44.69156414,44.69145462,44.6882489,44.68126877,44.67438357,44.67296525,44.67301874,44.67073635,44.64536599,44.63997532,44.63453724,44.62939239,44.61703783,44.61388541,44.61345231,44.60947102,44.6247578,44.6304514,44.62966581,44.62994524,44.63840965,44.63954105,44.64233796,44.64787221,44.64817591,44.64842558,44.66797629,44.67127836,44.67760303,44.67787207,44.67798157,44.67812652,44.68343085,44.6930835,44.69487299,44.69786911,44.70145279,44.70169191,44.70213294,44.70047685,44.69390893,44.68980231,44.68896092]}]],[[{"lng":[11.26747448,11.25315405,11.27543385,11.26671476,11.26309945,11.25041704,11.2471108,11.24712336,11.24729806,11.24773628,11.25059908,11.24550027,11.24323275,11.24264432,11.24258436,11.24751706,11.25106738,11.25375977,11.24976223,11.23902271,11.2337067,11.1834212,11.14949258,11.15233496,11.1614163,11.16572906,11.15909396,11.15619446,11.14279053,11.13994866,11.12834156,11.12420691,11.12359625,11.12779278,11.13984757,11.14755898,11.15343485,11.15748284,11.16331283,11.16369986,11.16911279,11.18897875,11.19136952,11.19638296,11.20963996,11.20857097,11.20617203,11.20637131,11.20668233,11.21667232,11.241301,11.24608308,11.27310365,11.26747448],"lat":[44.74119519,44.71632208,44.70557786,44.69090414,44.68690403,44.68861033,44.6846357,44.68434907,44.68393096,44.68361851,44.68317049,44.67853233,44.67801316,44.67766181,44.66656429,44.6565186,44.65097636,44.64786076,44.64119744,44.62406278,44.61507735,44.58044858,44.56860668,44.57742165,44.5788885,44.58837071,44.58964533,44.58680417,44.60567658,44.60664676,44.6102869,44.61165963,44.62621721,44.63135593,44.62972791,44.63874073,44.66482737,44.66494393,44.67485258,44.67540002,44.68107225,44.69157678,44.69327117,44.69716957,44.71994482,44.72536348,44.7372202,44.7378105,44.73853704,44.74855507,44.74130364,44.75838253,44.75044069,44.74119519]}]],[[{"lng":[11.44538054,11.4432659,11.4479381,11.44895752,11.4498726,11.45044951,11.45095785,11.45458346,11.45498286,11.45524745,11.46981329,11.48625431,11.46155496,11.45350298,11.4343927,11.42519702,11.42583879,11.42587156,11.42580934,11.42180891,11.41873302,11.41368009,11.41016394,11.40985414,11.39880409,11.37261493,11.35823763,11.37315142,11.37410076,11.37457936,11.37475596,11.37511474,11.40024667,11.4154936,11.42606049,11.44266775,11.44610155,11.44538054],"lat":[44.48658126,44.48503028,44.48338682,44.48335088,44.4836756,44.48375155,44.48376595,44.48371055,44.48363894,44.48355785,44.47800808,44.47064269,44.45940832,44.42818015,44.40679175,44.40676299,44.40850205,44.40899086,44.4097259,44.41068803,44.41050737,44.40884531,44.40639042,44.41973096,44.43421876,44.43866139,44.44682643,44.4492502,44.45804004,44.4587998,44.45891204,44.45906099,44.46425587,44.48333021,44.48740257,44.49073212,44.4896323,44.48658126]}]],[[{"lng":[11.3552585,11.39080803,11.40719613,11.41887366,11.48326618,11.46609874,11.46474279,11.47116124,11.45111804,11.44554666,11.42202732,11.41951377,11.40515166,11.39181522,11.39196784,11.38225495,11.37070041,11.36380327,11.33133009,11.32553121,11.33202516,11.3552585],"lat":[44.74752126,44.73524473,44.74086255,44.72796691,44.72323651,44.70113469,44.69576826,44.69363324,44.67918188,44.66812677,44.67173686,44.67073635,44.67296525,44.68126877,44.69156414,44.68779223,44.68980231,44.70047685,44.71220455,44.71133259,44.73984514,44.74752126]}]],[[{"lng":[11.1580119,11.18330044,11.16956586,11.16911279,11.16787638,11.15343485,11.13984757,11.07809108,11.10536168,11.1580119],"lat":[44.6981546,44.68899555,44.68137873,44.68107225,44.68012463,44.66482737,44.62972791,44.64702985,44.69051642,44.6981546]}]],[[{"lng":[11.22287714,11.23419345,11.23239017,11.23288909,11.23311687,11.23339134,11.26792525,11.28377063,11.28226468,11.29363802,11.31340773,11.32480117,11.33288712,11.33321297,11.33241053,11.33160574,11.33151262,11.33143016,11.3306433,11.31676544,11.31659002,11.31649598,11.31485328,11.31455746,11.31302781,11.31302867,11.31307582,11.31379753,11.31443095,11.31754225,11.31989759,11.32037597,11.32015075,11.3201004,11.27622128,11.30356205,11.29803517,11.294001,11.28402825,11.28230864,11.28213012,11.27906092,11.27486575,11.26646705,11.25023127,11.24396033,11.2191761,11.2077209,11.20555434,11.19902927,11.18312378,11.18051551,11.18000893,11.17954064,11.16525348,11.16363826,11.16177043,11.16164839,11.16136582,11.16052652,11.15913775,11.16011731,11.16125633,11.16169543,11.16176399,11.16228671,11.16412448,11.16485069,11.16986888,11.17055837,11.17266055,11.17283201,11.1738769,11.17397399,11.17431959,11.17867554,11.18013868,11.20033127,11.22287714],"lat":[44.46132005,44.45940103,44.45349912,44.45212154,44.45170914,44.4515316,44.44896135,44.45046905,44.42582416,44.43052346,44.42112042,44.42269156,44.41905834,44.41756006,44.41674822,44.41629146,44.41625903,44.41623878,44.41621264,44.41259926,44.41254992,44.41251412,44.41142774,44.41111247,44.40914827,44.40723912,44.40714083,44.40637448,44.40577704,44.40525927,44.40190127,44.40062219,44.39953125,44.3994884,44.37638019,44.35943395,44.34988655,44.33771667,44.33486133,44.33507352,44.33513955,44.3355846,44.3377282,44.3478427,44.37894016,44.38468632,44.37192895,44.37209927,44.37247818,44.37788526,44.38299402,44.38452987,44.38627031,44.38635858,44.37881667,44.37615886,44.37660949,44.37666075,44.37691313,44.37823891,44.38322791,44.39127746,44.3954444,44.3968619,44.39692507,44.39719054,44.3978658,44.39859644,44.40704695,44.40858342,44.4175292,44.41999548,44.42501256,44.42542878,44.42608894,44.43288616,44.43487538,44.4593312,44.46132005]}]],[[{"lng":[11.05140177,11.07469299,11.08130637,11.09353325,11.09806075,11.10373069,11.11729683,11.12203727,11.1239256,11.16086489,11.15931465,11.15831775,11.15501867,11.13384656,11.1184581,11.11366455,11.10871158,11.10586373,11.103175,11.1003811,11.09918009,11.09816203,11.09425609,11.06228682,11.04504265,11.04423609,11.05163435,11.05077588,11.05765485,11.0595813,11.06504057,11.06774556,11.06816708,11.08446187,11.08469577,11.07630577,11.03240512,11.03276082,11.03335971,11.03647136,11.04063209,11.04348721,11.03479012,11.03162219,11.03760421,11.05140177],"lat":[44.34171671,44.33423431,44.32676713,44.3203902,44.31706215,44.31157303,44.31474388,44.32239264,44.33366558,44.31289963,44.3123404,44.30791356,44.30392856,44.3004263,44.29481377,44.28857589,44.25782203,44.25480912,44.25350543,44.25247708,44.25150603,44.23879578,44.23477062,44.22781029,44.22911245,44.23628364,44.2495405,44.25603406,44.25676164,44.2579862,44.26240928,44.26918957,44.26955329,44.2737916,44.27500216,44.28589429,44.30141559,44.31044807,44.31086224,44.31144598,44.31428185,44.31947774,44.32034596,44.32336485,44.34258845,44.34171671]}]],[[{"lng":[11.22478848,11.23207944,11.23290939,11.23625874,11.23700414,11.23844958,11.2389443,11.23974604,11.24022018,11.24119053,11.24123513,11.24128017,11.24127672,11.24087758,11.23750188,11.23570711,11.25678432,11.2468144,11.24461018,11.24010274,11.24191269,11.24176567,11.24165308,11.24094911,11.23824049,11.22287714,11.20033127,11.17060165,11.16793269,11.17617841,11.17883881,11.18112469,11.18037643,11.18107205,11.18374139,11.19348756,11.22478848],"lat":[44.53170999,44.52439059,44.52416956,44.52424297,44.52419685,44.52398791,44.52384486,44.52354499,44.52325492,44.52185624,44.52166575,44.52136385,44.52094586,44.51923309,44.5120146,44.50324301,44.49696374,44.49108484,44.48675916,44.47559733,44.46503556,44.46372012,44.46330314,44.46242066,44.46043583,44.46132005,44.4593312,44.4778706,44.49757047,44.5061663,44.51147487,44.52158998,44.52307731,44.52595269,44.52552918,44.52394975,44.53170999]}]],[[{"lng":[11.17870636,11.17617841,11.16642698,11.14872895,11.13198366,11.13100052,11.13135495,11.13220335,11.13610606,11.13696027,11.13600606,11.11824579,11.11453328,11.12557935,11.12600733,11.11406112,11.10322332,11.0890505,11.08886885,11.08850441,11.0884427,11.10834757,11.10617421,11.14943891,11.12815558,11.10373069,11.08130637,11.07469299,11.03760421,11.02606073,11.02589604,11.02262512,11.0225622,11.02237352,11.04816659,10.9966656,10.99022956,10.99023225,10.9908497,11.00913173,11.00950325,11.01347658,11.02686709,11.02691999,11.02802848,11.03702538,11.0448445,11.04753323,11.05056075,11.05072652,11.06266232,11.0653635,11.05614262,11.10815167,11.10450505,11.13160657,11.18212808,11.17870636],"lat":[44.53738656,44.5061663,44.50921289,44.49894013,44.48243621,44.48069007,44.47650345,44.47356121,44.47135296,44.46915948,44.46678208,44.46678777,44.45780337,44.44617114,44.4281146,44.42689151,44.41494431,44.40498313,44.40475351,44.40395218,44.40376202,44.39252206,44.35842616,44.35195995,44.34609669,44.31157303,44.32676713,44.33423431,44.34258845,44.34986936,44.35018738,44.35781667,44.35799335,44.3735219,44.41610732,44.42953992,44.44050566,44.44058494,44.4413754,44.44517386,44.44528886,44.44722643,44.46016481,44.46019539,44.46076086,44.46368859,44.46575895,44.46692836,44.47070068,44.48038841,44.49441769,44.50007646,44.53406923,44.52467021,44.53941831,44.5674275,44.54990327,44.53738656]}]],[[{"lng":[10.9578001,10.98050742,10.97424106,10.97913436,11.00695284,10.94414301,10.90179559,10.90362141,10.87858513,10.88110604,10.89346617,10.89667095,10.90370276,10.94130536,10.94829436,10.94944327,10.95140125,10.95551286,10.9578001],"lat":[44.18497239,44.1788026,44.16424464,44.15409849,44.13854571,44.08122763,44.06402887,44.08514686,44.10580552,44.11228171,44.12462552,44.14625792,44.16458984,44.17549473,44.18005559,44.18274475,44.18390644,44.18528053,44.18497239]}]],[[{"lng":[11.71260804,11.71470598,11.73127248,11.74405305,11.74536538,11.76426196,11.79166602,11.79913898,11.80475597,11.8105331,11.81149152,11.81692733,11.82034371,11.85906935,11.96332308,12.13451409,12.15378113,12.11701718,12.10072366,12.09600217,12.09357849,12.07599118,12.06770309,12.06708633,12.06784039,12.06605201,12.05954275,12.02808748,12.02703335,12.00520307,12.00219652,11.94916276,11.89777761,11.89314654,11.88073413,11.87082506,11.84958577,11.78919476,11.78967724,11.77357722,11.74558468,11.78562361,11.78527487,11.80128894,11.77660905,11.77185786,11.75831489,11.7280364,11.72387495,11.72178991,11.6953466,11.69077754,11.67399974,11.63245939,11.61456681,11.63003344,11.65489598,11.66369463,11.66955561,11.68547409,11.69196825,11.69656392,11.6975437,11.69379761,11.69168667,11.69102427,11.68958977,11.69344838,11.70759559,11.70724329,11.69864795,11.7010851,11.71260804],"lat":[44.72817543,44.72229979,44.71378136,44.70238855,44.68921824,44.67646504,44.66560741,44.6668782,44.66657375,44.66552237,44.66525572,44.66133171,44.65692174,44.65133541,44.65867715,44.61110792,44.54845202,44.54672558,44.55202059,44.55580876,44.55882961,44.56129746,44.55861283,44.55718004,44.55191595,44.54942623,44.54850625,44.56047662,44.57680345,44.58377369,44.60020257,44.59024724,44.58229262,44.58136587,44.57845704,44.57743653,44.55606853,44.55434327,44.56575964,44.56370454,44.57995945,44.5850455,44.60571071,44.62901479,44.64396758,44.64079894,44.64849207,44.65421897,44.63671103,44.63588642,44.63516368,44.62871613,44.63226128,44.67294507,44.69012295,44.70097483,44.69543399,44.70157377,44.70440239,44.6966306,44.67451313,44.67454561,44.68173544,44.68735457,44.68889918,44.68974634,44.69307483,44.70124085,44.71127067,44.71542592,44.71668348,44.72521764,44.72817543]}]],[[{"lng":[11.98579395,12.09156358,12.1121559,12.1108778,12.10897808,12.10101553,12.09859989,12.08830229,12.08816342,12.07462434,12.07451241,12.01257286,12.01006783,11.9977957,11.99874635,11.97960209,11.9388465,11.88723749,11.87629562,11.86498037,11.8601302,11.86865223,11.84402665,11.98579395],"lat":[44.98371666,44.97020703,44.93310214,44.93145175,44.92626073,44.92147106,44.92097826,44.92104141,44.92813868,44.92803625,44.9366181,44.95366047,44.9462582,44.94685327,44.95186211,44.95523153,44.94801576,44.94618715,44.95677066,44.95430524,44.95924294,44.97181619,44.97000801,44.98371666]}]],[[{"lng":[11.42674203,11.42635159,11.46422659,11.47047447,11.49176034,11.48796275,11.48970909,11.48542771,11.49007448,11.4675316,11.45564903,11.44436671,11.43751302,11.4307907,11.41730451,11.40912934,11.40192021,11.3772247,11.36641169,11.34112864,11.26968614,11.2453826,11.23474353,11.24328363,11.25651205,11.26043375,11.24620567,11.27225716,11.30158351,11.42674203],"lat":[44.95008352,44.93010004,44.93571387,44.91690925,44.91308803,44.89774387,44.89393396,44.87821077,44.86224343,44.86666691,44.86618835,44.8390475,44.83733965,44.83784311,44.84115422,44.83810434,44.83365587,44.83345441,44.83730599,44.87259427,44.89652123,44.89825052,44.90597572,44.91678161,44.92620246,44.93310137,44.95143857,44.93832265,44.96235897,44.95008352]}]],[[{"lng":[11.36297676,11.36641169,11.3684819,11.37253177,11.3772247,11.38707359,11.35406486,11.3513548,11.3487468,11.33726775,11.33878874,11.33901701,11.33609049,11.3329981,11.33082206,11.34471549,11.33409711,11.33287279,11.32697727,11.32476307,11.32083199,11.30871696,11.30548517,11.30178791,11.28909205,11.2790499,11.27759812,11.27543385,11.25315405,11.27310365,11.24608308,11.29033679,11.29516716,11.30156737,11.309157,11.31160934,11.32339547,11.33573757,11.34749072,11.35147301,11.35252733,11.36297676],"lat":[44.83771884,44.83730599,44.83725365,44.83635936,44.83345441,44.83123301,44.81653073,44.7930204,44.78827597,44.78481174,44.78243101,44.7793206,44.77227784,44.76768698,44.76293328,44.75847623,44.75101501,44.75041438,44.74807714,44.747123,44.74501097,44.73606092,44.73307899,44.72623541,44.71394612,44.71079825,44.70935086,44.70557786,44.71632208,44.75044069,44.75838253,44.8002655,44.80412039,44.8104213,44.8247719,44.8274944,44.83255448,44.83190604,44.83013922,44.83254123,44.83611629,44.83771884]}]],[[{"lng":[12.12987532,12.16446403,12.16042501,12.15695007,12.17218858,12.18139573,12.18495434,12.21769814,12.21994491,12.22944285,12.24076144,12.24481714,12.25139016,12.25909749,12.28250327,12.2797188,12.26829405,12.26630965,12.24581362,12.23402608,12.22741115,12.2100251,12.20988323,12.20789622,12.20105411,12.20222428,12.20687313,12.20707213,12.19820669,12.16939534,12.16503137,12.16072162,12.15658267,12.14968646,12.14726649,12.15344237,12.15361611,12.12777482,12.12095382,12.11122444,12.09821405,12.09503779,12.0422514,12.02541256,12.00531305,12.00691333,12.03823051,12.04353587,12.04428877,12.0299303,12.02952975,12.03258176,12.03941085,12.05333746,12.05270319,12.05264849,12.08816342,12.09859989,12.1108778,12.11361068,12.11589758,12.12632351,12.12987532],"lat":[44.92044808,44.90374749,44.89640469,44.88465464,44.87974488,44.86719929,44.86470547,44.88283403,44.85888017,44.84514097,44.84733839,44.83684969,44.82370862,44.81481073,44.82164737,44.81938693,44.80545556,44.80435113,44.80436899,44.80341646,44.80134426,44.81158402,44.81836656,44.82039388,44.81743536,44.81572815,44.81289694,44.81146903,44.80826112,44.8185533,44.8162349,44.81235747,44.80974444,44.80989903,44.80888556,44.80294471,44.79801577,44.78191126,44.78574388,44.8036807,44.79779631,44.83298511,44.82945013,44.8340883,44.86665317,44.86724115,44.86748276,44.86726935,44.86738429,44.88731881,44.88813062,44.90811492,44.90958057,44.90919072,44.91742197,44.92774415,44.92813868,44.92097826,44.93145175,44.92960943,44.92390808,44.92163547,44.92044808]}]],[[{"lng":[12.27380769,12.24830732,12.24022792,12.26957989,12.23708404,12.15378113,12.13451409,11.95845321,11.96332308,11.96922324,11.97300192,11.97601325,11.99996525,12.00800526,12.01666958,12.01973447,12.029023,12.11839715,12.09239422,12.10633736,12.09391106,12.10365084,12.11287242,12.13265351,12.13091865,12.16409621,12.18115689,12.17535143,12.175197,12.17739751,12.17728348,12.17127906,12.15547273,12.15658267,12.15802744,12.15950833,12.16072162,12.16327904,12.16503137,12.16676525,12.16816378,12.16939534,12.1794841,12.18427114,12.19414319,12.19709074,12.19820669,12.19922123,12.20707213,12.20789622,12.22741115,12.26630965,12.2797188,12.28562428,12.27380769],"lat":[44.80358223,44.76276501,44.69964071,44.62980482,44.62058595,44.54845202,44.61110792,44.65259081,44.65867715,44.66603165,44.67060542,44.674965,44.66897246,44.6675905,44.66682162,44.66681258,44.66713351,44.67627568,44.70020909,44.7190706,44.72084595,44.75207092,44.74124218,44.73822518,44.73276349,44.74041824,44.76612195,44.78859987,44.79246605,44.79842403,44.80283236,44.80747345,44.80933404,44.80974444,44.81049664,44.81144587,44.81235747,44.81495119,44.8162349,44.81741106,44.81823643,44.8185533,44.82031605,44.82042561,44.81047242,44.80866147,44.80826112,44.80831368,44.81146903,44.82039388,44.80134426,44.80435113,44.81938693,44.81770158,44.80358223]}]],[[{"lng":[11.86330803,11.86498037,11.87629562,11.87821743,11.88723749,11.91386759,11.92864116,11.9388465,11.97960209,11.99874635,11.99108255,12.00320149,11.96963418,11.93341672,11.94721995,11.94747624,11.90611234,11.91082693,11.85699679,11.85352438,11.83080985,11.84765185,11.84133003,11.84031805,11.83586596,11.83408768,11.83233639,11.81663177,11.79047878,11.78676114,11.7825031,11.77211371,11.76490434,11.7636333,11.76363409,11.76116425,11.74706845,11.74230235,11.74022869,11.76692802,11.76236328,11.76333608,11.77508257,11.77377562,11.77249757,11.77350963,11.79710158,11.81064874,11.82989628,11.84183903,11.85807881,11.8601302,11.86330803],"lat":[44.95916774,44.95430524,44.95677066,44.94853947,44.94618715,44.95029472,44.94770203,44.94801576,44.95523153,44.95186211,44.94152731,44.92479846,44.90486455,44.90140157,44.89359097,44.88794827,44.88900024,44.85935803,44.8691849,44.86857864,44.851757,44.84074707,44.82442651,44.82509939,44.83260821,44.83634851,44.83771015,44.83597171,44.84195708,44.84229998,44.84163674,44.8434756,44.84876843,44.85142779,44.85696399,44.85910773,44.8475698,44.85257248,44.86614325,44.88772485,44.89501003,44.92385589,44.92601938,44.93520612,44.93868492,44.94107156,44.93541091,44.93699995,44.93773951,44.93349987,44.95929434,44.95924294,44.95916774]}]],[[{"lng":[11.5341305,11.61465359,11.72532677,11.72356012,11.72532115,11.7255359,11.72829939,11.73064443,11.76236328,11.76835965,11.76692802,11.75996423,11.74022869,11.74706845,11.75956599,11.76116425,11.76363409,11.7636333,11.76401439,11.76490434,11.76588173,11.76968074,11.77211371,11.77392412,11.81663177,11.82360714,11.83145781,11.83233639,11.83296107,11.83391943,11.83408768,11.83414987,11.84031805,11.84133003,11.85153873,11.85317027,11.85475878,11.85742527,11.85967822,11.86087834,11.86444469,11.86671353,11.86751975,11.8692692,11.87627167,11.87706572,11.87721702,11.87663072,11.86949957,11.86860319,11.86487029,11.85154035,11.82428369,11.81443198,11.80015942,11.79464031,11.7921272,11.78779682,11.78590531,11.77493536,11.77108936,11.73545107,11.7318991,11.72851487,11.71352379,11.69416306,11.70237927,11.7139641,11.70700797,11.7010851,11.69874441,11.69864795,11.69889153,11.70038571,11.70724329,11.70847622,11.70759559,11.7053549,11.68958977,11.69656392,11.68547409,11.66955561,11.63003344,11.61456681,11.57060384,11.54688102,11.55936505,11.55929475,11.55903988,11.53315296,11.537699,11.53764762,11.53583888,11.54488591,11.50847101,11.52567512,11.53063727,11.53061669,11.5274069,11.52300613,11.527757,11.53769501,11.53804367,11.49101259,11.49176034,11.48672818,11.47047447,11.46422659,11.5341305],"lat":[44.9362459,44.88812385,44.92645843,44.92002997,44.91475957,44.91434485,44.90948324,44.90605351,44.89501003,44.89229012,44.88772485,44.87143343,44.86614325,44.8475698,44.85949746,44.85910773,44.85696399,44.85142779,44.85013578,44.84876843,44.84744395,44.84476375,44.8434756,44.8428984,44.83597171,44.83717689,44.83780454,44.83771015,44.8373622,44.83656277,44.83634851,44.83624929,44.82509939,44.82442651,44.82270476,44.82202934,44.82096338,44.81714281,44.81017733,44.80944959,44.808784,44.80854682,44.80844571,44.80802365,44.80570489,44.80514474,44.80415071,44.80304024,44.7944428,44.77777081,44.78096151,44.78635003,44.79091222,44.79820478,44.81142203,44.81344944,44.81355595,44.81420194,44.81404379,44.79533211,44.79344043,44.80399556,44.80197866,44.79885489,44.78815778,44.77975169,44.75561929,44.7362235,44.72802383,44.72521764,44.71826485,44.71668348,44.71616836,44.71517532,44.71542592,44.71441995,44.71127067,44.70511648,44.69307483,44.67454561,44.6966306,44.70440239,44.70097483,44.69012295,44.73390827,44.75681089,44.78651686,44.78672614,44.78690294,44.80056874,44.80792344,44.80884322,44.81037065,44.82096679,44.83289786,44.84542937,44.85513544,44.85605924,44.85520582,44.85426371,44.8748689,44.87981628,44.88287256,44.90955115,44.91308803,44.91598672,44.91690925,44.93571387,44.9362459]}]],[[{"lng":[11.8866381,11.90403776,11.89918171,11.88004676,11.86671353,11.85967822,11.85742527,11.85317027,11.84133003,11.84765185,11.82971494,11.83080985,11.83089804,11.85352438,11.8866381],"lat":[44.86280365,44.86024668,44.83722146,44.81669974,44.80854682,44.81017733,44.81714281,44.82202934,44.82442651,44.84074707,44.84490341,44.851757,44.85200687,44.86857864,44.86280365]}]],[[{"lng":[12.03248979,12.07462434,12.05264849,12.05333746,12.03258176,12.04428877,12.03823051,12.00691333,12.00531305,12.02541256,12.00979649,11.98838469,11.97225362,11.96866127,11.95470733,11.94235752,11.92939694,11.92886072,11.92275444,11.9183294,11.92369008,11.90909875,11.91631557,11.89918171,11.89322361,11.90403776,11.91082693,11.90611234,11.94747624,11.93341672,12.00320149,11.9977957,12.01257286,12.03248979],"lat":[44.94597073,44.92803625,44.92774415,44.90919072,44.90811492,44.86738429,44.86748276,44.86724115,44.86665317,44.8340883,44.83076997,44.819135,44.82248201,44.82223346,44.80882249,44.81143715,44.80849388,44.80864267,44.81289518,44.81624227,44.82356566,44.83091519,44.83615751,44.83722146,44.83899306,44.86024668,44.85935803,44.88900024,44.88794827,44.90140157,44.92479846,44.94685327,44.95366047,44.94597073]}]],[[{"lng":[12.15292676,12.17728348,12.18115689,12.16409621,12.13091865,12.11287242,12.11546828,12.10564889,12.1014019,12.11189797,12.11347362,12.09821405,12.11122444,12.11799448,12.11814213,12.12095382,12.12195782,12.12610107,12.12777482,12.1336843,12.15361611,12.14680177,12.14726649,12.14827938,12.14968646,12.15292676],"lat":[44.80951532,44.80283236,44.76612195,44.74041824,44.73276349,44.74124218,44.75005644,44.7518725,44.7523031,44.75767065,44.75924803,44.79779631,44.8036807,44.79791459,44.79314846,44.78574388,44.78443813,44.78228121,44.78191126,44.78169958,44.79801577,44.80778212,44.80888556,44.80960478,44.80989903,44.80951532]}]],[[{"lng":[11.7921272,11.80015942,11.80899573,11.81443198,11.82191323,11.82428369,11.82944079,11.82535803,11.82527493,11.8332586,11.82077838,11.82075035,11.82104172,11.82520444,11.78532243,11.78827357,11.77546648,11.75215803,11.75353586,11.77108936,11.77493536,11.7921272],"lat":[44.81355595,44.81142203,44.80425594,44.79820478,44.79222294,44.79091222,44.78917745,44.78609604,44.78593156,44.7784329,44.76382557,44.76325013,44.76248674,44.75852184,44.75294285,44.75889006,44.77960109,44.7921114,44.79662422,44.79344043,44.79533211,44.81355595]}]],[[{"lng":[12.28455191,12.2769092,12.26563015,12.26728708,12.25139016,12.24076144,12.21994491,12.21769814,12.18495434,12.17218858,12.15695007,12.16446403,12.14349347,12.12987532,12.11589758,12.11490541,12.1108778,12.1121559,12.11382083,12.11354349,12.10123112,12.14242435,12.17067592,12.2249718,12.2808688,12.29487131,12.28455191],"lat":[44.89369141,44.89291497,44.86877276,44.83529015,44.82370862,44.84733839,44.85888017,44.88283403,44.86470547,44.87974488,44.88465464,44.90374749,44.92191793,44.92044808,44.92390808,44.92488098,44.93145175,44.93310214,44.94218367,44.95086345,44.96182646,44.92790385,44.94204738,44.92298071,44.94176719,44.9262134,44.89369141]}]],[[{"lng":[11.43751302,11.44815904,11.45903128,11.47184363,11.4879726,11.43640501,11.42462333,11.4388531,11.40891216,11.40912934,11.41730451,11.43751302],"lat":[44.83733965,44.83866916,44.83359683,44.83276192,44.81668485,44.79889741,44.80916764,44.81582308,44.83293274,44.83810434,44.84115422,44.83733965]}]],[[{"lng":[11.83705221,11.85154035,11.86487029,11.86893842,11.87080232,11.87506259,11.88336158,11.88998566,11.89352477,11.90800008,11.9020477,11.90642057,11.97689218,11.99426229,12.0135648,12.01880738,12.09692671,12.10365084,12.09391106,12.10633736,12.10092355,12.10037113,12.09522152,12.09239422,12.11839715,12.0887792,12.07706188,12.029023,12.01666958,11.9569605,11.8702113,11.85344044,11.83614024,11.82075035,11.82919958,11.8332586,11.83300087,11.82535803,11.83705221],"lat":[44.78766535,44.78635003,44.78096151,44.77739289,44.77700392,44.77778787,44.78222806,44.77998099,44.77947721,44.77977988,44.74825746,44.74729095,44.76860965,44.75628134,44.75720451,44.75694889,44.75106535,44.75207092,44.72084595,44.7190706,44.7008598,44.70044271,44.70304913,44.70020909,44.67627568,44.67354348,44.67255925,44.66713351,44.66682162,44.68013248,44.71653787,44.73108288,44.75025666,44.76325013,44.77068375,44.7784329,44.78113993,44.78609604,44.78766535]}]],[[{"lng":[11.50178348,11.55929475,11.54688102,11.59272667,11.45278097,11.44666877,11.43785503,11.43392016,11.43244693,11.4128987,11.4076275,11.39924104,11.42533409,11.4758273,11.4879726,11.49094333,11.49192421,11.49556046,11.50178348],"lat":[44.81482794,44.78672614,44.75681089,44.71169761,44.76050814,44.76073385,44.75977917,44.75987666,44.76022314,44.76530118,44.76628121,44.76857413,44.79569439,44.80810441,44.81668485,44.81927567,44.81973137,44.8204621,44.81482794]}]],[[{"lng":[11.81661334,11.8702113,11.9569605,11.97601325,11.96332308,11.91295551,11.85906935,11.82776105,11.82034371,11.81692733,11.8105331,11.79166602,11.78221961,11.76426196,11.74536538,11.73127248,11.73835574,11.75334588,11.81661334],"lat":[44.75560731,44.71653787,44.68013248,44.674965,44.65867715,44.65658021,44.65133541,44.66104577,44.65692174,44.66133171,44.66552237,44.66560741,44.67429121,44.67646504,44.68921824,44.71378136,44.72548101,44.73982087,44.75560731]}]],[[{"lng":[11.83684289,11.84413174,11.86865223,11.86057149,11.8601302,11.85807881,11.86148716,11.84183903,11.79710158,11.77350963,11.76333608,11.76236328,11.7255359,11.74703629,11.83684289],"lat":[44.97289949,44.96933818,44.97181619,44.96389383,44.95924294,44.95929434,44.95133224,44.93349987,44.93541091,44.94107156,44.92385589,44.89501003,44.91434485,44.95809666,44.97289949]}]],[[{"lng":[11.40912934,11.4388531,11.42978394,11.42462333,11.43640501,11.42533409,11.4029773,11.39924104,11.3953084,11.39170203,11.3883459,11.37468349,11.34483568,11.33082206,11.33726775,11.3513548,11.35406486,11.36173368,11.38707359,11.40192021,11.40912934],"lat":[44.83810434,44.81582308,44.81188455,44.80916764,44.79889741,44.79569439,44.78253804,44.76857413,44.77181565,44.77675244,44.77865465,44.78016852,44.75864168,44.76293328,44.78481174,44.7930204,44.81653073,44.81508145,44.83123301,44.83365587,44.83810434]}]],[[{"lng":[11.53769501,11.527757,11.52300613,11.53063727,11.52567512,11.50595408,11.50847101,11.51977795,11.54488591,11.53583888,11.53315296,11.49556046,11.4879726,11.47934858,11.47184363,11.45903128,11.45259055,11.44901441,11.44815904,11.44720254,11.44436671,11.45564903,11.49007448,11.49101259,11.53769501],"lat":[44.87981628,44.8748689,44.85426371,44.85513544,44.84542937,44.84053009,44.83289786,44.82639002,44.82096679,44.81037065,44.80056874,44.8204621,44.81668485,44.82051837,44.83276192,44.83359683,44.83766481,44.83855178,44.83866916,44.83878869,44.8390475,44.86618835,44.86224343,44.90955115,44.87981628]}]],[[{"lng":[11.74024989,11.78827357,11.75334588,11.73127248,11.71479032,11.71260804,11.70700797,11.7068051,11.69416306,11.74024989],"lat":[44.79732694,44.75889006,44.73982087,44.71378136,44.72814153,44.72817543,44.72802383,44.72822386,44.77975169,44.79732694]}]],[[{"lng":[11.90124145,11.91631557,11.90909875,11.91098131,11.92369008,11.92886072,11.94235752,11.95424211,11.92391997,11.90245998,11.89126229,11.88948863,11.88476293,11.88336158,11.88242205,11.86893842,11.87721702,11.87627167,11.86671353,11.86692583,11.88182678,11.89322757,11.89918171,11.90124145],"lat":[44.83718712,44.83615751,44.83091519,44.82763544,44.82356566,44.80864267,44.81143715,44.80763727,44.7992902,44.78670852,44.78951789,44.78038969,44.78194058,44.78222806,44.78214377,44.77739289,44.80415071,44.80570489,44.80854682,44.80900031,44.82468914,44.83379877,44.83722146,44.83718712]}]],[[{"lng":[12.32705932,12.35519221,12.39672107,12.30854543,12.33974793,12.30860131,12.25892844,12.25139016,12.26728708,12.2769092,12.29514952,12.32705932],"lat":[44.85280887,44.8150811,44.79026219,44.80108155,44.8174571,44.84230958,44.81562576,44.82370862,44.83529015,44.89291497,44.8593028,44.85280887]}]],[[{"lng":[12.04109882,12.09503779,12.09821405,12.11224804,12.11347362,12.11299876,12.11189797,12.10061026,12.09692671,11.99426229,11.97689218,11.9020477,11.90841019,11.90800008,11.90703491,11.90175498,11.88998566,11.89126229,11.90245998,11.95205317,11.95424211,11.95470733,11.95572325,11.9620735,11.96866127,11.98838469,12.00979649,12.01528229,12.02541256,12.03646458,12.04109882],"lat":[44.82990394,44.83298511,44.79779631,44.76465573,44.75924803,44.7584058,44.75767065,44.75191052,44.75106535,44.75628134,44.76860965,44.74825746,44.77949938,44.77977988,44.78019157,44.7805105,44.77998099,44.78951789,44.78670852,44.80603304,44.80763727,44.80882249,44.81088465,44.81832673,44.82223346,44.819135,44.83076997,44.83213747,44.8340883,44.83656284,44.82990394]}]],[[{"lng":[12.00709432,12.02703335,12.02808748,12.04494077,12.05260979,12.05954275,12.06346011,12.06416889,12.06605201,12.06674406,12.06741183,12.06784039,12.06793762,12.06708633,12.06770309,12.06919911,12.07389016,12.07599118,12.07932422,12.09357849,12.10072366,12.11413598,12.06513599,12.05443282,12.04798569,11.96863315,11.9557717,11.95304343,11.95126355,11.96465081,11.98575574,11.97786122,11.930063,11.91623494,11.90903313,11.89511897,11.88413785,11.89777761,11.99981363,12.00219652,12.00554269,12.00709432],"lat":[44.59491252,44.57680345,44.56047662,44.5560087,44.55122159,44.54850625,44.54806804,44.54809377,44.54942623,44.54997934,44.55081197,44.55191595,44.55265237,44.55718004,44.55861283,44.56000398,44.56109301,44.56129746,44.56122557,44.55882961,44.55202059,44.54722736,44.49305199,44.49697096,44.49418954,44.49643407,44.50748982,44.50951398,44.51138752,44.53272728,44.54107136,44.5444825,44.55592633,44.55945158,44.56148089,44.56097052,44.57749784,44.58229262,44.6000191,44.60020257,44.59929106,44.59491252]}]],[[{"lng":[12.06513599,12.07131626,12.06984571,12.07506014,12.07716328,12.08142472,12.07431402,12.04234159,12.03789925,12.0372384,12.02811312,12.02119635,12.0039093,11.98769481,11.98379225,11.97763157,11.94511582,11.94489557,11.9430079,11.94051299,11.93927895,11.95548165,11.95029559,11.95205012,11.96252878,11.97422007,12.00332844,12.00399997,12.00712873,12.01917573,12.02647595,12.03022714,12.05443282,12.06513599],"lat":[44.49305199,44.49041261,44.47881459,44.47621456,44.47455963,44.46910109,44.45866859,44.43675997,44.4281459,44.42357932,44.41169753,44.39925145,44.38241262,44.37798624,44.37783592,44.3796173,44.40254434,44.40291012,44.40858541,44.41343006,44.41837724,44.44550643,44.45157325,44.45326537,44.46184325,44.46878612,44.48014103,44.48034896,44.48059532,44.48264864,44.48459345,44.48601068,44.49697096,44.49305199]}]],[[{"lng":[11.85106518,11.82527664,11.80927912,11.81444662,11.81721142,11.82629599,11.83685737,11.84642999,11.86098891,11.85243757,11.85106518],"lat":[44.38302943,44.37486621,44.38102276,44.39350347,44.39596957,44.40219531,44.4140453,44.40289676,44.39706818,44.38569592,44.38302943]}]],[[{"lng":[11.78142825,11.80389577,11.81068041,11.8110541,11.82674666,11.83562859,11.83645798,11.85439904,11.87640848,11.8940673,11.89563906,11.89593732,11.89643315,11.90460066,11.927582,11.91353675,11.88861015,11.86428841,11.85274257,11.83026499,11.82938009,11.82750811,11.82277296,11.82214849,11.8060783,11.78246647,11.77808629,11.77379729,11.77138614,11.75283866,11.74413429,11.73373357,11.72861269,11.71967372,11.71588519,11.67880649,11.65255628,11.61616647,11.5845742,11.61483927,11.62460403,11.63286402,11.65697252,11.65800742,11.66424209,11.6722663,11.67258743,11.6780187,11.68779176,11.69625013,11.6799676,11.69161771,11.70514844,11.73929138,11.78142825],"lat":[44.27656735,44.26799171,44.25083667,44.25053039,44.24238247,44.23674249,44.23497986,44.23005373,44.22026435,44.23418637,44.23506929,44.23503921,44.2349366,44.21089874,44.21534102,44.20785312,44.1706569,44.18007456,44.18602648,44.19863179,44.19896883,44.19843903,44.19480206,44.19456542,44.19947202,44.18071196,44.18094468,44.18683781,44.19887013,44.1934851,44.18068557,44.17492121,44.17183872,44.15723331,44.12255729,44.12291267,44.10115505,44.1184909,44.11220515,44.15792556,44.16287971,44.16874845,44.19782732,44.19887139,44.20420296,44.20977722,44.20995876,44.21299145,44.21566067,44.2260305,44.23219373,44.25160871,44.25028053,44.25566019,44.27656735]}]],[[{"lng":[11.68638208,11.6799676,11.68475215,11.69625013,11.68779176,11.68095614,11.6780187,11.67258743,11.65800742,11.64605193,11.63286402,11.62460403,11.52494706,11.53563487,11.56167682,11.5491291,11.55095516,11.55315131,11.55412103,11.55544123,11.56356676,11.56821249,11.57881047,11.59456339,11.59934959,11.60087659,11.60105567,11.60383914,11.60808209,11.61853892,11.62599231,11.63441586,11.66484934,11.68638208],"lat":[44.24354851,44.23219373,44.22893931,44.2260305,44.21566067,44.21262541,44.21299145,44.20995876,44.19887139,44.18366741,44.16874845,44.16287971,44.15766303,44.19038947,44.18549325,44.20502768,44.20855071,44.20876479,44.21104607,44.22317001,44.21878352,44.21949836,44.232201,44.23521561,44.23709184,44.23803388,44.23864514,44.24064468,44.24314063,44.24484134,44.24712789,44.25830881,44.25706675,44.24354851]}]],[[{"lng":[11.7945414,11.79589772,11.84809683,11.84592639,11.84570432,11.84505291,11.83982231,11.8330472,11.83241269,11.82313797,11.82136318,11.82062705,11.81170939,11.80787502,11.80494887,11.80189325,11.79352584,11.7704497,11.76724905,11.76171158,11.73649858,11.77443125,11.78880562,11.79376573,11.7945414],"lat":[44.36334336,44.35006601,44.32554532,44.32319575,44.32301223,44.3227674,44.32326226,44.3205768,44.32016043,44.30899284,44.30910874,44.31152165,44.31196675,44.31070173,44.30954932,44.30751774,44.29737426,44.28645825,44.2868735,44.28691759,44.30917276,44.33603834,44.36048578,44.36471274,44.36334336]}]],[[{"lng":[12.30716646,12.34772996,12.38352372,12.34933607,12.30245806,12.28365793,12.28024122,12.24712624,12.23964657,12.22985615,12.22923725,12.24427746,12.2503817,12.25414286,12.25519113,12.25951576,12.27159519,12.2746175,12.27868759,12.28678549,12.29070524,12.29760921,12.30460327,12.30716646],"lat":[44.30193812,44.30122982,44.22449406,44.19073231,44.21945002,44.23108598,44.23318922,44.23079669,44.21765017,44.21721017,44.2265632,44.24803108,44.25107131,44.25091011,44.25129433,44.2543625,44.28354151,44.30042395,44.30057715,44.30236975,44.30341812,44.30648673,44.3082783,44.30193812]}]],[[{"lng":[11.88413785,11.91623494,11.87305761,11.86553781,11.85374464,11.85113142,11.84330359,11.84093022,11.84555762,11.84758397,11.8468663,11.84488739,11.83738122,11.82765234,11.77868843,11.78919476,11.83198989,11.84958577,11.86031504,11.87082506,11.88413785],"lat":[44.57749784,44.55945158,44.5471513,44.508594,44.49637613,44.48792512,44.48936276,44.48533646,44.47788476,44.47193703,44.46873495,44.46900385,44.47045309,44.47312785,44.50351639,44.55434327,44.56161725,44.55606853,44.5596439,44.57743653,44.57749784]}]],[[{"lng":[11.94489557,11.97069828,11.97357212,11.97529157,11.9756433,11.97520477,11.97531738,11.98379225,11.98332185,11.96480981,11.94042103,11.93869969,11.93225284,11.92984872,11.92656098,11.92622654,11.92568886,11.91879094,11.90275865,11.87536653,11.8686649,11.85243757,11.86098891,11.86373905,11.88175276,11.90529101,11.92118306,11.94489557],"lat":[44.40291012,44.39416608,44.39166054,44.38545797,44.38323417,44.38201226,44.38175725,44.37783592,44.37623677,44.36931909,44.3797809,44.37724149,44.37332015,44.37318384,44.37470861,44.37479822,44.37458694,44.36585999,44.34440157,44.35530395,44.37942851,44.38569592,44.39706818,44.39604493,44.39616692,44.40042323,44.39502114,44.40291012]}]],[[{"lng":[11.98767068,12.00517611,12.01197043,12.01433522,12.02305442,12.03060917,12.01912649,12.01612071,12.02772379,12.01121345,12.00952618,12.00549649,12.00164829,11.99302361,11.97586245,11.97036627,11.96529098,11.94749363,11.93709389,11.92624774,11.92555256,11.92829151,11.927582,11.92329113,11.90460066,11.8957625,11.89593732,11.8940673,11.87640848,11.86677744,11.85439904,11.83645798,11.8358495,11.83562859,11.82674666,11.8110541,11.80946665,11.80389577,11.78491739,11.78142825,11.77655462,11.77614382,11.77385405,11.76112389,11.76500863,11.76724905,11.7704497,11.78422459,11.79031361,11.79352584,11.80123753,11.80189325,11.80494887,11.81170939,11.82062705,11.82112543,11.82112335,11.82136318,11.82313797,11.83125613,11.83220533,11.8330472,11.83982231,11.84570432,11.85763745,11.87052788,11.87536653,11.90275865,11.91879094,11.92622654,11.93225284,11.93869969,11.93948018,11.94042103,11.96480981,11.97788116,11.98767068],"lat":[44.37733834,44.35675387,44.35259969,44.35149294,44.35708697,44.35297047,44.3441372,44.33829046,44.32229417,44.30255611,44.30143027,44.2996009,44.29616413,44.27888946,44.25569716,44.25277041,44.25048065,44.23588461,44.23676039,44.24098218,44.22977358,44.21562754,44.21534102,44.21726369,44.21089874,44.22079229,44.23503921,44.23418637,44.22026435,44.22351358,44.23005373,44.23497986,44.23534608,44.23674249,44.24238247,44.25053039,44.25794271,44.26799171,44.27731503,44.27656735,44.27801391,44.27594427,44.27521671,44.27680375,44.28613555,44.2868735,44.28645825,44.29761952,44.29889326,44.29737426,44.30296047,44.30751774,44.30954932,44.31196675,44.31152165,44.31119424,44.31010497,44.30910874,44.30899284,44.31645301,44.31976045,44.3205768,44.32326226,44.32301223,44.33091548,44.35385929,44.35530395,44.34440157,44.36585999,44.37479822,44.37332015,44.37724149,44.37929199,44.3797809,44.36931909,44.37068024,44.37733834]}]],[[{"lng":[11.96830015,12.00031967,12.04798569,12.03022714,12.02647595,12.00399997,11.99398604,11.98499495,11.97932877,11.97422007,11.95205012,11.93317784,11.94166994,11.92515316,11.92534693,11.92635054,11.9557717,11.96830015],"lat":[44.49681182,44.49796398,44.49418954,44.48601068,44.48459345,44.48034896,44.47646147,44.47077341,44.47071931,44.46878612,44.45326537,44.46286251,44.47400503,44.48112744,44.48475046,44.48621012,44.50748982,44.49681182]}]],[[{"lng":[11.930063,11.98575574,11.96465081,11.95529678,11.95126355,11.9557717,11.95542851,11.94934841,11.92534693,11.94166994,11.93622096,11.93317784,11.95548165,11.9430079,11.92118306,11.86373905,11.84642999,11.84959742,11.85071281,11.83685737,11.84042771,11.83606603,11.84094371,11.84156333,11.8464013,11.85042672,11.85361945,11.85692395,11.85810253,11.85605744,11.85716168,11.86074638,11.8744633,11.87481596,11.88377847,11.87055193,11.87899262,11.88123568,11.85503076,11.85964277,11.86463562,11.86452639,11.86244998,11.85931516,11.85374464,11.87305761,11.90916244,11.91623494,11.930063],"lat":[44.55592633,44.54107136,44.53272728,44.51387192,44.51138752,44.50748982,44.50692256,44.50073766,44.48475046,44.47400503,44.46739351,44.46286251,44.44550643,44.40858541,44.39502114,44.39604493,44.40289676,44.40683287,44.40833546,44.4140453,44.42357008,44.425148,44.42806956,44.42815316,44.42817663,44.42750899,44.42649005,44.42549201,44.42544451,44.43271572,44.43397545,44.43328248,44.42809446,44.42811257,44.43868048,44.44416336,44.45609511,44.46157504,44.47016481,44.48478637,44.49036242,44.49052449,44.49178293,44.49351797,44.49637613,44.5471513,44.55212864,44.55945158,44.55592633]}]],[[{"lng":[12.44976033,12.45061646,12.45868135,12.47890083,12.50371424,12.48922941,12.47647696,12.46865279,12.46035876,12.45590659,12.45286646,12.45258985,12.45239574,12.45332885,12.45228993,12.4499932,12.44720995,12.44524974,12.4393894,12.44264495,12.42872041,12.44111578,12.44976033],"lat":[44.16246519,44.1622239,44.15580719,44.13893195,44.11556243,44.1084194,44.10961816,44.10978899,44.108605,44.10850194,44.10859482,44.10868236,44.10958661,44.11224813,44.11465629,44.11864194,44.1221381,44.12388981,44.12756866,44.14034887,44.14734463,44.15962478,44.16246519]}]],[[{"lng":[12.73838706,12.75564003,12.74147026,12.72709217,12.72068638,12.72042494,12.72087536,12.733187,12.73257949,12.71007826,12.73838706],"lat":[43.96818374,43.96250164,43.94092493,43.95430099,43.95277701,43.95407745,43.95597585,43.96171812,43.96296238,43.95852861,43.96818374]}],[{"lng":[12.7397576,12.73953828,12.73965462,12.7397576],"lat":[43.9385098,43.93827842,43.93843214,43.9385098]}]],[[{"lng":[12.54099326,12.55057407,12.57394702,12.5831308,12.59173589,12.59617426,12.6010526,12.605278,12.60679264,12.62853974,12.64172759,12.64024727,12.63488615,12.63425884,12.63422245,12.63574356,12.64318204,12.64183624,12.63768015,12.6358535,12.63407415,12.6317273,12.61615402,12.61179712,12.611425,12.60675825,12.60564729,12.59921107,12.56664948,12.5621478,12.55519959,12.51545171,12.51380886,12.54099326],"lat":[43.99199088,43.98665087,43.99238494,43.98197477,43.98236085,43.98386145,43.98561344,43.98834633,43.98999186,43.98781693,43.97918625,43.97883285,43.97418726,43.97335646,43.97270942,43.96763739,43.96509093,43.95844929,43.95646619,43.95668195,43.95723828,43.95768662,43.95590347,43.95770698,43.95737664,43.9510332,43.94858351,43.94419974,43.94097271,43.9423422,43.95209741,43.9413144,43.99230222,43.99199088]}]],[[{"lng":[12.60122382,12.58949226,12.53476267,12.53586465,12.56719124,12.60122382],"lat":[43.9129953,43.88564496,43.86852123,43.89722224,43.91513099,43.9129953]}]],[[{"lng":[12.68983377,12.72134652,12.68370859,12.68223534,12.68031825,12.65427392,12.6358342,12.63481318,12.63407415,12.64318204,12.63574356,12.63425884,12.64024727,12.64172759,12.64569939,12.65935747,12.6625515,12.66532289,12.67164503,12.67901513,12.68820202,12.68983377],"lat":[43.98621863,43.97270418,43.94927278,43.93715751,43.93425743,43.94529014,43.94802183,43.95558974,43.95723828,43.96509093,43.96763739,43.97335646,43.97883285,43.97918625,43.98149018,43.98530682,43.98164372,43.97613505,43.97345604,43.97455555,43.98712386,43.98621863]}]],[[{"lng":[12.6452987,12.65275787,12.65688221,12.68062873,12.68131705,12.61122756,12.6189025,12.62745946,12.63062279,12.63406428,12.64313075,12.62920235,12.64328164,12.6452987],"lat":[43.87669173,43.8704753,43.8585404,43.86407905,43.82807066,43.83078258,43.84262745,43.83699004,43.83685345,43.83845448,43.85665744,43.86785071,43.87734134,43.87669173]}]],[[{"lng":[12.60578454,12.6164591,12.61933961,12.61956767,12.62226613,12.63331539,12.63910659,12.64540746,12.65443532,12.60698522,12.58935966,12.60578454],"lat":[43.91193299,43.90957857,43.90474273,43.90242176,43.90187698,43.90315976,43.90491536,43.9051734,43.89836659,43.84497636,43.86525148,43.91193299]}]],[[{"lng":[12.72265323,12.7272118,12.68229503,12.69480651,12.71355717,12.72099816,12.72277419,12.72265323],"lat":[43.88056636,43.86321757,43.85279665,43.87372755,43.88104505,43.88165794,43.88107762,43.88056636]}]],[[{"lng":[12.67209505,12.66857391,12.66683986,12.66645945,12.6557395,12.65443532,12.64540746,12.63910659,12.62226613,12.61956767,12.61861818,12.61933961,12.62372289,12.64615532,12.66877455,12.67036209,12.67117472,12.67584352,12.67937294,12.6723104,12.67283877,12.67477969,12.67209505],"lat":[43.91268142,43.91263262,43.91243177,43.91229546,43.90570716,43.89836659,43.9051734,43.90491536,43.90187698,43.90242176,43.90319011,43.90474273,43.90405446,43.92000425,43.92376271,43.92456243,43.92511697,43.92987772,43.92560468,43.91673478,43.91563293,43.91403546,43.91268142]}]],[[{"lng":[12.63245342,12.68820202,12.67901513,12.65935747,12.64172759,12.62853974,12.61324152,12.61013886,12.60679264,12.605278,12.60453821,12.60306445,12.62088467,12.63245342],"lat":[44.02525111,43.98712386,43.97455555,43.98530682,43.97918625,43.98781693,43.98674037,43.98921533,43.98999186,43.98834633,43.98914051,43.99532084,44.00019067,44.02525111]}]],[[{"lng":[12.50892562,12.57547278,12.63214263,12.63225357,12.61833424,12.62088467,12.61311612,12.60711718,12.60549366,12.60459496,12.60306445,12.605278,12.59173589,12.57394702,12.56964154,12.55057407,12.53918703,12.51380886,12.4529499,12.46270122,12.44329244,12.4803741,12.49876132,12.46177345,12.47047892,12.47249876,12.47775187,12.47956947,12.45207991,12.4550878,12.45422976,12.45239009,12.45226026,12.45239574,12.45286646,12.45590659,12.46865279,12.47647696,12.48475936,12.48922941,12.50371424,12.50892562],"lat":[44.11163915,44.07850908,44.02551518,44.0250739,44.0132274,44.00019067,43.99433327,43.99352439,43.99423741,43.99549412,43.99532084,43.98834633,43.98236085,43.99238494,43.99249116,43.98665087,43.99383292,43.99230222,43.96938966,44.00158984,44.02309819,44.0107813,44.02752109,44.04768506,44.05566262,44.06761272,44.06775749,44.0681785,44.08719968,44.10311995,44.10731418,44.10838155,44.10937689,44.10958661,44.10859482,44.10850194,44.10978899,44.10961816,44.10845811,44.1084194,44.11556243,44.11163915]}]],[[{"lng":[12.7288339,12.72520556,12.72277419,12.71352346,12.71291186,12.71226606,12.70847715,12.70237126,12.69480651,12.68699421,12.67892707,12.66565094,12.65688221,12.6530748,12.65275787,12.64328164,12.64203718,12.66683986,12.67477969,12.68513353,12.6930883,12.70659919,12.71264962,12.71313668,12.71697599,12.72002856,12.7288339],"lat":[43.90843548,43.88380738,43.88107762,43.88102815,43.88035032,43.87739588,43.87533136,43.87433224,43.87372755,43.86096563,43.86561939,43.86678033,43.8585404,43.86273615,43.8704753,43.87734134,43.88083818,43.91243177,43.91403546,43.91406169,43.91307979,43.90902709,43.91125217,43.91152441,43.91495554,43.91617498,43.90843548]}],[{"lng":[12.63062279,12.61585495,12.6249145,12.62920235,12.64313075,12.63884724,12.63062279],"lat":[43.83685345,43.84646627,43.85376237,43.86785071,43.85665744,43.85391767,43.83685345]}]],[[{"lng":[12.63481318,12.6358342,12.64070981,12.67914618,12.67036209,12.65206215,12.64615532,12.64203155,12.62372289,12.6164591,12.60037674,12.6038628,12.60887958,12.60905438,12.60725388,12.60675825,12.611425,12.61615402,12.6317273,12.63481318],"lat":[43.95558974,43.94802183,43.94407619,43.93366052,43.92456243,43.92173297,43.92000425,43.9156525,43.90405446,43.90957857,43.91330111,43.93530664,43.94282754,43.945919,43.95018927,43.9510332,43.95737664,43.95590347,43.95768662,43.95558974]}]],[[{"lng":[12.733187,12.72042494,12.72709217,12.73732505,12.74147026,12.7296961,12.72002856,12.71697599,12.71264962,12.70792921,12.70659919,12.70529148,12.6930883,12.67283877,12.6723104,12.67937294,12.67584352,12.67914618,12.68031825,12.68185322,12.68223534,12.68234338,12.68137395,12.68370859,12.733187],"lat":[43.96171812,43.95407745,43.95430099,43.94258225,43.94092493,43.91241582,43.91617498,43.91495554,43.91125217,43.90938901,43.90902709,43.90902455,43.91307979,43.91563293,43.91673478,43.92560468,43.92987772,43.93366052,43.93425743,43.93608951,43.93715751,43.93822537,43.94395994,43.94927278,43.96171812]}]],[[{"lng":[12.43905525,12.47956947,12.47249876,12.46177345,12.49744531,12.49876132,12.49651602,12.48661384,12.4803741,12.46444947,12.45569868,12.43641293,12.426854,12.42883089,12.41908965,12.39804338,12.40009887,12.40003452,12.39529123,12.35917481,12.35906246,12.36352424,12.37047371,12.3737316,12.39264511,12.39987233,12.40394262,12.4091928,12.42531067,12.43905525],"lat":[44.08866886,44.0681785,44.06761272,44.04768506,44.02975339,44.02752109,44.02054509,44.01296479,44.0107813,44.01724179,44.02950715,44.03293111,44.02600727,44.04577212,44.05542731,44.04915079,44.04294963,44.03572227,44.03024571,44.05182297,44.05422855,44.05720459,44.066031,44.06634725,44.06367987,44.06648074,44.07257134,44.07733706,44.08849685,44.08866886]}]],[[{"lng":[12.45156466,12.41404947,12.39779765,12.40644426,12.40776082,12.40755545,12.40602378,12.40528438,12.40514077,12.40619624,12.41012221,12.41289601,12.41631406,12.43641293,12.44308051,12.46270122,12.45973365,12.45497913,12.45469226,12.45156466],"lat":[43.96808092,43.95230187,43.96225644,43.97163329,43.97742786,43.97920305,43.98149499,43.98338967,43.9876343,43.98995257,43.99383261,44.00022725,44.01239587,44.03293111,44.01426532,44.00158984,43.99615487,43.99541059,43.99514823,43.96808092]}],[{"lng":[12.40196321,12.38886197,12.41768131,12.4097355,12.40196321],"lat":[43.89159244,43.90150623,43.89904893,43.89759409,43.89159244]}]],[[{"lng":[12.15110249,12.19934776,12.19463264,12.16404775,12.12357752,12.10855363,12.10744557,12.10452099,12.09619099,12.10058925,12.10267699,12.10289302,12.1040904,12.1308041,12.15110249],"lat":[43.83215099,43.77037553,43.73192431,43.76226149,43.7491507,43.75306296,43.75377137,43.7577013,43.76530394,43.7761566,43.7916491,43.79227068,43.79411722,43.82475929,43.83215099]}]],[[{"lng":[12.34992395,12.34737169,12.29991611,12.29607842,12.27819001,12.2985406,12.29085769,12.28642117,12.28621035,12.28615682,12.28655183,12.28691897,12.28759156,12.29024478,12.29049825,12.29488992,12.29511335,12.29550105,12.29574328,12.2945376,12.29472915,12.29508287,12.29529492,12.2955321,12.29728188,12.3101867,12.31579703,12.32667324,12.33182932,12.33496774,12.33840731,12.34992395],"lat":[43.87480927,43.86702001,43.84803684,43.84741846,43.85723823,43.87276296,43.87556858,43.87653818,43.87677833,43.87755863,43.88089189,43.88168259,43.88259503,43.88421116,43.88451896,43.89169373,43.89213293,43.89306705,43.89452305,43.8994645,43.90067888,43.90144743,43.90167988,43.90191612,43.90316202,43.91273233,43.91704397,43.91146526,43.90684489,43.90178359,43.88814703,43.87480927]}]],[[{"lng":[12.24864767,12.25474197,12.26266923,12.26107958,12.26531143,12.27326609,12.29794085,12.29728188,12.29529492,12.29472915,12.29574328,12.29511335,12.29049825,12.29024478,12.28938784,12.28759156,12.28691897,12.28615682,12.28642117,12.2985406,12.28204799,12.27819001,12.27776547,12.27443176,12.27374322,12.2732768,12.27458279,12.26535139,12.25680046,12.24349818,12.24220714,12.24201814,12.23595779,12.23808153,12.24816891,12.2465673,12.22957421,12.22073015,12.20358558,12.20361195,12.21908817,12.22236137,12.22223625,12.23479725,12.24864767],"lat":[43.91206502,43.91232539,43.9065784,43.89645942,43.89529859,43.89539488,43.90398927,43.90316202,43.90167988,43.90067888,43.89452305,43.89213293,43.88451896,43.88421116,43.8837947,43.88259503,43.88168259,43.87755863,43.87653818,43.87276296,43.86518511,43.85723823,43.85766456,43.85518086,43.85442184,43.85317479,43.85021584,43.84246303,43.84619149,43.84852388,43.85081132,43.85828024,43.87009766,43.87386374,43.88365158,43.89030987,43.89381692,43.89407579,43.91232121,43.9129269,43.90805634,43.90887577,43.91528955,43.91695828,43.91206502]}],[{"lng":[12.3547572,12.3458597,12.33786864,12.33023233,12.32397354,12.32107797,12.31814878,12.31579703,12.3101867,12.29985267,12.29890111,12.29728271,12.29476195,12.2953326,12.32282757,12.3547572],"lat":[43.94969139,43.93713911,43.93121056,43.92641896,43.92302272,43.9215765,43.91952348,43.91704397,43.91273233,43.91716842,43.91932963,43.92356729,43.9281896,43.92954971,43.96060115,43.94969139]}]],[[{"lng":[12.34682571,12.3354392,12.28472572,12.28378091,12.19748776,12.20061444,12.23726152,12.22425876,12.23210763,12.2344934,12.23585891,12.23707071,12.25181649,12.25926142,12.26034405,12.26071077,12.26110324,12.26258732,12.26535139,12.27001293,12.27458279,12.2748936,12.27377733,12.2732768,12.27443176,12.29607842,12.32685948,12.34737169,12.34682571],"lat":[43.86332677,43.82411863,43.79466793,43.76491721,43.74502511,43.77459409,43.78700399,43.80985925,43.81926274,43.82038358,43.8224111,43.82343461,43.82671132,43.8325716,43.83509307,43.8365726,43.83783983,43.84036331,43.84246303,43.84473792,43.85021584,43.85140433,43.85231865,43.85317479,43.85518086,43.84741846,43.86616118,43.86702001,43.86332677]}]],[[{"lng":[12.40174298,12.41250256,12.40835559,12.40454807,12.38886197,12.38892087,12.4013109,12.40196321,12.40541326,12.4097355,12.41768131,12.43213625,12.40060855,12.39248593,12.35276198,12.34992395,12.34517434,12.34114494,12.33840731,12.33612746,12.33496774,12.33182932,12.32667324,12.32181701,12.31672714,12.31612023,12.31579703,12.31587678,12.31814878,12.32107797,12.3458597,12.36721664,12.38143752,12.39779765,12.40174298],"lat":[43.95938128,43.90940411,43.90297162,43.90631172,43.90150623,43.90122361,43.89160297,43.89159244,43.89500507,43.89759409,43.89904893,43.87256944,43.87277485,43.89656388,43.87110223,43.87480927,43.87772599,43.88340112,43.88814703,43.89362899,43.90178359,43.90684489,43.91146526,43.9125385,43.91568451,43.91619281,43.91704397,43.91719021,43.91952348,43.9215765,43.93713911,43.96203611,43.95956352,43.96225644,43.95938128]}]],[[{"lng":[12.1734315,12.20319861,12.20389776,12.22073015,12.2465673,12.23595779,12.24220714,12.24349818,12.26535139,12.2631194,12.26258732,12.26237317,12.26110324,12.26034405,12.25943803,12.25926142,12.25559906,12.25272836,12.25181649,12.25145153,12.24478081,12.2391778,12.23707071,12.23700943,12.23210763,12.21802779,12.17654137,12.16976948,12.13825978,12.14313652,12.14300235,12.14215528,12.147716,12.15243524,12.16805073,12.15922921,12.1734315],"lat":[43.92421937,43.91648858,43.90822057,43.89407579,43.89030987,43.87009766,43.85081132,43.84852388,43.84246303,43.84082526,43.84036331,43.84008583,43.83783983,43.83509307,43.83284566,43.8325716,43.82926393,43.82724354,43.82671132,43.82663169,43.82756874,43.82474332,43.82343461,43.82339359,43.81926274,43.80278974,43.81054074,43.82256809,43.84764094,43.85314073,43.85852831,43.86233261,43.86703063,43.86864499,43.89755736,43.92141467,43.92421937]}]],[[{"lng":[12.27719323,12.29476195,12.3101867,12.26107958,12.26362899,12.26266923,12.25474197,12.25561786,12.27018674,12.27719323],"lat":[43.92547378,43.9281896,43.91273233,43.89645942,43.90528604,43.9065784,43.91232539,43.92034228,43.92870686,43.92547378]}]],[[{"lng":[12.41661227,12.41908965,12.42883089,12.426854,12.41760707,12.41631406,12.41528577,12.41012221,12.40619624,12.40556753,12.40514077,12.4050558,12.40528438,12.40755545,12.40776082,12.40778075,12.40644426,12.40617336,12.40278208,12.39779765,12.38812494,12.38143752,12.37498494,12.37186789,12.36721664,12.35632004,12.33692626,12.32282757,12.34653033,12.34775636,12.34782577,12.35079357,12.3513065,12.3528725,12.36340394,12.36942346,12.38572597,12.3849341,12.38512402,12.38835373,12.39529123,12.40003452,12.39804338,12.41661227],"lat":[44.05554653,44.05542731,44.04577212,44.02600727,44.01470692,44.01239587,44.01013094,43.99383261,43.98995257,43.98899001,43.9876343,43.98636744,43.98338967,43.97920305,43.97742786,43.9769051,43.97163329,43.97103818,43.96644882,43.96225644,43.95990537,43.95956352,43.96178158,43.9624935,43.96203611,43.94963795,43.96154685,43.96060115,43.97397748,43.97595457,43.97697798,43.98465588,43.98523952,43.98606231,43.98674725,43.98977473,44.00978731,44.01581572,44.02046455,44.02590546,44.03024571,44.03572227,44.04915079,44.05554653]}]],[[{"lng":[12.55877624,12.56664948,12.59921107,12.60564729,12.60725388,12.60887958,12.60081785,12.60037674,12.58968208,12.58684559,12.56719124,12.56043321,12.54817696,12.53586465,12.49279229,12.51545171,12.53564838,12.55354931,12.55519959,12.55648827,12.55877624],"lat":[43.94899698,43.94097271,43.94419974,43.94858351,43.95018927,43.94282754,43.91380035,43.91330111,43.91583472,43.91738688,43.91513099,43.9090265,43.90408749,43.89722224,43.9159332,43.9413144,43.940758,43.95159064,43.95209741,43.95192221,43.94899698]}]]],null,null,{"lineCap":null,"lineJoin":null,"clickable":true,"pointerEvents":null,"className":"","stroke":true,"color":"white","weight":2,"opacity":1,"fill":true,"fillColor":["#2C7FB8","#2C7FB8","#2C7FB8","#A1DAB4","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#A1DAB4","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#A1DAB4","#A1DAB4","#FFFFCC","#2C7FB8","#A1DAB4","#A1DAB4","#2C7FB8","#253494","#2C7FB8","#2C7FB8","#A1DAB4","#2C7FB8","#2C7FB8","#2C7FB8","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#253494","#253494","#41B6C4","#253494","#41B6C4","#253494","#41B6C4","#2C7FB8","#A1DAB4","#253494","#253494","#41B6C4","#253494","#A1DAB4","#2C7FB8","#253494","#A1DAB4","#41B6C4","#A1DAB4","#2C7FB8","#41B6C4","#A1DAB4","#41B6C4","#41B6C4","#A1DAB4","#A1DAB4","#2C7FB8","#A1DAB4","#A1DAB4","#2C7FB8","#41B6C4","#A1DAB4","#A1DAB4","#2C7FB8","#2C7FB8","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#A1DAB4","#2C7FB8","#A1DAB4","#A1DAB4","#41B6C4","#A1DAB4","#41B6C4","#A1DAB4","#41B6C4","#A1DAB4","#A1DAB4","#41B6C4","#FFFFCC","#A1DAB4","#FFFFCC","#A1DAB4","#41B6C4","#A1DAB4","#A1DAB4","#41B6C4","#2C7FB8","#41B6C4","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#A1DAB4","#2C7FB8","#2C7FB8","#FFFFCC","#41B6C4","#A1DAB4","#A1DAB4","#41B6C4","#41B6C4","#A1DAB4","#A1DAB4","#253494","#2C7FB8","#2C7FB8","#253494","#A1DAB4","#41B6C4","#253494","#2C7FB8","#2C7FB8","#253494","#A1DAB4","#2C7FB8","#A1DAB4","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#253494","#253494","#2C7FB8","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#253494","#2C7FB8","#253494","#2C7FB8","#2C7FB8","#253494","#253494","#253494","#253494","#2C7FB8","#253494","#2C7FB8","#253494","#2C7FB8","#2C7FB8","#41B6C4","#253494","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#41B6C4","#2C7FB8","#2C7FB8","#A1DAB4","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#A1DAB4","#2C7FB8","#2C7FB8","#A1DAB4","#2C7FB8","#A1DAB4","#2C7FB8","#A1DAB4","#2C7FB8","#2C7FB8","#253494","#41B6C4","#2C7FB8","#A1DAB4","#41B6C4","#A1DAB4","#253494","#253494","#A1DAB4","#41B6C4","#A1DAB4","#A1DAB4","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#2C7FB8","#41B6C4","#A1DAB4","#253494","#2C7FB8","#41B6C4","#41B6C4","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#41B6C4","#253494","#2C7FB8","#A1DAB4","#2C7FB8","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#A1DAB4","#2C7FB8","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#2C7FB8","#A1DAB4","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#41B6C4","#2C7FB8","#2C7FB8","#41B6C4","#41B6C4","#A1DAB4","#253494","#41B6C4","#2C7FB8","#41B6C4","#41B6C4","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#253494","#2C7FB8","#41B6C4","#2C7FB8","#2C7FB8","#41B6C4","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#253494","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#A1DAB4","#A1DAB4","#A1DAB4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#2C7FB8","#41B6C4","#41B6C4","#2C7FB8","#A1DAB4","#2C7FB8","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#41B6C4","#2C7FB8","#41B6C4","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#A1DAB4","#A1DAB4","#41B6C4","#A1DAB4","#A1DAB4","#41B6C4","#A1DAB4","#2C7FB8","#41B6C4"],"fillOpacity":0.7,"dashArray":"3","smoothFactor":1,"noClip":false},["<h1>Comune di Agazzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Alseno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Besenzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bobbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Borgonovo Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cadeo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Calendasco<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Caminata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Caorso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Carpaneto Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castell'Arquato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel San Giovanni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castelvetro Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cerignale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Coli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Corte Brugnatella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cortemaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Farini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ferriere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">26.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fiorenzuola d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gazzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gossolengo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gragnano Trebbiense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gropparello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Lugagnano Val d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Monticelli d'Ongina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fontanellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fontevivo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">83.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fornovo di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Langhirano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Lesignano de' Bagni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Medesano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Mezzani<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Monchio delle Corti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montechiarugolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">86.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Neviano degli Arduini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Noceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Palanzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pellegrino Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Roccabianca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sala Baganza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">83.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Salsomaggiore Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Secondo Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">86.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Solignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Soragna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sorbolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Terenzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">27.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Tizzano Val Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Tornolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Massa Lombarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ravenna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Riolo Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Russi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sant'Agata sul Santerno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Solarolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bagno di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bertinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Borghi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castrocaro Terme e Terra del Sole<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cesena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cesenatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Civitella di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Dovadola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Forlì<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Forlimpopoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Galeata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gambettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gatteo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Longiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Meldola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Mercato Saraceno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">34.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Modigliana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Portico e San Benedetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Predappio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Premilcuore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">26.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Rocca San Casciano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Roncofreddo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Mauro Pascoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">52.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Santa Sofia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sarsina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Savignano sul Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sogliano al Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Tredozio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Verghereto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">19.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Morfasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Nibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ottone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pecorara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Piacenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pianello Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Piozzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Podenzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ponte dell'Olio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pontenure<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Rivergaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Rottofreno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Giorgio Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Pietro in Cerro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sarmato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Travo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Vernasca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Vigolzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Villanova sull'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Zerba<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ziano Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Albareto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bardi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bedonia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Berceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Borgo Val di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">27.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Busseto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Calestano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Collecchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Colorno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Compiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Corniglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Felino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fidenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Torrile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Traversetolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Valmozzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Varano de' Melegari<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Varsi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sissa Trecasali<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Polesine Zibello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Albinea<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bagnolo in Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Baiso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Boretto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">89.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Brescello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">89.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cadelbosco di Sopra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Campagnola Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Campegine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Carpineti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Casalgrande<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Casina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castellarano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castelnovo di Sotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castelnovo ne' Monti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cavriago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">90.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Canossa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Correggio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fabbrico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gattatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gualtieri<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">88.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Guastalla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">89.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Luzzara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montecchio Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Novellara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Poviglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">90.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Quattro Castella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Reggiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Reggio nell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Rio Saliceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Rolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Rubiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Martino in Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Polo d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sant'Ilario d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Scandiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Toano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Vetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Vezzano sul Crostolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Viano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Villa Minozzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ventasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">43.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bastiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bomporto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Campogalliano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Camposanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Carpi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castelfranco Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castelnuovo Rangone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castelvetro di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cavezzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Concordia sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fanano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Finale Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fiorano Modenese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fiumalbo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Formigine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Frassinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Guiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Lama Mocogno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Maranello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Marano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Medolla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">91.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Mirandola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montecreto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montefiorino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Nonantola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">83.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Novi di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">90.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Palagano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pavullo nel Frignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pievepelago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Polinago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Prignano sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ravarino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Riolunato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Cesario sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Felice sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Possidonio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Prospero<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">50.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sassuolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Savignano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Serramazzoni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sestola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Soliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">86.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Spilamberto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Vignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Zocca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Anzola dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Argelato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Baricella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bentivoglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Borgo Tossignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Budrio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Calderara di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Camugnano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Casalecchio di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Casalfiumanese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">52.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel d'Aiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel del Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel di Casio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel Guelfo di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castello d'Argile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel Maggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel San Pietro Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castenaso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castiglione dei Pepoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Crevalcore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Dozza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fontanelice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gaggio Montano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Galliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Granarolo dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Grizzana Morandi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Imola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Lizzano in Belvedere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Loiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Malalbergo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Marzabotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Medicina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Minerbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Molinella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">51.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Monghidoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Monterenzio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Monte San Pietro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Monzuno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Mordano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ozzano dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pianoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pieve di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sala Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Benedetto Val di Sambro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Giorgio di Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Giovanni in Persiceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Lazzaro di Savena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Pietro in Casale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sant'Agata Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sasso Marconi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Vergato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Zola Predosa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Valsamoggia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Alto Reno Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Argenta<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Berra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bondeno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Codigoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Comacchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">51.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Copparo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ferrara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Formignana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Jolanda di Savoia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Lagosanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Masi Torello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Mesola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Mirabello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ostellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Poggio Renatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Portomaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Ro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sant'Agostino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Vigarano Mainarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Voghiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Tresigallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Goro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fiscaglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Alfonsine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bagnacavallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bagnara di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Brisighella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Casola Valsenio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Castel Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cervia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Conselice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cotignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Faenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">50.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Fusignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Lugo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Bellaria-Igea Marina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Cattolica<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Coriano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Gemmano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.60 %<\/td><\/tr>\n <\/table>","<h1>Comune di Misano Adriatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Mondaino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montefiore Conca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montegridolfo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">51.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Morciano di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Riccione<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Rimini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Saludecio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Clemente<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Giovanni in Marignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Santarcangelo di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.50 %<\/td><\/tr>\n <\/table>","<h1>Comune di Verucchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.30 %<\/td><\/tr>\n <\/table>","<h1>Comune di Casteldelci<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.10 %<\/td><\/tr>\n <\/table>","<h1>Comune di Maiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.80 %<\/td><\/tr>\n <\/table>","<h1>Comune di Novafeltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.00 %<\/td><\/tr>\n <\/table>","<h1>Comune di Pennabilli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di San Leo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">32.40 %<\/td><\/tr>\n <\/table>","<h1>Comune di Sant'Agata Feltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.90 %<\/td><\/tr>\n <\/table>","<h1>Comune di Talamello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.20 %<\/td><\/tr>\n <\/table>","<h1>Comune di Poggio Torriana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.70 %<\/td><\/tr>\n <\/table>","<h1>Comune di Montescudo - Monte Colombo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.00 %<\/td><\/tr>\n <\/table>"],null,null,null,null]},{"method":"addTiles","args":["//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",null,null,{"minZoom":0,"maxZoom":18,"maxNativeZoom":null,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"continuousWorld":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":1,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false,"attribution":"© <a href=\"http://openstreetmap.org\">OpenStreetMap<\/a> contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA<\/a>"}]},{"method":"addLegend","args":[{"colors":["#FFFFCC","#A1DAB4","#41B6C4","#2C7FB8","#253494"],"labels":["0 – 20%","20 – 40%","40 – 60%","60 – 80%","80 – 100%"],"na_color":null,"na_label":"NA","opacity":1,"position":"bottomright","type":"bin","title":"RD 2016","extra":null,"layerId":null,"className":"info legend"}]}],"limits":{"lat":[43.73192431,45.13758885],"lng":[9.19939175,12.75564003]}},"evals":[],"jsHooks":[]}</script>
</div>
<div id="comuni-virtuosi-e-meno-virtuosi" class="section level2">
<h2>Comuni virtuosi e meno virtuosi</h2>
<p>Dal 2010 al 2016, in alcuni comuni la percentuale di raccolta differenziata è aumentata, in altri è diminuita.</p>
<div id="htmlwidget-faf949ac96595aa50dca" style="width:672px;height:480px;" class="leaflet html-widget"></div>
<script type="application/json" data-for="htmlwidget-faf949ac96595aa50dca">{"x":{"options":{"crs":{"crsClass":"L.CRS.EPSG3857","code":null,"proj4def":null,"projectedBounds":null,"options":{}}},"calls":[{"method":"addPolygons","args":[[[[{"lng":[9.51130347,9.51296324,9.51634547,9.52590567,9.5283935,9.53022486,9.54849497,9.5026311,9.48897744,9.47266024,9.46335405,9.45811599,9.45488877,9.45834272,9.45890519,9.45939059,9.46045051,9.46236501,9.46332169,9.47927954,9.48406032,9.49951447,9.51088791,9.51130347],"lat":[45.00105721,44.99545963,44.99629955,44.98873036,44.98613535,44.97994255,44.97908211,44.92808119,44.94557726,44.95413479,44.9540379,44.96013533,44.96088639,44.97746309,44.97801896,44.97844909,44.979354,44.98084958,44.98152087,44.99238328,44.9951717,45.00075381,45.01193781,45.00105721]}]],[[{"lng":[9.98821663,9.97940214,9.98740878,9.99912449,9.99828044,9.99262103,9.99391349,10.01089591,10.00947845,10.00325577,9.99463695,9.98350793,9.98433171,9.98668165,9.96510051,9.96268495,9.9551772,9.94849146,9.91911371,9.92424189,9.89260137,9.89019873,9.89507874,9.90485033,9.91498157,9.91831397,9.93326052,9.94680842,9.95586966,9.96022792,9.96630448,9.96653637,9.96933739,9.97402469,9.97563147,9.99057746,9.98821663],"lat":[44.94855966,44.9371221,44.93593178,44.92918255,44.92654337,44.914314,44.90771329,44.87564305,44.87422426,44.87238867,44.86738692,44.85759904,44.85172257,44.84556288,44.83608805,44.83614445,44.84042049,44.83771313,44.85766755,44.86879808,44.89149133,44.90074617,44.89934871,44.90136917,44.90046926,44.89657164,44.89433499,44.90803256,44.91514965,44.92352094,44.94132958,44.94155266,44.94079076,44.94364951,44.9502072,44.95241903,44.94855966]}]],[[{"lng":[9.997304,10.03102302,10.00442041,9.98740878,9.99057746,9.97998881,9.97563147,9.97314246,9.97425758,9.92885151,9.93848073,9.94079792,9.94193825,9.94848991,9.94561733,9.997304],"lat":[45.00114174,44.98383775,44.96836653,44.93593178,44.95241903,44.94851353,44.9502072,44.94994938,44.9589148,44.96262387,44.97773134,44.97982771,44.9797553,44.98817352,44.99089698,45.00114174]}]],[[{"lng":[9.57143265,9.61186792,9.61874029,9.62797083,9.64796743,9.65901338,9.659992,9.6606415,9.66299561,9.66368911,9.66446982,9.66947098,9.67154667,9.68374435,9.68425722,9.68460181,9.68435158,9.68359738,9.6828611,9.68137735,9.68055996,9.67994926,9.68093236,9.68067719,9.67900767,9.6509071,9.6514085,9.66284578,9.66559425,9.6663234,9.66789753,9.67021068,9.67015664,9.66111257,9.65584777,9.65229747,9.64672963,9.58503789,9.57101088,9.57934796,9.5679421,9.56564854,9.5434727,9.54082718,9.53924631,9.53254624,9.52257782,9.52189399,9.51002494,9.50187461,9.50116318,9.50150325,9.50302451,9.50618698,9.49749785,9.49830183,9.55919878,9.55834198,9.55891205,9.56795019,9.57143265],"lat":[44.83782725,44.83534023,44.82257421,44.8199582,44.82106178,44.8236182,44.82402664,44.82440998,44.82673689,44.82764208,44.83063524,44.83318065,44.83325848,44.8302154,44.82972622,44.82891395,44.82807825,44.82634537,44.82505346,44.823658,44.82191645,44.81407923,44.81057154,44.80392946,44.79958235,44.76641985,44.75706368,44.74296335,44.74030971,44.74000837,44.73921245,44.73537646,44.73288315,44.72277229,44.7194808,44.71815079,44.71703916,44.72309733,44.73097331,44.74256224,44.74129621,44.75349665,44.75850155,44.75798297,44.75646006,44.74778633,44.74202593,44.74183101,44.74231673,44.74633185,44.74879258,44.74940325,44.7507469,44.76614924,44.7721334,44.79067444,44.80388674,44.82779163,44.82918416,44.83879885,44.83782725]}]],[[{"lng":[9.47495487,9.47989254,9.4685394,9.46893451,9.45258503,9.45199472,9.45118105,9.44613728,9.44233247,9.4376896,9.4338203,9.4327003,9.41458061,9.44626723,9.40616679,9.40985596,9.40412696,9.40035283,9.39870411,9.39850832,9.39830786,9.39222728,9.3796218,9.35513748,9.34780391,9.33258079,9.32854716,9.28589944,9.32152808,9.35419431,9.36780556,9.3713794,9.37396196,9.37788388,9.3806361,9.39722527,9.41134601,9.41552174,9.42103947,9.43070359,9.44537432,9.44721106,9.44888315,9.47495487],"lat":[44.84490381,44.83151503,44.81835603,44.80955933,44.80149633,44.80139965,44.80143887,44.8032411,44.81332933,44.81145677,44.80477393,44.80380593,44.79632906,44.77744934,44.7670574,44.72762335,44.72459198,44.72663979,44.72928322,44.73019315,44.7304279,44.73512113,44.73882764,44.73986065,44.74278196,44.73504035,44.73606027,44.75942783,44.80003204,44.81186328,44.82536847,44.82641016,44.82672581,44.82680292,44.82790103,44.84520963,44.84508763,44.84684591,44.85212794,44.85491856,44.85524937,44.85545825,44.85727911,44.84490381]}],[{"lng":[9.48099204,9.48052555,9.48010248,9.48016569,9.4821116,9.48193514,9.48155359,9.48099204],"lat":[44.83014207,44.83014404,44.83032587,44.83127081,44.83090253,44.83040817,44.83016672,44.83014207]}]],[[{"lng":[9.50668711,9.52087886,9.52884409,9.53424656,9.53368861,9.53036686,9.52929976,9.53473271,9.53283315,9.51088791,9.50939575,9.50479506,9.49951447,9.46332169,9.45939059,9.45890519,9.45834272,9.45733306,9.45370398,9.449173,9.44060995,9.43286447,9.40158675,9.40144139,9.40902813,9.4182468,9.42557047,9.41453933,9.41873194,9.44324999,9.45579169,9.45675613,9.4583928,9.46107213,9.47034938,9.48778008,9.500302,9.50668711],"lat":[45.04625794,45.04216129,45.03882102,45.03704952,45.03575588,45.03615843,45.03600135,45.02943622,45.02308982,45.01193781,45.01146288,45.00852171,45.00075381,44.98152087,44.97844909,44.97801896,44.97746309,44.97649494,44.97304367,44.9693348,44.96423037,44.95406751,44.9683328,44.97112389,44.97336546,44.97496141,44.98263098,45.00550029,45.03121997,45.04074508,45.03764164,45.03768279,45.03913479,45.03927678,45.03309072,45.03527704,45.04630408,45.04625794]}]],[[{"lng":[9.86608404,9.86997691,9.9007028,9.8682944,9.86583672,9.84643429,9.84484485,9.8384588,9.82643191,9.80937256,9.81319714,9.81766789,9.82153374,9.82284929,9.80895486,9.8117291,9.81072238,9.81075383,9.81136175,9.83365345,9.84894251,9.85954975,9.86608404],"lat":[45.0078655,44.99678163,44.99523987,44.95340531,44.93581617,44.93501641,44.94762192,44.95042358,44.95066429,44.94462014,44.95066026,44.95214967,44.95387731,44.95633436,44.96180778,44.96881858,44.98376887,44.98510094,44.98593379,45.00988021,45.01659097,45.00961622,45.0078655]}]],[[{"lng":[9.63366875,9.63182778,9.67689296,9.67179083,9.66975088,9.6611495,9.65431152,9.64480396,9.63355863,9.57545086,9.57158695,9.55744662,9.53721564,9.55299541,9.58744699,9.61896546,9.63366875],"lat":[45.12913592,45.08676767,45.07760824,45.0726364,45.07200926,45.07192434,45.07051445,45.06664377,45.0559676,45.07023691,45.0994129,45.10750332,45.1260537,45.13064425,45.09962499,45.13354785,45.12913592]}]],[[{"lng":[9.31473275,9.31201249,9.30950524,9.2988341,9.29584277,9.28954634,9.29228315,9.29446007,9.31473275],"lat":[44.91208192,44.90569798,44.90584883,44.90968509,44.9093508,44.90924992,44.91237952,44.92303741,44.91208192]}],[{"lng":[9.30465602,9.29128997,9.28634581,9.29960399,9.30564301,9.30465602],"lat":[44.93265177,44.92507098,44.93395042,44.9347356,44.93396342,44.93265177]}]],[[{"lng":[9.84759674,9.88446455,9.91053777,9.90631807,9.89755196,9.89702115,9.89217245,9.89154758,9.887952,9.87593163,9.86722589,9.84130954,9.79750955,9.8008748,9.80212211,9.80789672,9.80935076,9.81171288,9.8202497,9.82375864,9.83127547,9.83258242,9.84759674],"lat":[45.09650368,45.06676743,45.05844292,45.04860154,45.04346775,45.033876,45.02739667,45.02721251,45.02864481,45.03286947,45.01962223,45.01969009,45.03527145,45.04426768,45.04828273,45.05076253,45.05031114,45.04672968,45.04787491,45.0525906,45.05776466,45.09092655,45.09650368]}]],[[{"lng":[9.81688337,9.82284929,9.81319714,9.80937256,9.84484485,9.84239226,9.84643429,9.84778366,9.84527989,9.85014994,9.85069832,9.85043699,9.84486068,9.84026,9.83720096,9.83475212,9.79698343,9.7857624,9.78193422,9.77685429,9.76578624,9.75563094,9.7503578,9.77001533,9.76795178,9.764038,9.76063632,9.75394379,9.73717654,9.73207677,9.75258092,9.75776565,9.76299154,9.78438619,9.79357152,9.7944576,9.7957968,9.79616349,9.80052849,9.80117635,9.80895486,9.81688337],"lat":[44.95940183,44.95633436,44.95066026,44.94462014,44.94762192,44.93853906,44.93501641,44.93482634,44.92803045,44.92143186,44.91480232,44.91426414,44.90894034,44.90921734,44.90792552,44.90611604,44.84431672,44.83893022,44.8402708,44.84639989,44.84576348,44.8307166,44.83185861,44.85451208,44.86684082,44.86762325,44.86404512,44.87012989,44.86962722,44.87476419,44.88794492,44.89414904,44.92635939,44.93976241,44.94317369,44.94308652,44.94277112,44.94270555,44.94213492,44.94223841,44.96180778,44.95940183]}]],[[{"lng":[9.87835114,9.89019873,9.92424189,9.90901028,9.92022574,9.90823856,9.86381862,9.86302176,9.86285739,9.86251992,9.8480273,9.84128318,9.83093003,9.83060839,9.83149518,9.82937516,9.82275713,9.82467993,9.81585697,9.81985338,9.83127393,9.83570122,9.83650521,9.83605341,9.83456685,9.83720096,9.84486068,9.85212177,9.85937181,9.87835114],"lat":[44.90291737,44.90074617,44.86879808,44.85061261,44.84092353,44.83497008,44.83070565,44.82986548,44.82732813,44.82675454,44.82098469,44.82603075,44.84499114,44.8465585,44.85470291,44.85656297,44.85664684,44.86012578,44.86811998,44.87409574,44.88884853,44.89534268,44.90051296,44.90268575,44.90551426,44.90792552,44.90894034,44.90310711,44.90938118,44.90291737]}]],[[{"lng":[9.4815741,9.48352062,9.47969833,9.48369378,9.48263648,9.47520873,9.4739373,9.47351662,9.47189918,9.46027722,9.4583928,9.45675613,9.45095242,9.44324999,9.41873194,9.41589365,9.40407522,9.40152442,9.36944768,9.37081994,9.41077773,9.4815741],"lat":[45.0937788,45.08771205,45.07882584,45.06635957,45.06297317,45.06223732,45.06271804,45.06269349,45.06207006,45.04761564,45.03913479,45.03768279,45.0401812,45.04074508,45.03121997,45.0188361,45.02382052,45.02559387,45.02372624,45.04815367,45.08275458,45.0937788]}]],[[{"lng":[9.97833635,10.02738823,10.02164955,10.02966821,10.0407025,10.03967154,10.00770094,9.99407801,9.99037825,9.98810347,9.96888497,9.96296699,9.95292467,9.95334767,9.95759279,9.96173162,9.96295819,9.96291948,9.96127346,9.96166795,9.9696506,9.97644994,9.96641607,9.97833635],"lat":[45.13373511,45.09764869,45.07588899,45.06680623,45.06377312,45.06225521,45.06365803,45.05302032,45.05560027,45.05628937,45.05544229,45.05621249,45.06101365,45.07041696,45.07435121,45.07645885,45.07914003,45.07986048,45.08620654,45.08949716,45.10410222,45.11078246,45.12747244,45.13373511]}]],[[{"lng":[9.36631689,9.38624462,9.38617638,9.39077576,9.39173294,9.39650818,9.39805704,9.40273962,9.39337447,9.38288932,9.37068207,9.37554509,9.33121292,9.31483315,9.3057747,9.29850587,9.36631689],"lat":[44.69001558,44.67118907,44.66170523,44.65737743,44.6571671,44.65840196,44.65802746,44.6166764,44.61825746,44.61839211,44.61717655,44.64041848,44.66425898,44.66381018,44.66564426,44.68102155,44.69001558]}]],[[{"lng":[9.50457469,9.50985614,9.51013108,9.51092831,9.51624284,9.49830183,9.49749785,9.50615519,9.50618698,9.50302451,9.4681667,9.46311933,9.46977193,9.46434487,9.46372169,9.47217792,9.46904612,9.45538968,9.44734537,9.42368751,9.41751358,9.40089891,9.40985596,9.4000628,9.40037633,9.40616679,9.44626723,9.43940376,9.41458061,9.4327003,9.4338203,9.43546501,9.4376896,9.44233247,9.44613728,9.45199472,9.4685394,9.47365422,9.47783901,9.47920544,9.49837297,9.50457469],"lat":[44.81933678,44.80499089,44.80318924,44.80182635,44.79517685,44.79067444,44.7721334,44.76639695,44.76614924,44.7507469,44.74568281,44.73687216,44.72552012,44.71640499,44.71425598,44.70151004,44.69976751,44.69662695,44.69276072,44.70910915,44.71076131,44.71428672,44.72762335,44.73585915,44.74651673,44.7670574,44.77744934,44.78571297,44.79632906,44.80380593,44.80477393,44.80825151,44.81145677,44.81332933,44.8032411,44.80139965,44.81835603,44.81897409,44.81723726,44.81729455,44.8209664,44.81933678]}]],[[{"lng":[9.35454606,9.37726204,9.3796218,9.39222728,9.40089891,9.44734537,9.43955224,9.41710252,9.40061547,9.39322099,9.38624462,9.37191476,9.36735282,9.36631689,9.36633188,9.36317925,9.30943511,9.31258182,9.32591046,9.32957528,9.33258079,9.33485793,9.34780391,9.35454606],"lat":[44.74022259,44.73915956,44.73882764,44.73512113,44.71428672,44.69276072,44.68859589,44.68340471,44.68417492,44.68231912,44.67118907,44.67931169,44.68619526,44.69001558,44.69042991,44.69278931,44.70234602,44.71710124,44.72309553,44.72806327,44.73504035,44.7386166,44.74278196,44.74022259]}],[{"lng":[9.29534259,9.30055988,9.3026008,9.28986246,9.29534259],"lat":[44.70494899,44.70436527,44.70326456,44.70082197,44.70494899]}],[{"lng":[9.30022428,9.29893978,9.30420301,9.30412176,9.30022428],"lat":[44.69246735,44.69372283,44.69655519,44.69369829,44.69246735]}]],[[{"lng":[9.88749854,9.8869939,9.88393778,9.88125811,9.90762024,9.9202954,9.9326514,9.93431595,9.93429038,9.92893764,9.94794766,9.98922918,9.9908842,9.997304,9.94561733,9.94848991,9.92885151,9.92525028,9.92548507,9.91542398,9.91312831,9.90813078,9.90175401,9.90287844,9.90516656,9.90716962,9.91193187,9.89523985,9.9007028,9.86997691,9.84894251,9.83365345,9.84130954,9.84593661,9.85515446,9.86722589,9.87134149,9.87593163,9.887952,9.88749854],"lat":[45.02558773,45.02332319,45.01938608,45.01762442,45.00968537,45.02698445,45.0233825,45.02271177,45.02191982,45.01193543,45.005766,45.01705521,45.00410522,45.00114174,44.99089698,44.98817352,44.96262387,44.96103275,44.95877167,44.97627157,44.97697368,44.96810166,44.97275665,44.97359845,44.97394041,44.97469869,44.97946858,44.98419519,44.99523987,44.99678163,45.01659097,45.00988021,45.01969009,45.02189736,45.02465527,45.01962223,45.0215173,45.03286947,45.02864481,45.02558773]}]],[[{"lng":[9.54369919,9.56564854,9.5679421,9.57406685,9.57934796,9.57680691,9.57101088,9.58503789,9.59784905,9.61326247,9.62014137,9.62709791,9.63938917,9.64367757,9.65229747,9.65447955,9.66182134,9.66265411,9.6645641,9.66570419,9.66762784,9.66988105,9.67521222,9.65355534,9.63503128,9.6248772,9.63179549,9.60217492,9.58917884,9.58001449,9.56538483,9.56494977,9.53551969,9.52727735,9.51075193,9.51101594,9.50948551,9.49201211,9.48859114,9.48430842,9.46904612,9.46372169,9.46977193,9.46339665,9.46311933,9.46706255,9.4681667,9.47680134,9.48220367,9.50150325,9.52189399,9.53254624,9.53812388,9.53889918,9.54082718,9.54369919],"lat":[44.75840145,44.75349665,44.74129621,44.74499251,44.74256224,44.73599446,44.73097331,44.72309733,44.7262538,44.72218405,44.72546875,44.72652004,44.71888997,44.71734448,44.71815079,44.71123354,44.70630298,44.70627115,44.70550385,44.70475002,44.70298333,44.70025144,44.68761677,44.67172757,44.66328882,44.65626895,44.64061171,44.6294917,44.64568743,44.64870952,44.68275789,44.69601149,44.69766567,44.69622764,44.6900101,44.68001209,44.67798863,44.67817326,44.68097868,44.68640734,44.69976751,44.71425598,44.72552012,44.72889502,44.73687216,44.74503917,44.74568281,44.74498991,44.74297773,44.74940325,44.74183101,44.74778633,44.75259439,44.75581354,44.75798297,44.75840145]}]],[[{"lng":[9.46904612,9.48430842,9.49201211,9.49968836,9.50824499,9.50873783,9.50948551,9.51018285,9.52727735,9.56494977,9.58001449,9.58917884,9.59290835,9.5968424,9.60217492,9.60228557,9.60176595,9.58907722,9.58497462,9.58094846,9.57837114,9.57661884,9.57616241,9.56328414,9.55869394,9.55383365,9.55255787,9.55236407,9.54909803,9.54598661,9.54141006,9.54003787,9.53914212,9.53229683,9.51474364,9.49782023,9.49333844,9.47653603,9.440233,9.42307656,9.42130623,9.40562892,9.39538737,9.39486331,9.39485413,9.3949326,9.39514899,9.3985851,9.40273962,9.40387965,9.40635433,9.39805704,9.38617638,9.3857631,9.38624462,9.38647141,9.39322099,9.41710252,9.43955224,9.46904612],"lat":[44.69976751,44.68640734,44.67817326,44.67727571,44.67752603,44.67761386,44.67798863,44.67837261,44.69622764,44.69601149,44.64870952,44.64568743,44.63562583,44.63196835,44.6294917,44.62922104,44.62895371,44.62458165,44.62275723,44.61466658,44.6115018,44.61017829,44.60990151,44.60745407,44.6045058,44.59960511,44.59794583,44.58945742,44.58778969,44.58781363,44.58878966,44.58889521,44.58875539,44.58549258,44.56331431,44.55714606,44.55587663,44.56519509,44.56680821,44.57461223,44.5926043,44.6008068,44.61038235,44.61115837,44.61166254,44.61208538,44.61239972,44.61542162,44.6166764,44.61749159,44.63797688,44.65802746,44.66170523,44.66893102,44.67118907,44.67300672,44.68231912,44.68340471,44.68859589,44.69976751]}]],[[{"lng":[9.90516656,9.90813078,9.91066704,9.91312831,9.91542398,9.9185732,9.92548507,9.92490939,9.92525028,9.92885151,9.93735425,9.97425758,9.97314246,9.97563147,9.97501147,9.97402469,9.97103684,9.96933739,9.96852496,9.96653637,9.96630448,9.96553114,9.96022792,9.95629875,9.95586966,9.9554415,9.93326052,9.93059028,9.91831397,9.91498157,9.85937181,9.85212177,9.84581737,9.84486068,9.85069832,9.85014994,9.84527989,9.84778366,9.86583672,9.8682944,9.8724308,9.88673309,9.88937722,9.89445632,9.90516656],"lat":[44.97394041,44.96810166,44.96890964,44.97697368,44.97627157,44.96086668,44.95877167,44.96021216,44.96103275,44.96262387,44.95918768,44.9589148,44.94994938,44.9502072,44.94578355,44.94364951,44.9416045,44.94079076,44.94071665,44.94155266,44.94132958,44.94056195,44.92352094,44.91581221,44.91514965,44.9145411,44.89433499,44.89367264,44.89657164,44.90046926,44.90938118,44.90310711,44.90507139,44.90894034,44.91480232,44.92143186,44.92803045,44.93482634,44.93581617,44.95340531,44.95865791,44.97105141,44.97556779,44.98367419,44.97394041]}]],[[{"lng":[9.59136813,9.59298537,9.59744969,9.5976321,9.54095712,9.5324975,9.52062392,9.51986019,9.51643243,9.51624914,9.51500318,9.50227733,9.50195602,9.50273574,9.50328558,9.50560252,9.506174,9.49596505,9.49846352,9.50941679,9.50931643,9.5310562,9.53304902,9.54849497,9.55971635,9.56871022,9.57584637,9.59136813],"lat":[44.98820301,44.93578554,44.92998302,44.92801963,44.91117138,44.90186706,44.89986935,44.89944974,44.89430714,44.8851439,44.88316006,44.88747471,44.88838534,44.88921909,44.88982881,44.89266322,44.89429005,44.90444411,44.9092043,44.91740178,44.92889777,44.94478621,44.95467005,44.97908211,44.97929712,44.98532055,44.98732822,44.98820301]}]],[[{"lng":[9.59973809,9.62113313,9.61502343,9.63104726,9.66592648,9.67325907,9.67051697,9.6641015,9.63122603,9.62751525,9.60699387,9.59415449,9.59973809],"lat":[45.03026942,45.02981057,45.0113176,45.00083529,44.99661009,45.00397105,44.9929779,44.96583869,44.97086815,44.97015045,44.95662347,44.95697905,45.03026942]}]],[[{"lng":[9.60272934,9.59973809,9.597898,9.59031942,9.59136813,9.55971635,9.53022486,9.52590567,9.51634547,9.51296324,9.51135663,9.51105967,9.51088791,9.54744182,9.55001675,9.57785261,9.60510266,9.6155048,9.60272934],"lat":[45.03242376,45.03026942,45.02685003,45.00077507,44.98820301,44.97929712,44.97994255,44.98873036,44.99629955,44.99545963,44.99863414,45.00030424,45.01193781,45.02749464,45.04038185,45.03216977,45.04320436,45.04230261,45.03242376]}]],[[{"lng":[9.73345731,9.73717654,9.75257014,9.75394379,9.76063632,9.764038,9.76757447,9.76795178,9.76927249,9.77069149,9.77001533,9.76289297,9.75236561,9.74980589,9.7503578,9.75131592,9.75563094,9.74301028,9.73972904,9.734822,9.70697425,9.7020077,9.70082856,9.68922688,9.68879173,9.67390067,9.66721954,9.6663234,9.66559425,9.6509071,9.65943105,9.67900767,9.68067719,9.68093236,9.67995471,9.67994926,9.68055996,9.6828611,9.68435158,9.68374435,9.68404563,9.68639919,9.73345731],"lat":[44.87182065,44.86962722,44.87060705,44.87012989,44.86404512,44.86762325,44.8670234,44.86684082,44.86335712,44.85586684,44.85451208,44.84706115,44.83935317,44.83222234,44.83185861,44.83160025,44.8307166,44.81335327,44.80103261,44.7969593,44.7880699,44.78571495,44.78476796,44.77115523,44.76537842,44.7475168,44.74075495,44.74000837,44.74030971,44.76641985,44.78257492,44.79958235,44.80392946,44.81057154,44.81346705,44.81407923,44.82191645,44.82505346,44.82807825,44.8302154,44.83215806,44.8375272,44.87182065]}]],[[{"lng":[9.82483615,9.83149518,9.8480273,9.8401081,9.78441995,9.7838721,9.78336482,9.78303749,9.78247962,9.77964649,9.77612175,9.77348532,9.76313087,9.7619278,9.76056053,9.75414339,9.73761572,9.73160438,9.73059641,9.72171335,9.72045198,9.71549177,9.71134172,9.71842938,9.6973972,9.7020077,9.70697425,9.734822,9.73972904,9.73983482,9.74054675,9.74301028,9.75471751,9.75563094,9.75615488,9.76127899,9.76499654,9.76578624,9.76659781,9.77685429,9.7808149,9.78193422,9.78272589,9.7857624,9.79054252,9.79698343,9.79763838,9.81585697,9.82467993,9.82212058,9.82275713,9.82353262,9.82483615],"lat":[44.8551105,44.85470291,44.82098469,44.81305831,44.79779066,44.79187999,44.78895777,44.78812282,44.78706439,44.78319481,44.77788563,44.77520521,44.77088067,44.77044075,44.77003392,44.76850548,44.76615378,44.76343777,44.76366927,44.77077449,44.78316049,44.78518496,44.78199385,44.76887773,44.77693905,44.78571495,44.7880699,44.7969593,44.80103261,44.80436272,44.80762589,44.81335327,44.82858013,44.8307166,44.83305368,44.84173367,44.84537269,44.84576348,44.84589307,44.84639989,44.84451844,44.8402708,44.83986928,44.83893022,44.84059863,44.84431672,44.84501432,44.86811998,44.86012578,44.85727258,44.85664684,44.85600211,44.8551105]}]],[[{"lng":[9.91740731,9.96641607,9.97644994,9.96166795,9.96127346,9.96295819,9.96173162,9.95759279,9.95373697,9.95334767,9.95279523,9.95068084,9.95292467,9.95373486,9.95468802,9.96296699,9.9869864,9.98810347,9.99037825,9.96889912,9.9540591,9.95428751,9.94528809,9.93841282,9.93644524,9.93547691,9.93195799,9.92788433,9.92669055,9.91053777,9.88446455,9.90083231,9.87571294,9.91972011,9.91740731],"lat":[45.09962939,45.12747244,45.11078246,45.08949716,45.08620654,45.07914003,45.07645885,45.07435121,45.0709088,45.07041696,45.06927834,45.06389107,45.06101365,45.06008871,45.05936061,45.05621249,45.05640349,45.05628937,45.05560027,45.04123735,45.0413983,45.03833579,45.03769951,45.04428251,45.05520881,45.05813333,45.06277101,45.0629932,45.05828598,45.05844292,45.06676743,45.09469338,45.12250596,45.13758885,45.09962939]}]],[[{"lng":[10.17550401,10.18072316,10.18302229,10.18716251,10.18756938,10.1827518,10.20825719,10.21244203,10.2114106,10.22014631,10.23845548,10.24558612,10.2399881,10.24228456,10.2229968,10.17545583,10.17442734,10.16829898,10.16797131,10.16604536,10.1683807,10.15905978,10.10491279,10.10603066,10.10274895,10.10225341,10.11534743,10.12621887,10.13804579,10.14150158,10.14727561,10.149435,10.15984714,10.17559377,10.17550401],"lat":[44.91777194,44.91526057,44.91740623,44.91727326,44.91672891,44.90422112,44.89912903,44.89395351,44.89127285,44.88996457,44.89184632,44.89049108,44.87690493,44.87065956,44.86432327,44.86567776,44.87174672,44.87165205,44.87113779,44.86478401,44.85883679,44.838371,44.85449941,44.85736024,44.86843751,44.87736912,44.88890283,44.9008228,44.90395528,44.90704448,44.91584456,44.91866748,44.91791405,44.92279412,44.91777194]}]],[[{"lng":[10.17442734,10.24228456,10.24578524,10.22378613,10.15905978,10.16203701,10.1683807,10.16604536,10.16797131,10.17442734],"lat":[44.87174672,44.87065956,44.86393269,44.82270715,44.838371,44.85304117,44.85883679,44.86478401,44.87113779,44.87174672]}]],[[{"lng":[10.17700427,10.18654406,10.17460832,10.16605529,10.16617972,10.16971873,10.16984632,10.16977733,10.16649214,10.16347191,10.16203434,10.12743429,10.1088937,10.10850466,10.10773538,10.10719224,10.09140684,10.07068704,10.04504759,10.01871842,10.03699716,10.03853144,10.03861736,10.03926713,10.04657616,10.0489148,10.06001564,10.06746864,10.06513576,10.0708033,10.08064328,10.08441544,10.08809219,10.08950221,10.09059715,10.09048069,10.09116961,10.09129901,10.09513175,10.11714306,10.12097093,10.1222075,10.15020862,10.17700427],"lat":[44.70914994,44.70218898,44.691179,44.67814126,44.67616847,44.67209022,44.67155,44.65826647,44.65475315,44.65243514,44.65119316,44.65259329,44.63407684,44.63371603,44.63349843,44.63344518,44.63395723,44.64352489,44.62154444,44.62963246,44.63947863,44.6413732,44.64336195,44.64514751,44.65399312,44.65569113,44.66133213,44.66605197,44.6673881,44.6738258,44.67989071,44.68121431,44.68215158,44.68332645,44.68788019,44.68974478,44.69148466,44.69367098,44.69747827,44.71057048,44.71201833,44.71133102,44.68965391,44.70914994]}]],[[{"lng":[10.29339209,10.29322782,10.30889617,10.29198212,10.28865808,10.28677955,10.27820557,10.27513613,10.27925516,10.27916219,10.2639102,10.25268451,10.25084407,10.24720128,10.24533801,10.24124685,10.19275251,10.17364657,10.16689854,10.16807447,10.16867655,10.17475055,10.17101493,10.21126966,10.19758677,10.23867623,10.26263904,10.27227722,10.29339209],"lat":[44.69130871,44.67428716,44.66259045,44.65608949,44.65573995,44.655203,44.64881757,44.6409298,44.62965773,44.61893239,44.60398261,44.59026053,44.58778702,44.58110201,44.57701722,44.57231743,44.55446913,44.56086081,44.57214261,44.57237364,44.57288063,44.58876621,44.59737494,44.61930812,44.63701616,44.65235903,44.67282903,44.67337921,44.69130871]}]],[[{"lng":[10.33566753,10.3438819,10.32287976,10.34435066,10.34060526,10.33834994,10.31145049,10.30606143,10.2643384,10.23908791,10.24124685,10.24533801,10.25084407,10.25268451,10.26312281,10.2639102,10.26789925,10.27446728,10.27916219,10.27513613,10.27820557,10.30722168,10.30889617,10.32116695,10.32655631,10.33566753],"lat":[44.66355395,44.63708061,44.61951007,44.61222843,44.60534959,44.60371959,44.59619955,44.58370288,44.56645554,44.57088248,44.57231743,44.57701722,44.58778702,44.59026053,44.60308208,44.60398261,44.60789047,44.61332685,44.61893239,44.6409298,44.64881757,44.66154703,44.66259045,44.67123062,44.66739615,44.66355395]}]],[[{"lng":[10.15081171,10.16020277,10.18100409,10.18266581,10.17323246,10.17064286,10.16970809,10.16902228,10.16145843,10.15519901,10.14096351,10.10680908,10.09576043,10.09513175,10.09129901,10.09116961,10.02182372,10.01838589,10.00576832,9.98649598,9.98322481,9.98460259,9.9919232,9.99616616,10.00883434,10.03414078,10.0389517,10.04128853,10.04222129,10.04871141,10.06813047,10.07148553,10.07701198,10.07886485,10.07972434,10.07965699,10.07940046,10.07840079,10.07048605,10.06949021,10.06975816,10.07266017,10.09359388,10.09747284,10.11448994,10.13974154,10.14689718,10.15081171],"lat":[44.78183996,44.77866618,44.77046798,44.77015371,44.75550539,44.74300986,44.74112897,44.74031678,44.73474056,44.73054599,44.72397342,44.70489162,44.69802138,44.69747827,44.69367098,44.69148466,44.71098607,44.71723736,44.72500113,44.72558335,44.74864835,44.75018485,44.75718826,44.76073421,44.76697855,44.77166739,44.77426136,44.77067521,44.7698385,44.76674533,44.76930202,44.76895551,44.76640991,44.7634847,44.76078491,44.76056049,44.76035588,44.7602753,44.75999868,44.75944086,44.75889822,44.75799778,44.75722308,44.75723087,44.75846141,44.78003352,44.78267152,44.78183996]}]],[[{"lng":[10.44165634,10.50431523,10.49604931,10.48979751,10.47839704,10.47084819,10.46768488,10.44288758,10.41514343,10.41087276,10.40451512,10.39285882,10.38944832,10.38725383,10.40977123,10.41348703,10.40721232,10.42319101,10.41293173,10.41366834,10.42516317,10.44165634],"lat":[44.94083646,44.9224276,44.90838229,44.90469219,44.9071494,44.903241,44.90337172,44.91130347,44.88133194,44.89050384,44.89126806,44.89234536,44.892711,44.89308876,44.89828619,44.90468567,44.91365169,44.93141803,44.94972936,44.95391514,44.96020821,44.94083646]}]],[[{"lng":[10.13295932,10.13659816,10.14678007,10.14987698,10.15385797,10.166665,10.16966848,10.17660615,10.1465145,10.15994194,10.14203472,10.09827285,10.05317828,10.07095713,10.08699629,10.0896528,10.10058707,10.10109299,10.11820699,10.13295932],"lat":[44.45308742,44.44123073,44.43895029,44.43611932,44.42970524,44.42693732,44.42705965,44.41667126,44.39270586,44.38078621,44.35386763,44.34629331,44.37303332,44.42636247,44.42831758,44.43005679,44.43899966,44.43917485,44.43539847,44.45308742]}]],[[{"lng":[10.40653779,10.42611124,10.42565282,10.42753553,10.43521631,10.43991014,10.44146491,10.44590389,10.44707085,10.44733705,10.4470557,10.4465913,10.44579423,10.42851981,10.41896062,10.41539095,10.36745315,10.35877301,10.35401282,10.35438867,10.35276212,10.33113044,10.3344007,10.33362594,10.33904509,10.37165819,10.38653888,10.40653779],"lat":[44.7451277,44.74394896,44.73866138,44.7376656,44.73568784,44.73194683,44.73047785,44.72667679,44.72334016,44.71933078,44.71766893,44.71676559,44.71568641,44.69401926,44.67623284,44.66685726,44.6695694,44.67277883,44.67856986,44.6827875,44.68392307,44.68101747,44.69488505,44.699038,44.7194818,44.70449297,44.7382428,44.7451277]}]],[[{"lng":[10.34106318,10.39911447,10.39872478,10.40270676,10.40160063,10.39695556,10.36332812,10.34194066,10.33846374,10.338144,10.34003189,10.33990572,10.33515431,10.33212414,10.33240608,10.33217288,10.3316066,10.32400949,10.30313379,10.2705655,10.27708178,10.26851609,10.23274645,10.23479937,10.24930463,10.25548213,10.25568171,10.25600517,10.25602568,10.25517921,10.25195457,10.24166097,10.24010964,10.23762451,10.22948078,10.26355234,10.2643384,10.26485195,10.27264295,10.27341103,10.27955842,10.28191891,10.28795098,10.29442611,10.30606143,10.30995238,10.31145049,10.34106318],"lat":[44.59831329,44.58793913,44.58373973,44.57017817,44.56292673,44.55766317,44.54292736,44.52510357,44.51615081,44.51207639,44.50606753,44.50550185,44.4958887,44.48765068,44.48622498,44.48537245,44.48480289,44.47903951,44.47014435,44.49008069,44.50037901,44.50972015,44.50536752,44.5183631,44.52596554,44.53472031,44.53522224,44.53738831,44.5377572,44.53995412,44.53922429,44.54102017,44.54913931,44.55388348,44.56377532,44.56621217,44.56645554,44.56690899,44.57425849,44.57482609,44.57781823,44.57751267,44.57802995,44.57928009,44.58370288,44.59401114,44.59619955,44.59831329]}]],[[{"lng":[10.13084037,10.15905978,10.17267556,10.18369354,10.22378613,10.22048545,10.21353331,10.19210791,10.18627549,10.18216355,10.16020277,10.14689718,10.13974154,10.12753165,10.11448994,10.09359388,10.06975816,10.07048605,10.07648475,10.07840079,10.07940046,10.07972434,10.07148553,10.06813047,10.0599446,10.04871141,10.04128853,10.04876975,10.05263269,10.05647278,10.06317686,10.0642763,10.06595168,10.06645099,10.06661241,10.06575282,10.09205502,10.09470007,10.09307307,10.09400843,10.094839,10.10499846,10.10491279,10.13084037],"lat":[44.84644347,44.838371,44.83465798,44.83156478,44.82270715,44.81194892,44.80547846,44.78192041,44.77733602,44.77031196,44.77866618,44.78267152,44.78003352,44.76703852,44.75846141,44.75722308,44.75889822,44.75999868,44.76051843,44.7602753,44.76035588,44.76078491,44.76895551,44.76930202,44.76670463,44.76674533,44.77067521,44.77974399,44.78004198,44.77935791,44.7789536,44.77894335,44.77932382,44.77967024,44.78019987,44.78362873,44.80495842,44.80775077,44.83587999,44.84072317,44.84248862,44.847729,44.85449941,44.84644347]}]],[[{"lng":[10.2705655,10.2874748,10.30313379,10.29716909,10.2888146,10.28543038,10.28427512,10.26755326,10.25624303,10.25542784,10.25464862,10.23607579,10.23098276,10.230591,10.22972841,10.22981911,10.22573912,10.22381127,10.21397231,10.2080714,10.20525275,10.15994194,10.1465145,10.1766565,10.17660615,10.16966848,10.15385797,10.13659816,10.14099201,10.14905848,10.18933979,10.21607691,10.22510567,10.22743678,10.22915544,10.22983583,10.2705655],"lat":[44.49008069,44.4830403,44.47014435,44.467275,44.46182396,44.45998054,44.4594624,44.45860491,44.45279713,44.45229294,44.45170732,44.43577703,44.42962917,44.42892218,44.42673031,44.4256265,44.41434493,44.4104404,44.4016327,44.39433101,44.39220011,44.38078621,44.39270586,44.41604954,44.41667126,44.42705965,44.42970524,44.44123073,44.461542,44.46783501,44.46401061,44.47199346,44.47150083,44.47054853,44.470368,44.47051372,44.49008069]}]],[[{"lng":[10.29159996,10.29684848,10.31295284,10.32543358,10.34192922,10.35468876,10.36130695,10.36446475,10.37897472,10.39405617,10.40651542,10.41614404,10.39570745,10.38442173,10.41580504,10.44207566,10.43749401,10.43728215,10.43770836,10.43733454,10.43608556,10.42883025,10.42484092,10.42351513,10.42728629,10.42681686,10.42743559,10.42791023,10.42969763,10.42611124,10.40244727,10.38653888,10.38084637,10.37165819,10.35881981,10.33904509,10.33362594,10.33333936,10.3344007,10.33113044,10.30889617,10.30589154,10.29322782,10.29715875,10.29345278,10.29795413,10.28517347,10.28037823,10.27499967,10.25826177,10.24225625,10.24478639,10.28318844,10.26008272,10.2384203,10.23259548,10.24283663,10.21353331,10.22011586,10.23901528,10.24578524,10.2399881,10.27417876,10.28359531,10.29159996],"lat":[44.90097133,44.88541036,44.8841911,44.88124728,44.878417,44.87560173,44.87402129,44.87033616,44.87414975,44.880052,44.88007023,44.88139146,44.85370142,44.82475914,44.83240651,44.8196098,44.80818986,44.8067882,44.80103946,44.80024297,44.79984459,44.79993561,44.79967039,44.79820157,44.7737226,44.76697682,44.75977632,44.75750183,44.75313139,44.74394896,44.7484461,44.7382428,44.72938155,44.70449297,44.70769826,44.7194818,44.699038,44.69750817,44.69488505,44.68101747,44.66259045,44.66641903,44.67428716,44.68962244,44.69176714,44.70416689,44.70943312,44.70780357,44.70776473,44.71306368,44.72381662,44.72933446,44.7652514,44.77556305,44.77363164,44.77488295,44.79922186,44.80547846,44.8112147,44.84100624,44.86393269,44.87690493,44.87893207,44.88789164,44.90097133]}]],[[{"lng":[9.90110351,9.90641503,9.91188129,9.92340608,9.92275572,9.92367592,9.93228568,9.93725869,9.9417944,9.95200628,9.97828034,9.98460259,9.98649598,9.97670309,9.96961993,9.96730419,9.96709661,9.89990441,9.8994155,9.87624159,9.87363433,9.86292349,9.84708137,9.84574639,9.84513902,9.85503883,9.85943483,9.85015228,9.84411554,9.83203383,9.84978305,9.85524753,9.86500696,9.88066133,9.87252041,9.87333358,9.87667338,9.87811146,9.87863506,9.90110351],"lat":[44.80411342,44.79853492,44.79960765,44.80000118,44.7933088,44.79076276,44.78609267,44.77938135,44.76138462,44.75864879,44.75358803,44.75018485,44.72558335,44.7251994,44.72903172,44.72344294,44.70795175,44.71637803,44.7125289,44.69823335,44.70069296,44.70190868,44.70704158,44.70812274,44.70889244,44.72964105,44.73313694,44.75037372,44.75223695,44.75194752,44.76655349,44.76778199,44.7621091,44.76868712,44.78277504,44.78473129,44.78741537,44.79388588,44.79756374,44.80411342]}]],[[{"lng":[10.22901463,10.26511448,10.25719945,10.25562628,10.25458478,10.25374202,10.25179823,10.23739026,10.23480907,10.24379984,10.2299982,10.2330611,10.23441476,10.23676048,10.23930326,10.24015553,10.24275715,10.24360372,10.24437422,10.24534274,10.24476492,10.24218372,10.23923708,10.23452911,10.23326899,10.23166324,10.22728463,10.21680496,10.20306742,10.19580077,10.19280384,10.18937311,10.17688183,10.17584564,10.17645421,10.17669254,10.17909691,10.1815596,10.18210603,10.16803355,10.17779791,10.17992611,10.18094596,10.22901463],"lat":[45.02790937,45.004778,45.00200582,45.0008529,44.9996401,44.99415821,44.9911189,44.97947449,44.9827161,45.00020818,44.99381332,44.9775049,44.97557287,44.97436823,44.97348548,44.97301714,44.97134149,44.97061213,44.96988358,44.9660022,44.96449618,44.96416422,44.96805806,44.97085463,44.97122833,44.9714527,44.96474842,44.96626487,44.96482611,44.96233688,44.96211619,44.96237702,44.9622814,44.9624541,44.97113467,44.97162731,44.97385299,44.97643808,44.97710756,44.99173641,45.01260143,45.02110061,45.03046292,45.02790937]}]],[[{"lng":[10.19062188,10.22718837,10.23489937,10.23908694,10.24478639,10.24225625,10.22784245,10.18539961,10.18327996,10.18212314,10.18147228,10.17290751,10.16352331,10.16347191,10.16977733,10.16984632,10.16617972,10.16605529,10.18654406,10.18354836,10.1694046,10.19062188],"lat":[44.73602061,44.72614897,44.7258229,44.73151197,44.72933446,44.72381662,44.69785686,44.65940174,44.65681302,44.6499652,44.64830649,44.63983799,44.6519432,44.65243514,44.65826647,44.67155,44.67616847,44.67814126,44.70218898,44.70876722,44.71165864,44.73602061]}]],[[{"lng":[10.01546121,10.02076368,10.02579045,10.04253732,10.04938264,10.05055059,10.0513617,10.05148394,10.0413598,10.02482577,10.03414078,9.98460259,9.97828034,9.9417944,9.92367592,9.92340608,9.90641503,9.90130918,9.90110351,9.90032548,9.93691155,9.94849146,9.9551772,9.96510051,9.97311543,9.98668165,9.99107621,10.00709891,10.01190427,10.01446521,10.01512274,10.01546121],"lat":[44.85375453,44.84299478,44.84532628,44.8386391,44.83796426,44.8374854,44.83686579,44.83663062,44.7922168,44.78304013,44.77166739,44.75018485,44.75358803,44.76138462,44.79076276,44.80000118,44.79853492,44.80354452,44.80411342,44.8077743,44.83681792,44.83771313,44.84042049,44.83608805,44.84323071,44.84556288,44.84577687,44.85247827,44.85371409,44.85397044,44.85393759,44.85375453]}]],[[{"lng":[10.23289158,10.23440673,10.23310224,10.24119487,10.24442392,10.25915999,10.24443532,10.24558612,10.23845548,10.22578323,10.22014631,10.2114106,10.2102433,10.21244203,10.20825719,10.1995397,10.1827518,10.18716251,10.17559377,10.15984714,10.15458492,10.20306742,10.23166324,10.23289158],"lat":[44.96485906,44.95628186,44.94273004,44.93947368,44.9434444,44.93624333,44.90172014,44.89049108,44.89184632,44.89183063,44.88996457,44.89127285,44.89177134,44.89395351,44.89912903,44.90200256,44.90422112,44.91727326,44.92279412,44.91791405,44.91959674,44.96482611,44.9714527,44.96485906]}]],[[{"lng":[10.09048069,10.09059715,10.08999452,10.08950221,10.08882108,10.03699716,10.02004698,10.01871842,10.01297468,10.01193638,10.0058629,9.9835358,9.95955219,9.9478188,9.92631507,9.92578164,9.92742088,9.915264,9.91142676,9.90356431,9.93566693,9.92443076,9.91097462,9.90122204,9.88817029,9.88804777,9.88795415,9.90885266,9.94707611,9.952011,9.95936443,9.96350403,9.97196287,9.97552689,9.97780256,9.99042018,9.99158543,9.98798116,10.00914698,10.01162819,10.01621242,10.03927635,10.04494545,10.05329354,10.09048069],"lat":[44.68974478,44.68788019,44.68468111,44.68332645,44.68266677,44.63947863,44.62990868,44.62963246,44.62991763,44.62965675,44.62691066,44.61338541,44.59504438,44.60568426,44.59043046,44.58777905,44.58628935,44.59093368,44.60013789,44.61305589,44.61868498,44.65019494,44.66042176,44.6543145,44.65505591,44.65529094,44.65576879,44.68066698,44.6785829,44.67122592,44.66857774,44.66868692,44.66304277,44.65818712,44.65775355,44.66099369,44.67163338,44.68299858,44.6781863,44.66560605,44.66228849,44.66119868,44.66712452,44.68227981,44.68974478]}]],[[{"lng":[10.17688183,10.19280384,10.20306742,10.20319144,10.17678161,10.16172096,10.15630243,10.15510572,10.15458492,10.149435,10.14907565,10.13804579,10.12621887,10.10829925,10.10180727,10.10915444,10.10830146,10.10029657,10.09055917,10.08195274,10.07437836,10.07402957,10.08444729,10.13564019,10.14585635,10.18186879,10.1815596,10.17669254,10.17645421,10.17688183],"lat":[44.9622814,44.96211619,44.96482611,44.96408663,44.93070363,44.92162182,44.91994843,44.91966349,44.91959674,44.91866748,44.91843705,44.90395528,44.9008228,44.8839033,44.89603784,44.9053378,44.90709248,44.91347077,44.91336664,44.9151589,44.91729186,44.91761022,44.93259907,44.95645004,44.98526371,44.97729006,44.97643808,44.97162731,44.97113467,44.9622814]}]],[[{"lng":[10.45059666,10.46768488,10.47839704,10.48979751,10.4637302,10.47431294,10.4643141,10.45265323,10.45490031,10.45516736,10.45471607,10.44207566,10.41580504,10.38442173,10.39570745,10.40949558,10.41589819,10.41614404,10.41514343,10.41530531,10.42207277,10.44288758,10.45059666],"lat":[44.91006253,44.90337172,44.9071494,44.90469219,44.89777374,44.87581668,44.85303062,44.84687811,44.83805898,44.83299188,44.8306751,44.8196098,44.83240651,44.82475914,44.85370142,44.86418988,44.88009831,44.88139146,44.88133194,44.8843186,44.89482989,44.91130347,44.91006253]}]],[[{"lng":[10.1467738,10.16347191,10.17290751,10.16198624,10.15386829,10.13930001,10.12256051,10.11147019,10.10767249,10.10730236,10.09614197,10.08937333,10.04976706,10.02126749,9.97764833,9.9835358,9.9868448,9.99485267,9.99809256,10.00396344,10.01193638,10.04504759,10.05967948,10.07068704,10.08393021,10.09140684,10.10773538,10.12743429,10.1467738],"lat":[44.65303987,44.65243514,44.63983799,44.62090954,44.61691376,44.61556562,44.61609151,44.61197784,44.60496131,44.6013144,44.58979089,44.5867408,44.57936961,44.56297337,44.60652208,44.61338541,44.61528339,44.61776161,44.62118688,44.62568504,44.62965675,44.62154444,44.63941445,44.64352489,44.64084327,44.63395723,44.63349843,44.65259329,44.65303987]}]],[[{"lng":[10.23665776,10.24010964,10.24011181,10.23978774,10.24166097,10.25195457,10.25338314,10.25517921,10.25600517,10.24930463,10.23479937,10.23274645,10.24570378,10.26851609,10.27093765,10.24407441,10.22915544,10.22510567,10.21607691,10.19505884,10.18933979,10.14905848,10.13676822,10.13802132,10.12530247,10.13241404,10.14203871,10.14261318,10.15236095,10.15464534,10.15612723,10.15943553,10.16582154,10.17038079,10.17362893,10.1746097,10.18873297,10.18974039,10.19275251,10.23665776],"lat":[44.5550528,44.54913931,44.54687064,44.5452447,44.54102017,44.53922429,44.54009988,44.53995412,44.53738831,44.52596554,44.5183631,44.50536752,44.50411059,44.50972015,44.49157998,44.48206294,44.470368,44.47150083,44.47199346,44.46643563,44.46401061,44.46783501,44.48464893,44.49408021,44.50422616,44.51742568,44.52582829,44.52624566,44.53240449,44.5333627,44.53383384,44.53462288,44.53536475,44.53680805,44.53813859,44.53871368,44.54809222,44.5493421,44.55446913,44.5550528]}]],[[{"lng":[9.631837,9.64517122,9.64525733,9.64338962,9.64099804,9.64209262,9.65552543,9.66027708,9.65645413,9.62352494,9.55917752,9.47903434,9.47256479,9.4383937,9.46887309,9.50394878,9.51141107,9.5208454,9.52766495,9.53310942,9.53584527,9.53784605,9.54158421,9.55830404,9.55890163,9.56601575,9.57795886,9.58441074,9.5928022,9.60532648,9.60604442,9.60381868,9.60593033,9.61782521,9.61651934,9.631837],"lat":[44.49205165,44.48678256,44.48546769,44.48258838,44.48008107,44.47784228,44.47501115,44.47059046,44.45817079,44.42161514,44.43813525,44.40925851,44.42428409,44.41854155,44.48188067,44.48020985,44.47247938,44.45497153,44.44886339,44.44793783,44.44896935,44.44923902,44.44847414,44.44013813,44.44482564,44.4580426,44.4660222,44.46266737,44.45354939,44.45067486,44.45568555,44.46405185,44.46766876,44.477526,44.48837225,44.49205165]}]],[[{"lng":[11.77379612,11.77868843,11.79074597,11.81964347,11.82765234,11.84488739,11.8468663,11.84758397,11.84093022,11.84330359,11.85374464,11.86452639,11.85964277,11.85588346,11.85555953,11.85503076,11.85207787,11.85685127,11.84965442,11.83856056,11.84977073,11.85423919,11.85361945,11.84094371,11.84042771,11.82731895,11.80225615,11.80147459,11.799092,11.78133445,11.79891166,11.78828281,11.78038132,11.79670582,11.74977277,11.77379612],"lat":[44.5056708,44.50351639,44.49813017,44.4850106,44.47312785,44.46900385,44.46873495,44.47193703,44.48533646,44.48936276,44.49637613,44.49052449,44.48478637,44.47166489,44.4709528,44.47016481,44.46452207,44.45661187,44.44701873,44.4373411,44.43290123,44.42706207,44.42649005,44.42806956,44.42357008,44.4177489,44.42739207,44.42773084,44.43048558,44.43626721,44.46076546,44.46351931,44.46724107,44.48569339,44.49756929,44.5056708]}]],[[{"lng":[12.26873132,12.28916365,12.34772996,12.2746175,12.25951576,12.25519113,12.2503817,12.24427746,12.23182186,12.22985615,12.22624686,12.21314686,12.20727142,12.20167298,12.20083453,12.20997879,12.20881951,12.18892537,12.17124083,12.16119637,12.1506214,12.14504873,12.1032467,12.09677615,12.08693829,12.07706875,12.07274262,12.06858862,12.06444968,12.05453684,12.0472839,12.04951693,12.04930248,12.03558723,12.05055784,12.05923985,12.1034085,12.07435339,12.09664898,12.10006811,12.10584644,12.0808206,12.07704684,12.06832375,12.06442281,12.06384066,12.06347498,12.05063127,12.04437299,12.02811312,12.04234159,12.08142472,12.06984571,12.06513599,12.10451201,12.11413598,12.11701718,12.125991,12.13072211,12.15378113,12.23708404,12.26873132],"lat":[44.62922093,44.46346822,44.30122982,44.30042395,44.2543625,44.25129433,44.25107131,44.24803108,44.21774843,44.21721017,44.21412036,44.22083578,44.22046667,44.22618754,44.23011823,44.2380178,44.2556056,44.25426993,44.24424262,44.25095701,44.25252784,44.25442808,44.27197532,44.29610128,44.30052389,44.2985983,44.29922352,44.30033458,44.30221931,44.30566301,44.31680885,44.32394655,44.32513162,44.33080882,44.33724258,44.34643588,44.36197901,44.3708678,44.36944572,44.38237507,44.38960001,44.40201321,44.40303329,44.40059893,44.40002856,44.39999469,44.40004051,44.40592115,44.40583171,44.41169753,44.43675997,44.46910109,44.47881459,44.49305199,44.54379866,44.54722736,44.54672558,44.54575089,44.54571119,44.54845202,44.62058595,44.62922093]}]],[[{"lng":[11.68048385,11.68319509,11.68394277,11.68497436,11.69755091,11.69777196,11.69814202,11.69731845,11.69156114,11.69110619,11.70265859,11.71388159,11.73297199,11.73649858,11.76724905,11.76562682,11.76500863,11.76437143,11.76111149,11.76112389,11.76148842,11.76591841,11.76557088,11.73929138,11.69161771,11.68638208,11.66484934,11.63243541,11.63994473,11.66544235,11.67153902,11.66763231,11.66759797,11.68048385],"lat":[44.31439468,44.31428597,44.31411534,44.31381199,44.30933822,44.30896388,44.30719061,44.30460829,44.29837478,44.28951783,44.28793949,44.29833242,44.30607388,44.30917276,44.2868735,44.28648969,44.28613555,44.28537676,44.27707413,44.27680375,44.27656085,44.27563435,44.27410331,44.25566019,44.25160871,44.24354851,44.25706675,44.25994799,44.27374235,44.27871802,44.28822193,44.31136925,44.31185619,44.31439468]}]],[[{"lng":[12.04437299,12.04668847,12.05063127,12.06384066,12.07704684,12.10584644,12.10006811,12.09952876,12.09664898,12.09170879,12.08264459,12.07864433,12.07435339,12.10104636,12.1034085,12.07985249,12.06966138,12.05923985,12.05055784,12.04107819,12.02918485,12.01612071,12.01912649,12.03060917,12.02305442,12.01433522,12.01197043,12.00517611,11.99830915,11.99397101,11.98767068,11.98769481,12.0039093,12.02811312,12.04437299],"lat":[44.40583171,44.40721481,44.40592115,44.39999469,44.40303329,44.38960001,44.38237507,44.37553429,44.36944572,44.37100207,44.37503287,44.37580705,44.3708678,44.36441091,44.36197901,44.35003162,44.3478035,44.34643588,44.33724258,44.33366948,44.32811412,44.33829046,44.3441372,44.35297047,44.35708697,44.35149294,44.35259969,44.35675387,44.36851305,44.37338313,44.37733834,44.37798624,44.38241262,44.41169753,44.40583171]}]],[[{"lng":[11.87101595,11.87055193,11.88376221,11.87481596,11.8744633,11.86074638,11.85716168,11.85605744,11.85887605,11.85692395,11.84977073,11.83856056,11.85685127,11.85503076,11.88123568,11.87101595],"lat":[44.44568211,44.44416336,44.43886093,44.42811257,44.42809446,44.43328248,44.43397545,44.43271572,44.42662246,44.42549201,44.43290123,44.4373411,44.45661187,44.47016481,44.46157504,44.44568211]}]],[[{"lng":[11.86193699,11.86122626,11.87536653,11.87052788,11.86883379,11.86097176,11.85763745,11.84809683,11.79589772,11.80088919,11.79376573,11.79953351,11.79892461,11.7999721,11.801667,11.8026701,11.80366933,11.80447297,11.80640813,11.80785534,11.80927912,11.80968989,11.82527664,11.86193699],"lat":[44.38201011,44.37154893,44.35530395,44.35385929,44.35256952,44.34184667,44.33091548,44.32554532,44.35006601,44.35963258,44.36471274,44.37211108,44.37845935,44.37943294,44.37970194,44.3796458,44.37940971,44.37911988,44.37791548,44.37753328,44.38102276,44.38094963,44.37486621,44.38201011]}]],[[{"lng":[12.10999539,12.1124835,12.10806392,12.09961184,12.08859112,12.08356766,12.08287665,12.07101432,12.06880128,12.08424666,12.06033368,12.05495173,12.05446542,12.03996411,12.03728036,12.0346257,12.03046608,12.02173281,12.02110047,12.0193954,12.01809896,12.00568253,11.99879734,11.99676252,11.99523462,11.98625539,11.98209439,11.96168234,11.91878774,11.90974763,11.84167455,11.788468,11.78981575,11.7894628,11.79042681,11.84007386,11.81592787,11.88474958,11.86710685,11.91341897,11.94678948,11.95205894,11.956102,11.95815037,11.9587225,11.95945853,11.98533638,12.00151948,12.00206737,12.00494264,12.00849189,12.00762279,12.00872504,12.01103565,12.02522278,12.03073254,12.03125268,12.03130357,12.03127006,12.02816456,12.0308448,12.05002297,12.05225622,12.05127048,12.0548749,12.05722615,12.06085362,12.10278146,12.10999539],"lat":[43.94872623,43.94471358,43.93069023,43.92554522,43.92801366,43.92578165,43.92181195,43.90212685,43.8915357,43.87337436,43.86623017,43.8614856,43.85976102,43.85133396,43.84454499,43.84003297,43.83674025,43.83227206,43.83132545,43.8258786,43.82433733,43.82001021,43.81933594,43.81992054,43.81995163,43.81792703,43.81052709,43.79020687,43.7936882,43.8127191,43.80802426,43.84508476,43.8476903,43.85399219,43.85678665,43.87543267,43.88466476,43.89051842,43.91769314,43.93767807,43.90702137,43.90575533,43.90723078,43.9088613,43.90909856,43.90912451,43.90664116,43.90925989,43.90950657,43.91145664,43.9146673,43.92805978,43.93607947,43.93841337,43.94103631,43.94133133,43.94053426,43.94006475,43.93401558,43.93051477,43.92074734,43.91849,43.91905152,43.92948541,43.93151375,43.92974921,43.92930991,43.95030748,43.94872623]}]],[[{"lng":[12.20167298,12.20727142,12.21314686,12.21276359,12.19798157,12.17399591,12.18370533,12.18609714,12.17385222,12.1691554,12.16695755,12.16453302,12.15715972,12.16047629,12.15098842,12.14650232,12.14183279,12.12512231,12.12021822,12.11948347,12.11866885,12.10204613,12.09944015,12.0991767,12.09951064,12.10095217,12.10318035,12.10396455,12.0806399,12.08109705,12.0842802,12.08841585,12.09010416,12.09159776,12.09065393,12.08810954,12.08709233,12.08739258,12.10064497,12.11868328,12.13154534,12.1549231,12.15872012,12.16070106,12.16178756,12.16111634,12.168071,12.1708443,12.18785545,12.20028641,12.20167298],"lat":[44.22618754,44.22046667,44.22083578,44.21517948,44.19615202,44.17957706,44.17123374,44.15902288,44.14892689,44.14210854,44.13826658,44.12487865,44.12182344,44.10839581,44.10599417,44.11117444,44.11207029,44.1055479,44.10702368,44.10288566,44.10268129,44.10590715,44.10935402,44.10981132,44.11165684,44.11222087,44.11849831,44.12440085,44.14331416,44.14658219,44.14696437,44.14642941,44.14643771,44.14750462,44.15217562,44.15421611,44.15581012,44.15964619,44.15766642,44.16512438,44.17702495,44.17369826,44.17710431,44.18233408,44.18533791,44.19500745,44.20802158,44.21747843,44.22131074,44.23016961,44.22618754]}]],[[{"lng":[12.35898127,12.35917481,12.35989964,12.36423456,12.38117602,12.39529123,12.38572597,12.37680796,12.36942346,12.36682555,12.36340394,12.35467271,12.3528725,12.35342768,12.35343662,12.35328541,12.35131599,12.33626523,12.32492041,12.32360904,12.31387334,12.35394805,12.35810689,12.35898127],"lat":[44.05259391,44.05182297,44.05051423,44.04683041,44.0363726,44.03024571,44.00978731,44.00035995,43.98977473,43.98771772,43.98674725,43.98592387,43.98606231,43.98811645,43.98834148,43.98874204,43.98983521,43.98992505,43.98777132,44.01362081,44.02717416,44.05274194,44.05432118,44.05259391]}]],[[{"lng":[11.92317787,11.93710791,11.9355263,11.9381345,11.94982144,11.96235442,11.96973817,11.96767656,11.97142515,11.98557048,11.9690249,11.91091479,11.91139094,11.90830475,11.90705566,11.90590478,11.90763966,11.91229635,11.9082308,11.9078758,11.89536406,11.88959451,11.88879442,11.88861015,11.92317787],"lat":[44.20599601,44.20218044,44.1917599,44.1901263,44.20738027,44.20572327,44.19406184,44.18311407,44.17505807,44.15989732,44.15789815,44.13040571,44.13475097,44.13808867,44.14014614,44.14493794,44.14665834,44.14883534,44.15792383,44.15830198,44.16379667,44.16958766,44.1705082,44.1706569,44.20599601]}]],[[{"lng":[12.29033551,12.30245806,12.34933607,12.33287143,12.33517779,12.33810214,12.36183932,12.3621776,12.32584533,12.32226793,12.33150796,12.31794422,12.30241586,12.29199043,12.28439047,12.2828557,12.27614267,12.27453984,12.27121306,12.24695615,12.2368486,12.22925353,12.20673648,12.2109151,12.20187053,12.20412192,12.20633123,12.21944922,12.22663265,12.23270154,12.23256528,12.21298318,12.21263764,12.20522356,12.20114028,12.19963291,12.1980495,12.18910275,12.18605744,12.17849665,12.14997342,12.09454994,12.11915698,12.11435241,12.12947849,12.13491222,12.13495278,12.12872207,12.11988964,12.11948347,12.11886,12.12021822,12.14183279,12.15098842,12.16047629,12.18609714,12.17399591,12.21314686,12.22624686,12.23964657,12.24712624,12.29033551],"lat":[44.2269424,44.21945002,44.19073231,44.17881444,44.15665744,44.14902029,44.14800948,44.13293923,44.12348153,44.11645252,44.10620561,44.10978343,44.09727323,44.07728436,44.06928214,44.06836727,44.06892785,44.06808252,44.06870558,44.07876506,44.0880777,44.06560136,44.05916256,44.04814129,44.0422899,44.03786787,44.03680812,44.04107321,44.05003865,44.04609856,44.04572601,44.02782706,44.027661,44.02592989,44.0275634,44.02893747,44.03142696,44.04067304,44.05117674,44.05256913,44.0320544,44.02421971,44.05097528,44.06070626,44.07012926,44.0778613,44.07873176,44.08792598,44.09864893,44.10288566,44.10497839,44.10702368,44.11207029,44.10599417,44.10839581,44.15902288,44.17957706,44.22083578,44.21412036,44.21765017,44.23079669,44.2269424]}]],[[{"lng":[12.38566231,12.43696477,12.36254731,12.3621776,12.36183932,12.33810214,12.33287143,12.34933607,12.35217289,12.3747569,12.38566231],"lat":[44.22215214,44.17408845,44.12978685,44.13293923,44.14800948,44.14902029,44.17881444,44.19073231,44.19619003,44.21825606,44.22215214]}]],[[{"lng":[11.99957843,12.02759268,12.04524094,12.05686596,12.08764029,12.09128976,12.08826352,12.08707573,12.08780979,12.09956518,12.09454994,12.05472751,12.03796584,12.03655851,12.03592723,12.03266297,12.04294837,12.06610854,12.06389645,12.04804376,12.01981501,12.00167493,11.99512217,11.9913228,11.98904553,11.96357088,11.93580472,11.91967688,11.92487218,11.93934778,11.93487004,11.96489279,11.96643165,11.97363565,11.98874936,11.99026639,11.98955414,11.98784663,11.98761125,11.98851677,11.99957843],"lat":[44.07703317,44.06433238,44.06118004,44.06931404,44.07160973,44.06903514,44.06511077,44.06147873,44.05494977,44.03425322,44.02421971,44.00639575,44.00620386,44.00526897,43.98068059,43.97460929,43.96924888,43.97043879,43.95458085,43.94507487,43.94447461,43.95689105,43.95595579,43.96170031,43.96326347,43.96782594,43.99147407,44.00029789,44.00964368,44.01431356,44.03072419,44.03889731,44.04297169,44.0502477,44.06134973,44.07312183,44.0741038,44.07491375,44.07519901,44.07730898,44.07703317]}]],[[{"lng":[11.88959451,11.9078758,11.9082308,11.91007228,11.91222486,11.91229635,11.91206139,11.90763966,11.90590478,11.91206342,11.89183537,11.87041143,11.84196041,11.86146976,11.86160974,11.86076453,11.86019945,11.85001095,11.84668807,11.83897549,11.83666008,11.83371717,11.83118733,11.83142575,11.83478218,11.83766156,11.86800492,11.8747748,11.88959451],"lat":[44.16958766,44.15830198,44.15792383,44.15442881,44.14916126,44.14883534,44.14863427,44.14665834,44.14493794,44.09711975,44.09780506,44.0769098,44.09321473,44.10378296,44.10409456,44.10806801,44.10904548,44.11202818,44.11230916,44.11143889,44.11136141,44.11174961,44.11816842,44.1187117,44.12225656,44.12470583,44.14580648,44.16395697,44.16958766]}]],[[{"lng":[12.06444968,12.08693829,12.09677615,12.1032467,12.16119637,12.17124083,12.20881951,12.20997879,12.20797081,12.20083453,12.20028641,12.1938912,12.18785545,12.18080633,12.17306121,12.1708443,12.1704168,12.16987252,12.13572775,12.11164589,12.08828382,12.09246306,12.09567681,12.09574989,12.09471115,12.09443359,12.09279065,12.09054941,12.08928038,12.08739258,12.08695777,12.08671057,12.08709233,12.08750931,12.08810954,12.09018453,12.09065393,12.09105057,12.09159776,12.09089611,12.09010416,12.08910525,12.08109705,12.0806399,12.05736116,12.05267591,12.04798837,12.04581878,12.04450671,12.03373535,12.02911761,12.02378948,12.01562922,12.01056181,12.00123823,12.00025607,12.00381496,12.00595414,12.00000044,12.00499419,11.97142515,11.96973817,11.96235442,11.9381345,11.93710791,11.92317787,11.92151122,11.92829151,11.92952983,11.92555256,11.92554932,11.92624774,11.92719291,11.93058394,11.94749363,11.97586245,12.00164829,12.01121345,12.02154409,12.02772379,12.02918485,12.03558723,12.04899227,12.04930248,12.04951693,12.0472839,12.04990144,12.05453684,12.05500737,12.06444968],"lat":[44.30221931,44.30052389,44.29610128,44.27197532,44.25095701,44.24424262,44.2556056,44.2380178,44.23563455,44.23011823,44.23016961,44.22420894,44.22131074,44.22440336,44.21982953,44.21747843,44.21697716,44.21569713,44.21741344,44.20966998,44.17575506,44.16979909,44.16357206,44.16305692,44.16113149,44.16108501,44.16146253,44.16142432,44.16107156,44.15964619,44.15898274,44.15808014,44.15581012,44.15493457,44.15421611,44.15276451,44.15217562,44.15139064,44.14750462,44.14675838,44.14643771,44.14637515,44.14658219,44.14331416,44.15033562,44.15091102,44.15056147,44.14959974,44.14669982,44.1395053,44.13721518,44.13789663,44.13353908,44.12729884,44.12611386,44.126922,44.13006042,44.14068146,44.14975091,44.15259947,44.17505807,44.19406184,44.20572327,44.1901263,44.20218044,44.20599601,44.21090829,44.21562754,44.21937693,44.22977358,44.24004579,44.24098218,44.24160614,44.24155063,44.23588461,44.25569716,44.29616413,44.30255611,44.31453566,44.32229417,44.32811412,44.33080882,44.32552267,44.32513162,44.32394655,44.31680885,44.31153066,44.30566301,44.30530831,44.30221931]}]],[[{"lng":[12.14102514,12.16987252,12.168071,12.16111634,12.16178756,12.15872012,12.13154534,12.11868328,12.0949368,12.09443359,12.09567681,12.09246306,12.08828382,12.11164589,12.11395753,12.12029559,12.12097664,12.14102514],"lat":[44.21580931,44.21569713,44.20802158,44.19500745,44.18533791,44.17710431,44.17702495,44.16512438,44.15946887,44.16108501,44.16357206,44.16979909,44.17575506,44.20966998,44.20884475,44.20633093,44.20613472,44.21580931]}]],[[{"lng":[11.889103,11.89215199,11.88991624,11.90440081,11.93487004,11.93898405,11.93947375,11.93934778,11.93903231,11.92487218,11.91967688,11.92018495,11.96357088,11.9913228,11.99408431,11.98768611,11.98641045,11.97585043,11.97548634,11.96661081,11.96252752,11.86765487,11.86735667,11.86795577,11.8697805,11.86994743,11.86938945,11.84990912,11.84960017,11.85039661,11.86521123,11.87637598,11.88159111,11.88123152,11.88148783,11.889103],"lat":[44.05713596,44.0539201,44.04667194,44.03433938,44.03072419,44.02435227,44.01485597,44.01431356,44.01373649,44.00964368,44.00029789,43.99933818,43.96782594,43.96170031,43.95663123,43.95156809,43.94575848,43.9354106,43.93510498,43.9325,43.93381243,43.97777503,43.97934905,43.98085101,43.98462696,43.98524397,43.99255047,44.01850799,44.01907388,44.02553618,44.03477241,44.03925333,44.04769265,44.04950563,44.04993699,44.05713596]}]],[[{"lng":[12.36254731,12.36540048,12.36689612,12.37037969,12.33604833,12.33148085,12.33150796,12.33021097,12.32226793,12.36254731],"lat":[44.12978685,44.12940565,44.11081134,44.10423102,44.1042675,44.1061009,44.10620561,44.1106742,44.11645252,44.12978685]}]],[[{"lng":[12.44271848,12.43983232,12.43102922,12.40942435,12.40514067,12.40500355,12.40426411,12.40354208,12.4026967,12.39781471,12.39191468,12.38962756,12.37488094,12.37337001,12.36975286,12.36689612,12.36637669,12.36540048,12.36439323,12.39441177,12.43696477,12.44271848],"lat":[44.16975398,44.16679812,44.16424532,44.1465724,44.13818374,44.13775569,44.13315935,44.12973284,44.12698522,44.115094,44.10502438,44.10326478,44.10100103,44.10013643,44.10814772,44.11081134,44.12327299,44.12940565,44.1305967,44.14358092,44.17408845,44.16975398]}]],[[{"lng":[12.37053303,12.37322888,12.36427183,12.36220635,12.36589524,12.3714219,12.36499708,12.36352424,12.35906246,12.35535252,12.33536935,12.31541048,12.30938573,12.31419127,12.31632094,12.31101473,12.31794422,12.33604833,12.34649135,12.37037969,12.37053303],"lat":[44.1036323,44.09699862,44.08291259,44.07203505,44.07102603,44.06808102,44.0613835,44.05720459,44.05422855,44.05616674,44.05467286,44.0688127,44.06666483,44.07356559,44.09132929,44.09636348,44.10978343,44.1042675,44.11036391,44.10423102,44.1036323]}]],[[{"lng":[12.05267591,12.05736116,12.0806399,12.10396455,12.10318035,12.09951064,12.09944015,12.11948347,12.11988964,12.13495278,12.12947849,12.11435241,12.1040784,12.09956518,12.09611982,12.09262111,12.08780979,12.08681499,12.08707573,12.08826352,12.09143856,12.09128976,12.09051603,12.08998375,12.08764029,12.08218852,12.05686596,12.04524094,11.99657517,12.01249705,12.01165169,12.00167623,11.99805275,12.00025607,12.01056181,12.01562922,12.02911761,12.04581878,12.05267591],"lat":[44.15091102,44.15033562,44.14331416,44.12440085,44.11849831,44.11165684,44.10935402,44.10288566,44.09864893,44.07873176,44.07012926,44.06070626,44.03556159,44.03425322,44.03452212,44.03755192,44.05494977,44.05958616,44.06147873,44.06511077,44.06853596,44.06903514,44.07072162,44.07105114,44.07160973,44.06738166,44.06931404,44.06118004,44.08281457,44.10808971,44.11063281,44.11499188,44.11821111,44.126922,44.12729884,44.13353908,44.13721518,44.14959974,44.15091102]}]],[[{"lng":[12.18120022,12.18605744,12.18910275,12.19963291,12.19416014,12.19773418,12.19836939,12.20074238,12.20131201,12.20172297,12.20277131,12.20222495,12.20065843,12.20341804,12.21600063,12.22341351,12.22006488,12.21982078,12.22254343,12.20393902,12.20197864,12.20954159,12.21193884,12.22387152,12.22863819,12.24575522,12.2574423,12.27018674,12.25474197,12.23651989,12.23120469,12.2266789,12.21857478,12.21109154,12.18600249,12.1732422,12.15826069,12.16428063,12.1609117,12.15513022,12.15217698,12.14527619,12.14710166,12.1449403,12.1426155,12.13471651,12.13388625,12.13438061,12.13312439,12.11102314,12.12182092,12.12929483,12.13353731,12.11990229,12.12071424,12.10926402,12.09770686,12.07654103,12.07841007,12.09121399,12.09523459,12.09725896,12.0973574,12.10187893,12.11808915,12.12072551,12.13365651,12.14997342,12.18120022],"lat":[44.05126381,44.05117674,44.04067304,44.02893747,44.02155617,44.01843227,44.0181804,44.01799684,44.01791784,44.01767225,44.01605831,44.01240046,44.00809599,44.00375117,43.99955309,43.99940701,43.98570003,43.97727116,43.9676872,43.96664441,43.96287315,43.9558815,43.94995313,43.94109991,43.94652004,43.95010394,43.94345993,43.92870686,43.91232539,43.91675899,43.93594093,43.93956211,43.93276856,43.93191696,43.94219016,43.93420882,43.93831553,43.95642491,43.95799474,43.95919904,43.96038799,43.95881376,43.954442,43.9489107,43.94665196,43.94406919,43.94107598,43.93649789,43.93464174,43.94872372,43.95169704,43.94973681,43.95007958,43.96931434,43.97386566,43.97852657,43.97469941,43.98102471,43.99594629,43.99706777,44.00243262,44.00681618,44.02067805,44.0205653,44.0224138,44.02672872,44.02741634,44.0320544,44.05126381]}]],[[{"lng":[11.83352129,11.85274257,11.86428841,11.88879442,11.88765884,11.87525317,11.8747748,11.86800492,11.83766156,11.83142575,11.83897549,11.83322191,11.82985052,11.8293403,11.83169747,11.82733365,11.82477787,11.81615794,11.81084753,11.80684389,11.79638367,11.79489234,11.79380781,11.78645333,11.78497041,11.78378026,11.78317113,11.78548906,11.78489889,11.78475359,11.78325689,11.78069642,11.77864251,11.77829545,11.78571988,11.74485559,11.71588519,11.72144957,11.72186797,11.71971023,11.71967372,11.72022829,11.72861269,11.75283866,11.77138614,11.77379729,11.77601262,11.77808629,11.78081344,11.78246647,11.79297305,11.8060783,11.82214849,11.83352129],"lat":[44.1966154,44.18602648,44.18007456,44.1705082,44.16961864,44.16427802,44.16395697,44.14580648,44.12470583,44.1187117,44.11143889,44.08496919,44.0847107,44.08815346,44.09200229,44.09553157,44.09563987,44.09458342,44.09798236,44.09099557,44.08635467,44.08336619,44.0820513,44.08288827,44.08349165,44.08474507,44.08613738,44.0905463,44.09580041,44.09616407,44.09781211,44.09809056,44.09958104,44.10070586,44.11539776,44.12602482,44.12255729,44.13495383,44.14813312,44.15639517,44.15723331,44.15868757,44.17183872,44.1934851,44.19887013,44.18683781,44.18207548,44.18094468,44.18041012,44.18071196,44.19124076,44.19947202,44.19456542,44.1966154]}]],[[{"lng":[12.30241586,12.31632094,12.31419127,12.30871582,12.30846341,12.30705996,12.2746931,12.27384551,12.27614267,12.28439047,12.29199043,12.30241586],"lat":[44.09727323,44.09132929,44.07356559,44.06584699,44.06020054,44.05652303,44.05953599,44.06612338,44.06892785,44.06928214,44.07728436,44.09727323]}]],[[{"lng":[11.77031067,11.77321042,11.77395753,11.77426384,11.78845544,11.79721561,11.69516524,11.69259967,11.68878766,11.67104264,11.66766236,11.65399733,11.64563981,11.66069703,11.68188876,11.68575592,11.69296876,11.72405612,11.72605891,11.73090848,11.72999576,11.75470145,11.75834639,11.75669021,11.75808701,11.76156494,11.77031067],"lat":[44.03953563,44.0369534,44.03691723,44.03706285,44.05064475,44.01486648,43.95358127,43.95323965,43.95902096,43.96679131,43.97198581,43.97525727,43.98937976,44.0197067,44.02120404,44.01713979,44.01389083,44.01341446,44.01383481,44.01786709,44.02517486,44.02648083,44.03131748,44.04183994,44.04879858,44.05270734,44.03953563]}]],[[{"lng":[11.98557048,12.00499419,12.00000044,12.00381496,12.00025607,11.99705778,11.99805275,11.99924565,12.00167623,12.01100859,12.01165169,12.01206557,12.01250166,12.01249705,12.01202919,12.00365338,11.99657517,11.98893173,11.98851677,11.98821476,11.98761125,11.98955414,11.99026639,11.98874936,11.96541199,11.96489279,11.95204562,11.93487004,11.92916745,11.90440081,11.88991624,11.89215199,11.891314,11.8886259,11.89494987,11.89710541,11.8938104,11.91323653,11.90858148,11.98557048],"lat":[44.15989732,44.15259947,44.14975091,44.13006042,44.126922,44.12250459,44.11821111,44.11659526,44.11499188,44.1110099,44.11063281,44.11017174,44.10891783,44.10808971,44.10675161,44.09014595,44.08281457,44.07761322,44.07730898,44.07676772,44.07519901,44.0741038,44.07312183,44.06134973,44.03929796,44.03889731,44.03231598,44.03072419,44.02844884,44.03433938,44.04667194,44.0539201,44.05666584,44.05733709,44.0608231,44.06915916,44.07890289,44.09328161,44.1279444,44.15989732]}]],[[{"lng":[11.86521123,11.84960017,11.85903108,11.86938945,11.8697805,11.86795577,11.85304873,11.85021463,11.85118271,11.85050069,11.84940505,11.840777,11.83200524,11.8304279,11.82873433,11.81110865,11.80682714,11.80224897,11.79208497,11.77077523,11.76825388,11.74494591,11.72526545,11.71990607,11.71393668,11.71703165,11.68219866,11.68904209,11.69259967,11.69919422,11.70113767,11.70156065,11.70324262,11.7823461,11.79721561,11.80882919,11.86521123],"lat":[44.03477241,44.01907388,44.00663,43.99255047,43.98462696,43.98085101,43.97737571,43.97338611,43.96236019,43.95956825,43.95829015,43.95560617,43.95197975,43.9463199,43.94476834,43.94410527,43.94500288,43.94701498,43.94444601,43.91892805,43.91773777,43.91655385,43.90723882,43.90139748,43.89866339,43.9218176,43.93784964,43.95003885,43.95323965,43.95639411,43.95885102,43.96074067,43.96343782,44.00960498,44.01486648,44.01225162,44.03477241]}]],[[{"lng":[11.84668807,11.86160974,11.85033151,11.84363495,11.84196041,11.8549157,11.87041143,11.89183537,11.91323653,11.90939323,11.8938104,11.89710541,11.89494987,11.88798913,11.88524065,11.88148783,11.88159111,11.87945,11.87637598,11.87592402,11.86740693,11.86521123,11.86309572,11.84504149,11.80882919,11.79750425,11.79721561,11.79820125,11.79783527,11.78845544,11.79266414,11.80271003,11.81888121,11.82477973,11.82617086,11.82649231,11.82051684,11.79489234,11.79593659,11.79638367,11.79714538,11.80228102,11.80684389,11.81084753,11.82733365,11.82985052,11.83267001,11.83322191,11.83759902,11.83893103,11.83897549,11.84668807],"lat":[44.11230916,44.10409456,44.10052346,44.09739541,44.09321473,44.09012758,44.0769098,44.09780506,44.09328161,44.08922196,44.07890289,44.06915916,44.0608231,44.05733521,44.05446974,44.04993699,44.04769265,44.04345226,44.03925333,44.03894061,44.03493245,44.03477241,44.03711135,44.03172877,44.01225162,44.01440232,44.01486648,44.0185982,44.02115548,44.05064475,44.05859955,44.05221333,44.05364278,44.0574493,44.05887334,44.05931553,44.07383205,44.08336619,44.08587947,44.08635467,44.08661511,44.08737972,44.09099557,44.09798236,44.09553157,44.0847107,44.08465879,44.08496919,44.08900182,44.09177762,44.11143889,44.11230916]}]],[[{"lng":[12.2408761,12.24695615,12.2639926,12.26726876,12.27121306,12.27614267,12.2746931,12.28264107,12.30001193,12.30684603,12.30705996,12.30818186,12.30846341,12.30871582,12.30938573,12.31225199,12.31487811,12.31541048,12.32665492,12.33536935,12.34461315,12.35810689,12.34685405,12.32346331,12.31387334,12.30756557,12.30097896,12.29474772,12.29078184,12.2888818,12.28486818,12.28292042,12.28122733,12.25316938,12.23945187,12.23535764,12.21603385,12.20779431,12.20074238,12.19836939,12.19773418,12.19696207,12.19416014,12.19786679,12.19963291,12.20522356,12.21298318,12.23256528,12.22663265,12.21944922,12.20633123,12.20187053,12.20673648,12.22925353,12.2408761],"lat":[44.08411612,44.07876506,44.07561627,44.07128192,44.06870558,44.06892785,44.05953599,44.05651678,44.05325196,44.05626815,44.05652303,44.05895729,44.06020054,44.06584699,44.06666483,44.06835525,44.06887317,44.0688127,44.0571059,44.05467286,44.0530069,44.05432118,44.04492867,44.03131571,44.02717416,44.02190139,44.02147089,44.02452287,44.02433118,44.02494412,44.02727443,44.03245355,44.03274486,44.00962737,44.01359169,44.01400491,44.0153883,44.01828502,44.01799684,44.0181804,44.01843227,44.01892206,44.02155617,44.02819909,44.02893747,44.02592989,44.02782706,44.04572601,44.05003865,44.04107321,44.03680812,44.0422899,44.05916256,44.06560136,44.08411612]}]],[[{"lng":[12.45006944,12.42872041,12.44264495,12.4393894,12.44121658,12.44524974,12.44720995,12.4499932,12.45228993,12.45332885,12.4533292,12.45239574,12.45226026,12.45219904,12.4550878,12.45452355,12.45207991,12.43905525,12.42531067,12.40895309,12.40564787,12.42116607,12.42627675,12.45006944],"lat":[44.16279826,44.14734463,44.14034887,44.12756866,44.12502881,44.12388981,44.1221381,44.11864194,44.11465629,44.11224813,44.11075366,44.10958661,44.10937689,44.10872154,44.10311995,44.09319055,44.08719968,44.08866886,44.08849685,44.09875941,44.10875663,44.13578681,44.14870541,44.16279826]}]],[[{"lng":[11.99408431,11.99512217,12.00167493,12.01981501,12.04804376,12.04481791,12.05127048,12.05225622,12.0308448,12.02816456,12.03125268,12.02522278,12.00872504,12.00206737,11.98533638,11.96985042,11.9587225,11.956102,11.95205894,11.94678948,11.94714606,11.93492936,11.93125476,11.92107313,11.91341897,11.91062867,11.9087013,11.86710685,11.88720286,11.88474958,11.83870317,11.81592787,11.82253011,11.84007386,11.81340583,11.8040536,11.79042681,11.7894628,11.78953059,11.79035495,11.78981575,11.788468,11.71016673,11.71045783,11.71393668,11.72471414,11.72526545,11.74494591,11.74561563,11.77077523,11.79208497,11.80224897,11.82873433,11.84963601,11.85050069,11.85118271,11.84972725,11.8496551,11.85021463,11.85028638,11.85304873,11.85756926,11.86795577,11.92936411,11.93170138,11.93640353,11.94165283,11.94806531,11.95029505,11.95575819,11.96252752,11.96661081,11.97585043,11.98768611,11.99408431],"lat":[43.95663123,43.95595579,43.95689105,43.94447461,43.94507487,43.93559071,43.92948541,43.91905152,43.92074734,43.93051477,43.94053426,43.94103631,43.93607947,43.90950657,43.90664116,43.9072431,43.90909856,43.90723078,43.90575533,43.90702137,43.91499792,43.92286622,43.92565255,43.93522271,43.93767807,43.93079885,43.9283181,43.91769314,43.89671359,43.89051842,43.89111429,43.88466476,43.87738923,43.87543267,43.85648389,43.85737115,43.85678665,43.85399219,43.85304519,43.85098131,43.8476903,43.84508476,43.87744594,43.8939109,43.89866339,43.90689183,43.90723882,43.91655385,43.91676282,43.91892805,43.94444601,43.94701498,43.94476834,43.95842845,43.95956825,43.96236019,43.96502543,43.96872748,43.97338611,43.97384349,43.97737571,43.98012563,43.98085101,43.95410582,43.95247028,43.94622735,43.94427359,43.94342396,43.94290721,43.94075821,43.93381243,43.9325,43.9354106,43.95156809,43.95663123]}]],[[{"lng":[12.1732422,12.1702824,12.16440249,12.15949761,12.15922921,12.15845388,12.16805073,12.14215528,12.13825978,12.13367012,12.12616641,12.12362155,12.11798832,12.10691646,12.10164635,12.09667854,12.08085662,12.06880128,12.07101432,12.08356766,12.1124835,12.11416321,12.13312439,12.13372279,12.1449403,12.14710166,12.14495848,12.14508163,12.14527619,12.14577188,12.15217698,12.1609117,12.16428063,12.15763799,12.15826069,12.16440767,12.1732422],"lat":[43.93420882,43.92534388,43.92439467,43.92174736,43.92141467,43.91923302,43.89755736,43.86233261,43.84764094,43.8530049,43.85701894,43.85736768,43.85766572,43.85554572,43.85252893,43.85317696,43.88848307,43.8915357,43.90212685,43.92578165,43.94471358,43.94275913,43.93464174,43.9348864,43.9489107,43.954442,43.95633769,43.95819792,43.95881376,43.95923225,43.96038799,43.95799474,43.95642491,43.93902599,43.93831553,43.93629067,43.93420882]}],[{"lng":[12.09780559,12.09523286,12.09725896,12.09523459,12.07841007,12.07654103,12.09770686,12.12071424,12.13353731,12.12182092,12.10278146,12.07862793,12.06085362,12.05127048,12.0449816,12.04481791,12.04479478,12.04514366,12.04804376,12.04894311,12.05561923,12.06389645,12.06610854,12.03266297,12.03655851,12.05472751,12.09780559],"lat":[44.0229682,44.0119848,44.00681618,44.00243262,43.99594629,43.98102471,43.97469941,43.97386566,43.95007958,43.95169704,43.95030748,43.93553922,43.92930991,43.92948541,43.9351362,43.93559071,43.9361135,43.94123593,43.94507487,43.94779677,43.95259696,43.95458085,43.97043879,43.97460929,44.00526897,44.00639575,44.0229682]}],[{"lng":[12.06297146,12.06885418,12.08383265,12.08321581,12.06795631,12.06089622,12.06297146],"lat":[43.85893892,43.85840281,43.85835935,43.8543606,43.85157555,43.84684034,43.85893892]}]],[[{"lng":[12.44312171,12.42627675,12.40564787,12.42531067,12.39987233,12.39264511,12.37047371,12.3714219,12.37131994,12.36589524,12.36225417,12.36220635,12.36241992,12.36328191,12.36427183,12.37123158,12.37322888,12.37337001,12.38962756,12.39191468,12.39781471,12.4026967,12.40354208,12.40426411,12.40514067,12.40942435,12.44312171],"lat":[44.16838242,44.14870541,44.10875663,44.08849685,44.06648074,44.06367987,44.066031,44.06808102,44.0682641,44.07102603,44.07182742,44.07203505,44.07382032,44.07933164,44.08291259,44.09288836,44.09699862,44.10013643,44.10326478,44.10502438,44.115094,44.12698522,44.12973284,44.13315935,44.13818374,44.1465724,44.16838242]}]],[[{"lng":[12.2888818,12.31387334,12.31883673,12.32360904,12.32376635,12.31813872,12.32492041,12.32733053,12.33626523,12.35343662,12.3528725,12.35079357,12.34653033,12.34306597,12.33547037,12.32606432,12.3231648,12.32282757,12.32095269,12.31252582,12.29476195,12.27796308,12.27018674,12.25710958,12.2574423,12.2497724,12.21193884,12.20197864,12.2019197,12.20393902,12.22254343,12.22376096,12.22341351,12.22186562,12.21600063,12.20366408,12.20341804,12.20065843,12.20074238,12.20685341,12.20779431,12.20823354,12.20927297,12.2138173,12.21603385,12.2341206,12.23535764,12.23866059,12.23945187,12.24514597,12.25316938,12.28122733,12.28486818,12.2888818],"lat":[44.02494412,44.02717416,44.01573133,44.01362081,44.00929485,44.00041529,43.98777132,43.98761105,43.98992505,43.98834148,43.98606231,43.98465588,43.97397748,43.97203085,43.96979527,43.96520818,43.96194354,43.96060115,43.95660159,43.94023474,43.9281896,43.92474944,43.92870686,43.93965216,43.94345993,43.9501877,43.94995313,43.96287315,43.96548567,43.96664441,43.9676872,43.99753359,43.99940701,44.00007192,43.99955309,44.00345617,44.00375117,44.00809599,44.01799684,44.01841951,44.01828502,44.01810163,44.01701906,44.01569382,44.0153883,44.01396795,44.01400491,44.01372218,44.01359169,44.00935161,44.00962737,44.03274486,44.02727443,44.02494412]}],[{"lng":[12.20887415,12.21109154,12.21789904,12.21857478,12.21933849,12.22022043,12.2266789,12.23651989,12.23479725,12.22223625,12.21908817,12.20319861,12.17601138,12.1734315,12.1702824,12.1732422,12.17397762,12.18570341,12.18600249,12.1886976,12.19176722,12.20887415],"lat":[43.93215038,43.93191696,43.93248152,43.93276856,43.93353029,43.9355581,43.93956211,43.91675899,43.91695828,43.91528955,43.90805634,43.91648858,43.92040219,43.92421937,43.92534388,43.93420882,43.93515169,43.94218951,43.94219016,43.9408635,43.93792376,43.93215038]}]],[[{"lng":[11.77455607,11.78571988,11.78564745,11.7836302,11.77829545,11.77864251,11.78325689,11.78489889,11.78548906,11.78317113,11.78378026,11.79489234,11.80219185,11.82051684,11.82617086,11.79266414,11.77996218,11.77395753,11.76850868,11.76156494,11.75808701,11.75669021,11.75869298,11.75834639,11.75470145,11.73954202,11.72999576,11.72604025,11.73090848,11.72605891,11.68575592,11.75156105,11.77455607],"lat":[44.11529694,44.11539776,44.11199643,44.10815637,44.10070586,44.09958104,44.09781211,44.09580041,44.0905463,44.08613738,44.08474507,44.08336619,44.08004522,44.07383205,44.05887334,44.05859955,44.04945642,44.03691723,44.05045824,44.05270734,44.04879858,44.04183994,44.03955586,44.03131748,44.02648083,44.02890728,44.02517486,44.02150434,44.01786709,44.01383481,44.01713979,44.11942674,44.11529694]}]],[[{"lng":[12.0833617,12.09009708,12.09246894,12.09667854,12.10164635,12.11798832,12.12616641,12.15055874,12.1308041,12.11273702,12.10500663,12.1040904,12.10363175,12.10289302,12.09619099,12.10744557,12.07054291,12.05300257,11.95146264,11.95117234,11.96168234,11.9623265,11.96549381,11.98209439,11.98625539,12.00568253,12.01809896,12.0193954,12.02051366,12.02110047,12.02132509,12.02173281,12.02316644,12.03046608,12.03435069,12.0346257,12.0352629,12.03728036,12.03941807,12.03996411,12.04713902,12.05446542,12.06089622,12.06304682,12.06795631,12.08321581,12.08383265,12.05495173,12.0833617],"lat":[43.87166067,43.86424906,43.85718041,43.85317696,43.85252893,43.85766572,43.85701894,43.83714889,43.82475929,43.79643411,43.79507145,43.79411722,43.79355779,43.79227068,43.76530394,43.75377137,43.7407306,43.75696563,43.77757201,43.78698508,43.79020687,43.79041524,43.79238576,43.81052709,43.81792703,43.82001021,43.82433733,43.8258786,43.82906317,43.83132545,43.83183269,43.83227206,43.83332349,43.83674025,43.83976117,43.84003297,43.8410694,43.84454499,43.85087135,43.85133396,43.85663462,43.85976102,43.84684034,43.84753892,43.85157555,43.8543606,43.85835935,43.8614856,43.87166067]}]],[[{"lng":[9.71762804,9.72171335,9.73160438,9.73761572,9.75414339,9.7619278,9.77964649,9.79208693,9.79925736,9.79551642,9.75929259,9.7593435,9.76353369,9.76803607,9.76661358,9.76596766,9.76216622,9.76515641,9.75239834,9.74146677,9.72299616,9.70201141,9.69654209,9.68666166,9.67521222,9.66762784,9.6645641,9.65447955,9.65229747,9.67015664,9.6663234,9.68922688,9.6973972,9.70473612,9.70695664,9.70879388,9.71121658,9.71842938,9.71134172,9.71762804],"lat":[44.78376341,44.77077449,44.76343777,44.76615378,44.76850548,44.77044075,44.78319481,44.78522471,44.77446213,44.76709745,44.7347199,44.73378333,44.72493315,44.71007491,44.71049984,44.71034214,44.70541629,44.68134207,44.67832103,44.67991392,44.67802483,44.67138147,44.67207664,44.67510726,44.68761677,44.70298333,44.70550385,44.71123354,44.71815079,44.73288315,44.74000837,44.77115523,44.77693905,44.77347316,44.7721271,44.7704503,44.76912092,44.76887773,44.78199385,44.78376341]}]],[[{"lng":[9.38974608,9.43286447,9.40755579,9.3882981,9.38057889,9.37510526,9.37487381,9.37488221,9.37560865,9.37395409,9.37280733,9.35695826,9.34704736,9.32961543,9.32191816,9.32101544,9.32042937,9.31417986,9.31800858,9.27740952,9.28850607,9.28954634,9.2988341,9.30950524,9.31042865,9.31201249,9.31241678,9.31473275,9.31459708,9.29128997,9.30564301,9.31525809,9.32758604,9.34949191,9.38262916,9.38974608],"lat":[44.97025404,44.95406751,44.9517031,44.94401954,44.94020169,44.93269417,44.93218181,44.93152464,44.92826355,44.92519931,44.92422183,44.91848419,44.9137617,44.90274088,44.90343798,44.90282839,44.90220889,44.88732791,44.87780216,44.89560889,44.91112913,44.90924992,44.90968509,44.90584883,44.90561227,44.90569798,44.9057959,44.91208192,44.91275745,44.92507098,44.93396342,44.93749306,44.95909902,44.97007943,44.95501204,44.97025404]}]],[[{"lng":[9.22503085,9.23490407,9.2452712,9.28508507,9.29248743,9.3037783,9.30478975,9.30672114,9.3057747,9.32654783,9.33121292,9.35671778,9.35792887,9.37554509,9.37663159,9.37068207,9.40273962,9.39485413,9.39538737,9.40562892,9.4031449,9.34222418,9.30041024,9.27223047,9.24564231,9.25653892,9.24550262,9.20297322,9.20193134,9.21741798,9.21989107,9.22503085],"lat":[44.67337513,44.67091638,44.65617118,44.65944113,44.64476199,44.64379625,44.6443067,44.64701576,44.66564426,44.66577581,44.66425898,44.65427052,44.6522682,44.64041848,44.63879446,44.61717655,44.6166764,44.61166254,44.61038235,44.6008068,44.59145001,44.57778043,44.60777737,44.59591522,44.59971154,44.61059408,44.61964781,44.61349411,44.67161711,44.67412884,44.67419612,44.67337513]}]],[[{"lng":[9.3571145,9.35624629,9.35659857,9.38117737,9.38788115,9.3969456,9.39987963,9.40651398,9.41225463,9.41338705,9.42912849,9.43329565,9.43137366,9.44249686,9.44505177,9.44888315,9.44789634,9.44721106,9.44628586,9.44537432,9.43800801,9.43070359,9.42963857,9.42103947,9.42008708,9.41134601,9.3980627,9.39722527,9.39290879,9.38752212,9.38585613,9.3806361,9.37995024,9.37788388,9.3767442,9.37396196,9.3713794,9.36878179,9.36780556,9.36309823,9.35826755,9.34167518,9.31417986,9.32101544,9.32583513,9.32961543,9.34704736,9.35695826,9.3571145],"lat":[44.9171154,44.91398543,44.91358823,44.89654906,44.8877225,44.88185804,44.88135268,44.88669448,44.89262425,44.89513171,44.88139956,44.87333115,44.86669075,44.86787247,44.86759248,44.85727911,44.85569863,44.85545825,44.85529084,44.85524937,44.85517884,44.85491856,44.85466151,44.85212794,44.85168135,44.84508763,44.84553978,44.84520963,44.84311806,44.83988672,44.83482415,44.82790103,44.82748022,44.82680292,44.82661764,44.82672581,44.82641016,44.82571641,44.82536847,44.82240383,44.82429152,44.86981198,44.88732791,44.90282839,44.9017255,44.90274088,44.9137617,44.91848419,44.9171154]}]],[[{"lng":[9.75753568,9.81326234,9.81655927,9.81779206,9.82375864,9.82381971,9.82247614,9.8202497,9.81701232,9.813236,9.81171288,9.81076405,9.80935076,9.80879775,9.80789672,9.80715646,9.80212211,9.79750955,9.79110643,9.76002394,9.73178774,9.72279184,9.70868692,9.69805906,9.69142684,9.68746563,9.66980065,9.66592648,9.63104726,9.61502343,9.62113313,9.59973809,9.629192,9.63248721,9.63355863,9.63438343,9.64361493,9.64480396,9.64832837,9.65431152,9.6611495,9.67179083,9.67689296,9.72768161,9.75037187,9.74506913,9.75753568],"lat":[45.11253851,45.07810328,45.05445915,45.05363117,45.0525906,45.05242211,45.04905614,45.04787491,45.04703394,45.04668284,45.04672968,45.04697946,45.05031114,45.05072015,45.05076253,45.0504977,45.04828273,45.03527145,45.02388367,44.99243528,44.99567135,45.00366828,44.99891367,44.99613454,45.00073884,45.00569577,45.00445047,44.99661009,45.00083529,45.0113176,45.02981057,45.03026942,45.04922242,45.05324601,45.0559676,45.05705224,45.06595734,45.06664377,45.06828013,45.07051445,45.07192434,45.0726364,45.07760824,45.06213546,45.07904693,45.11093871,45.11253851]}]],[[{"lng":[9.45600998,9.45094382,9.45167749,9.45778809,9.45747587,9.44767175,9.43734156,9.42790416,9.42434783,9.41267684,9.41365577,9.41225463,9.39987963,9.38788115,9.38117737,9.36054125,9.35624629,9.35695826,9.37395409,9.37487381,9.38057889,9.39446742,9.40339008,9.40755579,9.42695578,9.43213606,9.43286447,9.44060995,9.45834272,9.459644,9.45488877,9.45600998],"lat":[44.95036766,44.93962146,44.93781817,44.93484118,44.93223187,44.92794079,44.91924889,44.90753704,44.90625401,44.90912292,44.89974137,44.89262425,44.88135268,44.8877225,44.89654906,44.91199151,44.91398543,44.91848419,44.92519931,44.93218181,44.94020169,44.94533969,44.94920186,44.9517031,44.950525,44.95329611,44.95406751,44.96423037,44.97746309,44.9752434,44.96088639,44.95036766]}]],[[{"lng":[9.46335405,9.48897744,9.48891474,9.5026311,9.50931643,9.51152982,9.50941679,9.49596505,9.50273574,9.50071154,9.47702243,9.46121266,9.44888315,9.44505177,9.43180214,9.43137366,9.43097149,9.43329565,9.41338705,9.41365577,9.41159671,9.41267684,9.41529251,9.42790416,9.45521345,9.45747587,9.45789909,9.45798577,9.45778809,9.45742329,9.45167749,9.45128749,9.45094382,9.45118695,9.45600998,9.45811599,9.46335405],"lat":[44.9540379,44.94557726,44.93940219,44.92808119,44.92889777,44.92413482,44.91740178,44.90444411,44.88921909,44.89090236,44.87769876,44.87825881,44.85727911,44.86759248,44.86643707,44.86669075,44.86707935,44.87333115,44.89513171,44.89974137,44.90691281,44.90912292,44.91000512,44.90753704,44.92978337,44.93223187,44.93286032,44.93420125,44.93484118,44.93518472,44.93781817,44.93818878,44.93962146,44.94476961,44.95036766,44.96013533,44.9540379]}]],[[{"lng":[9.67600168,9.68746563,9.68846637,9.69805906,9.72279184,9.73178774,9.76037332,9.73256986,9.7153811,9.7082964,9.70616196,9.70284123,9.70062055,9.70033259,9.6999743,9.69945294,9.69774116,9.69493349,9.6890568,9.68831297,9.66721348,9.65852097,9.65593627,9.65109711,9.6476152,9.6641015,9.67325907,9.66980065,9.67600168],"lat":[45.00628631,45.00569577,45.00555472,44.99613454,45.00366828,44.99567135,44.98815707,44.96344857,44.93425622,44.93628983,44.93479373,44.93168753,44.92936066,44.92860626,44.92832039,44.92817055,44.928082,44.92854022,44.92986311,44.93018267,44.94769965,44.94467145,44.94588359,44.95736173,44.95890287,44.96583869,45.00397105,45.00445047,45.00628631]}]],[[{"lng":[9.70036713,9.69722719,9.69981773,9.71908475,9.68843654,9.68639919,9.68374435,9.66947098,9.66446982,9.66368911,9.659992,9.64796743,9.61874029,9.61854208,9.61802411,9.61186792,9.61107349,9.61052544,9.62857178,9.65051534,9.66712491,9.68611416,9.68810735,9.68995346,9.70036713],"lat":[44.89911553,44.89082587,44.88619198,44.86845527,44.84074669,44.8375272,44.8302154,44.83318065,44.83063524,44.82764208,44.82402664,44.82106178,44.82257421,44.82296237,44.82657502,44.83534023,44.83678482,44.84119879,44.86244484,44.87664423,44.89406638,44.90515238,44.9065897,44.90843298,44.89911553]}]],[[{"lng":[9.81947858,9.81598201,9.81075383,9.80117635,9.77636229,9.76187238,9.7537575,9.76037332,9.76013097,9.76002394,9.75867938,9.75853471,9.76102757,9.79110643,9.79194477,9.79289125,9.79750955,9.80182827,9.84130954,9.83365345,9.83186424,9.82646758,9.81917364,9.81947858],"lat":[44.99206913,44.9879353,44.98510094,44.94223841,44.97353844,44.97683171,44.97795679,44.98815707,44.99189445,44.99243528,44.99533381,44.99782829,45.00075082,45.02388367,45.02576824,45.02996553,45.03527145,45.03349955,45.01969009,45.00988021,45.00725573,45.00082258,44.99292648,44.99206913]}]],[[{"lng":[9.63509288,9.63049343,9.65109711,9.65852097,9.65608141,9.65264197,9.65067312,9.64965959,9.64823135,9.64322573,9.63774275,9.63702131,9.63654659,9.63591569,9.63537772,9.631019,9.62195913,9.61692225,9.60751328,9.606716,9.60572197,9.6055651,9.60944514,9.60461324,9.57891242,9.55864112,9.57907804,9.57970493,9.58065186,9.582873,9.58862075,9.5979174,9.59415449,9.60699387,9.63509288],"lat":[44.96963146,44.96303154,44.95736173,44.94467145,44.92412502,44.92027388,44.91983501,44.91984078,44.92128022,44.92234375,44.91348953,44.90093577,44.89923704,44.89830435,44.8977582,44.90222037,44.90072173,44.89637407,44.88685535,44.88569833,44.8838852,44.88341791,44.87793305,44.86748932,44.85574878,44.87838189,44.88867745,44.88931342,44.89155011,44.90332244,44.90801002,44.92864828,44.95697905,44.95662347,44.96963146]}]],[[{"lng":[9.55744662,9.57545086,9.63248721,9.6155048,9.57873475,9.57785261,9.57457333,9.56761297,9.55001675,9.54744182,9.54260914,9.54163282,9.53614051,9.53473271,9.53446622,9.53351594,9.52986079,9.52929976,9.53243065,9.53368861,9.53472338,9.53424656,9.53370426,9.52884409,9.52590366,9.53150647,9.52809749,9.52680615,9.52679916,9.52711307,9.53202619,9.54740299,9.55133039,9.53721564,9.55744662],"lat":[45.10750332,45.07023691,45.05324601,45.04230261,45.03231383,45.03216977,45.03756039,45.04336534,45.04038185,45.02749464,45.02897598,45.02909765,45.02938461,45.02943622,45.02944648,45.02955444,45.03093072,45.03600135,45.03563573,45.03575588,45.03644417,45.03704952,45.03743913,45.03882102,45.04345252,45.05235996,45.06082482,45.06931944,45.0699406,45.07230662,45.07843202,45.08664994,45.09211309,45.1260537,45.10750332]}]],[[{"lng":[9.76187238,9.7957968,9.77962816,9.7725179,9.77041063,9.76299154,9.76273858,9.76631206,9.76644084,9.76328652,9.76216793,9.76065344,9.75903696,9.75776565,9.75258092,9.7375975,9.71908475,9.69981773,9.69722719,9.70218329,9.70200805,9.68995346,9.69681816,9.69845771,9.701724,9.70332183,9.71490442,9.71947708,9.7232827,9.72456058,9.72549163,9.73256986,9.73660974,9.74124401,9.74316339,9.75177054,9.7537575,9.76187238],"lat":[44.97683171,44.94277112,44.93001885,44.92899595,44.92966732,44.92635939,44.92447968,44.9174072,44.91607405,44.91131511,44.90815387,44.90281678,44.89644512,44.89414904,44.88794492,44.88077804,44.86845527,44.88619198,44.89082587,44.89640376,44.89891641,44.90843298,44.91986883,44.92133513,44.92319653,44.92433895,44.93362908,44.93851543,44.94483777,44.94767427,44.95114311,44.96344857,44.96504293,44.96452683,44.96489244,44.97051631,44.97795679,44.97683171]}]],[[{"lng":[9.93571695,9.93798332,9.93841282,9.94195508,9.94263142,9.94528809,9.95428751,9.95335771,9.9540591,9.96335042,9.96889912,9.96644945,9.96758303,9.96907353,9.97728503,9.98084853,9.98146101,9.98476179,9.94794766,9.92893764,9.9317396,9.93429038,9.93431595,9.9202954,9.90762024,9.88125811,9.8814558,9.88393778,9.8869939,9.887952,9.89217245,9.89669116,9.89702115,9.89549693,9.89644289,9.89755196,9.89873787,9.89972366,9.90631807,9.91053777,9.93571695],"lat":[45.05727619,45.04519522,45.04428251,45.03884325,45.03827957,45.03769951,45.03833579,45.04121514,45.0413983,45.04198643,45.04123735,45.03902568,45.03848496,45.03803123,45.03562079,45.03464505,45.02071397,45.01705782,45.005766,45.01193543,45.01803387,45.02191982,45.02271177,45.02698445,45.00968537,45.01762442,45.01809999,45.01938608,45.02332319,45.02864481,45.02739667,45.03306843,45.033876,45.03952309,45.04155908,45.04346775,45.04541181,45.0467363,45.04860154,45.05844292,45.05727619]}]],[[{"lng":[9.50505162,9.53202619,9.52679916,9.53150647,9.52884409,9.52087886,9.51641151,9.50956171,9.50542021,9.50355858,9.500302,9.48840252,9.48778008,9.47034938,9.46214911,9.4583928,9.46027722,9.47189918,9.47351662,9.47520873,9.48263648,9.48369378,9.47969833,9.48352062,9.48020561,9.50505162],"lat":[45.10207599,45.07843202,45.0699406,45.05235996,45.03882102,45.04216129,45.04362186,45.045552,45.04658761,45.04697391,45.04630408,45.03540941,45.03527704,45.03309072,45.03446547,45.03913479,45.04761564,45.06207006,45.06269349,45.06223732,45.06297317,45.06635957,45.07882584,45.08771205,45.09880751,45.10207599]}]],[[{"lng":[9.58727549,9.58862075,9.57970493,9.57835311,9.56633855,9.55864112,9.56808709,9.57891242,9.57982104,9.57295885,9.56795019,9.55891205,9.56059095,9.56447796,9.56500306,9.55919878,9.55503421,9.55043282,9.54481419,9.53966066,9.53517169,9.52975762,9.51581804,9.50457469,9.49837297,9.47564771,9.47989254,9.47688957,9.47554712,9.47495487,9.47153836,9.45662305,9.44888315,9.45340381,9.46121266,9.50071154,9.50227733,9.50870942,9.51500318,9.51643243,9.51986019,9.54095712,9.58727549],"lat":[44.91646982,44.90801002,44.88931342,44.88836605,44.88607674,44.87838189,44.87203388,44.85574878,44.85044193,44.84501229,44.83879885,44.82918416,44.82098401,44.81749903,44.81557897,44.80388674,44.80342094,44.80488356,44.80845735,44.80909397,44.80229146,44.79789664,44.7957459,44.81933678,44.8209664,44.81838067,44.83151503,44.84321235,44.84460427,44.84490381,44.84635831,44.85013678,44.85727911,44.86886493,44.87825881,44.89090236,44.88747471,44.88308026,44.88316006,44.89430714,44.89944974,44.91117138,44.91646982]},{"lng":[9.48052555,9.48155359,9.4821116,9.48016569,9.48052555],"lat":[44.83014404,44.83016672,44.83090253,44.83127081,44.83014404]}]],[[{"lng":[9.92507849,9.94849146,9.93691155,9.89903639,9.88216705,9.87863506,9.8782787,9.87667338,9.87252041,9.88066133,9.85375602,9.84978305,9.83646923,9.81975276,9.8141446,9.82006808,9.81626489,9.81526651,9.81482082,9.80688379,9.79938341,9.78696656,9.76803607,9.76353369,9.75929259,9.79925736,9.77964649,9.78336482,9.7841356,9.78441995,9.80158783,9.8401081,9.86251992,9.86302176,9.86381862,9.89333545,9.90722601,9.90823856,9.9127985,9.91487473,9.92022574,9.90901028,9.91508277,9.91911371,9.92507849],"lat":[44.85794328,44.83771313,44.83681792,44.80701027,44.80366699,44.79756374,44.79657624,44.78741537,44.78277504,44.76868712,44.76775715,44.76655349,44.75815367,44.76167775,44.7572116,44.7509178,44.73920612,44.73826801,44.73801013,44.73400646,44.73136753,44.71720316,44.71007491,44.72493315,44.7347199,44.77446213,44.78319481,44.78895777,44.79733351,44.79779066,44.79857166,44.81305831,44.82675454,44.82986548,44.83070565,44.83688243,44.83494212,44.83497008,44.836113,44.83699659,44.84092353,44.85061261,44.85753418,44.85766755,44.85794328]}]],[[{"lng":[9.66721348,9.6785605,9.68392695,9.6890568,9.69945294,9.70033259,9.70616196,9.7082964,9.7153811,9.70332183,9.69845771,9.69681816,9.68810735,9.67649449,9.66712491,9.65811238,9.65051534,9.64683244,9.63973778,9.62857178,9.61186792,9.56795019,9.60461324,9.60944514,9.60920271,9.60627829,9.60572197,9.61692225,9.631019,9.63591569,9.63774275,9.64322573,9.64965959,9.65264197,9.65852097,9.66721348],"lat":[44.94769965,44.94139445,44.93647439,44.92986311,44.92817055,44.92860626,44.93479373,44.93628983,44.93425622,44.92433895,44.92133513,44.91986883,44.9065897,44.90036668,44.89406638,44.88558474,44.87664423,44.87450466,44.87177199,44.86244484,44.83534023,44.83879885,44.86748932,44.87793305,44.8813551,44.88260395,44.8838852,44.89637407,44.90222037,44.89830435,44.91348953,44.92234375,44.91984078,44.92027388,44.94467145,44.94769965]}]],[[{"lng":[10.0407025,10.05022356,10.08347462,10.04545946,10.03400763,10.03102302,10.0073774,9.997304,9.9908842,9.99586057,9.98084853,9.97728503,9.96907353,9.96644945,9.99463795,10.00770094,10.0407025],"lat":[45.06377312,45.04127903,45.0439638,45.0292472,45.00076129,44.98383775,44.99518328,45.00114174,45.00410522,45.01229861,45.03464505,45.03562079,45.03803123,45.03902568,45.05308745,45.06365803,45.06377312]}]],[[{"lng":[9.25631915,9.29850587,9.30478975,9.28508507,9.26406454,9.2452712,9.23626769,9.23490407,9.21989107,9.20788302,9.20193134,9.19939175,9.24048279,9.23508364,9.25631915],"lat":[44.68517509,44.68102155,44.6443067,44.65944113,44.6543873,44.65617118,44.6677972,44.67091638,44.67419612,44.67146389,44.67161711,44.67859991,44.68830633,44.71635982,44.68517509]}]],[[{"lng":[9.40407522,9.41453933,9.42545362,9.42576668,9.42557047,9.42533671,9.42150901,9.4182468,9.4169622,9.40902813,9.40473365,9.40144139,9.40047391,9.38974608,9.38185406,9.38262916,9.34949191,9.33754824,9.3362893,9.34746312,9.40407522],"lat":[45.02382052,45.00550029,45.00472392,44.98350114,44.98263098,44.9818937,44.97708287,44.97496141,44.974453,44.97336546,44.97222851,44.97112389,44.97059619,44.97025404,44.97171319,44.95501204,44.97007943,44.96538035,44.96657234,44.99741085,45.02382052]}]],[[{"lng":[9.72812019,9.72838063,9.71150087,9.73307409,9.73536287,9.76346398,9.75452875,9.75700374,9.74231995,9.76047516,9.67497944,9.65528952,9.63603829,9.62352494,9.6219463,9.65645413,9.65552543,9.66757602,9.66391919,9.664081,9.66617565,9.67093519,9.67314635,9.6741016,9.6754696,9.67772531,9.68286986,9.69856524,9.70560957,9.72812019],"lat":[44.51304472,44.50763648,44.49743488,44.4910236,44.4731746,44.46897502,44.44186424,44.43129667,44.41638546,44.3900499,44.36471301,44.4116603,44.41390279,44.42161514,44.42658197,44.45817079,44.47501115,44.47574259,44.48355121,44.48562088,44.48734619,44.49018117,44.49106842,44.49101778,44.49076662,44.48796244,44.48587919,44.48521709,44.50493461,44.51304472]}]],[[{"lng":[9.68373281,9.70201141,9.74146677,9.76515641,9.76563673,9.76599873,9.76655076,9.78586329,9.79864167,9.80468909,9.80734995,9.81490905,9.83354556,9.83182567,9.82435242,9.81257656,9.80534164,9.79098535,9.7834584,9.78124849,9.77936914,9.76971003,9.75639041,9.75319542,9.74938793,9.74106996,9.80089339,9.82192613,9.80144098,9.80003555,9.78058277,9.74903329,9.7435135,9.73640909,9.72798442,9.72529659,9.72346189,9.72284529,9.72227286,9.72163783,9.71603554,9.70203186,9.69597791,9.69449786,9.69187234,9.684048,9.67164079,9.66004697,9.66282012,9.66344122,9.65944244,9.63812807,9.63243665,9.62461853,9.61601616,9.61600784,9.61785511,9.61786274,9.61620058,9.61430492,9.60975419,9.60798707,9.60249216,9.5915936,9.58179727,9.56950349,9.55340732,9.55383365,9.56328414,9.57661884,9.58094846,9.58497462,9.60176595,9.60217492,9.60658158,9.60978937,9.62794939,9.63179549,9.63503128,9.65355534,9.66298803,9.67521222,9.68373281],"lat":[44.68031919,44.67138147,44.67991392,44.68134207,44.68044762,44.68014812,44.67991034,44.67579104,44.67653061,44.67772148,44.67853091,44.6822222,44.66166133,44.65782536,44.65603855,44.65165777,44.63897061,44.62873616,44.62949924,44.63198104,44.63568487,44.63827106,44.63274255,44.630261,44.62522666,44.6221571,44.61040114,44.59909765,44.57517956,44.55638312,44.54663295,44.56030303,44.55778238,44.55143661,44.54609808,44.54748357,44.54971884,44.55069503,44.55225608,44.55282726,44.55574334,44.55310251,44.56152094,44.57034342,44.57614798,44.58585481,44.58705376,44.58669824,44.59506983,44.60379229,44.61233179,44.60173994,44.60328402,44.60277789,44.59959273,44.5928409,44.58882482,44.58835664,44.58231594,44.58173197,44.58140526,44.58098257,44.57704158,44.56800151,44.57303924,44.58490799,44.59053268,44.59960511,44.60745407,44.61017829,44.61466658,44.62275723,44.62895371,44.6294917,44.63257422,44.6343036,44.6394176,44.64061171,44.66328882,44.67172757,44.68022544,44.68761677,44.68031919]}]],[[{"lng":[9.66092052,9.66344122,9.66282012,9.65374216,9.65271644,9.66752102,9.65955327,9.66657072,9.66125836,9.65821672,9.65267922,9.64682038,9.64489851,9.631837,9.61791616,9.61651934,9.61425174,9.61782521,9.60381868,9.60532648,9.5928022,9.57795886,9.55830404,9.52766495,9.5208454,9.51213298,9.51141107,9.50842997,9.50621347,9.50394878,9.49680342,9.49632331,9.50460767,9.49109549,9.49333844,9.51474364,9.54003787,9.5915936,9.61620058,9.61786274,9.61600784,9.61601616,9.63812807,9.64807433,9.65944244,9.66092052],"lat":[44.61153104,44.60379229,44.59506983,44.57197037,44.54810149,44.52755306,44.51751644,44.51064272,44.49944732,44.49407231,44.49257364,44.48921297,44.48714422,44.49205165,44.48964308,44.48837225,44.48081324,44.477526,44.46405185,44.45067486,44.45354939,44.4660222,44.44013813,44.44886339,44.45497153,44.46732663,44.47247938,44.47657992,44.47890344,44.48020985,44.4827304,44.48394784,44.52996,44.55397926,44.55587663,44.56331431,44.58889521,44.56800151,44.58231594,44.58835664,44.5928409,44.59959273,44.60173994,44.61005623,44.61233179,44.61153104]}]],[[{"lng":[9.98525068,10.01468614,10.02126749,10.04663391,10.04504716,10.05172768,10.06806229,10.06801341,10.06515622,10.07142278,10.06519892,10.00453872,9.9712568,9.90334513,9.89995048,9.90762878,9.90738043,9.90348349,9.90610978,9.90406548,9.88636603,9.90884964,9.92778544,9.92833222,9.93102211,9.93561931,9.93794199,9.9386889,9.94865114,9.94390553,9.92578164,9.9478188,9.95955219,9.97764833,9.98525068],"lat":[44.59501242,44.56314008,44.56297337,44.57604043,44.57042839,44.56549086,44.5557394,44.55444349,44.54482845,44.53782886,44.52430221,44.49288363,44.46324668,44.470394,44.47270748,44.48151885,44.48983477,44.50125399,44.5067608,44.52491725,44.53753357,44.54852002,44.55272498,44.5586082,44.56152114,44.56399526,44.56434532,44.56459126,44.57144143,44.58269733,44.58777905,44.60568426,44.59504438,44.60652208,44.59501242]}]],[[{"lng":[9.82326066,9.83183852,9.84411554,9.85015228,9.85943483,9.85503883,9.84574639,9.87363433,9.88328475,9.82701367,9.8185769,9.81490905,9.80734995,9.79864167,9.76599873,9.76580303,9.76216622,9.76596766,9.76661358,9.76819686,9.7691299,9.77604411,9.78696656,9.79109082,9.79938341,9.81526651,9.82006808,9.8141446,9.82326066],"lat":[44.75867276,44.75154386,44.75223695,44.75037372,44.73313694,44.72964105,44.70812274,44.70069296,44.69119327,44.68852685,44.68551784,44.6822222,44.67853091,44.67653061,44.68014812,44.69785703,44.70541629,44.71034214,44.71049984,44.70994007,44.70985276,44.71145341,44.71720316,44.72244099,44.73136753,44.73826801,44.7509178,44.7572116,44.75867276]}]],[[{"lng":[9.80421451,9.82418494,9.82866365,9.83782321,9.84003542,9.83454003,9.83260365,9.86109028,9.86450763,9.88636603,9.89700123,9.90406548,9.90348349,9.90738043,9.90760989,9.90762878,9.90748047,9.90346033,9.90171393,9.89995048,9.89264409,9.81993668,9.75738202,9.74231995,9.74512402,9.75700374,9.75513414,9.75452875,9.75606432,9.76255513,9.76346398,9.73536287,9.73307409,9.72218356,9.71853091,9.71150087,9.71704587,9.72838063,9.72812019,9.70560957,9.701805,9.69811428,9.69875594,9.70436246,9.7048687,9.70326109,9.70000012,9.72798442,9.7435135,9.74903329,9.76198042,9.77113926,9.78058277,9.78135146,9.80003555,9.80421451],"lat":[44.5663466,44.55960535,44.5586637,44.55828177,44.55801345,44.55321937,44.55074882,44.52955259,44.52921168,44.53753357,44.53194995,44.52491725,44.50125399,44.48983477,44.48841052,44.48151885,44.48011561,44.4737871,44.47305368,44.47270748,44.47022156,44.4664229,44.40715774,44.41638546,44.42354239,44.43129667,44.43703829,44.44186424,44.44497803,44.45529699,44.46897502,44.4731746,44.4910236,44.497989,44.49746288,44.49743488,44.5063128,44.50763648,44.51304472,44.50493461,44.50749678,44.5195559,44.52579978,44.53880109,44.5420929,44.54755837,44.55270986,44.54609808,44.55778238,44.56030303,44.55026057,44.54721025,44.54663295,44.54669071,44.55638312,44.5663466]}]],[[{"lng":[10.05650741,10.09860814,10.09549596,10.10613831,10.11438453,10.12593193,10.12917996,10.14265084,10.14585635,10.13564019,10.13066962,10.08444729,10.07437836,10.06333358,10.05855681,10.05512832,10.05373427,10.05552833,10.06479711,10.06570426,10.05344948,10.03855159,10.03304268,10.02329823,10.01663582,10.01596051,10.01437655,10.01414551,10.01632657,10.01651451,10.01591843,10.01563707,10.01525424,10.01363326,10.01265845,10.01232683,10.01232701,10.01258916,10.01506402,10.02185172,10.02080044,10.02053273,10.01703569,10.01234052,9.99391349,9.98740878,9.99416253,10.00442041,10.00778096,10.01607095,10.03003943,10.03102302,10.0333834,10.03513691,10.03948856,10.03944801,10.03983613,10.05650741],"lat":[45.00119447,45.00180459,44.98445268,44.9849355,44.98518811,44.98541689,44.98545685,44.98544885,44.98526371,44.95645004,44.95218006,44.93259907,44.91729186,44.90852828,44.9077805,44.90871243,44.9100666,44.9139569,44.91849785,44.92752458,44.92775811,44.93432198,44.93890881,44.93247926,44.92477908,44.92384887,44.92096432,44.92007518,44.91802135,44.91359069,44.90923903,44.90836835,44.90748955,44.9046323,44.90249849,44.90164624,44.90093508,44.9007167,44.89956047,44.89806862,44.89162357,44.89080677,44.89070295,44.88790002,44.90771329,44.93593178,44.95520548,44.96836653,44.96982225,44.97393465,44.98203724,44.98383775,44.98672402,44.99111906,45.01218887,45.00994778,45.00965619,45.00119447]}]],[[{"lng":[10.18930262,10.21126966,10.19441187,10.17101493,10.16807447,10.09655293,10.09532033,10.07706188,10.07427047,10.07108559,10.06997195,10.06806229,10.05172768,10.04504716,10.04481211,10.04493261,10.04663391,10.04781805,10.04976706,10.09614197,10.11087316,10.11147019,10.12256051,10.13930001,10.15302095,10.15386829,10.16109354,10.16198624,10.16279418,10.16523715,10.17290751,10.17834758,10.18930262],"lat":[44.63942592,44.61930812,44.60628362,44.59737494,44.57237364,44.55845822,44.55517512,44.54679638,44.54492314,44.54140604,44.5410834,44.5557394,44.56549086,44.57042839,44.5706646,44.57387741,44.57604043,44.57815416,44.57936961,44.58979089,44.61173158,44.61197784,44.61609151,44.61556562,44.61676927,44.61691376,44.62035148,44.62090954,44.6216035,44.62408129,44.63983799,44.64462979,44.63942592]}]],[[{"lng":[10.2384203,10.28318844,10.25825515,10.24478639,10.23908694,10.23489937,10.18938958,10.1566313,10.15434576,10.15020862,10.13942665,10.12097093,10.15519901,10.16902228,10.17064286,10.17323246,10.18065147,10.18272184,10.18266581,10.18216355,10.18181877,10.18559964,10.18627549,10.19210791,10.21353331,10.24283663,10.2384203],"lat":[44.77363164,44.7652514,44.73780199,44.72933446,44.73151197,44.7258229,44.73631651,44.7022913,44.6990736,44.68965391,44.69520842,44.71201833,44.73054599,44.74031678,44.74300986,44.75550539,44.76618657,44.76980205,44.77015371,44.77031196,44.77075662,44.77642483,44.77733602,44.78192041,44.80547846,44.79922186,44.77363164]}]],[[{"lng":[10.4221255,10.42516317,10.41366834,10.41261651,10.41293173,10.41344478,10.41724755,10.42319101,10.42298031,10.40721232,10.40977123,10.38024062,10.3668924,10.3282996,10.33094678,10.33943471,10.34464801,10.34507738,10.34638183,10.32125072,10.32725953,10.32955715,10.34446402,10.35602802,10.39928495,10.4221255],"lat":[44.96549464,44.96020821,44.95391514,44.95083149,44.94972936,44.94893986,44.94584337,44.93141803,44.92853103,44.91365169,44.89828619,44.90484934,44.91446412,44.91884234,44.92319548,44.92258311,44.92499739,44.92547844,44.93358282,44.94793743,44.9550963,44.95686995,44.96380691,44.96219385,44.98465377,44.96549464]}]],[[{"lng":[9.67164079,9.70203186,9.70000012,9.70012144,9.70326109,9.70457802,9.7048687,9.70487636,9.70436246,9.70415708,9.70287983,9.69875594,9.69811428,9.6980704,9.70060701,9.70143378,9.701805,9.70221493,9.70560957,9.69856524,9.68286986,9.6754696,9.67314635,9.664081,9.66795483,9.66757602,9.65752134,9.65552543,9.64867499,9.64209262,9.64099804,9.64525733,9.64682038,9.66125836,9.65955327,9.66752102,9.65271644,9.65679596,9.65385147,9.65374216,9.67164079],"lat":[44.58705376,44.55310251,44.55270986,44.5512777,44.54755837,44.54408427,44.5420929,44.54070646,44.53880109,44.53846926,44.53790996,44.52579978,44.5195559,44.51798971,44.50935868,44.50801221,44.50749678,44.50706215,44.50493461,44.48521709,44.48587919,44.49076662,44.49106842,44.48562088,44.47918838,44.47574259,44.47472059,44.47501115,44.47513128,44.47784228,44.48008107,44.48546769,44.48921297,44.49944732,44.51751644,44.52755306,44.54810149,44.55934931,44.56943104,44.57197037,44.58705376]}]],[[{"lng":[10.17362533,10.19275251,10.18974039,10.17362893,10.16582154,10.16468433,10.15943553,10.15464534,10.14261318,10.12530247,10.13802132,10.13676822,10.14327882,10.14812547,10.14905848,10.12951432,10.12902711,10.12613624,10.11820699,10.11287723,10.10431967,10.10109299,10.10058707,10.09639667,10.0896528,10.08699629,10.07095713,10.06499919,10.05317828,9.98928471,10.00693708,9.96980943,10.00453872,10.04625073,10.06519892,10.07142278,10.07108559,10.07427047,10.08721392,10.09532033,10.09655293,10.16689854,10.17362533],"lat":[44.56602849,44.55446913,44.5493421,44.53813859,44.53536475,44.53514229,44.53462288,44.5333627,44.52624566,44.50422616,44.49408021,44.48464893,44.48008261,44.47531209,44.46783501,44.45367972,44.45309937,44.44533157,44.43539847,44.43457727,44.43840547,44.43917485,44.43899966,44.43527685,44.43005679,44.42831758,44.42636247,44.41434551,44.37303332,44.40433116,44.4317343,44.45781236,44.49288363,44.50959608,44.52430221,44.53782886,44.54140604,44.54492314,44.55050825,44.55517512,44.55845822,44.57214261,44.56602849]}]],[[{"lng":[10.24806587,10.25826177,10.28517347,10.29795413,10.29585204,10.29377783,10.29345278,10.29339209,10.28453761,10.27982507,10.27227722,10.26263904,10.23867623,10.17834758,10.18147228,10.18212314,10.18242051,10.18327996,10.18539961,10.22784245,10.24100319,10.24225625,10.24806587],"lat":[44.72210584,44.71306368,44.70943312,44.70416689,44.699752,44.69332986,44.69176714,44.69130871,44.68810481,44.68212616,44.67337921,44.67282903,44.65235903,44.64462979,44.64830649,44.6499652,44.65354507,44.65681302,44.65940174,44.69785686,44.7224979,44.72381662,44.72210584]}]],[[{"lng":[10.03855159,10.04664672,10.05344948,10.05859281,10.06570426,10.06479711,10.06243614,10.05552833,10.05512832,10.07437836,10.10915444,10.10180727,10.10829925,10.10225341,10.10274895,10.10551324,10.10603066,10.10491279,10.10499846,10.09963032,10.094839,10.09307307,10.09470007,10.09205502,10.08511444,10.06575282,10.06661241,10.06595168,10.06317686,10.04876975,10.0410967,10.0389517,10.03414078,10.02482577,10.0413598,10.0414974,10.04103976,10.0513617,10.02076368,10.01578716,10.01512274,10.00709891,9.99107621,9.98668165,9.98433171,9.9832592,9.98350793,9.98409924,9.99463695,10.00325577,10.00672422,10.00881427,10.00947845,10.00997826,10.01089591,10.01101741,10.01234052,10.02053273,10.01232701,10.01265845,10.01525424,10.01591843,10.01414551,10.01596051,10.03855159],"lat":[44.93432198,44.93275374,44.92775811,44.93043814,44.92752458,44.91849785,44.91619735,44.9139569,44.90871243,44.91729186,44.9053378,44.89603784,44.8839033,44.87736912,44.86843751,44.86140719,44.85736024,44.85449941,44.847729,44.84426101,44.84248862,44.83587999,44.80775077,44.80495842,44.80031646,44.78362873,44.78019987,44.77932382,44.7789536,44.77974399,44.77687948,44.77426136,44.77166739,44.78304013,44.7922168,44.81321758,44.82292605,44.83686579,44.84299478,44.84565877,44.85393759,44.85247827,44.84577687,44.84556288,44.85172257,44.85711507,44.85759904,44.85813407,44.86738692,44.87238867,44.87309631,44.87388806,44.87422426,44.87457092,44.87564305,44.87607406,44.88790002,44.89080677,44.90093508,44.90249849,44.90748955,44.90923903,44.92007518,44.92384887,44.93432198]}]],[[{"lng":[10.34507738,10.33943471,10.33787016,10.3347982,10.33094678,10.3282996,10.34283512,10.34786005,10.34939729,10.34979938,10.3668924,10.37659043,10.38024062,10.3944343,10.38725383,10.38944832,10.40451512,10.41087276,10.40651542,10.36555059,10.36446475,10.35982737,10.36130695,10.35468876,10.34328995,10.34192922,10.33179816,10.32543358,10.31295284,10.29684848,10.29153694,10.32125072,10.34507738],"lat":[44.92547844,44.92258311,44.92396076,44.92426677,44.92319548,44.91884234,44.91408132,44.91171761,44.9091969,44.90905711,44.91446412,44.91120931,44.90484934,44.90094107,44.89308876,44.892711,44.89126806,44.89050384,44.88007023,44.87021516,44.87033616,44.87123768,44.87402129,44.87560173,44.87813094,44.878417,44.87996694,44.88124728,44.8841911,44.88541036,44.90607617,44.94793743,44.92547844]}]],[[{"lng":[10.35438867,10.36745315,10.38635171,10.41539095,10.41386308,10.41678211,10.40261035,10.39913187,10.39911447,10.38163425,10.36176783,10.34075147,10.34106318,10.33834994,10.34435066,10.33561649,10.32287976,10.32559575,10.3438819,10.34334948,10.33908294,10.33738057,10.32877639,10.32655631,10.32116695,10.35438867],"lat":[44.6827875,44.6695694,44.67488695,44.66685726,44.66396285,44.63947623,44.61644298,44.58548124,44.58793913,44.58850305,44.58609498,44.59349163,44.59831329,44.60371959,44.61222843,44.61771437,44.61951007,44.62375473,44.63708061,44.656451,44.66236165,44.66347988,44.66701024,44.66739615,44.67123062,44.6827875]}]],[[{"lng":[9.90599032,9.90761178,9.90356431,9.915264,9.92904078,9.94390553,9.94868808,9.94865114,9.9480311,9.94536253,9.9386889,9.93561931,9.93150685,9.93102211,9.92833222,9.92868506,9.92778544,9.92074171,9.90884964,9.88636603,9.87250724,9.8650649,9.86450763,9.86366692,9.86109028,9.85415968,9.83260365,9.84003542,9.82866365,9.82418494,9.819943,9.81393865,9.80421451,9.80344765,9.82192613,9.84208749,9.84410154,9.8703208,9.89877721,9.89952337,9.90119015,9.90328613,9.90599032],"lat":[44.61689873,44.61418511,44.61305589,44.59093368,44.58319733,44.58269733,44.57169264,44.57144143,44.57078885,44.56854233,44.56459126,44.56399526,44.56191329,44.56152114,44.5586082,44.55355491,44.55272498,44.54916297,44.54852002,44.53753357,44.533175,44.52945054,44.52921168,44.52896901,44.52955259,44.53315165,44.55074882,44.55801345,44.5586637,44.55960535,44.56318289,44.56498134,44.5663466,44.56644201,44.59909765,44.60298387,44.6037072,44.61689705,44.62473383,44.62489,44.62517394,44.62458122,44.61689873]}]],[[{"lng":[9.97670309,10.00576832,10.01838589,10.01931218,10.02182372,10.07061014,10.09116961,10.05329354,10.03927635,10.01621242,10.00914698,9.98798116,9.99042018,9.98096443,9.97780256,9.9769318,9.97552689,9.97303673,9.97196287,9.96808072,9.96350403,9.96310323,9.952011,9.94707611,9.87624159,9.89990441,9.96670113,9.96709661,9.96958453,9.96730419,9.96921857,9.96961993,9.97180481,9.9770587,9.97670309],"lat":[44.7251994,44.72500113,44.71723736,44.71246688,44.71098607,44.70375137,44.69148466,44.68227981,44.66119868,44.66228849,44.6781863,44.68299858,44.66099369,44.65826658,44.65775355,44.65772499,44.65818712,44.66012586,44.66304277,44.6662536,44.66868692,44.66886136,44.67122592,44.6785829,44.69823335,44.71637803,44.70770303,44.70795175,44.71708599,44.72344294,44.72844098,44.72903172,44.72979635,44.72832015,44.7251994]}]],[[{"lng":[9.87347212,9.88328475,9.88448824,9.88975176,9.89935023,9.90885266,9.88804777,9.91097462,9.92443076,9.93566693,9.90761178,9.89952337,9.88767584,9.8703208,9.85468693,9.84410154,9.84208749,9.8285231,9.82192613,9.74100698,9.74106996,9.75467623,9.75639041,9.76971003,9.7834584,9.79098535,9.83182567,9.81474301,9.81490905,9.8185769,9.82701367,9.84994977,9.87347212],"lat":[44.69158384,44.69119327,44.68734896,44.68660591,44.68711587,44.68066698,44.65529094,44.66042176,44.65019494,44.61868498,44.61418511,44.62489,44.61974328,44.61689705,44.60926402,44.6037072,44.60298387,44.60225486,44.59909765,44.6191867,44.6221571,44.63168259,44.63274255,44.63827106,44.62949924,44.62873616,44.65782536,44.67937864,44.6822222,44.68551784,44.68852685,44.69170731,44.69158384]}]],[[{"lng":[10.27446659,10.30378228,10.35883187,10.34446402,10.32725953,10.32018926,10.31481036,10.30781027,10.3043171,10.27417876,10.2399881,10.24676934,10.24443532,10.25924482,10.25915999,10.25896543,10.2585585,10.24442392,10.24293077,10.24197922,10.24119487,10.2407001,10.23492305,10.23388324,10.23310224,10.23261597,10.23440673,10.23326899,10.24218372,10.24534274,10.24360372,10.23930326,10.23441476,10.2330611,10.2299982,10.24379984,10.24431666,10.23480907,10.23739026,10.25179823,10.25458478,10.25719945,10.27446659],"lat":[44.99793011,44.99939951,44.96548672,44.96380691,44.9550963,44.94697749,44.93901884,44.93047535,44.92675249,44.87893207,44.87690493,44.89191849,44.90172014,44.93548624,44.93624333,44.93719968,44.93771728,44.9434444,44.94297456,44.94058139,44.93947368,44.93945205,44.94134207,44.94191144,44.94273004,44.9436985,44.95628186,44.97122833,44.96416422,44.9660022,44.97061213,44.97348548,44.97557287,44.9775049,44.99381332,45.00020818,44.99829415,44.9827161,44.97947449,44.9911189,44.9996401,45.00200582,44.99793011]}]],[[{"lng":[10.17980978,10.17779791,10.16803355,10.17043162,10.15168863,10.14585635,10.14265084,10.12917996,10.11438453,10.09713074,10.09549596,10.09037889,10.09263955,10.09860814,10.06165614,10.05650741,10.05243013,10.0417783,10.03944801,10.03948856,10.04316293,10.04545946,10.08347462,10.1061908,10.16477342,10.17980978],"lat":[45.02216179,45.01260143,44.99173641,44.98116165,44.98513301,44.98526371,44.98544885,44.98545685,44.98518811,44.98437397,44.98445268,44.98651435,44.99367096,45.00180459,44.99912128,45.00119447,45.00580504,45.00899036,45.00994778,45.01218887,45.01955486,45.0292472,45.0439638,45.02213035,45.04432239,45.02216179]}]],[[{"lng":[10.60945751,10.62378462,10.63229571,10.64200086,10.66242978,10.66077948,10.66025903,10.65483831,10.65738412,10.6377209,10.63525602,10.63762466,10.56748216,10.56672028,10.57090473,10.56353402,10.60945751],"lat":[44.64524387,44.63528792,44.63672904,44.63616875,44.63069489,44.62903557,44.62802587,44.61155814,44.59599653,44.58368584,44.57644719,44.57288426,44.59154957,44.60477561,44.61313087,44.62081207,44.64524387]}]],[[{"lng":[10.66810935,10.68318434,10.68704497,10.69093661,10.69384417,10.69326411,10.70264748,10.70865066,10.7092013,10.73057031,10.73292079,10.70307781,10.70246265,10.70235174,10.70579926,10.69276677,10.66658745,10.65036398,10.65049935,10.65939755,10.66810935],"lat":[44.81668874,44.80978791,44.80733636,44.80465918,44.80123128,44.79955647,44.79442973,44.79217851,44.79213529,44.79596338,44.79055027,44.77623445,44.77554145,44.77477792,44.76224676,44.76498887,44.75162736,44.76379944,44.81300625,44.81939781,44.81668874]}]],[[{"lng":[10.64517632,10.65881256,10.6566092,10.65689755,10.65813974,10.66225185,10.67020156,10.65482533,10.66819582,10.66701689,10.66455634,10.65906056,10.65490011,10.65342969,10.62152266,10.59041848,10.59778331,10.60246568,10.60295587,10.60426676,10.59768864,10.60218334,10.60080057,10.59369831,10.59280317,10.58984713,10.58810319,10.58284129,10.5759267,10.57531203,10.57048906,10.56678696,10.56656204,10.56679063,10.5702894,10.57079702,10.56995661,10.62078571,10.61831059,10.63578324,10.63994518,10.64197064,10.64517632],"lat":[44.5410149,44.53680249,44.53006457,44.52825088,44.52726056,44.52494115,44.5222054,44.502151,44.46778259,44.46699858,44.46490984,44.45995286,44.45417953,44.43330565,44.40585934,44.41087916,44.4198781,44.42206315,44.42299255,44.42774556,44.4389381,44.45255916,44.45807017,44.46816244,44.46899418,44.47125002,44.47228259,44.47390409,44.47994147,44.48093122,44.49280008,44.49871162,44.49923685,44.49978738,44.50679734,44.5083658,44.51314422,44.53470185,44.54119178,44.54670441,44.54252155,44.54158318,44.5410149]}]],[[{"lng":[10.49634283,10.51154819,10.50540505,10.51298305,10.50934796,10.51755438,10.47224255,10.45262701,10.44757884,10.44646615,10.44575724,10.43617839,10.4397706,10.44068113,10.44128334,10.44764961,10.45816994,10.45984446,10.49546663,10.49722454,10.49756764,10.50210026,10.50727399,10.49634283],"lat":[44.70381381,44.69345895,44.68052638,44.67408609,44.6725907,44.66377249,44.65321894,44.63596875,44.63799617,44.64101364,44.64857454,44.65802187,44.66622733,44.67396233,44.6768805,44.68021183,44.68072613,44.68108284,44.7109641,44.7130116,44.71358774,44.7223123,44.72531783,44.70381381]}]],[[{"lng":[10.59151733,10.58976685,10.59537541,10.5957044,10.55879708,10.54773292,10.53631807,10.52570354,10.52681125,10.59151733],"lat":[44.91481517,44.9041992,44.89044693,44.87767297,44.88045133,44.8777212,44.88029689,44.89686792,44.91265783,44.91481517]}]],[[{"lng":[10.51985302,10.52681125,10.52702571,10.52570354,10.53222308,10.5258607,10.50620662,10.50065156,10.49624567,10.48349322,10.47304338,10.47055657,10.45516736,10.45490031,10.45346846,10.45265323,10.45885056,10.4643141,10.46786211,10.47431294,10.4637302,10.48979751,10.49422693,10.49604931,10.49942825,10.50431523,10.51985302],"lat":[44.91272645,44.91265783,44.91233368,44.89686792,44.88152669,44.88033361,44.88262454,44.88084327,44.88280951,44.85422337,44.85489879,44.83324032,44.83299188,44.83805898,44.84451371,44.84687811,44.85116962,44.85303062,44.87057509,44.87581668,44.89777374,44.90469219,44.90698384,44.90838229,44.91799709,44.9224276,44.91272645]}]],[[{"lng":[10.65900892,10.65049935,10.65009865,10.63240587,10.61395927,10.61116638,10.60875808,10.60170269,10.58900084,10.55530948,10.56413404,10.56762305,10.57636084,10.57646812,10.57647148,10.57629688,10.59656503,10.5984031,10.61524052,10.64030751,10.65851178,10.65887195,10.66166848,10.66126383,10.65985627,10.65760621,10.65939755,10.65900892],"lat":[44.81730295,44.81300625,44.76613591,44.7669394,44.77402826,44.77271115,44.76125047,44.75296967,44.74901746,44.76464762,44.77813695,44.77956096,44.78934303,44.78964529,44.78987799,44.79024413,44.79810495,44.79962312,44.81654872,44.85195666,44.8601016,44.8550147,44.84100282,44.83795699,44.83388151,44.82520467,44.81939781,44.81730295]}]],[[{"lng":[10.78283663,10.77544191,10.79702592,10.77855349,10.77569543,10.77375132,10.73797932,10.72048664,10.74384482,10.74514403,10.75745286,10.7628961,10.77824701,10.78114391,10.78821693,10.79388435,10.78283663],"lat":[44.88402771,44.86882599,44.8505652,44.83141448,44.82287547,44.81158103,44.80723403,44.82144776,44.8370541,44.85907581,44.86716439,44.87377348,44.88956352,44.89233599,44.89987262,44.89883849,44.88402771]}]],[[{"lng":[10.53272517,10.57444239,10.57646812,10.52197985,10.51165804,10.50913001,10.50602181,10.51337369,10.51662584,10.51011337,10.49705379,10.49148276,10.48829835,10.482786,10.48520857,10.53272517],"lat":[44.79888078,44.79360951,44.78964529,44.75694494,44.75547645,44.75413467,44.75652528,44.75695921,44.75908557,44.76126942,44.76050065,44.75907019,44.76003897,44.77354647,44.78445264,44.79888078]}]],[[{"lng":[10.51695571,10.53465287,10.56679063,10.56678696,10.57048906,10.5759267,10.58284129,10.59280317,10.60080057,10.59768864,10.60426676,10.60246568,10.59041848,10.5876519,10.58379583,10.57707253,10.57394941,10.55149122,10.5201176,10.47648649,10.4718588,10.46874945,10.46759902,10.46483677,10.46123644,10.45996313,10.45593114,10.46650027,10.46880129,10.47782604,10.47926219,10.48334256,10.47760711,10.47583039,10.46753056,10.51695571],"lat":[44.49998766,44.48337096,44.49978738,44.49871162,44.49280008,44.47994147,44.47390409,44.46899418,44.45807017,44.4389381,44.42774556,44.42206315,44.41087916,44.41127326,44.41402764,44.41760474,44.41961941,44.41953964,44.40697968,44.40800228,44.40573031,44.40490158,44.41718258,44.42021594,44.42138742,44.42221394,44.43127712,44.43697563,44.43754023,44.43871117,44.43938579,44.45116238,44.45944291,44.46368787,44.48952435,44.49998766]}]],[[{"lng":[10.78643542,10.76496176,10.70577599,10.72597888,10.75546416,10.75736168,10.74181609,10.73639508,10.7404023,10.73691583,10.77099874,10.78643542],"lat":[44.61932195,44.54042344,44.56589081,44.60578313,44.60826388,44.61644039,44.6166426,44.62124888,44.62542798,44.62717795,44.63753756,44.61932195]}]],[[{"lng":[10.50191331,10.50082667,10.50190069,10.50276118,10.50371281,10.5264815,10.52788843,10.53033929,10.53474886,10.53675016,10.53716707,10.53762715,10.54056809,10.54300981,10.54325738,10.56238447,10.56458928,10.56645365,10.53465287,10.51698854,10.51046579,10.46753056,10.44081509,10.4397278,10.43913224,10.4383595,10.43649748,10.43596817,10.43538336,10.42983185,10.41555714,10.41709781,10.46470525,10.47070793,10.46797733,10.4682904,10.46923998,10.47101814,10.47684547,10.47809312,10.47749567,10.47778323,10.49848047,10.50191331],"lat":[44.57101398,44.56695912,44.56563064,44.56530425,44.56509365,44.56572781,44.55405074,44.54764414,44.53918111,44.53678653,44.5363668,44.53615354,44.53697364,44.53209956,44.51679863,44.50191834,44.50063679,44.49988654,44.48337096,44.50037434,44.50339565,44.48952435,44.508716,44.52740103,44.52771463,44.5275083,44.52650545,44.52596296,44.52415179,44.51735247,44.52112686,44.53847816,44.54553407,44.54848178,44.55801457,44.5589468,44.56018593,44.5617925,44.56270755,44.56871408,44.56899187,44.57040156,44.57416494,44.57101398]}]],[[{"lng":[10.6925763,10.70577599,10.71137126,10.72795089,10.73065118,10.73576465,10.73777104,10.74007833,10.74172021,10.74782789,10.74925149,10.75982573,10.76496176,10.75970797,10.7590275,10.75160006,10.74137949,10.73003205,10.72286921,10.70263765,10.69301706,10.68720679,10.68432944,10.67359556,10.66819582,10.65423068,10.65482533,10.65779489,10.66314561,10.66405071,10.67020156,10.66898251,10.66225185,10.65813974,10.6566092,10.67070908,10.6794671,10.67573998,10.6925763],"lat":[44.56668142,44.56589081,44.56519491,44.56087608,44.5598179,44.55565314,44.55456033,44.55385001,44.55359991,44.55283139,44.55246749,44.54874002,44.54042344,44.53441433,44.53355158,44.52339388,44.51058655,44.50162595,44.49915051,44.48803421,44.47755419,44.47358903,44.47234414,44.47023331,44.46778259,44.47848281,44.502151,44.50487173,44.50681949,44.50767955,44.5222054,44.52314147,44.52494115,44.52726056,44.53006457,44.54042359,44.55438403,44.56662366,44.56668142]}]],[[{"lng":[10.59317246,10.59607041,10.61037866,10.62814926,10.5984031,10.52879928,10.52995325,10.53875325,10.57908864,10.56726678,10.57204327,10.57834861,10.58273643,10.583539,10.57802498,10.59317246],"lat":[44.85596451,44.84620117,44.84293054,44.83599446,44.79962312,44.80004518,44.81673319,44.83122085,44.84341709,44.84692875,44.85409175,44.86713426,44.87709279,44.87681161,44.86273223,44.85596451]}]],[[{"lng":[10.4374701,10.44081509,10.45267298,10.46753056,10.47083422,10.48334256,10.45593114,10.46759902,10.46874945,10.3711912,10.37010675,10.36980533,10.36515408,10.36447996,10.32826262,10.3304665,10.33079501,10.33201618,10.33405701,10.35996339,10.38508833,10.38401493,10.38802619,10.40879235,10.41182993,10.41454996,10.42004714,10.42037064,10.42084021,10.42094253,10.42082695,10.42049017,10.41436901,10.41371637,10.41574929,10.42701716,10.43033461,10.43041493,10.42983185,10.43034706,10.43596817,10.43913224,10.4374701],"lat":[44.51948922,44.508716,44.49712346,44.48952435,44.48539465,44.45116238,44.43127712,44.41718258,44.40490158,44.38434147,44.38840574,44.38894053,44.39668458,44.39739485,44.41953643,44.42809037,44.42837913,44.42773019,44.42856163,44.44388474,44.44850723,44.45517322,44.46479339,44.46851826,44.48500057,44.48931517,44.49092144,44.49129551,44.49250502,44.49464637,44.4955841,44.49621846,44.49948586,44.50117292,44.50356944,44.51283688,44.51630189,44.51649894,44.51735247,44.51886746,44.52596296,44.52771463,44.51948922]}]],[[{"lng":[10.5223089,10.554508,10.56083906,10.51298305,10.51154819,10.49634283,10.49741681,10.50727399,10.5223089],"lat":[44.72436225,44.72021759,44.71368285,44.67408609,44.69345895,44.70381381,44.70630237,44.72531783,44.72436225]}]],[[{"lng":[10.43483871,10.44019133,10.47809312,10.47684547,10.4682904,10.47070793,10.43591576,10.41709781,10.41555714,10.41749996,10.42983185,10.43041493,10.41574929,10.41436901,10.39292695,10.36275898,10.35104215,10.35169559,10.35342014,10.35453691,10.36332812,10.40160063,10.39872478,10.39955517,10.40306441,10.40350853,10.40261035,10.42756892,10.43483871],"lat":[44.59395957,44.58294519,44.56871408,44.56270755,44.5589468,44.54848178,44.54892009,44.53847816,44.52112686,44.51925723,44.51735247,44.51649894,44.50356944,44.49948586,44.49902021,44.51255952,44.52537436,44.52750924,44.52997351,44.5328501,44.54292736,44.56292673,44.58373973,44.58671917,44.59381074,44.59549977,44.61644298,44.60118963,44.59395957]}]],[[{"lng":[10.76270878,10.77375132,10.76114132,10.76111868,10.77012221,10.77262424,10.79064395,10.79884187,10.81064279,10.81499191,10.82408636,10.84204233,10.82751826,10.81805863,10.81619403,10.81545751,10.81761237,10.81762481,10.81541594,10.78290779,10.77104817,10.77395047,10.76845698,10.76754634,10.76136567,10.74579795,10.74296994,10.72645694,10.71835709,10.71849994,10.7245848,10.72380002,10.70246265,10.73292079,10.73057031,10.73797932,10.75333384,10.76270878],"lat":[44.81482628,44.81158103,44.79823676,44.79749289,44.79601406,44.80165256,44.7976701,44.80345112,44.80073497,44.80722611,44.80263535,44.79553861,44.76583027,44.76020079,44.7574246,44.75463324,44.74909298,44.74699696,44.74161798,44.73767421,44.74123501,44.73490659,44.72170432,44.71305725,44.71232063,44.70049261,44.69541129,44.70055997,44.717351,44.7273707,44.73578836,44.74343944,44.77554145,44.79055027,44.79596338,44.80723403,44.81554677,44.81482628]}]],[[{"lng":[10.84264467,10.85006838,10.84678674,10.83808471,10.83746367,10.81526543,10.80102442,10.79702592,10.77544191,10.79388435,10.81379456,10.83098889,10.84264467],"lat":[44.90311653,44.86651889,44.86005588,44.86184826,44.86182225,44.84988056,44.85369317,44.8505652,44.86882599,44.89883849,44.89441001,44.90263341,44.90311653]}]],[[{"lng":[10.47055657,10.46568874,10.47235742,10.49996957,10.50813123,10.51180455,10.51741527,10.52026938,10.52995325,10.53349677,10.53651673,10.52879928,10.48520857,10.482786,10.47577654,10.47346546,10.44155685,10.43158361,10.42966154,10.43509568,10.43553133,10.42992548,10.42833933,10.42969763,10.42728629,10.42419398,10.42317822,10.42351513,10.42383796,10.42484092,10.43608556,10.43733454,10.43770836,10.43749401,10.44207566,10.44064355,10.4459668,10.44782074,10.44998282,10.45516736,10.47055657],"lat":[44.83324032,44.82496247,44.82406647,44.83128684,44.82275336,44.82149849,44.82084793,44.82019782,44.81673319,44.81586195,44.81293167,44.80004518,44.78445264,44.77354647,44.77273707,44.76839185,44.76452185,44.76731819,44.76550415,44.75446133,44.75061743,44.74737983,44.74876431,44.75313139,44.7737226,44.78468086,44.79529807,44.79820157,44.79898974,44.79967039,44.79984459,44.80024297,44.80103946,44.80818986,44.8196098,44.82294967,44.82843667,44.82922338,44.82816971,44.83299188,44.83324032]}]],[[{"lng":[10.64107378,10.64835794,10.64875827,10.64883729,10.64816694,10.64564224,10.64307336,10.63804219,10.64116109,10.64030751,10.63596353,10.62814926,10.59607041,10.57802498,10.5957044,10.58976685,10.59244063,10.62518043,10.62788141,10.64107378],"lat":[44.91467624,44.90795376,44.90656277,44.90489626,44.90318655,44.89860495,44.89293019,44.87992704,44.85260155,44.85195666,44.84740092,44.83599446,44.84620117,44.86273223,44.87767297,44.9041992,44.91480234,44.92562493,44.92420179,44.91467624]}]],[[{"lng":[10.65497658,10.67020848,10.68810684,10.69319133,10.71003923,10.72285667,10.72747282,10.7304416,10.73150411,10.73437014,10.74916657,10.75102722,10.74916416,10.73924448,10.73096355,10.68580815,10.64116109,10.64534436,10.63851461,10.63804219,10.64816694,10.64875827,10.62788141,10.65497658],"lat":[44.94561783,44.94243439,44.93128329,44.93054186,44.93117744,44.92884227,44.92684611,44.92488373,44.92439953,44.92363586,44.92230289,44.90977962,44.90810681,44.90807381,44.8863023,44.87806599,44.85260155,44.86612094,44.87652649,44.87992704,44.90318655,44.90656277,44.92420179,44.94561783]}]],[[{"lng":[10.72998736,10.74371981,10.77065061,10.76824387,10.75908793,10.74916657,10.6503332,10.68667999,10.69474094,10.72998736],"lat":[44.98877271,44.94907685,44.94411429,44.9410907,44.93266024,44.92230289,44.94807474,44.98659263,44.9619401,44.98877271]}]],[[{"lng":[10.46401077,10.47585095,10.49229543,10.50210026,10.49722454,10.48547994,10.45984446,10.45816994,10.44991353,10.44764961,10.44068113,10.41896062,10.42851981,10.42926354,10.44579423,10.4470557,10.44146491,10.46401077],"lat":[44.73909872,44.72990804,44.72935484,44.7223123,44.7130116,44.70599918,44.68108284,44.68072613,44.68042618,44.68021183,44.67396233,44.67623284,44.69401926,44.69500921,44.71568641,44.71766893,44.73047785,44.73909872]}]],[[{"lng":[10.76285034,10.77824701,10.75745286,10.75571557,10.74514403,10.74153198,10.74384482,10.72048664,10.73577608,10.73797932,10.73536385,10.73057031,10.70865066,10.69326411,10.69384417,10.69093661,10.68318434,10.65939755,10.66166848,10.65851178,10.68580815,10.73096355,10.74191573,10.75514375,10.76285034],"lat":[44.88509874,44.88956352,44.86716439,44.86581381,44.85907581,44.85429686,44.8370541,44.82144776,44.81048132,44.80723403,44.79640598,44.79596338,44.79217851,44.79955647,44.80123128,44.80465918,44.80978791,44.81939781,44.84100282,44.8601016,44.87806599,44.8863023,44.89756377,44.88942141,44.88509874]}]],[[{"lng":[10.50065156,10.54773292,10.55879708,10.58273643,10.56726678,10.57908864,10.52995325,10.49996957,10.46568874,10.50065156],"lat":[44.88084327,44.8777212,44.88045133,44.87709279,44.84692875,44.84341709,44.81673319,44.83128684,44.82496247,44.88084327]}]],[[{"lng":[10.56307778,10.56655906,10.56678082,10.58769778,10.56353402,10.57090473,10.56830978,10.56672028,10.56248673,10.55626788,10.54757697,10.54690023,10.51401272,10.51313622,10.49964735,10.49768515,10.49346557,10.48261822,10.48098465,10.46017812,10.45383241,10.47224255,10.51892707,10.55278067,10.55414819,10.55641688,10.56379483,10.56307778],"lat":[44.65190768,44.64940307,44.64313356,44.64301585,44.62081207,44.61313087,44.60466376,44.60477561,44.60840757,44.61057206,44.61312984,44.61327406,44.60960075,44.60933329,44.60218778,44.60085416,44.5949228,44.59293509,44.60767077,44.61016235,44.62009195,44.65321894,44.64998743,44.65597326,44.65570259,44.65515837,44.65326628,44.65190768]}]],[[{"lng":[10.79363386,10.86539138,10.876633,10.87321308,10.83098889,10.81580363,10.81379456,10.81222776,10.80315486,10.79611753,10.79388435,10.79326936,10.79215134,10.78857754,10.78821693,10.78114391,10.77990225,10.77824701,10.76839749,10.76285034,10.74191573,10.73096355,10.72401897,10.73924448,10.75102722,10.77065061,10.79363386],"lat":[44.93956283,44.92961802,44.91705876,44.90725762,44.90263341,44.89466613,44.89441001,44.89452489,44.89638794,44.89815524,44.89883849,44.89901919,44.89931581,44.90006501,44.89987262,44.89233599,44.89108606,44.88956352,44.88141214,44.88509874,44.89756377,44.8863023,44.88993616,44.90807381,44.90977962,44.94411429,44.93956283]}]],[[{"lng":[10.61600106,10.63240587,10.6494452,10.65010069,10.65009865,10.6500674,10.65036398,10.65062336,10.65687293,10.66658745,10.67404455,10.70579926,10.72380002,10.7245848,10.71835709,10.72645694,10.73954107,10.75821906,10.75572189,10.7563573,10.77099874,10.73691583,10.73177014,10.72581814,10.71501867,10.70622435,10.67396044,10.60772153,10.58834623,10.58769778,10.57696224,10.56678082,10.56431635,10.56655906,10.56379483,10.55414819,10.55137465,10.51892707,10.50921879,10.51755438,10.51251706,10.50934796,10.53412901,10.54095431,10.56083906,10.554508,10.54464027,10.5223089,10.50727399,10.50210026,10.49089032,10.49229543,10.49344994,10.49650967,10.5022961,10.51024999,10.51165804,10.52197985,10.56070366,10.55530948,10.58900084,10.60170269,10.61116638,10.61600106],"lat":[44.77298279,44.7669394,44.76790781,44.76654927,44.76613591,44.765343,44.76379944,44.76312089,44.75641415,44.75162736,44.74964956,44.76224676,44.74343944,44.73578836,44.717351,44.70055997,44.68726198,44.68168249,44.67699206,44.67128556,44.63753756,44.62717795,44.64313622,44.64608459,44.64418127,44.6242564,44.63929465,44.64597276,44.63625956,44.64301585,44.64048787,44.64313356,44.64508637,44.64940307,44.65326628,44.65570259,44.65190595,44.64998743,44.65397724,44.66377249,44.66993485,44.6725907,44.68274704,44.68709907,44.71368285,44.72021759,44.71704485,44.72436225,44.72531783,44.7223123,44.72648703,44.72935484,44.73293968,44.7389266,44.74869004,44.75050612,44.75547645,44.75694494,44.77317609,44.76464762,44.74901746,44.75296967,44.77271115,44.77298279]}]],[[{"lng":[10.839171,10.84678674,10.84591291,10.82295435,10.81605503,10.81499191,10.81251771,10.81148566,10.81064279,10.80675964,10.79884187,10.79836252,10.79064395,10.78328546,10.77600627,10.77262424,10.77145872,10.76111868,10.76114132,10.77173267,10.77435622,10.77855349,10.79702592,10.81526543,10.839171],"lat":[44.86138066,44.86005588,44.85792647,44.82068411,44.80907214,44.80722611,44.80284323,44.80140578,44.80073497,44.80190376,44.80345112,44.8033916,44.7976701,44.79851446,44.80078585,44.80165256,44.80162812,44.79749289,44.79823676,44.80887124,44.8123098,44.83141448,44.8505652,44.84988056,44.86138066]}]],[[{"lng":[10.89799094,10.88788567,10.8771456,10.87917682,10.87813444,10.87687135,10.87291136,10.86018958,10.85415076,10.85006838,10.84645322,10.84310217,10.84547186,10.84242437,10.84264467,10.84196909,10.87321308,10.89799094],"lat":[44.92180546,44.91427123,44.90188517,44.88965934,44.86752206,44.86658579,44.86584457,44.86505222,44.86554092,44.86651889,44.86745203,44.87308744,44.88461677,44.89346995,44.90311653,44.90337949,44.90725762,44.92180546]}]],[[{"lng":[10.80739037,10.80895314,10.80748381,10.80615318,10.80616272,10.8067436,10.81340449,10.82065767,10.81528894,10.78196925,10.75572189,10.80739037],"lat":[44.70321611,44.70313734,44.70135116,44.69752825,44.69702397,44.69662768,44.69450556,44.6903571,44.65653085,44.62776737,44.67699206,44.70321611]}]],[[{"lng":[10.81009936,10.81541594,10.81489754,10.82151714,10.82147836,10.81628175,10.80960811,10.80088424,10.78662333,10.75821906,10.73954107,10.76754634,10.77395047,10.77104817,10.81009936],"lat":[44.74313417,44.74161798,44.73916564,44.73527584,44.73474255,44.71758359,44.70308585,44.70466926,44.70187306,44.68168249,44.68726198,44.71305725,44.73490659,44.74123501,44.74313417]}]],[[{"lng":[10.43076139,10.44068113,10.43617839,10.45614264,10.46017812,10.48098465,10.4782613,10.48184748,10.48261822,10.4828067,10.4826431,10.47153899,10.47047088,10.46465539,10.45211469,10.44019133,10.40261035,10.41376976,10.41539095,10.41896062,10.43076139],"lat":[44.67437513,44.67396233,44.65802187,44.61361679,44.61016235,44.60767077,44.60206154,44.59585287,44.59293509,44.59241948,44.58991893,44.57695498,44.57655463,44.57826332,44.58429759,44.58294519,44.61644298,44.66586351,44.66685726,44.67623284,44.67437513]}]],[[{"lng":[10.48764712,10.48702859,10.48829835,10.48926284,10.49148276,10.51011337,10.51662584,10.50602181,10.5086398,10.50913001,10.51095478,10.51165804,10.51391218,10.49229543,10.46536743,10.44146491,10.43521631,10.42753553,10.42635948,10.42565282,10.42521596,10.42611124,10.42833933,10.43553133,10.42966154,10.43158361,10.44155685,10.46744384,10.47346546,10.47507757,10.47577654,10.482786,10.48764712],"lat":[44.76850954,44.766105,44.76003897,44.75971133,44.75907019,44.76126942,44.75908557,44.75652528,44.75423115,44.75413467,44.7548307,44.75547645,44.75435415,44.72935484,44.74280375,44.73047785,44.73568784,44.7376656,44.73812141,44.73866138,44.739387,44.74394896,44.74876431,44.75061743,44.76550415,44.76731819,44.76452185,44.76617385,44.76839185,44.76917223,44.77273707,44.77354647,44.76850954]}]],[[{"lng":[10.72663626,10.73037806,10.73436255,10.7404023,10.73639508,10.75736168,10.75546416,10.72597888,10.70627869,10.70577599,10.67573998,10.67489192,10.6794671,10.66893894,10.65159547,10.63525602,10.65738412,10.66077948,10.67396044,10.67601938,10.67570041,10.67305472,10.67313285,10.70622435,10.72663626],"lat":[44.64390716,44.63194041,44.62774787,44.62542798,44.62124888,44.61644039,44.60826388,44.60578313,44.57616412,44.56589081,44.56662366,44.56471857,44.55438403,44.53926565,44.57267403,44.57644719,44.59599653,44.62903557,44.63929465,44.63592008,44.63533061,44.63276772,44.63241548,44.6242564,44.64390716]}]],[[{"lng":[10.57707253,10.5876519,10.59041848,10.60713146,10.62152266,10.61881798,10.61274563,10.60229662,10.59579633,10.5512232,10.52802969,10.5261579,10.52631627,10.51865017,10.5046608,10.50282866,10.50015537,10.50091486,10.50095561,10.49745184,10.49307359,10.4714639,10.48043852,10.4790814,10.47836852,10.47539042,10.47262187,10.47231242,10.4718588,10.47546569,10.47648649,10.47770341,10.48546157,10.49081647,10.49689338,10.5201176,10.55005407,10.55149122,10.5538427,10.57292199,10.57394941,10.57483394,10.57707253],"lat":[44.41760474,44.41127326,44.41087916,44.40586473,44.40585934,44.3785429,44.3736863,44.36886387,44.36338217,44.35982806,44.35088587,44.34550922,44.34387121,44.34580709,44.34262549,44.34260459,44.3479064,44.34964296,44.35068675,44.35841214,44.36135936,44.38462395,44.39551832,44.39747151,44.39802091,44.39937382,44.40113808,44.40181728,44.40573031,44.40786242,44.40800228,44.40795051,44.40645445,44.40442207,44.40464866,44.40697968,44.41931607,44.41953964,44.4196337,44.41968759,44.41961941,44.41934614,44.41760474]}]],[[{"lng":[10.37208797,10.38695244,10.38974048,10.39171413,10.39292695,10.42082695,10.42037064,10.41675161,10.41454996,10.41182993,10.41141693,10.41556011,10.40879235,10.39203089,10.38802619,10.38401493,10.38722001,10.38508833,10.37342461,10.35996339,10.33201618,10.3282632,10.32182348,10.3157022,10.3116703,10.29237384,10.28972083,10.28543038,10.32400949,10.33217288,10.33515431,10.34003189,10.33846374,10.34479163,10.35342014,10.37208797],"lat":[44.50863071,44.50423792,44.50252053,44.49982273,44.49902021,44.4955841,44.49129551,44.49038621,44.48931517,44.48500057,44.48195379,44.4780764,44.46851826,44.46723838,44.46479339,44.45517322,44.45148825,44.44850723,44.44729771,44.44388474,44.42773019,44.43114094,44.44476471,44.44971484,44.45150775,44.45171876,44.45391838,44.45998054,44.47903951,44.48537245,44.4958887,44.50606753,44.51615081,44.52711362,44.52997351,44.50863071]}]],[[{"lng":[10.54757697,10.56248673,10.56672028,10.56889946,10.57057856,10.56818062,10.56748216,10.56692777,10.56662095,10.55478033,10.5518594,10.55191687,10.5596707,10.56536944,10.5682949,10.56871047,10.56673395,10.56370498,10.55691328,10.54056809,10.53716707,10.52788843,10.5264815,10.51045654,10.50492549,10.50276118,10.50192542,10.49848047,10.47749567,10.47047088,10.48261822,10.49346557,10.51313622,10.54757697],"lat":[44.61312984,44.60840757,44.60477561,44.60266612,44.59381164,44.59175602,44.59154957,44.59154816,44.59138133,44.58140118,44.57543248,44.57191173,44.564244,44.55701804,44.55298978,44.55205681,44.54358558,44.53906281,44.53542858,44.53697364,44.5363668,44.55405074,44.56572781,44.56659359,44.56523972,44.56530425,44.57246321,44.57416494,44.56899187,44.57655463,44.59293509,44.5949228,44.60933329,44.61312984]}]],[[{"lng":[10.57106435,10.61969566,10.65159547,10.66893894,10.65881256,10.64197064,10.63807338,10.63578324,10.61831059,10.61731033,10.62078571,10.58217858,10.56995661,10.56458928,10.54056809,10.56673395,10.5682949,10.55191687,10.5518594,10.57106435],"lat":[44.58650397,44.57027721,44.57267403,44.53926565,44.53680249,44.54158318,44.54579832,44.54670441,44.54119178,44.53916237,44.53470185,44.52219864,44.51314422,44.50063679,44.53697364,44.54358558,44.55298978,44.57191173,44.57543248,44.58650397]}]],[[{"lng":[10.47755471,10.47173905,10.47106206,10.4712238,10.4714639,10.47185481,10.50237179,10.50282866,10.50358507,10.5046608,10.51865017,10.52631627,10.52556501,10.52594651,10.52689965,10.52689428,10.52534628,10.51048671,10.51600155,10.51581597,10.51290698,10.51037753,10.50681911,10.50047554,10.4960537,10.48689325,10.48073235,10.47012966,10.43026342,10.40739755,10.42016862,10.38876484,10.37361353,10.37349205,10.37800026,10.38926374,10.40320448,10.36048236,10.33804695,10.33695999,10.33599465,10.33967097,10.3692914,10.37023611,10.3711912,10.38221796,10.42398468,10.44878787,10.46874945,10.4718588,10.47262187,10.47836852,10.4790814,10.47963244,10.48030771,10.48043852,10.47755471],"lat":[44.39418725,44.3936956,44.38756403,44.38556332,44.38462395,44.38369163,44.3428897,44.34260459,44.34251432,44.34262549,44.34580709,44.34387121,44.34248319,44.33932709,44.33690161,44.33575831,44.32800055,44.29975802,44.28218331,44.28178965,44.27733576,44.27398416,44.2710512,44.26697536,44.26503471,44.26346179,44.23163534,44.2260554,44.22743489,44.24930811,44.26748905,44.28080343,44.29833527,44.29903896,44.29940781,44.29867715,44.31762883,44.34814326,44.34571646,44.34808794,44.36019903,44.36623286,44.3841302,44.38429893,44.38434147,44.38562649,44.38683284,44.39234116,44.40490158,44.40573031,44.40113808,44.39802091,44.39747151,44.39691519,44.39580811,44.39551832,44.39418725]}]],[[{"lng":[10.28797615,10.29237384,10.3116703,10.31478636,10.3157022,10.3212231,10.32182348,10.32767578,10.3282632,10.33079501,10.32826262,10.33664786,10.34593502,10.36447996,10.36980533,10.33967097,10.33695999,10.36048236,10.36860353,10.3961874,10.40320448,10.37349205,10.38876484,10.39107947,10.42016862,10.40739755,10.307116,10.25385666,10.14203472,10.15736122,10.15994194,10.16255548,10.16694867,10.2080714,10.21397231,10.22315555,10.22381127,10.22573912,10.22972841,10.23098276,10.25542784,10.26755326,10.28543038,10.28797615],"lat":[44.45742211,44.45171876,44.45150775,44.45034659,44.44971484,44.44544685,44.44476471,44.43582017,44.43114094,44.42837913,44.41953643,44.4161436,44.41152415,44.39739485,44.38894053,44.36623286,44.34808794,44.34814326,44.33711678,44.31781388,44.31762883,44.29903896,44.28080343,44.27961388,44.26748905,44.24930811,44.28432391,44.26858068,44.35386763,44.37937137,44.38078621,44.3824876,44.38443241,44.39433101,44.4016327,44.40967319,44.4104404,44.41434493,44.42673031,44.42962917,44.45229294,44.45860491,44.45998054,44.45742211]}]],[[{"lng":[10.99715504,11.02405153,11.01994915,11.01075863,11.00559645,11.00081113,10.9963905,10.97936427,10.96592661,10.99715504],"lat":[44.73287183,44.7343516,44.72138005,44.70935775,44.70427225,44.70055409,44.70064144,44.7092374,44.71941991,44.73287183]}]],[[{"lng":[11.11197122,11.1166028,11.1117944,11.10788461,11.10588449,11.10168746,11.10159024,11.10206793,11.1030881,11.10334408,11.10342657,11.09931589,11.09605405,11.08873124,11.04997628,11.04181044,11.04216463,11.04907234,11.04601639,11.008747,10.9963065,11.00266862,11.00308364,11.00483972,11.00606188,11.00789843,11.01045832,11.00559645,11.02405153,11.01824702,10.99715504,10.98628014,10.99504476,10.99194819,10.98517121,10.98562973,11.00169013,11.01959569,11.03629064,11.0866581,11.11197122],"lat":[44.80038608,44.79518419,44.78714432,44.78669446,44.78592119,44.78208259,44.78079708,44.78005011,44.77890605,44.77829819,44.77641521,44.77181876,44.7714106,44.7635869,44.74295875,44.7305695,44.7295099,44.72252306,44.71809813,44.68446137,44.6878272,44.69842085,44.69864987,44.69864655,44.69882558,44.69932795,44.7012141,44.70427225,44.7343516,44.73084449,44.73287183,44.73719358,44.74052461,44.74485474,44.74905078,44.74952892,44.74973907,44.76723452,44.75841289,44.80679011,44.80038608]}]],[[{"lng":[10.87162338,10.86902651,10.88333867,10.8848207,10.88508039,10.88563029,10.87818528,10.87621769,10.87564498,10.87271904,10.86478956,10.85262925,10.85056304,10.84353961,10.83240003,10.81528894,10.82065767,10.8067436,10.80615318,10.80748381,10.80960811,10.81200491,10.81628175,10.82147836,10.81489754,10.81745398,10.82043084,10.82421634,10.82741066,10.8305817,10.83291945,10.83930418,10.85392505,10.8633686,10.87162338],"lat":[44.72405751,44.71839064,44.71383605,44.71340424,44.71368334,44.71250584,44.69669004,44.69673139,44.69745296,44.69819319,44.68007048,44.67150057,44.65821064,44.65787565,44.66015102,44.65653085,44.6903571,44.69662768,44.69752825,44.70135116,44.70308585,44.70757027,44.71758359,44.73474255,44.73916564,44.74632916,44.74105593,44.73968948,44.73912414,44.7389237,44.73858405,44.73689246,44.73163272,44.72702119,44.72405751]}]],[[{"lng":[11.22186998,11.11068215,11.10835189,11.10686272,11.1060222,11.10498714,11.10435537,11.10138014,11.09931589,11.10148721,11.10168746,11.10588449,11.1117944,11.1166028,11.11672256,11.11331673,11.0866581,11.10594031,11.1344384,11.14173268,11.14249154,11.16043932,11.17620978,11.1995779,11.20185975,11.19349132,11.21424548,11.22186998],"lat":[44.81297492,44.77782967,44.77320961,44.77187779,44.77135316,44.77103917,44.77104182,44.77124067,44.77181876,44.78178921,44.78208259,44.78592119,44.78714432,44.79518419,44.79673035,44.80070937,44.80679011,44.82647019,44.80469142,44.80669281,44.80669656,44.80380168,44.80658084,44.80994083,44.81041898,44.82044639,44.82628847,44.81297492]}]],[[{"lng":[10.93478153,10.93205663,10.92861835,10.91902084,10.91691937,10.93590555,10.95144711,10.96328793,10.96689169,10.97091758,10.97350066,10.97415079,10.97522212,10.97665396,10.97690038,10.97732827,10.97812206,10.97856551,10.97905863,10.98049681,10.98230833,10.98265624,10.98414228,10.98469174,10.99198995,11.00437059,11.00655605,11.00799038,11.00290258,11.00229973,10.99774913,10.99598498,10.99531596,10.99500306,10.99481607,10.99364004,10.99403817,10.98534345,10.98365833,10.9730318,10.95395871,10.94982736,10.95369224,10.9536634,10.93730744,10.93712829,10.92979201,10.91670302,10.89878168,10.89634719,10.8970022,10.89679133,10.8942911,10.89074164,10.8848207,10.87344904,10.8633686,10.83930418,10.82421634,10.82286854,10.82043084,10.81981685,10.81745398,10.81762481,10.81761237,10.81545751,10.81619403,10.82751826,10.84204233,10.81499191,10.84591291,10.85006838,10.87687135,10.92907728,10.93478153],"lat":[44.890057,44.87606873,44.87071963,44.86295778,44.83389627,44.80425378,44.79860402,44.82432832,44.82676482,44.82542779,44.82517742,44.82539556,44.82578307,44.82728584,44.82745165,44.82764584,44.82794191,44.82803248,44.82809503,44.82807742,44.82754805,44.82743454,44.82671105,44.82636505,44.82058799,44.81570331,44.81409388,44.81005541,44.806558,44.79697578,44.78928262,44.78871371,44.78802708,44.78754878,44.78707494,44.77857325,44.77230923,44.77127474,44.77502305,44.7787203,44.77133911,44.77296826,44.7795739,44.77970268,44.78448148,44.78979623,44.79133101,44.78458217,44.75972845,44.75203265,44.74784813,44.74388785,44.7420524,44.73727073,44.71340424,44.7237285,44.72702119,44.73689246,44.73968948,44.74005759,44.74105593,44.74136026,44.74632916,44.74699696,44.74909298,44.75463324,44.7574246,44.76583027,44.79553861,44.80722611,44.85792647,44.86651889,44.86658579,44.88179235,44.890057]}]],[[{"lng":[11.00063936,11.04926044,11.05005481,11.05011392,11.05356651,11.08527213,11.12779278,11.11829163,11.14279053,11.14182678,11.14012612,11.15227635,11.15245487,11.15120968,11.15084575,11.15000128,11.14088754,11.13265707,11.12747754,11.1275841,11.13160657,11.107712,11.10450505,11.11365224,11.10815167,11.07295513,11.06804297,11.05614262,11.0561321,11.055788,11.05407522,11.04859906,11.04848152,11.05494818,11.03434638,11.0047049,10.98396851,10.98872163,10.98358608,11.00063936],"lat":[44.65833952,44.64244315,44.64434643,44.64944061,44.6549111,44.64450527,44.63135593,44.61784003,44.60567658,44.60413137,44.6012285,44.58914983,44.58661985,44.58449625,44.58410701,44.58364578,44.58238118,44.57587344,44.56925599,44.56891306,44.5674275,44.54513872,44.53941831,44.53499348,44.52467021,44.52221561,44.5231711,44.53406923,44.53652773,44.53747918,44.54030437,44.54817031,44.5486032,44.56786413,44.59946063,44.63228328,44.62797745,44.63641098,44.65127319,44.65833952]}]],[[{"lng":[10.89671458,10.93462746,10.97128395,10.97267349,10.92092652,10.91248168,10.92073099,10.8795087,10.89671458],"lat":[44.59384881,44.5634802,44.57920159,44.55967379,44.53714072,44.54362925,44.55447389,44.57371394,44.59384881]}]],[[{"lng":[10.95625447,10.99024469,10.98424641,10.97764574,10.97447874,10.97360818,10.98295008,10.92698886,10.92428017,10.91883401,10.89568413,10.88058157,10.87930766,10.87835363,10.87843847,10.87888665,10.89647152,10.91058116,10.91344827,10.90373084,10.90097525,10.90630685,10.92843367,10.9529621,10.95625447],"lat":[44.54226091,44.53073788,44.51950067,44.52227693,44.51459859,44.5066554,44.50355871,44.47657748,44.47259,44.46140139,44.45482909,44.45881493,44.46335522,44.47343185,44.48754148,44.48818228,44.50734158,44.51220178,44.51523263,44.52314624,44.52893128,44.53879915,44.5342097,44.54332658,44.54226091]}]],[[{"lng":[10.99946634,11.01278236,11.01538832,11.02224898,11.02313607,11.0274492,11.02827618,11.03133905,11.04232045,11.04640834,11.03756712,11.03246518,11.02755884,11.01584958,11.01214955,10.99198995,10.98265624,10.97856551,10.97690038,10.97522212,10.97415079,10.97091758,10.95506747,10.99946634],"lat":[44.86530223,44.85993706,44.86026016,44.86212828,44.86179751,44.85848925,44.85106586,44.84714052,44.8435598,44.84110555,44.82291296,44.81990718,44.82244301,44.81024997,44.81362803,44.82058799,44.82743454,44.82803248,44.82745165,44.82578307,44.82539556,44.82542779,44.83464953,44.86530223]}]],[[{"lng":[11.00881774,11.05731212,11.05978747,11.06376363,11.03556343,11.00231986,10.96166634,10.95637511,10.95353495,10.94842921,10.94554919,10.95586263,10.96409593,10.95059492,11.00881774],"lat":[44.95473472,44.95010827,44.93866668,44.93580661,44.90360617,44.90883094,44.87953759,44.88249862,44.88397379,44.88633322,44.88797054,44.8958665,44.90830146,44.93332884,44.95473472]}]],[[{"lng":[10.82662429,10.83402022,10.85016753,10.85907942,10.86040635,10.86125043,10.85183554,10.85028285,10.85013363,10.8552,10.80885936,10.80691303,10.8056016,10.81476202,10.75614851,10.70202588,10.70053911,10.70607695,10.70423723,10.72557187,10.72557046,10.72568867,10.72811701,10.72886719,10.72946136,10.73211692,10.75138944,10.78583384,10.8033822,10.79740136,10.82662429],"lat":[44.24856972,44.24278555,44.23572787,44.23281922,44.23241049,44.2321901,44.22862453,44.22782142,44.22745471,44.20738595,44.1548495,44.14785231,44.14110838,44.11618494,44.15331791,44.16635898,44.1731064,44.18252202,44.19118337,44.19847956,44.20571799,44.20633742,44.21447541,44.21615662,44.21635468,44.21641348,44.21665071,44.21811595,44.23401848,44.24486228,44.24856972]}]],[[{"lng":[11.2453826,11.34112864,11.36850196,11.36641169,11.35252733,11.35147301,11.34749072,11.33573757,11.32339547,11.31160934,11.309157,11.30156737,11.29334728,11.17819336,11.21240011,11.22186998,11.21424548,11.19349132,11.18331892,11.19141717,11.21959538,11.22397972,11.22511107,11.23474353,11.2453826],"lat":[44.89825052,44.87259427,44.84079106,44.83730599,44.83611629,44.83254123,44.83013922,44.83190604,44.83255448,44.8274944,44.8247719,44.8104213,44.80280764,44.79618608,44.80704643,44.81297492,44.82628847,44.82044639,44.84108514,44.86413274,44.88467101,44.88639508,44.88716521,44.90597572,44.89825052]}]],[[{"lng":[10.82761776,10.83460426,10.86581532,10.848655,10.8248391,10.8242763,10.81939888,10.81048283,10.791348,10.80149432,10.81437412,10.81404331,10.81251142,10.81123712,10.79232472,10.80230759,10.80356963,10.81505168,10.82761776],"lat":[44.55755071,44.5506643,44.54927626,44.51312673,44.49272746,44.49255189,44.49248117,44.49328009,44.49395247,44.49908489,44.51384452,44.51496801,44.51814318,44.51932994,44.5181612,44.54138271,44.55169891,44.56853073,44.55755071]}]],[[{"lng":[10.63231949,10.6794599,10.69723259,10.70008819,10.70423723,10.70607695,10.70053911,10.70022497,10.70202588,10.70721616,10.71239634,10.6412097,10.62405584,10.60984676,10.61811453,10.61831265,10.61336051,10.61022348,10.60684516,10.60572496,10.60353223,10.60201362,10.60167843,10.60185202,10.60533074,10.60679619,10.62361132,10.63078528,10.63130292,10.63272258,10.62722383,10.63231949],"lat":[44.20228129,44.20168783,44.195195,44.19354099,44.19118337,44.18252202,44.1731064,44.17044618,44.16635898,44.16043852,44.1572129,44.15983508,44.12036609,44.11861057,44.12817212,44.13689721,44.13995242,44.13952852,44.14126869,44.14191466,44.14358403,44.14614421,44.14715727,44.14802813,44.15965629,44.16987216,44.18004188,44.18568362,44.18630645,44.19104875,44.20220996,44.20228129]}]],[[{"lng":[10.79945971,10.80568511,10.80799961,10.80900646,10.82671887,10.8306469,10.85895975,10.88135954,10.89399972,10.8795087,10.89615101,10.90719035,10.92073099,10.9207568,10.91248168,10.90630685,10.90258677,10.89869412,10.83765838,10.83693504,10.83653105,10.83460426,10.8343417,10.82823701,10.82761776,10.82540209,10.82307056,10.81289287,10.8067057,10.79699691,10.79463908,10.79446981,10.7844252,10.78780418,10.79871853,10.79652228,10.79945971],"lat":[44.62633995,44.61817102,44.61763926,44.62002695,44.61813351,44.59939059,44.60097666,44.59468165,44.59354561,44.57371394,44.55980938,44.5562661,44.55447389,44.55372165,44.54362925,44.53879915,44.53817701,44.54308516,44.55689891,44.55669449,44.55468443,44.5506643,44.55072252,44.55674407,44.55755071,44.56073253,44.56386662,44.57001236,44.57348069,44.57849427,44.58330388,44.60395244,44.62481595,44.62401589,44.623975,44.62837575,44.62633995]}]],[[{"lng":[10.55196158,10.5592968,10.58774789,10.60430235,10.59231026,10.60004602,10.59699145,10.59396384,10.5895734,10.58862015,10.58983937,10.58336842,10.58525841,10.55854469,10.50782402,10.48521494,10.49290258,10.47012966,10.48689325,10.4960537,10.50047554,10.51581597,10.51122822,10.51048671,10.52534628,10.52689428,10.52689965,10.52608207,10.52594651,10.52556501,10.52631627,10.52644166,10.54110762,10.55196158],"lat":[44.32614749,44.32262649,44.32308974,44.31574612,44.30538061,44.2968735,44.29122574,44.29189825,44.28572944,44.2838431,44.26910637,44.24649087,44.2417831,44.21945427,44.18705805,44.20449608,44.21700007,44.2260554,44.26346179,44.26503471,44.26697536,44.28178965,44.29396835,44.29975802,44.32800055,44.33575831,44.33690161,44.3387491,44.33932709,44.34248319,44.34387121,44.34532537,44.33264148,44.32614749]}],[{"lng":[10.4808027,10.48064449,10.4818016,10.48168664,10.4808027],"lat":[44.18949128,44.19016856,44.19040564,44.18981293,44.18949128]}]],[[{"lng":[10.96078736,10.98532734,10.99022956,11.00438191,10.99466773,10.98884541,10.96676077,10.9760037,10.94274466,10.92373335,10.92246142,10.91610297,10.91297819,10.92337236,10.92412463,10.96078736],"lat":[44.44381066,44.43985394,44.44050566,44.40822855,44.40261067,44.39339245,44.37634214,44.35960468,44.3601069,44.35168728,44.35550452,44.36979106,44.38201514,44.39734663,44.41854714,44.44381066]}]],[[{"lng":[10.70572805,10.71065293,10.7398214,10.76199581,10.78127858,10.7817826,10.78188451,10.78177908,10.77222083,10.75924193,10.66645384,10.66268881,10.64428253,10.63519265,10.67514412,10.6754733,10.67560047,10.67216707,10.66867671,10.66771544,10.66712694,10.6669104,10.66728204,10.66787369,10.67357503,10.6751625,10.67567052,10.67657637,10.69742421,10.70572805],"lat":[44.36537611,44.33316248,44.31724593,44.3270251,44.31231242,44.31156633,44.31120463,44.31062108,44.30548515,44.30496562,44.24403929,44.25279101,44.26112414,44.27486706,44.30718454,44.30773788,44.31573055,44.32111055,44.32361938,44.32465975,44.32557763,44.32634602,44.32751097,44.32891577,44.33939266,44.34183615,44.34249491,44.34349444,44.36348811,44.36537611]}]],[[{"lng":[10.8709812,10.87545108,10.89869412,10.90630685,10.90097525,10.90373084,10.91248714,10.91344827,10.91058116,10.90092844,10.89647152,10.87888665,10.87930766,10.8695123,10.8509068,10.85176322,10.8469482,10.82702736,10.8242763,10.82397443,10.848655,10.8709812],"lat":[44.54624284,44.54749344,44.54308516,44.53879915,44.52893128,44.52314624,44.51854366,44.51523263,44.51220178,44.50977017,44.50734158,44.48818228,44.46335522,44.45891568,44.47779118,44.47942478,44.49016182,44.49176519,44.49255189,44.50263509,44.51312673,44.54624284]}]],[[{"lng":[10.94962301,10.97200196,10.98820093,10.97972362,10.95101879,10.93748131,10.92412463,10.91469343,10.89724196,10.88473969,10.88671643,10.88633204,10.88065598,10.87698088,10.87229405,10.86646343,10.86740822,10.87930766,10.89568413,10.91883401,10.91955832,10.92129922,10.92428017,10.92698886,10.94962301],"lat":[44.47712571,44.46659082,44.45771938,44.45391112,44.45001333,44.43937244,44.41854714,44.38572999,44.38906574,44.38557269,44.41568107,44.41617808,44.41852237,44.43159168,44.43312707,44.44055069,44.4575547,44.46335522,44.45482909,44.46140139,44.46240652,44.46604129,44.47259,44.47657748,44.47712571]}]],[[{"lng":[11.08880775,11.08548303,11.08549632,11.08597595,11.08830498,11.0892539,11.10289289,11.11007247,11.11051856,11.11441836,11.11446592,11.10261191,11.10594031,11.0866581,11.07041882,11.04775117,11.03756712,11.04640834,11.04232045,11.04357261,11.05537956,11.06525362,11.0731766,11.08880775],"lat":[44.87447337,44.8623454,44.86201207,44.86092308,44.85847695,44.8581175,44.8545543,44.85470088,44.85444058,44.84930476,44.8485297,44.82744975,44.82647019,44.80679011,44.80943084,44.81981405,44.82291296,44.84110555,44.8435598,44.84891162,44.85821033,44.86432454,44.86502712,44.87447337]}]],[[{"lng":[11.07979425,11.15128666,11.24620567,11.26043375,11.25651205,11.2548628,11.24328363,11.23662776,11.22397972,11.19109596,11.17849749,11.17556237,11.17479447,11.15586539,11.14714801,11.14097918,11.13824835,11.13230036,11.1195375,11.10639104,11.09796923,11.08880775,11.08353629,11.0731766,11.05537956,11.04232045,11.03133905,11.0274492,11.02313607,11.02224898,11.01278236,10.99946634,11.00123328,11.00779626,11.01427885,11.01639493,11.01540331,11.02425518,11.03059812,11.03703482,11.06376363,11.05957064,11.07979425],"lat":[44.96032353,44.93333821,44.95143857,44.93310137,44.92620246,44.92453369,44.91678161,44.9094856,44.88639508,44.88170184,44.87895431,44.87632768,44.87610827,44.87328963,44.87475022,44.87771073,44.87815799,44.87718001,44.87019809,44.87241286,44.87543961,44.87447337,44.87431764,44.86502712,44.85821033,44.8435598,44.84714052,44.85848925,44.86179751,44.86212828,44.85993706,44.86530223,44.8782972,44.87845202,44.88067836,44.88615923,44.8900116,44.89619238,44.89759206,44.90163631,44.93580661,44.94924823,44.96032353]}]],[[{"lng":[10.89138083,10.89669879,10.90072281,10.90203469,10.89994172,10.90410272,10.92172875,10.92805502,10.9465104,10.95548864,10.96592661,10.97936427,10.98637842,10.98978725,10.9963905,11.00559645,11.01062587,11.01045832,11.0102132,11.00789843,11.00606188,11.00308364,11.00266862,10.9963065,11.008747,10.99985222,10.99037215,10.98358608,10.98396851,11.01095034,10.99198463,10.98902519,10.98183464,10.97350117,10.97143005,10.96674116,10.95794585,10.93462746,10.9270841,10.89691072,10.89671458,10.88135954,10.85895975,10.8306469,10.82671887,10.80799961,10.80284795,10.79945971,10.79652228,10.78780418,10.78196925,10.79691008,10.80462994,10.81528894,10.82762292,10.83240003,10.83596985,10.85056304,10.85262925,10.87271904,10.87621769,10.87818528,10.88428172,10.88563029,10.88571491,10.88549929,10.88508039,10.88502423,10.88840266,10.8888388,10.89138083],"lat":[44.72604532,44.72587536,44.72472916,44.72355561,44.72004201,44.71835227,44.71759333,44.70892101,44.70477736,44.71274397,44.71941991,44.7092374,44.70767298,44.70586774,44.70064144,44.70427225,44.70153713,44.7012141,44.70095406,44.69932795,44.69882558,44.69864987,44.69842085,44.6878272,44.68446137,44.67408883,44.66593266,44.65127319,44.62797745,44.60619672,44.59513217,44.57100775,44.56766686,44.57923532,44.58018565,44.57746146,44.57993076,44.5634802,44.56611046,44.58828916,44.59384881,44.59468165,44.60097666,44.59939059,44.61813351,44.61763926,44.62668261,44.62633995,44.62837575,44.62401589,44.62776737,44.65273004,44.65524146,44.65653085,44.6598315,44.66015102,44.6601837,44.65821064,44.67150057,44.69819319,44.69673139,44.69669004,44.70871115,44.71250584,44.71318964,44.71352526,44.71368334,44.71370165,44.71921338,44.72243067,44.72604532]}],[{"lng":[10.89244935,10.89554251,10.8912333,10.89244935],"lat":[44.73501057,44.72874827,44.72889054,44.73501057]}],[{"lng":[10.89504281,10.89074164,10.8942911,10.89504281],"lat":[44.74229276,44.73727073,44.7420524,44.74229276]}]],[[{"lng":[10.77987995,10.79217731,10.77686403,10.7751325,10.75597751,10.7511774,10.74560939,10.73273078,10.70541257,10.7131841,10.71313963,10.70287831,10.68905427,10.68195857,10.6967596,10.71213822,10.7218032,10.72916692,10.72783492,10.72817315,10.74315267,10.77987995],"lat":[44.2979837,44.29716116,44.27612667,44.27480317,44.26569129,44.25846364,44.25656825,44.24288187,44.19814767,44.21493447,44.21858135,44.22392955,44.23479435,44.24725111,44.25541389,44.27210984,44.26925465,44.27682286,44.28054321,44.28139338,44.29169005,44.2979837]}]],[[{"lng":[10.64667838,10.64965924,10.64116221,10.62292355,10.61693179,10.61376969,10.61309487,10.61246062,10.60329053,10.60004602,10.59233494,10.59231026,10.59255629,10.59442203,10.60430235,10.60177701,10.59023907,10.58774789,10.58021274,10.57487793,10.5592968,10.54110762,10.53308278,10.52644166,10.5261579,10.5512232,10.58866172,10.59478806,10.59579633,10.59692504,10.59920753,10.60171659,10.60229662,10.60372729,10.61274563,10.61424353,10.61881798,10.62010572,10.64667838],"lat":[44.36061615,44.35557659,44.33763039,44.31621223,44.30670018,44.30202741,44.30119067,44.30046139,44.29626012,44.2968735,44.30259263,44.30538061,44.30613343,44.30882626,44.31574612,44.31832938,44.32246088,44.32308974,44.32456268,44.3253206,44.32262649,44.33264148,44.340744,44.34532537,44.34550922,44.35982806,44.36128496,44.36304965,44.36338217,44.36381653,44.365144,44.36830482,44.36886387,44.36978007,44.3736863,44.37475447,44.3785429,44.38244983,44.36061615]}]],[[{"lng":[10.9895672,11.00070531,11.00268673,11.00390732,11.00358496,11.00223055,10.98551247,10.96670558,10.94974477,10.97372082,10.96730092,10.96586637,10.95705504,10.94843739,10.94607086,10.94325914,10.94265761,10.9402918,10.90724322,10.89884495,10.89678374,10.89424795,10.8937634,10.8932221,10.89009384,10.88970292,10.86125043,10.86944097,10.86985384,10.86588853,10.85731651,10.85594016,10.863641,10.86483235,10.86520773,10.8670945,10.87367666,10.87801553,10.88152414,10.89431864,10.91788315,10.92730116,10.9895672],"lat":[44.32493358,44.32448514,44.32415046,44.32318302,44.30663342,44.30599154,44.30310548,44.30224709,44.29294993,44.2769811,44.27226185,44.26789766,44.22602403,44.22481926,44.22495358,44.22582693,44.22621415,44.22561067,44.20543403,44.20663256,44.20831435,44.21081426,44.21131745,44.21590894,44.22416245,44.22446601,44.2321901,44.23499085,44.23695572,44.23867712,44.24046439,44.2409009,44.26703698,44.26865605,44.26898449,44.2708518,44.27689296,44.28053086,44.28287687,44.29960869,44.31337677,44.32203799,44.32493358]}]],[[{"lng":[11.08346707,11.08891277,11.09031391,11.09325202,11.10166065,11.11699352,11.07809108,11.05356651,11.05011392,11.04926044,10.99056127,10.99037215,10.99985222,11.00728542,11.008747,11.01667698,11.03172397,11.03844689,11.04601639,11.08346707],"lat":[44.72635548,44.72433848,44.72329558,44.71843267,44.71441958,44.71043589,44.64702985,44.6549111,44.64944061,44.64244315,44.66429841,44.66593266,44.67408883,44.68309537,44.68446137,44.69263967,44.71442841,44.7193048,44.71809813,44.72635548]}]],[[{"lng":[10.94668744,10.96409593,10.94554919,10.94842921,10.95637511,10.96166634,10.96565811,10.95844418,10.97124888,10.95537084,10.95506747,10.95708537,10.96689169,10.95144711,10.91691937,10.93754689,10.93331007,10.92907728,10.88057091,10.87831039,10.87917682,10.87688775,10.8771456,10.88788567,10.94668744],"lat":[44.92265955,44.90830146,44.88797054,44.88633322,44.88249862,44.87953759,44.86373954,44.85624164,44.85438015,44.83763304,44.83464953,44.83159027,44.82676482,44.79860402,44.83389627,44.88969203,44.89040003,44.88179235,44.86766703,44.86774816,44.88965934,44.89014901,44.90188517,44.91427123,44.92265955]}]],[[{"lng":[10.66603915,10.66895412,10.6688593,10.69132752,10.69742421,10.69466762,10.69253413,10.68353505,10.67567052,10.66728204,10.66771544,10.67560047,10.6754733,10.58504409,10.58983937,10.5895734,10.59699145,10.60004602,10.61309487,10.62292355,10.64116221,10.64965924,10.62010572,10.62232073,10.66603915],"lat":[44.40321542,44.39584464,44.3898862,44.36640055,44.36348811,44.35958096,44.3534727,44.34554822,44.34249491,44.32751097,44.32465975,44.31573055,44.30773788,44.24359568,44.26910637,44.28572944,44.29122574,44.2968735,44.30119067,44.31621223,44.33763039,44.35557659,44.38244983,44.39797831,44.40321542]}]],[[{"lng":[10.88138135,10.88191074,10.88473969,10.88503474,10.91469343,10.91297819,10.91610297,10.92373335,10.92635228,10.93109384,10.92730116,10.92168228,10.91788315,10.91037577,10.89431864,10.88622411,10.86520773,10.85518536,10.83851997,10.82193961,10.81646541,10.79217731,10.77674946,10.76001884,10.75924193,10.76245033,10.77222083,10.78188451,10.76199581,10.76604622,10.76640337,10.76780068,10.76829626,10.76798645,10.76357402,10.763153,10.76419785,10.7675098,10.79124366,10.79187766,10.79229289,10.79238803,10.79225339,10.79304534,10.79549858,10.80949563,10.8520843,10.87853529,10.88138135],"lat":[44.3923531,44.38894134,44.38557269,44.38537876,44.38572999,44.38201514,44.36979106,44.35168728,44.34725126,44.33003439,44.32203799,44.31644588,44.31337677,44.31077477,44.29960869,44.29345871,44.26898449,44.26661747,44.27103634,44.27231938,44.27340594,44.29716116,44.2994891,44.29656299,44.30496562,44.30534828,44.30548515,44.31120463,44.3270251,44.33118485,44.33180053,44.33609124,44.34170132,44.34514068,44.35184848,44.36238822,44.37655142,44.3810781,44.38314799,44.3833811,44.38379773,44.38485856,44.38823668,44.38950264,44.39007627,44.39253363,44.39285007,44.40768204,44.3923531]}]],[[{"lng":[10.58525841,10.59945968,10.60385447,10.60719462,10.60902416,10.61329425,10.62729793,10.62722383,10.63050274,10.63272258,10.63078528,10.61125551,10.60679619,10.60533074,10.60167843,10.60572496,10.61022348,10.61336051,10.61831265,10.61811453,10.60509357,10.52512166,10.51001441,10.51153085,10.51681177,10.53148955,10.55854469,10.57399542,10.58525841],"lat":[44.2417831,44.23899224,44.23758016,44.23561557,44.23428439,44.23016381,44.2162626,44.20220996,44.19313317,44.19104875,44.18568362,44.17392374,44.16987216,44.15965629,44.14715727,44.14191466,44.13952852,44.13995242,44.13689721,44.12817212,44.11468908,44.15623594,44.18691385,44.18889969,44.19234087,44.20103098,44.21945427,44.23645608,44.2417831]}]],[[{"lng":[10.7265897,10.73417113,10.74712001,10.75053298,10.76419785,10.76357402,10.76829626,10.76640337,10.7398214,10.72677614,10.71065293,10.70572805,10.69742421,10.69252709,10.69132752,10.69067108,10.6847786,10.6688593,10.66827553,10.66895412,10.68452507,10.69986802,10.7265897],"lat":[44.42553386,44.41294124,44.39963592,44.38660172,44.37655142,44.35184848,44.34170132,44.33180053,44.31724593,44.32736506,44.33316248,44.36537611,44.36348811,44.36534747,44.36640055,44.36711249,44.37643642,44.3898862,44.3914342,44.39584464,44.39721848,44.4196059,44.42553386]}]],[[{"lng":[10.76513637,10.76641233,10.76720756,10.77312514,10.77563159,10.77583244,10.77634061,10.78669379,10.79032201,10.78838806,10.78810728,10.78846331,10.79207942,10.79370155,10.78563376,10.75928497,10.75382875,10.75428198,10.75644095,10.76023375,10.75995957,10.73898103,10.72821244,10.7265897,10.72481604,10.70329161,10.70096507,10.69986802,10.69911313,10.68492145,10.68646176,10.68592491,10.68452507,10.68404903,10.66895412,10.66537127,10.6629168,10.62232073,10.65342969,10.66701689,10.67359556,10.68432944,10.68594366,10.68720679,10.6882288,10.69301706,10.70263765,10.72286921,10.72635546,10.72110263,10.72645076,10.74290451,10.76513637],"lat":[44.50090247,44.50164692,44.50092359,44.4922639,44.49021704,44.49015343,44.49019391,44.49111915,44.49230347,44.4897605,44.48750194,44.48706425,44.48608028,44.48410125,44.45975861,44.45707274,44.43219483,44.42765951,44.42599686,44.41518023,44.41483335,44.40873585,44.42411389,44.42553386,44.42638891,44.42103132,44.42018374,44.4196059,44.41913099,44.40700759,44.40166423,44.40002467,44.39721848,44.39682037,44.39584464,44.40623205,44.40711335,44.39797831,44.43330565,44.46699858,44.47023331,44.47234414,44.47295049,44.47358903,44.47415009,44.47755419,44.48803421,44.49915051,44.49983755,44.49554951,44.48966171,44.4867701,44.50090247]}]],[[{"lng":[11.12747999,11.11699352,11.08620939,11.08346707,11.06604331,11.05358932,11.04907234,11.04525731,11.04216463,11.04185234,11.04181044,11.04210981,11.04448256,11.04945916,11.04997628,11.0511058,11.09665095,11.09879017,11.09931589,11.10045048,11.10138014,11.10435537,11.1060222,11.12989021,11.12747999],"lat":[44.77139638,44.71043589,44.72571124,44.72635548,44.72536232,44.72125697,44.72252306,44.72698793,44.7295099,44.7299656,44.7305695,44.73118079,44.73508131,44.74226586,44.74295875,44.74418076,44.77184075,44.77193647,44.77181876,44.77139281,44.77124067,44.77104182,44.77135316,44.7829192,44.77139638]}]],[[{"lng":[10.66645384,10.68195857,10.71313963,10.70008819,10.6794599,10.67575443,10.64361618,10.64268999,10.63231949,10.62722383,10.61329425,10.60385447,10.58525841,10.58504409,10.62779048,10.63519265,10.63954409,10.64428253,10.65707425,10.66268881,10.66645384],"lat":[44.24403929,44.24725111,44.21858135,44.19354099,44.20168783,44.20165222,44.19941837,44.19941368,44.20228129,44.20220996,44.23016381,44.23758016,44.2417831,44.24359568,44.27272209,44.27486706,44.27363428,44.26112414,44.25669886,44.25279101,44.24403929]}]],[[{"lng":[11.00471702,11.01503199,11.01505361,11.01360815,11.01547625,11.02443598,11.03434638,11.05494818,11.04848152,11.05407522,11.0561321,11.05498648,11.04789852,11.04260197,11.04255633,11.03088776,11.03019989,11.03074314,11.03343916,11.03398898,11.03248992,11.02644546,11.01462964,11.01254783,10.9997727,10.99785117,10.98902519,10.98879649,10.99198463,11.00365675,11.01095034,10.99903747,10.99602152,11.00471702],"lat":[44.63180902,44.61472696,44.61371519,44.61040308,44.60698113,44.60307761,44.59946063,44.56786413,44.5486032,44.54030437,44.53652773,44.52628256,44.52738515,44.52608014,44.52813412,44.52755849,44.53200444,44.5342364,44.54115635,44.54427041,44.54819518,44.55175058,44.55550668,44.55645264,44.5682543,44.56914318,44.57100775,44.57131782,44.59513217,44.59785904,44.60619672,44.61727183,44.62406287,44.63180902]}]],[[{"lng":[11.21959538,11.21798862,11.19141717,11.18331892,11.18113293,11.1995779,11.16043932,11.15432091,11.14249154,11.14173268,11.13785612,11.1344384,11.12786648,11.10738764,11.10646597,11.10261191,11.11051856,11.10289289,11.0892539,11.08549632,11.08880775,11.1195375,11.13824835,11.14714801,11.15586539,11.17479447,11.17849749,11.19109596,11.22397972,11.21959538],"lat":[44.88467101,44.88108343,44.86413274,44.84108514,44.83072953,44.80994083,44.80380168,44.80384531,44.80669656,44.80669281,44.80547366,44.80469142,44.81638632,44.82592135,44.82631645,44.82744975,44.85444058,44.8545543,44.8581175,44.86201207,44.87447337,44.87019809,44.87815799,44.87475022,44.87328963,44.87610827,44.87895431,44.88170184,44.88639508,44.88467101]}]],[[{"lng":[11.03057736,11.03556343,11.03703482,11.01427885,11.00123328,10.97684407,10.95844418,10.95944931,10.96453233,10.96565811,10.95914501,10.96175887,10.96166634,10.96149785,10.96256107,10.98549698,11.00231986,11.0126731,11.03057736],"lat":[44.90453297,44.90360617,44.90163631,44.88067836,44.8782972,44.85812099,44.85624164,44.86124753,44.86297859,44.86373954,44.87128102,44.87480995,44.87953759,44.88200703,44.88534651,44.90211223,44.90883094,44.90948156,44.90453297]}]],[[{"lng":[11.04775117,11.0866581,11.07385328,11.06150556,11.04663211,11.04165473,11.03629064,11.03402648,11.01959569,10.98267567,10.98320624,10.99620069,10.9917457,10.99403817,10.99364004,10.99500306,11.00290258,11.00609528,11.00799038,11.00437059,11.01584958,11.04775117],"lat":[44.81981405,44.80679011,44.78690369,44.78093837,44.76643793,44.76219702,44.75841289,44.75728296,44.76723452,44.75037246,44.75219518,44.76339043,44.77053859,44.77230923,44.77857325,44.78754878,44.806558,44.80937755,44.81005541,44.81570331,44.81024997,44.81981405]}]],[[{"lng":[10.80871726,10.80356963,10.80230759,10.79472953,10.79232472,10.81404331,10.80149432,10.77583244,10.77312514,10.76641233,10.76140766,10.74290451,10.72110263,10.7220988,10.72635546,10.73003205,10.74137949,10.75160006,10.75970797,10.76316791,10.76496176,10.76582288,10.76672862,10.77692899,10.78530907,10.78676871,10.79446981,10.79699691,10.79796008,10.8067057,10.81505168,10.80871726],"lat":[44.5578855,44.55169891,44.54138271,44.52640944,44.5181612,44.51496801,44.49908489,44.49015343,44.4922639,44.50164692,44.50206961,44.4867701,44.49554951,44.49822206,44.49983755,44.50162595,44.51058655,44.52339388,44.53441433,44.53854263,44.54042344,44.54142741,44.54268276,44.58331918,44.59982946,44.60649612,44.60395244,44.57849427,44.57788797,44.57348069,44.56853073,44.5578855]}]],[[{"lng":[11.04255633,11.04260197,11.05797346,11.05910139,11.0590854,11.05614838,11.0653635,11.06266232,11.05072652,11.04753323,11.02691999,11.02686709,11.02132798,11.01347658,11.00950325,11.00913173,11.00694076,10.9908497,10.99039688,10.99023225,10.99022956,10.96078736,10.94254992,10.95101879,10.95388141,10.97972362,10.98610418,10.98820093,11.00035442,11.00689823,11.02732682,11.03706905,11.03855819,11.0397092,11.03974255,11.03941808,11.03899996,11.03560093,11.03195446,11.03105654,11.03075104,11.04255633],"lat":[44.52813412,44.52608014,44.52526843,44.52236595,44.52222805,44.51309842,44.50007646,44.49441769,44.48038841,44.46692836,44.46019539,44.46016481,44.45499691,44.44722643,44.44528886,44.44517386,44.44468123,44.4413754,44.44096918,44.44058494,44.44050566,44.44381066,44.44303676,44.45001333,44.45097742,44.45391112,44.45625756,44.45771938,44.46980607,44.47402146,44.47761716,44.49668673,44.50045921,44.50746964,44.50984571,44.51136393,44.51236167,44.51876011,44.52457767,44.52625912,44.52724583,44.52813412]}]],[[{"lng":[10.80473468,10.8469482,10.86958835,10.8695123,10.86740822,10.86707693,10.86579522,10.86646343,10.88065598,10.88671643,10.8520843,10.8326603,10.79549858,10.79225339,10.79238803,10.79187766,10.7675098,10.76419785,10.76030399,10.75759938,10.75458265,10.75292106,10.75053298,10.74712001,10.73898103,10.76023375,10.75928497,10.78563376,10.79370155,10.78846331,10.78838806,10.80473468],"lat":[44.49337109,44.49016182,44.46284858,44.45891568,44.4575547,44.45701998,44.45229653,44.44055069,44.41852237,44.41568107,44.39285007,44.38912127,44.39007627,44.38823668,44.38485856,44.3833811,44.3810781,44.37655142,44.38224723,44.38371132,44.38442392,44.38511565,44.38660172,44.39963592,44.40873585,44.41518023,44.45707274,44.45975861,44.48410125,44.48706425,44.4897605,44.49337109]}]],[[{"lng":[10.82193961,10.83851997,10.84810731,10.85518536,10.86520773,10.86319284,10.86408535,10.86625122,10.86667796,10.86457523,10.85594016,10.85731651,10.85952462,10.86588853,10.86985384,10.86944097,10.86040635,10.8254464,10.81653392,10.79740136,10.79563937,10.8033822,10.79332075,10.78583384,10.75138944,10.72946136,10.72568867,10.72609467,10.72557187,10.70008819,10.70811631,10.70994757,10.72304595,10.73281009,10.73273078,10.7511774,10.75597751,10.77686403,10.79217731,10.82193961],"lat":[44.27231938,44.27103634,44.26750549,44.26661747,44.26898449,44.26395629,44.26167299,44.26004412,44.25531961,44.24982617,44.2409009,44.24046439,44.24019439,44.23867712,44.23695572,44.23499085,44.23241049,44.24942304,44.25000631,44.24486228,44.24087468,44.23401848,44.22638938,44.21811595,44.21665071,44.21635468,44.20633742,44.19966907,44.19847956,44.19354099,44.20028149,44.20215373,44.22387011,44.23193309,44.24288187,44.25846364,44.26569129,44.27612667,44.29716116,44.27231938]}]],[[{"lng":[10.95395871,10.9917457,10.99582537,10.99620069,10.99588572,10.98975297,10.98320624,10.98256911,10.98267567,10.98390162,10.98517121,10.98626312,10.99019971,10.99194819,10.99485766,10.99504476,10.9950296,10.9947512,10.98628014,10.98383083,10.97043193,10.96592661,10.95548864,10.94753806,10.9465104,10.94562071,10.92939456,10.92805502,10.92172875,10.90410272,10.89994172,10.90072281,10.89138083,10.89554251,10.89878168,10.91450638,10.91670302,10.92979201,10.93712829,10.9536634,10.94982736,10.95395871],"lat":[44.77133911,44.77053859,44.76492042,44.76339043,44.76265981,44.75595221,44.75219518,44.75058137,44.75037246,44.74960398,44.74905078,44.74847365,44.74617254,44.74485474,44.74095999,44.74052461,44.74008378,44.73970153,44.73719358,44.73057453,44.7219799,44.71941991,44.71274397,44.7045798,44.70477736,44.70497258,44.7085833,44.70892101,44.71759333,44.71835227,44.72004201,44.72472916,44.72604532,44.72874827,44.75972845,44.78320907,44.78458217,44.79133101,44.78979623,44.77970268,44.77296826,44.77133911]}]],[[{"lng":[10.98183464,11.03248992,11.03388278,11.03398898,11.03382044,11.03343916,11.03232761,11.03074314,11.03019989,11.03012041,11.03075104,11.03105654,11.03560093,11.03941808,11.03912206,11.02138412,11.00187163,10.98295008,10.97360818,10.97764574,10.99024469,10.95662393,10.96200268,10.96249113,10.9660027,10.96740414,10.97267349,10.97366498,10.97293071,10.97128395,10.97143005,10.98183464],"lat":[44.56766686,44.54819518,44.54591976,44.54427041,44.54270699,44.54115635,44.5377912,44.5342364,44.53200444,44.53080403,44.52724583,44.52625912,44.51876011,44.51136393,44.50474787,44.50571148,44.51036751,44.50355871,44.5066554,44.52227693,44.53073788,44.54231384,44.55351093,44.55380861,44.55452242,44.55501142,44.55967379,44.56513914,44.57244832,44.57920159,44.58018565,44.56766686]}]],[[{"lng":[10.99505354,10.99687611,11.00187163,11.00315104,11.03912206,11.02732682,10.98820093,10.94962301,10.9640444,10.98295008,10.9846635,10.99505354],"lat":[44.50889341,44.50995085,44.51036751,44.51025504,44.50474787,44.47761716,44.45771938,44.47712571,44.48425991,44.50355871,44.50926355,44.50889341]}]],[[{"lng":[11.01328668,11.04816659,11.02237352,11.02262512,11.03609238,11.03760421,11.03844845,11.0392261,11.03965164,11.04007432,11.04018709,11.03162219,11.03069161,11.00786631,11.00223055,11.00268673,10.9435854,10.92730116,10.92373335,10.93632012,10.94274466,10.95008599,10.9616117,10.9760037,10.96676077,10.96836734,10.98884541,10.99349162,10.99466773,11.00285636,11.00438191,10.9966656,11.01328668],"lat":[44.43026882,44.41610732,44.3735219,44.35781667,44.34585911,44.34258845,44.33721438,44.33404671,44.33293458,44.33210271,44.33180529,44.32336485,44.31684145,44.29693476,44.30599154,44.32415046,44.31442638,44.32203799,44.35168728,44.35833783,44.3601069,44.35981104,44.35557769,44.35960468,44.37634214,44.37825585,44.39339245,44.39971455,44.40261067,44.40632809,44.40822855,44.42953992,44.43026882]}]],[[{"lng":[11.2337067,11.22628285,11.21606638,11.23627061,11.22979555,11.22212949,11.1958288,11.19348756,11.18037643,11.18212808,11.14531234,11.1275841,11.14088754,11.14363011,11.15084575,11.15227635,11.15753357,11.16572906,11.1614163,11.15233496,11.14949258,11.1834212,11.2337067],"lat":[44.61507735,44.58806724,44.57166839,44.54189265,44.53104868,44.53262055,44.53001406,44.52394975,44.52307731,44.54990327,44.56263511,44.56891306,44.58238118,44.58374309,44.58410701,44.58914983,44.58643847,44.58837071,44.5788885,44.57742165,44.56860668,44.58044858,44.61507735]}]],[[{"lng":[11.29718335,11.34654537,11.34616558,11.34697601,11.35459122,11.35224675,11.34525409,11.35055824,11.35876786,11.35939026,11.35940533,11.34529292,11.35040273,11.3686824,11.36975906,11.37810699,11.38386843,11.38863093,11.37542041,11.36212552,11.36266228,11.33200335,11.31305897,11.31414337,11.31526787,11.31661509,11.31768897,11.31807854,11.31772373,11.29912174,11.30620395,11.30248023,11.29933212,11.2977605,11.29366652,11.2948679,11.29912817,11.29701646,11.28823266,11.29718335],"lat":[44.66806391,44.66845855,44.66797629,44.66498662,44.6609588,44.65622525,44.64817591,44.64233796,44.63954105,44.63840965,44.62966581,44.6247578,44.61417508,44.60947102,44.60114455,44.59414264,44.59244253,44.5878176,44.58040917,44.58426183,44.58937432,44.60362809,44.60659723,44.60930973,44.61096756,44.61244135,44.6134374,44.61418062,44.61725988,44.62406261,44.63454983,44.6361706,44.63323852,44.63418559,44.64435111,44.65037202,44.66363163,44.66587577,44.66871688,44.66806391]}]],[[{"lng":[11.59750907,11.61456681,11.63245939,11.60584588,11.59935945,11.59654867,11.57550136,11.56785419,11.51942324,11.49944167,11.54863119,11.57422569,11.59750907],"lat":[44.70702496,44.69012295,44.67294507,44.6581749,44.64277361,44.64626016,44.63620267,44.63476583,44.64088704,44.6490661,44.69751773,44.69244334,44.70702496]}]],[[{"lng":[11.4851662,11.48163566,11.47295221,11.46866985,11.46979721,11.46843518,11.46837233,11.45109799,11.44253413,11.42953198,11.4328682,11.41648124,11.41369265,11.40947927,11.39848679,11.38682406,11.38663544,11.38863093,11.38386843,11.36975906,11.41951377,11.44554666,11.45111804,11.46654101,11.48607396,11.48610584,11.4851662],"lat":[44.68119187,44.67299617,44.67081817,44.65100512,44.64711256,44.64330254,44.64321445,44.62551792,44.6147254,44.60390244,44.60228241,44.59165884,44.58489688,44.58557105,44.58329653,44.58608979,44.58619388,44.5878176,44.59244253,44.60114455,44.67073635,44.66812677,44.67918188,44.68719979,44.68395773,44.68390978,44.68119187]}]],[[{"lng":[11.37059999,11.38861288,11.40600976,11.41488841,11.40746436,11.42537021,11.43370377,11.42606049,11.40024667,11.39140113,11.37475596,11.37410076,11.37414607,11.37434126,11.37460769,11.37315142,11.36226108,11.35874661,11.35523311,11.34623237,11.33735823,11.33330321,11.31340773,11.28226468,11.2810692,11.28377063,11.28373273,11.28654097,11.29028973,11.2966916,11.29662177,11.29460427,11.26821317,11.26169336,11.25694259,11.23570711,11.23750188,11.24123513,11.2389443,11.23700414,11.23290939,11.23207944,11.22964224,11.24505172,11.2690439,11.28161563,11.30903328,11.3111492,11.32052892,11.37059999],"lat":[44.55167469,44.54156185,44.54279272,44.54002153,44.52856635,44.52277846,44.51317043,44.48740257,44.46425587,44.4619405,44.45891204,44.45804004,44.45644508,44.45492353,44.45370601,44.4492502,44.45099358,44.44779214,44.44358901,44.43654922,44.43164007,44.42595277,44.42112042,44.42582416,44.44332548,44.45046905,44.45171271,44.45915733,44.47971604,44.48309897,44.48574487,44.48980906,44.49007593,44.49142626,44.49752046,44.50324301,44.5120146,44.52166575,44.52384486,44.52419685,44.52416956,44.52439059,44.53053572,44.55565047,44.5325079,44.54857878,44.53167001,44.54824572,44.54527818,44.55167469]}]],[[{"lng":[11.65497556,11.66520019,11.66559595,11.66557266,11.66580053,11.66544235,11.63994473,11.63340144,11.63243541,11.63441586,11.6331768,11.6270233,11.62599231,11.62113291,11.61853892,11.61068447,11.60808209,11.60105567,11.57582585,11.57530199,11.55585295,11.55598214,11.55719109,11.58945288,11.62573513,11.65050054,11.65497556],"lat":[44.29600693,44.28577845,44.28304813,44.28281477,44.27997005,44.27871802,44.27374235,44.26362585,44.25994799,44.25830881,44.25552854,44.24777937,44.24712789,44.24543902,44.24484134,44.2439319,44.24314063,44.23864514,44.25751562,44.26905662,44.2777819,44.27835856,44.27930772,44.29334384,44.28603531,44.30157446,44.29600693]}]],[[{"lng":[11.59881324,11.6239115,11.61980723,11.59358518,11.5820933,11.62914376,11.61215479,11.6209383,11.59771879,11.56865552,11.53112889,11.52468235,11.52067424,11.50114218,11.48990028,11.50869766,11.51600876,11.48828116,11.48290212,11.47573204,11.474037,11.47071391,11.47181761,11.47633224,11.46357468,11.46636195,11.47425829,11.45927429,11.46406537,11.47280726,11.5238368,11.53554561,11.55065186,11.55764931,11.57004248,11.57370882,11.57550136,11.58907363,11.59654867,11.59881324],"lat":[44.62699938,44.61283161,44.60923326,44.60023059,44.58357008,44.5775193,44.55686576,44.55113185,44.53776126,44.51019018,44.4907887,44.48765118,44.48392383,44.4936919,44.4919712,44.50350536,44.51300577,44.53893751,44.54246038,44.5442844,44.5418258,44.54292348,44.54459372,44.55162242,44.56265638,44.56748844,44.57996534,44.5851634,44.5955062,44.60271371,44.58877119,44.60720902,44.60614436,44.61119394,44.63253689,44.63529788,44.63620267,44.64299504,44.64626016,44.62699938]}]],[[{"lng":[11.28612719,11.31765189,11.32128383,11.31839436,11.308252,11.30871901,11.31576472,11.31628435,11.31271777,11.3113258,11.3111492,11.31330588,11.30903328,11.28161563,11.2690439,11.25117273,11.24505172,11.23627061,11.21610874,11.21606638,11.22628285,11.24248628,11.25959983,11.26748704,11.28612719],"lat":[44.59916144,44.59195566,44.56819654,44.56312501,44.56443671,44.56255477,44.5566955,44.55456039,44.55171254,44.54984458,44.54824572,44.54294461,44.53167001,44.54857878,44.5325079,44.55570097,44.55565047,44.54189265,44.56200965,44.57166839,44.58806724,44.57616455,44.58073339,44.6065714,44.59916144]}]],[[{"lng":[11.06360246,11.08118532,11.09031774,11.09526029,11.11674684,11.11935305,11.13106444,11.14130952,11.15904283,11.17890978,11.13785311,11.12704352,11.08942891,11.0294936,11.0402054,11.06276166,11.06569048,11.05740114,11.05698164,11.05387371,11.05375418,11.05327771,11.05317574,11.05395898,11.05656326,11.05846413,11.06074025,11.06360246],"lat":[44.21418031,44.21398779,44.21175649,44.20987769,44.20913593,44.2086245,44.20532583,44.19909151,44.1784818,44.16955273,44.14936139,44.10884813,44.08995184,44.09745585,44.1480462,44.149966,44.15546793,44.17763497,44.18465922,44.19401129,44.19446471,44.19727376,44.19805379,44.20078561,44.20360731,44.21200713,44.21403506,44.21418031]}]],[[{"lng":[11.26169336,11.29460427,11.29662177,11.29673962,11.2966916,11.29445959,11.29217319,11.29028973,11.28947892,11.28654097,11.28373273,11.28377063,11.26792525,11.24809088,11.2334757,11.23339134,11.23311687,11.23343559,11.23419345,11.23824049,11.24165308,11.24191269,11.24010274,11.2468144,11.26169336],"lat":[44.49142626,44.48980906,44.48574487,44.48324092,44.48309897,44.48193807,44.48217531,44.47971604,44.47078321,44.45915733,44.45171271,44.45046905,44.44896135,44.45212984,44.45151926,44.4515316,44.45170914,44.45870691,44.45940103,44.46043583,44.46330314,44.46503556,44.47559733,44.49108484,44.49142626]}]],[[{"lng":[11.58460081,11.60562193,11.60627868,11.60037478,11.5975567,11.59014798,11.58860772,11.58409646,11.61943536,11.62439053,11.62806799,11.64028595,11.58945288,11.55598214,11.54884485,11.53774433,11.53640524,11.53232515,11.52094756,11.52308045,11.52076553,11.51542192,11.51460261,11.51017587,11.50442066,11.49476269,11.50981613,11.52577789,11.5330946,11.52003867,11.54121076,11.47596287,11.46702097,11.46012828,11.43876539,11.43085387,11.47405069,11.48072342,11.49771401,11.50193251,11.50825527,11.5225565,11.52059197,11.52721973,11.55623292,11.53619714,11.53976832,11.57332164,11.58460081],"lat":[44.35835481,44.34437572,44.32878665,44.32740828,44.32815102,44.33109502,44.33067026,44.31939475,44.3107136,44.30780275,44.30166214,44.29619292,44.29334384,44.27835856,44.27906451,44.29011624,44.29549251,44.29343369,44.29104827,44.28599562,44.26548499,44.26263531,44.26385804,44.26905217,44.27455323,44.23794549,44.23692683,44.25393896,44.24965526,44.23677083,44.22146653,44.24248932,44.24422802,44.2410412,44.24316732,44.25052485,44.27861344,44.30883044,44.31185116,44.31176216,44.30844207,44.31092286,44.3209497,44.32903761,44.34334921,44.35274873,44.35630473,44.35653115,44.35835481]}]],[[{"lng":[11.03479012,11.04348721,11.04063209,11.03647136,11.03509355,11.03335971,11.03286437,11.03276082,11.0326934,11.03177376,11.03240512,11.03376352,11.08446187,11.05163435,11.03733074,11.03553519,11.00567136,10.98849392,10.98173445,10.96780189,10.96380669,10.97372082,10.94889216,10.94972425,10.94974477,10.94990678,10.96670558,11.00223055,11.00786631,11.03479012],"lat":[44.32034596,44.31947774,44.31428185,44.31144598,44.31098834,44.31086224,44.31060998,44.31044807,44.31033393,44.30855031,44.30141559,44.29977596,44.2737916,44.2495405,44.25274,44.25290874,44.24932232,44.27117283,44.26794409,44.25308495,44.25350147,44.2769811,44.28640591,44.29285125,44.29294993,44.29315874,44.30224709,44.30599154,44.29693476,44.32034596]}]],[[{"lng":[11.4385165,11.43876539,11.46012828,11.47596287,11.54121076,11.55436522,11.55315131,11.5491291,11.56225424,11.56167682,11.55600878,11.53563487,11.51613249,11.447627,11.45129722,11.42106489,11.4385165],"lat":[44.24333808,44.24316732,44.2410412,44.24248932,44.22146653,44.21397013,44.20876479,44.20502768,44.18802215,44.18549325,44.18502761,44.19038947,44.15755237,44.19948529,44.22056833,44.23924426,44.24333808]}]],[[{"lng":[11.02641639,11.05121001,11.05395898,11.05327771,11.05698164,11.05740114,11.06569048,11.06276166,11.05697906,11.04433675,11.0402054,11.04203684,11.03041171,11.0294936,11.03220005,11.03148111,11.00160351,11.01430906,11.00225599,10.98491292,10.97913436,10.97424106,10.98050742,10.99438395,10.99774361,11.00511606,11.02318754,11.02512113,11.02641639],"lat":[44.20774745,44.20048109,44.20078561,44.19727376,44.18465922,44.17763497,44.15546793,44.149966,44.14971132,44.15378488,44.1480462,44.11730463,44.10030308,44.09745585,44.09600742,44.09582326,44.11183591,44.13748732,44.14439306,44.14833249,44.15409849,44.16424464,44.1788026,44.18472644,44.18531593,44.19156477,44.20558716,44.20841414,44.20774745]}]],[[{"lng":[11.72290224,11.70378877,11.67652062,11.65432377,11.64345951,11.63865451,11.62348009,11.60499206,11.60557653,11.61737188,11.62180734,11.64913032,11.6767892,11.71554933,11.73230489,11.73053596,11.72805098,11.72604178,11.72290224],"lat":[44.46941179,44.44055849,44.42045313,44.42610858,44.42405774,44.42170504,44.42772701,44.43191689,44.43822673,44.45319421,44.46178302,44.46086988,44.45103523,44.46949975,44.48670029,44.48249852,44.47768084,44.47422858,44.46941179]}]],[[{"lng":[11.34923538,11.34962838,11.35569138,11.3578313,11.34928883,11.34718854,11.34717624,11.34720953,11.34725363,11.34777127,11.3566875,11.35802045,11.3528393,11.34616558,11.34654537,11.34334927,11.32143429,11.30746025,11.29718335,11.2960016,11.27104507,11.26364959,11.25902863,11.25059908,11.24712336,11.24804943,11.24996111,11.25041704,11.25068798,11.25196563,11.25623373,11.25648689,11.25673071,11.26309945,11.26671476,11.27037004,11.27543385,11.2774338,11.31179407,11.31303291,11.31988067,11.33133009,11.34923538],"lat":[44.70145279,44.69786911,44.69487299,44.6930835,44.68343085,44.67798157,44.67775507,44.67760303,44.67748454,44.67698551,44.67305682,44.67127836,44.66636874,44.66797629,44.66845855,44.66909079,44.66995137,44.6736344,44.66806391,44.67464968,44.66879288,44.67974927,44.6826152,44.68317049,44.68434907,44.68700282,44.68838469,44.68861033,44.68872257,44.68908617,44.6893991,44.68939804,44.68936004,44.68690403,44.69090414,44.69857737,44.70557786,44.70902494,44.69930277,44.70002373,44.7081657,44.71220455,44.70145279]}],[{"lng":[11.29422443,11.29366652,11.29933212,11.29663518,11.2899109,11.28276884,11.29104651,11.29464246,11.29701646,11.29422443],"lat":[44.64746651,44.64435111,44.63323852,44.63034962,44.64122111,44.64375879,44.64652489,44.65089081,44.66587577,44.64746651]}]],[[{"lng":[11.33200335,11.33878686,11.34835022,11.36266228,11.36212552,11.37542041,11.38663544,11.40947927,11.40599334,11.38217302,11.37059999,11.35917363,11.3111492,11.30812345,11.308252,11.30867161,11.30909538,11.31346253,11.31839436,11.32128383,11.32309571,11.3159354,11.31305897,11.31796635,11.33200335],"lat":[44.60362809,44.59674709,44.59601172,44.58937432,44.58426183,44.58040917,44.58619388,44.58557105,44.57338839,44.54840382,44.55167469,44.5529427,44.54824572,44.56405221,44.56443671,44.56503646,44.56538293,44.56732342,44.56312501,44.56819654,44.59518715,44.59714887,44.60659723,44.60372215,44.60362809]}]],[[{"lng":[11.55797155,11.56479236,11.58553855,11.58829724,11.5884219,11.59243849,11.60995499,11.61158536,11.62193142,11.62180734,11.61964877,11.61737188,11.60557653,11.60499206,11.62348009,11.63843688,11.63865451,11.63918086,11.63197284,11.60639828,11.53976832,11.55700664,11.55623292,11.55609703,11.54106157,11.52721973,11.5225565,11.50825527,11.49771401,11.48072342,11.48276372,11.48941643,11.45527408,11.45582608,11.47671702,11.49997938,11.52168919,11.53373351,11.54360267,11.54622979,11.55056665,11.55797155],"lat":[44.47831825,44.47330325,44.47142067,44.47086582,44.47082418,44.46884867,44.46417667,44.46614377,44.46199026,44.46178302,44.45885747,44.45319421,44.43822673,44.43191689,44.42772701,44.42175395,44.42170504,44.42174689,44.39390291,44.36258949,44.35630473,44.34444484,44.34334921,44.34318121,44.33531995,44.32903761,44.31092286,44.30844207,44.31185116,44.30883044,44.33118766,44.3441991,44.36382055,44.37916215,44.39078783,44.42564805,44.44168798,44.45502691,44.47220819,44.47477777,44.4781009,44.47831825]}]],[[{"lng":[11.46053583,11.47181761,11.474037,11.48290212,11.48648292,11.51600876,11.50869766,11.49614905,11.48990028,11.49152129,11.49304026,11.49245122,11.479169,11.46981329,11.45498286,11.45044951,11.44895752,11.4479381,11.44393759,11.4432659,11.44610155,11.44266775,11.42606049,11.41726499,11.43370377,11.42445666,11.42537021,11.43110096,11.4393399,11.4442845,11.4426956,11.45077137,11.46053583],"lat":[44.54367112,44.54459372,44.5418258,44.54246038,44.52927826,44.51300577,44.50350536,44.50012039,44.4919712,44.49138443,44.49106036,44.4873462,44.47767248,44.47800808,44.48363894,44.48375155,44.48335088,44.48338682,44.48474021,44.48503028,44.4896323,44.49073212,44.48740257,44.49063089,44.51317043,44.52164949,44.52277846,44.52088194,44.52992525,44.53757959,44.54501136,44.54250832,44.54367112]}]],[[{"lng":[11.18439806,11.183205,11.18226153,11.18235387,11.20514372,11.19653054,11.19384321,11.26368792,11.12764259,11.13785311,11.1493086,11.15473154,11.17227288,11.17890978,11.15904283,11.14242,11.14147608,11.14130952,11.14132179,11.16108543,11.15893495,11.16317393,11.18439806],"lat":[44.23582927,44.23122911,44.22535306,44.22492929,44.17902159,44.16293893,44.14560979,44.10427195,44.10968456,44.14936139,44.1521691,44.15731902,44.15987212,44.16955273,44.1784818,44.19557022,44.19839965,44.19909151,44.19953861,44.20766729,44.21988835,44.22895901,44.23582927]}]],[[{"lng":[11.26356623,11.29334728,11.29033679,11.27348012,11.24608308,11.241301,11.20668233,11.20617203,11.20680708,11.20857097,11.20963996,11.19136952,11.14830789,11.10536168,11.11699352,11.13196854,11.15208928,11.17596952,11.17819336,11.20784504,11.22434992,11.26356623],"lat":[44.80421583,44.80280764,44.8002655,44.78439417,44.75838253,44.74130364,44.73853704,44.7372202,44.73399414,44.72536348,44.71994482,44.69327117,44.70087402,44.69051642,44.71043589,44.78443778,44.78630437,44.79187146,44.79618608,44.80430345,44.80155694,44.80421583]}]],[[{"lng":[11.66321126,11.67652062,11.65210124,11.66013566,11.66194167,11.64546184,11.62898695,11.61341396,11.61166269,11.60967549,11.60958107,11.60562193,11.59076444,11.60639828,11.62276408,11.63197284,11.63918086,11.65432377,11.66321126],"lat":[44.42407291,44.42045313,44.3936733,44.37766593,44.36179721,44.35606868,44.35349813,44.34832306,44.34552786,44.34430225,44.3442774,44.34437572,44.3572366,44.36258949,44.37868213,44.39390291,44.42174689,44.42610858,44.42407291]}]],[[{"lng":[11.53603113,11.53640524,11.53826709,11.53774433,11.54884485,11.55598214,11.57530199,11.57160594,11.57582585,11.59663328,11.60070747,11.6013149,11.60105567,11.6012854,11.60109797,11.60087659,11.59934959,11.59869439,11.59456339,11.59025989,11.57881047,11.56821249,11.55555846,11.55544123,11.55187156,11.55136205,11.55093132,11.52003867,11.52577789,11.50981613,11.49554879,11.49482729,11.49476269,11.49471106,11.49627455,11.49930058,11.50361614,11.50442066,11.5046201,11.51017587,11.51517308,11.51542192,11.5162653,11.51885783,11.52076553,11.52080534,11.52308045,11.52094756,11.53603113],"lat":[44.29550082,44.29549251,44.29448446,44.29011624,44.27906451,44.27835856,44.26905662,44.26388908,44.25751562,44.24819392,44.24298646,44.23968546,44.23864514,44.23850171,44.23822689,44.23803388,44.23709184,44.23675115,44.23521561,44.23666377,44.232201,44.21949836,44.22320341,44.22317001,44.2198378,44.219273,44.21678333,44.23677083,44.25393896,44.23692683,44.23686036,44.23782592,44.23794549,44.23818689,44.26246536,44.26833312,44.27358901,44.27455323,44.27473117,44.26905217,44.26284055,44.26263531,44.26228925,44.26234255,44.26548499,44.26559214,44.28599562,44.29104827,44.29550082]}]],[[{"lng":[10.98849392,11.00567136,11.05163435,11.04504265,11.04323661,11.03100138,10.99774361,10.95551286,10.95140125,10.94944327,10.94130536,10.93461161,10.93647525,10.93298973,10.92109262,10.9093985,10.90724322,10.9402918,10.94265761,10.94843739,10.95356452,10.95641325,10.9567907,10.95705504,10.95715948,10.98849392],"lat":[44.27117283,44.24932232,44.2495405,44.22911245,44.22911552,44.22376774,44.18531593,44.18528053,44.18390644,44.18274475,44.17549473,44.17498036,44.17810096,44.1826013,44.19456391,44.20428912,44.20543403,44.22561067,44.22621415,44.22481926,44.22515705,44.22576043,44.22588675,44.22602403,44.22610608,44.27117283]}]],[[{"lng":[11.4076275,11.4128987,11.43244693,11.43392016,11.43785503,11.44842216,11.45336535,11.51831257,11.41887366,11.40719613,11.35003698,11.35279011,11.37699763,11.3883459,11.39170203,11.3953084,11.39924104,11.4076275],"lat":[44.76628121,44.76530118,44.76022314,44.75987666,44.75977917,44.76077728,44.76028404,44.72252937,44.72796691,44.74086255,44.75134735,44.75323117,44.77407653,44.77865465,44.77675244,44.77181565,44.76857413,44.76628121]}]],[[{"lng":[11.43882182,11.45927429,11.47425829,11.46357468,11.47633224,11.4426956,11.43110096,11.42537021,11.4144035,11.40746436,11.41488841,11.38861288,11.38102468,11.38217302,11.38767667,11.40303902,11.40599334,11.40947927,11.41648124,11.4328682,11.43882182],"lat":[44.59768624,44.5851634,44.57996534,44.56265638,44.55162242,44.54501136,44.52088194,44.52277846,44.5257252,44.52856635,44.54002153,44.54156185,44.54833462,44.54840382,44.55130464,44.56753996,44.57338839,44.58557105,44.59165884,44.60228241,44.59768624]}]],[[{"lng":[11.17755408,11.19566751,11.19477135,11.18671539,11.18439806,11.16317393,11.15893495,11.15983416,11.16253235,11.16108543,11.14130952,11.11935305,11.11674684,11.09526029,11.09255749,11.09031774,11.08118532,11.06074025,11.05656326,11.05121001,11.02512113,11.04323661,11.04890439,11.06228682,11.06818064,11.09694987,11.09816203,11.09861982,11.1003811,11.103175,11.10586373,11.10871158,11.11366455,11.1184581,11.13384656,11.15501867,11.15831775,11.16019831,11.16406776,11.17769041,11.17755408],"lat":[44.31095867,44.28171952,44.24705106,44.24640943,44.23582927,44.22895901,44.21988835,44.21730495,44.21415632,44.20766729,44.19909151,44.2086245,44.20913593,44.20987769,44.21051864,44.21175649,44.21398779,44.21403506,44.20360731,44.20048109,44.20841414,44.22911552,44.22809398,44.22781029,44.23084178,44.23606993,44.23879578,44.25047931,44.25247708,44.25350543,44.25480912,44.25782203,44.28857589,44.29481377,44.3004263,44.30392856,44.30791356,44.31284416,44.31189929,44.31356349,44.31095867]}]],[[{"lng":[11.78967724,11.77868843,11.74977277,11.79670582,11.78038132,11.78828281,11.79141933,11.79891166,11.78133445,11.75521552,11.80994406,11.80785534,11.80447297,11.8026701,11.79892461,11.79953351,11.78880562,11.78596702,11.77443125,11.75876228,11.73297199,11.71388159,11.71104292,11.70901494,11.70265859,11.69110619,11.69156114,11.69777196,11.68394277,11.66759797,11.66763231,11.67144658,11.67153902,11.66557266,11.65050054,11.64028595,11.63586196,11.58420679,11.58409646,11.58400241,11.58414837,11.58860772,11.59014798,11.59431357,11.5975567,11.60011892,11.60037478,11.60420272,11.60612015,11.60627868,11.60244005,11.59702447,11.60145361,11.60562193,11.60967549,11.62898695,11.66194167,11.66013566,11.65410685,11.65210124,11.66411368,11.66704064,11.67652062,11.67771538,11.70378877,11.72604178,11.73053596,11.73230489,11.73314768,11.73351607,11.73566192,11.74829343,11.76162459,11.76526842,11.76515611,11.76452815,11.76887223,11.7735256,11.77518895,11.77418327,11.78967724],"lat":[44.56575964,44.50351639,44.49756929,44.48569339,44.46724107,44.46351931,44.46345615,44.46076546,44.43626721,44.40248116,44.38322396,44.37753328,44.37911988,44.3796458,44.37845935,44.37211108,44.36048578,44.34805946,44.33603834,44.33228142,44.30607388,44.29833242,44.29501035,44.29036808,44.28793949,44.28951783,44.29837478,44.30896388,44.31411534,44.31185619,44.31136925,44.28901634,44.28822193,44.28281477,44.30157446,44.29619292,44.29673685,44.31928366,44.31939475,44.31950868,44.32428823,44.33067026,44.33109502,44.32985033,44.32815102,44.32743662,44.32740828,44.32724055,44.32839302,44.32878665,44.33387015,44.33534053,44.34322055,44.34437572,44.34430225,44.35349813,44.36179721,44.37766593,44.38704185,44.3936733,44.41518207,44.4190394,44.42045313,44.42117176,44.44055849,44.47422858,44.48249852,44.48670029,44.48936228,44.48991162,44.49179347,44.50106749,44.51474392,44.5229475,44.52675543,44.53186601,44.54547755,44.55798422,44.56276005,44.56631963,44.56575964]}]],[[{"lng":[10.88167437,10.89009384,10.8932221,10.89424795,10.89884495,10.90724322,10.9093985,10.93647525,10.90370276,10.89346617,10.88110604,10.87902021,10.87865562,10.87858513,10.87858325,10.88191717,10.87870727,10.84866482,10.81503692,10.81408104,10.81101011,10.8056016,10.80691303,10.8552,10.85586913,10.85028285,10.88167437],"lat":[44.22514776,44.22416245,44.21590894,44.21081426,44.20663256,44.20543403,44.20428912,44.17810096,44.16458984,44.12462552,44.11228171,44.10758323,44.10640362,44.10580552,44.10569694,44.10250335,44.09861952,44.09805853,44.11562143,44.12038392,44.1286795,44.14110838,44.14785231,44.20738595,44.21274985,44.22782142,44.22514776]}]],[[{"lng":[11.30492749,11.31081336,11.32359534,11.33062127,11.36487215,11.36876045,11.36457725,11.36806305,11.37397055,11.36584525,11.35820677,11.33774075,11.33222802,11.31223639,11.30440656,11.29762374,11.29390694,11.28953647,11.28989478,11.27978533,11.27856981,11.27862201,11.27975505,11.28289762,11.29566768,11.30492749],"lat":[44.33041538,44.32427863,44.31491966,44.31183649,44.3136124,44.30801703,44.29396097,44.27434816,44.26054796,44.24876818,44.24796966,44.24345081,44.23547281,44.23978499,44.24866762,44.25265191,44.25434827,44.25578924,44.28751023,44.2975723,44.31092517,44.31107887,44.31350444,44.31508182,44.31499682,44.33041538]}]],[[{"lng":[11.55279664,11.58056889,11.58303046,11.57761642,11.54863119,11.5399094,11.54974404,11.53756052,11.52006828,11.50327557,11.49944167,11.49630687,11.47033979,11.45109799,11.46843518,11.46979721,11.46866985,11.47295221,11.47639502,11.48139283,11.48163566,11.48610584,11.46654101,11.46474279,11.48317466,11.48326618,11.49900493,11.51831257,11.51613267,11.55279664],"lat":[44.7214375,44.70883999,44.70718923,44.69526439,44.69751773,44.68887029,44.68975265,44.67771181,44.65875867,44.65222007,44.6490661,44.64127456,44.6220243,44.62551792,44.64330254,44.64711256,44.65100512,44.67081817,44.67426791,44.6729598,44.67299617,44.68390978,44.68719979,44.69576826,44.72320024,44.72323651,44.72243809,44.72252937,44.733568,44.7214375]}]],[[{"lng":[11.18000893,11.18312378,11.19902927,11.20169331,11.20555434,11.2077209,11.2191761,11.22517073,11.23431435,11.23590909,11.23732064,11.23770485,11.24396033,11.26646705,11.27486575,11.28213012,11.2816631,11.2704638,11.23857925,11.23218409,11.23051096,11.22370247,11.22207447,11.2215358,11.226028,11.23167748,11.24065062,11.24082031,11.24137272,11.24437493,11.24428592,11.24294072,11.23806172,11.212762,11.20984151,11.20095692,11.19566751,11.19459642,11.17753566,11.17648989,11.17769041,11.12364871,11.12815558,11.16668454,11.16566903,11.16242986,11.1561663,11.15389534,11.15373722,11.15375364,11.16074433,11.16274788,11.16302145,11.16373409,11.16415378,11.16428654,11.16442738,11.16440589,11.16435804,11.16387436,11.16363826,11.16525348,11.17626583,11.17774931,11.17954064,11.18000893],"lat":[44.38627031,44.38299402,44.37788526,44.37404941,44.37247818,44.37209927,44.37192895,44.3728774,44.37677253,44.3774891,44.37821486,44.37843577,44.38468632,44.3478427,44.3377282,44.33513955,44.33233665,44.32304965,44.33094844,44.33102864,44.32994668,44.32313387,44.32074608,44.31328651,44.30771802,44.30516966,44.30427932,44.30422929,44.30402376,44.30239155,44.30194709,44.29931715,44.29627992,44.29185752,44.28976861,44.28186976,44.28171952,44.28219251,44.29497343,44.30012778,44.31356349,44.33392166,44.34609669,44.34821181,44.35374356,44.35492692,44.35858289,44.36210024,44.36339286,44.36375548,44.36803809,44.36825618,44.36837871,44.36894363,44.36975381,44.37048275,44.37547547,44.37563735,44.37570128,44.37607337,44.37615886,44.37881667,44.38579481,44.38629542,44.38635858,44.38627031]}]],[[{"lng":[11.74905062,11.75304794,11.76976327,11.77518895,11.76452815,11.76162459,11.73377206,11.73351607,11.73314768,11.73230489,11.7257359,11.72460627,11.71997393,11.71554933,11.6767892,11.6657939,11.64913032,11.62180734,11.61158536,11.58829724,11.56479236,11.56639717,11.53112889,11.59771879,11.61060928,11.62258693,11.68065568,11.69834841,11.74905062],"lat":[44.57679833,44.57314549,44.56577544,44.56276005,44.53186601,44.51474392,44.49017555,44.48991162,44.48936228,44.48670029,44.4838556,44.48192734,44.47482515,44.46949975,44.45103523,44.44940035,44.46086988,44.46178302,44.46614377,44.47086582,44.47330325,44.47549677,44.4907887,44.53776126,44.53952196,44.54674075,44.56036206,44.57988819,44.57679833]}]],[[{"lng":[11.51942324,11.52517688,11.57550136,11.55764931,11.53554561,11.52995866,11.5238368,11.47280726,11.45927429,11.44162554,11.43922321,11.4328682,11.42953198,11.45109799,11.47033979,11.49944167,11.51942324],"lat":[44.64088704,44.64248326,44.63620267,44.61119394,44.60720902,44.59871268,44.58877119,44.60271371,44.5851634,44.59524968,44.59689052,44.60228241,44.60390244,44.62551792,44.6220243,44.6490661,44.64088704]}]],[[{"lng":[11.64065881,11.67399974,11.69077754,11.6953466,11.72178991,11.72387495,11.7280364,11.75831489,11.77185786,11.77660905,11.80639882,11.78527487,11.78562361,11.75918197,11.74558468,11.73460425,11.69834841,11.69660524,11.68065568,11.61060928,11.6209383,11.61215479,11.62914376,11.5820933,11.59678958,11.59358518,11.60573079,11.60974165,11.61980723,11.6239115,11.59881324,11.60716937,11.60584588,11.64065881],"lat":[44.6648449,44.63226128,44.62871613,44.63516368,44.63588642,44.63671103,44.65421897,44.64849207,44.64079894,44.64396758,44.62356382,44.60571071,44.5850455,44.57961127,44.57995945,44.58442383,44.57988819,44.57310954,44.56036206,44.53952196,44.55113185,44.55686576,44.5775193,44.58357008,44.59676778,44.60023059,44.60626345,44.60737981,44.60923326,44.61283161,44.62699938,44.63164024,44.6581749,44.6648449]}]],[[{"lng":[11.29297719,11.30440656,11.30935977,11.31223639,11.33222802,11.33774075,11.35820677,11.36584525,11.38923547,11.38738848,11.34280936,11.29595749,11.29433018,11.30209664,11.27958766,11.27597824,11.2809288,11.28089394,11.27164297,11.29297719],"lat":[44.2545577,44.24866762,44.24451794,44.23978499,44.23547281,44.24345081,44.24796966,44.24876818,44.21245783,44.20522359,44.20581921,44.17155149,44.17468679,44.18255816,44.19076299,44.20430054,44.21244222,44.21352495,44.23307458,44.2545577]}]],[[{"lng":[11.45702512,11.45527408,11.48542836,11.48941643,11.48884756,11.48712515,11.48434008,11.48276372,11.4837265,11.48361907,11.48072342,11.48177675,11.47692488,11.47405069,11.47202138,11.43735075,11.43227732,11.43085387,11.42989964,11.42809101,11.38923547,11.36352204,11.36387796,11.36584525,11.36789386,11.37397055,11.36457725,11.36722492,11.36876045,11.37588447,11.38404777,11.40029472,11.40144072,11.41093465,11.41107198,11.41101515,11.41012735,11.41050244,11.4360225,11.44445496,11.44711549,11.45582608,11.45702512],"lat":[44.37637479,44.36382055,44.3481622,44.3441991,44.33872604,44.33650277,44.33408093,44.33118766,44.32320888,44.31695095,44.30883044,44.29262622,44.282056,44.27861344,44.27625985,44.25250083,44.25083661,44.25052485,44.25039298,44.24975929,44.21245783,44.24414213,44.24753503,44.24876818,44.25112779,44.26054796,44.29396097,44.30609584,44.30801703,44.31060752,44.31032311,44.32988208,44.34911591,44.35795507,44.35837698,44.35984055,44.3617718,44.36330559,44.35937662,44.36438753,44.36685465,44.37916215,44.37637479]}]],[[{"lng":[11.17288608,11.16793269,11.17146938,11.17060165,11.20033127,11.19318442,11.19211635,11.1900796,11.18456113,11.18040139,11.17431959,11.1738769,11.17266055,11.17055837,11.16485069,11.16176399,11.16125633,11.15913775,11.16136582,11.16177043,11.16387436,11.16440589,11.16415378,11.16302145,11.16274788,11.16168703,11.16111894,11.16074433,11.15373722,11.1561663,11.16242986,11.16477424,11.16566903,11.16668454,11.14943891,11.13751669,11.13544527,11.13418212,11.10617421,11.1056516,11.10485315,11.10012696,11.09910364,11.10511869,11.10785602,11.10834757,11.10648238,11.08850441,11.0890505,11.10322332,11.11406112,11.12600733,11.12557935,11.11489375,11.11453328,11.11824579,11.13600606,11.13610606,11.13135495,11.13198366,11.17288608],"lat":[44.50687776,44.49757047,44.48515854,44.4778706,44.4593312,44.44672162,44.43899991,44.43655315,44.43646757,44.43518207,44.42608894,44.42501256,44.4175292,44.40858342,44.39859644,44.39692507,44.3954444,44.38322791,44.37691313,44.37660949,44.37607337,44.37563735,44.36975381,44.36837871,44.36825618,44.36816203,44.36813565,44.36803809,44.36339286,44.35858289,44.35492692,44.35465911,44.35374356,44.34821181,44.35195995,44.36249697,44.36184871,44.35972181,44.35842616,44.35929331,44.36708639,44.37449601,44.37804163,44.3850025,44.38691853,44.39252206,44.39499621,44.40395218,44.40498313,44.41494431,44.42689151,44.4281146,44.44617114,44.45677772,44.45780337,44.46678777,44.46678208,44.47135296,44.47650345,44.48243621,44.50687776]}]],[[{"lng":[11.29942018,11.31951354,11.3132761,11.30825706,11.30439581,11.30410543,11.2944978,11.29566768,11.28289762,11.27862201,11.27978533,11.28699458,11.28989478,11.28953647,11.27164297,11.20881827,11.19477135,11.19566751,11.20095692,11.20146833,11.20984151,11.212762,11.23806172,11.24428592,11.24082031,11.23959944,11.23803124,11.23167748,11.226028,11.2215358,11.23051096,11.23857925,11.2704638,11.28213012,11.294001,11.29819784,11.29942018],"lat":[44.34658393,44.34192649,44.33522166,44.33413995,44.33187105,44.33108186,44.31942268,44.31499682,44.31508182,44.31107887,44.2975723,44.29456297,44.28751023,44.25578924,44.23307458,44.25212618,44.24705106,44.28171952,44.28186976,44.28226671,44.28976861,44.29185752,44.29627992,44.30194709,44.30422929,44.30389707,44.3039087,44.30516966,44.30771802,44.31328651,44.32994668,44.33094844,44.32304965,44.33513955,44.33771667,44.34849179,44.34658393]}]],[[{"lng":[11.80796774,11.84042771,11.83621144,11.8250128,11.81721142,11.81444662,11.80994406,11.75521552,11.78133445,11.79733209,11.799092,11.80147459,11.80796774],"lat":[44.42519911,44.42357008,44.41260836,44.40103875,44.39596957,44.39350347,44.38322396,44.40248116,44.43626721,44.43114114,44.43048558,44.42773084,44.42519911]}]],[[{"lng":[11.50114218,11.50927681,11.55134945,11.55056665,11.54360267,11.52168919,11.49997938,11.49054908,11.47671702,11.45582608,11.45039557,11.44445496,11.40259382,11.42519702,11.45350298,11.4600462,11.46155496,11.46930231,11.47849594,11.48625431,11.46981329,11.479169,11.49152129,11.50114218],"lat":[44.4936919,44.48525244,44.47996818,44.4781009,44.47220819,44.44168798,44.42564805,44.40519492,44.39078783,44.37916215,44.37446524,44.36438753,44.3648925,44.40676299,44.42818015,44.44434525,44.45940832,44.46109327,44.46491701,44.47064269,44.47800808,44.47767248,44.49138443,44.4936919]}]],[[{"lng":[11.35823763,11.37261493,11.37829019,11.38334662,11.39880409,11.40985414,11.40491291,11.40416041,11.41016394,11.41110205,11.41873302,11.42587156,11.40529074,11.40225843,11.40259382,11.41012735,11.41107198,11.40677319,11.40144072,11.40029472,11.36876045,11.33062127,11.31081336,11.30439581,11.3132761,11.31951354,11.31924888,11.29942018,11.30356205,11.27622128,11.294269,11.32015075,11.31307582,11.31455746,11.31659002,11.33151262,11.33241053,11.32480117,11.33330321,11.33688044,11.33735823,11.34623237,11.35523311,11.35823763],"lat":[44.44682643,44.43866139,44.43795474,44.44178848,44.43421876,44.41973096,44.41567597,44.41399875,44.40639042,44.40593567,44.41050737,44.40899086,44.37639343,44.36536038,44.3648925,44.3617718,44.35837698,44.35670598,44.34911591,44.32988208,44.30801703,44.31183649,44.32427863,44.33187105,44.33522166,44.34192649,44.34312809,44.34658393,44.35943395,44.37638019,44.39497458,44.39953125,44.40714083,44.41111247,44.41254992,44.41625903,44.41674822,44.42269156,44.42595277,44.42763718,44.43164007,44.43654922,44.44358901,44.44682643]}]],[[{"lng":[11.35279011,11.33202516,11.31303291,11.31179407,11.2774338,11.28909205,11.30178791,11.30548517,11.30769762,11.32083199,11.32476307,11.32697727,11.33358535,11.34074513,11.34471549,11.34483568,11.34639968,11.34692871,11.34800486,11.35971259,11.37397834,11.37468349,11.37807031,11.3819606,11.3883459,11.35279011],"lat":[44.75323117,44.73984514,44.70002373,44.69930277,44.70902494,44.71394612,44.72623541,44.73307899,44.73528034,44.74501097,44.747123,44.74807714,44.7507374,44.75492084,44.75847623,44.75864168,44.76083168,44.76153199,44.76279267,44.774173,44.78007967,44.78016852,44.78038607,44.78035897,44.77865465,44.75323117]}]],[[{"lng":[11.25902863,11.26364959,11.27104507,11.29654744,11.29464246,11.29104651,11.28564795,11.28329373,11.28279595,11.28276884,11.28279656,11.29663518,11.29772967,11.29933212,11.30196396,11.30248023,11.30404854,11.30571531,11.30620395,11.30627035,11.29912174,11.31741584,11.31772373,11.31809528,11.31807854,11.31526787,11.31414337,11.31378893,11.31314074,11.31305897,11.31293081,11.31288041,11.3159354,11.32277295,11.32309571,11.32256344,11.32019039,11.26748704,11.25959983,11.24491637,11.24248628,11.23574348,11.22628285,11.22591204,11.22359804,11.23090809,11.2337067,11.23602084,11.23902271,11.25375977,11.24258436,11.24250574,11.24264432,11.24272405,11.2429851,11.24323275,11.24350369,11.24512664,11.24550027,11.25059908,11.25902863],"lat":[44.6826152,44.67974927,44.66879288,44.6657378,44.65089081,44.64652489,44.64665113,44.64530513,44.64432932,44.64375879,44.64362151,44.63034962,44.6306905,44.63323852,44.63596832,44.6361706,44.63619465,44.63564111,44.63454983,44.63401792,44.62406261,44.61783666,44.61725988,44.61598694,44.61418062,44.61096756,44.60930973,44.60875426,44.60699,44.60659723,44.60588808,44.60493654,44.59714887,44.59609845,44.59518715,44.59370638,44.59145847,44.6065714,44.58073339,44.57877842,44.57616455,44.5757781,44.58806724,44.58854203,44.59155737,44.61033101,44.61507735,44.61911405,44.62406278,44.64786076,44.66656429,44.67731964,44.67766181,44.67776602,44.67793025,44.67801316,44.67806578,44.67829213,44.67853233,44.68317049,44.6826152]}]],[[{"lng":[11.20881827,11.27164297,11.28089394,11.2809288,11.27753648,11.27597824,11.27958766,11.29011821,11.30209664,11.30117758,11.29433018,11.29470706,11.29809995,11.19573059,11.19653054,11.20307206,11.20514372,11.20458087,11.19441105,11.1948974,11.19214208,11.18226153,11.18737482,11.18671539,11.20065545,11.20881827],"lat":[44.25212618,44.23307458,44.21352495,44.21244222,44.2082994,44.20430054,44.19076299,44.18465702,44.18255816,44.18074291,44.17468679,44.17229389,44.16792449,44.15141455,44.16293893,44.17166339,44.17902159,44.18093322,44.20472919,44.20630267,44.21158741,44.22535306,44.24209006,44.24640943,44.24729959,44.25212618]}]],[[{"lng":[11.37477137,11.38225495,11.39176962,11.39196784,11.39214712,11.39679206,11.39181522,11.39892661,11.40515166,11.40850042,11.41951377,11.38982549,11.38272597,11.37034745,11.3686824,11.34529292,11.34859527,11.35940533,11.35947023,11.35939026,11.35876786,11.35055824,11.34546646,11.34525409,11.34517903,11.34616558,11.35802045,11.3566875,11.34720953,11.34928883,11.3578313,11.35569138,11.35103127,11.34962838,11.34931684,11.36380327,11.3600616,11.37070041,11.37477137],"lat":[44.68896092,44.68779223,44.69165383,44.69156414,44.69145462,44.6882489,44.68126877,44.67438357,44.67296525,44.67301874,44.67073635,44.64536599,44.62939239,44.61703783,44.60947102,44.6247578,44.6304514,44.62966581,44.62994524,44.63840965,44.63954105,44.64233796,44.64787221,44.64817591,44.64842558,44.66797629,44.67127836,44.67305682,44.67760303,44.68343085,44.6930835,44.69487299,44.69696196,44.69786911,44.70169191,44.70047685,44.69390893,44.68980231,44.68896092]}]],[[{"lng":[11.26747448,11.25315405,11.27543385,11.26671476,11.26309945,11.261976,11.25648689,11.25041704,11.25059908,11.24550027,11.24323275,11.24264432,11.24258436,11.24751706,11.25106738,11.25375977,11.24976223,11.23902271,11.2337067,11.14949258,11.15233496,11.16572906,11.15909396,11.15753357,11.15619446,11.15250344,11.15227635,11.14364742,11.14012612,11.14279053,11.12420691,11.11829163,11.12359625,11.12779278,11.13984757,11.15343485,11.15748284,11.16369986,11.16787638,11.16911279,11.18330044,11.18897875,11.19136952,11.19638296,11.20963996,11.20857097,11.20617203,11.20637131,11.20668233,11.21667232,11.241301,11.24608308,11.27310365,11.26747448],"lat":[44.74119519,44.71632208,44.70557786,44.69090414,44.68690403,44.68707765,44.68939804,44.68861033,44.68317049,44.67853233,44.67801316,44.67766181,44.66656429,44.6565186,44.65097636,44.64786076,44.64119744,44.62406278,44.61507735,44.56860668,44.57742165,44.58837071,44.58964533,44.58643847,44.58680417,44.58891625,44.58914983,44.59607607,44.6012285,44.60567658,44.61165963,44.61784003,44.62621721,44.63135593,44.62972791,44.66482737,44.66494393,44.67540002,44.68012463,44.68107225,44.68899555,44.69157678,44.69327117,44.69716957,44.71994482,44.72536348,44.7372202,44.7378105,44.73853704,44.74855507,44.74130364,44.75838253,44.75044069,44.74119519]}]],[[{"lng":[11.44538054,11.4432659,11.4479381,11.44895752,11.4498726,11.45044951,11.45095785,11.45458346,11.45498286,11.45524745,11.46981329,11.48625431,11.46155496,11.45350298,11.4343927,11.42519702,11.42583879,11.42587156,11.42580934,11.42180891,11.41873302,11.41368009,11.41016394,11.40985414,11.39880409,11.37261493,11.35823763,11.37315142,11.37410076,11.37457936,11.37475596,11.37511474,11.40024667,11.4154936,11.42606049,11.44266775,11.44610155,11.44538054],"lat":[44.48658126,44.48503028,44.48338682,44.48335088,44.4836756,44.48375155,44.48376595,44.48371055,44.48363894,44.48355785,44.47800808,44.47064269,44.45940832,44.42818015,44.40679175,44.40676299,44.40850205,44.40899086,44.4097259,44.41068803,44.41050737,44.40884531,44.40639042,44.41973096,44.43421876,44.43866139,44.44682643,44.4492502,44.45804004,44.4587998,44.45891204,44.45906099,44.46425587,44.48333021,44.48740257,44.49073212,44.4896323,44.48658126]}]],[[{"lng":[11.3552585,11.36140252,11.36643101,11.36740295,11.3679987,11.36848102,11.37051592,11.37283261,11.39080803,11.40719613,11.41887366,11.48326618,11.47116124,11.46898474,11.46654101,11.46190853,11.45111804,11.44944335,11.4480263,11.44554666,11.42202732,11.41951377,11.40515166,11.39181522,11.39196784,11.38225495,11.37070041,11.36380327,11.33133009,11.32553121,11.33202516,11.3552585],"lat":[44.74752126,44.74571822,44.74336354,44.74272784,44.74206396,44.7416376,44.74051116,44.73967533,44.73524473,44.74086255,44.72796691,44.72323651,44.69363324,44.69049186,44.68719979,44.6809549,44.67918188,44.67520395,44.67211451,44.66812677,44.67173686,44.67073635,44.67296525,44.68126877,44.69156414,44.68779223,44.68980231,44.70047685,44.71220455,44.71133259,44.73984514,44.74752126]}]],[[{"lng":[11.1580119,11.18330044,11.16787638,11.15343485,11.14755898,11.13984757,11.07809108,11.10536168,11.1580119],"lat":[44.6981546,44.68899555,44.68012463,44.66482737,44.63874073,44.62972791,44.64702985,44.69051642,44.6981546]}]],[[{"lng":[11.22287714,11.23419345,11.23339134,11.24809088,11.2613938,11.26792525,11.27135005,11.27898491,11.28377063,11.28226468,11.29363802,11.31340773,11.32480117,11.33288712,11.33321297,11.33241053,11.33160574,11.33151262,11.33143016,11.3306433,11.31676544,11.31659002,11.31649598,11.31485328,11.31455746,11.31302781,11.31302867,11.31307582,11.31379753,11.31443095,11.31754225,11.31989759,11.32037597,11.32015075,11.3201004,11.27622128,11.30356205,11.29803517,11.294001,11.27486575,11.26646705,11.25086987,11.25023127,11.24396033,11.24218771,11.23732064,11.2191761,11.20555434,11.19902927,11.18312378,11.18051551,11.17954064,11.16363826,11.16177043,11.16164839,11.16136582,11.16052652,11.15913775,11.16011731,11.16125633,11.16169543,11.16176399,11.16228671,11.16412448,11.16485069,11.16986888,11.17055837,11.17266055,11.17283201,11.1738769,11.17397399,11.17431959,11.17867554,11.18013868,11.20033127,11.22287714],"lat":[44.46132005,44.45940103,44.4515316,44.45212984,44.44970984,44.44896135,44.44971362,44.45084095,44.45046905,44.42582416,44.43052346,44.42112042,44.42269156,44.41905834,44.41756006,44.41674822,44.41629146,44.41625903,44.41623878,44.41621264,44.41259926,44.41254992,44.41251412,44.41142774,44.41111247,44.40914827,44.40723912,44.40714083,44.40637448,44.40577704,44.40525927,44.40190127,44.40062219,44.39953125,44.3994884,44.37638019,44.35943395,44.34988655,44.33771667,44.3377282,44.3478427,44.37574681,44.37894016,44.38468632,44.38388109,44.37821486,44.37192895,44.37247818,44.37788526,44.38299402,44.38452987,44.38635858,44.37615886,44.37660949,44.37666075,44.37691313,44.37823891,44.38322791,44.39127746,44.3954444,44.3968619,44.39692507,44.39719054,44.3978658,44.39859644,44.40704695,44.40858342,44.4175292,44.41999548,44.42501256,44.42542878,44.42608894,44.43288616,44.43487538,44.4593312,44.46132005]}]],[[{"lng":[11.05140177,11.07469299,11.08130637,11.09353325,11.09806075,11.10373069,11.11729683,11.12203727,11.1239256,11.16086489,11.16019831,11.15931465,11.15501867,11.1184581,11.10871158,11.10586373,11.1003811,11.09918009,11.09861982,11.09760935,11.09816203,11.09694987,11.09425609,11.06228682,11.04504265,11.04423609,11.05163435,11.05077588,11.05765485,11.0595813,11.06504057,11.06774556,11.06816708,11.08446187,11.08469577,11.07630577,11.03240512,11.03276082,11.03335971,11.03647136,11.04063209,11.04348721,11.03479012,11.03162219,11.03760421,11.05140177],"lat":[44.34171671,44.33423431,44.32676713,44.3203902,44.31706215,44.31157303,44.31474388,44.32239264,44.33366558,44.31289963,44.31284416,44.3123404,44.30392856,44.29481377,44.25782203,44.25480912,44.25247708,44.25150603,44.25047931,44.24383519,44.23879578,44.23606993,44.23477062,44.22781029,44.22911245,44.23628364,44.2495405,44.25603406,44.25676164,44.2579862,44.26240928,44.26918957,44.26955329,44.2737916,44.27500216,44.28589429,44.30141559,44.31044807,44.31086224,44.31144598,44.31428185,44.31947774,44.32034596,44.32336485,44.34258845,44.34171671]}]],[[{"lng":[11.22478848,11.23207944,11.23290939,11.23625874,11.23700414,11.23844958,11.2389443,11.23974604,11.24022018,11.24119053,11.24123513,11.24128017,11.24127672,11.24087758,11.23750188,11.23570711,11.25678432,11.2468144,11.24461018,11.24010274,11.24191269,11.24176567,11.24165308,11.24094911,11.23824049,11.22287714,11.20033127,11.17060165,11.16793269,11.17617841,11.17883881,11.18112469,11.18037643,11.18107205,11.19348756,11.22478848],"lat":[44.53170999,44.52439059,44.52416956,44.52424297,44.52419685,44.52398791,44.52384486,44.52354499,44.52325492,44.52185624,44.52166575,44.52136385,44.52094586,44.51923309,44.5120146,44.50324301,44.49696374,44.49108484,44.48675916,44.47559733,44.46503556,44.46372012,44.46330314,44.46242066,44.46043583,44.46132005,44.4593312,44.4778706,44.49757047,44.5061663,44.51147487,44.52158998,44.52307731,44.52595269,44.52394975,44.53170999]}]],[[{"lng":[11.17870636,11.17617841,11.16642698,11.14872895,11.13198366,11.13100052,11.13135495,11.13220335,11.13610606,11.13696027,11.13600606,11.11824579,11.11453328,11.12557935,11.12600733,11.11406112,11.10322332,11.0890505,11.08886885,11.08850441,11.0884427,11.10834757,11.10617421,11.14943891,11.12815558,11.10373069,11.08130637,11.07469299,11.03760421,11.02606073,11.02589604,11.02262512,11.0225622,11.02237352,11.04816659,10.99023225,11.00913173,11.01347658,11.02686709,11.0448445,11.04753323,11.05056075,11.05120495,11.05072652,11.05513641,11.06266232,11.0653635,11.05614838,11.05580454,11.05910139,11.05614262,11.10815167,11.10450505,11.13160657,11.14531234,11.15554781,11.18212808,11.17870636],"lat":[44.53738656,44.5061663,44.50921289,44.49894013,44.48243621,44.48069007,44.47650345,44.47356121,44.47135296,44.46915948,44.46678208,44.46678777,44.45780337,44.44617114,44.4281146,44.42689151,44.41494431,44.40498313,44.40475351,44.40395218,44.40376202,44.39252206,44.35842616,44.35195995,44.34609669,44.31157303,44.32676713,44.33423431,44.34258845,44.34986936,44.35018738,44.35781667,44.35799335,44.3735219,44.41610732,44.44058494,44.44517386,44.44722643,44.46016481,44.46575895,44.46692836,44.47070068,44.47820852,44.48038841,44.48818016,44.49441769,44.50007646,44.51309842,44.51673712,44.52236595,44.53406923,44.52467021,44.53941831,44.5674275,44.56263511,44.55919355,44.54990327,44.53738656]}]],[[{"lng":[10.9578001,10.98050742,10.97913436,11.00225599,11.00695284,10.94414301,10.90179559,10.90362141,10.87858513,10.88110604,10.89346617,10.89667095,10.90370276,10.94130536,10.94829436,10.95140125,10.9578001],"lat":[44.18497239,44.1788026,44.15409849,44.14439306,44.13854571,44.08122763,44.06402887,44.08514686,44.10580552,44.11228171,44.12462552,44.14625792,44.16458984,44.17549473,44.18005559,44.18390644,44.18497239]}]],[[{"lng":[11.71260804,11.71479032,11.71611552,11.71470598,11.74405305,11.74536538,11.76426196,11.79166602,11.81149152,11.81692733,11.82034371,11.82776105,11.85906935,11.91295551,11.96332308,11.95845321,12.10209871,12.13451409,12.15378113,12.11701718,12.09357849,12.07932422,12.07599118,12.06919911,12.06770309,12.06708633,12.06784039,12.06741183,12.06605201,12.06416889,12.06346011,12.06152129,12.05954275,12.02808748,12.02703335,12.00219652,11.87082506,11.84958577,11.78919476,11.78967724,11.74558468,11.78562361,11.78527487,11.80639882,11.80128894,11.77660905,11.77185786,11.7280364,11.72387495,11.6953466,11.69077754,11.67399974,11.63245939,11.61456681,11.63003344,11.65489598,11.66369463,11.66955561,11.68547409,11.69196825,11.69656392,11.6975437,11.69379761,11.69168667,11.69102427,11.68958977,11.69344838,11.70759559,11.70724329,11.69864795,11.7010851,11.70700797,11.71260804],"lat":[44.72817543,44.72814153,44.72711427,44.72229979,44.70238855,44.68921824,44.67646504,44.66560741,44.66525572,44.66133171,44.65692174,44.66104577,44.65133541,44.65658021,44.65867715,44.65259081,44.61864653,44.61110792,44.54845202,44.54672558,44.55882961,44.56122557,44.56129746,44.56000398,44.55861283,44.55718004,44.55191595,44.55081197,44.54942623,44.54809377,44.54806804,44.54806608,44.54850625,44.56047662,44.57680345,44.60020257,44.57743653,44.55606853,44.55434327,44.56575964,44.57995945,44.5850455,44.60571071,44.62356382,44.62901479,44.64396758,44.64079894,44.65421897,44.63671103,44.63516368,44.62871613,44.63226128,44.67294507,44.69012295,44.70097483,44.69543399,44.70157377,44.70440239,44.6966306,44.67451313,44.67454561,44.68173544,44.68735457,44.68889918,44.68974634,44.69307483,44.70124085,44.71127067,44.71542592,44.71668348,44.72521764,44.72802383,44.72817543]}]],[[{"lng":[11.98579395,12.09156358,12.1121559,12.08830229,12.07462434,12.07451241,12.01257286,12.01006783,11.9977957,11.97960209,11.9388465,11.92864116,11.91386759,11.88723749,11.87821743,11.87629562,11.86498037,11.8601302,11.86865223,11.84402665,11.98579395],"lat":[44.98371666,44.97020703,44.93310214,44.92104141,44.92803625,44.9366181,44.95366047,44.9462582,44.94685327,44.95523153,44.94801576,44.94770203,44.95029472,44.94618715,44.94853947,44.95677066,44.95430524,44.95924294,44.97181619,44.97000801,44.98371666]}]],[[{"lng":[11.42674203,11.42635159,11.46422659,11.47047447,11.49176034,11.48796275,11.48970909,11.48542771,11.49007448,11.4675316,11.45564903,11.44436671,11.43751302,11.4307907,11.41730451,11.40912934,11.40192021,11.38707359,11.3772247,11.36641169,11.34112864,11.26968614,11.2453826,11.23474353,11.24328363,11.25651205,11.26043375,11.24620567,11.27225716,11.30158351,11.42674203],"lat":[44.95008352,44.93010004,44.93571387,44.91690925,44.91308803,44.89774387,44.89393396,44.87821077,44.86224343,44.86666691,44.86618835,44.8390475,44.83733965,44.83784311,44.84115422,44.83810434,44.83365587,44.83123301,44.83345441,44.83730599,44.87259427,44.89652123,44.89825052,44.90597572,44.91678161,44.92620246,44.93310137,44.95143857,44.93832265,44.96235897,44.95008352]}]],[[{"lng":[11.36297676,11.36641169,11.3684819,11.37253177,11.38707359,11.35406486,11.3513548,11.33726775,11.33082206,11.34471549,11.32083199,11.30871696,11.30769762,11.30707619,11.30548517,11.30178791,11.28909205,11.2790499,11.27759812,11.27543385,11.25315405,11.27310365,11.24608308,11.30156737,11.31160934,11.34749072,11.35252733,11.36297676],"lat":[44.83771884,44.83730599,44.83725365,44.83635936,44.83123301,44.81653073,44.7930204,44.78481174,44.76293328,44.75847623,44.74501097,44.73606092,44.73528034,44.73473926,44.73307899,44.72623541,44.71394612,44.71079825,44.70935086,44.70557786,44.71632208,44.75044069,44.75838253,44.8104213,44.8274944,44.83013922,44.83611629,44.83771884]}]],[[{"lng":[12.12987532,12.16446403,12.15695007,12.17218858,12.18495434,12.21769814,12.21994491,12.24076144,12.25139016,12.25909749,12.28250327,12.2797188,12.26829405,12.26630965,12.24581362,12.23402608,12.22741115,12.2100251,12.20988323,12.20789622,12.20105411,12.20222428,12.20687313,12.20707213,12.19820669,12.16939534,12.16503137,12.16072162,12.15658267,12.14968646,12.14726649,12.15344237,12.15361611,12.12777482,12.12095382,12.11122444,12.09821405,12.09503779,12.0422514,12.02541256,12.00531305,12.00691333,12.03823051,12.04428877,12.02952975,12.03258176,12.05333746,12.05264849,12.07207176,12.07462434,12.08816342,12.08830229,12.09859989,12.1108778,12.11361068,12.11490541,12.11589758,12.12987532],"lat":[44.92044808,44.90374749,44.88465464,44.87974488,44.86470547,44.88283403,44.85888017,44.84733839,44.82370862,44.81481073,44.82164737,44.81938693,44.80545556,44.80435113,44.80436899,44.80341646,44.80134426,44.81158402,44.81836656,44.82039388,44.81743536,44.81572815,44.81289694,44.81146903,44.80826112,44.8185533,44.8162349,44.81235747,44.80974444,44.80989903,44.80888556,44.80294471,44.79801577,44.78191126,44.78574388,44.8036807,44.79779631,44.83298511,44.82945013,44.8340883,44.86665317,44.86724115,44.86748276,44.86738429,44.88813062,44.90811492,44.90919072,44.92774415,44.928051,44.92803625,44.92813868,44.92104141,44.92097826,44.93145175,44.92960943,44.92488098,44.92390808,44.92044808]}]],[[{"lng":[12.27380769,12.24830732,12.24022792,12.26957989,12.23708404,12.15378113,12.13451409,12.10209871,12.06359205,12.01269171,11.95845321,11.97300192,11.97601325,11.99996525,12.00800526,12.01666958,12.01973447,12.029023,12.11839715,12.09239422,12.10633736,12.09391106,12.10365084,12.11287242,12.13265351,12.13091865,12.16409621,12.18115689,12.17535143,12.175197,12.17739751,12.17728348,12.17127906,12.15547273,12.15658267,12.15802744,12.15950833,12.16072162,12.16327904,12.16503137,12.16676525,12.16816378,12.16939534,12.1794841,12.18427114,12.19414319,12.19709074,12.19820669,12.19922123,12.20707213,12.20789622,12.22741115,12.26630965,12.2797188,12.28562428,12.27380769],"lat":[44.80358223,44.76276501,44.69964071,44.62980482,44.62058595,44.54845202,44.61110792,44.61864653,44.6278723,44.63981646,44.65259081,44.67060542,44.674965,44.66897246,44.6675905,44.66682162,44.66681258,44.66713351,44.67627568,44.70020909,44.7190706,44.72084595,44.75207092,44.74124218,44.73822518,44.73276349,44.74041824,44.76612195,44.78859987,44.79246605,44.79842403,44.80283236,44.80747345,44.80933404,44.80974444,44.81049664,44.81144587,44.81235747,44.81495119,44.8162349,44.81741106,44.81823643,44.8185533,44.82031605,44.82042561,44.81047242,44.80866147,44.80826112,44.80831368,44.81146903,44.82039388,44.80134426,44.80435113,44.81938693,44.81770158,44.80358223]}]],[[{"lng":[11.86330803,11.87629562,11.88723749,11.9388465,11.97960209,11.99874635,11.9977957,11.99108255,12.00320149,11.93341672,11.94747624,11.90611234,11.91082693,11.85699679,11.85352438,11.83080985,11.84765185,11.84133003,11.84031805,11.83586596,11.83408768,11.83233639,11.81663177,11.79047878,11.78676114,11.7825031,11.77211371,11.76490434,11.7636333,11.76363409,11.76116425,11.74706845,11.74230235,11.74022869,11.76692802,11.76236328,11.76333608,11.77350963,11.79710158,11.84183903,11.85807881,11.8601302,11.86330803],"lat":[44.95916774,44.95677066,44.94618715,44.94801576,44.95523153,44.95186211,44.94685327,44.94152731,44.92479846,44.90140157,44.88794827,44.88900024,44.85935803,44.8691849,44.86857864,44.851757,44.84074707,44.82442651,44.82509939,44.83260821,44.83634851,44.83771015,44.83597171,44.84195708,44.84229998,44.84163674,44.8434756,44.84876843,44.85142779,44.85696399,44.85910773,44.8475698,44.85257248,44.86614325,44.88772485,44.89501003,44.92385589,44.94107156,44.93541091,44.93349987,44.95929434,44.95924294,44.95916774]}]],[[{"lng":[11.5341305,11.61465359,11.72532677,11.72356012,11.72532115,11.7255359,11.72829939,11.73064443,11.76236328,11.76835965,11.76692802,11.75996423,11.74022869,11.74706845,11.75956599,11.76116425,11.76363409,11.7636333,11.76401439,11.76490434,11.76588173,11.76968074,11.77211371,11.77392412,11.81663177,11.82360714,11.83145781,11.83233639,11.83296107,11.83391943,11.83408768,11.83414987,11.84031805,11.84133003,11.85153873,11.85317027,11.85475878,11.85742527,11.85967822,11.86087834,11.86444469,11.86671353,11.86751975,11.8692692,11.87627167,11.87706572,11.87721702,11.87663072,11.86949957,11.86860319,11.86487029,11.85154035,11.82428369,11.81443198,11.80015942,11.79464031,11.7921272,11.78779682,11.78590531,11.77493536,11.77108936,11.73545107,11.69416306,11.7139641,11.70700797,11.7010851,11.69874441,11.69864795,11.69889153,11.70038571,11.70724329,11.70847622,11.70759559,11.7053549,11.68958977,11.69656392,11.68547409,11.66955561,11.63003344,11.61456681,11.57060384,11.54688102,11.55936505,11.55929475,11.55903988,11.53315296,11.53583888,11.54488591,11.50847101,11.50595408,11.52567512,11.53063727,11.52300613,11.527757,11.53769501,11.53804367,11.49101259,11.49176034,11.48672818,11.47047447,11.46422659,11.5341305],"lat":[44.9362459,44.88812385,44.92645843,44.92002997,44.91475957,44.91434485,44.90948324,44.90605351,44.89501003,44.89229012,44.88772485,44.87143343,44.86614325,44.8475698,44.85949746,44.85910773,44.85696399,44.85142779,44.85013578,44.84876843,44.84744395,44.84476375,44.8434756,44.8428984,44.83597171,44.83717689,44.83780454,44.83771015,44.8373622,44.83656277,44.83634851,44.83624929,44.82509939,44.82442651,44.82270476,44.82202934,44.82096338,44.81714281,44.81017733,44.80944959,44.808784,44.80854682,44.80844571,44.80802365,44.80570489,44.80514474,44.80415071,44.80304024,44.7944428,44.77777081,44.78096151,44.78635003,44.79091222,44.79820478,44.81142203,44.81344944,44.81355595,44.81420194,44.81404379,44.79533211,44.79344043,44.80399556,44.77975169,44.7362235,44.72802383,44.72521764,44.71826485,44.71668348,44.71616836,44.71517532,44.71542592,44.71441995,44.71127067,44.70511648,44.69307483,44.67454561,44.6966306,44.70440239,44.70097483,44.69012295,44.73390827,44.75681089,44.78651686,44.78672614,44.78690294,44.80056874,44.81037065,44.82096679,44.83289786,44.84053009,44.84542937,44.85513544,44.85426371,44.8748689,44.87981628,44.88287256,44.90955115,44.91308803,44.91598672,44.91690925,44.93571387,44.9362459]}]],[[{"lng":[11.8866381,11.90403776,11.89174137,11.89322361,11.89918171,11.88004676,11.86671353,11.85967822,11.85742527,11.85317027,11.84133003,11.84765185,11.82971494,11.83080985,11.83089804,11.85352438,11.8866381],"lat":[44.86280365,44.86024668,44.84298251,44.83899306,44.83722146,44.81669974,44.80854682,44.81017733,44.81714281,44.82202934,44.82442651,44.84074707,44.84490341,44.851757,44.85200687,44.86857864,44.86280365]}]],[[{"lng":[12.03248979,12.07462434,12.05264849,12.05270319,12.05333746,12.03941085,12.03258176,12.04428877,12.04353587,12.03823051,12.00691333,12.00531305,12.02541256,12.00979649,11.98838469,11.97225362,11.96866127,11.95470733,11.92939694,11.92369008,11.91098131,11.90909875,11.91631557,11.89918171,11.89322361,11.91082693,11.90611234,11.94747624,11.94721995,11.93341672,11.96963418,12.00320149,11.9977957,12.01257286,12.03248979],"lat":[44.94597073,44.92803625,44.92774415,44.91742197,44.90919072,44.90958057,44.90811492,44.86738429,44.86726935,44.86748276,44.86724115,44.86665317,44.8340883,44.83076997,44.819135,44.82248201,44.82223346,44.80882249,44.80849388,44.82356566,44.82763544,44.83091519,44.83615751,44.83722146,44.83899306,44.85935803,44.88900024,44.88794827,44.89359097,44.90140157,44.90486455,44.92479846,44.94685327,44.95366047,44.94597073]}]],[[{"lng":[12.15292676,12.17728348,12.18115689,12.16409621,12.13091865,12.11287242,12.11546828,12.10564889,12.1014019,12.11189797,12.11299876,12.11347362,12.09821405,12.11122444,12.11799448,12.11814213,12.12095382,12.12195782,12.12610107,12.12777482,12.1336843,12.15361611,12.14680177,12.14726649,12.14827938,12.14968646,12.15292676],"lat":[44.80951532,44.80283236,44.76612195,44.74041824,44.73276349,44.74124218,44.75005644,44.7518725,44.7523031,44.75767065,44.7584058,44.75924803,44.79779631,44.8036807,44.79791459,44.79314846,44.78574388,44.78443813,44.78228121,44.78191126,44.78169958,44.79801577,44.80778212,44.80888556,44.80960478,44.80989903,44.80951532]}]],[[{"lng":[11.7921272,11.80015942,11.80899573,11.81443198,11.82191323,11.82428369,11.82944079,11.82535803,11.82527493,11.8332586,11.82077838,11.82075035,11.82104172,11.82520444,11.78532243,11.78827357,11.77546648,11.75215803,11.75353586,11.77108936,11.77493536,11.7921272],"lat":[44.81355595,44.81142203,44.80425594,44.79820478,44.79222294,44.79091222,44.78917745,44.78609604,44.78593156,44.7784329,44.76382557,44.76325013,44.76248674,44.75852184,44.75294285,44.75889006,44.77960109,44.7921114,44.79662422,44.79344043,44.79533211,44.81355595]}]],[[{"lng":[12.28455191,12.2769092,12.27435465,12.27419317,12.27464629,12.27229529,12.26563015,12.26728708,12.25139016,12.24481714,12.24076144,12.22944285,12.21994491,12.21769814,12.18495434,12.18139573,12.17218858,12.15695007,12.16042501,12.16446403,12.14349347,12.12987532,12.12632351,12.11589758,12.11490541,12.11354349,12.10123112,12.14242435,12.17067592,12.2249718,12.2808688,12.29487131,12.28455191],"lat":[44.89369141,44.89291497,44.88718206,44.88589942,44.88116937,44.87008339,44.86877276,44.83529015,44.82370862,44.83684969,44.84733839,44.84514097,44.85888017,44.88283403,44.86470547,44.86719929,44.87974488,44.88465464,44.89640469,44.90374749,44.92191793,44.92044808,44.92163547,44.92390808,44.92488098,44.95086345,44.96182646,44.92790385,44.94204738,44.92298071,44.94176719,44.9262134,44.89369141]}]],[[{"lng":[11.43751302,11.44436671,11.44815904,11.47184363,11.47837652,11.47934858,11.48090992,11.4879726,11.43640501,11.42462333,11.4388531,11.40891216,11.40912934,11.41730451,11.43751302],"lat":[44.83733965,44.8390475,44.83866916,44.83276192,44.82113362,44.82051837,44.81976428,44.81668485,44.79889741,44.80916764,44.81582308,44.83293274,44.83810434,44.84115422,44.83733965]}]],[[{"lng":[11.83705221,11.85154035,11.86487029,11.86893842,11.87080232,11.87506259,11.88336158,11.88998566,11.89352477,11.90800008,11.9020477,11.90642057,11.97689218,11.99426229,12.0135648,12.01880738,12.09692671,12.10365084,12.09391106,12.10633736,12.10092355,12.10037113,12.09522152,12.09239422,12.11839715,12.0887792,12.07706188,12.029023,12.01666958,11.9569605,11.8702113,11.85344044,11.83614024,11.82075035,11.82919958,11.8332586,11.83300087,11.82535803,11.83705221],"lat":[44.78766535,44.78635003,44.78096151,44.77739289,44.77700392,44.77778787,44.78222806,44.77998099,44.77947721,44.77977988,44.74825746,44.74729095,44.76860965,44.75628134,44.75720451,44.75694889,44.75106535,44.75207092,44.72084595,44.7190706,44.7008598,44.70044271,44.70304913,44.70020909,44.67627568,44.67354348,44.67255925,44.66713351,44.66682162,44.68013248,44.71653787,44.73108288,44.75025666,44.76325013,44.77068375,44.7784329,44.78113993,44.78609604,44.78766535]}]],[[{"lng":[11.50178348,11.55929475,11.54688102,11.59272667,11.45278097,11.39924104,11.42533409,11.42639024,11.43640501,11.44596934,11.47003679,11.4758273,11.4879726,11.49094333,11.49192421,11.50178348],"lat":[44.81482794,44.78672614,44.75681089,44.71169761,44.76050814,44.76857413,44.79569439,44.79615805,44.79889741,44.80172654,44.80776176,44.80810441,44.81668485,44.81927567,44.81973137,44.81482794]}]],[[{"lng":[11.81661334,11.8702113,11.9569605,11.97601325,11.96332308,11.85906935,11.74536538,11.74405305,11.73127248,11.75334588,11.81661334],"lat":[44.75560731,44.71653787,44.68013248,44.674965,44.65867715,44.65133541,44.68921824,44.70238855,44.71378136,44.73982087,44.75560731]}]],[[{"lng":[11.83684289,11.84413174,11.86865223,11.86057149,11.8601302,11.85807881,11.86148716,11.85012006,11.84183903,11.82989628,11.81064874,11.79710158,11.77350963,11.77249757,11.77377562,11.77508257,11.76333608,11.76236328,11.7255359,11.74703629,11.83684289],"lat":[44.97289949,44.96933818,44.97181619,44.96389383,44.95924294,44.95929434,44.95133224,44.93826689,44.93349987,44.93773951,44.93699995,44.93541091,44.94107156,44.93868492,44.93520612,44.92601938,44.92385589,44.89501003,44.91434485,44.95809666,44.97289949]}]],[[{"lng":[11.40912934,11.4388531,11.42978394,11.42462333,11.43640501,11.39924104,11.3953084,11.39397146,11.39325193,11.39170203,11.3883459,11.37468349,11.34483568,11.33082206,11.3329981,11.33609049,11.33901701,11.33878874,11.33726775,11.3487468,11.3513548,11.35406486,11.36173368,11.37313215,11.38707359,11.40912934],"lat":[44.83810434,44.81582308,44.81188455,44.80916764,44.79889741,44.76857413,44.77181565,44.77405825,44.77507257,44.77675244,44.77865465,44.78016852,44.75864168,44.76293328,44.76768698,44.77227784,44.7793206,44.78243101,44.78481174,44.78827597,44.7930204,44.81653073,44.81508145,44.82265673,44.83123301,44.83810434]}]],[[{"lng":[11.53769501,11.527757,11.52300613,11.5274069,11.53061669,11.53063727,11.52567512,11.50940844,11.50595408,11.54488591,11.53583888,11.53764762,11.537699,11.53315296,11.49556046,11.47934858,11.47932058,11.47184363,11.45903128,11.44436671,11.45564903,11.49007448,11.49101259,11.53769501],"lat":[44.87981628,44.8748689,44.85426371,44.85520582,44.85605924,44.85513544,44.84542937,44.84154711,44.84053009,44.82096679,44.81037065,44.80884322,44.80792344,44.80056874,44.8204621,44.82051837,44.82397577,44.83276192,44.83359683,44.8390475,44.86618835,44.86224343,44.90955115,44.87981628]}]],[[{"lng":[11.74024989,11.78827357,11.77231633,11.75334588,11.73835574,11.73127248,11.71470598,11.71479032,11.70700797,11.7068051,11.69416306,11.74024989],"lat":[44.79732694,44.75889006,44.7474565,44.73982087,44.72548101,44.71378136,44.72229979,44.72814153,44.72802383,44.72822386,44.77975169,44.79732694]}]],[[{"lng":[11.90124145,11.91631557,11.90909875,11.92369008,11.92886072,11.92939694,11.93713983,11.94235752,11.9525534,11.95470733,11.95424211,11.89126229,11.88948863,11.88476293,11.88336158,11.88242205,11.86893842,11.87721702,11.87627167,11.86671353,11.86692583,11.88182678,11.89322757,11.89918171,11.90124145],"lat":[44.83718712,44.83615751,44.83091519,44.82356566,44.80864267,44.80849388,44.80956411,44.81143715,44.80960742,44.80882249,44.80763727,44.78951789,44.78038969,44.78194058,44.78222806,44.78214377,44.77739289,44.80415071,44.80570489,44.80854682,44.80900031,44.82468914,44.83379877,44.83722146,44.83718712]}]],[[{"lng":[12.32705932,12.35519221,12.39672107,12.30854543,12.33974793,12.30860131,12.25892844,12.25139016,12.26728708,12.2769092,12.29514952,12.32705932],"lat":[44.85280887,44.8150811,44.79026219,44.80108155,44.8174571,44.84230958,44.81562576,44.82370862,44.83529015,44.89291497,44.8593028,44.85280887]}]],[[{"lng":[12.04109882,12.09503779,12.09821405,12.11299876,12.09692671,11.99426229,11.97689218,11.9020477,11.90841019,11.90800008,11.90703491,11.90175498,11.88998566,11.89126229,11.90245998,11.95205317,11.95424211,11.95470733,11.95572325,11.9620735,11.96866127,11.98838469,12.00979649,12.01528229,12.02541256,12.03646458,12.04109882],"lat":[44.82990394,44.83298511,44.79779631,44.7584058,44.75106535,44.75628134,44.76860965,44.74825746,44.77949938,44.77977988,44.78019157,44.7805105,44.77998099,44.78951789,44.78670852,44.80603304,44.80763727,44.80882249,44.81088465,44.81832673,44.82223346,44.819135,44.83076997,44.83213747,44.8340883,44.83656284,44.82990394]}]],[[{"lng":[12.00709432,12.00520307,12.02703335,12.02808748,12.03341214,12.04494077,12.06346011,12.06741183,12.06708633,12.06919911,12.07932422,12.09357849,12.09600217,12.10072366,12.11413598,12.06513599,12.05443282,12.04798569,11.96863315,11.9557717,11.95304343,11.95126355,11.95529678,11.96465081,11.98575574,11.97786122,11.930063,11.91623494,11.90903313,11.89511897,11.88413785,12.00709432],"lat":[44.59491252,44.58377369,44.57680345,44.56047662,44.55886132,44.5560087,44.54806804,44.55081197,44.55718004,44.56000398,44.56122557,44.55882961,44.55580876,44.55202059,44.54722736,44.49305199,44.49697096,44.49418954,44.49643407,44.50748982,44.50951398,44.51138752,44.51387192,44.53272728,44.54107136,44.5444825,44.55592633,44.55945158,44.56148089,44.56097052,44.57749784,44.59491252]}]],[[{"lng":[12.06513599,12.07131626,12.06984571,12.07506014,12.07716328,12.08142472,12.07431402,12.04234159,12.0039093,11.97763157,11.97357212,11.97069828,11.94511582,11.9430079,11.94051299,11.93927895,11.95029559,11.96252878,12.06513599],"lat":[44.49305199,44.49041261,44.47881459,44.47621456,44.47455963,44.46910109,44.45866859,44.43675997,44.38241262,44.3796173,44.39166054,44.39416608,44.40254434,44.40858541,44.41343006,44.41837724,44.45157325,44.46184325,44.49305199]}]],[[{"lng":[11.85106518,11.82878022,11.8262451,11.82527664,11.80927912,11.81444662,11.81721142,11.82360255,11.8250128,11.82629599,11.83549146,11.83621144,11.83685737,11.84642999,11.86098891,11.85243757,11.85106518],"lat":[44.38302943,44.38063111,44.37621063,44.37486621,44.38102276,44.39350347,44.39596957,44.39981777,44.40103875,44.40219531,44.41171248,44.41260836,44.4140453,44.40289676,44.39706818,44.38569592,44.38302943]}]],[[{"lng":[11.78142825,11.78491739,11.79277648,11.79705937,11.80389577,11.80946665,11.81068041,11.8110541,11.82674666,11.83562859,11.8358495,11.83645798,11.85439904,11.87640848,11.8940673,11.89643315,11.8957625,11.90460066,11.92329113,11.927582,11.92151122,11.91353675,11.91005848,11.90556603,11.88861015,11.86428841,11.85274257,11.83026499,11.82938009,11.82750811,11.82277296,11.82214849,11.8060783,11.78246647,11.77808629,11.77379729,11.77138614,11.75283866,11.74413429,11.73373357,11.72861269,11.71967372,11.71588519,11.67880649,11.65255628,11.61616647,11.5845742,11.61483927,11.62460403,11.63286402,11.66424209,11.6780187,11.68095614,11.68779176,11.69625013,11.68475215,11.6799676,11.68707439,11.69161771,11.70514844,11.73929138,11.78142825],"lat":[44.27656735,44.27731503,44.26839036,44.26597179,44.26799171,44.25794271,44.25083667,44.25053039,44.24238247,44.23674249,44.23534608,44.23497986,44.23005373,44.22026435,44.23418637,44.2349366,44.22079229,44.21089874,44.21726369,44.21534102,44.21090829,44.20785312,44.20303535,44.19394893,44.1706569,44.18007456,44.18602648,44.19863179,44.19896883,44.19843903,44.19480206,44.19456542,44.19947202,44.18071196,44.18094468,44.18683781,44.19887013,44.1934851,44.18068557,44.17492121,44.17183872,44.15723331,44.12255729,44.12291267,44.10115505,44.1184909,44.11220515,44.15792556,44.16287971,44.16874845,44.20420296,44.21299145,44.21262541,44.21566067,44.2260305,44.22893931,44.23219373,44.2408764,44.25160871,44.25028053,44.25566019,44.27656735]}]],[[{"lng":[11.68638208,11.6799676,11.69625013,11.68779176,11.6780187,11.67258743,11.66424209,11.65800742,11.62460403,11.52494706,11.53563487,11.56167682,11.5491291,11.55095516,11.55315131,11.55412103,11.55544123,11.56356676,11.56821249,11.57881047,11.59456339,11.59934959,11.60087659,11.60105567,11.60383914,11.60808209,11.61853892,11.62599231,11.63441586,11.66484934,11.68638208],"lat":[44.24354851,44.23219373,44.2260305,44.21566067,44.21299145,44.20995876,44.20420296,44.19887139,44.16287971,44.15766303,44.19038947,44.18549325,44.20502768,44.20855071,44.20876479,44.21104607,44.22317001,44.21878352,44.21949836,44.232201,44.23521561,44.23709184,44.23803388,44.23864514,44.24064468,44.24314063,44.24484134,44.24712789,44.25830881,44.25706675,44.24354851]}]],[[{"lng":[11.7945414,11.79589772,11.84383902,11.84809683,11.84505291,11.83241269,11.82313797,11.82136318,11.82112335,11.82112543,11.82062705,11.80787502,11.80189325,11.79352584,11.7704497,11.76724905,11.76171158,11.73649858,11.77443125,11.78880562,11.7945414],"lat":[44.36334336,44.35006601,44.32489528,44.32554532,44.3227674,44.32016043,44.30899284,44.30910874,44.31010497,44.31119424,44.31152165,44.31070173,44.30751774,44.29737426,44.28645825,44.2868735,44.28691759,44.30917276,44.33603834,44.36048578,44.36334336]}]],[[{"lng":[12.30716646,12.34772996,12.38352372,12.3747569,12.35217289,12.34933607,12.30245806,12.28365793,12.28024122,12.24712624,12.23964657,12.22985615,12.22923725,12.24427746,12.2503817,12.25414286,12.25519113,12.25951576,12.27159519,12.2746175,12.27868759,12.28678549,12.29070524,12.29760921,12.30460327,12.30716646],"lat":[44.30193812,44.30122982,44.22449406,44.21825606,44.19619003,44.19073231,44.21945002,44.23108598,44.23318922,44.23079669,44.21765017,44.21721017,44.2265632,44.24803108,44.25107131,44.25091011,44.25129433,44.2543625,44.28354151,44.30042395,44.30057715,44.30236975,44.30341812,44.30648673,44.3082783,44.30193812]}]],[[{"lng":[11.88413785,11.91623494,11.90916244,11.87305761,11.86553781,11.85374464,11.85113142,11.84093022,11.8468663,11.82765234,11.77868843,11.78919476,11.83198989,11.84958577,11.86031504,11.87082506,11.88413785],"lat":[44.57749784,44.55945158,44.55212864,44.5471513,44.508594,44.49637613,44.48792512,44.48533646,44.46873495,44.47312785,44.50351639,44.55434327,44.56161725,44.55606853,44.5596439,44.57743653,44.57749784]}]],[[{"lng":[11.94489557,11.94511582,11.94654804,11.95706733,11.97069828,11.97531738,11.97763157,11.98379225,11.98332185,11.96480981,11.94042103,11.93869969,11.93225284,11.92984872,11.92656098,11.92622654,11.92568886,11.91879094,11.90275865,11.87536653,11.8686649,11.85243757,11.86098891,11.90529101,11.92118306,11.94489557],"lat":[44.40291012,44.40254434,44.40105795,44.39724787,44.39416608,44.38175725,44.3796173,44.37783592,44.37623677,44.36931909,44.3797809,44.37724149,44.37332015,44.37318384,44.37470861,44.37479822,44.37458694,44.36585999,44.34440157,44.35530395,44.37942851,44.38569592,44.39706818,44.40042323,44.39502114,44.40291012]}]],[[{"lng":[11.98767068,12.03060917,12.01612071,12.02772379,12.01121345,12.00952618,12.00549649,12.00164829,11.99302361,11.97586245,11.97036627,11.96529098,11.94749363,11.93709389,11.92624774,11.92555256,11.92829151,11.92329113,11.90460066,11.8957625,11.8976605,11.89721309,11.89643315,11.89593732,11.8940673,11.87640848,11.86677744,11.83645798,11.83562859,11.82674666,11.8110541,11.80946665,11.80389577,11.78491739,11.76112389,11.76500863,11.7704497,11.78422459,11.79352584,11.80123753,11.80189325,11.80494887,11.80787502,11.81170939,11.82062705,11.82136318,11.82313797,11.83125613,11.83220533,11.83241269,11.8330472,11.83982231,11.84425989,11.84505291,11.84570432,11.85763745,11.86097176,11.87052788,11.90275865,11.91879094,11.92622654,11.93225284,11.93869969,11.93948018,11.94042103,11.96480981,11.97788116,11.98767068],"lat":[44.37733834,44.35297047,44.33829046,44.32229417,44.30255611,44.30143027,44.2996009,44.29616413,44.27888946,44.25569716,44.25277041,44.25048065,44.23588461,44.23676039,44.24098218,44.22977358,44.21562754,44.21726369,44.21089874,44.22079229,44.22807237,44.2332243,44.2349366,44.23503921,44.23418637,44.22026435,44.22351358,44.23497986,44.23674249,44.24238247,44.25053039,44.25794271,44.26799171,44.27731503,44.27680375,44.28613555,44.28645825,44.29761952,44.29737426,44.30296047,44.30751774,44.30954932,44.31070173,44.31196675,44.31152165,44.30910874,44.30899284,44.31645301,44.31976045,44.32016043,44.3205768,44.32326226,44.32270613,44.3227674,44.32301223,44.33091548,44.34184667,44.35385929,44.34440157,44.36585999,44.37479822,44.37332015,44.37724149,44.37929199,44.3797809,44.36931909,44.37068024,44.37733834]}]],[[{"lng":[11.96830015,12.00031967,12.04798569,11.97422007,11.96252878,11.95205012,11.93317784,11.93622096,11.94166994,11.92635054,11.93875945,11.94934841,11.9557717,11.96830015],"lat":[44.49681182,44.49796398,44.49418954,44.46878612,44.46184325,44.45326537,44.46286251,44.46739351,44.47400503,44.48621012,44.49390342,44.50073766,44.50748982,44.49681182]}]],[[{"lng":[11.930063,11.98575574,11.96465081,11.95126355,11.9557717,11.95542851,11.94934841,11.92678525,11.92635054,11.92534693,11.94166994,11.93317784,11.95205012,11.95029559,11.95070978,11.95548165,11.9430079,11.92118306,11.86373905,11.86098891,11.84642999,11.85071281,11.83685737,11.84042771,11.83606603,11.84094371,11.84156333,11.8464013,11.85042672,11.85361945,11.85692395,11.85810253,11.85887605,11.8586737,11.85605744,11.85716168,11.86074638,11.87481596,11.88377847,11.88376221,11.88360527,11.88230064,11.87055193,11.88123568,11.85503076,11.85964277,11.86463562,11.86452639,11.86244998,11.85931516,11.85374464,11.87305761,11.91623494,11.930063],"lat":[44.55592633,44.54107136,44.53272728,44.51138752,44.50748982,44.50692256,44.50073766,44.48660409,44.48621012,44.48475046,44.47400503,44.46286251,44.45326537,44.45157325,44.44981607,44.44550643,44.40858541,44.39502114,44.39604493,44.39706818,44.40289676,44.40833546,44.4140453,44.42357008,44.425148,44.42806956,44.42815316,44.42817663,44.42750899,44.42649005,44.42549201,44.42544451,44.42662246,44.42813997,44.43271572,44.43397545,44.43328248,44.42811257,44.43868048,44.43886093,44.43899093,44.43954603,44.44416336,44.46157504,44.47016481,44.48478637,44.49036242,44.49052449,44.49178293,44.49351797,44.49637613,44.5471513,44.55945158,44.55592633]}]],[[{"lng":[12.44976033,12.47890083,12.50371424,12.45258985,12.45239574,12.45332885,12.4499932,12.44524974,12.4393894,12.44264495,12.44201798,12.42872041,12.44976033],"lat":[44.16246519,44.13893195,44.11556243,44.10868236,44.10958661,44.11224813,44.11864194,44.12388981,44.12756866,44.14034887,44.1407459,44.14734463,44.16246519]}]],[[{"lng":[12.73838706,12.75564003,12.74147026,12.72709217,12.72068638,12.72042494,12.72087536,12.733187,12.73257949,12.71007826,12.73838706],"lat":[43.96818374,43.96250164,43.94092493,43.95430099,43.95277701,43.95407745,43.95597585,43.96171812,43.96296238,43.95852861,43.96818374]}],[{"lng":[12.7397576,12.73953828,12.73965462,12.7397576],"lat":[43.9385098,43.93827842,43.93843214,43.9385098]}]],[[{"lng":[12.54099326,12.55057407,12.57394702,12.5831308,12.59173589,12.59617426,12.6010526,12.605278,12.60679264,12.62853974,12.64172759,12.64024727,12.63488615,12.63425884,12.63422245,12.63574356,12.64318204,12.64183624,12.63768015,12.6358535,12.63407415,12.6317273,12.61615402,12.61179712,12.60675825,12.60564729,12.59921107,12.55519959,12.51545171,12.51380886,12.54099326],"lat":[43.99199088,43.98665087,43.99238494,43.98197477,43.98236085,43.98386145,43.98561344,43.98834633,43.98999186,43.98781693,43.97918625,43.97883285,43.97418726,43.97335646,43.97270942,43.96763739,43.96509093,43.95844929,43.95646619,43.95668195,43.95723828,43.95768662,43.95590347,43.95770698,43.9510332,43.94858351,43.94419974,43.95209741,43.9413144,43.99230222,43.99199088]}]],[[{"lng":[12.60122382,12.5998778,12.58949226,12.53476267,12.53586465,12.56719124,12.60122382],"lat":[43.9129953,43.90217127,43.88564496,43.86852123,43.89722224,43.91513099,43.9129953]}]],[[{"lng":[12.68983377,12.72134652,12.68370859,12.68223534,12.68031825,12.65427392,12.6358342,12.63481318,12.63407415,12.64318204,12.63574356,12.63425884,12.64024727,12.64172759,12.64569939,12.65935747,12.6625515,12.66532289,12.67164503,12.67901513,12.68820202,12.68983377],"lat":[43.98621863,43.97270418,43.94927278,43.93715751,43.93425743,43.94529014,43.94802183,43.95558974,43.95723828,43.96509093,43.96763739,43.97335646,43.97883285,43.97918625,43.98149018,43.98530682,43.98164372,43.97613505,43.97345604,43.97455555,43.98712386,43.98621863]}]],[[{"lng":[12.6452987,12.65275787,12.6530748,12.65688221,12.68062873,12.68131705,12.61122756,12.6189025,12.63406428,12.63779716,12.63884724,12.64313075,12.62920235,12.6452987],"lat":[43.87669173,43.8704753,43.86273615,43.8585404,43.86407905,43.82807066,43.83078258,43.84262745,43.83845448,43.84558292,43.85391767,43.85665744,43.86785071,43.87669173]}]],[[{"lng":[12.60578454,12.6164591,12.61933961,12.61956767,12.62226613,12.63331539,12.63910659,12.64540746,12.65443532,12.60698522,12.58935966,12.60578454],"lat":[43.91193299,43.90957857,43.90474273,43.90242176,43.90187698,43.90315976,43.90491536,43.9051734,43.89836659,43.84497636,43.86525148,43.91193299]}]],[[{"lng":[12.72265323,12.7272118,12.68229503,12.68283174,12.69480651,12.71355717,12.72265323],"lat":[43.88056636,43.86321757,43.85279665,43.86055536,43.87372755,43.88104505,43.88056636]}]],[[{"lng":[12.67209505,12.66857391,12.66683986,12.66645945,12.6557395,12.65443532,12.64540746,12.63910659,12.62226613,12.61956767,12.61861818,12.61933961,12.62372289,12.64615532,12.66877455,12.67036209,12.67117472,12.67584352,12.67937294,12.6723104,12.67283877,12.67477969,12.67209505],"lat":[43.91268142,43.91263262,43.91243177,43.91229546,43.90570716,43.89836659,43.9051734,43.90491536,43.90187698,43.90242176,43.90319011,43.90474273,43.90405446,43.92000425,43.92376271,43.92456243,43.92511697,43.92987772,43.92560468,43.91673478,43.91563293,43.91403546,43.91268142]}]],[[{"lng":[12.63245342,12.68820202,12.67901513,12.65935747,12.64172759,12.62853974,12.61324152,12.61013886,12.60679264,12.605278,12.60453821,12.60306445,12.62088467,12.63245342],"lat":[44.02525111,43.98712386,43.97455555,43.98530682,43.97918625,43.98781693,43.98674037,43.98921533,43.98999186,43.98834633,43.98914051,43.99532084,44.00019067,44.02525111]}]],[[{"lng":[12.50892562,12.57547278,12.63214263,12.63225357,12.61833424,12.62088467,12.61311612,12.60711718,12.60549366,12.60459496,12.60306445,12.605278,12.59173589,12.57394702,12.56964154,12.55057407,12.53918703,12.51380886,12.4529499,12.46270122,12.44329244,12.4803741,12.49876132,12.46177345,12.47047892,12.47249876,12.47775187,12.47956947,12.45207991,12.4550878,12.45422976,12.45239009,12.45226026,12.45239574,12.45258985,12.45286646,12.45590659,12.47647696,12.48922941,12.50371424,12.50892562],"lat":[44.11163915,44.07850908,44.02551518,44.0250739,44.0132274,44.00019067,43.99433327,43.99352439,43.99423741,43.99549412,43.99532084,43.98834633,43.98236085,43.99238494,43.99249116,43.98665087,43.99383292,43.99230222,43.96938966,44.00158984,44.02309819,44.0107813,44.02752109,44.04768506,44.05566262,44.06761272,44.06775749,44.0681785,44.08719968,44.10311995,44.10731418,44.10838155,44.10937689,44.10958661,44.10868236,44.10859482,44.10850194,44.10961816,44.1084194,44.11556243,44.11163915]}]],[[{"lng":[12.7288339,12.72520556,12.72277419,12.72022546,12.71355717,12.71352346,12.70847715,12.69480651,12.68699421,12.68283174,12.68062873,12.67892707,12.66565094,12.65688221,12.65275787,12.64203718,12.66683986,12.67477969,12.67626429,12.67709194,12.67777971,12.6785387,12.68513353,12.6930883,12.69749504,12.70436567,12.70529148,12.70659919,12.71264962,12.71697599,12.72002856,12.7288339],"lat":[43.90843548,43.88380738,43.88107762,43.88169213,43.88104505,43.88102815,43.87533136,43.87372755,43.86096563,43.86055536,43.86407905,43.86561939,43.86678033,43.8585404,43.8704753,43.88083818,43.91243177,43.91403546,43.91362303,43.91348834,43.91340765,43.91339668,43.91406169,43.91307979,43.91121754,43.90918065,43.90902455,43.90902709,43.91125217,43.91495554,43.91617498,43.90843548]}],[{"lng":[12.63062279,12.62619576,12.6189025,12.61585495,12.6249145,12.62920235,12.64313075,12.63884724,12.63779716,12.63703789,12.63406428,12.63062279],"lat":[43.83685345,43.83750736,43.84262745,43.84646627,43.85376237,43.86785071,43.85665744,43.85391767,43.84558292,43.84342841,43.83845448,43.83685345]}]],[[{"lng":[12.63481318,12.6358342,12.64070981,12.67914618,12.67036209,12.65206215,12.64615532,12.64203155,12.62372289,12.6164591,12.60037674,12.60081785,12.60173249,12.60274715,12.60428572,12.6038628,12.60887958,12.60905438,12.60725388,12.60675825,12.611425,12.61179712,12.61286385,12.61615402,12.6317273,12.63481318],"lat":[43.95558974,43.94802183,43.94407619,43.93366052,43.92456243,43.92173297,43.92000425,43.9156525,43.90405446,43.90957857,43.91330111,43.91380035,43.91518046,43.91749368,43.92306919,43.93530664,43.94282754,43.945919,43.95018927,43.9510332,43.95737664,43.95770698,43.95752016,43.95590347,43.95768662,43.95558974]}]],[[{"lng":[12.733187,12.72042494,12.72709217,12.73732505,12.74147026,12.7296961,12.72711792,12.72002856,12.71697599,12.71313668,12.71264962,12.70529148,12.6930883,12.68513353,12.67709194,12.67283877,12.6723104,12.67937294,12.67584352,12.67914618,12.68031825,12.68185322,12.68223534,12.68234338,12.68137395,12.68370859,12.733187],"lat":[43.96171812,43.95407745,43.95430099,43.94258225,43.94092493,43.91241582,43.91170481,43.91617498,43.91495554,43.91152441,43.91125217,43.90902455,43.91307979,43.91406169,43.91348834,43.91563293,43.91673478,43.92560468,43.92987772,43.93366052,43.93425743,43.93608951,43.93715751,43.93822537,43.94395994,43.94927278,43.96171812]}]],[[{"lng":[12.43905525,12.47956947,12.47249876,12.46177345,12.49744531,12.49876132,12.49651602,12.48661384,12.4803741,12.46444947,12.45569868,12.43641293,12.426854,12.42883089,12.41908965,12.39804338,12.40009887,12.40003452,12.39529123,12.35917481,12.35906246,12.36352424,12.37047371,12.3737316,12.39264511,12.39987233,12.40394262,12.4091928,12.42531067,12.43905525],"lat":[44.08866886,44.0681785,44.06761272,44.04768506,44.02975339,44.02752109,44.02054509,44.01296479,44.0107813,44.01724179,44.02950715,44.03293111,44.02600727,44.04577212,44.05542731,44.04915079,44.04294963,44.03572227,44.03024571,44.05182297,44.05422855,44.05720459,44.066031,44.06634725,44.06367987,44.06648074,44.07257134,44.07733706,44.08849685,44.08866886]}]],[[{"lng":[12.45156466,12.41404947,12.39779765,12.40644426,12.40776082,12.40755545,12.40602378,12.40528438,12.40514077,12.40619624,12.41012221,12.41289601,12.41631406,12.43641293,12.44308051,12.46270122,12.45973365,12.45497913,12.45469226,12.45156466],"lat":[43.96808092,43.95230187,43.96225644,43.97163329,43.97742786,43.97920305,43.98149499,43.98338967,43.9876343,43.98995257,43.99383261,44.00022725,44.01239587,44.03293111,44.01426532,44.00158984,43.99615487,43.99541059,43.99514823,43.96808092]}],[{"lng":[12.40196321,12.39446823,12.39196156,12.38926417,12.38892087,12.38886197,12.40454807,12.40835559,12.41768131,12.40196321],"lat":[43.89159244,43.89572516,43.89783029,43.90070596,43.90122361,43.90150623,43.90631172,43.90297162,43.89904893,43.89159244]}]],[[{"lng":[12.15110249,12.19934776,12.19421295,12.19595785,12.19748776,12.19766524,12.20064941,12.20055888,12.19463264,12.16404775,12.12357752,12.09619099,12.10058925,12.1040904,12.11273702,12.1308041,12.14946812,12.15110249],"lat":[43.83215099,43.77037553,43.75862608,43.74789495,43.74502511,43.74481138,43.74129022,43.74032041,43.73192431,43.76226149,43.7491507,43.76530394,43.7761566,43.79411722,43.79643411,43.82475929,43.83329454,43.83215099]}]],[[{"lng":[12.34992395,12.35276198,12.34737169,12.29991611,12.29607842,12.27819001,12.2985406,12.29085769,12.28642117,12.28621035,12.28615682,12.28655183,12.28691897,12.28759156,12.29024478,12.29049825,12.29488992,12.29511335,12.29550105,12.29574328,12.2945376,12.29472915,12.29508287,12.29529492,12.2955321,12.29728188,12.3101867,12.31579703,12.33182932,12.33840731,12.34114494,12.34517434,12.34992395],"lat":[43.87480927,43.87110223,43.86702001,43.84803684,43.84741846,43.85723823,43.87276296,43.87556858,43.87653818,43.87677833,43.87755863,43.88089189,43.88168259,43.88259503,43.88421116,43.88451896,43.89169373,43.89213293,43.89306705,43.89452305,43.8994645,43.90067888,43.90144743,43.90167988,43.90191612,43.90316202,43.91273233,43.91704397,43.90684489,43.88814703,43.88340112,43.87772599,43.87480927]}]],[[{"lng":[12.24864767,12.25474197,12.26266923,12.26107958,12.26531143,12.27326609,12.29794085,12.29728188,12.29529492,12.29472915,12.29574328,12.29511335,12.29049825,12.29024478,12.28938784,12.28759156,12.28691897,12.28615682,12.28642117,12.2985406,12.28204799,12.27819001,12.27374322,12.2732768,12.27377733,12.2748936,12.27458279,12.26535139,12.25680046,12.24349818,12.24220714,12.24201814,12.23595779,12.23808153,12.24816891,12.2465673,12.22957421,12.22073015,12.20358558,12.20361195,12.21908817,12.22236137,12.22223625,12.23479725,12.24864767],"lat":[43.91206502,43.91232539,43.9065784,43.89645942,43.89529859,43.89539488,43.90398927,43.90316202,43.90167988,43.90067888,43.89452305,43.89213293,43.88451896,43.88421116,43.8837947,43.88259503,43.88168259,43.87755863,43.87653818,43.87276296,43.86518511,43.85723823,43.85442184,43.85317479,43.85231865,43.85140433,43.85021584,43.84246303,43.84619149,43.84852388,43.85081132,43.85828024,43.87009766,43.87386374,43.88365158,43.89030987,43.89381692,43.89407579,43.91232121,43.9129269,43.90805634,43.90887577,43.91528955,43.91695828,43.91206502]}],[{"lng":[12.3547572,12.3101867,12.29985267,12.29476195,12.2953326,12.32282757,12.3547572],"lat":[43.94969139,43.91273233,43.91716842,43.9281896,43.92954971,43.96060115,43.94969139]}]],[[{"lng":[12.34682571,12.3354392,12.28472572,12.28378091,12.19748776,12.20061444,12.23726152,12.22425876,12.23210763,12.2344934,12.23585891,12.23707071,12.25181649,12.25926142,12.27458279,12.2732768,12.27374322,12.27443176,12.27776547,12.27819001,12.28515481,12.29607842,12.32685948,12.34737169,12.34682571],"lat":[43.86332677,43.82411863,43.79466793,43.76491721,43.74502511,43.77459409,43.78700399,43.80985925,43.81926274,43.82038358,43.8224111,43.82343461,43.82671132,43.8325716,43.85021584,43.85317479,43.85442184,43.85518086,43.85766456,43.85723823,43.85232041,43.84741846,43.86616118,43.86702001,43.86332677]}]],[[{"lng":[12.40174298,12.41250256,12.40835559,12.38892087,12.41768131,12.43213625,12.40060855,12.39248593,12.35276198,12.34517434,12.34114494,12.33496774,12.33182932,12.32667324,12.31587678,12.32107797,12.32397354,12.33023233,12.33786864,12.3458597,12.35305493,12.36721664,12.37186789,12.37498494,12.38143752,12.39779765,12.40174298],"lat":[43.95938128,43.90940411,43.90297162,43.90122361,43.89904893,43.87256944,43.87277485,43.89656388,43.87110223,43.87772599,43.88340112,43.90178359,43.90684489,43.91146526,43.91719021,43.9215765,43.92302272,43.92641896,43.93121056,43.93713911,43.9434551,43.96203611,43.9624935,43.96178158,43.95956352,43.96225644,43.95938128]}]],[[{"lng":[12.1734315,12.20319861,12.20389776,12.22073015,12.2465673,12.23595779,12.24220714,12.24349818,12.26535139,12.26237317,12.25943803,12.25926142,12.25559906,12.25272836,12.25181649,12.25145153,12.24478081,12.2391778,12.23707071,12.23700943,12.23210763,12.21802779,12.17654137,12.16976948,12.13825978,12.14313652,12.14300235,12.14215528,12.147716,12.15243524,12.16805073,12.15922921,12.1734315],"lat":[43.92421937,43.91648858,43.90822057,43.89407579,43.89030987,43.87009766,43.85081132,43.84852388,43.84246303,43.84008583,43.83284566,43.8325716,43.82926393,43.82724354,43.82671132,43.82663169,43.82756874,43.82474332,43.82343461,43.82339359,43.81926274,43.80278974,43.81054074,43.82256809,43.84764094,43.85314073,43.85852831,43.86233261,43.86703063,43.86864499,43.89755736,43.92141467,43.92421937]}]],[[{"lng":[12.27719323,12.28628669,12.29476195,12.3101867,12.29728188,12.27326609,12.26107958,12.26362899,12.26266923,12.25474197,12.25561786,12.27018674,12.27719323],"lat":[43.92547378,43.92955598,43.9281896,43.91273233,43.90316202,43.89539488,43.89645942,43.90528604,43.9065784,43.91232539,43.92034228,43.92870686,43.92547378]}]],[[{"lng":[12.41661227,12.41908965,12.42883089,12.426854,12.41760707,12.41631406,12.41528577,12.41012221,12.40619624,12.40556753,12.40514077,12.4050558,12.40528438,12.40755545,12.40776082,12.40778075,12.40644426,12.40617336,12.40278208,12.39779765,12.38812494,12.38143752,12.36721664,12.35632004,12.33692626,12.32282757,12.34653033,12.34775636,12.34782577,12.35079357,12.3513065,12.3528725,12.36340394,12.36942346,12.38572597,12.3849341,12.38512402,12.38835373,12.39529123,12.40003452,12.39804338,12.41661227],"lat":[44.05554653,44.05542731,44.04577212,44.02600727,44.01470692,44.01239587,44.01013094,43.99383261,43.98995257,43.98899001,43.9876343,43.98636744,43.98338967,43.97920305,43.97742786,43.9769051,43.97163329,43.97103818,43.96644882,43.96225644,43.95990537,43.95956352,43.96203611,43.94963795,43.96154685,43.96060115,43.97397748,43.97595457,43.97697798,43.98465588,43.98523952,43.98606231,43.98674725,43.98977473,44.00978731,44.01581572,44.02046455,44.02590546,44.03024571,44.03572227,44.04915079,44.05554653]}]],[[{"lng":[12.55877624,12.5621478,12.56664948,12.59921107,12.60564729,12.60725388,12.60887958,12.6038628,12.60428572,12.60081785,12.58684559,12.56719124,12.56043321,12.54817696,12.53586465,12.49279229,12.51545171,12.52809725,12.53564838,12.55877624],"lat":[43.94899698,43.9423422,43.94097271,43.94419974,43.94858351,43.95018927,43.94282754,43.93530664,43.92306919,43.91380035,43.91738688,43.91513099,43.9090265,43.90408749,43.89722224,43.9159332,43.9413144,43.93998336,43.940758,43.94899698]}]]],null,null,{"lineCap":null,"lineJoin":null,"clickable":true,"pointerEvents":null,"className":"","stroke":true,"color":"white","weight":2,"opacity":1,"fill":true,"fillColor":["#66BD63","#FFFFBF","#D9EF8B","#D9EF8B","#A6D96A","#FFFFBF","#D9EF8B","#D9EF8B","#A6D96A","#FFFFBF","#FFFFBF","#A6D96A","#A6D96A","#FFFFBF","#A6D96A","#A6D96A","#FFFFBF","#D9EF8B","#D9EF8B","#A6D96A","#FFFFBF","#66BD63","#FFFFBF","#D9EF8B","#FFFFBF","#1A9850","#FFFFBF","#D9EF8B","#D9EF8B","#1A9850","#FFFFBF","#FFFFBF","#1A9850","#D9EF8B","#A6D96A","#D9EF8B","#FFFFBF","#66BD63","#FFFFBF","#66BD63","#FFFFBF","#FFFFBF","#FFFFBF","#FFFFBF","#D9EF8B","#FFFFBF","#FEE08B","#D9EF8B","#FFFFBF","#A6D96A","#D9EF8B","#FFFFBF","#FFFFBF","#FFFFBF","#FFFFBF","#FFFFBF","#FEE08B","#FFFFBF","#D9EF8B","#FFFFBF","#D9EF8B","#A6D96A","#FFFFBF","#D9EF8B","#FEE08B","#D9EF8B","#FFFFBF","#FFFFBF","#FEE08B","#D9EF8B","#FEE08B","#FFFFBF","#FFFFBF","#66BD63","#D9EF8B","#FFFFBF","#FFFFBF","#FEE08B","#FEE08B","#FFFFBF","#D9EF8B","#D9EF8B","#FEE08B","#FEE08B","#FFFFBF","#FFFFBF","#FFFFBF","#D9EF8B","#A6D96A","#A6D96A","#A6D96A","#D9EF8B","#66BD63","#D9EF8B","#D9EF8B","#D9EF8B","#FFFFBF","#A6D96A","#FFFFBF","#D9EF8B","#FFFFBF","#FFFFBF","#A6D96A","#D9EF8B","#D9EF8B","#D9EF8B","#FFFFBF","#A6D96A","#D9EF8B","#FFFFBF","#D9EF8B","#D9EF8B","#FFFFBF","#D9EF8B","#D9EF8B","#FFFFBF","#FFFFBF","#D9EF8B","#D9EF8B","#A6D96A","#D9EF8B","#D9EF8B","#FFFFBF","#A6D96A","#FFFFBF","#A6D96A","#FFFFBF","#FFFFBF","#FFFFBF","#D9EF8B","#A6D96A","#A6D96A","#D9EF8B","#66BD63","#1A9850","#A6D96A","#A6D96A","#A6D96A","#D9EF8B","#D9EF8B","#D9EF8B","#FFFFBF","#A6D96A","#A6D96A","#A6D96A","#D9EF8B","#D9EF8B","#A6D96A","#D9EF8B","#66BD63","#A6D96A","#FFFFBF","#A6D96A","#D9EF8B","#1A9850","#D9EF8B","#D9EF8B","#FFFFBF","#A6D96A","#66BD63","#D9EF8B","#A6D96A","#D9EF8B","#D9EF8B","#FFFFBF","#D9EF8B","#D9EF8B","#D9EF8B","#A6D96A","#D9EF8B","#FFFFBF","#D9EF8B","#D9EF8B","#A6D96A","#A6D96A","#66BD63","#D9EF8B","#D9EF8B","#66BD63","#A6D96A","#A6D96A","#FFFFBF","#D9EF8B","#D9EF8B","#FFFFBF","#D9EF8B","#A6D96A","#66BD63","#FEE08B","#FFFFBF","#66BD63","#1A9850","#D9EF8B","#D9EF8B","#D9EF8B","#A6D96A","#A6D96A","#A6D96A","#1A9850","#D9EF8B","#D9EF8B","#D9EF8B","#D9EF8B","#A6D96A","#D9EF8B","#FFFFBF","#A6D96A","#D9EF8B","#66BD63","#FFFFBF","#FFFFBF","#A6D96A","#D9EF8B","#FFFFBF","#1A9850","#D9EF8B","#D9EF8B","#FFFFBF","#66BD63","#D9EF8B","#1A9850","#66BD63","#D9EF8B","#FFFFBF","#006837","#66BD63","#D9EF8B","#66BD63","#D9EF8B","#D9EF8B","#D9EF8B","#D9EF8B","#A6D96A","#1A9850","#66BD63","#D9EF8B","#A6D96A","#D9EF8B","#66BD63","#D9EF8B","#FDAE61","#66BD63","#1A9850","#A6D96A","#D9EF8B","#D9EF8B","#A6D96A","#D9EF8B","#1A9850","#A6D96A","#A6D96A","#006837","#A6D96A","#D9EF8B","#D9EF8B","#FFFFBF","#D9EF8B","#FFFFBF","#FFFFBF","#D9EF8B","#1A9850","#1A9850","#D9EF8B","#66BD63","#66BD63","#D9EF8B","#66BD63","#66BD63","#FFFFBF","#D9EF8B","#A6D96A","#A6D96A","#FFFFBF","#FFFFBF","#A6D96A","#A6D96A","#1A9850","#1A9850","#D9EF8B","#66BD63","#D9EF8B","#66BD63","#66BD63","#1A9850","#A6D96A","#66BD63","#66BD63","#66BD63","#A6D96A","#66BD63","#66BD63","#FFFFBF","#FFFFBF","#1A9850","#A6D96A","#1A9850","#66BD63","#FFFFBF","#D9EF8B","#FEE08B","#FEE08B","#FEE08B","#FEE08B","#FFFFBF","#FFFFBF","#FEE08B","#FFFFBF","#FFFFBF","#FFFFBF","#D9EF8B","#D9EF8B","#FFFFBF","#FFFFBF","#D9EF8B","#D9EF8B","#FFFFBF","#FFFFBF","#FFFFBF","#D9EF8B","#D9EF8B","#D9EF8B","#FFFFBF","#D9EF8B","#FEE08B","#FFFFBF","#FFFFBF","#A6D96A","#1A9850","#D9EF8B","#A6D96A","#006837","#A6D96A","#D9EF8B","#FFFFBF"],"fillOpacity":0.7,"dashArray":"3","smoothFactor":1,"noClip":false},["<h1>Comune di Agazzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">37.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.30 %<\/td><\/tr><\/table>","<h1>Comune di Alseno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">65.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.60 %<\/td><\/tr><\/table>","<h1>Comune di Besenzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.40 %<\/td><\/tr><\/table>","<h1>Comune di Bettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">24.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.80 %<\/td><\/tr><\/table>","<h1>Comune di Bobbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">19.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.30 %<\/td><\/tr><\/table>","<h1>Comune di Borgonovo Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">59.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.70 %<\/td><\/tr><\/table>","<h1>Comune di Cadeo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">64.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.90 %<\/td><\/tr><\/table>","<h1>Comune di Calendasco<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.20 %<\/td><\/tr><\/table>","<h1>Comune di Caminata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">11.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.60 %<\/td><\/tr><\/table>","<h1>Comune di Caorso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">70.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.40 %<\/td><\/tr><\/table>","<h1>Comune di Carpaneto Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">61.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.40 %<\/td><\/tr><\/table>","<h1>Comune di Castell'Arquato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.00 %<\/td><\/tr><\/table>","<h1>Comune di Castel San Giovanni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.00 %<\/td><\/tr><\/table>","<h1>Comune di Castelvetro Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">63.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.80 %<\/td><\/tr><\/table>","<h1>Comune di Cerignale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">17.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">7.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.10 %<\/td><\/tr><\/table>","<h1>Comune di Coli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">13.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.50 %<\/td><\/tr><\/table>","<h1>Comune di Corte Brugnatella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">7.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.90 %<\/td><\/tr><\/table>","<h1>Comune di Cortemaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.40 %<\/td><\/tr><\/table>","<h1>Comune di Farini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">14.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">15.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.10 %<\/td><\/tr><\/table>","<h1>Comune di Ferriere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">18.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">8.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">26.40 %<\/td><\/tr><\/table>","<h1>Comune di Fiorenzuola d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.20 %<\/td><\/tr><\/table>","<h1>Comune di Gazzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">26.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">53.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.20 %<\/td><\/tr><\/table>","<h1>Comune di Gossolengo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.30 %<\/td><\/tr><\/table>","<h1>Comune di Gragnano Trebbiense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.40 %<\/td><\/tr><\/table>","<h1>Comune di Gropparello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">28.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.90 %<\/td><\/tr><\/table>","<h1>Comune di Lugagnano Val d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">25.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.20 %<\/td><\/tr><\/table>","<h1>Comune di Monticelli d'Ongina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">71.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.50 %<\/td><\/tr><\/table>","<h1>Comune di Fontanellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">72.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.60 %<\/td><\/tr><\/table>","<h1>Comune di Fontevivo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">76.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">83.00 %<\/td><\/tr><\/table>","<h1>Comune di Fornovo di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">27.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.30 %<\/td><\/tr><\/table>","<h1>Comune di Langhirano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr><\/table>","<h1>Comune di Lesignano de' Bagni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">72.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.10 %<\/td><\/tr><\/table>","<h1>Comune di Medesano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">43.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr><\/table>","<h1>Comune di Mezzani<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">79.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.40 %<\/td><\/tr><\/table>","<h1>Comune di Monchio delle Corti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">32.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.40 %<\/td><\/tr><\/table>","<h1>Comune di Montechiarugolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">14.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">71.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">86.70 %<\/td><\/tr><\/table>","<h1>Comune di Neviano degli Arduini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-3.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.50 %<\/td><\/tr><\/table>","<h1>Comune di Noceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.20 %<\/td><\/tr><\/table>","<h1>Comune di Palanzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">55.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.30 %<\/td><\/tr><\/table>","<h1>Comune di Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.90 %<\/td><\/tr><\/table>","<h1>Comune di Pellegrino Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">24.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.80 %<\/td><\/tr><\/table>","<h1>Comune di Roccabianca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">82.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.10 %<\/td><\/tr><\/table>","<h1>Comune di Sala Baganza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">80.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">83.70 %<\/td><\/tr><\/table>","<h1>Comune di Salsomaggiore Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">57.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.40 %<\/td><\/tr><\/table>","<h1>Comune di San Secondo Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">78.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">86.30 %<\/td><\/tr><\/table>","<h1>Comune di Solignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">26.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.00 %<\/td><\/tr><\/table>","<h1>Comune di Soragna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-6.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">84.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.10 %<\/td><\/tr><\/table>","<h1>Comune di Sorbolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">74.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.30 %<\/td><\/tr><\/table>","<h1>Comune di Terenzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">23.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">27.30 %<\/td><\/tr><\/table>","<h1>Comune di Tizzano Val Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">34.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.60 %<\/td><\/tr><\/table>","<h1>Comune di Tornolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">22.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.20 %<\/td><\/tr><\/table>","<h1>Comune di Massa Lombarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">62.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.70 %<\/td><\/tr><\/table>","<h1>Comune di Ravenna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">54.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.20 %<\/td><\/tr><\/table>","<h1>Comune di Riolo Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-2.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">41.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.20 %<\/td><\/tr><\/table>","<h1>Comune di Russi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-2.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">57.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.30 %<\/td><\/tr><\/table>","<h1>Comune di Sant'Agata sul Santerno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">54.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.40 %<\/td><\/tr><\/table>","<h1>Comune di Solarolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-9.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">43.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.80 %<\/td><\/tr><\/table>","<h1>Comune di Bagno di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.40 %<\/td><\/tr><\/table>","<h1>Comune di Bertinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">69.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.30 %<\/td><\/tr><\/table>","<h1>Comune di Borghi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">16.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.30 %<\/td><\/tr><\/table>","<h1>Comune di Castrocaro Terme e Terra del Sole<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">31.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.00 %<\/td><\/tr><\/table>","<h1>Comune di Cesena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">15.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.20 %<\/td><\/tr><\/table>","<h1>Comune di Cesenatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.10 %<\/td><\/tr><\/table>","<h1>Comune di Civitella di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">28.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.80 %<\/td><\/tr><\/table>","<h1>Comune di Dovadola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-10.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.50 %<\/td><\/tr><\/table>","<h1>Comune di Forlì<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.20 %<\/td><\/tr><\/table>","<h1>Comune di Forlimpopoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-0.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">75.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.60 %<\/td><\/tr><\/table>","<h1>Comune di Galeata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">46.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.00 %<\/td><\/tr><\/table>","<h1>Comune di Gambettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-10.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.80 %<\/td><\/tr><\/table>","<h1>Comune di Gatteo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">35.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.00 %<\/td><\/tr><\/table>","<h1>Comune di Longiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-10.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">54.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.60 %<\/td><\/tr><\/table>","<h1>Comune di Meldola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.40 %<\/td><\/tr><\/table>","<h1>Comune di Mercato Saraceno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-4.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">39.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">34.60 %<\/td><\/tr><\/table>","<h1>Comune di Modigliana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">49.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.40 %<\/td><\/tr><\/table>","<h1>Comune di Montiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">24.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.10 %<\/td><\/tr><\/table>","<h1>Comune di Portico e San Benedetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.50 %<\/td><\/tr><\/table>","<h1>Comune di Predappio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-2.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">52.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.90 %<\/td><\/tr><\/table>","<h1>Comune di Premilcuore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-7.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">34.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">26.50 %<\/td><\/tr><\/table>","<h1>Comune di Rocca San Casciano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-10.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">59.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.10 %<\/td><\/tr><\/table>","<h1>Comune di Roncofreddo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">19.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.70 %<\/td><\/tr><\/table>","<h1>Comune di San Mauro Pascoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">52.30 %<\/td><\/tr><\/table>","<h1>Comune di Santa Sofia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">24.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.30 %<\/td><\/tr><\/table>","<h1>Comune di Sarsina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-6.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">26.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.90 %<\/td><\/tr><\/table>","<h1>Comune di Savignano sul Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-12.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">59.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.30 %<\/td><\/tr><\/table>","<h1>Comune di Sogliano al Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-3.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">15.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.50 %<\/td><\/tr><\/table>","<h1>Comune di Tredozio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-2.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">38.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.40 %<\/td><\/tr><\/table>","<h1>Comune di Verghereto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-2.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">21.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">19.30 %<\/td><\/tr><\/table>","<h1>Comune di Morfasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">19.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.80 %<\/td><\/tr><\/table>","<h1>Comune di Nibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">34.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.20 %<\/td><\/tr><\/table>","<h1>Comune di Ottone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">23.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">9.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.40 %<\/td><\/tr><\/table>","<h1>Comune di Pecorara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">18.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">12.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.40 %<\/td><\/tr><\/table>","<h1>Comune di Piacenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">50.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.90 %<\/td><\/tr><\/table>","<h1>Comune di Pianello Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">32.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">29.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.60 %<\/td><\/tr><\/table>","<h1>Comune di Piozzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">33.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.00 %<\/td><\/tr><\/table>","<h1>Comune di Podenzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">74.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.40 %<\/td><\/tr><\/table>","<h1>Comune di Ponte dell'Olio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.00 %<\/td><\/tr><\/table>","<h1>Comune di Pontenure<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">70.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.70 %<\/td><\/tr><\/table>","<h1>Comune di Rivergaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">23.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">45.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.80 %<\/td><\/tr><\/table>","<h1>Comune di Rottofreno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">69.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.50 %<\/td><\/tr><\/table>","<h1>Comune di San Giorgio Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.70 %<\/td><\/tr><\/table>","<h1>Comune di San Pietro in Cerro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">63.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.20 %<\/td><\/tr><\/table>","<h1>Comune di Sarmato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">70.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.10 %<\/td><\/tr><\/table>","<h1>Comune di Travo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">19.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">29.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.80 %<\/td><\/tr><\/table>","<h1>Comune di Vernasca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">16.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.50 %<\/td><\/tr><\/table>","<h1>Comune di Vigolzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">14.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">63.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.30 %<\/td><\/tr><\/table>","<h1>Comune di Villanova sull'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">61.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr><\/table>","<h1>Comune di Zerba<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">13.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.50 %<\/td><\/tr><\/table>","<h1>Comune di Ziano Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.50 %<\/td><\/tr><\/table>","<h1>Comune di Albareto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">16.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.60 %<\/td><\/tr><\/table>","<h1>Comune di Bardi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">24.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.00 %<\/td><\/tr><\/table>","<h1>Comune di Bedonia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">35.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.60 %<\/td><\/tr><\/table>","<h1>Comune di Berceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">39.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">49.70 %<\/td><\/tr><\/table>","<h1>Comune di Bore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-0.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">25.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.70 %<\/td><\/tr><\/table>","<h1>Comune di Borgo Val di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">22.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">27.80 %<\/td><\/tr><\/table>","<h1>Comune di Busseto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">79.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.10 %<\/td><\/tr><\/table>","<h1>Comune di Calestano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-0.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">64.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.00 %<\/td><\/tr><\/table>","<h1>Comune di Collecchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-2.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">75.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.00 %<\/td><\/tr><\/table>","<h1>Comune di Colorno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">72.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.20 %<\/td><\/tr><\/table>","<h1>Comune di Compiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">29.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.10 %<\/td><\/tr><\/table>","<h1>Comune di Corniglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">23.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">21.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.80 %<\/td><\/tr><\/table>","<h1>Comune di Felino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">79.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.30 %<\/td><\/tr><\/table>","<h1>Comune di Fidenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">65.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.10 %<\/td><\/tr><\/table>","<h1>Comune di Torrile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">71.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.80 %<\/td><\/tr><\/table>","<h1>Comune di Traversetolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr><\/table>","<h1>Comune di Valmozzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">24.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.10 %<\/td><\/tr><\/table>","<h1>Comune di Varano de' Melegari<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">43.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.20 %<\/td><\/tr><\/table>","<h1>Comune di Varsi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">27.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.30 %<\/td><\/tr><\/table>","<h1>Comune di Sissa Trecasali<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">81.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.20 %<\/td><\/tr><\/table>","<h1>Comune di Polesine Zibello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">NA %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.10 %<\/td><\/tr><\/table>","<h1>Comune di Albinea<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">67.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.60 %<\/td><\/tr><\/table>","<h1>Comune di Bagnolo in Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">57.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.20 %<\/td><\/tr><\/table>","<h1>Comune di Baiso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">18.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.90 %<\/td><\/tr><\/table>","<h1>Comune di Bibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.60 %<\/td><\/tr><\/table>","<h1>Comune di Boretto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">89.50 %<\/td><\/tr><\/table>","<h1>Comune di Brescello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">89.00 %<\/td><\/tr><\/table>","<h1>Comune di Cadelbosco di Sopra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">55.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.80 %<\/td><\/tr><\/table>","<h1>Comune di Campagnola Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">15.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.10 %<\/td><\/tr><\/table>","<h1>Comune di Campegine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">21.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">53.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.20 %<\/td><\/tr><\/table>","<h1>Comune di Carpineti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.80 %<\/td><\/tr><\/table>","<h1>Comune di Casalgrande<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">55.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.60 %<\/td><\/tr><\/table>","<h1>Comune di Casina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">37.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.10 %<\/td><\/tr><\/table>","<h1>Comune di Castellarano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">57.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.10 %<\/td><\/tr><\/table>","<h1>Comune di Castelnovo di Sotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">23.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">81.90 %<\/td><\/tr><\/table>","<h1>Comune di Castelnovo ne' Monti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">18.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">46.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr><\/table>","<h1>Comune di Cavriago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">70.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">90.80 %<\/td><\/tr><\/table>","<h1>Comune di Canossa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">55.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.80 %<\/td><\/tr><\/table>","<h1>Comune di Correggio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">69.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.20 %<\/td><\/tr><\/table>","<h1>Comune di Fabbrico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">18.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">62.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.80 %<\/td><\/tr><\/table>","<h1>Comune di Gattatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">14.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">69.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.10 %<\/td><\/tr><\/table>","<h1>Comune di Gualtieri<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">32.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">55.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">88.30 %<\/td><\/tr><\/table>","<h1>Comune di Guastalla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">64.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">89.30 %<\/td><\/tr><\/table>","<h1>Comune di Luzzara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.00 %<\/td><\/tr><\/table>","<h1>Comune di Montecchio Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">59.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr><\/table>","<h1>Comune di Novellara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr><\/table>","<h1>Comune di Poviglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">52.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">90.70 %<\/td><\/tr><\/table>","<h1>Comune di Quattro Castella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.50 %<\/td><\/tr><\/table>","<h1>Comune di Reggiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">57.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.80 %<\/td><\/tr><\/table>","<h1>Comune di Reggio nell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.60 %<\/td><\/tr><\/table>","<h1>Comune di Rio Saliceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">21.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.20 %<\/td><\/tr><\/table>","<h1>Comune di Rolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">27.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.70 %<\/td><\/tr><\/table>","<h1>Comune di Rubiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.30 %<\/td><\/tr><\/table>","<h1>Comune di San Martino in Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.30 %<\/td><\/tr><\/table>","<h1>Comune di San Polo d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">63.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.80 %<\/td><\/tr><\/table>","<h1>Comune di Sant'Ilario d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">62.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.60 %<\/td><\/tr><\/table>","<h1>Comune di Scandiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-0.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">63.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.20 %<\/td><\/tr><\/table>","<h1>Comune di Toano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">38.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.60 %<\/td><\/tr><\/table>","<h1>Comune di Vetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">43.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.00 %<\/td><\/tr><\/table>","<h1>Comune di Vezzano sul Crostolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.10 %<\/td><\/tr><\/table>","<h1>Comune di Viano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.70 %<\/td><\/tr><\/table>","<h1>Comune di Villa Minozzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">29.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.10 %<\/td><\/tr><\/table>","<h1>Comune di Ventasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">NA %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">43.00 %<\/td><\/tr><\/table>","<h1>Comune di Bastiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.30 %<\/td><\/tr><\/table>","<h1>Comune di Bomporto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">59.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.20 %<\/td><\/tr><\/table>","<h1>Comune di Campogalliano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.00 %<\/td><\/tr><\/table>","<h1>Comune di Camposanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">41.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.00 %<\/td><\/tr><\/table>","<h1>Comune di Carpi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">84.20 %<\/td><\/tr><\/table>","<h1>Comune di Castelfranco Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.60 %<\/td><\/tr><\/table>","<h1>Comune di Castelnuovo Rangone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.00 %<\/td><\/tr><\/table>","<h1>Comune di Castelvetro di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">49.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.50 %<\/td><\/tr><\/table>","<h1>Comune di Cavezzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">15.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.00 %<\/td><\/tr><\/table>","<h1>Comune di Concordia sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.60 %<\/td><\/tr><\/table>","<h1>Comune di Fanano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">35.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.40 %<\/td><\/tr><\/table>","<h1>Comune di Finale Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">50.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.70 %<\/td><\/tr><\/table>","<h1>Comune di Fiorano Modenese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">60.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.50 %<\/td><\/tr><\/table>","<h1>Comune di Fiumalbo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">35.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.60 %<\/td><\/tr><\/table>","<h1>Comune di Formigine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.00 %<\/td><\/tr><\/table>","<h1>Comune di Frassinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">17.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">19.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.60 %<\/td><\/tr><\/table>","<h1>Comune di Guiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">34.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.00 %<\/td><\/tr><\/table>","<h1>Comune di Lama Mocogno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-6.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">36.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.50 %<\/td><\/tr><\/table>","<h1>Comune di Maranello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">62.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.10 %<\/td><\/tr><\/table>","<h1>Comune di Marano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">26.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">49.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.70 %<\/td><\/tr><\/table>","<h1>Comune di Medolla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">52.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">91.90 %<\/td><\/tr><\/table>","<h1>Comune di Mirandola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.80 %<\/td><\/tr><\/table>","<h1>Comune di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.90 %<\/td><\/tr><\/table>","<h1>Comune di Montecreto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">14.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">15.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.50 %<\/td><\/tr><\/table>","<h1>Comune di Montefiorino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">19.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">29.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.40 %<\/td><\/tr><\/table>","<h1>Comune di Montese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">19.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">16.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.70 %<\/td><\/tr><\/table>","<h1>Comune di Nonantola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">62.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">83.20 %<\/td><\/tr><\/table>","<h1>Comune di Novi di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">54.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">90.70 %<\/td><\/tr><\/table>","<h1>Comune di Palagano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">24.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.90 %<\/td><\/tr><\/table>","<h1>Comune di Pavullo nel Frignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.70 %<\/td><\/tr><\/table>","<h1>Comune di Pievepelago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">33.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.30 %<\/td><\/tr><\/table>","<h1>Comune di Polinago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.40 %<\/td><\/tr><\/table>","<h1>Comune di Prignano sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.50 %<\/td><\/tr><\/table>","<h1>Comune di Ravarino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.10 %<\/td><\/tr><\/table>","<h1>Comune di Riolunato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">44.20 %<\/td><\/tr><\/table>","<h1>Comune di San Cesario sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">18.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.80 %<\/td><\/tr><\/table>","<h1>Comune di San Felice sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">50.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.40 %<\/td><\/tr><\/table>","<h1>Comune di San Possidonio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.30 %<\/td><\/tr><\/table>","<h1>Comune di San Prospero<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">46.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">50.80 %<\/td><\/tr><\/table>","<h1>Comune di Sassuolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.80 %<\/td><\/tr><\/table>","<h1>Comune di Savignano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.30 %<\/td><\/tr><\/table>","<h1>Comune di Serramazzoni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">38.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.20 %<\/td><\/tr><\/table>","<h1>Comune di Sestola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.60 %<\/td><\/tr><\/table>","<h1>Comune di Soliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">45.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">86.50 %<\/td><\/tr><\/table>","<h1>Comune di Spilamberto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">14.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.80 %<\/td><\/tr><\/table>","<h1>Comune di Vignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">45.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.70 %<\/td><\/tr><\/table>","<h1>Comune di Zocca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.30 %<\/td><\/tr><\/table>","<h1>Comune di Anzola dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">34.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.60 %<\/td><\/tr><\/table>","<h1>Comune di Argelato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.90 %<\/td><\/tr><\/table>","<h1>Comune di Baricella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">33.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.30 %<\/td><\/tr><\/table>","<h1>Comune di Bentivoglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.20 %<\/td><\/tr><\/table>","<h1>Comune di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">34.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.90 %<\/td><\/tr><\/table>","<h1>Comune di Borgo Tossignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-4.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">45.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.80 %<\/td><\/tr><\/table>","<h1>Comune di Budrio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">35.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.20 %<\/td><\/tr><\/table>","<h1>Comune di Calderara di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.80 %<\/td><\/tr><\/table>","<h1>Comune di Camugnano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">21.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.10 %<\/td><\/tr><\/table>","<h1>Comune di Casalecchio di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.80 %<\/td><\/tr><\/table>","<h1>Comune di Casalfiumanese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">52.20 %<\/td><\/tr><\/table>","<h1>Comune di Castel d'Aiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.50 %<\/td><\/tr><\/table>","<h1>Comune di Castel del Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.00 %<\/td><\/tr><\/table>","<h1>Comune di Castel di Casio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">13.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">27.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.10 %<\/td><\/tr><\/table>","<h1>Comune di Castel Guelfo di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">19.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">49.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.70 %<\/td><\/tr><\/table>","<h1>Comune di Castello d'Argile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">32.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.50 %<\/td><\/tr><\/table>","<h1>Comune di Castel Maggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">38.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.40 %<\/td><\/tr><\/table>","<h1>Comune di Castel San Pietro Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.00 %<\/td><\/tr><\/table>","<h1>Comune di Castenaso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr><\/table>","<h1>Comune di Castiglione dei Pepoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">26.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.90 %<\/td><\/tr><\/table>","<h1>Comune di Crevalcore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">27.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">49.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.60 %<\/td><\/tr><\/table>","<h1>Comune di Dozza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.20 %<\/td><\/tr><\/table>","<h1>Comune di Fontanelice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-18.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">59.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.10 %<\/td><\/tr><\/table>","<h1>Comune di Gaggio Montano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.90 %<\/td><\/tr><\/table>","<h1>Comune di Galliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">38.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.20 %<\/td><\/tr><\/table>","<h1>Comune di Granarolo dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.00 %<\/td><\/tr><\/table>","<h1>Comune di Grizzana Morandi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">14.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">23.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.80 %<\/td><\/tr><\/table>","<h1>Comune di Imola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.10 %<\/td><\/tr><\/table>","<h1>Comune di Lizzano in Belvedere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">21.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">27.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.60 %<\/td><\/tr><\/table>","<h1>Comune di Loiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.90 %<\/td><\/tr><\/table>","<h1>Comune di Malalbergo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">69.00 %<\/td><\/tr><\/table>","<h1>Comune di Marzabotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">17.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">41.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">59.20 %<\/td><\/tr><\/table>","<h1>Comune di Medicina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">21.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">63.60 %<\/td><\/tr><\/table>","<h1>Comune di Minerbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">51.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">19.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.10 %<\/td><\/tr><\/table>","<h1>Comune di Molinella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">18.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">33.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">51.20 %<\/td><\/tr><\/table>","<h1>Comune di Monghidoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">37.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.90 %<\/td><\/tr><\/table>","<h1>Comune di Monterenzio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">33.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.70 %<\/td><\/tr><\/table>","<h1>Comune di Monte San Pietro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">79.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">82.70 %<\/td><\/tr><\/table>","<h1>Comune di Monzuno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">41.30 %<\/td><\/tr><\/table>","<h1>Comune di Mordano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">62.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.60 %<\/td><\/tr><\/table>","<h1>Comune di Ozzano dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">45.00 %<\/td><\/tr><\/table>","<h1>Comune di Pianoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.50 %<\/td><\/tr><\/table>","<h1>Comune di Pieve di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">33.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.50 %<\/td><\/tr><\/table>","<h1>Comune di Sala Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.30 %<\/td><\/tr><\/table>","<h1>Comune di San Benedetto Val di Sambro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.30 %<\/td><\/tr><\/table>","<h1>Comune di San Giorgio di Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">32.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">46.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.30 %<\/td><\/tr><\/table>","<h1>Comune di San Giovanni in Persiceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">50.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">79.20 %<\/td><\/tr><\/table>","<h1>Comune di San Lazzaro di Savena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">5.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.10 %<\/td><\/tr><\/table>","<h1>Comune di San Pietro in Casale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">34.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">36.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">70.90 %<\/td><\/tr><\/table>","<h1>Comune di Sant'Agata Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">46.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">80.10 %<\/td><\/tr><\/table>","<h1>Comune di Sasso Marconi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">74.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.40 %<\/td><\/tr><\/table>","<h1>Comune di Vergato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">30.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.60 %<\/td><\/tr><\/table>","<h1>Comune di Zola Predosa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">46.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.80 %<\/td><\/tr><\/table>","<h1>Comune di Valsamoggia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">50.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">66.90 %<\/td><\/tr><\/table>","<h1>Comune di Alto Reno Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">NA %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.50 %<\/td><\/tr><\/table>","<h1>Comune di Argenta<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.50 %<\/td><\/tr><\/table>","<h1>Comune di Berra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">17.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">54.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.20 %<\/td><\/tr><\/table>","<h1>Comune di Bondeno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">20.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.90 %<\/td><\/tr><\/table>","<h1>Comune di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">37.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">73.30 %<\/td><\/tr><\/table>","<h1>Comune di Codigoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">39.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.30 %<\/td><\/tr><\/table>","<h1>Comune di Comacchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">40.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">51.80 %<\/td><\/tr><\/table>","<h1>Comune di Copparo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">43.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.00 %<\/td><\/tr><\/table>","<h1>Comune di Ferrara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.60 %<\/td><\/tr><\/table>","<h1>Comune di Formignana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.70 %<\/td><\/tr><\/table>","<h1>Comune di Jolanda di Savoia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">43.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">68.90 %<\/td><\/tr><\/table>","<h1>Comune di Lagosanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">41.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">78.50 %<\/td><\/tr><\/table>","<h1>Comune di Masi Torello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">49.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.00 %<\/td><\/tr><\/table>","<h1>Comune di Mesola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">33.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">41.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.50 %<\/td><\/tr><\/table>","<h1>Comune di Mirabello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">54.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">85.50 %<\/td><\/tr><\/table>","<h1>Comune di Ostellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">45.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.00 %<\/td><\/tr><\/table>","<h1>Comune di Poggio Renatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">23.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">75.50 %<\/td><\/tr><\/table>","<h1>Comune di Portomaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">34.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">76.20 %<\/td><\/tr><\/table>","<h1>Comune di Ro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">29.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.30 %<\/td><\/tr><\/table>","<h1>Comune di Sant'Agostino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.70 %<\/td><\/tr><\/table>","<h1>Comune di Vigarano Mainarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.60 %<\/td><\/tr><\/table>","<h1>Comune di Voghiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">37.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">39.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">77.40 %<\/td><\/tr><\/table>","<h1>Comune di Tresigallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">21.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">46.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">67.80 %<\/td><\/tr><\/table>","<h1>Comune di Goro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">33.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">74.60 %<\/td><\/tr><\/table>","<h1>Comune di Fiscaglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">28.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">44.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">72.40 %<\/td><\/tr><\/table>","<h1>Comune di Alfonsine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">57.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.90 %<\/td><\/tr><\/table>","<h1>Comune di Bagnacavallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.10 %<\/td><\/tr><\/table>","<h1>Comune di Bagnara di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-5.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">61.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.80 %<\/td><\/tr><\/table>","<h1>Comune di Brisighella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-9.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">39.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">30.60 %<\/td><\/tr><\/table>","<h1>Comune di Casola Valsenio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-15.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">53.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">38.20 %<\/td><\/tr><\/table>","<h1>Comune di Castel Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-6.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">42.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.10 %<\/td><\/tr><\/table>","<h1>Comune di Cervia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-3.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">50.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">46.90 %<\/td><\/tr><\/table>","<h1>Comune di Conselice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-3.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">61.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.20 %<\/td><\/tr><\/table>","<h1>Comune di Cotignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-5.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">61.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.70 %<\/td><\/tr><\/table>","<h1>Comune di Faenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">51.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">50.00 %<\/td><\/tr><\/table>","<h1>Comune di Fusignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">58.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.10 %<\/td><\/tr><\/table>","<h1>Comune di Lugo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">4.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">56.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.40 %<\/td><\/tr><\/table>","<h1>Comune di Bellaria-Igea Marina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">45.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">58.00 %<\/td><\/tr><\/table>","<h1>Comune di Cattolica<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">43.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">55.90 %<\/td><\/tr><\/table>","<h1>Comune di Coriano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">67.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.60 %<\/td><\/tr><\/table>","<h1>Comune di Gemmano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">2.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">34.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">36.60 %<\/td><\/tr><\/table>","<h1>Comune di Misano Adriatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">6.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">54.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">60.50 %<\/td><\/tr><\/table>","<h1>Comune di Mondaino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">34.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">42.50 %<\/td><\/tr><\/table>","<h1>Comune di Montefiore Conca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">1.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">45.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">47.20 %<\/td><\/tr><\/table>","<h1>Comune di Montegridolfo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">3.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">51.30 %<\/td><\/tr><\/table>","<h1>Comune di Morciano di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-3.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">68.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">65.20 %<\/td><\/tr><\/table>","<h1>Comune di Riccione<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">8.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">47.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">56.20 %<\/td><\/tr><\/table>","<h1>Comune di Rimini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">11.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">50.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">62.00 %<\/td><\/tr><\/table>","<h1>Comune di Saludecio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">9.30 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">48.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">57.50 %<\/td><\/tr><\/table>","<h1>Comune di San Clemente<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-2.40 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">66.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.40 %<\/td><\/tr><\/table>","<h1>Comune di San Giovanni in Marignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">10.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">61.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.10 %<\/td><\/tr><\/table>","<h1>Comune di Santarcangelo di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-7.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">71.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">64.50 %<\/td><\/tr><\/table>","<h1>Comune di Verucchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-1.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">62.90 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">61.30 %<\/td><\/tr><\/table>","<h1>Comune di Casteldelci<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">-4.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">39.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">35.10 %<\/td><\/tr><\/table>","<h1>Comune di Maiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">16.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">15.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">31.80 %<\/td><\/tr><\/table>","<h1>Comune di Novafeltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">40.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">13.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">54.00 %<\/td><\/tr><\/table>","<h1>Comune di Pennabilli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">12.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">13.20 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">25.70 %<\/td><\/tr><\/table>","<h1>Comune di San Leo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">24.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">7.60 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">32.40 %<\/td><\/tr><\/table>","<h1>Comune di Sant'Agata Feltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">48.80 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">5.10 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.90 %<\/td><\/tr><\/table>","<h1>Comune di Talamello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">22.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">16.50 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">39.20 %<\/td><\/tr><\/table>","<h1>Comune di Poggio Torriana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">7.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">64.70 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">71.70 %<\/td><\/tr><\/table>","<h1>Comune di Montescudo - Monte Colombo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>differenza RD 2010-2016<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2010<\/b><\/td><td style=\"padding:10px;text-align:right\">NA %<\/td><\/tr>\n <tr><td style=\"padding:10px;text-align:left\"><b>RD 2016<\/b><\/td><td style=\"padding:10px;text-align:right\">53.00 %<\/td><\/tr><\/table>"],null,null,null,null]},{"method":"addTiles","args":["//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",null,null,{"minZoom":0,"maxZoom":18,"maxNativeZoom":null,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"continuousWorld":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":1,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false,"attribution":"© <a href=\"http://openstreetmap.org\">OpenStreetMap<\/a> contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA<\/a>"}]},{"method":"addLegend","args":[{"colors":["#A50026","#D73027","#F46D43","#FDAE61","#FEE08B","#FFFFBF","#D9EF8B","#A6D96A","#66BD63","#1A9850","#006837"],"labels":["-55 – -45%","-45 – -35%","-35 – -25%","-25 – -15%","-15 – -5%","-5 – 5%","5 – 15%","15 – 25%","25 – 35%","35 – 45%","45 – 55%"],"na_color":null,"na_label":"NA","opacity":1,"position":"bottomright","type":"bin","title":"Scostamento RD 2010-2016","extra":null,"layerId":null,"className":"info legend"}]}],"limits":{"lat":[43.73192431,45.13758885],"lng":[9.19939175,12.75564003]}},"evals":[],"jsHooks":[]}</script>
</div>
<div id="composizione-della-raccolta" class="section level2">
<h2>Composizione della raccolta</h2>
<p>La raccolta viene effettuata in vari modi:</p>
<ul>
<li>Porta a porta</li>
<li>Con contenitori stradali</li>
<li>A chiamata</li>
<li>Con Ecomobile</li>
<li>Nei Centri di Raccolta</li>
</ul>
<div id="5c311eaf3958" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="5c311eaf3958">{"x":{"data":[{"orientation":"v","width":[0.9,0.9],"base":[0.81642976461287,0.804758680600922],"x":[1,2],"y":[0.18357023538713,0.195241319399078],"text":["factor(Anno): 2015<br />value: 0.1835702354<br />variable: PaP","factor(Anno): 2016<br />value: 0.1952413194<br />variable: PaP"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(248,118,109,1)","line":{"width":1.88976377952756,"color":"transparent"}},"name":"PaP","legendgroup":"PaP","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"orientation":"v","width":[0.9,0.9],"base":[0.327724285527095,0.33306538312953],"x":[1,2],"y":[0.488705479085775,0.471693297471392],"text":["factor(Anno): 2015<br />value: 0.4887054791<br />variable: Contenitori Stradali","factor(Anno): 2016<br />value: 0.4716932975<br />variable: Contenitori Stradali"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(183,159,0,1)","line":{"width":1.88976377952756,"color":"transparent"}},"name":"Contenitori Stradali","legendgroup":"Contenitori Stradali","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"orientation":"v","width":[0.9,0.9],"base":[0.178569889715115,0.200356286065167],"x":[1,2],"y":[0.14915439581198,0.132709097064363],"text":["factor(Anno): 2015<br />value: 0.1491543958<br />variable: Altro","factor(Anno): 2016<br />value: 0.1327090971<br />variable: Altro"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(0,186,56,1)","line":{"width":1.88976377952756,"color":"transparent"}},"name":"Altro","legendgroup":"Altro","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"orientation":"v","width":[0.9,0.9],"base":[0.178569889715115,0.175726972981204],"x":[1,2],"y":[0,0.0246293130839627],"text":["factor(Anno): 2015<br />value: 0.0000000000<br />variable: Chiamata","factor(Anno): 2016<br />value: 0.0246293131<br />variable: Chiamata"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(0,191,196,1)","line":{"width":1.88976377952756,"color":"transparent"}},"name":"Chiamata","legendgroup":"Chiamata","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"orientation":"v","width":[0.9,0.9],"base":[0.178569889715115,0.175425170421303],"x":[1,2],"y":[0,0.000301802559901032],"text":["factor(Anno): 2015<br />value: 0.0000000000<br />variable: Ecomobile","factor(Anno): 2016<br />value: 0.0003018026<br />variable: Ecomobile"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(97,156,255,1)","line":{"width":1.88976377952756,"color":"transparent"}},"name":"Ecomobile","legendgroup":"Ecomobile","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"orientation":"v","width":[0.9,0.9],"base":[0,0],"x":[1,2],"y":[0.178569889715115,0.175425170421303],"text":["factor(Anno): 2015<br />value: 0.1785698897<br />variable: Centri di Raccolta","factor(Anno): 2016<br />value: 0.1754251704<br />variable: Centri di Raccolta"],"type":"bar","marker":{"autocolorscale":false,"color":"rgba(245,100,227,1)","line":{"width":1.88976377952756,"color":"transparent"}},"name":"Centri di Raccolta","legendgroup":"Centri di Raccolta","showlegend":true,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":26.2283105022831,"r":7.30593607305936,"b":40.1826484018265,"l":48.9497716894977},"plot_bgcolor":"rgba(235,235,235,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[0.4,2.6],"tickmode":"array","ticktext":["2015","2016"],"tickvals":[1,2],"categoryorder":"array","categoryarray":["2015","2016"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Anno","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-0.05,1.05],"tickmode":"array","ticktext":["0%","25%","50%","75%","100%"],"tickvals":[0,0.25,0.5,0.75,1],"categoryorder":"array","categoryarray":["0%","25%","50%","75%","100%"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Tot Rifiuti Urbani (ton)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":true,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895},"y":0.913385826771654},"annotations":[{"text":"Rifiuti Urbani (ton)","x":1.02,"y":1,"showarrow":false,"ax":0,"ay":0,"font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xref":"paper","yref":"paper","textangle":-0,"xanchor":"left","yanchor":"bottom","legendTitle":true}],"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"5c316974594f":{"x":{},"y":{},"fill":{},"type":"bar"}},"cur_data":"5c316974594f","visdat":{"5c316974594f":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1}},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":{"render":[{"code":"function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1}}); }","data":null}]}}</script>
<div id="il-porta-a-porta" class="section level3">
<h3>Il Porta-a-Porta</h3>
<p>Distribuzione comunale della percentuale della raccolta Porta-a-Porta nel 2015</p>
<div id="htmlwidget-0c859c7f7862fd4b6fe6" style="width:672px;height:480px;" class="leaflet html-widget"></div>
<script type="application/json" data-for="htmlwidget-0c859c7f7862fd4b6fe6">{"x":{"options":{"crs":{"crsClass":"L.CRS.EPSG3857","code":null,"proj4def":null,"projectedBounds":null,"options":{}}},"calls":[{"method":"addPolygons","args":[[[[{"lng":[9.51130347,9.54849497,9.5310562,9.51725739,9.51614955,9.50931643,9.5078398,9.5026311,9.48891474,9.48897744,9.46335405,9.45811599,9.45488877,9.46236501,9.49951447,9.51088791,9.51130347],"lat":[45.00105721,44.97908211,44.94478621,44.93263388,44.93204478,44.92889777,44.92813917,44.92808119,44.93940219,44.94557726,44.9540379,44.96013533,44.96088639,44.98084958,45.00075381,45.01193781,45.00105721]}]],[[{"lng":[9.98821663,9.97940214,9.98740878,9.99912449,9.99828044,9.99262103,9.99391349,10.01089591,10.00947845,10.00325577,9.99463695,9.98350793,9.98433171,9.98668165,9.96510051,9.96268495,9.9551772,9.94849146,9.91911371,9.92424189,9.89260137,9.89019873,9.89507874,9.90485033,9.91498157,9.91831397,9.93326052,9.94680842,9.95586966,9.96022792,9.96630448,9.96653637,9.96933739,9.97402469,9.97563147,9.99057746,9.98821663],"lat":[44.94855966,44.9371221,44.93593178,44.92918255,44.92654337,44.914314,44.90771329,44.87564305,44.87422426,44.87238867,44.86738692,44.85759904,44.85172257,44.84556288,44.83608805,44.83614445,44.84042049,44.83771313,44.85766755,44.86879808,44.89149133,44.90074617,44.89934871,44.90136917,44.90046926,44.89657164,44.89433499,44.90803256,44.91514965,44.92352094,44.94132958,44.94155266,44.94079076,44.94364951,44.9502072,44.95241903,44.94855966]}]],[[{"lng":[9.997304,10.03102302,10.02866075,10.01607095,10.00778096,10.00442041,9.98740878,9.99057746,9.97998881,9.97563147,9.97314246,9.97425758,9.92885151,9.94561733,9.997304],"lat":[45.00114174,44.98383775,44.98083441,44.97393465,44.96982225,44.96836653,44.93593178,44.95241903,44.94851353,44.9502072,44.94994938,44.9589148,44.96262387,44.99089698,45.00114174]}]],[[{"lng":[9.57143265,9.61186792,9.62797083,9.65901338,9.66299561,9.66368911,9.66446982,9.66947098,9.68425722,9.68359738,9.68137735,9.68055996,9.67994926,9.67995471,9.68093236,9.68067719,9.67900767,9.65943105,9.6509071,9.6514085,9.66284578,9.66559425,9.66789753,9.67021068,9.66111257,9.64672963,9.63938917,9.62771448,9.62014137,9.61326247,9.59784905,9.58503789,9.57101088,9.57680691,9.57934796,9.57406685,9.5679421,9.5434727,9.53924631,9.53254624,9.52257782,9.50187461,9.50116318,9.50302451,9.50618698,9.50615519,9.49749785,9.49830183,9.51320519,9.51381271,9.51939495,9.53068631,9.53517169,9.53966066,9.54481419,9.55043282,9.55503421,9.55919878,9.55834198,9.57143265],"lat":[44.83782725,44.83534023,44.8199582,44.8236182,44.82673689,44.82764208,44.83063524,44.83318065,44.82972622,44.82634537,44.823658,44.82191645,44.81407923,44.81346705,44.81057154,44.80392946,44.79958235,44.78257492,44.76641985,44.75706368,44.74296335,44.74030971,44.73921245,44.73537646,44.72277229,44.71703916,44.71888997,44.72646264,44.72546875,44.72218405,44.7262538,44.72309733,44.73097331,44.73599446,44.74256224,44.74499251,44.74129621,44.75850155,44.75646006,44.74778633,44.74202593,44.74633185,44.74879258,44.7507469,44.76614924,44.76639695,44.7721334,44.79067444,44.79051841,44.79059669,44.79844834,44.79852246,44.80229146,44.80909397,44.80845735,44.80488356,44.80342094,44.80388674,44.82779163,44.83782725]}]],[[{"lng":[9.47495487,9.47688957,9.47763573,9.47989254,9.4685394,9.46893451,9.45118105,9.44613728,9.44233247,9.4376896,9.43546501,9.4338203,9.4327003,9.41458061,9.43940376,9.44626723,9.40616679,9.40037633,9.4000628,9.40985596,9.40412696,9.40035283,9.39870411,9.39850832,9.39830786,9.39222728,9.3796218,9.35513748,9.34780391,9.33258079,9.32854716,9.28589944,9.32152808,9.35419431,9.36309823,9.36780556,9.36878179,9.3713794,9.37396196,9.3767442,9.37788388,9.37995024,9.3806361,9.38752212,9.39722527,9.3980627,9.39907599,9.40222798,9.41134601,9.41552174,9.42008708,9.42103947,9.42963857,9.43070359,9.44537432,9.44628586,9.44721106,9.44789634,9.44888315,9.47495487],"lat":[44.84490381,44.84321235,44.84163387,44.83151503,44.81835603,44.80955933,44.80143887,44.8032411,44.81332933,44.81145677,44.80825151,44.80477393,44.80380593,44.79632906,44.78571297,44.77744934,44.7670574,44.74651673,44.73585915,44.72762335,44.72459198,44.72663979,44.72928322,44.73019315,44.7304279,44.73512113,44.73882764,44.73986065,44.74278196,44.73504035,44.73606027,44.75942783,44.80003204,44.81186328,44.82240383,44.82536847,44.82571641,44.82641016,44.82672581,44.82661764,44.82680292,44.82748022,44.82790103,44.83988672,44.84520963,44.84553978,44.84568029,44.84584928,44.84508763,44.84684591,44.85168135,44.85212794,44.85466151,44.85491856,44.85524937,44.85529084,44.85545825,44.85569863,44.85727911,44.84490381]}],[{"lng":[9.48099204,9.48052555,9.48010248,9.48016569,9.4821116,9.48193514,9.48155359,9.48099204],"lat":[44.83014207,44.83014404,44.83032587,44.83127081,44.83090253,44.83040817,44.83016672,44.83014207]}]],[[{"lng":[9.50668711,9.52087886,9.52884409,9.53424656,9.53368861,9.53036686,9.52929976,9.53473271,9.53283315,9.50939575,9.50479506,9.49951447,9.46332169,9.46236501,9.46045051,9.45939059,9.449173,9.44060995,9.43286447,9.40158675,9.40047391,9.40144139,9.4182468,9.42150901,9.4220457,9.42557047,9.42545362,9.41453933,9.41873194,9.48778008,9.48840252,9.48920505,9.49068548,9.49739961,9.500302,9.50355858,9.50668711],"lat":[45.04625794,45.04216129,45.03882102,45.03704952,45.03575588,45.03615843,45.03600135,45.02943622,45.02308982,45.01146288,45.00852171,45.00075381,44.98152087,44.98084958,44.979354,44.97844909,44.9693348,44.96423037,44.95406751,44.9683328,44.97059619,44.97112389,44.97496141,44.97708287,44.97763001,44.98263098,45.00472392,45.00550029,45.03121997,45.03527704,45.03540941,45.03573005,45.03663288,45.04244601,45.04630408,45.04697391,45.04625794]}]],[[{"lng":[9.86608404,9.9007028,9.8682944,9.86583672,9.86033844,9.85438178,9.84778366,9.84643429,9.84239226,9.84484485,9.8384588,9.82643191,9.80937256,9.81319714,9.82284929,9.81688337,9.80895486,9.8117291,9.81174822,9.81072238,9.81136175,9.83365345,9.84894251,9.86608404],"lat":[45.0078655,44.99523987,44.95340531,44.93581617,44.93340918,44.93339089,44.93482634,44.93501641,44.93853906,44.94762192,44.95042358,44.95066429,44.94462014,44.95066026,44.95633436,44.95940183,44.96180778,44.96881858,44.97376949,44.98376887,44.98593379,45.00988021,45.01659097,45.0078655]}]],[[{"lng":[9.63366875,9.63182778,9.67689296,9.67179083,9.6611495,9.65431152,9.64480396,9.64361493,9.64312883,9.64258994,9.63355863,9.57545086,9.57158695,9.55744662,9.53721564,9.55299541,9.58744699,9.61896546,9.63366875],"lat":[45.12913592,45.08676767,45.07760824,45.0726364,45.07192434,45.07051445,45.06664377,45.06595734,45.06565401,45.06517095,45.0559676,45.07023691,45.0994129,45.10750332,45.1260537,45.13064425,45.09962499,45.13354785,45.12913592]}]],[[{"lng":[9.31473275,9.31241678,9.31201249,9.30950524,9.2988341,9.28954634,9.29446007,9.30375977,9.31213576,9.31459708,9.31473275],"lat":[44.91208192,44.9057959,44.90569798,44.90584883,44.90968509,44.90924992,44.92303741,44.91889914,44.91442957,44.91275745,44.91208192]}],[{"lng":[9.30465602,9.29128997,9.28634581,9.29960399,9.30564301,9.30465602],"lat":[44.93265177,44.92507098,44.93395042,44.9347356,44.93396342,44.93265177]}]],[[{"lng":[9.84759674,9.88446455,9.91053777,9.90631807,9.89755196,9.89702115,9.89217245,9.87593163,9.86722589,9.85515446,9.84593661,9.84130954,9.80182827,9.79750955,9.80212211,9.80789672,9.80879775,9.80935076,9.81171288,9.81701232,9.8202497,9.83127547,9.83258242,9.84759674],"lat":[45.09650368,45.06676743,45.05844292,45.04860154,45.04346775,45.033876,45.02739667,45.03286947,45.01962223,45.02465527,45.02189736,45.01969009,45.03349955,45.03527145,45.04828273,45.05076253,45.05072015,45.05031114,45.04672968,45.04703394,45.04787491,45.05776466,45.09092655,45.09650368]}]],[[{"lng":[9.81688337,9.82284929,9.82153374,9.81766789,9.81319714,9.80937256,9.82643191,9.84484485,9.84239226,9.84778366,9.84527989,9.85014994,9.85069832,9.85043699,9.84486068,9.83475212,9.79698343,9.7857624,9.78193422,9.77685429,9.76578624,9.75563094,9.7503578,9.77001533,9.76795178,9.764038,9.76063632,9.75394379,9.73717654,9.73207677,9.75258092,9.75776565,9.76299154,9.78438619,9.79357152,9.7944576,9.7957968,9.79616349,9.80052849,9.80117635,9.81688337],"lat":[44.95940183,44.95633436,44.95387731,44.95214967,44.95066026,44.94462014,44.95066429,44.94762192,44.93853906,44.93482634,44.92803045,44.92143186,44.91480232,44.91426414,44.90894034,44.90611604,44.84431672,44.83893022,44.8402708,44.84639989,44.84576348,44.8307166,44.83185861,44.85451208,44.86684082,44.86762325,44.86404512,44.87012989,44.86962722,44.87476419,44.88794492,44.89414904,44.92635939,44.93976241,44.94317369,44.94308652,44.94277112,44.94270555,44.94213492,44.94223841,44.95940183]}]],[[{"lng":[9.87835114,9.89019873,9.92424189,9.90901028,9.92022574,9.90823856,9.86381862,9.86302176,9.86285739,9.86251992,9.8480273,9.84128318,9.83093003,9.83060839,9.83149518,9.82937516,9.82275713,9.82467993,9.81585697,9.83570122,9.83456685,9.83467911,9.83475212,9.83492596,9.83720096,9.84486068,9.85212177,9.85937181,9.87835114],"lat":[44.90291737,44.90074617,44.86879808,44.85061261,44.84092353,44.83497008,44.83070565,44.82986548,44.82732813,44.82675454,44.82098469,44.82603075,44.84499114,44.8465585,44.85470291,44.85656297,44.85664684,44.86012578,44.86811998,44.89534268,44.90551426,44.90599505,44.90611604,44.90631281,44.90792552,44.90894034,44.90310711,44.90938118,44.90291737]}]],[[{"lng":[9.4815741,9.47969833,9.48263648,9.47520873,9.47351662,9.47189918,9.46027722,9.45675613,9.45095242,9.44324999,9.41873194,9.41589365,9.40407522,9.40152442,9.36944768,9.37081994,9.41077773,9.4815741],"lat":[45.0937788,45.07882584,45.06297317,45.06223732,45.06269349,45.06207006,45.04761564,45.03768279,45.0401812,45.04074508,45.03121997,45.0188361,45.02382052,45.02559387,45.02372624,45.04815367,45.08275458,45.0937788]}]],[[{"lng":[9.97833635,10.02738823,10.02164955,10.03967154,10.00770094,9.99407801,9.99037825,9.98810347,9.96888497,9.96296699,9.95292467,9.95334767,9.95759279,9.96173162,9.96295819,9.96291948,9.96127346,9.96166795,9.9696506,9.97644994,9.96641607,9.97833635],"lat":[45.13373511,45.09764869,45.07588899,45.06225521,45.06365803,45.05302032,45.05560027,45.05628937,45.05544229,45.05621249,45.06101365,45.07041696,45.07435121,45.07645885,45.07914003,45.07986048,45.08620654,45.08949716,45.10410222,45.11078246,45.12747244,45.13373511]}]],[[{"lng":[9.36631689,9.38624462,9.38617638,9.39805704,9.40635433,9.40250606,9.40273962,9.37068207,9.37524635,9.37663159,9.37554509,9.35671778,9.33121292,9.32654783,9.32453091,9.32373594,9.32171538,9.31890926,9.31483315,9.3057747,9.29850587,9.36631689],"lat":[44.69001558,44.67118907,44.66170523,44.65802746,44.63797688,44.62300594,44.6166764,44.61717655,44.62928345,44.63879446,44.64041848,44.65427052,44.66425898,44.66577581,44.66588958,44.66584683,44.66544743,44.66426699,44.66381018,44.66564426,44.68102155,44.69001558]}]],[[{"lng":[9.50457469,9.51013108,9.51624284,9.49830183,9.49749785,9.50618698,9.50302451,9.4681667,9.46311933,9.46977193,9.46434487,9.46372169,9.47217792,9.45538968,9.44734537,9.42368751,9.41751358,9.40089891,9.40985596,9.40616679,9.44626723,9.41458061,9.4327003,9.4338203,9.4376896,9.44233247,9.44613728,9.44750643,9.45118105,9.45199472,9.46893451,9.4685394,9.47920544,9.49837297,9.50457469],"lat":[44.81933678,44.80318924,44.79517685,44.79067444,44.7721334,44.76614924,44.7507469,44.74568281,44.73687216,44.72552012,44.71640499,44.71425598,44.70151004,44.69662695,44.69276072,44.70910915,44.71076131,44.71428672,44.72762335,44.7670574,44.77744934,44.79632906,44.80380593,44.80477393,44.81145677,44.81332933,44.8032411,44.80206548,44.80143887,44.80139965,44.80955933,44.81835603,44.81729455,44.8209664,44.81933678]}]],[[{"lng":[9.35454606,9.37726204,9.3796218,9.39222728,9.40089891,9.44734537,9.41710252,9.39322099,9.38952545,9.38647141,9.38624462,9.37191476,9.36735282,9.36631689,9.36633188,9.36317925,9.30943511,9.31258182,9.32591046,9.32957528,9.33258079,9.33485793,9.34780391,9.35454606],"lat":[44.74022259,44.73915956,44.73882764,44.73512113,44.71428672,44.69276072,44.68340471,44.68231912,44.6799311,44.67300672,44.67118907,44.67931169,44.68619526,44.69001558,44.69042991,44.69278931,44.70234602,44.71710124,44.72309553,44.72806327,44.73504035,44.7386166,44.74278196,44.74022259]}],[{"lng":[9.29534259,9.30055988,9.3026008,9.28986246,9.29534259],"lat":[44.70494899,44.70436527,44.70326456,44.70082197,44.70494899]}],[{"lng":[9.30022428,9.29893978,9.30420301,9.30412176,9.30022428],"lat":[44.69246735,44.69372283,44.69655519,44.69369829,44.69246735]}]],[[{"lng":[9.88749854,9.88393778,9.8814558,9.88125811,9.90762024,9.9326514,9.93429038,9.9317396,9.92893764,9.94794766,9.97542819,9.98922918,9.9908842,9.997304,9.94561733,9.94848991,9.94193825,9.94079792,9.93848073,9.92885151,9.92525028,9.92490939,9.92548507,9.9185732,9.91542398,9.91312831,9.91066704,9.90813078,9.90175401,9.90287844,9.90716962,9.91193187,9.89523985,9.9007028,9.86997691,9.84894251,9.83365345,9.84593661,9.85515446,9.86722589,9.87134149,9.87593163,9.88749854],"lat":[45.02558773,45.01938608,45.01809999,45.01762442,45.00968537,45.0233825,45.02191982,45.01803387,45.01193543,45.005766,45.01001749,45.01705521,45.00410522,45.00114174,44.99089698,44.98817352,44.9797553,44.97982771,44.97773134,44.96262387,44.96103275,44.96021216,44.95877167,44.96086668,44.97627157,44.97697368,44.96890964,44.96810166,44.97275665,44.97359845,44.97469869,44.97946858,44.98419519,44.99523987,44.99678163,45.01659097,45.00988021,45.02189736,45.02465527,45.01962223,45.0215173,45.03286947,45.02558773]}]],[[{"lng":[9.54369919,9.5679421,9.57934796,9.57101088,9.58503789,9.61326247,9.62014137,9.62709791,9.62771448,9.62864559,9.63756781,9.63938917,9.64367757,9.64672963,9.65229747,9.65447955,9.66182134,9.66265411,9.6645641,9.66570419,9.66762784,9.66988105,9.67521222,9.66298803,9.65355534,9.63503128,9.6248772,9.63179549,9.60217492,9.56494977,9.52727735,9.51075193,9.51101594,9.51018285,9.50948551,9.49968836,9.49201211,9.46904612,9.47217792,9.46372169,9.46977193,9.46339665,9.46311933,9.46706255,9.4681667,9.47680134,9.48220367,9.50150325,9.50116318,9.50106994,9.50187461,9.50311427,9.51002494,9.52189399,9.52257782,9.53254624,9.53812388,9.53889918,9.53924631,9.54082718,9.54300491,9.5434727,9.54369919],"lat":[44.75840145,44.74129621,44.74256224,44.73097331,44.72309733,44.72218405,44.72546875,44.72652004,44.72646264,44.7260074,44.72089865,44.71888997,44.71734448,44.71703916,44.71815079,44.71123354,44.70630298,44.70627115,44.70550385,44.70475002,44.70298333,44.70025144,44.68761677,44.68022544,44.67172757,44.66328882,44.65626895,44.64061171,44.6294917,44.69601149,44.69622764,44.6900101,44.68001209,44.67837261,44.67798863,44.67727571,44.67817326,44.69976751,44.70151004,44.71425598,44.72552012,44.72889502,44.73687216,44.74503917,44.74568281,44.74498991,44.74297773,44.74940325,44.74879258,44.74823485,44.74633185,44.74507509,44.74231673,44.74183101,44.74202593,44.74778633,44.75259439,44.75581354,44.75646006,44.75798297,44.75846777,44.75850155,44.75840145]}]],[[{"lng":[9.46904612,9.49968836,9.51018285,9.52727735,9.53551969,9.56494977,9.56538483,9.58001449,9.58917884,9.59290835,9.5968424,9.60228557,9.60176595,9.58907722,9.58497462,9.58094846,9.57616241,9.56328414,9.55869394,9.55255787,9.55340732,9.55236407,9.54909803,9.54598661,9.54141006,9.54003787,9.53914212,9.53229683,9.51474364,9.49782023,9.49333844,9.47653603,9.440233,9.42307656,9.42130623,9.39486331,9.3985851,9.40273962,9.40387965,9.40250606,9.40635433,9.38617638,9.38647141,9.39322099,9.40061547,9.41710252,9.43955224,9.44395461,9.45538968,9.46904612],"lat":[44.69976751,44.67727571,44.67837261,44.69622764,44.69766567,44.69601149,44.68275789,44.64870952,44.64568743,44.63562583,44.63196835,44.62922104,44.62895371,44.62458165,44.62275723,44.61466658,44.60990151,44.60745407,44.6045058,44.59794583,44.59053268,44.58945742,44.58778969,44.58781363,44.58878966,44.58889521,44.58875539,44.58549258,44.56331431,44.55714606,44.55587663,44.56519509,44.56680821,44.57461223,44.5926043,44.61115837,44.61542162,44.6166764,44.61749159,44.62300594,44.63797688,44.66170523,44.67300672,44.68231912,44.68417492,44.68340471,44.68859589,44.69000123,44.69662695,44.69976751]}]],[[{"lng":[9.90516656,9.90813078,9.91312831,9.91542398,9.92548507,9.97425758,9.97314246,9.97563147,9.97501147,9.97402469,9.97103684,9.96933739,9.96852496,9.96653637,9.96630448,9.96553114,9.96022792,9.95629875,9.95586966,9.9554415,9.93326052,9.93059028,9.91831397,9.91498157,9.85937181,9.85212177,9.84581737,9.84486068,9.85069832,9.85014994,9.84527989,9.84778366,9.86583672,9.8682944,9.8724308,9.88673309,9.88937722,9.89445632,9.91193187,9.90790122,9.90716962,9.90516656],"lat":[44.97394041,44.96810166,44.97697368,44.97627157,44.95877167,44.9589148,44.94994938,44.9502072,44.94578355,44.94364951,44.9416045,44.94079076,44.94071665,44.94155266,44.94132958,44.94056195,44.92352094,44.91581221,44.91514965,44.9145411,44.89433499,44.89367264,44.89657164,44.90046926,44.90938118,44.90310711,44.90507139,44.90894034,44.91480232,44.92143186,44.92803045,44.93482634,44.93581617,44.95340531,44.95865791,44.97105141,44.97556779,44.98367419,44.97946858,44.97525099,44.97469869,44.97394041]}]],[[{"lng":[9.59136813,9.59298537,9.59744969,9.5976321,9.54095712,9.5324975,9.52062392,9.51986019,9.51643243,9.51624914,9.51500318,9.50227733,9.50195602,9.50273574,9.50328558,9.50560252,9.506174,9.49596505,9.49846352,9.50941679,9.50931643,9.5310562,9.53304902,9.54849497,9.55971635,9.56871022,9.57584637,9.59136813],"lat":[44.98820301,44.93578554,44.92998302,44.92801963,44.91117138,44.90186706,44.89986935,44.89944974,44.89430714,44.8851439,44.88316006,44.88747471,44.88838534,44.88921909,44.88982881,44.89266322,44.89429005,44.90444411,44.9092043,44.91740178,44.92889777,44.94478621,44.95467005,44.97908211,44.97929712,44.98532055,44.98732822,44.98820301]}]],[[{"lng":[9.59973809,9.62113313,9.61502343,9.63104726,9.66592648,9.67325907,9.67051697,9.6641015,9.63122603,9.62751525,9.60699387,9.59415449,9.59973809],"lat":[45.03026942,45.02981057,45.0113176,45.00083529,44.99661009,45.00397105,44.9929779,44.96583869,44.97086815,44.97015045,44.95662347,44.95697905,45.03026942]}]],[[{"lng":[9.60272934,9.59973809,9.597898,9.59031942,9.59136813,9.55971635,9.55540404,9.55053817,9.54849497,9.54361489,9.53022486,9.51135663,9.51088791,9.54744182,9.55001675,9.57785261,9.60510266,9.6155048,9.60272934],"lat":[45.03242376,45.03026942,45.02685003,45.00077507,44.98820301,44.97929712,44.97874266,44.97895976,44.97908211,44.9793935,44.97994255,44.99863414,45.01193781,45.02749464,45.04038185,45.03216977,45.04320436,45.04230261,45.03242376]}]],[[{"lng":[9.73345731,9.73717654,9.75257014,9.75394379,9.76063632,9.764038,9.76757447,9.76795178,9.76927249,9.77069149,9.77001533,9.76289297,9.75236561,9.74980589,9.7503578,9.75131592,9.75563094,9.74865434,9.74301028,9.74054675,9.73983482,9.73972904,9.734822,9.70082856,9.68922688,9.68879173,9.67390067,9.66721954,9.6663234,9.66559425,9.6509071,9.67900767,9.68067719,9.68093236,9.67994926,9.68055996,9.6828611,9.68359738,9.68435158,9.68460181,9.68425722,9.68374435,9.68404563,9.68639919,9.71396246,9.71753088,9.71908475,9.73207677,9.73345731],"lat":[44.87182065,44.86962722,44.87060705,44.87012989,44.86404512,44.86762325,44.8670234,44.86684082,44.86335712,44.85586684,44.85451208,44.84706115,44.83935317,44.83222234,44.83185861,44.83160025,44.8307166,44.82242657,44.81335327,44.80762589,44.80436272,44.80103261,44.7969593,44.78476796,44.77115523,44.76537842,44.7475168,44.74075495,44.74000837,44.74030971,44.76641985,44.79958235,44.80392946,44.81057154,44.81407923,44.82191645,44.82505346,44.82634537,44.82807825,44.82891395,44.82972622,44.8302154,44.83215806,44.8375272,44.86575079,44.86769087,44.86845527,44.87476419,44.87182065]}]],[[{"lng":[9.82483615,9.83149518,9.8480273,9.8401081,9.78441995,9.7838721,9.78336482,9.78303749,9.78247962,9.77964649,9.77612175,9.77348532,9.76313087,9.7619278,9.76056053,9.75414339,9.73761572,9.73160438,9.73059641,9.72171335,9.72045198,9.71549177,9.71134172,9.71842938,9.6973972,9.70043019,9.70082856,9.7020077,9.73972904,9.74301028,9.75471751,9.75563094,9.75615488,9.76127899,9.76499654,9.76578624,9.76659781,9.77685429,9.7808149,9.78193422,9.78272589,9.7857624,9.79054252,9.79698343,9.79763838,9.81585697,9.82467993,9.82212058,9.82275713,9.82353262,9.82483615],"lat":[44.8551105,44.85470291,44.82098469,44.81305831,44.79779066,44.79187999,44.78895777,44.78812282,44.78706439,44.78319481,44.77788563,44.77520521,44.77088067,44.77044075,44.77003392,44.76850548,44.76615378,44.76343777,44.76366927,44.77077449,44.78316049,44.78518496,44.78199385,44.76887773,44.77693905,44.78423027,44.78476796,44.78571495,44.80103261,44.81335327,44.82858013,44.8307166,44.83305368,44.84173367,44.84537269,44.84576348,44.84589307,44.84639989,44.84451844,44.8402708,44.83986928,44.83893022,44.84059863,44.84431672,44.84501432,44.86811998,44.86012578,44.85727258,44.85664684,44.85600211,44.8551105]}]],[[{"lng":[9.91740731,9.96641607,9.97644994,9.96166795,9.96127346,9.96295819,9.96173162,9.95759279,9.95373697,9.95334767,9.95279523,9.95068084,9.95292467,9.95373486,9.95468802,9.96296699,9.9869864,9.98810347,9.99037825,9.96889912,9.96335042,9.9540591,9.95428751,9.94528809,9.94263142,9.94195508,9.93841282,9.93644524,9.93571695,9.93547691,9.93195799,9.88446455,9.90083231,9.87571294,9.91972011,9.91740731],"lat":[45.09962939,45.12747244,45.11078246,45.08949716,45.08620654,45.07914003,45.07645885,45.07435121,45.0709088,45.07041696,45.06927834,45.06389107,45.06101365,45.06008871,45.05936061,45.05621249,45.05640349,45.05628937,45.05560027,45.04123735,45.04198643,45.0413983,45.03833579,45.03769951,45.03827957,45.03884325,45.04428251,45.05520881,45.05727619,45.05813333,45.06277101,45.06676743,45.09469338,45.12250596,45.13758885,45.09962939]}]],[[{"lng":[10.17550401,10.18072316,10.18148831,10.18302229,10.18756938,10.1827518,10.1995397,10.20825719,10.21244203,10.2102433,10.2114106,10.22014631,10.22578323,10.23845548,10.24558612,10.2399881,10.24228456,10.2229968,10.17545583,10.17442734,10.16829898,10.16604536,10.1683807,10.16203701,10.15905978,10.10491279,10.10603066,10.10551324,10.10274895,10.10225341,10.11534743,10.12621887,10.13804579,10.14150158,10.14727561,10.149435,10.15458492,10.15984714,10.17559377,10.17550401],"lat":[44.91777194,44.91526057,44.91550471,44.91740623,44.91672891,44.90422112,44.90200256,44.89912903,44.89395351,44.89177134,44.89127285,44.88996457,44.89183063,44.89184632,44.89049108,44.87690493,44.87065956,44.86432327,44.86567776,44.87174672,44.87165205,44.86478401,44.85883679,44.85304117,44.838371,44.85449941,44.85736024,44.86140719,44.86843751,44.87736912,44.88890283,44.9008228,44.90395528,44.90704448,44.91584456,44.91866748,44.91959674,44.91791405,44.92279412,44.91777194]}]],[[{"lng":[10.17442734,10.24228456,10.24578524,10.22378613,10.18369354,10.17267556,10.15905978,10.17442734],"lat":[44.87174672,44.87065956,44.86393269,44.82270715,44.83156478,44.83465798,44.838371,44.87174672]}]],[[{"lng":[10.17700427,10.18654406,10.17460832,10.16605529,10.16203434,10.1467738,10.14100736,10.12743429,10.10719224,10.09140684,10.08393021,10.07068704,10.05967948,10.04504759,10.01871842,10.03699716,10.03853144,10.03861736,10.03926713,10.04657616,10.0489148,10.06001564,10.06746864,10.06513576,10.0708033,10.08064328,10.08441544,10.08809219,10.08950221,10.09059715,10.09048069,10.09116961,10.09129901,10.09513175,10.11714306,10.1222075,10.13942665,10.15020862,10.17700427],"lat":[44.70914994,44.70218898,44.691179,44.67814126,44.65119316,44.65303987,44.6495597,44.65259329,44.63344518,44.63395723,44.64084327,44.64352489,44.63941445,44.62154444,44.62963246,44.63947863,44.6413732,44.64336195,44.64514751,44.65399312,44.65569113,44.66133213,44.66605197,44.6673881,44.6738258,44.67989071,44.68121431,44.68215158,44.68332645,44.68788019,44.68974478,44.69148466,44.69367098,44.69747827,44.71057048,44.71133102,44.69520842,44.68965391,44.70914994]}]],[[{"lng":[10.29339209,10.29322782,10.30889617,10.29198212,10.28865808,10.28677955,10.27820557,10.27513613,10.27925516,10.27916219,10.2639102,10.25268451,10.25084407,10.24720128,10.24533801,10.24124685,10.19275251,10.17364657,10.16689854,10.16807447,10.16867655,10.17475055,10.17101493,10.21126966,10.19758677,10.23867623,10.26263904,10.27227722,10.29339209],"lat":[44.69130871,44.67428716,44.66259045,44.65608949,44.65573995,44.655203,44.64881757,44.6409298,44.62965773,44.61893239,44.60398261,44.59026053,44.58778702,44.58110201,44.57701722,44.57231743,44.55446913,44.56086081,44.57214261,44.57237364,44.57288063,44.58876621,44.59737494,44.61930812,44.63701616,44.65235903,44.67282903,44.67337921,44.69130871]}]],[[{"lng":[10.33566753,10.3438819,10.32287976,10.34435066,10.34060526,10.33834994,10.31145049,10.30606143,10.2643384,10.23908791,10.24124685,10.24533801,10.25084407,10.25268451,10.26312281,10.2639102,10.26789925,10.27446728,10.27916219,10.27513613,10.27820557,10.30722168,10.30889617,10.32116695,10.32655631,10.33566753],"lat":[44.66355395,44.63708061,44.61951007,44.61222843,44.60534959,44.60371959,44.59619955,44.58370288,44.56645554,44.57088248,44.57231743,44.57701722,44.58778702,44.59026053,44.60308208,44.60398261,44.60789047,44.61332685,44.61893239,44.6409298,44.64881757,44.66154703,44.66259045,44.67123062,44.66739615,44.66355395]}]],[[{"lng":[10.15081171,10.18100409,10.18266581,10.17323246,10.17064286,10.16970809,10.15519901,10.14096351,10.10680908,10.09576043,10.09513175,10.09129901,10.09116961,10.02182372,10.01838589,10.00576832,9.98649598,9.98322481,9.98460259,9.9919232,9.99616616,10.00883434,10.03414078,10.0389517,10.04871141,10.06813047,10.07701198,10.07965699,10.07840079,10.07048605,10.06949021,10.07266017,10.11448994,10.15081171],"lat":[44.78183996,44.77046798,44.77015371,44.75550539,44.74300986,44.74112897,44.73054599,44.72397342,44.70489162,44.69802138,44.69747827,44.69367098,44.69148466,44.71098607,44.71723736,44.72500113,44.72558335,44.74864835,44.75018485,44.75718826,44.76073421,44.76697855,44.77166739,44.77426136,44.76674533,44.76930202,44.76640991,44.76056049,44.7602753,44.75999868,44.75944086,44.75799778,44.75846141,44.78183996]}]],[[{"lng":[10.44165634,10.50431523,10.49604931,10.48979751,10.47839704,10.46768488,10.45668401,10.45059666,10.44288758,10.42207277,10.41514343,10.41087276,10.40451512,10.38944832,10.38725383,10.40977123,10.41348703,10.40721232,10.41938357,10.42298031,10.42319101,10.41724755,10.41293173,10.41261651,10.41366834,10.42516317,10.44165634],"lat":[44.94083646,44.9224276,44.90838229,44.90469219,44.9071494,44.90337172,44.90813514,44.91006253,44.91130347,44.89482989,44.88133194,44.89050384,44.89126806,44.892711,44.89308876,44.89828619,44.90468567,44.91365169,44.9198709,44.92853103,44.93141803,44.94584337,44.94972936,44.95083149,44.95391514,44.96020821,44.94083646]}]],[[{"lng":[10.13295932,10.13659816,10.14678007,10.14987698,10.15385797,10.166665,10.16966848,10.17660615,10.1465145,10.15994194,10.14203472,10.09827285,10.05317828,10.07095713,10.08699629,10.0896528,10.10058707,10.10109299,10.11820699,10.13295932],"lat":[44.45308742,44.44123073,44.43895029,44.43611932,44.42970524,44.42693732,44.42705965,44.41667126,44.39270586,44.38078621,44.35386763,44.34629331,44.37303332,44.42636247,44.42831758,44.43005679,44.43899966,44.43917485,44.43539847,44.45308742]}]],[[{"lng":[10.40653779,10.42611124,10.42503252,10.42521596,10.42565282,10.43521631,10.43991014,10.44146491,10.44590389,10.44707085,10.44733705,10.4470557,10.4465913,10.44579423,10.42851981,10.41896062,10.41539095,10.36745315,10.35877301,10.35401282,10.35438867,10.35276212,10.33113044,10.3344007,10.33362594,10.33904509,10.37165819,10.38653888,10.40653779],"lat":[44.7451277,44.74394896,44.74014548,44.739387,44.73866138,44.73568784,44.73194683,44.73047785,44.72667679,44.72334016,44.71933078,44.71766893,44.71676559,44.71568641,44.69401926,44.67623284,44.66685726,44.6695694,44.67277883,44.67856986,44.6827875,44.68392307,44.68101747,44.69488505,44.699038,44.7194818,44.70449297,44.7382428,44.7451277]}]],[[{"lng":[10.34106318,10.39911447,10.39913187,10.39872478,10.40270676,10.40160063,10.39695556,10.36332812,10.34194066,10.33846374,10.338144,10.34003189,10.33990572,10.33515431,10.33212414,10.33240608,10.33217288,10.3316066,10.32400949,10.30313379,10.2874748,10.2705655,10.27093765,10.27708178,10.26851609,10.24570378,10.23274645,10.23479937,10.24930463,10.25602568,10.25517921,10.25338314,10.25195457,10.24166097,10.23978774,10.24011181,10.24010964,10.23762451,10.22948078,10.26355234,10.2643384,10.26485195,10.27264295,10.27341103,10.27955842,10.28191891,10.28795098,10.29442611,10.30606143,10.30995238,10.31145049,10.34106318],"lat":[44.59831329,44.58793913,44.58548124,44.58373973,44.57017817,44.56292673,44.55766317,44.54292736,44.52510357,44.51615081,44.51207639,44.50606753,44.50550185,44.4958887,44.48765068,44.48622498,44.48537245,44.48480289,44.47903951,44.47014435,44.4830403,44.49008069,44.49157998,44.50037901,44.50972015,44.50411059,44.50536752,44.5183631,44.52596554,44.5377572,44.53995412,44.54009988,44.53922429,44.54102017,44.5452447,44.54687064,44.54913931,44.55388348,44.56377532,44.56621217,44.56645554,44.56690899,44.57425849,44.57482609,44.57781823,44.57751267,44.57802995,44.57928009,44.58370288,44.59401114,44.59619955,44.59831329]}]],[[{"lng":[10.13084037,10.15905978,10.18369354,10.22378613,10.22048545,10.21353331,10.19210791,10.18627549,10.18216355,10.16020277,10.15081171,10.14689718,10.11448994,10.09359388,10.07266017,10.06975816,10.06949021,10.07048605,10.07648475,10.07840079,10.07940046,10.07965699,10.07972434,10.07701198,10.07148553,10.06813047,10.0599446,10.04871141,10.04128853,10.0389517,10.03851411,10.03867166,10.0410967,10.04876975,10.05263269,10.05647278,10.06317686,10.0642763,10.06595168,10.06645099,10.06661241,10.06575282,10.09205502,10.09470007,10.09307307,10.09400843,10.094839,10.10499846,10.10491279,10.13084037],"lat":[44.84644347,44.838371,44.83156478,44.82270715,44.81194892,44.80547846,44.78192041,44.77733602,44.77031196,44.77866618,44.78183996,44.78267152,44.75846141,44.75722308,44.75799778,44.75889822,44.75944086,44.75999868,44.76051843,44.7602753,44.76035588,44.76056049,44.76078491,44.76640991,44.76895551,44.76930202,44.76670463,44.76674533,44.77067521,44.77426136,44.77452642,44.7753104,44.77687948,44.77974399,44.78004198,44.77935791,44.7789536,44.77894335,44.77932382,44.77967024,44.78019987,44.78362873,44.80495842,44.80775077,44.83587999,44.84072317,44.84248862,44.847729,44.85449941,44.84644347]}]],[[{"lng":[10.2705655,10.30313379,10.28427512,10.25464862,10.23607579,10.230591,10.22981911,10.22573912,10.22381127,10.22315555,10.21397231,10.20525275,10.16694867,10.15994194,10.1465145,10.1766565,10.17660615,10.16966848,10.15385797,10.13659816,10.14099201,10.14905848,10.18933979,10.19505884,10.21607691,10.22510567,10.22983583,10.24407441,10.2705655],"lat":[44.49008069,44.47014435,44.4594624,44.45170732,44.43577703,44.42892218,44.4256265,44.41434493,44.4104404,44.40967319,44.4016327,44.39220011,44.38443241,44.38078621,44.39270586,44.41604954,44.41667126,44.42705965,44.42970524,44.44123073,44.461542,44.46783501,44.46401061,44.46643563,44.47199346,44.47150083,44.47051372,44.48206294,44.49008069]}]],[[{"lng":[10.29159996,10.29684848,10.36446475,10.36555059,10.36735899,10.37897472,10.39405617,10.40651542,10.41614404,10.39570745,10.38442173,10.41580504,10.44207566,10.43749401,10.43728215,10.43770836,10.43733454,10.43608556,10.42883025,10.42484092,10.42351513,10.42728629,10.42681686,10.42743559,10.42791023,10.42969763,10.42611124,10.40244727,10.38653888,10.38084637,10.37165819,10.35881981,10.33904509,10.33362594,10.33333936,10.3344007,10.33113044,10.30889617,10.30589154,10.29322782,10.29715875,10.29339209,10.29345278,10.29795413,10.28517347,10.25826177,10.24225625,10.24478639,10.28318844,10.26008272,10.2384203,10.23259548,10.24283663,10.21353331,10.22011586,10.23901528,10.24578524,10.2399881,10.27417876,10.29159996],"lat":[44.90097133,44.88541036,44.87033616,44.87021516,44.87067062,44.87414975,44.880052,44.88007023,44.88139146,44.85370142,44.82475914,44.83240651,44.8196098,44.80818986,44.8067882,44.80103946,44.80024297,44.79984459,44.79993561,44.79967039,44.79820157,44.7737226,44.76697682,44.75977632,44.75750183,44.75313139,44.74394896,44.7484461,44.7382428,44.72938155,44.70449297,44.70769826,44.7194818,44.699038,44.69750817,44.69488505,44.68101747,44.66259045,44.66641903,44.67428716,44.68962244,44.69130871,44.69176714,44.70416689,44.70943312,44.71306368,44.72381662,44.72933446,44.7652514,44.77556305,44.77363164,44.77488295,44.79922186,44.80547846,44.8112147,44.84100624,44.86393269,44.87690493,44.87893207,44.90097133]}]],[[{"lng":[9.90110351,9.90130918,9.90211894,9.90641503,9.92340608,9.92367592,9.9417944,9.97828034,9.98460259,9.98649598,9.96961993,9.96921857,9.96802409,9.96730419,9.96958453,9.96709661,9.96670113,9.95112371,9.94044636,9.89990441,9.87624159,9.87363433,9.84513902,9.85503883,9.85943483,9.85015228,9.84411554,9.83203383,9.84978305,9.85524753,9.86500696,9.88066133,9.87252041,9.87863506,9.88216705,9.88252339,9.8918396,9.89903639,9.90032548,9.90110351],"lat":[44.80411342,44.80354452,44.80195374,44.79853492,44.80000118,44.79076276,44.76138462,44.75358803,44.75018485,44.72558335,44.72903172,44.72844098,44.72572343,44.72344294,44.71708599,44.70795175,44.70770303,44.70463802,44.70552765,44.71637803,44.69823335,44.70069296,44.70889244,44.72964105,44.73313694,44.75037372,44.75223695,44.75194752,44.76655349,44.76778199,44.7621091,44.76868712,44.78277504,44.79756374,44.80366699,44.80381728,44.80444707,44.80701027,44.8077743,44.80411342]}]],[[{"lng":[10.22901463,10.26511448,10.25562628,10.25374202,10.25179823,10.23739026,10.23480907,10.24431666,10.24379984,10.2299982,10.2330611,10.23441476,10.23676048,10.24015553,10.24437422,10.24476492,10.24218372,10.23923708,10.23452911,10.23326899,10.23166324,10.17584564,10.18210603,10.16803355,10.18094596,10.22901463],"lat":[45.02790937,45.004778,45.0008529,44.99415821,44.9911189,44.97947449,44.9827161,44.99829415,45.00020818,44.99381332,44.9775049,44.97557287,44.97436823,44.97301714,44.96988358,44.96449618,44.96416422,44.96805806,44.97085463,44.97122833,44.9714527,44.9624541,44.97710756,44.99173641,45.03046292,45.02790937]}]],[[{"lng":[10.19062188,10.22718837,10.23908694,10.24478639,10.24225625,10.22784245,10.18539961,10.18327996,10.18242051,10.18212314,10.18147228,10.17290751,10.16605529,10.18654406,10.18354836,10.1694046,10.17413788,10.18092115,10.18938958,10.19062188],"lat":[44.73602061,44.72614897,44.73151197,44.72933446,44.72381662,44.69785686,44.65940174,44.65681302,44.65354507,44.6499652,44.64830649,44.63983799,44.67814126,44.70218898,44.70876722,44.71165864,44.71541323,44.72359419,44.73631651,44.73602061]}]],[[{"lng":[10.01546121,10.01578716,10.02076368,10.05148394,10.0413598,10.02482577,10.03414078,9.98460259,9.97828034,9.95200628,9.9417944,9.93725869,9.93228568,9.92367592,9.92275572,9.92340608,9.91188129,9.90641503,9.90130918,9.93691155,9.94849146,9.9551772,9.96510051,10.01546121],"lat":[44.85375453,44.84565877,44.84299478,44.83663062,44.7922168,44.78304013,44.77166739,44.75018485,44.75358803,44.75864879,44.76138462,44.77938135,44.78609267,44.79076276,44.7933088,44.80000118,44.79960765,44.79853492,44.80354452,44.83681792,44.83771313,44.84042049,44.83608805,44.85375453]}]],[[{"lng":[10.23289158,10.23440673,10.23256703,10.23261597,10.23310224,10.24442392,10.25915999,10.25924482,10.25921465,10.25428207,10.25118279,10.24443532,10.24558612,10.23845548,10.22014631,10.2114106,10.21244203,10.20825719,10.1827518,10.18940688,10.18928061,10.18756938,10.18716251,10.17559377,10.15984714,10.15458492,10.15630243,10.16172096,10.17678161,10.18423781,10.20082733,10.20284571,10.20319144,10.20306742,10.23289158],"lat":[44.96485906,44.95628186,44.94437417,44.9436985,44.94273004,44.9434444,44.93624333,44.93548624,44.9346854,44.91768096,44.90914507,44.90172014,44.89049108,44.89184632,44.88996457,44.89127285,44.89395351,44.89912903,44.90422112,44.9099943,44.91247115,44.91672891,44.91727326,44.92279412,44.91791405,44.91959674,44.91994843,44.92162182,44.93070363,44.94573181,44.95895342,44.96149772,44.96408663,44.96482611,44.96485906]}]],[[{"lng":[10.09048069,10.09059715,10.08999452,10.08950221,10.08882108,10.03699716,10.02004698,10.01871842,10.01297468,10.01193638,10.0058629,9.9835358,9.95955219,9.9478188,9.92631507,9.92578164,9.92748957,9.92742088,9.915264,9.90356431,9.93566693,9.92443076,9.91097462,9.90122204,9.88817029,9.88804777,9.88795415,9.90885266,9.94707611,9.952011,9.95936443,9.96113581,9.96310323,9.96350403,9.96808072,9.97196287,9.97303673,9.97552689,9.97621478,9.9769318,9.97780256,9.99042018,9.98798116,10.00914698,10.01621242,10.03927635,10.05329354,10.09048069],"lat":[44.68974478,44.68788019,44.68468111,44.68332645,44.68266677,44.63947863,44.62990868,44.62963246,44.62991763,44.62965675,44.62691066,44.61338541,44.59504438,44.60568426,44.59043046,44.58777905,44.58664888,44.58628935,44.59093368,44.61305589,44.61868498,44.65019494,44.66042176,44.6543145,44.65505591,44.65529094,44.65576879,44.68066698,44.6785829,44.67122592,44.66857774,44.66889593,44.66886136,44.66868692,44.6662536,44.66304277,44.66012586,44.65818712,44.65783915,44.65772499,44.65775355,44.66099369,44.68299858,44.6781863,44.66228849,44.66119868,44.68227981,44.68974478]}]],[[{"lng":[10.17688183,10.20319144,10.20082733,10.18423781,10.17678161,10.16172096,10.15630243,10.149435,10.14907565,10.13804579,10.12621887,10.10829925,10.10180727,10.10915444,10.10830146,10.10029657,10.07402957,10.08444729,10.13066962,10.13564019,10.14585635,10.18186879,10.17645421,10.17575858,10.17584564,10.17688183],"lat":[44.9622814,44.96408663,44.95895342,44.94573181,44.93070363,44.92162182,44.91994843,44.91866748,44.91843705,44.90395528,44.9008228,44.8839033,44.89603784,44.9053378,44.90709248,44.91347077,44.91761022,44.93259907,44.95218006,44.95645004,44.98526371,44.97729006,44.97113467,44.96315715,44.9624541,44.9622814]}]],[[{"lng":[10.45059666,10.45668401,10.46768488,10.47084819,10.47839704,10.48979751,10.4637302,10.47431294,10.46786211,10.4643141,10.45885056,10.45265323,10.45346846,10.45490031,10.45471607,10.44207566,10.41580504,10.38442173,10.39570745,10.40949558,10.42207277,10.45059666],"lat":[44.91006253,44.90813514,44.90337172,44.903241,44.9071494,44.90469219,44.89777374,44.87581668,44.87057509,44.85303062,44.85116962,44.84687811,44.84451371,44.83805898,44.8306751,44.8196098,44.83240651,44.82475914,44.85370142,44.86418988,44.89482989,44.91006253]}]],[[{"lng":[10.1467738,10.17290751,10.16198624,10.15386829,10.13930001,10.12256051,10.11147019,10.10767249,10.10730236,10.09614197,10.08937333,10.04976706,10.04663391,10.02126749,9.97764833,9.9835358,9.9868448,9.99485267,9.99809256,10.00396344,10.01193638,10.04504759,10.07068704,10.09140684,10.09725876,10.10719224,10.10773538,10.12743429,10.1467738],"lat":[44.65303987,44.63983799,44.62090954,44.61691376,44.61556562,44.61609151,44.61197784,44.60496131,44.6013144,44.58979089,44.5867408,44.57936961,44.57604043,44.56297337,44.60652208,44.61338541,44.61528339,44.61776161,44.62118688,44.62568504,44.62965675,44.62154444,44.64352489,44.63395723,44.63343304,44.63344518,44.63349843,44.65259329,44.65303987]}]],[[{"lng":[10.23665776,10.24010964,10.24166097,10.25195457,10.25517921,10.25556624,10.25602568,10.25600517,10.24930463,10.23479937,10.23274645,10.26851609,10.27093765,10.24407441,10.23593062,10.22983583,10.22915544,10.18933979,10.14905848,10.13676822,10.13802132,10.12530247,10.13241404,10.14203871,10.14261318,10.15236095,10.15464534,10.15612723,10.15943553,10.16582154,10.17038079,10.17362893,10.1746097,10.18873297,10.18974039,10.19275251,10.23665776],"lat":[44.5550528,44.54913931,44.54102017,44.53922429,44.53995412,44.53980583,44.5377572,44.53738831,44.52596554,44.5183631,44.50536752,44.50972015,44.49157998,44.48206294,44.47335578,44.47051372,44.470368,44.46401061,44.46783501,44.48464893,44.49408021,44.50422616,44.51742568,44.52582829,44.52624566,44.53240449,44.5333627,44.53383384,44.53462288,44.53536475,44.53680805,44.53813859,44.53871368,44.54809222,44.5493421,44.55446913,44.5550528]}]],[[{"lng":[9.631837,9.64489851,9.64517122,9.64525733,9.64338962,9.64099804,9.64209262,9.65552543,9.66027708,9.65645413,9.637283,9.6219463,9.62352494,9.55917752,9.47903434,9.47256479,9.4383937,9.46887309,9.49680342,9.50394878,9.50621347,9.50667325,9.50842997,9.50926329,9.51141107,9.51213298,9.5208454,9.52766495,9.55830404,9.57795886,9.5928022,9.60532648,9.60381868,9.61651934,9.61791616,9.61964488,9.631837],"lat":[44.49205165,44.48714422,44.48678256,44.48546769,44.48258838,44.48008107,44.47784228,44.47501115,44.47059046,44.45817079,44.44515728,44.42658197,44.42161514,44.43813525,44.40925851,44.42428409,44.41854155,44.48188067,44.4827304,44.48020985,44.47890344,44.47845127,44.47657992,44.4755319,44.47247938,44.46732663,44.45497153,44.44886339,44.44013813,44.4660222,44.45354939,44.45067486,44.46405185,44.48837225,44.48964308,44.49018287,44.49205165]}]],[[{"lng":[11.77379612,11.82765234,11.84488739,11.8468663,11.84758397,11.84093022,11.84330359,11.85374464,11.86452639,11.85964277,11.85588346,11.85555953,11.85503076,11.85207787,11.85685127,11.83856056,11.85423919,11.85361945,11.84094371,11.84042771,11.82731895,11.80225615,11.80147459,11.799092,11.78133445,11.79891166,11.79141933,11.78828281,11.78038132,11.79670582,11.74977277,11.77379612],"lat":[44.5056708,44.47312785,44.46900385,44.46873495,44.47193703,44.48533646,44.48936276,44.49637613,44.49052449,44.48478637,44.47166489,44.4709528,44.47016481,44.46452207,44.45661187,44.4373411,44.42706207,44.42649005,44.42806956,44.42357008,44.4177489,44.42739207,44.42773084,44.43048558,44.43626721,44.46076546,44.46345615,44.46351931,44.46724107,44.48569339,44.49756929,44.5056708]}]],[[{"lng":[12.26873132,12.28916365,12.34772996,12.2746175,12.25951576,12.25519113,12.2503817,12.24427746,12.23182186,12.22985615,12.22624686,12.21314686,12.20727142,12.20167298,12.20083453,12.20997879,12.20881951,12.18892537,12.17124083,12.16119637,12.1506214,12.14504873,12.1032467,12.09677615,12.08693829,12.07706875,12.07274262,12.06858862,12.06444968,12.05453684,12.0472839,12.04951693,12.04930248,12.03558723,12.05055784,12.05923985,12.06966138,12.07985249,12.1034085,12.10104636,12.07435339,12.07864433,12.08264459,12.09170879,12.09664898,12.09952876,12.10006811,12.10584644,12.0808206,12.07704684,12.06347498,12.05063127,12.04437299,12.02811312,12.04234159,12.08142472,12.06984571,12.06513599,12.10451201,12.11413598,12.15378113,12.23708404,12.26873132],"lat":[44.62922093,44.46346822,44.30122982,44.30042395,44.2543625,44.25129433,44.25107131,44.24803108,44.21774843,44.21721017,44.21412036,44.22083578,44.22046667,44.22618754,44.23011823,44.2380178,44.2556056,44.25426993,44.24424262,44.25095701,44.25252784,44.25442808,44.27197532,44.29610128,44.30052389,44.2985983,44.29922352,44.30033458,44.30221931,44.30566301,44.31680885,44.32394655,44.32513162,44.33080882,44.33724258,44.34643588,44.3478035,44.35003162,44.36197901,44.36441091,44.3708678,44.37580705,44.37503287,44.37100207,44.36944572,44.37553429,44.38237507,44.38960001,44.40201321,44.40303329,44.40004051,44.40592115,44.40583171,44.41169753,44.43675997,44.46910109,44.47881459,44.49305199,44.54379866,44.54722736,44.54845202,44.62058595,44.62922093]}]],[[{"lng":[11.68048385,11.68319509,11.68394277,11.68497436,11.69755091,11.69777196,11.69814202,11.69731845,11.69156114,11.69110619,11.70265859,11.71388159,11.73649858,11.76724905,11.76562682,11.76500863,11.76437143,11.76111149,11.76112389,11.76148842,11.76591841,11.76557088,11.76152685,11.74869111,11.73929138,11.70514844,11.69161771,11.68638208,11.66484934,11.64835507,11.63489104,11.63441586,11.63243541,11.63340144,11.63994473,11.66544235,11.67153902,11.66763231,11.66759797,11.68048385],"lat":[44.31439468,44.31428597,44.31411534,44.31381199,44.30933822,44.30896388,44.30719061,44.30460829,44.29837478,44.28951783,44.28793949,44.29833242,44.30917276,44.2868735,44.28648969,44.28613555,44.28537676,44.27707413,44.27680375,44.27656085,44.27563435,44.27410331,44.27042907,44.26760593,44.25566019,44.25028053,44.25160871,44.24354851,44.25706675,44.25658183,44.25800975,44.25830881,44.25994799,44.26362585,44.27374235,44.27871802,44.28822193,44.31136925,44.31185619,44.31439468]}]],[[{"lng":[12.04437299,12.04668847,12.05063127,12.05256181,12.06347498,12.06384066,12.07704684,12.10584644,12.10006811,12.09664898,12.07435339,12.1034085,12.05923985,12.02918485,12.01612071,12.01912649,12.03060917,12.02305442,12.01433522,12.01197043,12.00517611,11.99830915,11.99397101,11.98767068,11.98769481,12.0039093,12.02811312,12.04437299],"lat":[44.40583171,44.40721481,44.40592115,44.40484599,44.40004051,44.39999469,44.40303329,44.38960001,44.38237507,44.36944572,44.3708678,44.36197901,44.34643588,44.32811412,44.33829046,44.3441372,44.35297047,44.35708697,44.35149294,44.35259969,44.35675387,44.36851305,44.37338313,44.37733834,44.37798624,44.38241262,44.41169753,44.40583171]}]],[[{"lng":[11.87101595,11.87055193,11.88376221,11.87481596,11.8744633,11.86074638,11.85716168,11.85605744,11.85887605,11.85692395,11.84977073,11.83856056,11.84965442,11.85685127,11.85207787,11.85503076,11.88123568,11.87101595],"lat":[44.44568211,44.44416336,44.43886093,44.42811257,44.42809446,44.43328248,44.43397545,44.43271572,44.42662246,44.42549201,44.43290123,44.4373411,44.44701873,44.45661187,44.46452207,44.47016481,44.46157504,44.44568211]}]],[[{"lng":[11.86193699,11.86122626,11.87536653,11.85763745,11.84809683,11.84383902,11.79589772,11.79376573,11.79953351,11.7999721,11.80366933,11.80640813,11.80785534,11.80927912,11.80968989,11.82527664,11.86193699],"lat":[44.38201011,44.37154893,44.35530395,44.33091548,44.32554532,44.32489528,44.35006601,44.36471274,44.37211108,44.37943294,44.37940971,44.37791548,44.37753328,44.38102276,44.38094963,44.37486621,44.38201011]}]],[[{"lng":[12.10999539,12.1124835,12.10806392,12.10539807,12.09961184,12.08356766,12.07101432,12.06880128,12.08085662,12.08424666,12.08274923,12.08125212,12.06033368,12.05495173,12.05446542,12.03996411,12.03728036,12.0346257,12.03046608,12.02173281,12.02110047,12.0193954,12.01809896,12.00568253,11.99879734,11.99676252,11.99523462,11.98625539,11.98209439,11.96168234,11.91878774,11.90974763,11.84167455,11.788468,11.78981575,11.79035495,11.78953059,11.7894628,11.79042681,11.8040536,11.81340583,11.84007386,11.82253011,11.81592787,11.83870317,11.88474958,11.88720286,11.86710685,11.9087013,11.91062867,11.91341897,11.94678948,11.95205894,11.956102,11.95945853,11.98533638,12.00849189,12.01103565,12.03073254,12.02816456,12.0308448,12.05002297,12.05225622,12.05127048,12.0548749,12.06085362,12.10278146,12.10999539],"lat":[43.94872623,43.94471358,43.93069023,43.92853902,43.92554522,43.92578165,43.90212685,43.8915357,43.88848307,43.87337436,43.87209136,43.87153756,43.86623017,43.8614856,43.85976102,43.85133396,43.84454499,43.84003297,43.83674025,43.83227206,43.83132545,43.8258786,43.82433733,43.82001021,43.81933594,43.81992054,43.81995163,43.81792703,43.81052709,43.79020687,43.7936882,43.8127191,43.80802426,43.84508476,43.8476903,43.85098131,43.85304519,43.85399219,43.85678665,43.85737115,43.85648389,43.87543267,43.87738923,43.88466476,43.89111429,43.89051842,43.89671359,43.91769314,43.9283181,43.93079885,43.93767807,43.90702137,43.90575533,43.90723078,43.90912451,43.90664116,43.9146673,43.93841337,43.94133133,43.93051477,43.92074734,43.91849,43.91905152,43.92948541,43.93151375,43.92930991,43.95030748,43.94872623]}]],[[{"lng":[12.20167298,12.20727142,12.21314686,12.21276359,12.19798157,12.17399591,12.18370533,12.18609714,12.17385222,12.1691554,12.16695755,12.16453302,12.15715972,12.16047629,12.15098842,12.14650232,12.14183279,12.10204613,12.10396455,12.0806399,12.08109705,12.0842802,12.08841585,12.09010416,12.09159776,12.09065393,12.08810954,12.08709233,12.08739258,12.10064497,12.11868328,12.13154534,12.1549231,12.15872012,12.16070106,12.16178756,12.16111634,12.168071,12.1708443,12.18785545,12.20028641,12.20167298],"lat":[44.22618754,44.22046667,44.22083578,44.21517948,44.19615202,44.17957706,44.17123374,44.15902288,44.14892689,44.14210854,44.13826658,44.12487865,44.12182344,44.10839581,44.10599417,44.11117444,44.11207029,44.10590715,44.12440085,44.14331416,44.14658219,44.14696437,44.14642941,44.14643771,44.14750462,44.15217562,44.15421611,44.15581012,44.15964619,44.15766642,44.16512438,44.17702495,44.17369826,44.17710431,44.18233408,44.18533791,44.19500745,44.20802158,44.21747843,44.22131074,44.23016961,44.22618754]}]],[[{"lng":[12.35898127,12.39529123,12.38572597,12.37680796,12.36942346,12.36682555,12.36340394,12.35467271,12.3528725,12.35342768,12.35343662,12.35328541,12.35131599,12.33626523,12.32492041,12.32360904,12.31387334,12.35394805,12.35810689,12.35898127],"lat":[44.05259391,44.03024571,44.00978731,44.00035995,43.98977473,43.98771772,43.98674725,43.98592387,43.98606231,43.98811645,43.98834148,43.98874204,43.98983521,43.98992505,43.98777132,44.01362081,44.02717416,44.05274194,44.05432118,44.05259391]}]],[[{"lng":[11.92317787,11.93710791,11.9381345,11.96235442,11.96973817,11.97142515,11.98557048,11.9690249,11.91091479,11.91139094,11.90830475,11.90705566,11.90590478,11.90763966,11.91229635,11.9082308,11.9078758,11.89536406,11.88959451,11.88879442,11.88861015,11.92317787],"lat":[44.20599601,44.20218044,44.1901263,44.20572327,44.19406184,44.17505807,44.15989732,44.15789815,44.13040571,44.13475097,44.13808867,44.14014614,44.14493794,44.14665834,44.14883534,44.15792383,44.15830198,44.16379667,44.16958766,44.1705082,44.1706569,44.20599601]}]],[[{"lng":[12.29033551,12.30245806,12.34933607,12.33287143,12.33517779,12.33810214,12.36183932,12.3621776,12.32584533,12.32226793,12.33150796,12.31794422,12.30241586,12.29199043,12.28439047,12.2828557,12.27614267,12.27453984,12.27121306,12.24695615,12.2368486,12.22925353,12.20673648,12.2109151,12.20187053,12.20412192,12.20633123,12.21944922,12.22663265,12.23270154,12.23256528,12.21298318,12.21263764,12.20522356,12.20114028,12.19963291,12.1980495,12.18910275,12.18605744,12.17849665,12.14997342,12.09454994,12.09956518,12.11915698,12.11645742,12.11435241,12.12947849,12.13491222,12.11988964,12.11948347,12.11886,12.14183279,12.15098842,12.16047629,12.18609714,12.17399591,12.21314686,12.22624686,12.23964657,12.24712624,12.29033551],"lat":[44.2269424,44.21945002,44.19073231,44.17881444,44.15665744,44.14902029,44.14800948,44.13293923,44.12348153,44.11645252,44.10620561,44.10978343,44.09727323,44.07728436,44.06928214,44.06836727,44.06892785,44.06808252,44.06870558,44.07876506,44.0880777,44.06560136,44.05916256,44.04814129,44.0422899,44.03786787,44.03680812,44.04107321,44.05003865,44.04609856,44.04572601,44.02782706,44.027661,44.02592989,44.0275634,44.02893747,44.03142696,44.04067304,44.05117674,44.05256913,44.0320544,44.02421971,44.03425322,44.05097528,44.05721075,44.06070626,44.07012926,44.0778613,44.09864893,44.10288566,44.10497839,44.11207029,44.10599417,44.10839581,44.15902288,44.17957706,44.22083578,44.21412036,44.21765017,44.23079669,44.2269424]}]],[[{"lng":[12.38566231,12.43696477,12.39441177,12.38124329,12.3749101,12.3639419,12.36254731,12.3621776,12.36183932,12.33810214,12.33287143,12.34933607,12.3747569,12.38352372,12.38566231],"lat":[44.22215214,44.17408845,44.14358092,44.14089295,44.1376954,44.13013286,44.12978685,44.13293923,44.14800948,44.14902029,44.17881444,44.19073231,44.21825606,44.22449406,44.22215214]}]],[[{"lng":[11.99957843,12.02759268,12.04524094,12.05686596,12.08764029,12.09128976,12.08826352,12.08707573,12.08780979,12.09956518,12.09454994,12.05472751,12.03655851,12.03266297,12.06610854,12.04804376,12.01981501,12.00167493,11.99512217,11.9913228,11.98904553,11.96357088,11.93580472,11.92321117,11.92018495,11.91967688,11.92487218,11.93370413,11.93865544,11.93903231,11.93934778,11.9392649,11.93898405,11.93487004,11.95204562,11.96489279,11.96541199,11.96567439,11.96643165,11.97363565,11.98874936,11.99026639,11.98955414,11.98761125,11.98767834,11.98821476,11.98851677,11.99657517,11.99957843],"lat":[44.07703317,44.06433238,44.06118004,44.06931404,44.07160973,44.06903514,44.06511077,44.06147873,44.05494977,44.03425322,44.02421971,44.00639575,44.00526897,43.97460929,43.97043879,43.94507487,43.94447461,43.95689105,43.95595579,43.96170031,43.96326347,43.96782594,43.99147407,43.99734309,43.99933818,44.00029789,44.00964368,44.01143373,44.01343108,44.01373649,44.01431356,44.02372382,44.02435227,44.03072419,44.03231598,44.03889731,44.03929796,44.03980431,44.04297169,44.0502477,44.06134973,44.07312183,44.0741038,44.07519901,44.07553935,44.07676772,44.07730898,44.08281457,44.07703317]}]],[[{"lng":[11.88959451,11.9078758,11.9082308,11.91007228,11.91222486,11.91229635,11.91206139,11.90763966,11.90590478,11.91206342,11.89183537,11.87041143,11.84196041,11.86146976,11.86160974,11.86076453,11.86019945,11.85001095,11.84668807,11.83897549,11.83666008,11.83371717,11.83118733,11.83142575,11.83478218,11.83766156,11.86800492,11.8747748,11.88959451],"lat":[44.16958766,44.15830198,44.15792383,44.15442881,44.14916126,44.14883534,44.14863427,44.14665834,44.14493794,44.09711975,44.09780506,44.0769098,44.09321473,44.10378296,44.10409456,44.10806801,44.10904548,44.11202818,44.11230916,44.11143889,44.11136141,44.11174961,44.11816842,44.1187117,44.12225656,44.12470583,44.14580648,44.16395697,44.16958766]}]],[[{"lng":[12.06444968,12.08693829,12.09677615,12.1032467,12.16119637,12.17124083,12.20881951,12.20997879,12.20797081,12.20083453,12.20028641,12.1938912,12.18785545,12.18080633,12.17306121,12.1708443,12.1704168,12.16987252,12.13572775,12.11164589,12.08828382,12.09246306,12.09567681,12.09574989,12.09471115,12.09443359,12.09279065,12.09054941,12.08928038,12.08739258,12.08695777,12.08671057,12.08709233,12.08750931,12.08810954,12.09018453,12.09065393,12.09105057,12.09159776,12.09089611,12.09010416,12.08910525,12.08109705,12.0806399,12.04798837,12.04450671,12.03373535,12.02378948,12.01562922,12.01056181,12.00123823,12.00025607,12.00381496,12.00595414,12.00000044,12.00499419,11.97142515,11.96767656,11.96973817,11.96235442,11.94982144,11.9381345,11.9355263,11.93710791,11.92317787,11.92151122,11.92829151,11.92952983,11.92554932,11.93058394,11.94749363,11.96529098,11.97036627,11.97586245,11.99302361,12.00164829,12.00549649,12.00952618,12.01121345,12.02154409,12.02918485,12.03558723,12.04899227,12.04930248,12.04951693,12.0472839,12.04990144,12.05453684,12.05500737,12.06444968],"lat":[44.30221931,44.30052389,44.29610128,44.27197532,44.25095701,44.24424262,44.2556056,44.2380178,44.23563455,44.23011823,44.23016961,44.22420894,44.22131074,44.22440336,44.21982953,44.21747843,44.21697716,44.21569713,44.21741344,44.20966998,44.17575506,44.16979909,44.16357206,44.16305692,44.16113149,44.16108501,44.16146253,44.16142432,44.16107156,44.15964619,44.15898274,44.15808014,44.15581012,44.15493457,44.15421611,44.15276451,44.15217562,44.15139064,44.14750462,44.14675838,44.14643771,44.14637515,44.14658219,44.14331416,44.15056147,44.14669982,44.1395053,44.13789663,44.13353908,44.12729884,44.12611386,44.126922,44.13006042,44.14068146,44.14975091,44.15259947,44.17505807,44.18311407,44.19406184,44.20572327,44.20738027,44.1901263,44.1917599,44.20218044,44.20599601,44.21090829,44.21562754,44.21937693,44.24004579,44.24155063,44.23588461,44.25048065,44.25277041,44.25569716,44.27888946,44.29616413,44.2996009,44.30143027,44.30255611,44.31453566,44.32811412,44.33080882,44.32552267,44.32513162,44.32394655,44.31680885,44.31153066,44.30566301,44.30530831,44.30221931]}]],[[{"lng":[12.14102514,12.16987252,12.168071,12.16111634,12.16178756,12.15872012,12.13154534,12.11868328,12.0949368,12.09443359,12.09567681,12.09246306,12.08828382,12.11164589,12.11395753,12.12029559,12.12097664,12.14102514],"lat":[44.21580931,44.21569713,44.20802158,44.19500745,44.18533791,44.17710431,44.17702495,44.16512438,44.15946887,44.16108501,44.16357206,44.16979909,44.17575506,44.20966998,44.20884475,44.20633093,44.20613472,44.21580931]}]],[[{"lng":[11.889103,11.89215199,11.88991624,11.90440081,11.93487004,11.93898405,11.93903231,11.93370413,11.92487218,11.92018495,11.93580472,11.96357088,11.98904553,11.9913228,11.97548634,11.96252752,11.93640353,11.93170138,11.92936411,11.92248143,11.91700063,11.89625145,11.86765487,11.86735667,11.8697805,11.86994743,11.86938945,11.85039661,11.85185078,11.86521123,11.87637598,11.88159111,11.88123152,11.88148783,11.889103],"lat":[44.05713596,44.0539201,44.04667194,44.03433938,44.03072419,44.02435227,44.01373649,44.01143373,44.00964368,43.99933818,43.99147407,43.96782594,43.96326347,43.96170031,43.93510498,43.93381243,43.94622735,43.95247028,43.95410582,43.95429121,43.95561978,43.96769898,43.97777503,43.97934905,43.98462696,43.98524397,43.99255047,44.02553618,44.02723743,44.03477241,44.03925333,44.04769265,44.04950563,44.04993699,44.05713596]}]],[[{"lng":[12.36254731,12.36540048,12.36689612,12.37037969,12.33604833,12.33148085,12.33150796,12.33021097,12.32226793,12.36254731],"lat":[44.12978685,44.12940565,44.11081134,44.10423102,44.1042675,44.1061009,44.10620561,44.1106742,44.11645252,44.12978685]}]],[[{"lng":[12.44271848,12.43983232,12.43102922,12.40942435,12.40514067,12.40500355,12.40426411,12.40354208,12.4026967,12.39781471,12.39191468,12.38962756,12.37488094,12.37337001,12.36975286,12.36689612,12.36637669,12.36540048,12.3639419,12.36439323,12.37353804,12.3749101,12.38124329,12.39441177,12.43696477,12.44271848],"lat":[44.16975398,44.16679812,44.16424532,44.1465724,44.13818374,44.13775569,44.13315935,44.12973284,44.12698522,44.115094,44.10502438,44.10326478,44.10100103,44.10013643,44.10814772,44.11081134,44.12327299,44.12940565,44.13013286,44.1305967,44.13687171,44.1376954,44.14089295,44.14358092,44.17408845,44.16975398]}]],[[{"lng":[12.37053303,12.37337001,12.37322888,12.36427183,12.36220635,12.36225417,12.3632237,12.36589524,12.36973015,12.37131994,12.3714219,12.37047371,12.36499708,12.36352424,12.35906246,12.35535252,12.3454138,12.34461315,12.34134814,12.33536935,12.32665492,12.31541048,12.31487811,12.31407475,12.31225199,12.30938573,12.31419127,12.31632094,12.31101473,12.31794422,12.33604833,12.34649135,12.37037969,12.37053303],"lat":[44.1036323,44.10013643,44.09699862,44.08291259,44.07203505,44.07182742,44.07125785,44.07102603,44.06929237,44.0682641,44.06808102,44.066031,44.0613835,44.05720459,44.05422855,44.05616674,44.05303744,44.0530069,44.05332761,44.05467286,44.0571059,44.0688127,44.06887317,44.06879748,44.06835525,44.06666483,44.07356559,44.09132929,44.09636348,44.10978343,44.1042675,44.11036391,44.10423102,44.1036323]}]],[[{"lng":[12.05267591,12.0806399,12.10396455,12.09944015,12.10204613,12.11948347,12.13495278,12.13491222,12.12947849,12.11435241,12.11915698,12.1040784,12.09956518,12.09611982,12.09262111,12.08780979,12.08681499,12.08707573,12.08826352,12.09143856,12.09128976,12.09051603,12.08998375,12.08764029,12.08218852,12.05686596,12.04524094,11.99657517,12.00365338,12.00472133,12.01249705,12.01250166,12.01235895,12.01165169,12.01100859,12.00848711,12.00167623,11.99924565,11.99805275,11.99705778,12.00025607,12.01056181,12.01562922,12.02911761,12.03373535,12.03455879,12.04450671,12.04581878,12.04798837,12.05267591],"lat":[44.15091102,44.14331416,44.12440085,44.10935402,44.10590715,44.10288566,44.07873176,44.0778613,44.07012926,44.06070626,44.05097528,44.03556159,44.03425322,44.03452212,44.03755192,44.05494977,44.05958616,44.06147873,44.06511077,44.06853596,44.06903514,44.07072162,44.07105114,44.07160973,44.06738166,44.06931404,44.06118004,44.08281457,44.09014595,44.09174737,44.10808971,44.10891783,44.10955181,44.11063281,44.1110099,44.11229178,44.11499188,44.11659526,44.11821111,44.12250459,44.126922,44.12729884,44.13353908,44.13721518,44.1395053,44.13996056,44.14669982,44.14959974,44.15056147,44.15091102]}]],[[{"lng":[12.18120022,12.18605744,12.18910275,12.19963291,12.19786679,12.19747293,12.19416014,12.19696207,12.19773418,12.19836939,12.20074238,12.20131201,12.20172297,12.20277131,12.20065843,12.20341804,12.20366408,12.21600063,12.22121951,12.22186562,12.22341351,12.22376096,12.22175805,12.22006488,12.21982078,12.22254343,12.20197864,12.21193884,12.22387152,12.22494801,12.2255722,12.22760106,12.22863819,12.24575522,12.2497724,12.2507801,12.2574423,12.27018674,12.25615983,12.25561786,12.2551274,12.25474197,12.25084115,12.23651989,12.23120469,12.2266789,12.21857478,12.21109154,12.18600249,12.1732422,12.15826069,12.15763799,12.1558344,12.15625969,12.16428063,12.15217698,12.14577188,12.14527619,12.1449403,12.13471651,12.13415939,12.13396658,12.13388625,12.13451925,12.13438061,12.13395083,12.13372279,12.13312439,12.11416321,12.11261921,12.1124835,12.11102314,12.12182092,12.12929483,12.13353731,12.11990229,12.12071424,12.10926402,12.09770686,12.07654103,12.07841007,12.09121399,12.09523459,12.09725896,12.0973574,12.10187893,12.11808915,12.12072551,12.13365651,12.14997342,12.18120022],"lat":[44.05126381,44.05117674,44.04067304,44.02893747,44.02819909,44.02772159,44.02155617,44.01892206,44.01843227,44.0181804,44.01799684,44.01791784,44.01767225,44.01605831,44.00809599,44.00375117,44.00345617,43.99955309,44.00011717,44.00007192,43.99940701,43.99753359,43.98726379,43.98570003,43.97727116,43.9676872,43.96287315,43.94995313,43.94109991,43.94096147,43.94121392,43.94278611,43.94652004,43.95010394,43.9501877,43.94969986,43.94345993,43.92870686,43.92092879,43.92034228,43.91874083,43.91232539,43.91072415,43.91675899,43.93594093,43.93956211,43.93276856,43.93191696,43.94219016,43.93420882,43.93831553,43.93902599,43.94472975,43.94876035,43.95642491,43.96038799,43.95923225,43.95881376,43.9489107,43.94406919,43.94271605,43.94189306,43.94107598,43.93818665,43.93649789,43.93519525,43.9348864,43.93464174,43.94275913,43.94444878,43.94471358,43.94872372,43.95169704,43.94973681,43.95007958,43.96931434,43.97386566,43.97852657,43.97469941,43.98102471,43.99594629,43.99706777,44.00243262,44.00681618,44.02067805,44.0205653,44.0224138,44.02672872,44.02741634,44.0320544,44.05126381]}]],[[{"lng":[11.83352129,11.86428841,11.88495462,11.88861015,11.88879442,11.88765884,11.87525317,11.8747748,11.86800492,11.83766156,11.83142575,11.83897549,11.83322191,11.82985052,11.8293403,11.83169747,11.82733365,11.82477787,11.81615794,11.81084753,11.80684389,11.79638367,11.79489234,11.79380781,11.78645333,11.78497041,11.78378026,11.78317113,11.78548906,11.78489889,11.78475359,11.78325689,11.78069642,11.77864251,11.77829545,11.78571988,11.74485559,11.71588519,11.72144957,11.72186797,11.72022829,11.72861269,11.73373357,11.74413429,11.75283866,11.77138614,11.77379729,11.77601262,11.78081344,11.79297305,11.8060783,11.82214849,11.83352129],"lat":[44.1966154,44.18007456,44.1718747,44.1706569,44.1705082,44.16961864,44.16427802,44.16395697,44.14580648,44.12470583,44.1187117,44.11143889,44.08496919,44.0847107,44.08815346,44.09200229,44.09553157,44.09563987,44.09458342,44.09798236,44.09099557,44.08635467,44.08336619,44.0820513,44.08288827,44.08349165,44.08474507,44.08613738,44.0905463,44.09580041,44.09616407,44.09781211,44.09809056,44.09958104,44.10070586,44.11539776,44.12602482,44.12255729,44.13495383,44.14813312,44.15868757,44.17183872,44.17492121,44.18068557,44.1934851,44.19887013,44.18683781,44.18207548,44.18041012,44.19124076,44.19947202,44.19456542,44.1966154]}]],[[{"lng":[12.30241586,12.31632094,12.31419127,12.30871582,12.30846341,12.30705996,12.30684603,12.30610208,12.30001193,12.29959816,12.28264107,12.2746931,12.27384551,12.27614267,12.28439047,12.29199043,12.30241586],"lat":[44.09727323,44.09132929,44.07356559,44.06584699,44.06020054,44.05652303,44.05626815,44.05591158,44.05325196,44.05321889,44.05651678,44.05953599,44.06612338,44.06892785,44.06928214,44.07728436,44.09727323]}]],[[{"lng":[11.77031067,11.77321042,11.77395753,11.77426384,11.78845544,11.79721561,11.7823461,11.77518405,11.76755226,11.76075189,11.76024355,11.75887034,11.7536029,11.72185956,11.71668702,11.70545629,11.70248812,11.69919422,11.69516524,11.64563981,11.66069703,11.68188876,11.68575592,11.69296876,11.72405612,11.72605891,11.73090848,11.72999576,11.75470145,11.75834639,11.75669021,11.75808701,11.76156494,11.77031067],"lat":[44.03953563,44.0369534,44.03691723,44.03706285,44.05064475,44.01486648,44.00960498,43.99892162,43.99653201,43.99188901,43.99141512,43.98654164,43.98211325,43.9655074,43.96442418,43.96469984,43.96270843,43.95639411,43.95358127,43.98937976,44.0197067,44.02120404,44.01713979,44.01389083,44.01341446,44.01383481,44.01786709,44.02517486,44.02648083,44.03131748,44.04183994,44.04879858,44.05270734,44.03953563]}]],[[{"lng":[11.98557048,12.00499419,12.00000044,12.00381496,12.00025607,11.99705778,11.99924565,12.00167623,12.01100859,12.01250166,12.00365338,11.99657517,11.98821476,11.98761125,11.98784663,11.98955414,11.99026639,11.98874936,11.97363565,11.96541199,11.95204562,11.90440081,11.88991624,11.89215199,11.891314,11.8886259,11.89710541,11.8938104,11.90939323,11.91323653,11.91206342,11.9115384,11.91487837,11.91290963,11.91061396,11.91014569,11.90858148,11.98557048],"lat":[44.15989732,44.15259947,44.14975091,44.13006042,44.126922,44.12250459,44.11659526,44.11499188,44.1110099,44.10891783,44.09014595,44.08281457,44.07676772,44.07519901,44.07491375,44.0741038,44.07312183,44.06134973,44.0502477,44.03929796,44.03231598,44.03433938,44.04667194,44.0539201,44.05666584,44.05733709,44.06915916,44.07890289,44.08922196,44.09328161,44.09711975,44.10700034,44.12104962,44.12371072,44.12403036,44.12442042,44.1279444,44.15989732]}]],[[{"lng":[11.86521123,11.85602698,11.85240863,11.85185078,11.85140033,11.85039661,11.84960017,11.8697805,11.86795577,11.85304873,11.85021463,11.85118271,11.85050069,11.84940505,11.840777,11.83200524,11.8304279,11.82873433,11.81110865,11.80682714,11.80224897,11.79208497,11.77077523,11.76825388,11.74494591,11.72526545,11.71990607,11.71393668,11.71703165,11.68219866,11.68904209,11.69259967,11.69453546,11.69516524,11.69589074,11.69919422,11.70113767,11.70156065,11.70248812,11.70324262,11.7823461,11.79721561,11.80882919,11.86521123],"lat":[44.03477241,44.02843847,44.02742156,44.02723743,44.02695159,44.02553618,44.01907388,43.98462696,43.98085101,43.97737571,43.97338611,43.96236019,43.95956825,43.95829015,43.95560617,43.95197975,43.9463199,43.94476834,43.94410527,43.94500288,43.94701498,43.94444601,43.91892805,43.91773777,43.91655385,43.90723882,43.90139748,43.89866339,43.9218176,43.93784964,43.95003885,43.95323965,43.95343408,43.95358127,43.95391527,43.95639411,43.95885102,43.96074067,43.96270843,43.96343782,44.00960498,44.01486648,44.01225162,44.03477241]}]],[[{"lng":[11.84668807,11.86160974,11.85033151,11.84363495,11.84196041,11.8549157,11.87041143,11.89183537,11.91323653,11.8938104,11.89710541,11.89494987,11.89234203,11.89017762,11.8886259,11.88798913,11.88524065,11.88148783,11.88159111,11.87945,11.87637598,11.87592402,11.86740693,11.86521123,11.86309572,11.84504149,11.80882919,11.79750425,11.79721561,11.79820125,11.79783527,11.78845544,11.79266414,11.80271003,11.81888121,11.82477973,11.82617086,11.82649231,11.82051684,11.79489234,11.79593659,11.79638367,11.79714538,11.80228102,11.80684389,11.81084753,11.82733365,11.82985052,11.83267001,11.83322191,11.83759902,11.83893103,11.83897549,11.84668807],"lat":[44.11230916,44.10409456,44.10052346,44.09739541,44.09321473,44.09012758,44.0769098,44.09780506,44.09328161,44.07890289,44.06915916,44.0608231,44.05854843,44.05768494,44.05733709,44.05733521,44.05446974,44.04993699,44.04769265,44.04345226,44.03925333,44.03894061,44.03493245,44.03477241,44.03711135,44.03172877,44.01225162,44.01440232,44.01486648,44.0185982,44.02115548,44.05064475,44.05859955,44.05221333,44.05364278,44.0574493,44.05887334,44.05931553,44.07383205,44.08336619,44.08587947,44.08635467,44.08661511,44.08737972,44.09099557,44.09798236,44.09553157,44.0847107,44.08465879,44.08496919,44.08900182,44.09177762,44.11143889,44.11230916]}]],[[{"lng":[12.2408761,12.24695615,12.2639926,12.26726876,12.27121306,12.27614267,12.28264107,12.30001193,12.30684603,12.30846341,12.30871582,12.31487811,12.32665492,12.34461315,12.35535252,12.35810689,12.34685405,12.32346331,12.31387334,12.30756557,12.30097896,12.29474772,12.29078184,12.2888818,12.28486818,12.28292042,12.28122733,12.25316938,12.23945187,12.23535764,12.21603385,12.20779431,12.20074238,12.19696207,12.19786679,12.19963291,12.20522356,12.21298318,12.23256528,12.22663265,12.21944922,12.20633123,12.20187053,12.20673648,12.22925353,12.2408761],"lat":[44.08411612,44.07876506,44.07561627,44.07128192,44.06870558,44.06892785,44.05651678,44.05325196,44.05626815,44.06020054,44.06584699,44.06887317,44.0571059,44.0530069,44.05616674,44.05432118,44.04492867,44.03131571,44.02717416,44.02190139,44.02147089,44.02452287,44.02433118,44.02494412,44.02727443,44.03245355,44.03274486,44.00962737,44.01359169,44.01400491,44.0153883,44.01828502,44.01799684,44.01892206,44.02819909,44.02893747,44.02592989,44.02782706,44.04572601,44.05003865,44.04107321,44.03680812,44.0422899,44.05916256,44.06560136,44.08411612]}]],[[{"lng":[12.45006944,12.42872041,12.44264495,12.4393894,12.44121658,12.44524974,12.44720995,12.4499932,12.45228993,12.45332885,12.4533292,12.45239574,12.45226026,12.45219904,12.4550878,12.45452355,12.45207991,12.42531067,12.40895309,12.40564787,12.42116607,12.42627675,12.45006944],"lat":[44.16279826,44.14734463,44.14034887,44.12756866,44.12502881,44.12388981,44.1221381,44.11864194,44.11465629,44.11224813,44.11075366,44.10958661,44.10937689,44.10872154,44.10311995,44.09319055,44.08719968,44.08849685,44.09875941,44.10875663,44.13578681,44.14870541,44.16279826]}]],[[{"lng":[11.99408431,11.99512217,12.00167493,12.01981501,12.04804376,12.04514366,12.04481791,12.05225622,12.0308448,12.03125268,12.03073254,12.02522278,12.01103565,12.00872504,12.00849189,12.00206737,11.98533638,11.96985042,11.95945853,11.9587225,11.95205894,11.91341897,11.86710685,11.88474958,11.81592787,11.84007386,11.79042681,11.7894628,11.78981575,11.788468,11.71016673,11.71045783,11.71393668,11.72471414,11.72526545,11.74494591,11.74561563,11.77077523,11.79208497,11.80224897,11.82873433,11.84963601,11.85050069,11.85118271,11.84972725,11.8496551,11.85021463,11.85028638,11.85304873,11.85756926,11.86795577,11.86735667,11.86723104,11.86765487,11.86791366,11.91700063,11.92936411,11.93640353,11.95575819,11.96252752,11.96661081,11.97398582,11.97548634,11.97585043,11.99408431],"lat":[43.95663123,43.95595579,43.95689105,43.94447461,43.94507487,43.94123593,43.93559071,43.91905152,43.92074734,43.94053426,43.94133133,43.94103631,43.93841337,43.93607947,43.9146673,43.90950657,43.90664116,43.9072431,43.90912451,43.90909856,43.90575533,43.93767807,43.91769314,43.89051842,43.88466476,43.87543267,43.85678665,43.85399219,43.8476903,43.84508476,43.87744594,43.8939109,43.89866339,43.90689183,43.90723882,43.91655385,43.91676282,43.91892805,43.94444601,43.94701498,43.94476834,43.95842845,43.95956825,43.96236019,43.96502543,43.96872748,43.97338611,43.97384349,43.97737571,43.98012563,43.98085101,43.97934905,43.97881202,43.97777503,43.97745342,43.95561978,43.95410582,43.94622735,43.94075821,43.93381243,43.9325,43.93449586,43.93510498,43.9354106,43.95663123]}]],[[{"lng":[12.1732422,12.1702824,12.15845388,12.16805073,12.15243524,12.147716,12.14215528,12.14300235,12.14313652,12.13825978,12.12362155,12.10164635,12.09667854,12.09246894,12.09009708,12.08274923,12.08085662,12.06880128,12.07101432,12.08287665,12.08356766,12.08859112,12.09961184,12.10539807,12.1061979,12.1124835,12.13372279,12.13451925,12.13396658,12.13471651,12.1426155,12.1449403,12.14710166,12.14577188,12.16428063,12.15763799,12.1732422],"lat":[43.93420882,43.92534388,43.91923302,43.89755736,43.86864499,43.86703063,43.86233261,43.85852831,43.85314073,43.84764094,43.85736768,43.85252893,43.85317696,43.85718041,43.86424906,43.87209136,43.88848307,43.8915357,43.90212685,43.92181195,43.92578165,43.92801366,43.92554522,43.92853902,43.93934793,43.94471358,43.9348864,43.93818665,43.94189306,43.94406919,43.94665196,43.9489107,43.954442,43.95923225,43.95642491,43.93902599,43.93420882]}],[{"lng":[12.09780559,12.09523286,12.09725896,12.09523459,12.07841007,12.07654103,12.09770686,12.12071424,12.13353731,12.12182092,12.11102314,12.10999539,12.10513637,12.10278146,12.0859772,12.07862793,12.06085362,12.05127048,12.04514366,12.06389645,12.06610854,12.04294837,12.03266297,12.03592723,12.03655851,12.03796584,12.05472751,12.09780559],"lat":[44.0229682,44.0119848,44.00681618,44.00243262,43.99594629,43.98102471,43.97469941,43.97386566,43.95007958,43.95169704,43.94872372,43.94872623,43.95054054,43.95030748,43.93936515,43.93553922,43.92930991,43.92948541,43.94123593,43.95458085,43.97043879,43.96924888,43.97460929,43.98068059,44.00526897,44.00620386,44.00639575,44.0229682]}],[{"lng":[12.06297146,12.06885418,12.08383265,12.08321581,12.06795631,12.06304682,12.06089622,12.06297146],"lat":[43.85893892,43.85840281,43.85835935,43.8543606,43.85157555,43.84753892,43.84684034,43.85893892]}]],[[{"lng":[12.44312171,12.42627675,12.40564787,12.42531067,12.4091928,12.40394262,12.39987233,12.39264511,12.3737316,12.37047371,12.37131994,12.36589524,12.36225417,12.36427183,12.37337001,12.38962756,12.39191468,12.39781471,12.4026967,12.40354208,12.40426411,12.40514067,12.40942435,12.44312171],"lat":[44.16838242,44.14870541,44.10875663,44.08849685,44.07733706,44.07257134,44.06648074,44.06367987,44.06634725,44.066031,44.0682641,44.07102603,44.07182742,44.08291259,44.10013643,44.10326478,44.10502438,44.115094,44.12698522,44.12973284,44.13315935,44.13818374,44.1465724,44.16838242]}]],[[{"lng":[12.2888818,12.31387334,12.31883673,12.32360904,12.32376635,12.31813872,12.32492041,12.32733053,12.33626523,12.35343662,12.3528725,12.35079357,12.34653033,12.34306597,12.33547037,12.32606432,12.3231648,12.32282757,12.32095269,12.31252582,12.29476195,12.27796308,12.27719323,12.27018674,12.25710958,12.2497724,12.22494801,12.21193884,12.20954159,12.20197864,12.2019197,12.20393902,12.22254343,12.21982078,12.22006488,12.22376096,12.22186562,12.20366408,12.20065843,12.20074238,12.20685341,12.20779431,12.20823354,12.20927297,12.2138173,12.21603385,12.2341206,12.23535764,12.23866059,12.23945187,12.24514597,12.25316938,12.28122733,12.28486818,12.2888818],"lat":[44.02494412,44.02717416,44.01573133,44.01362081,44.00929485,44.00041529,43.98777132,43.98761105,43.98992505,43.98834148,43.98606231,43.98465588,43.97397748,43.97203085,43.96979527,43.96520818,43.96194354,43.96060115,43.95660159,43.94023474,43.9281896,43.92474944,43.92547378,43.92870686,43.93965216,43.9501877,43.94096147,43.94995313,43.9558815,43.96287315,43.96548567,43.96664441,43.9676872,43.97727116,43.98570003,43.99753359,44.00007192,44.00345617,44.00809599,44.01799684,44.01841951,44.01828502,44.01810163,44.01701906,44.01569382,44.0153883,44.01396795,44.01400491,44.01372218,44.01359169,44.00935161,44.00962737,44.03274486,44.02727443,44.02494412]}],[{"lng":[12.20887415,12.21109154,12.21789904,12.21857478,12.21933849,12.22022043,12.2266789,12.23651989,12.22223625,12.21908817,12.20319861,12.17601138,12.1702824,12.1732422,12.17397762,12.18570341,12.18600249,12.1886976,12.19176722,12.20887415],"lat":[43.93215038,43.93191696,43.93248152,43.93276856,43.93353029,43.9355581,43.93956211,43.91675899,43.91528955,43.90805634,43.91648858,43.92040219,43.92534388,43.93420882,43.93515169,43.94218951,43.94219016,43.9408635,43.93792376,43.93215038]}]],[[{"lng":[11.77455607,11.78571988,11.78564745,11.7836302,11.77829545,11.77864251,11.78325689,11.78489889,11.78548906,11.78317113,11.78378026,11.79489234,11.80219185,11.82051684,11.82617086,11.79266414,11.77996218,11.77395753,11.76850868,11.76156494,11.75808701,11.75669021,11.75869298,11.75834639,11.75470145,11.73954202,11.72999576,11.72604025,11.73090848,11.72605891,11.68575592,11.75156105,11.77455607],"lat":[44.11529694,44.11539776,44.11199643,44.10815637,44.10070586,44.09958104,44.09781211,44.09580041,44.0905463,44.08613738,44.08474507,44.08336619,44.08004522,44.07383205,44.05887334,44.05859955,44.04945642,44.03691723,44.05045824,44.05270734,44.04879858,44.04183994,44.03955586,44.03131748,44.02648083,44.02890728,44.02517486,44.02150434,44.01786709,44.01383481,44.01713979,44.11942674,44.11529694]}]],[[{"lng":[12.0833617,12.09009708,12.09667854,12.11798832,12.12362155,12.12616641,12.13401814,12.13825978,12.15055874,12.14946812,12.14852146,12.14620946,12.1308041,12.11273702,12.10500663,12.1040904,12.10363175,12.10289302,12.09619099,12.10744557,12.07054291,12.05300257,11.95146264,11.95117234,11.96168234,11.9623265,11.96549381,11.98209439,11.98625539,12.00568253,12.01809896,12.0193954,12.02051366,12.02110047,12.02132509,12.02173281,12.02316644,12.03046608,12.03435069,12.0346257,12.0352629,12.03728036,12.03941807,12.03996411,12.04713902,12.05446542,12.06089622,12.06795631,12.08321581,12.08383265,12.05495173,12.06033368,12.08274923,12.0833617],"lat":[43.87166067,43.86424906,43.85317696,43.85766572,43.85736768,43.85701894,43.85276125,43.84764094,43.83714889,43.83329454,43.83134894,43.82921638,43.82475929,43.79643411,43.79507145,43.79411722,43.79355779,43.79227068,43.76530394,43.75377137,43.7407306,43.75696563,43.77757201,43.78698508,43.79020687,43.79041524,43.79238576,43.81052709,43.81792703,43.82001021,43.82433733,43.8258786,43.82906317,43.83132545,43.83183269,43.83227206,43.83332349,43.83674025,43.83976117,43.84003297,43.8410694,43.84454499,43.85087135,43.85133396,43.85663462,43.85976102,43.84684034,43.85157555,43.8543606,43.85835935,43.8614856,43.86623017,43.87209136,43.87166067]}]],[[{"lng":[9.71762804,9.72171335,9.73160438,9.73761572,9.75414339,9.7619278,9.77964649,9.79208693,9.79925736,9.79551642,9.75929259,9.7593435,9.76353369,9.76803607,9.76216622,9.76515641,9.75239834,9.72299616,9.70201141,9.69654209,9.68666166,9.67521222,9.66762784,9.6645641,9.65447955,9.65229747,9.66111257,9.67015664,9.67021068,9.66789753,9.6663234,9.68922688,9.6973972,9.70473612,9.70695664,9.70879388,9.71121658,9.71842938,9.71134172,9.71762804],"lat":[44.78376341,44.77077449,44.76343777,44.76615378,44.76850548,44.77044075,44.78319481,44.78522471,44.77446213,44.76709745,44.7347199,44.73378333,44.72493315,44.71007491,44.70541629,44.68134207,44.67832103,44.67802483,44.67138147,44.67207664,44.67510726,44.68761677,44.70298333,44.70550385,44.71123354,44.71815079,44.72277229,44.73288315,44.73537646,44.73921245,44.74000837,44.77115523,44.77693905,44.77347316,44.7721271,44.7704503,44.76912092,44.76887773,44.78199385,44.78376341]}]],[[{"lng":[9.38974608,9.40047391,9.43286447,9.40755579,9.40339008,9.39446742,9.3882981,9.38057889,9.37510526,9.37560865,9.37280733,9.35695826,9.34704736,9.32961543,9.32583513,9.32191816,9.31417986,9.31838167,9.31800858,9.27740952,9.28850607,9.28954634,9.29584277,9.2988341,9.30950524,9.31241678,9.31459708,9.30375977,9.29128997,9.30564301,9.31525809,9.32758604,9.34949191,9.38262916,9.38974608],"lat":[44.97025404,44.97059619,44.95406751,44.9517031,44.94920186,44.94533969,44.94401954,44.94020169,44.93269417,44.92826355,44.92422183,44.91848419,44.9137617,44.90274088,44.9017255,44.90343798,44.88732791,44.87925944,44.87780216,44.89560889,44.91112913,44.90924992,44.9093508,44.90968509,44.90584883,44.9057959,44.91275745,44.91889914,44.92507098,44.93396342,44.93749306,44.95909902,44.97007943,44.95501204,44.97025404]}]],[[{"lng":[9.22503085,9.23490407,9.2452712,9.28508507,9.29248743,9.3037783,9.30478975,9.30672114,9.3057747,9.31483315,9.31890926,9.32373594,9.32654783,9.35671778,9.35792887,9.37663159,9.37068207,9.38288932,9.39337447,9.40273962,9.3985851,9.39485413,9.39486331,9.39538737,9.40562892,9.4031449,9.34222418,9.30041024,9.27223047,9.24564231,9.25653892,9.24550262,9.20297322,9.20193134,9.21741798,9.21989107,9.22503085],"lat":[44.67337513,44.67091638,44.65617118,44.65944113,44.64476199,44.64379625,44.6443067,44.64701576,44.66564426,44.66381018,44.66426699,44.66584683,44.66577581,44.65427052,44.6522682,44.63879446,44.61717655,44.61839211,44.61825746,44.6166764,44.61542162,44.61166254,44.61115837,44.61038235,44.6008068,44.59145001,44.57778043,44.60777737,44.59591522,44.59971154,44.61059408,44.61964781,44.61349411,44.67161711,44.67412884,44.67419612,44.67337513]}]],[[{"lng":[9.3571145,9.35659857,9.38117737,9.3969456,9.41338705,9.44505177,9.44789634,9.44628586,9.44537432,9.43800801,9.43070359,9.42963857,9.42008708,9.41134601,9.4063738,9.40407264,9.40222798,9.3980627,9.38752212,9.37995024,9.3767442,9.36878179,9.36309823,9.35826755,9.34167518,9.31417986,9.3571145],"lat":[44.9171154,44.91358823,44.89654906,44.88185804,44.89513171,44.86759248,44.85569863,44.85529084,44.85524937,44.85517884,44.85491856,44.85466151,44.85168135,44.84508763,44.84518644,44.84544666,44.84584928,44.84553978,44.83988672,44.82748022,44.82661764,44.82571641,44.82240383,44.82429152,44.86981198,44.88732791,44.9171154]}]],[[{"lng":[9.75753568,9.81326234,9.82381971,9.81701232,9.80879775,9.80212211,9.8008748,9.79750955,9.79289125,9.79194477,9.79110643,9.76002394,9.73178774,9.72279184,9.70868692,9.69805906,9.69142684,9.68746563,9.66980065,9.66592648,9.63104726,9.61502343,9.62113313,9.59973809,9.629192,9.64361493,9.65431152,9.6611495,9.66975088,9.67179083,9.67689296,9.72768161,9.75037187,9.74506913,9.75753568],"lat":[45.11253851,45.07810328,45.05242211,45.04703394,45.05072015,45.04828273,45.04426768,45.03527145,45.02996553,45.02576824,45.02388367,44.99243528,44.99567135,45.00366828,44.99891367,44.99613454,45.00073884,45.00569577,45.00445047,44.99661009,45.00083529,45.0113176,45.02981057,45.03026942,45.04922242,45.06595734,45.07051445,45.07192434,45.07200926,45.0726364,45.07760824,45.06213546,45.07904693,45.11093871,45.11253851]}]],[[{"lng":[9.45600998,9.45118695,9.45094382,9.45128749,9.45167749,9.45199648,9.45742329,9.45778809,9.45798577,9.45804421,9.45747587,9.45521345,9.45169105,9.44767175,9.42790416,9.42434783,9.41529251,9.41267684,9.41159671,9.41152498,9.41365577,9.41338705,9.41225463,9.39987963,9.3969456,9.38788115,9.38117737,9.36054125,9.35705329,9.35659857,9.35624629,9.3571145,9.35695826,9.36115759,9.37133271,9.37280733,9.37395409,9.37560865,9.37487381,9.37510526,9.38057889,9.42695578,9.43213606,9.43286447,9.44060995,9.449173,9.45834272,9.45488877,9.45600998],"lat":[44.95036766,44.94476961,44.93962146,44.93818878,44.93781817,44.93788892,44.93518472,44.93484118,44.93420125,44.93357989,44.93223187,44.92978337,44.92823102,44.92794079,44.90753704,44.90625401,44.91000512,44.90912292,44.90691281,44.90573382,44.89974137,44.89513171,44.89262425,44.88135268,44.88185804,44.8877225,44.89654906,44.91199151,44.91337076,44.91358823,44.91398543,44.9171154,44.91848419,44.9193802,44.92347948,44.92422183,44.92519931,44.92826355,44.93218181,44.93269417,44.94020169,44.950525,44.95329611,44.95406751,44.96423037,44.9693348,44.97746309,44.96088639,44.95036766]}]],[[{"lng":[9.46335405,9.47266024,9.48897744,9.49053764,9.49019753,9.48891474,9.50931643,9.51152982,9.50941679,9.49596505,9.50273574,9.47702243,9.46121266,9.45340381,9.44888315,9.44505177,9.43180214,9.43097149,9.43329565,9.41338705,9.41365577,9.41152498,9.41159671,9.41529251,9.42790416,9.45521345,9.45798577,9.45742329,9.45167749,9.45128749,9.45118695,9.46335405],"lat":[44.9540379,44.95413479,44.94557726,44.94244689,44.94120608,44.93940219,44.92889777,44.92413482,44.91740178,44.90444411,44.88921909,44.87769876,44.87825881,44.86886493,44.85727911,44.86759248,44.86643707,44.86707935,44.87333115,44.89513171,44.89974137,44.90573382,44.90691281,44.91000512,44.90753704,44.92978337,44.93420125,44.93518472,44.93781817,44.93818878,44.94476961,44.9540379]}]],[[{"lng":[9.67600168,9.68746563,9.68846637,9.69805906,9.72279184,9.73178774,9.76037332,9.73256986,9.7153811,9.7082964,9.70616196,9.70284123,9.70062055,9.70033259,9.6999743,9.69945294,9.69774116,9.69493349,9.6890568,9.68831297,9.66721348,9.65852097,9.65593627,9.65109711,9.6476152,9.6641015,9.67325907,9.66980065,9.67600168],"lat":[45.00628631,45.00569577,45.00555472,44.99613454,45.00366828,44.99567135,44.98815707,44.96344857,44.93425622,44.93628983,44.93479373,44.93168753,44.92936066,44.92860626,44.92832039,44.92817055,44.928082,44.92854022,44.92986311,44.93018267,44.94769965,44.94467145,44.94588359,44.95736173,44.95890287,44.96583869,45.00397105,45.00445047,45.00628631]}]],[[{"lng":[9.70036713,9.69722719,9.69981773,9.71908475,9.68374435,9.66947098,9.66446982,9.66368911,9.66299561,9.6606415,9.659992,9.65901338,9.64796743,9.62797083,9.61874029,9.61802411,9.61186792,9.61107349,9.61052544,9.62857178,9.65051534,9.66712491,9.68611416,9.68810735,9.68995346,9.70036713],"lat":[44.89911553,44.89082587,44.88619198,44.86845527,44.8302154,44.83318065,44.83063524,44.82764208,44.82673689,44.82440998,44.82402664,44.8236182,44.82106178,44.8199582,44.82257421,44.82657502,44.83534023,44.83678482,44.84119879,44.86244484,44.87664423,44.89406638,44.90515238,44.9065897,44.90843298,44.89911553]}]],[[{"lng":[9.81947858,9.81598201,9.81397147,9.81136175,9.81075383,9.80117635,9.77636229,9.7537575,9.76037332,9.76013097,9.76002394,9.75867938,9.75853471,9.79750955,9.84130954,9.83365345,9.83186424,9.81917364,9.81947858],"lat":[44.99206913,44.9879353,44.98749054,44.98593379,44.98510094,44.94223841,44.97353844,44.97795679,44.98815707,44.99189445,44.99243528,44.99533381,44.99782829,45.03527145,45.01969009,45.00988021,45.00725573,44.99292648,44.99206913]}]],[[{"lng":[9.63509288,9.63049343,9.63572712,9.65109711,9.65852097,9.65608141,9.64322573,9.63774275,9.63537772,9.631019,9.62195913,9.60751328,9.6055651,9.60944514,9.60461324,9.57891242,9.56808709,9.55864112,9.57907804,9.58065186,9.582873,9.58862075,9.5979174,9.59415449,9.60699387,9.62751525,9.63509288],"lat":[44.96963146,44.96303154,44.96275946,44.95736173,44.94467145,44.92412502,44.92234375,44.91348953,44.8977582,44.90222037,44.90072173,44.88685535,44.88341791,44.87793305,44.86748932,44.85574878,44.87203388,44.87838189,44.88867745,44.89155011,44.90332244,44.90801002,44.92864828,44.95697905,44.95662347,44.97015045,44.96963146]}]],[[{"lng":[9.55744662,9.57545086,9.63248721,9.6155048,9.57873475,9.57785261,9.57457333,9.56761297,9.55001675,9.54744182,9.54260914,9.54163282,9.53614051,9.53473271,9.53446622,9.53351594,9.52986079,9.52929976,9.53243065,9.53368861,9.53472338,9.53424656,9.53370426,9.52884409,9.52590366,9.53150647,9.52809749,9.52680615,9.52679916,9.52711307,9.53202619,9.54740299,9.55133039,9.53721564,9.55744662],"lat":[45.10750332,45.07023691,45.05324601,45.04230261,45.03231383,45.03216977,45.03756039,45.04336534,45.04038185,45.02749464,45.02897598,45.02909765,45.02938461,45.02943622,45.02944648,45.02955444,45.03093072,45.03600135,45.03563573,45.03575588,45.03644417,45.03704952,45.03743913,45.03882102,45.04345252,45.05235996,45.06082482,45.06931944,45.0699406,45.07230662,45.07843202,45.08664994,45.09211309,45.1260537,45.10750332]}]],[[{"lng":[9.76187238,9.77636229,9.7957968,9.77962816,9.7725179,9.77041063,9.76299154,9.76273858,9.76631206,9.76644084,9.76328652,9.76216793,9.76065344,9.75903696,9.75776565,9.75258092,9.7375975,9.71908475,9.69981773,9.69722719,9.70218329,9.70200805,9.68995346,9.69681816,9.69845771,9.70332183,9.71490442,9.71947708,9.7232827,9.72456058,9.72549163,9.73256986,9.73660974,9.74124401,9.74316339,9.75177054,9.7537575,9.76187238],"lat":[44.97683171,44.97353844,44.94277112,44.93001885,44.92899595,44.92966732,44.92635939,44.92447968,44.9174072,44.91607405,44.91131511,44.90815387,44.90281678,44.89644512,44.89414904,44.88794492,44.88077804,44.86845527,44.88619198,44.89082587,44.89640376,44.89891641,44.90843298,44.91986883,44.92133513,44.92433895,44.93362908,44.93851543,44.94483777,44.94767427,44.95114311,44.96344857,44.96504293,44.96452683,44.96489244,44.97051631,44.97795679,44.97683171]}]],[[{"lng":[9.93571695,9.94263142,9.95428751,9.96335042,9.96889912,9.96758303,9.97728503,9.98084853,9.98126149,9.98146101,9.98396075,9.98476179,9.94794766,9.92893764,9.93429038,9.93431595,9.9326514,9.9202954,9.90762024,9.88125811,9.88393778,9.8869939,9.88749854,9.887952,9.89217245,9.89669116,9.89702115,9.89549693,9.89644289,9.89755196,9.89873787,9.89972366,9.90631807,9.91053777,9.93571695],"lat":[45.05727619,45.03827957,45.03833579,45.04198643,45.04123735,45.03848496,45.03562079,45.03464505,45.02240803,45.02071397,45.01771285,45.01705782,45.005766,45.01193543,45.02191982,45.02271177,45.0233825,45.02698445,45.00968537,45.01762442,45.01938608,45.02332319,45.02558773,45.02864481,45.02739667,45.03306843,45.033876,45.03952309,45.04155908,45.04346775,45.04541181,45.0467363,45.04860154,45.05844292,45.05727619]}]],[[{"lng":[9.50505162,9.53202619,9.52679916,9.53150647,9.52884409,9.50355858,9.500302,9.48840252,9.46214911,9.4583928,9.46027722,9.47189918,9.47351662,9.4739373,9.47520873,9.48263648,9.48369378,9.47969833,9.48352062,9.48247423,9.48020561,9.50505162],"lat":[45.10207599,45.07843202,45.0699406,45.05235996,45.03882102,45.04697391,45.04630408,45.03540941,45.03446547,45.03913479,45.04761564,45.06207006,45.06269349,45.06271804,45.06223732,45.06297317,45.06635957,45.07882584,45.08771205,45.09201066,45.09880751,45.10207599]}]],[[{"lng":[9.58727549,9.58862075,9.57970493,9.57907804,9.57835311,9.56633855,9.55864112,9.57982104,9.57295885,9.55891205,9.55834198,9.56059095,9.56500306,9.55919878,9.55503421,9.54481419,9.53966066,9.53517169,9.53314351,9.53068631,9.52975762,9.51939495,9.51581804,9.50457469,9.49837297,9.47564771,9.47989254,9.47688957,9.47153836,9.45662305,9.45153006,9.44888315,9.46121266,9.50071154,9.50273574,9.50227733,9.50870942,9.51500318,9.51643243,9.51986019,9.54095712,9.58727549],"lat":[44.91646982,44.90801002,44.88931342,44.88867745,44.88836605,44.88607674,44.87838189,44.85044193,44.84501229,44.82918416,44.82779163,44.82098401,44.81557897,44.80388674,44.80342094,44.80845735,44.80909397,44.80229146,44.80036547,44.79852246,44.79789664,44.79844834,44.7957459,44.81933678,44.8209664,44.81838067,44.83151503,44.84321235,44.84635831,44.85013678,44.85426198,44.85727911,44.87825881,44.89090236,44.88921909,44.88747471,44.88308026,44.88316006,44.89430714,44.89944974,44.91117138,44.91646982]},{"lng":[9.48052555,9.48155359,9.4821116,9.48016569,9.48052555],"lat":[44.83014404,44.83016672,44.83090253,44.83127081,44.83014404]}]],[[{"lng":[9.92507849,9.94849146,9.93691155,9.89903639,9.8918396,9.88868326,9.88216705,9.87667338,9.87333358,9.87252041,9.88066133,9.86500696,9.85814665,9.85613268,9.85539638,9.85524753,9.85375602,9.84978305,9.83646923,9.82326066,9.81975276,9.8141446,9.82006808,9.81626489,9.79938341,9.79109082,9.78696656,9.76803607,9.76353369,9.75929259,9.79925736,9.77964649,9.78336482,9.7841356,9.78441995,9.80158783,9.8401081,9.86251992,9.86302176,9.86381862,9.89333545,9.90722601,9.90823856,9.9127985,9.91487473,9.92022574,9.90901028,9.91508277,9.91911371,9.92507849],"lat":[44.85794328,44.83771313,44.83681792,44.80701027,44.80444707,44.80394054,44.80366699,44.78741537,44.78473129,44.78277504,44.76868712,44.7621091,44.76387129,44.76610995,44.76759185,44.76778199,44.76775715,44.76655349,44.75815367,44.75867276,44.76167775,44.7572116,44.7509178,44.73920612,44.73136753,44.72244099,44.71720316,44.71007491,44.72493315,44.7347199,44.77446213,44.78319481,44.78895777,44.79733351,44.79779066,44.79857166,44.81305831,44.82675454,44.82986548,44.83070565,44.83688243,44.83494212,44.83497008,44.836113,44.83699659,44.84092353,44.85061261,44.85753418,44.85766755,44.85794328]}]],[[{"lng":[9.66721348,9.6785605,9.68392695,9.6890568,9.69945294,9.70033259,9.70616196,9.7082964,9.7153811,9.70332183,9.701724,9.69845771,9.69681816,9.68995346,9.68810735,9.67649449,9.66712491,9.65811238,9.65051534,9.64683244,9.63973778,9.62857178,9.61186792,9.56795019,9.60461324,9.60944514,9.60920271,9.60627829,9.6055651,9.60572197,9.60751328,9.61692225,9.62195913,9.631019,9.63256826,9.63497028,9.63537772,9.63591569,9.64322573,9.65264197,9.65608141,9.65852097,9.66721348],"lat":[44.94769965,44.94139445,44.93647439,44.92986311,44.92817055,44.92860626,44.93479373,44.93628983,44.93425622,44.92433895,44.92319653,44.92133513,44.91986883,44.90843298,44.9065897,44.90036668,44.89406638,44.88558474,44.87664423,44.87450466,44.87177199,44.86244484,44.83534023,44.83879885,44.86748932,44.87793305,44.8813551,44.88260395,44.88341791,44.8838852,44.88685535,44.89637407,44.90072173,44.90222037,44.89796284,44.89756243,44.8977582,44.89830435,44.92234375,44.92027388,44.92412502,44.94467145,44.94769965]}]],[[{"lng":[10.0407025,10.05022356,10.08347462,10.04545946,10.03400763,10.03102302,10.0073774,9.997304,9.9908842,9.99586057,9.98084853,9.97728503,9.96907353,9.96758303,9.96644945,9.96889912,9.99018199,9.99349751,9.99407801,9.99463795,10.00770094,10.02243556,10.03886494,10.03967154,10.0407025],"lat":[45.06377312,45.04127903,45.0439638,45.0292472,45.00076129,44.98383775,44.99518328,45.00114174,45.00410522,45.01229861,45.03464505,45.03562079,45.03803123,45.03848496,45.03902568,45.04123735,45.05538563,45.05323242,45.05302032,45.05308745,45.06365803,45.05798197,45.06190248,45.06225521,45.06377312]}]],[[{"lng":[9.25631915,9.29850587,9.30478975,9.28508507,9.26406454,9.2452712,9.23626769,9.23490407,9.21989107,9.20788302,9.20193134,9.19939175,9.24048279,9.23508364,9.25631915],"lat":[44.68517509,44.68102155,44.6443067,44.65944113,44.6543873,44.65617118,44.6677972,44.67091638,44.67419612,44.67146389,44.67161711,44.67859991,44.68830633,44.71635982,44.68517509]}]],[[{"lng":[9.40407522,9.41453933,9.41528733,9.42545362,9.42150901,9.38185406,9.38262916,9.34949191,9.3362893,9.34746312,9.40407522],"lat":[45.02382052,45.00550029,45.00540755,45.00472392,44.97708287,44.97171319,44.95501204,44.97007943,44.96657234,44.99741085,45.02382052]}]],[[{"lng":[9.72812019,9.72838063,9.71704587,9.71150087,9.71853091,9.72218356,9.73307409,9.73536287,9.76346398,9.76255513,9.75606432,9.75452875,9.75513414,9.75700374,9.74512402,9.74231995,9.76047516,9.67497944,9.65528952,9.6219463,9.65645413,9.65552543,9.66757602,9.66795483,9.66391919,9.66617565,9.6741016,9.67772531,9.68286986,9.69856524,9.70560957,9.72812019],"lat":[44.51304472,44.50763648,44.5063128,44.49743488,44.49746288,44.497989,44.4910236,44.4731746,44.46897502,44.45529699,44.44497803,44.44186424,44.43703829,44.43129667,44.42354239,44.41638546,44.3900499,44.36471301,44.4116603,44.42658197,44.45817079,44.47501115,44.47574259,44.47918838,44.48355121,44.48734619,44.49101778,44.48796244,44.48587919,44.48521709,44.50493461,44.51304472]}]],[[{"lng":[9.68373281,9.70201141,9.71230068,9.72299616,9.74146677,9.76515641,9.78586329,9.81490905,9.81474301,9.81966841,9.83354556,9.83182567,9.79098535,9.7834584,9.76971003,9.74106996,9.74100698,9.77123842,9.80089339,9.82192613,9.80144098,9.80003555,9.78669087,9.78135146,9.78058277,9.74903329,9.7435135,9.72798442,9.70203186,9.69597791,9.69449786,9.69187234,9.684048,9.67164079,9.66088614,9.66004697,9.66282012,9.66344122,9.66125429,9.65944244,9.63812807,9.61601616,9.61600784,9.61786274,9.61620058,9.5915936,9.56950349,9.56732126,9.55536076,9.55340732,9.55236996,9.55255787,9.55383365,9.55869394,9.56328414,9.56764203,9.57616241,9.57661884,9.58094846,9.58497462,9.60176595,9.60228557,9.60217492,9.60658158,9.60978937,9.63179549,9.63503128,9.65355534,9.67521222,9.68373281],"lat":[44.68031919,44.67138147,44.67629156,44.67802483,44.67991392,44.68134207,44.67579104,44.6822222,44.67937864,44.66985491,44.66166133,44.65782536,44.62873616,44.62949924,44.63827106,44.6221571,44.6191867,44.609678,44.61040114,44.59909765,44.57517956,44.55638312,44.5478694,44.54669071,44.54663295,44.56030303,44.55778238,44.54609808,44.55310251,44.56152094,44.57034342,44.57614798,44.58585481,44.58705376,44.58627026,44.58669824,44.59506983,44.60379229,44.61206924,44.61233179,44.60173994,44.59959273,44.5928409,44.58835664,44.58231594,44.56800151,44.58490799,44.58590013,44.59060421,44.59053268,44.5967314,44.59794583,44.59960511,44.6045058,44.60745407,44.60720743,44.60990151,44.61017829,44.61466658,44.62275723,44.62895371,44.62922104,44.6294917,44.63257422,44.6343036,44.64061171,44.66328882,44.67172757,44.68761677,44.68031919]}]],[[{"lng":[9.66092052,9.66282012,9.66088614,9.65374216,9.65385147,9.65679596,9.65271644,9.66752102,9.65955327,9.65821672,9.64489851,9.61791616,9.61782521,9.60593033,9.60381868,9.60604442,9.60532648,9.5928022,9.58441074,9.57795886,9.56601575,9.55890163,9.55830404,9.54158421,9.53784605,9.53584527,9.53310942,9.52766495,9.51213298,9.51159406,9.51141107,9.50842997,9.50621347,9.49680342,9.49632331,9.50460767,9.49109549,9.49333844,9.51474364,9.54003787,9.54141006,9.54598661,9.54909803,9.55340732,9.55536076,9.56732126,9.58179727,9.5915936,9.60249216,9.60798707,9.60975419,9.61430492,9.61620058,9.61786274,9.61785511,9.61600784,9.61601616,9.62461853,9.63243665,9.63812807,9.66092052],"lat":[44.61153104,44.59506983,44.58627026,44.57197037,44.56943104,44.55934931,44.54810149,44.52755306,44.51751644,44.49407231,44.48714422,44.48964308,44.477526,44.46766876,44.46405185,44.45568555,44.45067486,44.45354939,44.46266737,44.4660222,44.4580426,44.44482564,44.44013813,44.44847414,44.44923902,44.44896935,44.44793783,44.44886339,44.46732663,44.46895853,44.47247938,44.47657992,44.47890344,44.4827304,44.48394784,44.52996,44.55397926,44.55587663,44.56331431,44.58889521,44.58878966,44.58781363,44.58778969,44.59053268,44.59060421,44.58590013,44.57303924,44.56800151,44.57704158,44.58098257,44.58140526,44.58173197,44.58231594,44.58835664,44.58882482,44.5928409,44.59959273,44.60277789,44.60328402,44.60173994,44.61153104]}]],[[{"lng":[9.98525068,10.01468614,10.02126749,10.04663391,10.04473131,10.04461158,10.04481211,10.04504716,10.05172768,10.06806229,10.06515622,10.07108559,10.07142278,10.06519892,10.00453872,9.9712568,9.90334513,9.89995048,9.90432619,9.90673359,9.90748047,9.90762878,9.90406548,9.89700123,9.88636603,9.90884964,9.91954014,9.92074171,9.92778544,9.94865114,9.94868808,9.94844927,9.94390553,9.92578164,9.9478188,9.95955219,9.97764833,9.98525068],"lat":[44.59501242,44.56314008,44.56297337,44.57604043,44.57318605,44.57142265,44.5706646,44.57042839,44.56549086,44.5557394,44.54482845,44.54140604,44.53782886,44.52430221,44.49288363,44.46324668,44.470394,44.47270748,44.47449145,44.47811844,44.48011561,44.48151885,44.52491725,44.53194995,44.53753357,44.54852002,44.54875853,44.54916297,44.55272498,44.57144143,44.57169264,44.57249584,44.58269733,44.58777905,44.60568426,44.59504438,44.60652208,44.59501242]}]],[[{"lng":[9.82326066,9.83183852,9.85015228,9.85943483,9.85503883,9.84562905,9.84500606,9.84513902,9.84574639,9.88328475,9.86478147,9.82701367,9.8185769,9.81490905,9.80734995,9.79864167,9.78586329,9.78472738,9.76599873,9.76515641,9.76580303,9.76216622,9.78696656,9.81526651,9.81626489,9.81665225,9.81831758,9.82006808,9.8141446,9.82326066],"lat":[44.75867276,44.75154386,44.75037372,44.73313694,44.72964105,44.71220167,44.70929853,44.70889244,44.70812274,44.69119327,44.69274826,44.68852685,44.68551784,44.6822222,44.67853091,44.67653061,44.67579104,44.67576285,44.68014812,44.68134207,44.69785703,44.70541629,44.71720316,44.73826801,44.73920612,44.73980651,44.74325145,44.7509178,44.7572116,44.75867276]}]],[[{"lng":[9.80421451,9.82418494,9.82866365,9.83782321,9.84003542,9.83454003,9.83260365,9.86109028,9.86450763,9.88636603,9.89700123,9.90748047,9.81993668,9.75738202,9.74231995,9.75700374,9.75452875,9.76346398,9.73536287,9.73307409,9.71150087,9.72838063,9.72812019,9.701805,9.69811428,9.69875594,9.70436246,9.7048687,9.70326109,9.70000012,9.72798442,9.73640909,9.7435135,9.74903329,9.78135146,9.80003555,9.80240571,9.80421451],"lat":[44.5663466,44.55960535,44.5586637,44.55828177,44.55801345,44.55321937,44.55074882,44.52955259,44.52921168,44.53753357,44.53194995,44.48011561,44.4664229,44.40715774,44.41638546,44.43129667,44.44186424,44.46897502,44.4731746,44.4910236,44.49743488,44.50763648,44.51304472,44.50749678,44.5195559,44.52579978,44.53880109,44.5420929,44.54755837,44.55270986,44.54609808,44.55143661,44.55778238,44.56030303,44.54669071,44.55638312,44.55940937,44.5663466]}]],[[{"lng":[10.05650741,10.09860814,10.09549596,10.10613831,10.11438453,10.12593193,10.12917996,10.14265084,10.14585635,10.13564019,10.08444729,10.07701528,10.07460094,10.07402957,10.07437836,10.06333358,10.05855681,10.05512832,10.05373427,10.05552833,10.06479711,10.06570426,10.05344948,10.03855159,10.03304268,10.02329823,10.01663582,10.01596051,10.01437655,10.01414551,10.01632657,10.01651451,10.01591843,10.01563707,10.01525424,10.01363326,10.01265845,10.01232683,10.01232701,10.01258916,10.01506402,10.02185172,10.02080044,10.02053273,10.01703569,10.01234052,9.99391349,9.98740878,9.99416253,10.00442041,10.01607095,10.02866075,10.03003943,10.03513691,10.03948856,10.03944801,10.03983613,10.05650741],"lat":[45.00119447,45.00180459,44.98445268,44.9849355,44.98518811,44.98541689,44.98545685,44.98544885,44.98526371,44.95645004,44.93259907,44.9234829,44.91903616,44.91761022,44.91729186,44.90852828,44.9077805,44.90871243,44.9100666,44.9139569,44.91849785,44.92752458,44.92775811,44.93432198,44.93890881,44.93247926,44.92477908,44.92384887,44.92096432,44.92007518,44.91802135,44.91359069,44.90923903,44.90836835,44.90748955,44.9046323,44.90249849,44.90164624,44.90093508,44.9007167,44.89956047,44.89806862,44.89162357,44.89080677,44.89070295,44.88790002,44.90771329,44.93593178,44.95520548,44.96836653,44.97393465,44.98083441,44.98203724,44.99111906,45.01218887,45.00994778,45.00965619,45.00119447]}]],[[{"lng":[10.18930262,10.21126966,10.19441187,10.17101493,10.16807447,10.09655293,10.09532033,10.07706188,10.07427047,10.07108559,10.06997195,10.06515622,10.06801341,10.06806229,10.05172768,10.04481211,10.04976706,10.09614197,10.11087316,10.11147019,10.12256051,10.13930001,10.15302095,10.15386829,10.16109354,10.16198624,10.16279418,10.16523715,10.17290751,10.17834758,10.18930262],"lat":[44.63942592,44.61930812,44.60628362,44.59737494,44.57237364,44.55845822,44.55517512,44.54679638,44.54492314,44.54140604,44.5410834,44.54482845,44.55444349,44.5557394,44.56549086,44.5706646,44.57936961,44.58979089,44.61173158,44.61197784,44.61609151,44.61556562,44.61676927,44.61691376,44.62035148,44.62090954,44.6216035,44.62408129,44.63983799,44.64462979,44.63942592]}]],[[{"lng":[10.2384203,10.28318844,10.25825515,10.24478639,10.23908694,10.23489937,10.22718837,10.22081016,10.18938958,10.15020862,10.13942665,10.13427536,10.1222075,10.12097093,10.15519901,10.16902228,10.16970809,10.17064286,10.17323246,10.18065147,10.18272184,10.18266581,10.18216355,10.18181877,10.18559964,10.18627549,10.19210791,10.21353331,10.24283663,10.2384203],"lat":[44.77363164,44.7652514,44.73780199,44.72933446,44.73151197,44.7258229,44.72614897,44.72718071,44.73631651,44.68965391,44.69520842,44.70351483,44.71133102,44.71201833,44.73054599,44.74031678,44.74112897,44.74300986,44.75550539,44.76618657,44.76980205,44.77015371,44.77031196,44.77075662,44.77642483,44.77733602,44.78192041,44.80547846,44.79922186,44.77363164]}]],[[{"lng":[10.4221255,10.42516317,10.41261651,10.41724755,10.42298031,10.40721232,10.40977123,10.38024062,10.3668924,10.3282996,10.33094678,10.33943471,10.34464801,10.34507738,10.34638183,10.32125072,10.32955715,10.35602802,10.39928495,10.4221255],"lat":[44.96549464,44.96020821,44.95083149,44.94584337,44.92853103,44.91365169,44.89828619,44.90484934,44.91446412,44.91884234,44.92319548,44.92258311,44.92499739,44.92547844,44.93358282,44.94793743,44.95686995,44.96219385,44.98465377,44.96549464]}]],[[{"lng":[9.67164079,9.70203186,9.70000012,9.70012144,9.70326109,9.70457802,9.7048687,9.70487636,9.70436246,9.70415708,9.70287983,9.69875594,9.69811428,9.6980704,9.70060701,9.70143378,9.701805,9.70221493,9.70560957,9.69856524,9.68286986,9.6754696,9.67490533,9.6741016,9.67314635,9.66644199,9.66617565,9.664081,9.66391919,9.66434905,9.66795483,9.66757602,9.65752134,9.65552543,9.64867499,9.64209262,9.64099804,9.64525733,9.64489851,9.64682038,9.65821672,9.66125836,9.66752102,9.65374216,9.67164079],"lat":[44.58705376,44.55310251,44.55270986,44.5512777,44.54755837,44.54408427,44.5420929,44.54070646,44.53880109,44.53846926,44.53790996,44.52579978,44.5195559,44.51798971,44.50935868,44.50801221,44.50749678,44.50706215,44.50493461,44.48521709,44.48587919,44.49076662,44.49091401,44.49101778,44.49106842,44.48754269,44.48734619,44.48562088,44.48355121,44.48240651,44.47918838,44.47574259,44.47472059,44.47501115,44.47513128,44.47784228,44.48008107,44.48546769,44.48714422,44.48921297,44.49407231,44.49944732,44.52755306,44.57197037,44.58705376]}]],[[{"lng":[10.17362533,10.19275251,10.18974039,10.17362893,10.16582154,10.16468433,10.15943553,10.15464534,10.14261318,10.12530247,10.13802132,10.13676822,10.14327882,10.14812547,10.14905848,10.12951432,10.12902711,10.12613624,10.11820699,10.11287723,10.10431967,10.10109299,10.10058707,10.09639667,10.0896528,10.08699629,10.07095713,10.06499919,10.05317828,9.98928471,10.00693708,9.96980943,9.98903525,9.99425417,10.00453872,10.04625073,10.06519892,10.07108559,10.07427047,10.08721392,10.09532033,10.09655293,10.16689854,10.17362533],"lat":[44.56602849,44.55446913,44.5493421,44.53813859,44.53536475,44.53514229,44.53462288,44.5333627,44.52624566,44.50422616,44.49408021,44.48464893,44.48008261,44.47531209,44.46783501,44.45367972,44.45309937,44.44533157,44.43539847,44.43457727,44.43840547,44.43917485,44.43899966,44.43527685,44.43005679,44.42831758,44.42636247,44.41434551,44.37303332,44.40433116,44.4317343,44.45781236,44.47090843,44.47977576,44.49288363,44.50959608,44.52430221,44.54140604,44.54492314,44.55050825,44.55517512,44.55845822,44.57214261,44.56602849]}]],[[{"lng":[10.24806587,10.25826177,10.27499967,10.28037823,10.28517347,10.29795413,10.29339209,10.28453761,10.27982507,10.27227722,10.26263904,10.23867623,10.17834758,10.22784245,10.24100319,10.24225625,10.24806587],"lat":[44.72210584,44.71306368,44.70776473,44.70780357,44.70943312,44.70416689,44.69130871,44.68810481,44.68212616,44.67337921,44.67282903,44.65235903,44.64462979,44.69785686,44.7224979,44.72381662,44.72210584]}]],[[{"lng":[10.03855159,10.04664672,10.05344948,10.05859281,10.06570426,10.06479711,10.06243614,10.05552833,10.05512832,10.07437836,10.10915444,10.10180727,10.10829925,10.10225341,10.10274895,10.10603066,10.10491279,10.10499846,10.09963032,10.094839,10.09307307,10.09470007,10.09205502,10.08511444,10.06575282,10.06661241,10.06595168,10.06317686,10.04876975,10.0410967,10.0389517,10.03414078,10.02482577,10.0413598,10.04103976,10.04633713,10.05148394,10.0513617,10.01512274,9.98668165,9.98433171,9.9832592,9.98350793,9.98409924,9.99463695,10.00325577,10.00672422,10.00881427,10.00947845,10.00997826,10.01089591,10.01101741,10.01234052,10.02053273,10.01232701,10.01265845,10.01525424,10.01591843,10.01414551,10.01596051,10.03855159],"lat":[44.93432198,44.93275374,44.92775811,44.93043814,44.92752458,44.91849785,44.91619735,44.9139569,44.90871243,44.91729186,44.9053378,44.89603784,44.8839033,44.87736912,44.86843751,44.85736024,44.85449941,44.847729,44.84426101,44.84248862,44.83587999,44.80775077,44.80495842,44.80031646,44.78362873,44.78019987,44.77932382,44.7789536,44.77974399,44.77687948,44.77426136,44.77166739,44.78304013,44.7922168,44.82292605,44.8290801,44.83663062,44.83686579,44.85393759,44.84556288,44.85172257,44.85711507,44.85759904,44.85813407,44.86738692,44.87238867,44.87309631,44.87388806,44.87422426,44.87457092,44.87564305,44.87607406,44.88790002,44.89080677,44.90093508,44.90249849,44.90748955,44.90923903,44.92007518,44.92384887,44.93432198]}]],[[{"lng":[10.34507738,10.33943471,10.33787016,10.3347982,10.33094678,10.3282996,10.34283512,10.34786005,10.34939729,10.34979938,10.3668924,10.37659043,10.38024062,10.3944343,10.38725383,10.38944832,10.39285882,10.40451512,10.41087276,10.40651542,10.36555059,10.36130695,10.34328995,10.34192922,10.33179816,10.31295284,10.29684848,10.29636432,10.29153694,10.29333511,10.30243846,10.30680862,10.32125072,10.34507738],"lat":[44.92547844,44.92258311,44.92396076,44.92426677,44.92319548,44.91884234,44.91408132,44.91171761,44.9091969,44.90905711,44.91446412,44.91120931,44.90484934,44.90094107,44.89308876,44.892711,44.89234536,44.89126806,44.89050384,44.88007023,44.87021516,44.87402129,44.87813094,44.878417,44.87996694,44.8841911,44.88541036,44.8987726,44.90607617,44.90718107,44.91539543,44.92151186,44.94793743,44.92547844]}]],[[{"lng":[10.35438867,10.36745315,10.38635171,10.41539095,10.41376976,10.41386308,10.41678211,10.40261035,10.39913187,10.36176783,10.34075147,10.34106318,10.33834994,10.34435066,10.33561649,10.32287976,10.32559575,10.3438819,10.34334948,10.33908294,10.33738057,10.32877639,10.32655631,10.32116695,10.35438867],"lat":[44.6827875,44.6695694,44.67488695,44.66685726,44.66586351,44.66396285,44.63947623,44.61644298,44.58548124,44.58609498,44.59349163,44.59831329,44.60371959,44.61222843,44.61771437,44.61951007,44.62375473,44.63708061,44.656451,44.66236165,44.66347988,44.66701024,44.66739615,44.67123062,44.6827875]}]],[[{"lng":[9.90599032,9.90761178,9.90356431,9.91142676,9.915264,9.94868808,9.93150685,9.92833222,9.92840446,9.92922631,9.92868506,9.92074171,9.90884964,9.88636603,9.87250724,9.8650649,9.86450763,9.86366692,9.86109028,9.85415968,9.83260365,9.84003542,9.82866365,9.82418494,9.819943,9.81393865,9.80421451,9.80344765,9.82192613,9.84208749,9.84410154,9.8703208,9.89877721,9.89952337,9.90119015,9.90328613,9.90599032],"lat":[44.61689873,44.61418511,44.61305589,44.60013789,44.59093368,44.57169264,44.56191329,44.5586082,44.55760834,44.55465782,44.55355491,44.54916297,44.54852002,44.53753357,44.533175,44.52945054,44.52921168,44.52896901,44.52955259,44.53315165,44.55074882,44.55801345,44.5586637,44.55960535,44.56318289,44.56498134,44.5663466,44.56644201,44.59909765,44.60298387,44.6037072,44.61689705,44.62473383,44.62489,44.62517394,44.62458122,44.61689873]}]],[[{"lng":[9.97670309,10.00576832,10.01838589,10.01931218,10.02182372,10.07061014,10.09116961,10.09048069,10.05329354,10.04494545,10.03927635,10.01621242,10.01162819,10.00914698,9.98798116,9.99158543,9.99042018,9.9769318,9.97303673,9.96808072,9.96310323,9.952011,9.94707611,9.87624159,9.8994155,9.89990441,9.96670113,9.96958453,9.96921857,9.97670309],"lat":[44.7251994,44.72500113,44.71723736,44.71246688,44.71098607,44.70375137,44.69148466,44.68974478,44.68227981,44.66712452,44.66119868,44.66228849,44.66560605,44.6781863,44.68299858,44.67163338,44.66099369,44.65772499,44.66012586,44.6662536,44.66886136,44.67122592,44.6785829,44.69823335,44.7125289,44.71637803,44.70770303,44.71708599,44.72844098,44.7251994]}]],[[{"lng":[9.87347212,9.88328475,9.88448824,9.88975176,9.89935023,9.90885266,9.88804777,9.91097462,9.92443076,9.93566693,9.90761178,9.89952337,9.88767584,9.8703208,9.85468693,9.84410154,9.84208749,9.8285231,9.82192613,9.80089339,9.74100698,9.76971003,9.77936914,9.78124849,9.7834584,9.79098535,9.80534164,9.81257656,9.82435242,9.83182567,9.83354556,9.81474301,9.8185769,9.87347212],"lat":[44.69158384,44.69119327,44.68734896,44.68660591,44.68711587,44.68066698,44.65529094,44.66042176,44.65019494,44.61868498,44.61418511,44.62489,44.61974328,44.61689705,44.60926402,44.6037072,44.60298387,44.60225486,44.59909765,44.61040114,44.6191867,44.63827106,44.63568487,44.63198104,44.62949924,44.62873616,44.63897061,44.65165777,44.65603855,44.65782536,44.66166133,44.67937864,44.68551784,44.69158384]}]],[[{"lng":[10.27446659,10.30378228,10.35883187,10.34446402,10.32955715,10.32725953,10.32018926,10.31481036,10.3043171,10.27417876,10.2399881,10.24321536,10.24558612,10.24659329,10.24676934,10.24572892,10.24443532,10.25924482,10.24442392,10.23261597,10.23440673,10.23326899,10.24218372,10.24419683,10.24476492,10.24518635,10.24534274,10.24476045,10.24437422,10.24360372,10.24275715,10.24015553,10.23930326,10.23441476,10.2330611,10.2299982,10.24379984,10.23480907,10.23739026,10.25179823,10.25458478,10.25562628,10.25719945,10.26511448,10.27446659],"lat":[44.99793011,44.99939951,44.96548672,44.96380691,44.95686995,44.9550963,44.94697749,44.93901884,44.92675249,44.87893207,44.87690493,44.88742923,44.89049108,44.8913893,44.89191849,44.89769113,44.90172014,44.93548624,44.9434444,44.9436985,44.95628186,44.97122833,44.96416422,44.96402527,44.96449618,44.96522075,44.9660022,44.96897918,44.96988358,44.97061213,44.97134149,44.97301714,44.97348548,44.97557287,44.9775049,44.99381332,45.00020818,44.9827161,44.97947449,44.9911189,44.9996401,45.0008529,45.00200582,45.004778,44.99793011]}]],[[{"lng":[10.17980978,10.16803355,10.17043162,10.15168863,10.14585635,10.14265084,10.12917996,10.11438453,10.09713074,10.09549596,10.09037889,10.09263955,10.09860814,10.06165614,10.05650741,10.05243013,10.0417783,10.03944801,10.03948856,10.04316293,10.04545946,10.08347462,10.1061908,10.16477342,10.18094596,10.17980978],"lat":[45.02216179,44.99173641,44.98116165,44.98513301,44.98526371,44.98544885,44.98545685,44.98518811,44.98437397,44.98445268,44.98651435,44.99367096,45.00180459,44.99912128,45.00119447,45.00580504,45.00899036,45.00994778,45.01218887,45.01955486,45.0292472,45.0439638,45.02213035,45.04432239,45.03046292,45.02216179]}]],[[{"lng":[10.60945751,10.62378462,10.63229571,10.64200086,10.66242978,10.65738412,10.63762466,10.56748216,10.56672028,10.56830978,10.56976696,10.57090473,10.56353402,10.60945751],"lat":[44.64524387,44.63528792,44.63672904,44.63616875,44.63069489,44.59599653,44.57288426,44.59154957,44.60477561,44.60466376,44.60592658,44.61313087,44.62081207,44.64524387]}]],[[{"lng":[10.66810935,10.68704497,10.69384417,10.69326411,10.70264748,10.73057031,10.73292079,10.70307781,10.70235174,10.70579926,10.69276677,10.6866744,10.67404455,10.66658745,10.65687293,10.65062336,10.65036398,10.6500674,10.65009865,10.65121885,10.65447031,10.65534778,10.6515158,10.65049935,10.66810935],"lat":[44.81668874,44.80733636,44.80123128,44.79955647,44.79442973,44.79596338,44.79055027,44.77623445,44.77477792,44.76224676,44.76498887,44.75479294,44.74964956,44.75162736,44.75641415,44.76312089,44.76379944,44.765343,44.76613591,44.77037965,44.7766476,44.77946156,44.78905035,44.81300625,44.81668874]}]],[[{"lng":[10.64517632,10.65881256,10.67020156,10.66405071,10.66314561,10.65779489,10.65482533,10.65423068,10.66819582,10.65342969,10.62152266,10.59041848,10.59778331,10.60246568,10.60295587,10.60426676,10.59768864,10.60218334,10.59369831,10.58284129,10.57531203,10.57048906,10.56656204,10.56679063,10.5702894,10.57079702,10.5709907,10.56995661,10.64517632],"lat":[44.5410149,44.53680249,44.5222054,44.50767955,44.50681949,44.50487173,44.502151,44.47848281,44.46778259,44.43330565,44.40585934,44.41087916,44.4198781,44.42206315,44.42299255,44.42774556,44.4389381,44.45255916,44.46816244,44.47390409,44.48093122,44.49280008,44.49923685,44.49978738,44.50679734,44.5083658,44.511361,44.51314422,44.5410149]}]],[[{"lng":[10.49634283,10.51154819,10.50540505,10.51298305,10.51755438,10.47224255,10.44757884,10.43617839,10.4397706,10.44068113,10.44128334,10.44764961,10.45816994,10.45984446,10.49546663,10.49722454,10.49756764,10.50210026,10.50727399,10.49634283],"lat":[44.70381381,44.69345895,44.68052638,44.67408609,44.66377249,44.65321894,44.63799617,44.65802187,44.66622733,44.67396233,44.6768805,44.68021183,44.68072613,44.68108284,44.7109641,44.7130116,44.71358774,44.7223123,44.72531783,44.70381381]}]],[[{"lng":[10.59151733,10.58976685,10.5957044,10.55879708,10.54773292,10.53631807,10.52570354,10.52681125,10.59151733],"lat":[44.91481517,44.9041992,44.87767297,44.88045133,44.8777212,44.88029689,44.89686792,44.91265783,44.91481517]}]],[[{"lng":[10.51985302,10.52681125,10.52702571,10.52570354,10.53222308,10.49624567,10.47055657,10.45516736,10.45490031,10.45265323,10.4643141,10.47431294,10.4637302,10.48979751,10.49422693,10.49604931,10.49942825,10.50431523,10.51985302],"lat":[44.91272645,44.91265783,44.91233368,44.89686792,44.88152669,44.88280951,44.83324032,44.83299188,44.83805898,44.84687811,44.85303062,44.87581668,44.89777374,44.90469219,44.90698384,44.90838229,44.91799709,44.9224276,44.91272645]}]],[[{"lng":[10.65900892,10.65049935,10.65009865,10.65010069,10.64972888,10.6494452,10.63754162,10.63240587,10.61395927,10.61116638,10.60875808,10.60170269,10.58900084,10.55530948,10.55621951,10.56070366,10.56308437,10.56413404,10.57629688,10.61524052,10.62253244,10.62814926,10.63596353,10.64030751,10.64116109,10.65851178,10.66166848,10.65760621,10.65900892],"lat":[44.81730295,44.81300625,44.76613591,44.76654927,44.76771548,44.76790781,44.77139287,44.7669394,44.77402826,44.77271115,44.76125047,44.75296967,44.74901746,44.76464762,44.76671039,44.77317609,44.77673797,44.77813695,44.79024413,44.81654872,44.82660421,44.83599446,44.84740092,44.85195666,44.85260155,44.8601016,44.84100282,44.82520467,44.81730295]}]],[[{"lng":[10.78283663,10.77544191,10.79702592,10.77855349,10.77569543,10.77375132,10.75697221,10.74635012,10.73797932,10.72048664,10.74384482,10.74514403,10.75745286,10.78821693,10.79388435,10.78283663],"lat":[44.88402771,44.86882599,44.8505652,44.83141448,44.82287547,44.81158103,44.81624702,44.80677322,44.80723403,44.82144776,44.8370541,44.85907581,44.86716439,44.89987262,44.89883849,44.88402771]}]],[[{"lng":[10.53272517,10.57444239,10.57587526,10.57629688,10.57647148,10.57646812,10.56070366,10.55349389,10.52197985,10.51165804,10.50913001,10.51662584,10.51011337,10.49148276,10.49003995,10.48926284,10.48829835,10.482786,10.48520857,10.53272517],"lat":[44.79888078,44.79360951,44.79147424,44.79024413,44.78987799,44.78964529,44.77317609,44.76873051,44.75694494,44.75547645,44.75413467,44.75908557,44.76126942,44.75907019,44.75946712,44.75971133,44.76003897,44.77354647,44.78445264,44.79888078]}]],[[{"lng":[10.51695571,10.53465287,10.56679063,10.56656204,10.56678696,10.57048906,10.57531203,10.5759267,10.58284129,10.59280317,10.59369831,10.59417299,10.60080057,10.60218334,10.60125436,10.59768864,10.60246568,10.59041848,10.57394941,10.55149122,10.55005407,10.53133714,10.52732094,10.5201176,10.47648649,10.47546569,10.47391985,10.4718588,10.46874945,10.46759902,10.46483677,10.46123644,10.45996313,10.45593114,10.46650027,10.46880129,10.47782604,10.47926219,10.48334256,10.47760711,10.47583039,10.46753056,10.51695571],"lat":[44.49998766,44.48337096,44.49978738,44.49923685,44.49871162,44.49280008,44.48093122,44.47994147,44.47390409,44.46899418,44.46816244,44.46758867,44.45807017,44.45255916,44.4451957,44.4389381,44.42206315,44.41087916,44.41961941,44.41953964,44.41931607,44.41581448,44.41449085,44.40697968,44.40800228,44.40786242,44.4072882,44.40573031,44.40490158,44.41718258,44.42021594,44.42138742,44.42221394,44.43127712,44.43697563,44.43754023,44.43871117,44.43938579,44.45116238,44.45944291,44.46368787,44.48952435,44.49998766]}]],[[{"lng":[10.78643542,10.78676871,10.78677072,10.78567235,10.77967973,10.77692899,10.76496176,10.70577599,10.72597888,10.75546416,10.75736168,10.74181609,10.73639508,10.7404023,10.73691583,10.77099874,10.78196925,10.7844252,10.78643542],"lat":[44.61932195,44.60649612,44.60596876,44.6009941,44.59002367,44.58331918,44.54042344,44.56589081,44.60578313,44.60826388,44.61644039,44.6166426,44.62124888,44.62542798,44.62717795,44.63753756,44.62776737,44.62481595,44.61932195]}]],[[{"lng":[10.50191331,10.5264815,10.52788843,10.53033929,10.53474886,10.54056809,10.54300981,10.54325738,10.56645365,10.53465287,10.51698854,10.51046579,10.46753056,10.45267298,10.44081509,10.43622233,10.43673452,10.44106653,10.4397278,10.42983185,10.41555714,10.41709781,10.46470525,10.47070793,10.46797733,10.4682904,10.46923998,10.47101814,10.47684547,10.47809312,10.47778323,10.50191331],"lat":[44.57101398,44.56572781,44.55405074,44.54764414,44.53918111,44.53697364,44.53209956,44.51679863,44.49988654,44.48337096,44.50037434,44.50339565,44.48952435,44.49712346,44.508716,44.5173263,44.5192554,44.5229999,44.52740103,44.51735247,44.52112686,44.53847816,44.54553407,44.54848178,44.55801457,44.5589468,44.56018593,44.5617925,44.56270755,44.56871408,44.57040156,44.57101398]}]],[[{"lng":[10.6925763,10.76496176,10.75970797,10.7590275,10.75160006,10.74137949,10.73003205,10.72286921,10.70263765,10.69301706,10.68720679,10.68432944,10.67359556,10.66819582,10.65482533,10.67020156,10.6566092,10.65881256,10.66893894,10.67070908,10.6794671,10.67489192,10.67573998,10.6925763],"lat":[44.56668142,44.54042344,44.53441433,44.53355158,44.52339388,44.51058655,44.50162595,44.49915051,44.48803421,44.47755419,44.47358903,44.47234414,44.47023331,44.46778259,44.502151,44.5222054,44.53006457,44.53680249,44.53926565,44.54042359,44.55438403,44.56471857,44.56662366,44.56668142]}]],[[{"lng":[10.59317246,10.62814926,10.62253244,10.61554109,10.61524052,10.5984031,10.57629688,10.57444239,10.52879928,10.52995325,10.53875325,10.57908864,10.56726678,10.58273643,10.57802498,10.59317246],"lat":[44.85596451,44.83599446,44.82660421,44.81689555,44.81654872,44.79962312,44.79024413,44.79360951,44.80004518,44.81673319,44.83122085,44.84341709,44.84692875,44.87709279,44.86273223,44.85596451]}]],[[{"lng":[10.4374701,10.44081509,10.45267298,10.46753056,10.47083422,10.48334256,10.45593114,10.46759902,10.46874945,10.3711912,10.37010675,10.36980533,10.36515408,10.36447996,10.32826262,10.3304665,10.33079501,10.33201618,10.33405701,10.35996339,10.38508833,10.38401493,10.38802619,10.40879235,10.41182993,10.41454996,10.42004714,10.42037064,10.42084021,10.42094253,10.42082695,10.42049017,10.41436901,10.41371637,10.41574929,10.42701716,10.43033461,10.43041493,10.42983185,10.43034706,10.43596817,10.43913224,10.4397278,10.4408057,10.44120473,10.44106653,10.4407151,10.4374701],"lat":[44.51948922,44.508716,44.49712346,44.48952435,44.48539465,44.45116238,44.43127712,44.41718258,44.40490158,44.38434147,44.38840574,44.38894053,44.39668458,44.39739485,44.41953643,44.42809037,44.42837913,44.42773019,44.42856163,44.44388474,44.44850723,44.45517322,44.46479339,44.46851826,44.48500057,44.48931517,44.49092144,44.49129551,44.49250502,44.49464637,44.4955841,44.49621846,44.49948586,44.50117292,44.50356944,44.51283688,44.51630189,44.51649894,44.51735247,44.51886746,44.52596296,44.52771463,44.52740103,44.52671225,44.5235023,44.5229999,44.5225272,44.51948922]}]],[[{"lng":[10.5223089,10.554508,10.56083906,10.51298305,10.51154819,10.49634283,10.49741681,10.50727399,10.5223089],"lat":[44.72436225,44.72021759,44.71368285,44.67408609,44.69345895,44.70381381,44.70630237,44.72531783,44.72436225]}]],[[{"lng":[10.43483871,10.44019133,10.47809312,10.47684547,10.4682904,10.47070793,10.43591576,10.41709781,10.41555714,10.41749996,10.42983185,10.43041493,10.41574929,10.41436901,10.36275898,10.35453691,10.36332812,10.40160063,10.39872478,10.39955517,10.40306441,10.40350853,10.40261035,10.43483871],"lat":[44.59395957,44.58294519,44.56871408,44.56270755,44.5589468,44.54848178,44.54892009,44.53847816,44.52112686,44.51925723,44.51735247,44.51649894,44.50356944,44.49948586,44.51255952,44.5328501,44.54292736,44.56292673,44.58373973,44.58671917,44.59381074,44.59549977,44.61644298,44.59395957]}]],[[{"lng":[10.76270878,10.77375132,10.76114132,10.76111868,10.79064395,10.79195753,10.79836252,10.79884187,10.81064279,10.81148566,10.81204994,10.81499191,10.84204233,10.82751826,10.81619403,10.81541594,10.78290779,10.77104817,10.77395047,10.76754634,10.74296994,10.72645694,10.71835709,10.7245848,10.72380002,10.71073425,10.70622573,10.70579926,10.70544448,10.70397785,10.70235174,10.70246265,10.70307781,10.70670182,10.71928037,10.73292079,10.73057031,10.73536385,10.73797932,10.75333384,10.75697221,10.76270878],"lat":[44.81482628,44.81158103,44.79823676,44.79749289,44.7976701,44.80127735,44.8033916,44.80345112,44.80073497,44.80140578,44.80206298,44.80722611,44.79553861,44.76583027,44.7574246,44.74161798,44.73767421,44.74123501,44.73490659,44.71305725,44.69541129,44.70055997,44.717351,44.73578836,44.74343944,44.7521424,44.75955765,44.76224676,44.76698089,44.7694784,44.77477792,44.77554145,44.77623445,44.77866944,44.78546189,44.79055027,44.79596338,44.79640598,44.80723403,44.81554677,44.81624702,44.81482628]}]],[[{"lng":[10.84264467,10.84310217,10.84645322,10.85006838,10.84678674,10.83808471,10.83746367,10.81526543,10.80102442,10.79702592,10.77544191,10.79388435,10.81379456,10.81580363,10.82307765,10.83098889,10.83428795,10.84196909,10.84264467],"lat":[44.90311653,44.87308744,44.86745203,44.86651889,44.86005588,44.86184826,44.86182225,44.84988056,44.85369317,44.8505652,44.86882599,44.89883849,44.89441001,44.89466613,44.89761537,44.90263341,44.9032151,44.90337949,44.90311653]}]],[[{"lng":[10.47055657,10.46568874,10.49996957,10.50813123,10.51180455,10.52026938,10.52995325,10.53349677,10.53651673,10.52879928,10.48520857,10.482786,10.47346546,10.46744384,10.44155685,10.43158361,10.42966154,10.43553133,10.42992548,10.42833933,10.42969763,10.42728629,10.42419398,10.42317822,10.42351513,10.42383796,10.42484092,10.43608556,10.43733454,10.43770836,10.43749401,10.44207566,10.44064355,10.4459668,10.44998282,10.45471607,10.45516736,10.47055657],"lat":[44.83324032,44.82496247,44.83128684,44.82275336,44.82149849,44.82019782,44.81673319,44.81586195,44.81293167,44.80004518,44.78445264,44.77354647,44.76839185,44.76617385,44.76452185,44.76731819,44.76550415,44.75061743,44.74737983,44.74876431,44.75313139,44.7737226,44.78468086,44.79529807,44.79820157,44.79898974,44.79967039,44.79984459,44.80024297,44.80103946,44.80818986,44.8196098,44.82294967,44.82843667,44.82816971,44.8306751,44.83299188,44.83324032]}]],[[{"lng":[10.64107378,10.64883729,10.64564224,10.64307336,10.63804219,10.63851461,10.64534436,10.64116109,10.62814926,10.61037866,10.59607041,10.57802498,10.5957044,10.59537541,10.58976685,10.59244063,10.62518043,10.64107378],"lat":[44.91467624,44.90489626,44.89860495,44.89293019,44.87992704,44.87652649,44.86612094,44.85260155,44.83599446,44.84293054,44.84620117,44.86273223,44.87767297,44.89044693,44.9041992,44.91480234,44.92562493,44.91467624]}]],[[{"lng":[10.65497658,10.67020848,10.68810684,10.69319133,10.71003923,10.72285667,10.72747282,10.7304416,10.73150411,10.73437014,10.74916657,10.75102722,10.74916416,10.73924448,10.73096355,10.68580815,10.64116109,10.63804219,10.64816694,10.64883729,10.64875827,10.64107378,10.62788141,10.65497658],"lat":[44.94561783,44.94243439,44.93128329,44.93054186,44.93117744,44.92884227,44.92684611,44.92488373,44.92439953,44.92363586,44.92230289,44.90977962,44.90810681,44.90807381,44.8863023,44.87806599,44.85260155,44.87992704,44.90318655,44.90489626,44.90656277,44.91467624,44.92420179,44.94561783]}]],[[{"lng":[10.72998736,10.74371981,10.77065061,10.74916657,10.6503332,10.68667999,10.69474094,10.72998736],"lat":[44.98877271,44.94907685,44.94411429,44.92230289,44.94807474,44.98659263,44.9619401,44.98877271]}]],[[{"lng":[10.46401077,10.47585095,10.50210026,10.49722454,10.48547994,10.45984446,10.45816994,10.44991353,10.44764961,10.44068113,10.41896062,10.42851981,10.42926354,10.44579423,10.4470557,10.44146491,10.46401077],"lat":[44.73909872,44.72990804,44.7223123,44.7130116,44.70599918,44.68108284,44.68072613,44.68042618,44.68021183,44.67396233,44.67623284,44.69401926,44.69500921,44.71568641,44.71766893,44.73047785,44.73909872]}]],[[{"lng":[10.76285034,10.77824701,10.75745286,10.75571557,10.74514403,10.74153198,10.74384482,10.72048664,10.73536385,10.73057031,10.70865066,10.70264748,10.69326411,10.69384417,10.69093661,10.68704497,10.68318434,10.66901023,10.66810935,10.65939755,10.65760621,10.65985627,10.66126383,10.66166848,10.65887195,10.65851178,10.68580815,10.73096355,10.74191573,10.75514375,10.76285034],"lat":[44.88509874,44.88956352,44.86716439,44.86581381,44.85907581,44.85429686,44.8370541,44.82144776,44.79640598,44.79596338,44.79217851,44.79442973,44.79955647,44.80123128,44.80465918,44.80733636,44.80978791,44.8163515,44.81668874,44.81939781,44.82520467,44.83388151,44.83795699,44.84100282,44.8550147,44.8601016,44.87806599,44.8863023,44.89756377,44.88942141,44.88509874]}]],[[{"lng":[10.50065156,10.54773292,10.55879708,10.58273643,10.57834861,10.57204327,10.56726678,10.57908864,10.53875325,10.52995325,10.52026938,10.51741527,10.51180455,10.50813123,10.49996957,10.47235742,10.46568874,10.50065156],"lat":[44.88084327,44.8777212,44.88045133,44.87709279,44.86713426,44.85409175,44.84692875,44.84341709,44.83122085,44.81673319,44.82019782,44.82084793,44.82149849,44.82275336,44.83128684,44.82406647,44.82496247,44.88084327]}]],[[{"lng":[10.56307778,10.56655906,10.56678082,10.57696224,10.58769778,10.56353402,10.56830978,10.56248673,10.54690023,10.51401272,10.49346557,10.48261822,10.48098465,10.46017812,10.45383241,10.47224255,10.51892707,10.55137465,10.55175153,10.55244727,10.55278067,10.56307778],"lat":[44.65190768,44.64940307,44.64313356,44.64048787,44.64301585,44.62081207,44.60466376,44.60840757,44.61327406,44.60960075,44.5949228,44.59293509,44.60767077,44.61016235,44.62009195,44.65321894,44.64998743,44.65190595,44.65280943,44.65532119,44.65597326,44.65190768]}]],[[{"lng":[10.79363386,10.86539138,10.876633,10.87321308,10.86567408,10.84196909,10.83428795,10.83098889,10.81580363,10.78857754,10.78821693,10.77990225,10.77824701,10.76839749,10.76285034,10.74191573,10.73096355,10.72401897,10.73924448,10.75102722,10.77065061,10.79363386],"lat":[44.93956283,44.92961802,44.91705876,44.90725762,44.90510553,44.90337949,44.9032151,44.90263341,44.89466613,44.90006501,44.89987262,44.89108606,44.88956352,44.88141214,44.88509874,44.89756377,44.8863023,44.88993616,44.90807381,44.90977962,44.94411429,44.93956283]}]],[[{"lng":[10.61600106,10.63240587,10.6494452,10.65010069,10.6500674,10.65062336,10.65687293,10.67404455,10.70579926,10.71073425,10.71710623,10.72380002,10.7245848,10.71849994,10.71835709,10.72645694,10.73954107,10.75821906,10.77099874,10.73691583,10.73177014,10.71501867,10.70622435,10.67313285,10.67305472,10.67570041,10.67601938,10.67396044,10.60772153,10.58834623,10.58769778,10.55414819,10.55278067,10.55244727,10.55137465,10.51892707,10.50921879,10.51755438,10.51251706,10.50934796,10.51155219,10.51298305,10.51662775,10.53412901,10.54095431,10.54107611,10.54081292,10.54113679,10.56083906,10.554508,10.54464027,10.53469776,10.5223089,10.49089032,10.5022961,10.51024999,10.51165804,10.56070366,10.58900084,10.60170269,10.61116638,10.61600106],"lat":[44.77298279,44.7669394,44.76790781,44.76654927,44.765343,44.76312089,44.75641415,44.74964956,44.76224676,44.7521424,44.75028718,44.74343944,44.73578836,44.7273707,44.717351,44.70055997,44.68726198,44.68168249,44.63753756,44.62717795,44.64313622,44.64418127,44.6242564,44.63241548,44.63276772,44.63533061,44.63592008,44.63929465,44.64597276,44.63625956,44.64301585,44.65570259,44.65597326,44.65532119,44.65190595,44.64998743,44.65397724,44.66377249,44.66993485,44.6725907,44.67358361,44.67408609,44.67567014,44.68274704,44.68709907,44.69028658,44.69267669,44.69438059,44.71368285,44.72021759,44.71704485,44.72008208,44.72436225,44.72648703,44.74869004,44.75050612,44.75547645,44.77317609,44.74901746,44.75296967,44.77271115,44.77298279]}]],[[{"lng":[10.839171,10.81148566,10.81064279,10.79836252,10.79064395,10.78328546,10.77600627,10.77145872,10.76111868,10.76114132,10.77173267,10.77435622,10.77855349,10.79702592,10.81526543,10.839171],"lat":[44.86138066,44.80140578,44.80073497,44.8033916,44.7976701,44.79851446,44.80078585,44.80162812,44.79749289,44.79823676,44.80887124,44.8123098,44.83141448,44.8505652,44.84988056,44.86138066]}]],[[{"lng":[10.89799094,10.88788567,10.8771456,10.87917682,10.87813444,10.84645322,10.84310217,10.84196909,10.87321308,10.89799094],"lat":[44.92180546,44.91427123,44.90188517,44.88965934,44.86752206,44.86745203,44.87308744,44.90337949,44.90725762,44.92180546]}]],[[{"lng":[10.80739037,10.80895314,10.80748381,10.80615318,10.80616272,10.8067436,10.81340449,10.82065767,10.81528894,10.78196925,10.77099874,10.762879,10.75572189,10.75821906,10.76157416,10.77826426,10.78662333,10.80739037],"lat":[44.70321611,44.70313734,44.70135116,44.69752825,44.69702397,44.69662768,44.69450556,44.6903571,44.65653085,44.62776737,44.63753756,44.65207661,44.67699206,44.68168249,44.68504542,44.68954142,44.70187306,44.70321611]}]],[[{"lng":[10.81009936,10.81541594,10.81489754,10.82151714,10.80960811,10.80088424,10.78662333,10.7819444,10.77826426,10.75821906,10.73954107,10.76754634,10.76845698,10.77395047,10.77104817,10.78290779,10.81009936],"lat":[44.74313417,44.74161798,44.73916564,44.73527584,44.70308585,44.70466926,44.70187306,44.6943985,44.68954142,44.68168249,44.68726198,44.71305725,44.72170432,44.73490659,44.74123501,44.73767421,44.74313417]}]],[[{"lng":[10.43076139,10.44068113,10.43617839,10.45614264,10.46017812,10.48098465,10.47153899,10.45211469,10.44019133,10.43483871,10.42756892,10.40261035,10.41376976,10.43076139],"lat":[44.67437513,44.67396233,44.65802187,44.61361679,44.61016235,44.60767077,44.57695498,44.58429759,44.58294519,44.59395957,44.60118963,44.61644298,44.66586351,44.67437513]}]],[[{"lng":[10.48764712,10.48926284,10.49148276,10.49705379,10.51011337,10.51662584,10.51337369,10.50602181,10.49229543,10.46536743,10.44146491,10.43521631,10.42521596,10.42833933,10.43553133,10.43509568,10.42966154,10.43158361,10.44155685,10.46744384,10.47577654,10.482786,10.48764712],"lat":[44.76850954,44.75971133,44.75907019,44.76050065,44.76126942,44.75908557,44.75695921,44.75652528,44.72935484,44.74280375,44.73047785,44.73568784,44.739387,44.74876431,44.75061743,44.75446133,44.76550415,44.76731819,44.76452185,44.76617385,44.77273707,44.77354647,44.76850954]}]],[[{"lng":[10.72663626,10.73177014,10.73037806,10.73436255,10.7404023,10.73639508,10.75736168,10.75546416,10.72597888,10.70627869,10.70577599,10.6854927,10.67573998,10.6794671,10.66893894,10.65159547,10.63771959,10.63762466,10.63525602,10.65738412,10.66077948,10.66137918,10.66242978,10.66815997,10.67396044,10.70622435,10.71052156,10.71501867,10.72581814,10.72663626],"lat":[44.64390716,44.64313622,44.63194041,44.62774787,44.62542798,44.62124888,44.61644039,44.60826388,44.60578313,44.57616412,44.56589081,44.57123341,44.56662366,44.55438403,44.53926565,44.57267403,44.57267585,44.57288426,44.57644719,44.59599653,44.62903557,44.62972904,44.63069489,44.63662033,44.63929465,44.6242564,44.64210617,44.64418127,44.64608459,44.64390716]}]],[[{"lng":[10.57707253,10.5876519,10.59041848,10.60713146,10.62152266,10.62232073,10.62402724,10.62010572,10.61881798,10.61424353,10.61274563,10.60626036,10.60372729,10.60229662,10.59920753,10.59758692,10.59692504,10.59579633,10.5512232,10.52802969,10.5261579,10.52631627,10.51865017,10.5046608,10.50282866,10.50237179,10.50218034,10.50015537,10.50095561,10.49745184,10.49307359,10.47241247,10.47185481,10.4714639,10.47173905,10.47755471,10.48043852,10.47546569,10.49081647,10.49689338,10.5201176,10.55005407,10.57707253],"lat":[44.41760474,44.41127326,44.41087916,44.40586473,44.40585934,44.39797831,44.39076669,44.38244983,44.3785429,44.37475447,44.3736863,44.37107688,44.36978007,44.36886387,44.365144,44.36415838,44.36381653,44.36338217,44.35982806,44.35088587,44.34550922,44.34387121,44.34580709,44.34262549,44.34260459,44.3428897,44.34325232,44.3479064,44.35068675,44.35841214,44.36135936,44.3829012,44.38369163,44.38462395,44.3936956,44.39418725,44.39551832,44.40786242,44.40442207,44.40464866,44.40697968,44.41931607,44.41760474]}]],[[{"lng":[10.37208797,10.42082695,10.42037064,10.41675161,10.41454996,10.41182993,10.41141693,10.41556011,10.40879235,10.39203089,10.38802619,10.38401493,10.38722001,10.38508833,10.37342461,10.35996339,10.33201618,10.3282632,10.32182348,10.3157022,10.3116703,10.29237384,10.28972083,10.28543038,10.32400949,10.33217288,10.33515431,10.34003189,10.33846374,10.34479163,10.35342014,10.35147695,10.36275898,10.37208797],"lat":[44.50863071,44.4955841,44.49129551,44.49038621,44.48931517,44.48500057,44.48195379,44.4780764,44.46851826,44.46723838,44.46479339,44.45517322,44.45148825,44.44850723,44.44729771,44.44388474,44.42773019,44.43114094,44.44476471,44.44971484,44.45150775,44.45171876,44.45391838,44.45998054,44.47903951,44.48537245,44.4958887,44.50606753,44.51615081,44.52711362,44.52997351,44.52458598,44.51255952,44.50863071]}]],[[{"lng":[10.54757697,10.56248673,10.56672028,10.56889946,10.57057856,10.56818062,10.56748216,10.56692777,10.56662095,10.55478033,10.5518594,10.55191687,10.56871047,10.55691328,10.54056809,10.53716707,10.53474886,10.52788843,10.5264815,10.49848047,10.47778323,10.47749567,10.47047088,10.47153899,10.47266246,10.4733598,10.4826431,10.48261822,10.51313622,10.51401272,10.54088255,10.54690023,10.54757697],"lat":[44.61312984,44.60840757,44.60477561,44.60266612,44.59381164,44.59175602,44.59154957,44.59154816,44.59138133,44.58140118,44.57543248,44.57191173,44.55205681,44.53542858,44.53697364,44.5363668,44.53918111,44.55405074,44.56572781,44.57416494,44.57040156,44.56899187,44.57655463,44.57695498,44.57755266,44.57826386,44.58991893,44.59293509,44.60933329,44.60960075,44.61304934,44.61327406,44.61312984]}]],[[{"lng":[10.57106435,10.61969566,10.65159547,10.66893894,10.63578324,10.61831059,10.56995661,10.5702894,10.56679063,10.56645365,10.56458928,10.54325738,10.54056809,10.55691328,10.56673395,10.56871047,10.5682949,10.5518594,10.57106435],"lat":[44.58650397,44.57027721,44.57267403,44.53926565,44.54670441,44.54119178,44.51314422,44.50679734,44.49978738,44.49988654,44.50063679,44.51679863,44.53697364,44.53542858,44.54358558,44.55205681,44.55298978,44.57543248,44.58650397]}]],[[{"lng":[10.47755471,10.47185481,10.49307359,10.49745184,10.50095561,10.50091486,10.50015537,10.50237179,10.5046608,10.51865017,10.52631627,10.52556501,10.52594651,10.52689965,10.52689428,10.52534628,10.51048671,10.51600155,10.51581597,10.51290698,10.51037753,10.50681911,10.50047554,10.4960537,10.48689325,10.48073235,10.47012966,10.43026342,10.40739755,10.42016862,10.39107947,10.38876484,10.37361353,10.38926374,10.40320448,10.3961874,10.36860353,10.36048236,10.34558338,10.33804695,10.33599465,10.3692914,10.37023611,10.3711912,10.38221796,10.42398468,10.44878787,10.46874945,10.4718588,10.47262187,10.48030771,10.47755471],"lat":[44.39418725,44.38369163,44.36135936,44.35841214,44.35068675,44.34964296,44.3479064,44.3428897,44.34262549,44.34580709,44.34387121,44.34248319,44.33932709,44.33690161,44.33575831,44.32800055,44.29975802,44.28218331,44.28178965,44.27733576,44.27398416,44.2710512,44.26697536,44.26503471,44.26346179,44.23163534,44.2260554,44.22743489,44.24930811,44.26748905,44.27961388,44.28080343,44.29833527,44.29867715,44.31762883,44.31781388,44.33711678,44.34814326,44.34723944,44.34571646,44.36019903,44.3841302,44.38429893,44.38434147,44.38562649,44.38683284,44.39234116,44.40490158,44.40573031,44.40113808,44.39580811,44.39418725]}]],[[{"lng":[10.28797615,10.29237384,10.3116703,10.31478636,10.3157022,10.3212231,10.32182348,10.32767578,10.3282632,10.33079501,10.32826262,10.33664786,10.34593502,10.36447996,10.36980533,10.33967097,10.33599465,10.33695999,10.33763982,10.33804695,10.33877297,10.36048236,10.40320448,10.37349205,10.37361353,10.37400343,10.37540906,10.37811397,10.38876484,10.42016862,10.40739755,10.307116,10.25385666,10.14203472,10.15736122,10.15994194,10.16255548,10.16694867,10.19119407,10.20525275,10.2080714,10.21397231,10.22381127,10.22573912,10.22972841,10.230591,10.23098276,10.23607579,10.23861065,10.25464862,10.25542784,10.26755326,10.27548457,10.28427512,10.28543038,10.28797615],"lat":[44.45742211,44.45171876,44.45150775,44.45034659,44.44971484,44.44544685,44.44476471,44.43582017,44.43114094,44.42837913,44.41953643,44.4161436,44.41152415,44.39739485,44.38894053,44.36623286,44.36019903,44.34808794,44.34601834,44.34571646,44.34564493,44.34814326,44.31762883,44.29903896,44.29833527,44.29734928,44.29419935,44.28933218,44.28080343,44.26748905,44.24930811,44.28432391,44.26858068,44.35386763,44.37937137,44.38078621,44.3824876,44.38443241,44.38731507,44.39220011,44.39433101,44.4016327,44.4104404,44.41434493,44.42673031,44.42892218,44.42962917,44.43577703,44.43859442,44.45170732,44.45229294,44.45860491,44.45750831,44.4594624,44.45998054,44.45742211]}]],[[{"lng":[10.99715504,11.02405153,11.01994915,11.01075863,11.00559645,11.00081113,10.9963905,10.97936427,10.96592661,10.99715504],"lat":[44.73287183,44.7343516,44.72138005,44.70935775,44.70427225,44.70055409,44.70064144,44.7092374,44.71941991,44.73287183]}]],[[{"lng":[11.11197122,11.11523,11.11672256,11.11689726,11.1166028,11.1117944,11.10588449,11.10168746,11.10148721,11.10141068,11.10159024,11.10334408,11.10342657,11.09931589,11.09879017,11.09800847,11.09732451,11.09665095,11.09605405,11.08873124,11.07469406,11.05886587,11.0511058,11.04997628,11.04181044,11.04185234,11.04216463,11.04907234,11.04601639,11.008747,10.9963065,11.01045832,11.01062587,11.00559645,11.02405153,11.01824702,10.99715504,10.98628014,10.99344999,10.9947512,10.99504476,10.99194819,10.99019971,10.98517121,10.98562973,11.00169013,11.01959569,11.03629064,11.0866581,11.11197122],"lat":[44.80038608,44.79876548,44.79673035,44.79632201,44.79518419,44.78714432,44.78592119,44.78208259,44.78178921,44.78142154,44.78079708,44.77829819,44.77641521,44.77181876,44.77193647,44.77198684,44.77194539,44.77184075,44.7714106,44.7635869,44.75874765,44.74930285,44.74418076,44.74295875,44.7305695,44.7299656,44.7295099,44.72252306,44.71809813,44.68446137,44.6878272,44.7012141,44.70153713,44.70427225,44.7343516,44.73084449,44.73287183,44.73719358,44.73895909,44.73970153,44.74052461,44.74485474,44.74617254,44.74905078,44.74952892,44.74973907,44.76723452,44.75841289,44.80679011,44.80038608]}]],[[{"lng":[10.87162338,10.86902651,10.88333867,10.8848207,10.88502423,10.88508039,10.88563029,10.88428172,10.87818528,10.87621769,10.87271904,10.85262925,10.85056304,10.81528894,10.82065767,10.8067436,10.80615318,10.80748381,10.80960811,10.81200491,10.81628175,10.82147836,10.82151714,10.82128607,10.82109628,10.81489754,10.81745398,10.8193372,10.81981685,10.82043084,10.82421634,10.83930418,10.87162338],"lat":[44.72405751,44.71839064,44.71383605,44.71340424,44.71370165,44.71368334,44.71250584,44.70871115,44.69669004,44.69673139,44.69819319,44.67150057,44.65821064,44.65653085,44.6903571,44.69662768,44.69752825,44.70135116,44.70308585,44.70757027,44.71758359,44.73474255,44.73527584,44.73703824,44.73730821,44.73916564,44.74632916,44.74188472,44.74136026,44.74105593,44.73968948,44.73689246,44.72405751]}]],[[{"lng":[11.22186998,11.11068215,11.10835189,11.10686272,11.1060222,11.10498714,11.10435537,11.10138014,11.09931589,11.10148721,11.10588449,11.10788461,11.1117944,11.11672256,11.0866581,11.10594031,11.1344384,11.14173268,11.14249154,11.16043932,11.17620978,11.1995779,11.20185975,11.19349132,11.21424548,11.22186998],"lat":[44.81297492,44.77782967,44.77320961,44.77187779,44.77135316,44.77103917,44.77104182,44.77124067,44.77181876,44.78178921,44.78592119,44.78669446,44.78714432,44.79673035,44.80679011,44.82647019,44.80469142,44.80669281,44.80669656,44.80380168,44.80658084,44.80994083,44.81041898,44.82044639,44.82628847,44.81297492]}]],[[{"lng":[10.93478153,10.93205663,10.92861835,10.91902084,10.91691937,10.93590555,10.95144711,10.96328793,10.96689169,10.97350066,10.98230833,10.99198995,11.00655605,11.00799038,11.00609528,11.00290258,11.00229973,10.99774913,10.99481607,10.99364004,10.99403817,10.9730318,10.95395871,10.94982736,10.9536634,10.93730744,10.93712829,10.92979201,10.91670302,10.91450638,10.91001251,10.89878168,10.89679133,10.89074164,10.8848207,10.87344904,10.87162338,10.8633686,10.83930418,10.83291945,10.8305817,10.82741066,10.82421634,10.81981685,10.81619403,10.81805863,10.82751826,10.84204233,10.82408636,10.81499191,10.84591291,10.85006838,10.87687135,10.92907728,10.93478153],"lat":[44.890057,44.87606873,44.87071963,44.86295778,44.83389627,44.80425378,44.79860402,44.82432832,44.82676482,44.82517742,44.82754805,44.82058799,44.81409388,44.81005541,44.80937755,44.806558,44.79697578,44.78928262,44.78707494,44.77857325,44.77230923,44.7787203,44.77133911,44.77296826,44.77970268,44.78448148,44.78979623,44.79133101,44.78458217,44.78320907,44.77836183,44.75972845,44.74388785,44.73727073,44.71340424,44.7237285,44.72405751,44.72702119,44.73689246,44.73858405,44.7389237,44.73912414,44.73968948,44.74136026,44.7574246,44.76020079,44.76583027,44.79553861,44.80263535,44.80722611,44.85792647,44.86651889,44.86658579,44.88179235,44.890057]}]],[[{"lng":[11.00063936,11.04926044,11.05005481,11.05011392,11.05356651,11.06855723,11.08157029,11.08527213,11.12335545,11.12779278,11.11829163,11.14279053,11.14182678,11.14012612,11.15227635,11.15245487,11.15000128,11.14088754,11.13265707,11.13160657,11.107712,11.10450505,11.11365224,11.10815167,11.07295513,11.06804297,11.05614262,11.055788,11.04859906,11.04848152,11.05494818,11.03434638,11.0047049,10.99613202,10.99606247,10.98968252,10.98396851,10.98358608,11.00063936],"lat":[44.65833952,44.64244315,44.64434643,44.64944061,44.6549111,44.65046723,44.64571614,44.64450527,44.63253233,44.63135593,44.61784003,44.60567658,44.60413137,44.6012285,44.58914983,44.58661985,44.58364578,44.58238118,44.57587344,44.5674275,44.54513872,44.53941831,44.53499348,44.52467021,44.52221561,44.5231711,44.53406923,44.53747918,44.54817031,44.5486032,44.56786413,44.59946063,44.63228328,44.63062182,44.62598435,44.62222075,44.62797745,44.65127319,44.65833952]}]],[[{"lng":[10.89671458,10.93462746,10.97128395,10.97267349,10.92092652,10.91248168,10.91870034,10.9207568,10.92073099,10.8795087,10.89671458],"lat":[44.59384881,44.5634802,44.57920159,44.55967379,44.53714072,44.54362925,44.55091146,44.55372165,44.55447389,44.57371394,44.59384881]}]],[[{"lng":[10.95625447,10.99024469,10.98424641,10.97447874,10.98295008,10.92698886,10.92428017,10.92129922,10.91955832,10.91883401,10.89568413,10.88058157,10.87930766,10.87835363,10.87843847,10.87888665,10.89647152,10.91058116,10.91344827,10.90373084,10.90097525,10.90630685,10.92843367,10.9529621,10.95625447],"lat":[44.54226091,44.53073788,44.51950067,44.51459859,44.50355871,44.47657748,44.47259,44.46604129,44.46240652,44.46140139,44.45482909,44.45881493,44.46335522,44.47343185,44.48754148,44.48818228,44.50734158,44.51220178,44.51523263,44.52314624,44.52893128,44.53879915,44.5342097,44.54332658,44.54226091]}]],[[{"lng":[10.99946634,11.01278236,11.02224898,11.02313607,11.0274492,11.03133905,11.04640834,11.03756712,11.03246518,11.0290214,11.02808786,11.02755884,11.01584958,10.98265624,10.98230833,10.98130648,10.98094733,10.98049681,10.97856551,10.97415079,10.97350066,10.97208712,10.97091758,10.96689169,10.96383127,10.96026054,10.95506747,10.95504501,10.95537084,10.95557207,10.96023145,10.97076989,10.97124888,10.97118935,10.97054538,10.99946634],"lat":[44.86530223,44.85993706,44.86212828,44.86179751,44.85848925,44.84714052,44.84110555,44.82291296,44.81990718,44.82230899,44.82273967,44.82244301,44.81024997,44.82743454,44.82754805,44.827867,44.82797675,44.82807742,44.82803248,44.82539556,44.82517742,44.82515721,44.82542779,44.82676482,44.82763053,44.82899721,44.83464953,44.83621792,44.83763304,44.83797166,44.84068241,44.85293281,44.85438015,44.85521208,44.85599739,44.86530223]}]],[[{"lng":[11.00881774,11.05731212,11.06376363,11.03556343,11.02504629,11.00231986,10.98549698,10.96299321,10.96256107,10.96173171,10.96166634,10.95637511,10.95353495,10.94842921,10.94554919,10.95586263,10.96409593,10.95059492,11.00881774],"lat":[44.95473472,44.95010827,44.93580661,44.90360617,44.90968133,44.90883094,44.90211223,44.88578918,44.88534651,44.88329932,44.87953759,44.88249862,44.88397379,44.88633322,44.88797054,44.8958665,44.90830146,44.93332884,44.95473472]}]],[[{"lng":[10.82662429,10.86125043,10.8552,10.84819697,10.83255541,10.82301123,10.81854365,10.81696764,10.80885936,10.81476202,10.75614851,10.70202588,10.70053911,10.70607695,10.70423723,10.72557187,10.72609467,10.72557046,10.72886719,10.75138944,10.78583384,10.79332075,10.8033822,10.79563937,10.79740136,10.82662429],"lat":[44.24856972,44.2321901,44.20738595,44.20005207,44.19478728,44.18232682,44.16738551,44.16438106,44.1548495,44.11618494,44.15331791,44.16635898,44.1731064,44.18252202,44.19118337,44.19847956,44.19966907,44.20571799,44.21615662,44.21665071,44.21811595,44.22638938,44.23401848,44.24087468,44.24486228,44.24856972]}]],[[{"lng":[11.2453826,11.26968614,11.34112864,11.36850196,11.35252733,11.35147301,11.34749072,11.33573757,11.32339547,11.31160934,11.309157,11.30156737,11.29334728,11.17819336,11.21240011,11.22186998,11.21424548,11.19349132,11.18331892,11.19141717,11.21959538,11.22397972,11.22511107,11.23474353,11.2453826],"lat":[44.89825052,44.89652123,44.87259427,44.84079106,44.83611629,44.83254123,44.83013922,44.83190604,44.83255448,44.8274944,44.8247719,44.8104213,44.80280764,44.79618608,44.80704643,44.81297492,44.82628847,44.82044639,44.84108514,44.86413274,44.88467101,44.88639508,44.88716521,44.90597572,44.89825052]}]],[[{"lng":[10.82761776,10.83460426,10.86581532,10.848655,10.8248391,10.8242763,10.81939888,10.81048283,10.791348,10.81437412,10.79232472,10.79472953,10.80230759,10.80356963,10.81505168,10.82761776],"lat":[44.55755071,44.5506643,44.54927626,44.51312673,44.49272746,44.49255189,44.49248117,44.49328009,44.49395247,44.51384452,44.5181612,44.52640944,44.54138271,44.55169891,44.56853073,44.55755071]}]],[[{"lng":[10.63231949,10.6794599,10.69723259,10.70008819,10.70423723,10.70607695,10.70053911,10.70022497,10.70202588,10.70721616,10.71239634,10.6412097,10.62405584,10.60984676,10.61811453,10.61831265,10.61336051,10.61022348,10.60684516,10.60572496,10.60353223,10.60201362,10.60167843,10.60185202,10.60533074,10.60679619,10.62361132,10.63078528,10.63130292,10.63272258,10.62722383,10.63231949],"lat":[44.20228129,44.20168783,44.195195,44.19354099,44.19118337,44.18252202,44.1731064,44.17044618,44.16635898,44.16043852,44.1572129,44.15983508,44.12036609,44.11861057,44.12817212,44.13689721,44.13995242,44.13952852,44.14126869,44.14191466,44.14358403,44.14614421,44.14715727,44.14802813,44.15965629,44.16987216,44.18004188,44.18568362,44.18630645,44.19104875,44.20220996,44.20228129]}]],[[{"lng":[10.79945971,10.80568511,10.80799961,10.80900646,10.82671887,10.8306469,10.85895975,10.88135954,10.89399972,10.8795087,10.89615101,10.90719035,10.9207568,10.91248168,10.90630685,10.90258677,10.89869412,10.83765838,10.83693504,10.83653105,10.83460426,10.8343417,10.82823701,10.82761776,10.82540209,10.82307056,10.79463908,10.79372799,10.79446981,10.78676871,10.7844252,10.78780418,10.79871853,10.79652228,10.79945971],"lat":[44.62633995,44.61817102,44.61763926,44.62002695,44.61813351,44.59939059,44.60097666,44.59468165,44.59354561,44.57371394,44.55980938,44.5562661,44.55372165,44.54362925,44.53879915,44.53817701,44.54308516,44.55689891,44.55669449,44.55468443,44.5506643,44.55072252,44.55674407,44.55755071,44.56073253,44.56386662,44.58330388,44.58845347,44.60395244,44.60649612,44.62481595,44.62401589,44.623975,44.62837575,44.62633995]}]],[[{"lng":[10.55196158,10.5592968,10.58774789,10.60430235,10.59231026,10.60004602,10.59699145,10.58862015,10.58983937,10.58469592,10.58336842,10.58504409,10.58525841,10.55854469,10.50782402,10.48521494,10.49290258,10.47012966,10.48689325,10.4960537,10.50047554,10.51581597,10.51122822,10.51048671,10.52534628,10.52689428,10.52689965,10.52608207,10.52594651,10.52556501,10.52631627,10.52644166,10.54110762,10.55196158],"lat":[44.32614749,44.32262649,44.32308974,44.31574612,44.30538061,44.2968735,44.29122574,44.2838431,44.26910637,44.25254945,44.24649087,44.24359568,44.2417831,44.21945427,44.18705805,44.20449608,44.21700007,44.2260554,44.26346179,44.26503471,44.26697536,44.28178965,44.29396835,44.29975802,44.32800055,44.33575831,44.33690161,44.3387491,44.33932709,44.34248319,44.34387121,44.34532537,44.33264148,44.32614749]}],[{"lng":[10.4808027,10.48064449,10.4818016,10.48168664,10.4808027],"lat":[44.18949128,44.19016856,44.19040564,44.18981293,44.18949128]}]],[[{"lng":[10.96078736,10.98532734,10.99022956,11.00438191,10.99466773,10.98884541,10.96676077,10.9760037,10.94274466,10.92373335,10.91610297,10.91297819,10.91398626,10.91407126,10.91469343,10.91560696,10.91723872,10.92069492,10.92337236,10.92314392,10.92412463,10.96078736],"lat":[44.44381066,44.43985394,44.44050566,44.40822855,44.40261067,44.39339245,44.37634214,44.35960468,44.3601069,44.35168728,44.36979106,44.38201514,44.38521223,44.38530629,44.38572999,44.38636741,44.38788435,44.39209682,44.39734663,44.41385678,44.41854714,44.44381066]}]],[[{"lng":[10.70572805,10.71065293,10.72677614,10.7398214,10.76199581,10.78127858,10.7817826,10.78188451,10.78177908,10.77222083,10.75924193,10.66645384,10.66268881,10.64428253,10.63519265,10.67514412,10.6754733,10.67560047,10.67216707,10.66867671,10.66771544,10.66712694,10.6669104,10.66728204,10.66787369,10.67357503,10.6751625,10.67567052,10.67657637,10.69742421,10.70572805],"lat":[44.36537611,44.33316248,44.32736506,44.31724593,44.3270251,44.31231242,44.31156633,44.31120463,44.31062108,44.30548515,44.30496562,44.24403929,44.25279101,44.26112414,44.27486706,44.30718454,44.30773788,44.31573055,44.32111055,44.32361938,44.32465975,44.32557763,44.32634602,44.32751097,44.32891577,44.33939266,44.34183615,44.34249491,44.34349444,44.36348811,44.36537611]}]],[[{"lng":[10.8709812,10.87545108,10.89869412,10.90630685,10.90097525,10.90373084,10.91248714,10.91344827,10.91058116,10.90092844,10.89647152,10.87888665,10.87930766,10.8695123,10.8509068,10.8469482,10.8242763,10.82397443,10.848655,10.8709812],"lat":[44.54624284,44.54749344,44.54308516,44.53879915,44.52893128,44.52314624,44.51854366,44.51523263,44.51220178,44.50977017,44.50734158,44.48818228,44.46335522,44.45891568,44.47779118,44.49016182,44.49255189,44.50263509,44.51312673,44.54624284]}]],[[{"lng":[10.94962301,10.98820093,10.98610418,10.98392969,10.97972362,10.95101879,10.93748131,10.92412463,10.91469343,10.89724196,10.88868508,10.88503474,10.88473969,10.8809307,10.88138135,10.88422739,10.88435608,10.87853529,10.88671643,10.88065598,10.86646343,10.86579522,10.86740822,10.8695123,10.87930766,10.89568413,10.92698886,10.94962301],"lat":[44.47712571,44.45771938,44.45625756,44.45522425,44.45391112,44.45001333,44.43937244,44.41854714,44.38572999,44.38906574,44.38608476,44.38537876,44.38557269,44.39124419,44.3923531,44.39420574,44.40168487,44.40768204,44.41568107,44.41852237,44.44055069,44.45229653,44.4575547,44.45891568,44.46335522,44.45482909,44.47657748,44.47712571]}]],[[{"lng":[11.08880775,11.08548303,11.08549632,11.08597595,11.08830498,11.0892539,11.10289289,11.11007247,11.11051856,11.11441836,11.11446592,11.10261191,11.10594031,11.0866581,11.07353741,11.07041882,11.03756712,11.04640834,11.04357261,11.06525362,11.06842625,11.0731766,11.08880775],"lat":[44.87447337,44.8623454,44.86201207,44.86092308,44.85847695,44.8581175,44.8545543,44.85470088,44.85444058,44.84930476,44.8485297,44.82744975,44.82647019,44.80679011,44.80860906,44.80943084,44.82291296,44.84110555,44.84891162,44.86432454,44.86508179,44.86502712,44.87447337]}]],[[{"lng":[11.07979425,11.15128666,11.24620567,11.26043375,11.2548628,11.23662776,11.22397972,11.08353629,11.0731766,11.07015761,11.06842625,11.06673088,11.06525362,11.05537956,11.04357261,11.04232045,11.03133905,11.02827618,11.0274492,11.02313607,11.02224898,11.01538832,11.01278236,10.99946634,11.00123328,11.01427885,11.01540331,11.03703482,11.06376363,11.05957064,11.07979425],"lat":[44.96032353,44.93333821,44.95143857,44.93310137,44.92453369,44.9094856,44.88639508,44.87431764,44.86502712,44.86449677,44.86508179,44.86492795,44.86432454,44.85821033,44.84891162,44.8435598,44.84714052,44.85106586,44.85848925,44.86179751,44.86212828,44.86026016,44.85993706,44.86530223,44.8782972,44.88067836,44.8900116,44.90163631,44.93580661,44.94924823,44.96032353]}]],[[{"lng":[10.89138083,10.90072281,10.89994172,10.90410272,10.92172875,10.92805502,10.9465104,10.94753806,10.9477925,10.95548864,10.96592661,10.97936427,10.98637842,10.98978725,10.9963905,11.00559645,11.01062587,11.00789843,11.00606188,11.00483972,11.00308364,11.00266862,10.9963065,11.008747,10.99985222,10.99037215,10.98358608,10.98872163,10.98396851,10.99606247,10.99866271,10.99970006,11.00746127,11.01095034,11.00365675,10.99198463,10.98902519,10.98183464,10.97350117,10.97143005,10.96674116,10.95794585,10.93462746,10.9270841,10.89691072,10.89671458,10.88135954,10.85895975,10.8306469,10.82671887,10.80799961,10.80284795,10.79945971,10.79652228,10.78780418,10.78196925,10.78322701,10.78905422,10.79316109,10.79445037,10.79491268,10.79691008,10.80462994,10.81528894,10.82762292,10.83596985,10.85056304,10.85262925,10.86478956,10.87271904,10.87564498,10.87621769,10.87818528,10.88428172,10.88502423,10.8888388,10.89138083],"lat":[44.72604532,44.72472916,44.72004201,44.71835227,44.71759333,44.70892101,44.70477736,44.7045798,44.70463848,44.71274397,44.71941991,44.7092374,44.70767298,44.70586774,44.70064144,44.70427225,44.70153713,44.69932795,44.69882558,44.69864655,44.69864987,44.69842085,44.6878272,44.68446137,44.67408883,44.66593266,44.65127319,44.63641098,44.62797745,44.62598435,44.61773751,44.61674709,44.61163705,44.60619672,44.59785904,44.59513217,44.57100775,44.56766686,44.57923532,44.58018565,44.57746146,44.57993076,44.5634802,44.56611046,44.58828916,44.59384881,44.59468165,44.60097666,44.59939059,44.61813351,44.61763926,44.62668261,44.62633995,44.62837575,44.62401589,44.62776737,44.63094279,44.63434005,44.63873631,44.64251953,44.65012376,44.65273004,44.65524146,44.65653085,44.6598315,44.6601837,44.65821064,44.67150057,44.68007048,44.69819319,44.69745296,44.69673139,44.69669004,44.70871115,44.71370165,44.72243067,44.72604532]}],[{"lng":[10.89244935,10.89554251,10.8912333,10.89244935],"lat":[44.73501057,44.72874827,44.72889054,44.73501057]}],[{"lng":[10.89504281,10.89074164,10.8942911,10.89504281],"lat":[44.74229276,44.73727073,44.7420524,44.74229276]}]],[[{"lng":[10.77987995,10.79217731,10.77686403,10.7751325,10.75597751,10.7511774,10.74560939,10.73273078,10.70541257,10.71313963,10.68195857,10.6967596,10.71213822,10.7218032,10.72916692,10.72783492,10.72817315,10.74315267,10.77987995],"lat":[44.2979837,44.29716116,44.27612667,44.27480317,44.26569129,44.25846364,44.25656825,44.24288187,44.19814767,44.21858135,44.24725111,44.25541389,44.27210984,44.26925465,44.27682286,44.28054321,44.28139338,44.29169005,44.2979837]}]],[[{"lng":[10.64667838,10.60329053,10.60004602,10.59233494,10.59231026,10.59255629,10.59442203,10.60430235,10.60177701,10.59023907,10.58774789,10.58021274,10.57487793,10.5592968,10.54110762,10.53308278,10.52644166,10.5261579,10.5512232,10.59692504,10.59920753,10.60372729,10.60626036,10.611145,10.61274563,10.61424353,10.62010572,10.64667838],"lat":[44.36061615,44.29626012,44.2968735,44.30259263,44.30538061,44.30613343,44.30882626,44.31574612,44.31832938,44.32246088,44.32308974,44.32456268,44.3253206,44.32262649,44.33264148,44.340744,44.34532537,44.34550922,44.35982806,44.36381653,44.365144,44.36978007,44.37107688,44.37298868,44.3736863,44.37475447,44.38244983,44.36061615]}]],[[{"lng":[10.9895672,11.00070531,11.00268673,11.00390732,11.00358496,11.00223055,10.98551247,10.96670558,10.95848883,10.95017336,10.94990678,10.94974477,10.97372082,10.96586637,10.96373294,10.9670766,10.96220613,10.96104812,10.95715948,10.95705504,10.90724322,10.8937634,10.8932221,10.88970292,10.88167437,10.8742154,10.86125043,10.86985384,10.86588853,10.85952462,10.85731651,10.85594016,10.86457523,10.86667796,10.86625122,10.86408535,10.86319284,10.863641,10.89431864,10.92730116,10.9895672],"lat":[44.32493358,44.32448514,44.32415046,44.32318302,44.30663342,44.30599154,44.30310548,44.30224709,44.29855147,44.29340175,44.29315874,44.29294993,44.2769811,44.26789766,44.25363778,44.24314249,44.23889702,44.23278369,44.22610608,44.22602403,44.20543403,44.21131745,44.21590894,44.22446601,44.22514776,44.22681894,44.2321901,44.23695572,44.23867712,44.24019439,44.24046439,44.2409009,44.24982617,44.25531961,44.26004412,44.26167299,44.26395629,44.26703698,44.29960869,44.32203799,44.32493358]}]],[[{"lng":[11.08346707,11.08620939,11.08891277,11.09325202,11.10166065,11.11699352,11.11483901,11.10536168,11.09160773,11.07809108,11.06855723,11.05356651,11.05011392,11.04926044,10.99056127,10.99037215,10.99985222,11.00728542,11.008747,11.01667698,11.03172397,11.03844689,11.04601639,11.04907234,11.05160575,11.05358932,11.05434596,11.06604331,11.08346707],"lat":[44.72635548,44.72571124,44.72433848,44.71843267,44.71441958,44.71043589,44.70580262,44.69051642,44.66935731,44.64702985,44.65046723,44.6549111,44.64944061,44.64244315,44.66429841,44.66593266,44.67408883,44.68309537,44.68446137,44.69263967,44.71442841,44.7193048,44.71809813,44.72252306,44.72158071,44.72125697,44.72125235,44.72536232,44.72635548]}]],[[{"lng":[10.94668744,10.96409593,10.94554919,10.94842921,10.95637511,10.96166634,10.95844418,10.97124888,10.96023145,10.95537084,10.96689169,10.95144711,10.91691937,10.93754689,10.93331007,10.92907728,10.88057091,10.87831039,10.87917682,10.87688775,10.8771456,10.88788567,10.94668744],"lat":[44.92265955,44.90830146,44.88797054,44.88633322,44.88249862,44.87953759,44.85624164,44.85438015,44.84068241,44.83763304,44.82676482,44.79860402,44.83389627,44.88969203,44.89040003,44.88179235,44.86766703,44.86774816,44.88965934,44.89014901,44.90188517,44.91427123,44.92265955]}]],[[{"lng":[10.66603915,10.66895412,10.6688593,10.69132752,10.69742421,10.69466762,10.69253413,10.68353505,10.67567052,10.66728204,10.66771544,10.67560047,10.6754733,10.58504409,10.58983937,10.58654617,10.58862015,10.5895734,10.60004602,10.60329053,10.60954225,10.61309487,10.64965924,10.6430857,10.62010572,10.62232073,10.66603915],"lat":[44.40321542,44.39584464,44.3898862,44.36640055,44.36348811,44.35958096,44.3534727,44.34554822,44.34249491,44.32751097,44.32465975,44.31573055,44.30773788,44.24359568,44.26910637,44.27476998,44.2838431,44.28572944,44.2968735,44.29626012,44.2978017,44.30119067,44.35557659,44.37122816,44.38244983,44.39797831,44.40321542]}]],[[{"lng":[10.88138135,10.88503474,10.91469343,10.91610297,10.92246142,10.92373335,10.92635228,10.93109384,10.88622411,10.86520773,10.85518536,10.84810731,10.83851997,10.82193961,10.81646541,10.81265653,10.79217731,10.77674946,10.76001884,10.75924193,10.76245033,10.77222083,10.78188451,10.76199581,10.76780068,10.76798645,10.763153,10.7675098,10.79124366,10.79229289,10.79304534,10.80949563,10.8326603,10.8520843,10.87853529,10.88138135],"lat":[44.3923531,44.38537876,44.38572999,44.36979106,44.35550452,44.35168728,44.34725126,44.33003439,44.29345871,44.26898449,44.26661747,44.26750549,44.27103634,44.27231938,44.27340594,44.27586123,44.29716116,44.2994891,44.29656299,44.30496562,44.30534828,44.30548515,44.31120463,44.3270251,44.33609124,44.34514068,44.36238822,44.3810781,44.38314799,44.38379773,44.38950264,44.39253363,44.38912127,44.39285007,44.40768204,44.3923531]}]],[[{"lng":[10.58525841,10.59945968,10.60385447,10.60719462,10.60902416,10.61329425,10.62729793,10.62722383,10.63050274,10.63272258,10.63078528,10.61125551,10.60679619,10.60533074,10.60167843,10.60572496,10.61022348,10.61336051,10.61831265,10.61811453,10.60509357,10.52512166,10.51001441,10.55854469,10.57399542,10.58525841],"lat":[44.2417831,44.23899224,44.23758016,44.23561557,44.23428439,44.23016381,44.2162626,44.20220996,44.19313317,44.19104875,44.18568362,44.17392374,44.16987216,44.15965629,44.14715727,44.14191466,44.13952852,44.13995242,44.13689721,44.12817212,44.11468908,44.15623594,44.18691385,44.21945427,44.23645608,44.2417831]}]],[[{"lng":[10.7265897,10.73417113,10.74712001,10.75053298,10.76419785,10.763153,10.76357402,10.76798645,10.76829626,10.76780068,10.76640337,10.76199581,10.7398214,10.71065293,10.70572805,10.69742421,10.69252709,10.69132752,10.69067108,10.6847786,10.6688593,10.66827553,10.66895412,10.68452507,10.69986802,10.7265897],"lat":[44.42553386,44.41294124,44.39963592,44.38660172,44.37655142,44.36238822,44.35184848,44.34514068,44.34170132,44.33609124,44.33180053,44.3270251,44.31724593,44.33316248,44.36537611,44.36348811,44.36534747,44.36640055,44.36711249,44.37643642,44.3898862,44.3914342,44.39584464,44.39721848,44.4196059,44.42553386]}]],[[{"lng":[10.76513637,10.76720756,10.77563159,10.79032201,10.78838806,10.78810728,10.78846331,10.79207942,10.79370155,10.78563376,10.75928497,10.75382875,10.75428198,10.75644095,10.76023375,10.75995957,10.73898103,10.72821244,10.7265897,10.72481604,10.70329161,10.70096507,10.69986802,10.69911313,10.68492145,10.68646176,10.68592491,10.68452507,10.68404903,10.66895412,10.66537127,10.6629168,10.62232073,10.65342969,10.66701689,10.66819582,10.67058582,10.67359556,10.68432944,10.68594366,10.68720679,10.6882288,10.69301706,10.70263765,10.72286921,10.72635546,10.72645076,10.74290451,10.76513637],"lat":[44.50090247,44.50092359,44.49021704,44.49230347,44.4897605,44.48750194,44.48706425,44.48608028,44.48410125,44.45975861,44.45707274,44.43219483,44.42765951,44.42599686,44.41518023,44.41483335,44.40873585,44.42411389,44.42553386,44.42638891,44.42103132,44.42018374,44.4196059,44.41913099,44.40700759,44.40166423,44.40002467,44.39721848,44.39682037,44.39584464,44.40623205,44.40711335,44.39797831,44.43330565,44.46699858,44.46778259,44.46917905,44.47023331,44.47234414,44.47295049,44.47358903,44.47415009,44.47755419,44.48803421,44.49915051,44.49983755,44.48966171,44.4867701,44.50090247]}]],[[{"lng":[11.12747999,11.11699352,11.09325202,11.08620939,11.06604331,11.05358932,11.04185234,11.0511058,11.08873124,11.09321071,11.09546002,11.09665095,11.09879017,11.10045048,11.10138014,11.10435537,11.1060222,11.12989021,11.12747999],"lat":[44.77139638,44.71043589,44.71843267,44.72571124,44.72536232,44.72125697,44.7299656,44.74418076,44.7635869,44.76688967,44.77071034,44.77184075,44.77193647,44.77139281,44.77124067,44.77104182,44.77135316,44.7829192,44.77139638]}]],[[{"lng":[10.66645384,10.68195857,10.68905427,10.70287831,10.71313963,10.70008819,10.6794599,10.67575443,10.64361618,10.64268999,10.63231949,10.62722383,10.61329425,10.60385447,10.58525841,10.58504409,10.62779048,10.63519265,10.63954409,10.64428253,10.65707425,10.66268881,10.66645384],"lat":[44.24403929,44.24725111,44.23479435,44.22392955,44.21858135,44.19354099,44.20168783,44.20165222,44.19941837,44.19941368,44.20228129,44.20220996,44.23016381,44.23758016,44.2417831,44.24359568,44.27272209,44.27486706,44.27363428,44.26112414,44.25669886,44.25279101,44.24403929]}]],[[{"lng":[11.00471702,11.05494818,11.04848152,11.05407522,11.055788,11.0561321,11.05614262,11.05498648,11.04255633,11.03088776,11.03012041,11.03019989,11.03074314,11.03343916,11.03382044,11.03398898,11.03248992,10.9997727,10.99785117,10.98902519,10.98879649,10.99198463,11.01095034,10.99903747,10.99866271,10.99826664,10.99805441,10.99602152,10.99593302,10.99606247,10.99613202,11.00471702],"lat":[44.63180902,44.56786413,44.5486032,44.54030437,44.53747918,44.53652773,44.53406923,44.52628256,44.52813412,44.52755849,44.53080403,44.53200444,44.5342364,44.54115635,44.54270699,44.54427041,44.54819518,44.5682543,44.56914318,44.57100775,44.57131782,44.59513217,44.60619672,44.61727183,44.61773751,44.61829358,44.61872042,44.62406287,44.62462186,44.62598435,44.63062182,44.63180902]}]],[[{"lng":[11.21959538,11.21798862,11.19141717,11.18331892,11.18113293,11.1995779,11.16043932,11.15432091,11.14249154,11.14173268,11.13785612,11.1344384,11.12786648,11.10738764,11.10646597,11.10261191,11.11051856,11.10289289,11.0892539,11.08549632,11.08880775,11.09922918,11.1195375,11.13230036,11.13824835,11.14097918,11.14714801,11.15586539,11.17479447,11.17556237,11.17849749,11.19109596,11.22397972,11.21959538],"lat":[44.88467101,44.88108343,44.86413274,44.84108514,44.83072953,44.80994083,44.80380168,44.80384531,44.80669656,44.80669281,44.80547366,44.80469142,44.81638632,44.82592135,44.82631645,44.82744975,44.85444058,44.8545543,44.8581175,44.86201207,44.87447337,44.87527242,44.87019809,44.87718001,44.87815799,44.87771073,44.87475022,44.87328963,44.87610827,44.87632768,44.87895431,44.88170184,44.88639508,44.88467101]}]],[[{"lng":[11.03057736,11.03703482,11.01427885,11.00779626,11.00123328,10.97684407,10.95844418,10.95944931,10.96453233,10.96565811,10.96256107,10.96544201,10.97530644,10.98549698,11.03057736],"lat":[44.90453297,44.90163631,44.88067836,44.87845202,44.8782972,44.85812099,44.85624164,44.86124753,44.86297859,44.86373954,44.88534651,44.88630518,44.89264337,44.90211223,44.90453297]}]],[[{"lng":[11.04775117,11.0866581,11.07385328,11.06150556,11.04663211,11.04165473,11.03629064,11.03402648,11.01959569,11.00169013,10.99293918,10.98942499,10.98562973,10.98517121,10.98390162,10.98267567,10.98256911,10.98253336,10.98320624,10.98975297,10.99449086,10.99553243,10.99588572,10.99620069,10.9917457,10.99403817,10.99364004,10.99451704,10.99481607,10.99500306,11.00290258,11.00799038,11.00717701,11.00655605,11.00437059,11.01584958,11.02219051,11.02264036,11.02504316,11.02808786,11.03246518,11.03756712,11.04775117],"lat":[44.81981405,44.80679011,44.78690369,44.78093837,44.76643793,44.76219702,44.75841289,44.75728296,44.76723452,44.74973907,44.75202569,44.75120478,44.74952892,44.74905078,44.74960398,44.75037246,44.75058137,44.75096746,44.75219518,44.75595221,44.76070371,44.76196382,44.76265981,44.76339043,44.77053859,44.77230923,44.77857325,44.785848,44.78707494,44.78754878,44.806558,44.81005541,44.81340104,44.81409388,44.81570331,44.81024997,44.81401773,44.81458589,44.81959348,44.82273967,44.81990718,44.82291296,44.81981405]}]],[[{"lng":[10.80871726,10.80356963,10.80230759,10.79232472,10.81404331,10.81437412,10.81293894,10.80149432,10.791348,10.79032201,10.77583244,10.77563159,10.77382761,10.77312514,10.76720756,10.76641233,10.76140766,10.74290451,10.72737558,10.72645076,10.72110263,10.7220988,10.72635546,10.73003205,10.74137949,10.75160006,10.75970797,10.76316791,10.76496176,10.76582288,10.76672862,10.77692899,10.78530907,10.78567235,10.78633072,10.78677072,10.78676871,10.79446981,10.79372799,10.79463908,10.79699691,10.81505168,10.80871726],"lat":[44.5578855,44.55169891,44.54138271,44.5181612,44.51496801,44.51384452,44.51123238,44.49908489,44.49395247,44.49230347,44.49015343,44.49021704,44.49146676,44.4922639,44.50092359,44.50164692,44.50206961,44.4867701,44.48917058,44.48966171,44.49554951,44.49822206,44.49983755,44.50162595,44.51058655,44.52339388,44.53441433,44.53854263,44.54042344,44.54142741,44.54268276,44.58331918,44.59982946,44.6009941,44.60356298,44.60596876,44.60649612,44.60395244,44.58845347,44.58330388,44.57849427,44.56853073,44.5578855]}]],[[{"lng":[11.04255633,11.04260197,11.05797346,11.0590854,11.05614838,11.0653635,11.06266232,11.05513641,11.05072652,11.05120495,11.05056075,11.04753323,11.0448445,11.02691999,11.01347658,11.00950325,10.9908497,10.99022956,10.96078736,10.94254992,10.95101879,10.95388141,10.98610418,10.98820093,11.00035442,11.00689823,11.02732682,11.03706905,11.03855819,11.03912206,11.0397092,11.03899996,11.03195446,11.03075104,11.04255633],"lat":[44.52813412,44.52608014,44.52526843,44.52222805,44.51309842,44.50007646,44.49441769,44.48818016,44.48038841,44.47820852,44.47070068,44.46692836,44.46575895,44.46019539,44.44722643,44.44528886,44.4413754,44.44050566,44.44381066,44.44303676,44.45001333,44.45097742,44.45625756,44.45771938,44.46980607,44.47402146,44.47761716,44.49668673,44.50045921,44.50474787,44.50746964,44.51236167,44.52457767,44.52724583,44.52813412]}]],[[{"lng":[10.80473468,10.8469482,10.85176322,10.8509068,10.86490167,10.86958835,10.8695123,10.86579522,10.86646343,10.87229405,10.87698088,10.88065598,10.88633204,10.88671643,10.8520843,10.8326603,10.82144856,10.80949563,10.79549858,10.79304534,10.79225339,10.79238803,10.79229289,10.79187766,10.79124366,10.77865438,10.7675098,10.76419785,10.76030399,10.75759938,10.75458265,10.75292106,10.75053298,10.74712001,10.73898103,10.76023375,10.75928497,10.78563376,10.79370155,10.78846331,10.78838806,10.80473468],"lat":[44.49337109,44.49016182,44.47942478,44.47779118,44.46407756,44.46284858,44.45891568,44.45229653,44.44055069,44.43312707,44.43159168,44.41852237,44.41617808,44.41568107,44.39285007,44.38912127,44.39263167,44.39253363,44.39007627,44.38950264,44.38823668,44.38485856,44.38379773,44.3833811,44.38314799,44.38148122,44.3810781,44.37655142,44.38224723,44.38371132,44.38442392,44.38511565,44.38660172,44.39963592,44.40873585,44.41518023,44.45707274,44.45975861,44.48410125,44.48706425,44.4897605,44.49337109]}]],[[{"lng":[10.82193961,10.86520773,10.86390654,10.863641,10.86338631,10.86319284,10.86625122,10.86667796,10.85594016,10.85731651,10.86588853,10.86985384,10.86944097,10.86125043,10.86040635,10.83402022,10.8310571,10.82662429,10.8254464,10.81653392,10.79740136,10.8033822,10.78583384,10.72946136,10.72886719,10.72811701,10.72568867,10.72557046,10.7255015,10.72550735,10.72609467,10.72557187,10.70008819,10.70811631,10.70994757,10.72304595,10.73281009,10.73273078,10.7511774,10.75597751,10.77686403,10.79217731,10.82193961],"lat":[44.27231938,44.26898449,44.2675098,44.26703698,44.26650996,44.26395629,44.26004412,44.25531961,44.2409009,44.24046439,44.23867712,44.23695572,44.23499085,44.2321901,44.23241049,44.24278555,44.24456167,44.24856972,44.24942304,44.25000631,44.24486228,44.23401848,44.21811595,44.21635468,44.21615662,44.21447541,44.20633742,44.20571799,44.20507082,44.20227081,44.19966907,44.19847956,44.19354099,44.20028149,44.20215373,44.22387011,44.23193309,44.24288187,44.25846364,44.26569129,44.27612667,44.29716116,44.27231938]}]],[[{"lng":[10.95395871,10.9730318,10.98415899,10.9917457,10.99588572,10.98975297,10.98766669,10.98320624,10.98256911,10.98390162,10.99019971,10.99194819,10.9947512,10.98628014,10.98383083,10.97043193,10.96592661,10.95548864,10.9477925,10.94753806,10.92805502,10.92172875,10.90410272,10.89994172,10.90203469,10.90072281,10.89669879,10.89138083,10.89554251,10.89878168,10.91450638,10.93712829,10.9536634,10.95369224,10.94982736,10.95395871],"lat":[44.77133911,44.7787203,44.77164079,44.77053859,44.76265981,44.75595221,44.75443119,44.75219518,44.75058137,44.74960398,44.74617254,44.74485474,44.73970153,44.73719358,44.73057453,44.7219799,44.71941991,44.71274397,44.70463848,44.7045798,44.70892101,44.71759333,44.71835227,44.72004201,44.72355561,44.72472916,44.72587536,44.72604532,44.72874827,44.75972845,44.78320907,44.78979623,44.77970268,44.7795739,44.77296826,44.77133911]}]],[[{"lng":[10.98183464,11.03248992,11.03382044,11.03074314,11.03012041,11.03088776,11.03075104,11.03105654,11.03195446,11.03352075,11.03560093,11.03835267,11.03899996,11.03941808,11.0397092,11.03912206,11.02138412,11.0142175,11.00641798,11.00315104,11.00187163,10.98681739,10.9846635,10.98295008,10.97360818,10.97401665,10.97447874,10.97619928,10.97764574,10.99024469,10.95662393,10.96200268,10.96249113,10.9660027,10.96740414,10.97267349,10.97366498,10.97293071,10.97128395,10.97143005,10.98183464],"lat":[44.56766686,44.54819518,44.54270699,44.5342364,44.53080403,44.52755849,44.52724583,44.52625912,44.52457767,44.52187605,44.51876011,44.5136426,44.51236167,44.51136393,44.50746964,44.50474787,44.50571148,44.50797174,44.50979256,44.51025504,44.51036751,44.51045043,44.50926355,44.50355871,44.5066554,44.51283759,44.51459859,44.51969126,44.52227693,44.53073788,44.54231384,44.55351093,44.55380861,44.55452242,44.55501142,44.55967379,44.56513914,44.57244832,44.57920159,44.58018565,44.56766686]}]],[[{"lng":[10.99505354,11.00315104,11.02138412,11.03912206,11.02732682,11.00689823,10.98820093,10.97200196,10.94962301,10.9640444,10.98295008,10.9846635,10.99505354],"lat":[44.50889341,44.51025504,44.50571148,44.50474787,44.47761716,44.47402146,44.45771938,44.46659082,44.47712571,44.48425991,44.50355871,44.50926355,44.50889341]}]],[[{"lng":[11.01328668,11.04816659,11.02237352,11.02262512,11.03609238,11.03760421,11.03844845,11.0392261,11.03965164,11.04007432,11.04018709,11.03162219,11.03069161,11.00786631,11.00223055,11.00268673,10.9435854,10.92730116,10.93055105,10.93109384,10.9313217,10.92635228,10.92592371,10.92373335,10.93632012,10.94274466,10.95008599,10.9616117,10.9760037,10.96676077,10.96836734,10.98884541,10.99349162,10.99466773,11.00285636,11.00438191,10.9966656,11.01328668],"lat":[44.43026882,44.41610732,44.3735219,44.35781667,44.34585911,44.34258845,44.33721438,44.33404671,44.33293458,44.33210271,44.33180529,44.32336485,44.31684145,44.29693476,44.30599154,44.32415046,44.31442638,44.32203799,44.32801792,44.33003439,44.33370366,44.34725126,44.34833883,44.35168728,44.35833783,44.3601069,44.35981104,44.35557769,44.35960468,44.37634214,44.37825585,44.39339245,44.39971455,44.40261067,44.40632809,44.40822855,44.42953992,44.43026882]}]],[[{"lng":[11.2337067,11.23090809,11.22359804,11.22628285,11.21606638,11.21610874,11.21771336,11.23627061,11.22979555,11.22212949,11.1958288,11.19348756,11.18037643,11.18212808,11.14531234,11.13160657,11.1275841,11.12922486,11.13265707,11.14088754,11.14363011,11.15000128,11.15084575,11.15245487,11.15227635,11.15619446,11.15753357,11.16572906,11.15233496,11.14949258,11.1834212,11.2337067],"lat":[44.61507735,44.61033101,44.59155737,44.58806724,44.57166839,44.56200965,44.55954333,44.54189265,44.53104868,44.53262055,44.53001406,44.52394975,44.52307731,44.54990327,44.56263511,44.5674275,44.56891306,44.57242205,44.57587344,44.58238118,44.58374309,44.58364578,44.58410701,44.58661985,44.58914983,44.58680417,44.58643847,44.58837071,44.57742165,44.56860668,44.58044858,44.61507735]}]],[[{"lng":[11.29718335,11.30746025,11.32143429,11.33334251,11.34334927,11.34654537,11.34616558,11.34697601,11.35459122,11.35224675,11.3453161,11.34518498,11.34517903,11.34525409,11.35055824,11.35876786,11.35939026,11.35947023,11.35940533,11.34529292,11.35040273,11.3686824,11.36975906,11.37810699,11.38386843,11.38863093,11.37542041,11.36212552,11.36266228,11.34835022,11.33878686,11.33200335,11.31796635,11.31305897,11.31314074,11.31351112,11.31378893,11.31414337,11.31526787,11.31807854,11.31772373,11.31741584,11.31721674,11.31625045,11.31369132,11.29912174,11.30620395,11.30571531,11.30248023,11.30216061,11.30196396,11.3016692,11.29933212,11.2977605,11.29366652,11.29422443,11.2948679,11.29912817,11.29701646,11.28823266,11.29718335],"lat":[44.66806391,44.6736344,44.66995137,44.66862681,44.66909079,44.66845855,44.66797629,44.66498662,44.6609588,44.65622525,44.64897077,44.64872927,44.64842558,44.64817591,44.64233796,44.63954105,44.63840965,44.62994524,44.62966581,44.6247578,44.61417508,44.60947102,44.60114455,44.59414264,44.59244253,44.5878176,44.58040917,44.58426183,44.58937432,44.59601172,44.59674709,44.60362809,44.60372215,44.60659723,44.60699,44.60820513,44.60875426,44.60930973,44.61096756,44.61418062,44.61725988,44.61783666,44.6181389,44.61915653,44.62053358,44.62406261,44.63454983,44.63564111,44.6361706,44.63607857,44.63596832,44.63572784,44.63323852,44.63418559,44.64435111,44.64746651,44.65037202,44.66363163,44.66587577,44.66871688,44.66806391]}]],[[{"lng":[11.59750907,11.61456681,11.63245939,11.59935945,11.59654867,11.56785419,11.51942324,11.49944167,11.52006828,11.53756052,11.54974404,11.5399094,11.54863119,11.57422569,11.57761642,11.57556155,11.59272667,11.59750907],"lat":[44.70702496,44.69012295,44.67294507,44.64277361,44.64626016,44.63476583,44.64088704,44.6490661,44.65875867,44.67771181,44.68975265,44.68887029,44.69751773,44.69244334,44.69526439,44.70363898,44.71169761,44.70702496]}]],[[{"lng":[11.4851662,11.48163566,11.47295221,11.46866985,11.46979721,11.46843518,11.46837233,11.45109799,11.44253413,11.42953198,11.4328682,11.41648124,11.41369265,11.40947927,11.39848679,11.38682406,11.38663544,11.38863093,11.38386843,11.36975906,11.41951377,11.44554666,11.45111804,11.46654101,11.48607396,11.48610584,11.4851662],"lat":[44.68119187,44.67299617,44.67081817,44.65100512,44.64711256,44.64330254,44.64321445,44.62551792,44.6147254,44.60390244,44.60228241,44.59165884,44.58489688,44.58557105,44.58329653,44.58608979,44.58619388,44.5878176,44.59244253,44.60114455,44.67073635,44.66812677,44.67918188,44.68719979,44.68395773,44.68390978,44.68119187]}]],[[{"lng":[11.37059999,11.38861288,11.41488841,11.40746436,11.42537021,11.43370377,11.42606049,11.4154936,11.40522709,11.40024667,11.39140113,11.37919753,11.37511474,11.37475596,11.37410076,11.37460769,11.37315142,11.36226108,11.35874661,11.35823763,11.35523311,11.34623237,11.33735823,11.33330321,11.32480117,11.31340773,11.28226468,11.2810692,11.28377063,11.28373273,11.28654097,11.28947892,11.29028973,11.2966916,11.29673962,11.29678814,11.29662177,11.29460427,11.26169336,11.25694259,11.23570711,11.24123513,11.24119053,11.24114185,11.2409098,11.24039919,11.2389443,11.23844958,11.23821093,11.23700414,11.23207944,11.22964224,11.22979555,11.23627061,11.23973232,11.24505172,11.25117273,11.2690439,11.28161563,11.30903328,11.3111492,11.32052892,11.37059999],"lat":[44.55167469,44.54156185,44.54002153,44.52856635,44.52277846,44.51317043,44.48740257,44.48333021,44.47635848,44.46425587,44.4619405,44.46000676,44.45906099,44.45891204,44.45804004,44.45370601,44.4492502,44.45099358,44.44779214,44.44682643,44.44358901,44.43654922,44.43164007,44.42595277,44.42269156,44.42112042,44.42582416,44.44332548,44.45046905,44.45171271,44.45915733,44.47078321,44.47971604,44.48309897,44.48324092,44.48349595,44.48574487,44.48980906,44.49142626,44.49752046,44.50324301,44.52166575,44.52185624,44.52198154,44.52245198,44.52310343,44.52384486,44.52398791,44.52404041,44.52419685,44.52439059,44.53053572,44.53104868,44.54189265,44.54761674,44.55565047,44.55570097,44.5325079,44.54857878,44.53167001,44.54824572,44.54527818,44.55167469]}]],[[{"lng":[11.65497556,11.66544235,11.63994473,11.63340144,11.63441586,11.6331768,11.6270233,11.62113291,11.61068447,11.60808209,11.60105567,11.57582585,11.57160594,11.57530199,11.55585295,11.58945288,11.60797951,11.62573513,11.65497556],"lat":[44.29600693,44.27871802,44.27374235,44.26362585,44.25830881,44.25552854,44.24777937,44.24543902,44.2439319,44.24314063,44.23864514,44.25751562,44.26388908,44.26905662,44.2777819,44.29334384,44.2858538,44.28603531,44.29600693]}]],[[{"lng":[11.59881324,11.6239115,11.61980723,11.60974165,11.60573079,11.59358518,11.59678958,11.5820933,11.62914376,11.61215479,11.6209383,11.59771879,11.56865552,11.53112889,11.52468235,11.52067424,11.50114218,11.48990028,11.50869766,11.51600876,11.48648292,11.48828116,11.47573204,11.47071391,11.47181761,11.47633224,11.46357468,11.46636195,11.47425829,11.46406537,11.47280726,11.5238368,11.52995866,11.53554561,11.55065186,11.55764931,11.57004248,11.59654867,11.59881324],"lat":[44.62699938,44.61283161,44.60923326,44.60737981,44.60626345,44.60023059,44.59676778,44.58357008,44.5775193,44.55686576,44.55113185,44.53776126,44.51019018,44.4907887,44.48765118,44.48392383,44.4936919,44.4919712,44.50350536,44.51300577,44.52927826,44.53893751,44.5442844,44.54292348,44.54459372,44.55162242,44.56265638,44.56748844,44.57996534,44.5955062,44.60271371,44.58877119,44.59871268,44.60720902,44.60614436,44.61119394,44.63253689,44.64626016,44.62699938]}]],[[{"lng":[11.28612719,11.31765189,11.32128383,11.31839436,11.308252,11.30871901,11.31576472,11.31628435,11.31271777,11.3113258,11.3111492,11.31330588,11.30903328,11.28161563,11.2690439,11.25214738,11.25117273,11.23627061,11.21610874,11.22628285,11.24248628,11.25959983,11.26748704,11.28612719],"lat":[44.59916144,44.59195566,44.56819654,44.56312501,44.56443671,44.56255477,44.5566955,44.55456039,44.55171254,44.54984458,44.54824572,44.54294461,44.53167001,44.54857878,44.5325079,44.55452943,44.55570097,44.54189265,44.56200965,44.58806724,44.57616455,44.58073339,44.6065714,44.59916144]}]],[[{"lng":[11.06360246,11.08118532,11.09031774,11.09526029,11.11674684,11.11935305,11.13106444,11.14130952,11.15904283,11.17890978,11.17227288,11.15473154,11.1493086,11.13785311,11.13224917,11.12704352,11.08942891,11.0294936,11.03041171,11.03986065,11.04203684,11.0402054,11.04433675,11.05697906,11.06276166,11.06569048,11.05740114,11.05698164,11.05317574,11.05656326,11.05846413,11.06074025,11.06360246],"lat":[44.21418031,44.21398779,44.21175649,44.20987769,44.20913593,44.2086245,44.20532583,44.19909151,44.1784818,44.16955273,44.15987212,44.15731902,44.1521691,44.14936139,44.1323953,44.10884813,44.08995184,44.09745585,44.10030308,44.1111961,44.11730463,44.1480462,44.15378488,44.14971132,44.149966,44.15546793,44.17763497,44.18465922,44.19805379,44.20360731,44.21200713,44.21403506,44.21418031]}]],[[{"lng":[11.26169336,11.26821317,11.29460427,11.29673962,11.29217319,11.29028973,11.28947892,11.28373273,11.28377063,11.27898491,11.27135005,11.26792525,11.2613938,11.24809088,11.23311687,11.24165308,11.24191269,11.24010274,11.2468144,11.26169336],"lat":[44.49142626,44.49007593,44.48980906,44.48324092,44.48217531,44.47971604,44.47078321,44.45171271,44.45046905,44.45084095,44.44971362,44.44896135,44.44970984,44.45212984,44.45170914,44.46330314,44.46503556,44.47559733,44.49108484,44.49142626]}]],[[{"lng":[11.58460081,11.60562193,11.60627868,11.60037478,11.5975567,11.59014798,11.58860772,11.58409646,11.61943536,11.62439053,11.62806799,11.64028595,11.58945288,11.55598214,11.54884485,11.53774433,11.53640524,11.53232515,11.52094756,11.52308045,11.52076553,11.51542192,11.51460261,11.51017587,11.50442066,11.49476269,11.50981613,11.52577789,11.5330946,11.52003867,11.54121076,11.43876539,11.4385165,11.43085387,11.46159706,11.47202138,11.47405069,11.48177675,11.48072342,11.49771401,11.50193251,11.50825527,11.5225565,11.52059197,11.52721973,11.55623292,11.53619714,11.53976832,11.57332164,11.58460081],"lat":[44.35835481,44.34437572,44.32878665,44.32740828,44.32815102,44.33109502,44.33067026,44.31939475,44.3107136,44.30780275,44.30166214,44.29619292,44.29334384,44.27835856,44.27906451,44.29011624,44.29549251,44.29343369,44.29104827,44.28599562,44.26548499,44.26263531,44.26385804,44.26905217,44.27455323,44.23794549,44.23692683,44.25393896,44.24965526,44.23677083,44.22146653,44.24316732,44.24333808,44.25052485,44.26817158,44.27625985,44.27861344,44.29262622,44.30883044,44.31185116,44.31176216,44.30844207,44.31092286,44.3209497,44.32903761,44.34334921,44.35274873,44.35630473,44.35653115,44.35835481]}]],[[{"lng":[11.03479012,11.04348721,11.04063209,11.03647136,11.03509355,11.03286437,11.03177376,11.03376352,11.03938888,11.05009535,11.07630577,11.08446187,11.05163435,11.00567136,10.98849392,10.96380669,10.96636386,10.96807883,10.96586637,10.96730092,10.97372082,10.94990678,11.00786631,11.03479012],"lat":[44.32034596,44.31947774,44.31428185,44.31144598,44.31098834,44.31060998,44.30855031,44.29977596,44.29486362,44.29493635,44.28589429,44.2737916,44.2495405,44.24932232,44.27117283,44.25350147,44.25689208,44.25976595,44.26789766,44.27226185,44.2769811,44.29315874,44.29693476,44.32034596]}]],[[{"lng":[11.4385165,11.46012828,11.46702097,11.47596287,11.54121076,11.55436522,11.55412103,11.55315131,11.5491291,11.56167682,11.53563487,11.51613249,11.447627,11.45129722,11.42106489,11.4385165],"lat":[44.24333808,44.2410412,44.24422802,44.24248932,44.22146653,44.21397013,44.21104607,44.20876479,44.20502768,44.18549325,44.19038947,44.15755237,44.19948529,44.22056833,44.23924426,44.24333808]}]],[[{"lng":[11.02641639,11.05121001,11.05395898,11.0532029,11.05317574,11.05327771,11.05740114,11.06569048,11.06276166,11.0402054,11.04203684,11.03041171,11.0294936,11.03148111,11.00160351,11.01430906,11.00225599,10.98491292,10.97913436,10.97424106,10.98050742,10.99774361,11.02641639],"lat":[44.20774745,44.20048109,44.20078561,44.19854284,44.19805379,44.19727376,44.17763497,44.15546793,44.149966,44.1480462,44.11730463,44.10030308,44.09745585,44.09582326,44.11183591,44.13748732,44.14439306,44.14833249,44.15409849,44.16424464,44.1788026,44.18531593,44.20774745]}]],[[{"lng":[11.72290224,11.67652062,11.65432377,11.64345951,11.63865451,11.62348009,11.60499206,11.60557653,11.61737188,11.62180734,11.64913032,11.6657939,11.6767892,11.71554933,11.73230489,11.72290224],"lat":[44.46941179,44.42045313,44.42610858,44.42405774,44.42170504,44.42772701,44.43191689,44.43822673,44.45319421,44.46178302,44.46086988,44.44940035,44.45103523,44.46949975,44.48670029,44.46941179]}]],[[{"lng":[11.34923538,11.34962838,11.35569138,11.3578313,11.34928883,11.34718854,11.34717624,11.34720953,11.34725363,11.34777127,11.3566875,11.35802045,11.3528393,11.34616558,11.34334927,11.32143429,11.30746025,11.29718335,11.2960016,11.27104507,11.26364959,11.25902863,11.24712336,11.26309945,11.26671476,11.27037004,11.27543385,11.2774338,11.31179407,11.31988067,11.33133009,11.33043704,11.34959423,11.34931684,11.34923538],"lat":[44.70145279,44.69786911,44.69487299,44.6930835,44.68343085,44.67798157,44.67775507,44.67760303,44.67748454,44.67698551,44.67305682,44.67127836,44.66636874,44.66797629,44.66909079,44.66995137,44.6736344,44.66806391,44.67464968,44.66879288,44.67974927,44.6826152,44.68434907,44.68690403,44.69090414,44.69857737,44.70557786,44.70902494,44.69930277,44.7081657,44.71220455,44.71042007,44.70213294,44.70169191,44.70145279]}],[{"lng":[11.29422443,11.29933212,11.29663518,11.2899109,11.28351175,11.28292766,11.28279656,11.28276884,11.29464246,11.29701646,11.29422443],"lat":[44.64746651,44.63323852,44.63034962,44.64122111,44.64316947,44.64348835,44.64362151,44.64375879,44.65089081,44.66587577,44.64746651]}]],[[{"lng":[11.33200335,11.36266228,11.36212552,11.37542041,11.38663544,11.40947927,11.40599334,11.40303902,11.38982545,11.38217302,11.38102468,11.37059999,11.35917363,11.3111492,11.30812345,11.308252,11.30867161,11.30909538,11.31346253,11.31839436,11.32128383,11.32309571,11.3229836,11.32277295,11.32257588,11.32109452,11.3159354,11.31305897,11.33200335],"lat":[44.60362809,44.58937432,44.58426183,44.58040917,44.58619388,44.58557105,44.57338839,44.56753996,44.55329985,44.54840382,44.54833462,44.55167469,44.5529427,44.54824572,44.56405221,44.56443671,44.56503646,44.56538293,44.56732342,44.56312501,44.56819654,44.59518715,44.59563391,44.59609845,44.59640966,44.59717686,44.59714887,44.60659723,44.60362809]}]],[[{"lng":[11.55797155,11.56479236,11.58553855,11.58829724,11.5884219,11.59243849,11.60995499,11.61158536,11.62193142,11.62180734,11.61964877,11.61737188,11.60557653,11.60499206,11.62348009,11.63843688,11.63865451,11.63918086,11.63197284,11.60639828,11.53976832,11.55700664,11.55623292,11.55609703,11.54106157,11.52721973,11.5225565,11.50825527,11.49771401,11.48072342,11.48276372,11.48941643,11.45527408,11.45582608,11.47671702,11.49997938,11.52168919,11.53373351,11.54360267,11.54622979,11.55056665,11.55797155],"lat":[44.47831825,44.47330325,44.47142067,44.47086582,44.47082418,44.46884867,44.46417667,44.46614377,44.46199026,44.46178302,44.45885747,44.45319421,44.43822673,44.43191689,44.42772701,44.42175395,44.42170504,44.42174689,44.39390291,44.36258949,44.35630473,44.34444484,44.34334921,44.34318121,44.33531995,44.32903761,44.31092286,44.30844207,44.31185116,44.30883044,44.33118766,44.3441991,44.36382055,44.37916215,44.39078783,44.42564805,44.44168798,44.45502691,44.47220819,44.47477777,44.4781009,44.47831825]}]],[[{"lng":[11.46053583,11.47181761,11.47071391,11.474037,11.47573204,11.48290212,11.48828116,11.48648292,11.51600876,11.49614905,11.48990028,11.49152129,11.49304026,11.49245122,11.479169,11.44266775,11.42606049,11.41726499,11.43370377,11.42445666,11.42537021,11.43110096,11.4393399,11.4442845,11.4426956,11.46053583],"lat":[44.54367112,44.54459372,44.54292348,44.5418258,44.5442844,44.54246038,44.53893751,44.52927826,44.51300577,44.50012039,44.4919712,44.49138443,44.49106036,44.4873462,44.47767248,44.49073212,44.48740257,44.49063089,44.51317043,44.52164949,44.52277846,44.52088194,44.52992525,44.53757959,44.54501136,44.54367112]}]],[[{"lng":[11.18439806,11.183205,11.18226153,11.18235387,11.20514372,11.19653054,11.19384321,11.26368792,11.12764259,11.13785311,11.17890978,11.15904283,11.14242,11.14147608,11.14130952,11.14132179,11.16108543,11.15893495,11.16317393,11.18439806],"lat":[44.23582927,44.23122911,44.22535306,44.22492929,44.17902159,44.16293893,44.14560979,44.10427195,44.10968456,44.14936139,44.16955273,44.1784818,44.19557022,44.19839965,44.19909151,44.19953861,44.20766729,44.21988835,44.22895901,44.23582927]}]],[[{"lng":[11.26356623,11.29334728,11.29033679,11.27348012,11.24608308,11.241301,11.20668233,11.20617203,11.20680708,11.20857097,11.20963996,11.19136952,11.14830789,11.10536168,11.11699352,11.13196854,11.15208928,11.17596952,11.17819336,11.20784504,11.22434992,11.26356623],"lat":[44.80421583,44.80280764,44.8002655,44.78439417,44.75838253,44.74130364,44.73853704,44.7372202,44.73399414,44.72536348,44.71994482,44.69327117,44.70087402,44.69051642,44.71043589,44.78443778,44.78630437,44.79187146,44.79618608,44.80430345,44.80155694,44.80421583]}]],[[{"lng":[11.66321126,11.67652062,11.65210124,11.65410685,11.66013566,11.66194167,11.64546184,11.61341396,11.60958107,11.59076444,11.60639828,11.62276408,11.63197284,11.63918086,11.65432377,11.66321126],"lat":[44.42407291,44.42045313,44.3936733,44.38704185,44.37766593,44.36179721,44.35606868,44.34832306,44.3442774,44.3572366,44.36258949,44.37868213,44.39390291,44.42174689,44.42610858,44.42407291]}]],[[{"lng":[11.53603113,11.53640524,11.53826709,11.53774433,11.54884485,11.57530199,11.57582585,11.59663328,11.60070747,11.6013149,11.60105567,11.6012854,11.60109797,11.60087659,11.59934959,11.59869439,11.59456339,11.59025989,11.57881047,11.56821249,11.55555846,11.55544123,11.55187156,11.55136205,11.55093132,11.52003867,11.52577789,11.50981613,11.49554879,11.49482729,11.49476269,11.49471106,11.49627455,11.49930058,11.50361614,11.50442066,11.5046201,11.51017587,11.51517308,11.51542192,11.5162653,11.51885783,11.52076553,11.52080534,11.52308045,11.52094756,11.53603113],"lat":[44.29550082,44.29549251,44.29448446,44.29011624,44.27906451,44.26905662,44.25751562,44.24819392,44.24298646,44.23968546,44.23864514,44.23850171,44.23822689,44.23803388,44.23709184,44.23675115,44.23521561,44.23666377,44.232201,44.21949836,44.22320341,44.22317001,44.2198378,44.219273,44.21678333,44.23677083,44.25393896,44.23692683,44.23686036,44.23782592,44.23794549,44.23818689,44.26246536,44.26833312,44.27358901,44.27455323,44.27473117,44.26905217,44.26284055,44.26263531,44.26228925,44.26234255,44.26548499,44.26559214,44.28599562,44.29104827,44.29550082]}]],[[{"lng":[10.98849392,11.00567136,11.03553519,11.03733074,11.05163435,11.04504265,11.04323661,11.03100138,10.99774361,10.99438395,10.98050742,10.95551286,10.94944327,10.94130536,10.93461161,10.90724322,10.9402918,10.94265761,10.94325914,10.94607086,10.94843739,10.95715948,10.98849392],"lat":[44.27117283,44.24932232,44.25290874,44.25274,44.2495405,44.22911245,44.22911552,44.22376774,44.18531593,44.18472644,44.1788026,44.18528053,44.18274475,44.17549473,44.17498036,44.20543403,44.22561067,44.22621415,44.22582693,44.22495358,44.22481926,44.22610608,44.27117283]}]],[[{"lng":[11.4076275,11.4128987,11.43392016,11.43785503,11.4444406,11.44666877,11.44842216,11.4521916,11.45278097,11.45336535,11.51831257,11.41887366,11.40719613,11.35003698,11.35279011,11.37699763,11.3883459,11.39170203,11.3953084,11.39924104,11.4076275],"lat":[44.76628121,44.76530118,44.75987666,44.75977917,44.76059255,44.76073385,44.76077728,44.76065133,44.76050814,44.76028404,44.72252937,44.72796691,44.74086255,44.75134735,44.75323117,44.77407653,44.77865465,44.77675244,44.77181565,44.76857413,44.76628121]}]],[[{"lng":[11.43882182,11.45927429,11.47425829,11.46357468,11.47633224,11.4426956,11.4442845,11.43110096,11.42537021,11.4144035,11.40746436,11.41488841,11.40600976,11.38861288,11.38102468,11.40303902,11.40947927,11.41648124,11.43882182],"lat":[44.59768624,44.5851634,44.57996534,44.56265638,44.55162242,44.54501136,44.53757959,44.52088194,44.52277846,44.5257252,44.52856635,44.54002153,44.54279272,44.54156185,44.54833462,44.56753996,44.58557105,44.59165884,44.59768624]}]],[[{"lng":[11.17755408,11.19566751,11.19477135,11.18439806,11.16317393,11.15893495,11.15983416,11.16253235,11.16108543,11.14130952,11.11935305,11.11674684,11.09526029,11.09255749,11.09031774,11.08118532,11.06074025,11.05656326,11.05121001,11.02512113,11.04323661,11.04890439,11.06228682,11.06818064,11.09694987,11.09816203,11.09861982,11.1003811,11.103175,11.10586373,11.10871158,11.11366455,11.1184581,11.13384656,11.15501867,11.15831775,11.16019831,11.16406776,11.17769041,11.17755408],"lat":[44.31095867,44.28171952,44.24705106,44.23582927,44.22895901,44.21988835,44.21730495,44.21415632,44.20766729,44.19909151,44.2086245,44.20913593,44.20987769,44.21051864,44.21175649,44.21398779,44.21403506,44.20360731,44.20048109,44.20841414,44.22911552,44.22809398,44.22781029,44.23084178,44.23606993,44.23879578,44.25047931,44.25247708,44.25350543,44.25480912,44.25782203,44.28857589,44.29481377,44.3004263,44.30392856,44.30791356,44.31284416,44.31189929,44.31356349,44.31095867]}]],[[{"lng":[11.78967724,11.77868843,11.77379612,11.76311264,11.74977277,11.79670582,11.78038132,11.78828281,11.79891166,11.75521552,11.80994406,11.80785534,11.80447297,11.80366933,11.8026701,11.7999721,11.79892461,11.79953351,11.78880562,11.78596702,11.75876228,11.74286925,11.74049756,11.73649858,11.73297199,11.71388159,11.71104292,11.70901494,11.70265859,11.69110619,11.69156114,11.69777196,11.68394277,11.66759797,11.66763231,11.67144658,11.67153902,11.66557266,11.66397546,11.65050054,11.64028595,11.63586196,11.58420679,11.58409646,11.58400241,11.58414837,11.58860772,11.59014798,11.59431357,11.5975567,11.60011892,11.60037478,11.60420272,11.60612015,11.60627868,11.60244005,11.59702447,11.60145361,11.60562193,11.60958107,11.60967549,11.61341396,11.62898695,11.66194167,11.66013566,11.65210124,11.66411368,11.66704064,11.67652062,11.67771538,11.70378877,11.76162459,11.76452815,11.77518895,11.77357722,11.773469,11.77418327,11.78967724],"lat":[44.56575964,44.50351639,44.5056708,44.51035917,44.49756929,44.48569339,44.46724107,44.46351931,44.46076546,44.40248116,44.38322396,44.37753328,44.37911988,44.37940971,44.3796458,44.37943294,44.37845935,44.37211108,44.36048578,44.34805946,44.33228142,44.31648215,44.31213681,44.30917276,44.30607388,44.29833242,44.29501035,44.29036808,44.28793949,44.28951783,44.29837478,44.30896388,44.31411534,44.31185619,44.31136925,44.28901634,44.28822193,44.28281477,44.28763909,44.30157446,44.29619292,44.29673685,44.31928366,44.31939475,44.31950868,44.32428823,44.33067026,44.33109502,44.32985033,44.32815102,44.32743662,44.32740828,44.32724055,44.32839302,44.32878665,44.33387015,44.33534053,44.34322055,44.34437572,44.3442774,44.34430225,44.34832306,44.35349813,44.36179721,44.37766593,44.3936733,44.41518207,44.4190394,44.42045313,44.42117176,44.44055849,44.51474392,44.53186601,44.56276005,44.56370454,44.56392773,44.56631963,44.56575964]}]],[[{"lng":[10.88167437,10.88553024,10.88908331,10.88970292,10.89009384,10.8932221,10.89332376,10.8937634,10.89424795,10.89884495,10.90724322,10.9093985,10.93647525,10.93461161,10.90901606,10.90370276,10.89346617,10.88110604,10.87902021,10.87865562,10.87858513,10.87858325,10.88191717,10.87870727,10.84866482,10.81503692,10.81476202,10.81408104,10.81101011,10.8056016,10.80691303,10.80885936,10.81854365,10.82301123,10.83255541,10.8552,10.85028285,10.86125043,10.88167437],"lat":[44.22514776,44.22513818,44.22466533,44.22446601,44.22416245,44.21590894,44.21244111,44.21131745,44.21081426,44.20663256,44.20543403,44.20428912,44.17810096,44.17498036,44.16975328,44.16458984,44.12462552,44.11228171,44.10758323,44.10640362,44.10580552,44.10569694,44.10250335,44.09861952,44.09805853,44.11562143,44.11618494,44.12038392,44.1286795,44.14110838,44.14785231,44.1548495,44.16738551,44.18232682,44.19478728,44.20738595,44.22782142,44.2321901,44.22514776]}]],[[{"lng":[11.30492749,11.33062127,11.36487215,11.36876045,11.36722492,11.36456286,11.36457725,11.37397055,11.36584525,11.33222802,11.31223639,11.30440656,11.29762374,11.29390694,11.28953647,11.28989478,11.28699458,11.27978533,11.27856981,11.28289762,11.29566768,11.30492749],"lat":[44.33041538,44.31183649,44.3136124,44.30801703,44.30609584,44.29861682,44.29396097,44.26054796,44.24876818,44.23547281,44.23978499,44.24866762,44.25265191,44.25434827,44.25578924,44.28751023,44.29456297,44.2975723,44.31092517,44.31508182,44.31499682,44.33041538]}]],[[{"lng":[11.55279664,11.58303046,11.57556155,11.57301946,11.57761642,11.54863119,11.54974404,11.52006828,11.50327557,11.49944167,11.49630687,11.47033979,11.45109799,11.46843518,11.46979721,11.46866985,11.47295221,11.47639502,11.48139283,11.48163566,11.48610584,11.46654101,11.46474279,11.48317466,11.48326618,11.49900493,11.51831257,11.51613267,11.55279664],"lat":[44.7214375,44.70718923,44.70363898,44.69904329,44.69526439,44.69751773,44.68975265,44.65875867,44.65222007,44.6490661,44.64127456,44.6220243,44.62551792,44.64330254,44.64711256,44.65100512,44.67081817,44.67426791,44.6729598,44.67299617,44.68390978,44.68719979,44.69576826,44.72320024,44.72323651,44.72243809,44.72252937,44.733568,44.7214375]}]],[[{"lng":[11.18000893,11.18312378,11.19902927,11.2077209,11.24396033,11.26646705,11.28213012,11.2816631,11.2704638,11.23857925,11.23218409,11.2215358,11.226028,11.23167748,11.24065062,11.24437493,11.24294072,11.23806172,11.212762,11.20984151,11.20146833,11.20095692,11.19566751,11.19459642,11.17753566,11.17648989,11.17769041,11.16086489,11.15864035,11.1539748,11.12364871,11.12815558,11.16668454,11.16566903,11.16242986,11.1561663,11.15389534,11.15373722,11.15375364,11.16074433,11.16274788,11.16302145,11.16373409,11.16415378,11.16428654,11.16442738,11.16440589,11.16435804,11.16387436,11.16363826,11.16525348,11.18000893],"lat":[44.38627031,44.38299402,44.37788526,44.37209927,44.38468632,44.3478427,44.33513955,44.33233665,44.32304965,44.33094844,44.33102864,44.31328651,44.30771802,44.30516966,44.30427932,44.30239155,44.29931715,44.29627992,44.29185752,44.28976861,44.28226671,44.28186976,44.28171952,44.28219251,44.29497343,44.30012778,44.31356349,44.31289963,44.31540735,44.32570066,44.33392166,44.34609669,44.34821181,44.35374356,44.35492692,44.35858289,44.36210024,44.36339286,44.36375548,44.36803809,44.36825618,44.36837871,44.36894363,44.36975381,44.37048275,44.37547547,44.37563735,44.37570128,44.37607337,44.37615886,44.37881667,44.38627031]}]],[[{"lng":[11.74905062,11.77518895,11.7735256,11.76887223,11.76452815,11.76515611,11.76526842,11.76162459,11.6767892,11.64913032,11.62180734,11.61158536,11.58829724,11.56479236,11.56639717,11.53112889,11.59771879,11.61060928,11.61417623,11.61701109,11.62258693,11.62660411,11.62772029,11.62868725,11.62902068,11.63011689,11.68065568,11.69660524,11.69834841,11.74905062],"lat":[44.57679833,44.56276005,44.55798422,44.54547755,44.53186601,44.52675543,44.5229475,44.51474392,44.45103523,44.46086988,44.46178302,44.46614377,44.47086582,44.47330325,44.47549677,44.4907887,44.53776126,44.53952196,44.54159639,44.54398965,44.54674075,44.5476285,44.54755161,44.54732397,44.54728536,44.54737657,44.56036206,44.57310954,44.57988819,44.57679833]}]],[[{"lng":[11.51942324,11.52517688,11.56785419,11.57550136,11.57004248,11.56570924,11.55764931,11.53554561,11.5238368,11.47280726,11.4642053,11.46411512,11.46406537,11.46391624,11.45927429,11.44162554,11.43922321,11.43882182,11.4328682,11.42953198,11.45109799,11.47033979,11.49944167,11.51942324],"lat":[44.64088704,44.64248326,44.63476583,44.63620267,44.63253689,44.62779452,44.61119394,44.60720902,44.58877119,44.60271371,44.59564948,44.59556534,44.5955062,44.59531307,44.5851634,44.59524968,44.59689052,44.59768624,44.60228241,44.60390244,44.62551792,44.6220243,44.6490661,44.64088704]}]],[[{"lng":[11.64065881,11.67399974,11.69077754,11.6953466,11.72387495,11.7280364,11.77185786,11.77660905,11.79678251,11.80128894,11.80425578,11.80639882,11.78527487,11.78562361,11.69834841,11.68065568,11.61060928,11.6209383,11.61215479,11.62914376,11.5820933,11.59358518,11.61980723,11.6239115,11.59881324,11.60716937,11.59935945,11.60584588,11.63245939,11.64065881],"lat":[44.6648449,44.63226128,44.62871613,44.63516368,44.63671103,44.65421897,44.64079894,44.64396758,44.63215403,44.62901479,44.62652087,44.62356382,44.60571071,44.5850455,44.57988819,44.56036206,44.53952196,44.55113185,44.55686576,44.5775193,44.58357008,44.60023059,44.60923326,44.61283161,44.62699938,44.63164024,44.64277361,44.6581749,44.67294507,44.6648449]}]],[[{"lng":[11.29297719,11.30440656,11.30935977,11.31223639,11.33222802,11.33774075,11.35820677,11.36584525,11.38923547,11.38738848,11.34280936,11.29595749,11.29433018,11.30117758,11.30209664,11.29011821,11.27958766,11.27597824,11.27753648,11.2809288,11.28089394,11.27164297,11.29297719],"lat":[44.2545577,44.24866762,44.24451794,44.23978499,44.23547281,44.24345081,44.24796966,44.24876818,44.21245783,44.20522359,44.20581921,44.17155149,44.17468679,44.18074291,44.18255816,44.18465702,44.19076299,44.20430054,44.2082994,44.21244222,44.21352495,44.23307458,44.2545577]}]],[[{"lng":[11.45702512,11.45527408,11.48542836,11.48941643,11.48884756,11.48712515,11.48434008,11.48276372,11.4837265,11.48361907,11.48072342,11.48177675,11.47202138,11.46159706,11.43735075,11.43227732,11.43085387,11.42989964,11.42809101,11.38923547,11.36352204,11.36387796,11.36584525,11.36789386,11.37397055,11.36722492,11.38404777,11.40029472,11.40144072,11.41093465,11.41012735,11.41050244,11.42009976,11.42134143,11.42366927,11.42831744,11.4360225,11.44711549,11.45582608,11.45702512],"lat":[44.37637479,44.36382055,44.3481622,44.3441991,44.33872604,44.33650277,44.33408093,44.33118766,44.32320888,44.31695095,44.30883044,44.29262622,44.27625985,44.26817158,44.25250083,44.25083661,44.25052485,44.25039298,44.24975929,44.21245783,44.24414213,44.24753503,44.24876818,44.25112779,44.26054796,44.30609584,44.31032311,44.32988208,44.34911591,44.35795507,44.3617718,44.36330559,44.36302545,44.36112432,44.35960353,44.35874292,44.35937662,44.36685465,44.37916215,44.37637479]}]],[[{"lng":[11.17288608,11.16793269,11.17146938,11.17060165,11.20033127,11.19318442,11.19211635,11.1900796,11.18456113,11.18040139,11.17431959,11.1738769,11.17266055,11.17055837,11.16485069,11.16176399,11.16125633,11.15913775,11.16136582,11.16177043,11.16387436,11.16440589,11.16415378,11.16302145,11.16274788,11.16168703,11.16111894,11.16074433,11.15373722,11.1561663,11.16242986,11.16477424,11.16566903,11.16668454,11.14943891,11.13751669,11.13544527,11.13418212,11.10617421,11.1056516,11.10485315,11.10012696,11.09910364,11.10511869,11.10785602,11.10834757,11.10648238,11.08850441,11.0890505,11.10322332,11.11406112,11.12600733,11.12557935,11.11489375,11.11453328,11.11824579,11.13600606,11.13610606,11.13135495,11.13198366,11.17288608],"lat":[44.50687776,44.49757047,44.48515854,44.4778706,44.4593312,44.44672162,44.43899991,44.43655315,44.43646757,44.43518207,44.42608894,44.42501256,44.4175292,44.40858342,44.39859644,44.39692507,44.3954444,44.38322791,44.37691313,44.37660949,44.37607337,44.37563735,44.36975381,44.36837871,44.36825618,44.36816203,44.36813565,44.36803809,44.36339286,44.35858289,44.35492692,44.35465911,44.35374356,44.34821181,44.35195995,44.36249697,44.36184871,44.35972181,44.35842616,44.35929331,44.36708639,44.37449601,44.37804163,44.3850025,44.38691853,44.39252206,44.39499621,44.40395218,44.40498313,44.41494431,44.42689151,44.4281146,44.44617114,44.45677772,44.45780337,44.46678777,44.46678208,44.47135296,44.47650345,44.48243621,44.50687776]}]],[[{"lng":[11.29942018,11.3131548,11.31924888,11.31951354,11.3132761,11.30439581,11.29566768,11.28289762,11.27862201,11.27856981,11.27853272,11.27851707,11.27905094,11.27978533,11.28989478,11.28953647,11.27164297,11.19477135,11.19566751,11.212762,11.23806172,11.24294072,11.24428592,11.24437493,11.24082031,11.24065062,11.23959944,11.23803124,11.23167748,11.226028,11.2215358,11.23051096,11.23218409,11.2325088,11.23857925,11.2704638,11.294001,11.29819784,11.29942018],"lat":[44.34658393,44.34664688,44.34312809,44.34192649,44.33522166,44.33187105,44.31499682,44.31508182,44.31107887,44.31092517,44.31071603,44.31045302,44.30185652,44.2975723,44.28751023,44.25578924,44.23307458,44.24705106,44.28171952,44.29185752,44.29627992,44.29931715,44.30194709,44.30239155,44.30422929,44.30427932,44.30389707,44.3039087,44.30516966,44.30771802,44.31328651,44.32994668,44.33102864,44.33107462,44.33094844,44.32304965,44.33771667,44.34849179,44.34658393]}]],[[{"lng":[11.80796774,11.84042771,11.83685737,11.83621144,11.82629599,11.8250128,11.81444662,11.80994406,11.75521552,11.78133445,11.79733209,11.799092,11.80147459,11.80796774],"lat":[44.42519911,44.42357008,44.4140453,44.41260836,44.40219531,44.40103875,44.39350347,44.38322396,44.40248116,44.43626721,44.43114114,44.43048558,44.42773084,44.42519911]}]],[[{"lng":[11.50114218,11.50927681,11.55134945,11.55056665,11.54360267,11.52168919,11.49997938,11.49054908,11.47671702,11.45582608,11.45039557,11.44711549,11.44445496,11.4360225,11.42926324,11.42831744,11.42765438,11.42366927,11.42009976,11.40259382,11.42519702,11.45350298,11.4600462,11.46155496,11.46930231,11.47849594,11.48625431,11.46981329,11.479169,11.49152129,11.50114218],"lat":[44.4936919,44.48525244,44.47996818,44.4781009,44.47220819,44.44168798,44.42564805,44.40519492,44.39078783,44.37916215,44.37446524,44.36685465,44.36438753,44.35937662,44.35868509,44.35874292,44.35884873,44.35960353,44.36302545,44.3648925,44.40676299,44.42818015,44.44434525,44.45940832,44.46109327,44.46491701,44.47064269,44.47800808,44.47767248,44.49138443,44.4936919]}]],[[{"lng":[11.35823763,11.37261493,11.37829019,11.38334662,11.39880409,11.40985414,11.40491291,11.40416041,11.41016394,11.41110205,11.41873302,11.42587156,11.40529074,11.40225843,11.40259382,11.41012735,11.41107198,11.41093465,11.40906926,11.40677319,11.40144072,11.40029472,11.36876045,11.33062127,11.31081336,11.30492749,11.30410543,11.30439581,11.30825706,11.3132761,11.31924888,11.29942018,11.30356205,11.27622128,11.294269,11.32015075,11.31307582,11.31455746,11.31659002,11.33151262,11.33241053,11.32480117,11.35823763],"lat":[44.44682643,44.43866139,44.43795474,44.44178848,44.43421876,44.41973096,44.41567597,44.41399875,44.40639042,44.40593567,44.41050737,44.40899086,44.37639343,44.36536038,44.3648925,44.3617718,44.35837698,44.35795507,44.35651014,44.35670598,44.34911591,44.32988208,44.30801703,44.31183649,44.32427863,44.33041538,44.33108186,44.33187105,44.33413995,44.33522166,44.34312809,44.34658393,44.35943395,44.37638019,44.39497458,44.39953125,44.40714083,44.41111247,44.41254992,44.41625903,44.41674822,44.42269156,44.44682643]}]],[[{"lng":[11.35279011,11.34577211,11.33202516,11.3299969,11.32553121,11.31988067,11.31303291,11.31179407,11.2774338,11.28909205,11.30178791,11.30548517,11.30769762,11.32083199,11.32476307,11.32697727,11.33358535,11.34074513,11.34471549,11.34483568,11.34639968,11.34692871,11.34800486,11.35971259,11.37397834,11.37468349,11.37807031,11.3819606,11.3883459,11.35279011],"lat":[44.75323117,44.7529767,44.73984514,44.72015147,44.71133259,44.7081657,44.70002373,44.69930277,44.70902494,44.71394612,44.72623541,44.73307899,44.73528034,44.74501097,44.747123,44.74807714,44.7507374,44.75492084,44.75847623,44.75864168,44.76083168,44.76153199,44.76279267,44.774173,44.78007967,44.78016852,44.78038607,44.78035897,44.77865465,44.75323117]}]],[[{"lng":[11.25902863,11.26364959,11.27104507,11.29654744,11.29464246,11.29104651,11.28279656,11.2899109,11.29663518,11.29772967,11.30196396,11.30571531,11.29912174,11.31741584,11.31807854,11.31768897,11.31661509,11.31526787,11.31378893,11.31314074,11.31305897,11.31293081,11.31288041,11.3159354,11.32277295,11.32019039,11.31679166,11.30200959,11.29399818,11.28612719,11.26748704,11.25959983,11.24491637,11.24248628,11.23574348,11.22628285,11.22591204,11.22359804,11.23090809,11.23902271,11.24976223,11.25375977,11.25106738,11.24751706,11.24258436,11.24250574,11.25902863],"lat":[44.6826152,44.67974927,44.66879288,44.6657378,44.65089081,44.64652489,44.64362151,44.64122111,44.63034962,44.6306905,44.63596832,44.63564111,44.62406261,44.61783666,44.61418062,44.6134374,44.61244135,44.61096756,44.60875426,44.60699,44.60659723,44.60588808,44.60493654,44.59714887,44.59609845,44.59145847,44.5933325,44.59662934,44.6004186,44.59916144,44.6065714,44.58073339,44.57877842,44.57616455,44.5757781,44.58806724,44.58854203,44.59155737,44.61033101,44.62406278,44.64119744,44.64786076,44.65097636,44.6565186,44.66656429,44.67731964,44.6826152]}]],[[{"lng":[11.20881827,11.27164297,11.28089394,11.2809288,11.27597824,11.27958766,11.30209664,11.29433018,11.29470706,11.29809995,11.19573059,11.19653054,11.20307206,11.20514372,11.20458087,11.19441105,11.1948974,11.19214208,11.18226153,11.18439806,11.18737482,11.18671539,11.18826026,11.19477135,11.20065545,11.20881827],"lat":[44.25212618,44.23307458,44.21352495,44.21244222,44.20430054,44.19076299,44.18255816,44.17468679,44.17229389,44.16792449,44.15141455,44.16293893,44.17166339,44.17902159,44.18093322,44.20472919,44.20630267,44.21158741,44.22535306,44.23582927,44.24209006,44.24640943,44.24716027,44.24705106,44.24729959,44.25212618]}]],[[{"lng":[11.37477137,11.38225495,11.39176962,11.39181522,11.39892661,11.40850042,11.41951377,11.38982549,11.38272597,11.37034745,11.3686824,11.34529292,11.34859527,11.35947023,11.35876786,11.34517903,11.3453161,11.35207676,11.35224675,11.35459122,11.34616558,11.35802045,11.3566875,11.34720953,11.34928883,11.3578313,11.35569138,11.35103127,11.34962838,11.34931684,11.36380327,11.37477137],"lat":[44.68896092,44.68779223,44.69165383,44.68126877,44.67438357,44.67301874,44.67073635,44.64536599,44.62939239,44.61703783,44.60947102,44.6247578,44.6304514,44.62994524,44.63954105,44.64842558,44.64897077,44.65603688,44.65622525,44.6609588,44.66797629,44.67127836,44.67305682,44.67760303,44.68343085,44.6930835,44.69487299,44.69696196,44.69786911,44.70169191,44.70047685,44.68896092]}]],[[{"lng":[11.26747448,11.25315405,11.27543385,11.26671476,11.26309945,11.25041704,11.2471108,11.24712336,11.24729806,11.24773628,11.25059908,11.24264432,11.24250574,11.24249943,11.24258436,11.25375977,11.23902271,11.2337067,11.1834212,11.14949258,11.15233496,11.1614163,11.16572906,11.15909396,11.15619446,11.14279053,11.12420691,11.11829163,11.12359625,11.12779278,11.13984757,11.14755898,11.15343485,11.15748284,11.16331283,11.16369986,11.16911279,11.18897875,11.19136952,11.19638296,11.20963996,11.20857097,11.20617203,11.20637131,11.20668233,11.21667232,11.241301,11.24608308,11.27310365,11.26747448],"lat":[44.74119519,44.71632208,44.70557786,44.69090414,44.68690403,44.68861033,44.6846357,44.68434907,44.68393096,44.68361851,44.68317049,44.67766181,44.67731964,44.67697205,44.66656429,44.64786076,44.62406278,44.61507735,44.58044858,44.56860668,44.57742165,44.5788885,44.58837071,44.58964533,44.58680417,44.60567658,44.61165963,44.61784003,44.62621721,44.63135593,44.62972791,44.63874073,44.66482737,44.66494393,44.67485258,44.67540002,44.68107225,44.69157678,44.69327117,44.69716957,44.71994482,44.72536348,44.7372202,44.7378105,44.73853704,44.74855507,44.74130364,44.75838253,44.75044069,44.74119519]}]],[[{"lng":[11.44538054,11.4432659,11.4479381,11.44895752,11.45095785,11.45524745,11.48625431,11.46155496,11.45350298,11.4343927,11.42519702,11.42583879,11.42587156,11.42580934,11.42180891,11.41873302,11.41368009,11.41016394,11.40985414,11.39880409,11.37261493,11.35823763,11.36226108,11.37315142,11.37410076,11.37511474,11.39140113,11.40024667,11.4154936,11.44538054],"lat":[44.48658126,44.48503028,44.48338682,44.48335088,44.48376595,44.48355785,44.47064269,44.45940832,44.42818015,44.40679175,44.40676299,44.40850205,44.40899086,44.4097259,44.41068803,44.41050737,44.40884531,44.40639042,44.41973096,44.43421876,44.43866139,44.44682643,44.45099358,44.4492502,44.45804004,44.45906099,44.4619405,44.46425587,44.48333021,44.48658126]}]],[[{"lng":[11.3552585,11.36140252,11.36643101,11.36740295,11.3679987,11.36848102,11.37051592,11.37283261,11.39080803,11.40719613,11.41887366,11.48326618,11.47116124,11.46898474,11.46654101,11.46190853,11.45111804,11.44944335,11.4480263,11.44554666,11.42202732,11.41951377,11.40515166,11.39892661,11.39181522,11.39196784,11.39176962,11.39158452,11.39018862,11.38393306,11.38225495,11.37920616,11.37070041,11.36380327,11.33133009,11.32553121,11.33202516,11.3552585],"lat":[44.74752126,44.74571822,44.74336354,44.74272784,44.74206396,44.7416376,44.74051116,44.73967533,44.73524473,44.74086255,44.72796691,44.72323651,44.69363324,44.69049186,44.68719979,44.6809549,44.67918188,44.67520395,44.67211451,44.66812677,44.67173686,44.67073635,44.67296525,44.67438357,44.68126877,44.69156414,44.69165383,44.69171792,44.69210612,44.69024575,44.68779223,44.68768534,44.68980231,44.70047685,44.71220455,44.71133259,44.73984514,44.74752126]}]],[[{"lng":[11.1580119,11.18330044,11.16956586,11.16911279,11.16787638,11.15343485,11.13984757,11.07809108,11.10536168,11.1580119],"lat":[44.6981546,44.68899555,44.68137873,44.68107225,44.68012463,44.66482737,44.62972791,44.64702985,44.69051642,44.6981546]}]],[[{"lng":[11.22287714,11.23419345,11.23239017,11.23288909,11.23311687,11.23339134,11.26792525,11.28377063,11.2810692,11.28226468,11.29363802,11.31340773,11.32480117,11.33288712,11.33321297,11.33241053,11.33160574,11.33151262,11.33143016,11.3306433,11.31676544,11.31659002,11.31649598,11.31485328,11.31455746,11.31302781,11.31302867,11.31307582,11.31379753,11.31443095,11.31754225,11.31989759,11.32037597,11.32015075,11.3201004,11.27622128,11.30356205,11.29803517,11.294001,11.28402825,11.28230864,11.28213012,11.27906092,11.27486575,11.26646705,11.25023127,11.24396033,11.2191761,11.2077209,11.20555434,11.19902927,11.18312378,11.18051551,11.18000893,11.17954064,11.16525348,11.16363826,11.16177043,11.16164839,11.16136582,11.16052652,11.15913775,11.16011731,11.16125633,11.16169543,11.16176399,11.16228671,11.16412448,11.16485069,11.16986888,11.17055837,11.17266055,11.17283201,11.1738769,11.17397399,11.17431959,11.17867554,11.18013868,11.20033127,11.22287714],"lat":[44.46132005,44.45940103,44.45349912,44.45212154,44.45170914,44.4515316,44.44896135,44.45046905,44.44332548,44.42582416,44.43052346,44.42112042,44.42269156,44.41905834,44.41756006,44.41674822,44.41629146,44.41625903,44.41623878,44.41621264,44.41259926,44.41254992,44.41251412,44.41142774,44.41111247,44.40914827,44.40723912,44.40714083,44.40637448,44.40577704,44.40525927,44.40190127,44.40062219,44.39953125,44.3994884,44.37638019,44.35943395,44.34988655,44.33771667,44.33486133,44.33507352,44.33513955,44.3355846,44.3377282,44.3478427,44.37894016,44.38468632,44.37192895,44.37209927,44.37247818,44.37788526,44.38299402,44.38452987,44.38627031,44.38635858,44.37881667,44.37615886,44.37660949,44.37666075,44.37691313,44.37823891,44.38322791,44.39127746,44.3954444,44.3968619,44.39692507,44.39719054,44.3978658,44.39859644,44.40704695,44.40858342,44.4175292,44.41999548,44.42501256,44.42542878,44.42608894,44.43288616,44.43487538,44.4593312,44.46132005]}]],[[{"lng":[11.05140177,11.07469299,11.08130637,11.09353325,11.09806075,11.10373069,11.11729683,11.12203727,11.1239256,11.16086489,11.16019831,11.15931465,11.15501867,11.1184581,11.10871158,11.10586373,11.1003811,11.09918009,11.09861982,11.09760935,11.09816203,11.09694987,11.09425609,11.06228682,11.04504265,11.04423609,11.05163435,11.05077588,11.06816708,11.08446187,11.08469577,11.07630577,11.03938888,11.03376352,11.03240512,11.03177376,11.03276082,11.03286437,11.03335971,11.03647136,11.04063209,11.04348721,11.03162219,11.03760421,11.05140177],"lat":[44.34171671,44.33423431,44.32676713,44.3203902,44.31706215,44.31157303,44.31474388,44.32239264,44.33366558,44.31289963,44.31284416,44.3123404,44.30392856,44.29481377,44.25782203,44.25480912,44.25247708,44.25150603,44.25047931,44.24383519,44.23879578,44.23606993,44.23477062,44.22781029,44.22911245,44.23628364,44.2495405,44.25603406,44.26955329,44.2737916,44.27500216,44.28589429,44.29486362,44.29977596,44.30141559,44.30855031,44.31044807,44.31060998,44.31086224,44.31144598,44.31428185,44.31947774,44.32336485,44.34258845,44.34171671]}]],[[{"lng":[11.22478848,11.23207944,11.23290939,11.23844958,11.24119053,11.23750188,11.23570711,11.25109671,11.25678432,11.2468144,11.24461018,11.24010274,11.24191269,11.24176567,11.24165308,11.24094911,11.23824049,11.22287714,11.20033127,11.17060165,11.16793269,11.17617841,11.17883881,11.18112469,11.18037643,11.18107205,11.18374139,11.19348756,11.22478848],"lat":[44.53170999,44.52439059,44.52416956,44.52398791,44.52185624,44.5120146,44.50324301,44.49702597,44.49696374,44.49108484,44.48675916,44.47559733,44.46503556,44.46372012,44.46330314,44.46242066,44.46043583,44.46132005,44.4593312,44.4778706,44.49757047,44.5061663,44.51147487,44.52158998,44.52307731,44.52595269,44.52552918,44.52394975,44.53170999]}]],[[{"lng":[11.17870636,11.17617841,11.16642698,11.14872895,11.13198366,11.13100052,11.13135495,11.13220335,11.13610606,11.13696027,11.13600606,11.11824579,11.11453328,11.12557935,11.12600733,11.11406112,11.10322332,11.0890505,11.08886885,11.08850441,11.0884427,11.10834757,11.10617421,11.14943891,11.12815558,11.10373069,11.08130637,11.07469299,11.03760421,11.02606073,11.02589604,11.02262512,11.0225622,11.02237352,11.04816659,10.9966656,10.99022956,10.99023225,10.9908497,11.00913173,11.00950325,11.01347658,11.02686709,11.02691999,11.02802848,11.03702538,11.0448445,11.04753323,11.05056075,11.05072652,11.06266232,11.0653635,11.05614262,11.10815167,11.10450505,11.13160657,11.15554781,11.18212808,11.17870636],"lat":[44.53738656,44.5061663,44.50921289,44.49894013,44.48243621,44.48069007,44.47650345,44.47356121,44.47135296,44.46915948,44.46678208,44.46678777,44.45780337,44.44617114,44.4281146,44.42689151,44.41494431,44.40498313,44.40475351,44.40395218,44.40376202,44.39252206,44.35842616,44.35195995,44.34609669,44.31157303,44.32676713,44.33423431,44.34258845,44.34986936,44.35018738,44.35781667,44.35799335,44.3735219,44.41610732,44.42953992,44.44050566,44.44058494,44.4413754,44.44517386,44.44528886,44.44722643,44.46016481,44.46019539,44.46076086,44.46368859,44.46575895,44.46692836,44.47070068,44.48038841,44.49441769,44.50007646,44.53406923,44.52467021,44.53941831,44.5674275,44.55919355,44.54990327,44.53738656]}]],[[{"lng":[10.9578001,10.98050742,10.97913436,11.00225599,11.00695284,10.94414301,10.90179559,10.90362141,10.87858513,10.88110604,10.89346617,10.89667095,10.90370276,10.94130536,10.94829436,10.94944327,10.95140125,10.95551286,10.9578001],"lat":[44.18497239,44.1788026,44.15409849,44.14439306,44.13854571,44.08122763,44.06402887,44.08514686,44.10580552,44.11228171,44.12462552,44.14625792,44.16458984,44.17549473,44.18005559,44.18274475,44.18390644,44.18528053,44.18497239]}]],[[{"lng":[11.71260804,11.71470598,11.74405305,11.74536538,11.76426196,11.79166602,11.81149152,11.81692733,11.82034371,11.82776105,11.85906935,11.91295551,11.96332308,11.95845321,12.10209871,12.13451409,12.15378113,12.11701718,12.11413598,12.11289668,12.10072366,12.09357849,12.07932422,12.07599118,12.06919911,12.06770309,12.06708633,12.06784039,12.06741183,12.06605201,12.06416889,12.06346011,12.06152129,12.05954275,12.02808748,12.02703335,12.00219652,11.87082506,11.84958577,11.78919476,11.78967724,11.77357722,11.74558468,11.78562361,11.78527487,11.80128894,11.77660905,11.77185786,11.75831489,11.7280364,11.72387495,11.72178991,11.6953466,11.69077754,11.67399974,11.63245939,11.61456681,11.63003344,11.66955561,11.68547409,11.69656392,11.68958977,11.69344838,11.70196368,11.70432447,11.7053549,11.70759559,11.70847622,11.70724329,11.70122781,11.70038571,11.6994708,11.69864795,11.69874441,11.7010851,11.71260804],"lat":[44.72817543,44.72229979,44.70238855,44.68921824,44.67646504,44.66560741,44.66525572,44.66133171,44.65692174,44.66104577,44.65133541,44.65658021,44.65867715,44.65259081,44.61864653,44.61110792,44.54845202,44.54672558,44.54722736,44.54759426,44.55202059,44.55882961,44.56122557,44.56129746,44.56000398,44.55861283,44.55718004,44.55191595,44.55081197,44.54942623,44.54809377,44.54806804,44.54806608,44.54850625,44.56047662,44.57680345,44.60020257,44.57743653,44.55606853,44.55434327,44.56575964,44.56370454,44.57995945,44.5850455,44.60571071,44.62901479,44.64396758,44.64079894,44.64849207,44.65421897,44.63671103,44.63588642,44.63516368,44.62871613,44.63226128,44.67294507,44.69012295,44.70097483,44.70440239,44.6966306,44.67454561,44.69307483,44.70124085,44.70295934,44.70399375,44.70511648,44.71127067,44.71441995,44.71542592,44.71491387,44.71517532,44.71564978,44.71668348,44.71826485,44.72521764,44.72817543]}]],[[{"lng":[11.98579395,12.09156358,12.1121559,12.1108778,12.10897808,12.10101553,12.09859989,12.08830229,12.08816342,12.07462434,12.07451241,12.01257286,12.01006783,11.9977957,11.99874635,11.97960209,11.9388465,11.88723749,11.87629562,11.86498037,11.8601302,11.86865223,11.84402665,11.98579395],"lat":[44.98371666,44.97020703,44.93310214,44.93145175,44.92626073,44.92147106,44.92097826,44.92104141,44.92813868,44.92803625,44.9366181,44.95366047,44.9462582,44.94685327,44.95186211,44.95523153,44.94801576,44.94618715,44.95677066,44.95430524,44.95924294,44.97181619,44.97000801,44.98371666]}]],[[{"lng":[11.42674203,11.42635159,11.46422659,11.47047447,11.48672818,11.49176034,11.49101259,11.48796275,11.48970909,11.48542771,11.49007448,11.45564903,11.43751302,11.4307907,11.41730451,11.40912934,11.40192021,11.38707359,11.3772247,11.37253177,11.36641169,11.36850196,11.36859205,11.35634578,11.34112864,11.2453826,11.23474353,11.23662776,11.24328363,11.2548628,11.25651205,11.26043375,11.24620567,11.27225716,11.30158351,11.42674203],"lat":[44.95008352,44.93010004,44.93571387,44.91690925,44.91598672,44.91308803,44.90955115,44.89774387,44.89393396,44.87821077,44.86224343,44.86618835,44.83733965,44.83784311,44.84115422,44.83810434,44.83365587,44.83123301,44.83345441,44.83635936,44.83730599,44.84079106,44.84267962,44.8615133,44.87259427,44.89825052,44.90597572,44.9094856,44.91678161,44.92453369,44.92620246,44.93310137,44.95143857,44.93832265,44.96235897,44.95008352]}]],[[{"lng":[11.36297676,11.37253177,11.38707359,11.35406486,11.3513548,11.33726775,11.33082206,11.34471549,11.32083199,11.30871696,11.30769762,11.30707619,11.30548517,11.30178791,11.28909205,11.2790499,11.27759812,11.27543385,11.25315405,11.26747448,11.27310365,11.24608308,11.30156737,11.31160934,11.34749072,11.36297676],"lat":[44.83771884,44.83635936,44.83123301,44.81653073,44.7930204,44.78481174,44.76293328,44.75847623,44.74501097,44.73606092,44.73528034,44.73473926,44.73307899,44.72623541,44.71394612,44.71079825,44.70935086,44.70557786,44.71632208,44.74119519,44.75044069,44.75838253,44.8104213,44.8274944,44.83013922,44.83771884]}]],[[{"lng":[12.12987532,12.16446403,12.16042501,12.15695007,12.17218858,12.18139573,12.18495434,12.21769814,12.21994491,12.22944285,12.24076144,12.24481714,12.25139016,12.25909749,12.28250327,12.2797188,12.26829405,12.26630965,12.24581362,12.23402608,12.22741115,12.2100251,12.20988323,12.20789622,12.20105411,12.20222428,12.20687313,12.20707213,12.19820669,12.16939534,12.16503137,12.16072162,12.15658267,12.14968646,12.14726649,12.15344237,12.15361611,12.12777482,12.12095382,12.11122444,12.09821405,12.09503779,12.0422514,12.02541256,12.00531305,12.00691333,12.03823051,12.04353587,12.04428877,12.0299303,12.02952975,12.03258176,12.03941085,12.05333746,12.05270319,12.05264849,12.08816342,12.09859989,12.1108778,12.11361068,12.11589758,12.12632351,12.12987532],"lat":[44.92044808,44.90374749,44.89640469,44.88465464,44.87974488,44.86719929,44.86470547,44.88283403,44.85888017,44.84514097,44.84733839,44.83684969,44.82370862,44.81481073,44.82164737,44.81938693,44.80545556,44.80435113,44.80436899,44.80341646,44.80134426,44.81158402,44.81836656,44.82039388,44.81743536,44.81572815,44.81289694,44.81146903,44.80826112,44.8185533,44.8162349,44.81235747,44.80974444,44.80989903,44.80888556,44.80294471,44.79801577,44.78191126,44.78574388,44.8036807,44.79779631,44.83298511,44.82945013,44.8340883,44.86665317,44.86724115,44.86748276,44.86726935,44.86738429,44.88731881,44.88813062,44.90811492,44.90958057,44.90919072,44.91742197,44.92774415,44.92813868,44.92097826,44.93145175,44.92960943,44.92390808,44.92163547,44.92044808]}]],[[{"lng":[12.27380769,12.24830732,12.24022792,12.26957989,12.23708404,12.15378113,12.13451409,12.10209871,12.06359205,12.01269171,11.95845321,11.97300192,11.97601325,12.11839715,12.09239422,12.09522152,12.10037113,12.10092355,12.10633736,12.09391106,12.10365084,12.11287242,12.13265351,12.13091865,12.16409621,12.18115689,12.17728348,12.17127906,12.15547273,12.15658267,12.15802744,12.15950833,12.16072162,12.16327904,12.16503137,12.16676525,12.16816378,12.16939534,12.1794841,12.18427114,12.19414319,12.19709074,12.19820669,12.19922123,12.20707213,12.20789622,12.22741115,12.26630965,12.2797188,12.28562428,12.27380769],"lat":[44.80358223,44.76276501,44.69964071,44.62980482,44.62058595,44.54845202,44.61110792,44.61864653,44.6278723,44.63981646,44.65259081,44.67060542,44.674965,44.67627568,44.70020909,44.70304913,44.70044271,44.7008598,44.7190706,44.72084595,44.75207092,44.74124218,44.73822518,44.73276349,44.74041824,44.76612195,44.80283236,44.80747345,44.80933404,44.80974444,44.81049664,44.81144587,44.81235747,44.81495119,44.8162349,44.81741106,44.81823643,44.8185533,44.82031605,44.82042561,44.81047242,44.80866147,44.80826112,44.80831368,44.81146903,44.82039388,44.80134426,44.80435113,44.81938693,44.81770158,44.80358223]}]],[[{"lng":[11.86330803,11.86498037,11.87629562,11.87821743,11.88723749,11.91386759,11.92864116,11.9388465,11.97960209,11.99874635,11.99108255,12.00320149,11.96963418,11.93341672,11.94721995,11.94747624,11.90611234,11.91082693,11.85699679,11.85352438,11.83080985,11.84765185,11.84133003,11.83408768,11.8331159,11.83296107,11.83233639,11.81663177,11.79047878,11.7825031,11.77619758,11.77471978,11.77392412,11.77211371,11.7669304,11.76588173,11.76490434,11.76363409,11.76116425,11.75956599,11.75599893,11.75089131,11.74706845,11.74230235,11.74022869,11.76692802,11.76835965,11.76236328,11.76333608,11.77508257,11.77377562,11.77249757,11.77350963,11.79710158,11.81064874,11.82989628,11.84183903,11.85807881,11.8601302,11.86330803],"lat":[44.95916774,44.95430524,44.95677066,44.94853947,44.94618715,44.95029472,44.94770203,44.94801576,44.95523153,44.95186211,44.94152731,44.92479846,44.90486455,44.90140157,44.89359097,44.88794827,44.88900024,44.85935803,44.8691849,44.86857864,44.851757,44.84074707,44.82442651,44.83634851,44.83726526,44.8373622,44.83771015,44.83597171,44.84195708,44.84163674,44.84229062,44.84266462,44.8428984,44.8434756,44.84641932,44.84744395,44.84876843,44.85696399,44.85910773,44.85949746,44.8593766,44.85753741,44.8475698,44.85257248,44.86614325,44.88772485,44.89229012,44.89501003,44.92385589,44.92601938,44.93520612,44.93868492,44.94107156,44.93541091,44.93699995,44.93773951,44.93349987,44.95929434,44.95924294,44.95916774]}]],[[{"lng":[11.5341305,11.61465359,11.72532677,11.73064443,11.76835965,11.74022869,11.74706845,11.75956599,11.76363409,11.76588173,11.77392412,11.7825031,11.78676114,11.79047878,11.81663177,11.83296107,11.84031805,11.84133003,11.85153873,11.85475878,11.85742527,11.85967822,11.86087834,11.86444469,11.86751975,11.8692692,11.87706572,11.87663072,11.87565755,11.87020505,11.86949957,11.86860319,11.85154035,11.83705221,11.82944079,11.82428369,11.80015942,11.79464031,11.78590531,11.77108936,11.73545107,11.7318991,11.72851487,11.71352379,11.69416306,11.70237927,11.7139641,11.70700797,11.7010851,11.69874441,11.70038571,11.70724329,11.70847622,11.7053549,11.70196368,11.69542435,11.69344838,11.68958977,11.69102427,11.69168667,11.69379761,11.6975437,11.69656392,11.69196825,11.68547409,11.66955561,11.66369463,11.65489598,11.63003344,11.61456681,11.59272667,11.57060384,11.54688102,11.55936505,11.55903988,11.53315296,11.537699,11.53764762,11.53583888,11.54488591,11.50847101,11.52567512,11.53063727,11.53061669,11.5274069,11.52300613,11.527757,11.53769501,11.53804367,11.49101259,11.48672818,11.47047447,11.46422659,11.5341305],"lat":[44.9362459,44.88812385,44.92645843,44.90605351,44.89229012,44.86614325,44.8475698,44.85949746,44.85696399,44.84744395,44.8428984,44.84163674,44.84229998,44.84195708,44.83597171,44.8373622,44.82509939,44.82442651,44.82270476,44.82096338,44.81714281,44.81017733,44.80944959,44.808784,44.80844571,44.80802365,44.80514474,44.80304024,44.80177748,44.79614445,44.7944428,44.77777081,44.78635003,44.78766535,44.78917745,44.79091222,44.81142203,44.81344944,44.81404379,44.79344043,44.80399556,44.80197866,44.79885489,44.78815778,44.77975169,44.75561929,44.7362235,44.72802383,44.72521764,44.71826485,44.71517532,44.71542592,44.71441995,44.70511648,44.70295934,44.70210341,44.70124085,44.69307483,44.68974634,44.68889918,44.68735457,44.68173544,44.67454561,44.67451313,44.6966306,44.70440239,44.70157377,44.69543399,44.70097483,44.69012295,44.71169761,44.73390827,44.75681089,44.78651686,44.78690294,44.80056874,44.80792344,44.80884322,44.81037065,44.82096679,44.83289786,44.84542937,44.85513544,44.85605924,44.85520582,44.85426371,44.8748689,44.87981628,44.88287256,44.90955115,44.91598672,44.91690925,44.93571387,44.9362459]}]],[[{"lng":[11.8866381,11.90403776,11.89918171,11.88182678,11.88004676,11.87603198,11.87196719,11.86820066,11.86692583,11.86671353,11.85967822,11.85742527,11.85475878,11.85317027,11.85153873,11.84133003,11.84765185,11.82971494,11.83080985,11.83089804,11.85352438,11.8866381],"lat":[44.86280365,44.86024668,44.83722146,44.82468914,44.81669974,44.81431643,44.81319453,44.81097574,44.80900031,44.80854682,44.81017733,44.81714281,44.82096338,44.82202934,44.82270476,44.82442651,44.84074707,44.84490341,44.851757,44.85200687,44.86857864,44.86280365]}]],[[{"lng":[12.03248979,12.07462434,12.05264849,12.05333746,12.03258176,12.04428877,12.03823051,12.00691333,12.00531305,12.02541256,12.00979649,11.98838469,11.97225362,11.96866127,11.95470733,11.94235752,11.92939694,11.92886072,11.92275444,11.9183294,11.92369008,11.90909875,11.91631557,11.90124145,11.89918171,11.89322361,11.90403776,11.91082693,11.90611234,11.94747624,11.93341672,12.00320149,11.9977957,12.01257286,12.03248979],"lat":[44.94597073,44.92803625,44.92774415,44.90919072,44.90811492,44.86738429,44.86748276,44.86724115,44.86665317,44.8340883,44.83076997,44.819135,44.82248201,44.82223346,44.80882249,44.81143715,44.80849388,44.80864267,44.81289518,44.81624227,44.82356566,44.83091519,44.83615751,44.83718712,44.83722146,44.83899306,44.86024668,44.85935803,44.88900024,44.88794827,44.90140157,44.92479846,44.94685327,44.95366047,44.94597073]}]],[[{"lng":[12.15292676,12.15867436,12.16490611,12.17127906,12.17728348,12.17739751,12.175197,12.17535143,12.18115689,12.16409621,12.13091865,12.11287242,12.11546828,12.10564889,12.1014019,12.11189797,12.11347362,12.09821405,12.11122444,12.11799448,12.11814213,12.12095382,12.12195782,12.12610107,12.12777482,12.1336843,12.15361611,12.14680177,12.14726649,12.14827938,12.14968646,12.15292676],"lat":[44.80951532,44.807292,44.80609306,44.80747345,44.80283236,44.79842403,44.79246605,44.78859987,44.76612195,44.74041824,44.73276349,44.74124218,44.75005644,44.7518725,44.7523031,44.75767065,44.75924803,44.79779631,44.8036807,44.79791459,44.79314846,44.78574388,44.78443813,44.78228121,44.78191126,44.78169958,44.79801577,44.80778212,44.80888556,44.80960478,44.80989903,44.80951532]}]],[[{"lng":[11.7921272,11.80015942,11.82944079,11.82527493,11.8332586,11.82520444,11.80322082,11.78532243,11.78827357,11.77546648,11.75215803,11.75353586,11.77108936,11.77493536,11.7921272],"lat":[44.81355595,44.81142203,44.78917745,44.78593156,44.7784329,44.75852184,44.75919002,44.75294285,44.75889006,44.77960109,44.7921114,44.79662422,44.79344043,44.79533211,44.81355595]}]],[[{"lng":[12.28455191,12.2769092,12.26563015,12.26728708,12.25139016,12.24076144,12.21994491,12.21769814,12.18495434,12.17218858,12.15695007,12.16446403,12.14349347,12.12987532,12.11589758,12.11490541,12.1108778,12.1121559,12.11382083,12.11354349,12.10123112,12.14242435,12.17067592,12.2249718,12.2808688,12.29487131,12.28455191],"lat":[44.89369141,44.89291497,44.86877276,44.83529015,44.82370862,44.84733839,44.85888017,44.88283403,44.86470547,44.87974488,44.88465464,44.90374749,44.92191793,44.92044808,44.92390808,44.92488098,44.93145175,44.93310214,44.94218367,44.95086345,44.96182646,44.92790385,44.94204738,44.92298071,44.94176719,44.9262134,44.89369141]}]],[[{"lng":[11.43751302,11.44436671,11.44815904,11.47184363,11.47837652,11.47934858,11.48090992,11.4879726,11.43640501,11.42462333,11.4388531,11.40891216,11.40912934,11.41730451,11.43751302],"lat":[44.83733965,44.8390475,44.83866916,44.83276192,44.82113362,44.82051837,44.81976428,44.81668485,44.79889741,44.80916764,44.81582308,44.83293274,44.83810434,44.84115422,44.83733965]}]],[[{"lng":[11.83705221,11.85154035,11.86487029,11.86860319,11.86893842,11.87080232,11.87295702,11.87395514,11.87506259,11.87980067,11.88161689,11.88242205,11.88336158,11.88875051,11.88948863,11.88998566,11.89352477,11.89474065,11.89643563,11.89956751,11.90175498,11.90548855,11.90800008,11.90841019,11.90649882,11.91036982,11.9020477,11.90642057,11.97689218,11.99426229,12.0135648,12.09692671,12.10365084,12.09391106,12.10633736,12.09239422,12.11839715,12.01666958,11.99996525,11.98132222,11.97601325,11.9569605,11.85344044,11.83614024,11.82520444,11.82075035,11.8332586,11.83300087,11.83084777,11.82601788,11.82527493,11.82535803,11.82944079,11.83705221],"lat":[44.78766535,44.78635003,44.78096151,44.77777081,44.77739289,44.77700392,44.77714324,44.77737466,44.77778787,44.78128274,44.78196607,44.78214377,44.78222806,44.78079546,44.78038969,44.77998099,44.77947721,44.7795274,44.77979046,44.7804941,44.7805105,44.78035698,44.77977988,44.77949938,44.77082052,44.75894457,44.74825746,44.74729095,44.76860965,44.75628134,44.75720451,44.75106535,44.75207092,44.72084595,44.7190706,44.70020909,44.67627568,44.66682162,44.66897246,44.67344008,44.674965,44.68013248,44.73108288,44.75025666,44.75852184,44.76325013,44.7784329,44.78113993,44.78208457,44.78535502,44.78593156,44.78609604,44.78917745,44.78766535]}]],[[{"lng":[11.50178348,11.50417232,11.53315296,11.55002033,11.55903988,11.55929475,11.55936505,11.55932885,11.55827905,11.54688102,11.59272667,11.45278097,11.44666877,11.43785503,11.43392016,11.43244693,11.4128987,11.4076275,11.39924104,11.42533409,11.42639024,11.43640501,11.44596934,11.47003679,11.4758273,11.4879726,11.49094333,11.49192421,11.49556046,11.50178348],"lat":[44.81482794,44.81522332,44.80056874,44.79151036,44.78690294,44.78672614,44.78651686,44.78640246,44.78379167,44.75681089,44.71169761,44.76050814,44.76073385,44.75977917,44.75987666,44.76022314,44.76530118,44.76628121,44.76857413,44.79569439,44.79615805,44.79889741,44.80172654,44.80776176,44.80810441,44.81668485,44.81927567,44.81973137,44.8204621,44.81482794]}]],[[{"lng":[11.81661334,11.8702113,11.9569605,11.97601325,11.96332308,11.85906935,11.74536538,11.74405305,11.73127248,11.73835574,11.75334588,11.81661334],"lat":[44.75560731,44.71653787,44.68013248,44.674965,44.65867715,44.65133541,44.68921824,44.70238855,44.71378136,44.72548101,44.73982087,44.75560731]}]],[[{"lng":[11.83684289,11.84413174,11.86865223,11.86057149,11.8601302,11.85807881,11.86148716,11.84183903,11.79710158,11.77350963,11.76333608,11.76236328,11.73064443,11.7255359,11.72532677,11.74484685,11.74703629,11.83684289],"lat":[44.97289949,44.96933818,44.97181619,44.96389383,44.95924294,44.95929434,44.95133224,44.93349987,44.93541091,44.94107156,44.92385589,44.89501003,44.90605351,44.91434485,44.92645843,44.93497392,44.95809666,44.97289949]}]],[[{"lng":[11.40912934,11.4388531,11.42978394,11.42462333,11.43640501,11.39924104,11.3953084,11.39397146,11.39325193,11.39170203,11.3883459,11.37468349,11.34483568,11.33082206,11.3329981,11.33609049,11.33901701,11.33878874,11.33726775,11.3487468,11.3513548,11.35406486,11.36173368,11.37313215,11.38707359,11.40912934],"lat":[44.83810434,44.81582308,44.81188455,44.80916764,44.79889741,44.76857413,44.77181565,44.77405825,44.77507257,44.77675244,44.77865465,44.78016852,44.75864168,44.76293328,44.76768698,44.77227784,44.7793206,44.78243101,44.78481174,44.78827597,44.7930204,44.81653073,44.81508145,44.82265673,44.83123301,44.83810434]}]],[[{"lng":[11.53769501,11.527757,11.52300613,11.53063727,11.52567512,11.50595408,11.50847101,11.51977795,11.54488591,11.53583888,11.53315296,11.49556046,11.47934858,11.47932058,11.47184363,11.45903128,11.44436671,11.45564903,11.4675316,11.49007448,11.49101259,11.53769501],"lat":[44.87981628,44.8748689,44.85426371,44.85513544,44.84542937,44.84053009,44.83289786,44.82639002,44.82096679,44.81037065,44.80056874,44.8204621,44.82051837,44.82397577,44.83276192,44.83359683,44.8390475,44.86618835,44.86666691,44.86224343,44.90955115,44.87981628]}]],[[{"lng":[11.74024989,11.78827357,11.75334588,11.73127248,11.71479032,11.71260804,11.70700797,11.7068051,11.69416306,11.74024989],"lat":[44.79732694,44.75889006,44.73982087,44.71378136,44.72814153,44.72817543,44.72802383,44.72822386,44.77975169,44.79732694]}]],[[{"lng":[11.90124145,11.91631557,11.90909875,11.91098131,11.92369008,11.92886072,11.94235752,11.95424211,11.92391997,11.90245998,11.89126229,11.88948863,11.88242205,11.87980067,11.87395514,11.86893842,11.87721702,11.87706572,11.87627167,11.86692583,11.87196719,11.88004676,11.88182678,11.90124145],"lat":[44.83718712,44.83615751,44.83091519,44.82763544,44.82356566,44.80864267,44.81143715,44.80763727,44.7992902,44.78670852,44.78951789,44.78038969,44.78214377,44.78128274,44.77737466,44.77739289,44.80415071,44.80514474,44.80570489,44.80900031,44.81319453,44.81669974,44.82468914,44.83718712]}]],[[{"lng":[12.32705932,12.35519221,12.39672107,12.30854543,12.33974793,12.30860131,12.25892844,12.25139016,12.26728708,12.2769092,12.29514952,12.32705932],"lat":[44.85280887,44.8150811,44.79026219,44.80108155,44.8174571,44.84230958,44.81562576,44.82370862,44.83529015,44.89291497,44.8593028,44.85280887]}]],[[{"lng":[12.04109882,12.09503779,12.09821405,12.11224804,12.11347362,12.11299876,12.11189797,12.10061026,12.09692671,11.99426229,11.97689218,11.9020477,11.90359193,11.91036982,11.90649882,11.90841019,11.90175498,11.89474065,11.88998566,11.89126229,11.90245998,11.95205317,11.95424211,11.95470733,11.95572325,11.9620735,11.96866127,11.98838469,12.00979649,12.01528229,12.02541256,12.03646458,12.04109882],"lat":[44.82990394,44.83298511,44.79779631,44.76465573,44.75924803,44.7584058,44.75767065,44.75191052,44.75106535,44.75628134,44.76860965,44.74825746,44.75432161,44.75894457,44.77082052,44.77949938,44.7805105,44.7795274,44.77998099,44.78951789,44.78670852,44.80603304,44.80763727,44.80882249,44.81088465,44.81832673,44.82223346,44.819135,44.83076997,44.83213747,44.8340883,44.83656284,44.82990394]}]],[[{"lng":[12.00709432,12.00520307,12.02703335,12.02808748,12.03341214,12.04494077,12.06346011,12.06741183,12.06708633,12.06919911,12.07932422,12.09357849,12.09600217,12.10072366,12.11413598,12.06513599,12.05443282,12.04798569,11.96863315,11.9557717,11.95304343,11.95126355,11.95529678,11.96465081,11.98575574,11.97786122,11.930063,11.90903313,11.89559106,11.89511897,11.88724134,11.8861313,11.88621195,11.88413785,12.00709432],"lat":[44.59491252,44.58377369,44.57680345,44.56047662,44.55886132,44.5560087,44.54806804,44.55081197,44.55718004,44.56000398,44.56122557,44.55882961,44.55580876,44.55202059,44.54722736,44.49305199,44.49697096,44.49418954,44.49643407,44.50748982,44.50951398,44.51138752,44.51387192,44.53272728,44.54107136,44.5444825,44.55592633,44.56148089,44.5608415,44.56097052,44.56640949,44.57135618,44.57487072,44.57749784,44.59491252]}]],[[{"lng":[12.06513599,12.07131626,12.06984571,12.07506014,12.07716328,12.08142472,12.07431402,12.04234159,12.0039093,11.97763157,11.97357212,11.97069828,11.94511582,11.9430079,11.94051299,11.93927895,11.95029559,11.96252878,12.06513599],"lat":[44.49305199,44.49041261,44.47881459,44.47621456,44.47455963,44.46910109,44.45866859,44.43675997,44.38241262,44.3796173,44.39166054,44.39416608,44.40254434,44.40858541,44.41343006,44.41837724,44.45157325,44.46184325,44.49305199]}]],[[{"lng":[11.85106518,11.82878022,11.8262451,11.82527664,11.80927912,11.81444662,11.81721142,11.82629599,11.83685737,11.84642999,11.86098891,11.85243757,11.85106518],"lat":[44.38302943,44.38063111,44.37621063,44.37486621,44.38102276,44.39350347,44.39596957,44.40219531,44.4140453,44.40289676,44.39706818,44.38569592,44.38302943]}]],[[{"lng":[11.78142825,11.80389577,11.81068041,11.8110541,11.82674666,11.83562859,11.83645798,11.85439904,11.87640848,11.8940673,11.89563906,11.89593732,11.89643315,11.90460066,11.927582,11.91353675,11.88861015,11.82938009,11.8060783,11.78246647,11.78081344,11.77808629,11.77601262,11.77379729,11.77138614,11.75283866,11.72861269,11.72022829,11.71967372,11.71588519,11.67880649,11.65255628,11.61616647,11.5845742,11.61483927,11.62460403,11.63286402,11.65697252,11.65800742,11.66424209,11.6722663,11.67258743,11.6780187,11.68779176,11.69625013,11.6799676,11.69161771,11.73929138,11.78142825],"lat":[44.27656735,44.26799171,44.25083667,44.25053039,44.24238247,44.23674249,44.23497986,44.23005373,44.22026435,44.23418637,44.23506929,44.23503921,44.2349366,44.21089874,44.21534102,44.20785312,44.1706569,44.19896883,44.19947202,44.18071196,44.18041012,44.18094468,44.18207548,44.18683781,44.19887013,44.1934851,44.17183872,44.15868757,44.15723331,44.12255729,44.12291267,44.10115505,44.1184909,44.11220515,44.15792556,44.16287971,44.16874845,44.19782732,44.19887139,44.20420296,44.20977722,44.20995876,44.21299145,44.21566067,44.2260305,44.23219373,44.25160871,44.25566019,44.27656735]}]],[[{"lng":[11.68638208,11.6799676,11.68475215,11.69625013,11.68779176,11.68095614,11.6780187,11.67258743,11.65800742,11.64605193,11.63286402,11.62460403,11.52494706,11.52773391,11.53621465,11.53734059,11.53563487,11.55600878,11.56167682,11.56225424,11.5491291,11.55095516,11.55412103,11.55544123,11.56356676,11.56821249,11.57881047,11.59456339,11.59934959,11.60087659,11.60105567,11.60383914,11.60808209,11.61853892,11.62113291,11.62599231,11.6270233,11.62907216,11.632946,11.6331768,11.63430616,11.63441586,11.66484934,11.68638208],"lat":[44.24354851,44.23219373,44.22893931,44.2260305,44.21566067,44.21262541,44.21299145,44.20995876,44.19887139,44.18366741,44.16874845,44.16287971,44.15766303,44.17016127,44.17982901,44.18477765,44.19038947,44.18502761,44.18549325,44.18802215,44.20502768,44.20855071,44.21104607,44.22317001,44.21878352,44.21949836,44.232201,44.23521561,44.23709184,44.23803388,44.23864514,44.24064468,44.24314063,44.24484134,44.24543902,44.24712789,44.24777937,44.24991088,44.25512874,44.25552854,44.2578162,44.25830881,44.25706675,44.24354851]}]],[[{"lng":[11.7945414,11.79589772,11.84809683,11.84505291,11.83241269,11.82313797,11.82136318,11.82112335,11.82112543,11.82062705,11.80787502,11.80189325,11.79352584,11.7704497,11.76724905,11.76171158,11.73649858,11.77443125,11.78596702,11.78880562,11.79376573,11.7945414],"lat":[44.36334336,44.35006601,44.32554532,44.3227674,44.32016043,44.30899284,44.30910874,44.31010497,44.31119424,44.31152165,44.31070173,44.30751774,44.29737426,44.28645825,44.2868735,44.28691759,44.30917276,44.33603834,44.34805946,44.36048578,44.36471274,44.36334336]}]],[[{"lng":[12.30716646,12.34772996,12.38352372,12.34933607,12.30245806,12.28365793,12.28024122,12.24712624,12.23964657,12.22985615,12.22923725,12.24427746,12.2503817,12.25414286,12.25519113,12.25951576,12.27159519,12.2746175,12.27868759,12.28678549,12.29070524,12.29760921,12.30460327,12.30716646],"lat":[44.30193812,44.30122982,44.22449406,44.19073231,44.21945002,44.23108598,44.23318922,44.23079669,44.21765017,44.21721017,44.2265632,44.24803108,44.25107131,44.25091011,44.25129433,44.2543625,44.28354151,44.30042395,44.30057715,44.30236975,44.30341812,44.30648673,44.3082783,44.30193812]}]],[[{"lng":[11.88413785,11.88724134,11.89511897,11.90903313,11.91623494,11.90916244,11.87305761,11.86553781,11.85374464,11.85113142,11.84093022,11.8468663,11.82765234,11.77868843,11.78919476,11.83198989,11.84958577,11.86031504,11.87082506,11.88413785],"lat":[44.57749784,44.56640949,44.56097052,44.56148089,44.55945158,44.55212864,44.5471513,44.508594,44.49637613,44.48792512,44.48533646,44.46873495,44.47312785,44.50351639,44.55434327,44.56161725,44.55606853,44.5596439,44.57743653,44.57749784]}]],[[{"lng":[11.94489557,11.94511582,11.94654804,11.95706733,11.97069828,11.97531738,11.97763157,11.98379225,11.98332185,11.96480981,11.94042103,11.93948018,11.93869969,11.93225284,11.92984872,11.92568886,11.91879094,11.90275865,11.87536653,11.86122626,11.8686649,11.85243757,11.86098891,11.90529101,11.92118306,11.94489557],"lat":[44.40291012,44.40254434,44.40105795,44.39724787,44.39416608,44.38175725,44.3796173,44.37783592,44.37623677,44.36931909,44.3797809,44.37929199,44.37724149,44.37332015,44.37318384,44.37458694,44.36585999,44.34440157,44.35530395,44.37154893,44.37942851,44.38569592,44.39706818,44.40042323,44.39502114,44.40291012]}]],[[{"lng":[11.98767068,12.03060917,12.01612071,12.02918485,12.02772379,11.97586245,11.94749363,11.93709389,11.93182584,11.93058394,11.92719291,11.92624774,11.92554932,11.92555256,11.92829151,11.927582,11.92329113,11.90460066,11.8957625,11.89593732,11.8940673,11.87640848,11.86677744,11.85439904,11.83645798,11.8358495,11.83562859,11.82674666,11.8110541,11.80946665,11.80389577,11.78491739,11.78142825,11.77655462,11.77614382,11.77385405,11.76112389,11.76500863,11.7704497,11.78422459,11.79352584,11.80123753,11.80189325,11.80494887,11.80787502,11.81170939,11.82062705,11.82136318,11.82313797,11.83125613,11.83220533,11.83241269,11.8330472,11.83982231,11.84425989,11.84505291,11.84570432,11.85763745,11.87052788,11.87536653,11.90275865,11.91879094,11.92568886,11.92622654,11.94042103,11.96480981,11.98767068],"lat":[44.37733834,44.35297047,44.33829046,44.32811412,44.32229417,44.25569716,44.23588461,44.23676039,44.24110461,44.24155063,44.24160614,44.24098218,44.24004579,44.22977358,44.21562754,44.21534102,44.21726369,44.21089874,44.22079229,44.23503921,44.23418637,44.22026435,44.22351358,44.23005373,44.23497986,44.23534608,44.23674249,44.24238247,44.25053039,44.25794271,44.26799171,44.27731503,44.27656735,44.27801391,44.27594427,44.27521671,44.27680375,44.28613555,44.28645825,44.29761952,44.29737426,44.30296047,44.30751774,44.30954932,44.31070173,44.31196675,44.31152165,44.30910874,44.30899284,44.31645301,44.31976045,44.32016043,44.3205768,44.32326226,44.32270613,44.3227674,44.32301223,44.33091548,44.35385929,44.35530395,44.34440157,44.36585999,44.37458694,44.37479822,44.3797809,44.36931909,44.37733834]}]],[[{"lng":[11.96830015,12.00031967,12.04798569,11.97422007,11.96252878,11.95205012,11.93317784,11.93622096,11.94166994,11.92635054,11.93875945,11.94934841,11.9557717,11.96830015],"lat":[44.49681182,44.49796398,44.49418954,44.46878612,44.46184325,44.45326537,44.46286251,44.46739351,44.47400503,44.48621012,44.49390342,44.50073766,44.50748982,44.49681182]}]],[[{"lng":[11.930063,11.98575574,11.96465081,11.95126355,11.9557717,11.95542851,11.94934841,11.92678525,11.92635054,11.92534693,11.94166994,11.93317784,11.95205012,11.95029559,11.95070978,11.95548165,11.9430079,11.92118306,11.86373905,11.86098891,11.84642999,11.85071281,11.83685737,11.84042771,11.83606603,11.84094371,11.84156333,11.8464013,11.85042672,11.85361945,11.85692395,11.85810253,11.85887605,11.8586737,11.85605744,11.85716168,11.86074638,11.87481596,11.88377847,11.88376221,11.88360527,11.88230064,11.87055193,11.88123568,11.85503076,11.85964277,11.86463562,11.86452639,11.86244998,11.85931516,11.85374464,11.87305761,11.91623494,11.930063],"lat":[44.55592633,44.54107136,44.53272728,44.51138752,44.50748982,44.50692256,44.50073766,44.48660409,44.48621012,44.48475046,44.47400503,44.46286251,44.45326537,44.45157325,44.44981607,44.44550643,44.40858541,44.39502114,44.39604493,44.39706818,44.40289676,44.40833546,44.4140453,44.42357008,44.425148,44.42806956,44.42815316,44.42817663,44.42750899,44.42649005,44.42549201,44.42544451,44.42662246,44.42813997,44.43271572,44.43397545,44.43328248,44.42811257,44.43868048,44.43886093,44.43899093,44.43954603,44.44416336,44.46157504,44.47016481,44.48478637,44.49036242,44.49052449,44.49178293,44.49351797,44.49637613,44.5471513,44.55945158,44.55592633]}]],[[{"lng":[12.44976033,12.47890083,12.50371424,12.48922941,12.47647696,12.46865279,12.46035876,12.45590659,12.45286646,12.45258985,12.45239574,12.45332885,12.4499932,12.44524974,12.4393894,12.44264495,12.44201798,12.42872041,12.44976033],"lat":[44.16246519,44.13893195,44.11556243,44.1084194,44.10961816,44.10978899,44.108605,44.10850194,44.10859482,44.10868236,44.10958661,44.11224813,44.11864194,44.12388981,44.12756866,44.14034887,44.1407459,44.14734463,44.16246519]}]],[[{"lng":[12.73838706,12.75564003,12.74147026,12.73732505,12.72709217,12.72068638,12.72087536,12.73257949,12.71591515,12.71007826,12.72273238,12.73838706],"lat":[43.96818374,43.96250164,43.94092493,43.94258225,43.95430099,43.95277701,43.95597585,43.96296238,43.96193981,43.95852861,43.97329204,43.96818374]}],[{"lng":[12.7397576,12.73953828,12.73965462,12.7397576],"lat":[43.9385098,43.93827842,43.93843214,43.9385098]}]],[[{"lng":[12.54099326,12.55057407,12.57394702,12.5831308,12.59173589,12.59617426,12.6010526,12.605278,12.60679264,12.62853974,12.64172759,12.64024727,12.63488615,12.63425884,12.63422245,12.63574356,12.64318204,12.64183624,12.63768015,12.6358535,12.63407415,12.6317273,12.61615402,12.61179712,12.60675825,12.60564729,12.59921107,12.56664948,12.5621478,12.55519959,12.51545171,12.51380886,12.54099326],"lat":[43.99199088,43.98665087,43.99238494,43.98197477,43.98236085,43.98386145,43.98561344,43.98834633,43.98999186,43.98781693,43.97918625,43.97883285,43.97418726,43.97335646,43.97270942,43.96763739,43.96509093,43.95844929,43.95646619,43.95668195,43.95723828,43.95768662,43.95590347,43.95770698,43.9510332,43.94858351,43.94419974,43.94097271,43.9423422,43.95209741,43.9413144,43.99230222,43.99199088]}]],[[{"lng":[12.60122382,12.5998778,12.58949226,12.53476267,12.53586465,12.56719124,12.60122382],"lat":[43.9129953,43.90217127,43.88564496,43.86852123,43.89722224,43.91513099,43.9129953]}]],[[{"lng":[12.68983377,12.72134652,12.68370859,12.68223534,12.68031825,12.65427392,12.6358342,12.63481318,12.63407415,12.64318204,12.63574356,12.63425884,12.64024727,12.67164503,12.67901513,12.68983377],"lat":[43.98621863,43.97270418,43.94927278,43.93715751,43.93425743,43.94529014,43.94802183,43.95558974,43.95723828,43.96509093,43.96763739,43.97335646,43.97883285,43.97345604,43.97455555,43.98621863]}]],[[{"lng":[12.6452987,12.65275787,12.6530748,12.65688221,12.68062873,12.68131705,12.61122756,12.6189025,12.62745946,12.63062279,12.63406428,12.64313075,12.62920235,12.6452987],"lat":[43.87669173,43.8704753,43.86273615,43.8585404,43.86407905,43.82807066,43.83078258,43.84262745,43.83699004,43.83685345,43.83845448,43.85665744,43.86785071,43.87669173]}]],[[{"lng":[12.60578454,12.61956767,12.62226613,12.63910659,12.64540746,12.65443532,12.64328164,12.62920235,12.62560385,12.6249145,12.60698522,12.58935966,12.60578454],"lat":[43.91193299,43.90242176,43.90187698,43.90491536,43.9051734,43.89836659,43.87734134,43.86785071,43.86302249,43.85376237,43.84497636,43.86525148,43.91193299]}]],[[{"lng":[12.72265323,12.7272118,12.68229503,12.68283174,12.69480651,12.71355717,12.72265323],"lat":[43.88056636,43.86321757,43.85279665,43.86055536,43.87372755,43.88104505,43.88056636]}]],[[{"lng":[12.67209505,12.65443532,12.64540746,12.63910659,12.63331539,12.62226613,12.61861818,12.61933961,12.62372289,12.64203155,12.64615532,12.65206215,12.6669001,12.66877455,12.67584352,12.67937294,12.6723104,12.67209505],"lat":[43.91268142,43.89836659,43.9051734,43.90491536,43.90315976,43.90187698,43.90319011,43.90474273,43.90405446,43.9156525,43.92000425,43.92173297,43.92330979,43.92376271,43.92987772,43.92560468,43.91673478,43.91268142]}]],[[{"lng":[12.63245342,12.68820202,12.67901513,12.66711351,12.66468285,12.6625515,12.65935747,12.64172759,12.62853974,12.61324152,12.61013886,12.60679264,12.605278,12.60453821,12.60306445,12.62088467,12.63245342],"lat":[44.02525111,43.98712386,43.97455555,43.9747451,43.97687583,43.98164372,43.98530682,43.97918625,43.98781693,43.98674037,43.98921533,43.98999186,43.98834633,43.98914051,43.99532084,44.00019067,44.02525111]}]],[[{"lng":[12.50892562,12.57547278,12.63214263,12.63225357,12.61833424,12.62088467,12.61311612,12.60711718,12.60549366,12.60459496,12.60306445,12.605278,12.59173589,12.57394702,12.56964154,12.55057407,12.53918703,12.51380886,12.4529499,12.46270122,12.44308051,12.44329244,12.4803741,12.49876132,12.46177345,12.47047892,12.47249876,12.47775187,12.47956947,12.45207991,12.4550878,12.45422976,12.45239009,12.45226026,12.45239574,12.45286646,12.45590659,12.46865279,12.47647696,12.48475936,12.48922941,12.50371424,12.50892562],"lat":[44.11163915,44.07850908,44.02551518,44.0250739,44.0132274,44.00019067,43.99433327,43.99352439,43.99423741,43.99549412,43.99532084,43.98834633,43.98236085,43.99238494,43.99249116,43.98665087,43.99383292,43.99230222,43.96938966,44.00158984,44.01426532,44.02309819,44.0107813,44.02752109,44.04768506,44.05566262,44.06761272,44.06775749,44.0681785,44.08719968,44.10311995,44.10731418,44.10838155,44.10937689,44.10958661,44.10859482,44.10850194,44.10978899,44.10961816,44.10845811,44.1084194,44.11556243,44.11163915]}]],[[{"lng":[12.7288339,12.72520556,12.72277419,12.72022546,12.71355717,12.71352346,12.70847715,12.69480651,12.68699421,12.68283174,12.68062873,12.67892707,12.66565094,12.65688221,12.65275787,12.64776493,12.64328164,12.64203718,12.6453474,12.65443532,12.6557395,12.66683986,12.67209505,12.67477969,12.67626429,12.67709194,12.67777971,12.6785387,12.68513353,12.6930883,12.69749504,12.70436567,12.70529148,12.70659919,12.71264962,12.71697599,12.72002856,12.7288339],"lat":[43.90843548,43.88380738,43.88107762,43.88169213,43.88104505,43.88102815,43.87533136,43.87372755,43.86096563,43.86055536,43.86407905,43.86561939,43.86678033,43.8585404,43.8704753,43.87631583,43.87734134,43.88083818,43.89247225,43.89836659,43.90570716,43.91243177,43.91268142,43.91403546,43.91362303,43.91348834,43.91340765,43.91339668,43.91406169,43.91307979,43.91121754,43.90918065,43.90902455,43.90902709,43.91125217,43.91495554,43.91617498,43.90843548]}],[{"lng":[12.63062279,12.61585495,12.6249145,12.62920235,12.64313075,12.63884724,12.63062279],"lat":[43.83685345,43.84646627,43.85376237,43.86785071,43.85665744,43.85391767,43.83685345]}]],[[{"lng":[12.63481318,12.6358342,12.64070981,12.67914618,12.67584352,12.67390171,12.67325729,12.67036209,12.66877455,12.6669001,12.65206215,12.64615532,12.62372289,12.6164591,12.61118796,12.60037674,12.60081785,12.60173249,12.60274715,12.60428572,12.6038628,12.60887958,12.60905438,12.60725388,12.60675825,12.611425,12.61179712,12.61286385,12.61615402,12.6317273,12.63481318],"lat":[43.95558974,43.94802183,43.94407619,43.93366052,43.92987772,43.92765354,43.92694955,43.92456243,43.92376271,43.92330979,43.92173297,43.92000425,43.90405446,43.90957857,43.91155056,43.91330111,43.91380035,43.91518046,43.91749368,43.92306919,43.93530664,43.94282754,43.945919,43.95018927,43.9510332,43.95737664,43.95770698,43.95752016,43.95590347,43.95768662,43.95558974]}]],[[{"lng":[12.733187,12.72087536,12.72042494,12.72068638,12.72384664,12.72709217,12.74147026,12.7296961,12.72711792,12.72002856,12.71697599,12.71313668,12.71264962,12.70529148,12.6930883,12.68513353,12.67709194,12.67283877,12.67937294,12.67584352,12.67914618,12.68031825,12.68185322,12.68223534,12.68234338,12.68137395,12.68370859,12.70654052,12.70922192,12.71007826,12.71160686,12.71591515,12.73257949,12.733187],"lat":[43.96171812,43.95597585,43.95407745,43.95277701,43.95022967,43.95430099,43.94092493,43.91241582,43.91170481,43.91617498,43.91495554,43.91152441,43.91125217,43.90902455,43.91307979,43.91406169,43.91348834,43.91563293,43.92560468,43.92987772,43.93366052,43.93425743,43.93608951,43.93715751,43.93822537,43.94395994,43.94927278,43.96308647,43.96301283,43.95852861,43.95798375,43.96193981,43.96296238,43.96171812]}]],[[{"lng":[12.43905525,12.45207991,12.47956947,12.47249876,12.46177345,12.49744531,12.49876132,12.49651602,12.48661384,12.4803741,12.46444947,12.45569868,12.43641293,12.426854,12.42883089,12.41908965,12.4158941,12.40899473,12.39804338,12.39529123,12.35917481,12.35898127,12.35906246,12.36352424,12.37047371,12.39264511,12.39987233,12.42531067,12.43905525],"lat":[44.08866886,44.08719968,44.0681785,44.06761272,44.04768506,44.02975339,44.02752109,44.02054509,44.01296479,44.0107813,44.01724179,44.02950715,44.03293111,44.02600727,44.04577212,44.05542731,44.05564905,44.05572032,44.04915079,44.03024571,44.05182297,44.05259391,44.05422855,44.05720459,44.066031,44.06367987,44.06648074,44.08849685,44.08866886]}]],[[{"lng":[12.45156466,12.41404947,12.39779765,12.40278208,12.40644426,12.40778075,12.40776082,12.40755545,12.40528438,12.40514077,12.40556753,12.40619624,12.41012221,12.41289601,12.41343743,12.41528577,12.41631406,12.41760707,12.41893755,12.42248623,12.42349183,12.42479794,12.426854,12.42710413,12.43641293,12.44308051,12.46270122,12.45156466],"lat":[43.96808092,43.95230187,43.96225644,43.96644882,43.97163329,43.9769051,43.97742786,43.97920305,43.98338967,43.9876343,43.98899001,43.98995257,43.99383261,44.00022725,44.00401027,44.01013094,44.01239587,44.01470692,44.0170168,44.02188,44.02287618,44.02410638,44.02600727,44.02623384,44.03293111,44.01426532,44.00158984,43.96808092]}],[{"lng":[12.40196321,12.39446823,12.39196156,12.38926417,12.38892087,12.38886197,12.40454807,12.40835559,12.41768131,12.40196321],"lat":[43.89159244,43.89572516,43.89783029,43.90070596,43.90122361,43.90150623,43.90631172,43.90297162,43.89904893,43.89159244]}]],[[{"lng":[12.15110249,12.19934776,12.19463264,12.16404775,12.12357752,12.09619099,12.10058925,12.1040904,12.11273702,12.1308041,12.14946812,12.15110249],"lat":[43.83215099,43.77037553,43.73192431,43.76226149,43.7491507,43.76530394,43.7761566,43.79411722,43.79643411,43.82475929,43.83329454,43.83215099]}]],[[{"lng":[12.34992395,12.35276198,12.34737169,12.32685948,12.29991611,12.27819001,12.2985406,12.29085769,12.28621035,12.28691897,12.28759156,12.28938784,12.29024478,12.29049825,12.29550105,12.29574328,12.29476236,12.2945376,12.29508287,12.2955321,12.29728188,12.3101867,12.31579703,12.33182932,12.33840731,12.34114494,12.34517434,12.34992395],"lat":[43.87480927,43.87110223,43.86702001,43.86616118,43.84803684,43.85723823,43.87276296,43.87556858,43.87677833,43.88168259,43.88259503,43.8837947,43.88421116,43.88451896,43.89306705,43.89452305,43.89722076,43.8994645,43.90144743,43.90191612,43.90316202,43.91273233,43.91704397,43.90684489,43.88814703,43.88340112,43.87772599,43.87480927]}]],[[{"lng":[12.24864767,12.25474197,12.26266923,12.26356905,12.26362899,12.26417707,12.2641625,12.26107958,12.26531143,12.27326609,12.29794085,12.29728188,12.2955321,12.29529492,12.29508287,12.29487753,12.29472915,12.2945376,12.29476236,12.29574328,12.29562307,12.29550105,12.29511335,12.29049825,12.29024478,12.28759156,12.28691897,12.28615682,12.28621035,12.28642117,12.2985406,12.28204799,12.27374322,12.2732768,12.27458279,12.26535139,12.24349818,12.24220714,12.23595779,12.2465673,12.22073015,12.20389776,12.20358558,12.20361195,12.21908817,12.22236137,12.22223625,12.23479725,12.23568313,12.23651989,12.23996243,12.24864767],"lat":[43.91206502,43.91232539,43.9065784,43.90549933,43.90528604,43.90278554,43.90183614,43.89645942,43.89529859,43.89539488,43.90398927,43.90316202,43.90191612,43.90167988,43.90144743,43.90111124,43.90067888,43.8994645,43.89722076,43.89452305,43.89347317,43.89306705,43.89213293,43.88451896,43.88421116,43.88259503,43.88168259,43.87755863,43.87677833,43.87653818,43.87276296,43.86518511,43.85442184,43.85317479,43.85021584,43.84246303,43.84852388,43.85081132,43.87009766,43.89030987,43.89407579,43.90822057,43.91232121,43.9129269,43.90805634,43.90887577,43.91528955,43.91695828,43.9169235,43.91675899,43.91618103,43.91206502]}],[{"lng":[12.3547572,12.3101867,12.29985267,12.29476195,12.2953326,12.32282757,12.3547572],"lat":[43.94969139,43.91273233,43.91716842,43.9281896,43.92954971,43.96060115,43.94969139]}]],[[{"lng":[12.34682571,12.3354392,12.28472572,12.28378091,12.19748776,12.20061444,12.23726152,12.22425876,12.23210763,12.2344934,12.23585891,12.23620408,12.23665711,12.23700943,12.23707071,12.24353065,12.24478081,12.24563595,12.24852062,12.25145153,12.25181649,12.25506551,12.25559906,12.25926142,12.26110324,12.26189474,12.26237317,12.26258732,12.26535139,12.27001293,12.27458279,12.2748936,12.27377733,12.2732768,12.27443176,12.29607842,12.29991611,12.32685948,12.34682571],"lat":[43.86332677,43.82411863,43.79466793,43.76491721,43.74502511,43.77459409,43.78700399,43.80985925,43.81926274,43.82038358,43.8224111,43.82281546,43.82314474,43.82339359,43.82343461,43.82704607,43.82756874,43.82780102,43.82784951,43.82663169,43.82671132,43.82882899,43.82926393,43.8325716,43.83783983,43.83929598,43.84008583,43.84036331,43.84246303,43.84473792,43.85021584,43.85140433,43.85231865,43.85317479,43.85518086,43.84741846,43.84803684,43.86616118,43.86332677]}]],[[{"lng":[12.40174298,12.41250256,12.40835559,12.38892087,12.41768131,12.43213625,12.40060855,12.39248593,12.35276198,12.34517434,12.34114494,12.33496774,12.33182932,12.32667324,12.31587678,12.32107797,12.32397354,12.33023233,12.33786864,12.3458597,12.35305493,12.36721664,12.37186789,12.37498494,12.38143752,12.39779765,12.40174298],"lat":[43.95938128,43.90940411,43.90297162,43.90122361,43.89904893,43.87256944,43.87277485,43.89656388,43.87110223,43.87772599,43.88340112,43.90178359,43.90684489,43.91146526,43.91719021,43.9215765,43.92302272,43.92641896,43.93121056,43.93713911,43.9434551,43.96203611,43.9624935,43.96178158,43.95956352,43.96225644,43.95938128]}]],[[{"lng":[12.1734315,12.20319861,12.20361195,12.20389776,12.22073015,12.22957421,12.2465673,12.24816891,12.23808153,12.23595779,12.24201814,12.24220714,12.24349818,12.25680046,12.26535139,12.26237317,12.25559906,12.25145153,12.24478081,12.23700943,12.23585891,12.2344934,12.23210763,12.21802779,12.17654137,12.16976948,12.16863826,12.1679668,12.16585792,12.16522516,12.16291508,12.1610934,12.15681531,12.1567906,12.15794406,12.15805432,12.15784004,12.15110249,12.14946812,12.13825978,12.14215528,12.16805073,12.15890037,12.15803116,12.15845388,12.15922921,12.16563352,12.1702824,12.1734315],"lat":[43.92421937,43.91648858,43.9129269,43.90822057,43.89407579,43.89381692,43.89030987,43.88365158,43.87386374,43.87009766,43.85828024,43.85081132,43.84852388,43.84619149,43.84246303,43.84008583,43.82926393,43.82663169,43.82756874,43.82339359,43.8224111,43.82038358,43.81926274,43.80278974,43.81054074,43.82256809,43.82322071,43.82322134,43.8229062,43.82287423,43.82316333,43.82392953,43.82899063,43.82928842,43.830643,43.83084702,43.83238348,43.83215099,43.83329454,43.84764094,43.86233261,43.89755736,43.90575418,43.90959815,43.91923302,43.92141467,43.92476882,43.92534388,43.92421937]}]],[[{"lng":[12.27719323,12.28628669,12.29476195,12.3101867,12.29728188,12.27326609,12.26107958,12.26362899,12.25474197,12.25561786,12.27719323],"lat":[43.92547378,43.92955598,43.9281896,43.91273233,43.90316202,43.89539488,43.89645942,43.90528604,43.91232539,43.92034228,43.92547378]}]],[[{"lng":[12.41661227,12.42883089,12.426854,12.41760707,12.41528577,12.41012221,12.40619624,12.40556753,12.40528438,12.40602378,12.40755545,12.40778075,12.40278208,12.36721664,12.35632004,12.33692626,12.32282757,12.34653033,12.34775636,12.34782577,12.35079357,12.3513065,12.3528725,12.36340394,12.36942346,12.38572597,12.3849341,12.38512402,12.38835373,12.39529123,12.40003452,12.40009887,12.39804338,12.41661227],"lat":[44.05554653,44.04577212,44.02600727,44.01470692,44.01013094,43.99383261,43.98995257,43.98899001,43.98338967,43.98149499,43.97920305,43.9769051,43.96644882,43.96203611,43.94963795,43.96154685,43.96060115,43.97397748,43.97595457,43.97697798,43.98465588,43.98523952,43.98606231,43.98674725,43.98977473,44.00978731,44.01581572,44.02046455,44.02590546,44.03024571,44.03572227,44.04294963,44.04915079,44.05554653]}]],[[{"lng":[12.55877624,12.56664948,12.59921107,12.60564729,12.60725388,12.60887958,12.6038628,12.60428572,12.60081785,12.58684559,12.56719124,12.56043321,12.54817696,12.53586465,12.49279229,12.51545171,12.53564838,12.55354931,12.55519959,12.55648827,12.55877624],"lat":[43.94899698,43.94097271,43.94419974,43.94858351,43.95018927,43.94282754,43.93530664,43.92306919,43.91380035,43.91738688,43.91513099,43.9090265,43.90408749,43.89722224,43.9159332,43.9413144,43.940758,43.95159064,43.95209741,43.95192221,43.94899698]}]]],null,null,{"lineCap":null,"lineJoin":null,"clickable":true,"pointerEvents":null,"className":"","stroke":true,"color":"white","weight":2,"opacity":1,"fill":true,"fillColor":["#41B6C4","#41B6C4","#41B6C4","#FFFFCC","#FFFFCC","#41B6C4","#41B6C4","#41B6C4","#FFFFCC","#2C7FB8","#41B6C4","#41B6C4","#A1DAB4","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#41B6C4","#A1DAB4","#41B6C4","#41B6C4","#FFFFCC","#A1DAB4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#A1DAB4","#2C7FB8","#A1DAB4","#FFFFCC","#A1DAB4","#41B6C4","#41B6C4","#A1DAB4","#41B6C4","#A1DAB4","#253494","#A1DAB4","#FFFFCC","#41B6C4","#41B6C4","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#A1DAB4","#41B6C4","#41B6C4","#A1DAB4","#41B6C4","#A1DAB4","#41B6C4","#2C7FB8","#FFFFCC","#FFFFCC","#A1DAB4","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#2C7FB8","#FFFFCC","#FFFFCC","#41B6C4","#2C7FB8","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#41B6C4","#253494","#41B6C4","#A1DAB4","#FFFFCC","#41B6C4","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#A1DAB4","#A1DAB4","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#A1DAB4","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#2C7FB8","#41B6C4","#FFFFCC","#FFFFCC","#41B6C4","#A1DAB4","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#2C7FB8","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#2C7FB8","#41B6C4","#FFFFCC","#41B6C4","#A1DAB4","#FFFFCC","#41B6C4","#A1DAB4","#41B6C4","#FFFFCC","#2C7FB8","#41B6C4","#FFFFCC","#FFFFCC","#2C7FB8","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#2C7FB8","#FFFFCC","#2C7FB8","#2C7FB8","#A1DAB4","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#A1DAB4","#2C7FB8","#2C7FB8","#FFFFCC","#FFFFCC","#2C7FB8","#2C7FB8","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC"],"fillOpacity":0.7,"dashArray":"3","smoothFactor":1,"noClip":false},["<h1>Comune di Agazzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">45.78 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">543.250 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1186.632 t <\/td><\/tr><\/table>","<h1>Comune di Alseno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">53.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1678.870 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3119.945 t <\/td><\/tr><\/table>","<h1>Comune di Besenzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.87 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">202.090 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">413.508 t <\/td><\/tr><\/table>","<h1>Comune di Bettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1430.592 t <\/td><\/tr><\/table>","<h1>Comune di Bobbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.74 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">82.715 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2211.467 t <\/td><\/tr><\/table>","<h1>Comune di Borgonovo Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">55.72 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2258.010 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4052.625 t <\/td><\/tr><\/table>","<h1>Comune di Cadeo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">40.25 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1536.020 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3816.191 t <\/td><\/tr><\/table>","<h1>Comune di Calendasco<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">51.70 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">925.600 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1790.352 t <\/td><\/tr><\/table>","<h1>Comune di Caminata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">159.590 t <\/td><\/tr><\/table>","<h1>Comune di Caorso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">61.51 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1820.020 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2958.896 t <\/td><\/tr><\/table>","<h1>Comune di Carpaneto Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">49.61 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2182.930 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4400.421 t <\/td><\/tr><\/table>","<h1>Comune di Castell'Arquato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">42.03 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1156.580 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2751.506 t <\/td><\/tr><\/table>","<h1>Comune di Castel San Giovanni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">38.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4324.860 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">11331.687 t <\/td><\/tr><\/table>","<h1>Comune di Castelvetro Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">50.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1811.660 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3575.728 t <\/td><\/tr><\/table>","<h1>Comune di Cerignale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">78.570 t <\/td><\/tr><\/table>","<h1>Comune di Coli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">509.416 t <\/td><\/tr><\/table>","<h1>Comune di Corte Brugnatella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">374.225 t <\/td><\/tr><\/table>","<h1>Comune di Cortemaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">49.74 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1228.240 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2469.460 t <\/td><\/tr><\/table>","<h1>Comune di Farini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">866.595 t <\/td><\/tr><\/table>","<h1>Comune di Ferriere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">897.790 t <\/td><\/tr><\/table>","<h1>Comune di Fiorenzuola d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">50.16 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4516.930 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9005.753 t <\/td><\/tr><\/table>","<h1>Comune di Gazzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">574.270 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1852.605 t <\/td><\/tr><\/table>","<h1>Comune di Gossolengo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.35 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1382.200 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2858.772 t <\/td><\/tr><\/table>","<h1>Comune di Gragnano Trebbiense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">40.43 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1027.330 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2541.173 t <\/td><\/tr><\/table>","<h1>Comune di Gropparello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1120.971 t <\/td><\/tr><\/table>","<h1>Comune di Lugagnano Val d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">36.27 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">697.830 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1924.007 t <\/td><\/tr><\/table>","<h1>Comune di Monticelli d'Ongina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">45.19 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1596.150 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3532.156 t <\/td><\/tr><\/table>","<h1>Comune di Fontanellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">54.28 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2154.920 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3969.767 t <\/td><\/tr><\/table>","<h1>Comune di Fontevivo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">53.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1650.600 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3104.636 t <\/td><\/tr><\/table>","<h1>Comune di Fornovo di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.05 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1522.254 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3167.790 t <\/td><\/tr><\/table>","<h1>Comune di Langhirano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">57.39 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4703.290 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8195.703 t <\/td><\/tr><\/table>","<h1>Comune di Lesignano de' Bagni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">51.44 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1736.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3375.995 t <\/td><\/tr><\/table>","<h1>Comune di Medesano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">49.72 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2555.155 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5139.449 t <\/td><\/tr><\/table>","<h1>Comune di Mezzani<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">38.94 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">690.860 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1774.099 t <\/td><\/tr><\/table>","<h1>Comune di Monchio delle Corti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.75 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">366.180 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">548.558 t <\/td><\/tr><\/table>","<h1>Comune di Montechiarugolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.84 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2586.010 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6833.748 t <\/td><\/tr><\/table>","<h1>Comune di Neviano degli Arduini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2345.998 t <\/td><\/tr><\/table>","<h1>Comune di Noceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">38.95 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3447.005 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8849.792 t <\/td><\/tr><\/table>","<h1>Comune di Palanzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.70 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">349.120 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">731.899 t <\/td><\/tr><\/table>","<h1>Comune di Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">57.51 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">59578.020 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">103604.223 t <\/td><\/tr><\/table>","<h1>Comune di Pellegrino Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.35 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">180.304 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">482.734 t <\/td><\/tr><\/table>","<h1>Comune di Roccabianca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">42.66 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">763.985 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1791.052 t <\/td><\/tr><\/table>","<h1>Comune di Sala Baganza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">36.24 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1662.320 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4587.556 t <\/td><\/tr><\/table>","<h1>Comune di Salsomaggiore Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">84.43 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8054.970 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9540.116 t <\/td><\/tr><\/table>","<h1>Comune di San Secondo Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">35.51 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1395.125 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3928.980 t <\/td><\/tr><\/table>","<h1>Comune di Solignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">908.961 t <\/td><\/tr><\/table>","<h1>Comune di Soragna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.54 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1310.175 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2755.784 t <\/td><\/tr><\/table>","<h1>Comune di Sorbolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.34 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2241.310 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5054.316 t <\/td><\/tr><\/table>","<h1>Comune di Terenzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">556.936 t <\/td><\/tr><\/table>","<h1>Comune di Tizzano Val Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">64.39 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">842.280 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1308.011 t <\/td><\/tr><\/table>","<h1>Comune di Tornolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">548.438 t <\/td><\/tr><\/table>","<h1>Comune di Massa Lombarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.37 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1388.298 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7556.646 t <\/td><\/tr><\/table>","<h1>Comune di Ravenna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.72 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6977.097 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">121964.768 t <\/td><\/tr><\/table>","<h1>Comune di Riolo Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.25 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.590 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3562.512 t <\/td><\/tr><\/table>","<h1>Comune di Russi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.10 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">462.720 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9074.694 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agata sul Santerno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.92 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.572 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2477.478 t <\/td><\/tr><\/table>","<h1>Comune di Solarolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">50.210 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2771.901 t <\/td><\/tr><\/table>","<h1>Comune di Bagno di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3536.835 t <\/td><\/tr><\/table>","<h1>Comune di Bertinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">56.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3939.655 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6954.652 t <\/td><\/tr><\/table>","<h1>Comune di Borghi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1202.646 t <\/td><\/tr><\/table>","<h1>Comune di Castrocaro Terme e Terra del Sole<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3627.702 t <\/td><\/tr><\/table>","<h1>Comune di Cesena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.86 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5381.400 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">68425.055 t <\/td><\/tr><\/table>","<h1>Comune di Cesenatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">27630.504 t <\/td><\/tr><\/table>","<h1>Comune di Civitella di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1719.896 t <\/td><\/tr><\/table>","<h1>Comune di Dovadola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">863.254 t <\/td><\/tr><\/table>","<h1>Comune di Forlì<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">17.96 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16054.130 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">89396.799 t <\/td><\/tr><\/table>","<h1>Comune di Forlimpopoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.59 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4852.700 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7399.036 t <\/td><\/tr><\/table>","<h1>Comune di Galeata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1882.591 t <\/td><\/tr><\/table>","<h1>Comune di Gambettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6331.980 t <\/td><\/tr><\/table>","<h1>Comune di Gatteo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.11 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">395.680 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7737.552 t <\/td><\/tr><\/table>","<h1>Comune di Longiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7132.907 t <\/td><\/tr><\/table>","<h1>Comune di Meldola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8319.050 t <\/td><\/tr><\/table>","<h1>Comune di Mercato Saraceno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5611.213 t <\/td><\/tr><\/table>","<h1>Comune di Modigliana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4336.947 t <\/td><\/tr><\/table>","<h1>Comune di Montiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">701.070 t <\/td><\/tr><\/table>","<h1>Comune di Portico e San Benedetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">515.978 t <\/td><\/tr><\/table>","<h1>Comune di Predappio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4364.082 t <\/td><\/tr><\/table>","<h1>Comune di Premilcuore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">647.124 t <\/td><\/tr><\/table>","<h1>Comune di Rocca San Casciano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1871.507 t <\/td><\/tr><\/table>","<h1>Comune di Roncofreddo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1506.045 t <\/td><\/tr><\/table>","<h1>Comune di San Mauro Pascoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.96 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">78.216 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8162.401 t <\/td><\/tr><\/table>","<h1>Comune di Santa Sofia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3272.208 t <\/td><\/tr><\/table>","<h1>Comune di Sarsina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1625.270 t <\/td><\/tr><\/table>","<h1>Comune di Savignano sul Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">12970.453 t <\/td><\/tr><\/table>","<h1>Comune di Sogliano al Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1504.184 t <\/td><\/tr><\/table>","<h1>Comune di Tredozio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">699.516 t <\/td><\/tr><\/table>","<h1>Comune di Verghereto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1336.370 t <\/td><\/tr><\/table>","<h1>Comune di Morfasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">621.538 t <\/td><\/tr><\/table>","<h1>Comune di Nibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1526.387 t <\/td><\/tr><\/table>","<h1>Comune di Ottone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">366.970 t <\/td><\/tr><\/table>","<h1>Comune di Pecorara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">366.090 t <\/td><\/tr><\/table>","<h1>Comune di Piacenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">30.41 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">22686.174 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">74600.927 t <\/td><\/tr><\/table>","<h1>Comune di Pianello Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.03 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.490 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1713.475 t <\/td><\/tr><\/table>","<h1>Comune di Piozzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">338.706 t <\/td><\/tr><\/table>","<h1>Comune di Podenzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">39.09 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2466.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6309.134 t <\/td><\/tr><\/table>","<h1>Comune di Ponte dell'Olio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.12 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1330.380 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2823.130 t <\/td><\/tr><\/table>","<h1>Comune di Pontenure<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">43.18 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1729.850 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4005.683 t <\/td><\/tr><\/table>","<h1>Comune di Rivergaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">32.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1818.040 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5651.582 t <\/td><\/tr><\/table>","<h1>Comune di Rottofreno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">52.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3302.430 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6253.139 t <\/td><\/tr><\/table>","<h1>Comune di San Giorgio Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.60 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1240.530 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3299.006 t <\/td><\/tr><\/table>","<h1>Comune di San Pietro in Cerro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">52.23 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">211.240 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">404.463 t <\/td><\/tr><\/table>","<h1>Comune di Sarmato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">68.07 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1058.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1555.300 t <\/td><\/tr><\/table>","<h1>Comune di Travo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">29.035 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1606.933 t <\/td><\/tr><\/table>","<h1>Comune di Vernasca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1035.030 t <\/td><\/tr><\/table>","<h1>Comune di Vigolzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">30.73 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1179.520 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3838.509 t <\/td><\/tr><\/table>","<h1>Comune di Villanova sull'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">50.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">416.400 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">821.751 t <\/td><\/tr><\/table>","<h1>Comune di Zerba<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">58.410 t <\/td><\/tr><\/table>","<h1>Comune di Ziano Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1398.901 t <\/td><\/tr><\/table>","<h1>Comune di Albareto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">947.642 t <\/td><\/tr><\/table>","<h1>Comune di Bardi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1101.266 t <\/td><\/tr><\/table>","<h1>Comune di Bedonia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.79 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">587.350 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1554.380 t <\/td><\/tr><\/table>","<h1>Comune di Berceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">68.18 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">779.310 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1142.952 t <\/td><\/tr><\/table>","<h1>Comune di Bore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">383.510 t <\/td><\/tr><\/table>","<h1>Comune di Borgo Val di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3880.341 t <\/td><\/tr><\/table>","<h1>Comune di Busseto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">41.33 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1671.415 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4044.171 t <\/td><\/tr><\/table>","<h1>Comune di Calestano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">68.38 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">848.500 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1240.888 t <\/td><\/tr><\/table>","<h1>Comune di Collecchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5016.650 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10308.052 t <\/td><\/tr><\/table>","<h1>Comune di Colorno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.16 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2590.160 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5492.022 t <\/td><\/tr><\/table>","<h1>Comune di Compiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">40.98 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">220.735 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">538.643 t <\/td><\/tr><\/table>","<h1>Comune di Corniglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">74.18 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">806.900 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1087.777 t <\/td><\/tr><\/table>","<h1>Comune di Felino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">40.14 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2260.310 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5631.095 t <\/td><\/tr><\/table>","<h1>Comune di Fidenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">82.13 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">9349.230 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">11383.549 t <\/td><\/tr><\/table>","<h1>Comune di Torrile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">49.57 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2065.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4166.698 t <\/td><\/tr><\/table>","<h1>Comune di Traversetolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.10 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2524.280 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6804.038 t <\/td><\/tr><\/table>","<h1>Comune di Valmozzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">280.505 t <\/td><\/tr><\/table>","<h1>Comune di Varano de' Melegari<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">52.16 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">742.316 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1423.235 t <\/td><\/tr><\/table>","<h1>Comune di Varsi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">739.025 t <\/td><\/tr><\/table>","<h1>Comune di Sissa Trecasali<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">42.11 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2135.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5071.934 t <\/td><\/tr><\/table>","<h1>Comune di Polesine Zibello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t <\/td><\/tr><\/table>","<h1>Comune di Albinea<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.41 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">544.480 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8491.611 t <\/td><\/tr><\/table>","<h1>Comune di Bagnolo in Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.09 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2066.270 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6646.704 t <\/td><\/tr><\/table>","<h1>Comune di Baiso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2034.735 t <\/td><\/tr><\/table>","<h1>Comune di Bibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8.14 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">644.500 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7918.626 t <\/td><\/tr><\/table>","<h1>Comune di Boretto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">20.26 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">822.750 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4060.494 t <\/td><\/tr><\/table>","<h1>Comune di Brescello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.51 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">809.080 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5575.278 t <\/td><\/tr><\/table>","<h1>Comune di Cadelbosco di Sopra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">32.13 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2113.490 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6578.370 t <\/td><\/tr><\/table>","<h1>Comune di Campagnola Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.11 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1209.930 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3889.173 t <\/td><\/tr><\/table>","<h1>Comune di Campegine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">36.40 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1415.380 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3887.930 t <\/td><\/tr><\/table>","<h1>Comune di Carpineti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.37 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">394.230 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3187.118 t <\/td><\/tr><\/table>","<h1>Comune di Casalgrande<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.01 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">748.820 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">14943.937 t <\/td><\/tr><\/table>","<h1>Comune di Casina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2639.456 t <\/td><\/tr><\/table>","<h1>Comune di Castellarano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.38 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">426.640 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9744.973 t <\/td><\/tr><\/table>","<h1>Comune di Castelnovo di Sotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">28.78 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2006.740 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6972.169 t <\/td><\/tr><\/table>","<h1>Comune di Castelnovo ne' Monti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">17.38 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1160.850 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6678.683 t <\/td><\/tr><\/table>","<h1>Comune di Cavriago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.68 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">557.590 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">15166.679 t <\/td><\/tr><\/table>","<h1>Comune di Canossa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">11.60 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">297.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2564.133 t <\/td><\/tr><\/table>","<h1>Comune di Correggio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.48 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2901.490 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">23240.842 t <\/td><\/tr><\/table>","<h1>Comune di Fabbrico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">26.19 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1203.580 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4595.299 t <\/td><\/tr><\/table>","<h1>Comune di Gattatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">28.14 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1316.060 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4677.169 t <\/td><\/tr><\/table>","<h1>Comune di Gualtieri<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15.35 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">730.750 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4759.966 t <\/td><\/tr><\/table>","<h1>Comune di Guastalla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">760.500 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13460.318 t <\/td><\/tr><\/table>","<h1>Comune di Luzzara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9270.328 t <\/td><\/tr><\/table>","<h1>Comune di Montecchio Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8.25 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">725.130 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8790.935 t <\/td><\/tr><\/table>","<h1>Comune di Novellara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.05 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">331.675 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10860.713 t <\/td><\/tr><\/table>","<h1>Comune di Poviglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16.38 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">928.140 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5665.287 t <\/td><\/tr><\/table>","<h1>Comune di Quattro Castella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">754.220 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9861.269 t <\/td><\/tr><\/table>","<h1>Comune di Reggiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10078.559 t <\/td><\/tr><\/table>","<h1>Comune di Reggio nell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">19.98 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">24102.722 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">120613.866 t <\/td><\/tr><\/table>","<h1>Comune di Rio Saliceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">28.22 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1232.530 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4367.604 t <\/td><\/tr><\/table>","<h1>Comune di Rolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">25.72 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">880.320 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3422.847 t <\/td><\/tr><\/table>","<h1>Comune di Rubiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.18 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2089.110 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">14728.823 t <\/td><\/tr><\/table>","<h1>Comune di San Martino in Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.26 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2265.640 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6079.841 t <\/td><\/tr><\/table>","<h1>Comune di San Polo d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.76 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">227.780 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6052.470 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Ilario d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.52 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">578.880 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10480.788 t <\/td><\/tr><\/table>","<h1>Comune di Scandiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.97 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">968.580 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">19477.384 t <\/td><\/tr><\/table>","<h1>Comune di Toano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2822.305 t <\/td><\/tr><\/table>","<h1>Comune di Vetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1298.701 t <\/td><\/tr><\/table>","<h1>Comune di Vezzano sul Crostolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.45 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">223.660 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3001.691 t <\/td><\/tr><\/table>","<h1>Comune di Viano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.40 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">145.810 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1971.646 t <\/td><\/tr><\/table>","<h1>Comune di Villa Minozzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2222.563 t <\/td><\/tr><\/table>","<h1>Comune di Ventasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t <\/td><\/tr><\/table>","<h1>Comune di Bastiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2388.783 t <\/td><\/tr><\/table>","<h1>Comune di Bomporto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7511.772 t <\/td><\/tr><\/table>","<h1>Comune di Campogalliano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7195.260 t <\/td><\/tr><\/table>","<h1>Comune di Camposanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2528.820 t <\/td><\/tr><\/table>","<h1>Comune di Carpi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.06 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15640.010 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">35494.087 t <\/td><\/tr><\/table>","<h1>Comune di Castelfranco Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.09 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.810 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">17416.756 t <\/td><\/tr><\/table>","<h1>Comune di Castelnuovo Rangone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10920.081 t <\/td><\/tr><\/table>","<h1>Comune di Castelvetro di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8243.183 t <\/td><\/tr><\/table>","<h1>Comune di Cavezzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5377.219 t <\/td><\/tr><\/table>","<h1>Comune di Concordia sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.83 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">275.590 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5703.750 t <\/td><\/tr><\/table>","<h1>Comune di Fanano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2213.499 t <\/td><\/tr><\/table>","<h1>Comune di Finale Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1160.974 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9177.883 t <\/td><\/tr><\/table>","<h1>Comune di Fiorano Modenese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">14443.647 t <\/td><\/tr><\/table>","<h1>Comune di Fiumalbo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">587.645 t <\/td><\/tr><\/table>","<h1>Comune di Formigine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.59 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1367.855 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">20755.490 t <\/td><\/tr><\/table>","<h1>Comune di Frassinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1057.182 t <\/td><\/tr><\/table>","<h1>Comune di Guiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2552.043 t <\/td><\/tr><\/table>","<h1>Comune di Lama Mocogno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2076.616 t <\/td><\/tr><\/table>","<h1>Comune di Maranello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13757.364 t <\/td><\/tr><\/table>","<h1>Comune di Marano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3060.043 t <\/td><\/tr><\/table>","<h1>Comune di Medolla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">34.52 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1315.290 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3810.721 t <\/td><\/tr><\/table>","<h1>Comune di Mirandola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.57 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3124.320 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16826.057 t <\/td><\/tr><\/table>","<h1>Comune di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.33 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1721.820 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">129610.501 t <\/td><\/tr><\/table>","<h1>Comune di Montecreto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">639.246 t <\/td><\/tr><\/table>","<h1>Comune di Montefiorino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1110.269 t <\/td><\/tr><\/table>","<h1>Comune di Montese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2027.286 t <\/td><\/tr><\/table>","<h1>Comune di Nonantola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">45.35 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3246.434 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7158.453 t <\/td><\/tr><\/table>","<h1>Comune di Novi di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">45.09 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2135.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4736.271 t <\/td><\/tr><\/table>","<h1>Comune di Palagano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1069.684 t <\/td><\/tr><\/table>","<h1>Comune di Pavullo nel Frignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">12902.933 t <\/td><\/tr><\/table>","<h1>Comune di Pievepelago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1495.610 t <\/td><\/tr><\/table>","<h1>Comune di Polinago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">875.276 t <\/td><\/tr><\/table>","<h1>Comune di Prignano sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2127.257 t <\/td><\/tr><\/table>","<h1>Comune di Ravarino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.74 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">248.357 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3684.081 t <\/td><\/tr><\/table>","<h1>Comune di Riolunato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">457.922 t <\/td><\/tr><\/table>","<h1>Comune di San Cesario sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4147.289 t <\/td><\/tr><\/table>","<h1>Comune di San Felice sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7506.288 t <\/td><\/tr><\/table>","<h1>Comune di San Possidonio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2529.245 t <\/td><\/tr><\/table>","<h1>Comune di San Prospero<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3879.410 t <\/td><\/tr><\/table>","<h1>Comune di Sassuolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">30139.886 t <\/td><\/tr><\/table>","<h1>Comune di Savignano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6021.288 t <\/td><\/tr><\/table>","<h1>Comune di Serramazzoni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4798.591 t <\/td><\/tr><\/table>","<h1>Comune di Sestola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1938.404 t <\/td><\/tr><\/table>","<h1>Comune di Soliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">55.79 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3213.900 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5760.470 t <\/td><\/tr><\/table>","<h1>Comune di Spilamberto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7996.801 t <\/td><\/tr><\/table>","<h1>Comune di Vignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16364.627 t <\/td><\/tr><\/table>","<h1>Comune di Zocca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2294.904 t <\/td><\/tr><\/table>","<h1>Comune di Anzola dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">49.53 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3314.409 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6691.680 t <\/td><\/tr><\/table>","<h1>Comune di Argelato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15.49 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">955.245 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6165.400 t <\/td><\/tr><\/table>","<h1>Comune di Baricella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">72.53 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1995.040 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2750.479 t <\/td><\/tr><\/table>","<h1>Comune di Bentivoglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">42.50 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2232.725 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5253.957 t <\/td><\/tr><\/table>","<h1>Comune di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.27 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">11443.765 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">216950.749 t <\/td><\/tr><\/table>","<h1>Comune di Borgo Tossignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.59 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.015 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2034.387 t <\/td><\/tr><\/table>","<h1>Comune di Budrio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">50.88 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4655.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9149.405 t <\/td><\/tr><\/table>","<h1>Comune di Calderara di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">21.43 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1982.523 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9249.774 t <\/td><\/tr><\/table>","<h1>Comune di Camugnano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1205.363 t <\/td><\/tr><\/table>","<h1>Comune di Casalecchio di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">69.12 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">9117.560 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13190.266 t <\/td><\/tr><\/table>","<h1>Comune di Casalfiumanese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.02 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">25.255 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2472.478 t <\/td><\/tr><\/table>","<h1>Comune di Castel d'Aiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1219.548 t <\/td><\/tr><\/table>","<h1>Comune di Castel del Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16.785 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1017.756 t <\/td><\/tr><\/table>","<h1>Comune di Castel di Casio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1623.504 t <\/td><\/tr><\/table>","<h1>Comune di Castel Guelfo di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.88 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">239.920 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4921.060 t <\/td><\/tr><\/table>","<h1>Comune di Castello d'Argile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">68.48 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1923.940 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2809.390 t <\/td><\/tr><\/table>","<h1>Comune di Castel Maggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">32.37 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2986.875 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9227.562 t <\/td><\/tr><\/table>","<h1>Comune di Castel San Pietro Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">523.440 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16524.393 t <\/td><\/tr><\/table>","<h1>Comune di Castenaso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.99 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">854.120 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10693.805 t <\/td><\/tr><\/table>","<h1>Comune di Castiglione dei Pepoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3627.513 t <\/td><\/tr><\/table>","<h1>Comune di Crevalcore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">53.35 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3734.137 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6999.142 t <\/td><\/tr><\/table>","<h1>Comune di Dozza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.05 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">189.060 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6199.716 t <\/td><\/tr><\/table>","<h1>Comune di Fontanelice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.06 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.775 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1394.885 t <\/td><\/tr><\/table>","<h1>Comune di Gaggio Montano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3498.983 t <\/td><\/tr><\/table>","<h1>Comune di Galliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">62.33 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1624.330 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2606.135 t <\/td><\/tr><\/table>","<h1>Comune di Granarolo dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">13.42 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1163.385 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8666.120 t <\/td><\/tr><\/table>","<h1>Comune di Grizzana Morandi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1925.430 t <\/td><\/tr><\/table>","<h1>Comune di Imola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.94 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2281.650 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">46150.556 t <\/td><\/tr><\/table>","<h1>Comune di Lizzano in Belvedere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1909.242 t <\/td><\/tr><\/table>","<h1>Comune di Loiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2418.610 t <\/td><\/tr><\/table>","<h1>Comune di Malalbergo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.41 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">189.580 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4296.033 t <\/td><\/tr><\/table>","<h1>Comune di Marzabotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3410.451 t <\/td><\/tr><\/table>","<h1>Comune di Medicina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.78 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">80.510 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10280.239 t <\/td><\/tr><\/table>","<h1>Comune di Minerbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">292.600 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4398.901 t <\/td><\/tr><\/table>","<h1>Comune di Molinella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8935.803 t <\/td><\/tr><\/table>","<h1>Comune di Monghidoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3073.964 t <\/td><\/tr><\/table>","<h1>Comune di Monterenzio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3381.401 t <\/td><\/tr><\/table>","<h1>Comune di Monte San Pietro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">49.69 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2424.370 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4879.152 t <\/td><\/tr><\/table>","<h1>Comune di Monzuno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3433.864 t <\/td><\/tr><\/table>","<h1>Comune di Mordano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.90 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">82.140 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4315.277 t <\/td><\/tr><\/table>","<h1>Comune di Ozzano dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">10.39 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">718.200 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6912.662 t <\/td><\/tr><\/table>","<h1>Comune di Pianoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.91 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">105.650 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">11589.711 t <\/td><\/tr><\/table>","<h1>Comune di Pieve di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.05 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2215.500 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3405.734 t <\/td><\/tr><\/table>","<h1>Comune di Sala Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.85 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2048.480 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4567.744 t <\/td><\/tr><\/table>","<h1>Comune di San Benedetto Val di Sambro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2653.427 t <\/td><\/tr><\/table>","<h1>Comune di San Giorgio di Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">51.50 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2344.195 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4551.437 t <\/td><\/tr><\/table>","<h1>Comune di San Giovanni in Persiceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">33.26 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5433.285 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16337.778 t <\/td><\/tr><\/table>","<h1>Comune di San Lazzaro di Savena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1973.120 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16219.007 t <\/td><\/tr><\/table>","<h1>Comune di San Pietro in Casale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">59.02 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3349.340 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5675.058 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agata Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">22.28 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">988.844 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4438.536 t <\/td><\/tr><\/table>","<h1>Comune di Sasso Marconi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">45.09 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3736.120 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8285.101 t <\/td><\/tr><\/table>","<h1>Comune di Vergato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3897.631 t <\/td><\/tr><\/table>","<h1>Comune di Zola Predosa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5888.930 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8948.807 t <\/td><\/tr><\/table>","<h1>Comune di Valsamoggia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">40.13 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6559.820 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16345.170 t <\/td><\/tr><\/table>","<h1>Comune di Alto Reno Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t <\/td><\/tr><\/table>","<h1>Comune di Argenta<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16.24 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2217.370 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13650.341 t <\/td><\/tr><\/table>","<h1>Comune di Berra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">70.63 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1668.460 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2362.341 t <\/td><\/tr><\/table>","<h1>Comune di Bondeno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8696.094 t <\/td><\/tr><\/table>","<h1>Comune di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">79.85 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15044.046 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">18840.309 t <\/td><\/tr><\/table>","<h1>Comune di Codigoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8205.303 t <\/td><\/tr><\/table>","<h1>Comune di Comacchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.72 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2343.529 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">34884.369 t <\/td><\/tr><\/table>","<h1>Comune di Copparo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">62.99 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5116.340 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8122.805 t <\/td><\/tr><\/table>","<h1>Comune di Ferrara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.91 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">842.122 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">92678.131 t <\/td><\/tr><\/table>","<h1>Comune di Formignana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">79.53 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">987.320 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1241.510 t <\/td><\/tr><\/table>","<h1>Comune di Jolanda di Savoia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">60.35 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">920.060 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1524.424 t <\/td><\/tr><\/table>","<h1>Comune di Lagosanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.23 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">853.740 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2292.888 t <\/td><\/tr><\/table>","<h1>Comune di Masi Torello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">72.79 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">734.909 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1009.627 t <\/td><\/tr><\/table>","<h1>Comune di Mesola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.91 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1903.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2888.339 t <\/td><\/tr><\/table>","<h1>Comune di Mirabello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">74.69 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1286.934 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1722.952 t <\/td><\/tr><\/table>","<h1>Comune di Ostellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">59.22 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2094.550 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3536.735 t <\/td><\/tr><\/table>","<h1>Comune di Poggio Renatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">22.50 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">946.610 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4207.888 t <\/td><\/tr><\/table>","<h1>Comune di Portomaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">62.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3308.260 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5267.009 t <\/td><\/tr><\/table>","<h1>Comune di Ro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">67.62 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1053.670 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1558.191 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agostino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3862.227 t <\/td><\/tr><\/table>","<h1>Comune di Vigarano Mainarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4430.450 t <\/td><\/tr><\/table>","<h1>Comune di Voghiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.08 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">997.301 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1532.459 t <\/td><\/tr><\/table>","<h1>Comune di Tresigallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">69.53 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1443.850 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2076.647 t <\/td><\/tr><\/table>","<h1>Comune di Goro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2898.104 t <\/td><\/tr><\/table>","<h1>Comune di Fiscaglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.43 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2722.390 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4097.905 t <\/td><\/tr><\/table>","<h1>Comune di Alfonsine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.60 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">487.967 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8716.504 t <\/td><\/tr><\/table>","<h1>Comune di Bagnacavallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8.97 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">954.658 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10646.416 t <\/td><\/tr><\/table>","<h1>Comune di Bagnara di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.24 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">92.418 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1481.716 t <\/td><\/tr><\/table>","<h1>Comune di Brisighella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.25 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">120.240 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3698.240 t <\/td><\/tr><\/table>","<h1>Comune di Casola Valsenio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.07 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">19.820 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1845.707 t <\/td><\/tr><\/table>","<h1>Comune di Castel Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.07 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">69.870 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6518.371 t <\/td><\/tr><\/table>","<h1>Comune di Cervia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1180.760 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">37277.398 t <\/td><\/tr><\/table>","<h1>Comune di Conselice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.75 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">265.989 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7087.621 t <\/td><\/tr><\/table>","<h1>Comune di Cotignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.47 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">234.727 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5256.330 t <\/td><\/tr><\/table>","<h1>Comune di Faenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8.45 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3753.910 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">44425.062 t <\/td><\/tr><\/table>","<h1>Comune di Fusignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.11 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">111.826 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5307.177 t <\/td><\/tr><\/table>","<h1>Comune di Lugo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15.66 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3217.565 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">20549.726 t <\/td><\/tr><\/table>","<h1>Comune di Bellaria-Igea Marina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">21.13 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3695.112 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">17486.872 t <\/td><\/tr><\/table>","<h1>Comune di Cattolica<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">25.68 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3868.629 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">15067.430 t <\/td><\/tr><\/table>","<h1>Comune di Coriano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.32 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">340.967 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7892.402 t <\/td><\/tr><\/table>","<h1>Comune di Gemmano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">551.540 t <\/td><\/tr><\/table>","<h1>Comune di Misano Adriatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.82 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1805.951 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">12184.229 t <\/td><\/tr><\/table>","<h1>Comune di Mondaino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">647.679 t <\/td><\/tr><\/table>","<h1>Comune di Montefiore Conca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">886.624 t <\/td><\/tr><\/table>","<h1>Comune di Montegridolfo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">492.631 t <\/td><\/tr><\/table>","<h1>Comune di Morciano di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3774.573 t <\/td><\/tr><\/table>","<h1>Comune di Riccione<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">20.16 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6680.604 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">33135.484 t <\/td><\/tr><\/table>","<h1>Comune di Rimini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.71 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">20612.258 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">110184.295 t <\/td><\/tr><\/table>","<h1>Comune di Saludecio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1518.231 t <\/td><\/tr><\/table>","<h1>Comune di San Clemente<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3043.197 t <\/td><\/tr><\/table>","<h1>Comune di San Giovanni in Marignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.30 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">91.060 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7017.449 t <\/td><\/tr><\/table>","<h1>Comune di Santarcangelo di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.71 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">227.345 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13282.162 t <\/td><\/tr><\/table>","<h1>Comune di Verucchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5711.446 t <\/td><\/tr><\/table>","<h1>Comune di Casteldelci<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">140.239 t <\/td><\/tr><\/table>","<h1>Comune di Maiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">255.096 t <\/td><\/tr><\/table>","<h1>Comune di Novafeltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4486.688 t <\/td><\/tr><\/table>","<h1>Comune di Pennabilli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1161.929 t <\/td><\/tr><\/table>","<h1>Comune di San Leo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1769.792 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agata Feltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1477.938 t <\/td><\/tr><\/table>","<h1>Comune di Talamello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">627.056 t <\/td><\/tr><\/table>","<h1>Comune di Poggio Torriana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3591.444 t <\/td><\/tr><\/table>","<h1>Comune di Montescudo - Monte Colombo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">NA t <\/td><\/tr><\/table>"],null,null,null,null]},{"method":"addTiles","args":["//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",null,null,{"minZoom":0,"maxZoom":18,"maxNativeZoom":null,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"continuousWorld":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":1,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false,"attribution":"© <a href=\"http://openstreetmap.org\">OpenStreetMap<\/a> contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA<\/a>"}]},{"method":"addLegend","args":[{"colors":["#FFFFCC","#A1DAB4","#41B6C4","#2C7FB8","#253494"],"labels":["0 – 20%","20 – 40%","40 – 60%","60 – 80%","80 – 100%"],"na_color":null,"na_label":"NA","opacity":1,"position":"bottomright","type":"bin","title":"Percentuale PaP su totale (2015)","extra":null,"layerId":null,"className":"info legend"}]}],"limits":{"lat":[43.73192431,45.13758885],"lng":[9.19939175,12.75564003]}},"evals":[],"jsHooks":[]}</script>
<p>Questa invece la situazione nel 2016</p>
<div id="htmlwidget-716a9adf0c18dccead58" style="width:672px;height:480px;" class="leaflet html-widget"></div>
<script type="application/json" data-for="htmlwidget-716a9adf0c18dccead58">{"x":{"options":{"crs":{"crsClass":"L.CRS.EPSG3857","code":null,"proj4def":null,"projectedBounds":null,"options":{}}},"calls":[{"method":"addPolygons","args":[[[[{"lng":[9.51130347,9.54849497,9.5310562,9.51725739,9.51614955,9.50931643,9.5078398,9.5026311,9.48891474,9.48897744,9.46335405,9.45811599,9.45488877,9.46236501,9.49951447,9.51088791,9.51130347],"lat":[45.00105721,44.97908211,44.94478621,44.93263388,44.93204478,44.92889777,44.92813917,44.92808119,44.93940219,44.94557726,44.9540379,44.96013533,44.96088639,44.98084958,45.00075381,45.01193781,45.00105721]}]],[[{"lng":[9.98821663,9.97940214,9.98740878,9.99912449,9.99391349,10.01089591,10.00947845,10.00325577,9.99463695,9.98350793,9.98433171,9.98668165,9.96510051,9.96268495,9.9551772,9.94849146,9.91911371,9.92424189,9.89260137,9.89019873,9.89507874,9.90485033,9.91498157,9.91831397,9.93326052,9.94680842,9.95586966,9.96022792,9.96630448,9.96653637,9.96933739,9.97402469,9.97563147,9.99057746,9.98821663],"lat":[44.94855966,44.9371221,44.93593178,44.92918255,44.90771329,44.87564305,44.87422426,44.87238867,44.86738692,44.85759904,44.85172257,44.84556288,44.83608805,44.83614445,44.84042049,44.83771313,44.85766755,44.86879808,44.89149133,44.90074617,44.89934871,44.90136917,44.90046926,44.89657164,44.89433499,44.90803256,44.91514965,44.92352094,44.94132958,44.94155266,44.94079076,44.94364951,44.9502072,44.95241903,44.94855966]}]],[[{"lng":[9.997304,10.03102302,10.00442041,9.98740878,9.99057746,9.97998881,9.97563147,9.97314246,9.97425758,9.92885151,9.94561733,9.997304],"lat":[45.00114174,44.98383775,44.96836653,44.93593178,44.95241903,44.94851353,44.9502072,44.94994938,44.9589148,44.96262387,44.99089698,45.00114174]}]],[[{"lng":[9.57143265,9.58223692,9.59496247,9.61186792,9.62797083,9.65901338,9.66299561,9.66368911,9.66446982,9.66947098,9.68425722,9.68359738,9.68137735,9.68055996,9.67994926,9.67995471,9.68093236,9.68067719,9.67900767,9.65943105,9.6509071,9.6514085,9.66284578,9.66559425,9.6663234,9.66789753,9.67021068,9.67015664,9.66111257,9.65584777,9.65229747,9.64672963,9.63938917,9.62771448,9.62014137,9.61326247,9.59784905,9.58503789,9.57101088,9.57680691,9.57934796,9.57406685,9.5679421,9.5434727,9.53924631,9.53254624,9.52257782,9.50187461,9.50116318,9.50302451,9.50618698,9.50615519,9.49749785,9.49830183,9.51320519,9.51381271,9.51939495,9.53068631,9.53517169,9.53966066,9.54481419,9.55043282,9.55503421,9.55919878,9.55834198,9.57143265],"lat":[44.83782725,44.83650339,44.8313696,44.83534023,44.8199582,44.8236182,44.82673689,44.82764208,44.83063524,44.83318065,44.82972622,44.82634537,44.823658,44.82191645,44.81407923,44.81346705,44.81057154,44.80392946,44.79958235,44.78257492,44.76641985,44.75706368,44.74296335,44.74030971,44.74000837,44.73921245,44.73537646,44.73288315,44.72277229,44.7194808,44.71815079,44.71703916,44.71888997,44.72646264,44.72546875,44.72218405,44.7262538,44.72309733,44.73097331,44.73599446,44.74256224,44.74499251,44.74129621,44.75850155,44.75646006,44.74778633,44.74202593,44.74633185,44.74879258,44.7507469,44.76614924,44.76639695,44.7721334,44.79067444,44.79051841,44.79059669,44.79844834,44.79852246,44.80229146,44.80909397,44.80845735,44.80488356,44.80342094,44.80388674,44.82779163,44.83782725]}]],[[{"lng":[9.47495487,9.47688957,9.47763573,9.47989254,9.4685394,9.46893451,9.45258503,9.45199472,9.45118105,9.44613728,9.44233247,9.4376896,9.4338203,9.4327003,9.41458061,9.44626723,9.40616679,9.40985596,9.40412696,9.40035283,9.39870411,9.39850832,9.39830786,9.39222728,9.3796218,9.35513748,9.34780391,9.33258079,9.32854716,9.28589944,9.32152808,9.35419431,9.36309823,9.36780556,9.36878179,9.3713794,9.37396196,9.3767442,9.37788388,9.37995024,9.3806361,9.38752212,9.39722527,9.3980627,9.39907599,9.40222798,9.41134601,9.41552174,9.42008708,9.42103947,9.42963857,9.43070359,9.44537432,9.44628586,9.44721106,9.44789634,9.44888315,9.47495487],"lat":[44.84490381,44.84321235,44.84163387,44.83151503,44.81835603,44.80955933,44.80149633,44.80139965,44.80143887,44.8032411,44.81332933,44.81145677,44.80477393,44.80380593,44.79632906,44.77744934,44.7670574,44.72762335,44.72459198,44.72663979,44.72928322,44.73019315,44.7304279,44.73512113,44.73882764,44.73986065,44.74278196,44.73504035,44.73606027,44.75942783,44.80003204,44.81186328,44.82240383,44.82536847,44.82571641,44.82641016,44.82672581,44.82661764,44.82680292,44.82748022,44.82790103,44.83988672,44.84520963,44.84553978,44.84568029,44.84584928,44.84508763,44.84684591,44.85168135,44.85212794,44.85466151,44.85491856,44.85524937,44.85529084,44.85545825,44.85569863,44.85727911,44.84490381]}],[{"lng":[9.48099204,9.48052555,9.48010248,9.48016569,9.4821116,9.48193514,9.48155359,9.48099204],"lat":[44.83014207,44.83014404,44.83032587,44.83127081,44.83090253,44.83040817,44.83016672,44.83014207]}]],[[{"lng":[9.50668711,9.52087886,9.52884409,9.53424656,9.53472338,9.53368861,9.52929976,9.52937114,9.52986079,9.53351594,9.53473271,9.53283315,9.50939575,9.50479506,9.49951447,9.46332169,9.46236501,9.46045051,9.45939059,9.45890519,9.45834272,9.45733306,9.45370398,9.449173,9.44060995,9.43286447,9.40158675,9.4182468,9.42150901,9.4220457,9.42557047,9.42545362,9.41453933,9.41873194,9.48778008,9.48840252,9.48920505,9.49068548,9.49739961,9.500302,9.50355858,9.50668711],"lat":[45.04625794,45.04216129,45.03882102,45.03704952,45.03644417,45.03575588,45.03600135,45.0314371,45.03093072,45.02955444,45.02943622,45.02308982,45.01146288,45.00852171,45.00075381,44.98152087,44.98084958,44.979354,44.97844909,44.97801896,44.97746309,44.97649494,44.97304367,44.9693348,44.96423037,44.95406751,44.9683328,44.97496141,44.97708287,44.97763001,44.98263098,45.00472392,45.00550029,45.03121997,45.03527704,45.03540941,45.03573005,45.03663288,45.04244601,45.04630408,45.04697391,45.04625794]}]],[[{"lng":[9.86608404,9.86997691,9.9007028,9.88673309,9.8724308,9.8682944,9.86583672,9.84643429,9.84484485,9.8384588,9.82643191,9.80937256,9.81319714,9.81766789,9.82153374,9.82284929,9.80895486,9.8117291,9.81174822,9.81072238,9.81136175,9.83365345,9.84894251,9.85954975,9.86608404],"lat":[45.0078655,44.99678163,44.99523987,44.97105141,44.95865791,44.95340531,44.93581617,44.93501641,44.94762192,44.95042358,44.95066429,44.94462014,44.95066026,44.95214967,44.95387731,44.95633436,44.96180778,44.96881858,44.97376949,44.98376887,44.98593379,45.00988021,45.01659097,45.00961622,45.0078655]}]],[[{"lng":[9.63366875,9.63182778,9.67689296,9.67179083,9.6611495,9.65431152,9.64480396,9.64361493,9.64312883,9.64258994,9.63355863,9.57545086,9.57158695,9.53721564,9.55299541,9.58744699,9.61896546,9.63366875],"lat":[45.12913592,45.08676767,45.07760824,45.0726364,45.07192434,45.07051445,45.06664377,45.06595734,45.06565401,45.06517095,45.0559676,45.07023691,45.0994129,45.1260537,45.13064425,45.09962499,45.13354785,45.12913592]}]],[[{"lng":[9.31473275,9.31201249,9.30950524,9.2988341,9.29584277,9.28954634,9.29228315,9.29446007,9.31473275],"lat":[44.91208192,44.90569798,44.90584883,44.90968509,44.9093508,44.90924992,44.91237952,44.92303741,44.91208192]}],[{"lng":[9.30465602,9.29128997,9.28634581,9.29960399,9.30465602],"lat":[44.93265177,44.92507098,44.93395042,44.9347356,44.93265177]}]],[[{"lng":[9.84759674,9.88446455,9.91053777,9.89755196,9.89644289,9.89561878,9.89549693,9.89702115,9.89669116,9.89217245,9.89154758,9.887952,9.87593163,9.86722589,9.85515446,9.84593661,9.84130954,9.80182827,9.79750955,9.80212211,9.80789672,9.80879775,9.80935076,9.81171288,9.81701232,9.8202497,9.83127547,9.83258242,9.84759674],"lat":[45.09650368,45.06676743,45.05844292,45.04346775,45.04155908,45.04000823,45.03952309,45.033876,45.03306843,45.02739667,45.02721251,45.02864481,45.03286947,45.01962223,45.02465527,45.02189736,45.01969009,45.03349955,45.03527145,45.04828273,45.05076253,45.05072015,45.05031114,45.04672968,45.04703394,45.04787491,45.05776466,45.09092655,45.09650368]}]],[[{"lng":[9.81688337,9.82284929,9.81319714,9.80937256,9.84484485,9.84239226,9.84643429,9.84778366,9.84527989,9.85014994,9.85069832,9.85043699,9.84486068,9.83475212,9.83459508,9.83605341,9.83678126,9.83570122,9.83127393,9.81985338,9.81585697,9.79698343,9.79054252,9.7857624,9.78272589,9.78193422,9.77685429,9.76578624,9.76499654,9.76359023,9.76127899,9.75563094,9.7503578,9.77001533,9.76795178,9.764038,9.76063632,9.75394379,9.73717654,9.73207677,9.75258092,9.75776565,9.75903696,9.76065344,9.76216793,9.76328652,9.76644084,9.76631206,9.76273858,9.76299154,9.78438619,9.79357152,9.7944576,9.7957968,9.79616349,9.80052849,9.80117635,9.80895486,9.81688337],"lat":[44.95940183,44.95633436,44.95066026,44.94462014,44.94762192,44.93853906,44.93501641,44.93482634,44.92803045,44.92143186,44.91480232,44.91426414,44.90894034,44.90611604,44.9048389,44.90268575,44.89776982,44.89534268,44.88884853,44.87409574,44.86811998,44.84431672,44.84059863,44.83893022,44.83986928,44.8402708,44.84639989,44.84576348,44.84537269,44.84428383,44.84173367,44.8307166,44.83185861,44.85451208,44.86684082,44.86762325,44.86404512,44.87012989,44.86962722,44.87476419,44.88794492,44.89414904,44.89644512,44.90281678,44.90815387,44.91131511,44.91607405,44.9174072,44.92447968,44.92635939,44.93976241,44.94317369,44.94308652,44.94277112,44.94270555,44.94213492,44.94223841,44.96180778,44.95940183]}]],[[{"lng":[9.87835114,9.89019873,9.92424189,9.90901028,9.92022574,9.91487473,9.90823856,9.86381862,9.8480273,9.83149518,9.81585697,9.81985338,9.83570122,9.83678126,9.83650521,9.83605341,9.8350475,9.83469028,9.83459508,9.83456685,9.83467911,9.83475212,9.83492596,9.83720096,9.84486068,9.85212177,9.85937181,9.87835114],"lat":[44.90291737,44.90074617,44.86879808,44.85061261,44.84092353,44.83699659,44.83497008,44.83070565,44.82098469,44.85470291,44.86811998,44.87409574,44.89534268,44.89776982,44.90051296,44.90268575,44.90366083,44.90446912,44.9048389,44.90551426,44.90599505,44.90611604,44.90631281,44.90792552,44.90894034,44.90310711,44.90938118,44.90291737]}]],[[{"lng":[9.4815741,9.48352062,9.47969833,9.48369378,9.48263648,9.47520873,9.4739373,9.47351662,9.47189918,9.46027722,9.4583928,9.45675613,9.45095242,9.44324999,9.41873194,9.41589365,9.40152442,9.36944768,9.37081994,9.41077773,9.4815741],"lat":[45.0937788,45.08771205,45.07882584,45.06635957,45.06297317,45.06223732,45.06271804,45.06269349,45.06207006,45.04761564,45.03913479,45.03768279,45.0401812,45.04074508,45.03121997,45.0188361,45.02559387,45.02372624,45.04815367,45.08275458,45.0937788]}]],[[{"lng":[9.97833635,10.02738823,10.02164955,10.03967154,10.00770094,9.99407801,9.99037825,9.98810347,9.96888497,9.96296699,9.95292467,9.95334767,9.95759279,9.96173162,9.96295819,9.96291948,9.96127346,9.96166795,9.9696506,9.97644994,9.96641607,9.97833635],"lat":[45.13373511,45.09764869,45.07588899,45.06225521,45.06365803,45.05302032,45.05560027,45.05628937,45.05544229,45.05621249,45.06101365,45.07041696,45.07435121,45.07645885,45.07914003,45.07986048,45.08620654,45.08949716,45.10410222,45.11078246,45.12747244,45.13373511]}]],[[{"lng":[9.36631689,9.38624462,9.38617638,9.39805704,9.40635433,9.40250606,9.40273962,9.39337447,9.38288932,9.37068207,9.37554509,9.33121292,9.31483315,9.3057747,9.29850587,9.36631689],"lat":[44.69001558,44.67118907,44.66170523,44.65802746,44.63797688,44.62300594,44.6166764,44.61825746,44.61839211,44.61717655,44.64041848,44.66425898,44.66381018,44.66564426,44.68102155,44.69001558]}]],[[{"lng":[9.50457469,9.50985614,9.51013108,9.51092831,9.51624284,9.49830183,9.49749785,9.50618698,9.50302451,9.4681667,9.46706255,9.46311933,9.46372169,9.47217792,9.46904612,9.45538968,9.44734537,9.42368751,9.41751358,9.40089891,9.40985596,9.4000628,9.40037633,9.40616679,9.44626723,9.43940376,9.41458061,9.4327003,9.4338203,9.43546501,9.4376896,9.44233247,9.44613728,9.45199472,9.4685394,9.47365422,9.47783901,9.47920544,9.49837297,9.50457469],"lat":[44.81933678,44.80499089,44.80318924,44.80182635,44.79517685,44.79067444,44.7721334,44.76614924,44.7507469,44.74568281,44.74503917,44.73687216,44.71425598,44.70151004,44.69976751,44.69662695,44.69276072,44.70910915,44.71076131,44.71428672,44.72762335,44.73585915,44.74651673,44.7670574,44.77744934,44.78571297,44.79632906,44.80380593,44.80477393,44.80825151,44.81145677,44.81332933,44.8032411,44.80139965,44.81835603,44.81897409,44.81723726,44.81729455,44.8209664,44.81933678]}]],[[{"lng":[9.35454606,9.37726204,9.3796218,9.39222728,9.40089891,9.44734537,9.41710252,9.39322099,9.38952545,9.38647141,9.38624462,9.37191476,9.36735282,9.36631689,9.36633188,9.36317925,9.30943511,9.31258182,9.32591046,9.32957528,9.33258079,9.33485793,9.34780391,9.35454606],"lat":[44.74022259,44.73915956,44.73882764,44.73512113,44.71428672,44.69276072,44.68340471,44.68231912,44.6799311,44.67300672,44.67118907,44.67931169,44.68619526,44.69001558,44.69042991,44.69278931,44.70234602,44.71710124,44.72309553,44.72806327,44.73504035,44.7386166,44.74278196,44.74022259]}],[{"lng":[9.29534259,9.30055988,9.3026008,9.28986246,9.29534259],"lat":[44.70494899,44.70436527,44.70326456,44.70082197,44.70494899]}],[{"lng":[9.30022428,9.29893978,9.30420301,9.30412176,9.30022428],"lat":[44.69246735,44.69372283,44.69655519,44.69369829,44.69246735]}]],[[{"lng":[9.88749854,9.88393778,9.8814558,9.88125811,9.90762024,9.9326514,9.93429038,9.9317396,9.92893764,9.94794766,9.97542819,9.98922918,9.9908842,9.997304,9.94561733,9.94848991,9.94193825,9.94079792,9.93848073,9.92885151,9.92525028,9.92490939,9.92548507,9.9185732,9.91542398,9.91312831,9.91066704,9.90813078,9.90175401,9.90287844,9.90716962,9.91193187,9.89523985,9.9007028,9.86997691,9.84894251,9.83365345,9.84593661,9.85515446,9.86722589,9.87134149,9.87593163,9.88749854],"lat":[45.02558773,45.01938608,45.01809999,45.01762442,45.00968537,45.0233825,45.02191982,45.01803387,45.01193543,45.005766,45.01001749,45.01705521,45.00410522,45.00114174,44.99089698,44.98817352,44.9797553,44.97982771,44.97773134,44.96262387,44.96103275,44.96021216,44.95877167,44.96086668,44.97627157,44.97697368,44.96890964,44.96810166,44.97275665,44.97359845,44.97469869,44.97946858,44.98419519,44.99523987,44.99678163,45.01659097,45.00988021,45.02189736,45.02465527,45.01962223,45.0215173,45.03286947,45.02558773]}]],[[{"lng":[9.54369919,9.5679421,9.57934796,9.57101088,9.58503789,9.61326247,9.62014137,9.62709791,9.62771448,9.62864559,9.63756781,9.63938917,9.64367757,9.64672963,9.65229747,9.65447955,9.66182134,9.66265411,9.6645641,9.66570419,9.66762784,9.66988105,9.67521222,9.65355534,9.63503128,9.6248772,9.63179549,9.60217492,9.56494977,9.52727735,9.51075193,9.51101594,9.51018285,9.50948551,9.49968836,9.49201211,9.46904612,9.46372169,9.46434487,9.46977193,9.46706255,9.48220367,9.50150325,9.50116318,9.50106994,9.50187461,9.50311427,9.51002494,9.52189399,9.52257782,9.53254624,9.53812388,9.53889918,9.53924631,9.54082718,9.54300491,9.5434727,9.54369919],"lat":[44.75840145,44.74129621,44.74256224,44.73097331,44.72309733,44.72218405,44.72546875,44.72652004,44.72646264,44.7260074,44.72089865,44.71888997,44.71734448,44.71703916,44.71815079,44.71123354,44.70630298,44.70627115,44.70550385,44.70475002,44.70298333,44.70025144,44.68761677,44.67172757,44.66328882,44.65626895,44.64061171,44.6294917,44.69601149,44.69622764,44.6900101,44.68001209,44.67837261,44.67798863,44.67727571,44.67817326,44.69976751,44.71425598,44.71640499,44.72552012,44.74503917,44.74297773,44.74940325,44.74879258,44.74823485,44.74633185,44.74507509,44.74231673,44.74183101,44.74202593,44.74778633,44.75259439,44.75581354,44.75646006,44.75798297,44.75846777,44.75850155,44.75840145]}]],[[{"lng":[9.46904612,9.49968836,9.51018285,9.52727735,9.53551969,9.56494977,9.56538483,9.58001449,9.58917884,9.59290835,9.5968424,9.60228557,9.60176595,9.58907722,9.58497462,9.58094846,9.57616241,9.56328414,9.55869394,9.55255787,9.55340732,9.55236407,9.54909803,9.54598661,9.54141006,9.53914212,9.53229683,9.51474364,9.49782023,9.42307656,9.42130623,9.39486331,9.3985851,9.40273962,9.40387965,9.40250606,9.40635433,9.38617638,9.38647141,9.39322099,9.40061547,9.41710252,9.43955224,9.44395461,9.45538968,9.46904612],"lat":[44.69976751,44.67727571,44.67837261,44.69622764,44.69766567,44.69601149,44.68275789,44.64870952,44.64568743,44.63562583,44.63196835,44.62922104,44.62895371,44.62458165,44.62275723,44.61466658,44.60990151,44.60745407,44.6045058,44.59794583,44.59053268,44.58945742,44.58778969,44.58781363,44.58878966,44.58875539,44.58549258,44.56331431,44.55714606,44.57461223,44.5926043,44.61115837,44.61542162,44.6166764,44.61749159,44.62300594,44.63797688,44.66170523,44.67300672,44.68231912,44.68417492,44.68340471,44.68859589,44.69000123,44.69662695,44.69976751]}]],[[{"lng":[9.90516656,9.90813078,9.91312831,9.91542398,9.92548507,9.97425758,9.97314246,9.97563147,9.97501147,9.97402469,9.97103684,9.96933739,9.96852496,9.96653637,9.96630448,9.96553114,9.96022792,9.95629875,9.95586966,9.9554415,9.93326052,9.93059028,9.91831397,9.91498157,9.85937181,9.85212177,9.84581737,9.84486068,9.85069832,9.85014994,9.84527989,9.84778366,9.86583672,9.89445632,9.91193187,9.90790122,9.90716962,9.90516656],"lat":[44.97394041,44.96810166,44.97697368,44.97627157,44.95877167,44.9589148,44.94994938,44.9502072,44.94578355,44.94364951,44.9416045,44.94079076,44.94071665,44.94155266,44.94132958,44.94056195,44.92352094,44.91581221,44.91514965,44.9145411,44.89433499,44.89367264,44.89657164,44.90046926,44.90938118,44.90310711,44.90507139,44.90894034,44.91480232,44.92143186,44.92803045,44.93482634,44.93581617,44.98367419,44.97946858,44.97525099,44.97469869,44.97394041]}]],[[{"lng":[9.59136813,9.59298537,9.5976321,9.54095712,9.5324975,9.52062392,9.51986019,9.51643243,9.51624914,9.51500318,9.50227733,9.50195602,9.50273574,9.50328558,9.50560252,9.506174,9.49596505,9.49846352,9.50941679,9.50931643,9.5310562,9.53304902,9.54849497,9.55971635,9.56871022,9.57584637,9.59136813],"lat":[44.98820301,44.93578554,44.92801963,44.91117138,44.90186706,44.89986935,44.89944974,44.89430714,44.8851439,44.88316006,44.88747471,44.88838534,44.88921909,44.88982881,44.89266322,44.89429005,44.90444411,44.9092043,44.91740178,44.92889777,44.94478621,44.95467005,44.97908211,44.97929712,44.98532055,44.98732822,44.98820301]}]],[[{"lng":[9.59973809,9.62113313,9.61502343,9.63104726,9.66592648,9.66980065,9.67325907,9.6641015,9.63122603,9.62751525,9.60699387,9.59415449,9.59973809],"lat":[45.03026942,45.02981057,45.0113176,45.00083529,44.99661009,45.00445047,45.00397105,44.96583869,44.97086815,44.97015045,44.95662347,44.95697905,45.03026942]}]],[[{"lng":[9.60272934,9.59973809,9.597898,9.59031942,9.59136813,9.55971635,9.55540404,9.55053817,9.54849497,9.54361489,9.53022486,9.51135663,9.51088791,9.54744182,9.55001675,9.56761297,9.57785261,9.60510266,9.6155048,9.60272934],"lat":[45.03242376,45.03026942,45.02685003,45.00077507,44.98820301,44.97929712,44.97874266,44.97895976,44.97908211,44.9793935,44.97994255,44.99863414,45.01193781,45.02749464,45.04038185,45.04336534,45.03216977,45.04320436,45.04230261,45.03242376]}]],[[{"lng":[9.73345731,9.73717654,9.75257014,9.75394379,9.76063632,9.764038,9.76757447,9.76795178,9.76927249,9.77069149,9.77001533,9.76289297,9.75236561,9.73972904,9.734822,9.70697425,9.7020077,9.70082856,9.68922688,9.68879173,9.67390067,9.66721954,9.6663234,9.66559425,9.6509071,9.67900767,9.68067719,9.68093236,9.67994926,9.68055996,9.6828611,9.68359738,9.68435158,9.68460181,9.68425722,9.68374435,9.68404563,9.68639919,9.71396246,9.71753088,9.71908475,9.73207677,9.73345731],"lat":[44.87182065,44.86962722,44.87060705,44.87012989,44.86404512,44.86762325,44.8670234,44.86684082,44.86335712,44.85586684,44.85451208,44.84706115,44.83935317,44.80103261,44.7969593,44.7880699,44.78571495,44.78476796,44.77115523,44.76537842,44.7475168,44.74075495,44.74000837,44.74030971,44.76641985,44.79958235,44.80392946,44.81057154,44.81407923,44.82191645,44.82505346,44.82634537,44.82807825,44.82891395,44.82972622,44.8302154,44.83215806,44.8375272,44.86575079,44.86769087,44.86845527,44.87476419,44.87182065]}]],[[{"lng":[9.82483615,9.83149518,9.83060839,9.83093003,9.84128318,9.8480273,9.8401081,9.80158783,9.78441995,9.7841356,9.7838721,9.78303749,9.78247962,9.77964649,9.77612175,9.77348532,9.76313087,9.7619278,9.76056053,9.75414339,9.73761572,9.73160438,9.73059641,9.72171335,9.72045198,9.71549177,9.71134172,9.71842938,9.6973972,9.7020077,9.70697425,9.734822,9.73972904,9.76499654,9.77685429,9.7808149,9.78193422,9.78272589,9.79054252,9.81585697,9.82467993,9.82483615],"lat":[44.8551105,44.85470291,44.8465585,44.84499114,44.82603075,44.82098469,44.81305831,44.79857166,44.79779066,44.79733351,44.79187999,44.78812282,44.78706439,44.78319481,44.77788563,44.77520521,44.77088067,44.77044075,44.77003392,44.76850548,44.76615378,44.76343777,44.76366927,44.77077449,44.78316049,44.78518496,44.78199385,44.76887773,44.77693905,44.78571495,44.7880699,44.7969593,44.80103261,44.84537269,44.84639989,44.84451844,44.8402708,44.83986928,44.84059863,44.86811998,44.86012578,44.8551105]}]],[[{"lng":[9.91740731,9.96641607,9.97644994,9.96166795,9.96127346,9.96295819,9.96173162,9.95759279,9.95373697,9.95334767,9.95279523,9.95068084,9.95292467,9.95373486,9.95468802,9.96296699,9.9869864,9.98810347,9.99037825,9.96889912,9.96335042,9.9540591,9.95428751,9.94528809,9.94263142,9.94195508,9.93841282,9.93644524,9.93571695,9.93547691,9.93195799,9.88446455,9.90083231,9.87571294,9.91972011,9.91740731],"lat":[45.09962939,45.12747244,45.11078246,45.08949716,45.08620654,45.07914003,45.07645885,45.07435121,45.0709088,45.07041696,45.06927834,45.06389107,45.06101365,45.06008871,45.05936061,45.05621249,45.05640349,45.05628937,45.05560027,45.04123735,45.04198643,45.0413983,45.03833579,45.03769951,45.03827957,45.03884325,45.04428251,45.05520881,45.05727619,45.05813333,45.06277101,45.06676743,45.09469338,45.12250596,45.13758885,45.09962939]}]],[[{"lng":[10.17550401,10.18072316,10.18302229,10.18716251,10.18756938,10.1827518,10.20825719,10.21244203,10.2114106,10.22014631,10.23845548,10.24558612,10.2399881,10.24228456,10.2229968,10.17545583,10.17442734,10.16829898,10.16797131,10.16604536,10.1683807,10.15905978,10.10491279,10.10603066,10.10551324,10.10274895,10.10225341,10.12621887,10.13804579,10.149435,10.15984714,10.17559377,10.17550401],"lat":[44.91777194,44.91526057,44.91740623,44.91727326,44.91672891,44.90422112,44.89912903,44.89395351,44.89127285,44.88996457,44.89184632,44.89049108,44.87690493,44.87065956,44.86432327,44.86567776,44.87174672,44.87165205,44.87113779,44.86478401,44.85883679,44.838371,44.85449941,44.85736024,44.86140719,44.86843751,44.87736912,44.9008228,44.90395528,44.91866748,44.91791405,44.92279412,44.91777194]}]],[[{"lng":[10.17442734,10.24228456,10.24578524,10.22378613,10.18369354,10.17267556,10.15905978,10.16203701,10.1683807,10.16604536,10.16797131,10.17442734],"lat":[44.87174672,44.87065956,44.86393269,44.82270715,44.83156478,44.83465798,44.838371,44.85304117,44.85883679,44.86478401,44.87113779,44.87174672]}]],[[{"lng":[10.17700427,10.18654406,10.16605529,10.16617972,10.16984632,10.16977733,10.16649214,10.16347191,10.16203434,10.12743429,10.1088937,10.10850466,10.10773538,10.10719224,10.09140684,10.07068704,10.04504759,10.01871842,10.03699716,10.04657616,10.0708033,10.08064328,10.08809219,10.08882108,10.08950221,10.09513175,10.11714306,10.12097093,10.1222075,10.15020862,10.17700427],"lat":[44.70914994,44.70218898,44.67814126,44.67616847,44.67155,44.65826647,44.65475315,44.65243514,44.65119316,44.65259329,44.63407684,44.63371603,44.63349843,44.63344518,44.63395723,44.64352489,44.62154444,44.62963246,44.63947863,44.65399312,44.6738258,44.67989071,44.68215158,44.68266677,44.68332645,44.69747827,44.71057048,44.71201833,44.71133102,44.68965391,44.70914994]}]],[[{"lng":[10.29339209,10.29322782,10.30889617,10.27820557,10.27513613,10.27916219,10.2639102,10.26312281,10.25268451,10.24533801,10.24124685,10.23908791,10.22948078,10.2147643,10.19275251,10.18861095,10.18014753,10.17960931,10.17364657,10.17362533,10.16689854,10.17101493,10.19441187,10.21126966,10.21033567,10.20977904,10.20296955,10.19758677,10.23867623,10.26263904,10.27227722,10.29339209],"lat":[44.69130871,44.67428716,44.66259045,44.64881757,44.6409298,44.61893239,44.60398261,44.60308208,44.59026053,44.57701722,44.57231743,44.57088248,44.56377532,44.5596296,44.55446913,44.55632181,44.55733685,44.55749545,44.56086081,44.56602849,44.57214261,44.59737494,44.60628362,44.61930812,44.62296401,44.62347404,44.62827226,44.63701616,44.65235903,44.67282903,44.67337921,44.69130871]}]],[[{"lng":[10.33566753,10.34334948,10.3438819,10.32559575,10.32287976,10.33561649,10.34435066,10.34060526,10.33834994,10.31145049,10.30995238,10.30606143,10.29442611,10.28795098,10.28191891,10.27955842,10.2643384,10.23908791,10.24533801,10.26312281,10.27446728,10.27916219,10.27925516,10.27513613,10.27820557,10.30722168,10.30889617,10.32116695,10.33566753],"lat":[44.66355395,44.656451,44.63708061,44.62375473,44.61951007,44.61771437,44.61222843,44.60534959,44.60371959,44.59619955,44.59401114,44.58370288,44.57928009,44.57802995,44.57751267,44.57781823,44.56645554,44.57088248,44.57701722,44.60308208,44.61332685,44.61893239,44.62965773,44.6409298,44.64881757,44.66154703,44.66259045,44.67123062,44.66355395]}]],[[{"lng":[10.15081171,10.16020277,10.18100409,10.18266581,10.17323246,10.17064286,10.16970809,10.16902228,10.16145843,10.15519901,10.14096351,10.10680908,10.09576043,10.09513175,10.09129901,10.09116961,10.02182372,10.01838589,10.00576832,9.98649598,9.98322481,9.98460259,9.9919232,9.99616616,10.00883434,10.03414078,10.0389517,10.04128853,10.04222129,10.04871141,10.06813047,10.07148553,10.07701198,10.07886485,10.07972434,10.07965699,10.07940046,10.07840079,10.07048605,10.06949021,10.06975816,10.07266017,10.09359388,10.09747284,10.11448994,10.13974154,10.14689718,10.15081171],"lat":[44.78183996,44.77866618,44.77046798,44.77015371,44.75550539,44.74300986,44.74112897,44.74031678,44.73474056,44.73054599,44.72397342,44.70489162,44.69802138,44.69747827,44.69367098,44.69148466,44.71098607,44.71723736,44.72500113,44.72558335,44.74864835,44.75018485,44.75718826,44.76073421,44.76697855,44.77166739,44.77426136,44.77067521,44.7698385,44.76674533,44.76930202,44.76895551,44.76640991,44.7634847,44.76078491,44.76056049,44.76035588,44.7602753,44.75999868,44.75944086,44.75889822,44.75799778,44.75722308,44.75723087,44.75846141,44.78003352,44.78267152,44.78183996]}]],[[{"lng":[10.44165634,10.50431523,10.49604931,10.48979751,10.47839704,10.47084819,10.46768488,10.44288758,10.41514343,10.41087276,10.40451512,10.39285882,10.38944832,10.38725383,10.40977123,10.41348703,10.40721232,10.42319101,10.41293173,10.41366834,10.42516317,10.44165634],"lat":[44.94083646,44.9224276,44.90838229,44.90469219,44.9071494,44.903241,44.90337172,44.91130347,44.88133194,44.89050384,44.89126806,44.89234536,44.892711,44.89308876,44.89828619,44.90468567,44.91365169,44.93141803,44.94972936,44.95391514,44.96020821,44.94083646]}]],[[{"lng":[10.13295932,10.13659816,10.14678007,10.14987698,10.15385797,10.166665,10.16966848,10.17660615,10.1465145,10.15994194,10.14203472,10.09827285,10.05317828,10.06499919,10.07095713,10.08699629,10.0896528,10.09639667,10.10058707,10.10109299,10.10431967,10.11287723,10.11820699,10.12902711,10.13295932],"lat":[44.45308742,44.44123073,44.43895029,44.43611932,44.42970524,44.42693732,44.42705965,44.41667126,44.39270586,44.38078621,44.35386763,44.34629331,44.37303332,44.41434551,44.42636247,44.42831758,44.43005679,44.43527685,44.43899966,44.43917485,44.43840547,44.43457727,44.43539847,44.45309937,44.45308742]}]],[[{"lng":[10.40653779,10.42611124,10.42503252,10.42521596,10.42565282,10.43521631,10.43991014,10.44146491,10.44590389,10.44707085,10.44733705,10.4470557,10.4465913,10.44579423,10.42851981,10.41896062,10.41539095,10.36745315,10.35877301,10.35401282,10.35438867,10.35276212,10.33113044,10.3344007,10.33362594,10.33904509,10.37165819,10.38653888,10.40653779],"lat":[44.7451277,44.74394896,44.74014548,44.739387,44.73866138,44.73568784,44.73194683,44.73047785,44.72667679,44.72334016,44.71933078,44.71766893,44.71676559,44.71568641,44.69401926,44.67623284,44.66685726,44.6695694,44.67277883,44.67856986,44.6827875,44.68392307,44.68101747,44.69488505,44.699038,44.7194818,44.70449297,44.7382428,44.7451277]}]],[[{"lng":[10.34106318,10.34075147,10.36176783,10.39911447,10.39913187,10.39872478,10.40270676,10.40160063,10.39695556,10.36332812,10.34194066,10.33846374,10.338144,10.34003189,10.33990572,10.33515431,10.33212414,10.33240608,10.33217288,10.3316066,10.32400949,10.30313379,10.2705655,10.27708178,10.26851609,10.23274645,10.23479937,10.24930463,10.25548213,10.25568171,10.25600517,10.25602568,10.25517921,10.25195457,10.24166097,10.24010964,10.23762451,10.22948078,10.26355234,10.2643384,10.27341103,10.27955842,10.30606143,10.31145049,10.34106318],"lat":[44.59831329,44.59349163,44.58609498,44.58793913,44.58548124,44.58373973,44.57017817,44.56292673,44.55766317,44.54292736,44.52510357,44.51615081,44.51207639,44.50606753,44.50550185,44.4958887,44.48765068,44.48622498,44.48537245,44.48480289,44.47903951,44.47014435,44.49008069,44.50037901,44.50972015,44.50536752,44.5183631,44.52596554,44.53472031,44.53522224,44.53738831,44.5377572,44.53995412,44.53922429,44.54102017,44.54913931,44.55388348,44.56377532,44.56621217,44.56645554,44.57482609,44.57781823,44.58370288,44.59619955,44.59831329]}]],[[{"lng":[10.13084037,10.15905978,10.18369354,10.22378613,10.22048545,10.21353331,10.19210791,10.18627549,10.18216355,10.16020277,10.14689718,10.13974154,10.12753165,10.11448994,10.09359388,10.06975816,10.07048605,10.07648475,10.07840079,10.07940046,10.07972434,10.07148553,10.06813047,10.0599446,10.04871141,10.04128853,10.04876975,10.05263269,10.0642763,10.06645099,10.06661241,10.06575282,10.08511444,10.09205502,10.09470007,10.09400843,10.094839,10.09963032,10.10499846,10.10491279,10.13084037],"lat":[44.84644347,44.838371,44.83156478,44.82270715,44.81194892,44.80547846,44.78192041,44.77733602,44.77031196,44.77866618,44.78267152,44.78003352,44.76703852,44.75846141,44.75722308,44.75889822,44.75999868,44.76051843,44.7602753,44.76035588,44.76078491,44.76895551,44.76930202,44.76670463,44.76674533,44.77067521,44.77974399,44.78004198,44.77894335,44.77967024,44.78019987,44.78362873,44.80031646,44.80495842,44.80775077,44.84072317,44.84248862,44.84426101,44.847729,44.85449941,44.84644347]}]],[[{"lng":[10.2705655,10.2874748,10.30313379,10.28427512,10.25464862,10.23607579,10.230591,10.22981911,10.22573912,10.22381127,10.22315555,10.21397231,10.20525275,10.16694867,10.15994194,10.1465145,10.1766565,10.17660615,10.16966848,10.15385797,10.13659816,10.14099201,10.14905848,10.18933979,10.19505884,10.21607691,10.22510567,10.22983583,10.24407441,10.2705655],"lat":[44.49008069,44.4830403,44.47014435,44.4594624,44.45170732,44.43577703,44.42892218,44.4256265,44.41434493,44.4104404,44.40967319,44.4016327,44.39220011,44.38443241,44.38078621,44.39270586,44.41604954,44.41667126,44.42705965,44.42970524,44.44123073,44.461542,44.46783501,44.46401061,44.46643563,44.47199346,44.47150083,44.47051372,44.48206294,44.49008069]}]],[[{"lng":[10.29159996,10.29684848,10.31295284,10.32543358,10.34192922,10.35468876,10.36130695,10.36446475,10.37897472,10.39405617,10.40651542,10.41614404,10.39570745,10.38442173,10.41580504,10.44207566,10.43749401,10.43728215,10.43770836,10.43733454,10.43608556,10.42883025,10.42484092,10.42351513,10.42728629,10.42681686,10.42743559,10.42791023,10.42969763,10.42611124,10.40244727,10.38653888,10.38084637,10.37165819,10.35881981,10.33904509,10.33362594,10.33333936,10.3344007,10.33113044,10.30889617,10.30589154,10.29322782,10.29715875,10.29339209,10.29345278,10.29795413,10.28517347,10.25826177,10.25425275,10.24225625,10.24478639,10.28318844,10.26008272,10.2384203,10.23259548,10.24283663,10.21353331,10.22011586,10.23901528,10.24578524,10.2399881,10.27417876,10.28359531,10.29159996],"lat":[44.90097133,44.88541036,44.8841911,44.88124728,44.878417,44.87560173,44.87402129,44.87033616,44.87414975,44.880052,44.88007023,44.88139146,44.85370142,44.82475914,44.83240651,44.8196098,44.80818986,44.8067882,44.80103946,44.80024297,44.79984459,44.79993561,44.79967039,44.79820157,44.7737226,44.76697682,44.75977632,44.75750183,44.75313139,44.74394896,44.7484461,44.7382428,44.72938155,44.70449297,44.70769826,44.7194818,44.699038,44.69750817,44.69488505,44.68101747,44.66259045,44.66641903,44.67428716,44.68962244,44.69130871,44.69176714,44.70416689,44.70943312,44.71306368,44.72209207,44.72381662,44.72933446,44.7652514,44.77556305,44.77363164,44.77488295,44.79922186,44.80547846,44.8112147,44.84100624,44.86393269,44.87690493,44.87893207,44.88789164,44.90097133]}]],[[{"lng":[9.90110351,9.90130918,9.90211894,9.90641503,9.92340608,9.92367592,9.9417944,9.97828034,9.98460259,9.98649598,9.96961993,9.96921857,9.96802409,9.96730419,9.96958453,9.96709661,9.96670113,9.95112371,9.94044636,9.89990441,9.87624159,9.87363433,9.86292349,9.84708137,9.84574639,9.84513902,9.85503883,9.85943483,9.85015228,9.84411554,9.83203383,9.84978305,9.85524753,9.86500696,9.88066133,9.87252041,9.87863506,9.88216705,9.88252339,9.8918396,9.89903639,9.90032548,9.90110351],"lat":[44.80411342,44.80354452,44.80195374,44.79853492,44.80000118,44.79076276,44.76138462,44.75358803,44.75018485,44.72558335,44.72903172,44.72844098,44.72572343,44.72344294,44.71708599,44.70795175,44.70770303,44.70463802,44.70552765,44.71637803,44.69823335,44.70069296,44.70190868,44.70704158,44.70812274,44.70889244,44.72964105,44.73313694,44.75037372,44.75223695,44.75194752,44.76655349,44.76778199,44.7621091,44.76868712,44.78277504,44.79756374,44.80366699,44.80381728,44.80444707,44.80701027,44.8077743,44.80411342]}]],[[{"lng":[10.22901463,10.26511448,10.25562628,10.25374202,10.25179823,10.23739026,10.23480907,10.24431666,10.24379984,10.2299982,10.2330611,10.23441476,10.23676048,10.24015553,10.24437422,10.24476492,10.24218372,10.23923708,10.23452911,10.23326899,10.23166324,10.17584564,10.18210603,10.16803355,10.18094596,10.22901463],"lat":[45.02790937,45.004778,45.0008529,44.99415821,44.9911189,44.97947449,44.9827161,44.99829415,45.00020818,44.99381332,44.9775049,44.97557287,44.97436823,44.97301714,44.96988358,44.96449618,44.96416422,44.96805806,44.97085463,44.97122833,44.9714527,44.9624541,44.97710756,44.99173641,45.03046292,45.02790937]}]],[[{"lng":[10.19062188,10.22718837,10.23908694,10.24478639,10.24225625,10.24100319,10.24043254,10.22784245,10.18539961,10.18327996,10.18212314,10.18147228,10.17290751,10.16352331,10.16347191,10.16977733,10.16984632,10.16971873,10.16617972,10.16605529,10.17460832,10.18654406,10.18354836,10.1694046,10.17413788,10.18092115,10.18938958,10.19062188],"lat":[44.73602061,44.72614897,44.73151197,44.72933446,44.72381662,44.7224979,44.72179292,44.69785686,44.65940174,44.65681302,44.6499652,44.64830649,44.63983799,44.6519432,44.65243514,44.65826647,44.67155,44.67209022,44.67616847,44.67814126,44.691179,44.70218898,44.70876722,44.71165864,44.71541323,44.72359419,44.73631651,44.73602061]}]],[[{"lng":[10.01546121,10.01578716,10.02076368,10.05148394,10.0413598,10.02482577,10.03414078,9.98460259,9.97828034,9.95200628,9.9417944,9.93725869,9.93228568,9.92367592,9.92275572,9.92340608,9.91188129,9.90641503,9.90130918,9.93691155,9.94849146,9.9551772,9.96510051,10.01546121],"lat":[44.85375453,44.84565877,44.84299478,44.83663062,44.7922168,44.78304013,44.77166739,44.75018485,44.75358803,44.75864879,44.76138462,44.77938135,44.78609267,44.79076276,44.7933088,44.80000118,44.79960765,44.79853492,44.80354452,44.83681792,44.83771313,44.84042049,44.83608805,44.85375453]}]],[[{"lng":[10.23289158,10.23440673,10.23256703,10.23261597,10.23310224,10.24442392,10.25915999,10.25924482,10.25921465,10.25428207,10.25118279,10.24443532,10.24558612,10.23845548,10.22578323,10.22014631,10.2114106,10.2102433,10.21244203,10.20825719,10.1995397,10.1827518,10.18716251,10.17559377,10.15984714,10.15458492,10.15630243,10.16172096,10.17678161,10.18423781,10.20082733,10.20284571,10.20319144,10.20306742,10.23289158],"lat":[44.96485906,44.95628186,44.94437417,44.9436985,44.94273004,44.9434444,44.93624333,44.93548624,44.9346854,44.91768096,44.90914507,44.90172014,44.89049108,44.89184632,44.89183063,44.88996457,44.89127285,44.89177134,44.89395351,44.89912903,44.90200256,44.90422112,44.91727326,44.92279412,44.91791405,44.91959674,44.91994843,44.92162182,44.93070363,44.94573181,44.95895342,44.96149772,44.96408663,44.96482611,44.96485906]}]],[[{"lng":[10.09048069,10.08882108,10.03699716,10.02004698,10.01871842,10.01297468,10.0058629,9.9835358,9.97764833,9.95955219,9.9478188,9.92631507,9.92578164,9.92748957,9.92742088,9.915264,9.91142676,9.90356431,9.93566693,9.92443076,9.91097462,9.90122204,9.88817029,9.88804777,9.88795415,9.90885266,9.94707611,9.952011,9.95936443,9.96350403,9.97196287,9.97552689,9.97780256,9.99042018,9.99158543,9.98798116,10.00914698,10.01162819,10.01621242,10.03927635,10.04494545,10.05329354,10.09048069],"lat":[44.68974478,44.68266677,44.63947863,44.62990868,44.62963246,44.62991763,44.62691066,44.61338541,44.60652208,44.59504438,44.60568426,44.59043046,44.58777905,44.58664888,44.58628935,44.59093368,44.60013789,44.61305589,44.61868498,44.65019494,44.66042176,44.6543145,44.65505591,44.65529094,44.65576879,44.68066698,44.6785829,44.67122592,44.66857774,44.66868692,44.66304277,44.65818712,44.65775355,44.66099369,44.67163338,44.68299858,44.6781863,44.66560605,44.66228849,44.66119868,44.66712452,44.68227981,44.68974478]}]],[[{"lng":[10.17688183,10.20319144,10.20082733,10.18423781,10.17678161,10.16172096,10.15630243,10.149435,10.14907565,10.13804579,10.12621887,10.10829925,10.10180727,10.10915444,10.10830146,10.10029657,10.09700261,10.0933643,10.09055917,10.08195274,10.07437836,10.07402957,10.08444729,10.13564019,10.14585635,10.18186879,10.17645421,10.17575858,10.17584564,10.17688183],"lat":[44.9622814,44.96408663,44.95895342,44.94573181,44.93070363,44.92162182,44.91994843,44.91866748,44.91843705,44.90395528,44.9008228,44.8839033,44.89603784,44.9053378,44.90709248,44.91347077,44.91377303,44.91297974,44.91336664,44.9151589,44.91729186,44.91761022,44.93259907,44.95645004,44.98526371,44.97729006,44.97113467,44.96315715,44.9624541,44.9622814]}]],[[{"lng":[10.45059666,10.46768488,10.47839704,10.48979751,10.4637302,10.47431294,10.46786211,10.4643141,10.45885056,10.45265323,10.45346846,10.45490031,10.45471607,10.44207566,10.41580504,10.38442173,10.39570745,10.40949558,10.41589819,10.41614404,10.41514343,10.41530531,10.42207277,10.44288758,10.45059666],"lat":[44.91006253,44.90337172,44.9071494,44.90469219,44.89777374,44.87581668,44.87057509,44.85303062,44.85116962,44.84687811,44.84451371,44.83805898,44.8306751,44.8196098,44.83240651,44.82475914,44.85370142,44.86418988,44.88009831,44.88139146,44.88133194,44.8843186,44.89482989,44.91130347,44.91006253]}]],[[{"lng":[10.1467738,10.16347191,10.17290751,10.16198624,10.15386829,10.13930001,10.12256051,10.11147019,10.10767249,10.10730236,10.09614197,10.08937333,10.04976706,10.02126749,9.97764833,9.9835358,9.99485267,10.00396344,10.0058629,10.01193638,10.01297468,10.01423689,10.01871842,10.02243811,10.03138693,10.03448215,10.04504759,10.05967948,10.07068704,10.08393021,10.09140684,10.10773538,10.12743429,10.1467738],"lat":[44.65303987,44.65243514,44.63983799,44.62090954,44.61691376,44.61556562,44.61609151,44.61197784,44.60496131,44.6013144,44.58979089,44.5867408,44.57936961,44.56297337,44.60652208,44.61338541,44.61776161,44.62568504,44.62691066,44.62965675,44.62991763,44.63000545,44.62963246,44.62967125,44.62813238,44.6270871,44.62154444,44.63941445,44.64352489,44.64084327,44.63395723,44.63349843,44.65259329,44.65303987]}]],[[{"lng":[10.23665776,10.24010964,10.24011181,10.23978774,10.24166097,10.25195457,10.25338314,10.25517921,10.25600517,10.24930463,10.23479937,10.23274645,10.24570378,10.26851609,10.27093765,10.24407441,10.23593062,10.22983583,10.22915544,10.18933979,10.14905848,10.14812547,10.14327882,10.13676822,10.13802132,10.12530247,10.13241404,10.15236095,10.16582154,10.1746097,10.19275251,10.23665776],"lat":[44.5550528,44.54913931,44.54687064,44.5452447,44.54102017,44.53922429,44.54009988,44.53995412,44.53738831,44.52596554,44.5183631,44.50536752,44.50411059,44.50972015,44.49157998,44.48206294,44.47335578,44.47051372,44.470368,44.46401061,44.46783501,44.47531209,44.48008261,44.48464893,44.49408021,44.50422616,44.51742568,44.53240449,44.53536475,44.53871368,44.55446913,44.5550528]}]],[[{"lng":[9.631837,9.64209262,9.64867499,9.65552543,9.66027708,9.65645413,9.637283,9.6219463,9.62352494,9.55917752,9.47903434,9.47256479,9.4383937,9.46887309,9.50394878,9.51141107,9.5208454,9.52766495,9.53310942,9.53584527,9.53784605,9.54158421,9.55830404,9.55890163,9.56601575,9.57795886,9.58441074,9.5928022,9.60532648,9.60604442,9.60381868,9.60593033,9.61782521,9.61651934,9.631837],"lat":[44.49205165,44.47784228,44.47513128,44.47501115,44.47059046,44.45817079,44.44515728,44.42658197,44.42161514,44.43813525,44.40925851,44.42428409,44.41854155,44.48188067,44.48020985,44.47247938,44.45497153,44.44886339,44.44793783,44.44896935,44.44923902,44.44847414,44.44013813,44.44482564,44.4580426,44.4660222,44.46266737,44.45354939,44.45067486,44.45568555,44.46405185,44.46766876,44.477526,44.48837225,44.49205165]}]],[[{"lng":[11.77379612,11.77868843,11.79074597,11.81964347,11.82765234,11.84488739,11.8468663,11.84758397,11.84093022,11.84330359,11.85374464,11.86452639,11.86463562,11.86440939,11.85964277,11.85588346,11.85555953,11.85503076,11.85207787,11.85685127,11.83856056,11.85423919,11.84094371,11.83606603,11.84042771,11.82731895,11.80225615,11.80147459,11.799092,11.78133445,11.79891166,11.78828281,11.78038132,11.79670582,11.74977277,11.77379612],"lat":[44.5056708,44.50351639,44.49813017,44.4850106,44.47312785,44.46900385,44.46873495,44.47193703,44.48533646,44.48936276,44.49637613,44.49052449,44.49036242,44.48993328,44.48478637,44.47166489,44.4709528,44.47016481,44.46452207,44.45661187,44.4373411,44.42706207,44.42806956,44.425148,44.42357008,44.4177489,44.42739207,44.42773084,44.43048558,44.43626721,44.46076546,44.46351931,44.46724107,44.48569339,44.49756929,44.5056708]}]],[[{"lng":[12.26873132,12.28916365,12.34772996,12.2746175,12.25951576,12.25519113,12.2503817,12.24427746,12.23182186,12.22985615,12.22624686,12.21314686,12.20727142,12.20167298,12.20997879,12.20881951,12.17124083,12.16119637,12.1032467,12.09677615,12.07274262,12.05453684,12.04990144,12.0472839,12.04930248,12.04899227,12.04591691,12.03558723,12.05055784,12.05923985,12.1034085,12.07435339,12.09664898,12.10006811,12.10584644,12.0808206,12.07704684,12.06832375,12.06442281,12.06384066,12.06347498,12.05063127,12.04437299,12.02811312,12.04234159,12.08142472,12.06984571,12.06513599,12.0738822,12.09390398,12.10451201,12.15378113,12.23708404,12.26873132],"lat":[44.62922093,44.46346822,44.30122982,44.30042395,44.2543625,44.25129433,44.25107131,44.24803108,44.21774843,44.21721017,44.21412036,44.22083578,44.22046667,44.22618754,44.2380178,44.2556056,44.24424262,44.25095701,44.27197532,44.29610128,44.29922352,44.30566301,44.31153066,44.31680885,44.32513162,44.32552267,44.32756271,44.33080882,44.33724258,44.34643588,44.36197901,44.3708678,44.36944572,44.38237507,44.38960001,44.40201321,44.40303329,44.40059893,44.40002856,44.39999469,44.40004051,44.40592115,44.40583171,44.41169753,44.43675997,44.46910109,44.47881459,44.49305199,44.50668289,44.52653217,44.54379866,44.54845202,44.62058595,44.62922093]}]],[[{"lng":[11.68048385,11.69755091,11.69156114,11.69110619,11.70265859,11.70901494,11.71104292,11.71388159,11.73297199,11.73649858,11.76724905,11.76111149,11.76591841,11.76557088,11.73929138,11.69161771,11.68638208,11.66484934,11.63243541,11.63994473,11.66544235,11.66557266,11.67153902,11.67144658,11.66763231,11.66759797,11.68048385],"lat":[44.31439468,44.30933822,44.29837478,44.28951783,44.28793949,44.29036808,44.29501035,44.29833242,44.30607388,44.30917276,44.2868735,44.27707413,44.27563435,44.27410331,44.25566019,44.25160871,44.24354851,44.25706675,44.25994799,44.27374235,44.27871802,44.28281477,44.28822193,44.28901634,44.31136925,44.31185619,44.31439468]}]],[[{"lng":[12.04437299,12.04668847,12.05063127,12.06384066,12.07704684,12.10584644,12.10006811,12.09952876,12.09664898,12.09170879,12.08264459,12.07864433,12.07435339,12.10104636,12.1034085,12.07985249,12.06966138,12.05923985,12.05055784,12.04107819,12.02918485,12.01612071,12.03060917,11.98769481,12.0039093,12.02811312,12.04437299],"lat":[44.40583171,44.40721481,44.40592115,44.39999469,44.40303329,44.38960001,44.38237507,44.37553429,44.36944572,44.37100207,44.37503287,44.37580705,44.3708678,44.36441091,44.36197901,44.35003162,44.3478035,44.34643588,44.33724258,44.33366948,44.32811412,44.33829046,44.35297047,44.37798624,44.38241262,44.41169753,44.40583171]}]],[[{"lng":[11.87101595,11.87055193,11.88376221,11.87481596,11.8744633,11.86074638,11.85716168,11.85605744,11.85887605,11.85692395,11.84977073,11.83856056,11.84965442,11.85685127,11.85207787,11.85503076,11.88123568,11.87101595],"lat":[44.44568211,44.44416336,44.43886093,44.42811257,44.42809446,44.43328248,44.43397545,44.43271572,44.42662246,44.42549201,44.43290123,44.4373411,44.44701873,44.45661187,44.46452207,44.47016481,44.46157504,44.44568211]}]],[[{"lng":[11.86193699,11.86122626,11.87536653,11.85763745,11.84809683,11.84383902,11.79589772,11.79376573,11.79953351,11.7999721,11.80366933,11.80640813,11.80785534,11.80927912,11.80968989,11.82527664,11.84099548,11.85106518,11.85243757,11.86193699],"lat":[44.38201011,44.37154893,44.35530395,44.33091548,44.32554532,44.32489528,44.35006601,44.36471274,44.37211108,44.37943294,44.37940971,44.37791548,44.37753328,44.38102276,44.38094963,44.37486621,44.37598844,44.38302943,44.38569592,44.38201011]}]],[[{"lng":[12.10999539,12.1124835,12.10806392,12.10539807,12.09961184,12.08356766,12.07101432,12.06880128,12.08085662,12.08424666,12.08274923,12.08125212,12.06033368,12.05495173,12.05446542,12.04713902,12.03996411,12.03941807,12.03916702,12.03728036,12.0346257,12.03435069,12.03046608,12.02173281,12.02132509,12.02110047,12.0193954,12.01809896,12.00568253,11.98625539,11.96168234,11.95117234,11.91878774,11.90974763,11.84167455,11.788468,11.78981575,11.7894628,11.79042681,11.84007386,11.81592787,11.88474958,11.86710685,11.91341897,11.94678948,11.95205894,11.956102,11.95815037,11.9587225,11.95945853,11.98533638,12.00151948,12.00206737,12.00494264,12.00849189,12.00762279,12.00872504,12.01103565,12.02522278,12.03073254,12.03125268,12.03130357,12.03127006,12.02816456,12.0308448,12.05002297,12.05225622,12.05127048,12.0548749,12.06085362,12.10278146,12.10999539],"lat":[43.94872623,43.94471358,43.93069023,43.92853902,43.92554522,43.92578165,43.90212685,43.8915357,43.88848307,43.87337436,43.87209136,43.87153756,43.86623017,43.8614856,43.85976102,43.85663462,43.85133396,43.85087135,43.85033784,43.84454499,43.84003297,43.83976117,43.83674025,43.83227206,43.83183269,43.83132545,43.8258786,43.82433733,43.82001021,43.81792703,43.79020687,43.78698508,43.7936882,43.8127191,43.80802426,43.84508476,43.8476903,43.85399219,43.85678665,43.87543267,43.88466476,43.89051842,43.91769314,43.93767807,43.90702137,43.90575533,43.90723078,43.9088613,43.90909856,43.90912451,43.90664116,43.90925989,43.90950657,43.91145664,43.9146673,43.92805978,43.93607947,43.93841337,43.94103631,43.94133133,43.94053426,43.94006475,43.93401558,43.93051477,43.92074734,43.91849,43.91905152,43.92948541,43.93151375,43.92930991,43.95030748,43.94872623]}]],[[{"lng":[12.20167298,12.21314686,12.21276359,12.17399591,12.18609714,12.16047629,12.15098842,12.14183279,12.12021822,12.11948347,12.11866885,12.10204613,12.09944015,12.0991767,12.09951064,12.10095217,12.10318035,12.10396455,12.0806399,12.08109705,12.0842802,12.08841585,12.08910525,12.09010416,12.09089611,12.09128475,12.09159776,12.09122386,12.09105057,12.09065393,12.09018453,12.08960132,12.08810954,12.08750931,12.08709233,12.08671057,12.08695777,12.08739258,12.08928038,12.09054941,12.09279065,12.0949368,12.10064497,12.11868328,12.13154534,12.1549231,12.15872012,12.16070106,12.16178756,12.16111634,12.168071,12.16955413,12.16987252,12.16990842,12.1708443,12.17306121,12.17460527,12.18080633,12.18126556,12.18785545,12.20028641,12.20167298],"lat":[44.22618754,44.22083578,44.21517948,44.17957706,44.15902288,44.10839581,44.10599417,44.11207029,44.10702368,44.10288566,44.10268129,44.10590715,44.10935402,44.10981132,44.11165684,44.11222087,44.11849831,44.12440085,44.14331416,44.14658219,44.14696437,44.14642941,44.14637515,44.14643771,44.14675838,44.14701795,44.14750462,44.15063872,44.15139064,44.15217562,44.15276451,44.15332947,44.15421611,44.15493457,44.15581012,44.15808014,44.15898274,44.15964619,44.16107156,44.16142432,44.16146253,44.15946887,44.15766642,44.16512438,44.17702495,44.17369826,44.17710431,44.18233408,44.18533791,44.19500745,44.20802158,44.21373314,44.21569713,44.21590195,44.21747843,44.21982953,44.22083991,44.22440336,44.2245616,44.22131074,44.23016961,44.22618754]}]],[[{"lng":[12.35898127,12.35917481,12.35989964,12.36423456,12.38117602,12.39529123,12.38572597,12.37680796,12.36942346,12.36682555,12.36340394,12.35467271,12.3528725,12.35342768,12.35343662,12.35328541,12.35131599,12.33626523,12.32492041,12.32360904,12.31387334,12.35394805,12.35810689,12.35898127],"lat":[44.05259391,44.05182297,44.05051423,44.04683041,44.0363726,44.03024571,44.00978731,44.00035995,43.98977473,43.98771772,43.98674725,43.98592387,43.98606231,43.98811645,43.98834148,43.98874204,43.98983521,43.98992505,43.98777132,44.01362081,44.02717416,44.05274194,44.05432118,44.05259391]}]],[[{"lng":[11.92317787,11.93710791,11.9381345,11.96235442,11.96973817,11.97142515,11.98557048,11.9690249,11.91091479,11.90590478,11.91229635,11.91222486,11.91110935,11.9082308,11.9078758,11.89536406,11.88959451,11.88879442,11.88861015,11.92317787],"lat":[44.20599601,44.20218044,44.1901263,44.20572327,44.19406184,44.17505807,44.15989732,44.15789815,44.13040571,44.14493794,44.14883534,44.14916126,44.15212465,44.15792383,44.15830198,44.16379667,44.16958766,44.1705082,44.1706569,44.20599601]}]],[[{"lng":[12.29033551,12.30245806,12.34933607,12.33287143,12.33517779,12.33810214,12.36183932,12.3621776,12.32584533,12.32226793,12.33150796,12.31794422,12.30241586,12.29199043,12.2828557,12.2368486,12.22925353,12.20673648,12.2109151,12.20187053,12.20412192,12.20633123,12.21944922,12.22663265,12.23270154,12.23256528,12.21298318,12.21263764,12.20522356,12.20114028,12.19963291,12.1980495,12.18910275,12.18605744,12.17849665,12.14997342,12.09454994,12.09956518,12.11915698,12.11645742,12.11435241,12.12947849,12.13491222,12.11988964,12.11948347,12.11886,12.12021822,12.12512231,12.14183279,12.14650232,12.15098842,12.16047629,12.15715972,12.16453302,12.16695755,12.1691554,12.17385222,12.18609714,12.18370533,12.17399591,12.21314686,12.22624686,12.23964657,12.24712624,12.29033551],"lat":[44.2269424,44.21945002,44.19073231,44.17881444,44.15665744,44.14902029,44.14800948,44.13293923,44.12348153,44.11645252,44.10620561,44.10978343,44.09727323,44.07728436,44.06836727,44.0880777,44.06560136,44.05916256,44.04814129,44.0422899,44.03786787,44.03680812,44.04107321,44.05003865,44.04609856,44.04572601,44.02782706,44.027661,44.02592989,44.0275634,44.02893747,44.03142696,44.04067304,44.05117674,44.05256913,44.0320544,44.02421971,44.03425322,44.05097528,44.05721075,44.06070626,44.07012926,44.0778613,44.09864893,44.10288566,44.10497839,44.10702368,44.1055479,44.11207029,44.11117444,44.10599417,44.10839581,44.12182344,44.12487865,44.13826658,44.14210854,44.14892689,44.15902288,44.17123374,44.17957706,44.22083578,44.21412036,44.21765017,44.23079669,44.2269424]}]],[[{"lng":[12.38566231,12.43696477,12.39441177,12.38124329,12.3749101,12.3639419,12.36254731,12.3621776,12.36183932,12.33810214,12.33287143,12.34933607,12.35217289,12.3747569,12.38566231],"lat":[44.22215214,44.17408845,44.14358092,44.14089295,44.1376954,44.13013286,44.12978685,44.13293923,44.14800948,44.14902029,44.17881444,44.19073231,44.19619003,44.21825606,44.22215214]}]],[[{"lng":[11.99957843,12.02759268,12.04524094,12.05686596,12.08764029,12.09128976,12.08826352,12.08707573,12.08780979,12.09956518,12.09454994,12.05472751,12.03655851,12.03266297,12.06610854,12.06389645,12.04804376,12.01981501,11.99512217,11.99408431,11.9913228,11.98904553,11.96357088,11.93580472,11.92321117,11.92018495,11.91967688,11.92487218,11.93370413,11.93865544,11.93903231,11.93934778,11.9392649,11.93898405,11.93487004,11.95204562,11.96489279,11.96541199,11.96567439,11.96643165,11.97363565,11.98874936,11.99026639,11.98955414,11.98761125,11.98767834,11.98821476,11.98851677,11.99657517,11.99957843],"lat":[44.07703317,44.06433238,44.06118004,44.06931404,44.07160973,44.06903514,44.06511077,44.06147873,44.05494977,44.03425322,44.02421971,44.00639575,44.00526897,43.97460929,43.97043879,43.95458085,43.94507487,43.94447461,43.95595579,43.95663123,43.96170031,43.96326347,43.96782594,43.99147407,43.99734309,43.99933818,44.00029789,44.00964368,44.01143373,44.01343108,44.01373649,44.01431356,44.02372382,44.02435227,44.03072419,44.03231598,44.03889731,44.03929796,44.03980431,44.04297169,44.0502477,44.06134973,44.07312183,44.0741038,44.07519901,44.07553935,44.07676772,44.07730898,44.08281457,44.07703317]}]],[[{"lng":[11.88959451,11.9078758,11.91222486,11.90763966,11.90590478,11.91206342,11.89183537,11.87041143,11.84196041,11.86146976,11.86160974,11.86076453,11.86019945,11.85001095,11.84668807,11.83897549,11.83666008,11.83371717,11.83118733,11.83142575,11.83478218,11.83766156,11.86800492,11.8747748,11.88959451],"lat":[44.16958766,44.15830198,44.14916126,44.14665834,44.14493794,44.09711975,44.09780506,44.0769098,44.09321473,44.10378296,44.10409456,44.10806801,44.10904548,44.11202818,44.11230916,44.11143889,44.11136141,44.11174961,44.11816842,44.1187117,44.12225656,44.12470583,44.14580648,44.16395697,44.16958766]}]],[[{"lng":[12.06444968,12.08693829,12.09677615,12.1032467,12.14504873,12.1506214,12.16119637,12.17124083,12.18892537,12.20881951,12.20997879,12.20797081,12.20028641,12.19536021,12.1938912,12.18785545,12.18126556,12.18080633,12.16987252,12.15704006,12.14276151,12.13572775,12.13224281,12.12097664,12.12029559,12.11395753,12.11164589,12.08828382,12.09246306,12.09574989,12.09471115,12.09279065,12.09054941,12.08695777,12.08750931,12.08810954,12.09018453,12.09105057,12.09089611,12.08910525,12.08109705,12.0806399,12.04798837,12.04450671,12.03373535,12.02378948,12.01562922,12.01056181,12.00123823,12.00025607,12.00381496,12.00595414,12.00000044,12.00499419,11.97142515,11.96767656,11.96973817,11.96235442,11.94982144,11.9381345,11.9355263,11.93710791,11.92317787,11.92151122,11.92829151,11.92952983,11.92554932,11.93058394,11.94749363,11.96529098,11.97036627,11.97586245,11.99302361,12.00164829,12.00549649,12.00952618,12.01121345,12.02154409,12.02918485,12.04899227,12.0472839,12.04990144,12.06444968],"lat":[44.30221931,44.30052389,44.29610128,44.27197532,44.25442808,44.25252784,44.25095701,44.24424262,44.25426993,44.2556056,44.2380178,44.23563455,44.23016961,44.22590535,44.22420894,44.22131074,44.2245616,44.22440336,44.21569713,44.21297308,44.21409601,44.21741344,44.213782,44.20613472,44.20633093,44.20884475,44.20966998,44.17575506,44.16979909,44.16305692,44.16113149,44.16146253,44.16142432,44.15898274,44.15493457,44.15421611,44.15276451,44.15139064,44.14675838,44.14637515,44.14658219,44.14331416,44.15056147,44.14669982,44.1395053,44.13789663,44.13353908,44.12729884,44.12611386,44.126922,44.13006042,44.14068146,44.14975091,44.15259947,44.17505807,44.18311407,44.19406184,44.20572327,44.20738027,44.1901263,44.1917599,44.20218044,44.20599601,44.21090829,44.21562754,44.21937693,44.24004579,44.24155063,44.23588461,44.25048065,44.25277041,44.25569716,44.27888946,44.29616413,44.2996009,44.30143027,44.30255611,44.31453566,44.32811412,44.32552267,44.31680885,44.31153066,44.30221931]}]],[[{"lng":[12.14102514,12.16987252,12.168071,12.16111634,12.16178756,12.15872012,12.13154534,12.11868328,12.0949368,12.09443359,12.09471115,12.09492911,12.09542128,12.09574989,12.09567681,12.09246306,12.08828382,12.11164589,12.12029559,12.12097664,12.1349019,12.13572775,12.13752363,12.14102514],"lat":[44.21580931,44.21569713,44.20802158,44.19500745,44.18533791,44.17710431,44.17702495,44.16512438,44.15946887,44.16108501,44.16113149,44.16123362,44.16179645,44.16305692,44.16357206,44.16979909,44.17575506,44.20966998,44.20633093,44.20613472,44.21718405,44.21741344,44.21746233,44.21580931]}]],[[{"lng":[11.889103,11.89215199,11.88991624,11.90440081,11.93898405,11.93903231,11.93370413,11.92487218,11.92018495,11.93580472,11.96357088,11.98904553,11.9913228,11.99408431,11.98768611,11.98641045,11.97585043,11.97548634,11.96661081,11.96252752,11.86765487,11.86735667,11.86795577,11.8697805,11.86994743,11.86938945,11.84990912,11.84960017,11.85039661,11.86521123,11.87109056,11.87592402,11.87637598,11.88148783,11.88756235,11.88798913,11.8886259,11.889103],"lat":[44.05713596,44.0539201,44.04667194,44.03433938,44.02435227,44.01373649,44.01143373,44.00964368,43.99933818,43.99147407,43.96782594,43.96326347,43.96170031,43.95663123,43.95156809,43.94575848,43.9354106,43.93510498,43.9325,43.93381243,43.97777503,43.97934905,43.98085101,43.98462696,43.98524397,43.99255047,44.01850799,44.01907388,44.02553618,44.03477241,44.03601027,44.03894061,44.03925333,44.04993699,44.0570309,44.05733521,44.05733709,44.05713596]}]],[[{"lng":[12.36254731,12.36540048,12.36637669,12.36689612,12.37037969,12.33604833,12.33148085,12.33150796,12.33021097,12.32226793,12.36254731],"lat":[44.12978685,44.12940565,44.12327299,44.11081134,44.10423102,44.1042675,44.1061009,44.10620561,44.1106742,44.11645252,44.12978685]}]],[[{"lng":[12.44271848,12.43983232,12.43102922,12.40942435,12.40514067,12.40500355,12.40426411,12.40354208,12.4026967,12.39781471,12.39191468,12.38962756,12.37488094,12.37337001,12.36689612,12.36637669,12.36540048,12.3639419,12.36439323,12.37353804,12.3749101,12.38124329,12.39441177,12.43696477,12.44271848],"lat":[44.16975398,44.16679812,44.16424532,44.1465724,44.13818374,44.13775569,44.13315935,44.12973284,44.12698522,44.115094,44.10502438,44.10326478,44.10100103,44.10013643,44.11081134,44.12327299,44.12940565,44.13013286,44.1305967,44.13687171,44.1376954,44.14089295,44.14358092,44.17408845,44.16975398]}]],[[{"lng":[12.37053303,12.37322888,12.36427183,12.36220635,12.36589524,12.3714219,12.36499708,12.36352424,12.35906246,12.35535252,12.3454138,12.34461315,12.34134814,12.33536935,12.32665492,12.31541048,12.31487811,12.31407475,12.31225199,12.30938573,12.31419127,12.31632094,12.31101473,12.31794422,12.33604833,12.34649135,12.37037969,12.37053303],"lat":[44.1036323,44.09699862,44.08291259,44.07203505,44.07102603,44.06808102,44.0613835,44.05720459,44.05422855,44.05616674,44.05303744,44.0530069,44.05332761,44.05467286,44.0571059,44.0688127,44.06887317,44.06879748,44.06835525,44.06666483,44.07356559,44.09132929,44.09636348,44.10978343,44.1042675,44.11036391,44.10423102,44.1036323]}]],[[{"lng":[12.05267591,12.0806399,12.10396455,12.10318035,12.09951064,12.09944015,12.11948347,12.13495278,12.13491222,12.12947849,12.11435241,12.11915698,12.1040784,12.09956518,12.09611982,12.09262111,12.08780979,12.08681499,12.08707573,12.08826352,12.09143856,12.09128976,12.09051603,12.08998375,12.08764029,12.08218852,12.05686596,12.04524094,11.99657517,12.00365338,12.00472133,12.01249705,12.01250166,12.01235895,12.01165169,12.01100859,12.00848711,12.00167623,11.99924565,11.99805275,11.99705778,12.00025607,12.01056181,12.01562922,12.02911761,12.03373535,12.03455879,12.04450671,12.04581878,12.04798837,12.05267591],"lat":[44.15091102,44.14331416,44.12440085,44.11849831,44.11165684,44.10935402,44.10288566,44.07873176,44.0778613,44.07012926,44.06070626,44.05097528,44.03556159,44.03425322,44.03452212,44.03755192,44.05494977,44.05958616,44.06147873,44.06511077,44.06853596,44.06903514,44.07072162,44.07105114,44.07160973,44.06738166,44.06931404,44.06118004,44.08281457,44.09014595,44.09174737,44.10808971,44.10891783,44.10955181,44.11063281,44.1110099,44.11229178,44.11499188,44.11659526,44.11821111,44.12250459,44.126922,44.12729884,44.13353908,44.13721518,44.1395053,44.13996056,44.14669982,44.14959974,44.15056147,44.15091102]}]],[[{"lng":[12.18120022,12.18605744,12.18910275,12.19963291,12.19416014,12.19773418,12.19836939,12.20074238,12.20131201,12.20172297,12.20277131,12.20065843,12.20341804,12.20366408,12.21600063,12.22121951,12.22186562,12.22341351,12.22376096,12.22175805,12.22006488,12.21982078,12.22254343,12.20197864,12.21193884,12.22387152,12.22494801,12.2255722,12.22760106,12.22863819,12.24575522,12.2497724,12.2507801,12.2574423,12.27018674,12.25615983,12.25561786,12.2551274,12.25474197,12.25084115,12.23651989,12.23120469,12.2266789,12.21857478,12.21109154,12.18600249,12.1732422,12.15826069,12.16428063,12.1609117,12.15513022,12.15217698,12.14527619,12.14710166,12.1449403,12.1426155,12.13471651,12.13388625,12.13438061,12.13312439,12.11102314,12.12182092,12.12929483,12.13353731,12.11990229,12.12071424,12.10926402,12.09770686,12.07654103,12.07841007,12.09121399,12.09523459,12.09725896,12.0973574,12.10187893,12.11808915,12.12072551,12.13365651,12.14997342,12.18120022],"lat":[44.05126381,44.05117674,44.04067304,44.02893747,44.02155617,44.01843227,44.0181804,44.01799684,44.01791784,44.01767225,44.01605831,44.00809599,44.00375117,44.00345617,43.99955309,44.00011717,44.00007192,43.99940701,43.99753359,43.98726379,43.98570003,43.97727116,43.9676872,43.96287315,43.94995313,43.94109991,43.94096147,43.94121392,43.94278611,43.94652004,43.95010394,43.9501877,43.94969986,43.94345993,43.92870686,43.92092879,43.92034228,43.91874083,43.91232539,43.91072415,43.91675899,43.93594093,43.93956211,43.93276856,43.93191696,43.94219016,43.93420882,43.93831553,43.95642491,43.95799474,43.95919904,43.96038799,43.95881376,43.954442,43.9489107,43.94665196,43.94406919,43.94107598,43.93649789,43.93464174,43.94872372,43.95169704,43.94973681,43.95007958,43.96931434,43.97386566,43.97852657,43.97469941,43.98102471,43.99594629,43.99706777,44.00243262,44.00681618,44.02067805,44.0205653,44.0224138,44.02672872,44.02741634,44.0320544,44.05126381]}]],[[{"lng":[11.83352129,11.85274257,11.86428841,11.88879442,11.88765884,11.87525317,11.8747748,11.86800492,11.83766156,11.83142575,11.83897549,11.83322191,11.83267001,11.83202519,11.82985052,11.82733365,11.81084753,11.78645333,11.78317113,11.78475359,11.78069642,11.77829545,11.7836302,11.78564745,11.78571988,11.77641455,11.75293708,11.74485559,11.71588519,11.72144957,11.72186797,11.71971023,11.71967372,11.72022829,11.72861269,11.75283866,11.77138614,11.77379729,11.77601262,11.77808629,11.78081344,11.78246647,11.79297305,11.8060783,11.82214849,11.83352129],"lat":[44.1966154,44.18602648,44.18007456,44.1705082,44.16961864,44.16427802,44.16395697,44.14580648,44.12470583,44.1187117,44.11143889,44.08496919,44.08465879,44.08449472,44.0847107,44.09553157,44.09798236,44.08288827,44.08613738,44.09616407,44.09809056,44.10070586,44.10815637,44.11199643,44.11539776,44.11949571,44.12053617,44.12602482,44.12255729,44.13495383,44.14813312,44.15639517,44.15723331,44.15868757,44.17183872,44.1934851,44.19887013,44.18683781,44.18207548,44.18094468,44.18041012,44.18071196,44.19124076,44.19947202,44.19456542,44.1966154]}]],[[{"lng":[12.30241586,12.31632094,12.31419127,12.30871582,12.30846341,12.30705996,12.30684603,12.30610208,12.30001193,12.29959816,12.28264107,12.2746931,12.27384551,12.27614267,12.28262969,12.2828557,12.28439047,12.29199043,12.30241586],"lat":[44.09727323,44.09132929,44.07356559,44.06584699,44.06020054,44.05652303,44.05626815,44.05591158,44.05325196,44.05321889,44.05651678,44.05953599,44.06612338,44.06892785,44.06831538,44.06836727,44.06928214,44.07728436,44.09727323]}]],[[{"lng":[11.77031067,11.77426384,11.77996218,11.78845544,11.79721561,11.69516524,11.69259967,11.68878766,11.67104264,11.66766236,11.65399733,11.64563981,11.66069703,11.68188876,11.72405612,11.73090848,11.72604025,11.72999576,11.73954202,11.75470145,11.75834639,11.75869298,11.75669021,11.75808701,11.76156494,11.76850868,11.77031067],"lat":[44.03953563,44.03706285,44.04945642,44.05064475,44.01486648,43.95358127,43.95323965,43.95902096,43.96679131,43.97198581,43.97525727,43.98937976,44.0197067,44.02120404,44.01341446,44.01786709,44.02150434,44.02517486,44.02890728,44.02648083,44.03131748,44.03955586,44.04183994,44.04879858,44.05270734,44.05045824,44.03953563]}]],[[{"lng":[11.98557048,12.00499419,12.00000044,12.00381496,12.00025607,11.99705778,11.99924565,12.00167623,12.01100859,12.01250166,12.00365338,11.99657517,11.98821476,11.98761125,11.98784663,11.98955414,11.99026639,11.98874936,11.97363565,11.96541199,11.95204562,11.90440081,11.88991624,11.89215199,11.8886259,11.91323653,11.91206342,11.9115384,11.91487837,11.91290963,11.91061396,11.91014569,11.90858148,11.91091479,11.93089345,11.93725417,11.94512233,11.953034,11.9690249,11.98557048],"lat":[44.15989732,44.15259947,44.14975091,44.13006042,44.126922,44.12250459,44.11659526,44.11499188,44.1110099,44.10891783,44.09014595,44.08281457,44.07676772,44.07519901,44.07491375,44.0741038,44.07312183,44.06134973,44.0502477,44.03929796,44.03231598,44.03433938,44.04667194,44.0539201,44.05733709,44.09328161,44.09711975,44.10700034,44.12104962,44.12371072,44.12403036,44.12442042,44.1279444,44.13040571,44.13440491,44.14055241,44.14092585,44.14577204,44.15789815,44.15989732]}]],[[{"lng":[11.86521123,11.84960017,11.85903108,11.86938945,11.8697805,11.86795577,11.85304873,11.85021463,11.85118271,11.85050069,11.84940505,11.840777,11.83200524,11.8304279,11.82873433,11.81110865,11.80682714,11.80224897,11.79208497,11.77077523,11.76825388,11.74494591,11.72526545,11.71990607,11.71393668,11.71703165,11.68219866,11.68904209,11.69259967,11.69919422,11.70113767,11.70156065,11.70324262,11.7823461,11.79721561,11.80882919,11.86521123],"lat":[44.03477241,44.01907388,44.00663,43.99255047,43.98462696,43.98085101,43.97737571,43.97338611,43.96236019,43.95956825,43.95829015,43.95560617,43.95197975,43.9463199,43.94476834,43.94410527,43.94500288,43.94701498,43.94444601,43.91892805,43.91773777,43.91655385,43.90723882,43.90139748,43.89866339,43.9218176,43.93784964,43.95003885,43.95323965,43.95639411,43.95885102,43.96074067,43.96343782,44.00960498,44.01486648,44.01225162,44.03477241]}]],[[{"lng":[11.84668807,11.86160974,11.85033151,11.84363495,11.84196041,11.8549157,11.87041143,11.89183537,11.91323653,11.90939323,11.8938104,11.87592402,11.84504149,11.80882919,11.79750425,11.79721561,11.79820125,11.79783527,11.79348836,11.78845544,11.79266414,11.82649231,11.82051684,11.80219185,11.79489234,11.79593659,11.80228102,11.80684389,11.81084753,11.81615794,11.82477787,11.82733365,11.83169747,11.8293403,11.82985052,11.83267001,11.83897549,11.84668807],"lat":[44.11230916,44.10409456,44.10052346,44.09739541,44.09321473,44.09012758,44.0769098,44.09780506,44.09328161,44.08922196,44.07890289,44.03894061,44.03172877,44.01225162,44.01440232,44.01486648,44.0185982,44.02115548,44.03058907,44.05064475,44.05859955,44.05931553,44.07383205,44.08004522,44.08336619,44.08587947,44.08737972,44.09099557,44.09798236,44.09458342,44.09563987,44.09553157,44.09200229,44.08815346,44.0847107,44.08465879,44.11143889,44.11230916]}]],[[{"lng":[12.2408761,12.24695615,12.2639926,12.26726876,12.27121306,12.27614267,12.28264107,12.30001193,12.30684603,12.30846341,12.30871582,12.31487811,12.32665492,12.34461315,12.35535252,12.35810689,12.34685405,12.32346331,12.31387334,12.30756557,12.2888818,12.28486818,12.28122733,12.25316938,12.23945187,12.23866059,12.23535764,12.21603385,12.20779431,12.20685341,12.20310154,12.20074238,12.19836939,12.19773418,12.19696207,12.19416014,12.19786679,12.19963291,12.20522356,12.21298318,12.23256528,12.22663265,12.21944922,12.20633123,12.20187053,12.20673648,12.22925353,12.2408761],"lat":[44.08411612,44.07876506,44.07561627,44.07128192,44.06870558,44.06892785,44.05651678,44.05325196,44.05626815,44.06020054,44.06584699,44.06887317,44.0571059,44.0530069,44.05616674,44.05432118,44.04492867,44.03131571,44.02717416,44.02190139,44.02494412,44.02727443,44.03274486,44.00962737,44.01359169,44.01372218,44.01400491,44.0153883,44.01828502,44.01841951,44.01871392,44.01799684,44.0181804,44.01843227,44.01892206,44.02155617,44.02819909,44.02893747,44.02592989,44.02782706,44.04572601,44.05003865,44.04107321,44.03680812,44.0422899,44.05916256,44.06560136,44.08411612]}]],[[{"lng":[12.45006944,12.42872041,12.45452355,12.42531067,12.40564787,12.42627675,12.45006944],"lat":[44.16279826,44.14734463,44.09319055,44.08849685,44.10875663,44.14870541,44.16279826]}]],[[{"lng":[11.99408431,12.00167493,12.01981501,12.04804376,12.04481791,12.05127048,12.05225622,12.0308448,12.02816456,12.03125268,12.02522278,12.00872504,12.00206737,11.98533638,11.96985042,11.9587225,11.956102,11.95205894,11.94678948,11.94714606,11.93492936,11.93125476,11.92107313,11.91341897,11.91062867,11.9087013,11.86710685,11.88720286,11.88474958,11.83870317,11.81592787,11.82253011,11.84007386,11.81340583,11.8040536,11.79042681,11.7894628,11.78953059,11.79035495,11.78981575,11.788468,11.71016673,11.71045783,11.71393668,11.72471414,11.72526545,11.74494591,11.74561563,11.77077523,11.79208497,11.80224897,11.82873433,11.84963601,11.85050069,11.85118271,11.84972725,11.8496551,11.85021463,11.85028638,11.85304873,11.85756926,11.86795577,11.92936411,11.93170138,11.93640353,11.94165283,11.94806531,11.95029505,11.95575819,11.96252752,11.96661081,11.97585043,11.98768611,11.99408431],"lat":[43.95663123,43.95689105,43.94447461,43.94507487,43.93559071,43.92948541,43.91905152,43.92074734,43.93051477,43.94053426,43.94103631,43.93607947,43.90950657,43.90664116,43.9072431,43.90909856,43.90723078,43.90575533,43.90702137,43.91499792,43.92286622,43.92565255,43.93522271,43.93767807,43.93079885,43.9283181,43.91769314,43.89671359,43.89051842,43.89111429,43.88466476,43.87738923,43.87543267,43.85648389,43.85737115,43.85678665,43.85399219,43.85304519,43.85098131,43.8476903,43.84508476,43.87744594,43.8939109,43.89866339,43.90689183,43.90723882,43.91655385,43.91676282,43.91892805,43.94444601,43.94701498,43.94476834,43.95842845,43.95956825,43.96236019,43.96502543,43.96872748,43.97338611,43.97384349,43.97737571,43.98012563,43.98085101,43.95410582,43.95247028,43.94622735,43.94427359,43.94342396,43.94290721,43.94075821,43.93381243,43.9325,43.9354106,43.95156809,43.95663123]}]],[[{"lng":[12.1732422,12.1702824,12.16440249,12.15949761,12.15922921,12.15845388,12.16805073,12.14215528,12.13825978,12.09667854,12.09009708,12.0873031,12.0833617,12.08274923,12.08085662,12.06880128,12.07101432,12.08287665,12.08356766,12.08859112,12.09961184,12.10539807,12.1061979,12.1124835,12.11416321,12.13312439,12.13372279,12.1449403,12.14710166,12.14495848,12.14508163,12.14527619,12.14577188,12.15217698,12.1609117,12.16428063,12.15763799,12.15826069,12.16440767,12.1732422],"lat":[43.93420882,43.92534388,43.92439467,43.92174736,43.92141467,43.91923302,43.89755736,43.86233261,43.84764094,43.85317696,43.86424906,43.86749375,43.87166067,43.87209136,43.88848307,43.8915357,43.90212685,43.92181195,43.92578165,43.92801366,43.92554522,43.92853902,43.93934793,43.94471358,43.94275913,43.93464174,43.9348864,43.9489107,43.954442,43.95633769,43.95819792,43.95881376,43.95923225,43.96038799,43.95799474,43.95642491,43.93902599,43.93831553,43.93629067,43.93420882]}],[{"lng":[12.09780559,12.09523286,12.09725896,12.09523459,12.07841007,12.07654103,12.09770686,12.12071424,12.13353731,12.12182092,12.11102314,12.10999539,12.10513637,12.10278146,12.0859772,12.07862793,12.06085362,12.05127048,12.0449816,12.04481791,12.04479478,12.04514366,12.04804376,12.04894311,12.05561923,12.06389645,12.06610854,12.04294837,12.03266297,12.03592723,12.03655851,12.03796584,12.05472751,12.09780559],"lat":[44.0229682,44.0119848,44.00681618,44.00243262,43.99594629,43.98102471,43.97469941,43.97386566,43.95007958,43.95169704,43.94872372,43.94872623,43.95054054,43.95030748,43.93936515,43.93553922,43.92930991,43.92948541,43.9351362,43.93559071,43.9361135,43.94123593,43.94507487,43.94779677,43.95259696,43.95458085,43.97043879,43.96924888,43.97460929,43.98068059,44.00526897,44.00620386,44.00639575,44.0229682]}],[{"lng":[12.06297146,12.06885418,12.08383265,12.08321581,12.06795631,12.06304682,12.06089622,12.06297146],"lat":[43.85893892,43.85840281,43.85835935,43.8543606,43.85157555,43.84753892,43.84684034,43.85893892]}]],[[{"lng":[12.44312171,12.42627675,12.42116607,12.40564787,12.40895309,12.42531067,12.39987233,12.39264511,12.37047371,12.3714219,12.37131994,12.36589524,12.36225417,12.36220635,12.36241992,12.36328191,12.36427183,12.37123158,12.37322888,12.37337001,12.38962756,12.39191468,12.39781471,12.4026967,12.40354208,12.40426411,12.40514067,12.40942435,12.44312171],"lat":[44.16838242,44.14870541,44.13578681,44.10875663,44.09875941,44.08849685,44.06648074,44.06367987,44.066031,44.06808102,44.0682641,44.07102603,44.07182742,44.07203505,44.07382032,44.07933164,44.08291259,44.09288836,44.09699862,44.10013643,44.10326478,44.10502438,44.115094,44.12698522,44.12973284,44.13315935,44.13818374,44.1465724,44.16838242]}]],[[{"lng":[12.2888818,12.31387334,12.31883673,12.32360904,12.32376635,12.31813872,12.32492041,12.32733053,12.33626523,12.35343662,12.3528725,12.35079357,12.34653033,12.34306597,12.33547037,12.32606432,12.3231648,12.32282757,12.32095269,12.31252582,12.29476195,12.27796308,12.27719323,12.27018674,12.25710958,12.2497724,12.22494801,12.21193884,12.20954159,12.20197864,12.2019197,12.20393902,12.22254343,12.21982078,12.22006488,12.22376096,12.22186562,12.20366408,12.20065843,12.20074238,12.20685341,12.20927297,12.2138173,12.21603385,12.2341206,12.23866059,12.23945187,12.24285185,12.24514597,12.25316938,12.28122733,12.28292042,12.28486818,12.2888818],"lat":[44.02494412,44.02717416,44.01573133,44.01362081,44.00929485,44.00041529,43.98777132,43.98761105,43.98992505,43.98834148,43.98606231,43.98465588,43.97397748,43.97203085,43.96979527,43.96520818,43.96194354,43.96060115,43.95660159,43.94023474,43.9281896,43.92474944,43.92547378,43.92870686,43.93965216,43.9501877,43.94096147,43.94995313,43.9558815,43.96287315,43.96548567,43.96664441,43.9676872,43.97727116,43.98570003,43.99753359,44.00007192,44.00345617,44.00809599,44.01799684,44.01841951,44.01701906,44.01569382,44.0153883,44.01396795,44.01372218,44.01359169,44.01051518,44.00935161,44.00962737,44.03274486,44.03245355,44.02727443,44.02494412]}],[{"lng":[12.20887415,12.21109154,12.21789904,12.21857478,12.21933849,12.22022043,12.2266789,12.23651989,12.22223625,12.22236137,12.21908817,12.20319861,12.17601138,12.1734315,12.1702824,12.1732422,12.17397762,12.18570341,12.18600249,12.1886976,12.19176722,12.20887415],"lat":[43.93215038,43.93191696,43.93248152,43.93276856,43.93353029,43.9355581,43.93956211,43.91675899,43.91528955,43.90887577,43.90805634,43.91648858,43.92040219,43.92421937,43.92534388,43.93420882,43.93515169,43.94218951,43.94219016,43.9408635,43.93792376,43.93215038]}]],[[{"lng":[11.77455607,11.78571988,11.77829545,11.77864251,11.78069642,11.78325689,11.78475359,11.78489889,11.78548906,11.78317113,11.78378026,11.78645333,11.79489234,11.82051684,11.82532238,11.82640862,11.82649231,11.82617086,11.79266414,11.77996218,11.77815491,11.77506289,11.77476722,11.77426384,11.77395753,11.7720037,11.76506474,11.76850868,11.76156494,11.75808701,11.75669021,11.75834639,11.75470145,11.72605891,11.72405612,11.71227141,11.69296876,11.68575592,11.68188876,11.70069524,11.75156105,11.77455607],"lat":[44.11529694,44.11539776,44.10070586,44.09958104,44.09809056,44.09781211,44.09616407,44.09580041,44.0905463,44.08613738,44.08474507,44.08288827,44.08336619,44.07383205,44.06829344,44.06070407,44.05931553,44.05887334,44.05859955,44.04945642,44.04392756,44.03787171,44.03741974,44.03706285,44.03691723,44.037838,44.04345308,44.05045824,44.05270734,44.04879858,44.04183994,44.03131748,44.02648083,44.01383481,44.01341446,44.01268667,44.01389083,44.01713979,44.02120404,44.05555895,44.11942674,44.11529694]}]],[[{"lng":[12.0833617,12.09009708,12.09246894,12.09667854,12.10164635,12.11798832,12.12616641,12.13401814,12.13825978,12.15055874,12.14946812,12.14852146,12.14620946,12.1308041,12.11273702,12.10500663,12.1040904,12.10363175,12.10289302,12.09619099,12.10744557,12.07054291,12.05300257,11.95146264,11.95117234,11.98625539,11.99523462,11.99676252,11.99879734,12.00568253,12.01809896,12.0193954,12.02051366,12.02132509,12.03046608,12.03435069,12.03728036,12.03916702,12.03941807,12.04713902,12.06089622,12.06795631,12.08321581,12.08383265,12.05495173,12.0833617],"lat":[43.87166067,43.86424906,43.85718041,43.85317696,43.85252893,43.85766572,43.85701894,43.85276125,43.84764094,43.83714889,43.83329454,43.83134894,43.82921638,43.82475929,43.79643411,43.79507145,43.79411722,43.79355779,43.79227068,43.76530394,43.75377137,43.7407306,43.75696563,43.77757201,43.78698508,43.81792703,43.81995163,43.81992054,43.81933594,43.82001021,43.82433733,43.8258786,43.82906317,43.83183269,43.83674025,43.83976117,43.84454499,43.85033784,43.85087135,43.85663462,43.84684034,43.85157555,43.8543606,43.85835935,43.8614856,43.87166067]}]],[[{"lng":[9.71762804,9.72171335,9.73160438,9.73761572,9.75414339,9.7619278,9.77964649,9.79208693,9.79925736,9.79551642,9.75929259,9.7593435,9.76353369,9.76803607,9.76216622,9.76515641,9.75239834,9.72299616,9.70201141,9.69654209,9.68666166,9.67521222,9.66762784,9.6645641,9.65447955,9.65229747,9.67015664,9.6663234,9.68922688,9.6973972,9.70473612,9.70695664,9.70879388,9.71121658,9.71842938,9.71134172,9.71762804],"lat":[44.78376341,44.77077449,44.76343777,44.76615378,44.76850548,44.77044075,44.78319481,44.78522471,44.77446213,44.76709745,44.7347199,44.73378333,44.72493315,44.71007491,44.70541629,44.68134207,44.67832103,44.67802483,44.67138147,44.67207664,44.67510726,44.68761677,44.70298333,44.70550385,44.71123354,44.71815079,44.73288315,44.74000837,44.77115523,44.77693905,44.77347316,44.7721271,44.7704503,44.76912092,44.76887773,44.78199385,44.78376341]}]],[[{"lng":[9.38974608,9.43286447,9.40755579,9.3882981,9.38057889,9.37510526,9.37487381,9.37488221,9.37560865,9.37395409,9.37280733,9.35695826,9.34704736,9.32961543,9.32583513,9.32191816,9.31417986,9.31838167,9.31800858,9.27740952,9.28850607,9.28954634,9.2988341,9.30950524,9.31042865,9.31201249,9.31241678,9.31473275,9.31459708,9.29128997,9.31525809,9.32758604,9.34949191,9.38262916,9.38974608],"lat":[44.97025404,44.95406751,44.9517031,44.94401954,44.94020169,44.93269417,44.93218181,44.93152464,44.92826355,44.92519931,44.92422183,44.91848419,44.9137617,44.90274088,44.9017255,44.90343798,44.88732791,44.87925944,44.87780216,44.89560889,44.91112913,44.90924992,44.90968509,44.90584883,44.90561227,44.90569798,44.9057959,44.91208192,44.91275745,44.92507098,44.93749306,44.95909902,44.97007943,44.95501204,44.97025404]}]],[[{"lng":[9.22503085,9.23490407,9.2452712,9.28508507,9.29248743,9.3037783,9.30478975,9.30672114,9.3057747,9.32654783,9.33121292,9.35671778,9.35792887,9.37554509,9.37663159,9.37068207,9.40273962,9.3985851,9.39485413,9.39486331,9.39538737,9.40562892,9.4031449,9.34222418,9.30041024,9.27223047,9.24564231,9.25653892,9.24550262,9.20297322,9.20193134,9.21741798,9.21989107,9.22503085],"lat":[44.67337513,44.67091638,44.65617118,44.65944113,44.64476199,44.64379625,44.6443067,44.64701576,44.66564426,44.66577581,44.66425898,44.65427052,44.6522682,44.64041848,44.63879446,44.61717655,44.6166764,44.61542162,44.61166254,44.61115837,44.61038235,44.6008068,44.59145001,44.57778043,44.60777737,44.59591522,44.59971154,44.61059408,44.61964781,44.61349411,44.67161711,44.67412884,44.67419612,44.67337513]}]],[[{"lng":[9.3571145,9.35624629,9.35659857,9.38117737,9.38788115,9.3969456,9.39987963,9.40651398,9.41225463,9.41338705,9.44505177,9.44789634,9.44628586,9.44537432,9.43800801,9.43070359,9.42963857,9.42008708,9.41134601,9.4063738,9.40407264,9.40222798,9.3980627,9.38752212,9.37995024,9.3767442,9.36878179,9.36309823,9.35826755,9.34167518,9.31417986,9.32101544,9.32191816,9.32237409,9.32312242,9.32583513,9.32961543,9.34704736,9.35695826,9.3571145],"lat":[44.9171154,44.91398543,44.91358823,44.89654906,44.8877225,44.88185804,44.88135268,44.88669448,44.89262425,44.89513171,44.86759248,44.85569863,44.85529084,44.85524937,44.85517884,44.85491856,44.85466151,44.85168135,44.84508763,44.84518644,44.84544666,44.84584928,44.84553978,44.83988672,44.82748022,44.82661764,44.82571641,44.82240383,44.82429152,44.86981198,44.88732791,44.90282839,44.90343798,44.90370675,44.90360561,44.9017255,44.90274088,44.9137617,44.91848419,44.9171154]}]],[[{"lng":[9.75753568,9.81326234,9.82381971,9.81701232,9.80879775,9.80212211,9.8008748,9.79750955,9.79289125,9.79194477,9.79110643,9.76002394,9.73178774,9.72279184,9.70868692,9.69805906,9.69142684,9.68746563,9.66980065,9.66592648,9.63104726,9.61502343,9.62113313,9.59973809,9.629192,9.64361493,9.65431152,9.6611495,9.66975088,9.67179083,9.67689296,9.72768161,9.75037187,9.74506913,9.75753568],"lat":[45.11253851,45.07810328,45.05242211,45.04703394,45.05072015,45.04828273,45.04426768,45.03527145,45.02996553,45.02576824,45.02388367,44.99243528,44.99567135,45.00366828,44.99891367,44.99613454,45.00073884,45.00569577,45.00445047,44.99661009,45.00083529,45.0113176,45.02981057,45.03026942,45.04922242,45.06595734,45.07051445,45.07192434,45.07200926,45.0726364,45.07760824,45.06213546,45.07904693,45.11093871,45.11253851]}]],[[{"lng":[9.45600998,9.45118695,9.45094382,9.45128749,9.45167749,9.45199648,9.45742329,9.45778809,9.45798577,9.45804421,9.45747587,9.45521345,9.45169105,9.44767175,9.42790416,9.42434783,9.41529251,9.41267684,9.41159671,9.41152498,9.41365577,9.41225463,9.39987963,9.38788115,9.38117737,9.36054125,9.35624629,9.35695826,9.37395409,9.37487381,9.38057889,9.39446742,9.40339008,9.40755579,9.42695578,9.43213606,9.43286447,9.44060995,9.45834272,9.45488877,9.45600998],"lat":[44.95036766,44.94476961,44.93962146,44.93818878,44.93781817,44.93788892,44.93518472,44.93484118,44.93420125,44.93357989,44.93223187,44.92978337,44.92823102,44.92794079,44.90753704,44.90625401,44.91000512,44.90912292,44.90691281,44.90573382,44.89974137,44.89262425,44.88135268,44.8877225,44.89654906,44.91199151,44.91398543,44.91848419,44.92519931,44.93218181,44.94020169,44.94533969,44.94920186,44.9517031,44.950525,44.95329611,44.95406751,44.96423037,44.97746309,44.96088639,44.95036766]}]],[[{"lng":[9.46335405,9.47266024,9.48897744,9.49053764,9.49019753,9.48891474,9.50931643,9.51152982,9.50941679,9.49596505,9.50273574,9.47702243,9.46121266,9.45340381,9.44888315,9.44505177,9.43180214,9.43097149,9.43329565,9.41338705,9.41365577,9.41152498,9.41159671,9.41529251,9.42790416,9.45521345,9.45798577,9.45742329,9.45167749,9.45128749,9.45118695,9.46335405],"lat":[44.9540379,44.95413479,44.94557726,44.94244689,44.94120608,44.93940219,44.92889777,44.92413482,44.91740178,44.90444411,44.88921909,44.87769876,44.87825881,44.86886493,44.85727911,44.86759248,44.86643707,44.86707935,44.87333115,44.89513171,44.89974137,44.90573382,44.90691281,44.91000512,44.90753704,44.92978337,44.93420125,44.93518472,44.93781817,44.93818878,44.94476961,44.9540379]}]],[[{"lng":[9.67600168,9.68746563,9.68846637,9.69805906,9.72279184,9.73178774,9.76037332,9.7537575,9.75177054,9.74316339,9.74124401,9.73660974,9.73256986,9.72502385,9.72153036,9.7153811,9.7082964,9.70284123,9.70062055,9.6999743,9.69493349,9.68831297,9.6785605,9.66721348,9.65852097,9.65593627,9.65109711,9.6476152,9.65213674,9.6641015,9.66980065,9.67600168],"lat":[45.00628631,45.00569577,45.00555472,44.99613454,45.00366828,44.99567135,44.98815707,44.97795679,44.97051631,44.96489244,44.96452683,44.96504293,44.96344857,44.9502369,44.94155414,44.93425622,44.93628983,44.93168753,44.92936066,44.92832039,44.92854022,44.93018267,44.94139445,44.94769965,44.94467145,44.94588359,44.95736173,44.95890287,44.96519647,44.96583869,45.00445047,45.00628631]}]],[[{"lng":[9.70036713,9.70218329,9.69722719,9.69981773,9.71908475,9.68374435,9.66947098,9.66446982,9.66368911,9.66299561,9.6606415,9.659992,9.65901338,9.64796743,9.62797083,9.61874029,9.61802411,9.61186792,9.61107349,9.61052544,9.6112004,9.61448281,9.62677483,9.62857178,9.63973778,9.64683244,9.65051534,9.65811238,9.66712491,9.67649449,9.68611416,9.68995346,9.70036713],"lat":[44.89911553,44.89640376,44.89082587,44.88619198,44.86845527,44.8302154,44.83318065,44.83063524,44.82764208,44.82673689,44.82440998,44.82402664,44.8236182,44.82106178,44.8199582,44.82257421,44.82657502,44.83534023,44.83678482,44.84119879,44.84280655,44.84567862,44.86015019,44.86244484,44.87177199,44.87450466,44.87664423,44.88558474,44.89406638,44.90036668,44.90515238,44.90843298,44.89911553]}]],[[{"lng":[9.81947858,9.81598201,9.81397147,9.81136175,9.81075383,9.80117635,9.77636229,9.7537575,9.76037332,9.76013097,9.76002394,9.75867938,9.75853471,9.79750955,9.84130954,9.83365345,9.83186424,9.81917364,9.81947858],"lat":[44.99206913,44.9879353,44.98749054,44.98593379,44.98510094,44.94223841,44.97353844,44.97795679,44.98815707,44.99189445,44.99243528,44.99533381,44.99782829,45.03527145,45.01969009,45.00988021,45.00725573,44.99292648,44.99206913]}]],[[{"lng":[9.63509288,9.63049343,9.63572712,9.65109711,9.65852097,9.65608141,9.64322573,9.63774275,9.63537772,9.631019,9.62195913,9.60751328,9.6055651,9.60944514,9.60461324,9.57891242,9.56808709,9.55864112,9.57907804,9.58065186,9.582873,9.58862075,9.5979174,9.59415449,9.60699387,9.62751525,9.63509288],"lat":[44.96963146,44.96303154,44.96275946,44.95736173,44.94467145,44.92412502,44.92234375,44.91348953,44.8977582,44.90222037,44.90072173,44.88685535,44.88341791,44.87793305,44.86748932,44.85574878,44.87203388,44.87838189,44.88867745,44.89155011,44.90332244,44.90801002,44.92864828,44.95697905,44.95662347,44.97015045,44.96963146]}]],[[{"lng":[9.55744662,9.57158695,9.57545086,9.63355863,9.63248721,9.6155048,9.60510266,9.57873475,9.57785261,9.57457333,9.56761297,9.54744182,9.54260914,9.54163282,9.53351594,9.52986079,9.53472338,9.52884409,9.52590366,9.53150647,9.52809749,9.52680615,9.52679916,9.52711307,9.53202619,9.54740299,9.55133039,9.53721564,9.55744662],"lat":[45.10750332,45.0994129,45.07023691,45.0559676,45.05324601,45.04230261,45.04320436,45.03231383,45.03216977,45.03756039,45.04336534,45.02749464,45.02897598,45.02909765,45.02955444,45.03093072,45.03644417,45.03882102,45.04345252,45.05235996,45.06082482,45.06931944,45.0699406,45.07230662,45.07843202,45.08664994,45.09211309,45.1260537,45.10750332]}]],[[{"lng":[9.76187238,9.77636229,9.7957968,9.76299154,9.75776565,9.71908475,9.69981773,9.69722719,9.70218329,9.70200805,9.68995346,9.69681816,9.69845771,9.701724,9.70332183,9.71490442,9.71947708,9.72153036,9.7232827,9.72456058,9.72470796,9.72502385,9.72549163,9.73256986,9.7537575,9.76187238],"lat":[44.97683171,44.97353844,44.94277112,44.92635939,44.89414904,44.86845527,44.88619198,44.89082587,44.89640376,44.89891641,44.90843298,44.91986883,44.92133513,44.92319653,44.92433895,44.93362908,44.93851543,44.94155414,44.94483777,44.94767427,44.9493117,44.9502369,44.95114311,44.96344857,44.97795679,44.97683171]}]],[[{"lng":[9.93571695,9.94263142,9.95428751,9.96335042,9.96889912,9.96758303,9.97728503,9.98084853,9.98126149,9.98146101,9.98396075,9.98476179,9.94794766,9.92893764,9.93429038,9.93431595,9.9326514,9.9202954,9.90762024,9.88125811,9.88393778,9.8869939,9.88749854,9.887952,9.89669116,9.89549693,9.89644289,9.90631807,9.91053777,9.93571695],"lat":[45.05727619,45.03827957,45.03833579,45.04198643,45.04123735,45.03848496,45.03562079,45.03464505,45.02240803,45.02071397,45.01771285,45.01705782,45.005766,45.01193543,45.02191982,45.02271177,45.0233825,45.02698445,45.00968537,45.01762442,45.01938608,45.02332319,45.02558773,45.02864481,45.03306843,45.03952309,45.04155908,45.04860154,45.05844292,45.05727619]}]],[[{"lng":[9.50505162,9.53202619,9.52679916,9.53150647,9.52884409,9.50355858,9.500302,9.48840252,9.46214911,9.4583928,9.46027722,9.47189918,9.47351662,9.47520873,9.48263648,9.48369378,9.47969833,9.48352062,9.48020561,9.50505162],"lat":[45.10207599,45.07843202,45.0699406,45.05235996,45.03882102,45.04697391,45.04630408,45.03540941,45.03446547,45.03913479,45.04761564,45.06207006,45.06269349,45.06223732,45.06297317,45.06635957,45.07882584,45.08771205,45.09880751,45.10207599]}]],[[{"lng":[9.58727549,9.58862075,9.57970493,9.57907804,9.57835311,9.56633855,9.55864112,9.57982104,9.57295885,9.56795019,9.55891205,9.55834198,9.56059095,9.56500306,9.55919878,9.55503421,9.54481419,9.53966066,9.53517169,9.53314351,9.53068631,9.52975762,9.51939495,9.51581804,9.50457469,9.49837297,9.47564771,9.47989254,9.47688957,9.47153836,9.45662305,9.45153006,9.44888315,9.46121266,9.50071154,9.50273574,9.50227733,9.50870942,9.51500318,9.51643243,9.51986019,9.54095712,9.58727549],"lat":[44.91646982,44.90801002,44.88931342,44.88867745,44.88836605,44.88607674,44.87838189,44.85044193,44.84501229,44.83879885,44.82918416,44.82779163,44.82098401,44.81557897,44.80388674,44.80342094,44.80845735,44.80909397,44.80229146,44.80036547,44.79852246,44.79789664,44.79844834,44.7957459,44.81933678,44.8209664,44.81838067,44.83151503,44.84321235,44.84635831,44.85013678,44.85426198,44.85727911,44.87825881,44.89090236,44.88921909,44.88747471,44.88308026,44.88316006,44.89430714,44.89944974,44.91117138,44.91646982]},{"lng":[9.48052555,9.48155359,9.4821116,9.48016569,9.48052555],"lat":[44.83014404,44.83016672,44.83090253,44.83127081,44.83014404]}]],[[{"lng":[9.92507849,9.94849146,9.93691155,9.89903639,9.8918396,9.88868326,9.88216705,9.87667338,9.87333358,9.87252041,9.88066133,9.86500696,9.85814665,9.85613268,9.85539638,9.85524753,9.85375602,9.84978305,9.83646923,9.82326066,9.81975276,9.8141446,9.82006808,9.81626489,9.79938341,9.79109082,9.78696656,9.76803607,9.76353369,9.75929259,9.79925736,9.77964649,9.78247962,9.78303749,9.78336482,9.7838721,9.7841823,9.7841356,9.78441995,9.8401081,9.86251992,9.86285739,9.86302176,9.86381862,9.89333545,9.91487473,9.92022574,9.90901028,9.91508277,9.91911371,9.92507849],"lat":[44.85794328,44.83771313,44.83681792,44.80701027,44.80444707,44.80394054,44.80366699,44.78741537,44.78473129,44.78277504,44.76868712,44.7621091,44.76387129,44.76610995,44.76759185,44.76778199,44.76775715,44.76655349,44.75815367,44.75867276,44.76167775,44.7572116,44.7509178,44.73920612,44.73136753,44.72244099,44.71720316,44.71007491,44.72493315,44.7347199,44.77446213,44.78319481,44.78706439,44.78812282,44.78895777,44.79187999,44.79518168,44.79733351,44.79779066,44.81305831,44.82675454,44.82732813,44.82986548,44.83070565,44.83688243,44.83699659,44.84092353,44.85061261,44.85753418,44.85766755,44.85794328]}]],[[{"lng":[9.66721348,9.6785605,9.68392695,9.68831297,9.6890568,9.69493349,9.69675412,9.69945294,9.6999743,9.70033259,9.70062055,9.70284123,9.70616196,9.7082964,9.7153811,9.70332183,9.69845771,9.69681816,9.68995346,9.68810735,9.68611416,9.68400941,9.67649449,9.66712491,9.65051534,9.62857178,9.61186792,9.56795019,9.60461324,9.60944514,9.60920271,9.60627829,9.6055651,9.60572197,9.60751328,9.61692225,9.62195913,9.631019,9.63256826,9.63497028,9.63537772,9.63591569,9.64322573,9.65264197,9.65608141,9.65852097,9.66721348],"lat":[44.94769965,44.94139445,44.93647439,44.93018267,44.92986311,44.92854022,44.92819606,44.92817055,44.92832039,44.92860626,44.92936066,44.93168753,44.93479373,44.93628983,44.93425622,44.92433895,44.92133513,44.91986883,44.90843298,44.9065897,44.90515238,44.90391371,44.90036668,44.89406638,44.87664423,44.86244484,44.83534023,44.83879885,44.86748932,44.87793305,44.8813551,44.88260395,44.88341791,44.8838852,44.88685535,44.89637407,44.90072173,44.90222037,44.89796284,44.89756243,44.8977582,44.89830435,44.92234375,44.92027388,44.92412502,44.94467145,44.94769965]}]],[[{"lng":[10.0407025,10.05022356,10.08347462,10.04545946,10.03400763,10.03102302,10.0073774,9.997304,9.9908842,9.99586057,9.98084853,9.97728503,9.96907353,9.96758303,9.96644945,9.96889912,9.99018199,9.99349751,9.99407801,9.99463795,10.00770094,10.02243556,10.03886494,10.03967154,10.0407025],"lat":[45.06377312,45.04127903,45.0439638,45.0292472,45.00076129,44.98383775,44.99518328,45.00114174,45.00410522,45.01229861,45.03464505,45.03562079,45.03803123,45.03848496,45.03902568,45.04123735,45.05538563,45.05323242,45.05302032,45.05308745,45.06365803,45.05798197,45.06190248,45.06225521,45.06377312]}]],[[{"lng":[9.25631915,9.29850587,9.30478975,9.28508507,9.26406454,9.2452712,9.23626769,9.23490407,9.21989107,9.20788302,9.20193134,9.19939175,9.24048279,9.23508364,9.25631915],"lat":[44.68517509,44.68102155,44.6443067,44.65944113,44.6543873,44.65617118,44.6677972,44.67091638,44.67419612,44.67146389,44.67161711,44.67859991,44.68830633,44.71635982,44.68517509]}]],[[{"lng":[9.40407522,9.41453933,9.41528733,9.42545362,9.42150901,9.4169622,9.40047391,9.38974608,9.38185406,9.38262916,9.34949191,9.33754824,9.3362893,9.34746312,9.40407522],"lat":[45.02382052,45.00550029,45.00540755,45.00472392,44.97708287,44.974453,44.97059619,44.97025404,44.97171319,44.95501204,44.97007943,44.96538035,44.96657234,44.99741085,45.02382052]}]],[[{"lng":[9.72812019,9.72838063,9.71704587,9.71150087,9.71853091,9.72218356,9.73307409,9.73536287,9.76346398,9.76255513,9.75606432,9.75452875,9.75513414,9.75700374,9.74512402,9.74231995,9.76047516,9.67497944,9.65528952,9.6219463,9.65645413,9.65552543,9.66757602,9.66795483,9.66391919,9.66617565,9.6741016,9.67772531,9.68286986,9.69856524,9.70560957,9.72812019],"lat":[44.51304472,44.50763648,44.5063128,44.49743488,44.49746288,44.497989,44.4910236,44.4731746,44.46897502,44.45529699,44.44497803,44.44186424,44.43703829,44.43129667,44.42354239,44.41638546,44.3900499,44.36471301,44.4116603,44.42658197,44.45817079,44.47501115,44.47574259,44.47918838,44.48355121,44.48734619,44.49101778,44.48796244,44.48587919,44.48521709,44.50493461,44.51304472]}]],[[{"lng":[9.68373281,9.70201141,9.71230068,9.72299616,9.74146677,9.76515641,9.78586329,9.81490905,9.81474301,9.81966841,9.83354556,9.83182567,9.79098535,9.7834584,9.76971003,9.74106996,9.74100698,9.77123842,9.80089339,9.82192613,9.80144098,9.80003555,9.78058277,9.74903329,9.7435135,9.73640909,9.72798442,9.72529659,9.72346189,9.72284529,9.72227286,9.72163783,9.71603554,9.70203186,9.69597791,9.69449786,9.69187234,9.684048,9.67164079,9.66004697,9.66282012,9.66344122,9.65944244,9.63812807,9.63243665,9.62461853,9.61601616,9.61600784,9.61785511,9.61786274,9.61620058,9.61430492,9.60975419,9.60798707,9.60249216,9.5915936,9.58179727,9.56950349,9.55340732,9.55236996,9.55255787,9.55383365,9.55869394,9.56328414,9.56764203,9.57616241,9.57661884,9.58094846,9.58497462,9.60176595,9.60228557,9.60217492,9.60658158,9.60978937,9.62794939,9.63179549,9.63503128,9.65355534,9.66298803,9.67521222,9.68373281],"lat":[44.68031919,44.67138147,44.67629156,44.67802483,44.67991392,44.68134207,44.67579104,44.6822222,44.67937864,44.66985491,44.66166133,44.65782536,44.62873616,44.62949924,44.63827106,44.6221571,44.6191867,44.609678,44.61040114,44.59909765,44.57517956,44.55638312,44.54663295,44.56030303,44.55778238,44.55143661,44.54609808,44.54748357,44.54971884,44.55069503,44.55225608,44.55282726,44.55574334,44.55310251,44.56152094,44.57034342,44.57614798,44.58585481,44.58705376,44.58669824,44.59506983,44.60379229,44.61233179,44.60173994,44.60328402,44.60277789,44.59959273,44.5928409,44.58882482,44.58835664,44.58231594,44.58173197,44.58140526,44.58098257,44.57704158,44.56800151,44.57303924,44.58490799,44.59053268,44.5967314,44.59794583,44.59960511,44.6045058,44.60745407,44.60720743,44.60990151,44.61017829,44.61466658,44.62275723,44.62895371,44.62922104,44.6294917,44.63257422,44.6343036,44.6394176,44.64061171,44.66328882,44.67172757,44.68022544,44.68761677,44.68031919]}]],[[{"lng":[9.66092052,9.66344122,9.66282012,9.65374216,9.65271644,9.66752102,9.65955327,9.66657072,9.66125836,9.65821672,9.65267922,9.64682038,9.64489851,9.631837,9.61791616,9.61651934,9.61425174,9.61782521,9.60381868,9.60532648,9.5928022,9.57795886,9.55830404,9.52766495,9.5208454,9.51213298,9.51141107,9.50842997,9.50621347,9.50394878,9.49680342,9.49632331,9.50460767,9.49109549,9.51474364,9.53229683,9.53691675,9.53914212,9.54003787,9.54141006,9.54598661,9.54909803,9.55340732,9.55536076,9.56732126,9.56950349,9.57770234,9.58179727,9.5915936,9.61620058,9.61786274,9.61600784,9.61601616,9.63812807,9.64807433,9.65944244,9.66092052],"lat":[44.61153104,44.60379229,44.59506983,44.57197037,44.54810149,44.52755306,44.51751644,44.51064272,44.49944732,44.49407231,44.49257364,44.48921297,44.48714422,44.49205165,44.48964308,44.48837225,44.48081324,44.477526,44.46405185,44.45067486,44.45354939,44.4660222,44.44013813,44.44886339,44.45497153,44.46732663,44.47247938,44.47657992,44.47890344,44.48020985,44.4827304,44.48394784,44.52996,44.55397926,44.56331431,44.58549258,44.58787462,44.58875539,44.58889521,44.58878966,44.58781363,44.58778969,44.59053268,44.59060421,44.58590013,44.58490799,44.57930777,44.57303924,44.56800151,44.58231594,44.58835664,44.5928409,44.59959273,44.60173994,44.61005623,44.61233179,44.61153104]}]],[[{"lng":[9.98525068,10.01468614,10.02126749,10.04663391,10.04504716,10.05172768,10.06806229,10.06801341,10.06515622,10.07142278,10.06519892,10.00453872,9.9712568,9.90334513,9.89995048,9.90762878,9.90738043,9.90348349,9.90610978,9.90406548,9.88636603,9.90884964,9.92778544,9.92833222,9.93102211,9.93561931,9.93794199,9.9386889,9.94865114,9.94390553,9.92578164,9.9478188,9.95955219,9.97764833,9.98525068],"lat":[44.59501242,44.56314008,44.56297337,44.57604043,44.57042839,44.56549086,44.5557394,44.55444349,44.54482845,44.53782886,44.52430221,44.49288363,44.46324668,44.470394,44.47270748,44.48151885,44.48983477,44.50125399,44.5067608,44.52491725,44.53753357,44.54852002,44.55272498,44.5586082,44.56152114,44.56399526,44.56434532,44.56459126,44.57144143,44.58269733,44.58777905,44.60568426,44.59504438,44.60652208,44.59501242]}]],[[{"lng":[9.82326066,9.83183852,9.84411554,9.85015228,9.85943483,9.85503883,9.84574639,9.87363433,9.88328475,9.86478147,9.82701367,9.8185769,9.81490905,9.80734995,9.79864167,9.78586329,9.78472738,9.76599873,9.76515641,9.76580303,9.76216622,9.78696656,9.81526651,9.81626489,9.81665225,9.81831758,9.82006808,9.8141446,9.82326066],"lat":[44.75867276,44.75154386,44.75223695,44.75037372,44.73313694,44.72964105,44.70812274,44.70069296,44.69119327,44.69274826,44.68852685,44.68551784,44.6822222,44.67853091,44.67653061,44.67579104,44.67576285,44.68014812,44.68134207,44.69785703,44.70541629,44.71720316,44.73826801,44.73920612,44.73980651,44.74325145,44.7509178,44.7572116,44.75867276]}]],[[{"lng":[9.80421451,9.84003542,9.83260365,9.86109028,9.86366692,9.86450763,9.88636603,9.89700123,9.90406548,9.90348349,9.90738043,9.90760989,9.90762878,9.90748047,9.90346033,9.90171393,9.89995048,9.89264409,9.81993668,9.75738202,9.74231995,9.75700374,9.75452875,9.76346398,9.73536287,9.73307409,9.71150087,9.72838063,9.72812019,9.70560957,9.701805,9.70060701,9.6980704,9.69811428,9.69875594,9.70436246,9.70480768,9.70487636,9.7048687,9.70326109,9.70043012,9.70012144,9.70000012,9.70203186,9.70584694,9.7121207,9.71603554,9.72163783,9.72227286,9.72346189,9.72529659,9.72798442,9.7435135,9.74903329,9.76198042,9.77113926,9.78058277,9.78135146,9.80003555,9.80240571,9.80344765,9.80421451],"lat":[44.5663466,44.55801345,44.55074882,44.52955259,44.52896901,44.52921168,44.53753357,44.53194995,44.52491725,44.50125399,44.48983477,44.48841052,44.48151885,44.48011561,44.4737871,44.47305368,44.47270748,44.47022156,44.4664229,44.40715774,44.41638546,44.43129667,44.44186424,44.46897502,44.4731746,44.4910236,44.49743488,44.50763648,44.51304472,44.50493461,44.50749678,44.50935868,44.51798971,44.5195559,44.52579978,44.53880109,44.54022974,44.54070646,44.5420929,44.54755837,44.55077168,44.5512777,44.55270986,44.55310251,44.55520359,44.55672209,44.55574334,44.55282726,44.55225608,44.54971884,44.54748357,44.54609808,44.55778238,44.56030303,44.55026057,44.54721025,44.54663295,44.54669071,44.55638312,44.55940937,44.56644201,44.5663466]}]],[[{"lng":[10.05650741,10.07031277,10.09860814,10.09263955,10.09037889,10.09549596,10.09713074,10.10613831,10.12593193,10.14585635,10.13564019,10.13066962,10.08444729,10.07437836,10.06333358,10.05373427,10.05552833,10.06243614,10.06479711,10.06570426,10.05859281,10.05344948,10.04664672,10.03855159,10.03304268,10.02329823,10.01437655,10.01632657,10.01651451,10.01232683,10.02185172,10.02080044,10.01703569,10.01234052,10.00933154,10.0025218,10.00180459,9.99890216,9.99775105,9.99391349,9.98740878,9.99416253,10.00442041,10.00778096,10.01607095,10.03003943,10.03102302,10.0333834,10.03513691,10.03948856,10.03983613,10.05650741],"lat":[45.00119447,45.00532378,45.00180459,44.99367096,44.98651435,44.98445268,44.98437397,44.9849355,44.98541689,44.98526371,44.95645004,44.95218006,44.93259907,44.91729186,44.90852828,44.9100666,44.9139569,44.91619735,44.91849785,44.92752458,44.93043814,44.92775811,44.93275374,44.93432198,44.93890881,44.93247926,44.92096432,44.91802135,44.91359069,44.90164624,44.89806862,44.89162357,44.89070295,44.88790002,44.89695569,44.90447835,44.9047547,44.9046541,44.90474519,44.90771329,44.93593178,44.95520548,44.96836653,44.96982225,44.97393465,44.98203724,44.98383775,44.98672402,44.99111906,45.01218887,45.00965619,45.00119447]}]],[[{"lng":[10.18930262,10.21126966,10.17101493,10.16807447,10.16689854,10.15987942,10.14739571,10.1399316,10.13345027,10.11169527,10.09655293,10.09532033,10.07706188,10.07108559,10.06997195,10.06806229,10.05172768,10.04504716,10.04481211,10.04493261,10.04663391,10.04781805,10.04976706,10.09614197,10.11087316,10.11147019,10.12256051,10.13930001,10.15302095,10.15386829,10.16109354,10.16198624,10.16279418,10.16523715,10.17290751,10.17834758,10.18930262],"lat":[44.63942592,44.61930812,44.59737494,44.57237364,44.57214261,44.56936481,44.56647508,44.56214761,44.55645951,44.56033738,44.55845822,44.55517512,44.54679638,44.54140604,44.5410834,44.5557394,44.56549086,44.57042839,44.5706646,44.57387741,44.57604043,44.57815416,44.57936961,44.58979089,44.61173158,44.61197784,44.61609151,44.61556562,44.61676927,44.61691376,44.62035148,44.62090954,44.6216035,44.62408129,44.63983799,44.64462979,44.63942592]}]],[[{"lng":[10.2384203,10.28318844,10.25825515,10.24478639,10.23908694,10.23489937,10.22718837,10.22081016,10.18938958,10.1566313,10.15434576,10.15020862,10.13942665,10.12097093,10.15519901,10.16902228,10.17064286,10.17323246,10.18065147,10.18272184,10.18266581,10.18216355,10.18181877,10.18559964,10.18627549,10.19210791,10.21353331,10.24283663,10.2384203],"lat":[44.77363164,44.7652514,44.73780199,44.72933446,44.73151197,44.7258229,44.72614897,44.72718071,44.73631651,44.7022913,44.6990736,44.68965391,44.69520842,44.71201833,44.73054599,44.74031678,44.74300986,44.75550539,44.76618657,44.76980205,44.77015371,44.77031196,44.77075662,44.77642483,44.77733602,44.78192041,44.80547846,44.79922186,44.77363164]}]],[[{"lng":[10.4221255,10.42516317,10.41366834,10.41261651,10.41293173,10.41344478,10.41724755,10.42319101,10.42298031,10.40721232,10.40977123,10.3944343,10.38024062,10.3668924,10.3282996,10.33094678,10.3347982,10.33787016,10.33943471,10.34464801,10.34507738,10.34638183,10.33882235,10.32125072,10.32725953,10.32955715,10.34446402,10.35602802,10.39928495,10.4221255],"lat":[44.96549464,44.96020821,44.95391514,44.95083149,44.94972936,44.94893986,44.94584337,44.93141803,44.92853103,44.91365169,44.89828619,44.90094107,44.90484934,44.91446412,44.91884234,44.92319548,44.92426677,44.92396076,44.92258311,44.92499739,44.92547844,44.93358282,44.93985606,44.94793743,44.9550963,44.95686995,44.96380691,44.96219385,44.98465377,44.96549464]}]],[[{"lng":[9.67164079,9.70203186,9.70012144,9.70487636,9.70287983,9.69875594,9.6980704,9.70560957,9.69856524,9.68286986,9.6754696,9.67490533,9.6741016,9.67314635,9.66644199,9.66617565,9.664081,9.66391919,9.66434905,9.66795483,9.66757602,9.64867499,9.64099804,9.64338962,9.64525733,9.64682038,9.66125836,9.65955327,9.66752102,9.65271644,9.65679596,9.65385147,9.65374216,9.67164079],"lat":[44.58705376,44.55310251,44.5512777,44.54070646,44.53790996,44.52579978,44.51798971,44.50493461,44.48521709,44.48587919,44.49076662,44.49091401,44.49101778,44.49106842,44.48754269,44.48734619,44.48562088,44.48355121,44.48240651,44.47918838,44.47574259,44.47513128,44.48008107,44.48258838,44.48546769,44.48921297,44.49944732,44.51751644,44.52755306,44.54810149,44.55934931,44.56943104,44.57197037,44.58705376]}]],[[{"lng":[10.17362533,10.19275251,10.18974039,10.18767237,10.1746097,10.17362893,10.16582154,10.15464534,10.15236095,10.14261318,10.13241404,10.12530247,10.13802132,10.13676822,10.14905848,10.12951432,10.12902711,10.12613624,10.11820699,10.10109299,10.10058707,10.0896528,10.08699629,10.07095713,10.05317828,9.98928471,10.00693708,9.96980943,10.00453872,10.04625073,10.06519892,10.07142278,10.07108559,10.07427047,10.07706188,10.08721392,10.09532033,10.09655293,10.16689854,10.17362533],"lat":[44.56602849,44.55446913,44.5493421,44.54732005,44.53871368,44.53813859,44.53536475,44.5333627,44.53240449,44.52624566,44.51742568,44.50422616,44.49408021,44.48464893,44.46783501,44.45367972,44.45309937,44.44533157,44.43539847,44.43917485,44.43899966,44.43005679,44.42831758,44.42636247,44.37303332,44.40433116,44.4317343,44.45781236,44.49288363,44.50959608,44.52430221,44.53782886,44.54140604,44.54492314,44.54679638,44.55050825,44.55517512,44.55845822,44.57214261,44.56602849]}]],[[{"lng":[10.24806587,10.25826177,10.27499967,10.28037823,10.28517347,10.29795413,10.29339209,10.28453761,10.27982507,10.27227722,10.26263904,10.23867623,10.17834758,10.18147228,10.18212314,10.18242051,10.18327996,10.18539961,10.22784245,10.24100319,10.24806587],"lat":[44.72210584,44.71306368,44.70776473,44.70780357,44.70943312,44.70416689,44.69130871,44.68810481,44.68212616,44.67337921,44.67282903,44.65235903,44.64462979,44.64830649,44.6499652,44.65354507,44.65681302,44.65940174,44.69785686,44.7224979,44.72210584]}]],[[{"lng":[10.03855159,10.05344948,10.06570426,10.06479711,10.05552833,10.05373427,10.05512832,10.10915444,10.10180727,10.10829925,10.10225341,10.10274895,10.10603066,10.10491279,10.10499846,10.094839,10.09400843,10.09307307,10.09470007,10.03414078,10.02482577,10.0413598,10.04103976,10.04633713,10.05148394,10.0513617,10.01512274,9.98668165,9.98433171,9.9832592,9.98350793,9.98409924,9.99463695,10.00325577,10.00672422,10.00881427,10.00947845,10.00997826,10.01089591,10.01101741,10.01234052,10.02053273,10.02080044,10.02185242,10.02185172,10.01232701,10.01232683,10.01265845,10.01591843,10.01651451,10.01632657,10.01414551,10.01437655,10.01596051,10.02329823,10.03304268,10.03855159],"lat":[44.93432198,44.92775811,44.92752458,44.91849785,44.9139569,44.9100666,44.90871243,44.9053378,44.89603784,44.8839033,44.87736912,44.86843751,44.85736024,44.85449941,44.847729,44.84248862,44.84072317,44.83587999,44.80775077,44.77166739,44.78304013,44.7922168,44.82292605,44.8290801,44.83663062,44.83686579,44.85393759,44.84556288,44.85172257,44.85711507,44.85759904,44.85813407,44.86738692,44.87238867,44.87309631,44.87388806,44.87422426,44.87457092,44.87564305,44.87607406,44.88790002,44.89080677,44.89162357,44.89739347,44.89806862,44.90093508,44.90164624,44.90249849,44.90923903,44.91359069,44.91802135,44.92007518,44.92096432,44.92384887,44.93247926,44.93890881,44.93432198]}]],[[{"lng":[10.34507738,10.33943471,10.33094678,10.3282996,10.34979938,10.3668924,10.37659043,10.3944343,10.38725383,10.38944832,10.40451512,10.41087276,10.40651542,10.36555059,10.36446475,10.35982737,10.36130695,10.35468876,10.34328995,10.34192922,10.33179816,10.32543358,10.31295284,10.29684848,10.29153694,10.32125072,10.34507738],"lat":[44.92547844,44.92258311,44.92319548,44.91884234,44.90905711,44.91446412,44.91120931,44.90094107,44.89308876,44.892711,44.89126806,44.89050384,44.88007023,44.87021516,44.87033616,44.87123768,44.87402129,44.87560173,44.87813094,44.878417,44.87996694,44.88124728,44.8841911,44.88541036,44.90607617,44.94793743,44.92547844]}]],[[{"lng":[10.35438867,10.36745315,10.38635171,10.41539095,10.41386308,10.41678211,10.40261035,10.39913187,10.36176783,10.34075147,10.34435066,10.32287976,10.34334948,10.32116695,10.35438867],"lat":[44.6827875,44.6695694,44.67488695,44.66685726,44.66396285,44.63947623,44.61644298,44.58548124,44.58609498,44.59349163,44.61222843,44.61951007,44.656451,44.67123062,44.6827875]}]],[[{"lng":[9.90599032,9.90761178,9.90356431,9.915264,9.92904078,9.94390553,9.94868808,9.94865114,9.9480311,9.94536253,9.9386889,9.93561931,9.93150685,9.93102211,9.92833222,9.92868506,9.92778544,9.92074171,9.90884964,9.88636603,9.87250724,9.8650649,9.86366692,9.83260365,9.83454003,9.84003542,9.83782321,9.82866365,9.82418494,9.80344765,9.82192613,9.84208749,9.84410154,9.8703208,9.89877721,9.89952337,9.90119015,9.90328613,9.90599032],"lat":[44.61689873,44.61418511,44.61305589,44.59093368,44.58319733,44.58269733,44.57169264,44.57144143,44.57078885,44.56854233,44.56459126,44.56399526,44.56191329,44.56152114,44.5586082,44.55355491,44.55272498,44.54916297,44.54852002,44.53753357,44.533175,44.52945054,44.52896901,44.55074882,44.55321937,44.55801345,44.55828177,44.5586637,44.55960535,44.56644201,44.59909765,44.60298387,44.6037072,44.61689705,44.62473383,44.62489,44.62517394,44.62458122,44.61689873]}]],[[{"lng":[9.97670309,10.00576832,10.01838589,10.01931218,10.02182372,10.07061014,10.09116961,10.05329354,10.03927635,10.01621242,10.00914698,9.98798116,9.99042018,9.98096443,9.97780256,9.9769318,9.97552689,9.97303673,9.97196287,9.96808072,9.96350403,9.96310323,9.952011,9.94707611,9.87624159,9.8994155,9.89990441,9.96670113,9.96958453,9.96921857,9.97670309],"lat":[44.7251994,44.72500113,44.71723736,44.71246688,44.71098607,44.70375137,44.69148466,44.68227981,44.66119868,44.66228849,44.6781863,44.68299858,44.66099369,44.65826658,44.65775355,44.65772499,44.65818712,44.66012586,44.66304277,44.6662536,44.66868692,44.66886136,44.67122592,44.6785829,44.69823335,44.7125289,44.71637803,44.70770303,44.71708599,44.72844098,44.7251994]}]],[[{"lng":[9.87347212,9.88328475,9.88448824,9.88975176,9.89935023,9.90885266,9.88804777,9.91097462,9.92443076,9.93566693,9.90761178,9.89952337,9.88767584,9.8703208,9.85468693,9.84410154,9.84208749,9.8285231,9.82192613,9.80089339,9.74100698,9.76971003,9.77936914,9.78124849,9.7834584,9.79098535,9.80534164,9.81257656,9.82435242,9.83182567,9.83354556,9.81474301,9.8185769,9.87347212],"lat":[44.69158384,44.69119327,44.68734896,44.68660591,44.68711587,44.68066698,44.65529094,44.66042176,44.65019494,44.61868498,44.61418511,44.62489,44.61974328,44.61689705,44.60926402,44.6037072,44.60298387,44.60225486,44.59909765,44.61040114,44.6191867,44.63827106,44.63568487,44.63198104,44.62949924,44.62873616,44.63897061,44.65165777,44.65603855,44.65782536,44.66166133,44.67937864,44.68551784,44.69158384]}]],[[{"lng":[10.27446659,10.30378228,10.35883187,10.34446402,10.32725953,10.32018926,10.31481036,10.30781027,10.3043171,10.27417876,10.2399881,10.24321536,10.24558612,10.24659329,10.24676934,10.24572892,10.24443532,10.25924482,10.24442392,10.23261597,10.23440673,10.23326899,10.24218372,10.24419683,10.24476492,10.24518635,10.24534274,10.24476045,10.24437422,10.24360372,10.24275715,10.24015553,10.23930326,10.23441476,10.2330611,10.2299982,10.24379984,10.23480907,10.23739026,10.25179823,10.25458478,10.25562628,10.25719945,10.26511448,10.27446659],"lat":[44.99793011,44.99939951,44.96548672,44.96380691,44.9550963,44.94697749,44.93901884,44.93047535,44.92675249,44.87893207,44.87690493,44.88742923,44.89049108,44.8913893,44.89191849,44.89769113,44.90172014,44.93548624,44.9434444,44.9436985,44.95628186,44.97122833,44.96416422,44.96402527,44.96449618,44.96522075,44.9660022,44.96897918,44.96988358,44.97061213,44.97134149,44.97301714,44.97348548,44.97557287,44.9775049,44.99381332,45.00020818,44.9827161,44.97947449,44.9911189,44.9996401,45.0008529,45.00200582,45.004778,44.99793011]}]],[[{"lng":[10.17980978,10.16803355,10.17043162,10.15168863,10.14265084,10.12917996,10.12593193,10.11438453,10.10613831,10.09933007,10.09713074,10.09549596,10.09860814,10.06165614,10.05650741,10.05243013,10.0417783,10.03983613,10.03944801,10.03948856,10.04316293,10.04545946,10.08347462,10.1061908,10.16477342,10.18094596,10.17980978],"lat":[45.02216179,44.99173641,44.98116165,44.98513301,44.98544885,44.98545685,44.98541689,44.98518811,44.9849355,44.98463188,44.98437397,44.98445268,45.00180459,44.99912128,45.00119447,45.00580504,45.00899036,45.00965619,45.00994778,45.01218887,45.01955486,45.0292472,45.0439638,45.02213035,45.04432239,45.03046292,45.02216179]}]],[[{"lng":[10.60945751,10.66242978,10.65738412,10.63762466,10.56748216,10.57057856,10.56672028,10.56830978,10.56976696,10.57090473,10.56353402,10.60945751],"lat":[44.64524387,44.63069489,44.59599653,44.57288426,44.59154957,44.59381164,44.60477561,44.60466376,44.60592658,44.61313087,44.62081207,44.64524387]}]],[[{"lng":[10.66810935,10.68318434,10.68704497,10.69093661,10.69384417,10.69326411,10.70264748,10.70865066,10.7092013,10.73057031,10.73292079,10.70307781,10.70235174,10.70579926,10.69276677,10.6866744,10.67404455,10.66658745,10.65687293,10.65062336,10.65036398,10.6500674,10.65009865,10.65121885,10.65534778,10.65049935,10.65173676,10.65900892,10.65939755,10.66810935],"lat":[44.81668874,44.80978791,44.80733636,44.80465918,44.80123128,44.79955647,44.79442973,44.79217851,44.79213529,44.79596338,44.79055027,44.77623445,44.77477792,44.76224676,44.76498887,44.75479294,44.74964956,44.75162736,44.75641415,44.76312089,44.76379944,44.765343,44.76613591,44.77037965,44.77946156,44.81300625,44.81686826,44.81730295,44.81939781,44.81668874]}]],[[{"lng":[10.64517632,10.65881256,10.6566092,10.65689755,10.65813974,10.66225185,10.67020156,10.65482533,10.66819582,10.65342969,10.62152266,10.59041848,10.59778331,10.60246568,10.60295587,10.60426676,10.59768864,10.60218334,10.59369831,10.58284129,10.57531203,10.57048906,10.56656204,10.56679063,10.5702894,10.57079702,10.5709907,10.56995661,10.64517632],"lat":[44.5410149,44.53680249,44.53006457,44.52825088,44.52726056,44.52494115,44.5222054,44.502151,44.46778259,44.43330565,44.40585934,44.41087916,44.4198781,44.42206315,44.42299255,44.42774556,44.4389381,44.45255916,44.46816244,44.47390409,44.48093122,44.49280008,44.49923685,44.49978738,44.50679734,44.5083658,44.511361,44.51314422,44.5410149]}]],[[{"lng":[10.49634283,10.51154819,10.50540505,10.51298305,10.51755438,10.47224255,10.44757884,10.44646615,10.44575724,10.43617839,10.4397706,10.44068113,10.44128334,10.44764961,10.45816994,10.45984446,10.49546663,10.49722454,10.49756764,10.50210026,10.50727399,10.49634283],"lat":[44.70381381,44.69345895,44.68052638,44.67408609,44.66377249,44.65321894,44.63799617,44.64101364,44.64857454,44.65802187,44.66622733,44.67396233,44.6768805,44.68021183,44.68072613,44.68108284,44.7109641,44.7130116,44.71358774,44.7223123,44.72531783,44.70381381]}]],[[{"lng":[10.59151733,10.58976685,10.5957044,10.55879708,10.54773292,10.53631807,10.52570354,10.52681125,10.59151733],"lat":[44.91481517,44.9041992,44.87767297,44.88045133,44.8777212,44.88029689,44.89686792,44.91265783,44.91481517]}]],[[{"lng":[10.51985302,10.52681125,10.52702571,10.52570354,10.53222308,10.5258607,10.50620662,10.50065156,10.49624567,10.48349322,10.47304338,10.47055657,10.45516736,10.45490031,10.45265323,10.4643141,10.47431294,10.4637302,10.48979751,10.49422693,10.49604931,10.49942825,10.50431523,10.51985302],"lat":[44.91272645,44.91265783,44.91233368,44.89686792,44.88152669,44.88033361,44.88262454,44.88084327,44.88280951,44.85422337,44.85489879,44.83324032,44.83299188,44.83805898,44.84687811,44.85303062,44.87581668,44.89777374,44.90469219,44.90698384,44.90838229,44.91799709,44.9224276,44.91272645]}]],[[{"lng":[10.65900892,10.65049935,10.65009865,10.65010069,10.64972888,10.6494452,10.63754162,10.63240587,10.61395927,10.61116638,10.60875808,10.60170269,10.58900084,10.55530948,10.55621951,10.56070366,10.56308437,10.56413404,10.56762305,10.57636084,10.57646812,10.57647148,10.57629688,10.59656503,10.5984031,10.61524052,10.62253244,10.62814926,10.63596353,10.64030751,10.64116109,10.65851178,10.66166848,10.65760621,10.65900892],"lat":[44.81730295,44.81300625,44.76613591,44.76654927,44.76771548,44.76790781,44.77139287,44.7669394,44.77402826,44.77271115,44.76125047,44.75296967,44.74901746,44.76464762,44.76671039,44.77317609,44.77673797,44.77813695,44.77956096,44.78934303,44.78964529,44.78987799,44.79024413,44.79810495,44.79962312,44.81654872,44.82660421,44.83599446,44.84740092,44.85195666,44.85260155,44.8601016,44.84100282,44.82520467,44.81730295]}]],[[{"lng":[10.78283663,10.77544191,10.79702592,10.77855349,10.77569543,10.77375132,10.75697221,10.74635012,10.73797932,10.72048664,10.74384482,10.74514403,10.75745286,10.7628961,10.77824701,10.78114391,10.78821693,10.79388435,10.78283663],"lat":[44.88402771,44.86882599,44.8505652,44.83141448,44.82287547,44.81158103,44.81624702,44.80677322,44.80723403,44.82144776,44.8370541,44.85907581,44.86716439,44.87377348,44.88956352,44.89233599,44.89987262,44.89883849,44.88402771]}]],[[{"lng":[10.53272517,10.57444239,10.57646812,10.52197985,10.51165804,10.50913001,10.50602181,10.51337369,10.51662584,10.51011337,10.49705379,10.49148276,10.48829835,10.482786,10.48520857,10.53272517],"lat":[44.79888078,44.79360951,44.78964529,44.75694494,44.75547645,44.75413467,44.75652528,44.75695921,44.75908557,44.76126942,44.76050065,44.75907019,44.76003897,44.77354647,44.78445264,44.79888078]}]],[[{"lng":[10.51695571,10.53465287,10.56679063,10.56656204,10.56678696,10.57048906,10.57531203,10.5759267,10.58284129,10.59280317,10.59369831,10.59417299,10.60080057,10.60218334,10.60125436,10.59768864,10.60246568,10.59041848,10.57394941,10.55149122,10.55005407,10.53133714,10.52732094,10.5201176,10.47648649,10.47546569,10.47391985,10.4718588,10.46874945,10.46759902,10.46483677,10.46123644,10.45996313,10.45593114,10.46650027,10.46880129,10.47782604,10.47926219,10.48334256,10.47760711,10.47583039,10.46753056,10.51695571],"lat":[44.49998766,44.48337096,44.49978738,44.49923685,44.49871162,44.49280008,44.48093122,44.47994147,44.47390409,44.46899418,44.46816244,44.46758867,44.45807017,44.45255916,44.4451957,44.4389381,44.42206315,44.41087916,44.41961941,44.41953964,44.41931607,44.41581448,44.41449085,44.40697968,44.40800228,44.40786242,44.4072882,44.40573031,44.40490158,44.41718258,44.42021594,44.42138742,44.42221394,44.43127712,44.43697563,44.43754023,44.43871117,44.43938579,44.45116238,44.45944291,44.46368787,44.48952435,44.49998766]}]],[[{"lng":[10.78643542,10.76496176,10.70577599,10.70627869,10.72597888,10.75546416,10.75736168,10.74181609,10.73639508,10.73691583,10.77099874,10.78643542],"lat":[44.61932195,44.54042344,44.56589081,44.57616412,44.60578313,44.60826388,44.61644039,44.6166426,44.62124888,44.62717795,44.63753756,44.61932195]}]],[[{"lng":[10.50191331,10.50082667,10.50190069,10.50276118,10.50371281,10.5264815,10.52788843,10.53033929,10.53474886,10.53675016,10.53716707,10.53762715,10.54056809,10.54300981,10.54325738,10.56238447,10.56458928,10.56645365,10.53465287,10.51698854,10.51046579,10.46753056,10.45267298,10.44081509,10.43622233,10.43673452,10.44106653,10.4397278,10.42983185,10.41555714,10.41709781,10.46470525,10.47070793,10.46797733,10.4682904,10.46923998,10.47101814,10.47684547,10.47809312,10.47749567,10.47778323,10.49848047,10.50191331],"lat":[44.57101398,44.56695912,44.56563064,44.56530425,44.56509365,44.56572781,44.55405074,44.54764414,44.53918111,44.53678653,44.5363668,44.53615354,44.53697364,44.53209956,44.51679863,44.50191834,44.50063679,44.49988654,44.48337096,44.50037434,44.50339565,44.48952435,44.49712346,44.508716,44.5173263,44.5192554,44.5229999,44.52740103,44.51735247,44.52112686,44.53847816,44.54553407,44.54848178,44.55801457,44.5589468,44.56018593,44.5617925,44.56270755,44.56871408,44.56899187,44.57040156,44.57416494,44.57101398]}]],[[{"lng":[10.6925763,10.76496176,10.75970797,10.7590275,10.75160006,10.74137949,10.73003205,10.72286921,10.70263765,10.69301706,10.68720679,10.68432944,10.67359556,10.66819582,10.65423068,10.65482533,10.65779489,10.66314561,10.66405071,10.67020156,10.66898251,10.66225185,10.65813974,10.6566092,10.67070908,10.6794671,10.67489192,10.67573998,10.6925763],"lat":[44.56668142,44.54042344,44.53441433,44.53355158,44.52339388,44.51058655,44.50162595,44.49915051,44.48803421,44.47755419,44.47358903,44.47234414,44.47023331,44.46778259,44.47848281,44.502151,44.50487173,44.50681949,44.50767955,44.5222054,44.52314147,44.52494115,44.52726056,44.53006457,44.54042359,44.55438403,44.56471857,44.56662366,44.56668142]}]],[[{"lng":[10.59317246,10.59607041,10.61037866,10.62814926,10.5984031,10.52879928,10.52995325,10.53875325,10.57908864,10.56726678,10.57204327,10.57834861,10.58273643,10.583539,10.57802498,10.59317246],"lat":[44.85596451,44.84620117,44.84293054,44.83599446,44.79962312,44.80004518,44.81673319,44.83122085,44.84341709,44.84692875,44.85409175,44.86713426,44.87709279,44.87681161,44.86273223,44.85596451]}]],[[{"lng":[10.4374701,10.44081509,10.45267298,10.46753056,10.47083422,10.48334256,10.45593114,10.46759902,10.46874945,10.3711912,10.37010675,10.36980533,10.36515408,10.36447996,10.32826262,10.3304665,10.33079501,10.33201618,10.33405701,10.35996339,10.38508833,10.38401493,10.38802619,10.40879235,10.41182993,10.41454996,10.42004714,10.42037064,10.42084021,10.42094253,10.42082695,10.42049017,10.41436901,10.41371637,10.41574929,10.42701716,10.43033461,10.43041493,10.42983185,10.43034706,10.43596817,10.43913224,10.4397278,10.4408057,10.44120473,10.44106653,10.4407151,10.4374701],"lat":[44.51948922,44.508716,44.49712346,44.48952435,44.48539465,44.45116238,44.43127712,44.41718258,44.40490158,44.38434147,44.38840574,44.38894053,44.39668458,44.39739485,44.41953643,44.42809037,44.42837913,44.42773019,44.42856163,44.44388474,44.44850723,44.45517322,44.46479339,44.46851826,44.48500057,44.48931517,44.49092144,44.49129551,44.49250502,44.49464637,44.4955841,44.49621846,44.49948586,44.50117292,44.50356944,44.51283688,44.51630189,44.51649894,44.51735247,44.51886746,44.52596296,44.52771463,44.52740103,44.52671225,44.5235023,44.5229999,44.5225272,44.51948922]}]],[[{"lng":[10.5223089,10.554508,10.56083906,10.51298305,10.51154819,10.49634283,10.49741681,10.50727399,10.5223089],"lat":[44.72436225,44.72021759,44.71368285,44.67408609,44.69345895,44.70381381,44.70630237,44.72531783,44.72436225]}]],[[{"lng":[10.43483871,10.44019133,10.47809312,10.47684547,10.4682904,10.47070793,10.43591576,10.41709781,10.41555714,10.41749996,10.42983185,10.43041493,10.41574929,10.41436901,10.39292695,10.36275898,10.35104215,10.35169559,10.35342014,10.35453691,10.36332812,10.40160063,10.39872478,10.39955517,10.40306441,10.40350853,10.40261035,10.42756892,10.43483871],"lat":[44.59395957,44.58294519,44.56871408,44.56270755,44.5589468,44.54848178,44.54892009,44.53847816,44.52112686,44.51925723,44.51735247,44.51649894,44.50356944,44.49948586,44.49902021,44.51255952,44.52537436,44.52750924,44.52997351,44.5328501,44.54292736,44.56292673,44.58373973,44.58671917,44.59381074,44.59549977,44.61644298,44.60118963,44.59395957]}]],[[{"lng":[10.76270878,10.77375132,10.76114132,10.76111868,10.79064395,10.79195753,10.79836252,10.79884187,10.81064279,10.81148566,10.81204994,10.81499191,10.84204233,10.82751826,10.81619403,10.81762481,10.81745398,10.81541594,10.78290779,10.77104817,10.77395047,10.76754634,10.74296994,10.72645694,10.71835709,10.7245848,10.72380002,10.71073425,10.70622573,10.70579926,10.70544448,10.70397785,10.70235174,10.70246265,10.70307781,10.70670182,10.71928037,10.73292079,10.73057031,10.73536385,10.73797932,10.75333384,10.75697221,10.76270878],"lat":[44.81482628,44.81158103,44.79823676,44.79749289,44.7976701,44.80127735,44.8033916,44.80345112,44.80073497,44.80140578,44.80206298,44.80722611,44.79553861,44.76583027,44.7574246,44.74699696,44.74632916,44.74161798,44.73767421,44.74123501,44.73490659,44.71305725,44.69541129,44.70055997,44.717351,44.73578836,44.74343944,44.7521424,44.75955765,44.76224676,44.76698089,44.7694784,44.77477792,44.77554145,44.77623445,44.77866944,44.78546189,44.79055027,44.79596338,44.79640598,44.80723403,44.81554677,44.81624702,44.81482628]}]],[[{"lng":[10.84264467,10.85006838,10.84678674,10.83808471,10.83746367,10.81526543,10.80102442,10.79702592,10.77544191,10.79388435,10.81379456,10.83098889,10.84264467],"lat":[44.90311653,44.86651889,44.86005588,44.86184826,44.86182225,44.84988056,44.85369317,44.8505652,44.86882599,44.89883849,44.89441001,44.90263341,44.90311653]}]],[[{"lng":[10.47055657,10.46568874,10.49996957,10.50813123,10.51180455,10.52026938,10.52995325,10.53349677,10.53651673,10.52879928,10.48520857,10.482786,10.47346546,10.46744384,10.44155685,10.43158361,10.42966154,10.43553133,10.42992548,10.42833933,10.42969763,10.42728629,10.42419398,10.42317822,10.42351513,10.42383796,10.42484092,10.43608556,10.43733454,10.43770836,10.43749401,10.44207566,10.44064355,10.4459668,10.44998282,10.45471607,10.45516736,10.47055657],"lat":[44.83324032,44.82496247,44.83128684,44.82275336,44.82149849,44.82019782,44.81673319,44.81586195,44.81293167,44.80004518,44.78445264,44.77354647,44.76839185,44.76617385,44.76452185,44.76731819,44.76550415,44.75061743,44.74737983,44.74876431,44.75313139,44.7737226,44.78468086,44.79529807,44.79820157,44.79898974,44.79967039,44.79984459,44.80024297,44.80103946,44.80818986,44.8196098,44.82294967,44.82843667,44.82816971,44.8306751,44.83299188,44.83324032]}]],[[{"lng":[10.64107378,10.64883729,10.64564224,10.64307336,10.63804219,10.63851461,10.64534436,10.64116109,10.62814926,10.59607041,10.57802498,10.5957044,10.59537541,10.58976685,10.59244063,10.62518043,10.64107378],"lat":[44.91467624,44.90489626,44.89860495,44.89293019,44.87992704,44.87652649,44.86612094,44.85260155,44.83599446,44.84620117,44.86273223,44.87767297,44.89044693,44.9041992,44.91480234,44.92562493,44.91467624]}]],[[{"lng":[10.65497658,10.74916657,10.75102722,10.74916416,10.73924448,10.73096355,10.68580815,10.64116109,10.63804219,10.64816694,10.64883729,10.64875827,10.64107378,10.62788141,10.65497658],"lat":[44.94561783,44.92230289,44.90977962,44.90810681,44.90807381,44.8863023,44.87806599,44.85260155,44.87992704,44.90318655,44.90489626,44.90656277,44.91467624,44.92420179,44.94561783]}]],[[{"lng":[10.72998736,10.74371981,10.77065061,10.76824387,10.75908793,10.74916657,10.6503332,10.68667999,10.69474094,10.72998736],"lat":[44.98877271,44.94907685,44.94411429,44.9410907,44.93266024,44.92230289,44.94807474,44.98659263,44.9619401,44.98877271]}]],[[{"lng":[10.46401077,10.47585095,10.49229543,10.50210026,10.49722454,10.48547994,10.45984446,10.45816994,10.44991353,10.44764961,10.44068113,10.41896062,10.42851981,10.42926354,10.44579423,10.4470557,10.44146491,10.46401077],"lat":[44.73909872,44.72990804,44.72935484,44.7223123,44.7130116,44.70599918,44.68108284,44.68072613,44.68042618,44.68021183,44.67396233,44.67623284,44.69401926,44.69500921,44.71568641,44.71766893,44.73047785,44.73909872]}]],[[{"lng":[10.76285034,10.77824701,10.75745286,10.75571557,10.74514403,10.74153198,10.74384482,10.72048664,10.73536385,10.73057031,10.70865066,10.69326411,10.69384417,10.69093661,10.68318434,10.65939755,10.65760621,10.65985627,10.66126383,10.66166848,10.65887195,10.65851178,10.68580815,10.73096355,10.74191573,10.75514375,10.76285034],"lat":[44.88509874,44.88956352,44.86716439,44.86581381,44.85907581,44.85429686,44.8370541,44.82144776,44.79640598,44.79596338,44.79217851,44.79955647,44.80123128,44.80465918,44.80978791,44.81939781,44.82520467,44.83388151,44.83795699,44.84100282,44.8550147,44.8601016,44.87806599,44.8863023,44.89756377,44.88942141,44.88509874]}]],[[{"lng":[10.50065156,10.54773292,10.55879708,10.58273643,10.56726678,10.57908864,10.52995325,10.52026938,10.51741527,10.51180455,10.50813123,10.49996957,10.47235742,10.46568874,10.50065156],"lat":[44.88084327,44.8777212,44.88045133,44.87709279,44.84692875,44.84341709,44.81673319,44.82019782,44.82084793,44.82149849,44.82275336,44.83128684,44.82406647,44.82496247,44.88084327]}]],[[{"lng":[10.56307778,10.56655906,10.56678082,10.57696224,10.58769778,10.56353402,10.56830978,10.56248673,10.55626788,10.54757697,10.54690023,10.51401272,10.51313622,10.49964735,10.49768515,10.49346557,10.48261822,10.48098465,10.46017812,10.45383241,10.47224255,10.51892707,10.55137465,10.55175153,10.55244727,10.55278067,10.56307778],"lat":[44.65190768,44.64940307,44.64313356,44.64048787,44.64301585,44.62081207,44.60466376,44.60840757,44.61057206,44.61312984,44.61327406,44.60960075,44.60933329,44.60218778,44.60085416,44.5949228,44.59293509,44.60767077,44.61016235,44.62009195,44.65321894,44.64998743,44.65190595,44.65280943,44.65532119,44.65597326,44.65190768]}]],[[{"lng":[10.79363386,10.86539138,10.876633,10.87321308,10.83098889,10.81580363,10.81379456,10.81222776,10.80315486,10.79611753,10.79388435,10.79326936,10.79215134,10.78857754,10.78821693,10.78114391,10.77990225,10.77824701,10.76839749,10.76285034,10.74191573,10.73096355,10.72401897,10.73924448,10.75102722,10.77065061,10.79363386],"lat":[44.93956283,44.92961802,44.91705876,44.90725762,44.90263341,44.89466613,44.89441001,44.89452489,44.89638794,44.89815524,44.89883849,44.89901919,44.89931581,44.90006501,44.89987262,44.89233599,44.89108606,44.88956352,44.88141214,44.88509874,44.89756377,44.8863023,44.88993616,44.90807381,44.90977962,44.94411429,44.93956283]}]],[[{"lng":[10.61600106,10.63240587,10.6494452,10.65010069,10.6500674,10.65062336,10.65687293,10.67404455,10.70579926,10.71073425,10.71710623,10.72380002,10.7245848,10.71849994,10.71835709,10.72645694,10.73954107,10.75821906,10.75572189,10.7563573,10.77099874,10.73691583,10.73177014,10.71501867,10.70622435,10.67313285,10.67305472,10.67570041,10.67601938,10.67396044,10.60772153,10.60222311,10.58834623,10.58769778,10.55414819,10.55278067,10.55244727,10.55137465,10.51892707,10.50921879,10.51755438,10.50934796,10.51155219,10.51298305,10.51662775,10.53412901,10.54095431,10.56083906,10.554508,10.54464027,10.5223089,10.50727399,10.50210026,10.49089032,10.49229543,10.49344994,10.49650967,10.5022961,10.51024999,10.51165804,10.52197985,10.56070366,10.58900084,10.60170269,10.61116638,10.61600106],"lat":[44.77298279,44.7669394,44.76790781,44.76654927,44.765343,44.76312089,44.75641415,44.74964956,44.76224676,44.7521424,44.75028718,44.74343944,44.73578836,44.7273707,44.717351,44.70055997,44.68726198,44.68168249,44.67699206,44.67128556,44.63753756,44.62717795,44.64313622,44.64418127,44.6242564,44.63241548,44.63276772,44.63533061,44.63592008,44.63929465,44.64597276,44.64569246,44.63625956,44.64301585,44.65570259,44.65597326,44.65532119,44.65190595,44.64998743,44.65397724,44.66377249,44.6725907,44.67358361,44.67408609,44.67567014,44.68274704,44.68709907,44.71368285,44.72021759,44.71704485,44.72436225,44.72531783,44.7223123,44.72648703,44.72935484,44.73293968,44.7389266,44.74869004,44.75050612,44.75547645,44.75694494,44.77317609,44.74901746,44.75296967,44.77271115,44.77298279]}]],[[{"lng":[10.839171,10.81148566,10.81064279,10.79836252,10.79064395,10.78328546,10.77600627,10.77145872,10.76111868,10.76114132,10.77173267,10.77435622,10.77855349,10.79702592,10.81526543,10.839171],"lat":[44.86138066,44.80140578,44.80073497,44.8033916,44.7976701,44.79851446,44.80078585,44.80162812,44.79749289,44.79823676,44.80887124,44.8123098,44.83141448,44.8505652,44.84988056,44.86138066]}]],[[{"lng":[10.89799094,10.88788567,10.8771456,10.87917682,10.87940131,10.87831039,10.87813444,10.87687135,10.87291136,10.86018958,10.85415076,10.85006838,10.84645322,10.84310217,10.84547186,10.84242437,10.84264467,10.84196909,10.87321308,10.89799094],"lat":[44.92180546,44.91427123,44.90188517,44.88965934,44.86971196,44.86774816,44.86752206,44.86658579,44.86584457,44.86505222,44.86554092,44.86651889,44.86745203,44.87308744,44.88461677,44.89346995,44.90311653,44.90337949,44.90725762,44.92180546]}]],[[{"lng":[10.80739037,10.80895314,10.80616272,10.8067436,10.81340449,10.82065767,10.81528894,10.78196925,10.75572189,10.80739037],"lat":[44.70321611,44.70313734,44.69702397,44.69662768,44.69450556,44.6903571,44.65653085,44.62776737,44.67699206,44.70321611]}]],[[{"lng":[10.81009936,10.81541594,10.81489754,10.82151714,10.82147836,10.81628175,10.80960811,10.80088424,10.78662333,10.75821906,10.73954107,10.76754634,10.76845698,10.77395047,10.77104817,10.78290779,10.81009936],"lat":[44.74313417,44.74161798,44.73916564,44.73527584,44.73474255,44.71758359,44.70308585,44.70466926,44.70187306,44.68168249,44.68726198,44.71305725,44.72170432,44.73490659,44.74123501,44.73767421,44.74313417]}]],[[{"lng":[10.43076139,10.44068113,10.43617839,10.45614264,10.46017812,10.48098465,10.4782613,10.48184748,10.48261822,10.4828067,10.4826431,10.47153899,10.47047088,10.46465539,10.45211469,10.44019133,10.40261035,10.41376976,10.41539095,10.41896062,10.43076139],"lat":[44.67437513,44.67396233,44.65802187,44.61361679,44.61016235,44.60767077,44.60206154,44.59585287,44.59293509,44.59241948,44.58991893,44.57695498,44.57655463,44.57826332,44.58429759,44.58294519,44.61644298,44.66586351,44.66685726,44.67623284,44.67437513]}]],[[{"lng":[10.48764712,10.48702859,10.48829835,10.48926284,10.49148276,10.51011337,10.51662584,10.50602181,10.5086398,10.50913001,10.51095478,10.51165804,10.51391218,10.49229543,10.46536743,10.44146491,10.43521631,10.42521596,10.42833933,10.43553133,10.43509568,10.42966154,10.43158361,10.44155685,10.46744384,10.47577654,10.482786,10.48764712],"lat":[44.76850954,44.766105,44.76003897,44.75971133,44.75907019,44.76126942,44.75908557,44.75652528,44.75423115,44.75413467,44.7548307,44.75547645,44.75435415,44.72935484,44.74280375,44.73047785,44.73568784,44.739387,44.74876431,44.75061743,44.75446133,44.76550415,44.76731819,44.76452185,44.76617385,44.77273707,44.77354647,44.76850954]}]],[[{"lng":[10.72663626,10.73177014,10.73037806,10.73436255,10.73691583,10.7404023,10.73639508,10.75736168,10.75546416,10.72597888,10.70577599,10.6854927,10.67573998,10.6794671,10.66893894,10.65159547,10.63771959,10.63762466,10.63525602,10.65738412,10.66077948,10.66137918,10.66242978,10.66815997,10.67396044,10.70622435,10.71052156,10.71501867,10.72581814,10.72663626],"lat":[44.64390716,44.64313622,44.63194041,44.62774787,44.62717795,44.62542798,44.62124888,44.61644039,44.60826388,44.60578313,44.56589081,44.57123341,44.56662366,44.55438403,44.53926565,44.57267403,44.57267585,44.57288426,44.57644719,44.59599653,44.62903557,44.62972904,44.63069489,44.63662033,44.63929465,44.6242564,44.64210617,44.64418127,44.64608459,44.64390716]}]],[[{"lng":[10.57707253,10.5876519,10.59041848,10.60713146,10.62152266,10.61881798,10.61274563,10.60229662,10.59579633,10.5512232,10.52802969,10.5261579,10.52631627,10.51865017,10.5046608,10.50282866,10.50015537,10.50091486,10.50095561,10.49745184,10.49307359,10.4714639,10.48043852,10.47546569,10.49081647,10.49689338,10.5201176,10.55005407,10.57707253],"lat":[44.41760474,44.41127326,44.41087916,44.40586473,44.40585934,44.3785429,44.3736863,44.36886387,44.36338217,44.35982806,44.35088587,44.34550922,44.34387121,44.34580709,44.34262549,44.34260459,44.3479064,44.34964296,44.35068675,44.35841214,44.36135936,44.38462395,44.39551832,44.40786242,44.40442207,44.40464866,44.40697968,44.41931607,44.41760474]}]],[[{"lng":[10.37208797,10.38695244,10.38974048,10.39171413,10.39292695,10.42082695,10.42037064,10.41675161,10.41454996,10.41182993,10.41141693,10.41556011,10.40879235,10.39203089,10.38802619,10.38401493,10.38722001,10.38508833,10.37342461,10.35996339,10.33201618,10.3282632,10.32182348,10.3157022,10.3116703,10.29237384,10.28972083,10.28543038,10.32400949,10.33217288,10.33515431,10.34003189,10.33846374,10.34479163,10.35342014,10.37208797],"lat":[44.50863071,44.50423792,44.50252053,44.49982273,44.49902021,44.4955841,44.49129551,44.49038621,44.48931517,44.48500057,44.48195379,44.4780764,44.46851826,44.46723838,44.46479339,44.45517322,44.45148825,44.44850723,44.44729771,44.44388474,44.42773019,44.43114094,44.44476471,44.44971484,44.45150775,44.45171876,44.45391838,44.45998054,44.47903951,44.48537245,44.4958887,44.50606753,44.51615081,44.52711362,44.52997351,44.50863071]}]],[[{"lng":[10.54757697,10.57057856,10.56662095,10.55478033,10.5518594,10.55191687,10.56871047,10.55691328,10.54056809,10.53716707,10.52788843,10.5264815,10.51045654,10.50492549,10.50276118,10.50192542,10.49848047,10.47749567,10.47047088,10.48261822,10.49346557,10.51313622,10.54757697],"lat":[44.61312984,44.59381164,44.59138133,44.58140118,44.57543248,44.57191173,44.55205681,44.53542858,44.53697364,44.5363668,44.55405074,44.56572781,44.56659359,44.56523972,44.56530425,44.57246321,44.57416494,44.56899187,44.57655463,44.59293509,44.5949228,44.60933329,44.61312984]}]],[[{"lng":[10.57106435,10.61969566,10.63046205,10.6354661,10.63771959,10.63978218,10.65159547,10.66893894,10.63578324,10.61831059,10.56995661,10.56458928,10.54056809,10.55691328,10.56673395,10.56871047,10.5682949,10.5518594,10.57106435],"lat":[44.58650397,44.57027721,44.57343688,44.57315827,44.57267585,44.57260122,44.57267403,44.53926565,44.54670441,44.54119178,44.51314422,44.50063679,44.53697364,44.53542858,44.54358558,44.55205681,44.55298978,44.57543248,44.58650397]}]],[[{"lng":[10.47755471,10.47173905,10.47106206,10.4712238,10.4714639,10.47185481,10.50237179,10.50282866,10.50358507,10.5046608,10.51865017,10.52631627,10.52556501,10.52594651,10.52608207,10.52689965,10.52689428,10.52534628,10.51048671,10.51122822,10.51510437,10.51600155,10.50681911,10.4960537,10.48689325,10.48073235,10.43026342,10.40739755,10.42016862,10.39107947,10.38876484,10.37361353,10.38926374,10.40320448,10.3961874,10.36860353,10.36048236,10.34558338,10.33804695,10.33599465,10.3692914,10.37023611,10.3711912,10.38221796,10.42398468,10.44878787,10.46874945,10.4718588,10.47755471],"lat":[44.39418725,44.3936956,44.38756403,44.38556332,44.38462395,44.38369163,44.3428897,44.34260459,44.34251432,44.34262549,44.34580709,44.34387121,44.34248319,44.33932709,44.3387491,44.33690161,44.33575831,44.32800055,44.29975802,44.29396835,44.28579639,44.28218331,44.2710512,44.26503471,44.26346179,44.23163534,44.22743489,44.24930811,44.26748905,44.27961388,44.28080343,44.29833527,44.29867715,44.31762883,44.31781388,44.33711678,44.34814326,44.34723944,44.34571646,44.36019903,44.3841302,44.38429893,44.38434147,44.38562649,44.38683284,44.39234116,44.40490158,44.40573031,44.39418725]}]],[[{"lng":[10.28797615,10.29237384,10.3116703,10.31478636,10.3157022,10.3212231,10.32182348,10.32767578,10.3282632,10.33079501,10.32826262,10.33664786,10.34593502,10.36447996,10.36980533,10.33967097,10.33599465,10.33695999,10.33763982,10.33804695,10.33877297,10.36048236,10.40320448,10.37349205,10.37361353,10.37400343,10.37540906,10.37811397,10.38876484,10.42016862,10.40739755,10.307116,10.25385666,10.14203472,10.15736122,10.15994194,10.16255548,10.16694867,10.19119407,10.20525275,10.2080714,10.21397231,10.22381127,10.22573912,10.22972841,10.230591,10.23098276,10.23607579,10.23861065,10.25464862,10.25542784,10.26755326,10.27548457,10.28427512,10.28543038,10.28797615],"lat":[44.45742211,44.45171876,44.45150775,44.45034659,44.44971484,44.44544685,44.44476471,44.43582017,44.43114094,44.42837913,44.41953643,44.4161436,44.41152415,44.39739485,44.38894053,44.36623286,44.36019903,44.34808794,44.34601834,44.34571646,44.34564493,44.34814326,44.31762883,44.29903896,44.29833527,44.29734928,44.29419935,44.28933218,44.28080343,44.26748905,44.24930811,44.28432391,44.26858068,44.35386763,44.37937137,44.38078621,44.3824876,44.38443241,44.38731507,44.39220011,44.39433101,44.4016327,44.4104404,44.41434493,44.42673031,44.42892218,44.42962917,44.43577703,44.43859442,44.45170732,44.45229294,44.45860491,44.45750831,44.4594624,44.45998054,44.45742211]}]],[[{"lng":[10.99715504,11.02405153,11.00081113,10.96592661,10.99715504],"lat":[44.73287183,44.7343516,44.70055409,44.71941991,44.73287183]}]],[[{"lng":[11.11197122,11.1166028,11.1117944,11.10788461,11.10588449,11.10168746,11.10159024,11.10206793,11.1030881,11.10334408,11.10342657,11.09931589,11.09605405,11.08873124,11.04997628,11.04181044,11.04216463,11.04907234,11.04601639,11.008747,10.9963065,11.00266862,11.00308364,11.00483972,11.00606188,11.00789843,11.01045832,11.00559645,11.02405153,11.01824702,10.99715504,10.98628014,10.99504476,10.99194819,10.98517121,10.98562973,11.00169013,11.01959569,11.03629064,11.0866581,11.11197122],"lat":[44.80038608,44.79518419,44.78714432,44.78669446,44.78592119,44.78208259,44.78079708,44.78005011,44.77890605,44.77829819,44.77641521,44.77181876,44.7714106,44.7635869,44.74295875,44.7305695,44.7295099,44.72252306,44.71809813,44.68446137,44.6878272,44.69842085,44.69864987,44.69864655,44.69882558,44.69932795,44.7012141,44.70427225,44.7343516,44.73084449,44.73287183,44.73719358,44.74052461,44.74485474,44.74905078,44.74952892,44.74973907,44.76723452,44.75841289,44.80679011,44.80038608]}]],[[{"lng":[10.87162338,10.86902651,10.88333867,10.8848207,10.88508039,10.88563029,10.87818528,10.87621769,10.87564498,10.87271904,10.86478956,10.85262925,10.85056304,10.84353961,10.83240003,10.81528894,10.82065767,10.8067436,10.80616272,10.80615318,10.80748381,10.80895314,10.80960811,10.81200491,10.81628175,10.82147836,10.81489754,10.81745398,10.82043084,10.82421634,10.82741066,10.8305817,10.83291945,10.83930418,10.85392505,10.8633686,10.87162338],"lat":[44.72405751,44.71839064,44.71383605,44.71340424,44.71368334,44.71250584,44.69669004,44.69673139,44.69745296,44.69819319,44.68007048,44.67150057,44.65821064,44.65787565,44.66015102,44.65653085,44.6903571,44.69662768,44.69702397,44.69752825,44.70135116,44.70313734,44.70308585,44.70757027,44.71758359,44.73474255,44.73916564,44.74632916,44.74105593,44.73968948,44.73912414,44.7389237,44.73858405,44.73689246,44.73163272,44.72702119,44.72405751]}]],[[{"lng":[11.22186998,11.21240011,11.17920756,11.17819336,11.1777781,11.17596952,11.15208928,11.13585735,11.11068215,11.10835189,11.10498714,11.09931589,11.10148721,11.10168746,11.10588449,11.1117944,11.1166028,11.11672256,11.11331673,11.0866581,11.10594031,11.1344384,11.13785612,11.14173268,11.14249154,11.15432091,11.16043932,11.17620978,11.20185975,11.19349132,11.21424548,11.22186998],"lat":[44.81297492,44.80704643,44.79760256,44.79618608,44.79289922,44.79187146,44.78630437,44.78568839,44.77782967,44.77320961,44.77103917,44.77181876,44.78178921,44.78208259,44.78592119,44.78714432,44.79518419,44.79673035,44.80070937,44.80679011,44.82647019,44.80469142,44.80547366,44.80669281,44.80669656,44.80384531,44.80380168,44.80658084,44.81041898,44.82044639,44.82628847,44.81297492]}]],[[{"lng":[10.93478153,10.93754689,10.93205663,10.93036405,10.92866007,10.92861835,10.91902084,10.91691937,10.95144711,10.96689169,10.97091758,10.97350066,10.97415079,10.97522212,10.97665396,10.97690038,10.97732827,10.97812206,10.97856551,10.97905863,10.98049681,10.98230833,10.98265624,10.98414228,10.98469174,10.99198995,11.00437059,11.00655605,11.00799038,11.00290258,11.00229973,10.99774913,10.99598498,10.99531596,10.99500306,10.99481607,10.99364004,10.99403817,10.9730318,10.95395871,10.94982736,10.9536634,10.93730744,10.93712829,10.92979201,10.91670302,10.91450638,10.91001251,10.89878168,10.89679133,10.89074164,10.8848207,10.87344904,10.8633686,10.83930418,10.82421634,10.82286854,10.82043084,10.81981685,10.81745398,10.81545751,10.81619403,10.81805863,10.82751826,10.84204233,10.82408636,10.81499191,10.84591291,10.85006838,10.87687135,10.92907728,10.93478153],"lat":[44.890057,44.88969203,44.87606873,44.87340701,44.8707673,44.87071963,44.86295778,44.83389627,44.79860402,44.82676482,44.82542779,44.82517742,44.82539556,44.82578307,44.82728584,44.82745165,44.82764584,44.82794191,44.82803248,44.82809503,44.82807742,44.82754805,44.82743454,44.82671105,44.82636505,44.82058799,44.81570331,44.81409388,44.81005541,44.806558,44.79697578,44.78928262,44.78871371,44.78802708,44.78754878,44.78707494,44.77857325,44.77230923,44.7787203,44.77133911,44.77296826,44.77970268,44.78448148,44.78979623,44.79133101,44.78458217,44.78320907,44.77836183,44.75972845,44.74388785,44.73727073,44.71340424,44.7237285,44.72702119,44.73689246,44.73968948,44.74005759,44.74105593,44.74136026,44.74632916,44.75463324,44.7574246,44.76020079,44.76583027,44.79553861,44.80263535,44.80722611,44.85792647,44.86651889,44.86658579,44.88179235,44.890057]}]],[[{"lng":[11.00063936,11.04926044,11.05011392,11.05356651,11.06855723,11.07809108,11.08157029,11.08527213,11.12335545,11.12779278,11.11829163,11.14279053,11.14182678,11.14012612,11.15227635,11.15245487,11.15000128,11.14088754,11.13265707,11.13160657,11.107712,11.10450505,11.11365224,11.10815167,11.07295513,11.06804297,11.05614262,11.055788,11.04859906,11.04848152,11.05494818,11.03434638,11.0047049,10.99613202,10.98968252,10.98396851,10.98872163,10.98358608,11.00063936],"lat":[44.65833952,44.64244315,44.64944061,44.6549111,44.65046723,44.64702985,44.64571614,44.64450527,44.63253233,44.63135593,44.61784003,44.60567658,44.60413137,44.6012285,44.58914983,44.58661985,44.58364578,44.58238118,44.57587344,44.5674275,44.54513872,44.53941831,44.53499348,44.52467021,44.52221561,44.5231711,44.53406923,44.53747918,44.54817031,44.5486032,44.56786413,44.59946063,44.63228328,44.63062182,44.62222075,44.62797745,44.63641098,44.65127319,44.65833952]}]],[[{"lng":[10.89671458,10.93462746,10.97128395,10.97267349,10.92092652,10.91248168,10.91870034,10.9207568,10.92073099,10.8795087,10.89671458],"lat":[44.59384881,44.5634802,44.57920159,44.55967379,44.53714072,44.54362925,44.55091146,44.55372165,44.55447389,44.57371394,44.59384881]}]],[[{"lng":[10.95625447,10.99024469,10.98424641,10.97447874,10.98295008,10.92698886,10.92428017,10.92129922,10.91955832,10.91883401,10.89568413,10.88058157,10.87843847,10.89647152,10.90092844,10.91058116,10.91344827,10.91248714,10.90373084,10.90097525,10.90630685,10.92843367,10.9529621,10.95625447],"lat":[44.54226091,44.53073788,44.51950067,44.51459859,44.50355871,44.47657748,44.47259,44.46604129,44.46240652,44.46140139,44.45482909,44.45881493,44.48754148,44.50734158,44.50977017,44.51220178,44.51523263,44.51854366,44.52314624,44.52893128,44.53879915,44.5342097,44.54332658,44.54226091]}]],[[{"lng":[10.99946634,11.01278236,11.01538832,11.02224898,11.02313607,11.0274492,11.02827618,11.03133905,11.04232045,11.04640834,11.01584958,11.01214955,10.99198995,10.98265624,10.97856551,10.97690038,10.97522212,10.97415079,10.97091758,10.95506747,10.99946634],"lat":[44.86530223,44.85993706,44.86026016,44.86212828,44.86179751,44.85848925,44.85106586,44.84714052,44.8435598,44.84110555,44.81024997,44.81362803,44.82058799,44.82743454,44.82803248,44.82745165,44.82578307,44.82539556,44.82542779,44.83464953,44.86530223]}]],[[{"lng":[11.00881774,11.05731212,11.05978747,11.06376363,11.03556343,11.00231986,10.96166634,10.95637511,10.94842921,10.94554919,10.96409593,10.95059492,11.00881774],"lat":[44.95473472,44.95010827,44.93866668,44.93580661,44.90360617,44.90883094,44.87953759,44.88249862,44.88633322,44.88797054,44.90830146,44.93332884,44.95473472]}]],[[{"lng":[10.82662429,10.83402022,10.85016753,10.85907942,10.86040635,10.86125043,10.85183554,10.85028285,10.85013363,10.8552,10.80885936,10.80691303,10.8056016,10.81476202,10.75614851,10.71605236,10.71239634,10.7078837,10.70202588,10.70022497,10.70053911,10.70607695,10.70423723,10.72557187,10.72557046,10.72568867,10.72811701,10.72886719,10.72946136,10.73211692,10.75138944,10.78583384,10.8033822,10.79740136,10.82662429],"lat":[44.24856972,44.24278555,44.23572787,44.23281922,44.23241049,44.2321901,44.22862453,44.22782142,44.22745471,44.20738595,44.1548495,44.14785231,44.14110838,44.11618494,44.15331791,44.15571002,44.1572129,44.15973531,44.16635898,44.17044618,44.1731064,44.18252202,44.19118337,44.19847956,44.20571799,44.20633742,44.21447541,44.21615662,44.21635468,44.21641348,44.21665071,44.21811595,44.23401848,44.24486228,44.24856972]}]],[[{"lng":[11.2453826,11.26968614,11.34112864,11.36850196,11.35252733,11.35147301,11.34749072,11.33573757,11.32339547,11.31160934,11.309157,11.30156737,11.29334728,11.22434992,11.20903765,11.18086114,11.17819336,11.21240011,11.22186998,11.21424548,11.19349132,11.18331892,11.19141717,11.21798862,11.21959538,11.22397972,11.22511107,11.23474353,11.2453826],"lat":[44.89825052,44.89652123,44.87259427,44.84079106,44.83611629,44.83254123,44.83013922,44.83190604,44.83255448,44.8274944,44.8247719,44.8104213,44.80280764,44.80155694,44.80442892,44.79453276,44.79618608,44.80704643,44.81297492,44.82628847,44.82044639,44.84108514,44.86413274,44.88108343,44.88467101,44.88639508,44.88716521,44.90597572,44.89825052]}]],[[{"lng":[10.82761776,10.83460426,10.86581532,10.848655,10.82534516,10.82887737,10.8248391,10.81939888,10.791348,10.81437412,10.79232472,10.79472953,10.80230759,10.80356963,10.81505168,10.82761776],"lat":[44.55755071,44.5506643,44.54927626,44.51312673,44.5058451,44.4953231,44.49272746,44.49248117,44.49395247,44.51384452,44.5181612,44.52640944,44.54138271,44.55169891,44.56853073,44.55755071]}]],[[{"lng":[10.63231949,10.6794599,10.69723259,10.70022497,10.71239634,10.6412097,10.62405584,10.60984676,10.61811453,10.61831265,10.61336051,10.61022348,10.60684516,10.60572496,10.60353223,10.60201362,10.60167843,10.60185202,10.60533074,10.60679619,10.62361132,10.63078528,10.63130292,10.63272258,10.62722383,10.63231949],"lat":[44.20228129,44.20168783,44.195195,44.17044618,44.1572129,44.15983508,44.12036609,44.11861057,44.12817212,44.13689721,44.13995242,44.13952852,44.14126869,44.14191466,44.14358403,44.14614421,44.14715727,44.14802813,44.15965629,44.16987216,44.18004188,44.18568362,44.18630645,44.19104875,44.20220996,44.20228129]}]],[[{"lng":[10.79945971,10.80568511,10.80799961,10.80900646,10.82671887,10.8306469,10.85895975,10.88135954,10.89399972,10.8795087,10.89615101,10.90719035,10.9207568,10.90258677,10.89869412,10.83765838,10.83693504,10.83653105,10.83460426,10.8343417,10.82823701,10.82761776,10.82540209,10.82307056,10.79463908,10.79372799,10.79446981,10.78676871,10.78643542,10.7844252,10.78780418,10.79871853,10.79652228,10.79945971],"lat":[44.62633995,44.61817102,44.61763926,44.62002695,44.61813351,44.59939059,44.60097666,44.59468165,44.59354561,44.57371394,44.55980938,44.5562661,44.55372165,44.53817701,44.54308516,44.55689891,44.55669449,44.55468443,44.5506643,44.55072252,44.55674407,44.55755071,44.56073253,44.56386662,44.58330388,44.58845347,44.60395244,44.60649612,44.61932195,44.62481595,44.62401589,44.623975,44.62837575,44.62633995]}]],[[{"lng":[10.55196158,10.5592968,10.58774789,10.60177701,10.60430235,10.59231026,10.59233494,10.60004602,10.59699145,10.59396384,10.5895734,10.58862015,10.58983937,10.58336842,10.58525841,10.55854469,10.50782402,10.48521494,10.49290258,10.47012966,10.48073235,10.48475282,10.48689325,10.4960537,10.50047554,10.50681911,10.50986266,10.51581597,10.51600155,10.51510437,10.51122822,10.51048671,10.52534628,10.52689428,10.52689965,10.52594651,10.52556501,10.52631627,10.52644166,10.54110762,10.55196158],"lat":[44.32614749,44.32262649,44.32308974,44.31832938,44.31574612,44.30538061,44.30259263,44.2968735,44.29122574,44.29189825,44.28572944,44.2838431,44.26910637,44.24649087,44.2417831,44.21945427,44.18705805,44.20449608,44.21700007,44.2260554,44.23163534,44.23566149,44.26346179,44.26503471,44.26697536,44.2710512,44.27345079,44.28178965,44.28218331,44.28579639,44.29396835,44.29975802,44.32800055,44.33575831,44.33690161,44.33932709,44.34248319,44.34387121,44.34532537,44.33264148,44.32614749]}],[{"lng":[10.4808027,10.48064449,10.4818016,10.48168664,10.4808027],"lat":[44.18949128,44.19016856,44.19040564,44.18981293,44.18949128]}]],[[{"lng":[10.96078736,10.99022956,11.00438191,11.00285636,10.99466773,10.99349162,10.98884541,10.96836734,10.96676077,10.9760037,10.9616117,10.95008599,10.94274466,10.93632012,10.92373335,10.91610297,10.91297819,10.91398626,10.91407126,10.91469343,10.91560696,10.91723872,10.92069492,10.92337236,10.92412463,10.96078736],"lat":[44.44381066,44.44050566,44.40822855,44.40632809,44.40261067,44.39971455,44.39339245,44.37825585,44.37634214,44.35960468,44.35557769,44.35981104,44.3601069,44.35833783,44.35168728,44.36979106,44.38201514,44.38521223,44.38530629,44.38572999,44.38636741,44.38788435,44.39209682,44.39734663,44.41854714,44.44381066]}]],[[{"lng":[10.70572805,10.71065293,10.72677614,10.7398214,10.76199581,10.78177908,10.77222083,10.76245033,10.75924193,10.66645384,10.66268881,10.65707425,10.64428253,10.63954409,10.63519265,10.67514412,10.6754733,10.67560047,10.67216707,10.66867671,10.66771544,10.66712694,10.6669104,10.66728204,10.66787369,10.67357503,10.6751625,10.67567052,10.67657637,10.69742421,10.70572805],"lat":[44.36537611,44.33316248,44.32736506,44.31724593,44.3270251,44.31062108,44.30548515,44.30534828,44.30496562,44.24403929,44.25279101,44.25669886,44.26112414,44.27363428,44.27486706,44.30718454,44.30773788,44.31573055,44.32111055,44.32361938,44.32465975,44.32557763,44.32634602,44.32751097,44.32891577,44.33939266,44.34183615,44.34249491,44.34349444,44.36348811,44.36537611]}]],[[{"lng":[10.8709812,10.89869412,10.89754475,10.89954179,10.90258677,10.90385922,10.90630685,10.90097525,10.90373084,10.91344827,10.91058116,10.89647152,10.87888665,10.87843847,10.87815591,10.87801957,10.87930766,10.8695123,10.8509068,10.8469482,10.8242763,10.8248391,10.82887737,10.82397443,10.82534516,10.83704261,10.848655,10.8709812],"lat":[44.54624284,44.54308516,44.53834195,44.53820971,44.53817701,44.53823682,44.53879915,44.52893128,44.52314624,44.51523263,44.51220178,44.50734158,44.48818228,44.48754148,44.48657385,44.48039131,44.46335522,44.45891568,44.47779118,44.49016182,44.49255189,44.49272746,44.4953231,44.50263509,44.5058451,44.51389032,44.51312673,44.54624284]}]],[[{"lng":[10.94962301,10.98820093,10.98610418,10.98392969,10.97972362,10.95101879,10.93748131,10.92412463,10.91469343,10.89724196,10.88868508,10.88503474,10.88473969,10.8809307,10.88138135,10.88422739,10.88435608,10.87853529,10.88671643,10.88065598,10.86646343,10.86579522,10.86740822,10.8695123,10.87930766,10.88058157,10.89568413,10.92698886,10.94962301],"lat":[44.47712571,44.45771938,44.45625756,44.45522425,44.45391112,44.45001333,44.43937244,44.41854714,44.38572999,44.38906574,44.38608476,44.38537876,44.38557269,44.39124419,44.3923531,44.39420574,44.40168487,44.40768204,44.41568107,44.41852237,44.44055069,44.45229653,44.4575547,44.45891568,44.46335522,44.45881493,44.45482909,44.47657748,44.47712571]}]],[[{"lng":[11.08880775,11.08830498,11.11446592,11.0866581,11.07041882,11.04775117,11.03756712,11.04640834,11.04357261,11.06525362,11.06842625,11.0731766,11.08880775],"lat":[44.87447337,44.85847695,44.8485297,44.80679011,44.80943084,44.81981405,44.82291296,44.84110555,44.84891162,44.86432454,44.86508179,44.86502712,44.87447337]}]],[[{"lng":[11.07979425,11.15128666,11.24620567,11.26043375,11.25651205,11.2548628,11.24328363,11.23662776,11.22397972,11.19109596,11.17849749,11.17556237,11.17479447,11.15586539,11.14714801,11.14097918,11.13824835,11.13230036,11.1195375,11.10639104,11.09796923,11.08880775,11.08353629,11.0731766,11.07015761,11.06842625,11.06673088,11.06525362,11.05537956,11.04357261,11.04232045,11.03133905,11.0274492,11.02313607,11.02224898,11.01278236,10.99946634,11.00123328,11.00779626,11.01427885,11.01639493,11.01540331,11.02425518,11.03059812,11.03703482,11.06376363,11.05957064,11.07979425],"lat":[44.96032353,44.93333821,44.95143857,44.93310137,44.92620246,44.92453369,44.91678161,44.9094856,44.88639508,44.88170184,44.87895431,44.87632768,44.87610827,44.87328963,44.87475022,44.87771073,44.87815799,44.87718001,44.87019809,44.87241286,44.87543961,44.87447337,44.87431764,44.86502712,44.86449677,44.86508179,44.86492795,44.86432454,44.85821033,44.84891162,44.8435598,44.84714052,44.85848925,44.86179751,44.86212828,44.85993706,44.86530223,44.8782972,44.87845202,44.88067836,44.88615923,44.8900116,44.89619238,44.89759206,44.90163631,44.93580661,44.94924823,44.96032353]}]],[[{"lng":[10.89138083,10.89669879,10.90072281,10.90203469,10.89994172,10.90410272,10.92172875,10.92805502,10.9465104,10.95548864,10.96592661,10.9963905,11.00081113,11.00559645,11.01062587,11.01045832,11.0102132,11.00789843,11.00606188,11.00308364,11.00266862,10.9963065,11.008747,10.99985222,10.99037215,10.98358608,10.98396851,10.98900304,10.98968252,10.99027589,10.99606247,10.99866271,10.99970006,11.00746127,11.01095034,11.00365675,10.99198463,10.98902519,10.98183464,10.97350117,10.97143005,10.96674116,10.95794585,10.93462746,10.9270841,10.89691072,10.89671458,10.88135954,10.85895975,10.8306469,10.82671887,10.80799961,10.80284795,10.79945971,10.79652228,10.78780418,10.78196925,10.79691008,10.80462994,10.81528894,10.82762292,10.83240003,10.83596985,10.85056304,10.85262925,10.87271904,10.87621769,10.87818528,10.88428172,10.88563029,10.88571491,10.88549929,10.88508039,10.88502423,10.88840266,10.8888388,10.89138083],"lat":[44.72604532,44.72587536,44.72472916,44.72355561,44.72004201,44.71835227,44.71759333,44.70892101,44.70477736,44.71274397,44.71941991,44.70064144,44.70055409,44.70427225,44.70153713,44.7012141,44.70095406,44.69932795,44.69882558,44.69864987,44.69842085,44.6878272,44.68446137,44.67408883,44.66593266,44.65127319,44.62797745,44.62227688,44.62222075,44.62248836,44.62598435,44.61773751,44.61674709,44.61163705,44.60619672,44.59785904,44.59513217,44.57100775,44.56766686,44.57923532,44.58018565,44.57746146,44.57993076,44.5634802,44.56611046,44.58828916,44.59384881,44.59468165,44.60097666,44.59939059,44.61813351,44.61763926,44.62668261,44.62633995,44.62837575,44.62401589,44.62776737,44.65273004,44.65524146,44.65653085,44.6598315,44.66015102,44.6601837,44.65821064,44.67150057,44.69819319,44.69673139,44.69669004,44.70871115,44.71250584,44.71318964,44.71352526,44.71368334,44.71370165,44.71921338,44.72243067,44.72604532]}],[{"lng":[10.89244935,10.89554251,10.8912333,10.89244935],"lat":[44.73501057,44.72874827,44.72889054,44.73501057]}],[{"lng":[10.89504281,10.89074164,10.8942911,10.89504281],"lat":[44.74229276,44.73727073,44.7420524,44.74229276]}]],[[{"lng":[10.77987995,10.79217731,10.77686403,10.7751325,10.75597751,10.7511774,10.74560939,10.73273078,10.70541257,10.7131841,10.71313963,10.70287831,10.68905427,10.68195857,10.74315267,10.77987995],"lat":[44.2979837,44.29716116,44.27612667,44.27480317,44.26569129,44.25846364,44.25656825,44.24288187,44.19814767,44.21493447,44.21858135,44.22392955,44.23479435,44.24725111,44.29169005,44.2979837]}]],[[{"lng":[10.64667838,10.64965924,10.64116221,10.62292355,10.61693179,10.61376969,10.61309487,10.61246062,10.60329053,10.60004602,10.59233494,10.60430235,10.60177701,10.5592968,10.54110762,10.53308278,10.52644166,10.5261579,10.5512232,10.58866172,10.59478806,10.59579633,10.59692504,10.59920753,10.60171659,10.60229662,10.60372729,10.61274563,10.61424353,10.61881798,10.62010572,10.64667838],"lat":[44.36061615,44.35557659,44.33763039,44.31621223,44.30670018,44.30202741,44.30119067,44.30046139,44.29626012,44.2968735,44.30259263,44.31574612,44.31832938,44.32262649,44.33264148,44.340744,44.34532537,44.34550922,44.35982806,44.36128496,44.36304965,44.36338217,44.36381653,44.365144,44.36830482,44.36886387,44.36978007,44.3736863,44.37475447,44.3785429,44.38244983,44.36061615]}]],[[{"lng":[10.9895672,11.00390732,11.00358496,10.96670558,10.94974477,10.97372082,10.96730092,10.96586637,10.95705504,10.94843739,10.94607086,10.94325914,10.94265761,10.9402918,10.90724322,10.8937634,10.8932221,10.88970292,10.88167437,10.8742154,10.86125043,10.86985384,10.86588853,10.85952462,10.85731651,10.85594016,10.86457523,10.86667796,10.86625122,10.86408535,10.86319284,10.863641,10.88152414,10.89431864,10.91788315,10.92730116,10.9435854,10.97942281,10.9895672],"lat":[44.32493358,44.32318302,44.30663342,44.30224709,44.29294993,44.2769811,44.27226185,44.26789766,44.22602403,44.22481926,44.22495358,44.22582693,44.22621415,44.22561067,44.20543403,44.21131745,44.21590894,44.22446601,44.22514776,44.22681894,44.2321901,44.23695572,44.23867712,44.24019439,44.24046439,44.2409009,44.24982617,44.25531961,44.26004412,44.26167299,44.26395629,44.26703698,44.28287687,44.29960869,44.31337677,44.32203799,44.31442638,44.32421593,44.32493358]}]],[[{"lng":[11.08346707,11.08891277,11.09031391,11.09325202,11.10166065,11.11699352,11.11483901,11.10536168,11.09160773,11.07809108,11.05356651,11.05011392,11.05005481,11.04926044,10.99056127,10.99037215,10.99985222,11.00728542,11.008747,11.01667698,11.03172397,11.03844689,11.04601639,11.08346707],"lat":[44.72635548,44.72433848,44.72329558,44.71843267,44.71441958,44.71043589,44.70580262,44.69051642,44.66935731,44.64702985,44.6549111,44.64944061,44.64434643,44.64244315,44.66429841,44.66593266,44.67408883,44.68309537,44.68446137,44.69263967,44.71442841,44.7193048,44.71809813,44.72635548]}]],[[{"lng":[10.94668744,10.95209557,10.96409593,10.95586263,10.94554919,10.94842921,10.95353495,10.95637511,10.96166634,10.95914501,10.96565811,10.96453233,10.95944931,10.95844418,10.96096197,10.96964184,10.97124888,10.95537084,10.95506747,10.95708537,10.96689169,10.96328793,10.95144711,10.93590555,10.91691937,10.91902084,10.92016317,10.92866007,10.93754689,10.92907728,10.88057091,10.87831039,10.87688775,10.8771456,10.88788567,10.94668744],"lat":[44.92265955,44.91660858,44.90830146,44.8958665,44.88797054,44.88633322,44.88397379,44.88249862,44.87953759,44.87128102,44.86373954,44.86297859,44.86124753,44.85624164,44.85510015,44.8565711,44.85438015,44.83763304,44.83464953,44.83159027,44.82676482,44.82432832,44.79860402,44.80425378,44.83389627,44.86295778,44.86543108,44.8707673,44.88969203,44.88179235,44.86766703,44.86774816,44.89014901,44.90188517,44.91427123,44.92265955]}]],[[{"lng":[10.66603915,10.66895412,10.6688593,10.69132752,10.69742421,10.69466762,10.69253413,10.68353505,10.67567052,10.66728204,10.66771544,10.67560047,10.6754733,10.58504409,10.58983937,10.5895734,10.59699145,10.60004602,10.61309487,10.62292355,10.64116221,10.64965924,10.62010572,10.62232073,10.66603915],"lat":[44.40321542,44.39584464,44.3898862,44.36640055,44.36348811,44.35958096,44.3534727,44.34554822,44.34249491,44.32751097,44.32465975,44.31573055,44.30773788,44.24359568,44.26910637,44.28572944,44.29122574,44.2968735,44.30119067,44.31621223,44.33763039,44.35557659,44.38244983,44.39797831,44.40321542]}]],[[{"lng":[10.88138135,10.88503474,10.91469343,10.91610297,10.92246142,10.92373335,10.92635228,10.93109384,10.88622411,10.86520773,10.85518536,10.83851997,10.82193961,10.81646541,10.79217731,10.77674946,10.76001884,10.75924193,10.77222083,10.77762379,10.78153063,10.78177908,10.78188451,10.76199581,10.76780068,10.76798645,10.763153,10.7675098,10.79124366,10.79187766,10.79229289,10.79238803,10.79225339,10.79304534,10.79549858,10.80949563,10.8520843,10.87853529,10.88138135],"lat":[44.3923531,44.38537876,44.38572999,44.36979106,44.35550452,44.35168728,44.34725126,44.33003439,44.29345871,44.26898449,44.26661747,44.27103634,44.27231938,44.27340594,44.29716116,44.2994891,44.29656299,44.30496562,44.30548515,44.30754385,44.31028286,44.31062108,44.31120463,44.3270251,44.33609124,44.34514068,44.36238822,44.3810781,44.38314799,44.3833811,44.38379773,44.38485856,44.38823668,44.38950264,44.39007627,44.39253363,44.39285007,44.40768204,44.3923531]}]],[[{"lng":[10.58525841,10.62729793,10.62722383,10.63050274,10.63272258,10.63078528,10.61125551,10.60679619,10.60533074,10.60167843,10.60572496,10.61022348,10.61336051,10.61831265,10.61811453,10.60509357,10.52512166,10.51001441,10.51153085,10.51681177,10.53148955,10.55854469,10.57399542,10.58525841],"lat":[44.2417831,44.2162626,44.20220996,44.19313317,44.19104875,44.18568362,44.17392374,44.16987216,44.15965629,44.14715727,44.14191466,44.13952852,44.13995242,44.13689721,44.12817212,44.11468908,44.15623594,44.18691385,44.18889969,44.19234087,44.20103098,44.21945427,44.23645608,44.2417831]}]],[[{"lng":[10.7265897,10.72821244,10.73417113,10.74712001,10.75053298,10.76419785,10.763153,10.76357402,10.76798645,10.76829626,10.76780068,10.76640337,10.76199581,10.7398214,10.71065293,10.70572805,10.69742421,10.69252709,10.69132752,10.69067108,10.6847786,10.6688593,10.66827553,10.66895412,10.67244923,10.68404903,10.68452507,10.69986802,10.71982635,10.72481604,10.7265897],"lat":[44.42553386,44.42411389,44.41294124,44.39963592,44.38660172,44.37655142,44.36238822,44.35184848,44.34514068,44.34170132,44.33609124,44.33180053,44.3270251,44.31724593,44.33316248,44.36537611,44.36348811,44.36534747,44.36640055,44.36711249,44.37643642,44.3898862,44.3914342,44.39584464,44.39511828,44.39682037,44.39721848,44.4196059,44.42564493,44.42638891,44.42553386]}]],[[{"lng":[10.76513637,10.76720756,10.77563159,10.79032201,10.79370155,10.78563376,10.75928497,10.75382875,10.75428198,10.75644095,10.76023375,10.75995957,10.73898103,10.72821244,10.72481604,10.68404903,10.6629168,10.62232073,10.65342969,10.66701689,10.66819582,10.67058582,10.67359556,10.68432944,10.68594366,10.68720679,10.6882288,10.69301706,10.70263765,10.72286921,10.72635546,10.72645076,10.74290451,10.76513637],"lat":[44.50090247,44.50092359,44.49021704,44.49230347,44.48410125,44.45975861,44.45707274,44.43219483,44.42765951,44.42599686,44.41518023,44.41483335,44.40873585,44.42411389,44.42638891,44.39682037,44.40711335,44.39797831,44.43330565,44.46699858,44.46778259,44.46917905,44.47023331,44.47234414,44.47295049,44.47358903,44.47415009,44.47755419,44.48803421,44.49915051,44.49983755,44.48966171,44.4867701,44.50090247]}]],[[{"lng":[11.12747999,11.11699352,11.08620939,11.08346707,11.06604331,11.05358932,11.04907234,11.04525731,11.04216463,11.04185234,11.04181044,11.04210981,11.04448256,11.04945916,11.04997628,11.0511058,11.09665095,11.09879017,11.09931589,11.10045048,11.10138014,11.10435537,11.10498714,11.1060222,11.12989021,11.12747999],"lat":[44.77139638,44.71043589,44.72571124,44.72635548,44.72536232,44.72125697,44.72252306,44.72698793,44.7295099,44.7299656,44.7305695,44.73118079,44.73508131,44.74226586,44.74295875,44.74418076,44.77184075,44.77193647,44.77181876,44.77139281,44.77124067,44.77104182,44.77103917,44.77135316,44.7829192,44.77139638]}]],[[{"lng":[10.66645384,10.68195857,10.71313963,10.70008819,10.69723259,10.68596192,10.6794599,10.62722383,10.62729793,10.61329425,10.58504409,10.63519265,10.64428253,10.66268881,10.66645384],"lat":[44.24403929,44.24725111,44.21858135,44.19354099,44.195195,44.19972841,44.20168783,44.20220996,44.2162626,44.23016381,44.24359568,44.27486706,44.26112414,44.25279101,44.24403929]}]],[[{"lng":[11.00471702,11.05494818,11.04848152,11.05407522,11.055788,11.0561321,11.05614262,11.05498648,11.04255633,11.03088776,11.03012041,11.03019989,11.03074314,11.03343916,11.03382044,11.03398898,11.03248992,10.9997727,10.99785117,10.98902519,10.98879649,10.99198463,11.01095034,10.99903747,10.99866271,10.99826664,10.99805441,10.99602152,10.99593302,10.99606247,10.99613202,11.00471702],"lat":[44.63180902,44.56786413,44.5486032,44.54030437,44.53747918,44.53652773,44.53406923,44.52628256,44.52813412,44.52755849,44.53080403,44.53200444,44.5342364,44.54115635,44.54270699,44.54427041,44.54819518,44.5682543,44.56914318,44.57100775,44.57131782,44.59513217,44.60619672,44.61727183,44.61773751,44.61829358,44.61872042,44.62406287,44.62462186,44.62598435,44.63062182,44.63180902]}]],[[{"lng":[11.21959538,11.19141717,11.18331892,11.18113293,11.19196438,11.20185975,11.1995779,11.16043932,11.14249154,11.14173268,11.1344384,11.12786648,11.10738764,11.10646597,11.10261191,11.11418834,11.11446592,11.11441836,11.11051856,11.0892539,11.08830498,11.08549632,11.08880775,11.1195375,11.13824835,11.14714801,11.15586539,11.17479447,11.17849749,11.19109596,11.22397972,11.21959538],"lat":[44.88467101,44.86413274,44.84108514,44.83072953,44.82218611,44.81041898,44.80994083,44.80380168,44.80669656,44.80669281,44.80469142,44.81638632,44.82592135,44.82631645,44.82744975,44.8444029,44.8485297,44.84930476,44.85444058,44.8581175,44.85847695,44.86201207,44.87447337,44.87019809,44.87815799,44.87475022,44.87328963,44.87610827,44.87895431,44.88170184,44.88639508,44.88467101]}]],[[{"lng":[11.03057736,11.03556343,11.03703482,11.01427885,11.00123328,10.97684407,10.95844418,10.96565811,10.95914501,10.96175887,10.96166634,10.96149785,10.96256107,10.98549698,11.00231986,11.0126731,11.03057736],"lat":[44.90453297,44.90360617,44.90163631,44.88067836,44.8782972,44.85812099,44.85624164,44.86373954,44.87128102,44.87480995,44.87953759,44.88200703,44.88534651,44.90211223,44.90883094,44.90948156,44.90453297]}]],[[{"lng":[11.04775117,11.0866581,11.07385328,11.06150556,11.04663211,11.04165473,11.03629064,11.03402648,11.01959569,10.98267567,10.98320624,10.99620069,10.9917457,10.99403817,10.99364004,10.99500306,11.00290258,11.00609528,11.00799038,11.00437059,11.01584958,11.04775117],"lat":[44.81981405,44.80679011,44.78690369,44.78093837,44.76643793,44.76219702,44.75841289,44.75728296,44.76723452,44.75037246,44.75219518,44.76339043,44.77053859,44.77230923,44.77857325,44.78754878,44.806558,44.80937755,44.81005541,44.81570331,44.81024997,44.81981405]}]],[[{"lng":[10.80871726,10.80356963,10.80230759,10.79232472,10.81404331,10.81437412,10.81293894,10.80149432,10.791348,10.79032201,10.77583244,10.77563159,10.77382761,10.77312514,10.76720756,10.76641233,10.76140766,10.74290451,10.72737558,10.72645076,10.72110263,10.7220988,10.72635546,10.73003205,10.74137949,10.75160006,10.75970797,10.76316791,10.76496176,10.76582288,10.76672862,10.78676871,10.79446981,10.79372799,10.79463908,10.79699691,10.81505168,10.80871726],"lat":[44.5578855,44.55169891,44.54138271,44.5181612,44.51496801,44.51384452,44.51123238,44.49908489,44.49395247,44.49230347,44.49015343,44.49021704,44.49146676,44.4922639,44.50092359,44.50164692,44.50206961,44.4867701,44.48917058,44.48966171,44.49554951,44.49822206,44.49983755,44.50162595,44.51058655,44.52339388,44.53441433,44.53854263,44.54042344,44.54142741,44.54268276,44.60649612,44.60395244,44.58845347,44.58330388,44.57849427,44.56853073,44.5578855]}]],[[{"lng":[11.04255633,11.04260197,11.05797346,11.0590854,11.05614838,11.0653635,11.06266232,11.05513641,11.05072652,11.05120495,11.05056075,11.04753323,11.0448445,11.02691999,11.01347658,11.00950325,10.9908497,10.99022956,10.98532734,10.96078736,10.94254992,10.95101879,10.95388141,10.98610418,10.98820093,11.00035442,11.00689823,11.02732682,11.03706905,11.03855819,11.03912206,11.0397092,11.03899996,11.03195446,11.03075104,11.04255633],"lat":[44.52813412,44.52608014,44.52526843,44.52222805,44.51309842,44.50007646,44.49441769,44.48818016,44.48038841,44.47820852,44.47070068,44.46692836,44.46575895,44.46019539,44.44722643,44.44528886,44.4413754,44.44050566,44.43985394,44.44381066,44.44303676,44.45001333,44.45097742,44.45625756,44.45771938,44.46980607,44.47402146,44.47761716,44.49668673,44.50045921,44.50474787,44.50746964,44.51236167,44.52457767,44.52724583,44.52813412]}]],[[{"lng":[10.80473468,10.81939888,10.8242763,10.82702736,10.8469482,10.85176322,10.8509068,10.86490167,10.86958835,10.8695123,10.86579522,10.86646343,10.87229405,10.87698088,10.88065598,10.88633204,10.88671643,10.8520843,10.8326603,10.79549858,10.79225339,10.79238803,10.79187766,10.7675098,10.76419785,10.76030399,10.75759938,10.75458265,10.75292106,10.75053298,10.74712001,10.73898103,10.76023375,10.75928497,10.78563376,10.79370155,10.78846331,10.78838806,10.79032201,10.791348,10.80473468],"lat":[44.49337109,44.49248117,44.49255189,44.49176519,44.49016182,44.47942478,44.47779118,44.46407756,44.46284858,44.45891568,44.45229653,44.44055069,44.43312707,44.43159168,44.41852237,44.41617808,44.41568107,44.39285007,44.38912127,44.39007627,44.38823668,44.38485856,44.3833811,44.3810781,44.37655142,44.38224723,44.38371132,44.38442392,44.38511565,44.38660172,44.39963592,44.40873585,44.41518023,44.45707274,44.45975861,44.48410125,44.48706425,44.4897605,44.49230347,44.49395247,44.49337109]}]],[[{"lng":[10.82193961,10.83851997,10.84810731,10.85518536,10.86520773,10.86390654,10.863641,10.86338631,10.86319284,10.86625122,10.86667796,10.85594016,10.85731651,10.86588853,10.86985384,10.86944097,10.86125043,10.86040635,10.8254464,10.81653392,10.79740136,10.79563937,10.8033822,10.79332075,10.78583384,10.75138944,10.72946136,10.72568867,10.72609467,10.72557187,10.70008819,10.70811631,10.70994757,10.72304595,10.73281009,10.73273078,10.7511774,10.75597751,10.77686403,10.79217731,10.82193961],"lat":[44.27231938,44.27103634,44.26750549,44.26661747,44.26898449,44.2675098,44.26703698,44.26650996,44.26395629,44.26004412,44.25531961,44.2409009,44.24046439,44.23867712,44.23695572,44.23499085,44.2321901,44.23241049,44.24942304,44.25000631,44.24486228,44.24087468,44.23401848,44.22638938,44.21811595,44.21665071,44.21635468,44.20633742,44.19966907,44.19847956,44.19354099,44.20028149,44.20215373,44.22387011,44.23193309,44.24288187,44.25846364,44.26569129,44.27612667,44.29716116,44.27231938]}]],[[{"lng":[10.95395871,10.9730318,10.98415899,10.9917457,10.99582537,10.99620069,10.99588572,10.98975297,10.98320624,10.98256911,10.98267567,10.98390162,10.98517121,10.98626312,10.99019971,10.99194819,10.99485766,10.99504476,10.9950296,10.9947512,10.98628014,10.98383083,10.97043193,10.96592661,10.95548864,10.94753806,10.9465104,10.94562071,10.92939456,10.92805502,10.92172875,10.90410272,10.89994172,10.90072281,10.89138083,10.89554251,10.89878168,10.91450638,10.93712829,10.9536634,10.95369224,10.94982736,10.95395871],"lat":[44.77133911,44.7787203,44.77164079,44.77053859,44.76492042,44.76339043,44.76265981,44.75595221,44.75219518,44.75058137,44.75037246,44.74960398,44.74905078,44.74847365,44.74617254,44.74485474,44.74095999,44.74052461,44.74008378,44.73970153,44.73719358,44.73057453,44.7219799,44.71941991,44.71274397,44.7045798,44.70477736,44.70497258,44.7085833,44.70892101,44.71759333,44.71835227,44.72004201,44.72472916,44.72604532,44.72874827,44.75972845,44.78320907,44.78979623,44.77970268,44.7795739,44.77296826,44.77133911]}]],[[{"lng":[10.98183464,11.03248992,11.03382044,11.03074314,11.03012041,11.03088776,11.03075104,11.03105654,11.03195446,11.03352075,11.03560093,11.03835267,11.03899996,11.03941808,11.0397092,11.03912206,11.02138412,11.0142175,11.00641798,11.00315104,11.00187163,10.98681739,10.98295008,10.97360818,10.97401665,10.97447874,10.97619928,10.97764574,10.99024469,10.95662393,10.96200268,10.96249113,10.9660027,10.96740414,10.97267349,10.97366498,10.97293071,10.97128395,10.97143005,10.98183464],"lat":[44.56766686,44.54819518,44.54270699,44.5342364,44.53080403,44.52755849,44.52724583,44.52625912,44.52457767,44.52187605,44.51876011,44.5136426,44.51236167,44.51136393,44.50746964,44.50474787,44.50571148,44.50797174,44.50979256,44.51025504,44.51036751,44.51045043,44.50355871,44.5066554,44.51283759,44.51459859,44.51969126,44.52227693,44.53073788,44.54231384,44.55351093,44.55380861,44.55452242,44.55501142,44.55967379,44.56513914,44.57244832,44.57920159,44.58018565,44.56766686]}]],[[{"lng":[10.99505354,11.00315104,11.02138412,11.03912206,11.02732682,10.98820093,10.97200196,10.94962301,10.99505354],"lat":[44.50889341,44.51025504,44.50571148,44.50474787,44.47761716,44.45771938,44.46659082,44.47712571,44.50889341]}]],[[{"lng":[11.01328668,11.04816659,11.02237352,11.02262512,11.02606073,11.03609238,11.03760421,11.04018709,11.03162219,11.03069161,11.00786631,11.00223055,11.00358496,11.00407825,11.00648592,11.00390732,11.00268673,10.98549879,10.97942281,10.97486587,10.97003435,10.9435854,10.92730116,10.93055105,10.93109384,10.9313217,10.92635228,10.92592371,10.92373335,10.94274466,10.9760037,10.96676077,10.98884541,10.99466773,11.00438191,10.9966656,11.01328668],"lat":[44.43026882,44.41610732,44.3735219,44.35781667,44.34986936,44.34585911,44.34258845,44.33180529,44.32336485,44.31684145,44.29693476,44.30599154,44.30663342,44.30717109,44.31208552,44.32318302,44.32415046,44.32554635,44.32421593,44.32272778,44.31957776,44.31442638,44.32203799,44.32801792,44.33003439,44.33370366,44.34725126,44.34833883,44.35168728,44.3601069,44.35960468,44.37634214,44.39339245,44.40261067,44.40822855,44.42953992,44.43026882]}]],[[{"lng":[11.2337067,11.22628285,11.21606638,11.23627061,11.22979555,11.22212949,11.1958288,11.19348756,11.18037643,11.18212808,11.14531234,11.13160657,11.1275841,11.12922486,11.13265707,11.14088754,11.14363011,11.15000128,11.15084575,11.15245487,11.15227635,11.15753357,11.16572906,11.1614163,11.15233496,11.14949258,11.1834212,11.2337067],"lat":[44.61507735,44.58806724,44.57166839,44.54189265,44.53104868,44.53262055,44.53001406,44.52394975,44.52307731,44.54990327,44.56263511,44.5674275,44.56891306,44.57242205,44.57587344,44.58238118,44.58374309,44.58364578,44.58410701,44.58661985,44.58914983,44.58643847,44.58837071,44.5788885,44.57742165,44.56860668,44.58044858,44.61507735]}]],[[{"lng":[11.29718335,11.30746025,11.32143429,11.33334251,11.34334927,11.34654537,11.34616558,11.34697601,11.35459122,11.35224675,11.3453161,11.34518498,11.34517903,11.34525409,11.35055824,11.35876786,11.35939026,11.35947023,11.35940533,11.34529292,11.35040273,11.3686824,11.36975906,11.37810699,11.38386843,11.38863093,11.37542041,11.36212552,11.36266228,11.34835022,11.33878686,11.33200335,11.31796635,11.31305897,11.31414337,11.31526787,11.31661509,11.31768897,11.31807854,11.31772373,11.29912174,11.30620395,11.30248023,11.29933212,11.2977605,11.29366652,11.2948679,11.29912817,11.29701646,11.28823266,11.29718335],"lat":[44.66806391,44.6736344,44.66995137,44.66862681,44.66909079,44.66845855,44.66797629,44.66498662,44.6609588,44.65622525,44.64897077,44.64872927,44.64842558,44.64817591,44.64233796,44.63954105,44.63840965,44.62994524,44.62966581,44.6247578,44.61417508,44.60947102,44.60114455,44.59414264,44.59244253,44.5878176,44.58040917,44.58426183,44.58937432,44.59601172,44.59674709,44.60362809,44.60372215,44.60659723,44.60930973,44.61096756,44.61244135,44.6134374,44.61418062,44.61725988,44.62406261,44.63454983,44.6361706,44.63323852,44.63418559,44.64435111,44.65037202,44.66363163,44.66587577,44.66871688,44.66806391]}]],[[{"lng":[11.59750907,11.61456681,11.63245939,11.59935945,11.59654867,11.57550136,11.56785419,11.51942324,11.49944167,11.52006828,11.53756052,11.54974404,11.5399094,11.54863119,11.57422569,11.57761642,11.57556155,11.59272667,11.59750907],"lat":[44.70702496,44.69012295,44.67294507,44.64277361,44.64626016,44.63620267,44.63476583,44.64088704,44.6490661,44.65875867,44.67771181,44.68975265,44.68887029,44.69751773,44.69244334,44.69526439,44.70363898,44.71169761,44.70702496]}]],[[{"lng":[11.4851662,11.48163566,11.47295221,11.46866985,11.46979721,11.46843518,11.46837233,11.45109799,11.44253413,11.42953198,11.4328682,11.41648124,11.41369265,11.36975906,11.41951377,11.42202732,11.44554666,11.4480263,11.44944335,11.45111804,11.46190853,11.46654101,11.48607396,11.48610584,11.4851662],"lat":[44.68119187,44.67299617,44.67081817,44.65100512,44.64711256,44.64330254,44.64321445,44.62551792,44.6147254,44.60390244,44.60228241,44.59165884,44.58489688,44.60114455,44.67073635,44.67173686,44.66812677,44.67211451,44.67520395,44.67918188,44.6809549,44.68719979,44.68395773,44.68390978,44.68119187]}]],[[{"lng":[11.37059999,11.38861288,11.40600976,11.41488841,11.40746436,11.43370377,11.41726499,11.42606049,11.4154936,11.40522709,11.40024667,11.39140113,11.37919753,11.37511474,11.37475596,11.37410076,11.37460769,11.37315142,11.36226108,11.35874661,11.35823763,11.35523311,11.34623237,11.33735823,11.33330321,11.32480117,11.31340773,11.28226468,11.2810692,11.28377063,11.28373273,11.28654097,11.28947892,11.29028973,11.2966916,11.29673962,11.29678814,11.29662177,11.29460427,11.26169336,11.25694259,11.23570711,11.23750188,11.24123513,11.2389443,11.23700414,11.23290939,11.23207944,11.22964224,11.24505172,11.2690439,11.28161563,11.30903328,11.3111492,11.32052892,11.37059999],"lat":[44.55167469,44.54156185,44.54279272,44.54002153,44.52856635,44.51317043,44.49063089,44.48740257,44.48333021,44.47635848,44.46425587,44.4619405,44.46000676,44.45906099,44.45891204,44.45804004,44.45370601,44.4492502,44.45099358,44.44779214,44.44682643,44.44358901,44.43654922,44.43164007,44.42595277,44.42269156,44.42112042,44.42582416,44.44332548,44.45046905,44.45171271,44.45915733,44.47078321,44.47971604,44.48309897,44.48324092,44.48349595,44.48574487,44.48980906,44.49142626,44.49752046,44.50324301,44.5120146,44.52166575,44.52384486,44.52419685,44.52416956,44.52439059,44.53053572,44.55565047,44.5325079,44.54857878,44.53167001,44.54824572,44.54527818,44.55167469]}]],[[{"lng":[11.65497556,11.66520019,11.66559595,11.66557266,11.66580053,11.66544235,11.63994473,11.63340144,11.63243541,11.63441586,11.6331768,11.6270233,11.62599231,11.62113291,11.61853892,11.61068447,11.60808209,11.60105567,11.57582585,11.57160594,11.57530199,11.55585295,11.58945288,11.62573513,11.65050054,11.65497556],"lat":[44.29600693,44.28577845,44.28304813,44.28281477,44.27997005,44.27871802,44.27374235,44.26362585,44.25994799,44.25830881,44.25552854,44.24777937,44.24712789,44.24543902,44.24484134,44.2439319,44.24314063,44.23864514,44.25751562,44.26388908,44.26905662,44.2777819,44.29334384,44.28603531,44.30157446,44.29600693]}]],[[{"lng":[11.59881324,11.6239115,11.61980723,11.59358518,11.5820933,11.62914376,11.61215479,11.6209383,11.59771879,11.57508771,11.57404226,11.56865552,11.56632937,11.54336054,11.53112889,11.52468235,11.52067424,11.50114218,11.48990028,11.50869766,11.51600876,11.48648292,11.48828116,11.47573204,11.47071391,11.47181761,11.47633224,11.46357468,11.46636195,11.47425829,11.45927429,11.46406537,11.47280726,11.5238368,11.53554561,11.55065186,11.55764931,11.57004248,11.57370882,11.57550136,11.58907363,11.59654867,11.59881324],"lat":[44.62699938,44.61283161,44.60923326,44.60023059,44.58357008,44.5775193,44.55686576,44.55113185,44.53776126,44.51945674,44.51579045,44.51019018,44.50894841,44.49722422,44.4907887,44.48765118,44.48392383,44.4936919,44.4919712,44.50350536,44.51300577,44.52927826,44.53893751,44.5442844,44.54292348,44.54459372,44.55162242,44.56265638,44.56748844,44.57996534,44.5851634,44.5955062,44.60271371,44.58877119,44.60720902,44.60614436,44.61119394,44.63253689,44.63529788,44.63620267,44.64299504,44.64626016,44.62699938]}]],[[{"lng":[11.28612719,11.31765189,11.32128383,11.308252,11.30812345,11.30808299,11.30871901,11.31576472,11.31614017,11.31628435,11.31613633,11.31550652,11.31271777,11.3113258,11.30903328,11.28161563,11.2690439,11.25117273,11.24505172,11.23627061,11.21610874,11.21606638,11.22628285,11.23574348,11.24248628,11.25959983,11.26748704,11.28612719],"lat":[44.59916144,44.59195566,44.56819654,44.56443671,44.56405221,44.56366592,44.56255477,44.5566955,44.5560037,44.55456039,44.55432032,44.55336084,44.55171254,44.54984458,44.53167001,44.54857878,44.5325079,44.55570097,44.55565047,44.54189265,44.56200965,44.57166839,44.58806724,44.5757781,44.57616455,44.58073339,44.6065714,44.59916144]}]],[[{"lng":[11.06360246,11.08118532,11.09031774,11.09526029,11.11674684,11.11935305,11.13106444,11.14130952,11.15904283,11.17890978,11.17227288,11.15473154,11.1493086,11.13785311,11.13224917,11.12704352,11.08942891,11.0294936,11.03041171,11.03986065,11.04203684,11.0402054,11.04433675,11.05697906,11.06276166,11.06569048,11.05740114,11.05698164,11.05317574,11.05656326,11.05846413,11.06074025,11.06360246],"lat":[44.21418031,44.21398779,44.21175649,44.20987769,44.20913593,44.2086245,44.20532583,44.19909151,44.1784818,44.16955273,44.15987212,44.15731902,44.1521691,44.14936139,44.1323953,44.10884813,44.08995184,44.09745585,44.10030308,44.1111961,44.11730463,44.1480462,44.15378488,44.14971132,44.149966,44.15546793,44.17763497,44.18465922,44.19805379,44.20360731,44.21200713,44.21403506,44.21418031]}]],[[{"lng":[11.26169336,11.26821317,11.29460427,11.29673962,11.29217319,11.29028973,11.28947892,11.28373273,11.28377063,11.27898491,11.27135005,11.26792525,11.2613938,11.24809088,11.23311687,11.24165308,11.24191269,11.24010274,11.2468144,11.26169336],"lat":[44.49142626,44.49007593,44.48980906,44.48324092,44.48217531,44.47971604,44.47078321,44.45171271,44.45046905,44.45084095,44.44971362,44.44896135,44.44970984,44.45212984,44.45170914,44.46330314,44.46503556,44.47559733,44.49108484,44.49142626]}]],[[{"lng":[11.58460081,11.60562193,11.60627868,11.60037478,11.5975567,11.59014798,11.58860772,11.58409646,11.61943536,11.62439053,11.62806799,11.64028595,11.58945288,11.55598214,11.54884485,11.53774433,11.53640524,11.53232515,11.52094756,11.52308045,11.52076553,11.51542192,11.51460261,11.51017587,11.50442066,11.49476269,11.50981613,11.52577789,11.5330946,11.52003867,11.54121076,11.47596287,11.46702097,11.46012828,11.43876539,11.43085387,11.47405069,11.48072342,11.49771401,11.50193251,11.50825527,11.5225565,11.52059197,11.52721973,11.55623292,11.53619714,11.53976832,11.57332164,11.58460081],"lat":[44.35835481,44.34437572,44.32878665,44.32740828,44.32815102,44.33109502,44.33067026,44.31939475,44.3107136,44.30780275,44.30166214,44.29619292,44.29334384,44.27835856,44.27906451,44.29011624,44.29549251,44.29343369,44.29104827,44.28599562,44.26548499,44.26263531,44.26385804,44.26905217,44.27455323,44.23794549,44.23692683,44.25393896,44.24965526,44.23677083,44.22146653,44.24248932,44.24422802,44.2410412,44.24316732,44.25052485,44.27861344,44.30883044,44.31185116,44.31176216,44.30844207,44.31092286,44.3209497,44.32903761,44.34334921,44.35274873,44.35630473,44.35653115,44.35835481]}]],[[{"lng":[11.03479012,11.04348721,11.04063209,11.03647136,11.03509355,11.03335971,11.03286437,11.03276082,11.0326934,11.03177376,11.03240512,11.03376352,11.08446187,11.05163435,11.03733074,11.03553519,11.00567136,10.98849392,10.98173445,10.96780189,10.96380669,10.97372082,10.94889216,10.94972425,10.94974477,10.94990678,10.96670558,11.00223055,11.00786631,11.03162219,11.03479012],"lat":[44.32034596,44.31947774,44.31428185,44.31144598,44.31098834,44.31086224,44.31060998,44.31044807,44.31033393,44.30855031,44.30141559,44.29977596,44.2737916,44.2495405,44.25274,44.25290874,44.24932232,44.27117283,44.26794409,44.25308495,44.25350147,44.2769811,44.28640591,44.29285125,44.29294993,44.29315874,44.30224709,44.30599154,44.29693476,44.32336485,44.32034596]}]],[[{"lng":[11.4385165,11.43876539,11.46012828,11.47596287,11.54121076,11.55436522,11.55412103,11.55315131,11.5491291,11.56167682,11.53563487,11.51613249,11.447627,11.45129722,11.42106489,11.4385165],"lat":[44.24333808,44.24316732,44.2410412,44.24248932,44.22146653,44.21397013,44.21104607,44.20876479,44.20502768,44.18549325,44.19038947,44.15755237,44.19948529,44.22056833,44.23924426,44.24333808]}]],[[{"lng":[11.02641639,11.05121001,11.05395898,11.0532029,11.05317574,11.05327771,11.05740114,11.06569048,11.06276166,11.0402054,11.04203684,11.03041171,11.0294936,11.03148111,11.00160351,11.01430906,11.00225599,10.98491292,10.97913436,10.97424106,10.98050742,10.99774361,11.02641639],"lat":[44.20774745,44.20048109,44.20078561,44.19854284,44.19805379,44.19727376,44.17763497,44.15546793,44.149966,44.1480462,44.11730463,44.10030308,44.09745585,44.09582326,44.11183591,44.13748732,44.14439306,44.14833249,44.15409849,44.16424464,44.1788026,44.18531593,44.20774745]}]],[[{"lng":[11.72290224,11.70378877,11.67652062,11.65432377,11.64345951,11.63918086,11.63865451,11.60499206,11.60557653,11.61737188,11.62180734,11.64913032,11.6767892,11.71554933,11.73230489,11.73053596,11.72805098,11.72604178,11.72290224],"lat":[44.46941179,44.44055849,44.42045313,44.42610858,44.42405774,44.42174689,44.42170504,44.43191689,44.43822673,44.45319421,44.46178302,44.46086988,44.45103523,44.46949975,44.48670029,44.48249852,44.47768084,44.47422858,44.46941179]}]],[[{"lng":[11.34923538,11.34962838,11.35103127,11.35569138,11.3578313,11.34928883,11.34718854,11.3566875,11.35802045,11.3528393,11.34616558,11.34334927,11.32143429,11.30746025,11.29718335,11.2960016,11.28823266,11.27104507,11.26364959,11.25902863,11.24712336,11.26309945,11.26671476,11.27037004,11.27543385,11.2774338,11.31179407,11.31988067,11.33133009,11.33043704,11.34959423,11.34923538],"lat":[44.70145279,44.69786911,44.69696196,44.69487299,44.6930835,44.68343085,44.67798157,44.67305682,44.67127836,44.66636874,44.66797629,44.66909079,44.66995137,44.6736344,44.66806391,44.67464968,44.66871688,44.66879288,44.67974927,44.6826152,44.68434907,44.68690403,44.69090414,44.69857737,44.70557786,44.70902494,44.69930277,44.7081657,44.71220455,44.71042007,44.70213294,44.70145279]}],[{"lng":[11.29422443,11.29366652,11.29933212,11.29663518,11.2899109,11.28276884,11.29104651,11.29464246,11.29701646,11.29422443],"lat":[44.64746651,44.64435111,44.63323852,44.63034962,44.64122111,44.64375879,44.64652489,44.65089081,44.66587577,44.64746651]}]],[[{"lng":[11.33200335,11.36266228,11.36212552,11.37542041,11.38663544,11.40947927,11.40599334,11.38217302,11.37059999,11.35917363,11.3111492,11.31271777,11.31613633,11.31614017,11.30871901,11.30812345,11.31839436,11.32128383,11.32309571,11.3229836,11.32277295,11.32257588,11.32109452,11.3159354,11.31305897,11.33200335],"lat":[44.60362809,44.58937432,44.58426183,44.58040917,44.58619388,44.58557105,44.57338839,44.54840382,44.55167469,44.5529427,44.54824572,44.55171254,44.55432032,44.5560037,44.56255477,44.56405221,44.56312501,44.56819654,44.59518715,44.59563391,44.59609845,44.59640966,44.59717686,44.59714887,44.60659723,44.60362809]}]],[[{"lng":[11.55797155,11.56639717,11.56479236,11.58553855,11.58829724,11.5884219,11.59243849,11.60995499,11.61158536,11.62193142,11.62180734,11.61964877,11.61737188,11.60557653,11.60499206,11.62348009,11.63918086,11.63197284,11.62276408,11.6070181,11.60639828,11.53976832,11.55700664,11.55623292,11.55609703,11.54106157,11.52721973,11.5225565,11.50825527,11.49771401,11.48072342,11.48276372,11.48941643,11.45527408,11.45582608,11.47671702,11.49997938,11.52168919,11.53373351,11.54360267,11.54622979,11.55056665,11.55797155],"lat":[44.47831825,44.47549677,44.47330325,44.47142067,44.47086582,44.47082418,44.46884867,44.46417667,44.46614377,44.46199026,44.46178302,44.45885747,44.45319421,44.43822673,44.43191689,44.42772701,44.42174689,44.39390291,44.37868213,44.36831959,44.36258949,44.35630473,44.34444484,44.34334921,44.34318121,44.33531995,44.32903761,44.31092286,44.30844207,44.31185116,44.30883044,44.33118766,44.3441991,44.36382055,44.37916215,44.39078783,44.42564805,44.44168798,44.45502691,44.47220819,44.47477777,44.4781009,44.47831825]}]],[[{"lng":[11.46053583,11.47181761,11.47071391,11.474037,11.47573204,11.48290212,11.48828116,11.48648292,11.51600876,11.49614905,11.48990028,11.49245122,11.479169,11.46981329,11.45784673,11.45524745,11.45498286,11.45458346,11.45095785,11.45044951,11.4479381,11.44393759,11.4432659,11.44538054,11.44610155,11.44266775,11.41726499,11.4204881,11.42642177,11.43370377,11.42445666,11.43110096,11.4393399,11.4442845,11.4426956,11.45077137,11.46053583],"lat":[44.54367112,44.54459372,44.54292348,44.5418258,44.5442844,44.54246038,44.53893751,44.52927826,44.51300577,44.50012039,44.4919712,44.4873462,44.47767248,44.47800808,44.48266355,44.48355785,44.48363894,44.48371055,44.48376595,44.48375155,44.48338682,44.48474021,44.48503028,44.48658126,44.4896323,44.49073212,44.49063089,44.49840884,44.50349924,44.51317043,44.52164949,44.52088194,44.52992525,44.53757959,44.54501136,44.54250832,44.54367112]}]],[[{"lng":[11.18439806,11.183205,11.18226153,11.18235387,11.20514372,11.19653054,11.19384321,11.26368792,11.12764259,11.13785311,11.17890978,11.15904283,11.14242,11.14147608,11.14130952,11.14132179,11.16108543,11.15893495,11.16317393,11.18439806],"lat":[44.23582927,44.23122911,44.22535306,44.22492929,44.17902159,44.16293893,44.14560979,44.10427195,44.10968456,44.14936139,44.16955273,44.1784818,44.19557022,44.19839965,44.19909151,44.19953861,44.20766729,44.21988835,44.22895901,44.23582927]}]],[[{"lng":[11.26356623,11.29334728,11.29033679,11.24608308,11.241301,11.21667232,11.20668233,11.20637131,11.20617203,11.20857097,11.20963996,11.19638296,11.19136952,11.18897875,11.18330044,11.17132226,11.16672844,11.1580119,11.14830789,11.10536168,11.11699352,11.13196854,11.15208928,11.17596952,11.17819336,11.20784504,11.20903765,11.21443262,11.2164928,11.22434992,11.26356623],"lat":[44.80421583,44.80280764,44.8002655,44.75838253,44.74130364,44.74855507,44.73853704,44.7378105,44.7372202,44.72536348,44.71994482,44.69716957,44.69327117,44.69157678,44.68899555,44.69429624,44.6956956,44.6981546,44.70087402,44.69051642,44.71043589,44.78443778,44.78630437,44.79187146,44.79618608,44.80430345,44.80442892,44.80466647,44.80466249,44.80155694,44.80421583]}]],[[{"lng":[11.66321126,11.67652062,11.65210124,11.66013566,11.66194167,11.64546184,11.62898695,11.61341396,11.61166269,11.60967549,11.60958107,11.60562193,11.59076444,11.60639828,11.62276408,11.63918086,11.65432377,11.66321126],"lat":[44.42407291,44.42045313,44.3936733,44.37766593,44.36179721,44.35606868,44.35349813,44.34832306,44.34552786,44.34430225,44.3442774,44.34437572,44.3572366,44.36258949,44.37868213,44.42174689,44.42610858,44.42407291]}]],[[{"lng":[11.53603113,11.53640524,11.53826709,11.53774433,11.54884485,11.57530199,11.57582585,11.59663328,11.60070747,11.6013149,11.60105567,11.6012854,11.60109797,11.60087659,11.59934959,11.59869439,11.59456339,11.59025989,11.57881047,11.56821249,11.55555846,11.55544123,11.55187156,11.55136205,11.55093132,11.52003867,11.52577789,11.50981613,11.49554879,11.49482729,11.49476269,11.49471106,11.49627455,11.49930058,11.50361614,11.50442066,11.5046201,11.51017587,11.51517308,11.51542192,11.5162653,11.51885783,11.52076553,11.52080534,11.52308045,11.52094756,11.53603113],"lat":[44.29550082,44.29549251,44.29448446,44.29011624,44.27906451,44.26905662,44.25751562,44.24819392,44.24298646,44.23968546,44.23864514,44.23850171,44.23822689,44.23803388,44.23709184,44.23675115,44.23521561,44.23666377,44.232201,44.21949836,44.22320341,44.22317001,44.2198378,44.219273,44.21678333,44.23677083,44.25393896,44.23692683,44.23686036,44.23782592,44.23794549,44.23818689,44.26246536,44.26833312,44.27358901,44.27455323,44.27473117,44.26905217,44.26284055,44.26263531,44.26228925,44.26234255,44.26548499,44.26559214,44.28599562,44.29104827,44.29550082]}]],[[{"lng":[10.98849392,11.00567136,11.05163435,11.04504265,11.04323661,11.03100138,10.99774361,10.95551286,10.95140125,10.94944327,10.94130536,10.93461161,10.93647525,10.93298973,10.90724322,10.9402918,10.94265761,10.94843739,10.95356452,10.95641325,10.9567907,10.95705504,10.95715948,10.98849392],"lat":[44.27117283,44.24932232,44.2495405,44.22911245,44.22911552,44.22376774,44.18531593,44.18528053,44.18390644,44.18274475,44.17549473,44.17498036,44.17810096,44.1826013,44.20543403,44.22561067,44.22621415,44.22481926,44.22515705,44.22576043,44.22588675,44.22602403,44.22610608,44.27117283]}]],[[{"lng":[11.4076275,11.4128987,11.43392016,11.43785503,11.4444406,11.44666877,11.44842216,11.4521916,11.45278097,11.45336535,11.51831257,11.48326618,11.45055993,11.43220294,11.41887366,11.40719613,11.39080803,11.35003698,11.35279011,11.37699763,11.3883459,11.39170203,11.3953084,11.39924104,11.4076275],"lat":[44.76628121,44.76530118,44.75987666,44.75977917,44.76059255,44.76073385,44.76077728,44.76065133,44.76050814,44.76028404,44.72252937,44.72323651,44.73362527,44.73563158,44.72796691,44.74086255,44.73524473,44.75134735,44.75323117,44.77407653,44.77865465,44.77675244,44.77181565,44.76857413,44.76628121]}]],[[{"lng":[11.43882182,11.45927429,11.47425829,11.46357468,11.47633224,11.4426956,11.43110096,11.40746436,11.41488841,11.38861288,11.38102468,11.38217302,11.38767667,11.40303902,11.40599334,11.40947927,11.41369265,11.41571101,11.41648124,11.4328682,11.43882182],"lat":[44.59768624,44.5851634,44.57996534,44.56265638,44.55162242,44.54501136,44.52088194,44.52856635,44.54002153,44.54156185,44.54833462,44.54840382,44.55130464,44.56753996,44.57338839,44.58557105,44.58489688,44.58633337,44.59165884,44.60228241,44.59768624]}]],[[{"lng":[11.17755408,11.19566751,11.19477135,11.18439806,11.16317393,11.15893495,11.15983416,11.16253235,11.16108543,11.14130952,11.11935305,11.11674684,11.09526029,11.09255749,11.09031774,11.08118532,11.06074025,11.05656326,11.05121001,11.02512113,11.04323661,11.04890439,11.06228682,11.06818064,11.09694987,11.09816203,11.09861982,11.1003811,11.103175,11.10586373,11.10871158,11.11366455,11.1184581,11.13384656,11.15501867,11.15831775,11.16019831,11.16406776,11.17769041,11.17755408],"lat":[44.31095867,44.28171952,44.24705106,44.23582927,44.22895901,44.21988835,44.21730495,44.21415632,44.20766729,44.19909151,44.2086245,44.20913593,44.20987769,44.21051864,44.21175649,44.21398779,44.21403506,44.20360731,44.20048109,44.20841414,44.22911552,44.22809398,44.22781029,44.23084178,44.23606993,44.23879578,44.25047931,44.25247708,44.25350543,44.25480912,44.25782203,44.28857589,44.29481377,44.3004263,44.30392856,44.30791356,44.31284416,44.31189929,44.31356349,44.31095867]}]],[[{"lng":[11.78967724,11.77868843,11.74977277,11.79670582,11.78038132,11.78828281,11.79141933,11.79891166,11.78133445,11.75521552,11.80994406,11.80785534,11.80447297,11.80366933,11.8026701,11.7999721,11.79892461,11.79953351,11.78880562,11.78596702,11.75876228,11.74286925,11.74049756,11.73649858,11.73297199,11.71388159,11.70265859,11.69110619,11.69777196,11.69755091,11.69577033,11.68394277,11.67532062,11.66759797,11.66763231,11.67153902,11.66557266,11.65050054,11.64028595,11.63586196,11.58420679,11.58409646,11.58400241,11.58414837,11.58860772,11.59014798,11.59431357,11.5975567,11.60011892,11.60037478,11.60420272,11.60612015,11.60627868,11.60244005,11.59702447,11.60145361,11.60562193,11.60967549,11.62898695,11.66194167,11.66013566,11.65410685,11.65210124,11.66411368,11.66704064,11.67652062,11.67771538,11.70378877,11.72604178,11.73053596,11.73230489,11.73314768,11.73351607,11.73566192,11.74829343,11.76162459,11.76526842,11.76515611,11.76452815,11.76887223,11.7735256,11.77518895,11.77418327,11.78967724],"lat":[44.56575964,44.50351639,44.49756929,44.48569339,44.46724107,44.46351931,44.46345615,44.46076546,44.43626721,44.40248116,44.38322396,44.37753328,44.37911988,44.37940971,44.3796458,44.37943294,44.37845935,44.37211108,44.36048578,44.34805946,44.33228142,44.31648215,44.31213681,44.30917276,44.30607388,44.29833242,44.28793949,44.28951783,44.30896388,44.30933822,44.31015452,44.31411534,44.3158347,44.31185619,44.31136925,44.28822193,44.28281477,44.30157446,44.29619292,44.29673685,44.31928366,44.31939475,44.31950868,44.32428823,44.33067026,44.33109502,44.32985033,44.32815102,44.32743662,44.32740828,44.32724055,44.32839302,44.32878665,44.33387015,44.33534053,44.34322055,44.34437572,44.34430225,44.35349813,44.36179721,44.37766593,44.38704185,44.3936733,44.41518207,44.4190394,44.42045313,44.42117176,44.44055849,44.47422858,44.48249852,44.48670029,44.48936228,44.48991162,44.49179347,44.50106749,44.51474392,44.5229475,44.52675543,44.53186601,44.54547755,44.55798422,44.56276005,44.56631963,44.56575964]}]],[[{"lng":[10.88167437,10.88553024,10.88908331,10.88970292,10.89009384,10.8932221,10.89332376,10.8937634,10.89424795,10.93647525,10.90370276,10.89346617,10.88110604,10.87902021,10.87865562,10.87858513,10.87858325,10.88191717,10.87870727,10.84866482,10.81503692,10.81408104,10.81101011,10.8056016,10.80691303,10.8552,10.85586913,10.85028285,10.88167437],"lat":[44.22514776,44.22513818,44.22466533,44.22446601,44.22416245,44.21590894,44.21244111,44.21131745,44.21081426,44.17810096,44.16458984,44.12462552,44.11228171,44.10758323,44.10640362,44.10580552,44.10569694,44.10250335,44.09861952,44.09805853,44.11562143,44.12038392,44.1286795,44.14110838,44.14785231,44.20738595,44.21274985,44.22782142,44.22514776]}]],[[{"lng":[11.30492749,11.31081336,11.32359534,11.33062127,11.36487215,11.36876045,11.36722492,11.36456286,11.36457725,11.37397055,11.36584525,11.33222802,11.31223639,11.30440656,11.29762374,11.29390694,11.28953647,11.28989478,11.27978533,11.27856981,11.27862201,11.27975505,11.28289762,11.29566768,11.30492749],"lat":[44.33041538,44.32427863,44.31491966,44.31183649,44.3136124,44.30801703,44.30609584,44.29861682,44.29396097,44.26054796,44.24876818,44.23547281,44.23978499,44.24866762,44.25265191,44.25434827,44.25578924,44.28751023,44.2975723,44.31092517,44.31107887,44.31350444,44.31508182,44.31499682,44.33041538]}]],[[{"lng":[11.55279664,11.58303046,11.57556155,11.57301946,11.57761642,11.54863119,11.47033979,11.45109799,11.46843518,11.46979721,11.46866985,11.47295221,11.47639502,11.48139283,11.48163566,11.48610584,11.46654101,11.46474279,11.48317466,11.51831257,11.51613267,11.55279664],"lat":[44.7214375,44.70718923,44.70363898,44.69904329,44.69526439,44.69751773,44.6220243,44.62551792,44.64330254,44.64711256,44.65100512,44.67081817,44.67426791,44.6729598,44.67299617,44.68390978,44.68719979,44.69576826,44.72320024,44.72252937,44.733568,44.7214375]}]],[[{"lng":[11.18000893,11.18312378,11.19902927,11.20169331,11.20555434,11.2077209,11.2191761,11.22517073,11.23431435,11.23590909,11.23732064,11.23770485,11.24396033,11.26646705,11.27486575,11.28213012,11.2816631,11.2704638,11.23857925,11.23218409,11.23051096,11.22370247,11.22207447,11.2215358,11.226028,11.23167748,11.24065062,11.24082031,11.24137272,11.24437493,11.24428592,11.24294072,11.23806172,11.212762,11.20984151,11.20095692,11.19566751,11.19459642,11.17753566,11.17648989,11.17769041,11.12364871,11.12815558,11.16668454,11.16566903,11.16477424,11.16242986,11.1561663,11.15375364,11.16074433,11.16111894,11.16168703,11.16274788,11.16373409,11.16363826,11.16525348,11.17626583,11.17774931,11.17954064,11.18000893],"lat":[44.38627031,44.38299402,44.37788526,44.37404941,44.37247818,44.37209927,44.37192895,44.3728774,44.37677253,44.3774891,44.37821486,44.37843577,44.38468632,44.3478427,44.3377282,44.33513955,44.33233665,44.32304965,44.33094844,44.33102864,44.32994668,44.32313387,44.32074608,44.31328651,44.30771802,44.30516966,44.30427932,44.30422929,44.30402376,44.30239155,44.30194709,44.29931715,44.29627992,44.29185752,44.28976861,44.28186976,44.28171952,44.28219251,44.29497343,44.30012778,44.31356349,44.33392166,44.34609669,44.34821181,44.35374356,44.35465911,44.35492692,44.35858289,44.36375548,44.36803809,44.36813565,44.36816203,44.36825618,44.36894363,44.37615886,44.37881667,44.38579481,44.38629542,44.38635858,44.38627031]}]],[[{"lng":[11.74905062,11.77518895,11.76452815,11.76162459,11.73377206,11.73351607,11.73314768,11.73230489,11.7257359,11.72460627,11.71997393,11.71554933,11.6767892,11.6657939,11.64913032,11.62180734,11.61158536,11.58829724,11.56479236,11.56639717,11.55056665,11.53112889,11.59771879,11.61060928,11.62258693,11.68065568,11.69834841,11.74905062],"lat":[44.57679833,44.56276005,44.53186601,44.51474392,44.49017555,44.48991162,44.48936228,44.48670029,44.4838556,44.48192734,44.47482515,44.46949975,44.45103523,44.44940035,44.46086988,44.46178302,44.46614377,44.47086582,44.47330325,44.47549677,44.4781009,44.4907887,44.53776126,44.53952196,44.54674075,44.56036206,44.57988819,44.57679833]}]],[[{"lng":[11.51942324,11.52517688,11.57550136,11.55764931,11.53554561,11.52995866,11.5238368,11.47280726,11.45927429,11.44162554,11.43922321,11.4328682,11.42953198,11.45109799,11.47033979,11.49630687,11.49944167,11.51942324],"lat":[44.64088704,44.64248326,44.63620267,44.61119394,44.60720902,44.59871268,44.58877119,44.60271371,44.5851634,44.59524968,44.59689052,44.60228241,44.60390244,44.62551792,44.6220243,44.64127456,44.6490661,44.64088704]}]],[[{"lng":[11.64065881,11.67399974,11.69077754,11.6953466,11.72178991,11.72387495,11.7280364,11.75831489,11.77185786,11.77660905,11.80639882,11.78527487,11.78562361,11.75918197,11.74558468,11.73460425,11.69834841,11.69660524,11.68065568,11.61060928,11.6209383,11.61215479,11.62914376,11.5820933,11.59678958,11.59358518,11.60573079,11.60974165,11.61980723,11.6239115,11.59881324,11.60716937,11.59935945,11.60584588,11.63245939,11.64065881],"lat":[44.6648449,44.63226128,44.62871613,44.63516368,44.63588642,44.63671103,44.65421897,44.64849207,44.64079894,44.64396758,44.62356382,44.60571071,44.5850455,44.57961127,44.57995945,44.58442383,44.57988819,44.57310954,44.56036206,44.53952196,44.55113185,44.55686576,44.5775193,44.58357008,44.59676778,44.60023059,44.60626345,44.60737981,44.60923326,44.61283161,44.62699938,44.63164024,44.64277361,44.6581749,44.67294507,44.6648449]}]],[[{"lng":[11.29297719,11.30440656,11.30935977,11.31223639,11.33222802,11.33774075,11.35820677,11.36584525,11.36352204,11.37355832,11.38923547,11.38738848,11.34280936,11.29595749,11.29433018,11.30209664,11.27958766,11.27597824,11.2809288,11.28089394,11.27164297,11.29297719],"lat":[44.2545577,44.24866762,44.24451794,44.23978499,44.23547281,44.24345081,44.24796966,44.24876818,44.24414213,44.22573185,44.21245783,44.20522359,44.20581921,44.17155149,44.17468679,44.18255816,44.19076299,44.20430054,44.21244222,44.21352495,44.23307458,44.2545577]}]],[[{"lng":[11.45702512,11.45527408,11.48542836,11.48941643,11.48884756,11.48712515,11.48434008,11.48276372,11.4837265,11.48361907,11.48072342,11.48177675,11.47692488,11.47405069,11.47202138,11.43735075,11.43227732,11.43085387,11.42989964,11.42809101,11.38923547,11.36352204,11.37397055,11.36722492,11.40029472,11.40144072,11.41093465,11.41107198,11.41101515,11.41012735,11.41050244,11.42009976,11.42134143,11.42366927,11.42831744,11.4360225,11.44711549,11.45582608,11.45702512],"lat":[44.37637479,44.36382055,44.3481622,44.3441991,44.33872604,44.33650277,44.33408093,44.33118766,44.32320888,44.31695095,44.30883044,44.29262622,44.282056,44.27861344,44.27625985,44.25250083,44.25083661,44.25052485,44.25039298,44.24975929,44.21245783,44.24414213,44.26054796,44.30609584,44.32988208,44.34911591,44.35795507,44.35837698,44.35984055,44.3617718,44.36330559,44.36302545,44.36112432,44.35960353,44.35874292,44.35937662,44.36685465,44.37916215,44.37637479]}]],[[{"lng":[11.17288608,11.17617841,11.16793269,11.17060165,11.20033127,11.19211635,11.18040139,11.18013868,11.17867554,11.17431959,11.16125633,11.15913775,11.15992863,11.16052652,11.16136582,11.16177043,11.16363826,11.16387436,11.16440589,11.16415378,11.16373409,11.16302145,11.16274788,11.16074433,11.15375364,11.15373722,11.1561663,11.16242986,11.16566903,11.16668454,11.13751669,11.10617421,11.10834757,11.10648238,11.09927632,11.09026823,11.0884427,11.08850441,11.0890505,11.10322332,11.11406112,11.12600733,11.12557935,11.11453328,11.11824579,11.13600606,11.13610606,11.13220335,11.13135495,11.13100052,11.13198366,11.14872895,11.15139328,11.17288608],"lat":[44.50687776,44.5061663,44.49757047,44.4778706,44.4593312,44.43899991,44.43518207,44.43487538,44.43288616,44.42608894,44.3954444,44.38322791,44.3793885,44.37823891,44.37691313,44.37660949,44.37615886,44.37607337,44.37563735,44.36975381,44.36894363,44.36837871,44.36825618,44.36803809,44.36375548,44.36339286,44.35858289,44.35492692,44.35374356,44.34821181,44.36249697,44.35842616,44.39252206,44.39499621,44.39665208,44.40243728,44.40376202,44.40395218,44.40498313,44.41494431,44.42689151,44.4281146,44.44617114,44.45780337,44.46678777,44.46678208,44.47135296,44.47356121,44.47650345,44.48069007,44.48243621,44.49894013,44.50071522,44.50687776]}]],[[{"lng":[11.29942018,11.31951354,11.3132761,11.30825706,11.30439581,11.30410543,11.2944978,11.29566768,11.28289762,11.27862201,11.27978533,11.28699458,11.28989478,11.28953647,11.27164297,11.20881827,11.20065545,11.19477135,11.19566751,11.20095692,11.20146833,11.20984151,11.212762,11.23806172,11.24428592,11.24082031,11.23959944,11.23803124,11.23167748,11.226028,11.2215358,11.23051096,11.23857925,11.2704638,11.28213012,11.294001,11.29819784,11.29942018],"lat":[44.34658393,44.34192649,44.33522166,44.33413995,44.33187105,44.33108186,44.31942268,44.31499682,44.31508182,44.31107887,44.2975723,44.29456297,44.28751023,44.25578924,44.23307458,44.25212618,44.24729959,44.24705106,44.28171952,44.28186976,44.28226671,44.28976861,44.29185752,44.29627992,44.30194709,44.30422929,44.30389707,44.3039087,44.30516966,44.30771802,44.31328651,44.32994668,44.33094844,44.32304965,44.33513955,44.33771667,44.34849179,44.34658393]}]],[[{"lng":[11.80796774,11.84042771,11.83621144,11.8250128,11.81721142,11.81444662,11.80994406,11.75521552,11.78133445,11.79733209,11.799092,11.80147459,11.80796774],"lat":[44.42519911,44.42357008,44.41260836,44.40103875,44.39596957,44.39350347,44.38322396,44.40248116,44.43626721,44.43114114,44.43048558,44.42773084,44.42519911]}]],[[{"lng":[11.50114218,11.50927681,11.52067424,11.53112889,11.55134945,11.55056665,11.54360267,11.52168919,11.49997938,11.49054908,11.47671702,11.45582608,11.45039557,11.44711549,11.44445496,11.4360225,11.42926324,11.42831744,11.42765438,11.42366927,11.42009976,11.41012735,11.40259382,11.40225843,11.40219798,11.40279894,11.40529074,11.4137672,11.42519702,11.42924133,11.43422132,11.4343927,11.43487501,11.45350298,11.46155496,11.48625431,11.46981329,11.479169,11.49245122,11.49152129,11.50114218],"lat":[44.4936919,44.48525244,44.48392383,44.4907887,44.47996818,44.4781009,44.47220819,44.44168798,44.42564805,44.40519492,44.39078783,44.37916215,44.37446524,44.36685465,44.36438753,44.35937662,44.35868509,44.35874292,44.35884873,44.35960353,44.36302545,44.3617718,44.3648925,44.36536038,44.3655704,44.36823886,44.37639343,44.39238102,44.40676299,44.40575028,44.40674758,44.40679175,44.40702791,44.42818015,44.45940832,44.47064269,44.47800808,44.47767248,44.4873462,44.49138443,44.4936919]}]],[[{"lng":[11.35823763,11.37261493,11.37829019,11.38334662,11.39880409,11.40985414,11.40491291,11.40416041,11.41016394,11.41110205,11.41873302,11.42587156,11.4137672,11.41207673,11.40786852,11.40529074,11.40225843,11.41012735,11.41107198,11.40677319,11.40144072,11.40029472,11.36876045,11.33062127,11.31081336,11.30439581,11.3132761,11.31951354,11.31924888,11.29942018,11.30356205,11.27622128,11.294269,11.32015075,11.31307582,11.31455746,11.31659002,11.33151262,11.33241053,11.32480117,11.35823763],"lat":[44.44682643,44.43866139,44.43795474,44.44178848,44.43421876,44.41973096,44.41567597,44.41399875,44.40639042,44.40593567,44.41050737,44.40899086,44.39238102,44.38475776,44.37861001,44.37639343,44.36536038,44.3617718,44.35837698,44.35670598,44.34911591,44.32988208,44.30801703,44.31183649,44.32427863,44.33187105,44.33522166,44.34192649,44.34312809,44.34658393,44.35943395,44.37638019,44.39497458,44.39953125,44.40714083,44.41111247,44.41254992,44.41625903,44.41674822,44.42269156,44.44682643]}]],[[{"lng":[11.35279011,11.34577211,11.33202516,11.3299969,11.32553121,11.31988067,11.31303291,11.31179407,11.2774338,11.28909205,11.30178791,11.30548517,11.30769762,11.32083199,11.32476307,11.32697727,11.33358535,11.34074513,11.34471549,11.34483568,11.34639968,11.34692871,11.34800486,11.35971259,11.37397834,11.37468349,11.37807031,11.3819606,11.3883459,11.35279011],"lat":[44.75323117,44.7529767,44.73984514,44.72015147,44.71133259,44.7081657,44.70002373,44.69930277,44.70902494,44.71394612,44.72623541,44.73307899,44.73528034,44.74501097,44.747123,44.74807714,44.7507374,44.75492084,44.75847623,44.75864168,44.76083168,44.76153199,44.76279267,44.774173,44.78007967,44.78016852,44.78038607,44.78035897,44.77865465,44.75323117]}]],[[{"lng":[11.25902863,11.27104507,11.29654744,11.29464246,11.29104651,11.28564795,11.28329373,11.28279595,11.28276884,11.28279656,11.29663518,11.29772967,11.29933212,11.30196396,11.30248023,11.30404854,11.30571531,11.30620395,11.30627035,11.29912174,11.31741584,11.31772373,11.31809528,11.31807854,11.31526787,11.31414337,11.31378893,11.31314074,11.31305897,11.31293081,11.31288041,11.3159354,11.32277295,11.32019039,11.31679166,11.30200959,11.29399818,11.28612719,11.26748704,11.25959983,11.24491637,11.23574348,11.22628285,11.22591204,11.22359804,11.23090809,11.2337067,11.23602084,11.23902271,11.24976223,11.25375977,11.25106738,11.24751706,11.24258436,11.24250574,11.25902863],"lat":[44.6826152,44.66879288,44.6657378,44.65089081,44.64652489,44.64665113,44.64530513,44.64432932,44.64375879,44.64362151,44.63034962,44.6306905,44.63323852,44.63596832,44.6361706,44.63619465,44.63564111,44.63454983,44.63401792,44.62406261,44.61783666,44.61725988,44.61598694,44.61418062,44.61096756,44.60930973,44.60875426,44.60699,44.60659723,44.60588808,44.60493654,44.59714887,44.59609845,44.59145847,44.5933325,44.59662934,44.6004186,44.59916144,44.6065714,44.58073339,44.57877842,44.5757781,44.58806724,44.58854203,44.59155737,44.61033101,44.61507735,44.61911405,44.62406278,44.64119744,44.64786076,44.65097636,44.6565186,44.66656429,44.67731964,44.6826152]}]],[[{"lng":[11.20881827,11.27164297,11.28089394,11.2809288,11.27753648,11.27597824,11.27958766,11.29011821,11.30209664,11.30117758,11.29433018,11.29470706,11.29809995,11.19573059,11.19653054,11.20307206,11.20514372,11.20458087,11.19441105,11.1948974,11.19214208,11.18226153,11.18439806,11.18737482,11.18671539,11.18826026,11.19477135,11.20065545,11.20881827],"lat":[44.25212618,44.23307458,44.21352495,44.21244222,44.2082994,44.20430054,44.19076299,44.18465702,44.18255816,44.18074291,44.17468679,44.17229389,44.16792449,44.15141455,44.16293893,44.17166339,44.17902159,44.18093322,44.20472919,44.20630267,44.21158741,44.22535306,44.23582927,44.24209006,44.24640943,44.24716027,44.24705106,44.24729959,44.25212618]}]],[[{"lng":[11.37477137,11.38225495,11.39176962,11.39181522,11.39892661,11.40850042,11.41951377,11.38982549,11.38272597,11.37034745,11.3686824,11.34529292,11.34859527,11.35947023,11.35876786,11.34517903,11.3453161,11.35207676,11.35224675,11.35459122,11.34616558,11.35802045,11.34720953,11.34717781,11.34718854,11.34722595,11.34928883,11.3578313,11.35569138,11.34962838,11.34923538,11.34931684,11.34959423,11.36380327,11.37477137],"lat":[44.68896092,44.68779223,44.69165383,44.68126877,44.67438357,44.67301874,44.67073635,44.64536599,44.62939239,44.61703783,44.60947102,44.6247578,44.6304514,44.62994524,44.63954105,44.64842558,44.64897077,44.65603688,44.65622525,44.6609588,44.66797629,44.67127836,44.67760303,44.67787207,44.67798157,44.67812652,44.68343085,44.6930835,44.69487299,44.69786911,44.70145279,44.70169191,44.70213294,44.70047685,44.68896092]}]],[[{"lng":[11.26747448,11.25315405,11.27543385,11.26671476,11.26309945,11.25041704,11.2471108,11.24712336,11.24729806,11.24773628,11.25059908,11.24264432,11.24250574,11.24249943,11.24258436,11.25375977,11.23902271,11.2337067,11.14949258,11.15233496,11.16572906,11.15909396,11.15753357,11.15619446,11.15250344,11.15227635,11.14364742,11.14012612,11.14279053,11.12420691,11.11829163,11.12359625,11.12779278,11.13984757,11.15343485,11.15748284,11.16369986,11.16787638,11.16911279,11.18330044,11.18897875,11.19638296,11.20963996,11.20857097,11.20680708,11.20617203,11.20637131,11.21667232,11.241301,11.24608308,11.27310365,11.26747448],"lat":[44.74119519,44.71632208,44.70557786,44.69090414,44.68690403,44.68861033,44.6846357,44.68434907,44.68393096,44.68361851,44.68317049,44.67766181,44.67731964,44.67697205,44.66656429,44.64786076,44.62406278,44.61507735,44.56860668,44.57742165,44.58837071,44.58964533,44.58643847,44.58680417,44.58891625,44.58914983,44.59607607,44.6012285,44.60567658,44.61165963,44.61784003,44.62621721,44.63135593,44.62972791,44.66482737,44.66494393,44.67540002,44.68012463,44.68107225,44.68899555,44.69157678,44.69716957,44.71994482,44.72536348,44.73399414,44.7372202,44.7378105,44.74855507,44.74130364,44.75838253,44.75044069,44.74119519]}]],[[{"lng":[11.44538054,11.4432659,11.4479381,11.44895752,11.45095785,11.45524745,11.48625431,11.47849594,11.46930231,11.46155496,11.4600462,11.45350298,11.4343927,11.42180891,11.41873302,11.41368009,11.41016394,11.40985414,11.39880409,11.37261493,11.35823763,11.36226108,11.37315142,11.37410076,11.37511474,11.39140113,11.40024667,11.4154936,11.44538054],"lat":[44.48658126,44.48503028,44.48338682,44.48335088,44.48376595,44.48355785,44.47064269,44.46491701,44.46109327,44.45940832,44.44434525,44.42818015,44.40679175,44.41068803,44.41050737,44.40884531,44.40639042,44.41973096,44.43421876,44.43866139,44.44682643,44.45099358,44.4492502,44.45804004,44.45906099,44.4619405,44.46425587,44.48333021,44.48658126]}]],[[{"lng":[11.3552585,11.39080803,11.40719613,11.41887366,11.48326618,11.48317466,11.47936669,11.46609874,11.46474279,11.47116124,11.46898474,11.46654101,11.46190853,11.45111804,11.44554666,11.42202732,11.41951377,11.40515166,11.39892661,11.39181522,11.39196784,11.39176962,11.39158452,11.39018862,11.38393306,11.38225495,11.37920616,11.37070041,11.36380327,11.33133009,11.32553121,11.33202516,11.3552585],"lat":[44.74752126,44.73524473,44.74086255,44.72796691,44.72323651,44.72320024,44.71839538,44.70113469,44.69576826,44.69363324,44.69049186,44.68719979,44.6809549,44.67918188,44.66812677,44.67173686,44.67073635,44.67296525,44.67438357,44.68126877,44.69156414,44.69165383,44.69171792,44.69210612,44.69024575,44.68779223,44.68768534,44.68980231,44.70047685,44.71220455,44.71133259,44.73984514,44.74752126]}]],[[{"lng":[11.1580119,11.18330044,11.16787638,11.15343485,11.14755898,11.13984757,11.07809108,11.10536168,11.11376053,11.12999131,11.14128932,11.14208704,11.1580119],"lat":[44.6981546,44.68899555,44.68012463,44.66482737,44.63874073,44.62972791,44.64702985,44.69051642,44.68891972,44.69303982,44.68949594,44.68933355,44.6981546]}]],[[{"lng":[11.22287714,11.23419345,11.23239017,11.23288909,11.23311687,11.23339134,11.26792525,11.28377063,11.2810692,11.28226468,11.29363802,11.31340773,11.32480117,11.33288712,11.33321297,11.33241053,11.33160574,11.33151262,11.33143016,11.3306433,11.31676544,11.31659002,11.31649598,11.31485328,11.31455746,11.31302781,11.31302867,11.31307582,11.31379753,11.31443095,11.31754225,11.31989759,11.32037597,11.32015075,11.3201004,11.27622128,11.30356205,11.29803517,11.294001,11.27486575,11.26646705,11.25086987,11.25023127,11.24396033,11.24218771,11.23732064,11.2191761,11.20555434,11.19902927,11.18312378,11.18051551,11.17954064,11.16363826,11.16052652,11.18013868,11.18456113,11.1900796,11.19211635,11.19318442,11.20033127,11.22287714],"lat":[44.46132005,44.45940103,44.45349912,44.45212154,44.45170914,44.4515316,44.44896135,44.45046905,44.44332548,44.42582416,44.43052346,44.42112042,44.42269156,44.41905834,44.41756006,44.41674822,44.41629146,44.41625903,44.41623878,44.41621264,44.41259926,44.41254992,44.41251412,44.41142774,44.41111247,44.40914827,44.40723912,44.40714083,44.40637448,44.40577704,44.40525927,44.40190127,44.40062219,44.39953125,44.3994884,44.37638019,44.35943395,44.34988655,44.33771667,44.3377282,44.3478427,44.37574681,44.37894016,44.38468632,44.38388109,44.37821486,44.37192895,44.37247818,44.37788526,44.38299402,44.38452987,44.38635858,44.37615886,44.37823891,44.43487538,44.43646757,44.43655315,44.43899991,44.44672162,44.4593312,44.46132005]}]],[[{"lng":[11.05140177,11.07469299,11.08130637,11.09353325,11.09806075,11.10373069,11.11729683,11.12203727,11.1239256,11.16086489,11.16019831,11.15931465,11.15501867,11.1184581,11.10871158,11.10586373,11.1003811,11.09918009,11.09861982,11.09760935,11.09816203,11.09694987,11.09425609,11.06228682,11.04504265,11.04423609,11.05163435,11.05077588,11.05765485,11.0595813,11.06504057,11.06774556,11.06816708,11.08446187,11.08469577,11.07630577,11.03240512,11.03276082,11.03335971,11.03647136,11.04063209,11.04348721,11.03479012,11.03162219,11.03760421,11.05140177],"lat":[44.34171671,44.33423431,44.32676713,44.3203902,44.31706215,44.31157303,44.31474388,44.32239264,44.33366558,44.31289963,44.31284416,44.3123404,44.30392856,44.29481377,44.25782203,44.25480912,44.25247708,44.25150603,44.25047931,44.24383519,44.23879578,44.23606993,44.23477062,44.22781029,44.22911245,44.23628364,44.2495405,44.25603406,44.25676164,44.2579862,44.26240928,44.26918957,44.26955329,44.2737916,44.27500216,44.28589429,44.30141559,44.31044807,44.31086224,44.31144598,44.31428185,44.31947774,44.32034596,44.32336485,44.34258845,44.34171671]}]],[[{"lng":[11.22478848,11.23207944,11.23290939,11.23625874,11.23700414,11.23844958,11.2389443,11.23974604,11.24022018,11.24119053,11.24123513,11.24128017,11.24127672,11.24087758,11.23750188,11.23570711,11.25678432,11.2468144,11.24461018,11.24010274,11.24191269,11.24176567,11.24165308,11.24094911,11.23824049,11.22287714,11.20033127,11.17060165,11.17146938,11.16793269,11.17617841,11.17883881,11.18112469,11.18037643,11.18107205,11.19348756,11.22478848],"lat":[44.53170999,44.52439059,44.52416956,44.52424297,44.52419685,44.52398791,44.52384486,44.52354499,44.52325492,44.52185624,44.52166575,44.52136385,44.52094586,44.51923309,44.5120146,44.50324301,44.49696374,44.49108484,44.48675916,44.47559733,44.46503556,44.46372012,44.46330314,44.46242066,44.46043583,44.46132005,44.4593312,44.4778706,44.48515854,44.49757047,44.5061663,44.51147487,44.52158998,44.52307731,44.52595269,44.52394975,44.53170999]}]],[[{"lng":[11.17870636,11.17617841,11.14872895,11.13100052,11.13220335,11.13424541,11.13610606,11.13696027,11.13600606,11.11824579,11.11453328,11.11489375,11.12557935,11.12600733,11.11406112,11.10322332,11.0890505,11.0884427,11.10648238,11.10834757,11.10785602,11.10511869,11.09910364,11.10012696,11.10485315,11.1056516,11.10617421,11.13418212,11.13544527,11.13751669,11.14943891,11.12815558,11.10373069,11.08130637,11.07469299,11.03760421,11.02606073,11.02237352,11.04816659,10.9966656,10.99022956,10.99023225,10.9908497,11.00913173,11.00950325,11.01347658,11.02686709,11.02691999,11.02802848,11.03702538,11.0448445,11.04753323,11.05056075,11.05072652,11.06266232,11.0653635,11.05614262,11.10815167,11.10450505,11.13160657,11.18212808,11.17870636],"lat":[44.53738656,44.5061663,44.49894013,44.48069007,44.47356121,44.47256258,44.47135296,44.46915948,44.46678208,44.46678777,44.45780337,44.45677772,44.44617114,44.4281146,44.42689151,44.41494431,44.40498313,44.40376202,44.39499621,44.39252206,44.38691853,44.3850025,44.37804163,44.37449601,44.36708639,44.35929331,44.35842616,44.35972181,44.36184871,44.36249697,44.35195995,44.34609669,44.31157303,44.32676713,44.33423431,44.34258845,44.34986936,44.3735219,44.41610732,44.42953992,44.44050566,44.44058494,44.4413754,44.44517386,44.44528886,44.44722643,44.46016481,44.46019539,44.46076086,44.46368859,44.46575895,44.46692836,44.47070068,44.48038841,44.49441769,44.50007646,44.53406923,44.52467021,44.53941831,44.5674275,44.54990327,44.53738656]}]],[[{"lng":[10.9578001,10.98050742,10.97913436,11.00225599,11.00695284,10.94414301,10.90179559,10.90362141,10.87858513,10.88110604,10.89346617,10.89667095,10.90370276,10.94130536,10.94829436,10.95140125,10.9578001],"lat":[44.18497239,44.1788026,44.15409849,44.14439306,44.13854571,44.08122763,44.06402887,44.08514686,44.10580552,44.11228171,44.12462552,44.14625792,44.16458984,44.17549473,44.18005559,44.18390644,44.18497239]}]],[[{"lng":[11.71260804,11.71479032,11.71611552,11.71470598,11.74405305,11.74536538,11.76426196,11.79166602,11.81149152,11.81692733,11.82034371,11.82776105,11.85906935,11.91295551,11.96332308,12.13451409,12.15378113,12.11701718,12.10072366,12.09600217,12.09357849,12.07599118,12.06770309,12.06708633,12.06784039,12.06605201,12.05954275,12.02808748,12.02703335,12.00520307,12.00219652,11.94916276,11.89777761,11.89314654,11.88073413,11.87082506,11.84958577,11.78919476,11.78967724,11.74558468,11.78562361,11.78527487,11.80639882,11.80128894,11.77660905,11.77185786,11.7280364,11.72387495,11.6953466,11.69077754,11.67399974,11.63245939,11.61456681,11.63003344,11.66955561,11.68547409,11.69656392,11.68958977,11.69344838,11.70196368,11.70432447,11.7053549,11.70759559,11.70847622,11.70724329,11.70122781,11.70038571,11.6994708,11.69864795,11.69874441,11.7010851,11.70700797,11.71260804],"lat":[44.72817543,44.72814153,44.72711427,44.72229979,44.70238855,44.68921824,44.67646504,44.66560741,44.66525572,44.66133171,44.65692174,44.66104577,44.65133541,44.65658021,44.65867715,44.61110792,44.54845202,44.54672558,44.55202059,44.55580876,44.55882961,44.56129746,44.55861283,44.55718004,44.55191595,44.54942623,44.54850625,44.56047662,44.57680345,44.58377369,44.60020257,44.59024724,44.58229262,44.58136587,44.57845704,44.57743653,44.55606853,44.55434327,44.56575964,44.57995945,44.5850455,44.60571071,44.62356382,44.62901479,44.64396758,44.64079894,44.65421897,44.63671103,44.63516368,44.62871613,44.63226128,44.67294507,44.69012295,44.70097483,44.70440239,44.6966306,44.67454561,44.69307483,44.70124085,44.70295934,44.70399375,44.70511648,44.71127067,44.71441995,44.71542592,44.71491387,44.71517532,44.71564978,44.71668348,44.71826485,44.72521764,44.72802383,44.72817543]}]],[[{"lng":[11.98579395,12.09156358,12.1121559,12.08830229,12.07462434,12.07451241,12.01257286,12.01006783,11.9977957,11.97960209,11.9388465,11.92864116,11.91386759,11.88723749,11.87821743,11.87629562,11.86498037,11.8601302,11.86865223,11.84402665,11.98579395],"lat":[44.98371666,44.97020703,44.93310214,44.92104141,44.92803625,44.9366181,44.95366047,44.9462582,44.94685327,44.95523153,44.94801576,44.94770203,44.95029472,44.94618715,44.94853947,44.95677066,44.95430524,44.95924294,44.97181619,44.97000801,44.98371666]}]],[[{"lng":[11.42674203,11.42635159,11.46422659,11.47047447,11.48672818,11.49176034,11.49101259,11.48796275,11.48970909,11.48542771,11.49007448,11.4675316,11.45564903,11.44436671,11.43751302,11.41730451,11.3772247,11.36641169,11.36850196,11.36859205,11.35634578,11.34112864,11.2453826,11.23474353,11.24328363,11.25651205,11.26043375,11.24620567,11.27225716,11.30158351,11.42674203],"lat":[44.95008352,44.93010004,44.93571387,44.91690925,44.91598672,44.91308803,44.90955115,44.89774387,44.89393396,44.87821077,44.86224343,44.86666691,44.86618835,44.8390475,44.83733965,44.84115422,44.83345441,44.83730599,44.84079106,44.84267962,44.8615133,44.87259427,44.89825052,44.90597572,44.91678161,44.92620246,44.93310137,44.95143857,44.93832265,44.96235897,44.95008352]}]],[[{"lng":[11.36297676,11.36641169,11.3684819,11.37253177,11.3772247,11.38707359,11.35406486,11.3513548,11.33726775,11.33082206,11.34471549,11.32083199,11.30871696,11.30769762,11.30707619,11.30548517,11.30178791,11.28909205,11.2790499,11.27759812,11.27543385,11.25315405,11.26747448,11.27310365,11.24608308,11.27348012,11.29033679,11.29516716,11.30156737,11.31160934,11.34749072,11.36297676],"lat":[44.83771884,44.83730599,44.83725365,44.83635936,44.83345441,44.83123301,44.81653073,44.7930204,44.78481174,44.76293328,44.75847623,44.74501097,44.73606092,44.73528034,44.73473926,44.73307899,44.72623541,44.71394612,44.71079825,44.70935086,44.70557786,44.71632208,44.74119519,44.75044069,44.75838253,44.78439417,44.8002655,44.80412039,44.8104213,44.8274944,44.83013922,44.83771884]}]],[[{"lng":[12.12987532,12.16446403,12.15695007,12.17218858,12.18495434,12.21769814,12.21994491,12.24076144,12.25139016,12.25909749,12.28250327,12.2797188,12.26829405,12.26630965,12.22741115,12.20789622,12.20707213,12.19922123,12.19820669,12.19414319,12.18427114,12.16939534,12.16816378,12.16503137,12.16327904,12.16072162,12.15950833,12.15802744,12.15658267,12.15547273,12.15157755,12.14968646,12.14726649,12.15344237,12.15361611,12.12777482,12.12095382,12.11122444,12.09821405,12.09503779,12.0422514,12.02541256,12.00531305,12.00691333,12.03823051,12.04428877,12.02952975,12.03258176,12.05333746,12.05264849,12.07207176,12.07462434,12.08816342,12.08830229,12.09859989,12.1108778,12.11361068,12.11490541,12.11589758,12.12987532],"lat":[44.92044808,44.90374749,44.88465464,44.87974488,44.86470547,44.88283403,44.85888017,44.84733839,44.82370862,44.81481073,44.82164737,44.81938693,44.80545556,44.80435113,44.80134426,44.82039388,44.81146903,44.80831368,44.80826112,44.81047242,44.82042561,44.8185533,44.81823643,44.8162349,44.81495119,44.81235747,44.81144587,44.81049664,44.80974444,44.80933404,44.80979279,44.80989903,44.80888556,44.80294471,44.79801577,44.78191126,44.78574388,44.8036807,44.79779631,44.83298511,44.82945013,44.8340883,44.86665317,44.86724115,44.86748276,44.86738429,44.88813062,44.90811492,44.90919072,44.92774415,44.928051,44.92803625,44.92813868,44.92104141,44.92097826,44.93145175,44.92960943,44.92488098,44.92390808,44.92044808]}]],[[{"lng":[12.27380769,12.24830732,12.24022792,12.26957989,12.23708404,12.15378113,12.13451409,11.95845321,11.96332308,11.96922324,11.97300192,11.97601325,12.11839715,12.09239422,12.09522152,12.10037113,12.10092355,12.10633736,12.09391106,12.10365084,12.11287242,12.13265351,12.13091865,12.16409621,12.18115689,12.17535143,12.175197,12.17739751,12.17728348,12.17127906,12.15547273,12.15950833,12.16327904,12.16816378,12.18427114,12.18897672,12.19153797,12.19414319,12.19922123,12.20707213,12.20687313,12.20222428,12.20105411,12.20789622,12.20988323,12.2100251,12.22741115,12.23402608,12.24581362,12.26630965,12.2797188,12.28562428,12.27380769],"lat":[44.80358223,44.76276501,44.69964071,44.62980482,44.62058595,44.54845202,44.61110792,44.65259081,44.65867715,44.66603165,44.67060542,44.674965,44.67627568,44.70020909,44.70304913,44.70044271,44.7008598,44.7190706,44.72084595,44.75207092,44.74124218,44.73822518,44.73276349,44.74041824,44.76612195,44.78859987,44.79246605,44.79842403,44.80283236,44.80747345,44.80933404,44.81144587,44.81495119,44.81823643,44.82042561,44.81722447,44.81321895,44.81047242,44.80831368,44.81146903,44.81289694,44.81572815,44.81743536,44.82039388,44.81836656,44.81158402,44.80134426,44.80341646,44.80436899,44.80435113,44.81938693,44.81770158,44.80358223]}]],[[{"lng":[11.86330803,11.87629562,11.88723749,11.9388465,11.97960209,11.99874635,11.9977957,11.99108255,12.00320149,11.96963418,11.93341672,11.94721995,11.94747624,11.90611234,11.91082693,11.85699679,11.85352438,11.83080985,11.84765185,11.84133003,11.83408768,11.8331159,11.83296107,11.83233639,11.81663177,11.79047878,11.7825031,11.77619758,11.77471978,11.77392412,11.77211371,11.7669304,11.76588173,11.76490434,11.76363409,11.76116425,11.75956599,11.75599893,11.75089131,11.74706845,11.74230235,11.74022869,11.76692802,11.76835965,11.76236328,11.76333608,11.77350963,11.79710158,11.84183903,11.85807881,11.8601302,11.86330803],"lat":[44.95916774,44.95677066,44.94618715,44.94801576,44.95523153,44.95186211,44.94685327,44.94152731,44.92479846,44.90486455,44.90140157,44.89359097,44.88794827,44.88900024,44.85935803,44.8691849,44.86857864,44.851757,44.84074707,44.82442651,44.83634851,44.83726526,44.8373622,44.83771015,44.83597171,44.84195708,44.84163674,44.84229062,44.84266462,44.8428984,44.8434756,44.84641932,44.84744395,44.84876843,44.85696399,44.85910773,44.85949746,44.8593766,44.85753741,44.8475698,44.85257248,44.86614325,44.88772485,44.89229012,44.89501003,44.92385589,44.94107156,44.93541091,44.93349987,44.95929434,44.95924294,44.95916774]}]],[[{"lng":[11.5341305,11.61465359,11.72532677,11.73064443,11.76835965,11.74022869,11.74706845,11.75956599,11.76363409,11.76588173,11.77392412,11.7825031,11.78676114,11.79047878,11.81663177,11.83296107,11.84031805,11.84133003,11.85153873,11.85475878,11.85742527,11.85967822,11.86087834,11.86444469,11.86751975,11.8692692,11.87706572,11.87663072,11.87565755,11.87020505,11.86949957,11.86860319,11.85154035,11.83705221,11.82428369,11.81443198,11.80015942,11.79464031,11.7921272,11.78779682,11.78590531,11.77493536,11.77108936,11.73545107,11.7318991,11.72851487,11.71352379,11.69416306,11.70237927,11.7139641,11.70700797,11.7010851,11.69874441,11.70038571,11.70724329,11.70847622,11.7053549,11.70196368,11.69542435,11.69344838,11.68958977,11.69102427,11.69168667,11.69379761,11.6975437,11.69656392,11.69196825,11.68547409,11.66955561,11.66369463,11.65489598,11.63003344,11.61456681,11.59272667,11.57060384,11.54688102,11.55936505,11.55903988,11.53315296,11.537699,11.53764762,11.53583888,11.54488591,11.50847101,11.52567512,11.53063727,11.53061669,11.5274069,11.52300613,11.527757,11.53769501,11.53804367,11.49101259,11.48672818,11.47047447,11.46422659,11.5341305],"lat":[44.9362459,44.88812385,44.92645843,44.90605351,44.89229012,44.86614325,44.8475698,44.85949746,44.85696399,44.84744395,44.8428984,44.84163674,44.84229998,44.84195708,44.83597171,44.8373622,44.82509939,44.82442651,44.82270476,44.82096338,44.81714281,44.81017733,44.80944959,44.808784,44.80844571,44.80802365,44.80514474,44.80304024,44.80177748,44.79614445,44.7944428,44.77777081,44.78635003,44.78766535,44.79091222,44.79820478,44.81142203,44.81344944,44.81355595,44.81420194,44.81404379,44.79533211,44.79344043,44.80399556,44.80197866,44.79885489,44.78815778,44.77975169,44.75561929,44.7362235,44.72802383,44.72521764,44.71826485,44.71517532,44.71542592,44.71441995,44.70511648,44.70295934,44.70210341,44.70124085,44.69307483,44.68974634,44.68889918,44.68735457,44.68173544,44.67454561,44.67451313,44.6966306,44.70440239,44.70157377,44.69543399,44.70097483,44.69012295,44.71169761,44.73390827,44.75681089,44.78651686,44.78690294,44.80056874,44.80792344,44.80884322,44.81037065,44.82096679,44.83289786,44.84542937,44.85513544,44.85605924,44.85520582,44.85426371,44.8748689,44.87981628,44.88287256,44.90955115,44.91598672,44.91690925,44.93571387,44.9362459]}]],[[{"lng":[11.8866381,11.90403776,11.89174137,11.89322361,11.89918171,11.88004676,11.86671353,11.85967822,11.85742527,11.85475878,11.85317027,11.85153873,11.84133003,11.84765185,11.82971494,11.83080985,11.83089804,11.85352438,11.8866381],"lat":[44.86280365,44.86024668,44.84298251,44.83899306,44.83722146,44.81669974,44.80854682,44.81017733,44.81714281,44.82096338,44.82202934,44.82270476,44.82442651,44.84074707,44.84490341,44.851757,44.85200687,44.86857864,44.86280365]}]],[[{"lng":[12.03248979,12.07462434,12.05264849,12.05270319,12.05333746,12.03941085,12.03258176,12.04428877,12.04353587,12.03823051,12.00691333,12.00531305,12.02541256,11.98838469,11.96866127,11.9620735,11.95470733,11.92939694,11.92369008,11.91098131,11.90909875,11.91631557,11.89918171,11.89322361,11.91082693,11.90611234,11.94747624,11.93341672,12.00320149,11.9977957,12.01257286,12.03248979],"lat":[44.94597073,44.92803625,44.92774415,44.91742197,44.90919072,44.90958057,44.90811492,44.86738429,44.86726935,44.86748276,44.86724115,44.86665317,44.8340883,44.819135,44.82223346,44.81832673,44.80882249,44.80849388,44.82356566,44.82763544,44.83091519,44.83615751,44.83722146,44.83899306,44.85935803,44.88900024,44.88794827,44.90140157,44.92479846,44.94685327,44.95366047,44.94597073]}]],[[{"lng":[12.15292676,12.17728348,12.18115689,12.16409621,12.13091865,12.11287242,12.11546828,12.10564889,12.1014019,12.11189797,12.11299876,12.11347362,12.09821405,12.11122444,12.11799448,12.11814213,12.12095382,12.12195782,12.12610107,12.12777482,12.1336843,12.15361611,12.14680177,12.14726649,12.14827938,12.14968646,12.15292676],"lat":[44.80951532,44.80283236,44.76612195,44.74041824,44.73276349,44.74124218,44.75005644,44.7518725,44.7523031,44.75767065,44.7584058,44.75924803,44.79779631,44.8036807,44.79791459,44.79314846,44.78574388,44.78443813,44.78228121,44.78191126,44.78169958,44.79801577,44.80778212,44.80888556,44.80960478,44.80989903,44.80951532]}]],[[{"lng":[11.7921272,11.80015942,11.80899573,11.81443198,11.82191323,11.82428369,11.82944079,11.82535803,11.82527493,11.8332586,11.82077838,11.82075035,11.82104172,11.82520444,11.78532243,11.78827357,11.77546648,11.75215803,11.75353586,11.77108936,11.77493536,11.7921272],"lat":[44.81355595,44.81142203,44.80425594,44.79820478,44.79222294,44.79091222,44.78917745,44.78609604,44.78593156,44.7784329,44.76382557,44.76325013,44.76248674,44.75852184,44.75294285,44.75889006,44.77960109,44.7921114,44.79662422,44.79344043,44.79533211,44.81355595]}]],[[{"lng":[12.28455191,12.2769092,12.27435465,12.27419317,12.27464629,12.27229529,12.26563015,12.26728708,12.25139016,12.24481714,12.24076144,12.22944285,12.21994491,12.21769814,12.18495434,12.18139573,12.17218858,12.15695007,12.16042501,12.16446403,12.14349347,12.12987532,12.12632351,12.11589758,12.11490541,12.11354349,12.10055055,12.10123112,12.14242435,12.17067592,12.2249718,12.2808688,12.29487131,12.28455191],"lat":[44.89369141,44.89291497,44.88718206,44.88589942,44.88116937,44.87008339,44.86877276,44.83529015,44.82370862,44.83684969,44.84733839,44.84514097,44.85888017,44.88283403,44.86470547,44.86719929,44.87974488,44.88465464,44.89640469,44.90374749,44.92191793,44.92044808,44.92163547,44.92390808,44.92488098,44.95086345,44.95816806,44.96182646,44.92790385,44.94204738,44.92298071,44.94176719,44.9262134,44.89369141]}]],[[{"lng":[11.43751302,11.44815904,11.45903128,11.47184363,11.4879726,11.4758273,11.43640501,11.42462333,11.42978394,11.4388531,11.40891216,11.43751302],"lat":[44.83733965,44.83866916,44.83359683,44.83276192,44.81668485,44.80810441,44.79889741,44.80916764,44.81188455,44.81582308,44.83293274,44.83733965]}]],[[{"lng":[11.83705221,11.85154035,11.86487029,11.86860319,11.86893842,11.87080232,11.87506259,11.88336158,11.88998566,11.89352477,11.89474065,11.89643563,11.89956751,11.90175498,11.90548855,11.90800008,11.90841019,11.90649882,11.91036982,11.9020477,11.90642057,11.97689218,11.99426229,12.0135648,12.09692671,12.10365084,12.09391106,12.10633736,12.09239422,12.11839715,12.01666958,11.99996525,11.98132222,11.97601325,11.9569605,11.85344044,11.82075035,11.82919958,11.8332586,11.83300087,11.82535803,11.83705221],"lat":[44.78766535,44.78635003,44.78096151,44.77777081,44.77739289,44.77700392,44.77778787,44.78222806,44.77998099,44.77947721,44.7795274,44.77979046,44.7804941,44.7805105,44.78035698,44.77977988,44.77949938,44.77082052,44.75894457,44.74825746,44.74729095,44.76860965,44.75628134,44.75720451,44.75106535,44.75207092,44.72084595,44.7190706,44.70020909,44.67627568,44.66682162,44.66897246,44.67344008,44.674965,44.68013248,44.73108288,44.76325013,44.77068375,44.7784329,44.78113993,44.78609604,44.78766535]}]],[[{"lng":[11.50178348,11.50417232,11.53315296,11.55002033,11.55903988,11.55929475,11.55936505,11.55932885,11.55827905,11.54688102,11.59272667,11.45278097,11.44666877,11.43785503,11.43392016,11.43244693,11.4128987,11.4076275,11.39924104,11.42533409,11.42639024,11.43640501,11.44596934,11.47003679,11.4758273,11.4879726,11.49094333,11.49192421,11.49556046,11.50178348],"lat":[44.81482794,44.81522332,44.80056874,44.79151036,44.78690294,44.78672614,44.78651686,44.78640246,44.78379167,44.75681089,44.71169761,44.76050814,44.76073385,44.75977917,44.75987666,44.76022314,44.76530118,44.76628121,44.76857413,44.79569439,44.79615805,44.79889741,44.80172654,44.80776176,44.80810441,44.81668485,44.81927567,44.81973137,44.8204621,44.81482794]}]],[[{"lng":[11.81661334,11.8702113,11.9569605,11.97601325,11.96332308,11.85906935,11.74536538,11.74405305,11.73127248,11.75334588,11.81661334],"lat":[44.75560731,44.71653787,44.68013248,44.674965,44.65867715,44.65133541,44.68921824,44.70238855,44.71378136,44.73982087,44.75560731]}]],[[{"lng":[11.83684289,11.84413174,11.86865223,11.86057149,11.8601302,11.85807881,11.86148716,11.85012006,11.84183903,11.82989628,11.81064874,11.79710158,11.77350963,11.77249757,11.77377562,11.77508257,11.76333608,11.76236328,11.73064443,11.7255359,11.72532677,11.74484685,11.74703629,11.83684289],"lat":[44.97289949,44.96933818,44.97181619,44.96389383,44.95924294,44.95929434,44.95133224,44.93826689,44.93349987,44.93773951,44.93699995,44.93541091,44.94107156,44.93868492,44.93520612,44.92601938,44.92385589,44.89501003,44.90605351,44.91434485,44.92645843,44.93497392,44.95809666,44.97289949]}]],[[{"lng":[11.40912934,11.40891216,11.41980168,11.4388531,11.42462333,11.43640501,11.39924104,11.3953084,11.39397146,11.39325193,11.39170203,11.3883459,11.37468349,11.34483568,11.33082206,11.3329981,11.33609049,11.33901701,11.33878874,11.33726775,11.3487468,11.3513548,11.35406486,11.36173368,11.37313215,11.38707359,11.40912934],"lat":[44.83810434,44.83293274,44.82443849,44.81582308,44.80916764,44.79889741,44.76857413,44.77181565,44.77405825,44.77507257,44.77675244,44.77865465,44.78016852,44.75864168,44.76293328,44.76768698,44.77227784,44.7793206,44.78243101,44.78481174,44.78827597,44.7930204,44.81653073,44.81508145,44.82265673,44.83123301,44.83810434]}]],[[{"lng":[11.53769501,11.527757,11.52300613,11.53063727,11.52567512,11.50595408,11.50847101,11.51977795,11.54488591,11.53583888,11.53315296,11.49556046,11.4879726,11.47934858,11.47184363,11.45903128,11.45259055,11.44901441,11.44815904,11.44720254,11.44436671,11.45564903,11.49007448,11.49101259,11.53769501],"lat":[44.87981628,44.8748689,44.85426371,44.85513544,44.84542937,44.84053009,44.83289786,44.82639002,44.82096679,44.81037065,44.80056874,44.8204621,44.81668485,44.82051837,44.83276192,44.83359683,44.83766481,44.83855178,44.83866916,44.83878869,44.8390475,44.86618835,44.86224343,44.90955115,44.87981628]}]],[[{"lng":[11.74024989,11.78827357,11.77231633,11.75334588,11.73835574,11.73127248,11.71470598,11.71479032,11.70700797,11.7068051,11.69416306,11.74024989],"lat":[44.79732694,44.75889006,44.7474565,44.73982087,44.72548101,44.71378136,44.72229979,44.72814153,44.72802383,44.72822386,44.77975169,44.79732694]}]],[[{"lng":[11.90124145,11.91631557,11.90909875,11.92369008,11.92886072,11.92939694,11.93713983,11.94235752,11.9525534,11.95470733,11.95424211,11.89126229,11.88948863,11.88476293,11.88336158,11.88242205,11.86893842,11.87721702,11.87706572,11.87627167,11.8692692,11.86751975,11.86671353,11.86692583,11.88182678,11.89322757,11.89918171,11.90124145],"lat":[44.83718712,44.83615751,44.83091519,44.82356566,44.80864267,44.80849388,44.80956411,44.81143715,44.80960742,44.80882249,44.80763727,44.78951789,44.78038969,44.78194058,44.78222806,44.78214377,44.77739289,44.80415071,44.80514474,44.80570489,44.80802365,44.80844571,44.80854682,44.80900031,44.82468914,44.83379877,44.83722146,44.83718712]}]],[[{"lng":[12.32705932,12.35519221,12.39672107,12.30854543,12.33974793,12.30860131,12.25892844,12.25139016,12.26728708,12.2769092,12.29514952,12.32705932],"lat":[44.85280887,44.8150811,44.79026219,44.80108155,44.8174571,44.84230958,44.81562576,44.82370862,44.83529015,44.89291497,44.8593028,44.85280887]}]],[[{"lng":[12.04109882,12.04275448,12.0541362,12.09503779,12.09821405,12.11299876,12.09692671,11.99426229,11.97689218,11.9020477,11.90359193,11.91036982,11.90649882,11.90841019,11.90175498,11.89474065,11.88998566,11.89126229,11.90245998,11.95205317,11.95424211,11.9620735,11.96866127,11.97225362,11.98838469,12.00979649,12.01528229,12.02541256,12.03646458,12.04109882],"lat":[44.82990394,44.82963475,44.83555105,44.83298511,44.79779631,44.7584058,44.75106535,44.75628134,44.76860965,44.74825746,44.75432161,44.75894457,44.77082052,44.77949938,44.7805105,44.7795274,44.77998099,44.78951789,44.78670852,44.80603304,44.80763727,44.81832673,44.82223346,44.82248201,44.819135,44.83076997,44.83213747,44.8340883,44.83656284,44.82990394]}]],[[{"lng":[12.00709432,12.02703335,12.02808748,12.04494077,12.05260979,12.05954275,12.06346011,12.06416889,12.06605201,12.06674406,12.06741183,12.06784039,12.06793762,12.06708633,12.06770309,12.06919911,12.07389016,12.07599118,12.07932422,12.09357849,12.10072366,12.11413598,12.10451201,12.09390398,12.06513599,12.05443282,12.04798569,11.96863315,11.9557717,11.95304343,11.95126355,11.96465081,11.98575574,11.97786122,11.930063,11.91623494,11.90903313,11.89511897,11.88413785,11.89777761,11.99981363,12.00219652,12.00554269,12.00709432],"lat":[44.59491252,44.57680345,44.56047662,44.5560087,44.55122159,44.54850625,44.54806804,44.54809377,44.54942623,44.54997934,44.55081197,44.55191595,44.55265237,44.55718004,44.55861283,44.56000398,44.56109301,44.56129746,44.56122557,44.55882961,44.55202059,44.54722736,44.54379866,44.52653217,44.49305199,44.49697096,44.49418954,44.49643407,44.50748982,44.50951398,44.51138752,44.53272728,44.54107136,44.5444825,44.55592633,44.55945158,44.56148089,44.56097052,44.57749784,44.58229262,44.6000191,44.60020257,44.59929106,44.59491252]}]],[[{"lng":[12.06513599,12.07131626,12.06984571,12.07506014,12.07716328,12.08142472,12.07431402,12.04234159,12.0039093,11.97763157,11.97357212,11.97069828,11.94511582,11.9430079,11.94051299,11.93927895,11.95029559,11.96252878,12.06513599],"lat":[44.49305199,44.49041261,44.47881459,44.47621456,44.47455963,44.46910109,44.45866859,44.43675997,44.38241262,44.3796173,44.39166054,44.39416608,44.40254434,44.40858541,44.41343006,44.41837724,44.45157325,44.46184325,44.49305199]}]],[[{"lng":[11.85106518,11.82527664,11.80927912,11.81444662,11.81721142,11.82360255,11.8250128,11.82629599,11.83549146,11.83621144,11.83685737,11.84642999,11.86098891,11.85243757,11.85106518],"lat":[44.38302943,44.37486621,44.38102276,44.39350347,44.39596957,44.39981777,44.40103875,44.40219531,44.41171248,44.41260836,44.4140453,44.40289676,44.39706818,44.38569592,44.38302943]}]],[[{"lng":[11.78142825,11.78491739,11.79277648,11.79705937,11.80389577,11.80946665,11.81068041,11.8110541,11.82674666,11.83562859,11.8358495,11.83645798,11.85439904,11.87640848,11.8940673,11.89643315,11.8957625,11.90460066,11.92329113,11.927582,11.92151122,11.91353675,11.91005848,11.90556603,11.88861015,11.86428841,11.85274257,11.83026499,11.82938009,11.82750811,11.82277296,11.82214849,11.8060783,11.78246647,11.77808629,11.77379729,11.77138614,11.75283866,11.74413429,11.73373357,11.72861269,11.71967372,11.71588519,11.67880649,11.65255628,11.61616647,11.5845742,11.61483927,11.62460403,11.63286402,11.66424209,11.6780187,11.68095614,11.68779176,11.69625013,11.68475215,11.6799676,11.68707439,11.69161771,11.70514844,11.73929138,11.78142825],"lat":[44.27656735,44.27731503,44.26839036,44.26597179,44.26799171,44.25794271,44.25083667,44.25053039,44.24238247,44.23674249,44.23534608,44.23497986,44.23005373,44.22026435,44.23418637,44.2349366,44.22079229,44.21089874,44.21726369,44.21534102,44.21090829,44.20785312,44.20303535,44.19394893,44.1706569,44.18007456,44.18602648,44.19863179,44.19896883,44.19843903,44.19480206,44.19456542,44.19947202,44.18071196,44.18094468,44.18683781,44.19887013,44.1934851,44.18068557,44.17492121,44.17183872,44.15723331,44.12255729,44.12291267,44.10115505,44.1184909,44.11220515,44.15792556,44.16287971,44.16874845,44.20420296,44.21299145,44.21262541,44.21566067,44.2260305,44.22893931,44.23219373,44.2408764,44.25160871,44.25028053,44.25566019,44.27656735]}]],[[{"lng":[11.68638208,11.6799676,11.69625013,11.68779176,11.6780187,11.67258743,11.66424209,11.65800742,11.62460403,11.52494706,11.52773391,11.53621465,11.53734059,11.53563487,11.55600878,11.56167682,11.56225424,11.5491291,11.55095516,11.55412103,11.55544123,11.56356676,11.56821249,11.57881047,11.59456339,11.59934959,11.60087659,11.60105567,11.60383914,11.60808209,11.61853892,11.62599231,11.63441586,11.66484934,11.68638208],"lat":[44.24354851,44.23219373,44.2260305,44.21566067,44.21299145,44.20995876,44.20420296,44.19887139,44.16287971,44.15766303,44.17016127,44.17982901,44.18477765,44.19038947,44.18502761,44.18549325,44.18802215,44.20502768,44.20855071,44.21104607,44.22317001,44.21878352,44.21949836,44.232201,44.23521561,44.23709184,44.23803388,44.23864514,44.24064468,44.24314063,44.24484134,44.24712789,44.25830881,44.25706675,44.24354851]}]],[[{"lng":[11.7945414,11.79589772,11.84809683,11.84592639,11.84570432,11.84505291,11.83982231,11.8330472,11.83241269,11.82313797,11.82136318,11.82062705,11.81170939,11.80787502,11.80494887,11.80189325,11.79352584,11.7704497,11.76724905,11.76171158,11.73649858,11.77443125,11.78596702,11.78880562,11.79376573,11.7945414],"lat":[44.36334336,44.35006601,44.32554532,44.32319575,44.32301223,44.3227674,44.32326226,44.3205768,44.32016043,44.30899284,44.30910874,44.31152165,44.31196675,44.31070173,44.30954932,44.30751774,44.29737426,44.28645825,44.2868735,44.28691759,44.30917276,44.33603834,44.34805946,44.36048578,44.36471274,44.36334336]}]],[[{"lng":[12.30716646,12.34772996,12.38352372,12.3747569,12.35217289,12.34933607,12.30245806,12.28365793,12.28024122,12.24712624,12.23964657,12.22985615,12.22923725,12.24427746,12.2503817,12.25414286,12.25519113,12.25951576,12.27159519,12.2746175,12.27868759,12.28678549,12.29070524,12.29760921,12.30460327,12.30716646],"lat":[44.30193812,44.30122982,44.22449406,44.21825606,44.19619003,44.19073231,44.21945002,44.23108598,44.23318922,44.23079669,44.21765017,44.21721017,44.2265632,44.24803108,44.25107131,44.25091011,44.25129433,44.2543625,44.28354151,44.30042395,44.30057715,44.30236975,44.30341812,44.30648673,44.3082783,44.30193812]}]],[[{"lng":[11.88413785,11.91623494,11.90916244,11.87305761,11.86553781,11.85374464,11.85113142,11.84093022,11.8468663,11.82765234,11.77868843,11.78919476,11.83198989,11.84958577,11.86031504,11.87082506,11.88413785],"lat":[44.57749784,44.55945158,44.55212864,44.5471513,44.508594,44.49637613,44.48792512,44.48533646,44.46873495,44.47312785,44.50351639,44.55434327,44.56161725,44.55606853,44.5596439,44.57743653,44.57749784]}]],[[{"lng":[11.94489557,11.94511582,11.94654804,11.95706733,11.97069828,11.97531738,11.97763157,11.98379225,11.98332185,11.96480981,11.94042103,11.93869969,11.93225284,11.92984872,11.92656098,11.92622654,11.92568886,11.91879094,11.90275865,11.87536653,11.8686649,11.85243757,11.86098891,11.86373905,11.88175276,11.90529101,11.92118306,11.94489557],"lat":[44.40291012,44.40254434,44.40105795,44.39724787,44.39416608,44.38175725,44.3796173,44.37783592,44.37623677,44.36931909,44.3797809,44.37724149,44.37332015,44.37318384,44.37470861,44.37479822,44.37458694,44.36585999,44.34440157,44.35530395,44.37942851,44.38569592,44.39706818,44.39604493,44.39616692,44.40042323,44.39502114,44.40291012]}]],[[{"lng":[11.98767068,12.00517611,12.01197043,12.01433522,12.02305442,12.03060917,12.01912649,12.01612071,12.02918485,12.02772379,11.97586245,11.94749363,11.93709389,11.93182584,11.93058394,11.92719291,11.92624774,11.92554932,11.92555256,11.92829151,11.92329113,11.90460066,11.8957625,11.8976605,11.89721309,11.89643315,11.89593732,11.8940673,11.87640848,11.86677744,11.83645798,11.83562859,11.82674666,11.8110541,11.80946665,11.80389577,11.78491739,11.77385405,11.76895295,11.76591841,11.76148842,11.76112389,11.76111149,11.76175121,11.76500863,11.76724905,11.7704497,11.78422459,11.79031361,11.79352584,11.80123753,11.80189325,11.80494887,11.81170939,11.82062705,11.82112543,11.82112335,11.82136318,11.82313797,11.83125613,11.83220533,11.8330472,11.83982231,11.84570432,11.85763745,11.87052788,11.87536653,11.90275865,11.91879094,11.92622654,11.93225284,11.93869969,11.93948018,11.94042103,11.96480981,11.97788116,11.98767068],"lat":[44.37733834,44.35675387,44.35259969,44.35149294,44.35708697,44.35297047,44.3441372,44.33829046,44.32811412,44.32229417,44.25569716,44.23588461,44.23676039,44.24110461,44.24155063,44.24160614,44.24098218,44.24004579,44.22977358,44.21562754,44.21726369,44.21089874,44.22079229,44.22807237,44.2332243,44.2349366,44.23503921,44.23418637,44.22026435,44.22351358,44.23497986,44.23674249,44.24238247,44.25053039,44.25794271,44.26799171,44.27731503,44.27521671,44.27514665,44.27563435,44.27656085,44.27680375,44.27707413,44.28001154,44.28613555,44.2868735,44.28645825,44.29761952,44.29889326,44.29737426,44.30296047,44.30751774,44.30954932,44.31196675,44.31152165,44.31119424,44.31010497,44.30910874,44.30899284,44.31645301,44.31976045,44.3205768,44.32326226,44.32301223,44.33091548,44.35385929,44.35530395,44.34440157,44.36585999,44.37479822,44.37332015,44.37724149,44.37929199,44.3797809,44.36931909,44.37068024,44.37733834]}]],[[{"lng":[11.96830015,12.00031967,12.04798569,11.97422007,11.96252878,11.95205012,11.93317784,11.94166994,11.92515316,11.92534693,11.92635054,11.9557717,11.96830015],"lat":[44.49681182,44.49796398,44.49418954,44.46878612,44.46184325,44.45326537,44.46286251,44.47400503,44.48112744,44.48475046,44.48621012,44.50748982,44.49681182]}]],[[{"lng":[11.930063,11.98575574,11.96465081,11.95529678,11.95126355,11.9557717,11.95542851,11.94934841,11.92534693,11.94166994,11.93622096,11.93317784,11.95205012,11.95029559,11.95070978,11.95548165,11.9430079,11.92118306,11.86373905,11.84642999,11.84959742,11.85071281,11.83685737,11.84042771,11.83606603,11.85810253,11.85887605,11.8586737,11.85605744,11.85716168,11.86074638,11.87481596,11.88377847,11.88376221,11.88360527,11.88230064,11.87055193,11.88123568,11.85503076,11.85644416,11.85964277,11.86463562,11.85374464,11.87305761,11.91623494,11.930063],"lat":[44.55592633,44.54107136,44.53272728,44.51387192,44.51138752,44.50748982,44.50692256,44.50073766,44.48475046,44.47400503,44.46739351,44.46286251,44.45326537,44.45157325,44.44981607,44.44550643,44.40858541,44.39502114,44.39604493,44.40289676,44.40683287,44.40833546,44.4140453,44.42357008,44.425148,44.42544451,44.42662246,44.42813997,44.43271572,44.43397545,44.43328248,44.42811257,44.43868048,44.43886093,44.43899093,44.43954603,44.44416336,44.46157504,44.47016481,44.47748445,44.48478637,44.49036242,44.49637613,44.5471513,44.55945158,44.55592633]}]],[[{"lng":[12.44976033,12.47890083,12.50371424,12.45258985,12.45239574,12.45332885,12.4499932,12.44524974,12.4393894,12.44264495,12.44201798,12.42872041,12.44976033],"lat":[44.16246519,44.13893195,44.11556243,44.10868236,44.10958661,44.11224813,44.11864194,44.12388981,44.12756866,44.14034887,44.1407459,44.14734463,44.16246519]}]],[[{"lng":[12.73838706,12.75564003,12.74147026,12.73732505,12.72709217,12.72068638,12.72087536,12.73257949,12.71591515,12.71007826,12.72273238,12.73838706],"lat":[43.96818374,43.96250164,43.94092493,43.94258225,43.95430099,43.95277701,43.95597585,43.96296238,43.96193981,43.95852861,43.97329204,43.96818374]}],[{"lng":[12.7397576,12.73953828,12.73965462,12.7397576],"lat":[43.9385098,43.93827842,43.93843214,43.9385098]}]],[[{"lng":[12.54099326,12.55057407,12.56964154,12.57394702,12.5831308,12.59617426,12.6010526,12.605278,12.60679264,12.62853974,12.64172759,12.64024727,12.63488615,12.63425884,12.63422245,12.63574356,12.64318204,12.64183624,12.63768015,12.6358535,12.63407415,12.6317273,12.61615402,12.61179712,12.60675825,12.60564729,12.59921107,12.55519959,12.51545171,12.51380886,12.54099326],"lat":[43.99199088,43.98665087,43.99249116,43.99238494,43.98197477,43.98386145,43.98561344,43.98834633,43.98999186,43.98781693,43.97918625,43.97883285,43.97418726,43.97335646,43.97270942,43.96763739,43.96509093,43.95844929,43.95646619,43.95668195,43.95723828,43.95768662,43.95590347,43.95770698,43.9510332,43.94858351,43.94419974,43.95209741,43.9413144,43.99230222,43.99199088]}]],[[{"lng":[12.60122382,12.58949226,12.53476267,12.53586465,12.56719124,12.60122382],"lat":[43.9129953,43.88564496,43.86852123,43.89722224,43.91513099,43.9129953]}]],[[{"lng":[12.68983377,12.72134652,12.68370859,12.68223534,12.68031825,12.65427392,12.6358342,12.63481318,12.63407415,12.64318204,12.63574356,12.63425884,12.64024727,12.64172759,12.64569939,12.65935747,12.6625515,12.66532289,12.67164503,12.67901513,12.68820202,12.68983377],"lat":[43.98621863,43.97270418,43.94927278,43.93715751,43.93425743,43.94529014,43.94802183,43.95558974,43.95723828,43.96509093,43.96763739,43.97335646,43.97883285,43.97918625,43.98149018,43.98530682,43.98164372,43.97613505,43.97345604,43.97455555,43.98712386,43.98621863]}]],[[{"lng":[12.6452987,12.65275787,12.6530748,12.65688221,12.68062873,12.68131705,12.61122756,12.6189025,12.62745946,12.63062279,12.63406428,12.64313075,12.62920235,12.6452987],"lat":[43.87669173,43.8704753,43.86273615,43.8585404,43.86407905,43.82807066,43.83078258,43.84262745,43.83699004,43.83685345,43.83845448,43.85665744,43.86785071,43.87669173]}]],[[{"lng":[12.60578454,12.6164591,12.61933961,12.61956767,12.62226613,12.63331539,12.63910659,12.64540746,12.65443532,12.60698522,12.58935966,12.60578454],"lat":[43.91193299,43.90957857,43.90474273,43.90242176,43.90187698,43.90315976,43.90491536,43.9051734,43.89836659,43.84497636,43.86525148,43.91193299]}]],[[{"lng":[12.72265323,12.7272118,12.68229503,12.68283174,12.69480651,12.71355717,12.72265323],"lat":[43.88056636,43.86321757,43.85279665,43.86055536,43.87372755,43.88104505,43.88056636]}]],[[{"lng":[12.67209505,12.66857391,12.66683986,12.66645945,12.6557395,12.65443532,12.64540746,12.63910659,12.62226613,12.61956767,12.61861818,12.61933961,12.62372289,12.64203155,12.64615532,12.65206215,12.6669001,12.66877455,12.67584352,12.67937294,12.6723104,12.67283877,12.67477969,12.67209505],"lat":[43.91268142,43.91263262,43.91243177,43.91229546,43.90570716,43.89836659,43.9051734,43.90491536,43.90187698,43.90242176,43.90319011,43.90474273,43.90405446,43.9156525,43.92000425,43.92173297,43.92330979,43.92376271,43.92987772,43.92560468,43.91673478,43.91563293,43.91403546,43.91268142]}]],[[{"lng":[12.63245342,12.68820202,12.67901513,12.65935747,12.64172759,12.62853974,12.61324152,12.61013886,12.60679264,12.60453821,12.60306445,12.60459496,12.60549366,12.60711718,12.61311612,12.62088467,12.63245342],"lat":[44.02525111,43.98712386,43.97455555,43.98530682,43.97918625,43.98781693,43.98674037,43.98921533,43.98999186,43.98914051,43.99532084,43.99549412,43.99423741,43.99352439,43.99433327,44.00019067,44.02525111]}]],[[{"lng":[12.50892562,12.57547278,12.63214263,12.62088467,12.60306445,12.60142323,12.60306964,12.60453821,12.605278,12.6010526,12.59617426,12.59173589,12.5831308,12.57783206,12.57394702,12.55057407,12.51380886,12.4529499,12.46270122,12.44329244,12.4803741,12.48661384,12.49651602,12.49876132,12.49744531,12.4894856,12.48439565,12.46177345,12.47249876,12.47956947,12.45207991,12.45452355,12.4550878,12.45226026,12.45239574,12.45258985,12.45286646,12.45590659,12.47647696,12.48922941,12.50371424,12.50892562],"lat":[44.11163915,44.07850908,44.02551518,44.00019067,43.99532084,43.99379427,43.99077701,43.98914051,43.98834633,43.98561344,43.98386145,43.98236085,43.98197477,43.98267145,43.99238494,43.98665087,43.99230222,43.96938966,44.00158984,44.02309819,44.0107813,44.01296479,44.02054509,44.02752109,44.02975339,44.03872852,44.04271775,44.04768506,44.06761272,44.0681785,44.08719968,44.09319055,44.10311995,44.10937689,44.10958661,44.10868236,44.10859482,44.10850194,44.10961816,44.1084194,44.11556243,44.11163915]}]],[[{"lng":[12.7288339,12.72520556,12.72277419,12.72022546,12.71355717,12.71352346,12.70847715,12.69480651,12.68699421,12.68283174,12.68062873,12.67892707,12.66565094,12.65688221,12.65275787,12.64203718,12.66683986,12.67477969,12.68513353,12.6930883,12.70659919,12.71264962,12.71313668,12.71697599,12.72002856,12.7288339],"lat":[43.90843548,43.88380738,43.88107762,43.88169213,43.88104505,43.88102815,43.87533136,43.87372755,43.86096563,43.86055536,43.86407905,43.86561939,43.86678033,43.8585404,43.8704753,43.88083818,43.91243177,43.91403546,43.91406169,43.91307979,43.90902709,43.91125217,43.91152441,43.91495554,43.91617498,43.90843548]}],[{"lng":[12.63062279,12.61585495,12.6249145,12.62920235,12.64313075,12.63884724,12.63062279],"lat":[43.83685345,43.84646627,43.85376237,43.86785071,43.85665744,43.85391767,43.83685345]}]],[[{"lng":[12.63481318,12.6358342,12.64070981,12.67914618,12.67584352,12.67390171,12.67325729,12.67036209,12.66877455,12.6669001,12.65206215,12.64615532,12.62372289,12.6164591,12.60037674,12.60081785,12.60173249,12.60274715,12.60428572,12.6038628,12.60887958,12.60905438,12.60725388,12.60675825,12.611425,12.61179712,12.61286385,12.61615402,12.6317273,12.63481318],"lat":[43.95558974,43.94802183,43.94407619,43.93366052,43.92987772,43.92765354,43.92694955,43.92456243,43.92376271,43.92330979,43.92173297,43.92000425,43.90405446,43.90957857,43.91330111,43.91380035,43.91518046,43.91749368,43.92306919,43.93530664,43.94282754,43.945919,43.95018927,43.9510332,43.95737664,43.95770698,43.95752016,43.95590347,43.95768662,43.95558974]}]],[[{"lng":[12.733187,12.72087536,12.72042494,12.72068638,12.72384664,12.72709217,12.74147026,12.7296961,12.72002856,12.71697599,12.71264962,12.70792921,12.70659919,12.70529148,12.6930883,12.67283877,12.6723104,12.67937294,12.67584352,12.67914618,12.68031825,12.68185322,12.68223534,12.68234338,12.68137395,12.68370859,12.70654052,12.70922192,12.71007826,12.71160686,12.71591515,12.73257949,12.733187],"lat":[43.96171812,43.95597585,43.95407745,43.95277701,43.95022967,43.95430099,43.94092493,43.91241582,43.91617498,43.91495554,43.91125217,43.90938901,43.90902709,43.90902455,43.91307979,43.91563293,43.91673478,43.92560468,43.92987772,43.93366052,43.93425743,43.93608951,43.93715751,43.93822537,43.94395994,43.94927278,43.96308647,43.96301283,43.95852861,43.95798375,43.96193981,43.96296238,43.96171812]}]],[[{"lng":[12.43905525,12.47956947,12.47775187,12.47249876,12.47047892,12.46177345,12.49744531,12.48661384,12.45569868,12.43641293,12.426854,12.42883089,12.41908965,12.4158941,12.40899473,12.39804338,12.39529123,12.35917481,12.35906246,12.36352424,12.37047371,12.3737316,12.39264511,12.39987233,12.40394262,12.4091928,12.42531067,12.43905525],"lat":[44.08866886,44.0681785,44.06775749,44.06761272,44.05566262,44.04768506,44.02975339,44.01296479,44.02950715,44.03293111,44.02600727,44.04577212,44.05542731,44.05564905,44.05572032,44.04915079,44.03024571,44.05182297,44.05422855,44.05720459,44.066031,44.06634725,44.06367987,44.06648074,44.07257134,44.07733706,44.08849685,44.08866886]}]],[[{"lng":[12.45156466,12.41404947,12.39779765,12.40644426,12.40776082,12.40755545,12.40602378,12.40528438,12.40514077,12.40619624,12.41012221,12.41289601,12.41631406,12.43641293,12.44308051,12.46270122,12.45973365,12.45497913,12.45469226,12.45156466],"lat":[43.96808092,43.95230187,43.96225644,43.97163329,43.97742786,43.97920305,43.98149499,43.98338967,43.9876343,43.98995257,43.99383261,44.00022725,44.01239587,44.03293111,44.01426532,44.00158984,43.99615487,43.99541059,43.99514823,43.96808092]}],[{"lng":[12.40196321,12.38886197,12.41768131,12.4097355,12.40196321],"lat":[43.89159244,43.90150623,43.89904893,43.89759409,43.89159244]}]],[[{"lng":[12.15110249,12.19934776,12.19463264,12.16404775,12.12357752,12.09619099,12.10058925,12.1040904,12.11273702,12.1308041,12.14946812,12.15110249],"lat":[43.83215099,43.77037553,43.73192431,43.76226149,43.7491507,43.76530394,43.7761566,43.79411722,43.79643411,43.82475929,43.83329454,43.83215099]}]],[[{"lng":[12.34992395,12.34737169,12.29991611,12.29607842,12.27819001,12.2985406,12.29085769,12.28621035,12.28691897,12.28759156,12.28938784,12.29024478,12.29049825,12.29550105,12.29574328,12.29476236,12.2945376,12.29508287,12.2955321,12.29728188,12.3101867,12.31579703,12.32667324,12.33182932,12.33496774,12.33840731,12.34992395],"lat":[43.87480927,43.86702001,43.84803684,43.84741846,43.85723823,43.87276296,43.87556858,43.87677833,43.88168259,43.88259503,43.8837947,43.88421116,43.88451896,43.89306705,43.89452305,43.89722076,43.8994645,43.90144743,43.90191612,43.90316202,43.91273233,43.91704397,43.91146526,43.90684489,43.90178359,43.88814703,43.87480927]}]],[[{"lng":[12.24864767,12.25474197,12.26266923,12.26356905,12.26362899,12.26417707,12.2641625,12.26107958,12.26531143,12.27326609,12.29794085,12.29728188,12.2955321,12.29529492,12.29508287,12.29487753,12.29472915,12.2945376,12.29476236,12.29574328,12.29562307,12.29550105,12.29511335,12.29049825,12.29024478,12.28759156,12.28691897,12.28615682,12.28621035,12.28642117,12.2985406,12.28204799,12.27374322,12.2732768,12.27458279,12.26535139,12.24349818,12.24220714,12.23595779,12.2465673,12.22073015,12.20389776,12.20358558,12.20361195,12.21908817,12.22223625,12.23479725,12.23568313,12.23651989,12.23996243,12.24864767],"lat":[43.91206502,43.91232539,43.9065784,43.90549933,43.90528604,43.90278554,43.90183614,43.89645942,43.89529859,43.89539488,43.90398927,43.90316202,43.90191612,43.90167988,43.90144743,43.90111124,43.90067888,43.8994645,43.89722076,43.89452305,43.89347317,43.89306705,43.89213293,43.88451896,43.88421116,43.88259503,43.88168259,43.87755863,43.87677833,43.87653818,43.87276296,43.86518511,43.85442184,43.85317479,43.85021584,43.84246303,43.84852388,43.85081132,43.87009766,43.89030987,43.89407579,43.90822057,43.91232121,43.9129269,43.90805634,43.91528955,43.91695828,43.9169235,43.91675899,43.91618103,43.91206502]}],[{"lng":[12.3547572,12.3458597,12.33786864,12.33023233,12.32397354,12.32107797,12.31814878,12.31579703,12.3101867,12.29985267,12.29476195,12.2953326,12.32282757,12.33692626,12.3547572],"lat":[43.94969139,43.93713911,43.93121056,43.92641896,43.92302272,43.9215765,43.91952348,43.91704397,43.91273233,43.91716842,43.9281896,43.92954971,43.96060115,43.96154685,43.94969139]}]],[[{"lng":[12.34682571,12.3354392,12.28472572,12.28378091,12.19748776,12.20061444,12.23726152,12.22425876,12.23210763,12.2344934,12.23585891,12.23707071,12.25181649,12.25926142,12.26034405,12.26071077,12.26110324,12.26258732,12.26535139,12.27001293,12.27458279,12.2748936,12.27377733,12.2732768,12.27443176,12.29607842,12.32685948,12.34737169,12.34682571],"lat":[43.86332677,43.82411863,43.79466793,43.76491721,43.74502511,43.77459409,43.78700399,43.80985925,43.81926274,43.82038358,43.8224111,43.82343461,43.82671132,43.8325716,43.83509307,43.8365726,43.83783983,43.84036331,43.84246303,43.84473792,43.85021584,43.85140433,43.85231865,43.85317479,43.85518086,43.84741846,43.86616118,43.86702001,43.86332677]}]],[[{"lng":[12.40174298,12.41250256,12.40835559,12.40454807,12.38886197,12.38892087,12.4013109,12.40196321,12.40541326,12.4097355,12.41768131,12.43213625,12.40060855,12.39248593,12.35276198,12.34992395,12.34517434,12.34114494,12.33840731,12.33612746,12.33496774,12.33182932,12.32667324,12.32181701,12.31672714,12.31612023,12.31579703,12.31587678,12.31814878,12.32107797,12.3458597,12.36721664,12.38143752,12.39779765,12.40174298],"lat":[43.95938128,43.90940411,43.90297162,43.90631172,43.90150623,43.90122361,43.89160297,43.89159244,43.89500507,43.89759409,43.89904893,43.87256944,43.87277485,43.89656388,43.87110223,43.87480927,43.87772599,43.88340112,43.88814703,43.89362899,43.90178359,43.90684489,43.91146526,43.9125385,43.91568451,43.91619281,43.91704397,43.91719021,43.91952348,43.9215765,43.93713911,43.96203611,43.95956352,43.96225644,43.95938128]}]],[[{"lng":[12.1734315,12.20319861,12.20361195,12.20389776,12.22073015,12.22957421,12.2465673,12.24816891,12.23808153,12.23595779,12.24201814,12.24220714,12.24349818,12.25680046,12.26535139,12.2631194,12.26258732,12.26237317,12.26110324,12.26034405,12.25943803,12.25926142,12.25559906,12.25272836,12.25181649,12.25145153,12.24478081,12.2391778,12.23707071,12.23700943,12.23210763,12.21802779,12.17654137,12.16976948,12.16863826,12.1679668,12.16585792,12.16522516,12.16291508,12.1610934,12.15681531,12.1567906,12.15794406,12.15805432,12.15784004,12.15110249,12.14946812,12.13825978,12.14313652,12.14300235,12.14215528,12.147716,12.15243524,12.16805073,12.15922921,12.1734315],"lat":[43.92421937,43.91648858,43.9129269,43.90822057,43.89407579,43.89381692,43.89030987,43.88365158,43.87386374,43.87009766,43.85828024,43.85081132,43.84852388,43.84619149,43.84246303,43.84082526,43.84036331,43.84008583,43.83783983,43.83509307,43.83284566,43.8325716,43.82926393,43.82724354,43.82671132,43.82663169,43.82756874,43.82474332,43.82343461,43.82339359,43.81926274,43.80278974,43.81054074,43.82256809,43.82322071,43.82322134,43.8229062,43.82287423,43.82316333,43.82392953,43.82899063,43.82928842,43.830643,43.83084702,43.83238348,43.83215099,43.83329454,43.84764094,43.85314073,43.85852831,43.86233261,43.86703063,43.86864499,43.89755736,43.92141467,43.92421937]}]],[[{"lng":[12.27719323,12.28628669,12.29476195,12.3101867,12.29728188,12.27326609,12.26107958,12.26362899,12.25474197,12.25561786,12.27719323],"lat":[43.92547378,43.92955598,43.9281896,43.91273233,43.90316202,43.89539488,43.89645942,43.90528604,43.91232539,43.92034228,43.92547378]}]],[[{"lng":[12.41661227,12.42883089,12.426854,12.41760707,12.41631406,12.41528577,12.41012221,12.40619624,12.40556753,12.40514077,12.4050558,12.40528438,12.40755545,12.40776082,12.40778075,12.40644426,12.40617336,12.40278208,12.39779765,12.38812494,12.38143752,12.37498494,12.37186789,12.36721664,12.35632004,12.33692626,12.32282757,12.34653033,12.34775636,12.34782577,12.35079357,12.3513065,12.3528725,12.36340394,12.36942346,12.38572597,12.3849341,12.38512402,12.38835373,12.39529123,12.40003452,12.40009887,12.39804338,12.41661227],"lat":[44.05554653,44.04577212,44.02600727,44.01470692,44.01239587,44.01013094,43.99383261,43.98995257,43.98899001,43.9876343,43.98636744,43.98338967,43.97920305,43.97742786,43.9769051,43.97163329,43.97103818,43.96644882,43.96225644,43.95990537,43.95956352,43.96178158,43.9624935,43.96203611,43.94963795,43.96154685,43.96060115,43.97397748,43.97595457,43.97697798,43.98465588,43.98523952,43.98606231,43.98674725,43.98977473,44.00978731,44.01581572,44.02046455,44.02590546,44.03024571,44.03572227,44.04294963,44.04915079,44.05554653]}]],[[{"lng":[12.55877624,12.5621478,12.56664948,12.59921107,12.60564729,12.60725388,12.60887958,12.6038628,12.60428572,12.60081785,12.58684559,12.56719124,12.56043321,12.54817696,12.53586465,12.49279229,12.51545171,12.52809725,12.53564838,12.55877624],"lat":[43.94899698,43.9423422,43.94097271,43.94419974,43.94858351,43.95018927,43.94282754,43.93530664,43.92306919,43.91380035,43.91738688,43.91513099,43.9090265,43.90408749,43.89722224,43.9159332,43.9413144,43.93998336,43.940758,43.94899698]}]]],null,null,{"lineCap":null,"lineJoin":null,"clickable":true,"pointerEvents":null,"className":"","stroke":true,"color":"white","weight":2,"opacity":1,"fill":true,"fillColor":["#41B6C4","#41B6C4","#41B6C4","#FFFFCC","#A1DAB4","#A1DAB4","#A1DAB4","#41B6C4","#FFFFCC","#41B6C4","#A1DAB4","#A1DAB4","#A1DAB4","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#41B6C4","#A1DAB4","#41B6C4","#41B6C4","#FFFFCC","#A1DAB4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#A1DAB4","#FFFFCC","#A1DAB4","#41B6C4","#41B6C4","#FFFFCC","#41B6C4","#A1DAB4","#2C7FB8","#A1DAB4","#FFFFCC","#41B6C4","#41B6C4","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#A1DAB4","#A1DAB4","#FFFFCC","#A1DAB4","#A1DAB4","#41B6C4","#A1DAB4","#41B6C4","#A1DAB4","#41B6C4","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#2C7FB8","#FFFFCC","#FFFFCC","#41B6C4","#2C7FB8","#41B6C4","#41B6C4","#41B6C4","#2C7FB8","#A1DAB4","#253494","#41B6C4","#A1DAB4","#FFFFCC","#41B6C4","#FFFFCC","#41B6C4","#41B6C4","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#A1DAB4","#A1DAB4","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#A1DAB4","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#41B6C4","#2C7FB8","#41B6C4","#FFFFCC","#FFFFCC","#41B6C4","#41B6C4","#FFFFCC","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#2C7FB8","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#41B6C4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#2C7FB8","#41B6C4","#FFFFCC","#41B6C4","#A1DAB4","#FFFFCC","#2C7FB8","#A1DAB4","#41B6C4","#FFFFCC","#2C7FB8","#41B6C4","#FFFFCC","#FFFFCC","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#FFFFCC","#2C7FB8","#FFFFCC","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#41B6C4","#2C7FB8","#A1DAB4","#2C7FB8","#2C7FB8","#FFFFCC","#FFFFCC","#2C7FB8","#2C7FB8","#2C7FB8","#2C7FB8","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#A1DAB4","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC","#FFFFCC"],"fillOpacity":0.7,"dashArray":"3","smoothFactor":1,"noClip":false},["<h1>Comune di Agazzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.48 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">564.160 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1268.405 t <\/td><\/tr><\/table>","<h1>Comune di Alseno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">53.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1671.020 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3114.396 t <\/td><\/tr><\/table>","<h1>Comune di Besenzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.95 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">186.790 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">381.561 t <\/td><\/tr><\/table>","<h1>Comune di Bettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.51 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">63.810 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1415.501 t <\/td><\/tr><\/table>","<h1>Comune di Bobbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">34.21 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">744.260 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2175.560 t <\/td><\/tr><\/table>","<h1>Comune di Borgonovo Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">39.99 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1555.230 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3889.526 t <\/td><\/tr><\/table>","<h1>Comune di Cadeo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">39.02 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1574.150 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4034.274 t <\/td><\/tr><\/table>","<h1>Comune di Calendasco<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">41.40 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">898.530 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2170.356 t <\/td><\/tr><\/table>","<h1>Comune di Caminata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">151.610 t <\/td><\/tr><\/table>","<h1>Comune di Caorso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">57.34 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1793.970 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3128.384 t <\/td><\/tr><\/table>","<h1>Comune di Carpaneto Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.07 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1457.740 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4691.365 t <\/td><\/tr><\/table>","<h1>Comune di Castell'Arquato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">33.55 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">974.500 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2905.040 t <\/td><\/tr><\/table>","<h1>Comune di Castel San Giovanni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.03 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4108.150 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13238.919 t <\/td><\/tr><\/table>","<h1>Comune di Castelvetro Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">46.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1742.600 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3733.713 t <\/td><\/tr><\/table>","<h1>Comune di Cerignale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">84.080 t <\/td><\/tr><\/table>","<h1>Comune di Coli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">560.410 t <\/td><\/tr><\/table>","<h1>Comune di Corte Brugnatella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">351.460 t <\/td><\/tr><\/table>","<h1>Comune di Cortemaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">46.88 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1299.230 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2771.523 t <\/td><\/tr><\/table>","<h1>Comune di Farini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">908.461 t <\/td><\/tr><\/table>","<h1>Comune di Ferriere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">961.200 t <\/td><\/tr><\/table>","<h1>Comune di Fiorenzuola d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4616.260 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9488.791 t <\/td><\/tr><\/table>","<h1>Comune di Gazzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">27.46 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">517.140 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1883.160 t <\/td><\/tr><\/table>","<h1>Comune di Gossolengo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.62 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1417.190 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2976.187 t <\/td><\/tr><\/table>","<h1>Comune di Gragnano Trebbiense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">42.36 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1013.130 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2391.770 t <\/td><\/tr><\/table>","<h1>Comune di Gropparello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1098.075 t <\/td><\/tr><\/table>","<h1>Comune di Lugagnano Val d'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">32.77 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">656.480 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2003.250 t <\/td><\/tr><\/table>","<h1>Comune di Monticelli d'Ongina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.60 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1635.450 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3365.360 t <\/td><\/tr><\/table>","<h1>Comune di Fontanellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">51.98 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2007.970 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3862.991 t <\/td><\/tr><\/table>","<h1>Comune di Fontevivo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">46.03 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1453.940 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3158.750 t <\/td><\/tr><\/table>","<h1>Comune di Fornovo di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">57.27 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1528.020 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2668.111 t <\/td><\/tr><\/table>","<h1>Comune di Langhirano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">55.34 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4459.610 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8058.322 t <\/td><\/tr><\/table>","<h1>Comune di Lesignano de' Bagni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">51.56 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1627.860 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3157.191 t <\/td><\/tr><\/table>","<h1>Comune di Medesano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.95 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2494.725 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5202.569 t <\/td><\/tr><\/table>","<h1>Comune di Mezzani<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">42.20 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">696.270 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1649.894 t <\/td><\/tr><\/table>","<h1>Comune di Monchio delle Corti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.15 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">363.480 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">549.455 t <\/td><\/tr><\/table>","<h1>Comune di Montechiarugolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">35.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2569.910 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7177.417 t <\/td><\/tr><\/table>","<h1>Comune di Neviano degli Arduini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2363.203 t <\/td><\/tr><\/table>","<h1>Comune di Noceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">38.74 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3454.805 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8918.320 t <\/td><\/tr><\/table>","<h1>Comune di Palanzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">54.75 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">398.240 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">727.366 t <\/td><\/tr><\/table>","<h1>Comune di Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">53.52 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">57301.290 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">107064.749 t <\/td><\/tr><\/table>","<h1>Comune di Pellegrino Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.58 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">100.904 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">542.987 t <\/td><\/tr><\/table>","<h1>Comune di Roccabianca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">43.43 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">739.990 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1704.060 t <\/td><\/tr><\/table>","<h1>Comune di Sala Baganza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">38.77 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1646.710 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4246.883 t <\/td><\/tr><\/table>","<h1>Comune di Salsomaggiore Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">79.75 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8055.900 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10101.959 t <\/td><\/tr><\/table>","<h1>Comune di San Secondo Parmense<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">34.95 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1446.340 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4137.814 t <\/td><\/tr><\/table>","<h1>Comune di Solignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">968.158 t <\/td><\/tr><\/table>","<h1>Comune di Soragna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.97 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1381.690 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2880.427 t <\/td><\/tr><\/table>","<h1>Comune di Sorbolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.97 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2267.110 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5041.245 t <\/td><\/tr><\/table>","<h1>Comune di Terenzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">559.931 t <\/td><\/tr><\/table>","<h1>Comune di Tizzano Val Parma<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">55.39 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">832.700 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1503.340 t <\/td><\/tr><\/table>","<h1>Comune di Tornolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">586.115 t <\/td><\/tr><\/table>","<h1>Comune di Massa Lombarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">11.10 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">759.071 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6840.893 t <\/td><\/tr><\/table>","<h1>Comune di Ravenna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.32 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7589.823 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">120103.218 t <\/td><\/tr><\/table>","<h1>Comune di Riolo Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.83 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">28.280 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3396.932 t <\/td><\/tr><\/table>","<h1>Comune di Russi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.95 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">370.390 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9376.992 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agata sul Santerno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.36 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.389 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1943.837 t <\/td><\/tr><\/table>","<h1>Comune di Solarolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.64 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">43.860 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2668.714 t <\/td><\/tr><\/table>","<h1>Comune di Bagno di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3655.368 t <\/td><\/tr><\/table>","<h1>Comune di Bertinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.62 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4125.256 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8484.167 t <\/td><\/tr><\/table>","<h1>Comune di Borghi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1250.576 t <\/td><\/tr><\/table>","<h1>Comune di Castrocaro Terme e Terra del Sole<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3603.454 t <\/td><\/tr><\/table>","<h1>Comune di Cesena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">11.76 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8055.185 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">68499.407 t <\/td><\/tr><\/table>","<h1>Comune di Cesenatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">26683.065 t <\/td><\/tr><\/table>","<h1>Comune di Civitella di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2015.770 t <\/td><\/tr><\/table>","<h1>Comune di Dovadola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">869.170 t <\/td><\/tr><\/table>","<h1>Comune di Forlì<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">19.57 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">17897.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">91471.794 t <\/td><\/tr><\/table>","<h1>Comune di Forlimpopoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">61.66 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4838.632 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7846.775 t <\/td><\/tr><\/table>","<h1>Comune di Galeata<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2265.093 t <\/td><\/tr><\/table>","<h1>Comune di Gambettola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6655.069 t <\/td><\/tr><\/table>","<h1>Comune di Gatteo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.82 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">493.290 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8473.337 t <\/td><\/tr><\/table>","<h1>Comune di Longiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6382.640 t <\/td><\/tr><\/table>","<h1>Comune di Meldola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">83.160 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8289.208 t <\/td><\/tr><\/table>","<h1>Comune di Mercato Saraceno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4812.867 t <\/td><\/tr><\/table>","<h1>Comune di Modigliana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4417.675 t <\/td><\/tr><\/table>","<h1>Comune di Montiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">727.227 t <\/td><\/tr><\/table>","<h1>Comune di Portico e San Benedetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">391.615 t <\/td><\/tr><\/table>","<h1>Comune di Predappio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.01 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.618 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4574.273 t <\/td><\/tr><\/table>","<h1>Comune di Premilcuore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">526.731 t <\/td><\/tr><\/table>","<h1>Comune di Rocca San Casciano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1463.491 t <\/td><\/tr><\/table>","<h1>Comune di Roncofreddo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1471.928 t <\/td><\/tr><\/table>","<h1>Comune di San Mauro Pascoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.87 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">72.420 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8307.408 t <\/td><\/tr><\/table>","<h1>Comune di Santa Sofia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2709.217 t <\/td><\/tr><\/table>","<h1>Comune di Sarsina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1720.566 t <\/td><\/tr><\/table>","<h1>Comune di Savignano sul Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.01 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">133.520 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13201.284 t <\/td><\/tr><\/table>","<h1>Comune di Sogliano al Rubicone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1519.208 t <\/td><\/tr><\/table>","<h1>Comune di Tredozio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">834.340 t <\/td><\/tr><\/table>","<h1>Comune di Verghereto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1206.208 t <\/td><\/tr><\/table>","<h1>Comune di Morfasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">671.129 t <\/td><\/tr><\/table>","<h1>Comune di Nibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">30.23 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">412.290 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1364.015 t <\/td><\/tr><\/table>","<h1>Comune di Ottone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">330.726 t <\/td><\/tr><\/table>","<h1>Comune di Pecorara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">420.731 t <\/td><\/tr><\/table>","<h1>Comune di Piacenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.50 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">23925.210 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">75947.400 t <\/td><\/tr><\/table>","<h1>Comune di Pianello Val Tidone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">26.45 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">405.880 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1534.622 t <\/td><\/tr><\/table>","<h1>Comune di Piozzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">365.665 t <\/td><\/tr><\/table>","<h1>Comune di Podenzano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">33.85 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1958.730 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5786.025 t <\/td><\/tr><\/table>","<h1>Comune di Ponte dell'Olio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.32 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">892.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2849.974 t <\/td><\/tr><\/table>","<h1>Comune di Pontenure<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.30 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1766.220 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3987.213 t <\/td><\/tr><\/table>","<h1>Comune di Rivergaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">23.46 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1173.970 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5004.459 t <\/td><\/tr><\/table>","<h1>Comune di Rottofreno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.56 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3056.210 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6859.234 t <\/td><\/tr><\/table>","<h1>Comune di San Giorgio Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">35.99 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1266.040 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3518.071 t <\/td><\/tr><\/table>","<h1>Comune di San Pietro in Cerro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">56.12 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">193.660 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">345.098 t <\/td><\/tr><\/table>","<h1>Comune di Sarmato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.97 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">705.910 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1471.505 t <\/td><\/tr><\/table>","<h1>Comune di Travo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.57 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">9.670 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1707.503 t <\/td><\/tr><\/table>","<h1>Comune di Vernasca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1058.972 t <\/td><\/tr><\/table>","<h1>Comune di Vigolzone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">19.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">799.250 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4168.459 t <\/td><\/tr><\/table>","<h1>Comune di Villanova sull'Arda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">50.07 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">447.890 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">894.478 t <\/td><\/tr><\/table>","<h1>Comune di Zerba<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">60.200 t <\/td><\/tr><\/table>","<h1>Comune di Ziano Piacentino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1621.222 t <\/td><\/tr><\/table>","<h1>Comune di Albareto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">995.391 t <\/td><\/tr><\/table>","<h1>Comune di Bardi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1054.027 t <\/td><\/tr><\/table>","<h1>Comune di Bedonia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">43.38 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">645.520 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1487.983 t <\/td><\/tr><\/table>","<h1>Comune di Berceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">68.89 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">748.260 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1086.108 t <\/td><\/tr><\/table>","<h1>Comune di Bore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">389.783 t <\/td><\/tr><\/table>","<h1>Comune di Borgo Val di Taro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.14 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.420 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4000.298 t <\/td><\/tr><\/table>","<h1>Comune di Busseto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">42.32 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1695.800 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4007.411 t <\/td><\/tr><\/table>","<h1>Comune di Calestano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.25 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">847.460 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1279.187 t <\/td><\/tr><\/table>","<h1>Comune di Collecchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.22 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4807.570 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9970.101 t <\/td><\/tr><\/table>","<h1>Comune di Colorno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">43.43 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2420.570 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5573.087 t <\/td><\/tr><\/table>","<h1>Comune di Compiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">55.25 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">324.506 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">587.373 t <\/td><\/tr><\/table>","<h1>Comune di Corniglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">74.37 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">820.730 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1103.582 t <\/td><\/tr><\/table>","<h1>Comune di Felino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">36.46 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2128.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5837.076 t <\/td><\/tr><\/table>","<h1>Comune di Fidenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">89.33 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">9860.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">11038.430 t <\/td><\/tr><\/table>","<h1>Comune di Torrile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">51.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2091.910 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4048.629 t <\/td><\/tr><\/table>","<h1>Comune di Traversetolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.59 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2579.750 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6862.527 t <\/td><\/tr><\/table>","<h1>Comune di Valmozzola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">263.002 t <\/td><\/tr><\/table>","<h1>Comune di Varano de' Melegari<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">57.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">818.416 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1419.703 t <\/td><\/tr><\/table>","<h1>Comune di Varsi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">686.058 t <\/td><\/tr><\/table>","<h1>Comune di Sissa Trecasali<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">43.17 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2120.890 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4912.882 t <\/td><\/tr><\/table>","<h1>Comune di Polesine Zibello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">41.61 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">946.270 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2274.101 t <\/td><\/tr><\/table>","<h1>Comune di Albinea<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.42 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">508.480 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7924.395 t <\/td><\/tr><\/table>","<h1>Comune di Bagnolo in Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">37.14 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2222.550 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5983.759 t <\/td><\/tr><\/table>","<h1>Comune di Baiso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2131.650 t <\/td><\/tr><\/table>","<h1>Comune di Bibbiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">19.21 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1454.840 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7574.240 t <\/td><\/tr><\/table>","<h1>Comune di Boretto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">22.26 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">879.760 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3952.676 t <\/td><\/tr><\/table>","<h1>Comune di Brescello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16.27 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">855.150 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5254.729 t <\/td><\/tr><\/table>","<h1>Comune di Cadelbosco di Sopra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">34.29 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2053.320 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5988.108 t <\/td><\/tr><\/table>","<h1>Comune di Campagnola Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.86 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1238.090 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3886.491 t <\/td><\/tr><\/table>","<h1>Comune di Campegine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">35.91 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1323.720 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3686.234 t <\/td><\/tr><\/table>","<h1>Comune di Carpineti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.97 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">409.100 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3153.841 t <\/td><\/tr><\/table>","<h1>Comune di Casalgrande<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.59 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">727.280 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">15828.622 t <\/td><\/tr><\/table>","<h1>Comune di Casina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2760.503 t <\/td><\/tr><\/table>","<h1>Comune di Castellarano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.60 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">380.760 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10569.198 t <\/td><\/tr><\/table>","<h1>Comune di Castelnovo di Sotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">32.85 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2034.850 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6193.991 t <\/td><\/tr><\/table>","<h1>Comune di Castelnovo ne' Monti<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.34 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">953.995 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6652.668 t <\/td><\/tr><\/table>","<h1>Comune di Cavriago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.03 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2033.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">14495.062 t <\/td><\/tr><\/table>","<h1>Comune di Canossa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8.36 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">237.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2840.821 t <\/td><\/tr><\/table>","<h1>Comune di Correggio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.99 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3469.920 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">23152.140 t <\/td><\/tr><\/table>","<h1>Comune di Fabbrico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">30.21 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1200.840 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3974.404 t <\/td><\/tr><\/table>","<h1>Comune di Gattatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">25.93 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1322.180 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5099.051 t <\/td><\/tr><\/table>","<h1>Comune di Gualtieri<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16.77 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">768.090 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4578.832 t <\/td><\/tr><\/table>","<h1>Comune di Guastalla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.66 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2188.660 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">11728.362 t <\/td><\/tr><\/table>","<h1>Comune di Luzzara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8059.420 t <\/td><\/tr><\/table>","<h1>Comune di Montecchio Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">26.95 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2370.270 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8795.747 t <\/td><\/tr><\/table>","<h1>Comune di Novellara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.05 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">329.280 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10793.236 t <\/td><\/tr><\/table>","<h1>Comune di Poviglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16.23 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">838.170 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5165.873 t <\/td><\/tr><\/table>","<h1>Comune di Quattro Castella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.21 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">686.910 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9529.973 t <\/td><\/tr><\/table>","<h1>Comune di Reggiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10008.373 t <\/td><\/tr><\/table>","<h1>Comune di Reggio nell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">19.93 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">24264.030 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">121740.860 t <\/td><\/tr><\/table>","<h1>Comune di Rio Saliceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.85 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1299.820 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4081.068 t <\/td><\/tr><\/table>","<h1>Comune di Rolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">26.56 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">851.270 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3204.538 t <\/td><\/tr><\/table>","<h1>Comune di Rubiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">13.32 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1861.130 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13967.630 t <\/td><\/tr><\/table>","<h1>Comune di San Martino in Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">36.01 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2122.430 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5893.778 t <\/td><\/tr><\/table>","<h1>Comune di San Polo d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.53 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">212.800 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6023.008 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Ilario d'Enza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15.54 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1456.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9369.989 t <\/td><\/tr><\/table>","<h1>Comune di Scandiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.79 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">903.090 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">18856.127 t <\/td><\/tr><\/table>","<h1>Comune di Toano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2862.640 t <\/td><\/tr><\/table>","<h1>Comune di Vetto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1393.664 t <\/td><\/tr><\/table>","<h1>Comune di Vezzano sul Crostolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.45 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">213.720 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2868.896 t <\/td><\/tr><\/table>","<h1>Comune di Viano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">120.680 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2076.907 t <\/td><\/tr><\/table>","<h1>Comune di Villa Minozzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2327.335 t <\/td><\/tr><\/table>","<h1>Comune di Ventasso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3533.926 t <\/td><\/tr><\/table>","<h1>Comune di Bastiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2632.800 t <\/td><\/tr><\/table>","<h1>Comune di Bomporto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7766.614 t <\/td><\/tr><\/table>","<h1>Comune di Campogalliano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7967.373 t <\/td><\/tr><\/table>","<h1>Comune di Camposanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.07 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">56.920 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2754.747 t <\/td><\/tr><\/table>","<h1>Comune di Carpi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">56.81 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">17940.698 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">31581.223 t <\/td><\/tr><\/table>","<h1>Comune di Castelfranco Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.26 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.690 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">18108.036 t <\/td><\/tr><\/table>","<h1>Comune di Castelnuovo Rangone<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10613.083 t <\/td><\/tr><\/table>","<h1>Comune di Castelvetro di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9207.014 t <\/td><\/tr><\/table>","<h1>Comune di Cavezzo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15.50 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">732.040 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4721.497 t <\/td><\/tr><\/table>","<h1>Comune di Concordia sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.24 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">960.515 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5264.760 t <\/td><\/tr><\/table>","<h1>Comune di Fanano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2264.774 t <\/td><\/tr><\/table>","<h1>Comune di Finale Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">11.29 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1238.524 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10966.725 t <\/td><\/tr><\/table>","<h1>Comune di Fiorano Modenese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">14540.631 t <\/td><\/tr><\/table>","<h1>Comune di Fiumalbo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">726.603 t <\/td><\/tr><\/table>","<h1>Comune di Formigine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.26 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1107.029 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">21040.287 t <\/td><\/tr><\/table>","<h1>Comune di Frassinoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1112.371 t <\/td><\/tr><\/table>","<h1>Comune di Guiglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2391.085 t <\/td><\/tr><\/table>","<h1>Comune di Lama Mocogno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1888.949 t <\/td><\/tr><\/table>","<h1>Comune di Maranello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13330.090 t <\/td><\/tr><\/table>","<h1>Comune di Marano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4397.768 t <\/td><\/tr><\/table>","<h1>Comune di Medolla<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">33.32 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1308.310 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3925.970 t <\/td><\/tr><\/table>","<h1>Comune di Mirandola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">19.79 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3523.840 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">17807.216 t <\/td><\/tr><\/table>","<h1>Comune di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.12 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2726.935 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">128870.713 t <\/td><\/tr><\/table>","<h1>Comune di Montecreto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">726.463 t <\/td><\/tr><\/table>","<h1>Comune di Montefiorino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1530.443 t <\/td><\/tr><\/table>","<h1>Comune di Montese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2046.663 t <\/td><\/tr><\/table>","<h1>Comune di Nonantola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">44.80 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3648.578 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8144.160 t <\/td><\/tr><\/table>","<h1>Comune di Novi di Modena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">45.85 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2094.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4566.886 t <\/td><\/tr><\/table>","<h1>Comune di Palagano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1033.713 t <\/td><\/tr><\/table>","<h1>Comune di Pavullo nel Frignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">12758.533 t <\/td><\/tr><\/table>","<h1>Comune di Pievepelago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1353.466 t <\/td><\/tr><\/table>","<h1>Comune di Polinago<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1019.893 t <\/td><\/tr><\/table>","<h1>Comune di Prignano sulla Secchia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2080.617 t <\/td><\/tr><\/table>","<h1>Comune di Ravarino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.75 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">248.089 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4314.538 t <\/td><\/tr><\/table>","<h1>Comune di Riolunato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">435.513 t <\/td><\/tr><\/table>","<h1>Comune di San Cesario sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4236.989 t <\/td><\/tr><\/table>","<h1>Comune di San Felice sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.55 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">121.750 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7854.911 t <\/td><\/tr><\/table>","<h1>Comune di San Possidonio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15.41 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">385.285 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2500.726 t <\/td><\/tr><\/table>","<h1>Comune di San Prospero<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3701.042 t <\/td><\/tr><\/table>","<h1>Comune di Sassuolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">30346.352 t <\/td><\/tr><\/table>","<h1>Comune di Savignano sul Panaro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6028.344 t <\/td><\/tr><\/table>","<h1>Comune di Serramazzoni<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4851.345 t <\/td><\/tr><\/table>","<h1>Comune di Sestola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2187.903 t <\/td><\/tr><\/table>","<h1>Comune di Soliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">55.56 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3493.320 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6287.813 t <\/td><\/tr><\/table>","<h1>Comune di Spilamberto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7805.550 t <\/td><\/tr><\/table>","<h1>Comune di Vignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">15015.095 t <\/td><\/tr><\/table>","<h1>Comune di Zocca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2328.003 t <\/td><\/tr><\/table>","<h1>Comune di Anzola dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">38.53 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3563.377 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9248.909 t <\/td><\/tr><\/table>","<h1>Comune di Argelato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">52.84 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2858.805 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5410.793 t <\/td><\/tr><\/table>","<h1>Comune di Baricella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">70.39 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2166.022 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3077.185 t <\/td><\/tr><\/table>","<h1>Comune di Bentivoglio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">41.40 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2194.630 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5300.498 t <\/td><\/tr><\/table>","<h1>Comune di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.80 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12909.840 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">222527.270 t <\/td><\/tr><\/table>","<h1>Comune di Borgo Tossignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.29 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.846 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2015.949 t <\/td><\/tr><\/table>","<h1>Comune di Budrio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">47.32 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4550.970 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9618.263 t <\/td><\/tr><\/table>","<h1>Comune di Calderara di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">46.11 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3436.412 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7452.621 t <\/td><\/tr><\/table>","<h1>Comune di Camugnano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1291.605 t <\/td><\/tr><\/table>","<h1>Comune di Casalecchio di Reno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.07 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8595.160 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13008.861 t <\/td><\/tr><\/table>","<h1>Comune di Casalfiumanese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.40 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">31.481 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2250.290 t <\/td><\/tr><\/table>","<h1>Comune di Castel d'Aiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1188.624 t <\/td><\/tr><\/table>","<h1>Comune di Castel del Rio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.227 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">850.386 t <\/td><\/tr><\/table>","<h1>Comune di Castel di Casio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1594.414 t <\/td><\/tr><\/table>","<h1>Comune di Castel Guelfo di Bologna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.63 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">251.980 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4473.593 t <\/td><\/tr><\/table>","<h1>Comune di Castello d'Argile<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.41 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1906.240 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2870.206 t <\/td><\/tr><\/table>","<h1>Comune di Castel Maggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.65 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5417.667 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">11136.145 t <\/td><\/tr><\/table>","<h1>Comune di Castel San Pietro Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.54 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">563.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">15899.789 t <\/td><\/tr><\/table>","<h1>Comune di Castenaso<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">11.33 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1070.734 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9446.985 t <\/td><\/tr><\/table>","<h1>Comune di Castiglione dei Pepoli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3374.845 t <\/td><\/tr><\/table>","<h1>Comune di Crevalcore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">52.34 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3980.775 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7605.179 t <\/td><\/tr><\/table>","<h1>Comune di Dozza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.45 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">182.280 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5280.422 t <\/td><\/tr><\/table>","<h1>Comune di Fontanelice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.34 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">15.490 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1153.336 t <\/td><\/tr><\/table>","<h1>Comune di Gaggio Montano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3684.870 t <\/td><\/tr><\/table>","<h1>Comune di Galliera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">59.27 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1660.328 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2801.268 t <\/td><\/tr><\/table>","<h1>Comune di Granarolo dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.50 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1014.437 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8112.539 t <\/td><\/tr><\/table>","<h1>Comune di Grizzana Morandi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1867.330 t <\/td><\/tr><\/table>","<h1>Comune di Imola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4.49 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2046.890 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">45605.133 t <\/td><\/tr><\/table>","<h1>Comune di Lizzano in Belvedere<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1894.251 t <\/td><\/tr><\/table>","<h1>Comune di Loiano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2378.295 t <\/td><\/tr><\/table>","<h1>Comune di Malalbergo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5.78 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">273.470 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4734.187 t <\/td><\/tr><\/table>","<h1>Comune di Marzabotto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3653.717 t <\/td><\/tr><\/table>","<h1>Comune di Medicina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.04 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">105.950 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10181.517 t <\/td><\/tr><\/table>","<h1>Comune di Minerbio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.27 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">284.700 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3915.376 t <\/td><\/tr><\/table>","<h1>Comune di Molinella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.28 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">25.800 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9137.998 t <\/td><\/tr><\/table>","<h1>Comune di Monghidoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2892.701 t <\/td><\/tr><\/table>","<h1>Comune di Monterenzio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3380.603 t <\/td><\/tr><\/table>","<h1>Comune di Monte San Pietro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.78 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2313.260 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4742.420 t <\/td><\/tr><\/table>","<h1>Comune di Monzuno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3511.112 t <\/td><\/tr><\/table>","<h1>Comune di Mordano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.16 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">86.060 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3989.147 t <\/td><\/tr><\/table>","<h1>Comune di Ozzano dell'Emilia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">10.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">733.949 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7341.693 t <\/td><\/tr><\/table>","<h1>Comune di Pianoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.76 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">313.583 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">11367.911 t <\/td><\/tr><\/table>","<h1>Comune di Pieve di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.88 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2334.700 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3543.871 t <\/td><\/tr><\/table>","<h1>Comune di Sala Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">56.79 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2833.529 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4989.067 t <\/td><\/tr><\/table>","<h1>Comune di San Benedetto Val di Sambro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2528.962 t <\/td><\/tr><\/table>","<h1>Comune di San Giorgio di Piano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">50.18 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2439.374 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4860.856 t <\/td><\/tr><\/table>","<h1>Comune di San Giovanni in Persiceto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">32.38 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5439.731 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16798.030 t <\/td><\/tr><\/table>","<h1>Comune di San Lazzaro di Savena<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">12.50 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2099.426 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16795.173 t <\/td><\/tr><\/table>","<h1>Comune di San Pietro in Casale<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">60.22 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3562.801 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5915.901 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agata Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">27.64 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1326.661 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4799.232 t <\/td><\/tr><\/table>","<h1>Comune di Sasso Marconi<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">48.49 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3889.041 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8020.314 t <\/td><\/tr><\/table>","<h1>Comune di Vergato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3853.327 t <\/td><\/tr><\/table>","<h1>Comune di Zola Predosa<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.90 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5988.870 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">9087.690 t <\/td><\/tr><\/table>","<h1>Comune di Valsamoggia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">40.99 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6659.080 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16245.046 t <\/td><\/tr><\/table>","<h1>Comune di Alto Reno Terme<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3778.230 t <\/td><\/tr><\/table>","<h1>Comune di Argenta<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">16.20 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2239.680 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13826.971 t <\/td><\/tr><\/table>","<h1>Comune di Berra<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">72.46 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1669.730 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2304.466 t <\/td><\/tr><\/table>","<h1>Comune di Bondeno<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">73.36 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5502.610 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7500.630 t <\/td><\/tr><\/table>","<h1>Comune di Cento<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">72.77 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">11965.913 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16444.561 t <\/td><\/tr><\/table>","<h1>Comune di Codigoro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">65.45 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3998.420 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6109.360 t <\/td><\/tr><\/table>","<h1>Comune di Comacchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">9.63 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3589.400 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">37288.162 t <\/td><\/tr><\/table>","<h1>Comune di Copparo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">62.79 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">5274.174 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8400.231 t <\/td><\/tr><\/table>","<h1>Comune di Ferrara<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2534.293 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">94779.346 t <\/td><\/tr><\/table>","<h1>Comune di Formignana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.35 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">803.710 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1211.240 t <\/td><\/tr><\/table>","<h1>Comune di Jolanda di Savoia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">68.85 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">977.844 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1420.270 t <\/td><\/tr><\/table>","<h1>Comune di Lagosanto<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">62.93 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1334.320 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2120.179 t <\/td><\/tr><\/table>","<h1>Comune di Masi Torello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">76.71 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">711.933 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">928.051 t <\/td><\/tr><\/table>","<h1>Comune di Mesola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">66.87 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2171.434 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3247.247 t <\/td><\/tr><\/table>","<h1>Comune di Mirabello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">59.37 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">853.670 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1437.903 t <\/td><\/tr><\/table>","<h1>Comune di Ostellato<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">62.28 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2343.050 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3762.180 t <\/td><\/tr><\/table>","<h1>Comune di Poggio Renatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">23.21 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">986.540 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4250.015 t <\/td><\/tr><\/table>","<h1>Comune di Portomaggiore<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">67.02 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3550.904 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5298.501 t <\/td><\/tr><\/table>","<h1>Comune di Ro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">67.44 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1003.240 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1487.714 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agostino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4439.666 t <\/td><\/tr><\/table>","<h1>Comune di Vigarano Mainarda<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4725.214 t <\/td><\/tr><\/table>","<h1>Comune di Voghiera<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">67.63 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1139.847 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1685.446 t <\/td><\/tr><\/table>","<h1>Comune di Tresigallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">73.31 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1576.100 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2149.864 t <\/td><\/tr><\/table>","<h1>Comune di Goro<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">63.28 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1427.280 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2255.513 t <\/td><\/tr><\/table>","<h1>Comune di Fiscaglia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">67.02 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3006.414 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4485.835 t <\/td><\/tr><\/table>","<h1>Comune di Alfonsine<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.02 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">530.141 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8810.194 t <\/td><\/tr><\/table>","<h1>Comune di Bagnacavallo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">10.04 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1067.385 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">10631.015 t <\/td><\/tr><\/table>","<h1>Comune di Bagnara di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.40 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">94.858 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1481.677 t <\/td><\/tr><\/table>","<h1>Comune di Brisighella<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.20 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">78.820 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3589.914 t <\/td><\/tr><\/table>","<h1>Comune di Casola Valsenio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.19 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.940 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1597.709 t <\/td><\/tr><\/table>","<h1>Comune di Castel Bolognese<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1.14 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">63.640 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5576.813 t <\/td><\/tr><\/table>","<h1>Comune di Cervia<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.54 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1287.774 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">36397.163 t <\/td><\/tr><\/table>","<h1>Comune di Conselice<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3.66 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">257.966 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">7055.037 t <\/td><\/tr><\/table>","<h1>Comune di Cotignola<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">7.31 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">374.768 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5126.332 t <\/td><\/tr><\/table>","<h1>Comune di Faenza<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6.87 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2764.060 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">40253.222 t <\/td><\/tr><\/table>","<h1>Comune di Fusignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.08 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">115.819 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5581.107 t <\/td><\/tr><\/table>","<h1>Comune di Lugo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">17.94 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">4035.677 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">22496.361 t <\/td><\/tr><\/table>","<h1>Comune di Bellaria-Igea Marina<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">14.76 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2497.729 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">16917.974 t <\/td><\/tr><\/table>","<h1>Comune di Cattolica<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">22.95 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">3554.011 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">15487.685 t <\/td><\/tr><\/table>","<h1>Comune di Coriano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">2.24 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">181.889 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">8129.281 t <\/td><\/tr><\/table>","<h1>Comune di Gemmano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">490.149 t <\/td><\/tr><\/table>","<h1>Comune di Misano Adriatico<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">8.71 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">1097.806 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">12610.062 t <\/td><\/tr><\/table>","<h1>Comune di Mondaino<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">653.486 t <\/td><\/tr><\/table>","<h1>Comune di Montefiore Conca<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">936.508 t <\/td><\/tr><\/table>","<h1>Comune di Montegridolfo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">434.965 t <\/td><\/tr><\/table>","<h1>Comune di Morciano di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3674.889 t <\/td><\/tr><\/table>","<h1>Comune di Riccione<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.67 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">6206.879 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">33247.143 t <\/td><\/tr><\/table>","<h1>Comune di Rimini<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">18.54 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">20617.893 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">111194.381 t <\/td><\/tr><\/table>","<h1>Comune di Saludecio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1770.372 t <\/td><\/tr><\/table>","<h1>Comune di San Clemente<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3031.290 t <\/td><\/tr><\/table>","<h1>Comune di San Giovanni in Marignano<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.13 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">9.219 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">6881.791 t <\/td><\/tr><\/table>","<h1>Comune di Santarcangelo di Romagna<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.24 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">33.655 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">13832.875 t <\/td><\/tr><\/table>","<h1>Comune di Verucchio<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">5248.044 t <\/td><\/tr><\/table>","<h1>Comune di Casteldelci<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">132.245 t <\/td><\/tr><\/table>","<h1>Comune di Maiolo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">255.309 t <\/td><\/tr><\/table>","<h1>Comune di Novafeltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">4963.219 t <\/td><\/tr><\/table>","<h1>Comune di Pennabilli<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1148.546 t <\/td><\/tr><\/table>","<h1>Comune di San Leo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1734.267 t <\/td><\/tr><\/table>","<h1>Comune di Sant'Agata Feltria<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">1576.456 t <\/td><\/tr><\/table>","<h1>Comune di Talamello<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">675.113 t <\/td><\/tr><\/table>","<h1>Comune di Poggio Torriana<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">3797.899 t <\/td><\/tr><\/table>","<h1>Comune di Montescudo - Monte Colombo<\/h1>\n <table><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.00 %<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>PaP<\/b><\/td><td style=\"padding:10px;text-align:right\">0.000 t<\/td><\/tr><tr><td style=\"padding:10px;text-align:left\"><b>Tot<\/b><\/td><td style=\"padding:10px;text-align:right\">2858.482 t <\/td><\/tr><\/table>"],null,null,null,null]},{"method":"addTiles","args":["//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",null,null,{"minZoom":0,"maxZoom":18,"maxNativeZoom":null,"tileSize":256,"subdomains":"abc","errorTileUrl":"","tms":false,"continuousWorld":false,"noWrap":false,"zoomOffset":0,"zoomReverse":false,"opacity":1,"zIndex":null,"unloadInvisibleTiles":null,"updateWhenIdle":null,"detectRetina":false,"reuseTiles":false,"attribution":"© <a href=\"http://openstreetmap.org\">OpenStreetMap<\/a> contributors, <a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA<\/a>"}]},{"method":"addLegend","args":[{"colors":["#FFFFCC","#A1DAB4","#41B6C4","#2C7FB8","#253494"],"labels":["0 – 20%","20 – 40%","40 – 60%","60 – 80%","80 – 100%"],"na_color":null,"na_label":"NA","opacity":1,"position":"bottomright","type":"bin","title":"Percentuale PaP su totale (2016)","extra":null,"layerId":null,"className":"info legend"}]}],"limits":{"lat":[43.73192431,45.13758885],"lng":[9.19939175,12.75564003]}},"evals":[],"jsHooks":[]}</script>
<div id="cosa-influenza-la-raccolta-differenziata" class="section level2">
<h2>Cosa influenza la Raccolta Differenziata?</h2>
<p>Nei grafici seguenti sono visualizzati i differenti tipi di raccolta, normalizzati per numero di abitanti e per totale di kg. È indicato anche il <a href="https://www.arpae.it/dettaglio_generale.asp?id=3213&idlivello=1836">limite del 65%</a> indicato come livello minimo di raccolta differenziata da raggiungere entro il 31/12/2012.</p>
<div id="contenitori-stradali" class="section level3">
<h3>Contenitori Stradali</h3>
<p>La raccolta tramite contenitori stradali è correlata positivamente con la raccolta indifferenziata, negativamente con quella differenziata, seppure ci siano situazioni che raggiungono ottimi livelli anche con più del 60% di questo tipo di raccolta.</p>
<div id="6a672d9a93d8" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="6a672d9a93d8">{"x":{"data":[{"x":[23.619664066288,7.55909010928604,29.0566908043537,80.3853900491769,39.0352828696979,43.3494981136519,26.5516174657448,6.13908501646734,93.2128487566783,0.133199760643195,41.526122994054,31.5315795995924,12.8497047228705,11.2167164428546,88.3563273073264,89.5826270052283,99.1464178000341,11.0541027442312,80.3914532379486,82.5291302538493,19.6101905922472,54.9471632787442,32.1467031473493,24.0120078435636,84.4414088290873,46.0576563084987,8.4647110561723,76.5739522506105,50.9437212933875,86.0379891511402,79.518742379335,24.9761519156679,36.8890840871563,82.8627295475367,25.131571329194,37.8355381487691,18.2302023995207,64.2311986170733,24.1380888886427,20.3065543589086,25.1146051266597,9.0189295992878,72.0890680719155,88.8795926615624,24.6190498695081,12.0813480040873,98.1229235880399,61.1380797941306,86.9126805446302,83.841590395692,37.3436390066284,16.9374500510078,94.5148967502431,80.5298005298605,20.1133599723113,2.99369834121204,14.1073796544288,16.1267893359641,31.4915734975901,13.8218093444801,18.6953193688073,0.00543555559984527,22.1270254059613,20.2008705975465,12.5047271271697,7.40799387266977,8.57771987820819,21.0093321203429,26.5317044610139,13.092973946911,17.5189068713717,70.5060039277201,13.3390033100405,10.360671243913,14.8778474229646,74.6143093665226,29.7392697440231,14.5885817904567,0.16249323522299,16.8054919819982,93.9505741831395,18.0976639921789,19.1196817452832,94.0794490749753,14.7198903774263,86.6794059186337,18.6765692781433,16.0043814763862,91.9080463266439,20.4899193704599,89.9536190817686,21.211480349009,24.75725572435,38.1249041724952,20.1700135316279,70.5439448314686,34.572181499398,37.7119197222338,32.2848238225035,20.2663679412596,16.6212658153589,19.1347592149603,52.0437777300758,44.7722423341716,63.8476393613773,49.5757577821893,17.8625703524593,42.3380965351044,8.576162006068,57.8097317641625,28.271252679018,16.1613414237707,16.3286266405259,41.9805749588541,33.7010828963158,54.9994912785287,17.580587527131,60.4065360935312,33.713953091762,47.8423496058174,51.0001975346043,38.1895199360346,16.5493444363093,18.5261338763965,32.5640785158255,10.3510855006755,43.3762664768169,36.1587190764045,51.7591019619246,71.5836081379426,70.4299601625643,49.6278707907153,56.1330863635204,78.5552574081514,72.211076293052,65.0034943786083,52.9933250191139,50.8241549629972,57.1210350714603,21.3559177236423,62.9897024724272,52.3231656626072,43.9303557049006,51.3957755347509,45.4282816310715,71.6254690313471,48.0348326414677,48.6644905575281,73.8759680320615,59.3724648337734,79.9787121383064,73.1265513354816,80.5686124929789,55.0021042618617,41.1194724232838,23.7268751416847,53.6153433529419,58.2164040638155,82.7517712533192,62.2996086753966,81.1032397615045,5.15676263727628,18.0501549633602,76.8722072761008,56.656403992528,74.7961899301497,79.2601772931082,58.542441977548,52.9359806310664,74.5061571066765,56.4416617555533,67.059066614504,46.2685636091279,75.8105420041167,58.4082231696251,57.6313329166351,75.5222726893264,78.9242941757473,20.7213541496861,57.3250187366681,64.3480710578255,94.5695516715399,4.1812499182336,14.5060437536605,8.12434091547957,4.03614905618302,68.7693647614515,55.9862377470859,7.82951142009737,13.0838130638872,86.4919228401872,9.4118385921719,47.759088828551,87.3262697034554,55.7913700366657,92.1465817535471,33.6709664915874,8.62634946759919,10.3588450042631,44.09597511011,48.4692735301263,80.8115039357363,4.15720655621649,41.1706677988994,57.1010529455423,83.9373166488913,7.23440242061809,48.0589245857555,87.7571184525499,49.6523998734967,84.9042708701223,72.7264279662531,67.7028178227856,72.3793057864088,51.8946047037981,72.9975358688412,76.6680513609217,68.1021647242491,75.3177169871766,8.96609747765909,78.870483197346,42.0865663762203,70.1246701544181,61.7339808518909,8.68093110612661,0.991548119117262,78.234627487483,6.6131767738028,25.2818634089831,65.03652567318,6.76875762457823,25.2132007787913,6.2630839640443,82.6581029847713,8.47340743357223,23.8563190279671,88.4112137164757,60.6923960424883,7.37958381681483,7.53494039833987,9.53893509227762,8.01393271963021,52.822930773579,7.61205257331614,59.8968070533004,8.40956375284832,6.84376914248699,11.7235384370848,8.73227872175128,7.54115717098207,11.5505705183173,5.78122258903083,55.2056404506808,7.41794707597488,8.58834426509396,85.2567062477222,82.2424762137757,8.72054043855454,8.2795934998679,6.61534648658642,8.72680337105578,59.3732782728734,58.6865882514511,60.3743595938926,71.8387682824714,63.2001196713544,67.0949519017403,71.5603658449973,56.3475712459056,57.3227602113948,45.2946822492868,60.5650276907431,48.0356000688289,48.5200689442153,54.4947413482293,62.441079185571,58.5044116492794,69.4729033350018,61.0492544349076,74.720247044894,4.64862372463908,89.6178241066517,80.771476477846,46.2109182930591,59.2938892140015,69.2671782991115,81.759609742628,33.1938028896645,0.116315301509219,51.4280429103794,67.1716551699163,54.7817583556514,50.952630886279,52.5347898134538,69.8508602045309,33.4167633427085,78.0901974211629,84.7985904523575,53.6126724399702,80.9701726308116,61.090843742804,90.0431271094782,68.0499260419134,62.2677696175685,88.7182473674361,59.7453323479746,96.5364847999747,67.9062492509049,93.924928370563,46.4017677293983,45.5578867984466,36.8476252696887,80.3100689790248,36.3074503519491,78.8486669951613,76.6312727707612,71.6466842159714,60.9533512440784,48.503900019319,45.6318633582753,51.2729528031397,56.9601390827008,44.9422105379254,61.6114943567407,65.7636064026902,95.170327800673,87.3725563924499,62.7232447329042,94.8724735448123,84.6329313767719,57.3516799707699,82.9800344534915,44.9920600837463,76.7233797519103],"y":[71.2970226386683,69.6393779082686,72.447393732588,37.7840072172326,44.3327235286547,61.7349260552571,69.8748771154364,78.2284565297122,31.5942220170173,73.4182248726499,65.3808646310829,66.9866852091537,76.9951761167207,66.7556129782873,25.0832540437678,30.4794703877518,5.9124793717635,73.3958549144279,30.1114742405012,26.3576779026217,70.1592120640027,80.2305698931583,66.3367926813739,72.4195888400641,31.9217721922455,61.2170223386996,75.5096037273873,30.8046590148839,55.1708009076147,33.4010631156909,31.4360006750156,56.8823093351451,62.5795798574502,40.9787647163387,81.4444286016738,63.9656361777336,75.7291621992605,69.7729564774134,71.5255376912349,79.7306535314381,65.1780074065917,69.1105364915512,48.7678791779575,24.4625920232074,77.3405471902207,69.0489872305412,16.4950166112957,46.4959148099397,29.625041817738,25.047460833546,41.5584721062001,49.6634772969171,25.6817254728913,27.771806000453,84.0730336868367,63.9514003816487,72.9528617613803,84.2435619612613,36.0563049374077,44.7676747174202,85.2503548009312,78.0789025250874,79.609219902402,82.9627542540562,68.2669124335532,68.9976647743786,74.1065713160845,82.5800099912178,85.4275486788848,49.434803578091,86.6870630478904,45.4599964539652,81.195942733609,58.3219452105267,75.9224476396055,24.8166162357478,81.0582373860075,83.7323043747614,59.3626939091715,86.25921803155,27.9941910308028,78.054191270947,84.3413878912848,27.2517506621352,57.6498995569864,28.1519838256997,71.833353957599,82.6453433261538,28.1374286127102,60.2325275075139,30.2916079981576,80.1545610091999,79.1468364861543,74.5838010346531,78.1742546783719,48.9207890601178,73.6410253702022,89.5136864240833,88.9623232710954,78.8133413759405,82.1239776446157,75.2137276146875,60.764984664731,64.6108170376423,47.1433285890289,62.1020440718397,81.8913201520635,65.1416544460057,90.8380798923109,61.8318084807174,75.1798321882988,80.8393912647028,84.1439122691654,88.2863140643727,89.3110819737658,62.0151326025942,82.6184745877752,65.1406677293075,90.6656628995719,65.4589787400237,64.8164591787296,58.5987859786764,80.2264995339455,85.6618957241262,70.2724084186079,77.3240525856251,68.7641125497426,73.6491899830405,63.220867148381,45.5967219070508,53.0345908339456,63.0614006223997,64.6575412380044,38.1209838721112,43.0374603203349,66.2632938316621,70.2058065458126,72.9921016626183,64.0417069153719,84.2182584252675,62.5873231089225,70.974221157038,75.54331947361,66.9661973734178,70.5981849125126,39.400134406347,61.6577419421021,71.5213872080242,39.6286555381687,64.9925877912217,36.5850062614002,62.005114832806,29.5025964173728,67.1227351053144,76.6590688731193,91.89194008105,58.7680634637104,60.888939909877,29.4788585241093,48.4201633121913,35.6943473351499,83.1705172786389,90.7387659775173,36.8983460593027,53.6826059861271,39.29289690321,36.4099959505556,64.4523715801611,65.0940610558999,44.2381742910085,74.8137179492323,60.4288323572349,78.2565143082449,50.7708910085322,61.8286244092865,65.3267962146818,47.2084545626007,31.6267677314762,86.5405189371885,65.7842048286155,57.6930948488837,48.2689670073449,82.6041103875062,69.8955402655396,72.2639360324452,75.1777851816942,46.0450564103896,40.8411125479861,82.228080059778,70.7638426803134,35.1484393448461,65.7963137587526,52.1538557252621,42.5001514356096,45.9554837450287,41.08587857357,68.6651423140192,72.4918699215318,71.3654500727137,54.0487486972311,69.0233444850394,35.8582394154398,76.5643911865848,59.2279177686935,41.103113056386,58.9369231478994,78.1805953589589,70.0165385953769,37.8372863928711,57.068747064064,48.6221202997913,48.9133602013207,69.0238260550333,59.2179416194522,63.6104128687307,71.1166947950848,51.1970783972594,46.9173965784919,38.6568017599227,82.6925915460883,41.3061730870448,64.5667106276104,44.9748171164335,54.4611142715667,74.5086658064021,79.2935232178682,48.2706343551228,78.3317999957209,79.1709504031128,48.0847860275092,70.8514391975119,80.1499489918387,76.368007536862,42.611592527704,68.8206794025765,66.9162217207634,42.480103117068,53.5331346250744,72.160057904955,64.89748194485,73.2726826821342,74.3021036573389,51.7612184800098,74.9559863294236,56.5805792751514,76.6722532280968,68.9490730635724,78.5185590461937,73.969426249204,74.4919003697594,85.4565989499987,75.0267398157451,75.4972629508366,76.2472065212406,77.254095881332,46.6653572588569,46.556917845414,77.404912408941,67.7594954843655,74.6062204030746,72.4491426902684,60.8660376831657,60.0531369770431,55.8201281385889,30.6143266941771,38.1737850885236,36.1202356973418,46.940584352687,58.192338325086,56.7358103220782,49.9795743058779,61.1175704031476,61.401143945014,63.6754295089837,59.1786774605823,39.1881262268423,55.2798594687934,54.4142332921948,33.7837250450966,31.4368074568689,76.2603918569731,20.3015250572536,38.9713313948229,60.2463098695146,41.0784668103158,38.8218894020647,30.5406307166607,64.2498517083856,74.6039615001067,48.964567900744,45.7641836621078,49.034730944845,44.633458882218,47.3811611435013,34.5955124045605,74.373171408037,38.0592304741161,28.450135975384,49.8623278496933,26.4975860543617,49.063574699127,22.6735275094977,52.3056048288467,38.3493459549383,20.9045163045184,47.3362136592168,12.4701818315859,35.3740681257041,19.304962328222,58.0345140617901,55.9433640340697,65.5569170262413,36.5682680164603,60.5323352097714,42.489969180671,47.1526137523652,51.338613451657,65.1649342333877,56.1851555184757,61.9960805393575,57.5340662866335,64.396016217518,71.1361620833879,64.4510559084789,61.315758785559,35.0992476086052,31.7885385944091,54.0044878132518,25.7480327300779,32.3742537913712,53.8792075389354,39.2396532136102,71.7235766406637,52.9725217790422],"text":["CS: 23.619664066<br />RD: 71.297023","CS: 7.559090109<br />RD: 69.639378","CS: 29.056690804<br />RD: 72.447394","CS: 80.385390049<br />RD: 37.784007","CS: 39.035282870<br />RD: 44.332724","CS: 43.349498114<br />RD: 61.734926","CS: 26.551617466<br />RD: 69.874877","CS: 6.139085016<br />RD: 78.228457","CS: 93.212848757<br />RD: 31.594222","CS: 0.133199761<br />RD: 73.418225","CS: 41.526122994<br />RD: 65.380865","CS: 31.531579600<br />RD: 66.986685","CS: 12.849704723<br />RD: 76.995176","CS: 11.216716443<br />RD: 66.755613","CS: 88.356327307<br />RD: 25.083254","CS: 89.582627005<br />RD: 30.479470","CS: 99.146417800<br />RD: 5.912479","CS: 11.054102744<br />RD: 73.395855","CS: 80.391453238<br />RD: 30.111474","CS: 82.529130254<br />RD: 26.357678","CS: 19.610190592<br />RD: 70.159212","CS: 54.947163279<br />RD: 80.230570","CS: 32.146703147<br />RD: 66.336793","CS: 24.012007844<br />RD: 72.419589","CS: 84.441408829<br />RD: 31.921772","CS: 46.057656308<br />RD: 61.217022","CS: 8.464711056<br />RD: 75.509604","CS: 76.573952251<br />RD: 30.804659","CS: 50.943721293<br />RD: 55.170801","CS: 86.037989151<br />RD: 33.401063","CS: 79.518742379<br />RD: 31.436001","CS: 24.976151916<br />RD: 56.882309","CS: 36.889084087<br />RD: 62.579580","CS: 82.862729548<br />RD: 40.978765","CS: 25.131571329<br />RD: 81.444429","CS: 37.835538149<br />RD: 63.965636","CS: 18.230202400<br />RD: 75.729162","CS: 64.231198617<br />RD: 69.772956","CS: 24.138088889<br />RD: 71.525538","CS: 20.306554359<br />RD: 79.730654","CS: 25.114605127<br />RD: 65.178007","CS: 9.018929599<br />RD: 69.110536","CS: 72.089068072<br />RD: 48.767879","CS: 88.879592662<br />RD: 24.462592","CS: 24.619049870<br />RD: 77.340547","CS: 12.081348004<br />RD: 69.048987","CS: 98.122923588<br />RD: 16.495017","CS: 61.138079794<br />RD: 46.495915","CS: 86.912680545<br />RD: 29.625042","CS: 83.841590396<br />RD: 25.047461","CS: 37.343639007<br />RD: 41.558472","CS: 16.937450051<br />RD: 49.663477","CS: 94.514896750<br />RD: 25.681725","CS: 80.529800530<br />RD: 27.771806","CS: 20.113359972<br />RD: 84.073034","CS: 2.993698341<br />RD: 63.951400","CS: 14.107379654<br />RD: 72.952862","CS: 16.126789336<br />RD: 84.243562","CS: 31.491573498<br />RD: 36.056305","CS: 13.821809344<br />RD: 44.767675","CS: 18.695319369<br />RD: 85.250355","CS: 0.005435556<br />RD: 78.078903","CS: 22.127025406<br />RD: 79.609220","CS: 20.200870598<br />RD: 82.962754","CS: 12.504727127<br />RD: 68.266912","CS: 7.407993873<br />RD: 68.997665","CS: 8.577719878<br />RD: 74.106571","CS: 21.009332120<br />RD: 82.580010","CS: 26.531704461<br />RD: 85.427549","CS: 13.092973947<br />RD: 49.434804","CS: 17.518906871<br />RD: 86.687063","CS: 70.506003928<br />RD: 45.459996","CS: 13.339003310<br />RD: 81.195943","CS: 10.360671244<br />RD: 58.321945","CS: 14.877847423<br />RD: 75.922448","CS: 74.614309367<br />RD: 24.816616","CS: 29.739269744<br />RD: 81.058237","CS: 14.588581790<br />RD: 83.732304","CS: 0.162493235<br />RD: 59.362694","CS: 16.805491982<br />RD: 86.259218","CS: 93.950574183<br />RD: 27.994191","CS: 18.097663992<br />RD: 78.054191","CS: 19.119681745<br />RD: 84.341388","CS: 94.079449075<br />RD: 27.251751","CS: 14.719890377<br />RD: 57.649900","CS: 86.679405919<br />RD: 28.151984","CS: 18.676569278<br />RD: 71.833354","CS: 16.004381476<br />RD: 82.645343","CS: 91.908046327<br />RD: 28.137429","CS: 20.489919370<br />RD: 60.232528","CS: 89.953619082<br />RD: 30.291608","CS: 21.211480349<br />RD: 80.154561","CS: 24.757255724<br />RD: 79.146836","CS: 38.124904172<br />RD: 74.583801","CS: 20.170013532<br />RD: 78.174255","CS: 70.543944831<br />RD: 48.920789","CS: 34.572181499<br />RD: 73.641025","CS: 37.711919722<br />RD: 89.513686","CS: 32.284823823<br />RD: 88.962323","CS: 20.266367941<br />RD: 78.813341","CS: 16.621265815<br />RD: 82.123978","CS: 19.134759215<br />RD: 75.213728","CS: 52.043777730<br />RD: 60.764985","CS: 44.772242334<br />RD: 64.610817","CS: 63.847639361<br />RD: 47.143329","CS: 49.575757782<br />RD: 62.102044","CS: 17.862570352<br />RD: 81.891320","CS: 42.338096535<br />RD: 65.141654","CS: 8.576162006<br />RD: 90.838080","CS: 57.809731764<br />RD: 61.831808","CS: 28.271252679<br />RD: 75.179832","CS: 16.161341424<br />RD: 80.839391","CS: 16.328626641<br />RD: 84.143912","CS: 41.980574959<br />RD: 88.286314","CS: 33.701082896<br />RD: 89.311082","CS: 54.999491279<br />RD: 62.015133","CS: 17.580587527<br />RD: 82.618475","CS: 60.406536094<br />RD: 65.140668","CS: 33.713953092<br />RD: 90.665663","CS: 47.842349606<br />RD: 65.458979","CS: 51.000197535<br />RD: 64.816459","CS: 38.189519936<br />RD: 58.598786","CS: 16.549344436<br />RD: 80.226500","CS: 18.526133876<br />RD: 85.661896","CS: 32.564078516<br />RD: 70.272408","CS: 10.351085501<br />RD: 77.324053","CS: 43.376266477<br />RD: 68.764113","CS: 36.158719076<br />RD: 73.649190","CS: 51.759101962<br />RD: 63.220867","CS: 71.583608138<br />RD: 45.596722","CS: 70.429960163<br />RD: 53.034591","CS: 49.627870791<br />RD: 63.061401","CS: 56.133086364<br />RD: 64.657541","CS: 78.555257408<br />RD: 38.120984","CS: 72.211076293<br />RD: 43.037460","CS: 65.003494379<br />RD: 66.263294","CS: 52.993325019<br />RD: 70.205807","CS: 50.824154963<br />RD: 72.992102","CS: 57.121035071<br />RD: 64.041707","CS: 21.355917724<br />RD: 84.218258","CS: 62.989702472<br />RD: 62.587323","CS: 52.323165663<br />RD: 70.974221","CS: 43.930355705<br />RD: 75.543319","CS: 51.395775535<br />RD: 66.966197","CS: 45.428281631<br />RD: 70.598185","CS: 71.625469031<br />RD: 39.400134","CS: 48.034832641<br />RD: 61.657742","CS: 48.664490558<br />RD: 71.521387","CS: 73.875968032<br />RD: 39.628656","CS: 59.372464834<br />RD: 64.992588","CS: 79.978712138<br />RD: 36.585006","CS: 73.126551335<br />RD: 62.005115","CS: 80.568612493<br />RD: 29.502596","CS: 55.002104262<br />RD: 67.122735","CS: 41.119472423<br />RD: 76.659069","CS: 23.726875142<br />RD: 91.891940","CS: 53.615343353<br />RD: 58.768063","CS: 58.216404064<br />RD: 60.888940","CS: 82.751771253<br />RD: 29.478859","CS: 62.299608675<br />RD: 48.420163","CS: 81.103239762<br />RD: 35.694347","CS: 5.156762637<br />RD: 83.170517","CS: 18.050154963<br />RD: 90.738766","CS: 76.872207276<br />RD: 36.898346","CS: 56.656403993<br />RD: 53.682606","CS: 74.796189930<br />RD: 39.292897","CS: 79.260177293<br />RD: 36.409996","CS: 58.542441978<br />RD: 64.452372","CS: 52.935980631<br />RD: 65.094061","CS: 74.506157107<br />RD: 44.238174","CS: 56.441661756<br />RD: 74.813718","CS: 67.059066615<br />RD: 60.428832","CS: 46.268563609<br />RD: 78.256514","CS: 75.810542004<br />RD: 50.770891","CS: 58.408223170<br />RD: 61.828624","CS: 57.631332917<br />RD: 65.326796","CS: 75.522272689<br />RD: 47.208455","CS: 78.924294176<br />RD: 31.626768","CS: 20.721354150<br />RD: 86.540519","CS: 57.325018737<br />RD: 65.784205","CS: 64.348071058<br />RD: 57.693095","CS: 94.569551672<br />RD: 48.268967","CS: 4.181249918<br />RD: 82.604110","CS: 14.506043754<br />RD: 69.895540","CS: 8.124340915<br />RD: 72.263936","CS: 4.036149056<br />RD: 75.177785","CS: 68.769364761<br />RD: 46.045056","CS: 55.986237747<br />RD: 40.841113","CS: 7.829511420<br />RD: 82.228080","CS: 13.083813064<br />RD: 70.763843","CS: 86.491922840<br />RD: 35.148439","CS: 9.411838592<br />RD: 65.796314","CS: 47.759088829<br />RD: 52.153856","CS: 87.326269703<br />RD: 42.500151","CS: 55.791370037<br />RD: 45.955484","CS: 92.146581754<br />RD: 41.085879","CS: 33.670966492<br />RD: 68.665142","CS: 8.626349468<br />RD: 72.491870","CS: 10.358845004<br />RD: 71.365450","CS: 44.095975110<br />RD: 54.048749","CS: 48.469273530<br />RD: 69.023344","CS: 80.811503936<br />RD: 35.858239","CS: 4.157206556<br />RD: 76.564391","CS: 41.170667799<br />RD: 59.227918","CS: 57.101052946<br />RD: 41.103113","CS: 83.937316649<br />RD: 58.936923","CS: 7.234402421<br />RD: 78.180595","CS: 48.058924586<br />RD: 70.016539","CS: 87.757118453<br />RD: 37.837286","CS: 49.652399873<br />RD: 57.068747","CS: 84.904270870<br />RD: 48.622120","CS: 72.726427966<br />RD: 48.913360","CS: 67.702817823<br />RD: 69.023826","CS: 72.379305786<br />RD: 59.217942","CS: 51.894604704<br />RD: 63.610413","CS: 72.997535869<br />RD: 71.116695","CS: 76.668051361<br />RD: 51.197078","CS: 68.102164724<br />RD: 46.917397","CS: 75.317716987<br />RD: 38.656802","CS: 8.966097478<br />RD: 82.692592","CS: 78.870483197<br />RD: 41.306173","CS: 42.086566376<br />RD: 64.566711","CS: 70.124670154<br />RD: 44.974817","CS: 61.733980852<br />RD: 54.461114","CS: 8.680931106<br />RD: 74.508666","CS: 0.991548119<br />RD: 79.293523","CS: 78.234627487<br />RD: 48.270634","CS: 6.613176774<br />RD: 78.331800","CS: 25.281863409<br />RD: 79.170950","CS: 65.036525673<br />RD: 48.084786","CS: 6.768757625<br />RD: 70.851439","CS: 25.213200779<br />RD: 80.149949","CS: 6.263083964<br />RD: 76.368008","CS: 82.658102985<br />RD: 42.611593","CS: 8.473407434<br />RD: 68.820679","CS: 23.856319028<br />RD: 66.916222","CS: 88.411213716<br />RD: 42.480103","CS: 60.692396042<br />RD: 53.533135","CS: 7.379583817<br />RD: 72.160058","CS: 7.534940398<br />RD: 64.897482","CS: 9.538935092<br />RD: 73.272683","CS: 8.013932720<br />RD: 74.302104","CS: 52.822930774<br />RD: 51.761218","CS: 7.612052573<br />RD: 74.955986","CS: 59.896807053<br />RD: 56.580579","CS: 8.409563753<br />RD: 76.672253","CS: 6.843769142<br />RD: 68.949073","CS: 11.723538437<br />RD: 78.518559","CS: 8.732278722<br />RD: 73.969426","CS: 7.541157171<br />RD: 74.491900","CS: 11.550570518<br />RD: 85.456599","CS: 5.781222589<br />RD: 75.026740","CS: 55.205640451<br />RD: 75.497263","CS: 7.417947076<br />RD: 76.247207","CS: 8.588344265<br />RD: 77.254096","CS: 85.256706248<br />RD: 46.665357","CS: 82.242476214<br />RD: 46.556918","CS: 8.720540439<br />RD: 77.404912","CS: 8.279593500<br />RD: 67.759495","CS: 6.615346487<br />RD: 74.606220","CS: 8.726803371<br />RD: 72.449143","CS: 59.373278273<br />RD: 60.866038","CS: 58.686588251<br />RD: 60.053137","CS: 60.374359594<br />RD: 55.820128","CS: 71.838768282<br />RD: 30.614327","CS: 63.200119671<br />RD: 38.173785","CS: 67.094951902<br />RD: 36.120236","CS: 71.560365845<br />RD: 46.940584","CS: 56.347571246<br />RD: 58.192338","CS: 57.322760211<br />RD: 56.735810","CS: 45.294682249<br />RD: 49.979574","CS: 60.565027691<br />RD: 61.117570","CS: 48.035600069<br />RD: 61.401144","CS: 48.520068944<br />RD: 63.675430","CS: 54.494741348<br />RD: 59.178677","CS: 62.441079186<br />RD: 39.188126","CS: 58.504411649<br />RD: 55.279859","CS: 69.472903335<br />RD: 54.414233","CS: 61.049254435<br />RD: 33.783725","CS: 74.720247045<br />RD: 31.436807","CS: 4.648623725<br />RD: 76.260392","CS: 89.617824107<br />RD: 20.301525","CS: 80.771476478<br />RD: 38.971331","CS: 46.210918293<br />RD: 60.246310","CS: 59.293889214<br />RD: 41.078467","CS: 69.267178299<br />RD: 38.821889","CS: 81.759609743<br />RD: 30.540631","CS: 33.193802890<br />RD: 64.249852","CS: 0.116315302<br />RD: 74.603962","CS: 51.428042910<br />RD: 48.964568","CS: 67.171655170<br />RD: 45.764184","CS: 54.781758356<br />RD: 49.034731","CS: 50.952630886<br />RD: 44.633459","CS: 52.534789813<br />RD: 47.381161","CS: 69.850860205<br />RD: 34.595512","CS: 33.416763343<br />RD: 74.373171","CS: 78.090197421<br />RD: 38.059230","CS: 84.798590452<br />RD: 28.450136","CS: 53.612672440<br />RD: 49.862328","CS: 80.970172631<br />RD: 26.497586","CS: 61.090843743<br />RD: 49.063575","CS: 90.043127109<br />RD: 22.673528","CS: 68.049926042<br />RD: 52.305605","CS: 62.267769618<br />RD: 38.349346","CS: 88.718247367<br />RD: 20.904516","CS: 59.745332348<br />RD: 47.336214","CS: 96.536484800<br />RD: 12.470182","CS: 67.906249251<br />RD: 35.374068","CS: 93.924928371<br />RD: 19.304962","CS: 46.401767729<br />RD: 58.034514","CS: 45.557886798<br />RD: 55.943364","CS: 36.847625270<br />RD: 65.556917","CS: 80.310068979<br />RD: 36.568268","CS: 36.307450352<br />RD: 60.532335","CS: 78.848666995<br />RD: 42.489969","CS: 76.631272771<br />RD: 47.152614","CS: 71.646684216<br />RD: 51.338613","CS: 60.953351244<br />RD: 65.164934","CS: 48.503900019<br />RD: 56.185156","CS: 45.631863358<br />RD: 61.996081","CS: 51.272952803<br />RD: 57.534066","CS: 56.960139083<br />RD: 64.396016","CS: 44.942210538<br />RD: 71.136162","CS: 61.611494357<br />RD: 64.451056","CS: 65.763606403<br />RD: 61.315759","CS: 95.170327801<br />RD: 35.099248","CS: 87.372556392<br />RD: 31.788539","CS: 62.723244733<br />RD: 54.004488","CS: 94.872473545<br />RD: 25.748033","CS: 84.632931377<br />RD: 32.374254","CS: 57.351679971<br />RD: 53.879208","CS: 82.980034453<br />RD: 39.239653","CS: 44.992060084<br />RD: 71.723577","CS: 76.723379752<br />RD: 52.972522"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-5,105],"y":[65,65],"text":"yintercept: 65","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(255,0,0,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.00543555559984527,1.26038469793446,2.51533384026907,3.77028298260368,5.02523212493829,6.2801812672729,7.53513040960751,8.79007955194212,10.0450286942767,11.2999778366113,12.554926978946,13.8098761212806,15.0648252636152,16.3197744059498,17.5747235482844,18.829672690619,20.0846218329536,21.3395709752882,22.5945201176228,23.8494692599575,25.1044184022921,26.3593675446267,27.6143166869613,28.8692658292959,30.1242149716305,31.3791641139651,32.6341132562997,33.8890623986343,35.144011540969,36.3989606833036,37.6539098256382,38.9088589679728,40.1638081103074,41.418757252642,42.6737063949766,43.9286555373112,45.1836046796458,46.4385538219805,47.6935029643151,48.9484521066497,50.2034012489843,51.4583503913189,52.7132995336535,53.9682486759881,55.2231978183227,56.4781469606573,57.733096102992,58.9880452453266,60.2429943876612,61.4979435299958,62.7528926723304,64.007841814665,65.2627909569996,66.5177400993342,67.7726892416688,69.0276383840035,70.2825875263381,71.5375366686727,72.7924858110073,74.0474349533419,75.3023840956765,76.5573332380111,77.8122823803457,79.0672315226803,80.322180665015,81.5771298073496,82.8320789496842,84.0870280920188,85.3419772343534,86.596926376688,87.8518755190226,89.1068246613572,90.3617738036918,91.6167229460265,92.8716720883611,94.1266212306957,95.3815703730303,96.6365195153649,97.8914686576995,99.1464178000341],"y":[84.4070966373672,83.7320340149033,83.0569713924394,82.3819087699755,81.7068461475117,81.0317835250478,80.3567209025839,79.68165828012,79.0065956576561,78.3315330351922,77.6564704127283,76.9814077902644,76.3063451678005,75.6312825453367,74.9562199228728,74.2811573004089,73.606094677945,72.9310320554811,72.2559694330172,71.5809068105533,70.9058441880894,70.2307815656255,69.5557189431617,68.8806563206978,68.2055936982339,67.53053107577,66.8554684533061,66.1804058308422,65.5053432083783,64.8302805859145,64.1552179634506,63.4801553409867,62.8050927185228,62.1300300960589,61.454967473595,60.7799048511311,60.1048422286672,59.4297796062033,58.7547169837395,58.0796543612756,57.4045917388117,56.7295291163478,56.0544664938839,55.37940387142,54.7043412489561,54.0292786264922,53.3542160040283,52.6791533815645,52.0040907591006,51.3290281366367,50.6539655141728,49.9789028917089,49.303840269245,48.6287776467811,47.9537150243172,47.2786524018534,46.6035897793895,45.9285271569256,45.2534645344617,44.5784019119978,43.9033392895339,43.22827666707,42.5532140446061,41.8781514221423,41.2030887996784,40.5280261772145,39.8529635547506,39.1779009322867,38.5028383098228,37.8277756873589,37.152713064895,36.4776504424311,35.8025878199673,35.1275251975034,34.4524625750395,33.7773999525756,33.1023373301117,32.4272747076478,31.7522120851839,31.07714946272],"text":["CS: 0.005435556<br />RD: 84.40710","CS: 1.260384698<br />RD: 83.73203","CS: 2.515333840<br />RD: 83.05697","CS: 3.770282983<br />RD: 82.38191","CS: 5.025232125<br />RD: 81.70685","CS: 6.280181267<br />RD: 81.03178","CS: 7.535130410<br />RD: 80.35672","CS: 8.790079552<br />RD: 79.68166","CS: 10.045028694<br />RD: 79.00660","CS: 11.299977837<br />RD: 78.33153","CS: 12.554926979<br />RD: 77.65647","CS: 13.809876121<br />RD: 76.98141","CS: 15.064825264<br />RD: 76.30635","CS: 16.319774406<br />RD: 75.63128","CS: 17.574723548<br />RD: 74.95622","CS: 18.829672691<br />RD: 74.28116","CS: 20.084621833<br />RD: 73.60609","CS: 21.339570975<br />RD: 72.93103","CS: 22.594520118<br />RD: 72.25597","CS: 23.849469260<br />RD: 71.58091","CS: 25.104418402<br />RD: 70.90584","CS: 26.359367545<br />RD: 70.23078","CS: 27.614316687<br />RD: 69.55572","CS: 28.869265829<br />RD: 68.88066","CS: 30.124214972<br />RD: 68.20559","CS: 31.379164114<br />RD: 67.53053","CS: 32.634113256<br />RD: 66.85547","CS: 33.889062399<br />RD: 66.18041","CS: 35.144011541<br />RD: 65.50534","CS: 36.398960683<br />RD: 64.83028","CS: 37.653909826<br />RD: 64.15522","CS: 38.908858968<br />RD: 63.48016","CS: 40.163808110<br />RD: 62.80509","CS: 41.418757253<br />RD: 62.13003","CS: 42.673706395<br />RD: 61.45497","CS: 43.928655537<br />RD: 60.77990","CS: 45.183604680<br />RD: 60.10484","CS: 46.438553822<br />RD: 59.42978","CS: 47.693502964<br />RD: 58.75472","CS: 48.948452107<br />RD: 58.07965","CS: 50.203401249<br />RD: 57.40459","CS: 51.458350391<br />RD: 56.72953","CS: 52.713299534<br />RD: 56.05447","CS: 53.968248676<br />RD: 55.37940","CS: 55.223197818<br />RD: 54.70434","CS: 56.478146961<br />RD: 54.02928","CS: 57.733096103<br />RD: 53.35422","CS: 58.988045245<br />RD: 52.67915","CS: 60.242994388<br />RD: 52.00409","CS: 61.497943530<br />RD: 51.32903","CS: 62.752892672<br />RD: 50.65397","CS: 64.007841815<br />RD: 49.97890","CS: 65.262790957<br />RD: 49.30384","CS: 66.517740099<br />RD: 48.62878","CS: 67.772689242<br />RD: 47.95372","CS: 69.027638384<br />RD: 47.27865","CS: 70.282587526<br />RD: 46.60359","CS: 71.537536669<br />RD: 45.92853","CS: 72.792485811<br />RD: 45.25346","CS: 74.047434953<br />RD: 44.57840","CS: 75.302384096<br />RD: 43.90334","CS: 76.557333238<br />RD: 43.22828","CS: 77.812282380<br />RD: 42.55321","CS: 79.067231523<br />RD: 41.87815","CS: 80.322180665<br />RD: 41.20309","CS: 81.577129807<br />RD: 40.52803","CS: 82.832078950<br />RD: 39.85296","CS: 84.087028092<br />RD: 39.17790","CS: 85.341977234<br />RD: 38.50284","CS: 86.596926377<br />RD: 37.82778","CS: 87.851875519<br />RD: 37.15271","CS: 89.106824661<br />RD: 36.47765","CS: 90.361773804<br />RD: 35.80259","CS: 91.616722946<br />RD: 35.12753","CS: 92.871672088<br />RD: 34.45246","CS: 94.126621231<br />RD: 33.77740","CS: 95.381570373<br />RD: 33.10234","CS: 96.636519515<br />RD: 32.42727","CS: 97.891468658<br />RD: 31.75221","CS: 99.146417800<br />RD: 31.07715"],"type":"scatter","mode":"lines","name":"fitted values","line":{"width":3.77952755905512,"color":"rgba(51,102,255,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0.00543555559984527,1.26038469793446,2.51533384026907,3.77028298260368,5.02523212493829,6.2801812672729,7.53513040960751,8.79007955194212,10.0450286942767,11.2999778366113,12.554926978946,13.8098761212806,15.0648252636152,16.3197744059498,17.5747235482844,18.829672690619,20.0846218329536,21.3395709752882,22.5945201176228,23.8494692599575,25.1044184022921,26.3593675446267,27.6143166869613,28.8692658292959,30.1242149716305,31.3791641139651,32.6341132562997,33.8890623986343,35.144011540969,36.3989606833036,37.6539098256382,38.9088589679728,40.1638081103074,41.418757252642,42.6737063949766,43.9286555373112,45.1836046796458,46.4385538219805,47.6935029643151,48.9484521066497,50.2034012489843,51.4583503913189,52.7132995336535,53.9682486759881,55.2231978183227,56.4781469606573,57.733096102992,58.9880452453266,60.2429943876612,61.4979435299958,62.7528926723304,64.007841814665,65.2627909569996,66.5177400993342,67.7726892416688,69.0276383840035,70.2825875263381,71.5375366686727,72.7924858110073,74.0474349533419,75.3023840956765,76.5573332380111,77.8122823803457,79.0672315226803,80.322180665015,81.5771298073496,82.8320789496842,84.0870280920188,85.3419772343534,86.596926376688,87.8518755190226,89.1068246613572,90.3617738036918,91.6167229460265,92.8716720883611,94.1266212306957,95.3815703730303,96.6365195153649,97.8914686576995,99.1464178000341,99.1464178000341,99.1464178000341,97.8914686576995,96.6365195153649,95.3815703730303,94.1266212306957,92.8716720883611,91.6167229460265,90.3617738036918,89.1068246613572,87.8518755190226,86.596926376688,85.3419772343534,84.0870280920188,82.8320789496842,81.5771298073496,80.322180665015,79.0672315226803,77.8122823803457,76.5573332380111,75.3023840956765,74.0474349533419,72.7924858110073,71.5375366686727,70.2825875263381,69.0276383840035,67.7726892416688,66.5177400993342,65.2627909569996,64.007841814665,62.7528926723304,61.4979435299958,60.2429943876612,58.9880452453266,57.733096102992,56.4781469606573,55.2231978183227,53.9682486759881,52.7132995336535,51.4583503913189,50.2034012489843,48.9484521066497,47.6935029643151,46.4385538219805,45.1836046796458,43.9286555373112,42.6737063949766,41.418757252642,40.1638081103074,38.9088589679728,37.6539098256382,36.3989606833036,35.144011540969,33.8890623986343,32.6341132562997,31.3791641139651,30.1242149716305,28.8692658292959,27.6143166869613,26.3593675446267,25.1044184022921,23.8494692599575,22.5945201176228,21.3395709752882,20.0846218329536,18.829672690619,17.5747235482844,16.3197744059498,15.0648252636152,13.8098761212806,12.554926978946,11.2999778366113,10.0450286942767,8.79007955194212,7.53513040960751,6.2801812672729,5.02523212493829,3.77028298260368,2.51533384026907,1.26038469793446,0.00543555559984527,0.00543555559984527],"y":[82.2267342992231,81.594541735995,80.9620338050339,80.3291908926742,79.6959918990895,79.0624141160901,78.4284330958974,77.7940225107434,77.1591540033189,76.5237970283409,75.8879186858371,75.251483547169,74.6144534753612,73.9767874419962,73.3384413437878,72.6993678229968,72.0595160971115,71.4188318046972,70.7772568760322,70.1347294390542,69.4911837732113,68.8465503259308,68.2007558084577,67.5537233895354,66.9053730065297,66.2556218137419,65.6043847863955,64.951575495624,64.2971070643109,63.6408933054857,62.9828500340884,62.3228965295341,61.6609571113902,60.9969627749041,60.3308528188708,59.6625763875184,58.9920938428366,58.3193778858,57.6444143551209,56.9672026501905,56.2877557491465,55.6060998208143,54.9222734572285,54.2363265781561,53.5483190776997,52.8583192939646,52.1664023854975,51.4726486935349,50.7771421586923,50.0799688466961,49.3812156222199,48.6809689946703,47.979314146198,47.2763341410766,46.5721093072086,45.866716774812,45.1602301539993,44.4527193315497,43.7442503672173,43.0348854709716,42.324683044254,41.6136977703477,40.901980741085,40.1895796091861,39.4765387574557,38.7628994777891,38.0487001544439,37.3339764473133,36.6187614720004,35.9030859743688,35.1869784979463,34.4704655431154,33.7535717174631,33.0363198769913,32.3187312581462,31.6008256008062,30.8826212625017,30.1641353242318,29.4453836883006,28.7263811686293,28.7263811686293,33.4279177568108,34.0590404820672,34.6904140910638,35.3220533977218,35.953974304345,36.5861938919327,37.2187305180154,37.8516039224714,38.4848353417469,39.1184476318438,39.752465400349,40.3869151476452,41.0218254172601,41.6572269550572,42.2931528766399,42.929638841901,43.5667232350984,44.2044473481273,44.8428555637924,45.4819955348139,46.121918353024,46.7626787017061,47.4043349823014,48.0469494047796,48.6905880288947,49.3353207414259,49.9812211524857,50.628366392292,51.2768367887475,51.9267154061257,52.5780874265772,53.2310393595089,53.8856580695941,54.5420296225592,55.2002379590199,55.8603634202125,56.5224811646839,57.1866595305393,57.8529584118813,58.5214277284768,59.1921060723606,59.865019612358,60.5401813266067,61.2175906144979,61.8972333147438,62.5790821283193,63.2630974172137,63.9492283256553,64.6374141524392,65.3275858928127,66.0196678663432,66.7135793524458,67.4092361660605,68.1065521202168,68.8054403377981,69.5058143899381,70.2075892518601,70.9106820778656,71.6150128053202,72.3205046029676,73.0270841820524,73.7346819900023,74.443232306265,75.1526732587785,75.8629467778209,76.5739985019578,77.2857776486771,77.9982368602399,78.7113320333599,79.4250221396195,80.1392690420435,80.8540373119933,81.5692940494965,82.2850087092704,83.0011529340055,83.7177003959338,84.4346266472769,85.1519089798449,85.8695262938116,86.5874589755113,82.2267342992231],"text":["CS: 0.005435556<br />RD: 84.40710","CS: 1.260384698<br />RD: 83.73203","CS: 2.515333840<br />RD: 83.05697","CS: 3.770282983<br />RD: 82.38191","CS: 5.025232125<br />RD: 81.70685","CS: 6.280181267<br />RD: 81.03178","CS: 7.535130410<br />RD: 80.35672","CS: 8.790079552<br />RD: 79.68166","CS: 10.045028694<br />RD: 79.00660","CS: 11.299977837<br />RD: 78.33153","CS: 12.554926979<br />RD: 77.65647","CS: 13.809876121<br />RD: 76.98141","CS: 15.064825264<br />RD: 76.30635","CS: 16.319774406<br />RD: 75.63128","CS: 17.574723548<br />RD: 74.95622","CS: 18.829672691<br />RD: 74.28116","CS: 20.084621833<br />RD: 73.60609","CS: 21.339570975<br />RD: 72.93103","CS: 22.594520118<br />RD: 72.25597","CS: 23.849469260<br />RD: 71.58091","CS: 25.104418402<br />RD: 70.90584","CS: 26.359367545<br />RD: 70.23078","CS: 27.614316687<br />RD: 69.55572","CS: 28.869265829<br />RD: 68.88066","CS: 30.124214972<br />RD: 68.20559","CS: 31.379164114<br />RD: 67.53053","CS: 32.634113256<br />RD: 66.85547","CS: 33.889062399<br />RD: 66.18041","CS: 35.144011541<br />RD: 65.50534","CS: 36.398960683<br />RD: 64.83028","CS: 37.653909826<br />RD: 64.15522","CS: 38.908858968<br />RD: 63.48016","CS: 40.163808110<br />RD: 62.80509","CS: 41.418757253<br />RD: 62.13003","CS: 42.673706395<br />RD: 61.45497","CS: 43.928655537<br />RD: 60.77990","CS: 45.183604680<br />RD: 60.10484","CS: 46.438553822<br />RD: 59.42978","CS: 47.693502964<br />RD: 58.75472","CS: 48.948452107<br />RD: 58.07965","CS: 50.203401249<br />RD: 57.40459","CS: 51.458350391<br />RD: 56.72953","CS: 52.713299534<br />RD: 56.05447","CS: 53.968248676<br />RD: 55.37940","CS: 55.223197818<br />RD: 54.70434","CS: 56.478146961<br />RD: 54.02928","CS: 57.733096103<br />RD: 53.35422","CS: 58.988045245<br />RD: 52.67915","CS: 60.242994388<br />RD: 52.00409","CS: 61.497943530<br />RD: 51.32903","CS: 62.752892672<br />RD: 50.65397","CS: 64.007841815<br />RD: 49.97890","CS: 65.262790957<br />RD: 49.30384","CS: 66.517740099<br />RD: 48.62878","CS: 67.772689242<br />RD: 47.95372","CS: 69.027638384<br />RD: 47.27865","CS: 70.282587526<br />RD: 46.60359","CS: 71.537536669<br />RD: 45.92853","CS: 72.792485811<br />RD: 45.25346","CS: 74.047434953<br />RD: 44.57840","CS: 75.302384096<br />RD: 43.90334","CS: 76.557333238<br />RD: 43.22828","CS: 77.812282380<br />RD: 42.55321","CS: 79.067231523<br />RD: 41.87815","CS: 80.322180665<br />RD: 41.20309","CS: 81.577129807<br />RD: 40.52803","CS: 82.832078950<br />RD: 39.85296","CS: 84.087028092<br />RD: 39.17790","CS: 85.341977234<br />RD: 38.50284","CS: 86.596926377<br />RD: 37.82778","CS: 87.851875519<br />RD: 37.15271","CS: 89.106824661<br />RD: 36.47765","CS: 90.361773804<br />RD: 35.80259","CS: 91.616722946<br />RD: 35.12753","CS: 92.871672088<br />RD: 34.45246","CS: 94.126621231<br />RD: 33.77740","CS: 95.381570373<br />RD: 33.10234","CS: 96.636519515<br />RD: 32.42727","CS: 97.891468658<br />RD: 31.75221","CS: 99.146417800<br />RD: 31.07715","CS: 99.146417800<br />RD: 31.07715","CS: 99.146417800<br />RD: 31.07715","CS: 97.891468658<br />RD: 31.75221","CS: 96.636519515<br />RD: 32.42727","CS: 95.381570373<br />RD: 33.10234","CS: 94.126621231<br />RD: 33.77740","CS: 92.871672088<br />RD: 34.45246","CS: 91.616722946<br />RD: 35.12753","CS: 90.361773804<br />RD: 35.80259","CS: 89.106824661<br />RD: 36.47765","CS: 87.851875519<br />RD: 37.15271","CS: 86.596926377<br />RD: 37.82778","CS: 85.341977234<br />RD: 38.50284","CS: 84.087028092<br />RD: 39.17790","CS: 82.832078950<br />RD: 39.85296","CS: 81.577129807<br />RD: 40.52803","CS: 80.322180665<br />RD: 41.20309","CS: 79.067231523<br />RD: 41.87815","CS: 77.812282380<br />RD: 42.55321","CS: 76.557333238<br />RD: 43.22828","CS: 75.302384096<br />RD: 43.90334","CS: 74.047434953<br />RD: 44.57840","CS: 72.792485811<br />RD: 45.25346","CS: 71.537536669<br />RD: 45.92853","CS: 70.282587526<br />RD: 46.60359","CS: 69.027638384<br />RD: 47.27865","CS: 67.772689242<br />RD: 47.95372","CS: 66.517740099<br />RD: 48.62878","CS: 65.262790957<br />RD: 49.30384","CS: 64.007841815<br />RD: 49.97890","CS: 62.752892672<br />RD: 50.65397","CS: 61.497943530<br />RD: 51.32903","CS: 60.242994388<br />RD: 52.00409","CS: 58.988045245<br />RD: 52.67915","CS: 57.733096103<br />RD: 53.35422","CS: 56.478146961<br />RD: 54.02928","CS: 55.223197818<br />RD: 54.70434","CS: 53.968248676<br />RD: 55.37940","CS: 52.713299534<br />RD: 56.05447","CS: 51.458350391<br />RD: 56.72953","CS: 50.203401249<br />RD: 57.40459","CS: 48.948452107<br />RD: 58.07965","CS: 47.693502964<br />RD: 58.75472","CS: 46.438553822<br />RD: 59.42978","CS: 45.183604680<br />RD: 60.10484","CS: 43.928655537<br />RD: 60.77990","CS: 42.673706395<br />RD: 61.45497","CS: 41.418757253<br />RD: 62.13003","CS: 40.163808110<br />RD: 62.80509","CS: 38.908858968<br />RD: 63.48016","CS: 37.653909826<br />RD: 64.15522","CS: 36.398960683<br />RD: 64.83028","CS: 35.144011541<br />RD: 65.50534","CS: 33.889062399<br />RD: 66.18041","CS: 32.634113256<br />RD: 66.85547","CS: 31.379164114<br />RD: 67.53053","CS: 30.124214972<br />RD: 68.20559","CS: 28.869265829<br />RD: 68.88066","CS: 27.614316687<br />RD: 69.55572","CS: 26.359367545<br />RD: 70.23078","CS: 25.104418402<br />RD: 70.90584","CS: 23.849469260<br />RD: 71.58091","CS: 22.594520118<br />RD: 72.25597","CS: 21.339570975<br />RD: 72.93103","CS: 20.084621833<br />RD: 73.60609","CS: 18.829672691<br />RD: 74.28116","CS: 17.574723548<br />RD: 74.95622","CS: 16.319774406<br />RD: 75.63128","CS: 15.064825264<br />RD: 76.30635","CS: 13.809876121<br />RD: 76.98141","CS: 12.554926979<br />RD: 77.65647","CS: 11.299977837<br />RD: 78.33153","CS: 10.045028694<br />RD: 79.00660","CS: 8.790079552<br />RD: 79.68166","CS: 7.535130410<br />RD: 80.35672","CS: 6.280181267<br />RD: 81.03178","CS: 5.025232125<br />RD: 81.70685","CS: 3.770282983<br />RD: 82.38191","CS: 2.515333840<br />RD: 83.05697","CS: 1.260384698<br />RD: 83.73203","CS: 0.005435556<br />RD: 84.40710","CS: 0.005435556<br />RD: 84.40710"],"type":"scatter","mode":"lines","line":{"width":3.77952755905512,"color":"transparent","dash":"solid"},"fill":"toself","fillcolor":"rgba(153,153,153,0.4)","hoveron":"points","hoverinfo":"x+y","showlegend":false,"xaxis":"x","yaxis":"y","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":43.1050228310502},"plot_bgcolor":"rgba(235,235,235,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"Differenziata","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Contenitori Stradali (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Raccolta Differenziata (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"6a673495380e":{"x":{},"y":{},"type":"scatter"},"6a6738d44b30":{"yintercept":{}},"6a6762b76ea6":{"x":{},"y":{}}},"cur_data":"6a673495380e","visdat":{"6a673495380e":["function (y) ","x"],"6a6738d44b30":["function (y) ","x"],"6a6762b76ea6":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1}},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":{"render":[{"code":"function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1}}); }","data":null}]}}</script>
</div>
<div id="centri-di-raccolta" class="section level3">
<h3>Centri di Raccolta</h3>
<p>La raccolta effettuata nei centri, come si può dedurre dal fatto che tutto ciò che vi viene conferito viene differenziato, è correlata positivamente con la raccolta differenziata, negativamente con la raccolta indifferenziata.</p>
<div id="6a6731b7bc80" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="6a6731b7bc80">{"x":{"data":[{"x":[30.0820321584983,18.268518197429,21.9891445928698,14.7739210357322,24.5010020408538,7.67024053830724,20.5165043326259,8.08835048259364,6.78715124332168,27.2511622614104,19.9260343205016,28.2393701980007,21.6455361649996,30.4225043542447,11.6436726926736,10.4173729947717,0,25.6647337943795,19.4379285406858,17.4708697461506,21.9731997469435,4.53455893285754,4.84925846393389,18.01812047145,15.5585911709127,19.412005491077,29.81838495733,23.4111474843137,14.8909652753086,13.9620108488598,20.3291414229044,15.0585681669155,31.9736065298165,17.1372704524633,17.7837461815322,23.7493745556977,28.2063185488209,7.36013623050963,13.3432100435705,35.9976248347461,18.5825475661986,39.2007502522927,27.0552965353502,11.0052012706663,17.5462922869099,34.7334422981896,1.87707641196013,32.194357096067,13.0873194553698,16.158409604308,18.9502165011294,13.976142335753,5.48510324975692,10.6992779037962,29.5518228601958,23.7075580036382,25.4136542849466,27.0953602554563,9.18785848174839,11.660846226198,41.1461663339658,9.9635998959997,18.6737685901935,24.1942540561931,16.0773670960466,27.9704385106477,36.6504592215042,25.2006076228878,24.2984094735783,20.7263561165155,23.3536939542457,29.097077144875,38.688317979171,34.0686806917013,10.6835686879535,4.38500369253776,23.8259803058578,41.1079843734805,12.6047234996697,42.8375707559595,6.04942581686047,31.7696299888871,29.1383775238061,5.92055092502469,29.749557651629,8.57425590541105,17.4936009202127,27.4436661597106,8.0919536733561,13.4981753225851,5.6521460284699,32.9053496501646,31.5399799745042,51.2149255558311,25.9497750494296,17.668894987451,42.9906102790511,26.0256089798405,31.3345369475762,36.6060531974373,49.6374493083864,27.2231768249113,25.2078021688474,25.099190567568,33.4693351175492,23.2689840799652,32.9418948138607,34.8094027839658,63.9624583875529,31.0995659353405,49.7824823104905,38.9535638551088,29.9185672000535,28.2885242350014,25.1760305488524,24.05664427465,41.0754424837367,29.9993069733674,38.9028727574216,42.6058394918852,33.770983555469,25.1114564165228,50.0992632320755,50.621524850072,22.3277678460841,39.8872336216261,51.9036833422768,36.9061585878062,35.7012763013317,27.8809071346729,29.5507381980162,34.5038997579557,33.5180150098199,21.2491540753695,26.9994617883906,18.4237313886357,16.349582971421,10.933716797243,22.0054691047853,15.7243087134403,18.2057347356721,28.8338082346101,7.12704466399204,23.6564165983797,27.8370713954672,28.1430729953629,21.7145227950915,21.3469690551944,26.1154991102431,26.2068858661481,13.2283204074899,24.6917194495386,18.2112381011875,24.9989234881385,9.17365354425245,16.8454674895631,13.3131478834198,20.2104918904266,17.1666003636799,10.4305093361857,18.796108592377,32.6727618317911,29.1011424414798,13.1104087885129,27.064710339347,23.0643399981972,17.5214458771655,31.9385067025791,23.0085121512431,25.2991299915272,18.3054286900438,21.5677809716749,33.123141039842,14.4590091114881,26.4955669136112,15.5791208995373,17.7550967824387,18.5324486506029,20.1354588630419,15.9908910967196,11.6287908934309,1.47401012799382,21.3607572525581,18.1026699783193,15.2239465615489,11.6810344990225,4.72635960527445,23.1322816202196,31.6943922203001,25.9022027284092,9.21945950967982,10.3920012674438,16.6043487728248,12.6501736461656,19.1758801297293,0,26.6986737506072,16.3247864438998,10.4955260550217,24.6665977768636,30.7493554821988,15.2488188346428,28.7115398598771,35.4453678134058,30.3942649843584,0,27.393023445097,24.5692501447451,7.14035548082021,10.7005389064428,6.53841544758324,23.5493914758262,18.6120658098212,21.2742804108802,36.0451492641028,15.7656889146789,21.1423005345372,28.0712386105581,16.8308139110094,38.7488876986855,17.6466600894531,27.015073648577,12.7586239304749,5.26682518890234,21.1704940727244,27.6597608330375,17.4950038790618,34.3788419159095,27.8019982105044,15.6499906252826,26.2367304659087,19.8337567344108,39.2136766715119,10.8746545517679,15.0082364165151,26.5458158751905,0,13.0291876651799,0,15.849162003725,13.377979503375,0,6.12315511823833,0,7.87785347242215,0,0,9.99127903823215,0,0,24.4266129217339,6.82359695708339,17.7629961306019,13.1469825144885,0,12.298402627585,16.0639920223719,10.1974195554174,3.53622368670762,0,6.20791892702251,19.4150094765223,21.0500314410242,21.1212025292962,20.9155985352295,29.0040301456648,25.2899102049863,10.3863012619967,23.4644410794727,19.4584158809847,7.59951588471601,22.2136038603094,20.7023349243018,19.7800345656627,16.9041757065993,32.6612661071814,25.3793007395122,19.6150706051999,26.650888780139,0.484328800821149,7.21291789753785,0.1182655032561,3.2696129879832,4.74254178579969,4.0582669194862,5.57176662019973,1.65882393547868,2.37220011231003,6.74215840265587,17.2378794159887,7.27939860578455,3.56290561794013,5.31916260356216,1.38384752801474,2.43723751352364,7.38680414471413,15.4632597524569,0.00127676416889036,3.71602219631404,0.204278844419637,6.91066771165658,3.56797343348316,3.65577325683294,14.458790122755,3.41649201483698,5.35189607313955,0,21.6484886257401,2.85381957340691,5.63439806681344,6.82540353835967,3.19814261556465,8.29910904643282,6.23770921982779,5.16384436697955,6.1919385632584,3.90905015346062,7.22664004273326,2.72947362725272,6.16446527095645,8.94405243643709,7.53019341600441,9.93543686519977,6.7817861435168,5.51571213960859,4.82967219932701,12.6211766917735,22.209819876979,5.12752645518769,7.76656650907848,2.48855661052386,17.0199655465085,7.65739162626494,4.81105006083649],"y":[71.2970226386683,69.6393779082686,72.447393732588,37.7840072172326,44.3327235286547,61.7349260552571,69.8748771154364,78.2284565297122,31.5942220170173,73.4182248726499,65.3808646310829,66.9866852091537,76.9951761167207,66.7556129782873,25.0832540437678,30.4794703877518,5.9124793717635,73.3958549144279,30.1114742405012,26.3576779026217,70.1592120640027,80.2305698931583,66.3367926813739,72.4195888400641,31.9217721922455,61.2170223386996,75.5096037273873,30.8046590148839,55.1708009076147,33.4010631156909,31.4360006750156,56.8823093351451,62.5795798574502,40.9787647163387,81.4444286016738,63.9656361777336,75.7291621992605,69.7729564774134,71.5255376912349,79.7306535314381,65.1780074065917,69.1105364915512,48.7678791779575,24.4625920232074,77.3405471902207,69.0489872305412,16.4950166112957,46.4959148099397,29.625041817738,25.047460833546,41.5584721062001,49.6634772969171,25.6817254728913,27.771806000453,84.0730336868367,63.9514003816487,72.9528617613803,84.2435619612613,36.0563049374077,44.7676747174202,85.2503548009312,78.0789025250874,79.609219902402,82.9627542540562,68.2669124335532,68.9976647743786,74.1065713160845,82.5800099912178,85.4275486788848,49.434803578091,86.6870630478904,45.4599964539652,81.195942733609,58.3219452105267,75.9224476396055,24.8166162357478,81.0582373860075,83.7323043747614,59.3626939091715,86.25921803155,27.9941910308028,78.054191270947,84.3413878912848,27.2517506621352,57.6498995569864,28.1519838256997,71.833353957599,82.6453433261538,28.1374286127102,60.2325275075139,30.2916079981576,80.1545610091999,79.1468364861543,74.5838010346531,78.1742546783719,48.9207890601178,73.6410253702022,89.5136864240833,88.9623232710954,78.8133413759405,82.1239776446157,75.2137276146875,60.764984664731,64.6108170376423,47.1433285890289,62.1020440718397,81.8913201520635,65.1416544460057,90.8380798923109,61.8318084807174,75.1798321882988,80.8393912647028,84.1439122691654,88.2863140643727,89.3110819737658,62.0151326025942,82.6184745877752,65.1406677293075,90.6656628995719,65.4589787400237,64.8164591787296,58.5987859786764,80.2264995339455,85.6618957241262,70.2724084186079,77.3240525856251,68.7641125497426,73.6491899830405,63.220867148381,45.5967219070508,53.0345908339456,63.0614006223997,64.6575412380044,38.1209838721112,43.0374603203349,66.2632938316621,70.2058065458126,72.9921016626183,64.0417069153719,84.2182584252675,62.5873231089225,70.974221157038,75.54331947361,66.9661973734178,70.5981849125126,39.400134406347,61.6577419421021,71.5213872080242,39.6286555381687,64.9925877912217,36.5850062614002,62.005114832806,29.5025964173728,67.1227351053144,76.6590688731193,91.89194008105,58.7680634637104,60.888939909877,29.4788585241093,48.4201633121913,35.6943473351499,83.1705172786389,90.7387659775173,36.8983460593027,53.6826059861271,39.29289690321,36.4099959505556,64.4523715801611,65.0940610558999,44.2381742910085,74.8137179492323,60.4288323572349,78.2565143082449,50.7708910085322,61.8286244092865,65.3267962146818,47.2084545626007,31.6267677314762,86.5405189371885,65.7842048286155,57.6930948488837,48.2689670073449,82.6041103875062,69.8955402655396,72.2639360324452,75.1777851816942,46.0450564103896,40.8411125479861,82.228080059778,70.7638426803134,35.1484393448461,65.7963137587526,52.1538557252621,42.5001514356096,45.9554837450287,41.08587857357,68.6651423140192,72.4918699215318,71.3654500727137,54.0487486972311,69.0233444850394,35.8582394154398,76.5643911865848,59.2279177686935,41.103113056386,58.9369231478994,78.1805953589589,70.0165385953769,37.8372863928711,57.068747064064,48.6221202997913,48.9133602013207,69.0238260550333,59.2179416194522,63.6104128687307,71.1166947950848,51.1970783972594,46.9173965784919,38.6568017599227,82.6925915460883,41.3061730870448,64.5667106276104,44.9748171164335,54.4611142715667,74.5086658064021,79.2935232178682,48.2706343551228,78.3317999957209,79.1709504031128,48.0847860275092,70.8514391975119,80.1499489918387,76.368007536862,42.611592527704,68.8206794025765,66.9162217207634,42.480103117068,53.5331346250744,72.160057904955,64.89748194485,73.2726826821342,74.3021036573389,51.7612184800098,74.9559863294236,56.5805792751514,76.6722532280968,68.9490730635724,78.5185590461937,73.969426249204,74.4919003697594,85.4565989499987,75.0267398157451,75.4972629508366,76.2472065212406,77.254095881332,46.6653572588569,46.556917845414,77.404912408941,67.7594954843655,74.6062204030746,72.4491426902684,60.8660376831657,60.0531369770431,55.8201281385889,30.6143266941771,38.1737850885236,36.1202356973418,46.940584352687,58.192338325086,56.7358103220782,49.9795743058779,61.1175704031476,61.401143945014,63.6754295089837,59.1786774605823,39.1881262268423,55.2798594687934,54.4142332921948,33.7837250450966,31.4368074568689,76.2603918569731,20.3015250572536,38.9713313948229,60.2463098695146,41.0784668103158,38.8218894020647,30.5406307166607,64.2498517083856,74.6039615001067,48.964567900744,45.7641836621078,49.034730944845,44.633458882218,47.3811611435013,34.5955124045605,74.373171408037,38.0592304741161,28.450135975384,49.8623278496933,26.4975860543617,49.063574699127,22.6735275094977,52.3056048288467,38.3493459549383,20.9045163045184,47.3362136592168,12.4701818315859,35.3740681257041,19.304962328222,58.0345140617901,55.9433640340697,65.5569170262413,36.5682680164603,60.5323352097714,42.489969180671,47.1526137523652,51.338613451657,65.1649342333877,56.1851555184757,61.9960805393575,57.5340662866335,64.396016217518,71.1361620833879,64.4510559084789,61.315758785559,35.0992476086052,31.7885385944091,54.0044878132518,25.7480327300779,32.3742537913712,53.8792075389354,39.2396532136102,71.7235766406637,52.9725217790422],"text":["CdR: 30.082032158<br />RD: 71.297023","CdR: 18.268518197<br />RD: 69.639378","CdR: 21.989144593<br />RD: 72.447394","CdR: 14.773921036<br />RD: 37.784007","CdR: 24.501002041<br />RD: 44.332724","CdR: 7.670240538<br />RD: 61.734926","CdR: 20.516504333<br />RD: 69.874877","CdR: 8.088350483<br />RD: 78.228457","CdR: 6.787151243<br />RD: 31.594222","CdR: 27.251162261<br />RD: 73.418225","CdR: 19.926034321<br />RD: 65.380865","CdR: 28.239370198<br />RD: 66.986685","CdR: 21.645536165<br />RD: 76.995176","CdR: 30.422504354<br />RD: 66.755613","CdR: 11.643672693<br />RD: 25.083254","CdR: 10.417372995<br />RD: 30.479470","CdR: 0.000000000<br />RD: 5.912479","CdR: 25.664733794<br />RD: 73.395855","CdR: 19.437928541<br />RD: 30.111474","CdR: 17.470869746<br />RD: 26.357678","CdR: 21.973199747<br />RD: 70.159212","CdR: 4.534558933<br />RD: 80.230570","CdR: 4.849258464<br />RD: 66.336793","CdR: 18.018120471<br />RD: 72.419589","CdR: 15.558591171<br />RD: 31.921772","CdR: 19.412005491<br />RD: 61.217022","CdR: 29.818384957<br />RD: 75.509604","CdR: 23.411147484<br />RD: 30.804659","CdR: 14.890965275<br />RD: 55.170801","CdR: 13.962010849<br />RD: 33.401063","CdR: 20.329141423<br />RD: 31.436001","CdR: 15.058568167<br />RD: 56.882309","CdR: 31.973606530<br />RD: 62.579580","CdR: 17.137270452<br />RD: 40.978765","CdR: 17.783746182<br />RD: 81.444429","CdR: 23.749374556<br />RD: 63.965636","CdR: 28.206318549<br />RD: 75.729162","CdR: 7.360136231<br />RD: 69.772956","CdR: 13.343210044<br />RD: 71.525538","CdR: 35.997624835<br />RD: 79.730654","CdR: 18.582547566<br />RD: 65.178007","CdR: 39.200750252<br />RD: 69.110536","CdR: 27.055296535<br />RD: 48.767879","CdR: 11.005201271<br />RD: 24.462592","CdR: 17.546292287<br />RD: 77.340547","CdR: 34.733442298<br />RD: 69.048987","CdR: 1.877076412<br />RD: 16.495017","CdR: 32.194357096<br />RD: 46.495915","CdR: 13.087319455<br />RD: 29.625042","CdR: 16.158409604<br />RD: 25.047461","CdR: 18.950216501<br />RD: 41.558472","CdR: 13.976142336<br />RD: 49.663477","CdR: 5.485103250<br />RD: 25.681725","CdR: 10.699277904<br />RD: 27.771806","CdR: 29.551822860<br />RD: 84.073034","CdR: 23.707558004<br />RD: 63.951400","CdR: 25.413654285<br />RD: 72.952862","CdR: 27.095360255<br />RD: 84.243562","CdR: 9.187858482<br />RD: 36.056305","CdR: 11.660846226<br />RD: 44.767675","CdR: 41.146166334<br />RD: 85.250355","CdR: 9.963599896<br />RD: 78.078903","CdR: 18.673768590<br />RD: 79.609220","CdR: 24.194254056<br />RD: 82.962754","CdR: 16.077367096<br />RD: 68.266912","CdR: 27.970438511<br />RD: 68.997665","CdR: 36.650459222<br />RD: 74.106571","CdR: 25.200607623<br />RD: 82.580010","CdR: 24.298409474<br />RD: 85.427549","CdR: 20.726356117<br />RD: 49.434804","CdR: 23.353693954<br />RD: 86.687063","CdR: 29.097077145<br />RD: 45.459996","CdR: 38.688317979<br />RD: 81.195943","CdR: 34.068680692<br />RD: 58.321945","CdR: 10.683568688<br />RD: 75.922448","CdR: 4.385003693<br />RD: 24.816616","CdR: 23.825980306<br />RD: 81.058237","CdR: 41.107984373<br />RD: 83.732304","CdR: 12.604723500<br />RD: 59.362694","CdR: 42.837570756<br />RD: 86.259218","CdR: 6.049425817<br />RD: 27.994191","CdR: 31.769629989<br />RD: 78.054191","CdR: 29.138377524<br />RD: 84.341388","CdR: 5.920550925<br />RD: 27.251751","CdR: 29.749557652<br />RD: 57.649900","CdR: 8.574255905<br />RD: 28.151984","CdR: 17.493600920<br />RD: 71.833354","CdR: 27.443666160<br />RD: 82.645343","CdR: 8.091953673<br />RD: 28.137429","CdR: 13.498175323<br />RD: 60.232528","CdR: 5.652146028<br />RD: 30.291608","CdR: 32.905349650<br />RD: 80.154561","CdR: 31.539979975<br />RD: 79.146836","CdR: 51.214925556<br />RD: 74.583801","CdR: 25.949775049<br />RD: 78.174255","CdR: 17.668894987<br />RD: 48.920789","CdR: 42.990610279<br />RD: 73.641025","CdR: 26.025608980<br />RD: 89.513686","CdR: 31.334536948<br />RD: 88.962323","CdR: 36.606053197<br />RD: 78.813341","CdR: 49.637449308<br />RD: 82.123978","CdR: 27.223176825<br />RD: 75.213728","CdR: 25.207802169<br />RD: 60.764985","CdR: 25.099190568<br />RD: 64.610817","CdR: 33.469335118<br />RD: 47.143329","CdR: 23.268984080<br />RD: 62.102044","CdR: 32.941894814<br />RD: 81.891320","CdR: 34.809402784<br />RD: 65.141654","CdR: 63.962458388<br />RD: 90.838080","CdR: 31.099565935<br />RD: 61.831808","CdR: 49.782482310<br />RD: 75.179832","CdR: 38.953563855<br />RD: 80.839391","CdR: 29.918567200<br />RD: 84.143912","CdR: 28.288524235<br />RD: 88.286314","CdR: 25.176030549<br />RD: 89.311082","CdR: 24.056644275<br />RD: 62.015133","CdR: 41.075442484<br />RD: 82.618475","CdR: 29.999306973<br />RD: 65.140668","CdR: 38.902872757<br />RD: 90.665663","CdR: 42.605839492<br />RD: 65.458979","CdR: 33.770983555<br />RD: 64.816459","CdR: 25.111456417<br />RD: 58.598786","CdR: 50.099263232<br />RD: 80.226500","CdR: 50.621524850<br />RD: 85.661896","CdR: 22.327767846<br />RD: 70.272408","CdR: 39.887233622<br />RD: 77.324053","CdR: 51.903683342<br />RD: 68.764113","CdR: 36.906158588<br />RD: 73.649190","CdR: 35.701276301<br />RD: 63.220867","CdR: 27.880907135<br />RD: 45.596722","CdR: 29.550738198<br />RD: 53.034591","CdR: 34.503899758<br />RD: 63.061401","CdR: 33.518015010<br />RD: 64.657541","CdR: 21.249154075<br />RD: 38.120984","CdR: 26.999461788<br />RD: 43.037460","CdR: 18.423731389<br />RD: 66.263294","CdR: 16.349582971<br />RD: 70.205807","CdR: 10.933716797<br />RD: 72.992102","CdR: 22.005469105<br />RD: 64.041707","CdR: 15.724308713<br />RD: 84.218258","CdR: 18.205734736<br />RD: 62.587323","CdR: 28.833808235<br />RD: 70.974221","CdR: 7.127044664<br />RD: 75.543319","CdR: 23.656416598<br />RD: 66.966197","CdR: 27.837071395<br />RD: 70.598185","CdR: 28.143072995<br />RD: 39.400134","CdR: 21.714522795<br />RD: 61.657742","CdR: 21.346969055<br />RD: 71.521387","CdR: 26.115499110<br />RD: 39.628656","CdR: 26.206885866<br />RD: 64.992588","CdR: 13.228320407<br />RD: 36.585006","CdR: 24.691719450<br />RD: 62.005115","CdR: 18.211238101<br />RD: 29.502596","CdR: 24.998923488<br />RD: 67.122735","CdR: 9.173653544<br />RD: 76.659069","CdR: 16.845467490<br />RD: 91.891940","CdR: 13.313147883<br />RD: 58.768063","CdR: 20.210491890<br />RD: 60.888940","CdR: 17.166600364<br />RD: 29.478859","CdR: 10.430509336<br />RD: 48.420163","CdR: 18.796108592<br />RD: 35.694347","CdR: 32.672761832<br />RD: 83.170517","CdR: 29.101142441<br />RD: 90.738766","CdR: 13.110408789<br />RD: 36.898346","CdR: 27.064710339<br />RD: 53.682606","CdR: 23.064339998<br />RD: 39.292897","CdR: 17.521445877<br />RD: 36.409996","CdR: 31.938506703<br />RD: 64.452372","CdR: 23.008512151<br />RD: 65.094061","CdR: 25.299129992<br />RD: 44.238174","CdR: 18.305428690<br />RD: 74.813718","CdR: 21.567780972<br />RD: 60.428832","CdR: 33.123141040<br />RD: 78.256514","CdR: 14.459009111<br />RD: 50.770891","CdR: 26.495566914<br />RD: 61.828624","CdR: 15.579120900<br />RD: 65.326796","CdR: 17.755096782<br />RD: 47.208455","CdR: 18.532448651<br />RD: 31.626768","CdR: 20.135458863<br />RD: 86.540519","CdR: 15.990891097<br />RD: 65.784205","CdR: 11.628790893<br />RD: 57.693095","CdR: 1.474010128<br />RD: 48.268967","CdR: 21.360757253<br />RD: 82.604110","CdR: 18.102669978<br />RD: 69.895540","CdR: 15.223946562<br />RD: 72.263936","CdR: 11.681034499<br />RD: 75.177785","CdR: 4.726359605<br />RD: 46.045056","CdR: 23.132281620<br />RD: 40.841113","CdR: 31.694392220<br />RD: 82.228080","CdR: 25.902202728<br />RD: 70.763843","CdR: 9.219459510<br />RD: 35.148439","CdR: 10.392001267<br />RD: 65.796314","CdR: 16.604348773<br />RD: 52.153856","CdR: 12.650173646<br />RD: 42.500151","CdR: 19.175880130<br />RD: 45.955484","CdR: 0.000000000<br />RD: 41.085879","CdR: 26.698673751<br />RD: 68.665142","CdR: 16.324786444<br />RD: 72.491870","CdR: 10.495526055<br />RD: 71.365450","CdR: 24.666597777<br />RD: 54.048749","CdR: 30.749355482<br />RD: 69.023344","CdR: 15.248818835<br />RD: 35.858239","CdR: 28.711539860<br />RD: 76.564391","CdR: 35.445367813<br />RD: 59.227918","CdR: 30.394264984<br />RD: 41.103113","CdR: 0.000000000<br />RD: 58.936923","CdR: 27.393023445<br />RD: 78.180595","CdR: 24.569250145<br />RD: 70.016539","CdR: 7.140355481<br />RD: 37.837286","CdR: 10.700538906<br />RD: 57.068747","CdR: 6.538415448<br />RD: 48.622120","CdR: 23.549391476<br />RD: 48.913360","CdR: 18.612065810<br />RD: 69.023826","CdR: 21.274280411<br />RD: 59.217942","CdR: 36.045149264<br />RD: 63.610413","CdR: 15.765688915<br />RD: 71.116695","CdR: 21.142300535<br />RD: 51.197078","CdR: 28.071238611<br />RD: 46.917397","CdR: 16.830813911<br />RD: 38.656802","CdR: 38.748887699<br />RD: 82.692592","CdR: 17.646660089<br />RD: 41.306173","CdR: 27.015073649<br />RD: 64.566711","CdR: 12.758623930<br />RD: 44.974817","CdR: 5.266825189<br />RD: 54.461114","CdR: 21.170494073<br />RD: 74.508666","CdR: 27.659760833<br />RD: 79.293523","CdR: 17.495003879<br />RD: 48.270634","CdR: 34.378841916<br />RD: 78.331800","CdR: 27.801998211<br />RD: 79.170950","CdR: 15.649990625<br />RD: 48.084786","CdR: 26.236730466<br />RD: 70.851439","CdR: 19.833756734<br />RD: 80.149949","CdR: 39.213676672<br />RD: 76.368008","CdR: 10.874654552<br />RD: 42.611593","CdR: 15.008236417<br />RD: 68.820679","CdR: 26.545815875<br />RD: 66.916222","CdR: 0.000000000<br />RD: 42.480103","CdR: 13.029187665<br />RD: 53.533135","CdR: 0.000000000<br />RD: 72.160058","CdR: 15.849162004<br />RD: 64.897482","CdR: 13.377979503<br />RD: 73.272683","CdR: 0.000000000<br />RD: 74.302104","CdR: 6.123155118<br />RD: 51.761218","CdR: 0.000000000<br />RD: 74.955986","CdR: 7.877853472<br />RD: 56.580579","CdR: 0.000000000<br />RD: 76.672253","CdR: 0.000000000<br />RD: 68.949073","CdR: 9.991279038<br />RD: 78.518559","CdR: 0.000000000<br />RD: 73.969426","CdR: 0.000000000<br />RD: 74.491900","CdR: 24.426612922<br />RD: 85.456599","CdR: 6.823596957<br />RD: 75.026740","CdR: 17.762996131<br />RD: 75.497263","CdR: 13.146982514<br />RD: 76.247207","CdR: 0.000000000<br />RD: 77.254096","CdR: 12.298402628<br />RD: 46.665357","CdR: 16.063992022<br />RD: 46.556918","CdR: 10.197419555<br />RD: 77.404912","CdR: 3.536223687<br />RD: 67.759495","CdR: 0.000000000<br />RD: 74.606220","CdR: 6.207918927<br />RD: 72.449143","CdR: 19.415009477<br />RD: 60.866038","CdR: 21.050031441<br />RD: 60.053137","CdR: 21.121202529<br />RD: 55.820128","CdR: 20.915598535<br />RD: 30.614327","CdR: 29.004030146<br />RD: 38.173785","CdR: 25.289910205<br />RD: 36.120236","CdR: 10.386301262<br />RD: 46.940584","CdR: 23.464441079<br />RD: 58.192338","CdR: 19.458415881<br />RD: 56.735810","CdR: 7.599515885<br />RD: 49.979574","CdR: 22.213603860<br />RD: 61.117570","CdR: 20.702334924<br />RD: 61.401144","CdR: 19.780034566<br />RD: 63.675430","CdR: 16.904175707<br />RD: 59.178677","CdR: 32.661266107<br />RD: 39.188126","CdR: 25.379300740<br />RD: 55.279859","CdR: 19.615070605<br />RD: 54.414233","CdR: 26.650888780<br />RD: 33.783725","CdR: 0.484328801<br />RD: 31.436807","CdR: 7.212917898<br />RD: 76.260392","CdR: 0.118265503<br />RD: 20.301525","CdR: 3.269612988<br />RD: 38.971331","CdR: 4.742541786<br />RD: 60.246310","CdR: 4.058266919<br />RD: 41.078467","CdR: 5.571766620<br />RD: 38.821889","CdR: 1.658823935<br />RD: 30.540631","CdR: 2.372200112<br />RD: 64.249852","CdR: 6.742158403<br />RD: 74.603962","CdR: 17.237879416<br />RD: 48.964568","CdR: 7.279398606<br />RD: 45.764184","CdR: 3.562905618<br />RD: 49.034731","CdR: 5.319162604<br />RD: 44.633459","CdR: 1.383847528<br />RD: 47.381161","CdR: 2.437237514<br />RD: 34.595512","CdR: 7.386804145<br />RD: 74.373171","CdR: 15.463259752<br />RD: 38.059230","CdR: 0.001276764<br />RD: 28.450136","CdR: 3.716022196<br />RD: 49.862328","CdR: 0.204278844<br />RD: 26.497586","CdR: 6.910667712<br />RD: 49.063575","CdR: 3.567973433<br />RD: 22.673528","CdR: 3.655773257<br />RD: 52.305605","CdR: 14.458790123<br />RD: 38.349346","CdR: 3.416492015<br />RD: 20.904516","CdR: 5.351896073<br />RD: 47.336214","CdR: 0.000000000<br />RD: 12.470182","CdR: 21.648488626<br />RD: 35.374068","CdR: 2.853819573<br />RD: 19.304962","CdR: 5.634398067<br />RD: 58.034514","CdR: 6.825403538<br />RD: 55.943364","CdR: 3.198142616<br />RD: 65.556917","CdR: 8.299109046<br />RD: 36.568268","CdR: 6.237709220<br />RD: 60.532335","CdR: 5.163844367<br />RD: 42.489969","CdR: 6.191938563<br />RD: 47.152614","CdR: 3.909050153<br />RD: 51.338613","CdR: 7.226640043<br />RD: 65.164934","CdR: 2.729473627<br />RD: 56.185156","CdR: 6.164465271<br />RD: 61.996081","CdR: 8.944052436<br />RD: 57.534066","CdR: 7.530193416<br />RD: 64.396016","CdR: 9.935436865<br />RD: 71.136162","CdR: 6.781786144<br />RD: 64.451056","CdR: 5.515712140<br />RD: 61.315759","CdR: 4.829672199<br />RD: 35.099248","CdR: 12.621176692<br />RD: 31.788539","CdR: 22.209819877<br />RD: 54.004488","CdR: 5.127526455<br />RD: 25.748033","CdR: 7.766566509<br />RD: 32.374254","CdR: 2.488556611<br />RD: 53.879208","CdR: 17.019965547<br />RD: 39.239653","CdR: 7.657391626<br />RD: 71.723577","CdR: 4.811050061<br />RD: 52.972522"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-5,105],"y":[65,65],"text":"yintercept: 65","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(255,0,0,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,0.809651371994341,1.61930274398868,2.42895411598302,3.23860548797736,4.04825685997171,4.85790823196605,5.66755960396039,6.47721097595473,7.28686234794907,8.09651371994341,8.90616509193775,9.71581646393209,10.5254678359264,11.3351192079208,12.1447705799151,12.9544219519095,13.7640733239038,14.5737246958981,15.3833760678925,16.1930274398868,17.0026788118812,17.8123301838755,18.6219815558698,19.4316329278642,20.2412842998585,21.0509356718529,21.8605870438472,22.6702384158416,23.4798897878359,24.2895411598302,25.0991925318246,25.9088439038189,26.7184952758133,27.5281466478076,28.3377980198019,29.1474493917963,29.9571007637906,30.766752135785,31.5764035077793,32.3860548797736,33.195706251768,34.0053576237623,34.8150089957567,35.624660367751,36.4343117397453,37.2439631117397,38.053614483734,38.8632658557284,39.6729172277227,40.4825685997171,41.2922199717114,42.1018713437057,42.9115227157001,43.7211740876944,44.5308254596888,45.3404768316831,46.1501282036774,46.9597795756718,47.7694309476661,48.5790823196605,49.3887336916548,50.1983850636491,51.0080364356435,51.8176878076378,52.6273391796322,53.4369905516265,54.2466419236209,55.0562932956152,55.8659446676095,56.6755960396039,57.4852474115982,58.2948987835926,59.1045501555869,59.9142015275812,60.7238528995756,61.5335042715699,62.3431556435643,63.1528070155586,63.9624583875529],"y":[46.1812238506742,46.7383639098893,47.2955039691044,47.8526440283196,48.4097840875347,48.9669241467498,49.5240642059649,50.08120426518,50.6383443243952,51.1954843836103,51.7526244428254,52.3097645020405,52.8669045612556,53.4240446204708,53.9811846796859,54.538324738901,55.0954647981161,55.6526048573312,56.2097449165464,56.7668849757615,57.3240250349766,57.8811650941917,58.4383051534068,58.995445212622,59.5525852718371,60.1097253310522,60.6668653902673,61.2240054494824,61.7811455086976,62.3382855679127,62.8954256271278,63.4525656863429,64.0097057455581,64.5668458047732,65.1239858639883,65.6811259232034,66.2382659824185,66.7954060416336,67.3525461008488,67.9096861600639,68.466826219279,69.0239662784941,69.5811063377092,70.1382463969244,70.6953864561395,71.2525265153546,71.8096665745697,72.3668066337848,72.923946693,73.4810867522151,74.0382268114302,74.5953668706453,75.1525069298604,75.7096469890756,76.2667870482907,76.8239271075058,77.3810671667209,77.938207225936,78.4953472851512,79.0524873443663,79.6096274035814,80.1667674627965,80.7239075220116,81.2810475812268,81.8381876404419,82.395327699657,82.9524677588721,83.5096078180872,84.0667478773024,84.6238879365175,85.1810279957326,85.7381680549477,86.2953081141628,86.852448173378,87.4095882325931,87.9667282918082,88.5238683510233,89.0810084102384,89.6381484694536,90.1952885286687],"text":["CdR: 0.0000000<br />RD: 46.18122","CdR: 0.8096514<br />RD: 46.73836","CdR: 1.6193027<br />RD: 47.29550","CdR: 2.4289541<br />RD: 47.85264","CdR: 3.2386055<br />RD: 48.40978","CdR: 4.0482569<br />RD: 48.96692","CdR: 4.8579082<br />RD: 49.52406","CdR: 5.6675596<br />RD: 50.08120","CdR: 6.4772110<br />RD: 50.63834","CdR: 7.2868623<br />RD: 51.19548","CdR: 8.0965137<br />RD: 51.75262","CdR: 8.9061651<br />RD: 52.30976","CdR: 9.7158165<br />RD: 52.86690","CdR: 10.5254678<br />RD: 53.42404","CdR: 11.3351192<br />RD: 53.98118","CdR: 12.1447706<br />RD: 54.53832","CdR: 12.9544220<br />RD: 55.09546","CdR: 13.7640733<br />RD: 55.65260","CdR: 14.5737247<br />RD: 56.20974","CdR: 15.3833761<br />RD: 56.76688","CdR: 16.1930274<br />RD: 57.32403","CdR: 17.0026788<br />RD: 57.88117","CdR: 17.8123302<br />RD: 58.43831","CdR: 18.6219816<br />RD: 58.99545","CdR: 19.4316329<br />RD: 59.55259","CdR: 20.2412843<br />RD: 60.10973","CdR: 21.0509357<br />RD: 60.66687","CdR: 21.8605870<br />RD: 61.22401","CdR: 22.6702384<br />RD: 61.78115","CdR: 23.4798898<br />RD: 62.33829","CdR: 24.2895412<br />RD: 62.89543","CdR: 25.0991925<br />RD: 63.45257","CdR: 25.9088439<br />RD: 64.00971","CdR: 26.7184953<br />RD: 64.56685","CdR: 27.5281466<br />RD: 65.12399","CdR: 28.3377980<br />RD: 65.68113","CdR: 29.1474494<br />RD: 66.23827","CdR: 29.9571008<br />RD: 66.79541","CdR: 30.7667521<br />RD: 67.35255","CdR: 31.5764035<br />RD: 67.90969","CdR: 32.3860549<br />RD: 68.46683","CdR: 33.1957063<br />RD: 69.02397","CdR: 34.0053576<br />RD: 69.58111","CdR: 34.8150090<br />RD: 70.13825","CdR: 35.6246604<br />RD: 70.69539","CdR: 36.4343117<br />RD: 71.25253","CdR: 37.2439631<br />RD: 71.80967","CdR: 38.0536145<br />RD: 72.36681","CdR: 38.8632659<br />RD: 72.92395","CdR: 39.6729172<br />RD: 73.48109","CdR: 40.4825686<br />RD: 74.03823","CdR: 41.2922200<br />RD: 74.59537","CdR: 42.1018713<br />RD: 75.15251","CdR: 42.9115227<br />RD: 75.70965","CdR: 43.7211741<br />RD: 76.26679","CdR: 44.5308255<br />RD: 76.82393","CdR: 45.3404768<br />RD: 77.38107","CdR: 46.1501282<br />RD: 77.93821","CdR: 46.9597796<br />RD: 78.49535","CdR: 47.7694309<br />RD: 79.05249","CdR: 48.5790823<br />RD: 79.60963","CdR: 49.3887337<br />RD: 80.16677","CdR: 50.1983851<br />RD: 80.72391","CdR: 51.0080364<br />RD: 81.28105","CdR: 51.8176878<br />RD: 81.83819","CdR: 52.6273392<br />RD: 82.39533","CdR: 53.4369906<br />RD: 82.95247","CdR: 54.2466419<br />RD: 83.50961","CdR: 55.0562933<br />RD: 84.06675","CdR: 55.8659447<br />RD: 84.62389","CdR: 56.6755960<br />RD: 85.18103","CdR: 57.4852474<br />RD: 85.73817","CdR: 58.2948988<br />RD: 86.29531","CdR: 59.1045502<br />RD: 86.85245","CdR: 59.9142015<br />RD: 87.40959","CdR: 60.7238529<br />RD: 87.96673","CdR: 61.5335043<br />RD: 88.52387","CdR: 62.3431556<br />RD: 89.08101","CdR: 63.1528070<br />RD: 89.63815","CdR: 63.9624584<br />RD: 90.19529"],"type":"scatter","mode":"lines","name":"fitted values","line":{"width":3.77952755905512,"color":"rgba(51,102,255,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,0.809651371994341,1.61930274398868,2.42895411598302,3.23860548797736,4.04825685997171,4.85790823196605,5.66755960396039,6.47721097595473,7.28686234794907,8.09651371994341,8.90616509193775,9.71581646393209,10.5254678359264,11.3351192079208,12.1447705799151,12.9544219519095,13.7640733239038,14.5737246958981,15.3833760678925,16.1930274398868,17.0026788118812,17.8123301838755,18.6219815558698,19.4316329278642,20.2412842998585,21.0509356718529,21.8605870438472,22.6702384158416,23.4798897878359,24.2895411598302,25.0991925318246,25.9088439038189,26.7184952758133,27.5281466478076,28.3377980198019,29.1474493917963,29.9571007637906,30.766752135785,31.5764035077793,32.3860548797736,33.195706251768,34.0053576237623,34.8150089957567,35.624660367751,36.4343117397453,37.2439631117397,38.053614483734,38.8632658557284,39.6729172277227,40.4825685997171,41.2922199717114,42.1018713437057,42.9115227157001,43.7211740876944,44.5308254596888,45.3404768316831,46.1501282036774,46.9597795756718,47.7694309476661,48.5790823196605,49.3887336916548,50.1983850636491,51.0080364356435,51.8176878076378,52.6273391796322,53.4369905516265,54.2466419236209,55.0562932956152,55.8659446676095,56.6755960396039,57.4852474115982,58.2948987835926,59.1045501555869,59.9142015275812,60.7238528995756,61.5335042715699,62.3431556435643,63.1528070155586,63.9624583875529,63.9624583875529,63.9624583875529,63.1528070155586,62.3431556435643,61.5335042715699,60.7238528995756,59.9142015275812,59.1045501555869,58.2948987835926,57.4852474115982,56.6755960396039,55.8659446676095,55.0562932956152,54.2466419236209,53.4369905516265,52.6273391796322,51.8176878076378,51.0080364356435,50.1983850636491,49.3887336916548,48.5790823196605,47.7694309476661,46.9597795756718,46.1501282036774,45.3404768316831,44.5308254596888,43.7211740876944,42.9115227157001,42.1018713437057,41.2922199717114,40.4825685997171,39.6729172277227,38.8632658557284,38.053614483734,37.2439631117397,36.4343117397453,35.624660367751,34.8150089957567,34.0053576237623,33.195706251768,32.3860548797736,31.5764035077793,30.766752135785,29.9571007637906,29.1474493917963,28.3377980198019,27.5281466478076,26.7184952758133,25.9088439038189,25.0991925318246,24.2895411598302,23.4798897878359,22.6702384158416,21.8605870438472,21.0509356718529,20.2412842998585,19.4316329278642,18.6219815558698,17.8123301838755,17.0026788118812,16.1930274398868,15.3833760678925,14.5737246958981,13.7640733239038,12.9544219519095,12.1447705799151,11.3351192079208,10.5254678359264,9.71581646393209,8.90616509193775,8.09651371994341,7.28686234794907,6.47721097595473,5.66755960396039,4.85790823196605,4.04825685997171,3.23860548797736,2.42895411598302,1.61930274398868,0.809651371994341,0,0],"y":[42.8911812669826,43.5494576945349,44.2063563440135,44.8617393490729,45.5154523680301,46.1673225757797,46.8171564939655,47.4647376940499,48.10982443603,48.7521473447778,49.391407278679,50.0272736129799,50.6593832425622,51.2873407013973,51.9107198877761,52.5290679552249,53.1419119469203,53.7487686738485,54.3491581176795,54.9426202443825,55.5287345471599,56.1071409645381,56.6775601857872,57.2398109623127,57.7938220836346,58.3396372442753,58.8774120465952,59.4074036067923,59.9299543267804,60.4454720851293,60.9544092643267,61.457242726977,61.9544562582353,62.4465263124409,62.9339113000876,63.4170442124913,63.8963281221041,64.3721339888457,64.8448002019331,65.3146333481369,65.7819097864438,66.2468777027763,66.7097594037924,67.1707536801851,67.6300381261216,68.0877713437429,68.5440949921972,68.999135661969,69.4530065695349,69.9058090765087,70.3576340429233,70.8085630272672,71.2586693471771,71.7080190148797,72.1566715609992,72.6046807594792,73.0520952653043,73.4989591755755,73.9453125233651,74.3911917127045,74.8366299020638,75.2816573427794,75.7263016780749,76.1705882076025,76.6145401217981,77.0581787097881,77.5015235441015,77.944592645019,78.3874026270227,78.8299688294946,79.2723054335342,79.7144255665278,80.1563413958938,80.5980642132511,81.0396045101002,81.4809720459713,81.9221759098793,82.3632245758211,82.8041259529618,83.2448874310822,83.2448874310822,97.1456896262551,96.4721709859453,95.7987922446558,95.1255607921673,94.4524845376451,93.7795719550859,93.1068321335048,92.4342748324319,91.7619105433676,91.089750557931,90.4178070435403,89.746093127582,89.0746229911554,88.4034119736427,87.7324766895259,87.0618351590856,86.391506954851,85.7215133659484,85.0518775828137,84.382624905099,83.7137829760281,83.0453820469372,82.3774552762966,81.7100390681376,81.0431734555324,80.3769025355821,79.7112749632714,79.0463445125437,78.3821707140234,77.7188195799372,77.0563644279215,76.394886816465,75.7344776056007,75.0752381569422,74.4172816869663,73.7607347861574,73.1057391136636,72.452453271626,71.801054854212,71.1517426521142,70.5047389719909,69.8602919997645,69.2186780944216,68.5802038427329,67.9452076339155,67.3140604278889,66.6871652971055,66.0649552328808,65.4478886457089,64.8364419899289,64.231099050696,63.6323366906147,63.0406072921726,62.4563187339394,61.8798134178291,61.3113484600395,60.7510794629312,60.1990501210265,59.6551892238454,59.1193155227933,58.5911497071405,58.0703317154132,57.556441040814,57.0490176493119,56.5475815225771,56.0516494715957,55.5607485395442,55.0744258799491,54.5922553911011,54.1138416069718,53.6388214224427,53.1668642127603,52.6976708363102,52.2309719179643,51.7665257177199,51.3041158070393,50.8435487075662,50.3846515941954,49.9272701252438,49.4712664343658,42.8911812669826],"text":["CdR: 0.0000000<br />RD: 46.18122","CdR: 0.8096514<br />RD: 46.73836","CdR: 1.6193027<br />RD: 47.29550","CdR: 2.4289541<br />RD: 47.85264","CdR: 3.2386055<br />RD: 48.40978","CdR: 4.0482569<br />RD: 48.96692","CdR: 4.8579082<br />RD: 49.52406","CdR: 5.6675596<br />RD: 50.08120","CdR: 6.4772110<br />RD: 50.63834","CdR: 7.2868623<br />RD: 51.19548","CdR: 8.0965137<br />RD: 51.75262","CdR: 8.9061651<br />RD: 52.30976","CdR: 9.7158165<br />RD: 52.86690","CdR: 10.5254678<br />RD: 53.42404","CdR: 11.3351192<br />RD: 53.98118","CdR: 12.1447706<br />RD: 54.53832","CdR: 12.9544220<br />RD: 55.09546","CdR: 13.7640733<br />RD: 55.65260","CdR: 14.5737247<br />RD: 56.20974","CdR: 15.3833761<br />RD: 56.76688","CdR: 16.1930274<br />RD: 57.32403","CdR: 17.0026788<br />RD: 57.88117","CdR: 17.8123302<br />RD: 58.43831","CdR: 18.6219816<br />RD: 58.99545","CdR: 19.4316329<br />RD: 59.55259","CdR: 20.2412843<br />RD: 60.10973","CdR: 21.0509357<br />RD: 60.66687","CdR: 21.8605870<br />RD: 61.22401","CdR: 22.6702384<br />RD: 61.78115","CdR: 23.4798898<br />RD: 62.33829","CdR: 24.2895412<br />RD: 62.89543","CdR: 25.0991925<br />RD: 63.45257","CdR: 25.9088439<br />RD: 64.00971","CdR: 26.7184953<br />RD: 64.56685","CdR: 27.5281466<br />RD: 65.12399","CdR: 28.3377980<br />RD: 65.68113","CdR: 29.1474494<br />RD: 66.23827","CdR: 29.9571008<br />RD: 66.79541","CdR: 30.7667521<br />RD: 67.35255","CdR: 31.5764035<br />RD: 67.90969","CdR: 32.3860549<br />RD: 68.46683","CdR: 33.1957063<br />RD: 69.02397","CdR: 34.0053576<br />RD: 69.58111","CdR: 34.8150090<br />RD: 70.13825","CdR: 35.6246604<br />RD: 70.69539","CdR: 36.4343117<br />RD: 71.25253","CdR: 37.2439631<br />RD: 71.80967","CdR: 38.0536145<br />RD: 72.36681","CdR: 38.8632659<br />RD: 72.92395","CdR: 39.6729172<br />RD: 73.48109","CdR: 40.4825686<br />RD: 74.03823","CdR: 41.2922200<br />RD: 74.59537","CdR: 42.1018713<br />RD: 75.15251","CdR: 42.9115227<br />RD: 75.70965","CdR: 43.7211741<br />RD: 76.26679","CdR: 44.5308255<br />RD: 76.82393","CdR: 45.3404768<br />RD: 77.38107","CdR: 46.1501282<br />RD: 77.93821","CdR: 46.9597796<br />RD: 78.49535","CdR: 47.7694309<br />RD: 79.05249","CdR: 48.5790823<br />RD: 79.60963","CdR: 49.3887337<br />RD: 80.16677","CdR: 50.1983851<br />RD: 80.72391","CdR: 51.0080364<br />RD: 81.28105","CdR: 51.8176878<br />RD: 81.83819","CdR: 52.6273392<br />RD: 82.39533","CdR: 53.4369906<br />RD: 82.95247","CdR: 54.2466419<br />RD: 83.50961","CdR: 55.0562933<br />RD: 84.06675","CdR: 55.8659447<br />RD: 84.62389","CdR: 56.6755960<br />RD: 85.18103","CdR: 57.4852474<br />RD: 85.73817","CdR: 58.2948988<br />RD: 86.29531","CdR: 59.1045502<br />RD: 86.85245","CdR: 59.9142015<br />RD: 87.40959","CdR: 60.7238529<br />RD: 87.96673","CdR: 61.5335043<br />RD: 88.52387","CdR: 62.3431556<br />RD: 89.08101","CdR: 63.1528070<br />RD: 89.63815","CdR: 63.9624584<br />RD: 90.19529","CdR: 63.9624584<br />RD: 90.19529","CdR: 63.9624584<br />RD: 90.19529","CdR: 63.1528070<br />RD: 89.63815","CdR: 62.3431556<br />RD: 89.08101","CdR: 61.5335043<br />RD: 88.52387","CdR: 60.7238529<br />RD: 87.96673","CdR: 59.9142015<br />RD: 87.40959","CdR: 59.1045502<br />RD: 86.85245","CdR: 58.2948988<br />RD: 86.29531","CdR: 57.4852474<br />RD: 85.73817","CdR: 56.6755960<br />RD: 85.18103","CdR: 55.8659447<br />RD: 84.62389","CdR: 55.0562933<br />RD: 84.06675","CdR: 54.2466419<br />RD: 83.50961","CdR: 53.4369906<br />RD: 82.95247","CdR: 52.6273392<br />RD: 82.39533","CdR: 51.8176878<br />RD: 81.83819","CdR: 51.0080364<br />RD: 81.28105","CdR: 50.1983851<br />RD: 80.72391","CdR: 49.3887337<br />RD: 80.16677","CdR: 48.5790823<br />RD: 79.60963","CdR: 47.7694309<br />RD: 79.05249","CdR: 46.9597796<br />RD: 78.49535","CdR: 46.1501282<br />RD: 77.93821","CdR: 45.3404768<br />RD: 77.38107","CdR: 44.5308255<br />RD: 76.82393","CdR: 43.7211741<br />RD: 76.26679","CdR: 42.9115227<br />RD: 75.70965","CdR: 42.1018713<br />RD: 75.15251","CdR: 41.2922200<br />RD: 74.59537","CdR: 40.4825686<br />RD: 74.03823","CdR: 39.6729172<br />RD: 73.48109","CdR: 38.8632659<br />RD: 72.92395","CdR: 38.0536145<br />RD: 72.36681","CdR: 37.2439631<br />RD: 71.80967","CdR: 36.4343117<br />RD: 71.25253","CdR: 35.6246604<br />RD: 70.69539","CdR: 34.8150090<br />RD: 70.13825","CdR: 34.0053576<br />RD: 69.58111","CdR: 33.1957063<br />RD: 69.02397","CdR: 32.3860549<br />RD: 68.46683","CdR: 31.5764035<br />RD: 67.90969","CdR: 30.7667521<br />RD: 67.35255","CdR: 29.9571008<br />RD: 66.79541","CdR: 29.1474494<br />RD: 66.23827","CdR: 28.3377980<br />RD: 65.68113","CdR: 27.5281466<br />RD: 65.12399","CdR: 26.7184953<br />RD: 64.56685","CdR: 25.9088439<br />RD: 64.00971","CdR: 25.0991925<br />RD: 63.45257","CdR: 24.2895412<br />RD: 62.89543","CdR: 23.4798898<br />RD: 62.33829","CdR: 22.6702384<br />RD: 61.78115","CdR: 21.8605870<br />RD: 61.22401","CdR: 21.0509357<br />RD: 60.66687","CdR: 20.2412843<br />RD: 60.10973","CdR: 19.4316329<br />RD: 59.55259","CdR: 18.6219816<br />RD: 58.99545","CdR: 17.8123302<br />RD: 58.43831","CdR: 17.0026788<br />RD: 57.88117","CdR: 16.1930274<br />RD: 57.32403","CdR: 15.3833761<br />RD: 56.76688","CdR: 14.5737247<br />RD: 56.20974","CdR: 13.7640733<br />RD: 55.65260","CdR: 12.9544220<br />RD: 55.09546","CdR: 12.1447706<br />RD: 54.53832","CdR: 11.3351192<br />RD: 53.98118","CdR: 10.5254678<br />RD: 53.42404","CdR: 9.7158165<br />RD: 52.86690","CdR: 8.9061651<br />RD: 52.30976","CdR: 8.0965137<br />RD: 51.75262","CdR: 7.2868623<br />RD: 51.19548","CdR: 6.4772110<br />RD: 50.63834","CdR: 5.6675596<br />RD: 50.08120","CdR: 4.8579082<br />RD: 49.52406","CdR: 4.0482569<br />RD: 48.96692","CdR: 3.2386055<br />RD: 48.40978","CdR: 2.4289541<br />RD: 47.85264","CdR: 1.6193027<br />RD: 47.29550","CdR: 0.8096514<br />RD: 46.73836","CdR: 0.0000000<br />RD: 46.18122","CdR: 0.0000000<br />RD: 46.18122"],"type":"scatter","mode":"lines","line":{"width":3.77952755905512,"color":"transparent","dash":"solid"},"fill":"toself","fillcolor":"rgba(153,153,153,0.4)","hoveron":"points","hoverinfo":"x+y","showlegend":false,"xaxis":"x","yaxis":"y","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":43.1050228310502},"plot_bgcolor":"rgba(235,235,235,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"Differenziata","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Centri di Raccolta (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Raccolta Differenziata (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"6a677f80780d":{"x":{},"y":{},"type":"scatter"},"6a6762edfeef":{"yintercept":{}},"6a67727501c4":{"x":{},"y":{}}},"cur_data":"6a677f80780d","visdat":{"6a677f80780d":["function (y) ","x"],"6a6762edfeef":["function (y) ","x"],"6a67727501c4":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1}},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":{"render":[{"code":"function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1}}); }","data":null}]}}</script>
</div>
<div id="porta-a-porta" class="section level3">
<h3>Porta-a-Porta</h3>
<p>Il Porta-a-Porta ha una correlazione diretta con la percentuale di raccolta differenziata. Nonostante vi siano Comuni che raggiungono livelli di legge anche senza utilizzare questo metodo, quelli che raggiungono altissimi livelli di differenziata hanno tutti una percentuale significativa (almeno 12.5%) di Porta-a-Porta.</p>
<div id="6a677e0e405d" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="6a677e0e405d">{"x":{"data":[{"x":[44.4779072930176,53.6547054388716,48.9541646027765,4.50794453695193,34.2100424718233,39.9850778732421,39.0194121668484,41.4001205332213,0,57.3449423088726,31.0728327469724,33.5451491201498,31.0308568244885,46.6720393345712,0,0,0,46.8778357603383,0,0,48.649611947402,27.4612884725674,47.6176396174031,42.3590060917229,0,32.7707475352552,48.5965840207288,0,30.2262071898036,0,0,31.5023424106684,26.448206789685,0,33.8527745732174,31.3206366093164,44.2971067760865,23.4584797277788,44.5561414000455,35.9867666115891,56.1173927406128,47.9719742712393,0.566324041597584,0,19.1737522187456,50.0727798783201,0,0,0,0,43.3822160602641,68.8937011788883,0,0.135489906002003,42.3165979231978,66.2498915326688,48.219872597078,43.4331995893838,55.2470065869558,74.3696435788188,36.4566094393837,89.3291890241638,51.9796706748734,46.0289671547289,57.2697312817945,55.3416703874578,51.5603902329634,47.9517907403054,42.2008929058473,66.1528241621243,35.8054993878717,0,38.7382937593627,54.7509781870475,53.5202207404419,18.5831336661835,43.4251141391735,38.7745553621327,79.7459185886619,34.9542052881062,0,47.9682352651187,44.9712323047184,0,55.3899982705176,0,51.6695898784502,37.5918375257394,0,57.6469867289144,0,43.1699764008173,41.6107288110774,6.41664127040613,37.1430400188243,0,19.2077356936141,22.2573264289813,16.2739125081427,34.2899627060835,31.856242559162,35.9098201579173,12.9714846119383,4.59471456201304,0,3.60254392055102,32.852001237974,14.3400362080296,14.0254660518182,8.36166727857897,14.9874698408009,30.2143415717174,25.9299230386203,16.7748019582287,18.6612589208962,0,26.9479101661292,3.05079959337496,16.2251375517749,7.20789030567033,0,19.9308843390789,31.8499961284644,26.5645156961784,13.3245940793105,36.011366563179,3.53311833555592,15.5447354313863,4.78937164561948,0,0,7.4495555084604,5.8105634965841,0,0,0,0,0,2.06625145612283,56.8081166457676,0.263363735305143,0,0,15.5044046411551,18.2442314559448,0,11.2934718432349,0,0,5.26147290671463,0,0,0,0,0,33.3245032437843,19.7888316736316,2.11602383235049,0,0,0,44.7999302567729,45.8518123728072,0,0,0,0,0,5.75007103889223,0,0,1.54998573503888,15.4069258287393,0,0,0,0,0,55.5569957312662,0,0,0,38.5275387615988,52.8352313607266,70.3897230748233,41.40422277303,5.80146424301165,0.289987494723329,47.3159238835536,46.1101134755142,0,66.0715799792157,1.39897524319088,0,1.67300496480422,0,5.63260895660379,66.4147451437284,48.6493934840109,3.54432376429649,11.3341346471917,0,52.3429494558905,3.45199682904132,1.34306047847288,0,59.2705874625348,12.5045562184663,0,4.48828863189589,0,0,5.77649340847753,0,1.04061113879199,7.27133230627148,0.282337553586683,0,0,48.7780500250927,0,2.15735343921896,9.99699932971864,2.75849274330174,65.8799375033685,56.794767438481,0,50.1840416585062,32.3831485001515,12.5001749014434,60.2241484433225,27.6431937443324,48.4898845606294,0,65.9009055106413,40.9914505628362,0,16.1979076979333,72.4562653560521,73.3619709277754,72.7651714144269,65.447444576846,9.62611136478113,62.7860590976605,2.67388741002707,66.3543145867045,68.8491624831898,62.934308848451,76.7127022114086,66.8699978782027,59.3690951336773,62.2790509757641,23.2126239554449,67.0171431504873,67.4350043086238,0,0,67.6288056692413,73.3116141300101,63.2796175415526,67.0201645847429,6.01735898210641,10.0402924838315,6.4020700868003,2.19559577193214,1.18544741251379,1.141153558493,3.53811641857911,3.65647976048885,7.31064628666267,6.86668013805205,2.07519762656405,17.9392435958865,11.0960805848008,6.31941685359338,0.832515929079534,3.94998737334958,3.36391374379642,1.64348821192529,0,48.6229938661038,0,0,11.759495961768,0,0,0,19.5661845224114,61.6639574857187,0,0,5.82167332657724,0,1.00323215438676,0,0,0,0,0.0135103436108864,0,0,0,0.871752055514789,0,0,1.01141676824769,0,0,0,14.7637595376373,22.9473352537839,2.23745494835275,0,8.70579383352754,0,0,0,0,18.6689093856877,18.5422076318766,0,0,0.133962220009297,0.243297217678899,0,0,0,0,0,0,0,0,0,0],"y":[71.2970226386683,69.6393779082686,72.447393732588,37.7840072172326,44.3327235286547,61.7349260552571,69.8748771154364,78.2284565297122,31.5942220170173,73.4182248726499,65.3808646310829,66.9866852091537,76.9951761167207,66.7556129782873,25.0832540437678,30.4794703877518,5.9124793717635,73.3958549144279,30.1114742405012,26.3576779026217,70.1592120640027,80.2305698931583,66.3367926813739,72.4195888400641,31.9217721922455,61.2170223386996,75.5096037273873,30.8046590148839,55.1708009076147,33.4010631156909,31.4360006750156,56.8823093351451,62.5795798574502,40.9787647163387,81.4444286016738,63.9656361777336,75.7291621992605,69.7729564774134,71.5255376912349,79.7306535314381,65.1780074065917,69.1105364915512,48.7678791779575,24.4625920232074,77.3405471902207,69.0489872305412,16.4950166112957,46.4959148099397,29.625041817738,25.047460833546,41.5584721062001,49.6634772969171,25.6817254728913,27.771806000453,84.0730336868367,63.9514003816487,72.9528617613803,84.2435619612613,36.0563049374077,44.7676747174202,85.2503548009312,78.0789025250874,79.609219902402,82.9627542540562,68.2669124335532,68.9976647743786,74.1065713160845,82.5800099912178,85.4275486788848,49.434803578091,86.6870630478904,45.4599964539652,81.195942733609,58.3219452105267,75.9224476396055,24.8166162357478,81.0582373860075,83.7323043747614,59.3626939091715,86.25921803155,27.9941910308028,78.054191270947,84.3413878912848,27.2517506621352,57.6498995569864,28.1519838256997,71.833353957599,82.6453433261538,28.1374286127102,60.2325275075139,30.2916079981576,80.1545610091999,79.1468364861543,74.5838010346531,78.1742546783719,48.9207890601178,73.6410253702022,89.5136864240833,88.9623232710954,78.8133413759405,82.1239776446157,75.2137276146875,60.764984664731,64.6108170376423,47.1433285890289,62.1020440718397,81.8913201520635,65.1416544460057,90.8380798923109,61.8318084807174,75.1798321882988,80.8393912647028,84.1439122691654,88.2863140643727,89.3110819737658,62.0151326025942,82.6184745877752,65.1406677293075,90.6656628995719,65.4589787400237,64.8164591787296,58.5987859786764,80.2264995339455,85.6618957241262,70.2724084186079,77.3240525856251,68.7641125497426,73.6491899830405,63.220867148381,45.5967219070508,53.0345908339456,63.0614006223997,64.6575412380044,38.1209838721112,43.0374603203349,66.2632938316621,70.2058065458126,72.9921016626183,64.0417069153719,84.2182584252675,62.5873231089225,70.974221157038,75.54331947361,66.9661973734178,70.5981849125126,39.400134406347,61.6577419421021,71.5213872080242,39.6286555381687,64.9925877912217,36.5850062614002,62.005114832806,29.5025964173728,67.1227351053144,76.6590688731193,91.89194008105,58.7680634637104,60.888939909877,29.4788585241093,48.4201633121913,35.6943473351499,83.1705172786389,90.7387659775173,36.8983460593027,53.6826059861271,39.29289690321,36.4099959505556,64.4523715801611,65.0940610558999,44.2381742910085,74.8137179492323,60.4288323572349,78.2565143082449,50.7708910085322,61.8286244092865,65.3267962146818,47.2084545626007,31.6267677314762,86.5405189371885,65.7842048286155,57.6930948488837,48.2689670073449,82.6041103875062,69.8955402655396,72.2639360324452,75.1777851816942,46.0450564103896,40.8411125479861,82.228080059778,70.7638426803134,35.1484393448461,65.7963137587526,52.1538557252621,42.5001514356096,45.9554837450287,41.08587857357,68.6651423140192,72.4918699215318,71.3654500727137,54.0487486972311,69.0233444850394,35.8582394154398,76.5643911865848,59.2279177686935,41.103113056386,58.9369231478994,78.1805953589589,70.0165385953769,37.8372863928711,57.068747064064,48.6221202997913,48.9133602013207,69.0238260550333,59.2179416194522,63.6104128687307,71.1166947950848,51.1970783972594,46.9173965784919,38.6568017599227,82.6925915460883,41.3061730870448,64.5667106276104,44.9748171164335,54.4611142715667,74.5086658064021,79.2935232178682,48.2706343551228,78.3317999957209,79.1709504031128,48.0847860275092,70.8514391975119,80.1499489918387,76.368007536862,42.611592527704,68.8206794025765,66.9162217207634,42.480103117068,53.5331346250744,72.160057904955,64.89748194485,73.2726826821342,74.3021036573389,51.7612184800098,74.9559863294236,56.5805792751514,76.6722532280968,68.9490730635724,78.5185590461937,73.969426249204,74.4919003697594,85.4565989499987,75.0267398157451,75.4972629508366,76.2472065212406,77.254095881332,46.6653572588569,46.556917845414,77.404912408941,67.7594954843655,74.6062204030746,72.4491426902684,60.8660376831657,60.0531369770431,55.8201281385889,30.6143266941771,38.1737850885236,36.1202356973418,46.940584352687,58.192338325086,56.7358103220782,49.9795743058779,61.1175704031476,61.401143945014,63.6754295089837,59.1786774605823,39.1881262268423,55.2798594687934,54.4142332921948,33.7837250450966,31.4368074568689,76.2603918569731,20.3015250572536,38.9713313948229,60.2463098695146,41.0784668103158,38.8218894020647,30.5406307166607,64.2498517083856,74.6039615001067,48.964567900744,45.7641836621078,49.034730944845,44.633458882218,47.3811611435013,34.5955124045605,74.373171408037,38.0592304741161,28.450135975384,49.8623278496933,26.4975860543617,49.063574699127,22.6735275094977,52.3056048288467,38.3493459549383,20.9045163045184,47.3362136592168,12.4701818315859,35.3740681257041,19.304962328222,58.0345140617901,55.9433640340697,65.5569170262413,36.5682680164603,60.5323352097714,42.489969180671,47.1526137523652,51.338613451657,65.1649342333877,56.1851555184757,61.9960805393575,57.5340662866335,64.396016217518,71.1361620833879,64.4510559084789,61.315758785559,35.0992476086052,31.7885385944091,54.0044878132518,25.7480327300779,32.3742537913712,53.8792075389354,39.2396532136102,71.7235766406637,52.9725217790422],"text":["PaP: 44.47790729<br />RD: 71.297023","PaP: 53.65470544<br />RD: 69.639378","PaP: 48.95416460<br />RD: 72.447394","PaP: 4.50794454<br />RD: 37.784007","PaP: 34.21004247<br />RD: 44.332724","PaP: 39.98507787<br />RD: 61.734926","PaP: 39.01941217<br />RD: 69.874877","PaP: 41.40012053<br />RD: 78.228457","PaP: 0.00000000<br />RD: 31.594222","PaP: 57.34494231<br />RD: 73.418225","PaP: 31.07283275<br />RD: 65.380865","PaP: 33.54514912<br />RD: 66.986685","PaP: 31.03085682<br />RD: 76.995176","PaP: 46.67203933<br />RD: 66.755613","PaP: 0.00000000<br />RD: 25.083254","PaP: 0.00000000<br />RD: 30.479470","PaP: 0.00000000<br />RD: 5.912479","PaP: 46.87783576<br />RD: 73.395855","PaP: 0.00000000<br />RD: 30.111474","PaP: 0.00000000<br />RD: 26.357678","PaP: 48.64961195<br />RD: 70.159212","PaP: 27.46128847<br />RD: 80.230570","PaP: 47.61763962<br />RD: 66.336793","PaP: 42.35900609<br />RD: 72.419589","PaP: 0.00000000<br />RD: 31.921772","PaP: 32.77074754<br />RD: 61.217022","PaP: 48.59658402<br />RD: 75.509604","PaP: 0.00000000<br />RD: 30.804659","PaP: 30.22620719<br />RD: 55.170801","PaP: 0.00000000<br />RD: 33.401063","PaP: 0.00000000<br />RD: 31.436001","PaP: 31.50234241<br />RD: 56.882309","PaP: 26.44820679<br />RD: 62.579580","PaP: 0.00000000<br />RD: 40.978765","PaP: 33.85277457<br />RD: 81.444429","PaP: 31.32063661<br />RD: 63.965636","PaP: 44.29710678<br />RD: 75.729162","PaP: 23.45847973<br />RD: 69.772956","PaP: 44.55614140<br />RD: 71.525538","PaP: 35.98676661<br />RD: 79.730654","PaP: 56.11739274<br />RD: 65.178007","PaP: 47.97197427<br />RD: 69.110536","PaP: 0.56632404<br />RD: 48.767879","PaP: 0.00000000<br />RD: 24.462592","PaP: 19.17375222<br />RD: 77.340547","PaP: 50.07277988<br />RD: 69.048987","PaP: 0.00000000<br />RD: 16.495017","PaP: 0.00000000<br />RD: 46.495915","PaP: 0.00000000<br />RD: 29.625042","PaP: 0.00000000<br />RD: 25.047461","PaP: 43.38221606<br />RD: 41.558472","PaP: 68.89370118<br />RD: 49.663477","PaP: 0.00000000<br />RD: 25.681725","PaP: 0.13548991<br />RD: 27.771806","PaP: 42.31659792<br />RD: 84.073034","PaP: 66.24989153<br />RD: 63.951400","PaP: 48.21987260<br />RD: 72.952862","PaP: 43.43319959<br />RD: 84.243562","PaP: 55.24700659<br />RD: 36.056305","PaP: 74.36964358<br />RD: 44.767675","PaP: 36.45660944<br />RD: 85.250355","PaP: 89.32918902<br />RD: 78.078903","PaP: 51.97967067<br />RD: 79.609220","PaP: 46.02896715<br />RD: 82.962754","PaP: 57.26973128<br />RD: 68.266912","PaP: 55.34167039<br />RD: 68.997665","PaP: 51.56039023<br />RD: 74.106571","PaP: 47.95179074<br />RD: 82.580010","PaP: 42.20089291<br />RD: 85.427549","PaP: 66.15282416<br />RD: 49.434804","PaP: 35.80549939<br />RD: 86.687063","PaP: 0.00000000<br />RD: 45.459996","PaP: 38.73829376<br />RD: 81.195943","PaP: 54.75097819<br />RD: 58.321945","PaP: 53.52022074<br />RD: 75.922448","PaP: 18.58313367<br />RD: 24.816616","PaP: 43.42511414<br />RD: 81.058237","PaP: 38.77455536<br />RD: 83.732304","PaP: 79.74591859<br />RD: 59.362694","PaP: 34.95420529<br />RD: 86.259218","PaP: 0.00000000<br />RD: 27.994191","PaP: 47.96823527<br />RD: 78.054191","PaP: 44.97123230<br />RD: 84.341388","PaP: 0.00000000<br />RD: 27.251751","PaP: 55.38999827<br />RD: 57.649900","PaP: 0.00000000<br />RD: 28.151984","PaP: 51.66958988<br />RD: 71.833354","PaP: 37.59183753<br />RD: 82.645343","PaP: 0.00000000<br />RD: 28.137429","PaP: 57.64698673<br />RD: 60.232528","PaP: 0.00000000<br />RD: 30.291608","PaP: 43.16997640<br />RD: 80.154561","PaP: 41.61072881<br />RD: 79.146836","PaP: 6.41664127<br />RD: 74.583801","PaP: 37.14304002<br />RD: 78.174255","PaP: 0.00000000<br />RD: 48.920789","PaP: 19.20773569<br />RD: 73.641025","PaP: 22.25732643<br />RD: 89.513686","PaP: 16.27391251<br />RD: 88.962323","PaP: 34.28996271<br />RD: 78.813341","PaP: 31.85624256<br />RD: 82.123978","PaP: 35.90982016<br />RD: 75.213728","PaP: 12.97148461<br />RD: 60.764985","PaP: 4.59471456<br />RD: 64.610817","PaP: 0.00000000<br />RD: 47.143329","PaP: 3.60254392<br />RD: 62.102044","PaP: 32.85200124<br />RD: 81.891320","PaP: 14.34003621<br />RD: 65.141654","PaP: 14.02546605<br />RD: 90.838080","PaP: 8.36166728<br />RD: 61.831808","PaP: 14.98746984<br />RD: 75.179832","PaP: 30.21434157<br />RD: 80.839391","PaP: 25.92992304<br />RD: 84.143912","PaP: 16.77480196<br />RD: 88.286314","PaP: 18.66125892<br />RD: 89.311082","PaP: 0.00000000<br />RD: 62.015133","PaP: 26.94791017<br />RD: 82.618475","PaP: 3.05079959<br />RD: 65.140668","PaP: 16.22513755<br />RD: 90.665663","PaP: 7.20789031<br />RD: 65.458979","PaP: 0.00000000<br />RD: 64.816459","PaP: 19.93088434<br />RD: 58.598786","PaP: 31.84999613<br />RD: 80.226500","PaP: 26.56451570<br />RD: 85.661896","PaP: 13.32459408<br />RD: 70.272408","PaP: 36.01136656<br />RD: 77.324053","PaP: 3.53311834<br />RD: 68.764113","PaP: 15.54473543<br />RD: 73.649190","PaP: 4.78937165<br />RD: 63.220867","PaP: 0.00000000<br />RD: 45.596722","PaP: 0.00000000<br />RD: 53.034591","PaP: 7.44955551<br />RD: 63.061401","PaP: 5.81056350<br />RD: 64.657541","PaP: 0.00000000<br />RD: 38.120984","PaP: 0.00000000<br />RD: 43.037460","PaP: 0.00000000<br />RD: 66.263294","PaP: 0.00000000<br />RD: 70.205807","PaP: 0.00000000<br />RD: 72.992102","PaP: 2.06625146<br />RD: 64.041707","PaP: 56.80811665<br />RD: 84.218258","PaP: 0.26336374<br />RD: 62.587323","PaP: 0.00000000<br />RD: 70.974221","PaP: 0.00000000<br />RD: 75.543319","PaP: 15.50440464<br />RD: 66.966197","PaP: 18.24423146<br />RD: 70.598185","PaP: 0.00000000<br />RD: 39.400134","PaP: 11.29347184<br />RD: 61.657742","PaP: 0.00000000<br />RD: 71.521387","PaP: 0.00000000<br />RD: 39.628656","PaP: 5.26147291<br />RD: 64.992588","PaP: 0.00000000<br />RD: 36.585006","PaP: 0.00000000<br />RD: 62.005115","PaP: 0.00000000<br />RD: 29.502596","PaP: 0.00000000<br />RD: 67.122735","PaP: 0.00000000<br />RD: 76.659069","PaP: 33.32450324<br />RD: 91.891940","PaP: 19.78883167<br />RD: 58.768063","PaP: 2.11602383<br />RD: 60.888940","PaP: 0.00000000<br />RD: 29.478859","PaP: 0.00000000<br />RD: 48.420163","PaP: 0.00000000<br />RD: 35.694347","PaP: 44.79993026<br />RD: 83.170517","PaP: 45.85181237<br />RD: 90.738766","PaP: 0.00000000<br />RD: 36.898346","PaP: 0.00000000<br />RD: 53.682606","PaP: 0.00000000<br />RD: 39.292897","PaP: 0.00000000<br />RD: 36.409996","PaP: 0.00000000<br />RD: 64.452372","PaP: 5.75007104<br />RD: 65.094061","PaP: 0.00000000<br />RD: 44.238174","PaP: 0.00000000<br />RD: 74.813718","PaP: 1.54998574<br />RD: 60.428832","PaP: 15.40692583<br />RD: 78.256514","PaP: 0.00000000<br />RD: 50.770891","PaP: 0.00000000<br />RD: 61.828624","PaP: 0.00000000<br />RD: 65.326796","PaP: 0.00000000<br />RD: 47.208455","PaP: 0.00000000<br />RD: 31.626768","PaP: 55.55699573<br />RD: 86.540519","PaP: 0.00000000<br />RD: 65.784205","PaP: 0.00000000<br />RD: 57.693095","PaP: 0.00000000<br />RD: 48.268967","PaP: 38.52753876<br />RD: 82.604110","PaP: 52.83523136<br />RD: 69.895540","PaP: 70.38972307<br />RD: 72.263936","PaP: 41.40422277<br />RD: 75.177785","PaP: 5.80146424<br />RD: 46.045056","PaP: 0.28998749<br />RD: 40.841113","PaP: 47.31592388<br />RD: 82.228080","PaP: 46.11011348<br />RD: 70.763843","PaP: 0.00000000<br />RD: 35.148439","PaP: 66.07157998<br />RD: 65.796314","PaP: 1.39897524<br />RD: 52.153856","PaP: 0.00000000<br />RD: 42.500151","PaP: 1.67300496<br />RD: 45.955484","PaP: 0.00000000<br />RD: 41.085879","PaP: 5.63260896<br />RD: 68.665142","PaP: 66.41474514<br />RD: 72.491870","PaP: 48.64939348<br />RD: 71.365450","PaP: 3.54432376<br />RD: 54.048749","PaP: 11.33413465<br />RD: 69.023344","PaP: 0.00000000<br />RD: 35.858239","PaP: 52.34294946<br />RD: 76.564391","PaP: 3.45199683<br />RD: 59.227918","PaP: 1.34306048<br />RD: 41.103113","PaP: 0.00000000<br />RD: 58.936923","PaP: 59.27058746<br />RD: 78.180595","PaP: 12.50455622<br />RD: 70.016539","PaP: 0.00000000<br />RD: 37.837286","PaP: 4.48828863<br />RD: 57.068747","PaP: 0.00000000<br />RD: 48.622120","PaP: 0.00000000<br />RD: 48.913360","PaP: 5.77649341<br />RD: 69.023826","PaP: 0.00000000<br />RD: 59.217942","PaP: 1.04061114<br />RD: 63.610413","PaP: 7.27133231<br />RD: 71.116695","PaP: 0.28233755<br />RD: 51.197078","PaP: 0.00000000<br />RD: 46.917397","PaP: 0.00000000<br />RD: 38.656802","PaP: 48.77805003<br />RD: 82.692592","PaP: 0.00000000<br />RD: 41.306173","PaP: 2.15735344<br />RD: 64.566711","PaP: 9.99699933<br />RD: 44.974817","PaP: 2.75849274<br />RD: 54.461114","PaP: 65.87993750<br />RD: 74.508666","PaP: 56.79476744<br />RD: 79.293523","PaP: 0.00000000<br />RD: 48.270634","PaP: 50.18404166<br />RD: 78.331800","PaP: 32.38314850<br />RD: 79.170950","PaP: 12.50017490<br />RD: 48.084786","PaP: 60.22414844<br />RD: 70.851439","PaP: 27.64319374<br />RD: 80.149949","PaP: 48.48988456<br />RD: 76.368008","PaP: 0.00000000<br />RD: 42.611593","PaP: 65.90090551<br />RD: 68.820679","PaP: 40.99145056<br />RD: 66.916222","PaP: 0.00000000<br />RD: 42.480103","PaP: 16.19790770<br />RD: 53.533135","PaP: 72.45626536<br />RD: 72.160058","PaP: 73.36197093<br />RD: 64.897482","PaP: 72.76517141<br />RD: 73.272683","PaP: 65.44744458<br />RD: 74.302104","PaP: 9.62611136<br />RD: 51.761218","PaP: 62.78605910<br />RD: 74.955986","PaP: 2.67388741<br />RD: 56.580579","PaP: 66.35431459<br />RD: 76.672253","PaP: 68.84916248<br />RD: 68.949073","PaP: 62.93430885<br />RD: 78.518559","PaP: 76.71270221<br />RD: 73.969426","PaP: 66.86999788<br />RD: 74.491900","PaP: 59.36909513<br />RD: 85.456599","PaP: 62.27905098<br />RD: 75.026740","PaP: 23.21262396<br />RD: 75.497263","PaP: 67.01714315<br />RD: 76.247207","PaP: 67.43500431<br />RD: 77.254096","PaP: 0.00000000<br />RD: 46.665357","PaP: 0.00000000<br />RD: 46.556918","PaP: 67.62880567<br />RD: 77.404912","PaP: 73.31161413<br />RD: 67.759495","PaP: 63.27961754<br />RD: 74.606220","PaP: 67.02016458<br />RD: 72.449143","PaP: 6.01735898<br />RD: 60.866038","PaP: 10.04029248<br />RD: 60.053137","PaP: 6.40207009<br />RD: 55.820128","PaP: 2.19559577<br />RD: 30.614327","PaP: 1.18544741<br />RD: 38.173785","PaP: 1.14115356<br />RD: 36.120236","PaP: 3.53811642<br />RD: 46.940584","PaP: 3.65647976<br />RD: 58.192338","PaP: 7.31064629<br />RD: 56.735810","PaP: 6.86668014<br />RD: 49.979574","PaP: 2.07519763<br />RD: 61.117570","PaP: 17.93924360<br />RD: 61.401144","PaP: 11.09608058<br />RD: 63.675430","PaP: 6.31941685<br />RD: 59.178677","PaP: 0.83251593<br />RD: 39.188126","PaP: 3.94998737<br />RD: 55.279859","PaP: 3.36391374<br />RD: 54.414233","PaP: 1.64348821<br />RD: 33.783725","PaP: 0.00000000<br />RD: 31.436807","PaP: 48.62299387<br />RD: 76.260392","PaP: 0.00000000<br />RD: 20.301525","PaP: 0.00000000<br />RD: 38.971331","PaP: 11.75949596<br />RD: 60.246310","PaP: 0.00000000<br />RD: 41.078467","PaP: 0.00000000<br />RD: 38.821889","PaP: 0.00000000<br />RD: 30.540631","PaP: 19.56618452<br />RD: 64.249852","PaP: 61.66395749<br />RD: 74.603962","PaP: 0.00000000<br />RD: 48.964568","PaP: 0.00000000<br />RD: 45.764184","PaP: 5.82167333<br />RD: 49.034731","PaP: 0.00000000<br />RD: 44.633459","PaP: 1.00323215<br />RD: 47.381161","PaP: 0.00000000<br />RD: 34.595512","PaP: 0.00000000<br />RD: 74.373171","PaP: 0.00000000<br />RD: 38.059230","PaP: 0.00000000<br />RD: 28.450136","PaP: 0.01351034<br />RD: 49.862328","PaP: 0.00000000<br />RD: 26.497586","PaP: 0.00000000<br />RD: 49.063575","PaP: 0.00000000<br />RD: 22.673528","PaP: 0.87175206<br />RD: 52.305605","PaP: 0.00000000<br />RD: 38.349346","PaP: 0.00000000<br />RD: 20.904516","PaP: 1.01141677<br />RD: 47.336214","PaP: 0.00000000<br />RD: 12.470182","PaP: 0.00000000<br />RD: 35.374068","PaP: 0.00000000<br />RD: 19.304962","PaP: 14.76375954<br />RD: 58.034514","PaP: 22.94733525<br />RD: 55.943364","PaP: 2.23745495<br />RD: 65.556917","PaP: 0.00000000<br />RD: 36.568268","PaP: 8.70579383<br />RD: 60.532335","PaP: 0.00000000<br />RD: 42.489969","PaP: 0.00000000<br />RD: 47.152614","PaP: 0.00000000<br />RD: 51.338613","PaP: 0.00000000<br />RD: 65.164934","PaP: 18.66890939<br />RD: 56.185156","PaP: 18.54220763<br />RD: 61.996081","PaP: 0.00000000<br />RD: 57.534066","PaP: 0.00000000<br />RD: 64.396016","PaP: 0.13396222<br />RD: 71.136162","PaP: 0.24329722<br />RD: 64.451056","PaP: 0.00000000<br />RD: 61.315759","PaP: 0.00000000<br />RD: 35.099248","PaP: 0.00000000<br />RD: 31.788539","PaP: 0.00000000<br />RD: 54.004488","PaP: 0.00000000<br />RD: 25.748033","PaP: 0.00000000<br />RD: 32.374254","PaP: 0.00000000<br />RD: 53.879208","PaP: 0.00000000<br />RD: 39.239653","PaP: 0.00000000<br />RD: 71.723577","PaP: 0.00000000<br />RD: 52.972522"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-5,105],"y":[65,65],"text":"yintercept: 65","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(255,0,0,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,1.13074922815397,2.26149845630794,3.39224768446191,4.52299691261589,5.65374614076986,6.78449536892383,7.9152445970778,9.04599382523177,10.1767430533857,11.3074922815397,12.4382415096937,13.5689907378477,14.6997399660016,15.8304891941556,16.9612384223096,18.0919876504635,19.2227368786175,20.3534861067715,21.4842353349255,22.6149845630794,23.7457337912334,24.8764830193874,26.0072322475413,27.1379814756953,28.2687307038493,29.3994799320033,30.5302291601572,31.6609783883112,32.7917276164652,33.9224768446192,35.0532260727731,36.1839753009271,37.3147245290811,38.445473757235,39.576222985389,40.706972213543,41.837721441697,42.9684706698509,44.0992198980049,45.2299691261589,46.3607183543128,47.4914675824668,48.6222168106208,49.7529660387748,50.8837152669287,52.0144644950827,53.1452137232367,54.2759629513906,55.4067121795446,56.5374614076986,57.6682106358526,58.7989598640065,59.9297090921605,61.0604583203145,62.1912075484684,63.3219567766224,64.4527060047764,65.5834552329304,66.7142044610843,67.8449536892383,68.9757029173923,70.1064521455462,71.2372013737002,72.3679506018542,73.4986998300082,74.6294490581621,75.7601982863161,76.8909475144701,78.021696742624,79.152445970778,80.283195198932,81.413944427086,82.5446936552399,83.6754428833939,84.8061921115479,85.9369413397018,87.0676905678558,88.1984397960098,89.3291890241638],"y":[49.8644133983152,50.3773347047147,50.8902560111142,51.4031773175137,51.9160986239133,52.4290199303128,52.9419412367123,53.4548625431119,53.9677838495114,54.4807051559109,54.9936264623104,55.50654776871,56.0194690751095,56.532390381509,57.0453116879085,57.558232994308,58.0711543007076,58.5840756071071,59.0969969135066,59.6099182199061,60.1228395263057,60.6357608327052,61.1486821391047,61.6616034455043,62.1745247519038,62.6874460583033,63.2003673647028,63.7132886711024,64.2262099775019,64.7391312839014,65.2520525903009,65.7649738967005,66.2778952031,66.7908165094995,67.303737815899,67.8166591222986,68.3295804286981,68.8425017350976,69.3554230414971,69.8683443478967,70.3812656542962,70.8941869606957,71.4071082670952,71.9200295734948,72.4329508798943,72.9458721862938,73.4587934926933,73.9717147990929,74.4846361054924,74.9975574118919,75.5104787182914,76.023400024691,76.5363213310905,77.04924263749,77.5621639438895,78.0750852502891,78.5880065566886,79.1009278630881,79.6138491694876,80.1267704758872,80.6396917822867,81.1526130886862,81.6655343950857,82.1784557014853,82.6913770078848,83.2042983142843,83.7172196206838,84.2301409270834,84.7430622334829,85.2559835398824,85.7689048462819,86.2818261526815,86.794747459081,87.3076687654805,87.82059007188,88.3335113782796,88.8464326846791,89.3593539910786,89.8722752974782,90.3851966038777],"text":["PaP: 0.000000<br />RD: 49.86441","PaP: 1.130749<br />RD: 50.37733","PaP: 2.261498<br />RD: 50.89026","PaP: 3.392248<br />RD: 51.40318","PaP: 4.522997<br />RD: 51.91610","PaP: 5.653746<br />RD: 52.42902","PaP: 6.784495<br />RD: 52.94194","PaP: 7.915245<br />RD: 53.45486","PaP: 9.045994<br />RD: 53.96778","PaP: 10.176743<br />RD: 54.48071","PaP: 11.307492<br />RD: 54.99363","PaP: 12.438242<br />RD: 55.50655","PaP: 13.568991<br />RD: 56.01947","PaP: 14.699740<br />RD: 56.53239","PaP: 15.830489<br />RD: 57.04531","PaP: 16.961238<br />RD: 57.55823","PaP: 18.091988<br />RD: 58.07115","PaP: 19.222737<br />RD: 58.58408","PaP: 20.353486<br />RD: 59.09700","PaP: 21.484235<br />RD: 59.60992","PaP: 22.614985<br />RD: 60.12284","PaP: 23.745734<br />RD: 60.63576","PaP: 24.876483<br />RD: 61.14868","PaP: 26.007232<br />RD: 61.66160","PaP: 27.137981<br />RD: 62.17452","PaP: 28.268731<br />RD: 62.68745","PaP: 29.399480<br />RD: 63.20037","PaP: 30.530229<br />RD: 63.71329","PaP: 31.660978<br />RD: 64.22621","PaP: 32.791728<br />RD: 64.73913","PaP: 33.922477<br />RD: 65.25205","PaP: 35.053226<br />RD: 65.76497","PaP: 36.183975<br />RD: 66.27790","PaP: 37.314725<br />RD: 66.79082","PaP: 38.445474<br />RD: 67.30374","PaP: 39.576223<br />RD: 67.81666","PaP: 40.706972<br />RD: 68.32958","PaP: 41.837721<br />RD: 68.84250","PaP: 42.968471<br />RD: 69.35542","PaP: 44.099220<br />RD: 69.86834","PaP: 45.229969<br />RD: 70.38127","PaP: 46.360718<br />RD: 70.89419","PaP: 47.491468<br />RD: 71.40711","PaP: 48.622217<br />RD: 71.92003","PaP: 49.752966<br />RD: 72.43295","PaP: 50.883715<br />RD: 72.94587","PaP: 52.014464<br />RD: 73.45879","PaP: 53.145214<br />RD: 73.97171","PaP: 54.275963<br />RD: 74.48464","PaP: 55.406712<br />RD: 74.99756","PaP: 56.537461<br />RD: 75.51048","PaP: 57.668211<br />RD: 76.02340","PaP: 58.798960<br />RD: 76.53632","PaP: 59.929709<br />RD: 77.04924","PaP: 61.060458<br />RD: 77.56216","PaP: 62.191208<br />RD: 78.07509","PaP: 63.321957<br />RD: 78.58801","PaP: 64.452706<br />RD: 79.10093","PaP: 65.583455<br />RD: 79.61385","PaP: 66.714204<br />RD: 80.12677","PaP: 67.844954<br />RD: 80.63969","PaP: 68.975703<br />RD: 81.15261","PaP: 70.106452<br />RD: 81.66553","PaP: 71.237201<br />RD: 82.17846","PaP: 72.367951<br />RD: 82.69138","PaP: 73.498700<br />RD: 83.20430","PaP: 74.629449<br />RD: 83.71722","PaP: 75.760198<br />RD: 84.23014","PaP: 76.890948<br />RD: 84.74306","PaP: 78.021697<br />RD: 85.25598","PaP: 79.152446<br />RD: 85.76890","PaP: 80.283195<br />RD: 86.28183","PaP: 81.413944<br />RD: 86.79475","PaP: 82.544694<br />RD: 87.30767","PaP: 83.675443<br />RD: 87.82059","PaP: 84.806192<br />RD: 88.33351","PaP: 85.936941<br />RD: 88.84643","PaP: 87.067691<br />RD: 89.35935","PaP: 88.198440<br />RD: 89.87228","PaP: 89.329189<br />RD: 90.38520"],"type":"scatter","mode":"lines","name":"fitted values","line":{"width":3.77952755905512,"color":"rgba(51,102,255,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,1.13074922815397,2.26149845630794,3.39224768446191,4.52299691261589,5.65374614076986,6.78449536892383,7.9152445970778,9.04599382523177,10.1767430533857,11.3074922815397,12.4382415096937,13.5689907378477,14.6997399660016,15.8304891941556,16.9612384223096,18.0919876504635,19.2227368786175,20.3534861067715,21.4842353349255,22.6149845630794,23.7457337912334,24.8764830193874,26.0072322475413,27.1379814756953,28.2687307038493,29.3994799320033,30.5302291601572,31.6609783883112,32.7917276164652,33.9224768446192,35.0532260727731,36.1839753009271,37.3147245290811,38.445473757235,39.576222985389,40.706972213543,41.837721441697,42.9684706698509,44.0992198980049,45.2299691261589,46.3607183543128,47.4914675824668,48.6222168106208,49.7529660387748,50.8837152669287,52.0144644950827,53.1452137232367,54.2759629513906,55.4067121795446,56.5374614076986,57.6682106358526,58.7989598640065,59.9297090921605,61.0604583203145,62.1912075484684,63.3219567766224,64.4527060047764,65.5834552329304,66.7142044610843,67.8449536892383,68.9757029173923,70.1064521455462,71.2372013737002,72.3679506018542,73.4986998300082,74.6294490581621,75.7601982863161,76.8909475144701,78.021696742624,79.152445970778,80.283195198932,81.413944427086,82.5446936552399,83.6754428833939,84.8061921115479,85.9369413397018,87.0676905678558,88.1984397960098,89.3291890241638,89.3291890241638,89.3291890241638,88.1984397960098,87.0676905678558,85.9369413397018,84.8061921115479,83.6754428833939,82.5446936552399,81.413944427086,80.283195198932,79.152445970778,78.021696742624,76.8909475144701,75.7601982863161,74.6294490581621,73.4986998300082,72.3679506018542,71.2372013737002,70.1064521455462,68.9757029173923,67.8449536892383,66.7142044610843,65.5834552329304,64.4527060047764,63.3219567766224,62.1912075484684,61.0604583203145,59.9297090921605,58.7989598640065,57.6682106358526,56.5374614076986,55.4067121795446,54.2759629513906,53.1452137232367,52.0144644950827,50.8837152669287,49.7529660387748,48.6222168106208,47.4914675824668,46.3607183543128,45.2299691261589,44.0992198980049,42.9684706698509,41.837721441697,40.706972213543,39.576222985389,38.445473757235,37.3147245290811,36.1839753009271,35.0532260727731,33.9224768446192,32.7917276164652,31.6609783883112,30.5302291601572,29.3994799320033,28.2687307038493,27.1379814756953,26.0072322475413,24.8764830193874,23.7457337912334,22.6149845630794,21.4842353349255,20.3534861067715,19.2227368786175,18.0919876504635,16.9612384223096,15.8304891941556,14.6997399660016,13.5689907378477,12.4382415096937,11.3074922815397,10.1767430533857,9.04599382523177,7.9152445970778,6.78449536892383,5.65374614076986,4.52299691261589,3.39224768446191,2.26149845630794,1.13074922815397,0,0],"y":[47.805030834101,48.3650350724402,48.9233701518214,49.4799178274573,50.0345537645304,50.5871480675548,51.1375660626034,51.6856693687429,52.2313172887339,52.7743685377916,53.3146833122476,53.8521256771255,54.3865662236592,54.9178849164833,55.4459740187176,55.9707409556635,56.4921109591244,57.0100293290045,57.5244631600404,58.0354024101588,58.5428602309762,59.0468725353831,59.5474968349516,60.044810433311,60.5389081038199,61.0298994062077,61.5179058057276,62.0030577509758,62.4854918463685,62.9653482269501,63.4427682115008,63.9178922789085,64.3908583853958,64.861800618137,65.3308481646364,65.7981245666963,66.263747222112,66.7278270953767,67.1904685995988,67.6517696146012,68.1118216099884,68.570709846245,69.0285136312483,69.4853066136582,69.9411570983381,70.3961283721781,70.8502790314316,71.3036633039425,71.7563313614969,72.2083296190048,72.6597010183837,73.1104852959114,73.5607192324957,74.0104368868119,74.4596698116277,74.9084472538873,75.356796339299,75.8047422422769,76.2523083421446,76.6995163665283,77.1463865228637,77.5929376189167,78.0391871731809,78.4851515159723,78.9308458819919,79.3762844950743,79.8214806457924,80.2664467625337,80.7111944766171,81.1557346819722,81.6000775898576,82.0442327790565,82.4882092419458,82.9320154268037,83.3756592766851,83.8191482651656,84.262489429229,84.7056893995443,85.1487544283608,85.5916904152257,85.5916904152257,95.1787027925296,94.5957961665955,94.013018582613,93.4303759401292,92.8478744913935,92.265520867075,91.6833221041573,91.1012856762162,90.5194195263065,89.9377321027063,89.3562323977927,88.7749299903487,88.193835091633,87.6129585955753,87.0323121334943,86.4519081337777,85.8717598869982,85.2918816169906,84.7122885584557,84.1329970417097,83.5540245852461,82.9753899968307,82.3971134838994,81.8192167740782,81.2417232466908,80.6646580761514,80.0880483881681,79.5119234296853,78.9363147534705,78.3612564181992,77.786785204779,77.2129408494879,76.6397662942432,76.0673079539551,75.4956160004095,74.9247446614505,74.3547525333313,73.7857029029421,73.2176640751464,72.650709698604,72.0849190811921,71.5203774833955,70.9571763748185,70.3954136352842,69.8351936779008,69.2766274671616,68.719832400862,68.1649320208042,67.6120555144924,67.0613369691011,66.5129143408527,65.9669281086352,65.4235195912289,64.882828923678,64.3449927103989,63.8101413999877,63.2783964576975,62.7498674432579,62.2246491300273,61.7028188216352,61.1844340296535,60.6695306669729,60.1581218852097,59.6501976422908,59.1457250329526,58.6446493570994,58.1468958465347,57.6523719265598,57.1609698602944,56.6725696123733,56.1870417740302,55.7042504102889,55.2240557174808,54.7463164108213,54.2708917930708,53.7976434832961,53.3264368075702,52.8571418704071,52.3896343369892,51.9237959625294,47.805030834101],"text":["PaP: 0.000000<br />RD: 49.86441","PaP: 1.130749<br />RD: 50.37733","PaP: 2.261498<br />RD: 50.89026","PaP: 3.392248<br />RD: 51.40318","PaP: 4.522997<br />RD: 51.91610","PaP: 5.653746<br />RD: 52.42902","PaP: 6.784495<br />RD: 52.94194","PaP: 7.915245<br />RD: 53.45486","PaP: 9.045994<br />RD: 53.96778","PaP: 10.176743<br />RD: 54.48071","PaP: 11.307492<br />RD: 54.99363","PaP: 12.438242<br />RD: 55.50655","PaP: 13.568991<br />RD: 56.01947","PaP: 14.699740<br />RD: 56.53239","PaP: 15.830489<br />RD: 57.04531","PaP: 16.961238<br />RD: 57.55823","PaP: 18.091988<br />RD: 58.07115","PaP: 19.222737<br />RD: 58.58408","PaP: 20.353486<br />RD: 59.09700","PaP: 21.484235<br />RD: 59.60992","PaP: 22.614985<br />RD: 60.12284","PaP: 23.745734<br />RD: 60.63576","PaP: 24.876483<br />RD: 61.14868","PaP: 26.007232<br />RD: 61.66160","PaP: 27.137981<br />RD: 62.17452","PaP: 28.268731<br />RD: 62.68745","PaP: 29.399480<br />RD: 63.20037","PaP: 30.530229<br />RD: 63.71329","PaP: 31.660978<br />RD: 64.22621","PaP: 32.791728<br />RD: 64.73913","PaP: 33.922477<br />RD: 65.25205","PaP: 35.053226<br />RD: 65.76497","PaP: 36.183975<br />RD: 66.27790","PaP: 37.314725<br />RD: 66.79082","PaP: 38.445474<br />RD: 67.30374","PaP: 39.576223<br />RD: 67.81666","PaP: 40.706972<br />RD: 68.32958","PaP: 41.837721<br />RD: 68.84250","PaP: 42.968471<br />RD: 69.35542","PaP: 44.099220<br />RD: 69.86834","PaP: 45.229969<br />RD: 70.38127","PaP: 46.360718<br />RD: 70.89419","PaP: 47.491468<br />RD: 71.40711","PaP: 48.622217<br />RD: 71.92003","PaP: 49.752966<br />RD: 72.43295","PaP: 50.883715<br />RD: 72.94587","PaP: 52.014464<br />RD: 73.45879","PaP: 53.145214<br />RD: 73.97171","PaP: 54.275963<br />RD: 74.48464","PaP: 55.406712<br />RD: 74.99756","PaP: 56.537461<br />RD: 75.51048","PaP: 57.668211<br />RD: 76.02340","PaP: 58.798960<br />RD: 76.53632","PaP: 59.929709<br />RD: 77.04924","PaP: 61.060458<br />RD: 77.56216","PaP: 62.191208<br />RD: 78.07509","PaP: 63.321957<br />RD: 78.58801","PaP: 64.452706<br />RD: 79.10093","PaP: 65.583455<br />RD: 79.61385","PaP: 66.714204<br />RD: 80.12677","PaP: 67.844954<br />RD: 80.63969","PaP: 68.975703<br />RD: 81.15261","PaP: 70.106452<br />RD: 81.66553","PaP: 71.237201<br />RD: 82.17846","PaP: 72.367951<br />RD: 82.69138","PaP: 73.498700<br />RD: 83.20430","PaP: 74.629449<br />RD: 83.71722","PaP: 75.760198<br />RD: 84.23014","PaP: 76.890948<br />RD: 84.74306","PaP: 78.021697<br />RD: 85.25598","PaP: 79.152446<br />RD: 85.76890","PaP: 80.283195<br />RD: 86.28183","PaP: 81.413944<br />RD: 86.79475","PaP: 82.544694<br />RD: 87.30767","PaP: 83.675443<br />RD: 87.82059","PaP: 84.806192<br />RD: 88.33351","PaP: 85.936941<br />RD: 88.84643","PaP: 87.067691<br />RD: 89.35935","PaP: 88.198440<br />RD: 89.87228","PaP: 89.329189<br />RD: 90.38520","PaP: 89.329189<br />RD: 90.38520","PaP: 89.329189<br />RD: 90.38520","PaP: 88.198440<br />RD: 89.87228","PaP: 87.067691<br />RD: 89.35935","PaP: 85.936941<br />RD: 88.84643","PaP: 84.806192<br />RD: 88.33351","PaP: 83.675443<br />RD: 87.82059","PaP: 82.544694<br />RD: 87.30767","PaP: 81.413944<br />RD: 86.79475","PaP: 80.283195<br />RD: 86.28183","PaP: 79.152446<br />RD: 85.76890","PaP: 78.021697<br />RD: 85.25598","PaP: 76.890948<br />RD: 84.74306","PaP: 75.760198<br />RD: 84.23014","PaP: 74.629449<br />RD: 83.71722","PaP: 73.498700<br />RD: 83.20430","PaP: 72.367951<br />RD: 82.69138","PaP: 71.237201<br />RD: 82.17846","PaP: 70.106452<br />RD: 81.66553","PaP: 68.975703<br />RD: 81.15261","PaP: 67.844954<br />RD: 80.63969","PaP: 66.714204<br />RD: 80.12677","PaP: 65.583455<br />RD: 79.61385","PaP: 64.452706<br />RD: 79.10093","PaP: 63.321957<br />RD: 78.58801","PaP: 62.191208<br />RD: 78.07509","PaP: 61.060458<br />RD: 77.56216","PaP: 59.929709<br />RD: 77.04924","PaP: 58.798960<br />RD: 76.53632","PaP: 57.668211<br />RD: 76.02340","PaP: 56.537461<br />RD: 75.51048","PaP: 55.406712<br />RD: 74.99756","PaP: 54.275963<br />RD: 74.48464","PaP: 53.145214<br />RD: 73.97171","PaP: 52.014464<br />RD: 73.45879","PaP: 50.883715<br />RD: 72.94587","PaP: 49.752966<br />RD: 72.43295","PaP: 48.622217<br />RD: 71.92003","PaP: 47.491468<br />RD: 71.40711","PaP: 46.360718<br />RD: 70.89419","PaP: 45.229969<br />RD: 70.38127","PaP: 44.099220<br />RD: 69.86834","PaP: 42.968471<br />RD: 69.35542","PaP: 41.837721<br />RD: 68.84250","PaP: 40.706972<br />RD: 68.32958","PaP: 39.576223<br />RD: 67.81666","PaP: 38.445474<br />RD: 67.30374","PaP: 37.314725<br />RD: 66.79082","PaP: 36.183975<br />RD: 66.27790","PaP: 35.053226<br />RD: 65.76497","PaP: 33.922477<br />RD: 65.25205","PaP: 32.791728<br />RD: 64.73913","PaP: 31.660978<br />RD: 64.22621","PaP: 30.530229<br />RD: 63.71329","PaP: 29.399480<br />RD: 63.20037","PaP: 28.268731<br />RD: 62.68745","PaP: 27.137981<br />RD: 62.17452","PaP: 26.007232<br />RD: 61.66160","PaP: 24.876483<br />RD: 61.14868","PaP: 23.745734<br />RD: 60.63576","PaP: 22.614985<br />RD: 60.12284","PaP: 21.484235<br />RD: 59.60992","PaP: 20.353486<br />RD: 59.09700","PaP: 19.222737<br />RD: 58.58408","PaP: 18.091988<br />RD: 58.07115","PaP: 16.961238<br />RD: 57.55823","PaP: 15.830489<br />RD: 57.04531","PaP: 14.699740<br />RD: 56.53239","PaP: 13.568991<br />RD: 56.01947","PaP: 12.438242<br />RD: 55.50655","PaP: 11.307492<br />RD: 54.99363","PaP: 10.176743<br />RD: 54.48071","PaP: 9.045994<br />RD: 53.96778","PaP: 7.915245<br />RD: 53.45486","PaP: 6.784495<br />RD: 52.94194","PaP: 5.653746<br />RD: 52.42902","PaP: 4.522997<br />RD: 51.91610","PaP: 3.392248<br />RD: 51.40318","PaP: 2.261498<br />RD: 50.89026","PaP: 1.130749<br />RD: 50.37733","PaP: 0.000000<br />RD: 49.86441","PaP: 0.000000<br />RD: 49.86441"],"type":"scatter","mode":"lines","line":{"width":3.77952755905512,"color":"transparent","dash":"solid"},"fill":"toself","fillcolor":"rgba(153,153,153,0.4)","hoveron":"points","hoverinfo":"x+y","showlegend":false,"xaxis":"x","yaxis":"y","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":43.1050228310502},"plot_bgcolor":"rgba(235,235,235,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"Differenziata","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Porta-a-Porta (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Raccolta Differenziata (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"6a67345013fe":{"x":{},"y":{},"type":"scatter"},"6a6770380051":{"yintercept":{}},"6a671f0ced9a":{"x":{},"y":{}}},"cur_data":"6a67345013fe","visdat":{"6a67345013fe":["function (y) ","x"],"6a6770380051":["function (y) ","x"],"6a671f0ced9a":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1}},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":{"render":[{"code":"function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1}}); }","data":null}]}}</script>
</div>
<div id="ecomobile-chiamata" class="section level3">
<h3>Ecomobile, Chiamata</h3>
<p>Gli altri tipi di raccolta non presentano correlazioni significative né con la quantità di differenziata, che con quella di indifferenziata.</p>
<div id="6a6743b58850" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="6a6743b58850">{"x":{"data":[{"x":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00448484358793419,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.00309244590060792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0106741519615236,0,0,0,0,0.141709398342383,0,1.03392356801986,0.0641051613257724,0,0,0,0,0,0.0265204494840237,0,0,0,0,8.50165661182588,0.0964082323488266,0,0,0.967787240018896,0,9.68805709176031,0.163308144703316,0.16984526417053,0,0,0.2754907396752,0,0.901785667268735,0.16180454011554,0.300114076510851,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"y":[71.2970226386683,69.6393779082686,72.447393732588,37.7840072172326,44.3327235286547,61.7349260552571,69.8748771154364,78.2284565297122,31.5942220170173,73.4182248726499,65.3808646310829,66.9866852091537,76.9951761167207,66.7556129782873,25.0832540437678,30.4794703877518,5.9124793717635,73.3958549144279,30.1114742405012,26.3576779026217,70.1592120640027,80.2305698931583,66.3367926813739,72.4195888400641,31.9217721922455,61.2170223386996,75.5096037273873,30.8046590148839,55.1708009076147,33.4010631156909,31.4360006750156,56.8823093351451,62.5795798574502,40.9787647163387,81.4444286016738,63.9656361777336,75.7291621992605,69.7729564774134,71.5255376912349,79.7306535314381,65.1780074065917,69.1105364915512,48.7678791779575,24.4625920232074,77.3405471902207,69.0489872305412,16.4950166112957,46.4959148099397,29.625041817738,25.047460833546,41.5584721062001,49.6634772969171,25.6817254728913,27.771806000453,84.0730336868367,63.9514003816487,72.9528617613803,84.2435619612613,36.0563049374077,44.7676747174202,85.2503548009312,78.0789025250874,79.609219902402,82.9627542540562,68.2669124335532,68.9976647743786,74.1065713160845,82.5800099912178,85.4275486788848,49.434803578091,86.6870630478904,45.4599964539652,81.195942733609,58.3219452105267,75.9224476396055,24.8166162357478,81.0582373860075,83.7323043747614,59.3626939091715,86.25921803155,27.9941910308028,78.054191270947,84.3413878912848,27.2517506621352,57.6498995569864,28.1519838256997,71.833353957599,82.6453433261538,28.1374286127102,60.2325275075139,30.2916079981576,80.1545610091999,79.1468364861543,74.5838010346531,78.1742546783719,48.9207890601178,73.6410253702022,89.5136864240833,88.9623232710954,78.8133413759405,82.1239776446157,75.2137276146875,60.764984664731,64.6108170376423,47.1433285890289,62.1020440718397,81.8913201520635,65.1416544460057,90.8380798923109,61.8318084807174,75.1798321882988,80.8393912647028,84.1439122691654,88.2863140643727,89.3110819737658,62.0151326025942,82.6184745877752,65.1406677293075,90.6656628995719,65.4589787400237,64.8164591787296,58.5987859786764,80.2264995339455,85.6618957241262,70.2724084186079,77.3240525856251,68.7641125497426,73.6491899830405,63.220867148381,45.5967219070508,53.0345908339456,63.0614006223997,64.6575412380044,38.1209838721112,43.0374603203349,66.2632938316621,70.2058065458126,72.9921016626183,64.0417069153719,84.2182584252675,62.5873231089225,70.974221157038,75.54331947361,66.9661973734178,70.5981849125126,39.400134406347,61.6577419421021,71.5213872080242,39.6286555381687,64.9925877912217,36.5850062614002,62.005114832806,29.5025964173728,67.1227351053144,76.6590688731193,91.89194008105,58.7680634637104,60.888939909877,29.4788585241093,48.4201633121913,35.6943473351499,83.1705172786389,90.7387659775173,36.8983460593027,53.6826059861271,39.29289690321,36.4099959505556,64.4523715801611,65.0940610558999,44.2381742910085,74.8137179492323,60.4288323572349,78.2565143082449,50.7708910085322,61.8286244092865,65.3267962146818,47.2084545626007,31.6267677314762,86.5405189371885,65.7842048286155,57.6930948488837,48.2689670073449,82.6041103875062,69.8955402655396,72.2639360324452,75.1777851816942,46.0450564103896,40.8411125479861,82.228080059778,70.7638426803134,35.1484393448461,65.7963137587526,52.1538557252621,42.5001514356096,45.9554837450287,41.08587857357,68.6651423140192,72.4918699215318,71.3654500727137,54.0487486972311,69.0233444850394,35.8582394154398,76.5643911865848,59.2279177686935,41.103113056386,58.9369231478994,78.1805953589589,70.0165385953769,37.8372863928711,57.068747064064,48.6221202997913,48.9133602013207,69.0238260550333,59.2179416194522,63.6104128687307,71.1166947950848,51.1970783972594,46.9173965784919,38.6568017599227,82.6925915460883,41.3061730870448,64.5667106276104,44.9748171164335,54.4611142715667,74.5086658064021,79.2935232178682,48.2706343551228,78.3317999957209,79.1709504031128,48.0847860275092,70.8514391975119,80.1499489918387,76.368007536862,42.611592527704,68.8206794025765,66.9162217207634,42.480103117068,53.5331346250744,72.160057904955,64.89748194485,73.2726826821342,74.3021036573389,51.7612184800098,74.9559863294236,56.5805792751514,76.6722532280968,68.9490730635724,78.5185590461937,73.969426249204,74.4919003697594,85.4565989499987,75.0267398157451,75.4972629508366,76.2472065212406,77.254095881332,46.6653572588569,46.556917845414,77.404912408941,67.7594954843655,74.6062204030746,72.4491426902684,60.8660376831657,60.0531369770431,55.8201281385889,30.6143266941771,38.1737850885236,36.1202356973418,46.940584352687,58.192338325086,56.7358103220782,49.9795743058779,61.1175704031476,61.401143945014,63.6754295089837,59.1786774605823,39.1881262268423,55.2798594687934,54.4142332921948,33.7837250450966,31.4368074568689,76.2603918569731,20.3015250572536,38.9713313948229,60.2463098695146,41.0784668103158,38.8218894020647,30.5406307166607,64.2498517083856,74.6039615001067,48.964567900744,45.7641836621078,49.034730944845,44.633458882218,47.3811611435013,34.5955124045605,74.373171408037,38.0592304741161,28.450135975384,49.8623278496933,26.4975860543617,49.063574699127,22.6735275094977,52.3056048288467,38.3493459549383,20.9045163045184,47.3362136592168,12.4701818315859,35.3740681257041,19.304962328222,58.0345140617901,55.9433640340697,65.5569170262413,36.5682680164603,60.5323352097714,42.489969180671,47.1526137523652,51.338613451657,65.1649342333877,56.1851555184757,61.9960805393575,57.5340662866335,64.396016217518,71.1361620833879,64.4510559084789,61.315758785559,35.0992476086052,31.7885385944091,54.0044878132518,25.7480327300779,32.3742537913712,53.8792075389354,39.2396532136102,71.7235766406637,52.9725217790422],"text":["Eco: 0.000000000<br />RD: 71.297023","Eco: 0.000000000<br />RD: 69.639378","Eco: 0.000000000<br />RD: 72.447394","Eco: 0.000000000<br />RD: 37.784007","Eco: 0.000000000<br />RD: 44.332724","Eco: 0.000000000<br />RD: 61.734926","Eco: 0.000000000<br />RD: 69.874877","Eco: 0.000000000<br />RD: 78.228457","Eco: 0.000000000<br />RD: 31.594222","Eco: 0.000000000<br />RD: 73.418225","Eco: 0.000000000<br />RD: 65.380865","Eco: 0.000000000<br />RD: 66.986685","Eco: 0.000000000<br />RD: 76.995176","Eco: 0.000000000<br />RD: 66.755613","Eco: 0.000000000<br />RD: 25.083254","Eco: 0.000000000<br />RD: 30.479470","Eco: 0.000000000<br />RD: 5.912479","Eco: 0.000000000<br />RD: 73.395855","Eco: 0.000000000<br />RD: 30.111474","Eco: 0.000000000<br />RD: 26.357678","Eco: 0.000000000<br />RD: 70.159212","Eco: 0.000000000<br />RD: 80.230570","Eco: 0.000000000<br />RD: 66.336793","Eco: 0.000000000<br />RD: 72.419589","Eco: 0.000000000<br />RD: 31.921772","Eco: 0.000000000<br />RD: 61.217022","Eco: 0.000000000<br />RD: 75.509604","Eco: 0.000000000<br />RD: 30.804659","Eco: 0.000000000<br />RD: 55.170801","Eco: 0.000000000<br />RD: 33.401063","Eco: 0.000000000<br />RD: 31.436001","Eco: 0.000000000<br />RD: 56.882309","Eco: 0.000000000<br />RD: 62.579580","Eco: 0.000000000<br />RD: 40.978765","Eco: 0.000000000<br />RD: 81.444429","Eco: 0.000000000<br />RD: 63.965636","Eco: 0.000000000<br />RD: 75.729162","Eco: 0.000000000<br />RD: 69.772956","Eco: 0.000000000<br />RD: 71.525538","Eco: 0.000000000<br />RD: 79.730654","Eco: 0.000000000<br />RD: 65.178007","Eco: 0.000000000<br />RD: 69.110536","Eco: 0.000000000<br />RD: 48.767879","Eco: 0.000000000<br />RD: 24.462592","Eco: 0.000000000<br />RD: 77.340547","Eco: 0.000000000<br />RD: 69.048987","Eco: 0.000000000<br />RD: 16.495017","Eco: 0.000000000<br />RD: 46.495915","Eco: 0.000000000<br />RD: 29.625042","Eco: 0.000000000<br />RD: 25.047461","Eco: 0.000000000<br />RD: 41.558472","Eco: 0.000000000<br />RD: 49.663477","Eco: 0.000000000<br />RD: 25.681725","Eco: 0.000000000<br />RD: 27.771806","Eco: 0.000000000<br />RD: 84.073034","Eco: 0.000000000<br />RD: 63.951400","Eco: 0.000000000<br />RD: 72.952862","Eco: 0.000000000<br />RD: 84.243562","Eco: 0.000000000<br />RD: 36.056305","Eco: 0.000000000<br />RD: 44.767675","Eco: 0.000000000<br />RD: 85.250355","Eco: 0.000000000<br />RD: 78.078903","Eco: 0.000000000<br />RD: 79.609220","Eco: 0.000000000<br />RD: 82.962754","Eco: 0.000000000<br />RD: 68.266912","Eco: 0.000000000<br />RD: 68.997665","Eco: 0.000000000<br />RD: 74.106571","Eco: 0.000000000<br />RD: 82.580010","Eco: 0.000000000<br />RD: 85.427549","Eco: 0.000000000<br />RD: 49.434804","Eco: 0.000000000<br />RD: 86.687063","Eco: 0.000000000<br />RD: 45.459996","Eco: 0.000000000<br />RD: 81.195943","Eco: 0.000000000<br />RD: 58.321945","Eco: 0.000000000<br />RD: 75.922448","Eco: 0.000000000<br />RD: 24.816616","Eco: 0.000000000<br />RD: 81.058237","Eco: 0.000000000<br />RD: 83.732304","Eco: 0.000000000<br />RD: 59.362694","Eco: 0.000000000<br />RD: 86.259218","Eco: 0.000000000<br />RD: 27.994191","Eco: 0.000000000<br />RD: 78.054191","Eco: 0.000000000<br />RD: 84.341388","Eco: 0.000000000<br />RD: 27.251751","Eco: 0.000000000<br />RD: 57.649900","Eco: 0.000000000<br />RD: 28.151984","Eco: 0.000000000<br />RD: 71.833354","Eco: 0.000000000<br />RD: 82.645343","Eco: 0.000000000<br />RD: 28.137429","Eco: 0.000000000<br />RD: 60.232528","Eco: 0.000000000<br />RD: 30.291608","Eco: 0.000000000<br />RD: 80.154561","Eco: 0.000000000<br />RD: 79.146836","Eco: 0.000000000<br />RD: 74.583801","Eco: 0.000000000<br />RD: 78.174255","Eco: 0.000000000<br />RD: 48.920789","Eco: 0.000000000<br />RD: 73.641025","Eco: 0.000000000<br />RD: 89.513686","Eco: 0.000000000<br />RD: 88.962323","Eco: 0.000000000<br />RD: 78.813341","Eco: 0.000000000<br />RD: 82.123978","Eco: 0.000000000<br />RD: 75.213728","Eco: 0.000000000<br />RD: 60.764985","Eco: 0.000000000<br />RD: 64.610817","Eco: 0.000000000<br />RD: 47.143329","Eco: 0.000000000<br />RD: 62.102044","Eco: 0.000000000<br />RD: 81.891320","Eco: 0.000000000<br />RD: 65.141654","Eco: 0.000000000<br />RD: 90.838080","Eco: 0.000000000<br />RD: 61.831808","Eco: 0.000000000<br />RD: 75.179832","Eco: 0.000000000<br />RD: 80.839391","Eco: 0.000000000<br />RD: 84.143912","Eco: 0.000000000<br />RD: 88.286314","Eco: 0.000000000<br />RD: 89.311082","Eco: 0.000000000<br />RD: 62.015133","Eco: 0.000000000<br />RD: 82.618475","Eco: 0.000000000<br />RD: 65.140668","Eco: 0.000000000<br />RD: 90.665663","Eco: 0.000000000<br />RD: 65.458979","Eco: 0.000000000<br />RD: 64.816459","Eco: 0.000000000<br />RD: 58.598786","Eco: 0.000000000<br />RD: 80.226500","Eco: 0.000000000<br />RD: 85.661896","Eco: 0.000000000<br />RD: 70.272408","Eco: 0.000000000<br />RD: 77.324053","Eco: 0.000000000<br />RD: 68.764113","Eco: 0.000000000<br />RD: 73.649190","Eco: 0.000000000<br />RD: 63.220867","Eco: 0.000000000<br />RD: 45.596722","Eco: 0.000000000<br />RD: 53.034591","Eco: 0.000000000<br />RD: 63.061401","Eco: 0.000000000<br />RD: 64.657541","Eco: 0.000000000<br />RD: 38.120984","Eco: 0.000000000<br />RD: 43.037460","Eco: 0.000000000<br />RD: 66.263294","Eco: 0.000000000<br />RD: 70.205807","Eco: 0.000000000<br />RD: 72.992102","Eco: 0.000000000<br />RD: 64.041707","Eco: 0.000000000<br />RD: 84.218258","Eco: 0.000000000<br />RD: 62.587323","Eco: 0.000000000<br />RD: 70.974221","Eco: 0.000000000<br />RD: 75.543319","Eco: 0.000000000<br />RD: 66.966197","Eco: 0.000000000<br />RD: 70.598185","Eco: 0.000000000<br />RD: 39.400134","Eco: 0.000000000<br />RD: 61.657742","Eco: 0.000000000<br />RD: 71.521387","Eco: 0.000000000<br />RD: 39.628656","Eco: 0.000000000<br />RD: 64.992588","Eco: 0.000000000<br />RD: 36.585006","Eco: 0.000000000<br />RD: 62.005115","Eco: 0.000000000<br />RD: 29.502596","Eco: 0.000000000<br />RD: 67.122735","Eco: 0.000000000<br />RD: 76.659069","Eco: 0.000000000<br />RD: 91.891940","Eco: 0.000000000<br />RD: 58.768063","Eco: 0.000000000<br />RD: 60.888940","Eco: 0.000000000<br />RD: 29.478859","Eco: 0.000000000<br />RD: 48.420163","Eco: 0.000000000<br />RD: 35.694347","Eco: 0.000000000<br />RD: 83.170517","Eco: 0.000000000<br />RD: 90.738766","Eco: 0.000000000<br />RD: 36.898346","Eco: 0.000000000<br />RD: 53.682606","Eco: 0.000000000<br />RD: 39.292897","Eco: 0.000000000<br />RD: 36.409996","Eco: 0.000000000<br />RD: 64.452372","Eco: 0.000000000<br />RD: 65.094061","Eco: 0.000000000<br />RD: 44.238174","Eco: 0.000000000<br />RD: 74.813718","Eco: 0.000000000<br />RD: 60.428832","Eco: 0.000000000<br />RD: 78.256514","Eco: 0.000000000<br />RD: 50.770891","Eco: 0.000000000<br />RD: 61.828624","Eco: 0.000000000<br />RD: 65.326796","Eco: 0.000000000<br />RD: 47.208455","Eco: 0.000000000<br />RD: 31.626768","Eco: 0.000000000<br />RD: 86.540519","Eco: 0.000000000<br />RD: 65.784205","Eco: 0.000000000<br />RD: 57.693095","Eco: 0.000000000<br />RD: 48.268967","Eco: 0.000000000<br />RD: 82.604110","Eco: 0.000000000<br />RD: 69.895540","Eco: 0.000000000<br />RD: 72.263936","Eco: 0.000000000<br />RD: 75.177785","Eco: 0.004484844<br />RD: 46.045056","Eco: 0.000000000<br />RD: 40.841113","Eco: 0.000000000<br />RD: 82.228080","Eco: 0.000000000<br />RD: 70.763843","Eco: 0.000000000<br />RD: 35.148439","Eco: 0.000000000<br />RD: 65.796314","Eco: 0.000000000<br />RD: 52.153856","Eco: 0.000000000<br />RD: 42.500151","Eco: 0.000000000<br />RD: 45.955484","Eco: 0.000000000<br />RD: 41.085879","Eco: 0.000000000<br />RD: 68.665142","Eco: 0.000000000<br />RD: 72.491870","Eco: 0.000000000<br />RD: 71.365450","Eco: 0.000000000<br />RD: 54.048749","Eco: 0.000000000<br />RD: 69.023344","Eco: 0.000000000<br />RD: 35.858239","Eco: 0.000000000<br />RD: 76.564391","Eco: 0.000000000<br />RD: 59.227918","Eco: 0.000000000<br />RD: 41.103113","Eco: 0.000000000<br />RD: 58.936923","Eco: 0.000000000<br />RD: 78.180595","Eco: 0.000000000<br />RD: 70.016539","Eco: 0.000000000<br />RD: 37.837286","Eco: 0.000000000<br />RD: 57.068747","Eco: 0.000000000<br />RD: 48.622120","Eco: 0.000000000<br />RD: 48.913360","Eco: 0.000000000<br />RD: 69.023826","Eco: 0.000000000<br />RD: 59.217942","Eco: 0.000000000<br />RD: 63.610413","Eco: 0.000000000<br />RD: 71.116695","Eco: 0.000000000<br />RD: 51.197078","Eco: 0.000000000<br />RD: 46.917397","Eco: 0.000000000<br />RD: 38.656802","Eco: 0.000000000<br />RD: 82.692592","Eco: 0.000000000<br />RD: 41.306173","Eco: 0.000000000<br />RD: 64.566711","Eco: 0.000000000<br />RD: 44.974817","Eco: 0.000000000<br />RD: 54.461114","Eco: 0.000000000<br />RD: 74.508666","Eco: 0.000000000<br />RD: 79.293523","Eco: 0.000000000<br />RD: 48.270634","Eco: 0.000000000<br />RD: 78.331800","Eco: 0.000000000<br />RD: 79.170950","Eco: 0.000000000<br />RD: 48.084786","Eco: 0.000000000<br />RD: 70.851439","Eco: 0.000000000<br />RD: 80.149949","Eco: 0.000000000<br />RD: 76.368008","Eco: 0.000000000<br />RD: 42.611593","Eco: 0.000000000<br />RD: 68.820679","Eco: 0.000000000<br />RD: 66.916222","Eco: 0.000000000<br />RD: 42.480103","Eco: 0.000000000<br />RD: 53.533135","Eco: 0.000000000<br />RD: 72.160058","Eco: 0.000000000<br />RD: 64.897482","Eco: 0.000000000<br />RD: 73.272683","Eco: 0.000000000<br />RD: 74.302104","Eco: 0.000000000<br />RD: 51.761218","Eco: 0.000000000<br />RD: 74.955986","Eco: 0.003092446<br />RD: 56.580579","Eco: 0.000000000<br />RD: 76.672253","Eco: 0.000000000<br />RD: 68.949073","Eco: 0.000000000<br />RD: 78.518559","Eco: 0.000000000<br />RD: 73.969426","Eco: 0.000000000<br />RD: 74.491900","Eco: 0.000000000<br />RD: 85.456599","Eco: 0.000000000<br />RD: 75.026740","Eco: 0.000000000<br />RD: 75.497263","Eco: 0.000000000<br />RD: 76.247207","Eco: 0.000000000<br />RD: 77.254096","Eco: 0.000000000<br />RD: 46.665357","Eco: 0.000000000<br />RD: 46.556918","Eco: 0.000000000<br />RD: 77.404912","Eco: 0.000000000<br />RD: 67.759495","Eco: 0.000000000<br />RD: 74.606220","Eco: 0.000000000<br />RD: 72.449143","Eco: 0.000000000<br />RD: 60.866038","Eco: 0.000000000<br />RD: 60.053137","Eco: 0.000000000<br />RD: 55.820128","Eco: 0.000000000<br />RD: 30.614327","Eco: 0.000000000<br />RD: 38.173785","Eco: 0.000000000<br />RD: 36.120236","Eco: 0.000000000<br />RD: 46.940584","Eco: 0.000000000<br />RD: 58.192338","Eco: 0.000000000<br />RD: 56.735810","Eco: 0.000000000<br />RD: 49.979574","Eco: 0.000000000<br />RD: 61.117570","Eco: 0.000000000<br />RD: 61.401144","Eco: 0.000000000<br />RD: 63.675430","Eco: 0.010674152<br />RD: 59.178677","Eco: 0.000000000<br />RD: 39.188126","Eco: 0.000000000<br />RD: 55.279859","Eco: 0.000000000<br />RD: 54.414233","Eco: 0.000000000<br />RD: 33.783725","Eco: 0.141709398<br />RD: 31.436807","Eco: 0.000000000<br />RD: 76.260392","Eco: 1.033923568<br />RD: 20.301525","Eco: 0.064105161<br />RD: 38.971331","Eco: 0.000000000<br />RD: 60.246310","Eco: 0.000000000<br />RD: 41.078467","Eco: 0.000000000<br />RD: 38.821889","Eco: 0.000000000<br />RD: 30.540631","Eco: 0.000000000<br />RD: 64.249852","Eco: 0.026520449<br />RD: 74.603962","Eco: 0.000000000<br />RD: 48.964568","Eco: 0.000000000<br />RD: 45.764184","Eco: 0.000000000<br />RD: 49.034731","Eco: 0.000000000<br />RD: 44.633459","Eco: 8.501656612<br />RD: 47.381161","Eco: 0.096408232<br />RD: 34.595512","Eco: 0.000000000<br />RD: 74.373171","Eco: 0.000000000<br />RD: 38.059230","Eco: 0.967787240<br />RD: 28.450136","Eco: 0.000000000<br />RD: 49.862328","Eco: 9.688057092<br />RD: 26.497586","Eco: 0.163308145<br />RD: 49.063575","Eco: 0.169845264<br />RD: 22.673528","Eco: 0.000000000<br />RD: 52.305605","Eco: 0.000000000<br />RD: 38.349346","Eco: 0.275490740<br />RD: 20.904516","Eco: 0.000000000<br />RD: 47.336214","Eco: 0.901785667<br />RD: 12.470182","Eco: 0.161804540<br />RD: 35.374068","Eco: 0.300114077<br />RD: 19.304962","Eco: 0.000000000<br />RD: 58.034514","Eco: 0.000000000<br />RD: 55.943364","Eco: 0.000000000<br />RD: 65.556917","Eco: 0.000000000<br />RD: 36.568268","Eco: 0.000000000<br />RD: 60.532335","Eco: 0.000000000<br />RD: 42.489969","Eco: 0.000000000<br />RD: 47.152614","Eco: 0.000000000<br />RD: 51.338613","Eco: 0.000000000<br />RD: 65.164934","Eco: 0.000000000<br />RD: 56.185156","Eco: 0.000000000<br />RD: 61.996081","Eco: 0.000000000<br />RD: 57.534066","Eco: 0.000000000<br />RD: 64.396016","Eco: 0.000000000<br />RD: 71.136162","Eco: 0.000000000<br />RD: 64.451056","Eco: 0.000000000<br />RD: 61.315759","Eco: 0.000000000<br />RD: 35.099248","Eco: 0.000000000<br />RD: 31.788539","Eco: 0.000000000<br />RD: 54.004488","Eco: 0.000000000<br />RD: 25.748033","Eco: 0.000000000<br />RD: 32.374254","Eco: 0.000000000<br />RD: 53.879208","Eco: 0.000000000<br />RD: 39.239653","Eco: 0.000000000<br />RD: 71.723577","Eco: 0.000000000<br />RD: 52.972522"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-5,105],"y":[65,65],"text":"yintercept: 65","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(255,0,0,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":43.1050228310502},"plot_bgcolor":"rgba(235,235,235,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"Differenziata","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Ecomobile (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Raccolta Differenziata (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"6a672cad57c2":{"x":{},"y":{},"type":"scatter"},"6a67157188b0":{"yintercept":{}}},"cur_data":"6a672cad57c2","visdat":{"6a672cad57c2":["function (y) ","x"],"6a67157188b0":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1}},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":{"render":[{"code":"function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1}}); }","data":null}]}}</script>
<div id="6a672c0d8177" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="6a672c0d8177">{"x":{"data":[{"x":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.375312387257497,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.174936562478133,0,0,1.00421444169315,1.2234333213205,0.0975516697373477,0.00570599382353084,4.04683225139732,0,0.00966237205066372,0,0.446312196947909,0.024788286505738,3.5575356497537,0.0390776144214639,0.0057012705281372,0.0121862871977287,0.0165465175338537,0.00909992629059705,1.76928552430491,0,0.00914970532566672,0,6.18213003049211,2.38679747397267,0.0111498421417086,0.124915143647706,1.82944713990623,0.0077577194141641,0,0.00451321974137862,0.0225142797066994,0,0.00133037104048319,4.71102087474301,0.0310969466453953,0.0105354776746234,0,8.33801154185065,4.3713505272149,0.0079383140079489,0.00395760786350298,0,0.0294129492848893,0,0.00554511079659477,0,0,0.0003339953120418,0,0,0,0.00429601515533064,0,0,0.0175977007393133,0,0.0122110550475741,0,0.00658686410845822,0,0.02431825059212,0,0,0,0,0,0,0.101574264690991,0,0.00800881478905275,0,0.0287092866428796,0.00035797053616111,0.0160338580788079,0,0,0.00429568595926406,0,0,0,0,0,0,0.0891066545123063,0.0124507282066548,0.175302449125954,0.210182641091904,0.0532404967344045,0.288341595963251,0,0.003584223940574,0.0786614923190674,0.0645233590894932,0.0720601702421522,0.112959885471734,0.163383556050628,0.00853285769533019,0.391358730040137,0.286774826024771,0,0.0725271036962883,0.246990080337042,4.60622297492728,0.0437344146796843,0.0298081406998152,0.740873529581543,0,0.0117613004861991,0,0.124309934971808,0.098141271754977,0.13166130250853,0.8131499130817,0.0431484795332871,0,0.167882892430467,0.0807502448697868,0.194712901796272,0.361955152585952,0.0461749343818154,0.0611022559048852,0.0882994572879746,0.415852290911277,0.00107823972885423,1.14075581101736,0.0205676394245997,0.0649351372249779,0.0505409612391183,0.00763897930715723,0.249956722564361,0.0638669923122824,0.074591654125375,0.520150722169775,1.08869015703807,0.475695405781053,1.22835448714228,0.522693130765919,0.106512863058513,2.52120423813782,0.249314678664028,3.38623021921619,0.00673047153683587,2.07811511478317,4.84905426068763,0.499598421224282,1.72520718025117,0.0730773530696664,0.826117881186977,0.446237609141964,0.740952547450327,0.124244281429799,2.74667441352225,3.54874902023348,4.12117659510376,0.752302171730802,1.21111282176887,0.740897431091451,2.97469366003165,2.25561448825948,0,1.01005727065703,1.35368995464071,1.35264715464307,0.0515914691207179,0,0.74428708670547,0.450629665772645,0.775785358530033,0.530316321438906,2.44325415934785,0.474236664485971,0.755644550700652,0.481055884934864,0.111403595101048,1.37131360613564,0.968471396807476,0.022740761863147,0.459935720816928,0.304518280478324,0.104308356003627,0.538644746327887,1.47093667368484,2.71272457577228,1.62769622197438,5.20643264173965,4.18566004079997,16.2745295439377,0.91773624348888,0.927382616051593,12.3110276690193,27.2010403730814,14.0741724840662,3.55688780549298,17.8139757603778,16.8427834144212,4.36722559746135,7.85603377400595,19.2090715612333,2.22476759558885,9.91244438065164,1.2458073677387,6.93826423737582,18.966951981362,0.82344032186205,0.792704838341713,9.4741688550093,10.6606743496333,23.7820841644451,7.92314028491908,1.34730290842631,1.2107122414934,0.901276054092761,1.51641515646336,0.818672236308364,0.430174007986282,3.13257931669015,1.25847674505463,0.993731970539559,3.83827162953564,2.58102917575313,1.03693659610103,1.13374087271939,3.4774164002833,0.722269388966279,3.12363495671106,1.21445368104424,1.01843059990692,3.77882609904119,4.90820135907273,5.49586750425404,5.36346516425629,3.41402663529627,3.77996305896643,6.15645634174534,5.59269187845876,4.19475756646907,10.6772527567058,3.15262993616598,3.27900431986505,4.95412846202152,2.56805961169673,3.75801886018544,3.70668875744956,0.497094059658078,3.95062339544599,1.10567777025906,5.20607318365126,6.88017223212608,2.3348281608838,4.56204379562044,5.3089363132279,3.1662284711782,1.74593709279388,5.57847251827928,2.36570634172543,3.01196155044706,2.84030614951982,8.50641453876215,3.01143779719177,7.08402132980764,9.314922605167,5.73692659084468,7.88280085571841,7.25674527072913,10.7181037554746,6.17566952362371,5.80454085934542,4.17211369700417,12.3419258777251,12.9535610251741,12.7037278522408,6.08148342264352,7.81230111637784,0,0,0,0,0,0,0,3.76955785290762,7.21834176321558],"y":[71.2970226386683,69.6393779082686,72.447393732588,37.7840072172326,44.3327235286547,61.7349260552571,69.8748771154364,78.2284565297122,31.5942220170173,73.4182248726499,65.3808646310829,66.9866852091537,76.9951761167207,66.7556129782873,25.0832540437678,30.4794703877518,5.9124793717635,73.3958549144279,30.1114742405012,26.3576779026217,70.1592120640027,80.2305698931583,66.3367926813739,72.4195888400641,31.9217721922455,61.2170223386996,75.5096037273873,30.8046590148839,55.1708009076147,33.4010631156909,31.4360006750156,56.8823093351451,62.5795798574502,40.9787647163387,81.4444286016738,63.9656361777336,75.7291621992605,69.7729564774134,71.5255376912349,79.7306535314381,65.1780074065917,69.1105364915512,48.7678791779575,24.4625920232074,77.3405471902207,69.0489872305412,16.4950166112957,46.4959148099397,29.625041817738,25.047460833546,41.5584721062001,49.6634772969171,25.6817254728913,27.771806000453,84.0730336868367,63.9514003816487,72.9528617613803,84.2435619612613,36.0563049374077,44.7676747174202,85.2503548009312,78.0789025250874,79.609219902402,82.9627542540562,68.2669124335532,68.9976647743786,74.1065713160845,82.5800099912178,85.4275486788848,49.434803578091,86.6870630478904,45.4599964539652,81.195942733609,58.3219452105267,75.9224476396055,24.8166162357478,81.0582373860075,83.7323043747614,59.3626939091715,86.25921803155,27.9941910308028,78.054191270947,84.3413878912848,27.2517506621352,57.6498995569864,28.1519838256997,71.833353957599,82.6453433261538,28.1374286127102,60.2325275075139,30.2916079981576,80.1545610091999,79.1468364861543,74.5838010346531,78.1742546783719,48.9207890601178,73.6410253702022,89.5136864240833,88.9623232710954,78.8133413759405,82.1239776446157,75.2137276146875,60.764984664731,64.6108170376423,47.1433285890289,62.1020440718397,81.8913201520635,65.1416544460057,90.8380798923109,61.8318084807174,75.1798321882988,80.8393912647028,84.1439122691654,88.2863140643727,89.3110819737658,62.0151326025942,82.6184745877752,65.1406677293075,90.6656628995719,65.4589787400237,64.8164591787296,58.5987859786764,80.2264995339455,85.6618957241262,70.2724084186079,77.3240525856251,68.7641125497426,73.6491899830405,63.220867148381,45.5967219070508,53.0345908339456,63.0614006223997,64.6575412380044,38.1209838721112,43.0374603203349,66.2632938316621,70.2058065458126,72.9921016626183,64.0417069153719,84.2182584252675,62.5873231089225,70.974221157038,75.54331947361,66.9661973734178,70.5981849125126,39.400134406347,61.6577419421021,71.5213872080242,39.6286555381687,64.9925877912217,36.5850062614002,62.005114832806,29.5025964173728,67.1227351053144,76.6590688731193,91.89194008105,58.7680634637104,60.888939909877,29.4788585241093,48.4201633121913,35.6943473351499,83.1705172786389,90.7387659775173,36.8983460593027,53.6826059861271,39.29289690321,36.4099959505556,64.4523715801611,65.0940610558999,44.2381742910085,74.8137179492323,60.4288323572349,78.2565143082449,50.7708910085322,61.8286244092865,65.3267962146818,47.2084545626007,31.6267677314762,86.5405189371885,65.7842048286155,57.6930948488837,48.2689670073449,82.6041103875062,69.8955402655396,72.2639360324452,75.1777851816942,46.0450564103896,40.8411125479861,82.228080059778,70.7638426803134,35.1484393448461,65.7963137587526,52.1538557252621,42.5001514356096,45.9554837450287,41.08587857357,68.6651423140192,72.4918699215318,71.3654500727137,54.0487486972311,69.0233444850394,35.8582394154398,76.5643911865848,59.2279177686935,41.103113056386,58.9369231478994,78.1805953589589,70.0165385953769,37.8372863928711,57.068747064064,48.6221202997913,48.9133602013207,69.0238260550333,59.2179416194522,63.6104128687307,71.1166947950848,51.1970783972594,46.9173965784919,38.6568017599227,82.6925915460883,41.3061730870448,64.5667106276104,44.9748171164335,54.4611142715667,74.5086658064021,79.2935232178682,48.2706343551228,78.3317999957209,79.1709504031128,48.0847860275092,70.8514391975119,80.1499489918387,76.368007536862,42.611592527704,68.8206794025765,66.9162217207634,42.480103117068,53.5331346250744,72.160057904955,64.89748194485,73.2726826821342,74.3021036573389,51.7612184800098,74.9559863294236,56.5805792751514,76.6722532280968,68.9490730635724,78.5185590461937,73.969426249204,74.4919003697594,85.4565989499987,75.0267398157451,75.4972629508366,76.2472065212406,77.254095881332,46.6653572588569,46.556917845414,77.404912408941,67.7594954843655,74.6062204030746,72.4491426902684,60.8660376831657,60.0531369770431,55.8201281385889,30.6143266941771,38.1737850885236,36.1202356973418,46.940584352687,58.192338325086,56.7358103220782,49.9795743058779,61.1175704031476,61.401143945014,63.6754295089837,59.1786774605823,39.1881262268423,55.2798594687934,54.4142332921948,33.7837250450966,31.4368074568689,76.2603918569731,20.3015250572536,38.9713313948229,60.2463098695146,41.0784668103158,38.8218894020647,30.5406307166607,64.2498517083856,74.6039615001067,48.964567900744,45.7641836621078,49.034730944845,44.633458882218,47.3811611435013,34.5955124045605,74.373171408037,38.0592304741161,28.450135975384,49.8623278496933,26.4975860543617,49.063574699127,22.6735275094977,52.3056048288467,38.3493459549383,20.9045163045184,47.3362136592168,12.4701818315859,35.3740681257041,19.304962328222,58.0345140617901,55.9433640340697,65.5569170262413,36.5682680164603,60.5323352097714,42.489969180671,47.1526137523652,51.338613451657,65.1649342333877,56.1851555184757,61.9960805393575,57.5340662866335,64.396016217518,71.1361620833879,64.4510559084789,61.315758785559,35.0992476086052,31.7885385944091,54.0044878132518,25.7480327300779,32.3742537913712,53.8792075389354,39.2396532136102,71.7235766406637,52.9725217790422],"text":["Ch: 0.000000e+00<br />RD: 71.297023","Ch: 0.000000e+00<br />RD: 69.639378","Ch: 0.000000e+00<br />RD: 72.447394","Ch: 0.000000e+00<br />RD: 37.784007","Ch: 0.000000e+00<br />RD: 44.332724","Ch: 0.000000e+00<br />RD: 61.734926","Ch: 0.000000e+00<br />RD: 69.874877","Ch: 0.000000e+00<br />RD: 78.228457","Ch: 0.000000e+00<br />RD: 31.594222","Ch: 0.000000e+00<br />RD: 73.418225","Ch: 0.000000e+00<br />RD: 65.380865","Ch: 0.000000e+00<br />RD: 66.986685","Ch: 0.000000e+00<br />RD: 76.995176","Ch: 0.000000e+00<br />RD: 66.755613","Ch: 0.000000e+00<br />RD: 25.083254","Ch: 0.000000e+00<br />RD: 30.479470","Ch: 0.000000e+00<br />RD: 5.912479","Ch: 0.000000e+00<br />RD: 73.395855","Ch: 0.000000e+00<br />RD: 30.111474","Ch: 0.000000e+00<br />RD: 26.357678","Ch: 0.000000e+00<br />RD: 70.159212","Ch: 0.000000e+00<br />RD: 80.230570","Ch: 0.000000e+00<br />RD: 66.336793","Ch: 0.000000e+00<br />RD: 72.419589","Ch: 0.000000e+00<br />RD: 31.921772","Ch: 0.000000e+00<br />RD: 61.217022","Ch: 0.000000e+00<br />RD: 75.509604","Ch: 0.000000e+00<br />RD: 30.804659","Ch: 0.000000e+00<br />RD: 55.170801","Ch: 0.000000e+00<br />RD: 33.401063","Ch: 0.000000e+00<br />RD: 31.436001","Ch: 3.753124e-01<br />RD: 56.882309","Ch: 0.000000e+00<br />RD: 62.579580","Ch: 0.000000e+00<br />RD: 40.978765","Ch: 0.000000e+00<br />RD: 81.444429","Ch: 0.000000e+00<br />RD: 63.965636","Ch: 0.000000e+00<br />RD: 75.729162","Ch: 0.000000e+00<br />RD: 69.772956","Ch: 0.000000e+00<br />RD: 71.525538","Ch: 0.000000e+00<br />RD: 79.730654","Ch: 0.000000e+00<br />RD: 65.178007","Ch: 0.000000e+00<br />RD: 69.110536","Ch: 0.000000e+00<br />RD: 48.767879","Ch: 0.000000e+00<br />RD: 24.462592","Ch: 0.000000e+00<br />RD: 77.340547","Ch: 0.000000e+00<br />RD: 69.048987","Ch: 0.000000e+00<br />RD: 16.495017","Ch: 0.000000e+00<br />RD: 46.495915","Ch: 0.000000e+00<br />RD: 29.625042","Ch: 0.000000e+00<br />RD: 25.047461","Ch: 0.000000e+00<br />RD: 41.558472","Ch: 1.749366e-01<br />RD: 49.663477","Ch: 0.000000e+00<br />RD: 25.681725","Ch: 0.000000e+00<br />RD: 27.771806","Ch: 1.004214e+00<br />RD: 84.073034","Ch: 1.223433e+00<br />RD: 63.951400","Ch: 9.755167e-02<br />RD: 72.952862","Ch: 5.705994e-03<br />RD: 84.243562","Ch: 4.046832e+00<br />RD: 36.056305","Ch: 0.000000e+00<br />RD: 44.767675","Ch: 9.662372e-03<br />RD: 85.250355","Ch: 0.000000e+00<br />RD: 78.078903","Ch: 4.463122e-01<br />RD: 79.609220","Ch: 2.478829e-02<br />RD: 82.962754","Ch: 3.557536e+00<br />RD: 68.266912","Ch: 3.907761e-02<br />RD: 68.997665","Ch: 5.701271e-03<br />RD: 74.106571","Ch: 1.218629e-02<br />RD: 82.580010","Ch: 1.654652e-02<br />RD: 85.427549","Ch: 9.099926e-03<br />RD: 49.434804","Ch: 1.769286e+00<br />RD: 86.687063","Ch: 0.000000e+00<br />RD: 45.459996","Ch: 9.149705e-03<br />RD: 81.195943","Ch: 0.000000e+00<br />RD: 58.321945","Ch: 6.182130e+00<br />RD: 75.922448","Ch: 2.386797e+00<br />RD: 24.816616","Ch: 1.114984e-02<br />RD: 81.058237","Ch: 1.249151e-01<br />RD: 83.732304","Ch: 1.829447e+00<br />RD: 59.362694","Ch: 7.757719e-03<br />RD: 86.259218","Ch: 0.000000e+00<br />RD: 27.994191","Ch: 4.513220e-03<br />RD: 78.054191","Ch: 2.251428e-02<br />RD: 84.341388","Ch: 0.000000e+00<br />RD: 27.251751","Ch: 1.330371e-03<br />RD: 57.649900","Ch: 4.711021e+00<br />RD: 28.151984","Ch: 3.109695e-02<br />RD: 71.833354","Ch: 1.053548e-02<br />RD: 82.645343","Ch: 0.000000e+00<br />RD: 28.137429","Ch: 8.338012e+00<br />RD: 60.232528","Ch: 4.371351e+00<br />RD: 30.291608","Ch: 7.938314e-03<br />RD: 80.154561","Ch: 3.957608e-03<br />RD: 79.146836","Ch: 0.000000e+00<br />RD: 74.583801","Ch: 2.941295e-02<br />RD: 78.174255","Ch: 0.000000e+00<br />RD: 48.920789","Ch: 5.545111e-03<br />RD: 73.641025","Ch: 0.000000e+00<br />RD: 89.513686","Ch: 0.000000e+00<br />RD: 88.962323","Ch: 3.339953e-04<br />RD: 78.813341","Ch: 0.000000e+00<br />RD: 82.123978","Ch: 0.000000e+00<br />RD: 75.213728","Ch: 0.000000e+00<br />RD: 60.764985","Ch: 4.296015e-03<br />RD: 64.610817","Ch: 0.000000e+00<br />RD: 47.143329","Ch: 0.000000e+00<br />RD: 62.102044","Ch: 1.759770e-02<br />RD: 81.891320","Ch: 0.000000e+00<br />RD: 65.141654","Ch: 1.221106e-02<br />RD: 90.838080","Ch: 0.000000e+00<br />RD: 61.831808","Ch: 6.586864e-03<br />RD: 75.179832","Ch: 0.000000e+00<br />RD: 80.839391","Ch: 2.431825e-02<br />RD: 84.143912","Ch: 0.000000e+00<br />RD: 88.286314","Ch: 0.000000e+00<br />RD: 89.311082","Ch: 0.000000e+00<br />RD: 62.015133","Ch: 0.000000e+00<br />RD: 82.618475","Ch: 0.000000e+00<br />RD: 65.140668","Ch: 0.000000e+00<br />RD: 90.665663","Ch: 1.015743e-01<br />RD: 65.458979","Ch: 0.000000e+00<br />RD: 64.816459","Ch: 8.008815e-03<br />RD: 58.598786","Ch: 0.000000e+00<br />RD: 80.226500","Ch: 2.870929e-02<br />RD: 85.661896","Ch: 3.579705e-04<br />RD: 70.272408","Ch: 1.603386e-02<br />RD: 77.324053","Ch: 0.000000e+00<br />RD: 68.764113","Ch: 0.000000e+00<br />RD: 73.649190","Ch: 4.295686e-03<br />RD: 63.220867","Ch: 0.000000e+00<br />RD: 45.596722","Ch: 0.000000e+00<br />RD: 53.034591","Ch: 0.000000e+00<br />RD: 63.061401","Ch: 0.000000e+00<br />RD: 64.657541","Ch: 0.000000e+00<br />RD: 38.120984","Ch: 0.000000e+00<br />RD: 43.037460","Ch: 8.910665e-02<br />RD: 66.263294","Ch: 1.245073e-02<br />RD: 70.205807","Ch: 1.753024e-01<br />RD: 72.992102","Ch: 2.101826e-01<br />RD: 64.041707","Ch: 5.324050e-02<br />RD: 84.218258","Ch: 2.883416e-01<br />RD: 62.587323","Ch: 0.000000e+00<br />RD: 70.974221","Ch: 3.584224e-03<br />RD: 75.543319","Ch: 7.866149e-02<br />RD: 66.966197","Ch: 6.452336e-02<br />RD: 70.598185","Ch: 7.206017e-02<br />RD: 39.400134","Ch: 1.129599e-01<br />RD: 61.657742","Ch: 1.633836e-01<br />RD: 71.521387","Ch: 8.532858e-03<br />RD: 39.628656","Ch: 3.913587e-01<br />RD: 64.992588","Ch: 2.867748e-01<br />RD: 36.585006","Ch: 0.000000e+00<br />RD: 62.005115","Ch: 7.252710e-02<br />RD: 29.502596","Ch: 2.469901e-01<br />RD: 67.122735","Ch: 4.606223e+00<br />RD: 76.659069","Ch: 4.373441e-02<br />RD: 91.891940","Ch: 2.980814e-02<br />RD: 58.768063","Ch: 7.408735e-01<br />RD: 60.888940","Ch: 0.000000e+00<br />RD: 29.478859","Ch: 1.176130e-02<br />RD: 48.420163","Ch: 0.000000e+00<br />RD: 35.694347","Ch: 1.243099e-01<br />RD: 83.170517","Ch: 9.814127e-02<br />RD: 90.738766","Ch: 1.316613e-01<br />RD: 36.898346","Ch: 8.131499e-01<br />RD: 53.682606","Ch: 4.314848e-02<br />RD: 39.292897","Ch: 0.000000e+00<br />RD: 36.409996","Ch: 1.678829e-01<br />RD: 64.452372","Ch: 8.075024e-02<br />RD: 65.094061","Ch: 1.947129e-01<br />RD: 44.238174","Ch: 3.619552e-01<br />RD: 74.813718","Ch: 4.617493e-02<br />RD: 60.428832","Ch: 6.110226e-02<br />RD: 78.256514","Ch: 8.829946e-02<br />RD: 50.770891","Ch: 4.158523e-01<br />RD: 61.828624","Ch: 1.078240e-03<br />RD: 65.326796","Ch: 1.140756e+00<br />RD: 47.208455","Ch: 2.056764e-02<br />RD: 31.626768","Ch: 6.493514e-02<br />RD: 86.540519","Ch: 5.054096e-02<br />RD: 65.784205","Ch: 7.638979e-03<br />RD: 57.693095","Ch: 2.499567e-01<br />RD: 48.268967","Ch: 6.386699e-02<br />RD: 82.604110","Ch: 7.459165e-02<br />RD: 69.895540","Ch: 5.201507e-01<br />RD: 72.263936","Ch: 1.088690e+00<br />RD: 75.177785","Ch: 4.756954e-01<br />RD: 46.045056","Ch: 1.228354e+00<br />RD: 40.841113","Ch: 5.226931e-01<br />RD: 82.228080","Ch: 1.065129e-01<br />RD: 70.763843","Ch: 2.521204e+00<br />RD: 35.148439","Ch: 2.493147e-01<br />RD: 65.796314","Ch: 3.386230e+00<br />RD: 52.153856","Ch: 6.730472e-03<br />RD: 42.500151","Ch: 2.078115e+00<br />RD: 45.955484","Ch: 4.849054e+00<br />RD: 41.085879","Ch: 4.995984e-01<br />RD: 68.665142","Ch: 1.725207e+00<br />RD: 72.491870","Ch: 7.307735e-02<br />RD: 71.365450","Ch: 8.261179e-01<br />RD: 54.048749","Ch: 4.462376e-01<br />RD: 69.023344","Ch: 7.409525e-01<br />RD: 35.858239","Ch: 1.242443e-01<br />RD: 76.564391","Ch: 2.746674e+00<br />RD: 59.227918","Ch: 3.548749e+00<br />RD: 41.103113","Ch: 4.121177e+00<br />RD: 58.936923","Ch: 7.523022e-01<br />RD: 78.180595","Ch: 1.211113e+00<br />RD: 70.016539","Ch: 7.408974e-01<br />RD: 37.837286","Ch: 2.974694e+00<br />RD: 57.068747","Ch: 2.255614e+00<br />RD: 48.622120","Ch: 0.000000e+00<br />RD: 48.913360","Ch: 1.010057e+00<br />RD: 69.023826","Ch: 1.353690e+00<br />RD: 59.217942","Ch: 1.352647e+00<br />RD: 63.610413","Ch: 5.159147e-02<br />RD: 71.116695","Ch: 0.000000e+00<br />RD: 51.197078","Ch: 7.442871e-01<br />RD: 46.917397","Ch: 4.506297e-01<br />RD: 38.656802","Ch: 7.757854e-01<br />RD: 82.692592","Ch: 5.303163e-01<br />RD: 41.306173","Ch: 2.443254e+00<br />RD: 64.566711","Ch: 4.742367e-01<br />RD: 44.974817","Ch: 7.556446e-01<br />RD: 54.461114","Ch: 4.810559e-01<br />RD: 74.508666","Ch: 1.114036e-01<br />RD: 79.293523","Ch: 1.371314e+00<br />RD: 48.270634","Ch: 9.684714e-01<br />RD: 78.331800","Ch: 2.274076e-02<br />RD: 79.170950","Ch: 4.599357e-01<br />RD: 48.084786","Ch: 3.045183e-01<br />RD: 70.851439","Ch: 1.043084e-01<br />RD: 80.149949","Ch: 5.386447e-01<br />RD: 76.368008","Ch: 1.470937e+00<br />RD: 42.611593","Ch: 2.712725e+00<br />RD: 68.820679","Ch: 1.627696e+00<br />RD: 66.916222","Ch: 5.206433e+00<br />RD: 42.480103","Ch: 4.185660e+00<br />RD: 53.533135","Ch: 1.627453e+01<br />RD: 72.160058","Ch: 9.177362e-01<br />RD: 64.897482","Ch: 9.273826e-01<br />RD: 73.272683","Ch: 1.231103e+01<br />RD: 74.302104","Ch: 2.720104e+01<br />RD: 51.761218","Ch: 1.407417e+01<br />RD: 74.955986","Ch: 3.556888e+00<br />RD: 56.580579","Ch: 1.781398e+01<br />RD: 76.672253","Ch: 1.684278e+01<br />RD: 68.949073","Ch: 4.367226e+00<br />RD: 78.518559","Ch: 7.856034e+00<br />RD: 73.969426","Ch: 1.920907e+01<br />RD: 74.491900","Ch: 2.224768e+00<br />RD: 85.456599","Ch: 9.912444e+00<br />RD: 75.026740","Ch: 1.245807e+00<br />RD: 75.497263","Ch: 6.938264e+00<br />RD: 76.247207","Ch: 1.896695e+01<br />RD: 77.254096","Ch: 8.234403e-01<br />RD: 46.665357","Ch: 7.927048e-01<br />RD: 46.556918","Ch: 9.474169e+00<br />RD: 77.404912","Ch: 1.066067e+01<br />RD: 67.759495","Ch: 2.378208e+01<br />RD: 74.606220","Ch: 7.923140e+00<br />RD: 72.449143","Ch: 1.347303e+00<br />RD: 60.866038","Ch: 1.210712e+00<br />RD: 60.053137","Ch: 9.012761e-01<br />RD: 55.820128","Ch: 1.516415e+00<br />RD: 30.614327","Ch: 8.186722e-01<br />RD: 38.173785","Ch: 4.301740e-01<br />RD: 36.120236","Ch: 3.132579e+00<br />RD: 46.940584","Ch: 1.258477e+00<br />RD: 58.192338","Ch: 9.937320e-01<br />RD: 56.735810","Ch: 3.838272e+00<br />RD: 49.979574","Ch: 2.581029e+00<br />RD: 61.117570","Ch: 1.036937e+00<br />RD: 61.401144","Ch: 1.133741e+00<br />RD: 63.675430","Ch: 3.477416e+00<br />RD: 59.178677","Ch: 7.222694e-01<br />RD: 39.188126","Ch: 3.123635e+00<br />RD: 55.279859","Ch: 1.214454e+00<br />RD: 54.414233","Ch: 1.018431e+00<br />RD: 33.783725","Ch: 3.778826e+00<br />RD: 31.436807","Ch: 4.908201e+00<br />RD: 76.260392","Ch: 5.495868e+00<br />RD: 20.301525","Ch: 5.363465e+00<br />RD: 38.971331","Ch: 3.414027e+00<br />RD: 60.246310","Ch: 3.779963e+00<br />RD: 41.078467","Ch: 6.156456e+00<br />RD: 38.821889","Ch: 5.592692e+00<br />RD: 30.540631","Ch: 4.194758e+00<br />RD: 64.249852","Ch: 1.067725e+01<br />RD: 74.603962","Ch: 3.152630e+00<br />RD: 48.964568","Ch: 3.279004e+00<br />RD: 45.764184","Ch: 4.954128e+00<br />RD: 49.034731","Ch: 2.568060e+00<br />RD: 44.633459","Ch: 3.758019e+00<br />RD: 47.381161","Ch: 3.706689e+00<br />RD: 34.595512","Ch: 4.970941e-01<br />RD: 74.373171","Ch: 3.950623e+00<br />RD: 38.059230","Ch: 1.105678e+00<br />RD: 28.450136","Ch: 5.206073e+00<br />RD: 49.862328","Ch: 6.880172e+00<br />RD: 26.497586","Ch: 2.334828e+00<br />RD: 49.063575","Ch: 4.562044e+00<br />RD: 22.673528","Ch: 5.308936e+00<br />RD: 52.305605","Ch: 3.166228e+00<br />RD: 38.349346","Ch: 1.745937e+00<br />RD: 20.904516","Ch: 5.578473e+00<br />RD: 47.336214","Ch: 2.365706e+00<br />RD: 12.470182","Ch: 3.011962e+00<br />RD: 35.374068","Ch: 2.840306e+00<br />RD: 19.304962","Ch: 8.506415e+00<br />RD: 58.034514","Ch: 3.011438e+00<br />RD: 55.943364","Ch: 7.084021e+00<br />RD: 65.556917","Ch: 9.314923e+00<br />RD: 36.568268","Ch: 5.736927e+00<br />RD: 60.532335","Ch: 7.882801e+00<br />RD: 42.489969","Ch: 7.256745e+00<br />RD: 47.152614","Ch: 1.071810e+01<br />RD: 51.338613","Ch: 6.175670e+00<br />RD: 65.164934","Ch: 5.804541e+00<br />RD: 56.185156","Ch: 4.172114e+00<br />RD: 61.996081","Ch: 1.234193e+01<br />RD: 57.534066","Ch: 1.295356e+01<br />RD: 64.396016","Ch: 1.270373e+01<br />RD: 71.136162","Ch: 6.081483e+00<br />RD: 64.451056","Ch: 7.812301e+00<br />RD: 61.315759","Ch: 0.000000e+00<br />RD: 35.099248","Ch: 0.000000e+00<br />RD: 31.788539","Ch: 0.000000e+00<br />RD: 54.004488","Ch: 0.000000e+00<br />RD: 25.748033","Ch: 0.000000e+00<br />RD: 32.374254","Ch: 0.000000e+00<br />RD: 53.879208","Ch: 0.000000e+00<br />RD: 39.239653","Ch: 3.769558e+00<br />RD: 71.723577","Ch: 7.218342e+00<br />RD: 52.972522"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,0,1)","opacity":1,"size":5.66929133858268,"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-5,105],"y":[65,65],"text":"yintercept: 65","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(255,0,0,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":43.1050228310502},"plot_bgcolor":"rgba(235,235,235,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":"Differenziata","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"xaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"y","title":"Chiamata (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"type":"linear","autorange":false,"range":[-5,105],"tickmode":"array","ticktext":["0","25","50","75","100"],"tickvals":[0,25,50,75,100],"categoryorder":"array","categoryarray":["0","25","50","75","100"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(255,255,255,1)","gridwidth":0.66417600664176,"zeroline":false,"anchor":"x","title":"Raccolta Differenziata (%/abitante)","titlefont":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":[{"name":"Collaborate","icon":{"width":1000,"ascent":500,"descent":-50,"path":"M487 375c7-10 9-23 5-36l-79-259c-3-12-11-23-22-31-11-8-22-12-35-12l-263 0c-15 0-29 5-43 15-13 10-23 23-28 37-5 13-5 25-1 37 0 0 0 3 1 7 1 5 1 8 1 11 0 2 0 4-1 6 0 3-1 5-1 6 1 2 2 4 3 6 1 2 2 4 4 6 2 3 4 5 5 7 5 7 9 16 13 26 4 10 7 19 9 26 0 2 0 5 0 9-1 4-1 6 0 8 0 2 2 5 4 8 3 3 5 5 5 7 4 6 8 15 12 26 4 11 7 19 7 26 1 1 0 4 0 9-1 4-1 7 0 8 1 2 3 5 6 8 4 4 6 6 6 7 4 5 8 13 13 24 4 11 7 20 7 28 1 1 0 4 0 7-1 3-1 6-1 7 0 2 1 4 3 6 1 1 3 4 5 6 2 3 3 5 5 6 1 2 3 5 4 9 2 3 3 7 5 10 1 3 2 6 4 10 2 4 4 7 6 9 2 3 4 5 7 7 3 2 7 3 11 3 3 0 8 0 13-1l0-1c7 2 12 2 14 2l218 0c14 0 25-5 32-16 8-10 10-23 6-37l-79-259c-7-22-13-37-20-43-7-7-19-10-37-10l-248 0c-5 0-9-2-11-5-2-3-2-7 0-12 4-13 18-20 41-20l264 0c5 0 10 2 16 5 5 3 8 6 10 11l85 282c2 5 2 10 2 17 7-3 13-7 17-13z m-304 0c-1-3-1-5 0-7 1-1 3-2 6-2l174 0c2 0 4 1 7 2 2 2 4 4 5 7l6 18c0 3 0 5-1 7-1 1-3 2-6 2l-173 0c-3 0-5-1-8-2-2-2-4-4-4-7z m-24-73c-1-3-1-5 0-7 2-2 3-2 6-2l174 0c2 0 5 0 7 2 3 2 4 4 5 7l6 18c1 2 0 5-1 6-1 2-3 3-5 3l-174 0c-3 0-5-1-7-3-3-1-4-4-5-6z"},"click":"function(gd) { \n // is this being viewed in RStudio?\n if (location.search == '?viewer_pane=1') {\n alert('To learn about plotly for collaboration, visit:\\n https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html');\n } else {\n window.open('https://cpsievert.github.io/plotly_book/plot-ly-for-collaboration.html', '_blank');\n }\n }"}],"cloud":false},"source":"A","attrs":{"6a6744c844a6":{"x":{},"y":{},"type":"scatter"},"6a6720c9394e":{"yintercept":{}}},"cur_data":"6a6744c844a6","visdat":{"6a6744c844a6":["function (y) ","x"],"6a6720c9394e":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1}},"base_url":"https://plot.ly"},"evals":["config.modeBarButtonsToAdd.0.click"],"jsHooks":{"render":[{"code":"function(el, x) { var ctConfig = crosstalk.var('plotlyCrosstalkOpts').set({\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1}}); }","data":null}]}}</script>
</div>
</div>
</div>
</div></div>
2017-11-29T00:00:00+00:00
/civic%20hacking/smac17/
SMAC17: Strumenti digitali applicati al monitoraggio civico
2017-11-11T00:00:00+00:00
mfortini
info@matteofortini.it
http://www.matteofortini.it/
Scuola di Monitoraggio e Azione Civica
<p>L’11 Novembre scorso, insieme ad <a href="https://www.facebook.com/antonella.milanini">Antonella Milanini</a> ho partecipato
a <a href="https://www.facebook.com/events/324202801336793/">SMAC17-Scuola di Monitoraggio e Azione Civica</a>, organizzata dal 10 al 12 Novembre da <a href="https://www.actionaid.it/">Act!onaid Italia</a>
ad Arquata del Tronto.</p>
<p>Le persone, intervenute in numero veramente significativo vista la durata della Scuola e la
difficoltà in cui si trovano ancora i territori colpiti dal terremoto a partire dall’Agosto 2016,
hanno segnalato fra le loro necessità quella di <strong>raccontarsi</strong>, in quanto la loro sensazione e
preoccupazione è che il loro stato e i loro problemi vengano alla fine messi da parte dalle grandi
fonti di informazione e che questo influisca negativamente anche su coloro che stanno decidendo le politiche della
ricostruzione.</p>
<h2 id="mapillary">Mapillary</h2>
<p>Abbiamo raccontato della possibilità di utilizzare <a href="https://www.mapillary.com/app/?lat=42.77264&lng=13.29628&z=12&focus=map">Mapillary</a>,
un servizio che raccoglie foto di luoghi per creare una visualizzazione soggettiva analoga a quella del più famoso
Google Street View.</p>
<p><img src="/images/2017-11-11_SMAC17/mapillary_arquata.jpg" alt="Mapillary Arquata del Tronto" /></p>
<p>A pochi mesi dal terremoto del 24 Agosto, su <a href="https://terremotocentroitalia.info">terremotocentroitalia.info</a>
abbiamo postato un <a href="https://terremotocentroitalia.info/2016-10-10-usare-mapillary-per-raccontare/">invito a usare Mapillary per documentare i luoghi colpiti dal sisma</a>
proprio per la possibilità sia di dare una visione oggettiva e aggiornata dello stato delle cose, sia perché Mapillary
permette anche di fare confronti fra diversi periodi. In più, cosa molto importante, le immagini che chiunque
carica su Mapillary, assieme ai risultati di alcune elaborazioni che su di esse vengono compiute, sono rese
disponibili con una licenza aperta (CC-BY-SA), che consente di mantenere la proprietà del proprio lavoro,
ma anche di riutilizzare il materiale per realizzare altri progetti.</p>
<p>Grazie ad Act!onaid che ha contattato direttamente Mapillary, è stato anche aperto un <a href="https://mapillary.github.io/mapillary_greenhouse/challenge/actionaid/">concorso</a>, per il quale il
territorio scelto (in questo caso, quello di Arquata) viene diviso in una serie di rettangoli che rappresentano
zone da “coprire” con le immagini. Il tracciato in viola che si vede al centro dell’immagine seguente evidenzia
la copertura che è stata effettuata durante la Scuola. Dopo aver spiegato il funzionamento dell’app per
smartphone, che i partecipanti hanno scaricato, siamo infatti usciti per circa un’ora e abbiamo mappato il territorio.</p>
<p><img src="/images/2017-11-11_SMAC17/mapillary_challenge.jpg" alt="Mapillary challenge Arquata del Tronto" /></p>
<h3 id="come-era-e-come-è">Come era e come è</h3>
<p>Come detto sopra, un’altra importante funzionalità di Mapillary, che lo rende utilissimo per documentare le fasi della
ricostruzione, è che quando vengono fatte più riprese dello stesso luogo in momenti diversi, vi è la possibilità
di confrontare le immagini. Questo permette, soprattutto in luoghi il cui aspetto cambia con una
discreta velocità a causa per esempio dei lavori di ripristino, di analizzare i cambiamenti.</p>
<iframe width="100%" height="400" src="https://www.mapillary.com/app/time-travel/?focus=photo&pKey=lsmtdeGLZrHlK-ujhhVWRQ&cKey=LuBuFE4Ipf31bcBNIfcBvA&ttKeys%5B%5D=LuBuFE4Ipf31bcBNIfcBvA"></iframe>
<p>Confronto fra due immagini di due momenti diversi: far scorrere per scegliere l’una o l’altra. <a href="https://www.mapillary.com/app/time-travel/?focus=photo&pKey=lsmtdeGLZrHlK-ujhhVWRQ&cKey=LuBuFE4Ipf31bcBNIfcBvA&ttKeys%5B%5D=LuBuFE4Ipf31bcBNIfcBvA">Apri a schermo intero</a></p>
<p>È possibile, grazie a un lavoro molto interessante di Cesare Gerbino, anche <a href="http://www.cesaregerbino.com/Mapillary/StreetImageCompare/StreetImageCompare.html?lat=42.77494,&lng=13.29811">confrontare le viste
di Mapillary e di Google Street View nella stessa posizione</a></p>
<p><img src="/images/2017-11-11_SMAC17/street_compare.jpg" alt="StreetCompare" /></p>
<h2 id="immagini-su-flickr">Immagini su Flickr</h2>
<p>Un’altra possibilità che abbiamo proposto, sempre su <a href="http://www.terremotocentroitalia.info">terremotocentroitalia.info</a>, è quella di documentare utilizzando
immagini che contengano la posizione GPS in cui sono state scattate.</p>
<p>A questo proposito, abbiamo aperto un <a href="https://www.flickr.com/photos/144881851@N07/">gruppo Flickr</a> sul quale le immagini sono caricate anche in questo caso
con una licenza permissiva e aperta, e che può essere visualizzato anche come mappa:</p>
<p><img src="/images/2017-11-11_SMAC17/flickrmap.jpg" alt="Mappa flickr" /></p>
<h2 id="umap">umap</h2>
<p>Altro strumento che è stato citato è <a href="https://umap.openstreetmap.fr/it/">umap</a>, che permette di realizzare mappe interattive e condivisibili online,
che possono essere anche gestite a partire da un foglio elettronico condiviso.</p>
<h2 id="conclusioni">Conclusioni</h2>
<p>Tutti questi strumenti si basano su un fatto molto importante: quando si vuole documentare, raccontare, analizzare una situazione, se si ha un’informazione che è
situata nel tempo (ha una data), ma anche nello spazio (è geotaggata), è possibile realizzare analisi molto interessanti perché si può, ad esempio, velocemente confrontare
momenti diversi nello stesso luogo, o diversi luoghi nello stesso momento, oppure aggregare informazioni vicine geograficamente.</p>
<p>Se tutto questo viene associato ad immagini, si ha sicuramente una fonte informativa aggiuntiva con un potenziale enorme: un’immagine infatti cristallizza
una situazione in un momento e in un luogo, registrando dati che non sempre sono colti all’atto del sopralluogo, ma che
possono essere desunti dalle immagini anche a distanza di molto tempo.</p>
<p>La Scuola di Acti!onaid è stato un importantissimo momento di confronto fra cittadini interessati, mondo delle ONG e dell’attivismo civico, ma anche con le istituzioni,
che si sono prestate il giorno successivo a un dialogo con gli intervenuti per verificare le proprie posizioni.</p>
2017-11-11T00:00:00+00:00