Fred
10.0.2
Rother OSS GmbH
https://otobo.de/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Fixed Fred for the customer interface.
Initial OTOBO Release.
A tool to help the developer during development.
Ein Werkzeug welches den Entwickler bei der Entwicklung unterstützen soll.
Egy eszköz a fejlesztők munkájának támogatásához.
10.0.x
<br/>
Welcome! <br/>
<br/>
What can Fred do?<br/>
<br/>
To date, Fred has the following features: <br/>
<ul>
<li> HTMLCheck: <br/>
perform different HTML quality checks in JavaScript </li>
<li> JSLint: <br/>
perform different JavaScript quality checks in JavaScript </li>
<li> STDERRLog: <br/>
every entry contained in STDERR is displayed </li>
<li> TranslationDebug: <br/>
display all translation attempts of the current request which failed </li>
<li> SQLLog: <br/>
list all SQL statements of the current request </li>
<li> ConfigLog: <br/>
list all ConfigGet requests, indicating their frequency </li>
<li> SessionDump: <br/>
show the current content of the serverside session </li>
<li> EnvDump: <br/>
show info about the environment of the layout object </li>
</ul>
<br/>
<strong>Caution</strong>: Please have a look at the possible config settings, which are easily accessible by clicking on "setting". <br/>
<br/>
<br/>
What is Fred's current status?<br/>
<br/>
<ul>
<li> modular design: <br/>
anybody can add a new module at any time </li>
<li> the modules' output is not yet sophisticated <br/>
ideas for improving the output or sensible configurations will be very welcome </li>
<li> please extend Fred, if you have good ideas <br/>
<li> if you have no time to implement your ideas yourselves, please enter them in dev mailinglist </li>
</ul>
<br/>
<br/>
Üdvözöljük! <br/>
<br/>
Mire képes a Fred?<br/>
<br/>
A Fred jelenleg a következő funkciókkal rendelkezik: <br/>
<ul>
<li> HTMLCheck: <br/>
különböző HTML minőség-ellenőrzések végrehajtása a JavaScript kódban </li>
<li> JSLint: <br/>
különböző JavaScript minőség-ellenőrzések végrehajtása a JavaScript kódban </li>
<li> STDERRLog: <br/>
a szabványos hibakimeneten megjelenő összes bejegyzés megjelenítése </li>
<li> TranslationDebug: <br/>
az aktuális kérés összes olyan fordítási kísérletének megjelenítése, amely sikertelen </li>
<li> SQLLog: <br/>
az aktuális kérés összes SQL-lekérdezésének felsorolása </li>
<li> ConfigLog: <br/>
az összes ConfigGet kérés felsorolása, jelezve azok gyakoriságát </li>
<li> SessionDump: <br/>
a kiszolgáló oldali munkamenet aktuális tartalmának megjelenítése </li>
<li> EnvDump: <br/>
információk megjelenítése a megjelenítő objektum környezetéről </li>
</ul>
<br/>
<strong>Vigyázat</strong>: nézze meg a lehetséges konfigurációs beállításokat, amelyek egyszerűen elérhetők a „beállításra” kattintva. <br/>
<br/>
<br/>
Mi a Fred jelenlegi állapota?<br/>
<br/>
<ul>
<li> moduláris felépítés: <br/>
bárki bármikor hozzáadhat egy új modult </li>
<li> a modulok kimenete még nem kifinomult <br/>
szívesen fogadjuk a kimenet javításával vagy az érzékeny beállításokkal kapcsolatos ötleteket </li>
<li> bővítse a Fred programot, ha vannak jó ötletei <br/>
<li> ha nincs ideje az ötletei megvalósításához, akkor írja le a fejlesztői levelezőlistán </li>
</ul>
<br/>
2020-05-22 07:24:31
opms
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjQvL0VOIgogICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC40L2RvY2Jvb2t4LmR0ZCI+Cgo8Ym9vayBsYW5nPSdlbic+Cgo8Ym9va2luZm8+Cjx0aXRsZT5GcmVkPC90aXRsZT4KPGVkaXRpb24+QSB0b29sIHRvIGhlbHAgdGhlIGRldmVsb3BlciBkdXJpbmcgZGV2ZWxvcG1lbnQuIFZlcnNpb24gMTAuMC4yPC9lZGl0aW9uPgoKPGNvcHlyaWdodD4KPHllYXI+MjAyMDwveWVhcj4KPGhvbGRlcj5Sb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvPC9ob2xkZXI+CjwvY29weXJpZ2h0PgoKPGRhdGU+MjAyMC0wNS0yMiA8L2RhdGU+Cgo8bGVnYWxub3RpY2U+CiAgICA8cGFyYT5HTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNzwvcGFyYT4KICAgIDxwYXJhPlRoaXMgd29yayBpcyBjb3B5cmlnaHRlZCBieSBSb3RoZXIgT1NTIEdtYkgsIFppbW1lcnNtw7xobGVud2VnIDExLCA2MTQ0MCBPYmVydXJzZWwsIEdlcm1hbnkuPC9wYXJhPgogICAgPHBhcmE+QnVpbGQgRGF0ZTogMjAyMC0wNS0yMiA8L3BhcmE+CjwvbGVnYWxub3RpY2U+Cgo8L2Jvb2tpbmZvPgoKPHByZWZhY2UgaWQ9InByZWZhY2UiID4KICAgIDx0aXRsZT5QcmVmYWNlPC90aXRsZT4KICAgIDxwYXJhPkEgbW9kdWxlIGZvciBoZWxwaW5nIHdpdGggZGV2ZWxvcGluZyB3ZWIgYXBwbGljdGlvbnMuPC9wYXJhPgo8L3ByZWZhY2U+Cgo8Y2hhcHRlcj4KICAgIDx0aXRsZT5GZWF0dXJlIExpc3Q8L3RpdGxlPgogICAgPHNlY3QxPgogICAgICAgIDx0aXRsZT5IVE1MQ2hlY2s8L3RpdGxlPgogICAgICAgIDxwYXJhPlBlcmZvcm1zIGRpZmZlcmVudCBiYWQvYmVzdCBwcmFjdGljZSBjaGVja3Mgb24gdGhlIGdlbmVyYXRlZCBwYWdlcyB2aWEgSmF2YVNjcmlwdC48L3BhcmE+CiAgICA8L3NlY3QxPgogICAgPHNlY3QxPgogICAgICAgIDx0aXRsZT5KU0xpbnQ8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgICAgICBFeGFtaW5lcyB0aGUgY29kZSBxdWFsaXR5IG9mIGFsbCBKYXZhU2NyaXB0IGNvZGUgdGhhdCBpcyB1c2VkCiAgICAgICAgICAgIG9uIHRoZSBwYWdlIG9uIHRoZSBmbHkgKGFsc28gdmlhIEphdmFTY3JpcHQpLCB1c2luZyB0aGUgZ3JlYXQgdG9vbCBKU0xpbnQuCiAgICAgICAgPC9wYXJhPgogICAgPC9zZWN0MT4KICAgIDxzZWN0MT4KICAgICAgICA8dGl0bGU+U1RERVJSTG9nPC90aXRsZT4KICAgICAgICA8cGFyYT5ldmVyeSBlbnRyeSBjb250YWluZWQgaW4gU1RERVJSIGlzIGRpc3BsYXllZCA8L3BhcmE+CiAgICA8L3NlY3QxPgogICAgPHNlY3QxPgogICAgICAgIDx0aXRsZT5UcmFuc2xhdGlvbkRlYnVnPC90aXRsZT4KICAgICAgICA8cGFyYT5kaXNwbGF5cyBhbGwgdHJhbnNsYXRpb24gYXR0ZW1wdHMgb2YgdGhlIGN1cnJlbnQgcmVxdWVzdCB3aGljaCBmYWlsZWQuIDwvcGFyYT4KICAgIDwvc2VjdDE+CiAgICA8c2VjdDE+CiAgICAgICAgPHRpdGxlPlNRTExvZzwvdGl0bGU+CiAgICAgICAgPHBhcmE+bGlzdHMgYWxsIFNRTCBzdGF0ZW1lbnRzIG9mIHRoZSBjdXJyZW50IHJlcXVlc3QgPC9wYXJhPgogICAgPC9zZWN0MT4KICAgIDxzZWN0MT4KICAgICAgICA8dGl0bGU+Q29uZmlnTG9nPC90aXRsZT4KICAgICAgICA8cGFyYT5saXN0cyBhbGwgQ29uZmlnR2V0IHJlcXVlc3RzLCBpbmRpY2F0aW5nIHRoZWlyIGZyZXF1ZW5jeSA8L3BhcmE+CiAgICA8L3NlY3QxPgogICAgPHNlY3QxPgogICAgICAgIDx0aXRsZT5TZXNzaW9uRHVtcDwvdGl0bGU+CiAgICAgICAgPHBhcmE+c2hvdyB0aGUgY3VycmVudCBjb250ZW50IG9mIHRoZSBzZXJ2ZXJzaWRlIHNlc3Npb24gPC9wYXJhPgogICAgPC9zZWN0MT4KICAgIDxzZWN0MT4KICAgICAgICA8dGl0bGU+RW52RHVtcDwvdGl0bGU+CiAgICAgICAgPHBhcmE+c2hvdyBpbmZvIGFib3V0IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgbGF5b3V0IG9iamVjdCA8L3BhcmE+CiAgICA8L3NlY3QxPgo8L2NoYXB0ZXI+Cgo8Y2hhcHRlcj4KICAgIDx0aXRsZT5JbnN0YWxsYXRpb248L3RpdGxlPgogICAgPHBhcmE+VGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgZXhwbGFpbiBob3cgdG8gaW5zdGFsbCB0aGUgcGFja2FnZS48L3BhcmE+CiAgICA8c2VjdDE+CiAgICAgICAgPHRpdGxlPkFkbWluIEludGVyZmFjZTwvdGl0bGU+CiAgICAgICAgPHBhcmE+ClBsZWFzZSB1c2UgdGhlIGZvbGxvd2luZyBVUkwgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSB1dGlsaXppbmcgdGhlIGFkbWluCmludGVyZmFjZSAocGxlYXNlIG5vdGUgdGhhdCB5b3UgbmVlZCB0byBiZSBpbiB0aGUgYWRtaW4gZ3JvdXApLgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KPHVsaW5rIHVybD0iaHR0cDovL2xvY2FsaG9zdC9vdG9iby9pbmRleC5wbD9BY3Rpb249QWRtaW5QYWNrYWdlTWFuYWdlciI+aHR0cDovL2xvY2FsaG9zdC9vdG9iby9pbmRleC5wbD9BY3Rpb249QWRtaW5QYWNrYWdlTWFuYWdlcjwvdWxpbms+CiAgICAgICAgPC9wYXJhPgogICAgPC9zZWN0MT4KICAgIDxzZWN0MT4KICAgICAgICA8dGl0bGU+Q29tbWFuZCBMaW5lPC90aXRsZT4KICAgICAgICA8cGFyYT4KSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBBZG1pbiBJbnRlcmZhY2UsIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcKT1BNIGNvbW1hbmQgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSB3aXRoICJiaW4vb3BtLnBsIi4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgPHNjcmVlbj4Kc2hlbGw+IGJpbi9vcG0ucGwgLWEgaW5zdGFsbCAtcCAvcGF0aC90by9GcmVkLTEwLjAuMi5vcG0KICAgICAgICA8L3NjcmVlbj4KICAgICAgICA8L3BhcmE+CiAgICA8L3NlY3QxPgo8L2NoYXB0ZXI+Cgo8Y2hhcHRlcj4KICAgIDx0aXRsZT5Db25maWd1cmF0aW9uPC90aXRsZT4KICAgIDxwYXJhPlRoZSBmb2xsb3dpbmcgY29uZmlnIG9wdGlvbnMgY2FuIG9yIG5lZWQgdG8gYmUgY2hhbmdlZCB2aWEgU3lzQ29uZmlnLjwvcGFyYT4KICAgIDxzZWN0MT4KICAgICAgICA8dGl0bGU+RnJlZDo6Q29uZmlnTG9nIyMjT3JkZXJCeTwvdGl0bGU+CiAgICAgICAgPHBhcmE+V2hpY2ggb3JkZXIgc2hvdWxkIHRoZSBjb25maWcgbG9nIGRhdGEgaGF2ZT88L3BhcmE+CiAgICA8L3NlY3QxPgo8L2NoYXB0ZXI+Cgo8Y2hhcHRlcj4KICAgIDx0aXRsZT5NYW5pZmVzdDwvdGl0bGU+CiAgICA8cGFyYT5UaGUgbWFuaWZlc3QgbGlzdHMgYWxsIGluY2x1ZGVkIGZpbGVzIGFuZCB0aGUgcmVmZXJyaW5nIHBlcm1pc3Npb25zLjwvcGFyYT4KICAgIDxzZWN0MT4KICAgICAgICA8dGl0bGU+RmlsZWxpc3Q8L3RpdGxlPgogICAgICAgIDxwYXJhPgogICAgICAgIDxpdGVtaXplZGxpc3Q+PGxpc3RpdGVtPjxwYXJhPig2NjApIGRvYy9lbi9GcmVkLnhtbDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvQ29uZmlnL0ZpbGVzL0FBQUZyZWQucG08L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL0NvbmZpZy9GaWxlcy9YTUwvRnJlZC54bWw8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL01vZHVsZXMvRGV2ZWxGcmVkLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9GaWx0ZXJDb250ZW50L0ZyZWQucG08L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL091dHB1dC9IVE1ML0ZyZWQvQ29uZmlnTG9nLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9GcmVkL0NvbmZpZ1N3aXRjaC5wbTwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvRnJlZC9Db25zb2xlLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9GcmVkL0VudkR1bXAucG08L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL091dHB1dC9IVE1ML0ZyZWQvSFRNTENoZWNrLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9GcmVkL0pTTGludC5wbTwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvRnJlZC9TZXNzaW9uRHVtcC5wbTwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvRnJlZC9TVERFUlJMb2cucG08L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL091dHB1dC9IVE1ML0ZyZWQvU1FMTG9nLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9GcmVkL1RyYW5zbGF0aW9uRGVidWcucG08L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9EZXZlbEZyZWRDb25maWdMb2cudHQ8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9EZXZlbEZyZWRDb25maWdTd2l0Y2gudHQ8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL091dHB1dC9IVE1ML1RlbXBsYXRlcy9TdGFuZGFyZC9EZXZlbEZyZWRDb25zb2xlLnR0PC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvRGV2ZWxGcmVkQ29udGFpbmVyLnR0PC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvRGV2ZWxGcmVkRW52RHVtcC50dDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0RldmVsRnJlZEhUTUxDaGVjay50dDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0RldmVsRnJlZEpTTGludC50dDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0RldmVsRnJlZFNlc3Npb25EdW1wLnR0PC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9PdXRwdXQvSFRNTC9UZW1wbGF0ZXMvU3RhbmRhcmQvRGV2ZWxGcmVkU2V0dGluZy50dDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0RldmVsRnJlZFNRTExvZy50dDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0RldmVsRnJlZFNUREVSUkxvZy50dDwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvT3V0cHV0L0hUTUwvVGVtcGxhdGVzL1N0YW5kYXJkL0RldmVsRnJlZFRyYW5zbGF0aW9uRGVidWcudHQ8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL1N5c3RlbS9GcmVkL0NvbmZpZ0xvZy5wbTwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvU3lzdGVtL0ZyZWQvQ29uZmlnU3dpdGNoLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9TeXN0ZW0vRnJlZC9Db25zb2xlLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9TeXN0ZW0vRnJlZC9FbnZEdW1wLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9TeXN0ZW0vRnJlZC9IVE1MQ2hlY2sucG08L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL1N5c3RlbS9GcmVkL0pTTGludC5wbTwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvU3lzdGVtL0ZyZWQvU2Vzc2lvbkR1bXAucG08L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgS2VybmVsL1N5c3RlbS9GcmVkL1NRTExvZy5wbTwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSBLZXJuZWwvU3lzdGVtL0ZyZWQvU1RERVJSTG9nLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIEtlcm5lbC9TeXN0ZW0vRnJlZC9UcmFuc2xhdGlvbkRlYnVnLnBtPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5GcmVkLmpzPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIHZhci9odHRwZC9odGRvY3MvanMvQ29yZS5GcmVkLkhUTUxDaGVjay5qczwvcGFyYT48L2xpc3RpdGVtPjxsaXN0aXRlbT48cGFyYT4oNjYwKSB2YXIvaHR0cGQvaHRkb2NzL2pzL0NvcmUuRnJlZC5KU0xpbnQuanM8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgdmFyL2h0dHBkL2h0ZG9jcy9qcy90aGlyZHBhcnR5L2pzbGludC9qc2xpbnQuanM8L3BhcmE+PC9saXN0aXRlbT48bGlzdGl0ZW0+PHBhcmE+KDY2MCkgdmFyL2h0dHBkL2h0ZG9jcy9za2lucy9BZ2VudC9kZWZhdWx0L2Nzcy9Db3JlLkZyZWQuY3NzPC9wYXJhPjwvbGlzdGl0ZW0+PGxpc3RpdGVtPjxwYXJhPig2NjApIHZhci9odHRwZC9odGRvY3Mvc2tpbnMvQ3VzdG9tZXIvZGVmYXVsdC9jc3MvQ29yZS5GcmVkLmNzczwvcGFyYT48L2xpc3RpdGVtPjwvaXRlbWl6ZWRsaXN0PgoKICAgICAgICA8L3BhcmE+CiAgICA8L3NlY3QxPgo8L2NoYXB0ZXI+Cgo8Y2hhcHRlcj4KICAgIDx0aXRsZT5DaGFuZ2VMb2c8L3RpdGxlPgogICAgPHBhcmE+CiAgICA8aXRlbWl6ZWRsaXN0Pjx0aXRsZT4xMC4wLjIgLyAyMDIwLTA1LTIyIDA3OjI0OjI4PC90aXRsZT48bGlzdGl0ZW0+PHBhcmE+Rml4ZWQgRnJlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L3BhcmE+PC9saXN0aXRlbT48L2l0ZW1pemVkbGlzdD4KPGl0ZW1pemVkbGlzdD48dGl0bGU+MTAuMC4xIC8gMjAyMC0wNS0xNCAxNDoxMDoxNzwvdGl0bGU+PGxpc3RpdGVtPjxwYXJhPkluaXRpYWwgT1RPQk8gUmVsZWFzZS48L3BhcmE+PC9saXN0aXRlbT48L2l0ZW1pemVkbGlzdD4KCiAgICA8L3BhcmE+CjwvY2hhcHRlcj4KCjwvYm9vaz4K
IyBPVE9CTyBjb25maWcgZmlsZSAoYXV0b21hdGljYWxseSBnZW5lcmF0ZWQpCiMgVkVSU0lPTjoxLjEKIyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6Q29uZmlnOjpGaWxlczo6QUFBRnJlZDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKbm8gd2FybmluZ3MgJ3JlZGVmaW5lJzsgICAgIyMgbm8gY3JpdGljCgp1c2UgdmFycyBxdygkU2VsZik7Cgp1c2UgS2VybmVsOjpDb25maWc6OkRlZmF1bHRzOwp1c2UgS2VybmVsOjpMYW5ndWFnZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpDb25maWdMb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6RnJlZDo6U1FMTG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OkZyZWQ6OlRyYW5zbGF0aW9uRGVidWc7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgTG9hZCB7CiAgICBteSAoICRGaWxlLCAkU2VsZiApID0gQF87CgogICAgaWYgKCAkRU5We0hUVFBfVVNFUl9BR0VOVH0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgdGhlIG5lZWRlZCBwYXRoIGlzIGF2YWlsYWJsZQogICAgICAgIG15ICRQYXRoID0gJFNlbGYtPntIb21lfSAuICcvdmFyL2ZyZWQnOwogICAgICAgIGlmICggIS1lICRQYXRoICkgewogICAgICAgICAgICBta2RpciAkUGF0aDsKICAgICAgICB9CgogICAgICAgIG15ICRGaWxlID0gJFNlbGYtPntIb21lfSAuICcvdmFyL2ZyZWQvU1RERVJSLmxvZyc7CgogICAgICAgICMgY2hlY2sgbG9nIGZpbGUgc2l6ZQogICAgICAgIGlmICggLXMgJEZpbGUgPiAyMCAqIDEwMjQgKiAxMDI0ICkgewogICAgICAgICAgICB1bmxpbmsgJEZpbGU7CiAgICAgICAgfQoKICAgICAgICAjIG1vdmUgU1RET1VUIHRvIHRtcCBmaWxlCiAgICAgICAgaWYgKCAhb3BlbiBTVERFUlIsICc+PicsICRGaWxlICkgeyAgICAjIyBubyBjcml0aWMKICAgICAgICAgICAgcHJpbnQgU1RERVJSICJFUlJPUjogQ2FuJ3Qgd3JpdGUgJEZpbGUhIjsKICAgICAgICB9CiAgICB9CgogICAgIyBkaXNhYmxlIHJlZGVmaW5lIHdhcm5pbmdzIGluIHRoaXMgc2NvcGUKICAgIHsKICAgICAgICBubyB3YXJuaW5ncyAncmVkZWZpbmUnOyAgICAgICAgICAgICAgICMjIG5vIGNyaXRpYwoKICAgICAgICAjIE92ZXJyaWRlIEtlcm5lbDo6TGFuZ3VhZ2U6OkdldCgpIG1ldGhvZCB0byBpbnRlcmNlcHQgbWlzc2luZyB0cmFuc2xhdGlvbnMKICAgICAgICBpZiAoIEtlcm5lbDo6TGFuZ3VhZ2UtPmNhbignR2V0JykgJiYgIUtlcm5lbDo6TGFuZ3VhZ2UtPmNhbignR2V0T3JpZ2luYWwnKSApIHsKICAgICAgICAgICAgKktlcm5lbDo6TGFuZ3VhZ2U6OkdldE9yaWdpbmFsID0gXCZLZXJuZWw6Okxhbmd1YWdlOjpHZXQ7CiAgICAgICAgICAgICpLZXJuZWw6Okxhbmd1YWdlOjpHZXQgICAgICAgICA9IHN1YiB7CiAgICAgICAgICAgICAgICBteSAoICRTZWxmLCAkV2hhdCApID0gQF87CgogICAgICAgICAgICAgICAgcmV0dXJuICAgIGlmICFkZWZpbmVkICRXaGF0OwogICAgICAgICAgICAgICAgcmV0dXJuICcnIGlmICRXaGF0IGVxICcnOwoKICAgICAgICAgICAgICAgIG15ICRSZXN1bHQgPSAkU2VsZi0+R2V0T3JpZ2luYWwoJFdoYXQpOwoKICAgICAgICAgICAgICAgIGlmICggJFdoYXQgJiYgJFdoYXQgPX4gL14oLis/KSIsXHN7MCwxfSIoLio/KSQvICkgewogICAgICAgICAgICAgICAgICAgICRXaGF0ID0gJDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntUcmFuc2xhdGlvbn0tPnskV2hhdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntUcmFuc2xhdGlvbkRlYnVnT2JqZWN0fSB8fD0gS2VybmVsOjpTeXN0ZW06OkZyZWQ6OlRyYW5zbGF0aW9uRGVidWctPm5ldygpOwogICAgICAgICAgICAgICAgICAgICRTZWxmLT57VHJhbnNsYXRpb25EZWJ1Z09iamVjdH0tPkluc2VydFdvcmQoIFdoYXQgPT4gJFdoYXQgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgT3ZlcnJpZGUgS2VybmVsOjpMYW5ndWFnZTo6VHJhbnNsYXRlKCkgbWV0aG9kIHRvIGludGVyY2VwdCBtaXNzaW5nIHRyYW5zbGF0aW9ucwogICAgICAgIGlmICggS2VybmVsOjpMYW5ndWFnZS0+Y2FuKCdUcmFuc2xhdGUnKSAmJiAhS2VybmVsOjpMYW5ndWFnZS0+Y2FuKCdUcmFuc2xhdGVPcmlnaW5hbCcpICkgewogICAgICAgICAgICAqS2VybmVsOjpMYW5ndWFnZTo6VHJhbnNsYXRlT3JpZ2luYWwgPSBcJktlcm5lbDo6TGFuZ3VhZ2U6OlRyYW5zbGF0ZTsKICAgICAgICAgICAgKktlcm5lbDo6TGFuZ3VhZ2U6OlRyYW5zbGF0ZSAgICAgICAgID0gc3ViIHsKICAgICAgICAgICAgICAgIG15ICggJFNlbGYsICRUZXh0LCBAUGFyYW1ldGVycyApID0gQF87CgogICAgICAgICAgICAgICAgaWYgKCAkVGV4dCAmJiAhJFNlbGYtPntUcmFuc2xhdGlvbn0tPnskVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntUcmFuc2xhdGlvbkRlYnVnT2JqZWN0fSB8fD0gS2VybmVsOjpTeXN0ZW06OkZyZWQ6OlRyYW5zbGF0aW9uRGVidWctPm5ldygpOwogICAgICAgICAgICAgICAgICAgICRTZWxmLT57VHJhbnNsYXRpb25EZWJ1Z09iamVjdH0tPkluc2VydFdvcmQoIFdoYXQgPT4gJFRleHQgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPlRyYW5zbGF0ZU9yaWdpbmFsKCAkVGV4dCwgQFBhcmFtZXRlcnMgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgT3ZlcnJpZGUgS2VybmVsOjpTeXN0ZW06OkRCOjpQcmVwYXJlKCkgbWV0aG9kIHRvIGludGVyY2VwdCBkYXRhYmFzZSBjYWxscwogICAgICAgIGlmICggS2VybmVsOjpTeXN0ZW06OkRCLT5jYW4oJ1ByZXBhcmUnKSAmJiAhS2VybmVsOjpTeXN0ZW06OkRCLT5jYW4oJ1ByZXBhcmVPcmlnaW5hbCcpICkgewogICAgICAgICAgICAqS2VybmVsOjpTeXN0ZW06OkRCOjpQcmVwYXJlT3JpZ2luYWwgPSBcJktlcm5lbDo6U3lzdGVtOjpEQjo6UHJlcGFyZTsKICAgICAgICAgICAgKktlcm5lbDo6U3lzdGVtOjpEQjo6UHJlcGFyZSAgICAgICAgID0gc3ViIHsKICAgICAgICAgICAgICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgICAgICAgICAgICAgJFNlbGYtPntTUUxMb2dPYmplY3R9IHx8PSBLZXJuZWw6OlN5c3RlbTo6RnJlZDo6U1FMTG9nLT5uZXcoKTsKICAgICAgICAgICAgICAgICRTZWxmLT57U1FMTG9nT2JqZWN0fS0+UHJlU3RhdGVtZW50KCVQYXJhbSk7CiAgICAgICAgICAgICAgICBteSAkUmVzdWx0ID0gJFNlbGYtPlByZXBhcmVPcmlnaW5hbCglUGFyYW0pOwogICAgICAgICAgICAgICAgJFNlbGYtPntTUUxMb2dPYmplY3R9LT5Qb3N0U3RhdGVtZW50KCVQYXJhbSk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRSZXN1bHQ7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIE92ZXJyaWRlIEtlcm5lbDo6U3lzdGVtOjpEQjo6RG8oKSBtZXRob2QgdG8gaW50ZXJjZXB0IGRhdGFiYXNlIGNhbGxzCiAgICAgICAgaWYgKCBLZXJuZWw6OlN5c3RlbTo6REItPmNhbignRG8nKSAmJiAhS2VybmVsOjpTeXN0ZW06OkRCLT5jYW4oJ0RvT3JpZ2luYWwnKSApIHsKICAgICAgICAgICAgKktlcm5lbDo6U3lzdGVtOjpEQjo6RG9PcmlnaW5hbCA9IFwmS2VybmVsOjpTeXN0ZW06OkRCOjpEbzsKICAgICAgICAgICAgKktlcm5lbDo6U3lzdGVtOjpEQjo6RG8gICAgICAgICA9IHN1YiB7CiAgICAgICAgICAgICAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICAgICAgICAgICAgICRTZWxmLT57U1FMTG9nT2JqZWN0fSB8fD0gS2VybmVsOjpTeXN0ZW06OkZyZWQ6OlNRTExvZy0+bmV3KCk7CiAgICAgICAgICAgICAgICAkU2VsZi0+e1NRTExvZ09iamVjdH0tPlByZVN0YXRlbWVudCglUGFyYW0pOwogICAgICAgICAgICAgICAgbXkgJFJlc3VsdCA9ICRTZWxmLT5Eb09yaWdpbmFsKCVQYXJhbSk7CiAgICAgICAgICAgICAgICAkU2VsZi0+e1NRTExvZ09iamVjdH0tPlBvc3RTdGF0ZW1lbnQoJVBhcmFtKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgICMgT3ZlcnJpZGUgS2VybmVsOjpDb25maWc6OkdldCgpIG1ldGhvZCB0byBpbnRlcmNlcHQgY29uZmlnIHN0cmluZ3MKICAgICAgICBpZiAoIEtlcm5lbDo6Q29uZmlnOjpEZWZhdWx0cy0+Y2FuKCdHZXQnKSAmJiAhS2VybmVsOjpDb25maWc6OkRlZmF1bHRzLT5jYW4oJ0dldE9yaWdpbmFsJykgKSB7CiAgICAgICAgICAgICpLZXJuZWw6OkNvbmZpZzo6RGVmYXVsdHM6OkdldE9yaWdpbmFsID0gXCZLZXJuZWw6OkNvbmZpZzo6RGVmYXVsdHM6OkdldDsKICAgICAgICAgICAgKktlcm5lbDo6Q29uZmlnOjpEZWZhdWx0czo6R2V0ICAgICAgICAgPSBzdWIgewogICAgICAgICAgICAgICAgbXkgKCAkU2VsZiwgJFdoYXQgKSA9IEBfOwoKICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnTG9nT2JqZWN0fSB8fD0gS2VybmVsOjpTeXN0ZW06OkZyZWQ6OkNvbmZpZ0xvZy0+bmV3KCk7CiAgICAgICAgICAgICAgICBteSAkQ2FsbGVyID0gY2FsbGVyKCk7CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57JFdoYXR9ICkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnTG9nT2JqZWN0fS0+SW5zZXJ0V29yZCgKICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAiJFdoYXQ7VHJ1ZTskQ2FsbGVyOyIsCiAgICAgICAgICAgICAgICAgICAgICAgIEhvbWUgPT4gJFNlbGYtPntIb21lfQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0NvbmZpZ0xvZ09iamVjdH0tPkluc2VydFdvcmQoCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gIiRXaGF0O0ZhbHNlOyRDYWxsZXI7IiwKICAgICAgICAgICAgICAgICAgICAgICAgSG9tZSA9PiAkU2VsZi0+e0hvbWV9CiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPkdldE9yaWdpbmFsKCRXaGF0KTsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm47Cn0KCjE7Cg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6T3V0cHV0OjpGaWx0ZXJDb250ZW50IyMjRnJlZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TdWJzY3JpYmUgdGhlIG91dHB1dCBmaWx0ZXIgYXQgdGhlIHN5c3RlbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpPdXRwdXRGaWx0ZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6RmlsdGVyQ29udGVudDo6RnJlZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVidWciPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRlbXBsYXRlcyI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQUxMIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzAwMC1GcmVkIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT50aGlyZHBhcnR5L2pzbGludC9qc2xpbnQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkZyZWQuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkZyZWQuSlNMaW50LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5GcmVkLkhUTUxDaGVjay5qczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpDdXN0b21lcjo6Q29tbW9uSlMjIyMwMDAtRnJlZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5MaXN0IG9mIEpTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QmFzZTo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+dGhpcmRwYXJ0eS9qc2xpbnQvanNsaW50LmpzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5GcmVkLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5GcmVkLkpTTGludC5qczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuRnJlZC5IVE1MQ2hlY2suanM8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6QWdlbnQ6OkNvbW1vbkNTUyMjIzAwMC1GcmVkIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QmFzZTo6TG9hZGVyPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+Q29yZS5GcmVkLmNzczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iTG9hZGVyOjpDdXN0b21lcjo6Q29tbW9uQ1NTIyMjMDAwLUZyZWQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TGlzdCBvZiBDU1MgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGN1c3RvbWVyIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpCYXNlOjpMb2FkZXI8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5Db3JlLkZyZWQuY3NzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcmVkOjpDb25zb2xlV2lkdGgiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgd2lkdGggb2YgdGhlIEZyZWQgY29uc29sZSBpbiBwZXJjZW50LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPjUwJTwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6Q29uc29sZUhlaWdodCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBoZWlnaHQgb2YgdGhlIEZyZWQgY29uc29sZSBpbiBwaXhlbC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkZyZWQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj4yMDBweDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6Q29uc29sZU9wYWNpdHkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgb3BhY2l0eSBvZiB0aGUgRnJlZCBjb25zb2xlLCBlLmcuIDAuOSBmb3IgMTAlIHRyYW5zcGFyZW5jeS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkZyZWQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IlN0cmluZyIgVmFsdWVSZWdleD0iIj4wLjk8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyZWQ6OkFjdGl2ZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGlmIGZyZWQgaXMgdmlzaWJsZSBvciBoaWRkZW4uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpGcmVkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTZWxlY3QiIFNlbGVjdGVkSUQ9IjEiPgogICAgICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJPcHRpb24iIFZhbHVlPSIxIiBUcmFuc2xhdGFibGU9IjEiPlNob3c8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiIFRyYW5zbGF0YWJsZT0iMSI+SGlkZTwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcmVkOjpNb2R1bGUjIyNDb25zb2xlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlR1cm4gb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBmcmVkIGNvbnNvbGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpGcmVkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcmVkOjpNb2R1bGUjIyNTUUxMb2ciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VHVybiBvbiBpZiB5b3Ugd2FudCBhbiByZWFsdGltZSBTUUwgc3RhdGVtZW50IGxvZyBmdW5jdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkZyZWQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aXZlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+U2hvd3MgYSBsaXN0IG9mIGFsbCBTUUwgc3RhdGVtZW50cyBleGVjdXRlZCBpbiB0aGlzIGNhbGwuPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyZWQ6Ok1vZHVsZSMjI0hUTUxDaGVjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UdXJuIG9uIGlmIHlvdSB3YW50IGFuIHJlYWx0aW1lIEhUTUwtY2hlY2tlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkZyZWQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aXZlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+VmFsaWRhdGVzIHRoZSBIVE1MIGluIHRoaXMgY2FsbC48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6TW9kdWxlIyMjSlNMaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlR1cm4gb24gaWYgeW91IHdhbnQgYSBKYXZhU2NyaXB0IGNvZGUgcXVhbGl0eSBjaGVja2VyLiBPbmx5IHdvcmtzIGluIENWUyBIZWFkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RnJlZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3RpdmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5WYWxpZGF0ZXMgdGhlIEpTIGluIHRoaXMgY2FsbCBhbmQgc2hvd3MgZXJyb3JzIGFuZCBub3RpY2VzLjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcmVkOjpNb2R1bGUjIyNUcmFuc2xhdGlvbkRlYnVnIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlR1cm4gb24gaWYgeW91IHdhbnQgdGhlIHRyYW5zbGF0aW9uIGRlYnVnZ2VyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RnJlZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3RpdmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5TaG93cyBhIGxpc3Qgb2YgdW50cmFuc2xhdGVkIHN0cmluZ3MuIFBsZWFzZSBub3RlIHRoYXQgc3RyaW5ncyBmcm9tIGZyYW1ld29yayBBTkQgY3VzdG9tIG1vZHVsZXMgd2lsbCBiZSBzaG93bi48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6TW9kdWxlIyMjQ29uZmlnTG9nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlR1cm4gb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBjb25maWcgbG9nIG1lY2hhbmlzbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkZyZWQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aXZlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+TGlzdHMgYWxsIGNvbmZpZ3VyYXRpb24gaXRlbXMgd2hpY2ggd2VyZSB1c2VkIGluIHRoaXMgY2FsbCAoYW5kIGhvdyBvZnRlbiB0aGV5IHdlcmUgY2FsbGVkKS48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6TW9kdWxlIyMjQ29uZmlnU3dpdGNoIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlR1cm4gb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBjb25maWcgc3dpdGNoIG1lY2hhbmlzbS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkZyZWQ8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aXZlIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+U3dpdGNoIG9uIG9yIG9mZiBzb21lIG9mdGVuIG5lZWRlZCBjb25maWcgaXRlbXMgZGlyZWN0bHkgaW4gRnJlZC48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6TW9kdWxlIyMjU1RERVJSTG9nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlR1cm4gb24gaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBTVERFUlJMb2cuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpGcmVkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPkxpc3RzIGVudHJpZXMgZnJvbSB0aGUgU1RERVJSIGxvZy48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6U1RERVJSTG9nRmlsdGVyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlR1cm4gb24gaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSBvdXRwdXQgb2YgdGhlIFNUREVSUkxvZy4gWW91IGNhbiBhZGQgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmlsdGVyIHRoZSBvdXRwdXQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpGcmVkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+OiBbIF0gU3Vicm91dGluZSBbIF0gW19hLXpBLVowLTldKyBbIF0gcmVkZWZpbmVkIFsgXSBhdCBbIF0gLisgWyBdIGxpbmUgWyBdIFxkKyBcLjwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6TW9kdWxlIyMjU2Vzc2lvbkR1bXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VHVybiBvbiBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIGRhdGEgaW4gdGhlIHNlcnZlcnNpZGUgc2Vzc2lvbiBvYmplY3QuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpGcmVkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPkR1bXBzIG91dCBhbGwgc2Vzc2lvbiB2YXJpYWJsZXMuPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyZWQ6Ok1vZHVsZSMjI0VudkR1bXAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VHVybiBvbiBpZiB5b3Ugd2FudCB0byBzZWUgdGhlIGRhdGEgaW4gdGhlIGVudmlyb25tZW50IG9mIHRoZSBsYXlvdXQgb2JqZWN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RnJlZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3RpdmUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5EdW1wcyBvdXQgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcy48L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0RldmVsRnJlZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgZGV2ZWwgZnJlZCBvYmplY3QgaW4gdGhlIGFkbWluIGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6QWRtaW46Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5BZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5GcmVkLURldmVsb3BlcnRvb2xzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iQ3VzdG9tZXJGcm9udGVuZDo6TW9kdWxlIyMjRGV2ZWxGcmVkIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBjdXN0b21lciBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVuZDo6Q3VzdG9tZXI6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5BZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5GcmVkLURldmVsb3BlcnRvb2xzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iUHVibGljRnJvbnRlbmQ6Ok1vZHVsZSMjI0RldmVsRnJlZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgcHVibGljIGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpQdWJsaWM6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cFJvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5BZG1pbjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj5GcmVkLURldmVsb3BlcnRvb2xzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+QWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iRnJlZDo6Q29uZmlnTG9nIyMjT3JkZXJCeSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5XaGljaCBvcmRlciBzaG91bGQgdGhlIGNvbmZpZyBsb2cgZGF0YSBoYXZlPzwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RnJlZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU2VsZWN0IiBTZWxlY3RlZElEPSIzIj4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMyI+Q2FsbHM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9Ik9wdGlvbiIgVmFsdWU9IjAiPkNvbmZpZzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iT3B0aW9uIiBWYWx1ZT0iMiI+UGFja2FnZTwvSXRlbT4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcmVkOjpDb25maWdTd2l0Y2gjIyNTZXR0aW5ncyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5MaXN0IG9mIGNvbmZpZyBzZXR0aW5ncyB3aGljaCBzaG91bGQgYmUgYXZhaWxhYmxlIGZvciBxdWljayBzd2l0Y2guIFBsZWFzZSBhZGQgb25seSBzZXR0aW5ncyB3aXRoIHBvc3NpYmxlIHZhbHVlcyAwIG9yIDEgKE5vL1llcykuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpGcmVkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+RnJvbnRlbmQ6OlJpY2hUZXh0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+RnJvbnRlbmQ6OkRlYnVnTW9kZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkZyb250ZW5kOjpUZW1wbGF0ZUNhY2hlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+RnJvbnRlbmQ6Ok1lbnVEcmFnRHJvcEVuYWJsZWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5UaWNrZXRBQ0w6OkRlYnVnOjpFbmFibGVkPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0OjpGcm9udGVuZDo6TmVlZFNwZWxsQ2hlY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5UaWNrZXQ6OlJlc3BvbnNpYmxlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0OjpUeXBlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0OjpTZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0OjpXYXRjaGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+VGlja2V0OjpVc2VBcnRpY2xlQ29sb3JzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+Q2hlY2tNWFJlY29yZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPkNoZWNrRW1haWxBZGRyZXNzZXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5TZXNzaW9uVXNlQ29va2llPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+TG9hZGVyOjpFbmFibGVkOjpDU1M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbT5Mb2FkZXI6OkVuYWJsZWQ6OkpTPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+T3Blbk1haW5NZW51T25Ib3ZlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPlNlY3VyZU1vZGU8L0l0ZW0+CiAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkZyZWQ6OlN5c3RlbU5hbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Q3VzdG9taXphYmxlIHN5c3RlbSBuYW1lLiBJZiBlbXB0eSwgY29uZmlnIGl0ZW0gJ0hvbWUnIGlzIGJlaW5nIHVzZWQgZm9yIGRpc3BsYXkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpGcmVkPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJTdHJpbmciIFZhbHVlUmVnZXg9IiI+PC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcmVkOjpCYWNrZ3JvdW5kQ29sb3IiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIHN5dGVtIG5hbWUgYm94LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6RnJlZDwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0iU3RyaW5nIiBWYWx1ZVJlZ2V4PSIiPiNENjM1MzU8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCjwvb3RvYm9fY29uZmlnPgo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6RGV2ZWxGcmVkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICRPYmplY3RNYW5hZ2VyRGlzYWJsZWQgPSAxOwoKdXNlIEtlcm5lbDo6TGFuZ3VhZ2UgcXcoVHJhbnNsYXRhYmxlKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgJFNlbGYtPntTdWJhY3Rpb259ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1YmFjdGlvbicgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgdGhlIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKICAgIGlmICggISRTZWxmLT57U3ViYWN0aW9ufSApIHsKICAgICAgICBteSAkVmVyc2lvbiA9ICRDb25maWdPYmplY3QtPkdldCgnVmVyc2lvbicpOwoKICAgICAgICAkTGF5b3V0T2JqZWN0LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICdTb3JyeSwgdGhpcyBwYWdlIGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudCEnLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZmFzdCBoYW5kbGUgZm9yIGZyZWQgc2V0dGluZ3MKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2V0dGluZycgKSB7CgogICAgICAgICMgZ2V0IGhhc2hyZWYgd2l0aCBhbGwgRnJlZC1wbHVnaW5zCiAgICAgICAgbXkgJE1vZHVsZUZvclJlZiA9ICRDb25maWdPYmplY3QtPkdldCgnRnJlZDo6TW9kdWxlJyk7CgogICAgICAgICMgVGhlIENvbnNvbGUgY2FuJ3QgYmUgZGVhY3RpdmF0ZWQKICAgICAgICBkZWxldGUgJE1vZHVsZUZvclJlZi0+e0NvbnNvbGV9OwoKICAgICAgICAjIGxvb3Agb3ZlciBNb2R1bGVzIHdoaWNoIGNhbiBiZSBhY3RpdmF0ZWQgYW5kIGRlYWN0aXZhdGVkCiAgICAgICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJXskTW9kdWxlRm9yUmVmfSApIHsKICAgICAgICAgICAgbXkgJENoZWNrZWQgPSAkTW9kdWxlRm9yUmVmLT57JE1vZHVsZX0tPntBY3RpdmV9ID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnOwogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0ZyZWRNb2R1bGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgRnJlZE1vZHVsZSAgPT4gJE1vZHVsZSwKICAgICAgICAgICAgICAgICAgICBDaGVja2VkICAgICA9PiAkQ2hlY2tlZCwKICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAkTW9kdWxlRm9yUmVmLT57JE1vZHVsZX0tPntEZXNjcmlwdGlvbn0gfHwgJycsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBQcm92aWRlIGEgbGluayB0byB0aGUgU3lzQ29uZmlnIG9ubHkgZm9yIHBsdWdpbnMgdGhhdCBoYXZlIGNvbmZpZyBvcHRpb25zCiAgICAgICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCJGcmVkOjokTW9kdWxlIikgKSB7CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDb25maWcnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBNb2R1bGVOYW1lID0+ICRNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBvdXRwdXQKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiAnRnJlZC1TZXR0aW5nJywKICAgICAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnRGV2ZWxGcmVkU2V0dGluZycsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigKICAgICAgICAgICAgVHlwZSA9PiAnU21hbGwnLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGZhc3QgaGFuZGxlIGZvciBmcmVkIHNldHRpbmdzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NldHRpbmdBY3Rpb24nICkgewogICAgICAgIG15ICRNb2R1bGVGb3JSZWYgICAgICAgID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcmVkOjpNb2R1bGUnKTsKICAgICAgICBteSBAU2VsZWN0ZWRGcmVkTW9kdWxlcyA9ICRQYXJhbU9iamVjdC0+R2V0QXJyYXkoIFBhcmFtID0+ICdGcmVkTW9kdWxlJyApOwogICAgICAgIG15ICVTZWxlY3RlZE1vZHVsZXMgICAgID0gbWFwIHsgJF8gPT4gMTsgfSBAU2VsZWN0ZWRGcmVkTW9kdWxlczsKICAgICAgICBteSAkVXBkYXRlRmxhZzsKICAgICAgICBkZWxldGUgJE1vZHVsZUZvclJlZi0+e0NvbnNvbGV9OwoKICAgICAgICBmb3IgbXkgJE1vZHVsZSAoIHNvcnQga2V5cyAleyRNb2R1bGVGb3JSZWZ9ICkgewoKICAgICAgICAgICAgIyB1cGRhdGUgdGhlIHN5c2NvbmZpZyBzZXR0aW5ncwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkTW9kdWxlRm9yUmVmLT57JE1vZHVsZX0tPntBY3RpdmV9ICYmICEkU2VsZWN0ZWRNb2R1bGVzeyRNb2R1bGV9CiAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICAgISRNb2R1bGVGb3JSZWYtPnskTW9kdWxlfS0+e0FjdGl2ZX0gJiYgJFNlbGVjdGVkTW9kdWxlc3skTW9kdWxlfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAjIHVwZGF0ZSBjZXJ0YWluIHZhbHVlcwogICAgICAgICAgICAgICAgJE1vZHVsZUZvclJlZi0+eyRNb2R1bGV9LT57QWN0aXZlfSA9ICRTZWxlY3RlZE1vZHVsZXN7JE1vZHVsZX0gfHwgMDsKCiAgICAgICAgICAgICAgICAkU2VsZi0+X1NldHRpbmdVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAiRnJlZDo6TW9kdWxlIyMjJE1vZHVsZSIsCiAgICAgICAgICAgICAgICAgICAgVmFsdWUgPT4gJE1vZHVsZUZvclJlZi0+eyRNb2R1bGV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRVcGRhdGVGbGFnID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlBvcHVwQ2xvc2UoCiAgICAgICAgICAgIFJlbG9hZCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgaGFuZGxlIGZvciBjb25maWcgc3dpdGNoCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NvbmZpZ1N3aXRjaEFKQVgnICkgewoKICAgICAgICBteSAkSXRlbUtleSAgID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0tleScgKTsKICAgICAgICBteSAkSXRlbVZhbHVlID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZhbHVlJyApOwoKICAgICAgICBteSAkU3VjY2VzcyA9IDA7CgogICAgICAgIGlmICgkSXRlbUtleSkgewoKICAgICAgICAgICAgIyB0aGUgdmFsdWUgd2hpY2ggaXMgcGFzc2VkIGlzIHRoZSBjdXJyZW50IHZhbHVlLCBzbyB3ZQogICAgICAgICAgICAjIG5lZWQgdG8gc3dpdGNoIGl0LgogICAgICAgICAgICBpZiAoICRJdGVtVmFsdWUgPT0gMSApIHsKICAgICAgICAgICAgICAgICRJdGVtVmFsdWUgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEl0ZW1WYWx1ZSA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT5fU2V0dGluZ1VwZGF0ZSgKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICAgICBLZXkgICA9PiAkSXRlbUtleSwKICAgICAgICAgICAgICAgIFZhbHVlID0+ICRJdGVtVmFsdWUsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTdWNjZXNzID0gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0nIC4gJExheW91dE9iamVjdC0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU3VjY2VzcywKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9TZXR0aW5nVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFN5c0NvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTeXNDb25maWcnKTsKCiAgICBteSAkU2V0dGluZ05hbWUgPSAnU2VjdXJlTW9kZSc7CgogICAgbXkgJEV4Y2x1c2l2ZUxvY2tHVUlEID0gJFN5c0NvbmZpZ09iamVjdC0+U2V0dGluZ0xvY2soCiAgICAgICAgTmFtZSAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgIEZvcmNlICA9PiAxLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIFVwZGF0ZSBjb25maWcgaXRlbSB2aWEgU3lzQ29uZmlnIG9iamVjdC4KICAgIG15ICRSZXN1bHQgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nVXBkYXRlKAogICAgICAgIE5hbWUgICAgICAgICAgICAgID0+ICRQYXJhbXtLZXl9LAogICAgICAgIElzVmFsaWQgICAgICAgICAgID0+ICRQYXJhbXtWYWxpZH0sCiAgICAgICAgRWZmZWN0aXZlVmFsdWUgICAgPT4gJFBhcmFte1ZhbHVlfSwKICAgICAgICBFeGNsdXNpdmVMb2NrR1VJRCA9PiAkRXhjbHVzaXZlTG9ja0dVSUQsCiAgICAgICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKICAgICk7CgogICAgaWYgKCAhJFJlc3VsdCApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPkZhdGFsRXJyb3IoCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdDYW5cJ3Qgd3JpdGUgQ29uZmlnIGZpbGUhJyksCiAgICAgICAgKTsKICAgIH0KCiAgICAjIFRoZXJlIGlzIG5vIG5lZWQgdG8gdW5sb2NrIHRoZSBzZXR0aW5nIGFzIGl0IHdhcyBhbHJlYWR5IHVubG9ja2VkIGluIHRoZSB1cGRhdGUuCgogICAgIyAnUmVidWlsZCcgdGhlIGNvbmZpZ3VyYXRpb24uCiAgICBteSAkU3VjY2VzcyA9ICRTeXNDb25maWdPYmplY3QtPkNvbmZpZ3VyYXRpb25EZXBsb3koCiAgICAgICAgQ29tbWVudHMgICAgPT4gIkluc3RhbGxlciBkZXBsb3ltZW50IiwKICAgICAgICBBbGxTZXR0aW5ncyA9PiAxLAogICAgICAgIEZvcmNlICAgICAgID0+IDEsCiAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGaWx0ZXJDb250ZW50OjpGcmVkOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgVVJJOjpFc2NhcGU7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkZyZWQnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6T3V0cHV0OjpIVE1MOjpGaWx0ZXJDb250ZW50OjpGcmVkCgo9aGVhZDEgU1lOT1BTSVMKCmEgb3V0cHV0IGZpbHRlciBtb2R1bGUgc3BlY2lhbGx5IGZvciBkZXZlbG9wZXIKCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVyaGFwcyBubyBvdXRwdXQgaXMgZ2VuZXJhdGVkCiAgICBkaWUgJ0ZyZWQ6IEF0IHRoZSBtb21lbnQsIHlvdXIgY29kZSBnZW5lcmF0ZXMgbm8gb3V0cHV0IScgaWYgISRQYXJhbXtEYXRhfTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgIyBkbyBub3Qgc2hvdyB0aGUgZGVidWcgYmFyIGluIEZyZWQncyBzZXR0aW5nIHdpbmRvdwogICAgaWYgKCAkTGF5b3V0T2JqZWN0LT57QWN0aW9ufSAmJiAkTGF5b3V0T2JqZWN0LT57QWN0aW9ufSBlcSAnRGV2ZWxGcmVkJyApIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGRvIG5vdGhpbmcgaWYgb3V0cHV0IGlzIGFuIGF0dGFjaG1lbnQgZG93bmxvYWQgb3IgQUpBWCByZXF1ZXN0CiAgICBpZiAoCiAgICAgICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gL15Db250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50Oy9taQogICAgICAgIHx8ICR7ICRQYXJhbXtEYXRhfSB9ID1+IC9eQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOy9taQogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGRvIG5vdGhpbmcgaWYgaXQgaXMgYSByZWRpcmVjdAogICAgaWYgKAogICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IC9eU3RhdHVzOiAzMDIgTW92ZWQvbWkKICAgICAgICAmJiAkeyAkUGFyYW17RGF0YX0gfSA9fiAvXmxvY2F0aW9uOi9taQogICAgICAgICYmIGxlbmd0aCggJHsgJFBhcmFte0RhdGF9IH0gKSA8IDgwMAogICAgICAgICkKICAgIHsKICAgICAgICBwcmludCBTVERFUlIgIlJFRElSRUNUXG4iOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgZG8gbm90aGluZyBpZiBpdCBpcyBmcmVkIGl0IHNlbGYKICAgIGlmICggJHsgJFBhcmFte0RhdGF9IH0gPX4gbXtGcmVkLVNldHRpbmc8XC90aXRsZT59bXN4ICkgewogICAgICAgIHByaW50IFNUREVSUiAiQ0hBTkdFIEZSRUQgU0VUVElOR1xuIjsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAjIGRvIG5vdGhpbmcgaWYgaXQgZG9lcyBub3QgY29udGFpbiB0aGUgPGh0bWw+IGVsZW1lbnQsIG1pZ2h0IGJlCiAgICAjIGFuIGVtYmVkZGVkIGxheW91dCByZW5kZXJpbmcKICAgIGlmICggJHsgJFBhcmFte0RhdGF9IH0gIX4gbXs8aHRtbFtePl0qPn1tc3ggKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBnZXQgZGF0YSBvZiB0aGUgYWN0aXZhdGVkIG1vZHVsZXMKICAgIG15ICRNb2R1bGVGb3JSZWYgICA9ICRDb25maWdPYmplY3QtPkdldCgnRnJlZDo6TW9kdWxlJyk7CiAgICBteSAkTW9kdWxlc0RhdGFSZWYgPSB7fTsKICAgIGZvciBteSAkTW9kdWxlICggc29ydCBrZXlzICV7JE1vZHVsZUZvclJlZn0gKSB7CiAgICAgICAgaWYgKCAkTW9kdWxlRm9yUmVmLT57JE1vZHVsZX0tPntBY3RpdmV9ICkgewogICAgICAgICAgICAkTW9kdWxlc0RhdGFSZWYtPnskTW9kdWxlfSA9IHt9OwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgbXkgJE1vZHVsZU5hbWUgKCBzb3J0IGtleXMgJXskTW9kdWxlc0RhdGFSZWZ9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCAnS2VybmVsOjpTeXN0ZW06OkZyZWQ6OicgLiAkTW9kdWxlTmFtZSApLT5EYXRhR2V0KAogICAgICAgICAgICBNb2R1bGVSZWYgICAgICA9PiAkTW9kdWxlc0RhdGFSZWYtPnskTW9kdWxlTmFtZX0sCiAgICAgICAgICAgIEhUTUxEYXRhUmVmICAgID0+ICRQYXJhbXtEYXRhfSwKICAgICAgICAgICAgRnJlZE1vZHVsZXNSZWYgPT4gJE1vZHVsZXNEYXRhUmVmLAogICAgICAgICk7CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZDo6JyAuICRNb2R1bGVOYW1lICktPkNyZWF0ZUZyZWRPdXRwdXQoCiAgICAgICAgICAgIE1vZHVsZVJlZiA9PiAkTW9kdWxlc0RhdGFSZWYtPnskTW9kdWxlTmFtZX0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGJ1aWxkIHRoZSBjb250ZW50IHN0cmluZwogICAgbXkgJE91dHB1dCA9ICcnOwogICAgaWYgKCAkTW9kdWxlc0RhdGFSZWYtPntDb25zb2xlfS0+e091dHB1dH0gKSB7CiAgICAgICAgJE91dHB1dCAuPSAkTW9kdWxlc0RhdGFSZWYtPntDb25zb2xlfS0+e091dHB1dH07CiAgICAgICAgZGVsZXRlICRNb2R1bGVzRGF0YVJlZi0+e0NvbnNvbGV9OwogICAgfQogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJXskTW9kdWxlc0RhdGFSZWZ9ICkgewogICAgICAgICRPdXRwdXQgLj0gJE1vZHVsZXNEYXRhUmVmLT57JE1vZHVsZX0tPntPdXRwdXR9IHx8ICcnOwogICAgfQoKICAgIG15ICRKU091dHB1dCA9ICcnOwogICAgJE91dHB1dCA9fiBzeyg8c2NyaXB0Lis/L3NjcmlwdD4pfXsKICAgICAgICAkSlNPdXRwdXQgLj0gJDE7CiAgICAgICAgIiI7CiAgICB9c214ZWc7CgogICAgIyBQdXQgb3V0cHV0IGluIHRoZSBGcmVkIENvbnRhaW5lcgogICAgJE91dHB1dCA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZENvbnRhaW5lcicsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgRGF0YSA9PiAkT3V0cHV0CiAgICAgICAgfSwKICAgICk7CgogICAgIyBpbmNsdWRlIHRoZSBmcmVkIG91dHB1dCBpbiB0aGUgb3JpZ2luYWwgb3V0cHV0CiAgICBpZiAoICR7ICRQYXJhbXtEYXRhfSB9ICF+IHMvKFw8Ym9keSh8Lis/KVw+KS8kMVxuJE91dHB1dFxuXG5cblxuL214ICkgewogICAgICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHMvXiguKS9cbiRPdXRwdXRcblxuXG5cbiQxL214OwogICAgfQoKICAgIHJldHVybiBpZiAhJExheW91dE9iamVjdC0+e1VzZXJJRH07CgogICAgIyBhZGQgZnJlZCBpY29uIHRvIGhlYWRlcgogICAgbXkgJEFjdGl2ZSA9ICRDb25maWdPYmplY3QtPkdldCgnRnJlZDo6QWN0aXZlJykgfHwgMDsKICAgIG15ICRDbGFzcyAgPSAkQWN0aXZlID8gJ0ZyZWRBY3RpdmUnIDogJyc7CiAgICAkeyAkUGFyYW17RGF0YX0gfSA9fiBzeyA8ZGl2IFtePl0qIGlkPSJoZWFkZXIiIFtePl0qPiB9ewogICAgICAgICQmCgogICAgICAgIDxkaXYgY2xhc3M9IkRldmVsRnJlZFRvZ2dsZUNvbnRhaW5lciI+CiAgICAgICAgICAgIDxhIGlkPSJEZXZlbEZyZWRUb2dnbGVDb250YWluZXJMaW5rIiBjbGFzcz0iJENsYXNzIiBocmVmPSIjIj5GPC9hPgogICAgICAgIDwvZGl2PgogICAgfXhtc2lnOwogICAgJHsgJFBhcmFte0RhdGF9IH0gPX4gc3sgKDxib2R5IFtePl0qIGNsYXNzPSIgW14iXSopICggIiBbXj5dKj4gKSB9eyAkMSAkQ2xhc3MgJDIgfXhtc2lnOwoKICAgICMgSW5qZWN0IEpTIGF0IHRoZSBlbmQgb2YgdGhlIGJvZHkKICAgICR7ICRQYXJhbXtEYXRhfSB9ID1+IHN7PC9ib2R5Pn17JEpTT3V0cHV0XG5cdDwvYm9keT59c214OwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sK
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpDb25maWdMb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZDo6Q29uZmlnTG9nIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIHRoZSBjb25maWcgbG9nIG1vZHVsZQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkQ29uZmlnTG9nLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDcmVhdGVGcmVkT3V0cHV0KCkKCmNyZWF0ZSB0aGUgb3V0cHV0IG9mIHRoZSBjb25maWcgbG9nCgogICAgJExheW91dE9iamVjdC0+Q3JlYXRlRnJlZE91dHB1dCgKICAgICAgICBNb2R1bGVzUmVmID0+ICRNb2R1bGVzUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDcmVhdGVGcmVkT3V0cHV0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtNb2R1bGVSZWZ9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBNb2R1bGVSZWYhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICRIVE1MTGluZXMgPSAnJzsKICAgIGZvciBteSAkTGluZSAoIEB7ICRQYXJhbXtNb2R1bGVSZWZ9LT57RGF0YX0gfSApIHsKCiAgICAgICAgZm9yIG15ICRURCAoIEB7JExpbmV9ICkgewogICAgICAgICAgICAkVEQgPSAkTGF5b3V0T2JqZWN0LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRURCApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkTGluZS0+WzFdIGVxICdUcnVlJyApIHsKICAgICAgICAgICAgJExpbmUtPlsxXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRDb3VudCAoIDAgLi4gMyApIHsKICAgICAgICAgICAgJExpbmUtPlskQ291bnRdIHx8PSAnJzsKICAgICAgICB9CgogICAgICAgICRIVE1MTGluZXMgLj0gIiAgICAgICAgPHRyPlxuIgogICAgICAgICAgICAuICIgICAgICAgICAgPHRkIGFsaWduPVwicmlnaHRcIj4kTGluZS0+WzNdPC90ZD5cbiIKICAgICAgICAgICAgLiAiICAgICAgICAgIDx0ZD4kTGluZS0+WzBdPC90ZD5cbiIKICAgICAgICAgICAgLiAiICAgICAgICAgIDx0ZD4kTGluZS0+WzFdPC90ZD5cbiIKICAgICAgICAgICAgLiAiICAgICAgICAgIDx0ZD4kTGluZS0+WzJdPC90ZD5cbiIKICAgICAgICAgICAgLiAiICAgICAgICA8L3RyPiI7CiAgICB9CgogICAgcmV0dXJuIGlmICEkSFRNTExpbmVzOwoKICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57T3V0cHV0fSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZENvbmZpZ0xvZycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgSFRNTExpbmVzID0+ICRIVE1MTGluZXMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpDb25maWdTd2l0Y2g7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZDo6Q29uZmlnU3dpdGNoIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIHRoZSBjb25maWcgc3dpdGNoIG1vZHVsZQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkQ29uZmlnU3dpdGNoLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDcmVhdGVGcmVkT3V0cHV0KCkKCmNyZWF0ZSB0aGUgb3V0cHV0IG9mIHRoZSBjb25maWcgc3dpdGNoIG1vZHVsZQoKICAgICRMYXlvdXRPYmplY3QtPkNyZWF0ZUZyZWRPdXRwdXQoCiAgICAgICAgTW9kdWxlc1JlZiA9PiAkTW9kdWxlc1JlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ3JlYXRlRnJlZE91dHB1dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TW9kdWxlUmVmfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTW9kdWxlUmVmIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIGlmICEkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9OwoKICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57T3V0cHV0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnRGV2ZWxGcmVkQ29uZmlnU3dpdGNoJywKICAgICAgICBEYXRhICAgICAgICAgPT4gewogICAgICAgICAgICBDb25maWdJdGVtcyA9PiAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9LAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sK
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpDb25zb2xlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKdXNlIEN3ZDsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZDo6Q29uc29sZSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBjb25zb2xlIG9iamVjdAoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkQ29uc29sZS0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ3JlYXRlRnJlZE91dHB1dCgpCgpjcmVhdGUgdGhlIG91dHB1dCBvZiB0aGUgU1RERVJSIGxvZwoKICAgICRMYXlvdXRPYmplY3QtPkNyZWF0ZUZyZWRPdXRwdXQoCiAgICAgICAgTW9kdWxlc1JlZiA9PiAkTW9kdWxlc1JlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ3JlYXRlRnJlZE91dHB1dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TW9kdWxlUmVmfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTW9kdWxlUmVmIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIGNvbnNvbGUgdGFibGUKICAgIG15ICRDb25zb2xlID0gJ0FjdGl2YXRlZCBtb2R1bGVzOiA8c3Ryb25nPicKICAgICAgICAuICggam9pbiAnIC0gJywgQHsgJFBhcmFte01vZHVsZVJlZn0tPntEYXRhfSB9ICkKICAgICAgICAuICc8L3N0cm9uZz4nOwoKICAgIHJldHVybiAxIGlmICEkUGFyYW17TW9kdWxlUmVmfS0+e1N0YXR1c307CgogICAgaWYgKCAkUGFyYW17TW9kdWxlUmVmfS0+e1NldHRpbmd9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NldHRpbmcnLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgbXkgJFN5c3RlbU5hbWUgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZyZWQ6OlN5c3RlbU5hbWUnKQogICAgICAgIHx8ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpOwogICAgbXkgJE9UT0JPVmVyc2lvbiAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ1ZlcnNpb24nKSB8fCAnVmVyc2lvbiB1bmtub3duJzsKICAgIG15ICRCYWNrZ3JvdW5kQ29sb3IgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZyZWQ6OkJhY2tncm91bmRDb2xvcicpCiAgICAgICAgfHwgJ3JlZCc7CiAgICBteSAkQnJhbmNoTmFtZSA9ICdjb3VsZCBub3QgYmUgZGV0ZWN0ZWQnOwoKICAgICMgQWRkIGN1cnJlbnQgZ2l0IGJyYW5jaCB0byBvdXRwdXQKICAgIG15ICRIb21lID0gJENvbmZpZ09iamVjdC0+R2V0KCdIb21lJyk7CiAgICBpZiAoIC1kICIkSG9tZS8uZ2l0IiApIHsKICAgICAgICBteSAkT2xkV29ya2luZ0RpciA9IGdldGN3ZCgpOwogICAgICAgIGNoZGlyKCRIb21lKTsKICAgICAgICBteSAkR2l0UmVzdWx0ID0gYGdpdCBicmFuY2hgOwogICAgICAgIGNoZGlyKCRPbGRXb3JraW5nRGlyKTsKCiAgICAgICAgaWYgKCRHaXRSZXN1bHQpIHsKICAgICAgICAgICAgKCRCcmFuY2hOYW1lKSA9ICRHaXRSZXN1bHQgPX4gbS9eWypdIFxzKyAoXFMrKS94bXM7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRCcmFuY2hDbGFzczsKICAgIG15ICRCdWdOdW1iZXI7CgogICAgaWYgKCAkQnJhbmNoTmFtZSBlcSAnbWFzdGVyJyApIHsKICAgICAgICAkQnJhbmNoQ2xhc3MgPSAnV2FybmluZyc7CiAgICB9CiAgICBlbHNpZiAoICRCcmFuY2hOYW1lID1+IG17YnVnLSgoXGQpezEsNn0pLip9ICkgewogICAgICAgICRCdWdOdW1iZXIgPSAkMTsKICAgIH0KCiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e091dHB1dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZENvbnNvbGUnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIFRleHQgICAgICAgICAgICA9PiAkQ29uc29sZSwKICAgICAgICAgICAgTW9kUGVybCAgICAgICAgID0+IF9Nb2RQZXJsKCksCiAgICAgICAgICAgIFBlcmwgICAgICAgICAgICA9PiBzcHJpbnRmKCAiJXZkIiwgJF5WICksCiAgICAgICAgICAgIFN5c3RlbU5hbWUgICAgICA9PiAkU3lzdGVtTmFtZSwKICAgICAgICAgICAgT1RPQk9WZXJzaW9uICAgICA9PiAkT1RPQk9WZXJzaW9uLAogICAgICAgICAgICBCcmFuY2hOYW1lICAgICAgPT4gJEJyYW5jaE5hbWUsCiAgICAgICAgICAgIEJyYW5jaENsYXNzICAgICA9PiAkQnJhbmNoQ2xhc3MsCiAgICAgICAgICAgIEJhY2tncm91bmRDb2xvciA9PiAkQmFja2dyb3VuZENvbG9yLAogICAgICAgICAgICBCdWdOdW1iZXIgICAgICAgPT4gJEJ1Z051bWJlciwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKc3ViIF9Nb2RQZXJsIHsKCiAgICAjIGZpbmQgb3V0LCBpZiBtb2RwZXJsIGlzIHVzZWQKICAgIG15ICRNb2RQZXJsID0gJ25vdCBhY3RpdmUnOwoKICAgICMjIG5vIGNyaXRpYwogICAgaWYgKCBleGlzdHMgJEVOVntNT0RfUEVSTH0gJiYgZGVmaW5lZCAkbW9kX3Blcmw6OlZFUlNJT04gKSB7CiAgICAgICAgJE1vZFBlcmwgPSAkbW9kX3Blcmw6OlZFUlNJT047CiAgICB9CiAgICAjIyB1c2UgY3JpdGljCgogICAgcmV0dXJuICRNb2RQZXJsOwp9CgoxOwoKPWJhY2sK
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpFbnZEdW1wOwojIyBub2ZpbHRlcihUaWR5QWxsOjpQbHVnaW46Ok9UT0JPOjpQZXJsOjpEdW1wZXIpCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRGF0YTo6RHVtcGVyOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWQ6OkVudkR1bXAgLSBzaG93IGR1bXAgb2YgdGhlIGVudmlyb25tZW50IHJlZiwgZGF0YSBmb3IgJEVudiBpbiBkdGwKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgdGhlIGxheW91dCBlbnZpcm9ubWVudCBkdW1wIG9iamVjdAoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkRW52RHVtcC0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ3JlYXRlRnJlZE91dHB1dCgpCgpHZXQgdGhlIHNlc3Npb24gZGF0YSBhbmQgY3JlYXRlIHRoZSBvdXRwdXQgb2YgdGhlIHNlc3Npb24gZHVtcAoKICAgICRMYXlvdXRPYmplY3QtPkNyZWF0ZUZyZWRPdXRwdXQoCiAgICAgICAgTW9kdWxlc1JlZiA9PiAkTW9kdWxlc1JlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ3JlYXRlRnJlZE91dHB1dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TW9kdWxlUmVmfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTW9kdWxlUmVmIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpFbnZEdW1wOjpEYXRhR2V0KCkgaXMgbm90IHVzZWQsCiAgICAjIGFzIHRoZSBkYXRhIG9mIGludGVyZXN0IGlzIG5vdCBlYXNpbHkgYXZhaWxhYmxlIHRoZXJlLgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJExheW91dE9iamVjdC0+e0VudlJlZn0gfSApIHsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0VudkRhdGFSb3cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICRLZXksCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAkTGF5b3V0T2JqZWN0LT57RW52UmVmfS0+eyRLZXl9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgdGhlIGh0bWwKICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57T3V0cHV0fSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZEVudkR1bXAnLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpIVE1MQ2hlY2s7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZDo6SFRNTENoZWNrIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIEhUTUwgY2hlY2sgb2JqZWN0Cgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWRTVERFUlJMb2ctPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIENyZWF0ZUZyZWRPdXRwdXQoKQoKY3JlYXRlIHRoZSBvdXRwdXQgb2YgdGhlIFNUREVSUiBsb2cKCiAgICAkTGF5b3V0T2JqZWN0LT5DcmVhdGVGcmVkT3V0cHV0KAogICAgICAgIE1vZHVsZXNSZWYgPT4gJE1vZHVsZXNSZWYsCiAgICApOwoKPWN1dAoKc3ViIENyZWF0ZUZyZWRPdXRwdXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkSFRNTExpbmVzID0gJyc7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtNb2R1bGVSZWZ9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBNb2R1bGVSZWYhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e091dHB1dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZEhUTUxDaGVjaycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgSFRNTExpbmVzID0+ICRIVE1MTGluZXMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpKU0xpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZDo6SlNMaW50IC0gRnJlZCBtb2R1bGUgZm9yIEpTTGludCBjaGVja3MKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgSlNMaW50IG9iamVjdAoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICAkQmFja2VuZE9iamVjdCA9IEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkSlNMaW50LT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDcmVhdGVGcmVkT3V0cHV0KCkKCmNyZWF0ZSB0aGUgb3V0cHV0IG9mIHRoZSBKU0xpbnQgbW9kdWxlCgogICAgJExheW91dE9iamVjdC0+Q3JlYXRlRnJlZE91dHB1dCgKICAgICAgICBNb2R1bGVzUmVmID0+ICRNb2R1bGVzUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDcmVhdGVGcmVkT3V0cHV0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtNb2R1bGVSZWZ9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBNb2R1bGVSZWYhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e091dHB1dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZEpTTGludCcsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHt9LAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpTZXNzaW9uRHVtcDsKIyMgbm9maWx0ZXIoVGlkeUFsbDo6UGx1Z2luOjpPVE9CTzo6UGVybDo6RHVtcGVyKQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkF1dGhTZXNzaW9uJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCnVzZSBEYXRhOjpEdW1wZXI7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWQ6OlNlc3Npb25EdW1wIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIHRoZSBzZXNzaW9uIGR1bXAgb2JqZWN0Cgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWRTZXNzaW9uRHVtcC0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ3JlYXRlRnJlZE91dHB1dCgpCgpHZXQgdGhlIHNlc3Npb24gZGF0YSBhbmQgY3JlYXRlIHRoZSBvdXRwdXQgb2YgdGhlIHNlc3Npb24gZHVtcAoKICAgICRMYXlvdXRPYmplY3QtPkNyZWF0ZUZyZWRPdXRwdXQoCiAgICAgICAgTW9kdWxlc1JlZiA9PiAkTW9kdWxlc1JlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ3JlYXRlRnJlZE91dHB1dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TW9kdWxlUmVmfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTW9kdWxlUmVmIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJExheW91dE9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkU2Vzc2lvbk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpBdXRoU2Vzc2lvbicpOwoKICAgICMgRGF0YSBpcyBnZW5lcmF0ZWQgaGVyZSwgYXMgaXQgaXMgbm90IGF2YWlsYWJsZSBpbiBLZXJuZWw6OlN5c3RlbTo6RnJlZDo6U2Vzc2lvbkR1bXAKICAgIG15ICRTZXNzaW9uSUQgPSAkTGF5b3V0T2JqZWN0LT57RW52UmVmfS0+e1Nlc3Npb25JRH07CiAgICBteSAlU2Vzc2lvbkRhdGE7CiAgICBpZiAoJFNlc3Npb25JRCkgewogICAgICAgICVTZXNzaW9uRGF0YSA9ICRTZXNzaW9uT2JqZWN0LT5HZXRTZXNzaW9uSUREYXRhKCBTZXNzaW9uSUQgPT4gJFNlc3Npb25JRCApOwogICAgfQoKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVTZXNzaW9uRGF0YSApIHsKCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1Nlc3Npb25EYXRhUm93JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFNlc3Npb25EYXRheyRLZXl9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgdGhlIGh0bWwKICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57T3V0cHV0fSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZFNlc3Npb25EdW1wJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpTVERFUlJMb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWQ6OlNUREVSUkxvZyAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgbGF5b3V0IGZ1bmN0aW9ucyBvZiBTVERFUlIgbG9nIG9iamVjdHMKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgJEJhY2tlbmRPYmplY3QgPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZFNUREVSUkxvZy0+bmV3KAogICAgICAgICVQYXJhbSwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ3JlYXRlRnJlZE91dHB1dCgpCgpjcmVhdGUgdGhlIG91dHB1dCBvZiB0aGUgU1RERVJSIGxvZwoKICAgICRMYXlvdXRPYmplY3QtPkNyZWF0ZUZyZWRPdXRwdXQoCiAgICAgICAgTW9kdWxlc1JlZiA9PiAkTW9kdWxlc1JlZiwKICAgICk7Cgo9Y3V0CgpzdWIgQ3JlYXRlRnJlZE91dHB1dCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TW9kdWxlUmVmfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTW9kdWxlUmVmIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcmV0dXJuIGlmICEkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9OwogICAgcmV0dXJuIGlmIHJlZiAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9IG5lICdBUlJBWSc7CgogICAgIyBjcmVhdGUgaHRtbCBzdHJpbmcKICAgIG15ICRIVE1MTGluZXM7CiAgICBteSAkSFRNTExpbmVzRmlsdGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGcmVkOjpTVERFUlJMb2dGaWx0ZXInKTsKCiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggcmV2ZXJzZSBAeyAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9IH0gKSB7CgogICAgICAgICMgZmlsdGVyIGNvbnRlbnQgaWYgbmVlZGVkCiAgICAgICAgaWYgKCRIVE1MTGluZXNGaWx0ZXIpIHsKICAgICAgICAgICAgbmV4dCBMSU5FIGlmICRMaW5lID1+IC8kSFRNTExpbmVzRmlsdGVyL3NteDsKICAgICAgICB9CgogICAgICAgICRIVE1MTGluZXMgLj0gJExpbmU7CiAgICB9CgogICAgcmV0dXJuIGlmICEkSFRNTExpbmVzOwoKICAgICMgb3V0cHV0IHRoZSBodG1sCiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e091dHB1dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZFNUREVSUkxvZycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgSFRNTExpbmVzID0+ICRIVE1MTGluZXMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpTUUxMb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6RnJlZDo6U1FMTG9nIC0gbGF5b3V0IGJhY2tlbmQgbW9kdWxlCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBsYXlvdXQgZnVuY3Rpb25zIG9mIFNRTCBsb2cgbW9kdWxlCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWRTUUxMb2ctPm5ldygKICAgICAgICAlUGFyYW0sCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIENyZWF0ZUZyZWRPdXRwdXQoKQoKY3JlYXRlIHRoZSBvdXRwdXQgb2YgdGhlIFNRTCBsb2cKCiAgICAkTGF5b3V0T2JqZWN0LT5DcmVhdGVGcmVkT3V0cHV0KAogICAgICAgIE1vZHVsZXNSZWYgPT4gJE1vZHVsZXNSZWYsCiAgICApOwoKPWN1dAoKc3ViIENyZWF0ZUZyZWRPdXRwdXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte01vZHVsZVJlZn0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE1vZHVsZVJlZiEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgbXkgQFNRTExvZzsKCiAgICBmb3IgbXkgJExpbmUgKCBAeyAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9IH0gKSB7CgogICAgICAgIG15ICVTUUxMb2dFbnRyeSA9ICgKICAgICAgICAgICAgVGltZSAgICAgICAgICAgID0+ICRMaW5lLT5bNF0gKiAxMDAwLAogICAgICAgICAgICBFcXVhbFN0YXRlbWVudHMgPT4gJExpbmUtPls1XSB8fCAnJywKICAgICAgICAgICAgU3RhdGVtZW50ICAgICAgID0+ICRMaW5lLT5bMV0sCiAgICAgICAgICAgIFBhY2thZ2UgICAgICAgICA9PiAkTGluZS0+WzNdLAogICAgICAgICAgICBCaW5kUGFyYW1ldGVycyAgPT4gJExpbmUtPlsyXSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJExpbmUgKCBzcGxpdCggLzsvLCAkTGluZS0+WzNdICkgKSB7CiAgICAgICAgICAgICRTUUxMb2dFbnRyeXtTdGFja1RyYWNlfSAvLz0gW107CiAgICAgICAgICAgIHB1c2ggQHsgJFNRTExvZ0VudHJ5e1N0YWNrVHJhY2V9IH0sICRMaW5lOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBAU1FMTG9nLCBcJVNRTExvZ0VudHJ5OwogICAgfQoKICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57T3V0cHV0fSA9ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZFNRTExvZycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgQWxsU3RhdGVtZW50cyAgICA9PiAkUGFyYW17TW9kdWxlUmVmfS0+e0FsbFN0YXRlbWVudHN9LAogICAgICAgICAgICBEb1N0YXRlbWVudHMgICAgID0+ICRQYXJhbXtNb2R1bGVSZWZ9LT57RG9TdGF0ZW1lbnRzfSwKICAgICAgICAgICAgU2VsZWN0U3RhdGVtZW50cyA9PiAkUGFyYW17TW9kdWxlUmVmfS0+e1NlbGVjdFN0YXRlbWVudHN9LAogICAgICAgICAgICBUaW1lICAgICAgICAgICAgID0+ICRQYXJhbXtNb2R1bGVSZWZ9LT57VGltZX0sCiAgICAgICAgICAgIFNRTExvZyAgICAgICAgICAgPT4gXEBTUUxMb2csCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpGcmVkOjpUcmFuc2xhdGlvbkRlYnVnOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWQ6OlRyYW5zbGF0aW9uRGVidWcgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgdHJhbnNsYXRpb24gZGVidWcgbW9kdWxlCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkZyZWRUcmFuc2xhdGlvbkRlYnVnLT5uZXcoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDcmVhdGVGcmVkT3V0cHV0KCkKCmNyZWF0ZSB0aGUgb3V0cHV0IG9mIHRoZSB0cmFuc2xhdGlvbiBkZWJ1Z2dpbmcgbG9nCgogICAgJExheW91dE9iamVjdC0+Q3JlYXRlRnJlZE91dHB1dCgKICAgICAgICBNb2R1bGVzUmVmID0+ICRNb2R1bGVzUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDcmVhdGVGcmVkT3V0cHV0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtNb2R1bGVSZWZ9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBNb2R1bGVSZWYhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkSFRNTExpbmVzID0gJyc7CiAgICBmb3IgbXkgJExpbmUgKCBAeyAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9IH0gKSB7CiAgICAgICAgJEhUTUxMaW5lcyAuPSAiPHNwYW4+JExpbmU8L3NwYW4+IjsKICAgIH0KCiAgICByZXR1cm4gMSBpZiAhJEhUTUxMaW5lczsKCiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e091dHB1dH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0JyktPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0RldmVsRnJlZFRyYW5zbGF0aW9uRGVidWcnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgIEhUTUxMaW5lcyA9PiAkSFRNTExpbmVzLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sK
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3giPgogICAgPGgxPgogICAgICAgIENvbmZpZ3VyYXRpb24gTG9nCiAgICAgICAgPHNwYW4gY2xhc3M9IkZyZWRUb29sQmFyIj4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNlYXJjaCBGcmVkU2VhcmNoIiB0aXRsZT0iVG9nZ2xlIFNlYXJjaCBCYXIiPjwvaT4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzIEZyZWRNaW5pbWl6ZSIgdGl0bGU9Ik1pbmltaXplIj48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyBGcmVkQ2xvc2UiIHRpdGxlPSJDbG9zZSI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvaDE+CiAgICA8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3hDb250ZW50IiBpZD0iRGV2ZWxGcmVkQ29uZmlnTG9nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJGcmVkUXVpY2tTZWFyY2giPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBmb3IuLi4iIC8+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPgogICAgICAgIDwvZGl2PgogICAgICAgIDx0YWJsZSBjbGFzcz0iRnJlZFRhYmxlRGVmYXVsdCI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGg+Q2FsbHM8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5Db25maWc8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5TdGF0dXM8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5QYWNrYWdlPC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+ClslIERhdGEuSFRNTExpbmVzICVdCiAgICAgICAgICAgIDx0ciBjbGFzcz0iSGlkZGVuIEZpbHRlck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjQiPk5vIEl0ZW1zIGZvdW5kLjwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8IS0tIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkgLS0+Cgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3giPgogICAgPGgxPgogICAgICAgIENvbmZpZ3VyYXRpb24gU3dpdGNoCiAgICAgICAgPHNwYW4gY2xhc3M9IkZyZWRUb29sQmFyIj4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNlYXJjaCBGcmVkU2VhcmNoIiB0aXRsZT0iVG9nZ2xlIFNlYXJjaCBCYXIiPjwvaT4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzIEZyZWRNaW5pbWl6ZSIgdGl0bGU9Ik1pbmltaXplIj48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyBGcmVkQ2xvc2UiIHRpdGxlPSJDbG9zZSI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvaDE+CiAgICA8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3hDb250ZW50IiBpZD0iRGV2ZWxGcmVkQ29uZmlnU3dpdGNoIj4KICAgICAgICA8ZGl2IGNsYXNzPSJGcmVkUXVpY2tTZWFyY2giPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBmb3IuLi4iIC8+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPgogICAgICAgIDwvZGl2PgogICAgICAgIDx0YWJsZSBjbGFzcz0iRnJlZFRhYmxlRGVmYXVsdCBGcmVkU3dpdGNoVGFibGUiPgogICAgICAgIFslIEZPUkVBQ0ggSXRlbSBJTiBEYXRhLkNvbmZpZ0l0ZW1zICVdCiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRnJlZFN3aXRjaCBbJSBJRiBJdGVtLlZhbHVlID09IDEgJV1PblslIEVORCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgZGF0YS1rZXk9IlslIEl0ZW0uS2V5IHwgaHRtbCAlXSIgZGF0YS12YWx1ZT0iWyUgSXRlbS5WYWx1ZSB8IGh0bWwgJV0iIHRpdGxlPSJTd2l0Y2ggdGhpcyBzZXR0aW5nIj48c3Bhbj48L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD5bJSBJdGVtLktleSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgIFslIEVORCAlXQogICAgICAgICAgICA8dHIgY2xhc3M9IkhpZGRlbiBGaWx0ZXJNZXNzYWdlIj4KICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij5ObyBJdGVtcyBmb3VuZC48L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIGpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0PgondXNlIHN0cmljdCc7CiQoJy5GcmVkU3dpdGNoIGEnKS51bmJpbmQoJ2NsaWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbihFdmVudCkgewoKICAgIHZhciBLZXkgPSAkKHRoaXMpLmRhdGEoJ2tleScpLAogICAgICAgIFZhbHVlID0gcGFyc2VJbnQoJCh0aGlzKS5kYXRhKCd2YWx1ZScpLCAxMCksCiAgICAgICAgRGF0YSA9IHt9OwoKICAgIGlmICghS2V5KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgICQodGhpcykKICAgICAgICAucGFyZW50KCkKICAgICAgICAudG9nZ2xlQ2xhc3MoJ09uJyk7CgogICAgJCh0aGlzKQogICAgICAgIC5wYXJlbnQoKQogICAgICAgIC5uZXh0KCd0ZCcpCiAgICAgICAgLnByZXBlbmQoJzxpIGNsYXNzPSJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluIj48L2k+Jm5ic3A7Jyk7CgogICAgRGF0YSA9IHsKICAgICAgICBBY3Rpb246ICdEZXZlbEZyZWQnLAogICAgICAgIFN1YmFjdGlvbjogJ0NvbmZpZ1N3aXRjaEFKQVgnLAogICAgICAgICdLZXknOiBLZXksCiAgICAgICAgJ1ZhbHVlJzogVmFsdWUKICAgIH07CgogICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCgKICAgICAgICBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksCiAgICAgICAgRGF0YSwKICAgICAgICBmdW5jdGlvbihSZXNwb25zZSkgewogICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQodHJ1ZSk7CiAgICAgICAgfSwKICAgICAgICAnanNvbicKICAgICk7CgogICAgcmV0dXJuIGZhbHNlOwoKfSk7Cjwvc2NyaXB0Pgo8IS0tIGpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD0iIj4KLkRldmVsRnJlZENvbnRhaW5lciB7CiAgICB3aWR0aDogWyUgQ29uZmlnKCJGcmVkOjpDb25zb2xlV2lkdGgiKSAlXTsKICAgIC1tb3otb3BhY2l0eTogWyUgQ29uZmlnKCJGcmVkOjpDb25zb2xlT3BhY2l0eSIpICVdOwogICAgLXdlYmtpdC1vcGFjaXR5OiBbJSBDb25maWcoIkZyZWQ6OkNvbnNvbGVPcGFjaXR5IikgJV07CiAgICBvcGFjaXR5OiBbJSBDb25maWcoIkZyZWQ6OkNvbnNvbGVPcGFjaXR5IikgJV07Cn0KCi5EZXZlbEZyZWRCb3ggaDEsIC5EZXZlbEZyZWRCb3guRXhwYW5kZWQgaDEgewogICAgYmFja2dyb3VuZC1jb2xvcjogWyUgRGF0YS5CYWNrZ3JvdW5kQ29sb3IgfCBodG1sICVdOwp9CgpbJSBJRiBDb25maWcoIkZyZWQ6OkNvbnNvbGVIZWlnaHQiKSAlXQouRGV2ZWxGcmVkQm94Q29udGVudCB7CiAgICBtYXgtaGVpZ2h0OiBbJSBDb25maWcoIkZyZWQ6OkNvbnNvbGVIZWlnaHQiKSAlXTsKfQpbJSBFTkQgJV0KPC9zdHlsZT4KCjxkaXYgY2xhc3M9IkRldmVsRnJlZEJveCI+CiAgICA8aDE+CiAgICAgICAgRnJlZCBDb25zb2xlCiAgICAgICAgPHNwYW4gY2xhc3M9IkZyZWRUb29sQmFyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiU2V0dGluZyIpICVdCiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1jb2cgRnJlZFNldHRpbmdzIiBkYXRhLXVybD0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPURldmVsRnJlZDtTdWJhY3Rpb249U2V0dGluZyI+PC9pPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2V0dGluZyIpICVdCiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1taW51cyBGcmVkTWluaW1pemUiIHRpdGxlPSJNaW5pbWl6ZSI+PC9pPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRnJlZENsb3NlQWxsIiB0aXRsZT0iQ2xvc2UgYWxsIj48L2k+CiAgICAgICAgPC9zcGFuPgogICAgPC9oMT4KICAgIDxkaXYgY2xhc3M9IkRldmVsRnJlZEJveENvbnRlbnQgRnJlZEVsZW1lbnRMaXN0IiBpZD0iRGV2ZWxGcmVkQ29uc29sZSI+CiAgICAgICAgPHNwYW4+U3lzdGVtIDxzdHJvbmc+WyUgRGF0YS5TeXN0ZW1OYW1lIHwgaHRtbCAlXTwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5CcmFuY2hDbGFzcyB8IGh0bWwgJV0iPkJyYW5jaCA8c3Ryb25nPlslIERhdGEuQnJhbmNoTmFtZSB8IGh0bWwgJV08L3N0cm9uZz48L3NwYW4+CiAgICAgICAgPHNwYW4+T1RPQk8gPHN0cm9uZz5bJSBEYXRhLk9UT0JPVmVyc2lvbiB8IGh0bWwgJV08L3N0cm9uZz48L3NwYW4+CiAgICAgICAgPHNwYW4+bW9kX3BlcmwgPHN0cm9uZz5bJSBEYXRhLk1vZFBlcmwgfCBodG1sICVdPC9zdHJvbmc+PC9zcGFuPgogICAgICAgIDxzcGFuPlBlcmwgPHN0cm9uZz5bJSBEYXRhLlBlcmwgfCBodG1sICVdPC9zdHJvbmc+PC9zcGFuPgogICAgWyUgSUYgRGF0YS5CdWdOdW1iZXIgJV0KICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtZXh0ZXJuYWwtbGluayI+PC9pPiBPcGVuIDxhIGhyZWY9Imh0dHBzOi8vYnVncy5vdG9iby5vcmcvc2hvd19idWcuY2dpP2lkPVslIERhdGEuQnVnTnVtYmVyIHwgdXJpICVdIiB0YXJnZXQ9Il9ibGFuayI+QnVnI1slIERhdGEuQnVnTnVtYmVyIHwgaHRtbCAlXTwvYT4gaW4gQnVnWmlsbGE8L3NwYW4+CiAgICBbJSBFTkQgJV0KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgY2xhc3M9IkRldmVsRnJlZENvbnRhaW5lciIgaWQ9IkRldmVsRnJlZENvbnRhaW5lciI+CiAgICBbJSBEYXRhLkRhdGEgJV0KPC9kaXY+Cg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgY2xhc3M9IkRldmVsRnJlZEJveCI+CiAgICA8aDE+CiAgICAgICAgRW52aXJvbm1lbnQgVmFyaWFibGVzCiAgICAgICAgPHNwYW4gY2xhc3M9IkZyZWRUb29sQmFyIj4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXNlYXJjaCBGcmVkU2VhcmNoIiB0aXRsZT0iU2VhcmNoIj48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1taW51cyBGcmVkTWluaW1pemUiIHRpdGxlPSJNaW5pbWl6ZSI+PC9pPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRnJlZENsb3NlIiB0aXRsZT0iQ2xvc2UiPjwvaT4KICAgICAgICA8L3NwYW4+CiAgICA8L2gxPgogICAgPGRpdiBjbGFzcz0iRGV2ZWxGcmVkQm94Q29udGVudCIgaWQ9IkRldmVsRnJlZEVudkR1bXAiPgogICAgICAgIDxkaXYgY2xhc3M9IkZyZWRRdWlja1NlYXJjaCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvci4uLiIgLz4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJGcmVkVGFibGVEZWZhdWx0Ij4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0aD5LZXk8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5WYWx1ZTwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJFbnZEYXRhUm93IikgJV0KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPlslIERhdGEuS2V5IHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5WYWx1ZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiRW52RGF0YVJvdyIpICVdCiAgICAgICAgICAgIDx0ciBjbGFzcz0iSGlkZGVuIEZpbHRlck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPk5vIEl0ZW1zIGZvdW5kLjwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8IS0tIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkgLS0+Cgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3giPgogICAgPGgxPgogICAgICAgIEhUTUxDaGVjawogICAgICAgIDxzcGFuIGNsYXNzPSJGcmVkVG9vbEJhciI+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1taW51cyBGcmVkTWluaW1pemUiIHRpdGxlPSJNaW5pbWl6ZSI+PC9pPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRnJlZENsb3NlIiB0aXRsZT0iQ2xvc2UiPjwvaT4KICAgICAgICA8L3NwYW4+CiAgICA8L2gxPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICBDb3JlLkFwcC5SZWFkeShmdW5jdGlvbigpewogICAgICAgICAgICBDb3JlLkZyZWQuSFRNTENoZWNrLkNoZWNrRm9yU3RhcnQoKTsKICAgICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGRpdiBzdHlsZT0icGFkZGluZzo1cHg7IiBpZD0iRnJlZEhUTUxDaGVja1Jlc3VsdHMiIGNsYXNzPSJEZXZlbEZyZWRCb3hDb250ZW50Ij4KICAgICAgICA8ZGl2IGlkPSJGcmVkSFRNTENoZWNrUnVubmluZyI+PGkgY2xhc3M9ImZhIGZhLXNwaW5uZXIgZmEgZmEtc3BpbiI+PC9pPiZuYnNwOyBDaGVja3MgYXJlIHJ1bm5pbmcuLi48L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8IS0tIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkgLS0+Cgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3giPgogICAgPGgxPgogICAgICAgIEpTTGludAogICAgICAgIDxzcGFuIGNsYXNzPSJGcmVkVG9vbEJhciI+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1taW51cyBGcmVkTWluaW1pemUiIHRpdGxlPSJNaW5pbWl6ZSI+PC9pPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRnJlZENsb3NlIiB0aXRsZT0iQ2xvc2UiPjwvaT4KICAgICAgICA8L3NwYW4+CiAgICA8L2gxPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgICBDb3JlLkFwcC5SZWFkeShmdW5jdGlvbigpewogICAgICAgICAgICBDb3JlLkZyZWQuSlNMaW50LkluaXQoKTsKICAgICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGRpdiBjbGFzcz0iRGV2ZWxGcmVkQm94Q29udGVudCIgaWQ9IkZyZWRKU0xpbnRTY3JpcHRzIj4KICAgICAgICA8ZGl2IGlkPSJGcmVkSlNMaW50UnVubmluZyI+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1zcGlubmVyIGZhIGZhLXNwaW4iPjwvaT4mbmJzcDsgQ2hlY2tzIGFyZSBydW5uaW5nLi4uCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCjxkaXYgY2xhc3M9IkRldmVsRnJlZEJveCI+CiAgICA8aDE+CiAgICAgICAgU2Vzc2lvbkR1bXAKICAgICAgICA8c3BhbiBjbGFzcz0iRnJlZFRvb2xCYXIiPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc2VhcmNoIEZyZWRTZWFyY2giIHRpdGxlPSJTZWFyY2giPjwvaT4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzIEZyZWRNaW5pbWl6ZSIgdGl0bGU9Ik1pbmltaXplIj48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyBGcmVkQ2xvc2UiIHRpdGxlPSJDbG9zZSI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvaDE+CiAgICA8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3hDb250ZW50IiBpZD0iRGV2ZWxGcmVkU2Vzc2lvbkR1bXAiPgogICAgICAgIDxkaXYgY2xhc3M9IkZyZWRRdWlja1NlYXJjaCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iU2VhcmNoIGZvci4uLiIgLz4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXRpbWVzIj48L2k+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHRhYmxlIGNsYXNzPSJGcmVkVGFibGVEZWZhdWx0Ij4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0aD5LZXk8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5WYWx1ZTwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTZXNzaW9uRGF0YVJvdyIpICVdCiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLktleSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgIDxwcmU+WyUgRGF0YS5WYWx1ZSB8IGh0bWwgJV08L3ByZT4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJTZXNzaW9uRGF0YVJvdyIpICVdCiAgICAgICAgICAgIDx0ciBjbGFzcz0iSGlkZGVuIEZpbHRlck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPk5vIEl0ZW1zIGZvdW5kLjwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRTZXR0aW5ncyI+CiAgICA8aDE+RnJlZCBTZXR0aW5nczwvaDE+CiAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iRGV2ZWxGcmVkU2V0dGluZyI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iRGV2ZWxGcmVkIiAvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlNldHRpbmdBY3Rpb24iIC8+CiAgICAgICAgPHVsIGNsYXNzPSJGcmVkU2V0dGluZ3MiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJGcmVkTW9kdWxlIikgJV0KICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5GcmVkTW9kdWxlIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJGcmVkTW9kdWxlIiBpZD0iWyUgRGF0YS5GcmVkTW9kdWxlIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuRnJlZE1vZHVsZSB8IGh0bWwgJV0iIFslIERhdGEuQ2hlY2tlZCAlXS8+CiAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GcmVkTW9kdWxlIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkRlc2NyaXB0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgPC9sYWJlbD4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29uZmlnIikgJV0KICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pblN5c0NvbmZpZztTdWJhY3Rpb249RWRpdDtTeXNDb25maWdTdWJHcm91cD1bJSBEYXRhLk1vZHVsZU5hbWUgJV07U3lzQ29uZmlnR3JvdXA9RnJlZCIgdGl0bGU9IlNldHRpbmdzIiBjbGFzcz0iRnJlZFNldHRpbmdzTGluayIgdGFyZ2V0PSJfYmxhbmsiPjxpIGNsYXNzPSJmYSBmYS1jb2ciPjwvaT48L2E+ClslIFJlbmRlckJsb2NrRW5kKCJDb25maWciKSAlXQogICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiRnJlZE1vZHVsZSIpICVdCiAgICAgICAgPC91bD4KICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV0iPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgIDwvZm9ybT4KPC9kaXY+Cg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8IS0tIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RPQk86OlRUOjpTY3JpcHRVc2FnZSkgLS0+Cgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3giIGlkPSJEZXZlbEZyZWRCb3hTUUxMb2ciPgogICAgPGgxPgogICAgICAgIFNRTCBMb2cKICAgICAgICA8c3BhbiBjbGFzcz0iRnJlZFRvb2xCYXIiPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtc2VhcmNoIEZyZWRTZWFyY2giIHRpdGxlPSJTZWFyY2giPjwvaT4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzIEZyZWRNaW5pbWl6ZSIgdGl0bGU9Ik1pbmltaXplIj48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyBGcmVkQ2xvc2UiIHRpdGxlPSJDbG9zZSI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvaDE+CiAgICA8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3hDb250ZW50IiBpZD0iRGV2ZWxGcmVkU1FMTG9nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJGcmVkRWxlbWVudExpc3QiPgogICAgICAgICAgICA8c3Bhbj5FeGVjdXRlZCA8c3Ryb25nPlslIERhdGEuQWxsU3RhdGVtZW50cyAlXTwvc3Ryb25nPiBTdGF0ZW1lbnRzPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj48c3Ryb25nPlslIERhdGEuU2VsZWN0U3RhdGVtZW50cyB8IGh0bWwgJV08L3N0cm9uZz4gU0VMRUNUcyArIDxzdHJvbmc+WyUgRGF0YS5Eb1N0YXRlbWVudHMgfCBodG1sICVdPC9zdHJvbmc+IERPczwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+RHVyYXRpb246IDxzdHJvbmc+WyUgRGF0YS5UaW1lIHwgaHRtbCAlXTwvc3Ryb25nPiBzLjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJGcmVkUXVpY2tTZWFyY2giPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBmb3IuLi4iIC8+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyI+PC9pPgogICAgICAgIDwvZGl2PgogICAgICAgIDx0YWJsZSBjbGFzcz0iRnJlZFRhYmxlRGVmYXVsdCI+CiAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGggdGl0bGU9IlRpbWUgKG1zKSI+bXM8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCB0aXRsZT0iRXF1YWwgU3RhdGVtZW50cyI+RXF1YWw8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5TdGF0ZW1lbnQ8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aCB0aXRsZT0iQmluZCBwYXJhbWV0ZXJzIj5CaW5kPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+UGFja2FnZTwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkhpZGRlbiBGaWx0ZXJNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNSI+Tm8gSXRlbXMgZm91bmQuPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+ClslIElGIERhdGEuU1FMTG9nLnNpemUgPiAyMDAgJV0KIyBEb24ndCBvdXRwdXQgdG9vIG1hbnkgcmVjb3JkcyB0byBtYWtlIHN1cmUgdGhlIEdVSSBkb2VzIG5vdCBmcmVlemUuCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkVycm9yIj4KICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNSI+VG9vIG1hbnkgc3RhdGVtZW50cyBmb3VuZCAoWyUgRGF0YS5TUUxMb2cuc2l6ZSB8IGh0bWwgJV0pLjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgpbJSBFTFNFICVdCiAgICBbJSBGT1JFQUNIIFJvdyBJTiBEYXRhLlNRTExvZyAlXQogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGltZSI+WyUgUm93LlRpbWUgfCB0cnVuY2F0ZSg2KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRXF1YWxTdGF0ZW1lbnRzIj5bJSBSb3cuRXF1YWxTdGF0ZW1lbnRzIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJTUUxTdGF0ZW1lbnQiPlslIFJvdy5TdGF0ZW1lbnQgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IkJpbmRQYXJhbWV0ZXJzIj4KICAgICAgICBbJSBJRiBSb3cuQmluZFBhcmFtZXRlcnMgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IlNob3dCaW5kUGFyYW1ldGVycyIgaHJlZj0iIyIgdGl0bGU9IlslIFJvdy5CaW5kUGFyYW1ldGVycyB8IGh0bWwgJV0iPlNob3c8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhpZGRlbiI+WyUgUm93LkJpbmRQYXJhbWV0ZXJzIHwgaHRtbCAlXTwvZGl2PgogICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJTdGFja1RyYWNlIj4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgUm93LlN0YWNrVHJhY2Uuam9pbigiXG4iKSB8IGh0bWwgfCByZXBsYWNlKCJcbiIsICI8YnIvPiIpICVdPGJyLz4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgIFslIEVORCAlXQpbJSBFTkQgJV0KICAgICAgICAgICAgPHRyIGNsYXNzPSJIaWRkZW4gRmlsdGVyTWVzc2FnZSI+CiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNSI+Tm8gSXRlbXMgZm91bmQuPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdD4KJ3VzZSBzdHJpY3QnOwokKCdhLlNob3dCaW5kUGFyYW1ldGVycycpLnVuYmluZCgnY2xpY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKEV2ZW50KSB7CiAgICAkKHRoaXMpLmhpZGUoKS5wYXJlbnQoKS5maW5kKCdkaXYnKS5zaG93KCk7Cn0pOwo8L3NjcmlwdD4KPCEtLSBqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4K
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3giPgogICAgPGgxPgogICAgICAgIFNUREVSUkxvZwogICAgICAgIDxzcGFuIGNsYXNzPSJGcmVkVG9vbEJhciI+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS1taW51cyBGcmVkTWluaW1pemUiIHRpdGxlPSJNaW5pbWl6ZSI+PC9pPgogICAgICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGltZXMgRnJlZENsb3NlIiB0aXRsZT0iQ2xvc2UiPjwvaT4KICAgICAgICA8L3NwYW4+CiAgICA8L2gxPgogICAgPGRpdiBjbGFzcz0iRGV2ZWxGcmVkQm94Q29udGVudCIgaWQ9IkRldmVsRnJlZFNUREVSUkxvZyI+CiAgICAgICAgPHByZSBjbGFzcz0iRnJlZE1vbm9TcGFjZSI+WyUgRGF0YS5IVE1MTGluZXMgfCBodG1sICVdPC9wcmU+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgo8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3giPgogICAgPGgxPgogICAgICAgIE1pc3NpbmcgVHJhbnNsYXRpb25zCiAgICAgICAgPHNwYW4gY2xhc3M9IkZyZWRUb29sQmFyIj4KICAgICAgICAgICAgPGkgY2xhc3M9ImZhIGZhLW1pbnVzIEZyZWRNaW5pbWl6ZSIgdGl0bGU9Ik1pbmltaXplIj48L2k+CiAgICAgICAgICAgIDxpIGNsYXNzPSJmYSBmYS10aW1lcyBGcmVkQ2xvc2UiIHRpdGxlPSJDbG9zZSI+PC9pPgogICAgICAgIDwvc3Bhbj4KICAgIDwvaDE+CiAgICA8ZGl2IGNsYXNzPSJEZXZlbEZyZWRCb3hDb250ZW50IEZyZWRFbGVtZW50TGlzdCIgaWQ9IkRldmVsRnJlZFRyYW5zbGF0aW9uRGVidWciPgpbJSBEYXRhLkhUTUxMaW5lcyAlXQogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpDb25maWdMb2c7CiMjIG5vIGNyaXRpYyhQZXJsOjpDcml0aWM6OlBvbGljeTo6T1RPQk86OlByb2hpYml0T3BlbikKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RnJlZDo6Q29uZmlnTG9nCgo9aGVhZDEgU1lOT1BTSVMKCmhhbmRsZSB0aGUgY29uZmlnIGxvZyBkYXRhCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIERhdGFHZXQoKQoKR2V0IHRoZSBkYXRhIGZvciB0aGlzIEZyZWQgbW9kdWxlLiBSZXR1cm5zIHRydWUgb3IgZmFsc2UuCkFuZCBhZGQgdGhlIGRhdGEgdG8gdGhlIG1vZHVsZSByZWYuCgogICAgJEJhY2tlbmRPYmplY3QtPkRhdGFHZXQoCiAgICAgICAgTW9kdWxlUmVmID0+ICRNb2R1bGVSZWYsCiAgICApOwoKPWN1dAoKc3ViIERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBATG9nTWVzc2FnZXM7CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgIyBvcGVuIHRoZSBUcmFuc2xhdGlvbkRlYnVnLmxvZyBmaWxlIHRvIGdldCB0aGUgdW50cmFuc2xhdGVkIHdvcmRzCiAgICBteSAkRmlsZSA9ICRDb25maWdPYmplY3QtPkdldCgnSG9tZScpIC4gJy92YXIvZnJlZC9Db25maWcubG9nJzsKICAgIG15ICRGaWxlaGFuZGxlOwogICAgaWYgKCAhb3BlbiAkRmlsZWhhbmRsZSwgJzwnLCAkRmlsZSApIHsKICAgICAgICBwcmludCBTVERFUlIgIkNhbid0IHJlYWQgL3Zhci9mcmVkL0NvbmZpZy5sb2dcbiI7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHJldmVyc2UgPCRGaWxlaGFuZGxlPiApIHsKICAgICAgICBsYXN0IExJTkUgaWYgJExpbmUgPX4gL0ZSRUQvOwogICAgICAgIHB1c2ggQExvZ01lc3NhZ2VzLCAkTGluZTsKICAgIH0KICAgIGNsb3NlICRGaWxlaGFuZGxlOwogICAgcG9wIEBMb2dNZXNzYWdlczsKICAgICRTZWxmLT5JbnNlcnRXb3JkKCBXaGF0ID0+ICJGUkVEXG4iICk7CgogICAgbXkgJUluZGl2aWR1YWxDb25maWcgPSAoKTsKCiAgICBmb3IgbXkgJExpbmUgKEBMb2dNZXNzYWdlcykgewogICAgICAgICRMaW5lID1+IHMvXG4vLzsKICAgICAgICAkSW5kaXZpZHVhbENvbmZpZ3skTGluZX0rKzsKICAgIH0KCiAgICBATG9nTWVzc2FnZXMgPSAoKTsKICAgIGZvciBteSAkTGluZSAoIHNvcnQga2V5cyAlSW5kaXZpZHVhbENvbmZpZyApIHsKICAgICAgICBteSBAU3BsaXRlZExpbmUgPSBzcGxpdCAvOy8sICRMaW5lOwogICAgICAgIHB1c2ggQFNwbGl0ZWRMaW5lLCAkSW5kaXZpZHVhbENvbmZpZ3skTGluZX07CiAgICAgICAgcHVzaCBATG9nTWVzc2FnZXMsIFxAU3BsaXRlZExpbmU7CiAgICB9CgogICAgIyBzb3J0IHRoZSBkYXRhCiAgICBteSAkQ29uZmlnICA9ICRDb25maWdPYmplY3QtPkdldCgnRnJlZDo6Q29uZmlnTG9nJyk7CiAgICBteSAkT3JkZXJCeSA9IGRlZmluZWQoICRDb25maWctPntPcmRlckJ5fSApID8gJENvbmZpZy0+e09yZGVyQnl9IDogMzsKICAgIGlmICggJE9yZGVyQnkgPT0gMyApIHsKICAgICAgICBATG9nTWVzc2FnZXMgPSBzb3J0IHsgJGItPlskT3JkZXJCeV0gPD0+ICRhLT5bJE9yZGVyQnldIH0gQExvZ01lc3NhZ2VzOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgQExvZ01lc3NhZ2VzID0gc29ydCB7ICRhLT5bJE9yZGVyQnldIGNtcCAkYi0+WyRPcmRlckJ5XSB9IEBMb2dNZXNzYWdlczsKICAgIH0KCiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9ID0gXEBMb2dNZXNzYWdlczsKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBJbnNlcnRXb3JkKCkKClNhdmUgYSB3b3JkIGluIHRoZSB0cmFuc2xhdGlvbiBkZWJ1ZyBsb2cKCiAgICAkQmFja2VuZE9iamVjdC0+SW5zZXJ0V29yZCgKICAgICAgICBXaGF0ID0+ICdhIHdvcmQnLAogICAgKTsKCj1jdXQKCnN1YiBJbnNlcnRXb3JkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJENvbmZpZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CgogICAgbXkgJEZyZWRTZXR0aW5ncyA9ICRDb25maWdPYmplY3QtPkdldE9yaWdpbmFsKCdGcmVkOjpNb2R1bGUnKTsKCiAgICBpZiAoICEkRnJlZFNldHRpbmdzIHx8ICEkRnJlZFNldHRpbmdzLT57Q29uZmlnTG9nfSB8fCAhJEZyZWRTZXR0aW5ncy0+e0NvbmZpZ0xvZ30tPntBY3RpdmV9ICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17SG9tZX0gKSB7CiAgICAgICAgJFBhcmFte0hvbWV9ID0gJENvbmZpZ09iamVjdC0+R2V0T3JpZ2luYWwoJ0hvbWUnKTsKICAgIH0KCiAgICAjIHNhdmUgdGhlIHdvcmQgaW4gbG9nIGZpbGUKICAgIG15ICRGaWxlID0gJFBhcmFte0hvbWV9IC4gJy92YXIvZnJlZC9Db25maWcubG9nJzsKICAgIG9wZW4gbXkgJEZpbGVoYW5kbGUsICc+PicsICRGaWxlIHx8IGRpZSAiQ2FuJ3Qgd3JpdGUgJEZpbGUgIVxuIjsKICAgIHByaW50ICRGaWxlaGFuZGxlICRQYXJhbXtXaGF0fSAuICJcbiI7CiAgICBjbG9zZSAkRmlsZWhhbmRsZTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpDb25maWdTd2l0Y2g7CiMjIG5vIGNyaXRpYyhQZXJsOjpDcml0aWM6OlBvbGljeTo6T1RPQk86OlByb2hpYml0T3BlbikKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RnJlZDo6Q29uZmlnU3dpdGNoCgo9aGVhZDEgU1lOT1BTSVMKCmhhbmRsZSB0aGUgY29uZmlnIGxvZyBkYXRhCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIERhdGFHZXQoKQoKR2V0IHRoZSBkYXRhIGZvciB0aGlzIEZyZWQgbW9kdWxlLiBSZXR1cm5zIHRydWUgb3IgZmFsc2UuCkFuZCBhZGQgdGhlIGRhdGEgdG8gdGhlIG1vZHVsZSByZWYuCgogICAgJEJhY2tlbmRPYmplY3QtPkRhdGFHZXQoCiAgICAgICAgTW9kdWxlUmVmID0+ICRNb2R1bGVSZWYsCiAgICApOwoKPWN1dAoKc3ViIERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAkQ29uZmlnID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcmVkOjpDb25maWdTd2l0Y2gnKTsKCiAgICByZXR1cm4gaWYgISRDb25maWctPntTZXR0aW5nc307CgogICAgbXkgQENvbmZpZ0l0ZW1zOwogICAgZm9yIG15ICRJdGVtICggc29ydCBAeyAkQ29uZmlnLT57U2V0dGluZ3N9IH0gKSB7CiAgICAgICAgcHVzaCBAQ29uZmlnSXRlbXMsIHsKICAgICAgICAgICAgS2V5ICAgPT4gJEl0ZW0sCiAgICAgICAgICAgIFZhbHVlID0+ICRDb25maWdPYmplY3QtPkdldCgkSXRlbSksCiAgICAgICAgfTsKICAgIH0KCiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9ID0gXEBDb25maWdJdGVtczsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpDb25zb2xlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkZyZWQ6OkNvbnNvbGUKCj1oZWFkMSBTWU5PUFNJUwoKZ2l2ZXMgeW91IGFsbCBmdW5jdGlvbnMgd2hpY2ggYXJlIG5lZWRlZCBmb3IgdGhlIEZSRUQtY29uc29sZQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBEYXRhR2V0KCkKCkdldCB0aGUgZGF0YSBmb3IgdGhpcyBGcmVkIG1vZHVsZS4gUmV0dXJucyB0cnVlIG9yIGZhbHNlLgpBbmQgYWRkcyB0aGUgZGF0YSB0byB0aGUgbW9kdWxlIHJlZi4KCiAgICAkQmFja2VuZE9iamVjdC0+RGF0YUdldCgKICAgICAgICBNb2R1bGVSZWYgPT4gJE1vZHVsZVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJFJlZiAocXcoTW9kdWxlUmVmIEhUTUxEYXRhUmVmIEZyZWRNb2R1bGVzUmVmKSkgewogICAgICAgIGlmICggISRQYXJhbXskUmVmfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJFJlZiEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15IEBNb2R1bGVzOwogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte0ZyZWRNb2R1bGVzUmVmfSB9ICkgewogICAgICAgIGlmICggJE1vZHVsZSBuZSAnQ29uc29sZScgKSB7CiAgICAgICAgICAgIHB1c2ggQE1vZHVsZXMsICRNb2R1bGU7CiAgICAgICAgfQogICAgfQogICAgJFBhcmFte01vZHVsZVJlZn0tPntEYXRhfSA9IFxATW9kdWxlczsKCiAgICBpZiAoICR7ICRQYXJhbXtIVE1MRGF0YVJlZn0gfSAhfiBtL0ZyZWQtU2V0dGluZy8gJiYgJHsgJFBhcmFte0hUTUxEYXRhUmVmfSB9ID1+IC9cPGJvZHkuKj9cPi8gKQogICAgewogICAgICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57U3RhdHVzfSA9IDE7CiAgICB9CgogICAgaWYgKCAkeyAkUGFyYW17SFRNTERhdGFSZWZ9IH0gIX4gbS9uYW1lPSJBY3Rpb24iIHZhbHVlPSJMb2dpbiIvICkgewogICAgICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57U2V0dGluZ30gPSAxOwogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sK
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpFbnZEdW1wOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkZyZWQ6OkVudkR1bXAKCj1oZWFkMSBTWU5PUFNJUwoKZG9lcyBlc3NlbnRpYWxseSBub3RoaW5nCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIERhdGFHZXQoKQoKVGhpcyBtZXRob2QgaXMganVzdCBmb3IgY29tcGF0aWJpbGl0eS4gTm8gZGF0YSBpcyBzZXQgaGVyZSwKYXMgdGhlIG5lZWRlZCBzZXNzaW9uIG9iamVjdCBpcyBub3QgZWFzaWx5IGF2YWlsYWJsZSBoZXJlLgoKICAgIG15ICREYXRhR2V0T2sgPSAkQmFja2VuZE9iamVjdC0+RGF0YUdldCgKICAgICAgICBNb2R1bGVSZWYgPT4gJE1vZHVsZVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoIE1vZHVsZVJlZiApKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpIVE1MQ2hlY2s7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RnJlZDo6SFRNTENoZWNrCgo9aGVhZDEgU1lOT1BTSVMKClBlcmZvcm0gSFRNTCBRQS4KCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIERhdGFHZXQgewogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpKU0xpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgpOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpGcmVkOjpKU0xpbnQKCj1oZWFkMSBTWU5PUFNJUwoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBEYXRhR2V0KCkKCkdldCB0aGUgZGF0YSBmb3IgdGhpcyBGcmVkIG1vZHVsZS4gUmV0dXJucyB0cnVlIG9yIGZhbHNlLgpBbmQgYWRkIHRoZSBkYXRhIHRvIHRoZSBtb2R1bGUgcmVmLgoKICAgICRCYWNrZW5kT2JqZWN0LT5EYXRhR2V0KAogICAgICAgIE1vZHVsZVJlZiA9PiAkTW9kdWxlUmVmLAogICAgKTsKCj1jdXQKCnN1YiBEYXRhR2V0IHsKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sK
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpTZXNzaW9uRHVtcDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpGcmVkOjpTZXNzaW9uRHVtcAoKPWhlYWQxIFNZTk9QU0lTCgpkb2VzIGVzc2VudGlhbGx5IG5vdGhpbmcKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gRGF0YUdldCgpCgpUaGlzIG1ldGhvZCBpcyBqdXN0IGZvciBjb21wYXRpYmlsaXR5LiBObyBkYXRhIGlzIHNldCBoZXJlLAphcyB0aGUgbmVlZGVkIHNlc3Npb24gb2JqZWN0IGlzIG5vdCBlYXNpbHkgYXZhaWxhYmxlIGhlcmUuCgogICAgbXkgJERhdGFHZXRPayA9ICRCYWNrZW5kT2JqZWN0LT5EYXRhR2V0KAogICAgICAgIE1vZHVsZVJlZiA9PiAkTW9kdWxlUmVmLAogICAgKTsKCj1jdXQKCnN1YiBEYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyggTW9kdWxlUmVmICkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKMTsKCj1iYWNrCg==
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpTUUxMb2c7CiMjIG5vIGNyaXRpYyhQZXJsOjpDcml0aWM6OlBvbGljeTo6T1RPQk86OlByb2hpYml0T3BlbikKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBUaW1lOjpIaVJlcyBxdyhnZXR0aW1lb2ZkYXkgdHZfaW50ZXJ2YWwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpGcmVkOjpTUUxMb2cKCj1oZWFkMSBTWU5PUFNJUwoKU2hvdyBhIGxvZyBvZiB0aGUgU1FMIHN0YXRlbWVudHMgZXhlY3V0ZWQgc2luY2UgdGhlIGxhc3QgdmlldyBvZiB0aGUgbG9nLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIGlmICgKICAgICAgICByZWYgJENvbmZpZ09iamVjdC0+R2V0KCdGcmVkOjpNb2R1bGUnKQogICAgICAgICYmICRDb25maWdPYmplY3QtPkdldCgnRnJlZDo6TW9kdWxlJyktPntTUUxMb2d9CiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57QWN0aXZlfSA9ICRDb25maWdPYmplY3QtPkdldCgnRnJlZDo6TW9kdWxlJyktPntTUUxMb2d9LT57QWN0aXZlfTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIERhdGFHZXQoKQoKR2V0IHRoZSBkYXRhIGZvciB0aGlzIEZyZWQgbW9kdWxlLiBSZXR1cm5zIHRydWUgb3IgZmFsc2UuCkFuZCBhZGQgdGhlIGRhdGEgdG8gdGhlIG1vZHVsZSByZWYuCgogICAgJEJhY2tlbmRPYmplY3QtPkRhdGFHZXQoCiAgICAgICAgTW9kdWxlUmVmID0+ICRNb2R1bGVSZWYsCiAgICApOwoKPWN1dAoKc3ViIERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIG9wZW4gdGhlIGZpbGUgU1FMLmxvZwogICAgbXkgJEZpbGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0hvbWUnKSAuICcvdmFyL2ZyZWQvU1FMLmxvZyc7CgogICAgbXkgJEZpbGVoYW5kbGU7CiAgICBpZiAoICFvcGVuICRGaWxlaGFuZGxlLCAnPCcsICRGaWxlICkgeyAgICAjIyBubyBjcml0aWMKICAgICAgICAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9ID0gWyJDYW4ndCByZWFkIC92YXIvZnJlZC9TUUwubG9nIl07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15IEBMb2dNZXNzYWdlczsKICAgIG15ICREb1N0YXRlbWVudHMgICAgID0gMDsKICAgIG15ICRTZWxlY3RTdGF0ZW1lbnRzID0gMDsKCiAgICAjIHNsdXJwIGluIHRoZSB3aG9sZSBsb2dmaWxlLCBpbiBvcmRlciB0byBhY2Nlc3MgdGhlIGxpbmVzIGF0IHRoZSBlbmQKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKCByZXZlcnNlIDwkRmlsZWhhbmRsZT4gKSB7CgogICAgICAgICMgZG8gbm90IHNob3cgdGhlIGxvZyBmcm9tIHRoZSBwcmV2aW91cyByZXF1ZXN0CiAgICAgICAgbGFzdCBMSU5FIGlmICRMaW5lID1+IC9GUkVELzsKCiAgICAgIyBhIHR5cGljYWwgbGluZSBmcm9tIFNRTC5sb2cgbG9va3MgbGlrZToKICAgICAjIFNRTC1TRUxFQ1QjIyEjI1NFTEVDVCAxICsgMSBGUk9NIGR1YWwgV0hFUkUgaWQgPSA/IEFORCB1c2VyX2lkID0gPyMjISMjMSwgMiMjISMjS2VybmVsOjpTeXN0ZW06OlVzZXIjIyEjIzAuMDA0Mzk3CiAgICAgICAgbXkgQFNwbGl0TG9nTGluZSA9IHNwbGl0IC8jIyEjIy8sICRMaW5lOwogICAgICAgIGlmICggJFNwbGl0TG9nTGluZVswXSBlcSAnU1FMLURPJyAmJiAkU3BsaXRMb2dMaW5lWzFdID1+IG17IFxBIFNFTEVDVCB9eG1zICkgewogICAgICAgICAgICAkU3BsaXRMb2dMaW5lWzBdIC49ICcgLSBQZXJoYXBzIHlvdSBoYXZlIGFuIGVycm9yIHlvdSB1c2UgRE8gZm9yIGEgU0VMRUNULVN0YXRlbWVudDonOwogICAgICAgIH0KICAgICAgICBwdXNoIEBMb2dNZXNzYWdlcywgXEBTcGxpdExvZ0xpbmU7CgogICAgICAgIGlmICggJFNwbGl0TG9nTGluZVswXSBlcSAnU1FMLURPJyApIHsKICAgICAgICAgICAgJERvU3RhdGVtZW50cysrOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkU3BsaXRMb2dMaW5lWzRdICkgewogICAgICAgICAgICAkUGFyYW17TW9kdWxlUmVmfS0+e1RpbWV9ICs9ICRTcGxpdExvZ0xpbmVbNF07CiAgICAgICAgfQogICAgfQoKICAgIHBvcCBATG9nTWVzc2FnZXM7CiAgICBjbG9zZSAkRmlsZWhhbmRsZTsKCiAgICAjIGZpbmQgU1FMLXN0YXRlbWVudHMgdXNlZCBtdWx0aXBsZSB0aW1lcwogICAgbXkgJU11bHRpVXNlZDsKICAgIGZvciBteSAkU3RhdGVtZW50UmVmIChATG9nTWVzc2FnZXMpIHsKICAgICAgICAkTXVsdGlVc2VkeyAkU3RhdGVtZW50UmVmLT5bMV0gfSsrOwogICAgfQogICAgZm9yIG15ICRTdGF0ZW1lbnRSZWYgKEBMb2dNZXNzYWdlcykgewogICAgICAgIHB1c2ggQHskU3RhdGVtZW50UmVmfSwgKCAkTXVsdGlVc2VkeyAkU3RhdGVtZW50UmVmLT5bMV0gfSAtIDEgKTsKICAgIH0KCiAgICAjIEFkZCBtYXJrZXIgZm9yIHRoZSBuZXh0IHZpZXcKICAgICRTZWxmLT5JbnNlcnRXb3JkKCBXaGF0ID0+ICJGUkVEXG4iICk7CgogICAgIyBzZXQgdGhlIGRhdGEgZm9yIHRoZSBvdXRwdXQgdGVtcGxhdGUKICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57RGF0YX0gICAgICAgICAgICAgPSBcQExvZ01lc3NhZ2VzOwogICAgJFBhcmFte01vZHVsZVJlZn0tPntBbGxTdGF0ZW1lbnRzfSAgICA9IHNjYWxhciBATG9nTWVzc2FnZXM7CiAgICAkUGFyYW17TW9kdWxlUmVmfS0+e0RvU3RhdGVtZW50c30gICAgID0gJERvU3RhdGVtZW50czsKICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57U2VsZWN0U3RhdGVtZW50c30gPSAkUGFyYW17TW9kdWxlUmVmfS0+e0FsbFN0YXRlbWVudHN9IC0gJERvU3RhdGVtZW50czsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gSW5zZXJ0V29yZCgpCgpBcHBlbmQgYSBzZW1pY29sb24gc2VwYXJhdGVkIHJlY29yZCBsaW5lIHRvIHRoZSB0aGUgU1FMIGxvZy4KCiAgICAkQmFja2VuZE9iamVjdC0+SW5zZXJ0V29yZCgKICAgICAgICBXaGF0ID0+ICdTUUwtU0VMRUNUO1NFTEVDVCAxICsgMSBGUk9NIGR1YWw7S2VybmVsOjpTeXN0ZW06OlVzZXI7MC4wMDQzOTcnLAogICAgKTsKCj1jdXQKCnN1YiBJbnNlcnRXb3JkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtXaGF0fSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgV2hhdCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgRml4dXAgbXVsdGlsaW5lIFNRTCBzdGF0ZW1lbnRzCiAgICBpZiAoICRQYXJhbXtXaGF0fSA9fiBtL15TUUwvc214ICkgewogICAgICAgIG15IEBXaGF0ID0gc3BsaXQgJyMjISMjJywgJFBhcmFte1doYXR9OwoKICAgICAgICAjIGhpZGUgd2hpdGUgc3BhY2UKICAgICAgICAkV2hhdFsxXSA9fiBzL1xyP1xuLyAvc214ZzsKICAgICAgICAkV2hhdFsxXSA9fiBzL1xzKy8gL3NteGc7CiAgICAgICAgJFBhcmFte1doYXR9ID0gam9pbiAnIyMhIyMnLCBAV2hhdDsKICAgIH0KCiAgICAjIGFwcHBlbmQgdGhlIGxpbmUgdG8gbG9nIGZpbGUKICAgIG15ICRGaWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdIb21lJykgLiAnL3Zhci9mcmVkL1NRTC5sb2cnOwogICAgb3BlbiBteSAkRmlsZWhhbmRsZSwgJz4+JywgJEZpbGUgfHwgZGllICJDYW4ndCB3cml0ZSAkRmlsZSAhXG4iOwogICAgcHJpbnQgJEZpbGVoYW5kbGUgJFBhcmFte1doYXR9LCAiXG4iOwogICAgY2xvc2UgJEZpbGVoYW5kbGU7CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBQcmVTdGF0ZW1lbnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgKCAhJFNlbGYtPntBY3RpdmV9ICk7CgogICAgJFNlbGYtPntQcmVwYXJlU3RhcnR9ID0gW2dldHRpbWVvZmRheV07CgogICAgcmV0dXJuOwp9CgpzdWIgUG9zdFN0YXRlbWVudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiBpZiAoICEkU2VsZi0+e0FjdGl2ZX0gKTsKCiAgICBteSAkRGlmZlRpbWUgPSB0dl9pbnRlcnZhbCggJFNlbGYtPntQcmVwYXJlU3RhcnR9ICk7CgogICAgbXkgQFN0YWNrVHJhY2U7CgogICAgQ09VTlQ6CiAgICBmb3IgKCBteSAkQ291bnQgPSAxOyAkQ291bnQgPCAzMDsgJENvdW50KysgKSB7CiAgICAgICAgbXkgKCAkUGFja2FnZTEsICRGaWxlbmFtZTEsICRMaW5lMSwgJFN1YnJvdXRpbmUxICkgPSBjYWxsZXIoJENvdW50KTsKICAgICAgICBsYXN0IENPVU5UIGlmICEkTGluZTE7CiAgICAgICAgbXkgKCAkUGFja2FnZTIsICRGaWxlbmFtZTIsICRMaW5lMiwgJFN1YnJvdXRpbmUyICkgPSBjYWxsZXIoIDEgKyAkQ291bnQgKTsKICAgICAgICAkU3Vicm91dGluZTIgfHw9ICQwOyAgICAjIGlmIHRoZXJlIGlzIG5vIGNhbGxlciBtb2R1bGUgdXNlIHRoZSBmaWxlIG5hbWUKICAgICAgICAkU3Vicm91dGluZTIgPX4gcy9LZXJuZWw6OlN5c3RlbS9LOjpTLzsKICAgICAgICAkU3Vicm91dGluZTIgPX4gcy9LZXJuZWw6Ok1vZHVsZXMvSzo6TS87CiAgICAgICAgJFN1YnJvdXRpbmUyID1+IHMvS2VybmVsOjpPdXRwdXQvSzo6Ty87CiAgICAgICAgcHVzaCBAU3RhY2tUcmFjZSwgIiRTdWJyb3V0aW5lMjokTGluZTEiOwogICAgfQoKICAgIG15IEBBcnJheSA9IG1hcCB7IGRlZmluZWQgJF8gJiYgZGVmaW5lZCAkeyRffSA/ICR7JF99IDogJ3VuZGVmJyB9IEB7ICRQYXJhbXtCaW5kfSB8fCBbXSB9OwoKICAgICMgUmVwbGFjZSBuZXdsaW5lcwogICAgQEFycmF5ID0gbWFwIHsgJF8gPX4gc3tccj9cbn17W1xcbl19c214ZzsgJF87IH0gQEFycmF5OyAgICAjIyBubyBjcml0aWMKCiAgICAjIExpbWl0IGJpbmQgcGFyYW0gbGVuZ3RoCiAgICBAQXJyYXkgPSBtYXAgeyBsZW5ndGgoJF8pID4gMTAwID8gKCBzdWJzdHIoICRfLCAwLCAxMDAgKSAuICdbLi4uXScgKSA6ICRfIH0gQEFycmF5OwogICAgbXkgJEJpbmRTdHJpbmcgPSBAQXJyYXkgPyBqb2luICcsICcsIEBBcnJheSA6ICcnOwoKICAgIG15ICRQcmVmaXggPSAkUGFyYW17U1FMfSA9fiBte15TRUxFQ1R9aXhtcyA/ICdTRUxFQ1QnIDogJ0RPJzsKCiAgICAkU2VsZi0+SW5zZXJ0V29yZCgKICAgICAgICBXaGF0ID0+ICJTUUwtJFByZWZpeCMjISMjJFBhcmFte1NRTH0jIyEjIyRCaW5kU3RyaW5nIyMhIyMiCiAgICAgICAgICAgIC4gam9pbiggJzsnLCBAU3RhY2tUcmFjZSApCiAgICAgICAgICAgIC4gIiMjISMjJERpZmZUaW1lIiwKICAgICk7CgogICAgcmV0dXJuOwp9CgoxOwoKPWJhY2sK
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpTVERFUlJMb2c7CiMjIG5vIGNyaXRpYyhQZXJsOjpDcml0aWM6OlBvbGljeTo6T1RPQk86OlByb2hpYml0T3BlbikKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBJTzo6SGFuZGxlOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpGcmVkOjpTVERFUlJMb2cKCj1oZWFkMSBTWU5PUFNJUwoKaGFuZGxlIHRoZSBTVERFUlIgbG9nIGRhdGEKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gRGF0YUdldCgpCgpHZXQgdGhlIGRhdGEgZm9yIHRoaXMgRnJlZCBtb2R1bGUuIFJldHVybnMgdHJ1ZSBvciBmYWxzZS4KQW5kIGFkZCB0aGUgZGF0YSB0byB0aGUgbW9kdWxlIHJlZi4KCiAgICAkQmFja2VuZE9iamVjdC0+RGF0YUdldCgKICAgICAgICBNb2R1bGVSZWYgPT4gJE1vZHVsZVJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoTW9kdWxlUmVmKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgTWFrZSBzdXJlIHRoYXQgd2UgZ2V0IGV2ZXJ5dGhpbmcgdG8gZGlzayBiZWZvcmUgdHJ5aW5nIHRvIHJlYWQgaXQgKG90aGVyd2lzZSBjb250ZW50IGNvdWxkIGJlIGxvc3QpLgogICAgU1RERVJSLT5mbHVzaCgpOwoKICAgICMgb3BlbiB0aGUgU1RERVJSLmxvZyBmaWxlIHRvIGdldCB0aGUgU1RERVJSIG1lc3NhZ2VzCiAgICBteSAkRmlsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpIC4gJy92YXIvZnJlZC9TVERFUlIubG9nJzsKICAgIG15ICRGaWxlaGFuZGxlOwoKICAgIGlmICggIW9wZW4gJEZpbGVoYW5kbGUsICc8OmVuY29kaW5nKFVURi04KScsICRGaWxlICkgeyAgICAjIyBubyBjcml0aWMKICAgICAgICAkUGFyYW17TW9kdWxlUmVmfS0+e0RhdGF9ID0gWwogICAgICAgICAgICAiUGVyaGFwcyB5b3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIGF0IC92YXIvZnJlZC8gb3IgL0tlcm5lbC9Db25maWcvRmlsZXMvQUFBRnJlZC5wbS4iLAogICAgICAgICAgICAiQ2FuJ3QgcmVhZCAvdmFyL2ZyZWQvU1RERVJSLmxvZyIsCiAgICAgICAgXTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBSZWFkIGxvZyB1bnRpbCBsYXN0ICJGUkVEIiBtYXJrZXIuCiAgICBteSBATG9nTWVzc2FnZXM7CiAgICBMSU5FOgogICAgZm9yIG15ICRMaW5lICggcmV2ZXJzZSA8JEZpbGVoYW5kbGU+ICkgewogICAgICAgIGxhc3QgTElORSBpZiAkTGluZSA9fiBteyBcQSBccyogRlJFRCBccyogXHp9eG1zOwogICAgICAgIHB1c2ggQExvZ01lc3NhZ2VzLCAkTGluZTsKICAgIH0KICAgIGNsb3NlICRGaWxlaGFuZGxlOwoKICAgIHByaW50IFNUREVSUiAiXG5GUkVEXG4iOwoKICAgICMgdHJpbSB0aGUgbG9nIG1lc3NhZ2UgYXJyYXkKICAgIExJTkU6CiAgICBmb3IgbXkgJExpbmUgKEBMb2dNZXNzYWdlcykgewogICAgICAgIGxhc3QgTElORSBpZiAkTGluZSAhfiBteyBcQSBccyogXHogfXhtczsKICAgICAgICBzaGlmdCBATG9nTWVzc2FnZXM7CiAgICB9CgogICAgIyB0cmltIHRoZSBsb2cgbWVzc2FnZSBhcnJheQogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHJldmVyc2UgQExvZ01lc3NhZ2VzICkgewogICAgICAgIGxhc3QgTElORSBpZiAkTGluZSAhfiBteyBcQSBccyogXHogfXhtczsKICAgICAgICBzaGlmdCBATG9nTWVzc2FnZXM7CiAgICB9CgogICAgJFBhcmFte01vZHVsZVJlZn0tPntEYXRhfSA9IFxATG9nTWVzc2FnZXM7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpGcmVkOjpUcmFuc2xhdGlvbkRlYnVnOwojIyBubyBjcml0aWMoUGVybDo6Q3JpdGljOjpQb2xpY3k6Ok9UT0JPOjpQcm9oaWJpdE9wZW4pCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkZyZWQ6OlRyYW5zbGF0aW9uRGVidWcKCj1oZWFkMSBTWU5PUFNJUwoKaGFuZGxlIHRoZSB0cmFuc2xhdGlvbiBkZWJ1ZyBkYXRhCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBpZiAoCiAgICAgICAgcmVmICRDb25maWdPYmplY3QtPkdldCgnRnJlZDo6TW9kdWxlJykKICAgICAgICAmJiAkQ29uZmlnT2JqZWN0LT5HZXQoJ0ZyZWQ6Ok1vZHVsZScpLT57VHJhbnNsYXRpb25EZWJ1Z30KICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPntBY3RpdmV9ID0gJENvbmZpZ09iamVjdC0+R2V0KCdGcmVkOjpNb2R1bGUnKS0+e1RyYW5zbGF0aW9uRGVidWd9LT57QWN0aXZlfTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIERhdGFHZXQoKQoKR2V0IHRoZSBkYXRhIGZvciB0aGlzIEZyZWQgbW9kdWxlLiBSZXR1cm5zIHRydWUgb3IgZmFsc2UuCkFuZCBhZGQgdGhlIGRhdGEgdG8gdGhlIG1vZHVsZSByZWYuCgogICAgJEJhY2tlbmRPYmplY3QtPkRhdGFHZXQoCiAgICAgICAgTW9kdWxlUmVmID0+ICRNb2R1bGVSZWYsCiAgICApOwoKPWN1dAoKc3ViIERhdGFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIG9wZW4gdGhlIFRyYW5zbGF0aW9uRGVidWcubG9nIGZpbGUgdG8gZ2V0IHRoZSB1bnRyYW5zbGF0ZWQgd29yZHMKICAgIG15ICRGaWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdIb21lJykgLiAnL3Zhci9mcmVkL1RyYW5zbGF0aW9uRGVidWcubG9nJzsKICAgIG15ICRGaWxlaGFuZGxlOwogICAgaWYgKCAhb3BlbiAkRmlsZWhhbmRsZSwgJzw6ZW5jb2RpbmcoVVRGLTgpJywgJEZpbGUgKSB7ICAgICMjIG5vIGNyaXRpYwogICAgICAgICRQYXJhbXtNb2R1bGVSZWZ9LT57RGF0YX0gPSBbIkNhbid0IHJlYWQgL3Zhci9mcmVkL1RyYW5zbGF0aW9uRGVidWcubG9nIl07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGRpc3RpbmN0IGVudHJpZXMgZnJvbSBUcmFuc2xhdGlvbkRlYnVnLmxvZwogICAgIyB0aWxsIHRoZSBsYXN0ICdGUkVEJyBlbnRyeQogICAgbXkgJUxvZ0xpbmVzOwogICAgTElORToKICAgIGZvciBteSAkTGluZSAoIHJldmVyc2UgPCRGaWxlaGFuZGxlPiApIHsKICAgICAgICBsYXN0IExJTkUgaWYgJExpbmUgPX4gL0ZSRUQvOwoKICAgICAgICBjaG9tcCAkTGluZTsKICAgICAgICBuZXh0IExJTkUgaWYgJExpbmUgZXEgJyc7CgogICAgICAgICMgc2tpcCBkdXBsaWNhdGUgZW50cmllcwogICAgICAgIG5leHQgTElORSBpZiAkTG9nTGluZXN7JExpbmV9OwoKICAgICAgICAkTG9nTGluZXN7JExpbmV9ID0gMTsKICAgIH0KICAgIGNsb3NlICRGaWxlaGFuZGxlOwoKICAgICRTZWxmLT5JbnNlcnRXb3JkKCBXaGF0ID0+ICJGUkVEXG4iICk7CgogICAgbXkgQExvZ0xpbmVzID0gc29ydCB7ICRhIGNtcCAkYiB9IGtleXMgJUxvZ0xpbmVzOwogICAgJFBhcmFte01vZHVsZVJlZn0tPntEYXRhfSA9IFxATG9nTGluZXM7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEluc2VydFdvcmQoKQoKU2F2ZSBhIHdvcmQgaW4gdGhlIHRyYW5zbGF0aW9uIGRlYnVnIGxvZwoKICAgICRCYWNrZW5kT2JqZWN0LT5JbnNlcnRXb3JkKAogICAgICAgIFdoYXQgPT4gJ2Egd29yZCcsCiAgICApOwoKPWN1dAoKc3ViIEluc2VydFdvcmQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gaWYgKCAhJFNlbGYtPntBY3RpdmV9ICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggIWRlZmluZWQoICRQYXJhbXtXaGF0fSApICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBXaGF0IScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzYXZlIHRoZSB3b3JkIGluIGxvZyBmaWxlCiAgICBteSAkRmlsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSG9tZScpIC4gJy92YXIvZnJlZC9UcmFuc2xhdGlvbkRlYnVnLmxvZyc7CiAgICBvcGVuIG15ICRGaWxlaGFuZGxlLCAnPj46ZW5jb2RpbmcoVVRGLTgpJywgJEZpbGUgfHwgZGllICJDYW4ndCB3cml0ZSAkRmlsZSAhXG4iOwogICAgcHJpbnQgJEZpbGVoYW5kbGUgJFBhcmFte1doYXR9IC4gIlxuIjsKICAgIGNsb3NlICRGaWxlaGFuZGxlOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sK
Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgovKiBlc2xpbnQgbm8td2luZG93OjAgKi8KCiJ1c2Ugc3RyaWN0IjsKCnZhciBDb3JlID0gQ29yZSB8fCB7fTsKQ29yZS5GcmVkID0gQ29yZS5GcmVkIHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgYWxsIGxvZ2ljIGZvciBGcmVkCiAqLwpDb3JlLkZyZWQgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgdmFyIERldmVsRnJlZFRvZ2dsZUNvbnRhaW5lckxpbmtQcm9jY2VzcyA9IDA7CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRzIGdlbmVyaWMgZnJlZCBmdW5jdGlvbnMKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgdmFyIFdpZGdldFN0YXR1cyA9IHt9LAogICAgICAgICAgICBLZXk7CgogICAgICAgIC8vIGdldCBzdGF0dXMgb2YgRnJlZCB3aWRnZXRzCiAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7CiAgICAgICAgICAgIFdpZGdldFN0YXR1cyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnRlJFRF93aWRnZXRfc3RhdHVzJyk7CgogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgV2lkZ2V0U3RhdHVzID0gSlNPTi5wYXJzZShXaWRnZXRTdGF0dXMpOwogICAgICAgICAgICAgICAgaWYgKFdpZGdldFN0YXR1cyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIFdpZGdldFN0YXR1cyA9IHt9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgIFdpZGdldFN0YXR1cyA9IHt9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKEtleSBpbiBXaWRnZXRTdGF0dXMpIHsKICAgICAgICAgICAgICAgIGlmIChXaWRnZXRTdGF0dXMuaGFzT3duUHJvcGVydHkoS2V5KSkgewogICAgICAgICAgICAgICAgICAgICQoJy5EZXZlbEZyZWRCb3hDb250ZW50IycgKyBLZXkpLnJlbW92ZUNsYXNzKCdFeHBhbmRlZCBDb2xsYXBzZWQnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoV2lkZ2V0U3RhdHVzW0tleV0gPT09ICdDb2xsYXBzZWQnIHx8IFdpZGdldFN0YXR1c1tLZXldID09PSAnRXhwYW5kZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyMnICsgS2V5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKFdpZGdldFN0YXR1c1tLZXldKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsb3Nlc3QoJy5EZXZlbEZyZWRCb3gnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKFdpZGdldFN0YXR1c1tLZXldKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIGFsbCBGcmVkIHdpZGdldHMgd2l0aG91dCBhIHNhdmVkIHdpZGdldCBzdGF0dXMgYXJlIG5vdyBleHBhbmRlZAogICAgICAgICQoJy5EZXZlbEZyZWRCb3hDb250ZW50JykuZmlsdGVyKCc6bm90KC5Db2xsYXBzZWQsIC5FeHBhbmRlZCknKS5hZGRDbGFzcygnRXhwYW5kZWQnKTsKCiAgICAgICAgLy8gVG9vbGJhciBpdGVtcwogICAgICAgICQoJy5GcmVkU2VhcmNoJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuRGV2ZWxGcmVkQm94JykuZmluZCgnLkZyZWRRdWlja1NlYXJjaCcpLnRvZ2dsZSgpOwogICAgICAgIH0pOwogICAgICAgICQoJy5GcmVkTWluaW1pemUnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgJFdpZGdldEVsZW1lbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5EZXZlbEZyZWRCb3gnKS5maW5kKCcuRGV2ZWxGcmVkQm94Q29udGVudCcpOwoKICAgICAgICAgICAgJFdpZGdldEVsZW1lbnQKICAgICAgICAgICAgICAgIC5zbGlkZVRvZ2dsZSgnZmFzdCcpCiAgICAgICAgICAgICAgICAudG9nZ2xlQ2xhc3MoJ0NvbGxhcHNlZCcpCiAgICAgICAgICAgICAgICAudG9nZ2xlQ2xhc3MoJ0V4cGFuZGVkJyk7CgogICAgICAgICAgICAkV2lkZ2V0RWxlbWVudAogICAgICAgICAgICAgICAgLmNsb3Nlc3QoJy5EZXZlbEZyZWRCb3gnKQogICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdFeHBhbmRlZCBDb2xsYXBzZWQnKQogICAgICAgICAgICAgICAgLmFkZENsYXNzKCRXaWRnZXRFbGVtZW50Lmhhc0NsYXNzKCdFeHBhbmRlZCcpID8gJ0V4cGFuZGVkJyA6ICdDb2xsYXBzZWQnKTsKCiAgICAgICAgICAgIFdpZGdldFN0YXR1c1skV2lkZ2V0RWxlbWVudC5hdHRyKCdpZCcpXSA9ICRXaWRnZXRFbGVtZW50Lmhhc0NsYXNzKCdDb2xsYXBzZWQnKSA/ICdDb2xsYXBzZWQnIDogJ0V4cGFuZGVkJzsKICAgICAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubG9jYWxTdG9yYWdlKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0ZSRURfd2lkZ2V0X3N0YXR1cycsIEpTT04uc3RyaW5naWZ5KFdpZGdldFN0YXR1cykpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgJCgnLkZyZWRDbG9zZScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLkRldmVsRnJlZEJveCcpLmhpZGUoKTsKICAgICAgICB9KTsKICAgICAgICAkKCcuRnJlZENsb3NlQWxsJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgJCgnLkRldmVsRnJlZEJveCcpLmhpZGUoKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gZW1wdHkgdGhlIHNlYXJjaCBmaWVsZAogICAgICAgICQoJy5GcmVkUXVpY2tTZWFyY2ggaScpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICQodGhpcykucHJldignaW5wdXQnKS52YWwoJycpLnRyaWdnZXIoJ2tleWRvd24nKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIHRhYmxlIGZpbHRlciBvbiB0aGUgcXVpY2tzZWFyY2ggZmllbGRzIChvbmx5IGlmIENvcmUuVUkuVGFibGUgaXMgYXZhaWxhYmxlKQogICAgICAgIGlmIChDb3JlLkRlYnVnLkNoZWNrRGVwZW5kZW5jeSgnRnJlZCcsICdDb3JlLlVJLlRhYmxlJywgJ0NvcmUuVUkuVGFibGUnLCB0cnVlKSkgewogICAgICAgICAgICAkKCcuRnJlZFF1aWNrU2VhcmNoIGlucHV0JykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQodGhpcyksICQodGhpcykuY2xvc2VzdCgnLkRldmVsRnJlZEJveCcpLmZpbmQoJy5GcmVkVGFibGVEZWZhdWx0JykpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICQoJy5GcmVkUXVpY2tTZWFyY2gsIC5GcmVkU2VhcmNoJykuaGlkZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IHBvcHVwIHByb2ZpbGUgYXMgbmVlZGVkIGJ5IGZyZWQKICAgICAgICBDb3JlLlVJLlBvcHVwLlByb2ZpbGVBZGQoJ0ZyZWRTZXR0aW5ncycsIHsKICAgICAgICAgICAgV2luZG93VVJMUGFyYW1zOiAiZGVwZW5kZW50PXllcyxsb2NhdGlvbj1ubyxtZW51YmFyPW5vLHJlc2l6YWJsZT15ZXMsc2Nyb2xsYmFycz15ZXMsc3RhdHVzPW5vLHRvb2xiYXI9bm8iLAogICAgICAgICAgICBMZWZ0OiAxMDAsCiAgICAgICAgICAgIFRvcDogMTAwLAogICAgICAgICAgICBXaWR0aDogNDAwLAogICAgICAgICAgICBIZWlnaHQ6IDUwMAogICAgICAgIH0pOwoKICAgICAgICAvLyBvcGVuIHRoZSBzZXR0aW5ncyBwb3B1cAogICAgICAgICQoJy5GcmVkU2V0dGluZ3MnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCgkKHRoaXMpLmRhdGEoJ3VybCcpLCAnRnJlZFNldHRpbmdzJywgJ0ZyZWRTZXR0aW5ncycpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBTUUwgbG9nOiBTaG93IGJpbmQgcGFyYW1ldGVycyBvbiBjbGljayBvZiAnc2hvdycgbGluawogICAgICAgICQoJy5TaG93QmluZFBhcmFtZXRlcnMnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkKHRoaXMpLm5leHQoJy5IaWRkZW4nKS50b2dnbGUoKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICAkKCcuRnJlZFNldHRpbmdzTGluaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBtYWtlIHRoZSBmcmVkIGJveCBkcmFnZ2FibGUKICAgICAgICAkKCcjRGV2ZWxGcmVkQ29udGFpbmVyJykuZHJhZ2dhYmxlKHsKICAgICAgICAgICAgaGFuZGxlOiAnaDEnLAogICAgICAgICAgICBzdG9wOiBmdW5jdGlvbihldmVudCwgdWkpIHsKICAgICAgICAgICAgICAgIHZhciBUb3AgPSB1aS5vZmZzZXQudG9wLAogICAgICAgICAgICAgICAgICAgIExlZnQgPSB1aS5vZmZzZXQubGVmdDsKCiAgICAgICAgICAgICAgICBpZiAod2luZG93ICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIC8qZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlKi8KICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLkZSRURfY29uc29sZV9sZWZ0ID0gTGVmdDsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLkZSRURfY29uc29sZV90b3AgPSBUb3A7CiAgICAgICAgICAgICAgICAgICAgLyplc2xpbnQtZW5hYmxlIGNhbWVsY2FzZSovCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gc2F2ZSBmcmVkJ3Mgd2luZG93IHBvc2l0aW9uCiAgICAgICAgKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciBTYXZlZExlZnQsIFNhdmVkVG9wLCBGcmVkV2lkdGgsIEZyZWRIZWlnaHQ7CgogICAgICAgICAgICBpZiAod2luZG93ICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UgIT09IHVuZGVmaW5lZCAmJiB3aW5kb3cubG9jYWxTdG9yYWdlLkZSRURfY29uc29sZV9sZWZ0ICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UuRlJFRF9jb25zb2xlX3RvcCkgewoKICAgICAgICAgICAgICAgIFNhdmVkTGVmdCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuRlJFRF9jb25zb2xlX2xlZnQ7CiAgICAgICAgICAgICAgICBTYXZlZFRvcCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuRlJFRF9jb25zb2xlX3RvcDsKICAgICAgICAgICAgICAgIEZyZWRXaWR0aCA9ICQoJyNEZXZlbEZyZWRDb250YWluZXInKS53aWR0aCgpOwogICAgICAgICAgICAgICAgRnJlZEhlaWdodCA9ICQoJyNEZXZlbEZyZWRDb250YWluZXInKS5oZWlnaHQoKTsKCiAgICAgICAgICAgICAgICBpZiAoU2F2ZWRMZWZ0ID4gJCgnYm9keScpLndpZHRoKCkpIHsKICAgICAgICAgICAgICAgICAgICBTYXZlZExlZnQgPSAkKCdib2R5Jykud2lkdGgoKSAtIEZyZWRXaWR0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChTYXZlZFRvcCA+ICQoJ2JvZHknKS5oZWlnaHQoKSkgewogICAgICAgICAgICAgICAgICAgIFNhdmVkVG9wID0gJCgnYm9keScpLmhlaWdodCgpIC0gRnJlZEhlaWdodDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoU2F2ZWRMZWZ0ICYmIFNhdmVkVG9wKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI0RldmVsRnJlZENvbnRhaW5lcicpLmNzcygnbGVmdCcsIFNhdmVkTGVmdCArICdweCcpOwogICAgICAgICAgICAgICAgICAgICQoJyNEZXZlbEZyZWRDb250YWluZXInKS5jc3MoJ3RvcCcsIFNhdmVkVG9wICsgJ3B4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KCkpOwoKICAgICAgICBpZiAoISQoJ2JvZHknKS5oYXNDbGFzcygnRnJlZEFjdGl2ZScpKSB7CiAgICAgICAgICAgICQoJy5EZXZlbEZyZWRCb3gnKS5oaWRlKCk7CiAgICAgICAgfQoKICAgICAgICAkKCcjRGV2ZWxGcmVkVG9nZ2xlQ29udGFpbmVyTGluaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgRGF0YSA9IHsKICAgICAgICAgICAgICAgIEFjdGlvbjogJ0RldmVsRnJlZCcsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb246ICdDb25maWdTd2l0Y2hBSkFYJywKICAgICAgICAgICAgICAgIEtleTogJ0ZyZWQ6OkFjdGl2ZScsCiAgICAgICAgICAgICAgICBWYWx1ZTogJCgnYm9keScpLmhhc0NsYXNzKCdGcmVkQWN0aXZlJykgPyAxIDogMAogICAgICAgICAgICB9OwoKICAgICAgICAgICAgaWYgKERldmVsRnJlZFRvZ2dsZUNvbnRhaW5lckxpbmtQcm9jY2VzcykgcmV0dXJuOwoKICAgICAgICAgICAgRGV2ZWxGcmVkVG9nZ2xlQ29udGFpbmVyTGlua1Byb2NjZXNzID0gMTsKCiAgICAgICAgICAgICQoJ2JvZHknKS50b2dnbGVDbGFzcygnRnJlZEFjdGl2ZScpOwogICAgICAgICAgICAkKCcjRGV2ZWxGcmVkVG9nZ2xlQ29udGFpbmVyTGluaycpLnRvZ2dsZUNsYXNzKCdGcmVkQWN0aXZlJyk7CgogICAgICAgICAgICBpZiAoISQoJy5EZXZlbEZyZWRCb3gnKS5pcygiOnZpc2libGUiKSAmJiAkKCdib2R5JykuaGFzQ2xhc3MoJ0ZyZWRBY3RpdmUnKSkgewogICAgICAgICAgICAgICAgJCgnLkRldmVsRnJlZEJveCcpLnNob3coKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICQoJy5EZXZlbEZyZWRCb3gnKS5oaWRlKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIENvcmUuQUpBWC5GdW5jdGlvbkNhbGwoQ29yZS5Db25maWcuR2V0KCdDR0lIYW5kbGUnKSwgRGF0YSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgRGV2ZWxGcmVkVG9nZ2xlQ29udGFpbmVyTGlua1Byb2NjZXNzID0gMDsKICAgICAgICAgICAgfSwgJ2pzb24nKTsKICAgICAgICB9KTsKICAgIH07CgogICAgVGFyZ2V0TlMuSW5pdCgpOwoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLkZyZWQuSlNMaW50IHx8IHt9KSk7Cg==
Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgoidXNlIHN0cmljdCI7Ci8qZ2xvYmFsICQ6IGZhbHNlLCBqUXVlcnk6IGZhbHNlICovCgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuRnJlZCA9IENvcmUuRnJlZCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIENvcmUuRnJlZC5IVE1MQ2hlY2sKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgYWxsIGxvZ2ljIGZvciB0aGUgRnJlZCBtb2R1bGUgSFRNTENIZWNrCiAqLwpDb3JlLkZyZWQuSFRNTENoZWNrID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIHZhciBDaGVja0Z1bmN0aW9ucyA9IFtdLAogICAgICAgIEVycm9yc0ZvdW5kID0gZmFsc2U7CgogICAgZnVuY3Rpb24gaHRtbEVuY29kZShUZXh0KXsKICAgICAgICByZXR1cm4gVGV4dC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7CiAgICB9CgogICAgZnVuY3Rpb24gZXNjYXBlU2VsZWN0b3IgKFNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIFNlbGVjdG9yLnJlcGxhY2UoLygjfDp8XC58XFt8XF0pL2csICdcXCQxJyk7CiAgICB9CgogICAgZnVuY3Rpb24gb3V0cHV0RXJyb3IoJEVsZW1lbnQsIEVycm9yVHlwZSwgRXJyb3JEZXNjcmlwdGlvbiwgSGludCl7CiAgICAgICAgdmFyICRDb250YWluZXIsCiAgICAgICAgICAgIENvZGUsCiAgICAgICAgICAgIE1lc3NhZ2U7CgogICAgICAgICQoJyNGcmVkSFRNTENoZWNrUnVubmluZycpLnJlbW92ZSgpOwogICAgICAgIEVycm9yc0ZvdW5kID0gdHJ1ZTsKCiAgICAgICAgLy8gR2V0IGVsZW1lbnQgSFRNTCBieSB3cmFwcGluZyBpdCBpbiBhIGRpdiBhbmQgY2FsbGluZyAuaHRtbCgpIG9uIHRoYXQKICAgICAgICAkQ29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKTsKICAgICAgICAkQ29udGFpbmVyLmFwcGVuZCgkRWxlbWVudC5jbG9uZSgpKTsKCiAgICAgICAgQ29kZSA9ICRDb250YWluZXIuaHRtbCgpOwogICAgICAgIGlmIChDb2RlLmxlbmd0aCA+IDE2MCkgewogICAgICAgICAgICBDb2RlID0gQ29kZS5zdWJzdHJpbmcoMCwgMTYwKSArICcuLi4nOwogICAgICAgIH0KCiAgICAgICAgTWVzc2FnZSA9ICQoJzxwIGNsYXNzPSJTbWFsbCI+PC9wPicpOwogICAgICAgIE1lc3NhZ2UuYXBwZW5kKCc8c3BhbiBjbGFzcz0iRXJyb3IiPkVycm9yOjwvc3Bhbj4gPHN0cm9uZz4nICsgRXJyb3JEZXNjcmlwdGlvbiArICc8L3N0cm9uZz48ZGl2PicgKyBIaW50ICsgJzwvZGl2PjxkaXY+PGNvZGU+JyArIGh0bWxFbmNvZGUoQ29kZSkgKyAnPC9jb2RlPjwvZGl2PicpOwogICAgICAgICQoJyNGcmVkSFRNTENoZWNrUmVzdWx0cycpLmFwcGVuZChNZXNzYWdlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFBlcmZvcm1zIHZhcmlvdXMgYWNjZXNzaWJpbGl0eSBjaGVja3MgdG8gc2VlIGlmIHRoZSBIVE1MIGNvZGUKICAgICAqICAgICAgdmlvbGF0ZXMgc29tZSBvZiBvdXIgZ3VpZGVsaW5lcy4KICAgICAqICAgICAgUmV0dXJucyBub3RoaW5nLCBidXQgY2FsbHMgT3V0cHV0RXJyb3IgaWYgYW4gZXJyb3Igd2FzIGZvdW5kLgogICAgICovCgogICAgZnVuY3Rpb24gQ2hlY2tBY2Nlc3NpYmlsaXR5KCkgewogICAgICAgIC8qCiAgICAgICAgICogY2hlY2sgaWYgaW5wdXQgZWxlbWVudHMgZWl0aGVyIGhhdmUgYSBsYWJlbCBvciBhbiBhc3NpZ25lZCB0aXRsZSB0ZXh0CiAgICAgICAgICovCiAgICAgICAgJCgnaW5wdXQ6dGV4dDp2aXNpYmxlLCBpbnB1dDpwYXNzd29yZDp2aXNpYmxlLCBpbnB1dDpjaGVja2JveDp2aXNpYmxlLCBpbnB1dDpyYWRpbzp2aXNpYmxlLCBzZWxlY3Q6dmlzaWJsZSwgdGV4dGFyZWE6dmlzaWJsZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSwKICAgICAgICAgICAgICAgICRMYWJlbCA9ICQoW10pLAogICAgICAgICAgICAgICAgVGl0bGU7CgogICAgICAgICAgICAvLyBJZ25vcmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHBsYWNlaG9sZGVyIHRleHQKICAgICAgICAgICAgaWYgKCR0aGlzLmF0dHIoJ3BsYWNlaG9sZGVyJykgJiYgJHRoaXMuYXR0cigncGxhY2Vob2xkZXInKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gZmlyc3QgbG9vayBmb3IgbGFiZWxzIHdoaWNoIHJlZmVyIHRvIHRoaXMgZWxlbWVudCBieSBpZAogICAgICAgICAgICBpZiAoJHRoaXMuYXR0cignaWQnKSAmJiAkdGhpcy5hdHRyKCdpZCcpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgJExhYmVsID0gJCgnbGFiZWxbZm9yPScgKyBlc2NhcGVTZWxlY3RvcigkdGhpcy5hdHRyKCdpZCcpKSArICddJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gdGhlbiBsb29rIGZvciBsYWJlbHMgd2hpY2ggc3Vycm91bmQgdGhlIGN1cnJlbnQgZWxlbWVudAogICAgICAgICAgICBpZiAoISRMYWJlbC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICRMYWJlbCA9ICR0aGlzLnBhcmVudHMoJ2xhYmVsJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkTGFiZWwubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgb3V0cHV0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMsCiAgICAgICAgICAgICAgICAgICAgJ0FjY2Vzc2liaWxpdHlNdWx0aXBsZUxhYmVsJywKICAgICAgICAgICAgICAgICAgICAnSW5wdXQgZWxlbWVudCB3aXRoIG1vcmUgdGhhbiBvbmUgYXNzaWduZWQgbGFiZWxzJywKICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIGxhYmVsIGlzIHByZXNlbnQgZm9yIHRoaXMgaW5wdXQgZWxlbWVudC4nCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBmaXJzdCBjaGVjayBpZiBhIHRpdGxlIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGF0IGlzIGFsc28gb2sgZm9yIGFjY2Vzc2liaWxpdHkKICAgICAgICAgICAgVGl0bGUgPSAkdGhpcy5hdHRyKCd0aXRsZScpOwogICAgICAgICAgICBpZiAoVGl0bGUgJiYgVGl0bGUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIG9rLCBubyB0aXRsZSBhdmFpbGFibGUsIG5vdyBsb29rIGZvciBhbiBhc3NpZ25lZCBsYWJlbCBlbGVtZW50CiAgICAgICAgICAgIGlmICghJExhYmVsIHx8ICEkTGFiZWwubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBvdXRwdXRFcnJvcigKICAgICAgICAgICAgICAgICAgICAkdGhpcywKICAgICAgICAgICAgICAgICAgICAnQWNjZXNzaWJpbGl0eU1pc3NpbmdMYWJlbCcsCiAgICAgICAgICAgICAgICAgICAgJ0lucHV0IGVsZW1lbnQgd2l0aG91dCBhIGRlc2NyaWJpbmcgbGFiZWwsIHBsYWNlaG9sZGVyIG9yIHRpdGxlIGF0dHJpYnV0ZScsCiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBhZGQgYSBwbGFjZWhvbGRlciBvciB0aXRsZSBhdHRyaWJ1dGUgb3IgYSBsYWJlbCBlbGVtZW50IHdpdGggYSAic3BlYWtpbmciIGRlc2NyaXB0aW9uIGZvciB0aGlzIGVsZW1lbnQuJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICAvKgogICAgICAgICAqIGNoZWNrIGlmIGxpbmtzIGhhdmUgZWl0aGVyIGEgdGV4dCBvciBhIHRpdGxlCiAgICAgICAgICovCiAgICAgICAgJCgnYScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKCiAgICAgICAgICAgIC8vIGlnbm9yZSBpZiBpdCdzIGEgImEgbmFtZSIgYW5kIG5vICJhIGhyZWYiCiAgICAgICAgICAgIGlmICgkdGhpcy5hdHRyKCduYW1lJykgJiYgISR0aGlzLmF0dHIoJ2hyZWYnKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBsb2cgaWYgYW4gYXR0cmlidXRlIHRpdGxlIGV4dGlzdHMgYnV0IG5vdGhpbmcgaXMgaW4gdGhlcmUsIHNvbWV0aGluZyBtaXNzZWQgc29tZWJvZHkgKGUuIGcuIHRpdGxlPSIiKQogICAgICAgICAgICAkLmVhY2goJHRoaXNbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMubmFtZSA9PT0gJ3RpdGxlJyAmJiAhdGhpcy52YWx1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXRFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICdBY2Nlc3NpYmlsaXR5SW5hY2Nlc3NpYmxlTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICdMaW5rIHdpdGggdGl0bGUgYnV0IHdpdGhvdXQgdmFsdWUnLAogICAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IGV2ZXJ5IGxpbmsgaGFzIGEgdGl0bGUgYXR0cmlidXRlIG5vdCBlbXB0eS4nCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBldmVyeXRoaW5nIGlzIG9rLCBpZiB0ZXh0IGluIGEgaHJlZiBleGlzdHMKICAgICAgICAgICAgaWYgKCR0aGlzLnRleHQoKSAmJiAkdGhpcy50ZXh0KCkubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgaXMgb2ssIGlmIHRpdGxlIGluIGEgaHJlZiBleGlzdHMKICAgICAgICAgICAgaWYgKCR0aGlzLmF0dHIoJ3RpdGxlJykgJiYgJHRoaXMuYXR0cigndGl0bGUnKS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgb3V0cHV0RXJyb3IoCiAgICAgICAgICAgICAgICAkdGhpcywKICAgICAgICAgICAgICAgICdBY2Nlc3NpYmlsaXR5SW5hY2Nlc3NpYmxlTGluaycsCiAgICAgICAgICAgICAgICAnTGluayB3aXRob3V0IHRleHQgb3IgdGl0bGUnLAogICAgICAgICAgICAgICAgJ1BsZWFzZSBtYWtlIHN1cmUgdGhhdCBldmVyeSBsaW5rIGhhcyBlaXRoZXIgYSB0ZXh0IGNvbnRlbnQgb3IgYSB0aXRsZSBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBieSBhIHNjcmVlbnJlYWRlciB0byBpZGVudGlmeSB0aGUgbGluay4nCiAgICAgICAgICAgICk7CgogICAgICAgIH0pOwogICAgfQogICAgQ2hlY2tGdW5jdGlvbnMucHVzaChDaGVja0FjY2Vzc2liaWxpdHkpOwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgUGVyZm9ybXMgdmFyaW91cyBjaGVja3MgZm9yIGJhZCBIVE1MIHByYWN0aWNlLgogICAgICogICAgICBSZXR1cm5zIG5vdGhpbmcsIGJ1dCBjYWxscyBPdXRwdXRFcnJvciBpZiBhbiBlcnJvciB3YXMgZm91bmQuCiAgICAgKi8KCiAgICBmdW5jdGlvbiBDaGVja0JhZFByYWN0aWNlKCkgewogICAgICAgIHZhciBPYnNvbGV0ZUVsZW1lbnQyUmVwbGFjZW1lbnQsCiAgICAgICAgICAgIFVzZWRJRHMgPSBbXTsKCiAgICAgICAgLy8gY2hlY2sgZm9yIGlucHV0cyB3aGljaCBzaG91bGQgYmUgYnV0dG9ucwogICAgICAgICQoJ2lucHV0OmJ1dHRvbiwgaW5wdXQ6c3VibWl0LCBpbnB1dDpyZXNldCcpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgICAgb3V0cHV0RXJyb3IoCiAgICAgICAgICAgICAgICAkdGhpcywKICAgICAgICAgICAgICAgICdCYWRQcmFjdGljZUlucHV0QnV0dG9uJywKICAgICAgICAgICAgICAgICdPbGQgaW5wdXQgd2l0aCB0eXBlIGJ1dHRvbiwgc3VibWl0IG9yIHJlc2V0IGRldGVjdGVkJywKICAgICAgICAgICAgICAgICdQbGVhc2UgcmVwbGFjZSB0aGlzIGVsZW1lbnQgd2l0aCBhIDxjb2RlPiZsdDtidXR0b24mZ3Q7PC9jb2RlPiB3aXRoIHRoZSBzYW1lIHR5cGUuIElucHV0IGZpZWxkcyBtdXN0IG5vdCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UgYW55IG1vcmUuJwogICAgICAgICAgICApOwogICAgICAgIH0pOwoKICAgICAgICAvKgogICAgICAgIFRPRE86IGxvb2sgZm9yIGEgZml4IGZvciBjaHJvbWUuIEluIENocm9tZSwgdGhlIHNpemUgYXR0cmlidXRlIGhhcyBhIHZhbHVlIG9mIDIwIGlmCiAgICAgICAgICAgIGl0IHdhcyBub3Qgc3BlY2lmaWVkLgogICAgICAgIC8vIGNoZWNrIGZvciBpbnB1dHMgd2l0aCBzaXplIGF0dHJpYnV0ZXMKICAgICAgICAkKCdpbnB1dDpub3QoOmZpbGUpJykuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpOwogICAgICAgICAgICBpZiAoJHRoaXMuYXR0cignc2l6ZScpICYmICR0aGlzLmF0dHIoJ3NpemUnKSA+IDApIHsKICAgICAgICAgICAgICAgIG91dHB1dEVycm9yKAogICAgICAgICAgICAgICAgICAgICR0aGlzLAogICAgICAgICAgICAgICAgICAgICdCYWRQcmFjdGljZUlucHV0U2l6ZScsCiAgICAgICAgICAgICAgICAgICAgJ0lucHV0IGVsZW1lbnQgd2l0aCBzaXplIGF0dHJpYnV0ZScsCiAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSByZW1vdmUgdGhlIHNpemUgYXR0cmlidXRlICh0aGlzIGlzIG9ubHkgYWxsb3dlZCBmb3IgZmlsZSB1cGxvYWQgZmllbGRzKS4gTWF5YmUgYSBjbGFzcyBsaWtlIFcyNXBjLCBXMzNwYyBvciBXNTBwYyB3b3VsZCBhY2hpZXZlIGEgc2ltaWxhciBlZmZlY3QuJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgICovCgogICAgICAgIC8vIGNoZWNrIGZvciBvYnNvbGV0ZSBlbGVtZW50cwogICAgICAgIE9ic29sZXRlRWxlbWVudDJSZXBsYWNlbWVudCA9IHsKICAgICAgICAgICAgYjogJzxjb2RlPiZsdDtzdHJvbmcmZ3Q7PC9jb2RlPicsCiAgICAgICAgICAgIGk6ICc8Y29kZT4mbHQ7ZW0mZ3Q7PC9jb2RlPicsCiAgICAgICAgICAgIGZvbnQ6ICc8Y29kZT4mbHQ7c3BhbiZndDs8L2NvZGU+IHdpdGggYSBDU1MgY2xhc3MnLAogICAgICAgICAgICBub2JyOiAnYSBwcm9wZXIgc3Vic3RpdHV0ZSAoZGVwZW5kcyBvbiBjb250ZXh0KScKICAgICAgICB9OwoKICAgICAgICAvLyBjaGVjayBmb3IgaW5wdXRzIHdpdGggc2l6ZSBhdHRyaWJ1dGVzCiAgICAgICAgJCgnZm9udCwgbm9icicpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgICAgb3V0cHV0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMsCiAgICAgICAgICAgICAgICAgICAgJ0JhZFByYWN0aWNlT2Jzb2xldGVFbGVtZW50JywKICAgICAgICAgICAgICAgICAgICAnT2Jzb2xldGUgZWxlbWVudCA8Y29kZT4mbHQ7JyArIHRoaXMudGFnTmFtZSArICcmZ3Q7PC9jb2RlPiB1c2VkJywKICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHJlcGxhY2UgaXQgd2l0aDogJyArIE9ic29sZXRlRWxlbWVudDJSZXBsYWNlbWVudFt0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKV0gKyAnLicKICAgICAgICAgICAgKTsKICAgICAgICB9KTsKCiAgICAgICAgLy8gY2hlY2sgZm9yIG11bHRpcGxlIHVzYWdlIG9mIG9uZSBJRAogICAgICAgICQoJ2Rpdiwgc3BhbiwgdWwsIG9sLCBsaSwgYSwgaDEsIGgyLCBoMywgaDQsIGg1LCBpbnB1dCwgc2VsZWN0JykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKSwKICAgICAgICAgICAgICAgIElEID0gJHRoaXMuYXR0cignaWQnKSB8fCAnJzsKCiAgICAgICAgICAgIGlmIChJRCkgewogICAgICAgICAgICAgICAgaWYgKCQuaW5BcnJheShJRCwgVXNlZElEcykgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCYWRQcmFjdGljZU11bHRpcGxlSURVc2FnZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSUQgdXNlZCBtdWx0aXBsZSB0aW1lczogJyArIElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGFuIElEIG9ubHkgb25jZSEnCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIFVzZWRJRHMucHVzaCgkKHRoaXMpLmF0dHIoJ2lkJykpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGZ1bmN0aW9uIG9ic29sZXRlQ2xhc3NFcnJvcihDbGFzc05hbWUpIHsKICAgICAgICAgICAgLy8gUmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGNhbGxiYWNrIGJ5IGVhY2goKS4KICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgIG91dHB1dEVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgJ0JhZFByYWN0aWNlT2Jzb2xldGVDbGFzcycsCiAgICAgICAgICAgICAgICAgICAgICAgICdPYnNvbGV0ZSBjbGFzcyA8Y29kZT4iJyArIENsYXNzTmFtZSArICciPC9jb2RlPiB1c2VkJywKICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSByZW1vdmUgaXQgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIHByb3BlciBzdWJzdGl0dXRlLicKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAvLyBjaGVjayBmb3IgaW5wdXRzIHdpdGggc2l6ZSBhdHRyaWJ1dGVzCiAgICAgICAgJCgnLm1haW5ib2R5JykuZWFjaChvYnNvbGV0ZUNsYXNzRXJyb3IoJ21haW5ib2R5JykpOwogICAgICAgICQoJy5jb250ZW50a2V5JykuZWFjaChvYnNvbGV0ZUNsYXNzRXJyb3IoJ2NvbnRlbnRrZXknKSk7CiAgICAgICAgJCgnLmNvbnRlbnR2YWx1ZScpLmVhY2gob2Jzb2xldGVDbGFzc0Vycm9yKCdjb250ZW50dmFsdWUnKSk7CiAgICAgICAgJCgnLnNlYXJjaGFjdGl2ZScpLmVhY2gob2Jzb2xldGVDbGFzc0Vycm9yKCdzZWFyY2hhY3RpdmUnKSk7CiAgICAgICAgJCgnLnNlYXJjaHBhc3NpdmUnKS5lYWNoKG9ic29sZXRlQ2xhc3NFcnJvcignc2VhcmNocGFzc2l2ZScpKTsKCiAgICAgICAgLy8gY2hlY2sgZm9yIGV2ZW50cwogICAgICAgICQoImRpdiIpLmVhY2goZnVuY3Rpb24oKXsKCiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyksCiAgICAgICAgICAgICAgICAkQ29udGFpbmVyLAogICAgICAgICAgICAgICAgQ29kZSwKICAgICAgICAgICAgICAgIEV2ZW50cywKICAgICAgICAgICAgICAgIEV2ZW50OwoKICAgICAgICAgICAgLy8gRG9uJ3Qgb3V0cHV0IHRoaXMgZXJyb3IgZm9yIGZyZWQgaXRzZWxmLgogICAgICAgICAgICAvLyBXZSBhbHNvIGN1cnJlbnRseSBuZWVkIG9uY2xpY2sgZXZlbnRzIGluIHRoZSBtYWluIG1lbnUuCiAgICAgICAgICAgIGlmICgkdGhpcy5jbG9zZXN0KCcuRGV2ZWxGcmVkQ29udGFpbmVyLCAjTmF2aWdhdGlvbkNvbnRhaW5lcicpLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBHZXQgZWxlbWVudCBIVE1MIGJ5IHdyYXBwaW5nIGl0IGluIGEgZGl2IGFuZCBjYWxsaW5nIC5odG1sKCkgb24gdGhhdAogICAgICAgICAgICAkQ29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKTsKICAgICAgICAgICAgJENvbnRhaW5lci5hcHBlbmQoJHRoaXMuY2xvbmUoKSk7CgogICAgICAgICAgICAvLyBvbmxvYWQgYXR0cmlidXRlIGlzIHNvbWV0aW1lcyBuZWVkZWQgZm9yIGlmcmFtZXMsIHNvIHdlIGp1c3QgcmVtb3ZlIGl0IGZvciB0aGUgY2hlY2sKICAgICAgICAgICAgJENvbnRhaW5lci5maW5kKCdpZnJhbWUnKS5yZW1vdmVBdHRyKCdvbmxvYWQnKTsKCiAgICAgICAgICAgIENvZGUgPSAkQ29udGFpbmVyLmh0bWwoKTsKCiAgICAgICAgICAgIC8vIHNlYXJjaCBmb3IgZXZlbnRzIGluIGh0bWwgZWxlbWVudCBjb2RlCiAgICAgICAgICAgIEV2ZW50cyA9IENvZGUubWF0Y2goL1xzK29uXHcrPS9pZyk7CgogICAgICAgICAgICAvLyBzZW5kIGVycm9yIHRvIG91dHB1dAogICAgICAgICAgICBpZiAoRXZlbnRzICE9PSBudWxsKXsKICAgICAgICAgICAgICAgIC8vIGNsZWFuIGxlYWRpbmcgc3BhY2UgYW5kIGVxdWFscyBzaWduIGZyb20gdGhlIFJlZ0V4IG1hdGNoaW5nCiAgICAgICAgICAgICAgICBmb3IgKEV2ZW50IGluIEV2ZW50cyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKEV2ZW50cy5oYXNPd25Qcm9wZXJ0eShFdmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRzW0V2ZW50XSA9IEV2ZW50c1tFdmVudF0udG9TdHJpbmcoKS5tYXRjaCgvb25cdysvKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvdXRwdXRFcnJvcigKICAgICAgICAgICAgICAgICAgICAkdGhpcywKICAgICAgICAgICAgICAgICAgICAnQmFkUHJhY3RpY2VFdmVudCcsCiAgICAgICAgICAgICAgICAgICAgJ0V2ZW50IDxjb2RlPiInICsgRXZlbnRzICsgJyI8L2NvZGU+IHVzZWQnLAogICAgICAgICAgICAgICAgICAgICdQbGVhc2UgcmVtb3ZlIGl0IGFuZCByZXBsYWNlIGl0IHdpdGggYSBwcm9wZXIgc3Vic3RpdHV0ZS4nCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgfQogICAgQ2hlY2tGdW5jdGlvbnMucHVzaChDaGVja0JhZFByYWN0aWNlKTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQGRlc2NyaXB0aW9uCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIEhUTUxDaGVjayBjYW4gYmUgc3RhcnRlZCAoalF1ZXJ5IGlzIGxvYWRlZCkuCiAgICAgKi8KICAgIFRhcmdldE5TLkNoZWNrRm9yU3RhcnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKGpRdWVyeSkgewogICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgQ29yZS5GcmVkLkhUTUxDaGVjay5SdW4oKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBDb3JlLkZyZWQuSFRNTENoZWNrLkNoZWNrRm9yU3RhcnQoKTsKICAgICAgICAgICAgfSwgMjUwKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgUnVucyBhbGwgYXZhaWxhYmxlIGNoZWNrIGZ1bmN0aW9ucwogICAgICovCiAgICBUYXJnZXROUy5SdW4gPSBmdW5jdGlvbigpewogICAgICAgICQuZWFjaChDaGVja0Z1bmN0aW9ucywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgdGhpcygpOwogICAgICAgIH0pOwogICAgICAgICQoJyNGcmVkSFRNTENoZWNrUnVubmluZycpLnJlbW92ZSgpOwogICAgICAgIGlmICghRXJyb3JzRm91bmQpIHsKICAgICAgICAgICAgJCgnI0ZyZWRIVE1MQ2hlY2tSZXN1bHRzJykuaHRtbCgnPHAgY2xhc3M9IkZyZWRKU0xpbnRTdWNjZXNzZnVsIj5BbGwgY2hlY2tzIG9rLjwvcD4nKTsKICAgICAgICB9CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLkZyZWQuSFRNTENoZWNrIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgovLyAtLQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMCBPVFJTIEFHLCBodHRwczovL290cnMuY29tLwovLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBSb3RoZXIgT1NTIEdtYkgsIGh0dHBzOi8vb3RvYm8uZGUvCi8vIC0tCi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCi8vIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi8vIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAovLyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwovLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgoidXNlIHN0cmljdCI7Ci8qZ2xvYmFsIEpTTElOVDogZmFsc2UsICQ6IGZhbHNlLCBqUXVlcnk6IGZhbHNlICovCgp2YXIgQ29yZSA9IENvcmUgfHwge307CkNvcmUuRnJlZCA9IENvcmUuRnJlZCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCBsb2dpYyBmb3IgdGhlIEZyZWQgbW9kdWxlIEpTTGludAogKi8KQ29yZS5GcmVkLkpTTGludCA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICBmdW5jdGlvbiBodG1sRXNjYXBlKHN0cikgewogICAgICAgIHJldHVybiBTdHJpbmcoc3RyKQogICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKQogICAgICAgICAgICAucmVwbGFjZSgvIi9nLCAnJnF1b3Q7JykKICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgJyYjMzk7JykKICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKQogICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcHJpdmF0ZQogICAgICogQGRlc2NyaXB0aW9uIFN0YXJ0IEpTTGludCBjaGVjay4KICAgICAqLwogICAgZnVuY3Rpb24gc3RhcnRKU0xpbnQoKSB7CiAgICAgICAgdmFyIFJlc3VsdCwKICAgICAgICAgICAgRXJyb3JzRm91bmQgPSBmYWxzZTsKCiAgICAgICAgLy8gVGhpcyBmdW5jIHNob3VsZCBub3QgYmUgc3RhcnRlZCBtb3JlIHRoYW4gb25lIHRpbWUuLi4KICAgICAgICBpZiAoVGFyZ2V0TlMuU3RhcnRlZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIFRhcmdldE5TLlN0YXJ0ZWQrKzsKCiAgICAgICAgLy8gU3RhcnQgSlNMaW50IGZvciBldmVyeSBzY3JpcHQgd2UgZm91bmQgYW5kIG91dHB1dCB0aGUgcmVzdWx0CiAgICAgICAgJC5lYWNoKFRhcmdldE5TLkFsbFNjcmlwdHMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEVycm9yT2JqZWN0LCBPdXRwdXQsIGk7CgogICAgICAgICAgICAvLyBJZ25vcmUgaW52YWxpZCBjb2RlIHRoYXQgaXMgaW5qZWN0ZWQgYnkgdGhlIGdvb2dsZSBhbmFseXRpY3Mgb3B0LW91dCBwbHVnaW4gZm9yIGJyb3dzZXJzLgogICAgICAgICAgICBpZiAodGhpcy5TcmMgPT09ICdpbmxpbmUnICYmIHRoaXMuU2NyaXB0Lm1hdGNoKC9fZ2FVc2VyUHJlZnMvKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBSZXN1bHQgPSBKU0xJTlQodGhpcy5TY3JpcHQsICh0aGlzLlNyYyA9PT0gJ2lubGluZScpID8gVGFyZ2V0TlMuSW5saW5lT3B0aW9ucyA6IFRhcmdldE5TLlJlbW90ZU9wdGlvbnMpOwogICAgICAgICAgICBpZiAoIVJlc3VsdCkgewogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEpTTElOVC5lcnJvcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBFcnJvck9iamVjdCA9IEpTTElOVC5lcnJvcnNbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKEVycm9yT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNGcmVkSlNMaW50UnVubmluZycpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgPSAnPGRpdiBjbGFzcz0iRnJlZEpTTGludEVycm9yIj4nOwogICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgKz0gJzxwPjxzcGFuIGNsYXNzPSJFcnJvciI+RXJyb3I6IDwvc3Bhbj48c3Ryb25nPicgKyBFcnJvck9iamVjdC5yZWFzb24gKyAnPC9zdHJvbmc+IFNvdXJjZTogICAgICcgKyB0aGlzLlNyYyArICc6JyArIEVycm9yT2JqZWN0LmxpbmUgKyAnOicgKyBFcnJvck9iamVjdC5jaGFyYWN0ZXIgKyAnPC9wPic7CiAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCArPSAnPGNvZGU+JyArIGh0bWxFc2NhcGUoRXJyb3JPYmplY3QuZXZpZGVuY2UpICsgJzwvY29kZT4nOwogICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgKz0gJzwvZGl2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNGcmVkSlNMaW50U2NyaXB0cycpLmFwcGVuZChPdXRwdXQpOwogICAgICAgICAgICAgICAgICAgICAgICBFcnJvcnNGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGFjdGl2YXRlIGVsc2UgYnJhbmNoIHRvIHNlZSBwb3NpdGl2ZSBjaGVjayByZXN1bHRzIHBlciBmaWxlIGZvciBmcmVkIGRlYnVnZ2luZwogICAgICAgICAgICAvL2Vsc2UgewogICAgICAgICAgICAvLyAgICAkKCcjRnJlZEpTTGludFJ1bm5pbmcnKS5yZW1vdmUoKTsKICAgICAgICAgICAgLy8gICAgJCgnI0ZyZWRKU0xpbnRTY3JpcHRzJykuYXBwZW5kKCc8cCBjbGFzcz0iRnJlZEpTTGludFN1Y2Nlc3NmdWwiPicgKyB0aGlzLlNyYyArICcgb2s8L3A+Jyk7CiAgICAgICAgICAgIC8vfQogICAgICAgIH0pOwogICAgICAgIGlmICghRXJyb3JzRm91bmQpIHsKICAgICAgICAgICAgJCgnI0ZyZWRKU0xpbnRSdW5uaW5nJykucmVtb3ZlKCk7CiAgICAgICAgICAgICQoJyNGcmVkSlNMaW50U2NyaXB0cycpLmFwcGVuZCgnPHAgY2xhc3M9IkZyZWRKU0xpbnRTdWNjZXNzZnVsIj5BbGwgY2hlY2tzIG9rLjwvcD4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChUYXJnZXROUy5BbGxTY3JpcHRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAkKCcjRnJlZEpTTGludFNjcmlwdHMnKS5hcHBlbmQoJzxwPk5vIHNjcmlwdHMgZm91bmQhPC9wPicpLmNzcygnaGVpZ2h0JywgJzE1cHgnKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAZmllbGQKICAgICAqIEBkZXNjcmlwdGlvbiBBbGwgb3B0aW9ucyBmb3IgSlNMaW50LgogICAgICovCiAgICBUYXJnZXROUy5Db21tb25PcHRpb25zID0gewogICAgICAgIGJyb3dzZXI6IHRydWUsCiAgICAgICAgd2hpdGU6IHRydWUsCiAgICAgICAgaW5kZW50OiA0LAogICAgICAgIGRldmVsOiB0cnVlLAogICAgICAgIG9uZXZhcjogdHJ1ZSwKICAgICAgICB1bmRlZjogdHJ1ZSwKICAgICAgICBub21lbjogdHJ1ZSwKICAgICAgICBlcWVxZXE6IHRydWUsCiAgICAgICAgcGx1c3BsdXM6IGZhbHNlLAogICAgICAgIGJpdHdpc2U6IHRydWUsCiAgICAgICAgc3RyaWN0OiB0cnVlLAogICAgICAgIGltbWVkOiB0cnVlLAogICAgICAgIHByZWRlZjogWydDb3JlJywgJ2lzSlF1ZXJ5T2JqZWN0JywgJyQnLCAnalF1ZXJ5JywgJ0NLRURJVE9SJywgJ3dpbmRvdycsICdkb2N1bWVudCcsICdwcmludFN0YWNrVHJhY2UnXQogICAgfTsKICAgIFRhcmdldE5TLlJlbW90ZU9wdGlvbnMgPSAkLmV4dGVuZChUYXJnZXROUy5Db21tb25PcHRpb25zLCB7fSk7CiAgICBUYXJnZXROUy5JbmxpbmVPcHRpb25zID0gJC5leHRlbmQoVGFyZ2V0TlMuQ29tbW9uT3B0aW9ucywgewogICAgICAgIHdoaXRlOiBmYWxzZQogICAgfSk7CgogICAgVGFyZ2V0TlMuQWxsU2NyaXB0cyA9IFRhcmdldE5TLkFsbFNjcmlwdHMgfHwgW107CiAgICBUYXJnZXROUy5XYWl0aW5nID0gMDsKICAgIFRhcmdldE5TLlN0YXJ0ZWQgPSAwOwogICAgVGFyZ2V0TlMuU291cmNlcyA9IHt9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBpcyB0aGUgaW5pdCBmdW5jdGlvbiBmb3IgSlNMaW50LgogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIC8vIHRoaXMgbW9kdWxlIG5lZWRzIGpRdWVyeSEKICAgICAgICBpZiAodHlwZW9mIGpRdWVyeSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWpRdWVyeSkgewogICAgICAgICAgICB3aW5kb3cuYWxlcnQoJ0ZyZWQgSlNMaW50IG1vZHVsZSBuZWVkcyBqUXVlcnkgbG9hZGVkJyk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdGcmVkSlNMaW50U2NyaXB0cycpLnN0eWxlLmhlaWdodCA9ICcxNXB4JzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIENvcmUuRnJlZC5KU0xpbnQuR2V0U2NyaXB0cygpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24gR2V0IGFsbCBzY3JpcHRzIHRvIGNoZWNrLgogICAgICovCiAgICBUYXJnZXROUy5HZXRTY3JpcHRzID0gZnVuY3Rpb24gKCkgewogICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFNjcmlwdHMsIFNvdXJjZTsKCiAgICAgICAgICAgICQoJ3NjcmlwdCcpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgLy8gRXhjbHVkZSB0aGUgRnJlZCBKYXZhU2NyaXB0IDstKQogICAgICAgICAgICAgICAgU2NyaXB0cyA9ICQodGhpcykudGV4dCgpOwoKICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmlzKCdbc3JjXScpKSB7CiAgICAgICAgICAgICAgICAgICAgU291cmNlID0gJCh0aGlzKS5hdHRyKCdzcmMnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIFNvdXJjZSA9ICdpbmxpbmUnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChTb3VyY2UgPT09ICdpbmxpbmUnKSB7CiAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuQWxsU2NyaXB0cy5wdXNoKHtTcmM6IFNvdXJjZSwgU2NyaXB0OiBTY3JpcHRzfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiBleHRlcm5hbCBzb3VyY2UgaXMgbm90IGEgdGhpcmRwYXJ0eSBzY3JpcHQsIGxvYWQgaXQhCiAgICAgICAgICAgICAgICAgICAgaWYgKCFTb3VyY2UubWF0Y2goL3RoaXJkcGFydHkvKSAmJiAhU291cmNlLm1hdGNoKC9jaHJvbWU6XC9cLy8pICYmICFUYXJnZXROUy5Tb3VyY2VzW1NvdXJjZV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0TlMuV2FpdGluZysrOwogICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXROUy5Tb3VyY2VzW1NvdXJjZV0gPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgJC5nZXQoU291cmNlLCB7fSwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLkFsbFNjcmlwdHMucHVzaCh7U3JjOiB0aGlzLnVybCwgU2NyaXB0OiBkYXRhfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXJnZXROUy5XYWl0aW5nLS07CiAgICAgICAgICAgICAgICAgICAgICAgIH0sICd0ZXh0Jyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIC8vIHN0YXJ0IGpzbGludCwgaWYgYWxsIGFqYXggcmVxdWVzdHMgYXJlIHJlYWR5CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgQ29yZS5GcmVkLkpTTGludC5DaGVja0ZvclN0YXJ0KCk7CiAgICAgICAgICAgIH0sIDI1MCk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MsIGlmIEpTTGludCBjYW4gYmUgc3RhcnRlZCAoYWxsIHNjcmlwdHMgYXJlIGxvYWRlZCkuCiAgICAgKi8KICAgIFRhcmdldE5TLkNoZWNrRm9yU3RhcnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKFRhcmdldE5TLldhaXRpbmcgPD0gMCAmJiBUYXJnZXROUy5TdGFydGVkID09PSAwKSB7CiAgICAgICAgICAgIHN0YXJ0SlNMaW50KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoVGFyZ2V0TlMuU3RhcnRlZCA9PT0gMCkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgQ29yZS5GcmVkLkpTTGludC5DaGVja0ZvclN0YXJ0KCk7CiAgICAgICAgICAgICAgICB9LCAyNTApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLkZyZWQuSlNMaW50IHx8IHt9KSk7Cg==
Ly8gKEMpMjAwMiBEb3VnbGFzIENyb2NrZm9yZAovLyB3d3cuSlNMaW50LmNvbQoidXNlIHN0cmljdCI7dmFyIEpTTElOVD0oZnVuY3Rpb24oKXt2YXIgYWRzYWZlX2lkLGFkc2FmZV9tYXksYWRzYWZlX3dlbnQsYW5vbm5hbWUsYXBwcm92ZWQsYXRydWxlPXttZWRpYTp0cnVlLCdmb250LWZhY2UnOnRydWUscGFnZTp0cnVlfSxiYW5nPXsnPCc6dHJ1ZSwnPD0nOnRydWUsJz09Jzp0cnVlLCc9PT0nOnRydWUsJyE9PSc6dHJ1ZSwnIT0nOnRydWUsJz4nOnRydWUsJz49Jzp0cnVlLCcrJzp0cnVlLCctJzp0cnVlLCcqJzp0cnVlLCcvJzp0cnVlLCclJzp0cnVlfSxiYW5uZWQ9eydhcmd1bWVudHMnOnRydWUsY2FsbGVlOnRydWUsY2FsbGVyOnRydWUsY29uc3RydWN0b3I6dHJ1ZSwnZXZhbCc6dHJ1ZSxwcm90b3R5cGU6dHJ1ZSx1bndhdGNoOnRydWUsdmFsdWVPZjp0cnVlLHdhdGNoOnRydWV9LGJvb2xPcHRpb25zPXthZHNhZmU6dHJ1ZSxiaXR3aXNlOnRydWUsYnJvd3Nlcjp0cnVlLGNhcDp0cnVlLGNzczp0cnVlLGRlYnVnOnRydWUsZGV2ZWw6dHJ1ZSxlcWVxZXE6dHJ1ZSxldmlsOnRydWUsZm9yaW46dHJ1ZSxmcmFnbWVudDp0cnVlLGltbWVkOnRydWUsbGF4YnJlYWs6dHJ1ZSxuZXdjYXA6dHJ1ZSxub21lbjp0cnVlLG9uOnRydWUsb25ldmFyOnRydWUscGFzc2ZhaWw6dHJ1ZSxwbHVzcGx1czp0cnVlLHJlZ2V4cDp0cnVlLHJoaW5vOnRydWUsdW5kZWY6dHJ1ZSxzYWZlOnRydWUsc2lkZWJhcjp0cnVlLHN0cmljdDp0cnVlLHN1Yjp0cnVlLHdoaXRlOnRydWUsd2lkZ2V0OnRydWV9LGJyb3dzZXI9e2FkZEV2ZW50TGlzdGVuZXI6ZmFsc2UsYmx1cjpmYWxzZSxjbGVhckludGVydmFsOmZhbHNlLGNsZWFyVGltZW91dDpmYWxzZSxjbG9zZTpmYWxzZSxjbG9zZWQ6ZmFsc2UsZGVmYXVsdFN0YXR1czpmYWxzZSxkb2N1bWVudDpmYWxzZSxldmVudDpmYWxzZSxmb2N1czpmYWxzZSxmcmFtZXM6ZmFsc2UsZ2V0Q29tcHV0ZWRTdHlsZTpmYWxzZSxoaXN0b3J5OmZhbHNlLEltYWdlOmZhbHNlLGxlbmd0aDpmYWxzZSxsb2NhdGlvbjpmYWxzZSxtb3ZlQnk6ZmFsc2UsbW92ZVRvOmZhbHNlLG5hbWU6ZmFsc2UsbmF2aWdhdG9yOmZhbHNlLG9uYmVmb3JldW5sb2FkOnRydWUsb25ibHVyOnRydWUsb25lcnJvcjp0cnVlLG9uZm9jdXM6dHJ1ZSxvbmxvYWQ6dHJ1ZSxvbnJlc2l6ZTp0cnVlLG9udW5sb2FkOnRydWUsb3BlbjpmYWxzZSxvcGVuZXI6ZmFsc2UsT3B0aW9uOmZhbHNlLHBhcmVudDpmYWxzZSxwcmludDpmYWxzZSxyZW1vdmVFdmVudExpc3RlbmVyOmZhbHNlLHJlc2l6ZUJ5OmZhbHNlLHJlc2l6ZVRvOmZhbHNlLHNjcmVlbjpmYWxzZSxzY3JvbGw6ZmFsc2Usc2Nyb2xsQnk6ZmFsc2Usc2Nyb2xsVG86ZmFsc2Usc2V0SW50ZXJ2YWw6ZmFsc2Usc2V0VGltZW91dDpmYWxzZSxzdGF0dXM6ZmFsc2UsdG9wOmZhbHNlLFhNTEh0dHBSZXF1ZXN0OmZhbHNlfSxjc3NBdHRyaWJ1dGVEYXRhLGNzc0FueSxjc3NDb2xvckRhdGE9eyJhbGljZWJsdWUiOnRydWUsImFudGlxdWV3aGl0ZSI6dHJ1ZSwiYXF1YSI6dHJ1ZSwiYXF1YW1hcmluZSI6dHJ1ZSwiYXp1cmUiOnRydWUsImJlaWdlIjp0cnVlLCJiaXNxdWUiOnRydWUsImJsYWNrIjp0cnVlLCJibGFuY2hlZGFsbW9uZCI6dHJ1ZSwiYmx1ZSI6dHJ1ZSwiYmx1ZXZpb2xldCI6dHJ1ZSwiYnJvd24iOnRydWUsImJ1cmx5d29vZCI6dHJ1ZSwiY2FkZXRibHVlIjp0cnVlLCJjaGFydHJldXNlIjp0cnVlLCJjaG9jb2xhdGUiOnRydWUsImNvcmFsIjp0cnVlLCJjb3JuZmxvd2VyYmx1ZSI6dHJ1ZSwiY29ybnNpbGsiOnRydWUsImNyaW1zb24iOnRydWUsImN5YW4iOnRydWUsImRhcmtibHVlIjp0cnVlLCJkYXJrY3lhbiI6dHJ1ZSwiZGFya2dvbGRlbnJvZCI6dHJ1ZSwiZGFya2dyYXkiOnRydWUsImRhcmtncmVlbiI6dHJ1ZSwiZGFya2toYWtpIjp0cnVlLCJkYXJrbWFnZW50YSI6dHJ1ZSwiZGFya29saXZlZ3JlZW4iOnRydWUsImRhcmtvcmFuZ2UiOnRydWUsImRhcmtvcmNoaWQiOnRydWUsImRhcmtyZWQiOnRydWUsImRhcmtzYWxtb24iOnRydWUsImRhcmtzZWFncmVlbiI6dHJ1ZSwiZGFya3NsYXRlYmx1ZSI6dHJ1ZSwiZGFya3NsYXRlZ3JheSI6dHJ1ZSwiZGFya3R1cnF1b2lzZSI6dHJ1ZSwiZGFya3Zpb2xldCI6dHJ1ZSwiZGVlcHBpbmsiOnRydWUsImRlZXBza3libHVlIjp0cnVlLCJkaW1ncmF5Ijp0cnVlLCJkb2RnZXJibHVlIjp0cnVlLCJmaXJlYnJpY2siOnRydWUsImZsb3JhbHdoaXRlIjp0cnVlLCJmb3Jlc3RncmVlbiI6dHJ1ZSwiZnVjaHNpYSI6dHJ1ZSwiZ2FpbnNib3JvIjp0cnVlLCJnaG9zdHdoaXRlIjp0cnVlLCJnb2xkIjp0cnVlLCJnb2xkZW5yb2QiOnRydWUsImdyYXkiOnRydWUsImdyZWVuIjp0cnVlLCJncmVlbnllbGxvdyI6dHJ1ZSwiaG9uZXlkZXciOnRydWUsImhvdHBpbmsiOnRydWUsImluZGlhbnJlZCI6dHJ1ZSwiaW5kaWdvIjp0cnVlLCJpdm9yeSI6dHJ1ZSwia2hha2kiOnRydWUsImxhdmVuZGVyIjp0cnVlLCJsYXZlbmRlcmJsdXNoIjp0cnVlLCJsYXduZ3JlZW4iOnRydWUsImxlbW9uY2hpZmZvbiI6dHJ1ZSwibGlnaHRibHVlIjp0cnVlLCJsaWdodGNvcmFsIjp0cnVlLCJsaWdodGN5YW4iOnRydWUsImxpZ2h0Z29sZGVucm9keWVsbG93Ijp0cnVlLCJsaWdodGdyZWVuIjp0cnVlLCJsaWdodHBpbmsiOnRydWUsImxpZ2h0c2FsbW9uIjp0cnVlLCJsaWdodHNlYWdyZWVuIjp0cnVlLCJsaWdodHNreWJsdWUiOnRydWUsImxpZ2h0c2xhdGVncmF5Ijp0cnVlLCJsaWdodHN0ZWVsYmx1ZSI6dHJ1ZSwibGlnaHR5ZWxsb3ciOnRydWUsImxpbWUiOnRydWUsImxpbWVncmVlbiI6dHJ1ZSwibGluZW4iOnRydWUsIm1hZ2VudGEiOnRydWUsIm1hcm9vbiI6dHJ1ZSwibWVkaXVtYXF1YW1hcmluZSI6dHJ1ZSwibWVkaXVtYmx1ZSI6dHJ1ZSwibWVkaXVtb3JjaGlkIjp0cnVlLCJtZWRpdW1wdXJwbGUiOnRydWUsIm1lZGl1bXNlYWdyZWVuIjp0cnVlLCJtZWRpdW1zbGF0ZWJsdWUiOnRydWUsIm1lZGl1bXNwcmluZ2dyZWVuIjp0cnVlLCJtZWRpdW10dXJxdW9pc2UiOnRydWUsIm1lZGl1bXZpb2xldHJlZCI6dHJ1ZSwibWlkbmlnaHRibHVlIjp0cnVlLCJtaW50Y3JlYW0iOnRydWUsIm1pc3R5cm9zZSI6dHJ1ZSwibW9jY2FzaW4iOnRydWUsIm5hdmFqb3doaXRlIjp0cnVlLCJuYXZ5Ijp0cnVlLCJvbGRsYWNlIjp0cnVlLCJvbGl2ZSI6dHJ1ZSwib2xpdmVkcmFiIjp0cnVlLCJvcmFuZ2UiOnRydWUsIm9yYW5nZXJlZCI6dHJ1ZSwib3JjaGlkIjp0cnVlLCJwYWxlZ29sZGVucm9kIjp0cnVlLCJwYWxlZ3JlZW4iOnRydWUsInBhbGV0dXJxdW9pc2UiOnRydWUsInBhbGV2aW9sZXRyZWQiOnRydWUsInBhcGF5YXdoaXAiOnRydWUsInBlYWNocHVmZiI6dHJ1ZSwicGVydSI6dHJ1ZSwicGluayI6dHJ1ZSwicGx1bSI6dHJ1ZSwicG93ZGVyYmx1ZSI6dHJ1ZSwicHVycGxlIjp0cnVlLCJyZWQiOnRydWUsInJvc3licm93biI6dHJ1ZSwicm95YWxibHVlIjp0cnVlLCJzYWRkbGVicm93biI6dHJ1ZSwic2FsbW9uIjp0cnVlLCJzYW5keWJyb3duIjp0cnVlLCJzZWFncmVlbiI6dHJ1ZSwic2Vhc2hlbGwiOnRydWUsInNpZW5uYSI6dHJ1ZSwic2lsdmVyIjp0cnVlLCJza3libHVlIjp0cnVlLCJzbGF0ZWJsdWUiOnRydWUsInNsYXRlZ3JheSI6dHJ1ZSwic25vdyI6dHJ1ZSwic3ByaW5nZ3JlZW4iOnRydWUsInN0ZWVsYmx1ZSI6dHJ1ZSwidGFuIjp0cnVlLCJ0ZWFsIjp0cnVlLCJ0aGlzdGxlIjp0cnVlLCJ0b21hdG8iOnRydWUsInR1cnF1b2lzZSI6dHJ1ZSwidmlvbGV0Ijp0cnVlLCJ3aGVhdCI6dHJ1ZSwid2hpdGUiOnRydWUsIndoaXRlc21va2UiOnRydWUsInllbGxvdyI6dHJ1ZSwieWVsbG93Z3JlZW4iOnRydWV9LGNzc0JvcmRlclN0eWxlLGNzc0JyZWFrLGNzc0xlbmd0aERhdGE9eyclJzp0cnVlLCdjbSc6dHJ1ZSwnZW0nOnRydWUsJ2V4Jzp0cnVlLCdpbic6dHJ1ZSwnbW0nOnRydWUsJ3BjJzp0cnVlLCdwdCc6dHJ1ZSwncHgnOnRydWV9LGNzc092ZXJmbG93LGRldmVsPXthbGVydDpmYWxzZSxjb25maXJtOmZhbHNlLGNvbnNvbGU6ZmFsc2UsRGVidWc6ZmFsc2Usb3BlcmE6ZmFsc2UscHJvbXB0OmZhbHNlfSxlc2NhcGVzPXsnXGInOidcXGInLCdcdCc6J1xcdCcsJ1xuJzonXFxuJywnXGYnOidcXGYnLCdccic6J1xccicsJyInOidcXCInLCcvJzonXFwvJywnXFwnOidcXFxcJ30sZnVuY3QsZnVuY3Rpb25pY2l0eT1bJ2Nsb3N1cmUnLCdleGNlcHRpb24nLCdnbG9iYWwnLCdsYWJlbCcsJ291dGVyJywndW51c2VkJywndmFyJ10sZnVuY3Rpb25zLGdsb2JhbCxodG1sdGFnPXthOnt9LGFiYnI6e30sYWNyb255bTp7fSxhZGRyZXNzOnt9LGFwcGxldDp7fSxhcmVhOntlbXB0eTp0cnVlLHBhcmVudDonIG1hcCAnfSxiOnt9LGJhc2U6e2VtcHR5OnRydWUscGFyZW50OicgaGVhZCAnfSxiZG86e30sYmlnOnt9LGJsb2NrcXVvdGU6e30sYm9keTp7cGFyZW50OicgaHRtbCBub2ZyYW1lcyAnfSxicjp7ZW1wdHk6dHJ1ZX0sYnV0dG9uOnt9LGNhbnZhczp7cGFyZW50OicgYm9keSBwIGRpdiB0aCB0ZCAnfSxjYXB0aW9uOntwYXJlbnQ6JyB0YWJsZSAnfSxjZW50ZXI6e30sY2l0ZTp7fSxjb2RlOnt9LGNvbDp7ZW1wdHk6dHJ1ZSxwYXJlbnQ6JyB0YWJsZSBjb2xncm91cCAnfSxjb2xncm91cDp7cGFyZW50OicgdGFibGUgJ30sZGQ6e3BhcmVudDonIGRsICd9LGRlbDp7fSxkZm46e30sZGlyOnt9LGRpdjp7fSxkbDp7fSxkdDp7cGFyZW50OicgZGwgJ30sZW06e30sZW1iZWQ6e30sZmllbGRzZXQ6e30sZm9udDp7fSxmb3JtOnt9LGZyYW1lOntlbXB0eTp0cnVlLHBhcmVudDonIGZyYW1lc2V0ICd9LGZyYW1lc2V0OntwYXJlbnQ6JyBodG1sIGZyYW1lc2V0ICd9LGgxOnt9LGgyOnt9LGgzOnt9LGg0Ont9LGg1Ont9LGg2Ont9LGhlYWQ6e3BhcmVudDonIGh0bWwgJ30saHRtbDp7cGFyZW50OicqJ30saHI6e2VtcHR5OnRydWV9LGk6e30saWZyYW1lOnt9LGltZzp7ZW1wdHk6dHJ1ZX0saW5wdXQ6e2VtcHR5OnRydWV9LGluczp7fSxrYmQ6e30sbGFiZWw6e30sbGVnZW5kOntwYXJlbnQ6JyBmaWVsZHNldCAnfSxsaTp7cGFyZW50OicgZGlyIG1lbnUgb2wgdWwgJ30sbGluazp7ZW1wdHk6dHJ1ZSxwYXJlbnQ6JyBoZWFkICd9LG1hcDp7fSxtZW51Ont9LG1ldGE6e2VtcHR5OnRydWUscGFyZW50OicgaGVhZCBub2ZyYW1lcyBub3NjcmlwdCAnfSxub2ZyYW1lczp7cGFyZW50OicgaHRtbCBib2R5ICd9LG5vc2NyaXB0OntwYXJlbnQ6JyBib2R5IGhlYWQgbm9mcmFtZXMgJ30sb2JqZWN0Ont9LG9sOnt9LG9wdGdyb3VwOntwYXJlbnQ6JyBzZWxlY3QgJ30sb3B0aW9uOntwYXJlbnQ6JyBvcHRncm91cCBzZWxlY3QgJ30scDp7fSxwYXJhbTp7ZW1wdHk6dHJ1ZSxwYXJlbnQ6JyBhcHBsZXQgb2JqZWN0ICd9LHByZTp7fSxxOnt9LHNhbXA6e30sc2NyaXB0OntlbXB0eTp0cnVlLHBhcmVudDonIGJvZHkgZGl2IGZyYW1lIGhlYWQgaWZyYW1lIHAgcHJlIHNwYW4gJ30sc2VsZWN0Ont9LHNtYWxsOnt9LHNwYW46e30sc3Ryb25nOnt9LHN0eWxlOntwYXJlbnQ6JyBoZWFkICcsZW1wdHk6dHJ1ZX0sc3ViOnt9LHN1cDp7fSx0YWJsZTp7fSx0Ym9keTp7cGFyZW50OicgdGFibGUgJ30sdGQ6e3BhcmVudDonIHRyICd9LHRleHRhcmVhOnt9LHRmb290OntwYXJlbnQ6JyB0YWJsZSAnfSx0aDp7cGFyZW50OicgdHIgJ30sdGhlYWQ6e3BhcmVudDonIHRhYmxlICd9LHRpdGxlOntwYXJlbnQ6JyBoZWFkICd9LHRyOntwYXJlbnQ6JyB0YWJsZSB0Ym9keSB0aGVhZCB0Zm9vdCAnfSx0dDp7fSx1Ont9LHVsOnt9LCd2YXInOnt9fSxpZHMsaW1wbGllZCxpbmJsb2NrLGluZGVudCxqc29ubW9kZSxsaW5lcyxsb29rYWhlYWQsbWVtYmVyLG1lbWJlcnNPbmx5LG5leHR0b2tlbixub3JlYWNoLG9wdGlvbixwcmVkZWZpbmVkLHByZXJlZyxwcmV2dG9rZW4scmhpbm89e2RlZmluZUNsYXNzOmZhbHNlLGRlc2VyaWFsaXplOmZhbHNlLGdjOmZhbHNlLGhlbHA6ZmFsc2UsbG9hZDpmYWxzZSxsb2FkQ2xhc3M6ZmFsc2UscHJpbnQ6ZmFsc2UscXVpdDpmYWxzZSxyZWFkRmlsZTpmYWxzZSxyZWFkVXJsOmZhbHNlLHJ1bkNvbW1hbmQ6ZmFsc2Usc2VhbDpmYWxzZSxzZXJpYWxpemU6ZmFsc2Usc3Bhd246ZmFsc2Usc3luYzpmYWxzZSx0b2ludDMyOmZhbHNlLHZlcnNpb246ZmFsc2V9LHNjb3BlLHNpZGViYXI9e1N5c3RlbTpmYWxzZX0sc3JjLHN0YWNrLHN0YW5kYXJkPXtBcnJheTpmYWxzZSxCb29sZWFuOmZhbHNlLERhdGU6ZmFsc2UsZGVjb2RlVVJJOmZhbHNlLGRlY29kZVVSSUNvbXBvbmVudDpmYWxzZSxlbmNvZGVVUkk6ZmFsc2UsZW5jb2RlVVJJQ29tcG9uZW50OmZhbHNlLEVycm9yOmZhbHNlLCdldmFsJzpmYWxzZSxFdmFsRXJyb3I6ZmFsc2UsRnVuY3Rpb246ZmFsc2UsaGFzT3duUHJvcGVydHk6ZmFsc2UsaXNGaW5pdGU6ZmFsc2UsaXNOYU46ZmFsc2UsSlNPTjpmYWxzZSxNYXRoOmZhbHNlLE51bWJlcjpmYWxzZSxPYmplY3Q6ZmFsc2UscGFyc2VJbnQ6ZmFsc2UscGFyc2VGbG9hdDpmYWxzZSxSYW5nZUVycm9yOmZhbHNlLFJlZmVyZW5jZUVycm9yOmZhbHNlLFJlZ0V4cDpmYWxzZSxTdHJpbmc6ZmFsc2UsU3ludGF4RXJyb3I6ZmFsc2UsVHlwZUVycm9yOmZhbHNlLFVSSUVycm9yOmZhbHNlfSxzdGFuZGFyZF9tZW1iZXI9e0U6dHJ1ZSxMTjI6dHJ1ZSxMTjEwOnRydWUsTE9HMkU6dHJ1ZSxMT0cxMEU6dHJ1ZSxQSTp0cnVlLFNRUlQxXzI6dHJ1ZSxTUVJUMjp0cnVlLE1BWF9WQUxVRTp0cnVlLE1JTl9WQUxVRTp0cnVlLE5FR0FUSVZFX0lORklOSVRZOnRydWUsUE9TSVRJVkVfSU5GSU5JVFk6dHJ1ZX0sc3RyaWN0X21vZGUsc3ludGF4PXt9LHRhYix0b2tlbix1cmxzLHdhcm5pbmdzLHdpZGdldD17YWxlcnQ6dHJ1ZSxhbmltYXRvcjp0cnVlLGFwcGxlU2NyaXB0OnRydWUsYmVlcDp0cnVlLGJ5dGVzVG9VSVN0cmluZzp0cnVlLENhbnZhczp0cnVlLGNob29zZUNvbG9yOnRydWUsY2hvb3NlRmlsZTp0cnVlLGNob29zZUZvbGRlcjp0cnVlLGNsb3NlV2lkZ2V0OnRydWUsQ09NOnRydWUsY29udmVydFBhdGhUb0hGUzp0cnVlLGNvbnZlcnRQYXRoVG9QbGF0Zm9ybTp0cnVlLEN1c3RvbUFuaW1hdGlvbjp0cnVlLGVzY2FwZTp0cnVlLEZhZGVBbmltYXRpb246dHJ1ZSxmaWxlc3lzdGVtOnRydWUsRmxhc2g6dHJ1ZSxmb2N1c1dpZGdldDp0cnVlLGZvcm06dHJ1ZSxGb3JtRmllbGQ6dHJ1ZSxGcmFtZTp0cnVlLEhvdEtleTp0cnVlLEltYWdlOnRydWUsaW5jbHVkZTp0cnVlLGlzQXBwbGljYXRpb25SdW5uaW5nOnRydWUsaVR1bmVzOnRydWUsa29uZmFidWxhdG9yVmVyc2lvbjp0cnVlLGxvZzp0cnVlLG1kNTp0cnVlLE1lbnVJdGVtOnRydWUsTW92ZUFuaW1hdGlvbjp0cnVlLG9wZW5VUkw6dHJ1ZSxwbGF5OnRydWUsUG9pbnQ6dHJ1ZSxwb3B1cE1lbnU6dHJ1ZSxwcmVmZXJlbmNlR3JvdXBzOnRydWUscHJlZmVyZW5jZXM6dHJ1ZSxwcmludDp0cnVlLHByb21wdDp0cnVlLHJhbmRvbTp0cnVlLFJlY3RhbmdsZTp0cnVlLHJlbG9hZFdpZGdldDp0cnVlLFJlc2l6ZUFuaW1hdGlvbjp0cnVlLHJlc29sdmVQYXRoOnRydWUscmVzdW1lVXBkYXRlczp0cnVlLFJvdGF0ZUFuaW1hdGlvbjp0cnVlLHJ1bkNvbW1hbmQ6dHJ1ZSxydW5Db21tYW5kSW5CZzp0cnVlLHNhdmVBczp0cnVlLHNhdmVQcmVmZXJlbmNlczp0cnVlLHNjcmVlbjp0cnVlLFNjcm9sbEJhcjp0cnVlLHNob3dXaWRnZXRQcmVmZXJlbmNlczp0cnVlLHNsZWVwOnRydWUsc3BlYWs6dHJ1ZSxTdHlsZTp0cnVlLHN1cHByZXNzVXBkYXRlczp0cnVlLHN5c3RlbTp0cnVlLHRlbGxXaWRnZXQ6dHJ1ZSxUZXh0OnRydWUsVGV4dEFyZWE6dHJ1ZSxUaW1lcjp0cnVlLHVuZXNjYXBlOnRydWUsdXBkYXRlTm93OnRydWUsVVJMOnRydWUsV2ViOnRydWUsd2lkZ2V0OnRydWUsV2luZG93OnRydWUsWE1MRE9NOnRydWUsWE1MSHR0cFJlcXVlc3Q6dHJ1ZSx5YWhvb0NoZWNrTG9naW46dHJ1ZSx5YWhvb0xvZ2luOnRydWUseWFob29Mb2dvdXQ6dHJ1ZX0seG1vZGUseHF1b3RlLGF4PS9AY2N8PFwvP3xzY3JpcHR8XF0qc1xdfDxccyohfCZsdC9pLGN4PS9bXHUwMDAwLVx1MDAxZlx1MDA3Zi1cdTAwOWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vLHR4PS9eXHMqKFsoKXt9XFsuLDo7JyJ+XD9cXSNAXXw9PT89P3xcLyhcKihqc2xpbnR8bWVtYmVycz98Z2xvYmFsKT98PXxcLyk/fFwqW1wvPV0/fFwrWys9XT98LVtcLT1dP3wlPT98JlsmPV0/fFx8W3w9XT98Pj4/Pj89P3w8KFtcLz0hXXxcIShcW3wtLSk/fDw9Pyk/fFxePT98XCE9Pz0/fFthLXpBLVpfJF1bYS16QS1aMC05XyRdKnxbMC05XSsoW3hYXVswLTlhLWZBLUZdK3xcLlswLTldKik/KFtlRV1bK1wtXT9bMC05XSspPykvLGh4PS9eXHMqKFsnIj0+XC8mI118PCg/OlwvfFwhKD86LS0pPyk/fFthLXpBLVpdW2EtekEtWjAtOV9cLV0qfFswLTldK3wtLSkvLG54PS9bXHUwMDAwLVx1MDAxZiY8IlwvXFxcdTAwN2YtXHUwMDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdLyxueGc9L1tcdTAwMDAtXHUwMDFmJjwiXC9cXFx1MDA3Zi1cdTAwOWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZyxveD0vWz4mXXw8W1wvIV0/fC0tLyxseD0vXCpcL3xcL1wqLyxpeD0vXihbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJC8sang9L14oPzpqYXZhc2NyaXB0fGpzY3JpcHR8ZWNtYXNjcmlwdHx2YnNjcmlwdHxtb2NoYXxsaXZlc2NyaXB0KVxzKjovaSx1eD0vJnxcK3xcdTAwQUR8XC5cLnxcL1wqfCVbXjtdfGJhc2U2NHx1cmx8ZXhwcmVzc2lvbnxkYXRhfG1haWx0by9pLHN4PS9eXHMqKFt7OiMlLj0sPitcW1xdQCgpIic7XXxcKj0/fFwkPXxcfD18XF49fH49fFthLXpBLVpfXVthLXpBLVowLTlfXC1dKnxbMC05XSt8PFwvfFwvXCopLyxzc3g9L15ccyooW0AjISInfTs6XC0lLj0sK1xbXF0oKSpfXXxbYS16QS1aXVthLXpBLVowLTkuX1wtXSp8XC9cKj98XGQrKD86XC5cZCspP3w8XC8pLyxxeD0vW15hLXpBLVowLTktX1wvIF0vLGR4PS9bXFtcXVwvXFwiJyo8Pi4mOigpe30rPSNdLyxyeD17b3V0ZXI6aHgsaHRtbDpoeCxzdHlsZTpzeCxzdHlsZXByb3BlcnR5OnNzeH07ZnVuY3Rpb24gRigpe30KaWYodHlwZW9mIE9iamVjdC5jcmVhdGUhPT0nZnVuY3Rpb24nKXtPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKG8pe0YucHJvdG90eXBlPW87cmV0dXJuIG5ldyBGKCk7fTt9CmZ1bmN0aW9uIGlzX293bihvYmplY3QsbmFtZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsbmFtZSk7fQpmdW5jdGlvbiBjb21iaW5lKHQsbyl7dmFyIG47Zm9yKG4gaW4gbyl7aWYoaXNfb3duKG8sbikpe3Rbbl09b1tuXTt9fX0KU3RyaW5nLnByb3RvdHlwZS5lbnRpdHlpZnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC8mL2csJyZhbXA7JykucmVwbGFjZSgvPC9nLCcmbHQ7JykucmVwbGFjZSgvPi9nLCcmZ3Q7Jyk7fTtTdHJpbmcucHJvdG90eXBlLmlzQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcz49J2EnJiZ0aGlzPD0nelx1ZmZmZicpfHwodGhpcz49J0EnJiZ0aGlzPD0nWlx1ZmZmZicpO307U3RyaW5nLnByb3RvdHlwZS5pc0RpZ2l0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXM+PScwJyYmdGhpczw9JzknKTt9O1N0cmluZy5wcm90b3R5cGUuc3VwcGxhbnQ9ZnVuY3Rpb24obyl7cmV0dXJuIHRoaXMucmVwbGFjZSgvXHsoW157fV0qKVx9L2csZnVuY3Rpb24oYSxiKXt2YXIgcj1vW2JdO3JldHVybiB0eXBlb2Ygcj09PSdzdHJpbmcnfHx0eXBlb2Ygcj09PSdudW1iZXInP3I6YTt9KTt9O1N0cmluZy5wcm90b3R5cGUubmFtZT1mdW5jdGlvbigpe2lmKGl4LnRlc3QodGhpcykpe3JldHVybiB0aGlzO30KaWYobngudGVzdCh0aGlzKSl7cmV0dXJuJyInK3RoaXMucmVwbGFjZShueGcsZnVuY3Rpb24oYSl7dmFyIGM9ZXNjYXBlc1thXTtpZihjKXtyZXR1cm4gYzt9CnJldHVybidcXHUnKygnMDAwMCcrYS5jaGFyQ29kZUF0KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7fSkrJyInO30KcmV0dXJuJyInK3RoaXMrJyInO307ZnVuY3Rpb24gYXNzdW1lKCl7aWYoIW9wdGlvbi5zYWZlKXtpZihvcHRpb24ucmhpbm8pe2NvbWJpbmUocHJlZGVmaW5lZCxyaGlubyk7fQppZihvcHRpb24uZGV2ZWwpe2NvbWJpbmUocHJlZGVmaW5lZCxkZXZlbCk7fQppZihvcHRpb24uYnJvd3Nlcnx8b3B0aW9uLnNpZGViYXIpe2NvbWJpbmUocHJlZGVmaW5lZCxicm93c2VyKTt9CmlmKG9wdGlvbi5zaWRlYmFyKXtjb21iaW5lKHByZWRlZmluZWQsc2lkZWJhcik7fQppZihvcHRpb24ud2lkZ2V0KXtjb21iaW5lKHByZWRlZmluZWQsd2lkZ2V0KTt9fX0KZnVuY3Rpb24gcXVpdChtLGwsY2gpe3Rocm93e25hbWU6J0pTTGludEVycm9yJyxsaW5lOmwsY2hhcmFjdGVyOmNoLG1lc3NhZ2U6bSsiICgiK01hdGguZmxvb3IoKGwvbGluZXMubGVuZ3RoKSoxMDApKyIlIHNjYW5uZWQpLiJ9O30KZnVuY3Rpb24gd2FybmluZyhtLHQsYSxiLGMsZCl7dmFyIGNoLGwsdzt0PXR8fG5leHR0b2tlbjtpZih0LmlkPT09JyhlbmQpJyl7dD10b2tlbjt9Cmw9dC5saW5lfHwwO2NoPXQuZnJvbXx8MDt3PXtpZDonKGVycm9yKScscmF3Om0sZXZpZGVuY2U6bGluZXNbbC0xXXx8JycsbGluZTpsLGNoYXJhY3RlcjpjaCxhOmEsYjpiLGM6YyxkOmR9O3cucmVhc29uPW0uc3VwcGxhbnQodyk7SlNMSU5ULmVycm9ycy5wdXNoKHcpO2lmKG9wdGlvbi5wYXNzZmFpbCl7cXVpdCgnU3RvcHBpbmcuICcsbCxjaCk7fQp3YXJuaW5ncys9MTtpZih3YXJuaW5ncz49b3B0aW9uLm1heGVycil7cXVpdCgiVG9vIG1hbnkgZXJyb3JzLiIsbCxjaCk7fQpyZXR1cm4gdzt9CmZ1bmN0aW9uIHdhcm5pbmdBdChtLGwsY2gsYSxiLGMsZCl7cmV0dXJuIHdhcm5pbmcobSx7bGluZTpsLGZyb206Y2h9LGEsYixjLGQpO30KZnVuY3Rpb24gZXJyb3IobSx0LGEsYixjLGQpe3ZhciB3PXdhcm5pbmcobSx0LGEsYixjLGQpO3F1aXQoIlN0b3BwaW5nLCB1bmFibGUgdG8gY29udGludWUuIix3LmxpbmUsdy5jaGFyYWN0ZXIpO30KZnVuY3Rpb24gZXJyb3JBdChtLGwsY2gsYSxiLGMsZCl7cmV0dXJuIGVycm9yKG0se2xpbmU6bCxmcm9tOmNofSxhLGIsYyxkKTt9CnZhciBsZXg9KGZ1bmN0aW9uIGxleCgpe3ZhciBjaGFyYWN0ZXIsZnJvbSxsaW5lLHM7ZnVuY3Rpb24gbmV4dExpbmUoKXt2YXIgYXQ7aWYobGluZT49bGluZXMubGVuZ3RoKXtyZXR1cm4gZmFsc2U7fQpjaGFyYWN0ZXI9MTtzPWxpbmVzW2xpbmVdO2xpbmUrPTE7YXQ9cy5zZWFyY2goLyBcdC8pO2lmKGF0Pj0wKXt3YXJuaW5nQXQoIk1peGVkIHNwYWNlcyBhbmQgdGFicy4iLGxpbmUsYXQrMSk7fQpzPXMucmVwbGFjZSgvXHQvZyx0YWIpO2F0PXMuc2VhcmNoKGN4KTtpZihhdD49MCl7d2FybmluZ0F0KCJVbnNhZmUgY2hhcmFjdGVyLiIsbGluZSxhdCk7fQppZihvcHRpb24ubWF4bGVuJiZvcHRpb24ubWF4bGVuPHMubGVuZ3RoKXt3YXJuaW5nQXQoIkxpbmUgdG9vIGxvbmcuIixsaW5lLHMubGVuZ3RoKTt9CnJldHVybiB0cnVlO30KZnVuY3Rpb24gaXQodHlwZSx2YWx1ZSl7dmFyIGksdDtpZih0eXBlPT09Jyhjb2xvciknKXt0PXt0eXBlOnR5cGV9O31lbHNlIGlmKHR5cGU9PT0nKHB1bmN0dWF0b3IpJ3x8KHR5cGU9PT0nKGlkZW50aWZpZXIpJyYmaXNfb3duKHN5bnRheCx2YWx1ZSkpKXt0PXN5bnRheFt2YWx1ZV18fHN5bnRheFsnKGVycm9yKSddO31lbHNle3Q9c3ludGF4W3R5cGVdO30KdD1PYmplY3QuY3JlYXRlKHQpO2lmKHR5cGU9PT0nKHN0cmluZyknfHx0eXBlPT09JyhyYW5nZSknKXtpZihqeC50ZXN0KHZhbHVlKSl7d2FybmluZ0F0KCJTY3JpcHQgVVJMLiIsbGluZSxmcm9tKTt9fQppZih0eXBlPT09JyhpZGVudGlmaWVyKScpe3QuaWRlbnRpZmllcj10cnVlO2lmKHZhbHVlPT09J19faXRlcmF0b3JfXyd8fHZhbHVlPT09J19fcHJvdG9fXycpe2Vycm9yQXQoIlJlc2VydmVkIG5hbWUgJ3thfScuIixsaW5lLGZyb20sdmFsdWUpO31lbHNlIGlmKG9wdGlvbi5ub21lbiYmKHZhbHVlLmNoYXJBdCgwKT09PSdfJ3x8dmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aC0xKT09PSdfJykpe3dhcm5pbmdBdCgiVW5leHBlY3RlZCB7YX0gaW4gJ3tifScuIixsaW5lLGZyb20sImRhbmdsaW5nICdfJyIsdmFsdWUpO319CnQudmFsdWU9dmFsdWU7dC5saW5lPWxpbmU7dC5jaGFyYWN0ZXI9Y2hhcmFjdGVyO3QuZnJvbT1mcm9tO2k9dC5pZDtpZihpIT09JyhlbmRsaW5lKScpe3ByZXJlZz1pJiYoKCcoLD06WyEmfD97fTsnLmluZGV4T2YoaS5jaGFyQXQoaS5sZW5ndGgtMSkpPj0wKXx8aT09PSdyZXR1cm4nKTt9CnJldHVybiB0O30KcmV0dXJue2luaXQ6ZnVuY3Rpb24oc291cmNlKXtpZih0eXBlb2Ygc291cmNlPT09J3N0cmluZycpe2xpbmVzPXNvdXJjZS5yZXBsYWNlKC9cclxuL2csJ1xuJykucmVwbGFjZSgvXHIvZywnXG4nKS5zcGxpdCgnXG4nKTt9ZWxzZXtsaW5lcz1zb3VyY2U7fQpsaW5lPTA7bmV4dExpbmUoKTtmcm9tPTE7fSxyYW5nZTpmdW5jdGlvbihiZWdpbixlbmQpe3ZhciBjLHZhbHVlPScnO2Zyb209Y2hhcmFjdGVyO2lmKHMuY2hhckF0KDApIT09YmVnaW4pe2Vycm9yQXQoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLGxpbmUsY2hhcmFjdGVyLGJlZ2luLHMuY2hhckF0KDApKTt9CmZvcig7Oyl7cz1zLnNsaWNlKDEpO2NoYXJhY3Rlcis9MTtjPXMuY2hhckF0KDApO3N3aXRjaChjKXtjYXNlJyc6ZXJyb3JBdCgiTWlzc2luZyAne2F9Jy4iLGxpbmUsY2hhcmFjdGVyLGMpO2JyZWFrO2Nhc2UgZW5kOnM9cy5zbGljZSgxKTtjaGFyYWN0ZXIrPTE7cmV0dXJuIGl0KCcocmFuZ2UpJyx2YWx1ZSk7Y2FzZSB4cXVvdGU6Y2FzZSdcXCc6d2FybmluZ0F0KCJVbmV4cGVjdGVkICd7YX0nLiIsbGluZSxjaGFyYWN0ZXIsYyk7fQp2YWx1ZSs9Yzt9fSx0b2tlbjpmdW5jdGlvbigpe3ZhciBiLGMsY2FwdHVyZXMsZCxkZXB0aCxoaWdoLGksbCxsb3cscSx0O2Z1bmN0aW9uIG1hdGNoKHgpe3ZhciByPXguZXhlYyhzKSxyMTtpZihyKXtsPXJbMF0ubGVuZ3RoO3IxPXJbMV07Yz1yMS5jaGFyQXQoMCk7cz1zLnN1YnN0cihsKTtmcm9tPWNoYXJhY3RlcitsLXIxLmxlbmd0aDtjaGFyYWN0ZXIrPWw7cmV0dXJuIHIxO319CmZ1bmN0aW9uIHN0cmluZyh4KXt2YXIgYyxqLHI9Jyc7aWYoanNvbm1vZGUmJnghPT0nIicpe3dhcm5pbmdBdCgiU3RyaW5ncyBtdXN0IHVzZSBkb3VibGVxdW90ZS4iLGxpbmUsY2hhcmFjdGVyKTt9CmlmKHhxdW90ZT09PXh8fCh4bW9kZT09PSdzY3JpcHRzdHJpbmcnJiYheHF1b3RlKSl7cmV0dXJuIGl0KCcocHVuY3R1YXRvciknLHgpO30KZnVuY3Rpb24gZXNjKG4pe3ZhciBpPXBhcnNlSW50KHMuc3Vic3RyKGorMSxuKSwxNik7ais9bjtpZihpPj0zMiYmaTw9MTI2JiZpIT09MzQmJmkhPT05MiYmaSE9PTM5KXt3YXJuaW5nQXQoIlVubmVjZXNzYXJ5IGVzY2FwZW1lbnQuIixsaW5lLGNoYXJhY3Rlcik7fQpjaGFyYWN0ZXIrPW47Yz1TdHJpbmcuZnJvbUNoYXJDb2RlKGkpO30Kaj0wO2Zvcig7Oyl7d2hpbGUoaj49cy5sZW5ndGgpe2o9MDtpZih4bW9kZSE9PSdodG1sJ3x8IW5leHRMaW5lKCkpe2Vycm9yQXQoIlVuY2xvc2VkIHN0cmluZy4iLGxpbmUsZnJvbSk7fX0KYz1zLmNoYXJBdChqKTtpZihjPT09eCl7Y2hhcmFjdGVyKz0xO3M9cy5zdWJzdHIoaisxKTtyZXR1cm4gaXQoJyhzdHJpbmcpJyxyLHgpO30KaWYoYzwnICcpe2lmKGM9PT0nXG4nfHxjPT09J1xyJyl7YnJlYWs7fQp3YXJuaW5nQXQoIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZzoge2F9LiIsbGluZSxjaGFyYWN0ZXIraixzLnNsaWNlKDAsaikpO31lbHNlIGlmKGM9PT14cXVvdGUpe3dhcm5pbmdBdCgiQmFkIEhUTUwgc3RyaW5nIixsaW5lLGNoYXJhY3RlcitqKTt9ZWxzZSBpZihjPT09JzwnKXtpZihvcHRpb24uc2FmZSYmeG1vZGU9PT0naHRtbCcpe3dhcm5pbmdBdCgiQURzYWZlIHN0cmluZyB2aW9sYXRpb24uIixsaW5lLGNoYXJhY3RlcitqKTt9ZWxzZSBpZihzLmNoYXJBdChqKzEpPT09Jy8nJiYoeG1vZGV8fG9wdGlvbi5zYWZlKSl7d2FybmluZ0F0KCJFeHBlY3RlZCAnPFxcLycgYW5kIGluc3RlYWQgc2F3ICc8LycuIixsaW5lLGNoYXJhY3Rlcik7fWVsc2UgaWYocy5jaGFyQXQoaisxKT09PSchJyYmKHhtb2RlfHxvcHRpb24uc2FmZSkpe3dhcm5pbmdBdCgiVW5leHBlY3RlZCAnPCEnIGluIGEgc3RyaW5nLiIsbGluZSxjaGFyYWN0ZXIpO319ZWxzZSBpZihjPT09J1xcJyl7aWYoeG1vZGU9PT0naHRtbCcpe2lmKG9wdGlvbi5zYWZlKXt3YXJuaW5nQXQoIkFEc2FmZSBzdHJpbmcgdmlvbGF0aW9uLiIsbGluZSxjaGFyYWN0ZXIraik7fX1lbHNlIGlmKHhtb2RlPT09J3N0eWxlcHJvcGVydHknKXtqKz0xO2NoYXJhY3Rlcis9MTtjPXMuY2hhckF0KGopO2lmKGMhPT14KXt3YXJuaW5nQXQoIkVzY2FwZW1lbnQgaW4gc3R5bGUgc3RyaW5nLiIsbGluZSxjaGFyYWN0ZXIraik7fX1lbHNle2orPTE7Y2hhcmFjdGVyKz0xO2M9cy5jaGFyQXQoaik7c3dpdGNoKGMpe2Nhc2UgeHF1b3RlOndhcm5pbmdBdCgiQmFkIEhUTUwgc3RyaW5nIixsaW5lLGNoYXJhY3RlcitqKTticmVhaztjYXNlJ1xcJzpjYXNlJ1wnJzpjYXNlJyInOmNhc2UnLyc6YnJlYWs7Y2FzZSdiJzpjPSdcYic7YnJlYWs7Y2FzZSdmJzpjPSdcZic7YnJlYWs7Y2FzZSduJzpjPSdcbic7YnJlYWs7Y2FzZSdyJzpjPSdccic7YnJlYWs7Y2FzZSd0JzpjPSdcdCc7YnJlYWs7Y2FzZSd1Jzplc2MoNCk7YnJlYWs7Y2FzZSd2JzpjPSdcdic7YnJlYWs7Y2FzZSd4JzppZihqc29ubW9kZSl7d2FybmluZ0F0KCJBdm9pZCBcXHgtLiIsbGluZSxjaGFyYWN0ZXIpO30KZXNjKDIpO2JyZWFrO2RlZmF1bHQ6d2FybmluZ0F0KCJCYWQgZXNjYXBlbWVudC4iLGxpbmUsY2hhcmFjdGVyKTt9fX0Kcis9YztjaGFyYWN0ZXIrPTE7ais9MTt9fQpmb3IoOzspe2lmKCFzKXtyZXR1cm4gaXQobmV4dExpbmUoKT8nKGVuZGxpbmUpJzonKGVuZCknLCcnKTt9CndoaWxlKHhtb2RlPT09J291dGVyJyl7aT1zLnNlYXJjaChveCk7aWYoaT09PTApe2JyZWFrO31lbHNlIGlmKGk+MCl7Y2hhcmFjdGVyKz0xO3M9cy5zbGljZShpKTticmVhazt9ZWxzZXtpZighbmV4dExpbmUoKSl7cmV0dXJuIGl0KCcoZW5kKScsJycpO319fQp0PW1hdGNoKHJ4W3htb2RlXXx8dHgpO2lmKCF0KXt0PScnO2M9Jyc7d2hpbGUocyYmczwnIScpe3M9cy5zdWJzdHIoMSk7fQppZihzKXtpZih4bW9kZT09PSdodG1sJyl7cmV0dXJuIGl0KCcoZXJyb3IpJyxzLmNoYXJBdCgwKSk7fWVsc2V7ZXJyb3JBdCgiVW5leHBlY3RlZCAne2F9Jy4iLGxpbmUsY2hhcmFjdGVyLHMuc3Vic3RyKDAsMSkpO319fWVsc2V7aWYoYy5pc0FscGhhKCl8fGM9PT0nXyd8fGM9PT0nJCcpe3JldHVybiBpdCgnKGlkZW50aWZpZXIpJyx0KTt9CmlmKGMuaXNEaWdpdCgpKXtpZih4bW9kZSE9PSdzdHlsZScmJiFpc0Zpbml0ZShOdW1iZXIodCkpKXt3YXJuaW5nQXQoIkJhZCBudW1iZXIgJ3thfScuIixsaW5lLGNoYXJhY3Rlcix0KTt9CmlmKHhtb2RlIT09J3N0eWxlJyYmeG1vZGUhPT0nc3R5bGVwcm9wZXJ0eScmJnMuc3Vic3RyKDAsMSkuaXNBbHBoYSgpKXt3YXJuaW5nQXQoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgJ3thfScuIixsaW5lLGNoYXJhY3Rlcix0KTt9CmlmKGM9PT0nMCcpe2Q9dC5zdWJzdHIoMSwxKTtpZihkLmlzRGlnaXQoKSl7aWYodG9rZW4uaWQhPT0nLicmJnhtb2RlIT09J3N0eWxlcHJvcGVydHknKXt3YXJuaW5nQXQoIkRvbid0IHVzZSBleHRyYSBsZWFkaW5nIHplcm9zICd7YX0nLiIsbGluZSxjaGFyYWN0ZXIsdCk7fX1lbHNlIGlmKGpzb25tb2RlJiYoZD09PSd4J3x8ZD09PSdYJykpe3dhcm5pbmdBdCgiQXZvaWQgMHgtLiAne2F9Jy4iLGxpbmUsY2hhcmFjdGVyLHQpO319CmlmKHQuc3Vic3RyKHQubGVuZ3RoLTEpPT09Jy4nKXt3YXJuaW5nQXQoIkEgdHJhaWxpbmcgZGVjaW1hbCBwb2ludCBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRvdCAne2F9Jy4iLGxpbmUsY2hhcmFjdGVyLHQpO30KcmV0dXJuIGl0KCcobnVtYmVyKScsdCk7fQpzd2l0Y2godCl7Y2FzZSciJzpjYXNlIiciOnJldHVybiBzdHJpbmcodCk7Y2FzZScvLyc6aWYoc3JjfHwoeG1vZGUmJnhtb2RlIT09J3NjcmlwdCcpKXt3YXJuaW5nQXQoIlVuZXhwZWN0ZWQgY29tbWVudC4iLGxpbmUsY2hhcmFjdGVyKTt9ZWxzZSBpZih4bW9kZT09PSdzY3JpcHQnJiYvPFxzKlwvL2kudGVzdChzKSl7d2FybmluZ0F0KCJVbmV4cGVjdGVkIDxcLyBpbiBjb21tZW50LiIsbGluZSxjaGFyYWN0ZXIpO31lbHNlIGlmKChvcHRpb24uc2FmZXx8eG1vZGU9PT0nc2NyaXB0JykmJmF4LnRlc3Qocykpe3dhcm5pbmdBdCgiRGFuZ2Vyb3VzIGNvbW1lbnQuIixsaW5lLGNoYXJhY3Rlcik7fQpzPScnO3Rva2VuLmNvbW1lbnQ9dHJ1ZTticmVhaztjYXNlJy8qJzppZihzcmN8fCh4bW9kZSYmeG1vZGUhPT0nc2NyaXB0JyYmeG1vZGUhPT0nc3R5bGUnJiZ4bW9kZSE9PSdzdHlsZXByb3BlcnR5Jykpe3dhcm5pbmdBdCgiVW5leHBlY3RlZCBjb21tZW50LiIsbGluZSxjaGFyYWN0ZXIpO30KaWYob3B0aW9uLnNhZmUmJmF4LnRlc3Qocykpe3dhcm5pbmdBdCgiQURzYWZlIGNvbW1lbnQgdmlvbGF0aW9uLiIsbGluZSxjaGFyYWN0ZXIpO30KZm9yKDs7KXtpPXMuc2VhcmNoKGx4KTtpZihpPj0wKXticmVhazt9CmlmKCFuZXh0TGluZSgpKXtlcnJvckF0KCJVbmNsb3NlZCBjb21tZW50LiIsbGluZSxjaGFyYWN0ZXIpO31lbHNle2lmKG9wdGlvbi5zYWZlJiZheC50ZXN0KHMpKXt3YXJuaW5nQXQoIkFEc2FmZSBjb21tZW50IHZpb2xhdGlvbi4iLGxpbmUsY2hhcmFjdGVyKTt9fX0KY2hhcmFjdGVyKz1pKzI7aWYocy5zdWJzdHIoaSwxKT09PScvJyl7ZXJyb3JBdCgiTmVzdGVkIGNvbW1lbnQuIixsaW5lLGNoYXJhY3Rlcik7fQpzPXMuc3Vic3RyKGkrMik7dG9rZW4uY29tbWVudD10cnVlO2JyZWFrO2Nhc2UnLyptZW1iZXJzJzpjYXNlJy8qbWVtYmVyJzpjYXNlJy8qanNsaW50JzpjYXNlJy8qZ2xvYmFsJzpjYXNlJyovJzpyZXR1cm57dmFsdWU6dCx0eXBlOidzcGVjaWFsJyxsaW5lOmxpbmUsY2hhcmFjdGVyOmNoYXJhY3Rlcixmcm9tOmZyb219O2Nhc2UnJzpicmVhaztjYXNlJy8nOmlmKHRva2VuLmlkPT09Jy89Jyl7ZXJyb3JBdCgiQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBjYW4gYmUgY29uZnVzZWQgd2l0aCAnLz0nLiIsbGluZSxmcm9tKTt9CmlmKHByZXJlZyl7ZGVwdGg9MDtjYXB0dXJlcz0wO2w9MDtmb3IoOzspe2I9dHJ1ZTtjPXMuY2hhckF0KGwpO2wrPTE7c3dpdGNoKGMpe2Nhc2UnJzplcnJvckF0KCJVbmNsb3NlZCByZWd1bGFyIGV4cHJlc3Npb24uIixsaW5lLGZyb20pO3JldHVybjtjYXNlJy8nOmlmKGRlcHRoPjApe3dhcm5pbmdBdCgiVW5lc2NhcGVkICd7YX0nLiIsbGluZSxmcm9tK2wsJy8nKTt9CmM9cy5zdWJzdHIoMCxsLTEpO3E9e2c6dHJ1ZSxpOnRydWUsbTp0cnVlfTt3aGlsZShxW3MuY2hhckF0KGwpXT09PXRydWUpe3Fbcy5jaGFyQXQobCldPWZhbHNlO2wrPTE7fQpjaGFyYWN0ZXIrPWw7cz1zLnN1YnN0cihsKTtxPXMuY2hhckF0KDApO2lmKHE9PT0nLyd8fHE9PT0nKicpe2Vycm9yQXQoIkNvbmZ1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uIixsaW5lLGZyb20pO30KcmV0dXJuIGl0KCcocmVnZXhwKScsYyk7Y2FzZSdcXCc6Yz1zLmNoYXJBdChsKTtpZihjPCcgJyl7d2FybmluZ0F0KCJVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLGxpbmUsZnJvbStsKTt9ZWxzZSBpZihjPT09JzwnKXt3YXJuaW5nQXQoIlVuZXhwZWN0ZWQgZXNjYXBlZCBjaGFyYWN0ZXIgJ3thfScgaW4gcmVndWxhciBleHByZXNzaW9uLiIsbGluZSxmcm9tK2wsYyk7fQpsKz0xO2JyZWFrO2Nhc2UnKCc6ZGVwdGgrPTE7Yj1mYWxzZTtpZihzLmNoYXJBdChsKT09PSc/Jyl7bCs9MTtzd2l0Y2gocy5jaGFyQXQobCkpe2Nhc2UnOic6Y2FzZSc9JzpjYXNlJyEnOmwrPTE7YnJlYWs7ZGVmYXVsdDp3YXJuaW5nQXQoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLGxpbmUsZnJvbStsLCc6JyxzLmNoYXJBdChsKSk7fX1lbHNle2NhcHR1cmVzKz0xO30KYnJlYWs7Y2FzZSd8JzpiPWZhbHNlO2JyZWFrO2Nhc2UnKSc6aWYoZGVwdGg9PT0wKXt3YXJuaW5nQXQoIlVuZXNjYXBlZCAne2F9Jy4iLGxpbmUsZnJvbStsLCcpJyk7fWVsc2V7ZGVwdGgtPTE7fQpicmVhaztjYXNlJyAnOnE9MTt3aGlsZShzLmNoYXJBdChsKT09PScgJyl7bCs9MTtxKz0xO30KaWYocT4xKXt3YXJuaW5nQXQoIlNwYWNlcyBhcmUgaGFyZCB0byBjb3VudC4gVXNlIHt7YX19LiIsbGluZSxmcm9tK2wscSk7fQpicmVhaztjYXNlJ1snOmM9cy5jaGFyQXQobCk7aWYoYz09PSdeJyl7bCs9MTtpZihvcHRpb24ucmVnZXhwKXt3YXJuaW5nQXQoIkluc2VjdXJlICd7YX0nLiIsbGluZSxmcm9tK2wsYyk7fX0KcT1mYWxzZTtpZihjPT09J10nKXt3YXJuaW5nQXQoIkVtcHR5IGNsYXNzLiIsbGluZSxmcm9tK2wtMSk7cT10cnVlO30Ka2xhc3M6ZG97Yz1zLmNoYXJBdChsKTtsKz0xO3N3aXRjaChjKXtjYXNlJ1snOmNhc2UnXic6d2FybmluZ0F0KCJVbmVzY2FwZWQgJ3thfScuIixsaW5lLGZyb20rbCxjKTtxPXRydWU7YnJlYWs7Y2FzZSctJzppZihxKXtxPWZhbHNlO31lbHNle3dhcm5pbmdBdCgiVW5lc2NhcGVkICd7YX0nLiIsbGluZSxmcm9tK2wsJy0nKTtxPXRydWU7fQpicmVhaztjYXNlJ10nOmlmKCFxKXt3YXJuaW5nQXQoIlVuZXNjYXBlZCAne2F9Jy4iLGxpbmUsZnJvbStsLTEsJy0nKTt9CmJyZWFrIGtsYXNzO2Nhc2UnXFwnOmM9cy5jaGFyQXQobCk7aWYoYzwnICcpe3dhcm5pbmdBdCgiVW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlciBpbiByZWd1bGFyIGV4cHJlc3Npb24uIixsaW5lLGZyb20rbCk7fWVsc2UgaWYoYz09PSc8Jyl7d2FybmluZ0F0KCJVbmV4cGVjdGVkIGVzY2FwZWQgY2hhcmFjdGVyICd7YX0nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLGxpbmUsZnJvbStsLGMpO30KbCs9MTtxPXRydWU7YnJlYWs7Y2FzZScvJzp3YXJuaW5nQXQoIlVuZXNjYXBlZCAne2F9Jy4iLGxpbmUsZnJvbStsLTEsJy8nKTtxPXRydWU7YnJlYWs7Y2FzZSc8JzppZih4bW9kZT09PSdzY3JpcHQnKXtjPXMuY2hhckF0KGwpO2lmKGM9PT0nISd8fGM9PT0nLycpe3dhcm5pbmdBdCgiSFRNTCBjb25mdXNpb24gaW4gcmVndWxhciBleHByZXNzaW9uICc8e2F9Jy4iLGxpbmUsZnJvbStsLGMpO319CnE9dHJ1ZTticmVhaztkZWZhdWx0OnE9dHJ1ZTt9fXdoaWxlKGMpO2JyZWFrO2Nhc2UnLic6aWYob3B0aW9uLnJlZ2V4cCl7d2FybmluZ0F0KCJJbnNlY3VyZSAne2F9Jy4iLGxpbmUsZnJvbStsLGMpO30KYnJlYWs7Y2FzZSddJzpjYXNlJz8nOmNhc2Uneyc6Y2FzZSd9JzpjYXNlJysnOmNhc2UnKic6d2FybmluZ0F0KCJVbmVzY2FwZWQgJ3thfScuIixsaW5lLGZyb20rbCxjKTticmVhaztjYXNlJzwnOmlmKHhtb2RlPT09J3NjcmlwdCcpe2M9cy5jaGFyQXQobCk7aWYoYz09PSchJ3x8Yz09PScvJyl7d2FybmluZ0F0KCJIVE1MIGNvbmZ1c2lvbiBpbiByZWd1bGFyIGV4cHJlc3Npb24gJzx7YX0nLiIsbGluZSxmcm9tK2wsYyk7fX19CmlmKGIpe3N3aXRjaChzLmNoYXJBdChsKSl7Y2FzZSc/JzpjYXNlJysnOmNhc2UnKic6bCs9MTtpZihzLmNoYXJBdChsKT09PSc/Jyl7bCs9MTt9CmJyZWFrO2Nhc2Uneyc6bCs9MTtjPXMuY2hhckF0KGwpO2lmKGM8JzAnfHxjPic5Jyl7d2FybmluZ0F0KCJFeHBlY3RlZCBhIG51bWJlciBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIixsaW5lLGZyb20rbCxjKTt9CmwrPTE7bG93PStjO2Zvcig7Oyl7Yz1zLmNoYXJBdChsKTtpZihjPCcwJ3x8Yz4nOScpe2JyZWFrO30KbCs9MTtsb3c9K2MrKGxvdyoxMCk7fQpoaWdoPWxvdztpZihjPT09JywnKXtsKz0xO2hpZ2g9SW5maW5pdHk7Yz1zLmNoYXJBdChsKTtpZihjPj0nMCcmJmM8PSc5Jyl7bCs9MTtoaWdoPStjO2Zvcig7Oyl7Yz1zLmNoYXJBdChsKTtpZihjPCcwJ3x8Yz4nOScpe2JyZWFrO30KbCs9MTtoaWdoPStjKyhoaWdoKjEwKTt9fX0KaWYocy5jaGFyQXQobCkhPT0nfScpe3dhcm5pbmdBdCgiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsbGluZSxmcm9tK2wsJ30nLGMpO31lbHNle2wrPTE7fQppZihzLmNoYXJBdChsKT09PSc/Jyl7bCs9MTt9CmlmKGxvdz5oaWdoKXt3YXJuaW5nQXQoIid7YX0nIHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuICd7Yn0nLiIsbGluZSxmcm9tK2wsbG93LGhpZ2gpO319fX0KYz1zLnN1YnN0cigwLGwtMSk7Y2hhcmFjdGVyKz1sO3M9cy5zdWJzdHIobCk7cmV0dXJuIGl0KCcocmVnZXhwKScsYyk7fQpyZXR1cm4gaXQoJyhwdW5jdHVhdG9yKScsdCk7Y2FzZSc8IS0tJzpsPWxpbmU7Yz1jaGFyYWN0ZXI7Zm9yKDs7KXtpPXMuaW5kZXhPZignLS0nKTtpZihpPj0wKXticmVhazt9Cmk9cy5pbmRleE9mKCc8IScpO2lmKGk+PTApe2Vycm9yQXQoIk5lc3RlZCBIVE1MIGNvbW1lbnQuIixsaW5lLGNoYXJhY3RlcitpKTt9CmlmKCFuZXh0TGluZSgpKXtlcnJvckF0KCJVbmNsb3NlZCBIVE1MIGNvbW1lbnQuIixsLGMpO319Cmw9cy5pbmRleE9mKCc8IScpO2lmKGw+PTAmJmw8aSl7ZXJyb3JBdCgiTmVzdGVkIEhUTUwgY29tbWVudC4iLGxpbmUsY2hhcmFjdGVyK2wpO30KY2hhcmFjdGVyKz1pO2lmKHNbaSsyXSE9PSc+Jyl7ZXJyb3JBdCgiRXhwZWN0ZWQgLS0+LiIsbGluZSxjaGFyYWN0ZXIpO30KY2hhcmFjdGVyKz0zO3M9cy5zbGljZShpKzMpO2JyZWFrO2Nhc2UnIyc6aWYoeG1vZGU9PT0naHRtbCd8fHhtb2RlPT09J3N0eWxlcHJvcGVydHknKXtmb3IoOzspe2M9cy5jaGFyQXQoMCk7aWYoKGM8JzAnfHxjPic5JykmJihjPCdhJ3x8Yz4nZicpJiYoYzwnQSd8fGM+J0YnKSl7YnJlYWs7fQpjaGFyYWN0ZXIrPTE7cz1zLnN1YnN0cigxKTt0Kz1jO30KaWYodC5sZW5ndGghPT00JiZ0Lmxlbmd0aCE9PTcpe3dhcm5pbmdBdCgiQmFkIGhleCBjb2xvciAne2F9Jy4iLGxpbmUsZnJvbStsLHQpO30KcmV0dXJuIGl0KCcoY29sb3IpJyx0KTt9CnJldHVybiBpdCgnKHB1bmN0dWF0b3IpJyx0KTtkZWZhdWx0OmlmKHhtb2RlPT09J291dGVyJyYmYz09PScmJyl7Y2hhcmFjdGVyKz0xO3M9cy5zdWJzdHIoMSk7Zm9yKDs7KXtjPXMuY2hhckF0KDApO2NoYXJhY3Rlcis9MTtzPXMuc3Vic3RyKDEpO2lmKGM9PT0nOycpe2JyZWFrO30KaWYoISgoYz49JzAnJiZjPD0nOScpfHwoYz49J2EnJiZjPD0neicpfHxjPT09JyMnKSl7ZXJyb3JBdCgiQmFkIGVudGl0eSIsbGluZSxmcm9tK2wsY2hhcmFjdGVyKTt9fQpicmVhazt9CnJldHVybiBpdCgnKHB1bmN0dWF0b3IpJyx0KTt9fX19fTt9KCkpO2Z1bmN0aW9uIGFkZGxhYmVsKHQsdHlwZSl7aWYob3B0aW9uLnNhZmUmJmZ1bmN0WycoZ2xvYmFsKSddJiZ0eXBlb2YgcHJlZGVmaW5lZFt0XSE9PSdib29sZWFuJyl7d2FybmluZygnQURzYWZlIGdsb2JhbDogJyt0KycuJyx0b2tlbik7fWVsc2UgaWYodD09PSdoYXNPd25Qcm9wZXJ0eScpe3dhcm5pbmcoIidoYXNPd25Qcm9wZXJ0eScgaXMgYSByZWFsbHkgYmFkIG5hbWUuIik7fQppZihpc19vd24oZnVuY3QsdCkmJiFmdW5jdFsnKGdsb2JhbCknXSl7d2FybmluZyhmdW5jdFt0XT09PXRydWU/Iid7YX0nIHdhcyB1c2VkIGJlZm9yZSBpdCB3YXMgZGVmaW5lZC4iOiIne2F9JyBpcyBhbHJlYWR5IGRlZmluZWQuIixuZXh0dG9rZW4sdCk7fQpmdW5jdFt0XT10eXBlO2lmKGZ1bmN0WycoZ2xvYmFsKSddKXtnbG9iYWxbdF09ZnVuY3Q7aWYoaXNfb3duKGltcGxpZWQsdCkpe3dhcm5pbmcoIid7YX0nIHdhcyB1c2VkIGJlZm9yZSBpdCB3YXMgZGVmaW5lZC4iLG5leHR0b2tlbix0KTtkZWxldGUgaW1wbGllZFt0XTt9fWVsc2V7c2NvcGVbdF09ZnVuY3Q7fX0KZnVuY3Rpb24gZG9PcHRpb24oKXt2YXIgYixvYmosZmlsdGVyLG89bmV4dHRva2VuLnZhbHVlLHQsdjtzd2l0Y2gobyl7Y2FzZScqLyc6ZXJyb3IoIlVuYmVndW4gY29tbWVudC4iKTticmVhaztjYXNlJy8qbWVtYmVycyc6Y2FzZScvKm1lbWJlcic6bz0nLyptZW1iZXJzJztpZighbWVtYmVyc09ubHkpe21lbWJlcnNPbmx5PXt9O30Kb2JqPW1lbWJlcnNPbmx5O2JyZWFrO2Nhc2UnLypqc2xpbnQnOmlmKG9wdGlvbi5zYWZlKXt3YXJuaW5nKCJBRHNhZmUgcmVzdHJpY3Rpb24uIik7fQpvYmo9b3B0aW9uO2ZpbHRlcj1ib29sT3B0aW9uczticmVhaztjYXNlJy8qZ2xvYmFsJzppZihvcHRpb24uc2FmZSl7d2FybmluZygiQURzYWZlIHJlc3RyaWN0aW9uLiIpO30Kb2JqPXByZWRlZmluZWQ7YnJlYWs7ZGVmYXVsdDp9CnQ9bGV4LnRva2VuKCk7bG9vcDpmb3IoOzspe2Zvcig7Oyl7aWYodC50eXBlPT09J3NwZWNpYWwnJiZ0LnZhbHVlPT09JyovJyl7YnJlYWsgbG9vcDt9CmlmKHQuaWQhPT0nKGVuZGxpbmUpJyYmdC5pZCE9PScsJyl7YnJlYWs7fQp0PWxleC50b2tlbigpO30KaWYodC50eXBlIT09JyhzdHJpbmcpJyYmdC50eXBlIT09JyhpZGVudGlmaWVyKScmJm8hPT0nLyptZW1iZXJzJyl7ZXJyb3IoIkJhZCBvcHRpb24uIix0KTt9CnY9bGV4LnRva2VuKCk7aWYodi5pZD09PSc6Jyl7dj1sZXgudG9rZW4oKTtpZihvYmo9PT1tZW1iZXJzT25seSl7ZXJyb3IoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLHQsJyovJywnOicpO30KaWYodC52YWx1ZT09PSdpbmRlbnQnJiZvPT09Jy8qanNsaW50Jyl7Yj0rdi52YWx1ZTtpZih0eXBlb2YgYiE9PSdudW1iZXInfHwhaXNGaW5pdGUoYil8fGI8PTB8fE1hdGguZmxvb3IoYikhPT1iKXtlcnJvcigiRXhwZWN0ZWQgYSBzbWFsbCBpbnRlZ2VyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLHYsdi52YWx1ZSk7fQpvYmoud2hpdGU9dHJ1ZTtvYmouaW5kZW50PWI7fWVsc2UgaWYodC52YWx1ZT09PSdtYXhlcnInJiZvPT09Jy8qanNsaW50Jyl7Yj0rdi52YWx1ZTtpZih0eXBlb2YgYiE9PSdudW1iZXInfHwhaXNGaW5pdGUoYil8fGI8PTB8fE1hdGguZmxvb3IoYikhPT1iKXtlcnJvcigiRXhwZWN0ZWQgYSBzbWFsbCBpbnRlZ2VyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLHYsdi52YWx1ZSk7fQpvYmoubWF4ZXJyPWI7fWVsc2UgaWYodC52YWx1ZT09PSdtYXhsZW4nJiZvPT09Jy8qanNsaW50Jyl7Yj0rdi52YWx1ZTtpZih0eXBlb2YgYiE9PSdudW1iZXInfHwhaXNGaW5pdGUoYil8fGI8PTB8fE1hdGguZmxvb3IoYikhPT1iKXtlcnJvcigiRXhwZWN0ZWQgYSBzbWFsbCBpbnRlZ2VyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLHYsdi52YWx1ZSk7fQpvYmoubWF4bGVuPWI7fWVsc2UgaWYodi52YWx1ZT09PSd0cnVlJyl7b2JqW3QudmFsdWVdPXRydWU7fWVsc2UgaWYodi52YWx1ZT09PSdmYWxzZScpe29ialt0LnZhbHVlXT1mYWxzZTt9ZWxzZXtlcnJvcigiQmFkIG9wdGlvbiB2YWx1ZS4iLHYpO30KdD1sZXgudG9rZW4oKTt9ZWxzZXtpZihvPT09Jy8qanNsaW50Jyl7ZXJyb3IoIk1pc3Npbmcgb3B0aW9uIHZhbHVlLiIsdCk7fQpvYmpbdC52YWx1ZV09ZmFsc2U7dD12O319CmlmKGZpbHRlcil7YXNzdW1lKCk7fX0KZnVuY3Rpb24gcGVlayhwKXt2YXIgaT1wfHwwLGo9MCx0O3doaWxlKGo8PWkpe3Q9bG9va2FoZWFkW2pdO2lmKCF0KXt0PWxvb2thaGVhZFtqXT1sZXgudG9rZW4oKTt9CmorPTE7fQpyZXR1cm4gdDt9CmZ1bmN0aW9uIGFkdmFuY2UoaWQsdCl7c3dpdGNoKHRva2VuLmlkKXtjYXNlJyhudW1iZXIpJzppZihuZXh0dG9rZW4uaWQ9PT0nLicpe3dhcm5pbmcoIkEgZG90IGZvbGxvd2luZyBhIG51bWJlciBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRlY2ltYWwgcG9pbnQuIix0b2tlbik7fQpicmVhaztjYXNlJy0nOmlmKG5leHR0b2tlbi5pZD09PSctJ3x8bmV4dHRva2VuLmlkPT09Jy0tJyl7d2FybmluZygiQ29uZnVzaW5nIG1pbnVzc2VzLiIpO30KYnJlYWs7Y2FzZScrJzppZihuZXh0dG9rZW4uaWQ9PT0nKyd8fG5leHR0b2tlbi5pZD09PScrKycpe3dhcm5pbmcoIkNvbmZ1c2luZyBwbHVzc2VzLiIpO30KYnJlYWs7fQppZih0b2tlbi50eXBlPT09JyhzdHJpbmcpJ3x8dG9rZW4uaWRlbnRpZmllcil7YW5vbm5hbWU9dG9rZW4udmFsdWU7fQppZihpZCYmbmV4dHRva2VuLmlkIT09aWQpe2lmKHQpe2lmKG5leHR0b2tlbi5pZD09PScoZW5kKScpe3dhcm5pbmcoIlVubWF0Y2hlZCAne2F9Jy4iLHQsdC5pZCk7fWVsc2V7d2FybmluZygiRXhwZWN0ZWQgJ3thfScgdG8gbWF0Y2ggJ3tifScgZnJvbSBsaW5lIHtjfSBhbmQgaW5zdGVhZCBzYXcgJ3tkfScuIixuZXh0dG9rZW4saWQsdC5pZCx0LmxpbmUsbmV4dHRva2VuLnZhbHVlKTt9fWVsc2UgaWYobmV4dHRva2VuLnR5cGUhPT0nKGlkZW50aWZpZXIpJ3x8bmV4dHRva2VuLnZhbHVlIT09aWQpe3dhcm5pbmcoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLG5leHR0b2tlbixpZCxuZXh0dG9rZW4udmFsdWUpO319CnByZXZ0b2tlbj10b2tlbjt0b2tlbj1uZXh0dG9rZW47Zm9yKDs7KXtuZXh0dG9rZW49bG9va2FoZWFkLnNoaWZ0KCl8fGxleC50b2tlbigpO2lmKG5leHR0b2tlbi5pZD09PScoZW5kKSd8fG5leHR0b2tlbi5pZD09PScoZXJyb3IpJyl7cmV0dXJuO30KaWYobmV4dHRva2VuLnR5cGU9PT0nc3BlY2lhbCcpe2RvT3B0aW9uKCk7fWVsc2V7aWYobmV4dHRva2VuLmlkIT09JyhlbmRsaW5lKScpe2JyZWFrO319fX0KZnVuY3Rpb24gcGFyc2UocmJwLGluaXRpYWwpe3ZhciBsZWZ0O2lmKG5leHR0b2tlbi5pZD09PScoZW5kKScpe2Vycm9yKCJVbmV4cGVjdGVkIGVhcmx5IGVuZCBvZiBwcm9ncmFtLiIsdG9rZW4pO30KYWR2YW5jZSgpO2lmKG9wdGlvbi5zYWZlJiZ0eXBlb2YgcHJlZGVmaW5lZFt0b2tlbi52YWx1ZV09PT0nYm9vbGVhbicmJihuZXh0dG9rZW4uaWQhPT0nKCcmJm5leHR0b2tlbi5pZCE9PScuJykpe3dhcm5pbmcoJ0FEc2FmZSB2aW9sYXRpb24uJyx0b2tlbik7fQppZihpbml0aWFsKXthbm9ubmFtZT0nYW5vbnltb3VzJztmdW5jdFsnKHZlcmIpJ109dG9rZW4udmFsdWU7fQppZihpbml0aWFsPT09dHJ1ZSYmdG9rZW4uZnVkKXtsZWZ0PXRva2VuLmZ1ZCgpO31lbHNle2lmKHRva2VuLm51ZCl7bGVmdD10b2tlbi5udWQoKTt9ZWxzZXtpZihuZXh0dG9rZW4udHlwZT09PScobnVtYmVyKScmJnRva2VuLmlkPT09Jy4nKXt3YXJuaW5nKCJBIGxlYWRpbmcgZGVjaW1hbCBwb2ludCBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRvdDogJy57YX0nLiIsdG9rZW4sbmV4dHRva2VuLnZhbHVlKTthZHZhbmNlKCk7cmV0dXJuIHRva2VuO31lbHNle2Vycm9yKCJFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLHRva2VuLHRva2VuLmlkKTt9fQp3aGlsZShyYnA8bmV4dHRva2VuLmxicCl7YWR2YW5jZSgpO2lmKHRva2VuLmxlZCl7bGVmdD10b2tlbi5sZWQobGVmdCk7fWVsc2V7ZXJyb3IoIkV4cGVjdGVkIGFuIG9wZXJhdG9yIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLHRva2VuLHRva2VuLmlkKTt9fX0KcmV0dXJuIGxlZnQ7fQpmdW5jdGlvbiBhZGphY2VudChsZWZ0LHJpZ2h0KXtsZWZ0PWxlZnR8fHRva2VuO3JpZ2h0PXJpZ2h0fHxuZXh0dG9rZW47aWYob3B0aW9uLndoaXRlfHx4bW9kZT09PSdzdHlsZXByb3BlcnR5J3x8eG1vZGU9PT0nc3R5bGUnKXtpZihsZWZ0LmNoYXJhY3RlciE9PXJpZ2h0LmZyb20mJmxlZnQubGluZT09PXJpZ2h0LmxpbmUpe3dhcm5pbmcoIlVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgJ3thfScuIixyaWdodCxsZWZ0LnZhbHVlKTt9fX0KZnVuY3Rpb24gbm9zcGFjZShsZWZ0LHJpZ2h0KXtsZWZ0PWxlZnR8fHRva2VuO3JpZ2h0PXJpZ2h0fHxuZXh0dG9rZW47aWYob3B0aW9uLndoaXRlJiYhbGVmdC5jb21tZW50KXtpZihsZWZ0LmxpbmU9PT1yaWdodC5saW5lKXthZGphY2VudChsZWZ0LHJpZ2h0KTt9fX0KZnVuY3Rpb24gbm9uYWRqYWNlbnQobGVmdCxyaWdodCl7aWYob3B0aW9uLndoaXRlKXtsZWZ0PWxlZnR8fHRva2VuO3JpZ2h0PXJpZ2h0fHxuZXh0dG9rZW47aWYobGVmdC5saW5lPT09cmlnaHQubGluZSYmbGVmdC5jaGFyYWN0ZXI9PT1yaWdodC5mcm9tKXt3YXJuaW5nKCJNaXNzaW5nIHNwYWNlIGFmdGVyICd7YX0nLiIsbmV4dHRva2VuLGxlZnQudmFsdWUpO319fQpmdW5jdGlvbiBub2JyZWFrbm9uYWRqYWNlbnQobGVmdCxyaWdodCl7bGVmdD1sZWZ0fHx0b2tlbjtyaWdodD1yaWdodHx8bmV4dHRva2VuO2lmKCFvcHRpb24ubGF4YnJlYWsmJmxlZnQubGluZSE9PXJpZ2h0LmxpbmUpe3dhcm5pbmcoIkJhZCBsaW5lIGJyZWFraW5nIGJlZm9yZSAne2F9Jy4iLHJpZ2h0LHJpZ2h0LmlkKTt9ZWxzZSBpZihvcHRpb24ud2hpdGUpe2xlZnQ9bGVmdHx8dG9rZW47cmlnaHQ9cmlnaHR8fG5leHR0b2tlbjtpZihsZWZ0LmNoYXJhY3Rlcj09PXJpZ2h0LmZyb20pe3dhcm5pbmcoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgJ3thfScuIixuZXh0dG9rZW4sbGVmdC52YWx1ZSk7fX19CmZ1bmN0aW9uIGluZGVudGF0aW9uKGJpYXMpe3ZhciBpO2lmKG9wdGlvbi53aGl0ZSYmbmV4dHRva2VuLmlkIT09JyhlbmQpJyl7aT1pbmRlbnQrKGJpYXN8fDApO2lmKG5leHR0b2tlbi5mcm9tIT09aSl7d2FybmluZygiRXhwZWN0ZWQgJ3thfScgdG8gaGF2ZSBhbiBpbmRlbnRhdGlvbiBhdCB7Yn0gaW5zdGVhZCBhdCB7Y30uIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlLGksbmV4dHRva2VuLmZyb20pO319fQpmdW5jdGlvbiBub2xpbmVicmVhayh0KXt0PXR8fHRva2VuO2lmKHQubGluZSE9PW5leHR0b2tlbi5saW5lKXt3YXJuaW5nKCJMaW5lIGJyZWFraW5nIGVycm9yICd7YX0nLiIsdCx0LnZhbHVlKTt9fQpmdW5jdGlvbiBjb21tYSgpe2lmKHRva2VuLmxpbmUhPT1uZXh0dG9rZW4ubGluZSl7aWYoIW9wdGlvbi5sYXhicmVhayl7d2FybmluZygiQmFkIGxpbmUgYnJlYWtpbmcgYmVmb3JlICd7YX0nLiIsdG9rZW4sbmV4dHRva2VuLmlkKTt9fWVsc2UgaWYodG9rZW4uY2hhcmFjdGVyIT09bmV4dHRva2VuLmZyb20mJm9wdGlvbi53aGl0ZSl7d2FybmluZygiVW5leHBlY3RlZCBzcGFjZSBhZnRlciAne2F9Jy4iLG5leHR0b2tlbix0b2tlbi52YWx1ZSk7fQphZHZhbmNlKCcsJyk7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTt9CmZ1bmN0aW9uIHN5bWJvbChzLHApe3ZhciB4PXN5bnRheFtzXTtpZigheHx8dHlwZW9mIHghPT0nb2JqZWN0Jyl7c3ludGF4W3NdPXg9e2lkOnMsbGJwOnAsdmFsdWU6c307fQpyZXR1cm4geDt9CmZ1bmN0aW9uIGRlbGltKHMpe3JldHVybiBzeW1ib2wocywwKTt9CmZ1bmN0aW9uIHN0bXQocyxmKXt2YXIgeD1kZWxpbShzKTt4LmlkZW50aWZpZXI9eC5yZXNlcnZlZD10cnVlO3guZnVkPWY7cmV0dXJuIHg7fQpmdW5jdGlvbiBibG9ja3N0bXQocyxmKXt2YXIgeD1zdG10KHMsZik7eC5ibG9jaz10cnVlO3JldHVybiB4O30KZnVuY3Rpb24gcmVzZXJ2ZU5hbWUoeCl7dmFyIGM9eC5pZC5jaGFyQXQoMCk7aWYoKGM+PSdhJyYmYzw9J3onKXx8KGM+PSdBJyYmYzw9J1onKSl7eC5pZGVudGlmaWVyPXgucmVzZXJ2ZWQ9dHJ1ZTt9CnJldHVybiB4O30KZnVuY3Rpb24gcHJlZml4KHMsZil7dmFyIHg9c3ltYm9sKHMsMTUwKTtyZXNlcnZlTmFtZSh4KTt4Lm51ZD0odHlwZW9mIGY9PT0nZnVuY3Rpb24nKT9mOmZ1bmN0aW9uKCl7dGhpcy5yaWdodD1wYXJzZSgxNTApO3RoaXMuYXJpdHk9J3VuYXJ5JztpZih0aGlzLmlkPT09JysrJ3x8dGhpcy5pZD09PSctLScpe2lmKG9wdGlvbi5wbHVzcGx1cyl7d2FybmluZygiVW5leHBlY3RlZCB1c2Ugb2YgJ3thfScuIix0aGlzLHRoaXMuaWQpO31lbHNlIGlmKCghdGhpcy5yaWdodC5pZGVudGlmaWVyfHx0aGlzLnJpZ2h0LnJlc2VydmVkKSYmdGhpcy5yaWdodC5pZCE9PScuJyYmdGhpcy5yaWdodC5pZCE9PSdbJyl7d2FybmluZygiQmFkIG9wZXJhbmQuIix0aGlzKTt9fQpyZXR1cm4gdGhpczt9O3JldHVybiB4O30KZnVuY3Rpb24gdHlwZShzLGYpe3ZhciB4PWRlbGltKHMpO3gudHlwZT1zO3gubnVkPWY7cmV0dXJuIHg7fQpmdW5jdGlvbiByZXNlcnZlKHMsZil7dmFyIHg9dHlwZShzLGYpO3guaWRlbnRpZmllcj14LnJlc2VydmVkPXRydWU7cmV0dXJuIHg7fQpmdW5jdGlvbiByZXNlcnZldmFyKHMsdil7cmV0dXJuIHJlc2VydmUocyxmdW5jdGlvbigpe2lmKHRoaXMuaWQ9PT0ndGhpcyd8fHRoaXMuaWQ9PT0nYXJndW1lbnRzJyl7aWYoc3RyaWN0X21vZGUmJmZ1bmN0WycoZ2xvYmFsKSddKXt3YXJuaW5nKCJTdHJpY3QgdmlvbGF0aW9uLiIsdGhpcyk7fWVsc2UgaWYob3B0aW9uLnNhZmUpe3dhcm5pbmcoIkFEc2FmZSB2aW9sYXRpb24uIix0aGlzKTt9fQpyZXR1cm4gdGhpczt9KTt9CmZ1bmN0aW9uIGluZml4KHMsZixwLHcpe3ZhciB4PXN5bWJvbChzLHApO3Jlc2VydmVOYW1lKHgpO3gubGVkPWZ1bmN0aW9uKGxlZnQpe2lmKCF3KXtub2JyZWFrbm9uYWRqYWNlbnQocHJldnRva2VuLHRva2VuKTtub25hZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO30KaWYodHlwZW9mIGY9PT0nZnVuY3Rpb24nKXtyZXR1cm4gZihsZWZ0LHRoaXMpO31lbHNle3RoaXMubGVmdD1sZWZ0O3RoaXMucmlnaHQ9cGFyc2UocCk7cmV0dXJuIHRoaXM7fX07cmV0dXJuIHg7fQpmdW5jdGlvbiByZWxhdGlvbihzLGYpe3ZhciB4PXN5bWJvbChzLDEwMCk7eC5sZWQ9ZnVuY3Rpb24obGVmdCl7bm9icmVha25vbmFkamFjZW50KHByZXZ0b2tlbix0b2tlbik7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTt2YXIgcmlnaHQ9cGFyc2UoMTAwKTtpZigobGVmdCYmbGVmdC5pZD09PSdOYU4nKXx8KHJpZ2h0JiZyaWdodC5pZD09PSdOYU4nKSl7d2FybmluZygiVXNlIHRoZSBpc05hTiBmdW5jdGlvbiB0byBjb21wYXJlIHdpdGggTmFOLiIsdGhpcyk7fWVsc2UgaWYoZil7Zi5hcHBseSh0aGlzLFtsZWZ0LHJpZ2h0XSk7fQppZihsZWZ0LmlkPT09JyEnKXt3YXJuaW5nKCJDb25mdXNpbmcgdXNlIG9mICd7YX0nLiIsbGVmdCwnIScpO30KaWYocmlnaHQuaWQ9PT0nIScpe3dhcm5pbmcoIkNvbmZ1c2luZyB1c2Ugb2YgJ3thfScuIixsZWZ0LCchJyk7fQp0aGlzLmxlZnQ9bGVmdDt0aGlzLnJpZ2h0PXJpZ2h0O3JldHVybiB0aGlzO307cmV0dXJuIHg7fQpmdW5jdGlvbiBpc1Bvb3JSZWxhdGlvbihub2RlKXtyZXR1cm4gbm9kZSYmKChub2RlLnR5cGU9PT0nKG51bWJlciknJiYrbm9kZS52YWx1ZT09PTApfHwobm9kZS50eXBlPT09JyhzdHJpbmcpJyYmbm9kZS52YWx1ZT09PScgJyl8fG5vZGUudHlwZT09PSd0cnVlJ3x8bm9kZS50eXBlPT09J2ZhbHNlJ3x8bm9kZS50eXBlPT09J3VuZGVmaW5lZCd8fG5vZGUudHlwZT09PSdudWxsJyk7fQpmdW5jdGlvbiBhc3NpZ25vcChzLGYpe3N5bWJvbChzLDIwKS5leHBzPXRydWU7cmV0dXJuIGluZml4KHMsZnVuY3Rpb24obGVmdCx0aGF0KXt2YXIgbDt0aGF0LmxlZnQ9bGVmdDtpZihwcmVkZWZpbmVkW2xlZnQudmFsdWVdPT09ZmFsc2UmJnNjb3BlW2xlZnQudmFsdWVdWycoZ2xvYmFsKSddPT09dHJ1ZSl7d2FybmluZygnUmVhZCBvbmx5LicsbGVmdCk7fQppZihvcHRpb24uc2FmZSl7bD1sZWZ0O2Rve2lmKHR5cGVvZiBwcmVkZWZpbmVkW2wudmFsdWVdPT09J2Jvb2xlYW4nKXt3YXJuaW5nKCdBRHNhZmUgdmlvbGF0aW9uLicsbCk7fQpsPWwubGVmdDt9d2hpbGUobCk7fQppZihsZWZ0KXtpZihsZWZ0LmlkPT09Jy4nfHxsZWZ0LmlkPT09J1snKXtpZighbGVmdC5sZWZ0fHxsZWZ0LmxlZnQudmFsdWU9PT0nYXJndW1lbnRzJyl7d2FybmluZygnQmFkIGFzc2lnbm1lbnQuJyx0aGF0KTt9CnRoYXQucmlnaHQ9cGFyc2UoMTkpO3JldHVybiB0aGF0O31lbHNlIGlmKGxlZnQuaWRlbnRpZmllciYmIWxlZnQucmVzZXJ2ZWQpe2lmKGZ1bmN0W2xlZnQudmFsdWVdPT09J2V4Y2VwdGlvbicpe3dhcm5pbmcoIkRvIG5vdCBhc3NpZ24gdG8gdGhlIGV4Y2VwdGlvbiBwYXJhbWV0ZXIuIixsZWZ0KTt9CnRoYXQucmlnaHQ9cGFyc2UoMTkpO3JldHVybiB0aGF0O30KaWYobGVmdD09PXN5bnRheFsnZnVuY3Rpb24nXSl7d2FybmluZygiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBpbiBhbiBhc3NpZ25tZW50IGFuZCBpbnN0ZWFkIHNhdyBhIGZ1bmN0aW9uIGludm9jYXRpb24uIix0b2tlbik7fX0KZXJyb3IoIkJhZCBhc3NpZ25tZW50LiIsdGhhdCk7fSwyMCk7fQpmdW5jdGlvbiBiaXR3aXNlKHMsZixwKXt2YXIgeD1zeW1ib2wocyxwKTtyZXNlcnZlTmFtZSh4KTt4LmxlZD0odHlwZW9mIGY9PT0nZnVuY3Rpb24nKT9mOmZ1bmN0aW9uKGxlZnQpe2lmKG9wdGlvbi5iaXR3aXNlKXt3YXJuaW5nKCJVbmV4cGVjdGVkIHVzZSBvZiAne2F9Jy4iLHRoaXMsdGhpcy5pZCk7fQp0aGlzLmxlZnQ9bGVmdDt0aGlzLnJpZ2h0PXBhcnNlKHApO3JldHVybiB0aGlzO307cmV0dXJuIHg7fQpmdW5jdGlvbiBiaXR3aXNlYXNzaWdub3Aocyl7c3ltYm9sKHMsMjApLmV4cHM9dHJ1ZTtyZXR1cm4gaW5maXgocyxmdW5jdGlvbihsZWZ0LHRoYXQpe2lmKG9wdGlvbi5iaXR3aXNlKXt3YXJuaW5nKCJVbmV4cGVjdGVkIHVzZSBvZiAne2F9Jy4iLHRoYXQsdGhhdC5pZCk7fQpub25hZGphY2VudChwcmV2dG9rZW4sdG9rZW4pO25vbmFkamFjZW50KHRva2VuLG5leHR0b2tlbik7aWYobGVmdCl7aWYobGVmdC5pZD09PScuJ3x8bGVmdC5pZD09PSdbJ3x8KGxlZnQuaWRlbnRpZmllciYmIWxlZnQucmVzZXJ2ZWQpKXtwYXJzZSgxOSk7cmV0dXJuIHRoYXQ7fQppZihsZWZ0PT09c3ludGF4WydmdW5jdGlvbiddKXt3YXJuaW5nKCJFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGluIGFuIGFzc2lnbm1lbnQsIGFuZCBpbnN0ZWFkIHNhdyBhIGZ1bmN0aW9uIGludm9jYXRpb24uIix0b2tlbik7fQpyZXR1cm4gdGhhdDt9CmVycm9yKCJCYWQgYXNzaWdubWVudC4iLHRoYXQpO30sMjApO30KZnVuY3Rpb24gc3VmZml4KHMsZil7dmFyIHg9c3ltYm9sKHMsMTUwKTt4LmxlZD1mdW5jdGlvbihsZWZ0KXtpZihvcHRpb24ucGx1c3BsdXMpe3dhcm5pbmcoIlVuZXhwZWN0ZWQgdXNlIG9mICd7YX0nLiIsdGhpcyx0aGlzLmlkKTt9ZWxzZSBpZigoIWxlZnQuaWRlbnRpZmllcnx8bGVmdC5yZXNlcnZlZCkmJmxlZnQuaWQhPT0nLicmJmxlZnQuaWQhPT0nWycpe3dhcm5pbmcoIkJhZCBvcGVyYW5kLiIsdGhpcyk7fQp0aGlzLmxlZnQ9bGVmdDtyZXR1cm4gdGhpczt9O3JldHVybiB4O30KZnVuY3Rpb24gb3B0aW9uYWxpZGVudGlmaWVyKCl7aWYobmV4dHRva2VuLnJlc2VydmVkKXt3YXJuaW5nKCJFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGFuZCBpbnN0ZWFkIHNhdyAne2F9JyAoYSByZXNlcnZlZCB3b3JkKS4iLG5leHR0b2tlbixuZXh0dG9rZW4uaWQpO30KaWYobmV4dHRva2VuLmlkZW50aWZpZXIpe2FkdmFuY2UoKTtyZXR1cm4gdG9rZW4udmFsdWU7fX0KZnVuY3Rpb24gaWRlbnRpZmllcigpe3ZhciBpPW9wdGlvbmFsaWRlbnRpZmllcigpO2lmKGkpe3JldHVybiBpO30KaWYodG9rZW4uaWQ9PT0nZnVuY3Rpb24nJiZuZXh0dG9rZW4uaWQ9PT0nKCcpe3dhcm5pbmcoIk1pc3NpbmcgbmFtZSBpbiBmdW5jdGlvbiBzdGF0ZW1lbnQuIik7fWVsc2V7ZXJyb3IoIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fX0KZnVuY3Rpb24gcmVhY2hhYmxlKHMpe3ZhciBpPTAsdDtpZihuZXh0dG9rZW4uaWQhPT0nOyd8fG5vcmVhY2gpe3JldHVybjt9CmZvcig7Oyl7dD1wZWVrKGkpO2lmKHQucmVhY2gpe3JldHVybjt9CmlmKHQuaWQhPT0nKGVuZGxpbmUpJyl7aWYodC5pZD09PSdmdW5jdGlvbicpe3dhcm5pbmcoIklubmVyIGZ1bmN0aW9ucyBzaG91bGQgYmUgbGlzdGVkIGF0IHRoZSB0b3Agb2YgdGhlIG91dGVyIGZ1bmN0aW9uLiIsdCk7YnJlYWs7fQp3YXJuaW5nKCJVbnJlYWNoYWJsZSAne2F9JyBhZnRlciAne2J9Jy4iLHQsdC52YWx1ZSxzKTticmVhazt9CmkrPTE7fX0KZnVuY3Rpb24gc3RhdGVtZW50KG5vaW5kZW50KXt2YXIgaT1pbmRlbnQscixzPXNjb3BlLHQ9bmV4dHRva2VuO2lmKHQuaWQ9PT0nOycpe3dhcm5pbmcoIlVubmVjZXNzYXJ5IHNlbWljb2xvbi4iLHQpO2FkdmFuY2UoJzsnKTtyZXR1cm47fQppZih0LmlkZW50aWZpZXImJiF0LnJlc2VydmVkJiZwZWVrKCkuaWQ9PT0nOicpe2FkdmFuY2UoKTthZHZhbmNlKCc6Jyk7c2NvcGU9T2JqZWN0LmNyZWF0ZShzKTthZGRsYWJlbCh0LnZhbHVlLCdsYWJlbCcpO2lmKCFuZXh0dG9rZW4ubGFiZWxsZWQpe3dhcm5pbmcoIkxhYmVsICd7YX0nIG9uIHtifSBzdGF0ZW1lbnQuIixuZXh0dG9rZW4sdC52YWx1ZSxuZXh0dG9rZW4udmFsdWUpO30KaWYoangudGVzdCh0LnZhbHVlKyc6Jykpe3dhcm5pbmcoIkxhYmVsICd7YX0nIGxvb2tzIGxpa2UgYSBqYXZhc2NyaXB0IHVybC4iLHQsdC52YWx1ZSk7fQpuZXh0dG9rZW4ubGFiZWw9dC52YWx1ZTt0PW5leHR0b2tlbjt9CmlmKCFub2luZGVudCl7aW5kZW50YXRpb24oKTt9CmlmKG5leHR0b2tlbi5pZD09PSduZXcnKXt3YXJuaW5nKCInbmV3JyBzaG91bGQgbm90IGJlIHVzZWQgYXMgYSBzdGF0ZW1lbnQuIik7fQpyPXBhcnNlKDAsdHJ1ZSk7aWYoIXQuYmxvY2spe2lmKCFyfHwhci5leHBzKXt3YXJuaW5nKCJFeHBlY3RlZCBhbiBhc3NpZ25tZW50IG9yIGZ1bmN0aW9uIGNhbGwgYW5kIGluc3RlYWQgc2F3IGFuIGV4cHJlc3Npb24uIix0b2tlbik7fQppZihuZXh0dG9rZW4uaWQhPT0nOycpe3dhcm5pbmdBdCgiTWlzc2luZyBzZW1pY29sb24uIix0b2tlbi5saW5lLHRva2VuLmZyb20rdG9rZW4udmFsdWUubGVuZ3RoKTt9ZWxzZXthZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO2FkdmFuY2UoJzsnKTtub25hZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO319CmluZGVudD1pO3Njb3BlPXM7cmV0dXJuIHI7fQpmdW5jdGlvbiB1c2Vfc3RyaWN0KCl7aWYobmV4dHRva2VuLnZhbHVlPT09J3VzZSBzdHJpY3QnKXthZHZhbmNlKCk7YWR2YW5jZSgnOycpO3N0cmljdF9tb2RlPXRydWU7cmV0dXJuIHRydWU7fWVsc2V7cmV0dXJuIGZhbHNlO319CmZ1bmN0aW9uIHN0YXRlbWVudHMoYmVnaW4pe3ZhciBhPVtdLGYscDtpZihiZWdpbiYmIXVzZV9zdHJpY3QoKSYmb3B0aW9uLnN0cmljdCl7d2FybmluZygnTWlzc2luZyAidXNlIHN0cmljdCIgc3RhdGVtZW50LicsbmV4dHRva2VuKTt9CmlmKG9wdGlvbi5hZHNhZmUpe3N3aXRjaChiZWdpbil7Y2FzZSdzY3JpcHQnOmlmKCFhZHNhZmVfbWF5KXtpZihuZXh0dG9rZW4udmFsdWUhPT0nQURTQUZFJ3x8cGVlaygwKS5pZCE9PScuJ3x8KHBlZWsoMSkudmFsdWUhPT0naWQnJiZwZWVrKDEpLnZhbHVlIT09J2dvJykpe2Vycm9yKCdBRHNhZmUgdmlvbGF0aW9uOiBNaXNzaW5nIEFEU0FGRS5pZCBvciBBRFNBRkUuZ28uJyxuZXh0dG9rZW4pO319CmlmKG5leHR0b2tlbi52YWx1ZT09PSdBRFNBRkUnJiZwZWVrKDApLmlkPT09Jy4nJiZwZWVrKDEpLnZhbHVlPT09J2lkJyl7aWYoYWRzYWZlX21heSl7ZXJyb3IoJ0FEc2FmZSB2aW9sYXRpb24uJyxuZXh0dG9rZW4pO30KYWR2YW5jZSgnQURTQUZFJyk7YWR2YW5jZSgnLicpO2FkdmFuY2UoJ2lkJyk7YWR2YW5jZSgnKCcpO2lmKG5leHR0b2tlbi52YWx1ZSE9PWFkc2FmZV9pZCl7ZXJyb3IoJ0FEc2FmZSB2aW9sYXRpb246IGlkIGRvZXMgbm90IG1hdGNoLicsbmV4dHRva2VuKTt9CmFkdmFuY2UoJyhzdHJpbmcpJyk7YWR2YW5jZSgnKScpO2FkdmFuY2UoJzsnKTthZHNhZmVfbWF5PXRydWU7fQpicmVhaztjYXNlJ2xpYic6aWYobmV4dHRva2VuLnZhbHVlPT09J0FEU0FGRScpe2FkdmFuY2UoJ0FEU0FGRScpO2FkdmFuY2UoJy4nKTthZHZhbmNlKCdsaWInKTthZHZhbmNlKCcoJyk7YWR2YW5jZSgnKHN0cmluZyknKTtjb21tYSgpO2Y9cGFyc2UoMCk7aWYoZi5pZCE9PSdmdW5jdGlvbicpe2Vycm9yKCdUaGUgc2Vjb25kIGFyZ3VtZW50IHRvIGxpYiBtdXN0IGJlIGEgZnVuY3Rpb24uJyxmKTt9CnA9Zi5mdW5jdFsnKHBhcmFtcyknXTtwPXAmJnAuam9pbignLCAnKTtpZihwJiZwIT09J2xpYicpe2Vycm9yKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixmLCcobGliKScsJygnK3ArJyknKTt9CmFkdmFuY2UoJyknKTthZHZhbmNlKCc7Jyk7cmV0dXJuIGE7fWVsc2V7ZXJyb3IoIkFEc2FmZSBsaWIgdmlvbGF0aW9uLiIpO319fQp3aGlsZSghbmV4dHRva2VuLnJlYWNoJiZuZXh0dG9rZW4uaWQhPT0nKGVuZCknKXtpZihuZXh0dG9rZW4uaWQ9PT0nOycpe3dhcm5pbmcoIlVubmVjZXNzYXJ5IHNlbWljb2xvbi4iKTthZHZhbmNlKCc7Jyk7fWVsc2V7YS5wdXNoKHN0YXRlbWVudCgpKTt9fQpyZXR1cm4gYTt9CmZ1bmN0aW9uIGJsb2NrKGYpe3ZhciBhLGI9aW5ibG9jayxvbGRfaW5kZW50PWluZGVudCxzPXNjb3BlLHQ7aW5ibG9jaz1mO3Njb3BlPU9iamVjdC5jcmVhdGUoc2NvcGUpO25vbmFkamFjZW50KHRva2VuLG5leHR0b2tlbik7dD1uZXh0dG9rZW47aWYobmV4dHRva2VuLmlkPT09J3snKXthZHZhbmNlKCd7Jyk7aWYobmV4dHRva2VuLmlkIT09J30nfHx0b2tlbi5saW5lIT09bmV4dHRva2VuLmxpbmUpe2luZGVudCs9b3B0aW9uLmluZGVudDt3aGlsZSghZiYmbmV4dHRva2VuLmZyb20+aW5kZW50KXtpbmRlbnQrPW9wdGlvbi5pbmRlbnQ7fQppZighZil7dXNlX3N0cmljdCgpO30KYT1zdGF0ZW1lbnRzKCk7aW5kZW50LT1vcHRpb24uaW5kZW50O2luZGVudGF0aW9uKCk7fQphZHZhbmNlKCd9Jyx0KTtpbmRlbnQ9b2xkX2luZGVudDt9ZWxzZXt3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixuZXh0dG9rZW4sJ3snLG5leHR0b2tlbi52YWx1ZSk7bm9yZWFjaD10cnVlO2E9W3N0YXRlbWVudCgpXTtub3JlYWNoPWZhbHNlO30KZnVuY3RbJyh2ZXJiKSddPW51bGw7c2NvcGU9cztpbmJsb2NrPWI7cmV0dXJuIGE7fQpmdW5jdGlvbiBpZFZhbHVlKCl7cmV0dXJuIHRoaXM7fQpmdW5jdGlvbiBjb3VudE1lbWJlcihtKXtpZihtZW1iZXJzT25seSYmdHlwZW9mIG1lbWJlcnNPbmx5W21dIT09J2Jvb2xlYW4nKXt3YXJuaW5nKCJVbmV4cGVjdGVkIC8qbWVtYmVyICd7YX0nLiIsdG9rZW4sbSk7fQppZih0eXBlb2YgbWVtYmVyW21dPT09J251bWJlcicpe21lbWJlclttXSs9MTt9ZWxzZXttZW1iZXJbbV09MTt9fQpmdW5jdGlvbiBub3RlX2ltcGxpZWQodG9rZW4pe3ZhciBuYW1lPXRva2VuLnZhbHVlLGxpbmU9dG9rZW4ubGluZSxhPWltcGxpZWRbbmFtZV07aWYodHlwZW9mIGE9PT0nZnVuY3Rpb24nKXthPWZhbHNlO30KaWYoIWEpe2E9W2xpbmVdO2ltcGxpZWRbbmFtZV09YTt9ZWxzZSBpZihhW2EubGVuZ3RoLTFdIT09bGluZSl7YS5wdXNoKGxpbmUpO319CmZ1bmN0aW9uIGNzc05hbWUoKXtpZihuZXh0dG9rZW4uaWRlbnRpZmllcil7YWR2YW5jZSgpO3JldHVybiB0cnVlO319CmZ1bmN0aW9uIGNzc051bWJlcigpe2lmKG5leHR0b2tlbi5pZD09PSctJyl7YWR2YW5jZSgnLScpO2FkamFjZW50KCk7bm9saW5lYnJlYWsoKTt9CmlmKG5leHR0b2tlbi50eXBlPT09JyhudW1iZXIpJyl7YWR2YW5jZSgnKG51bWJlciknKTtyZXR1cm4gdHJ1ZTt9fQpmdW5jdGlvbiBjc3NTdHJpbmcoKXtpZihuZXh0dG9rZW4udHlwZT09PScoc3RyaW5nKScpe2FkdmFuY2UoKTtyZXR1cm4gdHJ1ZTt9fQpmdW5jdGlvbiBjc3NDb2xvcigpe3ZhciBpLG51bWJlcjtpZihuZXh0dG9rZW4uaWRlbnRpZmllcil7aWYobmV4dHRva2VuLnZhbHVlPT09J3JnYicpe2FkdmFuY2UoKTthZHZhbmNlKCcoJyk7Zm9yKGk9MDtpPDM7aSs9MSl7aWYoaSl7YWR2YW5jZSgnLCcpO30KbnVtYmVyPW5leHR0b2tlbi52YWx1ZTtpZihuZXh0dG9rZW4udHlwZSE9PScobnVtYmVyKSd8fG51bWJlcjwwKXt3YXJuaW5nKCJFeHBlY3RlZCBhIHBvc2l0aXZlIG51bWJlciBhbmQgaW5zdGVhZCBzYXcgJ3thfSciLG5leHR0b2tlbixudW1iZXIpO2FkdmFuY2UoKTt9ZWxzZXthZHZhbmNlKCk7aWYobmV4dHRva2VuLmlkPT09JyUnKXthZHZhbmNlKCclJyk7aWYobnVtYmVyPjEwMCl7d2FybmluZygiRXhwZWN0ZWQgYSBwZXJjZW50YWdlIGFuZCBpbnN0ZWFkIHNhdyAne2F9JyIsdG9rZW4sbnVtYmVyKTt9fWVsc2V7aWYobnVtYmVyPjI1NSl7d2FybmluZygiRXhwZWN0ZWQgYSBzbWFsbCBudW1iZXIgYW5kIGluc3RlYWQgc2F3ICd7YX0nIix0b2tlbixudW1iZXIpO319fX0KYWR2YW5jZSgnKScpO3JldHVybiB0cnVlO31lbHNlIGlmKGNzc0NvbG9yRGF0YVtuZXh0dG9rZW4udmFsdWVdPT09dHJ1ZSl7YWR2YW5jZSgpO3JldHVybiB0cnVlO319ZWxzZSBpZihuZXh0dG9rZW4udHlwZT09PScoY29sb3IpJyl7YWR2YW5jZSgpO3JldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO30KZnVuY3Rpb24gY3NzTGVuZ3RoKCl7aWYobmV4dHRva2VuLmlkPT09Jy0nKXthZHZhbmNlKCctJyk7YWRqYWNlbnQoKTtub2xpbmVicmVhaygpO30KaWYobmV4dHRva2VuLnR5cGU9PT0nKG51bWJlciknKXthZHZhbmNlKCk7aWYobmV4dHRva2VuLnR5cGUhPT0nKHN0cmluZyknJiZjc3NMZW5ndGhEYXRhW25leHR0b2tlbi52YWx1ZV09PT10cnVlKXthZGphY2VudCgpO2FkdmFuY2UoKTt9ZWxzZSBpZigrdG9rZW4udmFsdWUhPT0wKXt3YXJuaW5nKCJFeHBlY3RlZCBhIGxpbmVhciB1bml0IGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KcmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fQpmdW5jdGlvbiBjc3NMaW5lSGVpZ2h0KCl7aWYobmV4dHRva2VuLmlkPT09Jy0nKXthZHZhbmNlKCctJyk7YWRqYWNlbnQoKTt9CmlmKG5leHR0b2tlbi50eXBlPT09JyhudW1iZXIpJyl7YWR2YW5jZSgpO2lmKG5leHR0b2tlbi50eXBlIT09JyhzdHJpbmcpJyYmY3NzTGVuZ3RoRGF0YVtuZXh0dG9rZW4udmFsdWVdPT09dHJ1ZSl7YWRqYWNlbnQoKTthZHZhbmNlKCk7fQpyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9CmZ1bmN0aW9uIGNzc1dpZHRoKCl7aWYobmV4dHRva2VuLmlkZW50aWZpZXIpe3N3aXRjaChuZXh0dG9rZW4udmFsdWUpe2Nhc2UndGhpbic6Y2FzZSdtZWRpdW0nOmNhc2UndGhpY2snOmFkdmFuY2UoKTtyZXR1cm4gdHJ1ZTt9fWVsc2V7cmV0dXJuIGNzc0xlbmd0aCgpO319CmZ1bmN0aW9uIGNzc01hcmdpbigpe2lmKG5leHR0b2tlbi5pZGVudGlmaWVyKXtpZihuZXh0dG9rZW4udmFsdWU9PT0nYXV0bycpe2FkdmFuY2UoKTtyZXR1cm4gdHJ1ZTt9fWVsc2V7cmV0dXJuIGNzc0xlbmd0aCgpO319CmZ1bmN0aW9uIGNzc0F0dHIoKXtpZihuZXh0dG9rZW4uaWRlbnRpZmllciYmbmV4dHRva2VuLnZhbHVlPT09J2F0dHInKXthZHZhbmNlKCk7YWR2YW5jZSgnKCcpO2lmKCFuZXh0dG9rZW4uaWRlbnRpZmllcil7d2FybmluZygiRXhwZWN0ZWQgYSBuYW1lIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO2FkdmFuY2UoJyknKTtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9CmZ1bmN0aW9uIGNzc0NvbW1hTGlzdCgpe3doaWxlKG5leHR0b2tlbi5pZCE9PSc7Jyl7aWYoIWNzc05hbWUoKSYmIWNzc1N0cmluZygpKXt3YXJuaW5nKCJFeHBlY3RlZCBhIG5hbWUgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fQppZihuZXh0dG9rZW4uaWQhPT0nLCcpe3JldHVybiB0cnVlO30KY29tbWEoKTt9fQpmdW5jdGlvbiBjc3NDb3VudGVyKCl7aWYobmV4dHRva2VuLmlkZW50aWZpZXImJm5leHR0b2tlbi52YWx1ZT09PSdjb3VudGVyJyl7YWR2YW5jZSgpO2FkdmFuY2UoJygnKTtpZighbmV4dHRva2VuLmlkZW50aWZpZXIpe30KYWR2YW5jZSgpO2lmKG5leHR0b2tlbi5pZD09PScsJyl7Y29tbWEoKTtpZihuZXh0dG9rZW4udHlwZSE9PScoc3RyaW5nKScpe3dhcm5pbmcoIkV4cGVjdGVkIGEgc3RyaW5nIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO30KYWR2YW5jZSgnKScpO3JldHVybiB0cnVlO30KaWYobmV4dHRva2VuLmlkZW50aWZpZXImJm5leHR0b2tlbi52YWx1ZT09PSdjb3VudGVycycpe2FkdmFuY2UoKTthZHZhbmNlKCcoJyk7aWYoIW5leHR0b2tlbi5pZGVudGlmaWVyKXt3YXJuaW5nKCJFeHBlY3RlZCBhIG5hbWUgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fQphZHZhbmNlKCk7aWYobmV4dHRva2VuLmlkPT09JywnKXtjb21tYSgpO2lmKG5leHR0b2tlbi50eXBlIT09JyhzdHJpbmcpJyl7d2FybmluZygiRXhwZWN0ZWQgYSBzdHJpbmcgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fQphZHZhbmNlKCk7fQppZihuZXh0dG9rZW4uaWQ9PT0nLCcpe2NvbW1hKCk7aWYobmV4dHRva2VuLnR5cGUhPT0nKHN0cmluZyknKXt3YXJuaW5nKCJFeHBlY3RlZCBhIHN0cmluZyBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9CmFkdmFuY2UoKTt9CmFkdmFuY2UoJyknKTtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9CmZ1bmN0aW9uIGNzc1NoYXBlKCl7dmFyIGk7aWYobmV4dHRva2VuLmlkZW50aWZpZXImJm5leHR0b2tlbi52YWx1ZT09PSdyZWN0Jyl7YWR2YW5jZSgpO2FkdmFuY2UoJygnKTtmb3IoaT0wO2k8NDtpKz0xKXtpZighY3NzTGVuZ3RoKCkpe3dhcm5pbmcoIkV4cGVjdGVkIGEgbnVtYmVyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO2JyZWFrO319CmFkdmFuY2UoJyknKTtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9CmZ1bmN0aW9uIGNzc1VybCgpe3ZhciBjLHVybDtpZihuZXh0dG9rZW4uaWRlbnRpZmllciYmbmV4dHRva2VuLnZhbHVlPT09J3VybCcpe25leHR0b2tlbj1sZXgucmFuZ2UoJygnLCcpJyk7dXJsPW5leHR0b2tlbi52YWx1ZTtjPXVybC5jaGFyQXQoMCk7aWYoYz09PSciJ3x8Yz09PSdcJycpe2lmKHVybC5zbGljZSgtMSkhPT1jKXt3YXJuaW5nKCJCYWQgdXJsIHN0cmluZy4iKTt9ZWxzZXt1cmw9dXJsLnNsaWNlKDEsLTEpO2lmKHVybC5pbmRleE9mKGMpPj0wKXt3YXJuaW5nKCJCYWQgdXJsIHN0cmluZy4iKTt9fX0KaWYoIXVybCl7d2FybmluZygiTWlzc2luZyB1cmwuIik7fQphZHZhbmNlKCk7aWYob3B0aW9uLnNhZmUmJnV4LnRlc3QodXJsKSl7ZXJyb3IoIkFEc2FmZSBVUkwgdmlvbGF0aW9uLiIpO30KdXJscy5wdXNoKHVybCk7cmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fQpjc3NBbnk9W2Nzc1VybCxmdW5jdGlvbigpe2Zvcig7Oyl7aWYobmV4dHRva2VuLmlkZW50aWZpZXIpe3N3aXRjaChuZXh0dG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKSl7Y2FzZSd1cmwnOmNzc1VybCgpO2JyZWFrO2Nhc2UnZXhwcmVzc2lvbic6d2FybmluZygiVW5leHBlY3RlZCBleHByZXNzaW9uICd7YX0nLiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7YWR2YW5jZSgpO2JyZWFrO2RlZmF1bHQ6YWR2YW5jZSgpO319ZWxzZXtpZihuZXh0dG9rZW4uaWQ9PT0nOyd8fG5leHR0b2tlbi5pZD09PSchJ3x8bmV4dHRva2VuLmlkPT09JyhlbmQpJ3x8bmV4dHRva2VuLmlkPT09J30nKXtyZXR1cm4gdHJ1ZTt9CmFkdmFuY2UoKTt9fX1dO2Nzc0JvcmRlclN0eWxlPVsnbm9uZScsJ2hpZGRlbicsJ2RvdHRlZCcsJ2Rhc2hlZCcsJ3NvbGlkJywnZG91YmxlJywncmlkZ2UnLCdpbnNldCcsJ291dHNldCddO2Nzc0JyZWFrPVsnYXV0bycsJ2Fsd2F5cycsJ2F2b2lkJywnbGVmdCcsJ3JpZ2h0J107Y3NzT3ZlcmZsb3c9WydhdXRvJywnaGlkZGVuJywnc2Nyb2xsJywndmlzaWJsZSddO2Nzc0F0dHJpYnV0ZURhdGE9e2JhY2tncm91bmQ6W3RydWUsJ2JhY2tncm91bmQtYXR0YWNobWVudCcsJ2JhY2tncm91bmQtY29sb3InLCdiYWNrZ3JvdW5kLWltYWdlJywnYmFja2dyb3VuZC1wb3NpdGlvbicsJ2JhY2tncm91bmQtcmVwZWF0J10sJ2JhY2tncm91bmQtYXR0YWNobWVudCc6WydzY3JvbGwnLCdmaXhlZCddLCdiYWNrZ3JvdW5kLWNvbG9yJzpbJ3RyYW5zcGFyZW50Jyxjc3NDb2xvcl0sJ2JhY2tncm91bmQtaW1hZ2UnOlsnbm9uZScsY3NzVXJsXSwnYmFja2dyb3VuZC1wb3NpdGlvbic6WzIsW2Nzc0xlbmd0aCwndG9wJywnYm90dG9tJywnbGVmdCcsJ3JpZ2h0JywnY2VudGVyJ11dLCdiYWNrZ3JvdW5kLXJlcGVhdCc6WydyZXBlYXQnLCdyZXBlYXQteCcsJ3JlcGVhdC15Jywnbm8tcmVwZWF0J10sJ2JvcmRlcic6W3RydWUsJ2JvcmRlci1jb2xvcicsJ2JvcmRlci1zdHlsZScsJ2JvcmRlci13aWR0aCddLCdib3JkZXItYm90dG9tJzpbdHJ1ZSwnYm9yZGVyLWJvdHRvbS1jb2xvcicsJ2JvcmRlci1ib3R0b20tc3R5bGUnLCdib3JkZXItYm90dG9tLXdpZHRoJ10sJ2JvcmRlci1ib3R0b20tY29sb3InOmNzc0NvbG9yLCdib3JkZXItYm90dG9tLXN0eWxlJzpjc3NCb3JkZXJTdHlsZSwnYm9yZGVyLWJvdHRvbS13aWR0aCc6Y3NzV2lkdGgsJ2JvcmRlci1jb2xsYXBzZSc6Wydjb2xsYXBzZScsJ3NlcGFyYXRlJ10sJ2JvcmRlci1jb2xvcic6Wyd0cmFuc3BhcmVudCcsNCxjc3NDb2xvcl0sJ2JvcmRlci1sZWZ0JzpbdHJ1ZSwnYm9yZGVyLWxlZnQtY29sb3InLCdib3JkZXItbGVmdC1zdHlsZScsJ2JvcmRlci1sZWZ0LXdpZHRoJ10sJ2JvcmRlci1sZWZ0LWNvbG9yJzpjc3NDb2xvciwnYm9yZGVyLWxlZnQtc3R5bGUnOmNzc0JvcmRlclN0eWxlLCdib3JkZXItbGVmdC13aWR0aCc6Y3NzV2lkdGgsJ2JvcmRlci1yaWdodCc6W3RydWUsJ2JvcmRlci1yaWdodC1jb2xvcicsJ2JvcmRlci1yaWdodC1zdHlsZScsJ2JvcmRlci1yaWdodC13aWR0aCddLCdib3JkZXItcmlnaHQtY29sb3InOmNzc0NvbG9yLCdib3JkZXItcmlnaHQtc3R5bGUnOmNzc0JvcmRlclN0eWxlLCdib3JkZXItcmlnaHQtd2lkdGgnOmNzc1dpZHRoLCdib3JkZXItc3BhY2luZyc6WzIsY3NzTGVuZ3RoXSwnYm9yZGVyLXN0eWxlJzpbNCxjc3NCb3JkZXJTdHlsZV0sJ2JvcmRlci10b3AnOlt0cnVlLCdib3JkZXItdG9wLWNvbG9yJywnYm9yZGVyLXRvcC1zdHlsZScsJ2JvcmRlci10b3Atd2lkdGgnXSwnYm9yZGVyLXRvcC1jb2xvcic6Y3NzQ29sb3IsJ2JvcmRlci10b3Atc3R5bGUnOmNzc0JvcmRlclN0eWxlLCdib3JkZXItdG9wLXdpZHRoJzpjc3NXaWR0aCwnYm9yZGVyLXdpZHRoJzpbNCxjc3NXaWR0aF0sYm90dG9tOltjc3NMZW5ndGgsJ2F1dG8nXSwnY2FwdGlvbi1zaWRlJzpbJ2JvdHRvbScsJ2xlZnQnLCdyaWdodCcsJ3RvcCddLGNsZWFyOlsnYm90aCcsJ2xlZnQnLCdub25lJywncmlnaHQnXSxjbGlwOltjc3NTaGFwZSwnYXV0byddLGNvbG9yOmNzc0NvbG9yLGNvbnRlbnQ6WydvcGVuLXF1b3RlJywnY2xvc2UtcXVvdGUnLCduby1vcGVuLXF1b3RlJywnbm8tY2xvc2UtcXVvdGUnLGNzc1N0cmluZyxjc3NVcmwsY3NzQ291bnRlcixjc3NBdHRyXSwnY291bnRlci1pbmNyZW1lbnQnOltjc3NOYW1lLCdub25lJ10sJ2NvdW50ZXItcmVzZXQnOltjc3NOYW1lLCdub25lJ10sY3Vyc29yOltjc3NVcmwsJ2F1dG8nLCdjcm9zc2hhaXInLCdkZWZhdWx0JywnZS1yZXNpemUnLCdoZWxwJywnbW92ZScsJ24tcmVzaXplJywnbmUtcmVzaXplJywnbnctcmVzaXplJywncG9pbnRlcicsJ3MtcmVzaXplJywnc2UtcmVzaXplJywnc3ctcmVzaXplJywndy1yZXNpemUnLCd0ZXh0Jywnd2FpdCddLGRpcmVjdGlvbjpbJ2x0cicsJ3J0bCddLGRpc3BsYXk6WydibG9jaycsJ2NvbXBhY3QnLCdpbmxpbmUnLCdpbmxpbmUtYmxvY2snLCdpbmxpbmUtdGFibGUnLCdsaXN0LWl0ZW0nLCdtYXJrZXInLCdub25lJywncnVuLWluJywndGFibGUnLCd0YWJsZS1jYXB0aW9uJywndGFibGUtY2VsbCcsJ3RhYmxlLWNvbHVtbicsJ3RhYmxlLWNvbHVtbi1ncm91cCcsJ3RhYmxlLWZvb3Rlci1ncm91cCcsJ3RhYmxlLWhlYWRlci1ncm91cCcsJ3RhYmxlLXJvdycsJ3RhYmxlLXJvdy1ncm91cCddLCdlbXB0eS1jZWxscyc6WydzaG93JywnaGlkZSddLCdmbG9hdCc6WydsZWZ0Jywnbm9uZScsJ3JpZ2h0J10sZm9udDpbJ2NhcHRpb24nLCdpY29uJywnbWVudScsJ21lc3NhZ2UtYm94Jywnc21hbGwtY2FwdGlvbicsJ3N0YXR1cy1iYXInLHRydWUsJ2ZvbnQtc2l6ZScsJ2ZvbnQtc3R5bGUnLCdmb250LXdlaWdodCcsJ2ZvbnQtZmFtaWx5J10sJ2ZvbnQtZmFtaWx5Jzpjc3NDb21tYUxpc3QsJ2ZvbnQtc2l6ZSc6Wyd4eC1zbWFsbCcsJ3gtc21hbGwnLCdzbWFsbCcsJ21lZGl1bScsJ2xhcmdlJywneC1sYXJnZScsJ3h4LWxhcmdlJywnbGFyZ2VyJywnc21hbGxlcicsY3NzTGVuZ3RoXSwnZm9udC1zaXplLWFkanVzdCc6Wydub25lJyxjc3NOdW1iZXJdLCdmb250LXN0cmV0Y2gnOlsnbm9ybWFsJywnd2lkZXInLCduYXJyb3dlcicsJ3VsdHJhLWNvbmRlbnNlZCcsJ2V4dHJhLWNvbmRlbnNlZCcsJ2NvbmRlbnNlZCcsJ3NlbWktY29uZGVuc2VkJywnc2VtaS1leHBhbmRlZCcsJ2V4cGFuZGVkJywnZXh0cmEtZXhwYW5kZWQnXSwnZm9udC1zdHlsZSc6Wydub3JtYWwnLCdpdGFsaWMnLCdvYmxpcXVlJ10sJ2ZvbnQtdmFyaWFudCc6Wydub3JtYWwnLCdzbWFsbC1jYXBzJ10sJ2ZvbnQtd2VpZ2h0JzpbJ25vcm1hbCcsJ2JvbGQnLCdib2xkZXInLCdsaWdodGVyJyxjc3NOdW1iZXJdLGhlaWdodDpbY3NzTGVuZ3RoLCdhdXRvJ10sbGVmdDpbY3NzTGVuZ3RoLCdhdXRvJ10sJ2xldHRlci1zcGFjaW5nJzpbJ25vcm1hbCcsY3NzTGVuZ3RoXSwnbGluZS1oZWlnaHQnOlsnbm9ybWFsJyxjc3NMaW5lSGVpZ2h0XSwnbGlzdC1zdHlsZSc6W3RydWUsJ2xpc3Qtc3R5bGUtaW1hZ2UnLCdsaXN0LXN0eWxlLXBvc2l0aW9uJywnbGlzdC1zdHlsZS10eXBlJ10sJ2xpc3Qtc3R5bGUtaW1hZ2UnOlsnbm9uZScsY3NzVXJsXSwnbGlzdC1zdHlsZS1wb3NpdGlvbic6WydpbnNpZGUnLCdvdXRzaWRlJ10sJ2xpc3Qtc3R5bGUtdHlwZSc6WydjaXJjbGUnLCdkaXNjJywnc3F1YXJlJywnZGVjaW1hbCcsJ2RlY2ltYWwtbGVhZGluZy16ZXJvJywnbG93ZXItcm9tYW4nLCd1cHBlci1yb21hbicsJ2xvd2VyLWdyZWVrJywnbG93ZXItYWxwaGEnLCdsb3dlci1sYXRpbicsJ3VwcGVyLWFscGhhJywndXBwZXItbGF0aW4nLCdoZWJyZXcnLCdrYXRha2FuYScsJ2hpcmFnYW5hLWlyb2hhJywna2F0YWthbmEtb3JvaGEnLCdub25lJ10sbWFyZ2luOls0LGNzc01hcmdpbl0sJ21hcmdpbi1ib3R0b20nOmNzc01hcmdpbiwnbWFyZ2luLWxlZnQnOmNzc01hcmdpbiwnbWFyZ2luLXJpZ2h0Jzpjc3NNYXJnaW4sJ21hcmdpbi10b3AnOmNzc01hcmdpbiwnbWFya2VyLW9mZnNldCc6W2Nzc0xlbmd0aCwnYXV0byddLCdtYXgtaGVpZ2h0JzpbY3NzTGVuZ3RoLCdub25lJ10sJ21heC13aWR0aCc6W2Nzc0xlbmd0aCwnbm9uZSddLCdtaW4taGVpZ2h0Jzpjc3NMZW5ndGgsJ21pbi13aWR0aCc6Y3NzTGVuZ3RoLG9wYWNpdHk6Y3NzTnVtYmVyLG91dGxpbmU6W3RydWUsJ291dGxpbmUtY29sb3InLCdvdXRsaW5lLXN0eWxlJywnb3V0bGluZS13aWR0aCddLCdvdXRsaW5lLWNvbG9yJzpbJ2ludmVydCcsY3NzQ29sb3JdLCdvdXRsaW5lLXN0eWxlJzpbJ2Rhc2hlZCcsJ2RvdHRlZCcsJ2RvdWJsZScsJ2dyb292ZScsJ2luc2V0Jywnbm9uZScsJ291dHNldCcsJ3JpZGdlJywnc29saWQnXSwnb3V0bGluZS13aWR0aCc6Y3NzV2lkdGgsb3ZlcmZsb3c6Y3NzT3ZlcmZsb3csJ292ZXJmbG93LXgnOmNzc092ZXJmbG93LCdvdmVyZmxvdy15Jzpjc3NPdmVyZmxvdyxwYWRkaW5nOls0LGNzc0xlbmd0aF0sJ3BhZGRpbmctYm90dG9tJzpjc3NMZW5ndGgsJ3BhZGRpbmctbGVmdCc6Y3NzTGVuZ3RoLCdwYWRkaW5nLXJpZ2h0Jzpjc3NMZW5ndGgsJ3BhZGRpbmctdG9wJzpjc3NMZW5ndGgsJ3BhZ2UtYnJlYWstYWZ0ZXInOmNzc0JyZWFrLCdwYWdlLWJyZWFrLWJlZm9yZSc6Y3NzQnJlYWsscG9zaXRpb246WydhYnNvbHV0ZScsJ2ZpeGVkJywncmVsYXRpdmUnLCdzdGF0aWMnXSxxdW90ZXM6WzgsY3NzU3RyaW5nXSxyaWdodDpbY3NzTGVuZ3RoLCdhdXRvJ10sJ3RhYmxlLWxheW91dCc6WydhdXRvJywnZml4ZWQnXSwndGV4dC1hbGlnbic6WydjZW50ZXInLCdqdXN0aWZ5JywnbGVmdCcsJ3JpZ2h0J10sJ3RleHQtZGVjb3JhdGlvbic6Wydub25lJywndW5kZXJsaW5lJywnb3ZlcmxpbmUnLCdsaW5lLXRocm91Z2gnLCdibGluayddLCd0ZXh0LWluZGVudCc6Y3NzTGVuZ3RoLCd0ZXh0LXNoYWRvdyc6Wydub25lJyw0LFtjc3NDb2xvcixjc3NMZW5ndGhdXSwndGV4dC10cmFuc2Zvcm0nOlsnY2FwaXRhbGl6ZScsJ3VwcGVyY2FzZScsJ2xvd2VyY2FzZScsJ25vbmUnXSx0b3A6W2Nzc0xlbmd0aCwnYXV0byddLCd1bmljb2RlLWJpZGknOlsnbm9ybWFsJywnZW1iZWQnLCdiaWRpLW92ZXJyaWRlJ10sJ3ZlcnRpY2FsLWFsaWduJzpbJ2Jhc2VsaW5lJywnYm90dG9tJywnc3ViJywnc3VwZXInLCd0b3AnLCd0ZXh0LXRvcCcsJ21pZGRsZScsJ3RleHQtYm90dG9tJyxjc3NMZW5ndGhdLHZpc2liaWxpdHk6Wyd2aXNpYmxlJywnaGlkZGVuJywnY29sbGFwc2UnXSwnd2hpdGUtc3BhY2UnOlsnbm9ybWFsJywnbm93cmFwJywncHJlJywncHJlLWxpbmUnLCdwcmUtd3JhcCcsJ2luaGVyaXQnXSx3aWR0aDpbY3NzTGVuZ3RoLCdhdXRvJ10sJ3dvcmQtc3BhY2luZyc6Wydub3JtYWwnLGNzc0xlbmd0aF0sJ3dvcmQtd3JhcCc6WydicmVhay13b3JkJywnbm9ybWFsJ10sJ3otaW5kZXgnOlsnYXV0bycsY3NzTnVtYmVyXX07ZnVuY3Rpb24gc3R5bGVBdHRyaWJ1dGUoKXt2YXIgdjt3aGlsZShuZXh0dG9rZW4uaWQ9PT0nKid8fG5leHR0b2tlbi5pZD09PScjJ3x8bmV4dHRva2VuLnZhbHVlPT09J18nKXtpZighb3B0aW9uLmNzcyl7d2FybmluZygiVW5leHBlY3RlZCAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO30KaWYobmV4dHRva2VuLmlkPT09Jy0nKXtpZighb3B0aW9uLmNzcyl7d2FybmluZygiVW5leHBlY3RlZCAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgnLScpO2lmKCFuZXh0dG9rZW4uaWRlbnRpZmllcil7d2FybmluZygiRXhwZWN0ZWQgYSBub24tc3RhbmRhcmQgc3R5bGUgYXR0cmlidXRlIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO3JldHVybiBjc3NBbnk7fWVsc2V7aWYoIW5leHR0b2tlbi5pZGVudGlmaWVyKXt3YXJuaW5nKCJFeGNlcHRlZCBhIHN0eWxlIGF0dHJpYnV0ZSwgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fWVsc2V7aWYoaXNfb3duKGNzc0F0dHJpYnV0ZURhdGEsbmV4dHRva2VuLnZhbHVlKSl7dj1jc3NBdHRyaWJ1dGVEYXRhW25leHR0b2tlbi52YWx1ZV07fWVsc2V7dj1jc3NBbnk7aWYoIW9wdGlvbi5jc3Mpe3dhcm5pbmcoIlVucmVjb2duaXplZCBzdHlsZSBhdHRyaWJ1dGUgJ3thfScuIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9fX0KYWR2YW5jZSgpO3JldHVybiB2O319CmZ1bmN0aW9uIHN0eWxlVmFsdWUodil7dmFyIGk9MCxuLG9uY2UsbWF0Y2gscm91bmQsc3RhcnQ9MCx2aTtzd2l0Y2godHlwZW9mIHYpe2Nhc2UnZnVuY3Rpb24nOnJldHVybiB2KCk7Y2FzZSdzdHJpbmcnOmlmKG5leHR0b2tlbi5pZGVudGlmaWVyJiZuZXh0dG9rZW4udmFsdWU9PT12KXthZHZhbmNlKCk7cmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fQpmb3IoOzspe2lmKGk+PXYubGVuZ3RoKXtyZXR1cm4gZmFsc2U7fQp2aT12W2ldO2krPTE7aWYodmk9PT10cnVlKXticmVhazt9ZWxzZSBpZih0eXBlb2Ygdmk9PT0nbnVtYmVyJyl7bj12aTt2aT12W2ldO2krPTE7fWVsc2V7bj0xO30KbWF0Y2g9ZmFsc2U7d2hpbGUobj4wKXtpZihzdHlsZVZhbHVlKHZpKSl7bWF0Y2g9dHJ1ZTtuLT0xO31lbHNle2JyZWFrO319CmlmKG1hdGNoKXtyZXR1cm4gdHJ1ZTt9fQpzdGFydD1pO29uY2U9W107Zm9yKDs7KXtyb3VuZD1mYWxzZTtmb3IoaT1zdGFydDtpPHYubGVuZ3RoO2krPTEpe2lmKCFvbmNlW2ldKXtpZihzdHlsZVZhbHVlKGNzc0F0dHJpYnV0ZURhdGFbdltpXV0pKXttYXRjaD10cnVlO3JvdW5kPXRydWU7b25jZVtpXT10cnVlO2JyZWFrO319fQppZighcm91bmQpe3JldHVybiBtYXRjaDt9fX0KZnVuY3Rpb24gc3R5bGVDaGlsZCgpe2lmKG5leHR0b2tlbi5pZD09PScobnVtYmVyKScpe2FkdmFuY2UoKTtpZihuZXh0dG9rZW4udmFsdWU9PT0nbicmJm5leHR0b2tlbi5pZGVudGlmaWVyKXthZGphY2VudCgpO2FkdmFuY2UoKTtpZihuZXh0dG9rZW4uaWQ9PT0nKycpe2FkamFjZW50KCk7YWR2YW5jZSgnKycpO2FkamFjZW50KCk7YWR2YW5jZSgnKG51bWJlciknKTt9fQpyZXR1cm47fWVsc2V7c3dpdGNoKG5leHR0b2tlbi52YWx1ZSl7Y2FzZSdvZGQnOmNhc2UnZXZlbic6aWYobmV4dHRva2VuLmlkZW50aWZpZXIpe2FkdmFuY2UoKTtyZXR1cm47fX19Cndhcm5pbmcoIlVuZXhwZWN0ZWQgdG9rZW4gJ3thfScuIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9CmZ1bmN0aW9uIHN1YnN0eWxlKCl7dmFyIHY7Zm9yKDs7KXtpZihuZXh0dG9rZW4uaWQ9PT0nfSd8fG5leHR0b2tlbi5pZD09PScoZW5kKSd8fHhxdW90ZSYmbmV4dHRva2VuLmlkPT09eHF1b3RlKXtyZXR1cm47fQp3aGlsZShuZXh0dG9rZW4uaWQ9PT0nOycpe3dhcm5pbmcoIk1pc3BsYWNlZCAnOycuIik7YWR2YW5jZSgnOycpO30Kdj1zdHlsZUF0dHJpYnV0ZSgpO2FkdmFuY2UoJzonKTtpZihuZXh0dG9rZW4uaWRlbnRpZmllciYmbmV4dHRva2VuLnZhbHVlPT09J2luaGVyaXQnKXthZHZhbmNlKCk7fWVsc2V7aWYoIXN0eWxlVmFsdWUodikpe3dhcm5pbmcoIlVuZXhwZWN0ZWQgdG9rZW4gJ3thfScuIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTthZHZhbmNlKCk7fX0KaWYobmV4dHRva2VuLmlkPT09JyEnKXthZHZhbmNlKCchJyk7YWRqYWNlbnQoKTtpZihuZXh0dG9rZW4uaWRlbnRpZmllciYmbmV4dHRva2VuLnZhbHVlPT09J2ltcG9ydGFudCcpe2FkdmFuY2UoKTt9ZWxzZXt3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixuZXh0dG9rZW4sJ2ltcG9ydGFudCcsbmV4dHRva2VuLnZhbHVlKTt9fQppZihuZXh0dG9rZW4uaWQ9PT0nfSd8fG5leHR0b2tlbi5pZD09PXhxdW90ZSl7d2FybmluZygiTWlzc2luZyAne2F9Jy4iLG5leHR0b2tlbiwnOycpO31lbHNle2FkdmFuY2UoJzsnKTt9fX0KZnVuY3Rpb24gc3R5bGVTZWxlY3Rvcigpe2lmKG5leHR0b2tlbi5pZGVudGlmaWVyKXtpZighaXNfb3duKGh0bWx0YWcsbmV4dHRva2VuLnZhbHVlKSl7d2FybmluZygiRXhwZWN0ZWQgYSB0YWdOYW1lLCBhbmQgaW5zdGVhZCBzYXcge2F9LiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fQphZHZhbmNlKCk7fWVsc2V7c3dpdGNoKG5leHR0b2tlbi5pZCl7Y2FzZSc+JzpjYXNlJysnOmFkdmFuY2UoKTtzdHlsZVNlbGVjdG9yKCk7YnJlYWs7Y2FzZSc6JzphZHZhbmNlKCc6Jyk7c3dpdGNoKG5leHR0b2tlbi52YWx1ZSl7Y2FzZSdhY3RpdmUnOmNhc2UnYWZ0ZXInOmNhc2UnYmVmb3JlJzpjYXNlJ2NoZWNrZWQnOmNhc2UnZGlzYWJsZWQnOmNhc2UnZW1wdHknOmNhc2UnZW5hYmxlZCc6Y2FzZSdmaXJzdC1jaGlsZCc6Y2FzZSdmaXJzdC1sZXR0ZXInOmNhc2UnZmlyc3QtbGluZSc6Y2FzZSdmaXJzdC1vZi10eXBlJzpjYXNlJ2ZvY3VzJzpjYXNlJ2hvdmVyJzpjYXNlJ2xhc3Qtb2YtdHlwZSc6Y2FzZSdsaW5rJzpjYXNlJ29ubHktb2YtdHlwZSc6Y2FzZSdyb290JzpjYXNlJ3RhcmdldCc6Y2FzZSd2aXNpdGVkJzphZHZhbmNlKCk7YnJlYWs7Y2FzZSdsYW5nJzphZHZhbmNlKCk7YWR2YW5jZSgnKCcpO2lmKCFuZXh0dG9rZW4uaWRlbnRpZmllcil7d2FybmluZygiRXhwZWN0ZWQgYSBsYW5nIGNvZGUsIGFuZCBpbnN0ZWFkIHNhdyA6e2F9LiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fQphZHZhbmNlKCcpJyk7YnJlYWs7Y2FzZSdudGgtY2hpbGQnOmNhc2UnbnRoLWxhc3QtY2hpbGQnOmNhc2UnbnRoLWxhc3Qtb2YtdHlwZSc6Y2FzZSdudGgtb2YtdHlwZSc6YWR2YW5jZSgpO2FkdmFuY2UoJygnKTtzdHlsZUNoaWxkKCk7YWR2YW5jZSgnKScpO2JyZWFrO2Nhc2Unbm90JzphZHZhbmNlKCk7YWR2YW5jZSgnKCcpO2lmKG5leHR0b2tlbi5pZD09PSc6JyYmcGVlaygwKS52YWx1ZT09PSdub3QnKXt3YXJuaW5nKCJOZXN0ZWQgbm90LiIpO30Kc3R5bGVTZWxlY3RvcigpO2FkdmFuY2UoJyknKTticmVhaztkZWZhdWx0Ondhcm5pbmcoIkV4cGVjdGVkIGEgcHNldWRvLCBhbmQgaW5zdGVhZCBzYXcgOnthfS4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYnJlYWs7Y2FzZScjJzphZHZhbmNlKCcjJyk7aWYoIW5leHR0b2tlbi5pZGVudGlmaWVyKXt3YXJuaW5nKCJFeHBlY3RlZCBhbiBpZCwgYW5kIGluc3RlYWQgc2F3ICN7YX0uIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9CmFkdmFuY2UoKTticmVhaztjYXNlJyonOmFkdmFuY2UoJyonKTticmVhaztjYXNlJy4nOmFkdmFuY2UoJy4nKTtpZighbmV4dHRva2VuLmlkZW50aWZpZXIpe3dhcm5pbmcoIkV4cGVjdGVkIGEgY2xhc3MsIGFuZCBpbnN0ZWFkIHNhdyAjLnthfS4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO2JyZWFrO2Nhc2UnWyc6YWR2YW5jZSgnWycpO2lmKCFuZXh0dG9rZW4uaWRlbnRpZmllcil7d2FybmluZygiRXhwZWN0ZWQgYW4gYXR0cmlidXRlLCBhbmQgaW5zdGVhZCBzYXcgW3thfV0uIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9CmFkdmFuY2UoKTtpZihuZXh0dG9rZW4uaWQ9PT0nPSd8fG5leHR0b2tlbi52YWx1ZT09PSd+PSd8fG5leHR0b2tlbi52YWx1ZT09PSckPSd8fG5leHR0b2tlbi52YWx1ZT09PSd8PSd8fG5leHR0b2tlbi5pZD09PScqPSd8fG5leHR0b2tlbi5pZD09PSdePScpe2FkdmFuY2UoKTtpZihuZXh0dG9rZW4udHlwZSE9PScoc3RyaW5nKScpe3dhcm5pbmcoIkV4cGVjdGVkIGEgc3RyaW5nLCBhbmQgaW5zdGVhZCBzYXcge2F9LiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fQphZHZhbmNlKCk7fQphZHZhbmNlKCddJyk7YnJlYWs7ZGVmYXVsdDplcnJvcigiRXhwZWN0ZWQgYSBDU1Mgc2VsZWN0b3IsIGFuZCBpbnN0ZWFkIHNhdyB7YX0uIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9fX0KZnVuY3Rpb24gc3R5bGVQYXR0ZXJuKCl7dmFyIG5hbWU7aWYobmV4dHRva2VuLmlkPT09J3snKXt3YXJuaW5nKCJFeHBlY3RlZCBhIHN0eWxlIHBhdHRlcm4sIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4uaWQpO31lbHNlIGlmKG5leHR0b2tlbi5pZD09PSdAJyl7YWR2YW5jZSgnQCcpO25hbWU9bmV4dHRva2VuLnZhbHVlO2lmKG5leHR0b2tlbi5pZGVudGlmaWVyJiZhdHJ1bGVbbmFtZV09PT10cnVlKXthZHZhbmNlKCk7cmV0dXJuIG5hbWU7fQp3YXJuaW5nKCJFeHBlY3RlZCBhbiBhdC1ydWxlLCBhbmQgaW5zdGVhZCBzYXcgQHthfS4iLG5leHR0b2tlbixuYW1lKTt9CmZvcig7Oyl7c3R5bGVTZWxlY3RvcigpO2lmKG5leHR0b2tlbi5pZD09PSc8Lyd8fG5leHR0b2tlbi5pZD09PSd7J3x8bmV4dHRva2VuLmlkPT09JyhlbmQpJyl7cmV0dXJuJyc7fQppZihuZXh0dG9rZW4uaWQ9PT0nLCcpe2NvbW1hKCk7fX19CmZ1bmN0aW9uIHN0eWxlcygpe3ZhciBpO3doaWxlKG5leHR0b2tlbi5pZD09PSdAJyl7aT1wZWVrKCk7aWYoaS5pZGVudGlmaWVyJiZpLnZhbHVlPT09J2ltcG9ydCcpe2FkdmFuY2UoJ0AnKTthZHZhbmNlKCk7aWYoIWNzc1VybCgpKXt3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixuZXh0dG9rZW4sJ3VybCcsbmV4dHRva2VuLnZhbHVlKTthZHZhbmNlKCk7fQphZHZhbmNlKCc7Jyk7fWVsc2V7YnJlYWs7fX0Kd2hpbGUobmV4dHRva2VuLmlkIT09JzwvJyYmbmV4dHRva2VuLmlkIT09JyhlbmQpJyl7c3R5bGVQYXR0ZXJuKCk7eG1vZGU9J3N0eWxlcHJvcGVydHknO2lmKG5leHR0b2tlbi5pZD09PSc7Jyl7YWR2YW5jZSgnOycpO31lbHNle2FkdmFuY2UoJ3snKTtzdWJzdHlsZSgpO3htb2RlPSdzdHlsZSc7YWR2YW5jZSgnfScpO319fQpmdW5jdGlvbiBkb0JlZ2luKG4pe2lmKG4hPT0naHRtbCcmJiFvcHRpb24uZnJhZ21lbnQpe2lmKG49PT0nZGl2JyYmb3B0aW9uLmFkc2FmZSl7ZXJyb3IoIkFEU0FGRTogVXNlIHRoZSBmcmFnbWVudCBvcHRpb24uIik7fWVsc2V7ZXJyb3IoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLHRva2VuLCdodG1sJyxuKTt9fQppZihvcHRpb24uYWRzYWZlKXtpZihuPT09J2h0bWwnKXtlcnJvcigiQ3VycmVudGx5LCBBRHNhZmUgZG9lcyBub3Qgb3BlcmF0ZSBvbiB3aG9sZSBIVE1MIGRvY3VtZW50cy4gSXQgb3BlcmF0ZXMgb24gPGRpdj4gZnJhZ21lbnRzIGFuZCAuanMgZmlsZXMuIix0b2tlbik7fQppZihvcHRpb24uZnJhZ21lbnQpe2lmKG4hPT0nZGl2Jyl7ZXJyb3IoIkFEc2FmZSB2aW9sYXRpb246IFdyYXAgdGhlIHdpZGdldCBpbiBhIGRpdi4iLHRva2VuKTt9fWVsc2V7ZXJyb3IoIlVzZSB0aGUgZnJhZ21lbnQgb3B0aW9uLiIsdG9rZW4pO319Cm9wdGlvbi5icm93c2VyPXRydWU7YXNzdW1lKCk7fQpmdW5jdGlvbiBkb0F0dHJpYnV0ZShuLGEsdil7dmFyIHUseDtpZihhPT09J2lkJyl7dT10eXBlb2Ygdj09PSdzdHJpbmcnP3YudG9VcHBlckNhc2UoKTonJztpZihpZHNbdV09PT10cnVlKXt3YXJuaW5nKCJEdXBsaWNhdGUgaWQ9J3thfScuIixuZXh0dG9rZW4sdik7fQppZihvcHRpb24uYWRzYWZlKXtpZihhZHNhZmVfaWQpe2lmKHYuc2xpY2UoMCxhZHNhZmVfaWQubGVuZ3RoKSE9PWFkc2FmZV9pZCl7d2FybmluZygiQURzYWZlIHZpb2xhdGlvbjogQW4gaWQgbXVzdCBoYXZlIGEgJ3thfScgcHJlZml4IixuZXh0dG9rZW4sYWRzYWZlX2lkKTt9ZWxzZSBpZighL15bQS1aXStfW0EtWl0rJC8udGVzdCh2KSl7d2FybmluZygiQURTQUZFIHZpb2xhdGlvbjogYmFkIGlkLiIpO319ZWxzZXthZHNhZmVfaWQ9djtpZighL15bQS1aXStfJC8udGVzdCh2KSl7d2FybmluZygiQURTQUZFIHZpb2xhdGlvbjogYmFkIGlkLiIpO319fQp4PXYuc2VhcmNoKGR4KTtpZih4Pj0wKXt3YXJuaW5nKCJVbmV4cGVjdGVkIGNoYXJhY3RlciAne2F9JyBpbiB7Yn0uIix0b2tlbix2LmNoYXJBdCh4KSxhKTt9Cmlkc1t1XT10cnVlO31lbHNlIGlmKGE9PT0nY2xhc3MnfHxhPT09J3R5cGUnfHxhPT09J25hbWUnKXt4PXYuc2VhcmNoKHF4KTtpZih4Pj0wKXt3YXJuaW5nKCJVbmV4cGVjdGVkIGNoYXJhY3RlciAne2F9JyBpbiB7Yn0uIix0b2tlbix2LmNoYXJBdCh4KSxhKTt9Cmlkc1t1XT10cnVlO31lbHNlIGlmKGE9PT0naHJlZid8fGE9PT0nYmFja2dyb3VuZCd8fGE9PT0nY29udGVudCd8fGE9PT0nZGF0YSd8fGEuaW5kZXhPZignc3JjJyk+PTB8fGEuaW5kZXhPZigndXJsJyk+PTApe2lmKG9wdGlvbi5zYWZlJiZ1eC50ZXN0KHYpKXtlcnJvcigiQURzYWZlIFVSTCB2aW9sYXRpb24uIik7fQp1cmxzLnB1c2godik7fWVsc2UgaWYoYT09PSdmb3InKXtpZihvcHRpb24uYWRzYWZlKXtpZihhZHNhZmVfaWQpe2lmKHYuc2xpY2UoMCxhZHNhZmVfaWQubGVuZ3RoKSE9PWFkc2FmZV9pZCl7d2FybmluZygiQURzYWZlIHZpb2xhdGlvbjogQW4gaWQgbXVzdCBoYXZlIGEgJ3thfScgcHJlZml4IixuZXh0dG9rZW4sYWRzYWZlX2lkKTt9ZWxzZSBpZighL15bQS1aXStfW0EtWl0rJC8udGVzdCh2KSl7d2FybmluZygiQURTQUZFIHZpb2xhdGlvbjogYmFkIGlkLiIpO319ZWxzZXt3YXJuaW5nKCJBRFNBRkUgdmlvbGF0aW9uOiBiYWQgaWQuIik7fX19ZWxzZSBpZihhPT09J25hbWUnKXtpZihvcHRpb24uYWRzYWZlJiZ2LmluZGV4T2YoJ18nKT49MCl7d2FybmluZygiQURzYWZlIG5hbWUgdmlvbGF0aW9uLiIpO319fQpmdW5jdGlvbiBkb1RhZyhuLGEpe3ZhciBpLHQ9aHRtbHRhZ1tuXSx4O3NyYz1mYWxzZTtpZighdCl7ZXJyb3IoIlVucmVjb2duaXplZCB0YWcgJzx7YX0+Jy4iLG5leHR0b2tlbixuPT09bi50b0xvd2VyQ2FzZSgpP246bisnIChjYXBpdGFsaXphdGlvbiBlcnJvciknKTt9CmlmKHN0YWNrLmxlbmd0aD4wKXtpZihuPT09J2h0bWwnKXtlcnJvcigiVG9vIG1hbnkgPGh0bWw+IHRhZ3MuIix0b2tlbik7fQp4PXQucGFyZW50O2lmKHgpe2lmKHguaW5kZXhPZignICcrc3RhY2tbc3RhY2subGVuZ3RoLTFdLm5hbWUrJyAnKTwwKXtlcnJvcigiQSAnPHthfT4nIG11c3QgYmUgd2l0aGluICc8e2J9PicuIix0b2tlbixuLHgpO319ZWxzZSBpZighb3B0aW9uLmFkc2FmZSYmIW9wdGlvbi5mcmFnbWVudCl7aT1zdGFjay5sZW5ndGg7ZG97aWYoaTw9MCl7ZXJyb3IoIkEgJzx7YX0+JyBtdXN0IGJlIHdpdGhpbiAnPHtifT4nLiIsdG9rZW4sbiwnYm9keScpO30KaS09MTt9d2hpbGUoc3RhY2tbaV0ubmFtZSE9PSdib2R5Jyk7fX0Kc3dpdGNoKG4pe2Nhc2UnZGl2JzppZihvcHRpb24uYWRzYWZlJiZzdGFjay5sZW5ndGg9PT0xJiYhYWRzYWZlX2lkKXt3YXJuaW5nKCJBRFNBRkUgdmlvbGF0aW9uOiBtaXNzaW5nIElEXy4iKTt9CmJyZWFrO2Nhc2Unc2NyaXB0Jzp4bW9kZT0nc2NyaXB0JzthZHZhbmNlKCc+Jyk7aW5kZW50PW5leHR0b2tlbi5mcm9tO2lmKGEubGFuZyl7d2FybmluZygibGFuZyBpcyBkZXByZWNhdGVkLiIsdG9rZW4pO30KaWYob3B0aW9uLmFkc2FmZSYmc3RhY2subGVuZ3RoIT09MSl7d2FybmluZygiQURzYWZlIHNjcmlwdCBwbGFjZW1lbnQgdmlvbGF0aW9uLiIsdG9rZW4pO30KaWYoYS5zcmMpe2lmKG9wdGlvbi5hZHNhZmUmJighYWRzYWZlX21heXx8IWFwcHJvdmVkW2Euc3JjXSkpe3dhcm5pbmcoIkFEc2FmZSB1bmFwcHJvdmVkIHNjcmlwdCBzb3VyY2UuIix0b2tlbik7fQppZihhLnR5cGUpe3dhcm5pbmcoInR5cGUgaXMgdW5uZWNlc3NhcnkuIix0b2tlbik7fX1lbHNle2lmKGFkc2FmZV93ZW50KXtlcnJvcigiQURzYWZlIHNjcmlwdCB2aW9sYXRpb24uIix0b2tlbik7fQpzdGF0ZW1lbnRzKCdzY3JpcHQnKTt9Cnhtb2RlPSdodG1sJzthZHZhbmNlKCc8LycpO2lmKCFuZXh0dG9rZW4uaWRlbnRpZmllciYmbmV4dHRva2VuLnZhbHVlIT09J3NjcmlwdCcpe3dhcm5pbmcoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLG5leHR0b2tlbiwnc2NyaXB0JyxuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO3htb2RlPSdvdXRlcic7YnJlYWs7Y2FzZSdzdHlsZSc6eG1vZGU9J3N0eWxlJzthZHZhbmNlKCc+Jyk7c3R5bGVzKCk7eG1vZGU9J2h0bWwnO2FkdmFuY2UoJzwvJyk7aWYoIW5leHR0b2tlbi5pZGVudGlmaWVyJiZuZXh0dG9rZW4udmFsdWUhPT0nc3R5bGUnKXt3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixuZXh0dG9rZW4sJ3N0eWxlJyxuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO3htb2RlPSdvdXRlcic7YnJlYWs7Y2FzZSdpbnB1dCc6c3dpdGNoKGEudHlwZSl7Y2FzZSdyYWRpbyc6Y2FzZSdjaGVja2JveCc6Y2FzZSdidXR0b24nOmNhc2UncmVzZXQnOmNhc2Unc3VibWl0JzpicmVhaztjYXNlJ3RleHQnOmNhc2UnZmlsZSc6Y2FzZSdwYXNzd29yZCc6Y2FzZSdmaWxlJzpjYXNlJ2hpZGRlbic6Y2FzZSdpbWFnZSc6aWYob3B0aW9uLmFkc2FmZSYmYS5hdXRvY29tcGxldGUhPT0nb2ZmJyl7d2FybmluZygiQURzYWZlIGF1dG9jb21wbGV0ZSB2aW9sYXRpb24uIik7fQpicmVhaztkZWZhdWx0Ondhcm5pbmcoIkJhZCBpbnB1dCB0eXBlLiIpO30KYnJlYWs7Y2FzZSdhcHBsZXQnOmNhc2UnYm9keSc6Y2FzZSdlbWJlZCc6Y2FzZSdmcmFtZSc6Y2FzZSdmcmFtZXNldCc6Y2FzZSdoZWFkJzpjYXNlJ2lmcmFtZSc6Y2FzZSdub2VtYmVkJzpjYXNlJ25vZnJhbWVzJzpjYXNlJ29iamVjdCc6Y2FzZSdwYXJhbSc6aWYob3B0aW9uLmFkc2FmZSl7d2FybmluZygiQURzYWZlIHZpb2xhdGlvbjogRGlzYWxsb3dlZCB0YWc6ICIrbik7fQpicmVhazt9fQpmdW5jdGlvbiBjbG9zZXRhZyhuKXtyZXR1cm4nPC8nK24rJz4nO30KZnVuY3Rpb24gaHRtbCgpe3ZhciBhLGF0dHJpYnV0ZXMsZSxuLHEsdCx2LHc9b3B0aW9uLndoaXRlLHdtb2RlO3htb2RlPSdodG1sJzt4cXVvdGU9Jyc7c3RhY2s9bnVsbDtmb3IoOzspe3N3aXRjaChuZXh0dG9rZW4udmFsdWUpe2Nhc2UnPCc6eG1vZGU9J2h0bWwnO2FkdmFuY2UoJzwnKTthdHRyaWJ1dGVzPXt9O3Q9bmV4dHRva2VuO2lmKCF0LmlkZW50aWZpZXIpe3dhcm5pbmcoIkJhZCBpZGVudGlmaWVyIHthfS4iLHQsdC52YWx1ZSk7fQpuPXQudmFsdWU7aWYob3B0aW9uLmNhcCl7bj1uLnRvTG93ZXJDYXNlKCk7fQp0Lm5hbWU9bjthZHZhbmNlKCk7aWYoIXN0YWNrKXtzdGFjaz1bXTtkb0JlZ2luKG4pO30Kdj1odG1sdGFnW25dO2lmKHR5cGVvZiB2IT09J29iamVjdCcpe2Vycm9yKCJVbnJlY29nbml6ZWQgdGFnICc8e2F9PicuIix0LG4pO30KZT12LmVtcHR5O3QudHlwZT1uO2Zvcig7Oyl7aWYobmV4dHRva2VuLmlkPT09Jy8nKXthZHZhbmNlKCcvJyk7aWYobmV4dHRva2VuLmlkIT09Jz4nKXt3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixuZXh0dG9rZW4sJz4nLG5leHR0b2tlbi52YWx1ZSk7fQpicmVhazt9CmlmKG5leHR0b2tlbi5pZCYmbmV4dHRva2VuLmlkLnN1YnN0cigwLDEpPT09Jz4nKXticmVhazt9CmlmKCFuZXh0dG9rZW4uaWRlbnRpZmllcil7aWYobmV4dHRva2VuLmlkPT09JyhlbmQpJ3x8bmV4dHRva2VuLmlkPT09JyhlcnJvciknKXtlcnJvcigiTWlzc2luZyAnPicuIixuZXh0dG9rZW4pO30Kd2FybmluZygiQmFkIGlkZW50aWZpZXIuIik7fQpvcHRpb24ud2hpdGU9dHJ1ZTtub25hZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO2E9bmV4dHRva2VuLnZhbHVlO29wdGlvbi53aGl0ZT13O2FkdmFuY2UoKTtpZighb3B0aW9uLmNhcCYmYSE9PWEudG9Mb3dlckNhc2UoKSl7d2FybmluZygiQXR0cmlidXRlICd7YX0nIG5vdCBhbGwgbG93ZXIgY2FzZS4iLG5leHR0b2tlbixhKTt9CmE9YS50b0xvd2VyQ2FzZSgpO3hxdW90ZT0nJztpZihpc19vd24oYXR0cmlidXRlcyxhKSl7d2FybmluZygiQXR0cmlidXRlICd7YX0nIHJlcGVhdGVkLiIsbmV4dHRva2VuLGEpO30KaWYoYS5zbGljZSgwLDIpPT09J29uJyl7aWYoIW9wdGlvbi5vbil7d2FybmluZygiQXZvaWQgSFRNTCBldmVudCBoYW5kbGVycy4iKTt9Cnhtb2RlPSdzY3JpcHRzdHJpbmcnO2FkdmFuY2UoJz0nKTtxPW5leHR0b2tlbi5pZDtpZihxIT09JyInJiZxIT09IiciKXtlcnJvcigiTWlzc2luZyBxdW90ZS4iKTt9CnhxdW90ZT1xO3dtb2RlPW9wdGlvbi53aGl0ZTtvcHRpb24ud2hpdGU9ZmFsc2U7YWR2YW5jZShxKTtzdGF0ZW1lbnRzKCdvbicpO29wdGlvbi53aGl0ZT13bW9kZTtpZihuZXh0dG9rZW4uaWQhPT1xKXtlcnJvcigiTWlzc2luZyBjbG9zZSBxdW90ZSBvbiBzY3JpcHQgYXR0cmlidXRlLiIpO30KeG1vZGU9J2h0bWwnO3hxdW90ZT0nJzthZHZhbmNlKHEpO3Y9ZmFsc2U7fWVsc2UgaWYoYT09PSdzdHlsZScpe3htb2RlPSdzY3JpcHRzdHJpbmcnO2FkdmFuY2UoJz0nKTtxPW5leHR0b2tlbi5pZDtpZihxIT09JyInJiZxIT09IiciKXtlcnJvcigiTWlzc2luZyBxdW90ZS4iKTt9Cnhtb2RlPSdzdHlsZXByb3BlcnR5Jzt4cXVvdGU9cTthZHZhbmNlKHEpO3N1YnN0eWxlKCk7eG1vZGU9J2h0bWwnO3hxdW90ZT0nJzthZHZhbmNlKHEpO3Y9ZmFsc2U7fWVsc2V7aWYobmV4dHRva2VuLmlkPT09Jz0nKXthZHZhbmNlKCc9Jyk7dj1uZXh0dG9rZW4udmFsdWU7aWYoIW5leHR0b2tlbi5pZGVudGlmaWVyJiZuZXh0dG9rZW4uaWQhPT0nIicmJm5leHR0b2tlbi5pZCE9PSdcJycmJm5leHR0b2tlbi50eXBlIT09JyhzdHJpbmcpJyYmbmV4dHRva2VuLnR5cGUhPT0nKG51bWJlciknJiZuZXh0dG9rZW4udHlwZSE9PScoY29sb3IpJyl7d2FybmluZygiRXhwZWN0ZWQgYW4gYXR0cmlidXRlIHZhbHVlIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLHRva2VuLGEpO30KYWR2YW5jZSgpO31lbHNle3Y9dHJ1ZTt9fQphdHRyaWJ1dGVzW2FdPXY7ZG9BdHRyaWJ1dGUobixhLHYpO30KZG9UYWcobixhdHRyaWJ1dGVzKTtpZighZSl7c3RhY2sucHVzaCh0KTt9Cnhtb2RlPSdvdXRlcic7YWR2YW5jZSgnPicpO2JyZWFrO2Nhc2UnPC8nOnhtb2RlPSdodG1sJzthZHZhbmNlKCc8LycpO2lmKCFuZXh0dG9rZW4uaWRlbnRpZmllcil7d2FybmluZygiQmFkIGlkZW50aWZpZXIuIik7fQpuPW5leHR0b2tlbi52YWx1ZTtpZihvcHRpb24uY2FwKXtuPW4udG9Mb3dlckNhc2UoKTt9CmFkdmFuY2UoKTtpZighc3RhY2spe2Vycm9yKCJVbmV4cGVjdGVkICd7YX0nLiIsbmV4dHRva2VuLGNsb3NldGFnKG4pKTt9CnQ9c3RhY2sucG9wKCk7aWYoIXQpe2Vycm9yKCJVbmV4cGVjdGVkICd7YX0nLiIsbmV4dHRva2VuLGNsb3NldGFnKG4pKTt9CmlmKHQubmFtZSE9PW4pe2Vycm9yKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixuZXh0dG9rZW4sY2xvc2V0YWcodC5uYW1lKSxjbG9zZXRhZyhuKSk7fQppZihuZXh0dG9rZW4uaWQhPT0nPicpe2Vycm9yKCJNaXNzaW5nICd7YX0nLiIsbmV4dHRva2VuLCc+Jyk7fQp4bW9kZT0nb3V0ZXInO2FkdmFuY2UoJz4nKTticmVhaztjYXNlJzwhJzppZihvcHRpb24uc2FmZSl7d2FybmluZygiQURzYWZlIEhUTUwgdmlvbGF0aW9uLiIpO30KeG1vZGU9J2h0bWwnO2Zvcig7Oyl7YWR2YW5jZSgpO2lmKG5leHR0b2tlbi5pZD09PSc+J3x8bmV4dHRva2VuLmlkPT09JyhlbmQpJyl7YnJlYWs7fQppZihuZXh0dG9rZW4udmFsdWUuaW5kZXhPZignLS0nKT49MCl7d2FybmluZygiVW5leHBlY3RlZCAtLS4iKTt9CmlmKG5leHR0b2tlbi52YWx1ZS5pbmRleE9mKCc8Jyk+PTApe3dhcm5pbmcoIlVuZXhwZWN0ZWQgPC4iKTt9CmlmKG5leHR0b2tlbi52YWx1ZS5pbmRleE9mKCc+Jyk+PTApe3dhcm5pbmcoIlVuZXhwZWN0ZWQgPi4iKTt9fQp4bW9kZT0nb3V0ZXInO2FkdmFuY2UoJz4nKTticmVhaztjYXNlJyhlbmQpJzpyZXR1cm47ZGVmYXVsdDppZihuZXh0dG9rZW4uaWQ9PT0nKGVuZCknKXtlcnJvcigiTWlzc2luZyAne2F9Jy4iLG5leHR0b2tlbiwnPC8nK3N0YWNrW3N0YWNrLmxlbmd0aC0xXS52YWx1ZSsnPicpO31lbHNle2FkdmFuY2UoKTt9fQppZihzdGFjayYmc3RhY2subGVuZ3RoPT09MCYmKG9wdGlvbi5hZHNhZmV8fCFvcHRpb24uZnJhZ21lbnR8fG5leHR0b2tlbi5pZD09PScoZW5kKScpKXticmVhazt9fQppZihuZXh0dG9rZW4uaWQhPT0nKGVuZCknKXtlcnJvcigiVW5leHBlY3RlZCBtYXRlcmlhbCBhZnRlciB0aGUgZW5kLiIpO319CnR5cGUoJyhudW1iZXIpJyxpZFZhbHVlKTt0eXBlKCcoc3RyaW5nKScsaWRWYWx1ZSk7c3ludGF4WycoaWRlbnRpZmllciknXT17dHlwZTonKGlkZW50aWZpZXIpJyxsYnA6MCxpZGVudGlmaWVyOnRydWUsbnVkOmZ1bmN0aW9uKCl7dmFyIHY9dGhpcy52YWx1ZSxzPXNjb3BlW3ZdLGY7aWYodHlwZW9mIHM9PT0nZnVuY3Rpb24nKXtzPXVuZGVmaW5lZDt9ZWxzZSBpZih0eXBlb2Ygcz09PSdib29sZWFuJyl7Zj1mdW5jdDtmdW5jdD1mdW5jdGlvbnNbMF07YWRkbGFiZWwodiwndmFyJyk7cz1mdW5jdDtmdW5jdD1mO30KaWYoZnVuY3Q9PT1zKXtzd2l0Y2goZnVuY3Rbdl0pe2Nhc2UndW51c2VkJzpmdW5jdFt2XT0ndmFyJzticmVhaztjYXNlJ2xhYmVsJzp3YXJuaW5nKCIne2F9JyBpcyBhIHN0YXRlbWVudCBsYWJlbC4iLHRva2VuLHYpO2JyZWFrO319ZWxzZSBpZihmdW5jdFsnKGdsb2JhbCknXSl7aWYob3B0aW9uLnVuZGVmJiZwcmVkZWZpbmVkW3ZdIT09J2Jvb2xlYW4nKXt3YXJuaW5nKCIne2F9JyBpcyBub3QgZGVmaW5lZC4iLHRva2VuLHYpO30Kbm90ZV9pbXBsaWVkKHRva2VuKTt9ZWxzZXtzd2l0Y2goZnVuY3Rbdl0pe2Nhc2UnY2xvc3VyZSc6Y2FzZSdmdW5jdGlvbic6Y2FzZSd2YXInOmNhc2UndW51c2VkJzp3YXJuaW5nKCIne2F9JyB1c2VkIG91dCBvZiBzY29wZS4iLHRva2VuLHYpO2JyZWFrO2Nhc2UnbGFiZWwnOndhcm5pbmcoIid7YX0nIGlzIGEgc3RhdGVtZW50IGxhYmVsLiIsdG9rZW4sdik7YnJlYWs7Y2FzZSdvdXRlcic6Y2FzZSdnbG9iYWwnOmJyZWFrO2RlZmF1bHQ6aWYocz09PXRydWUpe2Z1bmN0W3ZdPXRydWU7fWVsc2UgaWYocz09PW51bGwpe3dhcm5pbmcoIid7YX0nIGlzIG5vdCBhbGxvd2VkLiIsdG9rZW4sdik7bm90ZV9pbXBsaWVkKHRva2VuKTt9ZWxzZSBpZih0eXBlb2YgcyE9PSdvYmplY3QnKXtpZihvcHRpb24udW5kZWYpe3dhcm5pbmcoIid7YX0nIGlzIG5vdCBkZWZpbmVkLiIsdG9rZW4sdik7fWVsc2V7ZnVuY3Rbdl09dHJ1ZTt9Cm5vdGVfaW1wbGllZCh0b2tlbik7fWVsc2V7c3dpdGNoKHNbdl0pe2Nhc2UnZnVuY3Rpb24nOmNhc2UndmFyJzpjYXNlJ3VudXNlZCc6c1t2XT0nY2xvc3VyZSc7ZnVuY3Rbdl09c1snKGdsb2JhbCknXT8nZ2xvYmFsJzonb3V0ZXInO2JyZWFrO2Nhc2UnY2xvc3VyZSc6Y2FzZSdwYXJhbWV0ZXInOmZ1bmN0W3ZdPXNbJyhnbG9iYWwpJ10/J2dsb2JhbCc6J291dGVyJzticmVhaztjYXNlJ2xhYmVsJzp3YXJuaW5nKCIne2F9JyBpcyBhIHN0YXRlbWVudCBsYWJlbC4iLHRva2VuLHYpO319fX0KcmV0dXJuIHRoaXM7fSxsZWQ6ZnVuY3Rpb24oKXtlcnJvcigiRXhwZWN0ZWQgYW4gb3BlcmF0b3IgYW5kIGluc3RlYWQgc2F3ICd7YX0nLiIsbmV4dHRva2VuLG5leHR0b2tlbi52YWx1ZSk7fX07dHlwZSgnKHJlZ2V4cCknLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fSk7ZGVsaW0oJyhlbmRsaW5lKScpO2RlbGltKCcoYmVnaW4pJyk7ZGVsaW0oJyhlbmQpJykucmVhY2g9dHJ1ZTtkZWxpbSgnPC8nKS5yZWFjaD10cnVlO2RlbGltKCc8IScpO2RlbGltKCc8IS0tJyk7ZGVsaW0oJy0tPicpO2RlbGltKCcoZXJyb3IpJykucmVhY2g9dHJ1ZTtkZWxpbSgnfScpLnJlYWNoPXRydWU7ZGVsaW0oJyknKTtkZWxpbSgnXScpO2RlbGltKCciJykucmVhY2g9dHJ1ZTtkZWxpbSgiJyIpLnJlYWNoPXRydWU7ZGVsaW0oJzsnKTtkZWxpbSgnOicpLnJlYWNoPXRydWU7ZGVsaW0oJywnKTtkZWxpbSgnIycpO2RlbGltKCdAJyk7cmVzZXJ2ZSgnZWxzZScpO3Jlc2VydmUoJ2Nhc2UnKS5yZWFjaD10cnVlO3Jlc2VydmUoJ2NhdGNoJyk7cmVzZXJ2ZSgnZGVmYXVsdCcpLnJlYWNoPXRydWU7cmVzZXJ2ZSgnZmluYWxseScpO3Jlc2VydmV2YXIoJ2FyZ3VtZW50cycpO3Jlc2VydmV2YXIoJ2V2YWwnKTtyZXNlcnZldmFyKCdmYWxzZScpO3Jlc2VydmV2YXIoJ0luZmluaXR5Jyk7cmVzZXJ2ZXZhcignTmFOJyk7cmVzZXJ2ZXZhcignbnVsbCcpO3Jlc2VydmV2YXIoJ3RoaXMnKTtyZXNlcnZldmFyKCd0cnVlJyk7cmVzZXJ2ZXZhcigndW5kZWZpbmVkJyk7YXNzaWdub3AoJz0nLCdhc3NpZ24nLDIwKTthc3NpZ25vcCgnKz0nLCdhc3NpZ25hZGQnLDIwKTthc3NpZ25vcCgnLT0nLCdhc3NpZ25zdWInLDIwKTthc3NpZ25vcCgnKj0nLCdhc3NpZ25tdWx0JywyMCk7YXNzaWdub3AoJy89JywnYXNzaWduZGl2JywyMCkubnVkPWZ1bmN0aW9uKCl7ZXJyb3IoIkEgcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwgY2FuIGJlIGNvbmZ1c2VkIHdpdGggJy89Jy4iKTt9O2Fzc2lnbm9wKCclPScsJ2Fzc2lnbm1vZCcsMjApO2JpdHdpc2Vhc3NpZ25vcCgnJj0nLCdhc3NpZ25iaXRhbmQnLDIwKTtiaXR3aXNlYXNzaWdub3AoJ3w9JywnYXNzaWduYml0b3InLDIwKTtiaXR3aXNlYXNzaWdub3AoJ149JywnYXNzaWduYml0eG9yJywyMCk7Yml0d2lzZWFzc2lnbm9wKCc8PD0nLCdhc3NpZ25zaGlmdGxlZnQnLDIwKTtiaXR3aXNlYXNzaWdub3AoJz4+PScsJ2Fzc2lnbnNoaWZ0cmlnaHQnLDIwKTtiaXR3aXNlYXNzaWdub3AoJz4+Pj0nLCdhc3NpZ25zaGlmdHJpZ2h0dW5zaWduZWQnLDIwKTtpbmZpeCgnPycsZnVuY3Rpb24obGVmdCx0aGF0KXt0aGF0LmxlZnQ9bGVmdDt0aGF0LnJpZ2h0PXBhcnNlKDEwKTthZHZhbmNlKCc6Jyk7dGhhdFsnZWxzZSddPXBhcnNlKDEwKTtyZXR1cm4gdGhhdDt9LDMwKTtpbmZpeCgnfHwnLCdvcicsNDApO2luZml4KCcmJicsJ2FuZCcsNTApO2JpdHdpc2UoJ3wnLCdiaXRvcicsNzApO2JpdHdpc2UoJ14nLCdiaXR4b3InLDgwKTtiaXR3aXNlKCcmJywnYml0YW5kJyw5MCk7cmVsYXRpb24oJz09JyxmdW5jdGlvbihsZWZ0LHJpZ2h0KXtpZihvcHRpb24uZXFlcWVxKXt3YXJuaW5nKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIix0aGlzLCc9PT0nLCc9PScpO31lbHNlIGlmKGlzUG9vclJlbGF0aW9uKGxlZnQpKXt3YXJuaW5nKCJVc2UgJ3thfScgdG8gY29tcGFyZSB3aXRoICd7Yn0nLiIsdGhpcywnPT09JyxsZWZ0LnZhbHVlKTt9ZWxzZSBpZihpc1Bvb3JSZWxhdGlvbihyaWdodCkpe3dhcm5pbmcoIlVzZSAne2F9JyB0byBjb21wYXJlIHdpdGggJ3tifScuIix0aGlzLCc9PT0nLHJpZ2h0LnZhbHVlKTt9CnJldHVybiB0aGlzO30pO3JlbGF0aW9uKCc9PT0nKTtyZWxhdGlvbignIT0nLGZ1bmN0aW9uKGxlZnQscmlnaHQpe2lmKG9wdGlvbi5lcWVxZXEpe3dhcm5pbmcoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLHRoaXMsJyE9PScsJyE9Jyk7fWVsc2UgaWYoaXNQb29yUmVsYXRpb24obGVmdCkpe3dhcm5pbmcoIlVzZSAne2F9JyB0byBjb21wYXJlIHdpdGggJ3tifScuIix0aGlzLCchPT0nLGxlZnQudmFsdWUpO31lbHNlIGlmKGlzUG9vclJlbGF0aW9uKHJpZ2h0KSl7d2FybmluZygiVXNlICd7YX0nIHRvIGNvbXBhcmUgd2l0aCAne2J9Jy4iLHRoaXMsJyE9PScscmlnaHQudmFsdWUpO30KcmV0dXJuIHRoaXM7fSk7cmVsYXRpb24oJyE9PScpO3JlbGF0aW9uKCc8Jyk7cmVsYXRpb24oJz4nKTtyZWxhdGlvbignPD0nKTtyZWxhdGlvbignPj0nKTtiaXR3aXNlKCc8PCcsJ3NoaWZ0bGVmdCcsMTIwKTtiaXR3aXNlKCc+PicsJ3NoaWZ0cmlnaHQnLDEyMCk7Yml0d2lzZSgnPj4+Jywnc2hpZnRyaWdodHVuc2lnbmVkJywxMjApO2luZml4KCdpbicsJ2luJywxMjApO2luZml4KCdpbnN0YW5jZW9mJywnaW5zdGFuY2VvZicsMTIwKTtpbmZpeCgnKycsZnVuY3Rpb24obGVmdCx0aGF0KXt2YXIgcmlnaHQ9cGFyc2UoMTMwKTtpZihsZWZ0JiZyaWdodCYmbGVmdC5pZD09PScoc3RyaW5nKScmJnJpZ2h0LmlkPT09JyhzdHJpbmcpJyl7bGVmdC52YWx1ZSs9cmlnaHQudmFsdWU7bGVmdC5jaGFyYWN0ZXI9cmlnaHQuY2hhcmFjdGVyO2lmKGp4LnRlc3QobGVmdC52YWx1ZSkpe3dhcm5pbmcoIkphdmFTY3JpcHQgVVJMLiIsbGVmdCk7fQpyZXR1cm4gbGVmdDt9CnRoYXQubGVmdD1sZWZ0O3RoYXQucmlnaHQ9cmlnaHQ7cmV0dXJuIHRoYXQ7fSwxMzApO3ByZWZpeCgnKycsJ251bScpO2luZml4KCctJywnc3ViJywxMzApO3ByZWZpeCgnLScsJ25lZycpO2luZml4KCcqJywnbXVsdCcsMTQwKTtpbmZpeCgnLycsJ2RpdicsMTQwKTtpbmZpeCgnJScsJ21vZCcsMTQwKTtzdWZmaXgoJysrJywncG9zdGluYycpO3ByZWZpeCgnKysnLCdwcmVpbmMnKTtzeW50YXhbJysrJ10uZXhwcz10cnVlO3N1ZmZpeCgnLS0nLCdwb3N0ZGVjJyk7cHJlZml4KCctLScsJ3ByZWRlYycpO3N5bnRheFsnLS0nXS5leHBzPXRydWU7cHJlZml4KCdkZWxldGUnLGZ1bmN0aW9uKCl7dmFyIHA9cGFyc2UoMCk7aWYoIXB8fChwLmlkIT09Jy4nJiZwLmlkIT09J1snKSl7d2FybmluZygiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsbmV4dHRva2VuLCcuJyxuZXh0dG9rZW4udmFsdWUpO30KdGhpcy5maXJzdD1wO3JldHVybiB0aGlzO30pLmV4cHM9dHJ1ZTtwcmVmaXgoJ34nLGZ1bmN0aW9uKCl7aWYob3B0aW9uLmJpdHdpc2Upe3dhcm5pbmcoIlVuZXhwZWN0ZWQgJ3thfScuIix0aGlzLCd+Jyk7fQpwYXJzZSgxNTApO3JldHVybiB0aGlzO30pO3ByZWZpeCgnIScsZnVuY3Rpb24oKXt0aGlzLnJpZ2h0PXBhcnNlKDE1MCk7dGhpcy5hcml0eT0ndW5hcnknO2lmKGJhbmdbdGhpcy5yaWdodC5pZF09PT10cnVlKXt3YXJuaW5nKCJDb25mdXNpbmcgdXNlIG9mICd7YX0nLiIsdGhpcywnIScpO30KcmV0dXJuIHRoaXM7fSk7cHJlZml4KCd0eXBlb2YnLCd0eXBlb2YnKTtwcmVmaXgoJ25ldycsZnVuY3Rpb24oKXt2YXIgYz1wYXJzZSgxNTUpLGk7aWYoYyYmYy5pZCE9PSdmdW5jdGlvbicpe2lmKGMuaWRlbnRpZmllcil7Y1snbmV3J109dHJ1ZTtzd2l0Y2goYy52YWx1ZSl7Y2FzZSdPYmplY3QnOndhcm5pbmcoIlVzZSB0aGUgb2JqZWN0IGxpdGVyYWwgbm90YXRpb24ge30uIix0b2tlbik7YnJlYWs7Y2FzZSdBcnJheSc6aWYobmV4dHRva2VuLmlkIT09JygnKXt3YXJuaW5nKCJVc2UgdGhlIGFycmF5IGxpdGVyYWwgbm90YXRpb24gW10uIix0b2tlbik7fWVsc2V7YWR2YW5jZSgnKCcpO2lmKG5leHR0b2tlbi5pZD09PScpJyl7d2FybmluZygiVXNlIHRoZSBhcnJheSBsaXRlcmFsIG5vdGF0aW9uIFtdLiIsdG9rZW4pO31lbHNle2k9cGFyc2UoMCk7Yy5kaW1lbnNpb249aTtpZigoaS5pZD09PScobnVtYmVyKScmJi9bLitcLUVlXS8udGVzdChpLnZhbHVlKSl8fChpLmlkPT09Jy0nJiYhaS5yaWdodCl8fGkuaWQ9PT0nKHN0cmluZyknfHxpLmlkPT09J1snfHxpLmlkPT09J3snfHxpLmlkPT09J3RydWUnfHxpLmlkPT09J2ZhbHNlJ3x8aS5pZD09PSdudWxsJ3x8aS5pZD09PSd1bmRlZmluZWQnfHxpLmlkPT09J0luZmluaXR5Jyl7d2FybmluZygiVXNlIHRoZSBhcnJheSBsaXRlcmFsIG5vdGF0aW9uIFtdLiIsdG9rZW4pO30KaWYobmV4dHRva2VuLmlkIT09JyknKXtlcnJvcigiVXNlIHRoZSBhcnJheSBsaXRlcmFsIG5vdGF0aW9uIFtdLiIsdG9rZW4pO319CmFkdmFuY2UoJyknKTt9CnRoaXMuZmlyc3Q9YztyZXR1cm4gdGhpcztjYXNlJ051bWJlcic6Y2FzZSdTdHJpbmcnOmNhc2UnQm9vbGVhbic6Y2FzZSdNYXRoJzpjYXNlJ0pTT04nOndhcm5pbmcoIkRvIG5vdCB1c2Uge2F9IGFzIGEgY29uc3RydWN0b3IuIix0b2tlbixjLnZhbHVlKTticmVhaztjYXNlJ0Z1bmN0aW9uJzppZighb3B0aW9uLmV2aWwpe3dhcm5pbmcoIlRoZSBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpcyBldmFsLiIpO30KYnJlYWs7Y2FzZSdEYXRlJzpjYXNlJ1JlZ0V4cCc6YnJlYWs7ZGVmYXVsdDppZihjLmlkIT09J2Z1bmN0aW9uJyl7aT1jLnZhbHVlLnN1YnN0cigwLDEpO2lmKG9wdGlvbi5uZXdjYXAmJihpPCdBJ3x8aT4nWicpKXt3YXJuaW5nKCJBIGNvbnN0cnVjdG9yIG5hbWUgc2hvdWxkIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlci4iLHRva2VuKTt9fX19ZWxzZXtpZihjLmlkIT09Jy4nJiZjLmlkIT09J1snJiZjLmlkIT09JygnKXt3YXJuaW5nKCJCYWQgY29uc3RydWN0b3IuIix0b2tlbik7fX19ZWxzZXt3YXJuaW5nKCJXZWlyZCBjb25zdHJ1Y3Rpb24uIERlbGV0ZSAnbmV3Jy4iLHRoaXMpO30KYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTtpZihuZXh0dG9rZW4uaWQhPT0nKCcpe3dhcm5pbmcoIk1pc3NpbmcgJygpJyBpbnZva2luZyBhIGNvbnN0cnVjdG9yLiIpO30KdGhpcy5maXJzdD1jO3JldHVybiB0aGlzO30pO3N5bnRheFsnbmV3J10uZXhwcz10cnVlO2luZml4KCcuJyxmdW5jdGlvbihsZWZ0LHRoYXQpe2FkamFjZW50KHByZXZ0b2tlbix0b2tlbik7dmFyIG09aWRlbnRpZmllcigpO2lmKHR5cGVvZiBtPT09J3N0cmluZycpe2NvdW50TWVtYmVyKG0pO30KdGhhdC5sZWZ0PWxlZnQ7dGhhdC5yaWdodD1tO2lmKCFvcHRpb24uZXZpbCYmbGVmdCYmbGVmdC52YWx1ZT09PSdkb2N1bWVudCcmJihtPT09J3dyaXRlJ3x8bT09PSd3cml0ZWxuJykpe3dhcm5pbmcoImRvY3VtZW50LndyaXRlIGNhbiBiZSBhIGZvcm0gb2YgZXZhbC4iLGxlZnQpO31lbHNlIGlmKG9wdGlvbi5hZHNhZmUpe2lmKGxlZnQmJmxlZnQudmFsdWU9PT0nQURTQUZFJyl7aWYobT09PSdpZCd8fG09PT0nbGliJyl7d2FybmluZygiQURzYWZlIHZpb2xhdGlvbi4iLHRoYXQpO31lbHNlIGlmKG09PT0nZ28nKXtpZih4bW9kZSE9PSdzY3JpcHQnKXt3YXJuaW5nKCJBRHNhZmUgdmlvbGF0aW9uLiIsdGhhdCk7fWVsc2UgaWYoYWRzYWZlX3dlbnR8fG5leHR0b2tlbi5pZCE9PScoJ3x8cGVlaygwKS5pZCE9PScoc3RyaW5nKSd8fHBlZWsoMCkudmFsdWUhPT1hZHNhZmVfaWR8fHBlZWsoMSkuaWQhPT0nLCcpe2Vycm9yKCJBRHNhZmUgdmlvbGF0aW9uOiBnby4iLHRoYXQpO30KYWRzYWZlX3dlbnQ9dHJ1ZTthZHNhZmVfbWF5PWZhbHNlO319fQppZighb3B0aW9uLmV2aWwmJihtPT09J2V2YWwnfHxtPT09J2V4ZWNTY3JpcHQnKSl7d2FybmluZygnZXZhbCBpcyBldmlsLicpO31lbHNlIGlmKG9wdGlvbi5zYWZlKXtmb3IoOzspe2lmKGJhbm5lZFttXT09PXRydWUpe3dhcm5pbmcoIkFEc2FmZSByZXN0cmljdGVkIHdvcmQgJ3thfScuIix0b2tlbixtKTt9CmlmKHR5cGVvZiBwcmVkZWZpbmVkW2xlZnQudmFsdWVdIT09J2Jvb2xlYW4nfHxuZXh0dG9rZW4uaWQ9PT0nKCcpe2JyZWFrO30KaWYoc3RhbmRhcmRfbWVtYmVyW21dPT09dHJ1ZSl7aWYobmV4dHRva2VuLmlkPT09Jy4nKXt3YXJuaW5nKCJBRHNhZmUgdmlvbGF0aW9uLiIsdGhhdCk7fQpicmVhazt9CmlmKG5leHR0b2tlbi5pZCE9PScuJyl7d2FybmluZygiQURzYWZlIHZpb2xhdGlvbi4iLHRoYXQpO2JyZWFrO30KYWR2YW5jZSgnLicpO3Rva2VuLmxlZnQ9dGhhdDt0b2tlbi5yaWdodD1tO3RoYXQ9dG9rZW47bT1pZGVudGlmaWVyKCk7aWYodHlwZW9mIG09PT0nc3RyaW5nJyl7Y291bnRNZW1iZXIobSk7fX19CnJldHVybiB0aGF0O30sMTYwLHRydWUpO2luZml4KCcoJyxmdW5jdGlvbihsZWZ0LHRoYXQpe2FkamFjZW50KHByZXZ0b2tlbix0b2tlbik7bm9zcGFjZSgpO3ZhciBuPTAscD1bXTtpZihsZWZ0KXtpZihsZWZ0LnR5cGU9PT0nKGlkZW50aWZpZXIpJyl7aWYobGVmdC52YWx1ZS5tYXRjaCgvXltBLVpdKFtBLVowLTlfJF0qW2Etel1bQS1aYS16MC05XyRdKik/JC8pKXtpZihsZWZ0LnZhbHVlIT09J051bWJlcicmJmxlZnQudmFsdWUhPT0nU3RyaW5nJyYmbGVmdC52YWx1ZSE9PSdCb29sZWFuJyYmbGVmdC52YWx1ZSE9PSdEYXRlJyl7aWYobGVmdC52YWx1ZT09PSdNYXRoJyl7d2FybmluZygiTWF0aCBpcyBub3QgYSBmdW5jdGlvbi4iLGxlZnQpO31lbHNlIGlmKG9wdGlvbi5uZXdjYXApe3dhcm5pbmcoIk1pc3NpbmcgJ25ldycgcHJlZml4IHdoZW4gaW52b2tpbmcgYSBjb25zdHJ1Y3Rvci4iLGxlZnQpO319fX1lbHNlIGlmKGxlZnQuaWQ9PT0nLicpe2lmKG9wdGlvbi5zYWZlJiZsZWZ0LmxlZnQudmFsdWU9PT0nTWF0aCcmJmxlZnQucmlnaHQ9PT0ncmFuZG9tJyl7d2FybmluZygiQURzYWZlIHZpb2xhdGlvbi4iLGxlZnQpO319fQppZihuZXh0dG9rZW4uaWQhPT0nKScpe2Zvcig7Oyl7cFtwLmxlbmd0aF09cGFyc2UoMTApO24rPTE7aWYobmV4dHRva2VuLmlkIT09JywnKXticmVhazt9CmNvbW1hKCk7fX0KYWR2YW5jZSgnKScpO2lmKG9wdGlvbi5pbW1lZCYmbGVmdC5pZD09PSdmdW5jdGlvbicmJm5leHR0b2tlbi5pZCE9PScpJyl7d2FybmluZygiV3JhcCB0aGUgZW50aXJlIGltbWVkaWF0ZSBmdW5jdGlvbiBpbnZvY2F0aW9uIGluIHBhcmVucy4iLHRoYXQpO30Kbm9zcGFjZShwcmV2dG9rZW4sdG9rZW4pO2lmKHR5cGVvZiBsZWZ0PT09J29iamVjdCcpe2lmKGxlZnQudmFsdWU9PT0ncGFyc2VJbnQnJiZuPT09MSl7d2FybmluZygiTWlzc2luZyByYWRpeCBwYXJhbWV0ZXIuIixsZWZ0KTt9CmlmKCFvcHRpb24uZXZpbCl7aWYobGVmdC52YWx1ZT09PSdldmFsJ3x8bGVmdC52YWx1ZT09PSdGdW5jdGlvbid8fGxlZnQudmFsdWU9PT0nZXhlY1NjcmlwdCcpe3dhcm5pbmcoImV2YWwgaXMgZXZpbC4iLGxlZnQpO31lbHNlIGlmKHBbMF0mJnBbMF0uaWQ9PT0nKHN0cmluZyknJiYobGVmdC52YWx1ZT09PSdzZXRUaW1lb3V0J3x8bGVmdC52YWx1ZT09PSdzZXRJbnRlcnZhbCcpKXt3YXJuaW5nKCJJbXBsaWVkIGV2YWwgaXMgZXZpbC4gUGFzcyBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBzdHJpbmcuIixsZWZ0KTt9fQppZighbGVmdC5pZGVudGlmaWVyJiZsZWZ0LmlkIT09Jy4nJiZsZWZ0LmlkIT09J1snJiZsZWZ0LmlkIT09JygnJiZsZWZ0LmlkIT09JyYmJyYmbGVmdC5pZCE9PSd8fCcmJmxlZnQuaWQhPT0nPycpe3dhcm5pbmcoIkJhZCBpbnZvY2F0aW9uLiIsbGVmdCk7fX0KdGhhdC5sZWZ0PWxlZnQ7cmV0dXJuIHRoYXQ7fSwxNTUsdHJ1ZSkuZXhwcz10cnVlO3ByZWZpeCgnKCcsZnVuY3Rpb24oKXtub3NwYWNlKCk7dmFyIHY9cGFyc2UoMCk7YWR2YW5jZSgnKScsdGhpcyk7bm9zcGFjZShwcmV2dG9rZW4sdG9rZW4pO2lmKG9wdGlvbi5pbW1lZCYmdi5pZD09PSdmdW5jdGlvbicpe2lmKG5leHR0b2tlbi5pZD09PScoJyl7d2FybmluZygiTW92ZSB0aGUgaW52b2NhdGlvbiBpbnRvIHRoZSBwYXJlbnMgdGhhdCBjb250YWluIHRoZSBmdW5jdGlvbi4iLG5leHR0b2tlbik7fWVsc2V7d2FybmluZygiRG8gbm90IHdyYXAgZnVuY3Rpb24gbGl0ZXJhbHMgaW4gcGFyZW5zIHVubGVzcyB0aGV5IGFyZSB0byBiZSBpbW1lZGlhdGVseSBpbnZva2VkLiIsdGhpcyk7fX0KcmV0dXJuIHY7fSk7aW5maXgoJ1snLGZ1bmN0aW9uKGxlZnQsdGhhdCl7bm9zcGFjZSgpO3ZhciBlPXBhcnNlKDApLHM7aWYoZSYmZS50eXBlPT09JyhzdHJpbmcpJyl7aWYob3B0aW9uLnNhZmUmJmJhbm5lZFtlLnZhbHVlXT09PXRydWUpe3dhcm5pbmcoIkFEc2FmZSByZXN0cmljdGVkIHdvcmQgJ3thfScuIix0aGF0LGUudmFsdWUpO31lbHNlIGlmKCFvcHRpb24uZXZpbCYmKGUudmFsdWU9PT0nZXZhbCd8fGUudmFsdWU9PT0nZXhlY1NjcmlwdCcpKXt3YXJuaW5nKCJldmFsIGlzIGV2aWwuIix0aGF0KTt9ZWxzZSBpZihvcHRpb24uc2FmZSYmKGUudmFsdWUuY2hhckF0KDApPT09J18nfHxlLnZhbHVlLmNoYXJBdCgwKT09PSctJykpe3dhcm5pbmcoIkFEc2FmZSByZXN0cmljdGVkIHN1YnNjcmlwdCAne2F9Jy4iLHRoYXQsZS52YWx1ZSk7fQpjb3VudE1lbWJlcihlLnZhbHVlKTtpZighb3B0aW9uLnN1YiYmaXgudGVzdChlLnZhbHVlKSl7cz1zeW50YXhbZS52YWx1ZV07aWYoIXN8fCFzLnJlc2VydmVkKXt3YXJuaW5nKCJbJ3thfSddIGlzIGJldHRlciB3cml0dGVuIGluIGRvdCBub3RhdGlvbi4iLGUsZS52YWx1ZSk7fX19ZWxzZSBpZighZXx8ZS50eXBlIT09JyhudW1iZXIpJ3x8ZS52YWx1ZTwwKXtpZihvcHRpb24uc2FmZSl7d2FybmluZygnQURzYWZlIHN1YnNjcmlwdGluZy4nKTt9fQphZHZhbmNlKCddJyx0aGF0KTtub3NwYWNlKHByZXZ0b2tlbix0b2tlbik7dGhhdC5sZWZ0PWxlZnQ7dGhhdC5yaWdodD1lO3JldHVybiB0aGF0O30sMTYwLHRydWUpO3ByZWZpeCgnWycsZnVuY3Rpb24oKXt2YXIgYj10b2tlbi5saW5lIT09bmV4dHRva2VuLmxpbmU7dGhpcy5maXJzdD1bXTtpZihiKXtpbmRlbnQrPW9wdGlvbi5pbmRlbnQ7aWYobmV4dHRva2VuLmZyb209PT1pbmRlbnQrb3B0aW9uLmluZGVudCl7aW5kZW50Kz1vcHRpb24uaW5kZW50O319CndoaWxlKG5leHR0b2tlbi5pZCE9PScoZW5kKScpe3doaWxlKG5leHR0b2tlbi5pZD09PScsJyl7d2FybmluZygiRXh0cmEgY29tbWEuIik7YWR2YW5jZSgnLCcpO30KaWYobmV4dHRva2VuLmlkPT09J10nKXticmVhazt9CmlmKGImJnRva2VuLmxpbmUhPT1uZXh0dG9rZW4ubGluZSl7aW5kZW50YXRpb24oKTt9CnRoaXMuZmlyc3QucHVzaChwYXJzZSgxMCkpO2lmKG5leHR0b2tlbi5pZD09PScsJyl7Y29tbWEoKTtpZihuZXh0dG9rZW4uaWQ9PT0nXScpe3dhcm5pbmcoIkV4dHJhIGNvbW1hLiIsdG9rZW4pO2JyZWFrO319ZWxzZXticmVhazt9fQppZihiKXtpbmRlbnQtPW9wdGlvbi5pbmRlbnQ7aW5kZW50YXRpb24oKTt9CmFkdmFuY2UoJ10nLHRoaXMpO3JldHVybiB0aGlzO30sMTYwKTsoZnVuY3Rpb24oeCl7eC5udWQ9ZnVuY3Rpb24oKXt2YXIgYixpLHMsc2Vlbj17fTtiPXRva2VuLmxpbmUhPT1uZXh0dG9rZW4ubGluZTtpZihiKXtpbmRlbnQrPW9wdGlvbi5pbmRlbnQ7aWYobmV4dHRva2VuLmZyb209PT1pbmRlbnQrb3B0aW9uLmluZGVudCl7aW5kZW50Kz1vcHRpb24uaW5kZW50O319CmZvcig7Oyl7aWYobmV4dHRva2VuLmlkPT09J30nKXticmVhazt9CmlmKGIpe2luZGVudGF0aW9uKCk7fQppPW9wdGlvbmFsaWRlbnRpZmllcih0cnVlKTtpZighaSl7aWYobmV4dHRva2VuLmlkPT09JyhzdHJpbmcpJyl7aT1uZXh0dG9rZW4udmFsdWU7aWYoaXgudGVzdChpKSl7cz1zeW50YXhbaV07fQphZHZhbmNlKCk7fWVsc2UgaWYobmV4dHRva2VuLmlkPT09JyhudW1iZXIpJyl7aT1uZXh0dG9rZW4udmFsdWUudG9TdHJpbmcoKTthZHZhbmNlKCk7fWVsc2V7ZXJyb3IoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLG5leHR0b2tlbiwnfScsbmV4dHRva2VuLnZhbHVlKTt9fQppZihzZWVuW2ldPT09dHJ1ZSl7d2FybmluZygiRHVwbGljYXRlIG1lbWJlciAne2F9Jy4iLG5leHR0b2tlbixpKTt9CnNlZW5baV09dHJ1ZTtjb3VudE1lbWJlcihpKTthZHZhbmNlKCc6Jyk7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTtwYXJzZSgxMCk7aWYobmV4dHRva2VuLmlkPT09JywnKXtjb21tYSgpO2lmKG5leHR0b2tlbi5pZD09PScsJ3x8bmV4dHRva2VuLmlkPT09J30nKXt3YXJuaW5nKCJFeHRyYSBjb21tYS4iLHRva2VuKTt9fWVsc2V7YnJlYWs7fX0KaWYoYil7aW5kZW50LT1vcHRpb24uaW5kZW50O2luZGVudGF0aW9uKCk7fQphZHZhbmNlKCd9Jyx0aGlzKTtyZXR1cm4gdGhpczt9O3guZnVkPWZ1bmN0aW9uKCl7ZXJyb3IoIkV4cGVjdGVkIHRvIHNlZSBhIHN0YXRlbWVudCBhbmQgaW5zdGVhZCBzYXcgYSBibG9jay4iLHRva2VuKTt9O30oZGVsaW0oJ3snKSkpO2Z1bmN0aW9uIHZhcnN0YXRlbWVudChwcmVmaXgpe3ZhciBpZCxuYW1lLHZhbHVlO2lmKGZ1bmN0Wycob25ldmFyKSddJiZvcHRpb24ub25ldmFyKXt3YXJuaW5nKCJUb28gbWFueSB2YXIgc3RhdGVtZW50cy4iKTt9ZWxzZSBpZighZnVuY3RbJyhnbG9iYWwpJ10pe2Z1bmN0Wycob25ldmFyKSddPXRydWU7fQp0aGlzLmZpcnN0PVtdO2Zvcig7Oyl7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTtpZD1pZGVudGlmaWVyKCk7aWYoZnVuY3RbJyhnbG9iYWwpJ10mJnByZWRlZmluZWRbaWRdPT09ZmFsc2Upe3dhcm5pbmcoIlJlZGVmaW5pdGlvbiBvZiAne2F9Jy4iLHRva2VuLGlkKTt9CmFkZGxhYmVsKGlkLCd1bnVzZWQnKTtpZihwcmVmaXgpe2JyZWFrO30KbmFtZT10b2tlbjt0aGlzLmZpcnN0LnB1c2godG9rZW4pO2lmKG5leHR0b2tlbi5pZD09PSc9Jyl7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTthZHZhbmNlKCc9Jyk7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTtpZihuZXh0dG9rZW4uaWQ9PT0ndW5kZWZpbmVkJyl7d2FybmluZygiSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbml0aWFsaXplICd7YX0nIHRvICd1bmRlZmluZWQnLiIsdG9rZW4saWQpO30KaWYocGVlaygwKS5pZD09PSc9JyYmbmV4dHRva2VuLmlkZW50aWZpZXIpe2Vycm9yKCJWYXJpYWJsZSB7YX0gd2FzIG5vdCBkZWNsYXJlZCBjb3JyZWN0bHkuIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9CnZhbHVlPXBhcnNlKDApO25hbWUuZmlyc3Q9dmFsdWU7fQppZihuZXh0dG9rZW4uaWQhPT0nLCcpe2JyZWFrO30KY29tbWEoKTt9CnJldHVybiB0aGlzO30Kc3RtdCgndmFyJyx2YXJzdGF0ZW1lbnQpLmV4cHM9dHJ1ZTtmdW5jdGlvbiBmdW5jdGlvbnBhcmFtcygpe3ZhciBpLHQ9bmV4dHRva2VuLHA9W107YWR2YW5jZSgnKCcpO25vc3BhY2UoKTtpZihuZXh0dG9rZW4uaWQ9PT0nKScpe2FkdmFuY2UoJyknKTtub3NwYWNlKHByZXZ0b2tlbix0b2tlbik7cmV0dXJuO30KZm9yKDs7KXtpPWlkZW50aWZpZXIoKTtwLnB1c2goaSk7YWRkbGFiZWwoaSwncGFyYW1ldGVyJyk7aWYobmV4dHRva2VuLmlkPT09JywnKXtjb21tYSgpO31lbHNle2FkdmFuY2UoJyknLHQpO25vc3BhY2UocHJldnRva2VuLHRva2VuKTtyZXR1cm4gcDt9fX0KZnVuY3Rpb24gZG9GdW5jdGlvbihpKXt2YXIgcz1zY29wZTtzY29wZT1PYmplY3QuY3JlYXRlKHMpO2Z1bmN0PXsnKG5hbWUpJzppfHwnIicrYW5vbm5hbWUrJyInLCcobGluZSknOm5leHR0b2tlbi5saW5lLCcoY29udGV4dCknOmZ1bmN0LCcoYnJlYWthZ2UpJzowLCcobG9vcGFnZSknOjAsJyhzY29wZSknOnNjb3BlfTt0b2tlbi5mdW5jdD1mdW5jdDtmdW5jdGlvbnMucHVzaChmdW5jdCk7aWYoaSl7YWRkbGFiZWwoaSwnZnVuY3Rpb24nKTt9CmZ1bmN0WycocGFyYW1zKSddPWZ1bmN0aW9ucGFyYW1zKCk7YmxvY2soZmFsc2UpO3Njb3BlPXM7ZnVuY3RbJyhsYXN0KSddPXRva2VuLmxpbmU7ZnVuY3Q9ZnVuY3RbJyhjb250ZXh0KSddO30KYmxvY2tzdG10KCdmdW5jdGlvbicsZnVuY3Rpb24oKXtpZihpbmJsb2NrKXt3YXJuaW5nKCJGdW5jdGlvbiBzdGF0ZW1lbnRzIGNhbm5vdCBiZSBwbGFjZWQgaW4gYmxvY2tzLiBVc2UgYSBmdW5jdGlvbiBleHByZXNzaW9uIG9yIG1vdmUgdGhlIHN0YXRlbWVudCB0byB0aGUgdG9wIG9mIHRoZSBvdXRlciBmdW5jdGlvbi4iLHRva2VuKTt9CnZhciBpPWlkZW50aWZpZXIoKTthZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO2FkZGxhYmVsKGksJ3VudXNlZCcpO2RvRnVuY3Rpb24oaSk7aWYobmV4dHRva2VuLmlkPT09JygnJiZuZXh0dG9rZW4ubGluZT09PXRva2VuLmxpbmUpe2Vycm9yKCJGdW5jdGlvbiBzdGF0ZW1lbnRzIGFyZSBub3QgaW52b2NhYmxlLiBXcmFwIHRoZSB3aG9sZSBmdW5jdGlvbiBpbnZvY2F0aW9uIGluIHBhcmVucy4iKTt9CnJldHVybiB0aGlzO30pO3ByZWZpeCgnZnVuY3Rpb24nLGZ1bmN0aW9uKCl7dmFyIGk9b3B0aW9uYWxpZGVudGlmaWVyKCk7aWYoaSl7YWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTt9ZWxzZXtub25hZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO30KZG9GdW5jdGlvbihpKTtpZihmdW5jdFsnKGxvb3BhZ2UpJ10mJm5leHR0b2tlbi5pZCE9PScoJyl7d2FybmluZygiQmUgY2FyZWZ1bCB3aGVuIG1ha2luZyBmdW5jdGlvbnMgd2l0aGluIGEgbG9vcC4gQ29uc2lkZXIgcHV0dGluZyB0aGUgZnVuY3Rpb24gaW4gYSBjbG9zdXJlLiIpO30KcmV0dXJuIHRoaXM7fSk7YmxvY2tzdG10KCdpZicsZnVuY3Rpb24oKXt2YXIgdD1uZXh0dG9rZW47YWR2YW5jZSgnKCcpO25vbmFkamFjZW50KHRoaXMsdCk7bm9zcGFjZSgpO3BhcnNlKDIwKTtpZihuZXh0dG9rZW4uaWQ9PT0nPScpe3dhcm5pbmcoIkV4cGVjdGVkIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhbmQgaW5zdGVhZCBzYXcgYW4gYXNzaWdubWVudC4iKTthZHZhbmNlKCc9Jyk7cGFyc2UoMjApO30KYWR2YW5jZSgnKScsdCk7bm9zcGFjZShwcmV2dG9rZW4sdG9rZW4pO2Jsb2NrKHRydWUpO2lmKG5leHR0b2tlbi5pZD09PSdlbHNlJyl7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTthZHZhbmNlKCdlbHNlJyk7aWYobmV4dHRva2VuLmlkPT09J2lmJ3x8bmV4dHRva2VuLmlkPT09J3N3aXRjaCcpe3N0YXRlbWVudCh0cnVlKTt9ZWxzZXtibG9jayh0cnVlKTt9fQpyZXR1cm4gdGhpczt9KTtibG9ja3N0bXQoJ3RyeScsZnVuY3Rpb24oKXt2YXIgYixlLHM7aWYob3B0aW9uLmFkc2FmZSl7d2FybmluZygiQURzYWZlIHRyeSB2aW9sYXRpb24uIix0aGlzKTt9CmJsb2NrKGZhbHNlKTtpZihuZXh0dG9rZW4uaWQ9PT0nY2F0Y2gnKXthZHZhbmNlKCdjYXRjaCcpO25vbmFkamFjZW50KHRva2VuLG5leHR0b2tlbik7YWR2YW5jZSgnKCcpO3M9c2NvcGU7c2NvcGU9T2JqZWN0LmNyZWF0ZShzKTtlPW5leHR0b2tlbi52YWx1ZTtpZihuZXh0dG9rZW4udHlwZSE9PScoaWRlbnRpZmllciknKXt3YXJuaW5nKCJFeHBlY3RlZCBhbiBpZGVudGlmaWVyIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLG5leHR0b2tlbixlKTt9ZWxzZXthZGRsYWJlbChlLCdleGNlcHRpb24nKTt9CmFkdmFuY2UoKTthZHZhbmNlKCcpJyk7YmxvY2soZmFsc2UpO2I9dHJ1ZTtzY29wZT1zO30KaWYobmV4dHRva2VuLmlkPT09J2ZpbmFsbHknKXthZHZhbmNlKCdmaW5hbGx5Jyk7YmxvY2soZmFsc2UpO3JldHVybjt9ZWxzZSBpZighYil7ZXJyb3IoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLG5leHR0b2tlbiwnY2F0Y2gnLG5leHR0b2tlbi52YWx1ZSk7fQpyZXR1cm4gdGhpczt9KTtibG9ja3N0bXQoJ3doaWxlJyxmdW5jdGlvbigpe3ZhciB0PW5leHR0b2tlbjtmdW5jdFsnKGJyZWFrYWdlKSddKz0xO2Z1bmN0WycobG9vcGFnZSknXSs9MTthZHZhbmNlKCcoJyk7bm9uYWRqYWNlbnQodGhpcyx0KTtub3NwYWNlKCk7cGFyc2UoMjApO2lmKG5leHR0b2tlbi5pZD09PSc9Jyl7d2FybmluZygiRXhwZWN0ZWQgYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGFuZCBpbnN0ZWFkIHNhdyBhbiBhc3NpZ25tZW50LiIpO2FkdmFuY2UoJz0nKTtwYXJzZSgyMCk7fQphZHZhbmNlKCcpJyx0KTtub3NwYWNlKHByZXZ0b2tlbix0b2tlbik7YmxvY2sodHJ1ZSk7ZnVuY3RbJyhicmVha2FnZSknXS09MTtmdW5jdFsnKGxvb3BhZ2UpJ10tPTE7cmV0dXJuIHRoaXM7fSkubGFiZWxsZWQ9dHJ1ZTtyZXNlcnZlKCd3aXRoJyk7YmxvY2tzdG10KCdzd2l0Y2gnLGZ1bmN0aW9uKCl7dmFyIHQ9bmV4dHRva2VuLGc9ZmFsc2U7ZnVuY3RbJyhicmVha2FnZSknXSs9MTthZHZhbmNlKCcoJyk7bm9uYWRqYWNlbnQodGhpcyx0KTtub3NwYWNlKCk7dGhpcy5jb25kaXRpb249cGFyc2UoMjApO2FkdmFuY2UoJyknLHQpO25vc3BhY2UocHJldnRva2VuLHRva2VuKTtub25hZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO3Q9bmV4dHRva2VuO2FkdmFuY2UoJ3snKTtub25hZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO2luZGVudCs9b3B0aW9uLmluZGVudDt0aGlzLmNhc2VzPVtdO2Zvcig7Oyl7c3dpdGNoKG5leHR0b2tlbi5pZCl7Y2FzZSdjYXNlJzpzd2l0Y2goZnVuY3RbJyh2ZXJiKSddKXtjYXNlJ2JyZWFrJzpjYXNlJ2Nhc2UnOmNhc2UnY29udGludWUnOmNhc2UncmV0dXJuJzpjYXNlJ3N3aXRjaCc6Y2FzZSd0aHJvdyc6YnJlYWs7ZGVmYXVsdDp3YXJuaW5nKCJFeHBlY3RlZCBhICdicmVhaycgc3RhdGVtZW50IGJlZm9yZSAnY2FzZScuIix0b2tlbik7fQppbmRlbnRhdGlvbigtb3B0aW9uLmluZGVudCk7YWR2YW5jZSgnY2FzZScpO3RoaXMuY2FzZXMucHVzaChwYXJzZSgyMCkpO2c9dHJ1ZTthZHZhbmNlKCc6Jyk7ZnVuY3RbJyh2ZXJiKSddPSdjYXNlJzticmVhaztjYXNlJ2RlZmF1bHQnOnN3aXRjaChmdW5jdFsnKHZlcmIpJ10pe2Nhc2UnYnJlYWsnOmNhc2UnY29udGludWUnOmNhc2UncmV0dXJuJzpjYXNlJ3Rocm93JzpicmVhaztkZWZhdWx0Ondhcm5pbmcoIkV4cGVjdGVkIGEgJ2JyZWFrJyBzdGF0ZW1lbnQgYmVmb3JlICdkZWZhdWx0Jy4iLHRva2VuKTt9CmluZGVudGF0aW9uKC1vcHRpb24uaW5kZW50KTthZHZhbmNlKCdkZWZhdWx0Jyk7Zz10cnVlO2FkdmFuY2UoJzonKTticmVhaztjYXNlJ30nOmluZGVudC09b3B0aW9uLmluZGVudDtpbmRlbnRhdGlvbigpO2FkdmFuY2UoJ30nLHQpO2lmKHRoaXMuY2FzZXMubGVuZ3RoPT09MXx8dGhpcy5jb25kaXRpb24uaWQ9PT0ndHJ1ZSd8fHRoaXMuY29uZGl0aW9uLmlkPT09J2ZhbHNlJyl7d2FybmluZygiVGhpcyAnc3dpdGNoJyBzaG91bGQgYmUgYW4gJ2lmJy4iLHRoaXMpO30KZnVuY3RbJyhicmVha2FnZSknXS09MTtmdW5jdFsnKHZlcmIpJ109dW5kZWZpbmVkO3JldHVybjtjYXNlJyhlbmQpJzplcnJvcigiTWlzc2luZyAne2F9Jy4iLG5leHR0b2tlbiwnfScpO3JldHVybjtkZWZhdWx0OmlmKGcpe3N3aXRjaCh0b2tlbi5pZCl7Y2FzZScsJzplcnJvcigiRWFjaCB2YWx1ZSBzaG91bGQgaGF2ZSBpdHMgb3duIGNhc2UgbGFiZWwuIik7cmV0dXJuO2Nhc2UnOic6c3RhdGVtZW50cygpO2JyZWFrO2RlZmF1bHQ6ZXJyb3IoIk1pc3NpbmcgJzonIG9uIGEgY2FzZSBjbGF1c2UuIix0b2tlbik7fX1lbHNle2Vycm9yKCJFeHBlY3RlZCAne2F9JyBhbmQgaW5zdGVhZCBzYXcgJ3tifScuIixuZXh0dG9rZW4sJ2Nhc2UnLG5leHR0b2tlbi52YWx1ZSk7fX19fSkubGFiZWxsZWQ9dHJ1ZTtzdG10KCdkZWJ1Z2dlcicsZnVuY3Rpb24oKXtpZighb3B0aW9uLmRlYnVnKXt3YXJuaW5nKCJBbGwgJ2RlYnVnZ2VyJyBzdGF0ZW1lbnRzIHNob3VsZCBiZSByZW1vdmVkLiIpO30KcmV0dXJuIHRoaXM7fSkuZXhwcz10cnVlOyhmdW5jdGlvbigpe3ZhciB4PXN0bXQoJ2RvJyxmdW5jdGlvbigpe2Z1bmN0WycoYnJlYWthZ2UpJ10rPTE7ZnVuY3RbJyhsb29wYWdlKSddKz0xO3RoaXMuZmlyc3Q9YmxvY2sodHJ1ZSk7YWR2YW5jZSgnd2hpbGUnKTt2YXIgdD1uZXh0dG9rZW47bm9uYWRqYWNlbnQodG9rZW4sdCk7YWR2YW5jZSgnKCcpO25vc3BhY2UoKTtwYXJzZSgyMCk7aWYobmV4dHRva2VuLmlkPT09Jz0nKXt3YXJuaW5nKCJFeHBlY3RlZCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYW5kIGluc3RlYWQgc2F3IGFuIGFzc2lnbm1lbnQuIik7YWR2YW5jZSgnPScpO3BhcnNlKDIwKTt9CmFkdmFuY2UoJyknLHQpO25vc3BhY2UocHJldnRva2VuLHRva2VuKTtmdW5jdFsnKGJyZWFrYWdlKSddLT0xO2Z1bmN0WycobG9vcGFnZSknXS09MTtyZXR1cm4gdGhpczt9KTt4LmxhYmVsbGVkPXRydWU7eC5leHBzPXRydWU7fSgpKTtibG9ja3N0bXQoJ2ZvcicsZnVuY3Rpb24oKXt2YXIgZj1vcHRpb24uZm9yaW4scyx0PW5leHR0b2tlbjtmdW5jdFsnKGJyZWFrYWdlKSddKz0xO2Z1bmN0WycobG9vcGFnZSknXSs9MTthZHZhbmNlKCcoJyk7bm9uYWRqYWNlbnQodGhpcyx0KTtub3NwYWNlKCk7aWYocGVlayhuZXh0dG9rZW4uaWQ9PT0ndmFyJz8xOjApLmlkPT09J2luJyl7aWYobmV4dHRva2VuLmlkPT09J3Zhcicpe2FkdmFuY2UoJ3ZhcicpO3ZhcnN0YXRlbWVudCh0cnVlKTt9ZWxzZXtzd2l0Y2goZnVuY3RbbmV4dHRva2VuLnZhbHVlXSl7Y2FzZSd1bnVzZWQnOmZ1bmN0W25leHR0b2tlbi52YWx1ZV09J3Zhcic7YnJlYWs7Y2FzZSd2YXInOmJyZWFrO2RlZmF1bHQ6d2FybmluZygiQmFkIGZvciBpbiB2YXJpYWJsZSAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO30KYWR2YW5jZSgpO30KYWR2YW5jZSgnaW4nKTtwYXJzZSgyMCk7YWR2YW5jZSgnKScsdCk7cz1ibG9jayh0cnVlKTtpZighZiYmKHMubGVuZ3RoPjF8fHR5cGVvZiBzWzBdIT09J29iamVjdCd8fHNbMF0udmFsdWUhPT0naWYnKSl7d2FybmluZygiVGhlIGJvZHkgb2YgYSBmb3IgaW4gc2hvdWxkIGJlIHdyYXBwZWQgaW4gYW4gaWYgc3RhdGVtZW50IHRvIGZpbHRlciB1bndhbnRlZCBwcm9wZXJ0aWVzIGZyb20gdGhlIHByb3RvdHlwZS4iLHRoaXMpO30KZnVuY3RbJyhicmVha2FnZSknXS09MTtmdW5jdFsnKGxvb3BhZ2UpJ10tPTE7cmV0dXJuIHRoaXM7fWVsc2V7aWYobmV4dHRva2VuLmlkIT09JzsnKXtpZihuZXh0dG9rZW4uaWQ9PT0ndmFyJyl7YWR2YW5jZSgndmFyJyk7dmFyc3RhdGVtZW50KCk7fWVsc2V7Zm9yKDs7KXtwYXJzZSgwLCdmb3InKTtpZihuZXh0dG9rZW4uaWQhPT0nLCcpe2JyZWFrO30KY29tbWEoKTt9fX0Kbm9saW5lYnJlYWsodG9rZW4pO2FkdmFuY2UoJzsnKTtpZihuZXh0dG9rZW4uaWQhPT0nOycpe3BhcnNlKDIwKTtpZihuZXh0dG9rZW4uaWQ9PT0nPScpe3dhcm5pbmcoIkV4cGVjdGVkIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhbmQgaW5zdGVhZCBzYXcgYW4gYXNzaWdubWVudC4iKTthZHZhbmNlKCc9Jyk7cGFyc2UoMjApO319Cm5vbGluZWJyZWFrKHRva2VuKTthZHZhbmNlKCc7Jyk7aWYobmV4dHRva2VuLmlkPT09JzsnKXtlcnJvcigiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsbmV4dHRva2VuLCcpJywnOycpO30KaWYobmV4dHRva2VuLmlkIT09JyknKXtmb3IoOzspe3BhcnNlKDAsJ2ZvcicpO2lmKG5leHR0b2tlbi5pZCE9PScsJyl7YnJlYWs7fQpjb21tYSgpO319CmFkdmFuY2UoJyknLHQpO25vc3BhY2UocHJldnRva2VuLHRva2VuKTtibG9jayh0cnVlKTtmdW5jdFsnKGJyZWFrYWdlKSddLT0xO2Z1bmN0WycobG9vcGFnZSknXS09MTtyZXR1cm4gdGhpczt9fSkubGFiZWxsZWQ9dHJ1ZTtzdG10KCdicmVhaycsZnVuY3Rpb24oKXt2YXIgdj1uZXh0dG9rZW4udmFsdWU7aWYoZnVuY3RbJyhicmVha2FnZSknXT09PTApe3dhcm5pbmcoIlVuZXhwZWN0ZWQgJ3thfScuIixuZXh0dG9rZW4sdGhpcy52YWx1ZSk7fQpub2xpbmVicmVhayh0aGlzKTtpZihuZXh0dG9rZW4uaWQhPT0nOycpe2lmKHRva2VuLmxpbmU9PT1uZXh0dG9rZW4ubGluZSl7aWYoZnVuY3Rbdl0hPT0nbGFiZWwnKXt3YXJuaW5nKCIne2F9JyBpcyBub3QgYSBzdGF0ZW1lbnQgbGFiZWwuIixuZXh0dG9rZW4sdik7fWVsc2UgaWYoc2NvcGVbdl0hPT1mdW5jdCl7d2FybmluZygiJ3thfScgaXMgb3V0IG9mIHNjb3BlLiIsbmV4dHRva2VuLHYpO30KdGhpcy5maXJzdD1uZXh0dG9rZW47YWR2YW5jZSgpO319CnJlYWNoYWJsZSgnYnJlYWsnKTtyZXR1cm4gdGhpczt9KS5leHBzPXRydWU7c3RtdCgnY29udGludWUnLGZ1bmN0aW9uKCl7dmFyIHY9bmV4dHRva2VuLnZhbHVlO2lmKGZ1bmN0WycoYnJlYWthZ2UpJ109PT0wKXt3YXJuaW5nKCJVbmV4cGVjdGVkICd7YX0nLiIsbmV4dHRva2VuLHRoaXMudmFsdWUpO30Kbm9saW5lYnJlYWsodGhpcyk7aWYobmV4dHRva2VuLmlkIT09JzsnKXtpZih0b2tlbi5saW5lPT09bmV4dHRva2VuLmxpbmUpe2lmKGZ1bmN0W3ZdIT09J2xhYmVsJyl7d2FybmluZygiJ3thfScgaXMgbm90IGEgc3RhdGVtZW50IGxhYmVsLiIsbmV4dHRva2VuLHYpO31lbHNlIGlmKHNjb3BlW3ZdIT09ZnVuY3Qpe3dhcm5pbmcoIid7YX0nIGlzIG91dCBvZiBzY29wZS4iLG5leHR0b2tlbix2KTt9CnRoaXMuZmlyc3Q9bmV4dHRva2VuO2FkdmFuY2UoKTt9fQpyZWFjaGFibGUoJ2NvbnRpbnVlJyk7cmV0dXJuIHRoaXM7fSkuZXhwcz10cnVlO3N0bXQoJ3JldHVybicsZnVuY3Rpb24oKXtub2xpbmVicmVhayh0aGlzKTtpZihuZXh0dG9rZW4uaWQ9PT0nKHJlZ2V4cCknKXt3YXJuaW5nKCJXcmFwIHRoZSAvcmVnZXhwLyBsaXRlcmFsIGluIHBhcmVucyB0byBkaXNhbWJpZ3VhdGUgdGhlIHNsYXNoIG9wZXJhdG9yLiIpO30KaWYobmV4dHRva2VuLmlkIT09JzsnJiYhbmV4dHRva2VuLnJlYWNoKXtub25hZGphY2VudCh0b2tlbixuZXh0dG9rZW4pO3RoaXMuZmlyc3Q9cGFyc2UoMjApO30KcmVhY2hhYmxlKCdyZXR1cm4nKTtyZXR1cm4gdGhpczt9KS5leHBzPXRydWU7c3RtdCgndGhyb3cnLGZ1bmN0aW9uKCl7bm9saW5lYnJlYWsodGhpcyk7bm9uYWRqYWNlbnQodG9rZW4sbmV4dHRva2VuKTt0aGlzLmZpcnN0PXBhcnNlKDIwKTtyZWFjaGFibGUoJ3Rocm93Jyk7cmV0dXJuIHRoaXM7fSkuZXhwcz10cnVlO3Jlc2VydmUoJ3ZvaWQnKTtyZXNlcnZlKCdjbGFzcycpO3Jlc2VydmUoJ2NvbnN0Jyk7cmVzZXJ2ZSgnZW51bScpO3Jlc2VydmUoJ2V4cG9ydCcpO3Jlc2VydmUoJ2V4dGVuZHMnKTtyZXNlcnZlKCdpbXBvcnQnKTtyZXNlcnZlKCdzdXBlcicpO3Jlc2VydmUoJ2xldCcpO3Jlc2VydmUoJ3lpZWxkJyk7cmVzZXJ2ZSgnaW1wbGVtZW50cycpO3Jlc2VydmUoJ2ludGVyZmFjZScpO3Jlc2VydmUoJ3BhY2thZ2UnKTtyZXNlcnZlKCdwcml2YXRlJyk7cmVzZXJ2ZSgncHJvdGVjdGVkJyk7cmVzZXJ2ZSgncHVibGljJyk7cmVzZXJ2ZSgnc3RhdGljJyk7ZnVuY3Rpb24ganNvblZhbHVlKCl7ZnVuY3Rpb24ganNvbk9iamVjdCgpe3ZhciBvPXt9LHQ9bmV4dHRva2VuO2FkdmFuY2UoJ3snKTtpZihuZXh0dG9rZW4uaWQhPT0nfScpe2Zvcig7Oyl7aWYobmV4dHRva2VuLmlkPT09JyhlbmQpJyl7ZXJyb3IoIk1pc3NpbmcgJ30nIHRvIG1hdGNoICd7JyBmcm9tIGxpbmUge2F9LiIsbmV4dHRva2VuLHQubGluZSk7fWVsc2UgaWYobmV4dHRva2VuLmlkPT09J30nKXt3YXJuaW5nKCJVbmV4cGVjdGVkIGNvbW1hLiIsdG9rZW4pO2JyZWFrO31lbHNlIGlmKG5leHR0b2tlbi5pZD09PScsJyl7ZXJyb3IoIlVuZXhwZWN0ZWQgY29tbWEuIixuZXh0dG9rZW4pO31lbHNlIGlmKG5leHR0b2tlbi5pZCE9PScoc3RyaW5nKScpe3dhcm5pbmcoIkV4cGVjdGVkIGEgc3RyaW5nIGFuZCBpbnN0ZWFkIHNhdyB7YX0uIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9CmlmKG9bbmV4dHRva2VuLnZhbHVlXT09PXRydWUpe3dhcm5pbmcoIkR1cGxpY2F0ZSBrZXkgJ3thfScuIixuZXh0dG9rZW4sbmV4dHRva2VuLnZhbHVlKTt9ZWxzZSBpZihuZXh0dG9rZW4udmFsdWU9PT0nX19wcm90b19fJyl7d2FybmluZygiU3R1cGlkIGtleSAne2F9Jy4iLG5leHR0b2tlbixuZXh0dG9rZW4udmFsdWUpO31lbHNle29bbmV4dHRva2VuLnZhbHVlXT10cnVlO30KYWR2YW5jZSgpO2FkdmFuY2UoJzonKTtqc29uVmFsdWUoKTtpZihuZXh0dG9rZW4uaWQhPT0nLCcpe2JyZWFrO30KYWR2YW5jZSgnLCcpO319CmFkdmFuY2UoJ30nKTt9CmZ1bmN0aW9uIGpzb25BcnJheSgpe3ZhciB0PW5leHR0b2tlbjthZHZhbmNlKCdbJyk7aWYobmV4dHRva2VuLmlkIT09J10nKXtmb3IoOzspe2lmKG5leHR0b2tlbi5pZD09PScoZW5kKScpe2Vycm9yKCJNaXNzaW5nICddJyB0byBtYXRjaCAnWycgZnJvbSBsaW5lIHthfS4iLG5leHR0b2tlbix0LmxpbmUpO31lbHNlIGlmKG5leHR0b2tlbi5pZD09PSddJyl7d2FybmluZygiVW5leHBlY3RlZCBjb21tYS4iLHRva2VuKTticmVhazt9ZWxzZSBpZihuZXh0dG9rZW4uaWQ9PT0nLCcpe2Vycm9yKCJVbmV4cGVjdGVkIGNvbW1hLiIsbmV4dHRva2VuKTt9Cmpzb25WYWx1ZSgpO2lmKG5leHR0b2tlbi5pZCE9PScsJyl7YnJlYWs7fQphZHZhbmNlKCcsJyk7fX0KYWR2YW5jZSgnXScpO30Kc3dpdGNoKG5leHR0b2tlbi5pZCl7Y2FzZSd7Jzpqc29uT2JqZWN0KCk7YnJlYWs7Y2FzZSdbJzpqc29uQXJyYXkoKTticmVhaztjYXNlJ3RydWUnOmNhc2UnZmFsc2UnOmNhc2UnbnVsbCc6Y2FzZScobnVtYmVyKSc6Y2FzZScoc3RyaW5nKSc6YWR2YW5jZSgpO2JyZWFrO2Nhc2UnLSc6YWR2YW5jZSgnLScpO2lmKHRva2VuLmNoYXJhY3RlciE9PW5leHR0b2tlbi5mcm9tKXt3YXJuaW5nKCJVbmV4cGVjdGVkIHNwYWNlIGFmdGVyICctJy4iLHRva2VuKTt9CmFkamFjZW50KHRva2VuLG5leHR0b2tlbik7YWR2YW5jZSgnKG51bWJlciknKTticmVhaztkZWZhdWx0OmVycm9yKCJFeHBlY3RlZCBhIEpTT04gdmFsdWUuIixuZXh0dG9rZW4pO319CnZhciBpdHNlbGY9ZnVuY3Rpb24ocyxvKXt2YXIgYSxpO0pTTElOVC5lcnJvcnM9W107cHJlZGVmaW5lZD1PYmplY3QuY3JlYXRlKHN0YW5kYXJkKTtpZihvKXthPW8ucHJlZGVmO2lmKGEgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKGk9MDtpPGEubGVuZ3RoO2krPTEpe3ByZWRlZmluZWRbYVtpXV09dHJ1ZTt9fQppZihvLmFkc2FmZSl7by5zYWZlPXRydWU7fQppZihvLnNhZmUpe28uYnJvd3Nlcj1mYWxzZTtvLmNzcz1mYWxzZTtvLmRlYnVnPWZhbHNlO28uZGV2ZWw9ZmFsc2U7by5lcWVxZXE9dHJ1ZTtvLmV2aWw9ZmFsc2U7by5mb3Jpbj1mYWxzZTtvLm5vbWVuPXRydWU7by5vbj1mYWxzZTtvLnJoaW5vPWZhbHNlO28uc2FmZT10cnVlO28uc2lkZWJhcj1mYWxzZTtvLnN0cmljdD10cnVlO28uc3ViPWZhbHNlO28udW5kZWY9dHJ1ZTtvLndpZGdldD1mYWxzZTtwcmVkZWZpbmVkLkRhdGU9bnVsbDtwcmVkZWZpbmVkWydldmFsJ109bnVsbDtwcmVkZWZpbmVkLkZ1bmN0aW9uPW51bGw7cHJlZGVmaW5lZC5PYmplY3Q9bnVsbDtwcmVkZWZpbmVkLkFEU0FGRT1mYWxzZTtwcmVkZWZpbmVkLmxpYj1mYWxzZTt9Cm9wdGlvbj1vO31lbHNle29wdGlvbj17fTt9Cm9wdGlvbi5pbmRlbnQ9b3B0aW9uLmluZGVudHx8NDtvcHRpb24ubWF4ZXJyPW9wdGlvbi5tYXhlcnJ8fDUwO2Fkc2FmZV9pZD0nJzthZHNhZmVfbWF5PWZhbHNlO2Fkc2FmZV93ZW50PWZhbHNlO2FwcHJvdmVkPXt9O2lmKG9wdGlvbi5hcHByb3ZlZCl7Zm9yKGk9MDtpPG9wdGlvbi5hcHByb3ZlZC5sZW5ndGg7aSs9MSl7YXBwcm92ZWRbb3B0aW9uLmFwcHJvdmVkW2ldXT1vcHRpb24uYXBwcm92ZWRbaV07fX1lbHNle2FwcHJvdmVkLnRlc3Q9J3Rlc3QnO30KdGFiPScnO2ZvcihpPTA7aTxvcHRpb24uaW5kZW50O2krPTEpe3RhYis9JyAnO30KaW5kZW50PTE7Z2xvYmFsPU9iamVjdC5jcmVhdGUocHJlZGVmaW5lZCk7c2NvcGU9Z2xvYmFsO2Z1bmN0PXsnKGdsb2JhbCknOnRydWUsJyhuYW1lKSc6JyhnbG9iYWwpJywnKHNjb3BlKSc6c2NvcGUsJyhicmVha2FnZSknOjAsJyhsb29wYWdlKSc6MH07ZnVuY3Rpb25zPVtmdW5jdF07aWRzPXt9O3VybHM9W107c3JjPWZhbHNlO3htb2RlPWZhbHNlO3N0YWNrPW51bGw7bWVtYmVyPXt9O21lbWJlcnNPbmx5PW51bGw7aW1wbGllZD17fTtpbmJsb2NrPWZhbHNlO2xvb2thaGVhZD1bXTtqc29ubW9kZT1mYWxzZTt3YXJuaW5ncz0wO2xleC5pbml0KHMpO3ByZXJlZz10cnVlO3N0cmljdF9tb2RlPWZhbHNlO3ByZXZ0b2tlbj10b2tlbj1uZXh0dG9rZW49c3ludGF4WycoYmVnaW4pJ107YXNzdW1lKCk7dHJ5e2FkdmFuY2UoKTtpZihuZXh0dG9rZW4udmFsdWUuY2hhckF0KDApPT09JzwnKXtodG1sKCk7aWYob3B0aW9uLmFkc2FmZSYmIWFkc2FmZV93ZW50KXt3YXJuaW5nKCJBRHNhZmUgdmlvbGF0aW9uOiBNaXNzaW5nIEFEU0FGRS5nby4iLHRoaXMpO319ZWxzZXtzd2l0Y2gobmV4dHRva2VuLmlkKXtjYXNlJ3snOmNhc2UnWyc6b3B0aW9uLmxheGJyZWFrPXRydWU7anNvbm1vZGU9dHJ1ZTtqc29uVmFsdWUoKTticmVhaztjYXNlJ0AnOmNhc2UnKic6Y2FzZScjJzpjYXNlJy4nOmNhc2UnOic6eG1vZGU9J3N0eWxlJzthZHZhbmNlKCk7aWYodG9rZW4uaWQhPT0nQCd8fCFuZXh0dG9rZW4uaWRlbnRpZmllcnx8bmV4dHRva2VuLnZhbHVlIT09J2NoYXJzZXQnfHx0b2tlbi5saW5lIT09MXx8dG9rZW4uZnJvbSE9PTEpe2Vycm9yKCdBIGNzcyBmaWxlIHNob3VsZCBiZWdpbiB3aXRoIEBjaGFyc2V0ICJVVEYtOCI7Jyk7fQphZHZhbmNlKCk7aWYobmV4dHRva2VuLnR5cGUhPT0nKHN0cmluZyknJiZuZXh0dG9rZW4udmFsdWUhPT0nVVRGLTgnKXtlcnJvcignQSBjc3MgZmlsZSBzaG91bGQgYmVnaW4gd2l0aCBAY2hhcnNldCAiVVRGLTgiOycpO30KYWR2YW5jZSgpO2FkdmFuY2UoJzsnKTtzdHlsZXMoKTticmVhaztkZWZhdWx0OmlmKG9wdGlvbi5hZHNhZmUmJm9wdGlvbi5mcmFnbWVudCl7ZXJyb3IoIkV4cGVjdGVkICd7YX0nIGFuZCBpbnN0ZWFkIHNhdyAne2J9Jy4iLG5leHR0b2tlbiwnPGRpdj4nLG5leHR0b2tlbi52YWx1ZSk7fQpzdGF0ZW1lbnRzKCdsaWInKTt9fQphZHZhbmNlKCcoZW5kKScpO31jYXRjaChlKXtpZihlKXtKU0xJTlQuZXJyb3JzLnB1c2goe3JlYXNvbjplLm1lc3NhZ2UsbGluZTplLmxpbmV8fG5leHR0b2tlbi5saW5lLGNoYXJhY3RlcjplLmNoYXJhY3Rlcnx8bmV4dHRva2VuLmZyb219LG51bGwpO319CnJldHVybiBKU0xJTlQuZXJyb3JzLmxlbmd0aD09PTA7fTtmdW5jdGlvbiBpc19hcnJheShvKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShvKT09PSdbb2JqZWN0IEFycmF5XSc7fQpmdW5jdGlvbiB0b19hcnJheShvKXt2YXIgYT1bXSxrO2ZvcihrIGluIG8pe2lmKGlzX293bihvLGspKXthLnB1c2goayk7fX0KcmV0dXJuIGE7fQppdHNlbGYuZGF0YT1mdW5jdGlvbigpe3ZhciBkYXRhPXtmdW5jdGlvbnM6W119LGZ1LGdsb2JhbHMsaW1wbGllZHM9W10sZixpLGosbWVtYmVycz1bXSxuLHVudXNlZD1bXSx2O2lmKGl0c2VsZi5lcnJvcnMubGVuZ3RoKXtkYXRhLmVycm9ycz1pdHNlbGYuZXJyb3JzO30KaWYoanNvbm1vZGUpe2RhdGEuanNvbj10cnVlO30KZm9yKG4gaW4gaW1wbGllZCl7aWYoaXNfb3duKGltcGxpZWQsbikpe2ltcGxpZWRzLnB1c2goe25hbWU6bixsaW5lOmltcGxpZWRbbl19KTt9fQppZihpbXBsaWVkcy5sZW5ndGg+MCl7ZGF0YS5pbXBsaWVkcz1pbXBsaWVkczt9CmlmKHVybHMubGVuZ3RoPjApe2RhdGEudXJscz11cmxzO30KZ2xvYmFscz10b19hcnJheShzY29wZSk7aWYoZ2xvYmFscy5sZW5ndGg+MCl7ZGF0YS5nbG9iYWxzPWdsb2JhbHM7fQpmb3IoaT0xO2k8ZnVuY3Rpb25zLmxlbmd0aDtpKz0xKXtmPWZ1bmN0aW9uc1tpXTtmdT17fTtmb3Ioaj0wO2o8ZnVuY3Rpb25pY2l0eS5sZW5ndGg7ais9MSl7ZnVbZnVuY3Rpb25pY2l0eVtqXV09W107fQpmb3IobiBpbiBmKXtpZihpc19vd24oZixuKSYmbi5jaGFyQXQoMCkhPT0nKCcpe3Y9ZltuXTtpZihpc19hcnJheShmdVt2XSkpe2Z1W3ZdLnB1c2gobik7aWYodj09PSd1bnVzZWQnKXt1bnVzZWQucHVzaCh7bmFtZTpuLGxpbmU6ZlsnKGxpbmUpJ10sJ2Z1bmN0aW9uJzpmWycobmFtZSknXX0pO319fX0KZm9yKGo9MDtqPGZ1bmN0aW9uaWNpdHkubGVuZ3RoO2orPTEpe2lmKGZ1W2Z1bmN0aW9uaWNpdHlbal1dLmxlbmd0aD09PTApe2RlbGV0ZSBmdVtmdW5jdGlvbmljaXR5W2pdXTt9fQpmdS5uYW1lPWZbJyhuYW1lKSddO2Z1LnBhcmFtPWZbJyhwYXJhbXMpJ107ZnUubGluZT1mWycobGluZSknXTtmdS5sYXN0PWZbJyhsYXN0KSddO2RhdGEuZnVuY3Rpb25zLnB1c2goZnUpO30KaWYodW51c2VkLmxlbmd0aD4wKXtkYXRhLnVudXNlZD11bnVzZWQ7fQptZW1iZXJzPVtdO2ZvcihuIGluIG1lbWJlcil7aWYodHlwZW9mIG1lbWJlcltuXT09PSdudW1iZXInKXtkYXRhLm1lbWJlcj1tZW1iZXI7YnJlYWs7fX0KcmV0dXJuIGRhdGE7fTtpdHNlbGYucmVwb3J0PWZ1bmN0aW9uKG9wdGlvbil7dmFyIGRhdGE9aXRzZWxmLmRhdGEoKTt2YXIgYT1bXSxjLGUsZXJyLGYsaSxrLGwsbT0nJyxuLG89W10scztmdW5jdGlvbiBkZXRhaWwoaCxhcnJheSl7dmFyIGIsaSxzaW5ndWxhcml0eTtpZihhcnJheSl7by5wdXNoKCc8ZGl2PjxpPicraCsnPC9pPiAnKTthcnJheT1hcnJheS5zb3J0KCk7Zm9yKGk9MDtpPGFycmF5Lmxlbmd0aDtpKz0xKXtpZihhcnJheVtpXSE9PXNpbmd1bGFyaXR5KXtzaW5ndWxhcml0eT1hcnJheVtpXTtvLnB1c2goKGI/JywgJzonJykrc2luZ3VsYXJpdHkpO2I9dHJ1ZTt9fQpvLnB1c2goJzwvZGl2PicpO319CmlmKGRhdGEuZXJyb3JzfHxkYXRhLmltcGxpZWRzfHxkYXRhLnVudXNlZCl7ZXJyPXRydWU7by5wdXNoKCc8ZGl2IGlkPWVycm9ycz48aT5FcnJvcjo8L2k+Jyk7aWYoZGF0YS5lcnJvcnMpe2ZvcihpPTA7aTxkYXRhLmVycm9ycy5sZW5ndGg7aSs9MSl7Yz1kYXRhLmVycm9yc1tpXTtpZihjKXtlPWMuZXZpZGVuY2V8fCcnO28ucHVzaCgnPHA+UHJvYmxlbScrKGlzRmluaXRlKGMubGluZSk/JyBhdCBsaW5lICcrCmMubGluZSsnIGNoYXJhY3RlciAnK2MuY2hhcmFjdGVyOicnKSsnOiAnK2MucmVhc29uLmVudGl0eWlmeSgpKyc8L3A+PHAgY2xhc3M9ZXZpZGVuY2U+JysKKGUmJihlLmxlbmd0aD44MD9lLnNsaWNlKDAsNzcpKycuLi4nOmUpLmVudGl0eWlmeSgpKSsnPC9wPicpO319fQppZihkYXRhLmltcGxpZWRzKXtzPVtdO2ZvcihpPTA7aTxkYXRhLmltcGxpZWRzLmxlbmd0aDtpKz0xKXtzW2ldPSc8Y29kZT4nK2RhdGEuaW1wbGllZHNbaV0ubmFtZSsnPC9jb2RlPiZuYnNwOzxpPicrCmRhdGEuaW1wbGllZHNbaV0ubGluZSsnPC9pPic7fQpvLnB1c2goJzxwPjxpPkltcGxpZWQgZ2xvYmFsOjwvaT4gJytzLmpvaW4oJywgJykrJzwvcD4nKTt9CmlmKGRhdGEudW51c2VkKXtzPVtdO2ZvcihpPTA7aTxkYXRhLnVudXNlZC5sZW5ndGg7aSs9MSl7c1tpXT0nPGNvZGU+PHU+JytkYXRhLnVudXNlZFtpXS5uYW1lKyc8L3U+PC9jb2RlPiZuYnNwOzxpPicrCmRhdGEudW51c2VkW2ldLmxpbmUrJzwvaT4gPGNvZGU+JysKZGF0YS51bnVzZWRbaV1bJ2Z1bmN0aW9uJ10rJzwvY29kZT4nO30Kby5wdXNoKCc8cD48aT5VbnVzZWQgdmFyaWFibGU6PC9pPiAnK3Muam9pbignLCAnKSsnPC9wPicpO30KaWYoZGF0YS5qc29uKXtvLnB1c2goJzxwPkpTT046IGJhZC48L3A+Jyk7fQpvLnB1c2goJzwvZGl2PicpO30KaWYoIW9wdGlvbil7by5wdXNoKCc8YnI+PGRpdiBpZD1mdW5jdGlvbnM+Jyk7aWYoZGF0YS51cmxzKXtkZXRhaWwoIlVSTHM8YnI+IixkYXRhLnVybHMsJzxicj4nKTt9CmlmKHhtb2RlPT09J3N0eWxlJyl7by5wdXNoKCc8cD5DU1MuPC9wPicpO31lbHNlIGlmKGRhdGEuanNvbiYmIWVycil7by5wdXNoKCc8cD5KU09OOiBnb29kLjwvcD4nKTt9ZWxzZSBpZihkYXRhLmdsb2JhbHMpe28ucHVzaCgnPGRpdj48aT5HbG9iYWw8L2k+ICcrCmRhdGEuZ2xvYmFscy5zb3J0KCkuam9pbignLCAnKSsnPC9kaXY+Jyk7fWVsc2V7by5wdXNoKCc8ZGl2PjxpPk5vIG5ldyBnbG9iYWwgdmFyaWFibGVzIGludHJvZHVjZWQuPC9pPjwvZGl2PicpO30KZm9yKGk9MDtpPGRhdGEuZnVuY3Rpb25zLmxlbmd0aDtpKz0xKXtmPWRhdGEuZnVuY3Rpb25zW2ldO28ucHVzaCgnPGJyPjxkaXYgY2xhc3M9ZnVuY3Rpb24+PGk+JytmLmxpbmUrJy0nKwpmLmxhc3QrJzwvaT4gJysoZi5uYW1lfHwnJykrJygnKwooZi5wYXJhbT9mLnBhcmFtLmpvaW4oJywgJyk6JycpKycpPC9kaXY+Jyk7ZGV0YWlsKCc8YmlnPjxiPlVudXNlZDwvYj48L2JpZz4nLGYudW51c2VkKTtkZXRhaWwoJ0Nsb3N1cmUnLGYuY2xvc3VyZSk7ZGV0YWlsKCdWYXJpYWJsZScsZlsndmFyJ10pO2RldGFpbCgnRXhjZXB0aW9uJyxmLmV4Y2VwdGlvbik7ZGV0YWlsKCdPdXRlcicsZi5vdXRlcik7ZGV0YWlsKCdHbG9iYWwnLGYuZ2xvYmFsKTtkZXRhaWwoJ0xhYmVsJyxmLmxhYmVsKTt9CmlmKGRhdGEubWVtYmVyKXthPXRvX2FycmF5KGRhdGEubWVtYmVyKTtpZihhLmxlbmd0aCl7YT1hLnNvcnQoKTttPSc8YnI+PHByZSBpZD1tZW1iZXJzPi8qbWVtYmVycyAnO2w9MTA7Zm9yKGk9MDtpPGEubGVuZ3RoO2krPTEpe2s9YVtpXTtuPWsubmFtZSgpO2lmKGwrbi5sZW5ndGg+NzIpe28ucHVzaChtKyc8YnI+Jyk7bT0nICAgICc7bD0xO30KbCs9bi5sZW5ndGgrMjtpZihkYXRhLm1lbWJlcltrXT09PTEpe249JzxpPicrbisnPC9pPic7fQppZihpPGEubGVuZ3RoLTEpe24rPScsICc7fQptKz1uO30Kby5wdXNoKG0rJzxicj4qLzwvcHJlPicpO30Kby5wdXNoKCc8L2Rpdj4nKTt9fQpyZXR1cm4gby5qb2luKCcnKTt9O2l0c2VsZi5qc2xpbnQ9aXRzZWxmO2l0c2VsZi5lZGl0aW9uPScyMDEwLTAxLTEyJztyZXR1cm4gaXRzZWxmO30oKSk7
LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEZyZWQgQ1NTCiAqLwoKLkRldmVsRnJlZENvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDMzcHg7CiAgICByaWdodDogMTZweDsKICAgIHotaW5kZXg6IDUwMDA7Cn0KCi5EZXZlbEZyZWRDb250YWluZXI6aG92ZXIgewogICAgLXdlYmtpdC1vcGFjaXR5OiAxLjAgIWltcG9ydGFudDsKICAgIC1tb3otb3BhY2l0eTogMS4wICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAxLjAgIWltcG9ydGFudDsKfQoKLkRldmVsRnJlZEJveCB7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAxcHggM3B4ICM3Nzc7CiAgICAtbW96LWJveC1zaGFkb3c6IDFweCAxcHggM3B4ICM3Nzc7CiAgICAtbXMtYm94LXNoYWRvdzogMXB4IDFweCAzcHggIzc3NzsKICAgIC1vLWJveC1zaGFkb3c6IDFweCAxcHggM3B4ICM3Nzc7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDNweCAjNzc3OwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKfQoKLkRldmVsRnJlZEJveENvbnRlbnQgewogICAgbWF4LWhlaWdodDogMTUwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICAgIGJvcmRlci10b3A6IDBweDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5EZXZlbEZyZWRCb3hDb250ZW50LkV4cGFuZGVkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouRGV2ZWxGcmVkQm94Q29udGVudCAuRnJlZFF1aWNrU2VhcmNoIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOwogICAgcGFkZGluZzogNXB4OwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggM3B4ICM3NzcsIGluc2V0IC0xcHggLTFweCAzcHggIzc3NzsKICAgIC1tcy1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICAtby1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5EZXZlbEZyZWRCb3hDb250ZW50IC5GcmVkUXVpY2tTZWFyY2ggaW5wdXQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogOTglOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLkRldmVsRnJlZEJveENvbnRlbnQgLkZyZWRRdWlja1NlYXJjaCBpIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAyLjUlOwogICAgdG9wOiA5cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogI2NjYzsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLkRldmVsRnJlZEJveENvbnRlbnQgLkZyZWRRdWlja1NlYXJjaDpob3ZlciBpIHsKICAgIGNvbG9yOiAjMzMzOwp9CgouRGV2ZWxGcmVkQm94IC5zdHJvbmcsCi5EZXZlbEZyZWRCb3ggLnN0cm9uZyAqIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouRGV2ZWxGcmVkQm94IGgxIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTU1NjU7CiAgICBjb2xvcjogI2ZmZjsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogNnB4IDdweDsKICAgIGN1cnNvcjogbW92ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5EZXZlbEZyZWRCb3guRXhwYW5kZWQgaDEgewogICAgYmFja2dyb3VuZDogIzI1NTU2NTsKfQoKLkRldmVsRnJlZEJveC5Db2xsYXBzZWQgaDEgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzg4ODsKfQoKLkRldmVsRnJlZEJveCBoMSAuRnJlZFRvb2xCYXIgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgouRGV2ZWxGcmVkQm94IGgxIC5GcmVkVG9vbEJhciBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9CgojRnJlZEpTTGludFNjcmlwdHMgewogICAgcGFkZGluZzogNXB4Owp9CgouRnJlZEpTTGludFN1Y2Nlc3NmdWwgewogICAgY29sb3I6IGdyZWVuOwp9CgouRnJlZEpTTGludEVycm9yIHsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKYm9keSAjRnJlZEhUTUxDaGVja1Jlc3VsdHMgcCAsCmJvZHkgI0ZyZWRIVE1MQ2hlY2tSZXN1bHRzIHByZSwKYm9keSAjRnJlZEpTTGludFNjcmlwdHMgcCAsCmJvZHkgI0ZyZWRKU0xpbnRTY3JpcHRzIHByZSB7CiAgICBtYXJnaW46IDBweDsKICAgIHBhZGRpbmc6IDBweDsKfQoKLkRldmVsRnJlZFNldHRpbmdzIHsKICAgIHBhZGRpbmc6IDE1cHg7Cn0KCi5EZXZlbEZyZWRTZXR0aW5ncyBoMSB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBtYXJnaW46IDBweCAwcHggMTBweCAwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5EZXZlbEZyZWRTZXR0aW5ncyB1bCB7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgLkNhbGxGb3JBY3Rpb24gewogICAgbWFyZ2luOiAwcHggYXV0bzsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgbGkgewogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgbGkgc3BhbiB7CiAgICBjb2xvcjogIzc3Nzc3NzsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgcGFkZGluZy1sZWZ0OiAyM3B4OwogICAgbWFyZ2luLWJvdHRvbTogM3B4OwogICAgbGluZS1oZWlnaHQ6IDEzMCU7Cn0KCi5EZXZlbEZyZWRTZXR0aW5ncyBsaSBsYWJlbCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBhZGRpbmc6IDNweCAyMHB4IDNweCA1cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgbGk6aG92ZXIgbGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKfQoKLkRldmVsRnJlZFNldHRpbmdzIGxpIGEgewogICAgY29sb3I6ICMwMDA7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogNnB4OwogICAgdG9wOiA2cHg7CiAgICBmb250LXNpemU6IDEzcHg7Cn0KCnRhYmxlLkZyZWRUYWJsZURlZmF1bHQgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwp9Cgp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRoIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRkLAp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRoIHsKICAgIHBhZGRpbmc6IDVweCA1cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7Cn0KCnRhYmxlLkZyZWRUYWJsZURlZmF1bHQgdGggewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2FhYTsKfQoKdGFibGUuRnJlZFRhYmxlRGVmYXVsdCB0cjpudGgtY2hpbGQob2RkKSB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwp9Cgp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRyOmxhc3QtY2hpbGQgdGQgewogICAgYm9yZGVyLWJvdHRvbTogMHB4Owp9CgouRGV2ZWxGcmVkQm94IC5GcmVkRWxlbWVudExpc3QgewogICAgcGFkZGluZzogNXB4IDNweCAwcHggNXB4Owp9CgouRnJlZEVsZW1lbnRMaXN0IHNwYW4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogM3B4IDVweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgbWFyZ2luOiAwcHggM3B4IDVweCAwcHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OwogICAgLW1zLWJvcmRlci1yYWRpdXM6IDNweDsKICAgIC1vLWJvcmRlci1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5GcmVkRWxlbWVudExpc3Qgc3BhbiBpIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRvcDogMXB4Owp9CgouRnJlZEVsZW1lbnRMaXN0IHNwYW4gYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiAjMDAwOwp9CgouRnJlZEVsZW1lbnRMaXN0IHNwYW4gYTpob3ZlciB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5GcmVkRWxlbWVudExpc3Qgc3Bhbi5XYXJuaW5nIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyLWNvbG9yOiAjQ0UwMDAwOwp9CgouRnJlZE1vbm9TcGFjZSB7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEzMCU7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgd2hpdGUtc3BhY2U6IHByZTsKfQoKdGFibGUuRnJlZFN3aXRjaFRhYmxlIHRkIHsKICAgIHBhZGRpbmc6IDNweDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCnRhYmxlLkZyZWRTd2l0Y2hUYWJsZSB0ZDpmaXJzdC1jaGlsZCB7CiAgICB3aWR0aDogNDBweDsKfQoKdGFibGUuRnJlZFN3aXRjaFRhYmxlIHRkOmxhc3QtY2hpbGQgewogICAgcGFkZGluZy1sZWZ0OiAxMHB4Owp9CgouRnJlZFN3aXRjaCBhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDMwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjODg4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIG1hcmdpbjogMHB4IGF1dG87CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlCn0KCi5GcmVkU3dpdGNoIGEgc3BhbiB7CiAgICB3aWR0aDogMTVweDsKICAgIGhlaWdodDogMTRweDsKICAgIGJvcmRlci1yYWRpdXM6IDEzcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAtMXB4OwogICAgdG9wOiAwcHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluOwogICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbjsKICAgICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluOwp9CgouRnJlZFN3aXRjaC5PbiBhIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM3Nzc7CiAgICBib3JkZXItY29sb3I6ICMzMzM7Cn0KCi5GcmVkU3dpdGNoLk9uIHNwYW4gewogICAgcmlnaHQ6IC0xcHg7CiAgICBsZWZ0OiBhdXRvOwp9CgouRGV2ZWxGcmVkVG9nZ2xlQ29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiA1cHg7Cn0KCmEjRGV2ZWxGcmVkVG9nZ2xlQ29udGFpbmVyTGluayB7CiAgICBmb250LXNpemU6IDM1cHg7CiAgICBmb250LXdlaWdodDpib2xkOwogICAgY29sb3I6ICM4MDgwODA7Cn0KCmEjRGV2ZWxGcmVkVG9nZ2xlQ29udGFpbmVyTGluay5GcmVkQWN0aXZlIHsKICAgIGZvbnQtc2l6ZTogMzVweDsKICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CiAgICBjb2xvcjogIzAwNmVhNTsKfQo=
LyogT1RPQk8gaXMgYSB3ZWItYmFzZWQgdGlja2V0aW5nIHN5c3RlbSBmb3Igc2VydmljZSBvcmdhbmlzYXRpb25zLgoKQ29weXJpZ2h0IChDKSAyMDAxLTIwMjAgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCkFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCkZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKi8KCi8qKgogKiBAcGFja2FnZSAgICAgU2tpbiAiRGVmYXVsdCIKICogQHNlY3Rpb24gICAgIEZyZWQgQ1NTCiAqLwoKLkRldmVsRnJlZENvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDMzcHg7CiAgICByaWdodDogMTZweDsKICAgIHotaW5kZXg6IDUwMDA7Cn0KCi5EZXZlbEZyZWRDb250YWluZXI6aG92ZXIgewogICAgLXdlYmtpdC1vcGFjaXR5OiAxLjAgIWltcG9ydGFudDsKICAgIC1tb3otb3BhY2l0eTogMS4wICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAxLjAgIWltcG9ydGFudDsKfQoKLkRldmVsRnJlZEJveCB7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAxcHggM3B4ICM3Nzc7CiAgICAtbW96LWJveC1zaGFkb3c6IDFweCAxcHggM3B4ICM3Nzc7CiAgICAtbXMtYm94LXNoYWRvdzogMXB4IDFweCAzcHggIzc3NzsKICAgIC1vLWJveC1zaGFkb3c6IDFweCAxcHggM3B4ICM3Nzc7CiAgICBib3gtc2hhZG93OiAxcHggMXB4IDNweCAjNzc3OwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKfQoKLkRldmVsRnJlZEJveENvbnRlbnQgewogICAgbWF4LWhlaWdodDogMTUwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICAgIGJvcmRlci10b3A6IDBweDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5EZXZlbEZyZWRCb3hDb250ZW50LkV4cGFuZGVkIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouRGV2ZWxGcmVkQm94Q29udGVudCAuRnJlZFF1aWNrU2VhcmNoIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOwogICAgcGFkZGluZzogNXB4OwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggM3B4ICM3NzcsIGluc2V0IC0xcHggLTFweCAzcHggIzc3NzsKICAgIC1tcy1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICAtby1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDNweCAjNzc3LCBpbnNldCAtMXB4IC0xcHggM3B4ICM3Nzc7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5EZXZlbEZyZWRCb3hDb250ZW50IC5GcmVkUXVpY2tTZWFyY2ggaW5wdXQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogOTglOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLkRldmVsRnJlZEJveENvbnRlbnQgLkZyZWRRdWlja1NlYXJjaCBpIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAyLjUlOwogICAgdG9wOiA5cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogI2NjYzsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLkRldmVsRnJlZEJveENvbnRlbnQgLkZyZWRRdWlja1NlYXJjaDpob3ZlciBpIHsKICAgIGNvbG9yOiAjMzMzOwp9CgouRGV2ZWxGcmVkQm94IC5zdHJvbmcsCi5EZXZlbEZyZWRCb3ggLnN0cm9uZyAqIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgouRGV2ZWxGcmVkQm94IGgxIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICMyNTU1NjU7CiAgICBjb2xvcjogI2ZmZjsKICAgIG1hcmdpbjogMHB4OwogICAgcGFkZGluZzogNnB4IDdweDsKICAgIGN1cnNvcjogbW92ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5EZXZlbEZyZWRCb3guRXhwYW5kZWQgaDEgewogICAgYmFja2dyb3VuZDogIzI1NTU2NTsKfQoKLkRldmVsRnJlZEJveC5Db2xsYXBzZWQgaDEgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzg4ODsKfQoKLkRldmVsRnJlZEJveCBoMSAuRnJlZFRvb2xCYXIgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgouRGV2ZWxGcmVkQm94IGgxIC5GcmVkVG9vbEJhciBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9CgojRnJlZEpTTGludFNjcmlwdHMgewogICAgcGFkZGluZzogNXB4Owp9CgouRnJlZEpTTGludFN1Y2Nlc3NmdWwgewogICAgY29sb3I6IGdyZWVuOwp9CgouRnJlZEpTTGludEVycm9yIHsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKYm9keSAjRnJlZEhUTUxDaGVja1Jlc3VsdHMgcCAsCmJvZHkgI0ZyZWRIVE1MQ2hlY2tSZXN1bHRzIHByZSwKYm9keSAjRnJlZEpTTGludFNjcmlwdHMgcCAsCmJvZHkgI0ZyZWRKU0xpbnRTY3JpcHRzIHByZSB7CiAgICBtYXJnaW46IDBweDsKICAgIHBhZGRpbmc6IDBweDsKfQoKLkRldmVsRnJlZFNldHRpbmdzIHsKICAgIHBhZGRpbmc6IDE1cHg7Cn0KCi5EZXZlbEZyZWRTZXR0aW5ncyBoMSB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBtYXJnaW46IDBweCAwcHggMTBweCAwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5EZXZlbEZyZWRTZXR0aW5ncyB1bCB7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgLkNhbGxGb3JBY3Rpb24gewogICAgbWFyZ2luOiAwcHggYXV0bzsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgbGkgewogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgbGkgc3BhbiB7CiAgICBjb2xvcjogIzc3Nzc3NzsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgcGFkZGluZy1sZWZ0OiAyM3B4OwogICAgbWFyZ2luLWJvdHRvbTogM3B4OwogICAgbGluZS1oZWlnaHQ6IDEzMCU7Cn0KCi5EZXZlbEZyZWRTZXR0aW5ncyBsaSBsYWJlbCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBhZGRpbmc6IDNweCAyMHB4IDNweCA1cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwp9CgouRGV2ZWxGcmVkU2V0dGluZ3MgbGk6aG92ZXIgbGFiZWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKfQoKLkRldmVsRnJlZFNldHRpbmdzIGxpIGEgewogICAgY29sb3I6ICMwMDA7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogNnB4OwogICAgdG9wOiA2cHg7CiAgICBmb250LXNpemU6IDEzcHg7Cn0KCnRhYmxlLkZyZWRUYWJsZURlZmF1bHQgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwp9Cgp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRoIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Cgp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRkLAp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRoIHsKICAgIHBhZGRpbmc6IDVweCA1cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkZGQ7Cn0KCnRhYmxlLkZyZWRUYWJsZURlZmF1bHQgdGggewogICAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKICAgIGJvcmRlci1yaWdodC1jb2xvcjogI2FhYTsKfQoKdGFibGUuRnJlZFRhYmxlRGVmYXVsdCB0cjpudGgtY2hpbGQob2RkKSB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwp9Cgp0YWJsZS5GcmVkVGFibGVEZWZhdWx0IHRyOmxhc3QtY2hpbGQgdGQgewogICAgYm9yZGVyLWJvdHRvbTogMHB4Owp9CgouRGV2ZWxGcmVkQm94IC5GcmVkRWxlbWVudExpc3QgewogICAgcGFkZGluZzogNXB4IDNweCAwcHggNXB4Owp9CgouRnJlZEVsZW1lbnRMaXN0IHNwYW4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogM3B4IDVweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgbWFyZ2luOiAwcHggM3B4IDVweCAwcHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4OwogICAgLW1zLWJvcmRlci1yYWRpdXM6IDNweDsKICAgIC1vLWJvcmRlci1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5GcmVkRWxlbWVudExpc3Qgc3BhbiBpIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRvcDogMXB4Owp9CgouRnJlZEVsZW1lbnRMaXN0IHNwYW4gYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIGNvbG9yOiAjMDAwOwp9CgouRnJlZEVsZW1lbnRMaXN0IHNwYW4gYTpob3ZlciB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5GcmVkRWxlbWVudExpc3Qgc3Bhbi5XYXJuaW5nIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyLWNvbG9yOiAjQ0UwMDAwOwp9CgouRnJlZE1vbm9TcGFjZSB7CiAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEzMCU7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgd2hpdGUtc3BhY2U6IHByZS1saW5lOwp9Cgp0YWJsZS5GcmVkU3dpdGNoVGFibGUgdGQgewogICAgcGFkZGluZzogM3B4OwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKdGFibGUuRnJlZFN3aXRjaFRhYmxlIHRkOmZpcnN0LWNoaWxkIHsKICAgIHdpZHRoOiA0MHB4Owp9Cgp0YWJsZS5GcmVkU3dpdGNoVGFibGUgdGQ6bGFzdC1jaGlsZCB7CiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7Cn0KCi5GcmVkU3dpdGNoIGEgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMzBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgbWFyZ2luOiAwcHggYXV0bzsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWUKfQoKLkZyZWRTd2l0Y2ggYSBzcGFuIHsKICAgIHdpZHRoOiAxNXB4OwogICAgaGVpZ2h0OiAxNHB4OwogICAgYm9yZGVyLXJhZGl1czogMTNweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IC0xcHg7CiAgICB0b3A6IDBweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47CiAgICAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluOwogICAgICAgLW8tdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2UtaW47Cn0KCi5GcmVkU3dpdGNoLk9uIGEgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzc3NzsKICAgIGJvcmRlci1jb2xvcjogIzMzMzsKfQoKLkZyZWRTd2l0Y2guT24gc3BhbiB7CiAgICByaWdodDogLTFweDsKICAgIGxlZnQ6IGF1dG87Cn0KCi5EZXZlbEZyZWRUb2dnbGVDb250YWluZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDVweDsKfQoKYSNEZXZlbEZyZWRUb2dnbGVDb250YWluZXJMaW5rIHsKICAgIGZvbnQtc2l6ZTogMzVweDsKICAgIGZvbnQtd2VpZ2h0OmJvbGQ7CiAgICBjb2xvcjogIzgwODA4MDsKfQoKYSNEZXZlbEZyZWRUb2dnbGVDb250YWluZXJMaW5rLkZyZWRBY3RpdmUgewogICAgZm9udC1zaXplOiAzNXB4OwogICAgZm9udC13ZWlnaHQ6Ym9sZDsKICAgIGNvbG9yOiAjMDA2ZWE1Owp9Cg==
JVBERi0xLjQKJaqrrK0KMSAwIG9iago8PAovQ3JlYXRvciAoQXBhY2hlIEZPUCBWZXJzaW9uIDIuMSkKL1Byb2R1Y2VyIChBcGFjaGUgRk9QIFZlcnNpb24gMi4xKQovQ3JlYXRpb25EYXRlIChEOjIwMjAwNTIyMDkyNDMwKzAyJzAwJykKPj4KZW5kb2JqCjIgMCBvYmoKPDwKICAvTiAzCiAgL0xlbmd0aCAzIDAgUgogIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nO2ZZ1BUWRaA73uvc6Chu2kyNDlJlNCA5JwkSBYV6G4yLTQ5mJDBERhBRCQpgogCDjg6BBlFRRQDoqCAeRoZBJRxcBRRUVnAH7NVu7VbW7W1f7bPj/e+OufWO+e+ulXvq3oAyJDi2QnJsD4ACbwUvq+zHTMoOISJvQ9wgAxIgAow4ezkRFtvbw+wHCtrwT/E+1EArdzv6fzz+r8MEieBxwEAoi9zLIebzF7mncsczUngrOSnVzg9JTEFANh7men85QGXmbPCEd84Y4WjvnHR6ho/X/tlPgoAjhS1yoRTKxyxytSuFWZH8xMAkO5bXq/CTuQvP196pZfitxlWQ3RlP8woLo/LD0/hcpj/4db+ffxdL3Ty8sv/rzf4H/dZOTvf6K3l6pmAGBV/5baWAcB6DQBS8ldO5TAAlN0AdPT8lYs4DkBnCQCSz9ip/LRvOdTq7IAAKIAOpIA8UAYaQAcYAlNgAWyAI3ADXsAPBIPNgA2iQQLgg3SQA3aBfFAISsBBUAVqQQNoAq3gDOgE58FlcA3cAnfBCHgMBGASvAJz4D1YhCAIC5EhGiQFKUCqkDZkCLEgK8gR8oB8oWAoDIqCeFAqlAPthgqhUqgKqoOaoJ+gc9Bl6AY0BD2ExqEZ6E/oE4zAJJgOy8FqsB7Mgm1hd9gP3gRHwUlwFpwH74Mr4Hr4FNwBX4ZvwSOwAH4FzyMAISIMRBHRQViIPeKFhCCRCB/ZjhQg5Ug90op0I/3IPUSAzCIfURgUDcVE6aAsUC4ofxQblYTajipCVaFOojpQfah7qHHUHOormoyWRWujzdGu6CB0FDodnY8uRzei29FX0SPoSfR7DAbDwKhjTDEumGBMLCYbU4Q5jGnDXMIMYSYw81gsVgqrjbXEemHDsSnYfGwl9hT2InYYO4n9gCPi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YmoKNCAwIG9iagpbL0lDQ0Jhc2VkIDIgMCBSXQplbmRvYmoKNSAwIG9iago8PAogIC9UeXBlIC9NZXRhZGF0YQogIC9TdWJ0eXBlIC9YTUwKICAvTGVuZ3RoIDYgMCBSCj4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgcmRmOmFib3V0PSIiPgo8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0Pgo8ZGM6bGFuZ3VhZ2U+ZW48L2RjOmxhbmd1YWdlPgo8ZGM6ZGF0ZT4yMDIwLTA1LTIyVDA5OjI0OjMwKzAyOjAwPC9kYzpkYXRlPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpwZGY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy8iIHJkZjphYm91dD0iIj4KPHBkZjpQcm9kdWNlcj5BcGFjaGUgRk9QIFZlcnNpb24gMi4xPC9wZGY6UHJvZHVjZXI+CjxwZGY6UERGVmVyc2lvbj4xLjQ8L3BkZjpQREZWZXJzaW9uPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHJkZjphYm91dD0iIj4KPHhtcDpDcmVhdG9yVG9vbD5BcGFjaGUgRk9QIFZlcnNpb24gMi4xPC94bXA6Q3JlYXRvclRvb2w+Cjx4bXA6TWV0YWRhdGFEYXRlPjIwMjAtMDUtMjJUMDk6MjQ6MzArMDI6MDA8L3htcDpNZXRhZGF0YURhdGU+Cjx4bXA6Q3JlYXRlRGF0ZT4yMDIwLTA1LTIyVDA5OjI0OjMwKzAyOjAwPC94bXA6Q3JlYXRlRGF0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CjQ0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzIyIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjQ1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNjc5LjYyOSAxMTcuMTkgNjg5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NCAwIFIKL0ggL0kKCj4+CmVuZG9iago0NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzEuNjg5IDY3OS42MjkgNTM5Ljk5OSA2ODkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDQ0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjQ3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI1IDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjQ4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNjY3LjYyOSAxNTMuODU4IDY3Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNDcgMCBSCi9IIC9JCgo+PgplbmRvYmoKNDkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCA2NjcuNjI5IDUzOS45OTggNjc3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA0NyAwIFIKL0ggL0kKCj4+CmVuZG9iago1MCAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDcwMC44IG51bGxdCj4+CmVuZG9iago1MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA2NTUuNjI5IDE3Ni42MDYgNjY1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1MCAwIFIKL0ggL0kKCj4+CmVuZG9iago1MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM3IDY1NS42MjkgNTM5Ljk5NyA2NjUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUwIDAgUgovSCAvSQoKPj4KZW5kb2JqCjUzIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI1IDAgUiAvWFlaIDcyLjAgNjU4LjQgbnVsbF0KPj4KZW5kb2JqCjU0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDY0My42MjkgMTQ2LjA1NyA2NTMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDUzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjU1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNjQzLjYyOSA1MzkuOTk4IDY1My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTMgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCA2MDQuMCBudWxsXQo+PgplbmRvYmoKNTcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNjMxLjYyOSAxNzYuMjQ3IDY0MS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNTYgMCBSCi9IIC9JCgo+PgplbmRvYmoKNTggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCA2MzEuNjI5IDUzOS45OTggNjQxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1NiAwIFIKL0ggL0kKCj4+CmVuZG9iago1OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDU2MS42IG51bGxdCj4+CmVuZG9iago2MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA2MTkuNjI5IDIwNS4yMzIgNjI5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA1OSAwIFIKL0ggL0kKCj4+CmVuZG9iago2MSAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDYxOS42MjkgNTM5Ljk5OCA2MjkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDU5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjYyIDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzI1IDAgUiAvWFlaIDcyLjAgNTE5LjIgbnVsbF0KPj4KZW5kb2JqCjYzIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDYwNy42MjkgMTU1Ljc3OCA2MTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDYyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjY0IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNjA3LjYyOSA1MzkuOTk4IDYxNy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjIgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjUgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCA0NzYuOCBudWxsXQo+PgplbmRvYmoKNjYgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTk1LjYyOSAxNjguMCA2MDUuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDY1IDAgUgovSCAvSQoKPj4KZW5kb2JqCjY3IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzcgNTk1LjYyOSA1MzkuOTk3IDYwNS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjUgMCBSCi9IIC9JCgo+PgplbmRvYmoKNjggMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMjUgMCBSIC9YWVogNzIuMCA0MzQuNCBudWxsXQo+PgplbmRvYmoKNjkgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTgzLjYyOSAxODYuMjM4IDU5My42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNjggMCBSCi9IIC9JCgo+PgplbmRvYmoKNzAgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzNyA1ODMuNjI5IDUzOS45OTcgNTkzLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA2OCAwIFIKL0ggL0kKCj4+CmVuZG9iago3MSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFsyNSAwIFIgL1hZWiA3Mi4wIDM5Mi4wIG51bGxdCj4+CmVuZG9iago3MiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA1NzEuNjI5IDE2Ni43NjUgNTgxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3MSAwIFIKL0ggL0kKCj4+CmVuZG9iago3MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM3IDU3MS42MjkgNTM5Ljk5NyA1ODEuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDcxIDAgUgovSCAvSQoKPj4KZW5kb2JqCjc0IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzMxIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjc1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNTU5LjYyOSAxNDkuMzkgNTY5LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA3NCAwIFIKL0ggL0kKCj4+CmVuZG9iago3NiAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDU1OS42MjkgNTM5Ljk5OCA1NjkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDc0IDAgUgovSCAvSQoKPj4KZW5kb2JqCjc3IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzMxIDAgUiAvWFlaIDcyLjAgNjc4LjggbnVsbF0KPj4KZW5kb2JqCjc4IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDEwNC4wIDU0Ny42MjkgMTk5LjAwNiA1NTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDc3IDAgUgovSCAvSQoKPj4KZW5kb2JqCjc5IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNTQ3LjYyOSA1MzkuOTk4IDU1Ny42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgNzcgMCBSCi9IIC9JCgo+PgplbmRvYmoKODAgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzEgMCBSIC9YWVogNzIuMCA2MDIuNCBudWxsXQo+PgplbmRvYmoKODEgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTM1LjYyOSAxOTQuNjQxIDU0NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODAgMCBSCi9IIC9JCgo+PgplbmRvYmoKODIgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjYzOCA1MzUuNjI5IDUzOS45OTggNTQ1LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4MCAwIFIKL0ggL0kKCj4+CmVuZG9iago4MyAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszNCAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iago4NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDUyMy42MjkgMTYxLjc4NCA1MzMuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDgzIDAgUgovSCAvSQoKPj4KZW5kb2JqCjg1IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNTIzLjYyOSA1MzkuOTk4IDUzMy42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODMgMCBSCi9IIC9JCgo+PgplbmRvYmoKODYgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzQgMCBSIC9YWVogNzIuMCA2NzguOCBudWxsXQo+PgplbmRvYmoKODcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgMTA0LjAgNTExLjYyOSAyNjIuMjI3IDUyMS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODYgMCBSCi9IIC9JCgo+PgplbmRvYmoKODggMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5rCi9SZWN0IFsgNTMzLjgwOCA1MTEuNjI5IDU0MC4xNjggNTIxLjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA4NiAwIFIKL0ggL0kKCj4+CmVuZG9iago4OSAwIG9iago8PCAvVHlwZSAvQWN0aW9uCi9TIC9Hb1RvCi9EIFszNyAwIFIgL1hZWiA3Mi4wIDcyMC4wIG51bGxdCj4+CmVuZG9iago5MCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA4MC4wIDQ5OS42MjkgMTM2Ljc2OCA1MDkuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDg5IDAgUgovSCAvSQoKPj4KZW5kb2JqCjkxIDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDUzMy42MzggNDk5LjYyOSA1MzkuOTk4IDUwOS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgODkgMCBSCi9IIC9JCgo+PgplbmRvYmoKOTIgMCBvYmoKPDwgL1R5cGUgL0FjdGlvbgovUyAvR29UbwovRCBbMzcgMCBSIC9YWVogNzIuMCA2NzkuMDY1IG51bGxdCj4+CmVuZG9iago5MyAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyAxMDQuMCA0ODcuNjI5IDE0OS41NTMgNDk3LjYxOSBdCi9DIFsgMCAwIDAgXQovQm9yZGVyIFsgMCAwIDAgXQovQSA5MiAwIFIKL0ggL0kKCj4+CmVuZG9iago5NCAwIG9iago8PCAvVHlwZSAvQW5ub3QKL1N1YnR5cGUgL0xpbmsKL1JlY3QgWyA1MzMuNjM4IDQ4Ny42MjkgNTM5Ljk5OCA0OTcuNjE5IF0KL0MgWyAwIDAgMCBdCi9Cb3JkZXIgWyAwIDAgMCBdCi9BIDkyIDAgUgovSCAvSQoKPj4KZW5kb2JqCjk1IDAgb2JqCjw8IC9UeXBlIC9BY3Rpb24KL1MgL0dvVG8KL0QgWzQzIDAgUiAvWFlaIDcyLjAgNzIwLjAgbnVsbF0KPj4KZW5kb2JqCjk2IDAgb2JqCjw8IC9UeXBlIC9Bbm5vdAovU3VidHlwZSAvTGluawovUmVjdCBbIDgwLjAgNDc1LjYyOSAxNTAuMzU3IDQ4NS42MTkgXQovQyBbIDAgMCAwIF0KL0JvcmRlciBbIDAgMCAwIF0KL0EgOTUgMCBSCi9IIC9JCgo+PgplbmRvYmoKOTcgMCBvYmoKPDwgL1R5cGUgL0Fubm90Ci9TdWJ0eXBlIC9MaW5r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UokumIhuwsNFHjzAQeAsUQkHv7nBBFsJUglux+7ld+NB/y/8oX83A9/7F/V/ARx2jioKZW5kc3RyZWFtCmVuZG9iagoxMTQgMCBvYmoKMTUzMTEKZW5kb2JqCjExMyAwIG9iago8PCAvTGVuZ3RoIDExNSAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicm2b5/8v6//s38P///4dhFFAdNAAAFjAJaQplbmRzdHJlYW0KZW5kb2JqCjExNSAwIG9iagoyNwplbmRvYmoKMTE2IDAgb2JqCjw8CiAgL1R5cGUgL0ZvbnQKICAvU3VidHlwZSAvVHlwZTAKICAvQmFzZUZvbnQgL0VBQUFBQitEZWphVnVTYW5zCiAgL0VuY29kaW5nIC9JZGVudGl0eS1ICiAgL1RvVW5pY29kZSAxMTcgMCBSCiAgL0Rlc2NlbmRhbnRGb250cyBbMTE4IDAgUl0KPj4KZW5kb2JqCjExOCAwIG9iago8PCAvVHlwZSAvRm9udAovQmFzZUZvbnQgL0VBQUFBQitEZWphVnVTYW5zIAovQ0lEVG9HSURNYXAgL0lkZW50aXR5IAovU3VidHlwZSAvQ0lERm9udFR5cGUyCi9DSURTeXN0ZW1JbmZvIDw8IC9SZWdpc3RyeSAoQWRvYmUpIC9PcmRlcmluZyAoVUNTKSAvU3VwcGxlbWVudCAwID4+Ci9Gb250RGVzY3JpcHRvciAxMTEgMCBSCi9EVyAwCi9XIFsgMCBbNjAwIDMxNyAzNjAgNjAzIDQxMSA2MTUgMzUyIDYxMiA1NDkgMzE3IDg2MiA2MzYgNTc1IDM5MiA2MzMgNTU3IDI3NyA1MjAgNzUxIDYxMCA2OTggNjMzIDU3OSA2MzYgMjk0IDYzNCA2MzMgNjM2IDc3MCA2MzEgNjk0IDYxMSA2MzQgNjM2IDI3NyA2MzQgNjM2IDc4NyA2MzYgNjM2IDk3NCA2MzQgNjM2IDU5MSAyOTQgNjg0IDYzNCAzMzYgODM3IDc4NyA2ODYgNTkxIDgxNyAzMzYgNTkxIDYzNCAzOTAgMzkwIDMxNyA3NzQgMjc3IDczMSA1MjQgNTMwIDgzNyAyNzQgNDU5IDk4OCA1ODkgNjM2IDY1NSA2ODUgXSBdCj4+CmVuZG9iagoxMTcgMCBvYmoKPDwg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biAKMDAwMDAwMzcwMiAwMDAwMCBuIAowMDAwMDA2MzU2IDAwMDAwIG4gCjAwMDAwMDYzNzYgMDAwMDAgbiAKMDAwMDAwODQzMSAwMDAwMCBuIAowMDAwMDA4NDUyIDAwMDAwIG4gCjAwMDAwMDg5ODUgMDAwMDAgbiAKMDAwMDAwOTAwNSAwMDAwMCBuIAowMDAwMDg1OTIzIDAwMDAwIG4gCjAwMDAwODU2OTcgMDAwMDAgbiAKMDAwMDAwOTE5OSAwMDAwMCBuIAowMDAwMDEyNDk3IDAwMDAwIG4gCjAwMDAwMTI1MTggMDAwMDAgbiAKMDAwMDAxNTE5MSAwMDAwMCBuIAowMDAwMDE1MjEyIDAwMDAwIG4gCjAwMDAwMTU3MTQgMDAwMDAgbiAKMDAwMDAxNTczNCAwMDAwMCBuIAowMDAwMDE1OTI4IDAwMDAwIG4gCjAwMDAwMTcxNjMgMDAwMDAgbiAKMDAwMDAxNzE4NCAwMDAwMCBuIAowMDAwMDE3Mzc4IDAwMDAwIG4gCjAwMDAwMTc0NzQgMDAwMDAgbiAKMDAwMDAxNzYxMCAwMDAwMCBuIAowMDAwMDE4ODAzIDAwMDAwIG4gCjAwMDAwMTg4MjQgMDAwMDAgbiAKMDAwMDAxODg1MSAwMDAwMCBuIAowMDAwMDE5MDYyIDAwMDAwIG4gCjAwMDAwMTk3MTYgMDAwMDAgbiAKMDAwMDAxOTczNiAwMDAwMCBuIAowMDAwMDE5OTMwIDAwMDAwIG4gCjAwMDAwMjEyNDcgMDAwMDAgbiAKMDAwMDAyMTI2OCAwMDAwMCBuIAowMDAwMDIxNDYyIDAwMDAwIG4gCjAwMDAwMjIzMzEgMDAwMDAgbiAKMDAwMDAyMjM1MSAwMDAwMCBuIAowMDAwMDIyNTQ1IDAwMDAwIG4gCjAwMDAwMjMxODcgMDAwMDAgbiAKMDAwMDAyMzIwNyAwMDAwMCBuIAowMDAwMDIzNDAxIDAwMDAwIG4gCjAwMDAwMjM0NzkgMDAwMDAgbiAKMDAwMDAyMzYxNSAwMDAwMCBuIAowMDAwMDIzNzU1IDAwMDAwIG4gCjAwMDAwMjM4MzMgMDAwMDAgbiAKMDAwMDAyMzk3MCAwMDAwMCBuIAowMDAwMDI0MTEwIDAwMDAwIG4gCjAwMDAwMjQxODggMDAwMDAgbiAKMDAwMDAyNDMyNiAwMDAwMCBuIAowMDAwMDI0NDY2IDAwMDAwIG4gCjAwMDAwMjQ1NDQgMDAwMDAgbiAKMDAwMDAyNDY4MiAwMDAwMCBuIAowMDAwMDI0ODIyIDAwMDAwIG4gCjAwMDAwMjQ5MDAgMDAwMDAgbiAKMDAwMDAyNTAzOCAwMDAwMCBuIAowMDAwMDI1MTc4IDAwMDAwIG4gCjAwMDAwMjUyNTYgMDAwMDAgbiAKMDAwMDAyNTM5NCAwMDAwMCBuIAowMDAwMDI1NTM0IDAwMDAwIG4gCjAwMDAwMjU2MTIgMDAwMDAgbiAKMDAwMDAyNTc1MCAwMDAwMCBuIAowMDAwMDI1ODkwIDAwMDAwIG4gCjAwMDAwMjU5NjggMDAwMDAgbiAKMDAwMDAyNjEwNCAwMDAwMCBuIAowMDAwMDI2MjQ0IDAwMDAwIG4gCjAwMDAwMjYzMjIgMDAwMDAgbiAKMDAwMDAyNjQ2MCAwMDAwMCBuIAowMDAwMDI2NjAwIDAwMDAwIG4gCjAwMDAwMjY2NzggMDAwMDAgbiAKMDAwMDAyNjgxNiAwMDAwMCBuIAowMDAwMDI2OTU2IDAwMDAwIG4gCjAwMDAwMjcwMzQgMDAwMDAgbiAKMDAwMDAyNzE3MCAwMDAwMCBuIAowMDAwMDI3MzEwIDAwMDAwIG4gCjAwMDAwMjczODggMDAwMDAgbiAKMDAwMDAyNzUyNiAwMDAwMCBuIAowMDAwMDI3NjY2IDAwMDAwIG4gCjAwMDAwMjc3NDQgMDAwMDAgbiAKMDAwMDAyNzg4MiAwMDAwMCBuIAowMDAwMDI4MDIyIDAwMDAwIG4gCjAwMDAwMjgxMDAgMDAwMDAgbiAKMDAwMDAyODIzNyAwMDAwMCBuIAowMDAwMDI4Mzc3IDAwMDAwIG4gCjAwMDAwMjg0NTUgMDAwMDAgbiAKMDAwMDAyODU5MyAwMDAwMCBuIAowMDAwMDI4NzMzIDAwMDAwIG4gCjAwMDAwMjg4MTEgMDAwMDAgbiAKMDAwMDAyODk0OCAwMDAwMCBuIAowMDAwMDI5MDg4IDAwMDAwIG4gCjAwMDAwMjkxNjggMDAwMDAgbiAKMDAwMDAyOTMwNiAwMDAwMCBuIAowMDAwMDI5NDQ2IDAwMDAwIG4gCjAwMDAwMjk1MjQgMDAwMDAgbiAKMDAwMDAyOTY2MSAwMDAwMCBuIAowMDAwMDI5ODAxIDAwMDAwIG4gCjAwMDAwNDM4MjAgMDAwMDAgbiAKMDAwMDA0Mzg0MiAwMDAwMCBuIAowMDAwMDQ0MTE1IDAwMDAwIG4gCjAwMDAwNDQzMjggMDAwMDAgbiAKMDAwMDA0NDU5MyAwMDAwMCBuIAowMDAwMDU3Nzg3IDAwMDAwIG4gCjAwMDAwNTc3NjQgMDAwMDAgbiAKMDAwMDA1Nzg4NyAwMDAwMCBuIAowMDAwMDU3OTA3IDAwMDAwIG4gCjAwMDAwNTg1MjUgMDAwMDAgbiAKMDAwMDA1ODA3MiAwMDAwMCBuIAowMDAwMDU5MDc3IDAwMDAwIG4gCjAwMDAwNTkwOTggMDAwMDAgbiAKMDAwMDA1OTM1OCAwMDAwMCBuIAowMDAwMDc0NzkxIDAwMDAwIG4gCjAwMDAwNzQ3NjggMDAwMDAgbiAKMDAwMDA3NDg5NiAwMDAwMCBuIAowMDAwMDc0OTE2IDAwMDAwIG4gCjAwMDAwNzU1ODcgMDAwMDAgbiAKMDAwMDA3NTA3NiAwMDAwMCBuIAowMDAwMDc2MjA3IDAwMDAwIG4gCjAwMDAwNzYyMjggMDAwMDAgbiAKMDAwMDA3NjQ5MCAwMDAwMCBuIAowMDAwMDg0NjQzIDAwMDAwIG4gCjAwMDAwODQ2MjEgMDAwMDAgbiAKMDAwMDA4NDc0MSAwMDAwMCBuIAowMDAwMDg0NzYxIDAwMDAwIG4gCjAwMDAwODUyNTIgMDAwMDAgbiAKMDAwMDA4NDkyNSAwMDAwMCBuIAowMDAwMDg1Njc2IDAwMDAwIG4gCjAwMDAwODU4MTQgMDAwMDAgbiAKMDAwMDA4NjE1MyAwMDAwMCBuIAp0cmFpbGVyCjw8CiAgL1Jvb3QgMTI5IDAgUgogIC9JbmZvIDEgMCBSCiAgL0lEIFs8REM0QzVGNTM4QjA5Q0UwRTU2OEVDMEMxQTY2MTk3QkQ+IDxEQzRDNUY1MzhCMDlDRTBFNTY4RUMwQzFBNjYxOTdCRD5dCiAgL1NpemUgMTMxCj4+CnN0YXJ0eHJlZgo4NjI1MgolJUVPRgo=