@qwen-code/web-shell 0.26.1-nightly.20261025.8e28d5380c → 0.26.2-preview.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{PierreFilePreview-340RefmX.js → PierreFilePreview-Cz8IByld.js} +1 -1
- package/dist/{SpreadsheetPreview-DEdSw9Jk.js → SpreadsheetPreview-BSdHX6Lq.js} +2 -2
- package/dist/{WorkspaceFileBrowser-QQaafczq.js → WorkspaceFileBrowser-B0EUYL2u.js} +2 -2
- package/dist/{agents-route-l0Ktd3iD.js → agents-route-DrM0Iy5a.js} +2 -2
- package/dist/daemon-react-sdk.js +1 -1
- package/dist/{index-R4OagsCt.js → index-DhmGlDKS.js} +51253 -51454
- package/dist/index.js +3 -3
- package/dist/sw.js +1 -1
- package/dist/transcript.js +8882 -8873
- package/dist/types/components/ChatEditor.d.ts +5 -1
- package/dist/types/components/MessageItem.d.ts +1 -0
- package/dist/types/components/managed/ManagedSessionActions.d.ts +2 -1
- package/dist/types/components/managed/ManagedSessionsPage.d.ts +1 -2
- package/dist/types/components/managed/WorkspaceBindingCreator.d.ts +1 -2
- package/dist/types/components/managed/generated/managed-agent-api.d.ts +151 -57
- package/dist/types/components/managed/java-managed-agent-client.d.ts +9 -1
- package/dist/types/components/managed/managed-agent-provider.d.ts +8 -9
- package/dist/types/components/managed/use-managed-file-references.d.ts +7 -0
- package/dist/types/components/managed/use-managed-file-upload.d.ts +23 -0
- package/dist/types/components/managed/use-managed-session-rename.d.ts +2 -2
- package/dist/types/components/messages/AssistantMessage.d.ts +1 -0
- package/dist/types/components/plugins/PluginManagerPage.d.ts +3 -1
- package/dist/types/components/ui/tooltip.d.ts +3 -1
- package/dist/types/settings.d.ts +1 -0
- package/dist/types/utils/selectionClipboard.d.ts +1 -0
- package/dist/types/utils/selectionClipboard.transcript-stub.d.ts +1 -0
- package/dist/types/utils/turnDuration.d.ts +1 -0
- package/dist/{useDaemonMidTurnInjected-DkHzPzzI.js → useDaemonMidTurnInjected-DY7azBbC.js} +10 -45
- package/package.json +1 -1
- package/dist/types/components/managed/ManagedSessionCwdControl.d.ts +0 -9
- package/dist/types/components/managed/use-managed-cwd-change.d.ts +0 -21
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsxs as Y, jsx as Z } from "react/jsx-runtime";
|
|
2
2
|
import { useState as R, useRef as s, useEffect as g, useMemo as ZZ } from "react";
|
|
3
|
-
import { e, T as lZ, B as T, a as mZ, b as dZ, d as bZ, c as cZ, r as GZ, u as XZ } from "./index-
|
|
3
|
+
import { e, T as lZ, B as T, a as mZ, b as dZ, d as bZ, c as cZ, r as GZ, u as XZ } from "./index-DhmGlDKS.js";
|
|
4
4
|
import { ChevronLeftIcon as WZ, ChevronRightIcon as yZ, DownloadIcon as f } from "lucide-react";
|
|
5
|
-
import { W as r } from "./useDaemonMidTurnInjected-
|
|
5
|
+
import { W as r } from "./useDaemonMidTurnInjected-DY7azBbC.js";
|
|
6
6
|
const q = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBKdD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIEplKE90KXtyZXR1cm4gT3QmJk90Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPdCwiZGVmYXVsdCIpP090LmRlZmF1bHQ6T3R9ZnVuY3Rpb24gSWUoT3Qpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgIicrT3QrJyIuIFBsZWFzZSBjb25maWd1cmUgdGhlIGR5bmFtaWNSZXF1aXJlVGFyZ2V0cyBvci9hbmQgaWdub3JlRHluYW1pY1JlcXVpcmVzIG9wdGlvbiBvZiBAcm9sbHVwL3BsdWdpbi1jb21tb25qcyBhcHByb3ByaWF0ZWx5IGZvciB0aGlzIHJlcXVpcmUgY2FsbCB0byB3b3JrLicpfXZhciBIZT17ZXhwb3J0czp7fX07LyohIEV4Y2VsSlMgMTktMTAtMjAyMyAqLyhmdW5jdGlvbihPdCxuZSl7KGZ1bmN0aW9uKGEpe090LmV4cG9ydHM9YSgpfSkoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gYShFLGssbSl7ZnVuY3Rpb24gcyh0LGUpe2lmKCFrW3RdKXtpZighRVt0XSl7dmFyIGw9dHlwZW9mIEllPT0iZnVuY3Rpb24iJiZJZTtpZighZSYmbClyZXR1cm4gbCh0LCEwKTtpZihvKXJldHVybiBvKHQsITApO3ZhciBuPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3QrIiciKTt0aHJvdyBuLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLG59dmFyIGk9a1t0XT17ZXhwb3J0czp7fX07RVt0XVswXS5jYWxsKGkuZXhwb3J0cyxmdW5jdGlvbihmKXtyZXR1cm4gcyhFW3RdWzFdW2ZdfHxmKX0saSxpLmV4cG9ydHMsYSxFLGssbSl9cmV0dXJuIGtbdF0uZXhwb3J0c31mb3IodmFyIG89dHlwZW9mIEllPT0iZnVuY3Rpb24iJiZJZSxyPTA7cjxtLmxlbmd0aDtyKyspcyhtW3JdKTtyZXR1cm4gc30oezE6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoImZzIikscz1hKCJmYXN0LWNzdiIpLG89YSgiZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0Iikscj1hKCJkYXlqcy9wbHVnaW4vdXRjIiksdD1hKCJkYXlqcyIpLmV4dGVuZChvKS5leHRlbmQociksZT1hKCIuLi91dGlscy9zdHJlYW0tYnVmIikse2ZzOntleGlzdHM6bH19PWEoIi4uL3V0aWxzL3V0aWxzIiksbj17dHJ1ZTohMCxmYWxzZTohMSwiI04vQSI6e2Vycm9yOiIjTi9BIn0sIiNSRUYhIjp7ZXJyb3I6IiNSRUYhIn0sIiNOQU1FPyI6e2Vycm9yOiIjTkFNRT8ifSwiI0RJVi8wISI6e2Vycm9yOiIjRElWLzAhIn0sIiNOVUxMISI6e2Vycm9yOiIjTlVMTCEifSwiI1ZBTFVFISI6e2Vycm9yOiIjVkFMVUUhIn0sIiNOVU0hIjp7ZXJyb3I6IiNOVU0hIn19O0UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihpKXt0aGlzLndvcmtib29rPWksdGhpcy53b3Jrc2hlZXQ9bnVsbH1hc3luYyByZWFkRmlsZShpLGYpe2lmKGY9Znx8e30sIWF3YWl0IGwoaSkpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5vdCBmb3VuZDogIitpKTtjb25zdCBjPW0uY3JlYXRlUmVhZFN0cmVhbShpKSx1PWF3YWl0IHRoaXMucmVhZChjLGYpO3JldHVybiBjLmNsb3NlKCksdX1yZWFkKGksZil7cmV0dXJuIGY9Znx8e30sbmV3IFByb21pc2UoKGMsdSk9Pntjb25zdCBkPXRoaXMud29ya2Jvb2suYWRkV29ya3NoZWV0KGYuc2hlZXROYW1lKSxoPWYuZGF0ZUZvcm1hdHN8fFsiWVlZWS1NTS1ERFtUXUhIOm1tOnNzWiIsIllZWVktTU0tRERbVF1ISDptbTpzcyIsIk1NLURELVlZWVkiLCJZWVlZLU1NLUREIl0sdz1mLm1hcHx8ZnVuY3Rpb24oQSl7aWYoQT09PSIiKXJldHVybiBudWxsO2NvbnN0IFA9TnVtYmVyKEEpO2lmKCFOdW1iZXIuaXNOYU4oUCkmJlAhPT0xLzApcmV0dXJuIFA7Y29uc3QgTD1oLnJlZHVjZSgoRCxGKT0+e2lmKEQpcmV0dXJuIEQ7Y29uc3QgVT10KEEsRiwhMCk7cmV0dXJuIFUuaXNWYWxpZCgpP1U6bnVsbH0sbnVsbCk7aWYoTClyZXR1cm4gbmV3IERhdGUoTC52YWx1ZU9mKCkpO2NvbnN0IE49bltBXTtyZXR1cm4gTiE9PXZvaWQgMD9OOkF9LF89cy5wYXJzZShmLnBhcnNlck9wdGlvbnMpLm9uKCJkYXRhIixBPT57ZC5hZGRSb3coQS5tYXAodykpfSkub24oImVuZCIsKCk9PntfLmVtaXQoIndvcmtzaGVldCIsZCl9KTtfLm9uKCJ3b3Jrc2hlZXQiLGMpLm9uKCJlcnJvciIsdSksaS5waXBlKF8pfSl9Y3JlYXRlSW5wdXRTdHJlYW0oKXt0aHJvdyBuZXcgRXJyb3IoImBDU1YjY3JlYXRlSW5wdXRTdHJlYW1gIGlzIGRlcHJlY2F0ZWQuIFlvdSBzaG91bGQgdXNlIGBDU1YjcmVhZGAgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gNS4wLiBQbGVhc2UgZm9sbG93IHVwZ3JhZGUgaW5zdHJ1Y3Rpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9leGNlbGpzL2V4Y2VsanMvYmxvYi9tYXN0ZXIvVVBHUkFERS00LjAubWQiKX13cml0ZShpLGYpe3JldHVybiBuZXcgUHJvbWlzZSgoYyx1KT0+e2Y9Znx8e307Y29uc3QgZD10aGlzLndvcmtib29rLmdldFdvcmtzaGVldChmLnNoZWV0TmFtZXx8Zi5zaGVldElkKSxoPXMuZm9ybWF0KGYuZm9ybWF0dGVyT3B0aW9ucyk7aS5vbigiZmluaXNoIiwoKT0+e2MoKX0pLGgub24oImVycm9yIix1KSxoLnBpcGUoaSk7Y29uc3R7ZGF0ZUZvcm1hdDp3LGRhdGVVVEM6X309ZixBPWYubWFwfHwoTj0+e2lmKE4pe2lmKE4udGV4dHx8Ti5oeXBlcmxpbmspcmV0dXJuIE4uaHlwZXJsaW5rfHxOLnRleHR8fCIiO2lmKE4uZm9ybXVsYXx8Ti5yZXN1bHQpcmV0dXJuIE4ucmVzdWx0fHwiIjtpZihOIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gdz9fP3QudXRjKE4pLmZvcm1hdCh3KTp0KE4pLmZvcm1hdCh3KTpfP3QudXRjKE4pLmZvcm1hdCgpOnQoTikuZm9ybWF0KCk7aWYoTi5lcnJvcilyZXR1cm4gTi5lcnJvcjtpZih0eXBlb2YgTj09Im9iamVjdCIpcmV0dXJuIEpTT04uc3RyaW5naWZ5KE4pfXJldHVybiBOfSksUD1mLmluY2x1ZGVFbXB0eVJvd3M9PT12b2lkIDB8fGYuaW5jbHVkZUVtcHR5Um93cztsZXQgTD0xO2QmJmQuZWFjaFJvdygoTixEKT0+e2lmKFApZm9yKDtMKys8RC0xOyloLndyaXRlKFtdKTtjb25zdHt2YWx1ZXM6Rn09TjtGLnNoaWZ0KCksaC53cml0ZShGLm1hcChBKSksTD1EfSksaC5lbmQoKX0pfXdyaXRlRmlsZShpLGYpe2NvbnN0IGM9e2VuY29kaW5nOihmPWZ8fHt9KS5lbmNvZGluZ3x8InV0ZjgifSx1PW0uY3JlYXRlV3JpdGVTdHJlYW0oaSxjKTtyZXR1cm4gdGhpcy53cml0ZSh1LGYpfWFzeW5jIHdyaXRlQnVmZmVyKGkpe2NvbnN0IGY9bmV3IGU7cmV0dXJuIGF3YWl0IHRoaXMud3JpdGUoZixpKSxmLnJlYWQoKX19fSx7Ii4uL3V0aWxzL3N0cmVhbS1idWYiOjI0LCIuLi91dGlscy91dGlscyI6MjcsZGF5anM6MzkxLCJkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQiOjM5MiwiZGF5anMvcGx1Z2luL3V0YyI6MzkzLCJmYXN0LWNzdiI6NDI0LGZzOjIxNn1dLDI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL3V0aWxzL2NvbC1jYWNoZSIpO2NsYXNzIHN7Y29uc3RydWN0b3Iocix0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06MDtpZih0aGlzLndvcmtzaGVldD1yLHQpaWYodHlwZW9mIHQ9PSJzdHJpbmciKXtjb25zdCBsPW0uZGVjb2RlQWRkcmVzcyh0KTt0aGlzLm5hdGl2ZUNvbD1sLmNvbCtlLHRoaXMubmF0aXZlQ29sT2ZmPTAsdGhpcy5uYXRpdmVSb3c9bC5yb3crZSx0aGlzLm5hdGl2ZVJvd09mZj0wfWVsc2UgdC5uYXRpdmVDb2whPT12b2lkIDA/KHRoaXMubmF0aXZlQ29sPXQubmF0aXZlQ29sfHwwLHRoaXMubmF0aXZlQ29sT2ZmPXQubmF0aXZlQ29sT2ZmfHwwLHRoaXMubmF0aXZlUm93PXQubmF0aXZlUm93fHwwLHRoaXMubmF0aXZlUm93T2ZmPXQubmF0aXZlUm93T2ZmfHwwKTp0LmNvbCE9PXZvaWQgMD8odGhpcy5jb2w9dC5jb2wrZSx0aGlzLnJvdz10LnJvdytlKToodGhpcy5uYXRpdmVDb2w9MCx0aGlzLm5hdGl2ZUNvbE9mZj0wLHRoaXMubmF0aXZlUm93PTAsdGhpcy5uYXRpdmVSb3dPZmY9MCk7ZWxzZSB0aGlzLm5hdGl2ZUNvbD0wLHRoaXMubmF0aXZlQ29sT2ZmPTAsdGhpcy5uYXRpdmVSb3c9MCx0aGlzLm5hdGl2ZVJvd09mZj0wfXN0YXRpYyBhc0luc3RhbmNlKHIpe3JldHVybiByIGluc3RhbmNlb2Ygc3x8cj09bnVsbD9yOm5ldyBzKHIpfWdldCBjb2woKXtyZXR1cm4gdGhpcy5uYXRpdmVDb2wrTWF0aC5taW4odGhpcy5jb2xXaWR0aC0xLHRoaXMubmF0aXZlQ29sT2ZmKS90aGlzLmNvbFdpZHRofXNldCBjb2wocil7dGhpcy5uYXRpdmVDb2w9TWF0aC5mbG9vcihyKSx0aGlzLm5hdGl2ZUNvbE9mZj1NYXRoLmZsb29yKChyLXRoaXMubmF0aXZlQ29sKSp0aGlzLmNvbFdpZHRoKX1nZXQgcm93KCl7cmV0dXJuIHRoaXMubmF0aXZlUm93K01hdGgubWluKHRoaXMucm93SGVpZ2h0LTEsdGhpcy5uYXRpdmVSb3dPZmYpL3RoaXMucm93SGVpZ2h0fXNldCByb3cocil7dGhpcy5uYXRpdmVSb3c9TWF0aC5mbG9vcihyKSx0aGlzLm5hdGl2ZVJvd09mZj1NYXRoLmZsb29yKChyLXRoaXMubmF0aXZlUm93KSp0aGlzLnJvd0hlaWdodCl9Z2V0IGNvbFdpZHRoKCl7cmV0dXJuIHRoaXMud29ya3NoZWV0JiZ0aGlzLndvcmtzaGVldC5nZXRDb2x1bW4odGhpcy5uYXRpdmVDb2wrMSkmJnRoaXMud29ya3NoZWV0LmdldENvbHVtbih0aGlzLm5hdGl2ZUNvbCsxKS5pc0N1c3RvbVdpZHRoP01hdGguZmxvb3IoMWU0KnRoaXMud29ya3NoZWV0LmdldENvbHVtbih0aGlzLm5hdGl2ZUNvbCsxKS53aWR0aCk6NjRlNH1nZXQgcm93SGVpZ2h0KCl7cmV0dXJuIHRoaXMud29ya3NoZWV0JiZ0aGlzLndvcmtzaGVldC5nZXRSb3codGhpcy5uYXRpdmVSb3crMSkmJnRoaXMud29ya3NoZWV0LmdldFJvdyh0aGlzLm5hdGl2ZVJvdysxKS5oZWlnaHQ/TWF0aC5mbG9vcigxZTQqdGhpcy53b3Jrc2hlZXQuZ2V0Um93KHRoaXMubmF0aXZlUm93KzEpLmhlaWdodCk6MThlNH1nZXQgbW9kZWwoKXtyZXR1cm57bmF0aXZlQ29sOnRoaXMubmF0aXZlQ29sLG5hdGl2ZUNvbE9mZjp0aGlzLm5hdGl2ZUNvbE9mZixuYXRpdmVSb3c6dGhpcy5uYXRpdmVSb3csbmF0aXZlUm93T2ZmOnRoaXMubmF0aXZlUm93T2ZmfX1zZXQgbW9kZWwocil7dGhpcy5uYXRpdmVDb2w9ci5uYXRpdmVDb2wsdGhpcy5uYXRpdmVDb2xPZmY9ci5uYXRpdmVDb2xPZmYsdGhpcy5uYXRpdmVSb3c9ci5uYXRpdmVSb3csdGhpcy5uYXRpdmVSb3dPZmY9ci5uYXRpdmVSb3dPZmZ9fUUuZXhwb3J0cz1zfSx7Ii4uL3V0aWxzL2NvbC1jYWNoZSI6MTl9XSwzOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi91dGlscy9jb2wtY2FjaGUiKSxzPWEoIi4uL3V0aWxzL3VuZGVyLWRhc2giKSxvPWEoIi4vZW51bXMiKSx7c2xpZGVGb3JtdWxhOnJ9PWEoIi4uL3V0aWxzL3NoYXJlZC1mb3JtdWxhIiksdD1hKCIuL25vdGUiKTtjbGFzcyBle2NvbnN0cnVjdG9yKGksZixjKXtpZighaXx8IWYpdGhyb3cgbmV3IEVycm9yKCJBIENlbGwgbmVlZHMgYSBSb3ciKTt0aGlzLl9yb3c9aSx0aGlzLl9jb2x1bW49ZixtLnZhbGlkYXRlQWRkcmVzcyhjKSx0aGlzLl9hZGRyZXNzPWMsdGhpcy5fdmFsdWU9bC5jcmVhdGUoZS5UeXBlcy5OdWxsLHRoaXMpLHRoaXMuc3R5bGU9dGhpcy5fbWVyZ2VTdHlsZShpLnN0eWxlLGYuc3R5bGUse30pLHRoaXMuX21lcmdlQ291bnQ9MH1nZXQgd29ya3NoZWV0KCl7cmV0dXJuIHRoaXMuX3Jvdy53b3Jrc2hlZXR9Z2V0IHdvcmtib29rKCl7cmV0dXJuIHRoaXMuX3Jvdy53b3Jrc2hlZXQud29ya2Jvb2t9ZGVzdHJveSgpe2RlbGV0ZSB0aGlzLnN0eWxlLGRlbGV0ZSB0aGlzLl92YWx1ZSxkZWxldGUgdGhpcy5fcm93LGRlbGV0ZSB0aGlzLl9jb2x1bW4sZGVsZXRlIHRoaXMuX2FkZHJlc3N9Z2V0IG51bUZtdCgpe3JldHVybiB0aGlzLnN0eWxlLm51bUZtdH1zZXQgbnVtRm10KGkpe3RoaXMuc3R5bGUubnVtRm10PWl9Z2V0IGZvbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5mb250fXNldCBmb250KGkpe3RoaXMuc3R5bGUuZm9udD1pfWdldCBhbGlnbm1lbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5hbGlnbm1lbnR9c2V0IGFsaWdubWVudChpKXt0aGlzLnN0eWxlLmFsaWdubWVudD1pfWdldCBib3JkZXIoKXtyZXR1cm4gdGhpcy5zdHlsZS5ib3JkZXJ9c2V0IGJvcmRlcihpKXt0aGlzLnN0eWxlLmJvcmRlcj1pfWdldCBmaWxsKCl7cmV0dXJuIHRoaXMuc3R5bGUuZmlsbH1zZXQgZmlsbChpKXt0aGlzLnN0eWxlLmZpbGw9aX1nZXQgcHJvdGVjdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLnByb3RlY3Rpb259c2V0IHByb3RlY3Rpb24oaSl7dGhpcy5zdHlsZS5wcm90ZWN0aW9uPWl9X21lcmdlU3R5bGUoaSxmLGMpe2NvbnN0IHU9aSYmaS5udW1GbXR8fGYmJmYubnVtRm10O3UmJihjLm51bUZtdD11KTtjb25zdCBkPWkmJmkuZm9udHx8ZiYmZi5mb250O2QmJihjLmZvbnQ9ZCk7Y29uc3QgaD1pJiZpLmFsaWdubWVudHx8ZiYmZi5hbGlnbm1lbnQ7aCYmKGMuYWxpZ25tZW50PWgpO2NvbnN0IHc9aSYmaS5ib3JkZXJ8fGYmJmYuYm9yZGVyO3cmJihjLmJvcmRlcj13KTtjb25zdCBfPWkmJmkuZmlsbHx8ZiYmZi5maWxsO18mJihjLmZpbGw9Xyk7Y29uc3QgQT1pJiZpLnByb3RlY3Rpb258fGYmJmYucHJvdGVjdGlvbjtyZXR1cm4gQSYmKGMucHJvdGVjdGlvbj1BKSxjfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMuX2FkZHJlc3N9Z2V0IHJvdygpe3JldHVybiB0aGlzLl9yb3cubnVtYmVyfWdldCBjb2woKXtyZXR1cm4gdGhpcy5fY29sdW1uLm51bWJlcn1nZXQgJGNvbCRyb3coKXtyZXR1cm5gJCR7dGhpcy5fY29sdW1uLmxldHRlcn0kJHt0aGlzLnJvd31gfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLnR5cGV9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gdGhpcy5fdmFsdWUuZWZmZWN0aXZlVHlwZX10b0NzdlN0cmluZygpe3JldHVybiB0aGlzLl92YWx1ZS50b0NzdlN0cmluZygpfWFkZE1lcmdlUmVmKCl7dGhpcy5fbWVyZ2VDb3VudCsrfXJlbGVhc2VNZXJnZVJlZigpe3RoaXMuX21lcmdlQ291bnQtLX1nZXQgaXNNZXJnZWQoKXtyZXR1cm4gdGhpcy5fbWVyZ2VDb3VudD4wfHx0aGlzLnR5cGU9PT1lLlR5cGVzLk1lcmdlfW1lcmdlKGksZil7dGhpcy5fdmFsdWUucmVsZWFzZSgpLHRoaXMuX3ZhbHVlPWwuY3JlYXRlKGUuVHlwZXMuTWVyZ2UsdGhpcyxpKSxmfHwodGhpcy5zdHlsZT1pLnN0eWxlKX11bm1lcmdlKCl7dGhpcy50eXBlPT09ZS5UeXBlcy5NZXJnZSYmKHRoaXMuX3ZhbHVlLnJlbGVhc2UoKSx0aGlzLl92YWx1ZT1sLmNyZWF0ZShlLlR5cGVzLk51bGwsdGhpcyksdGhpcy5zdHlsZT10aGlzLl9tZXJnZVN0eWxlKHRoaXMuX3Jvdy5zdHlsZSx0aGlzLl9jb2x1bW4uc3R5bGUse30pKX1pc01lcmdlZFRvKGkpe3JldHVybiB0aGlzLl92YWx1ZS50eXBlPT09ZS5UeXBlcy5NZXJnZSYmdGhpcy5fdmFsdWUuaXNNZXJnZWRUbyhpKX1nZXQgbWFzdGVyKCl7cmV0dXJuIHRoaXMudHlwZT09PWUuVHlwZXMuTWVyZ2U/dGhpcy5fdmFsdWUubWFzdGVyOnRoaXN9Z2V0IGlzSHlwZXJsaW5rKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLnR5cGU9PT1lLlR5cGVzLkh5cGVybGlua31nZXQgaHlwZXJsaW5rKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLmh5cGVybGlua31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWUudmFsdWV9c2V0IHZhbHVlKGkpe3RoaXMudHlwZSE9PWUuVHlwZXMuTWVyZ2U/KHRoaXMuX3ZhbHVlLnJlbGVhc2UoKSx0aGlzLl92YWx1ZT1sLmNyZWF0ZShsLmdldFR5cGUoaSksdGhpcyxpKSk6dGhpcy5fdmFsdWUubWFzdGVyLnZhbHVlPWl9Z2V0IG5vdGUoKXtyZXR1cm4gdGhpcy5fY29tbWVudCYmdGhpcy5fY29tbWVudC5ub3RlfXNldCBub3RlKGkpe3RoaXMuX2NvbW1lbnQ9bmV3IHQoaSl9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5fdmFsdWUudG9TdHJpbmcoKX1nZXQgaHRtbCgpe3JldHVybiBzLmVzY2FwZUh0bWwodGhpcy50ZXh0KX10b1N0cmluZygpe3JldHVybiB0aGlzLnRleHR9X3VwZ3JhZGVUb0h5cGVybGluayhpKXt0aGlzLnR5cGU9PT1lLlR5cGVzLlN0cmluZyYmKHRoaXMuX3ZhbHVlPWwuY3JlYXRlKGUuVHlwZXMuSHlwZXJsaW5rLHRoaXMse3RleHQ6dGhpcy5fdmFsdWUudmFsdWUsaHlwZXJsaW5rOml9KSl9Z2V0IGZvcm11bGEoKXtyZXR1cm4gdGhpcy5fdmFsdWUuZm9ybXVsYX1nZXQgcmVzdWx0KCl7cmV0dXJuIHRoaXMuX3ZhbHVlLnJlc3VsdH1nZXQgZm9ybXVsYVR5cGUoKXtyZXR1cm4gdGhpcy5fdmFsdWUuZm9ybXVsYVR5cGV9Z2V0IGZ1bGxBZGRyZXNzKCl7Y29uc3R7d29ya3NoZWV0Oml9PXRoaXMuX3JvdztyZXR1cm57c2hlZXROYW1lOmkubmFtZSxhZGRyZXNzOnRoaXMuYWRkcmVzcyxyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm5hbWVzWzBdfXNldCBuYW1lKGkpe3RoaXMubmFtZXM9W2ldfWdldCBuYW1lcygpe3JldHVybiB0aGlzLndvcmtib29rLmRlZmluZWROYW1lcy5nZXROYW1lc0V4KHRoaXMuZnVsbEFkZHJlc3MpfXNldCBuYW1lcyhpKXtjb25zdHtkZWZpbmVkTmFtZXM6Zn09dGhpcy53b3JrYm9vaztmLnJlbW92ZUFsbE5hbWVzKHRoaXMuZnVsbEFkZHJlc3MpLGkuZm9yRWFjaChjPT57Zi5hZGRFeCh0aGlzLmZ1bGxBZGRyZXNzLGMpfSl9YWRkTmFtZShpKXt0aGlzLndvcmtib29rLmRlZmluZWROYW1lcy5hZGRFeCh0aGlzLmZ1bGxBZGRyZXNzLGkpfXJlbW92ZU5hbWUoaSl7dGhpcy53b3JrYm9vay5kZWZpbmVkTmFtZXMucmVtb3ZlRXgodGhpcy5mdWxsQWRkcmVzcyxpKX1yZW1vdmVBbGxOYW1lcygpe3RoaXMud29ya2Jvb2suZGVmaW5lZE5hbWVzLnJlbW92ZUFsbE5hbWVzKHRoaXMuZnVsbEFkZHJlc3MpfWdldCBfZGF0YVZhbGlkYXRpb25zKCl7cmV0dXJuIHRoaXMud29ya3NoZWV0LmRhdGFWYWxpZGF0aW9uc31nZXQgZGF0YVZhbGlkYXRpb24oKXtyZXR1cm4gdGhpcy5fZGF0YVZhbGlkYXRpb25zLmZpbmQodGhpcy5hZGRyZXNzKX1zZXQgZGF0YVZhbGlkYXRpb24oaSl7dGhpcy5fZGF0YVZhbGlkYXRpb25zLmFkZCh0aGlzLmFkZHJlc3MsaSl9Z2V0IG1vZGVsKCl7Y29uc3R7bW9kZWw6aX09dGhpcy5fdmFsdWU7cmV0dXJuIGkuc3R5bGU9dGhpcy5zdHlsZSx0aGlzLl9jb21tZW50JiYoaS5jb21tZW50PXRoaXMuX2NvbW1lbnQubW9kZWwpLGl9c2V0IG1vZGVsKGkpe2lmKHRoaXMuX3ZhbHVlLnJlbGVhc2UoKSx0aGlzLl92YWx1ZT1sLmNyZWF0ZShpLnR5cGUsdGhpcyksdGhpcy5fdmFsdWUubW9kZWw9aSxpLmNvbW1lbnQpc3dpdGNoKGkuY29tbWVudC50eXBlKXtjYXNlIm5vdGUiOnRoaXMuX2NvbW1lbnQ9dC5mcm9tTW9kZWwoaS5jb21tZW50KX1pLnN0eWxlP3RoaXMuc3R5bGU9aS5zdHlsZTp0aGlzLnN0eWxlPXt9fX1lLlR5cGVzPW8uVmFsdWVUeXBlO2NvbnN0IGw9e2dldFR5cGU6bj0+bj09bnVsbD9lLlR5cGVzLk51bGw6biBpbnN0YW5jZW9mIFN0cmluZ3x8dHlwZW9mIG49PSJzdHJpbmciP2UuVHlwZXMuU3RyaW5nOnR5cGVvZiBuPT0ibnVtYmVyIj9lLlR5cGVzLk51bWJlcjp0eXBlb2Ygbj09ImJvb2xlYW4iP2UuVHlwZXMuQm9vbGVhbjpuIGluc3RhbmNlb2YgRGF0ZT9lLlR5cGVzLkRhdGU6bi50ZXh0JiZuLmh5cGVybGluaz9lLlR5cGVzLkh5cGVybGluazpuLmZvcm11bGF8fG4uc2hhcmVkRm9ybXVsYT9lLlR5cGVzLkZvcm11bGE6bi5yaWNoVGV4dD9lLlR5cGVzLlJpY2hUZXh0Om4uc2hhcmVkU3RyaW5nP2UuVHlwZXMuU2hhcmVkU3RyaW5nOm4uZXJyb3I/ZS5UeXBlcy5FcnJvcjplLlR5cGVzLkpTT04sdHlwZXM6W3t0OmUuVHlwZXMuTnVsbCxmOmNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5OdWxsfX1nZXQgdmFsdWUoKXtyZXR1cm4gbnVsbH1zZXQgdmFsdWUobil7fWdldCB0eXBlKCl7cmV0dXJuIGUuVHlwZXMuTnVsbH1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBlLlR5cGVzLk51bGx9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuIiJ9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiIifX19LHt0OmUuVHlwZXMuTnVtYmVyLGY6Y2xhc3N7Y29uc3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXthZGRyZXNzOm4uYWRkcmVzcyx0eXBlOmUuVHlwZXMuTnVtYmVyLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5OdW1iZXJ9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gZS5UeXBlcy5OdW1iZXJ9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWUudG9TdHJpbmcoKX1yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWUudG9TdHJpbmcoKX19fSx7dDplLlR5cGVzLlN0cmluZyxmOmNsYXNze2NvbnN0cnVjdG9yKG4saSl7dGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLlN0cmluZyx2YWx1ZTppfX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZX1zZXQgdmFsdWUobil7dGhpcy5tb2RlbC52YWx1ZT1ufWdldCB0eXBlKCl7cmV0dXJuIGUuVHlwZXMuU3RyaW5nfWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuU3RyaW5nfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhuKXt0aGlzLm1vZGVsLmFkZHJlc3M9bn10b0NzdlN0cmluZygpe3JldHVybmAiJHt0aGlzLm1vZGVsLnZhbHVlLnJlcGxhY2UoLyIvZywnIiInKX0iYH1yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9fX0se3Q6ZS5UeXBlcy5EYXRlLGY6Y2xhc3N7Y29uc3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXthZGRyZXNzOm4uYWRkcmVzcyx0eXBlOmUuVHlwZXMuRGF0ZSx2YWx1ZTppfX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZX1zZXQgdmFsdWUobil7dGhpcy5tb2RlbC52YWx1ZT1ufWdldCB0eXBlKCl7cmV0dXJuIGUuVHlwZXMuRGF0ZX1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBlLlR5cGVzLkRhdGV9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWUudG9JU09TdHJpbmcoKX1yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWUudG9TdHJpbmcoKX19fSx7dDplLlR5cGVzLkh5cGVybGluayxmOmNsYXNze2NvbnN0cnVjdG9yKG4saSl7dGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLkh5cGVybGluayx0ZXh0Omk/aS50ZXh0OnZvaWQgMCxoeXBlcmxpbms6aT9pLmh5cGVybGluazp2b2lkIDB9LGkmJmkudG9vbHRpcCYmKHRoaXMubW9kZWwudG9vbHRpcD1pLnRvb2x0aXApfWdldCB2YWx1ZSgpe2NvbnN0IG49e3RleHQ6dGhpcy5tb2RlbC50ZXh0LGh5cGVybGluazp0aGlzLm1vZGVsLmh5cGVybGlua307cmV0dXJuIHRoaXMubW9kZWwudG9vbHRpcCYmKG4udG9vbHRpcD10aGlzLm1vZGVsLnRvb2x0aXApLG59c2V0IHZhbHVlKG4pe3RoaXMubW9kZWw9e3RleHQ6bi50ZXh0LGh5cGVybGluazpuLmh5cGVybGlua30sbi50b29sdGlwJiYodGhpcy5tb2RlbC50b29sdGlwPW4udG9vbHRpcCl9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5tb2RlbC50ZXh0fXNldCB0ZXh0KG4pe3RoaXMubW9kZWwudGV4dD1ufWdldCBoeXBlcmxpbmsoKXtyZXR1cm4gdGhpcy5tb2RlbC5oeXBlcmxpbmt9c2V0IGh5cGVybGluayhuKXt0aGlzLm1vZGVsLmh5cGVybGluaz1ufWdldCB0eXBlKCl7cmV0dXJuIGUuVHlwZXMuSHlwZXJsaW5rfWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuSHlwZXJsaW5rfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhuKXt0aGlzLm1vZGVsLmFkZHJlc3M9bn10b0NzdlN0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLmh5cGVybGlua31yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudGV4dH19fSx7dDplLlR5cGVzLkZvcm11bGEsZjpjbGFzc3tjb25zdHJ1Y3RvcihuLGkpe3RoaXMuY2VsbD1uLHRoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5Gb3JtdWxhLHNoYXJlVHlwZTppP2kuc2hhcmVUeXBlOnZvaWQgMCxyZWY6aT9pLnJlZjp2b2lkIDAsZm9ybXVsYTppP2kuZm9ybXVsYTp2b2lkIDAsc2hhcmVkRm9ybXVsYTppP2kuc2hhcmVkRm9ybXVsYTp2b2lkIDAscmVzdWx0Omk/aS5yZXN1bHQ6dm9pZCAwfX1fY29weU1vZGVsKG4pe2NvbnN0IGk9e30sZj1jPT57Y29uc3QgdT1uW2NdO3UmJihpW2NdPXUpfTtyZXR1cm4gZigiZm9ybXVsYSIpLGYoInJlc3VsdCIpLGYoInJlZiIpLGYoInNoYXJlVHlwZSIpLGYoInNoYXJlZEZvcm11bGEiKSxpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl9jb3B5TW9kZWwodGhpcy5tb2RlbCl9c2V0IHZhbHVlKG4pe3RoaXMubW9kZWw9dGhpcy5fY29weU1vZGVsKG4pfXZhbGlkYXRlKG4pe3N3aXRjaChsLmdldFR5cGUobikpe2Nhc2UgZS5UeXBlcy5OdWxsOmNhc2UgZS5UeXBlcy5TdHJpbmc6Y2FzZSBlLlR5cGVzLk51bWJlcjpjYXNlIGUuVHlwZXMuRGF0ZTpicmVhaztjYXNlIGUuVHlwZXMuSHlwZXJsaW5rOmNhc2UgZS5UeXBlcy5Gb3JtdWxhOmRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcHJvY2VzcyB0aGF0IHR5cGUgb2YgcmVzdWx0IHZhbHVlIil9fWdldCBkZXBlbmRlbmNpZXMoKXtyZXR1cm57cmFuZ2VzOnRoaXMuZm9ybXVsYS5tYXRjaCgvKFthLXpBLVowLTldKyEpP1tBLVpdezEsM31cZHsxLDR9OltBLVpdezEsM31cZHsxLDR9L2cpLGNlbGxzOnRoaXMuZm9ybXVsYS5yZXBsYWNlKC8oW2EtekEtWjAtOV0rISk/W0EtWl17MSwzfVxkezEsNH06W0EtWl17MSwzfVxkezEsNH0vZywiIikubWF0Y2goLyhbYS16QS1aMC05XSshKT9bQS1aXXsxLDN9XGR7MSw0fS9nKX19Z2V0IGZvcm11bGEoKXtyZXR1cm4gdGhpcy5tb2RlbC5mb3JtdWxhfHx0aGlzLl9nZXRUcmFuc2xhdGVkRm9ybXVsYSgpfXNldCBmb3JtdWxhKG4pe3RoaXMubW9kZWwuZm9ybXVsYT1ufWdldCBmb3JtdWxhVHlwZSgpe3JldHVybiB0aGlzLm1vZGVsLmZvcm11bGE/by5Gb3JtdWxhVHlwZS5NYXN0ZXI6dGhpcy5tb2RlbC5zaGFyZWRGb3JtdWxhP28uRm9ybXVsYVR5cGUuU2hhcmVkOm8uRm9ybXVsYVR5cGUuTm9uZX1nZXQgcmVzdWx0KCl7cmV0dXJuIHRoaXMubW9kZWwucmVzdWx0fXNldCByZXN1bHQobil7dGhpcy5tb2RlbC5yZXN1bHQ9bn1nZXQgdHlwZSgpe3JldHVybiBlLlR5cGVzLkZvcm11bGF9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtjb25zdCBuPXRoaXMubW9kZWwucmVzdWx0O3JldHVybiBuPT1udWxsP28uVmFsdWVUeXBlLk51bGw6biBpbnN0YW5jZW9mIFN0cmluZ3x8dHlwZW9mIG49PSJzdHJpbmciP28uVmFsdWVUeXBlLlN0cmluZzp0eXBlb2Ygbj09Im51bWJlciI/by5WYWx1ZVR5cGUuTnVtYmVyOm4gaW5zdGFuY2VvZiBEYXRlP28uVmFsdWVUeXBlLkRhdGU6bi50ZXh0JiZuLmh5cGVybGluaz9vLlZhbHVlVHlwZS5IeXBlcmxpbms6bi5mb3JtdWxhP28uVmFsdWVUeXBlLkZvcm11bGE6by5WYWx1ZVR5cGUuTnVsbH1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3Mobil7dGhpcy5tb2RlbC5hZGRyZXNzPW59X2dldFRyYW5zbGF0ZWRGb3JtdWxhKCl7aWYoIXRoaXMuX3RyYW5zbGF0ZWRGb3JtdWxhJiZ0aGlzLm1vZGVsLnNoYXJlZEZvcm11bGEpe2NvbnN0e3dvcmtzaGVldDpufT10aGlzLmNlbGwsaT1uLmZpbmRDZWxsKHRoaXMubW9kZWwuc2hhcmVkRm9ybXVsYSk7dGhpcy5fdHJhbnNsYXRlZEZvcm11bGE9aSYmcihpLmZvcm11bGEsaS5hZGRyZXNzLHRoaXMubW9kZWwuYWRkcmVzcyl9cmV0dXJuIHRoaXMuX3RyYW5zbGF0ZWRGb3JtdWxhfXRvQ3N2U3RyaW5nKCl7cmV0dXJuIiIrKHRoaXMubW9kZWwucmVzdWx0fHwiIil9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnJlc3VsdD90aGlzLm1vZGVsLnJlc3VsdC50b1N0cmluZygpOiIifX19LHt0OmUuVHlwZXMuTWVyZ2UsZjpjbGFzc3tjb25zdHJ1Y3RvcihuLGkpe3RoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5NZXJnZSxtYXN0ZXI6aT9pLmFkZHJlc3M6dm9pZCAwfSx0aGlzLl9tYXN0ZXI9aSxpJiZpLmFkZE1lcmdlUmVmKCl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX21hc3Rlci52YWx1ZX1zZXQgdmFsdWUobil7biBpbnN0YW5jZW9mIGU/KHRoaXMuX21hc3RlciYmdGhpcy5fbWFzdGVyLnJlbGVhc2VNZXJnZVJlZigpLG4uYWRkTWVyZ2VSZWYoKSx0aGlzLl9tYXN0ZXI9bik6dGhpcy5fbWFzdGVyLnZhbHVlPW59aXNNZXJnZWRUbyhuKXtyZXR1cm4gbj09PXRoaXMuX21hc3Rlcn1nZXQgbWFzdGVyKCl7cmV0dXJuIHRoaXMuX21hc3Rlcn1nZXQgdHlwZSgpe3JldHVybiBlLlR5cGVzLk1lcmdlfWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIHRoaXMuX21hc3Rlci5lZmZlY3RpdmVUeXBlfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhuKXt0aGlzLm1vZGVsLmFkZHJlc3M9bn10b0NzdlN0cmluZygpe3JldHVybiIifXJlbGVhc2UoKXt0aGlzLl9tYXN0ZXIucmVsZWFzZU1lcmdlUmVmKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpfX19LHt0OmUuVHlwZXMuSlNPTixmOmNsYXNze2NvbnN0cnVjdG9yKG4saSl7dGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLlN0cmluZyx2YWx1ZTpKU09OLnN0cmluZ2lmeShpKSxyYXdWYWx1ZTppfX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5tb2RlbC5yYXdWYWx1ZX1zZXQgdmFsdWUobil7dGhpcy5tb2RlbC5yYXdWYWx1ZT1uLHRoaXMubW9kZWwudmFsdWU9SlNPTi5zdHJpbmdpZnkobil9Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TdHJpbmd9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TdHJpbmd9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfX19LHt0OmUuVHlwZXMuU2hhcmVkU3RyaW5nLGY6Y2xhc3N7Y29uc3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXthZGRyZXNzOm4uYWRkcmVzcyx0eXBlOmUuVHlwZXMuU2hhcmVkU3RyaW5nLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TaGFyZWRTdHJpbmd9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gZS5UeXBlcy5TaGFyZWRTdHJpbmd9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWUudG9TdHJpbmcoKX1yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWUudG9TdHJpbmcoKX19fSx7dDplLlR5cGVzLlJpY2hUZXh0LGY6Y2xhc3N7Y29uc3RydWN0b3IobixpKXt0aGlzLm1vZGVsPXthZGRyZXNzOm4uYWRkcmVzcyx0eXBlOmUuVHlwZXMuU3RyaW5nLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dC5tYXAobj0+bi50ZXh0KS5qb2luKCIiKX1nZXQgdHlwZSgpe3JldHVybiBlLlR5cGVzLlJpY2hUZXh0fWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuUmljaFRleHR9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKG4pe3RoaXMubW9kZWwuYWRkcmVzcz1ufXRvQ3N2U3RyaW5nKCl7cmV0dXJuYCIke3RoaXMudGV4dC5yZXBsYWNlKC8iL2csJyIiJyl9ImB9cmVsZWFzZSgpe319fSx7dDplLlR5cGVzLkJvb2xlYW4sZjpjbGFzc3tjb25zdHJ1Y3RvcihuLGkpe3RoaXMubW9kZWw9e2FkZHJlc3M6bi5hZGRyZXNzLHR5cGU6ZS5UeXBlcy5Cb29sZWFuLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5Cb29sZWFufWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGUuVHlwZXMuQm9vbGVhbn1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3Mobil7dGhpcy5tb2RlbC5hZGRyZXNzPW59dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZT8xOjB9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLnRvU3RyaW5nKCl9fX0se3Q6ZS5UeXBlcy5FcnJvcixmOmNsYXNze2NvbnN0cnVjdG9yKG4saSl7dGhpcy5tb2RlbD17YWRkcmVzczpuLmFkZHJlc3MsdHlwZTplLlR5cGVzLkVycm9yLHZhbHVlOml9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShuKXt0aGlzLm1vZGVsLnZhbHVlPW59Z2V0IHR5cGUoKXtyZXR1cm4gZS5UeXBlcy5FcnJvcn1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBlLlR5cGVzLkVycm9yfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhuKXt0aGlzLm1vZGVsLmFkZHJlc3M9bn10b0NzdlN0cmluZygpe3JldHVybiB0aGlzLnRvU3RyaW5nKCl9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLmVycm9yLnRvU3RyaW5nKCl9fX1dLnJlZHVjZSgobixpKT0+KG5baS50XT1pLmYsbiksW10pLGNyZWF0ZShuLGksZil7Y29uc3QgYz10aGlzLnR5cGVzW25dO2lmKCFjKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSBWYWx1ZSBvZiB0eXBlICIrbik7cmV0dXJuIG5ldyBjKGksZil9fTtFLmV4cG9ydHM9ZX0seyIuLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi91dGlscy9zaGFyZWQtZm9ybXVsYSI6MjMsIi4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuL2VudW1zIjo3LCIuL25vdGUiOjl9XSw0OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi91dGlscy91bmRlci1kYXNoIikscz1hKCIuL2VudW1zIiksbz1hKCIuLi91dGlscy9jb2wtY2FjaGUiKTtjbGFzcyBye2NvbnN0cnVjdG9yKGUsbCxuKXt0aGlzLl93b3Jrc2hlZXQ9ZSx0aGlzLl9udW1iZXI9bCxuIT09ITEmJih0aGlzLmRlZm49bil9Z2V0IG51bWJlcigpe3JldHVybiB0aGlzLl9udW1iZXJ9Z2V0IHdvcmtzaGVldCgpe3JldHVybiB0aGlzLl93b3Jrc2hlZXR9Z2V0IGxldHRlcigpe3JldHVybiBvLm4ybCh0aGlzLl9udW1iZXIpfWdldCBpc0N1c3RvbVdpZHRoKCl7cmV0dXJuIHRoaXMud2lkdGghPT12b2lkIDAmJnRoaXMud2lkdGghPT05fWdldCBkZWZuKCl7cmV0dXJue2hlYWRlcjp0aGlzLl9oZWFkZXIsa2V5OnRoaXMua2V5LHdpZHRoOnRoaXMud2lkdGgsc3R5bGU6dGhpcy5zdHlsZSxoaWRkZW46dGhpcy5oaWRkZW4sb3V0bGluZUxldmVsOnRoaXMub3V0bGluZUxldmVsfX1zZXQgZGVmbihlKXtlPyh0aGlzLmtleT1lLmtleSx0aGlzLndpZHRoPWUud2lkdGghPT12b2lkIDA/ZS53aWR0aDo5LHRoaXMub3V0bGluZUxldmVsPWUub3V0bGluZUxldmVsLGUuc3R5bGU/dGhpcy5zdHlsZT1lLnN0eWxlOnRoaXMuc3R5bGU9e30sdGhpcy5oZWFkZXI9ZS5oZWFkZXIsdGhpcy5faGlkZGVuPSEhZS5oaWRkZW4pOihkZWxldGUgdGhpcy5faGVhZGVyLGRlbGV0ZSB0aGlzLl9rZXksZGVsZXRlIHRoaXMud2lkdGgsdGhpcy5zdHlsZT17fSx0aGlzLm91dGxpbmVMZXZlbD0wKX1nZXQgaGVhZGVycygpe3JldHVybiB0aGlzLl9oZWFkZXImJnRoaXMuX2hlYWRlciBpbnN0YW5jZW9mIEFycmF5P3RoaXMuX2hlYWRlcjpbdGhpcy5faGVhZGVyXX1nZXQgaGVhZGVyKCl7cmV0dXJuIHRoaXMuX2hlYWRlcn1zZXQgaGVhZGVyKGUpe2UhPT12b2lkIDA/KHRoaXMuX2hlYWRlcj1lLHRoaXMuaGVhZGVycy5mb3JFYWNoKChsLG4pPT57dGhpcy5fd29ya3NoZWV0LmdldENlbGwobisxLHRoaXMubnVtYmVyKS52YWx1ZT1sfSkpOnRoaXMuX2hlYWRlcj12b2lkIDB9Z2V0IGtleSgpe3JldHVybiB0aGlzLl9rZXl9c2V0IGtleShlKXsodGhpcy5fa2V5JiZ0aGlzLl93b3Jrc2hlZXQuZ2V0Q29sdW1uS2V5KHRoaXMuX2tleSkpPT09dGhpcyYmdGhpcy5fd29ya3NoZWV0LmRlbGV0ZUNvbHVtbktleSh0aGlzLl9rZXkpLHRoaXMuX2tleT1lLGUmJnRoaXMuX3dvcmtzaGVldC5zZXRDb2x1bW5LZXkodGhpcy5fa2V5LHRoaXMpfWdldCBoaWRkZW4oKXtyZXR1cm4hIXRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGUpe3RoaXMuX2hpZGRlbj1lfWdldCBvdXRsaW5lTGV2ZWwoKXtyZXR1cm4gdGhpcy5fb3V0bGluZUxldmVsfHwwfXNldCBvdXRsaW5lTGV2ZWwoZSl7dGhpcy5fb3V0bGluZUxldmVsPWV9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiEhKHRoaXMuX291dGxpbmVMZXZlbCYmdGhpcy5fb3V0bGluZUxldmVsPj10aGlzLl93b3Jrc2hlZXQucHJvcGVydGllcy5vdXRsaW5lTGV2ZWxDb2wpfXRvU3RyaW5nKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtrZXk6dGhpcy5rZXksd2lkdGg6dGhpcy53aWR0aCxoZWFkZXJzOnRoaXMuaGVhZGVycy5sZW5ndGg/dGhpcy5oZWFkZXJzOnZvaWQgMH0pfWVxdWl2YWxlbnRUbyhlKXtyZXR1cm4gdGhpcy53aWR0aD09PWUud2lkdGgmJnRoaXMuaGlkZGVuPT09ZS5oaWRkZW4mJnRoaXMub3V0bGluZUxldmVsPT09ZS5vdXRsaW5lTGV2ZWwmJm0uaXNFcXVhbCh0aGlzLnN0eWxlLGUuc3R5bGUpfWdldCBpc0RlZmF1bHQoKXtpZih0aGlzLmlzQ3VzdG9tV2lkdGh8fHRoaXMuaGlkZGVufHx0aGlzLm91dGxpbmVMZXZlbClyZXR1cm4hMTtjb25zdCBlPXRoaXMuc3R5bGU7cmV0dXJuIWV8fCEoZS5mb250fHxlLm51bUZtdHx8ZS5hbGlnbm1lbnR8fGUuYm9yZGVyfHxlLmZpbGx8fGUucHJvdGVjdGlvbil9Z2V0IGhlYWRlckNvdW50KCl7cmV0dXJuIHRoaXMuaGVhZGVycy5sZW5ndGh9ZWFjaENlbGwoZSxsKXtjb25zdCBuPXRoaXMubnVtYmVyO2x8fChsPWUsZT1udWxsKSx0aGlzLl93b3Jrc2hlZXQuZWFjaFJvdyhlLChpLGYpPT57bChpLmdldENlbGwobiksZil9KX1nZXQgdmFsdWVzKCl7Y29uc3QgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQ2VsbCgobCxuKT0+e2wmJmwudHlwZSE9PXMuVmFsdWVUeXBlLk51bGwmJihlW25dPWwudmFsdWUpfSksZX1zZXQgdmFsdWVzKGUpe2lmKCFlKXJldHVybjtjb25zdCBsPXRoaXMubnVtYmVyO2xldCBuPTA7ZS5oYXNPd25Qcm9wZXJ0eSgiMCIpJiYobj0xKSxlLmZvckVhY2goKGksZik9Pnt0aGlzLl93b3Jrc2hlZXQuZ2V0Q2VsbChmK24sbCkudmFsdWU9aX0pfV9hcHBseVN0eWxlKGUsbCl7cmV0dXJuIHRoaXMuc3R5bGVbZV09bCx0aGlzLmVhY2hDZWxsKG49PntuW2VdPWx9KSxsfWdldCBudW1GbXQoKXtyZXR1cm4gdGhpcy5zdHlsZS5udW1GbXR9c2V0IG51bUZtdChlKXt0aGlzLl9hcHBseVN0eWxlKCJudW1GbXQiLGUpfWdldCBmb250KCl7cmV0dXJuIHRoaXMuc3R5bGUuZm9udH1zZXQgZm9udChlKXt0aGlzLl9hcHBseVN0eWxlKCJmb250IixlKX1nZXQgYWxpZ25tZW50KCl7cmV0dXJuIHRoaXMuc3R5bGUuYWxpZ25tZW50fXNldCBhbGlnbm1lbnQoZSl7dGhpcy5fYXBwbHlTdHlsZSgiYWxpZ25tZW50IixlKX1nZXQgcHJvdGVjdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLnByb3RlY3Rpb259c2V0IHByb3RlY3Rpb24oZSl7dGhpcy5fYXBwbHlTdHlsZSgicHJvdGVjdGlvbiIsZSl9Z2V0IGJvcmRlcigpe3JldHVybiB0aGlzLnN0eWxlLmJvcmRlcn1zZXQgYm9yZGVyKGUpe3RoaXMuX2FwcGx5U3R5bGUoImJvcmRlciIsZSl9Z2V0IGZpbGwoKXtyZXR1cm4gdGhpcy5zdHlsZS5maWxsfXNldCBmaWxsKGUpe3RoaXMuX2FwcGx5U3R5bGUoImZpbGwiLGUpfXN0YXRpYyB0b01vZGVsKGUpe2NvbnN0IGw9W107bGV0IG49bnVsbDtyZXR1cm4gZSYmZS5mb3JFYWNoKChpLGYpPT57aS5pc0RlZmF1bHQ/biYmKG49bnVsbCk6biYmaS5lcXVpdmFsZW50VG8obik/bi5tYXg9ZisxOihuPXttaW46ZisxLG1heDpmKzEsd2lkdGg6aS53aWR0aCE9PXZvaWQgMD9pLndpZHRoOjksc3R5bGU6aS5zdHlsZSxpc0N1c3RvbVdpZHRoOmkuaXNDdXN0b21XaWR0aCxoaWRkZW46aS5oaWRkZW4sb3V0bGluZUxldmVsOmkub3V0bGluZUxldmVsLGNvbGxhcHNlZDppLmNvbGxhcHNlZH0sbC5wdXNoKG4pKX0pLGwubGVuZ3RoP2w6dm9pZCAwfXN0YXRpYyBmcm9tTW9kZWwoZSxsKXtjb25zdCBuPVtdO2xldCBpPTEsZj0wO2ZvcihsPShsPWx8fFtdKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGMubWluLXUubWlufSk7ZjxsLmxlbmd0aDspe2NvbnN0IGM9bFtmKytdO2Zvcig7aTxjLm1pbjspbi5wdXNoKG5ldyByKGUsaSsrKSk7Zm9yKDtpPD1jLm1heDspbi5wdXNoKG5ldyByKGUsaSsrLGMpKX1yZXR1cm4gbi5sZW5ndGg/bjpudWxsfX1FLmV4cG9ydHM9cn0seyIuLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi91dGlscy91bmRlci1kYXNoIjoyNiwiLi9lbnVtcyI6N31dLDU6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IobSl7dGhpcy5tb2RlbD1tfHx7fX1hZGQobSxzKXtyZXR1cm4gdGhpcy5tb2RlbFttXT1zfWZpbmQobSl7cmV0dXJuIHRoaXMubW9kZWxbbV19cmVtb3ZlKG0pe3RoaXMubW9kZWxbbV09dm9pZCAwfX19LHt9XSw2OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi91dGlscy91bmRlci1kYXNoIikscz1hKCIuLi91dGlscy9jb2wtY2FjaGUiKSxvPWEoIi4uL3V0aWxzL2NlbGwtbWF0cml4Iikscj1hKCIuL3JhbmdlIiksdD0vWyRdKFx3KylbJF0oXGQrKSg6WyRdKFx3KylbJF0oXGQrKSk/LztFLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hdHJpeE1hcD17fX1nZXRNYXRyaXgoZSl7cmV0dXJuIHRoaXMubWF0cml4TWFwW2VdfHwodGhpcy5tYXRyaXhNYXBbZV09bmV3IG8pfWFkZChlLGwpe2NvbnN0IG49cy5kZWNvZGVFeChlKTt0aGlzLmFkZEV4KG4sbCl9YWRkRXgoZSxsKXtjb25zdCBuPXRoaXMuZ2V0TWF0cml4KGwpO2lmKGUudG9wKWZvcihsZXQgaT1lLmxlZnQ7aTw9ZS5yaWdodDtpKyspZm9yKGxldCBmPWUudG9wO2Y8PWUuYm90dG9tO2YrKyl7Y29uc3QgYz17c2hlZXROYW1lOmUuc2hlZXROYW1lLGFkZHJlc3M6cy5uMmwoaSkrZixyb3c6Zixjb2w6aX07bi5hZGRDZWxsRXgoYyl9ZWxzZSBuLmFkZENlbGxFeChlKX1yZW1vdmUoZSxsKXtjb25zdCBuPXMuZGVjb2RlRXgoZSk7dGhpcy5yZW1vdmVFeChuLGwpfXJlbW92ZUV4KGUsbCl7dGhpcy5nZXRNYXRyaXgobCkucmVtb3ZlQ2VsbEV4KGUpfXJlbW92ZUFsbE5hbWVzKGUpe20uZWFjaCh0aGlzLm1hdHJpeE1hcCxsPT57bC5yZW1vdmVDZWxsRXgoZSl9KX1mb3JFYWNoKGUpe20uZWFjaCh0aGlzLm1hdHJpeE1hcCwobCxuKT0+e2wuZm9yRWFjaChpPT57ZShuLGkpfSl9KX1nZXROYW1lcyhlKXtyZXR1cm4gdGhpcy5nZXROYW1lc0V4KHMuZGVjb2RlRXgoZSkpfWdldE5hbWVzRXgoZSl7cmV0dXJuIG0ubWFwKHRoaXMubWF0cml4TWFwLChsLG4pPT5sLmZpbmRDZWxsRXgoZSkmJm4pLmZpbHRlcihCb29sZWFuKX1fZXhwbG9yZShlLGwpe2wubWFyaz0hMTtjb25zdHtzaGVldE5hbWU6bn09bCxpPW5ldyByKGwucm93LGwuY29sLGwucm93LGwuY29sLG4pO2xldCBmLGM7ZnVuY3Rpb24gdShoLHcpe2NvbnN0IF89ZS5maW5kQ2VsbEF0KG4saCxsLmNvbCk7cmV0dXJuISghX3x8IV8ubWFyaykmJihpW3ddPWgsXy5tYXJrPSExLCEwKX1mb3IoYz1sLnJvdy0xO3UoYywidG9wIik7Yy0tKTtmb3IoYz1sLnJvdysxO3UoYywiYm90dG9tIik7YysrKTtmdW5jdGlvbiBkKGgsdyl7Y29uc3QgXz1bXTtmb3IoYz1pLnRvcDtjPD1pLmJvdHRvbTtjKyspe2NvbnN0IEE9ZS5maW5kQ2VsbEF0KG4sYyxoKTtpZighQXx8IUEubWFyaylyZXR1cm4hMTtfLnB1c2goQSl9aVt3XT1oO2ZvcihsZXQgQT0wO0E8Xy5sZW5ndGg7QSsrKV9bQV0ubWFyaz0hMTtyZXR1cm4hMH1mb3IoZj1sLmNvbC0xO2QoZiwibGVmdCIpO2YtLSk7Zm9yKGY9bC5jb2wrMTtkKGYsInJpZ2h0Iik7ZisrKTtyZXR1cm4gaX1nZXRSYW5nZXMoZSxsKXtyZXR1cm4obD1sfHx0aGlzLm1hdHJpeE1hcFtlXSk/KGwuZm9yRWFjaChuPT57bi5tYXJrPSEwfSkse25hbWU6ZSxyYW5nZXM6bC5tYXAobj0+bi5tYXJrJiZ0aGlzLl9leHBsb3JlKGwsbikpLmZpbHRlcihCb29sZWFuKS5tYXAobj0+bi4kc2hvcnRSYW5nZSl9KTp7bmFtZTplLHJhbmdlczpbXX19bm9ybWFsaXNlTWF0cml4KGUsbCl7ZS5mb3JFYWNoSW5TaGVldChsLChuLGksZik9PntuJiYobi5yb3c9PT1pJiZuLmNvbD09PWZ8fChuLnJvdz1pLG4uY29sPWYsbi5hZGRyZXNzPXMubjJsKGYpK2kpKX0pfXNwbGljZVJvd3MoZSxsLG4saSl7bS5lYWNoKHRoaXMubWF0cml4TWFwLGY9PntmLnNwbGljZVJvd3MoZSxsLG4saSksdGhpcy5ub3JtYWxpc2VNYXRyaXgoZixlKX0pfXNwbGljZUNvbHVtbnMoZSxsLG4saSl7bS5lYWNoKHRoaXMubWF0cml4TWFwLGY9PntmLnNwbGljZUNvbHVtbnMoZSxsLG4saSksdGhpcy5ub3JtYWxpc2VNYXRyaXgoZixlKX0pfWdldCBtb2RlbCgpe3JldHVybiBtLm1hcCh0aGlzLm1hdHJpeE1hcCwoZSxsKT0+dGhpcy5nZXRSYW5nZXMobCxlKSkuZmlsdGVyKGU9PmUucmFuZ2VzLmxlbmd0aCl9c2V0IG1vZGVsKGUpe2NvbnN0IGw9dGhpcy5tYXRyaXhNYXA9e307ZS5mb3JFYWNoKG49Pntjb25zdCBpPWxbbi5uYW1lXT1uZXcgbztuLnJhbmdlcy5mb3JFYWNoKGY9Pnt0LnRlc3QoZi5zcGxpdCgiISIpLnBvcCgpfHwiIikmJmkuYWRkQ2VsbChmKX0pfSl9fX0seyIuLi91dGlscy9jZWxsLW1hdHJpeCI6MTgsIi4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuL3JhbmdlIjoxMH1dLDc6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9e1ZhbHVlVHlwZTp7TnVsbDowLE1lcmdlOjEsTnVtYmVyOjIsU3RyaW5nOjMsRGF0ZTo0LEh5cGVybGluazo1LEZvcm11bGE6NixTaGFyZWRTdHJpbmc6NyxSaWNoVGV4dDo4LEJvb2xlYW46OSxFcnJvcjoxMH0sRm9ybXVsYVR5cGU6e05vbmU6MCxNYXN0ZXI6MSxTaGFyZWQ6Mn0sUmVsYXRpb25zaGlwVHlwZTp7Tm9uZTowLE9mZmljZURvY3VtZW50OjEsV29ya3NoZWV0OjIsQ2FsY0NoYWluOjMsU2hhcmVkU3RyaW5nczo0LFN0eWxlczo1LFRoZW1lOjYsSHlwZXJsaW5rOjd9LERvY3VtZW50VHlwZTp7WGxzeDoxfSxSZWFkaW5nT3JkZXI6e0xlZnRUb1JpZ2h0OjEsUmlnaHRUb0xlZnQ6Mn0sRXJyb3JWYWx1ZTp7Tm90QXBwbGljYWJsZToiI04vQSIsUmVmOiIjUkVGISIsTmFtZToiI05BTUU/IixEaXZaZXJvOiIjRElWLzAhIixOdWxsOiIjTlVMTCEiLFZhbHVlOiIjVkFMVUUhIixOdW06IiNOVU0hIn19fSx7fV0sODpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vdXRpbHMvY29sLWNhY2hlIikscz1hKCIuL2FuY2hvciIpO0UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihvLHIpe3RoaXMud29ya3NoZWV0PW8sdGhpcy5tb2RlbD1yfWdldCBtb2RlbCgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiYmFja2dyb3VuZCI6cmV0dXJue3R5cGU6dGhpcy50eXBlLGltYWdlSWQ6dGhpcy5pbWFnZUlkfTtjYXNlImltYWdlIjpyZXR1cm57dHlwZTp0aGlzLnR5cGUsaW1hZ2VJZDp0aGlzLmltYWdlSWQsaHlwZXJsaW5rczp0aGlzLnJhbmdlLmh5cGVybGlua3MscmFuZ2U6e3RsOnRoaXMucmFuZ2UudGwubW9kZWwsYnI6dGhpcy5yYW5nZS5iciYmdGhpcy5yYW5nZS5ici5tb2RlbCxleHQ6dGhpcy5yYW5nZS5leHQsZWRpdEFzOnRoaXMucmFuZ2UuZWRpdEFzfX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSW1hZ2UgVHlwZSIpfX1zZXQgbW9kZWwobyl7bGV0e3R5cGU6cixpbWFnZUlkOnQscmFuZ2U6ZSxoeXBlcmxpbmtzOmx9PW87aWYodGhpcy50eXBlPXIsdGhpcy5pbWFnZUlkPXQscj09PSJpbWFnZSIpaWYodHlwZW9mIGU9PSJzdHJpbmciKXtjb25zdCBuPW0uZGVjb2RlKGUpO3RoaXMucmFuZ2U9e3RsOm5ldyBzKHRoaXMud29ya3NoZWV0LHtjb2w6bi5sZWZ0LHJvdzpuLnRvcH0sLTEpLGJyOm5ldyBzKHRoaXMud29ya3NoZWV0LHtjb2w6bi5yaWdodCxyb3c6bi5ib3R0b219LDApLGVkaXRBczoib25lQ2VsbCJ9fWVsc2UgdGhpcy5yYW5nZT17dGw6bmV3IHModGhpcy53b3Jrc2hlZXQsZS50bCwwKSxicjplLmJyJiZuZXcgcyh0aGlzLndvcmtzaGVldCxlLmJyLDApLGV4dDplLmV4dCxlZGl0QXM6ZS5lZGl0QXMsaHlwZXJsaW5rczpsfHxlLmh5cGVybGlua3N9fX19LHsiLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi9hbmNob3IiOjJ9XSw5OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi91dGlscy91bmRlci1kYXNoIik7Y2xhc3Mgc3tjb25zdHJ1Y3RvcihyKXt0aGlzLm5vdGU9cn1nZXQgbW9kZWwoKXtsZXQgcj1udWxsO3N3aXRjaCh0eXBlb2YgdGhpcy5ub3RlKXtjYXNlInN0cmluZyI6cj17dHlwZToibm90ZSIsbm90ZTp7dGV4dHM6W3t0ZXh0OnRoaXMubm90ZX1dfX07YnJlYWs7ZGVmYXVsdDpyPXt0eXBlOiJub3RlIixub3RlOnRoaXMubm90ZX19cmV0dXJuIG0uZGVlcE1lcmdlKHt9LHMuREVGQVVMVF9DT05GSUdTLHIpfXNldCBtb2RlbChyKXtjb25zdHtub3RlOnR9PXIse3RleHRzOmV9PXQ7ZS5sZW5ndGg9PT0xJiZPYmplY3Qua2V5cyhlWzBdKS5sZW5ndGg9PT0xP3RoaXMubm90ZT1lWzBdLnRleHQ6dGhpcy5ub3RlPXR9c3RhdGljIGZyb21Nb2RlbChyKXtjb25zdCB0PW5ldyBzO3JldHVybiB0Lm1vZGVsPXIsdH19cy5ERUZBVUxUX0NPTkZJR1M9e25vdGU6e21hcmdpbnM6e2luc2V0bW9kZToiYXV0byIsaW5zZXQ6Wy4xMywuMTMsLjI1LC4yNV19LHByb3RlY3Rpb246e2xvY2tlZDoiVHJ1ZSIsbG9ja1RleHQ6IlRydWUifSxlZGl0QXM6ImFic29sdXRlIn19LEUuZXhwb3J0cz1zfSx7Ii4uL3V0aWxzL3VuZGVyLWRhc2giOjI2fV0sMTA6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL3V0aWxzL2NvbC1jYWNoZSIpO2NsYXNzIHN7Y29uc3RydWN0b3IoKXt0aGlzLmRlY29kZShhcmd1bWVudHMpfXNldFRMQlIocix0LGUsbCxuKXtpZihhcmd1bWVudHMubGVuZ3RoPDQpe2NvbnN0IGk9bS5kZWNvZGVBZGRyZXNzKHIpLGY9bS5kZWNvZGVBZGRyZXNzKHQpO3RoaXMubW9kZWw9e3RvcDpNYXRoLm1pbihpLnJvdyxmLnJvdyksbGVmdDpNYXRoLm1pbihpLmNvbCxmLmNvbCksYm90dG9tOk1hdGgubWF4KGkucm93LGYucm93KSxyaWdodDpNYXRoLm1heChpLmNvbCxmLmNvbCksc2hlZXROYW1lOmV9LHRoaXMuc2V0VExCUihpLnJvdyxpLmNvbCxmLnJvdyxmLmNvbCxuKX1lbHNlIHRoaXMubW9kZWw9e3RvcDpNYXRoLm1pbihyLGUpLGxlZnQ6TWF0aC5taW4odCxsKSxib3R0b206TWF0aC5tYXgocixlKSxyaWdodDpNYXRoLm1heCh0LGwpLHNoZWV0TmFtZTpufX1kZWNvZGUocil7c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDU6dGhpcy5zZXRUTEJSKHJbMF0sclsxXSxyWzJdLHJbM10scls0XSk7YnJlYWs7Y2FzZSA0OnRoaXMuc2V0VExCUihyWzBdLHJbMV0sclsyXSxyWzNdKTticmVhaztjYXNlIDM6dGhpcy5zZXRUTEJSKHJbMF0sclsxXSxyWzJdKTticmVhaztjYXNlIDI6dGhpcy5zZXRUTEJSKHJbMF0sclsxXSk7YnJlYWs7Y2FzZSAxOntjb25zdCB0PXJbMF07aWYodCBpbnN0YW5jZW9mIHMpdGhpcy5tb2RlbD17dG9wOnQubW9kZWwudG9wLGxlZnQ6dC5tb2RlbC5sZWZ0LGJvdHRvbTp0Lm1vZGVsLmJvdHRvbSxyaWdodDp0Lm1vZGVsLnJpZ2h0LHNoZWV0TmFtZTp0LnNoZWV0TmFtZX07ZWxzZSBpZih0IGluc3RhbmNlb2YgQXJyYXkpdGhpcy5kZWNvZGUodCk7ZWxzZSBpZih0LnRvcCYmdC5sZWZ0JiZ0LmJvdHRvbSYmdC5yaWdodCl0aGlzLm1vZGVsPXt0b3A6dC50b3AsbGVmdDp0LmxlZnQsYm90dG9tOnQuYm90dG9tLHJpZ2h0OnQucmlnaHQsc2hlZXROYW1lOnQuc2hlZXROYW1lfTtlbHNle2NvbnN0IGU9bS5kZWNvZGVFeCh0KTtlLnRvcD90aGlzLm1vZGVsPXt0b3A6ZS50b3AsbGVmdDplLmxlZnQsYm90dG9tOmUuYm90dG9tLHJpZ2h0OmUucmlnaHQsc2hlZXROYW1lOmUuc2hlZXROYW1lfTp0aGlzLm1vZGVsPXt0b3A6ZS5yb3csbGVmdDplLmNvbCxib3R0b206ZS5yb3cscmlnaHQ6ZS5jb2wsc2hlZXROYW1lOmUuc2hlZXROYW1lfX1icmVha31jYXNlIDA6dGhpcy5tb2RlbD17dG9wOjAsbGVmdDowLGJvdHRvbTowLHJpZ2h0OjB9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgdG8gX2dldERpbWVuc2lvbnMoKSAtICIrci5sZW5ndGgpfX1nZXQgdG9wKCl7cmV0dXJuIHRoaXMubW9kZWwudG9wfHwxfXNldCB0b3Aocil7dGhpcy5tb2RlbC50b3A9cn1nZXQgbGVmdCgpe3JldHVybiB0aGlzLm1vZGVsLmxlZnR8fDF9c2V0IGxlZnQocil7dGhpcy5tb2RlbC5sZWZ0PXJ9Z2V0IGJvdHRvbSgpe3JldHVybiB0aGlzLm1vZGVsLmJvdHRvbXx8MX1zZXQgYm90dG9tKHIpe3RoaXMubW9kZWwuYm90dG9tPXJ9Z2V0IHJpZ2h0KCl7cmV0dXJuIHRoaXMubW9kZWwucmlnaHR8fDF9c2V0IHJpZ2h0KHIpe3RoaXMubW9kZWwucmlnaHQ9cn1nZXQgc2hlZXROYW1lKCl7cmV0dXJuIHRoaXMubW9kZWwuc2hlZXROYW1lfXNldCBzaGVldE5hbWUocil7dGhpcy5tb2RlbC5zaGVldE5hbWU9cn1nZXQgX3NlcmlhbGlzZWRTaGVldE5hbWUoKXtjb25zdHtzaGVldE5hbWU6cn09dGhpcy5tb2RlbDtyZXR1cm4gcj8vXlthLXpBLVowLTldKiQvLnRlc3Qocik/cisiISI6YCcke3J9JyFgOiIifWV4cGFuZChyLHQsZSxsKXsoIXRoaXMubW9kZWwudG9wfHxyPHRoaXMudG9wKSYmKHRoaXMudG9wPXIpLCghdGhpcy5tb2RlbC5sZWZ0fHx0PHRoaXMubGVmdCkmJih0aGlzLmxlZnQ9dCksKCF0aGlzLm1vZGVsLmJvdHRvbXx8ZT50aGlzLmJvdHRvbSkmJih0aGlzLmJvdHRvbT1lKSwoIXRoaXMubW9kZWwucmlnaHR8fGw+dGhpcy5yaWdodCkmJih0aGlzLnJpZ2h0PWwpfWV4cGFuZFJvdyhyKXtpZihyKXtjb25zdHtkaW1lbnNpb25zOnQsbnVtYmVyOmV9PXI7dCYmdGhpcy5leHBhbmQoZSx0Lm1pbixlLHQubWF4KX19ZXhwYW5kVG9BZGRyZXNzKHIpe2NvbnN0IHQ9bS5kZWNvZGVFeChyKTt0aGlzLmV4cGFuZCh0LnJvdyx0LmNvbCx0LnJvdyx0LmNvbCl9Z2V0IHRsKCl7cmV0dXJuIG0ubjJsKHRoaXMubGVmdCkrdGhpcy50b3B9Z2V0ICR0JGwoKXtyZXR1cm5gJCR7bS5uMmwodGhpcy5sZWZ0KX0kJHt0aGlzLnRvcH1gfWdldCBicigpe3JldHVybiBtLm4ybCh0aGlzLnJpZ2h0KSt0aGlzLmJvdHRvbX1nZXQgJGIkcigpe3JldHVybmAkJHttLm4ybCh0aGlzLnJpZ2h0KX0kJHt0aGlzLmJvdHRvbX1gfWdldCByYW5nZSgpe3JldHVybmAke3RoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy50bH06JHt0aGlzLmJyfWB9Z2V0ICRyYW5nZSgpe3JldHVybmAke3RoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy4kdCRsfToke3RoaXMuJGIkcn1gfWdldCBzaG9ydFJhbmdlKCl7cmV0dXJuIHRoaXMuY291bnQ+MT90aGlzLnJhbmdlOnRoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy50bH1nZXQgJHNob3J0UmFuZ2UoKXtyZXR1cm4gdGhpcy5jb3VudD4xP3RoaXMuJHJhbmdlOnRoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy4kdCRsfWdldCBjb3VudCgpe3JldHVybigxK3RoaXMuYm90dG9tLXRoaXMudG9wKSooMSt0aGlzLnJpZ2h0LXRoaXMubGVmdCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5yYW5nZX1pbnRlcnNlY3RzKHIpe3JldHVybighci5zaGVldE5hbWV8fCF0aGlzLnNoZWV0TmFtZXx8ci5zaGVldE5hbWU9PT10aGlzLnNoZWV0TmFtZSkmJiEoci5ib3R0b208dGhpcy50b3ApJiYhKHIudG9wPnRoaXMuYm90dG9tKSYmIShyLnJpZ2h0PHRoaXMubGVmdCkmJiEoci5sZWZ0PnRoaXMucmlnaHQpfWNvbnRhaW5zKHIpe2NvbnN0IHQ9bS5kZWNvZGVFeChyKTtyZXR1cm4gdGhpcy5jb250YWluc0V4KHQpfWNvbnRhaW5zRXgocil7cmV0dXJuKCFyLnNoZWV0TmFtZXx8IXRoaXMuc2hlZXROYW1lfHxyLnNoZWV0TmFtZT09PXRoaXMuc2hlZXROYW1lKSYmci5yb3c+PXRoaXMudG9wJiZyLnJvdzw9dGhpcy5ib3R0b20mJnIuY29sPj10aGlzLmxlZnQmJnIuY29sPD10aGlzLnJpZ2h0fWZvckVhY2hBZGRyZXNzKHIpe2ZvcihsZXQgdD10aGlzLmxlZnQ7dDw9dGhpcy5yaWdodDt0KyspZm9yKGxldCBlPXRoaXMudG9wO2U8PXRoaXMuYm90dG9tO2UrKylyKG0uZW5jb2RlQWRkcmVzcyhlLHQpLGUsdCl9fUUuZXhwb3J0cz1zfSx7Ii4uL3V0aWxzL2NvbC1jYWNoZSI6MTl9XSwxMTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vdXRpbHMvdW5kZXItZGFzaCIpLHM9YSgiLi9lbnVtcyIpLG89YSgiLi4vdXRpbHMvY29sLWNhY2hlIikscj1hKCIuL2NlbGwiKTtFLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl93b3Jrc2hlZXQ9dCx0aGlzLl9udW1iZXI9ZSx0aGlzLl9jZWxscz1bXSx0aGlzLnN0eWxlPXt9LHRoaXMub3V0bGluZUxldmVsPTB9Z2V0IG51bWJlcigpe3JldHVybiB0aGlzLl9udW1iZXJ9Z2V0IHdvcmtzaGVldCgpe3JldHVybiB0aGlzLl93b3Jrc2hlZXR9Y29tbWl0KCl7dGhpcy5fd29ya3NoZWV0Ll9jb21taXRSb3codGhpcyl9ZGVzdHJveSgpe2RlbGV0ZSB0aGlzLl93b3Jrc2hlZXQsZGVsZXRlIHRoaXMuX2NlbGxzLGRlbGV0ZSB0aGlzLnN0eWxlfWZpbmRDZWxsKHQpe3JldHVybiB0aGlzLl9jZWxsc1t0LTFdfWdldENlbGxFeCh0KXtsZXQgZT10aGlzLl9jZWxsc1t0LmNvbC0xXTtpZighZSl7Y29uc3QgbD10aGlzLl93b3Jrc2hlZXQuZ2V0Q29sdW1uKHQuY29sKTtlPW5ldyByKHRoaXMsbCx0LmFkZHJlc3MpLHRoaXMuX2NlbGxzW3QuY29sLTFdPWV9cmV0dXJuIGV9Z2V0Q2VsbCh0KXtpZih0eXBlb2YgdD09InN0cmluZyIpe2NvbnN0IGU9dGhpcy5fd29ya3NoZWV0LmdldENvbHVtbktleSh0KTt0PWU/ZS5udW1iZXI6by5sMm4odCl9cmV0dXJuIHRoaXMuX2NlbGxzW3QtMV18fHRoaXMuZ2V0Q2VsbEV4KHthZGRyZXNzOm8uZW5jb2RlQWRkcmVzcyh0aGlzLl9udW1iZXIsdCkscm93OnRoaXMuX251bWJlcixjb2w6dH0pfXNwbGljZSh0LGUpe2NvbnN0IGw9dCtlO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KG4+Mj9uLTI6MCksZj0yO2Y8bjtmKyspaVtmLTJdPWFyZ3VtZW50c1tmXTtjb25zdCBjPWkubGVuZ3RoLWUsdT10aGlzLl9jZWxscy5sZW5ndGg7bGV0IGQsaCx3O2lmKGM8MClmb3IoZD10K2kubGVuZ3RoO2Q8PXU7ZCsrKXc9dGhpcy5fY2VsbHNbZC0xXSxoPXRoaXMuX2NlbGxzW2QtYy0xXSxoPyh3PXRoaXMuZ2V0Q2VsbChkKSx3LnZhbHVlPWgudmFsdWUsdy5zdHlsZT1oLnN0eWxlLHcuX2NvbW1lbnQ9aC5fY29tbWVudCk6dyYmKHcudmFsdWU9bnVsbCx3LnN0eWxlPXt9LHcuX2NvbW1lbnQ9dm9pZCAwKTtlbHNlIGlmKGM+MClmb3IoZD11O2Q+PWw7ZC0tKWg9dGhpcy5fY2VsbHNbZC0xXSxoPyh3PXRoaXMuZ2V0Q2VsbChkK2MpLHcudmFsdWU9aC52YWx1ZSx3LnN0eWxlPWguc3R5bGUsdy5fY29tbWVudD1oLl9jb21tZW50KTp0aGlzLl9jZWxsc1tkK2MtMV09dm9pZCAwO2ZvcihkPTA7ZDxpLmxlbmd0aDtkKyspdz10aGlzLmdldENlbGwodCtkKSx3LnZhbHVlPWlbZF0sdy5zdHlsZT17fSx3Ll9jb21tZW50PXZvaWQgMH1lYWNoQ2VsbCh0LGUpe2lmKGV8fChlPXQsdD1udWxsKSx0JiZ0LmluY2x1ZGVFbXB0eSl7Y29uc3QgbD10aGlzLl9jZWxscy5sZW5ndGg7Zm9yKGxldCBuPTE7bjw9bDtuKyspZSh0aGlzLmdldENlbGwobiksbil9ZWxzZSB0aGlzLl9jZWxscy5mb3JFYWNoKChsLG4pPT57bCYmbC50eXBlIT09cy5WYWx1ZVR5cGUuTnVsbCYmZShsLG4rMSl9KX1hZGRQYWdlQnJlYWsodCxlKXtjb25zdCBsPXRoaXMuX3dvcmtzaGVldCxuPU1hdGgubWF4KDAsdC0xKXx8MCxpPU1hdGgubWF4KDAsZS0xKXx8MTY4MzgsZj17aWQ6dGhpcy5fbnVtYmVyLG1heDppLG1hbjoxfTtuJiYoZi5taW49biksbC5yb3dCcmVha3MucHVzaChmKX1nZXQgdmFsdWVzKCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5fY2VsbHMuZm9yRWFjaChlPT57ZSYmZS50eXBlIT09cy5WYWx1ZVR5cGUuTnVsbCYmKHRbZS5jb2xdPWUudmFsdWUpfSksdH1zZXQgdmFsdWVzKHQpe2lmKHRoaXMuX2NlbGxzPVtdLHQpaWYodCBpbnN0YW5jZW9mIEFycmF5KXtsZXQgZT0wO3QuaGFzT3duUHJvcGVydHkoIjAiKSYmKGU9MSksdC5mb3JFYWNoKChsLG4pPT57bCE9PXZvaWQgMCYmKHRoaXMuZ2V0Q2VsbEV4KHthZGRyZXNzOm8uZW5jb2RlQWRkcmVzcyh0aGlzLl9udW1iZXIsbitlKSxyb3c6dGhpcy5fbnVtYmVyLGNvbDpuK2V9KS52YWx1ZT1sKX0pfWVsc2UgdGhpcy5fd29ya3NoZWV0LmVhY2hDb2x1bW5LZXkoKGUsbCk9Pnt0W2xdIT09dm9pZCAwJiYodGhpcy5nZXRDZWxsRXgoe2FkZHJlc3M6by5lbmNvZGVBZGRyZXNzKHRoaXMuX251bWJlcixlLm51bWJlcikscm93OnRoaXMuX251bWJlcixjb2w6ZS5udW1iZXJ9KS52YWx1ZT10W2xdKX0pfWdldCBoYXNWYWx1ZXMoKXtyZXR1cm4gbS5zb21lKHRoaXMuX2NlbGxzLHQ9PnQmJnQudHlwZSE9PXMuVmFsdWVUeXBlLk51bGwpfWdldCBjZWxsQ291bnQoKXtyZXR1cm4gdGhpcy5fY2VsbHMubGVuZ3RofWdldCBhY3R1YWxDZWxsQ291bnQoKXtsZXQgdD0wO3JldHVybiB0aGlzLmVhY2hDZWxsKCgpPT57dCsrfSksdH1nZXQgZGltZW5zaW9ucygpe2xldCB0PTAsZT0wO3JldHVybiB0aGlzLl9jZWxscy5mb3JFYWNoKGw9PntsJiZsLnR5cGUhPT1zLlZhbHVlVHlwZS5OdWxsJiYoKCF0fHx0PmwuY29sKSYmKHQ9bC5jb2wpLGU8bC5jb2wmJihlPWwuY29sKSl9KSx0PjA/e21pbjp0LG1heDplfTpudWxsfV9hcHBseVN0eWxlKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGVbdF09ZSx0aGlzLl9jZWxscy5mb3JFYWNoKGw9PntsJiYobFt0XT1lKX0pLGV9Z2V0IG51bUZtdCgpe3JldHVybiB0aGlzLnN0eWxlLm51bUZtdH1zZXQgbnVtRm10KHQpe3RoaXMuX2FwcGx5U3R5bGUoIm51bUZtdCIsdCl9Z2V0IGZvbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5mb250fXNldCBmb250KHQpe3RoaXMuX2FwcGx5U3R5bGUoImZvbnQiLHQpfWdldCBhbGlnbm1lbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5hbGlnbm1lbnR9c2V0IGFsaWdubWVudCh0KXt0aGlzLl9hcHBseVN0eWxlKCJhbGlnbm1lbnQiLHQpfWdldCBwcm90ZWN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUucHJvdGVjdGlvbn1zZXQgcHJvdGVjdGlvbih0KXt0aGlzLl9hcHBseVN0eWxlKCJwcm90ZWN0aW9uIix0KX1nZXQgYm9yZGVyKCl7cmV0dXJuIHRoaXMuc3R5bGUuYm9yZGVyfXNldCBib3JkZXIodCl7dGhpcy5fYXBwbHlTdHlsZSgiYm9yZGVyIix0KX1nZXQgZmlsbCgpe3JldHVybiB0aGlzLnN0eWxlLmZpbGx9c2V0IGZpbGwodCl7dGhpcy5fYXBwbHlTdHlsZSgiZmlsbCIsdCl9Z2V0IGhpZGRlbigpe3JldHVybiEhdGhpcy5faGlkZGVufXNldCBoaWRkZW4odCl7dGhpcy5faGlkZGVuPXR9Z2V0IG91dGxpbmVMZXZlbCgpe3JldHVybiB0aGlzLl9vdXRsaW5lTGV2ZWx8fDB9c2V0IG91dGxpbmVMZXZlbCh0KXt0aGlzLl9vdXRsaW5lTGV2ZWw9dH1nZXQgY29sbGFwc2VkKCl7cmV0dXJuISEodGhpcy5fb3V0bGluZUxldmVsJiZ0aGlzLl9vdXRsaW5lTGV2ZWw+PXRoaXMuX3dvcmtzaGVldC5wcm9wZXJ0aWVzLm91dGxpbmVMZXZlbFJvdyl9Z2V0IG1vZGVsKCl7Y29uc3QgdD1bXTtsZXQgZT0wLGw9MDtyZXR1cm4gdGhpcy5fY2VsbHMuZm9yRWFjaChuPT57aWYobil7Y29uc3QgaT1uLm1vZGVsO2kmJigoIWV8fGU+bi5jb2wpJiYoZT1uLmNvbCksbDxuLmNvbCYmKGw9bi5jb2wpLHQucHVzaChpKSl9fSksdGhpcy5oZWlnaHR8fHQubGVuZ3RoP3tjZWxsczp0LG51bWJlcjp0aGlzLm51bWJlcixtaW46ZSxtYXg6bCxoZWlnaHQ6dGhpcy5oZWlnaHQsc3R5bGU6dGhpcy5zdHlsZSxoaWRkZW46dGhpcy5oaWRkZW4sb3V0bGluZUxldmVsOnRoaXMub3V0bGluZUxldmVsLGNvbGxhcHNlZDp0aGlzLmNvbGxhcHNlZH06bnVsbH1zZXQgbW9kZWwodCl7aWYodC5udW1iZXIhPT10aGlzLl9udW1iZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdyBudW1iZXIgaW4gbW9kZWwiKTtsZXQgZTt0aGlzLl9jZWxscz1bXSx0LmNlbGxzLmZvckVhY2gobD0+e3N3aXRjaChsLnR5cGUpe2Nhc2Ugci5UeXBlcy5NZXJnZTpicmVhaztkZWZhdWx0OntsZXQgbjtpZihsLmFkZHJlc3Mpbj1vLmRlY29kZUFkZHJlc3MobC5hZGRyZXNzKTtlbHNlIGlmKGUpe2NvbnN0e3JvdzppfT1lLGY9ZS5jb2wrMTtuPXtyb3c6aSxjb2w6ZixhZGRyZXNzOm8uZW5jb2RlQWRkcmVzcyhpLGYpLCRjb2wkcm93OmAkJHtvLm4ybChmKX0kJHtpfWB9fWU9bix0aGlzLmdldENlbGxFeChuKS5tb2RlbD1sO2JyZWFrfX19KSx0LmhlaWdodD90aGlzLmhlaWdodD10LmhlaWdodDpkZWxldGUgdGhpcy5oZWlnaHQsdGhpcy5oaWRkZW49dC5oaWRkZW4sdGhpcy5vdXRsaW5lTGV2ZWw9dC5vdXRsaW5lTGV2ZWx8fDAsdGhpcy5zdHlsZT10LnN0eWxlJiZKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQuc3R5bGUpKXx8e319fX0seyIuLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi91dGlscy91bmRlci1kYXNoIjoyNiwiLi9jZWxsIjozLCIuL2VudW1zIjo3fV0sMTI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL3V0aWxzL2NvbC1jYWNoZSIpO2NsYXNzIHN7Y29uc3RydWN0b3Iocix0LGUpe3RoaXMudGFibGU9cix0aGlzLmNvbHVtbj10LHRoaXMuaW5kZXg9ZX1fc2V0KHIsdCl7dGhpcy50YWJsZS5jYWNoZVN0YXRlKCksdGhpcy5jb2x1bW5bcl09dH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLmNvbHVtbi5uYW1lfXNldCBuYW1lKHIpe3RoaXMuX3NldCgibmFtZSIscil9Z2V0IGZpbHRlckJ1dHRvbigpe3JldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJCdXR0b259c2V0IGZpbHRlckJ1dHRvbihyKXt0aGlzLmNvbHVtbi5maWx0ZXJCdXR0b249cn1nZXQgc3R5bGUoKXtyZXR1cm4gdGhpcy5jb2x1bW4uc3R5bGV9c2V0IHN0eWxlKHIpe3RoaXMuY29sdW1uLnN0eWxlPXJ9Z2V0IHRvdGFsc1Jvd0xhYmVsKCl7cmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsc1Jvd0xhYmVsfXNldCB0b3RhbHNSb3dMYWJlbChyKXt0aGlzLl9zZXQoInRvdGFsc1Jvd0xhYmVsIixyKX1nZXQgdG90YWxzUm93RnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb2x1bW4udG90YWxzUm93RnVuY3Rpb259c2V0IHRvdGFsc1Jvd0Z1bmN0aW9uKHIpe3RoaXMuX3NldCgidG90YWxzUm93RnVuY3Rpb24iLHIpfWdldCB0b3RhbHNSb3dSZXN1bHQoKXtyZXR1cm4gdGhpcy5jb2x1bW4udG90YWxzUm93UmVzdWx0fXNldCB0b3RhbHNSb3dSZXN1bHQocil7dGhpcy5fc2V0KCJ0b3RhbHNSb3dSZXN1bHQiLHIpfWdldCB0b3RhbHNSb3dGb3JtdWxhKCl7cmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsc1Jvd0Zvcm11bGF9c2V0IHRvdGFsc1Jvd0Zvcm11bGEocil7dGhpcy5fc2V0KCJ0b3RhbHNSb3dGb3JtdWxhIixyKX19RS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKG8scil7dGhpcy53b3Jrc2hlZXQ9byxyJiYodGhpcy50YWJsZT1yLHRoaXMudmFsaWRhdGUoKSx0aGlzLnN0b3JlKCkpfWdldEZvcm11bGEobyl7c3dpdGNoKG8udG90YWxzUm93RnVuY3Rpb24pe2Nhc2Uibm9uZSI6cmV0dXJuIG51bGw7Y2FzZSJhdmVyYWdlIjpyZXR1cm5gU1VCVE9UQUwoMTAxLCR7dGhpcy50YWJsZS5uYW1lfVske28ubmFtZX1dKWA7Y2FzZSJjb3VudE51bXMiOnJldHVybmBTVUJUT1RBTCgxMDIsJHt0aGlzLnRhYmxlLm5hbWV9WyR7by5uYW1lfV0pYDtjYXNlImNvdW50IjpyZXR1cm5gU1VCVE9UQUwoMTAzLCR7dGhpcy50YWJsZS5uYW1lfVske28ubmFtZX1dKWA7Y2FzZSJtYXgiOnJldHVybmBTVUJUT1RBTCgxMDQsJHt0aGlzLnRhYmxlLm5hbWV9WyR7by5uYW1lfV0pYDtjYXNlIm1pbiI6cmV0dXJuYFNVQlRPVEFMKDEwNSwke3RoaXMudGFibGUubmFtZX1bJHtvLm5hbWV9XSlgO2Nhc2Uic3RkRGV2IjpyZXR1cm5gU1VCVE9UQUwoMTA2LCR7dGhpcy50YWJsZS5uYW1lfVske28ubmFtZX1dKWA7Y2FzZSJ2YXIiOnJldHVybmBTVUJUT1RBTCgxMDcsJHt0aGlzLnRhYmxlLm5hbWV9WyR7by5uYW1lfV0pYDtjYXNlInN1bSI6cmV0dXJuYFNVQlRPVEFMKDEwOSwke3RoaXMudGFibGUubmFtZX1bJHtvLm5hbWV9XSlgO2Nhc2UiY3VzdG9tIjpyZXR1cm4gby50b3RhbHNSb3dGb3JtdWxhO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFRvdGFscyBSb3cgRnVuY3Rpb246ICIrby50b3RhbHNSb3dGdW5jdGlvbil9fWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnRhYmxlLmNvbHVtbnMubGVuZ3RofWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy50YWJsZS5yb3dzLmxlbmd0aH1nZXQgZmlsdGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVpZ2h0Kyh0aGlzLnRhYmxlLmhlYWRlclJvdz8xOjApfWdldCB0YWJsZUhlaWdodCgpe3JldHVybiB0aGlzLmZpbHRlckhlaWdodCsodGhpcy50YWJsZS50b3RhbHNSb3c/MTowKX12YWxpZGF0ZSgpe2NvbnN0e3RhYmxlOm99PXRoaXMscj0oYyx1LGQpPT57Y1t1XT09PXZvaWQgMCYmKGNbdV09ZCl9O3IobywiaGVhZGVyUm93IiwhMCkscihvLCJ0b3RhbHNSb3ciLCExKSxyKG8sInN0eWxlIix7fSkscihvLnN0eWxlLCJ0aGVtZSIsIlRhYmxlU3R5bGVNZWRpdW0yIikscihvLnN0eWxlLCJzaG93Rmlyc3RDb2x1bW4iLCExKSxyKG8uc3R5bGUsInNob3dMYXN0Q29sdW1uIiwhMSkscihvLnN0eWxlLCJzaG93Um93U3RyaXBlcyIsITEpLHIoby5zdHlsZSwic2hvd0NvbHVtblN0cmlwZXMiLCExKTtjb25zdCB0PShjLHUpPT57aWYoIWMpdGhyb3cgbmV3IEVycm9yKHUpfTt0KG8ucmVmLCJUYWJsZSBtdXN0IGhhdmUgcmVmIiksdChvLmNvbHVtbnMsIlRhYmxlIG11c3QgaGF2ZSBjb2x1bW4gZGVmaW5pdGlvbnMiKSx0KG8ucm93cywiVGFibGUgbXVzdCBoYXZlIHJvdyBkZWZpbml0aW9ucyIpLG8udGw9bS5kZWNvZGVBZGRyZXNzKG8ucmVmKTtjb25zdHtyb3c6ZSxjb2w6bH09by50bDt0KGU+MCwiVGFibGUgbXVzdCBiZSBvbiB2YWxpZCByb3ciKSx0KGw+MCwiVGFibGUgbXVzdCBiZSBvbiB2YWxpZCBjb2wiKTtjb25zdHt3aWR0aDpuLGZpbHRlckhlaWdodDppLHRhYmxlSGVpZ2h0OmZ9PXRoaXM7by5hdXRvRmlsdGVyUmVmPW0uZW5jb2RlKGUsbCxlK2ktMSxsK24tMSksby50YWJsZVJlZj1tLmVuY29kZShlLGwsZStmLTEsbCtuLTEpLG8uY29sdW1ucy5mb3JFYWNoKChjLHUpPT57dChjLm5hbWUsYENvbHVtbiAke3V9IG11c3QgaGF2ZSBhIG5hbWVgKSx1PT09MD9yKGMsInRvdGFsc1Jvd0xhYmVsIiwiVG90YWwiKToocihjLCJ0b3RhbHNSb3dGdW5jdGlvbiIsIm5vbmUiKSxjLnRvdGFsc1Jvd0Zvcm11bGE9dGhpcy5nZXRGb3JtdWxhKGMpKX0pfXN0b3JlKCl7Y29uc3Qgbz0oaSxmKT0+e2YmJk9iamVjdC5rZXlzKGYpLmZvckVhY2goYz0+e2lbY109ZltjXX0pfSx7d29ya3NoZWV0OnIsdGFibGU6dH09dGhpcyx7cm93OmUsY29sOmx9PXQudGw7bGV0IG49MDtpZih0LmhlYWRlclJvdyl7Y29uc3QgaT1yLmdldFJvdyhlK24rKyk7dC5jb2x1bW5zLmZvckVhY2goKGYsYyk9Pntjb25zdHtzdHlsZTp1LG5hbWU6ZH09ZixoPWkuZ2V0Q2VsbChsK2MpO2gudmFsdWU9ZCxvKGgsdSl9KX1pZih0LnJvd3MuZm9yRWFjaChpPT57Y29uc3QgZj1yLmdldFJvdyhlK24rKyk7aS5mb3JFYWNoKChjLHUpPT57Y29uc3QgZD1mLmdldENlbGwobCt1KTtkLnZhbHVlPWMsbyhkLHQuY29sdW1uc1t1XS5zdHlsZSl9KX0pLHQudG90YWxzUm93KXtjb25zdCBpPXIuZ2V0Um93KGUrbisrKTt0LmNvbHVtbnMuZm9yRWFjaCgoZixjKT0+e2NvbnN0IHU9aS5nZXRDZWxsKGwrYyk7aWYoYz09PTApdS52YWx1ZT1mLnRvdGFsc1Jvd0xhYmVsO2Vsc2V7Y29uc3QgZD10aGlzLmdldEZvcm11bGEoZik7dS52YWx1ZT1kP3tmb3JtdWxhOmYudG90YWxzUm93Rm9ybXVsYSxyZXN1bHQ6Zi50b3RhbHNSb3dSZXN1bHR9Om51bGx9byh1LGYuc3R5bGUpfSl9fWxvYWQobyl7Y29uc3R7dGFibGU6cn09dGhpcyx7cm93OnQsY29sOmV9PXIudGw7bGV0IGw9MDtpZihyLmhlYWRlclJvdyl7Y29uc3Qgbj1vLmdldFJvdyh0K2wrKyk7ci5jb2x1bW5zLmZvckVhY2goKGksZik9PntuLmdldENlbGwoZStmKS52YWx1ZT1pLm5hbWV9KX1pZihyLnJvd3MuZm9yRWFjaChuPT57Y29uc3QgaT1vLmdldFJvdyh0K2wrKyk7bi5mb3JFYWNoKChmLGMpPT57aS5nZXRDZWxsKGUrYykudmFsdWU9Zn0pfSksci50b3RhbHNSb3cpe2NvbnN0IG49by5nZXRSb3codCtsKyspO3IuY29sdW1ucy5mb3JFYWNoKChpLGYpPT57Y29uc3QgYz1uLmdldENlbGwoZStmKTtmPT09MD9jLnZhbHVlPWkudG90YWxzUm93TGFiZWw6dGhpcy5nZXRGb3JtdWxhKGkpJiYoYy52YWx1ZT17Zm9ybXVsYTppLnRvdGFsc1Jvd0Zvcm11bGEscmVzdWx0OmkudG90YWxzUm93UmVzdWx0fSl9KX19Z2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMudGFibGV9c2V0IG1vZGVsKG8pe3RoaXMudGFibGU9b31jYWNoZVN0YXRlKCl7dGhpcy5fY2FjaGV8fCh0aGlzLl9jYWNoZT17cmVmOnRoaXMucmVmLHdpZHRoOnRoaXMud2lkdGgsdGFibGVIZWlnaHQ6dGhpcy50YWJsZUhlaWdodH0pfWNvbW1pdCgpe2lmKCF0aGlzLl9jYWNoZSlyZXR1cm47dGhpcy52YWxpZGF0ZSgpO2NvbnN0IG89bS5kZWNvZGVBZGRyZXNzKHRoaXMuX2NhY2hlLnJlZik7aWYodGhpcy5yZWYhPT10aGlzLl9jYWNoZS5yZWYpZm9yKGxldCByPTA7cjx0aGlzLl9jYWNoZS50YWJsZUhlaWdodDtyKyspe2NvbnN0IHQ9dGhpcy53b3Jrc2hlZXQuZ2V0Um93KG8ucm93K3IpO2ZvcihsZXQgZT0wO2U8dGhpcy5fY2FjaGUud2lkdGg7ZSsrKXQuZ2V0Q2VsbChvLmNvbCtlKS52YWx1ZT1udWxsfWVsc2V7Zm9yKGxldCByPXRoaXMudGFibGVIZWlnaHQ7cjx0aGlzLl9jYWNoZS50YWJsZUhlaWdodDtyKyspe2NvbnN0IHQ9dGhpcy53b3Jrc2hlZXQuZ2V0Um93KG8ucm93K3IpO2ZvcihsZXQgZT0wO2U8dGhpcy5fY2FjaGUud2lkdGg7ZSsrKXQuZ2V0Q2VsbChvLmNvbCtlKS52YWx1ZT1udWxsfWZvcihsZXQgcj0wO3I8dGhpcy50YWJsZUhlaWdodDtyKyspe2NvbnN0IHQ9dGhpcy53b3Jrc2hlZXQuZ2V0Um93KG8ucm93K3IpO2ZvcihsZXQgZT10aGlzLndpZHRoO2U8dGhpcy5fY2FjaGUud2lkdGg7ZSsrKXQuZ2V0Q2VsbChvLmNvbCtlKS52YWx1ZT1udWxsfX10aGlzLnN0b3JlKCl9YWRkUm93KG8scil7dGhpcy5jYWNoZVN0YXRlKCkscj09PXZvaWQgMD90aGlzLnRhYmxlLnJvd3MucHVzaChvKTp0aGlzLnRhYmxlLnJvd3Muc3BsaWNlKHIsMCxvKX1yZW1vdmVSb3dzKG8pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXToxO3RoaXMuY2FjaGVTdGF0ZSgpLHRoaXMudGFibGUucm93cy5zcGxpY2UobyxyKX1nZXRDb2x1bW4obyl7Y29uc3Qgcj10aGlzLnRhYmxlLmNvbHVtbnNbb107cmV0dXJuIG5ldyBzKHRoaXMscixvKX1hZGRDb2x1bW4obyxyLHQpe3RoaXMuY2FjaGVTdGF0ZSgpLHQ9PT12b2lkIDA/KHRoaXMudGFibGUuY29sdW1ucy5wdXNoKG8pLHRoaXMudGFibGUucm93cy5mb3JFYWNoKChlLGwpPT57ZS5wdXNoKHJbbF0pfSkpOih0aGlzLnRhYmxlLmNvbHVtbnMuc3BsaWNlKHQsMCxvKSx0aGlzLnRhYmxlLnJvd3MuZm9yRWFjaCgoZSxsKT0+e2Uuc3BsaWNlKHQsMCxyW2xdKX0pKX1yZW1vdmVDb2x1bW5zKG8pe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXToxO3RoaXMuY2FjaGVTdGF0ZSgpLHRoaXMudGFibGUuY29sdW1ucy5zcGxpY2UobyxyKSx0aGlzLnRhYmxlLnJvd3MuZm9yRWFjaCh0PT57dC5zcGxpY2UobyxyKX0pfV9hc3NpZ24obyxyLHQpe3RoaXMuY2FjaGVTdGF0ZSgpLG9bcl09dH1nZXQgcmVmKCl7cmV0dXJuIHRoaXMudGFibGUucmVmfXNldCByZWYobyl7dGhpcy5fYXNzaWduKHRoaXMudGFibGUsInJlZiIsbyl9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy50YWJsZS5uYW1lfXNldCBuYW1lKG8pe3RoaXMudGFibGUubmFtZT1vfWdldCBkaXNwbGF5TmFtZSgpe3JldHVybiB0aGlzLnRhYmxlLmRpc3BseU5hbWV8fHRoaXMudGFibGUubmFtZX1zZXQgZGlzcGxheU5hbWVuYW1lKG8pe3RoaXMudGFibGUuZGlzcGxheU5hbWU9b31nZXQgaGVhZGVyUm93KCl7cmV0dXJuIHRoaXMudGFibGUuaGVhZGVyUm93fXNldCBoZWFkZXJSb3cobyl7dGhpcy5fYXNzaWduKHRoaXMudGFibGUsImhlYWRlclJvdyIsbyl9Z2V0IHRvdGFsc1Jvdygpe3JldHVybiB0aGlzLnRhYmxlLnRvdGFsc1Jvd31zZXQgdG90YWxzUm93KG8pe3RoaXMuX2Fzc2lnbih0aGlzLnRhYmxlLCJ0b3RhbHNSb3ciLG8pfWdldCB0aGVtZSgpe3JldHVybiB0aGlzLnRhYmxlLnN0eWxlLm5hbWV9c2V0IHRoZW1lKG8pe3RoaXMudGFibGUuc3R5bGUubmFtZT1vfWdldCBzaG93Rmlyc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy50YWJsZS5zdHlsZS5zaG93Rmlyc3RDb2x1bW59c2V0IHNob3dGaXJzdENvbHVtbihvKXt0aGlzLnRhYmxlLnN0eWxlLnNob3dGaXJzdENvbHVtbj1vfWdldCBzaG93TGFzdENvbHVtbigpe3JldHVybiB0aGlzLnRhYmxlLnN0eWxlLnNob3dMYXN0Q29sdW1ufXNldCBzaG93TGFzdENvbHVtbihvKXt0aGlzLnRhYmxlLnN0eWxlLnNob3dMYXN0Q29sdW1uPW99Z2V0IHNob3dSb3dTdHJpcGVzKCl7cmV0dXJuIHRoaXMudGFibGUuc3R5bGUuc2hvd1Jvd1N0cmlwZXN9c2V0IHNob3dSb3dTdHJpcGVzKG8pe3RoaXMudGFibGUuc3R5bGUuc2hvd1Jvd1N0cmlwZXM9b31nZXQgc2hvd0NvbHVtblN0cmlwZXMoKXtyZXR1cm4gdGhpcy50YWJsZS5zdHlsZS5zaG93Q29sdW1uU3RyaXBlc31zZXQgc2hvd0NvbHVtblN0cmlwZXMobyl7dGhpcy50YWJsZS5zdHlsZS5zaG93Q29sdW1uU3RyaXBlcz1vfX19LHsiLi4vdXRpbHMvY29sLWNhY2hlIjoxOX1dLDEzOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuL3dvcmtzaGVldCIpLHM9YSgiLi9kZWZpbmVkLW5hbWVzIiksbz1hKCIuLi94bHN4L3hsc3giKSxyPWEoIi4uL2Nzdi9jc3YiKTtFLmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNhdGVnb3J5PSIiLHRoaXMuY29tcGFueT0iIix0aGlzLmNyZWF0ZWQ9bmV3IERhdGUsdGhpcy5kZXNjcmlwdGlvbj0iIix0aGlzLmtleXdvcmRzPSIiLHRoaXMubWFuYWdlcj0iIix0aGlzLm1vZGlmaWVkPXRoaXMuY3JlYXRlZCx0aGlzLnByb3BlcnRpZXM9e30sdGhpcy5jYWxjUHJvcGVydGllcz17fSx0aGlzLl93b3Jrc2hlZXRzPVtdLHRoaXMuc3ViamVjdD0iIix0aGlzLnRpdGxlPSIiLHRoaXMudmlld3M9W10sdGhpcy5tZWRpYT1bXSx0aGlzLl9kZWZpbmVkTmFtZXM9bmV3IHN9Z2V0IHhsc3goKXtyZXR1cm4gdGhpcy5feGxzeHx8KHRoaXMuX3hsc3g9bmV3IG8odGhpcykpLHRoaXMuX3hsc3h9Z2V0IGNzdigpe3JldHVybiB0aGlzLl9jc3Z8fCh0aGlzLl9jc3Y9bmV3IHIodGhpcykpLHRoaXMuX2Nzdn1nZXQgbmV4dElkKCl7Zm9yKGxldCB0PTE7dDx0aGlzLl93b3Jrc2hlZXRzLmxlbmd0aDt0KyspaWYoIXRoaXMuX3dvcmtzaGVldHNbdF0pcmV0dXJuIHQ7cmV0dXJuIHRoaXMuX3dvcmtzaGVldHMubGVuZ3RofHwxfWFkZFdvcmtzaGVldCh0LGUpe2NvbnN0IGw9dGhpcy5uZXh0SWQ7ZSYmKHR5cGVvZiBlPT0ic3RyaW5nIj8oY29uc29sZS50cmFjZSgndGFiQ29sb3IgYXJndW1lbnQgaXMgbm93IGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugd29ya2Jvb2suYWRkV29ya3NoZWV0KG5hbWUsIHtwcm9wZXJ0aWVzOiB7IHRhYkNvbG9yOiB7IGFyZ2I6ICJyYmcgdmFsdWUiIH0gfScpLGU9e3Byb3BlcnRpZXM6e3RhYkNvbG9yOnthcmdiOmV9fX0pOihlLmFyZ2J8fGUudGhlbWV8fGUuaW5kZXhlZCkmJihjb25zb2xlLnRyYWNlKCJ0YWJDb2xvciBhcmd1bWVudCBpcyBub3cgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQobmFtZSwge3Byb3BlcnRpZXM6IHsgdGFiQ29sb3I6IHsgLi4uIH0gfSIpLGU9e3Byb3BlcnRpZXM6e3RhYkNvbG9yOmV9fSkpO2NvbnN0IG49dGhpcy5fd29ya3NoZWV0cy5yZWR1Y2UoKGMsdSk9Pih1JiZ1Lm9yZGVyTm8pPmM/dS5vcmRlck5vOmMsMCksaT1PYmplY3QuYXNzaWduKHt9LGUse2lkOmwsbmFtZTp0LG9yZGVyTm86bisxLHdvcmtib29rOnRoaXN9KSxmPW5ldyBtKGkpO3JldHVybiB0aGlzLl93b3Jrc2hlZXRzW2xdPWYsZn1yZW1vdmVXb3Jrc2hlZXRFeCh0KXtkZWxldGUgdGhpcy5fd29ya3NoZWV0c1t0LmlkXX1yZW1vdmVXb3Jrc2hlZXQodCl7Y29uc3QgZT10aGlzLmdldFdvcmtzaGVldCh0KTtlJiZlLmRlc3Ryb3koKX1nZXRXb3Jrc2hlZXQodCl7cmV0dXJuIHQ9PT12b2lkIDA/dGhpcy5fd29ya3NoZWV0cy5maW5kKEJvb2xlYW4pOnR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLl93b3Jrc2hlZXRzW3RdOnR5cGVvZiB0PT0ic3RyaW5nIj90aGlzLl93b3Jrc2hlZXRzLmZpbmQoZT0+ZSYmZS5uYW1lPT09dCk6dm9pZCAwfWdldCB3b3Jrc2hlZXRzKCl7cmV0dXJuIHRoaXMuX3dvcmtzaGVldHMuc2xpY2UoMSkuc29ydCgodCxlKT0+dC5vcmRlck5vLWUub3JkZXJObykuZmlsdGVyKEJvb2xlYW4pfWVhY2hTaGVldCh0KXt0aGlzLndvcmtzaGVldHMuZm9yRWFjaChlPT57dChlLGUuaWQpfSl9Z2V0IGRlZmluZWROYW1lcygpe3JldHVybiB0aGlzLl9kZWZpbmVkTmFtZXN9Y2xlYXJUaGVtZXMoKXt0aGlzLl90aGVtZXM9dm9pZCAwfWFkZEltYWdlKHQpe2NvbnN0IGU9dGhpcy5tZWRpYS5sZW5ndGg7cmV0dXJuIHRoaXMubWVkaWEucHVzaChPYmplY3QuYXNzaWduKHt9LHQse3R5cGU6ImltYWdlIn0pKSxlfWdldEltYWdlKHQpe3JldHVybiB0aGlzLm1lZGlhW3RdfWdldCBtb2RlbCgpe3JldHVybntjcmVhdG9yOnRoaXMuY3JlYXRvcnx8IlVua25vd24iLGxhc3RNb2RpZmllZEJ5OnRoaXMubGFzdE1vZGlmaWVkQnl8fCJVbmtub3duIixsYXN0UHJpbnRlZDp0aGlzLmxhc3RQcmludGVkLGNyZWF0ZWQ6dGhpcy5jcmVhdGVkLG1vZGlmaWVkOnRoaXMubW9kaWZpZWQscHJvcGVydGllczp0aGlzLnByb3BlcnRpZXMsd29ya3NoZWV0czp0aGlzLndvcmtzaGVldHMubWFwKHQ9PnQubW9kZWwpLHNoZWV0czp0aGlzLndvcmtzaGVldHMubWFwKHQ9PnQubW9kZWwpLmZpbHRlcihCb29sZWFuKSxkZWZpbmVkTmFtZXM6dGhpcy5fZGVmaW5lZE5hbWVzLm1vZGVsLHZpZXdzOnRoaXMudmlld3MsY29tcGFueTp0aGlzLmNvbXBhbnksbWFuYWdlcjp0aGlzLm1hbmFnZXIsdGl0bGU6dGhpcy50aXRsZSxzdWJqZWN0OnRoaXMuc3ViamVjdCxrZXl3b3Jkczp0aGlzLmtleXdvcmRzLGNhdGVnb3J5OnRoaXMuY2F0ZWdvcnksZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixsYW5ndWFnZTp0aGlzLmxhbmd1YWdlLHJldmlzaW9uOnRoaXMucmV2aXNpb24sY29udGVudFN0YXR1czp0aGlzLmNvbnRlbnRTdGF0dXMsdGhlbWVzOnRoaXMuX3RoZW1lcyxtZWRpYTp0aGlzLm1lZGlhLGNhbGNQcm9wZXJ0aWVzOnRoaXMuY2FsY1Byb3BlcnRpZXN9fXNldCBtb2RlbCh0KXt0aGlzLmNyZWF0b3I9dC5jcmVhdG9yLHRoaXMubGFzdE1vZGlmaWVkQnk9dC5sYXN0TW9kaWZpZWRCeSx0aGlzLmxhc3RQcmludGVkPXQubGFzdFByaW50ZWQsdGhpcy5jcmVhdGVkPXQuY3JlYXRlZCx0aGlzLm1vZGlmaWVkPXQubW9kaWZpZWQsdGhpcy5jb21wYW55PXQuY29tcGFueSx0aGlzLm1hbmFnZXI9dC5tYW5hZ2VyLHRoaXMudGl0bGU9dC50aXRsZSx0aGlzLnN1YmplY3Q9dC5zdWJqZWN0LHRoaXMua2V5d29yZHM9dC5rZXl3b3Jkcyx0aGlzLmNhdGVnb3J5PXQuY2F0ZWdvcnksdGhpcy5kZXNjcmlwdGlvbj10LmRlc2NyaXB0aW9uLHRoaXMubGFuZ3VhZ2U9dC5sYW5ndWFnZSx0aGlzLnJldmlzaW9uPXQucmV2aXNpb24sdGhpcy5jb250ZW50U3RhdHVzPXQuY29udGVudFN0YXR1cyx0aGlzLnByb3BlcnRpZXM9dC5wcm9wZXJ0aWVzLHRoaXMuY2FsY1Byb3BlcnRpZXM9dC5jYWxjUHJvcGVydGllcyx0aGlzLl93b3Jrc2hlZXRzPVtdLHQud29ya3NoZWV0cy5mb3JFYWNoKGU9Pntjb25zdHtpZDpsLG5hbWU6bixzdGF0ZTppfT1lLGY9dC5zaGVldHMmJnQuc2hlZXRzLmZpbmRJbmRleChjPT5jLmlkPT09bCk7KHRoaXMuX3dvcmtzaGVldHNbbF09bmV3IG0oe2lkOmwsbmFtZTpuLG9yZGVyTm86ZixzdGF0ZTppLHdvcmtib29rOnRoaXN9KSkubW9kZWw9ZX0pLHRoaXMuX2RlZmluZWROYW1lcy5tb2RlbD10LmRlZmluZWROYW1lcyx0aGlzLnZpZXdzPXQudmlld3MsdGhpcy5fdGhlbWVzPXQudGhlbWVzLHRoaXMubWVkaWE9dC5tZWRpYXx8W119fX0seyIuLi9jc3YvY3N2IjoxLCIuLi94bHN4L3hsc3giOjE0NCwiLi9kZWZpbmVkLW5hbWVzIjo2LCIuL3dvcmtzaGVldCI6MTR9XSwxNDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vdXRpbHMvdW5kZXItZGFzaCIpLHM9YSgiLi4vdXRpbHMvY29sLWNhY2hlIiksbz1hKCIuL3JhbmdlIikscj1hKCIuL3JvdyIpLHQ9YSgiLi9jb2x1bW4iKSxlPWEoIi4vZW51bXMiKSxsPWEoIi4vaW1hZ2UiKSxuPWEoIi4vdGFibGUiKSxpPWEoIi4vZGF0YS12YWxpZGF0aW9ucyIpLGY9YSgiLi4vdXRpbHMvZW5jcnlwdG9yIikse2NvcHlTdHlsZTpjfT1hKCIuLi91dGlscy9jb3B5LXN0eWxlIik7RS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKHUpe3U9dXx8e30sdGhpcy5fd29ya2Jvb2s9dS53b3JrYm9vayx0aGlzLmlkPXUuaWQsdGhpcy5vcmRlck5vPXUub3JkZXJObyx0aGlzLm5hbWU9dS5uYW1lLHRoaXMuc3RhdGU9dS5zdGF0ZXx8InZpc2libGUiLHRoaXMuX3Jvd3M9W10sdGhpcy5fY29sdW1ucz1udWxsLHRoaXMuX2tleXM9e30sdGhpcy5fbWVyZ2VzPXt9LHRoaXMucm93QnJlYWtzPVtdLHRoaXMucHJvcGVydGllcz1PYmplY3QuYXNzaWduKHt9LHtkZWZhdWx0Um93SGVpZ2h0OjE1LGR5RGVzY2VudDo1NSxvdXRsaW5lTGV2ZWxDb2w6MCxvdXRsaW5lTGV2ZWxSb3c6MH0sdS5wcm9wZXJ0aWVzKSx0aGlzLnBhZ2VTZXR1cD1PYmplY3QuYXNzaWduKHt9LHttYXJnaW5zOntsZWZ0Oi43LHJpZ2h0Oi43LHRvcDouNzUsYm90dG9tOi43NSxoZWFkZXI6LjMsZm9vdGVyOi4zfSxvcmllbnRhdGlvbjoicG9ydHJhaXQiLGhvcml6b250YWxEcGk6NDI5NDk2NzI5NSx2ZXJ0aWNhbERwaTo0Mjk0OTY3Mjk1LGZpdFRvUGFnZTohKCF1LnBhZ2VTZXR1cHx8IXUucGFnZVNldHVwLmZpdFRvV2lkdGgmJiF1LnBhZ2VTZXR1cC5maXRUb0hlaWdodHx8dS5wYWdlU2V0dXAuc2NhbGUpLHBhZ2VPcmRlcjoiZG93blRoZW5PdmVyIixibGFja0FuZFdoaXRlOiExLGRyYWZ0OiExLGNlbGxDb21tZW50czoiTm9uZSIsZXJyb3JzOiJkaXNwbGF5ZWQiLHNjYWxlOjEwMCxmaXRUb1dpZHRoOjEsZml0VG9IZWlnaHQ6MSxwYXBlclNpemU6dm9pZCAwLHNob3dSb3dDb2xIZWFkZXJzOiExLHNob3dHcmlkTGluZXM6ITEsZmlyc3RQYWdlTnVtYmVyOnZvaWQgMCxob3Jpem9udGFsQ2VudGVyZWQ6ITEsdmVydGljYWxDZW50ZXJlZDohMSxyb3dCcmVha3M6bnVsbCxjb2xCcmVha3M6bnVsbH0sdS5wYWdlU2V0dXApLHRoaXMuaGVhZGVyRm9vdGVyPU9iamVjdC5hc3NpZ24oe30se2RpZmZlcmVudEZpcnN0OiExLGRpZmZlcmVudE9kZEV2ZW46ITEsb2RkSGVhZGVyOm51bGwsb2RkRm9vdGVyOm51bGwsZXZlbkhlYWRlcjpudWxsLGV2ZW5Gb290ZXI6bnVsbCxmaXJzdEhlYWRlcjpudWxsLGZpcnN0Rm9vdGVyOm51bGx9LHUuaGVhZGVyRm9vdGVyKSx0aGlzLmRhdGFWYWxpZGF0aW9ucz1uZXcgaSx0aGlzLnZpZXdzPXUudmlld3N8fFtdLHRoaXMuYXV0b0ZpbHRlcj11LmF1dG9GaWx0ZXJ8fG51bGwsdGhpcy5fbWVkaWE9W10sdGhpcy5zaGVldFByb3RlY3Rpb249bnVsbCx0aGlzLnRhYmxlcz17fSx0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3M9W119Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1zZXQgbmFtZSh1KXtpZih1PT09dm9pZCAwJiYodT0ic2hlZXQiK3RoaXMuaWQpLHRoaXMuX25hbWUhPT11KXtpZih0eXBlb2YgdSE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcuIik7aWYodT09PSIiKXRocm93IG5ldyBFcnJvcigiVGhlIG5hbWUgY2FuJ3QgYmUgZW1wdHkuIik7aWYodT09PSJIaXN0b3J5Iil0aHJvdyBuZXcgRXJyb3IoJ1RoZSBuYW1lICJIaXN0b3J5IiBpcyBwcm90ZWN0ZWQuIFBsZWFzZSB1c2UgYSBkaWZmZXJlbnQgbmFtZS4nKTtpZigvWyo/Oi9cXFtcXV0vLnRlc3QodSkpdGhyb3cgbmV3IEVycm9yKGBXb3Jrc2hlZXQgbmFtZSAke3V9IGNhbm5vdCBpbmNsdWRlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnM6ICogPyA6IFxcIC8gWyBdYCk7aWYoLyheJyl8KCckKS8udGVzdCh1KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBmaXJzdCBvciBsYXN0IGNoYXJhY3RlciBvZiB3b3Jrc2hlZXQgbmFtZSBjYW5ub3QgYmUgYSBzaW5nbGUgcXVvdGF0aW9uIG1hcms6ICIrdSk7aWYodSYmdS5sZW5ndGg+MzEmJihjb25zb2xlLndhcm4oYFdvcmtzaGVldCBuYW1lICR7dX0gZXhjZWVkcyAzMSBjaGFycy4gVGhpcyB3aWxsIGJlIHRydW5jYXRlZGApLHU9dS5zdWJzdHJpbmcoMCwzMSkpLHRoaXMuX3dvcmtib29rLl93b3Jrc2hlZXRzLmZpbmQoZD0+ZCYmZC5uYW1lLnRvTG93ZXJDYXNlKCk9PT11LnRvTG93ZXJDYXNlKCkpKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IG5hbWUgYWxyZWFkeSBleGlzdHM6ICIrdSk7dGhpcy5fbmFtZT11fX1nZXQgd29ya2Jvb2soKXtyZXR1cm4gdGhpcy5fd29ya2Jvb2t9ZGVzdHJveSgpe3RoaXMuX3dvcmtib29rLnJlbW92ZVdvcmtzaGVldEV4KHRoaXMpfWdldCBkaW1lbnNpb25zKCl7Y29uc3QgdT1uZXcgbztyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKGQ9PntpZihkKXtjb25zdCBoPWQuZGltZW5zaW9ucztoJiZ1LmV4cGFuZChkLm51bWJlcixoLm1pbixkLm51bWJlcixoLm1heCl9fSksdX1nZXQgY29sdW1ucygpe3JldHVybiB0aGlzLl9jb2x1bW5zfXNldCBjb2x1bW5zKHUpe3RoaXMuX2hlYWRlclJvd0NvdW50PXUucmVkdWNlKCh3LF8pPT57Y29uc3QgQT0oXy5oZWFkZXI/MTpfLmhlYWRlcnMmJl8uaGVhZGVycy5sZW5ndGgpfHwwO3JldHVybiBNYXRoLm1heCh3LEEpfSwwKTtsZXQgZD0xO2NvbnN0IGg9dGhpcy5fY29sdW1ucz1bXTt1LmZvckVhY2godz0+e2NvbnN0IF89bmV3IHQodGhpcyxkKyssITEpO2gucHVzaChfKSxfLmRlZm49d30pfWdldENvbHVtbktleSh1KXtyZXR1cm4gdGhpcy5fa2V5c1t1XX1zZXRDb2x1bW5LZXkodSxkKXt0aGlzLl9rZXlzW3VdPWR9ZGVsZXRlQ29sdW1uS2V5KHUpe2RlbGV0ZSB0aGlzLl9rZXlzW3VdfWVhY2hDb2x1bW5LZXkodSl7bS5lYWNoKHRoaXMuX2tleXMsdSl9Z2V0Q29sdW1uKHUpe2lmKHR5cGVvZiB1PT0ic3RyaW5nIil7Y29uc3QgZD10aGlzLl9rZXlzW3VdO2lmKGQpcmV0dXJuIGQ7dT1zLmwybih1KX1pZih0aGlzLl9jb2x1bW5zfHwodGhpcy5fY29sdW1ucz1bXSksdT50aGlzLl9jb2x1bW5zLmxlbmd0aCl7bGV0IGQ9dGhpcy5fY29sdW1ucy5sZW5ndGgrMTtmb3IoO2Q8PXU7KXRoaXMuX2NvbHVtbnMucHVzaChuZXcgdCh0aGlzLGQrKykpfXJldHVybiB0aGlzLl9jb2x1bW5zW3UtMV19c3BsaWNlQ29sdW1ucyh1LGQpe2NvbnN0IGg9dGhpcy5fcm93cy5sZW5ndGg7Zm9yKHZhciB3PWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkodz4yP3ctMjowKSxBPTI7QTx3O0ErKylfW0EtMl09YXJndW1lbnRzW0FdO2lmKF8ubGVuZ3RoPjApZm9yKGxldCBEPTA7RDxoO0QrKyl7Y29uc3QgRj1bdSxkXTtfLmZvckVhY2goQj0+e0YucHVzaChCW0RdfHxudWxsKX0pO2NvbnN0IFU9dGhpcy5nZXRSb3coRCsxKTtVLnNwbGljZS5hcHBseShVLEYpfWVsc2UgdGhpcy5fcm93cy5mb3JFYWNoKEQ9PntEJiZELnNwbGljZSh1LGQpfSk7Y29uc3QgUD1fLmxlbmd0aC1kLEw9dStkLE49dGhpcy5fY29sdW1ucy5sZW5ndGg7aWYoUDwwKWZvcihsZXQgRD11K18ubGVuZ3RoO0Q8PU47RCsrKXRoaXMuZ2V0Q29sdW1uKEQpLmRlZm49dGhpcy5nZXRDb2x1bW4oRC1QKS5kZWZuO2Vsc2UgaWYoUD4wKWZvcihsZXQgRD1OO0Q+PUw7RC0tKXRoaXMuZ2V0Q29sdW1uKEQrUCkuZGVmbj10aGlzLmdldENvbHVtbihEKS5kZWZuO2ZvcihsZXQgRD11O0Q8dStfLmxlbmd0aDtEKyspdGhpcy5nZXRDb2x1bW4oRCkuZGVmbj1udWxsO3RoaXMud29ya2Jvb2suZGVmaW5lZE5hbWVzLnNwbGljZUNvbHVtbnModGhpcy5uYW1lLHUsZCxfLmxlbmd0aCl9Z2V0IGxhc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRDb2x1bW4odGhpcy5jb2x1bW5Db3VudCl9Z2V0IGNvbHVtbkNvdW50KCl7bGV0IHU9MDtyZXR1cm4gdGhpcy5lYWNoUm93KGQ9Pnt1PU1hdGgubWF4KHUsZC5jZWxsQ291bnQpfSksdX1nZXQgYWN0dWFsQ29sdW1uQ291bnQoKXtjb25zdCB1PVtdO2xldCBkPTA7cmV0dXJuIHRoaXMuZWFjaFJvdyhoPT57aC5lYWNoQ2VsbCh3PT57bGV0e2NvbDpffT13O3VbX118fCh1W19dPSEwLGQrKyl9KX0pLGR9X2NvbW1pdFJvdygpe31nZXQgX2xhc3RSb3dOdW1iZXIoKXtjb25zdCB1PXRoaXMuX3Jvd3M7bGV0IGQ9dS5sZW5ndGg7Zm9yKDtkPjAmJnVbZC0xXT09PXZvaWQgMDspZC0tO3JldHVybiBkfWdldCBfbmV4dFJvdygpe3JldHVybiB0aGlzLl9sYXN0Um93TnVtYmVyKzF9Z2V0IGxhc3RSb3coKXtpZih0aGlzLl9yb3dzLmxlbmd0aClyZXR1cm4gdGhpcy5fcm93c1t0aGlzLl9yb3dzLmxlbmd0aC0xXX1maW5kUm93KHUpe3JldHVybiB0aGlzLl9yb3dzW3UtMV19ZmluZFJvd3ModSxkKXtyZXR1cm4gdGhpcy5fcm93cy5zbGljZSh1LTEsdS0xK2QpfWdldCByb3dDb3VudCgpe3JldHVybiB0aGlzLl9sYXN0Um93TnVtYmVyfWdldCBhY3R1YWxSb3dDb3VudCgpe2xldCB1PTA7cmV0dXJuIHRoaXMuZWFjaFJvdygoKT0+e3UrK30pLHV9Z2V0Um93KHUpe2xldCBkPXRoaXMuX3Jvd3NbdS0xXTtyZXR1cm4gZHx8KGQ9dGhpcy5fcm93c1t1LTFdPW5ldyByKHRoaXMsdSkpLGR9Z2V0Um93cyh1LGQpe2lmKGQ8MSlyZXR1cm47Y29uc3QgaD1bXTtmb3IobGV0IHc9dTt3PHUrZDt3KyspaC5wdXNoKHRoaXMuZ2V0Um93KHcpKTtyZXR1cm4gaH1hZGRSb3codSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiJuIjtjb25zdCBoPXRoaXMuX25leHRSb3csdz10aGlzLmdldFJvdyhoKTtyZXR1cm4gdy52YWx1ZXM9dSx0aGlzLl9zZXRTdHlsZU9wdGlvbihoLGRbMF09PT0iaSI/ZDoibiIpLHd9YWRkUm93cyh1KXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06Im4iO2NvbnN0IGg9W107cmV0dXJuIHUuZm9yRWFjaCh3PT57aC5wdXNoKHRoaXMuYWRkUm93KHcsZCkpfSksaH1pbnNlcnRSb3codSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06Im4iO3JldHVybiB0aGlzLnNwbGljZVJvd3ModSwwLGQpLHRoaXMuX3NldFN0eWxlT3B0aW9uKHUsaCksdGhpcy5nZXRSb3codSl9aW5zZXJ0Um93cyh1LGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXToibiI7aWYodGhpcy5zcGxpY2VSb3dzKHUsMCwuLi5kKSxoIT09Im4iKWZvcihsZXQgdz0wO3c8ZC5sZW5ndGg7dysrKWhbMF09PT0ibyImJnRoaXMuZmluZFJvdyhkLmxlbmd0aCt1K3cpIT09dm9pZCAwP3RoaXMuX2NvcHlTdHlsZShkLmxlbmd0aCt1K3csdSt3LGhbMV09PT0iKyIpOmhbMF09PT0iaSImJnRoaXMuZmluZFJvdyh1LTEpIT09dm9pZCAwJiZ0aGlzLl9jb3B5U3R5bGUodS0xLHUrdyxoWzFdPT09IisiKTtyZXR1cm4gdGhpcy5nZXRSb3dzKHUsZC5sZW5ndGgpfV9zZXRTdHlsZU9wdGlvbih1KXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06Im4iO2RbMF09PT0ibyImJnRoaXMuZmluZFJvdyh1KzEpIT09dm9pZCAwP3RoaXMuX2NvcHlTdHlsZSh1KzEsdSxkWzFdPT09IisiKTpkWzBdPT09ImkiJiZ0aGlzLmZpbmRSb3codS0xKSE9PXZvaWQgMCYmdGhpcy5fY29weVN0eWxlKHUtMSx1LGRbMV09PT0iKyIpfV9jb3B5U3R5bGUodSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMCYmYXJndW1lbnRzWzJdO2NvbnN0IHc9dGhpcy5nZXRSb3codSksXz10aGlzLmdldFJvdyhkKTtfLnN0eWxlPWMody5zdHlsZSksdy5lYWNoQ2VsbCh7aW5jbHVkZUVtcHR5Omh9LChBLFApPT57Xy5nZXRDZWxsKFApLnN0eWxlPWMoQS5zdHlsZSl9KSxfLmhlaWdodD13LmhlaWdodH1kdXBsaWNhdGVSb3codSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMCYmYXJndW1lbnRzWzJdO2NvbnN0IHc9dGhpcy5fcm93c1t1LTFdLF89bmV3IEFycmF5KGQpLmZpbGwody52YWx1ZXMpO3RoaXMuc3BsaWNlUm93cyh1KzEsaD8wOmQsLi4uXyk7Zm9yKGxldCBBPTA7QTxkO0ErKyl7Y29uc3QgUD10aGlzLl9yb3dzW3UrQV07UC5zdHlsZT13LnN0eWxlLFAuaGVpZ2h0PXcuaGVpZ2h0LHcuZWFjaENlbGwoe2luY2x1ZGVFbXB0eTohMH0sKEwsTik9PntQLmdldENlbGwoTikuc3R5bGU9TC5zdHlsZX0pfX1zcGxpY2VSb3dzKHUsZCl7Y29uc3QgaD11K2Q7Zm9yKHZhciB3PWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkodz4yP3ctMjowKSxBPTI7QTx3O0ErKylfW0EtMl09YXJndW1lbnRzW0FdO2NvbnN0IFA9Xy5sZW5ndGgsTD1QLWQsTj10aGlzLl9yb3dzLmxlbmd0aDtsZXQgRCxGO2lmKEw8MClmb3IodT09PU4mJih0aGlzLl9yb3dzW04tMV09dm9pZCAwKSxEPWg7RDw9TjtEKyspaWYoRj10aGlzLl9yb3dzW0QtMV0sRil7Y29uc3QgVT10aGlzLmdldFJvdyhEK0wpO1UudmFsdWVzPUYudmFsdWVzLFUuc3R5bGU9Ri5zdHlsZSxVLmhlaWdodD1GLmhlaWdodCxGLmVhY2hDZWxsKHtpbmNsdWRlRW1wdHk6ITB9LChCLFMpPT57VS5nZXRDZWxsKFMpLnN0eWxlPUIuc3R5bGV9KSx0aGlzLl9yb3dzW0QtMV09dm9pZCAwfWVsc2UgdGhpcy5fcm93c1tEK0wtMV09dm9pZCAwO2Vsc2UgaWYoTD4wKWZvcihEPU47RD49aDtELS0paWYoRj10aGlzLl9yb3dzW0QtMV0sRil7Y29uc3QgVT10aGlzLmdldFJvdyhEK0wpO1UudmFsdWVzPUYudmFsdWVzLFUuc3R5bGU9Ri5zdHlsZSxVLmhlaWdodD1GLmhlaWdodCxGLmVhY2hDZWxsKHtpbmNsdWRlRW1wdHk6ITB9LChCLFMpPT57aWYoVS5nZXRDZWxsKFMpLnN0eWxlPUIuc3R5bGUsQi5fdmFsdWUuY29uc3RydWN0b3IubmFtZT09PSJNZXJnZVZhbHVlIil7Y29uc3QgQz10aGlzLmdldFJvdyhCLl9yb3cuX251bWJlcitQKS5nZXRDZWxsKFMpLHY9Qi5fdmFsdWUuX21hc3RlcixwPXRoaXMuZ2V0Um93KHYuX3Jvdy5fbnVtYmVyK1ApLmdldENlbGwodi5fY29sdW1uLl9udW1iZXIpO0MubWVyZ2UocCl9fSl9ZWxzZSB0aGlzLl9yb3dzW0QrTC0xXT12b2lkIDA7Zm9yKEQ9MDtEPFA7RCsrKXtjb25zdCBVPXRoaXMuZ2V0Um93KHUrRCk7VS5zdHlsZT17fSxVLnZhbHVlcz1fW0RdfXRoaXMud29ya2Jvb2suZGVmaW5lZE5hbWVzLnNwbGljZVJvd3ModGhpcy5uYW1lLHUsZCxQKX1lYWNoUm93KHUsZCl7aWYoZHx8KGQ9dSx1PXZvaWQgMCksdSYmdS5pbmNsdWRlRW1wdHkpe2NvbnN0IGg9dGhpcy5fcm93cy5sZW5ndGg7Zm9yKGxldCB3PTE7dzw9aDt3KyspZCh0aGlzLmdldFJvdyh3KSx3KX1lbHNlIHRoaXMuX3Jvd3MuZm9yRWFjaChoPT57aCYmaC5oYXNWYWx1ZXMmJmQoaCxoLm51bWJlcil9KX1nZXRTaGVldFZhbHVlcygpe2NvbnN0IHU9W107cmV0dXJuIHRoaXMuX3Jvd3MuZm9yRWFjaChkPT57ZCYmKHVbZC5udW1iZXJdPWQudmFsdWVzKX0pLHV9ZmluZENlbGwodSxkKXtjb25zdCBoPXMuZ2V0QWRkcmVzcyh1LGQpLHc9dGhpcy5fcm93c1toLnJvdy0xXTtyZXR1cm4gdz93LmZpbmRDZWxsKGguY29sKTp2b2lkIDB9Z2V0Q2VsbCh1LGQpe2NvbnN0IGg9cy5nZXRBZGRyZXNzKHUsZCk7cmV0dXJuIHRoaXMuZ2V0Um93KGgucm93KS5nZXRDZWxsRXgoaCl9bWVyZ2VDZWxscygpe2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KHUpLGg9MDtoPHU7aCsrKWRbaF09YXJndW1lbnRzW2hdO2NvbnN0IHc9bmV3IG8oZCk7dGhpcy5fbWVyZ2VDZWxsc0ludGVybmFsKHcpfW1lcmdlQ2VsbHNXaXRob3V0U3R5bGUoKXtmb3IodmFyIHU9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheSh1KSxoPTA7aDx1O2grKylkW2hdPWFyZ3VtZW50c1toXTtjb25zdCB3PW5ldyBvKGQpO3RoaXMuX21lcmdlQ2VsbHNJbnRlcm5hbCh3LCEwKX1fbWVyZ2VDZWxsc0ludGVybmFsKHUsZCl7bS5lYWNoKHRoaXMuX21lcmdlcyx3PT57aWYody5pbnRlcnNlY3RzKHUpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IG1lcmdlIGFscmVhZHkgbWVyZ2VkIGNlbGxzIil9KTtjb25zdCBoPXRoaXMuZ2V0Q2VsbCh1LnRvcCx1LmxlZnQpO2ZvcihsZXQgdz11LnRvcDt3PD11LmJvdHRvbTt3KyspZm9yKGxldCBfPXUubGVmdDtfPD11LnJpZ2h0O18rKykodz51LnRvcHx8Xz51LmxlZnQpJiZ0aGlzLmdldENlbGwodyxfKS5tZXJnZShoLGQpO3RoaXMuX21lcmdlc1toLmFkZHJlc3NdPXV9X3VuTWVyZ2VNYXN0ZXIodSl7Y29uc3QgZD10aGlzLl9tZXJnZXNbdS5hZGRyZXNzXTtpZihkKXtmb3IobGV0IGg9ZC50b3A7aDw9ZC5ib3R0b207aCsrKWZvcihsZXQgdz1kLmxlZnQ7dzw9ZC5yaWdodDt3KyspdGhpcy5nZXRDZWxsKGgsdykudW5tZXJnZSgpO2RlbGV0ZSB0aGlzLl9tZXJnZXNbdS5hZGRyZXNzXX19Z2V0IGhhc01lcmdlcygpe3JldHVybiBtLnNvbWUodGhpcy5fbWVyZ2VzLEJvb2xlYW4pfXVuTWVyZ2VDZWxscygpe2Zvcih2YXIgdT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KHUpLGg9MDtoPHU7aCsrKWRbaF09YXJndW1lbnRzW2hdO2NvbnN0IHc9bmV3IG8oZCk7Zm9yKGxldCBfPXcudG9wO188PXcuYm90dG9tO18rKylmb3IobGV0IEE9dy5sZWZ0O0E8PXcucmlnaHQ7QSsrKXtjb25zdCBQPXRoaXMuZmluZENlbGwoXyxBKTtQJiYoUC50eXBlPT09ZS5WYWx1ZVR5cGUuTWVyZ2U/dGhpcy5fdW5NZXJnZU1hc3RlcihQLm1hc3Rlcik6dGhpcy5fbWVyZ2VzW1AuYWRkcmVzc10mJnRoaXMuX3VuTWVyZ2VNYXN0ZXIoUCkpfX1maWxsRm9ybXVsYSh1LGQsaCl7bGV0IHc9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiJzaGFyZWQiO2NvbnN0IF89cy5kZWNvZGUodSkse3RvcDpBLGxlZnQ6UCxib3R0b206TCxyaWdodDpOfT1fLEQ9Ti1QKzEsRj1zLmVuY29kZUFkZHJlc3MoQSxQKSxVPXc9PT0ic2hhcmVkIjtsZXQgQjtCPXR5cGVvZiBoPT0iZnVuY3Rpb24iP2g6QXJyYXkuaXNBcnJheShoKT9BcnJheS5pc0FycmF5KGhbMF0pPyhDLHYpPT5oW0MtQV1bdi1QXTooQyx2KT0+aFsoQy1BKSpEKyh2LVApXTooKT0+e307bGV0IFM9ITA7Zm9yKGxldCBDPUE7Qzw9TDtDKyspZm9yKGxldCB2PVA7djw9Tjt2KyspUz8odGhpcy5nZXRDZWxsKEMsdikudmFsdWU9e3NoYXJlVHlwZTp3LGZvcm11bGE6ZCxyZWY6dSxyZXN1bHQ6QihDLHYpfSxTPSExKTp0aGlzLmdldENlbGwoQyx2KS52YWx1ZT1VP3tzaGFyZWRGb3JtdWxhOkYscmVzdWx0OkIoQyx2KX06QihDLHYpfWFkZEltYWdlKHUsZCl7Y29uc3QgaD17dHlwZToiaW1hZ2UiLGltYWdlSWQ6dSxyYW5nZTpkfTt0aGlzLl9tZWRpYS5wdXNoKG5ldyBsKHRoaXMsaCkpfWdldEltYWdlcygpe3JldHVybiB0aGlzLl9tZWRpYS5maWx0ZXIodT0+dS50eXBlPT09ImltYWdlIil9YWRkQmFja2dyb3VuZEltYWdlKHUpe2NvbnN0IGQ9e3R5cGU6ImJhY2tncm91bmQiLGltYWdlSWQ6dX07dGhpcy5fbWVkaWEucHVzaChuZXcgbCh0aGlzLGQpKX1nZXRCYWNrZ3JvdW5kSW1hZ2VJZCgpe2NvbnN0IHU9dGhpcy5fbWVkaWEuZmluZChkPT5kLnR5cGU9PT0iYmFja2dyb3VuZCIpO3JldHVybiB1JiZ1LmltYWdlSWR9cHJvdGVjdCh1LGQpe3JldHVybiBuZXcgUHJvbWlzZShoPT57dGhpcy5zaGVldFByb3RlY3Rpb249e3NoZWV0OiEwfSxkJiYic3BpbkNvdW50ImluIGQmJihkLnNwaW5Db3VudD1OdW1iZXIuaXNGaW5pdGUoZC5zcGluQ291bnQpP01hdGgucm91bmQoTWF0aC5tYXgoMCxkLnNwaW5Db3VudCkpOjFlNSksdSYmKHRoaXMuc2hlZXRQcm90ZWN0aW9uLmFsZ29yaXRobU5hbWU9IlNIQS01MTIiLHRoaXMuc2hlZXRQcm90ZWN0aW9uLnNhbHRWYWx1ZT1mLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygiYmFzZTY0IiksdGhpcy5zaGVldFByb3RlY3Rpb24uc3BpbkNvdW50PWQmJiJzcGluQ291bnQiaW4gZD9kLnNwaW5Db3VudDoxZTUsdGhpcy5zaGVldFByb3RlY3Rpb24uaGFzaFZhbHVlPWYuY29udmVydFBhc3N3b3JkVG9IYXNoKHUsIlNIQTUxMiIsdGhpcy5zaGVldFByb3RlY3Rpb24uc2FsdFZhbHVlLHRoaXMuc2hlZXRQcm90ZWN0aW9uLnNwaW5Db3VudCkpLGQmJih0aGlzLnNoZWV0UHJvdGVjdGlvbj1PYmplY3QuYXNzaWduKHRoaXMuc2hlZXRQcm90ZWN0aW9uLGQpLCF1JiYic3BpbkNvdW50ImluIGQmJmRlbGV0ZSB0aGlzLnNoZWV0UHJvdGVjdGlvbi5zcGluQ291bnQpLGgoKX0pfXVucHJvdGVjdCgpe3RoaXMuc2hlZXRQcm90ZWN0aW9uPW51bGx9YWRkVGFibGUodSl7Y29uc3QgZD1uZXcgbih0aGlzLHUpO3JldHVybiB0aGlzLnRhYmxlc1t1Lm5hbWVdPWQsZH1nZXRUYWJsZSh1KXtyZXR1cm4gdGhpcy50YWJsZXNbdV19cmVtb3ZlVGFibGUodSl7ZGVsZXRlIHRoaXMudGFibGVzW3VdfWdldFRhYmxlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMudGFibGVzKX1hZGRDb25kaXRpb25hbEZvcm1hdHRpbmcodSl7dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzLnB1c2godSl9cmVtb3ZlQ29uZGl0aW9uYWxGb3JtYXR0aW5nKHUpe3R5cGVvZiB1PT0ibnVtYmVyIj90aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3Muc3BsaWNlKHUsMSk6dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzPXUgaW5zdGFuY2VvZiBGdW5jdGlvbj90aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MuZmlsdGVyKHUpOltdfWdldCB0YWJDb2xvcigpe3JldHVybiBjb25zb2xlLnRyYWNlKCJ3b3Jrc2hlZXQudGFiQ29sb3IgcHJvcGVydHkgaXMgbm93IGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugd29ya3NoZWV0LnByb3BlcnRpZXMudGFiQ29sb3IiKSx0aGlzLnByb3BlcnRpZXMudGFiQ29sb3J9c2V0IHRhYkNvbG9yKHUpe2NvbnNvbGUudHJhY2UoIndvcmtzaGVldC50YWJDb2xvciBwcm9wZXJ0eSBpcyBub3cgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB3b3Jrc2hlZXQucHJvcGVydGllcy50YWJDb2xvciIpLHRoaXMucHJvcGVydGllcy50YWJDb2xvcj11fWdldCBtb2RlbCgpe2NvbnN0IHU9e2lkOnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsZGF0YVZhbGlkYXRpb25zOnRoaXMuZGF0YVZhbGlkYXRpb25zLm1vZGVsLHByb3BlcnRpZXM6dGhpcy5wcm9wZXJ0aWVzLHN0YXRlOnRoaXMuc3RhdGUscGFnZVNldHVwOnRoaXMucGFnZVNldHVwLGhlYWRlckZvb3Rlcjp0aGlzLmhlYWRlckZvb3Rlcixyb3dCcmVha3M6dGhpcy5yb3dCcmVha3Msdmlld3M6dGhpcy52aWV3cyxhdXRvRmlsdGVyOnRoaXMuYXV0b0ZpbHRlcixtZWRpYTp0aGlzLl9tZWRpYS5tYXAodz0+dy5tb2RlbCksc2hlZXRQcm90ZWN0aW9uOnRoaXMuc2hlZXRQcm90ZWN0aW9uLHRhYmxlczpPYmplY3QudmFsdWVzKHRoaXMudGFibGVzKS5tYXAodz0+dy5tb2RlbCksY29uZGl0aW9uYWxGb3JtYXR0aW5nczp0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3N9O3UuY29scz10LnRvTW9kZWwodGhpcy5jb2x1bW5zKTtjb25zdCBkPXUucm93cz1bXSxoPXUuZGltZW5zaW9ucz1uZXcgbztyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKHc9Pntjb25zdCBfPXcmJncubW9kZWw7XyYmKGguZXhwYW5kKF8ubnVtYmVyLF8ubWluLF8ubnVtYmVyLF8ubWF4KSxkLnB1c2goXykpfSksdS5tZXJnZXM9W10sbS5lYWNoKHRoaXMuX21lcmdlcyx3PT57dS5tZXJnZXMucHVzaCh3LnJhbmdlKX0pLHV9X3BhcnNlUm93cyh1KXt0aGlzLl9yb3dzPVtdLHUucm93cy5mb3JFYWNoKGQ9Pntjb25zdCBoPW5ldyByKHRoaXMsZC5udW1iZXIpO3RoaXMuX3Jvd3NbaC5udW1iZXItMV09aCxoLm1vZGVsPWR9KX1fcGFyc2VNZXJnZUNlbGxzKHUpe20uZWFjaCh1Lm1lcmdlQ2VsbHMsZD0+e3RoaXMubWVyZ2VDZWxsc1dpdGhvdXRTdHlsZShkKX0pfXNldCBtb2RlbCh1KXt0aGlzLm5hbWU9dS5uYW1lLHRoaXMuX2NvbHVtbnM9dC5mcm9tTW9kZWwodGhpcyx1LmNvbHMpLHRoaXMuX3BhcnNlUm93cyh1KSx0aGlzLl9wYXJzZU1lcmdlQ2VsbHModSksdGhpcy5kYXRhVmFsaWRhdGlvbnM9bmV3IGkodS5kYXRhVmFsaWRhdGlvbnMpLHRoaXMucHJvcGVydGllcz11LnByb3BlcnRpZXMsdGhpcy5wYWdlU2V0dXA9dS5wYWdlU2V0dXAsdGhpcy5oZWFkZXJGb290ZXI9dS5oZWFkZXJGb290ZXIsdGhpcy52aWV3cz11LnZpZXdzLHRoaXMuYXV0b0ZpbHRlcj11LmF1dG9GaWx0ZXIsdGhpcy5fbWVkaWE9dS5tZWRpYS5tYXAoZD0+bmV3IGwodGhpcyxkKSksdGhpcy5zaGVldFByb3RlY3Rpb249dS5zaGVldFByb3RlY3Rpb24sdGhpcy50YWJsZXM9dS50YWJsZXMucmVkdWNlKChkLGgpPT57Y29uc3Qgdz1uZXcgbjtyZXR1cm4gdy5tb2RlbD1oLGRbaC5uYW1lXT13LGR9LHt9KSx0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3M9dS5jb25kaXRpb25hbEZvcm1hdHRpbmdzfX19LHsiLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi4vdXRpbHMvY29weS1zdHlsZSI6MjAsIi4uL3V0aWxzL2VuY3J5cHRvciI6MjEsIi4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuL2NvbHVtbiI6NCwiLi9kYXRhLXZhbGlkYXRpb25zIjo1LCIuL2VudW1zIjo3LCIuL2ltYWdlIjo4LCIuL3JhbmdlIjoxMCwiLi9yb3ciOjExLCIuL3RhYmxlIjoxMn1dLDE1OltmdW5jdGlvbihhLEUsayl7YSgiY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UiKSxhKCJjb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5IiksYSgiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24iKSxhKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMiKSxhKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnZhbHVlcyIpLGEoImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wiKSxhKCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yIiksYSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yIiksYSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzIiksYSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQtaW5kZXgiKSxhKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZCIpLGEoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50IiksYSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcyIpLGEoImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuIiksYSgicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lIik7Y29uc3QgbT17V29ya2Jvb2s6YSgiLi9kb2Mvd29ya2Jvb2siKX0scz1hKCIuL2RvYy9lbnVtcyIpO09iamVjdC5rZXlzKHMpLmZvckVhY2gobz0+e21bb109c1tvXX0pLEUuZXhwb3J0cz1tfSx7Ii4vZG9jL2VudW1zIjo3LCIuL2RvYy93b3JrYm9vayI6MTMsImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kIjozNTksImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWluZGV4IjozNTgsImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcyI6MzYwLCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IiOjM2MSwiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4iOjM2MywiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24iOjM2NCwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzIjozNjYsImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudmFsdWVzIjozNjcsImNvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlIjozNzIsImNvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkiOjM3MSwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5mcm9tLWNvZGUtcG9pbnQiOjM3NiwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcyI6Mzc3LCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sIjozODEsImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IiOjM3OCwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lIjo0OTJ9XSwxNjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09dHlwZW9mIFRleHREZWNvZGVyPiJ1Ij9udWxsOm5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtrLmJ1ZmZlclRvU3RyaW5nPWZ1bmN0aW9uKHMpe3JldHVybiB0eXBlb2Ygcz09InN0cmluZyI/czptP20uZGVjb2RlKHMpOnMudG9TdHJpbmcoKX19LHt9XSwxNzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09dHlwZW9mIFRleHRFbmNvZGVyPiJ1Ij9udWxsOm5ldyBUZXh0RW5jb2RlcigidXRmLTgiKSx7QnVmZmVyOnN9PWEoImJ1ZmZlciIpO2suc3RyaW5nVG9CdWZmZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHR5cGVvZiBvIT0ic3RyaW5nIj9vOm0/cy5mcm9tKG0uZW5jb2RlKG8pLmJ1ZmZlcik6cy5mcm9tKG8pfX0se2J1ZmZlcjoyMjB9XSwxODpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi91bmRlci1kYXNoIikscz1hKCIuL2NvbC1jYWNoZSIpO0UuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihvKXt0aGlzLnRlbXBsYXRlPW8sdGhpcy5zaGVldHM9e319YWRkQ2VsbChvKXt0aGlzLmFkZENlbGxFeChzLmRlY29kZUV4KG8pKX1nZXRDZWxsKG8pe3JldHVybiB0aGlzLmZpbmRDZWxsRXgocy5kZWNvZGVFeChvKSwhMCl9ZmluZENlbGwobyl7cmV0dXJuIHRoaXMuZmluZENlbGxFeChzLmRlY29kZUV4KG8pLCExKX1maW5kQ2VsbEF0KG8scix0KXtjb25zdCBlPXRoaXMuc2hlZXRzW29dLGw9ZSYmZVtyXTtyZXR1cm4gbCYmbFt0XX1hZGRDZWxsRXgobyl7aWYoby50b3ApZm9yKGxldCByPW8udG9wO3I8PW8uYm90dG9tO3IrKylmb3IobGV0IHQ9by5sZWZ0O3Q8PW8ucmlnaHQ7dCsrKXRoaXMuZ2V0Q2VsbEF0KG8uc2hlZXROYW1lLHIsdCk7ZWxzZSB0aGlzLmZpbmRDZWxsRXgobywhMCl9Z2V0Q2VsbEV4KG8pe3JldHVybiB0aGlzLmZpbmRDZWxsRXgobywhMCl9ZmluZENlbGxFeChvLHIpe2NvbnN0IHQ9dGhpcy5maW5kU2hlZXQobyxyKSxlPXRoaXMuZmluZFNoZWV0Um93KHQsbyxyKTtyZXR1cm4gdGhpcy5maW5kUm93Q2VsbChlLG8scil9Z2V0Q2VsbEF0KG8scix0KXtjb25zdCBlPXRoaXMuc2hlZXRzW29dfHwodGhpcy5zaGVldHNbb109W10pLGw9ZVtyXXx8KGVbcl09W10pO3JldHVybiBsW3RdfHwobFt0XT17c2hlZXROYW1lOm8sYWRkcmVzczpzLm4ybCh0KStyLHJvdzpyLGNvbDp0fSl9cmVtb3ZlQ2VsbEV4KG8pe2NvbnN0IHI9dGhpcy5maW5kU2hlZXQobyk7aWYoIXIpcmV0dXJuO2NvbnN0IHQ9dGhpcy5maW5kU2hlZXRSb3cocixvKTt0JiZkZWxldGUgdFtvLmNvbF19Zm9yRWFjaEluU2hlZXQobyxyKXtjb25zdCB0PXRoaXMuc2hlZXRzW29dO3QmJnQuZm9yRWFjaCgoZSxsKT0+e2UmJmUuZm9yRWFjaCgobixpKT0+e24mJnIobixsLGkpfSl9KX1mb3JFYWNoKG8pe20uZWFjaCh0aGlzLnNoZWV0cywocix0KT0+e3RoaXMuZm9yRWFjaEluU2hlZXQodCxvKX0pfW1hcChvKXtjb25zdCByPVtdO3JldHVybiB0aGlzLmZvckVhY2godD0+e3IucHVzaChvKHQpKX0pLHJ9ZmluZFNoZWV0KG8scil7Y29uc3QgdD1vLnNoZWV0TmFtZTtyZXR1cm4gdGhpcy5zaGVldHNbdF0/dGhpcy5zaGVldHNbdF06cj90aGlzLnNoZWV0c1t0XT1bXTp2b2lkIDB9ZmluZFNoZWV0Um93KG8scix0KXtjb25zdHtyb3c6ZX09cjtyZXR1cm4gbyYmb1tlXT9vW2VdOnQ/b1tlXT1bXTp2b2lkIDB9ZmluZFJvd0NlbGwobyxyLHQpe2NvbnN0e2NvbDplfT1yO3JldHVybiBvJiZvW2VdP29bZV06dD9vW2VdPXRoaXMudGVtcGxhdGU/T2JqZWN0LmFzc2lnbihyLEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50ZW1wbGF0ZSkpKTpyOnZvaWQgMH1zcGxpY2VSb3dzKG8scix0LGUpe2NvbnN0IGw9dGhpcy5zaGVldHNbb107aWYobCl7Y29uc3Qgbj1bXTtmb3IobGV0IGk9MDtpPGU7aSsrKW4ucHVzaChbXSk7bC5zcGxpY2Uocix0LC4uLm4pfX1zcGxpY2VDb2x1bW5zKG8scix0LGUpe2NvbnN0IGw9dGhpcy5zaGVldHNbb107aWYobCl7Y29uc3Qgbj1bXTtmb3IobGV0IGk9MDtpPGU7aSsrKW4ucHVzaChudWxsKTttLmVhY2gobCxpPT57aS5zcGxpY2Uocix0LC4uLm4pfSl9fX19LHsiLi9jb2wtY2FjaGUiOjE5LCIuL3VuZGVyLWRhc2giOjI2fV0sMTk6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPS9eW0EtWl0rXGQrJC8scz17X2RpY3Rpb25hcnk6WyJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiJdLF9sMm5GaWxsOjAsX2wybjp7fSxfbjJsOltdLF9sZXZlbDpvPT5vPD0yNj8xOm88PTY3Nj8yOjMsX2ZpbGwobyl7bGV0IHIsdCxlLGwsbixpPTE7aWYobz49NCl0aHJvdyBuZXcgRXJyb3IoIk91dCBvZiBib3VuZHMuIEV4Y2VsIHN1cHBvcnRzIGNvbHVtbnMgZnJvbSAxIHRvIDE2Mzg0Iik7aWYodGhpcy5fbDJuRmlsbDwxJiZvPj0xKXtmb3IoO2k8PTI2OylyPXRoaXMuX2RpY3Rpb25hcnlbaS0xXSx0aGlzLl9uMmxbaV09cix0aGlzLl9sMm5bcl09aSxpKys7dGhpcy5fbDJuRmlsbD0xfWlmKHRoaXMuX2wybkZpbGw8MiYmbz49Mil7Zm9yKGk9Mjc7aTw9NzAyOyl0PWktMjcsZT10JTI2LGw9TWF0aC5mbG9vcih0LzI2KSxyPXRoaXMuX2RpY3Rpb25hcnlbbF0rdGhpcy5fZGljdGlvbmFyeVtlXSx0aGlzLl9uMmxbaV09cix0aGlzLl9sMm5bcl09aSxpKys7dGhpcy5fbDJuRmlsbD0yfWlmKHRoaXMuX2wybkZpbGw8MyYmbz49Myl7Zm9yKGk9NzAzO2k8PTE2Mzg0Oyl0PWktNzAzLGU9dCUyNixsPU1hdGguZmxvb3IodC8yNiklMjYsbj1NYXRoLmZsb29yKHQvNjc2KSxyPXRoaXMuX2RpY3Rpb25hcnlbbl0rdGhpcy5fZGljdGlvbmFyeVtsXSt0aGlzLl9kaWN0aW9uYXJ5W2VdLHRoaXMuX24ybFtpXT1yLHRoaXMuX2wybltyXT1pLGkrKzt0aGlzLl9sMm5GaWxsPTN9fSxsMm4obyl7aWYodGhpcy5fbDJuW29dfHx0aGlzLl9maWxsKG8ubGVuZ3RoKSwhdGhpcy5fbDJuW29dKXRocm93IG5ldyBFcnJvcigiT3V0IG9mIGJvdW5kcy4gSW52YWxpZCBjb2x1bW4gbGV0dGVyOiAiK28pO3JldHVybiB0aGlzLl9sMm5bb119LG4ybChvKXtpZihvPDF8fG8+MTYzODQpdGhyb3cgbmV3IEVycm9yKG8rIiBpcyBvdXQgb2YgYm91bmRzLiBFeGNlbCBzdXBwb3J0cyBjb2x1bW5zIGZyb20gMSB0byAxNjM4NCIpO3JldHVybiB0aGlzLl9uMmxbb118fHRoaXMuX2ZpbGwodGhpcy5fbGV2ZWwobykpLHRoaXMuX24ybFtvXX0sX2hhc2g6e30sdmFsaWRhdGVBZGRyZXNzKG8pe2lmKCFtLnRlc3QobykpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEFkZHJlc3M6ICIrbyk7cmV0dXJuITB9LGRlY29kZUFkZHJlc3Mobyl7Y29uc3Qgcj1vLmxlbmd0aDw1JiZ0aGlzLl9oYXNoW29dO2lmKHIpcmV0dXJuIHI7bGV0IHQ9ITEsZT0iIixsPTAsbj0hMSxpPSIiLGY9MDtmb3IobGV0IHUsZD0wO2Q8by5sZW5ndGg7ZCsrKWlmKHU9by5jaGFyQ29kZUF0KGQpLCFuJiZ1Pj02NSYmdTw9OTApdD0hMCxlKz1vW2RdLGw9MjYqbCt1LTY0O2Vsc2UgaWYodT49NDgmJnU8PTU3KW49ITAsaSs9b1tkXSxmPTEwKmYrdS00ODtlbHNlIGlmKG4mJnQmJnUhPT0zNilicmVhaztpZih0KXtpZihsPjE2Mzg0KXRocm93IG5ldyBFcnJvcigiT3V0IG9mIGJvdW5kcy4gSW52YWxpZCBjb2x1bW4gbGV0dGVyOiAiK2UpfWVsc2UgbD12b2lkIDA7bnx8KGY9dm9pZCAwKTtjb25zdCBjPXthZGRyZXNzOm89ZStpLGNvbDpsLHJvdzpmLCRjb2wkcm93OmAkJHtlfSQke2l9YH07cmV0dXJuIGw8PTEwMCYmZjw9MTAwJiYodGhpcy5faGFzaFtvXT1jLHRoaXMuX2hhc2hbYy4kY29sJHJvd109YyksY30sZ2V0QWRkcmVzcyhvLHIpe2lmKHIpe2NvbnN0IHQ9dGhpcy5uMmwocikrbztyZXR1cm4gdGhpcy5kZWNvZGVBZGRyZXNzKHQpfXJldHVybiB0aGlzLmRlY29kZUFkZHJlc3Mobyl9LGRlY29kZShvKXtjb25zdCByPW8uc3BsaXQoIjoiKTtpZihyLmxlbmd0aD09PTIpe2NvbnN0IHQ9dGhpcy5kZWNvZGVBZGRyZXNzKHJbMF0pLGU9dGhpcy5kZWNvZGVBZGRyZXNzKHJbMV0pLGw9e3RvcDpNYXRoLm1pbih0LnJvdyxlLnJvdyksbGVmdDpNYXRoLm1pbih0LmNvbCxlLmNvbCksYm90dG9tOk1hdGgubWF4KHQucm93LGUucm93KSxyaWdodDpNYXRoLm1heCh0LmNvbCxlLmNvbCl9O3JldHVybiBsLnRsPXRoaXMubjJsKGwubGVmdCkrbC50b3AsbC5icj10aGlzLm4ybChsLnJpZ2h0KStsLmJvdHRvbSxsLmRpbWVuc2lvbnM9YCR7bC50bH06JHtsLmJyfWAsbH1yZXR1cm4gdGhpcy5kZWNvZGVBZGRyZXNzKG8pfSxkZWNvZGVFeChvKXtjb25zdCByPW8ubWF0Y2goLyg/Oig/Oig/OicoKD86W14nXXwnJykqKScpfChbXideICFdKikpISk/KC4qKS8pLHQ9clsxXXx8clsyXSxlPXJbM10sbD1lLnNwbGl0KCI6Iik7aWYobC5sZW5ndGg+MSl7bGV0IGk9dGhpcy5kZWNvZGVBZGRyZXNzKGxbMF0pLGY9dGhpcy5kZWNvZGVBZGRyZXNzKGxbMV0pO2NvbnN0IGM9TWF0aC5taW4oaS5yb3csZi5yb3cpLHU9TWF0aC5taW4oaS5jb2wsZi5jb2wpLGQ9TWF0aC5tYXgoaS5yb3csZi5yb3cpLGg9TWF0aC5tYXgoaS5jb2wsZi5jb2wpO3JldHVybiBpPXRoaXMubjJsKHUpK2MsZj10aGlzLm4ybChoKStkLHt0b3A6YyxsZWZ0OnUsYm90dG9tOmQscmlnaHQ6aCxzaGVldE5hbWU6dCx0bDp7YWRkcmVzczppLGNvbDp1LHJvdzpjLCRjb2wkcm93OmAkJHt0aGlzLm4ybCh1KX0kJHtjfWAsc2hlZXROYW1lOnR9LGJyOnthZGRyZXNzOmYsY29sOmgscm93OmQsJGNvbCRyb3c6YCQke3RoaXMubjJsKGgpfSQke2R9YCxzaGVldE5hbWU6dH0sZGltZW5zaW9uczpgJHtpfToke2Z9YH19aWYoZS5zdGFydHNXaXRoKCIjIikpcmV0dXJuIHQ/e3NoZWV0TmFtZTp0LGVycm9yOmV9OntlcnJvcjplfTtjb25zdCBuPXRoaXMuZGVjb2RlQWRkcmVzcyhlKTtyZXR1cm4gdD97c2hlZXROYW1lOnQsLi4ubn06bn0sZW5jb2RlQWRkcmVzczoobyxyKT0+cy5uMmwocikrbyxlbmNvZGUoKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAyOnJldHVybiBzLmVuY29kZUFkZHJlc3MoYXJndW1lbnRzWzBdLGFyZ3VtZW50c1sxXSk7Y2FzZSA0OnJldHVybmAke3MuZW5jb2RlQWRkcmVzcyhhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKX06JHtzLmVuY29kZUFkZHJlc3MoYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSl9YDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQ2FuIG9ubHkgZW5jb2RlIHdpdGggMiBvciA0IGFyZ3VtZW50cyIpfX0saW5SYW5nZShvLHIpe2NvbnN0W3QsZSwsbCxuXT1vLFtpLGZdPXI7cmV0dXJuIGk+PXQmJmk8PWwmJmY+PWUmJmY8PW59fTtFLmV4cG9ydHM9c30se31dLDIwOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT0obyxyKT0+KHsuLi5vLC4uLnIucmVkdWNlKCh0LGUpPT4ob1tlXSYmKHRbZV09ey4uLm9bZV19KSx0KSx7fSl9KSxzPWZ1bmN0aW9uKG8scix0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106W107b1t0XSYmKHJbdF09bShvW3RdLGUpKX07ay5jb3B5U3R5bGU9bz0+e2lmKCFvKXJldHVybiBvO2lmKHI9byxPYmplY3Qua2V5cyhyKS5sZW5ndGg9PT0wKXJldHVybnt9O3ZhciByO2NvbnN0IHQ9ey4uLm99O3JldHVybiBzKG8sdCwiZm9udCIsWyJjb2xvciJdKSxzKG8sdCwiYWxpZ25tZW50IikscyhvLHQsInByb3RlY3Rpb24iKSxvLmJvcmRlciYmKHMobyx0LCJib3JkZXIiKSxzKG8uYm9yZGVyLHQuYm9yZGVyLCJ0b3AiLFsiY29sb3IiXSkscyhvLmJvcmRlcix0LmJvcmRlciwibGVmdCIsWyJjb2xvciJdKSxzKG8uYm9yZGVyLHQuYm9yZGVyLCJib3R0b20iLFsiY29sb3IiXSkscyhvLmJvcmRlcix0LmJvcmRlciwicmlnaHQiLFsiY29sb3IiXSkscyhvLmJvcmRlcix0LmJvcmRlciwiZGlhZ29uYWwiLFsiY29sb3IiXSkpLG8uZmlsbCYmKHMobyx0LCJmaWxsIixbImZnQ29sb3IiLCJiZ0NvbG9yIiwiY2VudGVyIl0pLG8uZmlsbC5zdG9wcyYmKHQuZmlsbC5zdG9wcz1vLmZpbGwuc3RvcHMubWFwKGU9Pm0oZSxbImNvbG9yIl0pKSkpLHR9fSx7fV0sMjE6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7Y29uc3Qgcz1hKCJjcnlwdG8iKSxvPXtoYXNoKHIpe2NvbnN0IHQ9cy5jcmVhdGVIYXNoKHIpO2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGU+MT9lLTE6MCksbj0xO248ZTtuKyspbFtuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gdC51cGRhdGUobS5jb25jYXQobCkpLHQuZGlnZXN0KCl9LGNvbnZlcnRQYXNzd29yZFRvSGFzaChyLHQsZSxsKXtpZih0PXQudG9Mb3dlckNhc2UoKSxzLmdldEhhc2hlcygpLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoYEhhc2ggYWxnb3JpdGhtICcke3R9JyBub3Qgc3VwcG9ydGVkIWApO2NvbnN0IG49bS5mcm9tKHIsInV0ZjE2bGUiKTtsZXQgaT10aGlzLmhhc2godCxtLmZyb20oZSwiYmFzZTY0Iiksbik7Zm9yKGxldCBmPTA7ZjxsO2YrKyl7Y29uc3QgYz1tLmFsbG9jKDQpO2Mud3JpdGVVSW50MzJMRShmLDApLGk9dGhpcy5oYXNoKHQsaSxjKX1yZXR1cm4gaS50b1N0cmluZygiYmFzZTY0Iil9LHJhbmRvbUJ5dGVzOnI9PnMucmFuZG9tQnl0ZXMocil9O0UuZXhwb3J0cz1vfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjIyMCxjcnlwdG86MzkwfV0sMjI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdHtTYXhlc1BhcnNlcjptfT1hKCJzYXhlcyIpLHtQYXNzVGhyb3VnaDpzfT1hKCJyZWFkYWJsZS1zdHJlYW0iKSx7YnVmZmVyVG9TdHJpbmc6b309YSgiLi9icm93c2VyLWJ1ZmZlci1kZWNvZGUiKTtFLmV4cG9ydHM9YXN5bmMgZnVuY3Rpb24qKHIpe3IucGlwZSYmIXJbU3ltYm9sLmFzeW5jSXRlcmF0b3JdJiYocj1yLnBpcGUobmV3IHMpKTtjb25zdCB0PW5ldyBtO2xldCBlO3Qub24oImVycm9yIixuPT57ZT1ufSk7bGV0IGw9W107dC5vbigib3BlbnRhZyIsbj0+bC5wdXNoKHtldmVudFR5cGU6Im9wZW50YWciLHZhbHVlOm59KSksdC5vbigidGV4dCIsbj0+bC5wdXNoKHtldmVudFR5cGU6InRleHQiLHZhbHVlOm59KSksdC5vbigiY2xvc2V0YWciLG49PmwucHVzaCh7ZXZlbnRUeXBlOiJjbG9zZXRhZyIsdmFsdWU6bn0pKTtmb3IgYXdhaXQoY29uc3QgbiBvZiByKXtpZih0LndyaXRlKG8obikpLGUpdGhyb3cgZTt5aWVsZCBsLGw9W119fX0seyIuL2Jyb3dzZXItYnVmZmVyLWRlY29kZSI6MTYsInJlYWRhYmxlLXN0cmVhbSI6NDkxLHNheGVzOjQ5Nn1dLDIzOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuL2NvbC1jYWNoZSIpLHM9LygoW2Etel9cLTAtOV0qKSEpPyhbYS16MC05XyRdezIsfSkoWyhdKT8vZ2ksbz0vXihbJF0pPyhbYS16XSspKFskXSk/KFsxLTldWzAtOV0qKSQvaTtFLmV4cG9ydHM9e3NsaWRlRm9ybXVsYTpmdW5jdGlvbihyLHQsZSl7Y29uc3QgbD1tLmRlY29kZSh0KSxuPW0uZGVjb2RlKGUpO3JldHVybiByLnJlcGxhY2UocywoaSxmLGMsdSxkKT0+e2lmKGQpcmV0dXJuIGk7Y29uc3QgaD1vLmV4ZWModSk7aWYoaCl7Y29uc3Qgdz1oWzFdLF89aFsyXS50b1VwcGVyQ2FzZSgpLEE9aFszXSxQPWhbNF07aWYoXy5sZW5ndGg+M3x8Xy5sZW5ndGg9PT0zJiZfPiJYRkQiKXJldHVybiBpO2xldCBMPW0ubDJuKF8pLE49cGFyc2VJbnQoUCwxMCk7cmV0dXJuIHd8fChMKz1uLmNvbC1sLmNvbCksQXx8KE4rPW4ucm93LWwucm93KSwoZnx8IiIpKyh3fHwiIikrbS5uMmwoTCkrKEF8fCIiKStOfXJldHVybiBpfSl9fX0seyIuL2NvbC1jYWNoZSI6MTl9XSwyNDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe2NvbnN0IG89YSgicmVhZGFibGUtc3RyZWFtIikscj1hKCIuL3V0aWxzIiksdD1hKCIuL3N0cmluZy1idWYiKTtjbGFzcyBle2NvbnN0cnVjdG9yKHUsZCl7dGhpcy5fZGF0YT11LHRoaXMuX2VuY29kaW5nPWR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnRvQnVmZmVyKCkubGVuZ3RofWNvcHkodSxkLGgsdyl7cmV0dXJuIHRoaXMudG9CdWZmZXIoKS5jb3B5KHUsZCxoLHcpfXRvQnVmZmVyKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnx8KHRoaXMuX2J1ZmZlcj1zLmZyb20odGhpcy5fZGF0YSx0aGlzLl9lbmNvZGluZykpLHRoaXMuX2J1ZmZlcn19Y2xhc3MgbHtjb25zdHJ1Y3Rvcih1KXt0aGlzLl9kYXRhPXV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhLmxlbmd0aH1jb3B5KHUsZCxoLHcpe3JldHVybiB0aGlzLl9kYXRhLl9idWYuY29weSh1LGQsaCx3KX10b0J1ZmZlcigpe3JldHVybiB0aGlzLl9kYXRhLnRvQnVmZmVyKCl9fWNsYXNzIG57Y29uc3RydWN0b3IodSl7dGhpcy5fZGF0YT11fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fZGF0YS5sZW5ndGh9Y29weSh1LGQsaCx3KXt0aGlzLl9kYXRhLmNvcHkodSxkLGgsdyl9dG9CdWZmZXIoKXtyZXR1cm4gdGhpcy5fZGF0YX19Y2xhc3MgaXtjb25zdHJ1Y3Rvcih1KXt0aGlzLnNpemU9dSx0aGlzLmJ1ZmZlcj1zLmFsbG9jKHUpLHRoaXMuaVJlYWQ9MCx0aGlzLmlXcml0ZT0wfXRvQnVmZmVyKCl7aWYodGhpcy5pUmVhZD09PTAmJnRoaXMuaVdyaXRlPT09dGhpcy5zaXplKXJldHVybiB0aGlzLmJ1ZmZlcjtjb25zdCB1PXMuYWxsb2ModGhpcy5pV3JpdGUtdGhpcy5pUmVhZCk7cmV0dXJuIHRoaXMuYnVmZmVyLmNvcHkodSwwLHRoaXMuaVJlYWQsdGhpcy5pV3JpdGUpLHV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmlXcml0ZS10aGlzLmlSZWFkfWdldCBlb2QoKXtyZXR1cm4gdGhpcy5pUmVhZD09PXRoaXMuaVdyaXRlfWdldCBmdWxsKCl7cmV0dXJuIHRoaXMuaVdyaXRlPT09dGhpcy5zaXplfXJlYWQodSl7bGV0IGQ7cmV0dXJuIHU9PT0wP251bGw6dT09PXZvaWQgMHx8dT49dGhpcy5sZW5ndGg/KGQ9dGhpcy50b0J1ZmZlcigpLHRoaXMuaVJlYWQ9dGhpcy5pV3JpdGUsZCk6KGQ9cy5hbGxvYyh1KSx0aGlzLmJ1ZmZlci5jb3B5KGQsMCx0aGlzLmlSZWFkLHUpLHRoaXMuaVJlYWQrPXUsZCl9d3JpdGUodSxkLGgpe2NvbnN0IHc9TWF0aC5taW4oaCx0aGlzLnNpemUtdGhpcy5pV3JpdGUpO3JldHVybiB1LmNvcHkodGhpcy5idWZmZXIsdGhpcy5pV3JpdGUsZCxkK3cpLHRoaXMuaVdyaXRlKz13LHd9fWNvbnN0IGY9ZnVuY3Rpb24oYyl7Yz1jfHx7fSx0aGlzLmJ1ZlNpemU9Yy5idWZTaXplfHwxMDQ4NTc2LHRoaXMuYnVmZmVycz1bXSx0aGlzLmJhdGNoPWMuYmF0Y2h8fCExLHRoaXMuY29ya2VkPSExLHRoaXMuaW5Qb3M9MCx0aGlzLm91dFBvcz0wLHRoaXMucGlwZXM9W10sdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmNvZGluZz1udWxsfTtyLmluaGVyaXRzKGYsby5EdXBsZXgse3RvQnVmZmVyKCl7c3dpdGNoKHRoaXMuYnVmZmVycy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYnVmZmVyc1swXS50b0J1ZmZlcigpO2RlZmF1bHQ6cmV0dXJuIHMuY29uY2F0KHRoaXMuYnVmZmVycy5tYXAoYz0+Yy50b0J1ZmZlcigpKSl9fSxfZ2V0V3JpdGFibGVCdWZmZXIoKXtpZih0aGlzLmJ1ZmZlcnMubGVuZ3RoKXtjb25zdCB1PXRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlcnMubGVuZ3RoLTFdO2lmKCF1LmZ1bGwpcmV0dXJuIHV9Y29uc3QgYz1uZXcgaSh0aGlzLmJ1ZlNpemUpO3JldHVybiB0aGlzLmJ1ZmZlcnMucHVzaChjKSxjfSxhc3luYyBfcGlwZShjKXthd2FpdCBQcm9taXNlLmFsbCh0aGlzLnBpcGVzLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gbmV3IFByb21pc2UoZD0+e3Uud3JpdGUoYy50b0J1ZmZlcigpLCgpPT57ZCgpfSl9KX0pKX0sX3dyaXRlVG9CdWZmZXJzKGMpe2xldCB1PTA7Y29uc3QgZD1jLmxlbmd0aDtmb3IoO3U8ZDspdSs9dGhpcy5fZ2V0V3JpdGFibGVCdWZmZXIoKS53cml0ZShjLHUsZC11KX0sYXN5bmMgd3JpdGUoYyx1LGQpe2xldCBoO2lmKHUgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKGQ9dSx1PSJ1dGY4IiksZD1kfHxyLm5vcCxjIGluc3RhbmNlb2YgdCloPW5ldyBsKGMpO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIHMpaD1uZXcgbihjKTtlbHNle2lmKCEodHlwZW9mIGM9PSJzdHJpbmcifHxjIGluc3RhbmNlb2YgU3RyaW5nfHxjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiQ2h1bmsgbXVzdCBiZSBvbmUgb2YgdHlwZSBTdHJpbmcsIEJ1ZmZlciBvciBTdHJpbmdCdWYuIik7aD1uZXcgZShjLHUpfWlmKHRoaXMucGlwZXMubGVuZ3RoKWlmKHRoaXMuYmF0Y2gpZm9yKHRoaXMuX3dyaXRlVG9CdWZmZXJzKGgpOyF0aGlzLmNvcmtlZCYmdGhpcy5idWZmZXJzLmxlbmd0aD4xOyl0aGlzLl9waXBlKHRoaXMuYnVmZmVycy5zaGlmdCgpKTtlbHNlIHRoaXMuY29ya2VkPyh0aGlzLl93cml0ZVRvQnVmZmVycyhoKSxtLm5leHRUaWNrKGQpKTooYXdhaXQgdGhpcy5fcGlwZShoKSxkKCkpO2Vsc2UgdGhpcy5wYXVzZWR8fHRoaXMuZW1pdCgiZGF0YSIsaC50b0J1ZmZlcigpKSx0aGlzLl93cml0ZVRvQnVmZmVycyhoKSx0aGlzLmVtaXQoInJlYWRhYmxlIik7cmV0dXJuITB9LGNvcmsoKXt0aGlzLmNvcmtlZD0hMH0sX2ZsdXNoKCl7aWYodGhpcy5waXBlcy5sZW5ndGgpZm9yKDt0aGlzLmJ1ZmZlcnMubGVuZ3RoOyl0aGlzLl9waXBlKHRoaXMuYnVmZmVycy5zaGlmdCgpKX0sdW5jb3JrKCl7dGhpcy5jb3JrZWQ9ITEsdGhpcy5fZmx1c2goKX0sZW5kKGMsdSxkKXtjb25zdCBoPXc9Pnt3P2Qodyk6KHRoaXMuX2ZsdXNoKCksdGhpcy5waXBlcy5mb3JFYWNoKF89PntfLmVuZCgpfSksdGhpcy5lbWl0KCJmaW5pc2giKSl9O2M/dGhpcy53cml0ZShjLHUsaCk6aCgpfSxyZWFkKGMpe2xldCB1O2lmKGMpe2Zvcih1PVtdO2MmJnRoaXMuYnVmZmVycy5sZW5ndGgmJiF0aGlzLmJ1ZmZlcnNbMF0uZW9kOyl7Y29uc3QgZD10aGlzLmJ1ZmZlcnNbMF0saD1kLnJlYWQoYyk7Yy09aC5sZW5ndGgsdS5wdXNoKGgpLGQuZW9kJiZkLmZ1bGwmJnRoaXMuYnVmZmVycy5zaGlmdCgpfXJldHVybiBzLmNvbmNhdCh1KX1yZXR1cm4gdT10aGlzLmJ1ZmZlcnMubWFwKGQ9PmQudG9CdWZmZXIoKSkuZmlsdGVyKEJvb2xlYW4pLHRoaXMuYnVmZmVycz1bXSxzLmNvbmNhdCh1KX0sc2V0RW5jb2RpbmcoYyl7dGhpcy5lbmNvZGluZz1jfSxwYXVzZSgpe3RoaXMucGF1c2VkPSEwfSxyZXN1bWUoKXt0aGlzLnBhdXNlZD0hMX0saXNQYXVzZWQoKXtyZXR1cm4hIXRoaXMucGF1c2VkfSxwaXBlKGMpe3RoaXMucGlwZXMucHVzaChjKSwhdGhpcy5wYXVzZWQmJnRoaXMuYnVmZmVycy5sZW5ndGgmJnRoaXMuZW5kKCl9LHVucGlwZShjKXt0aGlzLnBpcGVzPXRoaXMucGlwZXMuZmlsdGVyKHU9PnUhPT1jKX0sdW5zaGlmdCgpe3Rocm93IG5ldyBFcnJvcigiTm90IEltcGxlbWVudGVkIil9LHdyYXAoKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBJbXBsZW1lbnRlZCIpfX0pLEUuZXhwb3J0cz1mfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJfcHJvY2VzcyIpLGEoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi9zdHJpbmctYnVmIjoyNSwiLi91dGlscyI6MjcsX3Byb2Nlc3M6NDY3LGJ1ZmZlcjoyMjAsInJlYWRhYmxlLXN0cmVhbSI6NDkxfV0sMjU6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7RS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKHMpe3RoaXMuX2J1Zj1tLmFsbG9jKHMmJnMuc2l6ZXx8MTYzODQpLHRoaXMuX2VuY29kaW5nPXMmJnMuZW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLl9pblBvcz0wLHRoaXMuX2J1ZmZlcj12b2lkIDB9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9pblBvc31nZXQgY2FwYWNpdHkoKXtyZXR1cm4gdGhpcy5fYnVmLmxlbmd0aH1nZXQgYnVmZmVyKCl7cmV0dXJuIHRoaXMuX2J1Zn10b0J1ZmZlcigpe3JldHVybiB0aGlzLl9idWZmZXJ8fCh0aGlzLl9idWZmZXI9bS5hbGxvYyh0aGlzLmxlbmd0aCksdGhpcy5fYnVmLmNvcHkodGhpcy5fYnVmZmVyLDAsMCx0aGlzLmxlbmd0aCkpLHRoaXMuX2J1ZmZlcn1yZXNldChzKXtzPXN8fDAsdGhpcy5fYnVmZmVyPXZvaWQgMCx0aGlzLl9pblBvcz1zfV9ncm93KHMpe2xldCBvPTIqdGhpcy5fYnVmLmxlbmd0aDtmb3IoO288czspbyo9Mjtjb25zdCByPW0uYWxsb2Mobyk7dGhpcy5fYnVmLmNvcHkociwwKSx0aGlzLl9idWY9cn1hZGRUZXh0KHMpe3RoaXMuX2J1ZmZlcj12b2lkIDA7bGV0IG89dGhpcy5faW5Qb3MrdGhpcy5fYnVmLndyaXRlKHMsdGhpcy5faW5Qb3MsdGhpcy5fZW5jb2RpbmcpO2Zvcig7bz49dGhpcy5fYnVmLmxlbmd0aC00Oyl0aGlzLl9ncm93KHRoaXMuX2luUG9zK3MubGVuZ3RoKSxvPXRoaXMuX2luUG9zK3RoaXMuX2J1Zi53cml0ZShzLHRoaXMuX2luUG9zLHRoaXMuX2VuY29kaW5nKTt0aGlzLl9pblBvcz1vfWFkZFN0cmluZ0J1ZihzKXtzLmxlbmd0aCYmKHRoaXMuX2J1ZmZlcj12b2lkIDAsdGhpcy5sZW5ndGgrcy5sZW5ndGg+dGhpcy5jYXBhY2l0eSYmdGhpcy5fZ3Jvdyh0aGlzLmxlbmd0aCtzLmxlbmd0aCkscy5fYnVmLmNvcHkodGhpcy5fYnVmLHRoaXMuX2luUG9zLDAscy5sZW5ndGgpLHRoaXMuX2luUG9zKz1zLmxlbmd0aCl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiYnVmZmVyIikuQnVmZmVyKX0se2J1ZmZlcjoyMjB9XSwyNjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0e3RvU3RyaW5nOm19PU9iamVjdC5wcm90b3R5cGUscz0vWyImPD5dLyxvPXtlYWNoOmZ1bmN0aW9uKHIsdCl7ciYmKEFycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKHQpOk9iamVjdC5rZXlzKHIpLmZvckVhY2goZT0+e3QocltlXSxlKX0pKX0sc29tZTpmdW5jdGlvbihyLHQpe3JldHVybiEhciYmKEFycmF5LmlzQXJyYXkocik/ci5zb21lKHQpOk9iamVjdC5rZXlzKHIpLnNvbWUoZT0+dChyW2VdLGUpKSl9LGV2ZXJ5OmZ1bmN0aW9uKHIsdCl7cmV0dXJuIXJ8fChBcnJheS5pc0FycmF5KHIpP3IuZXZlcnkodCk6T2JqZWN0LmtleXMocikuZXZlcnkoZT0+dChyW2VdLGUpKSl9LG1hcDpmdW5jdGlvbihyLHQpe3JldHVybiByP0FycmF5LmlzQXJyYXkocik/ci5tYXAodCk6T2JqZWN0LmtleXMocikubWFwKGU9PnQocltlXSxlKSk6W119LGtleUJ5OihyLHQpPT5yLnJlZHVjZSgoZSxsKT0+KGVbbFt0XV09bCxlKSx7fSksaXNFcXVhbDpmdW5jdGlvbihyLHQpe2NvbnN0IGU9dHlwZW9mIHIsbD10eXBlb2YgdCxuPUFycmF5LmlzQXJyYXkociksaT1BcnJheS5pc0FycmF5KHQpO2xldCBmO2lmKGUhPT1sKXJldHVybiExO3N3aXRjaCh0eXBlb2Ygcil7Y2FzZSJvYmplY3QiOmlmKG58fGkpcmV0dXJuISghbnx8IWkpJiZyLmxlbmd0aD09PXQubGVuZ3RoJiZyLmV2ZXJ5KChjLHUpPT57Y29uc3QgZD10W3VdO3JldHVybiBvLmlzRXF1YWwoYyxkKX0pO2lmKHI9PT1udWxsfHx0PT09bnVsbClyZXR1cm4gcj09PXQ7aWYoZj1PYmplY3Qua2V5cyhyKSxPYmplY3Qua2V5cyh0KS5sZW5ndGghPT1mLmxlbmd0aClyZXR1cm4hMTtmb3IoY29uc3QgYyBvZiBmKWlmKCF0Lmhhc093blByb3BlcnR5KGMpKXJldHVybiExO3JldHVybiBvLmV2ZXJ5KHIsKGMsdSk9Pntjb25zdCBkPXRbdV07cmV0dXJuIG8uaXNFcXVhbChjLGQpfSk7ZGVmYXVsdDpyZXR1cm4gcj09PXR9fSxlc2NhcGVIdG1sKHIpe2NvbnN0IHQ9cy5leGVjKHIpO2lmKCF0KXJldHVybiByO2xldCBlPSIiLGw9IiIsbj0wLGk9dC5pbmRleDtmb3IoO2k8ci5sZW5ndGg7aSsrKXtzd2l0Y2goci5jaGFyQXQoaSkpe2Nhc2UnIic6bD0iJnF1b3Q7IjticmVhaztjYXNlIiYiOmw9IiZhbXA7IjticmVhaztjYXNlIiciOmw9IiZhcG9zOyI7YnJlYWs7Y2FzZSI8IjpsPSImbHQ7IjticmVhaztjYXNlIj4iOmw9IiZndDsiO2JyZWFrO2RlZmF1bHQ6Y29udGludWV9biE9PWkmJihlKz1yLnN1YnN0cmluZyhuLGkpKSxuPWkrMSxlKz1sfXJldHVybiBuIT09aT9lK3Iuc3Vic3RyaW5nKG4saSk6ZX0sc3RyY21wOihyLHQpPT5yPHQ/LTE6cj50PzE6MCxpc1VuZGVmaW5lZDpyPT5tLmNhbGwocik9PT0iW29iamVjdCBVbmRlZmluZWRdIixpc09iamVjdDpyPT5tLmNhbGwocik9PT0iW29iamVjdCBPYmplY3RdIixkZWVwTWVyZ2UoKXtjb25zdCByPWFyZ3VtZW50c1swXXx8e30se2xlbmd0aDp0fT1hcmd1bWVudHM7bGV0IGUsbCxuO2Z1bmN0aW9uIGkoZixjKXtlPXJbY10sbj1BcnJheS5pc0FycmF5KGYpLG8uaXNPYmplY3QoZil8fG4/KG4/KG49ITEsbD1lJiZBcnJheS5pc0FycmF5KGUpP2U6W10pOmw9ZSYmby5pc09iamVjdChlKT9lOnt9LHJbY109by5kZWVwTWVyZ2UobCxmKSk6by5pc1VuZGVmaW5lZChmKXx8KHJbY109Zil9Zm9yKGxldCBmPTA7Zjx0O2YrKylvLmVhY2goYXJndW1lbnRzW2ZdLGkpO3JldHVybiByfX07RS5leHBvcnRzPW99LHt9XSwyNzpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe2NvbnN0IG89YSgiZnMiKSxyPS9bPD4mJyJceDdGXHgwMC1ceDA4XHgwQi1ceDBDXHgwRS1ceDFGXS8sdD17bm9wKCl7fSxwcm9taXNlSW1tZWRpYXRlOmU9Pm5ldyBQcm9taXNlKGw9PnttLnNldEltbWVkaWF0ZT9zKCgpPT57bChlKX0pOnNldFRpbWVvdXQoKCk9PntsKGUpfSwxKX0pLGluaGVyaXRzOmZ1bmN0aW9uKGUsbCxuLGkpe2Uuc3VwZXJfPWwsaXx8KGk9bixuPW51bGwpLG4mJk9iamVjdC5rZXlzKG4pLmZvckVhY2goYz0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGMsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGMpKX0pO2NvbnN0IGY9e2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfX07aSYmT2JqZWN0LmtleXMoaSkuZm9yRWFjaChjPT57ZltjXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGksYyl9KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlLGYpfSxkYXRlVG9FeGNlbDooZSxsKT0+MjU1NjkrZS5nZXRUaW1lKCkvODY0ZTUtKGw/MTQ2MjowKSxleGNlbFRvRGF0ZShlLGwpe2NvbnN0IG49TWF0aC5yb3VuZCgyNCooZS0yNTU2OSsobD8xNDYyOjApKSozNjAwKjFlMyk7cmV0dXJuIG5ldyBEYXRlKG4pfSxwYXJzZVBhdGgoZSl7Y29uc3QgbD1lLmxhc3RJbmRleE9mKCIvIik7cmV0dXJue3BhdGg6ZS5zdWJzdHJpbmcoMCxsKSxuYW1lOmUuc3Vic3RyaW5nKGwrMSl9fSxnZXRSZWxzUGF0aChlKXtjb25zdCBsPXQucGFyc2VQYXRoKGUpO3JldHVybmAke2wucGF0aH0vX3JlbHMvJHtsLm5hbWV9LnJlbHNgfSx4bWxFbmNvZGUoZSl7Y29uc3QgbD1yLmV4ZWMoZSk7aWYoIWwpcmV0dXJuIGU7bGV0IG49IiIsaT0iIixmPTAsYz1sLmluZGV4O2Zvcig7YzxlLmxlbmd0aDtjKyspe2NvbnN0IHU9ZS5jaGFyQ29kZUF0KGMpO3N3aXRjaCh1KXtjYXNlIDM0Omk9IiZxdW90OyI7YnJlYWs7Y2FzZSAzODppPSImYW1wOyI7YnJlYWs7Y2FzZSAzOTppPSImYXBvczsiO2JyZWFrO2Nhc2UgNjA6aT0iJmx0OyI7YnJlYWs7Y2FzZSA2MjppPSImZ3Q7IjticmVhaztjYXNlIDEyNzppPSIiO2JyZWFrO2RlZmF1bHQ6aWYodTw9MzEmJih1PD04fHx1Pj0xMSYmdSE9PTEzKSl7aT0iIjticmVha31jb250aW51ZX1mIT09YyYmKG4rPWUuc3Vic3RyaW5nKGYsYykpLGY9YysxLGkmJihuKz1pKX1yZXR1cm4gZiE9PWM/bitlLnN1YnN0cmluZyhmLGMpOm59LHhtbERlY29kZTplPT5lLnJlcGxhY2UoLyYoW2Etel0qKTsvZyxsPT57c3dpdGNoKGwpe2Nhc2UiJmx0OyI6cmV0dXJuIjwiO2Nhc2UiJmd0OyI6cmV0dXJuIj4iO2Nhc2UiJmFtcDsiOnJldHVybiImIjtjYXNlIiZhcG9zOyI6cmV0dXJuIiciO2Nhc2UiJnF1b3Q7IjpyZXR1cm4nIic7ZGVmYXVsdDpyZXR1cm4gbH19KSx2YWxpZEludChlKXtjb25zdCBsPXBhcnNlSW50KGUsMTApO3JldHVybiBOdW1iZXIuaXNOYU4obCk/MDpsfSxpc0RhdGVGbXQoZSl7cmV0dXJuIGU/KGU9KGU9ZS5yZXBsYWNlKC9cW1teXF1dKl0vZywiIikpLnJlcGxhY2UoLyJbXiJdKiIvZywiIikpLm1hdGNoKC9beW1kaE1zYl0rLykhPT1udWxsOiExfSxmczp7ZXhpc3RzOmU9Pm5ldyBQcm9taXNlKGw9PntvLmFjY2VzcyhlLG8uY29uc3RhbnRzLkZfT0ssbj0+e2woIW4pfSl9KX0sdG9Jc29EYXRlU3RyaW5nOmU9PmUudG9Jc29TdHJpbmcoKS5zdWJzc3RyKDAsMTApLHBhcnNlQm9vbGVhbjplPT5lPT09ITB8fGU9PT0idHJ1ZSJ8fGU9PT0xfHxlPT09IjEifTtFLmV4cG9ydHM9dH0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30sYSgidGltZXJzIikuc2V0SW1tZWRpYXRlKX0se2ZzOjIxNix0aW1lcnM6NTIzfV0sMjg6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4vdW5kZXItZGFzaCIpLHM9YSgiLi91dGlscyIpO2Z1bmN0aW9uIG8oZSxsLG4pe2UucHVzaChgICR7bH09IiR7cy54bWxFbmNvZGUobi50b1N0cmluZygpKX0iYCl9ZnVuY3Rpb24gcihlLGwpe2lmKGwpe2NvbnN0IG49W107bS5lYWNoKGwsKGksZik9PntpIT09dm9pZCAwJiZvKG4sZixpKX0pLGUucHVzaChuLmpvaW4oIiIpKX19Y2xhc3MgdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3htbD1bXSx0aGlzLl9zdGFjaz1bXSx0aGlzLl9yb2xsYmFja3M9W119Z2V0IHRvcygpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOnZvaWQgMH1nZXQgY3Vyc29yKCl7cmV0dXJuIHRoaXMuX3htbC5sZW5ndGh9b3BlblhtbChsKXtjb25zdCBuPXRoaXMuX3htbDtuLnB1c2goIjw/eG1sIikscihuLGwpLG4ucHVzaChgPz4KYCl9b3Blbk5vZGUobCxuKXtjb25zdCBpPXRoaXMudG9zLGY9dGhpcy5feG1sO2kmJnRoaXMub3BlbiYmZi5wdXNoKCI+IiksdGhpcy5fc3RhY2sucHVzaChsKSxmLnB1c2goIjwiKSxmLnB1c2gobCkscihmLG4pLHRoaXMubGVhZj0hMCx0aGlzLm9wZW49ITB9YWRkQXR0cmlidXRlKGwsbil7aWYoIXRoaXMub3Blbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBhdHRyaWJ1dGVzIHRvIG5vZGUgaWYgaXQgaXMgbm90IG9wZW4iKTtuIT09dm9pZCAwJiZvKHRoaXMuX3htbCxsLG4pfWFkZEF0dHJpYnV0ZXMobCl7aWYoIXRoaXMub3Blbil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBhdHRyaWJ1dGVzIHRvIG5vZGUgaWYgaXQgaXMgbm90IG9wZW4iKTtyKHRoaXMuX3htbCxsKX13cml0ZVRleHQobCl7Y29uc3Qgbj10aGlzLl94bWw7dGhpcy5vcGVuJiYobi5wdXNoKCI+IiksdGhpcy5vcGVuPSExKSx0aGlzLmxlYWY9ITEsbi5wdXNoKHMueG1sRW5jb2RlKGwudG9TdHJpbmcoKSkpfXdyaXRlWG1sKGwpe3RoaXMub3BlbiYmKHRoaXMuX3htbC5wdXNoKCI+IiksdGhpcy5vcGVuPSExKSx0aGlzLmxlYWY9ITEsdGhpcy5feG1sLnB1c2gobCl9Y2xvc2VOb2RlKCl7Y29uc3QgbD10aGlzLl9zdGFjay5wb3AoKSxuPXRoaXMuX3htbDt0aGlzLmxlYWY/bi5wdXNoKCIvPiIpOihuLnB1c2goIjwvIiksbi5wdXNoKGwpLG4ucHVzaCgiPiIpKSx0aGlzLm9wZW49ITEsdGhpcy5sZWFmPSExfWxlYWZOb2RlKGwsbixpKXt0aGlzLm9wZW5Ob2RlKGwsbiksaSE9PXZvaWQgMCYmdGhpcy53cml0ZVRleHQoaSksdGhpcy5jbG9zZU5vZGUoKX1jbG9zZUFsbCgpe2Zvcig7dGhpcy5fc3RhY2subGVuZ3RoOyl0aGlzLmNsb3NlTm9kZSgpfWFkZFJvbGxiYWNrKCl7cmV0dXJuIHRoaXMuX3JvbGxiYWNrcy5wdXNoKHt4bWw6dGhpcy5feG1sLmxlbmd0aCxzdGFjazp0aGlzLl9zdGFjay5sZW5ndGgsbGVhZjp0aGlzLmxlYWYsb3Blbjp0aGlzLm9wZW59KSx0aGlzLmN1cnNvcn1jb21taXQoKXt0aGlzLl9yb2xsYmFja3MucG9wKCl9cm9sbGJhY2soKXtjb25zdCBsPXRoaXMuX3JvbGxiYWNrcy5wb3AoKTt0aGlzLl94bWwubGVuZ3RoPmwueG1sJiZ0aGlzLl94bWwuc3BsaWNlKGwueG1sLHRoaXMuX3htbC5sZW5ndGgtbC54bWwpLHRoaXMuX3N0YWNrLmxlbmd0aD5sLnN0YWNrJiZ0aGlzLl9zdGFjay5zcGxpY2UobC5zdGFjayx0aGlzLl9zdGFjay5sZW5ndGgtbC5zdGFjayksdGhpcy5sZWFmPWwubGVhZix0aGlzLm9wZW49bC5vcGVufWdldCB4bWwoKXtyZXR1cm4gdGhpcy5jbG9zZUFsbCgpLHRoaXMuX3htbC5qb2luKCIiKX19dC5TdGREb2NBdHRyaWJ1dGVzPXt2ZXJzaW9uOiIxLjAiLGVuY29kaW5nOiJVVEYtOCIsc3RhbmRhbG9uZToieWVzIn0sRS5leHBvcnRzPXR9LHsiLi91bmRlci1kYXNoIjoyNiwiLi91dGlscyI6Mjd9XSwyOTpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXtjb25zdCBzPWEoImV2ZW50cyIpLG89YSgianN6aXAiKSxyPWEoIi4vc3RyZWFtLWJ1ZiIpLHtzdHJpbmdUb0J1ZmZlcjp0fT1hKCIuL2Jyb3dzZXItYnVmZmVyLWVuY29kZSIpO2NsYXNzIGUgZXh0ZW5kcyBzLkV2ZW50RW1pdHRlcntjb25zdHJ1Y3RvcihuKXtzdXBlcigpLHRoaXMub3B0aW9ucz1PYmplY3QuYXNzaWduKHt0eXBlOiJub2RlYnVmZmVyIixjb21wcmVzc2lvbjoiREVGTEFURSJ9LG4pLHRoaXMuemlwPW5ldyBvLHRoaXMuc3RyZWFtPW5ldyByfWFwcGVuZChuLGkpe2kuaGFzT3duUHJvcGVydHkoImJhc2U2NCIpJiZpLmJhc2U2ND90aGlzLnppcC5maWxlKGkubmFtZSxuLHtiYXNlNjQ6ITB9KToobS5icm93c2VyJiZ0eXBlb2Ygbj09InN0cmluZyImJihuPXQobikpLHRoaXMuemlwLmZpbGUoaS5uYW1lLG4pKX1hc3luYyBmaW5hbGl6ZSgpe2NvbnN0IG49YXdhaXQgdGhpcy56aXAuZ2VuZXJhdGVBc3luYyh0aGlzLm9wdGlvbnMpO3RoaXMuc3RyZWFtLmVuZChuKSx0aGlzLmVtaXQoImZpbmlzaCIpfXJlYWQobil7cmV0dXJuIHRoaXMuc3RyZWFtLnJlYWQobil9c2V0RW5jb2Rpbmcobil7cmV0dXJuIHRoaXMuc3RyZWFtLnNldEVuY29kaW5nKG4pfXBhdXNlKCl7cmV0dXJuIHRoaXMuc3RyZWFtLnBhdXNlKCl9cmVzdW1lKCl7cmV0dXJuIHRoaXMuc3RyZWFtLnJlc3VtZSgpfWlzUGF1c2VkKCl7cmV0dXJuIHRoaXMuc3RyZWFtLmlzUGF1c2VkKCl9cGlwZShuLGkpe3JldHVybiB0aGlzLnN0cmVhbS5waXBlKG4saSl9dW5waXBlKG4pe3JldHVybiB0aGlzLnN0cmVhbS51bnBpcGUobil9dW5zaGlmdChuKXtyZXR1cm4gdGhpcy5zdHJlYW0udW5zaGlmdChuKX13cmFwKG4pe3JldHVybiB0aGlzLnN0cmVhbS53cmFwKG4pfX1FLmV4cG9ydHM9e1ppcFdyaXRlcjplfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiX3Byb2Nlc3MiKSl9LHsiLi9icm93c2VyLWJ1ZmZlci1lbmNvZGUiOjE3LCIuL3N0cmVhbS1idWYiOjI0LF9wcm9jZXNzOjQ2NyxldmVudHM6NDIyLGpzemlwOjQ0MX1dLDMwOltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPXswOntmOiJHZW5lcmFsIn0sMTp7ZjoiMCJ9LDI6e2Y6IjAuMDAifSwzOntmOiIjLCMjMCJ9LDQ6e2Y6IiMsIyMwLjAwIn0sOTp7ZjoiMCUifSwxMDp7ZjoiMC4wMCUifSwxMTp7ZjoiMC4wMEUrMDAifSwxMjp7ZjoiIyA/Lz8ifSwxMzp7ZjoiIyA/Py8/PyJ9LDE0OntmOiJtbS1kZC15eSJ9LDE1OntmOiJkLW1tbS15eSJ9LDE2OntmOiJkLW1tbSJ9LDE3OntmOiJtbW0teXkifSwxODp7ZjoiaDptbSBBTS9QTSJ9LDE5OntmOiJoOm1tOnNzIEFNL1BNIn0sMjA6e2Y6Img6bW0ifSwyMTp7ZjoiaDptbTpzcyJ9LDIyOntmOidtL2QveXkgImgiOm1tJ30sMjc6eyJ6aC10dyI6IlskLTQwNF1lL20vZCIsInpoLWNuIjoneXl5eSLlubQibSLmnIgiJywiamEtanAiOiJbJC00MTFdZ2UubS5kIiwia28ta3IiOid5eXl5IuW5tCIgbW0i5pyIIiBkZCLml6UiJ30sMjg6eyJ6aC10dyI6J1skLTQwNF1lIuW5tCJtIuaciCJkIuaXpSInLCJ6aC1jbiI6J20i5pyIImQi5pelIicsImphLWpwIjonWyQtNDExXWdnZ2Ui5bm0Im0i5pyIImQi5pelIicsImtvLWtyIjoibW0tZGQifSwyOTp7InpoLXR3IjonWyQtNDA0XWUi5bm0Im0i5pyIImQi5pelIicsInpoLWNuIjonbSLmnIgiZCLml6UiJywiamEtanAiOidbJC00MTFdZ2dnZSLlubQibSLmnIgiZCLml6UiJywia28ta3IiOiJtbS1kZCJ9LDMwOnsiemgtdHciOiJtL2QveXkgIiwiemgtY24iOiJtLWQteXkiLCJqYS1qcCI6Im0vZC95eSIsImtvLWtyIjoibW0tZGQteXkifSwzMTp7InpoLXR3IjoneXl5eSLlubQibSLmnIgiZCLml6UiJywiemgtY24iOid5eXl5IuW5tCJtIuaciCJkIuaXpSInLCJqYS1qcCI6J3l5eXki5bm0Im0i5pyIImQi5pelIicsImtvLWtyIjoneXl5eSLrhYQiIG1tIuyblCIgZGQi7J28Iid9LDMyOnsiemgtdHciOidoaCLmmYIibW0i5YiGIicsInpoLWNuIjonaCLml7YibW0i5YiGIicsImphLWpwIjonaCLmmYIibW0i5YiGIicsImtvLWtyIjonaCLsi5wiIG1tIuu2hCInfSwzMzp7InpoLXR3IjonaGgi5pmCIm1tIuWIhiJzcyLnp5IiJywiemgtY24iOidoIuaXtiJtbSLliIYic3Mi56eSIicsImphLWpwIjonaCLmmYIibW0i5YiGInNzIuenkiInLCJrby1rciI6J2gi7IucIiBtbSLrtoQiIHNzIuy0iCInfSwzNDp7InpoLXR3Ijon5LiK5Y2IL+S4i+WNiCBoaCLmmYIibW0i5YiGIicsInpoLWNuIjon5LiK5Y2IL+S4i+WNiCBoIuaXtiJtbSLliIYiJywiamEtanAiOid5eXl5IuW5tCJtIuaciCInLCJrby1rciI6Inl5eXktbW0tZGQifSwzNTp7InpoLXR3Ijon5LiK5Y2IL+S4i+WNiCBoaCLmmYIibW0i5YiGInNzIuenkiInLCJ6aC1jbiI6J+S4iuWNiC/kuIvljYggaCLml7YibW0i5YiGInNzIuenkiInLCJqYS1qcCI6J20i5pyIImQi5pelIicsImtvLWtyIjoieXl5eS1tbS1kZCJ9LDM2OnsiemgtdHciOiJbJC00MDRdZS9tL2QiLCJ6aC1jbiI6J3l5eXki5bm0Im0i5pyIIicsImphLWpwIjoiWyQtNDExXWdlLm0uZCIsImtvLWtyIjoneXl5eSLlubQiIG1tIuaciCIgZGQi5pelIid9LDM3OntmOiIjLCMjMCA7KCMsIyMwKSJ9LDM4OntmOiIjLCMjMCA7W1JlZF0oIywjIzApIn0sMzk6e2Y6IiMsIyMwLjAwIDsoIywjIzAuMDApIn0sNDA6e2Y6IiMsIyMwLjAwIDtbUmVkXSgjLCMjMC4wMCkifSw0NTp7ZjoibW06c3MifSw0Njp7ZjoiW2hdOm1tOnNzIn0sNDc6e2Y6Im1tc3MuMCJ9LDQ4OntmOiIjIzAuMEUrMCJ9LDQ5OntmOiJAIn0sNTA6eyJ6aC10dyI6IlskLTQwNF1lL20vZCIsInpoLWNuIjoneXl5eSLlubQibSLmnIgiJywiamEtanAiOiJbJC00MTFdZ2UubS5kIiwia28ta3IiOid5eXl5IuW5tCIgbW0i5pyIIiBkZCLml6UiJ30sNTE6eyJ6aC10dyI6J1skLTQwNF1lIuW5tCJtIuaciCJkIuaXpSInLCJ6aC1jbiI6J20i5pyIImQi5pelIicsImphLWpwIjonWyQtNDExXWdnZ2Ui5bm0Im0i5pyIImQi5pelIicsImtvLWtyIjoibW0tZGQifSw1Mjp7InpoLXR3Ijon5LiK5Y2IL+S4i+WNiCBoaCLmmYIibW0i5YiGIicsInpoLWNuIjoneXl5eSLlubQibSLmnIgiJywiamEtanAiOid5eXl5IuW5tCJtIuaciCInLCJrby1rciI6Inl5eXktbW0tZGQifSw1Mzp7InpoLXR3Ijon5LiK5Y2IL+S4i+WNiCBoaCLmmYIibW0i5YiGInNzIuenkiInLCJ6aC1jbiI6J20i5pyIImQi5pelIicsImphLWpwIjonbSLmnIgiZCLml6UiJywia28ta3IiOiJ5eXl5LW1tLWRkIn0sNTQ6eyJ6aC10dyI6J1skLTQwNF1lIuW5tCJtIuaciCJkIuaXpSInLCJ6aC1jbiI6J20i5pyIImQi5pelIicsImphLWpwIjonWyQtNDExXWdnZ2Ui5bm0Im0i5pyIImQi5pelIicsImtvLWtyIjoibW0tZGQifSw1NTp7InpoLXR3Ijon5LiK5Y2IL+S4i+WNiCBoaCLmmYIibW0i5YiGIicsInpoLWNuIjon5LiK5Y2IL+S4i+WNiCBoIuaXtiJtbSLliIYiJywiamEtanAiOid5eXl5IuW5tCJtIuaciCInLCJrby1rciI6Inl5eXktbW0tZGQifSw1Njp7InpoLXR3Ijon5LiK5Y2IL+S4i+WNiCBoaCLmmYIibW0i5YiGInNzIuenkiInLCJ6aC1jbiI6J+S4iuWNiC/kuIvljYggaCLml7YibW0i5YiGInNzIuenkiInLCJqYS1qcCI6J20i5pyIImQi5pelIicsImtvLWtyIjoieXl5eS1tbS1kZCJ9LDU3OnsiemgtdHciOiJbJC00MDRdZS9tL2QiLCJ6aC1jbiI6J3l5eXki5bm0Im0i5pyIIicsImphLWpwIjoiWyQtNDExXWdlLm0uZCIsImtvLWtyIjoneXl5eSLlubQiIG1tIuaciCIgZGQi5pelIid9LDU4OnsiemgtdHciOidbJC00MDRdZSLlubQibSLmnIgiZCLml6UiJywiemgtY24iOidtIuaciCJkIuaXpSInLCJqYS1qcCI6J1skLTQxMV1nZ2dlIuW5tCJtIuaciCJkIuaXpSInLCJrby1rciI6Im1tLWRkIn0sNTk6eyJ0aC10aCI6InQwIn0sNjA6eyJ0aC10aCI6InQwLjAwIn0sNjE6eyJ0aC10aCI6InQjLCMjMCJ9LDYyOnsidGgtdGgiOiJ0IywjIzAuMDAifSw2Nzp7InRoLXRoIjoidDAlIn0sNjg6eyJ0aC10aCI6InQwLjAwJSJ9LDY5OnsidGgtdGgiOiJ0IyA/Lz8ifSw3MDp7InRoLXRoIjoidCMgPz8vPz8ifSw4MTp7InRoLXRoIjoiZC9tL2JiIn19fSx7fV0sMzE6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9e09mZmljZURvY3VtZW50OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixXb3Jrc2hlZXQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0IixDYWxjQ2hhaW46Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2FsY0NoYWluIixTaGFyZWRTdHJpbmdzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiLFN0eWxlczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiLFRoZW1lOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIixIeXBlcmxpbms6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixJbWFnZToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZSIsQ29yZVByb3BlcnRpZXM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLEV4dGVuZGVyUHJvcGVydGllczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIixDb21tZW50czoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyIsVm1sRHJhd2luZzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy92bWxEcmF3aW5nIixUYWJsZToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSJ9fSx7fV0sMzI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL3V0aWxzL3BhcnNlLXNheCIpLHM9YSgiLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpO2NsYXNzIG97cHJlcGFyZSgpe31yZW5kZXIoKXt9cGFyc2VPcGVuKHQpe31wYXJzZVRleHQodCl7fXBhcnNlQ2xvc2UodCl7fXJlY29uY2lsZSh0LGUpe31yZXNldCgpe3RoaXMubW9kZWw9bnVsbCx0aGlzLm1hcCYmT2JqZWN0LnZhbHVlcyh0aGlzLm1hcCkuZm9yRWFjaCh0PT57dCBpbnN0YW5jZW9mIG8/dC5yZXNldCgpOnQueGZvcm0mJnQueGZvcm0ucmVzZXQoKX0pfW1lcmdlTW9kZWwodCl7dGhpcy5tb2RlbD1PYmplY3QuYXNzaWduKHRoaXMubW9kZWx8fHt9LHQpfWFzeW5jIHBhcnNlKHQpe2ZvciBhd2FpdChjb25zdCBlIG9mIHQpZm9yKGNvbnN0e2V2ZW50VHlwZTpsLHZhbHVlOm59b2YgZSlpZihsPT09Im9wZW50YWciKXRoaXMucGFyc2VPcGVuKG4pO2Vsc2UgaWYobD09PSJ0ZXh0Iil0aGlzLnBhcnNlVGV4dChuKTtlbHNlIGlmKGw9PT0iY2xvc2V0YWciJiYhdGhpcy5wYXJzZUNsb3NlKG4ubmFtZSkpcmV0dXJuIHRoaXMubW9kZWw7cmV0dXJuIHRoaXMubW9kZWx9YXN5bmMgcGFyc2VTdHJlYW0odCl7cmV0dXJuIHRoaXMucGFyc2UobSh0KSl9Z2V0IHhtbCgpe3JldHVybiB0aGlzLnRvWG1sKHRoaXMubW9kZWwpfXRvWG1sKHQpe2NvbnN0IGU9bmV3IHM7cmV0dXJuIHRoaXMucmVuZGVyKGUsdCksZS54bWx9c3RhdGljIHRvQXR0cmlidXRlKHQsZSl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDAmJmFyZ3VtZW50c1syXTtpZih0PT09dm9pZCAwKXtpZihsKXJldHVybiBlfWVsc2UgaWYobHx8dCE9PWUpcmV0dXJuIHQudG9TdHJpbmcoKX1zdGF0aWMgdG9TdHJpbmdBdHRyaWJ1dGUodCxlKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMCYmYXJndW1lbnRzWzJdO3JldHVybiBvLnRvQXR0cmlidXRlKHQsZSxsKX1zdGF0aWMgdG9TdHJpbmdWYWx1ZSh0LGUpe3JldHVybiB0PT09dm9pZCAwP2U6dH1zdGF0aWMgdG9Cb29sQXR0cmlidXRlKHQsZSl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDAmJmFyZ3VtZW50c1syXTtpZih0PT09dm9pZCAwKXtpZihsKXJldHVybiBlfWVsc2UgaWYobHx8dCE9PWUpcmV0dXJuIHQ/IjEiOiIwIn1zdGF0aWMgdG9Cb29sVmFsdWUodCxlKXtyZXR1cm4gdD09PXZvaWQgMD9lOnQ9PT0iMSJ9c3RhdGljIHRvSW50QXR0cmlidXRlKHQsZSl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDAmJmFyZ3VtZW50c1syXTtyZXR1cm4gby50b0F0dHJpYnV0ZSh0LGUsbCl9c3RhdGljIHRvSW50VmFsdWUodCxlKXtyZXR1cm4gdD09PXZvaWQgMD9lOnBhcnNlSW50KHQsMTApfXN0YXRpYyB0b0Zsb2F0QXR0cmlidXRlKHQsZSl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDAmJmFyZ3VtZW50c1syXTtyZXR1cm4gby50b0F0dHJpYnV0ZSh0LGUsbCl9c3RhdGljIHRvRmxvYXRWYWx1ZSh0LGUpe3JldHVybiB0PT09dm9pZCAwP2U6cGFyc2VGbG9hdCh0KX19RS5leHBvcnRzPW99LHsiLi4vLi4vdXRpbHMvcGFyc2Utc2F4IjoyMiwiLi4vLi4vdXRpbHMveG1sLXN0cmVhbSI6Mjh9XSwzMzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpLHM9YSgiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIik7ZnVuY3Rpb24gbyh0KXt0cnl7cmV0dXJuIHMuZGVjb2RlRXgodCksITB9Y2F0Y2h7cmV0dXJuITF9fWZ1bmN0aW9uIHIodCl7Y29uc3QgZT1bXTtsZXQgbD0hMSxuPSIiO3JldHVybiB0LnNwbGl0KCIsIikuZm9yRWFjaChpPT57aWYoIWkpcmV0dXJuO2NvbnN0IGY9KGkubWF0Y2goLycvZyl8fFtdKS5sZW5ndGg7aWYoIWYpcmV0dXJuIHZvaWQobD9uKz1pKyIsIjpvKGkpJiZlLnB1c2goaSkpO2NvbnN0IGM9ZiUyPT0wOyFsJiZjJiZvKGkpP2UucHVzaChpKTpsJiYhYz8obD0hMSxvKG4raSkmJmUucHVzaChuK2kpLG49IiIpOihsPSEwLG4rPWkrIiwiKX0pLGV9RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtyZW5kZXIodCxlKXt0Lm9wZW5Ob2RlKCJkZWZpbmVkTmFtZSIse25hbWU6ZS5uYW1lLGxvY2FsU2hlZXRJZDplLmxvY2FsU2hlZXRJZH0pLHQud3JpdGVUZXh0KGUucmFuZ2VzLmpvaW4oIiwiKSksdC5jbG9zZU5vZGUoKX1wYXJzZU9wZW4odCl7c3dpdGNoKHQubmFtZSl7Y2FzZSJkZWZpbmVkTmFtZSI6cmV0dXJuIHRoaXMuX3BhcnNlZE5hbWU9dC5hdHRyaWJ1dGVzLm5hbWUsdGhpcy5fcGFyc2VkTG9jYWxTaGVldElkPXQuYXR0cmlidXRlcy5sb2NhbFNoZWV0SWQsdGhpcy5fcGFyc2VkVGV4dD1bXSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQodCl7dGhpcy5fcGFyc2VkVGV4dC5wdXNoKHQpfXBhcnNlQ2xvc2UoKXtyZXR1cm4gdGhpcy5tb2RlbD17bmFtZTp0aGlzLl9wYXJzZWROYW1lLHJhbmdlczpyKHRoaXMuX3BhcnNlZFRleHQuam9pbigiIikpfSx0aGlzLl9wYXJzZWRMb2NhbFNoZWV0SWQhPT12b2lkIDAmJih0aGlzLm1vZGVsLmxvY2FsU2hlZXRJZD1wYXJzZUludCh0aGlzLl9wYXJzZWRMb2NhbFNoZWV0SWQsMTApKSwhMX19fSx7Ii4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uL2Jhc2UteGZvcm0iOjMyfV0sMzQ6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3V0aWxzIikscz1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tyZW5kZXIobyxyKXtvLmxlYWZOb2RlKCJzaGVldCIse3NoZWV0SWQ6ci5pZCxuYW1lOnIubmFtZSxzdGF0ZTpyLnN0YXRlLCJyOmlkIjpyLnJJZH0pfXBhcnNlT3BlbihvKXtyZXR1cm4gby5uYW1lPT09InNoZWV0IiYmKHRoaXMubW9kZWw9e25hbWU6bS54bWxEZWNvZGUoby5hdHRyaWJ1dGVzLm5hbWUpLGlkOnBhcnNlSW50KG8uYXR0cmlidXRlcy5zaGVldElkLDEwKSxzdGF0ZTpvLmF0dHJpYnV0ZXMuc3RhdGUscklkOm8uYXR0cmlidXRlc1sicjppZCJdfSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uLy4uL3V0aWxzL3V0aWxzIjoyNywiLi4vYmFzZS14Zm9ybSI6MzJ9XSwzNTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17cmVuZGVyKHMsbyl7cy5sZWFmTm9kZSgiY2FsY1ByIix7Y2FsY0lkOjE3MTAyNyxmdWxsQ2FsY09uTG9hZDpvLmZ1bGxDYWxjT25Mb2FkPzE6dm9pZCAwfSl9cGFyc2VPcGVuKHMpe3JldHVybiBzLm5hbWU9PT0iY2FsY1ByIiYmKHRoaXMubW9kZWw9e30sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDM2OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtyZW5kZXIocyxvKXtzLmxlYWZOb2RlKCJ3b3JrYm9va1ByIix7ZGF0ZTE5MDQ6by5kYXRlMTkwND8xOnZvaWQgMCxkZWZhdWx0VGhlbWVWZXJzaW9uOjE2NDAxMSxmaWx0ZXJQcml2YWN5OjF9KX1wYXJzZU9wZW4ocyl7cmV0dXJuIHMubmFtZT09PSJ3b3JrYm9va1ByIiYmKHRoaXMubW9kZWw9e2RhdGUxOTA0OnMuYXR0cmlidXRlcy5kYXRlMTkwND09PSIxIn0sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDM3OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtyZW5kZXIocyxvKXtjb25zdCByPXt4V2luZG93Om8ueHx8MCx5V2luZG93Om8ueXx8MCx3aW5kb3dXaWR0aDpvLndpZHRofHwxMmUzLHdpbmRvd0hlaWdodDpvLmhlaWdodHx8MjRlMyxmaXJzdFNoZWV0Om8uZmlyc3RTaGVldCxhY3RpdmVUYWI6by5hY3RpdmVUYWJ9O28udmlzaWJpbGl0eSYmby52aXNpYmlsaXR5IT09InZpc2libGUiJiYoci52aXNpYmlsaXR5PW8udmlzaWJpbGl0eSkscy5sZWFmTm9kZSgid29ya2Jvb2tWaWV3IixyKX1wYXJzZU9wZW4ocyl7aWYocy5uYW1lPT09Indvcmtib29rVmlldyIpe2NvbnN0IG89dGhpcy5tb2RlbD17fSxyPWZ1bmN0aW9uKGUsbCxuKXtjb25zdCBpPWwhPT12b2lkIDA/b1tlXT1sOm47aSE9PXZvaWQgMCYmKG9bZV09aSl9LHQ9ZnVuY3Rpb24oZSxsLG4pe2NvbnN0IGk9bCE9PXZvaWQgMD9vW2VdPXBhcnNlSW50KGwsMTApOm47aSE9PXZvaWQgMCYmKG9bZV09aSl9O3JldHVybiB0KCJ4IixzLmF0dHJpYnV0ZXMueFdpbmRvdywwKSx0KCJ5IixzLmF0dHJpYnV0ZXMueVdpbmRvdywwKSx0KCJ3aWR0aCIscy5hdHRyaWJ1dGVzLndpbmRvd1dpZHRoLDI1ZTMpLHQoImhlaWdodCIscy5hdHRyaWJ1dGVzLndpbmRvd0hlaWdodCwxZTQpLHIoInZpc2liaWxpdHkiLHMuYXR0cmlidXRlcy52aXNpYmlsaXR5LCJ2aXNpYmxlIiksdCgiYWN0aXZlVGFiIixzLmF0dHJpYnV0ZXMuYWN0aXZlVGFiLHZvaWQgMCksdCgiZmlyc3RTaGVldCIscy5hdHRyaWJ1dGVzLmZpcnN0U2hlZXQsdm9pZCAwKSwhMH1yZXR1cm4hMX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwzODpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCIpLHM9YSgiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIiksbz1hKCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIikscj1hKCIuLi9iYXNlLXhmb3JtIiksdD1hKCIuLi9zdGF0aWMteGZvcm0iKSxlPWEoIi4uL2xpc3QteGZvcm0iKSxsPWEoIi4vZGVmaW5lZC1uYW1lLXhmb3JtIiksbj1hKCIuL3NoZWV0LXhmb3JtIiksaT1hKCIuL3dvcmtib29rLXZpZXcteGZvcm0iKSxmPWEoIi4vd29ya2Jvb2stcHJvcGVydGllcy14Zm9ybSIpLGM9YSgiLi93b3JrYm9vay1jYWxjLXByb3BlcnRpZXMteGZvcm0iKTtjbGFzcyB1IGV4dGVuZHMgcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2ZpbGVWZXJzaW9uOnUuU1RBVElDX1hGT1JNUy5maWxlVmVyc2lvbix3b3JrYm9va1ByOm5ldyBmLGJvb2tWaWV3czpuZXcgZSh7dGFnOiJib29rVmlld3MiLGNvdW50OiExLGNoaWxkWGZvcm06bmV3IGl9KSxzaGVldHM6bmV3IGUoe3RhZzoic2hlZXRzIixjb3VudDohMSxjaGlsZFhmb3JtOm5ldyBufSksZGVmaW5lZE5hbWVzOm5ldyBlKHt0YWc6ImRlZmluZWROYW1lcyIsY291bnQ6ITEsY2hpbGRYZm9ybTpuZXcgbH0pLGNhbGNQcjpuZXcgY319cHJlcGFyZShoKXtoLnNoZWV0cz1oLndvcmtzaGVldHM7Y29uc3Qgdz1bXTtsZXQgXz0wO2guc2hlZXRzLmZvckVhY2goQT0+e2lmKEEucGFnZVNldHVwJiZBLnBhZ2VTZXR1cC5wcmludEFyZWEmJkEucGFnZVNldHVwLnByaW50QXJlYS5zcGxpdCgiJiYiKS5mb3JFYWNoKFA9Pntjb25zdCBMPVAuc3BsaXQoIjoiKSxOPXtuYW1lOiJfeGxubS5QcmludF9BcmVhIixyYW5nZXM6W2AnJHtBLm5hbWV9JyEkJHtMWzBdfTokJHtMWzFdfWBdLGxvY2FsU2hlZXRJZDpffTt3LnB1c2goTil9KSxBLnBhZ2VTZXR1cCYmKEEucGFnZVNldHVwLnByaW50VGl0bGVzUm93fHxBLnBhZ2VTZXR1cC5wcmludFRpdGxlc0NvbHVtbikpe2NvbnN0IFA9W107aWYoQS5wYWdlU2V0dXAucHJpbnRUaXRsZXNDb2x1bW4pe2NvbnN0IE49QS5wYWdlU2V0dXAucHJpbnRUaXRsZXNDb2x1bW4uc3BsaXQoIjoiKTtQLnB1c2goYCcke0EubmFtZX0nISQke05bMF19OiQke05bMV19YCl9aWYoQS5wYWdlU2V0dXAucHJpbnRUaXRsZXNSb3cpe2NvbnN0IE49QS5wYWdlU2V0dXAucHJpbnRUaXRsZXNSb3cuc3BsaXQoIjoiKTtQLnB1c2goYCcke0EubmFtZX0nISQke05bMF19OiQke05bMV19YCl9Y29uc3QgTD17bmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixyYW5nZXM6UCxsb2NhbFNoZWV0SWQ6X307dy5wdXNoKEwpfV8rK30pLHcubGVuZ3RoJiYoaC5kZWZpbmVkTmFtZXM9aC5kZWZpbmVkTmFtZXMuY29uY2F0KHcpKSwoaC5tZWRpYXx8W10pLmZvckVhY2goKEEsUCk9PntBLm5hbWU9QS50eXBlKyhQKzEpfSl9cmVuZGVyKGgsdyl7aC5vcGVuWG1sKG8uU3RkRG9jQXR0cmlidXRlcyksaC5vcGVuTm9kZSgid29ya2Jvb2siLHUuV09SS0JPT0tfQVRUUklCVVRFUyksdGhpcy5tYXAuZmlsZVZlcnNpb24ucmVuZGVyKGgpLHRoaXMubWFwLndvcmtib29rUHIucmVuZGVyKGgsdy5wcm9wZXJ0aWVzKSx0aGlzLm1hcC5ib29rVmlld3MucmVuZGVyKGgsdy52aWV3cyksdGhpcy5tYXAuc2hlZXRzLnJlbmRlcihoLHcuc2hlZXRzKSx0aGlzLm1hcC5kZWZpbmVkTmFtZXMucmVuZGVyKGgsdy5kZWZpbmVkTmFtZXMpLHRoaXMubWFwLmNhbGNQci5yZW5kZXIoaCx3LmNhbGNQcm9wZXJ0aWVzKSxoLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihoKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGgpLCEwO3N3aXRjaChoLm5hbWUpe2Nhc2Uid29ya2Jvb2siOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwW2gubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihoKSwhMH19cGFyc2VUZXh0KGgpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoaCl9cGFyc2VDbG9zZShoKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShoKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKGgpe2Nhc2Uid29ya2Jvb2siOnJldHVybiB0aGlzLm1vZGVsPXtzaGVldHM6dGhpcy5tYXAuc2hlZXRzLm1vZGVsLHByb3BlcnRpZXM6dGhpcy5tYXAud29ya2Jvb2tQci5tb2RlbHx8e30sdmlld3M6dGhpcy5tYXAuYm9va1ZpZXdzLm1vZGVsLGNhbGNQcm9wZXJ0aWVzOnt9fSx0aGlzLm1hcC5kZWZpbmVkTmFtZXMubW9kZWwmJih0aGlzLm1vZGVsLmRlZmluZWROYW1lcz10aGlzLm1hcC5kZWZpbmVkTmFtZXMubW9kZWwpLCExO2RlZmF1bHQ6cmV0dXJuITB9fXJlY29uY2lsZShoKXtjb25zdCB3PShoLndvcmtib29rUmVsc3x8W10pLnJlZHVjZSgoTixEKT0+KE5bRC5JZF09RCxOKSx7fSksXz1bXTtsZXQgQSxQPTA7KGguc2hlZXRzfHxbXSkuZm9yRWFjaChOPT57Y29uc3QgRD13W04ucklkXTtEJiYoQT1oLndvcmtzaGVldEhhc2hbInhsLyIrRC5UYXJnZXQucmVwbGFjZSgvXihcc3xcL3hsXC8pKy8sIiIpXSxBJiYoQS5uYW1lPU4ubmFtZSxBLmlkPU4uaWQsQS5zdGF0ZT1OLnN0YXRlLF9bUCsrXT1BKSl9KTtjb25zdCBMPVtdO20uZWFjaChoLmRlZmluZWROYW1lcyxOPT57aWYoTi5uYW1lPT09Il94bG5tLlByaW50X0FyZWEiKXtpZihBPV9bTi5sb2NhbFNoZWV0SWRdLEEpe0EucGFnZVNldHVwfHwoQS5wYWdlU2V0dXA9e30pO2NvbnN0IEQ9cy5kZWNvZGVFeChOLnJhbmdlc1swXSk7QS5wYWdlU2V0dXAucHJpbnRBcmVhPUEucGFnZVNldHVwLnByaW50QXJlYT9gJHtBLnBhZ2VTZXR1cC5wcmludEFyZWF9JiYke0QuZGltZW5zaW9uc31gOkQuZGltZW5zaW9uc319ZWxzZSBpZihOLm5hbWU9PT0iX3hsbm0uUHJpbnRfVGl0bGVzIil7aWYoQT1fW04ubG9jYWxTaGVldElkXSxBKXtBLnBhZ2VTZXR1cHx8KEEucGFnZVNldHVwPXt9KTtjb25zdCBEPU4ucmFuZ2VzLmpvaW4oIiwiKSxGPS9cJC9nLFU9L1wkXGQrOlwkXGQrLyxCPUQubWF0Y2goVSk7aWYoQiYmQi5sZW5ndGgpe2NvbnN0IHY9QlswXTtBLnBhZ2VTZXR1cC5wcmludFRpdGxlc1Jvdz12LnJlcGxhY2UoRiwiIil9Y29uc3QgUz0vXCRbQS1aXSs6XCRbQS1aXSsvLEM9RC5tYXRjaChTKTtpZihDJiZDLmxlbmd0aCl7Y29uc3Qgdj1DWzBdO0EucGFnZVNldHVwLnByaW50VGl0bGVzQ29sdW1uPXYucmVwbGFjZShGLCIiKX19fWVsc2UgTC5wdXNoKE4pfSksaC5kZWZpbmVkTmFtZXM9TCxoLm1lZGlhLmZvckVhY2goKE4sRCk9PntOLmluZGV4PUR9KX19dS5XT1JLQk9PS19BVFRSSUJVVEVTPXt4bWxuczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwieG1sbnM6ciI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE1IiwieG1sbnM6eDE1IjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDEwLzExL21haW4ifSx1LlNUQVRJQ19YRk9STVM9e2ZpbGVWZXJzaW9uOm5ldyB0KHt0YWc6ImZpbGVWZXJzaW9uIiwkOnthcHBOYW1lOiJ4bCIsbGFzdEVkaXRlZDo1LGxvd2VzdEVkaXRlZDo1LHJ1cEJ1aWxkOjkzMDN9fSl9LEUuZXhwb3J0cz11fSx7Ii4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL2xpc3QteGZvcm0iOjcxLCIuLi9zdGF0aWMteGZvcm0iOjEyMCwiLi9kZWZpbmVkLW5hbWUteGZvcm0iOjMzLCIuL3NoZWV0LXhmb3JtIjozNCwiLi93b3JrYm9vay1jYWxjLXByb3BlcnRpZXMteGZvcm0iOjM1LCIuL3dvcmtib29rLXByb3BlcnRpZXMteGZvcm0iOjM2LCIuL3dvcmtib29rLXZpZXcteGZvcm0iOjM3fV0sMzk6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL3N0cmluZ3MvcmljaC10ZXh0LXhmb3JtIikscz1hKCIuLi8uLi8uLi91dGlscy91dGlscyIpLG89YSgiLi4vYmFzZS14Zm9ybSIpLHI9RS5leHBvcnRzPWZ1bmN0aW9uKHQpe3RoaXMubW9kZWw9dH07cy5pbmhlcml0cyhyLG8se2dldCB0YWcoKXtyZXR1cm4iciJ9LGdldCByaWNoVGV4dFhmb3JtKCl7cmV0dXJuIHRoaXMuX3JpY2hUZXh0WGZvcm18fCh0aGlzLl9yaWNoVGV4dFhmb3JtPW5ldyBtKSx0aGlzLl9yaWNoVGV4dFhmb3JtfSxyZW5kZXIodCxlKXtlPWV8fHRoaXMubW9kZWwsdC5vcGVuTm9kZSgiY29tbWVudCIse3JlZjplLnJlZixhdXRob3JJZDowfSksdC5vcGVuTm9kZSgidGV4dCIpLGUmJmUubm90ZSYmZS5ub3RlLnRleHRzJiZlLm5vdGUudGV4dHMuZm9yRWFjaChsPT57dGhpcy5yaWNoVGV4dFhmb3JtLnJlbmRlcih0LGwpfSksdC5jbG9zZU5vZGUoKSx0LmNsb3NlTm9kZSgpfSxwYXJzZU9wZW4odCl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3Blbih0KSwhMDtzd2l0Y2godC5uYW1lKXtjYXNlImNvbW1lbnQiOnJldHVybiB0aGlzLm1vZGVsPXt0eXBlOiJub3RlIixub3RlOnt0ZXh0czpbXX0sLi4udC5hdHRyaWJ1dGVzfSwhMDtjYXNlInIiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLnJpY2hUZXh0WGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fSxwYXJzZVRleHQodCl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dCh0KX0scGFyc2VDbG9zZSh0KXtzd2l0Y2godCl7Y2FzZSJjb21tZW50IjpyZXR1cm4hMTtjYXNlInIiOnJldHVybiB0aGlzLm1vZGVsLm5vdGUudGV4dHMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwLCEwO2RlZmF1bHQ6cmV0dXJuIHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHQpLCEwfX19KX0seyIuLi8uLi8uLi91dGlscy91dGlscyI6MjcsIi4uL2Jhc2UteGZvcm0iOjMyLCIuLi9zdHJpbmdzL3JpY2gtdGV4dC14Zm9ybSI6MTIyfV0sNDA6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxzPWEoIi4uLy4uLy4uL3V0aWxzL3V0aWxzIiksbz1hKCIuLi9iYXNlLXhmb3JtIikscj1hKCIuL2NvbW1lbnQteGZvcm0iKSx0PUUuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMubWFwPXtjb21tZW50Om5ldyByfX07cy5pbmhlcml0cyh0LG8se0NPTU1FTlRTX0FUVFJJQlVURVM6e3htbG5zOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4ifX0se3JlbmRlcihlLGwpe2w9bHx8dGhpcy5tb2RlbCxlLm9wZW5YbWwobS5TdGREb2NBdHRyaWJ1dGVzKSxlLm9wZW5Ob2RlKCJjb21tZW50cyIsdC5DT01NRU5UU19BVFRSSUJVVEVTKSxlLm9wZW5Ob2RlKCJhdXRob3JzIiksZS5sZWFmTm9kZSgiYXV0aG9yIixudWxsLCJBdXRob3IiKSxlLmNsb3NlTm9kZSgpLGUub3Blbk5vZGUoImNvbW1lbnRMaXN0IiksbC5jb21tZW50cy5mb3JFYWNoKG49Pnt0aGlzLm1hcC5jb21tZW50LnJlbmRlcihlLG4pfSksZS5jbG9zZU5vZGUoKSxlLmNsb3NlTm9kZSgpfSxwYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlImNvbW1lbnRMaXN0IjpyZXR1cm4gdGhpcy5tb2RlbD17Y29tbWVudHM6W119LCEwO2Nhc2UiY29tbWVudCI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLmNvbW1lbnQsdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fSxwYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX0scGFyc2VDbG9zZShlKXtzd2l0Y2goZSl7Y2FzZSJjb21tZW50TGlzdCI6cmV0dXJuITE7Y2FzZSJjb21tZW50IjpyZXR1cm4gdGhpcy5tb2RlbC5jb21tZW50cy5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDAsITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSksITB9fX0pfSx7Ii4uLy4uLy4uL3V0aWxzL3V0aWxzIjoyNywiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL2Jhc2UteGZvcm0iOjMyLCIuL2NvbW1lbnQteGZvcm0iOjM5fV0sNDE6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKHMpe3N1cGVyKCksdGhpcy5fbW9kZWw9c31nZXQgdGFnKCl7cmV0dXJuIHRoaXMuX21vZGVsJiZ0aGlzLl9tb2RlbC50YWd9cmVuZGVyKHMsbyxyKXsobz09PXJbMl18fHRoaXMudGFnPT09Ing6U2l6ZVdpdGhDZWxscyImJm89PT1yWzFdKSYmcy5sZWFmTm9kZSh0aGlzLnRhZyl9cGFyc2VPcGVuKHMpe3N3aXRjaChzLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e30sdGhpcy5tb2RlbFt0aGlzLnRhZ109ITAsITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyfV0sNDI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKHMpe3N1cGVyKCksdGhpcy5fbW9kZWw9c31nZXQgdGFnKCl7cmV0dXJuIHRoaXMuX21vZGVsJiZ0aGlzLl9tb2RlbC50YWd9cmVuZGVyKHMsbyl7cy5sZWFmTm9kZSh0aGlzLnRhZyxudWxsLG8pfXBhcnNlT3BlbihzKXtzd2l0Y2gocy5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLnRleHQ9IiIsITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KHMpe3RoaXMudGV4dD1zfXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyfV0sNDM6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4ieDpBbmNob3IifWdldEFuY2hvclJlY3Qocyl7Y29uc3Qgbz1NYXRoLmZsb29yKHMubGVmdCkscj1NYXRoLmZsb29yKDY4KihzLmxlZnQtbykpLHQ9TWF0aC5mbG9vcihzLnRvcCksZT1NYXRoLmZsb29yKDE4KihzLnRvcC10KSksbD1NYXRoLmZsb29yKHMucmlnaHQpLG49TWF0aC5mbG9vcig2OCoocy5yaWdodC1sKSksaT1NYXRoLmZsb29yKHMuYm90dG9tKTtyZXR1cm5bbyxyLHQsZSxsLG4saSxNYXRoLmZsb29yKDE4KihzLmJvdHRvbS1pKSldfWdldERlZmF1bHRSZWN0KHMpe2NvbnN0IG89cy5jb2wscj1NYXRoLm1heChzLnJvdy0yLDApO3JldHVybltvLDYsciwxNCxvKzIsMixyKzQsMTZdfXJlbmRlcihzLG8pe2NvbnN0IHI9by5hbmNob3I/dGhpcy5nZXRBbmNob3JSZWN0KG8uYW5jaG9yKTp0aGlzLmdldERlZmF1bHRSZWN0KG8ucmVmQWRkcmVzcyk7cy5sZWFmTm9kZSgieDpBbmNob3IiLG51bGwsci5qb2luKCIsICIpKX1wYXJzZU9wZW4ocyl7c3dpdGNoKHMubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy50ZXh0PSIiLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChzKXt0aGlzLnRleHQ9c31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDQ0OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIikscz1hKCIuL3ZtbC1hbmNob3IteGZvcm0iKSxvPWEoIi4vc3R5bGUvdm1sLXByb3RlY3Rpb24teGZvcm0iKSxyPWEoIi4vc3R5bGUvdm1sLXBvc2l0aW9uLXhmb3JtIiksdD1bInR3b0NlbGxzIiwib25lQ2VsbHMiLCJhYnNvbHV0ZSJdO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieDpBbmNob3IiOm5ldyBzLCJ4OkxvY2tlZCI6bmV3IG8oe3RhZzoieDpMb2NrZWQifSksIng6TG9ja1RleHQiOm5ldyBvKHt0YWc6Ing6TG9ja1RleHQifSksIng6U2l6ZVdpdGhDZWxscyI6bmV3IHIoe3RhZzoieDpTaXplV2l0aENlbGxzIn0pLCJ4Ok1vdmVXaXRoQ2VsbHMiOm5ldyByKHt0YWc6Ing6TW92ZVdpdGhDZWxscyJ9KX19Z2V0IHRhZygpe3JldHVybiJ4OkNsaWVudERhdGEifXJlbmRlcihlLGwpe2NvbnN0e3Byb3RlY3Rpb246bixlZGl0QXM6aX09bC5ub3RlO2Uub3Blbk5vZGUodGhpcy50YWcse09iamVjdFR5cGU6Ik5vdGUifSksdGhpcy5tYXBbIng6TW92ZVdpdGhDZWxscyJdLnJlbmRlcihlLGksdCksdGhpcy5tYXBbIng6U2l6ZVdpdGhDZWxscyJdLnJlbmRlcihlLGksdCksdGhpcy5tYXBbIng6QW5jaG9yIl0ucmVuZGVyKGUsbCksdGhpcy5tYXBbIng6TG9ja2VkIl0ucmVuZGVyKGUsbi5sb2NrZWQpLGUubGVhZk5vZGUoIng6QXV0b0ZpbGwiLG51bGwsIkZhbHNlIiksdGhpcy5tYXBbIng6TG9ja1RleHQiXS5yZW5kZXIoZSxuLmxvY2tUZXh0KSxlLmxlYWZOb2RlKCJ4OlJvdyIsbnVsbCxsLnJlZkFkZHJlc3Mucm93LTEpLGUubGVhZk5vZGUoIng6Q29sdW1uIixudWxsLGwucmVmQWRkcmVzcy5jb2wtMSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17YW5jaG9yOltdLHByb3RlY3Rpb246e30sZWRpdEFzOiIifTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKX1yZXR1cm4hMH1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5ub3JtYWxpemVNb2RlbCgpLCExO2RlZmF1bHQ6cmV0dXJuITB9fW5vcm1hbGl6ZU1vZGVsKCl7Y29uc3QgZT1PYmplY3QuYXNzaWduKHt9LHRoaXMubWFwWyJ4Ok1vdmVXaXRoQ2VsbHMiXS5tb2RlbCx0aGlzLm1hcFsieDpTaXplV2l0aENlbGxzIl0ubW9kZWwpLGw9T2JqZWN0LmtleXMoZSkubGVuZ3RoO3RoaXMubW9kZWwuZWRpdEFzPXRbbF0sdGhpcy5tb2RlbC5hbmNob3I9dGhpcy5tYXBbIng6QW5jaG9yIl0udGV4dCx0aGlzLm1vZGVsLnByb3RlY3Rpb24ubG9ja2VkPXRoaXMubWFwWyJ4OkxvY2tlZCJdLnRleHQsdGhpcy5tb2RlbC5wcm90ZWN0aW9uLmxvY2tUZXh0PXRoaXMubWFwWyJ4OkxvY2tUZXh0Il0udGV4dH19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL3N0eWxlL3ZtbC1wb3NpdGlvbi14Zm9ybSI6NDEsIi4vc3R5bGUvdm1sLXByb3RlY3Rpb24teGZvcm0iOjQyLCIuL3ZtbC1hbmNob3IteGZvcm0iOjQzfV0sNDU6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxzPWEoIi4uL2Jhc2UteGZvcm0iKSxvPWEoIi4vdm1sLXNoYXBlLXhmb3JtIik7Y2xhc3MgciBleHRlbmRzIHN7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsidjpzaGFwZSI6bmV3IG99fWdldCB0YWcoKXtyZXR1cm4ieG1sIn1yZW5kZXIoZSxsKXtlLm9wZW5YbWwobS5TdGREb2NBdHRyaWJ1dGVzKSxlLm9wZW5Ob2RlKHRoaXMudGFnLHIuRFJBV0lOR19BVFRSSUJVVEVTKSxlLm9wZW5Ob2RlKCJvOnNoYXBlbGF5b3V0Iix7InY6ZXh0IjoiZWRpdCJ9KSxlLmxlYWZOb2RlKCJvOmlkbWFwIix7InY6ZXh0IjoiZWRpdCIsZGF0YToxfSksZS5jbG9zZU5vZGUoKSxlLm9wZW5Ob2RlKCJ2OnNoYXBldHlwZSIse2lkOiJfeDAwMDBfdDIwMiIsY29vcmRzaXplOiIyMTYwMCwyMTYwMCIsIm86c3B0IjoyMDIscGF0aDoibSxsLDIxNjAwcjIxNjAwLGwyMTYwMCx4ZSJ9KSxlLmxlYWZOb2RlKCJ2OnN0cm9rZSIse2pvaW5zdHlsZToibWl0ZXIifSksZS5sZWFmTm9kZSgidjpwYXRoIix7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSksZS5jbG9zZU5vZGUoKSxsLmNvbW1lbnRzLmZvckVhY2goKG4saSk9Pnt0aGlzLm1hcFsidjpzaGFwZSJdLnJlbmRlcihlLG4saSl9KSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpLHRoaXMubW9kZWw9e2NvbW1lbnRzOltdfTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKX1yZXR1cm4hMH1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5tb2RlbC5jb21tZW50cy5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fXJlY29uY2lsZShlLGwpe2UuYW5jaG9ycy5mb3JFYWNoKG49PntuLmJyP3RoaXMubWFwWyJ4ZHI6dHdvQ2VsbEFuY2hvciJdLnJlY29uY2lsZShuLGwpOnRoaXMubWFwWyJ4ZHI6b25lQ2VsbEFuY2hvciJdLnJlY29uY2lsZShuLGwpfSl9fXIuRFJBV0lOR19BVFRSSUJVVEVTPXsieG1sbnM6diI6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiwieG1sbnM6byI6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIsInhtbG5zOngiOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCJ9LEUuZXhwb3J0cz1yfSx7Ii4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi9iYXNlLXhmb3JtIjozMiwiLi92bWwtc2hhcGUteGZvcm0iOjQ2fV0sNDY6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPWEoIi4vdm1sLXRleHRib3gteGZvcm0iKSxvPWEoIi4vdm1sLWNsaWVudC1kYXRhLXhmb3JtIik7Y2xhc3MgciBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsidjp0ZXh0Ym94IjpuZXcgcywieDpDbGllbnREYXRhIjpuZXcgb319Z2V0IHRhZygpe3JldHVybiJ2OnNoYXBlIn1yZW5kZXIoZSxsLG4pe2Uub3Blbk5vZGUoInY6c2hhcGUiLHIuVl9TSEFQRV9BVFRSSUJVVEVTKGwsbikpLGUubGVhZk5vZGUoInY6ZmlsbCIse2NvbG9yMjoiaW5mb0JhY2tncm91bmQgWzgwXSJ9KSxlLmxlYWZOb2RlKCJ2OnNoYWRvdyIse2NvbG9yOiJub25lIFs4MV0iLG9ic2N1cmVkOiJ0In0pLGUubGVhZk5vZGUoInY6cGF0aCIseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSx0aGlzLm1hcFsidjp0ZXh0Ym94Il0ucmVuZGVyKGUsbCksdGhpcy5tYXBbIng6Q2xpZW50RGF0YSJdLnJlbmRlcihlLGwpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17bWFyZ2luczp7aW5zZXRtb2RlOmUuYXR0cmlidXRlc1sibzppbnNldG1vZGUiXX0sYW5jaG9yOiIiLGVkaXRBczoiIixwcm90ZWN0aW9uOnt9fTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKX1yZXR1cm4hMH1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbC5tYXJnaW5zLmluc2V0PXRoaXMubWFwWyJ2OnRleHRib3giXS5tb2RlbCYmdGhpcy5tYXBbInY6dGV4dGJveCJdLm1vZGVsLmluc2V0LHRoaXMubW9kZWwucHJvdGVjdGlvbj10aGlzLm1hcFsieDpDbGllbnREYXRhIl0ubW9kZWwmJnRoaXMubWFwWyJ4OkNsaWVudERhdGEiXS5tb2RlbC5wcm90ZWN0aW9uLHRoaXMubW9kZWwuYW5jaG9yPXRoaXMubWFwWyJ4OkNsaWVudERhdGEiXS5tb2RlbCYmdGhpcy5tYXBbIng6Q2xpZW50RGF0YSJdLm1vZGVsLmFuY2hvcix0aGlzLm1vZGVsLmVkaXRBcz10aGlzLm1hcFsieDpDbGllbnREYXRhIl0ubW9kZWwmJnRoaXMubWFwWyJ4OkNsaWVudERhdGEiXS5tb2RlbC5lZGl0QXMsITE7ZGVmYXVsdDpyZXR1cm4hMH19fXIuVl9TSEFQRV9BVFRSSUJVVEVTPSh0LGUpPT4oe2lkOiJfeDAwMDBfcyIrKDEwMjUrZSksdHlwZToiI194MDAwMF90MjAyIixzdHlsZToicG9zaXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjEwNS4zcHQ7bWFyZ2luLXRvcDoxMC41cHQ7d2lkdGg6OTcuOHB0O2hlaWdodDo1OS4xcHQ7ei1pbmRleDoxO3Zpc2liaWxpdHk6aGlkZGVuIixmaWxsY29sb3I6ImluZm9CYWNrZ3JvdW5kIFs4MF0iLHN0cm9rZWNvbG9yOiJub25lIFs4MV0iLCJvOmluc2V0bW9kZSI6dC5ub3RlLm1hcmdpbnMmJnQubm90ZS5tYXJnaW5zLmluc2V0bW9kZX0pLEUuZXhwb3J0cz1yfSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL3ZtbC1jbGllbnQtZGF0YS14Zm9ybSI6NDQsIi4vdm1sLXRleHRib3gteGZvcm0iOjQ3fV0sNDc6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4idjp0ZXh0Ym94In1jb252ZXJzaW9uVW5pdChzLG8scil7cmV0dXJuYCR7cGFyc2VGbG9hdChzKSpvLnRvRml4ZWQoMil9JHtyfWB9cmV2ZXJzZUNvbnZlcnNpb25Vbml0KHMpe3JldHVybihzfHwiIikuc3BsaXQoIiwiKS5tYXAobz0+TnVtYmVyKHBhcnNlRmxvYXQodGhpcy5jb252ZXJzaW9uVW5pdChwYXJzZUZsb2F0KG8pLC4xLCIiKSkudG9GaXhlZCgyKSkpfXJlbmRlcihzLG8pe2NvbnN0IHI9e3N0eWxlOiJtc28tZGlyZWN0aW9uLWFsdDphdXRvIn07aWYobyYmby5ub3RlKXtsZXR7aW5zZXQ6dH09by5ub3RlJiZvLm5vdGUubWFyZ2lucztBcnJheS5pc0FycmF5KHQpJiYodD10Lm1hcChlPT50aGlzLmNvbnZlcnNpb25Vbml0KGUsMTAsIm1tIikpLmpvaW4oIiwiKSksdCYmKHIuaW5zZXQ9dCl9cy5vcGVuTm9kZSgidjp0ZXh0Ym94IixyKSxzLmxlYWZOb2RlKCJkaXYiLHtzdHlsZToidGV4dC1hbGlnbjpsZWZ0In0pLHMuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKHMpe3N3aXRjaChzLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e2luc2V0OnRoaXMucmV2ZXJzZUNvbnZlcnNpb25Vbml0KHMuYXR0cmlidXRlcy5pbnNldCl9LCEwO2RlZmF1bHQ6cmV0dXJuITB9fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKHMpe3N3aXRjaChzKXtjYXNlIHRoaXMudGFnOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw0ODpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjcmVhdGVOZXdNb2RlbChzKXtyZXR1cm57fX1wYXJzZU9wZW4ocyl7cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMucGFyc2VyfHx0aGlzLm1hcFtzLm5hbWVdLHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4ocyksITApOnMubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD10aGlzLmNyZWF0ZU5ld01vZGVsKHMpLCEwKX1wYXJzZVRleHQocyl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChzKX1vblBhcnNlckNsb3NlKHMsbyl7dGhpcy5tb2RlbFtzXT1vLm1vZGVsfXBhcnNlQ2xvc2Uocyl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHMpfHwodGhpcy5vblBhcnNlckNsb3NlKHMsdGhpcy5wYXJzZXIpLHRoaXMucGFyc2VyPXZvaWQgMCksITApOnMhPT10aGlzLnRhZ319fSx7Ii4vYmFzZS14Zm9ybSI6MzJ9XSw0OTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17cmVuZGVyKHMsbyl7cy5vcGVuTm9kZSgiSGVhZGluZ1BhaXJzIikscy5vcGVuTm9kZSgidnQ6dmVjdG9yIix7c2l6ZToyLGJhc2VUeXBlOiJ2YXJpYW50In0pLHMub3Blbk5vZGUoInZ0OnZhcmlhbnQiKSxzLmxlYWZOb2RlKCJ2dDpscHN0ciIsdm9pZCAwLCJXb3Jrc2hlZXRzIikscy5jbG9zZU5vZGUoKSxzLm9wZW5Ob2RlKCJ2dDp2YXJpYW50Iikscy5sZWFmTm9kZSgidnQ6aTQiLHZvaWQgMCxvLmxlbmd0aCkscy5jbG9zZU5vZGUoKSxzLmNsb3NlTm9kZSgpLHMuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKHMpe3JldHVybiBzLm5hbWU9PT0iSGVhZGluZ1BhaXJzIn1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShzKXtyZXR1cm4gcyE9PSJIZWFkaW5nUGFpcnMifX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw1MDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17cmVuZGVyKHMsbyl7cy5vcGVuTm9kZSgiVGl0bGVzT2ZQYXJ0cyIpLHMub3Blbk5vZGUoInZ0OnZlY3RvciIse3NpemU6by5sZW5ndGgsYmFzZVR5cGU6Imxwc3RyIn0pLG8uZm9yRWFjaChyPT57cy5sZWFmTm9kZSgidnQ6bHBzdHIiLHZvaWQgMCxyLm5hbWUpfSkscy5jbG9zZU5vZGUoKSxzLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihzKXtyZXR1cm4gcy5uYW1lPT09IlRpdGxlc09mUGFydHMifXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKHMpe3JldHVybiBzIT09IlRpdGxlc09mUGFydHMifX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw1MTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpLG89YSgiLi4vc2ltcGxlL3N0cmluZy14Zm9ybSIpLHI9YSgiLi9hcHAtaGVhZGluZy1wYWlycy14Zm9ybSIpLHQ9YSgiLi9hcHAtdGl0bGVzLW9mLXBhcnRzLXhmb3JtIik7Y2xhc3MgZSBleHRlbmRzIHN7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtDb21wYW55Om5ldyBvKHt0YWc6IkNvbXBhbnkifSksTWFuYWdlcjpuZXcgbyh7dGFnOiJNYW5hZ2VyIn0pLEhlYWRpbmdQYWlyczpuZXcgcixUaXRsZU9mUGFydHM6bmV3IHR9fXJlbmRlcihuLGkpe24ub3BlblhtbChtLlN0ZERvY0F0dHJpYnV0ZXMpLG4ub3Blbk5vZGUoIlByb3BlcnRpZXMiLGUuUFJPUEVSVFlfQVRUUklCVVRFUyksbi5sZWFmTm9kZSgiQXBwbGljYXRpb24iLHZvaWQgMCwiTWljcm9zb2Z0IEV4Y2VsIiksbi5sZWFmTm9kZSgiRG9jU2VjdXJpdHkiLHZvaWQgMCwiMCIpLG4ubGVhZk5vZGUoIlNjYWxlQ3JvcCIsdm9pZCAwLCJmYWxzZSIpLHRoaXMubWFwLkhlYWRpbmdQYWlycy5yZW5kZXIobixpLndvcmtzaGVldHMpLHRoaXMubWFwLlRpdGxlT2ZQYXJ0cy5yZW5kZXIobixpLndvcmtzaGVldHMpLHRoaXMubWFwLkNvbXBhbnkucmVuZGVyKG4saS5jb21wYW55fHwiIiksdGhpcy5tYXAuTWFuYWdlci5yZW5kZXIobixpLm1hbmFnZXIpLG4ubGVhZk5vZGUoIkxpbmtzVXBUb0RhdGUiLHZvaWQgMCwiZmFsc2UiKSxuLmxlYWZOb2RlKCJTaGFyZWREb2MiLHZvaWQgMCwiZmFsc2UiKSxuLmxlYWZOb2RlKCJIeXBlcmxpbmtzQ2hhbmdlZCIsdm9pZCAwLCJmYWxzZSIpLG4ubGVhZk5vZGUoIkFwcFZlcnNpb24iLHZvaWQgMCwiMTYuMDMwMCIpLG4uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG4pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7c3dpdGNoKG4ubmFtZSl7Y2FzZSJQcm9wZXJ0aWVzIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcFtuLm5hbWVdLCEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITApfX1wYXJzZVRleHQobil7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChuKX1wYXJzZUNsb3NlKG4pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKG4pfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2gobil7Y2FzZSJQcm9wZXJ0aWVzIjpyZXR1cm4gdGhpcy5tb2RlbD17d29ya3NoZWV0czp0aGlzLm1hcC5UaXRsZU9mUGFydHMubW9kZWwsY29tcGFueTp0aGlzLm1hcC5Db21wYW55Lm1vZGVsLG1hbmFnZXI6dGhpcy5tYXAuTWFuYWdlci5tb2RlbH0sITE7ZGVmYXVsdDpyZXR1cm4hMH19fWUuRGF0ZUZvcm1hdD1mdW5jdGlvbihsKXtyZXR1cm4gbC50b0lTT1N0cmluZygpLnJlcGxhY2UoL1suXVxkezMsNn0vLCIiKX0sZS5EYXRlQXR0cnM9eyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sZS5QUk9QRVJUWV9BVFRSSUJVVEVTPXt4bWxuczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZXh0ZW5kZWQtcHJvcGVydGllcyIsInhtbG5zOnZ0IjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMifSxFLmV4cG9ydHM9ZX0seyIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL3NpbXBsZS9zdHJpbmcteGZvcm0iOjExOSwiLi9hcHAtaGVhZGluZy1wYWlycy14Zm9ybSI6NDksIi4vYXBwLXRpdGxlcy1vZi1wYXJ0cy14Zm9ybSI6NTB9XSw1MjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpO2NsYXNzIG8gZXh0ZW5kcyBze3JlbmRlcih0LGUpe3Qub3BlblhtbChtLlN0ZERvY0F0dHJpYnV0ZXMpLHQub3Blbk5vZGUoIlR5cGVzIixvLlBST1BFUlRZX0FUVFJJQlVURVMpO2NvbnN0IGw9e307KGUubWVkaWF8fFtdKS5mb3JFYWNoKG49PntpZihuLnR5cGU9PT0iaW1hZ2UiKXtjb25zdCBpPW4uZXh0ZW5zaW9uO2xbaV18fChsW2ldPSEwLHQubGVhZk5vZGUoIkRlZmF1bHQiLHtFeHRlbnNpb246aSxDb250ZW50VHlwZToiaW1hZ2UvIitpfSkpfX0pLHQubGVhZk5vZGUoIkRlZmF1bHQiLHtFeHRlbnNpb246InJlbHMiLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCJ9KSx0LmxlYWZOb2RlKCJEZWZhdWx0Iix7RXh0ZW5zaW9uOiJ4bWwiLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94bWwifSksdC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZToiL3hsL3dvcmtib29rLnhtbCIsQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIn0pLGUud29ya3NoZWV0cy5mb3JFYWNoKG49Pntjb25zdCBpPWAveGwvd29ya3NoZWV0cy9zaGVldCR7bi5pZH0ueG1sYDt0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOmksQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwifSl9KSx0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOiIveGwvdGhlbWUvdGhlbWUxLnhtbCIsQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWwifSksdC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZToiL3hsL3N0eWxlcy54bWwiLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIn0pLGUuc2hhcmVkU3RyaW5ncyYmZS5zaGFyZWRTdHJpbmdzLmNvdW50JiZ0LmxlYWZOb2RlKCJPdmVycmlkZSIse1BhcnROYW1lOiIveGwvc2hhcmVkU3RyaW5ncy54bWwiLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCJ9KSxlLnRhYmxlcyYmZS50YWJsZXMuZm9yRWFjaChuPT57dC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZToiL3hsL3RhYmxlcy8iK24udGFyZ2V0LENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwifSl9KSxlLmRyYXdpbmdzJiZlLmRyYXdpbmdzLmZvckVhY2gobj0+e3QubGVhZk5vZGUoIk92ZXJyaWRlIix7UGFydE5hbWU6YC94bC9kcmF3aW5ncy8ke24ubmFtZX0ueG1sYCxDb250ZW50VHlwZToiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmcreG1sIn0pfSksZS5jb21tZW50UmVmcyYmKHQubGVhZk5vZGUoIkRlZmF1bHQiLHtFeHRlbnNpb246InZtbCIsQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIn0pLGUuY29tbWVudFJlZnMuZm9yRWFjaChuPT57bGV0e2NvbW1lbnROYW1lOml9PW47dC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZTpgL3hsLyR7aX0ueG1sYCxDb250ZW50VHlwZToiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIn0pfSkpLHQubGVhZk5vZGUoIk92ZXJyaWRlIix7UGFydE5hbWU6Ii9kb2NQcm9wcy9jb3JlLnhtbCIsQ29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwifSksdC5sZWFmTm9kZSgiT3ZlcnJpZGUiLHtQYXJ0TmFtZToiL2RvY1Byb3BzL2FwcC54bWwiLENvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwifSksdC5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oKXtyZXR1cm4hMX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX1vLlBST1BFUlRZX0FUVFJJQlVURVM9e3htbG5zOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMifSxFLmV4cG9ydHM9b30seyIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzJ9XSw1MzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpLG89YSgiLi4vc2ltcGxlL2RhdGUteGZvcm0iKSxyPWEoIi4uL3NpbXBsZS9zdHJpbmcteGZvcm0iKSx0PWEoIi4uL3NpbXBsZS9pbnRlZ2VyLXhmb3JtIik7Y2xhc3MgZSBleHRlbmRzIHN7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsiZGM6Y3JlYXRvciI6bmV3IHIoe3RhZzoiZGM6Y3JlYXRvciJ9KSwiZGM6dGl0bGUiOm5ldyByKHt0YWc6ImRjOnRpdGxlIn0pLCJkYzpzdWJqZWN0IjpuZXcgcih7dGFnOiJkYzpzdWJqZWN0In0pLCJkYzpkZXNjcmlwdGlvbiI6bmV3IHIoe3RhZzoiZGM6ZGVzY3JpcHRpb24ifSksImRjOmlkZW50aWZpZXIiOm5ldyByKHt0YWc6ImRjOmlkZW50aWZpZXIifSksImRjOmxhbmd1YWdlIjpuZXcgcih7dGFnOiJkYzpsYW5ndWFnZSJ9KSwiY3A6a2V5d29yZHMiOm5ldyByKHt0YWc6ImNwOmtleXdvcmRzIn0pLCJjcDpjYXRlZ29yeSI6bmV3IHIoe3RhZzoiY3A6Y2F0ZWdvcnkifSksImNwOmxhc3RNb2RpZmllZEJ5IjpuZXcgcih7dGFnOiJjcDpsYXN0TW9kaWZpZWRCeSJ9KSwiY3A6bGFzdFByaW50ZWQiOm5ldyBvKHt0YWc6ImNwOmxhc3RQcmludGVkIixmb3JtYXQ6ZS5EYXRlRm9ybWF0fSksImNwOnJldmlzaW9uIjpuZXcgdCh7dGFnOiJjcDpyZXZpc2lvbiJ9KSwiY3A6dmVyc2lvbiI6bmV3IHIoe3RhZzoiY3A6dmVyc2lvbiJ9KSwiY3A6Y29udGVudFN0YXR1cyI6bmV3IHIoe3RhZzoiY3A6Y29udGVudFN0YXR1cyJ9KSwiY3A6Y29udGVudFR5cGUiOm5ldyByKHt0YWc6ImNwOmNvbnRlbnRUeXBlIn0pLCJkY3Rlcm1zOmNyZWF0ZWQiOm5ldyBvKHt0YWc6ImRjdGVybXM6Y3JlYXRlZCIsYXR0cnM6ZS5EYXRlQXR0cnMsZm9ybWF0OmUuRGF0ZUZvcm1hdH0pLCJkY3Rlcm1zOm1vZGlmaWVkIjpuZXcgbyh7dGFnOiJkY3Rlcm1zOm1vZGlmaWVkIixhdHRyczplLkRhdGVBdHRycyxmb3JtYXQ6ZS5EYXRlRm9ybWF0fSl9fXJlbmRlcihuLGkpe24ub3BlblhtbChtLlN0ZERvY0F0dHJpYnV0ZXMpLG4ub3Blbk5vZGUoImNwOmNvcmVQcm9wZXJ0aWVzIixlLkNPUkVfUFJPUEVSVFlfQVRUUklCVVRFUyksdGhpcy5tYXBbImRjOmNyZWF0b3IiXS5yZW5kZXIobixpLmNyZWF0b3IpLHRoaXMubWFwWyJkYzp0aXRsZSJdLnJlbmRlcihuLGkudGl0bGUpLHRoaXMubWFwWyJkYzpzdWJqZWN0Il0ucmVuZGVyKG4saS5zdWJqZWN0KSx0aGlzLm1hcFsiZGM6ZGVzY3JpcHRpb24iXS5yZW5kZXIobixpLmRlc2NyaXB0aW9uKSx0aGlzLm1hcFsiZGM6aWRlbnRpZmllciJdLnJlbmRlcihuLGkuaWRlbnRpZmllciksdGhpcy5tYXBbImRjOmxhbmd1YWdlIl0ucmVuZGVyKG4saS5sYW5ndWFnZSksdGhpcy5tYXBbImNwOmtleXdvcmRzIl0ucmVuZGVyKG4saS5rZXl3b3JkcyksdGhpcy5tYXBbImNwOmNhdGVnb3J5Il0ucmVuZGVyKG4saS5jYXRlZ29yeSksdGhpcy5tYXBbImNwOmxhc3RNb2RpZmllZEJ5Il0ucmVuZGVyKG4saS5sYXN0TW9kaWZpZWRCeSksdGhpcy5tYXBbImNwOmxhc3RQcmludGVkIl0ucmVuZGVyKG4saS5sYXN0UHJpbnRlZCksdGhpcy5tYXBbImNwOnJldmlzaW9uIl0ucmVuZGVyKG4saS5yZXZpc2lvbiksdGhpcy5tYXBbImNwOnZlcnNpb24iXS5yZW5kZXIobixpLnZlcnNpb24pLHRoaXMubWFwWyJjcDpjb250ZW50U3RhdHVzIl0ucmVuZGVyKG4saS5jb250ZW50U3RhdHVzKSx0aGlzLm1hcFsiY3A6Y29udGVudFR5cGUiXS5yZW5kZXIobixpLmNvbnRlbnRUeXBlKSx0aGlzLm1hcFsiZGN0ZXJtczpjcmVhdGVkIl0ucmVuZGVyKG4saS5jcmVhdGVkKSx0aGlzLm1hcFsiZGN0ZXJtczptb2RpZmllZCJdLnJlbmRlcihuLGkubW9kaWZpZWQpLG4uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG4pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7c3dpdGNoKG4ubmFtZSl7Y2FzZSJjcDpjb3JlUHJvcGVydGllcyI6Y2FzZSJjb3JlUHJvcGVydGllcyI6cmV0dXJuITA7ZGVmYXVsdDppZih0aGlzLnBhcnNlcj10aGlzLm1hcFtuLm5hbWVdLHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlT3BlbjogIitKU09OLnN0cmluZ2lmeShuKSl9fXBhcnNlVGV4dChuKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KG4pfXBhcnNlQ2xvc2Uobil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobil8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChuKXtjYXNlImNwOmNvcmVQcm9wZXJ0aWVzIjpjYXNlImNvcmVQcm9wZXJ0aWVzIjpyZXR1cm4gdGhpcy5tb2RlbD17Y3JlYXRvcjp0aGlzLm1hcFsiZGM6Y3JlYXRvciJdLm1vZGVsLHRpdGxlOnRoaXMubWFwWyJkYzp0aXRsZSJdLm1vZGVsLHN1YmplY3Q6dGhpcy5tYXBbImRjOnN1YmplY3QiXS5tb2RlbCxkZXNjcmlwdGlvbjp0aGlzLm1hcFsiZGM6ZGVzY3JpcHRpb24iXS5tb2RlbCxpZGVudGlmaWVyOnRoaXMubWFwWyJkYzppZGVudGlmaWVyIl0ubW9kZWwsbGFuZ3VhZ2U6dGhpcy5tYXBbImRjOmxhbmd1YWdlIl0ubW9kZWwsa2V5d29yZHM6dGhpcy5tYXBbImNwOmtleXdvcmRzIl0ubW9kZWwsY2F0ZWdvcnk6dGhpcy5tYXBbImNwOmNhdGVnb3J5Il0ubW9kZWwsbGFzdE1vZGlmaWVkQnk6dGhpcy5tYXBbImNwOmxhc3RNb2RpZmllZEJ5Il0ubW9kZWwsbGFzdFByaW50ZWQ6dGhpcy5tYXBbImNwOmxhc3RQcmludGVkIl0ubW9kZWwscmV2aXNpb246dGhpcy5tYXBbImNwOnJldmlzaW9uIl0ubW9kZWwsY29udGVudFN0YXR1czp0aGlzLm1hcFsiY3A6Y29udGVudFN0YXR1cyJdLm1vZGVsLGNvbnRlbnRUeXBlOnRoaXMubWFwWyJjcDpjb250ZW50VHlwZSJdLm1vZGVsLGNyZWF0ZWQ6dGhpcy5tYXBbImRjdGVybXM6Y3JlYXRlZCJdLm1vZGVsLG1vZGlmaWVkOnRoaXMubWFwWyJkY3Rlcm1zOm1vZGlmaWVkIl0ubW9kZWx9LCExO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlQ2xvc2U6ICIrbil9fX1lLkRhdGVGb3JtYXQ9ZnVuY3Rpb24obCl7cmV0dXJuIGwudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bLl1cZHszfS8sIiIpfSxlLkRhdGVBdHRycz17InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxlLkNPUkVfUFJPUEVSVFlfQVRUUklCVVRFUz17InhtbG5zOmNwIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6ZGN0ZXJtcyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLCJ4bWxuczpkY21pdHlwZSI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSJ9LEUuZXhwb3J0cz1lfSx7Ii4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi9iYXNlLXhmb3JtIjozMiwiLi4vc2ltcGxlL2RhdGUteGZvcm0iOjExNywiLi4vc2ltcGxlL2ludGVnZXIteGZvcm0iOjExOCwiLi4vc2ltcGxlL3N0cmluZy14Zm9ybSI6MTE5fV0sNTQ6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte3JlbmRlcihzLG8pe3MubGVhZk5vZGUoIlJlbGF0aW9uc2hpcCIsbyl9cGFyc2VPcGVuKHMpe3N3aXRjaChzLm5hbWUpe2Nhc2UiUmVsYXRpb25zaGlwIjpyZXR1cm4gdGhpcy5tb2RlbD1zLmF0dHJpYnV0ZXMsITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNTU6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxzPWEoIi4uL2Jhc2UteGZvcm0iKSxvPWEoIi4vcmVsYXRpb25zaGlwLXhmb3JtIik7Y2xhc3MgciBleHRlbmRzIHN7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtSZWxhdGlvbnNoaXA6bmV3IG99fXJlbmRlcihlLGwpe2w9bHx8dGhpcy5fdmFsdWVzLGUub3BlblhtbChtLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUoIlJlbGF0aW9uc2hpcHMiLHIuUkVMQVRJT05TSElQU19BVFRSSUJVVEVTKSxsLmZvckVhY2gobj0+e3RoaXMubWFwLlJlbGF0aW9uc2hpcC5yZW5kZXIoZSxuKX0pLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSJSZWxhdGlvbnNoaXBzIjpyZXR1cm4gdGhpcy5tb2RlbD1bXSwhMDtkZWZhdWx0OmlmKHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VPcGVuOiAiK0pTT04uc3RyaW5naWZ5KGUpKX19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMubW9kZWwucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSJSZWxhdGlvbnNoaXBzIjpyZXR1cm4hMTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZUNsb3NlOiAiK2UpfX19ci5SRUxBVElPTlNISVBTX0FUVFJJQlVURVM9e3htbG5zOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMifSxFLmV4cG9ydHM9cn0seyIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzIsIi4vcmVsYXRpb25zaGlwLXhmb3JtIjo1NH1dLDU2OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtwYXJzZU9wZW4ocyl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihzKSwhMDtzd2l0Y2gocy5uYW1lKXtjYXNlIHRoaXMudGFnOnRoaXMucmVzZXQoKSx0aGlzLm1vZGVsPXtyYW5nZTp7ZWRpdEFzOnMuYXR0cmlidXRlcy5lZGl0QXN8fCJvbmVDZWxsIn19O2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbcy5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKHMpfXJldHVybiEwfXBhcnNlVGV4dChzKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KHMpfXJlY29uY2lsZVBpY3R1cmUocyxvKXtpZihzJiZzLnJJZCl7Y29uc3Qgcj1vLnJlbHNbcy5ySWRdLlRhcmdldC5tYXRjaCgvLipcL21lZGlhXC8oLitbLl1bYS16QS1aXXszLDR9KS8pO2lmKHIpe2NvbnN0IHQ9clsxXSxlPW8ubWVkaWFJbmRleFt0XTtyZXR1cm4gby5tZWRpYVtlXX19fX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw1NzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpLHM9YSgiLi9ibGlwLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJhOmJsaXAiOm5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuInhkcjpibGlwRmlsbCJ9cmVuZGVyKG8scil7by5vcGVuTm9kZSh0aGlzLnRhZyksdGhpcy5tYXBbImE6YmxpcCJdLnJlbmRlcihvLHIpLG8ub3Blbk5vZGUoImE6c3RyZXRjaCIpLG8ubGVhZk5vZGUoImE6ZmlsbFJlY3QiKSxvLmNsb3NlTm9kZSgpLG8uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG8pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obyksITA7c3dpdGNoKG8ubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnBhcnNlcj10aGlzLm1hcFtvLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4obyl9cmV0dXJuITB9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2Uobyl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobyl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChvKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXRoaXMubWFwWyJhOmJsaXAiXS5tb2RlbCwhMTtkZWZhdWx0OnJldHVybiEwfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL2JsaXAteGZvcm0iOjU4fV0sNTg6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4iYTpibGlwIn1yZW5kZXIocyxvKXtzLmxlYWZOb2RlKHRoaXMudGFnLHsieG1sbnM6ciI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLCJyOmVtYmVkIjpvLnJJZCxjc3RhdGU6InByaW50In0pfXBhcnNlT3BlbihzKXtzd2l0Y2gocy5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtySWQ6cy5hdHRyaWJ1dGVzWyJyOmVtYmVkIl19LCEwO2RlZmF1bHQ6cmV0dXJuITB9fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKHMpe3N3aXRjaChzKXtjYXNlIHRoaXMudGFnOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw1OTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJ4ZHI6Y052UGljUHIifXJlbmRlcihzKXtzLm9wZW5Ob2RlKHRoaXMudGFnKSxzLmxlYWZOb2RlKCJhOnBpY0xvY2tzIix7bm9DaGFuZ2VBc3BlY3Q6IjEifSkscy5jbG9zZU5vZGUoKX1wYXJzZU9wZW4ocyl7c3dpdGNoKHMubmFtZSl7Y2FzZSB0aGlzLnRhZzpkZWZhdWx0OnJldHVybiEwfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShzKXtzd2l0Y2gocyl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNjA6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPWEoIi4vaGxpbmstY2xpY2steGZvcm0iKSxvPWEoIi4vZXh0LWxzdC14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsiYTpobGlua0NsaWNrIjpuZXcgcywiYTpleHRMc3QiOm5ldyBvfX1nZXQgdGFnKCl7cmV0dXJuInhkcjpjTnZQciJ9cmVuZGVyKHIsdCl7ci5vcGVuTm9kZSh0aGlzLnRhZyx7aWQ6dC5pbmRleCxuYW1lOiJQaWN0dXJlICIrdC5pbmRleH0pLHRoaXMubWFwWyJhOmhsaW5rQ2xpY2siXS5yZW5kZXIocix0KSx0aGlzLm1hcFsiYTpleHRMc3QiXS5yZW5kZXIocix0KSxyLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihyKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpLCEwO3N3aXRjaChyLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbci5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpfXJldHVybiEwfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKHIpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHIpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2gocil7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD10aGlzLm1hcFsiYTpobGlua0NsaWNrIl0ubW9kZWwsITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9leHQtbHN0LXhmb3JtIjo2MywiLi9obGluay1jbGljay14Zm9ybSI6NjV9XSw2MTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpLHM9YSgiLi4vc2ltcGxlL2ludGVnZXIteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKG8pe3N1cGVyKCksdGhpcy50YWc9by50YWcsdGhpcy5tYXA9eyJ4ZHI6Y29sIjpuZXcgcyh7dGFnOiJ4ZHI6Y29sIix6ZXJvOiEwfSksInhkcjpjb2xPZmYiOm5ldyBzKHt0YWc6Inhkcjpjb2xPZmYiLHplcm86ITB9KSwieGRyOnJvdyI6bmV3IHMoe3RhZzoieGRyOnJvdyIsemVybzohMH0pLCJ4ZHI6cm93T2ZmIjpuZXcgcyh7dGFnOiJ4ZHI6cm93T2ZmIix6ZXJvOiEwfSl9fXJlbmRlcihvLHIpe28ub3Blbk5vZGUodGhpcy50YWcpLHRoaXMubWFwWyJ4ZHI6Y29sIl0ucmVuZGVyKG8sci5uYXRpdmVDb2wpLHRoaXMubWFwWyJ4ZHI6Y29sT2ZmIl0ucmVuZGVyKG8sci5uYXRpdmVDb2xPZmYpLHRoaXMubWFwWyJ4ZHI6cm93Il0ucmVuZGVyKG8sci5uYXRpdmVSb3cpLHRoaXMubWFwWyJ4ZHI6cm93T2ZmIl0ucmVuZGVyKG8sci5uYXRpdmVSb3dPZmYpLG8uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG8pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obyksITA7c3dpdGNoKG8ubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnBhcnNlcj10aGlzLm1hcFtvLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4obyl9cmV0dXJuITB9cGFyc2VUZXh0KG8pe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQobyl9cGFyc2VDbG9zZShvKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShvKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKG8pe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e25hdGl2ZUNvbDp0aGlzLm1hcFsieGRyOmNvbCJdLm1vZGVsLG5hdGl2ZUNvbE9mZjp0aGlzLm1hcFsieGRyOmNvbE9mZiJdLm1vZGVsLG5hdGl2ZVJvdzp0aGlzLm1hcFsieGRyOnJvdyJdLm1vZGVsLG5hdGl2ZVJvd09mZjp0aGlzLm1hcFsieGRyOnJvd09mZiJdLm1vZGVsfSwhMTtkZWZhdWx0OnJldHVybiEwfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuLi9zaW1wbGUvaW50ZWdlci14Zm9ybSI6MTE4fV0sNjI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSIpLHM9YSgiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpLG89YSgiLi4vYmFzZS14Zm9ybSIpLHI9YSgiLi90d28tY2VsbC1hbmNob3IteGZvcm0iKSx0PWEoIi4vb25lLWNlbGwtYW5jaG9yLXhmb3JtIik7Y2xhc3MgZSBleHRlbmRzIG97Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieGRyOnR3b0NlbGxBbmNob3IiOm5ldyByLCJ4ZHI6b25lQ2VsbEFuY2hvciI6bmV3IHR9fXByZXBhcmUobil7bi5hbmNob3JzLmZvckVhY2goKGksZik9PntpLmFuY2hvclR5cGU9ZnVuY3Rpb24oYyl7cmV0dXJuKHR5cGVvZiBjLnJhbmdlPT0ic3RyaW5nIj9tLmRlY29kZShjLnJhbmdlKTpjLnJhbmdlKS5icj8ieGRyOnR3b0NlbGxBbmNob3IiOiJ4ZHI6b25lQ2VsbEFuY2hvciJ9KGkpLHRoaXMubWFwW2kuYW5jaG9yVHlwZV0ucHJlcGFyZShpLHtpbmRleDpmfSl9KX1nZXQgdGFnKCl7cmV0dXJuInhkcjp3c0RyIn1yZW5kZXIobixpKXtuLm9wZW5YbWwocy5TdGREb2NBdHRyaWJ1dGVzKSxuLm9wZW5Ob2RlKHRoaXMudGFnLGUuRFJBV0lOR19BVFRSSUJVVEVTKSxpLmFuY2hvcnMuZm9yRWFjaChmPT57dGhpcy5tYXBbZi5hbmNob3JUeXBlXS5yZW5kZXIobixmKX0pLG4uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG4pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7c3dpdGNoKG4ubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17YW5jaG9yczpbXX07YnJlYWs7ZGVmYXVsdDp0aGlzLnBhcnNlcj10aGlzLm1hcFtuLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4obil9cmV0dXJuITB9cGFyc2VUZXh0KG4pe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQobil9cGFyc2VDbG9zZShuKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShuKXx8KHRoaXMubW9kZWwuYW5jaG9ycy5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChuKXtjYXNlIHRoaXMudGFnOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fXJlY29uY2lsZShuLGkpe24uYW5jaG9ycy5mb3JFYWNoKGY9PntmLmJyP3RoaXMubWFwWyJ4ZHI6dHdvQ2VsbEFuY2hvciJdLnJlY29uY2lsZShmLGkpOnRoaXMubWFwWyJ4ZHI6b25lQ2VsbEFuY2hvciJdLnJlY29uY2lsZShmLGkpfSl9fWUuRFJBV0lOR19BVFRSSUJVVEVTPXsieG1sbnM6eGRyIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L3NwcmVhZHNoZWV0RHJhd2luZyIsInhtbG5zOmEiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiJ9LEUuZXhwb3J0cz1lfSx7Ii4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iOjI4LCIuLi9iYXNlLXhmb3JtIjozMiwiLi9vbmUtY2VsbC1hbmNob3IteGZvcm0iOjY3LCIuL3R3by1jZWxsLWFuY2hvci14Zm9ybSI6NzB9XSw2MzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJhOmV4dExzdCJ9cmVuZGVyKHMpe3Mub3Blbk5vZGUodGhpcy50YWcpLHMub3Blbk5vZGUoImE6ZXh0Iix7dXJpOiJ7RkYyQjVFRjQtRkZGMi00MEI0LUJFNDktRjIzOEUyN0ZDMjM2fSJ9KSxzLmxlYWZOb2RlKCJhMTY6Y3JlYXRpb25JZCIseyJ4bWxuczphMTYiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9kcmF3aW5nLzIwMTQvbWFpbiIsaWQ6InswMDAwMDAwMC0wMDA4LTAwMDAtMDAwMC0wMDAwMDIwMDAwMDB9In0pLHMuY2xvc2VOb2RlKCkscy5jbG9zZU5vZGUoKX1wYXJzZU9wZW4ocyl7c3dpdGNoKHMubmFtZSl7Y2FzZSB0aGlzLnRhZzpkZWZhdWx0OnJldHVybiEwfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShzKXtzd2l0Y2gocyl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNjQ6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKHMpe3N1cGVyKCksdGhpcy50YWc9cy50YWcsdGhpcy5tYXA9e319cmVuZGVyKHMsbyl7cy5vcGVuTm9kZSh0aGlzLnRhZyk7Y29uc3Qgcj1NYXRoLmZsb29yKDk1MjUqby53aWR0aCksdD1NYXRoLmZsb29yKDk1MjUqby5oZWlnaHQpO3MuYWRkQXR0cmlidXRlKCJjeCIscikscy5hZGRBdHRyaWJ1dGUoImN5Iix0KSxzLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihzKXtyZXR1cm4gcy5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXt3aWR0aDpwYXJzZUludChzLmF0dHJpYnV0ZXMuY3h8fCIwIiwxMCkvOTUyNSxoZWlnaHQ6cGFyc2VJbnQocy5hdHRyaWJ1dGVzLmN5fHwiMCIsMTApLzk1MjV9LCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw2NTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJhOmhsaW5rQ2xpY2sifXJlbmRlcihzLG8pe28uaHlwZXJsaW5rcyYmby5oeXBlcmxpbmtzLnJJZCYmcy5sZWFmTm9kZSh0aGlzLnRhZyx7InhtbG5zOnIiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiwicjppZCI6by5oeXBlcmxpbmtzLnJJZCx0b29sdGlwOm8uaHlwZXJsaW5rcy50b29sdGlwfSl9cGFyc2VPcGVuKHMpe3N3aXRjaChzLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e2h5cGVybGlua3M6e3JJZDpzLmF0dHJpYnV0ZXNbInI6aWQiXSx0b29sdGlwOnMuYXR0cmlidXRlcy50b29sdGlwfX0sITA7ZGVmYXVsdDpyZXR1cm4hMH19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sNjY6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPWEoIi4vYy1udi1wci14Zm9ybSIpLG89YSgiLi9jLW52LXBpYy1wci14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieGRyOmNOdlByIjpuZXcgcywieGRyOmNOdlBpY1ByIjpuZXcgb319Z2V0IHRhZygpe3JldHVybiJ4ZHI6bnZQaWNQciJ9cmVuZGVyKHIsdCl7ci5vcGVuTm9kZSh0aGlzLnRhZyksdGhpcy5tYXBbInhkcjpjTnZQciJdLnJlbmRlcihyLHQpLHRoaXMubWFwWyJ4ZHI6Y052UGljUHIiXS5yZW5kZXIocix0KSxyLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihyKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpLCEwO3N3aXRjaChyLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbci5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpfXJldHVybiEwfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKHIpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHIpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2gocil7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD10aGlzLm1hcFsieGRyOmNOdlByIl0ubW9kZWwsITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9jLW52LXBpYy1wci14Zm9ybSI6NTksIi4vYy1udi1wci14Zm9ybSI6NjB9XSw2NzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi9iYXNlLWNlbGwtYW5jaG9yLXhmb3JtIikscz1hKCIuLi9zdGF0aWMteGZvcm0iKSxvPWEoIi4vY2VsbC1wb3NpdGlvbi14Zm9ybSIpLHI9YSgiLi9leHQteGZvcm0iKSx0PWEoIi4vcGljLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4ZHI6ZnJvbSI6bmV3IG8oe3RhZzoieGRyOmZyb20ifSksInhkcjpleHQiOm5ldyByKHt0YWc6InhkcjpleHQifSksInhkcjpwaWMiOm5ldyB0LCJ4ZHI6Y2xpZW50RGF0YSI6bmV3IHMoe3RhZzoieGRyOmNsaWVudERhdGEifSl9fWdldCB0YWcoKXtyZXR1cm4ieGRyOm9uZUNlbGxBbmNob3IifXByZXBhcmUoZSxsKXt0aGlzLm1hcFsieGRyOnBpYyJdLnByZXBhcmUoZS5waWN0dXJlLGwpfXJlbmRlcihlLGwpe2Uub3Blbk5vZGUodGhpcy50YWcse2VkaXRBczpsLnJhbmdlLmVkaXRBc3x8Im9uZUNlbGwifSksdGhpcy5tYXBbInhkcjpmcm9tIl0ucmVuZGVyKGUsbC5yYW5nZS50bCksdGhpcy5tYXBbInhkcjpleHQiXS5yZW5kZXIoZSxsLnJhbmdlLmV4dCksdGhpcy5tYXBbInhkcjpwaWMiXS5yZW5kZXIoZSxsLnBpY3R1cmUpLHRoaXMubWFwWyJ4ZHI6Y2xpZW50RGF0YSJdLnJlbmRlcihlLHt9KSxlLmNsb3NlTm9kZSgpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsLnJhbmdlLnRsPXRoaXMubWFwWyJ4ZHI6ZnJvbSJdLm1vZGVsLHRoaXMubW9kZWwucmFuZ2UuZXh0PXRoaXMubWFwWyJ4ZHI6ZXh0Il0ubW9kZWwsdGhpcy5tb2RlbC5waWN0dXJlPXRoaXMubWFwWyJ4ZHI6cGljIl0ubW9kZWwsITE7ZGVmYXVsdDpyZXR1cm4hMH19cmVjb25jaWxlKGUsbCl7ZS5tZWRpdW09dGhpcy5yZWNvbmNpbGVQaWN0dXJlKGUucGljdHVyZSxsKX19fSx7Ii4uL3N0YXRpYy14Zm9ybSI6MTIwLCIuL2Jhc2UtY2VsbC1hbmNob3IteGZvcm0iOjU2LCIuL2NlbGwtcG9zaXRpb24teGZvcm0iOjYxLCIuL2V4dC14Zm9ybSI6NjQsIi4vcGljLXhmb3JtIjo2OH1dLDY4OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIikscz1hKCIuLi9zdGF0aWMteGZvcm0iKSxvPWEoIi4vYmxpcC1maWxsLXhmb3JtIikscj1hKCIuL252LXBpYy1wci14Zm9ybSIpLHQ9YSgiLi9zcC1wciIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieGRyOm52UGljUHIiOm5ldyByLCJ4ZHI6YmxpcEZpbGwiOm5ldyBvLCJ4ZHI6c3BQciI6bmV3IHModCl9fWdldCB0YWcoKXtyZXR1cm4ieGRyOnBpYyJ9cHJlcGFyZShlLGwpe2UuaW5kZXg9bC5pbmRleCsxfXJlbmRlcihlLGwpe2Uub3Blbk5vZGUodGhpcy50YWcpLHRoaXMubWFwWyJ4ZHI6bnZQaWNQciJdLnJlbmRlcihlLGwpLHRoaXMubWFwWyJ4ZHI6YmxpcEZpbGwiXS5yZW5kZXIoZSxsKSx0aGlzLm1hcFsieGRyOnNwUHIiXS5yZW5kZXIoZSxsKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpfXJldHVybiEwfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5tZXJnZU1vZGVsKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHsiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL3N0YXRpYy14Zm9ybSI6MTIwLCIuL2JsaXAtZmlsbC14Zm9ybSI6NTcsIi4vbnYtcGljLXByLXhmb3JtIjo2NiwiLi9zcC1wciI6Njl9XSw2OTpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz17dGFnOiJ4ZHI6c3BQciIsYzpbe3RhZzoiYTp4ZnJtIixjOlt7dGFnOiJhOm9mZiIsJDp7eDoiMCIseToiMCJ9fSx7dGFnOiJhOmV4dCIsJDp7Y3g6IjAiLGN5OiIwIn19XX0se3RhZzoiYTpwcnN0R2VvbSIsJDp7cHJzdDoicmVjdCJ9LGM6W3t0YWc6ImE6YXZMc3QifV19XX19LHt9XSw3MDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi9iYXNlLWNlbGwtYW5jaG9yLXhmb3JtIikscz1hKCIuLi9zdGF0aWMteGZvcm0iKSxvPWEoIi4vY2VsbC1wb3NpdGlvbi14Zm9ybSIpLHI9YSgiLi9waWMteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Inhkcjpmcm9tIjpuZXcgbyh7dGFnOiJ4ZHI6ZnJvbSJ9KSwieGRyOnRvIjpuZXcgbyh7dGFnOiJ4ZHI6dG8ifSksInhkcjpwaWMiOm5ldyByLCJ4ZHI6Y2xpZW50RGF0YSI6bmV3IHMoe3RhZzoieGRyOmNsaWVudERhdGEifSl9fWdldCB0YWcoKXtyZXR1cm4ieGRyOnR3b0NlbGxBbmNob3IifXByZXBhcmUodCxlKXt0aGlzLm1hcFsieGRyOnBpYyJdLnByZXBhcmUodC5waWN0dXJlLGUpfXJlbmRlcih0LGUpe3Qub3Blbk5vZGUodGhpcy50YWcse2VkaXRBczplLnJhbmdlLmVkaXRBc3x8Im9uZUNlbGwifSksdGhpcy5tYXBbInhkcjpmcm9tIl0ucmVuZGVyKHQsZS5yYW5nZS50bCksdGhpcy5tYXBbInhkcjp0byJdLnJlbmRlcih0LGUucmFuZ2UuYnIpLHRoaXMubWFwWyJ4ZHI6cGljIl0ucmVuZGVyKHQsZS5waWN0dXJlKSx0aGlzLm1hcFsieGRyOmNsaWVudERhdGEiXS5yZW5kZXIodCx7fSksdC5jbG9zZU5vZGUoKX1wYXJzZUNsb3NlKHQpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHQpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2godCl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbC5yYW5nZS50bD10aGlzLm1hcFsieGRyOmZyb20iXS5tb2RlbCx0aGlzLm1vZGVsLnJhbmdlLmJyPXRoaXMubWFwWyJ4ZHI6dG8iXS5tb2RlbCx0aGlzLm1vZGVsLnBpY3R1cmU9dGhpcy5tYXBbInhkcjpwaWMiXS5tb2RlbCwhMTtkZWZhdWx0OnJldHVybiEwfX1yZWNvbmNpbGUodCxlKXt0Lm1lZGl1bT10aGlzLnJlY29uY2lsZVBpY3R1cmUodC5waWN0dXJlLGUpfX19LHsiLi4vc3RhdGljLXhmb3JtIjoxMjAsIi4vYmFzZS1jZWxsLWFuY2hvci14Zm9ybSI6NTYsIi4vY2VsbC1wb3NpdGlvbi14Zm9ybSI6NjEsIi4vcGljLXhmb3JtIjo2OH1dLDcxOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKHMpe3N1cGVyKCksdGhpcy50YWc9cy50YWcsdGhpcy5hbHdheXM9ISFzLmFsd2F5cyx0aGlzLmNvdW50PXMuY291bnQsdGhpcy5lbXB0eT1zLmVtcHR5LHRoaXMuJGNvdW50PXMuJGNvdW50fHwiY291bnQiLHRoaXMuJD1zLiQsdGhpcy5jaGlsZFhmb3JtPXMuY2hpbGRYZm9ybSx0aGlzLm1heEl0ZW1zPXMubWF4SXRlbXN9cHJlcGFyZShzLG8pe2NvbnN0e2NoaWxkWGZvcm06cn09dGhpcztzJiZzLmZvckVhY2goKHQsZSk9PntvLmluZGV4PWUsci5wcmVwYXJlKHQsbyl9KX1yZW5kZXIocyxvKXtpZih0aGlzLmFsd2F5c3x8byYmby5sZW5ndGgpe3Mub3Blbk5vZGUodGhpcy50YWcsdGhpcy4kKSx0aGlzLmNvdW50JiZzLmFkZEF0dHJpYnV0ZSh0aGlzLiRjb3VudCxvJiZvLmxlbmd0aHx8MCk7Y29uc3R7Y2hpbGRYZm9ybTpyfT10aGlzOyhvfHxbXSkuZm9yRWFjaCgodCxlKT0+e3IucmVuZGVyKHMsdCxlKX0pLHMuY2xvc2VOb2RlKCl9ZWxzZSB0aGlzLmVtcHR5JiZzLmxlYWZOb2RlKHRoaXMudGFnKX1wYXJzZU9wZW4ocyl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihzKSwhMDtzd2l0Y2gocy5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPVtdLCEwO2RlZmF1bHQ6cmV0dXJuISF0aGlzLmNoaWxkWGZvcm0ucGFyc2VPcGVuKHMpJiYodGhpcy5wYXJzZXI9dGhpcy5jaGlsZFhmb3JtLCEwKX19cGFyc2VUZXh0KHMpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQocyl9cGFyc2VDbG9zZShzKXtpZih0aGlzLnBhcnNlcil7aWYoIXRoaXMucGFyc2VyLnBhcnNlQ2xvc2UocykmJih0aGlzLm1vZGVsLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCx0aGlzLm1heEl0ZW1zJiZ0aGlzLm1vZGVsLmxlbmd0aD50aGlzLm1heEl0ZW1zKSl0aHJvdyBuZXcgRXJyb3IoYE1heCAke3RoaXMuY2hpbGRYZm9ybS50YWd9IGNvdW50ICgke3RoaXMubWF4SXRlbXN9KSBleGNlZWRlZGApO3JldHVybiEwfXJldHVybiExfXJlY29uY2lsZShzLG8pe2lmKHMpe2NvbnN0e2NoaWxkWGZvcm06cn09dGhpcztzLmZvckVhY2godD0+e3IucmVjb25jaWxlKHQsbyl9KX19fX0seyIuL2Jhc2UteGZvcm0iOjMyfV0sNzI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIHN7Z2V0IHRhZygpe3JldHVybiJhdXRvRmlsdGVyIn1yZW5kZXIobyxyKXtpZihyKWlmKHR5cGVvZiByPT0ic3RyaW5nIilvLmxlYWZOb2RlKCJhdXRvRmlsdGVyIix7cmVmOnJ9KTtlbHNle2NvbnN0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIHR5cGVvZiBuPT0ic3RyaW5nIj9uOm0uZ2V0QWRkcmVzcyhuLnJvdyxuLmNvbHVtbikuYWRkcmVzc30sZT10KHIuZnJvbSksbD10KHIudG8pO2UmJmwmJm8ubGVhZk5vZGUoImF1dG9GaWx0ZXIiLHtyZWY6YCR7ZX06JHtsfWB9KX19cGFyc2VPcGVuKG8pe28ubmFtZT09PSJhdXRvRmlsdGVyIiYmKHRoaXMubW9kZWw9by5hdHRyaWJ1dGVzLnJlZil9fX0seyIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi9iYXNlLXhmb3JtIjozMn1dLDczOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi91dGlscy91dGlscyIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpLG89YSgiLi4vLi4vLi4vZG9jL3JhbmdlIikscj1hKCIuLi8uLi8uLi9kb2MvZW51bXMiKSx0PWEoIi4uL3N0cmluZ3MvcmljaC10ZXh0LXhmb3JtIik7ZnVuY3Rpb24gZShsKXtpZihsPT1udWxsKXJldHVybiByLlZhbHVlVHlwZS5OdWxsO2lmKGwgaW5zdGFuY2VvZiBTdHJpbmd8fHR5cGVvZiBsPT0ic3RyaW5nIilyZXR1cm4gci5WYWx1ZVR5cGUuU3RyaW5nO2lmKHR5cGVvZiBsPT0ibnVtYmVyIilyZXR1cm4gci5WYWx1ZVR5cGUuTnVtYmVyO2lmKHR5cGVvZiBsPT0iYm9vbGVhbiIpcmV0dXJuIHIuVmFsdWVUeXBlLkJvb2xlYW47aWYobCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIHIuVmFsdWVUeXBlLkRhdGU7aWYobC50ZXh0JiZsLmh5cGVybGluaylyZXR1cm4gci5WYWx1ZVR5cGUuSHlwZXJsaW5rO2lmKGwuZm9ybXVsYSlyZXR1cm4gci5WYWx1ZVR5cGUuRm9ybXVsYTtpZihsLmVycm9yKXJldHVybiByLlZhbHVlVHlwZS5FcnJvcjt0aHJvdyBuZXcgRXJyb3IoIkkgY291bGQgbm90IHVuZGVyc3RhbmQgdHlwZSBvZiB2YWx1ZSIpfUUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIHN7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmljaFRleHRYRm9ybT1uZXcgdH1nZXQgdGFnKCl7cmV0dXJuImMifXByZXBhcmUobCxuKXtjb25zdCBpPW4uc3R5bGVzLmFkZFN0eWxlTW9kZWwobC5zdHlsZXx8e30sZnVuY3Rpb24oZil7c3dpdGNoKGYudHlwZSl7Y2FzZSByLlZhbHVlVHlwZS5Gb3JtdWxhOnJldHVybiBlKGYucmVzdWx0KTtkZWZhdWx0OnJldHVybiBmLnR5cGV9fShsKSk7c3dpdGNoKGkmJihsLnN0eWxlSWQ9aSksbC5jb21tZW50JiZuLmNvbW1lbnRzLnB1c2goey4uLmwuY29tbWVudCxyZWY6bC5hZGRyZXNzfSksbC50eXBlKXtjYXNlIHIuVmFsdWVUeXBlLlN0cmluZzpjYXNlIHIuVmFsdWVUeXBlLlJpY2hUZXh0Om4uc2hhcmVkU3RyaW5ncyYmKGwuc3NJZD1uLnNoYXJlZFN0cmluZ3MuYWRkKGwudmFsdWUpKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkRhdGU6bi5kYXRlMTkwNCYmKGwuZGF0ZTE5MDQ9ITApO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuSHlwZXJsaW5rOm4uc2hhcmVkU3RyaW5ncyYmbC50ZXh0IT09dm9pZCAwJiZsLnRleHQhPT1udWxsJiYobC5zc0lkPW4uc2hhcmVkU3RyaW5ncy5hZGQobC50ZXh0KSksbi5oeXBlcmxpbmtzLnB1c2goe2FkZHJlc3M6bC5hZGRyZXNzLHRhcmdldDpsLmh5cGVybGluayx0b29sdGlwOmwudG9vbHRpcH0pO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuTWVyZ2U6bi5tZXJnZXMuYWRkKGwpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuRm9ybXVsYTppZihuLmRhdGUxOTA0JiYobC5kYXRlMTkwND0hMCksbC5zaGFyZVR5cGU9PT0ic2hhcmVkIiYmKGwuc2k9bi5zaUZvcm11bGFlKyspLGwuZm9ybXVsYSluLmZvcm11bGFlW2wuYWRkcmVzc109bDtlbHNlIGlmKGwuc2hhcmVkRm9ybXVsYSl7Y29uc3QgZj1uLmZvcm11bGFlW2wuc2hhcmVkRm9ybXVsYV07aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJTaGFyZWQgRm9ybXVsYSBtYXN0ZXIgbXVzdCBleGlzdCBhYm92ZSBhbmQgb3IgbGVmdCBvZiBjbG9uZSBmb3IgY2VsbCAiK2wuYWRkcmVzcyk7Zi5zaT09PXZvaWQgMD8oZi5zaGFyZVR5cGU9InNoYXJlZCIsZi5zaT1uLnNpRm9ybXVsYWUrKyxmLnJhbmdlPW5ldyBvKGYuYWRkcmVzcyxsLmFkZHJlc3MpKTpmLnJhbmdlJiZmLnJhbmdlLmV4cGFuZFRvQWRkcmVzcyhsLmFkZHJlc3MpLGwuc2k9Zi5zaX19fXJlbmRlckZvcm11bGEobCxuKXtsZXQgaT1udWxsO3N3aXRjaChuLnNoYXJlVHlwZSl7Y2FzZSJzaGFyZWQiOmk9e3Q6InNoYXJlZCIscmVmOm4ucmVmfHxuLnJhbmdlLnJhbmdlLHNpOm4uc2l9O2JyZWFrO2Nhc2UiYXJyYXkiOmk9e3Q6ImFycmF5IixyZWY6bi5yZWZ9O2JyZWFrO2RlZmF1bHQ6bi5zaSE9PXZvaWQgMCYmKGk9e3Q6InNoYXJlZCIsc2k6bi5zaX0pfXN3aXRjaChlKG4ucmVzdWx0KSl7Y2FzZSByLlZhbHVlVHlwZS5OdWxsOmwubGVhZk5vZGUoImYiLGksbi5mb3JtdWxhKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLlN0cmluZzpsLmFkZEF0dHJpYnV0ZSgidCIsInN0ciIpLGwubGVhZk5vZGUoImYiLGksbi5mb3JtdWxhKSxsLmxlYWZOb2RlKCJ2IixudWxsLG4ucmVzdWx0KTticmVhaztjYXNlIHIuVmFsdWVUeXBlLk51bWJlcjpsLmxlYWZOb2RlKCJmIixpLG4uZm9ybXVsYSksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnJlc3VsdCk7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5Cb29sZWFuOmwuYWRkQXR0cmlidXRlKCJ0IiwiYiIpLGwubGVhZk5vZGUoImYiLGksbi5mb3JtdWxhKSxsLmxlYWZOb2RlKCJ2IixudWxsLG4ucmVzdWx0PzE6MCk7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5FcnJvcjpsLmFkZEF0dHJpYnV0ZSgidCIsImUiKSxsLmxlYWZOb2RlKCJmIixpLG4uZm9ybXVsYSksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnJlc3VsdC5lcnJvcik7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5EYXRlOmwubGVhZk5vZGUoImYiLGksbi5mb3JtdWxhKSxsLmxlYWZOb2RlKCJ2IixudWxsLG0uZGF0ZVRvRXhjZWwobi5yZXN1bHQsbi5kYXRlMTkwNCkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJIGNvdWxkIG5vdCB1bmRlcnN0YW5kIHR5cGUgb2YgdmFsdWUiKX19cmVuZGVyKGwsbil7aWYobi50eXBlIT09ci5WYWx1ZVR5cGUuTnVsbHx8bi5zdHlsZUlkKXtzd2l0Y2gobC5vcGVuTm9kZSgiYyIpLGwuYWRkQXR0cmlidXRlKCJyIixuLmFkZHJlc3MpLG4uc3R5bGVJZCYmbC5hZGRBdHRyaWJ1dGUoInMiLG4uc3R5bGVJZCksbi50eXBlKXtjYXNlIHIuVmFsdWVUeXBlLk51bGw6YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5OdW1iZXI6bC5sZWFmTm9kZSgidiIsbnVsbCxuLnZhbHVlKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkJvb2xlYW46bC5hZGRBdHRyaWJ1dGUoInQiLCJiIiksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnZhbHVlPyIxIjoiMCIpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuRXJyb3I6bC5hZGRBdHRyaWJ1dGUoInQiLCJlIiksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnZhbHVlLmVycm9yKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLlN0cmluZzpjYXNlIHIuVmFsdWVUeXBlLlJpY2hUZXh0Om4uc3NJZCE9PXZvaWQgMD8obC5hZGRBdHRyaWJ1dGUoInQiLCJzIiksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnNzSWQpKTpuLnZhbHVlJiZuLnZhbHVlLnJpY2hUZXh0PyhsLmFkZEF0dHJpYnV0ZSgidCIsImlubGluZVN0ciIpLGwub3Blbk5vZGUoImlzIiksbi52YWx1ZS5yaWNoVGV4dC5mb3JFYWNoKGk9Pnt0aGlzLnJpY2hUZXh0WEZvcm0ucmVuZGVyKGwsaSl9KSxsLmNsb3NlTm9kZSgiaXMiKSk6KGwuYWRkQXR0cmlidXRlKCJ0Iiwic3RyIiksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnZhbHVlKSk7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5EYXRlOmwubGVhZk5vZGUoInYiLG51bGwsbS5kYXRlVG9FeGNlbChuLnZhbHVlLG4uZGF0ZTE5MDQpKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkh5cGVybGluazpuLnNzSWQhPT12b2lkIDA/KGwuYWRkQXR0cmlidXRlKCJ0IiwicyIpLGwubGVhZk5vZGUoInYiLG51bGwsbi5zc0lkKSk6KGwuYWRkQXR0cmlidXRlKCJ0Iiwic3RyIiksbC5sZWFmTm9kZSgidiIsbnVsbCxuLnRleHQpKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkZvcm11bGE6dGhpcy5yZW5kZXJGb3JtdWxhKGwsbik7YnJlYWs7Y2FzZSByLlZhbHVlVHlwZS5NZXJnZTp9bC5jbG9zZU5vZGUoKX19cGFyc2VPcGVuKGwpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obCksITA7c3dpdGNoKGwubmFtZSl7Y2FzZSJjIjpyZXR1cm4gdGhpcy5tb2RlbD17YWRkcmVzczpsLmF0dHJpYnV0ZXMucn0sdGhpcy50PWwuYXR0cmlidXRlcy50LGwuYXR0cmlidXRlcy5zJiYodGhpcy5tb2RlbC5zdHlsZUlkPXBhcnNlSW50KGwuYXR0cmlidXRlcy5zLDEwKSksITA7Y2FzZSJmIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT0iZiIsdGhpcy5tb2RlbC5zaT1sLmF0dHJpYnV0ZXMuc2ksdGhpcy5tb2RlbC5zaGFyZVR5cGU9bC5hdHRyaWJ1dGVzLnQsdGhpcy5tb2RlbC5yZWY9bC5hdHRyaWJ1dGVzLnJlZiwhMDtjYXNlInYiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPSJ2IiwhMDtjYXNlInQiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPSJ0IiwhMDtjYXNlInIiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLnJpY2hUZXh0WEZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGwpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChsKXtpZih0aGlzLnBhcnNlcil0aGlzLnBhcnNlci5wYXJzZVRleHQobCk7ZWxzZSBzd2l0Y2godGhpcy5jdXJyZW50Tm9kZSl7Y2FzZSJmIjp0aGlzLm1vZGVsLmZvcm11bGE9dGhpcy5tb2RlbC5mb3JtdWxhP3RoaXMubW9kZWwuZm9ybXVsYStsOmw7YnJlYWs7Y2FzZSJ2IjpjYXNlInQiOnRoaXMubW9kZWwudmFsdWUmJnRoaXMubW9kZWwudmFsdWUucmljaFRleHQ/dGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dC50ZXh0PXRoaXMubW9kZWwudmFsdWUucmljaFRleHQudGV4dD90aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0LnRleHQrbDpsOnRoaXMubW9kZWwudmFsdWU9dGhpcy5tb2RlbC52YWx1ZT90aGlzLm1vZGVsLnZhbHVlK2w6bH19cGFyc2VDbG9zZShsKXtzd2l0Y2gobCl7Y2FzZSJjIjp7Y29uc3R7bW9kZWw6bn09dGhpcztpZihuLmZvcm11bGF8fG4uc2hhcmVUeXBlKW4udHlwZT1yLlZhbHVlVHlwZS5Gb3JtdWxhLG4udmFsdWUmJih0aGlzLnQ9PT0ic3RyIj9uLnJlc3VsdD1tLnhtbERlY29kZShuLnZhbHVlKTp0aGlzLnQ9PT0iYiI/bi5yZXN1bHQ9cGFyc2VJbnQobi52YWx1ZSwxMCkhPT0wOnRoaXMudD09PSJlIj9uLnJlc3VsdD17ZXJyb3I6bi52YWx1ZX06bi5yZXN1bHQ9cGFyc2VGbG9hdChuLnZhbHVlKSxuLnZhbHVlPXZvaWQgMCk7ZWxzZSBpZihuLnZhbHVlIT09dm9pZCAwKXN3aXRjaCh0aGlzLnQpe2Nhc2UicyI6bi50eXBlPXIuVmFsdWVUeXBlLlN0cmluZyxuLnZhbHVlPXBhcnNlSW50KG4udmFsdWUsMTApO2JyZWFrO2Nhc2Uic3RyIjpuLnR5cGU9ci5WYWx1ZVR5cGUuU3RyaW5nLG4udmFsdWU9bS54bWxEZWNvZGUobi52YWx1ZSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOm4udHlwZT1yLlZhbHVlVHlwZS5TdHJpbmc7YnJlYWs7Y2FzZSJiIjpuLnR5cGU9ci5WYWx1ZVR5cGUuQm9vbGVhbixuLnZhbHVlPXBhcnNlSW50KG4udmFsdWUsMTApIT09MDticmVhaztjYXNlImUiOm4udHlwZT1yLlZhbHVlVHlwZS5FcnJvcixuLnZhbHVlPXtlcnJvcjpuLnZhbHVlfTticmVhaztkZWZhdWx0Om4udHlwZT1yLlZhbHVlVHlwZS5OdW1iZXIsbi52YWx1ZT1wYXJzZUZsb2F0KG4udmFsdWUpfWVsc2Ugbi5zdHlsZUlkP24udHlwZT1yLlZhbHVlVHlwZS5OdWxsOm4udHlwZT1yLlZhbHVlVHlwZS5NZXJnZTtyZXR1cm4hMX1jYXNlImYiOmNhc2UidiI6Y2FzZSJpcyI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9dm9pZCAwLCEwO2Nhc2UidCI6cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGwpLCEwKToodGhpcy5jdXJyZW50Tm9kZT12b2lkIDAsITApO2Nhc2UiciI6cmV0dXJuIHRoaXMubW9kZWwudmFsdWU9dGhpcy5tb2RlbC52YWx1ZXx8e30sdGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dD10aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0fHxbXSx0aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0LnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCx0aGlzLmN1cnJlbnROb2RlPXZvaWQgMCwhMDtkZWZhdWx0OnJldHVybiEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGwpLCEwKX19cmVjb25jaWxlKGwsbil7Y29uc3QgaT1sLnN0eWxlSWQmJm4uc3R5bGVzJiZuLnN0eWxlcy5nZXRTdHlsZU1vZGVsKGwuc3R5bGVJZCk7c3dpdGNoKGkmJihsLnN0eWxlPWkpLGwuc3R5bGVJZCE9PXZvaWQgMCYmKGwuc3R5bGVJZD12b2lkIDApLGwudHlwZSl7Y2FzZSByLlZhbHVlVHlwZS5TdHJpbmc6dHlwZW9mIGwudmFsdWU9PSJudW1iZXIiJiZuLnNoYXJlZFN0cmluZ3MmJihsLnZhbHVlPW4uc2hhcmVkU3RyaW5ncy5nZXRTdHJpbmcobC52YWx1ZSkpLGwudmFsdWUucmljaFRleHQmJihsLnR5cGU9ci5WYWx1ZVR5cGUuUmljaFRleHQpO2JyZWFrO2Nhc2Ugci5WYWx1ZVR5cGUuTnVtYmVyOmkmJm0uaXNEYXRlRm10KGkubnVtRm10KSYmKGwudHlwZT1yLlZhbHVlVHlwZS5EYXRlLGwudmFsdWU9bS5leGNlbFRvRGF0ZShsLnZhbHVlLG4uZGF0ZTE5MDQpKTticmVhaztjYXNlIHIuVmFsdWVUeXBlLkZvcm11bGE6bC5yZXN1bHQhPT12b2lkIDAmJmkmJm0uaXNEYXRlRm10KGkubnVtRm10KSYmKGwucmVzdWx0PW0uZXhjZWxUb0RhdGUobC5yZXN1bHQsbi5kYXRlMTkwNCkpLGwuc2hhcmVUeXBlPT09InNoYXJlZCImJihsLnJlZj9uLmZvcm11bGFlW2wuc2ldPWwuYWRkcmVzczoobC5zaGFyZWRGb3JtdWxhPW4uZm9ybXVsYWVbbC5zaV0sZGVsZXRlIGwuc2hhcmVUeXBlKSxkZWxldGUgbC5zaSl9Y29uc3QgZj1uLmh5cGVybGlua01hcFtsLmFkZHJlc3NdO2YmJihsLnR5cGU9PT1yLlZhbHVlVHlwZS5Gb3JtdWxhPyhsLnRleHQ9bC5yZXN1bHQsbC5yZXN1bHQ9dm9pZCAwKToobC50ZXh0PWwudmFsdWUsbC52YWx1ZT12b2lkIDApLGwudHlwZT1yLlZhbHVlVHlwZS5IeXBlcmxpbmssbC5oeXBlcmxpbms9Zik7Y29uc3QgYz1uLmNvbW1lbnRzTWFwJiZuLmNvbW1lbnRzTWFwW2wuYWRkcmVzc107YyYmKGwuY29tbWVudD1jKX19fSx7Ii4uLy4uLy4uL2RvYy9lbnVtcyI6NywiLi4vLi4vLi4vZG9jL3JhbmdlIjoxMCwiLi4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMiwiLi4vc3RyaW5ncy9yaWNoLXRleHQteGZvcm0iOjEyMn1dLDc0OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtnZXQgdGFnKCl7cmV0dXJuIngxNDpjZkljb24ifXJlbmRlcihzLG8pe3MubGVhZk5vZGUodGhpcy50YWcse2ljb25TZXQ6by5pY29uU2V0LGljb25JZDpvLmljb25JZH0pfXBhcnNlT3BlbihzKXtsZXR7YXR0cmlidXRlczpvfT1zO3RoaXMubW9kZWw9e2ljb25TZXQ6by5pY29uU2V0LGljb25JZDptLnRvSW50VmFsdWUoby5pY29uSWQpfX1wYXJzZUNsb3NlKHMpe3JldHVybiBzIT09dGhpcy50YWd9fX0seyIuLi8uLi9iYXNlLXhmb3JtIjozMn1dLDc1OltmdW5jdGlvbihhLEUsayl7Y29uc3R7djQ6bX09YSgidXVpZCIpLHM9YSgiLi4vLi4vYmFzZS14Zm9ybSIpLG89YSgiLi4vLi4vY29tcG9zaXRlLXhmb3JtIikscj1hKCIuL2RhdGFiYXItZXh0LXhmb3JtIiksdD1hKCIuL2ljb24tc2V0LWV4dC14Zm9ybSIpLGU9eyIzVHJpYW5nbGVzIjohMCwiM1N0YXJzIjohMCwiNUJveGVzIjohMH07Y2xhc3MgbCBleHRlbmRzIG97Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXsieDE0OmRhdGFCYXIiOnRoaXMuZGF0YWJhclhmb3JtPW5ldyByLCJ4MTQ6aWNvblNldCI6dGhpcy5pY29uU2V0WGZvcm09bmV3IHR9fWdldCB0YWcoKXtyZXR1cm4ieDE0OmNmUnVsZSJ9c3RhdGljIGlzRXh0KGkpe3JldHVybiBpLnR5cGU9PT0iZGF0YUJhciI/ci5pc0V4dChpKTohKGkudHlwZSE9PSJpY29uU2V0Inx8IWkuY3VzdG9tJiYhZVtpLmljb25TZXRdKX1wcmVwYXJlKGkpe2wuaXNFeHQoaSkmJihpLngxNElkPWB7JHttKCl9fWAudG9VcHBlckNhc2UoKSl9cmVuZGVyKGksZil7aWYobC5pc0V4dChmKSlzd2l0Y2goZi50eXBlKXtjYXNlImRhdGFCYXIiOnRoaXMucmVuZGVyRGF0YUJhcihpLGYpO2JyZWFrO2Nhc2UiaWNvblNldCI6dGhpcy5yZW5kZXJJY29uU2V0KGksZil9fXJlbmRlckRhdGFCYXIoaSxmKXtpLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOiJkYXRhQmFyIixpZDpmLngxNElkfSksdGhpcy5kYXRhYmFyWGZvcm0ucmVuZGVyKGksZiksaS5jbG9zZU5vZGUoKX1yZW5kZXJJY29uU2V0KGksZil7aS5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZToiaWNvblNldCIscHJpb3JpdHk6Zi5wcmlvcml0eSxpZDpmLngxNElkfHxgeyR7bSgpfX1gfSksdGhpcy5pY29uU2V0WGZvcm0ucmVuZGVyKGksZiksaS5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbChpKXtsZXR7YXR0cmlidXRlczpmfT1pO3JldHVybnt0eXBlOmYudHlwZSx4MTRJZDpmLmlkLHByaW9yaXR5OnMudG9JbnRWYWx1ZShmLnByaW9yaXR5KX19b25QYXJzZXJDbG9zZShpLGYpe09iamVjdC5hc3NpZ24odGhpcy5tb2RlbCxmLm1vZGVsKX19RS5leHBvcnRzPWx9LHsiLi4vLi4vYmFzZS14Zm9ybSI6MzIsIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybSI6NDgsIi4vZGF0YWJhci1leHQteGZvcm0iOjc5LCIuL2ljb24tc2V0LWV4dC14Zm9ybSI6ODEsdXVpZDo1Mjh9XSw3NjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vY29tcG9zaXRlLXhmb3JtIikscz1hKCIuL2YtZXh0LXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4bTpmIjp0aGlzLmZFeHRYZm9ybT1uZXcgc319Z2V0IHRhZygpe3JldHVybiJ4MTQ6Y2Z2byJ9cmVuZGVyKG8scil7by5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZTpyLnR5cGV9KSxyLnZhbHVlIT09dm9pZCAwJiZ0aGlzLmZFeHRYZm9ybS5yZW5kZXIobyxyLnZhbHVlKSxvLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKG8pe3JldHVybnt0eXBlOm8uYXR0cmlidXRlcy50eXBlfX1vblBhcnNlckNsb3NlKG8scil7c3dpdGNoKG8pe2Nhc2UieG06ZiI6dGhpcy5tb2RlbC52YWx1ZT1yLm1vZGVsP3BhcnNlRmxvYXQoci5tb2RlbCk6MH19fX0seyIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4LCIuL2YtZXh0LXhmb3JtIjo4MH1dLDc3OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi9jb21wb3NpdGUteGZvcm0iKSxzPWEoIi4vc3FyZWYtZXh0LXhmb3JtIiksbz1hKCIuL2NmLXJ1bGUtZXh0LXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4bTpzcXJlZiI6dGhpcy5zcVJlZj1uZXcgcywieDE0OmNmUnVsZSI6dGhpcy5jZlJ1bGU9bmV3IG99fWdldCB0YWcoKXtyZXR1cm4ieDE0OmNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9cHJlcGFyZShyLHQpe3IucnVsZXMuZm9yRWFjaChlPT57dGhpcy5jZlJ1bGUucHJlcGFyZShlLHQpfSl9cmVuZGVyKHIsdCl7dC5ydWxlcy5zb21lKG8uaXNFeHQpJiYoci5vcGVuTm9kZSh0aGlzLnRhZyx7InhtbG5zOnhtIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluIn0pLHQucnVsZXMuZmlsdGVyKG8uaXNFeHQpLmZvckVhY2goZT0+dGhpcy5jZlJ1bGUucmVuZGVyKHIsZSkpLHRoaXMuc3FSZWYucmVuZGVyKHIsdC5yZWYpLHIuY2xvc2VOb2RlKCkpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue3J1bGVzOltdfX1vblBhcnNlckNsb3NlKHIsdCl7c3dpdGNoKHIpe2Nhc2UieG06c3FyZWYiOnRoaXMubW9kZWwucmVmPXQubW9kZWw7YnJlYWs7Y2FzZSJ4MTQ6Y2ZSdWxlIjp0aGlzLm1vZGVsLnJ1bGVzLnB1c2godC5tb2RlbCl9fX19LHsiLi4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi9jZi1ydWxlLWV4dC14Zm9ybSI6NzUsIi4vc3FyZWYtZXh0LXhmb3JtIjo4Mn1dLDc4OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi9jb21wb3NpdGUteGZvcm0iKSxzPWEoIi4vY2YtcnVsZS1leHQteGZvcm0iKSxvPWEoIi4vY29uZGl0aW9uYWwtZm9ybWF0dGluZy1leHQteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17IngxNDpjb25kaXRpb25hbEZvcm1hdHRpbmciOnRoaXMuY2ZYZm9ybT1uZXcgb319Z2V0IHRhZygpe3JldHVybiJ4MTQ6Y29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9aGFzQ29udGVudChyKXtyZXR1cm4gci5oYXNFeHRDb250ZW50PT09dm9pZCAwJiYoci5oYXNFeHRDb250ZW50PXIuc29tZSh0PT50LnJ1bGVzLnNvbWUocy5pc0V4dCkpKSxyLmhhc0V4dENvbnRlbnR9cHJlcGFyZShyLHQpe3IuZm9yRWFjaChlPT57dGhpcy5jZlhmb3JtLnByZXBhcmUoZSx0KX0pfXJlbmRlcihyLHQpe3RoaXMuaGFzQ29udGVudCh0KSYmKHIub3Blbk5vZGUodGhpcy50YWcpLHQuZm9yRWFjaChlPT50aGlzLmNmWGZvcm0ucmVuZGVyKHIsZSkpLHIuY2xvc2VOb2RlKCkpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJuW119b25QYXJzZXJDbG9zZShyLHQpe3RoaXMubW9kZWwucHVzaCh0Lm1vZGVsKX19fSx7Ii4uLy4uL2NvbXBvc2l0ZS14Zm9ybSI6NDgsIi4vY2YtcnVsZS1leHQteGZvcm0iOjc1LCIuL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmctZXh0LXhmb3JtIjo3N31dLDc5OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi9iYXNlLXhmb3JtIikscz1hKCIuLi8uLi9jb21wb3NpdGUteGZvcm0iKSxvPWEoIi4uLy4uL3N0eWxlL2NvbG9yLXhmb3JtIikscj1hKCIuL2Nmdm8tZXh0LXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4MTQ6Y2Z2byI6dGhpcy5jZnZvWGZvcm09bmV3IHIsIngxNDpib3JkZXJDb2xvciI6dGhpcy5ib3JkZXJDb2xvclhmb3JtPW5ldyBvKCJ4MTQ6Ym9yZGVyQ29sb3IiKSwieDE0Om5lZ2F0aXZlQm9yZGVyQ29sb3IiOnRoaXMubmVnYXRpdmVCb3JkZXJDb2xvclhmb3JtPW5ldyBvKCJ4MTQ6bmVnYXRpdmVCb3JkZXJDb2xvciIpLCJ4MTQ6bmVnYXRpdmVGaWxsQ29sb3IiOnRoaXMubmVnYXRpdmVGaWxsQ29sb3JYZm9ybT1uZXcgbygieDE0Om5lZ2F0aXZlRmlsbENvbG9yIiksIngxNDpheGlzQ29sb3IiOnRoaXMuYXhpc0NvbG9yWGZvcm09bmV3IG8oIngxNDpheGlzQ29sb3IiKX19c3RhdGljIGlzRXh0KHQpe3JldHVybiF0LmdyYWRpZW50fWdldCB0YWcoKXtyZXR1cm4ieDE0OmRhdGFCYXIifXJlbmRlcih0LGUpe3Qub3Blbk5vZGUodGhpcy50YWcse21pbkxlbmd0aDptLnRvSW50QXR0cmlidXRlKGUubWluTGVuZ3RoLDAsITApLG1heExlbmd0aDptLnRvSW50QXR0cmlidXRlKGUubWF4TGVuZ3RoLDEwMCwhMCksYm9yZGVyOm0udG9Cb29sQXR0cmlidXRlKGUuYm9yZGVyLCExKSxncmFkaWVudDptLnRvQm9vbEF0dHJpYnV0ZShlLmdyYWRpZW50LCEwKSxuZWdhdGl2ZUJhckNvbG9yU2FtZUFzUG9zaXRpdmU6bS50b0Jvb2xBdHRyaWJ1dGUoZS5uZWdhdGl2ZUJhckNvbG9yU2FtZUFzUG9zaXRpdmUsITApLG5lZ2F0aXZlQmFyQm9yZGVyQ29sb3JTYW1lQXNQb3NpdGl2ZTptLnRvQm9vbEF0dHJpYnV0ZShlLm5lZ2F0aXZlQmFyQm9yZGVyQ29sb3JTYW1lQXNQb3NpdGl2ZSwhMCksYXhpc1Bvc2l0aW9uOm0udG9BdHRyaWJ1dGUoZS5heGlzUG9zaXRpb24sImF1dG8iKSxkaXJlY3Rpb246bS50b0F0dHJpYnV0ZShlLmRpcmVjdGlvbiwibGVmdFRvUmlnaHQiKX0pLGUuY2Z2by5mb3JFYWNoKGw9Pnt0aGlzLmNmdm9YZm9ybS5yZW5kZXIodCxsKX0pLHRoaXMuYm9yZGVyQ29sb3JYZm9ybS5yZW5kZXIodCxlLmJvcmRlckNvbG9yKSx0aGlzLm5lZ2F0aXZlQm9yZGVyQ29sb3JYZm9ybS5yZW5kZXIodCxlLm5lZ2F0aXZlQm9yZGVyQ29sb3IpLHRoaXMubmVnYXRpdmVGaWxsQ29sb3JYZm9ybS5yZW5kZXIodCxlLm5lZ2F0aXZlRmlsbENvbG9yKSx0aGlzLmF4aXNDb2xvclhmb3JtLnJlbmRlcih0LGUuYXhpc0NvbG9yKSx0LmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKHQpe2xldHthdHRyaWJ1dGVzOmV9PXQ7cmV0dXJue2Nmdm86W10sbWluTGVuZ3RoOm0udG9JbnRWYWx1ZShlLm1pbkxlbmd0aCwwKSxtYXhMZW5ndGg6bS50b0ludFZhbHVlKGUubWF4TGVuZ3RoLDEwMCksYm9yZGVyOm0udG9Cb29sVmFsdWUoZS5ib3JkZXIsITEpLGdyYWRpZW50Om0udG9Cb29sVmFsdWUoZS5ncmFkaWVudCwhMCksbmVnYXRpdmVCYXJDb2xvclNhbWVBc1Bvc2l0aXZlOm0udG9Cb29sVmFsdWUoZS5uZWdhdGl2ZUJhckNvbG9yU2FtZUFzUG9zaXRpdmUsITApLG5lZ2F0aXZlQmFyQm9yZGVyQ29sb3JTYW1lQXNQb3NpdGl2ZTptLnRvQm9vbFZhbHVlKGUubmVnYXRpdmVCYXJCb3JkZXJDb2xvclNhbWVBc1Bvc2l0aXZlLCEwKSxheGlzUG9zaXRpb246bS50b1N0cmluZ1ZhbHVlKGUuYXhpc1Bvc2l0aW9uLCJhdXRvIiksZGlyZWN0aW9uOm0udG9TdHJpbmdWYWx1ZShlLmRpcmVjdGlvbiwibGVmdFRvUmlnaHQiKX19b25QYXJzZXJDbG9zZSh0LGUpe2NvbnN0WyxsXT10LnNwbGl0KCI6Iik7c3dpdGNoKGwpe2Nhc2UiY2Z2byI6dGhpcy5tb2RlbC5jZnZvLnB1c2goZS5tb2RlbCk7YnJlYWs7ZGVmYXVsdDp0aGlzLm1vZGVsW2xdPWUubW9kZWx9fX19LHsiLi4vLi4vYmFzZS14Zm9ybSI6MzIsIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybSI6NDgsIi4uLy4uL3N0eWxlL2NvbG9yLXhmb3JtIjoxMjgsIi4vY2Z2by1leHQteGZvcm0iOjc2fV0sODA6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4ieG06ZiJ9cmVuZGVyKHMsbyl7cy5sZWFmTm9kZSh0aGlzLnRhZyxudWxsLG8pfXBhcnNlT3Blbigpe3RoaXMubW9kZWw9IiJ9cGFyc2VUZXh0KHMpe3RoaXMubW9kZWwrPXN9cGFyc2VDbG9zZShzKXtyZXR1cm4gcyE9PXRoaXMudGFnfX19LHsiLi4vLi4vYmFzZS14Zm9ybSI6MzJ9XSw4MTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vYmFzZS14Zm9ybSIpLHM9YSgiLi4vLi4vY29tcG9zaXRlLXhmb3JtIiksbz1hKCIuL2Nmdm8tZXh0LXhmb3JtIikscj1hKCIuL2NmLWljb24tZXh0LXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4MTQ6Y2Z2byI6dGhpcy5jZnZvWGZvcm09bmV3IG8sIngxNDpjZkljb24iOnRoaXMuY2ZJY29uWGZvcm09bmV3IHJ9fWdldCB0YWcoKXtyZXR1cm4ieDE0Omljb25TZXQifXJlbmRlcih0LGUpe3Qub3Blbk5vZGUodGhpcy50YWcse2ljb25TZXQ6bS50b1N0cmluZ0F0dHJpYnV0ZShlLmljb25TZXQpLHJldmVyc2U6bS50b0Jvb2xBdHRyaWJ1dGUoZS5yZXZlcnNlLCExKSxzaG93VmFsdWU6bS50b0Jvb2xBdHRyaWJ1dGUoZS5zaG93VmFsdWUsITApLGN1c3RvbTptLnRvQm9vbEF0dHJpYnV0ZShlLmljb25zLCExKX0pLGUuY2Z2by5mb3JFYWNoKGw9Pnt0aGlzLmNmdm9YZm9ybS5yZW5kZXIodCxsKX0pLGUuaWNvbnMmJmUuaWNvbnMuZm9yRWFjaCgobCxuKT0+e2wuaWNvbklkPW4sdGhpcy5jZkljb25YZm9ybS5yZW5kZXIodCxsKX0pLHQuY2xvc2VOb2RlKCl9Y3JlYXRlTmV3TW9kZWwodCl7bGV0e2F0dHJpYnV0ZXM6ZX09dDtyZXR1cm57Y2Z2bzpbXSxpY29uU2V0Om0udG9TdHJpbmdWYWx1ZShlLmljb25TZXQsIjNUcmFmZmljTGlnaHRzIikscmV2ZXJzZTptLnRvQm9vbFZhbHVlKGUucmV2ZXJzZSwhMSksc2hvd1ZhbHVlOm0udG9Cb29sVmFsdWUoZS5zaG93VmFsdWUsITApfX1vblBhcnNlckNsb3NlKHQsZSl7Y29uc3RbLGxdPXQuc3BsaXQoIjoiKTtzd2l0Y2gobCl7Y2FzZSJjZnZvIjp0aGlzLm1vZGVsLmNmdm8ucHVzaChlLm1vZGVsKTticmVhaztjYXNlImNmSWNvbiI6dGhpcy5tb2RlbC5pY29uc3x8KHRoaXMubW9kZWwuaWNvbnM9W10pLHRoaXMubW9kZWwuaWNvbnMucHVzaChlLm1vZGVsKTticmVhaztkZWZhdWx0OnRoaXMubW9kZWxbbF09ZS5tb2RlbH19fX0seyIuLi8uLi9iYXNlLXhmb3JtIjozMiwiLi4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi9jZi1pY29uLWV4dC14Zm9ybSI6NzQsIi4vY2Z2by1leHQteGZvcm0iOjc2fV0sODI6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4ieG06c3FyZWYifXJlbmRlcihzLG8pe3MubGVhZk5vZGUodGhpcy50YWcsbnVsbCxvKX1wYXJzZU9wZW4oKXt0aGlzLm1vZGVsPSIifXBhcnNlVGV4dChzKXt0aGlzLm1vZGVsKz1zfXBhcnNlQ2xvc2Uocyl7cmV0dXJuIHMhPT10aGlzLnRhZ319fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyfV0sODM6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKSxzPWEoIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybSIpLG89YSgiLi4vLi4vLi4vLi4vZG9jL3JhbmdlIikscj1hKCIuL2RhdGFiYXIteGZvcm0iKSx0PWEoIi4vZXh0LWxzdC1yZWYteGZvcm0iKSxlPWEoIi4vZm9ybXVsYS14Zm9ybSIpLGw9YSgiLi9jb2xvci1zY2FsZS14Zm9ybSIpLG49YSgiLi9pY29uLXNldC14Zm9ybSIpLGk9eyIzVHJpYW5nbGVzIjohMCwiM1N0YXJzIjohMCwiNUJveGVzIjohMH0sZj11PT57Y29uc3R7dHlwZTpkLG9wZXJhdG9yOmh9PXU7c3dpdGNoKGQpe2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlImNvbnRhaW5zQmxhbmtzIjpjYXNlIm5vdENvbnRhaW5zQmxhbmtzIjpjYXNlImNvbnRhaW5zRXJyb3JzIjpjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjpyZXR1cm57dHlwZToiY29udGFpbnNUZXh0IixvcGVyYXRvcjpkfTtkZWZhdWx0OnJldHVybnt0eXBlOmQsb3BlcmF0b3I6aH19fTtjbGFzcyBjIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2RhdGFCYXI6dGhpcy5kYXRhYmFyWGZvcm09bmV3IHIsZXh0THN0OnRoaXMuZXh0THN0UmVmWGZvcm09bmV3IHQsZm9ybXVsYTp0aGlzLmZvcm11bGFYZm9ybT1uZXcgZSxjb2xvclNjYWxlOnRoaXMuY29sb3JTY2FsZVhmb3JtPW5ldyBsLGljb25TZXQ6dGhpcy5pY29uU2V0WGZvcm09bmV3IG59fWdldCB0YWcoKXtyZXR1cm4iY2ZSdWxlIn1zdGF0aWMgaXNQcmltaXRpdmUoZCl7cmV0dXJuIGQudHlwZSE9PSJpY29uU2V0Inx8IWQuY3VzdG9tJiYhaVtkLmljb25TZXRdfXJlbmRlcihkLGgpe3N3aXRjaChoLnR5cGUpe2Nhc2UiZXhwcmVzc2lvbiI6dGhpcy5yZW5kZXJFeHByZXNzaW9uKGQsaCk7YnJlYWs7Y2FzZSJjZWxsSXMiOnRoaXMucmVuZGVyQ2VsbElzKGQsaCk7YnJlYWs7Y2FzZSJ0b3AxMCI6dGhpcy5yZW5kZXJUb3AxMChkLGgpO2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdlIjp0aGlzLnJlbmRlckFib3ZlQXZlcmFnZShkLGgpO2JyZWFrO2Nhc2UiZGF0YUJhciI6dGhpcy5yZW5kZXJEYXRhQmFyKGQsaCk7YnJlYWs7Y2FzZSJjb2xvclNjYWxlIjp0aGlzLnJlbmRlckNvbG9yU2NhbGUoZCxoKTticmVhaztjYXNlImljb25TZXQiOnRoaXMucmVuZGVySWNvblNldChkLGgpO2JyZWFrO2Nhc2UiY29udGFpbnNUZXh0Ijp0aGlzLnJlbmRlclRleHQoZCxoKTticmVhaztjYXNlInRpbWVQZXJpb2QiOnRoaXMucmVuZGVyVGltZVBlcmlvZChkLGgpfX1yZW5kZXJFeHByZXNzaW9uKGQsaCl7ZC5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZToiZXhwcmVzc2lvbiIsZHhmSWQ6aC5keGZJZCxwcmlvcml0eTpoLnByaW9yaXR5fSksdGhpcy5mb3JtdWxhWGZvcm0ucmVuZGVyKGQsaC5mb3JtdWxhZVswXSksZC5jbG9zZU5vZGUoKX1yZW5kZXJDZWxsSXMoZCxoKXtkLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOiJjZWxsSXMiLGR4ZklkOmguZHhmSWQscHJpb3JpdHk6aC5wcmlvcml0eSxvcGVyYXRvcjpoLm9wZXJhdG9yfSksaC5mb3JtdWxhZS5mb3JFYWNoKHc9Pnt0aGlzLmZvcm11bGFYZm9ybS5yZW5kZXIoZCx3KX0pLGQuY2xvc2VOb2RlKCl9cmVuZGVyVG9wMTAoZCxoKXtkLmxlYWZOb2RlKHRoaXMudGFnLHt0eXBlOiJ0b3AxMCIsZHhmSWQ6aC5keGZJZCxwcmlvcml0eTpoLnByaW9yaXR5LHBlcmNlbnQ6bS50b0Jvb2xBdHRyaWJ1dGUoaC5wZXJjZW50LCExKSxib3R0b206bS50b0Jvb2xBdHRyaWJ1dGUoaC5ib3R0b20sITEpLHJhbms6bS50b0ludFZhbHVlKGgucmFuaywxMCwhMCl9KX1yZW5kZXJBYm92ZUF2ZXJhZ2UoZCxoKXtkLmxlYWZOb2RlKHRoaXMudGFnLHt0eXBlOiJhYm92ZUF2ZXJhZ2UiLGR4ZklkOmguZHhmSWQscHJpb3JpdHk6aC5wcmlvcml0eSxhYm92ZUF2ZXJhZ2U6bS50b0Jvb2xBdHRyaWJ1dGUoaC5hYm92ZUF2ZXJhZ2UsITApfSl9cmVuZGVyRGF0YUJhcihkLGgpe2Qub3Blbk5vZGUodGhpcy50YWcse3R5cGU6ImRhdGFCYXIiLHByaW9yaXR5OmgucHJpb3JpdHl9KSx0aGlzLmRhdGFiYXJYZm9ybS5yZW5kZXIoZCxoKSx0aGlzLmV4dExzdFJlZlhmb3JtLnJlbmRlcihkLGgpLGQuY2xvc2VOb2RlKCl9cmVuZGVyQ29sb3JTY2FsZShkLGgpe2Qub3Blbk5vZGUodGhpcy50YWcse3R5cGU6ImNvbG9yU2NhbGUiLHByaW9yaXR5OmgucHJpb3JpdHl9KSx0aGlzLmNvbG9yU2NhbGVYZm9ybS5yZW5kZXIoZCxoKSxkLmNsb3NlTm9kZSgpfXJlbmRlckljb25TZXQoZCxoKXtjLmlzUHJpbWl0aXZlKGgpJiYoZC5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZToiaWNvblNldCIscHJpb3JpdHk6aC5wcmlvcml0eX0pLHRoaXMuaWNvblNldFhmb3JtLnJlbmRlcihkLGgpLGQuY2xvc2VOb2RlKCkpfXJlbmRlclRleHQoZCxoKXtkLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOmgub3BlcmF0b3IsZHhmSWQ6aC5keGZJZCxwcmlvcml0eTpoLnByaW9yaXR5LG9wZXJhdG9yOm0udG9TdHJpbmdBdHRyaWJ1dGUoaC5vcGVyYXRvciwiY29udGFpbnNUZXh0Iil9KTtjb25zdCB3PShfPT57aWYoXy5mb3JtdWxhZSYmXy5mb3JtdWxhZVswXSlyZXR1cm4gXy5mb3JtdWxhZVswXTtjb25zdCBBPW5ldyBvKF8ucmVmKSx7dGw6UH09QTtzd2l0Y2goXy5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOnJldHVybmBOT1QoSVNFUlJPUihTRUFSQ0goIiR7Xy50ZXh0fSIsJHtQfSkpKWA7Y2FzZSJjb250YWluc0JsYW5rcyI6cmV0dXJuYExFTihUUklNKCR7UH0pKT0wYDtjYXNlIm5vdENvbnRhaW5zQmxhbmtzIjpyZXR1cm5gTEVOKFRSSU0oJHtQfSkpPjBgO2Nhc2UiY29udGFpbnNFcnJvcnMiOnJldHVybmBJU0VSUk9SKCR7UH0pYDtjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjpyZXR1cm5gTk9UKElTRVJST1IoJHtQfSkpYDtkZWZhdWx0OnJldHVybn19KShoKTt3JiZ0aGlzLmZvcm11bGFYZm9ybS5yZW5kZXIoZCx3KSxkLmNsb3NlTm9kZSgpfXJlbmRlclRpbWVQZXJpb2QoZCxoKXtkLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOiJ0aW1lUGVyaW9kIixkeGZJZDpoLmR4ZklkLHByaW9yaXR5OmgucHJpb3JpdHksdGltZVBlcmlvZDpoLnRpbWVQZXJpb2R9KTtjb25zdCB3PShfPT57aWYoXy5mb3JtdWxhZSYmXy5mb3JtdWxhZVswXSlyZXR1cm4gXy5mb3JtdWxhZVswXTtjb25zdCBBPW5ldyBvKF8ucmVmKSx7dGw6UH09QTtzd2l0Y2goXy50aW1lUGVyaW9kKXtjYXNlInRoaXNXZWVrIjpyZXR1cm5gQU5EKFRPREFZKCktUk9VTkRET1dOKCR7UH0sMCk8PVdFRUtEQVkoVE9EQVkoKSktMSxST1VORERPV04oJHtQfSwwKS1UT0RBWSgpPD03LVdFRUtEQVkoVE9EQVkoKSkpYDtjYXNlImxhc3RXZWVrIjpyZXR1cm5gQU5EKFRPREFZKCktUk9VTkRET1dOKCR7UH0sMCk+PShXRUVLREFZKFRPREFZKCkpKSxUT0RBWSgpLVJPVU5ERE9XTigke1B9LDApPChXRUVLREFZKFRPREFZKCkpKzcpKWA7Y2FzZSJuZXh0V2VlayI6cmV0dXJuYEFORChST1VORERPV04oJHtQfSwwKS1UT0RBWSgpPig3LVdFRUtEQVkoVE9EQVkoKSkpLFJPVU5ERE9XTigke1B9LDApLVRPREFZKCk8KDE1LVdFRUtEQVkoVE9EQVkoKSkpKWA7Y2FzZSJ5ZXN0ZXJkYXkiOnJldHVybmBGTE9PUigke1B9LDEpPVRPREFZKCktMWA7Y2FzZSJ0b2RheSI6cmV0dXJuYEZMT09SKCR7UH0sMSk9VE9EQVkoKWA7Y2FzZSJ0b21vcnJvdyI6cmV0dXJuYEZMT09SKCR7UH0sMSk9VE9EQVkoKSsxYDtjYXNlImxhc3Q3RGF5cyI6cmV0dXJuYEFORChUT0RBWSgpLUZMT09SKCR7UH0sMSk8PTYsRkxPT1IoJHtQfSwxKTw9VE9EQVkoKSlgO2Nhc2UibGFzdE1vbnRoIjpyZXR1cm5gQU5EKE1PTlRIKCR7UH0pPU1PTlRIKEVEQVRFKFRPREFZKCksMC0xKSksWUVBUigke1B9KT1ZRUFSKEVEQVRFKFRPREFZKCksMC0xKSkpYDtjYXNlInRoaXNNb250aCI6cmV0dXJuYEFORChNT05USCgke1B9KT1NT05USChUT0RBWSgpKSxZRUFSKCR7UH0pPVlFQVIoVE9EQVkoKSkpYDtjYXNlIm5leHRNb250aCI6cmV0dXJuYEFORChNT05USCgke1B9KT1NT05USChFREFURShUT0RBWSgpLDArMSkpLFlFQVIoJHtQfSk9WUVBUihFREFURShUT0RBWSgpLDArMSkpKWA7ZGVmYXVsdDpyZXR1cm59fSkoaCk7dyYmdGhpcy5mb3JtdWxhWGZvcm0ucmVuZGVyKGQsdyksZC5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbChkKXtsZXR7YXR0cmlidXRlczpofT1kO3JldHVybnsuLi5mKGgpLGR4ZklkOm0udG9JbnRWYWx1ZShoLmR4ZklkKSxwcmlvcml0eTptLnRvSW50VmFsdWUoaC5wcmlvcml0eSksdGltZVBlcmlvZDpoLnRpbWVQZXJpb2QscGVyY2VudDptLnRvQm9vbFZhbHVlKGgucGVyY2VudCksYm90dG9tOm0udG9Cb29sVmFsdWUoaC5ib3R0b20pLHJhbms6bS50b0ludFZhbHVlKGgucmFuayksYWJvdmVBdmVyYWdlOm0udG9Cb29sVmFsdWUoaC5hYm92ZUF2ZXJhZ2UpfX1vblBhcnNlckNsb3NlKGQsaCl7c3dpdGNoKGQpe2Nhc2UiZGF0YUJhciI6Y2FzZSJleHRMc3QiOmNhc2UiY29sb3JTY2FsZSI6Y2FzZSJpY29uU2V0IjpPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsaC5tb2RlbCk7YnJlYWs7Y2FzZSJmb3JtdWxhIjp0aGlzLm1vZGVsLmZvcm11bGFlPXRoaXMubW9kZWwuZm9ybXVsYWV8fFtdLHRoaXMubW9kZWwuZm9ybXVsYWUucHVzaChoLm1vZGVsKX19fUUuZXhwb3J0cz1jfSx7Ii4uLy4uLy4uLy4uL2RvYy9yYW5nZSI6MTAsIi4uLy4uL2Jhc2UteGZvcm0iOjMyLCIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4LCIuL2NvbG9yLXNjYWxlLXhmb3JtIjo4NSwiLi9kYXRhYmFyLXhmb3JtIjo4OCwiLi9leHQtbHN0LXJlZi14Zm9ybSI6ODksIi4vZm9ybXVsYS14Zm9ybSI6OTAsIi4vaWNvbi1zZXQteGZvcm0iOjkxfV0sODQ6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4iY2Z2byJ9cmVuZGVyKHMsbyl7cy5sZWFmTm9kZSh0aGlzLnRhZyx7dHlwZTpvLnR5cGUsdmFsOm8udmFsdWV9KX1wYXJzZU9wZW4ocyl7dGhpcy5tb2RlbD17dHlwZTpzLmF0dHJpYnV0ZXMudHlwZSx2YWx1ZTptLnRvRmxvYXRWYWx1ZShzLmF0dHJpYnV0ZXMudmFsKX19cGFyc2VDbG9zZShzKXtyZXR1cm4gcyE9PXRoaXMudGFnfX19LHsiLi4vLi4vYmFzZS14Zm9ybSI6MzJ9XSw4NTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vY29tcG9zaXRlLXhmb3JtIikscz1hKCIuLi8uLi9zdHlsZS9jb2xvci14Zm9ybSIpLG89YSgiLi9jZnZvLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2Nmdm86dGhpcy5jZnZvWGZvcm09bmV3IG8sY29sb3I6dGhpcy5jb2xvclhmb3JtPW5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuImNvbG9yU2NhbGUifXJlbmRlcihyLHQpe3Iub3Blbk5vZGUodGhpcy50YWcpLHQuY2Z2by5mb3JFYWNoKGU9Pnt0aGlzLmNmdm9YZm9ybS5yZW5kZXIocixlKX0pLHQuY29sb3IuZm9yRWFjaChlPT57dGhpcy5jb2xvclhmb3JtLnJlbmRlcihyLGUpfSksci5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbChyKXtyZXR1cm57Y2Z2bzpbXSxjb2xvcjpbXX19b25QYXJzZXJDbG9zZShyLHQpe3RoaXMubW9kZWxbcl0ucHVzaCh0Lm1vZGVsKX19fSx7Ii4uLy4uL2NvbXBvc2l0ZS14Zm9ybSI6NDgsIi4uLy4uL3N0eWxlL2NvbG9yLXhmb3JtIjoxMjgsIi4vY2Z2by14Zm9ybSI6ODR9XSw4NjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vY29tcG9zaXRlLXhmb3JtIikscz1hKCIuL2NmLXJ1bGUteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y2ZSdWxlOm5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuImNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9cmVuZGVyKG8scil7ci5ydWxlcy5zb21lKHMuaXNQcmltaXRpdmUpJiYoby5vcGVuTm9kZSh0aGlzLnRhZyx7c3FyZWY6ci5yZWZ9KSxyLnJ1bGVzLmZvckVhY2godD0+e3MuaXNQcmltaXRpdmUodCkmJih0LnJlZj1yLnJlZix0aGlzLm1hcC5jZlJ1bGUucmVuZGVyKG8sdCkpfSksby5jbG9zZU5vZGUoKSl9Y3JlYXRlTmV3TW9kZWwobyl7bGV0e2F0dHJpYnV0ZXM6cn09bztyZXR1cm57cmVmOnIuc3FyZWYscnVsZXM6W119fW9uUGFyc2VyQ2xvc2UobyxyKXt0aGlzLm1vZGVsLnJ1bGVzLnB1c2goci5tb2RlbCl9fX0seyIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4LCIuL2NmLXJ1bGUteGZvcm0iOjgzfV0sODc6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKSxzPWEoIi4vY29uZGl0aW9uYWwtZm9ybWF0dGluZy14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2ZYZm9ybT1uZXcgc31nZXQgdGFnKCl7cmV0dXJuImNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9cmVzZXQoKXt0aGlzLm1vZGVsPVtdfXByZXBhcmUobyxyKXtsZXQgdD1vLnJlZHVjZSgoZSxsKT0+TWF0aC5tYXgoZSwuLi5sLnJ1bGVzLm1hcChuPT5uLnByaW9yaXR5fHwwKSksMSk7by5mb3JFYWNoKGU9PntlLnJ1bGVzLmZvckVhY2gobD0+e2wucHJpb3JpdHl8fChsLnByaW9yaXR5PXQrKyksbC5zdHlsZSYmKGwuZHhmSWQ9ci5zdHlsZXMuYWRkRHhmU3R5bGUobC5zdHlsZSkpfSl9KX1yZW5kZXIobyxyKXtyLmZvckVhY2godD0+e3RoaXMuY2ZYZm9ybS5yZW5kZXIobyx0KX0pfXBhcnNlT3BlbihvKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKG8pLCEwO3N3aXRjaChvLm5hbWUpe2Nhc2UiY29uZGl0aW9uYWxGb3JtYXR0aW5nIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5jZlhmb3JtLHRoaXMucGFyc2VyLnBhcnNlT3BlbihvKSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQobyl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChvKX1wYXJzZUNsb3NlKG8pe3JldHVybiEhdGhpcy5wYXJzZXImJighIXRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobyl8fCh0aGlzLm1vZGVsLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCwhMSkpfXJlY29uY2lsZShvLHIpe28uZm9yRWFjaCh0PT57dC5ydWxlcy5mb3JFYWNoKGU9PntlLmR4ZklkIT09dm9pZCAwJiYoZS5zdHlsZT1yLnN0eWxlcy5nZXREeGZTdHlsZShlLmR4ZklkKSxkZWxldGUgZS5keGZJZCl9KX0pfX19LHsiLi4vLi4vYmFzZS14Zm9ybSI6MzIsIi4vY29uZGl0aW9uYWwtZm9ybWF0dGluZy14Zm9ybSI6ODZ9XSw4ODpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vY29tcG9zaXRlLXhmb3JtIikscz1hKCIuLi8uLi9zdHlsZS9jb2xvci14Zm9ybSIpLG89YSgiLi9jZnZvLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2Nmdm86dGhpcy5jZnZvWGZvcm09bmV3IG8sY29sb3I6dGhpcy5jb2xvclhmb3JtPW5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuImRhdGFCYXIifXJlbmRlcihyLHQpe3Iub3Blbk5vZGUodGhpcy50YWcpLHQuY2Z2by5mb3JFYWNoKGU9Pnt0aGlzLmNmdm9YZm9ybS5yZW5kZXIocixlKX0pLHRoaXMuY29sb3JYZm9ybS5yZW5kZXIocix0LmNvbG9yKSxyLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue2Nmdm86W119fW9uUGFyc2VyQ2xvc2Uocix0KXtzd2l0Y2gocil7Y2FzZSJjZnZvIjp0aGlzLm1vZGVsLmNmdm8ucHVzaCh0Lm1vZGVsKTticmVhaztjYXNlImNvbG9yIjp0aGlzLm1vZGVsLmNvbG9yPXQubW9kZWx9fX19LHsiLi4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi4vLi4vc3R5bGUvY29sb3IteGZvcm0iOjEyOCwiLi9jZnZvLXhmb3JtIjo4NH1dLDg5OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi9iYXNlLXhmb3JtIikscz1hKCIuLi8uLi9jb21wb3NpdGUteGZvcm0iKTtjbGFzcyBvIGV4dGVuZHMgbXtnZXQgdGFnKCl7cmV0dXJuIngxNDppZCJ9cmVuZGVyKGUsbCl7ZS5sZWFmTm9kZSh0aGlzLnRhZyxudWxsLGwpfXBhcnNlT3Blbigpe3RoaXMubW9kZWw9IiJ9cGFyc2VUZXh0KGUpe3RoaXMubW9kZWwrPWV9cGFyc2VDbG9zZShlKXtyZXR1cm4gZSE9PXRoaXMudGFnfX1jbGFzcyByIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4MTQ6aWQiOnRoaXMuaWRYZm9ybT1uZXcgb319Z2V0IHRhZygpe3JldHVybiJleHQifXJlbmRlcihlLGwpe2Uub3Blbk5vZGUodGhpcy50YWcse3VyaToie0IwMjVGOTM3LUM3QjEtNDdEMy1CNjdGLUE2MkVGRjY2NkUzRX0iLCJ4bWxuczp4MTQiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9tYWluIn0pLHRoaXMuaWRYZm9ybS5yZW5kZXIoZSxsLngxNElkKSxlLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue319b25QYXJzZXJDbG9zZShlLGwpe3RoaXMubW9kZWwueDE0SWQ9bC5tb2RlbH19RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2V4dDpuZXcgcn19Z2V0IHRhZygpe3JldHVybiJleHRMc3QifXJlbmRlcih0LGUpe3Qub3Blbk5vZGUodGhpcy50YWcpLHRoaXMubWFwLmV4dC5yZW5kZXIodCxlKSx0LmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue319b25QYXJzZXJDbG9zZSh0LGUpe09iamVjdC5hc3NpZ24odGhpcy5tb2RlbCxlLm1vZGVsKX19fSx7Ii4uLy4uL2Jhc2UteGZvcm0iOjMyLCIuLi8uLi9jb21wb3NpdGUteGZvcm0iOjQ4fV0sOTA6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4iZm9ybXVsYSJ9cmVuZGVyKHMsbyl7cy5sZWFmTm9kZSh0aGlzLnRhZyxudWxsLG8pfXBhcnNlT3Blbigpe3RoaXMubW9kZWw9IiJ9cGFyc2VUZXh0KHMpe3RoaXMubW9kZWwrPXN9cGFyc2VDbG9zZShzKXtyZXR1cm4gcyE9PXRoaXMudGFnfX19LHsiLi4vLi4vYmFzZS14Zm9ybSI6MzJ9XSw5MTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vYmFzZS14Zm9ybSIpLHM9YSgiLi4vLi4vY29tcG9zaXRlLXhmb3JtIiksbz1hKCIuL2Nmdm8teGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y2Z2bzp0aGlzLmNmdm9YZm9ybT1uZXcgb319Z2V0IHRhZygpe3JldHVybiJpY29uU2V0In1yZW5kZXIocix0KXtyLm9wZW5Ob2RlKHRoaXMudGFnLHtpY29uU2V0Om0udG9TdHJpbmdBdHRyaWJ1dGUodC5pY29uU2V0LCIzVHJhZmZpY0xpZ2h0cyIpLHJldmVyc2U6bS50b0Jvb2xBdHRyaWJ1dGUodC5yZXZlcnNlLCExKSxzaG93VmFsdWU6bS50b0Jvb2xBdHRyaWJ1dGUodC5zaG93VmFsdWUsITApfSksdC5jZnZvLmZvckVhY2goZT0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcihyLGUpfSksci5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbChyKXtsZXR7YXR0cmlidXRlczp0fT1yO3JldHVybntpY29uU2V0Om0udG9TdHJpbmdWYWx1ZSh0Lmljb25TZXQsIjNUcmFmZmljTGlnaHRzIikscmV2ZXJzZTptLnRvQm9vbFZhbHVlKHQucmV2ZXJzZSksc2hvd1ZhbHVlOm0udG9Cb29sVmFsdWUodC5zaG93VmFsdWUpLGNmdm86W119fW9uUGFyc2VyQ2xvc2Uocix0KXt0aGlzLm1vZGVsW3JdLnB1c2godC5tb2RlbCl9fX0seyIuLi8uLi9iYXNlLXhmb3JtIjozMiwiLi4vLi4vY29tcG9zaXRlLXhmb3JtIjo0OCwiLi9jZnZvLXhmb3JtIjo4NH1dLDkyOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi91dGlscy91dGlscyIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIHN7Z2V0IHRhZygpe3JldHVybiJjb2wifXByZXBhcmUobyxyKXtjb25zdCB0PXIuc3R5bGVzLmFkZFN0eWxlTW9kZWwoby5zdHlsZXx8e30pO3QmJihvLnN0eWxlSWQ9dCl9cmVuZGVyKG8scil7by5vcGVuTm9kZSgiY29sIiksby5hZGRBdHRyaWJ1dGUoIm1pbiIsci5taW4pLG8uYWRkQXR0cmlidXRlKCJtYXgiLHIubWF4KSxyLndpZHRoJiZvLmFkZEF0dHJpYnV0ZSgid2lkdGgiLHIud2lkdGgpLHIuc3R5bGVJZCYmby5hZGRBdHRyaWJ1dGUoInN0eWxlIixyLnN0eWxlSWQpLHIuaGlkZGVuJiZvLmFkZEF0dHJpYnV0ZSgiaGlkZGVuIiwiMSIpLHIuYmVzdEZpdCYmby5hZGRBdHRyaWJ1dGUoImJlc3RGaXQiLCIxIiksci5vdXRsaW5lTGV2ZWwmJm8uYWRkQXR0cmlidXRlKCJvdXRsaW5lTGV2ZWwiLHIub3V0bGluZUxldmVsKSxyLmNvbGxhcHNlZCYmby5hZGRBdHRyaWJ1dGUoImNvbGxhcHNlZCIsIjEiKSxvLmFkZEF0dHJpYnV0ZSgiY3VzdG9tV2lkdGgiLCIxIiksby5jbG9zZU5vZGUoKX1wYXJzZU9wZW4obyl7aWYoby5uYW1lPT09ImNvbCIpe2NvbnN0IHI9dGhpcy5tb2RlbD17bWluOnBhcnNlSW50KG8uYXR0cmlidXRlcy5taW58fCIwIiwxMCksbWF4OnBhcnNlSW50KG8uYXR0cmlidXRlcy5tYXh8fCIwIiwxMCksd2lkdGg6by5hdHRyaWJ1dGVzLndpZHRoPT09dm9pZCAwP3ZvaWQgMDpwYXJzZUZsb2F0KG8uYXR0cmlidXRlcy53aWR0aHx8IjAiKX07cmV0dXJuIG8uYXR0cmlidXRlcy5zdHlsZSYmKHIuc3R5bGVJZD1wYXJzZUludChvLmF0dHJpYnV0ZXMuc3R5bGUsMTApKSxtLnBhcnNlQm9vbGVhbihvLmF0dHJpYnV0ZXMuaGlkZGVuKSYmKHIuaGlkZGVuPSEwKSxtLnBhcnNlQm9vbGVhbihvLmF0dHJpYnV0ZXMuYmVzdEZpdCkmJihyLmJlc3RGaXQ9ITApLG8uYXR0cmlidXRlcy5vdXRsaW5lTGV2ZWwmJihyLm91dGxpbmVMZXZlbD1wYXJzZUludChvLmF0dHJpYnV0ZXMub3V0bGluZUxldmVsLDEwKSksbS5wYXJzZUJvb2xlYW4oby5hdHRyaWJ1dGVzLmNvbGxhcHNlZCkmJihyLmNvbGxhcHNlZD0hMCksITB9cmV0dXJuITF9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX1yZWNvbmNpbGUobyxyKXtvLnN0eWxlSWQmJihvLnN0eWxlPXIuc3R5bGVzLmdldFN0eWxlTW9kZWwoby5zdHlsZUlkKSl9fX0seyIuLi8uLi8uLi91dGlscy91dGlscyI6MjcsIi4uL2Jhc2UteGZvcm0iOjMyfV0sOTM6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giKSxzPWEoIi4uLy4uLy4uL3V0aWxzL3V0aWxzIiksbz1hKCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiKSxyPWEoIi4uL2Jhc2UteGZvcm0iKSx0PWEoIi4uLy4uLy4uL2RvYy9yYW5nZSIpO2Z1bmN0aW9uIGUobixpLGYsYyl7Y29uc3QgdT1pW2ZdO3UhPT12b2lkIDA/bltmXT11OmMhPT12b2lkIDAmJihuW2ZdPWMpfWZ1bmN0aW9uIGwobixpLGYsYyl7Y29uc3QgdT1pW2ZdO3UhPT12b2lkIDAmJihuW2ZdPXMucGFyc2VCb29sZWFuKHUpKX1FLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBye2dldCB0YWcoKXtyZXR1cm4iZGF0YVZhbGlkYXRpb25zIn1yZW5kZXIobixpKXtjb25zdCBmPWZ1bmN0aW9uKGMpe2NvbnN0IHU9bS5tYXAoYywodyxfKT0+KHthZGRyZXNzOl8sZGF0YVZhbGlkYXRpb246dyxtYXJrZWQ6ITF9KSkuc29ydCgodyxfKT0+bS5zdHJjbXAody5hZGRyZXNzLF8uYWRkcmVzcykpLGQ9bS5rZXlCeSh1LCJhZGRyZXNzIiksaD0odyxfLEEpPT57Zm9yKGxldCBQPTA7UDxfO1ArKyl7Y29uc3QgTD1vLmVuY29kZUFkZHJlc3Mody5yb3crUCxBKTtpZighY1tMXXx8IW0uaXNFcXVhbChjW3cuYWRkcmVzc10sY1tMXSkpcmV0dXJuITF9cmV0dXJuITB9O3JldHVybiB1Lm1hcCh3PT57aWYoIXcubWFya2VkKXtjb25zdCBfPW8uZGVjb2RlRXgody5hZGRyZXNzKTtpZihfLmRpbWVuc2lvbnMpcmV0dXJuIGRbXy5kaW1lbnNpb25zXS5tYXJrZWQ9ITAsey4uLncuZGF0YVZhbGlkYXRpb24sc3FyZWY6dy5hZGRyZXNzfTtsZXQgQT0xLFA9by5lbmNvZGVBZGRyZXNzKF8ucm93K0EsXy5jb2wpO2Zvcig7Y1tQXSYmbS5pc0VxdWFsKHcuZGF0YVZhbGlkYXRpb24sY1tQXSk7KUErKyxQPW8uZW5jb2RlQWRkcmVzcyhfLnJvdytBLF8uY29sKTtsZXQgTD0xO2Zvcig7aChfLEEsXy5jb2wrTCk7KUwrKztmb3IobGV0IE49MDtOPEE7TisrKWZvcihsZXQgRD0wO0Q8TDtEKyspUD1vLmVuY29kZUFkZHJlc3MoXy5yb3crTixfLmNvbCtEKSxkW1BdLm1hcmtlZD0hMDtpZihBPjF8fEw+MSl7Y29uc3QgTj1fLnJvdysoQS0xKSxEPV8uY29sKyhMLTEpO3JldHVybnsuLi53LmRhdGFWYWxpZGF0aW9uLHNxcmVmOmAke3cuYWRkcmVzc306JHtvLmVuY29kZUFkZHJlc3MoTixEKX1gfX1yZXR1cm57Li4udy5kYXRhVmFsaWRhdGlvbixzcXJlZjp3LmFkZHJlc3N9fXJldHVybiBudWxsfSkuZmlsdGVyKEJvb2xlYW4pfShpKTtmLmxlbmd0aCYmKG4ub3Blbk5vZGUoImRhdGFWYWxpZGF0aW9ucyIse2NvdW50OmYubGVuZ3RofSksZi5mb3JFYWNoKGM9PntuLm9wZW5Ob2RlKCJkYXRhVmFsaWRhdGlvbiIpLGMudHlwZSE9PSJhbnkiJiYobi5hZGRBdHRyaWJ1dGUoInR5cGUiLGMudHlwZSksYy5vcGVyYXRvciYmYy50eXBlIT09Imxpc3QiJiZjLm9wZXJhdG9yIT09ImJldHdlZW4iJiZuLmFkZEF0dHJpYnV0ZSgib3BlcmF0b3IiLGMub3BlcmF0b3IpLGMuYWxsb3dCbGFuayYmbi5hZGRBdHRyaWJ1dGUoImFsbG93QmxhbmsiLCIxIikpLGMuc2hvd0lucHV0TWVzc2FnZSYmbi5hZGRBdHRyaWJ1dGUoInNob3dJbnB1dE1lc3NhZ2UiLCIxIiksYy5wcm9tcHRUaXRsZSYmbi5hZGRBdHRyaWJ1dGUoInByb21wdFRpdGxlIixjLnByb21wdFRpdGxlKSxjLnByb21wdCYmbi5hZGRBdHRyaWJ1dGUoInByb21wdCIsYy5wcm9tcHQpLGMuc2hvd0Vycm9yTWVzc2FnZSYmbi5hZGRBdHRyaWJ1dGUoInNob3dFcnJvck1lc3NhZ2UiLCIxIiksYy5lcnJvclN0eWxlJiZuLmFkZEF0dHJpYnV0ZSgiZXJyb3JTdHlsZSIsYy5lcnJvclN0eWxlKSxjLmVycm9yVGl0bGUmJm4uYWRkQXR0cmlidXRlKCJlcnJvclRpdGxlIixjLmVycm9yVGl0bGUpLGMuZXJyb3ImJm4uYWRkQXR0cmlidXRlKCJlcnJvciIsYy5lcnJvciksbi5hZGRBdHRyaWJ1dGUoInNxcmVmIixjLnNxcmVmKSwoYy5mb3JtdWxhZXx8W10pLmZvckVhY2goKHUsZCk9PntuLm9wZW5Ob2RlKCJmb3JtdWxhIisoZCsxKSksYy50eXBlPT09ImRhdGUiP24ud3JpdGVUZXh0KHMuZGF0ZVRvRXhjZWwobmV3IERhdGUodSkpKTpuLndyaXRlVGV4dCh1KSxuLmNsb3NlTm9kZSgpfSksbi5jbG9zZU5vZGUoKX0pLG4uY2xvc2VOb2RlKCkpfXBhcnNlT3BlbihuKXtzd2l0Y2gobi5uYW1lKXtjYXNlImRhdGFWYWxpZGF0aW9ucyI6cmV0dXJuIHRoaXMubW9kZWw9e30sITA7Y2FzZSJkYXRhVmFsaWRhdGlvbiI6e3RoaXMuX2FkZHJlc3M9bi5hdHRyaWJ1dGVzLnNxcmVmO2NvbnN0IGk9e3R5cGU6bi5hdHRyaWJ1dGVzLnR5cGV8fCJhbnkiLGZvcm11bGFlOltdfTtzd2l0Y2gobi5hdHRyaWJ1dGVzLnR5cGUmJmwoaSxuLmF0dHJpYnV0ZXMsImFsbG93QmxhbmsiKSxsKGksbi5hdHRyaWJ1dGVzLCJzaG93SW5wdXRNZXNzYWdlIiksbChpLG4uYXR0cmlidXRlcywic2hvd0Vycm9yTWVzc2FnZSIpLGkudHlwZSl7Y2FzZSJhbnkiOmNhc2UibGlzdCI6Y2FzZSJjdXN0b20iOmJyZWFrO2RlZmF1bHQ6ZShpLG4uYXR0cmlidXRlcywib3BlcmF0b3IiLCJiZXR3ZWVuIil9cmV0dXJuIGUoaSxuLmF0dHJpYnV0ZXMsInByb21wdFRpdGxlIiksZShpLG4uYXR0cmlidXRlcywicHJvbXB0IiksZShpLG4uYXR0cmlidXRlcywiZXJyb3JTdHlsZSIpLGUoaSxuLmF0dHJpYnV0ZXMsImVycm9yVGl0bGUiKSxlKGksbi5hdHRyaWJ1dGVzLCJlcnJvciIpLHRoaXMuX2RhdGFWYWxpZGF0aW9uPWksITB9Y2FzZSJmb3JtdWxhMSI6Y2FzZSJmb3JtdWxhMiI6cmV0dXJuIHRoaXMuX2Zvcm11bGE9W10sITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KG4pe3RoaXMuX2Zvcm11bGEmJnRoaXMuX2Zvcm11bGEucHVzaChuKX1wYXJzZUNsb3NlKG4pe3N3aXRjaChuKXtjYXNlImRhdGFWYWxpZGF0aW9ucyI6cmV0dXJuITE7Y2FzZSJkYXRhVmFsaWRhdGlvbiI6cmV0dXJuIHRoaXMuX2RhdGFWYWxpZGF0aW9uLmZvcm11bGFlJiZ0aGlzLl9kYXRhVmFsaWRhdGlvbi5mb3JtdWxhZS5sZW5ndGh8fChkZWxldGUgdGhpcy5fZGF0YVZhbGlkYXRpb24uZm9ybXVsYWUsZGVsZXRlIHRoaXMuX2RhdGFWYWxpZGF0aW9uLm9wZXJhdG9yKSwodGhpcy5fYWRkcmVzcy5zcGxpdCgvXHMrL2cpfHxbXSkuZm9yRWFjaChpPT57aS5pbmNsdWRlcygiOiIpP25ldyB0KGkpLmZvckVhY2hBZGRyZXNzKGY9Pnt0aGlzLm1vZGVsW2ZdPXRoaXMuX2RhdGFWYWxpZGF0aW9ufSk6dGhpcy5tb2RlbFtpXT10aGlzLl9kYXRhVmFsaWRhdGlvbn0pLCEwO2Nhc2UiZm9ybXVsYTEiOmNhc2UiZm9ybXVsYTIiOntsZXQgaT10aGlzLl9mb3JtdWxhLmpvaW4oIiIpO3N3aXRjaCh0aGlzLl9kYXRhVmFsaWRhdGlvbi50eXBlKXtjYXNlIndob2xlIjpjYXNlInRleHRMZW5ndGgiOmk9cGFyc2VJbnQoaSwxMCk7YnJlYWs7Y2FzZSJkZWNpbWFsIjppPXBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJkYXRlIjppPXMuZXhjZWxUb0RhdGUocGFyc2VGbG9hdChpKSl9cmV0dXJuIHRoaXMuX2RhdGFWYWxpZGF0aW9uLmZvcm11bGFlLnB1c2goaSksdGhpcy5fZm9ybXVsYT12b2lkIDAsITB9ZGVmYXVsdDpyZXR1cm4hMH19fX0seyIuLi8uLi8uLi9kb2MvcmFuZ2UiOjEwLCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIjoyNiwiLi4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMn1dLDk0OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtnZXQgdGFnKCl7cmV0dXJuImRpbWVuc2lvbiJ9cmVuZGVyKHMsbyl7byYmcy5sZWFmTm9kZSgiZGltZW5zaW9uIix7cmVmOm99KX1wYXJzZU9wZW4ocyl7cmV0dXJuIHMubmFtZT09PSJkaW1lbnNpb24iJiYodGhpcy5tb2RlbD1zLmF0dHJpYnV0ZXMucmVmLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw5NTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJkcmF3aW5nIn1yZW5kZXIocyxvKXtvJiZzLmxlYWZOb2RlKHRoaXMudGFnLHsicjppZCI6by5ySWR9KX1wYXJzZU9wZW4ocyl7c3dpdGNoKHMubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD17cklkOnMuYXR0cmlidXRlc1sicjppZCJdfSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw5NjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vY29tcG9zaXRlLXhmb3JtIikscz1hKCIuL2NmLWV4dC9jb25kaXRpb25hbC1mb3JtYXR0aW5ncy1leHQteGZvcm0iKTtjbGFzcyBvIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9eyJ4MTQ6Y29uZGl0aW9uYWxGb3JtYXR0aW5ncyI6dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzPW5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuImV4dCJ9aGFzQ29udGVudCh0KXtyZXR1cm4gdGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzLmhhc0NvbnRlbnQodC5jb25kaXRpb25hbEZvcm1hdHRpbmdzKX1wcmVwYXJlKHQsZSl7dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzLnByZXBhcmUodC5jb25kaXRpb25hbEZvcm1hdHRpbmdzLGUpfXJlbmRlcih0LGUpe3Qub3Blbk5vZGUoImV4dCIse3VyaToiezc4QzBEOTMxLTY0MzctNDA3ZC1BOEVFLUYwQUFENzUzOUU2NX0iLCJ4bWxuczp4MTQiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9tYWluIn0pLHRoaXMuY29uZGl0aW9uYWxGb3JtYXR0aW5ncy5yZW5kZXIodCxlLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MpLHQuY2xvc2VOb2RlKCl9Y3JlYXRlTmV3TW9kZWwoKXtyZXR1cm57fX1vblBhcnNlckNsb3NlKHQsZSl7dGhpcy5tb2RlbFt0XT1lLm1vZGVsfX1FLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17ZXh0OnRoaXMuZXh0PW5ldyBvfX1nZXQgdGFnKCl7cmV0dXJuImV4dExzdCJ9cHJlcGFyZShyLHQpe3RoaXMuZXh0LnByZXBhcmUocix0KX1oYXNDb250ZW50KHIpe3JldHVybiB0aGlzLmV4dC5oYXNDb250ZW50KHIpfXJlbmRlcihyLHQpe3RoaXMuaGFzQ29udGVudCh0KSYmKHIub3Blbk5vZGUoImV4dExzdCIpLHRoaXMuZXh0LnJlbmRlcihyLHQpLHIuY2xvc2VOb2RlKCkpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue319b25QYXJzZXJDbG9zZShyLHQpe09iamVjdC5hc3NpZ24odGhpcy5tb2RlbCx0Lm1vZGVsKX19fSx7Ii4uL2NvbXBvc2l0ZS14Zm9ybSI6NDgsIi4vY2YtZXh0L2NvbmRpdGlvbmFsLWZvcm1hdHRpbmdzLWV4dC14Zm9ybSI6Nzh9XSw5NzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJoZWFkZXJGb290ZXIifXJlbmRlcihzLG8pe2lmKG8pe3MuYWRkUm9sbGJhY2soKTtsZXQgcj0hMTtzLm9wZW5Ob2RlKCJoZWFkZXJGb290ZXIiKSxvLmRpZmZlcmVudEZpcnN0JiYocy5hZGRBdHRyaWJ1dGUoImRpZmZlcmVudEZpcnN0IiwiMSIpLHI9ITApLG8uZGlmZmVyZW50T2RkRXZlbiYmKHMuYWRkQXR0cmlidXRlKCJkaWZmZXJlbnRPZGRFdmVuIiwiMSIpLHI9ITApLG8ub2RkSGVhZGVyJiZ0eXBlb2Ygby5vZGRIZWFkZXI9PSJzdHJpbmciJiYocy5sZWFmTm9kZSgib2RkSGVhZGVyIixudWxsLG8ub2RkSGVhZGVyKSxyPSEwKSxvLm9kZEZvb3RlciYmdHlwZW9mIG8ub2RkRm9vdGVyPT0ic3RyaW5nIiYmKHMubGVhZk5vZGUoIm9kZEZvb3RlciIsbnVsbCxvLm9kZEZvb3Rlcikscj0hMCksby5ldmVuSGVhZGVyJiZ0eXBlb2Ygby5ldmVuSGVhZGVyPT0ic3RyaW5nIiYmKHMubGVhZk5vZGUoImV2ZW5IZWFkZXIiLG51bGwsby5ldmVuSGVhZGVyKSxyPSEwKSxvLmV2ZW5Gb290ZXImJnR5cGVvZiBvLmV2ZW5Gb290ZXI9PSJzdHJpbmciJiYocy5sZWFmTm9kZSgiZXZlbkZvb3RlciIsbnVsbCxvLmV2ZW5Gb290ZXIpLHI9ITApLG8uZmlyc3RIZWFkZXImJnR5cGVvZiBvLmZpcnN0SGVhZGVyPT0ic3RyaW5nIiYmKHMubGVhZk5vZGUoImZpcnN0SGVhZGVyIixudWxsLG8uZmlyc3RIZWFkZXIpLHI9ITApLG8uZmlyc3RGb290ZXImJnR5cGVvZiBvLmZpcnN0Rm9vdGVyPT0ic3RyaW5nIiYmKHMubGVhZk5vZGUoImZpcnN0Rm9vdGVyIixudWxsLG8uZmlyc3RGb290ZXIpLHI9ITApLHI/KHMuY2xvc2VOb2RlKCkscy5jb21taXQoKSk6cy5yb2xsYmFjaygpfX1wYXJzZU9wZW4ocyl7c3dpdGNoKHMubmFtZSl7Y2FzZSJoZWFkZXJGb290ZXIiOnJldHVybiB0aGlzLm1vZGVsPXt9LHMuYXR0cmlidXRlcy5kaWZmZXJlbnRGaXJzdCYmKHRoaXMubW9kZWwuZGlmZmVyZW50Rmlyc3Q9cGFyc2VJbnQocy5hdHRyaWJ1dGVzLmRpZmZlcmVudEZpcnN0LDApPT09MSkscy5hdHRyaWJ1dGVzLmRpZmZlcmVudE9kZEV2ZW4mJih0aGlzLm1vZGVsLmRpZmZlcmVudE9kZEV2ZW49cGFyc2VJbnQocy5hdHRyaWJ1dGVzLmRpZmZlcmVudE9kZEV2ZW4sMCk9PT0xKSwhMDtjYXNlIm9kZEhlYWRlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9Im9kZEhlYWRlciIsITA7Y2FzZSJvZGRGb290ZXIiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPSJvZGRGb290ZXIiLCEwO2Nhc2UiZXZlbkhlYWRlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9ImV2ZW5IZWFkZXIiLCEwO2Nhc2UiZXZlbkZvb3RlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9ImV2ZW5Gb290ZXIiLCEwO2Nhc2UiZmlyc3RIZWFkZXIiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPSJmaXJzdEhlYWRlciIsITA7Y2FzZSJmaXJzdEZvb3RlciI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9ImZpcnN0Rm9vdGVyIiwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQocyl7c3dpdGNoKHRoaXMuY3VycmVudE5vZGUpe2Nhc2Uib2RkSGVhZGVyIjp0aGlzLm1vZGVsLm9kZEhlYWRlcj1zO2JyZWFrO2Nhc2Uib2RkRm9vdGVyIjp0aGlzLm1vZGVsLm9kZEZvb3Rlcj1zO2JyZWFrO2Nhc2UiZXZlbkhlYWRlciI6dGhpcy5tb2RlbC5ldmVuSGVhZGVyPXM7YnJlYWs7Y2FzZSJldmVuRm9vdGVyIjp0aGlzLm1vZGVsLmV2ZW5Gb290ZXI9czticmVhaztjYXNlImZpcnN0SGVhZGVyIjp0aGlzLm1vZGVsLmZpcnN0SGVhZGVyPXM7YnJlYWs7Y2FzZSJmaXJzdEZvb3RlciI6dGhpcy5tb2RlbC5maXJzdEZvb3Rlcj1zfX1wYXJzZUNsb3NlKCl7c3dpdGNoKHRoaXMuY3VycmVudE5vZGUpe2Nhc2Uib2RkSGVhZGVyIjpjYXNlIm9kZEZvb3RlciI6Y2FzZSJldmVuSGVhZGVyIjpjYXNlImV2ZW5Gb290ZXIiOmNhc2UiZmlyc3RIZWFkZXIiOmNhc2UiZmlyc3RGb290ZXIiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPXZvaWQgMCwhMDtkZWZhdWx0OnJldHVybiExfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sOTg6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4iaHlwZXJsaW5rIn1yZW5kZXIocyxvKXt0aGlzLmlzSW50ZXJuYWxMaW5rKG8pP3MubGVhZk5vZGUoImh5cGVybGluayIse3JlZjpvLmFkZHJlc3MsInI6aWQiOm8ucklkLHRvb2x0aXA6by50b29sdGlwLGxvY2F0aW9uOm8udGFyZ2V0fSk6cy5sZWFmTm9kZSgiaHlwZXJsaW5rIix7cmVmOm8uYWRkcmVzcywicjppZCI6by5ySWQsdG9vbHRpcDpvLnRvb2x0aXB9KX1wYXJzZU9wZW4ocyl7cmV0dXJuIHMubmFtZT09PSJoeXBlcmxpbmsiJiYodGhpcy5tb2RlbD17YWRkcmVzczpzLmF0dHJpYnV0ZXMucmVmLHJJZDpzLmF0dHJpYnV0ZXNbInI6aWQiXSx0b29sdGlwOnMuYXR0cmlidXRlcy50b29sdGlwfSxzLmF0dHJpYnV0ZXMubG9jYXRpb24mJih0aGlzLm1vZGVsLnRhcmdldD1zLmF0dHJpYnV0ZXMubG9jYXRpb24pLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfWlzSW50ZXJuYWxMaW5rKHMpe3JldHVybiBzLnRhcmdldCYmL15bXiFdKyFbYS16QS1aXStbXGRdKyQvLnRlc3Qocy50YXJnZXQpfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSw5OTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJtZXJnZUNlbGwifXJlbmRlcihzLG8pe3MubGVhZk5vZGUoIm1lcmdlQ2VsbCIse3JlZjpvfSl9cGFyc2VPcGVuKHMpe3JldHVybiBzLm5hbWU9PT0ibWVyZ2VDZWxsIiYmKHRoaXMubW9kZWw9cy5hdHRyaWJ1dGVzLnJlZiwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTAwOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIikscz1hKCIuLi8uLi8uLi9kb2MvcmFuZ2UiKSxvPWEoIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSIpLHI9YSgiLi4vLi4vLi4vZG9jL2VudW1zIik7RS5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tZXJnZXM9e319YWRkKHQpe2lmKHRoaXMubWVyZ2VzW3QubWFzdGVyXSl0aGlzLm1lcmdlc1t0Lm1hc3Rlcl0uZXhwYW5kVG9BZGRyZXNzKHQuYWRkcmVzcyk7ZWxzZXtjb25zdCBlPWAke3QubWFzdGVyfToke3QuYWRkcmVzc31gO3RoaXMubWVyZ2VzW3QubWFzdGVyXT1uZXcgcyhlKX19Z2V0IG1lcmdlQ2VsbHMoKXtyZXR1cm4gbS5tYXAodGhpcy5tZXJnZXMsdD0+dC5yYW5nZSl9cmVjb25jaWxlKHQsZSl7bS5lYWNoKHQsbD0+e2NvbnN0IG49by5kZWNvZGUobCk7Zm9yKGxldCBpPW4udG9wO2k8PW4uYm90dG9tO2krKyl7Y29uc3QgZj1lW2ktMV07Zm9yKGxldCBjPW4ubGVmdDtjPD1uLnJpZ2h0O2MrKyl7Y29uc3QgdT1mLmNlbGxzW2MtMV07dT91LnR5cGU9PT1yLlZhbHVlVHlwZS5NZXJnZSYmKHUubWFzdGVyPW4udGwpOmYuY2VsbHNbY109e3R5cGU6ci5WYWx1ZVR5cGUuTnVsbCxhZGRyZXNzOm8uZW5jb2RlQWRkcmVzcyhpLGMpfX19fSl9Z2V0TWFzdGVyQWRkcmVzcyh0KXtjb25zdCBlPXRoaXMuaGFzaFt0XTtyZXR1cm4gZSYmZS50bH19fSx7Ii4uLy4uLy4uL2RvYy9lbnVtcyI6NywiLi4vLi4vLi4vZG9jL3JhbmdlIjoxMCwiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIjoxOSwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCI6MjZ9XSwxMDE6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPW89Pm8hPT12b2lkIDA7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtnZXQgdGFnKCl7cmV0dXJuIm91dGxpbmVQciJ9cmVuZGVyKG8scil7cmV0dXJuISghcnx8IXMoci5zdW1tYXJ5QmVsb3cpJiYhcyhyLnN1bW1hcnlSaWdodCkpJiYoby5sZWFmTm9kZSh0aGlzLnRhZyx7c3VtbWFyeUJlbG93OnMoci5zdW1tYXJ5QmVsb3cpP051bWJlcihyLnN1bW1hcnlCZWxvdyk6dm9pZCAwLHN1bW1hcnlSaWdodDpzKHIuc3VtbWFyeVJpZ2h0KT9OdW1iZXIoci5zdW1tYXJ5UmlnaHQpOnZvaWQgMH0pLCEwKX1wYXJzZU9wZW4obyl7cmV0dXJuIG8ubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17c3VtbWFyeUJlbG93OnMoby5hdHRyaWJ1dGVzLnN1bW1hcnlCZWxvdyk/ISFOdW1iZXIoby5hdHRyaWJ1dGVzLnN1bW1hcnlCZWxvdyk6dm9pZCAwLHN1bW1hcnlSaWdodDpzKG8uYXR0cmlidXRlcy5zdW1tYXJ5UmlnaHQpPyEhTnVtYmVyKG8uYXR0cmlidXRlcy5zdW1tYXJ5UmlnaHQpOnZvaWQgMH0sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDEwMjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJicmsifXJlbmRlcihzLG8pe3MubGVhZk5vZGUoImJyayIsbyl9cGFyc2VPcGVuKHMpe3JldHVybiBzLm5hbWU9PT0iYnJrIiYmKHRoaXMubW9kZWw9cy5hdHRyaWJ1dGVzLnJlZiwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTAzOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIikscz1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tnZXQgdGFnKCl7cmV0dXJuInBhZ2VNYXJnaW5zIn1yZW5kZXIobyxyKXtpZihyKXtjb25zdCB0PXtsZWZ0OnIubGVmdCxyaWdodDpyLnJpZ2h0LHRvcDpyLnRvcCxib3R0b206ci5ib3R0b20saGVhZGVyOnIuaGVhZGVyLGZvb3RlcjpyLmZvb3Rlcn07bS5zb21lKHQsZT0+ZSE9PXZvaWQgMCkmJm8ubGVhZk5vZGUodGhpcy50YWcsdCl9fXBhcnNlT3BlbihvKXtzd2l0Y2goby5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtsZWZ0OnBhcnNlRmxvYXQoby5hdHRyaWJ1dGVzLmxlZnR8fC43KSxyaWdodDpwYXJzZUZsb2F0KG8uYXR0cmlidXRlcy5yaWdodHx8LjcpLHRvcDpwYXJzZUZsb2F0KG8uYXR0cmlidXRlcy50b3B8fC43NSksYm90dG9tOnBhcnNlRmxvYXQoby5hdHRyaWJ1dGVzLmJvdHRvbXx8Ljc1KSxoZWFkZXI6cGFyc2VGbG9hdChvLmF0dHJpYnV0ZXMuaGVhZGVyfHwuMyksZm9vdGVyOnBhcnNlRmxvYXQoby5hdHRyaWJ1dGVzLmZvb3Rlcnx8LjMpfSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCI6MjYsIi4uL2Jhc2UteGZvcm0iOjMyfV0sMTA0OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtnZXQgdGFnKCl7cmV0dXJuInBhZ2VTZXRVcFByIn1yZW5kZXIocyxvKXtyZXR1cm4hKCFvfHwhby5maXRUb1BhZ2UpJiYocy5sZWFmTm9kZSh0aGlzLnRhZyx7Zml0VG9QYWdlOm8uZml0VG9QYWdlPyIxIjp2b2lkIDB9KSwhMCl9cGFyc2VPcGVuKHMpe3JldHVybiBzLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMubW9kZWw9e2ZpdFRvUGFnZTpzLmF0dHJpYnV0ZXMuZml0VG9QYWdlPT09IjEifSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTA1OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIikscz1hKCIuLi9iYXNlLXhmb3JtIik7ZnVuY3Rpb24gbyhsKXtyZXR1cm4gbD8iMSI6dm9pZCAwfWZ1bmN0aW9uIHIobCl7c3dpdGNoKGwpe2Nhc2Uib3ZlclRoZW5Eb3duIjpyZXR1cm4gbDtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gdChsKXtzd2l0Y2gobCl7Y2FzZSJhdEVuZCI6Y2FzZSJhc0Rpc3BseWVkIjpyZXR1cm4gbDtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gZShsKXtzd2l0Y2gobCl7Y2FzZSJkYXNoIjpjYXNlImJsYW5rIjpjYXNlIk5BIjpyZXR1cm4gbDtkZWZhdWx0OnJldHVybn19RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tnZXQgdGFnKCl7cmV0dXJuInBhZ2VTZXR1cCJ9cmVuZGVyKGwsbil7aWYobil7Y29uc3QgaT17cGFwZXJTaXplOm4ucGFwZXJTaXplLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24saG9yaXpvbnRhbERwaTpuLmhvcml6b250YWxEcGksdmVydGljYWxEcGk6bi52ZXJ0aWNhbERwaSxwYWdlT3JkZXI6cihuLnBhZ2VPcmRlciksYmxhY2tBbmRXaGl0ZTpvKG4uYmxhY2tBbmRXaGl0ZSksZHJhZnQ6byhuLmRyYWZ0KSxjZWxsQ29tbWVudHM6dChuLmNlbGxDb21tZW50cyksZXJyb3JzOmUobi5lcnJvcnMpLHNjYWxlOm4uc2NhbGUsZml0VG9XaWR0aDpuLmZpdFRvV2lkdGgsZml0VG9IZWlnaHQ6bi5maXRUb0hlaWdodCxmaXJzdFBhZ2VOdW1iZXI6bi5maXJzdFBhZ2VOdW1iZXIsdXNlRmlyc3RQYWdlTnVtYmVyOm8obi5maXJzdFBhZ2VOdW1iZXIpLHVzZVByaW50ZXJEZWZhdWx0czpvKG4udXNlUHJpbnRlckRlZmF1bHRzKSxjb3BpZXM6bi5jb3BpZXN9O20uc29tZShpLGY9PmYhPT12b2lkIDApJiZsLmxlYWZOb2RlKHRoaXMudGFnLGkpfX1wYXJzZU9wZW4obCl7c3dpdGNoKGwubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD17cGFwZXJTaXplOihuPWwuYXR0cmlidXRlcy5wYXBlclNpemUsbiE9PXZvaWQgMD9wYXJzZUludChuLDEwKTp2b2lkIDApLG9yaWVudGF0aW9uOmwuYXR0cmlidXRlcy5vcmllbnRhdGlvbnx8InBvcnRyYWl0Iixob3Jpem9udGFsRHBpOnBhcnNlSW50KGwuYXR0cmlidXRlcy5ob3Jpem9udGFsRHBpfHwiNDI5NDk2NzI5NSIsMTApLHZlcnRpY2FsRHBpOnBhcnNlSW50KGwuYXR0cmlidXRlcy52ZXJ0aWNhbERwaXx8IjQyOTQ5NjcyOTUiLDEwKSxwYWdlT3JkZXI6bC5hdHRyaWJ1dGVzLnBhZ2VPcmRlcnx8ImRvd25UaGVuT3ZlciIsYmxhY2tBbmRXaGl0ZTpsLmF0dHJpYnV0ZXMuYmxhY2tBbmRXaGl0ZT09PSIxIixkcmFmdDpsLmF0dHJpYnV0ZXMuZHJhZnQ9PT0iMSIsY2VsbENvbW1lbnRzOmwuYXR0cmlidXRlcy5jZWxsQ29tbWVudHN8fCJOb25lIixlcnJvcnM6bC5hdHRyaWJ1dGVzLmVycm9yc3x8ImRpc3BsYXllZCIsc2NhbGU6cGFyc2VJbnQobC5hdHRyaWJ1dGVzLnNjYWxlfHwiMTAwIiwxMCksZml0VG9XaWR0aDpwYXJzZUludChsLmF0dHJpYnV0ZXMuZml0VG9XaWR0aHx8IjEiLDEwKSxmaXRUb0hlaWdodDpwYXJzZUludChsLmF0dHJpYnV0ZXMuZml0VG9IZWlnaHR8fCIxIiwxMCksZmlyc3RQYWdlTnVtYmVyOnBhcnNlSW50KGwuYXR0cmlidXRlcy5maXJzdFBhZ2VOdW1iZXJ8fCIxIiwxMCksdXNlRmlyc3RQYWdlTnVtYmVyOmwuYXR0cmlidXRlcy51c2VGaXJzdFBhZ2VOdW1iZXI9PT0iMSIsdXNlUHJpbnRlckRlZmF1bHRzOmwuYXR0cmlidXRlcy51c2VQcmludGVyRGVmYXVsdHM9PT0iMSIsY29waWVzOnBhcnNlSW50KGwuYXR0cmlidXRlcy5jb3BpZXN8fCIxIiwxMCl9LCEwO2RlZmF1bHQ6cmV0dXJuITF9dmFyIG59cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuLi9iYXNlLXhmb3JtIjozMn1dLDEwNjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJwaWN0dXJlIn1yZW5kZXIocyxvKXtvJiZzLmxlYWZOb2RlKHRoaXMudGFnLHsicjppZCI6by5ySWR9KX1wYXJzZU9wZW4ocyl7c3dpdGNoKHMubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD17cklkOnMuYXR0cmlidXRlc1sicjppZCJdfSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMDc6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giKSxzPWEoIi4uL2Jhc2UteGZvcm0iKTtmdW5jdGlvbiBvKHIpe3JldHVybiByPyIxIjp2b2lkIDB9RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tnZXQgdGFnKCl7cmV0dXJuInByaW50T3B0aW9ucyJ9cmVuZGVyKHIsdCl7aWYodCl7Y29uc3QgZT17aGVhZGluZ3M6byh0LnNob3dSb3dDb2xIZWFkZXJzKSxncmlkTGluZXM6byh0LnNob3dHcmlkTGluZXMpLGhvcml6b250YWxDZW50ZXJlZDpvKHQuaG9yaXpvbnRhbENlbnRlcmVkKSx2ZXJ0aWNhbENlbnRlcmVkOm8odC52ZXJ0aWNhbENlbnRlcmVkKX07bS5zb21lKGUsbD0+bCE9PXZvaWQgMCkmJnIubGVhZk5vZGUodGhpcy50YWcsZSl9fXBhcnNlT3BlbihyKXtzd2l0Y2goci5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtzaG93Um93Q29sSGVhZGVyczpyLmF0dHJpYnV0ZXMuaGVhZGluZ3M9PT0iMSIsc2hvd0dyaWRMaW5lczpyLmF0dHJpYnV0ZXMuZ3JpZExpbmVzPT09IjEiLGhvcml6b250YWxDZW50ZXJlZDpyLmF0dHJpYnV0ZXMuaG9yaXpvbnRhbENlbnRlcmVkPT09IjEiLHZlcnRpY2FsQ2VudGVyZWQ6ci5hdHRyaWJ1dGVzLnZlcnRpY2FsQ2VudGVyZWQ9PT0iMSJ9LCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIjoyNiwiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMDg6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4vcGFnZS1icmVha3MteGZvcm0iKSxzPWEoIi4uL2xpc3QteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKCl7c3VwZXIoe3RhZzoicm93QnJlYWtzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBtfSl9cmVuZGVyKG8scil7aWYociYmci5sZW5ndGgpe28ub3Blbk5vZGUodGhpcy50YWcsdGhpcy4kKSx0aGlzLmNvdW50JiYoby5hZGRBdHRyaWJ1dGUodGhpcy4kY291bnQsci5sZW5ndGgpLG8uYWRkQXR0cmlidXRlKCJtYW51YWxCcmVha0NvdW50IixyLmxlbmd0aCkpO2NvbnN0e2NoaWxkWGZvcm06dH09dGhpcztyLmZvckVhY2goZT0+e3QucmVuZGVyKG8sZSl9KSxvLmNsb3NlTm9kZSgpfWVsc2UgdGhpcy5lbXB0eSYmby5sZWFmTm9kZSh0aGlzLnRhZyl9fX0seyIuLi9saXN0LXhmb3JtIjo3MSwiLi9wYWdlLWJyZWFrcy14Zm9ybSI6MTAyfV0sMTA5OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIikscz1hKCIuLi8uLi8uLi91dGlscy91dGlscyIpLG89YSgiLi9jZWxsLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3RvcihyKXtzdXBlcigpLHRoaXMubWF4SXRlbXM9ciYmci5tYXhJdGVtcyx0aGlzLm1hcD17YzpuZXcgb319Z2V0IHRhZygpe3JldHVybiJyb3cifXByZXBhcmUocix0KXtjb25zdCBlPXQuc3R5bGVzLmFkZFN0eWxlTW9kZWwoci5zdHlsZSk7ZSYmKHIuc3R5bGVJZD1lKTtjb25zdCBsPXRoaXMubWFwLmM7ci5jZWxscy5mb3JFYWNoKG49PntsLnByZXBhcmUobix0KX0pfXJlbmRlcihyLHQsZSl7ci5vcGVuTm9kZSgicm93Iiksci5hZGRBdHRyaWJ1dGUoInIiLHQubnVtYmVyKSx0LmhlaWdodCYmKHIuYWRkQXR0cmlidXRlKCJodCIsdC5oZWlnaHQpLHIuYWRkQXR0cmlidXRlKCJjdXN0b21IZWlnaHQiLCIxIikpLHQuaGlkZGVuJiZyLmFkZEF0dHJpYnV0ZSgiaGlkZGVuIiwiMSIpLHQubWluPjAmJnQubWF4PjAmJnQubWluPD10Lm1heCYmci5hZGRBdHRyaWJ1dGUoInNwYW5zIixgJHt0Lm1pbn06JHt0Lm1heH1gKSx0LnN0eWxlSWQmJihyLmFkZEF0dHJpYnV0ZSgicyIsdC5zdHlsZUlkKSxyLmFkZEF0dHJpYnV0ZSgiY3VzdG9tRm9ybWF0IiwiMSIpKSxyLmFkZEF0dHJpYnV0ZSgieDE0YWM6ZHlEZXNjZW50IiwiMC4yNSIpLHQub3V0bGluZUxldmVsJiZyLmFkZEF0dHJpYnV0ZSgib3V0bGluZUxldmVsIix0Lm91dGxpbmVMZXZlbCksdC5jb2xsYXBzZWQmJnIuYWRkQXR0cmlidXRlKCJjb2xsYXBzZWQiLCIxIik7Y29uc3QgbD10aGlzLm1hcC5jO3QuY2VsbHMuZm9yRWFjaChuPT57bC5yZW5kZXIocixuLGUpfSksci5jbG9zZU5vZGUoKX1wYXJzZU9wZW4ocil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihyKSwhMDtpZihyLm5hbWU9PT0icm93Iil7dGhpcy5udW1Sb3dzU2Vlbis9MTtjb25zdCB0PXIuYXR0cmlidXRlcy5zcGFucz9yLmF0dHJpYnV0ZXMuc3BhbnMuc3BsaXQoIjoiKS5tYXAobD0+cGFyc2VJbnQobCwxMCkpOlt2b2lkIDAsdm9pZCAwXSxlPXRoaXMubW9kZWw9e251bWJlcjpwYXJzZUludChyLmF0dHJpYnV0ZXMuciwxMCksbWluOnRbMF0sbWF4OnRbMV0sY2VsbHM6W119O3JldHVybiByLmF0dHJpYnV0ZXMucyYmKGUuc3R5bGVJZD1wYXJzZUludChyLmF0dHJpYnV0ZXMucywxMCkpLHMucGFyc2VCb29sZWFuKHIuYXR0cmlidXRlcy5oaWRkZW4pJiYoZS5oaWRkZW49ITApLHMucGFyc2VCb29sZWFuKHIuYXR0cmlidXRlcy5iZXN0Rml0KSYmKGUuYmVzdEZpdD0hMCksci5hdHRyaWJ1dGVzLmh0JiYoZS5oZWlnaHQ9cGFyc2VGbG9hdChyLmF0dHJpYnV0ZXMuaHQpKSxyLmF0dHJpYnV0ZXMub3V0bGluZUxldmVsJiYoZS5vdXRsaW5lTGV2ZWw9cGFyc2VJbnQoci5hdHRyaWJ1dGVzLm91dGxpbmVMZXZlbCwxMCkpLHMucGFyc2VCb29sZWFuKHIuYXR0cmlidXRlcy5jb2xsYXBzZWQpJiYoZS5jb2xsYXBzZWQ9ITApLCEwfXJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcFtyLm5hbWVdLCEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITApfXBhcnNlVGV4dChyKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KHIpfXBhcnNlQ2xvc2Uocil7aWYodGhpcy5wYXJzZXIpe2lmKCF0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHIpKXtpZih0aGlzLm1vZGVsLmNlbGxzLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMubWF4SXRlbXMmJnRoaXMubW9kZWwuY2VsbHMubGVuZ3RoPnRoaXMubWF4SXRlbXMpdGhyb3cgbmV3IEVycm9yKGBNYXggY29sdW1uIGNvdW50ICgke3RoaXMubWF4SXRlbXN9KSBleGNlZWRlZGApO3RoaXMucGFyc2VyPXZvaWQgMH1yZXR1cm4hMH1yZXR1cm4hMX1yZWNvbmNpbGUocix0KXtyLnN0eWxlPXIuc3R5bGVJZD90LnN0eWxlcy5nZXRTdHlsZU1vZGVsKHIuc3R5bGVJZCk6e30sci5zdHlsZUlkIT09dm9pZCAwJiYoci5zdHlsZUlkPXZvaWQgMCk7Y29uc3QgZT10aGlzLm1hcC5jO3IuY2VsbHMuZm9yRWFjaChsPT57ZS5yZWNvbmNpbGUobCx0KX0pfX19LHsiLi4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMiwiLi9jZWxsLXhmb3JtIjo3M31dLDExMDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIHN7Z2V0IHRhZygpe3JldHVybiJzaGVldEZvcm1hdFByIn1yZW5kZXIobyxyKXtpZihyKXtjb25zdCB0PXtkZWZhdWx0Um93SGVpZ2h0OnIuZGVmYXVsdFJvd0hlaWdodCxvdXRsaW5lTGV2ZWxSb3c6ci5vdXRsaW5lTGV2ZWxSb3csb3V0bGluZUxldmVsQ29sOnIub3V0bGluZUxldmVsQ29sLCJ4MTRhYzpkeURlc2NlbnQiOnIuZHlEZXNjZW50fTtyLmRlZmF1bHRDb2xXaWR0aCYmKHQuZGVmYXVsdENvbFdpZHRoPXIuZGVmYXVsdENvbFdpZHRoKSxyLmRlZmF1bHRSb3dIZWlnaHQmJnIuZGVmYXVsdFJvd0hlaWdodD09PTE1fHwodC5jdXN0b21IZWlnaHQ9IjEiKSxtLnNvbWUodCxlPT5lIT09dm9pZCAwKSYmby5sZWFmTm9kZSgic2hlZXRGb3JtYXRQciIsdCl9fXBhcnNlT3BlbihvKXtyZXR1cm4gby5uYW1lPT09InNoZWV0Rm9ybWF0UHIiJiYodGhpcy5tb2RlbD17ZGVmYXVsdFJvd0hlaWdodDpwYXJzZUZsb2F0KG8uYXR0cmlidXRlcy5kZWZhdWx0Um93SGVpZ2h0fHwiMCIpLGR5RGVzY2VudDpwYXJzZUZsb2F0KG8uYXR0cmlidXRlc1sieDE0YWM6ZHlEZXNjZW50Il18fCIwIiksb3V0bGluZUxldmVsUm93OnBhcnNlSW50KG8uYXR0cmlidXRlcy5vdXRsaW5lTGV2ZWxSb3d8fCIwIiwxMCksb3V0bGluZUxldmVsQ29sOnBhcnNlSW50KG8uYXR0cmlidXRlcy5vdXRsaW5lTGV2ZWxDb2x8fCIwIiwxMCl9LG8uYXR0cmlidXRlcy5kZWZhdWx0Q29sV2lkdGgmJih0aGlzLm1vZGVsLmRlZmF1bHRDb2xXaWR0aD1wYXJzZUZsb2F0KG8uYXR0cmlidXRlcy5kZWZhdWx0Q29sV2lkdGgpKSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuLi9iYXNlLXhmb3JtIjozMn1dLDExMTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpLHM9YSgiLi4vc3R5bGUvY29sb3IteGZvcm0iKSxvPWEoIi4vcGFnZS1zZXR1cC1wcm9wZXJ0aWVzLXhmb3JtIikscj1hKCIuL291dGxpbmUtcHJvcGVydGllcy14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXt0YWJDb2xvcjpuZXcgcygidGFiQ29sb3IiKSxwYWdlU2V0VXBQcjpuZXcgbyxvdXRsaW5lUHI6bmV3IHJ9fWdldCB0YWcoKXtyZXR1cm4ic2hlZXRQciJ9cmVuZGVyKHQsZSl7aWYoZSl7dC5hZGRSb2xsYmFjaygpLHQub3Blbk5vZGUoInNoZWV0UHIiKTtsZXQgbD0hMTtsPXRoaXMubWFwLnRhYkNvbG9yLnJlbmRlcih0LGUudGFiQ29sb3IpfHxsLGw9dGhpcy5tYXAucGFnZVNldFVwUHIucmVuZGVyKHQsZS5wYWdlU2V0dXApfHxsLGw9dGhpcy5tYXAub3V0bGluZVByLnJlbmRlcih0LGUub3V0bGluZVByb3BlcnRpZXMpfHxsLGw/KHQuY2xvc2VOb2RlKCksdC5jb21taXQoKSk6dC5yb2xsYmFjaygpfX1wYXJzZU9wZW4odCl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4odCksITApOnQubmFtZT09PXRoaXMudGFnPyh0aGlzLnJlc2V0KCksITApOiEhdGhpcy5tYXBbdC5uYW1lXSYmKHRoaXMucGFyc2VyPXRoaXMubWFwW3QubmFtZV0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwKX1wYXJzZVRleHQodCl7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlVGV4dCh0KSwhMCl9cGFyc2VDbG9zZSh0KXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UodCl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKToodGhpcy5tYXAudGFiQ29sb3IubW9kZWx8fHRoaXMubWFwLnBhZ2VTZXRVcFByLm1vZGVsfHx0aGlzLm1hcC5vdXRsaW5lUHIubW9kZWw/KHRoaXMubW9kZWw9e30sdGhpcy5tYXAudGFiQ29sb3IubW9kZWwmJih0aGlzLm1vZGVsLnRhYkNvbG9yPXRoaXMubWFwLnRhYkNvbG9yLm1vZGVsKSx0aGlzLm1hcC5wYWdlU2V0VXBQci5tb2RlbCYmKHRoaXMubW9kZWwucGFnZVNldHVwPXRoaXMubWFwLnBhZ2VTZXRVcFByLm1vZGVsKSx0aGlzLm1hcC5vdXRsaW5lUHIubW9kZWwmJih0aGlzLm1vZGVsLm91dGxpbmVQcm9wZXJ0aWVzPXRoaXMubWFwLm91dGxpbmVQci5tb2RlbCkpOnRoaXMubW9kZWw9bnVsbCwhMSl9fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi4vc3R5bGUvY29sb3IteGZvcm0iOjEyOCwiLi9vdXRsaW5lLXByb3BlcnRpZXMteGZvcm0iOjEwMSwiLi9wYWdlLXNldHVwLXByb3BlcnRpZXMteGZvcm0iOjEwNH1dLDExMjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCIpLHM9YSgiLi4vYmFzZS14Zm9ybSIpO2Z1bmN0aW9uIG8odCxlKXtyZXR1cm4gdD9lOnZvaWQgMH1mdW5jdGlvbiByKHQsZSl7cmV0dXJuIHQ9PT1lfHx2b2lkIDB9RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tnZXQgdGFnKCl7cmV0dXJuInNoZWV0UHJvdGVjdGlvbiJ9cmVuZGVyKHQsZSl7aWYoZSl7Y29uc3QgbD17c2hlZXQ6byhlLnNoZWV0LCIxIiksc2VsZWN0TG9ja2VkQ2VsbHM6ZS5zZWxlY3RMb2NrZWRDZWxscz09PSExPyIxIjp2b2lkIDAsc2VsZWN0VW5sb2NrZWRDZWxsczplLnNlbGVjdFVubG9ja2VkQ2VsbHM9PT0hMT8iMSI6dm9pZCAwLGZvcm1hdENlbGxzOm8oZS5mb3JtYXRDZWxscywiMCIpLGZvcm1hdENvbHVtbnM6byhlLmZvcm1hdENvbHVtbnMsIjAiKSxmb3JtYXRSb3dzOm8oZS5mb3JtYXRSb3dzLCIwIiksaW5zZXJ0Q29sdW1uczpvKGUuaW5zZXJ0Q29sdW1ucywiMCIpLGluc2VydFJvd3M6byhlLmluc2VydFJvd3MsIjAiKSxpbnNlcnRIeXBlcmxpbmtzOm8oZS5pbnNlcnRIeXBlcmxpbmtzLCIwIiksZGVsZXRlQ29sdW1uczpvKGUuZGVsZXRlQ29sdW1ucywiMCIpLGRlbGV0ZVJvd3M6byhlLmRlbGV0ZVJvd3MsIjAiKSxzb3J0Om8oZS5zb3J0LCIwIiksYXV0b0ZpbHRlcjpvKGUuYXV0b0ZpbHRlciwiMCIpLHBpdm90VGFibGVzOm8oZS5waXZvdFRhYmxlcywiMCIpfTtlLnNoZWV0JiYobC5hbGdvcml0aG1OYW1lPWUuYWxnb3JpdGhtTmFtZSxsLmhhc2hWYWx1ZT1lLmhhc2hWYWx1ZSxsLnNhbHRWYWx1ZT1lLnNhbHRWYWx1ZSxsLnNwaW5Db3VudD1lLnNwaW5Db3VudCxsLm9iamVjdHM9byhlLm9iamVjdHM9PT0hMSwiMSIpLGwuc2NlbmFyaW9zPW8oZS5zY2VuYXJpb3M9PT0hMSwiMSIpKSxtLnNvbWUobCxuPT5uIT09dm9pZCAwKSYmdC5sZWFmTm9kZSh0aGlzLnRhZyxsKX19cGFyc2VPcGVuKHQpe3N3aXRjaCh0Lm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e3NoZWV0OnIodC5hdHRyaWJ1dGVzLnNoZWV0LCIxIiksb2JqZWN0czp0LmF0dHJpYnV0ZXMub2JqZWN0cyE9PSIxIiYmdm9pZCAwLHNjZW5hcmlvczp0LmF0dHJpYnV0ZXMuc2NlbmFyaW9zIT09IjEiJiZ2b2lkIDAsc2VsZWN0TG9ja2VkQ2VsbHM6dC5hdHRyaWJ1dGVzLnNlbGVjdExvY2tlZENlbGxzIT09IjEiJiZ2b2lkIDAsc2VsZWN0VW5sb2NrZWRDZWxsczp0LmF0dHJpYnV0ZXMuc2VsZWN0VW5sb2NrZWRDZWxscyE9PSIxIiYmdm9pZCAwLGZvcm1hdENlbGxzOnIodC5hdHRyaWJ1dGVzLmZvcm1hdENlbGxzLCIwIiksZm9ybWF0Q29sdW1uczpyKHQuYXR0cmlidXRlcy5mb3JtYXRDb2x1bW5zLCIwIiksZm9ybWF0Um93czpyKHQuYXR0cmlidXRlcy5mb3JtYXRSb3dzLCIwIiksaW5zZXJ0Q29sdW1uczpyKHQuYXR0cmlidXRlcy5pbnNlcnRDb2x1bW5zLCIwIiksaW5zZXJ0Um93czpyKHQuYXR0cmlidXRlcy5pbnNlcnRSb3dzLCIwIiksaW5zZXJ0SHlwZXJsaW5rczpyKHQuYXR0cmlidXRlcy5pbnNlcnRIeXBlcmxpbmtzLCIwIiksZGVsZXRlQ29sdW1uczpyKHQuYXR0cmlidXRlcy5kZWxldGVDb2x1bW5zLCIwIiksZGVsZXRlUm93czpyKHQuYXR0cmlidXRlcy5kZWxldGVSb3dzLCIwIiksc29ydDpyKHQuYXR0cmlidXRlcy5zb3J0LCIwIiksYXV0b0ZpbHRlcjpyKHQuYXR0cmlidXRlcy5hdXRvRmlsdGVyLCIwIikscGl2b3RUYWJsZXM6cih0LmF0dHJpYnV0ZXMucGl2b3RUYWJsZXMsIjAiKX0sdC5hdHRyaWJ1dGVzLmFsZ29yaXRobU5hbWUmJih0aGlzLm1vZGVsLmFsZ29yaXRobU5hbWU9dC5hdHRyaWJ1dGVzLmFsZ29yaXRobU5hbWUsdGhpcy5tb2RlbC5oYXNoVmFsdWU9dC5hdHRyaWJ1dGVzLmhhc2hWYWx1ZSx0aGlzLm1vZGVsLnNhbHRWYWx1ZT10LmF0dHJpYnV0ZXMuc2FsdFZhbHVlLHRoaXMubW9kZWwuc3BpbkNvdW50PXBhcnNlSW50KHQuYXR0cmlidXRlcy5zcGluQ291bnQsMTApKSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCI6MjYsIi4uL2Jhc2UteGZvcm0iOjMyfV0sMTEzOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiKSxzPWEoIi4uL2Jhc2UteGZvcm0iKSxvPXtmcm96ZW46ImZyb3plbiIsZnJvemVuU3BsaXQ6ImZyb3plbiIsc3BsaXQ6InNwbGl0In07RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tnZXQgdGFnKCl7cmV0dXJuInNoZWV0VmlldyJ9cHJlcGFyZShyKXtzd2l0Y2goci5zdGF0ZSl7Y2FzZSJmcm96ZW4iOmNhc2Uic3BsaXQiOmJyZWFrO2RlZmF1bHQ6ci5zdGF0ZT0ibm9ybWFsIn19cmVuZGVyKHIsdCl7ci5vcGVuTm9kZSgic2hlZXRWaWV3Iix7d29ya2Jvb2tWaWV3SWQ6dC53b3JrYm9va1ZpZXdJZHx8MH0pO2NvbnN0IGU9ZnVuY3Rpb24oYyx1LGQpe2QmJnIuYWRkQXR0cmlidXRlKGMsdSl9O2xldCBsLG4saSxmO3N3aXRjaChlKCJyaWdodFRvTGVmdCIsIjEiLHQucmlnaHRUb0xlZnQ9PT0hMCksZSgidGFiU2VsZWN0ZWQiLCIxIix0LnRhYlNlbGVjdGVkKSxlKCJzaG93UnVsZXIiLCIwIix0LnNob3dSdWxlcj09PSExKSxlKCJzaG93Um93Q29sSGVhZGVycyIsIjAiLHQuc2hvd1Jvd0NvbEhlYWRlcnM9PT0hMSksZSgic2hvd0dyaWRMaW5lcyIsIjAiLHQuc2hvd0dyaWRMaW5lcz09PSExKSxlKCJ6b29tU2NhbGUiLHQuem9vbVNjYWxlLHQuem9vbVNjYWxlKSxlKCJ6b29tU2NhbGVOb3JtYWwiLHQuem9vbVNjYWxlTm9ybWFsLHQuem9vbVNjYWxlTm9ybWFsKSxlKCJ2aWV3Iix0LnN0eWxlLHQuc3R5bGUpLHQuc3RhdGUpe2Nhc2UiZnJvemVuIjpuPXQueFNwbGl0fHwwLGk9dC55U3BsaXR8fDAsbD10LnRvcExlZnRDZWxsfHxtLmdldEFkZHJlc3MoaSsxLG4rMSkuYWRkcmVzcyxmPSh0LnhTcGxpdCYmdC55U3BsaXQ/ImJvdHRvbVJpZ2h0Ijp0LnhTcGxpdCYmInRvcFJpZ2h0Iil8fCJib3R0b21MZWZ0IixyLmxlYWZOb2RlKCJwYW5lIix7eFNwbGl0OnQueFNwbGl0fHx2b2lkIDAseVNwbGl0OnQueVNwbGl0fHx2b2lkIDAsdG9wTGVmdENlbGw6bCxhY3RpdmVQYW5lOmYsc3RhdGU6ImZyb3plbiJ9KSxyLmxlYWZOb2RlKCJzZWxlY3Rpb24iLHtwYW5lOmYsYWN0aXZlQ2VsbDp0LmFjdGl2ZUNlbGwsc3FyZWY6dC5hY3RpdmVDZWxsfSk7YnJlYWs7Y2FzZSJzcGxpdCI6dC5hY3RpdmVQYW5lPT09InRvcExlZnQiJiYodC5hY3RpdmVQYW5lPXZvaWQgMCksci5sZWFmTm9kZSgicGFuZSIse3hTcGxpdDp0LnhTcGxpdHx8dm9pZCAwLHlTcGxpdDp0LnlTcGxpdHx8dm9pZCAwLHRvcExlZnRDZWxsOnQudG9wTGVmdENlbGwsYWN0aXZlUGFuZTp0LmFjdGl2ZVBhbmV9KSxyLmxlYWZOb2RlKCJzZWxlY3Rpb24iLHtwYW5lOnQuYWN0aXZlUGFuZSxhY3RpdmVDZWxsOnQuYWN0aXZlQ2VsbCxzcXJlZjp0LmFjdGl2ZUNlbGx9KTticmVhaztjYXNlIm5vcm1hbCI6dC5hY3RpdmVDZWxsJiZyLmxlYWZOb2RlKCJzZWxlY3Rpb24iLHthY3RpdmVDZWxsOnQuYWN0aXZlQ2VsbCxzcXJlZjp0LmFjdGl2ZUNlbGx9KX1yLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihyKXtzd2l0Y2goci5uYW1lKXtjYXNlInNoZWV0VmlldyI6cmV0dXJuIHRoaXMuc2hlZXRWaWV3PXt3b3JrYm9va1ZpZXdJZDpwYXJzZUludChyLmF0dHJpYnV0ZXMud29ya2Jvb2tWaWV3SWQsMTApLHJpZ2h0VG9MZWZ0OnIuYXR0cmlidXRlcy5yaWdodFRvTGVmdD09PSIxIix0YWJTZWxlY3RlZDpyLmF0dHJpYnV0ZXMudGFiU2VsZWN0ZWQ9PT0iMSIsc2hvd1J1bGVyOnIuYXR0cmlidXRlcy5zaG93UnVsZXIhPT0iMCIsc2hvd1Jvd0NvbEhlYWRlcnM6ci5hdHRyaWJ1dGVzLnNob3dSb3dDb2xIZWFkZXJzIT09IjAiLHNob3dHcmlkTGluZXM6ci5hdHRyaWJ1dGVzLnNob3dHcmlkTGluZXMhPT0iMCIsem9vbVNjYWxlOnBhcnNlSW50KHIuYXR0cmlidXRlcy56b29tU2NhbGV8fCIxMDAiLDEwKSx6b29tU2NhbGVOb3JtYWw6cGFyc2VJbnQoci5hdHRyaWJ1dGVzLnpvb21TY2FsZU5vcm1hbHx8IjEwMCIsMTApLHN0eWxlOnIuYXR0cmlidXRlcy52aWV3fSx0aGlzLnBhbmU9dm9pZCAwLHRoaXMuc2VsZWN0aW9ucz17fSwhMDtjYXNlInBhbmUiOnJldHVybiB0aGlzLnBhbmU9e3hTcGxpdDpwYXJzZUludChyLmF0dHJpYnV0ZXMueFNwbGl0fHwiMCIsMTApLHlTcGxpdDpwYXJzZUludChyLmF0dHJpYnV0ZXMueVNwbGl0fHwiMCIsMTApLHRvcExlZnRDZWxsOnIuYXR0cmlidXRlcy50b3BMZWZ0Q2VsbCxhY3RpdmVQYW5lOnIuYXR0cmlidXRlcy5hY3RpdmVQYW5lfHwidG9wTGVmdCIsc3RhdGU6ci5hdHRyaWJ1dGVzLnN0YXRlfSwhMDtjYXNlInNlbGVjdGlvbiI6e2NvbnN0IHQ9ci5hdHRyaWJ1dGVzLnBhbmV8fCJ0b3BMZWZ0IjtyZXR1cm4gdGhpcy5zZWxlY3Rpb25zW3RdPXtwYW5lOnQsYWN0aXZlQ2VsbDpyLmF0dHJpYnV0ZXMuYWN0aXZlQ2VsbH0sITB9ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2Uocil7bGV0IHQsZTtzd2l0Y2gocil7Y2FzZSJzaGVldFZpZXciOnJldHVybiB0aGlzLnNoZWV0VmlldyYmdGhpcy5wYW5lPyh0PXRoaXMubW9kZWw9e3dvcmtib29rVmlld0lkOnRoaXMuc2hlZXRWaWV3Lndvcmtib29rVmlld0lkLHJpZ2h0VG9MZWZ0OnRoaXMuc2hlZXRWaWV3LnJpZ2h0VG9MZWZ0LHN0YXRlOm9bdGhpcy5wYW5lLnN0YXRlXXx8InNwbGl0Iix4U3BsaXQ6dGhpcy5wYW5lLnhTcGxpdCx5U3BsaXQ6dGhpcy5wYW5lLnlTcGxpdCx0b3BMZWZ0Q2VsbDp0aGlzLnBhbmUudG9wTGVmdENlbGwsc2hvd1J1bGVyOnRoaXMuc2hlZXRWaWV3LnNob3dSdWxlcixzaG93Um93Q29sSGVhZGVyczp0aGlzLnNoZWV0Vmlldy5zaG93Um93Q29sSGVhZGVycyxzaG93R3JpZExpbmVzOnRoaXMuc2hlZXRWaWV3LnNob3dHcmlkTGluZXMsem9vbVNjYWxlOnRoaXMuc2hlZXRWaWV3Lnpvb21TY2FsZSx6b29tU2NhbGVOb3JtYWw6dGhpcy5zaGVldFZpZXcuem9vbVNjYWxlTm9ybWFsfSx0aGlzLm1vZGVsLnN0YXRlPT09InNwbGl0IiYmKHQuYWN0aXZlUGFuZT10aGlzLnBhbmUuYWN0aXZlUGFuZSksZT10aGlzLnNlbGVjdGlvbnNbdGhpcy5wYW5lLmFjdGl2ZVBhbmVdLGUmJmUuYWN0aXZlQ2VsbCYmKHQuYWN0aXZlQ2VsbD1lLmFjdGl2ZUNlbGwpLHRoaXMuc2hlZXRWaWV3LnN0eWxlJiYodC5zdHlsZT10aGlzLnNoZWV0Vmlldy5zdHlsZSkpOih0PXRoaXMubW9kZWw9e3dvcmtib29rVmlld0lkOnRoaXMuc2hlZXRWaWV3Lndvcmtib29rVmlld0lkLHJpZ2h0VG9MZWZ0OnRoaXMuc2hlZXRWaWV3LnJpZ2h0VG9MZWZ0LHN0YXRlOiJub3JtYWwiLHNob3dSdWxlcjp0aGlzLnNoZWV0Vmlldy5zaG93UnVsZXIsc2hvd1Jvd0NvbEhlYWRlcnM6dGhpcy5zaGVldFZpZXcuc2hvd1Jvd0NvbEhlYWRlcnMsc2hvd0dyaWRMaW5lczp0aGlzLnNoZWV0Vmlldy5zaG93R3JpZExpbmVzLHpvb21TY2FsZTp0aGlzLnNoZWV0Vmlldy56b29tU2NhbGUsem9vbVNjYWxlTm9ybWFsOnRoaXMuc2hlZXRWaWV3Lnpvb21TY2FsZU5vcm1hbH0sZT10aGlzLnNlbGVjdGlvbnMudG9wTGVmdCxlJiZlLmFjdGl2ZUNlbGwmJih0LmFjdGl2ZUNlbGw9ZS5hY3RpdmVDZWxsKSx0aGlzLnNoZWV0Vmlldy5zdHlsZSYmKHQuc3R5bGU9dGhpcy5zaGVldFZpZXcuc3R5bGUpKSwhMTtkZWZhdWx0OnJldHVybiEwfX1yZWNvbmNpbGUoKXt9fX0seyIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGUiOjE5LCIuLi9iYXNlLXhmb3JtIjozMn1dLDExNDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJ0YWJsZVBhcnQifXJlbmRlcihzLG8pe28mJnMubGVhZk5vZGUodGhpcy50YWcseyJyOmlkIjpvLnJJZH0pfXBhcnNlT3BlbihzKXtzd2l0Y2gocy5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtySWQ6cy5hdHRyaWJ1dGVzWyJyOmlkIl19LCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDExNTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaCIpLHM9YSgiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlIiksbz1hKCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIikscj1hKCIuLi8uLi9yZWwtdHlwZSIpLHQ9YSgiLi9tZXJnZXMiKSxlPWEoIi4uL2Jhc2UteGZvcm0iKSxsPWEoIi4uL2xpc3QteGZvcm0iKSxuPWEoIi4vcm93LXhmb3JtIiksaT1hKCIuL2NvbC14Zm9ybSIpLGY9YSgiLi9kaW1lbnNpb24teGZvcm0iKSxjPWEoIi4vaHlwZXJsaW5rLXhmb3JtIiksdT1hKCIuL21lcmdlLWNlbGwteGZvcm0iKSxkPWEoIi4vZGF0YS12YWxpZGF0aW9ucy14Zm9ybSIpLGg9YSgiLi9zaGVldC1wcm9wZXJ0aWVzLXhmb3JtIiksdz1hKCIuL3NoZWV0LWZvcm1hdC1wcm9wZXJ0aWVzLXhmb3JtIiksXz1hKCIuL3NoZWV0LXZpZXcteGZvcm0iKSxBPWEoIi4vc2hlZXQtcHJvdGVjdGlvbi14Zm9ybSIpLFA9YSgiLi9wYWdlLW1hcmdpbnMteGZvcm0iKSxMPWEoIi4vcGFnZS1zZXR1cC14Zm9ybSIpLE49YSgiLi9wcmludC1vcHRpb25zLXhmb3JtIiksRD1hKCIuL2F1dG8tZmlsdGVyLXhmb3JtIiksRj1hKCIuL3BpY3R1cmUteGZvcm0iKSxVPWEoIi4vZHJhd2luZy14Zm9ybSIpLEI9YSgiLi90YWJsZS1wYXJ0LXhmb3JtIiksUz1hKCIuL3Jvdy1icmVha3MteGZvcm0iKSxDPWEoIi4vaGVhZGVyLWZvb3Rlci14Zm9ybSIpLHY9YSgiLi9jZi9jb25kaXRpb25hbC1mb3JtYXR0aW5ncy14Zm9ybSIpLHA9YSgiLi9leHQtbHN0LXhmb3JtIiksYj0oeSxNKT0+e2lmKCFNfHwhTS5sZW5ndGgpcmV0dXJuIHk7aWYoIXl8fCF5Lmxlbmd0aClyZXR1cm4gTTtjb25zdCBPPXt9LFI9e307cmV0dXJuIHkuZm9yRWFjaCh6PT57T1t6LnJlZl09eix6LnJ1bGVzLmZvckVhY2goJD0+e2NvbnN0e3gxNElkOlh9PSQ7WCYmKFJbWF09JCl9KX0pLE0uZm9yRWFjaCh6PT57ei5ydWxlcy5mb3JFYWNoKCQ9Pntjb25zdCBYPVJbJC54MTRJZF07WD8oKGosVyk9PntPYmplY3Qua2V5cyhXKS5mb3JFYWNoKFQ9Pntjb25zdCB4PWpbVF0sST1XW1RdO3g9PT12b2lkIDAmJkkhPT12b2lkIDAmJihqW1RdPUkpfSl9KShYLCQpOk9bei5yZWZdP09bei5yZWZdLnJ1bGVzLnB1c2goJCk6eS5wdXNoKHtyZWY6ei5yZWYscnVsZXM6WyRdfSl9KX0pLHl9O2NsYXNzIGcgZXh0ZW5kcyBle2NvbnN0cnVjdG9yKE0pe3N1cGVyKCk7Y29uc3R7bWF4Um93czpPLG1heENvbHM6UixpZ25vcmVOb2Rlczp6fT1NfHx7fTt0aGlzLmlnbm9yZU5vZGVzPXp8fFtdLHRoaXMubWFwPXtzaGVldFByOm5ldyBoLGRpbWVuc2lvbjpuZXcgZixzaGVldFZpZXdzOm5ldyBsKHt0YWc6InNoZWV0Vmlld3MiLGNvdW50OiExLGNoaWxkWGZvcm06bmV3IF99KSxzaGVldEZvcm1hdFByOm5ldyB3LGNvbHM6bmV3IGwoe3RhZzoiY29scyIsY291bnQ6ITEsY2hpbGRYZm9ybTpuZXcgaX0pLHNoZWV0RGF0YTpuZXcgbCh7dGFnOiJzaGVldERhdGEiLGNvdW50OiExLGVtcHR5OiEwLGNoaWxkWGZvcm06bmV3IG4oe21heEl0ZW1zOlJ9KSxtYXhJdGVtczpPfSksYXV0b0ZpbHRlcjpuZXcgRCxtZXJnZUNlbGxzOm5ldyBsKHt0YWc6Im1lcmdlQ2VsbHMiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IHV9KSxyb3dCcmVha3M6bmV3IFMsaHlwZXJsaW5rczpuZXcgbCh7dGFnOiJoeXBlcmxpbmtzIixjb3VudDohMSxjaGlsZFhmb3JtOm5ldyBjfSkscGFnZU1hcmdpbnM6bmV3IFAsZGF0YVZhbGlkYXRpb25zOm5ldyBkLHBhZ2VTZXR1cDpuZXcgTCxoZWFkZXJGb290ZXI6bmV3IEMscHJpbnRPcHRpb25zOm5ldyBOLHBpY3R1cmU6bmV3IEYsZHJhd2luZzpuZXcgVSxzaGVldFByb3RlY3Rpb246bmV3IEEsdGFibGVQYXJ0czpuZXcgbCh7dGFnOiJ0YWJsZVBhcnRzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBCfSksY29uZGl0aW9uYWxGb3JtYXR0aW5nOm5ldyB2LGV4dExzdDpuZXcgcH19cHJlcGFyZShNLE8pe08ubWVyZ2VzPW5ldyB0LE0uaHlwZXJsaW5rcz1PLmh5cGVybGlua3M9W10sTS5jb21tZW50cz1PLmNvbW1lbnRzPVtdLE8uZm9ybXVsYWU9e30sTy5zaUZvcm11bGFlPTAsdGhpcy5tYXAuY29scy5wcmVwYXJlKE0uY29scyxPKSx0aGlzLm1hcC5zaGVldERhdGEucHJlcGFyZShNLnJvd3MsTyksdGhpcy5tYXAuY29uZGl0aW9uYWxGb3JtYXR0aW5nLnByZXBhcmUoTS5jb25kaXRpb25hbEZvcm1hdHRpbmdzLE8pLE0ubWVyZ2VDZWxscz1PLm1lcmdlcy5tZXJnZUNlbGxzO2NvbnN0IFI9TS5yZWxzPVtdO2Z1bmN0aW9uIHooail7cmV0dXJuInJJZCIrKGoubGVuZ3RoKzEpfWlmKE0uaHlwZXJsaW5rcy5mb3JFYWNoKGo9Pntjb25zdCBXPXooUik7ai5ySWQ9VyxSLnB1c2goe0lkOlcsVHlwZTpyLkh5cGVybGluayxUYXJnZXQ6ai50YXJnZXQsVGFyZ2V0TW9kZToiRXh0ZXJuYWwifSl9KSxNLmNvbW1lbnRzLmxlbmd0aD4wKXtjb25zdCBqPXtJZDp6KFIpLFR5cGU6ci5Db21tZW50cyxUYXJnZXQ6YC4uL2NvbW1lbnRzJHtNLmlkfS54bWxgfTtSLnB1c2goaik7Y29uc3QgVz17SWQ6eihSKSxUeXBlOnIuVm1sRHJhd2luZyxUYXJnZXQ6YC4uL2RyYXdpbmdzL3ZtbERyYXdpbmcke00uaWR9LnZtbGB9O1IucHVzaChXKSxNLmNvbW1lbnRzLmZvckVhY2goVD0+e1QucmVmQWRkcmVzcz1zLmRlY29kZUFkZHJlc3MoVC5yZWYpfSksTy5jb21tZW50UmVmcy5wdXNoKHtjb21tZW50TmFtZToiY29tbWVudHMiK00uaWQsdm1sRHJhd2luZzoidm1sRHJhd2luZyIrTS5pZH0pfWNvbnN0ICQ9W107bGV0IFg7TS5tZWRpYS5mb3JFYWNoKGo9PntpZihqLnR5cGU9PT0iYmFja2dyb3VuZCIpe2NvbnN0IFc9eihSKTtYPU8ubWVkaWFbai5pbWFnZUlkXSxSLnB1c2goe0lkOlcsVHlwZTpyLkltYWdlLFRhcmdldDpgLi4vbWVkaWEvJHtYLm5hbWV9LiR7WC5leHRlbnNpb259YH0pLE0uYmFja2dyb3VuZD17cklkOld9LE0uaW1hZ2U9Ty5tZWRpYVtqLmltYWdlSWRdfWVsc2UgaWYoai50eXBlPT09ImltYWdlIil7bGV0e2RyYXdpbmc6V309TTtYPU8ubWVkaWFbai5pbWFnZUlkXSxXfHwoVz1NLmRyYXdpbmc9e3JJZDp6KFIpLG5hbWU6ImRyYXdpbmciKyArK08uZHJhd2luZ3NDb3VudCxhbmNob3JzOltdLHJlbHM6W119LE8uZHJhd2luZ3MucHVzaChXKSxSLnB1c2goe0lkOlcucklkLFR5cGU6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJhd2luZyIsVGFyZ2V0OmAuLi9kcmF3aW5ncy8ke1cubmFtZX0ueG1sYH0pKTtsZXQgVD10aGlzLnByZUltYWdlSWQ9PT1qLmltYWdlSWQ/JFtqLmltYWdlSWRdOiRbVy5yZWxzLmxlbmd0aF07VHx8KFQ9eihXLnJlbHMpLCRbVy5yZWxzLmxlbmd0aF09VCxXLnJlbHMucHVzaCh7SWQ6VCxUeXBlOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixUYXJnZXQ6YC4uL21lZGlhLyR7WC5uYW1lfS4ke1guZXh0ZW5zaW9ufWB9KSk7Y29uc3QgeD17cGljdHVyZTp7cklkOlR9LHJhbmdlOmoucmFuZ2V9O2lmKGouaHlwZXJsaW5rcyYmai5oeXBlcmxpbmtzLmh5cGVybGluayl7Y29uc3QgST16KFcucmVscyk7JFtXLnJlbHMubGVuZ3RoXT1JLHgucGljdHVyZS5oeXBlcmxpbmtzPXt0b29sdGlwOmouaHlwZXJsaW5rcy50b29sdGlwLHJJZDpJfSxXLnJlbHMucHVzaCh7SWQ6SSxUeXBlOnIuSHlwZXJsaW5rLFRhcmdldDpqLmh5cGVybGlua3MuaHlwZXJsaW5rLFRhcmdldE1vZGU6IkV4dGVybmFsIn0pfXRoaXMucHJlSW1hZ2VJZD1qLmltYWdlSWQsVy5hbmNob3JzLnB1c2goeCl9fSksTS50YWJsZXMuZm9yRWFjaChqPT57Y29uc3QgVz16KFIpO2oucklkPVcsUi5wdXNoKHtJZDpXLFR5cGU6ci5UYWJsZSxUYXJnZXQ6Ii4uL3RhYmxlcy8iK2oudGFyZ2V0fSksai5jb2x1bW5zLmZvckVhY2goVD0+e2NvbnN0e3N0eWxlOnh9PVQ7eCYmKFQuZHhmSWQ9Ty5zdHlsZXMuYWRkRHhmU3R5bGUoeCkpfSl9KSx0aGlzLm1hcC5leHRMc3QucHJlcGFyZShNLE8pfXJlbmRlcihNLE8pe00ub3BlblhtbChvLlN0ZERvY0F0dHJpYnV0ZXMpLE0ub3Blbk5vZGUoIndvcmtzaGVldCIsZy5XT1JLU0hFRVRfQVRUUklCVVRFUyk7Y29uc3QgUj1PLnByb3BlcnRpZXM/e2RlZmF1bHRSb3dIZWlnaHQ6Ty5wcm9wZXJ0aWVzLmRlZmF1bHRSb3dIZWlnaHQsZHlEZXNjZW50Ok8ucHJvcGVydGllcy5keURlc2NlbnQsb3V0bGluZUxldmVsQ29sOk8ucHJvcGVydGllcy5vdXRsaW5lTGV2ZWxDb2wsb3V0bGluZUxldmVsUm93Ok8ucHJvcGVydGllcy5vdXRsaW5lTGV2ZWxSb3d9OnZvaWQgMDtPLnByb3BlcnRpZXMmJk8ucHJvcGVydGllcy5kZWZhdWx0Q29sV2lkdGgmJihSLmRlZmF1bHRDb2xXaWR0aD1PLnByb3BlcnRpZXMuZGVmYXVsdENvbFdpZHRoKTtjb25zdCB6PXtvdXRsaW5lUHJvcGVydGllczpPLnByb3BlcnRpZXMmJk8ucHJvcGVydGllcy5vdXRsaW5lUHJvcGVydGllcyx0YWJDb2xvcjpPLnByb3BlcnRpZXMmJk8ucHJvcGVydGllcy50YWJDb2xvcixwYWdlU2V0dXA6Ty5wYWdlU2V0dXAmJk8ucGFnZVNldHVwLmZpdFRvUGFnZT97Zml0VG9QYWdlOk8ucGFnZVNldHVwLmZpdFRvUGFnZX06dm9pZCAwfSwkPU8ucGFnZVNldHVwJiZPLnBhZ2VTZXR1cC5tYXJnaW5zLFg9e3Nob3dSb3dDb2xIZWFkZXJzOk8ucGFnZVNldHVwJiZPLnBhZ2VTZXR1cC5zaG93Um93Q29sSGVhZGVycyxzaG93R3JpZExpbmVzOk8ucGFnZVNldHVwJiZPLnBhZ2VTZXR1cC5zaG93R3JpZExpbmVzLGhvcml6b250YWxDZW50ZXJlZDpPLnBhZ2VTZXR1cCYmTy5wYWdlU2V0dXAuaG9yaXpvbnRhbENlbnRlcmVkLHZlcnRpY2FsQ2VudGVyZWQ6Ty5wYWdlU2V0dXAmJk8ucGFnZVNldHVwLnZlcnRpY2FsQ2VudGVyZWR9LGo9Ty5zaGVldFByb3RlY3Rpb247dGhpcy5tYXAuc2hlZXRQci5yZW5kZXIoTSx6KSx0aGlzLm1hcC5kaW1lbnNpb24ucmVuZGVyKE0sTy5kaW1lbnNpb25zKSx0aGlzLm1hcC5zaGVldFZpZXdzLnJlbmRlcihNLE8udmlld3MpLHRoaXMubWFwLnNoZWV0Rm9ybWF0UHIucmVuZGVyKE0sUiksdGhpcy5tYXAuY29scy5yZW5kZXIoTSxPLmNvbHMpLHRoaXMubWFwLnNoZWV0RGF0YS5yZW5kZXIoTSxPLnJvd3MpLHRoaXMubWFwLnNoZWV0UHJvdGVjdGlvbi5yZW5kZXIoTSxqKSx0aGlzLm1hcC5hdXRvRmlsdGVyLnJlbmRlcihNLE8uYXV0b0ZpbHRlciksdGhpcy5tYXAubWVyZ2VDZWxscy5yZW5kZXIoTSxPLm1lcmdlQ2VsbHMpLHRoaXMubWFwLmNvbmRpdGlvbmFsRm9ybWF0dGluZy5yZW5kZXIoTSxPLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MpLHRoaXMubWFwLmRhdGFWYWxpZGF0aW9ucy5yZW5kZXIoTSxPLmRhdGFWYWxpZGF0aW9ucyksdGhpcy5tYXAuaHlwZXJsaW5rcy5yZW5kZXIoTSxPLmh5cGVybGlua3MpLHRoaXMubWFwLnByaW50T3B0aW9ucy5yZW5kZXIoTSxYKSx0aGlzLm1hcC5wYWdlTWFyZ2lucy5yZW5kZXIoTSwkKSx0aGlzLm1hcC5wYWdlU2V0dXAucmVuZGVyKE0sTy5wYWdlU2V0dXApLHRoaXMubWFwLmhlYWRlckZvb3Rlci5yZW5kZXIoTSxPLmhlYWRlckZvb3RlciksdGhpcy5tYXAucm93QnJlYWtzLnJlbmRlcihNLE8ucm93QnJlYWtzKSx0aGlzLm1hcC5kcmF3aW5nLnJlbmRlcihNLE8uZHJhd2luZyksdGhpcy5tYXAucGljdHVyZS5yZW5kZXIoTSxPLmJhY2tncm91bmQpLHRoaXMubWFwLnRhYmxlUGFydHMucmVuZGVyKE0sTy50YWJsZXMpLHRoaXMubWFwLmV4dExzdC5yZW5kZXIoTSxPKSxPLnJlbHMmJk8ucmVscy5mb3JFYWNoKFc9PntXLlR5cGU9PT1yLlZtbERyYXdpbmcmJk0ubGVhZk5vZGUoImxlZ2FjeURyYXdpbmciLHsicjppZCI6Vy5JZH0pfSksTS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oTSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4oTSksITApOk0ubmFtZT09PSJ3b3Jrc2hlZXQiPyhtLmVhY2godGhpcy5tYXAsTz0+e08ucmVzZXQoKX0pLCEwKToodGhpcy5tYXBbTS5uYW1lXSYmIXRoaXMuaWdub3JlTm9kZXMuaW5jbHVkZXMoTS5uYW1lKSYmKHRoaXMucGFyc2VyPXRoaXMubWFwW00ubmFtZV0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKE0pKSwhMCl9cGFyc2VUZXh0KE0pe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoTSl9cGFyc2VDbG9zZShNKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShNKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKE0pe2Nhc2Uid29ya3NoZWV0Ijp7Y29uc3QgTz10aGlzLm1hcC5zaGVldEZvcm1hdFByLm1vZGVsfHx7fTt0aGlzLm1hcC5zaGVldFByLm1vZGVsJiZ0aGlzLm1hcC5zaGVldFByLm1vZGVsLnRhYkNvbG9yJiYoTy50YWJDb2xvcj10aGlzLm1hcC5zaGVldFByLm1vZGVsLnRhYkNvbG9yKSx0aGlzLm1hcC5zaGVldFByLm1vZGVsJiZ0aGlzLm1hcC5zaGVldFByLm1vZGVsLm91dGxpbmVQcm9wZXJ0aWVzJiYoTy5vdXRsaW5lUHJvcGVydGllcz10aGlzLm1hcC5zaGVldFByLm1vZGVsLm91dGxpbmVQcm9wZXJ0aWVzKTtjb25zdCBSPXtmaXRUb1BhZ2U6dGhpcy5tYXAuc2hlZXRQci5tb2RlbCYmdGhpcy5tYXAuc2hlZXRQci5tb2RlbC5wYWdlU2V0dXAmJnRoaXMubWFwLnNoZWV0UHIubW9kZWwucGFnZVNldHVwLmZpdFRvUGFnZXx8ITEsbWFyZ2luczp0aGlzLm1hcC5wYWdlTWFyZ2lucy5tb2RlbH0sej1PYmplY3QuYXNzaWduKFIsdGhpcy5tYXAucGFnZVNldHVwLm1vZGVsLHRoaXMubWFwLnByaW50T3B0aW9ucy5tb2RlbCksJD1iKHRoaXMubWFwLmNvbmRpdGlvbmFsRm9ybWF0dGluZy5tb2RlbCx0aGlzLm1hcC5leHRMc3QubW9kZWwmJnRoaXMubWFwLmV4dExzdC5tb2RlbFsieDE0OmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MiXSk7cmV0dXJuIHRoaXMubW9kZWw9e2RpbWVuc2lvbnM6dGhpcy5tYXAuZGltZW5zaW9uLm1vZGVsLGNvbHM6dGhpcy5tYXAuY29scy5tb2RlbCxyb3dzOnRoaXMubWFwLnNoZWV0RGF0YS5tb2RlbCxtZXJnZUNlbGxzOnRoaXMubWFwLm1lcmdlQ2VsbHMubW9kZWwsaHlwZXJsaW5rczp0aGlzLm1hcC5oeXBlcmxpbmtzLm1vZGVsLGRhdGFWYWxpZGF0aW9uczp0aGlzLm1hcC5kYXRhVmFsaWRhdGlvbnMubW9kZWwscHJvcGVydGllczpPLHZpZXdzOnRoaXMubWFwLnNoZWV0Vmlld3MubW9kZWwscGFnZVNldHVwOnosaGVhZGVyRm9vdGVyOnRoaXMubWFwLmhlYWRlckZvb3Rlci5tb2RlbCxiYWNrZ3JvdW5kOnRoaXMubWFwLnBpY3R1cmUubW9kZWwsZHJhd2luZzp0aGlzLm1hcC5kcmF3aW5nLm1vZGVsLHRhYmxlczp0aGlzLm1hcC50YWJsZVBhcnRzLm1vZGVsLGNvbmRpdGlvbmFsRm9ybWF0dGluZ3M6JH0sdGhpcy5tYXAuYXV0b0ZpbHRlci5tb2RlbCYmKHRoaXMubW9kZWwuYXV0b0ZpbHRlcj10aGlzLm1hcC5hdXRvRmlsdGVyLm1vZGVsKSx0aGlzLm1hcC5zaGVldFByb3RlY3Rpb24ubW9kZWwmJih0aGlzLm1vZGVsLnNoZWV0UHJvdGVjdGlvbj10aGlzLm1hcC5zaGVldFByb3RlY3Rpb24ubW9kZWwpLCExfWRlZmF1bHQ6cmV0dXJuITB9fXJlY29uY2lsZShNLE8pe2NvbnN0IFI9KE0ucmVsYXRpb25zaGlwc3x8W10pLnJlZHVjZSgoJCxYKT0+e2lmKCRbWC5JZF09WCxYLlR5cGU9PT1yLkNvbW1lbnRzJiYoTS5jb21tZW50cz1PLmNvbW1lbnRzW1guVGFyZ2V0XS5jb21tZW50cyksWC5UeXBlPT09ci5WbWxEcmF3aW5nJiZNLmNvbW1lbnRzJiZNLmNvbW1lbnRzLmxlbmd0aCl7Y29uc3Qgaj1PLnZtbERyYXdpbmdzW1guVGFyZ2V0XS5jb21tZW50cztNLmNvbW1lbnRzLmZvckVhY2goKFcsVCk9PntXLm5vdGU9T2JqZWN0LmFzc2lnbih7fSxXLm5vdGUsaltUXSl9KX1yZXR1cm4gJH0se30pO2lmKE8uY29tbWVudHNNYXA9KE0uY29tbWVudHN8fFtdKS5yZWR1Y2UoKCQsWCk9PihYLnJlZiYmKCRbWC5yZWZdPVgpLCQpLHt9KSxPLmh5cGVybGlua01hcD0oTS5oeXBlcmxpbmtzfHxbXSkucmVkdWNlKCgkLFgpPT4oWC5ySWQmJigkW1guYWRkcmVzc109UltYLnJJZF0uVGFyZ2V0KSwkKSx7fSksTy5mb3JtdWxhZT17fSxNLnJvd3M9TS5yb3dzJiZNLnJvd3MuZmlsdGVyKEJvb2xlYW4pfHxbXSxNLnJvd3MuZm9yRWFjaCgkPT57JC5jZWxscz0kLmNlbGxzJiYkLmNlbGxzLmZpbHRlcihCb29sZWFuKXx8W119KSx0aGlzLm1hcC5jb2xzLnJlY29uY2lsZShNLmNvbHMsTyksdGhpcy5tYXAuc2hlZXREYXRhLnJlY29uY2lsZShNLnJvd3MsTyksdGhpcy5tYXAuY29uZGl0aW9uYWxGb3JtYXR0aW5nLnJlY29uY2lsZShNLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MsTyksTS5tZWRpYT1bXSxNLmRyYXdpbmcpe2NvbnN0ICQ9UltNLmRyYXdpbmcucklkXS5UYXJnZXQubWF0Y2goL1wvZHJhd2luZ3NcLyhbYS16QS1aMC05XSspWy5dW2EtekEtWl17Myw0fSQvKTtpZigkKXtjb25zdCBYPSRbMV07Ty5kcmF3aW5nc1tYXS5hbmNob3JzLmZvckVhY2goaj0+e2lmKGoubWVkaXVtKXtjb25zdCBXPXt0eXBlOiJpbWFnZSIsaW1hZ2VJZDpqLm1lZGl1bS5pbmRleCxyYW5nZTpqLnJhbmdlLGh5cGVybGlua3M6ai5waWN0dXJlLmh5cGVybGlua3N9O00ubWVkaWEucHVzaChXKX19KX19Y29uc3Qgej1NLmJhY2tncm91bmQmJlJbTS5iYWNrZ3JvdW5kLnJJZF07aWYoeil7Y29uc3QgJD16LlRhcmdldC5zcGxpdCgiL21lZGlhLyIpWzFdLFg9Ty5tZWRpYUluZGV4JiZPLm1lZGlhSW5kZXhbJF07WCE9PXZvaWQgMCYmTS5tZWRpYS5wdXNoKHt0eXBlOiJiYWNrZ3JvdW5kIixpbWFnZUlkOlh9KX1NLnRhYmxlcz0oTS50YWJsZXN8fFtdKS5tYXAoJD0+e2NvbnN0IFg9UlskLnJJZF07cmV0dXJuIE8udGFibGVzW1guVGFyZ2V0XX0pLGRlbGV0ZSBNLnJlbGF0aW9uc2hpcHMsZGVsZXRlIE0uaHlwZXJsaW5rcyxkZWxldGUgTS5jb21tZW50c319Zy5XT1JLU0hFRVRfQVRUUklCVVRFUz17eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsInhtbG5zOnIiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIiwieG1sbnM6eDE0YWMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyJ9LEUuZXhwb3J0cz1nfSx7Ii4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZSI6MTksIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2giOjI2LCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vLi4vcmVsLXR5cGUiOjMxLCIuLi9iYXNlLXhmb3JtIjozMiwiLi4vbGlzdC14Zm9ybSI6NzEsIi4vYXV0by1maWx0ZXIteGZvcm0iOjcyLCIuL2NmL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmdzLXhmb3JtIjo4NywiLi9jb2wteGZvcm0iOjkyLCIuL2RhdGEtdmFsaWRhdGlvbnMteGZvcm0iOjkzLCIuL2RpbWVuc2lvbi14Zm9ybSI6OTQsIi4vZHJhd2luZy14Zm9ybSI6OTUsIi4vZXh0LWxzdC14Zm9ybSI6OTYsIi4vaGVhZGVyLWZvb3Rlci14Zm9ybSI6OTcsIi4vaHlwZXJsaW5rLXhmb3JtIjo5OCwiLi9tZXJnZS1jZWxsLXhmb3JtIjo5OSwiLi9tZXJnZXMiOjEwMCwiLi9wYWdlLW1hcmdpbnMteGZvcm0iOjEwMywiLi9wYWdlLXNldHVwLXhmb3JtIjoxMDUsIi4vcGljdHVyZS14Zm9ybSI6MTA2LCIuL3ByaW50LW9wdGlvbnMteGZvcm0iOjEwNywiLi9yb3ctYnJlYWtzLXhmb3JtIjoxMDgsIi4vcm93LXhmb3JtIjoxMDksIi4vc2hlZXQtZm9ybWF0LXByb3BlcnRpZXMteGZvcm0iOjExMCwiLi9zaGVldC1wcm9wZXJ0aWVzLXhmb3JtIjoxMTEsIi4vc2hlZXQtcHJvdGVjdGlvbi14Zm9ybSI6MTEyLCIuL3NoZWV0LXZpZXcteGZvcm0iOjExMywiLi90YWJsZS1wYXJ0LXhmb3JtIjoxMTR9XSwxMTY6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKHMpe3N1cGVyKCksdGhpcy50YWc9cy50YWcsdGhpcy5hdHRyPXMuYXR0cn1yZW5kZXIocyxvKXtvJiYocy5vcGVuTm9kZSh0aGlzLnRhZykscy5jbG9zZU5vZGUoKSl9cGFyc2VPcGVuKHMpe3MubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD0hMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTE3OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3RvcihzKXtzdXBlcigpLHRoaXMudGFnPXMudGFnLHRoaXMuYXR0cj1zLmF0dHIsdGhpcy5hdHRycz1zLmF0dHJzLHRoaXMuX2Zvcm1hdD1zLmZvcm1hdHx8ZnVuY3Rpb24obyl7dHJ5e3JldHVybiBOdW1iZXIuaXNOYU4oby5nZXRUaW1lKCkpPyIiOm8udG9JU09TdHJpbmcoKX1jYXRjaHtyZXR1cm4iIn19LHRoaXMuX3BhcnNlPXMucGFyc2V8fGZ1bmN0aW9uKG8pe3JldHVybiBuZXcgRGF0ZShvKX19cmVuZGVyKHMsbyl7byYmKHMub3Blbk5vZGUodGhpcy50YWcpLHRoaXMuYXR0cnMmJnMuYWRkQXR0cmlidXRlcyh0aGlzLmF0dHJzKSx0aGlzLmF0dHI/cy5hZGRBdHRyaWJ1dGUodGhpcy5hdHRyLHRoaXMuX2Zvcm1hdChvKSk6cy53cml0ZVRleHQodGhpcy5fZm9ybWF0KG8pKSxzLmNsb3NlTm9kZSgpKX1wYXJzZU9wZW4ocyl7cy5uYW1lPT09dGhpcy50YWcmJih0aGlzLmF0dHI/dGhpcy5tb2RlbD10aGlzLl9wYXJzZShzLmF0dHJpYnV0ZXNbdGhpcy5hdHRyXSk6dGhpcy50ZXh0PVtdKX1wYXJzZVRleHQocyl7dGhpcy5hdHRyfHx0aGlzLnRleHQucHVzaChzKX1wYXJzZUNsb3NlKCl7cmV0dXJuIHRoaXMuYXR0cnx8KHRoaXMubW9kZWw9dGhpcy5fcGFyc2UodGhpcy50ZXh0LmpvaW4oIiIpKSksITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDExODpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3Iocyl7c3VwZXIoKSx0aGlzLnRhZz1zLnRhZyx0aGlzLmF0dHI9cy5hdHRyLHRoaXMuYXR0cnM9cy5hdHRycyx0aGlzLnplcm89cy56ZXJvfXJlbmRlcihzLG8peyhvfHx0aGlzLnplcm8pJiYocy5vcGVuTm9kZSh0aGlzLnRhZyksdGhpcy5hdHRycyYmcy5hZGRBdHRyaWJ1dGVzKHRoaXMuYXR0cnMpLHRoaXMuYXR0cj9zLmFkZEF0dHJpYnV0ZSh0aGlzLmF0dHIsbyk6cy53cml0ZVRleHQobykscy5jbG9zZU5vZGUoKSl9cGFyc2VPcGVuKHMpe3JldHVybiBzLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMuYXR0cj90aGlzLm1vZGVsPXBhcnNlSW50KHMuYXR0cmlidXRlc1t0aGlzLmF0dHJdLDEwKTp0aGlzLnRleHQ9W10sITApfXBhcnNlVGV4dChzKXt0aGlzLmF0dHJ8fHRoaXMudGV4dC5wdXNoKHMpfXBhcnNlQ2xvc2UoKXtyZXR1cm4gdGhpcy5hdHRyfHwodGhpcy5tb2RlbD1wYXJzZUludCh0aGlzLnRleHQuam9pbigiIil8fDAsMTApKSwhMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTE5OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3RvcihzKXtzdXBlcigpLHRoaXMudGFnPXMudGFnLHRoaXMuYXR0cj1zLmF0dHIsdGhpcy5hdHRycz1zLmF0dHJzfXJlbmRlcihzLG8pe28hPT12b2lkIDAmJihzLm9wZW5Ob2RlKHRoaXMudGFnKSx0aGlzLmF0dHJzJiZzLmFkZEF0dHJpYnV0ZXModGhpcy5hdHRycyksdGhpcy5hdHRyP3MuYWRkQXR0cmlidXRlKHRoaXMuYXR0cixvKTpzLndyaXRlVGV4dChvKSxzLmNsb3NlTm9kZSgpKX1wYXJzZU9wZW4ocyl7cy5uYW1lPT09dGhpcy50YWcmJih0aGlzLmF0dHI/dGhpcy5tb2RlbD1zLmF0dHJpYnV0ZXNbdGhpcy5hdHRyXTp0aGlzLnRleHQ9W10pfXBhcnNlVGV4dChzKXt0aGlzLmF0dHJ8fHRoaXMudGV4dC5wdXNoKHMpfXBhcnNlQ2xvc2UoKXtyZXR1cm4gdGhpcy5hdHRyfHwodGhpcy5tb2RlbD10aGlzLnRleHQuam9pbigiIikpLCExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMjA6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4vYmFzZS14Zm9ybSIpLHM9YSgiLi4vLi4vdXRpbHMveG1sLXN0cmVhbSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3Iobyl7c3VwZXIoKSx0aGlzLl9tb2RlbD1vfXJlbmRlcihvKXtpZighdGhpcy5feG1sKXtjb25zdCByPW5ldyBzOyhmdW5jdGlvbiB0KGUsbCl7ZS5vcGVuTm9kZShsLnRhZyxsLiQpLGwuYyYmbC5jLmZvckVhY2gobj0+e3QoZSxuKX0pLGwudCYmZS53cml0ZVRleHQobC50KSxlLmNsb3NlTm9kZSgpfSkocix0aGlzLl9tb2RlbCksdGhpcy5feG1sPXIueG1sfW8ud3JpdGVYbWwodGhpcy5feG1sKX1wYXJzZU9wZW4oKXtyZXR1cm4hMH1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShvKXtzd2l0Y2gobyl7Y2FzZSB0aGlzLl9tb2RlbC50YWc6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0seyIuLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi9iYXNlLXhmb3JtIjozMn1dLDEyMTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi90ZXh0LXhmb3JtIikscz1hKCIuL3JpY2gtdGV4dC14Zm9ybSIpLG89YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG97Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtyOm5ldyBzLHQ6bmV3IG19fWdldCB0YWcoKXtyZXR1cm4iclBoIn1yZW5kZXIocix0KXtpZihyLm9wZW5Ob2RlKHRoaXMudGFnLHtzYjp0LnNifHwwLGViOnQuZWJ8fDB9KSx0JiZ0Lmhhc093blByb3BlcnR5KCJyaWNoVGV4dCIpJiZ0LnJpY2hUZXh0KXtjb25zdHtyOmV9PXRoaXMubWFwO3QucmljaFRleHQuZm9yRWFjaChsPT57ZS5yZW5kZXIocixsKX0pfWVsc2UgdCYmdGhpcy5tYXAudC5yZW5kZXIocix0LnRleHQpO3IuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKHIpe2NvbnN0e25hbWU6dH09cjtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihyKSwhMCk6dD09PXRoaXMudGFnPyh0aGlzLm1vZGVsPXtzYjpwYXJzZUludChyLmF0dHJpYnV0ZXMuc2IsMTApLGViOnBhcnNlSW50KHIuYXR0cmlidXRlcy5lYiwxMCl9LCEwKToodGhpcy5wYXJzZXI9dGhpcy5tYXBbdF0sISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlT3BlbihyKSwhMCkpfXBhcnNlVGV4dChyKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KHIpfXBhcnNlQ2xvc2Uocil7aWYodGhpcy5wYXJzZXIpe2lmKCF0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHIpKXtzd2l0Y2gocil7Y2FzZSJyIjp7bGV0IHQ9dGhpcy5tb2RlbC5yaWNoVGV4dDt0fHwodD10aGlzLm1vZGVsLnJpY2hUZXh0PVtdKSx0LnB1c2godGhpcy5wYXJzZXIubW9kZWwpO2JyZWFrfWNhc2UidCI6dGhpcy5tb2RlbC50ZXh0PXRoaXMucGFyc2VyLm1vZGVsfXRoaXMucGFyc2VyPXZvaWQgMH1yZXR1cm4hMH1zd2l0Y2gocil7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL3JpY2gtdGV4dC14Zm9ybSI6MTIyLCIuL3RleHQteGZvcm0iOjEyNX1dLDEyMjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi90ZXh0LXhmb3JtIikscz1hKCIuLi9zdHlsZS9mb250LXhmb3JtIiksbz1hKCIuLi9iYXNlLXhmb3JtIik7Y2xhc3MgciBleHRlbmRzIG97Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm1vZGVsPWV9Z2V0IHRhZygpe3JldHVybiJyIn1nZXQgdGV4dFhmb3JtKCl7cmV0dXJuIHRoaXMuX3RleHRYZm9ybXx8KHRoaXMuX3RleHRYZm9ybT1uZXcgbSl9Z2V0IGZvbnRYZm9ybSgpe3JldHVybiB0aGlzLl9mb250WGZvcm18fCh0aGlzLl9mb250WGZvcm09bmV3IHMoci5GT05UX09QVElPTlMpKX1yZW5kZXIoZSxsKXtsPWx8fHRoaXMubW9kZWwsZS5vcGVuTm9kZSgiciIpLGwuZm9udCYmdGhpcy5mb250WGZvcm0ucmVuZGVyKGUsbC5mb250KSx0aGlzLnRleHRYZm9ybS5yZW5kZXIoZSxsLnRleHQpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSJyIjpyZXR1cm4gdGhpcy5tb2RlbD17fSwhMDtjYXNlInQiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLnRleHRYZm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7Y2FzZSJyUHIiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLmZvbnRYZm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtzd2l0Y2goZSl7Y2FzZSJyIjpyZXR1cm4hMTtjYXNlInQiOnJldHVybiB0aGlzLm1vZGVsLnRleHQ9dGhpcy5wYXJzZXIubW9kZWwsdGhpcy5wYXJzZXI9dm9pZCAwLCEwO2Nhc2UiclByIjpyZXR1cm4gdGhpcy5tb2RlbC5mb250PXRoaXMucGFyc2VyLm1vZGVsLHRoaXMucGFyc2VyPXZvaWQgMCwhMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKSwhMH19fXIuRk9OVF9PUFRJT05TPXt0YWdOYW1lOiJyUHIiLGZvbnROYW1lVGFnOiJyRm9udCJ9LEUuZXhwb3J0cz1yfSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuLi9zdHlsZS9mb250LXhmb3JtIjoxMzEsIi4vdGV4dC14Zm9ybSI6MTI1fV0sMTIzOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuL3RleHQteGZvcm0iKSxzPWEoIi4vcmljaC10ZXh0LXhmb3JtIiksbz1hKCIuL3Bob25ldGljLXRleHQteGZvcm0iKSxyPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2RlbD10LHRoaXMubWFwPXtyOm5ldyBzLHQ6bmV3IG0sclBoOm5ldyBvfX1nZXQgdGFnKCl7cmV0dXJuInNpIn1yZW5kZXIodCxlKXt0Lm9wZW5Ob2RlKHRoaXMudGFnKSxlJiZlLmhhc093blByb3BlcnR5KCJyaWNoVGV4dCIpJiZlLnJpY2hUZXh0P2UucmljaFRleHQubGVuZ3RoP2UucmljaFRleHQuZm9yRWFjaChsPT57dGhpcy5tYXAuci5yZW5kZXIodCxsKX0pOnRoaXMubWFwLnQucmVuZGVyKHQsIiIpOmUhPW51bGwmJnRoaXMubWFwLnQucmVuZGVyKHQsZSksdC5jbG9zZU5vZGUoKX1wYXJzZU9wZW4odCl7Y29uc3R7bmFtZTplfT10O3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwKTplPT09dGhpcy50YWc/KHRoaXMubW9kZWw9e30sITApOih0aGlzLnBhcnNlcj10aGlzLm1hcFtlXSwhIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwKSl9cGFyc2VUZXh0KHQpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQodCl9cGFyc2VDbG9zZSh0KXtpZih0aGlzLnBhcnNlcil7aWYoIXRoaXMucGFyc2VyLnBhcnNlQ2xvc2UodCkpe3N3aXRjaCh0KXtjYXNlInIiOntsZXQgZT10aGlzLm1vZGVsLnJpY2hUZXh0O2V8fChlPXRoaXMubW9kZWwucmljaFRleHQ9W10pLGUucHVzaCh0aGlzLnBhcnNlci5tb2RlbCk7YnJlYWt9Y2FzZSJ0Ijp0aGlzLm1vZGVsPXRoaXMucGFyc2VyLm1vZGVsfXRoaXMucGFyc2VyPXZvaWQgMH1yZXR1cm4hMH1zd2l0Y2godCl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL3Bob25ldGljLXRleHQteGZvcm0iOjEyMSwiLi9yaWNoLXRleHQteGZvcm0iOjEyMiwiLi90ZXh0LXhmb3JtIjoxMjV9XSwxMjQ6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxzPWEoIi4uL2Jhc2UteGZvcm0iKSxvPWEoIi4vc2hhcmVkLXN0cmluZy14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIHN7Y29uc3RydWN0b3Iocil7c3VwZXIoKSx0aGlzLm1vZGVsPXJ8fHt2YWx1ZXM6W10sY291bnQ6MH0sdGhpcy5oYXNoPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5yaWNoPU9iamVjdC5jcmVhdGUobnVsbCl9Z2V0IHNoYXJlZFN0cmluZ1hmb3JtKCl7cmV0dXJuIHRoaXMuX3NoYXJlZFN0cmluZ1hmb3JtfHwodGhpcy5fc2hhcmVkU3RyaW5nWGZvcm09bmV3IG8pfWdldCB2YWx1ZXMoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZXN9Z2V0IHVuaXF1ZUNvdW50KCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWVzLmxlbmd0aH1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5tb2RlbC5jb3VudH1nZXRTdHJpbmcocil7cmV0dXJuIHRoaXMubW9kZWwudmFsdWVzW3JdfWFkZChyKXtyZXR1cm4gci5yaWNoVGV4dD90aGlzLmFkZFJpY2hUZXh0KHIpOnRoaXMuYWRkVGV4dChyKX1hZGRUZXh0KHIpe2xldCB0PXRoaXMuaGFzaFtyXTtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9dGhpcy5oYXNoW3JdPXRoaXMubW9kZWwudmFsdWVzLmxlbmd0aCx0aGlzLm1vZGVsLnZhbHVlcy5wdXNoKHIpKSx0aGlzLm1vZGVsLmNvdW50KyssdH1hZGRSaWNoVGV4dChyKXtjb25zdCB0PXRoaXMuc2hhcmVkU3RyaW5nWGZvcm0udG9YbWwocik7bGV0IGU9dGhpcy5yaWNoW3RdO3JldHVybiBlPT09dm9pZCAwJiYoZT10aGlzLnJpY2hbdF09dGhpcy5tb2RlbC52YWx1ZXMubGVuZ3RoLHRoaXMubW9kZWwudmFsdWVzLnB1c2gocikpLHRoaXMubW9kZWwuY291bnQrKyxlfXJlbmRlcihyLHQpe3Q9dHx8dGhpcy5fdmFsdWVzLHIub3BlblhtbChtLlN0ZERvY0F0dHJpYnV0ZXMpLHIub3Blbk5vZGUoInNzdCIse3htbG5zOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLGNvdW50OnQuY291bnQsdW5pcXVlQ291bnQ6dC52YWx1ZXMubGVuZ3RofSk7Y29uc3QgZT10aGlzLnNoYXJlZFN0cmluZ1hmb3JtO3QudmFsdWVzLmZvckVhY2gobD0+e2UucmVuZGVyKHIsbCl9KSxyLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihyKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpLCEwO3N3aXRjaChyLm5hbWUpe2Nhc2Uic3N0IjpyZXR1cm4hMDtjYXNlInNpIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5zaGFyZWRTdHJpbmdYZm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4ociksITA7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VPcGVuOiAiK0pTT04uc3RyaW5naWZ5KHIpKX19cGFyc2VUZXh0KHIpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQocil9cGFyc2VDbG9zZShyKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShyKXx8KHRoaXMubW9kZWwudmFsdWVzLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMubW9kZWwuY291bnQrKyx0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChyKXtjYXNlInNzdCI6cmV0dXJuITE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VDbG9zZTogIityKX19fX0seyIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzIsIi4vc2hhcmVkLXN0cmluZy14Zm9ybSI6MTIzfV0sMTI1OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtnZXQgdGFnKCl7cmV0dXJuInQifXJlbmRlcihzLG8pe3Mub3Blbk5vZGUoInQiKSwvXlxzfFxufFxzJC8udGVzdChvKSYmcy5hZGRBdHRyaWJ1dGUoInhtbDpzcGFjZSIsInByZXNlcnZlIikscy53cml0ZVRleHQobykscy5jbG9zZU5vZGUoKX1nZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5fdGV4dC5qb2luKCIiKS5yZXBsYWNlKC9feChbMC05QS1GXXs0fSlfL2csKHMsbyk9PlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQobywxNikpKX1wYXJzZU9wZW4ocyl7c3dpdGNoKHMubmFtZSl7Y2FzZSJ0IjpyZXR1cm4gdGhpcy5fdGV4dD1bXSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQocyl7dGhpcy5fdGV4dC5wdXNoKHMpfXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTI2OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi9kb2MvZW51bXMiKSxzPWEoIi4uLy4uLy4uL3V0aWxzL3V0aWxzIiksbz1hKCIuLi9iYXNlLXhmb3JtIikscj17aG9yaXpvbnRhbFZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsImZpbGwiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiLCJqdXN0aWZ5Il0ucmVkdWNlKChlLGwpPT4oZVtsXT0hMCxlKSx7fSksaG9yaXpvbnRhbChlKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsVmFsdWVzW2VdP2U6dm9pZCAwfSx2ZXJ0aWNhbFZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSIsImRpc3RyaWJ1dGVkIiwianVzdGlmeSJdLnJlZHVjZSgoZSxsKT0+KGVbbF09ITAsZSkse30pLHZlcnRpY2FsKGUpe3JldHVybiBlPT09Im1pZGRsZSI/ImNlbnRlciI6dGhpcy52ZXJ0aWNhbFZhbHVlc1tlXT9lOnZvaWQgMH0sd3JhcFRleHQ6ZT0+ISFlfHx2b2lkIDAsc2hyaW5rVG9GaXQ6ZT0+ISFlfHx2b2lkIDAsdGV4dFJvdGF0aW9uKGUpe3N3aXRjaChlKXtjYXNlInZlcnRpY2FsIjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybihlPXMudmFsaWRJbnQoZSkpPj0tOTAmJmU8PTkwP2U6dm9pZCAwfX0saW5kZW50OmU9PihlPXMudmFsaWRJbnQoZSksTWF0aC5tYXgoMCxlKSkscmVhZGluZ09yZGVyKGUpe3N3aXRjaChlKXtjYXNlImx0ciI6cmV0dXJuIG0uUmVhZGluZ09yZGVyLkxlZnRUb1JpZ2h0O2Nhc2UicnRsIjpyZXR1cm4gbS5SZWFkaW5nT3JkZXIuUmlnaHRUb0xlZnQ7ZGVmYXVsdDpyZXR1cm59fX0sdD17dG9YbWwoZSl7aWYoZT1yLnRleHRSb3RhdGlvbihlKSl7aWYoZT09PSJ2ZXJ0aWNhbCIpcmV0dXJuIDI1NTtjb25zdCBsPU1hdGgucm91bmQoZSk7aWYobD49MCYmbDw9OTApcmV0dXJuIGw7aWYobDwwJiZsPj0tOTApcmV0dXJuIDkwLWx9fSx0b01vZGVsKGUpe2NvbnN0IGw9cy52YWxpZEludChlKTtpZihsIT09dm9pZCAwKXtpZihsPT09MjU1KXJldHVybiJ2ZXJ0aWNhbCI7aWYobD49MCYmbDw9OTApcmV0dXJuIGw7aWYobD45MCYmbDw9MTgwKXJldHVybiA5MC1sfX19O0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG97Z2V0IHRhZygpe3JldHVybiJhbGlnbm1lbnQifXJlbmRlcihlLGwpe2UuYWRkUm9sbGJhY2soKSxlLm9wZW5Ob2RlKCJhbGlnbm1lbnQiKTtsZXQgbj0hMTtmdW5jdGlvbiBpKGYsYyl7YyYmKGUuYWRkQXR0cmlidXRlKGYsYyksbj0hMCl9aSgiaG9yaXpvbnRhbCIsci5ob3Jpem9udGFsKGwuaG9yaXpvbnRhbCkpLGkoInZlcnRpY2FsIixyLnZlcnRpY2FsKGwudmVydGljYWwpKSxpKCJ3cmFwVGV4dCIsISFyLndyYXBUZXh0KGwud3JhcFRleHQpJiYiMSIpLGkoInNocmlua1RvRml0IiwhIXIuc2hyaW5rVG9GaXQobC5zaHJpbmtUb0ZpdCkmJiIxIiksaSgiaW5kZW50IixyLmluZGVudChsLmluZGVudCkpLGkoInRleHRSb3RhdGlvbiIsdC50b1htbChsLnRleHRSb3RhdGlvbikpLGkoInJlYWRpbmdPcmRlciIsci5yZWFkaW5nT3JkZXIobC5yZWFkaW5nT3JkZXIpKSxlLmNsb3NlTm9kZSgpLG4/ZS5jb21taXQoKTplLnJvbGxiYWNrKCl9cGFyc2VPcGVuKGUpe2NvbnN0IGw9e307bGV0IG49ITE7ZnVuY3Rpb24gaShmLGMsdSl7ZiYmKGxbY109dSxuPSEwKX1pKGUuYXR0cmlidXRlcy5ob3Jpem9udGFsLCJob3Jpem9udGFsIixlLmF0dHJpYnV0ZXMuaG9yaXpvbnRhbCksaShlLmF0dHJpYnV0ZXMudmVydGljYWwsInZlcnRpY2FsIixlLmF0dHJpYnV0ZXMudmVydGljYWw9PT0iY2VudGVyIj8ibWlkZGxlIjplLmF0dHJpYnV0ZXMudmVydGljYWwpLGkoZS5hdHRyaWJ1dGVzLndyYXBUZXh0LCJ3cmFwVGV4dCIscy5wYXJzZUJvb2xlYW4oZS5hdHRyaWJ1dGVzLndyYXBUZXh0KSksaShlLmF0dHJpYnV0ZXMuc2hyaW5rVG9GaXQsInNocmlua1RvRml0IixzLnBhcnNlQm9vbGVhbihlLmF0dHJpYnV0ZXMuc2hyaW5rVG9GaXQpKSxpKGUuYXR0cmlidXRlcy5pbmRlbnQsImluZGVudCIscGFyc2VJbnQoZS5hdHRyaWJ1dGVzLmluZGVudCwxMCkpLGkoZS5hdHRyaWJ1dGVzLnRleHRSb3RhdGlvbiwidGV4dFJvdGF0aW9uIix0LnRvTW9kZWwoZS5hdHRyaWJ1dGVzLnRleHRSb3RhdGlvbikpLGkoZS5hdHRyaWJ1dGVzLnJlYWRpbmdPcmRlciwicmVhZGluZ09yZGVyIixlLmF0dHJpYnV0ZXMucmVhZGluZ09yZGVyPT09IjIiPyJydGwiOiJsdHIiKSx0aGlzLm1vZGVsPW4/bDpudWxsfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi8uLi8uLi9kb2MvZW51bXMiOjcsIi4uLy4uLy4uL3V0aWxzL3V0aWxzIjoyNywiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMjc6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPWEoIi4uLy4uLy4uL3V0aWxzL3V0aWxzIiksbz1hKCIuL2NvbG9yLXhmb3JtIik7Y2xhc3MgciBleHRlbmRzIG17Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm5hbWU9ZSx0aGlzLm1hcD17Y29sb3I6bmV3IG99fWdldCB0YWcoKXtyZXR1cm4gdGhpcy5uYW1lfXJlbmRlcihlLGwsbil7Y29uc3QgaT1sJiZsLmNvbG9yfHxufHx0aGlzLmRlZmF1bHRDb2xvcjtlLm9wZW5Ob2RlKHRoaXMubmFtZSksbCYmbC5zdHlsZSYmKGUuYWRkQXR0cmlidXRlKCJzdHlsZSIsbC5zdHlsZSksaSYmdGhpcy5tYXAuY29sb3IucmVuZGVyKGUsaSkpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLm5hbWU6e2NvbnN0e3N0eWxlOmx9PWUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5tb2RlbD1sP3tzdHlsZTpsfTp2b2lkIDAsITB9Y2FzZSJjb2xvciI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLmNvbG9yLHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITApOihlPT09dGhpcy5uYW1lJiZ0aGlzLm1hcC5jb2xvci5tb2RlbCYmKHRoaXMubW9kZWx8fCh0aGlzLm1vZGVsPXt9KSx0aGlzLm1vZGVsLmNvbG9yPXRoaXMubWFwLmNvbG9yLm1vZGVsKSwhMSl9dmFsaWRTdHlsZShlKXtyZXR1cm4gci52YWxpZFN0eWxlVmFsdWVzW2VdfX1yLnZhbGlkU3R5bGVWYWx1ZXM9WyJ0aGluIiwiZGFzaGVkIiwiZG90dGVkIiwiZGFzaERvdCIsImhhaXIiLCJkYXNoRG90RG90Iiwic2xhbnREYXNoRG90IiwibWVkaXVtRGFzaGVkIiwibWVkaXVtRGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3QiLCJtZWRpdW0iLCJkb3VibGUiLCJ0aGljayJdLnJlZHVjZSgodCxlKT0+KHRbZV09ITAsdCkse30pLEUuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXt0b3A6bmV3IHIoInRvcCIpLGxlZnQ6bmV3IHIoImxlZnQiKSxib3R0b206bmV3IHIoImJvdHRvbSIpLHJpZ2h0Om5ldyByKCJyaWdodCIpLGRpYWdvbmFsOm5ldyByKCJkaWFnb25hbCIpfX1yZW5kZXIodCxlKXtjb25zdHtjb2xvcjpsfT1lO2Z1bmN0aW9uIG4oaSxmKXtpJiYhaS5jb2xvciYmZS5jb2xvciYmKGk9ey4uLmksY29sb3I6ZS5jb2xvcn0pLGYucmVuZGVyKHQsaSxsKX10Lm9wZW5Ob2RlKCJib3JkZXIiKSxlLmRpYWdvbmFsJiZlLmRpYWdvbmFsLnN0eWxlJiYoZS5kaWFnb25hbC51cCYmdC5hZGRBdHRyaWJ1dGUoImRpYWdvbmFsVXAiLCIxIiksZS5kaWFnb25hbC5kb3duJiZ0LmFkZEF0dHJpYnV0ZSgiZGlhZ29uYWxEb3duIiwiMSIpKSxuKGUubGVmdCx0aGlzLm1hcC5sZWZ0KSxuKGUucmlnaHQsdGhpcy5tYXAucmlnaHQpLG4oZS50b3AsdGhpcy5tYXAudG9wKSxuKGUuYm90dG9tLHRoaXMubWFwLmJvdHRvbSksbihlLmRpYWdvbmFsLHRoaXMubWFwLmRpYWdvbmFsKSx0LmNsb3NlTm9kZSgpfXBhcnNlT3Blbih0KXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwO3N3aXRjaCh0Lm5hbWUpe2Nhc2UiYm9yZGVyIjpyZXR1cm4gdGhpcy5yZXNldCgpLHRoaXMuZGlhZ29uYWxVcD1zLnBhcnNlQm9vbGVhbih0LmF0dHJpYnV0ZXMuZGlhZ29uYWxVcCksdGhpcy5kaWFnb25hbERvd249cy5wYXJzZUJvb2xlYW4odC5hdHRyaWJ1dGVzLmRpYWdvbmFsRG93biksITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXBbdC5uYW1lXSwhIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VPcGVuKHQpLCEwKX19cGFyc2VUZXh0KHQpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQodCl9cGFyc2VDbG9zZSh0KXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZSh0KXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7aWYodD09PSJib3JkZXIiKXtjb25zdCBlPXRoaXMubW9kZWw9e30sbD1mdW5jdGlvbihuLGksZil7aSYmKGYmJk9iamVjdC5hc3NpZ24oaSxmKSxlW25dPWkpfTtsKCJsZWZ0Iix0aGlzLm1hcC5sZWZ0Lm1vZGVsKSxsKCJyaWdodCIsdGhpcy5tYXAucmlnaHQubW9kZWwpLGwoInRvcCIsdGhpcy5tYXAudG9wLm1vZGVsKSxsKCJib3R0b20iLHRoaXMubWFwLmJvdHRvbS5tb2RlbCksbCgiZGlhZ29uYWwiLHRoaXMubWFwLmRpYWdvbmFsLm1vZGVsLHt1cDp0aGlzLmRpYWdvbmFsVXAsZG93bjp0aGlzLmRpYWdvbmFsRG93bn0pfXJldHVybiExfX19LHsiLi4vLi4vLi4vdXRpbHMvdXRpbHMiOjI3LCIuLi9iYXNlLXhmb3JtIjozMiwiLi9jb2xvci14Zm9ybSI6MTI4fV0sMTI4OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIik7RS5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbXtjb25zdHJ1Y3RvcihzKXtzdXBlcigpLHRoaXMubmFtZT1zfHwiY29sb3IifWdldCB0YWcoKXtyZXR1cm4gdGhpcy5uYW1lfXJlbmRlcihzLG8pe3JldHVybiEhbyYmKHMub3Blbk5vZGUodGhpcy5uYW1lKSxvLmFyZ2I/cy5hZGRBdHRyaWJ1dGUoInJnYiIsby5hcmdiKTpvLnRoZW1lIT09dm9pZCAwPyhzLmFkZEF0dHJpYnV0ZSgidGhlbWUiLG8udGhlbWUpLG8udGludCE9PXZvaWQgMCYmcy5hZGRBdHRyaWJ1dGUoInRpbnQiLG8udGludCkpOm8uaW5kZXhlZCE9PXZvaWQgMD9zLmFkZEF0dHJpYnV0ZSgiaW5kZXhlZCIsby5pbmRleGVkKTpzLmFkZEF0dHJpYnV0ZSgiYXV0byIsIjEiKSxzLmNsb3NlTm9kZSgpLCEwKX1wYXJzZU9wZW4ocyl7cmV0dXJuIHMubmFtZT09PXRoaXMubmFtZSYmKHMuYXR0cmlidXRlcy5yZ2I/dGhpcy5tb2RlbD17YXJnYjpzLmF0dHJpYnV0ZXMucmdifTpzLmF0dHJpYnV0ZXMudGhlbWU/KHRoaXMubW9kZWw9e3RoZW1lOnBhcnNlSW50KHMuYXR0cmlidXRlcy50aGVtZSwxMCl9LHMuYXR0cmlidXRlcy50aW50JiYodGhpcy5tb2RlbC50aW50PXBhcnNlRmxvYXQocy5hdHRyaWJ1dGVzLnRpbnQpKSk6cy5hdHRyaWJ1dGVzLmluZGV4ZWQ/dGhpcy5tb2RlbD17aW5kZXhlZDpwYXJzZUludChzLmF0dHJpYnV0ZXMuaW5kZXhlZCwxMCl9OnRoaXMubW9kZWw9dm9pZCAwLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMjk6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPWEoIi4vYWxpZ25tZW50LXhmb3JtIiksbz1hKCIuL2JvcmRlci14Zm9ybSIpLHI9YSgiLi9maWxsLXhmb3JtIiksdD1hKCIuL2ZvbnQteGZvcm0iKSxlPWEoIi4vbnVtZm10LXhmb3JtIiksbD1hKCIuL3Byb3RlY3Rpb24teGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17YWxpZ25tZW50Om5ldyBzLGJvcmRlcjpuZXcgbyxmaWxsOm5ldyByLGZvbnQ6bmV3IHQsbnVtRm10Om5ldyBlLHByb3RlY3Rpb246bmV3IGx9fWdldCB0YWcoKXtyZXR1cm4iZHhmIn1yZW5kZXIobixpKXtpZihuLm9wZW5Ob2RlKHRoaXMudGFnKSxpLmZvbnQmJnRoaXMubWFwLmZvbnQucmVuZGVyKG4saS5mb250KSxpLm51bUZtdCYmaS5udW1GbXRJZCl7Y29uc3QgZj17aWQ6aS5udW1GbXRJZCxmb3JtYXRDb2RlOmkubnVtRm10fTt0aGlzLm1hcC5udW1GbXQucmVuZGVyKG4sZil9aS5maWxsJiZ0aGlzLm1hcC5maWxsLnJlbmRlcihuLGkuZmlsbCksaS5hbGlnbm1lbnQmJnRoaXMubWFwLmFsaWdubWVudC5yZW5kZXIobixpLmFsaWdubWVudCksaS5ib3JkZXImJnRoaXMubWFwLmJvcmRlci5yZW5kZXIobixpLmJvcmRlciksaS5wcm90ZWN0aW9uJiZ0aGlzLm1hcC5wcm90ZWN0aW9uLnJlbmRlcihuLGkucHJvdGVjdGlvbiksbi5jbG9zZU5vZGUoKX1wYXJzZU9wZW4obil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMDtzd2l0Y2gobi5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLnJlc2V0KCksITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXBbbi5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKG4pLCEwfX1wYXJzZVRleHQobil7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChuKX1wYXJzZUNsb3NlKG4pe3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShuKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITApOm4hPT10aGlzLnRhZ3x8KHRoaXMubW9kZWw9e2FsaWdubWVudDp0aGlzLm1hcC5hbGlnbm1lbnQubW9kZWwsYm9yZGVyOnRoaXMubWFwLmJvcmRlci5tb2RlbCxmaWxsOnRoaXMubWFwLmZpbGwubW9kZWwsZm9udDp0aGlzLm1hcC5mb250Lm1vZGVsLG51bUZtdDp0aGlzLm1hcC5udW1GbXQubW9kZWwscHJvdGVjdGlvbjp0aGlzLm1hcC5wcm90ZWN0aW9uLm1vZGVsfSwhMSl9fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9hbGlnbm1lbnQteGZvcm0iOjEyNiwiLi9ib3JkZXIteGZvcm0iOjEyNywiLi9maWxsLXhmb3JtIjoxMzAsIi4vZm9udC14Zm9ybSI6MTMxLCIuL251bWZtdC14Zm9ybSI6MTMyLCIuL3Byb3RlY3Rpb24teGZvcm0iOjEzM31dLDEzMDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpLHM9YSgiLi9jb2xvci14Zm9ybSIpO2NsYXNzIG8gZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y29sb3I6bmV3IHN9fWdldCB0YWcoKXtyZXR1cm4ic3RvcCJ9cmVuZGVyKG4saSl7bi5vcGVuTm9kZSgic3RvcCIpLG4uYWRkQXR0cmlidXRlKCJwb3NpdGlvbiIsaS5wb3NpdGlvbiksdGhpcy5tYXAuY29sb3IucmVuZGVyKG4saS5jb2xvciksbi5jbG9zZU5vZGUoKX1wYXJzZU9wZW4obil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMDtzd2l0Y2gobi5uYW1lKXtjYXNlInN0b3AiOnJldHVybiB0aGlzLm1vZGVsPXtwb3NpdGlvbjpwYXJzZUZsb2F0KG4uYXR0cmlidXRlcy5wb3NpdGlvbil9LCEwO2Nhc2UiY29sb3IiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcC5jb2xvcix0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2Uobil7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobil8fCh0aGlzLm1vZGVsLmNvbG9yPXRoaXMucGFyc2VyLm1vZGVsLHRoaXMucGFyc2VyPXZvaWQgMCksITApfX1jbGFzcyByIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2ZnQ29sb3I6bmV3IHMoImZnQ29sb3IiKSxiZ0NvbG9yOm5ldyBzKCJiZ0NvbG9yIil9fWdldCBuYW1lKCl7cmV0dXJuInBhdHRlcm4ifWdldCB0YWcoKXtyZXR1cm4icGF0dGVybkZpbGwifXJlbmRlcihuLGkpe24ub3Blbk5vZGUoInBhdHRlcm5GaWxsIiksbi5hZGRBdHRyaWJ1dGUoInBhdHRlcm5UeXBlIixpLnBhdHRlcm4pLGkuZmdDb2xvciYmdGhpcy5tYXAuZmdDb2xvci5yZW5kZXIobixpLmZnQ29sb3IpLGkuYmdDb2xvciYmdGhpcy5tYXAuYmdDb2xvci5yZW5kZXIobixpLmJnQ29sb3IpLG4uY2xvc2VOb2RlKCl9cGFyc2VPcGVuKG4pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITA7c3dpdGNoKG4ubmFtZSl7Y2FzZSJwYXR0ZXJuRmlsbCI6cmV0dXJuIHRoaXMubW9kZWw9e3R5cGU6InBhdHRlcm4iLHBhdHRlcm46bi5hdHRyaWJ1dGVzLnBhdHRlcm5UeXBlfSwhMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcFtuLm5hbWVdLCEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZU9wZW4obiksITApfX1wYXJzZVRleHQobil7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChuKX1wYXJzZUNsb3NlKG4pe3JldHVybiEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZUNsb3NlKG4pfHwodGhpcy5wYXJzZXIubW9kZWwmJih0aGlzLm1vZGVsW25dPXRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDApLCEwKX19Y2xhc3MgdCBleHRlbmRzIG17Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtzdG9wOm5ldyBvfX1nZXQgbmFtZSgpe3JldHVybiJncmFkaWVudCJ9Z2V0IHRhZygpe3JldHVybiJncmFkaWVudEZpbGwifXJlbmRlcihuLGkpe3N3aXRjaChuLm9wZW5Ob2RlKCJncmFkaWVudEZpbGwiKSxpLmdyYWRpZW50KXtjYXNlImFuZ2xlIjpuLmFkZEF0dHJpYnV0ZSgiZGVncmVlIixpLmRlZ3JlZSk7YnJlYWs7Y2FzZSJwYXRoIjpuLmFkZEF0dHJpYnV0ZSgidHlwZSIsInBhdGgiKSxpLmNlbnRlci5sZWZ0JiYobi5hZGRBdHRyaWJ1dGUoImxlZnQiLGkuY2VudGVyLmxlZnQpLGkuY2VudGVyLnJpZ2h0PT09dm9pZCAwJiZuLmFkZEF0dHJpYnV0ZSgicmlnaHQiLGkuY2VudGVyLmxlZnQpKSxpLmNlbnRlci5yaWdodCYmbi5hZGRBdHRyaWJ1dGUoInJpZ2h0IixpLmNlbnRlci5yaWdodCksaS5jZW50ZXIudG9wJiYobi5hZGRBdHRyaWJ1dGUoInRvcCIsaS5jZW50ZXIudG9wKSxpLmNlbnRlci5ib3R0b209PT12b2lkIDAmJm4uYWRkQXR0cmlidXRlKCJib3R0b20iLGkuY2VudGVyLnRvcCkpLGkuY2VudGVyLmJvdHRvbSYmbi5hZGRBdHRyaWJ1dGUoImJvdHRvbSIsaS5jZW50ZXIuYm90dG9tKX1jb25zdCBmPXRoaXMubWFwLnN0b3A7aS5zdG9wcy5mb3JFYWNoKGM9PntmLnJlbmRlcihuLGMpfSksbi5jbG9zZU5vZGUoKX1wYXJzZU9wZW4obil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMDtzd2l0Y2gobi5uYW1lKXtjYXNlImdyYWRpZW50RmlsbCI6e2NvbnN0IGk9dGhpcy5tb2RlbD17c3RvcHM6W119O3JldHVybiBuLmF0dHJpYnV0ZXMuZGVncmVlPyhpLmdyYWRpZW50PSJhbmdsZSIsaS5kZWdyZWU9cGFyc2VJbnQobi5hdHRyaWJ1dGVzLmRlZ3JlZSwxMCkpOm4uYXR0cmlidXRlcy50eXBlPT09InBhdGgiJiYoaS5ncmFkaWVudD0icGF0aCIsaS5jZW50ZXI9e2xlZnQ6bi5hdHRyaWJ1dGVzLmxlZnQ/cGFyc2VGbG9hdChuLmF0dHJpYnV0ZXMubGVmdCk6MCx0b3A6bi5hdHRyaWJ1dGVzLnRvcD9wYXJzZUZsb2F0KG4uYXR0cmlidXRlcy50b3ApOjB9LG4uYXR0cmlidXRlcy5yaWdodCE9PW4uYXR0cmlidXRlcy5sZWZ0JiYoaS5jZW50ZXIucmlnaHQ9bi5hdHRyaWJ1dGVzLnJpZ2h0P3BhcnNlRmxvYXQobi5hdHRyaWJ1dGVzLnJpZ2h0KTowKSxuLmF0dHJpYnV0ZXMuYm90dG9tIT09bi5hdHRyaWJ1dGVzLnRvcCYmKGkuY2VudGVyLmJvdHRvbT1uLmF0dHJpYnV0ZXMuYm90dG9tP3BhcnNlRmxvYXQobi5hdHRyaWJ1dGVzLmJvdHRvbSk6MCkpLCEwfWNhc2Uic3RvcCI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLnN0b3AsdGhpcy5wYXJzZXIucGFyc2VPcGVuKG4pLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChuKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KG4pfXBhcnNlQ2xvc2Uobil7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobil8fCh0aGlzLm1vZGVsLnN0b3BzLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCksITApfX1jbGFzcyBlIGV4dGVuZHMgbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e3BhdHRlcm5GaWxsOm5ldyByLGdyYWRpZW50RmlsbDpuZXcgdH19Z2V0IHRhZygpe3JldHVybiJmaWxsIn1yZW5kZXIobixpKXtzd2l0Y2gobi5hZGRSb2xsYmFjaygpLG4ub3Blbk5vZGUoImZpbGwiKSxpLnR5cGUpe2Nhc2UicGF0dGVybiI6dGhpcy5tYXAucGF0dGVybkZpbGwucmVuZGVyKG4saSk7YnJlYWs7Y2FzZSJncmFkaWVudCI6dGhpcy5tYXAuZ3JhZGllbnRGaWxsLnJlbmRlcihuLGkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQgbi5yb2xsYmFjaygpfW4uY2xvc2VOb2RlKCksbi5jb21taXQoKX1wYXJzZU9wZW4obil7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMDtzd2l0Y2gobi5uYW1lKXtjYXNlImZpbGwiOnJldHVybiB0aGlzLm1vZGVsPXt9LCEwO2RlZmF1bHQ6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwW24ubmFtZV0sISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlT3BlbihuKSwhMCl9fXBhcnNlVGV4dChuKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KG4pfXBhcnNlQ2xvc2Uobil7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlQ2xvc2Uobil8fCh0aGlzLm1vZGVsPXRoaXMucGFyc2VyLm1vZGVsLHRoaXMubW9kZWwudHlwZT10aGlzLnBhcnNlci5uYW1lLHRoaXMucGFyc2VyPXZvaWQgMCksITApfXZhbGlkU3R5bGUobil7cmV0dXJuIGUudmFsaWRQYXR0ZXJuVmFsdWVzW25dfX1lLnZhbGlkUGF0dGVyblZhbHVlcz1bIm5vbmUiLCJzb2xpZCIsImRhcmtWZXJ0aWNhbCIsImRhcmtHcmF5IiwibWVkaXVtR3JheSIsImxpZ2h0R3JheSIsImdyYXkxMjUiLCJncmF5MDYyNSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJsaWdodEdyaWQiXS5yZWR1Y2UoKGwsbik9PihsW25dPSEwLGwpLHt9KSxlLlN0b3BYZm9ybT1vLGUuUGF0dGVybkZpbGxYZm9ybT1yLGUuR3JhZGllbnRGaWxsWGZvcm09dCxFLmV4cG9ydHM9ZX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9jb2xvci14Zm9ybSI6MTI4fV0sMTMxOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuL2NvbG9yLXhmb3JtIikscz1hKCIuLi9zaW1wbGUvYm9vbGVhbi14Zm9ybSIpLG89YSgiLi4vc2ltcGxlL2ludGVnZXIteGZvcm0iKSxyPWEoIi4uL3NpbXBsZS9zdHJpbmcteGZvcm0iKSx0PWEoIi4vdW5kZXJsaW5lLXhmb3JtIiksZT1hKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIiksbD1hKCIuLi9iYXNlLXhmb3JtIik7Y2xhc3MgbiBleHRlbmRzIGx7Y29uc3RydWN0b3IoZil7c3VwZXIoKSx0aGlzLm9wdGlvbnM9Znx8bi5PUFRJT05TLHRoaXMubWFwPXtiOntwcm9wOiJib2xkIix4Zm9ybTpuZXcgcyh7dGFnOiJiIixhdHRyOiJ2YWwifSl9LGk6e3Byb3A6Iml0YWxpYyIseGZvcm06bmV3IHMoe3RhZzoiaSIsYXR0cjoidmFsIn0pfSx1Ontwcm9wOiJ1bmRlcmxpbmUiLHhmb3JtOm5ldyB0fSxjaGFyc2V0Ontwcm9wOiJjaGFyc2V0Iix4Zm9ybTpuZXcgbyh7dGFnOiJjaGFyc2V0IixhdHRyOiJ2YWwifSl9LGNvbG9yOntwcm9wOiJjb2xvciIseGZvcm06bmV3IG19LGNvbmRlbnNlOntwcm9wOiJjb25kZW5zZSIseGZvcm06bmV3IHMoe3RhZzoiY29uZGVuc2UiLGF0dHI6InZhbCJ9KX0sZXh0ZW5kOntwcm9wOiJleHRlbmQiLHhmb3JtOm5ldyBzKHt0YWc6ImV4dGVuZCIsYXR0cjoidmFsIn0pfSxmYW1pbHk6e3Byb3A6ImZhbWlseSIseGZvcm06bmV3IG8oe3RhZzoiZmFtaWx5IixhdHRyOiJ2YWwifSl9LG91dGxpbmU6e3Byb3A6Im91dGxpbmUiLHhmb3JtOm5ldyBzKHt0YWc6Im91dGxpbmUiLGF0dHI6InZhbCJ9KX0sdmVydEFsaWduOntwcm9wOiJ2ZXJ0QWxpZ24iLHhmb3JtOm5ldyByKHt0YWc6InZlcnRBbGlnbiIsYXR0cjoidmFsIn0pfSxzY2hlbWU6e3Byb3A6InNjaGVtZSIseGZvcm06bmV3IHIoe3RhZzoic2NoZW1lIixhdHRyOiJ2YWwifSl9LHNoYWRvdzp7cHJvcDoic2hhZG93Iix4Zm9ybTpuZXcgcyh7dGFnOiJzaGFkb3ciLGF0dHI6InZhbCJ9KX0sc3RyaWtlOntwcm9wOiJzdHJpa2UiLHhmb3JtOm5ldyBzKHt0YWc6InN0cmlrZSIsYXR0cjoidmFsIn0pfSxzejp7cHJvcDoic2l6ZSIseGZvcm06bmV3IG8oe3RhZzoic3oiLGF0dHI6InZhbCJ9KX19LHRoaXMubWFwW3RoaXMub3B0aW9ucy5mb250TmFtZVRhZ109e3Byb3A6Im5hbWUiLHhmb3JtOm5ldyByKHt0YWc6dGhpcy5vcHRpb25zLmZvbnROYW1lVGFnLGF0dHI6InZhbCJ9KX19Z2V0IHRhZygpe3JldHVybiB0aGlzLm9wdGlvbnMudGFnTmFtZX1yZW5kZXIoZixjKXtjb25zdHttYXA6dX09dGhpcztmLm9wZW5Ob2RlKHRoaXMub3B0aW9ucy50YWdOYW1lKSxlLmVhY2godGhpcy5tYXAsKGQsaCk9Pnt1W2hdLnhmb3JtLnJlbmRlcihmLGNbZC5wcm9wXSl9KSxmLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihmKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGYpLCEwO2lmKHRoaXMubWFwW2YubmFtZV0pcmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwW2YubmFtZV0ueGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGYpO3N3aXRjaChmLm5hbWUpe2Nhc2UgdGhpcy5vcHRpb25zLnRhZ05hbWU6cmV0dXJuIHRoaXMubW9kZWw9e30sITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGYpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZil9cGFyc2VDbG9zZShmKXtpZih0aGlzLnBhcnNlciYmIXRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZikpe2NvbnN0IGM9dGhpcy5tYXBbZl07cmV0dXJuIHRoaXMucGFyc2VyLm1vZGVsJiYodGhpcy5tb2RlbFtjLnByb3BdPXRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDAsITB9c3dpdGNoKGYpe2Nhc2UgdGhpcy5vcHRpb25zLnRhZ05hbWU6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19fW4uT1BUSU9OUz17dGFnTmFtZToiZm9udCIsZm9udE5hbWVUYWc6Im5hbWUifSxFLmV4cG9ydHM9bn0seyIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIjoyNiwiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL3NpbXBsZS9ib29sZWFuLXhmb3JtIjoxMTYsIi4uL3NpbXBsZS9pbnRlZ2VyLXhmb3JtIjoxMTgsIi4uL3NpbXBsZS9zdHJpbmcteGZvcm0iOjExOSwiLi9jb2xvci14Zm9ybSI6MTI4LCIuL3VuZGVybGluZS14Zm9ybSI6MTM2fV0sMTMyOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIikscz1hKCIuLi8uLi9kZWZhdWx0bnVtZm9ybWF0cyIpLG89YSgiLi4vYmFzZS14Zm9ybSIpLHI9ZnVuY3Rpb24oKXtjb25zdCBlPXt9O3JldHVybiBtLmVhY2gocywobCxuKT0+e2wuZiYmKGVbbC5mXT1wYXJzZUludChuLDEwKSl9KSxlfSgpO2NsYXNzIHQgZXh0ZW5kcyBve2NvbnN0cnVjdG9yKGwsbil7c3VwZXIoKSx0aGlzLmlkPWwsdGhpcy5mb3JtYXRDb2RlPW59Z2V0IHRhZygpe3JldHVybiJudW1GbXQifXJlbmRlcihsLG4pe2wubGVhZk5vZGUoIm51bUZtdCIse251bUZtdElkOm4uaWQsZm9ybWF0Q29kZTpuLmZvcm1hdENvZGV9KX1wYXJzZU9wZW4obCl7c3dpdGNoKGwubmFtZSl7Y2FzZSJudW1GbXQiOnJldHVybiB0aGlzLm1vZGVsPXtpZDpwYXJzZUludChsLmF0dHJpYnV0ZXMubnVtRm10SWQsMTApLGZvcm1hdENvZGU6bC5hdHRyaWJ1dGVzLmZvcm1hdENvZGUucmVwbGFjZSgvW1xcXSguKS9nLCIkMSIpfSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX10LmdldERlZmF1bHRGbXRJZD1mdW5jdGlvbihlKXtyZXR1cm4gcltlXX0sdC5nZXREZWZhdWx0Rm10Q29kZT1mdW5jdGlvbihlKXtyZXR1cm4gc1tlXSYmc1tlXS5mfSxFLmV4cG9ydHM9dH0seyIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoIjoyNiwiLi4vLi4vZGVmYXVsdG51bWZvcm1hdHMiOjMwLCIuLi9iYXNlLXhmb3JtIjozMn1dLDEzMzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpLHM9e2Jvb2xlYW46KG8scik9Pm89PT12b2lkIDA/cjpvfTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4icHJvdGVjdGlvbiJ9cmVuZGVyKG8scil7by5hZGRSb2xsYmFjaygpLG8ub3Blbk5vZGUoInByb3RlY3Rpb24iKTtsZXQgdD0hMTtmdW5jdGlvbiBlKGwsbil7biE9PXZvaWQgMCYmKG8uYWRkQXR0cmlidXRlKGwsbiksdD0hMCl9ZSgibG9ja2VkIixzLmJvb2xlYW4oci5sb2NrZWQsITApP3ZvaWQgMDoiMCIpLGUoImhpZGRlbiIscy5ib29sZWFuKHIuaGlkZGVuLCExKT8iMSI6dm9pZCAwKSxvLmNsb3NlTm9kZSgpLHQ/by5jb21taXQoKTpvLnJvbGxiYWNrKCl9cGFyc2VPcGVuKG8pe2NvbnN0IHI9e2xvY2tlZDpvLmF0dHJpYnV0ZXMubG9ja2VkIT09IjAiLGhpZGRlbjpvLmF0dHJpYnV0ZXMuaGlkZGVuPT09IjEifSx0PSFyLmxvY2tlZHx8ci5oaWRkZW47dGhpcy5tb2RlbD10P3I6bnVsbH1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMzQ6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPWEoIi4vYWxpZ25tZW50LXhmb3JtIiksbz1hKCIuL3Byb3RlY3Rpb24teGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKHIpe3N1cGVyKCksdGhpcy54ZklkPSEoIXJ8fCFyLnhmSWQpLHRoaXMubWFwPXthbGlnbm1lbnQ6bmV3IHMscHJvdGVjdGlvbjpuZXcgb319Z2V0IHRhZygpe3JldHVybiJ4ZiJ9cmVuZGVyKHIsdCl7ci5vcGVuTm9kZSgieGYiLHtudW1GbXRJZDp0Lm51bUZtdElkfHwwLGZvbnRJZDp0LmZvbnRJZHx8MCxmaWxsSWQ6dC5maWxsSWR8fDAsYm9yZGVySWQ6dC5ib3JkZXJJZHx8MH0pLHRoaXMueGZJZCYmci5hZGRBdHRyaWJ1dGUoInhmSWQiLHQueGZJZHx8MCksdC5udW1GbXRJZCYmci5hZGRBdHRyaWJ1dGUoImFwcGx5TnVtYmVyRm9ybWF0IiwiMSIpLHQuZm9udElkJiZyLmFkZEF0dHJpYnV0ZSgiYXBwbHlGb250IiwiMSIpLHQuZmlsbElkJiZyLmFkZEF0dHJpYnV0ZSgiYXBwbHlGaWxsIiwiMSIpLHQuYm9yZGVySWQmJnIuYWRkQXR0cmlidXRlKCJhcHBseUJvcmRlciIsIjEiKSx0LmFsaWdubWVudCYmci5hZGRBdHRyaWJ1dGUoImFwcGx5QWxpZ25tZW50IiwiMSIpLHQucHJvdGVjdGlvbiYmci5hZGRBdHRyaWJ1dGUoImFwcGx5UHJvdGVjdGlvbiIsIjEiKSx0LmFsaWdubWVudCYmdGhpcy5tYXAuYWxpZ25tZW50LnJlbmRlcihyLHQuYWxpZ25tZW50KSx0LnByb3RlY3Rpb24mJnRoaXMubWFwLnByb3RlY3Rpb24ucmVuZGVyKHIsdC5wcm90ZWN0aW9uKSxyLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihyKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpLCEwO3N3aXRjaChyLm5hbWUpe2Nhc2UieGYiOnJldHVybiB0aGlzLm1vZGVsPXtudW1GbXRJZDpwYXJzZUludChyLmF0dHJpYnV0ZXMubnVtRm10SWQsMTApLGZvbnRJZDpwYXJzZUludChyLmF0dHJpYnV0ZXMuZm9udElkLDEwKSxmaWxsSWQ6cGFyc2VJbnQoci5hdHRyaWJ1dGVzLmZpbGxJZCwxMCksYm9yZGVySWQ6cGFyc2VJbnQoci5hdHRyaWJ1dGVzLmJvcmRlcklkLDEwKX0sdGhpcy54ZklkJiYodGhpcy5tb2RlbC54ZklkPXBhcnNlSW50KHIuYXR0cmlidXRlcy54ZklkLDEwKSksITA7Y2FzZSJhbGlnbm1lbnQiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcC5hbGlnbm1lbnQsdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpLCEwO2Nhc2UicHJvdGVjdGlvbiI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLnByb3RlY3Rpb24sdGhpcy5wYXJzZXIucGFyc2VPcGVuKHIpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChyKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KHIpfXBhcnNlQ2xvc2Uocil7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKHIpfHwodGhpcy5tYXAucHJvdGVjdGlvbj09PXRoaXMucGFyc2VyP3RoaXMubW9kZWwucHJvdGVjdGlvbj10aGlzLnBhcnNlci5tb2RlbDp0aGlzLm1vZGVsLmFsaWdubWVudD10aGlzLnBhcnNlci5tb2RlbCx0aGlzLnBhcnNlcj12b2lkIDApLCEwKTpyIT09InhmIn19fSx7Ii4uL2Jhc2UteGZvcm0iOjMyLCIuL2FsaWdubWVudC14Zm9ybSI6MTI2LCIuL3Byb3RlY3Rpb24teGZvcm0iOjEzM31dLDEzNTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vLi4vLi4vZG9jL2VudW1zIikscz1hKCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIiksbz1hKCIuLi9iYXNlLXhmb3JtIikscj1hKCIuLi9zdGF0aWMteGZvcm0iKSx0PWEoIi4uL2xpc3QteGZvcm0iKSxlPWEoIi4vZm9udC14Zm9ybSIpLGw9YSgiLi9maWxsLXhmb3JtIiksbj1hKCIuL2JvcmRlci14Zm9ybSIpLGk9YSgiLi9udW1mbXQteGZvcm0iKSxmPWEoIi4vc3R5bGUteGZvcm0iKSxjPWEoIi4vZHhmLXhmb3JtIik7Y2xhc3MgdSBleHRlbmRzIG97Y29uc3RydWN0b3IoaCl7c3VwZXIoKSx0aGlzLm1hcD17bnVtRm10czpuZXcgdCh7dGFnOiJudW1GbXRzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBpfSksZm9udHM6bmV3IHQoe3RhZzoiZm9udHMiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IGUsJDp7IngxNGFjOmtub3duRm9udHMiOjF9fSksZmlsbHM6bmV3IHQoe3RhZzoiZmlsbHMiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IGx9KSxib3JkZXJzOm5ldyB0KHt0YWc6ImJvcmRlcnMiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IG59KSxjZWxsU3R5bGVYZnM6bmV3IHQoe3RhZzoiY2VsbFN0eWxlWGZzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBmfSksY2VsbFhmczpuZXcgdCh7dGFnOiJjZWxsWGZzIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBmKHt4ZklkOiEwfSl9KSxkeGZzOm5ldyB0KHt0YWc6ImR4ZnMiLGFsd2F5czohMCxjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBjfSksbnVtRm10Om5ldyBpLGZvbnQ6bmV3IGUsZmlsbDpuZXcgbCxib3JkZXI6bmV3IG4sc3R5bGU6bmV3IGYoe3hmSWQ6ITB9KSxjZWxsU3R5bGVzOnUuU1RBVElDX1hGT1JNUy5jZWxsU3R5bGVzLHRhYmxlU3R5bGVzOnUuU1RBVElDX1hGT1JNUy50YWJsZVN0eWxlcyxleHRMc3Q6dS5TVEFUSUNfWEZPUk1TLmV4dExzdH0saCYmdGhpcy5pbml0KCl9aW5pdEluZGV4KCl7dGhpcy5pbmRleD17c3R5bGU6e30sbnVtRm10Ont9LG51bUZtdE5leHRJZDoxNjQsZm9udDp7fSxib3JkZXI6e30sZmlsbDp7fX19aW5pdCgpe3RoaXMubW9kZWw9e3N0eWxlczpbXSxudW1GbXRzOltdLGZvbnRzOltdLGJvcmRlcnM6W10sZmlsbHM6W10sZHhmczpbXX0sdGhpcy5pbml0SW5kZXgoKSx0aGlzLl9hZGRCb3JkZXIoe30pLHRoaXMuX2FkZFN0eWxlKHtudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjAseGZJZDowfSksdGhpcy5fYWRkRmlsbCh7dHlwZToicGF0dGVybiIscGF0dGVybjoibm9uZSJ9KSx0aGlzLl9hZGRGaWxsKHt0eXBlOiJwYXR0ZXJuIixwYXR0ZXJuOiJncmF5MTI1In0pLHRoaXMud2Vha01hcD1uZXcgV2Vha01hcH1yZW5kZXIoaCx3KXt3PXd8fHRoaXMubW9kZWwsaC5vcGVuWG1sKHMuU3RkRG9jQXR0cmlidXRlcyksaC5vcGVuTm9kZSgic3R5bGVTaGVldCIsdS5TVFlMRVNIRUVUX0FUVFJJQlVURVMpLHRoaXMuaW5kZXg/KHcubnVtRm10cyYmdy5udW1GbXRzLmxlbmd0aCYmKGgub3Blbk5vZGUoIm51bUZtdHMiLHtjb3VudDp3Lm51bUZtdHMubGVuZ3RofSksdy5udW1GbXRzLmZvckVhY2goXz0+e2gud3JpdGVYbWwoXyl9KSxoLmNsb3NlTm9kZSgpKSx3LmZvbnRzLmxlbmd0aHx8dGhpcy5fYWRkRm9udCh7c2l6ZToxMSxjb2xvcjp7dGhlbWU6MX0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9KSxoLm9wZW5Ob2RlKCJmb250cyIse2NvdW50OncuZm9udHMubGVuZ3RoLCJ4MTRhYzprbm93bkZvbnRzIjoxfSksdy5mb250cy5mb3JFYWNoKF89PntoLndyaXRlWG1sKF8pfSksaC5jbG9zZU5vZGUoKSxoLm9wZW5Ob2RlKCJmaWxscyIse2NvdW50OncuZmlsbHMubGVuZ3RofSksdy5maWxscy5mb3JFYWNoKF89PntoLndyaXRlWG1sKF8pfSksaC5jbG9zZU5vZGUoKSxoLm9wZW5Ob2RlKCJib3JkZXJzIix7Y291bnQ6dy5ib3JkZXJzLmxlbmd0aH0pLHcuYm9yZGVycy5mb3JFYWNoKF89PntoLndyaXRlWG1sKF8pfSksaC5jbG9zZU5vZGUoKSx0aGlzLm1hcC5jZWxsU3R5bGVYZnMucmVuZGVyKGgsW3tudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjAseGZJZDowfV0pLGgub3Blbk5vZGUoImNlbGxYZnMiLHtjb3VudDp3LnN0eWxlcy5sZW5ndGh9KSx3LnN0eWxlcy5mb3JFYWNoKF89PntoLndyaXRlWG1sKF8pfSksaC5jbG9zZU5vZGUoKSk6KHRoaXMubWFwLm51bUZtdHMucmVuZGVyKGgsdy5udW1GbXRzKSx0aGlzLm1hcC5mb250cy5yZW5kZXIoaCx3LmZvbnRzKSx0aGlzLm1hcC5maWxscy5yZW5kZXIoaCx3LmZpbGxzKSx0aGlzLm1hcC5ib3JkZXJzLnJlbmRlcihoLHcuYm9yZGVycyksdGhpcy5tYXAuY2VsbFN0eWxlWGZzLnJlbmRlcihoLFt7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowLHhmSWQ6MH1dKSx0aGlzLm1hcC5jZWxsWGZzLnJlbmRlcihoLHcuc3R5bGVzKSksdS5TVEFUSUNfWEZPUk1TLmNlbGxTdHlsZXMucmVuZGVyKGgpLHRoaXMubWFwLmR4ZnMucmVuZGVyKGgsdy5keGZzKSx1LlNUQVRJQ19YRk9STVMudGFibGVTdHlsZXMucmVuZGVyKGgpLHUuU1RBVElDX1hGT1JNUy5leHRMc3QucmVuZGVyKGgpLGguY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGgpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oaCksITA7c3dpdGNoKGgubmFtZSl7Y2FzZSJzdHlsZVNoZWV0IjpyZXR1cm4gdGhpcy5pbml0SW5kZXgoKSwhMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcFtoLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oaCksITB9fXBhcnNlVGV4dChoKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGgpfXBhcnNlQ2xvc2UoaCl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoaCl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChoKXtjYXNlInN0eWxlU2hlZXQiOnt0aGlzLm1vZGVsPXt9O2NvbnN0IHc9KF8sQSk9PntBLm1vZGVsJiZBLm1vZGVsLmxlbmd0aCYmKHRoaXMubW9kZWxbX109QS5tb2RlbCl9O2lmKHcoIm51bUZtdHMiLHRoaXMubWFwLm51bUZtdHMpLHcoImZvbnRzIix0aGlzLm1hcC5mb250cyksdygiZmlsbHMiLHRoaXMubWFwLmZpbGxzKSx3KCJib3JkZXJzIix0aGlzLm1hcC5ib3JkZXJzKSx3KCJzdHlsZXMiLHRoaXMubWFwLmNlbGxYZnMpLHcoImR4ZnMiLHRoaXMubWFwLmR4ZnMpLHRoaXMuaW5kZXg9e21vZGVsOltdLG51bUZtdDpbXX0sdGhpcy5tb2RlbC5udW1GbXRzKXtjb25zdCBfPXRoaXMuaW5kZXgubnVtRm10O3RoaXMubW9kZWwubnVtRm10cy5mb3JFYWNoKEE9PntfW0EuaWRdPUEuZm9ybWF0Q29kZX0pfXJldHVybiExfWRlZmF1bHQ6cmV0dXJuITB9fWFkZFN0eWxlTW9kZWwoaCx3KXtpZighaClyZXR1cm4gMDtpZih0aGlzLm1vZGVsLmZvbnRzLmxlbmd0aHx8dGhpcy5fYWRkRm9udCh7c2l6ZToxMSxjb2xvcjp7dGhlbWU6MX0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9KSx0aGlzLndlYWtNYXAmJnRoaXMud2Vha01hcC5oYXMoaCkpcmV0dXJuIHRoaXMud2Vha01hcC5nZXQoaCk7Y29uc3QgXz17fTtpZih3PXd8fG0uVmFsdWVUeXBlLk51bWJlcixoLm51bUZtdClfLm51bUZtdElkPXRoaXMuX2FkZE51bUZtdFN0cihoLm51bUZtdCk7ZWxzZSBzd2l0Y2godyl7Y2FzZSBtLlZhbHVlVHlwZS5OdW1iZXI6Xy5udW1GbXRJZD10aGlzLl9hZGROdW1GbXRTdHIoIkdlbmVyYWwiKTticmVhaztjYXNlIG0uVmFsdWVUeXBlLkRhdGU6Xy5udW1GbXRJZD10aGlzLl9hZGROdW1GbXRTdHIoIm1tLWRkLXl5Iil9aC5mb250JiYoXy5mb250SWQ9dGhpcy5fYWRkRm9udChoLmZvbnQpKSxoLmJvcmRlciYmKF8uYm9yZGVySWQ9dGhpcy5fYWRkQm9yZGVyKGguYm9yZGVyKSksaC5maWxsJiYoXy5maWxsSWQ9dGhpcy5fYWRkRmlsbChoLmZpbGwpKSxoLmFsaWdubWVudCYmKF8uYWxpZ25tZW50PWguYWxpZ25tZW50KSxoLnByb3RlY3Rpb24mJihfLnByb3RlY3Rpb249aC5wcm90ZWN0aW9uKTtjb25zdCBBPXRoaXMuX2FkZFN0eWxlKF8pO3JldHVybiB0aGlzLndlYWtNYXAmJnRoaXMud2Vha01hcC5zZXQoaCxBKSxBfWdldFN0eWxlTW9kZWwoaCl7Y29uc3Qgdz10aGlzLm1vZGVsLnN0eWxlc1toXTtpZighdylyZXR1cm4gbnVsbDtsZXQgXz10aGlzLmluZGV4Lm1vZGVsW2hdO2lmKF8pcmV0dXJuIF87aWYoXz10aGlzLmluZGV4Lm1vZGVsW2hdPXt9LHcubnVtRm10SWQpe2NvbnN0IFA9dGhpcy5pbmRleC5udW1GbXRbdy5udW1GbXRJZF18fGkuZ2V0RGVmYXVsdEZtdENvZGUody5udW1GbXRJZCk7UCYmKF8ubnVtRm10PVApfWZ1bmN0aW9uIEEoUCxMLE4pe2lmKE58fE49PT0wKXtjb25zdCBEPUxbTl07RCYmKF9bUF09RCl9fXJldHVybiBBKCJmb250Iix0aGlzLm1vZGVsLmZvbnRzLHcuZm9udElkKSxBKCJib3JkZXIiLHRoaXMubW9kZWwuYm9yZGVycyx3LmJvcmRlcklkKSxBKCJmaWxsIix0aGlzLm1vZGVsLmZpbGxzLHcuZmlsbElkKSx3LmFsaWdubWVudCYmKF8uYWxpZ25tZW50PXcuYWxpZ25tZW50KSx3LnByb3RlY3Rpb24mJihfLnByb3RlY3Rpb249dy5wcm90ZWN0aW9uKSxffWFkZER4ZlN0eWxlKGgpe3JldHVybiBoLm51bUZtdCYmKGgubnVtRm10SWQ9dGhpcy5fYWRkTnVtRm10U3RyKGgubnVtRm10KSksdGhpcy5tb2RlbC5keGZzLnB1c2goaCksdGhpcy5tb2RlbC5keGZzLmxlbmd0aC0xfWdldER4ZlN0eWxlKGgpe3JldHVybiB0aGlzLm1vZGVsLmR4ZnNbaF19X2FkZFN0eWxlKGgpe2NvbnN0IHc9dGhpcy5tYXAuc3R5bGUudG9YbWwoaCk7bGV0IF89dGhpcy5pbmRleC5zdHlsZVt3XTtyZXR1cm4gXz09PXZvaWQgMCYmKF89dGhpcy5pbmRleC5zdHlsZVt3XT10aGlzLm1vZGVsLnN0eWxlcy5sZW5ndGgsdGhpcy5tb2RlbC5zdHlsZXMucHVzaCh3KSksX31fYWRkTnVtRm10U3RyKGgpe2xldCB3PWkuZ2V0RGVmYXVsdEZtdElkKGgpO2lmKHchPT12b2lkIDB8fCh3PXRoaXMuaW5kZXgubnVtRm10W2hdLHchPT12b2lkIDApKXJldHVybiB3O3c9dGhpcy5pbmRleC5udW1GbXRbaF09MTY0K3RoaXMubW9kZWwubnVtRm10cy5sZW5ndGg7Y29uc3QgXz10aGlzLm1hcC5udW1GbXQudG9YbWwoe2lkOncsZm9ybWF0Q29kZTpofSk7cmV0dXJuIHRoaXMubW9kZWwubnVtRm10cy5wdXNoKF8pLHd9X2FkZEZvbnQoaCl7Y29uc3Qgdz10aGlzLm1hcC5mb250LnRvWG1sKGgpO2xldCBfPXRoaXMuaW5kZXguZm9udFt3XTtyZXR1cm4gXz09PXZvaWQgMCYmKF89dGhpcy5pbmRleC5mb250W3ddPXRoaXMubW9kZWwuZm9udHMubGVuZ3RoLHRoaXMubW9kZWwuZm9udHMucHVzaCh3KSksX31fYWRkQm9yZGVyKGgpe2NvbnN0IHc9dGhpcy5tYXAuYm9yZGVyLnRvWG1sKGgpO2xldCBfPXRoaXMuaW5kZXguYm9yZGVyW3ddO3JldHVybiBfPT09dm9pZCAwJiYoXz10aGlzLmluZGV4LmJvcmRlclt3XT10aGlzLm1vZGVsLmJvcmRlcnMubGVuZ3RoLHRoaXMubW9kZWwuYm9yZGVycy5wdXNoKHcpKSxffV9hZGRGaWxsKGgpe2NvbnN0IHc9dGhpcy5tYXAuZmlsbC50b1htbChoKTtsZXQgXz10aGlzLmluZGV4LmZpbGxbd107cmV0dXJuIF89PT12b2lkIDAmJihfPXRoaXMuaW5kZXguZmlsbFt3XT10aGlzLm1vZGVsLmZpbGxzLmxlbmd0aCx0aGlzLm1vZGVsLmZpbGxzLnB1c2godykpLF99fXUuU1RZTEVTSEVFVF9BVFRSSUJVVEVTPXt4bWxuczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIHgxNnIyIiwieG1sbnM6eDE0YWMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyIsInhtbG5zOngxNnIyIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDE1LzAyL21haW4ifSx1LlNUQVRJQ19YRk9STVM9e2NlbGxTdHlsZXM6bmV3IHIoe3RhZzoiY2VsbFN0eWxlcyIsJDp7Y291bnQ6MX0sYzpbe3RhZzoiY2VsbFN0eWxlIiwkOntuYW1lOiJOb3JtYWwiLHhmSWQ6MCxidWlsdGluSWQ6MH19XX0pLGR4ZnM6bmV3IHIoe3RhZzoiZHhmcyIsJDp7Y291bnQ6MH19KSx0YWJsZVN0eWxlczpuZXcgcih7dGFnOiJ0YWJsZVN0eWxlcyIsJDp7Y291bnQ6MCxkZWZhdWx0VGFibGVTdHlsZToiVGFibGVTdHlsZU1lZGl1bTIiLGRlZmF1bHRQaXZvdFN0eWxlOiJQaXZvdFN0eWxlTGlnaHQxNiJ9fSksZXh0THN0Om5ldyByKHt0YWc6ImV4dExzdCIsYzpbe3RhZzoiZXh0IiwkOnt1cmk6IntFQjc5REVGMi04MEI4LTQzZTUtOTVCRC01NENCRERGOTAyMEN9IiwieG1sbnM6eDE0IjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvbWFpbiJ9LGM6W3t0YWc6IngxNDpzbGljZXJTdHlsZXMiLCQ6e2RlZmF1bHRTbGljZXJTdHlsZToiU2xpY2VyU3R5bGVMaWdodDEifX1dfSx7dGFnOiJleHQiLCQ6e3VyaToiezkyNjBBNTEwLUYzMDEtNDZhOC04NjM1LUY1MTJENjRCRTVGNX0iLCJ4bWxuczp4MTUiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMTAvMTEvbWFpbiJ9LGM6W3t0YWc6IngxNTp0aW1lbGluZVN0eWxlcyIsJDp7ZGVmYXVsdFRpbWVsaW5lU3R5bGU6IlRpbWVTbGljZXJTdHlsZUxpZ2h0MSJ9fV19XX0pfSx1Lk1vY2s9Y2xhc3MgZXh0ZW5kcyB1e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1vZGVsPXtzdHlsZXM6W3tudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjAseGZJZDowfV0sbnVtRm10czpbXSxmb250czpbe3NpemU6MTEsY29sb3I6e3RoZW1lOjF9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sYm9yZGVyczpbe31dLGZpbGxzOlt7dHlwZToicGF0dGVybiIscGF0dGVybjoibm9uZSJ9LHt0eXBlOiJwYXR0ZXJuIixwYXR0ZXJuOiJncmF5MTI1In1dfX1wYXJzZVN0cmVhbShkKXtyZXR1cm4gZC5hdXRvZHJhaW4oKSxQcm9taXNlLnJlc29sdmUoKX1hZGRTdHlsZU1vZGVsKGQsaCl7c3dpdGNoKGgpe2Nhc2UgbS5WYWx1ZVR5cGUuRGF0ZTpyZXR1cm4gdGhpcy5kYXRlU3R5bGVJZDtkZWZhdWx0OnJldHVybiAwfX1nZXQgZGF0ZVN0eWxlSWQoKXtpZighdGhpcy5fZGF0ZVN0eWxlSWQpe2NvbnN0IGQ9e251bUZtdElkOmkuZ2V0RGVmYXVsdEZtdElkKCJtbS1kZC15eSIpfTt0aGlzLl9kYXRlU3R5bGVJZD10aGlzLm1vZGVsLnN0eWxlcy5sZW5ndGgsdGhpcy5tb2RlbC5zdHlsZXMucHVzaChkKX1yZXR1cm4gdGhpcy5fZGF0ZVN0eWxlSWR9Z2V0U3R5bGVNb2RlbCgpe3JldHVybnt9fX0sRS5leHBvcnRzPXV9LHsiLi4vLi4vLi4vZG9jL2VudW1zIjo3LCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL2xpc3QteGZvcm0iOjcxLCIuLi9zdGF0aWMteGZvcm0iOjEyMCwiLi9ib3JkZXIteGZvcm0iOjEyNywiLi9keGYteGZvcm0iOjEyOSwiLi9maWxsLXhmb3JtIjoxMzAsIi4vZm9udC14Zm9ybSI6MTMxLCIuL251bWZtdC14Zm9ybSI6MTMyLCIuL3N0eWxlLXhmb3JtIjoxMzR9XSwxMzY6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtjbGFzcyBzIGV4dGVuZHMgbXtjb25zdHJ1Y3RvcihyKXtzdXBlcigpLHRoaXMubW9kZWw9cn1nZXQgdGFnKCl7cmV0dXJuInUifXJlbmRlcihyLHQpe2lmKCh0PXR8fHRoaXMubW9kZWwpPT09ITApci5sZWFmTm9kZSgidSIpO2Vsc2V7Y29uc3QgZT1zLkF0dHJpYnV0ZXNbdF07ZSYmci5sZWFmTm9kZSgidSIsZSl9fXBhcnNlT3BlbihyKXtyLm5hbWU9PT0idSImJih0aGlzLm1vZGVsPXIuYXR0cmlidXRlcy52YWx8fCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX1zLkF0dHJpYnV0ZXM9e3NpbmdsZTp7fSxkb3VibGU6e3ZhbDoiZG91YmxlIn0sc2luZ2xlQWNjb3VudGluZzp7dmFsOiJzaW5nbGVBY2NvdW50aW5nIn0sZG91YmxlQWNjb3VudGluZzp7dmFsOiJkb3VibGVBY2NvdW50aW5nIn19LEUuZXhwb3J0cz1zfSx7Ii4uL2Jhc2UteGZvcm0iOjMyfV0sMTM3OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlLXhmb3JtIikscz1hKCIuL2ZpbHRlci1jb2x1bW4teGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17ZmlsdGVyQ29sdW1uOm5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuImF1dG9GaWx0ZXIifXByZXBhcmUobyl7by5jb2x1bW5zLmZvckVhY2goKHIsdCk9Pnt0aGlzLm1hcC5maWx0ZXJDb2x1bW4ucHJlcGFyZShyLHtpbmRleDp0fSl9KX1yZW5kZXIobyxyKXtyZXR1cm4gby5vcGVuTm9kZSh0aGlzLnRhZyx7cmVmOnIuYXV0b0ZpbHRlclJlZn0pLHIuY29sdW1ucy5mb3JFYWNoKHQ9Pnt0aGlzLm1hcC5maWx0ZXJDb2x1bW4ucmVuZGVyKG8sdCl9KSxvLmNsb3NlTm9kZSgpLCEwfXBhcnNlT3BlbihvKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKG8pLCEwO3N3aXRjaChvLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e2F1dG9GaWx0ZXJSZWY6by5hdHRyaWJ1dGVzLnJlZixjb2x1bW5zOltdfSwhMDtkZWZhdWx0OmlmKHRoaXMucGFyc2VyPXRoaXMubWFwW28ubmFtZV0sdGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VPcGVuKG8pLCEwO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZU9wZW46ICIrSlNPTi5zdHJpbmdpZnkobykpfX1wYXJzZVRleHQobyl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChvKX1wYXJzZUNsb3NlKG8pe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKG8pfHwodGhpcy5tb2RlbC5jb2x1bW5zLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKG8pe2Nhc2UgdGhpcy50YWc6cmV0dXJuITE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VDbG9zZTogIitvKX19fX0seyIuLi9iYXNlLXhmb3JtIjozMiwiLi9maWx0ZXItY29sdW1uLXhmb3JtIjoxMzl9XSwxMzg6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2dldCB0YWcoKXtyZXR1cm4iY3VzdG9tRmlsdGVyIn1yZW5kZXIocyxvKXtzLmxlYWZOb2RlKHRoaXMudGFnLHt2YWw6by52YWwsb3BlcmF0b3I6by5vcGVyYXRvcn0pfXBhcnNlT3BlbihzKXtyZXR1cm4gcy5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXt2YWw6cy5hdHRyaWJ1dGVzLnZhbCxvcGVyYXRvcjpzLmF0dHJpYnV0ZXMub3BlcmF0b3J9LCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxMzk6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uL2Jhc2UteGZvcm0iKSxzPWEoIi4uL2xpc3QteGZvcm0iKSxvPWEoIi4vY3VzdG9tLWZpbHRlci14Zm9ybSIpLHI9YSgiLi9maWx0ZXIteGZvcm0iKTtFLmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBte2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y3VzdG9tRmlsdGVyczpuZXcgcyh7dGFnOiJjdXN0b21GaWx0ZXJzIixjb3VudDohMSxlbXB0eTohMCxjaGlsZFhmb3JtOm5ldyBvfSksZmlsdGVyczpuZXcgcyh7dGFnOiJmaWx0ZXJzIixjb3VudDohMSxlbXB0eTohMCxjaGlsZFhmb3JtOm5ldyByfSl9fWdldCB0YWcoKXtyZXR1cm4iZmlsdGVyQ29sdW1uIn1wcmVwYXJlKHQsZSl7dC5jb2xJZD1lLmluZGV4LnRvU3RyaW5nKCl9cmVuZGVyKHQsZSl7cmV0dXJuIGUuY3VzdG9tRmlsdGVycz8odC5vcGVuTm9kZSh0aGlzLnRhZyx7Y29sSWQ6ZS5jb2xJZCxoaWRkZW5CdXR0b246ZS5maWx0ZXJCdXR0b24/IjAiOiIxIn0pLHRoaXMubWFwLmN1c3RvbUZpbHRlcnMucmVuZGVyKHQsZS5jdXN0b21GaWx0ZXJzKSx0LmNsb3NlTm9kZSgpLCEwKToodC5sZWFmTm9kZSh0aGlzLnRhZyx7Y29sSWQ6ZS5jb2xJZCxoaWRkZW5CdXR0b246ZS5maWx0ZXJCdXR0b24/IjAiOiIxIn0pLCEwKX1wYXJzZU9wZW4odCl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3Blbih0KSwhMDtjb25zdHthdHRyaWJ1dGVzOmV9PXQ7c3dpdGNoKHQubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD17ZmlsdGVyQnV0dG9uOmUuaGlkZGVuQnV0dG9uPT09IjAifSwhMDtkZWZhdWx0OmlmKHRoaXMucGFyc2VyPXRoaXMubWFwW3QubmFtZV0sdGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VPcGVuKHQpLCEwO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZU9wZW46ICIrSlNPTi5zdHJpbmdpZnkodCkpfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSh0KXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZSh0KXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKHQpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWwuY3VzdG9tRmlsdGVycz10aGlzLm1hcC5jdXN0b21GaWx0ZXJzLm1vZGVsLCExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHsiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL2xpc3QteGZvcm0iOjcxLCIuL2N1c3RvbS1maWx0ZXIteGZvcm0iOjEzOCwiLi9maWx0ZXIteGZvcm0iOjE0MH1dLDE0MDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJmaWx0ZXIifXJlbmRlcihzLG8pe3MubGVhZk5vZGUodGhpcy50YWcse3ZhbDpvLnZhbH0pfXBhcnNlT3BlbihzKXtyZXR1cm4gcy5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXt2YWw6cy5hdHRyaWJ1dGVzLnZhbH0sITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDE0MTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJ0YWJsZUNvbHVtbiJ9cHJlcGFyZShzLG8pe3MuaWQ9by5pbmRleCsxfXJlbmRlcihzLG8pe3JldHVybiBzLmxlYWZOb2RlKHRoaXMudGFnLHtpZDpvLmlkLnRvU3RyaW5nKCksbmFtZTpvLm5hbWUsdG90YWxzUm93TGFiZWw6by50b3RhbHNSb3dMYWJlbCx0b3RhbHNSb3dGdW5jdGlvbjpvLnRvdGFsc1Jvd0Z1bmN0aW9uLGR4ZklkOm8uZHhmSWR9KSwhMH1wYXJzZU9wZW4ocyl7aWYocy5uYW1lPT09dGhpcy50YWcpe2NvbnN0e2F0dHJpYnV0ZXM6b309cztyZXR1cm4gdGhpcy5tb2RlbD17bmFtZTpvLm5hbWUsdG90YWxzUm93TGFiZWw6by50b3RhbHNSb3dMYWJlbCx0b3RhbHNSb3dGdW5jdGlvbjpvLnRvdGFsc1Jvd0Z1bmN0aW9uLGR4ZklkOm8uZHhmSWR9LCEwfXJldHVybiExfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0seyIuLi9iYXNlLXhmb3JtIjozMn1dLDE0MjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiLi4vYmFzZS14Zm9ybSIpO0UuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG17Z2V0IHRhZygpe3JldHVybiJ0YWJsZVN0eWxlSW5mbyJ9cmVuZGVyKHMsbyl7cmV0dXJuIHMubGVhZk5vZGUodGhpcy50YWcse25hbWU6by50aGVtZT9vLnRoZW1lOnZvaWQgMCxzaG93Rmlyc3RDb2x1bW46by5zaG93Rmlyc3RDb2x1bW4/IjEiOiIwIixzaG93TGFzdENvbHVtbjpvLnNob3dMYXN0Q29sdW1uPyIxIjoiMCIsc2hvd1Jvd1N0cmlwZXM6by5zaG93Um93U3RyaXBlcz8iMSI6IjAiLHNob3dDb2x1bW5TdHJpcGVzOm8uc2hvd0NvbHVtblN0cmlwZXM/IjEiOiIwIn0pLCEwfXBhcnNlT3BlbihzKXtpZihzLm5hbWU9PT10aGlzLnRhZyl7Y29uc3R7YXR0cmlidXRlczpvfT1zO3JldHVybiB0aGlzLm1vZGVsPXt0aGVtZTpvLm5hbWU/by5uYW1lOm51bGwsc2hvd0ZpcnN0Q29sdW1uOm8uc2hvd0ZpcnN0Q29sdW1uPT09IjEiLHNob3dMYXN0Q29sdW1uOm8uc2hvd0xhc3RDb2x1bW49PT0iMSIsc2hvd1Jvd1N0cmlwZXM6by5zaG93Um93U3RyaXBlcz09PSIxIixzaG93Q29sdW1uU3RyaXBlczpvLnNob3dDb2x1bW5TdHJpcGVzPT09IjEifSwhMH1yZXR1cm4hMX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHsiLi4vYmFzZS14Zm9ybSI6MzJ9XSwxNDM6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWEoIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW0iKSxzPWEoIi4uL2Jhc2UteGZvcm0iKSxvPWEoIi4uL2xpc3QteGZvcm0iKSxyPWEoIi4vYXV0by1maWx0ZXIteGZvcm0iKSx0PWEoIi4vdGFibGUtY29sdW1uLXhmb3JtIiksZT1hKCIuL3RhYmxlLXN0eWxlLWluZm8teGZvcm0iKTtjbGFzcyBsIGV4dGVuZHMgc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2F1dG9GaWx0ZXI6bmV3IHIsdGFibGVDb2x1bW5zOm5ldyBvKHt0YWc6InRhYmxlQ29sdW1ucyIsY291bnQ6ITAsZW1wdHk6ITAsY2hpbGRYZm9ybTpuZXcgdH0pLHRhYmxlU3R5bGVJbmZvOm5ldyBlfX1wcmVwYXJlKGksZil7dGhpcy5tYXAuYXV0b0ZpbHRlci5wcmVwYXJlKGkpLHRoaXMubWFwLnRhYmxlQ29sdW1ucy5wcmVwYXJlKGkuY29sdW1ucyxmKX1nZXQgdGFnKCl7cmV0dXJuInRhYmxlIn1yZW5kZXIoaSxmKXtpLm9wZW5YbWwobS5TdGREb2NBdHRyaWJ1dGVzKSxpLm9wZW5Ob2RlKHRoaXMudGFnLHsuLi5sLlRBQkxFX0FUVFJJQlVURVMsaWQ6Zi5pZCxuYW1lOmYubmFtZSxkaXNwbGF5TmFtZTpmLmRpc3BsYXlOYW1lfHxmLm5hbWUscmVmOmYudGFibGVSZWYsdG90YWxzUm93Q291bnQ6Zi50b3RhbHNSb3c/IjEiOnZvaWQgMCx0b3RhbHNSb3dTaG93bjpmLnRvdGFsc1Jvdz92b2lkIDA6IjEiLGhlYWRlclJvd0NvdW50OmYuaGVhZGVyUm93PyIxIjoiMCJ9KSx0aGlzLm1hcC5hdXRvRmlsdGVyLnJlbmRlcihpLGYpLHRoaXMubWFwLnRhYmxlQ29sdW1ucy5yZW5kZXIoaSxmLmNvbHVtbnMpLHRoaXMubWFwLnRhYmxlU3R5bGVJbmZvLnJlbmRlcihpLGYuc3R5bGUpLGkuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGkpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oaSksITA7Y29uc3R7bmFtZTpmLGF0dHJpYnV0ZXM6Y309aTtzd2l0Y2goZil7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17bmFtZTpjLm5hbWUsZGlzcGxheU5hbWU6Yy5kaXNwbGF5TmFtZXx8Yy5uYW1lLHRhYmxlUmVmOmMucmVmLHRvdGFsc1JvdzpjLnRvdGFsc1Jvd0NvdW50PT09IjEiLGhlYWRlclJvdzpjLmhlYWRlclJvd0NvdW50PT09IjEifTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2kubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihpKX1yZXR1cm4hMH1wYXJzZVRleHQoaSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChpKX1wYXJzZUNsb3NlKGkpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGkpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goaSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbC5jb2x1bW5zPXRoaXMubWFwLnRhYmxlQ29sdW1ucy5tb2RlbCx0aGlzLm1hcC5hdXRvRmlsdGVyLm1vZGVsJiYodGhpcy5tb2RlbC5hdXRvRmlsdGVyUmVmPXRoaXMubWFwLmF1dG9GaWx0ZXIubW9kZWwuYXV0b0ZpbHRlclJlZix0aGlzLm1hcC5hdXRvRmlsdGVyLm1vZGVsLmNvbHVtbnMuZm9yRWFjaCgoZixjKT0+e3RoaXMubW9kZWwuY29sdW1uc1tjXS5maWx0ZXJCdXR0b249Zi5maWx0ZXJCdXR0b259KSksdGhpcy5tb2RlbC5zdHlsZT10aGlzLm1hcC50YWJsZVN0eWxlSW5mby5tb2RlbCwhMTtkZWZhdWx0OnJldHVybiEwfX1yZWNvbmNpbGUoaSxmKXtpLmNvbHVtbnMuZm9yRWFjaChjPT57Yy5keGZJZCE9PXZvaWQgMCYmKGMuc3R5bGU9Zi5zdHlsZXMuZ2V0RHhmU3R5bGUoYy5keGZJZCkpfSl9fWwuVEFCTEVfQVRUUklCVVRFUz17eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsInhtbG5zOm1jIjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiLCJtYzpJZ25vcmFibGUiOiJ4ciB4cjMiLCJ4bWxuczp4ciI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxNC9yZXZpc2lvbiIsInhtbG5zOnhyMyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxNi9yZXZpc2lvbjMifSxFLmV4cG9ydHM9bH0seyIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtIjoyOCwiLi4vYmFzZS14Zm9ybSI6MzIsIi4uL2xpc3QteGZvcm0iOjcxLCIuL2F1dG8tZmlsdGVyLXhmb3JtIjoxMzcsIi4vdGFibGUtY29sdW1uLXhmb3JtIjoxNDEsIi4vdGFibGUtc3R5bGUtaW5mby14Zm9ybSI6MTQyfV0sMTQ0OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0scyl7KGZ1bmN0aW9uKCl7Y29uc3Qgbz1hKCJmcyIpLHI9YSgianN6aXAiKSx7UGFzc1Rocm91Z2g6dH09YSgicmVhZGFibGUtc3RyZWFtIiksZT1hKCIuLi91dGlscy96aXAtc3RyZWFtIiksbD1hKCIuLi91dGlscy9zdHJlYW0tYnVmIiksbj1hKCIuLi91dGlscy91dGlscyIpLGk9YSgiLi4vdXRpbHMveG1sLXN0cmVhbSIpLHtidWZmZXJUb1N0cmluZzpmfT1hKCIuLi91dGlscy9icm93c2VyLWJ1ZmZlci1kZWNvZGUiKSxjPWEoIi4veGZvcm0vc3R5bGUvc3R5bGVzLXhmb3JtIiksdT1hKCIuL3hmb3JtL2NvcmUvY29yZS14Zm9ybSIpLGQ9YSgiLi94Zm9ybS9zdHJpbmdzL3NoYXJlZC1zdHJpbmdzLXhmb3JtIiksaD1hKCIuL3hmb3JtL2NvcmUvcmVsYXRpb25zaGlwcy14Zm9ybSIpLHc9YSgiLi94Zm9ybS9jb3JlL2NvbnRlbnQtdHlwZXMteGZvcm0iKSxfPWEoIi4veGZvcm0vY29yZS9hcHAteGZvcm0iKSxBPWEoIi4veGZvcm0vYm9vay93b3JrYm9vay14Zm9ybSIpLFA9YSgiLi94Zm9ybS9zaGVldC93b3Jrc2hlZXQteGZvcm0iKSxMPWEoIi4veGZvcm0vZHJhd2luZy9kcmF3aW5nLXhmb3JtIiksTj1hKCIuL3hmb3JtL3RhYmxlL3RhYmxlLXhmb3JtIiksRD1hKCIuL3hmb3JtL2NvbW1lbnQvY29tbWVudHMteGZvcm0iKSxGPWEoIi4veGZvcm0vY29tbWVudC92bWwtbm90ZXMteGZvcm0iKSxVPWEoIi4veG1sL3RoZW1lMSIpO2NsYXNzIEJ7Y29uc3RydWN0b3IoQyl7dGhpcy53b3JrYm9vaz1DfWFzeW5jIHJlYWRGaWxlKEMsdil7aWYoIWF3YWl0IG4uZnMuZXhpc3RzKEMpKXRocm93IG5ldyBFcnJvcigiRmlsZSBub3QgZm91bmQ6ICIrQyk7Y29uc3QgcD1vLmNyZWF0ZVJlYWRTdHJlYW0oQyk7dHJ5e2NvbnN0IGI9YXdhaXQgdGhpcy5yZWFkKHAsdik7cmV0dXJuIHAuY2xvc2UoKSxifWNhdGNoKGIpe3Rocm93IHAuY2xvc2UoKSxifX1wYXJzZVJlbHMoQyl7cmV0dXJuIG5ldyBoKCkucGFyc2VTdHJlYW0oQyl9cGFyc2VXb3JrYm9vayhDKXtyZXR1cm4gbmV3IEEoKS5wYXJzZVN0cmVhbShDKX1wYXJzZVNoYXJlZFN0cmluZ3MoQyl7cmV0dXJuIG5ldyBkKCkucGFyc2VTdHJlYW0oQyl9cmVjb25jaWxlKEMsdil7Y29uc3QgcD1uZXcgQSxiPW5ldyBQKHYpLGc9bmV3IEwseT1uZXcgTjtwLnJlY29uY2lsZShDKTtjb25zdCBNPXttZWRpYTpDLm1lZGlhLG1lZGlhSW5kZXg6Qy5tZWRpYUluZGV4fTtPYmplY3Qua2V5cyhDLmRyYXdpbmdzKS5mb3JFYWNoKHo9Pntjb25zdCAkPUMuZHJhd2luZ3Nbel0sWD1DLmRyYXdpbmdSZWxzW3pdO1gmJihNLnJlbHM9WC5yZWR1Y2UoKGosVyk9PihqW1cuSWRdPVcsaikse30pLCgkLmFuY2hvcnN8fFtdKS5mb3JFYWNoKGo9Pntjb25zdCBXPWoucGljdHVyZSYmai5waWN0dXJlLmh5cGVybGlua3M7VyYmTS5yZWxzW1cucklkXSYmKFcuaHlwZXJsaW5rPU0ucmVsc1tXLnJJZF0uVGFyZ2V0LGRlbGV0ZSBXLnJJZCl9KSxnLnJlY29uY2lsZSgkLE0pKX0pO2NvbnN0IE89e3N0eWxlczpDLnN0eWxlc307T2JqZWN0LnZhbHVlcyhDLnRhYmxlcykuZm9yRWFjaCh6PT57eS5yZWNvbmNpbGUoeixPKX0pO2NvbnN0IFI9e3N0eWxlczpDLnN0eWxlcyxzaGFyZWRTdHJpbmdzOkMuc2hhcmVkU3RyaW5ncyxtZWRpYTpDLm1lZGlhLG1lZGlhSW5kZXg6Qy5tZWRpYUluZGV4LGRhdGUxOTA0OkMucHJvcGVydGllcyYmQy5wcm9wZXJ0aWVzLmRhdGUxOTA0LGRyYXdpbmdzOkMuZHJhd2luZ3MsY29tbWVudHM6Qy5jb21tZW50cyx0YWJsZXM6Qy50YWJsZXMsdm1sRHJhd2luZ3M6Qy52bWxEcmF3aW5nc307Qy53b3Jrc2hlZXRzLmZvckVhY2goej0+e3oucmVsYXRpb25zaGlwcz1DLndvcmtzaGVldFJlbHNbei5zaGVldE5vXSxiLnJlY29uY2lsZSh6LFIpfSksZGVsZXRlIEMud29ya3NoZWV0SGFzaCxkZWxldGUgQy53b3Jrc2hlZXRSZWxzLGRlbGV0ZSBDLmdsb2JhbFJlbHMsZGVsZXRlIEMuc2hhcmVkU3RyaW5ncyxkZWxldGUgQy53b3JrYm9va1JlbHMsZGVsZXRlIEMuc2hlZXREZWZzLGRlbGV0ZSBDLnN0eWxlcyxkZWxldGUgQy5tZWRpYUluZGV4LGRlbGV0ZSBDLmRyYXdpbmdzLGRlbGV0ZSBDLmRyYXdpbmdSZWxzLGRlbGV0ZSBDLnZtbERyYXdpbmdzfWFzeW5jIF9wcm9jZXNzV29ya3NoZWV0RW50cnkoQyx2LHAsYixnKXtjb25zdCB5PW5ldyBQKGIpLE09YXdhaXQgeS5wYXJzZVN0cmVhbShDKTtNLnNoZWV0Tm89cCx2LndvcmtzaGVldEhhc2hbZ109TSx2LndvcmtzaGVldHMucHVzaChNKX1hc3luYyBfcHJvY2Vzc0NvbW1lbnRFbnRyeShDLHYscCl7Y29uc3QgYj1uZXcgRCxnPWF3YWl0IGIucGFyc2VTdHJlYW0oQyk7di5jb21tZW50c1tgLi4vJHtwfS54bWxgXT1nfWFzeW5jIF9wcm9jZXNzVGFibGVFbnRyeShDLHYscCl7Y29uc3QgYj1uZXcgTixnPWF3YWl0IGIucGFyc2VTdHJlYW0oQyk7di50YWJsZXNbYC4uL3RhYmxlcy8ke3B9LnhtbGBdPWd9YXN5bmMgX3Byb2Nlc3NXb3Jrc2hlZXRSZWxzRW50cnkoQyx2LHApe2NvbnN0IGI9bmV3IGgsZz1hd2FpdCBiLnBhcnNlU3RyZWFtKEMpO3Yud29ya3NoZWV0UmVsc1twXT1nfWFzeW5jIF9wcm9jZXNzTWVkaWFFbnRyeShDLHYscCl7Y29uc3QgYj1wLmxhc3RJbmRleE9mKCIuIik7aWYoYj49MSl7Y29uc3QgZz1wLnN1YnN0cihiKzEpLHk9cC5zdWJzdHIoMCxiKTthd2FpdCBuZXcgUHJvbWlzZSgoTSxPKT0+e2NvbnN0IFI9bmV3IGw7Ui5vbigiZmluaXNoIiwoKT0+e3YubWVkaWFJbmRleFtwXT12Lm1lZGlhLmxlbmd0aCx2Lm1lZGlhSW5kZXhbeV09di5tZWRpYS5sZW5ndGg7Y29uc3Qgej17dHlwZToiaW1hZ2UiLG5hbWU6eSxleHRlbnNpb246ZyxidWZmZXI6Ui50b0J1ZmZlcigpfTt2Lm1lZGlhLnB1c2goeiksTSgpfSksQy5vbigiZXJyb3IiLHo9PntPKHopfSksQy5waXBlKFIpfSl9fWFzeW5jIF9wcm9jZXNzRHJhd2luZ0VudHJ5KEMsdixwKXtjb25zdCBiPW5ldyBMLGc9YXdhaXQgYi5wYXJzZVN0cmVhbShDKTt2LmRyYXdpbmdzW3BdPWd9YXN5bmMgX3Byb2Nlc3NEcmF3aW5nUmVsc0VudHJ5KEMsdixwKXtjb25zdCBiPW5ldyBoLGc9YXdhaXQgYi5wYXJzZVN0cmVhbShDKTt2LmRyYXdpbmdSZWxzW3BdPWd9YXN5bmMgX3Byb2Nlc3NWbWxEcmF3aW5nRW50cnkoQyx2LHApe2NvbnN0IGI9bmV3IEYsZz1hd2FpdCBiLnBhcnNlU3RyZWFtKEMpO3Yudm1sRHJhd2luZ3NbYC4uL2RyYXdpbmdzLyR7cH0udm1sYF09Z31hc3luYyBfcHJvY2Vzc1RoZW1lRW50cnkoQyx2LHApe2F3YWl0IG5ldyBQcm9taXNlKChiLGcpPT57Y29uc3QgeT1uZXcgbDtDLm9uKCJlcnJvciIsZykseS5vbigiZXJyb3IiLGcpLHkub24oImZpbmlzaCIsKCk9Pnt2LnRoZW1lc1twXT15LnJlYWQoKS50b1N0cmluZygpLGIoKX0pLEMucGlwZSh5KX0pfWNyZWF0ZUlucHV0U3RyZWFtKCl7dGhyb3cgbmV3IEVycm9yKCJgWExTWCNjcmVhdGVJbnB1dFN0cmVhbWAgaXMgZGVwcmVjYXRlZC4gWW91IHNob3VsZCB1c2UgYFhMU1gjcmVhZGAgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gNS4wLiBQbGVhc2UgZm9sbG93IHVwZ3JhZGUgaW5zdHJ1Y3Rpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9leGNlbGpzL2V4Y2VsanMvYmxvYi9tYXN0ZXIvVVBHUkFERS00LjAubWQiKX1hc3luYyByZWFkKEMsdil7IUNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdJiZDLnBpcGUmJihDPUMucGlwZShuZXcgdCkpO2NvbnN0IHA9W107Zm9yIGF3YWl0KGNvbnN0IGIgb2YgQylwLnB1c2goYik7cmV0dXJuIHRoaXMubG9hZChzLmNvbmNhdChwKSx2KX1hc3luYyBsb2FkKEMsdil7bGV0IHA7cD12JiZ2LmJhc2U2ND9zLmZyb20oQy50b1N0cmluZygpLCJiYXNlNjQiKTpDO2NvbnN0IGI9e3dvcmtzaGVldHM6W10sd29ya3NoZWV0SGFzaDp7fSx3b3Jrc2hlZXRSZWxzOltdLHRoZW1lczp7fSxtZWRpYTpbXSxtZWRpYUluZGV4Ont9LGRyYXdpbmdzOnt9LGRyYXdpbmdSZWxzOnt9LGNvbW1lbnRzOnt9LHRhYmxlczp7fSx2bWxEcmF3aW5nczp7fX0sZz1hd2FpdCByLmxvYWRBc3luYyhwKTtmb3IoY29uc3QgeSBvZiBPYmplY3QudmFsdWVzKGcuZmlsZXMpKWlmKCF5LmRpcil7bGV0IE0sTz15Lm5hbWU7aWYoT1swXT09PSIvIiYmKE89Ty5zdWJzdHIoMSkpLE8ubWF0Y2goL3hsXC9tZWRpYVwvLyl8fE8ubWF0Y2goL3hsXC90aGVtZVwvKFthLXpBLVowLTldKylbLl14bWwvKSlNPW5ldyB0LE0ud3JpdGUoYXdhaXQgeS5hc3luYygibm9kZWJ1ZmZlciIpKTtlbHNle2xldCBSO009bmV3IHQoe3dyaXRhYmxlT2JqZWN0TW9kZTohMCxyZWFkYWJsZU9iamVjdE1vZGU6ITB9KSxSPW0uYnJvd3Nlcj9mKGF3YWl0IHkuYXN5bmMoIm5vZGVidWZmZXIiKSk6YXdhaXQgeS5hc3luYygic3RyaW5nIik7Y29uc3Qgej0xNjM4NDtmb3IobGV0ICQ9MDskPFIubGVuZ3RoOyQrPXopTS53cml0ZShSLnN1YnN0cmluZygkLCQreikpfXN3aXRjaChNLmVuZCgpLE8pe2Nhc2UiX3JlbHMvLnJlbHMiOmIuZ2xvYmFsUmVscz1hd2FpdCB0aGlzLnBhcnNlUmVscyhNKTticmVhaztjYXNlInhsL3dvcmtib29rLnhtbCI6e2NvbnN0IFI9YXdhaXQgdGhpcy5wYXJzZVdvcmtib29rKE0pO2Iuc2hlZXRzPVIuc2hlZXRzLGIuZGVmaW5lZE5hbWVzPVIuZGVmaW5lZE5hbWVzLGIudmlld3M9Ui52aWV3cyxiLnByb3BlcnRpZXM9Ui5wcm9wZXJ0aWVzLGIuY2FsY1Byb3BlcnRpZXM9Ui5jYWxjUHJvcGVydGllczticmVha31jYXNlInhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzIjpiLndvcmtib29rUmVscz1hd2FpdCB0aGlzLnBhcnNlUmVscyhNKTticmVhaztjYXNlInhsL3NoYXJlZFN0cmluZ3MueG1sIjpiLnNoYXJlZFN0cmluZ3M9bmV3IGQsYXdhaXQgYi5zaGFyZWRTdHJpbmdzLnBhcnNlU3RyZWFtKE0pO2JyZWFrO2Nhc2UieGwvc3R5bGVzLnhtbCI6Yi5zdHlsZXM9bmV3IGMsYXdhaXQgYi5zdHlsZXMucGFyc2VTdHJlYW0oTSk7YnJlYWs7Y2FzZSJkb2NQcm9wcy9hcHAueG1sIjp7Y29uc3QgUj1uZXcgXyx6PWF3YWl0IFIucGFyc2VTdHJlYW0oTSk7Yi5jb21wYW55PXouY29tcGFueSxiLm1hbmFnZXI9ei5tYW5hZ2VyO2JyZWFrfWNhc2UiZG9jUHJvcHMvY29yZS54bWwiOntjb25zdCBSPW5ldyB1LHo9YXdhaXQgUi5wYXJzZVN0cmVhbShNKTtPYmplY3QuYXNzaWduKGIseik7YnJlYWt9ZGVmYXVsdDp7bGV0IFI9Ty5tYXRjaCgveGxcL3dvcmtzaGVldHNcL3NoZWV0KFxkKylbLl14bWwvKTtpZihSKXthd2FpdCB0aGlzLl9wcm9jZXNzV29ya3NoZWV0RW50cnkoTSxiLFJbMV0sdixPKTticmVha31pZihSPU8ubWF0Y2goL3hsXC93b3Jrc2hlZXRzXC9fcmVsc1wvc2hlZXQoXGQrKVsuXXhtbC5yZWxzLyksUil7YXdhaXQgdGhpcy5fcHJvY2Vzc1dvcmtzaGVldFJlbHNFbnRyeShNLGIsUlsxXSk7YnJlYWt9aWYoUj1PLm1hdGNoKC94bFwvdGhlbWVcLyhbYS16QS1aMC05XSspWy5deG1sLyksUil7YXdhaXQgdGhpcy5fcHJvY2Vzc1RoZW1lRW50cnkoTSxiLFJbMV0pO2JyZWFrfWlmKFI9Ty5tYXRjaCgveGxcL21lZGlhXC8oW2EtekEtWjAtOV0rWy5dW2EtekEtWjAtOV17Myw0fSkkLyksUil7YXdhaXQgdGhpcy5fcHJvY2Vzc01lZGlhRW50cnkoTSxiLFJbMV0pO2JyZWFrfWlmKFI9Ty5tYXRjaCgveGxcL2RyYXdpbmdzXC8oW2EtekEtWjAtOV0rKVsuXXhtbC8pLFIpe2F3YWl0IHRoaXMuX3Byb2Nlc3NEcmF3aW5nRW50cnkoTSxiLFJbMV0pO2JyZWFrfWlmKFI9Ty5tYXRjaCgveGxcLyhjb21tZW50c1xkKylbLl14bWwvKSxSKXthd2FpdCB0aGlzLl9wcm9jZXNzQ29tbWVudEVudHJ5KE0sYixSWzFdKTticmVha31pZihSPU8ubWF0Y2goL3hsXC90YWJsZXNcLyh0YWJsZVxkKylbLl14bWwvKSxSKXthd2FpdCB0aGlzLl9wcm9jZXNzVGFibGVFbnRyeShNLGIsUlsxXSk7YnJlYWt9aWYoUj1PLm1hdGNoKC94bFwvZHJhd2luZ3NcL19yZWxzXC8oW2EtekEtWjAtOV0rKVsuXXhtbFsuXXJlbHMvKSxSKXthd2FpdCB0aGlzLl9wcm9jZXNzRHJhd2luZ1JlbHNFbnRyeShNLGIsUlsxXSk7YnJlYWt9aWYoUj1PLm1hdGNoKC94bFwvZHJhd2luZ3NcLyh2bWxEcmF3aW5nXGQrKVsuXXZtbC8pLFIpe2F3YWl0IHRoaXMuX3Byb2Nlc3NWbWxEcmF3aW5nRW50cnkoTSxiLFJbMV0pO2JyZWFrfX19fXJldHVybiB0aGlzLnJlY29uY2lsZShiLHYpLHRoaXMud29ya2Jvb2subW9kZWw9Yix0aGlzLndvcmtib29rfWFzeW5jIGFkZE1lZGlhKEMsdil7YXdhaXQgUHJvbWlzZS5hbGwodi5tZWRpYS5tYXAoYXN5bmMgcD0+e2lmKHAudHlwZT09PSJpbWFnZSIpe2NvbnN0IGI9YHhsL21lZGlhLyR7cC5uYW1lfS4ke3AuZXh0ZW5zaW9ufWA7aWYocC5maWxlbmFtZSl7Y29uc3QgZz1hd2FpdCBmdW5jdGlvbih5LE0pe3JldHVybiBuZXcgUHJvbWlzZSgoTyxSKT0+e28ucmVhZEZpbGUoeSxNLCh6LCQpPT57ej9SKHopOk8oJCl9KX0pfShwLmZpbGVuYW1lKTtyZXR1cm4gQy5hcHBlbmQoZyx7bmFtZTpifSl9aWYocC5idWZmZXIpcmV0dXJuIEMuYXBwZW5kKHAuYnVmZmVyLHtuYW1lOmJ9KTtpZihwLmJhc2U2NCl7Y29uc3QgZz1wLmJhc2U2NCx5PWcuc3Vic3RyaW5nKGcuaW5kZXhPZigiLCIpKzEpO3JldHVybiBDLmFwcGVuZCh5LHtuYW1lOmIsYmFzZTY0OiEwfSl9fXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWVkaWEiKX0pKX1hZGREcmF3aW5ncyhDLHYpe2NvbnN0IHA9bmV3IEwsYj1uZXcgaDt2LndvcmtzaGVldHMuZm9yRWFjaChnPT57Y29uc3R7ZHJhd2luZzp5fT1nO2lmKHkpe3AucHJlcGFyZSh5LHt9KTtsZXQgTT1wLnRvWG1sKHkpO0MuYXBwZW5kKE0se25hbWU6YHhsL2RyYXdpbmdzLyR7eS5uYW1lfS54bWxgfSksTT1iLnRvWG1sKHkucmVscyksQy5hcHBlbmQoTSx7bmFtZTpgeGwvZHJhd2luZ3MvX3JlbHMvJHt5Lm5hbWV9LnhtbC5yZWxzYH0pfX0pfWFkZFRhYmxlcyhDLHYpe2NvbnN0IHA9bmV3IE47di53b3Jrc2hlZXRzLmZvckVhY2goYj0+e2NvbnN0e3RhYmxlczpnfT1iO2cuZm9yRWFjaCh5PT57cC5wcmVwYXJlKHkse30pO2NvbnN0IE09cC50b1htbCh5KTtDLmFwcGVuZChNLHtuYW1lOiJ4bC90YWJsZXMvIit5LnRhcmdldH0pfSl9KX1hc3luYyBhZGRDb250ZW50VHlwZXMoQyx2KXtjb25zdCBwPW5ldyB3KCkudG9YbWwodik7Qy5hcHBlbmQocCx7bmFtZToiW0NvbnRlbnRfVHlwZXNdLnhtbCJ9KX1hc3luYyBhZGRBcHAoQyx2KXtjb25zdCBwPW5ldyBfKCkudG9YbWwodik7Qy5hcHBlbmQocCx7bmFtZToiZG9jUHJvcHMvYXBwLnhtbCJ9KX1hc3luYyBhZGRDb3JlKEMsdil7Y29uc3QgcD1uZXcgdTtDLmFwcGVuZChwLnRvWG1sKHYpLHtuYW1lOiJkb2NQcm9wcy9jb3JlLnhtbCJ9KX1hc3luYyBhZGRUaGVtZXMoQyx2KXtjb25zdCBwPXYudGhlbWVzfHx7dGhlbWUxOlV9O09iamVjdC5rZXlzKHApLmZvckVhY2goYj0+e2NvbnN0IGc9cFtiXSx5PWB4bC90aGVtZS8ke2J9LnhtbGA7Qy5hcHBlbmQoZyx7bmFtZTp5fSl9KX1hc3luYyBhZGRPZmZpY2VSZWxzKEMpe2NvbnN0IHY9bmV3IGgoKS50b1htbChbe0lkOiJySWQxIixUeXBlOkIuUmVsVHlwZS5PZmZpY2VEb2N1bWVudCxUYXJnZXQ6InhsL3dvcmtib29rLnhtbCJ9LHtJZDoicklkMiIsVHlwZTpCLlJlbFR5cGUuQ29yZVByb3BlcnRpZXMsVGFyZ2V0OiJkb2NQcm9wcy9jb3JlLnhtbCJ9LHtJZDoicklkMyIsVHlwZTpCLlJlbFR5cGUuRXh0ZW5kZXJQcm9wZXJ0aWVzLFRhcmdldDoiZG9jUHJvcHMvYXBwLnhtbCJ9XSk7Qy5hcHBlbmQodix7bmFtZToiX3JlbHMvLnJlbHMifSl9YXN5bmMgYWRkV29ya2Jvb2tSZWxzKEMsdil7bGV0IHA9MTtjb25zdCBiPVt7SWQ6InJJZCIrcCsrLFR5cGU6Qi5SZWxUeXBlLlN0eWxlcyxUYXJnZXQ6InN0eWxlcy54bWwifSx7SWQ6InJJZCIrcCsrLFR5cGU6Qi5SZWxUeXBlLlRoZW1lLFRhcmdldDoidGhlbWUvdGhlbWUxLnhtbCJ9XTt2LnNoYXJlZFN0cmluZ3MuY291bnQmJmIucHVzaCh7SWQ6InJJZCIrcCsrLFR5cGU6Qi5SZWxUeXBlLlNoYXJlZFN0cmluZ3MsVGFyZ2V0OiJzaGFyZWRTdHJpbmdzLnhtbCJ9KSx2LndvcmtzaGVldHMuZm9yRWFjaCh5PT57eS5ySWQ9InJJZCIrcCsrLGIucHVzaCh7SWQ6eS5ySWQsVHlwZTpCLlJlbFR5cGUuV29ya3NoZWV0LFRhcmdldDpgd29ya3NoZWV0cy9zaGVldCR7eS5pZH0ueG1sYH0pfSk7Y29uc3QgZz1uZXcgaCgpLnRvWG1sKGIpO0MuYXBwZW5kKGcse25hbWU6InhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzIn0pfWFzeW5jIGFkZFNoYXJlZFN0cmluZ3MoQyx2KXt2LnNoYXJlZFN0cmluZ3MmJnYuc2hhcmVkU3RyaW5ncy5jb3VudCYmQy5hcHBlbmQodi5zaGFyZWRTdHJpbmdzLnhtbCx7bmFtZToieGwvc2hhcmVkU3RyaW5ncy54bWwifSl9YXN5bmMgYWRkU3R5bGVzKEMsdil7Y29uc3R7eG1sOnB9PXYuc3R5bGVzO3AmJkMuYXBwZW5kKHAse25hbWU6InhsL3N0eWxlcy54bWwifSl9YXN5bmMgYWRkV29ya2Jvb2soQyx2KXtjb25zdCBwPW5ldyBBO0MuYXBwZW5kKHAudG9YbWwodikse25hbWU6InhsL3dvcmtib29rLnhtbCJ9KX1hc3luYyBhZGRXb3Jrc2hlZXRzKEMsdil7Y29uc3QgcD1uZXcgUCxiPW5ldyBoLGc9bmV3IEQseT1uZXcgRjt2LndvcmtzaGVldHMuZm9yRWFjaChNPT57bGV0IE89bmV3IGk7cC5yZW5kZXIoTyxNKSxDLmFwcGVuZChPLnhtbCx7bmFtZTpgeGwvd29ya3NoZWV0cy9zaGVldCR7TS5pZH0ueG1sYH0pLE0ucmVscyYmTS5yZWxzLmxlbmd0aCYmKE89bmV3IGksYi5yZW5kZXIoTyxNLnJlbHMpLEMuYXBwZW5kKE8ueG1sLHtuYW1lOmB4bC93b3Jrc2hlZXRzL19yZWxzL3NoZWV0JHtNLmlkfS54bWwucmVsc2B9KSksTS5jb21tZW50cy5sZW5ndGg+MCYmKE89bmV3IGksZy5yZW5kZXIoTyxNKSxDLmFwcGVuZChPLnhtbCx7bmFtZTpgeGwvY29tbWVudHMke00uaWR9LnhtbGB9KSxPPW5ldyBpLHkucmVuZGVyKE8sTSksQy5hcHBlbmQoTy54bWwse25hbWU6YHhsL2RyYXdpbmdzL3ZtbERyYXdpbmcke00uaWR9LnZtbGB9KSl9KX1fZmluYWxpemUoQyl7cmV0dXJuIG5ldyBQcm9taXNlKCh2LHApPT57Qy5vbigiZmluaXNoIiwoKT0+e3YodGhpcyl9KSxDLm9uKCJlcnJvciIscCksQy5maW5hbGl6ZSgpfSl9cHJlcGFyZU1vZGVsKEMsdil7Qy5jcmVhdG9yPUMuY3JlYXRvcnx8IkV4Y2VsSlMiLEMubGFzdE1vZGlmaWVkQnk9Qy5sYXN0TW9kaWZpZWRCeXx8IkV4Y2VsSlMiLEMuY3JlYXRlZD1DLmNyZWF0ZWR8fG5ldyBEYXRlLEMubW9kaWZpZWQ9Qy5tb2RpZmllZHx8bmV3IERhdGUsQy51c2VTaGFyZWRTdHJpbmdzPXYudXNlU2hhcmVkU3RyaW5ncz09PXZvaWQgMHx8di51c2VTaGFyZWRTdHJpbmdzLEMudXNlU3R5bGVzPXYudXNlU3R5bGVzPT09dm9pZCAwfHx2LnVzZVN0eWxlcyxDLnNoYXJlZFN0cmluZ3M9bmV3IGQsQy5zdHlsZXM9Qy51c2VTdHlsZXM/bmV3IGMoITApOm5ldyBjLk1vY2s7Y29uc3QgcD1uZXcgQSxiPW5ldyBQO3AucHJlcGFyZShDKTtjb25zdCBnPXtzaGFyZWRTdHJpbmdzOkMuc2hhcmVkU3RyaW5ncyxzdHlsZXM6Qy5zdHlsZXMsZGF0ZTE5MDQ6Qy5wcm9wZXJ0aWVzLmRhdGUxOTA0LGRyYXdpbmdzQ291bnQ6MCxtZWRpYTpDLm1lZGlhfTtnLmRyYXdpbmdzPUMuZHJhd2luZ3M9W10sZy5jb21tZW50UmVmcz1DLmNvbW1lbnRSZWZzPVtdO2xldCB5PTA7Qy50YWJsZXM9W10sQy53b3Jrc2hlZXRzLmZvckVhY2goTT0+e00udGFibGVzLmZvckVhY2goTz0+e3krKyxPLnRhcmdldD1gdGFibGUke3l9LnhtbGAsTy5pZD15LEMudGFibGVzLnB1c2goTyl9KSxiLnByZXBhcmUoTSxnKX0pfWFzeW5jIHdyaXRlKEMsdil7dj12fHx7fTtjb25zdHttb2RlbDpwfT10aGlzLndvcmtib29rLGI9bmV3IGUuWmlwV3JpdGVyKHYuemlwKTtyZXR1cm4gYi5waXBlKEMpLHRoaXMucHJlcGFyZU1vZGVsKHAsdiksYXdhaXQgdGhpcy5hZGRDb250ZW50VHlwZXMoYixwKSxhd2FpdCB0aGlzLmFkZE9mZmljZVJlbHMoYixwKSxhd2FpdCB0aGlzLmFkZFdvcmtib29rUmVscyhiLHApLGF3YWl0IHRoaXMuYWRkV29ya3NoZWV0cyhiLHApLGF3YWl0IHRoaXMuYWRkU2hhcmVkU3RyaW5ncyhiLHApLGF3YWl0IHRoaXMuYWRkRHJhd2luZ3MoYixwKSxhd2FpdCB0aGlzLmFkZFRhYmxlcyhiLHApLGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmFkZFRoZW1lcyhiLHApLHRoaXMuYWRkU3R5bGVzKGIscCldKSxhd2FpdCB0aGlzLmFkZE1lZGlhKGIscCksYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMuYWRkQXBwKGIscCksdGhpcy5hZGRDb3JlKGIscCldKSxhd2FpdCB0aGlzLmFkZFdvcmtib29rKGIscCksdGhpcy5fZmluYWxpemUoYil9d3JpdGVGaWxlKEMsdil7Y29uc3QgcD1vLmNyZWF0ZVdyaXRlU3RyZWFtKEMpO3JldHVybiBuZXcgUHJvbWlzZSgoYixnKT0+e3Aub24oImZpbmlzaCIsKCk9PntiKCl9KSxwLm9uKCJlcnJvciIseT0+e2coeSl9KSx0aGlzLndyaXRlKHAsdikudGhlbigoKT0+e3AuZW5kKCl9KS5jYXRjaCh5PT57Zyh5KX0pfSl9YXN5bmMgd3JpdGVCdWZmZXIoQyl7Y29uc3Qgdj1uZXcgbDtyZXR1cm4gYXdhaXQgdGhpcy53cml0ZSh2LEMpLHYucmVhZCgpfX1CLlJlbFR5cGU9YSgiLi9yZWwtdHlwZSIpLEUuZXhwb3J0cz1CfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJfcHJvY2VzcyIpLGEoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi4vdXRpbHMvYnJvd3Nlci1idWZmZXItZGVjb2RlIjoxNiwiLi4vdXRpbHMvc3RyZWFtLWJ1ZiI6MjQsIi4uL3V0aWxzL3V0aWxzIjoyNywiLi4vdXRpbHMveG1sLXN0cmVhbSI6MjgsIi4uL3V0aWxzL3ppcC1zdHJlYW0iOjI5LCIuL3JlbC10eXBlIjozMSwiLi94Zm9ybS9ib29rL3dvcmtib29rLXhmb3JtIjozOCwiLi94Zm9ybS9jb21tZW50L2NvbW1lbnRzLXhmb3JtIjo0MCwiLi94Zm9ybS9jb21tZW50L3ZtbC1ub3Rlcy14Zm9ybSI6NDUsIi4veGZvcm0vY29yZS9hcHAteGZvcm0iOjUxLCIuL3hmb3JtL2NvcmUvY29udGVudC10eXBlcy14Zm9ybSI6NTIsIi4veGZvcm0vY29yZS9jb3JlLXhmb3JtIjo1MywiLi94Zm9ybS9jb3JlL3JlbGF0aW9uc2hpcHMteGZvcm0iOjU1LCIuL3hmb3JtL2RyYXdpbmcvZHJhd2luZy14Zm9ybSI6NjIsIi4veGZvcm0vc2hlZXQvd29ya3NoZWV0LXhmb3JtIjoxMTUsIi4veGZvcm0vc3RyaW5ncy9zaGFyZWQtc3RyaW5ncy14Zm9ybSI6MTI0LCIuL3hmb3JtL3N0eWxlL3N0eWxlcy14Zm9ybSI6MTM1LCIuL3hmb3JtL3RhYmxlL3RhYmxlLXhmb3JtIjoxNDMsIi4veG1sL3RoZW1lMSI6MTQ1LF9wcm9jZXNzOjQ2NyxidWZmZXI6MjIwLGZzOjIxNixqc3ppcDo0NDEsInJlYWRhYmxlLXN0cmVhbSI6NDkxfV0sMTQ1OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CjxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPiA8YTp0aGVtZUVsZW1lbnRzPiA8YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj4gPGE6ZGsxPiA8YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz4gPC9hOmRrMT4gPGE6bHQxPiA8YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPiA8L2E6bHQxPiA8YTpkazI+IDxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz4gPC9hOmRrMj4gPGE6bHQyPiA8YTpzcmdiQ2xyIHZhbD0iRUVFQ0UxIi8+IDwvYTpsdDI+IDxhOmFjY2VudDE+IDxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz4gPC9hOmFjY2VudDE+IDxhOmFjY2VudDI+IDxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz4gPC9hOmFjY2VudDI+IDxhOmFjY2VudDM+IDxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz4gPC9hOmFjY2VudDM+IDxhOmFjY2VudDQ+IDxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz4gPC9hOmFjY2VudDQ+IDxhOmFjY2VudDU+IDxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz4gPC9hOmFjY2VudDU+IDxhOmFjY2VudDY+IDxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz4gPC9hOmFjY2VudDY+IDxhOmhsaW5rPiA8YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+IDwvYTpobGluaz4gPGE6Zm9sSGxpbms+IDxhOnNyZ2JDbHIgdmFsPSI4MDAwODAiLz4gPC9hOmZvbEhsaW5rPiA8L2E6Y2xyU2NoZW1lPiA8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+IDxhOm1ham9yRm9udD4gPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4gPGE6ZWEgdHlwZWZhY2U9IiIvPiA8YTpjcyB0eXBlZmFjZT0iIi8+IDxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0i77yt77yzIO+8sOOCtOOCt+ODg+OCryIvPiA8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9IuunkeydgCDqs6DrlJUiLz4gPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSLlrovkvZMiLz4gPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSLmlrDntLDmmI7pq5QiLz4gPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4gPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4gPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4gPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPiA8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPiA8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPiA8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPiA8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+IDxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4gPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPiA8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+IDxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+IDxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+IDxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPiA8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPiA8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4gPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPiA8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+IDxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPiA8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4gPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4gPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4gPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4gPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4gPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+IDxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPiA8L2E6bWFqb3JGb250PiA8YTptaW5vckZvbnQ+IDxhOmxhdGluIHR5cGVmYWNlPSJDYWxpYnJpIi8+IDxhOmVhIHR5cGVmYWNlPSIiLz4gPGE6Y3MgdHlwZWZhY2U9IiIvPiA8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Iu+8re+8syDvvLDjgrTjgrfjg4Pjgq8iLz4gPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSLrp5HsnYAg6rOg65SVIi8+IDxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0i5a6L5L2TIi8+IDxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0i5paw57Sw5piO6auUIi8+IDxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4gPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPiA8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPiA8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+IDxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+IDxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+IDxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4gPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPiA8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+IDxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4gPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPiA8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPiA8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPiA8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4gPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4gPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+IDxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4gPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPiA8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4gPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+IDxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+IDxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+IDxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+IDxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4gPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+IDxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPiA8L2E6bWlub3JGb250PiA8L2E6Zm9udFNjaGVtZT4gPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+IDxhOmZpbGxTdHlsZUxzdD4gPGE6c29saWRGaWxsPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPiA8L2E6c29saWRGaWxsPiA8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPiA8YTpnc0xzdD4gPGE6Z3MgcG9zPSIwIj4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPiA8YTp0aW50IHZhbD0iNTAwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPGE6Z3MgcG9zPSIzNTAwMCI+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj4gPGE6dGludCB2YWw9IjM3MDAwIi8+IDxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPiA8L2E6c2NoZW1lQ2xyPiA8L2E6Z3M+IDxhOmdzIHBvcz0iMTAwMDAwIj4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPiA8YTp0aW50IHZhbD0iMTUwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPC9hOmdzTHN0PiA8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+IDwvYTpncmFkRmlsbD4gPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4gPGE6Z3NMc3Q+IDxhOmdzIHBvcz0iMCI+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj4gPGE6dGludCB2YWw9IjEwMDAwMCIvPiA8YTpzaGFkZSB2YWw9IjEwMDAwMCIvPiA8YTpzYXRNb2QgdmFsPSIxMzAwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8YTpncyBwb3M9IjEwMDAwMCI+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj4gPGE6dGludCB2YWw9IjUwMDAwIi8+IDxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+IDxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPiA8L2E6c2NoZW1lQ2xyPiA8L2E6Z3M+IDwvYTpnc0xzdD4gPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMCIvPiA8L2E6Z3JhZEZpbGw+IDwvYTpmaWxsU3R5bGVMc3Q+IDxhOmxuU3R5bGVMc3Q+IDxhOmxuIHc9Ijk1MjUiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj4gPGE6c2hhZGUgdmFsPSI5NTAwMCIvPiA8YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz4gPC9hOnNjaGVtZUNscj4gPC9hOnNvbGlkRmlsbD4gPGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPiA8L2E6bG4+IDxhOmxuIHc9IjI1NDAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj4gPGE6c29saWRGaWxsPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPiA8L2E6c29saWRGaWxsPiA8YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+IDwvYTpsbj4gPGE6bG4gdz0iMzgxMDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+IDwvYTpzb2xpZEZpbGw+IDxhOnByc3REYXNoIHZhbD0ic29saWQiLz4gPC9hOmxuPiA8L2E6bG5TdHlsZUxzdD4gPGE6ZWZmZWN0U3R5bGVMc3Q+IDxhOmVmZmVjdFN0eWxlPiA8YTplZmZlY3RMc3Q+IDxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj4gPGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+IDxhOmFscGhhIHZhbD0iMzgwMDAiLz4gPC9hOnNyZ2JDbHI+IDwvYTpvdXRlclNoZHc+IDwvYTplZmZlY3RMc3Q+IDwvYTplZmZlY3RTdHlsZT4gPGE6ZWZmZWN0U3R5bGU+IDxhOmVmZmVjdExzdD4gPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPiA8YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj4gPGE6YWxwaGEgdmFsPSIzNTAwMCIvPiA8L2E6c3JnYkNscj4gPC9hOm91dGVyU2hkdz4gPC9hOmVmZmVjdExzdD4gPC9hOmVmZmVjdFN0eWxlPiA8YTplZmZlY3RTdHlsZT4gPGE6ZWZmZWN0THN0PiA8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+IDxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPiA8YTphbHBoYSB2YWw9IjM1MDAwIi8+IDwvYTpzcmdiQ2xyPiA8L2E6b3V0ZXJTaGR3PiA8L2E6ZWZmZWN0THN0PiA8YTpzY2VuZTNkPiA8YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPiA8YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPiA8L2E6Y2FtZXJhPiA8YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+IDxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAwMDAwIi8+IDwvYTpsaWdodFJpZz4gPC9hOnNjZW5lM2Q+IDxhOnNwM2Q+IDxhOmJldmVsVCB3PSI2MzUwMCIgaD0iMjU0MDAiLz4gPC9hOnNwM2Q+IDwvYTplZmZlY3RTdHlsZT4gPC9hOmVmZmVjdFN0eWxlTHN0PiA8YTpiZ0ZpbGxTdHlsZUxzdD4gPGE6c29saWRGaWxsPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPiA8L2E6c29saWRGaWxsPiA8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPiA8YTpnc0xzdD4gPGE6Z3MgcG9zPSIwIj4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPiA8YTp0aW50IHZhbD0iNDAwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPGE6Z3MgcG9zPSI0MDAwMCI+IDxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj4gPGE6dGludCB2YWw9IjQ1MDAwIi8+IDxhOnNoYWRlIHZhbD0iOTkwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPGE6Z3MgcG9zPSIxMDAwMDAiPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+IDxhOnNoYWRlIHZhbD0iMjAwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMjU1MDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPC9hOmdzTHN0PiA8YTpwYXRoIHBhdGg9ImNpcmNsZSI+IDxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPiA8L2E6cGF0aD4gPC9hOmdyYWRGaWxsPiA8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPiA8YTpnc0xzdD4gPGE6Z3MgcG9zPSIwIj4gPGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPiA8YTp0aW50IHZhbD0iODAwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPGE6Z3MgcG9zPSIxMDAwMDAiPiA8YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+IDxhOnNoYWRlIHZhbD0iMzAwMDAiLz4gPGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPC9hOmdzTHN0PiA8YTpwYXRoIHBhdGg9ImNpcmNsZSI+IDxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1MDAwMCIgYj0iNTAwMDAiLz4gPC9hOnBhdGg+IDwvYTpncmFkRmlsbD4gPC9hOmJnRmlsbFN0eWxlTHN0PiA8L2E6Zm10U2NoZW1lPiA8L2E6dGhlbWVFbGVtZW50cz4gPGE6b2JqZWN0RGVmYXVsdHM+IDxhOnNwRGVmPiA8YTpzcFByLz4gPGE6Ym9keVByLz4gPGE6bHN0U3R5bGUvPiA8YTpzdHlsZT4gPGE6bG5SZWYgaWR4PSIxIj4gPGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPiA8L2E6bG5SZWY+IDxhOmZpbGxSZWYgaWR4PSIzIj4gPGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPiA8L2E6ZmlsbFJlZj4gPGE6ZWZmZWN0UmVmIGlkeD0iMiI+IDxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz4gPC9hOmVmZmVjdFJlZj4gPGE6Zm9udFJlZiBpZHg9Im1pbm9yIj4gPGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+IDwvYTpmb250UmVmPiA8L2E6c3R5bGU+IDwvYTpzcERlZj4gPGE6bG5EZWY+IDxhOnNwUHIvPiA8YTpib2R5UHIvPiA8YTpsc3RTdHlsZS8+IDxhOnN0eWxlPiA8YTpsblJlZiBpZHg9IjIiPiA8YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+IDwvYTpsblJlZj4gPGE6ZmlsbFJlZiBpZHg9IjAiPiA8YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+IDwvYTpmaWxsUmVmPiA8YTplZmZlY3RSZWYgaWR4PSIxIj4gPGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPiA8L2E6ZWZmZWN0UmVmPiA8YTpmb250UmVmIGlkeD0ibWlub3IiPiA8YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz4gPC9hOmZvbnRSZWY+IDwvYTpzdHlsZT4gPC9hOmxuRGVmPiA8L2E6b2JqZWN0RGVmYXVsdHM+IDxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4gPC9hOnRoZW1lPmB9LHt9XSwxNDY6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuQ3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCBzPWEoInN0cmVhbSIpLG89YSgiLi9mb3JtYXR0ZXIiKTtjbGFzcyByIGV4dGVuZHMgcy5UcmFuc2Zvcm17Y29uc3RydWN0b3IoZSl7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTplLm9iamVjdE1vZGV9KSx0aGlzLmhhc1dyaXR0ZW5CT009ITEsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPWUsdGhpcy5yb3dGb3JtYXR0ZXI9bmV3IG8uUm93Rm9ybWF0dGVyKGUpLHRoaXMuaGFzV3JpdHRlbkJPTT0hZS53cml0ZUJPTX10cmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMucm93Rm9ybWF0dGVyLnJvd1RyYW5zZm9ybT1lLHRoaXN9X3RyYW5zZm9ybShlLGwsbil7bGV0IGk9ITE7dHJ5e3RoaXMuaGFzV3JpdHRlbkJPTXx8KHRoaXMucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMuQk9NKSx0aGlzLmhhc1dyaXR0ZW5CT009ITApLHRoaXMucm93Rm9ybWF0dGVyLmZvcm1hdChlLChmLGMpPT5mPyhpPSEwLG4oZikpOihjJiZjLmZvckVhY2godT0+e3RoaXMucHVzaChtLmZyb20odSwidXRmOCIpKX0pLGk9ITAsbigpKSl9Y2F0Y2goZil7aWYoaSl0aHJvdyBmO24oZil9fV9mbHVzaChlKXt0aGlzLnJvd0Zvcm1hdHRlci5maW5pc2goKGwsbik9Pmw/ZShsKToobiYmbi5mb3JFYWNoKGk9Pnt0aGlzLnB1c2gobS5mcm9tKGksInV0ZjgiKSl9KSxlKCkpKX19ay5Dc3ZGb3JtYXR0ZXJTdHJlYW09cn0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiYnVmZmVyIikuQnVmZmVyKX0seyIuL2Zvcm1hdHRlciI6MTUwLGJ1ZmZlcjoyMjAsc3RyZWFtOjUwNX1dLDE0NzpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLkZvcm1hdHRlck9wdGlvbnM9dm9pZCAwLGsuRm9ybWF0dGVyT3B0aW9ucz1jbGFzc3tjb25zdHJ1Y3Rvcigpe2xldCBtPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp7fTt2YXIgczt0aGlzLm9iamVjdE1vZGU9ITAsdGhpcy5kZWxpbWl0ZXI9IiwiLHRoaXMucm93RGVsaW1pdGVyPWAKYCx0aGlzLnF1b3RlPSciJyx0aGlzLmVzY2FwZT10aGlzLnF1b3RlLHRoaXMucXVvdGVDb2x1bW5zPSExLHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zLHRoaXMuaGVhZGVycz1udWxsLHRoaXMuaW5jbHVkZUVuZFJvd0RlbGltaXRlcj0hMSx0aGlzLndyaXRlQk9NPSExLHRoaXMuQk9NPSJcdUZFRkYiLHRoaXMuYWx3YXlzV3JpdGVIZWFkZXJzPSExLE9iamVjdC5hc3NpZ24odGhpcyxtfHx7fSksbT8ucXVvdGVIZWFkZXJzPT09dm9pZCAwJiYodGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMpLG0/LnF1b3RlPT09ITA/dGhpcy5xdW90ZT0nIic6bT8ucXVvdGU9PT0hMSYmKHRoaXMucXVvdGU9IiIpLHR5cGVvZiBtPy5lc2NhcGUhPSJzdHJpbmciJiYodGhpcy5lc2NhcGU9dGhpcy5xdW90ZSksdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM9ISF0aGlzLmhlYWRlcnMmJigocz1tLndyaXRlSGVhZGVycyk9PT1udWxsfHxzPT09dm9pZCAwfHxzKSx0aGlzLmhlYWRlcnM9QXJyYXkuaXNBcnJheSh0aGlzLmhlYWRlcnMpP3RoaXMuaGVhZGVyczpudWxsLHRoaXMuZXNjYXBlZFF1b3RlPWAke3RoaXMuZXNjYXBlfSR7dGhpcy5xdW90ZX1gfX19LHt9XSwxNDg6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCBzPW0oYSgibG9kYXNoLmlzYm9vbGVhbiIpKSxvPW0oYSgibG9kYXNoLmlzbmlsIikpLHI9bShhKCJsb2Rhc2guZXNjYXBlcmVnZXhwIikpO2suRmllbGRGb3JtYXR0ZXI9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faGVhZGVycz1udWxsLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz10LHQuaGVhZGVycyE9PW51bGwmJih0aGlzLmhlYWRlcnM9dC5oZWFkZXJzKSx0aGlzLlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAodC5xdW90ZSwiZyIpO2NvbnN0IGU9YFske3QuZGVsaW1pdGVyfSR7ci5kZWZhdWx0KHQucm93RGVsaW1pdGVyKX18XHJ8Cl1gO3RoaXMuRVNDQVBFX1JFR0VYUD1uZXcgUmVnRXhwKGUpfXNldCBoZWFkZXJzKHQpe3RoaXMuX2hlYWRlcnM9dH1zaG91bGRRdW90ZSh0LGUpe2NvbnN0IGw9ZT90aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVIZWFkZXJzOnRoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUNvbHVtbnM7cmV0dXJuIHMuZGVmYXVsdChsKT9sOkFycmF5LmlzQXJyYXkobCk/bFt0XTp0aGlzLl9oZWFkZXJzIT09bnVsbCYmbFt0aGlzLl9oZWFkZXJzW3RdXX1mb3JtYXQodCxlLGwpe2NvbnN0IG49KCIiKyhvLmRlZmF1bHQodCk/IiI6dCkpLnJlcGxhY2UoL1wwL2csIiIpLHtmb3JtYXR0ZXJPcHRpb25zOml9PXRoaXM7cmV0dXJuIGkucXVvdGUhPT0iIiYmbi5pbmRleE9mKGkucXVvdGUpIT09LTE/dGhpcy5xdW90ZUZpZWxkKG4ucmVwbGFjZSh0aGlzLlJFUExBQ0VfUkVHRVhQLGkuZXNjYXBlZFF1b3RlKSk6bi5zZWFyY2godGhpcy5FU0NBUEVfUkVHRVhQKSE9PS0xfHx0aGlzLnNob3VsZFF1b3RlKGUsbCk/dGhpcy5xdW90ZUZpZWxkKG4pOm59cXVvdGVGaWVsZCh0KXtjb25zdHtxdW90ZTplfT10aGlzLmZvcm1hdHRlck9wdGlvbnM7cmV0dXJuYCR7ZX0ke3R9JHtlfWB9fX0seyJsb2Rhc2guZXNjYXBlcmVnZXhwIjo0NDIsImxvZGFzaC5pc2Jvb2xlYW4iOjQ0NCwibG9kYXNoLmlzbmlsIjo0NDd9XSwxNDk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1mdW5jdGlvbihsKXtyZXR1cm4gbCYmbC5fX2VzTW9kdWxlP2w6e2RlZmF1bHQ6bH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLlJvd0Zvcm1hdHRlcj12b2lkIDA7Y29uc3Qgcz1tKGEoImxvZGFzaC5pc2Z1bmN0aW9uIikpLG89bShhKCJsb2Rhc2guaXNlcXVhbCIpKSxyPWEoIi4vRmllbGRGb3JtYXR0ZXIiKSx0PWEoIi4uL3R5cGVzIik7Y2xhc3MgZXtjb25zdHJ1Y3RvcihuKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPW4sdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgci5GaWVsZEZvcm1hdHRlcihuKSx0aGlzLmhlYWRlcnM9bi5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPW4uc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITEsdGhpcy5oZWFkZXJzIT09bnVsbCYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLG4udHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09bi50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShuKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoblswXSkmJm5bMF0ubGVuZ3RoPT09Mn1zdGF0aWMgaXNSb3dBcnJheShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIXRoaXMuaXNSb3dIYXNoQXJyYXkobil9c3RhdGljIGdhdGhlckhlYWRlcnMobil7cmV0dXJuIGUuaXNSb3dIYXNoQXJyYXkobik/bi5tYXAoaT0+aVswXSk6QXJyYXkuaXNBcnJheShuKT9uOk9iamVjdC5rZXlzKG4pfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0obil7cmV0dXJuIHQuaXNTeW5jVHJhbnNmb3JtKG4pPyhpLGYpPT57bGV0IGM9bnVsbDt0cnl7Yz1uKGkpfWNhdGNoKHUpe3JldHVybiBmKHUpfXJldHVybiBmKG51bGwsYyl9OihpLGYpPT57bihpLGYpfX1zZXQgcm93VHJhbnNmb3JtKG4pe2lmKCFzLmRlZmF1bHQobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3Jvd1RyYW5zZm9ybT1lLmNyZWF0ZVRyYW5zZm9ybShuKX1mb3JtYXQobixpKXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihuLChmLGMpPT57aWYoZilyZXR1cm4gaShmKTtpZighbilyZXR1cm4gaShudWxsKTtjb25zdCB1PVtdO2lmKGMpe2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6ZCxoZWFkZXJzOmh9PXRoaXMuY2hlY2tIZWFkZXJzKGMpO2lmKHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzJiZoJiYhdGhpcy5oYXNXcml0dGVuSGVhZGVycyYmKHUucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoaCwhMCkpLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITApLGQpe2NvbnN0IHc9dGhpcy5nYXRoZXJDb2x1bW5zKGMpO3UucHVzaCh0aGlzLmZvcm1hdENvbHVtbnModywhMSkpfX1yZXR1cm4gaShudWxsLHUpfSl9ZmluaXNoKG4pe2NvbnN0IGk9W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYmdGhpcy5yb3dDb3VudD09PTApe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJuIG4obmV3IEVycm9yKCJgYWx3YXlzV3JpdGVIZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0IGBoZWFkZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTtpLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYmaS5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIpLG4obnVsbCxpKX1jaGVja0hlYWRlcnMobil7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCBpPWUuZ2F0aGVySGVhZGVycyhuKTtyZXR1cm4gdGhpcy5oZWFkZXJzPWksdGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPWksdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IW8uZGVmYXVsdChpLG4pLGhlYWRlcnM6aX06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRoZXJDb2x1bW5zKG4pe2lmKHRoaXMuaGVhZGVycz09PW51bGwpdGhyb3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/ZS5pc1Jvd0hhc2hBcnJheShuKT90aGlzLmhlYWRlcnMubWFwKChpLGYpPT57Y29uc3QgYz1uW2ZdO3JldHVybiBjP2NbMV06IiJ9KTplLmlzUm93QXJyYXkobikmJiF0aGlzLnNob3VsZFdyaXRlSGVhZGVycz9uOnRoaXMuaGVhZGVycy5tYXAoKGksZik9Pm5bZl0pOnRoaXMuaGVhZGVycy5tYXAoaT0+bltpXSl9Y2FsbFRyYW5zZm9ybWVyKG4saSl7cmV0dXJuIHRoaXMuX3Jvd1RyYW5zZm9ybT90aGlzLl9yb3dUcmFuc2Zvcm0obixpKTppKG51bGwsbil9Zm9ybWF0Q29sdW1ucyhuLGkpe2NvbnN0IGY9bi5tYXAoKHUsZCk9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9ybWF0KHUsZCxpKSkuam9pbih0aGlzLmZvcm1hdHRlck9wdGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6Y309dGhpcztyZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxjP1t0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyLGZdLmpvaW4oIiIpOmZ9fWsuUm93Rm9ybWF0dGVyPWV9LHsiLi4vdHlwZXMiOjE1MiwiLi9GaWVsZEZvcm1hdHRlciI6MTQ4LCJsb2Rhc2guaXNlcXVhbCI6NDQ1LCJsb2Rhc2guaXNmdW5jdGlvbiI6NDQ2fV0sMTUwOltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuRmllbGRGb3JtYXR0ZXI9ay5Sb3dGb3JtYXR0ZXI9dm9pZCAwO3ZhciBtPWEoIi4vUm93Rm9ybWF0dGVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIlJvd0Zvcm1hdHRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uUm93Rm9ybWF0dGVyfX0pO3ZhciBzPWEoIi4vRmllbGRGb3JtYXR0ZXIiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiRmllbGRGb3JtYXR0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkZpZWxkRm9ybWF0dGVyfX0pfSx7Ii4vRmllbGRGb3JtYXR0ZXIiOjE0OCwiLi9Sb3dGb3JtYXR0ZXIiOjE0OX1dLDE1MTpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXt2YXIgcz1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGQsaCx3LF8pe189PT12b2lkIDAmJihfPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLF8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGhbd119fSl9OmZ1bmN0aW9uKGQsaCx3LF8pe189PT12b2lkIDAmJihfPXcpLGRbX109aFt3XX0sbz1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGQsaCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmh9KX06ZnVuY3Rpb24oZCxoKXtkLmRlZmF1bHQ9aH0scj1mdW5jdGlvbihkKXtpZihkJiZkLl9fZXNNb2R1bGUpcmV0dXJuIGQ7dmFyIGg9e307aWYoZCE9bnVsbClmb3IodmFyIHcgaW4gZCl3IT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZCx3KSYmcyhoLGQsdyk7cmV0dXJuIG8oaCxkKSxofSx0PWZ1bmN0aW9uKGQsaCl7Zm9yKHZhciB3IGluIGQpdz09PSJkZWZhdWx0Inx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsdyl8fHMoaCxkLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay53cml0ZVRvUGF0aD1rLndyaXRlVG9TdHJpbmc9ay53cml0ZVRvQnVmZmVyPWsud3JpdGVUb1N0cmVhbT1rLndyaXRlPWsuZm9ybWF0PWsuRm9ybWF0dGVyT3B0aW9ucz1rLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgZT1hKCJ1dGlsIiksbD1hKCJzdHJlYW0iKSxuPXIoYSgiZnMiKSksaT1hKCIuL0Zvcm1hdHRlck9wdGlvbnMiKSxmPWEoIi4vQ3N2Rm9ybWF0dGVyU3RyZWFtIik7dChhKCIuL3R5cGVzIiksayk7dmFyIGM9YSgiLi9Dc3ZGb3JtYXR0ZXJTdHJlYW0iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiQ3N2Rm9ybWF0dGVyU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5Dc3ZGb3JtYXR0ZXJTdHJlYW19fSk7dmFyIHU9YSgiLi9Gb3JtYXR0ZXJPcHRpb25zIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIkZvcm1hdHRlck9wdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB1LkZvcm1hdHRlck9wdGlvbnN9fSksay5mb3JtYXQ9ZD0+bmV3IGYuQ3N2Rm9ybWF0dGVyU3RyZWFtKG5ldyBpLkZvcm1hdHRlck9wdGlvbnMoZCkpLGsud3JpdGU9KGQsaCk9Pntjb25zdCB3PWsuZm9ybWF0KGgpLF89ZS5wcm9taXNpZnkoKEEsUCk9Pnt3LndyaXRlKEEsdm9pZCAwLFApfSk7cmV0dXJuIGQucmVkdWNlKChBLFApPT5BLnRoZW4oKCk9Pl8oUCkpLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT53LmVuZCgpKS5jYXRjaChBPT57dy5lbWl0KCJlcnJvciIsQSl9KSx3fSxrLndyaXRlVG9TdHJlYW09KGQsaCx3KT0+ay53cml0ZShoLHcpLnBpcGUoZCksay53cml0ZVRvQnVmZmVyPWZ1bmN0aW9uKGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fTtjb25zdCB3PVtdLF89bmV3IGwuV3JpdGFibGUoe3dyaXRlKEEsUCxMKXt3LnB1c2goQSksTCgpfX0pO3JldHVybiBuZXcgUHJvbWlzZSgoQSxQKT0+e18ub24oImVycm9yIixQKS5vbigiZmluaXNoIiwoKT0+QShtLmNvbmNhdCh3KSkpLGsud3JpdGUoZCxoKS5waXBlKF8pfSl9LGsud3JpdGVUb1N0cmluZz0oZCxoKT0+ay53cml0ZVRvQnVmZmVyKGQsaCkudGhlbih3PT53LnRvU3RyaW5nKCkpLGsud3JpdGVUb1BhdGg9KGQsaCx3KT0+e2NvbnN0IF89bi5jcmVhdGVXcml0ZVN0cmVhbShkLHtlbmNvZGluZzoidXRmOCJ9KTtyZXR1cm4gay53cml0ZShoLHcpLnBpcGUoXyl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJidWZmZXIiKS5CdWZmZXIpfSx7Ii4vQ3N2Rm9ybWF0dGVyU3RyZWFtIjoxNDYsIi4vRm9ybWF0dGVyT3B0aW9ucyI6MTQ3LCIuL3R5cGVzIjoxNTIsYnVmZmVyOjIyMCxmczoyMTYsc3RyZWFtOjUwNSx1dGlsOjUyN31dLDE1MjpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLmlzU3luY1RyYW5zZm9ybT12b2lkIDAsay5pc1N5bmNUcmFuc2Zvcm09bT0+bS5sZW5ndGg9PT0xfSx7fV0sMTUzOltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLkNzdlBhcnNlclN0cmVhbT12b2lkIDA7Y29uc3Qgcz1hKCJzdHJpbmdfZGVjb2RlciIpLG89YSgic3RyZWFtIikscj1hKCIuL3RyYW5zZm9ybXMiKSx0PWEoIi4vcGFyc2VyIik7Y2xhc3MgZSBleHRlbmRzIG8uVHJhbnNmb3Jte2NvbnN0cnVjdG9yKG4pe3N1cGVyKHtvYmplY3RNb2RlOm4ub2JqZWN0TW9kZX0pLHRoaXMubGluZXM9IiIsdGhpcy5yb3dDb3VudD0wLHRoaXMucGFyc2VkUm93Q291bnQ9MCx0aGlzLnBhcnNlZExpbmVDb3VudD0wLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLmhlYWRlcnNFbWl0dGVkPSExLHRoaXMucGFyc2VyT3B0aW9ucz1uLHRoaXMucGFyc2VyPW5ldyB0LlBhcnNlcihuKSx0aGlzLmhlYWRlclRyYW5zZm9ybWVyPW5ldyByLkhlYWRlclRyYW5zZm9ybWVyKG4pLHRoaXMuZGVjb2Rlcj1uZXcgcy5TdHJpbmdEZWNvZGVyKG4uZW5jb2RpbmcpLHRoaXMucm93VHJhbnNmb3JtZXJWYWxpZGF0b3I9bmV3IHIuUm93VHJhbnNmb3JtZXJWYWxpZGF0b3J9Z2V0IGhhc0hpdFJvd0xpbWl0KCl7cmV0dXJuIHRoaXMucGFyc2VyT3B0aW9ucy5saW1pdFJvd3MmJnRoaXMucm93Q291bnQ+PXRoaXMucGFyc2VyT3B0aW9ucy5tYXhSb3dzfWdldCBzaG91bGRFbWl0Um93cygpe3JldHVybiB0aGlzLnBhcnNlZFJvd0NvdW50PnRoaXMucGFyc2VyT3B0aW9ucy5za2lwUm93c31nZXQgc2hvdWxkU2tpcExpbmUoKXtyZXR1cm4gdGhpcy5wYXJzZWRMaW5lQ291bnQ8PXRoaXMucGFyc2VyT3B0aW9ucy5za2lwTGluZXN9dHJhbnNmb3JtKG4pe3JldHVybiB0aGlzLnJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yLnJvd1RyYW5zZm9ybT1uLHRoaXN9dmFsaWRhdGUobil7cmV0dXJuIHRoaXMucm93VHJhbnNmb3JtZXJWYWxpZGF0b3Iucm93VmFsaWRhdG9yPW4sdGhpc31lbWl0KG4pe2lmKG49PT0iZW5kIilyZXR1cm4gdGhpcy5lbmRFbWl0dGVkfHwodGhpcy5lbmRFbWl0dGVkPSEwLHN1cGVyLmVtaXQoImVuZCIsdGhpcy5yb3dDb3VudCkpLCExO2Zvcih2YXIgaT1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGk+MT9pLTE6MCksYz0xO2M8aTtjKyspZltjLTFdPWFyZ3VtZW50c1tjXTtyZXR1cm4gc3VwZXIuZW1pdChuLC4uLmYpfV90cmFuc2Zvcm0obixpLGYpe2lmKHRoaXMuaGFzSGl0Um93TGltaXQpcmV0dXJuIGYoKTtjb25zdCBjPWUud3JhcERvbmVDYWxsYmFjayhmKTt0cnl7Y29uc3R7bGluZXM6dX09dGhpcyxkPXUrdGhpcy5kZWNvZGVyLndyaXRlKG4pLGg9dGhpcy5wYXJzZShkLCEwKTtyZXR1cm4gdGhpcy5wcm9jZXNzUm93cyhoLGMpfWNhdGNoKHUpe3JldHVybiBjKHUpfX1fZmx1c2gobil7Y29uc3QgaT1lLndyYXBEb25lQ2FsbGJhY2sobik7aWYodGhpcy5oYXNIaXRSb3dMaW1pdClyZXR1cm4gaSgpO3RyeXtjb25zdCBmPXRoaXMubGluZXMrdGhpcy5kZWNvZGVyLmVuZCgpLGM9dGhpcy5wYXJzZShmLCExKTtyZXR1cm4gdGhpcy5wcm9jZXNzUm93cyhjLGkpfWNhdGNoKGYpe3JldHVybiBpKGYpfX1wYXJzZShuLGkpe2lmKCFuKXJldHVybltdO2NvbnN0e2xpbmU6Zixyb3dzOmN9PXRoaXMucGFyc2VyLnBhcnNlKG4saSk7cmV0dXJuIHRoaXMubGluZXM9ZixjfXByb2Nlc3NSb3dzKG4saSl7Y29uc3QgZj1uLmxlbmd0aCxjPXU9Pntjb25zdCBkPV89Pl8/aShfKTp1JTEwMCE9MD9jKHUrMSk6dm9pZCBtKCgpPT5jKHUrMSkpO2lmKHRoaXMuY2hlY2tBbmRFbWl0SGVhZGVycygpLHU+PWZ8fHRoaXMuaGFzSGl0Um93TGltaXQpcmV0dXJuIGkoKTtpZih0aGlzLnBhcnNlZExpbmVDb3VudCs9MSx0aGlzLnNob3VsZFNraXBMaW5lKXJldHVybiBkKCk7Y29uc3QgaD1uW3VdO3RoaXMucm93Q291bnQrPTEsdGhpcy5wYXJzZWRSb3dDb3VudCs9MTtjb25zdCB3PXRoaXMucm93Q291bnQ7cmV0dXJuIHRoaXMudHJhbnNmb3JtUm93KGgsKF8sQSk9PntpZihfKXJldHVybiB0aGlzLnJvd0NvdW50LT0xLGQoXyk7aWYoIUEpcmV0dXJuIGQobmV3IEVycm9yKCJleHBlY3RlZCB0cmFuc2Zvcm0gcmVzdWx0IikpO2lmKEEuaXNWYWxpZCl7aWYoQS5yb3cpcmV0dXJuIHRoaXMucHVzaFJvdyhBLnJvdyxkKX1lbHNlIHRoaXMuZW1pdCgiZGF0YS1pbnZhbGlkIixBLnJvdyx3LEEucmVhc29uKTtyZXR1cm4gZCgpfSl9O2MoMCl9dHJhbnNmb3JtUm93KG4saSl7dHJ5e3RoaXMuaGVhZGVyVHJhbnNmb3JtZXIudHJhbnNmb3JtKG4sKGYsYyk9PmY/aShmKTpjP2MuaXNWYWxpZD9jLnJvdz90aGlzLnNob3VsZEVtaXRSb3dzP3RoaXMucm93VHJhbnNmb3JtZXJWYWxpZGF0b3IudHJhbnNmb3JtQW5kVmFsaWRhdGUoYy5yb3csaSk6dGhpcy5za2lwUm93KGkpOih0aGlzLnJvd0NvdW50LT0xLHRoaXMucGFyc2VkUm93Q291bnQtPTEsaShudWxsLHtyb3c6bnVsbCxpc1ZhbGlkOiEwfSkpOnRoaXMuc2hvdWxkRW1pdFJvd3M/aShudWxsLHtpc1ZhbGlkOiExLHJvdzpufSk6dGhpcy5za2lwUm93KGkpOmkobmV3IEVycm9yKCJFeHBlY3RlZCByZXN1bHQgZnJvbSBoZWFkZXIgdHJhbnNmb3JtIikpKX1jYXRjaChmKXtpKGYpfX1jaGVja0FuZEVtaXRIZWFkZXJzKCl7IXRoaXMuaGVhZGVyc0VtaXR0ZWQmJnRoaXMuaGVhZGVyVHJhbnNmb3JtZXIuaGVhZGVycyYmKHRoaXMuaGVhZGVyc0VtaXR0ZWQ9ITAsdGhpcy5lbWl0KCJoZWFkZXJzIix0aGlzLmhlYWRlclRyYW5zZm9ybWVyLmhlYWRlcnMpKX1za2lwUm93KG4pe3JldHVybiB0aGlzLnJvd0NvdW50LT0xLG4obnVsbCx7cm93Om51bGwsaXNWYWxpZDohMH0pfXB1c2hSb3cobixpKXt0cnl7dGhpcy5wYXJzZXJPcHRpb25zLm9iamVjdE1vZGU/dGhpcy5wdXNoKG4pOnRoaXMucHVzaChKU09OLnN0cmluZ2lmeShuKSksaSgpfWNhdGNoKGYpe2koZil9fXN0YXRpYyB3cmFwRG9uZUNhbGxiYWNrKG4pe2xldCBpPSExO3JldHVybiBmdW5jdGlvbihmKXtpZihmKXtpZihpKXRocm93IGY7cmV0dXJuIGk9ITAsdm9pZCBuKGYpfWZvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLHU9bmV3IEFycmF5KGM+MT9jLTE6MCksZD0xO2Q8YztkKyspdVtkLTFdPWFyZ3VtZW50c1tkXTtuKC4uLnUpfX19ay5Dc3ZQYXJzZXJTdHJlYW09ZX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgidGltZXJzIikuc2V0SW1tZWRpYXRlKX0seyIuL3BhcnNlciI6MTY1LCIuL3RyYW5zZm9ybXMiOjE2OCxzdHJlYW06NTA1LHN0cmluZ19kZWNvZGVyOjIxOCx0aW1lcnM6NTIzfV0sMTU0OltmdW5jdGlvbihhLEUsayl7dmFyIG09ZnVuY3Rpb24ocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5QYXJzZXJPcHRpb25zPXZvaWQgMDtjb25zdCBzPW0oYSgibG9kYXNoLmVzY2FwZXJlZ2V4cCIpKSxvPW0oYSgibG9kYXNoLmlzbmlsIikpO2suUGFyc2VyT3B0aW9ucz1jbGFzc3tjb25zdHJ1Y3RvcihyKXt2YXIgdDtpZih0aGlzLm9iamVjdE1vZGU9ITAsdGhpcy5kZWxpbWl0ZXI9IiwiLHRoaXMuaWdub3JlRW1wdHk9ITEsdGhpcy5xdW90ZT0nIicsdGhpcy5lc2NhcGU9bnVsbCx0aGlzLmVzY2FwZUNoYXI9dGhpcy5xdW90ZSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnN1cHBvcnRzQ29tbWVudHM9ITEsdGhpcy5sdHJpbT0hMSx0aGlzLnJ0cmltPSExLHRoaXMudHJpbT0hMSx0aGlzLmhlYWRlcnM9bnVsbCx0aGlzLnJlbmFtZUhlYWRlcnM9ITEsdGhpcy5zdHJpY3RDb2x1bW5IYW5kbGluZz0hMSx0aGlzLmRpc2NhcmRVbm1hcHBlZENvbHVtbnM9ITEsdGhpcy5jYXJyaWFnZVJldHVybj0iXHIiLHRoaXMuZW5jb2Rpbmc9InV0ZjgiLHRoaXMubGltaXRSb3dzPSExLHRoaXMubWF4Um93cz0wLHRoaXMuc2tpcExpbmVzPTAsdGhpcy5za2lwUm93cz0wLE9iamVjdC5hc3NpZ24odGhpcyxyfHx7fSksdGhpcy5kZWxpbWl0ZXIubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJkZWxpbWl0ZXIgb3B0aW9uIG11c3QgYmUgb25lIGNoYXJhY3RlciBsb25nIik7dGhpcy5lc2NhcGVkRGVsaW1pdGVyPXMuZGVmYXVsdCh0aGlzLmRlbGltaXRlciksdGhpcy5lc2NhcGVDaGFyPSh0PXRoaXMuZXNjYXBlKSE9PW51bGwmJnQhPT12b2lkIDA/dDp0aGlzLnF1b3RlLHRoaXMuc3VwcG9ydHNDb21tZW50cz0hby5kZWZhdWx0KHRoaXMuY29tbWVudCksdGhpcy5ORVhUX1RPS0VOX1JFR0VYUD1uZXcgUmVnRXhwKGAoW15cXHNdfFxcclxcbnxcXG58XFxyfCR7dGhpcy5lc2NhcGVkRGVsaW1pdGVyfSlgKSx0aGlzLm1heFJvd3M+MCYmKHRoaXMubGltaXRSb3dzPSEwKX19fSx7ImxvZGFzaC5lc2NhcGVyZWdleHAiOjQ0MiwibG9kYXNoLmlzbmlsIjo0NDd9XSwxNTU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGMsdSxkLGgpe2g9PT12b2lkIDAmJihoPWQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGgse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVbZF19fSl9OmZ1bmN0aW9uKGMsdSxkLGgpe2g9PT12b2lkIDAmJihoPWQpLGNbaF09dVtkXX0scz1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGMsdSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnV9KX06ZnVuY3Rpb24oYyx1KXtjLmRlZmF1bHQ9dX0sbz1mdW5jdGlvbihjKXtpZihjJiZjLl9fZXNNb2R1bGUpcmV0dXJuIGM7dmFyIHU9e307aWYoYyE9bnVsbClmb3IodmFyIGQgaW4gYylkIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxkKSYmbSh1LGMsZCk7cmV0dXJuIHModSxjKSx1fSxyPWZ1bmN0aW9uKGMsdSl7Zm9yKHZhciBkIGluIGMpZD09PSJkZWZhdWx0Inx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHUsZCl8fG0odSxjLGQpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5wYXJzZVN0cmluZz1rLnBhcnNlRmlsZT1rLnBhcnNlU3RyZWFtPWsucGFyc2U9ay5QYXJzZXJPcHRpb25zPWsuQ3N2UGFyc2VyU3RyZWFtPXZvaWQgMDtjb25zdCB0PW8oYSgiZnMiKSksZT1hKCJzdHJlYW0iKSxsPWEoIi4vUGFyc2VyT3B0aW9ucyIpLG49YSgiLi9Dc3ZQYXJzZXJTdHJlYW0iKTtyKGEoIi4vdHlwZXMiKSxrKTt2YXIgaT1hKCIuL0NzdlBhcnNlclN0cmVhbSIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJDc3ZQYXJzZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkNzdlBhcnNlclN0cmVhbX19KTt2YXIgZj1hKCIuL1BhcnNlck9wdGlvbnMiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiUGFyc2VyT3B0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuUGFyc2VyT3B0aW9uc319KSxrLnBhcnNlPWM9Pm5ldyBuLkNzdlBhcnNlclN0cmVhbShuZXcgbC5QYXJzZXJPcHRpb25zKGMpKSxrLnBhcnNlU3RyZWFtPShjLHUpPT5jLnBpcGUobmV3IG4uQ3N2UGFyc2VyU3RyZWFtKG5ldyBsLlBhcnNlck9wdGlvbnModSkpKSxrLnBhcnNlRmlsZT1mdW5jdGlvbihjKXtsZXQgdT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e307cmV0dXJuIHQuY3JlYXRlUmVhZFN0cmVhbShjKS5waXBlKG5ldyBuLkNzdlBhcnNlclN0cmVhbShuZXcgbC5QYXJzZXJPcHRpb25zKHUpKSl9LGsucGFyc2VTdHJpbmc9KGMsdSk9Pntjb25zdCBkPW5ldyBlLlJlYWRhYmxlO3JldHVybiBkLnB1c2goYyksZC5wdXNoKG51bGwpLGQucGlwZShuZXcgbi5Dc3ZQYXJzZXJTdHJlYW0obmV3IGwuUGFyc2VyT3B0aW9ucyh1KSkpfX0seyIuL0NzdlBhcnNlclN0cmVhbSI6MTUzLCIuL1BhcnNlck9wdGlvbnMiOjE1NCwiLi90eXBlcyI6MTY5LGZzOjIxNixzdHJlYW06NTA1fV0sMTU2OltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuUGFyc2VyPXZvaWQgMDtjb25zdCBtPWEoIi4vU2Nhbm5lciIpLHM9YSgiLi9Sb3dQYXJzZXIiKSxvPWEoIi4vVG9rZW4iKTtjbGFzcyBye2NvbnN0cnVjdG9yKGUpe3RoaXMucGFyc2VyT3B0aW9ucz1lLHRoaXMucm93UGFyc2VyPW5ldyBzLlJvd1BhcnNlcih0aGlzLnBhcnNlck9wdGlvbnMpfXN0YXRpYyByZW1vdmVCT00oZSl7cmV0dXJuIGUmJmUuY2hhckNvZGVBdCgwKT09PTY1Mjc5P2Uuc2xpY2UoMSk6ZX1wYXJzZShlLGwpe2NvbnN0IG49bmV3IG0uU2Nhbm5lcih7bGluZTpyLnJlbW92ZUJPTShlKSxwYXJzZXJPcHRpb25zOnRoaXMucGFyc2VyT3B0aW9ucyxoYXNNb3JlRGF0YTpsfSk7cmV0dXJuIHRoaXMucGFyc2VyT3B0aW9ucy5zdXBwb3J0c0NvbW1lbnRzP3RoaXMucGFyc2VXaXRoQ29tbWVudHMobik6dGhpcy5wYXJzZVdpdGhvdXRDb21tZW50cyhuKX1wYXJzZVdpdGhvdXRDb21tZW50cyhlKXtjb25zdCBsPVtdO2xldCBuPSEwO2Zvcig7bjspbj10aGlzLnBhcnNlUm93KGUsbCk7cmV0dXJue2xpbmU6ZS5saW5lLHJvd3M6bH19cGFyc2VXaXRoQ29tbWVudHMoZSl7Y29uc3R7cGFyc2VyT3B0aW9uczpsfT10aGlzLG49W107Zm9yKGxldCBpPWUubmV4dENoYXJhY3RlclRva2VuO2khPT1udWxsO2k9ZS5uZXh0Q2hhcmFjdGVyVG9rZW4paWYoby5Ub2tlbi5pc1Rva2VuQ29tbWVudChpLGwpKXtpZihlLmFkdmFuY2VQYXN0TGluZSgpPT09bnVsbClyZXR1cm57bGluZTplLmxpbmVGcm9tQ3Vyc29yLHJvd3M6bn07aWYoIWUuaGFzTW9yZUNoYXJhY3RlcnMpcmV0dXJue2xpbmU6ZS5saW5lRnJvbUN1cnNvcixyb3dzOm59O2UudHJ1bmNhdGVUb0N1cnNvcigpfWVsc2UgaWYoIXRoaXMucGFyc2VSb3coZSxuKSlicmVhaztyZXR1cm57bGluZTplLmxpbmUscm93czpufX1wYXJzZVJvdyhlLGwpe2lmKCFlLm5leHROb25TcGFjZVRva2VuKXJldHVybiExO2NvbnN0IG49dGhpcy5yb3dQYXJzZXIucGFyc2UoZSk7cmV0dXJuIG4hPT1udWxsJiYodGhpcy5wYXJzZXJPcHRpb25zLmlnbm9yZUVtcHR5JiZzLlJvd1BhcnNlci5pc0VtcHR5Um93KG4pfHxsLnB1c2gobiksITApfX1rLlBhcnNlcj1yfSx7Ii4vUm93UGFyc2VyIjoxNTcsIi4vU2Nhbm5lciI6MTU4LCIuL1Rva2VuIjoxNTl9XSwxNTc6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5Sb3dQYXJzZXI9dm9pZCAwO2NvbnN0IG09YSgiLi9jb2x1bW4iKSxzPWEoIi4vVG9rZW4iKTtrLlJvd1BhcnNlcj1jbGFzc3tjb25zdHJ1Y3RvcihvKXt0aGlzLnBhcnNlck9wdGlvbnM9byx0aGlzLmNvbHVtblBhcnNlcj1uZXcgbS5Db2x1bW5QYXJzZXIobyl9c3RhdGljIGlzRW1wdHlSb3cobyl7cmV0dXJuIG8uam9pbigiIikucmVwbGFjZSgvXHMrL2csIiIpPT09IiJ9cGFyc2Uobyl7Y29uc3R7cGFyc2VyT3B0aW9uczpyfT10aGlzLHtoYXNNb3JlRGF0YTp0fT1vLGU9byxsPVtdO2xldCBuPXRoaXMuZ2V0U3RhcnRUb2tlbihlLGwpO2Zvcig7bjspe2lmKHMuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihuKSlyZXR1cm4gZS5hZHZhbmNlUGFzdFRva2VuKG4pLCFlLmhhc01vcmVDaGFyYWN0ZXJzJiZzLlRva2VuLmlzVG9rZW5DYXJyaWFnZVJldHVybihuLHIpJiZ0P251bGw6KGUudHJ1bmNhdGVUb0N1cnNvcigpLGwpO2lmKCF0aGlzLnNob3VsZFNraXBDb2x1bW5QYXJzZShlLG4sbCkpe2NvbnN0IGk9dGhpcy5jb2x1bW5QYXJzZXIucGFyc2UoZSk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7bC5wdXNoKGkpfW49ZS5uZXh0Tm9uU3BhY2VUb2tlbn1yZXR1cm4gdD9udWxsOihlLnRydW5jYXRlVG9DdXJzb3IoKSxsKX1nZXRTdGFydFRva2VuKG8scil7Y29uc3QgdD1vLm5leHROb25TcGFjZVRva2VuO3JldHVybiB0IT09bnVsbCYmcy5Ub2tlbi5pc1Rva2VuRGVsaW1pdGVyKHQsdGhpcy5wYXJzZXJPcHRpb25zKT8oci5wdXNoKCIiKSxvLm5leHROb25TcGFjZVRva2VuKTp0fXNob3VsZFNraXBDb2x1bW5QYXJzZShvLHIsdCl7Y29uc3R7cGFyc2VyT3B0aW9uczplfT10aGlzO2lmKHMuVG9rZW4uaXNUb2tlbkRlbGltaXRlcihyLGUpKXtvLmFkdmFuY2VQYXN0VG9rZW4ocik7Y29uc3QgbD1vLm5leHRDaGFyYWN0ZXJUb2tlbjtpZighby5oYXNNb3JlQ2hhcmFjdGVyc3x8bCE9PW51bGwmJnMuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihsKXx8bCE9PW51bGwmJnMuVG9rZW4uaXNUb2tlbkRlbGltaXRlcihsLGUpKXJldHVybiB0LnB1c2goIiIpLCEwfXJldHVybiExfX19LHsiLi9Ub2tlbiI6MTU5LCIuL2NvbHVtbiI6MTY0fV0sMTU4OltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuU2Nhbm5lcj12b2lkIDA7Y29uc3QgbT1hKCIuL1Rva2VuIikscz0vKCg/OlxyXG4pfFxufFxyKS87ay5TY2FubmVyPWNsYXNze2NvbnN0cnVjdG9yKG8pe3RoaXMuY3Vyc29yPTAsdGhpcy5saW5lPW8ubGluZSx0aGlzLmxpbmVMZW5ndGg9dGhpcy5saW5lLmxlbmd0aCx0aGlzLnBhcnNlck9wdGlvbnM9by5wYXJzZXJPcHRpb25zLHRoaXMuaGFzTW9yZURhdGE9by5oYXNNb3JlRGF0YSx0aGlzLmN1cnNvcj1vLmN1cnNvcnx8MH1nZXQgaGFzTW9yZUNoYXJhY3RlcnMoKXtyZXR1cm4gdGhpcy5saW5lTGVuZ3RoPnRoaXMuY3Vyc29yfWdldCBuZXh0Tm9uU3BhY2VUb2tlbigpe2NvbnN0e2xpbmVGcm9tQ3Vyc29yOm99PXRoaXMscj10aGlzLnBhcnNlck9wdGlvbnMuTkVYVF9UT0tFTl9SRUdFWFA7aWYoby5zZWFyY2gocik9PT0tMSlyZXR1cm4gbnVsbDtjb25zdCB0PXIuZXhlYyhvKTtpZih0PT1udWxsKXJldHVybiBudWxsO2NvbnN0IGU9dFsxXSxsPXRoaXMuY3Vyc29yKyh0LmluZGV4fHwwKTtyZXR1cm4gbmV3IG0uVG9rZW4oe3Rva2VuOmUsc3RhcnRDdXJzb3I6bCxlbmRDdXJzb3I6bCtlLmxlbmd0aC0xfSl9Z2V0IG5leHRDaGFyYWN0ZXJUb2tlbigpe2NvbnN0e2N1cnNvcjpvLGxpbmVMZW5ndGg6cn09dGhpcztyZXR1cm4gcjw9bz9udWxsOm5ldyBtLlRva2VuKHt0b2tlbjp0aGlzLmxpbmVbb10sc3RhcnRDdXJzb3I6byxlbmRDdXJzb3I6b30pfWdldCBsaW5lRnJvbUN1cnNvcigpe3JldHVybiB0aGlzLmxpbmUuc3Vic3RyKHRoaXMuY3Vyc29yKX1hZHZhbmNlUGFzdExpbmUoKXtjb25zdCBvPXMuZXhlYyh0aGlzLmxpbmVGcm9tQ3Vyc29yKTtyZXR1cm4gbz8odGhpcy5jdXJzb3IrPShvLmluZGV4fHwwKStvWzBdLmxlbmd0aCx0aGlzKTp0aGlzLmhhc01vcmVEYXRhP251bGw6KHRoaXMuY3Vyc29yPXRoaXMubGluZUxlbmd0aCx0aGlzKX1hZHZhbmNlVG8obyl7cmV0dXJuIHRoaXMuY3Vyc29yPW8sdGhpc31hZHZhbmNlVG9Ub2tlbihvKXtyZXR1cm4gdGhpcy5jdXJzb3I9by5zdGFydEN1cnNvcix0aGlzfWFkdmFuY2VQYXN0VG9rZW4obyl7cmV0dXJuIHRoaXMuY3Vyc29yPW8uZW5kQ3Vyc29yKzEsdGhpc310cnVuY2F0ZVRvQ3Vyc29yKCl7cmV0dXJuIHRoaXMubGluZT10aGlzLmxpbmVGcm9tQ3Vyc29yLHRoaXMubGluZUxlbmd0aD10aGlzLmxpbmUubGVuZ3RoLHRoaXMuY3Vyc29yPTAsdGhpc319fSx7Ii4vVG9rZW4iOjE1OX1dLDE1OTpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLlRva2VuPXZvaWQgMCxrLlRva2VuPWNsYXNze2NvbnN0cnVjdG9yKG0pe3RoaXMudG9rZW49bS50b2tlbix0aGlzLnN0YXJ0Q3Vyc29yPW0uc3RhcnRDdXJzb3IsdGhpcy5lbmRDdXJzb3I9bS5lbmRDdXJzb3J9c3RhdGljIGlzVG9rZW5Sb3dEZWxpbWl0ZXIobSl7Y29uc3Qgcz1tLnRva2VuO3JldHVybiBzPT09IlxyInx8cz09PWAKYHx8cz09PWBccgpgfXN0YXRpYyBpc1Rva2VuQ2FycmlhZ2VSZXR1cm4obSxzKXtyZXR1cm4gbS50b2tlbj09PXMuY2FycmlhZ2VSZXR1cm59c3RhdGljIGlzVG9rZW5Db21tZW50KG0scyl7cmV0dXJuIHMuc3VwcG9ydHNDb21tZW50cyYmISFtJiZtLnRva2VuPT09cy5jb21tZW50fXN0YXRpYyBpc1Rva2VuRXNjYXBlQ2hhcmFjdGVyKG0scyl7cmV0dXJuIG0udG9rZW49PT1zLmVzY2FwZUNoYXJ9c3RhdGljIGlzVG9rZW5RdW90ZShtLHMpe3JldHVybiBtLnRva2VuPT09cy5xdW90ZX1zdGF0aWMgaXNUb2tlbkRlbGltaXRlcihtLHMpe3JldHVybiBtLnRva2VuPT09cy5kZWxpbWl0ZXJ9fX0se31dLDE2MDpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLkNvbHVtbkZvcm1hdHRlcj12b2lkIDAsay5Db2x1bW5Gb3JtYXR0ZXI9Y2xhc3N7Y29uc3RydWN0b3IobSl7bS50cmltP3RoaXMuZm9ybWF0PXM9PnMudHJpbSgpOm0ubHRyaW0/dGhpcy5mb3JtYXQ9cz0+cy50cmltTGVmdCgpOm0ucnRyaW0/dGhpcy5mb3JtYXQ9cz0+cy50cmltUmlnaHQoKTp0aGlzLmZvcm1hdD1zPT5zfX19LHt9XSwxNjE6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5Db2x1bW5QYXJzZXI9dm9pZCAwO2NvbnN0IG09YSgiLi9Ob25RdW90ZWRDb2x1bW5QYXJzZXIiKSxzPWEoIi4vUXVvdGVkQ29sdW1uUGFyc2VyIiksbz1hKCIuLi9Ub2tlbiIpO2suQ29sdW1uUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKHIpe3RoaXMucGFyc2VyT3B0aW9ucz1yLHRoaXMucXVvdGVkQ29sdW1uUGFyc2VyPW5ldyBzLlF1b3RlZENvbHVtblBhcnNlcihyKSx0aGlzLm5vblF1b3RlZENvbHVtblBhcnNlcj1uZXcgbS5Ob25RdW90ZWRDb2x1bW5QYXJzZXIocil9cGFyc2Uocil7Y29uc3R7bmV4dE5vblNwYWNlVG9rZW46dH09cjtyZXR1cm4gdCE9PW51bGwmJm8uVG9rZW4uaXNUb2tlblF1b3RlKHQsdGhpcy5wYXJzZXJPcHRpb25zKT8oci5hZHZhbmNlVG9Ub2tlbih0KSx0aGlzLnF1b3RlZENvbHVtblBhcnNlci5wYXJzZShyKSk6dGhpcy5ub25RdW90ZWRDb2x1bW5QYXJzZXIucGFyc2Uocil9fX0seyIuLi9Ub2tlbiI6MTU5LCIuL05vblF1b3RlZENvbHVtblBhcnNlciI6MTYyLCIuL1F1b3RlZENvbHVtblBhcnNlciI6MTYzfV0sMTYyOltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPXZvaWQgMDtjb25zdCBtPWEoIi4vQ29sdW1uRm9ybWF0dGVyIikscz1hKCIuLi9Ub2tlbiIpO2suTm9uUXVvdGVkQ29sdW1uUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKG8pe3RoaXMucGFyc2VyT3B0aW9ucz1vLHRoaXMuY29sdW1uRm9ybWF0dGVyPW5ldyBtLkNvbHVtbkZvcm1hdHRlcihvKX1wYXJzZShvKXtpZighby5oYXNNb3JlQ2hhcmFjdGVycylyZXR1cm4gbnVsbDtjb25zdHtwYXJzZXJPcHRpb25zOnJ9PXRoaXMsdD1bXTtsZXQgZT1vLm5leHRDaGFyYWN0ZXJUb2tlbjtmb3IoO2UmJiFzLlRva2VuLmlzVG9rZW5EZWxpbWl0ZXIoZSxyKSYmIXMuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihlKTtlPW8ubmV4dENoYXJhY3RlclRva2VuKXQucHVzaChlLnRva2VuKSxvLmFkdmFuY2VQYXN0VG9rZW4oZSk7cmV0dXJuIHRoaXMuY29sdW1uRm9ybWF0dGVyLmZvcm1hdCh0LmpvaW4oIiIpKX19fSx7Ii4uL1Rva2VuIjoxNTksIi4vQ29sdW1uRm9ybWF0dGVyIjoxNjB9XSwxNjM6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5RdW90ZWRDb2x1bW5QYXJzZXI9dm9pZCAwO2NvbnN0IG09YSgiLi9Db2x1bW5Gb3JtYXR0ZXIiKSxzPWEoIi4uL1Rva2VuIik7ay5RdW90ZWRDb2x1bW5QYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3Iobyl7dGhpcy5wYXJzZXJPcHRpb25zPW8sdGhpcy5jb2x1bW5Gb3JtYXR0ZXI9bmV3IG0uQ29sdW1uRm9ybWF0dGVyKG8pfXBhcnNlKG8pe2lmKCFvLmhhc01vcmVDaGFyYWN0ZXJzKXJldHVybiBudWxsO2NvbnN0IHI9by5jdXJzb3Ise2ZvdW5kQ2xvc2luZ1F1b3RlOnQsY29sOmV9PXRoaXMuZ2F0aGVyRGF0YUJldHdlZW5RdW90ZXMobyk7aWYoIXQpe2lmKG8uYWR2YW5jZVRvKHIpLCFvLmhhc01vcmVEYXRhKXRocm93IG5ldyBFcnJvcihgUGFyc2UgRXJyb3I6IG1pc3NpbmcgY2xvc2luZzogJyR7dGhpcy5wYXJzZXJPcHRpb25zLnF1b3RlfHwiIn0nIGluIGxpbmU6IGF0ICcke28ubGluZUZyb21DdXJzb3IucmVwbGFjZSgvW1xyXG5dL2csIlxcbiciKX0nYCk7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuY2hlY2tGb3JNYWxmb3JtZWRDb2x1bW4obyksZX1nYXRoZXJEYXRhQmV0d2VlblF1b3RlcyhvKXtjb25zdHtwYXJzZXJPcHRpb25zOnJ9PXRoaXM7bGV0IHQ9ITEsZT0hMTtjb25zdCBsPVtdO2xldCBuPW8ubmV4dENoYXJhY3RlclRva2VuO2Zvcig7IWUmJm4hPT1udWxsO249by5uZXh0Q2hhcmFjdGVyVG9rZW4pe2NvbnN0IGk9cy5Ub2tlbi5pc1Rva2VuUXVvdGUobixyKTtpZighdCYmaSl0PSEwO2Vsc2UgaWYodClpZihzLlRva2VuLmlzVG9rZW5Fc2NhcGVDaGFyYWN0ZXIobixyKSl7by5hZHZhbmNlUGFzdFRva2VuKG4pO2NvbnN0IGY9by5uZXh0Q2hhcmFjdGVyVG9rZW47ZiE9PW51bGwmJihzLlRva2VuLmlzVG9rZW5RdW90ZShmLHIpfHxzLlRva2VuLmlzVG9rZW5Fc2NhcGVDaGFyYWN0ZXIoZixyKSk/KGwucHVzaChmLnRva2VuKSxuPWYpOmk/ZT0hMDpsLnB1c2gobi50b2tlbil9ZWxzZSBpP2U9ITA6bC5wdXNoKG4udG9rZW4pO28uYWR2YW5jZVBhc3RUb2tlbihuKX1yZXR1cm57Y29sOnRoaXMuY29sdW1uRm9ybWF0dGVyLmZvcm1hdChsLmpvaW4oIiIpKSxmb3VuZENsb3NpbmdRdW90ZTplfX1jaGVja0Zvck1hbGZvcm1lZENvbHVtbihvKXtjb25zdHtwYXJzZXJPcHRpb25zOnJ9PXRoaXMse25leHROb25TcGFjZVRva2VuOnR9PW87aWYodCl7Y29uc3QgZT1zLlRva2VuLmlzVG9rZW5EZWxpbWl0ZXIodCxyKSxsPXMuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcih0KTtpZighZSYmIWwpe2NvbnN0IG49by5saW5lRnJvbUN1cnNvci5zdWJzdHIoMCwxMCkucmVwbGFjZSgvW1xyXG5dL2csIlxcbiciKTt0aHJvdyBuZXcgRXJyb3IoYFBhcnNlIEVycm9yOiBleHBlY3RlZDogJyR7ci5lc2NhcGVkRGVsaW1pdGVyfScgT1IgbmV3IGxpbmUgZ290OiAnJHt0LnRva2VufScuIGF0ICcke259YCl9by5hZHZhbmNlVG9Ub2tlbih0KX1lbHNlIG8uaGFzTW9yZURhdGF8fG8uYWR2YW5jZVBhc3RMaW5lKCl9fX0seyIuLi9Ub2tlbiI6MTU5LCIuL0NvbHVtbkZvcm1hdHRlciI6MTYwfV0sMTY0OltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuQ29sdW1uRm9ybWF0dGVyPWsuUXVvdGVkQ29sdW1uUGFyc2VyPWsuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPWsuQ29sdW1uUGFyc2VyPXZvaWQgMDt2YXIgbT1hKCIuL0NvbHVtblBhcnNlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJDb2x1bW5QYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLkNvbHVtblBhcnNlcn19KTt2YXIgcz1hKCIuL05vblF1b3RlZENvbHVtblBhcnNlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLk5vblF1b3RlZENvbHVtblBhcnNlcn19KTt2YXIgbz1hKCIuL1F1b3RlZENvbHVtblBhcnNlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJRdW90ZWRDb2x1bW5QYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLlF1b3RlZENvbHVtblBhcnNlcn19KTt2YXIgcj1hKCIuL0NvbHVtbkZvcm1hdHRlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJDb2x1bW5Gb3JtYXR0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByLkNvbHVtbkZvcm1hdHRlcn19KX0seyIuL0NvbHVtbkZvcm1hdHRlciI6MTYwLCIuL0NvbHVtblBhcnNlciI6MTYxLCIuL05vblF1b3RlZENvbHVtblBhcnNlciI6MTYyLCIuL1F1b3RlZENvbHVtblBhcnNlciI6MTYzfV0sMTY1OltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuUXVvdGVkQ29sdW1uUGFyc2VyPWsuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPWsuQ29sdW1uUGFyc2VyPWsuVG9rZW49ay5TY2FubmVyPWsuUm93UGFyc2VyPWsuUGFyc2VyPXZvaWQgMDt2YXIgbT1hKCIuL1BhcnNlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJQYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLlBhcnNlcn19KTt2YXIgcz1hKCIuL1Jvd1BhcnNlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJSb3dQYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlJvd1BhcnNlcn19KTt2YXIgbz1hKCIuL1NjYW5uZXIiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiU2Nhbm5lciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uU2Nhbm5lcn19KTt2YXIgcj1hKCIuL1Rva2VuIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIlRva2VuIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5Ub2tlbn19KTt2YXIgdD1hKCIuL2NvbHVtbiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJDb2x1bW5QYXJzZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LkNvbHVtblBhcnNlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiTm9uUXVvdGVkQ29sdW1uUGFyc2VyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5Ob25RdW90ZWRDb2x1bW5QYXJzZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssIlF1b3RlZENvbHVtblBhcnNlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuUXVvdGVkQ29sdW1uUGFyc2VyfX0pfSx7Ii4vUGFyc2VyIjoxNTYsIi4vUm93UGFyc2VyIjoxNTcsIi4vU2Nhbm5lciI6MTU4LCIuL1Rva2VuIjoxNTksIi4vY29sdW1uIjoxNjR9XSwxNjY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLkhlYWRlclRyYW5zZm9ybWVyPXZvaWQgMDtjb25zdCBzPW0oYSgibG9kYXNoLmlzdW5kZWZpbmVkIikpLG89bShhKCJsb2Rhc2guaXNmdW5jdGlvbiIpKSxyPW0oYSgibG9kYXNoLnVuaXEiKSksdD1tKGEoImxvZGFzaC5ncm91cGJ5IikpO2suSGVhZGVyVHJhbnNmb3JtZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5oZWFkZXJzPW51bGwsdGhpcy5yZWNlaXZlZEhlYWRlcnM9ITEsdGhpcy5zaG91bGRVc2VGaXJzdFJvdz0hMSx0aGlzLnByb2Nlc3NlZEZpcnN0Um93PSExLHRoaXMuaGVhZGVyc0xlbmd0aD0wLHRoaXMucGFyc2VyT3B0aW9ucz1lLGUuaGVhZGVycz09PSEwP3RoaXMuc2hvdWxkVXNlRmlyc3RSb3c9ITA6QXJyYXkuaXNBcnJheShlLmhlYWRlcnMpP3RoaXMuc2V0SGVhZGVycyhlLmhlYWRlcnMpOm8uZGVmYXVsdChlLmhlYWRlcnMpJiYodGhpcy5oZWFkZXJzVHJhbnNmb3JtPWUuaGVhZGVycyl9dHJhbnNmb3JtKGUsbCl7cmV0dXJuIHRoaXMuc2hvdWxkTWFwUm93KGUpP2wobnVsbCx0aGlzLnByb2Nlc3NSb3coZSkpOmwobnVsbCx7cm93Om51bGwsaXNWYWxpZDohMH0pfXNob3VsZE1hcFJvdyhlKXtjb25zdHtwYXJzZXJPcHRpb25zOmx9PXRoaXM7aWYoIXRoaXMuaGVhZGVyc1RyYW5zZm9ybSYmbC5yZW5hbWVIZWFkZXJzJiYhdGhpcy5wcm9jZXNzZWRGaXJzdFJvdyl7aWYoIXRoaXMucmVjZWl2ZWRIZWFkZXJzKXRocm93IG5ldyBFcnJvcigiRXJyb3IgcmVuYW1pbmcgaGVhZGVyczogbmV3IGhlYWRlcnMgbXVzdCBiZSBwcm92aWRlZCBpbiBhbiBhcnJheSIpO3JldHVybiB0aGlzLnByb2Nlc3NlZEZpcnN0Um93PSEwLCExfWlmKCF0aGlzLnJlY2VpdmVkSGVhZGVycyYmQXJyYXkuaXNBcnJheShlKSl7aWYodGhpcy5oZWFkZXJzVHJhbnNmb3JtKXRoaXMuc2V0SGVhZGVycyh0aGlzLmhlYWRlcnNUcmFuc2Zvcm0oZSkpO2Vsc2V7aWYoIXRoaXMuc2hvdWxkVXNlRmlyc3RSb3cpcmV0dXJuITA7dGhpcy5zZXRIZWFkZXJzKGUpfXJldHVybiExfXJldHVybiEwfXByb2Nlc3NSb3coZSl7aWYoIXRoaXMuaGVhZGVycylyZXR1cm57cm93OmUsaXNWYWxpZDohMH07Y29uc3R7cGFyc2VyT3B0aW9uczpsfT10aGlzO2lmKCFsLmRpc2NhcmRVbm1hcHBlZENvbHVtbnMmJmUubGVuZ3RoPnRoaXMuaGVhZGVyc0xlbmd0aCl7aWYoIWwuc3RyaWN0Q29sdW1uSGFuZGxpbmcpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEVycm9yOiBjb2x1bW4gaGVhZGVyIG1pc21hdGNoIGV4cGVjdGVkOiAke3RoaXMuaGVhZGVyc0xlbmd0aH0gY29sdW1ucyBnb3Q6ICR7ZS5sZW5ndGh9YCk7cmV0dXJue3JvdzplLGlzVmFsaWQ6ITEscmVhc29uOmBDb2x1bW4gaGVhZGVyIG1pc21hdGNoIGV4cGVjdGVkOiAke3RoaXMuaGVhZGVyc0xlbmd0aH0gY29sdW1ucyBnb3Q6ICR7ZS5sZW5ndGh9YH19cmV0dXJuIGwuc3RyaWN0Q29sdW1uSGFuZGxpbmcmJmUubGVuZ3RoPHRoaXMuaGVhZGVyc0xlbmd0aD97cm93OmUsaXNWYWxpZDohMSxyZWFzb246YENvbHVtbiBoZWFkZXIgbWlzbWF0Y2ggZXhwZWN0ZWQ6ICR7dGhpcy5oZWFkZXJzTGVuZ3RofSBjb2x1bW5zIGdvdDogJHtlLmxlbmd0aH1gfTp7cm93OnRoaXMubWFwSGVhZGVycyhlKSxpc1ZhbGlkOiEwfX1tYXBIZWFkZXJzKGUpe2NvbnN0IGw9e30se2hlYWRlcnM6bixoZWFkZXJzTGVuZ3RoOml9PXRoaXM7Zm9yKGxldCBmPTA7ZjxpO2YrPTEpe2NvbnN0IGM9bltmXTtpZighcy5kZWZhdWx0KGMpKXtjb25zdCB1PWVbZl07cy5kZWZhdWx0KHUpP2xbY109IiI6bFtjXT11fX1yZXR1cm4gbH1zZXRIZWFkZXJzKGUpe3ZhciBsO2NvbnN0IG49ZS5maWx0ZXIoaT0+ISFpKTtpZihyLmRlZmF1bHQobikubGVuZ3RoIT09bi5sZW5ndGgpe2NvbnN0IGk9dC5kZWZhdWx0KG4pLGY9T2JqZWN0LmtleXMoaSkuZmlsdGVyKGM9PmlbY10ubGVuZ3RoPjEpO3Rocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIGhlYWRlcnMgZm91bmQgIitKU09OLnN0cmluZ2lmeShmKSl9dGhpcy5oZWFkZXJzPWUsdGhpcy5yZWNlaXZlZEhlYWRlcnM9ITAsdGhpcy5oZWFkZXJzTGVuZ3RoPSgobD10aGlzLmhlYWRlcnMpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5sZW5ndGgpfHwwfX19LHsibG9kYXNoLmdyb3VwYnkiOjQ0MywibG9kYXNoLmlzZnVuY3Rpb24iOjQ0NiwibG9kYXNoLmlzdW5kZWZpbmVkIjo0NDgsImxvZGFzaC51bmlxIjo0NDl9XSwxNjc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yPXZvaWQgMDtjb25zdCBzPW0oYSgibG9kYXNoLmlzZnVuY3Rpb24iKSksbz1hKCIuLi90eXBlcyIpO2NsYXNzIHJ7Y29uc3RydWN0b3IoKXt0aGlzLl9yb3dUcmFuc2Zvcm09bnVsbCx0aGlzLl9yb3dWYWxpZGF0b3I9bnVsbH1zdGF0aWMgY3JlYXRlVHJhbnNmb3JtKGUpe3JldHVybiBvLmlzU3luY1RyYW5zZm9ybShlKT8obCxuKT0+e2xldCBpPW51bGw7dHJ5e2k9ZShsKX1jYXRjaChmKXtyZXR1cm4gbihmKX1yZXR1cm4gbihudWxsLGkpfTplfXN0YXRpYyBjcmVhdGVWYWxpZGF0b3IoZSl7cmV0dXJuIG8uaXNTeW5jVmFsaWRhdGUoZSk/KGwsbik9PntuKG51bGwse3JvdzpsLGlzVmFsaWQ6ZShsKX0pfToobCxuKT0+e2UobCwoaSxmLGMpPT5pP24oaSk6bihudWxsLGY/e3JvdzpsLGlzVmFsaWQ6ZixyZWFzb246Y306e3JvdzpsLGlzVmFsaWQ6ITEscmVhc29uOmN9KSl9fXNldCByb3dUcmFuc2Zvcm0oZSl7aWYoIXMuZGVmYXVsdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdHJhbnNmb3JtIHNob3VsZCBiZSBhIGZ1bmN0aW9uIik7dGhpcy5fcm93VHJhbnNmb3JtPXIuY3JlYXRlVHJhbnNmb3JtKGUpfXNldCByb3dWYWxpZGF0b3IoZSl7aWYoIXMuZGVmYXVsdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgdmFsaWRhdGUgc2hvdWxkIGJlIGEgZnVuY3Rpb24iKTt0aGlzLl9yb3dWYWxpZGF0b3I9ci5jcmVhdGVWYWxpZGF0b3IoZSl9dHJhbnNmb3JtQW5kVmFsaWRhdGUoZSxsKXtyZXR1cm4gdGhpcy5jYWxsVHJhbnNmb3JtZXIoZSwobixpKT0+bj9sKG4pOmk/dGhpcy5jYWxsVmFsaWRhdG9yKGksKGYsYyk9PmY/bChmKTpjJiYhYy5pc1ZhbGlkP2wobnVsbCx7cm93OmksaXNWYWxpZDohMSxyZWFzb246Yy5yZWFzb259KTpsKG51bGwse3JvdzppLGlzVmFsaWQ6ITB9KSk6bChudWxsLHtyb3c6bnVsbCxpc1ZhbGlkOiEwfSkpfWNhbGxUcmFuc2Zvcm1lcihlLGwpe3JldHVybiB0aGlzLl9yb3dUcmFuc2Zvcm0/dGhpcy5fcm93VHJhbnNmb3JtKGUsbCk6bChudWxsLGUpfWNhbGxWYWxpZGF0b3IoZSxsKXtyZXR1cm4gdGhpcy5fcm93VmFsaWRhdG9yP3RoaXMuX3Jvd1ZhbGlkYXRvcihlLGwpOmwobnVsbCx7cm93OmUsaXNWYWxpZDohMH0pfX1rLlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yPXJ9LHsiLi4vdHlwZXMiOjE2OSwibG9kYXNoLmlzZnVuY3Rpb24iOjQ0Nn1dLDE2ODpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLkhlYWRlclRyYW5zZm9ybWVyPWsuUm93VHJhbnNmb3JtZXJWYWxpZGF0b3I9dm9pZCAwO3ZhciBtPWEoIi4vUm93VHJhbnNmb3JtZXJWYWxpZGF0b3IiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiUm93VHJhbnNmb3JtZXJWYWxpZGF0b3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yfX0pO3ZhciBzPWEoIi4vSGVhZGVyVHJhbnNmb3JtZXIiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiSGVhZGVyVHJhbnNmb3JtZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLkhlYWRlclRyYW5zZm9ybWVyfX0pfSx7Ii4vSGVhZGVyVHJhbnNmb3JtZXIiOjE2NiwiLi9Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvciI6MTY3fV0sMTY5OltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuaXNTeW5jVmFsaWRhdGU9ay5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLGsuaXNTeW5jVHJhbnNmb3JtPW09Pm0ubGVuZ3RoPT09MSxrLmlzU3luY1ZhbGlkYXRlPW09Pm0ubGVuZ3RoPT09MX0se31dLDE3MDpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09azttLmJpZ251bT1hKCJibi5qcyIpLG0uZGVmaW5lPWEoIi4vYXNuMS9hcGkiKS5kZWZpbmUsbS5iYXNlPWEoIi4vYXNuMS9iYXNlIiksbS5jb25zdGFudHM9YSgiLi9hc24xL2NvbnN0YW50cyIpLG0uZGVjb2RlcnM9YSgiLi9hc24xL2RlY29kZXJzIiksbS5lbmNvZGVycz1hKCIuL2FzbjEvZW5jb2RlcnMiKX0seyIuL2FzbjEvYXBpIjoxNzEsIi4vYXNuMS9iYXNlIjoxNzMsIi4vYXNuMS9jb25zdGFudHMiOjE3NywiLi9hc24xL2RlY29kZXJzIjoxNzksIi4vYXNuMS9lbmNvZGVycyI6MTgyLCJibi5qcyI6MTg0fV0sMTcxOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuL2VuY29kZXJzIikscz1hKCIuL2RlY29kZXJzIiksbz1hKCJpbmhlcml0cyIpO2Z1bmN0aW9uIHIodCxlKXt0aGlzLm5hbWU9dCx0aGlzLmJvZHk9ZSx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319ay5kZWZpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHIodCxlKX0sci5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKHQpe2NvbnN0IGU9dGhpcy5uYW1lO2Z1bmN0aW9uIGwobil7dGhpcy5faW5pdE5hbWVkKG4sZSl9cmV0dXJuIG8obCx0KSxsLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKG4saSl7dC5jYWxsKHRoaXMsbixpKX0sbmV3IGwodGhpcyl9LHIucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fCJkZXIiLHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmRlY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKHNbdF0pKSx0aGlzLmRlY29kZXJzW3RdfSxyLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlLGwpe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKGUpLmRlY29kZSh0LGwpfSxyLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHwiZGVyIix0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5lbmNvZGVyc1t0XT10aGlzLl9jcmVhdGVOYW1lZChtW3RdKSksdGhpcy5lbmNvZGVyc1t0XX0sci5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSxsKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihlKS5lbmNvZGUodCxsKX19LHsiLi9kZWNvZGVycyI6MTc5LCIuL2VuY29kZXJzIjoxODIsaW5oZXJpdHM6NDQwfV0sMTcyOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCJpbmhlcml0cyIpLHM9YSgiLi4vYmFzZS9yZXBvcnRlciIpLlJlcG9ydGVyLG89YSgic2FmZXItYnVmZmVyIikuQnVmZmVyO2Z1bmN0aW9uIHIoZSxsKXtzLmNhbGwodGhpcyxsKSxvLmlzQnVmZmVyKGUpPyh0aGlzLmJhc2U9ZSx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPWUubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gdChlLGwpe2lmKEFycmF5LmlzQXJyYXkoZSkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPWUubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0LmlzRW5jb2RlckJ1ZmZlcihuKXx8KG49bmV3IHQobixsKSksdGhpcy5sZW5ndGgrPW4ubGVuZ3RoLG59LHRoaXMpO2Vsc2UgaWYodHlwZW9mIGU9PSJudW1iZXIiKXtpZighKDA8PWUmJmU8PTI1NSkpcmV0dXJuIGwuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPWUsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKHR5cGVvZiBlPT0ic3RyaW5nIil0aGlzLnZhbHVlPWUsdGhpcy5sZW5ndGg9by5ieXRlTGVuZ3RoKGUpO2Vsc2V7aWYoIW8uaXNCdWZmZXIoZSkpcmV0dXJuIGwuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIGUpO3RoaXMudmFsdWU9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aH19bShyLHMpLGsuRGVjb2RlckJ1ZmZlcj1yLHIuaXNEZWNvZGVyQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygcj8hMDp0eXBlb2YgZT09Im9iamVjdCImJm8uaXNCdWZmZXIoZS5iYXNlKSYmZS5jb25zdHJ1Y3Rvci5uYW1lPT09IkRlY29kZXJCdWZmZXIiJiZ0eXBlb2YgZS5vZmZzZXQ9PSJudW1iZXIiJiZ0eXBlb2YgZS5sZW5ndGg9PSJudW1iZXIiJiZ0eXBlb2YgZS5zYXZlPT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS5yZXN0b3JlPT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS5pc0VtcHR5PT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS5yZWFkVUludDg9PSJmdW5jdGlvbiImJnR5cGVvZiBlLnNraXA9PSJmdW5jdGlvbiImJnR5cGVvZiBlLnJhdz09ImZ1bmN0aW9uIn0sci5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6cy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sci5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXtjb25zdCBsPW5ldyByKHRoaXMuYmFzZSk7cmV0dXJuIGwub2Zmc2V0PWUub2Zmc2V0LGwubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PWUub2Zmc2V0LHMucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLGUucmVwb3J0ZXIpLGx9LHIucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoZXx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxyLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKGUsbCl7aWYoISh0aGlzLm9mZnNldCtlPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IobHx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO2NvbnN0IG49bmV3IHIodGhpcy5iYXNlKTtyZXR1cm4gbi5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLG4ub2Zmc2V0PXRoaXMub2Zmc2V0LG4ubGVuZ3RoPXRoaXMub2Zmc2V0K2UsdGhpcy5vZmZzZXQrPWUsbn0sci5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoZT9lLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LGsuRW5jb2RlckJ1ZmZlcj10LHQuaXNFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdD8hMDp0eXBlb2YgZT09Im9iamVjdCImJmUuY29uc3RydWN0b3IubmFtZT09PSJFbmNvZGVyQnVmZmVyIiYmdHlwZW9mIGUubGVuZ3RoPT0ibnVtYmVyIiYmdHlwZW9mIGUuam9pbj09ImZ1bmN0aW9uIn0sdC5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihlLGwpe3JldHVybiBlfHwoZT1vLmFsbG9jKHRoaXMubGVuZ3RoKSksbHx8KGw9MCksdGhpcy5sZW5ndGg9PT0wfHwoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24obil7bi5qb2luKGUsbCksbCs9bi5sZW5ndGh9KToodHlwZW9mIHRoaXMudmFsdWU9PSJudW1iZXIiP2VbbF09dGhpcy52YWx1ZTp0eXBlb2YgdGhpcy52YWx1ZT09InN0cmluZyI/ZS53cml0ZSh0aGlzLnZhbHVlLGwpOm8uaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weShlLGwpLGwrPXRoaXMubGVuZ3RoKSksZX19LHsiLi4vYmFzZS9yZXBvcnRlciI6MTc1LGluaGVyaXRzOjQ0MCwic2FmZXItYnVmZmVyIjo0OTV9XSwxNzM6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWs7bS5SZXBvcnRlcj1hKCIuL3JlcG9ydGVyIikuUmVwb3J0ZXIsbS5EZWNvZGVyQnVmZmVyPWEoIi4vYnVmZmVyIikuRGVjb2RlckJ1ZmZlcixtLkVuY29kZXJCdWZmZXI9YSgiLi9idWZmZXIiKS5FbmNvZGVyQnVmZmVyLG0uTm9kZT1hKCIuL25vZGUiKX0seyIuL2J1ZmZlciI6MTcyLCIuL25vZGUiOjE3NCwiLi9yZXBvcnRlciI6MTc1fV0sMTc0OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCIuLi9iYXNlL3JlcG9ydGVyIikuUmVwb3J0ZXIscz1hKCIuLi9iYXNlL2J1ZmZlciIpLkVuY29kZXJCdWZmZXIsbz1hKCIuLi9iYXNlL2J1ZmZlciIpLkRlY29kZXJCdWZmZXIscj1hKCJtaW5pbWFsaXN0aWMtYXNzZXJ0IiksdD1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLGU9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdCh0KTtmdW5jdGlvbiBsKGksZixjKXtjb25zdCB1PXt9O3RoaXMuX2Jhc2VTdGF0ZT11LHUubmFtZT1jLHUuZW5jPWksdS5wYXJlbnQ9Znx8bnVsbCx1LmNoaWxkcmVuPW51bGwsdS50YWc9bnVsbCx1LmFyZ3M9bnVsbCx1LnJldmVyc2VBcmdzPW51bGwsdS5jaG9pY2U9bnVsbCx1Lm9wdGlvbmFsPSExLHUuYW55PSExLHUub2JqPSExLHUudXNlPW51bGwsdS51c2VEZWNvZGVyPW51bGwsdS5rZXk9bnVsbCx1LmRlZmF1bHQ9bnVsbCx1LmV4cGxpY2l0PW51bGwsdS5pbXBsaWNpdD1udWxsLHUuY29udGFpbnM9bnVsbCx1LnBhcmVudHx8KHUuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1FLmV4cG9ydHM9bDtjb25zdCBuPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07bC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBpPXRoaXMuX2Jhc2VTdGF0ZSxmPXt9O24uZm9yRWFjaChmdW5jdGlvbih1KXtmW3VdPWlbdV19KTtjb25zdCBjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGYucGFyZW50KTtyZXR1cm4gYy5fYmFzZVN0YXRlPWYsY30sbC5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBpPXRoaXMuX2Jhc2VTdGF0ZTtlLmZvckVhY2goZnVuY3Rpb24oZil7dGhpc1tmXT1mdW5jdGlvbigpe2NvbnN0IGM9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIGkuY2hpbGRyZW4ucHVzaChjKSxjW2ZdLmFwcGx5KGMsYXJndW1lbnRzKX19LHRoaXMpfSxsLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihpKXtjb25zdCBmPXRoaXMuX2Jhc2VTdGF0ZTtyKGYucGFyZW50PT09bnVsbCksaS5jYWxsKHRoaXMpLGYuY2hpbGRyZW49Zi5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGMuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxyLmVxdWFsKGYuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxsLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihpKXtjb25zdCBmPXRoaXMuX2Jhc2VTdGF0ZSxjPWkuZmlsdGVyKGZ1bmN0aW9uKHUpe3JldHVybiB1IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7aT1pLmZpbHRlcihmdW5jdGlvbih1KXtyZXR1cm4hKHUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksYy5sZW5ndGghPT0wJiYocihmLmNoaWxkcmVuPT09bnVsbCksZi5jaGlsZHJlbj1jLGMuZm9yRWFjaChmdW5jdGlvbih1KXt1Ll9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSxpLmxlbmd0aCE9PTAmJihyKGYuYXJncz09PW51bGwpLGYuYXJncz1pLGYucmV2ZXJzZUFyZ3M9aS5tYXAoZnVuY3Rpb24odSl7aWYodHlwZW9mIHUhPSJvYmplY3QifHx1LmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiB1O2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5rZXlzKHUpLmZvckVhY2goZnVuY3Rpb24oaCl7aD09KDB8aCkmJihofD0wKTtjb25zdCB3PXVbaF07ZFt3XT1ofSksZH0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJfZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oaSl7bC5wcm90b3R5cGVbaV09ZnVuY3Rpb24oKXtjb25zdCBmPXRoaXMuX2Jhc2VTdGF0ZTt0aHJvdyBuZXcgRXJyb3IoaSsiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrZi5lbmMpfX0pLHQuZm9yRWFjaChmdW5jdGlvbihpKXtsLnByb3RvdHlwZVtpXT1mdW5jdGlvbigpe2NvbnN0IGY9dGhpcy5fYmFzZVN0YXRlLGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gcihmLnRhZz09PW51bGwpLGYudGFnPWksdGhpcy5fdXNlQXJncyhjKSx0aGlzfX0pLGwucHJvdG90eXBlLnVzZT1mdW5jdGlvbihpKXtyKGkpO2NvbnN0IGY9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByKGYudXNlPT09bnVsbCksZi51c2U9aSx0aGlzfSxsLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sbC5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKGkpe2NvbnN0IGY9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByKGYuZGVmYXVsdD09PW51bGwpLGYuZGVmYXVsdD1pLGYub3B0aW9uYWw9ITAsdGhpc30sbC5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oaSl7Y29uc3QgZj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHIoZi5leHBsaWNpdD09PW51bGwmJmYuaW1wbGljaXQ9PT1udWxsKSxmLmV4cGxpY2l0PWksdGhpc30sbC5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oaSl7Y29uc3QgZj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHIoZi5leHBsaWNpdD09PW51bGwmJmYuaW1wbGljaXQ9PT1udWxsKSxmLmltcGxpY2l0PWksdGhpc30sbC5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7Y29uc3QgaT10aGlzLl9iYXNlU3RhdGUsZj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBpLm9iaj0hMCxmLmxlbmd0aCE9PTAmJnRoaXMuX3VzZUFyZ3MoZiksdGhpc30sbC5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKGkpe2NvbnN0IGY9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByKGYua2V5PT09bnVsbCksZi5rZXk9aSx0aGlzfSxsLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxsLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oaSl7Y29uc3QgZj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHIoZi5jaG9pY2U9PT1udWxsKSxmLmNob2ljZT1pLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoaSkubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBpW2NdfSkpLHRoaXN9LGwucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGkpe2NvbnN0IGY9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByKGYudXNlPT09bnVsbCksZi5jb250YWlucz1pLHRoaXN9LGwucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oaSxmKXtjb25zdCBjPXRoaXMuX2Jhc2VTdGF0ZTtpZihjLnBhcmVudD09PW51bGwpcmV0dXJuIGkud3JhcFJlc3VsdChjLmNoaWxkcmVuWzBdLl9kZWNvZGUoaSxmKSk7bGV0IHUsZD1jLmRlZmF1bHQsaD0hMCx3PW51bGw7aWYoYy5rZXkhPT1udWxsJiYodz1pLmVudGVyS2V5KGMua2V5KSksYy5vcHRpb25hbCl7bGV0IF89bnVsbDtpZihjLmV4cGxpY2l0IT09bnVsbD9fPWMuZXhwbGljaXQ6Yy5pbXBsaWNpdCE9PW51bGw/Xz1jLmltcGxpY2l0OmMudGFnIT09bnVsbCYmKF89Yy50YWcpLF8hPT1udWxsfHxjLmFueSl7aWYoaD10aGlzLl9wZWVrVGFnKGksXyxjLmFueSksaS5pc0Vycm9yKGgpKXJldHVybiBofWVsc2V7Y29uc3QgQT1pLnNhdmUoKTt0cnl7Yy5jaG9pY2U9PT1udWxsP3RoaXMuX2RlY29kZUdlbmVyaWMoYy50YWcsaSxmKTp0aGlzLl9kZWNvZGVDaG9pY2UoaSxmKSxoPSEwfWNhdGNoe2g9ITF9aS5yZXN0b3JlKEEpfX1pZihjLm9iaiYmaCYmKHU9aS5lbnRlck9iamVjdCgpKSxoKXtpZihjLmV4cGxpY2l0IT09bnVsbCl7Y29uc3QgQT10aGlzLl9kZWNvZGVUYWcoaSxjLmV4cGxpY2l0KTtpZihpLmlzRXJyb3IoQSkpcmV0dXJuIEE7aT1BfWNvbnN0IF89aS5vZmZzZXQ7aWYoYy51c2U9PT1udWxsJiZjLmNob2ljZT09PW51bGwpe2xldCBBO2MuYW55JiYoQT1pLnNhdmUoKSk7Y29uc3QgUD10aGlzLl9kZWNvZGVUYWcoaSxjLmltcGxpY2l0IT09bnVsbD9jLmltcGxpY2l0OmMudGFnLGMuYW55KTtpZihpLmlzRXJyb3IoUCkpcmV0dXJuIFA7Yy5hbnk/ZD1pLnJhdyhBKTppPVB9aWYoZiYmZi50cmFjayYmYy50YWchPT1udWxsJiZmLnRyYWNrKGkucGF0aCgpLF8saS5sZW5ndGgsInRhZ2dlZCIpLGYmJmYudHJhY2smJmMudGFnIT09bnVsbCYmZi50cmFjayhpLnBhdGgoKSxpLm9mZnNldCxpLmxlbmd0aCwiY29udGVudCIpLGMuYW55fHwoZD1jLmNob2ljZT09PW51bGw/dGhpcy5fZGVjb2RlR2VuZXJpYyhjLnRhZyxpLGYpOnRoaXMuX2RlY29kZUNob2ljZShpLGYpKSxpLmlzRXJyb3IoZCkpcmV0dXJuIGQ7aWYoYy5hbnl8fGMuY2hvaWNlIT09bnVsbHx8Yy5jaGlsZHJlbj09PW51bGx8fGMuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihBKXtBLl9kZWNvZGUoaSxmKX0pLGMuY29udGFpbnMmJihjLnRhZz09PSJvY3RzdHIifHxjLnRhZz09PSJiaXRzdHIiKSl7Y29uc3QgQT1uZXcgbyhkKTtkPXRoaXMuX2dldFVzZShjLmNvbnRhaW5zLGkuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKEEsZil9fXJldHVybiBjLm9iaiYmaCYmKGQ9aS5sZWF2ZU9iamVjdCh1KSksYy5rZXk9PT1udWxsfHxkPT09bnVsbCYmaCE9PSEwP3chPT1udWxsJiZpLmV4aXRLZXkodyk6aS5sZWF2ZUtleSh3LGMua2V5LGQpLGR9LGwucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKGksZixjKXtjb25zdCB1PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gaT09PSJzZXEifHxpPT09InNldCI/bnVsbDppPT09InNlcW9mInx8aT09PSJzZXRvZiI/dGhpcy5fZGVjb2RlTGlzdChmLGksdS5hcmdzWzBdLGMpOi9zdHIkLy50ZXN0KGkpP3RoaXMuX2RlY29kZVN0cihmLGksYyk6aT09PSJvYmppZCImJnUuYXJncz90aGlzLl9kZWNvZGVPYmppZChmLHUuYXJnc1swXSx1LmFyZ3NbMV0sYyk6aT09PSJvYmppZCI/dGhpcy5fZGVjb2RlT2JqaWQoZixudWxsLG51bGwsYyk6aT09PSJnZW50aW1lInx8aT09PSJ1dGN0aW1lIj90aGlzLl9kZWNvZGVUaW1lKGYsaSxjKTppPT09Im51bGxfIj90aGlzLl9kZWNvZGVOdWxsKGYsYyk6aT09PSJib29sIj90aGlzLl9kZWNvZGVCb29sKGYsYyk6aT09PSJvYmpEZXNjIj90aGlzLl9kZWNvZGVTdHIoZixpLGMpOmk9PT0iaW50Inx8aT09PSJlbnVtIj90aGlzLl9kZWNvZGVJbnQoZix1LmFyZ3MmJnUuYXJnc1swXSxjKTp1LnVzZSE9PW51bGw/dGhpcy5fZ2V0VXNlKHUudXNlLGYuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGYsYyk6Zi5lcnJvcigidW5rbm93biB0YWc6ICIraSl9LGwucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oaSxmKXtjb25zdCBjPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gYy51c2VEZWNvZGVyPXRoaXMuX3VzZShpLGYpLHIoYy51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50PT09bnVsbCksYy51c2VEZWNvZGVyPWMudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLGMuaW1wbGljaXQhPT1jLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKGMudXNlRGVjb2Rlcj1jLnVzZURlY29kZXIuY2xvbmUoKSxjLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1jLmltcGxpY2l0KSxjLnVzZURlY29kZXJ9LGwucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oaSxmKXtjb25zdCBjPXRoaXMuX2Jhc2VTdGF0ZTtsZXQgdT1udWxsLGQ9ITE7cmV0dXJuIE9iamVjdC5rZXlzKGMuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKGgpe2NvbnN0IHc9aS5zYXZlKCksXz1jLmNob2ljZVtoXTt0cnl7Y29uc3QgQT1fLl9kZWNvZGUoaSxmKTtpZihpLmlzRXJyb3IoQSkpcmV0dXJuITE7dT17dHlwZTpoLHZhbHVlOkF9LGQ9ITB9Y2F0Y2h7cmV0dXJuIGkucmVzdG9yZSh3KSwhMX1yZXR1cm4hMH0sdGhpcyksZD91OmkuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxsLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHMoaSx0aGlzLnJlcG9ydGVyKX0sbC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihpLGYsYyl7Y29uc3QgdT10aGlzLl9iYXNlU3RhdGU7aWYodS5kZWZhdWx0IT09bnVsbCYmdS5kZWZhdWx0PT09aSlyZXR1cm47Y29uc3QgZD10aGlzLl9lbmNvZGVWYWx1ZShpLGYsYyk7cmV0dXJuIGQ9PT12b2lkIDB8fHRoaXMuX3NraXBEZWZhdWx0KGQsZixjKT92b2lkIDA6ZH0sbC5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKGksZixjKXtjb25zdCB1PXRoaXMuX2Jhc2VTdGF0ZTtpZih1LnBhcmVudD09PW51bGwpcmV0dXJuIHUuY2hpbGRyZW5bMF0uX2VuY29kZShpLGZ8fG5ldyBtKTtsZXQgZD1udWxsO2lmKHRoaXMucmVwb3J0ZXI9Zix1Lm9wdGlvbmFsJiZpPT09dm9pZCAwKXtpZih1LmRlZmF1bHQ9PT1udWxsKXJldHVybjtpPXUuZGVmYXVsdH1sZXQgaD1udWxsLHc9ITE7aWYodS5hbnkpZD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGkpO2Vsc2UgaWYodS5jaG9pY2UpZD10aGlzLl9lbmNvZGVDaG9pY2UoaSxmKTtlbHNlIGlmKHUuY29udGFpbnMpaD10aGlzLl9nZXRVc2UodS5jb250YWlucyxjKS5fZW5jb2RlKGksZiksdz0hMDtlbHNlIGlmKHUuY2hpbGRyZW4paD11LmNoaWxkcmVuLm1hcChmdW5jdGlvbihfKXtpZihfLl9iYXNlU3RhdGUudGFnPT09Im51bGxfIilyZXR1cm4gXy5fZW5jb2RlKG51bGwsZixpKTtpZihfLl9iYXNlU3RhdGUua2V5PT09bnVsbClyZXR1cm4gZi5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTtjb25zdCBBPWYuZW50ZXJLZXkoXy5fYmFzZVN0YXRlLmtleSk7aWYodHlwZW9mIGkhPSJvYmplY3QiKXJldHVybiBmLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTtjb25zdCBQPV8uX2VuY29kZShpW18uX2Jhc2VTdGF0ZS5rZXldLGYsaSk7cmV0dXJuIGYubGVhdmVLZXkoQSksUH0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKF8pe3JldHVybiBffSksaD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGgpO2Vsc2UgaWYodS50YWc9PT0ic2Vxb2YifHx1LnRhZz09PSJzZXRvZiIpe2lmKCF1LmFyZ3N8fHUuYXJncy5sZW5ndGghPT0xKXJldHVybiBmLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrdS50YWcpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBmLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7Y29uc3QgXz10aGlzLmNsb25lKCk7Xy5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsaD10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGkubWFwKGZ1bmN0aW9uKEEpe2NvbnN0IFA9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0aGlzLl9nZXRVc2UoUC5hcmdzWzBdLGkpLl9lbmNvZGUoQSxmKX0sXykpfWVsc2UgdS51c2UhPT1udWxsP2Q9dGhpcy5fZ2V0VXNlKHUudXNlLGMpLl9lbmNvZGUoaSxmKTooaD10aGlzLl9lbmNvZGVQcmltaXRpdmUodS50YWcsaSksdz0hMCk7aWYoIXUuYW55JiZ1LmNob2ljZT09PW51bGwpe2NvbnN0IF89dS5pbXBsaWNpdCE9PW51bGw/dS5pbXBsaWNpdDp1LnRhZyxBPXUuaW1wbGljaXQ9PT1udWxsPyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtfPT09bnVsbD91LnVzZT09PW51bGwmJmYuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOnUudXNlPT09bnVsbCYmKGQ9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKF8sdyxBLGgpKX1yZXR1cm4gdS5leHBsaWNpdCE9PW51bGwmJihkPXRoaXMuX2VuY29kZUNvbXBvc2l0ZSh1LmV4cGxpY2l0LCExLCJjb250ZXh0IixkKSksZH0sbC5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihpLGYpe2NvbnN0IGM9dGhpcy5fYmFzZVN0YXRlLHU9Yy5jaG9pY2VbaS50eXBlXTtyZXR1cm4gdXx8cighMSxpLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhjLmNob2ljZSkpKSx1Ll9lbmNvZGUoaS52YWx1ZSxmKX0sbC5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihpLGYpe2NvbnN0IGM9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KGkpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoZixpKTtpZihpPT09Im9iamlkIiYmYy5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChmLGMucmV2ZXJzZUFyZ3NbMF0sYy5hcmdzWzFdKTtpZihpPT09Im9iamlkIilyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZixudWxsLG51bGwpO2lmKGk9PT0iZ2VudGltZSJ8fGk9PT0idXRjdGltZSIpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoZixpKTtpZihpPT09Im51bGxfIilyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKGk9PT0iaW50Inx8aT09PSJlbnVtIilyZXR1cm4gdGhpcy5fZW5jb2RlSW50KGYsYy5hcmdzJiZjLnJldmVyc2VBcmdzWzBdKTtpZihpPT09ImJvb2wiKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKGYpO2lmKGk9PT0ib2JqRGVzYyIpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihmLGkpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK2kpfSxsLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oaSl7cmV0dXJuL15bMC05IF0qJC8udGVzdChpKX0sbC5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oaSl7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KGkpfX0seyIuLi9iYXNlL2J1ZmZlciI6MTcyLCIuLi9iYXNlL3JlcG9ydGVyIjoxNzUsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31dLDE3NTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiaW5oZXJpdHMiKTtmdW5jdGlvbiBzKHIpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpyfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIG8ocix0KXt0aGlzLnBhdGg9cix0aGlzLnJldGhyb3codCl9ay5SZXBvcnRlcj1zLHMucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBvfSxzLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7Y29uc3Qgcj10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ci5vYmoscGF0aExlbjpyLnBhdGgubGVuZ3RofX0scy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihyKXtjb25zdCB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7dC5vYmo9ci5vYmosdC5wYXRoPXQucGF0aC5zbGljZSgwLHIucGF0aExlbil9LHMucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChyKX0scy5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbihyKXtjb25zdCB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7dC5wYXRoPXQucGF0aC5zbGljZSgwLHItMSl9LHMucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHIsdCxlKXtjb25zdCBsPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHIpLGwub2JqIT09bnVsbCYmKGwub2JqW3RdPWUpfSxzLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LHMucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7Y29uc3Qgcj10aGlzLl9yZXBvcnRlclN0YXRlLHQ9ci5vYmo7cmV0dXJuIHIub2JqPXt9LHR9LHMucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHIpe2NvbnN0IHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxlPXQub2JqO3JldHVybiB0Lm9iaj1yLGV9LHMucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHIpe2xldCB0O2NvbnN0IGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxsPXIgaW5zdGFuY2VvZiBvO2lmKHQ9bD9yOm5ldyBvKGUucGF0aC5tYXAoZnVuY3Rpb24obil7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KG4pKyJdIn0pLmpvaW4oIiIpLHIubWVzc2FnZXx8cixyLnN0YWNrKSwhZS5vcHRpb25zLnBhcnRpYWwpdGhyb3cgdDtyZXR1cm4gbHx8ZS5lcnJvcnMucHVzaCh0KSx0fSxzLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKHIpe2NvbnN0IHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gdC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iocik/bnVsbDpyLGVycm9yczp0LmVycm9yc306cn0sbShvLEVycm9yKSxvLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHIpe2lmKHRoaXMubWVzc2FnZT1yKyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLG8pLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSx7aW5oZXJpdHM6NDQwfV0sMTc2OltmdW5jdGlvbihhLEUsayl7ZnVuY3Rpb24gbShzKXtjb25zdCBvPXt9O3JldHVybiBPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHIpeygwfHIpPT1yJiYocnw9MCk7Y29uc3QgdD1zW3JdO29bdF09cn0pLG99ay50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LGsudGFnQ2xhc3NCeU5hbWU9bShrLnRhZ0NsYXNzKSxrLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0say50YWdCeU5hbWU9bShrLnRhZyl9LHt9XSwxNzc6W2Z1bmN0aW9uKGEsRSxrKXtjb25zdCBtPWs7bS5fcmV2ZXJzZT1mdW5jdGlvbihzKXtjb25zdCBvPXt9O3JldHVybiBPYmplY3Qua2V5cyhzKS5mb3JFYWNoKGZ1bmN0aW9uKHIpeygwfHIpPT1yJiYocnw9MCk7Y29uc3QgdD1zW3JdO29bdF09cn0pLG99LG0uZGVyPWEoIi4vZGVyIil9LHsiLi9kZXIiOjE3Nn1dLDE3ODpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiaW5oZXJpdHMiKSxzPWEoImJuLmpzIiksbz1hKCIuLi9iYXNlL2J1ZmZlciIpLkRlY29kZXJCdWZmZXIscj1hKCIuLi9iYXNlL25vZGUiKSx0PWEoIi4uL2NvbnN0YW50cy9kZXIiKTtmdW5jdGlvbiBlKGYpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1mLm5hbWUsdGhpcy5lbnRpdHk9Zix0aGlzLnRyZWU9bmV3IGwsdGhpcy50cmVlLl9pbml0KGYuYm9keSl9ZnVuY3Rpb24gbChmKXtyLmNhbGwodGhpcywiZGVyIixmKX1mdW5jdGlvbiBuKGYsYyl7bGV0IHU9Zi5yZWFkVUludDgoYyk7aWYoZi5pc0Vycm9yKHUpKXJldHVybiB1O2NvbnN0IGQ9dC50YWdDbGFzc1t1Pj42XSxoPSgzMiZ1KT09MDtpZigoMzEmdSk9PTMxKXtsZXQgdz11O2Zvcih1PTA7KDEyOCZ3KT09MTI4Oyl7aWYodz1mLnJlYWRVSW50OChjKSxmLmlzRXJyb3IodykpcmV0dXJuIHc7dTw8PTcsdXw9MTI3Jnd9fWVsc2UgdSY9MzE7cmV0dXJue2NsczpkLHByaW1pdGl2ZTpoLHRhZzp1LHRhZ1N0cjp0LnRhZ1t1XX19ZnVuY3Rpb24gaShmLGMsdSl7bGV0IGQ9Zi5yZWFkVUludDgodSk7aWYoZi5pc0Vycm9yKGQpKXJldHVybiBkO2lmKCFjJiZkPT09MTI4KXJldHVybiBudWxsO2lmKCEoMTI4JmQpKXJldHVybiBkO2NvbnN0IGg9MTI3JmQ7aWYoaD40KXJldHVybiBmLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7ZD0wO2ZvcihsZXQgdz0wO3c8aDt3Kyspe2Q8PD04O2NvbnN0IF89Zi5yZWFkVUludDgodSk7aWYoZi5pc0Vycm9yKF8pKXJldHVybiBfO2R8PV99cmV0dXJuIGR9RS5leHBvcnRzPWUsZS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKGYsYyl7cmV0dXJuIG8uaXNEZWNvZGVyQnVmZmVyKGYpfHwoZj1uZXcgbyhmLGMpKSx0aGlzLnRyZWUuX2RlY29kZShmLGMpfSxtKGwsciksbC5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oZixjLHUpe2lmKGYuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0IGQ9Zi5zYXZlKCksaD1uKGYsJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrYysnIicpO3JldHVybiBmLmlzRXJyb3IoaCk/aDooZi5yZXN0b3JlKGQpLGgudGFnPT09Y3x8aC50YWdTdHI9PT1jfHxoLnRhZ1N0cisib2YiPT09Y3x8dSl9LGwucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oZixjLHUpe2NvbnN0IGQ9bihmLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytjKyciJyk7aWYoZi5pc0Vycm9yKGQpKXJldHVybiBkO2xldCBoPWkoZixkLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrYysnIicpO2lmKGYuaXNFcnJvcihoKSlyZXR1cm4gaDtpZighdSYmZC50YWchPT1jJiZkLnRhZ1N0ciE9PWMmJmQudGFnU3RyKyJvZiIhPT1jKXJldHVybiBmLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytjKyciJyk7aWYoZC5wcmltaXRpdmV8fGghPT1udWxsKXJldHVybiBmLnNraXAoaCwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK2MrJyInKTtjb25zdCB3PWYuc2F2ZSgpLF89dGhpcy5fc2tpcFVudGlsRW5kKGYsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIGYuaXNFcnJvcihfKT9fOihoPWYub2Zmc2V0LXcub2Zmc2V0LGYucmVzdG9yZSh3KSxmLnNraXAoaCwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK2MrJyInKSl9LGwucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oZixjKXtmb3IoOzspe2NvbnN0IHU9bihmLGMpO2lmKGYuaXNFcnJvcih1KSlyZXR1cm4gdTtjb25zdCBkPWkoZix1LnByaW1pdGl2ZSxjKTtpZihmLmlzRXJyb3IoZCkpcmV0dXJuIGQ7bGV0IGg7aWYoaD11LnByaW1pdGl2ZXx8ZCE9PW51bGw/Zi5za2lwKGQpOnRoaXMuX3NraXBVbnRpbEVuZChmLGMpLGYuaXNFcnJvcihoKSlyZXR1cm4gaDtpZih1LnRhZ1N0cj09PSJlbmQiKWJyZWFrfX0sbC5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oZixjLHUsZCl7Y29uc3QgaD1bXTtmb3IoOyFmLmlzRW1wdHkoKTspe2NvbnN0IHc9dGhpcy5fcGVla1RhZyhmLCJlbmQiKTtpZihmLmlzRXJyb3IodykpcmV0dXJuIHc7Y29uc3QgXz11LmRlY29kZShmLCJkZXIiLGQpO2lmKGYuaXNFcnJvcihfKSYmdylicmVhaztoLnB1c2goXyl9cmV0dXJuIGh9LGwucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oZixjKXtpZihjPT09ImJpdHN0ciIpe2NvbnN0IHU9Zi5yZWFkVUludDgoKTtyZXR1cm4gZi5pc0Vycm9yKHUpP3U6e3VudXNlZDp1LGRhdGE6Zi5yYXcoKX19aWYoYz09PSJibXBzdHIiKXtjb25zdCB1PWYucmF3KCk7aWYodS5sZW5ndGglMj09MSlyZXR1cm4gZi5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtsZXQgZD0iIjtmb3IobGV0IGg9MDtoPHUubGVuZ3RoLzI7aCsrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUodS5yZWFkVUludDE2QkUoMipoKSk7cmV0dXJuIGR9aWYoYz09PSJudW1zdHIiKXtjb25zdCB1PWYucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKHUpP3U6Zi5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoYz09PSJvY3RzdHIifHxjPT09Im9iakRlc2MiKXJldHVybiBmLnJhdygpO2lmKGM9PT0icHJpbnRzdHIiKXtjb25zdCB1PWYucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIodSk/dTpmLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KGMpP2YucmF3KCkudG9TdHJpbmcoKTpmLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitjKyIgdW5zdXBwb3J0ZWQiKX0sbC5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKGYsYyx1KXtsZXQgZDtjb25zdCBoPVtdO2xldCB3PTAsXz0wO2Zvcig7IWYuaXNFbXB0eSgpOylfPWYucmVhZFVJbnQ4KCksdzw8PTcsd3w9MTI3Jl8sISgxMjgmXykmJihoLnB1c2godyksdz0wKTsxMjgmXyYmaC5wdXNoKHcpO2NvbnN0IEE9aFswXS80MHwwLFA9aFswXSU0MDtpZihkPXU/aDpbQSxQXS5jb25jYXQoaC5zbGljZSgxKSksYyl7bGV0IEw9Y1tkLmpvaW4oIiAiKV07TD09PXZvaWQgMCYmKEw9Y1tkLmpvaW4oIi4iKV0pLEwhPT12b2lkIDAmJihkPUwpfXJldHVybiBkfSxsLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihmLGMpe2NvbnN0IHU9Zi5yYXcoKS50b1N0cmluZygpO2xldCBkLGgsdyxfLEEsUDtpZihjPT09ImdlbnRpbWUiKWQ9MHx1LnNsaWNlKDAsNCksaD0wfHUuc2xpY2UoNCw2KSx3PTB8dS5zbGljZSg2LDgpLF89MHx1LnNsaWNlKDgsMTApLEE9MHx1LnNsaWNlKDEwLDEyKSxQPTB8dS5zbGljZSgxMiwxNCk7ZWxzZXtpZihjIT09InV0Y3RpbWUiKXJldHVybiBmLmVycm9yKCJEZWNvZGluZyAiK2MrIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7ZD0wfHUuc2xpY2UoMCwyKSxoPTB8dS5zbGljZSgyLDQpLHc9MHx1LnNsaWNlKDQsNiksXz0wfHUuc2xpY2UoNiw4KSxBPTB8dS5zbGljZSg4LDEwKSxQPTB8dS5zbGljZSgxMCwxMiksZD1kPDcwPzJlMytkOjE5MDArZH1yZXR1cm4gRGF0ZS5VVEMoZCxoLTEsdyxfLEEsUCwwKX0sbC5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sbC5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oZil7Y29uc3QgYz1mLnJlYWRVSW50OCgpO3JldHVybiBmLmlzRXJyb3IoYyk/YzpjIT09MH0sbC5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihmLGMpe2NvbnN0IHU9Zi5yYXcoKTtsZXQgZD1uZXcgcyh1KTtyZXR1cm4gYyYmKGQ9Y1tkLnRvU3RyaW5nKDEwKV18fGQpLGR9LGwucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oZixjKXtyZXR1cm4gdHlwZW9mIGY9PSJmdW5jdGlvbiImJihmPWYoYykpLGYuX2dldERlY29kZXIoImRlciIpLnRyZWV9fSx7Ii4uL2Jhc2UvYnVmZmVyIjoxNzIsIi4uL2Jhc2Uvbm9kZSI6MTc0LCIuLi9jb25zdGFudHMvZGVyIjoxNzYsImJuLmpzIjoxODQsaW5oZXJpdHM6NDQwfV0sMTc5OltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1rO20uZGVyPWEoIi4vZGVyIiksbS5wZW09YSgiLi9wZW0iKX0seyIuL2RlciI6MTc4LCIuL3BlbSI6MTgwfV0sMTgwOltmdW5jdGlvbihhLEUsayl7Y29uc3QgbT1hKCJpbmhlcml0cyIpLHM9YSgic2FmZXItYnVmZmVyIikuQnVmZmVyLG89YSgiLi9kZXIiKTtmdW5jdGlvbiByKHQpe28uY2FsbCh0aGlzLHQpLHRoaXMuZW5jPSJwZW0ifW0ocixvKSxFLmV4cG9ydHM9cixyLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtjb25zdCBsPXQudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxuPWUubGFiZWwudG9VcHBlckNhc2UoKSxpPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLztsZXQgZj0tMSxjPS0xO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCB3PWxbaF0ubWF0Y2goaSk7aWYodyE9PW51bGwmJndbMl09PT1uKXtpZihmIT09LTEpe2lmKHdbMV0hPT0iRU5EIilicmVhaztjPWg7YnJlYWt9aWYod1sxXSE9PSJCRUdJTiIpYnJlYWs7Zj1ofX1pZihmPT09LTF8fGM9PT0tMSl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIrbik7Y29uc3QgdT1sLnNsaWNlKGYrMSxjKS5qb2luKCIiKTt1LnJlcGxhY2UoL1teYS16MC05Ky89XSsvZ2ksIiIpO2NvbnN0IGQ9cy5mcm9tKHUsImJhc2U2NCIpO3JldHVybiBvLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGQsZSl9fSx7Ii4vZGVyIjoxNzgsaW5oZXJpdHM6NDQwLCJzYWZlci1idWZmZXIiOjQ5NX1dLDE4MTpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiaW5oZXJpdHMiKSxzPWEoInNhZmVyLWJ1ZmZlciIpLkJ1ZmZlcixvPWEoIi4uL2Jhc2Uvbm9kZSIpLHI9YSgiLi4vY29uc3RhbnRzL2RlciIpO2Z1bmN0aW9uIHQobil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPW4ubmFtZSx0aGlzLmVudGl0eT1uLHRoaXMudHJlZT1uZXcgZSx0aGlzLnRyZWUuX2luaXQobi5ib2R5KX1mdW5jdGlvbiBlKG4pe28uY2FsbCh0aGlzLCJkZXIiLG4pfWZ1bmN0aW9uIGwobil7cmV0dXJuIG48MTA/IjAiK246bn1FLmV4cG9ydHM9dCx0LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUobixpKS5qb2luKCl9LG0oZSxvKSxlLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKG4saSxmLGMpe2NvbnN0IHU9ZnVuY3Rpb24odyxfLEEsUCl7bGV0IEw7aWYodz09PSJzZXFvZiI/dz0ic2VxIjp3PT09InNldG9mIiYmKHc9InNldCIpLHIudGFnQnlOYW1lLmhhc093blByb3BlcnR5KHcpKUw9ci50YWdCeU5hbWVbd107ZWxzZXtpZih0eXBlb2YgdyE9Im51bWJlciJ8fCgwfHcpIT09dylyZXR1cm4gUC5lcnJvcigiVW5rbm93biB0YWc6ICIrdyk7TD13fXJldHVybiBMPj0zMT9QLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooX3x8KEx8PTMyKSxMfD1yLnRhZ0NsYXNzQnlOYW1lW0F8fCJ1bml2ZXJzYWwiXTw8NixMKX0obixpLGYsdGhpcy5yZXBvcnRlcik7aWYoYy5sZW5ndGg8MTI4KXtjb25zdCB3PXMuYWxsb2MoMik7cmV0dXJuIHdbMF09dSx3WzFdPWMubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW3csY10pfWxldCBkPTE7Zm9yKGxldCB3PWMubGVuZ3RoO3c+PTI1Njt3Pj49OClkKys7Y29uc3QgaD1zLmFsbG9jKDIrZCk7aFswXT11LGhbMV09MTI4fGQ7Zm9yKGxldCB3PTErZCxfPWMubGVuZ3RoO18+MDt3LS0sXz4+PTgpaFt3XT0yNTUmXztyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbaCxjXSl9LGUucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24obixpKXtpZihpPT09ImJpdHN0ciIpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8bi51bnVzZWQsbi5kYXRhXSk7aWYoaT09PSJibXBzdHIiKXtjb25zdCBmPXMuYWxsb2MoMipuLmxlbmd0aCk7Zm9yKGxldCBjPTA7YzxuLmxlbmd0aDtjKyspZi53cml0ZVVJbnQxNkJFKG4uY2hhckNvZGVBdChjKSwyKmMpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGYpfXJldHVybiBpPT09Im51bXN0ciI/dGhpcy5faXNOdW1zdHIobik/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOmk9PT0icHJpbnRzdHIiP3RoaXMuX2lzUHJpbnRzdHIobik/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KGkpfHxpPT09Im9iakRlc2MiP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIraSsiIHVuc3VwcG9ydGVkIil9LGUucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihuLGksZil7aWYodHlwZW9mIG49PSJzdHJpbmciKXtpZighaSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFpLmhhc093blByb3BlcnR5KG4pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO249aVtuXS5zcGxpdCgvW1xzLl0rL2cpO2ZvcihsZXQgaD0wO2g8bi5sZW5ndGg7aCsrKW5baF18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KG4pKXtuPW4uc2xpY2UoKTtmb3IobGV0IGg9MDtoPG4ubGVuZ3RoO2grKyluW2hdfD0wfWlmKCFBcnJheS5pc0FycmF5KG4pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkobikpO2lmKCFmKXtpZihuWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7bi5zcGxpY2UoMCwyLDQwKm5bMF0rblsxXSl9bGV0IGM9MDtmb3IobGV0IGg9MDtoPG4ubGVuZ3RoO2grKyl7bGV0IHc9bltoXTtmb3IoYysrO3c+PTEyODt3Pj49NyljKyt9Y29uc3QgdT1zLmFsbG9jKGMpO2xldCBkPXUubGVuZ3RoLTE7Zm9yKGxldCBoPW4ubGVuZ3RoLTE7aD49MDtoLS0pe2xldCB3PW5baF07Zm9yKHVbZC0tXT0xMjcmdzsodz4+PTcpPjA7KXVbZC0tXT0xMjh8MTI3Jnd9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodSl9LGUucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKG4saSl7bGV0IGY7Y29uc3QgYz1uZXcgRGF0ZShuKTtyZXR1cm4gaT09PSJnZW50aW1lIj9mPVtsKGMuZ2V0VVRDRnVsbFllYXIoKSksbChjLmdldFVUQ01vbnRoKCkrMSksbChjLmdldFVUQ0RhdGUoKSksbChjLmdldFVUQ0hvdXJzKCkpLGwoYy5nZXRVVENNaW51dGVzKCkpLGwoYy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6aT09PSJ1dGN0aW1lIj9mPVtsKGMuZ2V0VVRDRnVsbFllYXIoKSUxMDApLGwoYy5nZXRVVENNb250aCgpKzEpLGwoYy5nZXRVVENEYXRlKCkpLGwoYy5nZXRVVENIb3VycygpKSxsKGMuZ2V0VVRDTWludXRlcygpKSxsKGMuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIraSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoZiwib2N0c3RyIil9LGUucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxlLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKG4saSl7aWYodHlwZW9mIG49PSJzdHJpbmciKXtpZighaSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFpLmhhc093blByb3BlcnR5KG4pKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShuKSk7bj1pW25dfWlmKHR5cGVvZiBuIT0ibnVtYmVyIiYmIXMuaXNCdWZmZXIobikpe2NvbnN0IHU9bi50b0FycmF5KCk7IW4uc2lnbiYmMTI4JnVbMF0mJnUudW5zaGlmdCgwKSxuPXMuZnJvbSh1KX1pZihzLmlzQnVmZmVyKG4pKXtsZXQgdT1uLmxlbmd0aDtuLmxlbmd0aD09PTAmJnUrKztjb25zdCBkPXMuYWxsb2ModSk7cmV0dXJuIG4uY29weShkKSxuLmxlbmd0aD09PTAmJihkWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZCl9aWYobjwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobik7aWYobjwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsbl0pO2xldCBmPTE7Zm9yKGxldCB1PW47dT49MjU2O3U+Pj04KWYrKztjb25zdCBjPW5ldyBBcnJheShmKTtmb3IobGV0IHU9Yy5sZW5ndGgtMTt1Pj0wO3UtLSljW3VdPTI1NSZuLG4+Pj04O3JldHVybiAxMjgmY1swXSYmYy51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocy5mcm9tKGMpKX0sZS5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobj8yNTU6MCl9LGUucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24obixpKXtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiImJihuPW4oaSkpLG4uX2dldEVuY29kZXIoImRlciIpLnRyZWV9LGUucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihuLGksZil7Y29uc3QgYz10aGlzLl9iYXNlU3RhdGU7bGV0IHU7aWYoYy5kZWZhdWx0PT09bnVsbClyZXR1cm4hMTtjb25zdCBkPW4uam9pbigpO2lmKGMuZGVmYXVsdEJ1ZmZlcj09PXZvaWQgMCYmKGMuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShjLmRlZmF1bHQsaSxmKS5qb2luKCkpLGQubGVuZ3RoIT09Yy5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IodT0wO3U8ZC5sZW5ndGg7dSsrKWlmKGRbdV0hPT1jLmRlZmF1bHRCdWZmZXJbdV0pcmV0dXJuITE7cmV0dXJuITB9fSx7Ii4uL2Jhc2Uvbm9kZSI6MTc0LCIuLi9jb25zdGFudHMvZGVyIjoxNzYsaW5oZXJpdHM6NDQwLCJzYWZlci1idWZmZXIiOjQ5NX1dLDE4MjpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09azttLmRlcj1hKCIuL2RlciIpLG0ucGVtPWEoIi4vcGVtIil9LHsiLi9kZXIiOjE4MSwiLi9wZW0iOjE4M31dLDE4MzpbZnVuY3Rpb24oYSxFLGspe2NvbnN0IG09YSgiaW5oZXJpdHMiKSxzPWEoIi4vZGVyIik7ZnVuY3Rpb24gbyhyKXtzLmNhbGwodGhpcyxyKSx0aGlzLmVuYz0icGVtIn1tKG8scyksRS5leHBvcnRzPW8sby5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHIsdCl7Y29uc3QgZT1zLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHIpLnRvU3RyaW5nKCJiYXNlNjQiKSxsPVsiLS0tLS1CRUdJTiAiK3QubGFiZWwrIi0tLS0tIl07Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz02NClsLnB1c2goZS5zbGljZShuLG4rNjQpKTtyZXR1cm4gbC5wdXNoKCItLS0tLUVORCAiK3QubGFiZWwrIi0tLS0tIiksbC5qb2luKGAKYCl9fSx7Ii4vZGVyIjoxODEsaW5oZXJpdHM6NDQwfV0sMTg0OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0scyl7ZnVuY3Rpb24gbyhTLEMpe2lmKCFTKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIHIoUyxDKXtTLnN1cGVyXz1DO3ZhciB2PWZ1bmN0aW9uKCl7fTt2LnByb3RvdHlwZT1DLnByb3RvdHlwZSxTLnByb3RvdHlwZT1uZXcgdixTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TfWZ1bmN0aW9uIHQoUyxDLHYpe2lmKHQuaXNCTihTKSlyZXR1cm4gUzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxTIT09bnVsbCYmKEMhPT0ibGUiJiZDIT09ImJlInx8KHY9QyxDPTEwKSx0aGlzLl9pbml0KFN8fDAsQ3x8MTAsdnx8ImJlIikpfXZhciBlO3R5cGVvZiBtPT0ib2JqZWN0Ij9tLmV4cG9ydHM9dDoodm9pZCAwKS5CTj10LHQuQk49dCx0LndvcmRTaXplPTI2O3RyeXtlPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuQnVmZmVyIT09dm9pZCAwP3dpbmRvdy5CdWZmZXI6YSgiYnVmZmVyIikuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBsKFMsQyl7dmFyIHY9Uy5jaGFyQ29kZUF0KEMpO3JldHVybiB2Pj02NSYmdjw9NzA/di01NTp2Pj05NyYmdjw9MTAyP3YtODc6di00OCYxNX1mdW5jdGlvbiBuKFMsQyx2KXt2YXIgcD1sKFMsdik7cmV0dXJuIHYtMT49QyYmKHB8PWwoUyx2LTEpPDw0KSxwfWZ1bmN0aW9uIGkoUyxDLHYscCl7Zm9yKHZhciBiPTAsZz1NYXRoLm1pbihTLmxlbmd0aCx2KSx5PUM7eTxnO3krKyl7dmFyIE09Uy5jaGFyQ29kZUF0KHkpLTQ4O2IqPXAsYis9TT49NDk/TS00OSsxMDpNPj0xNz9NLTE3KzEwOk19cmV0dXJuIGJ9dC5pc0JOPWZ1bmN0aW9uKFMpe3JldHVybiBTIGluc3RhbmNlb2YgdHx8UyE9PW51bGwmJnR5cGVvZiBTPT0ib2JqZWN0IiYmUy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXQud29yZFNpemUmJkFycmF5LmlzQXJyYXkoUy53b3Jkcyl9LHQubWF4PWZ1bmN0aW9uKFMsQyl7cmV0dXJuIFMuY21wKEMpPjA/UzpDfSx0Lm1pbj1mdW5jdGlvbihTLEMpe3JldHVybiBTLmNtcChDKTwwP1M6Q30sdC5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oUyxDLHYpe2lmKHR5cGVvZiBTPT0ibnVtYmVyIilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihTLEMsdik7aWYodHlwZW9mIFM9PSJvYmplY3QiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoUyxDLHYpO0M9PT0iaGV4IiYmKEM9MTYpLG8oQz09PSgwfEMpJiZDPj0yJiZDPD0zNik7dmFyIHA9MDsoUz1TLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXT09PSItIiYmKHArKyx0aGlzLm5lZ2F0aXZlPTEpLHA8Uy5sZW5ndGgmJihDPT09MTY/dGhpcy5fcGFyc2VIZXgoUyxwLHYpOih0aGlzLl9wYXJzZUJhc2UoUyxDLHApLHY9PT0ibGUiJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyx2KSkpfSx0LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihTLEMsdil7UzwwJiYodGhpcy5uZWdhdGl2ZT0xLFM9LVMpLFM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJlNdLHRoaXMubGVuZ3RoPTEpOlM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmUyxTLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobyhTPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJlMsUy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSx2PT09ImxlIiYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsdil9LHQucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oUyxDLHYpe2lmKG8odHlwZW9mIFMubGVuZ3RoPT0ibnVtYmVyIiksUy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoUy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09MDt2YXIgYixnLHk9MDtpZih2PT09ImJlIilmb3IocD1TLmxlbmd0aC0xLGI9MDtwPj0wO3AtPTMpZz1TW3BdfFNbcC0xXTw8OHxTW3AtMl08PDE2LHRoaXMud29yZHNbYl18PWc8PHkmNjcxMDg4NjMsdGhpcy53b3Jkc1tiKzFdPWc+Pj4yNi15JjY3MTA4ODYzLCh5Kz0yNCk+PTI2JiYoeS09MjYsYisrKTtlbHNlIGlmKHY9PT0ibGUiKWZvcihwPTAsYj0wO3A8Uy5sZW5ndGg7cCs9MylnPVNbcF18U1twKzFdPDw4fFNbcCsyXTw8MTYsdGhpcy53b3Jkc1tiXXw9Zzw8eSY2NzEwODg2Myx0aGlzLndvcmRzW2IrMV09Zz4+PjI2LXkmNjcxMDg4NjMsKHkrPTI0KT49MjYmJih5LT0yNixiKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihTLEMsdil7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChTLmxlbmd0aC1DKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT0wO3ZhciBiLGc9MCx5PTA7aWYodj09PSJiZSIpZm9yKHA9Uy5sZW5ndGgtMTtwPj1DO3AtPTIpYj1uKFMsQyxwKTw8Zyx0aGlzLndvcmRzW3ldfD02NzEwODg2MyZiLGc+PTE4PyhnLT0xOCx5Kz0xLHRoaXMud29yZHNbeV18PWI+Pj4yNik6Zys9ODtlbHNlIGZvcihwPShTLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3A8Uy5sZW5ndGg7cCs9MiliPW4oUyxDLHApPDxnLHRoaXMud29yZHNbeV18PTY3MTA4ODYzJmIsZz49MTg/KGctPTE4LHkrPTEsdGhpcy53b3Jkc1t5XXw9Yj4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihTLEMsdil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHA9MCxiPTE7Yjw9NjcxMDg4NjM7Yio9QylwKys7cC0tLGI9Yi9DfDA7Zm9yKHZhciBnPVMubGVuZ3RoLXYseT1nJXAsTT1NYXRoLm1pbihnLGcteSkrdixPPTAsUj12O1I8TTtSKz1wKU89aShTLFIsUitwLEMpLHRoaXMuaW11bG4oYiksdGhpcy53b3Jkc1swXStPPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPU86dGhpcy5faWFkZG4oTyk7aWYoeSE9PTApe3ZhciB6PTE7Zm9yKE89aShTLFIsUy5sZW5ndGgsQyksUj0wO1I8eTtSKyspeio9Qzt0aGlzLmltdWxuKHopLHRoaXMud29yZHNbMF0rTzw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1POnRoaXMuX2lhZGRuKE8pfXRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihTKXtTLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspUy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO1MubGVuZ3RoPXRoaXMubGVuZ3RoLFMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxTLnJlZD10aGlzLnJlZH0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgUz1uZXcgdChudWxsKTtyZXR1cm4gdGhpcy5jb3B5KFMpLFN9LHQucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oUyl7Zm9yKDt0aGlzLmxlbmd0aDxTOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiZ0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdPT09MDspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdC5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPT09MSYmdGhpcy53b3Jkc1swXT09PTAmJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIGY9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sYz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSx1PVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGQoUyxDLHYpe3YubmVnYXRpdmU9Qy5uZWdhdGl2ZV5TLm5lZ2F0aXZlO3ZhciBwPVMubGVuZ3RoK0MubGVuZ3RofDA7di5sZW5ndGg9cCxwPXAtMXwwO3ZhciBiPTB8Uy53b3Jkc1swXSxnPTB8Qy53b3Jkc1swXSx5PWIqZyxNPTY3MTA4ODYzJnksTz15LzY3MTA4ODY0fDA7di53b3Jkc1swXT1NO2Zvcih2YXIgUj0xO1I8cDtSKyspe2Zvcih2YXIgej1PPj4+MjYsJD02NzEwODg2MyZPLFg9TWF0aC5taW4oUixDLmxlbmd0aC0xKSxqPU1hdGgubWF4KDAsUi1TLmxlbmd0aCsxKTtqPD1YO2orKyl7dmFyIFc9Ui1qfDA7eis9KHk9KGI9MHxTLndvcmRzW1ddKSooZz0wfEMud29yZHNbal0pKyQpLzY3MTA4ODY0fDAsJD02NzEwODg2MyZ5fXYud29yZHNbUl09MHwkLE89MHx6fXJldHVybiBPIT09MD92LndvcmRzW1JdPTB8Tzp2Lmxlbmd0aC0tLHYuc3RyaXAoKX10LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihTLEMpe3ZhciB2O2lmKEM9MHxDfHwxLChTPVN8fDEwKT09PTE2fHxTPT09ImhleCIpe3Y9IiI7Zm9yKHZhciBwPTAsYj0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHk9dGhpcy53b3Jkc1tnXSxNPSgxNjc3NzIxNSYoeTw8cHxiKSkudG9TdHJpbmcoMTYpO3Y9KGI9eT4+PjI0LXAmMTY3NzcyMTUpIT09MHx8ZyE9PXRoaXMubGVuZ3RoLTE/Zls2LU0ubGVuZ3RoXStNK3Y6TSt2LChwKz0yKT49MjYmJihwLT0yNixnLS0pfWZvcihiIT09MCYmKHY9Yi50b1N0cmluZygxNikrdik7di5sZW5ndGglQyE9MDspdj0iMCIrdjtyZXR1cm4gdGhpcy5uZWdhdGl2ZSE9PTAmJih2PSItIit2KSx2fWlmKFM9PT0oMHxTKSYmUz49MiYmUzw9MzYpe3ZhciBPPWNbU10sUj11W1NdO3Y9IiI7dmFyIHo9dGhpcy5jbG9uZSgpO2Zvcih6Lm5lZ2F0aXZlPTA7IXouaXNaZXJvKCk7KXt2YXIgJD16Lm1vZG4oUikudG9TdHJpbmcoUyk7dj0oej16LmlkaXZuKFIpKS5pc1plcm8oKT8kK3Y6ZltPLSQubGVuZ3RoXSskK3Z9Zm9yKHRoaXMuaXNaZXJvKCkmJih2PSIwIit2KTt2Lmxlbmd0aCVDIT0wOyl2PSIwIit2O3JldHVybiB0aGlzLm5lZ2F0aXZlIT09MCYmKHY9Ii0iK3YpLHZ9byghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx0LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBTPXRoaXMud29yZHNbMF07cmV0dXJuIHRoaXMubGVuZ3RoPT09Mj9TKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPT09MyYmdGhpcy53b3Jkc1syXT09PTE/Uys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm8oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLHRoaXMubmVnYXRpdmUhPT0wPy1TOlN9LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdC5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gbyhlIT09dm9pZCAwKSx0aGlzLnRvQXJyYXlMaWtlKGUsUyxDKX0sdC5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihTLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LFMsQyl9LHQucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKFMsQyx2KXt2YXIgcD10aGlzLmJ5dGVMZW5ndGgoKSxiPXZ8fE1hdGgubWF4KDEscCk7byhwPD1iLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbyhiPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgZyx5LE09Qz09PSJsZSIsTz1uZXcgUyhiKSxSPXRoaXMuY2xvbmUoKTtpZihNKXtmb3IoeT0wOyFSLmlzWmVybygpO3krKylnPVIuYW5kbG4oMjU1KSxSLml1c2hybig4KSxPW3ldPWc7Zm9yKDt5PGI7eSsrKU9beV09MH1lbHNle2Zvcih5PTA7eTxiLXA7eSsrKU9beV09MDtmb3IoeT0wOyFSLmlzWmVybygpO3krKylnPVIuYW5kbG4oMjU1KSxSLml1c2hybig4KSxPW2IteS0xXT1nfXJldHVybiBPfSxNYXRoLmNsejMyP3QucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24oUyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoUyl9OnQucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24oUyl7dmFyIEM9Uyx2PTA7cmV0dXJuIEM+PTQwOTYmJih2Kz0xMyxDPj4+PTEzKSxDPj02NCYmKHYrPTcsQz4+Pj03KSxDPj04JiYodis9NCxDPj4+PTQpLEM+PTImJih2Kz0yLEM+Pj49MiksditDfSx0LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oUyl7aWYoUz09PTApcmV0dXJuIDI2O3ZhciBDPVMsdj0wO3JldHVybiEoODE5MSZDKSYmKHYrPTEzLEM+Pj49MTMpLCEoMTI3JkMpJiYodis9NyxDPj4+PTcpLCEoMTUmQykmJih2Kz00LEM+Pj49NCksISgzJkMpJiYodis9MixDPj4+PTIpLCEoMSZDKSYmdisrLHZ9LHQucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBTPXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sQz10aGlzLl9jb3VudEJpdHMoUyk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSx0LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBTPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgdj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihTKz12LHYhPT0yNilicmVha31yZXR1cm4gU30sdC5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdC5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLm5lZ2F0aXZlIT09MD90aGlzLmFicygpLmlub3RuKFMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdC5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMudGVzdG4oUy0xKT90aGlzLm5vdG4oUykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdC5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZSE9PTB9LHQucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx0LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx0LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKFMpe2Zvcig7dGhpcy5sZW5ndGg8Uy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPFMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Uy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx0LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oUyl7cmV0dXJuIG8oKHRoaXMubmVnYXRpdmV8Uy5uZWdhdGl2ZSk9PTApLHRoaXMuaXVvcihTKX0sdC5wcm90b3R5cGUub3I9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMubGVuZ3RoPlMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoUyk6Uy5jbG9uZSgpLmlvcih0aGlzKX0sdC5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmxlbmd0aD5TLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihTKTpTLmNsb25lKCkuaXVvcih0aGlzKX0sdC5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oUyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5TLmxlbmd0aD9TOnRoaXM7Zm9yKHZhciB2PTA7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT10aGlzLndvcmRzW3ZdJlMud29yZHNbdl07cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihTKXtyZXR1cm4gbygodGhpcy5uZWdhdGl2ZXxTLm5lZ2F0aXZlKT09MCksdGhpcy5pdWFuZChTKX0sdC5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmxlbmd0aD5TLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChTKTpTLmNsb25lKCkuaWFuZCh0aGlzKX0sdC5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5sZW5ndGg+Uy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKFMpOlMuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdC5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oUyl7dmFyIEMsdjt0aGlzLmxlbmd0aD5TLmxlbmd0aD8oQz10aGlzLHY9Uyk6KEM9Uyx2PXRoaXMpO2Zvcih2YXIgcD0wO3A8di5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09Qy53b3Jkc1twXV52LndvcmRzW3BdO2lmKHRoaXMhPT1DKWZvcig7cDxDLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT1DLndvcmRzW3BdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oUyl7cmV0dXJuIG8oKHRoaXMubmVnYXRpdmV8Uy5uZWdhdGl2ZSk9PTApLHRoaXMuaXV4b3IoUyl9LHQucHJvdG90eXBlLnhvcj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5sZW5ndGg+Uy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoUyk6Uy5jbG9uZSgpLml4b3IodGhpcyl9LHQucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMubGVuZ3RoPlMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihTKTpTLmNsb25lKCkuaXV4b3IodGhpcyl9LHQucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKFMpe28odHlwZW9mIFM9PSJudW1iZXIiJiZTPj0wKTt2YXIgQz0wfE1hdGguY2VpbChTLzI2KSx2PVMlMjY7dGhpcy5fZXhwYW5kKEMpLHY+MCYmQy0tO2Zvcih2YXIgcD0wO3A8QztwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyZ+dGhpcy53b3Jkc1twXTtyZXR1cm4gdj4wJiYodGhpcy53b3Jkc1twXT1+dGhpcy53b3Jkc1twXSY2NzEwODg2Mz4+MjYtdiksdGhpcy5zdHJpcCgpfSx0LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oUyl9LHQucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oUyxDKXtvKHR5cGVvZiBTPT0ibnVtYmVyIiYmUz49MCk7dmFyIHY9Uy8yNnwwLHA9UyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHYrMSksdGhpcy53b3Jkc1t2XT1DP3RoaXMud29yZHNbdl18MTw8cDp0aGlzLndvcmRzW3ZdJn4oMTw8cCksdGhpcy5zdHJpcCgpfSx0LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKFMpe3ZhciBDLHYscDtpZih0aGlzLm5lZ2F0aXZlIT09MCYmUy5uZWdhdGl2ZT09PTApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihTKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYodGhpcy5uZWdhdGl2ZT09PTAmJlMubmVnYXRpdmUhPT0wKXJldHVybiBTLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoUyksUy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Uy5sZW5ndGg/KHY9dGhpcyxwPVMpOih2PVMscD10aGlzKTtmb3IodmFyIGI9MCxnPTA7ZzxwLmxlbmd0aDtnKyspQz0oMHx2LndvcmRzW2ddKSsoMHxwLndvcmRzW2ddKStiLHRoaXMud29yZHNbZ109NjcxMDg4NjMmQyxiPUM+Pj4yNjtmb3IoO2IhPT0wJiZnPHYubGVuZ3RoO2crKylDPSgwfHYud29yZHNbZ10pK2IsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDLGI9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPXYubGVuZ3RoLGIhPT0wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWIsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHYhPT10aGlzKWZvcig7Zzx2Lmxlbmd0aDtnKyspdGhpcy53b3Jkc1tnXT12LndvcmRzW2ddO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oUyl7dmFyIEM7cmV0dXJuIFMubmVnYXRpdmUhPT0wJiZ0aGlzLm5lZ2F0aXZlPT09MD8oUy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoUyksUy5uZWdhdGl2ZV49MSxDKTpTLm5lZ2F0aXZlPT09MCYmdGhpcy5uZWdhdGl2ZSE9PTA/KHRoaXMubmVnYXRpdmU9MCxDPVMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5TLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChTKTpTLmNsb25lKCkuaWFkZCh0aGlzKX0sdC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihTKXtpZihTLm5lZ2F0aXZlIT09MCl7Uy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChTKTtyZXR1cm4gUy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9aWYodGhpcy5uZWdhdGl2ZSE9PTApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoUyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHYscCxiPXRoaXMuY21wKFMpO2lmKGI9PT0wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztiPjA/KHY9dGhpcyxwPVMpOih2PVMscD10aGlzKTtmb3IodmFyIGc9MCx5PTA7eTxwLmxlbmd0aDt5KyspZz0oQz0oMHx2LndvcmRzW3ldKS0oMHxwLndvcmRzW3ldKStnKT4+MjYsdGhpcy53b3Jkc1t5XT02NzEwODg2MyZDO2Zvcig7ZyE9PTAmJnk8di5sZW5ndGg7eSsrKWc9KEM9KDB8di53b3Jkc1t5XSkrZyk+PjI2LHRoaXMud29yZHNbeV09NjcxMDg4NjMmQztpZihnPT09MCYmeTx2Lmxlbmd0aCYmdiE9PXRoaXMpZm9yKDt5PHYubGVuZ3RoO3krKyl0aGlzLndvcmRzW3ldPXYud29yZHNbeV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHkpLHYhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoUyl9O3ZhciBoPWZ1bmN0aW9uKFMsQyx2KXt2YXIgcCxiLGcseT1TLndvcmRzLE09Qy53b3JkcyxPPXYud29yZHMsUj0wLHo9MHx5WzBdLCQ9ODE5MSZ6LFg9ej4+PjEzLGo9MHx5WzFdLFc9ODE5MSZqLFQ9aj4+PjEzLHg9MHx5WzJdLEk9ODE5MSZ4LEg9eD4+PjEzLFo9MHx5WzNdLFY9ODE5MSZaLEs9Wj4+PjEzLFk9MHx5WzRdLEo9ODE5MSZZLHE9WT4+PjEzLEc9MHx5WzVdLFE9ODE5MSZHLHJ0PUc+Pj4xMyxzdD0wfHlbNl0sb3Q9ODE5MSZzdCxodD1zdD4+PjEzLGR0PTB8eVs3XSxtdD04MTkxJmR0LE10PWR0Pj4+MTMsQ3Q9MHx5WzhdLF90PTgxOTEmQ3QseXQ9Q3Q+Pj4xMyxjdD0wfHlbOV0sZXQ9ODE5MSZjdCxpdD1jdD4+PjEzLHB0PTB8TVswXSxhdD04MTkxJnB0LGx0PXB0Pj4+MTMsd3Q9MHxNWzFdLHh0PTgxOTEmd3QsanQ9d3Q+Pj4xMyxOdD0wfE1bMl0sa3Q9ODE5MSZOdCxLdD1OdD4+PjEzLFd0PTB8TVszXSxQdD04MTkxJld0LHF0PVd0Pj4+MTMsR3Q9MHxNWzRdLEx0PTgxOTEmR3QsdGU9R3Q+Pj4xMyxvZT0wfE1bNV0senQ9ODE5MSZvZSxyZT1vZT4+PjEzLGxlPTB8TVs2XSxWdD04MTkxJmxlLG50PWxlPj4+MTMsdXQ9MHxNWzddLGJ0PTgxOTEmdXQsRXQ9dXQ+Pj4xMyxEdD0wfE1bOF0sQXQ9ODE5MSZEdCxVdD1EdD4+PjEzLEJ0PTB8TVs5XSxJdD04MTkxJkJ0LEh0PUJ0Pj4+MTM7di5uZWdhdGl2ZT1TLm5lZ2F0aXZlXkMubmVnYXRpdmUsdi5sZW5ndGg9MTk7dmFyICR0PShSKyhwPU1hdGguaW11bCgkLGF0KSl8MCkrKCg4MTkxJihiPShiPU1hdGguaW11bCgkLGx0KSkrTWF0aC5pbXVsKFgsYXQpfDApKTw8MTMpfDA7Uj0oKGc9TWF0aC5pbXVsKFgsbHQpKSsoYj4+PjEzKXwwKSsoJHQ+Pj4yNil8MCwkdCY9NjcxMDg4NjMscD1NYXRoLmltdWwoVyxhdCksYj0oYj1NYXRoLmltdWwoVyxsdCkpK01hdGguaW11bChULGF0KXwwLGc9TWF0aC5pbXVsKFQsbHQpO3ZhciBadD0oUisocD1wK01hdGguaW11bCgkLHh0KXwwKXwwKSsoKDgxOTEmKGI9KGI9YitNYXRoLmltdWwoJCxqdCl8MCkrTWF0aC5pbXVsKFgseHQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwoWCxqdCl8MCkrKGI+Pj4xMyl8MCkrKFp0Pj4+MjYpfDAsWnQmPTY3MTA4ODYzLHA9TWF0aC5pbXVsKEksYXQpLGI9KGI9TWF0aC5pbXVsKEksbHQpKStNYXRoLmltdWwoSCxhdCl8MCxnPU1hdGguaW11bChILGx0KSxwPXArTWF0aC5pbXVsKFcseHQpfDAsYj0oYj1iK01hdGguaW11bChXLGp0KXwwKStNYXRoLmltdWwoVCx4dCl8MCxnPWcrTWF0aC5pbXVsKFQsanQpfDA7dmFyIGhlPShSKyhwPXArTWF0aC5pbXVsKCQsa3QpfDApfDApKygoODE5MSYoYj0oYj1iK01hdGguaW11bCgkLEt0KXwwKStNYXRoLmltdWwoWCxrdCl8MCkpPDwxMyl8MDtSPSgoZz1nK01hdGguaW11bChYLEt0KXwwKSsoYj4+PjEzKXwwKSsoaGU+Pj4yNil8MCxoZSY9NjcxMDg4NjMscD1NYXRoLmltdWwoVixhdCksYj0oYj1NYXRoLmltdWwoVixsdCkpK01hdGguaW11bChLLGF0KXwwLGc9TWF0aC5pbXVsKEssbHQpLHA9cCtNYXRoLmltdWwoSSx4dCl8MCxiPShiPWIrTWF0aC5pbXVsKEksanQpfDApK01hdGguaW11bChILHh0KXwwLGc9ZytNYXRoLmltdWwoSCxqdCl8MCxwPXArTWF0aC5pbXVsKFcsa3QpfDAsYj0oYj1iK01hdGguaW11bChXLEt0KXwwKStNYXRoLmltdWwoVCxrdCl8MCxnPWcrTWF0aC5pbXVsKFQsS3QpfDA7dmFyIGZlPShSKyhwPXArTWF0aC5pbXVsKCQsUHQpfDApfDApKygoODE5MSYoYj0oYj1iK01hdGguaW11bCgkLHF0KXwwKStNYXRoLmltdWwoWCxQdCl8MCkpPDwxMyl8MDtSPSgoZz1nK01hdGguaW11bChYLHF0KXwwKSsoYj4+PjEzKXwwKSsoZmU+Pj4yNil8MCxmZSY9NjcxMDg4NjMscD1NYXRoLmltdWwoSixhdCksYj0oYj1NYXRoLmltdWwoSixsdCkpK01hdGguaW11bChxLGF0KXwwLGc9TWF0aC5pbXVsKHEsbHQpLHA9cCtNYXRoLmltdWwoVix4dCl8MCxiPShiPWIrTWF0aC5pbXVsKFYsanQpfDApK01hdGguaW11bChLLHh0KXwwLGc9ZytNYXRoLmltdWwoSyxqdCl8MCxwPXArTWF0aC5pbXVsKEksa3QpfDAsYj0oYj1iK01hdGguaW11bChJLEt0KXwwKStNYXRoLmltdWwoSCxrdCl8MCxnPWcrTWF0aC5pbXVsKEgsS3QpfDAscD1wK01hdGguaW11bChXLFB0KXwwLGI9KGI9YitNYXRoLmltdWwoVyxxdCl8MCkrTWF0aC5pbXVsKFQsUHQpfDAsZz1nK01hdGguaW11bChULHF0KXwwO3ZhciBkZT0oUisocD1wK01hdGguaW11bCgkLEx0KXwwKXwwKSsoKDgxOTEmKGI9KGI9YitNYXRoLmltdWwoJCx0ZSl8MCkrTWF0aC5pbXVsKFgsTHQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwoWCx0ZSl8MCkrKGI+Pj4xMyl8MCkrKGRlPj4+MjYpfDAsZGUmPTY3MTA4ODYzLHA9TWF0aC5pbXVsKFEsYXQpLGI9KGI9TWF0aC5pbXVsKFEsbHQpKStNYXRoLmltdWwocnQsYXQpfDAsZz1NYXRoLmltdWwocnQsbHQpLHA9cCtNYXRoLmltdWwoSix4dCl8MCxiPShiPWIrTWF0aC5pbXVsKEosanQpfDApK01hdGguaW11bChxLHh0KXwwLGc9ZytNYXRoLmltdWwocSxqdCl8MCxwPXArTWF0aC5pbXVsKFYsa3QpfDAsYj0oYj1iK01hdGguaW11bChWLEt0KXwwKStNYXRoLmltdWwoSyxrdCl8MCxnPWcrTWF0aC5pbXVsKEssS3QpfDAscD1wK01hdGguaW11bChJLFB0KXwwLGI9KGI9YitNYXRoLmltdWwoSSxxdCl8MCkrTWF0aC5pbXVsKEgsUHQpfDAsZz1nK01hdGguaW11bChILHF0KXwwLHA9cCtNYXRoLmltdWwoVyxMdCl8MCxiPShiPWIrTWF0aC5pbXVsKFcsdGUpfDApK01hdGguaW11bChULEx0KXwwLGc9ZytNYXRoLmltdWwoVCx0ZSl8MDt2YXIgcGU9KFIrKHA9cCtNYXRoLmltdWwoJCx6dCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKCQscmUpfDApK01hdGguaW11bChYLHp0KXwwKSk8PDEzKXwwO1I9KChnPWcrTWF0aC5pbXVsKFgscmUpfDApKyhiPj4+MTMpfDApKyhwZT4+PjI2KXwwLHBlJj02NzEwODg2MyxwPU1hdGguaW11bChvdCxhdCksYj0oYj1NYXRoLmltdWwob3QsbHQpKStNYXRoLmltdWwoaHQsYXQpfDAsZz1NYXRoLmltdWwoaHQsbHQpLHA9cCtNYXRoLmltdWwoUSx4dCl8MCxiPShiPWIrTWF0aC5pbXVsKFEsanQpfDApK01hdGguaW11bChydCx4dCl8MCxnPWcrTWF0aC5pbXVsKHJ0LGp0KXwwLHA9cCtNYXRoLmltdWwoSixrdCl8MCxiPShiPWIrTWF0aC5pbXVsKEosS3QpfDApK01hdGguaW11bChxLGt0KXwwLGc9ZytNYXRoLmltdWwocSxLdCl8MCxwPXArTWF0aC5pbXVsKFYsUHQpfDAsYj0oYj1iK01hdGguaW11bChWLHF0KXwwKStNYXRoLmltdWwoSyxQdCl8MCxnPWcrTWF0aC5pbXVsKEsscXQpfDAscD1wK01hdGguaW11bChJLEx0KXwwLGI9KGI9YitNYXRoLmltdWwoSSx0ZSl8MCkrTWF0aC5pbXVsKEgsTHQpfDAsZz1nK01hdGguaW11bChILHRlKXwwLHA9cCtNYXRoLmltdWwoVyx6dCl8MCxiPShiPWIrTWF0aC5pbXVsKFcscmUpfDApK01hdGguaW11bChULHp0KXwwLGc9ZytNYXRoLmltdWwoVCxyZSl8MDt2YXIgZ2U9KFIrKHA9cCtNYXRoLmltdWwoJCxWdCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKCQsbnQpfDApK01hdGguaW11bChYLFZ0KXwwKSk8PDEzKXwwO1I9KChnPWcrTWF0aC5pbXVsKFgsbnQpfDApKyhiPj4+MTMpfDApKyhnZT4+PjI2KXwwLGdlJj02NzEwODg2MyxwPU1hdGguaW11bChtdCxhdCksYj0oYj1NYXRoLmltdWwobXQsbHQpKStNYXRoLmltdWwoTXQsYXQpfDAsZz1NYXRoLmltdWwoTXQsbHQpLHA9cCtNYXRoLmltdWwob3QseHQpfDAsYj0oYj1iK01hdGguaW11bChvdCxqdCl8MCkrTWF0aC5pbXVsKGh0LHh0KXwwLGc9ZytNYXRoLmltdWwoaHQsanQpfDAscD1wK01hdGguaW11bChRLGt0KXwwLGI9KGI9YitNYXRoLmltdWwoUSxLdCl8MCkrTWF0aC5pbXVsKHJ0LGt0KXwwLGc9ZytNYXRoLmltdWwocnQsS3QpfDAscD1wK01hdGguaW11bChKLFB0KXwwLGI9KGI9YitNYXRoLmltdWwoSixxdCl8MCkrTWF0aC5pbXVsKHEsUHQpfDAsZz1nK01hdGguaW11bChxLHF0KXwwLHA9cCtNYXRoLmltdWwoVixMdCl8MCxiPShiPWIrTWF0aC5pbXVsKFYsdGUpfDApK01hdGguaW11bChLLEx0KXwwLGc9ZytNYXRoLmltdWwoSyx0ZSl8MCxwPXArTWF0aC5pbXVsKEksenQpfDAsYj0oYj1iK01hdGguaW11bChJLHJlKXwwKStNYXRoLmltdWwoSCx6dCl8MCxnPWcrTWF0aC5pbXVsKEgscmUpfDAscD1wK01hdGguaW11bChXLFZ0KXwwLGI9KGI9YitNYXRoLmltdWwoVyxudCl8MCkrTWF0aC5pbXVsKFQsVnQpfDAsZz1nK01hdGguaW11bChULG50KXwwO3ZhciB0dD0oUisocD1wK01hdGguaW11bCgkLGJ0KXwwKXwwKSsoKDgxOTEmKGI9KGI9YitNYXRoLmltdWwoJCxFdCl8MCkrTWF0aC5pbXVsKFgsYnQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwoWCxFdCl8MCkrKGI+Pj4xMyl8MCkrKHR0Pj4+MjYpfDAsdHQmPTY3MTA4ODYzLHA9TWF0aC5pbXVsKF90LGF0KSxiPShiPU1hdGguaW11bChfdCxsdCkpK01hdGguaW11bCh5dCxhdCl8MCxnPU1hdGguaW11bCh5dCxsdCkscD1wK01hdGguaW11bChtdCx4dCl8MCxiPShiPWIrTWF0aC5pbXVsKG10LGp0KXwwKStNYXRoLmltdWwoTXQseHQpfDAsZz1nK01hdGguaW11bChNdCxqdCl8MCxwPXArTWF0aC5pbXVsKG90LGt0KXwwLGI9KGI9YitNYXRoLmltdWwob3QsS3QpfDApK01hdGguaW11bChodCxrdCl8MCxnPWcrTWF0aC5pbXVsKGh0LEt0KXwwLHA9cCtNYXRoLmltdWwoUSxQdCl8MCxiPShiPWIrTWF0aC5pbXVsKFEscXQpfDApK01hdGguaW11bChydCxQdCl8MCxnPWcrTWF0aC5pbXVsKHJ0LHF0KXwwLHA9cCtNYXRoLmltdWwoSixMdCl8MCxiPShiPWIrTWF0aC5pbXVsKEosdGUpfDApK01hdGguaW11bChxLEx0KXwwLGc9ZytNYXRoLmltdWwocSx0ZSl8MCxwPXArTWF0aC5pbXVsKFYsenQpfDAsYj0oYj1iK01hdGguaW11bChWLHJlKXwwKStNYXRoLmltdWwoSyx6dCl8MCxnPWcrTWF0aC5pbXVsKEsscmUpfDAscD1wK01hdGguaW11bChJLFZ0KXwwLGI9KGI9YitNYXRoLmltdWwoSSxudCl8MCkrTWF0aC5pbXVsKEgsVnQpfDAsZz1nK01hdGguaW11bChILG50KXwwLHA9cCtNYXRoLmltdWwoVyxidCl8MCxiPShiPWIrTWF0aC5pbXVsKFcsRXQpfDApK01hdGguaW11bChULGJ0KXwwLGc9ZytNYXRoLmltdWwoVCxFdCl8MDt2YXIgZnQ9KFIrKHA9cCtNYXRoLmltdWwoJCxBdCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKCQsVXQpfDApK01hdGguaW11bChYLEF0KXwwKSk8PDEzKXwwO1I9KChnPWcrTWF0aC5pbXVsKFgsVXQpfDApKyhiPj4+MTMpfDApKyhmdD4+PjI2KXwwLGZ0Jj02NzEwODg2MyxwPU1hdGguaW11bChldCxhdCksYj0oYj1NYXRoLmltdWwoZXQsbHQpKStNYXRoLmltdWwoaXQsYXQpfDAsZz1NYXRoLmltdWwoaXQsbHQpLHA9cCtNYXRoLmltdWwoX3QseHQpfDAsYj0oYj1iK01hdGguaW11bChfdCxqdCl8MCkrTWF0aC5pbXVsKHl0LHh0KXwwLGc9ZytNYXRoLmltdWwoeXQsanQpfDAscD1wK01hdGguaW11bChtdCxrdCl8MCxiPShiPWIrTWF0aC5pbXVsKG10LEt0KXwwKStNYXRoLmltdWwoTXQsa3QpfDAsZz1nK01hdGguaW11bChNdCxLdCl8MCxwPXArTWF0aC5pbXVsKG90LFB0KXwwLGI9KGI9YitNYXRoLmltdWwob3QscXQpfDApK01hdGguaW11bChodCxQdCl8MCxnPWcrTWF0aC5pbXVsKGh0LHF0KXwwLHA9cCtNYXRoLmltdWwoUSxMdCl8MCxiPShiPWIrTWF0aC5pbXVsKFEsdGUpfDApK01hdGguaW11bChydCxMdCl8MCxnPWcrTWF0aC5pbXVsKHJ0LHRlKXwwLHA9cCtNYXRoLmltdWwoSix6dCl8MCxiPShiPWIrTWF0aC5pbXVsKEoscmUpfDApK01hdGguaW11bChxLHp0KXwwLGc9ZytNYXRoLmltdWwocSxyZSl8MCxwPXArTWF0aC5pbXVsKFYsVnQpfDAsYj0oYj1iK01hdGguaW11bChWLG50KXwwKStNYXRoLmltdWwoSyxWdCl8MCxnPWcrTWF0aC5pbXVsKEssbnQpfDAscD1wK01hdGguaW11bChJLGJ0KXwwLGI9KGI9YitNYXRoLmltdWwoSSxFdCl8MCkrTWF0aC5pbXVsKEgsYnQpfDAsZz1nK01hdGguaW11bChILEV0KXwwLHA9cCtNYXRoLmltdWwoVyxBdCl8MCxiPShiPWIrTWF0aC5pbXVsKFcsVXQpfDApK01hdGguaW11bChULEF0KXwwLGc9ZytNYXRoLmltdWwoVCxVdCl8MDt2YXIgZ3Q9KFIrKHA9cCtNYXRoLmltdWwoJCxJdCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKCQsSHQpfDApK01hdGguaW11bChYLEl0KXwwKSk8PDEzKXwwO1I9KChnPWcrTWF0aC5pbXVsKFgsSHQpfDApKyhiPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxwPU1hdGguaW11bChldCx4dCksYj0oYj1NYXRoLmltdWwoZXQsanQpKStNYXRoLmltdWwoaXQseHQpfDAsZz1NYXRoLmltdWwoaXQsanQpLHA9cCtNYXRoLmltdWwoX3Qsa3QpfDAsYj0oYj1iK01hdGguaW11bChfdCxLdCl8MCkrTWF0aC5pbXVsKHl0LGt0KXwwLGc9ZytNYXRoLmltdWwoeXQsS3QpfDAscD1wK01hdGguaW11bChtdCxQdCl8MCxiPShiPWIrTWF0aC5pbXVsKG10LHF0KXwwKStNYXRoLmltdWwoTXQsUHQpfDAsZz1nK01hdGguaW11bChNdCxxdCl8MCxwPXArTWF0aC5pbXVsKG90LEx0KXwwLGI9KGI9YitNYXRoLmltdWwob3QsdGUpfDApK01hdGguaW11bChodCxMdCl8MCxnPWcrTWF0aC5pbXVsKGh0LHRlKXwwLHA9cCtNYXRoLmltdWwoUSx6dCl8MCxiPShiPWIrTWF0aC5pbXVsKFEscmUpfDApK01hdGguaW11bChydCx6dCl8MCxnPWcrTWF0aC5pbXVsKHJ0LHJlKXwwLHA9cCtNYXRoLmltdWwoSixWdCl8MCxiPShiPWIrTWF0aC5pbXVsKEosbnQpfDApK01hdGguaW11bChxLFZ0KXwwLGc9ZytNYXRoLmltdWwocSxudCl8MCxwPXArTWF0aC5pbXVsKFYsYnQpfDAsYj0oYj1iK01hdGguaW11bChWLEV0KXwwKStNYXRoLmltdWwoSyxidCl8MCxnPWcrTWF0aC5pbXVsKEssRXQpfDAscD1wK01hdGguaW11bChJLEF0KXwwLGI9KGI9YitNYXRoLmltdWwoSSxVdCl8MCkrTWF0aC5pbXVsKEgsQXQpfDAsZz1nK01hdGguaW11bChILFV0KXwwO3ZhciB2dD0oUisocD1wK01hdGguaW11bChXLEl0KXwwKXwwKSsoKDgxOTEmKGI9KGI9YitNYXRoLmltdWwoVyxIdCl8MCkrTWF0aC5pbXVsKFQsSXQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwoVCxIdCl8MCkrKGI+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLHA9TWF0aC5pbXVsKGV0LGt0KSxiPShiPU1hdGguaW11bChldCxLdCkpK01hdGguaW11bChpdCxrdCl8MCxnPU1hdGguaW11bChpdCxLdCkscD1wK01hdGguaW11bChfdCxQdCl8MCxiPShiPWIrTWF0aC5pbXVsKF90LHF0KXwwKStNYXRoLmltdWwoeXQsUHQpfDAsZz1nK01hdGguaW11bCh5dCxxdCl8MCxwPXArTWF0aC5pbXVsKG10LEx0KXwwLGI9KGI9YitNYXRoLmltdWwobXQsdGUpfDApK01hdGguaW11bChNdCxMdCl8MCxnPWcrTWF0aC5pbXVsKE10LHRlKXwwLHA9cCtNYXRoLmltdWwob3QsenQpfDAsYj0oYj1iK01hdGguaW11bChvdCxyZSl8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLGc9ZytNYXRoLmltdWwoaHQscmUpfDAscD1wK01hdGguaW11bChRLFZ0KXwwLGI9KGI9YitNYXRoLmltdWwoUSxudCl8MCkrTWF0aC5pbXVsKHJ0LFZ0KXwwLGc9ZytNYXRoLmltdWwocnQsbnQpfDAscD1wK01hdGguaW11bChKLGJ0KXwwLGI9KGI9YitNYXRoLmltdWwoSixFdCl8MCkrTWF0aC5pbXVsKHEsYnQpfDAsZz1nK01hdGguaW11bChxLEV0KXwwLHA9cCtNYXRoLmltdWwoVixBdCl8MCxiPShiPWIrTWF0aC5pbXVsKFYsVXQpfDApK01hdGguaW11bChLLEF0KXwwLGc9ZytNYXRoLmltdWwoSyxVdCl8MDt2YXIgUnQ9KFIrKHA9cCtNYXRoLmltdWwoSSxJdCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKEksSHQpfDApK01hdGguaW11bChILEl0KXwwKSk8PDEzKXwwO1I9KChnPWcrTWF0aC5pbXVsKEgsSHQpfDApKyhiPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxwPU1hdGguaW11bChldCxQdCksYj0oYj1NYXRoLmltdWwoZXQscXQpKStNYXRoLmltdWwoaXQsUHQpfDAsZz1NYXRoLmltdWwoaXQscXQpLHA9cCtNYXRoLmltdWwoX3QsTHQpfDAsYj0oYj1iK01hdGguaW11bChfdCx0ZSl8MCkrTWF0aC5pbXVsKHl0LEx0KXwwLGc9ZytNYXRoLmltdWwoeXQsdGUpfDAscD1wK01hdGguaW11bChtdCx6dCl8MCxiPShiPWIrTWF0aC5pbXVsKG10LHJlKXwwKStNYXRoLmltdWwoTXQsenQpfDAsZz1nK01hdGguaW11bChNdCxyZSl8MCxwPXArTWF0aC5pbXVsKG90LFZ0KXwwLGI9KGI9YitNYXRoLmltdWwob3QsbnQpfDApK01hdGguaW11bChodCxWdCl8MCxnPWcrTWF0aC5pbXVsKGh0LG50KXwwLHA9cCtNYXRoLmltdWwoUSxidCl8MCxiPShiPWIrTWF0aC5pbXVsKFEsRXQpfDApK01hdGguaW11bChydCxidCl8MCxnPWcrTWF0aC5pbXVsKHJ0LEV0KXwwLHA9cCtNYXRoLmltdWwoSixBdCl8MCxiPShiPWIrTWF0aC5pbXVsKEosVXQpfDApK01hdGguaW11bChxLEF0KXwwLGc9ZytNYXRoLmltdWwocSxVdCl8MDt2YXIgU3Q9KFIrKHA9cCtNYXRoLmltdWwoVixJdCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKFYsSHQpfDApK01hdGguaW11bChLLEl0KXwwKSk8PDEzKXwwO1I9KChnPWcrTWF0aC5pbXVsKEssSHQpfDApKyhiPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxwPU1hdGguaW11bChldCxMdCksYj0oYj1NYXRoLmltdWwoZXQsdGUpKStNYXRoLmltdWwoaXQsTHQpfDAsZz1NYXRoLmltdWwoaXQsdGUpLHA9cCtNYXRoLmltdWwoX3QsenQpfDAsYj0oYj1iK01hdGguaW11bChfdCxyZSl8MCkrTWF0aC5pbXVsKHl0LHp0KXwwLGc9ZytNYXRoLmltdWwoeXQscmUpfDAscD1wK01hdGguaW11bChtdCxWdCl8MCxiPShiPWIrTWF0aC5pbXVsKG10LG50KXwwKStNYXRoLmltdWwoTXQsVnQpfDAsZz1nK01hdGguaW11bChNdCxudCl8MCxwPXArTWF0aC5pbXVsKG90LGJ0KXwwLGI9KGI9YitNYXRoLmltdWwob3QsRXQpfDApK01hdGguaW11bChodCxidCl8MCxnPWcrTWF0aC5pbXVsKGh0LEV0KXwwLHA9cCtNYXRoLmltdWwoUSxBdCl8MCxiPShiPWIrTWF0aC5pbXVsKFEsVXQpfDApK01hdGguaW11bChydCxBdCl8MCxnPWcrTWF0aC5pbXVsKHJ0LFV0KXwwO3ZhciBUdD0oUisocD1wK01hdGguaW11bChKLEl0KXwwKXwwKSsoKDgxOTEmKGI9KGI9YitNYXRoLmltdWwoSixIdCl8MCkrTWF0aC5pbXVsKHEsSXQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwocSxIdCl8MCkrKGI+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLHA9TWF0aC5pbXVsKGV0LHp0KSxiPShiPU1hdGguaW11bChldCxyZSkpK01hdGguaW11bChpdCx6dCl8MCxnPU1hdGguaW11bChpdCxyZSkscD1wK01hdGguaW11bChfdCxWdCl8MCxiPShiPWIrTWF0aC5pbXVsKF90LG50KXwwKStNYXRoLmltdWwoeXQsVnQpfDAsZz1nK01hdGguaW11bCh5dCxudCl8MCxwPXArTWF0aC5pbXVsKG10LGJ0KXwwLGI9KGI9YitNYXRoLmltdWwobXQsRXQpfDApK01hdGguaW11bChNdCxidCl8MCxnPWcrTWF0aC5pbXVsKE10LEV0KXwwLHA9cCtNYXRoLmltdWwob3QsQXQpfDAsYj0oYj1iK01hdGguaW11bChvdCxVdCl8MCkrTWF0aC5pbXVsKGh0LEF0KXwwLGc9ZytNYXRoLmltdWwoaHQsVXQpfDA7dmFyIFF0PShSKyhwPXArTWF0aC5pbXVsKFEsSXQpfDApfDApKygoODE5MSYoYj0oYj1iK01hdGguaW11bChRLEh0KXwwKStNYXRoLmltdWwocnQsSXQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwocnQsSHQpfDApKyhiPj4+MTMpfDApKyhRdD4+PjI2KXwwLFF0Jj02NzEwODg2MyxwPU1hdGguaW11bChldCxWdCksYj0oYj1NYXRoLmltdWwoZXQsbnQpKStNYXRoLmltdWwoaXQsVnQpfDAsZz1NYXRoLmltdWwoaXQsbnQpLHA9cCtNYXRoLmltdWwoX3QsYnQpfDAsYj0oYj1iK01hdGguaW11bChfdCxFdCl8MCkrTWF0aC5pbXVsKHl0LGJ0KXwwLGc9ZytNYXRoLmltdWwoeXQsRXQpfDAscD1wK01hdGguaW11bChtdCxBdCl8MCxiPShiPWIrTWF0aC5pbXVsKG10LFV0KXwwKStNYXRoLmltdWwoTXQsQXQpfDAsZz1nK01hdGguaW11bChNdCxVdCl8MDt2YXIgWHQ9KFIrKHA9cCtNYXRoLmltdWwob3QsSXQpfDApfDApKygoODE5MSYoYj0oYj1iK01hdGguaW11bChvdCxIdCl8MCkrTWF0aC5pbXVsKGh0LEl0KXwwKSk8PDEzKXwwO1I9KChnPWcrTWF0aC5pbXVsKGh0LEh0KXwwKSsoYj4+PjEzKXwwKSsoWHQ+Pj4yNil8MCxYdCY9NjcxMDg4NjMscD1NYXRoLmltdWwoZXQsYnQpLGI9KGI9TWF0aC5pbXVsKGV0LEV0KSkrTWF0aC5pbXVsKGl0LGJ0KXwwLGc9TWF0aC5pbXVsKGl0LEV0KSxwPXArTWF0aC5pbXVsKF90LEF0KXwwLGI9KGI9YitNYXRoLmltdWwoX3QsVXQpfDApK01hdGguaW11bCh5dCxBdCl8MCxnPWcrTWF0aC5pbXVsKHl0LFV0KXwwO3ZhciBZdD0oUisocD1wK01hdGguaW11bChtdCxJdCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKG10LEh0KXwwKStNYXRoLmltdWwoTXQsSXQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwoTXQsSHQpfDApKyhiPj4+MTMpfDApKyhZdD4+PjI2KXwwLFl0Jj02NzEwODg2MyxwPU1hdGguaW11bChldCxBdCksYj0oYj1NYXRoLmltdWwoZXQsVXQpKStNYXRoLmltdWwoaXQsQXQpfDAsZz1NYXRoLmltdWwoaXQsVXQpO3ZhciBGdD0oUisocD1wK01hdGguaW11bChfdCxJdCl8MCl8MCkrKCg4MTkxJihiPShiPWIrTWF0aC5pbXVsKF90LEh0KXwwKStNYXRoLmltdWwoeXQsSXQpfDApKTw8MTMpfDA7Uj0oKGc9ZytNYXRoLmltdWwoeXQsSHQpfDApKyhiPj4+MTMpfDApKyhGdD4+PjI2KXwwLEZ0Jj02NzEwODg2Mzt2YXIgaWU9KFIrKHA9TWF0aC5pbXVsKGV0LEl0KSl8MCkrKCg4MTkxJihiPShiPU1hdGguaW11bChldCxIdCkpK01hdGguaW11bChpdCxJdCl8MCkpPDwxMyl8MDtyZXR1cm4gUj0oKGc9TWF0aC5pbXVsKGl0LEh0KSkrKGI+Pj4xMyl8MCkrKGllPj4+MjYpfDAsaWUmPTY3MTA4ODYzLE9bMF09JHQsT1sxXT1adCxPWzJdPWhlLE9bM109ZmUsT1s0XT1kZSxPWzVdPXBlLE9bNl09Z2UsT1s3XT10dCxPWzhdPWZ0LE9bOV09Z3QsT1sxMF09dnQsT1sxMV09UnQsT1sxMl09U3QsT1sxM109VHQsT1sxNF09UXQsT1sxNV09WHQsT1sxNl09WXQsT1sxN109RnQsT1sxOF09aWUsUiE9PTAmJihPWzE5XT1SLHYubGVuZ3RoKyspLHZ9O2Z1bmN0aW9uIHcoUyxDLHYpe3JldHVybiBuZXcgXygpLm11bHAoUyxDLHYpfWZ1bmN0aW9uIF8oUyxDKXt0aGlzLng9Uyx0aGlzLnk9Q31NYXRoLmltdWx8fChoPWQpLHQucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKFMsQyl7dmFyIHY9dGhpcy5sZW5ndGgrUy5sZW5ndGg7cmV0dXJuIHRoaXMubGVuZ3RoPT09MTAmJlMubGVuZ3RoPT09MTA/aCh0aGlzLFMsQyk6djw2Mz9kKHRoaXMsUyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCxiLGcpe2cubmVnYXRpdmU9Yi5uZWdhdGl2ZV5wLm5lZ2F0aXZlLGcubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgeT0wLE09MCxPPTA7TzxnLmxlbmd0aC0xO08rKyl7dmFyIFI9TTtNPTA7Zm9yKHZhciB6PTY3MTA4ODYzJnksJD1NYXRoLm1pbihPLGIubGVuZ3RoLTEpLFg9TWF0aC5tYXgoMCxPLXAubGVuZ3RoKzEpO1g8PSQ7WCsrKXt2YXIgaj1PLVgsVz0oMHxwLndvcmRzW2pdKSooMHxiLndvcmRzW1hdKSxUPTY3MTA4ODYzJlc7ej02NzEwODg2MyYoVD1UK3p8MCksTSs9KFI9KFI9UisoVy82NzEwODg2NHwwKXwwKSsoVD4+PjI2KXwwKT4+PjI2LFImPTY3MTA4ODYzfWcud29yZHNbT109eix5PVIsUj1NfXJldHVybiB5IT09MD9nLndvcmRzW09dPXk6Zy5sZW5ndGgtLSxnLnN0cmlwKCl9KHRoaXMsUyxDKTp3KHRoaXMsUyxDKX0sXy5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihTKXtmb3IodmFyIEM9bmV3IEFycmF5KFMpLHY9dC5wcm90b3R5cGUuX2NvdW50Qml0cyhTKS0xLHA9MDtwPFM7cCsrKUNbcF09dGhpcy5yZXZCaW4ocCx2LFMpO3JldHVybiBDfSxfLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oUyxDLHYpe2lmKFM9PT0wfHxTPT09di0xKXJldHVybiBTO2Zvcih2YXIgcD0wLGI9MDtiPEM7YisrKXB8PSgxJlMpPDxDLWItMSxTPj49MTtyZXR1cm4gcH0sXy5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihTLEMsdixwLGIsZyl7Zm9yKHZhciB5PTA7eTxnO3krKylwW3ldPUNbU1t5XV0sYlt5XT12W1NbeV1dfSxfLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oUyxDLHYscCxiLGcpe3RoaXMucGVybXV0ZShnLFMsQyx2LHAsYik7Zm9yKHZhciB5PTE7eTxiO3k8PD0xKWZvcih2YXIgTT15PDwxLE89TWF0aC5jb3MoMipNYXRoLlBJL00pLFI9TWF0aC5zaW4oMipNYXRoLlBJL00pLHo9MDt6PGI7eis9TSlmb3IodmFyICQ9TyxYPVIsaj0wO2o8eTtqKyspe3ZhciBXPXZbeitqXSxUPXBbeitqXSx4PXZbeitqK3ldLEk9cFt6K2oreV0sSD0kKngtWCpJO0k9JCpJK1gqeCx4PUgsdlt6K2pdPVcreCxwW3oral09VCtJLHZbeitqK3ldPVcteCxwW3orait5XT1ULUksaiE9PU0mJihIPU8qJC1SKlgsWD1PKlgrUiokLCQ9SCl9fSxfLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihTLEMpe3ZhciB2PTF8TWF0aC5tYXgoQyxTKSxwPTEmdixiPTA7Zm9yKHY9di8yfDA7djt2Pj4+PTEpYisrO3JldHVybiAxPDxiKzErcH0sXy5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKFMsQyx2KXtpZighKHY8PTEpKWZvcih2YXIgcD0wO3A8di8yO3ArKyl7dmFyIGI9U1twXTtTW3BdPVNbdi1wLTFdLFNbdi1wLTFdPWIsYj1DW3BdLENbcF09LUNbdi1wLTFdLENbdi1wLTFdPS1ifX0sXy5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKFMsQyl7Zm9yKHZhciB2PTAscD0wO3A8Qy8yO3ArKyl7dmFyIGI9ODE5MipNYXRoLnJvdW5kKFNbMipwKzFdL0MpK01hdGgucm91bmQoU1syKnBdL0MpK3Y7U1twXT02NzEwODg2MyZiLHY9Yjw2NzEwODg2ND8wOmIvNjcxMDg4NjR8MH1yZXR1cm4gU30sXy5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihTLEMsdixwKXtmb3IodmFyIGI9MCxnPTA7ZzxDO2crKyliKz0wfFNbZ10sdlsyKmddPTgxOTEmYixiPj4+PTEzLHZbMipnKzFdPTgxOTEmYixiPj4+PTEzO2ZvcihnPTIqQztnPHA7KytnKXZbZ109MDtvKGI9PT0wKSxvKCgtODE5MiZiKT09MCl9LF8ucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oUyl7Zm9yKHZhciBDPW5ldyBBcnJheShTKSx2PTA7djxTO3YrKylDW3ZdPTA7cmV0dXJuIEN9LF8ucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oUyxDLHYpe3ZhciBwPTIqdGhpcy5ndWVzc0xlbjEzYihTLmxlbmd0aCxDLmxlbmd0aCksYj10aGlzLm1ha2VSQlQocCksZz10aGlzLnN0dWIocCkseT1uZXcgQXJyYXkocCksTT1uZXcgQXJyYXkocCksTz1uZXcgQXJyYXkocCksUj1uZXcgQXJyYXkocCksej1uZXcgQXJyYXkocCksJD1uZXcgQXJyYXkocCksWD12LndvcmRzO1gubGVuZ3RoPXAsdGhpcy5jb252ZXJ0MTNiKFMud29yZHMsUy5sZW5ndGgseSxwKSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxSLHApLHRoaXMudHJhbnNmb3JtKHksZyxNLE8scCxiKSx0aGlzLnRyYW5zZm9ybShSLGcseiwkLHAsYik7Zm9yKHZhciBqPTA7ajxwO2orKyl7dmFyIFc9TVtqXSp6W2pdLU9bal0qJFtqXTtPW2pdPU1bal0qJFtqXStPW2pdKnpbal0sTVtqXT1XfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShNLE8scCksdGhpcy50cmFuc2Zvcm0oTSxPLFgsZyxwLGIpLHRoaXMuY29uanVnYXRlKFgsZyxwKSx0aGlzLm5vcm1hbGl6ZTEzYihYLHApLHYubmVnYXRpdmU9Uy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLHYubGVuZ3RoPVMubGVuZ3RoK0MubGVuZ3RoLHYuc3RyaXAoKX0sdC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFMpe3ZhciBDPW5ldyB0KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtTLmxlbmd0aCksdGhpcy5tdWxUbyhTLEMpfSx0LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKFMpe3ZhciBDPW5ldyB0KG51bGwpO3JldHVybiBDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtTLmxlbmd0aCksdyh0aGlzLFMsQyl9LHQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhTLHRoaXMpfSx0LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihTKXtvKHR5cGVvZiBTPT0ibnVtYmVyIiksbyhTPDY3MTA4ODY0KTtmb3IodmFyIEM9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciBwPSgwfHRoaXMud29yZHNbdl0pKlMsYj0oNjcxMDg4NjMmcCkrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz1wLzY3MTA4ODY0fDAsQys9Yj4+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmYn1yZXR1cm4gQyE9PTAmJih0aGlzLndvcmRzW3ZdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sdC5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKFMpfSx0LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHQucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHQucHJvdG90eXBlLnBvdz1mdW5jdGlvbihTKXt2YXIgQz1mdW5jdGlvbihnKXtmb3IodmFyIHk9bmV3IEFycmF5KGcuYml0TGVuZ3RoKCkpLE09MDtNPHkubGVuZ3RoO00rKyl7dmFyIE89TS8yNnwwLFI9TSUyNjt5W01dPShnLndvcmRzW09dJjE8PFIpPj4+Un1yZXR1cm4geX0oUyk7aWYoQy5sZW5ndGg9PT0wKXJldHVybiBuZXcgdCgxKTtmb3IodmFyIHY9dGhpcyxwPTA7cDxDLmxlbmd0aCYmQ1twXT09PTA7cCsrLHY9di5zcXIoKSk7aWYoKytwPEMubGVuZ3RoKWZvcih2YXIgYj12LnNxcigpO3A8Qy5sZW5ndGg7cCsrLGI9Yi5zcXIoKSlDW3BdIT09MCYmKHY9di5tdWwoYikpO3JldHVybiB2fSx0LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oUyl7byh0eXBlb2YgUz09Im51bWJlciImJlM+PTApO3ZhciBDLHY9UyUyNixwPShTLXYpLzI2LGI9NjcxMDg4NjM+Pj4yNi12PDwyNi12O2lmKHYhPT0wKXt2YXIgZz0wO2ZvcihDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciB5PXRoaXMud29yZHNbQ10mYixNPSgwfHRoaXMud29yZHNbQ10pLXk8PHY7dGhpcy53b3Jkc1tDXT1NfGcsZz15Pj4+MjYtdn1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspfWlmKHAhPT0wKXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXRoaXMud29yZHNbQytwXT10aGlzLndvcmRzW0NdO2ZvcihDPTA7QzxwO0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oUyl7cmV0dXJuIG8odGhpcy5uZWdhdGl2ZT09PTApLHRoaXMuaXVzaGxuKFMpfSx0LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oUyxDLHYpe3ZhciBwO28odHlwZW9mIFM9PSJudW1iZXIiJiZTPj0wKSxwPUM/KEMtQyUyNikvMjY6MDt2YXIgYj1TJTI2LGc9TWF0aC5taW4oKFMtYikvMjYsdGhpcy5sZW5ndGgpLHk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiLE09djtpZihwLT1nLHA9TWF0aC5tYXgoMCxwKSxNKXtmb3IodmFyIE89MDtPPGc7TysrKU0ud29yZHNbT109dGhpcy53b3Jkc1tPXTtNLmxlbmd0aD1nfWlmKGchPT0wKWlmKHRoaXMubGVuZ3RoPmcpZm9yKHRoaXMubGVuZ3RoLT1nLE89MDtPPHRoaXMubGVuZ3RoO08rKyl0aGlzLndvcmRzW09dPXRoaXMud29yZHNbTytnXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBSPTA7Zm9yKE89dGhpcy5sZW5ndGgtMTtPPj0wJiYoUiE9PTB8fE8+PXApO08tLSl7dmFyIHo9MHx0aGlzLndvcmRzW09dO3RoaXMud29yZHNbT109Ujw8MjYtYnx6Pj4+YixSPXomeX1yZXR1cm4gTSYmUiE9PTAmJihNLndvcmRzW00ubGVuZ3RoKytdPVIpLHRoaXMubGVuZ3RoPT09MCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKFMsQyx2KXtyZXR1cm4gbyh0aGlzLm5lZ2F0aXZlPT09MCksdGhpcy5pdXNocm4oUyxDLHYpfSx0LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oUyl9LHQucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKFMpfSx0LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oUyl9LHQucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKFMpfSx0LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihTKXtvKHR5cGVvZiBTPT0ibnVtYmVyIiYmUz49MCk7dmFyIEM9UyUyNix2PShTLUMpLzI2LHA9MTw8QztyZXR1cm4hKHRoaXMubGVuZ3RoPD12KSYmISEodGhpcy53b3Jkc1t2XSZwKX0sdC5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKFMpe28odHlwZW9mIFM9PSJudW1iZXIiJiZTPj0wKTt2YXIgQz1TJTI2LHY9KFMtQykvMjY7aWYobyh0aGlzLm5lZ2F0aXZlPT09MCwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXYpcmV0dXJuIHRoaXM7aWYoQyE9PTAmJnYrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih2LHRoaXMubGVuZ3RoKSxDIT09MCl7dmFyIHA9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oUyl9LHQucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKFMpe3JldHVybiBvKHR5cGVvZiBTPT0ibnVtYmVyIiksbyhTPDY3MTA4ODY0KSxTPDA/dGhpcy5pc3VibigtUyk6dGhpcy5uZWdhdGl2ZSE9PTA/dGhpcy5sZW5ndGg9PT0xJiYoMHx0aGlzLndvcmRzWzBdKTxTPyh0aGlzLndvcmRzWzBdPVMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihTKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oUyl9LHQucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihTKXt0aGlzLndvcmRzWzBdKz1TO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ10+PTY3MTA4ODY0O0MrKyl0aGlzLndvcmRzW0NdLT02NzEwODg2NCxDPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0MrMV09MTp0aGlzLndvcmRzW0MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQysxKSx0aGlzfSx0LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihTKXtpZihvKHR5cGVvZiBTPT0ibnVtYmVyIiksbyhTPDY3MTA4ODY0KSxTPDApcmV0dXJuIHRoaXMuaWFkZG4oLVMpO2lmKHRoaXMubmVnYXRpdmUhPT0wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihTKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1TLHRoaXMubGVuZ3RoPT09MSYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXTwwO0MrKyl0aGlzLndvcmRzW0NdKz02NzEwODg2NCx0aGlzLndvcmRzW0MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKFMpfSx0LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oUyl9LHQucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHQucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx0LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oUyxDLHYpe3ZhciBwLGIsZz1TLmxlbmd0aCt2O3RoaXMuX2V4cGFuZChnKTt2YXIgeT0wO2ZvcihwPTA7cDxTLmxlbmd0aDtwKyspe2I9KDB8dGhpcy53b3Jkc1twK3ZdKSt5O3ZhciBNPSgwfFMud29yZHNbcF0pKkM7eT0oKGItPTY3MTA4ODYzJk0pPj4yNiktKE0vNjcxMDg4NjR8MCksdGhpcy53b3Jkc1twK3ZdPTY3MTA4ODYzJmJ9Zm9yKDtwPHRoaXMubGVuZ3RoLXY7cCsrKXk9KGI9KDB8dGhpcy53b3Jkc1twK3ZdKSt5KT4+MjYsdGhpcy53b3Jkc1twK3ZdPTY3MTA4ODYzJmI7aWYoeT09PTApcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3Iobyh5PT09LTEpLHk9MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspeT0oYj0tKDB8dGhpcy53b3Jkc1twXSkreSk+PjI2LHRoaXMud29yZHNbcF09NjcxMDg4NjMmYjtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdC5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oUyxDKXt2YXIgdj0odGhpcy5sZW5ndGgsUy5sZW5ndGgpLHA9dGhpcy5jbG9uZSgpLGI9UyxnPTB8Yi53b3Jkc1tiLmxlbmd0aC0xXTsodj0yNi10aGlzLl9jb3VudEJpdHMoZykpIT09MCYmKGI9Yi51c2hsbih2KSxwLml1c2hsbih2KSxnPTB8Yi53b3Jkc1tiLmxlbmd0aC0xXSk7dmFyIHksTT1wLmxlbmd0aC1iLmxlbmd0aDtpZihDIT09Im1vZCIpeyh5PW5ldyB0KG51bGwpKS5sZW5ndGg9TSsxLHkud29yZHM9bmV3IEFycmF5KHkubGVuZ3RoKTtmb3IodmFyIE89MDtPPHkubGVuZ3RoO08rKyl5LndvcmRzW09dPTB9dmFyIFI9cC5jbG9uZSgpLl9pc2hsbnN1Ym11bChiLDEsTSk7Ui5uZWdhdGl2ZT09PTAmJihwPVIseSYmKHkud29yZHNbTV09MSkpO2Zvcih2YXIgej1NLTE7ej49MDt6LS0pe3ZhciAkPTY3MTA4ODY0KigwfHAud29yZHNbYi5sZW5ndGgrel0pKygwfHAud29yZHNbYi5sZW5ndGgrei0xXSk7Zm9yKCQ9TWF0aC5taW4oJC9nfDAsNjcxMDg4NjMpLHAuX2lzaGxuc3VibXVsKGIsJCx6KTtwLm5lZ2F0aXZlIT09MDspJC0tLHAubmVnYXRpdmU9MCxwLl9pc2hsbnN1Ym11bChiLDEseikscC5pc1plcm8oKXx8KHAubmVnYXRpdmVePTEpO3kmJih5LndvcmRzW3pdPSQpfXJldHVybiB5JiZ5LnN0cmlwKCkscC5zdHJpcCgpLEMhPT0iZGl2IiYmdiE9PTAmJnAuaXVzaHJuKHYpLHtkaXY6eXx8bnVsbCxtb2Q6cH19LHQucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihTLEMsdil7cmV0dXJuIG8oIVMuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdCgwKSxtb2Q6bmV3IHQoMCl9OnRoaXMubmVnYXRpdmUhPT0wJiZTLm5lZ2F0aXZlPT09MD8oZz10aGlzLm5lZygpLmRpdm1vZChTLEMpLEMhPT0ibW9kIiYmKHA9Zy5kaXYubmVnKCkpLEMhPT0iZGl2IiYmKGI9Zy5tb2QubmVnKCksdiYmYi5uZWdhdGl2ZSE9PTAmJmIuaWFkZChTKSkse2RpdjpwLG1vZDpifSk6dGhpcy5uZWdhdGl2ZT09PTAmJlMubmVnYXRpdmUhPT0wPyhnPXRoaXMuZGl2bW9kKFMubmVnKCksQyksQyE9PSJtb2QiJiYocD1nLmRpdi5uZWcoKSkse2RpdjpwLG1vZDpnLm1vZH0pOnRoaXMubmVnYXRpdmUmUy5uZWdhdGl2ZT8oZz10aGlzLm5lZygpLmRpdm1vZChTLm5lZygpLEMpLEMhPT0iZGl2IiYmKGI9Zy5tb2QubmVnKCksdiYmYi5uZWdhdGl2ZSE9PTAmJmIuaXN1YihTKSkse2RpdjpnLmRpdixtb2Q6Yn0pOlMubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChTKTwwP3tkaXY6bmV3IHQoMCksbW9kOnRoaXN9OlMubGVuZ3RoPT09MT9DPT09ImRpdiI/e2Rpdjp0aGlzLmRpdm4oUy53b3Jkc1swXSksbW9kOm51bGx9OkM9PT0ibW9kIj97ZGl2Om51bGwsbW9kOm5ldyB0KHRoaXMubW9kbihTLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKFMud29yZHNbMF0pLG1vZDpuZXcgdCh0aGlzLm1vZG4oUy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KFMsQyk7dmFyIHAsYixnfSx0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuZGl2bW9kKFMsImRpdiIsITEpLmRpdn0sdC5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmRpdm1vZChTLCJtb2QiLCExKS5tb2R9LHQucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuZGl2bW9kKFMsIm1vZCIsITApLm1vZH0sdC5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oUyl7dmFyIEM9dGhpcy5kaXZtb2QoUyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciB2PUMuZGl2Lm5lZ2F0aXZlIT09MD9DLm1vZC5pc3ViKFMpOkMubW9kLHA9Uy51c2hybigxKSxiPVMuYW5kbG4oMSksZz12LmNtcChwKTtyZXR1cm4gZzwwfHxiPT09MSYmZz09PTA/Qy5kaXY6Qy5kaXYubmVnYXRpdmUhPT0wP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSx0LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKFMpe28oUzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0oMTw8MjYpJVMsdj0wLHA9dGhpcy5sZW5ndGgtMTtwPj0wO3AtLSl2PShDKnYrKDB8dGhpcy53b3Jkc1twXSkpJVM7cmV0dXJuIHZ9LHQucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKFMpe28oUzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl7dmFyIHA9KDB8dGhpcy53b3Jkc1t2XSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW3ZdPXAvU3wwLEM9cCVTfXJldHVybiB0aGlzLnN0cmlwKCl9LHQucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihTKX0sdC5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihTKXtvKFMubmVnYXRpdmU9PT0wKSxvKCFTLmlzWmVybygpKTt2YXIgQz10aGlzLHY9Uy5jbG9uZSgpO0M9Qy5uZWdhdGl2ZSE9PTA/Qy51bW9kKFMpOkMuY2xvbmUoKTtmb3IodmFyIHA9bmV3IHQoMSksYj1uZXcgdCgwKSxnPW5ldyB0KDApLHk9bmV3IHQoMSksTT0wO0MuaXNFdmVuKCkmJnYuaXNFdmVuKCk7KUMuaXVzaHJuKDEpLHYuaXVzaHJuKDEpLCsrTTtmb3IodmFyIE89di5jbG9uZSgpLFI9Qy5jbG9uZSgpOyFDLmlzWmVybygpOyl7Zm9yKHZhciB6PTAsJD0xOyEoQy53b3Jkc1swXSYkKSYmejwyNjsrK3osJDw8PTEpO2lmKHo+MClmb3IoQy5pdXNocm4oeik7ei0tID4wOykocC5pc09kZCgpfHxiLmlzT2RkKCkpJiYocC5pYWRkKE8pLGIuaXN1YihSKSkscC5pdXNocm4oMSksYi5pdXNocm4oMSk7Zm9yKHZhciBYPTAsaj0xOyEodi53b3Jkc1swXSZqKSYmWDwyNjsrK1gsajw8PTEpO2lmKFg+MClmb3Iodi5pdXNocm4oWCk7WC0tID4wOykoZy5pc09kZCgpfHx5LmlzT2RkKCkpJiYoZy5pYWRkKE8pLHkuaXN1YihSKSksZy5pdXNocm4oMSkseS5pdXNocm4oMSk7Qy5jbXAodik+PTA/KEMuaXN1Yih2KSxwLmlzdWIoZyksYi5pc3ViKHkpKToodi5pc3ViKEMpLGcuaXN1YihwKSx5LmlzdWIoYikpfXJldHVybnthOmcsYjp5LGdjZDp2Lml1c2hsbihNKX19LHQucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihTKXtvKFMubmVnYXRpdmU9PT0wKSxvKCFTLmlzWmVybygpKTt2YXIgQz10aGlzLHY9Uy5jbG9uZSgpO0M9Qy5uZWdhdGl2ZSE9PTA/Qy51bW9kKFMpOkMuY2xvbmUoKTtmb3IodmFyIHAsYj1uZXcgdCgxKSxnPW5ldyB0KDApLHk9di5jbG9uZSgpO0MuY21wbigxKT4wJiZ2LmNtcG4oMSk+MDspe2Zvcih2YXIgTT0wLE89MTshKEMud29yZHNbMF0mTykmJk08MjY7KytNLE88PD0xKTtpZihNPjApZm9yKEMuaXVzaHJuKE0pO00tLSA+MDspYi5pc09kZCgpJiZiLmlhZGQoeSksYi5pdXNocm4oMSk7Zm9yKHZhciBSPTAsej0xOyEodi53b3Jkc1swXSZ6KSYmUjwyNjsrK1Isejw8PTEpO2lmKFI+MClmb3Iodi5pdXNocm4oUik7Ui0tID4wOylnLmlzT2RkKCkmJmcuaWFkZCh5KSxnLml1c2hybigxKTtDLmNtcCh2KT49MD8oQy5pc3ViKHYpLGIuaXN1YihnKSk6KHYuaXN1YihDKSxnLmlzdWIoYikpfXJldHVybihwPUMuY21wbigxKT09PTA/YjpnKS5jbXBuKDApPDAmJnAuaWFkZChTKSxwfSx0LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oUyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gUy5hYnMoKTtpZihTLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSx2PVMuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsdi5uZWdhdGl2ZT0wO2Zvcih2YXIgcD0wO0MuaXNFdmVuKCkmJnYuaXNFdmVuKCk7cCsrKUMuaXVzaHJuKDEpLHYuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO3YuaXNFdmVuKCk7KXYuaXVzaHJuKDEpO3ZhciBiPUMuY21wKHYpO2lmKGI8MCl7dmFyIGc9QztDPXYsdj1nfWVsc2UgaWYoYj09PTB8fHYuY21wbigxKT09PTApYnJlYWs7Qy5pc3ViKHYpfXJldHVybiB2Lml1c2hsbihwKX0sdC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5lZ2NkKFMpLmEudW1vZChTKX0sdC5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuKDEmdGhpcy53b3Jkc1swXSk9PTB9LHQucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuKDEmdGhpcy53b3Jkc1swXSk9PTF9LHQucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLndvcmRzWzBdJlN9LHQucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKFMpe28odHlwZW9mIFM9PSJudW1iZXIiKTt2YXIgQz1TJTI2LHY9KFMtQykvMjYscD0xPDxDO2lmKHRoaXMubGVuZ3RoPD12KXJldHVybiB0aGlzLl9leHBhbmQodisxKSx0aGlzLndvcmRzW3ZdfD1wLHRoaXM7Zm9yKHZhciBiPXAsZz12O2IhPT0wJiZnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHk9MHx0aGlzLndvcmRzW2ddO2I9KHkrPWIpPj4+MjYseSY9NjcxMDg4NjMsdGhpcy53b3Jkc1tnXT15fXJldHVybiBiIT09MCYmKHRoaXMud29yZHNbZ109Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx0LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9PT0xJiZ0aGlzLndvcmRzWzBdPT09MH0sdC5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihTKXt2YXIgQyx2PVM8MDtpZih0aGlzLm5lZ2F0aXZlIT09MCYmIXYpcmV0dXJuLTE7aWYodGhpcy5uZWdhdGl2ZT09PTAmJnYpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7diYmKFM9LVMpLG8oUzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIHA9MHx0aGlzLndvcmRzWzBdO0M9cD09PVM/MDpwPFM/LTE6MX1yZXR1cm4gdGhpcy5uZWdhdGl2ZSE9PTA/MHwtQzpDfSx0LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oUyl7aWYodGhpcy5uZWdhdGl2ZSE9PTAmJlMubmVnYXRpdmU9PT0wKXJldHVybi0xO2lmKHRoaXMubmVnYXRpdmU9PT0wJiZTLm5lZ2F0aXZlIT09MClyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoUyk7cmV0dXJuIHRoaXMubmVnYXRpdmUhPT0wPzB8LUM6Q30sdC5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihTKXtpZih0aGlzLmxlbmd0aD5TLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxTLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pe3ZhciBwPTB8dGhpcy53b3Jkc1t2XSxiPTB8Uy53b3Jkc1t2XTtpZihwIT09Yil7cDxiP0M9LTE6cD5iJiYoQz0xKTticmVha319cmV0dXJuIEN9LHQucHJvdG90eXBlLmd0bj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5jbXBuKFMpPT09MX0sdC5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY21wKFMpPT09MX0sdC5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5jbXBuKFMpPj0wfSx0LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY21wKFMpPj0wfSx0LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY21wbihTKT09PS0xfSx0LnByb3RvdHlwZS5sdD1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5jbXAoUyk9PT0tMX0sdC5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5jbXBuKFMpPD0wfSx0LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY21wKFMpPD0wfSx0LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuY21wbihTKT09PTB9LHQucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmNtcChTKT09PTB9LHQucmVkPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgVShTKX0sdC5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oUyl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0Iiksbyh0aGlzLm5lZ2F0aXZlPT09MCwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxTLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoUyl9LHQucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx0LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMucmVkPVMsdGhpc30sdC5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oUyl7cmV0dXJuIG8oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoUyl9LHQucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihTKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLFMpfSx0LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKFMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxTKX0sdC5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKFMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsUyl9LHQucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oUyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLFMpfSx0LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oUyl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxTKX0sdC5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKFMpe3JldHVybiBvKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxTKSx0aGlzLnJlZC5tdWwodGhpcyxTKX0sdC5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihTKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsUyksdGhpcy5yZWQuaW11bCh0aGlzLFMpfSx0LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdC5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHQucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx0LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdC5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHQucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihTKXtyZXR1cm4gbyh0aGlzLnJlZCYmIVMucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLFMpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIFAoUyxDKXt0aGlzLm5hbWU9Uyx0aGlzLnA9bmV3IHQoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHQoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIEwoKXtQLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gTigpe1AuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBEKCl7UC5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEYoKXtQLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gVShTKXtpZih0eXBlb2YgUz09InN0cmluZyIpe3ZhciBDPXQuX3ByaW1lKFMpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgbyhTLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVMsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEIoUyl7VS5jYWxsKHRoaXMsUyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdCgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1QLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIFM9bmV3IHQobnVsbCk7cmV0dXJuIFMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxTfSxQLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKFMpe3ZhciBDLHY9UztkbyB0aGlzLnNwbGl0KHYsdGhpcy50bXApLEM9KHY9KHY9dGhpcy5pbXVsSyh2KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpO3doaWxlKEM+dGhpcy5uKTt2YXIgcD1DPHRoaXMubj8tMTp2LnVjbXAodGhpcy5wKTtyZXR1cm4gcD09PTA/KHYud29yZHNbMF09MCx2Lmxlbmd0aD0xKTpwPjA/di5pc3ViKHRoaXMucCk6di5zdHJpcCE9PXZvaWQgMD92LnN0cmlwKCk6di5fc3RyaXAoKSx2fSxQLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihTLEMpe1MuaXVzaHJuKHRoaXMubiwwLEMpfSxQLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihTKXtyZXR1cm4gUy5pbXVsKHRoaXMuayl9LHIoTCxQKSxMLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihTLEMpe2Zvcih2YXIgdj1NYXRoLm1pbihTLmxlbmd0aCw5KSxwPTA7cDx2O3ArKylDLndvcmRzW3BdPVMud29yZHNbcF07aWYoQy5sZW5ndGg9dixTLmxlbmd0aDw9OSlyZXR1cm4gUy53b3Jkc1swXT0wLHZvaWQoUy5sZW5ndGg9MSk7dmFyIGI9Uy53b3Jkc1s5XTtmb3IoQy53b3Jkc1tDLmxlbmd0aCsrXT00MTk0MzAzJmIscD0xMDtwPFMubGVuZ3RoO3ArKyl7dmFyIGc9MHxTLndvcmRzW3BdO1Mud29yZHNbcC0xMF09KDQxOTQzMDMmZyk8PDR8Yj4+PjIyLGI9Z31iPj4+PTIyLFMud29yZHNbcC0xMF09YixiPT09MCYmUy5sZW5ndGg+MTA/Uy5sZW5ndGgtPTEwOlMubGVuZ3RoLT05fSxMLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihTKXtTLndvcmRzW1MubGVuZ3RoXT0wLFMud29yZHNbUy5sZW5ndGgrMV09MCxTLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCx2PTA7djxTLmxlbmd0aDt2Kyspe3ZhciBwPTB8Uy53b3Jkc1t2XTtDKz05NzcqcCxTLndvcmRzW3ZdPTY3MTA4ODYzJkMsQz02NCpwKyhDLzY3MTA4ODY0fDApfXJldHVybiBTLndvcmRzW1MubGVuZ3RoLTFdPT09MCYmKFMubGVuZ3RoLS0sUy53b3Jkc1tTLmxlbmd0aC0xXT09PTAmJlMubGVuZ3RoLS0pLFN9LHIoTixQKSxyKEQsUCkscihGLFApLEYucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKFMpe2Zvcih2YXIgQz0wLHY9MDt2PFMubGVuZ3RoO3YrKyl7dmFyIHA9MTkqKDB8Uy53b3Jkc1t2XSkrQyxiPTY3MTA4ODYzJnA7cD4+Pj0yNixTLndvcmRzW3ZdPWIsQz1wfXJldHVybiBDIT09MCYmKFMud29yZHNbUy5sZW5ndGgrK109QyksU30sdC5fcHJpbWU9ZnVuY3Rpb24oUyl7aWYoQVtTXSlyZXR1cm4gQVtTXTt2YXIgQztpZihTPT09ImsyNTYiKUM9bmV3IEw7ZWxzZSBpZihTPT09InAyMjQiKUM9bmV3IE47ZWxzZSBpZihTPT09InAxOTIiKUM9bmV3IEQ7ZWxzZXtpZihTIT09InAyNTUxOSIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrUyk7Qz1uZXcgRn1yZXR1cm4gQVtTXT1DLEN9LFUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKFMpe28oUy5uZWdhdGl2ZT09PTAsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhTLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxVLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihTLEMpe28oKFMubmVnYXRpdmV8Qy5uZWdhdGl2ZSk9PTAsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbyhTLnJlZCYmUy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxVLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShTKS5fZm9yY2VSZWQodGhpcyk6Uy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxVLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuaXNaZXJvKCk/Uy5jbG9uZSgpOnRoaXMubS5zdWIoUykuX2ZvcmNlUmVkKHRoaXMpfSxVLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oUyxDKXt0aGlzLl92ZXJpZnkyKFMsQyk7dmFyIHY9Uy5hZGQoQyk7cmV0dXJuIHYuY21wKHRoaXMubSk+PTAmJnYuaXN1Yih0aGlzLm0pLHYuX2ZvcmNlUmVkKHRoaXMpfSxVLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKFMsQyl7dGhpcy5fdmVyaWZ5MihTLEMpO3ZhciB2PVMuaWFkZChDKTtyZXR1cm4gdi5jbXAodGhpcy5tKT49MCYmdi5pc3ViKHRoaXMubSksdn0sVS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKFMsQyl7dGhpcy5fdmVyaWZ5MihTLEMpO3ZhciB2PVMuc3ViKEMpO3JldHVybiB2LmNtcG4oMCk8MCYmdi5pYWRkKHRoaXMubSksdi5fZm9yY2VSZWQodGhpcyl9LFUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oUyxDKXt0aGlzLl92ZXJpZnkyKFMsQyk7dmFyIHY9Uy5pc3ViKEMpO3JldHVybiB2LmNtcG4oMCk8MCYmdi5pYWRkKHRoaXMubSksdn0sVS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKFMsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoUyksdGhpcy5pbW9kKFMudXNobG4oQykpfSxVLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKFMsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoUyxDKSx0aGlzLmltb2QoUy5pbXVsKEMpKX0sVS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFMsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoUyxDKSx0aGlzLmltb2QoUy5tdWwoQykpfSxVLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKFMpe3JldHVybiB0aGlzLmltdWwoUyxTLmNsb25lKCkpfSxVLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMubXVsKFMsUyl9LFUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oUyl7aWYoUy5pc1plcm8oKSlyZXR1cm4gUy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihvKEMlMj09MSksQz09PTMpe3ZhciB2PXRoaXMubS5hZGQobmV3IHQoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coUyx2KX1mb3IodmFyIHA9dGhpcy5tLnN1Ym4oMSksYj0wOyFwLmlzWmVybygpJiZwLmFuZGxuKDEpPT09MDspYisrLHAuaXVzaHJuKDEpO28oIXAuaXNaZXJvKCkpO3ZhciBnPW5ldyB0KDEpLnRvUmVkKHRoaXMpLHk9Zy5yZWROZWcoKSxNPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxPPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoTz1uZXcgdCgyKk8qTykudG9SZWQodGhpcyk7dGhpcy5wb3coTyxNKS5jbXAoeSkhPT0wOylPLnJlZElBZGQoeSk7Zm9yKHZhciBSPXRoaXMucG93KE8scCksej10aGlzLnBvdyhTLHAuYWRkbigxKS5pdXNocm4oMSkpLCQ9dGhpcy5wb3coUyxwKSxYPWI7JC5jbXAoZykhPT0wOyl7Zm9yKHZhciBqPSQsVz0wO2ouY21wKGcpIT09MDtXKyspaj1qLnJlZFNxcigpO28oVzxYKTt2YXIgVD10aGlzLnBvdyhSLG5ldyB0KDEpLml1c2hsbihYLVctMSkpO3o9ei5yZWRNdWwoVCksUj1ULnJlZFNxcigpLCQ9JC5yZWRNdWwoUiksWD1XfXJldHVybiB6fSxVLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKFMpe3ZhciBDPVMuX2ludm1wKHRoaXMubSk7cmV0dXJuIEMubmVnYXRpdmUhPT0wPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LFUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihTLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyB0KDEpLnRvUmVkKHRoaXMpO2lmKEMuY21wbigxKT09PTApcmV0dXJuIFMuY2xvbmUoKTt2YXIgdj1uZXcgQXJyYXkoMTYpO3ZbMF09bmV3IHQoMSkudG9SZWQodGhpcyksdlsxXT1TO2Zvcih2YXIgcD0yO3A8di5sZW5ndGg7cCsrKXZbcF09dGhpcy5tdWwodltwLTFdLFMpO3ZhciBiPXZbMF0sZz0wLHk9MCxNPUMuYml0TGVuZ3RoKCklMjY7Zm9yKE09PT0wJiYoTT0yNikscD1DLmxlbmd0aC0xO3A+PTA7cC0tKXtmb3IodmFyIE89Qy53b3Jkc1twXSxSPU0tMTtSPj0wO1ItLSl7dmFyIHo9Tz4+UiYxO2IhPT12WzBdJiYoYj10aGlzLnNxcihiKSkseiE9PTB8fGchPT0wPyhnPDw9MSxnfD16LCgrK3k9PT00fHxwPT09MCYmUj09PTApJiYoYj10aGlzLm11bChiLHZbZ10pLHk9MCxnPTApKTp5PTB9TT0yNn1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKFMpe3ZhciBDPVMudW1vZCh0aGlzLm0pO3JldHVybiBDPT09Uz9DLmNsb25lKCk6Q30sVS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oUyl7dmFyIEM9Uy5jbG9uZSgpO3JldHVybiBDLnJlZD1udWxsLEN9LHQubW9udD1mdW5jdGlvbihTKXtyZXR1cm4gbmV3IEIoUyl9LHIoQixVKSxCLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oUyl7cmV0dXJuIHRoaXMuaW1vZChTLnVzaGxuKHRoaXMuc2hpZnQpKX0sQi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oUyl7dmFyIEM9dGhpcy5pbW9kKFMubXVsKHRoaXMucmludikpO3JldHVybiBDLnJlZD1udWxsLEN9LEIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oUyxDKXtpZihTLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBTLndvcmRzWzBdPTAsUy5sZW5ndGg9MSxTO3ZhciB2PVMuaW11bChDKSxwPXYubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGI9di5pc3ViKHApLml1c2hybih0aGlzLnNoaWZ0KSxnPWI7cmV0dXJuIGIuY21wKHRoaXMubSk+PTA/Zz1iLmlzdWIodGhpcy5tKTpiLmNtcG4oMCk8MCYmKGc9Yi5pYWRkKHRoaXMubSkpLGcuX2ZvcmNlUmVkKHRoaXMpfSxCLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oUyxDKXtpZihTLmlzWmVybygpfHxDLmlzWmVybygpKXJldHVybiBuZXcgdCgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHY9Uy5tdWwoQykscD12Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxiPXYuaXN1YihwKS5pdXNocm4odGhpcy5zaGlmdCksZz1iO3JldHVybiBiLmNtcCh0aGlzLm0pPj0wP2c9Yi5pc3ViKHRoaXMubSk6Yi5jbXBuKDApPDAmJihnPWIuaWFkZCh0aGlzLm0pKSxnLl9mb3JjZVJlZCh0aGlzKX0sQi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihTKXtyZXR1cm4gdGhpcy5pbW9kKFMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSkoRT09PXZvaWQgMHx8RSl9LHtidWZmZXI6MTg4fV0sMTg1OltmdW5jdGlvbihhLEUsayl7ay5ieXRlTGVuZ3RoPWZ1bmN0aW9uKGkpe3ZhciBmPWwoaSksYz1mWzBdLHU9ZlsxXTtyZXR1cm4gMyooYyt1KS80LXV9LGsudG9CeXRlQXJyYXk9ZnVuY3Rpb24oaSl7dmFyIGYsYyx1PWwoaSksZD11WzBdLGg9dVsxXSx3PW5ldyBvKGZ1bmN0aW9uKFAsTCxOKXtyZXR1cm4gMyooTCtOKS80LU59KDAsZCxoKSksXz0wLEE9aD4wP2QtNDpkO2ZvcihjPTA7YzxBO2MrPTQpZj1zW2kuY2hhckNvZGVBdChjKV08PDE4fHNbaS5jaGFyQ29kZUF0KGMrMSldPDwxMnxzW2kuY2hhckNvZGVBdChjKzIpXTw8NnxzW2kuY2hhckNvZGVBdChjKzMpXSx3W18rK109Zj4+MTYmMjU1LHdbXysrXT1mPj44JjI1NSx3W18rK109MjU1JmY7cmV0dXJuIGg9PT0yJiYoZj1zW2kuY2hhckNvZGVBdChjKV08PDJ8c1tpLmNoYXJDb2RlQXQoYysxKV0+PjQsd1tfKytdPTI1NSZmKSxoPT09MSYmKGY9c1tpLmNoYXJDb2RlQXQoYyldPDwxMHxzW2kuY2hhckNvZGVBdChjKzEpXTw8NHxzW2kuY2hhckNvZGVBdChjKzIpXT4+Mix3W18rK109Zj4+OCYyNTUsd1tfKytdPTI1NSZmKSx3fSxrLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24oaSl7Zm9yKHZhciBmLGM9aS5sZW5ndGgsdT1jJTMsZD1bXSxoPTAsdz1jLXU7aDx3O2grPTE2MzgzKWQucHVzaChuKGksaCxoKzE2MzgzPnc/dzpoKzE2MzgzKSk7cmV0dXJuIHU9PT0xPyhmPWlbYy0xXSxkLnB1c2gobVtmPj4yXSttW2Y8PDQmNjNdKyI9PSIpKTp1PT09MiYmKGY9KGlbYy0yXTw8OCkraVtjLTFdLGQucHVzaChtW2Y+PjEwXSttW2Y+PjQmNjNdK21bZjw8MiY2M10rIj0iKSksZC5qb2luKCIiKX07Zm9yKHZhciBtPVtdLHM9W10sbz10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxyPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix0PTAsZT1yLmxlbmd0aDt0PGU7Kyt0KW1bdF09clt0XSxzW3IuY2hhckNvZGVBdCh0KV09dDtmdW5jdGlvbiBsKGkpe3ZhciBmPWkubGVuZ3RoO2lmKGYlND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBjPWkuaW5kZXhPZigiPSIpO3JldHVybiBjPT09LTEmJihjPWYpLFtjLGM9PT1mPzA6NC1jJTRdfWZ1bmN0aW9uIG4oaSxmLGMpe2Zvcih2YXIgdSxkLGg9W10sdz1mO3c8Yzt3Kz0zKXU9KGlbd108PDE2JjE2NzExNjgwKSsoaVt3KzFdPDw4JjY1MjgwKSsoMjU1JmlbdysyXSksaC5wdXNoKG1bKGQ9dSk+PjE4JjYzXSttW2Q+PjEyJjYzXSttW2Q+PjYmNjNdK21bNjMmZF0pO3JldHVybiBoLmpvaW4oIiIpfXNbNDVdPTYyLHNbOTVdPTYzfSx7fV0sMTg2OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0scyl7ZnVuY3Rpb24gbyh2LHApe2lmKCF2KXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIHIodixwKXt2LnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSx2LnByb3RvdHlwZT1uZXcgYix2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12fWZ1bmN0aW9uIHQodixwLGIpe2lmKHQuaXNCTih2KSlyZXR1cm4gdjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCx2IT09bnVsbCYmKHAhPT0ibGUiJiZwIT09ImJlInx8KGI9cCxwPTEwKSx0aGlzLl9pbml0KHZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBlO3R5cGVvZiBtPT0ib2JqZWN0Ij9tLmV4cG9ydHM9dDoodm9pZCAwKS5CTj10LHQuQk49dCx0LndvcmRTaXplPTI2O3RyeXtlPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuQnVmZmVyIT09dm9pZCAwP3dpbmRvdy5CdWZmZXI6YSgiYnVmZmVyIikuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBsKHYscCl7dmFyIGI9di5jaGFyQ29kZUF0KHApO3JldHVybiBiPj00OCYmYjw9NTc/Yi00ODpiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6dm9pZCBvKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK3YpfWZ1bmN0aW9uIG4odixwLGIpe3ZhciBnPWwodixiKTtyZXR1cm4gYi0xPj1wJiYoZ3w9bCh2LGItMSk8PDQpLGd9ZnVuY3Rpb24gaSh2LHAsYixnKXtmb3IodmFyIHk9MCxNPTAsTz1NYXRoLm1pbih2Lmxlbmd0aCxiKSxSPXA7UjxPO1IrKyl7dmFyIHo9di5jaGFyQ29kZUF0KFIpLTQ4O3kqPWcsTT16Pj00OT96LTQ5KzEwOno+PTE3P3otMTcrMTA6eixvKHo+PTAmJk08ZywiSW52YWxpZCBjaGFyYWN0ZXIiKSx5Kz1NfXJldHVybiB5fWZ1bmN0aW9uIGYodixwKXt2LndvcmRzPXAud29yZHMsdi5sZW5ndGg9cC5sZW5ndGgsdi5uZWdhdGl2ZT1wLm5lZ2F0aXZlLHYucmVkPXAucmVkfWlmKHQuaXNCTj1mdW5jdGlvbih2KXtyZXR1cm4gdiBpbnN0YW5jZW9mIHR8fHYhPT1udWxsJiZ0eXBlb2Ygdj09Im9iamVjdCImJnYuY29uc3RydWN0b3Iud29yZFNpemU9PT10LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHYud29yZHMpfSx0Lm1heD1mdW5jdGlvbih2LHApe3JldHVybiB2LmNtcChwKT4wP3Y6cH0sdC5taW49ZnVuY3Rpb24odixwKXtyZXR1cm4gdi5jbXAocCk8MD92OnB9LHQucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHYscCxiKXtpZih0eXBlb2Ygdj09Im51bWJlciIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodixwLGIpO2lmKHR5cGVvZiB2PT0ib2JqZWN0IilyZXR1cm4gdGhpcy5faW5pdEFycmF5KHYscCxiKTtwPT09ImhleCImJihwPTE2KSxvKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpO3ZhciBnPTA7KHY9di50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF09PT0iLSImJihnKyssdGhpcy5uZWdhdGl2ZT0xKSxnPHYubGVuZ3RoJiYocD09PTE2P3RoaXMuX3BhcnNlSGV4KHYsZyxiKToodGhpcy5fcGFyc2VCYXNlKHYscCxnKSxiPT09ImxlIiYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHAsYikpKX0sdC5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odixwLGIpe3Y8MCYmKHRoaXMubmVnYXRpdmU9MSx2PS12KSx2PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ2XSx0aGlzLmxlbmd0aD0xKTp2PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnYsdi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG8odjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ2LHYvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksYj09PSJsZSImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxwLGIpfSx0LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHYscCxiKXtpZihvKHR5cGVvZiB2Lmxlbmd0aD09Im51bWJlciIpLHYubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHYubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl0aGlzLndvcmRzW2ddPTA7dmFyIHksTSxPPTA7aWYoYj09PSJiZSIpZm9yKGc9di5sZW5ndGgtMSx5PTA7Zz49MDtnLT0zKU09dltnXXx2W2ctMV08PDh8dltnLTJdPDwxNix0aGlzLndvcmRzW3ldfD1NPDxPJjY3MTA4ODYzLHRoaXMud29yZHNbeSsxXT1NPj4+MjYtTyY2NzEwODg2MywoTys9MjQpPj0yNiYmKE8tPTI2LHkrKyk7ZWxzZSBpZihiPT09ImxlIilmb3IoZz0wLHk9MDtnPHYubGVuZ3RoO2crPTMpTT12W2ddfHZbZysxXTw8OHx2W2crMl08PDE2LHRoaXMud29yZHNbeV18PU08PE8mNjcxMDg4NjMsdGhpcy53b3Jkc1t5KzFdPU0+Pj4yNi1PJjY3MTA4ODYzLChPKz0yNCk+PTI2JiYoTy09MjYseSsrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHYscCxiKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHYubGVuZ3RoLXApLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGc9MDtnPHRoaXMubGVuZ3RoO2crKyl0aGlzLndvcmRzW2ddPTA7dmFyIHksTT0wLE89MDtpZihiPT09ImJlIilmb3IoZz12Lmxlbmd0aC0xO2c+PXA7Zy09Mil5PW4odixwLGcpPDxNLHRoaXMud29yZHNbT118PTY3MTA4ODYzJnksTT49MTg/KE0tPTE4LE8rPTEsdGhpcy53b3Jkc1tPXXw9eT4+PjI2KTpNKz04O2Vsc2UgZm9yKGc9KHYubGVuZ3RoLXApJTI9PTA/cCsxOnA7Zzx2Lmxlbmd0aDtnKz0yKXk9bih2LHAsZyk8PE0sdGhpcy53b3Jkc1tPXXw9NjcxMDg4NjMmeSxNPj0xOD8oTS09MTgsTys9MSx0aGlzLndvcmRzW09dfD15Pj4+MjYpOk0rPTg7dGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih2LHAsYil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGc9MCx5PTE7eTw9NjcxMDg4NjM7eSo9cClnKys7Zy0tLHk9eS9wfDA7Zm9yKHZhciBNPXYubGVuZ3RoLWIsTz1NJWcsUj1NYXRoLm1pbihNLE0tTykrYix6PTAsJD1iOyQ8UjskKz1nKXo9aSh2LCQsJCtnLHApLHRoaXMuaW11bG4oeSksdGhpcy53b3Jkc1swXSt6PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXo6dGhpcy5faWFkZG4oeik7aWYoTyE9PTApe3ZhciBYPTE7Zm9yKHo9aSh2LCQsdi5sZW5ndGgscCksJD0wOyQ8TzskKyspWCo9cDt0aGlzLmltdWxuKFgpLHRoaXMud29yZHNbMF0rejw2NzEwODg2ND90aGlzLndvcmRzWzBdKz16OnRoaXMuX2lhZGRuKHopfXRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odil7di53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcD0wO3A8dGhpcy5sZW5ndGg7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD10aGlzLmxlbmd0aCx2Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdi5yZWQ9dGhpcy5yZWR9LHQucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHYpe2Yodix0aGlzKX0sdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdj1uZXcgdChudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHYpLHZ9LHQucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odil7Zm9yKDt0aGlzLmxlbmd0aDx2Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmdGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXT09PTA7KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHQucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD09PTEmJnRoaXMud29yZHNbMF09PT0wJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbC5mb3I9PSJmdW5jdGlvbiIpdHJ5e3QucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWN9Y2F0Y2h7dC5wcm90b3R5cGUuaW5zcGVjdD1jfWVsc2UgdC5wcm90b3R5cGUuaW5zcGVjdD1jO2Z1bmN0aW9uIGMoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgdT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxkPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGg9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odixwKXt2YXIgYjtpZihwPTB8cHx8MSwodj12fHwxMCk9PT0xNnx8dj09PSJoZXgiKXtiPSIiO2Zvcih2YXIgZz0wLHk9MCxNPTA7TTx0aGlzLmxlbmd0aDtNKyspe3ZhciBPPXRoaXMud29yZHNbTV0sUj0oMTY3NzcyMTUmKE88PGd8eSkpLnRvU3RyaW5nKDE2KTt5PU8+Pj4yNC1nJjE2Nzc3MjE1LChnKz0yKT49MjYmJihnLT0yNixNLS0pLGI9eSE9PTB8fE0hPT10aGlzLmxlbmd0aC0xP3VbNi1SLmxlbmd0aF0rUitiOlIrYn1mb3IoeSE9PTAmJihiPXkudG9TdHJpbmcoMTYpK2IpO2IubGVuZ3RoJXAhPTA7KWI9IjAiK2I7cmV0dXJuIHRoaXMubmVnYXRpdmUhPT0wJiYoYj0iLSIrYiksYn1pZih2PT09KDB8dikmJnY+PTImJnY8PTM2KXt2YXIgej1kW3ZdLCQ9aFt2XTtiPSIiO3ZhciBYPXRoaXMuY2xvbmUoKTtmb3IoWC5uZWdhdGl2ZT0wOyFYLmlzWmVybygpOyl7dmFyIGo9WC5tb2RybigkKS50b1N0cmluZyh2KTtiPShYPVguaWRpdm4oJCkpLmlzWmVybygpP2orYjp1W3otai5sZW5ndGhdK2orYn1mb3IodGhpcy5pc1plcm8oKSYmKGI9IjAiK2IpO2IubGVuZ3RoJXAhPTA7KWI9IjAiK2I7cmV0dXJuIHRoaXMubmVnYXRpdmUhPT0wJiYoYj0iLSIrYiksYn1vKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHQucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHY9dGhpcy53b3Jkc1swXTtyZXR1cm4gdGhpcy5sZW5ndGg9PT0yP3YrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg9PT0zJiZ0aGlzLndvcmRzWzJdPT09MT92Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksdGhpcy5uZWdhdGl2ZSE9PTA/LXY6dn0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LGUmJih0LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKGUsdixwKX0pLHQucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx2LHApfTtmdW5jdGlvbiB3KHYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVedi5uZWdhdGl2ZTt2YXIgZz12Lmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPWcsZz1nLTF8MDt2YXIgeT0wfHYud29yZHNbMF0sTT0wfHAud29yZHNbMF0sTz15Kk0sUj02NzEwODg2MyZPLHo9Ty82NzEwODg2NHwwO2Iud29yZHNbMF09Ujtmb3IodmFyICQ9MTskPGc7JCsrKXtmb3IodmFyIFg9ej4+PjI2LGo9NjcxMDg4NjMmeixXPU1hdGgubWluKCQscC5sZW5ndGgtMSksVD1NYXRoLm1heCgwLCQtdi5sZW5ndGgrMSk7VDw9VztUKyspe3ZhciB4PSQtVHwwO1grPShPPSh5PTB8di53b3Jkc1t4XSkqKE09MHxwLndvcmRzW1RdKStqKS82NzEwODg2NHwwLGo9NjcxMDg4NjMmT31iLndvcmRzWyRdPTB8aix6PTB8WH1yZXR1cm4geiE9PTA/Yi53b3Jkc1skXT0wfHo6Yi5sZW5ndGgtLSxiLl9zdHJpcCgpfXQucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHYscCxiKXt0aGlzLl9zdHJpcCgpO3ZhciBnPXRoaXMuYnl0ZUxlbmd0aCgpLHk9Ynx8TWF0aC5tYXgoMSxnKTtvKGc8PXksImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxvKHk+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIik7dmFyIE09ZnVuY3Rpb24oTyxSKXtyZXR1cm4gTy5hbGxvY1Vuc2FmZT9PLmFsbG9jVW5zYWZlKFIpOm5ldyBPKFIpfSh2LHkpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKyhwPT09ImxlIj8iTEUiOiJCRSIpXShNLGcpLE19LHQucHJvdG90eXBlLl90b0FycmF5TGlrZUxFPWZ1bmN0aW9uKHYscCl7Zm9yKHZhciBiPTAsZz0wLHk9MCxNPTA7eTx0aGlzLmxlbmd0aDt5Kyspe3ZhciBPPXRoaXMud29yZHNbeV08PE18Zzt2W2IrK109MjU1Jk8sYjx2Lmxlbmd0aCYmKHZbYisrXT1PPj44JjI1NSksYjx2Lmxlbmd0aCYmKHZbYisrXT1PPj4xNiYyNTUpLE09PT02PyhiPHYubGVuZ3RoJiYodltiKytdPU8+PjI0JjI1NSksZz0wLE09MCk6KGc9Tz4+PjI0LE0rPTIpfWlmKGI8di5sZW5ndGgpZm9yKHZbYisrXT1nO2I8di5sZW5ndGg7KXZbYisrXT0wfSx0LnByb3RvdHlwZS5fdG9BcnJheUxpa2VCRT1mdW5jdGlvbih2LHApe2Zvcih2YXIgYj12Lmxlbmd0aC0xLGc9MCx5PTAsTT0wO3k8dGhpcy5sZW5ndGg7eSsrKXt2YXIgTz10aGlzLndvcmRzW3ldPDxNfGc7dltiLS1dPTI1NSZPLGI+PTAmJih2W2ItLV09Tz4+OCYyNTUpLGI+PTAmJih2W2ItLV09Tz4+MTYmMjU1KSxNPT09Nj8oYj49MCYmKHZbYi0tXT1PPj4yNCYyNTUpLGc9MCxNPTApOihnPU8+Pj4yNCxNKz0yKX1pZihiPj0wKWZvcih2W2ItLV09ZztiPj0wOyl2W2ItLV09MH0sTWF0aC5jbHozMj90LnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHYpe3JldHVybiAzMi1NYXRoLmNsejMyKHYpfTp0LnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHYpe3ZhciBwPXYsYj0wO3JldHVybiBwPj00MDk2JiYoYis9MTMscD4+Pj0xMykscD49NjQmJihiKz03LHA+Pj49NykscD49OCYmKGIrPTQscD4+Pj00KSxwPj0yJiYoYis9MixwPj4+PTIpLGIrcH0sdC5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHYpe2lmKHY9PT0wKXJldHVybiAyNjt2YXIgcD12LGI9MDtyZXR1cm4hKDgxOTEmcCkmJihiKz0xMyxwPj4+PTEzKSwhKDEyNyZwKSYmKGIrPTcscD4+Pj03KSwhKDE1JnApJiYoYis9NCxwPj4+PTQpLCEoMyZwKSYmKGIrPTIscD4+Pj0yKSwhKDEmcCkmJmIrKyxifSx0LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLHA9dGhpcy5fY291bnRCaXRzKHYpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrcH0sdC5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdj0wLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIGI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1twXSk7aWYodis9YixiIT09MjYpYnJlYWt9cmV0dXJuIHZ9LHQucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHQucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5uZWdhdGl2ZSE9PTA/dGhpcy5hYnMoKS5pbm90bih2KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHQucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLnRlc3RuKHYtMSk/dGhpcy5ub3RuKHYpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHQucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmUhPT0wfSx0LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdC5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdC5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih2KXtmb3IoO3RoaXMubGVuZ3RoPHYubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBwPTA7cDx2Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3BdfHYud29yZHNbcF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLmlvcj1mdW5jdGlvbih2KXtyZXR1cm4gbygodGhpcy5uZWdhdGl2ZXx2Lm5lZ2F0aXZlKT09MCksdGhpcy5pdW9yKHYpfSx0LnByb3RvdHlwZS5vcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih2KTp2LmNsb25lKCkuaW9yKHRoaXMpfSx0LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHYpOnYuY2xvbmUoKS5pdW9yKHRoaXMpfSx0LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih2KXt2YXIgcDtwPXRoaXMubGVuZ3RoPnYubGVuZ3RoP3Y6dGhpcztmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl0mdi53b3Jkc1tiXTtyZXR1cm4gdGhpcy5sZW5ndGg9cC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih2KXtyZXR1cm4gbygodGhpcy5uZWdhdGl2ZXx2Lm5lZ2F0aXZlKT09MCksdGhpcy5pdWFuZCh2KX0sdC5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh2KTp2LmNsb25lKCkuaWFuZCh0aGlzKX0sdC5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHYpOnYuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdC5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odil7dmFyIHAsYjt0aGlzLmxlbmd0aD52Lmxlbmd0aD8ocD10aGlzLGI9dik6KHA9dixiPXRoaXMpO2Zvcih2YXIgZz0wO2c8Yi5sZW5ndGg7ZysrKXRoaXMud29yZHNbZ109cC53b3Jkc1tnXV5iLndvcmRzW2ddO2lmKHRoaXMhPT1wKWZvcig7ZzxwLmxlbmd0aDtnKyspdGhpcy53b3Jkc1tnXT1wLndvcmRzW2ddO3JldHVybiB0aGlzLmxlbmd0aD1wLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHYpe3JldHVybiBvKCh0aGlzLm5lZ2F0aXZlfHYubmVnYXRpdmUpPT0wKSx0aGlzLml1eG9yKHYpfSx0LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHYpOnYuY2xvbmUoKS5peG9yKHRoaXMpfSx0LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Iodik6di5jbG9uZSgpLml1eG9yKHRoaXMpfSx0LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih2KXtvKHR5cGVvZiB2PT0ibnVtYmVyIiYmdj49MCk7dmFyIHA9MHxNYXRoLmNlaWwodi8yNiksYj12JTI2O3RoaXMuX2V4cGFuZChwKSxiPjAmJnAtLTtmb3IodmFyIGc9MDtnPHA7ZysrKXRoaXMud29yZHNbZ109NjcxMDg4NjMmfnRoaXMud29yZHNbZ107cmV0dXJuIGI+MCYmKHRoaXMud29yZHNbZ109fnRoaXMud29yZHNbZ10mNjcxMDg4NjM+PjI2LWIpLHRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih2KX0sdC5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih2LHApe28odHlwZW9mIHY9PSJudW1iZXIiJiZ2Pj0wKTt2YXIgYj12LzI2fDAsZz12JTI2O3JldHVybiB0aGlzLl9leHBhbmQoYisxKSx0aGlzLndvcmRzW2JdPXA/dGhpcy53b3Jkc1tiXXwxPDxnOnRoaXMud29yZHNbYl0mfigxPDxnKSx0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHYpe3ZhciBwLGIsZztpZih0aGlzLm5lZ2F0aXZlIT09MCYmdi5uZWdhdGl2ZT09PTApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxwPXRoaXMuaXN1Yih2KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYodGhpcy5uZWdhdGl2ZT09PTAmJnYubmVnYXRpdmUhPT0wKXJldHVybiB2Lm5lZ2F0aXZlPTAscD10aGlzLmlzdWIodiksdi5uZWdhdGl2ZT0xLHAuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+di5sZW5ndGg/KGI9dGhpcyxnPXYpOihiPXYsZz10aGlzKTtmb3IodmFyIHk9MCxNPTA7TTxnLmxlbmd0aDtNKyspcD0oMHxiLndvcmRzW01dKSsoMHxnLndvcmRzW01dKSt5LHRoaXMud29yZHNbTV09NjcxMDg4NjMmcCx5PXA+Pj4yNjtmb3IoO3khPT0wJiZNPGIubGVuZ3RoO00rKylwPSgwfGIud29yZHNbTV0pK3ksdGhpcy53b3Jkc1tNXT02NzEwODg2MyZwLHk9cD4+PjI2O2lmKHRoaXMubGVuZ3RoPWIubGVuZ3RoLHkhPT0wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXksdGhpcy5sZW5ndGgrKztlbHNlIGlmKGIhPT10aGlzKWZvcig7TTxiLmxlbmd0aDtNKyspdGhpcy53b3Jkc1tNXT1iLndvcmRzW01dO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odil7dmFyIHA7cmV0dXJuIHYubmVnYXRpdmUhPT0wJiZ0aGlzLm5lZ2F0aXZlPT09MD8odi5uZWdhdGl2ZT0wLHA9dGhpcy5zdWIodiksdi5uZWdhdGl2ZV49MSxwKTp2Lm5lZ2F0aXZlPT09MCYmdGhpcy5uZWdhdGl2ZSE9PTA/KHRoaXMubmVnYXRpdmU9MCxwPXYuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxwKTp0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh2KTp2LmNsb25lKCkuaWFkZCh0aGlzKX0sdC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih2KXtpZih2Lm5lZ2F0aXZlIT09MCl7di5uZWdhdGl2ZT0wO3ZhciBwPXRoaXMuaWFkZCh2KTtyZXR1cm4gdi5uZWdhdGl2ZT0xLHAuX25vcm1TaWduKCl9aWYodGhpcy5uZWdhdGl2ZSE9PTApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGIsZyx5PXRoaXMuY21wKHYpO2lmKHk9PT0wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt5PjA/KGI9dGhpcyxnPXYpOihiPXYsZz10aGlzKTtmb3IodmFyIE09MCxPPTA7TzxnLmxlbmd0aDtPKyspTT0ocD0oMHxiLndvcmRzW09dKS0oMHxnLndvcmRzW09dKStNKT4+MjYsdGhpcy53b3Jkc1tPXT02NzEwODg2MyZwO2Zvcig7TSE9PTAmJk88Yi5sZW5ndGg7TysrKU09KHA9KDB8Yi53b3Jkc1tPXSkrTSk+PjI2LHRoaXMud29yZHNbT109NjcxMDg4NjMmcDtpZihNPT09MCYmTzxiLmxlbmd0aCYmYiE9PXRoaXMpZm9yKDtPPGIubGVuZ3RoO08rKyl0aGlzLndvcmRzW09dPWIud29yZHNbT107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLE8pLGIhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHYpfTt2YXIgXz1mdW5jdGlvbih2LHAsYil7dmFyIGcseSxNLE89di53b3JkcyxSPXAud29yZHMsej1iLndvcmRzLCQ9MCxYPTB8T1swXSxqPTgxOTEmWCxXPVg+Pj4xMyxUPTB8T1sxXSx4PTgxOTEmVCxJPVQ+Pj4xMyxIPTB8T1syXSxaPTgxOTEmSCxWPUg+Pj4xMyxLPTB8T1szXSxZPTgxOTEmSyxKPUs+Pj4xMyxxPTB8T1s0XSxHPTgxOTEmcSxRPXE+Pj4xMyxydD0wfE9bNV0sc3Q9ODE5MSZydCxvdD1ydD4+PjEzLGh0PTB8T1s2XSxkdD04MTkxJmh0LG10PWh0Pj4+MTMsTXQ9MHxPWzddLEN0PTgxOTEmTXQsX3Q9TXQ+Pj4xMyx5dD0wfE9bOF0sY3Q9ODE5MSZ5dCxldD15dD4+PjEzLGl0PTB8T1s5XSxwdD04MTkxJml0LGF0PWl0Pj4+MTMsbHQ9MHxSWzBdLHd0PTgxOTEmbHQseHQ9bHQ+Pj4xMyxqdD0wfFJbMV0sTnQ9ODE5MSZqdCxrdD1qdD4+PjEzLEt0PTB8UlsyXSxXdD04MTkxJkt0LFB0PUt0Pj4+MTMscXQ9MHxSWzNdLEd0PTgxOTEmcXQsTHQ9cXQ+Pj4xMyx0ZT0wfFJbNF0sb2U9ODE5MSZ0ZSx6dD10ZT4+PjEzLHJlPTB8Uls1XSxsZT04MTkxJnJlLFZ0PXJlPj4+MTMsbnQ9MHxSWzZdLHV0PTgxOTEmbnQsYnQ9bnQ+Pj4xMyxFdD0wfFJbN10sRHQ9ODE5MSZFdCxBdD1FdD4+PjEzLFV0PTB8Uls4XSxCdD04MTkxJlV0LEl0PVV0Pj4+MTMsSHQ9MHxSWzldLCR0PTgxOTEmSHQsWnQ9SHQ+Pj4xMztiLm5lZ2F0aXZlPXYubmVnYXRpdmVecC5uZWdhdGl2ZSxiLmxlbmd0aD0xOTt2YXIgaGU9KCQrKGc9TWF0aC5pbXVsKGosd3QpKXwwKSsoKDgxOTEmKHk9KHk9TWF0aC5pbXVsKGoseHQpKStNYXRoLmltdWwoVyx3dCl8MCkpPDwxMyl8MDskPSgoTT1NYXRoLmltdWwoVyx4dCkpKyh5Pj4+MTMpfDApKyhoZT4+PjI2KXwwLGhlJj02NzEwODg2MyxnPU1hdGguaW11bCh4LHd0KSx5PSh5PU1hdGguaW11bCh4LHh0KSkrTWF0aC5pbXVsKEksd3QpfDAsTT1NYXRoLmltdWwoSSx4dCk7dmFyIGZlPSgkKyhnPWcrTWF0aC5pbXVsKGosTnQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChqLGt0KXwwKStNYXRoLmltdWwoVyxOdCl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChXLGt0KXwwKSsoeT4+PjEzKXwwKSsoZmU+Pj4yNil8MCxmZSY9NjcxMDg4NjMsZz1NYXRoLmltdWwoWix3dCkseT0oeT1NYXRoLmltdWwoWix4dCkpK01hdGguaW11bChWLHd0KXwwLE09TWF0aC5pbXVsKFYseHQpLGc9ZytNYXRoLmltdWwoeCxOdCl8MCx5PSh5PXkrTWF0aC5pbXVsKHgsa3QpfDApK01hdGguaW11bChJLE50KXwwLE09TStNYXRoLmltdWwoSSxrdCl8MDt2YXIgZGU9KCQrKGc9ZytNYXRoLmltdWwoaixXdCl8MCl8MCkrKCg4MTkxJih5PSh5PXkrTWF0aC5pbXVsKGosUHQpfDApK01hdGguaW11bChXLFd0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKFcsUHQpfDApKyh5Pj4+MTMpfDApKyhkZT4+PjI2KXwwLGRlJj02NzEwODg2MyxnPU1hdGguaW11bChZLHd0KSx5PSh5PU1hdGguaW11bChZLHh0KSkrTWF0aC5pbXVsKEosd3QpfDAsTT1NYXRoLmltdWwoSix4dCksZz1nK01hdGguaW11bChaLE50KXwwLHk9KHk9eStNYXRoLmltdWwoWixrdCl8MCkrTWF0aC5pbXVsKFYsTnQpfDAsTT1NK01hdGguaW11bChWLGt0KXwwLGc9ZytNYXRoLmltdWwoeCxXdCl8MCx5PSh5PXkrTWF0aC5pbXVsKHgsUHQpfDApK01hdGguaW11bChJLFd0KXwwLE09TStNYXRoLmltdWwoSSxQdCl8MDt2YXIgcGU9KCQrKGc9ZytNYXRoLmltdWwoaixHdCl8MCl8MCkrKCg4MTkxJih5PSh5PXkrTWF0aC5pbXVsKGosTHQpfDApK01hdGguaW11bChXLEd0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKFcsTHQpfDApKyh5Pj4+MTMpfDApKyhwZT4+PjI2KXwwLHBlJj02NzEwODg2MyxnPU1hdGguaW11bChHLHd0KSx5PSh5PU1hdGguaW11bChHLHh0KSkrTWF0aC5pbXVsKFEsd3QpfDAsTT1NYXRoLmltdWwoUSx4dCksZz1nK01hdGguaW11bChZLE50KXwwLHk9KHk9eStNYXRoLmltdWwoWSxrdCl8MCkrTWF0aC5pbXVsKEosTnQpfDAsTT1NK01hdGguaW11bChKLGt0KXwwLGc9ZytNYXRoLmltdWwoWixXdCl8MCx5PSh5PXkrTWF0aC5pbXVsKFosUHQpfDApK01hdGguaW11bChWLFd0KXwwLE09TStNYXRoLmltdWwoVixQdCl8MCxnPWcrTWF0aC5pbXVsKHgsR3QpfDAseT0oeT15K01hdGguaW11bCh4LEx0KXwwKStNYXRoLmltdWwoSSxHdCl8MCxNPU0rTWF0aC5pbXVsKEksTHQpfDA7dmFyIGdlPSgkKyhnPWcrTWF0aC5pbXVsKGosb2UpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChqLHp0KXwwKStNYXRoLmltdWwoVyxvZSl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChXLHp0KXwwKSsoeT4+PjEzKXwwKSsoZ2U+Pj4yNil8MCxnZSY9NjcxMDg4NjMsZz1NYXRoLmltdWwoc3Qsd3QpLHk9KHk9TWF0aC5pbXVsKHN0LHh0KSkrTWF0aC5pbXVsKG90LHd0KXwwLE09TWF0aC5pbXVsKG90LHh0KSxnPWcrTWF0aC5pbXVsKEcsTnQpfDAseT0oeT15K01hdGguaW11bChHLGt0KXwwKStNYXRoLmltdWwoUSxOdCl8MCxNPU0rTWF0aC5pbXVsKFEsa3QpfDAsZz1nK01hdGguaW11bChZLFd0KXwwLHk9KHk9eStNYXRoLmltdWwoWSxQdCl8MCkrTWF0aC5pbXVsKEosV3QpfDAsTT1NK01hdGguaW11bChKLFB0KXwwLGc9ZytNYXRoLmltdWwoWixHdCl8MCx5PSh5PXkrTWF0aC5pbXVsKFosTHQpfDApK01hdGguaW11bChWLEd0KXwwLE09TStNYXRoLmltdWwoVixMdCl8MCxnPWcrTWF0aC5pbXVsKHgsb2UpfDAseT0oeT15K01hdGguaW11bCh4LHp0KXwwKStNYXRoLmltdWwoSSxvZSl8MCxNPU0rTWF0aC5pbXVsKEksenQpfDA7dmFyIHR0PSgkKyhnPWcrTWF0aC5pbXVsKGosbGUpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChqLFZ0KXwwKStNYXRoLmltdWwoVyxsZSl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChXLFZ0KXwwKSsoeT4+PjEzKXwwKSsodHQ+Pj4yNil8MCx0dCY9NjcxMDg4NjMsZz1NYXRoLmltdWwoZHQsd3QpLHk9KHk9TWF0aC5pbXVsKGR0LHh0KSkrTWF0aC5pbXVsKG10LHd0KXwwLE09TWF0aC5pbXVsKG10LHh0KSxnPWcrTWF0aC5pbXVsKHN0LE50KXwwLHk9KHk9eStNYXRoLmltdWwoc3Qsa3QpfDApK01hdGguaW11bChvdCxOdCl8MCxNPU0rTWF0aC5pbXVsKG90LGt0KXwwLGc9ZytNYXRoLmltdWwoRyxXdCl8MCx5PSh5PXkrTWF0aC5pbXVsKEcsUHQpfDApK01hdGguaW11bChRLFd0KXwwLE09TStNYXRoLmltdWwoUSxQdCl8MCxnPWcrTWF0aC5pbXVsKFksR3QpfDAseT0oeT15K01hdGguaW11bChZLEx0KXwwKStNYXRoLmltdWwoSixHdCl8MCxNPU0rTWF0aC5pbXVsKEosTHQpfDAsZz1nK01hdGguaW11bChaLG9lKXwwLHk9KHk9eStNYXRoLmltdWwoWix6dCl8MCkrTWF0aC5pbXVsKFYsb2UpfDAsTT1NK01hdGguaW11bChWLHp0KXwwLGc9ZytNYXRoLmltdWwoeCxsZSl8MCx5PSh5PXkrTWF0aC5pbXVsKHgsVnQpfDApK01hdGguaW11bChJLGxlKXwwLE09TStNYXRoLmltdWwoSSxWdCl8MDt2YXIgZnQ9KCQrKGc9ZytNYXRoLmltdWwoaix1dCl8MCl8MCkrKCg4MTkxJih5PSh5PXkrTWF0aC5pbXVsKGosYnQpfDApK01hdGguaW11bChXLHV0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKFcsYnQpfDApKyh5Pj4+MTMpfDApKyhmdD4+PjI2KXwwLGZ0Jj02NzEwODg2MyxnPU1hdGguaW11bChDdCx3dCkseT0oeT1NYXRoLmltdWwoQ3QseHQpKStNYXRoLmltdWwoX3Qsd3QpfDAsTT1NYXRoLmltdWwoX3QseHQpLGc9ZytNYXRoLmltdWwoZHQsTnQpfDAseT0oeT15K01hdGguaW11bChkdCxrdCl8MCkrTWF0aC5pbXVsKG10LE50KXwwLE09TStNYXRoLmltdWwobXQsa3QpfDAsZz1nK01hdGguaW11bChzdCxXdCl8MCx5PSh5PXkrTWF0aC5pbXVsKHN0LFB0KXwwKStNYXRoLmltdWwob3QsV3QpfDAsTT1NK01hdGguaW11bChvdCxQdCl8MCxnPWcrTWF0aC5pbXVsKEcsR3QpfDAseT0oeT15K01hdGguaW11bChHLEx0KXwwKStNYXRoLmltdWwoUSxHdCl8MCxNPU0rTWF0aC5pbXVsKFEsTHQpfDAsZz1nK01hdGguaW11bChZLG9lKXwwLHk9KHk9eStNYXRoLmltdWwoWSx6dCl8MCkrTWF0aC5pbXVsKEosb2UpfDAsTT1NK01hdGguaW11bChKLHp0KXwwLGc9ZytNYXRoLmltdWwoWixsZSl8MCx5PSh5PXkrTWF0aC5pbXVsKFosVnQpfDApK01hdGguaW11bChWLGxlKXwwLE09TStNYXRoLmltdWwoVixWdCl8MCxnPWcrTWF0aC5pbXVsKHgsdXQpfDAseT0oeT15K01hdGguaW11bCh4LGJ0KXwwKStNYXRoLmltdWwoSSx1dCl8MCxNPU0rTWF0aC5pbXVsKEksYnQpfDA7dmFyIGd0PSgkKyhnPWcrTWF0aC5pbXVsKGosRHQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChqLEF0KXwwKStNYXRoLmltdWwoVyxEdCl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChXLEF0KXwwKSsoeT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsZz1NYXRoLmltdWwoY3Qsd3QpLHk9KHk9TWF0aC5pbXVsKGN0LHh0KSkrTWF0aC5pbXVsKGV0LHd0KXwwLE09TWF0aC5pbXVsKGV0LHh0KSxnPWcrTWF0aC5pbXVsKEN0LE50KXwwLHk9KHk9eStNYXRoLmltdWwoQ3Qsa3QpfDApK01hdGguaW11bChfdCxOdCl8MCxNPU0rTWF0aC5pbXVsKF90LGt0KXwwLGc9ZytNYXRoLmltdWwoZHQsV3QpfDAseT0oeT15K01hdGguaW11bChkdCxQdCl8MCkrTWF0aC5pbXVsKG10LFd0KXwwLE09TStNYXRoLmltdWwobXQsUHQpfDAsZz1nK01hdGguaW11bChzdCxHdCl8MCx5PSh5PXkrTWF0aC5pbXVsKHN0LEx0KXwwKStNYXRoLmltdWwob3QsR3QpfDAsTT1NK01hdGguaW11bChvdCxMdCl8MCxnPWcrTWF0aC5pbXVsKEcsb2UpfDAseT0oeT15K01hdGguaW11bChHLHp0KXwwKStNYXRoLmltdWwoUSxvZSl8MCxNPU0rTWF0aC5pbXVsKFEsenQpfDAsZz1nK01hdGguaW11bChZLGxlKXwwLHk9KHk9eStNYXRoLmltdWwoWSxWdCl8MCkrTWF0aC5pbXVsKEosbGUpfDAsTT1NK01hdGguaW11bChKLFZ0KXwwLGc9ZytNYXRoLmltdWwoWix1dCl8MCx5PSh5PXkrTWF0aC5pbXVsKFosYnQpfDApK01hdGguaW11bChWLHV0KXwwLE09TStNYXRoLmltdWwoVixidCl8MCxnPWcrTWF0aC5pbXVsKHgsRHQpfDAseT0oeT15K01hdGguaW11bCh4LEF0KXwwKStNYXRoLmltdWwoSSxEdCl8MCxNPU0rTWF0aC5pbXVsKEksQXQpfDA7dmFyIHZ0PSgkKyhnPWcrTWF0aC5pbXVsKGosQnQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChqLEl0KXwwKStNYXRoLmltdWwoVyxCdCl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChXLEl0KXwwKSsoeT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsZz1NYXRoLmltdWwocHQsd3QpLHk9KHk9TWF0aC5pbXVsKHB0LHh0KSkrTWF0aC5pbXVsKGF0LHd0KXwwLE09TWF0aC5pbXVsKGF0LHh0KSxnPWcrTWF0aC5pbXVsKGN0LE50KXwwLHk9KHk9eStNYXRoLmltdWwoY3Qsa3QpfDApK01hdGguaW11bChldCxOdCl8MCxNPU0rTWF0aC5pbXVsKGV0LGt0KXwwLGc9ZytNYXRoLmltdWwoQ3QsV3QpfDAseT0oeT15K01hdGguaW11bChDdCxQdCl8MCkrTWF0aC5pbXVsKF90LFd0KXwwLE09TStNYXRoLmltdWwoX3QsUHQpfDAsZz1nK01hdGguaW11bChkdCxHdCl8MCx5PSh5PXkrTWF0aC5pbXVsKGR0LEx0KXwwKStNYXRoLmltdWwobXQsR3QpfDAsTT1NK01hdGguaW11bChtdCxMdCl8MCxnPWcrTWF0aC5pbXVsKHN0LG9lKXwwLHk9KHk9eStNYXRoLmltdWwoc3QsenQpfDApK01hdGguaW11bChvdCxvZSl8MCxNPU0rTWF0aC5pbXVsKG90LHp0KXwwLGc9ZytNYXRoLmltdWwoRyxsZSl8MCx5PSh5PXkrTWF0aC5pbXVsKEcsVnQpfDApK01hdGguaW11bChRLGxlKXwwLE09TStNYXRoLmltdWwoUSxWdCl8MCxnPWcrTWF0aC5pbXVsKFksdXQpfDAseT0oeT15K01hdGguaW11bChZLGJ0KXwwKStNYXRoLmltdWwoSix1dCl8MCxNPU0rTWF0aC5pbXVsKEosYnQpfDAsZz1nK01hdGguaW11bChaLER0KXwwLHk9KHk9eStNYXRoLmltdWwoWixBdCl8MCkrTWF0aC5pbXVsKFYsRHQpfDAsTT1NK01hdGguaW11bChWLEF0KXwwLGc9ZytNYXRoLmltdWwoeCxCdCl8MCx5PSh5PXkrTWF0aC5pbXVsKHgsSXQpfDApK01hdGguaW11bChJLEJ0KXwwLE09TStNYXRoLmltdWwoSSxJdCl8MDt2YXIgUnQ9KCQrKGc9ZytNYXRoLmltdWwoaiwkdCl8MCl8MCkrKCg4MTkxJih5PSh5PXkrTWF0aC5pbXVsKGosWnQpfDApK01hdGguaW11bChXLCR0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKFcsWnQpfDApKyh5Pj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxnPU1hdGguaW11bChwdCxOdCkseT0oeT1NYXRoLmltdWwocHQsa3QpKStNYXRoLmltdWwoYXQsTnQpfDAsTT1NYXRoLmltdWwoYXQsa3QpLGc9ZytNYXRoLmltdWwoY3QsV3QpfDAseT0oeT15K01hdGguaW11bChjdCxQdCl8MCkrTWF0aC5pbXVsKGV0LFd0KXwwLE09TStNYXRoLmltdWwoZXQsUHQpfDAsZz1nK01hdGguaW11bChDdCxHdCl8MCx5PSh5PXkrTWF0aC5pbXVsKEN0LEx0KXwwKStNYXRoLmltdWwoX3QsR3QpfDAsTT1NK01hdGguaW11bChfdCxMdCl8MCxnPWcrTWF0aC5pbXVsKGR0LG9lKXwwLHk9KHk9eStNYXRoLmltdWwoZHQsenQpfDApK01hdGguaW11bChtdCxvZSl8MCxNPU0rTWF0aC5pbXVsKG10LHp0KXwwLGc9ZytNYXRoLmltdWwoc3QsbGUpfDAseT0oeT15K01hdGguaW11bChzdCxWdCl8MCkrTWF0aC5pbXVsKG90LGxlKXwwLE09TStNYXRoLmltdWwob3QsVnQpfDAsZz1nK01hdGguaW11bChHLHV0KXwwLHk9KHk9eStNYXRoLmltdWwoRyxidCl8MCkrTWF0aC5pbXVsKFEsdXQpfDAsTT1NK01hdGguaW11bChRLGJ0KXwwLGc9ZytNYXRoLmltdWwoWSxEdCl8MCx5PSh5PXkrTWF0aC5pbXVsKFksQXQpfDApK01hdGguaW11bChKLER0KXwwLE09TStNYXRoLmltdWwoSixBdCl8MCxnPWcrTWF0aC5pbXVsKFosQnQpfDAseT0oeT15K01hdGguaW11bChaLEl0KXwwKStNYXRoLmltdWwoVixCdCl8MCxNPU0rTWF0aC5pbXVsKFYsSXQpfDA7dmFyIFN0PSgkKyhnPWcrTWF0aC5pbXVsKHgsJHQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bCh4LFp0KXwwKStNYXRoLmltdWwoSSwkdCl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChJLFp0KXwwKSsoeT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsZz1NYXRoLmltdWwocHQsV3QpLHk9KHk9TWF0aC5pbXVsKHB0LFB0KSkrTWF0aC5pbXVsKGF0LFd0KXwwLE09TWF0aC5pbXVsKGF0LFB0KSxnPWcrTWF0aC5pbXVsKGN0LEd0KXwwLHk9KHk9eStNYXRoLmltdWwoY3QsTHQpfDApK01hdGguaW11bChldCxHdCl8MCxNPU0rTWF0aC5pbXVsKGV0LEx0KXwwLGc9ZytNYXRoLmltdWwoQ3Qsb2UpfDAseT0oeT15K01hdGguaW11bChDdCx6dCl8MCkrTWF0aC5pbXVsKF90LG9lKXwwLE09TStNYXRoLmltdWwoX3QsenQpfDAsZz1nK01hdGguaW11bChkdCxsZSl8MCx5PSh5PXkrTWF0aC5pbXVsKGR0LFZ0KXwwKStNYXRoLmltdWwobXQsbGUpfDAsTT1NK01hdGguaW11bChtdCxWdCl8MCxnPWcrTWF0aC5pbXVsKHN0LHV0KXwwLHk9KHk9eStNYXRoLmltdWwoc3QsYnQpfDApK01hdGguaW11bChvdCx1dCl8MCxNPU0rTWF0aC5pbXVsKG90LGJ0KXwwLGc9ZytNYXRoLmltdWwoRyxEdCl8MCx5PSh5PXkrTWF0aC5pbXVsKEcsQXQpfDApK01hdGguaW11bChRLER0KXwwLE09TStNYXRoLmltdWwoUSxBdCl8MCxnPWcrTWF0aC5pbXVsKFksQnQpfDAseT0oeT15K01hdGguaW11bChZLEl0KXwwKStNYXRoLmltdWwoSixCdCl8MCxNPU0rTWF0aC5pbXVsKEosSXQpfDA7dmFyIFR0PSgkKyhnPWcrTWF0aC5pbXVsKFosJHQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChaLFp0KXwwKStNYXRoLmltdWwoViwkdCl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChWLFp0KXwwKSsoeT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsZz1NYXRoLmltdWwocHQsR3QpLHk9KHk9TWF0aC5pbXVsKHB0LEx0KSkrTWF0aC5pbXVsKGF0LEd0KXwwLE09TWF0aC5pbXVsKGF0LEx0KSxnPWcrTWF0aC5pbXVsKGN0LG9lKXwwLHk9KHk9eStNYXRoLmltdWwoY3QsenQpfDApK01hdGguaW11bChldCxvZSl8MCxNPU0rTWF0aC5pbXVsKGV0LHp0KXwwLGc9ZytNYXRoLmltdWwoQ3QsbGUpfDAseT0oeT15K01hdGguaW11bChDdCxWdCl8MCkrTWF0aC5pbXVsKF90LGxlKXwwLE09TStNYXRoLmltdWwoX3QsVnQpfDAsZz1nK01hdGguaW11bChkdCx1dCl8MCx5PSh5PXkrTWF0aC5pbXVsKGR0LGJ0KXwwKStNYXRoLmltdWwobXQsdXQpfDAsTT1NK01hdGguaW11bChtdCxidCl8MCxnPWcrTWF0aC5pbXVsKHN0LER0KXwwLHk9KHk9eStNYXRoLmltdWwoc3QsQXQpfDApK01hdGguaW11bChvdCxEdCl8MCxNPU0rTWF0aC5pbXVsKG90LEF0KXwwLGc9ZytNYXRoLmltdWwoRyxCdCl8MCx5PSh5PXkrTWF0aC5pbXVsKEcsSXQpfDApK01hdGguaW11bChRLEJ0KXwwLE09TStNYXRoLmltdWwoUSxJdCl8MDt2YXIgUXQ9KCQrKGc9ZytNYXRoLmltdWwoWSwkdCl8MCl8MCkrKCg4MTkxJih5PSh5PXkrTWF0aC5pbXVsKFksWnQpfDApK01hdGguaW11bChKLCR0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKEosWnQpfDApKyh5Pj4+MTMpfDApKyhRdD4+PjI2KXwwLFF0Jj02NzEwODg2MyxnPU1hdGguaW11bChwdCxvZSkseT0oeT1NYXRoLmltdWwocHQsenQpKStNYXRoLmltdWwoYXQsb2UpfDAsTT1NYXRoLmltdWwoYXQsenQpLGc9ZytNYXRoLmltdWwoY3QsbGUpfDAseT0oeT15K01hdGguaW11bChjdCxWdCl8MCkrTWF0aC5pbXVsKGV0LGxlKXwwLE09TStNYXRoLmltdWwoZXQsVnQpfDAsZz1nK01hdGguaW11bChDdCx1dCl8MCx5PSh5PXkrTWF0aC5pbXVsKEN0LGJ0KXwwKStNYXRoLmltdWwoX3QsdXQpfDAsTT1NK01hdGguaW11bChfdCxidCl8MCxnPWcrTWF0aC5pbXVsKGR0LER0KXwwLHk9KHk9eStNYXRoLmltdWwoZHQsQXQpfDApK01hdGguaW11bChtdCxEdCl8MCxNPU0rTWF0aC5pbXVsKG10LEF0KXwwLGc9ZytNYXRoLmltdWwoc3QsQnQpfDAseT0oeT15K01hdGguaW11bChzdCxJdCl8MCkrTWF0aC5pbXVsKG90LEJ0KXwwLE09TStNYXRoLmltdWwob3QsSXQpfDA7dmFyIFh0PSgkKyhnPWcrTWF0aC5pbXVsKEcsJHQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChHLFp0KXwwKStNYXRoLmltdWwoUSwkdCl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChRLFp0KXwwKSsoeT4+PjEzKXwwKSsoWHQ+Pj4yNil8MCxYdCY9NjcxMDg4NjMsZz1NYXRoLmltdWwocHQsbGUpLHk9KHk9TWF0aC5pbXVsKHB0LFZ0KSkrTWF0aC5pbXVsKGF0LGxlKXwwLE09TWF0aC5pbXVsKGF0LFZ0KSxnPWcrTWF0aC5pbXVsKGN0LHV0KXwwLHk9KHk9eStNYXRoLmltdWwoY3QsYnQpfDApK01hdGguaW11bChldCx1dCl8MCxNPU0rTWF0aC5pbXVsKGV0LGJ0KXwwLGc9ZytNYXRoLmltdWwoQ3QsRHQpfDAseT0oeT15K01hdGguaW11bChDdCxBdCl8MCkrTWF0aC5pbXVsKF90LER0KXwwLE09TStNYXRoLmltdWwoX3QsQXQpfDAsZz1nK01hdGguaW11bChkdCxCdCl8MCx5PSh5PXkrTWF0aC5pbXVsKGR0LEl0KXwwKStNYXRoLmltdWwobXQsQnQpfDAsTT1NK01hdGguaW11bChtdCxJdCl8MDt2YXIgWXQ9KCQrKGc9ZytNYXRoLmltdWwoc3QsJHQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChzdCxadCl8MCkrTWF0aC5pbXVsKG90LCR0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKG90LFp0KXwwKSsoeT4+PjEzKXwwKSsoWXQ+Pj4yNil8MCxZdCY9NjcxMDg4NjMsZz1NYXRoLmltdWwocHQsdXQpLHk9KHk9TWF0aC5pbXVsKHB0LGJ0KSkrTWF0aC5pbXVsKGF0LHV0KXwwLE09TWF0aC5pbXVsKGF0LGJ0KSxnPWcrTWF0aC5pbXVsKGN0LER0KXwwLHk9KHk9eStNYXRoLmltdWwoY3QsQXQpfDApK01hdGguaW11bChldCxEdCl8MCxNPU0rTWF0aC5pbXVsKGV0LEF0KXwwLGc9ZytNYXRoLmltdWwoQ3QsQnQpfDAseT0oeT15K01hdGguaW11bChDdCxJdCl8MCkrTWF0aC5pbXVsKF90LEJ0KXwwLE09TStNYXRoLmltdWwoX3QsSXQpfDA7dmFyIEZ0PSgkKyhnPWcrTWF0aC5pbXVsKGR0LCR0KXwwKXwwKSsoKDgxOTEmKHk9KHk9eStNYXRoLmltdWwoZHQsWnQpfDApK01hdGguaW11bChtdCwkdCl8MCkpPDwxMyl8MDskPSgoTT1NK01hdGguaW11bChtdCxadCl8MCkrKHk+Pj4xMyl8MCkrKEZ0Pj4+MjYpfDAsRnQmPTY3MTA4ODYzLGc9TWF0aC5pbXVsKHB0LER0KSx5PSh5PU1hdGguaW11bChwdCxBdCkpK01hdGguaW11bChhdCxEdCl8MCxNPU1hdGguaW11bChhdCxBdCksZz1nK01hdGguaW11bChjdCxCdCl8MCx5PSh5PXkrTWF0aC5pbXVsKGN0LEl0KXwwKStNYXRoLmltdWwoZXQsQnQpfDAsTT1NK01hdGguaW11bChldCxJdCl8MDt2YXIgaWU9KCQrKGc9ZytNYXRoLmltdWwoQ3QsJHQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChDdCxadCl8MCkrTWF0aC5pbXVsKF90LCR0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKF90LFp0KXwwKSsoeT4+PjEzKXwwKSsoaWU+Pj4yNil8MCxpZSY9NjcxMDg4NjMsZz1NYXRoLmltdWwocHQsQnQpLHk9KHk9TWF0aC5pbXVsKHB0LEl0KSkrTWF0aC5pbXVsKGF0LEJ0KXwwLE09TWF0aC5pbXVsKGF0LEl0KTt2YXIgc2U9KCQrKGc9ZytNYXRoLmltdWwoY3QsJHQpfDApfDApKygoODE5MSYoeT0oeT15K01hdGguaW11bChjdCxadCl8MCkrTWF0aC5pbXVsKGV0LCR0KXwwKSk8PDEzKXwwOyQ9KChNPU0rTWF0aC5pbXVsKGV0LFp0KXwwKSsoeT4+PjEzKXwwKSsoc2U+Pj4yNil8MCxzZSY9NjcxMDg4NjM7dmFyIHVlPSgkKyhnPU1hdGguaW11bChwdCwkdCkpfDApKygoODE5MSYoeT0oeT1NYXRoLmltdWwocHQsWnQpKStNYXRoLmltdWwoYXQsJHQpfDApKTw8MTMpfDA7cmV0dXJuICQ9KChNPU1hdGguaW11bChhdCxadCkpKyh5Pj4+MTMpfDApKyh1ZT4+PjI2KXwwLHVlJj02NzEwODg2Myx6WzBdPWhlLHpbMV09ZmUselsyXT1kZSx6WzNdPXBlLHpbNF09Z2Usels1XT10dCx6WzZdPWZ0LHpbN109Z3Qsels4XT12dCx6WzldPVJ0LHpbMTBdPVN0LHpbMTFdPVR0LHpbMTJdPVF0LHpbMTNdPVh0LHpbMTRdPVl0LHpbMTVdPUZ0LHpbMTZdPWllLHpbMTddPXNlLHpbMThdPXVlLCQhPT0wJiYoelsxOV09JCxiLmxlbmd0aCsrKSxifTtmdW5jdGlvbiBBKHYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVedi5uZWdhdGl2ZSxiLmxlbmd0aD12Lmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIGc9MCx5PTAsTT0wO008Yi5sZW5ndGgtMTtNKyspe3ZhciBPPXk7eT0wO2Zvcih2YXIgUj02NzEwODg2MyZnLHo9TWF0aC5taW4oTSxwLmxlbmd0aC0xKSwkPU1hdGgubWF4KDAsTS12Lmxlbmd0aCsxKTskPD16OyQrKyl7dmFyIFg9TS0kLGo9KDB8di53b3Jkc1tYXSkqKDB8cC53b3Jkc1skXSksVz02NzEwODg2MyZqO1I9NjcxMDg4NjMmKFc9VytSfDApLHkrPShPPShPPU8rKGovNjcxMDg4NjR8MCl8MCkrKFc+Pj4yNil8MCk+Pj4yNixPJj02NzEwODg2M31iLndvcmRzW01dPVIsZz1PLE89eX1yZXR1cm4gZyE9PTA/Yi53b3Jkc1tNXT1nOmIubGVuZ3RoLS0sYi5fc3RyaXAoKX1mdW5jdGlvbiBQKHYscCxiKXtyZXR1cm4gQSh2LHAsYil9TWF0aC5pbXVsfHwoXz13KSx0LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih2LHApe3ZhciBiPXRoaXMubGVuZ3RoK3YubGVuZ3RoO3JldHVybiB0aGlzLmxlbmd0aD09PTEwJiZ2Lmxlbmd0aD09PTEwP18odGhpcyx2LHApOmI8NjM/dyh0aGlzLHYscCk6YjwxMDI0P0EodGhpcyx2LHApOlAodGhpcyx2LHApfSx0LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odil7dmFyIHA9bmV3IHQobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3YubGVuZ3RoKSx0aGlzLm11bFRvKHYscCl9LHQucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odil7dmFyIHA9bmV3IHQobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3YubGVuZ3RoKSxQKHRoaXMsdixwKX0sdC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHYsdGhpcyl9LHQucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHYpe3ZhciBwPXY8MDtwJiYodj0tdiksbyh0eXBlb2Ygdj09Im51bWJlciIpLG8odjw2NzEwODg2NCk7Zm9yKHZhciBiPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgeT0oMHx0aGlzLndvcmRzW2ddKSp2LE09KDY3MTA4ODYzJnkpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9eS82NzEwODg2NHwwLGIrPU0+Pj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJk19cmV0dXJuIGIhPT0wJiYodGhpcy53b3Jkc1tnXT1iLHRoaXMubGVuZ3RoKyspLHA/dGhpcy5pbmVnKCk6dGhpc30sdC5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHYpfSx0LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHQucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHQucHJvdG90eXBlLnBvdz1mdW5jdGlvbih2KXt2YXIgcD1mdW5jdGlvbihNKXtmb3IodmFyIE89bmV3IEFycmF5KE0uYml0TGVuZ3RoKCkpLFI9MDtSPE8ubGVuZ3RoO1IrKyl7dmFyIHo9Ui8yNnwwLCQ9UiUyNjtPW1JdPU0ud29yZHNbel0+Pj4kJjF9cmV0dXJuIE99KHYpO2lmKHAubGVuZ3RoPT09MClyZXR1cm4gbmV3IHQoMSk7Zm9yKHZhciBiPXRoaXMsZz0wO2c8cC5sZW5ndGgmJnBbZ109PT0wO2crKyxiPWIuc3FyKCkpO2lmKCsrZzxwLmxlbmd0aClmb3IodmFyIHk9Yi5zcXIoKTtnPHAubGVuZ3RoO2crKyx5PXkuc3FyKCkpcFtnXSE9PTAmJihiPWIubXVsKHkpKTtyZXR1cm4gYn0sdC5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHYpe28odHlwZW9mIHY9PSJudW1iZXIiJiZ2Pj0wKTt2YXIgcCxiPXYlMjYsZz0odi1iKS8yNix5PTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZihiIT09MCl7dmFyIE09MDtmb3IocD0wO3A8dGhpcy5sZW5ndGg7cCsrKXt2YXIgTz10aGlzLndvcmRzW3BdJnksUj0oMHx0aGlzLndvcmRzW3BdKS1PPDxiO3RoaXMud29yZHNbcF09UnxNLE09Tz4+PjI2LWJ9TSYmKHRoaXMud29yZHNbcF09TSx0aGlzLmxlbmd0aCsrKX1pZihnIT09MCl7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wO3AtLSl0aGlzLndvcmRzW3ArZ109dGhpcy53b3Jkc1twXTtmb3IocD0wO3A8ZztwKyspdGhpcy53b3Jkc1twXT0wO3RoaXMubGVuZ3RoKz1nfXJldHVybiB0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih2KXtyZXR1cm4gbyh0aGlzLm5lZ2F0aXZlPT09MCksdGhpcy5pdXNobG4odil9LHQucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih2LHAsYil7dmFyIGc7byh0eXBlb2Ygdj09Im51bWJlciImJnY+PTApLGc9cD8ocC1wJTI2KS8yNjowO3ZhciB5PXYlMjYsTT1NYXRoLm1pbigodi15KS8yNix0aGlzLmxlbmd0aCksTz02NzEwODg2M142NzEwODg2Mz4+Pnk8PHksUj1iO2lmKGctPU0sZz1NYXRoLm1heCgwLGcpLFIpe2Zvcih2YXIgej0wO3o8TTt6KyspUi53b3Jkc1t6XT10aGlzLndvcmRzW3pdO1IubGVuZ3RoPU19aWYoTSE9PTApaWYodGhpcy5sZW5ndGg+TSlmb3IodGhpcy5sZW5ndGgtPU0sej0wO3o8dGhpcy5sZW5ndGg7eisrKXRoaXMud29yZHNbel09dGhpcy53b3Jkc1t6K01dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyICQ9MDtmb3Ioej10aGlzLmxlbmd0aC0xO3o+PTAmJigkIT09MHx8ej49Zyk7ei0tKXt2YXIgWD0wfHRoaXMud29yZHNbel07dGhpcy53b3Jkc1t6XT0kPDwyNi15fFg+Pj55LCQ9WCZPfXJldHVybiBSJiYkIT09MCYmKFIud29yZHNbUi5sZW5ndGgrK109JCksdGhpcy5sZW5ndGg9PT0wJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHYscCxiKXtyZXR1cm4gbyh0aGlzLm5lZ2F0aXZlPT09MCksdGhpcy5pdXNocm4odixwLGIpfSx0LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odil9LHQucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHYpfSx0LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odil9LHQucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHYpfSx0LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih2KXtvKHR5cGVvZiB2PT0ibnVtYmVyIiYmdj49MCk7dmFyIHA9diUyNixiPSh2LXApLzI2LGc9MTw8cDtyZXR1cm4hKHRoaXMubGVuZ3RoPD1iKSYmISEodGhpcy53b3Jkc1tiXSZnKX0sdC5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHYpe28odHlwZW9mIHY9PSJudW1iZXIiJiZ2Pj0wKTt2YXIgcD12JTI2LGI9KHYtcCkvMjY7aWYobyh0aGlzLm5lZ2F0aXZlPT09MCwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PWIpcmV0dXJuIHRoaXM7aWYocCE9PTAmJmIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihiLHRoaXMubGVuZ3RoKSxwIT09MCl7dmFyIGc9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWd9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHQucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHYpfSx0LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih2KXtyZXR1cm4gbyh0eXBlb2Ygdj09Im51bWJlciIpLG8odjw2NzEwODg2NCksdjwwP3RoaXMuaXN1Ym4oLXYpOnRoaXMubmVnYXRpdmUhPT0wP3RoaXMubGVuZ3RoPT09MSYmKDB8dGhpcy53b3Jkc1swXSk8PXY/KHRoaXMud29yZHNbMF09di0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHYpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih2KX0sdC5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHYpe3RoaXMud29yZHNbMF0rPXY7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1twXT49NjcxMDg4NjQ7cCsrKXRoaXMud29yZHNbcF0tPTY3MTA4ODY0LHA9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbcCsxXT0xOnRoaXMud29yZHNbcCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxwKzEpLHRoaXN9LHQucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHYpe2lmKG8odHlwZW9mIHY9PSJudW1iZXIiKSxvKHY8NjcxMDg4NjQpLHY8MClyZXR1cm4gdGhpcy5pYWRkbigtdik7aWYodGhpcy5uZWdhdGl2ZSE9PTApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHYpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXYsdGhpcy5sZW5ndGg9PT0xJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3BdPDA7cCsrKXRoaXMud29yZHNbcF0rPTY3MTA4ODY0LHRoaXMud29yZHNbcCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdC5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHYpfSx0LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odil9LHQucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHQucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx0LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odixwLGIpe3ZhciBnLHksTT12Lmxlbmd0aCtiO3RoaXMuX2V4cGFuZChNKTt2YXIgTz0wO2ZvcihnPTA7Zzx2Lmxlbmd0aDtnKyspe3k9KDB8dGhpcy53b3Jkc1tnK2JdKStPO3ZhciBSPSgwfHYud29yZHNbZ10pKnA7Tz0oKHktPTY3MTA4ODYzJlIpPj4yNiktKFIvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK2JdPTY3MTA4ODYzJnl9Zm9yKDtnPHRoaXMubGVuZ3RoLWI7ZysrKU89KHk9KDB8dGhpcy53b3Jkc1tnK2JdKStPKT4+MjYsdGhpcy53b3Jkc1tnK2JdPTY3MTA4ODYzJnk7aWYoTz09PTApcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKG8oTz09PS0xKSxPPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKU89KHk9LSgwfHRoaXMud29yZHNbZ10pK08pPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJnk7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSx0LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih2LHApe3ZhciBiPSh0aGlzLmxlbmd0aCx2Lmxlbmd0aCksZz10aGlzLmNsb25lKCkseT12LE09MHx5LndvcmRzW3kubGVuZ3RoLTFdOyhiPTI2LXRoaXMuX2NvdW50Qml0cyhNKSkhPT0wJiYoeT15LnVzaGxuKGIpLGcuaXVzaGxuKGIpLE09MHx5LndvcmRzW3kubGVuZ3RoLTFdKTt2YXIgTyxSPWcubGVuZ3RoLXkubGVuZ3RoO2lmKHAhPT0ibW9kIil7KE89bmV3IHQobnVsbCkpLmxlbmd0aD1SKzEsTy53b3Jkcz1uZXcgQXJyYXkoTy5sZW5ndGgpO2Zvcih2YXIgej0wO3o8Ty5sZW5ndGg7eisrKU8ud29yZHNbel09MH12YXIgJD1nLmNsb25lKCkuX2lzaGxuc3VibXVsKHksMSxSKTskLm5lZ2F0aXZlPT09MCYmKGc9JCxPJiYoTy53b3Jkc1tSXT0xKSk7Zm9yKHZhciBYPVItMTtYPj0wO1gtLSl7dmFyIGo9NjcxMDg4NjQqKDB8Zy53b3Jkc1t5Lmxlbmd0aCtYXSkrKDB8Zy53b3Jkc1t5Lmxlbmd0aCtYLTFdKTtmb3Ioaj1NYXRoLm1pbihqL018MCw2NzEwODg2MyksZy5faXNobG5zdWJtdWwoeSxqLFgpO2cubmVnYXRpdmUhPT0wOylqLS0sZy5uZWdhdGl2ZT0wLGcuX2lzaGxuc3VibXVsKHksMSxYKSxnLmlzWmVybygpfHwoZy5uZWdhdGl2ZV49MSk7TyYmKE8ud29yZHNbWF09ail9cmV0dXJuIE8mJk8uX3N0cmlwKCksZy5fc3RyaXAoKSxwIT09ImRpdiImJmIhPT0wJiZnLml1c2hybihiKSx7ZGl2Ok98fG51bGwsbW9kOmd9fSx0LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odixwLGIpe3JldHVybiBvKCF2LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHQoMCksbW9kOm5ldyB0KDApfTp0aGlzLm5lZ2F0aXZlIT09MCYmdi5uZWdhdGl2ZT09PTA/KE09dGhpcy5uZWcoKS5kaXZtb2QodixwKSxwIT09Im1vZCImJihnPU0uZGl2Lm5lZygpKSxwIT09ImRpdiImJih5PU0ubW9kLm5lZygpLGImJnkubmVnYXRpdmUhPT0wJiZ5LmlhZGQodikpLHtkaXY6Zyxtb2Q6eX0pOnRoaXMubmVnYXRpdmU9PT0wJiZ2Lm5lZ2F0aXZlIT09MD8oTT10aGlzLmRpdm1vZCh2Lm5lZygpLHApLHAhPT0ibW9kIiYmKGc9TS5kaXYubmVnKCkpLHtkaXY6Zyxtb2Q6TS5tb2R9KTp0aGlzLm5lZ2F0aXZlJnYubmVnYXRpdmU/KE09dGhpcy5uZWcoKS5kaXZtb2Qodi5uZWcoKSxwKSxwIT09ImRpdiImJih5PU0ubW9kLm5lZygpLGImJnkubmVnYXRpdmUhPT0wJiZ5LmlzdWIodikpLHtkaXY6TS5kaXYsbW9kOnl9KTp2Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodik8MD97ZGl2Om5ldyB0KDApLG1vZDp0aGlzfTp2Lmxlbmd0aD09PTE/cD09PSJkaXYiP3tkaXY6dGhpcy5kaXZuKHYud29yZHNbMF0pLG1vZDpudWxsfTpwPT09Im1vZCI/e2RpdjpudWxsLG1vZDpuZXcgdCh0aGlzLm1vZHJuKHYud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odi53b3Jkc1swXSksbW9kOm5ldyB0KHRoaXMubW9kcm4odi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHYscCk7dmFyIGcseSxNfSx0LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuZGl2bW9kKHYsImRpdiIsITEpLmRpdn0sdC5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmRpdm1vZCh2LCJtb2QiLCExKS5tb2R9LHQucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuZGl2bW9kKHYsIm1vZCIsITApLm1vZH0sdC5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odil7dmFyIHA9dGhpcy5kaXZtb2Qodik7aWYocC5tb2QuaXNaZXJvKCkpcmV0dXJuIHAuZGl2O3ZhciBiPXAuZGl2Lm5lZ2F0aXZlIT09MD9wLm1vZC5pc3ViKHYpOnAubW9kLGc9di51c2hybigxKSx5PXYuYW5kbG4oMSksTT1iLmNtcChnKTtyZXR1cm4gTTwwfHx5PT09MSYmTT09PTA/cC5kaXY6cC5kaXYubmVnYXRpdmUhPT0wP3AuZGl2LmlzdWJuKDEpOnAuZGl2LmlhZGRuKDEpfSx0LnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbih2KXt2YXIgcD12PDA7cCYmKHY9LXYpLG8odjw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXYsZz0wLHk9dGhpcy5sZW5ndGgtMTt5Pj0wO3ktLSlnPShiKmcrKDB8dGhpcy53b3Jkc1t5XSkpJXY7cmV0dXJuIHA/LWc6Z30sdC5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5tb2Rybih2KX0sdC5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odil7dmFyIHA9djwwO3AmJih2PS12KSxvKHY8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCxnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pe3ZhciB5PSgwfHRoaXMud29yZHNbZ10pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1tnXT15L3Z8MCxiPXkldn1yZXR1cm4gdGhpcy5fc3RyaXAoKSxwP3RoaXMuaW5lZygpOnRoaXN9LHQucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih2KX0sdC5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih2KXtvKHYubmVnYXRpdmU9PT0wKSxvKCF2LmlzWmVybygpKTt2YXIgcD10aGlzLGI9di5jbG9uZSgpO3A9cC5uZWdhdGl2ZSE9PTA/cC51bW9kKHYpOnAuY2xvbmUoKTtmb3IodmFyIGc9bmV3IHQoMSkseT1uZXcgdCgwKSxNPW5ldyB0KDApLE89bmV3IHQoMSksUj0wO3AuaXNFdmVuKCkmJmIuaXNFdmVuKCk7KXAuaXVzaHJuKDEpLGIuaXVzaHJuKDEpLCsrUjtmb3IodmFyIHo9Yi5jbG9uZSgpLCQ9cC5jbG9uZSgpOyFwLmlzWmVybygpOyl7Zm9yKHZhciBYPTAsaj0xOyEocC53b3Jkc1swXSZqKSYmWDwyNjsrK1gsajw8PTEpO2lmKFg+MClmb3IocC5pdXNocm4oWCk7WC0tID4wOykoZy5pc09kZCgpfHx5LmlzT2RkKCkpJiYoZy5pYWRkKHopLHkuaXN1YigkKSksZy5pdXNocm4oMSkseS5pdXNocm4oMSk7Zm9yKHZhciBXPTAsVD0xOyEoYi53b3Jkc1swXSZUKSYmVzwyNjsrK1csVDw8PTEpO2lmKFc+MClmb3IoYi5pdXNocm4oVyk7Vy0tID4wOykoTS5pc09kZCgpfHxPLmlzT2RkKCkpJiYoTS5pYWRkKHopLE8uaXN1YigkKSksTS5pdXNocm4oMSksTy5pdXNocm4oMSk7cC5jbXAoYik+PTA/KHAuaXN1YihiKSxnLmlzdWIoTSkseS5pc3ViKE8pKTooYi5pc3ViKHApLE0uaXN1YihnKSxPLmlzdWIoeSkpfXJldHVybnthOk0sYjpPLGdjZDpiLml1c2hsbihSKX19LHQucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih2KXtvKHYubmVnYXRpdmU9PT0wKSxvKCF2LmlzWmVybygpKTt2YXIgcD10aGlzLGI9di5jbG9uZSgpO3A9cC5uZWdhdGl2ZSE9PTA/cC51bW9kKHYpOnAuY2xvbmUoKTtmb3IodmFyIGcseT1uZXcgdCgxKSxNPW5ldyB0KDApLE89Yi5jbG9uZSgpO3AuY21wbigxKT4wJiZiLmNtcG4oMSk+MDspe2Zvcih2YXIgUj0wLHo9MTshKHAud29yZHNbMF0meikmJlI8MjY7KytSLHo8PD0xKTtpZihSPjApZm9yKHAuaXVzaHJuKFIpO1ItLSA+MDspeS5pc09kZCgpJiZ5LmlhZGQoTykseS5pdXNocm4oMSk7Zm9yKHZhciAkPTAsWD0xOyEoYi53b3Jkc1swXSZYKSYmJDwyNjsrKyQsWDw8PTEpO2lmKCQ+MClmb3IoYi5pdXNocm4oJCk7JC0tID4wOylNLmlzT2RkKCkmJk0uaWFkZChPKSxNLml1c2hybigxKTtwLmNtcChiKT49MD8ocC5pc3ViKGIpLHkuaXN1YihNKSk6KGIuaXN1YihwKSxNLmlzdWIoeSkpfXJldHVybihnPXAuY21wbigxKT09PTA/eTpNKS5jbXBuKDApPDAmJmcuaWFkZCh2KSxnfSx0LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdi5hYnMoKTtpZih2LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBwPXRoaXMuY2xvbmUoKSxiPXYuY2xvbmUoKTtwLm5lZ2F0aXZlPTAsYi5uZWdhdGl2ZT0wO2Zvcih2YXIgZz0wO3AuaXNFdmVuKCkmJmIuaXNFdmVuKCk7ZysrKXAuaXVzaHJuKDEpLGIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtwLmlzRXZlbigpOylwLml1c2hybigxKTtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO3ZhciB5PXAuY21wKGIpO2lmKHk8MCl7dmFyIE09cDtwPWIsYj1NfWVsc2UgaWYoeT09PTB8fGIuY21wbigxKT09PTApYnJlYWs7cC5pc3ViKGIpfXJldHVybiBiLml1c2hsbihnKX0sdC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5lZ2NkKHYpLmEudW1vZCh2KX0sdC5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuKDEmdGhpcy53b3Jkc1swXSk9PTB9LHQucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuKDEmdGhpcy53b3Jkc1swXSk9PTF9LHQucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLndvcmRzWzBdJnZ9LHQucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHYpe28odHlwZW9mIHY9PSJudW1iZXIiKTt2YXIgcD12JTI2LGI9KHYtcCkvMjYsZz0xPDxwO2lmKHRoaXMubGVuZ3RoPD1iKXJldHVybiB0aGlzLl9leHBhbmQoYisxKSx0aGlzLndvcmRzW2JdfD1nLHRoaXM7Zm9yKHZhciB5PWcsTT1iO3khPT0wJiZNPHRoaXMubGVuZ3RoO00rKyl7dmFyIE89MHx0aGlzLndvcmRzW01dO3k9KE8rPXkpPj4+MjYsTyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tNXT1PfXJldHVybiB5IT09MCYmKHRoaXMud29yZHNbTV09eSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx0LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg9PT0xJiZ0aGlzLndvcmRzWzBdPT09MH0sdC5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih2KXt2YXIgcCxiPXY8MDtpZih0aGlzLm5lZ2F0aXZlIT09MCYmIWIpcmV0dXJuLTE7aWYodGhpcy5uZWdhdGl2ZT09PTAmJmIpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXA9MTtlbHNle2ImJih2PS12KSxvKHY8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBnPTB8dGhpcy53b3Jkc1swXTtwPWc9PT12PzA6Zzx2Py0xOjF9cmV0dXJuIHRoaXMubmVnYXRpdmUhPT0wPzB8LXA6cH0sdC5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHYpe2lmKHRoaXMubmVnYXRpdmUhPT0wJiZ2Lm5lZ2F0aXZlPT09MClyZXR1cm4tMTtpZih0aGlzLm5lZ2F0aXZlPT09MCYmdi5uZWdhdGl2ZSE9PTApcmV0dXJuIDE7dmFyIHA9dGhpcy51Y21wKHYpO3JldHVybiB0aGlzLm5lZ2F0aXZlIT09MD8wfC1wOnB9LHQucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odil7aWYodGhpcy5sZW5ndGg+di5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8di5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBwPTAsYj10aGlzLmxlbmd0aC0xO2I+PTA7Yi0tKXt2YXIgZz0wfHRoaXMud29yZHNbYl0seT0wfHYud29yZHNbYl07aWYoZyE9PXkpe2c8eT9wPS0xOmc+eSYmKHA9MSk7YnJlYWt9fXJldHVybiBwfSx0LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wbih2KT09PTF9LHQucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcCh2KT09PTF9LHQucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wbih2KT49MH0sdC5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcCh2KT49MH0sdC5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcG4odik9PT0tMX0sdC5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wKHYpPT09LTF9LHQucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wbih2KTw9MH0sdC5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcCh2KTw9MH0sdC5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcG4odik9PT0wfSx0LnByb3RvdHlwZS5lcT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbXAodik9PT0wfSx0LnJlZD1mdW5jdGlvbih2KXtyZXR1cm4gbmV3IFModil9LHQucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHYpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG8odGhpcy5uZWdhdGl2ZT09PTAsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHYpfSx0LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdC5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLnJlZD12LHRoaXN9LHQucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHYpe3JldHVybiBvKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHYpfSx0LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odil7cmV0dXJuIG8odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx2KX0sdC5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih2KXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdil9LHQucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih2KXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHYpfSx0LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHYpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx2KX0sdC5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHYpe3JldHVybiBvKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdil9LHQucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih2KXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdiksdGhpcy5yZWQubXVsKHRoaXMsdil9LHQucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odil7cmV0dXJuIG8odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHYpLHRoaXMucmVkLmltdWwodGhpcyx2KX0sdC5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHQucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx0LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdC5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHQucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx0LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odil7cmV0dXJuIG8odGhpcy5yZWQmJiF2LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx2KX07dmFyIEw9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBOKHYscCl7dGhpcy5uYW1lPXYsdGhpcy5wPW5ldyB0KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB0KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBEKCl7Ti5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEYoKXtOLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gVSgpe04uY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBCKCl7Ti5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFModil7aWYodHlwZW9mIHY9PSJzdHJpbmciKXt2YXIgcD10Ll9wcmltZSh2KTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIG8odi5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT12LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBDKHYpe1MuY2FsbCh0aGlzLHYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHQoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9Ti5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB2PW5ldyB0KG51bGwpO3JldHVybiB2LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdn0sTi5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih2KXt2YXIgcCxiPXY7ZG8gdGhpcy5zcGxpdChiLHRoaXMudG1wKSxwPShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKTt3aGlsZShwPnRoaXMubik7dmFyIGc9cDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIGc9PT0wPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Zz4wP2IuaXN1Yih0aGlzLnApOmIuc3RyaXAhPT12b2lkIDA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0sTi5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odixwKXt2Lml1c2hybih0aGlzLm4sMCxwKX0sTi5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odil7cmV0dXJuIHYuaW11bCh0aGlzLmspfSxyKEQsTiksRC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odixwKXtmb3IodmFyIGI9TWF0aC5taW4odi5sZW5ndGgsOSksZz0wO2c8YjtnKyspcC53b3Jkc1tnXT12LndvcmRzW2ddO2lmKHAubGVuZ3RoPWIsdi5sZW5ndGg8PTkpcmV0dXJuIHYud29yZHNbMF09MCx2b2lkKHYubGVuZ3RoPTEpO3ZhciB5PXYud29yZHNbOV07Zm9yKHAud29yZHNbcC5sZW5ndGgrK109NDE5NDMwMyZ5LGc9MTA7Zzx2Lmxlbmd0aDtnKyspe3ZhciBNPTB8di53b3Jkc1tnXTt2LndvcmRzW2ctMTBdPSg0MTk0MzAzJk0pPDw0fHk+Pj4yMix5PU19eT4+Pj0yMix2LndvcmRzW2ctMTBdPXkseT09PTAmJnYubGVuZ3RoPjEwP3YubGVuZ3RoLT0xMDp2Lmxlbmd0aC09OX0sRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odil7di53b3Jkc1t2Lmxlbmd0aF09MCx2LndvcmRzW3YubGVuZ3RoKzFdPTAsdi5sZW5ndGgrPTI7Zm9yKHZhciBwPTAsYj0wO2I8di5sZW5ndGg7YisrKXt2YXIgZz0wfHYud29yZHNbYl07cCs9OTc3Kmcsdi53b3Jkc1tiXT02NzEwODg2MyZwLHA9NjQqZysocC82NzEwODg2NHwwKX1yZXR1cm4gdi53b3Jkc1t2Lmxlbmd0aC0xXT09PTAmJih2Lmxlbmd0aC0tLHYud29yZHNbdi5sZW5ndGgtMV09PT0wJiZ2Lmxlbmd0aC0tKSx2fSxyKEYsTikscihVLE4pLHIoQixOKSxCLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih2KXtmb3IodmFyIHA9MCxiPTA7Yjx2Lmxlbmd0aDtiKyspe3ZhciBnPTE5KigwfHYud29yZHNbYl0pK3AseT02NzEwODg2MyZnO2c+Pj49MjYsdi53b3Jkc1tiXT15LHA9Z31yZXR1cm4gcCE9PTAmJih2LndvcmRzW3YubGVuZ3RoKytdPXApLHZ9LHQuX3ByaW1lPWZ1bmN0aW9uKHYpe2lmKExbdl0pcmV0dXJuIExbdl07dmFyIHA7aWYodj09PSJrMjU2IilwPW5ldyBEO2Vsc2UgaWYodj09PSJwMjI0IilwPW5ldyBGO2Vsc2UgaWYodj09PSJwMTkyIilwPW5ldyBVO2Vsc2V7aWYodiE9PSJwMjU1MTkiKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3YpO3A9bmV3IEJ9cmV0dXJuIExbdl09cCxwfSxTLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih2KXtvKHYubmVnYXRpdmU9PT0wLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8odi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sUy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odixwKXtvKCh2Lm5lZ2F0aXZlfHAubmVnYXRpdmUpPT0wLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG8odi5yZWQmJnYucmVkPT09cC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sUy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodikuX2ZvcmNlUmVkKHRoaXMpOihmKHYsdi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSx2KX0sUy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHYpe3JldHVybiB2LmlzWmVybygpP3YuY2xvbmUoKTp0aGlzLm0uc3ViKHYpLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciBiPXYuYWRkKHApO3JldHVybiBiLmNtcCh0aGlzLm0pPj0wJiZiLmlzdWIodGhpcy5tKSxiLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgYj12LmlhZGQocCk7cmV0dXJuIGIuY21wKHRoaXMubSk+PTAmJmIuaXN1Yih0aGlzLm0pLGJ9LFMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgYj12LnN1YihwKTtyZXR1cm4gYi5jbXBuKDApPDAmJmIuaWFkZCh0aGlzLm0pLGIuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHYscCl7dGhpcy5fdmVyaWZ5Mih2LHApO3ZhciBiPXYuaXN1YihwKTtyZXR1cm4gYi5jbXBuKDApPDAmJmIuaWFkZCh0aGlzLm0pLGJ9LFMucHJvdG90eXBlLnNobD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkxKHYpLHRoaXMuaW1vZCh2LnVzaGxuKHApKX0sUy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkyKHYscCksdGhpcy5pbW9kKHYuaW11bChwKSl9LFMucHJvdG90eXBlLm11bD1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLl92ZXJpZnkyKHYscCksdGhpcy5pbW9kKHYubXVsKHApKX0sUy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5pbXVsKHYsdi5jbG9uZSgpKX0sUy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLm11bCh2LHYpfSxTLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHYpe2lmKHYuaXNaZXJvKCkpcmV0dXJuIHYuY2xvbmUoKTt2YXIgcD10aGlzLm0uYW5kbG4oMyk7aWYobyhwJTI9PTEpLHA9PT0zKXt2YXIgYj10aGlzLm0uYWRkKG5ldyB0KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHYsYil9Zm9yKHZhciBnPXRoaXMubS5zdWJuKDEpLHk9MDshZy5pc1plcm8oKSYmZy5hbmRsbigxKT09PTA7KXkrKyxnLml1c2hybigxKTtvKCFnLmlzWmVybygpKTt2YXIgTT1uZXcgdCgxKS50b1JlZCh0aGlzKSxPPU0ucmVkTmVnKCksUj10aGlzLm0uc3VibigxKS5pdXNocm4oMSksej10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHo9bmV3IHQoMip6KnopLnRvUmVkKHRoaXMpO3RoaXMucG93KHosUikuY21wKE8pIT09MDspei5yZWRJQWRkKE8pO2Zvcih2YXIgJD10aGlzLnBvdyh6LGcpLFg9dGhpcy5wb3codixnLmFkZG4oMSkuaXVzaHJuKDEpKSxqPXRoaXMucG93KHYsZyksVz15O2ouY21wKE0pIT09MDspe2Zvcih2YXIgVD1qLHg9MDtULmNtcChNKSE9PTA7eCsrKVQ9VC5yZWRTcXIoKTtvKHg8Vyk7dmFyIEk9dGhpcy5wb3coJCxuZXcgdCgxKS5pdXNobG4oVy14LTEpKTtYPVgucmVkTXVsKEkpLCQ9SS5yZWRTcXIoKSxqPWoucmVkTXVsKCQpLFc9eH1yZXR1cm4gWH0sUy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXt2YXIgcD12Ll9pbnZtcCh0aGlzLm0pO3JldHVybiBwLm5lZ2F0aXZlIT09MD8ocC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChwKS5yZWROZWcoKSk6dGhpcy5pbW9kKHApfSxTLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odixwKXtpZihwLmlzWmVybygpKXJldHVybiBuZXcgdCgxKS50b1JlZCh0aGlzKTtpZihwLmNtcG4oMSk9PT0wKXJldHVybiB2LmNsb25lKCk7dmFyIGI9bmV3IEFycmF5KDE2KTtiWzBdPW5ldyB0KDEpLnRvUmVkKHRoaXMpLGJbMV09djtmb3IodmFyIGc9MjtnPGIubGVuZ3RoO2crKyliW2ddPXRoaXMubXVsKGJbZy0xXSx2KTt2YXIgeT1iWzBdLE09MCxPPTAsUj1wLmJpdExlbmd0aCgpJTI2O2ZvcihSPT09MCYmKFI9MjYpLGc9cC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB6PXAud29yZHNbZ10sJD1SLTE7JD49MDskLS0pe3ZhciBYPXo+PiQmMTt5IT09YlswXSYmKHk9dGhpcy5zcXIoeSkpLFghPT0wfHxNIT09MD8oTTw8PTEsTXw9WCwoKytPPT09NHx8Zz09PTAmJiQ9PT0wKSYmKHk9dGhpcy5tdWwoeSxiW01dKSxPPTAsTT0wKSk6Tz0wfVI9MjZ9cmV0dXJuIHl9LFMucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih2KXt2YXIgcD12LnVtb2QodGhpcy5tKTtyZXR1cm4gcD09PXY/cC5jbG9uZSgpOnB9LFMucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHYpe3ZhciBwPXYuY2xvbmUoKTtyZXR1cm4gcC5yZWQ9bnVsbCxwfSx0Lm1vbnQ9ZnVuY3Rpb24odil7cmV0dXJuIG5ldyBDKHYpfSxyKEMsUyksQy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmltb2Qodi51c2hsbih0aGlzLnNoaWZ0KSl9LEMucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHYpe3ZhciBwPXRoaXMuaW1vZCh2Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gcC5yZWQ9bnVsbCxwfSxDLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHYscCl7aWYodi5pc1plcm8oKXx8cC5pc1plcm8oKSlyZXR1cm4gdi53b3Jkc1swXT0wLHYubGVuZ3RoPTEsdjt2YXIgYj12LmltdWwocCksZz1iLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx5PWIuaXN1YihnKS5pdXNocm4odGhpcy5zaGlmdCksTT15O3JldHVybiB5LmNtcCh0aGlzLm0pPj0wP009eS5pc3ViKHRoaXMubSk6eS5jbXBuKDApPDAmJihNPXkuaWFkZCh0aGlzLm0pKSxNLl9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHYscCl7aWYodi5pc1plcm8oKXx8cC5pc1plcm8oKSlyZXR1cm4gbmV3IHQoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBiPXYubXVsKHApLGc9Yi5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkseT1iLmlzdWIoZykuaXVzaHJuKHRoaXMuc2hpZnQpLE09eTtyZXR1cm4geS5jbXAodGhpcy5tKT49MD9NPXkuaXN1Yih0aGlzLm0pOnkuY21wbigwKTwwJiYoTT15LmlhZGQodGhpcy5tKSksTS5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmludm09ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuaW1vZCh2Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0pKEU9PT12b2lkIDB8fEUpfSx7YnVmZmVyOjE4OH1dLDE4NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtO2Z1bmN0aW9uIHMocil7dGhpcy5yYW5kPXJ9aWYoRS5leHBvcnRzPWZ1bmN0aW9uKHIpe3JldHVybiBtfHwobT1uZXcgcyhudWxsKSksbS5nZW5lcmF0ZShyKX0sRS5leHBvcnRzLlJhbmQ9cyxzLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmFuZChyKX0scy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24ocil7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMocik7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KHIpLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIHR9LHR5cGVvZiBzZWxmPT0ib2JqZWN0IilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP3MucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHIpe3ZhciB0PW5ldyBVaW50OEFycmF5KHIpO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXModCksdH06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/cy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24ocil7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkocik7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHQpLHR9OnR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiYocy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBvPWEoImNyeXB0byIpO2lmKHR5cGVvZiBvLnJhbmRvbUJ5dGVzIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO3MucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBvLnJhbmRvbUJ5dGVzKHIpfX1jYXRjaHt9fSx7Y3J5cHRvOjE4OH1dLDE4ODpbZnVuY3Rpb24oYSxFLGspe30se31dLDE4OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyO2Z1bmN0aW9uIHMobil7bS5pc0J1ZmZlcihuKXx8KG49bS5mcm9tKG4pKTtmb3IodmFyIGk9bi5sZW5ndGgvNHwwLGY9bmV3IEFycmF5KGkpLGM9MDtjPGk7YysrKWZbY109bi5yZWFkVUludDMyQkUoNCpjKTtyZXR1cm4gZn1mdW5jdGlvbiBvKG4pe2Zvcig7MDxuLmxlbmd0aDtuKyspblswXT0wfWZ1bmN0aW9uIHIobixpLGYsYyx1KXtmb3IodmFyIGQsaCx3LF8sQT1mWzBdLFA9ZlsxXSxMPWZbMl0sTj1mWzNdLEQ9blswXV5pWzBdLEY9blsxXV5pWzFdLFU9blsyXV5pWzJdLEI9blszXV5pWzNdLFM9NCxDPTE7Qzx1O0MrKylkPUFbRD4+PjI0XV5QW0Y+Pj4xNiYyNTVdXkxbVT4+PjgmMjU1XV5OWzI1NSZCXV5pW1MrK10saD1BW0Y+Pj4yNF1eUFtVPj4+MTYmMjU1XV5MW0I+Pj44JjI1NV1eTlsyNTUmRF1eaVtTKytdLHc9QVtVPj4+MjRdXlBbQj4+PjE2JjI1NV1eTFtEPj4+OCYyNTVdXk5bMjU1JkZdXmlbUysrXSxfPUFbQj4+PjI0XV5QW0Q+Pj4xNiYyNTVdXkxbRj4+PjgmMjU1XV5OWzI1NSZVXV5pW1MrK10sRD1kLEY9aCxVPXcsQj1fO3JldHVybiBkPShjW0Q+Pj4yNF08PDI0fGNbRj4+PjE2JjI1NV08PDE2fGNbVT4+PjgmMjU1XTw8OHxjWzI1NSZCXSleaVtTKytdLGg9KGNbRj4+PjI0XTw8MjR8Y1tVPj4+MTYmMjU1XTw8MTZ8Y1tCPj4+OCYyNTVdPDw4fGNbMjU1JkRdKV5pW1MrK10sdz0oY1tVPj4+MjRdPDwyNHxjW0I+Pj4xNiYyNTVdPDwxNnxjW0Q+Pj44JjI1NV08PDh8Y1syNTUmRl0pXmlbUysrXSxfPShjW0I+Pj4yNF08PDI0fGNbRD4+PjE2JjI1NV08PDE2fGNbRj4+PjgmMjU1XTw8OHxjWzI1NSZVXSleaVtTKytdLFtkPj4+PTAsaD4+Pj0wLHc+Pj49MCxfPj4+PTBdfXZhciB0PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxlPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBBcnJheSgyNTYpLGk9MDtpPDI1NjtpKyspbltpXT1pPDEyOD9pPDwxOmk8PDFeMjgzO2Zvcih2YXIgZj1bXSxjPVtdLHU9W1tdLFtdLFtdLFtdXSxkPVtbXSxbXSxbXSxbXV0saD0wLHc9MCxfPTA7XzwyNTY7KytfKXt2YXIgQT13Xnc8PDFedzw8Ml53PDwzXnc8PDQ7QT1BPj4+OF4yNTUmQV45OSxmW2hdPUEsY1tBXT1oO3ZhciBQPW5baF0sTD1uW1BdLE49bltMXSxEPTI1NypuW0FdXjE2ODQzMDA4KkE7dVswXVtoXT1EPDwyNHxEPj4+OCx1WzFdW2hdPUQ8PDE2fEQ+Pj4xNix1WzJdW2hdPUQ8PDh8RD4+PjI0LHVbM11baF09RCxEPTE2ODQzMDA5Kk5eNjU1MzcqTF4yNTcqUF4xNjg0MzAwOCpoLGRbMF1bQV09RDw8MjR8RD4+PjgsZFsxXVtBXT1EPDwxNnxEPj4+MTYsZFsyXVtBXT1EPDw4fEQ+Pj4yNCxkWzNdW0FdPUQsaD09PTA/aD13PTE6KGg9UF5uW25bbltOXlBdXV0sd149bltuW3ddXSl9cmV0dXJue1NCT1g6ZixJTlZfU0JPWDpjLFNVQl9NSVg6dSxJTlZfU1VCX01JWDpkfX0oKTtmdW5jdGlvbiBsKG4pe3RoaXMuX2tleT1zKG4pLHRoaXMuX3Jlc2V0KCl9bC5ibG9ja1NpemU9MTYsbC5rZXlTaXplPTMyLGwucHJvdG90eXBlLmJsb2NrU2l6ZT1sLmJsb2NrU2l6ZSxsLnByb3RvdHlwZS5rZXlTaXplPWwua2V5U2l6ZSxsLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fa2V5LGk9bi5sZW5ndGgsZj1pKzYsYz00KihmKzEpLHU9W10sZD0wO2Q8aTtkKyspdVtkXT1uW2RdO2ZvcihkPWk7ZDxjO2QrKyl7dmFyIGg9dVtkLTFdO2QlaT09MD8oaD1oPDw4fGg+Pj4yNCxoPWUuU0JPWFtoPj4+MjRdPDwyNHxlLlNCT1hbaD4+PjE2JjI1NV08PDE2fGUuU0JPWFtoPj4+OCYyNTVdPDw4fGUuU0JPWFsyNTUmaF0saF49dFtkL2l8MF08PDI0KTppPjYmJmQlaT09NCYmKGg9ZS5TQk9YW2g+Pj4yNF08PDI0fGUuU0JPWFtoPj4+MTYmMjU1XTw8MTZ8ZS5TQk9YW2g+Pj44JjI1NV08PDh8ZS5TQk9YWzI1NSZoXSksdVtkXT11W2QtaV1eaH1mb3IodmFyIHc9W10sXz0wO188YztfKyspe3ZhciBBPWMtXyxQPXVbQS0oXyU0PzA6NCldO3dbX109Xzw0fHxBPD00P1A6ZS5JTlZfU1VCX01JWFswXVtlLlNCT1hbUD4+PjI0XV1eZS5JTlZfU1VCX01JWFsxXVtlLlNCT1hbUD4+PjE2JjI1NV1dXmUuSU5WX1NVQl9NSVhbMl1bZS5TQk9YW1A+Pj44JjI1NV1dXmUuSU5WX1NVQl9NSVhbM11bZS5TQk9YWzI1NSZQXV19dGhpcy5fblJvdW5kcz1mLHRoaXMuX2tleVNjaGVkdWxlPXUsdGhpcy5faW52S2V5U2NoZWR1bGU9d30sbC5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKG4pe3JldHVybiByKG49cyhuKSx0aGlzLl9rZXlTY2hlZHVsZSxlLlNVQl9NSVgsZS5TQk9YLHRoaXMuX25Sb3VuZHMpfSxsLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24obil7dmFyIGk9dGhpcy5lbmNyeXB0QmxvY2tSYXcobiksZj1tLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gZi53cml0ZVVJbnQzMkJFKGlbMF0sMCksZi53cml0ZVVJbnQzMkJFKGlbMV0sNCksZi53cml0ZVVJbnQzMkJFKGlbMl0sOCksZi53cml0ZVVJbnQzMkJFKGlbM10sMTIpLGZ9LGwucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihuKXt2YXIgaT0obj1zKG4pKVsxXTtuWzFdPW5bM10sblszXT1pO3ZhciBmPXIobix0aGlzLl9pbnZLZXlTY2hlZHVsZSxlLklOVl9TVUJfTUlYLGUuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksYz1tLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gYy53cml0ZVVJbnQzMkJFKGZbMF0sMCksYy53cml0ZVVJbnQzMkJFKGZbM10sNCksYy53cml0ZVVJbnQzMkJFKGZbMl0sOCksYy53cml0ZVVJbnQzMkJFKGZbMV0sMTIpLGN9LGwucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7byh0aGlzLl9rZXlTY2hlZHVsZSksbyh0aGlzLl9pbnZLZXlTY2hlZHVsZSksbyh0aGlzLl9rZXkpfSxFLmV4cG9ydHMuQUVTPWx9LHsic2FmZS1idWZmZXIiOjQ5NH1dLDE5MDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4vYWVzIikscz1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixvPWEoImNpcGhlci1iYXNlIikscj1hKCJpbmhlcml0cyIpLHQ9YSgiLi9naGFzaCIpLGU9YSgiYnVmZmVyLXhvciIpLGw9YSgiLi9pbmNyMzIiKTtmdW5jdGlvbiBuKGksZixjLHUpe28uY2FsbCh0aGlzKTt2YXIgZD1zLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBtLkFFUyhmKTt2YXIgaD10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGQpO3RoaXMuX2doYXNoPW5ldyB0KGgpLGM9ZnVuY3Rpb24odyxfLEEpe2lmKF8ubGVuZ3RoPT09MTIpcmV0dXJuIHcuX2ZpbklEPXMuY29uY2F0KFtfLHMuZnJvbShbMCwwLDAsMV0pXSkscy5jb25jYXQoW18scy5mcm9tKFswLDAsMCwyXSldKTt2YXIgUD1uZXcgdChBKSxMPV8ubGVuZ3RoLE49TCUxNjtQLnVwZGF0ZShfKSxOJiYoTj0xNi1OLFAudXBkYXRlKHMuYWxsb2MoTiwwKSkpLFAudXBkYXRlKHMuYWxsb2MoOCwwKSk7dmFyIEQ9OCpMLEY9cy5hbGxvYyg4KTtGLndyaXRlVUludEJFKEQsMCw4KSxQLnVwZGF0ZShGKSx3Ll9maW5JRD1QLnN0YXRlO3ZhciBVPXMuZnJvbSh3Ll9maW5JRCk7cmV0dXJuIGwoVSksVX0odGhpcyxjLGgpLHRoaXMuX3ByZXY9cy5mcm9tKGMpLHRoaXMuX2NhY2hlPXMuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9cy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXUsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9aSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfXIobixvKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGkpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBmPTE2LXRoaXMuX2FsZW4lMTY7ZjwxNiYmKGY9cy5hbGxvYyhmLDApLHRoaXMuX2doYXNoLnVwZGF0ZShmKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBjPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGkpO3JldHVybiB0aGlzLl9kZWNyeXB0P3RoaXMuX2doYXNoLnVwZGF0ZShpKTp0aGlzLl9naGFzaC51cGRhdGUoYyksdGhpcy5fbGVuKz1pLmxlbmd0aCxjfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBpPWUodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24oZixjKXt2YXIgdT0wO2YubGVuZ3RoIT09Yy5sZW5ndGgmJnUrKztmb3IodmFyIGQ9TWF0aC5taW4oZi5sZW5ndGgsYy5sZW5ndGgpLGg9MDtoPGQ7KytoKXUrPWZbaF1eY1toXTtyZXR1cm4gdX0oaSx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9aSx0aGlzLl9jaXBoZXIuc2NydWIoKX0sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCFzLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihpKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1pfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oaSl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKGkpLHRoaXMuX2FsZW4rPWkubGVuZ3RofSxFLmV4cG9ydHM9bn0seyIuL2FlcyI6MTg5LCIuL2doYXNoIjoxOTQsIi4vaW5jcjMyIjoxOTUsImJ1ZmZlci14b3IiOjIxOSwiY2lwaGVyLWJhc2UiOjIyMSxpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSwxOTE6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuL2VuY3J5cHRlciIpLHM9YSgiLi9kZWNyeXB0ZXIiKSxvPWEoIi4vbW9kZXMvbGlzdC5qc29uIik7ay5jcmVhdGVDaXBoZXI9ay5DaXBoZXI9bS5jcmVhdGVDaXBoZXIsay5jcmVhdGVDaXBoZXJpdj1rLkNpcGhlcml2PW0uY3JlYXRlQ2lwaGVyaXYsay5jcmVhdGVEZWNpcGhlcj1rLkRlY2lwaGVyPXMuY3JlYXRlRGVjaXBoZXIsay5jcmVhdGVEZWNpcGhlcml2PWsuRGVjaXBoZXJpdj1zLmNyZWF0ZURlY2lwaGVyaXYsay5saXN0Q2lwaGVycz1rLmdldENpcGhlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMobyl9fSx7Ii4vZGVjcnlwdGVyIjoxOTIsIi4vZW5jcnlwdGVyIjoxOTMsIi4vbW9kZXMvbGlzdC5qc29uIjoyMDN9XSwxOTI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuL2F1dGhDaXBoZXIiKSxzPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLG89YSgiLi9tb2RlcyIpLHI9YSgiLi9zdHJlYW1DaXBoZXIiKSx0PWEoImNpcGhlci1iYXNlIiksZT1hKCIuL2FlcyIpLGw9YSgiZXZwX2J5dGVzdG9rZXkiKTtmdW5jdGlvbiBuKGMsdSxkKXt0LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBlLkFFUyh1KSx0aGlzLl9wcmV2PXMuZnJvbShkKSx0aGlzLl9tb2RlPWMsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gaSgpe3RoaXMuY2FjaGU9cy5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBmKGMsdSxkKXt2YXIgaD1vW2MudG9Mb3dlckNhc2UoKV07aWYoIWgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYodHlwZW9mIGQ9PSJzdHJpbmciJiYoZD1zLmZyb20oZCkpLGgubW9kZSE9PSJHQ00iJiZkLmxlbmd0aCE9PWguaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitkLmxlbmd0aCk7aWYodHlwZW9mIHU9PSJzdHJpbmciJiYodT1zLmZyb20odSkpLHUubGVuZ3RoIT09aC5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIit1Lmxlbmd0aCk7cmV0dXJuIGgudHlwZT09PSJzdHJlYW0iP25ldyByKGgubW9kdWxlLHUsZCwhMCk6aC50eXBlPT09ImF1dGgiP25ldyBtKGgubW9kdWxlLHUsZCwhMCk6bmV3IG4oaC5tb2R1bGUsdSxkKX1hKCJpbmhlcml0cyIpKG4sdCksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihjKXt2YXIgdSxkO3RoaXMuX2NhY2hlLmFkZChjKTtmb3IodmFyIGg9W107dT10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOylkPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHUpLGgucHVzaChkKTtyZXR1cm4gcy5jb25jYXQoaCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBjPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBkPXVbMTVdO2lmKGQ8MXx8ZD4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFyIGg9LTE7KytoPGQ7KWlmKHVbaCsoMTYtZCldIT09ZCl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZihkIT09MTYpcmV0dXJuIHUuc2xpY2UoMCwxNi1kKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsYykpO2lmKGMpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhYyx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYyl7dGhpcy5jYWNoZT1zLmNvbmNhdChbdGhpcy5jYWNoZSxjXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbihjKXt2YXIgdTtpZihjKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gdT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gdT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdTtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0say5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbihjLHUpe3ZhciBkPW9bYy50b0xvd2VyQ2FzZSgpXTtpZighZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgaD1sKHUsITEsZC5rZXksZC5pdik7cmV0dXJuIGYoYyxoLmtleSxoLml2KX0say5jcmVhdGVEZWNpcGhlcml2PWZ9LHsiLi9hZXMiOjE4OSwiLi9hdXRoQ2lwaGVyIjoxOTAsIi4vbW9kZXMiOjIwMiwiLi9zdHJlYW1DaXBoZXIiOjIwNSwiY2lwaGVyLWJhc2UiOjIyMSxldnBfYnl0ZXN0b2tleTo0MjMsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sMTkzOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi9tb2RlcyIpLHM9YSgiLi9hdXRoQ2lwaGVyIiksbz1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixyPWEoIi4vc3RyZWFtQ2lwaGVyIiksdD1hKCJjaXBoZXItYmFzZSIpLGU9YSgiLi9hZXMiKSxsPWEoImV2cF9ieXRlc3Rva2V5Iik7ZnVuY3Rpb24gbih1LGQsaCl7dC5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBmLHRoaXMuX2NpcGhlcj1uZXcgZS5BRVMoZCksdGhpcy5fcHJldj1vLmZyb20oaCksdGhpcy5fbW9kZT11LHRoaXMuX2F1dG9wYWRkaW5nPSEwfWEoImluaGVyaXRzIikobix0KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHUpe3ZhciBkLGg7dGhpcy5fY2FjaGUuYWRkKHUpO2Zvcih2YXIgdz1bXTtkPXRoaXMuX2NhY2hlLmdldCgpOyloPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGQpLHcucHVzaChoKTtyZXR1cm4gby5jb25jYXQodyl9O3ZhciBpPW8uYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIGYoKXt0aGlzLmNhY2hlPW8uYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gYyh1LGQsaCl7dmFyIHc9bVt1LnRvTG93ZXJDYXNlKCldO2lmKCF3KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIiYmKGQ9by5mcm9tKGQpKSxkLmxlbmd0aCE9PXcua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrZC5sZW5ndGgpO2lmKHR5cGVvZiBoPT0ic3RyaW5nIiYmKGg9by5mcm9tKGgpKSx3Lm1vZGUhPT0iR0NNIiYmaC5sZW5ndGghPT13Lml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIraC5sZW5ndGgpO3JldHVybiB3LnR5cGU9PT0ic3RyZWFtIj9uZXcgcih3Lm1vZHVsZSxkLGgpOncudHlwZT09PSJhdXRoIj9uZXcgcyh3Lm1vZHVsZSxkLGgpOm5ldyBuKHcubW9kdWxlLGQsaCl9bi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHU9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gdT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx1KSx0aGlzLl9jaXBoZXIuc2NydWIoKSx1O2lmKCF1LmVxdWFscyhpKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih1KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF1LHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih1KXt0aGlzLmNhY2hlPW8uY29uY2F0KFt0aGlzLmNhY2hlLHVdKX0sZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciB1PXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdX1yZXR1cm4gbnVsbH0sZi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIHU9MTYtdGhpcy5jYWNoZS5sZW5ndGgsZD1vLmFsbG9jVW5zYWZlKHUpLGg9LTE7KytoPHU7KWQud3JpdGVVSW50OCh1LGgpO3JldHVybiBvLmNvbmNhdChbdGhpcy5jYWNoZSxkXSl9LGsuY3JlYXRlQ2lwaGVyaXY9YyxrLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbih1LGQpe3ZhciBoPW1bdS50b0xvd2VyQ2FzZSgpXTtpZighaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgdz1sKGQsITEsaC5rZXksaC5pdik7cmV0dXJuIGModSx3LmtleSx3Lml2KX19LHsiLi9hZXMiOjE4OSwiLi9hdXRoQ2lwaGVyIjoxOTAsIi4vbW9kZXMiOjIwMiwiLi9zdHJlYW1DaXBoZXIiOjIwNSwiY2lwaGVyLWJhc2UiOjIyMSxldnBfYnl0ZXN0b2tleTo0MjMsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sMTk0OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgic2FmZS1idWZmZXIiKS5CdWZmZXIscz1tLmFsbG9jKDE2LDApO2Z1bmN0aW9uIG8odCl7dmFyIGU9bS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGUud3JpdGVVSW50MzJCRSh0WzBdPj4+MCwwKSxlLndyaXRlVUludDMyQkUodFsxXT4+PjAsNCksZS53cml0ZVVJbnQzMkJFKHRbMl0+Pj4wLDgpLGUud3JpdGVVSW50MzJCRSh0WzNdPj4+MCwxMiksZX1mdW5jdGlvbiByKHQpe3RoaXMuaD10LHRoaXMuc3RhdGU9bS5hbGxvYygxNiwwKSx0aGlzLmNhY2hlPW0uYWxsb2NVbnNhZmUoMCl9ci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxsLG49Wyh0PXRoaXMuaCkucmVhZFVJbnQzMkJFKDApLHQucmVhZFVJbnQzMkJFKDQpLHQucmVhZFVJbnQzMkJFKDgpLHQucmVhZFVJbnQzMkJFKDEyKV0saT1bMCwwLDAsMF0sZj0tMTsrK2Y8MTI4Oyl7Zm9yKHRoaXMuc3RhdGVbfn4oZi84KV0mMTw8Ny1mJTgmJihpWzBdXj1uWzBdLGlbMV1ePW5bMV0saVsyXV49blsyXSxpWzNdXj1uWzNdKSxsPSgxJm5bM10pIT0wLGU9MztlPjA7ZS0tKW5bZV09bltlXT4+PjF8KDEmbltlLTFdKTw8MzE7blswXT1uWzBdPj4+MSxsJiYoblswXT1uWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9byhpKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlO2Zvcih0aGlzLmNhY2hlPW0uY29uY2F0KFt0aGlzLmNhY2hlLHRdKTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KWU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goZSl9LHIucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKG0uY29uY2F0KFt0aGlzLmNhY2hlLHNdLDE2KSksdGhpcy5naGFzaChvKFswLHQsMCxlXSkpLHRoaXMuc3RhdGV9LEUuZXhwb3J0cz1yfSx7InNhZmUtYnVmZmVyIjo0OTR9XSwxOTU6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9ZnVuY3Rpb24obSl7Zm9yKHZhciBzLG89bS5sZW5ndGg7by0tOyl7aWYoKHM9bS5yZWFkVUludDgobykpIT09MjU1KXtzKyssbS53cml0ZVVJbnQ4KHMsbyk7YnJlYWt9bS53cml0ZVVJbnQ4KDAsbyl9fX0se31dLDE5NjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImJ1ZmZlci14b3IiKTtrLmVuY3J5cHQ9ZnVuY3Rpb24ocyxvKXt2YXIgcj1tKG8scy5fcHJldik7cmV0dXJuIHMuX3ByZXY9cy5fY2lwaGVyLmVuY3J5cHRCbG9jayhyKSxzLl9wcmV2fSxrLmRlY3J5cHQ9ZnVuY3Rpb24ocyxvKXt2YXIgcj1zLl9wcmV2O3MuX3ByZXY9bzt2YXIgdD1zLl9jaXBoZXIuZGVjcnlwdEJsb2NrKG8pO3JldHVybiBtKHQscil9fSx7ImJ1ZmZlci14b3IiOjIxOX1dLDE5NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLHM9YSgiYnVmZmVyLXhvciIpO2Z1bmN0aW9uIG8ocix0LGUpe3ZhciBsPXQubGVuZ3RoLG49cyh0LHIuX2NhY2hlKTtyZXR1cm4gci5fY2FjaGU9ci5fY2FjaGUuc2xpY2UobCksci5fcHJldj1tLmNvbmNhdChbci5fcHJldixlP3Q6bl0pLG59ay5lbmNyeXB0PWZ1bmN0aW9uKHIsdCxlKXtmb3IodmFyIGwsbj1tLmFsbG9jVW5zYWZlKDApO3QubGVuZ3RoOyl7aWYoci5fY2FjaGUubGVuZ3RoPT09MCYmKHIuX2NhY2hlPXIuX2NpcGhlci5lbmNyeXB0QmxvY2soci5fcHJldiksci5fcHJldj1tLmFsbG9jVW5zYWZlKDApKSwhKHIuX2NhY2hlLmxlbmd0aDw9dC5sZW5ndGgpKXtuPW0uY29uY2F0KFtuLG8ocix0LGUpXSk7YnJlYWt9bD1yLl9jYWNoZS5sZW5ndGgsbj1tLmNvbmNhdChbbixvKHIsdC5zbGljZSgwLGwpLGUpXSksdD10LnNsaWNlKGwpfXJldHVybiBufX0seyJidWZmZXIteG9yIjoyMTksInNhZmUtYnVmZmVyIjo0OTR9XSwxOTg6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcjtmdW5jdGlvbiBzKHIsdCxlKXtmb3IodmFyIGwsbixpPS0xLGY9MDsrK2k8ODspbD10JjE8PDctaT8xMjg6MCxmKz0oMTI4JihuPXIuX2NpcGhlci5lbmNyeXB0QmxvY2soci5fcHJldilbMF1ebCkpPj5pJTgsci5fcHJldj1vKHIuX3ByZXYsZT9sOm4pO3JldHVybiBmfWZ1bmN0aW9uIG8ocix0KXt2YXIgZT1yLmxlbmd0aCxsPS0xLG49bS5hbGxvY1Vuc2FmZShyLmxlbmd0aCk7Zm9yKHI9bS5jb25jYXQoW3IsbS5mcm9tKFt0XSldKTsrK2w8ZTspbltsXT1yW2xdPDwxfHJbbCsxXT4+NztyZXR1cm4gbn1rLmVuY3J5cHQ9ZnVuY3Rpb24ocix0LGUpe2Zvcih2YXIgbD10Lmxlbmd0aCxuPW0uYWxsb2NVbnNhZmUobCksaT0tMTsrK2k8bDspbltpXT1zKHIsdFtpXSxlKTtyZXR1cm4gbn19LHsic2FmZS1idWZmZXIiOjQ5NH1dLDE5OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyO2Z1bmN0aW9uIHMobyxyLHQpe3ZhciBlPW8uX2NpcGhlci5lbmNyeXB0QmxvY2soby5fcHJldilbMF1ecjtyZXR1cm4gby5fcHJldj1tLmNvbmNhdChbby5fcHJldi5zbGljZSgxKSxtLmZyb20oW3Q/cjplXSldKSxlfWsuZW5jcnlwdD1mdW5jdGlvbihvLHIsdCl7Zm9yKHZhciBlPXIubGVuZ3RoLGw9bS5hbGxvY1Vuc2FmZShlKSxuPS0xOysrbjxlOylsW25dPXMobyxyW25dLHQpO3JldHVybiBsfX0seyJzYWZlLWJ1ZmZlciI6NDk0fV0sMjAwOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiYnVmZmVyLXhvciIpLHM9YSgic2FmZS1idWZmZXIiKS5CdWZmZXIsbz1hKCIuLi9pbmNyMzIiKTtmdW5jdGlvbiByKHQpe3ZhciBlPXQuX2NpcGhlci5lbmNyeXB0QmxvY2tSYXcodC5fcHJldik7cmV0dXJuIG8odC5fcHJldiksZX1rLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgbD1NYXRoLmNlaWwoZS5sZW5ndGgvMTYpLG49dC5fY2FjaGUubGVuZ3RoO3QuX2NhY2hlPXMuY29uY2F0KFt0Ll9jYWNoZSxzLmFsbG9jVW5zYWZlKDE2KmwpXSk7Zm9yKHZhciBpPTA7aTxsO2krKyl7dmFyIGY9cih0KSxjPW4rMTYqaTt0Ll9jYWNoZS53cml0ZVVJbnQzMkJFKGZbMF0sYyswKSx0Ll9jYWNoZS53cml0ZVVJbnQzMkJFKGZbMV0sYys0KSx0Ll9jYWNoZS53cml0ZVVJbnQzMkJFKGZbMl0sYys4KSx0Ll9jYWNoZS53cml0ZVVJbnQzMkJFKGZbM10sYysxMil9dmFyIHU9dC5fY2FjaGUuc2xpY2UoMCxlLmxlbmd0aCk7cmV0dXJuIHQuX2NhY2hlPXQuX2NhY2hlLnNsaWNlKGUubGVuZ3RoKSxtKGUsdSl9fSx7Ii4uL2luY3IzMiI6MTk1LCJidWZmZXIteG9yIjoyMTksInNhZmUtYnVmZmVyIjo0OTR9XSwyMDE6W2Z1bmN0aW9uKGEsRSxrKXtrLmVuY3J5cHQ9ZnVuY3Rpb24obSxzKXtyZXR1cm4gbS5fY2lwaGVyLmVuY3J5cHRCbG9jayhzKX0say5kZWNyeXB0PWZ1bmN0aW9uKG0scyl7cmV0dXJuIG0uX2NpcGhlci5kZWNyeXB0QmxvY2socyl9fSx7fV0sMjAyOltmdW5jdGlvbihhLEUsayl7dmFyIG09e0VDQjphKCIuL2VjYiIpLENCQzphKCIuL2NiYyIpLENGQjphKCIuL2NmYiIpLENGQjg6YSgiLi9jZmI4IiksQ0ZCMTphKCIuL2NmYjEiKSxPRkI6YSgiLi9vZmIiKSxDVFI6YSgiLi9jdHIiKSxHQ006YSgiLi9jdHIiKX0scz1hKCIuL2xpc3QuanNvbiIpO2Zvcih2YXIgbyBpbiBzKXNbb10ubW9kdWxlPW1bc1tvXS5tb2RlXTtFLmV4cG9ydHM9c30seyIuL2NiYyI6MTk2LCIuL2NmYiI6MTk3LCIuL2NmYjEiOjE5OCwiLi9jZmI4IjoxOTksIi4vY3RyIjoyMDAsIi4vZWNiIjoyMDEsIi4vbGlzdC5qc29uIjoyMDMsIi4vb2ZiIjoyMDR9XSwyMDM6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9eyJhZXMtMTI4LWVjYiI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjAsbW9kZToiRUNCIix0eXBlOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6e2NpcGhlcjoiQUVTIixrZXk6MTkyLGl2OjAsbW9kZToiRUNCIix0eXBlOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6e2NpcGhlcjoiQUVTIixrZXk6MjU2LGl2OjAsbW9kZToiRUNCIix0eXBlOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjE2LG1vZGU6IkNCQyIsdHlwZToiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOntjaXBoZXI6IkFFUyIsa2V5OjE5MixpdjoxNixtb2RlOiJDQkMiLHR5cGU6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7Y2lwaGVyOiJBRVMiLGtleToyNTYsaXY6MTYsbW9kZToiQ0JDIix0eXBlOiJibG9jayJ9LGFlczEyODp7Y2lwaGVyOiJBRVMiLGtleToxMjgsaXY6MTYsbW9kZToiQ0JDIix0eXBlOiJibG9jayJ9LGFlczE5Mjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ0JDIix0eXBlOiJibG9jayJ9LGFlczI1Njp7Y2lwaGVyOiJBRVMiLGtleToyNTYsaXY6MTYsbW9kZToiQ0JDIix0eXBlOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjE2LG1vZGU6IkNGQiIsdHlwZToic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ0ZCIix0eXBlOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOntjaXBoZXI6IkFFUyIsa2V5OjI1NixpdjoxNixtb2RlOiJDRkIiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOntjaXBoZXI6IkFFUyIsa2V5OjEyOCxpdjoxNixtb2RlOiJDRkI4Iix0eXBlOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ0ZCOCIsdHlwZToic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6e2NpcGhlcjoiQUVTIixrZXk6MjU2LGl2OjE2LG1vZGU6IkNGQjgiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOntjaXBoZXI6IkFFUyIsa2V5OjEyOCxpdjoxNixtb2RlOiJDRkIxIix0eXBlOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ0ZCMSIsdHlwZToic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6e2NpcGhlcjoiQUVTIixrZXk6MjU2LGl2OjE2LG1vZGU6IkNGQjEiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjE2LG1vZGU6Ik9GQiIsdHlwZToic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiT0ZCIix0eXBlOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOntjaXBoZXI6IkFFUyIsa2V5OjI1NixpdjoxNixtb2RlOiJPRkIiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjE2LG1vZGU6IkNUUiIsdHlwZToic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7Y2lwaGVyOiJBRVMiLGtleToxOTIsaXY6MTYsbW9kZToiQ1RSIix0eXBlOiJzdHJlYW0ifSwiYWVzLTI1Ni1jdHIiOntjaXBoZXI6IkFFUyIsa2V5OjI1NixpdjoxNixtb2RlOiJDVFIiLHR5cGU6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6e2NpcGhlcjoiQUVTIixrZXk6MTI4LGl2OjEyLG1vZGU6IkdDTSIsdHlwZToiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6e2NpcGhlcjoiQUVTIixrZXk6MTkyLGl2OjEyLG1vZGU6IkdDTSIsdHlwZToiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6e2NpcGhlcjoiQUVTIixrZXk6MjU2LGl2OjEyLG1vZGU6IkdDTSIsdHlwZToiYXV0aCJ9fX0se31dLDIwNDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXt2YXIgcz1hKCJidWZmZXIteG9yIik7ZnVuY3Rpb24gbyhyKXtyZXR1cm4gci5fcHJldj1yLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHIuX3ByZXYpLHIuX3ByZXZ9ay5lbmNyeXB0PWZ1bmN0aW9uKHIsdCl7Zm9yKDtyLl9jYWNoZS5sZW5ndGg8dC5sZW5ndGg7KXIuX2NhY2hlPW0uY29uY2F0KFtyLl9jYWNoZSxvKHIpXSk7dmFyIGU9ci5fY2FjaGUuc2xpY2UoMCx0Lmxlbmd0aCk7cmV0dXJuIHIuX2NhY2hlPXIuX2NhY2hlLnNsaWNlKHQubGVuZ3RoKSxzKHQsZSl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjIyMCwiYnVmZmVyLXhvciI6MjE5fV0sMjA1OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi9hZXMiKSxzPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLG89YSgiY2lwaGVyLWJhc2UiKTtmdW5jdGlvbiByKHQsZSxsLG4pe28uY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IG0uQUVTKGUpLHRoaXMuX3ByZXY9cy5mcm9tKGwpLHRoaXMuX2NhY2hlPXMuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9cy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PW4sdGhpcy5fbW9kZT10fWEoImluaGVyaXRzIikocixvKSxyLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0LHRoaXMuX2RlY3J5cHQpfSxyLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sRS5leHBvcnRzPXJ9LHsiLi9hZXMiOjE4OSwiY2lwaGVyLWJhc2UiOjIyMSxpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSwyMDY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJicm93c2VyaWZ5LWRlcyIpLHM9YSgiYnJvd3NlcmlmeS1hZXMvYnJvd3NlciIpLG89YSgiYnJvd3NlcmlmeS1hZXMvbW9kZXMiKSxyPWEoImJyb3dzZXJpZnktZGVzL21vZGVzIiksdD1hKCJldnBfYnl0ZXN0b2tleSIpO2Z1bmN0aW9uIGUobixpLGYpe2lmKG49bi50b0xvd2VyQ2FzZSgpLG9bbl0pcmV0dXJuIHMuY3JlYXRlQ2lwaGVyaXYobixpLGYpO2lmKHJbbl0pcmV0dXJuIG5ldyBtKHtrZXk6aSxpdjpmLG1vZGU6bn0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIGwobixpLGYpe2lmKG49bi50b0xvd2VyQ2FzZSgpLG9bbl0pcmV0dXJuIHMuY3JlYXRlRGVjaXBoZXJpdihuLGksZik7aWYocltuXSlyZXR1cm4gbmV3IG0oe2tleTppLGl2OmYsbW9kZTpuLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1rLmNyZWF0ZUNpcGhlcj1rLkNpcGhlcj1mdW5jdGlvbihuLGkpe3ZhciBmLGM7aWYobj1uLnRvTG93ZXJDYXNlKCksb1tuXSlmPW9bbl0ua2V5LGM9b1tuXS5pdjtlbHNle2lmKCFyW25dKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2Y9OCpyW25dLmtleSxjPXJbbl0uaXZ9dmFyIHU9dChpLCExLGYsYyk7cmV0dXJuIGUobix1LmtleSx1Lml2KX0say5jcmVhdGVDaXBoZXJpdj1rLkNpcGhlcml2PWUsay5jcmVhdGVEZWNpcGhlcj1rLkRlY2lwaGVyPWZ1bmN0aW9uKG4saSl7dmFyIGYsYztpZihuPW4udG9Mb3dlckNhc2UoKSxvW25dKWY9b1tuXS5rZXksYz1vW25dLml2O2Vsc2V7aWYoIXJbbl0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Zj04KnJbbl0ua2V5LGM9cltuXS5pdn12YXIgdT10KGksITEsZixjKTtyZXR1cm4gbChuLHUua2V5LHUuaXYpfSxrLmNyZWF0ZURlY2lwaGVyaXY9ay5EZWNpcGhlcml2PWwsay5saXN0Q2lwaGVycz1rLmdldENpcGhlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMocikuY29uY2F0KHMuZ2V0Q2lwaGVycygpKX19LHsiYnJvd3NlcmlmeS1hZXMvYnJvd3NlciI6MTkxLCJicm93c2VyaWZ5LWFlcy9tb2RlcyI6MjAyLCJicm93c2VyaWZ5LWRlcyI6MjA3LCJicm93c2VyaWZ5LWRlcy9tb2RlcyI6MjA4LGV2cF9ieXRlc3Rva2V5OjQyM31dLDIwNzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImNpcGhlci1iYXNlIikscz1hKCJkZXMuanMiKSxvPWEoImluaGVyaXRzIikscj1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcix0PXsiZGVzLWVkZTMtY2JjIjpzLkNCQy5pbnN0YW50aWF0ZShzLkVERSksImRlcy1lZGUzIjpzLkVERSwiZGVzLWVkZS1jYmMiOnMuQ0JDLmluc3RhbnRpYXRlKHMuRURFKSwiZGVzLWVkZSI6cy5FREUsImRlcy1jYmMiOnMuQ0JDLmluc3RhbnRpYXRlKHMuREVTKSwiZGVzLWVjYiI6cy5ERVN9O2Z1bmN0aW9uIGUobCl7bS5jYWxsKHRoaXMpO3ZhciBuLGk9bC5tb2RlLnRvTG93ZXJDYXNlKCksZj10W2ldO249bC5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIGM9bC5rZXk7ci5pc0J1ZmZlcihjKXx8KGM9ci5mcm9tKGMpKSxpIT09ImRlcy1lZGUiJiZpIT09ImRlcy1lZGUtY2JjInx8KGM9ci5jb25jYXQoW2MsYy5zbGljZSgwLDgpXSkpO3ZhciB1PWwuaXY7ci5pc0J1ZmZlcih1KXx8KHU9ci5mcm9tKHUpKSx0aGlzLl9kZXM9Zi5jcmVhdGUoe2tleTpjLGl2OnUsdHlwZTpufSl9dC5kZXM9dFsiZGVzLWNiYyJdLHQuZGVzMz10WyJkZXMtZWRlMy1jYmMiXSxFLmV4cG9ydHM9ZSxvKGUsbSksZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihsKXtyZXR1cm4gci5mcm9tKHRoaXMuX2Rlcy51cGRhdGUobCkpfSxlLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gci5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LHsiY2lwaGVyLWJhc2UiOjIyMSwiZGVzLmpzIjozOTQsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sMjA4OltmdW5jdGlvbihhLEUsayl7a1siZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxrWyJkZXMtY2JjIl09ay5kZXM9e2tleTo4LGl2Ojh9LGtbImRlcy1lZGUzLWNiYyJdPWsuZGVzMz17a2V5OjI0LGl2Ojh9LGtbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxrWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sa1siZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LHt9XSwyMDk6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIHM9YSgiYm4uanMiKSxvPWEoInJhbmRvbWJ5dGVzIik7ZnVuY3Rpb24gcihlKXt2YXIgbCxuPWUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG8gbD1uZXcgcyhvKG4pKTt3aGlsZShsLmNtcChlLm1vZHVsdXMpPj0wfHwhbC51bW9kKGUucHJpbWUxKXx8IWwudW1vZChlLnByaW1lMikpO3JldHVybiBsfWZ1bmN0aW9uIHQoZSxsKXt2YXIgbj1mdW5jdGlvbihMKXt2YXIgTj1yKEwpO3JldHVybntibGluZGVyOk4udG9SZWQocy5tb250KEwubW9kdWx1cykpLnJlZFBvdyhuZXcgcyhMLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpOLmludm0oTC5tb2R1bHVzKX19KGwpLGk9bC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxmPW5ldyBzKGUpLm11bChuLmJsaW5kZXIpLnVtb2QobC5tb2R1bHVzKSxjPWYudG9SZWQocy5tb250KGwucHJpbWUxKSksdT1mLnRvUmVkKHMubW9udChsLnByaW1lMikpLGQ9bC5jb2VmZmljaWVudCxoPWwucHJpbWUxLHc9bC5wcmltZTIsXz1jLnJlZFBvdyhsLmV4cG9uZW50MSkuZnJvbVJlZCgpLEE9dS5yZWRQb3cobC5leHBvbmVudDIpLmZyb21SZWQoKSxQPV8uaXN1YihBKS5pbXVsKGQpLnVtb2QoaCkuaW11bCh3KTtyZXR1cm4gQS5pYWRkKFApLmltdWwobi51bmJsaW5kZXIpLnVtb2QobC5tb2R1bHVzKS50b0FycmF5TGlrZShtLCJiZSIsaSl9dC5nZXRyPXIsRS5leHBvcnRzPXR9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiYm4uanMiOjE4NixidWZmZXI6MjIwLHJhbmRvbWJ5dGVzOjQ3NX1dLDIxMDpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz1hKCIuL2Jyb3dzZXIvYWxnb3JpdGhtcy5qc29uIil9LHsiLi9icm93c2VyL2FsZ29yaXRobXMuanNvbiI6MjExfV0sMjExOltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPXtzaGEyMjRXaXRoUlNBRW5jcnlwdGlvbjp7c2lnbjoicnNhIixoYXNoOiJzaGEyMjQiLGlkOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7c2lnbjoiZWNkc2EvcnNhIixoYXNoOiJzaGEyMjQiLGlkOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LHNoYTI1NldpdGhSU0FFbmNyeXB0aW9uOntzaWduOiJyc2EiLGhhc2g6InNoYTI1NiIsaWQ6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOntzaWduOiJlY2RzYS9yc2EiLGhhc2g6InNoYTI1NiIsaWQ6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sc2hhMzg0V2l0aFJTQUVuY3J5cHRpb246e3NpZ246InJzYSIsaGFzaDoic2hhMzg0IixpZDoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6e3NpZ246ImVjZHNhL3JzYSIsaGFzaDoic2hhMzg0IixpZDoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSxzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbjp7c2lnbjoicnNhIixoYXNoOiJzaGE1MTIiLGlkOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBNTEyIjp7c2lnbjoiZWNkc2EvcnNhIixoYXNoOiJzaGE1MTIiLGlkOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6e3NpZ246InJzYSIsaGFzaDoic2hhMSIsaWQ6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9LCJlY2RzYS13aXRoLVNIQTEiOntzaWduOiJlY2RzYSIsaGFzaDoic2hhMSIsaWQ6IiJ9LHNoYTI1Njp7c2lnbjoiZWNkc2EiLGhhc2g6InNoYTI1NiIsaWQ6IiJ9LHNoYTIyNDp7c2lnbjoiZWNkc2EiLGhhc2g6InNoYTIyNCIsaWQ6IiJ9LHNoYTM4NDp7c2lnbjoiZWNkc2EiLGhhc2g6InNoYTM4NCIsaWQ6IiJ9LHNoYTUxMjp7c2lnbjoiZWNkc2EiLGhhc2g6InNoYTUxMiIsaWQ6IiJ9LCJEU0EtU0hBIjp7c2lnbjoiZHNhIixoYXNoOiJzaGExIixpZDoiIn0sIkRTQS1TSEExIjp7c2lnbjoiZHNhIixoYXNoOiJzaGExIixpZDoiIn0sRFNBOntzaWduOiJkc2EiLGhhc2g6InNoYTEiLGlkOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7c2lnbjoiZHNhIixoYXNoOiJzaGEyMjQiLGlkOiIifSwiRFNBLVNIQTIyNCI6e3NpZ246ImRzYSIsaGFzaDoic2hhMjI0IixpZDoiIn0sIkRTQS1XSVRILVNIQTI1NiI6e3NpZ246ImRzYSIsaGFzaDoic2hhMjU2IixpZDoiIn0sIkRTQS1TSEEyNTYiOntzaWduOiJkc2EiLGhhc2g6InNoYTI1NiIsaWQ6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOntzaWduOiJkc2EiLGhhc2g6InNoYTM4NCIsaWQ6IiJ9LCJEU0EtU0hBMzg0Ijp7c2lnbjoiZHNhIixoYXNoOiJzaGEzODQiLGlkOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7c2lnbjoiZHNhIixoYXNoOiJzaGE1MTIiLGlkOiIifSwiRFNBLVNIQTUxMiI6e3NpZ246ImRzYSIsaGFzaDoic2hhNTEyIixpZDoiIn0sIkRTQS1SSVBFTUQxNjAiOntzaWduOiJkc2EiLGhhc2g6InJtZDE2MCIsaWQ6IiJ9LHJpcGVtZDE2MFdpdGhSU0E6e3NpZ246InJzYSIsaGFzaDoicm1kMTYwIixpZDoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAiOntzaWduOiJyc2EiLGhhc2g6InJtZDE2MCIsaWQ6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LG1kNVdpdGhSU0FFbmNyeXB0aW9uOntzaWduOiJyc2EiLGhhc2g6Im1kNSIsaWQ6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7c2lnbjoicnNhIixoYXNoOiJtZDUiLGlkOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX19LHt9XSwyMTI6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9eyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn19LHt9XSwyMTM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixzPWEoImNyZWF0ZS1oYXNoIiksbz1hKCJyZWFkYWJsZS1zdHJlYW0iKSxyPWEoImluaGVyaXRzIiksdD1hKCIuL3NpZ24iKSxlPWEoIi4vdmVyaWZ5IiksbD1hKCIuL2FsZ29yaXRobXMuanNvbiIpO2Z1bmN0aW9uIG4odSl7by5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBkPWxbdV07aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaFR5cGU9ZC5oYXNoLHRoaXMuX2hhc2g9cyhkLmhhc2gpLHRoaXMuX3RhZz1kLmlkLHRoaXMuX3NpZ25UeXBlPWQuc2lnbn1mdW5jdGlvbiBpKHUpe28uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZD1sW3VdO2lmKCFkKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9cyhkLmhhc2gpLHRoaXMuX3RhZz1kLmlkLHRoaXMuX3NpZ25UeXBlPWQuc2lnbn1mdW5jdGlvbiBmKHUpe3JldHVybiBuZXcgbih1KX1mdW5jdGlvbiBjKHUpe3JldHVybiBuZXcgaSh1KX1PYmplY3Qua2V5cyhsKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe2xbdV0uaWQ9bS5mcm9tKGxbdV0uaWQsImhleCIpLGxbdS50b0xvd2VyQ2FzZSgpXT1sW3VdfSkscihuLG8uV3JpdGFibGUpLG4ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih1LGQsaCl7dGhpcy5faGFzaC51cGRhdGUodSksaCgpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odSxkKXtyZXR1cm4gdHlwZW9mIHU9PSJzdHJpbmciJiYodT1tLmZyb20odSxkKSksdGhpcy5faGFzaC51cGRhdGUodSksdGhpc30sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih1LGQpe3RoaXMuZW5kKCk7dmFyIGg9dGhpcy5faGFzaC5kaWdlc3QoKSx3PXQoaCx1LHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIGQ/dy50b1N0cmluZyhkKTp3fSxyKGksby5Xcml0YWJsZSksaS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHUsZCxoKXt0aGlzLl9oYXNoLnVwZGF0ZSh1KSxoKCl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih1LGQpe3JldHVybiB0eXBlb2YgdT09InN0cmluZyImJih1PW0uZnJvbSh1LGQpKSx0aGlzLl9oYXNoLnVwZGF0ZSh1KSx0aGlzfSxpLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odSxkLGgpe3R5cGVvZiBkPT0ic3RyaW5nIiYmKGQ9bS5mcm9tKGQsaCkpLHRoaXMuZW5kKCk7dmFyIHc9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gZShkLHcsdSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpfSxFLmV4cG9ydHM9e1NpZ246ZixWZXJpZnk6YyxjcmVhdGVTaWduOmYsY3JlYXRlVmVyaWZ5OmN9fSx7Ii4vYWxnb3JpdGhtcy5qc29uIjoyMTEsIi4vc2lnbiI6MjE0LCIuL3ZlcmlmeSI6MjE1LCJjcmVhdGUtaGFzaCI6Mzg2LGluaGVyaXRzOjQ0MCwicmVhZGFibGUtc3RyZWFtIjo0OTEsInNhZmUtYnVmZmVyIjo0OTR9XSwyMTQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixzPWEoImNyZWF0ZS1obWFjIiksbz1hKCJicm93c2VyaWZ5LXJzYSIpLHI9YSgiZWxsaXB0aWMiKS5lYyx0PWEoImJuLmpzIiksZT1hKCJwYXJzZS1hc24xIiksbD1hKCIuL2N1cnZlcy5qc29uIik7ZnVuY3Rpb24gbih1LGQsaCx3KXtpZigodT1tLmZyb20odS50b0FycmF5KCkpKS5sZW5ndGg8ZC5ieXRlTGVuZ3RoKCkpe3ZhciBfPW0uYWxsb2MoZC5ieXRlTGVuZ3RoKCktdS5sZW5ndGgpO3U9bS5jb25jYXQoW18sdV0pfXZhciBBPWgubGVuZ3RoLFA9ZnVuY3Rpb24oRCxGKXtEPShEPWkoRCxGKSkubW9kKEYpO3ZhciBVPW0uZnJvbShELnRvQXJyYXkoKSk7aWYoVS5sZW5ndGg8Ri5ieXRlTGVuZ3RoKCkpe3ZhciBCPW0uYWxsb2MoRi5ieXRlTGVuZ3RoKCktVS5sZW5ndGgpO1U9bS5jb25jYXQoW0IsVV0pfXJldHVybiBVfShoLGQpLEw9bS5hbGxvYyhBKTtMLmZpbGwoMSk7dmFyIE49bS5hbGxvYyhBKTtyZXR1cm4gTj1zKHcsTikudXBkYXRlKEwpLnVwZGF0ZShtLmZyb20oWzBdKSkudXBkYXRlKHUpLnVwZGF0ZShQKS5kaWdlc3QoKSxMPXModyxOKS51cGRhdGUoTCkuZGlnZXN0KCkse2s6Tj1zKHcsTikudXBkYXRlKEwpLnVwZGF0ZShtLmZyb20oWzFdKSkudXBkYXRlKHUpLnVwZGF0ZShQKS5kaWdlc3QoKSx2Okw9cyh3LE4pLnVwZGF0ZShMKS5kaWdlc3QoKX19ZnVuY3Rpb24gaSh1LGQpe3ZhciBoPW5ldyB0KHUpLHc9KHUubGVuZ3RoPDwzKS1kLmJpdExlbmd0aCgpO3JldHVybiB3PjAmJmguaXNocm4odyksaH1mdW5jdGlvbiBmKHUsZCxoKXt2YXIgdyxfO2Rve2Zvcih3PW0uYWxsb2MoMCk7OCp3Lmxlbmd0aDx1LmJpdExlbmd0aCgpOylkLnY9cyhoLGQuaykudXBkYXRlKGQudikuZGlnZXN0KCksdz1tLmNvbmNhdChbdyxkLnZdKTtfPWkodyx1KSxkLms9cyhoLGQuaykudXBkYXRlKGQudikudXBkYXRlKG0uZnJvbShbMF0pKS5kaWdlc3QoKSxkLnY9cyhoLGQuaykudXBkYXRlKGQudikuZGlnZXN0KCl9d2hpbGUoXy5jbXAodSkhPT0tMSk7cmV0dXJuIF99ZnVuY3Rpb24gYyh1LGQsaCx3KXtyZXR1cm4gdS50b1JlZCh0Lm1vbnQoaCkpLnJlZFBvdyhkKS5mcm9tUmVkKCkubW9kKHcpfUUuZXhwb3J0cz1mdW5jdGlvbih1LGQsaCx3LF8pe3ZhciBBPWUoZCk7aWYoQS5jdXJ2ZSl7aWYodyE9PSJlY2RzYSImJnchPT0iZWNkc2EvcnNhIil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oRCxGKXt2YXIgVT1sW0YuY3VydmUuam9pbigiLiIpXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitGLmN1cnZlLmpvaW4oIi4iKSk7dmFyIEI9bmV3IHIoVSkua2V5RnJvbVByaXZhdGUoRi5wcml2YXRlS2V5KS5zaWduKEQpO3JldHVybiBtLmZyb20oQi50b0RFUigpKX0odSxBKX1pZihBLnR5cGU9PT0iZHNhIil7aWYodyE9PSJkc2EiKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihELEYsVSl7Zm9yKHZhciBCLFM9Ri5wYXJhbXMucHJpdl9rZXksQz1GLnBhcmFtcy5wLHY9Ri5wYXJhbXMucSxwPUYucGFyYW1zLmcsYj1uZXcgdCgwKSxnPWkoRCx2KS5tb2QodikseT0hMSxNPW4oUyx2LEQsVSk7eT09PSExOylCPWYodixNLFUpLGI9YyhwLEIsQyx2KSwoeT1CLmludm0odikuaW11bChnLmFkZChTLm11bChiKSkpLm1vZCh2KSkuY21wbigwKT09PTAmJih5PSExLGI9bmV3IHQoMCkpO3JldHVybiBmdW5jdGlvbihPLFIpe089Ty50b0FycmF5KCksUj1SLnRvQXJyYXkoKSwxMjgmT1swXSYmKE89WzBdLmNvbmNhdChPKSksMTI4JlJbMF0mJihSPVswXS5jb25jYXQoUikpO3ZhciB6PVs0OCxPLmxlbmd0aCtSLmxlbmd0aCs0LDIsTy5sZW5ndGhdO3JldHVybiB6PXouY29uY2F0KE8sWzIsUi5sZW5ndGhdLFIpLG0uZnJvbSh6KX0oYix5KX0odSxBLGgpfWlmKHchPT0icnNhIiYmdyE9PSJlY2RzYS9yc2EiKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3U9bS5jb25jYXQoW18sdV0pO2Zvcih2YXIgUD1BLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLEw9WzAsMV07dS5sZW5ndGgrTC5sZW5ndGgrMTxQOylMLnB1c2goMjU1KTtMLnB1c2goMCk7Zm9yKHZhciBOPS0xOysrTjx1Lmxlbmd0aDspTC5wdXNoKHVbTl0pO3JldHVybiBvKEwsQSl9LEUuZXhwb3J0cy5nZXRLZXk9bixFLmV4cG9ydHMubWFrZUtleT1mfSx7Ii4vY3VydmVzLmpzb24iOjIxMiwiYm4uanMiOjE4NiwiYnJvd3NlcmlmeS1yc2EiOjIwOSwiY3JlYXRlLWhtYWMiOjM4OCxlbGxpcHRpYzo0MDUsInBhcnNlLWFzbjEiOjQ1OSwic2FmZS1idWZmZXIiOjQ5NH1dLDIxNTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLHM9YSgiYm4uanMiKSxvPWEoImVsbGlwdGljIikuZWMscj1hKCJwYXJzZS1hc24xIiksdD1hKCIuL2N1cnZlcy5qc29uIik7ZnVuY3Rpb24gZShsLG4pe2lmKGwuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYobC5jbXAobik+PW4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfUUuZXhwb3J0cz1mdW5jdGlvbihsLG4saSxmLGMpe3ZhciB1PXIoaSk7aWYodS50eXBlPT09ImVjIil7aWYoZiE9PSJlY2RzYSImJmYhPT0iZWNkc2EvcnNhIil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbihMLE4sRCl7dmFyIEY9dFtELmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIUYpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrRC5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBVPW5ldyBvKEYpLEI9RC5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGE7cmV0dXJuIFUudmVyaWZ5KE4sTCxCKX0obCxuLHUpfWlmKHUudHlwZT09PSJkc2EiKXtpZihmIT09ImRzYSIpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oTCxOLEQpe3ZhciBGPUQuZGF0YS5wLFU9RC5kYXRhLnEsQj1ELmRhdGEuZyxTPUQuZGF0YS5wdWJfa2V5LEM9ci5zaWduYXR1cmUuZGVjb2RlKEwsImRlciIpLHY9Qy5zLHA9Qy5yO2UodixVKSxlKHAsVSk7dmFyIGI9cy5tb250KEYpLGc9di5pbnZtKFUpO3JldHVybiBCLnRvUmVkKGIpLnJlZFBvdyhuZXcgcyhOKS5tdWwoZykubW9kKFUpKS5mcm9tUmVkKCkubXVsKFMudG9SZWQoYikucmVkUG93KHAubXVsKGcpLm1vZChVKSkuZnJvbVJlZCgpKS5tb2QoRikubW9kKFUpLmNtcChwKT09PTB9KGwsbix1KX1pZihmIT09InJzYSImJmYhPT0iZWNkc2EvcnNhIil0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO249bS5jb25jYXQoW2Msbl0pO2Zvcih2YXIgZD11Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGg9WzFdLHc9MDtuLmxlbmd0aCtoLmxlbmd0aCsyPGQ7KWgucHVzaCgyNTUpLHcrKztoLnB1c2goMCk7Zm9yKHZhciBfPS0xOysrXzxuLmxlbmd0aDspaC5wdXNoKG5bX10pO2g9bS5mcm9tKGgpO3ZhciBBPXMubW9udCh1Lm1vZHVsdXMpO2w9KGw9bmV3IHMobCkudG9SZWQoQSkpLnJlZFBvdyhuZXcgcyh1LnB1YmxpY0V4cG9uZW50KSksbD1tLmZyb20obC5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgUD13PDg/MTowO2ZvcihkPU1hdGgubWluKGwubGVuZ3RoLGgubGVuZ3RoKSxsLmxlbmd0aCE9PWgubGVuZ3RoJiYoUD0xKSxfPS0xOysrXzxkOylQfD1sW19dXmhbX107cmV0dXJuIFA9PT0wfX0seyIuL2N1cnZlcy5qc29uIjoyMTIsImJuLmpzIjoxODYsZWxsaXB0aWM6NDA1LCJwYXJzZS1hc24xIjo0NTksInNhZmUtYnVmZmVyIjo0OTR9XSwyMTY6W2Z1bmN0aW9uKGEsRSxrKXt9LHt9XSwyMTc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJidWZmZXIiKSxzPW0uQnVmZmVyO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIGwgaW4gdCllW2xdPXRbbF19ZnVuY3Rpb24gcih0LGUsbCl7cmV0dXJuIHModCxlLGwpfXMuZnJvbSYmcy5hbGxvYyYmcy5hbGxvY1Vuc2FmZSYmcy5hbGxvY1Vuc2FmZVNsb3c/RS5leHBvcnRzPW06KG8obSxrKSxrLkJ1ZmZlcj1yKSxvKHMsciksci5mcm9tPWZ1bmN0aW9uKHQsZSxsKXtpZih0eXBlb2YgdD09Im51bWJlciIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcyh0LGUsbCl9LHIuYWxsb2M9ZnVuY3Rpb24odCxlLGwpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIG49cyh0KTtyZXR1cm4gZSE9PXZvaWQgMD90eXBlb2YgbD09InN0cmluZyI/bi5maWxsKGUsbCk6bi5maWxsKGUpOm4uZmlsbCgwKSxufSxyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHModCl9LHIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIG0uU2xvd0J1ZmZlcih0KX19LHtidWZmZXI6MjIwfV0sMjE4OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgic2FmZS1idWZmZXIiKS5CdWZmZXIscz1tLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHUpe3N3aXRjaCgodT0iIit1KSYmdS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIG8odSl7dmFyIGQ7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24oaCl7dmFyIHc9ZnVuY3Rpb24oXyl7aWYoIV8pcmV0dXJuInV0ZjgiO2Zvcih2YXIgQTs7KXN3aXRjaChfKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gXztkZWZhdWx0OmlmKEEpcmV0dXJuO189KCIiK18pLnRvTG93ZXJDYXNlKCksQT0hMH19KGgpO2lmKHR5cGVvZiB3IT0ic3RyaW5nIiYmKG0uaXNFbmNvZGluZz09PXN8fCFzKGgpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIraCk7cmV0dXJuIHd8fGh9KHUpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PWUsdGhpcy5lbmQ9bCxkPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXQsZD00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9bix0aGlzLmVuZD1pLGQ9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPWYsdm9pZCh0aGlzLmVuZD1jKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPW0uYWxsb2NVbnNhZmUoZCl9ZnVuY3Rpb24gcih1KXtyZXR1cm4gdTw9MTI3PzA6dT4+NT09Nj8yOnU+PjQ9PTE0PzM6dT4+Mz09MzA/NDp1Pj42PT0yPy0xOi0yfWZ1bmN0aW9uIHQodSl7dmFyIGQ9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxoPWZ1bmN0aW9uKHcsXyxBKXtpZigoMTkyJl9bMF0pIT0xMjgpcmV0dXJuIHcubGFzdE5lZWQ9MCwi77+9IjtpZih3Lmxhc3ROZWVkPjEmJl8ubGVuZ3RoPjEpe2lmKCgxOTImX1sxXSkhPTEyOClyZXR1cm4gdy5sYXN0TmVlZD0xLCLvv70iO2lmKHcubGFzdE5lZWQ+MiYmXy5sZW5ndGg+MiYmKDE5MiZfWzJdKSE9MTI4KXJldHVybiB3Lmxhc3ROZWVkPTIsIu+/vSJ9fSh0aGlzLHUpO3JldHVybiBoIT09dm9pZCAwP2g6dGhpcy5sYXN0TmVlZDw9dS5sZW5ndGg/KHUuY29weSh0aGlzLmxhc3RDaGFyLGQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOih1LmNvcHkodGhpcy5sYXN0Q2hhcixkLDAsdS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09dS5sZW5ndGgpKX1mdW5jdGlvbiBlKHUsZCl7aWYoKHUubGVuZ3RoLWQpJTI9PTApe3ZhciBoPXUudG9TdHJpbmcoInV0ZjE2bGUiLGQpO2lmKGgpe3ZhciB3PWguY2hhckNvZGVBdChoLmxlbmd0aC0xKTtpZih3Pj01NTI5NiYmdzw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09dVt1Lmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPXVbdS5sZW5ndGgtMV0saC5zbGljZSgwLC0xKX1yZXR1cm4gaH1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT11W3UubGVuZ3RoLTFdLHUudG9TdHJpbmcoInV0ZjE2bGUiLGQsdS5sZW5ndGgtMSl9ZnVuY3Rpb24gbCh1KXt2YXIgZD11JiZ1Lmxlbmd0aD90aGlzLndyaXRlKHUpOiIiO2lmKHRoaXMubGFzdE5lZWQpe3ZhciBoPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQ7cmV0dXJuIGQrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCxoKX1yZXR1cm4gZH1mdW5jdGlvbiBuKHUsZCl7dmFyIGg9KHUubGVuZ3RoLWQpJTM7cmV0dXJuIGg9PT0wP3UudG9TdHJpbmcoImJhc2U2NCIsZCk6KHRoaXMubGFzdE5lZWQ9My1oLHRoaXMubGFzdFRvdGFsPTMsaD09PTE/dGhpcy5sYXN0Q2hhclswXT11W3UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPXVbdS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT11W3UubGVuZ3RoLTFdKSx1LnRvU3RyaW5nKCJiYXNlNjQiLGQsdS5sZW5ndGgtaCkpfWZ1bmN0aW9uIGkodSl7dmFyIGQ9dSYmdS5sZW5ndGg/dGhpcy53cml0ZSh1KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9kK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOmR9ZnVuY3Rpb24gZih1KXtyZXR1cm4gdS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBjKHUpe3JldHVybiB1JiZ1Lmxlbmd0aD90aGlzLndyaXRlKHUpOiIifWsuU3RyaW5nRGVjb2Rlcj1vLG8ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHUpe2lmKHUubGVuZ3RoPT09MClyZXR1cm4iIjt2YXIgZCxoO2lmKHRoaXMubGFzdE5lZWQpe2lmKChkPXRoaXMuZmlsbExhc3QodSkpPT09dm9pZCAwKXJldHVybiIiO2g9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBoPTA7cmV0dXJuIGg8dS5sZW5ndGg/ZD9kK3RoaXMudGV4dCh1LGgpOnRoaXMudGV4dCh1LGgpOmR8fCIifSxvLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odSl7dmFyIGQ9dSYmdS5sZW5ndGg/dGhpcy53cml0ZSh1KToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9kKyLvv70iOmR9LG8ucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24odSxkKXt2YXIgaD1mdW5jdGlvbihfLEEsUCl7dmFyIEw9QS5sZW5ndGgtMTtpZihMPFApcmV0dXJuIDA7dmFyIE49cihBW0xdKTtyZXR1cm4gTj49MD8oTj4wJiYoXy5sYXN0TmVlZD1OLTEpLE4pOi0tTDxQfHxOPT09LTI/MDooTj1yKEFbTF0pKT49MD8oTj4wJiYoXy5sYXN0TmVlZD1OLTIpLE4pOi0tTDxQfHxOPT09LTI/MDooTj1yKEFbTF0pKT49MD8oTj4wJiYoTj09PTI/Tj0wOl8ubGFzdE5lZWQ9Ti0zKSxOKTowfSh0aGlzLHUsZCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIHUudG9TdHJpbmcoInV0ZjgiLGQpO3RoaXMubGFzdFRvdGFsPWg7dmFyIHc9dS5sZW5ndGgtKGgtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHUuY29weSh0aGlzLmxhc3RDaGFyLDAsdyksdS50b1N0cmluZygidXRmOCIsZCx3KX0sby5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24odSl7aWYodGhpcy5sYXN0TmVlZDw9dS5sZW5ndGgpcmV0dXJuIHUuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7dS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHUubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT11Lmxlbmd0aH19LHsic2FmZS1idWZmZXIiOjIxN31dLDIxOTpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXtFLmV4cG9ydHM9ZnVuY3Rpb24ocyxvKXtmb3IodmFyIHI9TWF0aC5taW4ocy5sZW5ndGgsby5sZW5ndGgpLHQ9bmV3IG0ociksZT0wO2U8cjsrK2UpdFtlXT1zW2VdXm9bZV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJidWZmZXIiKS5CdWZmZXIpfSx7YnVmZmVyOjIyMH1dLDIyMDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXt2YXIgcz1hKCJiYXNlNjQtanMiKSxvPWEoImllZWU3NTQiKTtrLkJ1ZmZlcj10LGsuU2xvd0J1ZmZlcj1mdW5jdGlvbihUKXtyZXR1cm4rVCE9VCYmKFQ9MCksdC5hbGxvYygrVCl9LGsuSU5TUEVDVF9NQVhfQllURVM9NTA7ZnVuY3Rpb24gcihUKXtpZihUPjIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytUKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgeD1uZXcgVWludDhBcnJheShUKTtyZXR1cm4geC5fX3Byb3RvX189dC5wcm90b3R5cGUseH1mdW5jdGlvbiB0KFQseCxJKXtpZih0eXBlb2YgVD09Im51bWJlciIpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbihUKX1yZXR1cm4gZShULHgsSSl9ZnVuY3Rpb24gZShULHgsSSl7aWYodHlwZW9mIFQ9PSJzdHJpbmciKXJldHVybiBmdW5jdGlvbihWLEspe2lmKHR5cGVvZiBLPT0ic3RyaW5nIiYmSyE9PSIifHwoSz0idXRmOCIpLCF0LmlzRW5jb2RpbmcoSykpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitLKTt2YXIgWT0wfGMoVixLKSxKPXIoWSkscT1KLndyaXRlKFYsSyk7cmV0dXJuIHEhPT1ZJiYoSj1KLnNsaWNlKDAscSkpLEp9KFQseCk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFQpKXJldHVybiBpKFQpO2lmKFQ9PW51bGwpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBUKTtpZihqKFQsQXJyYXlCdWZmZXIpfHxUJiZqKFQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24oVixLLFkpe2lmKEs8MHx8Vi5ieXRlTGVuZ3RoPEspdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKFYuYnl0ZUxlbmd0aDxLKyhZfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIEo7cmV0dXJuIEo9Sz09PXZvaWQgMCYmWT09PXZvaWQgMD9uZXcgVWludDhBcnJheShWKTpZPT09dm9pZCAwP25ldyBVaW50OEFycmF5KFYsSyk6bmV3IFVpbnQ4QXJyYXkoVixLLFkpLEouX19wcm90b19fPXQucHJvdG90eXBlLEp9KFQseCxJKTtpZih0eXBlb2YgVD09Im51bWJlciIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIEg9VC52YWx1ZU9mJiZULnZhbHVlT2YoKTtpZihIIT1udWxsJiZIIT09VClyZXR1cm4gdC5mcm9tKEgseCxJKTt2YXIgWj1mdW5jdGlvbihWKXtpZih0LmlzQnVmZmVyKFYpKXt2YXIgSz0wfGYoVi5sZW5ndGgpLFk9cihLKTtyZXR1cm4gWS5sZW5ndGg9PT0wfHxWLmNvcHkoWSwwLDAsSyksWX1pZihWLmxlbmd0aCE9PXZvaWQgMClyZXR1cm4gdHlwZW9mIFYubGVuZ3RoIT0ibnVtYmVyInx8VyhWLmxlbmd0aCk/cigwKTppKFYpO2lmKFYudHlwZT09PSJCdWZmZXIiJiZBcnJheS5pc0FycmF5KFYuZGF0YSkpcmV0dXJuIGkoVi5kYXRhKX0oVCk7aWYoWilyZXR1cm4gWjtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvUHJpbWl0aXZlIT1udWxsJiZ0eXBlb2YgVFtTeW1ib2wudG9QcmltaXRpdmVdPT0iZnVuY3Rpb24iKXJldHVybiB0LmZyb20oVFtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSx4LEkpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFQpfWZ1bmN0aW9uIGwoVCl7aWYodHlwZW9mIFQhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoVDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrVCsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gbihUKXtyZXR1cm4gbChUKSxyKFQ8MD8wOjB8ZihUKSl9ZnVuY3Rpb24gaShUKXtmb3IodmFyIHg9VC5sZW5ndGg8MD8wOjB8ZihULmxlbmd0aCksST1yKHgpLEg9MDtIPHg7SCs9MSlJW0hdPTI1NSZUW0hdO3JldHVybiBJfWZ1bmN0aW9uIGYoVCl7aWYoVD49MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweDdmZmZmZmZmIGJ5dGVzIik7cmV0dXJuIDB8VH1mdW5jdGlvbiBjKFQseCl7aWYodC5pc0J1ZmZlcihUKSlyZXR1cm4gVC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFQpfHxqKFQsQXJyYXlCdWZmZXIpKXJldHVybiBULmJ5dGVMZW5ndGg7aWYodHlwZW9mIFQhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBUKTt2YXIgST1ULmxlbmd0aCxIPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdPT09ITA7aWYoIUgmJkk9PT0wKXJldHVybiAwO2Zvcih2YXIgWj0hMTs7KXN3aXRjaCh4KXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBJO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHooVCkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipJO2Nhc2UiaGV4IjpyZXR1cm4gST4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiAkKFQpLmxlbmd0aDtkZWZhdWx0OmlmKFopcmV0dXJuIEg/LTE6eihUKS5sZW5ndGg7eD0oIiIreCkudG9Mb3dlckNhc2UoKSxaPSEwfX1mdW5jdGlvbiB1KFQseCxJKXt2YXIgSD0hMTtpZigoeD09PXZvaWQgMHx8eDwwKSYmKHg9MCkseD50aGlzLmxlbmd0aHx8KChJPT09dm9pZCAwfHxJPnRoaXMubGVuZ3RoKSYmKEk9dGhpcy5sZW5ndGgpLEk8PTApfHwoST4+Pj0wKTw9KHg+Pj49MCkpcmV0dXJuIiI7Zm9yKFR8fChUPSJ1dGY4Iik7Oylzd2l0Y2goVCl7Y2FzZSJoZXgiOnJldHVybiBDKHRoaXMseCxJKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBVKHRoaXMseCxJKTtjYXNlImFzY2lpIjpyZXR1cm4gQih0aGlzLHgsSSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gUyh0aGlzLHgsSSk7Y2FzZSJiYXNlNjQiOnJldHVybiBGKHRoaXMseCxJKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHYodGhpcyx4LEkpO2RlZmF1bHQ6aWYoSCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1QpO1Q9KFQrIiIpLnRvTG93ZXJDYXNlKCksSD0hMH19ZnVuY3Rpb24gZChULHgsSSl7dmFyIEg9VFt4XTtUW3hdPVRbSV0sVFtJXT1IfWZ1bmN0aW9uIGgoVCx4LEksSCxaKXtpZihULmxlbmd0aD09PTApcmV0dXJuLTE7aWYodHlwZW9mIEk9PSJzdHJpbmciPyhIPUksST0wKTpJPjIxNDc0ODM2NDc/ST0yMTQ3NDgzNjQ3Okk8LTIxNDc0ODM2NDgmJihJPS0yMTQ3NDgzNjQ4KSxXKEk9K0kpJiYoST1aPzA6VC5sZW5ndGgtMSksSTwwJiYoST1ULmxlbmd0aCtJKSxJPj1ULmxlbmd0aCl7aWYoWilyZXR1cm4tMTtJPVQubGVuZ3RoLTF9ZWxzZSBpZihJPDApe2lmKCFaKXJldHVybi0xO0k9MH1pZih0eXBlb2YgeD09InN0cmluZyImJih4PXQuZnJvbSh4LEgpKSx0LmlzQnVmZmVyKHgpKXJldHVybiB4Lmxlbmd0aD09PTA/LTE6dyhULHgsSSxILFopO2lmKHR5cGVvZiB4PT0ibnVtYmVyIilyZXR1cm4geCY9MjU1LHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mPT0iZnVuY3Rpb24iP1o/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFQseCxJKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKFQseCxJKTp3KFQsW3hdLEksSCxaKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB3KFQseCxJLEgsWil7dmFyIFYsSz0xLFk9VC5sZW5ndGgsSj14Lmxlbmd0aDtpZihIIT09dm9pZCAwJiYoKEg9U3RyaW5nKEgpLnRvTG93ZXJDYXNlKCkpPT09InVjczIifHxIPT09InVjcy0yInx8SD09PSJ1dGYxNmxlInx8SD09PSJ1dGYtMTZsZSIpKXtpZihULmxlbmd0aDwyfHx4Lmxlbmd0aDwyKXJldHVybi0xO0s9MixZLz0yLEovPTIsSS89Mn1mdW5jdGlvbiBxKHN0LG90KXtyZXR1cm4gSz09PTE/c3Rbb3RdOnN0LnJlYWRVSW50MTZCRShvdCpLKX1pZihaKXt2YXIgRz0tMTtmb3IoVj1JO1Y8WTtWKyspaWYocShULFYpPT09cSh4LEc9PT0tMT8wOlYtRykpe2lmKEc9PT0tMSYmKEc9ViksVi1HKzE9PT1KKXJldHVybiBHKkt9ZWxzZSBHIT09LTEmJihWLT1WLUcpLEc9LTF9ZWxzZSBmb3IoSStKPlkmJihJPVktSiksVj1JO1Y+PTA7Vi0tKXtmb3IodmFyIFE9ITAscnQ9MDtydDxKO3J0KyspaWYocShULFYrcnQpIT09cSh4LHJ0KSl7UT0hMTticmVha31pZihRKXJldHVybiBWfXJldHVybi0xfWZ1bmN0aW9uIF8oVCx4LEksSCl7ST1OdW1iZXIoSSl8fDA7dmFyIFo9VC5sZW5ndGgtSTtIPyhIPU51bWJlcihIKSk+WiYmKEg9Wik6SD1aO3ZhciBWPXgubGVuZ3RoO0g+Vi8yJiYoSD1WLzIpO2Zvcih2YXIgSz0wO0s8SDsrK0spe3ZhciBZPXBhcnNlSW50KHguc3Vic3RyKDIqSywyKSwxNik7aWYoVyhZKSlyZXR1cm4gSztUW0krS109WX1yZXR1cm4gS31mdW5jdGlvbiBBKFQseCxJLEgpe3JldHVybiBYKHooeCxULmxlbmd0aC1JKSxULEksSCl9ZnVuY3Rpb24gUChULHgsSSxIKXtyZXR1cm4gWChmdW5jdGlvbihaKXtmb3IodmFyIFY9W10sSz0wO0s8Wi5sZW5ndGg7KytLKVYucHVzaCgyNTUmWi5jaGFyQ29kZUF0KEspKTtyZXR1cm4gVn0oeCksVCxJLEgpfWZ1bmN0aW9uIEwoVCx4LEksSCl7cmV0dXJuIFAoVCx4LEksSCl9ZnVuY3Rpb24gTihULHgsSSxIKXtyZXR1cm4gWCgkKHgpLFQsSSxIKX1mdW5jdGlvbiBEKFQseCxJLEgpe3JldHVybiBYKGZ1bmN0aW9uKFosVil7Zm9yKHZhciBLLFksSixxPVtdLEc9MDtHPFoubGVuZ3RoJiYhKChWLT0yKTwwKTsrK0cpSz1aLmNoYXJDb2RlQXQoRyksWT1LPj44LEo9SyUyNTYscS5wdXNoKEopLHEucHVzaChZKTtyZXR1cm4gcX0oeCxULmxlbmd0aC1JKSxULEksSCl9ZnVuY3Rpb24gRihULHgsSSl7cmV0dXJuIHg9PT0wJiZJPT09VC5sZW5ndGg/cy5mcm9tQnl0ZUFycmF5KFQpOnMuZnJvbUJ5dGVBcnJheShULnNsaWNlKHgsSSkpfWZ1bmN0aW9uIFUoVCx4LEkpe0k9TWF0aC5taW4oVC5sZW5ndGgsSSk7Zm9yKHZhciBIPVtdLFo9eDtaPEk7KXt2YXIgVixLLFksSixxPVRbWl0sRz1udWxsLFE9cT4yMzk/NDpxPjIyMz8zOnE+MTkxPzI6MTtpZihaK1E8PUkpc3dpdGNoKFEpe2Nhc2UgMTpxPDEyOCYmKEc9cSk7YnJlYWs7Y2FzZSAyOigxOTImKFY9VFtaKzFdKSk9PTEyOCYmKEo9KDMxJnEpPDw2fDYzJlYpPjEyNyYmKEc9Sik7YnJlYWs7Y2FzZSAzOlY9VFtaKzFdLEs9VFtaKzJdLCgxOTImVik9PTEyOCYmKDE5MiZLKT09MTI4JiYoSj0oMTUmcSk8PDEyfCg2MyZWKTw8Nnw2MyZLKT4yMDQ3JiYoSjw1NTI5Nnx8Sj41NzM0MykmJihHPUopO2JyZWFrO2Nhc2UgNDpWPVRbWisxXSxLPVRbWisyXSxZPVRbWiszXSwoMTkyJlYpPT0xMjgmJigxOTImSyk9PTEyOCYmKDE5MiZZKT09MTI4JiYoSj0oMTUmcSk8PDE4fCg2MyZWKTw8MTJ8KDYzJkspPDw2fDYzJlkpPjY1NTM1JiZKPDExMTQxMTImJihHPUopfUc9PT1udWxsPyhHPTY1NTMzLFE9MSk6Rz42NTUzNSYmKEctPTY1NTM2LEgucHVzaChHPj4+MTAmMTAyM3w1NTI5NiksRz01NjMyMHwxMDIzJkcpLEgucHVzaChHKSxaKz1RfXJldHVybiBmdW5jdGlvbihydCl7dmFyIHN0PXJ0Lmxlbmd0aDtpZihzdDw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcscnQpO2Zvcih2YXIgb3Q9IiIsaHQ9MDtodDxzdDspb3QrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHJ0LnNsaWNlKGh0LGh0Kz00MDk2KSk7cmV0dXJuIG90fShIKX1rLmtNYXhMZW5ndGg9MjE0NzQ4MzY0Nyx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24oKXt0cnl7dmFyIFQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIFQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sVC5mb28oKT09PTQyfWNhdGNoe3JldHVybiExfX0oKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHR5cGVvZiBjb25zb2xlPiJ1Inx8dHlwZW9mIGNvbnNvbGUuZXJyb3IhPSJmdW5jdGlvbiJ8fGNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih0LmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYodC5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLHR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuc3BlY2llcyE9bnVsbCYmdFtTeW1ib2wuc3BlY2llc109PT10JiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMX0pLHQucG9vbFNpemU9ODE5Mix0LmZyb209ZnVuY3Rpb24oVCx4LEkpe3JldHVybiBlKFQseCxJKX0sdC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHQuX19wcm90b19fPVVpbnQ4QXJyYXksdC5hbGxvYz1mdW5jdGlvbihULHgsSSl7cmV0dXJuIGZ1bmN0aW9uKEgsWixWKXtyZXR1cm4gbChIKSxIPD0wP3IoSCk6WiE9PXZvaWQgMD90eXBlb2YgVj09InN0cmluZyI/cihIKS5maWxsKFosVik6cihIKS5maWxsKFopOnIoSCl9KFQseCxJKX0sdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihUKXtyZXR1cm4gbihUKX0sdC5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oVCl7cmV0dXJuIG4oVCl9LHQuaXNCdWZmZXI9ZnVuY3Rpb24oVCl7cmV0dXJuIFQhPW51bGwmJlQuX2lzQnVmZmVyPT09ITAmJlQhPT10LnByb3RvdHlwZX0sdC5jb21wYXJlPWZ1bmN0aW9uKFQseCl7aWYoaihULFVpbnQ4QXJyYXkpJiYoVD10LmZyb20oVCxULm9mZnNldCxULmJ5dGVMZW5ndGgpKSxqKHgsVWludDhBcnJheSkmJih4PXQuZnJvbSh4LHgub2Zmc2V0LHguYnl0ZUxlbmd0aCkpLCF0LmlzQnVmZmVyKFQpfHwhdC5pc0J1ZmZlcih4KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihUPT09eClyZXR1cm4gMDtmb3IodmFyIEk9VC5sZW5ndGgsSD14Lmxlbmd0aCxaPTAsVj1NYXRoLm1pbihJLEgpO1o8VjsrK1opaWYoVFtaXSE9PXhbWl0pe0k9VFtaXSxIPXhbWl07YnJlYWt9cmV0dXJuIEk8SD8tMTpIPEk/MTowfSx0LmlzRW5jb2Rpbmc9ZnVuY3Rpb24oVCl7c3dpdGNoKFN0cmluZyhUKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHQuY29uY2F0PWZ1bmN0aW9uKFQseCl7aWYoIUFycmF5LmlzQXJyYXkoVCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKFQubGVuZ3RoPT09MClyZXR1cm4gdC5hbGxvYygwKTt2YXIgSTtpZih4PT09dm9pZCAwKWZvcih4PTAsST0wO0k8VC5sZW5ndGg7KytJKXgrPVRbSV0ubGVuZ3RoO3ZhciBIPXQuYWxsb2NVbnNhZmUoeCksWj0wO2ZvcihJPTA7STxULmxlbmd0aDsrK0kpe3ZhciBWPVRbSV07aWYoaihWLFVpbnQ4QXJyYXkpJiYoVj10LmZyb20oVikpLCF0LmlzQnVmZmVyKFYpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtWLmNvcHkoSCxaKSxaKz1WLmxlbmd0aH1yZXR1cm4gSH0sdC5ieXRlTGVuZ3RoPWMsdC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBUPXRoaXMubGVuZ3RoO2lmKFQlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IodmFyIHg9MDt4PFQ7eCs9MilkKHRoaXMseCx4KzEpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLmxlbmd0aDtpZihUJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB4PTA7eDxUO3grPTQpZCh0aGlzLHgseCszKSxkKHRoaXMseCsxLHgrMik7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBUPXRoaXMubGVuZ3RoO2lmKFQlOCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IodmFyIHg9MDt4PFQ7eCs9OClkKHRoaXMseCx4KzcpLGQodGhpcyx4KzEseCs2KSxkKHRoaXMseCsyLHgrNSksZCh0aGlzLHgrMyx4KzQpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBUPXRoaXMubGVuZ3RoO3JldHVybiBUPT09MD8iIjphcmd1bWVudHMubGVuZ3RoPT09MD9VKHRoaXMsMCxUKTp1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9dC5wcm90b3R5cGUudG9TdHJpbmcsdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKFQpe2lmKCF0LmlzQnVmZmVyKFQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PVR8fHQuY29tcGFyZSh0aGlzLFQpPT09MH0sdC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBUPSIiLHg9ay5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gVD10aGlzLnRvU3RyaW5nKCJoZXgiLDAseCkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD54JiYoVCs9IiAuLi4gIiksIjxCdWZmZXIgIitUKyI+In0sdC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihULHgsSSxILFope2lmKGooVCxVaW50OEFycmF5KSYmKFQ9dC5mcm9tKFQsVC5vZmZzZXQsVC5ieXRlTGVuZ3RoKSksIXQuaXNCdWZmZXIoVCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVCk7aWYoeD09PXZvaWQgMCYmKHg9MCksST09PXZvaWQgMCYmKEk9VD9ULmxlbmd0aDowKSxIPT09dm9pZCAwJiYoSD0wKSxaPT09dm9pZCAwJiYoWj10aGlzLmxlbmd0aCkseDwwfHxJPlQubGVuZ3RofHxIPDB8fFo+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKEg+PVomJng+PUkpcmV0dXJuIDA7aWYoSD49WilyZXR1cm4tMTtpZih4Pj1JKXJldHVybiAxO2lmKHRoaXM9PT1UKXJldHVybiAwO2Zvcih2YXIgVj0oWj4+Pj0wKS0oSD4+Pj0wKSxLPShJPj4+PTApLSh4Pj4+PTApLFk9TWF0aC5taW4oVixLKSxKPXRoaXMuc2xpY2UoSCxaKSxxPVQuc2xpY2UoeCxJKSxHPTA7RzxZOysrRylpZihKW0ddIT09cVtHXSl7Vj1KW0ddLEs9cVtHXTticmVha31yZXR1cm4gVjxLPy0xOks8Vj8xOjB9LHQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gdGhpcy5pbmRleE9mKFQseCxJKSE9PS0xfSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gaCh0aGlzLFQseCxJLCEwKX0sdC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oVCx4LEkpe3JldHVybiBoKHRoaXMsVCx4LEksITEpfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihULHgsSSxIKXtpZih4PT09dm9pZCAwKUg9InV0ZjgiLEk9dGhpcy5sZW5ndGgseD0wO2Vsc2UgaWYoST09PXZvaWQgMCYmdHlwZW9mIHg9PSJzdHJpbmciKUg9eCxJPXRoaXMubGVuZ3RoLHg9MDtlbHNle2lmKCFpc0Zpbml0ZSh4KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7eD4+Pj0wLGlzRmluaXRlKEkpPyhJPj4+PTAsSD09PXZvaWQgMCYmKEg9InV0ZjgiKSk6KEg9SSxJPXZvaWQgMCl9dmFyIFo9dGhpcy5sZW5ndGgteDtpZigoST09PXZvaWQgMHx8ST5aKSYmKEk9WiksVC5sZW5ndGg+MCYmKEk8MHx8eDwwKXx8eD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtIfHwoSD0idXRmOCIpO2Zvcih2YXIgVj0hMTs7KXN3aXRjaChIKXtjYXNlImhleCI6cmV0dXJuIF8odGhpcyxULHgsSSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQSh0aGlzLFQseCxJKTtjYXNlImFzY2lpIjpyZXR1cm4gUCh0aGlzLFQseCxJKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBMKHRoaXMsVCx4LEkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTih0aGlzLFQseCxJKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEQodGhpcyxULHgsSSk7ZGVmYXVsdDppZihWKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSCk7SD0oIiIrSCkudG9Mb3dlckNhc2UoKSxWPSEwfX0sdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtmdW5jdGlvbiBCKFQseCxJKXt2YXIgSD0iIjtJPU1hdGgubWluKFQubGVuZ3RoLEkpO2Zvcih2YXIgWj14O1o8STsrK1opSCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmVFtaXSk7cmV0dXJuIEh9ZnVuY3Rpb24gUyhULHgsSSl7dmFyIEg9IiI7ST1NYXRoLm1pbihULmxlbmd0aCxJKTtmb3IodmFyIFo9eDtaPEk7KytaKUgrPVN0cmluZy5mcm9tQ2hhckNvZGUoVFtaXSk7cmV0dXJuIEh9ZnVuY3Rpb24gQyhULHgsSSl7dmFyIEg9VC5sZW5ndGg7KCF4fHx4PDApJiYoeD0wKSwoIUl8fEk8MHx8ST5IKSYmKEk9SCk7Zm9yKHZhciBaPSIiLFY9eDtWPEk7KytWKVorPVIoVFtWXSk7cmV0dXJuIFp9ZnVuY3Rpb24gdihULHgsSSl7Zm9yKHZhciBIPVQuc2xpY2UoeCxJKSxaPSIiLFY9MDtWPEgubGVuZ3RoO1YrPTIpWis9U3RyaW5nLmZyb21DaGFyQ29kZShIW1ZdKzI1NipIW1YrMV0pO3JldHVybiBafWZ1bmN0aW9uIHAoVCx4LEkpe2lmKFQlMSE9MHx8VDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihUK3g+SSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIGIoVCx4LEksSCxaLFYpe2lmKCF0LmlzQnVmZmVyKFQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih4Plp8fHg8Vil0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoSStIPlQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBnKFQseCxJLEgsWixWKXtpZihJK0g+VC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEk8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24geShULHgsSSxILFope3JldHVybiB4PSt4LEk+Pj49MCxafHxnKFQsMCxJLDQpLG8ud3JpdGUoVCx4LEksSCwyMyw0KSxJKzR9ZnVuY3Rpb24gTShULHgsSSxILFope3JldHVybiB4PSt4LEk+Pj49MCxafHxnKFQsMCxJLDgpLG8ud3JpdGUoVCx4LEksSCw1Miw4KSxJKzh9dC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oVCx4KXt2YXIgST10aGlzLmxlbmd0aDsoVD1+flQpPDA/KFQrPUkpPDAmJihUPTApOlQ+SSYmKFQ9SSksKHg9eD09PXZvaWQgMD9JOn5+eCk8MD8oeCs9SSk8MCYmKHg9MCk6eD5JJiYoeD1JKSx4PFQmJih4PVQpO3ZhciBIPXRoaXMuc3ViYXJyYXkoVCx4KTtyZXR1cm4gSC5fX3Byb3RvX189dC5wcm90b3R5cGUsSH0sdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihULHgsSSl7VD4+Pj0wLHg+Pj49MCxJfHxwKFQseCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBIPXRoaXNbVF0sWj0xLFY9MDsrK1Y8eCYmKFoqPTI1Nik7KUgrPXRoaXNbVCtWXSpaO3JldHVybiBIfSx0LnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKFQseCxJKXtUPj4+PTAseD4+Pj0wLEl8fHAoVCx4LHRoaXMubGVuZ3RoKTtmb3IodmFyIEg9dGhpc1tUKy0teF0sWj0xO3g+MCYmKFoqPTI1Nik7KUgrPXRoaXNbVCstLXhdKlo7cmV0dXJuIEh9LHQucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihULHgpe3JldHVybiBUPj4+PTAseHx8cChULDEsdGhpcy5sZW5ndGgpLHRoaXNbVF19LHQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihULHgpe3JldHVybiBUPj4+PTAseHx8cChULDIsdGhpcy5sZW5ndGgpLHRoaXNbVF18dGhpc1tUKzFdPDw4fSx0LnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oVCx4KXtyZXR1cm4gVD4+Pj0wLHh8fHAoVCwyLHRoaXMubGVuZ3RoKSx0aGlzW1RdPDw4fHRoaXNbVCsxXX0sdC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKFQseCl7cmV0dXJuIFQ+Pj49MCx4fHxwKFQsNCx0aGlzLmxlbmd0aCksKHRoaXNbVF18dGhpc1tUKzFdPDw4fHRoaXNbVCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbVCszXX0sdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKFQseCl7cmV0dXJuIFQ+Pj49MCx4fHxwKFQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1tUXSsodGhpc1tUKzFdPDwxNnx0aGlzW1QrMl08PDh8dGhpc1tUKzNdKX0sdC5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKFQseCxJKXtUPj4+PTAseD4+Pj0wLEl8fHAoVCx4LHRoaXMubGVuZ3RoKTtmb3IodmFyIEg9dGhpc1tUXSxaPTEsVj0wOysrVjx4JiYoWio9MjU2KTspSCs9dGhpc1tUK1ZdKlo7cmV0dXJuIEg+PShaKj0xMjgpJiYoSC09TWF0aC5wb3coMiw4KngpKSxIfSx0LnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oVCx4LEkpe1Q+Pj49MCx4Pj4+PTAsSXx8cChULHgsdGhpcy5sZW5ndGgpO2Zvcih2YXIgSD14LFo9MSxWPXRoaXNbVCstLUhdO0g+MCYmKFoqPTI1Nik7KVYrPXRoaXNbVCstLUhdKlo7cmV0dXJuIFY+PShaKj0xMjgpJiYoVi09TWF0aC5wb3coMiw4KngpKSxWfSx0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihULHgpe3JldHVybiBUPj4+PTAseHx8cChULDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW1RdPy0xKigyNTUtdGhpc1tUXSsxKTp0aGlzW1RdfSx0LnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihULHgpe1Q+Pj49MCx4fHxwKFQsMix0aGlzLmxlbmd0aCk7dmFyIEk9dGhpc1tUXXx0aGlzW1QrMV08PDg7cmV0dXJuIDMyNzY4Jkk/NDI5NDkwMTc2MHxJOkl9LHQucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKFQseCl7VD4+Pj0wLHh8fHAoVCwyLHRoaXMubGVuZ3RoKTt2YXIgST10aGlzW1QrMV18dGhpc1tUXTw8ODtyZXR1cm4gMzI3NjgmST80Mjk0OTAxNzYwfEk6SX0sdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oVCx4KXtyZXR1cm4gVD4+Pj0wLHh8fHAoVCw0LHRoaXMubGVuZ3RoKSx0aGlzW1RdfHRoaXNbVCsxXTw8OHx0aGlzW1QrMl08PDE2fHRoaXNbVCszXTw8MjR9LHQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKFQseCl7cmV0dXJuIFQ+Pj49MCx4fHxwKFQsNCx0aGlzLmxlbmd0aCksdGhpc1tUXTw8MjR8dGhpc1tUKzFdPDwxNnx0aGlzW1QrMl08PDh8dGhpc1tUKzNdfSx0LnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihULHgpe3JldHVybiBUPj4+PTAseHx8cChULDQsdGhpcy5sZW5ndGgpLG8ucmVhZCh0aGlzLFQsITAsMjMsNCl9LHQucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKFQseCl7cmV0dXJuIFQ+Pj49MCx4fHxwKFQsNCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsVCwhMSwyMyw0KX0sdC5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKFQseCl7cmV0dXJuIFQ+Pj49MCx4fHxwKFQsOCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsVCwhMCw1Miw4KX0sdC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKFQseCl7cmV0dXJuIFQ+Pj49MCx4fHxwKFQsOCx0aGlzLmxlbmd0aCksby5yZWFkKHRoaXMsVCwhMSw1Miw4KX0sdC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oVCx4LEksSCl7VD0rVCx4Pj4+PTAsST4+Pj0wLEh8fGIodGhpcyxULHgsSSxNYXRoLnBvdygyLDgqSSktMSwwKTt2YXIgWj0xLFY9MDtmb3IodGhpc1t4XT0yNTUmVDsrK1Y8SSYmKFoqPTI1Nik7KXRoaXNbeCtWXT1UL1omMjU1O3JldHVybiB4K0l9LHQucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKFQseCxJLEgpe1Q9K1QseD4+Pj0wLEk+Pj49MCxIfHxiKHRoaXMsVCx4LEksTWF0aC5wb3coMiw4KkkpLTEsMCk7dmFyIFo9SS0xLFY9MTtmb3IodGhpc1t4K1pdPTI1NSZUOy0tWj49MCYmKFYqPTI1Nik7KXRoaXNbeCtaXT1UL1YmMjU1O3JldHVybiB4K0l9LHQucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oVCx4LEkpe3JldHVybiBUPStULHg+Pj49MCxJfHxiKHRoaXMsVCx4LDEsMjU1LDApLHRoaXNbeF09MjU1JlQseCsxfSx0LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gVD0rVCx4Pj4+PTAsSXx8Yih0aGlzLFQseCwyLDY1NTM1LDApLHRoaXNbeF09MjU1JlQsdGhpc1t4KzFdPVQ+Pj44LHgrMn0sdC5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbihULHgsSSl7cmV0dXJuIFQ9K1QseD4+Pj0wLEl8fGIodGhpcyxULHgsMiw2NTUzNSwwKSx0aGlzW3hdPVQ+Pj44LHRoaXNbeCsxXT0yNTUmVCx4KzJ9LHQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oVCx4LEkpe3JldHVybiBUPStULHg+Pj49MCxJfHxiKHRoaXMsVCx4LDQsNDI5NDk2NzI5NSwwKSx0aGlzW3grM109VD4+PjI0LHRoaXNbeCsyXT1UPj4+MTYsdGhpc1t4KzFdPVQ+Pj44LHRoaXNbeF09MjU1JlQseCs0fSx0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gVD0rVCx4Pj4+PTAsSXx8Yih0aGlzLFQseCw0LDQyOTQ5NjcyOTUsMCksdGhpc1t4XT1UPj4+MjQsdGhpc1t4KzFdPVQ+Pj4xNix0aGlzW3grMl09VD4+PjgsdGhpc1t4KzNdPTI1NSZULHgrNH0sdC5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihULHgsSSxIKXtpZihUPStULHg+Pj49MCwhSCl7dmFyIFo9TWF0aC5wb3coMiw4KkktMSk7Yih0aGlzLFQseCxJLFotMSwtWil9dmFyIFY9MCxLPTEsWT0wO2Zvcih0aGlzW3hdPTI1NSZUOysrVjxJJiYoSyo9MjU2KTspVDwwJiZZPT09MCYmdGhpc1t4K1YtMV0hPT0wJiYoWT0xKSx0aGlzW3grVl09KFQvSz4+MCktWSYyNTU7cmV0dXJuIHgrSX0sdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihULHgsSSxIKXtpZihUPStULHg+Pj49MCwhSCl7dmFyIFo9TWF0aC5wb3coMiw4KkktMSk7Yih0aGlzLFQseCxJLFotMSwtWil9dmFyIFY9SS0xLEs9MSxZPTA7Zm9yKHRoaXNbeCtWXT0yNTUmVDstLVY+PTAmJihLKj0yNTYpOylUPDAmJlk9PT0wJiZ0aGlzW3grVisxXSE9PTAmJihZPTEpLHRoaXNbeCtWXT0oVC9LPj4wKS1ZJjI1NTtyZXR1cm4geCtJfSx0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oVCx4LEkpe3JldHVybiBUPStULHg+Pj49MCxJfHxiKHRoaXMsVCx4LDEsMTI3LC0xMjgpLFQ8MCYmKFQ9MjU1K1QrMSksdGhpc1t4XT0yNTUmVCx4KzF9LHQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihULHgsSSl7cmV0dXJuIFQ9K1QseD4+Pj0wLEl8fGIodGhpcyxULHgsMiwzMjc2NywtMzI3NjgpLHRoaXNbeF09MjU1JlQsdGhpc1t4KzFdPVQ+Pj44LHgrMn0sdC5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gVD0rVCx4Pj4+PTAsSXx8Yih0aGlzLFQseCwyLDMyNzY3LC0zMjc2OCksdGhpc1t4XT1UPj4+OCx0aGlzW3grMV09MjU1JlQseCsyfSx0LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oVCx4LEkpe3JldHVybiBUPStULHg+Pj49MCxJfHxiKHRoaXMsVCx4LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1t4XT0yNTUmVCx0aGlzW3grMV09VD4+PjgsdGhpc1t4KzJdPVQ+Pj4xNix0aGlzW3grM109VD4+PjI0LHgrNH0sdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gVD0rVCx4Pj4+PTAsSXx8Yih0aGlzLFQseCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFQ8MCYmKFQ9NDI5NDk2NzI5NStUKzEpLHRoaXNbeF09VD4+PjI0LHRoaXNbeCsxXT1UPj4+MTYsdGhpc1t4KzJdPVQ+Pj44LHRoaXNbeCszXT0yNTUmVCx4KzR9LHQucHJvdG90eXBlLndyaXRlRmxvYXRMRT1mdW5jdGlvbihULHgsSSl7cmV0dXJuIHkodGhpcyxULHgsITAsSSl9LHQucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihULHgsSSl7cmV0dXJuIHkodGhpcyxULHgsITEsSSl9LHQucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oVCx4LEkpe3JldHVybiBNKHRoaXMsVCx4LCEwLEkpfSx0LnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gTSh0aGlzLFQseCwhMSxJKX0sdC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihULHgsSSxIKXtpZighdC5pc0J1ZmZlcihUKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihJfHwoST0wKSxIfHxIPT09MHx8KEg9dGhpcy5sZW5ndGgpLHg+PVQubGVuZ3RoJiYoeD1ULmxlbmd0aCkseHx8KHg9MCksSD4wJiZIPEkmJihIPUkpLEg9PT1JfHxULmxlbmd0aD09PTB8fHRoaXMubGVuZ3RoPT09MClyZXR1cm4gMDtpZih4PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZihJPDB8fEk+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihIPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7SD50aGlzLmxlbmd0aCYmKEg9dGhpcy5sZW5ndGgpLFQubGVuZ3RoLXg8SC1JJiYoSD1ULmxlbmd0aC14K0kpO3ZhciBaPUgtSTtpZih0aGlzPT09VCYmdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW49PSJmdW5jdGlvbiIpdGhpcy5jb3B5V2l0aGluKHgsSSxIKTtlbHNlIGlmKHRoaXM9PT1UJiZJPHgmJng8SClmb3IodmFyIFY9Wi0xO1Y+PTA7LS1WKVRbVit4XT10aGlzW1YrSV07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChULHRoaXMuc3ViYXJyYXkoSSxIKSx4KTtyZXR1cm4gWn0sdC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihULHgsSSxIKXtpZih0eXBlb2YgVD09InN0cmluZyIpe2lmKHR5cGVvZiB4PT0ic3RyaW5nIj8oSD14LHg9MCxJPXRoaXMubGVuZ3RoKTp0eXBlb2YgST09InN0cmluZyImJihIPUksST10aGlzLmxlbmd0aCksSCE9PXZvaWQgMCYmdHlwZW9mIEghPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZih0eXBlb2YgSD09InN0cmluZyImJiF0LmlzRW5jb2RpbmcoSCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitIKTtpZihULmxlbmd0aD09PTEpe3ZhciBaPVQuY2hhckNvZGVBdCgwKTsoSD09PSJ1dGY4IiYmWjwxMjh8fEg9PT0ibGF0aW4xIikmJihUPVopfX1lbHNlIHR5cGVvZiBUPT0ibnVtYmVyIiYmKFQmPTI1NSk7aWYoeDwwfHx0aGlzLmxlbmd0aDx4fHx0aGlzLmxlbmd0aDxJKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihJPD14KXJldHVybiB0aGlzO3ZhciBWO2lmKHg+Pj49MCxJPUk9PT12b2lkIDA/dGhpcy5sZW5ndGg6ST4+PjAsVHx8KFQ9MCksdHlwZW9mIFQ9PSJudW1iZXIiKWZvcihWPXg7VjxJOysrVil0aGlzW1ZdPVQ7ZWxzZXt2YXIgSz10LmlzQnVmZmVyKFQpP1Q6dC5mcm9tKFQsSCksWT1LLmxlbmd0aDtpZihZPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrVCsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKFY9MDtWPEkteDsrK1YpdGhpc1tWK3hdPUtbViVZXX1yZXR1cm4gdGhpc307dmFyIE89L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBSKFQpe3JldHVybiBUPDE2PyIwIitULnRvU3RyaW5nKDE2KTpULnRvU3RyaW5nKDE2KX1mdW5jdGlvbiB6KFQseCl7dmFyIEk7eD14fHwxLzA7Zm9yKHZhciBIPVQubGVuZ3RoLFo9bnVsbCxWPVtdLEs9MDtLPEg7KytLKXtpZigoST1ULmNoYXJDb2RlQXQoSykpPjU1Mjk1JiZJPDU3MzQ0KXtpZighWil7aWYoST41NjMxOSl7KHgtPTMpPi0xJiZWLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKEsrMT09PUgpeyh4LT0zKT4tMSYmVi5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1aPUk7Y29udGludWV9aWYoSTw1NjMyMCl7KHgtPTMpPi0xJiZWLnB1c2goMjM5LDE5MSwxODkpLFo9STtjb250aW51ZX1JPTY1NTM2KyhaLTU1Mjk2PDwxMHxJLTU2MzIwKX1lbHNlIFomJih4LT0zKT4tMSYmVi5wdXNoKDIzOSwxOTEsMTg5KTtpZihaPW51bGwsSTwxMjgpe2lmKCh4LT0xKTwwKWJyZWFrO1YucHVzaChJKX1lbHNlIGlmKEk8MjA0OCl7aWYoKHgtPTIpPDApYnJlYWs7Vi5wdXNoKEk+PjZ8MTkyLDYzJkl8MTI4KX1lbHNlIGlmKEk8NjU1MzYpe2lmKCh4LT0zKTwwKWJyZWFrO1YucHVzaChJPj4xMnwyMjQsST4+NiY2M3wxMjgsNjMmSXwxMjgpfWVsc2V7aWYoIShJPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHgtPTQpPDApYnJlYWs7Vi5wdXNoKEk+PjE4fDI0MCxJPj4xMiY2M3wxMjgsST4+NiY2M3wxMjgsNjMmSXwxMjgpfX1yZXR1cm4gVn1mdW5jdGlvbiAkKFQpe3JldHVybiBzLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKHgpe2lmKCh4PSh4PXguc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoTywiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7eC5sZW5ndGglNCE9MDspeCs9Ij0iO3JldHVybiB4fShUKSl9ZnVuY3Rpb24gWChULHgsSSxIKXtmb3IodmFyIFo9MDtaPEgmJiEoWitJPj14Lmxlbmd0aHx8Wj49VC5sZW5ndGgpOysrWil4W1orSV09VFtaXTtyZXR1cm4gWn1mdW5jdGlvbiBqKFQseCl7cmV0dXJuIFQgaW5zdGFuY2VvZiB4fHxUIT1udWxsJiZULmNvbnN0cnVjdG9yIT1udWxsJiZULmNvbnN0cnVjdG9yLm5hbWUhPW51bGwmJlQuY29uc3RydWN0b3IubmFtZT09PXgubmFtZX1mdW5jdGlvbiBXKFQpe3JldHVybiBUIT1UfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiYnVmZmVyIikuQnVmZmVyKX0seyJiYXNlNjQtanMiOjE4NSxidWZmZXI6MjIwLGllZWU3NTQ6NDM5fV0sMjIxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgic2FmZS1idWZmZXIiKS5CdWZmZXIscz1hKCJzdHJlYW0iKS5UcmFuc2Zvcm0sbz1hKCJzdHJpbmdfZGVjb2RlciIpLlN0cmluZ0RlY29kZXI7ZnVuY3Rpb24gcih0KXtzLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT10eXBlb2YgdD09InN0cmluZyIsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfWEoImluaGVyaXRzIikocixzKSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLGwpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9bS5mcm9tKHQsZSkpO3ZhciBuPXRoaXMuX3VwZGF0ZSh0KTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihsJiYobj10aGlzLl90b1N0cmluZyhuLGwpKSxuKX0sci5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHIucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sci5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxyLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLGwpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh0KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHQpKX1jYXRjaChpKXtuPWl9ZmluYWxseXtsKG4pfX0sci5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKGwpe2U9bH10KGUpfSxyLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZmluYWwoKXx8bS5hbGxvYygwKTtyZXR1cm4gdCYmKGU9dGhpcy5fdG9TdHJpbmcoZSx0LCEwKSksZX0sci5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxsKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgbyhlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gbCYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59LEUuZXhwb3J0cz1yfSx7aW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0LHN0cmVhbTo1MDUsc3RyaW5nX2RlY29kZXI6MjE4fV0sMjIyOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIikscz1hKCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZyIpLG89VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbihyKXtpZihtKHIpKXJldHVybiByO3Rocm93IG5ldyBvKHMocikrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0seyIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmciOjM0OX1dLDIyMzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvciIpLHM9YSgiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmciKSxvPVR5cGVFcnJvcjtFLmV4cG9ydHM9ZnVuY3Rpb24ocil7aWYobShyKSlyZXR1cm4gcjt0aHJvdyBuZXcgbyhzKHIpKyIgaXMgbm90IGEgY29uc3RydWN0b3IiKX19LHsiLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yIjoyODYsIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nIjozNDl9XSwyMjQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxzPVN0cmluZyxvPVR5cGVFcnJvcjtFLmV4cG9ydHM9ZnVuY3Rpb24ocil7aWYodHlwZW9mIHI9PSJvYmplY3QifHxtKHIpKXJldHVybiByO3Rocm93IG5ldyBvKCJDYW4ndCBzZXQgIitzKHIpKyIgYXMgYSBwcm90b3R5cGUiKX19LHsiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODV9XSwyMjU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSxzPWEoIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIiksbz1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSIpLmYscj1tKCJ1bnNjb3BhYmxlcyIpLHQ9QXJyYXkucHJvdG90eXBlO3Rbcl09PT12b2lkIDAmJm8odCxyLHtjb25maWd1cmFibGU6ITAsdmFsdWU6cyhudWxsKX0pLEUuZXhwb3J0cz1mdW5jdGlvbihlKXt0W3JdW2VdPSEwfX0seyIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZSI6MzA2LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSI6MzA4LCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDIyNjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mIikscz1UeXBlRXJyb3I7RS5leHBvcnRzPWZ1bmN0aW9uKG8scil7aWYobShyLG8pKXJldHVybiBvO3Rocm93IG5ldyBzKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfX0seyIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZiI6MzE0fV0sMjI3OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCIpLHM9U3RyaW5nLG89VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbihyKXtpZihtKHIpKXJldHVybiByO3Rocm93IG5ldyBvKHMocikrIiBpcyBub3QgYW4gb2JqZWN0Iil9fSx7Ii4uL2ludGVybmFscy9pcy1vYmplY3QiOjI4OX1dLDIyODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCIpLHM9YSgiLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Iiksbz1hKCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiKSxyPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLGwsbil7dmFyIGksZj1tKGUpLGM9byhmKSx1PXMobixjKTtpZih0JiZsIT1sKXtmb3IoO2M+dTspaWYoKGk9Zlt1KytdKSE9aSlyZXR1cm4hMH1lbHNlIGZvcig7Yz51O3UrKylpZigodHx8dSBpbiBmKSYmZlt1XT09PWwpcmV0dXJuIHR8fHV8fDA7cmV0dXJuIXQmJi0xfX07RS5leHBvcnRzPXtpbmNsdWRlczpyKCEwKSxpbmRleE9mOnIoITEpfX0seyIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiOjI5OSwiLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4IjozNDAsIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCI6MzQxfV0sMjI5OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCIpLHM9YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLG89YSgiLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Iikscj1hKCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0IiksdD1hKCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiKSxlPWEoIi4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZSIpLGw9cyhbXS5wdXNoKSxuPWZ1bmN0aW9uKGkpe3ZhciBmPWk9PT0xLGM9aT09PTIsdT1pPT09MyxkPWk9PT00LGg9aT09PTYsdz1pPT09NyxfPWk9PT01fHxoO3JldHVybiBmdW5jdGlvbihBLFAsTCxOKXtmb3IodmFyIEQsRixVPXIoQSksQj1vKFUpLFM9bShQLEwpLEM9dChCKSx2PTAscD1OfHxlLGI9Zj9wKEEsQyk6Y3x8dz9wKEEsMCk6dm9pZCAwO0M+djt2KyspaWYoKF98fHYgaW4gQikmJihGPVMoRD1CW3ZdLHYsVSksaSkpaWYoZiliW3ZdPUY7ZWxzZSBpZihGKXN3aXRjaChpKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBEO2Nhc2UgNjpyZXR1cm4gdjtjYXNlIDI6bChiLEQpfWVsc2Ugc3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6bChiLEQpfXJldHVybiBoPy0xOnV8fGQ/ZDpifX07RS5leHBvcnRzPXtmb3JFYWNoOm4oMCksbWFwOm4oMSksZmlsdGVyOm4oMiksc29tZTpuKDMpLGV2ZXJ5Om4oNCksZmluZDpuKDUpLGZpbmRJbmRleDpuKDYpLGZpbHRlclJlamVjdDpuKDcpfX0seyIuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUiOjIzMywiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCI6MjYyLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCI6MjgwLCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiOjI5OSwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCI6MzQ0fV0sMjMwOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Iikscz1hKCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiKSxvPWEoIi4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkiKSxyPUFycmF5LHQ9TWF0aC5tYXg7RS5leHBvcnRzPWZ1bmN0aW9uKGUsbCxuKXtmb3IodmFyIGk9cyhlKSxmPW0obCxpKSxjPW0obj09PXZvaWQgMD9pOm4saSksdT1yKHQoYy1mLDApKSxkPTA7ZjxjO2YrKyxkKyspbyh1LGQsZVtmXSk7cmV0dXJuIHUubGVuZ3RoPWQsdX19LHsiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eSI6MjQzLCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UiOjI5OSwiLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4IjozNDB9XSwyMzE6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIik7RS5leHBvcnRzPW0oW10uc2xpY2UpfSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDIzMjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9pcy1hcnJheSIpLHM9YSgiLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yIiksbz1hKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Iikscj1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgic3BlY2llcyIpLHQ9QXJyYXk7RS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciBsO3JldHVybiBtKGUpJiYobD1lLmNvbnN0cnVjdG9yLChzKGwpJiYobD09PXR8fG0obC5wcm90b3R5cGUpKXx8byhsKSYmKGw9bFtyXSk9PT1udWxsKSYmKGw9dm9pZCAwKSksbD09PXZvaWQgMD90Omx9fSx7Ii4uL2ludGVybmFscy9pcy1hcnJheSI6Mjg0LCIuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IiOjI4NiwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCI6Mjg5LCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDIzMzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yIik7RS5leHBvcnRzPWZ1bmN0aW9uKHMsbyl7cmV0dXJuIG5ldyhtKHMpKShvPT09MD8wOm8pfX0seyIuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvciI6MjMyfV0sMjM0OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIikoIml0ZXJhdG9yIikscz0hMTt0cnl7dmFyIG89MCxyPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFvKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtzPSEwfX07clttXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKHIsZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2h7fUUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtpZighZSYmIXMpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIGw9ITE7dHJ5e3ZhciBuPXt9O25bbV09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOmw9ITB9fX19LHQobil9Y2F0Y2h7fXJldHVybiBsfX0seyIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDIzNTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxzPW0oe30udG9TdHJpbmcpLG89bSgiIi5zbGljZSk7RS5leHBvcnRzPWZ1bmN0aW9uKHIpe3JldHVybiBvKHMociksOCwtMSl9fSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDIzNjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLG89YSgiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Iikscj1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgidG9TdHJpbmdUYWciKSx0PU9iamVjdCxlPW8oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT09PSJBcmd1bWVudHMiO0UuZXhwb3J0cz1tP286ZnVuY3Rpb24obCl7dmFyIG4saSxmO3JldHVybiBsPT09dm9pZCAwPyJVbmRlZmluZWQiOmw9PT1udWxsPyJOdWxsIjp0eXBlb2YoaT1mdW5jdGlvbihjLHUpe3RyeXtyZXR1cm4gY1t1XX1jYXRjaHt9fShuPXQobCkscikpPT0ic3RyaW5nIj9pOmU/byhuKTooZj1vKG4pKT09PSJPYmplY3QiJiZzKG4uY2FsbGVlKT8iQXJndW1lbnRzIjpmfX0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQiOjM0NywiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwyMzc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLHM9YSgiLi4vaW50ZXJuYWxzL293bi1rZXlzIiksbz1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvciIpLHI9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKTtFLmV4cG9ydHM9ZnVuY3Rpb24odCxlLGwpe2Zvcih2YXIgbj1zKGUpLGk9ci5mLGY9by5mLGM9MDtjPG4ubGVuZ3RoO2MrKyl7dmFyIHU9bltjXTttKHQsdSl8fGwmJm0obCx1KXx8aSh0LHUsZihlLHUpKX19fSx7Ii4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5IjozMDgsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yIjozMDksIi4uL2ludGVybmFscy9vd24ta2V5cyI6MzIxfV0sMjM4OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIikoIm1hdGNoIik7RS5leHBvcnRzPWZ1bmN0aW9uKHMpe3ZhciBvPS8uLzt0cnl7Ii8uLyJbc10obyl9Y2F0Y2h7dHJ5e3JldHVybiBvW21dPSExLCIvLi8iW3NdKG8pfWNhdGNoe319cmV0dXJuITF9fSx7Ii4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3fV0sMjM5OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIik7RS5leHBvcnRzPSFtKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe31yZXR1cm4gcy5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHMpIT09cy5wcm90b3R5cGV9KX0seyIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MH1dLDI0MDpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz1mdW5jdGlvbihtLHMpe3JldHVybnt2YWx1ZTptLGRvbmU6c319fSx7fV0sMjQxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIikscz1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSIpLG89YSgiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIik7RS5leHBvcnRzPW0/ZnVuY3Rpb24ocix0LGUpe3JldHVybiBzLmYocix0LG8oMSxlKSl9OmZ1bmN0aW9uKHIsdCxlKXtyZXR1cm4gclt0XT1lLHJ9fSx7Ii4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciI6MjQyLCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiOjI0NywiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiOjMwOH1dLDI0MjpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz1mdW5jdGlvbihtLHMpe3JldHVybntlbnVtZXJhYmxlOiEoMSZtKSxjb25maWd1cmFibGU6ISgyJm0pLHdyaXRhYmxlOiEoNCZtKSx2YWx1ZTpzfX19LHt9XSwyNDM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Iikscz1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSIpLG89YSgiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIik7RS5leHBvcnRzPWZ1bmN0aW9uKHIsdCxlKXt2YXIgbD1tKHQpO2wgaW4gcj9zLmYocixsLG8oMCxlKSk6cltsXT1lfX0seyIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IiOjI0MiwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiOjMwOCwiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleSI6MzQ2fV0sMjQ0OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4iKSxzPWEoIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Iik7RS5leHBvcnRzPWZ1bmN0aW9uKG8scix0KXtyZXR1cm4gdC5nZXQmJm0odC5nZXQscix7Z2V0dGVyOiEwfSksdC5zZXQmJm0odC5zZXQscix7c2V0dGVyOiEwfSkscy5mKG8scix0KX19LHsiLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4iOjMwMCwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiOjMwOH1dLDI0NTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLHM9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKSxvPWEoIi4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluIikscj1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eSIpO0UuZXhwb3J0cz1mdW5jdGlvbih0LGUsbCxuKXtufHwobj17fSk7dmFyIGk9bi5lbnVtZXJhYmxlLGY9bi5uYW1lIT09dm9pZCAwP24ubmFtZTplO2lmKG0obCkmJm8obCxmLG4pLG4uZ2xvYmFsKWk/dFtlXT1sOnIoZSxsKTtlbHNle3RyeXtuLnVuc2FmZT90W2VdJiYoaT0hMCk6ZGVsZXRlIHRbZV19Y2F0Y2h7fWk/dFtlXT1sOnMuZih0LGUse3ZhbHVlOmwsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IW4ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFuLm5vbldyaXRhYmxlfSl9cmV0dXJuIHR9fSx7Ii4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5IjoyNDYsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbiI6MzAwLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSI6MzA4fV0sMjQ2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2dsb2JhbCIpLHM9T2JqZWN0LmRlZmluZVByb3BlcnR5O0UuZXhwb3J0cz1mdW5jdGlvbihvLHIpe3RyeXtzKG0sbyx7dmFsdWU6cixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaHttW29dPXJ9cmV0dXJuIHJ9fSx7Ii4uL2ludGVybmFscy9nbG9iYWwiOjI3NH1dLDI0NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mYWlscyIpO0UuZXhwb3J0cz0hbShmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV0hPT03fSl9LHsiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjB9XSwyNDg6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT10eXBlb2YgZG9jdW1lbnQ9PSJvYmplY3QiJiZkb2N1bWVudC5hbGwscz1tPT09dm9pZCAwJiZtIT09dm9pZCAwO0UuZXhwb3J0cz17YWxsOm0sSVNfSFRNTEREQTpzfX0se31dLDI0OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9nbG9iYWwiKSxzPWEoIi4uL2ludGVybmFscy9pcy1vYmplY3QiKSxvPW0uZG9jdW1lbnQscj1zKG8pJiZzKG8uY3JlYXRlRWxlbWVudCk7RS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByP28uY3JlYXRlRWxlbWVudCh0KTp7fX19LHsiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODl9XSwyNTA6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8iKSxzPWEoIi4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSIpO0UuZXhwb3J0cz0hbSYmIXMmJnR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ0eXBlb2YgZG9jdW1lbnQ9PSJvYmplY3QifSx7Ii4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVubyI6MjUxLCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUiOjI1NH1dLDI1MTpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz10eXBlb2YgRGVubz09Im9iamVjdCImJkRlbm8mJnR5cGVvZiBEZW5vLnZlcnNpb249PSJvYmplY3QifSx7fV0sMjUyOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Iik7RS5leHBvcnRzPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChtKSYmdHlwZW9mIFBlYmJsZTwidSJ9LHsiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50IjoyNTZ9XSwyNTM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQiKTtFLmV4cG9ydHM9Lyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QobSl9LHsiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50IjoyNTZ9XSwyNTQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIikscz1hKCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciKTtFLmV4cG9ydHM9cyhtLnByb2Nlc3MpPT09InByb2Nlc3MifSx7Ii4uL2ludGVybmFscy9jbGFzc29mLXJhdyI6MjM1LCIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzR9XSwyNTU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQiKTtFLmV4cG9ydHM9L3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdChtKX0seyIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQiOjI1Nn1dLDI1NjpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz10eXBlb2YgbmF2aWdhdG9yPCJ1IiYmU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpfHwiIn0se31dLDI1NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtLHMsbz1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIikscj1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQiKSx0PW8ucHJvY2VzcyxlPW8uRGVubyxsPXQmJnQudmVyc2lvbnN8fGUmJmUudmVyc2lvbixuPWwmJmwudjg7biYmKHM9KG09bi5zcGxpdCgiLiIpKVswXT4wJiZtWzBdPDQ/MTorKG1bMF0rbVsxXSkpLCFzJiZyJiYoIShtPXIubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxtWzFdPj03NCkmJihtPXIubWF0Y2goL0Nocm9tZVwvKFxkKykvKSkmJihzPSttWzFdKSxFLmV4cG9ydHM9c30seyIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQiOjI1NiwiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0fV0sMjU4OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LHt9XSwyNTk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIikscz1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvciIpLmYsbz1hKCIuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Iikscj1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIiksdD1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eSIpLGU9YSgiLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcyIpLGw9YSgiLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCIpO0UuZXhwb3J0cz1mdW5jdGlvbihuLGkpe3ZhciBmLGMsdSxkLGgsdz1uLnRhcmdldCxfPW4uZ2xvYmFsLEE9bi5zdGF0O2lmKGY9Xz9tOkE/bVt3XXx8dCh3LHt9KToobVt3XXx8e30pLnByb3RvdHlwZSlmb3IoYyBpbiBpKXtpZihkPWlbY10sdT1uLmRvbnRDYWxsR2V0U2V0PyhoPXMoZixjKSkmJmgudmFsdWU6ZltjXSwhbChfP2M6dysoQT8iLiI6IiMiKStjLG4uZm9yY2VkKSYmdSE9PXZvaWQgMCl7aWYodHlwZW9mIGQ9PXR5cGVvZiB1KWNvbnRpbnVlO2UoZCx1KX0obi5zaGFtfHx1JiZ1LnNoYW0pJiZvKGQsInNoYW0iLCEwKSxyKGYsYyxkLG4pfX19LHsiLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcyI6MjM3LCIuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5IjoyNDEsIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iOjI0NSwiLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkiOjI0NiwiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaXMtZm9yY2VkIjoyODcsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yIjozMDl9XSwyNjA6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9ZnVuY3Rpb24obSl7dHJ5e3JldHVybiEhbSgpfWNhdGNoe3JldHVybiEwfX19LHt9XSwyNjE6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUiKSxzPUZ1bmN0aW9uLnByb3RvdHlwZSxvPXMuYXBwbHkscj1zLmNhbGw7RS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmUmVmbGVjdC5hcHBseXx8KG0/ci5iaW5kKG8pOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkobyxhcmd1bWVudHMpfSl9LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlIjoyNjN9XSwyNjI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZSIpLHM9YSgiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUiKSxvPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSIpLHI9bShtLmJpbmQpO0UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBzKHQpLGU9PT12b2lkIDA/dDpvP3IodCxlKTpmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjIsIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSI6MjYzLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZSI6MjY3fV0sMjYzOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIik7RS5leHBvcnRzPSFtKGZ1bmN0aW9uKCl7dmFyIHM9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4gdHlwZW9mIHMhPSJmdW5jdGlvbiJ8fHMuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSl9LHsiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjB9XSwyNjQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUiKSxzPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO0UuZXhwb3J0cz1tP3MuYmluZChzKTpmdW5jdGlvbigpe3JldHVybiBzLmFwcGx5KHMsYXJndW1lbnRzKX19LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlIjoyNjN9XSwyNjU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiKSxzPWEoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Iiksbz1GdW5jdGlvbi5wcm90b3R5cGUscj1tJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9cyhvLCJuYW1lIiksZT10JiZmdW5jdGlvbigpe30ubmFtZT09PSJzb21ldGhpbmciLGw9dCYmKCFtfHxtJiZyKG8sIm5hbWUiKS5jb25maWd1cmFibGUpO0UuZXhwb3J0cz17RVhJU1RTOnQsUFJPUEVSOmUsQ09ORklHVVJBQkxFOmx9fSx7Ii4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSI6Mjc1fV0sMjY2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLHM9YSgiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUiKTtFLmV4cG9ydHM9ZnVuY3Rpb24obyxyLHQpe3RyeXtyZXR1cm4gbShzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobyxyKVt0XSkpfWNhdGNoe319fSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjIsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDI2NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9jbGFzc29mLXJhdyIpLHM9YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpO0UuZXhwb3J0cz1mdW5jdGlvbihvKXtpZihtKG8pPT09IkZ1bmN0aW9uIilyZXR1cm4gcyhvKX19LHsiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3IjoyMzUsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDI2ODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSIpLHM9RnVuY3Rpb24ucHJvdG90eXBlLG89cy5jYWxsLHI9bSYmcy5iaW5kLmJpbmQobyxvKTtFLmV4cG9ydHM9bT9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KHQsYXJndW1lbnRzKX19fSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSI6MjYzfV0sMjY5OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2dsb2JhbCIpLHM9YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksbz1mdW5jdGlvbihyKXtyZXR1cm4gcyhyKT9yOnZvaWQgMH07RS5leHBvcnRzPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vKG1bcl0pOm1bcl0mJm1bcl1bdF19fSx7Ii4uL2ludGVybmFscy9nbG9iYWwiOjI3NCwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODV9XSwyNzA6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvY2xhc3NvZiIpLHM9YSgiLi4vaW50ZXJuYWxzL2dldC1tZXRob2QiKSxvPWEoIi4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCIpLHI9YSgiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyIpLHQ9YSgiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIikoIml0ZXJhdG9yIik7RS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFvKGUpKXJldHVybiBzKGUsdCl8fHMoZSwiQEBpdGVyYXRvciIpfHxyW20oZSldfX0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZiI6MjM2LCIuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCI6MjczLCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQiOjI4OCwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyI6Mjk4LCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDI3MTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIikscz1hKCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSIpLG89YSgiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCIpLHI9YSgiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmciKSx0PWEoIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kIiksZT1UeXBlRXJyb3I7RS5leHBvcnRzPWZ1bmN0aW9uKGwsbil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aDwyP3QobCk6bjtpZihzKGkpKXJldHVybiBvKG0oaSxsKSk7dGhyb3cgbmV3IGUocihsKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0seyIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSI6MjIyLCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IjoyMjcsIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kIjoyNzAsIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nIjozNDl9XSwyNzI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIikscz1hKCIuLi9pbnRlcm5hbHMvaXMtYXJyYXkiKSxvPWEoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLHI9YSgiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3IiksdD1hKCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nIiksZT1tKFtdLnB1c2gpO0UuZXhwb3J0cz1mdW5jdGlvbihsKXtpZihvKGwpKXJldHVybiBsO2lmKHMobCkpe2Zvcih2YXIgbj1sLmxlbmd0aCxpPVtdLGY9MDtmPG47ZisrKXt2YXIgYz1sW2ZdO3R5cGVvZiBjPT0ic3RyaW5nIj9lKGksYyk6dHlwZW9mIGMhPSJudW1iZXIiJiZyKGMpIT09Ik51bWJlciImJnIoYykhPT0iU3RyaW5nInx8ZShpLHQoYykpfXZhciB1PWkubGVuZ3RoLGQ9ITA7cmV0dXJuIGZ1bmN0aW9uKGgsdyl7aWYoZClyZXR1cm4gZD0hMSx3O2lmKHModGhpcykpcmV0dXJuIHc7Zm9yKHZhciBfPTA7Xzx1O18rKylpZihpW19dPT09aClyZXR1cm4gd319fX0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvaXMtYXJyYXkiOjI4NCwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy90by1zdHJpbmciOjM0OH1dLDI3MzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9hLWNhbGxhYmxlIikscz1hKCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQiKTtFLmV4cG9ydHM9ZnVuY3Rpb24obyxyKXt2YXIgdD1vW3JdO3JldHVybiBzKHQpP3ZvaWQgMDptKHQpfX0seyIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSI6MjIyLCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQiOjI4OH1dLDI3NDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXt2YXIgcz1mdW5jdGlvbihvKXtyZXR1cm4gbyYmby5NYXRoPT09TWF0aCYmb307RS5leHBvcnRzPXModHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiJiZnbG9iYWxUaGlzKXx8cyh0eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93KXx8cyh0eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYpfHxzKHR5cGVvZiBtPT0ib2JqZWN0IiYmbSl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fHRoaXN8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBKdDwidSI/SnQ6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDI3NTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxzPWEoIi4uL2ludGVybmFscy90by1vYmplY3QiKSxvPW0oe30uaGFzT3duUHJvcGVydHkpO0UuZXhwb3J0cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihyLHQpe3JldHVybiBvKHMociksdCl9fSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OCwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCI6MzQ0fV0sMjc2OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPXt9fSx7fV0sMjc3OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWZ1bmN0aW9uKG0scyl7dHJ5e2FyZ3VtZW50cy5sZW5ndGg9PT0xP2NvbnNvbGUuZXJyb3IobSk6Y29uc29sZS5lcnJvcihtLHMpfWNhdGNoe319fSx7fV0sMjc4OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiIpO0UuZXhwb3J0cz1tKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpfSx7Ii4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OX1dLDI3OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLHM9YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksbz1hKCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQiKTtFLmV4cG9ydHM9IW0mJiFzKGZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmEhPT03fSl9LHsiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCI6MjQ5LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MH1dLDI4MDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxzPWEoIi4uL2ludGVybmFscy9mYWlscyIpLG89YSgiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Iikscj1PYmplY3QsdD1tKCIiLnNwbGl0KTtFLmV4cG9ydHM9cyhmdW5jdGlvbigpe3JldHVybiFyKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KT9mdW5jdGlvbihlKXtyZXR1cm4gbyhlKT09PSJTdHJpbmciP3QoZSwiIik6cihlKX06cn0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDI4MTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxzPWEoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLG89YSgiLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZSIpLHI9bShGdW5jdGlvbi50b1N0cmluZyk7cyhvLmluc3BlY3RTb3VyY2UpfHwoby5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpfSksRS5leHBvcnRzPW8uaW5zcGVjdFNvdXJjZX0seyIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlIjozMzN9XSwyODI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbSxzLG8scj1hKCIuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uIiksdD1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIiksZT1hKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IiksbD1hKCIuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Iiksbj1hKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLGk9YSgiLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZSIpLGY9YSgiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXkiKSxjPWEoIi4uL2ludGVybmFscy9oaWRkZW4ta2V5cyIpLHU9dC5UeXBlRXJyb3IsZD10LldlYWtNYXA7aWYocnx8aS5zdGF0ZSl7dmFyIGg9aS5zdGF0ZXx8KGkuc3RhdGU9bmV3IGQpO2guZ2V0PWguZ2V0LGguaGFzPWguaGFzLGguc2V0PWguc2V0LG09ZnVuY3Rpb24oXyxBKXtpZihoLmhhcyhfKSl0aHJvdyBuZXcgdSgiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiKTtyZXR1cm4gQS5mYWNhZGU9XyxoLnNldChfLEEpLEF9LHM9ZnVuY3Rpb24oXyl7cmV0dXJuIGguZ2V0KF8pfHx7fX0sbz1mdW5jdGlvbihfKXtyZXR1cm4gaC5oYXMoXyl9fWVsc2V7dmFyIHc9Zigic3RhdGUiKTtjW3ddPSEwLG09ZnVuY3Rpb24oXyxBKXtpZihuKF8sdykpdGhyb3cgbmV3IHUoIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIik7cmV0dXJuIEEuZmFjYWRlPV8sbChfLHcsQSksQX0scz1mdW5jdGlvbihfKXtyZXR1cm4gbihfLHcpP19bd106e319LG89ZnVuY3Rpb24oXyl7cmV0dXJuIG4oXyx3KX19RS5leHBvcnRzPXtzZXQ6bSxnZXQ6cyxoYXM6byxlbmZvcmNlOmZ1bmN0aW9uKF8pe3JldHVybiBvKF8pP3MoXyk6bShfLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKF8pe3JldHVybiBmdW5jdGlvbihBKXt2YXIgUDtpZighZShBKXx8KFA9cyhBKSkudHlwZSE9PV8pdGhyb3cgbmV3IHUoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitfKyIgcmVxdWlyZWQiKTtyZXR1cm4gUH19fX0seyIuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5IjoyNDEsIi4uL2ludGVybmFscy9nbG9iYWwiOjI3NCwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIjoyNzYsIi4uL2ludGVybmFscy9pcy1vYmplY3QiOjI4OSwiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXkiOjMzMiwiLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZSI6MzMzLCIuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uIjozNTR9XSwyODM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSxzPWEoIi4uL2ludGVybmFscy9pdGVyYXRvcnMiKSxvPW0oIml0ZXJhdG9yIikscj1BcnJheS5wcm90b3R5cGU7RS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT09dm9pZCAwJiYocy5BcnJheT09PXR8fHJbb109PT10KX19LHsiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyI6Mjk4LCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDI4NDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9jbGFzc29mLXJhdyIpO0UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihzKXtyZXR1cm4gbShzKT09PSJBcnJheSJ9fSx7Ii4uL2ludGVybmFscy9jbGFzc29mLXJhdyI6MjM1fV0sMjg1OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbCIpLHM9bS5hbGw7RS5leHBvcnRzPW0uSVNfSFRNTEREQT9mdW5jdGlvbihvKXtyZXR1cm4gdHlwZW9mIG89PSJmdW5jdGlvbiJ8fG89PT1zfTpmdW5jdGlvbihvKXtyZXR1cm4gdHlwZW9mIG89PSJmdW5jdGlvbiJ9fSx7Ii4uL2ludGVybmFscy9kb2N1bWVudC1hbGwiOjI0OH1dLDI4NjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxzPWEoIi4uL2ludGVybmFscy9mYWlscyIpLG89YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIikscj1hKCIuLi9pbnRlcm5hbHMvY2xhc3NvZiIpLHQ9YSgiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiIpLGU9YSgiLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlIiksbD1mdW5jdGlvbigpe30sbj1bXSxpPXQoIlJlZmxlY3QiLCJjb25zdHJ1Y3QiKSxmPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGM9bShmLmV4ZWMpLHU9IWYudGVzdChsKSxkPWZ1bmN0aW9uKHcpe2lmKCFvKHcpKXJldHVybiExO3RyeXtyZXR1cm4gaShsLG4sdyksITB9Y2F0Y2h7cmV0dXJuITF9fSxoPWZ1bmN0aW9uKHcpe2lmKCFvKHcpKXJldHVybiExO3N3aXRjaChyKHcpKXtjYXNlIkFzeW5jRnVuY3Rpb24iOmNhc2UiR2VuZXJhdG9yRnVuY3Rpb24iOmNhc2UiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiI6cmV0dXJuITF9dHJ5e3JldHVybiB1fHwhIWMoZixlKHcpKX1jYXRjaHtyZXR1cm4hMH19O2guc2hhbT0hMCxFLmV4cG9ydHM9IWl8fHMoZnVuY3Rpb24oKXt2YXIgdztyZXR1cm4gZChkLmNhbGwpfHwhZChPYmplY3QpfHwhZChmdW5jdGlvbigpe3c9ITB9KXx8d30pP2g6ZH0seyIuLi9pbnRlcm5hbHMvY2xhc3NvZiI6MjM2LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIjoyNjksIi4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZSI6MjgxLCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NX1dLDI4NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mYWlscyIpLHM9YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksbz0vI3xcLnByb3RvdHlwZVwuLyxyPWZ1bmN0aW9uKGksZil7dmFyIGM9ZVt0KGkpXTtyZXR1cm4gYz09PW58fGMhPT1sJiYocyhmKT9tKGYpOiEhZil9LHQ9ci5ub3JtYWxpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIFN0cmluZyhpKS5yZXBsYWNlKG8sIi4iKS50b0xvd2VyQ2FzZSgpfSxlPXIuZGF0YT17fSxsPXIuTkFUSVZFPSJOIixuPXIuUE9MWUZJTEw9IlAiO0UuZXhwb3J0cz1yfSx7Ii4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NX1dLDI4ODpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz1mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbH19LHt9XSwyODk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxzPWEoIi4uL2ludGVybmFscy9kb2N1bWVudC1hbGwiKSxvPXMuYWxsO0UuZXhwb3J0cz1zLklTX0hUTUxEREE/ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0Ij9yIT09bnVsbDptKHIpfHxyPT09b306ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0Ij9yIT09bnVsbDptKHIpfX0seyIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsIjoyNDgsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1fV0sMjkwOltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPSExfSx7fV0sMjkxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCIpLHM9YSgiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Iiksbz1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgibWF0Y2giKTtFLmV4cG9ydHM9ZnVuY3Rpb24ocil7dmFyIHQ7cmV0dXJuIG0ocikmJigodD1yW29dKSE9PXZvaWQgMD8hIXQ6cyhyKT09PSJSZWdFeHAiKX19LHsiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3IjoyMzUsIi4uL2ludGVybmFscy9pcy1vYmplY3QiOjI4OSwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwyOTI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIikscz1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxvPWEoIi4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mIikscj1hKCIuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQiKSx0PU9iamVjdDtFLmV4cG9ydHM9cj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifTpmdW5jdGlvbihlKXt2YXIgbD1tKCJTeW1ib2wiKTtyZXR1cm4gcyhsKSYmbyhsLnByb3RvdHlwZSx0KGUpKX19LHsiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiI6MjY5LCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YiOjMxNCwiLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkIjozNTF9XSwyOTM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Iikscz1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLG89YSgiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCIpLHI9YSgiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmciKSx0PWEoIi4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QiKSxlPWEoIi4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSIpLGw9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YiKSxuPWEoIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3IiKSxpPWEoIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kIiksZj1hKCIuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UiKSxjPVR5cGVFcnJvcix1PWZ1bmN0aW9uKGgsdyl7dGhpcy5zdG9wcGVkPWgsdGhpcy5yZXN1bHQ9d30sZD11LnByb3RvdHlwZTtFLmV4cG9ydHM9ZnVuY3Rpb24oaCx3LF8pe3ZhciBBLFAsTCxOLEQsRixVLEI9XyYmXy50aGF0LFM9ISghX3x8IV8uQVNfRU5UUklFUyksQz0hKCFffHwhXy5JU19SRUNPUkQpLHY9ISghX3x8IV8uSVNfSVRFUkFUT1IpLHA9ISghX3x8IV8uSU5URVJSVVBURUQpLGI9bSh3LEIpLGc9ZnVuY3Rpb24oTSl7cmV0dXJuIEEmJmYoQSwibm9ybWFsIixNKSxuZXcgdSghMCxNKX0seT1mdW5jdGlvbihNKXtyZXR1cm4gUz8obyhNKSxwP2IoTVswXSxNWzFdLGcpOmIoTVswXSxNWzFdKSk6cD9iKE0sZyk6YihNKX07aWYoQylBPWguaXRlcmF0b3I7ZWxzZSBpZih2KUE9aDtlbHNle2lmKCEoUD1pKGgpKSl0aHJvdyBuZXcgYyhyKGgpKyIgaXMgbm90IGl0ZXJhYmxlIik7aWYodChQKSl7Zm9yKEw9MCxOPWUoaCk7Tj5MO0wrKylpZigoRD15KGhbTF0pKSYmbChkLEQpKXJldHVybiBEO3JldHVybiBuZXcgdSghMSl9QT1uKGgsUCl9Zm9yKEY9Qz9oLm5leHQ6QS5uZXh0OyEoVT1zKEYsQSkpLmRvbmU7KXt0cnl7RD15KFUudmFsdWUpfWNhdGNoKE0pe2YoQSwidGhyb3ciLE0pfWlmKHR5cGVvZiBEPT0ib2JqZWN0IiYmRCYmbChkLEQpKXJldHVybiBEfXJldHVybiBuZXcgdSghMSl9fSx7Ii4uL2ludGVybmFscy9hbi1vYmplY3QiOjIyNywiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCI6MjYyLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCI6MjY0LCIuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yIjoyNzEsIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kIjoyNzAsIi4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QiOjI4MywiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlIjoyOTQsIi4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSI6Mjk5LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZiI6MzE0LCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZyI6MzQ5fV0sMjk0OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxzPWEoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSxvPWEoIi4uL2ludGVybmFscy9nZXQtbWV0aG9kIik7RS5leHBvcnRzPWZ1bmN0aW9uKHIsdCxlKXt2YXIgbCxuO3Mocik7dHJ5e2lmKCEobD1vKHIsInJldHVybiIpKSl7aWYodD09PSJ0aHJvdyIpdGhyb3cgZTtyZXR1cm4gZX1sPW0obCxyKX1jYXRjaChpKXtuPSEwLGw9aX1pZih0PT09InRocm93Iil0aHJvdyBlO2lmKG4pdGhyb3cgbDtyZXR1cm4gcyhsKSxlfX0seyIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IjoyMjcsIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9nZXQtbWV0aG9kIjoyNzN9XSwyOTU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUiKS5JdGVyYXRvclByb3RvdHlwZSxzPWEoIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIiksbz1hKCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IiKSxyPWEoIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyIpLHQ9YSgiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyIpLGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307RS5leHBvcnRzPWZ1bmN0aW9uKGwsbixpLGYpe3ZhciBjPW4rIiBJdGVyYXRvciI7cmV0dXJuIGwucHJvdG90eXBlPXMobSx7bmV4dDpvKCshZixpKX0pLHIobCxjLCExLCEwKSx0W2NdPWUsbH19LHsiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIjoyNDIsIi4uL2ludGVybmFscy9pdGVyYXRvcnMiOjI5OCwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlIjoyOTcsIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIjozMDYsIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyI6MzMxfV0sMjk2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLHM9YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxvPWEoIi4uL2ludGVybmFscy9pcy1wdXJlIikscj1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZSIpLHQ9YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksZT1hKCIuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yIiksbD1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YiKSxuPWEoIi4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZiIpLGk9YSgiLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnIiksZj1hKCIuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5IiksYz1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIiksdT1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSxkPWEoIi4uL2ludGVybmFscy9pdGVyYXRvcnMiKSxoPWEoIi4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZSIpLHc9ci5QUk9QRVIsXz1yLkNPTkZJR1VSQUJMRSxBPWguSXRlcmF0b3JQcm90b3R5cGUsUD1oLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsTD11KCJpdGVyYXRvciIpLE49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307RS5leHBvcnRzPWZ1bmN0aW9uKEQsRixVLEIsUyxDLHYpe2UoVSxGLEIpO3ZhciBwLGIsZyx5PWZ1bmN0aW9uKGope2lmKGo9PT1TJiYkKXJldHVybiAkO2lmKCFQJiZqJiZqIGluIFIpcmV0dXJuIFJbal07c3dpdGNoKGope2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOmNhc2UiZW50cmllcyI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVKHRoaXMsail9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgVSh0aGlzKX19LE09RisiIEl0ZXJhdG9yIixPPSExLFI9RC5wcm90b3R5cGUsej1SW0xdfHxSWyJAQGl0ZXJhdG9yIl18fFMmJlJbU10sJD0hUCYmenx8eShTKSxYPUY9PT0iQXJyYXkiJiZSLmVudHJpZXN8fHo7aWYoWCYmKHA9bChYLmNhbGwobmV3IEQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZwLm5leHQmJihvfHxsKHApPT09QXx8KG4/bihwLEEpOnQocFtMXSl8fGMocCxMLE4pKSxpKHAsTSwhMCwhMCksbyYmKGRbTV09TikpLHcmJlM9PT0idmFsdWVzIiYmeiYmei5uYW1lIT09InZhbHVlcyImJighbyYmXz9mKFIsIm5hbWUiLCJ2YWx1ZXMiKTooTz0hMCwkPWZ1bmN0aW9uKCl7cmV0dXJuIHMoeix0aGlzKX0pKSxTKWlmKGI9e3ZhbHVlczp5KCJ2YWx1ZXMiKSxrZXlzOkM/JDp5KCJrZXlzIiksZW50cmllczp5KCJlbnRyaWVzIil9LHYpZm9yKGcgaW4gYikoUHx8T3x8IShnIGluIFIpKSYmYyhSLGcsYltnXSk7ZWxzZSBtKHt0YXJnZXQ6Rixwcm90bzohMCxmb3JjZWQ6UHx8T30sYik7cmV0dXJuIG8mJiF2fHxSW0xdPT09JHx8YyhSLEwsJCx7bmFtZTpTfSksZFtGXT0kLGJ9fSx7Ii4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkiOjI0MSwiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiI6MjQ1LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lIjoyNjUsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvaXMtcHVyZSI6MjkwLCIuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yIjoyOTUsIi4uL2ludGVybmFscy9pdGVyYXRvcnMiOjI5OCwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlIjoyOTcsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZiI6MzEzLCIuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YiOjMxOCwiLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnIjozMzEsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3fV0sMjk3OltmdW5jdGlvbihhLEUsayl7dmFyIG0scyxvLHI9YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksdD1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxlPWEoIi4uL2ludGVybmFscy9pcy1vYmplY3QiKSxsPWEoIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIiksbj1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YiKSxpPWEoIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iKSxmPWEoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpLGM9YSgiLi4vaW50ZXJuYWxzL2lzLXB1cmUiKSx1PWYoIml0ZXJhdG9yIiksZD0hMTtbXS5rZXlzJiYoIm5leHQiaW4obz1bXS5rZXlzKCkpPyhzPW4obihvKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKG09cyk6ZD0hMCksIWUobSl8fHIoZnVuY3Rpb24oKXt2YXIgaD17fTtyZXR1cm4gbVt1XS5jYWxsKGgpIT09aH0pP209e306YyYmKG09bChtKSksdChtW3VdKXx8aShtLHUsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6bSxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmR9fSx7Ii4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iOjI0NSwiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODksIi4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlIjozMDYsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZiI6MzEzLCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDI5ODpbZnVuY3Rpb24oYSxFLGspe2FyZ3VtZW50c1s0XVsyNzZdWzBdLmFwcGx5KGssYXJndW1lbnRzKX0se2R1cDoyNzZ9XSwyOTk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoIik7RS5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBtKHMubGVuZ3RoKX19LHsiLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCI6MzQzfV0sMzAwOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLHM9YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksbz1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxyPWEoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IiksdD1hKCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiKSxlPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lIikuQ09ORklHVVJBQkxFLGw9YSgiLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlIiksbj1hKCIuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUiKSxpPW4uZW5mb3JjZSxmPW4uZ2V0LGM9U3RyaW5nLHU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGQ9bSgiIi5zbGljZSksaD1tKCIiLnJlcGxhY2UpLHc9bShbXS5qb2luKSxfPXQmJiFzKGZ1bmN0aW9uKCl7cmV0dXJuIHUoZnVuY3Rpb24oKXt9LCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RoIT09OH0pLEE9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLFA9RS5leHBvcnRzPWZ1bmN0aW9uKEwsTixEKXtkKGMoTiksMCw3KT09PSJTeW1ib2woIiYmKE49IlsiK2goYyhOKSwvXlN5bWJvbFwoKFteKV0qKVwpLywiJDEiKSsiXSIpLEQmJkQuZ2V0dGVyJiYoTj0iZ2V0ICIrTiksRCYmRC5zZXR0ZXImJihOPSJzZXQgIitOKSwoIXIoTCwibmFtZSIpfHxlJiZMLm5hbWUhPT1OKSYmKHQ/dShMLCJuYW1lIix7dmFsdWU6Tixjb25maWd1cmFibGU6ITB9KTpMLm5hbWU9TiksXyYmRCYmcihELCJhcml0eSIpJiZMLmxlbmd0aCE9PUQuYXJpdHkmJnUoTCwibGVuZ3RoIix7dmFsdWU6RC5hcml0eX0pO3RyeXtEJiZyKEQsImNvbnN0cnVjdG9yIikmJkQuY29uc3RydWN0b3I/dCYmdShMLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOkwucHJvdG90eXBlJiYoTC5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaHt9dmFyIEY9aShMKTtyZXR1cm4gcihGLCJzb3VyY2UiKXx8KEYuc291cmNlPXcoQSx0eXBlb2YgTj09InN0cmluZyI/TjoiIikpLEx9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1QKGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcykmJmYodGhpcykuc291cmNlfHxsKHRoaXMpfSwidG9TdHJpbmciKX0seyIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiOjI0NywiLi4vaW50ZXJuYWxzL2ZhaWxzIjoyNjAsIi4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lIjoyNjUsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OCwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlIjoyODEsIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSI6MjgyLCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NX1dLDMwMTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPU1hdGguY2VpbCxzPU1hdGguZmxvb3I7RS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKG8pe3ZhciByPStvO3JldHVybihyPjA/czptKShyKX19LHt9XSwzMDI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbSxzLG8scix0LGU9YSgiLi4vaW50ZXJuYWxzL2dsb2JhbCIpLGw9YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCIpLG49YSgiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IiKS5mLGk9YSgiLi4vaW50ZXJuYWxzL3Rhc2siKS5zZXQsZj1hKCIuLi9pbnRlcm5hbHMvcXVldWUiKSxjPWEoIi4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zIiksdT1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUiKSxkPWEoIi4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0IiksaD1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUiKSx3PWUuTXV0YXRpb25PYnNlcnZlcnx8ZS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLF89ZS5kb2N1bWVudCxBPWUucHJvY2VzcyxQPWUuUHJvbWlzZSxMPW4oZSwicXVldWVNaWNyb3Rhc2siKSxOPUwmJkwudmFsdWU7aWYoIU4pe3ZhciBEPW5ldyBmLEY9ZnVuY3Rpb24oKXt2YXIgVSxCO2ZvcihoJiYoVT1BLmRvbWFpbikmJlUuZXhpdCgpO0I9RC5nZXQoKTspdHJ5e0IoKX1jYXRjaChTKXt0aHJvdyBELmhlYWQmJm0oKSxTfVUmJlUuZW50ZXIoKX07Y3x8aHx8ZHx8IXd8fCFfPyF1JiZQJiZQLnJlc29sdmU/KChyPVAucmVzb2x2ZSh2b2lkIDApKS5jb25zdHJ1Y3Rvcj1QLHQ9bChyLnRoZW4sciksbT1mdW5jdGlvbigpe3QoRil9KTpoP209ZnVuY3Rpb24oKXtBLm5leHRUaWNrKEYpfTooaT1sKGksZSksbT1mdW5jdGlvbigpe2koRil9KToocz0hMCxvPV8uY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyB3KEYpLm9ic2VydmUobyx7Y2hhcmFjdGVyRGF0YTohMH0pLG09ZnVuY3Rpb24oKXtvLmRhdGE9cz0hc30pLE49ZnVuY3Rpb24oVSl7RC5oZWFkfHxtKCksRC5hZGQoVSl9fUUuZXhwb3J0cz1OfSx7Ii4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zIjoyNTMsIi4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZSI6MjUyLCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUiOjI1NCwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQiOjI1NSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCI6MjYyLCIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzQsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yIjozMDksIi4uL2ludGVybmFscy9xdWV1ZSI6MzI4LCIuLi9pbnRlcm5hbHMvdGFzayI6MzM5fV0sMzAzOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUiKSxzPVR5cGVFcnJvcixvPWZ1bmN0aW9uKHIpe3ZhciB0LGU7dGhpcy5wcm9taXNlPW5ldyByKGZ1bmN0aW9uKGwsbil7aWYodCE9PXZvaWQgMHx8ZSE9PXZvaWQgMCl0aHJvdyBuZXcgcygiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PWwsZT1ufSksdGhpcy5yZXNvbHZlPW0odCksdGhpcy5yZWplY3Q9bShlKX07RS5leHBvcnRzLmY9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBvKHIpfX0seyIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSI6MjIyfV0sMzA0OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCIpLHM9VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbihvKXtpZihtKG8pKXRocm93IG5ldyBzKCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnMiKTtyZXR1cm4gb319LHsiLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCI6MjkxfV0sMzA1OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIikscz1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksbz1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLHI9YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksdD1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiKSxlPWEoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzIiksbD1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUiKSxuPWEoIi4uL2ludGVybmFscy90by1vYmplY3QiKSxpPWEoIi4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCIpLGY9T2JqZWN0LmFzc2lnbixjPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx1PXMoW10uY29uY2F0KTtFLmV4cG9ydHM9IWZ8fHIoZnVuY3Rpb24oKXtpZihtJiZmKHtiOjF9LGYoYyh7fSwiYSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7Yyh0aGlzLCJiIix7dmFsdWU6MyxlbnVtZXJhYmxlOiExfSl9fSkse2I6Mn0pKS5iIT09MSlyZXR1cm4hMDt2YXIgZD17fSxoPXt9LHc9U3ltYm9sKCJhc3NpZ24gZGV0ZWN0aW9uIik7cmV0dXJuIGRbd109NywiYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKF8pe2hbX109X30pLGYoe30sZClbd10hPT03fHx0KGYoe30saCkpLmpvaW4oIiIpIT09ImFiY2RlZmdoaWprbG1ub3BxcnN0In0pP2Z1bmN0aW9uKGQsaCl7Zm9yKHZhciB3PW4oZCksXz1hcmd1bWVudHMubGVuZ3RoLEE9MSxQPWUuZixMPWwuZjtfPkE7KWZvcih2YXIgTixEPWkoYXJndW1lbnRzW0ErK10pLEY9UD91KHQoRCksUChEKSk6dChEKSxVPUYubGVuZ3RoLEI9MDtVPkI7KU49RltCKytdLG0mJiFvKEwsRCxOKXx8KHdbTl09RFtOXSk7cmV0dXJuIHd9OmZ9LHsiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCI6MjY0LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCI6MjgwLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scyI6MzEyLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiOjMxNiwiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlIjozMTcsIi4uL2ludGVybmFscy90by1vYmplY3QiOjM0NH1dLDMwNjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtLHM9YSgiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCIpLG89YSgiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcyIpLHI9YSgiLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMiKSx0PWEoIi4uL2ludGVybmFscy9oaWRkZW4ta2V5cyIpLGU9YSgiLi4vaW50ZXJuYWxzL2h0bWwiKSxsPWEoIi4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCIpLG49YSgiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXkiKSxpPW4oIklFX1BST1RPIiksZj1mdW5jdGlvbigpe30sYz1mdW5jdGlvbihoKXtyZXR1cm4iPHNjcmlwdD4iK2grIjxcL3NjcmlwdD4ifSx1PWZ1bmN0aW9uKGgpe2gud3JpdGUoYygiIikpLGguY2xvc2UoKTt2YXIgdz1oLnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIGg9bnVsbCx3fSxkPWZ1bmN0aW9uKCl7dHJ5e209bmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2h7fXZhciBoLHc7ZD10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmRvbWFpbiYmbT91KG0pOigodz1sKCJpZnJhbWUiKSkuc3R5bGUuZGlzcGxheT0ibm9uZSIsZS5hcHBlbmRDaGlsZCh3KSx3LnNyYz0iamF2YXNjcmlwdDoiLChoPXcuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGgud3JpdGUoYygiZG9jdW1lbnQuRj1PYmplY3QiKSksaC5jbG9zZSgpLGguRik6dShtKTtmb3IodmFyIF89ci5sZW5ndGg7Xy0tOylkZWxldGUgZC5wcm90b3R5cGVbcltfXV07cmV0dXJuIGQoKX07dFtpXT0hMCxFLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oaCx3KXt2YXIgXztyZXR1cm4gaCE9PW51bGw/KGYucHJvdG90eXBlPXMoaCksXz1uZXcgZixmLnByb3RvdHlwZT1udWxsLF9baV09aCk6Xz1kKCksdz09PXZvaWQgMD9fOm8uZihfLHcpfX0seyIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IjoyMjcsIi4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCI6MjQ5LCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cyI6MjU4LCIuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMiOjI3NiwiLi4vaW50ZXJuYWxzL2h0bWwiOjI3OCwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcyI6MzA3LCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSI6MzMyfV0sMzA3OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIikscz1hKCIuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWciKSxvPWEoIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Iikscj1hKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IiksdD1hKCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QiKSxlPWEoIi4uL2ludGVybmFscy9vYmplY3Qta2V5cyIpO2suZj1tJiYhcz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihsLG4pe3IobCk7Zm9yKHZhciBpLGY9dChuKSxjPWUobiksdT1jLmxlbmd0aCxkPTA7dT5kOylvLmYobCxpPWNbZCsrXSxmW2ldKTtyZXR1cm4gbH19LHsiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCI6MjI3LCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiOjI0NywiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiOjMwOCwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIjozMTYsIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCI6MzQxLCIuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWciOjM1Mn1dLDMwODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLHM9YSgiLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lIiksbz1hKCIuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWciKSxyPWEoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSx0PWEoIi4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkiKSxlPVR5cGVFcnJvcixsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ay5mPW0/bz9mdW5jdGlvbihpLGYsYyl7aWYocihpKSxmPXQoZikscihjKSx0eXBlb2YgaT09ImZ1bmN0aW9uIiYmZj09PSJwcm90b3R5cGUiJiYidmFsdWUiaW4gYyYmIndyaXRhYmxlImluIGMmJiFjLndyaXRhYmxlKXt2YXIgdT1uKGksZik7dSYmdS53cml0YWJsZSYmKGlbZl09Yy52YWx1ZSxjPXtjb25maWd1cmFibGU6ImNvbmZpZ3VyYWJsZSJpbiBjP2MuY29uZmlndXJhYmxlOnUuY29uZmlndXJhYmxlLGVudW1lcmFibGU6ImVudW1lcmFibGUiaW4gYz9jLmVudW1lcmFibGU6dS5lbnVtZXJhYmxlLHdyaXRhYmxlOiExfSl9cmV0dXJuIGwoaSxmLGMpfTpsOmZ1bmN0aW9uKGksZixjKXtpZihyKGkpLGY9dChmKSxyKGMpLHMpdHJ5e3JldHVybiBsKGksZixjKX1jYXRjaHt9aWYoImdldCJpbiBjfHwic2V0ImluIGMpdGhyb3cgbmV3IGUoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIGMmJihpW2ZdPWMudmFsdWUpLGl9fSx7Ii4uL2ludGVybmFscy9hbi1vYmplY3QiOjIyNywiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZSI6Mjc5LCIuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5IjozNDYsIi4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZyI6MzUyfV0sMzA5OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIikscz1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLG89YSgiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlIikscj1hKCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IiKSx0PWEoIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCIpLGU9YSgiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleSIpLGw9YSgiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSxuPWEoIi4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZSIpLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtrLmY9bT9pOmZ1bmN0aW9uKGYsYyl7aWYoZj10KGYpLGM9ZShjKSxuKXRyeXtyZXR1cm4gaShmLGMpfWNhdGNoe31pZihsKGYsYykpcmV0dXJuIHIoIXMoby5mLGYsYyksZltjXSl9fSx7Ii4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciI6MjQyLCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiOjI0NywiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lIjoyNzksIi4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZSI6MzE3LCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QiOjM0MSwiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleSI6MzQ2fV0sMzEwOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Iikscz1hKCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QiKSxvPWEoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcyIpLmYscj1hKCIuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlIiksdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO0UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiB0JiZtKGUpPT09IldpbmRvdyI/ZnVuY3Rpb24obCl7dHJ5e3JldHVybiBvKGwpfWNhdGNoe3JldHVybiByKHQpfX0oZSk6byhzKGUpKX19LHsiLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZSI6MjMwLCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXciOjIzNSwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzIjozMTEsIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCI6MzQxfV0sMzExOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsIikscz1hKCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cyIpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7ay5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihvKXtyZXR1cm4gbShvLHMpfX0seyIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cyI6MjU4LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwiOjMxNX1dLDMxMjpbZnVuY3Rpb24oYSxFLGspe2suZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSx7fV0sMzEzOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSxzPWEoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLG89YSgiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCIpLHI9YSgiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXkiKSx0PWEoIi4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIiKSxlPXIoIklFX1BST1RPIiksbD1PYmplY3Qsbj1sLnByb3RvdHlwZTtFLmV4cG9ydHM9dD9sLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGkpe3ZhciBmPW8oaSk7aWYobShmLGUpKXJldHVybiBmW2VdO3ZhciBjPWYuY29uc3RydWN0b3I7cmV0dXJuIHMoYykmJmYgaW5zdGFuY2VvZiBjP2MucHJvdG90eXBlOmYgaW5zdGFuY2VvZiBsP246bnVsbH19LHsiLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlciI6MjM5LCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSI6Mjc1LCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXkiOjMzMiwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCI6MzQ0fV0sMzE0OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpO0UuZXhwb3J0cz1tKHt9LmlzUHJvdG90eXBlT2YpfSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OH1dLDMxNTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxzPWEoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Iiksbz1hKCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QiKSxyPWEoIi4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcyIpLmluZGV4T2YsdD1hKCIuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMiKSxlPW0oW10ucHVzaCk7RS5leHBvcnRzPWZ1bmN0aW9uKGwsbil7dmFyIGksZj1vKGwpLGM9MCx1PVtdO2ZvcihpIGluIGYpIXModCxpKSYmcyhmLGkpJiZlKHUsaSk7Zm9yKDtuLmxlbmd0aD5jOylzKGYsaT1uW2MrK10pJiYofnIodSxpKXx8ZSh1LGkpKTtyZXR1cm4gdX19LHsiLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzIjoyMjgsIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OCwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIjoyNzYsIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCI6MzQxfV0sMzE2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsIikscz1hKCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cyIpO0UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24obyl7cmV0dXJuIG0obyxzKX19LHsiLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMiOjI1OCwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsIjozMTV9XSwzMTc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1zJiYhbS5jYWxsKHsxOjJ9LDEpO2suZj1vP2Z1bmN0aW9uKHIpe3ZhciB0PXModGhpcyxyKTtyZXR1cm4hIXQmJnQuZW51bWVyYWJsZX06bX0se31dLDMxODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IiKSxzPWEoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSxvPWEoIi4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZSIpO0UuZXhwb3J0cz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oKXt2YXIgcix0PSExLGU9e307dHJ5eyhyPW0oT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiwic2V0IikpKGUsW10pLHQ9ZSBpbnN0YW5jZW9mIEFycmF5fWNhdGNoe31yZXR1cm4gZnVuY3Rpb24obCxuKXtyZXR1cm4gcyhsKSxvKG4pLHQ/cihsLG4pOmwuX19wcm90b19fPW4sbH19KCk6dm9pZCAwKX0seyIuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUiOjIyNCwiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCI6MjI3LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWFjY2Vzc29yIjoyNjZ9XSwzMTk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMiKSxzPWEoIi4uL2ludGVybmFscy9mYWlscyIpLG89YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLHI9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mIiksdD1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiKSxlPWEoIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCIpLGw9byhhKCIuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUiKS5mKSxuPW8oW10ucHVzaCksaT1tJiZzKGZ1bmN0aW9uKCl7dmFyIGM9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gY1syXT0yLCFsKGMsMil9KSxmPWZ1bmN0aW9uKGMpe3JldHVybiBmdW5jdGlvbih1KXtmb3IodmFyIGQsaD1lKHUpLHc9dChoKSxfPWkmJnIoaCk9PT1udWxsLEE9dy5sZW5ndGgsUD0wLEw9W107QT5QOylkPXdbUCsrXSxtJiYhKF8/ZCBpbiBoOmwoaCxkKSl8fG4oTCxjP1tkLGhbZF1dOmhbZF0pO3JldHVybiBMfX07RS5leHBvcnRzPXtlbnRyaWVzOmYoITApLHZhbHVlczpmKCExKX19LHsiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZiI6MzEzLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiOjMxNiwiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlIjozMTcsIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCI6MzQxfV0sMzIwOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiKSxzPWEoIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSIpLG89YSgiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCIpLHI9VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBsLG47aWYoZT09PSJzdHJpbmciJiZzKGw9dC50b1N0cmluZykmJiFvKG49bShsLHQpKXx8cyhsPXQudmFsdWVPZikmJiFvKG49bShsLHQpKXx8ZSE9PSJzdHJpbmciJiZzKGw9dC50b1N0cmluZykmJiFvKG49bShsLHQpKSlyZXR1cm4gbjt0aHJvdyBuZXcgcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSx7Ii4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODl9XSwzMjE6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIikscz1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksbz1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMiKSxyPWEoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzIiksdD1hKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IiksZT1zKFtdLmNvbmNhdCk7RS5leHBvcnRzPW0oIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKGwpe3ZhciBuPW8uZih0KGwpKSxpPXIuZjtyZXR1cm4gaT9lKG4saShsKSk6bn19LHsiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCI6MjI3LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OSwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzIjozMTEsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzIjozMTJ9XSwzMjI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIik7RS5leHBvcnRzPW19LHsiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0fV0sMzIzOltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWZ1bmN0aW9uKG0pe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6bSgpfX1jYXRjaChzKXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6c319fX0se31dLDMyNDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9nbG9iYWwiKSxzPWEoIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciIpLG89YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIikscj1hKCIuLi9pbnRlcm5hbHMvaXMtZm9yY2VkIiksdD1hKCIuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UiKSxlPWEoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpLGw9YSgiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyIiksbj1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8iKSxpPWEoIi4uL2ludGVybmFscy9pcy1wdXJlIiksZj1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24iKSxjPXMmJnMucHJvdG90eXBlLHU9ZSgic3BlY2llcyIpLGQ9ITEsaD1vKG0uUHJvbWlzZVJlamVjdGlvbkV2ZW50KSx3PXIoIlByb21pc2UiLGZ1bmN0aW9uKCl7dmFyIF89dChzKSxBPV8hPT1TdHJpbmcocyk7aWYoIUEmJmY9PT02Nnx8aSYmKCFjLmNhdGNofHwhYy5maW5hbGx5KSlyZXR1cm4hMDtpZighZnx8Zjw1MXx8IS9uYXRpdmUgY29kZS8udGVzdChfKSl7dmFyIFA9bmV3IHMoZnVuY3Rpb24oTil7TigxKX0pLEw9ZnVuY3Rpb24oTil7TihmdW5jdGlvbigpe30sZnVuY3Rpb24oKXt9KX07aWYoKFAuY29uc3RydWN0b3I9e30pW3VdPUwsIShkPVAudGhlbihmdW5jdGlvbigpe30paW5zdGFuY2VvZiBMKSlyZXR1cm4hMH1yZXR1cm4hQSYmKGx8fG4pJiYhaH0pO0UuZXhwb3J0cz17Q09OU1RSVUNUT1I6dyxSRUpFQ1RJT05fRVZFTlQ6aCxTVUJDTEFTU0lORzpkfX0seyIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXIiOjI1MCwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vIjoyNTEsIi4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbiI6MjU3LCIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzQsIi4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZSI6MjgxLCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCI6Mjg3LCIuLi9pbnRlcm5hbHMvaXMtcHVyZSI6MjkwLCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiOjMyNSwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzMjU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIik7RS5leHBvcnRzPW0uUHJvbWlzZX0seyIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzR9XSwzMjY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Iikscz1hKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Iiksbz1hKCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eSIpO0UuZXhwb3J0cz1mdW5jdGlvbihyLHQpe2lmKG0ocikscyh0KSYmdC5jb25zdHJ1Y3Rvcj09PXIpcmV0dXJuIHQ7dmFyIGU9by5mKHIpO3JldHVybigwLGUucmVzb2x2ZSkodCksZS5wcm9taXNlfX0seyIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0IjoyMjcsIi4uL2ludGVybmFscy9pcy1vYmplY3QiOjI4OSwiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkiOjMwM31dLDMyNzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciIpLHM9YSgiLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbiIpLG89YSgiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uIikuQ09OU1RSVUNUT1I7RS5leHBvcnRzPW98fCFzKGZ1bmN0aW9uKHIpe20uYWxsKHIpLnRoZW4odm9pZCAwLGZ1bmN0aW9uKCl7fSl9KX0seyIuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uIjoyMzQsIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiI6MzI0LCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiOjMyNX1dLDMyODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGx9O20ucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24ocyl7dmFyIG89e2l0ZW06cyxuZXh0Om51bGx9LHI9dGhpcy50YWlsO3I/ci5uZXh0PW86dGhpcy5oZWFkPW8sdGhpcy50YWlsPW99LGdldDpmdW5jdGlvbigpe3ZhciBzPXRoaXMuaGVhZDtpZihzKXJldHVybih0aGlzLmhlYWQ9cy5uZXh0KT09PW51bGwmJih0aGlzLnRhaWw9bnVsbCkscy5pdGVtfX0sRS5leHBvcnRzPW19LHt9XSwzMjk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQiKSxzPVR5cGVFcnJvcjtFLmV4cG9ydHM9ZnVuY3Rpb24obyl7aWYobShvKSl0aHJvdyBuZXcgcygiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitvKTtyZXR1cm4gb319LHsiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkIjoyODh9XSwzMzA6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIikscz1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yIiksbz1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSxyPWEoIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyIpLHQ9bygic3BlY2llcyIpO0UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgbD1tKGUpO3ImJmwmJiFsW3RdJiZzKGwsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0seyIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yIjoyNDQsIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIjoyNjksIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3fV0sMzMxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiKS5mLHM9YSgiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiKSxvPWEoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpKCJ0b1N0cmluZ1RhZyIpO0UuZXhwb3J0cz1mdW5jdGlvbihyLHQsZSl7ciYmIWUmJihyPXIucHJvdG90eXBlKSxyJiYhcyhyLG8pJiZtKHIsbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LHsiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkiOjMwOCwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzMzI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvc2hhcmVkIikscz1hKCIuLi9pbnRlcm5hbHMvdWlkIiksbz1tKCJrZXlzIik7RS5leHBvcnRzPWZ1bmN0aW9uKHIpe3JldHVybiBvW3JdfHwob1tyXT1zKHIpKX19LHsiLi4vaW50ZXJuYWxzL3NoYXJlZCI6MzM0LCIuLi9pbnRlcm5hbHMvdWlkIjozNTB9XSwzMzM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIikscz1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eSIpLG89bVsiX19jb3JlLWpzX3NoYXJlZF9fIl18fHMoIl9fY29yZS1qc19zaGFyZWRfXyIse30pO0UuZXhwb3J0cz1vfSx7Ii4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5IjoyNDYsIi4uL2ludGVybmFscy9nbG9iYWwiOjI3NH1dLDMzNDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9pcy1wdXJlIikscz1hKCIuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlIik7KEUuZXhwb3J0cz1mdW5jdGlvbihvLHIpe3JldHVybiBzW29dfHwoc1tvXT1yIT09dm9pZCAwP3I6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4zMy4wIixtb2RlOm0/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDIzIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0seyIuLi9pbnRlcm5hbHMvaXMtcHVyZSI6MjkwLCIuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlIjozMzN9XSwzMzU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Iikscz1hKCIuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvciIpLG89YSgiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkIikscj1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgic3BlY2llcyIpO0UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBsLG49bSh0KS5jb25zdHJ1Y3RvcjtyZXR1cm4gbj09PXZvaWQgMHx8byhsPW0obilbcl0pP2U6cyhsKX19LHsiLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3IiOjIyMywiLi4vaW50ZXJuYWxzL2FuLW9iamVjdCI6MjI3LCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQiOjI4OCwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzMzY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24iKSxzPWEoIi4uL2ludGVybmFscy9mYWlscyIpLG89YSgiLi4vaW50ZXJuYWxzL2dsb2JhbCIpLlN0cmluZztFLmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhcyhmdW5jdGlvbigpe3ZhciByPVN5bWJvbCgic3ltYm9sIGRldGVjdGlvbiIpO3JldHVybiFvKHIpfHwhKE9iamVjdChyKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZtJiZtPDQxfSl9LHsiLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uIjoyNTcsIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzR9XSwzMzc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLHM9YSgiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiIpLG89YSgiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIikscj1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIik7RS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9cygiU3ltYm9sIiksZT10JiZ0LnByb3RvdHlwZSxsPWUmJmUudmFsdWVPZixuPW8oInRvUHJpbWl0aXZlIik7ZSYmIWVbbl0mJnIoZSxuLGZ1bmN0aW9uKGkpe3JldHVybiBtKGwsdGhpcyl9LHthcml0eToxfSl9fSx7Ii4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iOjI0NSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiI6MjY5LCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDMzODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIik7RS5leHBvcnRzPW0mJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yfSx7Ii4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMzZ9XSwzMzk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbSxzLG8scix0PWEoIi4uL2ludGVybmFscy9nbG9iYWwiKSxlPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseSIpLGw9YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCIpLG49YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksaT1hKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLGY9YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksYz1hKCIuLi9pbnRlcm5hbHMvaHRtbCIpLHU9YSgiLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlIiksZD1hKCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQiKSxoPWEoIi4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoIiksdz1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcyIpLF89YSgiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlIiksQT10LnNldEltbWVkaWF0ZSxQPXQuY2xlYXJJbW1lZGlhdGUsTD10LnByb2Nlc3MsTj10LkRpc3BhdGNoLEQ9dC5GdW5jdGlvbixGPXQuTWVzc2FnZUNoYW5uZWwsVT10LlN0cmluZyxCPTAsUz17fTtmKGZ1bmN0aW9uKCl7bT10LmxvY2F0aW9ufSk7dmFyIEM9ZnVuY3Rpb24oZyl7aWYoaShTLGcpKXt2YXIgeT1TW2ddO2RlbGV0ZSBTW2ddLHkoKX19LHY9ZnVuY3Rpb24oZyl7cmV0dXJuIGZ1bmN0aW9uKCl7QyhnKX19LHA9ZnVuY3Rpb24oZyl7QyhnLmRhdGEpfSxiPWZ1bmN0aW9uKGcpe3QucG9zdE1lc3NhZ2UoVShnKSxtLnByb3RvY29sKyIvLyIrbS5ob3N0KX07QSYmUHx8KEE9ZnVuY3Rpb24oZyl7aChhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciB5PW4oZyk/ZzpEKGcpLE09dShhcmd1bWVudHMsMSk7cmV0dXJuIFNbKytCXT1mdW5jdGlvbigpe2UoeSx2b2lkIDAsTSl9LHMoQiksQn0sUD1mdW5jdGlvbihnKXtkZWxldGUgU1tnXX0sXz9zPWZ1bmN0aW9uKGcpe0wubmV4dFRpY2sodihnKSl9Ok4mJk4ubm93P3M9ZnVuY3Rpb24oZyl7Ti5ub3codihnKSl9OkYmJiF3PyhyPShvPW5ldyBGKS5wb3J0MixvLnBvcnQxLm9ubWVzc2FnZT1wLHM9bChyLnBvc3RNZXNzYWdlLHIpKTp0LmFkZEV2ZW50TGlzdGVuZXImJm4odC5wb3N0TWVzc2FnZSkmJiF0LmltcG9ydFNjcmlwdHMmJm0mJm0ucHJvdG9jb2whPT0iZmlsZToiJiYhZihiKT8ocz1iLHQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIscCwhMSkpOnM9Im9ucmVhZHlzdGF0ZWNoYW5nZSJpbiBkKCJzY3JpcHQiKT9mdW5jdGlvbihnKXtjLmFwcGVuZENoaWxkKGQoInNjcmlwdCIpKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjLnJlbW92ZUNoaWxkKHRoaXMpLEMoZyl9fTpmdW5jdGlvbihnKXtzZXRUaW1lb3V0KHYoZyksMCl9KSxFLmV4cG9ydHM9e3NldDpBLGNsZWFyOlB9fSx7Ii4uL2ludGVybmFscy9hcnJheS1zbGljZSI6MjMxLCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQiOjI0OSwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MiOjI1MywiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlIjoyNTQsIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkiOjI2MSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCI6MjYyLCIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzQsIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFscy9odG1sIjoyNzgsIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZSI6Mjg1LCIuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCI6MzUzfV0sMzQwOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkiKSxzPU1hdGgubWF4LG89TWF0aC5taW47RS5leHBvcnRzPWZ1bmN0aW9uKHIsdCl7dmFyIGU9bShyKTtyZXR1cm4gZTwwP3MoZSt0LDApOm8oZSx0KX19LHsiLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkiOjM0Mn1dLDM0MTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCIpLHM9YSgiLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSIpO0UuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4gbShzKG8pKX19LHsiLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0IjoyODAsIi4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUiOjMyOX1dLDM0MjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9tYXRoLXRydW5jIik7RS5leHBvcnRzPWZ1bmN0aW9uKHMpe3ZhciBvPStzO3JldHVybiBvIT1vfHxvPT09MD8wOm0obyl9fSx7Ii4uL2ludGVybmFscy9tYXRoLXRydW5jIjozMDF9XSwzNDM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eSIpLHM9TWF0aC5taW47RS5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiBvPjA/cyhtKG8pLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSx7Ii4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5IjozNDJ9XSwzNDQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlIikscz1PYmplY3Q7RS5leHBvcnRzPWZ1bmN0aW9uKG8pe3JldHVybiBzKG0obykpfX0seyIuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlIjozMjl9XSwzNDU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLHM9YSgiLi4vaW50ZXJuYWxzL2lzLW9iamVjdCIpLG89YSgiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCIpLHI9YSgiLi4vaW50ZXJuYWxzL2dldC1tZXRob2QiKSx0PWEoIi4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUiKSxlPWEoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCIpLGw9VHlwZUVycm9yLG49ZSgidG9QcmltaXRpdmUiKTtFLmV4cG9ydHM9ZnVuY3Rpb24oaSxmKXtpZighcyhpKXx8byhpKSlyZXR1cm4gaTt2YXIgYyx1PXIoaSxuKTtpZih1KXtpZihmPT09dm9pZCAwJiYoZj0iZGVmYXVsdCIpLGM9bSh1LGksZiksIXMoYyl8fG8oYykpcmV0dXJuIGM7dGhyb3cgbmV3IGwoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiBmPT09dm9pZCAwJiYoZj0ibnVtYmVyIiksdChpLGYpfX0seyIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCI6MjY0LCIuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCI6MjczLCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IjoyODksIi4uL2ludGVybmFscy9pcy1zeW1ib2wiOjI5MiwiLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZSI6MzIwLCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDM0NjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy90by1wcmltaXRpdmUiKSxzPWEoIi4uL2ludGVybmFscy9pcy1zeW1ib2wiKTtFLmV4cG9ydHM9ZnVuY3Rpb24obyl7dmFyIHI9bShvLCJzdHJpbmciKTtyZXR1cm4gcyhyKT9yOnIrIiJ9fSx7Ii4uL2ludGVybmFscy9pcy1zeW1ib2wiOjI5MiwiLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZSI6MzQ1fV0sMzQ3OltmdW5jdGlvbihhLEUsayl7dmFyIG09e307bVthKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSgidG9TdHJpbmdUYWciKV09InoiLEUuZXhwb3J0cz1TdHJpbmcobSk9PT0iW29iamVjdCB6XSJ9LHsiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sIjozNTd9XSwzNDg6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvY2xhc3NvZiIpLHM9U3RyaW5nO0UuZXhwb3J0cz1mdW5jdGlvbihvKXtpZihtKG8pPT09IlN5bWJvbCIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gcyhvKX19LHsiLi4vaW50ZXJuYWxzL2NsYXNzb2YiOjIzNn1dLDM0OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPVN0cmluZztFLmV4cG9ydHM9ZnVuY3Rpb24ocyl7dHJ5e3JldHVybiBtKHMpfWNhdGNoe3JldHVybiJPYmplY3QifX19LHt9XSwzNTA6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIikscz0wLG89TWF0aC5yYW5kb20oKSxyPW0oMSAudG9TdHJpbmcpO0UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iU3ltYm9sKCIrKHQ9PT12b2lkIDA/IiI6dCkrIilfIityKCsrcytvLDM2KX19LHsiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4fV0sMzUxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iKTtFLmV4cG9ydHM9bSYmIVN5bWJvbC5zaGFtJiZ0eXBlb2YgU3ltYm9sLml0ZXJhdG9yPT0ic3ltYm9sIn0seyIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiI6MzM2fV0sMzUyOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIikscz1hKCIuLi9pbnRlcm5hbHMvZmFpbHMiKTtFLmV4cG9ydHM9bSYmcyhmdW5jdGlvbigpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZSE9PTQyfSl9LHsiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIjoyNDcsIi4uL2ludGVybmFscy9mYWlscyI6MjYwfV0sMzUzOltmdW5jdGlvbihhLEUsayl7dmFyIG09VHlwZUVycm9yO0UuZXhwb3J0cz1mdW5jdGlvbihzLG8pe2lmKHM8byl0aHJvdyBuZXcgbSgiTm90IGVub3VnaCBhcmd1bWVudHMiKTtyZXR1cm4gc319LHt9XSwzNTQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZ2xvYmFsIikscz1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxvPW0uV2Vha01hcDtFLmV4cG9ydHM9cyhvKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhvKSl9LHsiLi4vaW50ZXJuYWxzL2dsb2JhbCI6Mjc0LCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NX1dLDM1NTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9wYXRoIikscz1hKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLG89YSgiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQiKSxyPWEoIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5IikuZjtFLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bS5TeW1ib2x8fChtLlN5bWJvbD17fSk7cyhlLHQpfHxyKGUsdCx7dmFsdWU6by5mKHQpfSl9fSx7Ii4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5IjozMDgsIi4uL2ludGVybmFscy9wYXRoIjozMjIsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkIjozNTZ9XSwzNTY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKTtrLmY9bX0seyIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiOjM1N31dLDM1NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9nbG9iYWwiKSxzPWEoIi4uL2ludGVybmFscy9zaGFyZWQiKSxvPWEoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Iikscj1hKCIuLi9pbnRlcm5hbHMvdWlkIiksdD1hKCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLGU9YSgiLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkIiksbD1tLlN5bWJvbCxuPXMoIndrcyIpLGk9ZT9sLmZvcnx8bDpsJiZsLndpdGhvdXRTZXR0ZXJ8fHI7RS5leHBvcnRzPWZ1bmN0aW9uKGYpe3JldHVybiBvKG4sZil8fChuW2ZdPXQmJm8obCxmKT9sW2ZdOmkoIlN5bWJvbC4iK2YpKSxuW2ZdfX0seyIuLi9pbnRlcm5hbHMvZ2xvYmFsIjoyNzQsIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5IjoyNzUsIi4uL2ludGVybmFscy9zaGFyZWQiOjMzNCwiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iOjMzNiwiLi4vaW50ZXJuYWxzL3VpZCI6MzUwLCIuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQiOjM1MX1dLDM1ODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24iKS5maW5kSW5kZXgsbz1hKCIuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzIikscj0hMDsiZmluZEluZGV4ImluW10mJkFycmF5KDEpLmZpbmRJbmRleChmdW5jdGlvbigpe3I9ITF9KSxtKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6cn0se2ZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gcyh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLG8oImZpbmRJbmRleCIpfSx7Ii4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiOjIyNSwiLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbiI6MjI5LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTl9XSwzNTk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZXhwb3J0Iikscz1hKCIuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uIikuZmluZCxvPWEoIi4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiKSxyPSEwOyJmaW5kImluW10mJkFycmF5KDEpLmZpbmQoZnVuY3Rpb24oKXtyPSExfSksbSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOnJ9LHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBzKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksbygiZmluZCIpfSx7Ii4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMiOjIyNSwiLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbiI6MjI5LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTl9XSwzNjA6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZXhwb3J0Iikscz1hKCIuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMiKS5pbmNsdWRlcyxvPWEoIi4uL2ludGVybmFscy9mYWlscyIpLHI9YSgiLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcyIpO20oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpvKGZ1bmN0aW9uKCl7cmV0dXJuIUFycmF5KDEpLmluY2x1ZGVzKCl9KX0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBzKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscigiaW5jbHVkZXMiKX0seyIuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzIjoyMjUsIi4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcyI6MjI4LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mYWlscyI6MjYwfV0sMzYxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Iikscz1hKCIuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzIiksbz1hKCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzIikscj1hKCIuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUiKSx0PWEoIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5IikuZixlPWEoIi4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUiKSxsPWEoIi4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Iiksbj1hKCIuLi9pbnRlcm5hbHMvaXMtcHVyZSIpLGk9YSgiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIiksZj1yLnNldCxjPXIuZ2V0dGVyRm9yKCJBcnJheSBJdGVyYXRvciIpO0UuZXhwb3J0cz1lKEFycmF5LCJBcnJheSIsZnVuY3Rpb24oZCxoKXtmKHRoaXMse3R5cGU6IkFycmF5IEl0ZXJhdG9yIix0YXJnZXQ6bShkKSxpbmRleDowLGtpbmQ6aH0pfSxmdW5jdGlvbigpe3ZhciBkPWModGhpcyksaD1kLnRhcmdldCx3PWQua2luZCxfPWQuaW5kZXgrKztpZighaHx8Xz49aC5sZW5ndGgpcmV0dXJuIGQudGFyZ2V0PXZvaWQgMCxsKHZvaWQgMCwhMCk7c3dpdGNoKHcpe2Nhc2Uia2V5cyI6cmV0dXJuIGwoXywhMSk7Y2FzZSJ2YWx1ZXMiOnJldHVybiBsKGhbX10sITEpfXJldHVybiBsKFtfLGhbX11dLCExKX0sInZhbHVlcyIpO3ZhciB1PW8uQXJndW1lbnRzPW8uQXJyYXk7aWYocygia2V5cyIpLHMoInZhbHVlcyIpLHMoImVudHJpZXMiKSwhbiYmaSYmdS5uYW1lIT09InZhbHVlcyIpdHJ5e3QodSwibmFtZSIse3ZhbHVlOiJ2YWx1ZXMifSl9Y2F0Y2h7fX0seyIuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzIjoyMjUsIi4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0IjoyNDAsIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUiOjI4MiwiLi4vaW50ZXJuYWxzL2lzLXB1cmUiOjI5MCwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZSI6Mjk2LCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzIjoyOTgsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5IjozMDgsIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCI6MzQxfV0sMzYyOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLHM9YSgiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiIpLG89YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Iikscj1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLHQ9YSgiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyIpLGU9YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksbD1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxuPWEoIi4uL2ludGVybmFscy9pcy1zeW1ib2wiKSxpPWEoIi4uL2ludGVybmFscy9hcnJheS1zbGljZSIpLGY9YSgiLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uIiksYz1hKCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLHU9U3RyaW5nLGQ9cygiSlNPTiIsInN0cmluZ2lmeSIpLGg9dCgvLi8uZXhlYyksdz10KCIiLmNoYXJBdCksXz10KCIiLmNoYXJDb2RlQXQpLEE9dCgiIi5yZXBsYWNlKSxQPXQoMSAudG9TdHJpbmcpLEw9L1tcdUQ4MDAtXHVERkZGXS9nLE49L15bXHVEODAwLVx1REJGRl0kLyxEPS9eW1x1REMwMC1cdURGRkZdJC8sRj0hY3x8ZShmdW5jdGlvbigpe3ZhciBDPXMoIlN5bWJvbCIpKCJzdHJpbmdpZnkgZGV0ZWN0aW9uIik7cmV0dXJuIGQoW0NdKSE9PSJbbnVsbF0ifHxkKHthOkN9KSE9PSJ7fSJ8fGQoT2JqZWN0KEMpKSE9PSJ7fSJ9KSxVPWUoZnVuY3Rpb24oKXtyZXR1cm4gZCgiXHVERjA2XHVEODM0IikhPT0nIlxcdWRmMDZcXHVkODM0Iid8fGQoIlx1REVBRCIpIT09JyJcXHVkZWFkIid9KSxCPWZ1bmN0aW9uKEMsdil7dmFyIHA9aShhcmd1bWVudHMpLGI9Zih2KTtpZihsKGIpfHxDIT09dm9pZCAwJiYhbihDKSlyZXR1cm4gcFsxXT1mdW5jdGlvbihnLHkpe2lmKGwoYikmJih5PXIoYix0aGlzLHUoZykseSkpLCFuKHkpKXJldHVybiB5fSxvKGQsbnVsbCxwKX0sUz1mdW5jdGlvbihDLHYscCl7dmFyIGI9dyhwLHYtMSksZz13KHAsdisxKTtyZXR1cm4gaChOLEMpJiYhaChELGcpfHxoKEQsQykmJiFoKE4sYik/IlxcdSIrUChfKEMsMCksMTYpOkN9O2QmJm0oe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpGfHxVfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKEMsdixwKXt2YXIgYj1pKGFyZ3VtZW50cyksZz1vKEY/QjpkLG51bGwsYik7cmV0dXJuIFUmJnR5cGVvZiBnPT0ic3RyaW5nIj9BKGcsTCxTKTpnfX0pfSx7Ii4uL2ludGVybmFscy9hcnJheS1zbGljZSI6MjMxLCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkiOjI2MSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIjoyNjksIi4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbiI6MjcyLCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCI6MjkyLCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiI6MzM2fV0sMzYzOltmdW5jdGlvbihhLEUsayl7YSgiLi4vaW50ZXJuYWxzL2V4cG9ydCIpKHt0YXJnZXQ6Ik51bWJlciIsc3RhdDohMH0se2lzTmFOOmZ1bmN0aW9uKG0pe3JldHVybiBtIT1tfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OX1dLDM2NDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9vYmplY3QtYXNzaWduIik7bSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsYXJpdHk6Mixmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PXN9LHthc3NpZ246c30pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24iOjMwNX1dLDM2NTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uIiksbz1hKCIuLi9pbnRlcm5hbHMvZmFpbHMiKSxyPWEoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzIiksdD1hKCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Iik7bSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFzfHxvKGZ1bmN0aW9uKCl7ci5mKDEpfSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oZSl7dmFyIGw9ci5mO3JldHVybiBsP2wodChlKSk6W119fSl9LHsiLi4vaW50ZXJuYWxzL2V4cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMiOjMxMiwiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iOjMzNiwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCI6MzQ0fV0sMzY2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLHM9YSgiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCIpLG89YSgiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIik7bSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOmEoIi4uL2ludGVybmFscy9mYWlscyIpKGZ1bmN0aW9uKCl7bygxKX0pfSx7a2V5czpmdW5jdGlvbihyKXtyZXR1cm4gbyhzKHIpKX19KX0seyIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMiOjMxNiwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdCI6MzQ0fV0sMzY3OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLHM9YSgiLi4vaW50ZXJuYWxzL29iamVjdC10by1hcnJheSIpLnZhbHVlczttKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3ZhbHVlczpmdW5jdGlvbihvKXtyZXR1cm4gcyhvKX19KX0seyIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXkiOjMxOX1dLDM2ODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIiksbz1hKCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSIpLHI9YSgiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkiKSx0PWEoIi4uL2ludGVybmFscy9wZXJmb3JtIiksZT1hKCIuLi9pbnRlcm5hbHMvaXRlcmF0ZSIpO20oe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6YSgiLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uIil9LHthbGw6ZnVuY3Rpb24obCl7dmFyIG49dGhpcyxpPXIuZihuKSxmPWkucmVzb2x2ZSxjPWkucmVqZWN0LHU9dChmdW5jdGlvbigpe3ZhciBkPW8obi5yZXNvbHZlKSxoPVtdLHc9MCxfPTE7ZShsLGZ1bmN0aW9uKEEpe3ZhciBQPXcrKyxMPSExO18rKyxzKGQsbixBKS50aGVuKGZ1bmN0aW9uKE4pe0x8fChMPSEwLGhbUF09TiwtLV98fGYoaCkpfSxjKX0pLC0tX3x8ZihoKX0pO3JldHVybiB1LmVycm9yJiZjKHUudmFsdWUpLGkucHJvbWlzZX19KX0seyIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSI6MjIyLCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9pdGVyYXRlIjoyOTMsIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5IjozMDMsIi4uL2ludGVybmFscy9wZXJmb3JtIjozMjMsIi4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbiI6MzI3fV0sMzY5OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLHM9YSgiLi4vaW50ZXJuYWxzL2lzLXB1cmUiKSxvPWEoIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLkNPTlNUUlVDVE9SLHI9YSgiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yIiksdD1hKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIiksZT1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxsPWEoIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iKSxuPXImJnIucHJvdG90eXBlO2lmKG0oe3RhcmdldDoiUHJvbWlzZSIscHJvdG86ITAsZm9yY2VkOm8scmVhbDohMH0se2NhdGNoOmZ1bmN0aW9uKGYpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGYpfX0pLCFzJiZlKHIpKXt2YXIgaT10KCJQcm9taXNlIikucHJvdG90eXBlLmNhdGNoO24uY2F0Y2ghPT1pJiZsKG4sImNhdGNoIixpLHt1bnNhZmU6ITB9KX19LHsiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiI6MjQ1LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OSwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy9pcy1wdXJlIjoyOTAsIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiI6MzI0LCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IiOjMyNX1dLDM3MDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtLHMsbyxyPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSx0PWEoIi4uL2ludGVybmFscy9pcy1wdXJlIiksZT1hKCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUiKSxsPWEoIi4uL2ludGVybmFscy9nbG9iYWwiKSxuPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIiksaT1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIiksZj1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YiKSxjPWEoIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyIpLHU9YSgiLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzIiksZD1hKCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSIpLGg9YSgiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIiksdz1hKCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0IiksXz1hKCIuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UiKSxBPWEoIi4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yIiksUD1hKCIuLi9pbnRlcm5hbHMvdGFzayIpLnNldCxMPWEoIi4uL2ludGVybmFscy9taWNyb3Rhc2siKSxOPWEoIi4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMiKSxEPWEoIi4uL2ludGVybmFscy9wZXJmb3JtIiksRj1hKCIuLi9pbnRlcm5hbHMvcXVldWUiKSxVPWEoIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSIpLEI9YSgiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yIiksUz1hKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iKSxDPWEoIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Iiksdj1TLkNPTlNUUlVDVE9SLHA9Uy5SRUpFQ1RJT05fRVZFTlQsYj1TLlNVQkNMQVNTSU5HLGc9VS5nZXR0ZXJGb3IoIlByb21pc2UiKSx5PVUuc2V0LE09QiYmQi5wcm90b3R5cGUsTz1CLFI9TSx6PWwuVHlwZUVycm9yLCQ9bC5kb2N1bWVudCxYPWwucHJvY2VzcyxqPUMuZixXPWosVD0hISgkJiYkLmNyZWF0ZUV2ZW50JiZsLmRpc3BhdGNoRXZlbnQpLHg9ZnVuY3Rpb24oUSl7dmFyIHJ0O3JldHVybiEoIXcoUSl8fCFoKHJ0PVEudGhlbikpJiZydH0sST1mdW5jdGlvbihRLHJ0KXt2YXIgc3Qsb3QsaHQsZHQ9cnQudmFsdWUsbXQ9cnQuc3RhdGU9PT0xLE10PW10P1Eub2s6US5mYWlsLEN0PVEucmVzb2x2ZSxfdD1RLnJlamVjdCx5dD1RLmRvbWFpbjt0cnl7TXQ/KG10fHwocnQucmVqZWN0aW9uPT09MiYmWShydCkscnQucmVqZWN0aW9uPTEpLE10PT09ITA/c3Q9ZHQ6KHl0JiZ5dC5lbnRlcigpLHN0PU10KGR0KSx5dCYmKHl0LmV4aXQoKSxodD0hMCkpLHN0PT09US5wcm9taXNlP190KG5ldyB6KCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihvdD14KHN0KSk/bihvdCxzdCxDdCxfdCk6Q3Qoc3QpKTpfdChkdCl9Y2F0Y2goY3Qpe3l0JiYhaHQmJnl0LmV4aXQoKSxfdChjdCl9fSxIPWZ1bmN0aW9uKFEscnQpe1Eubm90aWZpZWR8fChRLm5vdGlmaWVkPSEwLEwoZnVuY3Rpb24oKXtmb3IodmFyIHN0LG90PVEucmVhY3Rpb25zO3N0PW90LmdldCgpOylJKHN0LFEpO1Eubm90aWZpZWQ9ITEscnQmJiFRLnJlamVjdGlvbiYmVihRKX0pKX0sWj1mdW5jdGlvbihRLHJ0LHN0KXt2YXIgb3QsaHQ7VD8oKG90PSQuY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9cnQsb3QucmVhc29uPXN0LG90LmluaXRFdmVudChRLCExLCEwKSxsLmRpc3BhdGNoRXZlbnQob3QpKTpvdD17cHJvbWlzZTpydCxyZWFzb246c3R9LCFwJiYoaHQ9bFsib24iK1FdKT9odChvdCk6UT09PSJ1bmhhbmRsZWRyZWplY3Rpb24iJiZOKCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLHN0KX0sVj1mdW5jdGlvbihRKXtuKFAsbCxmdW5jdGlvbigpe3ZhciBydCxzdD1RLmZhY2FkZSxvdD1RLnZhbHVlO2lmKEsoUSkmJihydD1EKGZ1bmN0aW9uKCl7ZT9YLmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIsb3Qsc3QpOlooInVuaGFuZGxlZHJlamVjdGlvbiIsc3Qsb3QpfSksUS5yZWplY3Rpb249ZXx8SyhRKT8yOjEscnQuZXJyb3IpKXRocm93IHJ0LnZhbHVlfSl9LEs9ZnVuY3Rpb24oUSl7cmV0dXJuIFEucmVqZWN0aW9uIT09MSYmIVEucGFyZW50fSxZPWZ1bmN0aW9uKFEpe24oUCxsLGZ1bmN0aW9uKCl7dmFyIHJ0PVEuZmFjYWRlO2U/WC5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIixydCk6WigicmVqZWN0aW9uaGFuZGxlZCIscnQsUS52YWx1ZSl9KX0sSj1mdW5jdGlvbihRLHJ0LHN0KXtyZXR1cm4gZnVuY3Rpb24ob3Qpe1EocnQsb3Qsc3QpfX0scT1mdW5jdGlvbihRLHJ0LHN0KXtRLmRvbmV8fChRLmRvbmU9ITAsc3QmJihRPXN0KSxRLnZhbHVlPXJ0LFEuc3RhdGU9MixIKFEsITApKX0sRz1mdW5jdGlvbihRLHJ0LHN0KXtpZighUS5kb25lKXtRLmRvbmU9ITAsc3QmJihRPXN0KTt0cnl7aWYoUS5mYWNhZGU9PT1ydCl0aHJvdyBuZXcgeigiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTt2YXIgb3Q9eChydCk7b3Q/TChmdW5jdGlvbigpe3ZhciBodD17ZG9uZTohMX07dHJ5e24ob3QscnQsSihHLGh0LFEpLEoocSxodCxRKSl9Y2F0Y2goZHQpe3EoaHQsZHQsUSl9fSk6KFEudmFsdWU9cnQsUS5zdGF0ZT0xLEgoUSwhMSkpfWNhdGNoKGh0KXtxKHtkb25lOiExfSxodCxRKX19fTtpZih2JiYoUj0oTz1mdW5jdGlvbihRKXtfKHRoaXMsUiksZChRKSxuKG0sdGhpcyk7dmFyIHJ0PWcodGhpcyk7dHJ5e1EoSihHLHJ0KSxKKHEscnQpKX1jYXRjaChzdCl7cShydCxzdCl9fSkucHJvdG90eXBlLChtPWZ1bmN0aW9uKFEpe3kodGhpcyx7dHlwZToiUHJvbWlzZSIsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOm5ldyBGLHJlamVjdGlvbjohMSxzdGF0ZTowLHZhbHVlOnZvaWQgMH0pfSkucHJvdG90eXBlPWkoUiwidGhlbiIsZnVuY3Rpb24oUSxydCl7dmFyIHN0PWcodGhpcyksb3Q9aihBKHRoaXMsTykpO3JldHVybiBzdC5wYXJlbnQ9ITAsb3Qub2s9IWgoUSl8fFEsb3QuZmFpbD1oKHJ0KSYmcnQsb3QuZG9tYWluPWU/WC5kb21haW46dm9pZCAwLHN0LnN0YXRlPT09MD9zdC5yZWFjdGlvbnMuYWRkKG90KTpMKGZ1bmN0aW9uKCl7SShvdCxzdCl9KSxvdC5wcm9taXNlfSkscz1mdW5jdGlvbigpe3ZhciBRPW5ldyBtLHJ0PWcoUSk7dGhpcy5wcm9taXNlPVEsdGhpcy5yZXNvbHZlPUooRyxydCksdGhpcy5yZWplY3Q9SihxLHJ0KX0sQy5mPWo9ZnVuY3Rpb24oUSl7cmV0dXJuIFE9PT1PfHxRPT09dm9pZCAwP25ldyBzKFEpOlcoUSl9LCF0JiZoKEIpJiZNIT09T2JqZWN0LnByb3RvdHlwZSkpe289TS50aGVuLGJ8fGkoTSwidGhlbiIsZnVuY3Rpb24oUSxydCl7dmFyIHN0PXRoaXM7cmV0dXJuIG5ldyBPKGZ1bmN0aW9uKG90LGh0KXtuKG8sc3Qsb3QsaHQpfSkudGhlbihRLHJ0KX0se3Vuc2FmZTohMH0pO3RyeXtkZWxldGUgTS5jb25zdHJ1Y3Rvcn1jYXRjaHt9ZiYmZihNLFIpfXIoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCx3cmFwOiEwLGZvcmNlZDp2fSx7UHJvbWlzZTpPfSksYyhPLCJQcm9taXNlIiwhMSwhMCksdSgiUHJvbWlzZSIpfSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjIsIi4uL2ludGVybmFscy9hbi1pbnN0YW5jZSI6MjI2LCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIjoyNDUsIi4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSI6MjU0LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIjoyNjQsIi4uL2ludGVybmFscy9nbG9iYWwiOjI3NCwiLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycyI6Mjc3LCIuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUiOjI4MiwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlIjoyODUsIi4uL2ludGVybmFscy9pcy1vYmplY3QiOjI4OSwiLi4vaW50ZXJuYWxzL2lzLXB1cmUiOjI5MCwiLi4vaW50ZXJuYWxzL21pY3JvdGFzayI6MzAyLCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eSI6MzAzLCIuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YiOjMxOCwiLi4vaW50ZXJuYWxzL3BlcmZvcm0iOjMyMywiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMjQsIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciI6MzI1LCIuLi9pbnRlcm5hbHMvcXVldWUiOjMyOCwiLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzIjozMzAsIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyI6MzMxLCIuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvciI6MzM1LCIuLi9pbnRlcm5hbHMvdGFzayI6MzM5fV0sMzcxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vaW50ZXJuYWxzL2V4cG9ydCIpLHM9YSgiLi4vaW50ZXJuYWxzL2lzLXB1cmUiKSxvPWEoIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciIpLHI9YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksdD1hKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIiksZT1hKCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiKSxsPWEoIi4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yIiksbj1hKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlIiksaT1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIiksZj1vJiZvLnByb3RvdHlwZTtpZihtKHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhbyYmcihmdW5jdGlvbigpe2YuZmluYWxseS5jYWxsKHt0aGVuOmZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oKXt9KX0pfSx7ZmluYWxseTpmdW5jdGlvbih1KXt2YXIgZD1sKHRoaXMsdCgiUHJvbWlzZSIpKSxoPWUodSk7cmV0dXJuIHRoaXMudGhlbihoP2Z1bmN0aW9uKHcpe3JldHVybiBuKGQsdSgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHd9KX06dSxoP2Z1bmN0aW9uKHcpe3JldHVybiBuKGQsdSgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgd30pfTp1KX19KSwhcyYmZShvKSl7dmFyIGM9dCgiUHJvbWlzZSIpLnByb3RvdHlwZS5maW5hbGx5O2YuZmluYWxseSE9PWMmJmkoZiwiZmluYWxseSIsYyx7dW5zYWZlOiEwfSl9fSx7Ii4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4iOjI0NSwiLi4vaW50ZXJuYWxzL2V4cG9ydCI6MjU5LCIuLi9pbnRlcm5hbHMvZmFpbHMiOjI2MCwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiI6MjY5LCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUiOjI4NSwiLi4vaW50ZXJuYWxzL2lzLXB1cmUiOjI5MCwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yIjozMjUsIi4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUiOjMyNiwiLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IiOjMzNX1dLDM3MjpbZnVuY3Rpb24oYSxFLGspe2EoIi4uL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3RvciIpLGEoIi4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwiKSxhKCIuLi9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2giKSxhKCIuLi9tb2R1bGVzL2VzLnByb21pc2UucmFjZSIpLGEoIi4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QiKSxhKCIuLi9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZSIpfSx7Ii4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwiOjM2OCwiLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoIjozNjksIi4uL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3RvciI6MzcwLCIuLi9tb2R1bGVzL2VzLnByb21pc2UucmFjZSI6MzczLCIuLi9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0IjozNzQsIi4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlIjozNzV9XSwzNzM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZXhwb3J0Iikscz1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLG89YSgiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUiKSxyPWEoIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5IiksdD1hKCIuLi9pbnRlcm5hbHMvcGVyZm9ybSIpLGU9YSgiLi4vaW50ZXJuYWxzL2l0ZXJhdGUiKTttKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOmEoIi4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbiIpfSx7cmFjZTpmdW5jdGlvbihsKXt2YXIgbj10aGlzLGk9ci5mKG4pLGY9aS5yZWplY3QsYz10KGZ1bmN0aW9uKCl7dmFyIHU9byhuLnJlc29sdmUpO2UobCxmdW5jdGlvbihkKXtzKHUsbixkKS50aGVuKGkucmVzb2x2ZSxmKX0pfSk7cmV0dXJuIGMuZXJyb3ImJmYoYy52YWx1ZSksaS5wcm9taXNlfX0pfSx7Ii4uL2ludGVybmFscy9hLWNhbGxhYmxlIjoyMjIsIi4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL2l0ZXJhdGUiOjI5MywiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkiOjMwMywiLi4vaW50ZXJuYWxzL3BlcmZvcm0iOjMyMywiLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uIjozMjd9XSwzNzQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZXhwb3J0Iikscz1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCIpLG89YSgiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkiKTttKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOmEoIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLkNPTlNUUlVDVE9SfSx7cmVqZWN0OmZ1bmN0aW9uKHIpe3ZhciB0PW8uZih0aGlzKTtyZXR1cm4gcyh0LnJlamVjdCx2b2lkIDAsciksdC5wcm9taXNlfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwiOjI2NCwiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkiOjMwMywiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uIjozMjR9XSwzNzU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZXhwb3J0Iikscz1hKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIiksbz1hKCIuLi9pbnRlcm5hbHMvaXMtcHVyZSIpLHI9YSgiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yIiksdD1hKCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iKS5DT05TVFJVQ1RPUixlPWEoIi4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUiKSxsPXMoIlByb21pc2UiKSxuPW8mJiF0O20oe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6b3x8dH0se3Jlc29sdmU6ZnVuY3Rpb24oaSl7cmV0dXJuIGUobiYmdGhpcz09PWw/cjp0aGlzLGkpfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiI6MjY5LCIuLi9pbnRlcm5hbHMvaXMtcHVyZSI6MjkwLCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24iOjMyNCwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yIjozMjUsIi4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUiOjMyNn1dLDM3NjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxvPWEoIi4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCIpLHI9UmFuZ2VFcnJvcix0PVN0cmluZy5mcm9tQ2hhckNvZGUsZT1TdHJpbmcuZnJvbUNvZGVQb2ludCxsPXMoW10uam9pbik7bSh7dGFyZ2V0OiJTdHJpbmciLHN0YXQ6ITAsYXJpdHk6MSxmb3JjZWQ6ISFlJiZlLmxlbmd0aCE9PTF9LHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKG4pe2Zvcih2YXIgaSxmPVtdLGM9YXJndW1lbnRzLmxlbmd0aCx1PTA7Yz51Oyl7aWYoaT0rYXJndW1lbnRzW3UrK10sbyhpLDExMTQxMTEpIT09aSl0aHJvdyBuZXcgcihpKyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO2ZbdV09aTw2NTUzNj90KGkpOnQoNTUyOTYrKChpLT02NTUzNik+PjEwKSxpJTEwMjQrNTYzMjApfXJldHVybiBsKGYsIiIpfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyI6MjY4LCIuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgiOjM0MH1dLDM3NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiKSxvPWEoIi4uL2ludGVybmFscy9ub3QtYS1yZWdleHAiKSxyPWEoIi4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUiKSx0PWEoIi4uL2ludGVybmFscy90by1zdHJpbmciKSxlPWEoIi4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYyIpLGw9cygiIi5pbmRleE9mKTttKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiFlKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24obil7cmV0dXJuISF+bCh0KHIodGhpcykpLHQobyhuKSksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSx7Ii4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYyI6MjM4LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMiOjI2OCwiLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCI6MzA0LCIuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlIjozMjksIi4uL2ludGVybmFscy90by1zdHJpbmciOjM0OH1dLDM3ODpbZnVuY3Rpb24oYSxFLGspe2EoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUiKSgiYXN5bmNJdGVyYXRvciIpfSx7Ii4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUiOjM1NX1dLDM3OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9nbG9iYWwiKSxvPWEoIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsIikscj1hKCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIiksdD1hKCIuLi9pbnRlcm5hbHMvaXMtcHVyZSIpLGU9YSgiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzIiksbD1hKCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiIpLG49YSgiLi4vaW50ZXJuYWxzL2ZhaWxzIiksaT1hKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLGY9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YiKSxjPWEoIi4uL2ludGVybmFscy9hbi1vYmplY3QiKSx1PWEoIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCIpLGQ9YSgiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleSIpLGg9YSgiLi4vaW50ZXJuYWxzL3RvLXN0cmluZyIpLHc9YSgiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yIiksXz1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZSIpLEE9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIiksUD1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMiKSxMPWEoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCIpLE49YSgiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMiKSxEPWEoIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yIiksRj1hKCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSIpLFU9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcyIpLEI9YSgiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlIiksUz1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluIiksQz1hKCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yIiksdj1hKCIuLi9pbnRlcm5hbHMvc2hhcmVkIikscD1hKCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSIpLGI9YSgiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIiksZz1hKCIuLi9pbnRlcm5hbHMvdWlkIikseT1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wiKSxNPWEoIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkIiksTz1hKCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lIiksUj1hKCIuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUiKSx6PWEoIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyIpLCQ9YSgiLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlIiksWD1hKCIuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uIikuZm9yRWFjaCxqPXAoImhpZGRlbiIpLFc9JC5zZXQsVD0kLmdldHRlckZvcigiU3ltYm9sIikseD1PYmplY3QucHJvdG90eXBlLEk9cy5TeW1ib2wsSD1JJiZJLnByb3RvdHlwZSxaPXMuUmFuZ2VFcnJvcixWPXMuVHlwZUVycm9yLEs9cy5RT2JqZWN0LFk9RC5mLEo9Ri5mLHE9TC5mLEc9Qi5mLFE9cihbXS5wdXNoKSxydD12KCJzeW1ib2xzIiksc3Q9digib3Atc3ltYm9scyIpLG90PXYoIndrcyIpLGh0PSFLfHwhSy5wcm90b3R5cGV8fCFLLnByb3RvdHlwZS5maW5kQ2hpbGQsZHQ9ZnVuY3Rpb24ocHQsYXQsbHQpe3ZhciB3dD1ZKHgsYXQpO3d0JiZkZWxldGUgeFthdF0sSihwdCxhdCxsdCksd3QmJnB0IT09eCYmSih4LGF0LHd0KX0sbXQ9ZSYmbihmdW5jdGlvbigpe3JldHVybiBfKEooe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSih0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmEhPT03fSk/ZHQ6SixNdD1mdW5jdGlvbihwdCxhdCl7dmFyIGx0PXJ0W3B0XT1fKEgpO3JldHVybiBXKGx0LHt0eXBlOiJTeW1ib2wiLHRhZzpwdCxkZXNjcmlwdGlvbjphdH0pLGV8fChsdC5kZXNjcmlwdGlvbj1hdCksbHR9LEN0PWZ1bmN0aW9uKHB0LGF0LGx0KXtwdD09PXgmJkN0KHN0LGF0LGx0KSxjKHB0KTt2YXIgd3Q9ZChhdCk7cmV0dXJuIGMobHQpLGkocnQsd3QpPyhsdC5lbnVtZXJhYmxlPyhpKHB0LGopJiZwdFtqXVt3dF0mJihwdFtqXVt3dF09ITEpLGx0PV8obHQse2VudW1lcmFibGU6dygwLCExKX0pKTooaShwdCxqKXx8SihwdCxqLHcoMSx7fSkpLHB0W2pdW3d0XT0hMCksbXQocHQsd3QsbHQpKTpKKHB0LHd0LGx0KX0sX3Q9ZnVuY3Rpb24ocHQsYXQpe2MocHQpO3ZhciBsdD11KGF0KSx3dD1BKGx0KS5jb25jYXQoaXQobHQpKTtyZXR1cm4gWCh3dCxmdW5jdGlvbih4dCl7ZSYmIW8oeXQsbHQseHQpfHxDdChwdCx4dCxsdFt4dF0pfSkscHR9LHl0PWZ1bmN0aW9uKHB0KXt2YXIgYXQ9ZChwdCksbHQ9byhHLHRoaXMsYXQpO3JldHVybiEodGhpcz09PXgmJmkocnQsYXQpJiYhaShzdCxhdCkpJiYoIShsdHx8IWkodGhpcyxhdCl8fCFpKHJ0LGF0KXx8aSh0aGlzLGopJiZ0aGlzW2pdW2F0XSl8fGx0KX0sY3Q9ZnVuY3Rpb24ocHQsYXQpe3ZhciBsdD11KHB0KSx3dD1kKGF0KTtpZihsdCE9PXh8fCFpKHJ0LHd0KXx8aShzdCx3dCkpe3ZhciB4dD1ZKGx0LHd0KTtyZXR1cm4heHR8fCFpKHJ0LHd0KXx8aShsdCxqKSYmbHRbal1bd3RdfHwoeHQuZW51bWVyYWJsZT0hMCkseHR9fSxldD1mdW5jdGlvbihwdCl7dmFyIGF0PXEodShwdCkpLGx0PVtdO3JldHVybiBYKGF0LGZ1bmN0aW9uKHd0KXtpKHJ0LHd0KXx8aShiLHd0KXx8UShsdCx3dCl9KSxsdH0saXQ9ZnVuY3Rpb24ocHQpe3ZhciBhdD1wdD09PXgsbHQ9cShhdD9zdDp1KHB0KSksd3Q9W107cmV0dXJuIFgobHQsZnVuY3Rpb24oeHQpeyFpKHJ0LHh0KXx8YXQmJiFpKHgseHQpfHxRKHd0LHJ0W3h0XSl9KSx3dH07bHx8KFMoSD0oST1mdW5jdGlvbigpe2lmKGYoSCx0aGlzKSl0aHJvdyBuZXcgVigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7dmFyIHB0PWFyZ3VtZW50cy5sZW5ndGgmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9oKGFyZ3VtZW50c1swXSk6dm9pZCAwLGF0PWcocHQpLGx0PWZ1bmN0aW9uKHd0KXt0aGlzPT09eCYmbyhsdCxzdCx3dCksaSh0aGlzLGopJiZpKHRoaXNbal0sYXQpJiYodGhpc1tqXVthdF09ITEpO3ZhciB4dD13KDEsd3QpO3RyeXttdCh0aGlzLGF0LHh0KX1jYXRjaChqdCl7aWYoIShqdCBpbnN0YW5jZW9mIFopKXRocm93IGp0O2R0KHRoaXMsYXQseHQpfX07cmV0dXJuIGUmJmh0JiZtdCh4LGF0LHtjb25maWd1cmFibGU6ITAsc2V0Omx0fSksTXQoYXQscHQpfSkucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4gVCh0aGlzKS50YWd9KSxTKEksIndpdGhvdXRTZXR0ZXIiLGZ1bmN0aW9uKHB0KXtyZXR1cm4gTXQoZyhwdCkscHQpfSksQi5mPXl0LEYuZj1DdCxVLmY9X3QsRC5mPWN0LFAuZj1MLmY9ZXQsTi5mPWl0LE0uZj1mdW5jdGlvbihwdCl7cmV0dXJuIE10KHkocHQpLHB0KX0sZSYmKEMoSCwiZGVzY3JpcHRpb24iLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFQodGhpcykuZGVzY3JpcHRpb259fSksdHx8Uyh4LCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIseXQse3Vuc2FmZTohMH0pKSksbSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLHdyYXA6ITAsZm9yY2VkOiFsLHNoYW06IWx9LHtTeW1ib2w6SX0pLFgoQShvdCksZnVuY3Rpb24ocHQpe08ocHQpfSksbSh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFsfSx7dXNlU2V0dGVyOmZ1bmN0aW9uKCl7aHQ9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe2h0PSExfX0pLG0oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbCxzaGFtOiFlfSx7Y3JlYXRlOmZ1bmN0aW9uKHB0LGF0KXtyZXR1cm4gYXQ9PT12b2lkIDA/XyhwdCk6X3QoXyhwdCksYXQpfSxkZWZpbmVQcm9wZXJ0eTpDdCxkZWZpbmVQcm9wZXJ0aWVzOl90LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpjdH0pLG0oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohbH0se2dldE93blByb3BlcnR5TmFtZXM6ZXR9KSxSKCkseihJLCJTeW1ib2wiKSxiW2pdPSEwfSx7Ii4uL2ludGVybmFscy9hbi1vYmplY3QiOjIyNywiLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbiI6MjI5LCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IiOjI0MiwiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiI6MjQ1LCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yIjoyNDQsIi4uL2ludGVybmFscy9kZXNjcmlwdG9ycyI6MjQ3LCIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9mYWlscyI6MjYwLCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCI6MjY0LCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzIjoyNjgsIi4uL2ludGVybmFscy9nbG9iYWwiOjI3NCwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzIjoyNzYsIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSI6MjgyLCIuLi9pbnRlcm5hbHMvaXMtcHVyZSI6MjkwLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZSI6MzA2LCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzIjozMDcsIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5IjozMDgsIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yIjozMDksIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcyI6MzExLCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwiOjMxMCwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMiOjMxMiwiLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YiOjMxNCwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzIjozMTYsIi4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZSI6MzE3LCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWciOjMzMSwiLi4vaW50ZXJuYWxzL3NoYXJlZCI6MzM0LCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSI6MzMyLCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiI6MzM2LCIuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUiOjMzNywiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0IjozNDEsIi4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkiOjM0NiwiLi4vaW50ZXJuYWxzL3RvLXN0cmluZyI6MzQ4LCIuLi9pbnRlcm5hbHMvdWlkIjozNTAsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCI6MzU3LCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lIjozNTUsIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkIjozNTZ9XSwzODA6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCIuLi9pbnRlcm5hbHMvZXhwb3J0Iikscz1hKCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluIiksbz1hKCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSIpLHI9YSgiLi4vaW50ZXJuYWxzL3RvLXN0cmluZyIpLHQ9YSgiLi4vaW50ZXJuYWxzL3NoYXJlZCIpLGU9YSgiLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24iKSxsPXQoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSxuPXQoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTttKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IWV9LHtmb3I6ZnVuY3Rpb24oaSl7dmFyIGY9cihpKTtpZihvKGwsZikpcmV0dXJuIGxbZl07dmFyIGM9cygiU3ltYm9sIikoZik7cmV0dXJuIGxbZl09YyxuW2NdPWYsY319KX0seyIuLi9pbnRlcm5hbHMvZXhwb3J0IjoyNTksIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4iOjI2OSwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL3NoYXJlZCI6MzM0LCIuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbiI6MzM4LCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nIjozNDh9XSwzODE6W2Z1bmN0aW9uKGEsRSxrKXthKCIuLi9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3RvciIpLGEoIi4uL21vZHVsZXMvZXMuc3ltYm9sLmZvciIpLGEoIi4uL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3IiKSxhKCIuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5IiksYSgiLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzIil9LHsiLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeSI6MzYyLCIuLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMiOjM2NSwiLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3IiOjM3OSwiLi4vbW9kdWxlcy9lcy5zeW1ib2wuZm9yIjozODAsIi4uL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3IiOjM4Mn1dLDM4MjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL2ludGVybmFscy9leHBvcnQiKSxzPWEoIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Iiksbz1hKCIuLi9pbnRlcm5hbHMvaXMtc3ltYm9sIikscj1hKCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZyIpLHQ9YSgiLi4vaW50ZXJuYWxzL3NoYXJlZCIpLGU9YSgiLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24iKSxsPXQoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTttKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IWV9LHtrZXlGb3I6ZnVuY3Rpb24obil7aWYoIW8obikpdGhyb3cgbmV3IFR5cGVFcnJvcihyKG4pKyIgaXMgbm90IGEgc3ltYm9sIik7aWYocyhsLG4pKXJldHVybiBsW25dfX0pfSx7Ii4uL2ludGVybmFscy9leHBvcnQiOjI1OSwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkiOjI3NSwiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCI6MjkyLCIuLi9pbnRlcm5hbHMvc2hhcmVkIjozMzQsIi4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uIjozMzgsIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nIjozNDl9XSwzODM6W2Z1bmN0aW9uKGEsRSxrKXtmdW5jdGlvbiBtKHMpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocyl9ay5pc0FycmF5PWZ1bmN0aW9uKHMpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkocyk6bShzKT09PSJbb2JqZWN0IEFycmF5XSJ9LGsuaXNCb29sZWFuPWZ1bmN0aW9uKHMpe3JldHVybiB0eXBlb2Ygcz09ImJvb2xlYW4ifSxrLmlzTnVsbD1mdW5jdGlvbihzKXtyZXR1cm4gcz09PW51bGx9LGsuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHM9PW51bGx9LGsuaXNOdW1iZXI9ZnVuY3Rpb24ocyl7cmV0dXJuIHR5cGVvZiBzPT0ibnVtYmVyIn0say5pc1N0cmluZz1mdW5jdGlvbihzKXtyZXR1cm4gdHlwZW9mIHM9PSJzdHJpbmcifSxrLmlzU3ltYm9sPWZ1bmN0aW9uKHMpe3JldHVybiB0eXBlb2Ygcz09InN5bWJvbCJ9LGsuaXNVbmRlZmluZWQ9ZnVuY3Rpb24ocyl7cmV0dXJuIHM9PT12b2lkIDB9LGsuaXNSZWdFeHA9ZnVuY3Rpb24ocyl7cmV0dXJuIG0ocyk9PT0iW29iamVjdCBSZWdFeHBdIn0say5pc09iamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gdHlwZW9mIHM9PSJvYmplY3QiJiZzIT09bnVsbH0say5pc0RhdGU9ZnVuY3Rpb24ocyl7cmV0dXJuIG0ocyk9PT0iW29iamVjdCBEYXRlXSJ9LGsuaXNFcnJvcj1mdW5jdGlvbihzKXtyZXR1cm4gbShzKT09PSJbb2JqZWN0IEVycm9yXSJ8fHMgaW5zdGFuY2VvZiBFcnJvcn0say5pc0Z1bmN0aW9uPWZ1bmN0aW9uKHMpe3JldHVybiB0eXBlb2Ygcz09ImZ1bmN0aW9uIn0say5pc1ByaW1pdGl2ZT1mdW5jdGlvbihzKXtyZXR1cm4gcz09PW51bGx8fHR5cGVvZiBzPT0iYm9vbGVhbiJ8fHR5cGVvZiBzPT0ibnVtYmVyInx8dHlwZW9mIHM9PSJzdHJpbmcifHx0eXBlb2Ygcz09InN5bWJvbCJ8fHM9PT12b2lkIDB9LGsuaXNCdWZmZXI9YSgiYnVmZmVyIikuQnVmZmVyLmlzQnVmZmVyfSx7YnVmZmVyOjIyMH1dLDM4NDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXt2YXIgcz1hKCJlbGxpcHRpYyIpLG89YSgiYm4uanMiKTtFLmV4cG9ydHM9ZnVuY3Rpb24obCl7cmV0dXJuIG5ldyB0KGwpfTt2YXIgcj17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiB0KGwpe3RoaXMuY3VydmVUeXBlPXJbbF0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpsfSksdGhpcy5jdXJ2ZT1uZXcgcy5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIGUobCxuLGkpe0FycmF5LmlzQXJyYXkobCl8fChsPWwudG9BcnJheSgpKTt2YXIgZj1uZXcgbShsKTtpZihpJiZmLmxlbmd0aDxpKXt2YXIgYz1uZXcgbShpLWYubGVuZ3RoKTtjLmZpbGwoMCksZj1tLmNvbmNhdChbYyxmXSl9cmV0dXJuIG4/Zi50b1N0cmluZyhuKTpmfXIucDIyND1yLnNlY3AyMjRyMSxyLnAyNTY9ci5zZWNwMjU2cjE9ci5wcmltZTI1NnYxLHIucDE5Mj1yLnNlY3AxOTJyMT1yLnByaW1lMTkydjEsci5wMzg0PXIuc2VjcDM4NHIxLHIucDUyMT1yLnNlY3A1MjFyMSx0LnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24obCxuKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KGwsbil9LHQucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24obCxuLGkpe3JldHVybiBuPW58fCJ1dGY4IixtLmlzQnVmZmVyKGwpfHwobD1uZXcgbShsLG4pKSxlKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhsKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLGksdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LHQucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihsLG4pe3ZhciBpPXRoaXMua2V5cy5nZXRQdWJsaWMobj09PSJjb21wcmVzc2VkIiwhMCk7cmV0dXJuIG49PT0iaHlicmlkIiYmKGlbaS5sZW5ndGgtMV0lMj9pWzBdPTc6aVswXT02KSxlKGksbCl9LHQucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24obCl7cmV0dXJuIGUodGhpcy5rZXlzLmdldFByaXZhdGUoKSxsKX0sdC5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKGwsbil7cmV0dXJuIG49bnx8InV0ZjgiLG0uaXNCdWZmZXIobCl8fChsPW5ldyBtKGwsbikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKGwpLHRoaXN9LHQucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24obCxuKXtuPW58fCJ1dGY4IixtLmlzQnVmZmVyKGwpfHwobD1uZXcgbShsLG4pKTt2YXIgaT1uZXcgbyhsKTtyZXR1cm4gaT1pLnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKGkpLHRoaXN9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJidWZmZXIiKS5CdWZmZXIpfSx7ImJuLmpzIjozODUsYnVmZmVyOjIyMCxlbGxpcHRpYzo0MDV9XSwzODU6W2Z1bmN0aW9uKGEsRSxrKXthcmd1bWVudHNbNF1bMTg0XVswXS5hcHBseShrLGFyZ3VtZW50cyl9LHtidWZmZXI6MTg4LGR1cDoxODR9XSwzODY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJpbmhlcml0cyIpLHM9YSgibWQ1LmpzIiksbz1hKCJyaXBlbWQxNjAiKSxyPWEoInNoYS5qcyIpLHQ9YSgiY2lwaGVyLWJhc2UiKTtmdW5jdGlvbiBlKGwpe3QuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPWx9bShlLHQpLGUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24obCl7dGhpcy5faGFzaC51cGRhdGUobCl9LGUucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxFLmV4cG9ydHM9ZnVuY3Rpb24obCl7cmV0dXJuKGw9bC50b0xvd2VyQ2FzZSgpKT09PSJtZDUiP25ldyBzOmw9PT0icm1kMTYwInx8bD09PSJyaXBlbWQxNjAiP25ldyBvOm5ldyBlKHIobCkpfX0seyJjaXBoZXItYmFzZSI6MjIxLGluaGVyaXRzOjQ0MCwibWQ1LmpzIjo0NTAscmlwZW1kMTYwOjQ5Mywic2hhLmpzIjo0OTh9XSwzODc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJtZDUuanMiKTtFLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyBtKCkudXBkYXRlKHMpLmRpZ2VzdCgpfX0seyJtZDUuanMiOjQ1MH1dLDM4ODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImluaGVyaXRzIikscz1hKCIuL2xlZ2FjeSIpLG89YSgiY2lwaGVyLWJhc2UiKSxyPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLHQ9YSgiY3JlYXRlLWhhc2gvbWQ1IiksZT1hKCJyaXBlbWQxNjAiKSxsPWEoInNoYS5qcyIpLG49ci5hbGxvYygxMjgpO2Z1bmN0aW9uIGkoZixjKXtvLmNhbGwodGhpcywiZGlnZXN0IiksdHlwZW9mIGM9PSJzdHJpbmciJiYoYz1yLmZyb20oYykpO3ZhciB1PWY9PT0ic2hhNTEyInx8Zj09PSJzaGEzODQiPzEyODo2NDt0aGlzLl9hbGc9Zix0aGlzLl9rZXk9YyxjLmxlbmd0aD51P2M9KGY9PT0icm1kMTYwIj9uZXcgZTpsKGYpKS51cGRhdGUoYykuZGlnZXN0KCk6Yy5sZW5ndGg8dSYmKGM9ci5jb25jYXQoW2Msbl0sdSkpO2Zvcih2YXIgZD10aGlzLl9pcGFkPXIuYWxsb2NVbnNhZmUodSksaD10aGlzLl9vcGFkPXIuYWxsb2NVbnNhZmUodSksdz0wO3c8dTt3KyspZFt3XT01NF5jW3ddLGhbd109OTJeY1t3XTt0aGlzLl9oYXNoPWY9PT0icm1kMTYwIj9uZXcgZTpsKGYpLHRoaXMuX2hhc2gudXBkYXRlKGQpfW0oaSxvKSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGYpe3RoaXMuX2hhc2gudXBkYXRlKGYpfSxpLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgZj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybih0aGlzLl9hbGc9PT0icm1kMTYwIj9uZXcgZTpsKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoZikuZGlnZXN0KCl9LEUuZXhwb3J0cz1mdW5jdGlvbihmLGMpe3JldHVybihmPWYudG9Mb3dlckNhc2UoKSk9PT0icm1kMTYwInx8Zj09PSJyaXBlbWQxNjAiP25ldyBpKCJybWQxNjAiLGMpOmY9PT0ibWQ1Ij9uZXcgcyh0LGMpOm5ldyBpKGYsYyl9fSx7Ii4vbGVnYWN5IjozODksImNpcGhlci1iYXNlIjoyMjEsImNyZWF0ZS1oYXNoL21kNSI6Mzg3LGluaGVyaXRzOjQ0MCxyaXBlbWQxNjA6NDkzLCJzYWZlLWJ1ZmZlciI6NDk0LCJzaGEuanMiOjQ5OH1dLDM4OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImluaGVyaXRzIikscz1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixvPWEoImNpcGhlci1iYXNlIikscj1zLmFsbG9jKDEyOCk7ZnVuY3Rpb24gdChlLGwpe28uY2FsbCh0aGlzLCJkaWdlc3QiKSx0eXBlb2YgbD09InN0cmluZyImJihsPXMuZnJvbShsKSksdGhpcy5fYWxnPWUsdGhpcy5fa2V5PWwsbC5sZW5ndGg+NjQ/bD1lKGwpOmwubGVuZ3RoPDY0JiYobD1zLmNvbmNhdChbbCxyXSw2NCkpO2Zvcih2YXIgbj10aGlzLl9pcGFkPXMuYWxsb2NVbnNhZmUoNjQpLGk9dGhpcy5fb3BhZD1zLmFsbG9jVW5zYWZlKDY0KSxmPTA7Zjw2NDtmKyspbltmXT01NF5sW2ZdLGlbZl09OTJebFtmXTt0aGlzLl9oYXNoPVtuXX1tKHQsbyksdC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9oYXNoLnB1c2goZSl9LHQucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2FsZyhzLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhzLmNvbmNhdChbdGhpcy5fb3BhZCxlXSkpfSxFLmV4cG9ydHM9dH0seyJjaXBoZXItYmFzZSI6MjIxLGluaGVyaXRzOjQ0MCwic2FmZS1idWZmZXIiOjQ5NH1dLDM5MDpbZnVuY3Rpb24oYSxFLGspe2sucmFuZG9tQnl0ZXM9ay5ybmc9ay5wc2V1ZG9SYW5kb21CeXRlcz1rLnBybmc9YSgicmFuZG9tYnl0ZXMiKSxrLmNyZWF0ZUhhc2g9ay5IYXNoPWEoImNyZWF0ZS1oYXNoIiksay5jcmVhdGVIbWFjPWsuSG1hYz1hKCJjcmVhdGUtaG1hYyIpO3ZhciBtPWEoImJyb3dzZXJpZnktc2lnbi9hbGdvcyIpLHM9T2JqZWN0LmtleXMobSksbz1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQocyk7ay5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gb307dmFyIHI9YSgicGJrZGYyIik7ay5wYmtkZjI9ci5wYmtkZjIsay5wYmtkZjJTeW5jPXIucGJrZGYyU3luYzt2YXIgdD1hKCJicm93c2VyaWZ5LWNpcGhlciIpO2suQ2lwaGVyPXQuQ2lwaGVyLGsuY3JlYXRlQ2lwaGVyPXQuY3JlYXRlQ2lwaGVyLGsuQ2lwaGVyaXY9dC5DaXBoZXJpdixrLmNyZWF0ZUNpcGhlcml2PXQuY3JlYXRlQ2lwaGVyaXYsay5EZWNpcGhlcj10LkRlY2lwaGVyLGsuY3JlYXRlRGVjaXBoZXI9dC5jcmVhdGVEZWNpcGhlcixrLkRlY2lwaGVyaXY9dC5EZWNpcGhlcml2LGsuY3JlYXRlRGVjaXBoZXJpdj10LmNyZWF0ZURlY2lwaGVyaXYsay5nZXRDaXBoZXJzPXQuZ2V0Q2lwaGVycyxrLmxpc3RDaXBoZXJzPXQubGlzdENpcGhlcnM7dmFyIGU9YSgiZGlmZmllLWhlbGxtYW4iKTtrLkRpZmZpZUhlbGxtYW5Hcm91cD1lLkRpZmZpZUhlbGxtYW5Hcm91cCxrLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1lLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxrLmdldERpZmZpZUhlbGxtYW49ZS5nZXREaWZmaWVIZWxsbWFuLGsuY3JlYXRlRGlmZmllSGVsbG1hbj1lLmNyZWF0ZURpZmZpZUhlbGxtYW4say5EaWZmaWVIZWxsbWFuPWUuRGlmZmllSGVsbG1hbjt2YXIgbD1hKCJicm93c2VyaWZ5LXNpZ24iKTtrLmNyZWF0ZVNpZ249bC5jcmVhdGVTaWduLGsuU2lnbj1sLlNpZ24say5jcmVhdGVWZXJpZnk9bC5jcmVhdGVWZXJpZnksay5WZXJpZnk9bC5WZXJpZnksay5jcmVhdGVFQ0RIPWEoImNyZWF0ZS1lY2RoIik7dmFyIG49YSgicHVibGljLWVuY3J5cHQiKTtrLnB1YmxpY0VuY3J5cHQ9bi5wdWJsaWNFbmNyeXB0LGsucHJpdmF0ZUVuY3J5cHQ9bi5wcml2YXRlRW5jcnlwdCxrLnB1YmxpY0RlY3J5cHQ9bi5wdWJsaWNEZWNyeXB0LGsucHJpdmF0ZURlY3J5cHQ9bi5wcml2YXRlRGVjcnlwdDt2YXIgaT1hKCJyYW5kb21maWxsIik7ay5yYW5kb21GaWxsPWkucmFuZG9tRmlsbCxrLnJhbmRvbUZpbGxTeW5jPWkucmFuZG9tRmlsbFN5bmMsay5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwid2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMiLCJodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiXS5qb2luKGAKYCkpfSxrLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LHsiYnJvd3NlcmlmeS1jaXBoZXIiOjIwNiwiYnJvd3NlcmlmeS1zaWduIjoyMTMsImJyb3dzZXJpZnktc2lnbi9hbGdvcyI6MjEwLCJjcmVhdGUtZWNkaCI6Mzg0LCJjcmVhdGUtaGFzaCI6Mzg2LCJjcmVhdGUtaG1hYyI6Mzg4LCJkaWZmaWUtaGVsbG1hbiI6NDAwLHBia2RmMjo0NjAsInB1YmxpYy1lbmNyeXB0Ijo0NjgscmFuZG9tYnl0ZXM6NDc1LHJhbmRvbWZpbGw6NDc2fV0sMzkxOltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0scyl7dHlwZW9mIGs9PSJvYmplY3QiJiZFIT09dm9pZCAwP0UuZXhwb3J0cz1zKCk6KG09dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6bXx8c2VsZikuZGF5anM9cygpfSkodm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG09NmU0LHM9MzZlNSxvPSJtaWxsaXNlY29uZCIscj0ic2Vjb25kIix0PSJtaW51dGUiLGU9ImhvdXIiLGw9ImRheSIsbj0id2VlayIsaT0ibW9udGgiLGY9InF1YXJ0ZXIiLGM9InllYXIiLHU9ImRhdGUiLGQ9IkludmFsaWQgRGF0ZSIsaD0vXihcZHs0fSlbLS9dPyhcZHsxLDJ9KT9bLS9dPyhcZHswLDJ9KVtUdFxzXSooXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Oj8oXGR7MSwyfSk/Wy46XT8oXGQrKT8kLyx3PS9cWyhbXlxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csXz17bmFtZToiZW4iLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSxtb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksb3JkaW5hbDpmdW5jdGlvbihwKXt2YXIgYj1bInRoIiwic3QiLCJuZCIsInJkIl0sZz1wJTEwMDtyZXR1cm4iWyIrcCsoYlsoZy0yMCklMTBdfHxiW2ddfHxiWzBdKSsiXSJ9fSxBPWZ1bmN0aW9uKHAsYixnKXt2YXIgeT1TdHJpbmcocCk7cmV0dXJuIXl8fHkubGVuZ3RoPj1iP3A6IiIrQXJyYXkoYisxLXkubGVuZ3RoKS5qb2luKGcpK3B9LFA9e3M6QSx6OmZ1bmN0aW9uKHApe3ZhciBiPS1wLnV0Y09mZnNldCgpLGc9TWF0aC5hYnMoYikseT1NYXRoLmZsb29yKGcvNjApLE09ZyU2MDtyZXR1cm4oYjw9MD8iKyI6Ii0iKStBKHksMiwiMCIpKyI6IitBKE0sMiwiMCIpfSxtOmZ1bmN0aW9uIHAoYixnKXtpZihiLmRhdGUoKTxnLmRhdGUoKSlyZXR1cm4tcChnLGIpO3ZhciB5PTEyKihnLnllYXIoKS1iLnllYXIoKSkrKGcubW9udGgoKS1iLm1vbnRoKCkpLE09Yi5jbG9uZSgpLmFkZCh5LGkpLE89Zy1NPDAsUj1iLmNsb25lKCkuYWRkKHkrKE8/LTE6MSksaSk7cmV0dXJuKygtKHkrKGctTSkvKE8/TS1SOlItTSkpfHwwKX0sYTpmdW5jdGlvbihwKXtyZXR1cm4gcDwwP01hdGguY2VpbChwKXx8MDpNYXRoLmZsb29yKHApfSxwOmZ1bmN0aW9uKHApe3JldHVybntNOmkseTpjLHc6bixkOmwsRDp1LGg6ZSxtOnQsczpyLG1zOm8sUTpmfVtwXXx8U3RyaW5nKHB8fCIiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLywiIil9LHU6ZnVuY3Rpb24ocCl7cmV0dXJuIHA9PT12b2lkIDB9fSxMPSJlbiIsTj17fTtOW0xdPV87dmFyIEQ9IiRpc0RheWpzT2JqZWN0IixGPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2YgQ3x8ISghcHx8IXBbRF0pfSxVPWZ1bmN0aW9uIHAoYixnLHkpe3ZhciBNO2lmKCFiKXJldHVybiBMO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7dmFyIE89Yi50b0xvd2VyQ2FzZSgpO05bT10mJihNPU8pLGcmJihOW09dPWcsTT1PKTt2YXIgUj1iLnNwbGl0KCItIik7aWYoIU0mJlIubGVuZ3RoPjEpcmV0dXJuIHAoUlswXSl9ZWxzZXt2YXIgej1iLm5hbWU7Tlt6XT1iLE09en1yZXR1cm4heSYmTSYmKEw9TSksTXx8IXkmJkx9LEI9ZnVuY3Rpb24ocCxiKXtpZihGKHApKXJldHVybiBwLmNsb25lKCk7dmFyIGc9dHlwZW9mIGI9PSJvYmplY3QiP2I6e307cmV0dXJuIGcuZGF0ZT1wLGcuYXJncz1hcmd1bWVudHMsbmV3IEMoZyl9LFM9UDtTLmw9VSxTLmk9RixTLnc9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gQihwLHtsb2NhbGU6Yi4kTCx1dGM6Yi4kdSx4OmIuJHgsJG9mZnNldDpiLiRvZmZzZXR9KX07dmFyIEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBwKGcpe3RoaXMuJEw9VShnLmxvY2FsZSxudWxsLCEwKSx0aGlzLnBhcnNlKGcpLHRoaXMuJHg9dGhpcy4keHx8Zy54fHx7fSx0aGlzW0RdPSEwfXZhciBiPXAucHJvdG90eXBlO3JldHVybiBiLnBhcnNlPWZ1bmN0aW9uKGcpe3RoaXMuJGQ9ZnVuY3Rpb24oeSl7dmFyIE09eS5kYXRlLE89eS51dGM7aWYoTT09PW51bGwpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoUy51KE0pKXJldHVybiBuZXcgRGF0ZTtpZihNIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoTSk7aWYodHlwZW9mIE09PSJzdHJpbmciJiYhL1okL2kudGVzdChNKSl7dmFyIFI9TS5tYXRjaChoKTtpZihSKXt2YXIgej1SWzJdLTF8fDAsJD0oUls3XXx8IjAiKS5zdWJzdHJpbmcoMCwzKTtyZXR1cm4gTz9uZXcgRGF0ZShEYXRlLlVUQyhSWzFdLHosUlszXXx8MSxSWzRdfHwwLFJbNV18fDAsUls2XXx8MCwkKSk6bmV3IERhdGUoUlsxXSx6LFJbM118fDEsUls0XXx8MCxSWzVdfHwwLFJbNl18fDAsJCl9fXJldHVybiBuZXcgRGF0ZShNKX0oZyksdGhpcy5pbml0KCl9LGIuaW5pdD1mdW5jdGlvbigpe3ZhciBnPXRoaXMuJGQ7dGhpcy4keT1nLmdldEZ1bGxZZWFyKCksdGhpcy4kTT1nLmdldE1vbnRoKCksdGhpcy4kRD1nLmdldERhdGUoKSx0aGlzLiRXPWcuZ2V0RGF5KCksdGhpcy4kSD1nLmdldEhvdXJzKCksdGhpcy4kbT1nLmdldE1pbnV0ZXMoKSx0aGlzLiRzPWcuZ2V0U2Vjb25kcygpLHRoaXMuJG1zPWcuZ2V0TWlsbGlzZWNvbmRzKCl9LGIuJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuIFN9LGIuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvU3RyaW5nKCkhPT1kfSxiLmlzU2FtZT1mdW5jdGlvbihnLHkpe3ZhciBNPUIoZyk7cmV0dXJuIHRoaXMuc3RhcnRPZih5KTw9TSYmTTw9dGhpcy5lbmRPZih5KX0sYi5pc0FmdGVyPWZ1bmN0aW9uKGcseSl7cmV0dXJuIEIoZyk8dGhpcy5zdGFydE9mKHkpfSxiLmlzQmVmb3JlPWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuZW5kT2YoeSk8QihnKX0sYi4kZz1mdW5jdGlvbihnLHksTSl7cmV0dXJuIFMudShnKT90aGlzW3ldOnRoaXMuc2V0KE0sZyl9LGIudW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LGIudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sYi5zdGFydE9mPWZ1bmN0aW9uKGcseSl7dmFyIE09dGhpcyxPPSEhUy51KHkpfHx5LFI9Uy5wKGcpLHo9ZnVuY3Rpb24oSCxaKXt2YXIgVj1TLncoTS4kdT9EYXRlLlVUQyhNLiR5LFosSCk6bmV3IERhdGUoTS4keSxaLEgpLE0pO3JldHVybiBPP1Y6Vi5lbmRPZihsKX0sJD1mdW5jdGlvbihILFope3JldHVybiBTLncoTS50b0RhdGUoKVtIXS5hcHBseShNLnRvRGF0ZSgicyIpLChPP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoWikpLE0pfSxYPXRoaXMuJFcsaj10aGlzLiRNLFc9dGhpcy4kRCxUPSJzZXQiKyh0aGlzLiR1PyJVVEMiOiIiKTtzd2l0Y2goUil7Y2FzZSBjOnJldHVybiBPP3ooMSwwKTp6KDMxLDExKTtjYXNlIGk6cmV0dXJuIE8/eigxLGopOnooMCxqKzEpO2Nhc2Ugbjp2YXIgeD10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsST0oWDx4P1grNzpYKS14O3JldHVybiB6KE8/Vy1JOlcrKDYtSSksaik7Y2FzZSBsOmNhc2UgdTpyZXR1cm4gJChUKyJIb3VycyIsMCk7Y2FzZSBlOnJldHVybiAkKFQrIk1pbnV0ZXMiLDEpO2Nhc2UgdDpyZXR1cm4gJChUKyJTZWNvbmRzIiwyKTtjYXNlIHI6cmV0dXJuICQoVCsiTWlsbGlzZWNvbmRzIiwzKTtkZWZhdWx0OnJldHVybiB0aGlzLmNsb25lKCl9fSxiLmVuZE9mPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnN0YXJ0T2YoZywhMSl9LGIuJHNldD1mdW5jdGlvbihnLHkpe3ZhciBNLE89Uy5wKGcpLFI9InNldCIrKHRoaXMuJHU/IlVUQyI6IiIpLHo9KE09e30sTVtsXT1SKyJEYXRlIixNW3VdPVIrIkRhdGUiLE1baV09UisiTW9udGgiLE1bY109UisiRnVsbFllYXIiLE1bZV09UisiSG91cnMiLE1bdF09UisiTWludXRlcyIsTVtyXT1SKyJTZWNvbmRzIixNW29dPVIrIk1pbGxpc2Vjb25kcyIsTSlbT10sJD1PPT09bD90aGlzLiREKyh5LXRoaXMuJFcpOnk7aWYoTz09PWl8fE89PT1jKXt2YXIgWD10aGlzLmNsb25lKCkuc2V0KHUsMSk7WC4kZFt6XSgkKSxYLmluaXQoKSx0aGlzLiRkPVguc2V0KHUsTWF0aC5taW4odGhpcy4kRCxYLmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIHomJnRoaXMuJGRbel0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LGIuc2V0PWZ1bmN0aW9uKGcseSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KGcseSl9LGIuZ2V0PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzW1MucChnKV0oKX0sYi5hZGQ9ZnVuY3Rpb24oZyx5KXt2YXIgTSxPPXRoaXM7Zz1OdW1iZXIoZyk7dmFyIFI9Uy5wKHkpLHo9ZnVuY3Rpb24oail7dmFyIFc9QihPKTtyZXR1cm4gUy53KFcuZGF0ZShXLmRhdGUoKStNYXRoLnJvdW5kKGoqZykpLE8pfTtpZihSPT09aSlyZXR1cm4gdGhpcy5zZXQoaSx0aGlzLiRNK2cpO2lmKFI9PT1jKXJldHVybiB0aGlzLnNldChjLHRoaXMuJHkrZyk7aWYoUj09PWwpcmV0dXJuIHooMSk7aWYoUj09PW4pcmV0dXJuIHooNyk7dmFyICQ9KE09e30sTVt0XT1tLE1bZV09cyxNW3JdPTFlMyxNKVtSXXx8MSxYPXRoaXMuJGQuZ2V0VGltZSgpK2cqJDtyZXR1cm4gUy53KFgsdGhpcyl9LGIuc3VidHJhY3Q9ZnVuY3Rpb24oZyx5KXtyZXR1cm4gdGhpcy5hZGQoLTEqZyx5KX0sYi5mb3JtYXQ9ZnVuY3Rpb24oZyl7dmFyIHk9dGhpcyxNPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTS5pbnZhbGlkRGF0ZXx8ZDt2YXIgTz1nfHwiWVlZWS1NTS1ERFRISDptbTpzc1oiLFI9Uy56KHRoaXMpLHo9dGhpcy4kSCwkPXRoaXMuJG0sWD10aGlzLiRNLGo9TS53ZWVrZGF5cyxXPU0ubW9udGhzLFQ9TS5tZXJpZGllbSx4PWZ1bmN0aW9uKFosVixLLFkpe3JldHVybiBaJiYoWltWXXx8Wih5LE8pKXx8S1tWXS5zbGljZSgwLFkpfSxJPWZ1bmN0aW9uKFope3JldHVybiBTLnMoeiUxMnx8MTIsWiwiMCIpfSxIPVR8fGZ1bmN0aW9uKFosVixLKXt2YXIgWT1aPDEyPyJBTSI6IlBNIjtyZXR1cm4gSz9ZLnRvTG93ZXJDYXNlKCk6WX07cmV0dXJuIE8ucmVwbGFjZSh3LGZ1bmN0aW9uKFosVil7cmV0dXJuIFZ8fGZ1bmN0aW9uKEspe3N3aXRjaChLKXtjYXNlIllZIjpyZXR1cm4gU3RyaW5nKHkuJHkpLnNsaWNlKC0yKTtjYXNlIllZWVkiOnJldHVybiBTLnMoeS4keSw0LCIwIik7Y2FzZSJNIjpyZXR1cm4gWCsxO2Nhc2UiTU0iOnJldHVybiBTLnMoWCsxLDIsIjAiKTtjYXNlIk1NTSI6cmV0dXJuIHgoTS5tb250aHNTaG9ydCxYLFcsMyk7Y2FzZSJNTU1NIjpyZXR1cm4geChXLFgpO2Nhc2UiRCI6cmV0dXJuIHkuJEQ7Y2FzZSJERCI6cmV0dXJuIFMucyh5LiRELDIsIjAiKTtjYXNlImQiOnJldHVybiBTdHJpbmcoeS4kVyk7Y2FzZSJkZCI6cmV0dXJuIHgoTS53ZWVrZGF5c01pbix5LiRXLGosMik7Y2FzZSJkZGQiOnJldHVybiB4KE0ud2Vla2RheXNTaG9ydCx5LiRXLGosMyk7Y2FzZSJkZGRkIjpyZXR1cm4galt5LiRXXTtjYXNlIkgiOnJldHVybiBTdHJpbmcoeik7Y2FzZSJISCI6cmV0dXJuIFMucyh6LDIsIjAiKTtjYXNlImgiOnJldHVybiBJKDEpO2Nhc2UiaGgiOnJldHVybiBJKDIpO2Nhc2UiYSI6cmV0dXJuIEgoeiwkLCEwKTtjYXNlIkEiOnJldHVybiBIKHosJCwhMSk7Y2FzZSJtIjpyZXR1cm4gU3RyaW5nKCQpO2Nhc2UibW0iOnJldHVybiBTLnMoJCwyLCIwIik7Y2FzZSJzIjpyZXR1cm4gU3RyaW5nKHkuJHMpO2Nhc2Uic3MiOnJldHVybiBTLnMoeS4kcywyLCIwIik7Y2FzZSJTU1MiOnJldHVybiBTLnMoeS4kbXMsMywiMCIpO2Nhc2UiWiI6cmV0dXJuIFJ9cmV0dXJuIG51bGx9KFopfHxSLnJlcGxhY2UoIjoiLCIiKX0pfSxiLnV0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfSxiLmRpZmY9ZnVuY3Rpb24oZyx5LE0pe3ZhciBPLFI9dGhpcyx6PVMucCh5KSwkPUIoZyksWD0oJC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSptLGo9dGhpcy0kLFc9ZnVuY3Rpb24oKXtyZXR1cm4gUy5tKFIsJCl9O3N3aXRjaCh6KXtjYXNlIGM6Tz1XKCkvMTI7YnJlYWs7Y2FzZSBpOk89VygpO2JyZWFrO2Nhc2UgZjpPPVcoKS8zO2JyZWFrO2Nhc2UgbjpPPShqLVgpLzYwNDhlNTticmVhaztjYXNlIGw6Tz0oai1YKS84NjRlNTticmVhaztjYXNlIGU6Tz1qL3M7YnJlYWs7Y2FzZSB0Ok89ai9tO2JyZWFrO2Nhc2UgcjpPPWovMWUzO2JyZWFrO2RlZmF1bHQ6Tz1qfXJldHVybiBNP086Uy5hKE8pfSxiLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoaSkuJER9LGIuJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBOW3RoaXMuJExdfSxiLmxvY2FsZT1mdW5jdGlvbihnLHkpe2lmKCFnKXJldHVybiB0aGlzLiRMO3ZhciBNPXRoaXMuY2xvbmUoKSxPPVUoZyx5LCEwKTtyZXR1cm4gTyYmKE0uJEw9TyksTX0sYi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBTLncodGhpcy4kZCx0aGlzKX0sYi50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxiLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sYi50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LGIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxwfSgpLHY9Qy5wcm90b3R5cGU7cmV0dXJuIEIucHJvdG90eXBlPXYsW1siJG1zIixvXSxbIiRzIixyXSxbIiRtIix0XSxbIiRIIixlXSxbIiRXIixsXSxbIiRNIixpXSxbIiR5IixjXSxbIiREIix1XV0uZm9yRWFjaChmdW5jdGlvbihwKXt2W3BbMV1dPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLiRnKGIscFswXSxwWzFdKX19KSxCLmV4dGVuZD1mdW5jdGlvbihwLGIpe3JldHVybiBwLiRpfHwocChiLEMsQikscC4kaT0hMCksQn0sQi5sb2NhbGU9VSxCLmlzRGF5anM9RixCLnVuaXg9ZnVuY3Rpb24ocCl7cmV0dXJuIEIoMWUzKnApfSxCLmVuPU5bTF0sQi5Mcz1OLEIucD17fSxCfSl9LHt9XSwzOTI6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSxzKXt0eXBlb2Ygaz09Im9iamVjdCImJkUhPT12b2lkIDA/RS5leHBvcnRzPXMoKToobT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczptfHxzZWxmKS5kYXlqc19wbHVnaW5fY3VzdG9tUGFyc2VGb3JtYXQ9cygpfSkodm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG09e0xUUzoiaDptbTpzcyBBIixMVDoiaDptbSBBIixMOiJNTS9ERC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxzPS8oXFtbXltdKlxdKXwoWy1fOi8uLCgpXHNdKyl8KEF8YXxZWVlZfFlZP3xNTT9NP00/fERvfEREP3xoaD98SEg/fG1tP3xzcz98U3sxLDN9fHp8Wlo/KS9nLG89L1xkXGQvLHI9L1xkXGQ/Lyx0PS9cZCpbXi1fOi8sKClcc1xkXSsvLGU9e30sbD1mdW5jdGlvbihoKXtyZXR1cm4oaD0raCkrKGg+Njg/MTkwMDoyZTMpfSxuPWZ1bmN0aW9uKGgpe3JldHVybiBmdW5jdGlvbih3KXt0aGlzW2hdPSt3fX0saT1bL1srLV1cZFxkOj8oXGRcZCk/fFovLGZ1bmN0aW9uKGgpeyh0aGlzLnpvbmV8fCh0aGlzLnpvbmU9e30pKS5vZmZzZXQ9ZnVuY3Rpb24odyl7aWYoIXd8fHc9PT0iWiIpcmV0dXJuIDA7dmFyIF89dy5tYXRjaCgvKFsrLV18XGRcZCkvZyksQT02MCpfWzFdKygrX1syXXx8MCk7cmV0dXJuIEE9PT0wPzA6X1swXT09PSIrIj8tQTpBfShoKX1dLGY9ZnVuY3Rpb24oaCl7dmFyIHc9ZVtoXTtyZXR1cm4gdyYmKHcuaW5kZXhPZj93Oncucy5jb25jYXQody5mKSl9LGM9ZnVuY3Rpb24oaCx3KXt2YXIgXyxBPWUubWVyaWRpZW07aWYoQSl7Zm9yKHZhciBQPTE7UDw9MjQ7UCs9MSlpZihoLmluZGV4T2YoQShQLDAsdykpPi0xKXtfPVA+MTI7YnJlYWt9fWVsc2UgXz1oPT09KHc/InBtIjoiUE0iKTtyZXR1cm4gX30sdT17QTpbdCxmdW5jdGlvbihoKXt0aGlzLmFmdGVybm9vbj1jKGgsITEpfV0sYTpbdCxmdW5jdGlvbihoKXt0aGlzLmFmdGVybm9vbj1jKGgsITApfV0sUzpbL1xkLyxmdW5jdGlvbihoKXt0aGlzLm1pbGxpc2Vjb25kcz0xMDAqK2h9XSxTUzpbbyxmdW5jdGlvbihoKXt0aGlzLm1pbGxpc2Vjb25kcz0xMCoraH1dLFNTUzpbL1xkezN9LyxmdW5jdGlvbihoKXt0aGlzLm1pbGxpc2Vjb25kcz0raH1dLHM6W3Isbigic2Vjb25kcyIpXSxzczpbcixuKCJzZWNvbmRzIildLG06W3IsbigibWludXRlcyIpXSxtbTpbcixuKCJtaW51dGVzIildLEg6W3IsbigiaG91cnMiKV0saDpbcixuKCJob3VycyIpXSxISDpbcixuKCJob3VycyIpXSxoaDpbcixuKCJob3VycyIpXSxEOltyLG4oImRheSIpXSxERDpbbyxuKCJkYXkiKV0sRG86W3QsZnVuY3Rpb24oaCl7dmFyIHc9ZS5vcmRpbmFsLF89aC5tYXRjaCgvXGQrLyk7aWYodGhpcy5kYXk9X1swXSx3KWZvcih2YXIgQT0xO0E8PTMxO0ErPTEpdyhBKS5yZXBsYWNlKC9cW3xcXS9nLCIiKT09PWgmJih0aGlzLmRheT1BKX1dLE06W3IsbigibW9udGgiKV0sTU06W28sbigibW9udGgiKV0sTU1NOlt0LGZ1bmN0aW9uKGgpe3ZhciB3PWYoIm1vbnRocyIpLF89KGYoIm1vbnRoc1Nob3J0Iil8fHcubWFwKGZ1bmN0aW9uKEEpe3JldHVybiBBLnNsaWNlKDAsMyl9KSkuaW5kZXhPZihoKSsxO2lmKF88MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD1fJTEyfHxffV0sTU1NTTpbdCxmdW5jdGlvbihoKXt2YXIgdz1mKCJtb250aHMiKS5pbmRleE9mKGgpKzE7aWYodzwxKXRocm93IG5ldyBFcnJvcjt0aGlzLm1vbnRoPXclMTJ8fHd9XSxZOlsvWystXT9cZCsvLG4oInllYXIiKV0sWVk6W28sZnVuY3Rpb24oaCl7dGhpcy55ZWFyPWwoaCl9XSxZWVlZOlsvXGR7NH0vLG4oInllYXIiKV0sWjppLFpaOml9O2Z1bmN0aW9uIGQoaCl7dmFyIHcsXzt3PWgsXz1lJiZlLmZvcm1hdHM7Zm9yKHZhciBBPShoPXcucmVwbGFjZSgvKFxbW15cXV0rXSl8KExUUz98bHsxLDR9fEx7MSw0fSkvZyxmdW5jdGlvbihCLFMsQyl7dmFyIHY9QyYmQy50b1VwcGVyQ2FzZSgpO3JldHVybiBTfHxfW0NdfHxtW0NdfHxfW3ZdLnJlcGxhY2UoLyhcW1teXF1dK10pfChNTU1NfE1NfEREfGRkZGQpL2csZnVuY3Rpb24ocCxiLGcpe3JldHVybiBifHxnLnNsaWNlKDEpfSl9KSkubWF0Y2gocyksUD1BLmxlbmd0aCxMPTA7TDxQO0wrPTEpe3ZhciBOPUFbTF0sRD11W05dLEY9RCYmRFswXSxVPUQmJkRbMV07QVtMXT1VP3tyZWdleDpGLHBhcnNlcjpVfTpOLnJlcGxhY2UoL15cW3xcXSQvZywiIil9cmV0dXJuIGZ1bmN0aW9uKEIpe2Zvcih2YXIgUz17fSxDPTAsdj0wO0M8UDtDKz0xKXt2YXIgcD1BW0NdO2lmKHR5cGVvZiBwPT0ic3RyaW5nIil2Kz1wLmxlbmd0aDtlbHNle3ZhciBiPXAucmVnZXgsZz1wLnBhcnNlcix5PUIuc2xpY2UodiksTT1iLmV4ZWMoeSlbMF07Zy5jYWxsKFMsTSksQj1CLnJlcGxhY2UoTSwiIil9fXJldHVybiBmdW5jdGlvbihPKXt2YXIgUj1PLmFmdGVybm9vbjtpZihSIT09dm9pZCAwKXt2YXIgej1PLmhvdXJzO1I/ejwxMiYmKE8uaG91cnMrPTEyKTp6PT09MTImJihPLmhvdXJzPTApLGRlbGV0ZSBPLmFmdGVybm9vbn19KFMpLFN9fXJldHVybiBmdW5jdGlvbihoLHcsXyl7Xy5wLmN1c3RvbVBhcnNlRm9ybWF0PSEwLGgmJmgucGFyc2VUd29EaWdpdFllYXImJihsPWgucGFyc2VUd29EaWdpdFllYXIpO3ZhciBBPXcucHJvdG90eXBlLFA9QS5wYXJzZTtBLnBhcnNlPWZ1bmN0aW9uKEwpe3ZhciBOPUwuZGF0ZSxEPUwudXRjLEY9TC5hcmdzO3RoaXMuJHU9RDt2YXIgVT1GWzFdO2lmKHR5cGVvZiBVPT0ic3RyaW5nIil7dmFyIEI9RlsyXT09PSEwLFM9RlszXT09PSEwLEM9Qnx8Uyx2PUZbMl07UyYmKHY9RlsyXSksZT10aGlzLiRsb2NhbGUoKSwhQiYmdiYmKGU9Xy5Mc1t2XSksdGhpcy4kZD1mdW5jdGlvbih5LE0sTyl7dHJ5e2lmKFsieCIsIlgiXS5pbmRleE9mKE0pPi0xKXJldHVybiBuZXcgRGF0ZSgoTT09PSJYIj8xZTM6MSkqeSk7dmFyIFI9ZChNKSh5KSx6PVIueWVhciwkPVIubW9udGgsWD1SLmRheSxqPVIuaG91cnMsVz1SLm1pbnV0ZXMsVD1SLnNlY29uZHMseD1SLm1pbGxpc2Vjb25kcyxJPVIuem9uZSxIPW5ldyBEYXRlLFo9WHx8KHp8fCQ/MTpILmdldERhdGUoKSksVj16fHxILmdldEZ1bGxZZWFyKCksSz0wO3omJiEkfHwoSz0kPjA/JC0xOkguZ2V0TW9udGgoKSk7dmFyIFk9anx8MCxKPVd8fDAscT1UfHwwLEc9eHx8MDtyZXR1cm4gST9uZXcgRGF0ZShEYXRlLlVUQyhWLEssWixZLEoscSxHKzYwKkkub2Zmc2V0KjFlMykpOk8/bmV3IERhdGUoRGF0ZS5VVEMoVixLLFosWSxKLHEsRykpOm5ldyBEYXRlKFYsSyxaLFksSixxLEcpfWNhdGNoe3JldHVybiBuZXcgRGF0ZSgiIil9fShOLFUsRCksdGhpcy5pbml0KCksdiYmdiE9PSEwJiYodGhpcy4kTD10aGlzLmxvY2FsZSh2KS4kTCksQyYmTiE9dGhpcy5mb3JtYXQoVSkmJih0aGlzLiRkPW5ldyBEYXRlKCIiKSksZT17fX1lbHNlIGlmKFUgaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIHA9VS5sZW5ndGgsYj0xO2I8PXA7Yis9MSl7RlsxXT1VW2ItMV07dmFyIGc9Xy5hcHBseSh0aGlzLEYpO2lmKGcuaXNWYWxpZCgpKXt0aGlzLiRkPWcuJGQsdGhpcy4kTD1nLiRMLHRoaXMuaW5pdCgpO2JyZWFrfWI9PT1wJiYodGhpcy4kZD1uZXcgRGF0ZSgiIikpfWVsc2UgUC5jYWxsKHRoaXMsTCl9fX0pfSx7fV0sMzkzOltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0scyl7dHlwZW9mIGs9PSJvYmplY3QiJiZFIT09dm9pZCAwP0UuZXhwb3J0cz1zKCk6KG09dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6bXx8c2VsZikuZGF5anNfcGx1Z2luX3V0Yz1zKCl9KSh2b2lkIDAsZnVuY3Rpb24oKXt2YXIgbT0ibWludXRlIixzPS9bKy1dXGRcZCg/Ojo/XGRcZCk/L2csbz0vKFsrLV18XGRcZCkvZztyZXR1cm4gZnVuY3Rpb24ocix0LGUpe3ZhciBsPXQucHJvdG90eXBlO2UudXRjPWZ1bmN0aW9uKGgpe3ZhciB3PXtkYXRlOmgsdXRjOiEwLGFyZ3M6YXJndW1lbnRzfTtyZXR1cm4gbmV3IHQodyl9LGwudXRjPWZ1bmN0aW9uKGgpe3ZhciB3PWUodGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiEwfSk7cmV0dXJuIGg/dy5hZGQodGhpcy51dGNPZmZzZXQoKSxtKTp3fSxsLmxvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiExfSl9O3ZhciBuPWwucGFyc2U7bC5wYXJzZT1mdW5jdGlvbihoKXtoLnV0YyYmKHRoaXMuJHU9ITApLHRoaXMuJHV0aWxzKCkudShoLiRvZmZzZXQpfHwodGhpcy4kb2Zmc2V0PWguJG9mZnNldCksbi5jYWxsKHRoaXMsaCl9O3ZhciBpPWwuaW5pdDtsLmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLiR1KXt2YXIgaD10aGlzLiRkO3RoaXMuJHk9aC5nZXRVVENGdWxsWWVhcigpLHRoaXMuJE09aC5nZXRVVENNb250aCgpLHRoaXMuJEQ9aC5nZXRVVENEYXRlKCksdGhpcy4kVz1oLmdldFVUQ0RheSgpLHRoaXMuJEg9aC5nZXRVVENIb3VycygpLHRoaXMuJG09aC5nZXRVVENNaW51dGVzKCksdGhpcy4kcz1oLmdldFVUQ1NlY29uZHMoKSx0aGlzLiRtcz1oLmdldFVUQ01pbGxpc2Vjb25kcygpfWVsc2UgaS5jYWxsKHRoaXMpfTt2YXIgZj1sLnV0Y09mZnNldDtsLnV0Y09mZnNldD1mdW5jdGlvbihoLHcpe3ZhciBfPXRoaXMuJHV0aWxzKCkudTtpZihfKGgpKXJldHVybiB0aGlzLiR1PzA6Xyh0aGlzLiRvZmZzZXQpP2YuY2FsbCh0aGlzKTp0aGlzLiRvZmZzZXQ7aWYodHlwZW9mIGg9PSJzdHJpbmciJiYoaD1mdW5jdGlvbihOKXtOPT09dm9pZCAwJiYoTj0iIik7dmFyIEQ9Ti5tYXRjaChzKTtpZighRClyZXR1cm4gbnVsbDt2YXIgRj0oIiIrRFswXSkubWF0Y2gobyl8fFsiLSIsMCwwXSxVPUZbMF0sQj02MCorRlsxXSsgK0ZbMl07cmV0dXJuIEI9PT0wPzA6VT09PSIrIj9COi1CfShoKSk9PT1udWxsKXJldHVybiB0aGlzO3ZhciBBPU1hdGguYWJzKGgpPD0xNj82MCpoOmgsUD10aGlzO2lmKHcpcmV0dXJuIFAuJG9mZnNldD1BLFAuJHU9aD09PTAsUDtpZihoIT09MCl7dmFyIEw9dGhpcy4kdT90aGlzLnRvRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk6LTEqdGhpcy51dGNPZmZzZXQoKTsoUD10aGlzLmxvY2FsKCkuYWRkKEErTCxtKSkuJG9mZnNldD1BLFAuJHguJGxvY2FsT2Zmc2V0PUx9ZWxzZSBQPXRoaXMudXRjKCk7cmV0dXJuIFB9O3ZhciBjPWwuZm9ybWF0O2wuZm9ybWF0PWZ1bmN0aW9uKGgpe3ZhciB3PWh8fCh0aGlzLiR1PyJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjoiIik7cmV0dXJuIGMuY2FsbCh0aGlzLHcpfSxsLnZhbHVlT2Y9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLiR1dGlscygpLnUodGhpcy4kb2Zmc2V0KT8wOnRoaXMuJG9mZnNldCsodGhpcy4keC4kbG9jYWxPZmZzZXR8fHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKSk7cmV0dXJuIHRoaXMuJGQudmFsdWVPZigpLTZlNCpofSxsLmlzVVRDPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLiR1fSxsLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKX0sbC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvVVRDU3RyaW5nKCl9O3ZhciB1PWwudG9EYXRlO2wudG9EYXRlPWZ1bmN0aW9uKGgpe3JldHVybiBoPT09InMiJiZ0aGlzLiRvZmZzZXQ/ZSh0aGlzLmZvcm1hdCgiWVlZWS1NTS1ERCBISDptbTpzczpTU1MiKSkudG9EYXRlKCk6dS5jYWxsKHRoaXMpfTt2YXIgZD1sLmRpZmY7bC5kaWZmPWZ1bmN0aW9uKGgsdyxfKXtpZihoJiZ0aGlzLiR1PT09aC4kdSlyZXR1cm4gZC5jYWxsKHRoaXMsaCx3LF8pO3ZhciBBPXRoaXMubG9jYWwoKSxQPWUoaCkubG9jYWwoKTtyZXR1cm4gZC5jYWxsKEEsUCx3LF8pfX19KX0se31dLDM5NDpbZnVuY3Rpb24oYSxFLGspe2sudXRpbHM9YSgiLi9kZXMvdXRpbHMiKSxrLkNpcGhlcj1hKCIuL2Rlcy9jaXBoZXIiKSxrLkRFUz1hKCIuL2Rlcy9kZXMiKSxrLkNCQz1hKCIuL2Rlcy9jYmMiKSxrLkVERT1hKCIuL2Rlcy9lZGUiKX0seyIuL2Rlcy9jYmMiOjM5NSwiLi9kZXMvY2lwaGVyIjozOTYsIi4vZGVzL2RlcyI6Mzk3LCIuL2Rlcy9lZGUiOjM5OCwiLi9kZXMvdXRpbHMiOjM5OX1dLDM5NTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIm1pbmltYWxpc3RpYy1hc3NlcnQiKSxzPWEoImluaGVyaXRzIiksbz17fTtmdW5jdGlvbiByKHQpe20uZXF1YWwodC5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIGU9MDtlPHRoaXMuaXYubGVuZ3RoO2UrKyl0aGlzLml2W2VdPXRbZV19ay5pbnN0YW50aWF0ZT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGYpe3QuY2FsbCh0aGlzLGYpLHRoaXMuX2NiY0luaXQoKX1zKGUsdCk7Zm9yKHZhciBsPU9iamVjdC5rZXlzKG8pLG49MDtuPGwubGVuZ3RoO24rKyl7dmFyIGk9bFtuXTtlLnByb3RvdHlwZVtpXT1vW2ldfXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbihmKXtyZXR1cm4gbmV3IGUoZil9LGV9LG8uX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPXR9LG8uX3VwZGF0ZT1mdW5jdGlvbih0LGUsbCxuKXt2YXIgaT10aGlzLl9jYmNTdGF0ZSxmPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxjPWkuaXY7aWYodGhpcy50eXBlPT09ImVuY3J5cHQiKXtmb3IodmFyIHU9MDt1PHRoaXMuYmxvY2tTaXplO3UrKyljW3VdXj10W2UrdV07Zm9yKGYuX3VwZGF0ZS5jYWxsKHRoaXMsYywwLGwsbiksdT0wO3U8dGhpcy5ibG9ja1NpemU7dSsrKWNbdV09bFtuK3VdfWVsc2V7Zm9yKGYuX3VwZGF0ZS5jYWxsKHRoaXMsdCxlLGwsbiksdT0wO3U8dGhpcy5ibG9ja1NpemU7dSsrKWxbbit1XV49Y1t1XTtmb3IodT0wO3U8dGhpcy5ibG9ja1NpemU7dSsrKWNbdV09dFtlK3VdfX19LHtpbmhlcml0czo0NDAsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31dLDM5NjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIm1pbmltYWxpc3RpYy1hc3NlcnQiKTtmdW5jdGlvbiBzKG8pe3RoaXMub3B0aW9ucz1vLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPW8ucGFkZGluZyE9PSExfUUuZXhwb3J0cz1zLHMucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIG8ubGVuZ3RoPT09MD9bXTp0aGlzLnR5cGU9PT0iZGVjcnlwdCI/dGhpcy5fdXBkYXRlRGVjcnlwdChvKTp0aGlzLl91cGRhdGVFbmNyeXB0KG8pfSxzLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKG8scil7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZixvLmxlbmd0aC1yKSxlPTA7ZTx0O2UrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitlXT1vW3IrZV07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz10LHR9LHMucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihvLHIpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxvLHIpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LHMucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKG8pe3ZhciByPTAsdD0wLGU9KHRoaXMuYnVmZmVyT2ZmK28ubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwLGw9bmV3IEFycmF5KGUqdGhpcy5ibG9ja1NpemUpO3RoaXMuYnVmZmVyT2ZmIT09MCYmKHIrPXRoaXMuX2J1ZmZlcihvLHIpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYodCs9dGhpcy5fZmx1c2hCdWZmZXIobCx0KSkpO2Zvcih2YXIgbj1vLmxlbmd0aC0oby5sZW5ndGgtcikldGhpcy5ibG9ja1NpemU7cjxuO3IrPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShvLHIsbCx0KSx0Kz10aGlzLmJsb2NrU2l6ZTtmb3IoO3I8by5sZW5ndGg7cisrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPW9bcl07cmV0dXJuIGx9LHMucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKG8pe2Zvcih2YXIgcj0wLHQ9MCxlPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrby5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLGw9bmV3IEFycmF5KGUqdGhpcy5ibG9ja1NpemUpO2U+MDtlLS0pcis9dGhpcy5fYnVmZmVyKG8sciksdCs9dGhpcy5fZmx1c2hCdWZmZXIobCx0KTtyZXR1cm4gcis9dGhpcy5fYnVmZmVyKG8sciksbH0scy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24obyl7dmFyIHIsdDtyZXR1cm4gbyYmKHI9dGhpcy51cGRhdGUobykpLHQ9dGhpcy50eXBlPT09ImVuY3J5cHQiP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHI/ci5jb25jYXQodCk6dH0scy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihvLHIpe2lmKHI9PT0wKXJldHVybiExO2Zvcig7cjxvLmxlbmd0aDspb1tyKytdPTA7cmV0dXJuITB9LHMucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgbz1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxvLDApLG99LHMucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihvKXtyZXR1cm4gb30scy5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe20uZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFyIG89bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIobywwKSx0aGlzLl91bnBhZChvKX19LHsibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sMzk3OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgibWluaW1hbGlzdGljLWFzc2VydCIpLHM9YSgiaW5oZXJpdHMiKSxvPWEoIi4vdXRpbHMiKSxyPWEoIi4vY2lwaGVyIik7ZnVuY3Rpb24gdCgpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBlKG4pe3IuY2FsbCh0aGlzLG4pO3ZhciBpPW5ldyB0O3RoaXMuX2Rlc1N0YXRlPWksdGhpcy5kZXJpdmVLZXlzKGksbi5rZXkpfXMoZSxyKSxFLmV4cG9ydHM9ZSxlLmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IGUobil9O3ZhciBsPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtlLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKG4saSl7bi5rZXlzPW5ldyBBcnJheSgzMiksbS5lcXVhbChpLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIGY9by5yZWFkVUludDMyQkUoaSwwKSxjPW8ucmVhZFVJbnQzMkJFKGksNCk7by5wYzEoZixjLG4udG1wLDApLGY9bi50bXBbMF0sYz1uLnRtcFsxXTtmb3IodmFyIHU9MDt1PG4ua2V5cy5sZW5ndGg7dSs9Mil7dmFyIGQ9bFt1Pj4+MV07Zj1vLnIyOHNobChmLGQpLGM9by5yMjhzaGwoYyxkKSxvLnBjMihmLGMsbi5rZXlzLHUpfX0sZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihuLGksZixjKXt2YXIgdT10aGlzLl9kZXNTdGF0ZSxkPW8ucmVhZFVJbnQzMkJFKG4saSksaD1vLnJlYWRVSW50MzJCRShuLGkrNCk7by5pcChkLGgsdS50bXAsMCksZD11LnRtcFswXSxoPXUudG1wWzFdLHRoaXMudHlwZT09PSJlbmNyeXB0Ij90aGlzLl9lbmNyeXB0KHUsZCxoLHUudG1wLDApOnRoaXMuX2RlY3J5cHQodSxkLGgsdS50bXAsMCksZD11LnRtcFswXSxoPXUudG1wWzFdLG8ud3JpdGVVSW50MzJCRShmLGQsYyksby53cml0ZVVJbnQzMkJFKGYsaCxjKzQpfSxlLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKG4saSl7aWYodGhpcy5wYWRkaW5nPT09ITEpcmV0dXJuITE7Zm9yKHZhciBmPW4ubGVuZ3RoLWksYz1pO2M8bi5sZW5ndGg7YysrKW5bY109ZjtyZXR1cm4hMH0sZS5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKG4pe2lmKHRoaXMucGFkZGluZz09PSExKXJldHVybiBuO2Zvcih2YXIgaT1uW24ubGVuZ3RoLTFdLGY9bi5sZW5ndGgtaTtmPG4ubGVuZ3RoO2YrKyltLmVxdWFsKG5bZl0saSk7cmV0dXJuIG4uc2xpY2UoMCxuLmxlbmd0aC1pKX0sZS5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24obixpLGYsYyx1KXtmb3IodmFyIGQ9aSxoPWYsdz0wO3c8bi5rZXlzLmxlbmd0aDt3Kz0yKXt2YXIgXz1uLmtleXNbd10sQT1uLmtleXNbdysxXTtvLmV4cGFuZChoLG4udG1wLDApLF9ePW4udG1wWzBdLEFePW4udG1wWzFdO3ZhciBQPW8uc3Vic3RpdHV0ZShfLEEpLEw9aDtoPShkXm8ucGVybXV0ZShQKSk+Pj4wLGQ9TH1vLnJpcChoLGQsYyx1KX0sZS5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24obixpLGYsYyx1KXtmb3IodmFyIGQ9ZixoPWksdz1uLmtleXMubGVuZ3RoLTI7dz49MDt3LT0yKXt2YXIgXz1uLmtleXNbd10sQT1uLmtleXNbdysxXTtvLmV4cGFuZChkLG4udG1wLDApLF9ePW4udG1wWzBdLEFePW4udG1wWzFdO3ZhciBQPW8uc3Vic3RpdHV0ZShfLEEpLEw9ZDtkPShoXm8ucGVybXV0ZShQKSk+Pj4wLGg9TH1vLnJpcChkLGgsYyx1KX19LHsiLi9jaXBoZXIiOjM5NiwiLi91dGlscyI6Mzk5LGluaGVyaXRzOjQ0MCwibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sMzk4OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgibWluaW1hbGlzdGljLWFzc2VydCIpLHM9YSgiaW5oZXJpdHMiKSxvPWEoIi4vY2lwaGVyIikscj1hKCIuL2RlcyIpO2Z1bmN0aW9uIHQobCxuKXttLmVxdWFsKG4ubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgaT1uLnNsaWNlKDAsOCksZj1uLnNsaWNlKDgsMTYpLGM9bi5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPWw9PT0iZW5jcnlwdCI/W3IuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6aX0pLHIuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6Zn0pLHIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6Y30pXTpbci5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpjfSksci5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpmfSksci5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTppfSldfWZ1bmN0aW9uIGUobCl7by5jYWxsKHRoaXMsbCk7dmFyIG49bmV3IHQodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPW59cyhlLG8pLEUuZXhwb3J0cz1lLGUuY3JlYXRlPWZ1bmN0aW9uKGwpe3JldHVybiBuZXcgZShsKX0sZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihsLG4saSxmKXt2YXIgYz10aGlzLl9lZGVTdGF0ZTtjLmNpcGhlcnNbMF0uX3VwZGF0ZShsLG4saSxmKSxjLmNpcGhlcnNbMV0uX3VwZGF0ZShpLGYsaSxmKSxjLmNpcGhlcnNbMl0uX3VwZGF0ZShpLGYsaSxmKX0sZS5wcm90b3R5cGUuX3BhZD1yLnByb3RvdHlwZS5fcGFkLGUucHJvdG90eXBlLl91bnBhZD1yLnByb3RvdHlwZS5fdW5wYWR9LHsiLi9jaXBoZXIiOjM5NiwiLi9kZXMiOjM5Nyxpbmhlcml0czo0NDAsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31dLDM5OTpbZnVuY3Rpb24oYSxFLGspe2sucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHIsdCl7cmV0dXJuKHJbMCt0XTw8MjR8clsxK3RdPDwxNnxyWzIrdF08PDh8clszK3RdKT4+PjB9LGsud3JpdGVVSW50MzJCRT1mdW5jdGlvbihyLHQsZSl7clswK2VdPXQ+Pj4yNCxyWzErZV09dD4+PjE2JjI1NSxyWzIrZV09dD4+PjgmMjU1LHJbMytlXT0yNTUmdH0say5pcD1mdW5jdGlvbihyLHQsZSxsKXtmb3IodmFyIG49MCxpPTAsZj02O2Y+PTA7Zi09Mil7Zm9yKHZhciBjPTA7Yzw9MjQ7Yys9OCluPDw9MSxufD10Pj4+YytmJjE7Zm9yKGM9MDtjPD0yNDtjKz04KW48PD0xLG58PXI+Pj5jK2YmMX1mb3IoZj02O2Y+PTA7Zi09Mil7Zm9yKGM9MTtjPD0yNTtjKz04KWk8PD0xLGl8PXQ+Pj5jK2YmMTtmb3IoYz0xO2M8PTI1O2MrPTgpaTw8PTEsaXw9cj4+PmMrZiYxfWVbbCswXT1uPj4+MCxlW2wrMV09aT4+PjB9LGsucmlwPWZ1bmN0aW9uKHIsdCxlLGwpe2Zvcih2YXIgbj0wLGk9MCxmPTA7Zjw0O2YrKylmb3IodmFyIGM9MjQ7Yz49MDtjLT04KW48PD0xLG58PXQ+Pj5jK2YmMSxuPDw9MSxufD1yPj4+YytmJjE7Zm9yKGY9NDtmPDg7ZisrKWZvcihjPTI0O2M+PTA7Yy09OClpPDw9MSxpfD10Pj4+YytmJjEsaTw8PTEsaXw9cj4+PmMrZiYxO2VbbCswXT1uPj4+MCxlW2wrMV09aT4+PjB9LGsucGMxPWZ1bmN0aW9uKHIsdCxlLGwpe2Zvcih2YXIgbj0wLGk9MCxmPTc7Zj49NTtmLS0pe2Zvcih2YXIgYz0wO2M8PTI0O2MrPTgpbjw8PTEsbnw9dD4+YytmJjE7Zm9yKGM9MDtjPD0yNDtjKz04KW48PD0xLG58PXI+PmMrZiYxfWZvcihjPTA7Yzw9MjQ7Yys9OCluPDw9MSxufD10Pj5jK2YmMTtmb3IoZj0xO2Y8PTM7ZisrKXtmb3IoYz0wO2M8PTI0O2MrPTgpaTw8PTEsaXw9dD4+YytmJjE7Zm9yKGM9MDtjPD0yNDtjKz04KWk8PD0xLGl8PXI+PmMrZiYxfWZvcihjPTA7Yzw9MjQ7Yys9OClpPDw9MSxpfD1yPj5jK2YmMTtlW2wrMF09bj4+PjAsZVtsKzFdPWk+Pj4wfSxrLnIyOHNobD1mdW5jdGlvbihyLHQpe3JldHVybiByPDx0JjI2ODQzNTQ1NXxyPj4+MjgtdH07dmFyIG09WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07ay5wYzI9ZnVuY3Rpb24ocix0LGUsbCl7Zm9yKHZhciBuPTAsaT0wLGY9bS5sZW5ndGg+Pj4xLGM9MDtjPGY7YysrKW48PD0xLG58PXI+Pj5tW2NdJjE7Zm9yKGM9ZjtjPG0ubGVuZ3RoO2MrKylpPDw9MSxpfD10Pj4+bVtjXSYxO2VbbCswXT1uPj4+MCxlW2wrMV09aT4+PjB9LGsuZXhwYW5kPWZ1bmN0aW9uKHIsdCxlKXt2YXIgbD0wLG49MDtsPSgxJnIpPDw1fHI+Pj4yNztmb3IodmFyIGk9MjM7aT49MTU7aS09NClsPDw9NixsfD1yPj4+aSY2Mztmb3IoaT0xMTtpPj0zO2ktPTQpbnw9cj4+PmkmNjMsbjw8PTY7bnw9KDMxJnIpPDwxfHI+Pj4zMSx0W2UrMF09bD4+PjAsdFtlKzFdPW4+Pj4wfTt2YXIgcz1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtrLnN1YnN0aXR1dGU9ZnVuY3Rpb24ocix0KXtmb3IodmFyIGU9MCxsPTA7bDw0O2wrKyllPDw9NCxlfD1zWzY0KmwrKHI+Pj4xOC02KmwmNjMpXTtmb3IobD0wO2w8NDtsKyspZTw8PTQsZXw9c1syNTYrNjQqbCsodD4+PjE4LTYqbCY2MyldO3JldHVybiBlPj4+MH07dmFyIG89WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO2sucGVybXV0ZT1mdW5jdGlvbihyKXtmb3IodmFyIHQ9MCxlPTA7ZTxvLmxlbmd0aDtlKyspdDw8PTEsdHw9cj4+Pm9bZV0mMTtyZXR1cm4gdD4+PjB9LGsucGFkU3BsaXQ9ZnVuY3Rpb24ocix0LGUpe2Zvcih2YXIgbD1yLnRvU3RyaW5nKDIpO2wubGVuZ3RoPHQ7KWw9IjAiK2w7Zm9yKHZhciBuPVtdLGk9MDtpPHQ7aSs9ZSluLnB1c2gobC5zbGljZShpLGkrZSkpO3JldHVybiBuLmpvaW4oIiAiKX19LHt9XSw0MDA6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIHM9YSgiLi9saWIvZ2VuZXJhdGVQcmltZSIpLG89YSgiLi9saWIvcHJpbWVzLmpzb24iKSxyPWEoIi4vbGliL2RoIiksdD17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O2suRGlmZmllSGVsbG1hbkdyb3VwPWsuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWsuZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbihlKXt2YXIgbD1uZXcgbShvW2VdLnByaW1lLCJoZXgiKSxuPW5ldyBtKG9bZV0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IHIobCxuKX0say5jcmVhdGVEaWZmaWVIZWxsbWFuPWsuRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBlKGwsbixpLGYpe3JldHVybiBtLmlzQnVmZmVyKG4pfHx0W25dPT09dm9pZCAwP2UobCwiYmluYXJ5IixuLGkpOihuPW58fCJiaW5hcnkiLGY9Znx8ImJpbmFyeSIsaT1pfHxuZXcgbShbMl0pLG0uaXNCdWZmZXIoaSl8fChpPW5ldyBtKGksZikpLHR5cGVvZiBsPT0ibnVtYmVyIj9uZXcgcihzKGwsaSksaSwhMCk6KG0uaXNCdWZmZXIobCl8fChsPW5ldyBtKGwsbikpLG5ldyByKGwsaSwhMCkpKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoImJ1ZmZlciIpLkJ1ZmZlcil9LHsiLi9saWIvZGgiOjQwMSwiLi9saWIvZ2VuZXJhdGVQcmltZSI6NDAyLCIuL2xpYi9wcmltZXMuanNvbiI6NDAzLGJ1ZmZlcjoyMjB9XSw0MDE6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIHM9YSgiYm4uanMiKSxvPW5ldyhhKCJtaWxsZXItcmFiaW4iKSkscj1uZXcgcygyNCksdD1uZXcgcygxMSksZT1uZXcgcygxMCksbD1uZXcgcygzKSxuPW5ldyBzKDcpLGk9YSgiLi9nZW5lcmF0ZVByaW1lIiksZj1hKCJyYW5kb21ieXRlcyIpO2Z1bmN0aW9uIGMoXyxBKXtyZXR1cm4gQT1BfHwidXRmOCIsbS5pc0J1ZmZlcihfKXx8KF89bmV3IG0oXyxBKSksdGhpcy5fcHViPW5ldyBzKF8pLHRoaXN9ZnVuY3Rpb24gdShfLEEpe3JldHVybiBBPUF8fCJ1dGY4IixtLmlzQnVmZmVyKF8pfHwoXz1uZXcgbShfLEEpKSx0aGlzLl9wcml2PW5ldyBzKF8pLHRoaXN9RS5leHBvcnRzPWg7dmFyIGQ9e307ZnVuY3Rpb24gaChfLEEsUCl7dGhpcy5zZXRHZW5lcmF0b3IoQSksdGhpcy5fX3ByaW1lPW5ldyBzKF8pLHRoaXMuX3ByaW1lPXMubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPV8ubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxQPyh0aGlzLnNldFB1YmxpY0tleT1jLHRoaXMuc2V0UHJpdmF0ZUtleT11KTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiB3KF8sQSl7dmFyIFA9bmV3IG0oXy50b0FycmF5KCkpO3JldHVybiBBP1AudG9TdHJpbmcoQSk6UH1PYmplY3QuZGVmaW5lUHJvcGVydHkoaC5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHRoaXMuX3ByaW1lQ29kZSE9Im51bWJlciImJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24oXyxBKXt2YXIgUD1BLnRvU3RyaW5nKCJoZXgiKSxMPVtQLF8udG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYoTCBpbiBkKXJldHVybiBkW0xdO3ZhciBOLEQ9MDtpZihfLmlzRXZlbigpfHwhaS5zaW1wbGVTaWV2ZXx8IWkuZmVybWF0VGVzdChfKXx8IW8udGVzdChfKSlyZXR1cm4gRCs9MSxEKz1QPT09IjAyInx8UD09PSIwNSI/ODo0LGRbTF09RCxEO3N3aXRjaChvLnRlc3QoXy5zaHJuKDEpKXx8KEQrPTIpLFApe2Nhc2UiMDIiOl8ubW9kKHIpLmNtcCh0KSYmKEQrPTgpO2JyZWFrO2Nhc2UiMDUiOihOPV8ubW9kKGUpKS5jbXAobCkmJk4uY21wKG4pJiYoRCs9OCk7YnJlYWs7ZGVmYXVsdDpEKz00fXJldHVybiBkW0xdPUQsRH0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksaC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBzKGYodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxoLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKF8pe3ZhciBBPShfPShfPW5ldyBzKF8pKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksUD1uZXcgbShBLnRvQXJyYXkoKSksTD10aGlzLmdldFByaW1lKCk7aWYoUC5sZW5ndGg8TC5sZW5ndGgpe3ZhciBOPW5ldyBtKEwubGVuZ3RoLVAubGVuZ3RoKTtOLmZpbGwoMCksUD1tLmNvbmNhdChbTixQXSl9cmV0dXJuIFB9LGgucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihfKXtyZXR1cm4gdyh0aGlzLl9wdWIsXyl9LGgucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oXyl7cmV0dXJuIHcodGhpcy5fcHJpdixfKX0saC5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oXyl7cmV0dXJuIHcodGhpcy5fX3ByaW1lLF8pfSxoLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oXyl7cmV0dXJuIHcodGhpcy5fZ2VuLF8pfSxoLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oXyxBKXtyZXR1cm4gQT1BfHwidXRmOCIsbS5pc0J1ZmZlcihfKXx8KF89bmV3IG0oXyxBKSksdGhpcy5fX2dlbj1fLHRoaXMuX2dlbj1uZXcgcyhfKSx0aGlzfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiYnVmZmVyIikuQnVmZmVyKX0seyIuL2dlbmVyYXRlUHJpbWUiOjQwMiwiYm4uanMiOjQwNCxidWZmZXI6MjIwLCJtaWxsZXItcmFiaW4iOjQ1MSxyYW5kb21ieXRlczo0NzV9XSw0MDI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJyYW5kb21ieXRlcyIpO0UuZXhwb3J0cz1fLF8uc2ltcGxlU2lldmU9aCxfLmZlcm1hdFRlc3Q9dzt2YXIgcz1hKCJibi5qcyIpLG89bmV3IHMoMjQpLHI9bmV3KGEoIm1pbGxlci1yYWJpbiIpKSx0PW5ldyBzKDEpLGU9bmV3IHMoMiksbD1uZXcgcyg1KSxuPShuZXcgcygxNiksbmV3IHMoOCksbmV3IHMoMTApKSxpPW5ldyBzKDMpLGY9KG5ldyBzKDcpLG5ldyBzKDExKSksYz1uZXcgcyg0KSx1PShuZXcgcygxMiksbnVsbCk7ZnVuY3Rpb24gZCgpe2lmKHUhPT1udWxsKXJldHVybiB1O3ZhciBBPVtdO0FbMF09Mjtmb3IodmFyIFA9MSxMPTM7TDwxMDQ4NTc2O0wrPTIpe2Zvcih2YXIgTj1NYXRoLmNlaWwoTWF0aC5zcXJ0KEwpKSxEPTA7RDxQJiZBW0RdPD1OJiZMJUFbRF0hPTA7RCsrKTtQIT09RCYmQVtEXTw9Tnx8KEFbUCsrXT1MKX1yZXR1cm4gdT1BLEF9ZnVuY3Rpb24gaChBKXtmb3IodmFyIFA9ZCgpLEw9MDtMPFAubGVuZ3RoO0wrKylpZihBLm1vZG4oUFtMXSk9PT0wKXJldHVybiBBLmNtcG4oUFtMXSk9PT0wO3JldHVybiEwfWZ1bmN0aW9uIHcoQSl7dmFyIFA9cy5tb250KEEpO3JldHVybiBlLnRvUmVkKFApLnJlZFBvdyhBLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpPT09MH1mdW5jdGlvbiBfKEEsUCl7aWYoQTwxNilyZXR1cm4gbmV3IHMoUD09PTJ8fFA9PT01P1sxNDAsMTIzXTpbMTQwLDM5XSk7dmFyIEwsTjtmb3IoUD1uZXcgcyhQKTs7KXtmb3IoTD1uZXcgcyhtKE1hdGguY2VpbChBLzgpKSk7TC5iaXRMZW5ndGgoKT5BOylMLmlzaHJuKDEpO2lmKEwuaXNFdmVuKCkmJkwuaWFkZCh0KSxMLnRlc3RuKDEpfHxMLmlhZGQoZSksUC5jbXAoZSkpe2lmKCFQLmNtcChsKSlmb3IoO0wubW9kKG4pLmNtcChpKTspTC5pYWRkKGMpfWVsc2UgZm9yKDtMLm1vZChvKS5jbXAoZik7KUwuaWFkZChjKTtpZihoKE49TC5zaHJuKDEpKSYmaChMKSYmdyhOKSYmdyhMKSYmci50ZXN0KE4pJiZyLnRlc3QoTCkpcmV0dXJuIEx9fX0seyJibi5qcyI6NDA0LCJtaWxsZXItcmFiaW4iOjQ1MSxyYW5kb21ieXRlczo0NzV9XSw0MDM6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9e21vZHAxOntnZW46IjAyIixwcmltZToiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sbW9kcDI6e2dlbjoiMDIiLHByaW1lOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sbW9kcDU6e2dlbjoiMDIiLHByaW1lOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSxtb2RwMTQ6e2dlbjoiMDIiLHByaW1lOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LG1vZHAxNTp7Z2VuOiIwMiIscHJpbWU6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LG1vZHAxNjp7Z2VuOiIwMiIscHJpbWU6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSxtb2RwMTc6e2dlbjoiMDIiLHByaW1lOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSxtb2RwMTg6e2dlbjoiMDIiLHByaW1lOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fX0se31dLDQwNDpbZnVuY3Rpb24oYSxFLGspe2FyZ3VtZW50c1s0XVsxODRdWzBdLmFwcGx5KGssYXJndW1lbnRzKX0se2J1ZmZlcjoxODgsZHVwOjE4NH1dLDQwNTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWs7bS52ZXJzaW9uPWEoIi4uL3BhY2thZ2UuanNvbiIpLnZlcnNpb24sbS51dGlscz1hKCIuL2VsbGlwdGljL3V0aWxzIiksbS5yYW5kPWEoImJyb3JhbmQiKSxtLmN1cnZlPWEoIi4vZWxsaXB0aWMvY3VydmUiKSxtLmN1cnZlcz1hKCIuL2VsbGlwdGljL2N1cnZlcyIpLG0uZWM9YSgiLi9lbGxpcHRpYy9lYyIpLG0uZWRkc2E9YSgiLi9lbGxpcHRpYy9lZGRzYSIpfSx7Ii4uL3BhY2thZ2UuanNvbiI6NDIxLCIuL2VsbGlwdGljL2N1cnZlIjo0MDgsIi4vZWxsaXB0aWMvY3VydmVzIjo0MTEsIi4vZWxsaXB0aWMvZWMiOjQxMiwiLi9lbGxpcHRpYy9lZGRzYSI6NDE1LCIuL2VsbGlwdGljL3V0aWxzIjo0MTksYnJvcmFuZDoxODd9XSw0MDY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJibi5qcyIpLHM9YSgiLi4vdXRpbHMiKSxvPXMuZ2V0TkFGLHI9cy5nZXRKU0YsdD1zLmFzc2VydDtmdW5jdGlvbiBlKG4saSl7dGhpcy50eXBlPW4sdGhpcy5wPW5ldyBtKGkucCwxNiksdGhpcy5yZWQ9aS5wcmltZT9tLnJlZChpLnByaW1lKTptLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IG0oMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBtKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgbSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPWkubiYmbmV3IG0oaS5uLDE2KSx0aGlzLmc9aS5nJiZ0aGlzLnBvaW50RnJvbUpTT04oaS5nLGkuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBmPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFmfHxmLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIGwobixpKXt0aGlzLmN1cnZlPW4sdGhpcy50eXBlPWksdGhpcy5wcmVjb21wdXRlZD1udWxsfUUuZXhwb3J0cz1lLGUucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxlLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24obixpKXt0KG4ucHJlY29tcHV0ZWQpO3ZhciBmPW4uX2dldERvdWJsZXMoKSxjPW8oaSwxLHRoaXMuX2JpdExlbmd0aCksdT0oMTw8Zi5zdGVwKzEpLShmLnN0ZXAlMj09MD8yOjEpO3UvPTM7dmFyIGQsaCx3PVtdO2ZvcihkPTA7ZDxjLmxlbmd0aDtkKz1mLnN0ZXApe2g9MDtmb3IodmFyIF89ZCtmLnN0ZXAtMTtfPj1kO18tLSloPShoPDwxKStjW19dO3cucHVzaChoKX1mb3IodmFyIEE9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFA9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLEw9dTtMPjA7TC0tKXtmb3IoZD0wO2Q8dy5sZW5ndGg7ZCsrKShoPXdbZF0pPT09TD9QPVAubWl4ZWRBZGQoZi5wb2ludHNbZF0pOmg9PT0tTCYmKFA9UC5taXhlZEFkZChmLnBvaW50c1tkXS5uZWcoKSkpO0E9QS5hZGQoUCl9cmV0dXJuIEEudG9QKCl9LGUucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKG4saSl7dmFyIGY9NCxjPW4uX2dldE5BRlBvaW50cyhmKTtmPWMud25kO2Zvcih2YXIgdT1jLnBvaW50cyxkPW8oaSxmLHRoaXMuX2JpdExlbmd0aCksaD10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksdz1kLmxlbmd0aC0xO3c+PTA7dy0tKXtmb3IodmFyIF89MDt3Pj0wJiZkW3ddPT09MDt3LS0pXysrO2lmKHc+PTAmJl8rKyxoPWguZGJscChfKSx3PDApYnJlYWs7dmFyIEE9ZFt3XTt0KEEhPT0wKSxoPW4udHlwZT09PSJhZmZpbmUiP0E+MD9oLm1peGVkQWRkKHVbQS0xPj4xXSk6aC5taXhlZEFkZCh1Wy1BLTE+PjFdLm5lZygpKTpBPjA/aC5hZGQodVtBLTE+PjFdKTpoLmFkZCh1Wy1BLTE+PjFdLm5lZygpKX1yZXR1cm4gbi50eXBlPT09ImFmZmluZSI/aC50b1AoKTpofSxlLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihuLGksZixjLHUpe3ZhciBkLGgsdyxfPXRoaXMuX3duYWZUMSxBPXRoaXMuX3duYWZUMixQPXRoaXMuX3duYWZUMyxMPTA7Zm9yKGQ9MDtkPGM7ZCsrKXt2YXIgTj0odz1pW2RdKS5fZ2V0TkFGUG9pbnRzKG4pO19bZF09Ti53bmQsQVtkXT1OLnBvaW50c31mb3IoZD1jLTE7ZD49MTtkLT0yKXt2YXIgRD1kLTEsRj1kO2lmKF9bRF09PT0xJiZfW0ZdPT09MSl7dmFyIFU9W2lbRF0sbnVsbCxudWxsLGlbRl1dO2lbRF0ueS5jbXAoaVtGXS55KT09PTA/KFVbMV09aVtEXS5hZGQoaVtGXSksVVsyXT1pW0RdLnRvSigpLm1peGVkQWRkKGlbRl0ubmVnKCkpKTppW0RdLnkuY21wKGlbRl0ueS5yZWROZWcoKSk9PT0wPyhVWzFdPWlbRF0udG9KKCkubWl4ZWRBZGQoaVtGXSksVVsyXT1pW0RdLmFkZChpW0ZdLm5lZygpKSk6KFVbMV09aVtEXS50b0ooKS5taXhlZEFkZChpW0ZdKSxVWzJdPWlbRF0udG9KKCkubWl4ZWRBZGQoaVtGXS5uZWcoKSkpO3ZhciBCPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLFM9cihmW0RdLGZbRl0pO2ZvcihMPU1hdGgubWF4KFNbMF0ubGVuZ3RoLEwpLFBbRF09bmV3IEFycmF5KEwpLFBbRl09bmV3IEFycmF5KEwpLGg9MDtoPEw7aCsrKXt2YXIgQz0wfFNbMF1baF0sdj0wfFNbMV1baF07UFtEXVtoXT1CWzMqKEMrMSkrKHYrMSldLFBbRl1baF09MCxBW0RdPVV9fWVsc2UgUFtEXT1vKGZbRF0sX1tEXSx0aGlzLl9iaXRMZW5ndGgpLFBbRl09byhmW0ZdLF9bRl0sdGhpcy5fYml0TGVuZ3RoKSxMPU1hdGgubWF4KFBbRF0ubGVuZ3RoLEwpLEw9TWF0aC5tYXgoUFtGXS5sZW5ndGgsTCl9dmFyIHA9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGI9dGhpcy5fd25hZlQ0O2ZvcihkPUw7ZD49MDtkLS0pe2Zvcih2YXIgZz0wO2Q+PTA7KXt2YXIgeT0hMDtmb3IoaD0wO2g8YztoKyspYltoXT0wfFBbaF1bZF0sYltoXSE9PTAmJih5PSExKTtpZigheSlicmVhaztnKyssZC0tfWlmKGQ+PTAmJmcrKyxwPXAuZGJscChnKSxkPDApYnJlYWs7Zm9yKGg9MDtoPGM7aCsrKXt2YXIgTT1iW2hdO00hPT0wJiYoTT4wP3c9QVtoXVtNLTE+PjFdOk08MCYmKHc9QVtoXVstTS0xPj4xXS5uZWcoKSkscD13LnR5cGU9PT0iYWZmaW5lIj9wLm1peGVkQWRkKHcpOnAuYWRkKHcpKX19Zm9yKGQ9MDtkPGM7ZCsrKUFbZF09bnVsbDtyZXR1cm4gdT9wOnAudG9QKCl9LGUuQmFzZVBvaW50PWwsbC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxsLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxlLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihuLGkpe249cy50b0FycmF5KG4saSk7dmFyIGY9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoblswXT09PTR8fG5bMF09PT02fHxuWzBdPT09NykmJm4ubGVuZ3RoLTE9PTIqZilyZXR1cm4gblswXT09PTY/dChuW24ubGVuZ3RoLTFdJTI9PTApOm5bMF09PT03JiZ0KG5bbi5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludChuLnNsaWNlKDEsMStmKSxuLnNsaWNlKDErZiwxKzIqZikpO2lmKChuWzBdPT09Mnx8blswXT09PTMpJiZuLmxlbmd0aC0xPT09ZilyZXR1cm4gdGhpcy5wb2ludEZyb21YKG4uc2xpY2UoMSwxK2YpLG5bMF09PT0zKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LGwucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZW5jb2RlKG4sITApfSxsLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKG4pe3ZhciBpPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksZj10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsaSk7cmV0dXJuIG4/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KGYpOls0XS5jb25jYXQoZix0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsaSkpfSxsLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24obixpKXtyZXR1cm4gcy5lbmNvZGUodGhpcy5fZW5jb2RlKGkpLG4pfSxsLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKG4pe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIGk9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBpLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksaS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCxuKSxpLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9aSx0aGlzfSxsLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihuKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgaT10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFpJiZpLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgobi5iaXRMZW5ndGgoKSsxKS9pLnN0ZXApfSxsLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihuLGkpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgZj1bdGhpc10sYz10aGlzLHU9MDt1PGk7dSs9bil7Zm9yKHZhciBkPTA7ZDxuO2QrKyljPWMuZGJsKCk7Zi5wdXNoKGMpfXJldHVybntzdGVwOm4scG9pbnRzOmZ9fSxsLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKG4pe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIGk9W3RoaXNdLGY9KDE8PG4pLTEsYz1mPT09MT9udWxsOnRoaXMuZGJsKCksdT0xO3U8Zjt1KyspaVt1XT1pW3UtMV0uYWRkKGMpO3JldHVybnt3bmQ6bixwb2ludHM6aX19LGwucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGwucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24obil7Zm9yKHZhciBpPXRoaXMsZj0wO2Y8bjtmKyspaT1pLmRibCgpO3JldHVybiBpfX0seyIuLi91dGlscyI6NDE5LCJibi5qcyI6NDIwfV0sNDA3OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vdXRpbHMiKSxzPWEoImJuLmpzIiksbz1hKCJpbmhlcml0cyIpLHI9YSgiLi9iYXNlIiksdD1tLmFzc2VydDtmdW5jdGlvbiBlKG4pe3RoaXMudHdpc3RlZD0oMHxuLmEpIT0xLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYoMHxuLmEpPT0tMSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsci5jYWxsKHRoaXMsImVkd2FyZHMiLG4pLHRoaXMuYT1uZXcgcyhuLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBzKG4uYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgcyhuLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSx0KCF0aGlzLnR3aXN0ZWR8fHRoaXMuYy5mcm9tUmVkKCkuY21wbigxKT09PTApLHRoaXMub25lQz0oMHxuLmMpPT0xfWZ1bmN0aW9uIGwobixpLGYsYyx1KXtyLkJhc2VQb2ludC5jYWxsKHRoaXMsbiwicHJvamVjdGl2ZSIpLGk9PT1udWxsJiZmPT09bnVsbCYmYz09PW51bGw/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgcyhpLDE2KSx0aGlzLnk9bmV3IHMoZiwxNiksdGhpcy56PWM/bmV3IHMoYywxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXUmJm5ldyBzKHUsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfW8oZSxyKSxFLmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5tT25lQT9uLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwobil9LGUucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9uZUM/bjp0aGlzLmMucmVkTXVsKG4pfSxlLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24obixpLGYsYyl7cmV0dXJuIHRoaXMucG9pbnQobixpLGYsYyl9LGUucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24obixpKXsobj1uZXcgcyhuLDE2KSkucmVkfHwobj1uLnRvUmVkKHRoaXMucmVkKSk7dmFyIGY9bi5yZWRTcXIoKSxjPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoZikpLHU9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKGYpKSxkPWMucmVkTXVsKHUucmVkSW52bSgpKSxoPWQucmVkU3FydCgpO2lmKGgucmVkU3FyKCkucmVkU3ViKGQpLmNtcCh0aGlzLnplcm8pIT09MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgdz1oLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihpJiYhd3x8IWkmJncpJiYoaD1oLnJlZE5lZygpKSx0aGlzLnBvaW50KG4saCl9LGUucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24obixpKXsobj1uZXcgcyhuLDE2KSkucmVkfHwobj1uLnRvUmVkKHRoaXMucmVkKSk7dmFyIGY9bi5yZWRTcXIoKSxjPWYucmVkU3ViKHRoaXMuYzIpLHU9Zi5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksZD1jLnJlZE11bCh1LnJlZEludm0oKSk7aWYoZC5jbXAodGhpcy56ZXJvKT09PTApe2lmKGkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLG4pfXZhciBoPWQucmVkU3FydCgpO2lmKGgucmVkU3FyKCkucmVkU3ViKGQpLmNtcCh0aGlzLnplcm8pIT09MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gaC5mcm9tUmVkKCkuaXNPZGQoKSE9PWkmJihoPWgucmVkTmVnKCkpLHRoaXMucG9pbnQoaCxuKX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24obil7aWYobi5pc0luZmluaXR5KCkpcmV0dXJuITA7bi5ub3JtYWxpemUoKTt2YXIgaT1uLngucmVkU3FyKCksZj1uLnkucmVkU3FyKCksYz1pLnJlZE11bCh0aGlzLmEpLnJlZEFkZChmKSx1PXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKGkpLnJlZE11bChmKSkpO3JldHVybiBjLmNtcCh1KT09PTB9LG8obCxyLkJhc2VQb2ludCksZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihuKXtyZXR1cm4gbC5mcm9tSlNPTih0aGlzLG4pfSxlLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihuLGksZixjKXtyZXR1cm4gbmV3IGwodGhpcyxuLGksZixjKX0sbC5mcm9tSlNPTj1mdW5jdGlvbihuLGkpe3JldHVybiBuZXcgbChuLGlbMF0saVsxXSxpWzJdKX0sbC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxsLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5jbXBuKDApPT09MCYmKHRoaXMueS5jbXAodGhpcy56KT09PTB8fHRoaXMuek9uZSYmdGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpPT09MCl9LGwucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksZj10aGlzLnoucmVkU3FyKCk7Zj1mLnJlZElBZGQoZik7dmFyIGM9dGhpcy5jdXJ2ZS5fbXVsQShuKSx1PXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIoaSksZD1jLnJlZEFkZChpKSxoPWQucmVkU3ViKGYpLHc9Yy5yZWRTdWIoaSksXz11LnJlZE11bChoKSxBPWQucmVkTXVsKHcpLFA9dS5yZWRNdWwodyksTD1oLnJlZE11bChkKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChfLEEsTCxQKX0sbC5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgbixpLGYsYyx1LGQsaD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksdz10aGlzLngucmVkU3FyKCksXz10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgQT0oYz10aGlzLmN1cnZlLl9tdWxBKHcpKS5yZWRBZGQoXyk7dGhpcy56T25lPyhuPWgucmVkU3ViKHcpLnJlZFN1YihfKS5yZWRNdWwoQS5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxpPUEucmVkTXVsKGMucmVkU3ViKF8pKSxmPUEucmVkU3FyKCkucmVkU3ViKEEpLnJlZFN1YihBKSk6KHU9dGhpcy56LnJlZFNxcigpLGQ9QS5yZWRTdWIodSkucmVkSVN1Yih1KSxuPWgucmVkU3ViKHcpLnJlZElTdWIoXykucmVkTXVsKGQpLGk9QS5yZWRNdWwoYy5yZWRTdWIoXykpLGY9QS5yZWRNdWwoZCkpfWVsc2UgYz13LnJlZEFkZChfKSx1PXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxkPWMucmVkU3ViKHUpLnJlZFN1Yih1KSxuPXRoaXMuY3VydmUuX211bEMoaC5yZWRJU3ViKGMpKS5yZWRNdWwoZCksaT10aGlzLmN1cnZlLl9tdWxDKGMpLnJlZE11bCh3LnJlZElTdWIoXykpLGY9Yy5yZWRNdWwoZCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobixpLGYpfSxsLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sbC5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihuKXt2YXIgaT10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKG4ueS5yZWRTdWIobi54KSksZj10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKG4ueS5yZWRBZGQobi54KSksYz10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChuLnQpLHU9dGhpcy56LnJlZE11bChuLnoucmVkQWRkKG4ueikpLGQ9Zi5yZWRTdWIoaSksaD11LnJlZFN1YihjKSx3PXUucmVkQWRkKGMpLF89Zi5yZWRBZGQoaSksQT1kLnJlZE11bChoKSxQPXcucmVkTXVsKF8pLEw9ZC5yZWRNdWwoXyksTj1oLnJlZE11bCh3KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChBLFAsTixMKX0sbC5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24obil7dmFyIGksZixjPXRoaXMuei5yZWRNdWwobi56KSx1PWMucmVkU3FyKCksZD10aGlzLngucmVkTXVsKG4ueCksaD10aGlzLnkucmVkTXVsKG4ueSksdz10aGlzLmN1cnZlLmQucmVkTXVsKGQpLnJlZE11bChoKSxfPXUucmVkU3ViKHcpLEE9dS5yZWRBZGQodyksUD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKG4ueC5yZWRBZGQobi55KSkucmVkSVN1YihkKS5yZWRJU3ViKGgpLEw9Yy5yZWRNdWwoXykucmVkTXVsKFApO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KGk9Yy5yZWRNdWwoQSkucmVkTXVsKGgucmVkU3ViKHRoaXMuY3VydmUuX211bEEoZCkpKSxmPV8ucmVkTXVsKEEpKTooaT1jLnJlZE11bChBKS5yZWRNdWwoaC5yZWRTdWIoZCkpLGY9dGhpcy5jdXJ2ZS5fbXVsQyhfKS5yZWRNdWwoQSkpLHRoaXMuY3VydmUucG9pbnQoTCxpLGYpfSxsLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP246bi5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChuKTp0aGlzLl9wcm9qQWRkKG4pfSxsLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMobik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxuKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsbil9LGwucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihuLGksZil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxpXSxbbixmXSwyLCExKX0sbC5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihuLGksZil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxpXSxbbixmXSwyLCEwKX0sbC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKG4pLHRoaXMueT10aGlzLnkucmVkTXVsKG4pLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKG4pKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LGwucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sbC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LGwucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxsLnByb3RvdHlwZS5lcT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcz09PW58fHRoaXMuZ2V0WCgpLmNtcChuLmdldFgoKSk9PT0wJiZ0aGlzLmdldFkoKS5jbXAobi5nZXRZKCkpPT09MH0sbC5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKG4pe3ZhciBpPW4udG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKHRoaXMueC5jbXAoaSk9PT0wKXJldHVybiEwO2Zvcih2YXIgZj1uLmNsb25lKCksYz10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoZi5pYWRkKHRoaXMuY3VydmUubiksZi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihpLnJlZElBZGQoYyksdGhpcy54LmNtcChpKT09PTApcmV0dXJuITB9fSxsLnByb3RvdHlwZS50b1A9bC5wcm90b3R5cGUubm9ybWFsaXplLGwucHJvdG90eXBlLm1peGVkQWRkPWwucHJvdG90eXBlLmFkZH0seyIuLi91dGlscyI6NDE5LCIuL2Jhc2UiOjQwNiwiYm4uanMiOjQyMCxpbmhlcml0czo0NDB9XSw0MDg6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1rO20uYmFzZT1hKCIuL2Jhc2UiKSxtLnNob3J0PWEoIi4vc2hvcnQiKSxtLm1vbnQ9YSgiLi9tb250IiksbS5lZHdhcmRzPWEoIi4vZWR3YXJkcyIpfSx7Ii4vYmFzZSI6NDA2LCIuL2Vkd2FyZHMiOjQwNywiLi9tb250Ijo0MDksIi4vc2hvcnQiOjQxMH1dLDQwOTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImJuLmpzIikscz1hKCJpbmhlcml0cyIpLG89YSgiLi9iYXNlIikscj1hKCIuLi91dGlscyIpO2Z1bmN0aW9uIHQobCl7by5jYWxsKHRoaXMsIm1vbnQiLGwpLHRoaXMuYT1uZXcgbShsLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IG0obC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgbSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBtKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gZShsLG4saSl7by5CYXNlUG9pbnQuY2FsbCh0aGlzLGwsInByb2plY3RpdmUiKSxuPT09bnVsbCYmaT09PW51bGw/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBtKG4sMTYpLHRoaXMuej1uZXcgbShpLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXModCxvKSxFLmV4cG9ydHM9dCx0LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihsKXt2YXIgbj1sLm5vcm1hbGl6ZSgpLngsaT1uLnJlZFNxcigpLGY9aS5yZWRNdWwobikucmVkQWRkKGkucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChuKTtyZXR1cm4gZi5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKGYpPT09MH0scyhlLG8uQmFzZVBvaW50KSx0LnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihsLG4pe3JldHVybiB0aGlzLnBvaW50KHIudG9BcnJheShsLG4pLDEpfSx0LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihsLG4pe3JldHVybiBuZXcgZSh0aGlzLGwsbil9LHQucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24obCl7cmV0dXJuIGUuZnJvbUpTT04odGhpcyxsKX0sZS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGUuZnJvbUpTT049ZnVuY3Rpb24obCxuKXtyZXR1cm4gbmV3IGUobCxuWzBdLG5bMV18fGwub25lKX0sZS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxlLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuei5jbXBuKDApPT09MH0sZS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIGw9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLG49dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLGk9bC5yZWRTdWIobiksZj1sLnJlZE11bChuKSxjPWkucmVkTXVsKG4ucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChpKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGYsYyl9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LGUucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24obCxuKXt2YXIgaT10aGlzLngucmVkQWRkKHRoaXMueiksZj10aGlzLngucmVkU3ViKHRoaXMueiksYz1sLngucmVkQWRkKGwueiksdT1sLngucmVkU3ViKGwueikucmVkTXVsKGkpLGQ9Yy5yZWRNdWwoZiksaD1uLnoucmVkTXVsKHUucmVkQWRkKGQpLnJlZFNxcigpKSx3PW4ueC5yZWRNdWwodS5yZWRJU3ViKGQpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChoLHcpfSxlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24obCl7Zm9yKHZhciBuPWwuY2xvbmUoKSxpPXRoaXMsZj10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksYz1bXTtuLmNtcG4oMCkhPT0wO24uaXVzaHJuKDEpKWMucHVzaChuLmFuZGxuKDEpKTtmb3IodmFyIHU9Yy5sZW5ndGgtMTt1Pj0wO3UtLSljW3VdPT09MD8oaT1pLmRpZmZBZGQoZix0aGlzKSxmPWYuZGJsKCkpOihmPWkuZGlmZkFkZChmLHRoaXMpLGk9aS5kYmwoKSk7cmV0dXJuIGZ9LGUucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LGUucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxlLnByb3RvdHlwZS5lcT1mdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5nZXRYKCkuY21wKGwuZ2V0WCgpKT09PTB9LGUucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sZS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSx7Ii4uL3V0aWxzIjo0MTksIi4vYmFzZSI6NDA2LCJibi5qcyI6NDIwLGluaGVyaXRzOjQ0MH1dLDQxMDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL3V0aWxzIikscz1hKCJibi5qcyIpLG89YSgiaW5oZXJpdHMiKSxyPWEoIi4vYmFzZSIpLHQ9bS5hc3NlcnQ7ZnVuY3Rpb24gZShpKXtyLmNhbGwodGhpcywic2hvcnQiLGkpLHRoaXMuYT1uZXcgcyhpLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHMoaS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKT09PTAsdGhpcy50aHJlZUE9dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKT09PTAsdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShpKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBsKGksZixjLHUpe3IuQmFzZVBvaW50LmNhbGwodGhpcyxpLCJhZmZpbmUiKSxmPT09bnVsbCYmYz09PW51bGw/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBzKGYsMTYpLHRoaXMueT1uZXcgcyhjLDE2KSx1JiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlzLnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIG4oaSxmLGMsdSl7ci5CYXNlUG9pbnQuY2FsbCh0aGlzLGksImphY29iaWFuIiksZj09PW51bGwmJmM9PT1udWxsJiZ1PT09bnVsbD8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IHMoMCkpOih0aGlzLng9bmV3IHMoZiwxNiksdGhpcy55PW5ldyBzKGMsMTYpLHRoaXMuej1uZXcgcyh1LDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfW8oZSxyKSxFLmV4cG9ydHM9ZSxlLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKGkpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiZ0aGlzLnAubW9kbigzKT09PTEpe3ZhciBmLGM7aWYoaS5iZXRhKWY9bmV3IHMoaS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgdT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtmPShmPXVbMF0uY21wKHVbMV0pPDA/dVswXTp1WzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoaS5sYW1iZGEpYz1uZXcgcyhpLmxhbWJkYSwxNik7ZWxzZXt2YXIgZD10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTt0aGlzLmcubXVsKGRbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChmKSk9PT0wP2M9ZFswXTooYz1kWzFdLHQodGhpcy5nLm11bChjKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZikpPT09MCkpfXJldHVybntiZXRhOmYsbGFtYmRhOmMsYmFzaXM6aS5iYXNpcz9pLmJhc2lzLm1hcChmdW5jdGlvbihoKXtyZXR1cm57YTpuZXcgcyhoLmEsMTYpLGI6bmV3IHMoaC5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMoYyl9fX0sZS5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihpKXt2YXIgZj1pPT09dGhpcy5wP3RoaXMucmVkOnMubW9udChpKSxjPW5ldyBzKDIpLnRvUmVkKGYpLnJlZEludm0oKSx1PWMucmVkTmVnKCksZD1uZXcgcygzKS50b1JlZChmKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKGMpO3JldHVyblt1LnJlZEFkZChkKS5mcm9tUmVkKCksdS5yZWRTdWIoZCkuZnJvbVJlZCgpXX0sZS5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihpKXtmb3IodmFyIGYsYyx1LGQsaCx3LF8sQSxQLEw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxOPWksRD10aGlzLm4uY2xvbmUoKSxGPW5ldyBzKDEpLFU9bmV3IHMoMCksQj1uZXcgcygwKSxTPW5ldyBzKDEpLEM9MDtOLmNtcG4oMCkhPT0wOyl7dmFyIHY9RC5kaXYoTik7QT1ELnN1Yih2Lm11bChOKSksUD1CLnN1Yih2Lm11bChGKSk7dmFyIHA9Uy5zdWIodi5tdWwoVSkpO2lmKCF1JiZBLmNtcChMKTwwKWY9Xy5uZWcoKSxjPUYsdT1BLm5lZygpLGQ9UDtlbHNlIGlmKHUmJisrQz09MilicmVhaztfPUEsRD1OLE49QSxCPUYsRj1QLFM9VSxVPXB9aD1BLm5lZygpLHc9UDt2YXIgYj11LnNxcigpLmFkZChkLnNxcigpKTtyZXR1cm4gaC5zcXIoKS5hZGQody5zcXIoKSkuY21wKGIpPj0wJiYoaD1mLHc9YyksdS5uZWdhdGl2ZSYmKHU9dS5uZWcoKSxkPWQubmVnKCkpLGgubmVnYXRpdmUmJihoPWgubmVnKCksdz13Lm5lZygpKSxbe2E6dSxiOmR9LHthOmgsYjp3fV19LGUucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oaSl7dmFyIGY9dGhpcy5lbmRvLmJhc2lzLGM9ZlswXSx1PWZbMV0sZD11LmIubXVsKGkpLmRpdlJvdW5kKHRoaXMubiksaD1jLmIubmVnKCkubXVsKGkpLmRpdlJvdW5kKHRoaXMubiksdz1kLm11bChjLmEpLF89aC5tdWwodS5hKSxBPWQubXVsKGMuYiksUD1oLm11bCh1LmIpO3JldHVybntrMTppLnN1Yih3KS5zdWIoXyksazI6QS5hZGQoUCkubmVnKCl9fSxlLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKGksZil7KGk9bmV3IHMoaSwxNikpLnJlZHx8KGk9aS50b1JlZCh0aGlzLnJlZCkpO3ZhciBjPWkucmVkU3FyKCkucmVkTXVsKGkpLnJlZElBZGQoaS5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLHU9Yy5yZWRTcXJ0KCk7aWYodS5yZWRTcXIoKS5yZWRTdWIoYykuY21wKHRoaXMuemVybykhPT0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBkPXUuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGYmJiFkfHwhZiYmZCkmJih1PXUucmVkTmVnKCkpLHRoaXMucG9pbnQoaSx1KX0sZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oaSl7aWYoaS5pbmYpcmV0dXJuITA7dmFyIGY9aS54LGM9aS55LHU9dGhpcy5hLnJlZE11bChmKSxkPWYucmVkU3FyKCkucmVkTXVsKGYpLnJlZElBZGQodSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiBjLnJlZFNxcigpLnJlZElTdWIoZCkuY21wbigwKT09PTB9LGUucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihpLGYsYyl7Zm9yKHZhciB1PXRoaXMuX2VuZG9XbmFmVDEsZD10aGlzLl9lbmRvV25hZlQyLGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIHc9dGhpcy5fZW5kb1NwbGl0KGZbaF0pLF89aVtoXSxBPV8uX2dldEJldGEoKTt3LmsxLm5lZ2F0aXZlJiYody5rMS5pbmVnKCksXz1fLm5lZyghMCkpLHcuazIubmVnYXRpdmUmJih3LmsyLmluZWcoKSxBPUEubmVnKCEwKSksdVsyKmhdPV8sdVsyKmgrMV09QSxkWzIqaF09dy5rMSxkWzIqaCsxXT13LmsyfWZvcih2YXIgUD10aGlzLl93bmFmTXVsQWRkKDEsdSxkLDIqaCxjKSxMPTA7TDwyKmg7TCsrKXVbTF09bnVsbCxkW0xdPW51bGw7cmV0dXJuIFB9LG8obCxyLkJhc2VQb2ludCksZS5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oaSxmLGMpe3JldHVybiBuZXcgbCh0aGlzLGksZixjKX0sZS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihpLGYpe3JldHVybiBsLmZyb21KU09OKHRoaXMsaSxmKX0sbC5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBpPXRoaXMucHJlY29tcHV0ZWQ7aWYoaSYmaS5iZXRhKXJldHVybiBpLmJldGE7dmFyIGY9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKGkpe3ZhciBjPXRoaXMuY3VydmUsdT1mdW5jdGlvbihkKXtyZXR1cm4gYy5wb2ludChkLngucmVkTXVsKGMuZW5kby5iZXRhKSxkLnkpfTtpLmJldGE9ZixmLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOmkubmFmJiZ7d25kOmkubmFmLnduZCxwb2ludHM6aS5uYWYucG9pbnRzLm1hcCh1KX0sZG91YmxlczppLmRvdWJsZXMmJntzdGVwOmkuZG91Ymxlcy5zdGVwLHBvaW50czppLmRvdWJsZXMucG9pbnRzLm1hcCh1KX19fXJldHVybiBmfX0sbC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sbC5mcm9tSlNPTj1mdW5jdGlvbihpLGYsYyl7dHlwZW9mIGY9PSJzdHJpbmciJiYoZj1KU09OLnBhcnNlKGYpKTt2YXIgdT1pLnBvaW50KGZbMF0sZlsxXSxjKTtpZighZlsyXSlyZXR1cm4gdTtmdW5jdGlvbiBkKHcpe3JldHVybiBpLnBvaW50KHdbMF0sd1sxXSxjKX12YXIgaD1mWzJdO3JldHVybiB1LnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpoLmRvdWJsZXMmJntzdGVwOmguZG91Ymxlcy5zdGVwLHBvaW50czpbdV0uY29uY2F0KGguZG91Ymxlcy5wb2ludHMubWFwKGQpKX0sbmFmOmgubmFmJiZ7d25kOmgubmFmLnduZCxwb2ludHM6W3VdLmNvbmNhdChoLm5hZi5wb2ludHMubWFwKGQpKX19LHV9LGwucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sbC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sbC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGkpe2lmKHRoaXMuaW5mKXJldHVybiBpO2lmKGkuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoaSkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShpKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKHRoaXMueC5jbXAoaS54KT09PTApcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZj10aGlzLnkucmVkU3ViKGkueSk7Zi5jbXBuKDApIT09MCYmKGY9Zi5yZWRNdWwodGhpcy54LnJlZFN1YihpLngpLnJlZEludm0oKSkpO3ZhciBjPWYucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoaS54KSx1PWYucmVkTXVsKHRoaXMueC5yZWRTdWIoYykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChjLHUpfSxsLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgaT10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoaS5jbXBuKDApPT09MClyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBmPXRoaXMuY3VydmUuYSxjPXRoaXMueC5yZWRTcXIoKSx1PWkucmVkSW52bSgpLGQ9Yy5yZWRBZGQoYykucmVkSUFkZChjKS5yZWRJQWRkKGYpLnJlZE11bCh1KSxoPWQucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLHc9ZC5yZWRNdWwodGhpcy54LnJlZFN1YihoKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGgsdyl9LGwucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sbC5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxsLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9bmV3IHMoaSwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKGkpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsaSk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbaV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxpKX0sbC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKGksZixjKXt2YXIgdT1bdGhpcyxmXSxkPVtpLGNdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQodSxkKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsdSxkLDIpfSxsLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKGksZixjKXt2YXIgdT1bdGhpcyxmXSxkPVtpLGNdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQodSxkLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsdSxkLDIsITApfSxsLnByb3RvdHlwZS5lcT1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcz09PWl8fHRoaXMuaW5mPT09aS5pbmYmJih0aGlzLmluZnx8dGhpcy54LmNtcChpLngpPT09MCYmdGhpcy55LmNtcChpLnkpPT09MCl9LGwucHJvdG90eXBlLm5lZz1mdW5jdGlvbihpKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgZj10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKGkmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBjPXRoaXMucHJlY29tcHV0ZWQsdT1mdW5jdGlvbihkKXtyZXR1cm4gZC5uZWcoKX07Zi5wcmVjb21wdXRlZD17bmFmOmMubmFmJiZ7d25kOmMubmFmLnduZCxwb2ludHM6Yy5uYWYucG9pbnRzLm1hcCh1KX0sZG91YmxlczpjLmRvdWJsZXMmJntzdGVwOmMuZG91Ymxlcy5zdGVwLHBvaW50czpjLmRvdWJsZXMucG9pbnRzLm1hcCh1KX19fXJldHVybiBmfSxsLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxvKG4sci5CYXNlUG9pbnQpLGUucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihpLGYsYyl7cmV0dXJuIG5ldyBuKHRoaXMsaSxmLGMpfSxuLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBpPXRoaXMuei5yZWRJbnZtKCksZj1pLnJlZFNxcigpLGM9dGhpcy54LnJlZE11bChmKSx1PXRoaXMueS5yZWRNdWwoZikucmVkTXVsKGkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGMsdSl9LG4ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LG4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihpKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gaTtpZihpLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgZj1pLnoucmVkU3FyKCksYz10aGlzLnoucmVkU3FyKCksdT10aGlzLngucmVkTXVsKGYpLGQ9aS54LnJlZE11bChjKSxoPXRoaXMueS5yZWRNdWwoZi5yZWRNdWwoaS56KSksdz1pLnkucmVkTXVsKGMucmVkTXVsKHRoaXMueikpLF89dS5yZWRTdWIoZCksQT1oLnJlZFN1Yih3KTtpZihfLmNtcG4oMCk9PT0wKXJldHVybiBBLmNtcG4oMCkhPT0wP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBQPV8ucmVkU3FyKCksTD1QLnJlZE11bChfKSxOPXUucmVkTXVsKFApLEQ9QS5yZWRTcXIoKS5yZWRJQWRkKEwpLnJlZElTdWIoTikucmVkSVN1YihOKSxGPUEucmVkTXVsKE4ucmVkSVN1YihEKSkucmVkSVN1YihoLnJlZE11bChMKSksVT10aGlzLnoucmVkTXVsKGkueikucmVkTXVsKF8pO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChELEYsVSl9LG4ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKGkpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBpLnRvSigpO2lmKGkuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBmPXRoaXMuei5yZWRTcXIoKSxjPXRoaXMueCx1PWkueC5yZWRNdWwoZiksZD10aGlzLnksaD1pLnkucmVkTXVsKGYpLnJlZE11bCh0aGlzLnopLHc9Yy5yZWRTdWIodSksXz1kLnJlZFN1YihoKTtpZih3LmNtcG4oMCk9PT0wKXJldHVybiBfLmNtcG4oMCkhPT0wP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBBPXcucmVkU3FyKCksUD1BLnJlZE11bCh3KSxMPWMucmVkTXVsKEEpLE49Xy5yZWRTcXIoKS5yZWRJQWRkKFApLnJlZElTdWIoTCkucmVkSVN1YihMKSxEPV8ucmVkTXVsKEwucmVkSVN1YihOKSkucmVkSVN1YihkLnJlZE11bChQKSksRj10aGlzLnoucmVkTXVsKHcpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEQsRil9LG4ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oaSl7aWYoaT09PTApcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIWkpcmV0dXJuIHRoaXMuZGJsKCk7dmFyIGY7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBjPXRoaXM7Zm9yKGY9MDtmPGk7ZisrKWM9Yy5kYmwoKTtyZXR1cm4gY312YXIgdT10aGlzLmN1cnZlLmEsZD10aGlzLmN1cnZlLnRpbnYsaD10aGlzLngsdz10aGlzLnksXz10aGlzLnosQT1fLnJlZFNxcigpLnJlZFNxcigpLFA9dy5yZWRBZGQodyk7Zm9yKGY9MDtmPGk7ZisrKXt2YXIgTD1oLnJlZFNxcigpLE49UC5yZWRTcXIoKSxEPU4ucmVkU3FyKCksRj1MLnJlZEFkZChMKS5yZWRJQWRkKEwpLnJlZElBZGQodS5yZWRNdWwoQSkpLFU9aC5yZWRNdWwoTiksQj1GLnJlZFNxcigpLnJlZElTdWIoVS5yZWRBZGQoVSkpLFM9VS5yZWRJU3ViKEIpLEM9Ri5yZWRNdWwoUyk7Qz1DLnJlZElBZGQoQykucmVkSVN1YihEKTt2YXIgdj1QLnJlZE11bChfKTtmKzE8aSYmKEE9QS5yZWRNdWwoRCkpLGg9QixfPXYsUD1DfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLFAucmVkTXVsKGQpLF8pfSxuLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxuLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBpLGYsYztpZih0aGlzLnpPbmUpe3ZhciB1PXRoaXMueC5yZWRTcXIoKSxkPXRoaXMueS5yZWRTcXIoKSxoPWQucmVkU3FyKCksdz10aGlzLngucmVkQWRkKGQpLnJlZFNxcigpLnJlZElTdWIodSkucmVkSVN1YihoKTt3PXcucmVkSUFkZCh3KTt2YXIgXz11LnJlZEFkZCh1KS5yZWRJQWRkKHUpLEE9Xy5yZWRTcXIoKS5yZWRJU3ViKHcpLnJlZElTdWIodyksUD1oLnJlZElBZGQoaCk7UD0oUD1QLnJlZElBZGQoUCkpLnJlZElBZGQoUCksaT1BLGY9Xy5yZWRNdWwody5yZWRJU3ViKEEpKS5yZWRJU3ViKFApLGM9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIEw9dGhpcy54LnJlZFNxcigpLE49dGhpcy55LnJlZFNxcigpLEQ9Ti5yZWRTcXIoKSxGPXRoaXMueC5yZWRBZGQoTikucmVkU3FyKCkucmVkSVN1YihMKS5yZWRJU3ViKEQpO0Y9Ri5yZWRJQWRkKEYpO3ZhciBVPUwucmVkQWRkKEwpLnJlZElBZGQoTCksQj1VLnJlZFNxcigpLFM9RC5yZWRJQWRkKEQpO1M9KFM9Uy5yZWRJQWRkKFMpKS5yZWRJQWRkKFMpLGk9Qi5yZWRJU3ViKEYpLnJlZElTdWIoRiksZj1VLnJlZE11bChGLnJlZElTdWIoaSkpLnJlZElTdWIoUyksYz0oYz10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQoYyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGksZixjKX0sbi5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIGksZixjO2lmKHRoaXMuek9uZSl7dmFyIHU9dGhpcy54LnJlZFNxcigpLGQ9dGhpcy55LnJlZFNxcigpLGg9ZC5yZWRTcXIoKSx3PXRoaXMueC5yZWRBZGQoZCkucmVkU3FyKCkucmVkSVN1Yih1KS5yZWRJU3ViKGgpO3c9dy5yZWRJQWRkKHcpO3ZhciBfPXUucmVkQWRkKHUpLnJlZElBZGQodSkucmVkSUFkZCh0aGlzLmN1cnZlLmEpLEE9Xy5yZWRTcXIoKS5yZWRJU3ViKHcpLnJlZElTdWIodyk7aT1BO3ZhciBQPWgucmVkSUFkZChoKTtQPShQPVAucmVkSUFkZChQKSkucmVkSUFkZChQKSxmPV8ucmVkTXVsKHcucmVkSVN1YihBKSkucmVkSVN1YihQKSxjPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBMPXRoaXMuei5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxEPXRoaXMueC5yZWRNdWwoTiksRj10aGlzLngucmVkU3ViKEwpLnJlZE11bCh0aGlzLngucmVkQWRkKEwpKTtGPUYucmVkQWRkKEYpLnJlZElBZGQoRik7dmFyIFU9RC5yZWRJQWRkKEQpLEI9KFU9VS5yZWRJQWRkKFUpKS5yZWRBZGQoVSk7aT1GLnJlZFNxcigpLnJlZElTdWIoQiksYz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJU3ViKEwpO3ZhciBTPU4ucmVkU3FyKCk7Uz0oUz0oUz1TLnJlZElBZGQoUykpLnJlZElBZGQoUykpLnJlZElBZGQoUyksZj1GLnJlZE11bChVLnJlZElTdWIoaSkpLnJlZElTdWIoUyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGksZixjKX0sbi5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBpPXRoaXMuY3VydmUuYSxmPXRoaXMueCxjPXRoaXMueSx1PXRoaXMueixkPXUucmVkU3FyKCkucmVkU3FyKCksaD1mLnJlZFNxcigpLHc9Yy5yZWRTcXIoKSxfPWgucmVkQWRkKGgpLnJlZElBZGQoaCkucmVkSUFkZChpLnJlZE11bChkKSksQT1mLnJlZEFkZChmKSxQPShBPUEucmVkSUFkZChBKSkucmVkTXVsKHcpLEw9Xy5yZWRTcXIoKS5yZWRJU3ViKFAucmVkQWRkKFApKSxOPVAucmVkSVN1YihMKSxEPXcucmVkU3FyKCk7RD0oRD0oRD1ELnJlZElBZGQoRCkpLnJlZElBZGQoRCkpLnJlZElBZGQoRCk7dmFyIEY9Xy5yZWRNdWwoTikucmVkSVN1YihEKSxVPWMucmVkQWRkKGMpLnJlZE11bCh1KTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTCxGLFUpfSxuLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBpPXRoaXMueC5yZWRTcXIoKSxmPXRoaXMueS5yZWRTcXIoKSxjPXRoaXMuei5yZWRTcXIoKSx1PWYucmVkU3FyKCksZD1pLnJlZEFkZChpKS5yZWRJQWRkKGkpLGg9ZC5yZWRTcXIoKSx3PXRoaXMueC5yZWRBZGQoZikucmVkU3FyKCkucmVkSVN1YihpKS5yZWRJU3ViKHUpLF89KHc9KHc9KHc9dy5yZWRJQWRkKHcpKS5yZWRBZGQodykucmVkSUFkZCh3KSkucmVkSVN1YihoKSkucmVkU3FyKCksQT11LnJlZElBZGQodSk7QT0oQT0oQT1BLnJlZElBZGQoQSkpLnJlZElBZGQoQSkpLnJlZElBZGQoQSk7dmFyIFA9ZC5yZWRJQWRkKHcpLnJlZFNxcigpLnJlZElTdWIoaCkucmVkSVN1YihfKS5yZWRJU3ViKEEpLEw9Zi5yZWRNdWwoUCk7TD0oTD1MLnJlZElBZGQoTCkpLnJlZElBZGQoTCk7dmFyIE49dGhpcy54LnJlZE11bChfKS5yZWRJU3ViKEwpO049KE49Ti5yZWRJQWRkKE4pKS5yZWRJQWRkKE4pO3ZhciBEPXRoaXMueS5yZWRNdWwoUC5yZWRNdWwoQS5yZWRJU3ViKFApKS5yZWRJU3ViKHcucmVkTXVsKF8pKSk7RD0oRD0oRD1ELnJlZElBZGQoRCkpLnJlZElBZGQoRCkpLnJlZElBZGQoRCk7dmFyIEY9dGhpcy56LnJlZEFkZCh3KS5yZWRTcXIoKS5yZWRJU3ViKGMpLnJlZElTdWIoXyk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KE4sRCxGKX0sbi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGksZil7cmV0dXJuIGk9bmV3IHMoaSxmKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsaSl9LG4ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGkpe2lmKGkudHlwZT09PSJhZmZpbmUiKXJldHVybiB0aGlzLmVxKGkudG9KKCkpO2lmKHRoaXM9PT1pKXJldHVybiEwO3ZhciBmPXRoaXMuei5yZWRTcXIoKSxjPWkuei5yZWRTcXIoKTtpZih0aGlzLngucmVkTXVsKGMpLnJlZElTdWIoaS54LnJlZE11bChmKSkuY21wbigwKSE9PTApcmV0dXJuITE7dmFyIHU9Zi5yZWRNdWwodGhpcy56KSxkPWMucmVkTXVsKGkueik7cmV0dXJuIHRoaXMueS5yZWRNdWwoZCkucmVkSVN1YihpLnkucmVkTXVsKHUpKS5jbXBuKDApPT09MH0sbi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGkpe3ZhciBmPXRoaXMuei5yZWRTcXIoKSxjPWkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChmKTtpZih0aGlzLnguY21wKGMpPT09MClyZXR1cm4hMDtmb3IodmFyIHU9aS5jbG9uZSgpLGQ9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChmKTs7KXtpZih1LmlhZGQodGhpcy5jdXJ2ZS5uKSx1LmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKGMucmVkSUFkZChkKSx0aGlzLnguY21wKGMpPT09MClyZXR1cm4hMH19LG4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxuLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuei5jbXBuKDApPT09MH19LHsiLi4vdXRpbHMiOjQxOSwiLi9iYXNlIjo0MDYsImJuLmpzIjo0MjAsaW5oZXJpdHM6NDQwfV0sNDExOltmdW5jdGlvbihhLEUsayl7dmFyIG0scz1rLG89YSgiaGFzaC5qcyIpLHI9YSgiLi9jdXJ2ZSIpLHQ9YSgiLi91dGlscyIpLmFzc2VydDtmdW5jdGlvbiBlKG4pe24udHlwZT09PSJzaG9ydCI/dGhpcy5jdXJ2ZT1uZXcgci5zaG9ydChuKTpuLnR5cGU9PT0iZWR3YXJkcyI/dGhpcy5jdXJ2ZT1uZXcgci5lZHdhcmRzKG4pOnRoaXMuY3VydmU9bmV3IHIubW9udChuKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPW4uaGFzaCx0KHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksdCh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIGwobixpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocyxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZj1uZXcgZShpKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsbix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6Zn0pLGZ9fSl9cy5QcmVzZXRDdXJ2ZT1lLGwoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOm8uc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLGwoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOm8uc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLGwoInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpvLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxsKCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjIixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6by5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksbCgicDUyMSIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOm8uc2hhNTEyLGdSZWQ6ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLGwoImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpvLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxsKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6by5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3RyeXttPWEoIi4vcHJlY29tcHV0ZWQvc2VjcDI1NmsxIil9Y2F0Y2h7bT12b2lkIDB9bCgic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6by5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsbV19KX0seyIuL2N1cnZlIjo0MDgsIi4vcHJlY29tcHV0ZWQvc2VjcDI1NmsxIjo0MTgsIi4vdXRpbHMiOjQxOSwiaGFzaC5qcyI6NDI2fV0sNDEyOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiYm4uanMiKSxzPWEoImhtYWMtZHJiZyIpLG89YSgiLi4vdXRpbHMiKSxyPWEoIi4uL2N1cnZlcyIpLHQ9YSgiYnJvcmFuZCIpLGU9by5hc3NlcnQsbD1hKCIuL2tleSIpLG49YSgiLi9zaWduYXR1cmUiKTtmdW5jdGlvbiBpKGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGkpKXJldHVybiBuZXcgaShmKTt0eXBlb2YgZj09InN0cmluZyImJihlKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGYpLCJVbmtub3duIGN1cnZlICIrZiksZj1yW2ZdKSxmIGluc3RhbmNlb2Ygci5QcmVzZXRDdXJ2ZSYmKGY9e2N1cnZlOmZ9KSx0aGlzLmN1cnZlPWYuY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1mLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoZi5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1mLmhhc2h8fGYuY3VydmUuaGFzaH1FLmV4cG9ydHM9aSxpLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKGYpe3JldHVybiBuZXcgbCh0aGlzLGYpfSxpLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihmLGMpe3JldHVybiBsLmZyb21Qcml2YXRlKHRoaXMsZixjKX0saS5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihmLGMpe3JldHVybiBsLmZyb21QdWJsaWModGhpcyxmLGMpfSxpLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKGYpe2Z8fChmPXt9KTtmb3IodmFyIGM9bmV3IHMoe2hhc2g6dGhpcy5oYXNoLHBlcnM6Zi5wZXJzLHBlcnNFbmM6Zi5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpmLmVudHJvcHl8fHQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpmLmVudHJvcHkmJmYuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSx1PXRoaXMubi5ieXRlTGVuZ3RoKCksZD10aGlzLm4uc3ViKG5ldyBtKDIpKTs7KXt2YXIgaD1uZXcgbShjLmdlbmVyYXRlKHUpKTtpZighKGguY21wKGQpPjApKXJldHVybiBoLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoaCl9fSxpLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oZixjKXt2YXIgdT04KmYuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gdT4wJiYoZj1mLnVzaHJuKHUpKSwhYyYmZi5jbXAodGhpcy5uKT49MD9mLnN1Yih0aGlzLm4pOmZ9LGkucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oZixjLHUsZCl7dHlwZW9mIHU9PSJvYmplY3QiJiYoZD11LHU9bnVsbCksZHx8KGQ9e30pLGM9dGhpcy5rZXlGcm9tUHJpdmF0ZShjLHUpLGY9dGhpcy5fdHJ1bmNhdGVUb04obmV3IG0oZiwxNikpO2Zvcih2YXIgaD10aGlzLm4uYnl0ZUxlbmd0aCgpLHc9Yy5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLGgpLF89Zi50b0FycmF5KCJiZSIsaCksQT1uZXcgcyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTp3LG5vbmNlOl8scGVyczpkLnBlcnMscGVyc0VuYzpkLnBlcnNFbmN8fCJ1dGY4In0pLFA9dGhpcy5uLnN1YihuZXcgbSgxKSksTD0wOztMKyspe3ZhciBOPWQuaz9kLmsoTCk6bmV3IG0oQS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoTj10aGlzLl90cnVuY2F0ZVRvTihOLCEwKSkuY21wbigxKTw9MHx8Ti5jbXAoUCk+PTApKXt2YXIgRD10aGlzLmcubXVsKE4pO2lmKCFELmlzSW5maW5pdHkoKSl7dmFyIEY9RC5nZXRYKCksVT1GLnVtb2QodGhpcy5uKTtpZihVLmNtcG4oMCkhPT0wKXt2YXIgQj1OLmludm0odGhpcy5uKS5tdWwoVS5tdWwoYy5nZXRQcml2YXRlKCkpLmlhZGQoZikpO2lmKChCPUIudW1vZCh0aGlzLm4pKS5jbXBuKDApIT09MCl7dmFyIFM9KEQuZ2V0WSgpLmlzT2RkKCk/MTowKXwoRi5jbXAoVSkhPT0wPzI6MCk7cmV0dXJuIGQuY2Fub25pY2FsJiZCLmNtcCh0aGlzLm5oKT4wJiYoQj10aGlzLm4uc3ViKEIpLFNePTEpLG5ldyBuKHtyOlUsczpCLHJlY292ZXJ5UGFyYW06U30pfX19fX19LGkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihmLGMsdSxkKXtmPXRoaXMuX3RydW5jYXRlVG9OKG5ldyBtKGYsMTYpKSx1PXRoaXMua2V5RnJvbVB1YmxpYyh1LGQpO3ZhciBoPShjPW5ldyBuKGMsImhleCIpKS5yLHc9Yy5zO2lmKGguY21wbigxKTwwfHxoLmNtcCh0aGlzLm4pPj0wfHx3LmNtcG4oMSk8MHx8dy5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgXyxBPXcuaW52bSh0aGlzLm4pLFA9QS5tdWwoZikudW1vZCh0aGlzLm4pLEw9QS5tdWwoaCkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShfPXRoaXMuZy5qbXVsQWRkKFAsdS5nZXRQdWJsaWMoKSxMKSkuaXNJbmZpbml0eSgpJiZfLmVxWFRvUChoKTohKF89dGhpcy5nLm11bEFkZChQLHUuZ2V0UHVibGljKCksTCkpLmlzSW5maW5pdHkoKSYmXy5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChoKT09PTB9LGkucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24oZixjLHUsZCl7ZSgoMyZ1KT09PXUsIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxjPW5ldyBuKGMsZCk7dmFyIGg9dGhpcy5uLHc9bmV3IG0oZiksXz1jLnIsQT1jLnMsUD0xJnUsTD11Pj4xO2lmKF8uY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZMKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7Xz1MP3RoaXMuY3VydmUucG9pbnRGcm9tWChfLmFkZCh0aGlzLmN1cnZlLm4pLFApOnRoaXMuY3VydmUucG9pbnRGcm9tWChfLFApO3ZhciBOPWMuci5pbnZtKGgpLEQ9aC5zdWIodykubXVsKE4pLnVtb2QoaCksRj1BLm11bChOKS51bW9kKGgpO3JldHVybiB0aGlzLmcubXVsQWRkKEQsXyxGKX0saS5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihmLGMsdSxkKXtpZigoYz1uZXcgbihjLGQpKS5yZWNvdmVyeVBhcmFtIT09bnVsbClyZXR1cm4gYy5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgaD0wO2g8NDtoKyspe3ZhciB3O3RyeXt3PXRoaXMucmVjb3ZlclB1YktleShmLGMsaCl9Y2F0Y2h7Y29udGludWV9aWYody5lcSh1KSlyZXR1cm4gaH10aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvciIpfX0seyIuLi9jdXJ2ZXMiOjQxMSwiLi4vdXRpbHMiOjQxOSwiLi9rZXkiOjQxMywiLi9zaWduYXR1cmUiOjQxNCwiYm4uanMiOjQyMCxicm9yYW5kOjE4NywiaG1hYy1kcmJnIjo0Mzh9XSw0MTM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJibi5qcyIpLHM9YSgiLi4vdXRpbHMiKS5hc3NlcnQ7ZnVuY3Rpb24gbyhyLHQpe3RoaXMuZWM9cix0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLHQucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZSh0LnByaXYsdC5wcml2RW5jKSx0LnB1YiYmdGhpcy5faW1wb3J0UHVibGljKHQucHViLHQucHViRW5jKX1FLmV4cG9ydHM9byxvLmZyb21QdWJsaWM9ZnVuY3Rpb24ocix0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygbz90Om5ldyBvKHIse3B1Yjp0LHB1YkVuYzplfSl9LG8uZnJvbVByaXZhdGU9ZnVuY3Rpb24ocix0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygbz90Om5ldyBvKHIse3ByaXY6dCxwcml2RW5jOmV9KX0sby5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmdldFB1YmxpYygpO3JldHVybiByLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06ci52YWxpZGF0ZSgpP3IubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sby5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIHR5cGVvZiByPT0ic3RyaW5nIiYmKHQ9cixyPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSx0P3RoaXMucHViLmVuY29kZSh0LHIpOnRoaXMucHVifSxvLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKHIpe3JldHVybiByPT09ImhleCI/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sby5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24ocix0KXt0aGlzLnByaXY9bmV3IG0ocix0fHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LG8ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24ocix0KXtpZihyLnh8fHIueSlyZXR1cm4gdGhpcy5lYy5jdXJ2ZS50eXBlPT09Im1vbnQiP3Moci54LCJOZWVkIHggY29vcmRpbmF0ZSIpOnRoaXMuZWMuY3VydmUudHlwZSE9PSJzaG9ydCImJnRoaXMuZWMuY3VydmUudHlwZSE9PSJlZHdhcmRzInx8cyhyLngmJnIueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChyLngsci55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChyLHQpfSxvLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHIudmFsaWRhdGUoKXx8cyhyLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksci5tdWwodGhpcy5wcml2KS5nZXRYKCl9LG8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24ocix0LGUpe3JldHVybiB0aGlzLmVjLnNpZ24ocix0aGlzLHQsZSl9LG8ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihyLHQpe3JldHVybiB0aGlzLmVjLnZlcmlmeShyLHQsdGhpcyl9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpKyIgPiJ9fSx7Ii4uL3V0aWxzIjo0MTksImJuLmpzIjo0MjB9XSw0MTQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJibi5qcyIpLHM9YSgiLi4vdXRpbHMiKSxvPXMuYXNzZXJ0O2Z1bmN0aW9uIHIoaSxmKXtpZihpIGluc3RhbmNlb2YgcilyZXR1cm4gaTt0aGlzLl9pbXBvcnRERVIoaSxmKXx8KG8oaS5yJiZpLnMsIlNpZ25hdHVyZSB3aXRob3V0IHIgb3IgcyIpLHRoaXMucj1uZXcgbShpLnIsMTYpLHRoaXMucz1uZXcgbShpLnMsMTYpLGkucmVjb3ZlcnlQYXJhbT09PXZvaWQgMD90aGlzLnJlY292ZXJ5UGFyYW09bnVsbDp0aGlzLnJlY292ZXJ5UGFyYW09aS5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiB0KCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIGUoaSxmKXt2YXIgYz1pW2YucGxhY2UrK107aWYoISgxMjgmYykpcmV0dXJuIGM7dmFyIHU9MTUmYztpZih1PT09MHx8dT40KXJldHVybiExO2Zvcih2YXIgZD0wLGg9MCx3PWYucGxhY2U7aDx1O2grKyx3KyspZDw8PTgsZHw9aVt3XSxkPj4+PTA7cmV0dXJuIShkPD0xMjcpJiYoZi5wbGFjZT13LGQpfWZ1bmN0aW9uIGwoaSl7Zm9yKHZhciBmPTAsYz1pLmxlbmd0aC0xOyFpW2ZdJiYhKDEyOCZpW2YrMV0pJiZmPGM7KWYrKztyZXR1cm4gZj09PTA/aTppLnNsaWNlKGYpfWZ1bmN0aW9uIG4oaSxmKXtpZihmPDEyOClpLnB1c2goZik7ZWxzZXt2YXIgYz0xKyhNYXRoLmxvZyhmKS9NYXRoLkxOMj4+PjMpO2ZvcihpLnB1c2goMTI4fGMpOy0tYzspaS5wdXNoKGY+Pj4oYzw8MykmMjU1KTtpLnB1c2goZil9fUUuZXhwb3J0cz1yLHIucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oaSxmKXtpPXMudG9BcnJheShpLGYpO3ZhciBjPW5ldyB0O2lmKGlbYy5wbGFjZSsrXSE9PTQ4KXJldHVybiExO3ZhciB1PWUoaSxjKTtpZih1PT09ITF8fHUrYy5wbGFjZSE9PWkubGVuZ3RofHxpW2MucGxhY2UrK10hPT0yKXJldHVybiExO3ZhciBkPWUoaSxjKTtpZihkPT09ITEpcmV0dXJuITE7dmFyIGg9aS5zbGljZShjLnBsYWNlLGQrYy5wbGFjZSk7aWYoYy5wbGFjZSs9ZCxpW2MucGxhY2UrK10hPT0yKXJldHVybiExO3ZhciB3PWUoaSxjKTtpZih3PT09ITF8fGkubGVuZ3RoIT09dytjLnBsYWNlKXJldHVybiExO3ZhciBfPWkuc2xpY2UoYy5wbGFjZSx3K2MucGxhY2UpO2lmKGhbMF09PT0wKXtpZighKDEyOCZoWzFdKSlyZXR1cm4hMTtoPWguc2xpY2UoMSl9aWYoX1swXT09PTApe2lmKCEoMTI4Jl9bMV0pKXJldHVybiExO189Xy5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBtKGgpLHRoaXMucz1uZXcgbShfKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sci5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oaSl7dmFyIGY9dGhpcy5yLnRvQXJyYXkoKSxjPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZmWzBdJiYoZj1bMF0uY29uY2F0KGYpKSwxMjgmY1swXSYmKGM9WzBdLmNvbmNhdChjKSksZj1sKGYpLGM9bChjKTshKGNbMF18fDEyOCZjWzFdKTspYz1jLnNsaWNlKDEpO3ZhciB1PVsyXTtuKHUsZi5sZW5ndGgpLCh1PXUuY29uY2F0KGYpKS5wdXNoKDIpLG4odSxjLmxlbmd0aCk7dmFyIGQ9dS5jb25jYXQoYyksaD1bNDhdO3JldHVybiBuKGgsZC5sZW5ndGgpLGg9aC5jb25jYXQoZCkscy5lbmNvZGUoaCxpKX19LHsiLi4vdXRpbHMiOjQxOSwiYm4uanMiOjQyMH1dLDQxNTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImhhc2guanMiKSxzPWEoIi4uL2N1cnZlcyIpLG89YSgiLi4vdXRpbHMiKSxyPW8uYXNzZXJ0LHQ9by5wYXJzZUJ5dGVzLGU9YSgiLi9rZXkiKSxsPWEoIi4vc2lnbmF0dXJlIik7ZnVuY3Rpb24gbihpKXtpZihyKGk9PT0iZWQyNTUxOSIsIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4oaSk7aT1zW2ldLmN1cnZlLHRoaXMuY3VydmU9aSx0aGlzLmc9aS5nLHRoaXMuZy5wcmVjb21wdXRlKGkubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9aS5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKGkubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9bS5zaGE1MTJ9RS5leHBvcnRzPW4sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihpLGYpe2k9dChpKTt2YXIgYz10aGlzLmtleUZyb21TZWNyZXQoZiksdT10aGlzLmhhc2hJbnQoYy5tZXNzYWdlUHJlZml4KCksaSksZD10aGlzLmcubXVsKHUpLGg9dGhpcy5lbmNvZGVQb2ludChkKSx3PXRoaXMuaGFzaEludChoLGMucHViQnl0ZXMoKSxpKS5tdWwoYy5wcml2KCkpLF89dS5hZGQodykudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6ZCxTOl8sUmVuY29kZWQ6aH0pfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oaSxmLGMpe2k9dChpKSxmPXRoaXMubWFrZVNpZ25hdHVyZShmKTt2YXIgdT10aGlzLmtleUZyb21QdWJsaWMoYyksZD10aGlzLmhhc2hJbnQoZi5SZW5jb2RlZCgpLHUucHViQnl0ZXMoKSxpKSxoPXRoaXMuZy5tdWwoZi5TKCkpO3JldHVybiBmLlIoKS5hZGQodS5wdWIoKS5tdWwoZCkpLmVxKGgpfSxuLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPXRoaXMuaGFzaCgpLGY9MDtmPGFyZ3VtZW50cy5sZW5ndGg7ZisrKWkudXBkYXRlKGFyZ3VtZW50c1tmXSk7cmV0dXJuIG8uaW50RnJvbUxFKGkuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihpKXtyZXR1cm4gZS5mcm9tUHVibGljKHRoaXMsaSl9LG4ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGUuZnJvbVNlY3JldCh0aGlzLGkpfSxuLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKGkpe3JldHVybiBpIGluc3RhbmNlb2YgbD9pOm5ldyBsKHRoaXMsaSl9LG4ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKGkpe3ZhciBmPWkuZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gZlt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1pLmdldFgoKS5pc09kZCgpPzEyODowLGZ9LG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKGkpe3ZhciBmPShpPW8ucGFyc2VCeXRlcyhpKSkubGVuZ3RoLTEsYz1pLnNsaWNlKDAsZikuY29uY2F0KC0xMjkmaVtmXSksdT0oMTI4JmlbZl0pIT0wLGQ9by5pbnRGcm9tTEUoYyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShkLHUpfSxuLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxuLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIG8uaW50RnJvbUxFKGkpfSxuLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKGkpe3JldHVybiBpIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0seyIuLi9jdXJ2ZXMiOjQxMSwiLi4vdXRpbHMiOjQxOSwiLi9rZXkiOjQxNiwiLi9zaWduYXR1cmUiOjQxNywiaGFzaC5qcyI6NDI2fV0sNDE2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vdXRpbHMiKSxzPW0uYXNzZXJ0LG89bS5wYXJzZUJ5dGVzLHI9bS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB0KGUsbCl7dGhpcy5lZGRzYT1lLHRoaXMuX3NlY3JldD1vKGwuc2VjcmV0KSxlLmlzUG9pbnQobC5wdWIpP3RoaXMuX3B1Yj1sLnB1Yjp0aGlzLl9wdWJCeXRlcz1vKGwucHViKX10LmZyb21QdWJsaWM9ZnVuY3Rpb24oZSxsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIHQ/bDpuZXcgdChlLHtwdWI6bH0pfSx0LmZyb21TZWNyZXQ9ZnVuY3Rpb24oZSxsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIHQ/bDpuZXcgdChlLHtzZWNyZXQ6bH0pfSx0LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxyKHQsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSkscih0LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSkscih0LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lZGRzYSxsPXRoaXMuaGFzaCgpLG49ZS5lbmNvZGluZ0xlbmd0aC0xLGk9bC5zbGljZSgwLGUuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBpWzBdJj0yNDgsaVtuXSY9MTI3LGlbbl18PTY0LGl9KSxyKHQsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSkscih0LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxyKHQsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksdC5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihlKXtyZXR1cm4gcyh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKGUsdGhpcyl9LHQucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihlLGwpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShlLGwsdGhpcyl9LHQucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihlKXtyZXR1cm4gcyh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxtLmVuY29kZSh0aGlzLnNlY3JldCgpLGUpfSx0LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG0uZW5jb2RlKHRoaXMucHViQnl0ZXMoKSxlKX0sRS5leHBvcnRzPXR9LHsiLi4vdXRpbHMiOjQxOX1dLDQxNzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImJuLmpzIikscz1hKCIuLi91dGlscyIpLG89cy5hc3NlcnQscj1zLmNhY2hlZFByb3BlcnR5LHQ9cy5wYXJzZUJ5dGVzO2Z1bmN0aW9uIGUobCxuKXt0aGlzLmVkZHNhPWwsdHlwZW9mIG4hPSJvYmplY3QiJiYobj10KG4pKSxBcnJheS5pc0FycmF5KG4pJiYobj17UjpuLnNsaWNlKDAsbC5lbmNvZGluZ0xlbmd0aCksUzpuLnNsaWNlKGwuZW5jb2RpbmdMZW5ndGgpfSksbyhuLlImJm4uUywiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTIiksbC5pc1BvaW50KG4uUikmJih0aGlzLl9SPW4uUiksbi5TIGluc3RhbmNlb2YgbSYmKHRoaXMuX1M9bi5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KG4uUik/bi5SOm4uUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShuLlMpP24uUzpuLlNlbmNvZGVkfXIoZSwiUyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLHIoZSwiUiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSkscihlLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxyKGUsIlNlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxlLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sZS5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gcy5lbmNvZGUodGhpcy50b0J5dGVzKCksImhleCIpLnRvVXBwZXJDYXNlKCl9LEUuZXhwb3J0cz1lfSx7Ii4uL3V0aWxzIjo0MTksImJuLmpzIjo0MjB9XSw0MTg6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIsIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJdLFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIsIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJdLFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIsIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIsIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxbIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMiXSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIsImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0sWyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAiLCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0sWyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIsImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0sWyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LHt9XSw0MTk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1rLHM9YSgiYm4uanMiKSxvPWEoIm1pbmltYWxpc3RpYy1hc3NlcnQiKSxyPWEoIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMiKTttLmFzc2VydD1vLG0udG9BcnJheT1yLnRvQXJyYXksbS56ZXJvMj1yLnplcm8yLG0udG9IZXg9ci50b0hleCxtLmVuY29kZT1yLmVuY29kZSxtLmdldE5BRj1mdW5jdGlvbih0LGUsbCl7dmFyIG49bmV3IEFycmF5KE1hdGgubWF4KHQuYml0TGVuZ3RoKCksbCkrMSk7bi5maWxsKDApO2Zvcih2YXIgaT0xPDxlKzEsZj10LmNsb25lKCksYz0wO2M8bi5sZW5ndGg7YysrKXt2YXIgdSxkPWYuYW5kbG4oaS0xKTtmLmlzT2RkKCk/KHU9ZD4oaT4+MSktMT8oaT4+MSktZDpkLGYuaXN1Ym4odSkpOnU9MCxuW2NdPXUsZi5pdXNocm4oMSl9cmV0dXJuIG59LG0uZ2V0SlNGPWZ1bmN0aW9uKHQsZSl7dmFyIGw9W1tdLFtdXTt0PXQuY2xvbmUoKSxlPWUuY2xvbmUoKTtmb3IodmFyIG4saT0wLGY9MDt0LmNtcG4oLWkpPjB8fGUuY21wbigtZik+MDspe3ZhciBjLHUsZD10LmFuZGxuKDMpK2kmMyxoPWUuYW5kbG4oMykrZiYzO2Q9PT0zJiYoZD0tMSksaD09PTMmJihoPS0xKSxjPTEmZD8obj10LmFuZGxuKDcpK2kmNykhPT0zJiZuIT09NXx8aCE9PTI/ZDotZDowLGxbMF0ucHVzaChjKSx1PTEmaD8obj1lLmFuZGxuKDcpK2YmNykhPT0zJiZuIT09NXx8ZCE9PTI/aDotaDowLGxbMV0ucHVzaCh1KSwyKmk9PT1jKzEmJihpPTEtaSksMipmPT09dSsxJiYoZj0xLWYpLHQuaXVzaHJuKDEpLGUuaXVzaHJuKDEpfXJldHVybiBsfSxtLmNhY2hlZFByb3BlcnR5PWZ1bmN0aW9uKHQsZSxsKXt2YXIgbj0iXyIrZTt0LnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW25dIT09dm9pZCAwP3RoaXNbbl06dGhpc1tuXT1sLmNhbGwodGhpcyl9fSxtLnBhcnNlQnl0ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj9tLnRvQXJyYXkodCwiaGV4Iik6dH0sbS5pbnRGcm9tTEU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHQsImhleCIsImxlIil9fSx7ImJuLmpzIjo0MjAsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1MywibWluaW1hbGlzdGljLWNyeXB0by11dGlscyI6NDU0fV0sNDIwOltmdW5jdGlvbihhLEUsayl7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkoayxhcmd1bWVudHMpfSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sNDIxOltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPXtuYW1lOiJlbGxpcHRpYyIsdmVyc2lvbjoiNi41LjQiLGRlc2NyaXB0aW9uOiJFQyBjcnlwdG9ncmFwaHkiLG1haW46ImxpYi9lbGxpcHRpYy5qcyIsZmlsZXM6WyJsaWIiXSxzY3JpcHRzOntsaW50OiJlc2xpbnQgbGliIHRlc3QiLCJsaW50OmZpeCI6Im5wbSBydW4gbGludCAtLSAtLWZpeCIsdW5pdDoiaXN0YW5idWwgdGVzdCBfbW9jaGEgLS1yZXBvcnRlcj1zcGVjIHRlc3QvaW5kZXguanMiLHRlc3Q6Im5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXQiLHZlcnNpb246ImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0LyJ9LHJlcG9zaXRvcnk6e3R5cGU6ImdpdCIsdXJsOiJnaXRAZ2l0aHViLmNvbTppbmR1dG55L2VsbGlwdGljIn0sa2V5d29yZHM6WyJFQyIsIkVsbGlwdGljIiwiY3VydmUiLCJDcnlwdG9ncmFwaHkiXSxhdXRob3I6IkZlZG9yIEluZHV0bnkgPGZlZG9yQGluZHV0bnkuY29tPiIsbGljZW5zZToiTUlUIixidWdzOnt1cmw6Imh0dHBzOi8vZ2l0aHViLmNvbS9pbmR1dG55L2VsbGlwdGljL2lzc3VlcyJ9LGhvbWVwYWdlOiJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYyIsZGV2RGVwZW5kZW5jaWVzOnticmZzOiJeMi4wLjIiLGNvdmVyYWxsczoiXjMuMS4wIixlc2xpbnQ6Il43LjYuMCIsZ3J1bnQ6Il4xLjIuMSIsImdydW50LWJyb3dzZXJpZnkiOiJeNS4zLjAiLCJncnVudC1jbGkiOiJeMS4zLjIiLCJncnVudC1jb250cmliLWNvbm5lY3QiOiJeMy4wLjAiLCJncnVudC1jb250cmliLWNvcHkiOiJeMS4wLjAiLCJncnVudC1jb250cmliLXVnbGlmeSI6Il41LjAuMCIsImdydW50LW1vY2hhLWlzdGFuYnVsIjoiXjUuMC4yIiwiZ3J1bnQtc2F1Y2VsYWJzIjoiXjkuMC4xIixpc3RhbmJ1bDoiXjAuNC41Iixtb2NoYToiXjguMC4xIn0sZGVwZW5kZW5jaWVzOnsiYm4uanMiOiJeNC4xMS45Iixicm9yYW5kOiJeMS4xLjAiLCJoYXNoLmpzIjoiXjEuMC4wIiwiaG1hYy1kcmJnIjoiXjEuMC4xIixpbmhlcml0czoiXjIuMC40IiwibWluaW1hbGlzdGljLWFzc2VydCI6Il4xLjAuMSIsIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMiOiJeMS4wLjEifX19LHt9XSw0MjI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihOKXt2YXIgRD1mdW5jdGlvbigpe307cmV0dXJuIEQucHJvdG90eXBlPU4sbmV3IER9LHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKE4pe3ZhciBEPVtdO2Zvcih2YXIgRiBpbiBOKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLEYpJiZELnB1c2goRik7cmV0dXJuIEZ9LG89RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fGZ1bmN0aW9uKE4pe3ZhciBEPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEQuYXBwbHkoTixhcmd1bWVudHMpfX07ZnVuY3Rpb24gcigpe3RoaXMuX2V2ZW50cyYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsIl9ldmVudHMiKXx8KHRoaXMuX2V2ZW50cz1tKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH1FLmV4cG9ydHM9cixyLkV2ZW50RW1pdHRlcj1yLHIucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLHIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciB0LGU9MTA7dHJ5e3ZhciBsPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIngiLHt2YWx1ZTowfSksdD1sLng9PT0wfWNhdGNoe3Q9ITF9ZnVuY3Rpb24gbihOKXtyZXR1cm4gTi5fbWF4TGlzdGVuZXJzPT09dm9pZCAwP3IuZGVmYXVsdE1heExpc3RlbmVyczpOLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gaShOLEQsRil7aWYoRClOLmNhbGwoRik7ZWxzZSBmb3IodmFyIFU9Ti5sZW5ndGgsQj1MKE4sVSksUz0wO1M8VTsrK1MpQltTXS5jYWxsKEYpfWZ1bmN0aW9uIGYoTixELEYsVSl7aWYoRClOLmNhbGwoRixVKTtlbHNlIGZvcih2YXIgQj1OLmxlbmd0aCxTPUwoTixCKSxDPTA7QzxCOysrQylTW0NdLmNhbGwoRixVKX1mdW5jdGlvbiBjKE4sRCxGLFUsQil7aWYoRClOLmNhbGwoRixVLEIpO2Vsc2UgZm9yKHZhciBTPU4ubGVuZ3RoLEM9TChOLFMpLHY9MDt2PFM7Kyt2KUNbdl0uY2FsbChGLFUsQil9ZnVuY3Rpb24gdShOLEQsRixVLEIsUyl7aWYoRClOLmNhbGwoRixVLEIsUyk7ZWxzZSBmb3IodmFyIEM9Ti5sZW5ndGgsdj1MKE4sQykscD0wO3A8QzsrK3ApdltwXS5jYWxsKEYsVSxCLFMpfWZ1bmN0aW9uIGQoTixELEYsVSl7aWYoRClOLmFwcGx5KEYsVSk7ZWxzZSBmb3IodmFyIEI9Ti5sZW5ndGgsUz1MKE4sQiksQz0wO0M8QjsrK0MpU1tDXS5hcHBseShGLFUpfWZ1bmN0aW9uIGgoTixELEYsVSl7dmFyIEIsUyxDO2lmKHR5cGVvZiBGIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoKFM9Ti5fZXZlbnRzKT8oUy5uZXdMaXN0ZW5lciYmKE4uZW1pdCgibmV3TGlzdGVuZXIiLEQsRi5saXN0ZW5lcj9GLmxpc3RlbmVyOkYpLFM9Ti5fZXZlbnRzKSxDPVNbRF0pOihTPU4uX2V2ZW50cz1tKG51bGwpLE4uX2V2ZW50c0NvdW50PTApLEMpe2lmKHR5cGVvZiBDPT0iZnVuY3Rpb24iP0M9U1tEXT1VP1tGLENdOltDLEZdOlU/Qy51bnNoaWZ0KEYpOkMucHVzaChGKSwhQy53YXJuZWQmJihCPW4oTikpJiZCPjAmJkMubGVuZ3RoPkIpe0Mud2FybmVkPSEwO3ZhciB2PW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK0MubGVuZ3RoKycgIicrU3RyaW5nKEQpKyciIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuJyk7di5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLHYuZW1pdHRlcj1OLHYudHlwZT1ELHYuY291bnQ9Qy5sZW5ndGgsdHlwZW9mIGNvbnNvbGU9PSJvYmplY3QiJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiJXM6ICVzIix2Lm5hbWUsdi5tZXNzYWdlKX19ZWxzZSBDPVNbRF09RiwrK04uX2V2ZW50c0NvdW50O3JldHVybiBOfWZ1bmN0aW9uIHcoKXtpZighdGhpcy5maXJlZClzd2l0Y2godGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtjYXNlIDE6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0pO2Nhc2UgMjpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0LGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTtkZWZhdWx0OmZvcih2YXIgTj1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksRD0wO0Q8Ti5sZW5ndGg7KytEKU5bRF09YXJndW1lbnRzW0RdO3RoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsTil9fWZ1bmN0aW9uIF8oTixELEYpe3ZhciBVPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpOLHR5cGU6RCxsaXN0ZW5lcjpGfSxCPW8uY2FsbCh3LFUpO3JldHVybiBCLmxpc3RlbmVyPUYsVS53cmFwRm49QixCfWZ1bmN0aW9uIEEoTixELEYpe3ZhciBVPU4uX2V2ZW50cztpZighVSlyZXR1cm5bXTt2YXIgQj1VW0RdO3JldHVybiBCP3R5cGVvZiBCPT0iZnVuY3Rpb24iP0Y/W0IubGlzdGVuZXJ8fEJdOltCXTpGP2Z1bmN0aW9uKFMpe2Zvcih2YXIgQz1uZXcgQXJyYXkoUy5sZW5ndGgpLHY9MDt2PEMubGVuZ3RoOysrdilDW3ZdPVNbdl0ubGlzdGVuZXJ8fFNbdl07cmV0dXJuIEN9KEIpOkwoQixCLmxlbmd0aCk6W119ZnVuY3Rpb24gUChOKXt2YXIgRD10aGlzLl9ldmVudHM7aWYoRCl7dmFyIEY9RFtOXTtpZih0eXBlb2YgRj09ImZ1bmN0aW9uIilyZXR1cm4gMTtpZihGKXJldHVybiBGLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBMKE4sRCl7Zm9yKHZhciBGPW5ldyBBcnJheShEKSxVPTA7VTxEOysrVSlGW1VdPU5bVV07cmV0dXJuIEZ9dD9PYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV9LHNldDpmdW5jdGlvbihOKXtpZih0eXBlb2YgTiE9Im51bWJlciJ8fE48MHx8TiE9Til0aHJvdyBuZXcgVHlwZUVycm9yKCciZGVmYXVsdE1heExpc3RlbmVycyIgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO2U9Tn19KTpyLmRlZmF1bHRNYXhMaXN0ZW5lcnM9ZSxyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oTil7aWYodHlwZW9mIE4hPSJudW1iZXIifHxOPDB8fGlzTmFOKE4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJuIiBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1OLHRoaXN9LHIucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMpfSxyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKE4pe3ZhciBELEYsVSxCLFMsQyx2PU49PT0iZXJyb3IiO2lmKEM9dGhpcy5fZXZlbnRzKXY9diYmQy5lcnJvcj09bnVsbDtlbHNlIGlmKCF2KXJldHVybiExO2lmKHYpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmKEQ9YXJndW1lbnRzWzFdKSxEIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgRDt2YXIgcD1uZXcgRXJyb3IoJ1VuaGFuZGxlZCAiZXJyb3IiIGV2ZW50LiAoJytEKyIpIik7dGhyb3cgcC5jb250ZXh0PUQscH1pZighKEY9Q1tOXSkpcmV0dXJuITE7dmFyIGI9dHlwZW9mIEY9PSJmdW5jdGlvbiI7c3dpdGNoKFU9YXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOmkoRixiLHRoaXMpO2JyZWFrO2Nhc2UgMjpmKEYsYix0aGlzLGFyZ3VtZW50c1sxXSk7YnJlYWs7Y2FzZSAzOmMoRixiLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7Y2FzZSA0OnUoRixiLHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSxhcmd1bWVudHNbM10pO2JyZWFrO2RlZmF1bHQ6Zm9yKEI9bmV3IEFycmF5KFUtMSksUz0xO1M8VTtTKyspQltTLTFdPWFyZ3VtZW50c1tTXTtkKEYsYix0aGlzLEIpfXJldHVybiEwfSxyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihOLEQpe3JldHVybiBoKHRoaXMsTixELCExKX0sci5wcm90b3R5cGUub249ci5wcm90b3R5cGUuYWRkTGlzdGVuZXIsci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKE4sRCl7cmV0dXJuIGgodGhpcyxOLEQsITApfSxyLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKE4sRCl7aWYodHlwZW9mIEQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gdGhpcy5vbihOLF8odGhpcyxOLEQpKSx0aGlzfSxyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKE4sRCl7aWYodHlwZW9mIEQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gdGhpcy5wcmVwZW5kTGlzdGVuZXIoTixfKHRoaXMsTixEKSksdGhpc30sci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oTixEKXt2YXIgRixVLEIsUyxDO2lmKHR5cGVvZiBEIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7aWYoIShVPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYoIShGPVVbTl0pKXJldHVybiB0aGlzO2lmKEY9PT1EfHxGLmxpc3RlbmVyPT09RCktLXRoaXMuX2V2ZW50c0NvdW50PT0wP3RoaXMuX2V2ZW50cz1tKG51bGwpOihkZWxldGUgVVtOXSxVLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixOLEYubGlzdGVuZXJ8fEQpKTtlbHNlIGlmKHR5cGVvZiBGIT0iZnVuY3Rpb24iKXtmb3IoQj0tMSxTPUYubGVuZ3RoLTE7Uz49MDtTLS0paWYoRltTXT09PUR8fEZbU10ubGlzdGVuZXI9PT1EKXtDPUZbU10ubGlzdGVuZXIsQj1TO2JyZWFrfWlmKEI8MClyZXR1cm4gdGhpcztCPT09MD9GLnNoaWZ0KCk6ZnVuY3Rpb24odixwKXtmb3IodmFyIGI9cCxnPWIrMSx5PXYubGVuZ3RoO2c8eTtiKz0xLGcrPTEpdltiXT12W2ddO3YucG9wKCl9KEYsQiksRi5sZW5ndGg9PT0xJiYoVVtOXT1GWzBdKSxVLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixOLEN8fEQpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oTil7dmFyIEQsRixVO2lmKCEoRj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKCFGLnJlbW92ZUxpc3RlbmVyKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD8odGhpcy5fZXZlbnRzPW0obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6RltOXSYmKC0tdGhpcy5fZXZlbnRzQ291bnQ9PTA/dGhpcy5fZXZlbnRzPW0obnVsbCk6ZGVsZXRlIEZbTl0pLHRoaXM7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApe3ZhciBCLFM9cyhGKTtmb3IoVT0wO1U8Uy5sZW5ndGg7KytVKShCPVNbVV0pIT09InJlbW92ZUxpc3RlbmVyIiYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoQik7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1tKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZih0eXBlb2YoRD1GW05dKT09ImZ1bmN0aW9uIil0aGlzLnJlbW92ZUxpc3RlbmVyKE4sRCk7ZWxzZSBpZihEKWZvcihVPUQubGVuZ3RoLTE7VT49MDtVLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihOLERbVV0pO3JldHVybiB0aGlzfSxyLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oTil7cmV0dXJuIEEodGhpcyxOLCEwKX0sci5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKE4pe3JldHVybiBBKHRoaXMsTiwhMSl9LHIubGlzdGVuZXJDb3VudD1mdW5jdGlvbihOLEQpe3JldHVybiB0eXBlb2YgTi5saXN0ZW5lckNvdW50PT0iZnVuY3Rpb24iP04ubGlzdGVuZXJDb3VudChEKTpQLmNhbGwoTixEKX0sci5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1QLHIucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSw0MjM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixzPWEoIm1kNS5qcyIpO0UuZXhwb3J0cz1mdW5jdGlvbihvLHIsdCxlKXtpZihtLmlzQnVmZmVyKG8pfHwobz1tLmZyb20obywiYmluYXJ5IikpLHImJihtLmlzQnVmZmVyKHIpfHwocj1tLmZyb20ociwiYmluYXJ5IikpLHIubGVuZ3RoIT09OCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIGw9dC84LG49bS5hbGxvYyhsKSxpPW0uYWxsb2MoZXx8MCksZj1tLmFsbG9jKDApO2w+MHx8ZT4wOyl7dmFyIGM9bmV3IHM7Yy51cGRhdGUoZiksYy51cGRhdGUobyksciYmYy51cGRhdGUociksZj1jLmRpZ2VzdCgpO3ZhciB1PTA7aWYobD4wKXt2YXIgZD1uLmxlbmd0aC1sO3U9TWF0aC5taW4obCxmLmxlbmd0aCksZi5jb3B5KG4sZCwwLHUpLGwtPXV9aWYodTxmLmxlbmd0aCYmZT4wKXt2YXIgaD1pLmxlbmd0aC1lLHc9TWF0aC5taW4oZSxmLmxlbmd0aC11KTtmLmNvcHkoaSxoLHUsdSt3KSxlLT13fX1yZXR1cm4gZi5maWxsKDApLHtrZXk6bixpdjppfX19LHsibWQ1LmpzIjo0NTAsInNhZmUtYnVmZmVyIjo0OTR9XSw0MjQ6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5Dc3ZQYXJzZXJTdHJlYW09ay5QYXJzZXJPcHRpb25zPWsucGFyc2VGaWxlPWsucGFyc2VTdHJlYW09ay5wYXJzZVN0cmluZz1rLnBhcnNlPWsuRm9ybWF0dGVyT3B0aW9ucz1rLkNzdkZvcm1hdHRlclN0cmVhbT1rLndyaXRlVG9QYXRoPWsud3JpdGVUb1N0cmluZz1rLndyaXRlVG9CdWZmZXI9ay53cml0ZVRvU3RyZWFtPWsud3JpdGU9ay5mb3JtYXQ9dm9pZCAwO3ZhciBtPWEoIkBmYXN0LWNzdi9mb3JtYXQiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiZm9ybWF0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5mb3JtYXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssIndyaXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS53cml0ZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywid3JpdGVUb1N0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0ud3JpdGVUb1N0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywid3JpdGVUb0J1ZmZlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0ud3JpdGVUb0J1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywid3JpdGVUb1N0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0ud3JpdGVUb1N0cmluZ319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywid3JpdGVUb1BhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLndyaXRlVG9QYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJDc3ZGb3JtYXR0ZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBtLkNzdkZvcm1hdHRlclN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiRm9ybWF0dGVyT3B0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uRm9ybWF0dGVyT3B0aW9uc319KTt2YXIgcz1hKCJAZmFzdC1jc3YvcGFyc2UiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywicGFyc2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLnBhcnNlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJwYXJzZVN0cmluZyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMucGFyc2VTdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssInBhcnNlU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5wYXJzZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywicGFyc2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5wYXJzZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssIlBhcnNlck9wdGlvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlBhcnNlck9wdGlvbnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssIkNzdlBhcnNlclN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuQ3N2UGFyc2VyU3RyZWFtfX0pfSx7IkBmYXN0LWNzdi9mb3JtYXQiOjE1MSwiQGZhc3QtY3N2L3BhcnNlIjoxNTV9XSw0MjU6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixzPWEoInJlYWRhYmxlLXN0cmVhbSIpLlRyYW5zZm9ybTtmdW5jdGlvbiBvKHIpe3MuY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1tLmFsbG9jVW5zYWZlKHIpLHRoaXMuX2Jsb2NrU2l6ZT1yLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9YSgiaW5oZXJpdHMiKShvLHMpLG8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24ocix0LGUpe3ZhciBsPW51bGw7dHJ5e3RoaXMudXBkYXRlKHIsdCl9Y2F0Y2gobil7bD1ufWUobCl9LG8ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihyKXt2YXIgdD1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goZSl7dD1lfXIodCl9LG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihyLHQpe2lmKGZ1bmN0aW9uKGMsdSl7aWYoIW0uaXNCdWZmZXIoYykmJnR5cGVvZiBjIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKHUrIiBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyIil9KHIsIkRhdGEiKSx0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTttLmlzQnVmZmVyKHIpfHwocj1tLmZyb20ocix0KSk7Zm9yKHZhciBlPXRoaXMuX2Jsb2NrLGw9MDt0aGlzLl9ibG9ja09mZnNldCtyLmxlbmd0aC1sPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIG49dGhpcy5fYmxvY2tPZmZzZXQ7bjx0aGlzLl9ibG9ja1NpemU7KWVbbisrXT1yW2wrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO2w8ci5sZW5ndGg7KWVbdGhpcy5fYmxvY2tPZmZzZXQrK109cltsKytdO2Zvcih2YXIgaT0wLGY9OCpyLmxlbmd0aDtmPjA7KytpKXRoaXMuX2xlbmd0aFtpXSs9ZiwoZj10aGlzLl9sZW5ndGhbaV0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW2ldLT00Mjk0OTY3Mjk2KmYpO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxvLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24ocil7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxpemVkPSEwO3ZhciB0PXRoaXMuX2RpZ2VzdCgpO3IhPT12b2lkIDAmJih0PXQudG9TdHJpbmcocikpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIGU9MDtlPDQ7KytlKXRoaXMuX2xlbmd0aFtlXT0wO3JldHVybiB0fSxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxFLmV4cG9ydHM9b30se2luaGVyaXRzOjQ0MCwicmVhZGFibGUtc3RyZWFtIjo0OTEsInNhZmUtYnVmZmVyIjo0OTR9XSw0MjY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1rO20udXRpbHM9YSgiLi9oYXNoL3V0aWxzIiksbS5jb21tb249YSgiLi9oYXNoL2NvbW1vbiIpLG0uc2hhPWEoIi4vaGFzaC9zaGEiKSxtLnJpcGVtZD1hKCIuL2hhc2gvcmlwZW1kIiksbS5obWFjPWEoIi4vaGFzaC9obWFjIiksbS5zaGExPW0uc2hhLnNoYTEsbS5zaGEyNTY9bS5zaGEuc2hhMjU2LG0uc2hhMjI0PW0uc2hhLnNoYTIyNCxtLnNoYTM4ND1tLnNoYS5zaGEzODQsbS5zaGE1MTI9bS5zaGEuc2hhNTEyLG0ucmlwZW1kMTYwPW0ucmlwZW1kLnJpcGVtZDE2MH0seyIuL2hhc2gvY29tbW9uIjo0MjcsIi4vaGFzaC9obWFjIjo0MjgsIi4vaGFzaC9yaXBlbWQiOjQyOSwiLi9oYXNoL3NoYSI6NDMwLCIuL2hhc2gvdXRpbHMiOjQzN31dLDQyNzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4vdXRpbHMiKSxzPWEoIm1pbmltYWxpc3RpYy1hc3NlcnQiKTtmdW5jdGlvbiBvKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1rLkJsb2NrSGFzaD1vLG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihyLHQpe2lmKHI9bS50b0FycmF5KHIsdCksdGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZz10aGlzLnBlbmRpbmcuY29uY2F0KHIpOnRoaXMucGVuZGluZz1yLHRoaXMucGVuZGluZ1RvdGFsKz1yLmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBlPShyPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9ci5zbGljZShyLmxlbmd0aC1lLHIubGVuZ3RoKSx0aGlzLnBlbmRpbmcubGVuZ3RoPT09MCYmKHRoaXMucGVuZGluZz1udWxsKSxyPW0uam9pbjMyKHIsMCxyLmxlbmd0aC1lLHRoaXMuZW5kaWFuKTtmb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHIsbCxsK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxvLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxzKHRoaXMucGVuZGluZz09PW51bGwpLHRoaXMuX2RpZ2VzdChyKX0sby5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciByPXRoaXMucGVuZGluZ1RvdGFsLHQ9dGhpcy5fZGVsdGE4LGU9dC0ocit0aGlzLnBhZExlbmd0aCkldCxsPW5ldyBBcnJheShlK3RoaXMucGFkTGVuZ3RoKTtsWzBdPTEyODtmb3IodmFyIG49MTtuPGU7bisrKWxbbl09MDtpZihyPDw9Myx0aGlzLmVuZGlhbj09PSJiaWciKXtmb3IodmFyIGk9ODtpPHRoaXMucGFkTGVuZ3RoO2krKylsW24rK109MDtsW24rK109MCxsW24rK109MCxsW24rK109MCxsW24rK109MCxsW24rK109cj4+PjI0JjI1NSxsW24rK109cj4+PjE2JjI1NSxsW24rK109cj4+PjgmMjU1LGxbbisrXT0yNTUmcn1lbHNlIGZvcihsW24rK109MjU1JnIsbFtuKytdPXI+Pj44JjI1NSxsW24rK109cj4+PjE2JjI1NSxsW24rK109cj4+PjI0JjI1NSxsW24rK109MCxsW24rK109MCxsW24rK109MCxsW24rK109MCxpPTg7aTx0aGlzLnBhZExlbmd0aDtpKyspbFtuKytdPTA7cmV0dXJuIGx9fSx7Ii4vdXRpbHMiOjQzNywibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sNDI4OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi91dGlscyIpLHM9YSgibWluaW1hbGlzdGljLWFzc2VydCIpO2Z1bmN0aW9uIG8ocix0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyhyLHQsZSk7dGhpcy5IYXNoPXIsdGhpcy5ibG9ja1NpemU9ci5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9ci5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KG0udG9BcnJheSh0LGUpKX1FLmV4cG9ydHM9byxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihyKXtyLmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHI9bmV3IHRoaXMuSGFzaCgpLnVwZGF0ZShyKS5kaWdlc3QoKSkscyhyLmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgdD1yLmxlbmd0aDt0PHRoaXMuYmxvY2tTaXplO3QrKylyLnB1c2goMCk7Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKylyW3RdXj01NDtmb3IodGhpcy5pbm5lcj1uZXcgdGhpcy5IYXNoKCkudXBkYXRlKHIpLHQ9MDt0PHIubGVuZ3RoO3QrKylyW3RdXj0xMDY7dGhpcy5vdXRlcj1uZXcgdGhpcy5IYXNoKCkudXBkYXRlKHIpfSxvLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24ocix0KXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUocix0KSx0aGlzfSxvLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHIpfX0seyIuL3V0aWxzIjo0MzcsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31dLDQyOTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4vdXRpbHMiKSxzPWEoIi4vY29tbW9uIiksbz1tLnJvdGwzMixyPW0uc3VtMzIsdD1tLnN1bTMyXzMsZT1tLnN1bTMyXzQsbD1zLkJsb2NrSGFzaDtmdW5jdGlvbiBuKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuO2wuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiBpKF8sQSxQLEwpe3JldHVybiBfPD0xNT9BXlBeTDpfPD0zMT9BJlB8fkEmTDpfPD00Nz8oQXx+UCleTDpfPD02Mz9BJkx8UCZ+TDpBXihQfH5MKX1mdW5jdGlvbiBmKF8pe3JldHVybiBfPD0xNT8wOl88PTMxPzE1MTg1MDAyNDk6Xzw9NDc/MTg1OTc3NTM5MzpfPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4Mzh9ZnVuY3Rpb24gYyhfKXtyZXR1cm4gXzw9MTU/MTM1MjgyOTkyNjpfPD0zMT8xNTQ4NjAzNjg0Ol88PTQ3PzE4MzYwNzI2OTE6Xzw9NjM/MjA1Mzk5NDIxNzowfW0uaW5oZXJpdHMobixsKSxrLnJpcGVtZDE2MD1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MTYwLG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKF8sQSl7Zm9yKHZhciBQPXRoaXMuaFswXSxMPXRoaXMuaFsxXSxOPXRoaXMuaFsyXSxEPXRoaXMuaFszXSxGPXRoaXMuaFs0XSxVPVAsQj1MLFM9TixDPUQsdj1GLHA9MDtwPDgwO3ArKyl7dmFyIGI9cihvKGUoUCxpKHAsTCxOLEQpLF9bdVtwXStBXSxmKHApKSxoW3BdKSxGKTtQPUYsRj1ELEQ9byhOLDEwKSxOPUwsTD1iLGI9cihvKGUoVSxpKDc5LXAsQixTLEMpLF9bZFtwXStBXSxjKHApKSx3W3BdKSx2KSxVPXYsdj1DLEM9byhTLDEwKSxTPUIsQj1ifWI9dCh0aGlzLmhbMV0sTixDKSx0aGlzLmhbMV09dCh0aGlzLmhbMl0sRCx2KSx0aGlzLmhbMl09dCh0aGlzLmhbM10sRixVKSx0aGlzLmhbM109dCh0aGlzLmhbNF0sUCxCKSx0aGlzLmhbNF09dCh0aGlzLmhbMF0sTCxTKSx0aGlzLmhbMF09Yn0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihfKXtyZXR1cm4gXz09PSJoZXgiP20udG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOm0uc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgdT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxkPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLGg9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLHc9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSx7Ii4vY29tbW9uIjo0MjcsIi4vdXRpbHMiOjQzN31dLDQzMDpbZnVuY3Rpb24oYSxFLGspe2suc2hhMT1hKCIuL3NoYS8xIiksay5zaGEyMjQ9YSgiLi9zaGEvMjI0Iiksay5zaGEyNTY9YSgiLi9zaGEvMjU2Iiksay5zaGEzODQ9YSgiLi9zaGEvMzg0Iiksay5zaGE1MTI9YSgiLi9zaGEvNTEyIil9LHsiLi9zaGEvMSI6NDMxLCIuL3NoYS8yMjQiOjQzMiwiLi9zaGEvMjU2Ijo0MzMsIi4vc2hhLzM4NCI6NDM0LCIuL3NoYS81MTIiOjQzNX1dLDQzMTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL3V0aWxzIikscz1hKCIuLi9jb21tb24iKSxvPWEoIi4vY29tbW9uIikscj1tLnJvdGwzMix0PW0uc3VtMzIsZT1tLnN1bTMyXzUsbD1vLmZ0XzEsbj1zLkJsb2NrSGFzaCxpPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBmKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZikpcmV0dXJuIG5ldyBmO24uY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1tLmluaGVyaXRzKGYsbiksRS5leHBvcnRzPWYsZi5ibG9ja1NpemU9NTEyLGYub3V0U2l6ZT0xNjAsZi5obWFjU3RyZW5ndGg9ODAsZi5wYWRMZW5ndGg9NjQsZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihjLHUpe2Zvcih2YXIgZD10aGlzLlcsaD0wO2g8MTY7aCsrKWRbaF09Y1t1K2hdO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1yKGRbaC0zXV5kW2gtOF1eZFtoLTE0XV5kW2gtMTZdLDEpO3ZhciB3PXRoaXMuaFswXSxfPXRoaXMuaFsxXSxBPXRoaXMuaFsyXSxQPXRoaXMuaFszXSxMPXRoaXMuaFs0XTtmb3IoaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgTj1+fihoLzIwKSxEPWUocih3LDUpLGwoTixfLEEsUCksTCxkW2hdLGlbTl0pO0w9UCxQPUEsQT1yKF8sMzApLF89dyx3PUR9dGhpcy5oWzBdPXQodGhpcy5oWzBdLHcpLHRoaXMuaFsxXT10KHRoaXMuaFsxXSxfKSx0aGlzLmhbMl09dCh0aGlzLmhbMl0sQSksdGhpcy5oWzNdPXQodGhpcy5oWzNdLFApLHRoaXMuaFs0XT10KHRoaXMuaFs0XSxMKX0sZi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihjKXtyZXR1cm4gYz09PSJoZXgiP20udG9IZXgzMih0aGlzLmgsImJpZyIpOm0uc3BsaXQzMih0aGlzLmgsImJpZyIpfX0seyIuLi9jb21tb24iOjQyNywiLi4vdXRpbHMiOjQzNywiLi9jb21tb24iOjQzNn1dLDQzMjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uL3V0aWxzIikscz1hKCIuLzI1NiIpO2Z1bmN0aW9uIG8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG87cy5jYWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19bS5pbmhlcml0cyhvLHMpLEUuZXhwb3J0cz1vLG8uYmxvY2tTaXplPTUxMixvLm91dFNpemU9MjI0LG8uaG1hY1N0cmVuZ3RoPTE5MixvLnBhZExlbmd0aD02NCxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHIpe3JldHVybiByPT09ImhleCI/bS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTptLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0seyIuLi91dGlscyI6NDM3LCIuLzI1NiI6NDMzfV0sNDMzOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vdXRpbHMiKSxzPWEoIi4uL2NvbW1vbiIpLG89YSgiLi9jb21tb24iKSxyPWEoIm1pbmltYWxpc3RpYy1hc3NlcnQiKSx0PW0uc3VtMzIsZT1tLnN1bTMyXzQsbD1tLnN1bTMyXzUsbj1vLmNoMzIsaT1vLm1hajMyLGY9by5zMF8yNTYsYz1vLnMxXzI1Nix1PW8uZzBfMjU2LGQ9by5nMV8yNTYsaD1zLkJsb2NrSGFzaCx3PVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIF8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBfKSlyZXR1cm4gbmV3IF87aC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz13LHRoaXMuVz1uZXcgQXJyYXkoNjQpfW0uaW5oZXJpdHMoXyxoKSxFLmV4cG9ydHM9XyxfLmJsb2NrU2l6ZT01MTIsXy5vdXRTaXplPTI1NixfLmhtYWNTdHJlbmd0aD0xOTIsXy5wYWRMZW5ndGg9NjQsXy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihBLFApe2Zvcih2YXIgTD10aGlzLlcsTj0wO048MTY7TisrKUxbTl09QVtQK05dO2Zvcig7TjxMLmxlbmd0aDtOKyspTFtOXT1lKGQoTFtOLTJdKSxMW04tN10sdShMW04tMTVdKSxMW04tMTZdKTt2YXIgRD10aGlzLmhbMF0sRj10aGlzLmhbMV0sVT10aGlzLmhbMl0sQj10aGlzLmhbM10sUz10aGlzLmhbNF0sQz10aGlzLmhbNV0sdj10aGlzLmhbNl0scD10aGlzLmhbN107Zm9yKHIodGhpcy5rLmxlbmd0aD09PUwubGVuZ3RoKSxOPTA7TjxMLmxlbmd0aDtOKyspe3ZhciBiPWwocCxjKFMpLG4oUyxDLHYpLHRoaXMua1tOXSxMW05dKSxnPXQoZihEKSxpKEQsRixVKSk7cD12LHY9QyxDPVMsUz10KEIsYiksQj1VLFU9RixGPUQsRD10KGIsZyl9dGhpcy5oWzBdPXQodGhpcy5oWzBdLEQpLHRoaXMuaFsxXT10KHRoaXMuaFsxXSxGKSx0aGlzLmhbMl09dCh0aGlzLmhbMl0sVSksdGhpcy5oWzNdPXQodGhpcy5oWzNdLEIpLHRoaXMuaFs0XT10KHRoaXMuaFs0XSxTKSx0aGlzLmhbNV09dCh0aGlzLmhbNV0sQyksdGhpcy5oWzZdPXQodGhpcy5oWzZdLHYpLHRoaXMuaFs3XT10KHRoaXMuaFs3XSxwKX0sXy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihBKXtyZXR1cm4gQT09PSJoZXgiP20udG9IZXgzMih0aGlzLmgsImJpZyIpOm0uc3BsaXQzMih0aGlzLmgsImJpZyIpfX0seyIuLi9jb21tb24iOjQyNywiLi4vdXRpbHMiOjQzNywiLi9jb21tb24iOjQzNiwibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sNDM0OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vdXRpbHMiKSxzPWEoIi4vNTEyIik7ZnVuY3Rpb24gbygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbztzLmNhbGwodGhpcyksdGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XX1tLmluaGVyaXRzKG8scyksRS5leHBvcnRzPW8sby5ibG9ja1NpemU9MTAyNCxvLm91dFNpemU9Mzg0LG8uaG1hY1N0cmVuZ3RoPTE5MixvLnBhZExlbmd0aD0xMjgsby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihyKXtyZXR1cm4gcj09PSJoZXgiP20udG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOm0uc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0seyIuLi91dGlscyI6NDM3LCIuLzUxMiI6NDM1fV0sNDM1OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vdXRpbHMiKSxzPWEoIi4uL2NvbW1vbiIpLG89YSgibWluaW1hbGlzdGljLWFzc2VydCIpLHI9bS5yb3RyNjRfaGksdD1tLnJvdHI2NF9sbyxlPW0uc2hyNjRfaGksbD1tLnNocjY0X2xvLG49bS5zdW02NCxpPW0uc3VtNjRfaGksZj1tLnN1bTY0X2xvLGM9bS5zdW02NF80X2hpLHU9bS5zdW02NF80X2xvLGQ9bS5zdW02NF81X2hpLGg9bS5zdW02NF81X2xvLHc9cy5CbG9ja0hhc2gsXz1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIEEoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBBKSlyZXR1cm4gbmV3IEE7dy5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPV8sdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIFAoZyx5LE0sTyxSKXt2YXIgej1nJk1efmcmUjtyZXR1cm4gejwwJiYoeis9NDI5NDk2NzI5Niksen1mdW5jdGlvbiBMKGcseSxNLE8sUix6KXt2YXIgJD15Jk9efnkmejtyZXR1cm4gJDwwJiYoJCs9NDI5NDk2NzI5NiksJH1mdW5jdGlvbiBOKGcseSxNLE8sUil7dmFyIHo9ZyZNXmcmUl5NJlI7cmV0dXJuIHo8MCYmKHorPTQyOTQ5NjcyOTYpLHp9ZnVuY3Rpb24gRChnLHksTSxPLFIseil7dmFyICQ9eSZPXnkmel5PJno7cmV0dXJuICQ8MCYmKCQrPTQyOTQ5NjcyOTYpLCR9ZnVuY3Rpb24gRihnLHkpe3ZhciBNPXIoZyx5LDI4KV5yKHksZywyKV5yKHksZyw3KTtyZXR1cm4gTTwwJiYoTSs9NDI5NDk2NzI5NiksTX1mdW5jdGlvbiBVKGcseSl7dmFyIE09dChnLHksMjgpXnQoeSxnLDIpXnQoeSxnLDcpO3JldHVybiBNPDAmJihNKz00Mjk0OTY3Mjk2KSxNfWZ1bmN0aW9uIEIoZyx5KXt2YXIgTT1yKGcseSwxNClecihnLHksMTgpXnIoeSxnLDkpO3JldHVybiBNPDAmJihNKz00Mjk0OTY3Mjk2KSxNfWZ1bmN0aW9uIFMoZyx5KXt2YXIgTT10KGcseSwxNCledChnLHksMTgpXnQoeSxnLDkpO3JldHVybiBNPDAmJihNKz00Mjk0OTY3Mjk2KSxNfWZ1bmN0aW9uIEMoZyx5KXt2YXIgTT1yKGcseSwxKV5yKGcseSw4KV5lKGcseSw3KTtyZXR1cm4gTTwwJiYoTSs9NDI5NDk2NzI5NiksTX1mdW5jdGlvbiB2KGcseSl7dmFyIE09dChnLHksMSledChnLHksOClebChnLHksNyk7cmV0dXJuIE08MCYmKE0rPTQyOTQ5NjcyOTYpLE19ZnVuY3Rpb24gcChnLHkpe3ZhciBNPXIoZyx5LDE5KV5yKHksZywyOSleZShnLHksNik7cmV0dXJuIE08MCYmKE0rPTQyOTQ5NjcyOTYpLE19ZnVuY3Rpb24gYihnLHkpe3ZhciBNPXQoZyx5LDE5KV50KHksZywyOSlebChnLHksNik7cmV0dXJuIE08MCYmKE0rPTQyOTQ5NjcyOTYpLE19bS5pbmhlcml0cyhBLHcpLEUuZXhwb3J0cz1BLEEuYmxvY2tTaXplPTEwMjQsQS5vdXRTaXplPTUxMixBLmhtYWNTdHJlbmd0aD0xOTIsQS5wYWRMZW5ndGg9MTI4LEEucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oZyx5KXtmb3IodmFyIE09dGhpcy5XLE89MDtPPDMyO08rKylNW09dPWdbeStPXTtmb3IoO088TS5sZW5ndGg7Tys9Mil7dmFyIFI9cChNW08tNF0sTVtPLTNdKSx6PWIoTVtPLTRdLE1bTy0zXSksJD1NW08tMTRdLFg9TVtPLTEzXSxqPUMoTVtPLTMwXSxNW08tMjldKSxXPXYoTVtPLTMwXSxNW08tMjldKSxUPU1bTy0zMl0seD1NW08tMzFdO01bT109YyhSLHosJCxYLGosVyxULHgpLE1bTysxXT11KFIseiwkLFgsaixXLFQseCl9fSxBLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGcseSl7dGhpcy5fcHJlcGFyZUJsb2NrKGcseSk7dmFyIE09dGhpcy5XLE89dGhpcy5oWzBdLFI9dGhpcy5oWzFdLHo9dGhpcy5oWzJdLCQ9dGhpcy5oWzNdLFg9dGhpcy5oWzRdLGo9dGhpcy5oWzVdLFc9dGhpcy5oWzZdLFQ9dGhpcy5oWzddLHg9dGhpcy5oWzhdLEk9dGhpcy5oWzldLEg9dGhpcy5oWzEwXSxaPXRoaXMuaFsxMV0sVj10aGlzLmhbMTJdLEs9dGhpcy5oWzEzXSxZPXRoaXMuaFsxNF0sSj10aGlzLmhbMTVdO28odGhpcy5rLmxlbmd0aD09PU0ubGVuZ3RoKTtmb3IodmFyIHE9MDtxPE0ubGVuZ3RoO3ErPTIpe3ZhciBHPVksUT1KLHJ0PUIoeCxJKSxzdD1TKHgsSSksb3Q9UCh4LEksSCxaLFYpLGh0PUwoeCxJLEgsWixWLEspLGR0PXRoaXMua1txXSxtdD10aGlzLmtbcSsxXSxNdD1NW3FdLEN0PU1bcSsxXSxfdD1kKEcsUSxydCxzdCxvdCxodCxkdCxtdCxNdCxDdCkseXQ9aChHLFEscnQsc3Qsb3QsaHQsZHQsbXQsTXQsQ3QpO0c9RihPLFIpLFE9VShPLFIpLHJ0PU4oTyxSLHosJCxYKSxzdD1EKE8sUix6LCQsWCxqKTt2YXIgY3Q9aShHLFEscnQsc3QpLGV0PWYoRyxRLHJ0LHN0KTtZPVYsSj1LLFY9SCxLPVosSD14LFo9SSx4PWkoVyxULF90LHl0KSxJPWYoVCxULF90LHl0KSxXPVgsVD1qLFg9eixqPSQsej1PLCQ9UixPPWkoX3QseXQsY3QsZXQpLFI9ZihfdCx5dCxjdCxldCl9bih0aGlzLmgsMCxPLFIpLG4odGhpcy5oLDIseiwkKSxuKHRoaXMuaCw0LFgsaiksbih0aGlzLmgsNixXLFQpLG4odGhpcy5oLDgseCxJKSxuKHRoaXMuaCwxMCxILFopLG4odGhpcy5oLDEyLFYsSyksbih0aGlzLmgsMTQsWSxKKX0sQS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihnKXtyZXR1cm4gZz09PSJoZXgiP20udG9IZXgzMih0aGlzLmgsImJpZyIpOm0uc3BsaXQzMih0aGlzLmgsImJpZyIpfX0seyIuLi9jb21tb24iOjQyNywiLi4vdXRpbHMiOjQzNywibWluaW1hbGlzdGljLWFzc2VydCI6NDUzfV0sNDM2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vdXRpbHMiKS5yb3RyMzI7ZnVuY3Rpb24gcyh0LGUsbCl7cmV0dXJuIHQmZV5+dCZsfWZ1bmN0aW9uIG8odCxlLGwpe3JldHVybiB0JmVedCZsXmUmbH1mdW5jdGlvbiByKHQsZSxsKXtyZXR1cm4gdF5lXmx9ay5mdF8xPWZ1bmN0aW9uKHQsZSxsLG4pe3JldHVybiB0PT09MD9zKGUsbCxuKTp0PT09MXx8dD09PTM/cihlLGwsbik6dD09PTI/byhlLGwsbik6dm9pZCAwfSxrLmNoMzI9cyxrLm1hajMyPW8say5wMzI9cixrLnMwXzI1Nj1mdW5jdGlvbih0KXtyZXR1cm4gbSh0LDIpXm0odCwxMylebSh0LDIyKX0say5zMV8yNTY9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCw2KV5tKHQsMTEpXm0odCwyNSl9LGsuZzBfMjU2PWZ1bmN0aW9uKHQpe3JldHVybiBtKHQsNylebSh0LDE4KV50Pj4+M30say5nMV8yNTY9ZnVuY3Rpb24odCl7cmV0dXJuIG0odCwxNylebSh0LDE5KV50Pj4+MTB9fSx7Ii4uL3V0aWxzIjo0Mzd9XSw0Mzc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJtaW5pbWFsaXN0aWMtYXNzZXJ0Iikscz1hKCJpbmhlcml0cyIpO2Z1bmN0aW9uIG8obCxuKXtyZXR1cm4oNjQ1MTImbC5jaGFyQ29kZUF0KG4pKT09NTUyOTYmJiEobjwwfHxuKzE+PWwubGVuZ3RoKSYmKDY0NTEyJmwuY2hhckNvZGVBdChuKzEpKT09NTYzMjB9ZnVuY3Rpb24gcihsKXtyZXR1cm4obD4+PjI0fGw+Pj44JjY1MjgwfGw8PDgmMTY3MTE2ODB8KDI1NSZsKTw8MjQpPj4+MH1mdW5jdGlvbiB0KGwpe3JldHVybiBsLmxlbmd0aD09PTE/IjAiK2w6bH1mdW5jdGlvbiBlKGwpe3JldHVybiBsLmxlbmd0aD09PTc/IjAiK2w6bC5sZW5ndGg9PT02PyIwMCIrbDpsLmxlbmd0aD09PTU/IjAwMCIrbDpsLmxlbmd0aD09PTQ/IjAwMDAiK2w6bC5sZW5ndGg9PT0zPyIwMDAwMCIrbDpsLmxlbmd0aD09PTI/IjAwMDAwMCIrbDpsLmxlbmd0aD09PTE/IjAwMDAwMDAiK2w6bH1rLmluaGVyaXRzPXMsay50b0FycmF5PWZ1bmN0aW9uKGwsbil7aWYoQXJyYXkuaXNBcnJheShsKSlyZXR1cm4gbC5zbGljZSgpO2lmKCFsKXJldHVybltdO3ZhciBpPVtdO2lmKHR5cGVvZiBsPT0ic3RyaW5nIilpZihuKXtpZihuPT09ImhleCIpZm9yKChsPWwucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYobD0iMCIrbCksYz0wO2M8bC5sZW5ndGg7Yys9MilpLnB1c2gocGFyc2VJbnQobFtjXStsW2MrMV0sMTYpKX1lbHNlIGZvcih2YXIgZj0wLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bC5jaGFyQ29kZUF0KGMpO3U8MTI4P2lbZisrXT11OnU8MjA0OD8oaVtmKytdPXU+PjZ8MTkyLGlbZisrXT02MyZ1fDEyOCk6byhsLGMpPyh1PTY1NTM2KygoMTAyMyZ1KTw8MTApKygxMDIzJmwuY2hhckNvZGVBdCgrK2MpKSxpW2YrK109dT4+MTh8MjQwLGlbZisrXT11Pj4xMiY2M3wxMjgsaVtmKytdPXU+PjYmNjN8MTI4LGlbZisrXT02MyZ1fDEyOCk6KGlbZisrXT11Pj4xMnwyMjQsaVtmKytdPXU+PjYmNjN8MTI4LGlbZisrXT02MyZ1fDEyOCl9ZWxzZSBmb3IoYz0wO2M8bC5sZW5ndGg7YysrKWlbY109MHxsW2NdO3JldHVybiBpfSxrLnRvSGV4PWZ1bmN0aW9uKGwpe2Zvcih2YXIgbj0iIixpPTA7aTxsLmxlbmd0aDtpKyspbis9dChsW2ldLnRvU3RyaW5nKDE2KSk7cmV0dXJuIG59LGsuaHRvbmw9cixrLnRvSGV4MzI9ZnVuY3Rpb24obCxuKXtmb3IodmFyIGk9IiIsZj0wO2Y8bC5sZW5ndGg7ZisrKXt2YXIgYz1sW2ZdO249PT0ibGl0dGxlIiYmKGM9cihjKSksaSs9ZShjLnRvU3RyaW5nKDE2KSl9cmV0dXJuIGl9LGsuemVybzI9dCxrLnplcm84PWUsay5qb2luMzI9ZnVuY3Rpb24obCxuLGksZil7dmFyIGM9aS1uO20oYyU0PT0wKTtmb3IodmFyIHU9bmV3IEFycmF5KGMvNCksZD0wLGg9bjtkPHUubGVuZ3RoO2QrKyxoKz00KXt2YXIgdzt3PWY9PT0iYmlnIj9sW2hdPDwyNHxsW2grMV08PDE2fGxbaCsyXTw8OHxsW2grM106bFtoKzNdPDwyNHxsW2grMl08PDE2fGxbaCsxXTw8OHxsW2hdLHVbZF09dz4+PjB9cmV0dXJuIHV9LGsuc3BsaXQzMj1mdW5jdGlvbihsLG4pe2Zvcih2YXIgaT1uZXcgQXJyYXkoNCpsLmxlbmd0aCksZj0wLGM9MDtmPGwubGVuZ3RoO2YrKyxjKz00KXt2YXIgdT1sW2ZdO249PT0iYmlnIj8oaVtjXT11Pj4+MjQsaVtjKzFdPXU+Pj4xNiYyNTUsaVtjKzJdPXU+Pj44JjI1NSxpW2MrM109MjU1JnUpOihpW2MrM109dT4+PjI0LGlbYysyXT11Pj4+MTYmMjU1LGlbYysxXT11Pj4+OCYyNTUsaVtjXT0yNTUmdSl9cmV0dXJuIGl9LGsucm90cjMyPWZ1bmN0aW9uKGwsbil7cmV0dXJuIGw+Pj5ufGw8PDMyLW59LGsucm90bDMyPWZ1bmN0aW9uKGwsbil7cmV0dXJuIGw8PG58bD4+PjMyLW59LGsuc3VtMzI9ZnVuY3Rpb24obCxuKXtyZXR1cm4gbCtuPj4+MH0say5zdW0zMl8zPWZ1bmN0aW9uKGwsbixpKXtyZXR1cm4gbCtuK2k+Pj4wfSxrLnN1bTMyXzQ9ZnVuY3Rpb24obCxuLGksZil7cmV0dXJuIGwrbitpK2Y+Pj4wfSxrLnN1bTMyXzU9ZnVuY3Rpb24obCxuLGksZixjKXtyZXR1cm4gbCtuK2krZitjPj4+MH0say5zdW02ND1mdW5jdGlvbihsLG4saSxmKXt2YXIgYz1sW25dLHU9ZitsW24rMV0+Pj4wLGQ9KHU8Zj8xOjApK2krYztsW25dPWQ+Pj4wLGxbbisxXT11fSxrLnN1bTY0X2hpPWZ1bmN0aW9uKGwsbixpLGYpe3JldHVybihuK2Y+Pj4wPG4/MTowKStsK2k+Pj4wfSxrLnN1bTY0X2xvPWZ1bmN0aW9uKGwsbixpLGYpe3JldHVybiBuK2Y+Pj4wfSxrLnN1bTY0XzRfaGk9ZnVuY3Rpb24obCxuLGksZixjLHUsZCxoKXt2YXIgdz0wLF89bjtyZXR1cm4gdys9KF89XytmPj4+MCk8bj8xOjAsdys9KF89Xyt1Pj4+MCk8dT8xOjAsbCtpK2MrZCsodys9KF89XytoPj4+MCk8aD8xOjApPj4+MH0say5zdW02NF80X2xvPWZ1bmN0aW9uKGwsbixpLGYsYyx1LGQsaCl7cmV0dXJuIG4rZit1K2g+Pj4wfSxrLnN1bTY0XzVfaGk9ZnVuY3Rpb24obCxuLGksZixjLHUsZCxoLHcsXyl7dmFyIEE9MCxQPW47cmV0dXJuIEErPShQPVArZj4+PjApPG4/MTowLEErPShQPVArdT4+PjApPHU/MTowLEErPShQPVAraD4+PjApPGg/MTowLGwraStjK2QrdysoQSs9KFA9UCtfPj4+MCk8Xz8xOjApPj4+MH0say5zdW02NF81X2xvPWZ1bmN0aW9uKGwsbixpLGYsYyx1LGQsaCx3LF8pe3JldHVybiBuK2YrdStoK18+Pj4wfSxrLnJvdHI2NF9oaT1mdW5jdGlvbihsLG4saSl7cmV0dXJuKG48PDMyLWl8bD4+PmkpPj4+MH0say5yb3RyNjRfbG89ZnVuY3Rpb24obCxuLGkpe3JldHVybihsPDwzMi1pfG4+Pj5pKT4+PjB9LGsuc2hyNjRfaGk9ZnVuY3Rpb24obCxuLGkpe3JldHVybiBsPj4+aX0say5zaHI2NF9sbz1mdW5jdGlvbihsLG4saSl7cmV0dXJuKGw8PDMyLWl8bj4+PmkpPj4+MH19LHtpbmhlcml0czo0NDAsIm1pbmltYWxpc3RpYy1hc3NlcnQiOjQ1M31dLDQzODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImhhc2guanMiKSxzPWEoIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHMiKSxvPWEoIm1pbmltYWxpc3RpYy1hc3NlcnQiKTtmdW5jdGlvbiByKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcih0KTt0aGlzLmhhc2g9dC5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXQucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dC5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgZT1zLnRvQXJyYXkodC5lbnRyb3B5LHQuZW50cm9weUVuY3x8ImhleCIpLGw9cy50b0FycmF5KHQubm9uY2UsdC5ub25jZUVuY3x8ImhleCIpLG49cy50b0FycmF5KHQucGVycyx0LnBlcnNFbmN8fCJoZXgiKTtvKGUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KGUsbCxuKX1FLmV4cG9ydHM9cixyLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUsbCl7dmFyIG49dC5jb25jYXQoZSkuY29uY2F0KGwpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sci5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG0uaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7dCYmKGU9ZS51cGRhdGUodCkpLHRoaXMuSz1lLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksdCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKHQpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxyLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24odCxlLGwsbil7dHlwZW9mIGUhPSJzdHJpbmciJiYobj1sLGw9ZSxlPW51bGwpLHQ9cy50b0FycmF5KHQsZSksbD1zLnRvQXJyYXkobCxuKSxvKHQubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUodC5jb25jYXQobHx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sci5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCxlLGwsbil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTt0eXBlb2YgZSE9InN0cmluZyImJihuPWwsbD1lLGU9bnVsbCksbCYmKGw9cy50b0FycmF5KGwsbnx8ImhleCIpLHRoaXMuX3VwZGF0ZShsKSk7Zm9yKHZhciBpPVtdO2kubGVuZ3RoPHQ7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksaT1pLmNvbmNhdCh0aGlzLlYpO3ZhciBmPWkuc2xpY2UoMCx0KTtyZXR1cm4gdGhpcy5fdXBkYXRlKGwpLHRoaXMuX3Jlc2VlZCsrLHMuZW5jb2RlKGYsZSl9fSx7Imhhc2guanMiOjQyNiwibWluaW1hbGlzdGljLWFzc2VydCI6NDUzLCJtaW5pbWFsaXN0aWMtY3J5cHRvLXV0aWxzIjo0NTR9XSw0Mzk6W2Z1bmN0aW9uKGEsRSxrKXsvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL2sucmVhZD1mdW5jdGlvbihtLHMsbyxyLHQpe3ZhciBlLGwsbj04KnQtci0xLGk9KDE8PG4pLTEsZj1pPj4xLGM9LTcsdT1vP3QtMTowLGQ9bz8tMToxLGg9bVtzK3VdO2Zvcih1Kz1kLGU9aCYoMTw8LWMpLTEsaD4+PS1jLGMrPW47Yz4wO2U9MjU2KmUrbVtzK3VdLHUrPWQsYy09OCk7Zm9yKGw9ZSYoMTw8LWMpLTEsZT4+PS1jLGMrPXI7Yz4wO2w9MjU2KmwrbVtzK3VdLHUrPWQsYy09OCk7aWYoZT09PTApZT0xLWY7ZWxzZXtpZihlPT09aSlyZXR1cm4gbD9OYU46MS8wKihoPy0xOjEpO2wrPU1hdGgucG93KDIsciksZS09Zn1yZXR1cm4oaD8tMToxKSpsKk1hdGgucG93KDIsZS1yKX0say53cml0ZT1mdW5jdGlvbihtLHMsbyxyLHQsZSl7dmFyIGwsbixpLGY9OCplLXQtMSxjPSgxPDxmKS0xLHU9Yz4+MSxkPXQ9PT0yMz9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsaD1yPzA6ZS0xLHc9cj8xOi0xLF89czwwfHxzPT09MCYmMS9zPDA/MTowO2ZvcihzPU1hdGguYWJzKHMpLGlzTmFOKHMpfHxzPT09MS8wPyhuPWlzTmFOKHMpPzE6MCxsPWMpOihsPU1hdGguZmxvb3IoTWF0aC5sb2cocykvTWF0aC5MTjIpLHMqKGk9TWF0aC5wb3coMiwtbCkpPDEmJihsLS0saSo9MiksKHMrPWwrdT49MT9kL2k6ZCpNYXRoLnBvdygyLDEtdSkpKmk+PTImJihsKyssaS89MiksbCt1Pj1jPyhuPTAsbD1jKTpsK3U+PTE/KG49KHMqaS0xKSpNYXRoLnBvdygyLHQpLGwrPXUpOihuPXMqTWF0aC5wb3coMix1LTEpKk1hdGgucG93KDIsdCksbD0wKSk7dD49ODttW28raF09MjU1Jm4saCs9dyxuLz0yNTYsdC09OCk7Zm9yKGw9bDw8dHxuLGYrPXQ7Zj4wO21bbytoXT0yNTUmbCxoKz13LGwvPTI1NixmLT04KTttW28raC13XXw9MTI4Kl99fSx7fV0sNDQwOltmdW5jdGlvbihhLEUsayl7dHlwZW9mIE9iamVjdC5jcmVhdGU9PSJmdW5jdGlvbiI/RS5leHBvcnRzPWZ1bmN0aW9uKG0scyl7cyYmKG0uc3VwZXJfPXMsbS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOm0sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpFLmV4cG9ydHM9ZnVuY3Rpb24obSxzKXtpZihzKXttLnN1cGVyXz1zO3ZhciBvPWZ1bmN0aW9uKCl7fTtvLnByb3RvdHlwZT1zLnByb3RvdHlwZSxtLnByb3RvdHlwZT1uZXcgbyxtLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1tfX19LHt9XSw0NDE6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSxzLG8scix0LGUsbCxuKXsoZnVuY3Rpb24oKXsvKiEKCgkJSlNaaXAgdjMuMTAuMSAtIEEgSmF2YVNjcmlwdCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBhbmQgcmVhZGluZyB6aXAgZmlsZXMKCQk8aHR0cDovL3N0dWFydGsuY29tL2pzemlwPgoKCQkoYykgMjAwOS0yMDE2IFN0dWFydCBLbmlnaHRsZXkgPHN0dWFydCBbYXRdIHN0dWFydGsuY29tPgoJCUR1YWwgbGljZW5jZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIG9yIEdQTHYzLiBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9TdHVrL2pzemlwL21haW4vTElDRU5TRS5tYXJrZG93bi4KCgkJSlNaaXAgdXNlcyB0aGUgbGlicmFyeSBwYWtvIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSA6CgkJaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9wYWtvL2Jsb2IvbWFpbi9MSUNFTlNFCgkJKi8oZnVuY3Rpb24oaSl7dHlwZW9mIGs9PSJvYmplY3QiJiZFIT09dm9pZCAwP0UuZXhwb3J0cz1pKCk6KHR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpzIT09dm9pZCAwP3M6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykuSlNaaXA9aSgpfSkoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gaShmLGMsdSl7ZnVuY3Rpb24gZChfLEEpe2lmKCFjW19dKXtpZighZltfXSl7dmFyIFA9dHlwZW9mIGE9PSJmdW5jdGlvbiImJmE7aWYoIUEmJlApcmV0dXJuIFAoXywhMCk7aWYoaClyZXR1cm4gaChfLCEwKTt2YXIgTD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitfKyInIik7dGhyb3cgTC5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixMfXZhciBOPWNbX109e2V4cG9ydHM6e319O2ZbX11bMF0uY2FsbChOLmV4cG9ydHMsZnVuY3Rpb24oRCl7cmV0dXJuIGQoZltfXVsxXVtEXXx8RCl9LE4sTi5leHBvcnRzLGksZixjLHUpfXJldHVybiBjW19dLmV4cG9ydHN9Zm9yKHZhciBoPXR5cGVvZiBhPT0iZnVuY3Rpb24iJiZhLHc9MDt3PHUubGVuZ3RoO3crKylkKHVbd10pO3JldHVybiBkfSh7MTpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4vdXRpbHMiKSxkPWkoIi4vc3VwcG9ydCIpLGg9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtjLmVuY29kZT1mdW5jdGlvbih3KXtmb3IodmFyIF8sQSxQLEwsTixELEYsVT1bXSxCPTAsUz13Lmxlbmd0aCxDPVMsdj11LmdldFR5cGVPZih3KSE9PSJzdHJpbmciO0I8dy5sZW5ndGg7KUM9Uy1CLFA9dj8oXz13W0IrK10sQT1CPFM/d1tCKytdOjAsQjxTP3dbQisrXTowKTooXz13LmNoYXJDb2RlQXQoQisrKSxBPUI8Uz93LmNoYXJDb2RlQXQoQisrKTowLEI8Uz93LmNoYXJDb2RlQXQoQisrKTowKSxMPV8+PjIsTj0oMyZfKTw8NHxBPj40LEQ9MTxDPygxNSZBKTw8MnxQPj42OjY0LEY9MjxDPzYzJlA6NjQsVS5wdXNoKGguY2hhckF0KEwpK2guY2hhckF0KE4pK2guY2hhckF0KEQpK2guY2hhckF0KEYpKTtyZXR1cm4gVS5qb2luKCIiKX0sYy5kZWNvZGU9ZnVuY3Rpb24odyl7dmFyIF8sQSxQLEwsTixELEY9MCxVPTAsQj0iZGF0YToiO2lmKHcuc3Vic3RyKDAsQi5sZW5ndGgpPT09Qil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYmFzZTY0IGlucHV0LCBpdCBsb29rcyBsaWtlIGEgZGF0YSB1cmwuIik7dmFyIFMsQz0zKih3PXcucmVwbGFjZSgvW15BLVphLXowLTkrLz1dL2csIiIpKS5sZW5ndGgvNDtpZih3LmNoYXJBdCh3Lmxlbmd0aC0xKT09PWguY2hhckF0KDY0KSYmQy0tLHcuY2hhckF0KHcubGVuZ3RoLTIpPT09aC5jaGFyQXQoNjQpJiZDLS0sQyUxIT0wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBiYXNlNjQgaW5wdXQsIGJhZCBjb250ZW50IGxlbmd0aC4iKTtmb3IoUz1kLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoMHxDKTpuZXcgQXJyYXkoMHxDKTtGPHcubGVuZ3RoOylfPWguaW5kZXhPZih3LmNoYXJBdChGKyspKTw8MnwoTD1oLmluZGV4T2Yody5jaGFyQXQoRisrKSkpPj40LEE9KDE1JkwpPDw0fChOPWguaW5kZXhPZih3LmNoYXJBdChGKyspKSk+PjIsUD0oMyZOKTw8NnwoRD1oLmluZGV4T2Yody5jaGFyQXQoRisrKSkpLFNbVSsrXT1fLE4hPT02NCYmKFNbVSsrXT1BKSxEIT09NjQmJihTW1UrK109UCk7cmV0dXJuIFN9fSx7Ii4vc3VwcG9ydCI6MzAsIi4vdXRpbHMiOjMyfV0sMjpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4vZXh0ZXJuYWwiKSxkPWkoIi4vc3RyZWFtL0RhdGFXb3JrZXIiKSxoPWkoIi4vc3RyZWFtL0NyYzMyUHJvYmUiKSx3PWkoIi4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZSIpO2Z1bmN0aW9uIF8oQSxQLEwsTixEKXt0aGlzLmNvbXByZXNzZWRTaXplPUEsdGhpcy51bmNvbXByZXNzZWRTaXplPVAsdGhpcy5jcmMzMj1MLHRoaXMuY29tcHJlc3Npb249Tix0aGlzLmNvbXByZXNzZWRDb250ZW50PUR9Xy5wcm90b3R5cGU9e2dldENvbnRlbnRXb3JrZXI6ZnVuY3Rpb24oKXt2YXIgQT1uZXcgZCh1LlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXByZXNzZWRDb250ZW50KSkucGlwZSh0aGlzLmNvbXByZXNzaW9uLnVuY29tcHJlc3NXb3JrZXIoKSkucGlwZShuZXcgdygiZGF0YV9sZW5ndGgiKSksUD10aGlzO3JldHVybiBBLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYodGhpcy5zdHJlYW1JbmZvLmRhdGFfbGVuZ3RoIT09UC51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpfSksQX0sZ2V0Q29tcHJlc3NlZFdvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgZCh1LlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXByZXNzZWRDb250ZW50KSkud2l0aFN0cmVhbUluZm8oImNvbXByZXNzZWRTaXplIix0aGlzLmNvbXByZXNzZWRTaXplKS53aXRoU3RyZWFtSW5mbygidW5jb21wcmVzc2VkU2l6ZSIsdGhpcy51bmNvbXByZXNzZWRTaXplKS53aXRoU3RyZWFtSW5mbygiY3JjMzIiLHRoaXMuY3JjMzIpLndpdGhTdHJlYW1JbmZvKCJjb21wcmVzc2lvbiIsdGhpcy5jb21wcmVzc2lvbil9fSxfLmNyZWF0ZVdvcmtlckZyb209ZnVuY3Rpb24oQSxQLEwpe3JldHVybiBBLnBpcGUobmV3IGgpLnBpcGUobmV3IHcoInVuY29tcHJlc3NlZFNpemUiKSkucGlwZShQLmNvbXByZXNzV29ya2VyKEwpKS5waXBlKG5ldyB3KCJjb21wcmVzc2VkU2l6ZSIpKS53aXRoU3RyZWFtSW5mbygiY29tcHJlc3Npb24iLFApfSxmLmV4cG9ydHM9X30seyIuL2V4dGVybmFsIjo2LCIuL3N0cmVhbS9DcmMzMlByb2JlIjoyNSwiLi9zdHJlYW0vRGF0YUxlbmd0aFByb2JlIjoyNiwiLi9zdHJlYW0vRGF0YVdvcmtlciI6Mjd9XSwzOltmdW5jdGlvbihpLGYsYyl7dmFyIHU9aSgiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciIpO2MuU1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgdSgiU1RPUkUgY29tcHJlc3Npb24iKX0sdW5jb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgdSgiU1RPUkUgZGVjb21wcmVzc2lvbiIpfX0sYy5ERUZMQVRFPWkoIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo3LCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOH1dLDQ6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuL3V0aWxzIiksZD1mdW5jdGlvbigpe2Zvcih2YXIgaCx3PVtdLF89MDtfPDI1NjtfKyspe2g9Xztmb3IodmFyIEE9MDtBPDg7QSsrKWg9MSZoPzM5ODgyOTIzODReaD4+PjE6aD4+PjE7d1tfXT1ofXJldHVybiB3fSgpO2YuZXhwb3J0cz1mdW5jdGlvbihoLHcpe3JldHVybiBoIT09dm9pZCAwJiZoLmxlbmd0aD91LmdldFR5cGVPZihoKSE9PSJzdHJpbmciP2Z1bmN0aW9uKF8sQSxQLEwpe3ZhciBOPWQsRD0wK1A7X149LTE7Zm9yKHZhciBGPTA7RjxEO0YrKylfPV8+Pj44Xk5bMjU1JihfXkFbRl0pXTtyZXR1cm4tMV5ffSgwfHcsaCxoLmxlbmd0aCk6ZnVuY3Rpb24oXyxBLFAsTCl7dmFyIE49ZCxEPTArUDtfXj0tMTtmb3IodmFyIEY9MDtGPEQ7RisrKV89Xz4+PjheTlsyNTUmKF9eQS5jaGFyQ29kZUF0KEYpKV07cmV0dXJuLTFeX30oMHx3LGgsaC5sZW5ndGgpOjB9fSx7Ii4vdXRpbHMiOjMyfV0sNTpbZnVuY3Rpb24oaSxmLGMpe2MuYmFzZTY0PSExLGMuYmluYXJ5PSExLGMuZGlyPSExLGMuY3JlYXRlRm9sZGVycz0hMCxjLmRhdGU9bnVsbCxjLmNvbXByZXNzaW9uPW51bGwsYy5jb21wcmVzc2lvbk9wdGlvbnM9bnVsbCxjLmNvbW1lbnQ9bnVsbCxjLnVuaXhQZXJtaXNzaW9ucz1udWxsLGMuZG9zUGVybWlzc2lvbnM9bnVsbH0se31dLDY6W2Z1bmN0aW9uKGksZixjKXt2YXIgdTt1PXR5cGVvZiBQcm9taXNlPCJ1Ij9Qcm9taXNlOmkoImxpZSIpLGYuZXhwb3J0cz17UHJvbWlzZTp1fX0se2xpZTozN31dLDc6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsZD1pKCJwYWtvIiksaD1pKCIuL3V0aWxzIiksdz1pKCIuL3N0cmVhbS9HZW5lcmljV29ya2VyIiksXz11PyJ1aW50OGFycmF5IjoiYXJyYXkiO2Z1bmN0aW9uIEEoUCxMKXt3LmNhbGwodGhpcywiRmxhdGVXb3JrZXIvIitQKSx0aGlzLl9wYWtvPW51bGwsdGhpcy5fcGFrb0FjdGlvbj1QLHRoaXMuX3Bha29PcHRpb25zPUwsdGhpcy5tZXRhPXt9fWMubWFnaWM9IlxiXDAiLGguaW5oZXJpdHMoQSx3KSxBLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oUCl7dGhpcy5tZXRhPVAubWV0YSx0aGlzLl9wYWtvPT09bnVsbCYmdGhpcy5fY3JlYXRlUGFrbygpLHRoaXMuX3Bha28ucHVzaChoLnRyYW5zZm9ybVRvKF8sUC5kYXRhKSwhMSl9LEEucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7dy5wcm90b3R5cGUuZmx1c2guY2FsbCh0aGlzKSx0aGlzLl9wYWtvPT09bnVsbCYmdGhpcy5fY3JlYXRlUGFrbygpLHRoaXMuX3Bha28ucHVzaChbXSwhMCl9LEEucHJvdG90eXBlLmNsZWFuVXA9ZnVuY3Rpb24oKXt3LnByb3RvdHlwZS5jbGVhblVwLmNhbGwodGhpcyksdGhpcy5fcGFrbz1udWxsfSxBLnByb3RvdHlwZS5fY3JlYXRlUGFrbz1mdW5jdGlvbigpe3RoaXMuX3Bha289bmV3IGRbdGhpcy5fcGFrb0FjdGlvbl0oe3JhdzohMCxsZXZlbDp0aGlzLl9wYWtvT3B0aW9ucy5sZXZlbHx8LTF9KTt2YXIgUD10aGlzO3RoaXMuX3Bha28ub25EYXRhPWZ1bmN0aW9uKEwpe1AucHVzaCh7ZGF0YTpMLG1ldGE6UC5tZXRhfSl9fSxjLmNvbXByZXNzV29ya2VyPWZ1bmN0aW9uKFApe3JldHVybiBuZXcgQSgiRGVmbGF0ZSIsUCl9LGMudW5jb21wcmVzc1dvcmtlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgQSgiSW5mbGF0ZSIse30pfX0seyIuL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi91dGlscyI6MzIscGFrbzozOH1dLDg6W2Z1bmN0aW9uKGksZixjKXtmdW5jdGlvbiB1KE4sRCl7dmFyIEYsVT0iIjtmb3IoRj0wO0Y8RDtGKyspVSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmTiksTj4+Pj04O3JldHVybiBVfWZ1bmN0aW9uIGQoTixELEYsVSxCLFMpe3ZhciBDLHYscD1OLmZpbGUsYj1OLmNvbXByZXNzaW9uLGc9UyE9PV8udXRmOGVuY29kZSx5PWgudHJhbnNmb3JtVG8oInN0cmluZyIsUyhwLm5hbWUpKSxNPWgudHJhbnNmb3JtVG8oInN0cmluZyIsXy51dGY4ZW5jb2RlKHAubmFtZSkpLE89cC5jb21tZW50LFI9aC50cmFuc2Zvcm1Ubygic3RyaW5nIixTKE8pKSx6PWgudHJhbnNmb3JtVG8oInN0cmluZyIsXy51dGY4ZW5jb2RlKE8pKSwkPU0ubGVuZ3RoIT09cC5uYW1lLmxlbmd0aCxYPXoubGVuZ3RoIT09Ty5sZW5ndGgsaj0iIixXPSIiLFQ9IiIseD1wLmRpcixJPXAuZGF0ZSxIPXtjcmMzMjowLGNvbXByZXNzZWRTaXplOjAsdW5jb21wcmVzc2VkU2l6ZTowfTtEJiYhRnx8KEguY3JjMzI9Ti5jcmMzMixILmNvbXByZXNzZWRTaXplPU4uY29tcHJlc3NlZFNpemUsSC51bmNvbXByZXNzZWRTaXplPU4udW5jb21wcmVzc2VkU2l6ZSk7dmFyIFo9MDtEJiYoWnw9OCksZ3x8ISQmJiFYfHwoWnw9MjA0OCk7dmFyIFY9MCxLPTA7eCYmKFZ8PTE2KSxCPT09IlVOSVgiPyhLPTc5OCxWfD1mdW5jdGlvbihKLHEpe3ZhciBHPUo7cmV0dXJuIEp8fChHPXE/MTY4OTM6MzMyMDQpLCg2NTUzNSZHKTw8MTZ9KHAudW5peFBlcm1pc3Npb25zLHgpKTooSz0yMCxWfD1mdW5jdGlvbihKKXtyZXR1cm4gNjMmKEp8fDApfShwLmRvc1Blcm1pc3Npb25zKSksQz1JLmdldFVUQ0hvdXJzKCksQzw8PTYsQ3w9SS5nZXRVVENNaW51dGVzKCksQzw8PTUsQ3w9SS5nZXRVVENTZWNvbmRzKCkvMix2PUkuZ2V0VVRDRnVsbFllYXIoKS0xOTgwLHY8PD00LHZ8PUkuZ2V0VVRDTW9udGgoKSsxLHY8PD01LHZ8PUkuZ2V0VVRDRGF0ZSgpLCQmJihXPXUoMSwxKSt1KEEoeSksNCkrTSxqKz0idXAiK3UoVy5sZW5ndGgsMikrVyksWCYmKFQ9dSgxLDEpK3UoQShSKSw0KSt6LGorPSJ1YyIrdShULmxlbmd0aCwyKStUKTt2YXIgWT0iIjtyZXR1cm4gWSs9YApcMGAsWSs9dShaLDIpLFkrPWIubWFnaWMsWSs9dShDLDIpLFkrPXUodiwyKSxZKz11KEguY3JjMzIsNCksWSs9dShILmNvbXByZXNzZWRTaXplLDQpLFkrPXUoSC51bmNvbXByZXNzZWRTaXplLDQpLFkrPXUoeS5sZW5ndGgsMiksWSs9dShqLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpQLkxPQ0FMX0ZJTEVfSEVBREVSK1kreStqLGRpclJlY29yZDpQLkNFTlRSQUxfRklMRV9IRUFERVIrdShLLDIpK1krdShSLmxlbmd0aCwyKSsiXDBcMFwwXDAiK3UoViw0KSt1KFUsNCkreStqK1J9fXZhciBoPWkoIi4uL3V0aWxzIiksdz1pKCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlciIpLF89aSgiLi4vdXRmOCIpLEE9aSgiLi4vY3JjMzIiKSxQPWkoIi4uL3NpZ25hdHVyZSIpO2Z1bmN0aW9uIEwoTixELEYsVSl7dy5jYWxsKHRoaXMsIlppcEZpbGVXb3JrZXIiKSx0aGlzLmJ5dGVzV3JpdHRlbj0wLHRoaXMuemlwQ29tbWVudD1ELHRoaXMuemlwUGxhdGZvcm09Rix0aGlzLmVuY29kZUZpbGVOYW1lPVUsdGhpcy5zdHJlYW1GaWxlcz1OLHRoaXMuYWNjdW11bGF0ZT0hMSx0aGlzLmNvbnRlbnRCdWZmZXI9W10sdGhpcy5kaXJSZWNvcmRzPVtdLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldD0wLHRoaXMuZW50cmllc0NvdW50PTAsdGhpcy5jdXJyZW50RmlsZT1udWxsLHRoaXMuX3NvdXJjZXM9W119aC5pbmhlcml0cyhMLHcpLEwucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTil7dmFyIEQ9Ti5tZXRhLnBlcmNlbnR8fDAsRj10aGlzLmVudHJpZXNDb3VudCxVPXRoaXMuX3NvdXJjZXMubGVuZ3RoO3RoaXMuYWNjdW11bGF0ZT90aGlzLmNvbnRlbnRCdWZmZXIucHVzaChOKToodGhpcy5ieXRlc1dyaXR0ZW4rPU4uZGF0YS5sZW5ndGgsdy5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMse2RhdGE6Ti5kYXRhLG1ldGE6e2N1cnJlbnRGaWxlOnRoaXMuY3VycmVudEZpbGUscGVyY2VudDpGPyhEKzEwMCooRi1VLTEpKS9GOjEwMH19KSl9LEwucHJvdG90eXBlLm9wZW5lZFNvdXJjZT1mdW5jdGlvbihOKXt0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQ9dGhpcy5ieXRlc1dyaXR0ZW4sdGhpcy5jdXJyZW50RmlsZT1OLmZpbGUubmFtZTt2YXIgRD10aGlzLnN0cmVhbUZpbGVzJiYhTi5maWxlLmRpcjtpZihEKXt2YXIgRj1kKE4sRCwhMSx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6Ri5maWxlUmVjb3JkLG1ldGE6e3BlcmNlbnQ6MH19KX1lbHNlIHRoaXMuYWNjdW11bGF0ZT0hMH0sTC5wcm90b3R5cGUuY2xvc2VkU291cmNlPWZ1bmN0aW9uKE4pe3RoaXMuYWNjdW11bGF0ZT0hMTt2YXIgRD10aGlzLnN0cmVhbUZpbGVzJiYhTi5maWxlLmRpcixGPWQoTixELCEwLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO2lmKHRoaXMuZGlyUmVjb3Jkcy5wdXNoKEYuZGlyUmVjb3JkKSxEKXRoaXMucHVzaCh7ZGF0YTpmdW5jdGlvbihVKXtyZXR1cm4gUC5EQVRBX0RFU0NSSVBUT1IrdShVLmNyYzMyLDQpK3UoVS5jb21wcmVzc2VkU2l6ZSw0KSt1KFUudW5jb21wcmVzc2VkU2l6ZSw0KX0oTiksbWV0YTp7cGVyY2VudDoxMDB9fSk7ZWxzZSBmb3IodGhpcy5wdXNoKHtkYXRhOkYuZmlsZVJlY29yZCxtZXRhOntwZXJjZW50OjB9fSk7dGhpcy5jb250ZW50QnVmZmVyLmxlbmd0aDspdGhpcy5wdXNoKHRoaXMuY29udGVudEJ1ZmZlci5zaGlmdCgpKTt0aGlzLmN1cnJlbnRGaWxlPW51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBOPXRoaXMuYnl0ZXNXcml0dGVuLEQ9MDtEPHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGg7RCsrKXRoaXMucHVzaCh7ZGF0YTp0aGlzLmRpclJlY29yZHNbRF0sbWV0YTp7cGVyY2VudDoxMDB9fSk7dmFyIEY9dGhpcy5ieXRlc1dyaXR0ZW4tTixVPWZ1bmN0aW9uKEIsUyxDLHYscCl7dmFyIGI9aC50cmFuc2Zvcm1Ubygic3RyaW5nIixwKHYpKTtyZXR1cm4gUC5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlwwXDBcMFwwIit1KEIsMikrdShCLDIpK3UoUyw0KSt1KEMsNCkrdShiLmxlbmd0aCwyKStifSh0aGlzLmRpclJlY29yZHMubGVuZ3RoLEYsTix0aGlzLnppcENvbW1lbnQsdGhpcy5lbmNvZGVGaWxlTmFtZSk7dGhpcy5wdXNoKHtkYXRhOlUsbWV0YTp7cGVyY2VudDoxMDB9fSl9LEwucHJvdG90eXBlLnByZXBhcmVOZXh0U291cmNlPWZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLl9zb3VyY2VzLnNoaWZ0KCksdGhpcy5vcGVuZWRTb3VyY2UodGhpcy5wcmV2aW91cy5zdHJlYW1JbmZvKSx0aGlzLmlzUGF1c2VkP3RoaXMucHJldmlvdXMucGF1c2UoKTp0aGlzLnByZXZpb3VzLnJlc3VtZSgpfSxMLnByb3RvdHlwZS5yZWdpc3RlclByZXZpb3VzPWZ1bmN0aW9uKE4pe3RoaXMuX3NvdXJjZXMucHVzaChOKTt2YXIgRD10aGlzO3JldHVybiBOLm9uKCJkYXRhIixmdW5jdGlvbihGKXtELnByb2Nlc3NDaHVuayhGKX0pLE4ub24oImVuZCIsZnVuY3Rpb24oKXtELmNsb3NlZFNvdXJjZShELnByZXZpb3VzLnN0cmVhbUluZm8pLEQuX3NvdXJjZXMubGVuZ3RoP0QucHJlcGFyZU5leHRTb3VyY2UoKTpELmVuZCgpfSksTi5vbigiZXJyb3IiLGZ1bmN0aW9uKEYpe0QuZXJyb3IoRil9KSx0aGlzfSxMLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4hIXcucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpJiYoIXRoaXMucHJldmlvdXMmJnRoaXMuX3NvdXJjZXMubGVuZ3RoPyh0aGlzLnByZXBhcmVOZXh0U291cmNlKCksITApOnRoaXMucHJldmlvdXN8fHRoaXMuX3NvdXJjZXMubGVuZ3RofHx0aGlzLmdlbmVyYXRlZEVycm9yP3ZvaWQgMDoodGhpcy5lbmQoKSwhMCkpfSxMLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihOKXt2YXIgRD10aGlzLl9zb3VyY2VzO2lmKCF3LnByb3RvdHlwZS5lcnJvci5jYWxsKHRoaXMsTikpcmV0dXJuITE7Zm9yKHZhciBGPTA7RjxELmxlbmd0aDtGKyspdHJ5e0RbRl0uZXJyb3IoTil9Y2F0Y2h7fXJldHVybiEwfSxMLnByb3RvdHlwZS5sb2NrPWZ1bmN0aW9uKCl7dy5wcm90b3R5cGUubG9jay5jYWxsKHRoaXMpO2Zvcih2YXIgTj10aGlzLl9zb3VyY2VzLEQ9MDtEPE4ubGVuZ3RoO0QrKylOW0RdLmxvY2soKX0sZi5leHBvcnRzPUx9LHsiLi4vY3JjMzIiOjQsIi4uL3NpZ25hdHVyZSI6MjMsIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyIjoyOCwiLi4vdXRmOCI6MzEsIi4uL3V0aWxzIjozMn1dLDk6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuLi9jb21wcmVzc2lvbnMiKSxkPWkoIi4vWmlwRmlsZVdvcmtlciIpO2MuZ2VuZXJhdGVXb3JrZXI9ZnVuY3Rpb24oaCx3LF8pe3ZhciBBPW5ldyBkKHcuc3RyZWFtRmlsZXMsXyx3LnBsYXRmb3JtLHcuZW5jb2RlRmlsZU5hbWUpLFA9MDt0cnl7aC5mb3JFYWNoKGZ1bmN0aW9uKEwsTil7UCsrO3ZhciBEPWZ1bmN0aW9uKFMsQyl7dmFyIHY9U3x8QyxwPXVbdl07aWYoIXApdGhyb3cgbmV3IEVycm9yKHYrIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3JldHVybiBwfShOLm9wdGlvbnMuY29tcHJlc3Npb24sdy5jb21wcmVzc2lvbiksRj1OLm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zfHx3LmNvbXByZXNzaW9uT3B0aW9uc3x8e30sVT1OLmRpcixCPU4uZGF0ZTtOLl9jb21wcmVzc1dvcmtlcihELEYpLndpdGhTdHJlYW1JbmZvKCJmaWxlIix7bmFtZTpMLGRpcjpVLGRhdGU6Qixjb21tZW50Ok4uY29tbWVudHx8IiIsdW5peFBlcm1pc3Npb25zOk4udW5peFBlcm1pc3Npb25zLGRvc1Blcm1pc3Npb25zOk4uZG9zUGVybWlzc2lvbnN9KS5waXBlKEEpfSksQS5lbnRyaWVzQ291bnQ9UH1jYXRjaChMKXtBLmVycm9yKEwpfXJldHVybiBBfX0seyIuLi9jb21wcmVzc2lvbnMiOjMsIi4vWmlwRmlsZVdvcmtlciI6OH1dLDEwOltmdW5jdGlvbihpLGYsYyl7ZnVuY3Rpb24gdSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdTtpZihhcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGNvbnN0cnVjdG9yIHdpdGggcGFyYW1ldGVycyBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLiIpO3RoaXMuZmlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBkPW5ldyB1O2Zvcih2YXIgaCBpbiB0aGlzKXR5cGVvZiB0aGlzW2hdIT0iZnVuY3Rpb24iJiYoZFtoXT10aGlzW2hdKTtyZXR1cm4gZH19KHUucHJvdG90eXBlPWkoIi4vb2JqZWN0IikpLmxvYWRBc3luYz1pKCIuL2xvYWQiKSx1LnN1cHBvcnQ9aSgiLi9zdXBwb3J0IiksdS5kZWZhdWx0cz1pKCIuL2RlZmF1bHRzIiksdS52ZXJzaW9uPSIzLjEwLjEiLHUubG9hZEFzeW5jPWZ1bmN0aW9uKGQsaCl7cmV0dXJuIG5ldyB1KCkubG9hZEFzeW5jKGQsaCl9LHUuZXh0ZXJuYWw9aSgiLi9leHRlcm5hbCIpLGYuZXhwb3J0cz11fSx7Ii4vZGVmYXVsdHMiOjUsIi4vZXh0ZXJuYWwiOjYsIi4vbG9hZCI6MTEsIi4vb2JqZWN0IjoxNSwiLi9zdXBwb3J0IjozMH1dLDExOltmdW5jdGlvbihpLGYsYyl7dmFyIHU9aSgiLi91dGlscyIpLGQ9aSgiLi9leHRlcm5hbCIpLGg9aSgiLi91dGY4Iiksdz1pKCIuL3ppcEVudHJpZXMiKSxfPWkoIi4vc3RyZWFtL0NyYzMyUHJvYmUiKSxBPWkoIi4vbm9kZWpzVXRpbHMiKTtmdW5jdGlvbiBQKEwpe3JldHVybiBuZXcgZC5Qcm9taXNlKGZ1bmN0aW9uKE4sRCl7dmFyIEY9TC5kZWNvbXByZXNzZWQuZ2V0Q29udGVudFdvcmtlcigpLnBpcGUobmV3IF8pO0Yub24oImVycm9yIixmdW5jdGlvbihVKXtEKFUpfSkub24oImVuZCIsZnVuY3Rpb24oKXtGLnN0cmVhbUluZm8uY3JjMzIhPT1MLmRlY29tcHJlc3NlZC5jcmMzMj9EKG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIikpOk4oKX0pLnJlc3VtZSgpfSl9Zi5leHBvcnRzPWZ1bmN0aW9uKEwsTil7dmFyIEQ9dGhpcztyZXR1cm4gTj11LmV4dGVuZChOfHx7fSx7YmFzZTY0OiExLGNoZWNrQ1JDMzI6ITEsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiExLGNyZWF0ZUZvbGRlcnM6ITEsZGVjb2RlRmlsZU5hbWU6aC51dGY4ZGVjb2RlfSksQS5pc05vZGUmJkEuaXNTdHJlYW0oTCk/ZC5Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkpTWmlwIGNhbid0IGFjY2VwdCBhIHN0cmVhbSB3aGVuIGxvYWRpbmcgYSB6aXAgZmlsZS4iKSk6dS5wcmVwYXJlQ29udGVudCgidGhlIGxvYWRlZCB6aXAgZmlsZSIsTCwhMCxOLm9wdGltaXplZEJpbmFyeVN0cmluZyxOLmJhc2U2NCkudGhlbihmdW5jdGlvbihGKXt2YXIgVT1uZXcgdyhOKTtyZXR1cm4gVS5sb2FkKEYpLFV9KS50aGVuKGZ1bmN0aW9uKEYpe3ZhciBVPVtkLlByb21pc2UucmVzb2x2ZShGKV0sQj1GLmZpbGVzO2lmKE4uY2hlY2tDUkMzMilmb3IodmFyIFM9MDtTPEIubGVuZ3RoO1MrKylVLnB1c2goUChCW1NdKSk7cmV0dXJuIGQuUHJvbWlzZS5hbGwoVSl9KS50aGVuKGZ1bmN0aW9uKEYpe2Zvcih2YXIgVT1GLnNoaWZ0KCksQj1VLmZpbGVzLFM9MDtTPEIubGVuZ3RoO1MrKyl7dmFyIEM9QltTXSx2PUMuZmlsZU5hbWVTdHIscD11LnJlc29sdmUoQy5maWxlTmFtZVN0cik7RC5maWxlKHAsQy5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTpDLmRhdGUsZGlyOkMuZGlyLGNvbW1lbnQ6Qy5maWxlQ29tbWVudFN0ci5sZW5ndGg/Qy5maWxlQ29tbWVudFN0cjpudWxsLHVuaXhQZXJtaXNzaW9uczpDLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczpDLmRvc1Blcm1pc3Npb25zLGNyZWF0ZUZvbGRlcnM6Ti5jcmVhdGVGb2xkZXJzfSksQy5kaXJ8fChELmZpbGUocCkudW5zYWZlT3JpZ2luYWxOYW1lPXYpfXJldHVybiBVLnppcENvbW1lbnQubGVuZ3RoJiYoRC5jb21tZW50PVUuemlwQ29tbWVudCksRH0pfX0seyIuL2V4dGVybmFsIjo2LCIuL25vZGVqc1V0aWxzIjoxNCwiLi9zdHJlYW0vQ3JjMzJQcm9iZSI6MjUsIi4vdXRmOCI6MzEsIi4vdXRpbHMiOjMyLCIuL3ppcEVudHJpZXMiOjMzfV0sMTI6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuLi91dGlscyIpLGQ9aSgiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKTtmdW5jdGlvbiBoKHcsXyl7ZC5jYWxsKHRoaXMsIk5vZGVqcyBzdHJlYW0gaW5wdXQgYWRhcHRlciBmb3IgIit3KSx0aGlzLl91cHN0cmVhbUVuZGVkPSExLHRoaXMuX2JpbmRTdHJlYW0oXyl9dS5pbmhlcml0cyhoLGQpLGgucHJvdG90eXBlLl9iaW5kU3RyZWFtPWZ1bmN0aW9uKHcpe3ZhciBfPXRoaXM7KHRoaXMuX3N0cmVhbT13KS5wYXVzZSgpLHcub24oImRhdGEiLGZ1bmN0aW9uKEEpe18ucHVzaCh7ZGF0YTpBLG1ldGE6e3BlcmNlbnQ6MH19KX0pLm9uKCJlcnJvciIsZnVuY3Rpb24oQSl7Xy5pc1BhdXNlZD90aGlzLmdlbmVyYXRlZEVycm9yPUE6Xy5lcnJvcihBKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Xy5pc1BhdXNlZD9fLl91cHN0cmVhbUVuZGVkPSEwOl8uZW5kKCl9KX0saC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWQucHJvdG90eXBlLnBhdXNlLmNhbGwodGhpcykmJih0aGlzLl9zdHJlYW0ucGF1c2UoKSwhMCl9LGgucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhZC5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJih0aGlzLl91cHN0cmVhbUVuZGVkP3RoaXMuZW5kKCk6dGhpcy5fc3RyZWFtLnJlc3VtZSgpLCEwKX0sZi5leHBvcnRzPWh9LHsiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiOjI4LCIuLi91dGlscyI6MzJ9XSwxMzpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoInJlYWRhYmxlLXN0cmVhbSIpLlJlYWRhYmxlO2Z1bmN0aW9uIGQoaCx3LF8pe3UuY2FsbCh0aGlzLHcpLHRoaXMuX2hlbHBlcj1oO3ZhciBBPXRoaXM7aC5vbigiZGF0YSIsZnVuY3Rpb24oUCxMKXtBLnB1c2goUCl8fEEuX2hlbHBlci5wYXVzZSgpLF8mJl8oTCl9KS5vbigiZXJyb3IiLGZ1bmN0aW9uKFApe0EuZW1pdCgiZXJyb3IiLFApfSkub24oImVuZCIsZnVuY3Rpb24oKXtBLnB1c2gobnVsbCl9KX1pKCIuLi91dGlscyIpLmluaGVyaXRzKGQsdSksZC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oKXt0aGlzLl9oZWxwZXIucmVzdW1lKCl9LGYuZXhwb3J0cz1kfSx7Ii4uL3V0aWxzIjozMiwicmVhZGFibGUtc3RyZWFtIjoxNn1dLDE0OltmdW5jdGlvbihpLGYsYyl7Zi5leHBvcnRzPXtpc05vZGU6byE9PXZvaWQgMCxuZXdCdWZmZXJGcm9tOmZ1bmN0aW9uKHUsZCl7aWYoby5mcm9tJiZvLmZyb20hPT1VaW50OEFycmF5LmZyb20pcmV0dXJuIG8uZnJvbSh1LGQpO2lmKHR5cGVvZiB1PT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4gbmV3IG8odSxkKX0sYWxsb2NCdWZmZXI6ZnVuY3Rpb24odSl7aWYoby5hbGxvYylyZXR1cm4gby5hbGxvYyh1KTt2YXIgZD1uZXcgbyh1KTtyZXR1cm4gZC5maWxsKDApLGR9LGlzQnVmZmVyOmZ1bmN0aW9uKHUpe3JldHVybiBvLmlzQnVmZmVyKHUpfSxpc1N0cmVhbTpmdW5jdGlvbih1KXtyZXR1cm4gdSYmdHlwZW9mIHUub249PSJmdW5jdGlvbiImJnR5cGVvZiB1LnBhdXNlPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdS5yZXN1bWU9PSJmdW5jdGlvbiJ9fX0se31dLDE1OltmdW5jdGlvbihpLGYsYyl7ZnVuY3Rpb24gdShwLGIsZyl7dmFyIHksTT1oLmdldFR5cGVPZihiKSxPPWguZXh0ZW5kKGd8fHt9LEEpO08uZGF0ZT1PLmRhdGV8fG5ldyBEYXRlLE8uY29tcHJlc3Npb24hPT1udWxsJiYoTy5jb21wcmVzc2lvbj1PLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCkpLHR5cGVvZiBPLnVuaXhQZXJtaXNzaW9ucz09InN0cmluZyImJihPLnVuaXhQZXJtaXNzaW9ucz1wYXJzZUludChPLnVuaXhQZXJtaXNzaW9ucyw4KSksTy51bml4UGVybWlzc2lvbnMmJjE2Mzg0Jk8udW5peFBlcm1pc3Npb25zJiYoTy5kaXI9ITApLE8uZG9zUGVybWlzc2lvbnMmJjE2Jk8uZG9zUGVybWlzc2lvbnMmJihPLmRpcj0hMCksTy5kaXImJihwPUIocCkpLE8uY3JlYXRlRm9sZGVycyYmKHk9VShwKSkmJlMuY2FsbCh0aGlzLHksITApO3ZhciBSPU09PT0ic3RyaW5nIiYmTy5iaW5hcnk9PT0hMSYmTy5iYXNlNjQ9PT0hMTtnJiZnLmJpbmFyeSE9PXZvaWQgMHx8KE8uYmluYXJ5PSFSKSwoYiBpbnN0YW5jZW9mIFAmJmIudW5jb21wcmVzc2VkU2l6ZT09PTB8fE8uZGlyfHwhYnx8Yi5sZW5ndGg9PT0wKSYmKE8uYmFzZTY0PSExLE8uYmluYXJ5PSEwLGI9IiIsTy5jb21wcmVzc2lvbj0iU1RPUkUiLE09InN0cmluZyIpO3ZhciB6O3o9YiBpbnN0YW5jZW9mIFB8fGIgaW5zdGFuY2VvZiB3P2I6RC5pc05vZGUmJkQuaXNTdHJlYW0oYik/bmV3IEYocCxiKTpoLnByZXBhcmVDb250ZW50KHAsYixPLmJpbmFyeSxPLm9wdGltaXplZEJpbmFyeVN0cmluZyxPLmJhc2U2NCk7dmFyICQ9bmV3IEwocCx6LE8pO3RoaXMuZmlsZXNbcF09JH12YXIgZD1pKCIuL3V0ZjgiKSxoPWkoIi4vdXRpbHMiKSx3PWkoIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKSxfPWkoIi4vc3RyZWFtL1N0cmVhbUhlbHBlciIpLEE9aSgiLi9kZWZhdWx0cyIpLFA9aSgiLi9jb21wcmVzc2VkT2JqZWN0IiksTD1pKCIuL3ppcE9iamVjdCIpLE49aSgiLi9nZW5lcmF0ZSIpLEQ9aSgiLi9ub2RlanNVdGlscyIpLEY9aSgiLi9ub2RlanMvTm9kZWpzU3RyZWFtSW5wdXRBZGFwdGVyIiksVT1mdW5jdGlvbihwKXtwLnNsaWNlKC0xKT09PSIvIiYmKHA9cC5zdWJzdHJpbmcoMCxwLmxlbmd0aC0xKSk7dmFyIGI9cC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiAwPGI/cC5zdWJzdHJpbmcoMCxiKToiIn0sQj1mdW5jdGlvbihwKXtyZXR1cm4gcC5zbGljZSgtMSkhPT0iLyImJihwKz0iLyIpLHB9LFM9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gYj1iIT09dm9pZCAwP2I6QS5jcmVhdGVGb2xkZXJzLHA9QihwKSx0aGlzLmZpbGVzW3BdfHx1LmNhbGwodGhpcyxwLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOmJ9KSx0aGlzLmZpbGVzW3BdfTtmdW5jdGlvbiBDKHApe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocCk9PT0iW29iamVjdCBSZWdFeHBdIn12YXIgdj17bG9hZDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS4iKX0sZm9yRWFjaDpmdW5jdGlvbihwKXt2YXIgYixnLHk7Zm9yKGIgaW4gdGhpcy5maWxlcyl5PXRoaXMuZmlsZXNbYl0sKGc9Yi5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLGIubGVuZ3RoKSkmJmIuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmcChnLHkpfSxmaWx0ZXI6ZnVuY3Rpb24ocCl7dmFyIGI9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihnLHkpe3AoZyx5KSYmYi5wdXNoKHkpfSksYn0sZmlsZTpmdW5jdGlvbihwLGIsZyl7aWYoYXJndW1lbnRzLmxlbmd0aCE9PTEpcmV0dXJuIHA9dGhpcy5yb290K3AsdS5jYWxsKHRoaXMscCxiLGcpLHRoaXM7aWYoQyhwKSl7dmFyIHk9cDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oTyxSKXtyZXR1cm4hUi5kaXImJnkudGVzdChPKX0pfXZhciBNPXRoaXMuZmlsZXNbdGhpcy5yb290K3BdO3JldHVybiBNJiYhTS5kaXI/TTpudWxsfSxmb2xkZXI6ZnVuY3Rpb24ocCl7aWYoIXApcmV0dXJuIHRoaXM7aWYoQyhwKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oTSxPKXtyZXR1cm4gTy5kaXImJnAudGVzdChNKX0pO3ZhciBiPXRoaXMucm9vdCtwLGc9Uy5jYWxsKHRoaXMsYikseT10aGlzLmNsb25lKCk7cmV0dXJuIHkucm9vdD1nLm5hbWUseX0scmVtb3ZlOmZ1bmN0aW9uKHApe3A9dGhpcy5yb290K3A7dmFyIGI9dGhpcy5maWxlc1twXTtpZihifHwocC5zbGljZSgtMSkhPT0iLyImJihwKz0iLyIpLGI9dGhpcy5maWxlc1twXSksYiYmIWIuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW3BdO2Vsc2UgZm9yKHZhciBnPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKE0sTyl7cmV0dXJuIE8ubmFtZS5zbGljZSgwLHAubGVuZ3RoKT09PXB9KSx5PTA7eTxnLmxlbmd0aDt5KyspZGVsZXRlIHRoaXMuZmlsZXNbZ1t5XS5uYW1lXTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuIil9LGdlbmVyYXRlSW50ZXJuYWxTdHJlYW06ZnVuY3Rpb24ocCl7dmFyIGIsZz17fTt0cnl7aWYoKGc9aC5leHRlbmQocHx8e30se3N0cmVhbUZpbGVzOiExLGNvbXByZXNzaW9uOiJTVE9SRSIsY29tcHJlc3Npb25PcHRpb25zOm51bGwsdHlwZToiIixwbGF0Zm9ybToiRE9TIixjb21tZW50Om51bGwsbWltZVR5cGU6ImFwcGxpY2F0aW9uL3ppcCIsZW5jb2RlRmlsZU5hbWU6ZC51dGY4ZW5jb2RlfSkpLnR5cGU9Zy50eXBlLnRvTG93ZXJDYXNlKCksZy5jb21wcmVzc2lvbj1nLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksZy50eXBlPT09ImJpbmFyeXN0cmluZyImJihnLnR5cGU9InN0cmluZyIpLCFnLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuIik7aC5jaGVja1N1cHBvcnQoZy50eXBlKSxnLnBsYXRmb3JtIT09ImRhcndpbiImJmcucGxhdGZvcm0hPT0iZnJlZWJzZCImJmcucGxhdGZvcm0hPT0ibGludXgiJiZnLnBsYXRmb3JtIT09InN1bm9zInx8KGcucGxhdGZvcm09IlVOSVgiKSxnLnBsYXRmb3JtPT09IndpbjMyIiYmKGcucGxhdGZvcm09IkRPUyIpO3ZhciB5PWcuY29tbWVudHx8dGhpcy5jb21tZW50fHwiIjtiPU4uZ2VuZXJhdGVXb3JrZXIodGhpcyxnLHkpfWNhdGNoKE0peyhiPW5ldyB3KCJlcnJvciIpKS5lcnJvcihNKX1yZXR1cm4gbmV3IF8oYixnLnR5cGV8fCJzdHJpbmciLGcubWltZVR5cGUpfSxnZW5lcmF0ZUFzeW5jOmZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFN0cmVhbShwKS5hY2N1bXVsYXRlKGIpfSxnZW5lcmF0ZU5vZGVTdHJlYW06ZnVuY3Rpb24ocCxiKXtyZXR1cm4ocD1wfHx7fSkudHlwZXx8KHAudHlwZT0ibm9kZWJ1ZmZlciIpLHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFN0cmVhbShwKS50b05vZGVqc1N0cmVhbShiKX19O2YuZXhwb3J0cz12fSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9kZWZhdWx0cyI6NSwiLi9nZW5lcmF0ZSI6OSwiLi9ub2RlanMvTm9kZWpzU3RyZWFtSW5wdXRBZGFwdGVyIjoxMiwiLi9ub2RlanNVdGlscyI6MTQsIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiOjI4LCIuL3N0cmVhbS9TdHJlYW1IZWxwZXIiOjI5LCIuL3V0ZjgiOjMxLCIuL3V0aWxzIjozMiwiLi96aXBPYmplY3QiOjM1fV0sMTY6W2Z1bmN0aW9uKGksZixjKXtmLmV4cG9ydHM9aSgic3RyZWFtIil9LHtzdHJlYW06dm9pZCAwfV0sMTc6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuL0RhdGFSZWFkZXIiKTtmdW5jdGlvbiBkKGgpe3UuY2FsbCh0aGlzLGgpO2Zvcih2YXIgdz0wO3c8dGhpcy5kYXRhLmxlbmd0aDt3KyspaFt3XT0yNTUmaFt3XX1pKCIuLi91dGlscyIpLmluaGVyaXRzKGQsdSksZC5wcm90b3R5cGUuYnl0ZUF0PWZ1bmN0aW9uKGgpe3JldHVybiB0aGlzLmRhdGFbdGhpcy56ZXJvK2hdfSxkLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihoKXtmb3IodmFyIHc9aC5jaGFyQ29kZUF0KDApLF89aC5jaGFyQ29kZUF0KDEpLEE9aC5jaGFyQ29kZUF0KDIpLFA9aC5jaGFyQ29kZUF0KDMpLEw9dGhpcy5sZW5ndGgtNDswPD1MOy0tTClpZih0aGlzLmRhdGFbTF09PT13JiZ0aGlzLmRhdGFbTCsxXT09PV8mJnRoaXMuZGF0YVtMKzJdPT09QSYmdGhpcy5kYXRhW0wrM109PT1QKXJldHVybiBMLXRoaXMuemVybztyZXR1cm4tMX0sZC5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKGgpe3ZhciB3PWguY2hhckNvZGVBdCgwKSxfPWguY2hhckNvZGVBdCgxKSxBPWguY2hhckNvZGVBdCgyKSxQPWguY2hhckNvZGVBdCgzKSxMPXRoaXMucmVhZERhdGEoNCk7cmV0dXJuIHc9PT1MWzBdJiZfPT09TFsxXSYmQT09PUxbMl0mJlA9PT1MWzNdfSxkLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihoKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGgpLGg9PT0wKXJldHVybltdO3ZhciB3PXRoaXMuZGF0YS5zbGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtoKTtyZXR1cm4gdGhpcy5pbmRleCs9aCx3fSxmLmV4cG9ydHM9ZH0seyIuLi91dGlscyI6MzIsIi4vRGF0YVJlYWRlciI6MTh9XSwxODpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4uL3V0aWxzIik7ZnVuY3Rpb24gZChoKXt0aGlzLmRhdGE9aCx0aGlzLmxlbmd0aD1oLmxlbmd0aCx0aGlzLmluZGV4PTAsdGhpcy56ZXJvPTB9ZC5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKGgpe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K2gpfSxjaGVja0luZGV4OmZ1bmN0aW9uKGgpe2lmKHRoaXMubGVuZ3RoPHRoaXMuemVybytofHxoPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK2grIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihoKXt0aGlzLmNoZWNrSW5kZXgoaCksdGhpcy5pbmRleD1ofSxza2lwOmZ1bmN0aW9uKGgpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtoKX0sYnl0ZUF0OmZ1bmN0aW9uKCl7fSxyZWFkSW50OmZ1bmN0aW9uKGgpe3ZhciB3LF89MDtmb3IodGhpcy5jaGVja09mZnNldChoKSx3PXRoaXMuaW5kZXgraC0xO3c+PXRoaXMuaW5kZXg7dy0tKV89KF88PDgpK3RoaXMuYnl0ZUF0KHcpO3JldHVybiB0aGlzLmluZGV4Kz1oLF99LHJlYWRTdHJpbmc6ZnVuY3Rpb24oaCl7cmV0dXJuIHUudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5yZWFkRGF0YShoKSl9LHJlYWREYXRhOmZ1bmN0aW9uKCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbigpe30scmVhZEFuZENoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKCl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciBoPXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoMTk4MCsoaD4+MjUmMTI3KSwoaD4+MjEmMTUpLTEsaD4+MTYmMzEsaD4+MTEmMzEsaD4+NSY2MywoMzEmaCk8PDEpKX19LGYuZXhwb3J0cz1kfSx7Ii4uL3V0aWxzIjozMn1dLDE5OltmdW5jdGlvbihpLGYsYyl7dmFyIHU9aSgiLi9VaW50OEFycmF5UmVhZGVyIik7ZnVuY3Rpb24gZChoKXt1LmNhbGwodGhpcyxoKX1pKCIuLi91dGlscyIpLmluaGVyaXRzKGQsdSksZC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oaCl7dGhpcy5jaGVja09mZnNldChoKTt2YXIgdz10aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgraCk7cmV0dXJuIHRoaXMuaW5kZXgrPWgsd30sZi5leHBvcnRzPWR9LHsiLi4vdXRpbHMiOjMyLCIuL1VpbnQ4QXJyYXlSZWFkZXIiOjIxfV0sMjA6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuL0RhdGFSZWFkZXIiKTtmdW5jdGlvbiBkKGgpe3UuY2FsbCh0aGlzLGgpfWkoIi4uL3V0aWxzIikuaW5oZXJpdHMoZCx1KSxkLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oaCl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuemVybytoKX0sZC5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oaCl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihoKS10aGlzLnplcm99LGQucHJvdG90eXBlLnJlYWRBbmRDaGVja1NpZ25hdHVyZT1mdW5jdGlvbihoKXtyZXR1cm4gaD09PXRoaXMucmVhZERhdGEoNCl9LGQucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGgpe3RoaXMuY2hlY2tPZmZzZXQoaCk7dmFyIHc9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2gpO3JldHVybiB0aGlzLmluZGV4Kz1oLHd9LGYuZXhwb3J0cz1kfSx7Ii4uL3V0aWxzIjozMiwiLi9EYXRhUmVhZGVyIjoxOH1dLDIxOltmdW5jdGlvbihpLGYsYyl7dmFyIHU9aSgiLi9BcnJheVJlYWRlciIpO2Z1bmN0aW9uIGQoaCl7dS5jYWxsKHRoaXMsaCl9aSgiLi4vdXRpbHMiKS5pbmhlcml0cyhkLHUpLGQucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGgpe2lmKHRoaXMuY2hlY2tPZmZzZXQoaCksaD09PTApcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciB3PXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtoKTtyZXR1cm4gdGhpcy5pbmRleCs9aCx3fSxmLmV4cG9ydHM9ZH0seyIuLi91dGlscyI6MzIsIi4vQXJyYXlSZWFkZXIiOjE3fV0sMjI6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuLi91dGlscyIpLGQ9aSgiLi4vc3VwcG9ydCIpLGg9aSgiLi9BcnJheVJlYWRlciIpLHc9aSgiLi9TdHJpbmdSZWFkZXIiKSxfPWkoIi4vTm9kZUJ1ZmZlclJlYWRlciIpLEE9aSgiLi9VaW50OEFycmF5UmVhZGVyIik7Zi5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBMPXUuZ2V0VHlwZU9mKFApO3JldHVybiB1LmNoZWNrU3VwcG9ydChMKSxMIT09InN0cmluZyJ8fGQudWludDhhcnJheT9MPT09Im5vZGVidWZmZXIiP25ldyBfKFApOmQudWludDhhcnJheT9uZXcgQSh1LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixQKSk6bmV3IGgodS50cmFuc2Zvcm1UbygiYXJyYXkiLFApKTpuZXcgdyhQKX19LHsiLi4vc3VwcG9ydCI6MzAsIi4uL3V0aWxzIjozMiwiLi9BcnJheVJlYWRlciI6MTcsIi4vTm9kZUJ1ZmZlclJlYWRlciI6MTksIi4vU3RyaW5nUmVhZGVyIjoyMCwiLi9VaW50OEFycmF5UmVhZGVyIjoyMX1dLDIzOltmdW5jdGlvbihpLGYsYyl7Yy5MT0NBTF9GSUxFX0hFQURFUj0iUEsDBCIsYy5DRU5UUkFMX0ZJTEVfSEVBREVSPSJQSwECIixjLkNFTlRSQUxfRElSRUNUT1JZX0VORD0iUEsFBiIsYy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPSJQSwZceDA3IixjLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORD0iUEsGBiIsYy5EQVRBX0RFU0NSSVBUT1I9IlBLXHgwN1xiIn0se31dLDI0OltmdW5jdGlvbihpLGYsYyl7dmFyIHU9aSgiLi9HZW5lcmljV29ya2VyIiksZD1pKCIuLi91dGlscyIpO2Z1bmN0aW9uIGgodyl7dS5jYWxsKHRoaXMsIkNvbnZlcnRXb3JrZXIgdG8gIit3KSx0aGlzLmRlc3RUeXBlPXd9ZC5pbmhlcml0cyhoLHUpLGgucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih3KXt0aGlzLnB1c2goe2RhdGE6ZC50cmFuc2Zvcm1Ubyh0aGlzLmRlc3RUeXBlLHcuZGF0YSksbWV0YTp3Lm1ldGF9KX0sZi5leHBvcnRzPWh9LHsiLi4vdXRpbHMiOjMyLCIuL0dlbmVyaWNXb3JrZXIiOjI4fV0sMjU6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuL0dlbmVyaWNXb3JrZXIiKSxkPWkoIi4uL2NyYzMyIik7ZnVuY3Rpb24gaCgpe3UuY2FsbCh0aGlzLCJDcmMzMlByb2JlIiksdGhpcy53aXRoU3RyZWFtSW5mbygiY3JjMzIiLDApfWkoIi4uL3V0aWxzIikuaW5oZXJpdHMoaCx1KSxoLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24odyl7dGhpcy5zdHJlYW1JbmZvLmNyYzMyPWQody5kYXRhLHRoaXMuc3RyZWFtSW5mby5jcmMzMnx8MCksdGhpcy5wdXNoKHcpfSxmLmV4cG9ydHM9aH0seyIuLi9jcmMzMiI6NCwiLi4vdXRpbHMiOjMyLCIuL0dlbmVyaWNXb3JrZXIiOjI4fV0sMjY6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuLi91dGlscyIpLGQ9aSgiLi9HZW5lcmljV29ya2VyIik7ZnVuY3Rpb24gaCh3KXtkLmNhbGwodGhpcywiRGF0YUxlbmd0aFByb2JlIGZvciAiK3cpLHRoaXMucHJvcE5hbWU9dyx0aGlzLndpdGhTdHJlYW1JbmZvKHcsMCl9dS5pbmhlcml0cyhoLGQpLGgucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih3KXtpZih3KXt2YXIgXz10aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV18fDA7dGhpcy5zdHJlYW1JbmZvW3RoaXMucHJvcE5hbWVdPV8rdy5kYXRhLmxlbmd0aH1kLnByb3RvdHlwZS5wcm9jZXNzQ2h1bmsuY2FsbCh0aGlzLHcpfSxmLmV4cG9ydHM9aH0seyIuLi91dGlscyI6MzIsIi4vR2VuZXJpY1dvcmtlciI6Mjh9XSwyNzpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4uL3V0aWxzIiksZD1pKCIuL0dlbmVyaWNXb3JrZXIiKTtmdW5jdGlvbiBoKHcpe2QuY2FsbCh0aGlzLCJEYXRhV29ya2VyIik7dmFyIF89dGhpczt0aGlzLmRhdGFJc1JlYWR5PSExLHRoaXMuaW5kZXg9MCx0aGlzLm1heD0wLHRoaXMuZGF0YT1udWxsLHRoaXMudHlwZT0iIix0aGlzLl90aWNrU2NoZWR1bGVkPSExLHcudGhlbihmdW5jdGlvbihBKXtfLmRhdGFJc1JlYWR5PSEwLF8uZGF0YT1BLF8ubWF4PUEmJkEubGVuZ3RofHwwLF8udHlwZT11LmdldFR5cGVPZihBKSxfLmlzUGF1c2VkfHxfLl90aWNrQW5kUmVwZWF0KCl9LGZ1bmN0aW9uKEEpe18uZXJyb3IoQSl9KX11LmluaGVyaXRzKGgsZCksaC5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2QucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLmRhdGE9bnVsbH0saC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuISFkLnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSYmKCF0aGlzLl90aWNrU2NoZWR1bGVkJiZ0aGlzLmRhdGFJc1JlYWR5JiYodGhpcy5fdGlja1NjaGVkdWxlZD0hMCx1LmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcykpLCEwKX0saC5wcm90b3R5cGUuX3RpY2tBbmRSZXBlYXQ9ZnVuY3Rpb24oKXt0aGlzLl90aWNrU2NoZWR1bGVkPSExLHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZHx8KHRoaXMuX3RpY2soKSx0aGlzLmlzRmluaXNoZWR8fCh1LmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcyksdGhpcy5fdGlja1NjaGVkdWxlZD0hMCkpfSxoLnByb3RvdHlwZS5fdGljaz1mdW5jdGlvbigpe2lmKHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt2YXIgdz1udWxsLF89TWF0aC5taW4odGhpcy5tYXgsdGhpcy5pbmRleCsxNjM4NCk7aWYodGhpcy5pbmRleD49dGhpcy5tYXgpcmV0dXJuIHRoaXMuZW5kKCk7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSJzdHJpbmciOnc9dGhpcy5kYXRhLnN1YnN0cmluZyh0aGlzLmluZGV4LF8pO2JyZWFrO2Nhc2UidWludDhhcnJheSI6dz10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCxfKTticmVhaztjYXNlImFycmF5IjpjYXNlIm5vZGVidWZmZXIiOnc9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsXyl9cmV0dXJuIHRoaXMuaW5kZXg9Xyx0aGlzLnB1c2goe2RhdGE6dyxtZXRhOntwZXJjZW50OnRoaXMubWF4P3RoaXMuaW5kZXgvdGhpcy5tYXgqMTAwOjB9fSl9LGYuZXhwb3J0cz1ofSx7Ii4uL3V0aWxzIjozMiwiLi9HZW5lcmljV29ya2VyIjoyOH1dLDI4OltmdW5jdGlvbihpLGYsYyl7ZnVuY3Rpb24gdShkKXt0aGlzLm5hbWU9ZHx8ImRlZmF1bHQiLHRoaXMuc3RyZWFtSW5mbz17fSx0aGlzLmdlbmVyYXRlZEVycm9yPW51bGwsdGhpcy5leHRyYVN0cmVhbUluZm89e30sdGhpcy5pc1BhdXNlZD0hMCx0aGlzLmlzRmluaXNoZWQ9ITEsdGhpcy5pc0xvY2tlZD0hMSx0aGlzLl9saXN0ZW5lcnM9e2RhdGE6W10sZW5kOltdLGVycm9yOltdfSx0aGlzLnByZXZpb3VzPW51bGx9dS5wcm90b3R5cGU9e3B1c2g6ZnVuY3Rpb24oZCl7dGhpcy5lbWl0KCJkYXRhIixkKX0sZW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3RoaXMuZmx1c2goKTt0cnl7dGhpcy5lbWl0KCJlbmQiKSx0aGlzLmNsZWFuVXAoKSx0aGlzLmlzRmluaXNoZWQ9ITB9Y2F0Y2goZCl7dGhpcy5lbWl0KCJlcnJvciIsZCl9cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGQpe3JldHVybiF0aGlzLmlzRmluaXNoZWQmJih0aGlzLmlzUGF1c2VkP3RoaXMuZ2VuZXJhdGVkRXJyb3I9ZDoodGhpcy5pc0ZpbmlzaGVkPSEwLHRoaXMuZW1pdCgiZXJyb3IiLGQpLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMuZXJyb3IoZCksdGhpcy5jbGVhblVwKCkpLCEwKX0sb246ZnVuY3Rpb24oZCxoKXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzW2RdLnB1c2goaCksdGhpc30sY2xlYW5VcDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtSW5mbz10aGlzLmdlbmVyYXRlZEVycm9yPXRoaXMuZXh0cmFTdHJlYW1JbmZvPW51bGwsdGhpcy5fbGlzdGVuZXJzPVtdfSxlbWl0OmZ1bmN0aW9uKGQsaCl7aWYodGhpcy5fbGlzdGVuZXJzW2RdKWZvcih2YXIgdz0wO3c8dGhpcy5fbGlzdGVuZXJzW2RdLmxlbmd0aDt3KyspdGhpcy5fbGlzdGVuZXJzW2RdW3ddLmNhbGwodGhpcyxoKX0scGlwZTpmdW5jdGlvbihkKXtyZXR1cm4gZC5yZWdpc3RlclByZXZpb3VzKHRoaXMpfSxyZWdpc3RlclByZXZpb3VzOmZ1bmN0aW9uKGQpe2lmKHRoaXMuaXNMb2NrZWQpdGhyb3cgbmV3IEVycm9yKCJUaGUgc3RyZWFtICciK3RoaXMrIicgaGFzIGFscmVhZHkgYmVlbiB1c2VkLiIpO3RoaXMuc3RyZWFtSW5mbz1kLnN0cmVhbUluZm8sdGhpcy5tZXJnZVN0cmVhbUluZm8oKSx0aGlzLnByZXZpb3VzPWQ7dmFyIGg9dGhpcztyZXR1cm4gZC5vbigiZGF0YSIsZnVuY3Rpb24odyl7aC5wcm9jZXNzQ2h1bmsodyl9KSxkLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aC5lbmQoKX0pLGQub24oImVycm9yIixmdW5jdGlvbih3KXtoLmVycm9yKHcpfSksdGhpc30scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc1BhdXNlZCYmIXRoaXMuaXNGaW5pc2hlZCYmKHRoaXMuaXNQYXVzZWQ9ITAsdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5wYXVzZSgpLCEwKX0scmVzdW1lOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt2YXIgZD10aGlzLmlzUGF1c2VkPSExO3JldHVybiB0aGlzLmdlbmVyYXRlZEVycm9yJiYodGhpcy5lcnJvcih0aGlzLmdlbmVyYXRlZEVycm9yKSxkPSEwKSx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLnJlc3VtZSgpLCFkfSxmbHVzaDpmdW5jdGlvbigpe30scHJvY2Vzc0NodW5rOmZ1bmN0aW9uKGQpe3RoaXMucHVzaChkKX0sd2l0aFN0cmVhbUluZm86ZnVuY3Rpb24oZCxoKXtyZXR1cm4gdGhpcy5leHRyYVN0cmVhbUluZm9bZF09aCx0aGlzLm1lcmdlU3RyZWFtSW5mbygpLHRoaXN9LG1lcmdlU3RyZWFtSW5mbzpmdW5jdGlvbigpe2Zvcih2YXIgZCBpbiB0aGlzLmV4dHJhU3RyZWFtSW5mbylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5leHRyYVN0cmVhbUluZm8sZCkmJih0aGlzLnN0cmVhbUluZm9bZF09dGhpcy5leHRyYVN0cmVhbUluZm9bZF0pfSxsb2NrOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0xvY2tlZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdHJlYW0gJyIrdGhpcysiJyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuIik7dGhpcy5pc0xvY2tlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmxvY2soKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZD0iV29ya2VyICIrdGhpcy5uYW1lO3JldHVybiB0aGlzLnByZXZpb3VzP3RoaXMucHJldmlvdXMrIiAtPiAiK2Q6ZH19LGYuZXhwb3J0cz11fSx7fV0sMjk6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuLi91dGlscyIpLGQ9aSgiLi9Db252ZXJ0V29ya2VyIiksaD1pKCIuL0dlbmVyaWNXb3JrZXIiKSx3PWkoIi4uL2Jhc2U2NCIpLF89aSgiLi4vc3VwcG9ydCIpLEE9aSgiLi4vZXh0ZXJuYWwiKSxQPW51bGw7aWYoXy5ub2Rlc3RyZWFtKXRyeXtQPWkoIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyIil9Y2F0Y2h7fWZ1bmN0aW9uIEwoTixELEYpe3ZhciBVPUQ7c3dpdGNoKEQpe2Nhc2UiYmxvYiI6Y2FzZSJhcnJheWJ1ZmZlciI6VT0idWludDhhcnJheSI7YnJlYWs7Y2FzZSJiYXNlNjQiOlU9InN0cmluZyJ9dHJ5e3RoaXMuX2ludGVybmFsVHlwZT1VLHRoaXMuX291dHB1dFR5cGU9RCx0aGlzLl9taW1lVHlwZT1GLHUuY2hlY2tTdXBwb3J0KFUpLHRoaXMuX3dvcmtlcj1OLnBpcGUobmV3IGQoVSkpLE4ubG9jaygpfWNhdGNoKEIpe3RoaXMuX3dvcmtlcj1uZXcgaCgiZXJyb3IiKSx0aGlzLl93b3JrZXIuZXJyb3IoQil9fUwucHJvdG90eXBlPXthY2N1bXVsYXRlOmZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihELEYpe3JldHVybiBuZXcgQS5Qcm9taXNlKGZ1bmN0aW9uKFUsQil7dmFyIFM9W10sQz1ELl9pbnRlcm5hbFR5cGUsdj1ELl9vdXRwdXRUeXBlLHA9RC5fbWltZVR5cGU7RC5vbigiZGF0YSIsZnVuY3Rpb24oYixnKXtTLnB1c2goYiksRiYmRihnKX0pLm9uKCJlcnJvciIsZnVuY3Rpb24oYil7Uz1bXSxCKGIpfSkub24oImVuZCIsZnVuY3Rpb24oKXt0cnl7dmFyIGI9ZnVuY3Rpb24oZyx5LE0pe3N3aXRjaChnKXtjYXNlImJsb2IiOnJldHVybiB1Lm5ld0Jsb2IodS50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLHkpLE0pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gdy5lbmNvZGUoeSk7ZGVmYXVsdDpyZXR1cm4gdS50cmFuc2Zvcm1UbyhnLHkpfX0odixmdW5jdGlvbihnLHkpe3ZhciBNLE89MCxSPW51bGwsej0wO2ZvcihNPTA7TTx5Lmxlbmd0aDtNKyspeis9eVtNXS5sZW5ndGg7c3dpdGNoKGcpe2Nhc2Uic3RyaW5nIjpyZXR1cm4geS5qb2luKCIiKTtjYXNlImFycmF5IjpyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx5KTtjYXNlInVpbnQ4YXJyYXkiOmZvcihSPW5ldyBVaW50OEFycmF5KHopLE09MDtNPHkubGVuZ3RoO00rKylSLnNldCh5W01dLE8pLE8rPXlbTV0ubGVuZ3RoO3JldHVybiBSO2Nhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIG8uY29uY2F0KHkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJjb25jYXQgOiB1bnN1cHBvcnRlZCB0eXBlICciK2crIiciKX19KEMsUykscCk7VShiKX1jYXRjaChnKXtCKGcpfVM9W119KS5yZXN1bWUoKX0pfSh0aGlzLE4pfSxvbjpmdW5jdGlvbihOLEQpe3ZhciBGPXRoaXM7cmV0dXJuIE49PT0iZGF0YSI/dGhpcy5fd29ya2VyLm9uKE4sZnVuY3Rpb24oVSl7RC5jYWxsKEYsVS5kYXRhLFUubWV0YSl9KTp0aGlzLl93b3JrZXIub24oTixmdW5jdGlvbigpe3UuZGVsYXkoRCxhcmd1bWVudHMsRil9KSx0aGlzfSxyZXN1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWxheSh0aGlzLl93b3JrZXIucmVzdW1lLFtdLHRoaXMuX3dvcmtlciksdGhpc30scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd29ya2VyLnBhdXNlKCksdGhpc30sdG9Ob2RlanNTdHJlYW06ZnVuY3Rpb24oTil7aWYodS5jaGVja1N1cHBvcnQoIm5vZGVzdHJlYW0iKSx0aGlzLl9vdXRwdXRUeXBlIT09Im5vZGVidWZmZXIiKXRocm93IG5ldyBFcnJvcih0aGlzLl9vdXRwdXRUeXBlKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZCIpO3JldHVybiBuZXcgUCh0aGlzLHtvYmplY3RNb2RlOnRoaXMuX291dHB1dFR5cGUhPT0ibm9kZWJ1ZmZlciJ9LE4pfX0sZi5leHBvcnRzPUx9LHsiLi4vYmFzZTY0IjoxLCIuLi9leHRlcm5hbCI6NiwiLi4vbm9kZWpzL05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXIiOjEzLCIuLi9zdXBwb3J0IjozMCwiLi4vdXRpbHMiOjMyLCIuL0NvbnZlcnRXb3JrZXIiOjI0LCIuL0dlbmVyaWNXb3JrZXIiOjI4fV0sMzA6W2Z1bmN0aW9uKGksZixjKXtpZihjLmJhc2U2ND0hMCxjLmFycmF5PSEwLGMuc3RyaW5nPSEwLGMuYXJyYXlidWZmZXI9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiLGMubm9kZWJ1ZmZlcj1vIT09dm9pZCAwLGMudWludDhhcnJheT10eXBlb2YgVWludDhBcnJheTwidSIsdHlwZW9mIEFycmF5QnVmZmVyPiJ1IiljLmJsb2I9ITE7ZWxzZXt2YXIgdT1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e2MuYmxvYj1uZXcgQmxvYihbdV0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KS5zaXplPT09MH1jYXRjaHt0cnl7dmFyIGQ9bmV3KHNlbGYuQmxvYkJ1aWxkZXJ8fHNlbGYuV2ViS2l0QmxvYkJ1aWxkZXJ8fHNlbGYuTW96QmxvYkJ1aWxkZXJ8fHNlbGYuTVNCbG9iQnVpbGRlcik7ZC5hcHBlbmQodSksYy5ibG9iPWQuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZT09PTB9Y2F0Y2h7Yy5ibG9iPSExfX19dHJ5e2Mubm9kZXN0cmVhbT0hIWkoInJlYWRhYmxlLXN0cmVhbSIpLlJlYWRhYmxlfWNhdGNoe2Mubm9kZXN0cmVhbT0hMX19LHsicmVhZGFibGUtc3RyZWFtIjoxNn1dLDMxOltmdW5jdGlvbihpLGYsYyl7Zm9yKHZhciB1PWkoIi4vdXRpbHMiKSxkPWkoIi4vc3VwcG9ydCIpLGg9aSgiLi9ub2RlanNVdGlscyIpLHc9aSgiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciIpLF89bmV3IEFycmF5KDI1NiksQT0wO0E8MjU2O0ErKylfW0FdPTI1Mjw9QT82OjI0ODw9QT81OjI0MDw9QT80OjIyNDw9QT8zOjE5Mjw9QT8yOjE7ZnVuY3Rpb24gUCgpe3cuY2FsbCh0aGlzLCJ1dGYtOCBkZWNvZGUiKSx0aGlzLmxlZnRPdmVyPW51bGx9ZnVuY3Rpb24gTCgpe3cuY2FsbCh0aGlzLCJ1dGYtOCBlbmNvZGUiKX1fWzI1NF09X1syNTRdPTEsYy51dGY4ZW5jb2RlPWZ1bmN0aW9uKE4pe3JldHVybiBkLm5vZGVidWZmZXI/aC5uZXdCdWZmZXJGcm9tKE4sInV0Zi04Iik6ZnVuY3Rpb24oRCl7dmFyIEYsVSxCLFMsQyx2PUQubGVuZ3RoLHA9MDtmb3IoUz0wO1M8djtTKyspKDY0NTEyJihVPUQuY2hhckNvZGVBdChTKSkpPT01NTI5NiYmUysxPHYmJig2NDUxMiYoQj1ELmNoYXJDb2RlQXQoUysxKSkpPT01NjMyMCYmKFU9NjU1MzYrKFUtNTUyOTY8PDEwKSsoQi01NjMyMCksUysrKSxwKz1VPDEyOD8xOlU8MjA0OD8yOlU8NjU1MzY/Mzo0O2ZvcihGPWQudWludDhhcnJheT9uZXcgVWludDhBcnJheShwKTpuZXcgQXJyYXkocCksUz1DPTA7QzxwO1MrKykoNjQ1MTImKFU9RC5jaGFyQ29kZUF0KFMpKSk9PTU1Mjk2JiZTKzE8diYmKDY0NTEyJihCPUQuY2hhckNvZGVBdChTKzEpKSk9PTU2MzIwJiYoVT02NTUzNisoVS01NTI5Njw8MTApKyhCLTU2MzIwKSxTKyspLFU8MTI4P0ZbQysrXT1VOihVPDIwNDg/RltDKytdPTE5MnxVPj4+NjooVTw2NTUzNj9GW0MrK109MjI0fFU+Pj4xMjooRltDKytdPTI0MHxVPj4+MTgsRltDKytdPTEyOHxVPj4+MTImNjMpLEZbQysrXT0xMjh8VT4+PjYmNjMpLEZbQysrXT0xMjh8NjMmVSk7cmV0dXJuIEZ9KE4pfSxjLnV0ZjhkZWNvZGU9ZnVuY3Rpb24oTil7cmV0dXJuIGQubm9kZWJ1ZmZlcj91LnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixOKS50b1N0cmluZygidXRmLTgiKTpmdW5jdGlvbihEKXt2YXIgRixVLEIsUyxDPUQubGVuZ3RoLHY9bmV3IEFycmF5KDIqQyk7Zm9yKEY9VT0wO0Y8QzspaWYoKEI9RFtGKytdKTwxMjgpdltVKytdPUI7ZWxzZSBpZig0PChTPV9bQl0pKXZbVSsrXT02NTUzMyxGKz1TLTE7ZWxzZXtmb3IoQiY9Uz09PTI/MzE6Uz09PTM/MTU6NzsxPFMmJkY8QzspQj1CPDw2fDYzJkRbRisrXSxTLS07MTxTP3ZbVSsrXT02NTUzMzpCPDY1NTM2P3ZbVSsrXT1COihCLT02NTUzNix2W1UrK109NTUyOTZ8Qj4+MTAmMTAyMyx2W1UrK109NTYzMjB8MTAyMyZCKX1yZXR1cm4gdi5sZW5ndGghPT1VJiYodi5zdWJhcnJheT92PXYuc3ViYXJyYXkoMCxVKTp2Lmxlbmd0aD1VKSx1LmFwcGx5RnJvbUNoYXJDb2RlKHYpfShOPXUudHJhbnNmb3JtVG8oZC51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLE4pKX0sdS5pbmhlcml0cyhQLHcpLFAucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihOKXt2YXIgRD11LnRyYW5zZm9ybVRvKGQudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixOLmRhdGEpO2lmKHRoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoKXtpZihkLnVpbnQ4YXJyYXkpe3ZhciBGPUQ7KEQ9bmV3IFVpbnQ4QXJyYXkoRi5sZW5ndGgrdGhpcy5sZWZ0T3Zlci5sZW5ndGgpKS5zZXQodGhpcy5sZWZ0T3ZlciwwKSxELnNldChGLHRoaXMubGVmdE92ZXIubGVuZ3RoKX1lbHNlIEQ9dGhpcy5sZWZ0T3Zlci5jb25jYXQoRCk7dGhpcy5sZWZ0T3Zlcj1udWxsfXZhciBVPWZ1bmN0aW9uKFMsQyl7dmFyIHY7Zm9yKChDPUN8fFMubGVuZ3RoKT5TLmxlbmd0aCYmKEM9Uy5sZW5ndGgpLHY9Qy0xOzA8PXYmJigxOTImU1t2XSk9PTEyODspdi0tO3JldHVybiB2PDB8fHY9PT0wP0M6ditfW1Nbdl1dPkM/djpDfShEKSxCPUQ7VSE9PUQubGVuZ3RoJiYoZC51aW50OGFycmF5PyhCPUQuc3ViYXJyYXkoMCxVKSx0aGlzLmxlZnRPdmVyPUQuc3ViYXJyYXkoVSxELmxlbmd0aCkpOihCPUQuc2xpY2UoMCxVKSx0aGlzLmxlZnRPdmVyPUQuc2xpY2UoVSxELmxlbmd0aCkpKSx0aGlzLnB1c2goe2RhdGE6Yy51dGY4ZGVjb2RlKEIpLG1ldGE6Ti5tZXRhfSl9LFAucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7dGhpcy5sZWZ0T3ZlciYmdGhpcy5sZWZ0T3Zlci5sZW5ndGgmJih0aGlzLnB1c2goe2RhdGE6Yy51dGY4ZGVjb2RlKHRoaXMubGVmdE92ZXIpLG1ldGE6e319KSx0aGlzLmxlZnRPdmVyPW51bGwpfSxjLlV0ZjhEZWNvZGVXb3JrZXI9UCx1LmluaGVyaXRzKEwsdyksTC5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKE4pe3RoaXMucHVzaCh7ZGF0YTpjLnV0ZjhlbmNvZGUoTi5kYXRhKSxtZXRhOk4ubWV0YX0pfSxjLlV0ZjhFbmNvZGVXb3JrZXI9TH0seyIuL25vZGVqc1V0aWxzIjoxNCwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6MjgsIi4vc3VwcG9ydCI6MzAsIi4vdXRpbHMiOjMyfV0sMzI6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuL3N1cHBvcnQiKSxkPWkoIi4vYmFzZTY0IiksaD1pKCIuL25vZGVqc1V0aWxzIiksdz1pKCIuL2V4dGVybmFsIik7ZnVuY3Rpb24gXyhGKXtyZXR1cm4gRn1mdW5jdGlvbiBBKEYsVSl7Zm9yKHZhciBCPTA7QjxGLmxlbmd0aDsrK0IpVVtCXT0yNTUmRi5jaGFyQ29kZUF0KEIpO3JldHVybiBVfWkoInNldGltbWVkaWF0ZSIpLGMubmV3QmxvYj1mdW5jdGlvbihGLFUpe2MuY2hlY2tTdXBwb3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbRl0se3R5cGU6VX0pfWNhdGNoe3RyeXt2YXIgQj1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gQi5hcHBlbmQoRiksQi5nZXRCbG9iKFUpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19O3ZhciBQPXtzdHJpbmdpZnlCeUNodW5rOmZ1bmN0aW9uKEYsVSxCKXt2YXIgUz1bXSxDPTAsdj1GLmxlbmd0aDtpZih2PD1CKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsRik7Zm9yKDtDPHY7KVU9PT0iYXJyYXkifHxVPT09Im5vZGVidWZmZXIiP1MucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsRi5zbGljZShDLE1hdGgubWluKEMrQix2KSkpKTpTLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEYuc3ViYXJyYXkoQyxNYXRoLm1pbihDK0IsdikpKSksQys9QjtyZXR1cm4gUy5qb2luKCIiKX0sc3RyaW5naWZ5QnlDaGFyOmZ1bmN0aW9uKEYpe2Zvcih2YXIgVT0iIixCPTA7QjxGLmxlbmd0aDtCKyspVSs9U3RyaW5nLmZyb21DaGFyQ29kZShGW0JdKTtyZXR1cm4gVX0sYXBwbHlDYW5CZVVzZWQ6e3VpbnQ4YXJyYXk6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHUudWludDhhcnJheSYmU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKS5sZW5ndGg9PT0xfWNhdGNoe3JldHVybiExfX0oKSxub2RlYnVmZmVyOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB1Lm5vZGVidWZmZXImJlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoLmFsbG9jQnVmZmVyKDEpKS5sZW5ndGg9PT0xfWNhdGNoe3JldHVybiExfX0oKX19O2Z1bmN0aW9uIEwoRil7dmFyIFU9NjU1MzYsQj1jLmdldFR5cGVPZihGKSxTPSEwO2lmKEI9PT0idWludDhhcnJheSI/Uz1QLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk6Qj09PSJub2RlYnVmZmVyIiYmKFM9UC5hcHBseUNhbkJlVXNlZC5ub2RlYnVmZmVyKSxTKWZvcig7MTxVOyl0cnl7cmV0dXJuIFAuc3RyaW5naWZ5QnlDaHVuayhGLEIsVSl9Y2F0Y2h7VT1NYXRoLmZsb29yKFUvMil9cmV0dXJuIFAuc3RyaW5naWZ5QnlDaGFyKEYpfWZ1bmN0aW9uIE4oRixVKXtmb3IodmFyIEI9MDtCPEYubGVuZ3RoO0IrKylVW0JdPUZbQl07cmV0dXJuIFV9Yy5hcHBseUZyb21DaGFyQ29kZT1MO3ZhciBEPXt9O0Quc3RyaW5nPXtzdHJpbmc6XyxhcnJheTpmdW5jdGlvbihGKXtyZXR1cm4gQShGLG5ldyBBcnJheShGLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihGKXtyZXR1cm4gRC5zdHJpbmcudWludDhhcnJheShGKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oRil7cmV0dXJuIEEoRixuZXcgVWludDhBcnJheShGLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKEYpe3JldHVybiBBKEYsaC5hbGxvY0J1ZmZlcihGLmxlbmd0aCkpfX0sRC5hcnJheT17c3RyaW5nOkwsYXJyYXk6XyxhcnJheWJ1ZmZlcjpmdW5jdGlvbihGKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoRikuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKEYpe3JldHVybiBuZXcgVWludDhBcnJheShGKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihGKXtyZXR1cm4gaC5uZXdCdWZmZXJGcm9tKEYpfX0sRC5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKEYpe3JldHVybiBMKG5ldyBVaW50OEFycmF5KEYpKX0sYXJyYXk6ZnVuY3Rpb24oRil7cmV0dXJuIE4obmV3IFVpbnQ4QXJyYXkoRiksbmV3IEFycmF5KEYuYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpfLHVpbnQ4YXJyYXk6ZnVuY3Rpb24oRil7cmV0dXJuIG5ldyBVaW50OEFycmF5KEYpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKEYpe3JldHVybiBoLm5ld0J1ZmZlckZyb20obmV3IFVpbnQ4QXJyYXkoRikpfX0sRC51aW50OGFycmF5PXtzdHJpbmc6TCxhcnJheTpmdW5jdGlvbihGKXtyZXR1cm4gTihGLG5ldyBBcnJheShGLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihGKXtyZXR1cm4gRi5idWZmZXJ9LHVpbnQ4YXJyYXk6Xyxub2RlYnVmZmVyOmZ1bmN0aW9uKEYpe3JldHVybiBoLm5ld0J1ZmZlckZyb20oRil9fSxELm5vZGVidWZmZXI9e3N0cmluZzpMLGFycmF5OmZ1bmN0aW9uKEYpe3JldHVybiBOKEYsbmV3IEFycmF5KEYubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKEYpe3JldHVybiBELm5vZGVidWZmZXIudWludDhhcnJheShGKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oRil7cmV0dXJuIE4oRixuZXcgVWludDhBcnJheShGLmxlbmd0aCkpfSxub2RlYnVmZmVyOl99LGMudHJhbnNmb3JtVG89ZnVuY3Rpb24oRixVKXtpZihVPVV8fCIiLCFGKXJldHVybiBVO2MuY2hlY2tTdXBwb3J0KEYpO3ZhciBCPWMuZ2V0VHlwZU9mKFUpO3JldHVybiBEW0JdW0ZdKFUpfSxjLnJlc29sdmU9ZnVuY3Rpb24oRil7Zm9yKHZhciBVPUYuc3BsaXQoIi8iKSxCPVtdLFM9MDtTPFUubGVuZ3RoO1MrKyl7dmFyIEM9VVtTXTtDPT09Ii4ifHxDPT09IiImJlMhPT0wJiZTIT09VS5sZW5ndGgtMXx8KEM9PT0iLi4iP0IucG9wKCk6Qi5wdXNoKEMpKX1yZXR1cm4gQi5qb2luKCIvIil9LGMuZ2V0VHlwZU9mPWZ1bmN0aW9uKEYpe3JldHVybiB0eXBlb2YgRj09InN0cmluZyI/InN0cmluZyI6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEYpPT09IltvYmplY3QgQXJyYXldIj8iYXJyYXkiOnUubm9kZWJ1ZmZlciYmaC5pc0J1ZmZlcihGKT8ibm9kZWJ1ZmZlciI6dS51aW50OGFycmF5JiZGIGluc3RhbmNlb2YgVWludDhBcnJheT8idWludDhhcnJheSI6dS5hcnJheWJ1ZmZlciYmRiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6dm9pZCAwfSxjLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihGKXtpZighdVtGLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihGKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBsYXRmb3JtIil9LGMuTUFYX1ZBTFVFXzE2QklUUz02NTUzNSxjLk1BWF9WQUxVRV8zMkJJVFM9LTEsYy5wcmV0dHk9ZnVuY3Rpb24oRil7dmFyIFUsQixTPSIiO2ZvcihCPTA7QjwoRnx8IiIpLmxlbmd0aDtCKyspUys9IlxceCIrKChVPUYuY2hhckNvZGVBdChCKSk8MTY/IjAiOiIiKStVLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBTfSxjLmRlbGF5PWZ1bmN0aW9uKEYsVSxCKXtuKGZ1bmN0aW9uKCl7Ri5hcHBseShCfHxudWxsLFV8fFtdKX0pfSxjLmluaGVyaXRzPWZ1bmN0aW9uKEYsVSl7ZnVuY3Rpb24gQigpe31CLnByb3RvdHlwZT1VLnByb3RvdHlwZSxGLnByb3RvdHlwZT1uZXcgQn0sYy5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgRixVLEI9e307Zm9yKEY9MDtGPGFyZ3VtZW50cy5sZW5ndGg7RisrKWZvcihVIGluIGFyZ3VtZW50c1tGXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW0ZdLFUpJiZCW1VdPT09dm9pZCAwJiYoQltVXT1hcmd1bWVudHNbRl1bVV0pO3JldHVybiBCfSxjLnByZXBhcmVDb250ZW50PWZ1bmN0aW9uKEYsVSxCLFMsQyl7cmV0dXJuIHcuUHJvbWlzZS5yZXNvbHZlKFUpLnRoZW4oZnVuY3Rpb24odil7cmV0dXJuIHUuYmxvYiYmKHYgaW5zdGFuY2VvZiBCbG9ifHxbIltvYmplY3QgRmlsZV0iLCJbb2JqZWN0IEJsb2JdIl0uaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikpIT09LTEpJiZ0eXBlb2YgRmlsZVJlYWRlcjwidSI/bmV3IHcuUHJvbWlzZShmdW5jdGlvbihwLGIpe3ZhciBnPW5ldyBGaWxlUmVhZGVyO2cub25sb2FkPWZ1bmN0aW9uKHkpe3AoeS50YXJnZXQucmVzdWx0KX0sZy5vbmVycm9yPWZ1bmN0aW9uKHkpe2IoeS50YXJnZXQuZXJyb3IpfSxnLnJlYWRBc0FycmF5QnVmZmVyKHYpfSk6dn0pLnRoZW4oZnVuY3Rpb24odil7dmFyIHA9Yy5nZXRUeXBlT2Yodik7cmV0dXJuIHA/KHA9PT0iYXJyYXlidWZmZXIiP3Y9Yy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsdik6cD09PSJzdHJpbmciJiYoQz92PWQuZGVjb2RlKHYpOkImJlMhPT0hMCYmKHY9ZnVuY3Rpb24oYil7cmV0dXJuIEEoYix1LnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoYi5sZW5ndGgpOm5ldyBBcnJheShiLmxlbmd0aCkpfSh2KSkpLHYpOncuUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJDYW4ndCByZWFkIHRoZSBkYXRhIG9mICciK0YrIicuIElzIGl0IGluIGEgc3VwcG9ydGVkIEphdmFTY3JpcHQgdHlwZSAoU3RyaW5nLCBCbG9iLCBBcnJheUJ1ZmZlciwgZXRjKSA/IikpfSl9fSx7Ii4vYmFzZTY0IjoxLCIuL2V4dGVybmFsIjo2LCIuL25vZGVqc1V0aWxzIjoxNCwiLi9zdXBwb3J0IjozMCxzZXRpbW1lZGlhdGU6NTR9XSwzMzpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4vcmVhZGVyL3JlYWRlckZvciIpLGQ9aSgiLi91dGlscyIpLGg9aSgiLi9zaWduYXR1cmUiKSx3PWkoIi4vemlwRW50cnkiKSxfPWkoIi4vc3VwcG9ydCIpO2Z1bmN0aW9uIEEoUCl7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPVB9QS5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKFApe2lmKCF0aGlzLnJlYWRlci5yZWFkQW5kQ2hlY2tTaWduYXR1cmUoUCkpe3RoaXMucmVhZGVyLmluZGV4LT00O3ZhciBMPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7dGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZzogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrZC5wcmV0dHkoTCkrIiwgZXhwZWN0ZWQgIitkLnByZXR0eShQKSsiKSIpfX0saXNTaWduYXR1cmU6ZnVuY3Rpb24oUCxMKXt2YXIgTj10aGlzLnJlYWRlci5pbmRleDt0aGlzLnJlYWRlci5zZXRJbmRleChQKTt2YXIgRD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09TDtyZXR1cm4gdGhpcy5yZWFkZXIuc2V0SW5kZXgoTiksRH0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKTt2YXIgUD10aGlzLnJlYWRlci5yZWFkRGF0YSh0aGlzLnppcENvbW1lbnRMZW5ndGgpLEw9Xy51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLE49ZC50cmFuc2Zvcm1UbyhMLFApO3RoaXMuemlwQ29tbWVudD10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKE4pfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5yZWFkZXIuc2tpcCg0KSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIFAsTCxOLEQ9dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxEOylQPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksTD10aGlzLnJlYWRlci5yZWFkSW50KDQpLE49dGhpcy5yZWFkZXIucmVhZERhdGEoTCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW1BdPXtpZDpQLGxlbmd0aDpMLHZhbHVlOk59fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSwxPHRoaXMuZGlza3NDb3VudCl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIFAsTDtmb3IoUD0wO1A8dGhpcy5maWxlcy5sZW5ndGg7UCsrKUw9dGhpcy5maWxlc1tQXSx0aGlzLnJlYWRlci5zZXRJbmRleChMLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKGguTE9DQUxfRklMRV9IRUFERVIpLEwucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksTC5oYW5kbGVVVEY4KCksTC5wcm9jZXNzQXR0cmlidXRlcygpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBQO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRBbmRDaGVja1NpZ25hdHVyZShoLkNFTlRSQUxfRklMRV9IRUFERVIpOykoUD1uZXcgdyh7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKFApO2lmKHRoaXMuY2VudHJhbERpclJlY29yZHMhPT10aGlzLmZpbGVzLmxlbmd0aCYmdGhpcy5jZW50cmFsRGlyUmVjb3JkcyE9PTAmJnRoaXMuZmlsZXMubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiBleHBlY3RlZCAiK3RoaXMuY2VudHJhbERpclJlY29yZHMrIiByZWNvcmRzIGluIGNlbnRyYWwgZGlyLCBnb3QgIit0aGlzLmZpbGVzLmxlbmd0aCl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgUD10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShoLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoUDwwKXRocm93IHRoaXMuaXNTaWduYXR1cmUoMCxoLkxPQ0FMX0ZJTEVfSEVBREVSKT9uZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik6bmV3IEVycm9yKCJDYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSA6IGlzIHRoaXMgYSB6aXAgZmlsZSA/IElmIGl0IGlzLCBzZWUgaHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWwiKTt0aGlzLnJlYWRlci5zZXRJbmRleChQKTt2YXIgTD1QO2lmKHRoaXMuY2hlY2tTaWduYXR1cmUoaC5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09ZC5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09ZC5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PWQuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PWQuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PWQuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09ZC5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLChQPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKGguWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpPDApdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KFApLHRoaXMuY2hlY2tTaWduYXR1cmUoaC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLCF0aGlzLmlzU2lnbmF0dXJlKHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcixoLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCkmJih0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoaC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcjwwKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO3RoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShoLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfXZhciBOPXRoaXMuY2VudHJhbERpck9mZnNldCt0aGlzLmNlbnRyYWxEaXJTaXplO3RoaXMuemlwNjQmJihOKz0yMCxOKz0xMit0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZSk7dmFyIEQ9TC1OO2lmKDA8RCl0aGlzLmlzU2lnbmF0dXJlKEwsaC5DRU5UUkFMX0ZJTEVfSEVBREVSKXx8KHRoaXMucmVhZGVyLnplcm89RCk7ZWxzZSBpZihEPDApdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwOiBtaXNzaW5nICIrTWF0aC5hYnMoRCkrIiBieXRlcy4iKX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihQKXt0aGlzLnJlYWRlcj11KFApfSxsb2FkOmZ1bmN0aW9uKFApe3RoaXMucHJlcGFyZVJlYWRlcihQKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sZi5leHBvcnRzPUF9LHsiLi9yZWFkZXIvcmVhZGVyRm9yIjoyMiwiLi9zaWduYXR1cmUiOjIzLCIuL3N1cHBvcnQiOjMwLCIuL3V0aWxzIjozMiwiLi96aXBFbnRyeSI6MzR9XSwzNDpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4vcmVhZGVyL3JlYWRlckZvciIpLGQ9aSgiLi91dGlscyIpLGg9aSgiLi9jb21wcmVzc2VkT2JqZWN0Iiksdz1pKCIuL2NyYzMyIiksXz1pKCIuL3V0ZjgiKSxBPWkoIi4vY29tcHJlc3Npb25zIiksUD1pKCIuL3N1cHBvcnQiKTtmdW5jdGlvbiBMKE4sRCl7dGhpcy5vcHRpb25zPU4sdGhpcy5sb2FkT3B0aW9ucz1EfUwucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybigxJnRoaXMuYml0RmxhZyk9PTF9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4oMjA0OCZ0aGlzLmJpdEZsYWcpPT0yMDQ4fSxyZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKE4pe3ZhciBELEY7aWYoTi5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPU4ucmVhZEludCgyKSxGPU4ucmVhZEludCgyKSx0aGlzLmZpbGVOYW1lPU4ucmVhZERhdGEodGhpcy5maWxlTmFtZUxlbmd0aCksTi5za2lwKEYpLHRoaXMuY29tcHJlc3NlZFNpemU9PT0tMXx8dGhpcy51bmNvbXByZXNzZWRTaXplPT09LTEpdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PT0gLTEpIik7aWYoKEQ9ZnVuY3Rpb24oVSl7Zm9yKHZhciBCIGluIEEpaWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEEsQikmJkFbQl0ubWFnaWM9PT1VKXJldHVybiBBW0JdO3JldHVybiBudWxsfSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSk9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNvbXByZXNzaW9uICIrZC5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrIiB1bmtub3duIChpbm5lciBmaWxlIDogIitkLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMuZmlsZU5hbWUpKyIpIik7dGhpcy5kZWNvbXByZXNzZWQ9bmV3IGgodGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5jcmMzMixELE4ucmVhZERhdGEodGhpcy5jb21wcmVzc2VkU2l6ZSkpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oTil7dGhpcy52ZXJzaW9uTWFkZUJ5PU4ucmVhZEludCgyKSxOLnNraXAoMiksdGhpcy5iaXRGbGFnPU4ucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPU4ucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Ti5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9Ti5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9Ti5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1OLnJlYWRJbnQoNCk7dmFyIEQ9Ti5yZWFkSW50KDIpO2lmKHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9Ti5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9Ti5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PU4ucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9Ti5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1OLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1OLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpO04uc2tpcChEKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhOKSx0aGlzLnBhcnNlWklQNjRFeHRyYUZpZWxkKE4pLHRoaXMuZmlsZUNvbW1lbnQ9Ti5yZWFkRGF0YSh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKX0scHJvY2Vzc0F0dHJpYnV0ZXM6ZnVuY3Rpb24oKXt0aGlzLnVuaXhQZXJtaXNzaW9ucz1udWxsLHRoaXMuZG9zUGVybWlzc2lvbnM9bnVsbDt2YXIgTj10aGlzLnZlcnNpb25NYWRlQnk+Pjg7dGhpcy5kaXI9ISEoMTYmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKSxOPT0wJiYodGhpcy5kb3NQZXJtaXNzaW9ucz02MyZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpLE49PTMmJih0aGlzLnVuaXhQZXJtaXNzaW9ucz10aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM+PjE2JjY1NTM1KSx0aGlzLmRpcnx8dGhpcy5maWxlTmFtZVN0ci5zbGljZSgtMSkhPT0iLyJ8fCh0aGlzLmRpcj0hMCl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKCl7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIE49dSh0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1kLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9Ti5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09ZC5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1OLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1kLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PU4ucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1kLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1OLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKE4pe3ZhciBELEYsVSxCPU4uaW5kZXgrdGhpcy5leHRyYUZpZWxkc0xlbmd0aDtmb3IodGhpcy5leHRyYUZpZWxkc3x8KHRoaXMuZXh0cmFGaWVsZHM9e30pO04uaW5kZXgrNDxCOylEPU4ucmVhZEludCgyKSxGPU4ucmVhZEludCgyKSxVPU4ucmVhZERhdGEoRiksdGhpcy5leHRyYUZpZWxkc1tEXT17aWQ6RCxsZW5ndGg6Rix2YWx1ZTpVfTtOLnNldEluZGV4KEIpfSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7dmFyIE49UC51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiO2lmKHRoaXMudXNlVVRGOCgpKXRoaXMuZmlsZU5hbWVTdHI9Xy51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnRTdHI9Xy51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIEQ9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7aWYoRCE9PW51bGwpdGhpcy5maWxlTmFtZVN0cj1EO2Vsc2V7dmFyIEY9ZC50cmFuc2Zvcm1UbyhOLHRoaXMuZmlsZU5hbWUpO3RoaXMuZmlsZU5hbWVTdHI9dGhpcy5sb2FkT3B0aW9ucy5kZWNvZGVGaWxlTmFtZShGKX12YXIgVT10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtpZihVIT09bnVsbCl0aGlzLmZpbGVDb21tZW50U3RyPVU7ZWxzZXt2YXIgQj1kLnRyYW5zZm9ybVRvKE4sdGhpcy5maWxlQ29tbWVudCk7dGhpcy5maWxlQ29tbWVudFN0cj10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKEIpfX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmV4dHJhRmllbGRzWzI4Nzg5XTtpZihOKXt2YXIgRD11KE4udmFsdWUpO3JldHVybiBELnJlYWRJbnQoMSkhPT0xfHx3KHRoaXMuZmlsZU5hbWUpIT09RC5yZWFkSW50KDQpP251bGw6Xy51dGY4ZGVjb2RlKEQucmVhZERhdGEoTi5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIE49dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoTil7dmFyIEQ9dShOLnZhbHVlKTtyZXR1cm4gRC5yZWFkSW50KDEpIT09MXx8dyh0aGlzLmZpbGVDb21tZW50KSE9PUQucmVhZEludCg0KT9udWxsOl8udXRmOGRlY29kZShELnJlYWREYXRhKE4ubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH19LGYuZXhwb3J0cz1MfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMsIi4vY3JjMzIiOjQsIi4vcmVhZGVyL3JlYWRlckZvciI6MjIsIi4vc3VwcG9ydCI6MzAsIi4vdXRmOCI6MzEsIi4vdXRpbHMiOjMyfV0sMzU6W2Z1bmN0aW9uKGksZixjKXtmdW5jdGlvbiB1KEQsRixVKXt0aGlzLm5hbWU9RCx0aGlzLmRpcj1VLmRpcix0aGlzLmRhdGU9VS5kYXRlLHRoaXMuY29tbWVudD1VLmNvbW1lbnQsdGhpcy51bml4UGVybWlzc2lvbnM9VS51bml4UGVybWlzc2lvbnMsdGhpcy5kb3NQZXJtaXNzaW9ucz1VLmRvc1Blcm1pc3Npb25zLHRoaXMuX2RhdGE9Rix0aGlzLl9kYXRhQmluYXJ5PVUuYmluYXJ5LHRoaXMub3B0aW9ucz17Y29tcHJlc3Npb246VS5jb21wcmVzc2lvbixjb21wcmVzc2lvbk9wdGlvbnM6VS5jb21wcmVzc2lvbk9wdGlvbnN9fXZhciBkPWkoIi4vc3RyZWFtL1N0cmVhbUhlbHBlciIpLGg9aSgiLi9zdHJlYW0vRGF0YVdvcmtlciIpLHc9aSgiLi91dGY4IiksXz1pKCIuL2NvbXByZXNzZWRPYmplY3QiKSxBPWkoIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXIiKTt1LnByb3RvdHlwZT17aW50ZXJuYWxTdHJlYW06ZnVuY3Rpb24oRCl7dmFyIEY9bnVsbCxVPSJzdHJpbmciO3RyeXtpZighRCl0aHJvdyBuZXcgRXJyb3IoIk5vIG91dHB1dCB0eXBlIHNwZWNpZmllZC4iKTt2YXIgQj0oVT1ELnRvTG93ZXJDYXNlKCkpPT09InN0cmluZyJ8fFU9PT0idGV4dCI7VSE9PSJiaW5hcnlzdHJpbmciJiZVIT09InRleHQifHwoVT0ic3RyaW5nIiksRj10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7dmFyIFM9IXRoaXMuX2RhdGFCaW5hcnk7UyYmIUImJihGPUYucGlwZShuZXcgdy5VdGY4RW5jb2RlV29ya2VyKSksIVMmJkImJihGPUYucGlwZShuZXcgdy5VdGY4RGVjb2RlV29ya2VyKSl9Y2F0Y2goQyl7KEY9bmV3IEEoImVycm9yIikpLmVycm9yKEMpfXJldHVybiBuZXcgZChGLFUsIiIpfSxhc3luYzpmdW5jdGlvbihELEYpe3JldHVybiB0aGlzLmludGVybmFsU3RyZWFtKEQpLmFjY3VtdWxhdGUoRil9LG5vZGVTdHJlYW06ZnVuY3Rpb24oRCxGKXtyZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmVhbShEfHwibm9kZWJ1ZmZlciIpLnRvTm9kZWpzU3RyZWFtKEYpfSxfY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oRCxGKXtpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgXyYmdGhpcy5fZGF0YS5jb21wcmVzc2lvbi5tYWdpYz09PUQubWFnaWMpcmV0dXJuIHRoaXMuX2RhdGEuZ2V0Q29tcHJlc3NlZFdvcmtlcigpO3ZhciBVPXRoaXMuX2RlY29tcHJlc3NXb3JrZXIoKTtyZXR1cm4gdGhpcy5fZGF0YUJpbmFyeXx8KFU9VS5waXBlKG5ldyB3LlV0ZjhFbmNvZGVXb3JrZXIpKSxfLmNyZWF0ZVdvcmtlckZyb20oVSxELEYpfSxfZGVjb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhIGluc3RhbmNlb2YgXz90aGlzLl9kYXRhLmdldENvbnRlbnRXb3JrZXIoKTp0aGlzLl9kYXRhIGluc3RhbmNlb2YgQT90aGlzLl9kYXRhOm5ldyBoKHRoaXMuX2RhdGEpfX07Zm9yKHZhciBQPVsiYXNUZXh0IiwiYXNCaW5hcnkiLCJhc05vZGVCdWZmZXIiLCJhc1VpbnQ4QXJyYXkiLCJhc0FycmF5QnVmZmVyIl0sTD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS4iKX0sTj0wO048UC5sZW5ndGg7TisrKXUucHJvdG90eXBlW1BbTl1dPUw7Zi5leHBvcnRzPXV9LHsiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL3N0cmVhbS9EYXRhV29ya2VyIjoyNywiLi9zdHJlYW0vR2VuZXJpY1dvcmtlciI6MjgsIi4vc3RyZWFtL1N0cmVhbUhlbHBlciI6MjksIi4vdXRmOCI6MzF9XSwzNjpbZnVuY3Rpb24oaSxmLGMpeyhmdW5jdGlvbih1KXt2YXIgZCxoLHc9dS5NdXRhdGlvbk9ic2VydmVyfHx1LldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7aWYodyl7dmFyIF89MCxBPW5ldyB3KEQpLFA9dS5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7QS5vYnNlcnZlKFAse2NoYXJhY3RlckRhdGE6ITB9KSxkPWZ1bmN0aW9uKCl7UC5kYXRhPV89KytfJTJ9fWVsc2UgaWYodS5zZXRJbW1lZGlhdGV8fHUuTWVzc2FnZUNoYW5uZWw9PT12b2lkIDApZD0iZG9jdW1lbnQiaW4gdSYmIm9ucmVhZHlzdGF0ZWNoYW5nZSJpbiB1LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpP2Z1bmN0aW9uKCl7dmFyIEY9dS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtGLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0QoKSxGLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLEYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChGKSxGPW51bGx9LHUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKEYpfTpmdW5jdGlvbigpe3NldFRpbWVvdXQoRCwwKX07ZWxzZXt2YXIgTD1uZXcgdS5NZXNzYWdlQ2hhbm5lbDtMLnBvcnQxLm9ubWVzc2FnZT1ELGQ9ZnVuY3Rpb24oKXtMLnBvcnQyLnBvc3RNZXNzYWdlKDApfX12YXIgTj1bXTtmdW5jdGlvbiBEKCl7dmFyIEYsVTtoPSEwO2Zvcih2YXIgQj1OLmxlbmd0aDtCOyl7Zm9yKFU9TixOPVtdLEY9LTE7KytGPEI7KVVbRl0oKTtCPU4ubGVuZ3RofWg9ITF9Zi5leHBvcnRzPWZ1bmN0aW9uKEYpe04ucHVzaChGKSE9PTF8fGh8fGQoKX19KS5jYWxsKHRoaXMscyE9PXZvaWQgMD9zOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzNzpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoImltbWVkaWF0ZSIpO2Z1bmN0aW9uIGQoKXt9dmFyIGg9e30sdz1bIlJFSkVDVEVEIl0sXz1bIkZVTEZJTExFRCJdLEE9WyJQRU5ESU5HIl07ZnVuY3Rpb24gUChCKXtpZih0eXBlb2YgQiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJyZXNvbHZlciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt0aGlzLnN0YXRlPUEsdGhpcy5xdWV1ZT1bXSx0aGlzLm91dGNvbWU9dm9pZCAwLEIhPT1kJiZGKHRoaXMsQil9ZnVuY3Rpb24gTChCLFMsQyl7dGhpcy5wcm9taXNlPUIsdHlwZW9mIFM9PSJmdW5jdGlvbiImJih0aGlzLm9uRnVsZmlsbGVkPVMsdGhpcy5jYWxsRnVsZmlsbGVkPXRoaXMub3RoZXJDYWxsRnVsZmlsbGVkKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmKHRoaXMub25SZWplY3RlZD1DLHRoaXMuY2FsbFJlamVjdGVkPXRoaXMub3RoZXJDYWxsUmVqZWN0ZWQpfWZ1bmN0aW9uIE4oQixTLEMpe3UoZnVuY3Rpb24oKXt2YXIgdjt0cnl7dj1TKEMpfWNhdGNoKHApe3JldHVybiBoLnJlamVjdChCLHApfXY9PT1CP2gucmVqZWN0KEIsbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZiIpKTpoLnJlc29sdmUoQix2KX0pfWZ1bmN0aW9uIEQoQil7dmFyIFM9QiYmQi50aGVuO2lmKEImJih0eXBlb2YgQj09Im9iamVjdCJ8fHR5cGVvZiBCPT0iZnVuY3Rpb24iKSYmdHlwZW9mIFM9PSJmdW5jdGlvbiIpcmV0dXJuIGZ1bmN0aW9uKCl7Uy5hcHBseShCLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEYoQixTKXt2YXIgQz0hMTtmdW5jdGlvbiB2KGcpe0N8fChDPSEwLGgucmVqZWN0KEIsZykpfWZ1bmN0aW9uIHAoZyl7Q3x8KEM9ITAsaC5yZXNvbHZlKEIsZykpfXZhciBiPVUoZnVuY3Rpb24oKXtTKHAsdil9KTtiLnN0YXR1cz09PSJlcnJvciImJnYoYi52YWx1ZSl9ZnVuY3Rpb24gVShCLFMpe3ZhciBDPXt9O3RyeXtDLnZhbHVlPUIoUyksQy5zdGF0dXM9InN1Y2Nlc3MifWNhdGNoKHYpe0Muc3RhdHVzPSJlcnJvciIsQy52YWx1ZT12fXJldHVybiBDfShmLmV4cG9ydHM9UCkucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oQil7aWYodHlwZW9mIEIhPSJmdW5jdGlvbiIpcmV0dXJuIHRoaXM7dmFyIFM9dGhpcy5jb25zdHJ1Y3RvcjtyZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKEMpe3JldHVybiBTLnJlc29sdmUoQigpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KX0sZnVuY3Rpb24oQyl7cmV0dXJuIFMucmVzb2x2ZShCKCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBDfSl9KX0sUC5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMudGhlbihudWxsLEIpfSxQLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKEIsUyl7aWYodHlwZW9mIEIhPSJmdW5jdGlvbiImJnRoaXMuc3RhdGU9PT1ffHx0eXBlb2YgUyE9ImZ1bmN0aW9uIiYmdGhpcy5zdGF0ZT09PXcpcmV0dXJuIHRoaXM7dmFyIEM9bmV3IHRoaXMuY29uc3RydWN0b3IoZCk7cmV0dXJuIHRoaXMuc3RhdGUhPT1BP04oQyx0aGlzLnN0YXRlPT09Xz9COlMsdGhpcy5vdXRjb21lKTp0aGlzLnF1ZXVlLnB1c2gobmV3IEwoQyxCLFMpKSxDfSxMLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkPWZ1bmN0aW9uKEIpe2gucmVzb2x2ZSh0aGlzLnByb21pc2UsQil9LEwucHJvdG90eXBlLm90aGVyQ2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihCKXtOKHRoaXMucHJvbWlzZSx0aGlzLm9uRnVsZmlsbGVkLEIpfSxMLnByb3RvdHlwZS5jYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oQil7aC5yZWplY3QodGhpcy5wcm9taXNlLEIpfSxMLnByb3RvdHlwZS5vdGhlckNhbGxSZWplY3RlZD1mdW5jdGlvbihCKXtOKHRoaXMucHJvbWlzZSx0aGlzLm9uUmVqZWN0ZWQsQil9LGgucmVzb2x2ZT1mdW5jdGlvbihCLFMpe3ZhciBDPVUoRCxTKTtpZihDLnN0YXR1cz09PSJlcnJvciIpcmV0dXJuIGgucmVqZWN0KEIsQy52YWx1ZSk7dmFyIHY9Qy52YWx1ZTtpZih2KUYoQix2KTtlbHNle0Iuc3RhdGU9XyxCLm91dGNvbWU9Uztmb3IodmFyIHA9LTEsYj1CLnF1ZXVlLmxlbmd0aDsrK3A8YjspQi5xdWV1ZVtwXS5jYWxsRnVsZmlsbGVkKFMpfXJldHVybiBCfSxoLnJlamVjdD1mdW5jdGlvbihCLFMpe0Iuc3RhdGU9dyxCLm91dGNvbWU9Uztmb3IodmFyIEM9LTEsdj1CLnF1ZXVlLmxlbmd0aDsrK0M8djspQi5xdWV1ZVtDXS5jYWxsUmVqZWN0ZWQoUyk7cmV0dXJuIEJ9LFAucmVzb2x2ZT1mdW5jdGlvbihCKXtyZXR1cm4gQiBpbnN0YW5jZW9mIHRoaXM/QjpoLnJlc29sdmUobmV3IHRoaXMoZCksQil9LFAucmVqZWN0PWZ1bmN0aW9uKEIpe3ZhciBTPW5ldyB0aGlzKGQpO3JldHVybiBoLnJlamVjdChTLEIpfSxQLmFsbD1mdW5jdGlvbihCKXt2YXIgUz10aGlzO2lmKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChCKSE9PSJbb2JqZWN0IEFycmF5XSIpcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoIm11c3QgYmUgYW4gYXJyYXkiKSk7dmFyIEM9Qi5sZW5ndGgsdj0hMTtpZighQylyZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTtmb3IodmFyIHA9bmV3IEFycmF5KEMpLGI9MCxnPS0xLHk9bmV3IHRoaXMoZCk7KytnPEM7KU0oQltnXSxnKTtyZXR1cm4geTtmdW5jdGlvbiBNKE8sUil7Uy5yZXNvbHZlKE8pLnRoZW4oZnVuY3Rpb24oeil7cFtSXT16LCsrYiE9PUN8fHZ8fCh2PSEwLGgucmVzb2x2ZSh5LHApKX0sZnVuY3Rpb24oeil7dnx8KHY9ITAsaC5yZWplY3QoeSx6KSl9KX19LFAucmFjZT1mdW5jdGlvbihCKXtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQikhPT0iW29iamVjdCBBcnJheV0iKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKCJtdXN0IGJlIGFuIGFycmF5IikpO3ZhciBTPUIubGVuZ3RoLEM9ITE7aWYoIVMpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciB2LHA9LTEsYj1uZXcgdGhpcyhkKTsrK3A8Uzspdj1CW3BdLHRoaXMucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKGcpe0N8fChDPSEwLGgucmVzb2x2ZShiLGcpKX0sZnVuY3Rpb24oZyl7Q3x8KEM9ITAsaC5yZWplY3QoYixnKSl9KTtyZXR1cm4gYn19LHtpbW1lZGlhdGU6MzZ9XSwzODpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PXt9OygwLGkoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbikodSxpKCIuL2xpYi9kZWZsYXRlIiksaSgiLi9saWIvaW5mbGF0ZSIpLGkoIi4vbGliL3psaWIvY29uc3RhbnRzIikpLGYuZXhwb3J0cz11fSx7Ii4vbGliL2RlZmxhdGUiOjM5LCIuL2xpYi9pbmZsYXRlIjo0MCwiLi9saWIvdXRpbHMvY29tbW9uIjo0MSwiLi9saWIvemxpYi9jb25zdGFudHMiOjQ0fV0sMzk6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuL3psaWIvZGVmbGF0ZSIpLGQ9aSgiLi91dGlscy9jb21tb24iKSxoPWkoIi4vdXRpbHMvc3RyaW5ncyIpLHc9aSgiLi96bGliL21lc3NhZ2VzIiksXz1pKCIuL3psaWIvenN0cmVhbSIpLEE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBQKE4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgUChOKTt0aGlzLm9wdGlvbnM9ZC5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6MCx0bzoiIn0sTnx8e30pO3ZhciBEPXRoaXMub3B0aW9ucztELnJhdyYmMDxELndpbmRvd0JpdHM/RC53aW5kb3dCaXRzPS1ELndpbmRvd0JpdHM6RC5nemlwJiYwPEQud2luZG93Qml0cyYmRC53aW5kb3dCaXRzPDE2JiYoRC53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgXyx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIEY9dS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLEQubGV2ZWwsRC5tZXRob2QsRC53aW5kb3dCaXRzLEQubWVtTGV2ZWwsRC5zdHJhdGVneSk7aWYoRiE9PTApdGhyb3cgbmV3IEVycm9yKHdbRl0pO2lmKEQuaGVhZGVyJiZ1LmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLEQuaGVhZGVyKSxELmRpY3Rpb25hcnkpe3ZhciBVO2lmKFU9dHlwZW9mIEQuZGljdGlvbmFyeT09InN0cmluZyI/aC5zdHJpbmcyYnVmKEQuZGljdGlvbmFyeSk6QS5jYWxsKEQuZGljdGlvbmFyeSk9PT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iP25ldyBVaW50OEFycmF5KEQuZGljdGlvbmFyeSk6RC5kaWN0aW9uYXJ5LChGPXUuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLFUpKSE9PTApdGhyb3cgbmV3IEVycm9yKHdbRl0pO3RoaXMuX2RpY3Rfc2V0PSEwfX1mdW5jdGlvbiBMKE4sRCl7dmFyIEY9bmV3IFAoRCk7aWYoRi5wdXNoKE4sITApLEYuZXJyKXRocm93IEYubXNnfHx3W0YuZXJyXTtyZXR1cm4gRi5yZXN1bHR9UC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihOLEQpe3ZhciBGLFUsQj10aGlzLnN0cm0sUz10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7VT1EPT09fn5EP0Q6RD09PSEwPzQ6MCx0eXBlb2YgTj09InN0cmluZyI/Qi5pbnB1dD1oLnN0cmluZzJidWYoTik6QS5jYWxsKE4pPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9CLmlucHV0PW5ldyBVaW50OEFycmF5KE4pOkIuaW5wdXQ9TixCLm5leHRfaW49MCxCLmF2YWlsX2luPUIuaW5wdXQubGVuZ3RoO2Rve2lmKEIuYXZhaWxfb3V0PT09MCYmKEIub3V0cHV0PW5ldyBkLkJ1ZjgoUyksQi5uZXh0X291dD0wLEIuYXZhaWxfb3V0PVMpLChGPXUuZGVmbGF0ZShCLFUpKSE9PTEmJkYhPT0wKXJldHVybiB0aGlzLm9uRW5kKEYpLCEodGhpcy5lbmRlZD0hMCk7Qi5hdmFpbF9vdXQhPT0wJiYoQi5hdmFpbF9pbiE9PTB8fFUhPT00JiZVIT09Mil8fCh0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLm9uRGF0YShoLmJ1ZjJiaW5zdHJpbmcoZC5zaHJpbmtCdWYoQi5vdXRwdXQsQi5uZXh0X291dCkpKTp0aGlzLm9uRGF0YShkLnNocmlua0J1ZihCLm91dHB1dCxCLm5leHRfb3V0KSkpfXdoaWxlKCgwPEIuYXZhaWxfaW58fEIuYXZhaWxfb3V0PT09MCkmJkYhPT0xKTtyZXR1cm4gVT09PTQ/KEY9dS5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChGKSx0aGlzLmVuZGVkPSEwLEY9PT0wKTpVIT09Mnx8KHRoaXMub25FbmQoMCksIShCLmF2YWlsX291dD0wKSl9LFAucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihOKXt0aGlzLmNodW5rcy5wdXNoKE4pfSxQLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihOKXtOPT09MCYmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PWQuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPU4sdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sYy5EZWZsYXRlPVAsYy5kZWZsYXRlPUwsYy5kZWZsYXRlUmF3PWZ1bmN0aW9uKE4sRCl7cmV0dXJuKEQ9RHx8e30pLnJhdz0hMCxMKE4sRCl9LGMuZ3ppcD1mdW5jdGlvbihOLEQpe3JldHVybihEPUR8fHt9KS5nemlwPSEwLEwoTixEKX19LHsiLi91dGlscy9jb21tb24iOjQxLCIuL3V0aWxzL3N0cmluZ3MiOjQyLCIuL3psaWIvZGVmbGF0ZSI6NDYsIi4vemxpYi9tZXNzYWdlcyI6NTEsIi4vemxpYi96c3RyZWFtIjo1M31dLDQwOltmdW5jdGlvbihpLGYsYyl7dmFyIHU9aSgiLi96bGliL2luZmxhdGUiKSxkPWkoIi4vdXRpbHMvY29tbW9uIiksaD1pKCIuL3V0aWxzL3N0cmluZ3MiKSx3PWkoIi4vemxpYi9jb25zdGFudHMiKSxfPWkoIi4vemxpYi9tZXNzYWdlcyIpLEE9aSgiLi96bGliL3pzdHJlYW0iKSxQPWkoIi4vemxpYi9nemhlYWRlciIpLEw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBOKEYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTihGKTt0aGlzLm9wdGlvbnM9ZC5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LEZ8fHt9KTt2YXIgVT10aGlzLm9wdGlvbnM7VS5yYXcmJjA8PVUud2luZG93Qml0cyYmVS53aW5kb3dCaXRzPDE2JiYoVS53aW5kb3dCaXRzPS1VLndpbmRvd0JpdHMsVS53aW5kb3dCaXRzPT09MCYmKFUud2luZG93Qml0cz0tMTUpKSwhKDA8PVUud2luZG93Qml0cyYmVS53aW5kb3dCaXRzPDE2KXx8RiYmRi53aW5kb3dCaXRzfHwoVS53aW5kb3dCaXRzKz0zMiksMTU8VS53aW5kb3dCaXRzJiZVLndpbmRvd0JpdHM8NDgmJiEoMTUmVS53aW5kb3dCaXRzKSYmKFUud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IEEsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBCPXUuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxVLndpbmRvd0JpdHMpO2lmKEIhPT13LlpfT0spdGhyb3cgbmV3IEVycm9yKF9bQl0pO3RoaXMuaGVhZGVyPW5ldyBQLHUuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIEQoRixVKXt2YXIgQj1uZXcgTihVKTtpZihCLnB1c2goRiwhMCksQi5lcnIpdGhyb3cgQi5tc2d8fF9bQi5lcnJdO3JldHVybiBCLnJlc3VsdH1OLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsVSl7dmFyIEIsUyxDLHYscCxiLGc9dGhpcy5zdHJtLHk9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxNPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LE89ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtTPVU9PT1+flU/VTpVPT09ITA/dy5aX0ZJTklTSDp3LlpfTk9fRkxVU0gsdHlwZW9mIEY9PSJzdHJpbmciP2cuaW5wdXQ9aC5iaW5zdHJpbmcyYnVmKEYpOkwuY2FsbChGKT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/Zy5pbnB1dD1uZXcgVWludDhBcnJheShGKTpnLmlucHV0PUYsZy5uZXh0X2luPTAsZy5hdmFpbF9pbj1nLmlucHV0Lmxlbmd0aDtkb3tpZihnLmF2YWlsX291dD09PTAmJihnLm91dHB1dD1uZXcgZC5CdWY4KHkpLGcubmV4dF9vdXQ9MCxnLmF2YWlsX291dD15KSwoQj11LmluZmxhdGUoZyx3LlpfTk9fRkxVU0gpKT09PXcuWl9ORUVEX0RJQ1QmJk0mJihiPXR5cGVvZiBNPT0ic3RyaW5nIj9oLnN0cmluZzJidWYoTSk6TC5jYWxsKE0pPT09IltvYmplY3QgQXJyYXlCdWZmZXJdIj9uZXcgVWludDhBcnJheShNKTpNLEI9dS5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sYikpLEI9PT13LlpfQlVGX0VSUk9SJiZPPT09ITAmJihCPXcuWl9PSyxPPSExKSxCIT09dy5aX1NUUkVBTV9FTkQmJkIhPT13LlpfT0spcmV0dXJuIHRoaXMub25FbmQoQiksISh0aGlzLmVuZGVkPSEwKTtnLm5leHRfb3V0JiYoZy5hdmFpbF9vdXQhPT0wJiZCIT09dy5aX1NUUkVBTV9FTkQmJihnLmF2YWlsX2luIT09MHx8UyE9PXcuWl9GSU5JU0gmJlMhPT13LlpfU1lOQ19GTFVTSCl8fCh0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj8oQz1oLnV0Zjhib3JkZXIoZy5vdXRwdXQsZy5uZXh0X291dCksdj1nLm5leHRfb3V0LUMscD1oLmJ1ZjJzdHJpbmcoZy5vdXRwdXQsQyksZy5uZXh0X291dD12LGcuYXZhaWxfb3V0PXktdix2JiZkLmFycmF5U2V0KGcub3V0cHV0LGcub3V0cHV0LEMsdiwwKSx0aGlzLm9uRGF0YShwKSk6dGhpcy5vbkRhdGEoZC5zaHJpbmtCdWYoZy5vdXRwdXQsZy5uZXh0X291dCkpKSksZy5hdmFpbF9pbj09PTAmJmcuYXZhaWxfb3V0PT09MCYmKE89ITApfXdoaWxlKCgwPGcuYXZhaWxfaW58fGcuYXZhaWxfb3V0PT09MCkmJkIhPT13LlpfU1RSRUFNX0VORCk7cmV0dXJuIEI9PT13LlpfU1RSRUFNX0VORCYmKFM9dy5aX0ZJTklTSCksUz09PXcuWl9GSU5JU0g/KEI9dS5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChCKSx0aGlzLmVuZGVkPSEwLEI9PT13LlpfT0spOlMhPT13LlpfU1lOQ19GTFVTSHx8KHRoaXMub25FbmQody5aX09LKSwhKGcuYXZhaWxfb3V0PTApKX0sTi5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKEYpe3RoaXMuY2h1bmtzLnB1c2goRil9LE4ucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKEYpe0Y9PT13LlpfT0smJih0aGlzLm9wdGlvbnMudG89PT0ic3RyaW5nIj90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKCIiKTp0aGlzLnJlc3VsdD1kLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1GLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LGMuSW5mbGF0ZT1OLGMuaW5mbGF0ZT1ELGMuaW5mbGF0ZVJhdz1mdW5jdGlvbihGLFUpe3JldHVybihVPVV8fHt9KS5yYXc9ITAsRChGLFUpfSxjLnVuZ3ppcD1EfSx7Ii4vdXRpbHMvY29tbW9uIjo0MSwiLi91dGlscy9zdHJpbmdzIjo0MiwiLi96bGliL2NvbnN0YW50cyI6NDQsIi4vemxpYi9nemhlYWRlciI6NDcsIi4vemxpYi9pbmZsYXRlIjo0OSwiLi96bGliL21lc3NhZ2VzIjo1MSwiLi96bGliL3pzdHJlYW0iOjUzfV0sNDE6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBJbnQzMkFycmF5PCJ1IjtjLmFzc2lnbj1mdW5jdGlvbih3KXtmb3IodmFyIF89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO18ubGVuZ3RoOyl7dmFyIEE9Xy5zaGlmdCgpO2lmKEEpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKEErIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgUCBpbiBBKUEuaGFzT3duUHJvcGVydHkoUCkmJih3W1BdPUFbUF0pfX1yZXR1cm4gd30sYy5zaHJpbmtCdWY9ZnVuY3Rpb24odyxfKXtyZXR1cm4gdy5sZW5ndGg9PT1fP3c6dy5zdWJhcnJheT93LnN1YmFycmF5KDAsXyk6KHcubGVuZ3RoPV8sdyl9O3ZhciBkPXthcnJheVNldDpmdW5jdGlvbih3LF8sQSxQLEwpe2lmKF8uc3ViYXJyYXkmJncuc3ViYXJyYXkpdy5zZXQoXy5zdWJhcnJheShBLEErUCksTCk7ZWxzZSBmb3IodmFyIE49MDtOPFA7TisrKXdbTCtOXT1fW0ErTl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odyl7dmFyIF8sQSxQLEwsTixEO2ZvcihfPVA9MCxBPXcubGVuZ3RoO188QTtfKyspUCs9d1tfXS5sZW5ndGg7Zm9yKEQ9bmV3IFVpbnQ4QXJyYXkoUCksXz1MPTAsQT13Lmxlbmd0aDtfPEE7XysrKU49d1tfXSxELnNldChOLEwpLEwrPU4ubGVuZ3RoO3JldHVybiBEfX0saD17YXJyYXlTZXQ6ZnVuY3Rpb24odyxfLEEsUCxMKXtmb3IodmFyIE49MDtOPFA7TisrKXdbTCtOXT1fW0ErTl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odyl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHcpfX07Yy5zZXRUeXBlZD1mdW5jdGlvbih3KXt3PyhjLkJ1Zjg9VWludDhBcnJheSxjLkJ1ZjE2PVVpbnQxNkFycmF5LGMuQnVmMzI9SW50MzJBcnJheSxjLmFzc2lnbihjLGQpKTooYy5CdWY4PUFycmF5LGMuQnVmMTY9QXJyYXksYy5CdWYzMj1BcnJheSxjLmFzc2lnbihjLGgpKX0sYy5zZXRUeXBlZCh1KX0se31dLDQyOltmdW5jdGlvbihpLGYsYyl7dmFyIHU9aSgiLi9jb21tb24iKSxkPSEwLGg9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe2Q9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7aD0hMX1mb3IodmFyIHc9bmV3IHUuQnVmOCgyNTYpLF89MDtfPDI1NjtfKyspd1tfXT0yNTI8PV8/NjoyNDg8PV8/NToyNDA8PV8/NDoyMjQ8PV8/MzoxOTI8PV8/MjoxO2Z1bmN0aW9uIEEoUCxMKXtpZihMPDY1NTM3JiYoUC5zdWJhcnJheSYmaHx8IVAuc3ViYXJyYXkmJmQpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdS5zaHJpbmtCdWYoUCxMKSk7Zm9yKHZhciBOPSIiLEQ9MDtEPEw7RCsrKU4rPVN0cmluZy5mcm9tQ2hhckNvZGUoUFtEXSk7cmV0dXJuIE59d1syNTRdPXdbMjU0XT0xLGMuc3RyaW5nMmJ1Zj1mdW5jdGlvbihQKXt2YXIgTCxOLEQsRixVLEI9UC5sZW5ndGgsUz0wO2ZvcihGPTA7RjxCO0YrKykoNjQ1MTImKE49UC5jaGFyQ29kZUF0KEYpKSk9PTU1Mjk2JiZGKzE8QiYmKDY0NTEyJihEPVAuY2hhckNvZGVBdChGKzEpKSk9PTU2MzIwJiYoTj02NTUzNisoTi01NTI5Njw8MTApKyhELTU2MzIwKSxGKyspLFMrPU48MTI4PzE6TjwyMDQ4PzI6Tjw2NTUzNj8zOjQ7Zm9yKEw9bmV3IHUuQnVmOChTKSxGPVU9MDtVPFM7RisrKSg2NDUxMiYoTj1QLmNoYXJDb2RlQXQoRikpKT09NTUyOTYmJkYrMTxCJiYoNjQ1MTImKEQ9UC5jaGFyQ29kZUF0KEYrMSkpKT09NTYzMjAmJihOPTY1NTM2KyhOLTU1Mjk2PDwxMCkrKEQtNTYzMjApLEYrKyksTjwxMjg/TFtVKytdPU46KE48MjA0OD9MW1UrK109MTkyfE4+Pj42OihOPDY1NTM2P0xbVSsrXT0yMjR8Tj4+PjEyOihMW1UrK109MjQwfE4+Pj4xOCxMW1UrK109MTI4fE4+Pj4xMiY2MyksTFtVKytdPTEyOHxOPj4+NiY2MyksTFtVKytdPTEyOHw2MyZOKTtyZXR1cm4gTH0sYy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFApe3JldHVybiBBKFAsUC5sZW5ndGgpfSxjLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oUCl7Zm9yKHZhciBMPW5ldyB1LkJ1ZjgoUC5sZW5ndGgpLE49MCxEPUwubGVuZ3RoO048RDtOKyspTFtOXT1QLmNoYXJDb2RlQXQoTik7cmV0dXJuIEx9LGMuYnVmMnN0cmluZz1mdW5jdGlvbihQLEwpe3ZhciBOLEQsRixVLEI9THx8UC5sZW5ndGgsUz1uZXcgQXJyYXkoMipCKTtmb3IoTj1EPTA7TjxCOylpZigoRj1QW04rK10pPDEyOClTW0QrK109RjtlbHNlIGlmKDQ8KFU9d1tGXSkpU1tEKytdPTY1NTMzLE4rPVUtMTtlbHNle2ZvcihGJj1VPT09Mj8zMTpVPT09Mz8xNTo3OzE8VSYmTjxCOylGPUY8PDZ8NjMmUFtOKytdLFUtLTsxPFU/U1tEKytdPTY1NTMzOkY8NjU1MzY/U1tEKytdPUY6KEYtPTY1NTM2LFNbRCsrXT01NTI5NnxGPj4xMCYxMDIzLFNbRCsrXT01NjMyMHwxMDIzJkYpfXJldHVybiBBKFMsRCl9LGMudXRmOGJvcmRlcj1mdW5jdGlvbihQLEwpe3ZhciBOO2ZvcigoTD1MfHxQLmxlbmd0aCk+UC5sZW5ndGgmJihMPVAubGVuZ3RoKSxOPUwtMTswPD1OJiYoMTkyJlBbTl0pPT0xMjg7KU4tLTtyZXR1cm4gTjwwfHxOPT09MD9MOk4rd1tQW05dXT5MP046TH19LHsiLi9jb21tb24iOjQxfV0sNDM6W2Z1bmN0aW9uKGksZixjKXtmLmV4cG9ydHM9ZnVuY3Rpb24odSxkLGgsdyl7Zm9yKHZhciBfPTY1NTM1JnV8MCxBPXU+Pj4xNiY2NTUzNXwwLFA9MDtoIT09MDspe2ZvcihoLT1QPTJlMzxoPzJlMzpoO0E9QSsoXz1fK2RbdysrXXwwKXwwLC0tUDspO18lPTY1NTIxLEElPTY1NTIxfXJldHVybiBffEE8PDE2fDB9fSx7fV0sNDQ6W2Z1bmN0aW9uKGksZixjKXtmLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw0NTpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWZ1bmN0aW9uKCl7Zm9yKHZhciBkLGg9W10sdz0wO3c8MjU2O3crKyl7ZD13O2Zvcih2YXIgXz0wO188ODtfKyspZD0xJmQ/Mzk4ODI5MjM4NF5kPj4+MTpkPj4+MTtoW3ddPWR9cmV0dXJuIGh9KCk7Zi5leHBvcnRzPWZ1bmN0aW9uKGQsaCx3LF8pe3ZhciBBPXUsUD1fK3c7ZF49LTE7Zm9yKHZhciBMPV87TDxQO0wrKylkPWQ+Pj44XkFbMjU1JihkXmhbTF0pXTtyZXR1cm4tMV5kfX0se31dLDQ2OltmdW5jdGlvbihpLGYsYyl7dmFyIHUsZD1pKCIuLi91dGlscy9jb21tb24iKSxoPWkoIi4vdHJlZXMiKSx3PWkoIi4vYWRsZXIzMiIpLF89aSgiLi9jcmMzMiIpLEE9aSgiLi9tZXNzYWdlcyIpLFA9LTIsTD0yNTgsTj0yNjIsRD0xMTM7ZnVuY3Rpb24gRihqLFcpe3JldHVybiBqLm1zZz1BW1ddLFd9ZnVuY3Rpb24gVShqKXtyZXR1cm4oajw8MSktKDQ8aj85OjApfWZ1bmN0aW9uIEIoail7Zm9yKHZhciBXPWoubGVuZ3RoOzA8PS0tVzspaltXXT0wfWZ1bmN0aW9uIFMoail7dmFyIFc9ai5zdGF0ZSxUPVcucGVuZGluZztUPmouYXZhaWxfb3V0JiYoVD1qLmF2YWlsX291dCksVCE9PTAmJihkLmFycmF5U2V0KGoub3V0cHV0LFcucGVuZGluZ19idWYsVy5wZW5kaW5nX291dCxULGoubmV4dF9vdXQpLGoubmV4dF9vdXQrPVQsVy5wZW5kaW5nX291dCs9VCxqLnRvdGFsX291dCs9VCxqLmF2YWlsX291dC09VCxXLnBlbmRpbmctPVQsVy5wZW5kaW5nPT09MCYmKFcucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIEMoaixXKXtoLl90cl9mbHVzaF9ibG9jayhqLDA8PWouYmxvY2tfc3RhcnQ/ai5ibG9ja19zdGFydDotMSxqLnN0cnN0YXJ0LWouYmxvY2tfc3RhcnQsVyksai5ibG9ja19zdGFydD1qLnN0cnN0YXJ0LFMoai5zdHJtKX1mdW5jdGlvbiB2KGosVyl7ai5wZW5kaW5nX2J1ZltqLnBlbmRpbmcrK109V31mdW5jdGlvbiBwKGosVyl7ai5wZW5kaW5nX2J1ZltqLnBlbmRpbmcrK109Vz4+PjgmMjU1LGoucGVuZGluZ19idWZbai5wZW5kaW5nKytdPTI1NSZXfWZ1bmN0aW9uIGIoaixXKXt2YXIgVCx4LEk9ai5tYXhfY2hhaW5fbGVuZ3RoLEg9ai5zdHJzdGFydCxaPWoucHJldl9sZW5ndGgsVj1qLm5pY2VfbWF0Y2gsSz1qLnN0cnN0YXJ0Pmoud19zaXplLU4/ai5zdHJzdGFydC0oai53X3NpemUtTik6MCxZPWoud2luZG93LEo9ai53X21hc2sscT1qLnByZXYsRz1qLnN0cnN0YXJ0K0wsUT1ZW0grWi0xXSxydD1ZW0grWl07ai5wcmV2X2xlbmd0aD49ai5nb29kX21hdGNoJiYoST4+PTIpLFY+ai5sb29rYWhlYWQmJihWPWoubG9va2FoZWFkKTtkbyBpZihZWyhUPVcpK1pdPT09cnQmJllbVCtaLTFdPT09USYmWVtUXT09PVlbSF0mJllbKytUXT09PVlbSCsxXSl7SCs9MixUKys7ZG87d2hpbGUoWVsrK0hdPT09WVsrK1RdJiZZWysrSF09PT1ZWysrVF0mJllbKytIXT09PVlbKytUXSYmWVsrK0hdPT09WVsrK1RdJiZZWysrSF09PT1ZWysrVF0mJllbKytIXT09PVlbKytUXSYmWVsrK0hdPT09WVsrK1RdJiZZWysrSF09PT1ZWysrVF0mJkg8Ryk7aWYoeD1MLShHLUgpLEg9Ry1MLFo8eCl7aWYoai5tYXRjaF9zdGFydD1XLFY8PShaPXgpKWJyZWFrO1E9WVtIK1otMV0scnQ9WVtIK1pdfX13aGlsZSgoVz1xW1cmSl0pPksmJi0tSSE9MCk7cmV0dXJuIFo8PWoubG9va2FoZWFkP1o6ai5sb29rYWhlYWR9ZnVuY3Rpb24gZyhqKXt2YXIgVyxULHgsSSxILFosVixLLFksSixxPWoud19zaXplO2Rve2lmKEk9ai53aW5kb3dfc2l6ZS1qLmxvb2thaGVhZC1qLnN0cnN0YXJ0LGouc3Ryc3RhcnQ+PXErKHEtTikpe2ZvcihkLmFycmF5U2V0KGoud2luZG93LGoud2luZG93LHEscSwwKSxqLm1hdGNoX3N0YXJ0LT1xLGouc3Ryc3RhcnQtPXEsai5ibG9ja19zdGFydC09cSxXPVQ9ai5oYXNoX3NpemU7eD1qLmhlYWRbLS1XXSxqLmhlYWRbV109cTw9eD94LXE6MCwtLVQ7KTtmb3IoVz1UPXE7eD1qLnByZXZbLS1XXSxqLnByZXZbV109cTw9eD94LXE6MCwtLVQ7KTtJKz1xfWlmKGouc3RybS5hdmFpbF9pbj09PTApYnJlYWs7aWYoWj1qLnN0cm0sVj1qLndpbmRvdyxLPWouc3Ryc3RhcnQrai5sb29rYWhlYWQsSj12b2lkIDAsKFk9SSk8KEo9Wi5hdmFpbF9pbikmJihKPVkpLFQ9Sj09PTA/MDooWi5hdmFpbF9pbi09SixkLmFycmF5U2V0KFYsWi5pbnB1dCxaLm5leHRfaW4sSixLKSxaLnN0YXRlLndyYXA9PT0xP1ouYWRsZXI9dyhaLmFkbGVyLFYsSixLKTpaLnN0YXRlLndyYXA9PT0yJiYoWi5hZGxlcj1fKFouYWRsZXIsVixKLEspKSxaLm5leHRfaW4rPUosWi50b3RhbF9pbis9SixKKSxqLmxvb2thaGVhZCs9VCxqLmxvb2thaGVhZCtqLmluc2VydD49Mylmb3IoSD1qLnN0cnN0YXJ0LWouaW5zZXJ0LGouaW5zX2g9ai53aW5kb3dbSF0sai5pbnNfaD0oai5pbnNfaDw8ai5oYXNoX3NoaWZ0Xmoud2luZG93W0grMV0pJmouaGFzaF9tYXNrO2ouaW5zZXJ0JiYoai5pbnNfaD0oai5pbnNfaDw8ai5oYXNoX3NoaWZ0Xmoud2luZG93W0grMy0xXSkmai5oYXNoX21hc2ssai5wcmV2W0gmai53X21hc2tdPWouaGVhZFtqLmluc19oXSxqLmhlYWRbai5pbnNfaF09SCxIKyssai5pbnNlcnQtLSwhKGoubG9va2FoZWFkK2ouaW5zZXJ0PDMpKTspO313aGlsZShqLmxvb2thaGVhZDxOJiZqLnN0cm0uYXZhaWxfaW4hPT0wKX1mdW5jdGlvbiB5KGosVyl7Zm9yKHZhciBULHg7Oyl7aWYoai5sb29rYWhlYWQ8Til7aWYoZyhqKSxqLmxvb2thaGVhZDxOJiZXPT09MClyZXR1cm4gMTtpZihqLmxvb2thaGVhZD09PTApYnJlYWt9aWYoVD0wLGoubG9va2FoZWFkPj0zJiYoai5pbnNfaD0oai5pbnNfaDw8ai5oYXNoX3NoaWZ0Xmoud2luZG93W2ouc3Ryc3RhcnQrMy0xXSkmai5oYXNoX21hc2ssVD1qLnByZXZbai5zdHJzdGFydCZqLndfbWFza109ai5oZWFkW2ouaW5zX2hdLGouaGVhZFtqLmluc19oXT1qLnN0cnN0YXJ0KSxUIT09MCYmai5zdHJzdGFydC1UPD1qLndfc2l6ZS1OJiYoai5tYXRjaF9sZW5ndGg9YihqLFQpKSxqLm1hdGNoX2xlbmd0aD49MylpZih4PWguX3RyX3RhbGx5KGosai5zdHJzdGFydC1qLm1hdGNoX3N0YXJ0LGoubWF0Y2hfbGVuZ3RoLTMpLGoubG9va2FoZWFkLT1qLm1hdGNoX2xlbmd0aCxqLm1hdGNoX2xlbmd0aDw9ai5tYXhfbGF6eV9tYXRjaCYmai5sb29rYWhlYWQ+PTMpe2ZvcihqLm1hdGNoX2xlbmd0aC0tO2ouc3Ryc3RhcnQrKyxqLmluc19oPShqLmluc19oPDxqLmhhc2hfc2hpZnReai53aW5kb3dbai5zdHJzdGFydCszLTFdKSZqLmhhc2hfbWFzayxUPWoucHJldltqLnN0cnN0YXJ0Jmoud19tYXNrXT1qLmhlYWRbai5pbnNfaF0sai5oZWFkW2ouaW5zX2hdPWouc3Ryc3RhcnQsLS1qLm1hdGNoX2xlbmd0aCE9MDspO2ouc3Ryc3RhcnQrK31lbHNlIGouc3Ryc3RhcnQrPWoubWF0Y2hfbGVuZ3RoLGoubWF0Y2hfbGVuZ3RoPTAsai5pbnNfaD1qLndpbmRvd1tqLnN0cnN0YXJ0XSxqLmluc19oPShqLmluc19oPDxqLmhhc2hfc2hpZnReai53aW5kb3dbai5zdHJzdGFydCsxXSkmai5oYXNoX21hc2s7ZWxzZSB4PWguX3RyX3RhbGx5KGosMCxqLndpbmRvd1tqLnN0cnN0YXJ0XSksai5sb29rYWhlYWQtLSxqLnN0cnN0YXJ0Kys7aWYoeCYmKEMoaiwhMSksai5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiAxfXJldHVybiBqLmluc2VydD1qLnN0cnN0YXJ0PDI/ai5zdHJzdGFydDoyLFc9PT00PyhDKGosITApLGouc3RybS5hdmFpbF9vdXQ9PT0wPzM6NCk6ai5sYXN0X2xpdCYmKEMoaiwhMSksai5zdHJtLmF2YWlsX291dD09PTApPzE6Mn1mdW5jdGlvbiBNKGosVyl7Zm9yKHZhciBULHgsSTs7KXtpZihqLmxvb2thaGVhZDxOKXtpZihnKGopLGoubG9va2FoZWFkPE4mJlc9PT0wKXJldHVybiAxO2lmKGoubG9va2FoZWFkPT09MClicmVha31pZihUPTAsai5sb29rYWhlYWQ+PTMmJihqLmluc19oPShqLmluc19oPDxqLmhhc2hfc2hpZnReai53aW5kb3dbai5zdHJzdGFydCszLTFdKSZqLmhhc2hfbWFzayxUPWoucHJldltqLnN0cnN0YXJ0Jmoud19tYXNrXT1qLmhlYWRbai5pbnNfaF0sai5oZWFkW2ouaW5zX2hdPWouc3Ryc3RhcnQpLGoucHJldl9sZW5ndGg9ai5tYXRjaF9sZW5ndGgsai5wcmV2X21hdGNoPWoubWF0Y2hfc3RhcnQsai5tYXRjaF9sZW5ndGg9MixUIT09MCYmai5wcmV2X2xlbmd0aDxqLm1heF9sYXp5X21hdGNoJiZqLnN0cnN0YXJ0LVQ8PWoud19zaXplLU4mJihqLm1hdGNoX2xlbmd0aD1iKGosVCksai5tYXRjaF9sZW5ndGg8PTUmJihqLnN0cmF0ZWd5PT09MXx8ai5tYXRjaF9sZW5ndGg9PT0zJiY0MDk2PGouc3Ryc3RhcnQtai5tYXRjaF9zdGFydCkmJihqLm1hdGNoX2xlbmd0aD0yKSksai5wcmV2X2xlbmd0aD49MyYmai5tYXRjaF9sZW5ndGg8PWoucHJldl9sZW5ndGgpe2ZvcihJPWouc3Ryc3RhcnQrai5sb29rYWhlYWQtMyx4PWguX3RyX3RhbGx5KGosai5zdHJzdGFydC0xLWoucHJldl9tYXRjaCxqLnByZXZfbGVuZ3RoLTMpLGoubG9va2FoZWFkLT1qLnByZXZfbGVuZ3RoLTEsai5wcmV2X2xlbmd0aC09MjsrK2ouc3Ryc3RhcnQ8PUkmJihqLmluc19oPShqLmluc19oPDxqLmhhc2hfc2hpZnReai53aW5kb3dbai5zdHJzdGFydCszLTFdKSZqLmhhc2hfbWFzayxUPWoucHJldltqLnN0cnN0YXJ0Jmoud19tYXNrXT1qLmhlYWRbai5pbnNfaF0sai5oZWFkW2ouaW5zX2hdPWouc3Ryc3RhcnQpLC0tai5wcmV2X2xlbmd0aCE9MDspO2lmKGoubWF0Y2hfYXZhaWxhYmxlPTAsai5tYXRjaF9sZW5ndGg9MixqLnN0cnN0YXJ0KysseCYmKEMoaiwhMSksai5zdHJtLmF2YWlsX291dD09PTApKXJldHVybiAxfWVsc2UgaWYoai5tYXRjaF9hdmFpbGFibGUpe2lmKCh4PWguX3RyX3RhbGx5KGosMCxqLndpbmRvd1tqLnN0cnN0YXJ0LTFdKSkmJkMoaiwhMSksai5zdHJzdGFydCsrLGoubG9va2FoZWFkLS0sai5zdHJtLmF2YWlsX291dD09PTApcmV0dXJuIDF9ZWxzZSBqLm1hdGNoX2F2YWlsYWJsZT0xLGouc3Ryc3RhcnQrKyxqLmxvb2thaGVhZC0tfXJldHVybiBqLm1hdGNoX2F2YWlsYWJsZSYmKHg9aC5fdHJfdGFsbHkoaiwwLGoud2luZG93W2ouc3Ryc3RhcnQtMV0pLGoubWF0Y2hfYXZhaWxhYmxlPTApLGouaW5zZXJ0PWouc3Ryc3RhcnQ8Mj9qLnN0cnN0YXJ0OjIsVz09PTQ/KEMoaiwhMCksai5zdHJtLmF2YWlsX291dD09PTA/Mzo0KTpqLmxhc3RfbGl0JiYoQyhqLCExKSxqLnN0cm0uYXZhaWxfb3V0PT09MCk/MToyfWZ1bmN0aW9uIE8oaixXLFQseCxJKXt0aGlzLmdvb2RfbGVuZ3RoPWosdGhpcy5tYXhfbGF6eT1XLHRoaXMubmljZV9sZW5ndGg9VCx0aGlzLm1heF9jaGFpbj14LHRoaXMuZnVuYz1JfWZ1bmN0aW9uIFIoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD04LHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBkLkJ1ZjE2KDExNDYpLHRoaXMuZHluX2R0cmVlPW5ldyBkLkJ1ZjE2KDEyMiksdGhpcy5ibF90cmVlPW5ldyBkLkJ1ZjE2KDc4KSxCKHRoaXMuZHluX2x0cmVlKSxCKHRoaXMuZHluX2R0cmVlKSxCKHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IGQuQnVmMTYoMTYpLHRoaXMuaGVhcD1uZXcgZC5CdWYxNig1NzMpLEIodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IGQuQnVmMTYoNTczKSxCKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIHooail7dmFyIFc7cmV0dXJuIGomJmouc3RhdGU/KGoudG90YWxfaW49ai50b3RhbF9vdXQ9MCxqLmRhdGFfdHlwZT0yLChXPWouc3RhdGUpLnBlbmRpbmc9MCxXLnBlbmRpbmdfb3V0PTAsVy53cmFwPDAmJihXLndyYXA9LVcud3JhcCksVy5zdGF0dXM9Vy53cmFwPzQyOkQsai5hZGxlcj1XLndyYXA9PT0yPzA6MSxXLmxhc3RfZmx1c2g9MCxoLl90cl9pbml0KFcpLDApOkYoaixQKX1mdW5jdGlvbiAkKGope3ZhciBXPXooaik7cmV0dXJuIFc9PT0wJiZmdW5jdGlvbihUKXtULndpbmRvd19zaXplPTIqVC53X3NpemUsQihULmhlYWQpLFQubWF4X2xhenlfbWF0Y2g9dVtULmxldmVsXS5tYXhfbGF6eSxULmdvb2RfbWF0Y2g9dVtULmxldmVsXS5nb29kX2xlbmd0aCxULm5pY2VfbWF0Y2g9dVtULmxldmVsXS5uaWNlX2xlbmd0aCxULm1heF9jaGFpbl9sZW5ndGg9dVtULmxldmVsXS5tYXhfY2hhaW4sVC5zdHJzdGFydD0wLFQuYmxvY2tfc3RhcnQ9MCxULmxvb2thaGVhZD0wLFQuaW5zZXJ0PTAsVC5tYXRjaF9sZW5ndGg9VC5wcmV2X2xlbmd0aD0yLFQubWF0Y2hfYXZhaWxhYmxlPTAsVC5pbnNfaD0wfShqLnN0YXRlKSxXfWZ1bmN0aW9uIFgoaixXLFQseCxJLEgpe2lmKCFqKXJldHVybiBQO3ZhciBaPTE7aWYoVz09PS0xJiYoVz02KSx4PDA/KFo9MCx4PS14KToxNTx4JiYoWj0yLHgtPTE2KSxJPDF8fDk8SXx8VCE9PTh8fHg8OHx8MTU8eHx8VzwwfHw5PFd8fEg8MHx8NDxIKXJldHVybiBGKGosUCk7eD09PTgmJih4PTkpO3ZhciBWPW5ldyBSO3JldHVybihqLnN0YXRlPVYpLnN0cm09aixWLndyYXA9WixWLmd6aGVhZD1udWxsLFYud19iaXRzPXgsVi53X3NpemU9MTw8Vi53X2JpdHMsVi53X21hc2s9Vi53X3NpemUtMSxWLmhhc2hfYml0cz1JKzcsVi5oYXNoX3NpemU9MTw8Vi5oYXNoX2JpdHMsVi5oYXNoX21hc2s9Vi5oYXNoX3NpemUtMSxWLmhhc2hfc2hpZnQ9fn4oKFYuaGFzaF9iaXRzKzMtMSkvMyksVi53aW5kb3c9bmV3IGQuQnVmOCgyKlYud19zaXplKSxWLmhlYWQ9bmV3IGQuQnVmMTYoVi5oYXNoX3NpemUpLFYucHJldj1uZXcgZC5CdWYxNihWLndfc2l6ZSksVi5saXRfYnVmc2l6ZT0xPDxJKzYsVi5wZW5kaW5nX2J1Zl9zaXplPTQqVi5saXRfYnVmc2l6ZSxWLnBlbmRpbmdfYnVmPW5ldyBkLkJ1ZjgoVi5wZW5kaW5nX2J1Zl9zaXplKSxWLmRfYnVmPTEqVi5saXRfYnVmc2l6ZSxWLmxfYnVmPTMqVi5saXRfYnVmc2l6ZSxWLmxldmVsPVcsVi5zdHJhdGVneT1ILFYubWV0aG9kPVQsJChqKX11PVtuZXcgTygwLDAsMCwwLGZ1bmN0aW9uKGosVyl7dmFyIFQ9NjU1MzU7Zm9yKFQ+ai5wZW5kaW5nX2J1Zl9zaXplLTUmJihUPWoucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihqLmxvb2thaGVhZDw9MSl7aWYoZyhqKSxqLmxvb2thaGVhZD09PTAmJlc9PT0wKXJldHVybiAxO2lmKGoubG9va2FoZWFkPT09MClicmVha31qLnN0cnN0YXJ0Kz1qLmxvb2thaGVhZCxqLmxvb2thaGVhZD0wO3ZhciB4PWouYmxvY2tfc3RhcnQrVDtpZigoai5zdHJzdGFydD09PTB8fGouc3Ryc3RhcnQ+PXgpJiYoai5sb29rYWhlYWQ9ai5zdHJzdGFydC14LGouc3Ryc3RhcnQ9eCxDKGosITEpLGouc3RybS5hdmFpbF9vdXQ9PT0wKXx8ai5zdHJzdGFydC1qLmJsb2NrX3N0YXJ0Pj1qLndfc2l6ZS1OJiYoQyhqLCExKSxqLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIDF9cmV0dXJuIGouaW5zZXJ0PTAsVz09PTQ/KEMoaiwhMCksai5zdHJtLmF2YWlsX291dD09PTA/Mzo0KTooai5zdHJzdGFydD5qLmJsb2NrX3N0YXJ0JiYoQyhqLCExKSxqLnN0cm0uYXZhaWxfb3V0KSwxKX0pLG5ldyBPKDQsNCw4LDQseSksbmV3IE8oNCw1LDE2LDgseSksbmV3IE8oNCw2LDMyLDMyLHkpLG5ldyBPKDQsNCwxNiwxNixNKSxuZXcgTyg4LDE2LDMyLDMyLE0pLG5ldyBPKDgsMTYsMTI4LDEyOCxNKSxuZXcgTyg4LDMyLDEyOCwyNTYsTSksbmV3IE8oMzIsMTI4LDI1OCwxMDI0LE0pLG5ldyBPKDMyLDI1OCwyNTgsNDA5NixNKV0sYy5kZWZsYXRlSW5pdD1mdW5jdGlvbihqLFcpe3JldHVybiBYKGosVyw4LDE1LDgsMCl9LGMuZGVmbGF0ZUluaXQyPVgsYy5kZWZsYXRlUmVzZXQ9JCxjLmRlZmxhdGVSZXNldEtlZXA9eixjLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24oaixXKXtyZXR1cm4gaiYmai5zdGF0ZT9qLnN0YXRlLndyYXAhPT0yP1A6KGouc3RhdGUuZ3poZWFkPVcsMCk6UH0sYy5kZWZsYXRlPWZ1bmN0aW9uKGosVyl7dmFyIFQseCxJLEg7aWYoIWp8fCFqLnN0YXRlfHw1PFd8fFc8MClyZXR1cm4gaj9GKGosUCk6UDtpZih4PWouc3RhdGUsIWoub3V0cHV0fHwhai5pbnB1dCYmai5hdmFpbF9pbiE9PTB8fHguc3RhdHVzPT09NjY2JiZXIT09NClyZXR1cm4gRihqLGouYXZhaWxfb3V0PT09MD8tNTpQKTtpZih4LnN0cm09aixUPXgubGFzdF9mbHVzaCx4Lmxhc3RfZmx1c2g9Vyx4LnN0YXR1cz09PTQyKWlmKHgud3JhcD09PTIpai5hZGxlcj0wLHYoeCwzMSksdih4LDEzOSksdih4LDgpLHguZ3poZWFkPyh2KHgsKHguZ3poZWFkLnRleHQ/MTowKSsoeC5nemhlYWQuaGNyYz8yOjApKyh4Lmd6aGVhZC5leHRyYT80OjApKyh4Lmd6aGVhZC5uYW1lPzg6MCkrKHguZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLHYoeCwyNTUmeC5nemhlYWQudGltZSksdih4LHguZ3poZWFkLnRpbWU+PjgmMjU1KSx2KHgseC5nemhlYWQudGltZT4+MTYmMjU1KSx2KHgseC5nemhlYWQudGltZT4+MjQmMjU1KSx2KHgseC5sZXZlbD09PTk/MjoyPD14LnN0cmF0ZWd5fHx4LmxldmVsPDI/NDowKSx2KHgsMjU1JnguZ3poZWFkLm9zKSx4Lmd6aGVhZC5leHRyYSYmeC5nemhlYWQuZXh0cmEubGVuZ3RoJiYodih4LDI1NSZ4Lmd6aGVhZC5leHRyYS5sZW5ndGgpLHYoeCx4Lmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSkseC5nemhlYWQuaGNyYyYmKGouYWRsZXI9XyhqLmFkbGVyLHgucGVuZGluZ19idWYseC5wZW5kaW5nLDApKSx4Lmd6aW5kZXg9MCx4LnN0YXR1cz02OSk6KHYoeCwwKSx2KHgsMCksdih4LDApLHYoeCwwKSx2KHgsMCksdih4LHgubGV2ZWw9PT05PzI6Mjw9eC5zdHJhdGVneXx8eC5sZXZlbDwyPzQ6MCksdih4LDMpLHguc3RhdHVzPUQpO2Vsc2V7dmFyIFo9OCsoeC53X2JpdHMtODw8NCk8PDg7Wnw9KDI8PXguc3RyYXRlZ3l8fHgubGV2ZWw8Mj8wOngubGV2ZWw8Nj8xOngubGV2ZWw9PT02PzI6Myk8PDYseC5zdHJzdGFydCE9PTAmJihafD0zMiksWis9MzEtWiUzMSx4LnN0YXR1cz1ELHAoeCxaKSx4LnN0cnN0YXJ0IT09MCYmKHAoeCxqLmFkbGVyPj4+MTYpLHAoeCw2NTUzNSZqLmFkbGVyKSksai5hZGxlcj0xfWlmKHguc3RhdHVzPT09NjkpaWYoeC5nemhlYWQuZXh0cmEpe2ZvcihJPXgucGVuZGluZzt4Lmd6aW5kZXg8KDY1NTM1JnguZ3poZWFkLmV4dHJhLmxlbmd0aCkmJih4LnBlbmRpbmchPT14LnBlbmRpbmdfYnVmX3NpemV8fCh4Lmd6aGVhZC5oY3JjJiZ4LnBlbmRpbmc+SSYmKGouYWRsZXI9XyhqLmFkbGVyLHgucGVuZGluZ19idWYseC5wZW5kaW5nLUksSSkpLFMoaiksST14LnBlbmRpbmcseC5wZW5kaW5nIT09eC5wZW5kaW5nX2J1Zl9zaXplKSk7KXYoeCwyNTUmeC5nemhlYWQuZXh0cmFbeC5nemluZGV4XSkseC5nemluZGV4Kys7eC5nemhlYWQuaGNyYyYmeC5wZW5kaW5nPkkmJihqLmFkbGVyPV8oai5hZGxlcix4LnBlbmRpbmdfYnVmLHgucGVuZGluZy1JLEkpKSx4Lmd6aW5kZXg9PT14Lmd6aGVhZC5leHRyYS5sZW5ndGgmJih4Lmd6aW5kZXg9MCx4LnN0YXR1cz03Myl9ZWxzZSB4LnN0YXR1cz03MztpZih4LnN0YXR1cz09PTczKWlmKHguZ3poZWFkLm5hbWUpe0k9eC5wZW5kaW5nO2Rve2lmKHgucGVuZGluZz09PXgucGVuZGluZ19idWZfc2l6ZSYmKHguZ3poZWFkLmhjcmMmJngucGVuZGluZz5JJiYoai5hZGxlcj1fKGouYWRsZXIseC5wZW5kaW5nX2J1Zix4LnBlbmRpbmctSSxJKSksUyhqKSxJPXgucGVuZGluZyx4LnBlbmRpbmc9PT14LnBlbmRpbmdfYnVmX3NpemUpKXtIPTE7YnJlYWt9SD14Lmd6aW5kZXg8eC5nemhlYWQubmFtZS5sZW5ndGg/MjU1JnguZ3poZWFkLm5hbWUuY2hhckNvZGVBdCh4Lmd6aW5kZXgrKyk6MCx2KHgsSCl9d2hpbGUoSCE9PTApO3guZ3poZWFkLmhjcmMmJngucGVuZGluZz5JJiYoai5hZGxlcj1fKGouYWRsZXIseC5wZW5kaW5nX2J1Zix4LnBlbmRpbmctSSxJKSksSD09PTAmJih4Lmd6aW5kZXg9MCx4LnN0YXR1cz05MSl9ZWxzZSB4LnN0YXR1cz05MTtpZih4LnN0YXR1cz09PTkxKWlmKHguZ3poZWFkLmNvbW1lbnQpe0k9eC5wZW5kaW5nO2Rve2lmKHgucGVuZGluZz09PXgucGVuZGluZ19idWZfc2l6ZSYmKHguZ3poZWFkLmhjcmMmJngucGVuZGluZz5JJiYoai5hZGxlcj1fKGouYWRsZXIseC5wZW5kaW5nX2J1Zix4LnBlbmRpbmctSSxJKSksUyhqKSxJPXgucGVuZGluZyx4LnBlbmRpbmc9PT14LnBlbmRpbmdfYnVmX3NpemUpKXtIPTE7YnJlYWt9SD14Lmd6aW5kZXg8eC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JnguZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdCh4Lmd6aW5kZXgrKyk6MCx2KHgsSCl9d2hpbGUoSCE9PTApO3guZ3poZWFkLmhjcmMmJngucGVuZGluZz5JJiYoai5hZGxlcj1fKGouYWRsZXIseC5wZW5kaW5nX2J1Zix4LnBlbmRpbmctSSxJKSksSD09PTAmJih4LnN0YXR1cz0xMDMpfWVsc2UgeC5zdGF0dXM9MTAzO2lmKHguc3RhdHVzPT09MTAzJiYoeC5nemhlYWQuaGNyYz8oeC5wZW5kaW5nKzI+eC5wZW5kaW5nX2J1Zl9zaXplJiZTKGopLHgucGVuZGluZysyPD14LnBlbmRpbmdfYnVmX3NpemUmJih2KHgsMjU1JmouYWRsZXIpLHYoeCxqLmFkbGVyPj44JjI1NSksai5hZGxlcj0wLHguc3RhdHVzPUQpKTp4LnN0YXR1cz1EKSx4LnBlbmRpbmchPT0wKXtpZihTKGopLGouYXZhaWxfb3V0PT09MClyZXR1cm4geC5sYXN0X2ZsdXNoPS0xLDB9ZWxzZSBpZihqLmF2YWlsX2luPT09MCYmVShXKTw9VShUKSYmVyE9PTQpcmV0dXJuIEYoaiwtNSk7aWYoeC5zdGF0dXM9PT02NjYmJmouYXZhaWxfaW4hPT0wKXJldHVybiBGKGosLTUpO2lmKGouYXZhaWxfaW4hPT0wfHx4Lmxvb2thaGVhZCE9PTB8fFchPT0wJiZ4LnN0YXR1cyE9PTY2Nil7dmFyIFY9eC5zdHJhdGVneT09PTI/ZnVuY3Rpb24oSyxZKXtmb3IodmFyIEo7Oyl7aWYoSy5sb29rYWhlYWQ9PT0wJiYoZyhLKSxLLmxvb2thaGVhZD09PTApKXtpZihZPT09MClyZXR1cm4gMTticmVha31pZihLLm1hdGNoX2xlbmd0aD0wLEo9aC5fdHJfdGFsbHkoSywwLEsud2luZG93W0suc3Ryc3RhcnRdKSxLLmxvb2thaGVhZC0tLEsuc3Ryc3RhcnQrKyxKJiYoQyhLLCExKSxLLnN0cm0uYXZhaWxfb3V0PT09MCkpcmV0dXJuIDF9cmV0dXJuIEsuaW5zZXJ0PTAsWT09PTQ/KEMoSywhMCksSy5zdHJtLmF2YWlsX291dD09PTA/Mzo0KTpLLmxhc3RfbGl0JiYoQyhLLCExKSxLLnN0cm0uYXZhaWxfb3V0PT09MCk/MToyfSh4LFcpOnguc3RyYXRlZ3k9PT0zP2Z1bmN0aW9uKEssWSl7Zm9yKHZhciBKLHEsRyxRLHJ0PUsud2luZG93Ozspe2lmKEsubG9va2FoZWFkPD1MKXtpZihnKEspLEsubG9va2FoZWFkPD1MJiZZPT09MClyZXR1cm4gMTtpZihLLmxvb2thaGVhZD09PTApYnJlYWt9aWYoSy5tYXRjaF9sZW5ndGg9MCxLLmxvb2thaGVhZD49MyYmMDxLLnN0cnN0YXJ0JiYocT1ydFtHPUsuc3Ryc3RhcnQtMV0pPT09cnRbKytHXSYmcT09PXJ0WysrR10mJnE9PT1ydFsrK0ddKXtRPUsuc3Ryc3RhcnQrTDtkbzt3aGlsZShxPT09cnRbKytHXSYmcT09PXJ0WysrR10mJnE9PT1ydFsrK0ddJiZxPT09cnRbKytHXSYmcT09PXJ0WysrR10mJnE9PT1ydFsrK0ddJiZxPT09cnRbKytHXSYmcT09PXJ0WysrR10mJkc8USk7Sy5tYXRjaF9sZW5ndGg9TC0oUS1HKSxLLm1hdGNoX2xlbmd0aD5LLmxvb2thaGVhZCYmKEsubWF0Y2hfbGVuZ3RoPUsubG9va2FoZWFkKX1pZihLLm1hdGNoX2xlbmd0aD49Mz8oSj1oLl90cl90YWxseShLLDEsSy5tYXRjaF9sZW5ndGgtMyksSy5sb29rYWhlYWQtPUsubWF0Y2hfbGVuZ3RoLEsuc3Ryc3RhcnQrPUsubWF0Y2hfbGVuZ3RoLEsubWF0Y2hfbGVuZ3RoPTApOihKPWguX3RyX3RhbGx5KEssMCxLLndpbmRvd1tLLnN0cnN0YXJ0XSksSy5sb29rYWhlYWQtLSxLLnN0cnN0YXJ0KyspLEomJihDKEssITEpLEsuc3RybS5hdmFpbF9vdXQ9PT0wKSlyZXR1cm4gMX1yZXR1cm4gSy5pbnNlcnQ9MCxZPT09ND8oQyhLLCEwKSxLLnN0cm0uYXZhaWxfb3V0PT09MD8zOjQpOksubGFzdF9saXQmJihDKEssITEpLEsuc3RybS5hdmFpbF9vdXQ9PT0wKT8xOjJ9KHgsVyk6dVt4LmxldmVsXS5mdW5jKHgsVyk7aWYoViE9PTMmJlYhPT00fHwoeC5zdGF0dXM9NjY2KSxWPT09MXx8Vj09PTMpcmV0dXJuIGouYXZhaWxfb3V0PT09MCYmKHgubGFzdF9mbHVzaD0tMSksMDtpZihWPT09MiYmKFc9PT0xP2guX3RyX2FsaWduKHgpOlchPT01JiYoaC5fdHJfc3RvcmVkX2Jsb2NrKHgsMCwwLCExKSxXPT09MyYmKEIoeC5oZWFkKSx4Lmxvb2thaGVhZD09PTAmJih4LnN0cnN0YXJ0PTAseC5ibG9ja19zdGFydD0wLHguaW5zZXJ0PTApKSksUyhqKSxqLmF2YWlsX291dD09PTApKXJldHVybiB4Lmxhc3RfZmx1c2g9LTEsMH1yZXR1cm4gVyE9PTQ/MDp4LndyYXA8PTA/MTooeC53cmFwPT09Mj8odih4LDI1NSZqLmFkbGVyKSx2KHgsai5hZGxlcj4+OCYyNTUpLHYoeCxqLmFkbGVyPj4xNiYyNTUpLHYoeCxqLmFkbGVyPj4yNCYyNTUpLHYoeCwyNTUmai50b3RhbF9pbiksdih4LGoudG90YWxfaW4+PjgmMjU1KSx2KHgsai50b3RhbF9pbj4+MTYmMjU1KSx2KHgsai50b3RhbF9pbj4+MjQmMjU1KSk6KHAoeCxqLmFkbGVyPj4+MTYpLHAoeCw2NTUzNSZqLmFkbGVyKSksUyhqKSwwPHgud3JhcCYmKHgud3JhcD0teC53cmFwKSx4LnBlbmRpbmchPT0wPzA6MSl9LGMuZGVmbGF0ZUVuZD1mdW5jdGlvbihqKXt2YXIgVztyZXR1cm4gaiYmai5zdGF0ZT8oVz1qLnN0YXRlLnN0YXR1cykhPT00MiYmVyE9PTY5JiZXIT09NzMmJlchPT05MSYmVyE9PTEwMyYmVyE9PUQmJlchPT02NjY/RihqLFApOihqLnN0YXRlPW51bGwsVz09PUQ/RihqLC0zKTowKTpQfSxjLmRlZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGosVyl7dmFyIFQseCxJLEgsWixWLEssWSxKPVcubGVuZ3RoO2lmKCFqfHwhai5zdGF0ZXx8KEg9KFQ9ai5zdGF0ZSkud3JhcCk9PT0yfHxIPT09MSYmVC5zdGF0dXMhPT00Mnx8VC5sb29rYWhlYWQpcmV0dXJuIFA7Zm9yKEg9PT0xJiYoai5hZGxlcj13KGouYWRsZXIsVyxKLDApKSxULndyYXA9MCxKPj1ULndfc2l6ZSYmKEg9PT0wJiYoQihULmhlYWQpLFQuc3Ryc3RhcnQ9MCxULmJsb2NrX3N0YXJ0PTAsVC5pbnNlcnQ9MCksWT1uZXcgZC5CdWY4KFQud19zaXplKSxkLmFycmF5U2V0KFksVyxKLVQud19zaXplLFQud19zaXplLDApLFc9WSxKPVQud19zaXplKSxaPWouYXZhaWxfaW4sVj1qLm5leHRfaW4sSz1qLmlucHV0LGouYXZhaWxfaW49SixqLm5leHRfaW49MCxqLmlucHV0PVcsZyhUKTtULmxvb2thaGVhZD49Mzspe2Zvcih4PVQuc3Ryc3RhcnQsST1ULmxvb2thaGVhZC0yO1QuaW5zX2g9KFQuaW5zX2g8PFQuaGFzaF9zaGlmdF5ULndpbmRvd1t4KzMtMV0pJlQuaGFzaF9tYXNrLFQucHJldlt4JlQud19tYXNrXT1ULmhlYWRbVC5pbnNfaF0sVC5oZWFkW1QuaW5zX2hdPXgseCsrLC0tSTspO1Quc3Ryc3RhcnQ9eCxULmxvb2thaGVhZD0yLGcoVCl9cmV0dXJuIFQuc3Ryc3RhcnQrPVQubG9va2FoZWFkLFQuYmxvY2tfc3RhcnQ9VC5zdHJzdGFydCxULmluc2VydD1ULmxvb2thaGVhZCxULmxvb2thaGVhZD0wLFQubWF0Y2hfbGVuZ3RoPVQucHJldl9sZW5ndGg9MixULm1hdGNoX2F2YWlsYWJsZT0wLGoubmV4dF9pbj1WLGouaW5wdXQ9SyxqLmF2YWlsX2luPVosVC53cmFwPUgsMH0sYy5kZWZsYXRlSW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjo0MSwiLi9hZGxlcjMyIjo0MywiLi9jcmMzMiI6NDUsIi4vbWVzc2FnZXMiOjUxLCIuL3RyZWVzIjo1Mn1dLDQ3OltmdW5jdGlvbihpLGYsYyl7Zi5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sNDg6W2Z1bmN0aW9uKGksZixjKXtmLmV4cG9ydHM9ZnVuY3Rpb24odSxkKXt2YXIgaCx3LF8sQSxQLEwsTixELEYsVSxCLFMsQyx2LHAsYixnLHksTSxPLFIseiwkLFgsajtoPXUuc3RhdGUsdz11Lm5leHRfaW4sWD11LmlucHV0LF89dysodS5hdmFpbF9pbi01KSxBPXUubmV4dF9vdXQsaj11Lm91dHB1dCxQPUEtKGQtdS5hdmFpbF9vdXQpLEw9QSsodS5hdmFpbF9vdXQtMjU3KSxOPWguZG1heCxEPWgud3NpemUsRj1oLndoYXZlLFU9aC53bmV4dCxCPWgud2luZG93LFM9aC5ob2xkLEM9aC5iaXRzLHY9aC5sZW5jb2RlLHA9aC5kaXN0Y29kZSxiPSgxPDxoLmxlbmJpdHMpLTEsZz0oMTw8aC5kaXN0Yml0cyktMTt0OmRve0M8MTUmJihTKz1YW3crK108PEMsQys9OCxTKz1YW3crK108PEMsQys9OCkseT12W1MmYl07ZTpmb3IoOzspe2lmKFM+Pj49TT15Pj4+MjQsQy09TSwoTT15Pj4+MTYmMjU1KT09MClqW0ErK109NjU1MzUmeTtlbHNle2lmKCEoMTYmTSkpe2lmKCEoNjQmTSkpe3k9dlsoNjU1MzUmeSkrKFMmKDE8PE0pLTEpXTtjb250aW51ZSBlfWlmKDMyJk0pe2gubW9kZT0xMjticmVhayB0fXUubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGgubW9kZT0zMDticmVhayB0fU89NjU1MzUmeSwoTSY9MTUpJiYoQzxNJiYoUys9WFt3KytdPDxDLEMrPTgpLE8rPVMmKDE8PE0pLTEsUz4+Pj1NLEMtPU0pLEM8MTUmJihTKz1YW3crK108PEMsQys9OCxTKz1YW3crK108PEMsQys9OCkseT1wW1MmZ107cjpmb3IoOzspe2lmKFM+Pj49TT15Pj4+MjQsQy09TSwhKDE2JihNPXk+Pj4xNiYyNTUpKSl7aWYoISg2NCZNKSl7eT1wWyg2NTUzNSZ5KSsoUyYoMTw8TSktMSldO2NvbnRpbnVlIHJ9dS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsaC5tb2RlPTMwO2JyZWFrIHR9aWYoUj02NTUzNSZ5LEM8KE0mPTE1KSYmKFMrPVhbdysrXTw8QywoQys9OCk8TSYmKFMrPVhbdysrXTw8QyxDKz04KSksTjwoUis9UyYoMTw8TSktMSkpe3UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsaC5tb2RlPTMwO2JyZWFrIHR9aWYoUz4+Pj1NLEMtPU0sKE09QS1QKTxSKXtpZihGPChNPVItTSkmJmguc2FuZSl7dS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixoLm1vZGU9MzA7YnJlYWsgdH1pZigkPUIsKHo9MCk9PT1VKXtpZih6Kz1ELU0sTTxPKXtmb3IoTy09TTtqW0ErK109Qlt6KytdLC0tTTspO3o9QS1SLCQ9an19ZWxzZSBpZihVPE0pe2lmKHorPUQrVS1NLChNLT1VKTxPKXtmb3IoTy09TTtqW0ErK109Qlt6KytdLC0tTTspO2lmKHo9MCxVPE8pe2ZvcihPLT1NPVU7altBKytdPUJbeisrXSwtLU07KTt6PUEtUiwkPWp9fX1lbHNlIGlmKHorPVUtTSxNPE8pe2ZvcihPLT1NO2pbQSsrXT1CW3orK10sLS1NOyk7ej1BLVIsJD1qfWZvcig7MjxPOylqW0ErK109JFt6KytdLGpbQSsrXT0kW3orK10saltBKytdPSRbeisrXSxPLT0zO08mJihqW0ErK109JFt6KytdLDE8TyYmKGpbQSsrXT0kW3orK10pKX1lbHNle2Zvcih6PUEtUjtqW0ErK109alt6KytdLGpbQSsrXT1qW3orK10saltBKytdPWpbeisrXSwyPChPLT0zKTspO08mJihqW0ErK109alt6KytdLDE8TyYmKGpbQSsrXT1qW3orK10pKX1icmVha319YnJlYWt9fXdoaWxlKHc8XyYmQTxMKTt3LT1PPUM+PjMsUyY9KDE8PChDLT1PPDwzKSktMSx1Lm5leHRfaW49dyx1Lm5leHRfb3V0PUEsdS5hdmFpbF9pbj13PF8/Xy13KzU6NS0ody1fKSx1LmF2YWlsX291dD1BPEw/TC1BKzI1NzoyNTctKEEtTCksaC5ob2xkPVMsaC5iaXRzPUN9fSx7fV0sNDk6W2Z1bmN0aW9uKGksZixjKXt2YXIgdT1pKCIuLi91dGlscy9jb21tb24iKSxkPWkoIi4vYWRsZXIzMiIpLGg9aSgiLi9jcmMzMiIpLHc9aSgiLi9pbmZmYXN0IiksXz1pKCIuL2luZnRyZWVzIiksQT0tMjtmdW5jdGlvbiBQKGIpe3JldHVybihiPj4+MjQmMjU1KSsoYj4+PjgmNjUyODApKygoNjUyODAmYik8PDgpKygoMjU1JmIpPDwyNCl9ZnVuY3Rpb24gTCgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgdS5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgdS5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBOKGIpe3ZhciBnO3JldHVybiBiJiZiLnN0YXRlPyhnPWIuc3RhdGUsYi50b3RhbF9pbj1iLnRvdGFsX291dD1nLnRvdGFsPTAsYi5tc2c9IiIsZy53cmFwJiYoYi5hZGxlcj0xJmcud3JhcCksZy5tb2RlPTEsZy5sYXN0PTAsZy5oYXZlZGljdD0wLGcuZG1heD0zMjc2OCxnLmhlYWQ9bnVsbCxnLmhvbGQ9MCxnLmJpdHM9MCxnLmxlbmNvZGU9Zy5sZW5keW49bmV3IHUuQnVmMzIoODUyKSxnLmRpc3Rjb2RlPWcuZGlzdGR5bj1uZXcgdS5CdWYzMig1OTIpLGcuc2FuZT0xLGcuYmFjaz0tMSwwKTpBfWZ1bmN0aW9uIEQoYil7dmFyIGc7cmV0dXJuIGImJmIuc3RhdGU/KChnPWIuc3RhdGUpLndzaXplPTAsZy53aGF2ZT0wLGcud25leHQ9MCxOKGIpKTpBfWZ1bmN0aW9uIEYoYixnKXt2YXIgeSxNO3JldHVybiBiJiZiLnN0YXRlPyhNPWIuc3RhdGUsZzwwPyh5PTAsZz0tZyk6KHk9MSsoZz4+NCksZzw0OCYmKGcmPTE1KSksZyYmKGc8OHx8MTU8Zyk/QTooTS53aW5kb3chPT1udWxsJiZNLndiaXRzIT09ZyYmKE0ud2luZG93PW51bGwpLE0ud3JhcD15LE0ud2JpdHM9ZyxEKGIpKSk6QX1mdW5jdGlvbiBVKGIsZyl7dmFyIHksTTtyZXR1cm4gYj8oTT1uZXcgTCwoYi5zdGF0ZT1NKS53aW5kb3c9bnVsbCwoeT1GKGIsZykpIT09MCYmKGIuc3RhdGU9bnVsbCkseSk6QX12YXIgQixTLEM9ITA7ZnVuY3Rpb24gdihiKXtpZihDKXt2YXIgZztmb3IoQj1uZXcgdS5CdWYzMig1MTIpLFM9bmV3IHUuQnVmMzIoMzIpLGc9MDtnPDE0NDspYi5sZW5zW2crK109ODtmb3IoO2c8MjU2OyliLmxlbnNbZysrXT05O2Zvcig7ZzwyODA7KWIubGVuc1tnKytdPTc7Zm9yKDtnPDI4ODspYi5sZW5zW2crK109ODtmb3IoXygxLGIubGVucywwLDI4OCxCLDAsYi53b3JrLHtiaXRzOjl9KSxnPTA7ZzwzMjspYi5sZW5zW2crK109NTtfKDIsYi5sZW5zLDAsMzIsUywwLGIud29yayx7Yml0czo1fSksQz0hMX1iLmxlbmNvZGU9QixiLmxlbmJpdHM9OSxiLmRpc3Rjb2RlPVMsYi5kaXN0Yml0cz01fWZ1bmN0aW9uIHAoYixnLHksTSl7dmFyIE8sUj1iLnN0YXRlO3JldHVybiBSLndpbmRvdz09PW51bGwmJihSLndzaXplPTE8PFIud2JpdHMsUi53bmV4dD0wLFIud2hhdmU9MCxSLndpbmRvdz1uZXcgdS5CdWY4KFIud3NpemUpKSxNPj1SLndzaXplPyh1LmFycmF5U2V0KFIud2luZG93LGcseS1SLndzaXplLFIud3NpemUsMCksUi53bmV4dD0wLFIud2hhdmU9Ui53c2l6ZSk6KE08KE89Ui53c2l6ZS1SLnduZXh0KSYmKE89TSksdS5hcnJheVNldChSLndpbmRvdyxnLHktTSxPLFIud25leHQpLChNLT1PKT8odS5hcnJheVNldChSLndpbmRvdyxnLHktTSxNLDApLFIud25leHQ9TSxSLndoYXZlPVIud3NpemUpOihSLnduZXh0Kz1PLFIud25leHQ9PT1SLndzaXplJiYoUi53bmV4dD0wKSxSLndoYXZlPFIud3NpemUmJihSLndoYXZlKz1PKSkpLDB9Yy5pbmZsYXRlUmVzZXQ9RCxjLmluZmxhdGVSZXNldDI9RixjLmluZmxhdGVSZXNldEtlZXA9TixjLmluZmxhdGVJbml0PWZ1bmN0aW9uKGIpe3JldHVybiBVKGIsMTUpfSxjLmluZmxhdGVJbml0Mj1VLGMuaW5mbGF0ZT1mdW5jdGlvbihiLGcpe3ZhciB5LE0sTyxSLHosJCxYLGosVyxULHgsSSxILFosVixLLFksSixxLEcsUSxydCxzdCxvdCxodD0wLGR0PW5ldyB1LkJ1ZjgoNCksbXQ9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFifHwhYi5zdGF0ZXx8IWIub3V0cHV0fHwhYi5pbnB1dCYmYi5hdmFpbF9pbiE9PTApcmV0dXJuIEE7KHk9Yi5zdGF0ZSkubW9kZT09PTEyJiYoeS5tb2RlPTEzKSx6PWIubmV4dF9vdXQsTz1iLm91dHB1dCxYPWIuYXZhaWxfb3V0LFI9Yi5uZXh0X2luLE09Yi5pbnB1dCwkPWIuYXZhaWxfaW4saj15LmhvbGQsVz15LmJpdHMsVD0kLHg9WCxydD0wO3Q6Zm9yKDs7KXN3aXRjaCh5Lm1vZGUpe2Nhc2UgMTppZih5LndyYXA9PT0wKXt5Lm1vZGU9MTM7YnJlYWt9Zm9yKDtXPDE2Oyl7aWYoJD09PTApYnJlYWsgdDskLS0sais9TVtSKytdPDxXLFcrPTh9aWYoMiZ5LndyYXAmJmo9PT0zNTYxNSl7ZHRbeS5jaGVjaz0wXT0yNTUmaixkdFsxXT1qPj4+OCYyNTUseS5jaGVjaz1oKHkuY2hlY2ssZHQsMiwwKSxXPWo9MCx5Lm1vZGU9MjticmVha31pZih5LmZsYWdzPTAseS5oZWFkJiYoeS5oZWFkLmRvbmU9ITEpLCEoMSZ5LndyYXApfHwoKCgyNTUmaik8PDgpKyhqPj44KSklMzEpe2IubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIix5Lm1vZGU9MzA7YnJlYWt9aWYoKDE1JmopIT04KXtiLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHkubW9kZT0zMDticmVha31pZihXLT00LFE9OCsoMTUmKGo+Pj49NCkpLHkud2JpdHM9PT0wKXkud2JpdHM9UTtlbHNlIGlmKFE+eS53Yml0cyl7Yi5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLHkubW9kZT0zMDticmVha315LmRtYXg9MTw8USxiLmFkbGVyPXkuY2hlY2s9MSx5Lm1vZGU9NTEyJmo/MTA6MTIsVz1qPTA7YnJlYWs7Y2FzZSAyOmZvcig7VzwxNjspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fWlmKHkuZmxhZ3M9aiwoMjU1JnkuZmxhZ3MpIT04KXtiLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLHkubW9kZT0zMDticmVha31pZig1NzM0NCZ5LmZsYWdzKXtiLm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0Iix5Lm1vZGU9MzA7YnJlYWt9eS5oZWFkJiYoeS5oZWFkLnRleHQ9aj4+OCYxKSw1MTImeS5mbGFncyYmKGR0WzBdPTI1NSZqLGR0WzFdPWo+Pj44JjI1NSx5LmNoZWNrPWgoeS5jaGVjayxkdCwyLDApKSxXPWo9MCx5Lm1vZGU9MztjYXNlIDM6Zm9yKDtXPDMyOyl7aWYoJD09PTApYnJlYWsgdDskLS0sais9TVtSKytdPDxXLFcrPTh9eS5oZWFkJiYoeS5oZWFkLnRpbWU9aiksNTEyJnkuZmxhZ3MmJihkdFswXT0yNTUmaixkdFsxXT1qPj4+OCYyNTUsZHRbMl09aj4+PjE2JjI1NSxkdFszXT1qPj4+MjQmMjU1LHkuY2hlY2s9aCh5LmNoZWNrLGR0LDQsMCkpLFc9aj0wLHkubW9kZT00O2Nhc2UgNDpmb3IoO1c8MTY7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH15LmhlYWQmJih5LmhlYWQueGZsYWdzPTI1NSZqLHkuaGVhZC5vcz1qPj44KSw1MTImeS5mbGFncyYmKGR0WzBdPTI1NSZqLGR0WzFdPWo+Pj44JjI1NSx5LmNoZWNrPWgoeS5jaGVjayxkdCwyLDApKSxXPWo9MCx5Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZ5LmZsYWdzKXtmb3IoO1c8MTY7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH15Lmxlbmd0aD1qLHkuaGVhZCYmKHkuaGVhZC5leHRyYV9sZW49aiksNTEyJnkuZmxhZ3MmJihkdFswXT0yNTUmaixkdFsxXT1qPj4+OCYyNTUseS5jaGVjaz1oKHkuY2hlY2ssZHQsMiwwKSksVz1qPTB9ZWxzZSB5LmhlYWQmJih5LmhlYWQuZXh0cmE9bnVsbCk7eS5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmeS5mbGFncyYmKCQ8KEk9eS5sZW5ndGgpJiYoST0kKSxJJiYoeS5oZWFkJiYoUT15LmhlYWQuZXh0cmFfbGVuLXkubGVuZ3RoLHkuaGVhZC5leHRyYXx8KHkuaGVhZC5leHRyYT1uZXcgQXJyYXkoeS5oZWFkLmV4dHJhX2xlbikpLHUuYXJyYXlTZXQoeS5oZWFkLmV4dHJhLE0sUixJLFEpKSw1MTImeS5mbGFncyYmKHkuY2hlY2s9aCh5LmNoZWNrLE0sSSxSKSksJC09SSxSKz1JLHkubGVuZ3RoLT1JKSx5Lmxlbmd0aCkpYnJlYWsgdDt5Lmxlbmd0aD0wLHkubW9kZT03O2Nhc2UgNzppZigyMDQ4JnkuZmxhZ3Mpe2lmKCQ9PT0wKWJyZWFrIHQ7Zm9yKEk9MDtRPU1bUitJKytdLHkuaGVhZCYmUSYmeS5sZW5ndGg8NjU1MzYmJih5LmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShRKSksUSYmSTwkOyk7aWYoNTEyJnkuZmxhZ3MmJih5LmNoZWNrPWgoeS5jaGVjayxNLEksUikpLCQtPUksUis9SSxRKWJyZWFrIHR9ZWxzZSB5LmhlYWQmJih5LmhlYWQubmFtZT1udWxsKTt5Lmxlbmd0aD0wLHkubW9kZT04O2Nhc2UgODppZig0MDk2JnkuZmxhZ3Mpe2lmKCQ9PT0wKWJyZWFrIHQ7Zm9yKEk9MDtRPU1bUitJKytdLHkuaGVhZCYmUSYmeS5sZW5ndGg8NjU1MzYmJih5LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShRKSksUSYmSTwkOyk7aWYoNTEyJnkuZmxhZ3MmJih5LmNoZWNrPWgoeS5jaGVjayxNLEksUikpLCQtPUksUis9SSxRKWJyZWFrIHR9ZWxzZSB5LmhlYWQmJih5LmhlYWQuY29tbWVudD1udWxsKTt5Lm1vZGU9OTtjYXNlIDk6aWYoNTEyJnkuZmxhZ3Mpe2Zvcig7VzwxNjspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fWlmKGohPT0oNjU1MzUmeS5jaGVjaykpe2IubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIix5Lm1vZGU9MzA7YnJlYWt9Vz1qPTB9eS5oZWFkJiYoeS5oZWFkLmhjcmM9eS5mbGFncz4+OSYxLHkuaGVhZC5kb25lPSEwKSxiLmFkbGVyPXkuY2hlY2s9MCx5Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO1c8MzI7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH1iLmFkbGVyPXkuY2hlY2s9UChqKSxXPWo9MCx5Lm1vZGU9MTE7Y2FzZSAxMTppZih5LmhhdmVkaWN0PT09MClyZXR1cm4gYi5uZXh0X291dD16LGIuYXZhaWxfb3V0PVgsYi5uZXh0X2luPVIsYi5hdmFpbF9pbj0kLHkuaG9sZD1qLHkuYml0cz1XLDI7Yi5hZGxlcj15LmNoZWNrPTEseS5tb2RlPTEyO2Nhc2UgMTI6aWYoZz09PTV8fGc9PT02KWJyZWFrIHQ7Y2FzZSAxMzppZih5Lmxhc3Qpe2o+Pj49NyZXLFctPTcmVyx5Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtXPDM7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH1zd2l0Y2goeS5sYXN0PTEmaixXLT0xLDMmKGo+Pj49MSkpe2Nhc2UgMDp5Lm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKHYoeSkseS5tb2RlPTIwLGchPT02KWJyZWFrO2o+Pj49MixXLT0yO2JyZWFrIHQ7Y2FzZSAyOnkubW9kZT0xNzticmVhaztjYXNlIDM6Yi5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIseS5tb2RlPTMwfWo+Pj49MixXLT0yO2JyZWFrO2Nhc2UgMTQ6Zm9yKGo+Pj49NyZXLFctPTcmVztXPDMyOyl7aWYoJD09PTApYnJlYWsgdDskLS0sais9TVtSKytdPDxXLFcrPTh9aWYoKDY1NTM1JmopIT0oaj4+PjE2XjY1NTM1KSl7Yi5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLHkubW9kZT0zMDticmVha31pZih5Lmxlbmd0aD02NTUzNSZqLFc9aj0wLHkubW9kZT0xNSxnPT09NilicmVhayB0O2Nhc2UgMTU6eS5tb2RlPTE2O2Nhc2UgMTY6aWYoST15Lmxlbmd0aCl7aWYoJDxJJiYoST0kKSxYPEkmJihJPVgpLEk9PT0wKWJyZWFrIHQ7dS5hcnJheVNldChPLE0sUixJLHopLCQtPUksUis9SSxYLT1JLHorPUkseS5sZW5ndGgtPUk7YnJlYWt9eS5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtXPDE0Oyl7aWYoJD09PTApYnJlYWsgdDskLS0sais9TVtSKytdPDxXLFcrPTh9aWYoeS5ubGVuPTI1NysoMzEmaiksaj4+Pj01LFctPTUseS5uZGlzdD0xKygzMSZqKSxqPj4+PTUsVy09NSx5Lm5jb2RlPTQrKDE1JmopLGo+Pj49NCxXLT00LDI4Njx5Lm5sZW58fDMwPHkubmRpc3Qpe2IubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyIseS5tb2RlPTMwO2JyZWFrfXkuaGF2ZT0wLHkubW9kZT0xODtjYXNlIDE4OmZvcig7eS5oYXZlPHkubmNvZGU7KXtmb3IoO1c8Mzspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fXkubGVuc1ttdFt5LmhhdmUrK11dPTcmaixqPj4+PTMsVy09M31mb3IoO3kuaGF2ZTwxOTspeS5sZW5zW210W3kuaGF2ZSsrXV09MDtpZih5LmxlbmNvZGU9eS5sZW5keW4seS5sZW5iaXRzPTcsc3Q9e2JpdHM6eS5sZW5iaXRzfSxydD1fKDAseS5sZW5zLDAsMTkseS5sZW5jb2RlLDAseS53b3JrLHN0KSx5LmxlbmJpdHM9c3QuYml0cyxydCl7Yi5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIseS5tb2RlPTMwO2JyZWFrfXkuaGF2ZT0wLHkubW9kZT0xOTtjYXNlIDE5OmZvcig7eS5oYXZlPHkubmxlbit5Lm5kaXN0Oyl7Zm9yKDtLPShodD15LmxlbmNvZGVbaiYoMTw8eS5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsWT02NTUzNSZodCwhKChWPWh0Pj4+MjQpPD1XKTspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fWlmKFk8MTYpaj4+Pj1WLFctPVYseS5sZW5zW3kuaGF2ZSsrXT1ZO2Vsc2V7aWYoWT09PTE2KXtmb3Iob3Q9VisyO1c8b3Q7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH1pZihqPj4+PVYsVy09Vix5LmhhdmU9PT0wKXtiLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIseS5tb2RlPTMwO2JyZWFrfVE9eS5sZW5zW3kuaGF2ZS0xXSxJPTMrKDMmaiksaj4+Pj0yLFctPTJ9ZWxzZSBpZihZPT09MTcpe2ZvcihvdD1WKzM7VzxvdDspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fVctPVYsUT0wLEk9MysoNyYoaj4+Pj1WKSksaj4+Pj0zLFctPTN9ZWxzZXtmb3Iob3Q9Vis3O1c8b3Q7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH1XLT1WLFE9MCxJPTExKygxMjcmKGo+Pj49VikpLGo+Pj49NyxXLT03fWlmKHkuaGF2ZStJPnkubmxlbit5Lm5kaXN0KXtiLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIseS5tb2RlPTMwO2JyZWFrfWZvcig7SS0tOyl5LmxlbnNbeS5oYXZlKytdPVF9fWlmKHkubW9kZT09PTMwKWJyZWFrO2lmKHkubGVuc1syNTZdPT09MCl7Yi5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIseS5tb2RlPTMwO2JyZWFrfWlmKHkubGVuYml0cz05LHN0PXtiaXRzOnkubGVuYml0c30scnQ9XygxLHkubGVucywwLHkubmxlbix5LmxlbmNvZGUsMCx5Lndvcmssc3QpLHkubGVuYml0cz1zdC5iaXRzLHJ0KXtiLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0Iix5Lm1vZGU9MzA7YnJlYWt9aWYoeS5kaXN0Yml0cz02LHkuZGlzdGNvZGU9eS5kaXN0ZHluLHN0PXtiaXRzOnkuZGlzdGJpdHN9LHJ0PV8oMix5LmxlbnMseS5ubGVuLHkubmRpc3QseS5kaXN0Y29kZSwwLHkud29yayxzdCkseS5kaXN0Yml0cz1zdC5iaXRzLHJ0KXtiLm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0Iix5Lm1vZGU9MzA7YnJlYWt9aWYoeS5tb2RlPTIwLGc9PT02KWJyZWFrIHQ7Y2FzZSAyMDp5Lm1vZGU9MjE7Y2FzZSAyMTppZig2PD0kJiYyNTg8PVgpe2IubmV4dF9vdXQ9eixiLmF2YWlsX291dD1YLGIubmV4dF9pbj1SLGIuYXZhaWxfaW49JCx5LmhvbGQ9aix5LmJpdHM9Vyx3KGIseCksej1iLm5leHRfb3V0LE89Yi5vdXRwdXQsWD1iLmF2YWlsX291dCxSPWIubmV4dF9pbixNPWIuaW5wdXQsJD1iLmF2YWlsX2luLGo9eS5ob2xkLFc9eS5iaXRzLHkubW9kZT09PTEyJiYoeS5iYWNrPS0xKTticmVha31mb3IoeS5iYWNrPTA7Sz0oaHQ9eS5sZW5jb2RlW2omKDE8PHkubGVuYml0cyktMV0pPj4+MTYmMjU1LFk9NjU1MzUmaHQsISgoVj1odD4+PjI0KTw9Vyk7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH1pZihLJiYhKDI0MCZLKSl7Zm9yKEo9VixxPUssRz1ZO0s9KGh0PXkubGVuY29kZVtHKygoaiYoMTw8SitxKS0xKT4+SildKT4+PjE2JjI1NSxZPTY1NTM1Jmh0LCEoSisoVj1odD4+PjI0KTw9Vyk7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH1qPj4+PUosVy09Six5LmJhY2srPUp9aWYoaj4+Pj1WLFctPVYseS5iYWNrKz1WLHkubGVuZ3RoPVksSz09PTApe3kubW9kZT0yNjticmVha31pZigzMiZLKXt5LmJhY2s9LTEseS5tb2RlPTEyO2JyZWFrfWlmKDY0Jkspe2IubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHkubW9kZT0zMDticmVha315LmV4dHJhPTE1JksseS5tb2RlPTIyO2Nhc2UgMjI6aWYoeS5leHRyYSl7Zm9yKG90PXkuZXh0cmE7VzxvdDspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fXkubGVuZ3RoKz1qJigxPDx5LmV4dHJhKS0xLGo+Pj49eS5leHRyYSxXLT15LmV4dHJhLHkuYmFjays9eS5leHRyYX15Lndhcz15Lmxlbmd0aCx5Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoO0s9KGh0PXkuZGlzdGNvZGVbaiYoMTw8eS5kaXN0Yml0cyktMV0pPj4+MTYmMjU1LFk9NjU1MzUmaHQsISgoVj1odD4+PjI0KTw9Vyk7KXtpZigkPT09MClicmVhayB0OyQtLSxqKz1NW1IrK108PFcsVys9OH1pZighKDI0MCZLKSl7Zm9yKEo9VixxPUssRz1ZO0s9KGh0PXkuZGlzdGNvZGVbRysoKGomKDE8PEorcSktMSk+PkopXSk+Pj4xNiYyNTUsWT02NTUzNSZodCwhKEorKFY9aHQ+Pj4yNCk8PVcpOyl7aWYoJD09PTApYnJlYWsgdDskLS0sais9TVtSKytdPDxXLFcrPTh9aj4+Pj1KLFctPUoseS5iYWNrKz1KfWlmKGo+Pj49VixXLT1WLHkuYmFjays9Viw2NCZLKXtiLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIix5Lm1vZGU9MzA7YnJlYWt9eS5vZmZzZXQ9WSx5LmV4dHJhPTE1JksseS5tb2RlPTI0O2Nhc2UgMjQ6aWYoeS5leHRyYSl7Zm9yKG90PXkuZXh0cmE7VzxvdDspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fXkub2Zmc2V0Kz1qJigxPDx5LmV4dHJhKS0xLGo+Pj49eS5leHRyYSxXLT15LmV4dHJhLHkuYmFjays9eS5leHRyYX1pZih5Lm9mZnNldD55LmRtYXgpe2IubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIseS5tb2RlPTMwO2JyZWFrfXkubW9kZT0yNTtjYXNlIDI1OmlmKFg9PT0wKWJyZWFrIHQ7aWYoST14LVgseS5vZmZzZXQ+SSl7aWYoKEk9eS5vZmZzZXQtSSk+eS53aGF2ZSYmeS5zYW5lKXtiLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHkubW9kZT0zMDticmVha31IPUk+eS53bmV4dD8oSS09eS53bmV4dCx5LndzaXplLUkpOnkud25leHQtSSxJPnkubGVuZ3RoJiYoST15Lmxlbmd0aCksWj15LndpbmRvd31lbHNlIFo9TyxIPXoteS5vZmZzZXQsST15Lmxlbmd0aDtmb3IoWDxJJiYoST1YKSxYLT1JLHkubGVuZ3RoLT1JO09beisrXT1aW0grK10sLS1JOyk7eS5sZW5ndGg9PT0wJiYoeS5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKFg9PT0wKWJyZWFrIHQ7T1t6KytdPXkubGVuZ3RoLFgtLSx5Lm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZih5LndyYXApe2Zvcig7VzwzMjspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGp8PU1bUisrXTw8VyxXKz04fWlmKHgtPVgsYi50b3RhbF9vdXQrPXgseS50b3RhbCs9eCx4JiYoYi5hZGxlcj15LmNoZWNrPXkuZmxhZ3M/aCh5LmNoZWNrLE8seCx6LXgpOmQoeS5jaGVjayxPLHgsei14KSkseD1YLCh5LmZsYWdzP2o6UChqKSkhPT15LmNoZWNrKXtiLm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLHkubW9kZT0zMDticmVha31XPWo9MH15Lm1vZGU9Mjg7Y2FzZSAyODppZih5LndyYXAmJnkuZmxhZ3Mpe2Zvcig7VzwzMjspe2lmKCQ9PT0wKWJyZWFrIHQ7JC0tLGorPU1bUisrXTw8VyxXKz04fWlmKGohPT0oNDI5NDk2NzI5NSZ5LnRvdGFsKSl7Yi5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLHkubW9kZT0zMDticmVha31XPWo9MH15Lm1vZGU9Mjk7Y2FzZSAyOTpydD0xO2JyZWFrIHQ7Y2FzZSAzMDpydD0tMzticmVhayB0O2Nhc2UgMzE6cmV0dXJuLTQ7Y2FzZSAzMjpkZWZhdWx0OnJldHVybiBBfXJldHVybiBiLm5leHRfb3V0PXosYi5hdmFpbF9vdXQ9WCxiLm5leHRfaW49UixiLmF2YWlsX2luPSQseS5ob2xkPWoseS5iaXRzPVcsKHkud3NpemV8fHghPT1iLmF2YWlsX291dCYmeS5tb2RlPDMwJiYoeS5tb2RlPDI3fHxnIT09NCkpJiZwKGIsYi5vdXRwdXQsYi5uZXh0X291dCx4LWIuYXZhaWxfb3V0KT8oeS5tb2RlPTMxLC00KTooVC09Yi5hdmFpbF9pbix4LT1iLmF2YWlsX291dCxiLnRvdGFsX2luKz1ULGIudG90YWxfb3V0Kz14LHkudG90YWwrPXgseS53cmFwJiZ4JiYoYi5hZGxlcj15LmNoZWNrPXkuZmxhZ3M/aCh5LmNoZWNrLE8seCxiLm5leHRfb3V0LXgpOmQoeS5jaGVjayxPLHgsYi5uZXh0X291dC14KSksYi5kYXRhX3R5cGU9eS5iaXRzKyh5Lmxhc3Q/NjQ6MCkrKHkubW9kZT09PTEyPzEyODowKSsoeS5tb2RlPT09MjB8fHkubW9kZT09PTE1PzI1NjowKSwoVD09MCYmeD09PTB8fGc9PT00KSYmcnQ9PT0wJiYocnQ9LTUpLHJ0KX0sYy5pbmZsYXRlRW5kPWZ1bmN0aW9uKGIpe2lmKCFifHwhYi5zdGF0ZSlyZXR1cm4gQTt2YXIgZz1iLnN0YXRlO3JldHVybiBnLndpbmRvdyYmKGcud2luZG93PW51bGwpLGIuc3RhdGU9bnVsbCwwfSxjLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24oYixnKXt2YXIgeTtyZXR1cm4gYiYmYi5zdGF0ZSYmMiYoeT1iLnN0YXRlKS53cmFwPygoeS5oZWFkPWcpLmRvbmU9ITEsMCk6QX0sYy5pbmZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbihiLGcpe3ZhciB5LE09Zy5sZW5ndGg7cmV0dXJuIGImJmIuc3RhdGU/KHk9Yi5zdGF0ZSkud3JhcCE9PTAmJnkubW9kZSE9PTExP0E6eS5tb2RlPT09MTEmJmQoMSxnLE0sMCkhPT15LmNoZWNrPy0zOnAoYixnLE0sTSk/KHkubW9kZT0zMSwtNCk6KHkuaGF2ZWRpY3Q9MSwwKTpBfSxjLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjQxLCIuL2FkbGVyMzIiOjQzLCIuL2NyYzMyIjo0NSwiLi9pbmZmYXN0Ijo0OCwiLi9pbmZ0cmVlcyI6NTB9XSw1MDpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4uL3V0aWxzL2NvbW1vbiIpLGQ9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxoPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sdz1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sXz1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO2YuZXhwb3J0cz1mdW5jdGlvbihBLFAsTCxOLEQsRixVLEIpe3ZhciBTLEMsdixwLGIsZyx5LE0sTyxSPUIuYml0cyx6PTAsJD0wLFg9MCxqPTAsVz0wLFQ9MCx4PTAsST0wLEg9MCxaPTAsVj1udWxsLEs9MCxZPW5ldyB1LkJ1ZjE2KDE2KSxKPW5ldyB1LkJ1ZjE2KDE2KSxxPW51bGwsRz0wO2Zvcih6PTA7ejw9MTU7eisrKVlbel09MDtmb3IoJD0wOyQ8TjskKyspWVtQW0wrJF1dKys7Zm9yKFc9UixqPTE1OzE8PWomJllbal09PT0wO2otLSk7aWYoajxXJiYoVz1qKSxqPT09MClyZXR1cm4gRFtGKytdPTIwOTcxNTIwLERbRisrXT0yMDk3MTUyMCxCLmJpdHM9MSwwO2ZvcihYPTE7WDxqJiZZW1hdPT09MDtYKyspO2ZvcihXPFgmJihXPVgpLHo9ST0xO3o8PTE1O3orKylpZihJPDw9MSwoSS09WVt6XSk8MClyZXR1cm4tMTtpZigwPEkmJihBPT09MHx8aiE9PTEpKXJldHVybi0xO2ZvcihKWzFdPTAsej0xO3o8MTU7eisrKUpbeisxXT1KW3pdK1lbel07Zm9yKCQ9MDskPE47JCsrKVBbTCskXSE9PTAmJihVW0pbUFtMKyRdXSsrXT0kKTtpZihnPUE9PT0wPyhWPXE9VSwxOSk6QT09PTE/KFY9ZCxLLT0yNTcscT1oLEctPTI1NywyNTYpOihWPXcscT1fLC0xKSx6PVgsYj1GLHg9JD1aPTAsdj0tMSxwPShIPTE8PChUPVcpKS0xLEE9PT0xJiY4NTI8SHx8QT09PTImJjU5MjxIKXJldHVybiAxO2Zvcig7Oyl7Zm9yKHk9ei14LE89VVskXTxnPyhNPTAsVVskXSk6VVskXT5nPyhNPXFbRytVWyRdXSxWW0srVVskXV0pOihNPTk2LDApLFM9MTw8ei14LFg9Qz0xPDxUO0RbYisoWj4+eCkrKEMtPVMpXT15PDwyNHxNPDwxNnxPfDAsQyE9PTA7KTtmb3IoUz0xPDx6LTE7WiZTOylTPj49MTtpZihTIT09MD8oWiY9Uy0xLForPVMpOlo9MCwkKyssLS1ZW3pdPT0wKXtpZih6PT09ailicmVhazt6PVBbTCtVWyRdXX1pZihXPHomJihaJnApIT09dil7Zm9yKHg9PT0wJiYoeD1XKSxiKz1YLEk9MTw8KFQ9ei14KTtUK3g8aiYmISgoSS09WVtUK3hdKTw9MCk7KVQrKyxJPDw9MTtpZihIKz0xPDxULEE9PT0xJiY4NTI8SHx8QT09PTImJjU5MjxIKXJldHVybiAxO0Rbdj1aJnBdPVc8PDI0fFQ8PDE2fGItRnwwfX1yZXR1cm4gWiE9PTAmJihEW2IrWl09ei14PDwyNHw2NDw8MTZ8MCksQi5iaXRzPVcsMH19LHsiLi4vdXRpbHMvY29tbW9uIjo0MX1dLDUxOltmdW5jdGlvbihpLGYsYyl7Zi5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSw1MjpbZnVuY3Rpb24oaSxmLGMpe3ZhciB1PWkoIi4uL3V0aWxzL2NvbW1vbiIpO2Z1bmN0aW9uIGQocSl7Zm9yKHZhciBHPXEubGVuZ3RoOzA8PS0tRzspcVtHXT0wfXZhciBoPTI1Nix3PTI4NixfPTMwLEE9MTUsUD1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxMPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxOPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxEPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxGPW5ldyBBcnJheSg1NzYpO2QoRik7dmFyIFU9bmV3IEFycmF5KDYwKTtkKFUpO3ZhciBCPW5ldyBBcnJheSg1MTIpO2QoQik7dmFyIFM9bmV3IEFycmF5KDI1Nik7ZChTKTt2YXIgQz1uZXcgQXJyYXkoMjkpO2QoQyk7dmFyIHYscCxiLGc9bmV3IEFycmF5KF8pO2Z1bmN0aW9uIHkocSxHLFEscnQsc3Qpe3RoaXMuc3RhdGljX3RyZWU9cSx0aGlzLmV4dHJhX2JpdHM9Ryx0aGlzLmV4dHJhX2Jhc2U9USx0aGlzLmVsZW1zPXJ0LHRoaXMubWF4X2xlbmd0aD1zdCx0aGlzLmhhc19zdHJlZT1xJiZxLmxlbmd0aH1mdW5jdGlvbiBNKHEsRyl7dGhpcy5keW5fdHJlZT1xLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1HfWZ1bmN0aW9uIE8ocSl7cmV0dXJuIHE8MjU2P0JbcV06QlsyNTYrKHE+Pj43KV19ZnVuY3Rpb24gUihxLEcpe3EucGVuZGluZ19idWZbcS5wZW5kaW5nKytdPTI1NSZHLHEucGVuZGluZ19idWZbcS5wZW5kaW5nKytdPUc+Pj44JjI1NX1mdW5jdGlvbiB6KHEsRyxRKXtxLmJpX3ZhbGlkPjE2LVE/KHEuYmlfYnVmfD1HPDxxLmJpX3ZhbGlkJjY1NTM1LFIocSxxLmJpX2J1ZikscS5iaV9idWY9Rz4+MTYtcS5iaV92YWxpZCxxLmJpX3ZhbGlkKz1RLTE2KToocS5iaV9idWZ8PUc8PHEuYmlfdmFsaWQmNjU1MzUscS5iaV92YWxpZCs9USl9ZnVuY3Rpb24gJChxLEcsUSl7eihxLFFbMipHXSxRWzIqRysxXSl9ZnVuY3Rpb24gWChxLEcpe2Zvcih2YXIgUT0wO1F8PTEmcSxxPj4+PTEsUTw8PTEsMDwtLUc7KTtyZXR1cm4gUT4+PjF9ZnVuY3Rpb24gaihxLEcsUSl7dmFyIHJ0LHN0LG90PW5ldyBBcnJheSgxNiksaHQ9MDtmb3IocnQ9MTtydDw9QTtydCsrKW90W3J0XT1odD1odCtRW3J0LTFdPDwxO2ZvcihzdD0wO3N0PD1HO3N0Kyspe3ZhciBkdD1xWzIqc3QrMV07ZHQhPT0wJiYocVsyKnN0XT1YKG90W2R0XSsrLGR0KSl9fWZ1bmN0aW9uIFcocSl7dmFyIEc7Zm9yKEc9MDtHPHc7RysrKXEuZHluX2x0cmVlWzIqR109MDtmb3IoRz0wO0c8XztHKyspcS5keW5fZHRyZWVbMipHXT0wO2ZvcihHPTA7RzwxOTtHKyspcS5ibF90cmVlWzIqR109MDtxLmR5bl9sdHJlZVs1MTJdPTEscS5vcHRfbGVuPXEuc3RhdGljX2xlbj0wLHEubGFzdF9saXQ9cS5tYXRjaGVzPTB9ZnVuY3Rpb24gVChxKXs4PHEuYmlfdmFsaWQ/UihxLHEuYmlfYnVmKTowPHEuYmlfdmFsaWQmJihxLnBlbmRpbmdfYnVmW3EucGVuZGluZysrXT1xLmJpX2J1ZikscS5iaV9idWY9MCxxLmJpX3ZhbGlkPTB9ZnVuY3Rpb24geChxLEcsUSxydCl7dmFyIHN0PTIqRyxvdD0yKlE7cmV0dXJuIHFbc3RdPHFbb3RdfHxxW3N0XT09PXFbb3RdJiZydFtHXTw9cnRbUV19ZnVuY3Rpb24gSShxLEcsUSl7Zm9yKHZhciBydD1xLmhlYXBbUV0sc3Q9UTw8MTtzdDw9cS5oZWFwX2xlbiYmKHN0PHEuaGVhcF9sZW4mJngoRyxxLmhlYXBbc3QrMV0scS5oZWFwW3N0XSxxLmRlcHRoKSYmc3QrKywheChHLHJ0LHEuaGVhcFtzdF0scS5kZXB0aCkpOylxLmhlYXBbUV09cS5oZWFwW3N0XSxRPXN0LHN0PDw9MTtxLmhlYXBbUV09cnR9ZnVuY3Rpb24gSChxLEcsUSl7dmFyIHJ0LHN0LG90LGh0LGR0PTA7aWYocS5sYXN0X2xpdCE9PTApZm9yKDtydD1xLnBlbmRpbmdfYnVmW3EuZF9idWYrMipkdF08PDh8cS5wZW5kaW5nX2J1ZltxLmRfYnVmKzIqZHQrMV0sc3Q9cS5wZW5kaW5nX2J1ZltxLmxfYnVmK2R0XSxkdCsrLHJ0PT09MD8kKHEsc3QsRyk6KCQocSwob3Q9U1tzdF0pK2grMSxHKSwoaHQ9UFtvdF0pIT09MCYmeihxLHN0LT1DW290XSxodCksJChxLG90PU8oLS1ydCksUSksKGh0PUxbb3RdKSE9PTAmJnoocSxydC09Z1tvdF0saHQpKSxkdDxxLmxhc3RfbGl0Oyk7JChxLDI1NixHKX1mdW5jdGlvbiBaKHEsRyl7dmFyIFEscnQsc3Qsb3Q9Ry5keW5fdHJlZSxodD1HLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxkdD1HLnN0YXRfZGVzYy5oYXNfc3RyZWUsbXQ9Ry5zdGF0X2Rlc2MuZWxlbXMsTXQ9LTE7Zm9yKHEuaGVhcF9sZW49MCxxLmhlYXBfbWF4PTU3MyxRPTA7UTxtdDtRKyspb3RbMipRXSE9PTA/KHEuaGVhcFsrK3EuaGVhcF9sZW5dPU10PVEscS5kZXB0aFtRXT0wKTpvdFsyKlErMV09MDtmb3IoO3EuaGVhcF9sZW48Mjspb3RbMiooc3Q9cS5oZWFwWysrcS5oZWFwX2xlbl09TXQ8Mj8rK010OjApXT0xLHEuZGVwdGhbc3RdPTAscS5vcHRfbGVuLS0sZHQmJihxLnN0YXRpY19sZW4tPWh0WzIqc3QrMV0pO2ZvcihHLm1heF9jb2RlPU10LFE9cS5oZWFwX2xlbj4+MTsxPD1RO1EtLSlJKHEsb3QsUSk7Zm9yKHN0PW10O1E9cS5oZWFwWzFdLHEuaGVhcFsxXT1xLmhlYXBbcS5oZWFwX2xlbi0tXSxJKHEsb3QsMSkscnQ9cS5oZWFwWzFdLHEuaGVhcFstLXEuaGVhcF9tYXhdPVEscS5oZWFwWy0tcS5oZWFwX21heF09cnQsb3RbMipzdF09b3RbMipRXStvdFsyKnJ0XSxxLmRlcHRoW3N0XT0ocS5kZXB0aFtRXT49cS5kZXB0aFtydF0/cS5kZXB0aFtRXTpxLmRlcHRoW3J0XSkrMSxvdFsyKlErMV09b3RbMipydCsxXT1zdCxxLmhlYXBbMV09c3QrKyxJKHEsb3QsMSksMjw9cS5oZWFwX2xlbjspO3EuaGVhcFstLXEuaGVhcF9tYXhdPXEuaGVhcFsxXSxmdW5jdGlvbihDdCxfdCl7dmFyIHl0LGN0LGV0LGl0LHB0LGF0LGx0PV90LmR5bl90cmVlLHd0PV90Lm1heF9jb2RlLHh0PV90LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxqdD1fdC5zdGF0X2Rlc2MuaGFzX3N0cmVlLE50PV90LnN0YXRfZGVzYy5leHRyYV9iaXRzLGt0PV90LnN0YXRfZGVzYy5leHRyYV9iYXNlLEt0PV90LnN0YXRfZGVzYy5tYXhfbGVuZ3RoLFd0PTA7Zm9yKGl0PTA7aXQ8PUE7aXQrKylDdC5ibF9jb3VudFtpdF09MDtmb3IobHRbMipDdC5oZWFwW0N0LmhlYXBfbWF4XSsxXT0wLHl0PUN0LmhlYXBfbWF4KzE7eXQ8NTczO3l0KyspS3Q8KGl0PWx0WzIqbHRbMiooY3Q9Q3QuaGVhcFt5dF0pKzFdKzFdKzEpJiYoaXQ9S3QsV3QrKyksbHRbMipjdCsxXT1pdCx3dDxjdHx8KEN0LmJsX2NvdW50W2l0XSsrLHB0PTAsa3Q8PWN0JiYocHQ9TnRbY3Qta3RdKSxhdD1sdFsyKmN0XSxDdC5vcHRfbGVuKz1hdCooaXQrcHQpLGp0JiYoQ3Quc3RhdGljX2xlbis9YXQqKHh0WzIqY3QrMV0rcHQpKSk7aWYoV3QhPT0wKXtkb3tmb3IoaXQ9S3QtMTtDdC5ibF9jb3VudFtpdF09PT0wOylpdC0tO0N0LmJsX2NvdW50W2l0XS0tLEN0LmJsX2NvdW50W2l0KzFdKz0yLEN0LmJsX2NvdW50W0t0XS0tLFd0LT0yfXdoaWxlKDA8V3QpO2ZvcihpdD1LdDtpdCE9PTA7aXQtLSlmb3IoY3Q9Q3QuYmxfY291bnRbaXRdO2N0IT09MDspd3Q8KGV0PUN0LmhlYXBbLS15dF0pfHwobHRbMipldCsxXSE9PWl0JiYoQ3Qub3B0X2xlbis9KGl0LWx0WzIqZXQrMV0pKmx0WzIqZXRdLGx0WzIqZXQrMV09aXQpLGN0LS0pfX0ocSxHKSxqKG90LE10LHEuYmxfY291bnQpfWZ1bmN0aW9uIFYocSxHLFEpe3ZhciBydCxzdCxvdD0tMSxodD1HWzFdLGR0PTAsbXQ9NyxNdD00O2ZvcihodD09PTAmJihtdD0xMzgsTXQ9MyksR1syKihRKzEpKzFdPTY1NTM1LHJ0PTA7cnQ8PVE7cnQrKylzdD1odCxodD1HWzIqKHJ0KzEpKzFdLCsrZHQ8bXQmJnN0PT09aHR8fChkdDxNdD9xLmJsX3RyZWVbMipzdF0rPWR0OnN0IT09MD8oc3QhPT1vdCYmcS5ibF90cmVlWzIqc3RdKysscS5ibF90cmVlWzMyXSsrKTpkdDw9MTA/cS5ibF90cmVlWzM0XSsrOnEuYmxfdHJlZVszNl0rKyxvdD1zdCxNdD0oZHQ9MCk9PT1odD8obXQ9MTM4LDMpOnN0PT09aHQ/KG10PTYsMyk6KG10PTcsNCkpfWZ1bmN0aW9uIEsocSxHLFEpe3ZhciBydCxzdCxvdD0tMSxodD1HWzFdLGR0PTAsbXQ9NyxNdD00O2ZvcihodD09PTAmJihtdD0xMzgsTXQ9MykscnQ9MDtydDw9UTtydCsrKWlmKHN0PWh0LGh0PUdbMioocnQrMSkrMV0sISgrK2R0PG10JiZzdD09PWh0KSl7aWYoZHQ8TXQpZm9yKDskKHEsc3QscS5ibF90cmVlKSwtLWR0IT0wOyk7ZWxzZSBzdCE9PTA/KHN0IT09b3QmJigkKHEsc3QscS5ibF90cmVlKSxkdC0tKSwkKHEsMTYscS5ibF90cmVlKSx6KHEsZHQtMywyKSk6ZHQ8PTEwPygkKHEsMTcscS5ibF90cmVlKSx6KHEsZHQtMywzKSk6KCQocSwxOCxxLmJsX3RyZWUpLHoocSxkdC0xMSw3KSk7b3Q9c3QsTXQ9KGR0PTApPT09aHQ/KG10PTEzOCwzKTpzdD09PWh0PyhtdD02LDMpOihtdD03LDQpfX1kKGcpO3ZhciBZPSExO2Z1bmN0aW9uIEoocSxHLFEscnQpe3oocSwwKyhydD8xOjApLDMpLGZ1bmN0aW9uKHN0LG90LGh0LGR0KXtUKHN0KSxSKHN0LGh0KSxSKHN0LH5odCksdS5hcnJheVNldChzdC5wZW5kaW5nX2J1ZixzdC53aW5kb3csb3QsaHQsc3QucGVuZGluZyksc3QucGVuZGluZys9aHR9KHEsRyxRKX1jLl90cl9pbml0PWZ1bmN0aW9uKHEpe1l8fChmdW5jdGlvbigpe3ZhciBHLFEscnQsc3Qsb3QsaHQ9bmV3IEFycmF5KDE2KTtmb3Ioc3Q9cnQ9MDtzdDwyODtzdCsrKWZvcihDW3N0XT1ydCxHPTA7RzwxPDxQW3N0XTtHKyspU1tydCsrXT1zdDtmb3IoU1tydC0xXT1zdCxzdD1vdD0wO3N0PDE2O3N0KyspZm9yKGdbc3RdPW90LEc9MDtHPDE8PExbc3RdO0crKylCW290KytdPXN0O2ZvcihvdD4+PTc7c3Q8XztzdCsrKWZvcihnW3N0XT1vdDw8NyxHPTA7RzwxPDxMW3N0XS03O0crKylCWzI1NitvdCsrXT1zdDtmb3IoUT0wO1E8PUE7USsrKWh0W1FdPTA7Zm9yKEc9MDtHPD0xNDM7KUZbMipHKzFdPTgsRysrLGh0WzhdKys7Zm9yKDtHPD0yNTU7KUZbMipHKzFdPTksRysrLGh0WzldKys7Zm9yKDtHPD0yNzk7KUZbMipHKzFdPTcsRysrLGh0WzddKys7Zm9yKDtHPD0yODc7KUZbMipHKzFdPTgsRysrLGh0WzhdKys7Zm9yKGooRiwyODcsaHQpLEc9MDtHPF87RysrKVVbMipHKzFdPTUsVVsyKkddPVgoRyw1KTt2PW5ldyB5KEYsUCwyNTcsdyxBKSxwPW5ldyB5KFUsTCwwLF8sQSksYj1uZXcgeShuZXcgQXJyYXkoMCksTiwwLDE5LDcpfSgpLFk9ITApLHEubF9kZXNjPW5ldyBNKHEuZHluX2x0cmVlLHYpLHEuZF9kZXNjPW5ldyBNKHEuZHluX2R0cmVlLHApLHEuYmxfZGVzYz1uZXcgTShxLmJsX3RyZWUsYikscS5iaV9idWY9MCxxLmJpX3ZhbGlkPTAsVyhxKX0sYy5fdHJfc3RvcmVkX2Jsb2NrPUosYy5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24ocSxHLFEscnQpe3ZhciBzdCxvdCxodD0wOzA8cS5sZXZlbD8ocS5zdHJtLmRhdGFfdHlwZT09PTImJihxLnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uKGR0KXt2YXIgbXQsTXQ9NDA5MzYyNDQ0Nztmb3IobXQ9MDttdDw9MzE7bXQrKyxNdD4+Pj0xKWlmKDEmTXQmJmR0LmR5bl9sdHJlZVsyKm10XSE9PTApcmV0dXJuIDA7aWYoZHQuZHluX2x0cmVlWzE4XSE9PTB8fGR0LmR5bl9sdHJlZVsyMF0hPT0wfHxkdC5keW5fbHRyZWVbMjZdIT09MClyZXR1cm4gMTtmb3IobXQ9MzI7bXQ8aDttdCsrKWlmKGR0LmR5bl9sdHJlZVsyKm10XSE9PTApcmV0dXJuIDE7cmV0dXJuIDB9KHEpKSxaKHEscS5sX2Rlc2MpLFoocSxxLmRfZGVzYyksaHQ9ZnVuY3Rpb24oZHQpe3ZhciBtdDtmb3IoVihkdCxkdC5keW5fbHRyZWUsZHQubF9kZXNjLm1heF9jb2RlKSxWKGR0LGR0LmR5bl9kdHJlZSxkdC5kX2Rlc2MubWF4X2NvZGUpLFooZHQsZHQuYmxfZGVzYyksbXQ9MTg7Mzw9bXQmJmR0LmJsX3RyZWVbMipEW210XSsxXT09PTA7bXQtLSk7cmV0dXJuIGR0Lm9wdF9sZW4rPTMqKG10KzEpKzUrNSs0LG10fShxKSxzdD1xLm9wdF9sZW4rMys3Pj4+Mywob3Q9cS5zdGF0aWNfbGVuKzMrNz4+PjMpPD1zdCYmKHN0PW90KSk6c3Q9b3Q9USs1LFErNDw9c3QmJkchPT0tMT9KKHEsRyxRLHJ0KTpxLnN0cmF0ZWd5PT09NHx8b3Q9PT1zdD8oeihxLDIrKHJ0PzE6MCksMyksSChxLEYsVSkpOih6KHEsNCsocnQ/MTowKSwzKSxmdW5jdGlvbihkdCxtdCxNdCxDdCl7dmFyIF90O2Zvcih6KGR0LG10LTI1Nyw1KSx6KGR0LE10LTEsNSkseihkdCxDdC00LDQpLF90PTA7X3Q8Q3Q7X3QrKyl6KGR0LGR0LmJsX3RyZWVbMipEW190XSsxXSwzKTtLKGR0LGR0LmR5bl9sdHJlZSxtdC0xKSxLKGR0LGR0LmR5bl9kdHJlZSxNdC0xKX0ocSxxLmxfZGVzYy5tYXhfY29kZSsxLHEuZF9kZXNjLm1heF9jb2RlKzEsaHQrMSksSChxLHEuZHluX2x0cmVlLHEuZHluX2R0cmVlKSksVyhxKSxydCYmVChxKX0sYy5fdHJfdGFsbHk9ZnVuY3Rpb24ocSxHLFEpe3JldHVybiBxLnBlbmRpbmdfYnVmW3EuZF9idWYrMipxLmxhc3RfbGl0XT1HPj4+OCYyNTUscS5wZW5kaW5nX2J1ZltxLmRfYnVmKzIqcS5sYXN0X2xpdCsxXT0yNTUmRyxxLnBlbmRpbmdfYnVmW3EubF9idWYrcS5sYXN0X2xpdF09MjU1JlEscS5sYXN0X2xpdCsrLEc9PT0wP3EuZHluX2x0cmVlWzIqUV0rKzoocS5tYXRjaGVzKyssRy0tLHEuZHluX2x0cmVlWzIqKFNbUV0raCsxKV0rKyxxLmR5bl9kdHJlZVsyKk8oRyldKyspLHEubGFzdF9saXQ9PT1xLmxpdF9idWZzaXplLTF9LGMuX3RyX2FsaWduPWZ1bmN0aW9uKHEpe3oocSwyLDMpLCQocSwyNTYsRiksZnVuY3Rpb24oRyl7Ry5iaV92YWxpZD09PTE2PyhSKEcsRy5iaV9idWYpLEcuYmlfYnVmPTAsRy5iaV92YWxpZD0wKTo4PD1HLmJpX3ZhbGlkJiYoRy5wZW5kaW5nX2J1ZltHLnBlbmRpbmcrK109MjU1JkcuYmlfYnVmLEcuYmlfYnVmPj49OCxHLmJpX3ZhbGlkLT04KX0ocSl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6NDF9XSw1MzpbZnVuY3Rpb24oaSxmLGMpe2YuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV0sNTQ6W2Z1bmN0aW9uKGksZixjKXsoZnVuY3Rpb24odSl7KGZ1bmN0aW9uKGQsaCl7aWYoIWQuc2V0SW1tZWRpYXRlKXt2YXIgdyxfLEEsUCxMPTEsTj17fSxEPSExLEY9ZC5kb2N1bWVudCxVPU9iamVjdC5nZXRQcm90b3R5cGVPZiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKGQpO1U9VSYmVS5zZXRUaW1lb3V0P1U6ZCx3PXt9LnRvU3RyaW5nLmNhbGwoZC5wcm9jZXNzKT09PSJbb2JqZWN0IHByb2Nlc3NdIj9mdW5jdGlvbih2KXttLm5leHRUaWNrKGZ1bmN0aW9uKCl7Uyh2KX0pfTpmdW5jdGlvbigpe2lmKGQucG9zdE1lc3NhZ2UmJiFkLmltcG9ydFNjcmlwdHMpe3ZhciB2PSEwLHA9ZC5vbm1lc3NhZ2U7cmV0dXJuIGQub25tZXNzYWdlPWZ1bmN0aW9uKCl7dj0hMX0sZC5wb3N0TWVzc2FnZSgiIiwiKiIpLGQub25tZXNzYWdlPXAsdn19KCk/KFA9InNldEltbWVkaWF0ZSQiK01hdGgucmFuZG9tKCkrIiQiLGQuYWRkRXZlbnRMaXN0ZW5lcj9kLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEMsITEpOmQuYXR0YWNoRXZlbnQoIm9ubWVzc2FnZSIsQyksZnVuY3Rpb24odil7ZC5wb3N0TWVzc2FnZShQK3YsIioiKX0pOmQuTWVzc2FnZUNoYW5uZWw/KChBPW5ldyBNZXNzYWdlQ2hhbm5lbCkucG9ydDEub25tZXNzYWdlPWZ1bmN0aW9uKHYpe1Modi5kYXRhKX0sZnVuY3Rpb24odil7QS5wb3J0Mi5wb3N0TWVzc2FnZSh2KX0pOkYmJiJvbnJlYWR5c3RhdGVjaGFuZ2UiaW4gRi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKT8oXz1GLmRvY3VtZW50RWxlbWVudCxmdW5jdGlvbih2KXt2YXIgcD1GLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3Aub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Uyh2KSxwLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLF8ucmVtb3ZlQ2hpbGQocCkscD1udWxsfSxfLmFwcGVuZENoaWxkKHApfSk6ZnVuY3Rpb24odil7c2V0VGltZW91dChTLDAsdil9LFUuc2V0SW1tZWRpYXRlPWZ1bmN0aW9uKHYpe3R5cGVvZiB2IT0iZnVuY3Rpb24iJiYodj1uZXcgRnVuY3Rpb24oIiIrdikpO2Zvcih2YXIgcD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxiPTA7YjxwLmxlbmd0aDtiKyspcFtiXT1hcmd1bWVudHNbYisxXTt2YXIgZz17Y2FsbGJhY2s6dixhcmdzOnB9O3JldHVybiBOW0xdPWcsdyhMKSxMKyt9LFUuY2xlYXJJbW1lZGlhdGU9Qn1mdW5jdGlvbiBCKHYpe2RlbGV0ZSBOW3ZdfWZ1bmN0aW9uIFModil7aWYoRClzZXRUaW1lb3V0KFMsMCx2KTtlbHNle3ZhciBwPU5bdl07aWYocCl7RD0hMDt0cnl7KGZ1bmN0aW9uKGIpe3ZhciBnPWIuY2FsbGJhY2sseT1iLmFyZ3M7c3dpdGNoKHkubGVuZ3RoKXtjYXNlIDA6ZygpO2JyZWFrO2Nhc2UgMTpnKHlbMF0pO2JyZWFrO2Nhc2UgMjpnKHlbMF0seVsxXSk7YnJlYWs7Y2FzZSAzOmcoeVswXSx5WzFdLHlbMl0pO2JyZWFrO2RlZmF1bHQ6Zy5hcHBseSh2b2lkIDAseSl9fSkocCl9ZmluYWxseXtCKHYpLEQ9ITF9fX19ZnVuY3Rpb24gQyh2KXt2LnNvdXJjZT09PWQmJnR5cGVvZiB2LmRhdGE9PSJzdHJpbmciJiZ2LmRhdGEuaW5kZXhPZihQKT09PTAmJlMoK3YuZGF0YS5zbGljZShQLmxlbmd0aCkpfX0pKHR5cGVvZiBzZWxmPiJ1Ij91PT09dm9pZCAwP3RoaXM6dTpzZWxmKX0pLmNhbGwodGhpcyxzIT09dm9pZCAwP3M6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dfSx7fSxbMTBdKSgxMCl9KX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiX3Byb2Nlc3MiKSx0eXBlb2YgSnQ8InUiP0p0OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSxhKCJidWZmZXIiKS5CdWZmZXIsYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzZdLGEoInRpbWVycyIpLnNldEltbWVkaWF0ZSl9LHtfcHJvY2Vzczo0NjcsYnVmZmVyOjIyMCx0aW1lcnM6NTIzfV0sNDQyOltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe3ZhciBzPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxvPVJlZ0V4cChzLnNvdXJjZSkscj10eXBlb2YgbT09Im9iamVjdCImJm0mJm0uT2JqZWN0PT09T2JqZWN0JiZtLHQ9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixlPXJ8fHR8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG49ZS5TeW1ib2wsaT1uP24ucHJvdG90eXBlOnZvaWQgMCxmPWk/aS50b1N0cmluZzp2b2lkIDA7ZnVuY3Rpb24gYyh1KXtpZih0eXBlb2YgdT09InN0cmluZyIpcmV0dXJuIHU7aWYoZnVuY3Rpb24oaCl7cmV0dXJuIHR5cGVvZiBoPT0ic3ltYm9sInx8ZnVuY3Rpb24odyl7cmV0dXJuISF3JiZ0eXBlb2Ygdz09Im9iamVjdCJ9KGgpJiZsLmNhbGwoaCk9PSJbb2JqZWN0IFN5bWJvbF0ifSh1KSlyZXR1cm4gZj9mLmNhbGwodSk6IiI7dmFyIGQ9dSsiIjtyZXR1cm4gZD09IjAiJiYxL3U9PS0xLzA/Ii0wIjpkfUUuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgZDtyZXR1cm4odT0oZD11KT09bnVsbD8iIjpjKGQpKSYmby50ZXN0KHUpP3UucmVwbGFjZShzLCJcXCQmIik6dX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHR5cGVvZiBKdDwidSI/SnQ6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDQ0MzpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXt2YXIgcz0iW29iamVjdCBBcmd1bWVudHNdIixvPSJbb2JqZWN0IE1hcF0iLHI9IltvYmplY3QgT2JqZWN0XSIsdD0iW29iamVjdCBTZXRdIixlPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGw9L15cdyokLyxuPS9eXC4vLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csZj0vXFwoXFwpPy9nLGM9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sdT0vXig/OjB8WzEtOV1cZCopJC8sZD17fTtkWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1kWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1kWyJbb2JqZWN0IEludDhBcnJheV0iXT1kWyJbb2JqZWN0IEludDE2QXJyYXldIl09ZFsiW29iamVjdCBJbnQzMkFycmF5XSJdPWRbIltvYmplY3QgVWludDhBcnJheV0iXT1kWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWRbIltvYmplY3QgVWludDE2QXJyYXldIl09ZFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxkW3NdPWRbIltvYmplY3QgQXJyYXldIl09ZFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1kWyJbb2JqZWN0IEJvb2xlYW5dIl09ZFsiW29iamVjdCBEYXRhVmlld10iXT1kWyJbb2JqZWN0IERhdGVdIl09ZFsiW29iamVjdCBFcnJvcl0iXT1kWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWRbb109ZFsiW29iamVjdCBOdW1iZXJdIl09ZFtyXT1kWyJbb2JqZWN0IFJlZ0V4cF0iXT1kW3RdPWRbIltvYmplY3QgU3RyaW5nXSJdPWRbIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgaD10eXBlb2YgbT09Im9iamVjdCImJm0mJm0uT2JqZWN0PT09T2JqZWN0JiZtLHc9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixfPWh8fHd8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksQT10eXBlb2Ygaz09Im9iamVjdCImJmsmJiFrLm5vZGVUeXBlJiZrLFA9QSYmdHlwZW9mIEU9PSJvYmplY3QiJiZFJiYhRS5ub2RlVHlwZSYmRSxMPVAmJlAuZXhwb3J0cz09PUEmJmgucHJvY2VzcyxOPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBMJiZMLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpLEQ9TiYmTi5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gRih0dCxmdCxndCx2dCl7Zm9yKHZhciBSdD0tMSxTdD10dD90dC5sZW5ndGg6MDsrK1J0PFN0Oyl7dmFyIFR0PXR0W1J0XTtmdCh2dCxUdCxndChUdCksdHQpfXJldHVybiB2dH1mdW5jdGlvbiBVKHR0LGZ0KXtmb3IodmFyIGd0PS0xLHZ0PXR0P3R0Lmxlbmd0aDowOysrZ3Q8dnQ7KWlmKGZ0KHR0W2d0XSxndCx0dCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gQih0dCl7dmFyIGZ0PSExO2lmKHR0IT1udWxsJiZ0eXBlb2YgdHQudG9TdHJpbmchPSJmdW5jdGlvbiIpdHJ5e2Z0PSEhKHR0KyIiKX1jYXRjaHt9cmV0dXJuIGZ0fWZ1bmN0aW9uIFModHQpe3ZhciBmdD0tMSxndD1BcnJheSh0dC5zaXplKTtyZXR1cm4gdHQuZm9yRWFjaChmdW5jdGlvbih2dCxSdCl7Z3RbKytmdF09W1J0LHZ0XX0pLGd0fWZ1bmN0aW9uIEModHQpe3ZhciBmdD0tMSxndD1BcnJheSh0dC5zaXplKTtyZXR1cm4gdHQuZm9yRWFjaChmdW5jdGlvbih2dCl7Z3RbKytmdF09dnR9KSxndH12YXIgdixwLGIsZz1BcnJheS5wcm90b3R5cGUseT1GdW5jdGlvbi5wcm90b3R5cGUsTT1PYmplY3QucHJvdG90eXBlLE89X1siX19jb3JlLWpzX3NoYXJlZF9fIl0sUj0odj0vW14uXSskLy5leGVjKE8mJk8ua2V5cyYmTy5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrdjoiIix6PXkudG9TdHJpbmcsJD1NLmhhc093blByb3BlcnR5LFg9TS50b1N0cmluZyxqPVJlZ0V4cCgiXiIrei5jYWxsKCQpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLFc9Xy5TeW1ib2wsVD1fLlVpbnQ4QXJyYXkseD1NLnByb3BlcnR5SXNFbnVtZXJhYmxlLEk9Zy5zcGxpY2UsSD0ocD1PYmplY3Qua2V5cyxiPU9iamVjdCxmdW5jdGlvbih0dCl7cmV0dXJuIHAoYih0dCkpfSksWj1MdChfLCJEYXRhVmlldyIpLFY9THQoXywiTWFwIiksSz1MdChfLCJQcm9taXNlIiksWT1MdChfLCJTZXQiKSxKPUx0KF8sIldlYWtNYXAiKSxxPUx0KE9iamVjdCwiY3JlYXRlIiksRz11dChaKSxRPXV0KFYpLHJ0PXV0KEspLHN0PXV0KFkpLG90PXV0KEopLGh0PVc/Vy5wcm90b3R5cGU6dm9pZCAwLGR0PWh0P2h0LnZhbHVlT2Y6dm9pZCAwLG10PWh0P2h0LnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBNdCh0dCl7dmFyIGZ0PS0xLGd0PXR0P3R0Lmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7KytmdDxndDspe3ZhciB2dD10dFtmdF07dGhpcy5zZXQodnRbMF0sdnRbMV0pfX1mdW5jdGlvbiBDdCh0dCl7dmFyIGZ0PS0xLGd0PXR0P3R0Lmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7KytmdDxndDspe3ZhciB2dD10dFtmdF07dGhpcy5zZXQodnRbMF0sdnRbMV0pfX1mdW5jdGlvbiBfdCh0dCl7dmFyIGZ0PS0xLGd0PXR0P3R0Lmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7KytmdDxndDspe3ZhciB2dD10dFtmdF07dGhpcy5zZXQodnRbMF0sdnRbMV0pfX1mdW5jdGlvbiB5dCh0dCl7dmFyIGZ0PS0xLGd0PXR0P3R0Lmxlbmd0aDowO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBfdDsrK2Z0PGd0Oyl0aGlzLmFkZCh0dFtmdF0pfWZ1bmN0aW9uIGN0KHR0KXt0aGlzLl9fZGF0YV9fPW5ldyBDdCh0dCl9ZnVuY3Rpb24gZXQodHQsZnQpe3ZhciBndD1CdCh0dCl8fFV0KHR0KT9mdW5jdGlvbihUdCxRdCl7Zm9yKHZhciBYdD0tMSxZdD1BcnJheShUdCk7KytYdDxUdDspWXRbWHRdPVF0KFh0KTtyZXR1cm4gWXR9KHR0Lmxlbmd0aCxTdHJpbmcpOltdLHZ0PWd0Lmxlbmd0aCxSdD0hIXZ0O2Zvcih2YXIgU3QgaW4gdHQpISQuY2FsbCh0dCxTdCl8fFJ0JiYoU3Q9PSJsZW5ndGgifHxvZShTdCx2dCkpfHxndC5wdXNoKFN0KTtyZXR1cm4gZ3R9ZnVuY3Rpb24gaXQodHQsZnQpe2Zvcih2YXIgZ3Q9dHQubGVuZ3RoO2d0LS07KWlmKEF0KHR0W2d0XVswXSxmdCkpcmV0dXJuIGd0O3JldHVybi0xfWZ1bmN0aW9uIHB0KHR0LGZ0LGd0LHZ0KXtyZXR1cm4gbHQodHQsZnVuY3Rpb24oUnQsU3QsVHQpe2Z0KHZ0LFJ0LGd0KFJ0KSxUdCl9KSx2dH1NdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXE/cShudWxsKTp7fX0sTXQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0dCl7cmV0dXJuIHRoaXMuaGFzKHR0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdHRdfSxNdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHR0KXt2YXIgZnQ9dGhpcy5fX2RhdGFfXztpZihxKXt2YXIgZ3Q9ZnRbdHRdO3JldHVybiBndD09PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj92b2lkIDA6Z3R9cmV0dXJuICQuY2FsbChmdCx0dCk/ZnRbdHRdOnZvaWQgMH0sTXQucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0dCl7dmFyIGZ0PXRoaXMuX19kYXRhX187cmV0dXJuIHE/ZnRbdHRdIT09dm9pZCAwOiQuY2FsbChmdCx0dCl9LE10LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odHQsZnQpe3JldHVybiB0aGlzLl9fZGF0YV9fW3R0XT1xJiZmdD09PXZvaWQgMD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZnQsdGhpc30sQ3QucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0sQ3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0dCl7dmFyIGZ0PXRoaXMuX19kYXRhX18sZ3Q9aXQoZnQsdHQpO3JldHVybiEoZ3Q8MCkmJihndD09ZnQubGVuZ3RoLTE/ZnQucG9wKCk6SS5jYWxsKGZ0LGd0LDEpLCEwKX0sQ3QucHJvdG90eXBlLmdldD1mdW5jdGlvbih0dCl7dmFyIGZ0PXRoaXMuX19kYXRhX18sZ3Q9aXQoZnQsdHQpO3JldHVybiBndDwwP3ZvaWQgMDpmdFtndF1bMV19LEN0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odHQpe3JldHVybiBpdCh0aGlzLl9fZGF0YV9fLHR0KT4tMX0sQ3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0dCxmdCl7dmFyIGd0PXRoaXMuX19kYXRhX18sdnQ9aXQoZ3QsdHQpO3JldHVybiB2dDwwP2d0LnB1c2goW3R0LGZ0XSk6Z3RbdnRdWzFdPWZ0LHRoaXN9LF90LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189e2hhc2g6bmV3IE10LG1hcDpuZXcoVnx8Q3QpLHN0cmluZzpuZXcgTXR9fSxfdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHR0KXtyZXR1cm4gR3QodGhpcyx0dCkuZGVsZXRlKHR0KX0sX3QucHJvdG90eXBlLmdldD1mdW5jdGlvbih0dCl7cmV0dXJuIEd0KHRoaXMsdHQpLmdldCh0dCl9LF90LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odHQpe3JldHVybiBHdCh0aGlzLHR0KS5oYXModHQpfSxfdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHR0LGZ0KXtyZXR1cm4gR3QodGhpcyx0dCkuc2V0KHR0LGZ0KSx0aGlzfSx5dC5wcm90b3R5cGUuYWRkPXl0LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHR0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSx5dC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHR0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModHQpfSxjdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBDdH0sY3QucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0dCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZGVsZXRlKHR0KX0sY3QucHJvdG90eXBlLmdldD1mdW5jdGlvbih0dCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KHR0KX0sY3QucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0dCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHR0KX0sY3QucHJvdG90eXBlLnNldD1mdW5jdGlvbih0dCxmdCl7dmFyIGd0PXRoaXMuX19kYXRhX187aWYoZ3QgaW5zdGFuY2VvZiBDdCl7dmFyIHZ0PWd0Ll9fZGF0YV9fO2lmKCFWfHx2dC5sZW5ndGg8MTk5KXJldHVybiB2dC5wdXNoKFt0dCxmdF0pLHRoaXM7Z3Q9dGhpcy5fX2RhdGFfXz1uZXcgX3QodnQpfXJldHVybiBndC5zZXQodHQsZnQpLHRoaXN9O3ZhciBhdCxsdD0oYXQ9ZnVuY3Rpb24odHQsZnQpe3JldHVybiB0dCYmd3QodHQsZnQscGUpfSxmdW5jdGlvbih0dCxmdCl7aWYodHQ9PW51bGwpcmV0dXJuIHR0O2lmKCFJdCh0dCkpcmV0dXJuIGF0KHR0LGZ0KTtmb3IodmFyIGd0PXR0Lmxlbmd0aCx2dD0tMSxSdD1PYmplY3QodHQpOysrdnQ8Z3QmJmZ0KFJ0W3Z0XSx2dCxSdCkhPT0hMTspO3JldHVybiB0dH0pLHd0PWZ1bmN0aW9uKHR0KXtyZXR1cm4gZnVuY3Rpb24oZnQsZ3QsdnQpe2Zvcih2YXIgUnQ9LTEsU3Q9T2JqZWN0KGZ0KSxUdD12dChmdCksUXQ9VHQubGVuZ3RoO1F0LS07KXt2YXIgWHQ9VHRbKytSdF07aWYoZ3QoU3RbWHRdLFh0LFN0KT09PSExKWJyZWFrfXJldHVybiBmdH19KCk7ZnVuY3Rpb24geHQodHQsZnQpe2Zvcih2YXIgZ3Q9MCx2dD0oZnQ9enQoZnQsdHQpP1tmdF06UHQoZnQpKS5sZW5ndGg7dHQhPW51bGwmJmd0PHZ0Oyl0dD10dFtudChmdFtndCsrXSldO3JldHVybiBndCYmZ3Q9PXZ0P3R0OnZvaWQgMH1mdW5jdGlvbiBqdCh0dCxmdCl7cmV0dXJuIHR0IT1udWxsJiZmdCBpbiBPYmplY3QodHQpfWZ1bmN0aW9uIE50KHR0LGZ0LGd0LHZ0LFJ0KXtyZXR1cm4gdHQ9PT1mdHx8KHR0PT1udWxsfHxmdD09bnVsbHx8IVp0KHR0KSYmIWhlKGZ0KT90dCE9dHQmJmZ0IT1mdDpmdW5jdGlvbihTdCxUdCxRdCxYdCxZdCxGdCl7dmFyIGllPUJ0KFN0KSxzZT1CdChUdCksdWU9IltvYmplY3QgQXJyYXldIixjZT0iW29iamVjdCBBcnJheV0iO2llfHwodWU9KHVlPXRlKFN0KSk9PXM/cjp1ZSksc2V8fChjZT0oY2U9dGUoVHQpKT09cz9yOmNlKTt2YXIgbWU9dWU9PXImJiFCKFN0KSxiZT1jZT09ciYmIUIoVHQpLHZlPXVlPT1jZTtpZih2ZSYmIW1lKXJldHVybiBGdHx8KEZ0PW5ldyBjdCksaWV8fGRlKFN0KT9xdChTdCxUdCxRdCxYdCxZdCxGdCk6ZnVuY3Rpb24oYWUsZWUsX2UsTWUsTmUseWUsd2Upe3N3aXRjaChfZSl7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6aWYoYWUuYnl0ZUxlbmd0aCE9ZWUuYnl0ZUxlbmd0aHx8YWUuYnl0ZU9mZnNldCE9ZWUuYnl0ZU9mZnNldClyZXR1cm4hMTthZT1hZS5idWZmZXIsZWU9ZWUuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEoYWUuYnl0ZUxlbmd0aCE9ZWUuYnl0ZUxlbmd0aHx8IU1lKG5ldyBUKGFlKSxuZXcgVChlZSkpKTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6Y2FzZSJbb2JqZWN0IE51bWJlcl0iOnJldHVybiBBdCgrYWUsK2VlKTtjYXNlIltvYmplY3QgRXJyb3JdIjpyZXR1cm4gYWUubmFtZT09ZWUubmFtZSYmYWUubWVzc2FnZT09ZWUubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBhZT09ZWUrIiI7Y2FzZSBvOnZhciB4ZT1TO2Nhc2UgdDp2YXIgamU9MiZ5ZTtpZih4ZXx8KHhlPUMpLGFlLnNpemUhPWVlLnNpemUmJiFqZSlyZXR1cm4hMTt2YXIgUGU9d2UuZ2V0KGFlKTtpZihQZSlyZXR1cm4gUGU9PWVlO3llfD0xLHdlLnNldChhZSxlZSk7dmFyIEFlPXF0KHhlKGFlKSx4ZShlZSksTWUsTmUseWUsd2UpO3JldHVybiB3ZS5kZWxldGUoYWUpLEFlO2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZihkdClyZXR1cm4gZHQuY2FsbChhZSk9PWR0LmNhbGwoZWUpfXJldHVybiExfShTdCxUdCx1ZSxRdCxYdCxZdCxGdCk7aWYoISgyJll0KSl7dmFyIFNlPW1lJiYkLmNhbGwoU3QsIl9fd3JhcHBlZF9fIiksQ2U9YmUmJiQuY2FsbChUdCwiX193cmFwcGVkX18iKTtpZihTZXx8Q2Upe3ZhciBFZT1TZT9TdC52YWx1ZSgpOlN0LFRlPUNlP1R0LnZhbHVlKCk6VHQ7cmV0dXJuIEZ0fHwoRnQ9bmV3IGN0KSxRdChFZSxUZSxYdCxZdCxGdCl9fXJldHVybiB2ZT8oRnR8fChGdD1uZXcgY3QpLGZ1bmN0aW9uKGFlLGVlLF9lLE1lLE5lLHllKXt2YXIgd2U9MiZOZSx4ZT1wZShhZSksamU9eGUubGVuZ3RoLFBlPXBlKGVlKS5sZW5ndGg7aWYoamUhPVBlJiYhd2UpcmV0dXJuITE7Zm9yKHZhciBBZT1qZTtBZS0tOyl7dmFyIGtlPXhlW0FlXTtpZighKHdlP2tlIGluIGVlOiQuY2FsbChlZSxrZSkpKXJldHVybiExfXZhciBLZT15ZS5nZXQoYWUpO2lmKEtlJiZ5ZS5nZXQoZWUpKXJldHVybiBLZT09ZWU7dmFyIERlPSEwO3llLnNldChhZSxlZSkseWUuc2V0KGVlLGFlKTtmb3IodmFyICRlPXdlOysrQWU8amU7KXtrZT14ZVtBZV07dmFyIEJlPWFlW2tlXSxGZT1lZVtrZV07aWYoTWUpdmFyIEdlPXdlP01lKEZlLEJlLGtlLGVlLGFlLHllKTpNZShCZSxGZSxrZSxhZSxlZSx5ZSk7aWYoIShHZT09PXZvaWQgMD9CZT09PUZlfHxfZShCZSxGZSxNZSxOZSx5ZSk6R2UpKXtEZT0hMTticmVha30kZXx8KCRlPWtlPT0iY29uc3RydWN0b3IiKX1pZihEZSYmISRlKXt2YXIgTGU9YWUuY29uc3RydWN0b3IsemU9ZWUuY29uc3RydWN0b3I7TGU9PXplfHwhKCJjb25zdHJ1Y3RvciJpbiBhZSl8fCEoImNvbnN0cnVjdG9yImluIGVlKXx8dHlwZW9mIExlPT0iZnVuY3Rpb24iJiZMZSBpbnN0YW5jZW9mIExlJiZ0eXBlb2YgemU9PSJmdW5jdGlvbiImJnplIGluc3RhbmNlb2YgemV8fChEZT0hMSl9cmV0dXJuIHllLmRlbGV0ZShhZSkseWUuZGVsZXRlKGVlKSxEZX0oU3QsVHQsUXQsWHQsWXQsRnQpKTohMX0odHQsZnQsTnQsZ3QsdnQsUnQpKX1mdW5jdGlvbiBrdCh0dCl7cmV0dXJuISghWnQodHQpfHxmdW5jdGlvbihmdCl7cmV0dXJuISFSJiZSIGluIGZ0fSh0dCkpJiYoSHQodHQpfHxCKHR0KT9qOmMpLnRlc3QodXQodHQpKX1mdW5jdGlvbiBLdCh0dCl7cmV0dXJuIHR5cGVvZiB0dD09ImZ1bmN0aW9uIj90dDp0dD09bnVsbD9nZTp0eXBlb2YgdHQ9PSJvYmplY3QiP0J0KHR0KT9mdW5jdGlvbih2dCxSdCl7cmV0dXJuIHp0KHZ0KSYmcmUoUnQpP2xlKG50KHZ0KSxSdCk6ZnVuY3Rpb24oU3Qpe3ZhciBUdD1mdW5jdGlvbihRdCxYdCxZdCl7dmFyIEZ0PVF0PT1udWxsP3ZvaWQgMDp4dChRdCxYdCk7cmV0dXJuIEZ0PT09dm9pZCAwP1l0OkZ0fShTdCx2dCk7cmV0dXJuIFR0PT09dm9pZCAwJiZUdD09PVJ0P2Z1bmN0aW9uKFF0LFh0KXtyZXR1cm4gUXQhPW51bGwmJmZ1bmN0aW9uKFl0LEZ0LGllKXtGdD16dChGdCxZdCk/W0Z0XTpQdChGdCk7Zm9yKHZhciBzZSx1ZT0tMSxjZT1GdC5sZW5ndGg7Kyt1ZTxjZTspe3ZhciBtZT1udChGdFt1ZV0pO2lmKCEoc2U9WXQhPW51bGwmJmllKFl0LG1lKSkpYnJlYWs7WXQ9WXRbbWVdfXJldHVybiBzZXx8ISEoY2U9WXQ/WXQubGVuZ3RoOjApJiYkdChjZSkmJm9lKG1lLGNlKSYmKEJ0KFl0KXx8VXQoWXQpKX0oUXQsWHQsanQpfShTdCx2dCk6TnQoUnQsVHQsdm9pZCAwLDMpfX0odHRbMF0sdHRbMV0pOmZ1bmN0aW9uKHZ0KXt2YXIgUnQ9ZnVuY3Rpb24oU3Qpe2Zvcih2YXIgVHQ9cGUoU3QpLFF0PVR0Lmxlbmd0aDtRdC0tOyl7dmFyIFh0PVR0W1F0XSxZdD1TdFtYdF07VHRbUXRdPVtYdCxZdCxyZShZdCldfXJldHVybiBUdH0odnQpO3JldHVybiBSdC5sZW5ndGg9PTEmJlJ0WzBdWzJdP2xlKFJ0WzBdWzBdLFJ0WzBdWzFdKTpmdW5jdGlvbihTdCl7cmV0dXJuIFN0PT09dnR8fGZ1bmN0aW9uKFR0LFF0LFh0LFl0KXt2YXIgRnQ9WHQubGVuZ3RoLGllPUZ0O2lmKFR0PT1udWxsKXJldHVybiFpZTtmb3IoVHQ9T2JqZWN0KFR0KTtGdC0tOyl7dmFyIHNlPVh0W0Z0XTtpZihzZVsyXT9zZVsxXSE9PVR0W3NlWzBdXTohKHNlWzBdaW4gVHQpKXJldHVybiExfWZvcig7KytGdDxpZTspe3ZhciB1ZT0oc2U9WHRbRnRdKVswXSxjZT1UdFt1ZV0sbWU9c2VbMV07aWYoc2VbMl0pe2lmKGNlPT09dm9pZCAwJiYhKHVlIGluIFR0KSlyZXR1cm4hMX1lbHNle3ZhciBiZT1uZXcgY3QsdmU7aWYoISh2ZT09PXZvaWQgMD9OdChtZSxjZSxZdCwzLGJlKTp2ZSkpcmV0dXJuITF9fXJldHVybiEwfShTdCx2dCxSdCl9fSh0dCk6enQoZnQ9dHQpPyhndD1udChmdCksZnVuY3Rpb24odnQpe3JldHVybiB2dD8uW2d0XX0pOmZ1bmN0aW9uKHZ0KXtyZXR1cm4gZnVuY3Rpb24oUnQpe3JldHVybiB4dChSdCx2dCl9fShmdCk7dmFyIGZ0LGd0fWZ1bmN0aW9uIFd0KHR0KXtpZihndD0oZnQ9dHQpJiZmdC5jb25zdHJ1Y3Rvcix2dD10eXBlb2YgZ3Q9PSJmdW5jdGlvbiImJmd0LnByb3RvdHlwZXx8TSxmdCE9PXZ0KXJldHVybiBIKHR0KTt2YXIgZnQsZ3QsdnQsUnQ9W107Zm9yKHZhciBTdCBpbiBPYmplY3QodHQpKSQuY2FsbCh0dCxTdCkmJlN0IT0iY29uc3RydWN0b3IiJiZSdC5wdXNoKFN0KTtyZXR1cm4gUnR9ZnVuY3Rpb24gUHQodHQpe3JldHVybiBCdCh0dCk/dHQ6VnQodHQpfWZ1bmN0aW9uIHF0KHR0LGZ0LGd0LHZ0LFJ0LFN0KXt2YXIgVHQ9MiZSdCxRdD10dC5sZW5ndGgsWHQ9ZnQubGVuZ3RoO2lmKFF0IT1YdCYmIShUdCYmWHQ+UXQpKXJldHVybiExO3ZhciBZdD1TdC5nZXQodHQpO2lmKFl0JiZTdC5nZXQoZnQpKXJldHVybiBZdD09ZnQ7dmFyIEZ0PS0xLGllPSEwLHNlPTEmUnQ/bmV3IHl0OnZvaWQgMDtmb3IoU3Quc2V0KHR0LGZ0KSxTdC5zZXQoZnQsdHQpOysrRnQ8UXQ7KXt2YXIgdWU9dHRbRnRdLGNlPWZ0W0Z0XTtpZih2dCl2YXIgbWU9VHQ/dnQoY2UsdWUsRnQsZnQsdHQsU3QpOnZ0KHVlLGNlLEZ0LHR0LGZ0LFN0KTtpZihtZSE9PXZvaWQgMCl7aWYobWUpY29udGludWU7aWU9ITE7YnJlYWt9aWYoc2Upe2lmKCFVKGZ0LGZ1bmN0aW9uKGJlLHZlKXtpZighc2UuaGFzKHZlKSYmKHVlPT09YmV8fGd0KHVlLGJlLHZ0LFJ0LFN0KSkpcmV0dXJuIHNlLmFkZCh2ZSl9KSl7aWU9ITE7YnJlYWt9fWVsc2UgaWYodWUhPT1jZSYmIWd0KHVlLGNlLHZ0LFJ0LFN0KSl7aWU9ITE7YnJlYWt9fXJldHVybiBTdC5kZWxldGUodHQpLFN0LmRlbGV0ZShmdCksaWV9ZnVuY3Rpb24gR3QodHQsZnQpe3ZhciBndCx2dCxSdD10dC5fX2RhdGFfXztyZXR1cm4oKHZ0PXR5cGVvZihndD1mdCkpPT0ic3RyaW5nInx8dnQ9PSJudW1iZXIifHx2dD09InN5bWJvbCJ8fHZ0PT0iYm9vbGVhbiI/Z3QhPT0iX19wcm90b19fIjpndD09PW51bGwpP1J0W3R5cGVvZiBmdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpSdC5tYXB9ZnVuY3Rpb24gTHQodHQsZnQpe3ZhciBndD1mdW5jdGlvbih2dCxSdCl7cmV0dXJuIHZ0Py5bUnRdfSh0dCxmdCk7cmV0dXJuIGt0KGd0KT9ndDp2b2lkIDB9dmFyIHRlPWZ1bmN0aW9uKHR0KXtyZXR1cm4gWC5jYWxsKHR0KX07ZnVuY3Rpb24gb2UodHQsZnQpe3JldHVybiEhKGZ0PWZ0Pz85MDA3MTk5MjU0NzQwOTkxKSYmKHR5cGVvZiB0dD09Im51bWJlciJ8fHUudGVzdCh0dCkpJiZ0dD4tMSYmdHQlMT09MCYmdHQ8ZnR9ZnVuY3Rpb24genQodHQsZnQpe2lmKEJ0KHR0KSlyZXR1cm4hMTt2YXIgZ3Q9dHlwZW9mIHR0O3JldHVybiEoZ3QhPSJudW1iZXIiJiZndCE9InN5bWJvbCImJmd0IT0iYm9vbGVhbiImJnR0IT1udWxsJiYhZmUodHQpKXx8bC50ZXN0KHR0KXx8IWUudGVzdCh0dCl8fGZ0IT1udWxsJiZ0dCBpbiBPYmplY3QoZnQpfWZ1bmN0aW9uIHJlKHR0KXtyZXR1cm4gdHQ9PXR0JiYhWnQodHQpfWZ1bmN0aW9uIGxlKHR0LGZ0KXtyZXR1cm4gZnVuY3Rpb24oZ3Qpe3JldHVybiBndCE9bnVsbCYmZ3RbdHRdPT09ZnQmJihmdCE9PXZvaWQgMHx8dHQgaW4gT2JqZWN0KGd0KSl9fShaJiZ0ZShuZXcgWihuZXcgQXJyYXlCdWZmZXIoMSkpKSE9IltvYmplY3QgRGF0YVZpZXddInx8ViYmdGUobmV3IFYpIT1vfHxLJiZ0ZShLLnJlc29sdmUoKSkhPSJbb2JqZWN0IFByb21pc2VdInx8WSYmdGUobmV3IFkpIT10fHxKJiZ0ZShuZXcgSikhPSJbb2JqZWN0IFdlYWtNYXBdIikmJih0ZT1mdW5jdGlvbih0dCl7dmFyIGZ0PVguY2FsbCh0dCksZ3Q9ZnQ9PXI/dHQuY29uc3RydWN0b3I6dm9pZCAwLHZ0PWd0P3V0KGd0KTp2b2lkIDA7aWYodnQpc3dpdGNoKHZ0KXtjYXNlIEc6cmV0dXJuIltvYmplY3QgRGF0YVZpZXddIjtjYXNlIFE6cmV0dXJuIG87Y2FzZSBydDpyZXR1cm4iW29iamVjdCBQcm9taXNlXSI7Y2FzZSBzdDpyZXR1cm4gdDtjYXNlIG90OnJldHVybiJbb2JqZWN0IFdlYWtNYXBdIn1yZXR1cm4gZnR9KTt2YXIgVnQ9RHQoZnVuY3Rpb24odHQpe3ZhciBmdDt0dD0oZnQ9dHQpPT1udWxsPyIiOmZ1bmN0aW9uKHZ0KXtpZih0eXBlb2YgdnQ9PSJzdHJpbmciKXJldHVybiB2dDtpZihmZSh2dCkpcmV0dXJuIG10P210LmNhbGwodnQpOiIiO3ZhciBSdD12dCsiIjtyZXR1cm4gUnQ9PSIwIiYmMS92dD09LTEvMD8iLTAiOlJ0fShmdCk7dmFyIGd0PVtdO3JldHVybiBuLnRlc3QodHQpJiZndC5wdXNoKCIiKSx0dC5yZXBsYWNlKGksZnVuY3Rpb24odnQsUnQsU3QsVHQpe2d0LnB1c2goU3Q/VHQucmVwbGFjZShmLCIkMSIpOlJ0fHx2dCl9KSxndH0pO2Z1bmN0aW9uIG50KHR0KXtpZih0eXBlb2YgdHQ9PSJzdHJpbmcifHxmZSh0dCkpcmV0dXJuIHR0O3ZhciBmdD10dCsiIjtyZXR1cm4gZnQ9PSIwIiYmMS90dD09LTEvMD8iLTAiOmZ0fWZ1bmN0aW9uIHV0KHR0KXtpZih0dCE9bnVsbCl7dHJ5e3JldHVybiB6LmNhbGwodHQpfWNhdGNoe310cnl7cmV0dXJuIHR0KyIifWNhdGNoe319cmV0dXJuIiJ9dmFyIGJ0LEV0PShidD1mdW5jdGlvbih0dCxmdCxndCl7JC5jYWxsKHR0LGd0KT90dFtndF0ucHVzaChmdCk6dHRbZ3RdPVtmdF19LGZ1bmN0aW9uKHR0LGZ0KXt2YXIgZ3Q9QnQodHQpP0Y6cHQsdnQ9e307cmV0dXJuIGd0KHR0LGJ0LEt0KGZ0KSx2dCl9KTtmdW5jdGlvbiBEdCh0dCxmdCl7aWYodHlwZW9mIHR0IT0iZnVuY3Rpb24ifHxmdCYmdHlwZW9mIGZ0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgZ3Q9ZnVuY3Rpb24oKXt2YXIgdnQ9YXJndW1lbnRzLFJ0PWZ0P2Z0LmFwcGx5KHRoaXMsdnQpOnZ0WzBdLFN0PWd0LmNhY2hlO2lmKFN0LmhhcyhSdCkpcmV0dXJuIFN0LmdldChSdCk7dmFyIFR0PXR0LmFwcGx5KHRoaXMsdnQpO3JldHVybiBndC5jYWNoZT1TdC5zZXQoUnQsVHQpLFR0fTtyZXR1cm4gZ3QuY2FjaGU9bmV3KER0LkNhY2hlfHxfdCksZ3R9ZnVuY3Rpb24gQXQodHQsZnQpe3JldHVybiB0dD09PWZ0fHx0dCE9dHQmJmZ0IT1mdH1mdW5jdGlvbiBVdCh0dCl7cmV0dXJuIGZ1bmN0aW9uKGZ0KXtyZXR1cm4gaGUoZnQpJiZJdChmdCl9KHR0KSYmJC5jYWxsKHR0LCJjYWxsZWUiKSYmKCF4LmNhbGwodHQsImNhbGxlZSIpfHxYLmNhbGwodHQpPT1zKX1EdC5DYWNoZT1fdDt2YXIgQnQ9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBJdCh0dCl7cmV0dXJuIHR0IT1udWxsJiYkdCh0dC5sZW5ndGgpJiYhSHQodHQpfWZ1bmN0aW9uIEh0KHR0KXt2YXIgZnQ9WnQodHQpP1guY2FsbCh0dCk6IiI7cmV0dXJuIGZ0PT0iW29iamVjdCBGdW5jdGlvbl0ifHxmdD09IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIn1mdW5jdGlvbiAkdCh0dCl7cmV0dXJuIHR5cGVvZiB0dD09Im51bWJlciImJnR0Pi0xJiZ0dCUxPT0wJiZ0dDw9OTAwNzE5OTI1NDc0MDk5MX1mdW5jdGlvbiBadCh0dCl7dmFyIGZ0PXR5cGVvZiB0dDtyZXR1cm4hIXR0JiYoZnQ9PSJvYmplY3QifHxmdD09ImZ1bmN0aW9uIil9ZnVuY3Rpb24gaGUodHQpe3JldHVybiEhdHQmJnR5cGVvZiB0dD09Im9iamVjdCJ9ZnVuY3Rpb24gZmUodHQpe3JldHVybiB0eXBlb2YgdHQ9PSJzeW1ib2wifHxoZSh0dCkmJlguY2FsbCh0dCk9PSJbb2JqZWN0IFN5bWJvbF0ifXZhciBkZT1EP2Z1bmN0aW9uKHR0KXtyZXR1cm4gZnVuY3Rpb24oZnQpe3JldHVybiB0dChmdCl9fShEKTpmdW5jdGlvbih0dCl7cmV0dXJuIGhlKHR0KSYmJHQodHQubGVuZ3RoKSYmISFkW1guY2FsbCh0dCldfTtmdW5jdGlvbiBwZSh0dCl7cmV0dXJuIEl0KHR0KT9ldCh0dCk6V3QodHQpfWZ1bmN0aW9uIGdlKHR0KXtyZXR1cm4gdHR9RS5leHBvcnRzPUV0fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0eXBlb2YgSnQ8InUiP0p0OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0NDQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO0UuZXhwb3J0cz1mdW5jdGlvbihzKXtyZXR1cm4gcz09PSEwfHxzPT09ITF8fGZ1bmN0aW9uKG8pe3JldHVybiEhbyYmdHlwZW9mIG89PSJvYmplY3QifShzKSYmbS5jYWxsKHMpPT0iW29iamVjdCBCb29sZWFuXSJ9fSx7fV0sNDQ1OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe3ZhciBzPSJbb2JqZWN0IEFyZ3VtZW50c10iLG89IltvYmplY3QgTWFwXSIscj0iW29iamVjdCBPYmplY3RdIix0PSJbb2JqZWN0IFNldF0iLGU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sbD0vXig/OjB8WzEtOV1cZCopJC8sbj17fTtuWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1uWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1uWyJbb2JqZWN0IEludDhBcnJheV0iXT1uWyJbb2JqZWN0IEludDE2QXJyYXldIl09blsiW29iamVjdCBJbnQzMkFycmF5XSJdPW5bIltvYmplY3QgVWludDhBcnJheV0iXT1uWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPW5bIltvYmplY3QgVWludDE2QXJyYXldIl09blsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxuW3NdPW5bIltvYmplY3QgQXJyYXldIl09blsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1uWyJbb2JqZWN0IEJvb2xlYW5dIl09blsiW29iamVjdCBEYXRhVmlld10iXT1uWyJbb2JqZWN0IERhdGVdIl09blsiW29iamVjdCBFcnJvcl0iXT1uWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW5bb109blsiW29iamVjdCBOdW1iZXJdIl09bltyXT1uWyJbb2JqZWN0IFJlZ0V4cF0iXT1uW3RdPW5bIltvYmplY3QgU3RyaW5nXSJdPW5bIltvYmplY3QgV2Vha01hcF0iXT0hMTt2YXIgaT10eXBlb2YgbT09Im9iamVjdCImJm0mJm0uT2JqZWN0PT09T2JqZWN0JiZtLGY9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixjPWl8fGZ8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksdT10eXBlb2Ygaz09Im9iamVjdCImJmsmJiFrLm5vZGVUeXBlJiZrLGQ9dSYmdHlwZW9mIEU9PSJvYmplY3QiJiZFJiYhRS5ub2RlVHlwZSYmRSxoPWQmJmQuZXhwb3J0cz09PXUsdz1oJiZpLnByb2Nlc3MsXz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gdyYmdy5iaW5kaW5nJiZ3LmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpLEE9XyYmXy5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gUChudCx1dCl7Zm9yKHZhciBidD0tMSxFdD1udD09bnVsbD8wOm50Lmxlbmd0aDsrK2J0PEV0OylpZih1dChudFtidF0sYnQsbnQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEwobnQpe3ZhciB1dD0tMSxidD1BcnJheShudC5zaXplKTtyZXR1cm4gbnQuZm9yRWFjaChmdW5jdGlvbihFdCxEdCl7YnRbKyt1dF09W0R0LEV0XX0pLGJ0fWZ1bmN0aW9uIE4obnQpe3ZhciB1dD0tMSxidD1BcnJheShudC5zaXplKTtyZXR1cm4gbnQuZm9yRWFjaChmdW5jdGlvbihFdCl7YnRbKyt1dF09RXR9KSxidH12YXIgRCxGLFUsQj1BcnJheS5wcm90b3R5cGUsUz1GdW5jdGlvbi5wcm90b3R5cGUsQz1PYmplY3QucHJvdG90eXBlLHY9Y1siX19jb3JlLWpzX3NoYXJlZF9fIl0scD1TLnRvU3RyaW5nLGI9Qy5oYXNPd25Qcm9wZXJ0eSxnPShEPS9bXi5dKyQvLmV4ZWModiYmdi5rZXlzJiZ2LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitEOiIiLHk9Qy50b1N0cmluZyxNPVJlZ0V4cCgiXiIrcC5jYWxsKGIpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLE89aD9jLkJ1ZmZlcjp2b2lkIDAsUj1jLlN5bWJvbCx6PWMuVWludDhBcnJheSwkPUMucHJvcGVydHlJc0VudW1lcmFibGUsWD1CLnNwbGljZSxqPVI/Ui50b1N0cmluZ1RhZzp2b2lkIDAsVz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFQ9Tz9PLmlzQnVmZmVyOnZvaWQgMCx4PShGPU9iamVjdC5rZXlzLFU9T2JqZWN0LGZ1bmN0aW9uKG50KXtyZXR1cm4gRihVKG50KSl9KSxJPWp0KGMsIkRhdGFWaWV3IiksSD1qdChjLCJNYXAiKSxaPWp0KGMsIlByb21pc2UiKSxWPWp0KGMsIlNldCIpLEs9anQoYywiV2Vha01hcCIpLFk9anQoT2JqZWN0LCJjcmVhdGUiKSxKPVd0KEkpLHE9V3QoSCksRz1XdChaKSxRPVd0KFYpLHJ0PVd0KEspLHN0PVI/Ui5wcm90b3R5cGU6dm9pZCAwLG90PXN0P3N0LnZhbHVlT2Y6dm9pZCAwO2Z1bmN0aW9uIGh0KG50KXt2YXIgdXQ9LTEsYnQ9bnQ9PW51bGw/MDpudC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3V0PGJ0Oyl7dmFyIEV0PW50W3V0XTt0aGlzLnNldChFdFswXSxFdFsxXSl9fWZ1bmN0aW9uIGR0KG50KXt2YXIgdXQ9LTEsYnQ9bnQ9PW51bGw/MDpudC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3V0PGJ0Oyl7dmFyIEV0PW50W3V0XTt0aGlzLnNldChFdFswXSxFdFsxXSl9fWZ1bmN0aW9uIG10KG50KXt2YXIgdXQ9LTEsYnQ9bnQ9PW51bGw/MDpudC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3V0PGJ0Oyl7dmFyIEV0PW50W3V0XTt0aGlzLnNldChFdFswXSxFdFsxXSl9fWZ1bmN0aW9uIE10KG50KXt2YXIgdXQ9LTEsYnQ9bnQ9PW51bGw/MDpudC5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IG10OysrdXQ8YnQ7KXRoaXMuYWRkKG50W3V0XSl9ZnVuY3Rpb24gQ3QobnQpe3ZhciB1dD10aGlzLl9fZGF0YV9fPW5ldyBkdChudCk7dGhpcy5zaXplPXV0LnNpemV9ZnVuY3Rpb24gX3QobnQsdXQpe3ZhciBidD1HdChudCksRXQ9IWJ0JiZxdChudCksRHQ9IWJ0JiYhRXQmJkx0KG50KSxBdD0hYnQmJiFFdCYmIUR0JiZsZShudCksVXQ9YnR8fEV0fHxEdHx8QXQsQnQ9VXQ/ZnVuY3Rpb24oJHQsWnQpe2Zvcih2YXIgaGU9LTEsZmU9QXJyYXkoJHQpOysraGU8JHQ7KWZlW2hlXT1adChoZSk7cmV0dXJuIGZlfShudC5sZW5ndGgsU3RyaW5nKTpbXSxJdD1CdC5sZW5ndGg7Zm9yKHZhciBIdCBpbiBudCkhYi5jYWxsKG50LEh0KXx8VXQmJihIdD09Imxlbmd0aCJ8fER0JiYoSHQ9PSJvZmZzZXQifHxIdD09InBhcmVudCIpfHxBdCYmKEh0PT0iYnVmZmVyInx8SHQ9PSJieXRlTGVuZ3RoInx8SHQ9PSJieXRlT2Zmc2V0Iil8fEt0KEh0LEl0KSl8fEJ0LnB1c2goSHQpO3JldHVybiBCdH1mdW5jdGlvbiB5dChudCx1dCl7Zm9yKHZhciBidD1udC5sZW5ndGg7YnQtLTspaWYoUHQobnRbYnRdWzBdLHV0KSlyZXR1cm4gYnQ7cmV0dXJuLTF9ZnVuY3Rpb24gY3QobnQpe3JldHVybiBudD09bnVsbD9udD09PXZvaWQgMD8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6aiYmaiBpbiBPYmplY3QobnQpP2Z1bmN0aW9uKHV0KXt2YXIgYnQ9Yi5jYWxsKHV0LGopLEV0PXV0W2pdO3RyeXt1dFtqXT12b2lkIDA7dmFyIER0PSEwfWNhdGNoe312YXIgQXQ9eS5jYWxsKHV0KTtyZXR1cm4gRHQmJihidD91dFtqXT1FdDpkZWxldGUgdXRbal0pLEF0fShudCk6ZnVuY3Rpb24odXQpe3JldHVybiB5LmNhbGwodXQpfShudCl9ZnVuY3Rpb24gZXQobnQpe3JldHVybiByZShudCkmJmN0KG50KT09c31mdW5jdGlvbiBpdChudCx1dCxidCxFdCxEdCl7cmV0dXJuIG50PT09dXR8fChudD09bnVsbHx8dXQ9PW51bGx8fCFyZShudCkmJiFyZSh1dCk/bnQhPW50JiZ1dCE9dXQ6ZnVuY3Rpb24oQXQsVXQsQnQsSXQsSHQsJHQpe3ZhciBadD1HdChBdCksaGU9R3QoVXQpLGZlPVp0PyJbb2JqZWN0IEFycmF5XSI6a3QoQXQpLGRlPWhlPyJbb2JqZWN0IEFycmF5XSI6a3QoVXQpLHBlPShmZT1mZT09cz9yOmZlKT09cixnZT0oZGU9ZGU9PXM/cjpkZSk9PXIsdHQ9ZmU9PWRlO2lmKHR0JiZMdChBdCkpe2lmKCFMdChVdCkpcmV0dXJuITE7WnQ9ITAscGU9ITF9aWYodHQmJiFwZSlyZXR1cm4gJHR8fCgkdD1uZXcgQ3QpLFp0fHxsZShBdCk/bHQoQXQsVXQsQnQsSXQsSHQsJHQpOmZ1bmN0aW9uKFN0LFR0LFF0LFh0LFl0LEZ0LGllKXtzd2l0Y2goUXQpe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKFN0LmJ5dGVMZW5ndGghPVR0LmJ5dGVMZW5ndGh8fFN0LmJ5dGVPZmZzZXQhPVR0LmJ5dGVPZmZzZXQpcmV0dXJuITE7U3Q9U3QuYnVmZmVyLFR0PVR0LmJ1ZmZlcjtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4hKFN0LmJ5dGVMZW5ndGghPVR0LmJ5dGVMZW5ndGh8fCFGdChuZXcgeihTdCksbmV3IHooVHQpKSk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gUHQoK1N0LCtUdCk7Y2FzZSJbb2JqZWN0IEVycm9yXSI6cmV0dXJuIFN0Lm5hbWU9PVR0Lm5hbWUmJlN0Lm1lc3NhZ2U9PVR0Lm1lc3NhZ2U7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gU3Q9PVR0KyIiO2Nhc2Ugbzp2YXIgc2U9TDtjYXNlIHQ6dmFyIHVlPTEmWHQ7aWYoc2V8fChzZT1OKSxTdC5zaXplIT1UdC5zaXplJiYhdWUpcmV0dXJuITE7dmFyIGNlPWllLmdldChTdCk7aWYoY2UpcmV0dXJuIGNlPT1UdDtYdHw9MixpZS5zZXQoU3QsVHQpO3ZhciBtZT1sdChzZShTdCksc2UoVHQpLFh0LFl0LEZ0LGllKTtyZXR1cm4gaWUuZGVsZXRlKFN0KSxtZTtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYob3QpcmV0dXJuIG90LmNhbGwoU3QpPT1vdC5jYWxsKFR0KX1yZXR1cm4hMX0oQXQsVXQsZmUsQnQsSXQsSHQsJHQpO2lmKCEoMSZCdCkpe3ZhciBmdD1wZSYmYi5jYWxsKEF0LCJfX3dyYXBwZWRfXyIpLGd0PWdlJiZiLmNhbGwoVXQsIl9fd3JhcHBlZF9fIik7aWYoZnR8fGd0KXt2YXIgdnQ9ZnQ/QXQudmFsdWUoKTpBdCxSdD1ndD9VdC52YWx1ZSgpOlV0O3JldHVybiAkdHx8KCR0PW5ldyBDdCksSHQodnQsUnQsQnQsSXQsJHQpfX1yZXR1cm4gdHQ/KCR0fHwoJHQ9bmV3IEN0KSxmdW5jdGlvbihTdCxUdCxRdCxYdCxZdCxGdCl7dmFyIGllPTEmUXQsc2U9d3QoU3QpLHVlPXNlLmxlbmd0aCxjZT13dChUdCkubGVuZ3RoO2lmKHVlIT1jZSYmIWllKXJldHVybiExO2Zvcih2YXIgbWU9dWU7bWUtLTspe3ZhciBiZT1zZVttZV07aWYoIShpZT9iZSBpbiBUdDpiLmNhbGwoVHQsYmUpKSlyZXR1cm4hMX12YXIgdmU9RnQuZ2V0KFN0KTtpZih2ZSYmRnQuZ2V0KFR0KSlyZXR1cm4gdmU9PVR0O3ZhciBTZT0hMDtGdC5zZXQoU3QsVHQpLEZ0LnNldChUdCxTdCk7Zm9yKHZhciBDZT1pZTsrK21lPHVlOyl7YmU9c2VbbWVdO3ZhciBFZT1TdFtiZV0sVGU9VHRbYmVdO2lmKFh0KXZhciBhZT1pZT9YdChUZSxFZSxiZSxUdCxTdCxGdCk6WHQoRWUsVGUsYmUsU3QsVHQsRnQpO2lmKCEoYWU9PT12b2lkIDA/RWU9PT1UZXx8WXQoRWUsVGUsUXQsWHQsRnQpOmFlKSl7U2U9ITE7YnJlYWt9Q2V8fChDZT1iZT09ImNvbnN0cnVjdG9yIil9aWYoU2UmJiFDZSl7dmFyIGVlPVN0LmNvbnN0cnVjdG9yLF9lPVR0LmNvbnN0cnVjdG9yO2VlPT1fZXx8ISgiY29uc3RydWN0b3IiaW4gU3QpfHwhKCJjb25zdHJ1Y3RvciJpbiBUdCl8fHR5cGVvZiBlZT09ImZ1bmN0aW9uIiYmZWUgaW5zdGFuY2VvZiBlZSYmdHlwZW9mIF9lPT0iZnVuY3Rpb24iJiZfZSBpbnN0YW5jZW9mIF9lfHwoU2U9ITEpfXJldHVybiBGdC5kZWxldGUoU3QpLEZ0LmRlbGV0ZShUdCksU2V9KEF0LFV0LEJ0LEl0LEh0LCR0KSk6ITF9KG50LHV0LGJ0LEV0LGl0LER0KSl9ZnVuY3Rpb24gcHQobnQpe3JldHVybiEoIXp0KG50KXx8ZnVuY3Rpb24odXQpe3JldHVybiEhZyYmZyBpbiB1dH0obnQpKSYmKHRlKG50KT9NOmUpLnRlc3QoV3QobnQpKX1mdW5jdGlvbiBhdChudCl7aWYoYnQ9KHV0PW50KSYmdXQuY29uc3RydWN0b3IsRXQ9dHlwZW9mIGJ0PT0iZnVuY3Rpb24iJiZidC5wcm90b3R5cGV8fEMsdXQhPT1FdClyZXR1cm4geChudCk7dmFyIHV0LGJ0LEV0LER0PVtdO2Zvcih2YXIgQXQgaW4gT2JqZWN0KG50KSliLmNhbGwobnQsQXQpJiZBdCE9ImNvbnN0cnVjdG9yIiYmRHQucHVzaChBdCk7cmV0dXJuIER0fWZ1bmN0aW9uIGx0KG50LHV0LGJ0LEV0LER0LEF0KXt2YXIgVXQ9MSZidCxCdD1udC5sZW5ndGgsSXQ9dXQubGVuZ3RoO2lmKEJ0IT1JdCYmIShVdCYmSXQ+QnQpKXJldHVybiExO3ZhciBIdD1BdC5nZXQobnQpO2lmKEh0JiZBdC5nZXQodXQpKXJldHVybiBIdD09dXQ7dmFyICR0PS0xLFp0PSEwLGhlPTImYnQ/bmV3IE10OnZvaWQgMDtmb3IoQXQuc2V0KG50LHV0KSxBdC5zZXQodXQsbnQpOysrJHQ8QnQ7KXt2YXIgZmU9bnRbJHRdLGRlPXV0WyR0XTtpZihFdCl2YXIgcGU9VXQ/RXQoZGUsZmUsJHQsdXQsbnQsQXQpOkV0KGZlLGRlLCR0LG50LHV0LEF0KTtpZihwZSE9PXZvaWQgMCl7aWYocGUpY29udGludWU7WnQ9ITE7YnJlYWt9aWYoaGUpe2lmKCFQKHV0LGZ1bmN0aW9uKGdlLHR0KXtpZihmdD10dCwhaGUuaGFzKGZ0KSYmKGZlPT09Z2V8fER0KGZlLGdlLGJ0LEV0LEF0KSkpcmV0dXJuIGhlLnB1c2godHQpO3ZhciBmdH0pKXtadD0hMTticmVha319ZWxzZSBpZihmZSE9PWRlJiYhRHQoZmUsZGUsYnQsRXQsQXQpKXtadD0hMTticmVha319cmV0dXJuIEF0LmRlbGV0ZShudCksQXQuZGVsZXRlKHV0KSxadH1mdW5jdGlvbiB3dChudCl7cmV0dXJuIGZ1bmN0aW9uKHV0LGJ0LEV0KXt2YXIgRHQ9YnQodXQpO3JldHVybiBHdCh1dCk/RHQ6ZnVuY3Rpb24oQXQsVXQpe2Zvcih2YXIgQnQ9LTEsSXQ9VXQubGVuZ3RoLEh0PUF0Lmxlbmd0aDsrK0J0PEl0OylBdFtIdCtCdF09VXRbQnRdO3JldHVybiBBdH0oRHQsRXQodXQpKX0obnQsVnQsTnQpfWZ1bmN0aW9uIHh0KG50LHV0KXt2YXIgYnQsRXQsRHQ9bnQuX19kYXRhX187cmV0dXJuKChFdD10eXBlb2YoYnQ9dXQpKT09InN0cmluZyJ8fEV0PT0ibnVtYmVyInx8RXQ9PSJzeW1ib2wifHxFdD09ImJvb2xlYW4iP2J0IT09Il9fcHJvdG9fXyI6YnQ9PT1udWxsKT9EdFt0eXBlb2YgdXQ9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06RHQubWFwfWZ1bmN0aW9uIGp0KG50LHV0KXt2YXIgYnQ9ZnVuY3Rpb24oRXQsRHQpe3JldHVybiBFdD8uW0R0XX0obnQsdXQpO3JldHVybiBwdChidCk/YnQ6dm9pZCAwfWh0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189WT9ZKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxodC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKG50KXt2YXIgdXQ9dGhpcy5oYXMobnQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tudF07cmV0dXJuIHRoaXMuc2l6ZS09dXQ/MTowLHV0fSxodC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG50KXt2YXIgdXQ9dGhpcy5fX2RhdGFfXztpZihZKXt2YXIgYnQ9dXRbbnRdO3JldHVybiBidD09PSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj92b2lkIDA6YnR9cmV0dXJuIGIuY2FsbCh1dCxudCk/dXRbbnRdOnZvaWQgMH0saHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihudCl7dmFyIHV0PXRoaXMuX19kYXRhX187cmV0dXJuIFk/dXRbbnRdIT09dm9pZCAwOmIuY2FsbCh1dCxudCl9LGh0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24obnQsdXQpe3ZhciBidD10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKG50KT8wOjEsYnRbbnRdPVkmJnV0PT09dm9pZCAwPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjp1dCx0aGlzfSxkdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxkdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKG50KXt2YXIgdXQ9dGhpcy5fX2RhdGFfXyxidD15dCh1dCxudCk7cmV0dXJuIShidDwwKSYmKGJ0PT11dC5sZW5ndGgtMT91dC5wb3AoKTpYLmNhbGwodXQsYnQsMSksLS10aGlzLnNpemUsITApfSxkdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG50KXt2YXIgdXQ9dGhpcy5fX2RhdGFfXyxidD15dCh1dCxudCk7cmV0dXJuIGJ0PDA/dm9pZCAwOnV0W2J0XVsxXX0sZHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihudCl7cmV0dXJuIHl0KHRoaXMuX19kYXRhX18sbnQpPi0xfSxkdC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKG50LHV0KXt2YXIgYnQ9dGhpcy5fX2RhdGFfXyxFdD15dChidCxudCk7cmV0dXJuIEV0PDA/KCsrdGhpcy5zaXplLGJ0LnB1c2goW250LHV0XSkpOmJ0W0V0XVsxXT11dCx0aGlzfSxtdC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBodCxtYXA6bmV3KEh8fGR0KSxzdHJpbmc6bmV3IGh0fX0sbXQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihudCl7dmFyIHV0PXh0KHRoaXMsbnQpLmRlbGV0ZShudCk7cmV0dXJuIHRoaXMuc2l6ZS09dXQ/MTowLHV0fSxtdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKG50KXtyZXR1cm4geHQodGhpcyxudCkuZ2V0KG50KX0sbXQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihudCl7cmV0dXJuIHh0KHRoaXMsbnQpLmhhcyhudCl9LG10LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24obnQsdXQpe3ZhciBidD14dCh0aGlzLG50KSxFdD1idC5zaXplO3JldHVybiBidC5zZXQobnQsdXQpLHRoaXMuc2l6ZSs9YnQuc2l6ZT09RXQ/MDoxLHRoaXN9LE10LnByb3RvdHlwZS5hZGQ9TXQucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24obnQpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChudCwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9LE10LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24obnQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhudCl9LEN0LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IGR0LHRoaXMuc2l6ZT0wfSxDdC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKG50KXt2YXIgdXQ9dGhpcy5fX2RhdGFfXyxidD11dC5kZWxldGUobnQpO3JldHVybiB0aGlzLnNpemU9dXQuc2l6ZSxidH0sQ3QucHJvdG90eXBlLmdldD1mdW5jdGlvbihudCl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KG50KX0sQ3QucHJvdG90eXBlLmhhcz1mdW5jdGlvbihudCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG50KX0sQ3QucHJvdG90eXBlLnNldD1mdW5jdGlvbihudCx1dCl7dmFyIGJ0PXRoaXMuX19kYXRhX187aWYoYnQgaW5zdGFuY2VvZiBkdCl7dmFyIEV0PWJ0Ll9fZGF0YV9fO2lmKCFIfHxFdC5sZW5ndGg8MTk5KXJldHVybiBFdC5wdXNoKFtudCx1dF0pLHRoaXMuc2l6ZT0rK2J0LnNpemUsdGhpcztidD10aGlzLl9fZGF0YV9fPW5ldyBtdChFdCl9cmV0dXJuIGJ0LnNldChudCx1dCksdGhpcy5zaXplPWJ0LnNpemUsdGhpc307dmFyIE50PVc/ZnVuY3Rpb24obnQpe3JldHVybiBudD09bnVsbD9bXToobnQ9T2JqZWN0KG50KSxmdW5jdGlvbih1dCxidCl7Zm9yKHZhciBFdD0tMSxEdD11dD09bnVsbD8wOnV0Lmxlbmd0aCxBdD0wLFV0PVtdOysrRXQ8RHQ7KXt2YXIgQnQ9dXRbRXRdO2J0KEJ0LEV0LHV0KSYmKFV0W0F0KytdPUJ0KX1yZXR1cm4gVXR9KFcobnQpLGZ1bmN0aW9uKHV0KXtyZXR1cm4gJC5jYWxsKG50LHV0KX0pKX06ZnVuY3Rpb24oKXtyZXR1cm5bXX0sa3Q9Y3Q7ZnVuY3Rpb24gS3QobnQsdXQpe3JldHVybiEhKHV0PXV0Pz85MDA3MTk5MjU0NzQwOTkxKSYmKHR5cGVvZiBudD09Im51bWJlciJ8fGwudGVzdChudCkpJiZudD4tMSYmbnQlMT09MCYmbnQ8dXR9ZnVuY3Rpb24gV3QobnQpe2lmKG50IT1udWxsKXt0cnl7cmV0dXJuIHAuY2FsbChudCl9Y2F0Y2h7fXRyeXtyZXR1cm4gbnQrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn1mdW5jdGlvbiBQdChudCx1dCl7cmV0dXJuIG50PT09dXR8fG50IT1udCYmdXQhPXV0fShJJiZrdChuZXcgSShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9IltvYmplY3QgRGF0YVZpZXddInx8SCYma3QobmV3IEgpIT1vfHxaJiZrdChaLnJlc29sdmUoKSkhPSJbb2JqZWN0IFByb21pc2VdInx8ViYma3QobmV3IFYpIT10fHxLJiZrdChuZXcgSykhPSJbb2JqZWN0IFdlYWtNYXBdIikmJihrdD1mdW5jdGlvbihudCl7dmFyIHV0PWN0KG50KSxidD11dD09cj9udC5jb25zdHJ1Y3Rvcjp2b2lkIDAsRXQ9YnQ/V3QoYnQpOiIiO2lmKEV0KXN3aXRjaChFdCl7Y2FzZSBKOnJldHVybiJbb2JqZWN0IERhdGFWaWV3XSI7Y2FzZSBxOnJldHVybiBvO2Nhc2UgRzpyZXR1cm4iW29iamVjdCBQcm9taXNlXSI7Y2FzZSBROnJldHVybiB0O2Nhc2UgcnQ6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiB1dH0pO3ZhciBxdD1ldChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP2V0OmZ1bmN0aW9uKG50KXtyZXR1cm4gcmUobnQpJiZiLmNhbGwobnQsImNhbGxlZSIpJiYhJC5jYWxsKG50LCJjYWxsZWUiKX0sR3Q9QXJyYXkuaXNBcnJheSxMdD1UfHxmdW5jdGlvbigpe3JldHVybiExfTtmdW5jdGlvbiB0ZShudCl7aWYoIXp0KG50KSlyZXR1cm4hMTt2YXIgdXQ9Y3QobnQpO3JldHVybiB1dD09IltvYmplY3QgRnVuY3Rpb25dInx8dXQ9PSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSJ8fHV0PT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSJ8fHV0PT0iW29iamVjdCBQcm94eV0ifWZ1bmN0aW9uIG9lKG50KXtyZXR1cm4gdHlwZW9mIG50PT0ibnVtYmVyIiYmbnQ+LTEmJm50JTE9PTAmJm50PD05MDA3MTk5MjU0NzQwOTkxfWZ1bmN0aW9uIHp0KG50KXt2YXIgdXQ9dHlwZW9mIG50O3JldHVybiBudCE9bnVsbCYmKHV0PT0ib2JqZWN0Inx8dXQ9PSJmdW5jdGlvbiIpfWZ1bmN0aW9uIHJlKG50KXtyZXR1cm4gbnQhPW51bGwmJnR5cGVvZiBudD09Im9iamVjdCJ9dmFyIGxlPUE/ZnVuY3Rpb24obnQpe3JldHVybiBmdW5jdGlvbih1dCl7cmV0dXJuIG50KHV0KX19KEEpOmZ1bmN0aW9uKG50KXtyZXR1cm4gcmUobnQpJiZvZShudC5sZW5ndGgpJiYhIW5bY3QobnQpXX07ZnVuY3Rpb24gVnQobnQpe3JldHVybih1dD1udCkhPW51bGwmJm9lKHV0Lmxlbmd0aCkmJiF0ZSh1dCk/X3QobnQpOmF0KG50KTt2YXIgdXR9RS5leHBvcnRzPWZ1bmN0aW9uKG50LHV0KXtyZXR1cm4gaXQobnQsdXQpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDQ2OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe3ZhciBzPXR5cGVvZiBtPT0ib2JqZWN0IiYmbSYmbS5PYmplY3Q9PT1PYmplY3QmJm0sbz10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHI9c3x8b3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSx0PU9iamVjdC5wcm90b3R5cGUsZT10Lmhhc093blByb3BlcnR5LGw9dC50b1N0cmluZyxuPXIuU3ltYm9sLGk9bj9uLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBmKGMpe3JldHVybiBjPT1udWxsP2M9PT12b2lkIDA/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOmkmJmkgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uKHUpe3ZhciBkPWUuY2FsbCh1LGkpLGg9dVtpXTt0cnl7dVtpXT12b2lkIDA7dmFyIHc9ITB9Y2F0Y2h7fXZhciBfPWwuY2FsbCh1KTtyZXR1cm4gdyYmKGQ/dVtpXT1oOmRlbGV0ZSB1W2ldKSxffShjKTpmdW5jdGlvbih1KXtyZXR1cm4gbC5jYWxsKHUpfShjKX1FLmV4cG9ydHM9ZnVuY3Rpb24oYyl7aWYoIWZ1bmN0aW9uKGQpe3ZhciBoPXR5cGVvZiBkO3JldHVybiBkIT1udWxsJiYoaD09Im9iamVjdCJ8fGg9PSJmdW5jdGlvbiIpfShjKSlyZXR1cm4hMTt2YXIgdT1mKGMpO3JldHVybiB1PT0iW29iamVjdCBGdW5jdGlvbl0ifHx1PT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0ifHx1PT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSJ8fHU9PSJbb2JqZWN0IFByb3h5XSJ9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0eXBlb2YgSnQ8InUiP0p0OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0NDc6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9ZnVuY3Rpb24obSl7cmV0dXJuIG09PW51bGx9fSx7fV0sNDQ4OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWZ1bmN0aW9uKG0pe3JldHVybiBtPT09dm9pZCAwfX0se31dLDQ0OTpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXt2YXIgcz0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxvPXR5cGVvZiBtPT0ib2JqZWN0IiYmbSYmbS5PYmplY3Q9PT1PYmplY3QmJm0scj10eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLHQ9b3x8cnx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTtmdW5jdGlvbiBlKFIseil7cmV0dXJuISEoUiYmUi5sZW5ndGgpJiZmdW5jdGlvbigkLFgsail7aWYoWCE9WClyZXR1cm4gZnVuY3Rpb24oeCxJLEgsWil7Zm9yKHZhciBWPXgubGVuZ3RoLEs9SCstMTsrK0s8VjspaWYoSSh4W0tdLEsseCkpcmV0dXJuIEs7cmV0dXJuLTF9KCQsbCxqKTtmb3IodmFyIFc9ai0xLFQ9JC5sZW5ndGg7KytXPFQ7KWlmKCRbV109PT1YKXJldHVybiBXO3JldHVybi0xfShSLHosMCk+LTF9ZnVuY3Rpb24gbChSKXtyZXR1cm4gUiE9Un1mdW5jdGlvbiBuKFIseil7cmV0dXJuIFIuaGFzKHopfWZ1bmN0aW9uIGkoUil7dmFyIHo9LTEsJD1BcnJheShSLnNpemUpO3JldHVybiBSLmZvckVhY2goZnVuY3Rpb24oWCl7JFsrK3pdPVh9KSwkfXZhciBmLGM9QXJyYXkucHJvdG90eXBlLHU9RnVuY3Rpb24ucHJvdG90eXBlLGQ9T2JqZWN0LnByb3RvdHlwZSxoPXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLHc9KGY9L1teLl0rJC8uZXhlYyhoJiZoLmtleXMmJmgua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2Y6IiIsXz11LnRvU3RyaW5nLEE9ZC5oYXNPd25Qcm9wZXJ0eSxQPWQudG9TdHJpbmcsTD1SZWdFeHAoIl4iK18uY2FsbChBKS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKSxOPWMuc3BsaWNlLEQ9TSh0LCJNYXAiKSxGPU0odCwiU2V0IiksVT1NKE9iamVjdCwiY3JlYXRlIik7ZnVuY3Rpb24gQihSKXt2YXIgej0tMSwkPVI/Ui5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrejwkOyl7dmFyIFg9Ult6XTt0aGlzLnNldChYWzBdLFhbMV0pfX1mdW5jdGlvbiBTKFIpe3ZhciB6PS0xLCQ9Uj9SLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt6PCQ7KXt2YXIgWD1SW3pdO3RoaXMuc2V0KFhbMF0sWFsxXSl9fWZ1bmN0aW9uIEMoUil7dmFyIHo9LTEsJD1SP1IubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3o8JDspe3ZhciBYPVJbel07dGhpcy5zZXQoWFswXSxYWzFdKX19ZnVuY3Rpb24gdihSKXt2YXIgej0tMSwkPVI/Ui5sZW5ndGg6MDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgQzsrK3o8JDspdGhpcy5hZGQoUlt6XSl9ZnVuY3Rpb24gcChSLHope2Zvcih2YXIgJCxYLGo9Ui5sZW5ndGg7ai0tOylpZigoJD1SW2pdWzBdKT09PShYPXopfHwkIT0kJiZYIT1YKXJldHVybiBqO3JldHVybi0xfWZ1bmN0aW9uIGIoUil7cmV0dXJuISghTyhSKXx8KHo9Uix3JiZ3IGluIHopKSYmKGZ1bmN0aW9uKCQpe3ZhciBYPU8oJCk/UC5jYWxsKCQpOiIiO3JldHVybiBYPT0iW29iamVjdCBGdW5jdGlvbl0ifHxYPT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0ifShSKXx8ZnVuY3Rpb24oJCl7dmFyIFg9ITE7aWYoJCE9bnVsbCYmdHlwZW9mICQudG9TdHJpbmchPSJmdW5jdGlvbiIpdHJ5e1g9ISEoJCsiIil9Y2F0Y2h7fXJldHVybiBYfShSKT9MOnMpLnRlc3QoZnVuY3Rpb24oJCl7aWYoJCE9bnVsbCl7dHJ5e3JldHVybiBfLmNhbGwoJCl9Y2F0Y2h7fXRyeXtyZXR1cm4gJCsiIn1jYXRjaHt9fXJldHVybiIifShSKSk7dmFyIHp9Qi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVU/VShudWxsKTp7fX0sQi5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKFIpe3JldHVybiB0aGlzLmhhcyhSKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bUl19LEIucHJvdG90eXBlLmdldD1mdW5jdGlvbihSKXt2YXIgej10aGlzLl9fZGF0YV9fO2lmKFUpe3ZhciAkPXpbUl07cmV0dXJuICQ9PT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI/dm9pZCAwOiR9cmV0dXJuIEEuY2FsbCh6LFIpP3pbUl06dm9pZCAwfSxCLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5fX2RhdGFfXztyZXR1cm4gVT96W1JdIT09dm9pZCAwOkEuY2FsbCh6LFIpfSxCLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4gdGhpcy5fX2RhdGFfX1tSXT1VJiZ6PT09dm9pZCAwPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjp6LHRoaXN9LFMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0sUy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKFIpe3ZhciB6PXRoaXMuX19kYXRhX18sJD1wKHosUik7cmV0dXJuISgkPDApJiYoJD09ei5sZW5ndGgtMT96LnBvcCgpOk4uY2FsbCh6LCQsMSksITApfSxTLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oUil7dmFyIHo9dGhpcy5fX2RhdGFfXywkPXAoeixSKTtyZXR1cm4gJDwwP3ZvaWQgMDp6WyRdWzFdfSxTLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oUil7cmV0dXJuIHAodGhpcy5fX2RhdGFfXyxSKT4tMX0sUy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKFIseil7dmFyICQ9dGhpcy5fX2RhdGFfXyxYPXAoJCxSKTtyZXR1cm4gWDwwPyQucHVzaChbUix6XSk6JFtYXVsxXT16LHRoaXN9LEMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgQixtYXA6bmV3KER8fFMpLHN0cmluZzpuZXcgQn19LEMucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihSKXtyZXR1cm4geSh0aGlzLFIpLmRlbGV0ZShSKX0sQy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFIpe3JldHVybiB5KHRoaXMsUikuZ2V0KFIpfSxDLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oUil7cmV0dXJuIHkodGhpcyxSKS5oYXMoUil9LEMucHJvdG90eXBlLnNldD1mdW5jdGlvbihSLHope3JldHVybiB5KHRoaXMsUikuc2V0KFIseiksdGhpc30sdi5wcm90b3R5cGUuYWRkPXYucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KFIsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfSx2LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKFIpfTt2YXIgZz1GJiYxL2kobmV3IEYoWywtMF0pKVsxXT09MS8wP2Z1bmN0aW9uKFIpe3JldHVybiBuZXcgRihSKX06ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIHkoUix6KXt2YXIgJCxYLGo9Ui5fX2RhdGFfXztyZXR1cm4oKFg9dHlwZW9mKCQ9eikpPT0ic3RyaW5nInx8WD09Im51bWJlciJ8fFg9PSJzeW1ib2wifHxYPT0iYm9vbGVhbiI/JCE9PSJfX3Byb3RvX18iOiQ9PT1udWxsKT9qW3R5cGVvZiB6PT0ic3RyaW5nIj8ic3RyaW5nIjoiaGFzaCJdOmoubWFwfWZ1bmN0aW9uIE0oUix6KXt2YXIgJD1mdW5jdGlvbihYLGope3JldHVybiBYPy5bal19KFIseik7cmV0dXJuIGIoJCk/JDp2b2lkIDB9ZnVuY3Rpb24gTyhSKXt2YXIgej10eXBlb2YgUjtyZXR1cm4hIVImJih6PT0ib2JqZWN0Inx8ej09ImZ1bmN0aW9uIil9RS5leHBvcnRzPWZ1bmN0aW9uKFIpe3JldHVybiBSJiZSLmxlbmd0aD9mdW5jdGlvbih6LCQsWCl7dmFyIGo9LTEsVz1lLFQ9ei5sZW5ndGgseD0hMCxJPVtdLEg9STtpZihUPj0yMDApe3ZhciBaPWcoeik7aWYoWilyZXR1cm4gaShaKTt4PSExLFc9bixIPW5ldyB2fWVsc2UgSD1JO3Q6Zm9yKDsrK2o8VDspe3ZhciBWPXpbal0sSz1WO2lmKFY9ViE9PTA/VjowLHgmJks9PUspe2Zvcih2YXIgWT1ILmxlbmd0aDtZLS07KWlmKEhbWV09PT1LKWNvbnRpbnVlIHQ7SS5wdXNoKFYpfWVsc2UgVyhILEssWCl8fChIIT09SSYmSC5wdXNoKEspLEkucHVzaChWKSl9cmV0dXJuIEl9KFIpOltdfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDUwOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiaW5oZXJpdHMiKSxzPWEoImhhc2gtYmFzZSIpLG89YSgic2FmZS1idWZmZXIiKS5CdWZmZXIscj1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHQoKXtzLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gZShjLHUpe3JldHVybiBjPDx1fGM+Pj4zMi11fWZ1bmN0aW9uIGwoYyx1LGQsaCx3LF8sQSl7cmV0dXJuIGUoYysodSZkfH51JmgpK3crX3wwLEEpK3V8MH1mdW5jdGlvbiBuKGMsdSxkLGgsdyxfLEEpe3JldHVybiBlKGMrKHUmaHxkJn5oKSt3K198MCxBKSt1fDB9ZnVuY3Rpb24gaShjLHUsZCxoLHcsXyxBKXtyZXR1cm4gZShjKyh1XmReaCkrdytffDAsQSkrdXwwfWZ1bmN0aW9uIGYoYyx1LGQsaCx3LF8sQSl7cmV0dXJuIGUoYysoZF4odXx+aCkpK3crX3wwLEEpK3V8MH1tKHQscyksdC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgYz1yLHU9MDt1PDE2OysrdSljW3VdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqdSk7dmFyIGQ9dGhpcy5fYSxoPXRoaXMuX2Isdz10aGlzLl9jLF89dGhpcy5fZDtkPWwoZCxoLHcsXyxjWzBdLDM2MTQwOTAzNjAsNyksXz1sKF8sZCxoLHcsY1sxXSwzOTA1NDAyNzEwLDEyKSx3PWwodyxfLGQsaCxjWzJdLDYwNjEwNTgxOSwxNyksaD1sKGgsdyxfLGQsY1szXSwzMjUwNDQxOTY2LDIyKSxkPWwoZCxoLHcsXyxjWzRdLDQxMTg1NDgzOTksNyksXz1sKF8sZCxoLHcsY1s1XSwxMjAwMDgwNDI2LDEyKSx3PWwodyxfLGQsaCxjWzZdLDI4MjE3MzU5NTUsMTcpLGg9bChoLHcsXyxkLGNbN10sNDI0OTI2MTMxMywyMiksZD1sKGQsaCx3LF8sY1s4XSwxNzcwMDM1NDE2LDcpLF89bChfLGQsaCx3LGNbOV0sMjMzNjU1Mjg3OSwxMiksdz1sKHcsXyxkLGgsY1sxMF0sNDI5NDkyNTIzMywxNyksaD1sKGgsdyxfLGQsY1sxMV0sMjMwNDU2MzEzNCwyMiksZD1sKGQsaCx3LF8sY1sxMl0sMTgwNDYwMzY4Miw3KSxfPWwoXyxkLGgsdyxjWzEzXSw0MjU0NjI2MTk1LDEyKSx3PWwodyxfLGQsaCxjWzE0XSwyNzkyOTY1MDA2LDE3KSxkPW4oZCxoPWwoaCx3LF8sZCxjWzE1XSwxMjM2NTM1MzI5LDIyKSx3LF8sY1sxXSw0MTI5MTcwNzg2LDUpLF89bihfLGQsaCx3LGNbNl0sMzIyNTQ2NTY2NCw5KSx3PW4odyxfLGQsaCxjWzExXSw2NDM3MTc3MTMsMTQpLGg9bihoLHcsXyxkLGNbMF0sMzkyMTA2OTk5NCwyMCksZD1uKGQsaCx3LF8sY1s1XSwzNTkzNDA4NjA1LDUpLF89bihfLGQsaCx3LGNbMTBdLDM4MDE2MDgzLDkpLHc9bih3LF8sZCxoLGNbMTVdLDM2MzQ0ODg5NjEsMTQpLGg9bihoLHcsXyxkLGNbNF0sMzg4OTQyOTQ0OCwyMCksZD1uKGQsaCx3LF8sY1s5XSw1Njg0NDY0MzgsNSksXz1uKF8sZCxoLHcsY1sxNF0sMzI3NTE2MzYwNiw5KSx3PW4odyxfLGQsaCxjWzNdLDQxMDc2MDMzMzUsMTQpLGg9bihoLHcsXyxkLGNbOF0sMTE2MzUzMTUwMSwyMCksZD1uKGQsaCx3LF8sY1sxM10sMjg1MDI4NTgyOSw1KSxfPW4oXyxkLGgsdyxjWzJdLDQyNDM1NjM1MTIsOSksdz1uKHcsXyxkLGgsY1s3XSwxNzM1MzI4NDczLDE0KSxkPWkoZCxoPW4oaCx3LF8sZCxjWzEyXSwyMzY4MzU5NTYyLDIwKSx3LF8sY1s1XSw0Mjk0NTg4NzM4LDQpLF89aShfLGQsaCx3LGNbOF0sMjI3MjM5MjgzMywxMSksdz1pKHcsXyxkLGgsY1sxMV0sMTgzOTAzMDU2MiwxNiksaD1pKGgsdyxfLGQsY1sxNF0sNDI1OTY1Nzc0MCwyMyksZD1pKGQsaCx3LF8sY1sxXSwyNzYzOTc1MjM2LDQpLF89aShfLGQsaCx3LGNbNF0sMTI3Mjg5MzM1MywxMSksdz1pKHcsXyxkLGgsY1s3XSw0MTM5NDY5NjY0LDE2KSxoPWkoaCx3LF8sZCxjWzEwXSwzMjAwMjM2NjU2LDIzKSxkPWkoZCxoLHcsXyxjWzEzXSw2ODEyNzkxNzQsNCksXz1pKF8sZCxoLHcsY1swXSwzOTM2NDMwMDc0LDExKSx3PWkodyxfLGQsaCxjWzNdLDM1NzI0NDUzMTcsMTYpLGg9aShoLHcsXyxkLGNbNl0sNzYwMjkxODksMjMpLGQ9aShkLGgsdyxfLGNbOV0sMzY1NDYwMjgwOSw0KSxfPWkoXyxkLGgsdyxjWzEyXSwzODczMTUxNDYxLDExKSx3PWkodyxfLGQsaCxjWzE1XSw1MzA3NDI1MjAsMTYpLGQ9ZihkLGg9aShoLHcsXyxkLGNbMl0sMzI5OTYyODY0NSwyMyksdyxfLGNbMF0sNDA5NjMzNjQ1Miw2KSxfPWYoXyxkLGgsdyxjWzddLDExMjY4OTE0MTUsMTApLHc9Zih3LF8sZCxoLGNbMTRdLDI4Nzg2MTIzOTEsMTUpLGg9ZihoLHcsXyxkLGNbNV0sNDIzNzUzMzI0MSwyMSksZD1mKGQsaCx3LF8sY1sxMl0sMTcwMDQ4NTU3MSw2KSxfPWYoXyxkLGgsdyxjWzNdLDIzOTk5ODA2OTAsMTApLHc9Zih3LF8sZCxoLGNbMTBdLDQyOTM5MTU3NzMsMTUpLGg9ZihoLHcsXyxkLGNbMV0sMjI0MDA0NDQ5NywyMSksZD1mKGQsaCx3LF8sY1s4XSwxODczMzEzMzU5LDYpLF89ZihfLGQsaCx3LGNbMTVdLDQyNjQzNTU1NTIsMTApLHc9Zih3LF8sZCxoLGNbNl0sMjczNDc2ODkxNiwxNSksaD1mKGgsdyxfLGQsY1sxM10sMTMwOTE1MTY0OSwyMSksZD1mKGQsaCx3LF8sY1s0XSw0MTQ5NDQ0MjI2LDYpLF89ZihfLGQsaCx3LGNbMTFdLDMxNzQ3NTY5MTcsMTApLHc9Zih3LF8sZCxoLGNbMl0sNzE4Nzg3MjU5LDE1KSxoPWYoaCx3LF8sZCxjWzldLDM5NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStkfDAsdGhpcy5fYj10aGlzLl9iK2h8MCx0aGlzLl9jPXRoaXMuX2Mrd3wwLHRoaXMuX2Q9dGhpcy5fZCtffDB9LHQucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgYz1vLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gYy53cml0ZUludDMyTEUodGhpcy5fYSwwKSxjLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLGMud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksYy53cml0ZUludDMyTEUodGhpcy5fZCwxMiksY30sRS5leHBvcnRzPXR9LHsiaGFzaC1iYXNlIjo0MjUsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNDUxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiYm4uanMiKSxzPWEoImJyb3JhbmQiKTtmdW5jdGlvbiBvKHIpe3RoaXMucmFuZD1yfHxuZXcgcy5SYW5kfUUuZXhwb3J0cz1vLG8uY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcgbyhyKX0sby5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbihyKXt2YXIgdD1yLmJpdExlbmd0aCgpLGU9TWF0aC5jZWlsKHQvOCk7ZG8gdmFyIGw9bmV3IG0odGhpcy5yYW5kLmdlbmVyYXRlKGUpKTt3aGlsZShsLmNtcChyKT49MCk7cmV0dXJuIGx9LG8ucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24ocix0KXt2YXIgZT10LnN1YihyKTtyZXR1cm4gci5hZGQodGhpcy5fcmFuZGJlbG93KGUpKX0sby5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihyLHQsZSl7dmFyIGw9ci5iaXRMZW5ndGgoKSxuPW0ubW9udChyKSxpPW5ldyBtKDEpLnRvUmVkKG4pO3R8fCh0PU1hdGgubWF4KDEsbC80OHwwKSk7Zm9yKHZhciBmPXIuc3VibigxKSxjPTA7IWYudGVzdG4oYyk7YysrKTtmb3IodmFyIHU9ci5zaHJuKGMpLGQ9Zi50b1JlZChuKTt0PjA7dC0tKXt2YXIgaD10aGlzLl9yYW5kcmFuZ2UobmV3IG0oMiksZik7ZSYmZShoKTt2YXIgdz1oLnRvUmVkKG4pLnJlZFBvdyh1KTtpZih3LmNtcChpKSE9PTAmJncuY21wKGQpIT09MCl7Zm9yKHZhciBfPTE7XzxjO18rKyl7aWYoKHc9dy5yZWRTcXIoKSkuY21wKGkpPT09MClyZXR1cm4hMTtpZih3LmNtcChkKT09PTApYnJlYWt9aWYoXz09PWMpcmV0dXJuITF9fXJldHVybiEwfSxvLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHIsdCl7dmFyIGU9ci5iaXRMZW5ndGgoKSxsPW0ubW9udChyKSxuPW5ldyBtKDEpLnRvUmVkKGwpO3R8fCh0PU1hdGgubWF4KDEsZS80OHwwKSk7Zm9yKHZhciBpPXIuc3VibigxKSxmPTA7IWkudGVzdG4oZik7ZisrKTtmb3IodmFyIGM9ci5zaHJuKGYpLHU9aS50b1JlZChsKTt0PjA7dC0tKXt2YXIgZD10aGlzLl9yYW5kcmFuZ2UobmV3IG0oMiksaSksaD1yLmdjZChkKTtpZihoLmNtcG4oMSkhPT0wKXJldHVybiBoO3ZhciB3PWQudG9SZWQobCkucmVkUG93KGMpO2lmKHcuY21wKG4pIT09MCYmdy5jbXAodSkhPT0wKXtmb3IodmFyIF89MTtfPGY7XysrKXtpZigodz13LnJlZFNxcigpKS5jbXAobik9PT0wKXJldHVybiB3LmZyb21SZWQoKS5zdWJuKDEpLmdjZChyKTtpZih3LmNtcCh1KT09PTApYnJlYWt9aWYoXz09PWYpcmV0dXJuKHc9dy5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHIpfX1yZXR1cm4hMX19LHsiYm4uanMiOjQ1Mixicm9yYW5kOjE4N31dLDQ1MjpbZnVuY3Rpb24oYSxFLGspe2FyZ3VtZW50c1s0XVsxODRdWzBdLmFwcGx5KGssYXJndW1lbnRzKX0se2J1ZmZlcjoxODgsZHVwOjE4NH1dLDQ1MzpbZnVuY3Rpb24oYSxFLGspe2Z1bmN0aW9uIG0ocyxvKXtpZighcyl0aHJvdyBuZXcgRXJyb3Iob3x8IkFzc2VydGlvbiBmYWlsZWQiKX1FLmV4cG9ydHM9bSxtLmVxdWFsPWZ1bmN0aW9uKHMsbyxyKXtpZihzIT1vKXRocm93IG5ldyBFcnJvcihyfHwiQXNzZXJ0aW9uIGZhaWxlZDogIitzKyIgIT0gIitvKX19LHt9XSw0NTQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1rO2Z1bmN0aW9uIHMocil7cmV0dXJuIHIubGVuZ3RoPT09MT8iMCIrcjpyfWZ1bmN0aW9uIG8ocil7Zm9yKHZhciB0PSIiLGU9MDtlPHIubGVuZ3RoO2UrKyl0Kz1zKHJbZV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gdH1tLnRvQXJyYXk9ZnVuY3Rpb24ocix0KXtpZihBcnJheS5pc0FycmF5KHIpKXJldHVybiByLnNsaWNlKCk7aWYoIXIpcmV0dXJuW107dmFyIGU9W107aWYodHlwZW9mIHIhPSJzdHJpbmciKXtmb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyllW2xdPTB8cltsXTtyZXR1cm4gZX1pZih0PT09ImhleCIpZm9yKChyPXIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYocj0iMCIrciksbD0wO2w8ci5sZW5ndGg7bCs9MillLnB1c2gocGFyc2VJbnQocltsXStyW2wrMV0sMTYpKTtlbHNlIGZvcihsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBuPXIuY2hhckNvZGVBdChsKSxpPW4+PjgsZj0yNTUmbjtpP2UucHVzaChpLGYpOmUucHVzaChmKX1yZXR1cm4gZX0sbS56ZXJvMj1zLG0udG9IZXg9byxtLmVuY29kZT1mdW5jdGlvbihyLHQpe3JldHVybiB0PT09ImhleCI/byhyKTpyfX0se31dLDQ1NTpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz17IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn19LHt9XSw0NTY6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJhc24xLmpzIik7ay5jZXJ0aWZpY2F0ZT1hKCIuL2NlcnRpZmljYXRlIik7dmFyIHM9bS5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7ay5SU0FQcml2YXRlS2V5PXM7dmFyIG89bS5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO2suUlNBUHVibGljS2V5PW87dmFyIHI9bS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UodCksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtrLlB1YmxpY0tleT1yO3ZhciB0PW0uZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLGU9bS5kZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZSh0KSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtrLlByaXZhdGVLZXk9ZTt2YXIgbD1tLmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2JqaWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtrLkVuY3J5cHRlZFByaXZhdGVLZXk9bDt2YXIgbj1tLmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7ay5EU0FQcml2YXRlS2V5PW4say5EU0FwYXJhbT1tLmRlZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBpPW0uZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoZiksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7ay5FQ1ByaXZhdGVLZXk9aTt2YXIgZj1tLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7ay5zaWduYXR1cmU9bS5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LHsiLi9jZXJ0aWZpY2F0ZSI6NDU3LCJhc24xLmpzIjoxNzB9XSw0NTc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJhc24xLmpzIikscz1tLmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksbz1tLmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxyPW0uZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksdD1tLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShyKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLGU9bS5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihvKX0pLGw9bS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoZSl9KSxuPW0uZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShsKX0pfSksaT1tLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShzKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UocykpfSksZj1tLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSxjPW0uZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UociksdGhpcy5rZXkoImlzc3VlciIpLnVzZShuKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoaSksdGhpcy5rZXkoInN1YmplY3QiKS51c2UobiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHQpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihmKS5vcHRpb25hbCgpKX0pLHU9bS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoYyksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShyKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTtFLmV4cG9ydHM9dX0seyJhc24xLmpzIjoxNzB9XSw0NTg6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSxzPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxvPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLHI9YSgiZXZwX2J5dGVzdG9rZXkiKSx0PWEoImJyb3dzZXJpZnktYWVzIiksZT1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcjtFLmV4cG9ydHM9ZnVuY3Rpb24obCxuKXt2YXIgaSxmPWwudG9TdHJpbmcoKSxjPWYubWF0Y2gobSk7aWYoYyl7dmFyIHU9ImFlcyIrY1sxXSxkPWUuZnJvbShjWzJdLCJoZXgiKSxoPWUuZnJvbShjWzNdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iiksdz1yKG4sZC5zbGljZSgwLDgpLHBhcnNlSW50KGNbMV0sMTApKS5rZXksXz1bXSxBPXQuY3JlYXRlRGVjaXBoZXJpdih1LHcsZCk7Xy5wdXNoKEEudXBkYXRlKGgpKSxfLnB1c2goQS5maW5hbCgpKSxpPWUuY29uY2F0KF8pfWVsc2V7dmFyIFA9Zi5tYXRjaChvKTtpPWUuZnJvbShQWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzpmLm1hdGNoKHMpWzFdLGRhdGE6aX19fSx7ImJyb3dzZXJpZnktYWVzIjoxOTEsZXZwX2J5dGVzdG9rZXk6NDIzLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNDU5OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi9hc24xIikscz1hKCIuL2Flc2lkLmpzb24iKSxvPWEoIi4vZml4UHJvYyIpLHI9YSgiYnJvd3NlcmlmeS1hZXMiKSx0PWEoInBia2RmMiIpLGU9YSgic2FmZS1idWZmZXIiKS5CdWZmZXI7ZnVuY3Rpb24gbChuKXt2YXIgaTt0eXBlb2YgbiE9Im9iamVjdCJ8fGUuaXNCdWZmZXIobil8fChpPW4ucGFzc3BocmFzZSxuPW4ua2V5KSx0eXBlb2Ygbj09InN0cmluZyImJihuPWUuZnJvbShuKSk7dmFyIGYsYyx1PW8obixpKSxkPXUudGFnLGg9dS5kYXRhO3N3aXRjaChkKXtjYXNlIkNFUlRJRklDQVRFIjpjPW0uY2VydGlmaWNhdGUuZGVjb2RlKGgsImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKGN8fChjPW0uUHVibGljS2V5LmRlY29kZShoLCJkZXIiKSksZj1jLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gbS5SU0FQdWJsaWNLZXkuZGVjb2RlKGMuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gYy5zdWJqZWN0UHJpdmF0ZUtleT1jLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOmN9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBjLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1tLkRTQXBhcmFtLmRlY29kZShjLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpjLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK2YpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpoPWZ1bmN0aW9uKHcsXyl7dmFyIEE9dy5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsUD1wYXJzZUludCh3LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksTD1zW3cuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxOPXcuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LEQ9dy5zdWJqZWN0UHJpdmF0ZUtleSxGPXBhcnNlSW50KEwuc3BsaXQoIi0iKVsxXSwxMCkvOCxVPXQucGJrZGYyU3luYyhfLEEsUCxGLCJzaGExIiksQj1yLmNyZWF0ZURlY2lwaGVyaXYoTCxVLE4pLFM9W107cmV0dXJuIFMucHVzaChCLnVwZGF0ZShEKSksUy5wdXNoKEIuZmluYWwoKSksZS5jb25jYXQoUyl9KGg9bS5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShoLCJkZXIiKSxpKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goZj0oYz1tLlByaXZhdGVLZXkuZGVjb2RlKGgsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIG0uUlNBUHJpdmF0ZUtleS5kZWNvZGUoYy5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOmMuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6bS5FQ1ByaXZhdGVLZXkuZGVjb2RlKGMuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBjLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9bS5EU0FwYXJhbS5kZWNvZGUoYy5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOmMuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrZil9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIG0uUlNBUHVibGljS2V5LmRlY29kZShoLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIG0uUlNBUHJpdmF0ZUtleS5kZWNvZGUoaCwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczptLkRTQVByaXZhdGVLZXkuZGVjb2RlKGgsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KGg9bS5FQ1ByaXZhdGVLZXkuZGVjb2RlKGgsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6aC5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK2QpfX1FLmV4cG9ydHM9bCxsLnNpZ25hdHVyZT1tLnNpZ25hdHVyZX0seyIuL2Flc2lkLmpzb24iOjQ1NSwiLi9hc24xIjo0NTYsIi4vZml4UHJvYyI6NDU4LCJicm93c2VyaWZ5LWFlcyI6MTkxLHBia2RmMjo0NjAsInNhZmUtYnVmZmVyIjo0OTR9XSw0NjA6W2Z1bmN0aW9uKGEsRSxrKXtrLnBia2RmMj1hKCIuL2xpYi9hc3luYyIpLGsucGJrZGYyU3luYz1hKCIuL2xpYi9zeW5jIil9LHsiLi9saWIvYXN5bmMiOjQ2MSwiLi9saWIvc3luYyI6NDY0fV0sNDYxOltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe3ZhciBzLG8scj1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcix0PWEoIi4vcHJlY29uZGl0aW9uIiksZT1hKCIuL2RlZmF1bHQtZW5jb2RpbmciKSxsPWEoIi4vc3luYyIpLG49YSgiLi90by1idWZmZXIiKSxpPW0uY3J5cHRvJiZtLmNyeXB0by5zdWJ0bGUsZj17c2hhOiJTSEEtMSIsInNoYS0xIjoiU0hBLTEiLHNoYTE6IlNIQS0xIixzaGEyNTY6IlNIQS0yNTYiLCJzaGEtMjU2IjoiU0hBLTI1NiIsc2hhMzg0OiJTSEEtMzg0Iiwic2hhLTM4NCI6IlNIQS0zODQiLCJzaGEtNTEyIjoiU0hBLTUxMiIsc2hhNTEyOiJTSEEtNTEyIn0sYz1bXTtmdW5jdGlvbiB1KCl7cmV0dXJuIG98fChvPW0ucHJvY2VzcyYmbS5wcm9jZXNzLm5leHRUaWNrP20ucHJvY2Vzcy5uZXh0VGljazptLnF1ZXVlTWljcm90YXNrP20ucXVldWVNaWNyb3Rhc2s6bS5zZXRJbW1lZGlhdGU/bS5zZXRJbW1lZGlhdGU6bS5zZXRUaW1lb3V0KX1mdW5jdGlvbiBkKGgsdyxfLEEsUCl7cmV0dXJuIGkuaW1wb3J0S2V5KCJyYXciLGgse25hbWU6IlBCS0RGMiJ9LCExLFsiZGVyaXZlQml0cyJdKS50aGVuKGZ1bmN0aW9uKEwpe3JldHVybiBpLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDp3LGl0ZXJhdGlvbnM6XyxoYXNoOntuYW1lOlB9fSxMLEE8PDMpfSkudGhlbihmdW5jdGlvbihMKXtyZXR1cm4gci5mcm9tKEwpfSl9RS5leHBvcnRzPWZ1bmN0aW9uKGgsdyxfLEEsUCxMKXt0eXBlb2YgUD09ImZ1bmN0aW9uIiYmKEw9UCxQPXZvaWQgMCk7dmFyIE49ZlsoUD1QfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKE4mJnR5cGVvZiBtLlByb21pc2U9PSJmdW5jdGlvbiIpe2lmKHQoXyxBKSxoPW4oaCxlLCJQYXNzd29yZCIpLHc9bih3LGUsIlNhbHQiKSx0eXBlb2YgTCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyhmdW5jdGlvbihELEYpe0QudGhlbihmdW5jdGlvbihVKXt1KCkoZnVuY3Rpb24oKXtGKG51bGwsVSl9KX0sZnVuY3Rpb24oVSl7dSgpKGZ1bmN0aW9uKCl7RihVKX0pfSl9KShmdW5jdGlvbihEKXtpZihtLnByb2Nlc3MmJiFtLnByb2Nlc3MuYnJvd3Nlcnx8IWl8fCFpLmltcG9ydEtleXx8IWkuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZihjW0RdIT09dm9pZCAwKXJldHVybiBjW0RdO3ZhciBGPWQocz1zfHxyLmFsbG9jKDgpLHMsMTAsMTI4LEQpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4gY1tEXT1GLEZ9KE4pLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQ/ZChoLHcsXyxBLE4pOmwoaCx3LF8sQSxQKX0pLEwpfWVsc2UgdSgpKGZ1bmN0aW9uKCl7dmFyIEQ7dHJ5e0Q9bChoLHcsXyxBLFApfWNhdGNoKEYpe3JldHVybiBMKEYpfUwobnVsbCxEKX0pfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7Ii4vZGVmYXVsdC1lbmNvZGluZyI6NDYyLCIuL3ByZWNvbmRpdGlvbiI6NDYzLCIuL3N5bmMiOjQ2NCwiLi90by1idWZmZXIiOjQ2NSwic2FmZS1idWZmZXIiOjQ5NH1dLDQ2MjpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe3ZhciBvO3MucHJvY2VzcyYmcy5wcm9jZXNzLmJyb3dzZXI/bz0idXRmLTgiOnMucHJvY2VzcyYmcy5wcm9jZXNzLnZlcnNpb24/bz1wYXJzZUludChtLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjpvPSJ1dGYtOCIsRS5leHBvcnRzPW99KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoIl9wcm9jZXNzIiksdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDY3fV0sNDYzOltmdW5jdGlvbihhLEUsayl7dmFyIG09TWF0aC5wb3coMiwzMCktMTtFLmV4cG9ydHM9ZnVuY3Rpb24ocyxvKXtpZih0eXBlb2YgcyE9Im51bWJlciIpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihzPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZih0eXBlb2YgbyE9Im51bWJlciIpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZihvPDB8fG8+bXx8byE9byl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0se31dLDQ2NDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImNyZWF0ZS1oYXNoL21kNSIpLHM9YSgicmlwZW1kMTYwIiksbz1hKCJzaGEuanMiKSxyPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLHQ9YSgiLi9wcmVjb25kaXRpb24iKSxlPWEoIi4vZGVmYXVsdC1lbmNvZGluZyIpLGw9YSgiLi90by1idWZmZXIiKSxuPXIuYWxsb2MoMTI4KSxpPXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gZihjLHUsZCl7dmFyIGg9ZnVuY3Rpb24oTil7ZnVuY3Rpb24gRChGKXtyZXR1cm4gbyhOKS51cGRhdGUoRikuZGlnZXN0KCl9cmV0dXJuIE49PT0icm1kMTYwInx8Tj09PSJyaXBlbWQxNjAiP2Z1bmN0aW9uKEYpe3JldHVybiBuZXcgcygpLnVwZGF0ZShGKS5kaWdlc3QoKX06Tj09PSJtZDUiP206RH0oYyksdz1jPT09InNoYTUxMiJ8fGM9PT0ic2hhMzg0Ij8xMjg6NjQ7dS5sZW5ndGg+dz91PWgodSk6dS5sZW5ndGg8dyYmKHU9ci5jb25jYXQoW3Usbl0sdykpO2Zvcih2YXIgXz1yLmFsbG9jVW5zYWZlKHcraVtjXSksQT1yLmFsbG9jVW5zYWZlKHcraVtjXSksUD0wO1A8dztQKyspX1tQXT01NF51W1BdLEFbUF09OTJedVtQXTt2YXIgTD1yLmFsbG9jVW5zYWZlKHcrZCs0KTtfLmNvcHkoTCwwLDAsdyksdGhpcy5pcGFkMT1MLHRoaXMuaXBhZDI9Xyx0aGlzLm9wYWQ9QSx0aGlzLmFsZz1jLHRoaXMuYmxvY2tzaXplPXcsdGhpcy5oYXNoPWgsdGhpcy5zaXplPWlbY119Zi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKGMsdSl7cmV0dXJuIGMuY29weSh1LHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godSkuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxFLmV4cG9ydHM9ZnVuY3Rpb24oYyx1LGQsaCx3KXt0KGQsaCk7dmFyIF89bmV3IGYodz13fHwic2hhMSIsYz1sKGMsZSwiUGFzc3dvcmQiKSwodT1sKHUsZSwiU2FsdCIpKS5sZW5ndGgpLEE9ci5hbGxvY1Vuc2FmZShoKSxQPXIuYWxsb2NVbnNhZmUodS5sZW5ndGgrNCk7dS5jb3B5KFAsMCwwLHUubGVuZ3RoKTtmb3IodmFyIEw9MCxOPWlbd10sRD1NYXRoLmNlaWwoaC9OKSxGPTE7Rjw9RDtGKyspe1Aud3JpdGVVSW50MzJCRShGLHUubGVuZ3RoKTtmb3IodmFyIFU9Xy5ydW4oUCxfLmlwYWQxKSxCPVUsUz0xO1M8ZDtTKyspe0I9Xy5ydW4oQixfLmlwYWQyKTtmb3IodmFyIEM9MDtDPE47QysrKVVbQ11ePUJbQ119VS5jb3B5KEEsTCksTCs9Tn1yZXR1cm4gQX19LHsiLi9kZWZhdWx0LWVuY29kaW5nIjo0NjIsIi4vcHJlY29uZGl0aW9uIjo0NjMsIi4vdG8tYnVmZmVyIjo0NjUsImNyZWF0ZS1oYXNoL21kNSI6Mzg3LHJpcGVtZDE2MDo0OTMsInNhZmUtYnVmZmVyIjo0OTQsInNoYS5qcyI6NDk4fV0sNDY1OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgic2FmZS1idWZmZXIiKS5CdWZmZXI7RS5leHBvcnRzPWZ1bmN0aW9uKHMsbyxyKXtpZihtLmlzQnVmZmVyKHMpKXJldHVybiBzO2lmKHR5cGVvZiBzPT0ic3RyaW5nIilyZXR1cm4gbS5mcm9tKHMsbyk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHMpKXJldHVybiBtLmZyb20ocy5idWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IocisiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LHsic2FmZS1idWZmZXIiOjQ5NH1dLDQ2NjpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXttPT09dm9pZCAwfHwhbS52ZXJzaW9ufHxtLnZlcnNpb24uaW5kZXhPZigidjAuIik9PT0wfHxtLnZlcnNpb24uaW5kZXhPZigidjEuIik9PT0wJiZtLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKSE9PTA/RS5leHBvcnRzPXtuZXh0VGljazpmdW5jdGlvbihzLG8scix0KXtpZih0eXBlb2YgcyE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3ZhciBlLGwsbj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChuKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBtLm5leHRUaWNrKHMpO2Nhc2UgMjpyZXR1cm4gbS5uZXh0VGljayhmdW5jdGlvbigpe3MuY2FsbChudWxsLG8pfSk7Y2FzZSAzOnJldHVybiBtLm5leHRUaWNrKGZ1bmN0aW9uKCl7cy5jYWxsKG51bGwsbyxyKX0pO2Nhc2UgNDpyZXR1cm4gbS5uZXh0VGljayhmdW5jdGlvbigpe3MuY2FsbChudWxsLG8scix0KX0pO2RlZmF1bHQ6Zm9yKGU9bmV3IEFycmF5KG4tMSksbD0wO2w8ZS5sZW5ndGg7KWVbbCsrXT1hcmd1bWVudHNbbF07cmV0dXJuIG0ubmV4dFRpY2soZnVuY3Rpb24oKXtzLmFwcGx5KG51bGwsZSl9KX19fTpFLmV4cG9ydHM9bX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0Njd9XSw0Njc6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbSxzLG89RS5leHBvcnRzPXt9O2Z1bmN0aW9uIHIoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiB0KCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBlKHcpe2lmKG09PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHcsMCk7aWYoKG09PT1yfHwhbSkmJnNldFRpbWVvdXQpcmV0dXJuIG09c2V0VGltZW91dCxzZXRUaW1lb3V0KHcsMCk7dHJ5e3JldHVybiBtKHcsMCl9Y2F0Y2h7dHJ5e3JldHVybiBtLmNhbGwobnVsbCx3LDApfWNhdGNoe3JldHVybiBtLmNhbGwodGhpcyx3LDApfX19KGZ1bmN0aW9uKCl7dHJ5e209dHlwZW9mIHNldFRpbWVvdXQ9PSJmdW5jdGlvbiI/c2V0VGltZW91dDpyfWNhdGNoe209cn10cnl7cz10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDp0fWNhdGNoe3M9dH19KSgpO3ZhciBsLG49W10saT0hMSxmPS0xO2Z1bmN0aW9uIGMoKXtpJiZsJiYoaT0hMSxsLmxlbmd0aD9uPWwuY29uY2F0KG4pOmY9LTEsbi5sZW5ndGgmJnUoKSl9ZnVuY3Rpb24gdSgpe2lmKCFpKXt2YXIgdz1lKGMpO2k9ITA7Zm9yKHZhciBfPW4ubGVuZ3RoO187KXtmb3IobD1uLG49W107KytmPF87KWwmJmxbZl0ucnVuKCk7Zj0tMSxfPW4ubGVuZ3RofWw9bnVsbCxpPSExLGZ1bmN0aW9uKEEpe2lmKHM9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChBKTtpZigocz09PXR8fCFzKSYmY2xlYXJUaW1lb3V0KXJldHVybiBzPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoQSk7dHJ5e3MoQSl9Y2F0Y2h7dHJ5e3JldHVybiBzLmNhbGwobnVsbCxBKX1jYXRjaHtyZXR1cm4gcy5jYWxsKHRoaXMsQSl9fX0odyl9fWZ1bmN0aW9uIGQodyxfKXt0aGlzLmZ1bj13LHRoaXMuYXJyYXk9X31mdW5jdGlvbiBoKCl7fW8ubmV4dFRpY2s9ZnVuY3Rpb24odyl7dmFyIF89bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgQT0xO0E8YXJndW1lbnRzLmxlbmd0aDtBKyspX1tBLTFdPWFyZ3VtZW50c1tBXTtuLnB1c2gobmV3IGQodyxfKSksbi5sZW5ndGghPT0xfHxpfHxlKHUpfSxkLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxvLnRpdGxlPSJicm93c2VyIixvLmJyb3dzZXI9ITAsby5lbnY9e30sby5hcmd2PVtdLG8udmVyc2lvbj0iIixvLnZlcnNpb25zPXt9LG8ub249aCxvLmFkZExpc3RlbmVyPWgsby5vbmNlPWgsby5vZmY9aCxvLnJlbW92ZUxpc3RlbmVyPWgsby5yZW1vdmVBbGxMaXN0ZW5lcnM9aCxvLmVtaXQ9aCxvLnByZXBlbmRMaXN0ZW5lcj1oLG8ucHJlcGVuZE9uY2VMaXN0ZW5lcj1oLG8ubGlzdGVuZXJzPWZ1bmN0aW9uKHcpe3JldHVybltdfSxvLmJpbmRpbmc9ZnVuY3Rpb24odyl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxvLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sby5jaGRpcj1mdW5jdGlvbih3KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxvLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNDY4OltmdW5jdGlvbihhLEUsayl7ay5wdWJsaWNFbmNyeXB0PWEoIi4vcHVibGljRW5jcnlwdCIpLGsucHJpdmF0ZURlY3J5cHQ9YSgiLi9wcml2YXRlRGVjcnlwdCIpLGsucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24obSxzKXtyZXR1cm4gay5wdWJsaWNFbmNyeXB0KG0scywhMCl9LGsucHVibGljRGVjcnlwdD1mdW5jdGlvbihtLHMpe3JldHVybiBrLnByaXZhdGVEZWNyeXB0KG0scywhMCl9fSx7Ii4vcHJpdmF0ZURlY3J5cHQiOjQ3MSwiLi9wdWJsaWNFbmNyeXB0Ijo0NzJ9XSw0Njk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJjcmVhdGUtaGFzaCIpLHM9YSgic2FmZS1idWZmZXIiKS5CdWZmZXI7ZnVuY3Rpb24gbyhyKXt2YXIgdD1zLmFsbG9jVW5zYWZlKDQpO3JldHVybiB0LndyaXRlVUludDMyQkUociwwKSx0fUUuZXhwb3J0cz1mdW5jdGlvbihyLHQpe2Zvcih2YXIgZSxsPXMuYWxsb2MoMCksbj0wO2wubGVuZ3RoPHQ7KWU9byhuKyspLGw9cy5jb25jYXQoW2wsbSgic2hhMSIpLnVwZGF0ZShyKS51cGRhdGUoZSkuZGlnZXN0KCldKTtyZXR1cm4gbC5zbGljZSgwLHQpfX0seyJjcmVhdGUtaGFzaCI6Mzg2LCJzYWZlLWJ1ZmZlciI6NDk0fV0sNDcwOltmdW5jdGlvbihhLEUsayl7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkoayxhcmd1bWVudHMpfSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sNDcxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgicGFyc2UtYXNuMSIpLHM9YSgiLi9tZ2YiKSxvPWEoIi4veG9yIikscj1hKCJibi5qcyIpLHQ9YSgiYnJvd3NlcmlmeS1yc2EiKSxlPWEoImNyZWF0ZS1oYXNoIiksbD1hKCIuL3dpdGhQdWJsaWMiKSxuPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyO0UuZXhwb3J0cz1mdW5jdGlvbihpLGYsYyl7dmFyIHU7dT1pLnBhZGRpbmc/aS5wYWRkaW5nOmM/MTo0O3ZhciBkLGg9bShpKSx3PWgubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoZi5sZW5ndGg+d3x8bmV3IHIoZikuY21wKGgubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7ZD1jP2wobmV3IHIoZiksaCk6dChmLGgpO3ZhciBfPW4uYWxsb2Mody1kLmxlbmd0aCk7aWYoZD1uLmNvbmNhdChbXyxkXSx3KSx1PT09NClyZXR1cm4gZnVuY3Rpb24oQSxQKXt2YXIgTD1BLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLE49ZSgic2hhMSIpLnVwZGF0ZShuLmFsbG9jKDApKS5kaWdlc3QoKSxEPU4ubGVuZ3RoO2lmKFBbMF0hPT0wKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBGPVAuc2xpY2UoMSxEKzEpLFU9UC5zbGljZShEKzEpLEI9byhGLHMoVSxEKSksUz1vKFUscyhCLEwtRC0xKSk7aWYoZnVuY3Rpb24odixwKXt2PW4uZnJvbSh2KSxwPW4uZnJvbShwKTt2YXIgYj0wLGc9di5sZW5ndGg7di5sZW5ndGghPT1wLmxlbmd0aCYmKGIrKyxnPU1hdGgubWluKHYubGVuZ3RoLHAubGVuZ3RoKSk7Zm9yKHZhciB5PS0xOysreTxnOyliKz12W3ldXnBbeV07cmV0dXJuIGJ9KE4sUy5zbGljZSgwLEQpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIEM9RDtTW0NdPT09MDspQysrO2lmKFNbQysrXSE9PTEpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIFMuc2xpY2UoQyl9KGgsZCk7aWYodT09PTEpcmV0dXJuIGZ1bmN0aW9uKEEsUCxMKXtmb3IodmFyIE49UC5zbGljZSgwLDIpLEQ9MixGPTA7UFtEKytdIT09MDspaWYoRD49UC5sZW5ndGgpe0YrKzticmVha312YXIgVT1QLnNsaWNlKDIsRC0xKTtpZigoTi50b1N0cmluZygiaGV4IikhPT0iMDAwMiImJiFMfHxOLnRvU3RyaW5nKCJoZXgiKSE9PSIwMDAxIiYmTCkmJkYrKyxVLmxlbmd0aDw4JiZGKyssRil0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gUC5zbGljZShEKX0oMCxkLGMpO2lmKHU9PT0zKXJldHVybiBkO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSx7Ii4vbWdmIjo0NjksIi4vd2l0aFB1YmxpYyI6NDczLCIuL3hvciI6NDc0LCJibi5qcyI6NDcwLCJicm93c2VyaWZ5LXJzYSI6MjA5LCJjcmVhdGUtaGFzaCI6Mzg2LCJwYXJzZS1hc24xIjo0NTksInNhZmUtYnVmZmVyIjo0OTR9XSw0NzI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJwYXJzZS1hc24xIikscz1hKCJyYW5kb21ieXRlcyIpLG89YSgiY3JlYXRlLWhhc2giKSxyPWEoIi4vbWdmIiksdD1hKCIuL3hvciIpLGU9YSgiYm4uanMiKSxsPWEoIi4vd2l0aFB1YmxpYyIpLG49YSgiYnJvd3NlcmlmeS1yc2EiKSxpPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyO0UuZXhwb3J0cz1mdW5jdGlvbihmLGMsdSl7dmFyIGQ7ZD1mLnBhZGRpbmc/Zi5wYWRkaW5nOnU/MTo0O3ZhciBoLHc9bShmKTtpZihkPT09NCloPWZ1bmN0aW9uKF8sQSl7dmFyIFA9Xy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxMPUEubGVuZ3RoLE49bygic2hhMSIpLnVwZGF0ZShpLmFsbG9jKDApKS5kaWdlc3QoKSxEPU4ubGVuZ3RoLEY9MipEO2lmKEw+UC1GLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIFU9aS5hbGxvYyhQLUwtRi0yKSxCPVAtRC0xLFM9cyhEKSxDPXQoaS5jb25jYXQoW04sVSxpLmFsbG9jKDEsMSksQV0sQikscihTLEIpKSx2PXQoUyxyKEMsRCkpO3JldHVybiBuZXcgZShpLmNvbmNhdChbaS5hbGxvYygxKSx2LENdLFApKX0odyxjKTtlbHNlIGlmKGQ9PT0xKWg9ZnVuY3Rpb24oXyxBLFApe3ZhciBMLE49QS5sZW5ndGgsRD1fLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKE4+RC0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gTD1QP2kuYWxsb2MoRC1OLTMsMjU1KTpmdW5jdGlvbihGKXtmb3IodmFyIFUsQj1pLmFsbG9jVW5zYWZlKEYpLFM9MCxDPXMoMipGKSx2PTA7UzxGOyl2PT09Qy5sZW5ndGgmJihDPXMoMipGKSx2PTApLChVPUNbdisrXSkmJihCW1MrK109VSk7cmV0dXJuIEJ9KEQtTi0zKSxuZXcgZShpLmNvbmNhdChbaS5mcm9tKFswLFA/MToyXSksTCxpLmFsbG9jKDEpLEFdLEQpKX0odyxjLHUpO2Vsc2V7aWYoZCE9PTMpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigoaD1uZXcgZShjKSkuY21wKHcubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIHU/bihoLHcpOmwoaCx3KX19LHsiLi9tZ2YiOjQ2OSwiLi93aXRoUHVibGljIjo0NzMsIi4veG9yIjo0NzQsImJuLmpzIjo0NzAsImJyb3dzZXJpZnktcnNhIjoyMDksImNyZWF0ZS1oYXNoIjozODYsInBhcnNlLWFzbjEiOjQ1OSxyYW5kb21ieXRlczo0NzUsInNhZmUtYnVmZmVyIjo0OTR9XSw0NzM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJibi5qcyIpLHM9YSgic2FmZS1idWZmZXIiKS5CdWZmZXI7RS5leHBvcnRzPWZ1bmN0aW9uKG8scil7cmV0dXJuIHMuZnJvbShvLnRvUmVkKG0ubW9udChyLm1vZHVsdXMpKS5yZWRQb3cobmV3IG0oci5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0seyJibi5qcyI6NDcwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNDc0OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWZ1bmN0aW9uKG0scyl7Zm9yKHZhciBvPW0ubGVuZ3RoLHI9LTE7KytyPG87KW1bcl1ePXNbcl07cmV0dXJuIG19fSx7fV0sNDc1OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0scyl7KGZ1bmN0aW9uKCl7dmFyIG89YSgic2FmZS1idWZmZXIiKS5CdWZmZXIscj1zLmNyeXB0b3x8cy5tc0NyeXB0bztyJiZyLmdldFJhbmRvbVZhbHVlcz9FLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjQyOTQ5NjcyOTUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXMiKTt2YXIgbD1vLmFsbG9jVW5zYWZlKHQpO2lmKHQ+MClpZih0PjY1NTM2KWZvcih2YXIgbj0wO248dDtuKz02NTUzNilyLmdldFJhbmRvbVZhbHVlcyhsLnNsaWNlKG4sbis2NTUzNikpO2Vsc2Ugci5nZXRSYW5kb21WYWx1ZXMobCk7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP20ubmV4dFRpY2soZnVuY3Rpb24oKXtlKG51bGwsbCl9KTpsfTpFLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoYFNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuClVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTFgKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoIl9wcm9jZXNzIiksdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDY3LCJzYWZlLWJ1ZmZlciI6NDk0fV0sNDc2OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0scyl7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcihgc2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlcgp1c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExYCl9dmFyIHI9YSgic2FmZS1idWZmZXIiKSx0PWEoInJhbmRvbWJ5dGVzIiksZT1yLkJ1ZmZlcixsPXIua01heExlbmd0aCxuPXMuY3J5cHRvfHxzLm1zQ3J5cHRvLGk9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBmKGQsaCl7aWYodHlwZW9mIGQhPSJudW1iZXIifHxkIT1kKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoZD5pfHxkPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihkPmx8fGQ+aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIGMoZCxoLHcpe2lmKHR5cGVvZiBkIT0ibnVtYmVyInx8ZCE9ZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihkPml8fGQ8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihkK2g+d3x8ZD5sKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gdShkLGgsdyxfKXtpZihtLmJyb3dzZXIpe3ZhciBBPWQuYnVmZmVyLFA9bmV3IFVpbnQ4QXJyYXkoQSxoLHcpO3JldHVybiBuLmdldFJhbmRvbVZhbHVlcyhQKSxfP3ZvaWQgbS5uZXh0VGljayhmdW5jdGlvbigpe18obnVsbCxkKX0pOmR9aWYoIV8pcmV0dXJuIHQodykuY29weShkLGgpLGQ7dCh3LGZ1bmN0aW9uKEwsTil7aWYoTClyZXR1cm4gXyhMKTtOLmNvcHkoZCxoKSxfKG51bGwsZCl9KX1uJiZuLmdldFJhbmRvbVZhbHVlc3x8IW0uYnJvd3Nlcj8oay5yYW5kb21GaWxsPWZ1bmN0aW9uKGQsaCx3LF8pe2lmKCEoZS5pc0J1ZmZlcihkKXx8ZCBpbnN0YW5jZW9mIHMuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYodHlwZW9mIGg9PSJmdW5jdGlvbiIpXz1oLGg9MCx3PWQubGVuZ3RoO2Vsc2UgaWYodHlwZW9mIHc9PSJmdW5jdGlvbiIpXz13LHc9ZC5sZW5ndGgtaDtlbHNlIGlmKHR5cGVvZiBfIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIGYoaCxkLmxlbmd0aCksYyh3LGgsZC5sZW5ndGgpLHUoZCxoLHcsXyl9LGsucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24oZCxoLHcpe2lmKGg9PT12b2lkIDAmJihoPTApLCEoZS5pc0J1ZmZlcihkKXx8ZCBpbnN0YW5jZW9mIHMuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIGYoaCxkLmxlbmd0aCksdz09PXZvaWQgMCYmKHc9ZC5sZW5ndGgtaCksYyh3LGgsZC5sZW5ndGgpLHUoZCxoLHcpfSk6KGsucmFuZG9tRmlsbD1vLGsucmFuZG9tRmlsbFN5bmM9byl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoIl9wcm9jZXNzIiksdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDY3LHJhbmRvbWJ5dGVzOjQ3NSwic2FmZS1idWZmZXIiOjQ5NH1dLDQ3NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPXt9O2Z1bmN0aW9uIHMocix0LGUpe2V8fChlPUVycm9yKTt2YXIgbD1mdW5jdGlvbihuKXt2YXIgaSxmO2Z1bmN0aW9uIGModSxkLGgpe3JldHVybiBuLmNhbGwodGhpcyxmdW5jdGlvbih3LF8sQSl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj90OnQodyxfLEEpfSh1LGQsaCkpfHx0aGlzfXJldHVybiBmPW4sKGk9YykucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZi5wcm90b3R5cGUpLGkucHJvdG90eXBlLmNvbnN0cnVjdG9yPWksaS5fX3Byb3RvX189ZixjfShlKTtsLnByb3RvdHlwZS5uYW1lPWUubmFtZSxsLnByb3RvdHlwZS5jb2RlPXIsbVtyXT1sfWZ1bmN0aW9uIG8ocix0KXtpZihBcnJheS5pc0FycmF5KHIpKXt2YXIgZT1yLmxlbmd0aDtyZXR1cm4gcj1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gU3RyaW5nKGwpfSksZT4yPyJvbmUgb2YgIi5jb25jYXQodCwiICIpLmNvbmNhdChyLnNsaWNlKDAsZS0xKS5qb2luKCIsICIpLCIsIG9yICIpK3JbZS0xXTplPT09Mj8ib25lIG9mICIuY29uY2F0KHQsIiAiKS5jb25jYXQoclswXSwiIG9yICIpLmNvbmNhdChyWzFdKToib2YgIi5jb25jYXQodCwiICIpLmNvbmNhdChyWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQodCwiICIpLmNvbmNhdChTdHJpbmcocikpfXMoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24ocix0KXtyZXR1cm4nVGhlIHZhbHVlICInK3QrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK3IrJyInfSxUeXBlRXJyb3IpLHMoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihyLHQsZSl7dmFyIGwsbixpO2lmKHR5cGVvZiB0PT0ic3RyaW5nIiYmKG49Im5vdCAiLHQuc3Vic3RyKDAsbi5sZW5ndGgpPT09bik/KGw9Im11c3Qgbm90IGJlIix0PXQucmVwbGFjZSgvXm5vdCAvLCIiKSk6bD0ibXVzdCBiZSIsZnVuY3Rpb24oYyx1LGQpe3JldHVybihkPT09dm9pZCAwfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpLGMuc3Vic3RyaW5nKGQtdS5sZW5ndGgsZCk9PT11fShyLCIgYXJndW1lbnQiKSlpPSJUaGUgIi5jb25jYXQociwiICIpLmNvbmNhdChsLCIgIikuY29uY2F0KG8odCwidHlwZSIpKTtlbHNle3ZhciBmPWZ1bmN0aW9uKGMsdSxkKXtyZXR1cm4gdHlwZW9mIGQhPSJudW1iZXIiJiYoZD0wKSwhKGQrdS5sZW5ndGg+Yy5sZW5ndGgpJiZjLmluZGV4T2YodSxkKSE9PS0xfShyLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO2k9J1RoZSAiJy5jb25jYXQociwnIiAnKS5jb25jYXQoZiwiICIpLmNvbmNhdChsLCIgIikuY29uY2F0KG8odCwidHlwZSIpKX1yZXR1cm4gaSs9Ii4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgZSl9LFR5cGVFcnJvcikscygiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikscygiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKHIpe3JldHVybiJUaGUgIityKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxzKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLHMoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihyKXtyZXR1cm4iQ2Fubm90IGNhbGwgIityKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxzKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxzKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLHMoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIikscygiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLHMoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihyKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIityfSxUeXBlRXJyb3IpLHMoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLEUuZXhwb3J0cy5jb2Rlcz1tfSx7fV0sNDc4OltmdW5jdGlvbihhLEUsayl7KGZ1bmN0aW9uKG0peyhmdW5jdGlvbigpe3ZhciBzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihjKXt2YXIgdT1bXTtmb3IodmFyIGQgaW4gYyl1LnB1c2goZCk7cmV0dXJuIHV9O0UuZXhwb3J0cz1uO3ZhciBvPWEoIi4vX3N0cmVhbV9yZWFkYWJsZSIpLHI9YSgiLi9fc3RyZWFtX3dyaXRhYmxlIik7YSgiaW5oZXJpdHMiKShuLG8pO2Zvcih2YXIgdD1zKHIucHJvdG90eXBlKSxlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciBsPXRbZV07bi5wcm90b3R5cGVbbF18fChuLnByb3RvdHlwZVtsXT1yLnByb3RvdHlwZVtsXSl9ZnVuY3Rpb24gbihjKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4oYyk7by5jYWxsKHRoaXMsYyksci5jYWxsKHRoaXMsYyksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLGMmJihjLnJlYWRhYmxlPT09ITEmJih0aGlzLnJlYWRhYmxlPSExKSxjLndyaXRhYmxlPT09ITEmJih0aGlzLndyaXRhYmxlPSExKSxjLmFsbG93SGFsZk9wZW49PT0hMSYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsaSkpKX1mdW5jdGlvbiBpKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8bS5uZXh0VGljayhmLHRoaXMpfWZ1bmN0aW9uIGYoYyl7Yy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlIT09dm9pZCAwJiZ0aGlzLl93cml0YWJsZVN0YXRlIT09dm9pZCAwJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihjKXt0aGlzLl9yZWFkYWJsZVN0YXRlIT09dm9pZCAwJiZ0aGlzLl93cml0YWJsZVN0YXRlIT09dm9pZCAwJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Yyx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1jKX19KX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiX3Byb2Nlc3MiKSl9LHsiLi9fc3RyZWFtX3JlYWRhYmxlIjo0ODAsIi4vX3N0cmVhbV93cml0YWJsZSI6NDgyLF9wcm9jZXNzOjQ2Nyxpbmhlcml0czo0NDB9XSw0Nzk6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9czt2YXIgbT1hKCIuL19zdHJlYW1fdHJhbnNmb3JtIik7ZnVuY3Rpb24gcyhvKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzKSlyZXR1cm4gbmV3IHMobyk7bS5jYWxsKHRoaXMsbyl9YSgiaW5oZXJpdHMiKShzLG0pLHMucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24obyxyLHQpe3QobnVsbCxvKX19LHsiLi9fc3RyZWFtX3RyYW5zZm9ybSI6NDgxLGluaGVyaXRzOjQ0MH1dLDQ4MDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe3ZhciBvO0UuZXhwb3J0cz1CLEIuUmVhZGFibGVTdGF0ZT1VLGEoImV2ZW50cyIpLkV2ZW50RW1pdHRlcjt2YXIgcj1mdW5jdGlvbihULHgpe3JldHVybiBULmxpc3RlbmVycyh4KS5sZW5ndGh9LHQ9YSgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSIpLGU9YSgiYnVmZmVyIikuQnVmZmVyLGw9KHMhPT12b2lkIDA/czp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxuLGk9YSgidXRpbCIpO249aSYmaS5kZWJ1Z2xvZz9pLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGYsYyx1LGQ9YSgiLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0IiksaD1hKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpLHc9YSgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIikuZ2V0SGlnaFdhdGVyTWFyayxfPWEoIi4uL2Vycm9ycyIpLmNvZGVzLEE9Xy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxQPV8uRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixMPV8uRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsTj1fLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7YSgiaW5oZXJpdHMiKShCLHQpO3ZhciBEPWguZXJyb3JPckRlc3Ryb3ksRj1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBVKFQseCxJKXtvPW98fGEoIi4vX3N0cmVhbV9kdXBsZXgiKSxUPVR8fHt9LHR5cGVvZiBJIT0iYm9vbGVhbiImJihJPXggaW5zdGFuY2VvZiBvKSx0aGlzLm9iamVjdE1vZGU9ISFULm9iamVjdE1vZGUsSSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhVC5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz13KHRoaXMsVCwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixJKSx0aGlzLmJ1ZmZlcj1uZXcgZCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9VC5lbWl0Q2xvc2UhPT0hMSx0aGlzLmF1dG9EZXN0cm95PSEhVC5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1ULmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLFQuZW5jb2RpbmcmJihmfHwoZj1hKCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IGYoVC5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1ULmVuY29kaW5nKX1mdW5jdGlvbiBCKFQpe2lmKG89b3x8YSgiLi9fc3RyZWFtX2R1cGxleCIpLCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihUKTt2YXIgeD10aGlzIGluc3RhbmNlb2Ygbzt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBVKFQsdGhpcyx4KSx0aGlzLnJlYWRhYmxlPSEwLFQmJih0eXBlb2YgVC5yZWFkPT0iZnVuY3Rpb24iJiYodGhpcy5fcmVhZD1ULnJlYWQpLHR5cGVvZiBULmRlc3Ryb3k9PSJmdW5jdGlvbiImJih0aGlzLl9kZXN0cm95PVQuZGVzdHJveSkpLHQuY2FsbCh0aGlzKX1mdW5jdGlvbiBTKFQseCxJLEgsWil7bigicmVhZGFibGVBZGRDaHVuayIseCk7dmFyIFYsSz1ULl9yZWFkYWJsZVN0YXRlO2lmKHg9PT1udWxsKUsucmVhZGluZz0hMSxmdW5jdGlvbihZLEope2lmKG4oIm9uRW9mQ2h1bmsiKSwhSi5lbmRlZCl7aWYoSi5kZWNvZGVyKXt2YXIgcT1KLmRlY29kZXIuZW5kKCk7cSYmcS5sZW5ndGgmJihKLmJ1ZmZlci5wdXNoKHEpLEoubGVuZ3RoKz1KLm9iamVjdE1vZGU/MTpxLmxlbmd0aCl9Si5lbmRlZD0hMCxKLnN5bmM/cChZKTooSi5uZWVkUmVhZGFibGU9ITEsSi5lbWl0dGVkUmVhZGFibGV8fChKLmVtaXR0ZWRSZWFkYWJsZT0hMCxiKFkpKSl9fShULEspO2Vsc2UgaWYoWnx8KFY9ZnVuY3Rpb24oWSxKKXt2YXIgcTtHPUosZS5pc0J1ZmZlcihHKXx8RyBpbnN0YW5jZW9mIGx8fHR5cGVvZiBKPT0ic3RyaW5nInx8Sj09PXZvaWQgMHx8WS5vYmplY3RNb2RlfHwocT1uZXcgQSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIiwiVWludDhBcnJheSJdLEopKTt2YXIgRztyZXR1cm4gcX0oSyx4KSksVilEKFQsVik7ZWxzZSBpZihLLm9iamVjdE1vZGV8fHgmJngubGVuZ3RoPjApaWYodHlwZW9mIHg9PSJzdHJpbmcifHxLLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih4KT09PWUucHJvdG90eXBlfHwoeD1mdW5jdGlvbihZKXtyZXR1cm4gZS5mcm9tKFkpfSh4KSksSClLLmVuZEVtaXR0ZWQ/RChULG5ldyBOKTpDKFQsSyx4LCEwKTtlbHNlIGlmKEsuZW5kZWQpRChULG5ldyBQKTtlbHNle2lmKEsuZGVzdHJveWVkKXJldHVybiExO0sucmVhZGluZz0hMSxLLmRlY29kZXImJiFJPyh4PUsuZGVjb2Rlci53cml0ZSh4KSxLLm9iamVjdE1vZGV8fHgubGVuZ3RoIT09MD9DKFQsSyx4LCExKTpnKFQsSykpOkMoVCxLLHgsITEpfWVsc2UgSHx8KEsucmVhZGluZz0hMSxnKFQsSykpO3JldHVybiFLLmVuZGVkJiYoSy5sZW5ndGg8Sy5oaWdoV2F0ZXJNYXJrfHxLLmxlbmd0aD09PTApfWZ1bmN0aW9uIEMoVCx4LEksSCl7eC5mbG93aW5nJiZ4Lmxlbmd0aD09PTAmJiF4LnN5bmM/KHguYXdhaXREcmFpbj0wLFQuZW1pdCgiZGF0YSIsSSkpOih4Lmxlbmd0aCs9eC5vYmplY3RNb2RlPzE6SS5sZW5ndGgsSD94LmJ1ZmZlci51bnNoaWZ0KEkpOnguYnVmZmVyLnB1c2goSSkseC5uZWVkUmVhZGFibGUmJnAoVCkpLGcoVCx4KX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUhPT12b2lkIDAmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oVCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVQpfX0pLEIucHJvdG90eXBlLmRlc3Ryb3k9aC5kZXN0cm95LEIucHJvdG90eXBlLl91bmRlc3Ryb3k9aC51bmRlc3Ryb3ksQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oVCx4KXt4KFQpfSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKFQseCl7dmFyIEksSD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBILm9iamVjdE1vZGU/ST0hMDp0eXBlb2YgVD09InN0cmluZyImJigoeD14fHxILmRlZmF1bHRFbmNvZGluZykhPT1ILmVuY29kaW5nJiYoVD1lLmZyb20oVCx4KSx4PSIiKSxJPSEwKSxTKHRoaXMsVCx4LCExLEkpfSxCLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKFQpe3JldHVybiBTKHRoaXMsVCxudWxsLCEwLCExKX0sQi5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPT09ITF9LEIucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKFQpe2Z8fChmPWEoInN0cmluZ19kZWNvZGVyLyIpLlN0cmluZ0RlY29kZXIpO3ZhciB4PW5ldyBmKFQpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj14LHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgST10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLEg9IiI7SSE9PW51bGw7KUgrPXgud3JpdGUoSS5kYXRhKSxJPUkubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSxIIT09IiImJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goSCksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9SC5sZW5ndGgsdGhpc307ZnVuY3Rpb24gdihULHgpe3JldHVybiBUPD0wfHx4Lmxlbmd0aD09PTAmJnguZW5kZWQ/MDp4Lm9iamVjdE1vZGU/MTpUIT1UP3guZmxvd2luZyYmeC5sZW5ndGg/eC5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDp4Lmxlbmd0aDooVD54LmhpZ2hXYXRlck1hcmsmJih4LmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oSSl7cmV0dXJuIEk+PTEwNzM3NDE4MjQ/ST0xMDczNzQxODI0OihJLS0sSXw9ST4+PjEsSXw9ST4+PjIsSXw9ST4+PjQsSXw9ST4+PjgsSXw9ST4+PjE2LEkrKyksSX0oVCkpLFQ8PXgubGVuZ3RoP1Q6eC5lbmRlZD94Lmxlbmd0aDooeC5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIHAoVCl7dmFyIHg9VC5fcmVhZGFibGVTdGF0ZTtuKCJlbWl0UmVhZGFibGUiLHgubmVlZFJlYWRhYmxlLHguZW1pdHRlZFJlYWRhYmxlKSx4Lm5lZWRSZWFkYWJsZT0hMSx4LmVtaXR0ZWRSZWFkYWJsZXx8KG4oImVtaXRSZWFkYWJsZSIseC5mbG93aW5nKSx4LmVtaXR0ZWRSZWFkYWJsZT0hMCxtLm5leHRUaWNrKGIsVCkpfWZ1bmN0aW9uIGIoVCl7dmFyIHg9VC5fcmVhZGFibGVTdGF0ZTtuKCJlbWl0UmVhZGFibGVfIix4LmRlc3Ryb3llZCx4Lmxlbmd0aCx4LmVuZGVkKSx4LmRlc3Ryb3llZHx8IXgubGVuZ3RoJiYheC5lbmRlZHx8KFQuZW1pdCgicmVhZGFibGUiKSx4LmVtaXR0ZWRSZWFkYWJsZT0hMSkseC5uZWVkUmVhZGFibGU9IXguZmxvd2luZyYmIXguZW5kZWQmJngubGVuZ3RoPD14LmhpZ2hXYXRlck1hcmsseihUKX1mdW5jdGlvbiBnKFQseCl7eC5yZWFkaW5nTW9yZXx8KHgucmVhZGluZ01vcmU9ITAsbS5uZXh0VGljayh5LFQseCkpfWZ1bmN0aW9uIHkoVCx4KXtmb3IoOyF4LnJlYWRpbmcmJiF4LmVuZGVkJiYoeC5sZW5ndGg8eC5oaWdoV2F0ZXJNYXJrfHx4LmZsb3dpbmcmJngubGVuZ3RoPT09MCk7KXt2YXIgST14Lmxlbmd0aDtpZihuKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLFQucmVhZCgwKSxJPT09eC5sZW5ndGgpYnJlYWt9eC5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBNKFQpe3ZhciB4PVQuX3JlYWRhYmxlU3RhdGU7eC5yZWFkYWJsZUxpc3RlbmluZz1ULmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCx4LnJlc3VtZVNjaGVkdWxlZCYmIXgucGF1c2VkP3guZmxvd2luZz0hMDpULmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZULnJlc3VtZSgpfWZ1bmN0aW9uIE8oVCl7bigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksVC5yZWFkKDApfWZ1bmN0aW9uIFIoVCx4KXtuKCJyZXN1bWUiLHgucmVhZGluZykseC5yZWFkaW5nfHxULnJlYWQoMCkseC5yZXN1bWVTY2hlZHVsZWQ9ITEsVC5lbWl0KCJyZXN1bWUiKSx6KFQpLHguZmxvd2luZyYmIXgucmVhZGluZyYmVC5yZWFkKDApfWZ1bmN0aW9uIHooVCl7dmFyIHg9VC5fcmVhZGFibGVTdGF0ZTtmb3IobigiZmxvdyIseC5mbG93aW5nKTt4LmZsb3dpbmcmJlQucmVhZCgpIT09bnVsbDspO31mdW5jdGlvbiAkKFQseCl7cmV0dXJuIHgubGVuZ3RoPT09MD9udWxsOih4Lm9iamVjdE1vZGU/ST14LmJ1ZmZlci5zaGlmdCgpOiFUfHxUPj14Lmxlbmd0aD8oST14LmRlY29kZXI/eC5idWZmZXIuam9pbigiIik6eC5idWZmZXIubGVuZ3RoPT09MT94LmJ1ZmZlci5maXJzdCgpOnguYnVmZmVyLmNvbmNhdCh4Lmxlbmd0aCkseC5idWZmZXIuY2xlYXIoKSk6ST14LmJ1ZmZlci5jb25zdW1lKFQseC5kZWNvZGVyKSxJKTt2YXIgSX1mdW5jdGlvbiBYKFQpe3ZhciB4PVQuX3JlYWRhYmxlU3RhdGU7bigiZW5kUmVhZGFibGUiLHguZW5kRW1pdHRlZCkseC5lbmRFbWl0dGVkfHwoeC5lbmRlZD0hMCxtLm5leHRUaWNrKGoseCxUKSl9ZnVuY3Rpb24gaihULHgpe2lmKG4oImVuZFJlYWRhYmxlTlQiLFQuZW5kRW1pdHRlZCxULmxlbmd0aCksIVQuZW5kRW1pdHRlZCYmVC5sZW5ndGg9PT0wJiYoVC5lbmRFbWl0dGVkPSEwLHgucmVhZGFibGU9ITEseC5lbWl0KCJlbmQiKSxULmF1dG9EZXN0cm95KSl7dmFyIEk9eC5fd3JpdGFibGVTdGF0ZTsoIUl8fEkuYXV0b0Rlc3Ryb3kmJkkuZmluaXNoZWQpJiZ4LmRlc3Ryb3koKX19ZnVuY3Rpb24gVyhULHgpe2Zvcih2YXIgST0wLEg9VC5sZW5ndGg7STxIO0krKylpZihUW0ldPT09eClyZXR1cm4gSTtyZXR1cm4tMX1CLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKFQpe24oInJlYWQiLFQpLFQ9cGFyc2VJbnQoVCwxMCk7dmFyIHg9dGhpcy5fcmVhZGFibGVTdGF0ZSxJPVQ7aWYoVCE9PTAmJih4LmVtaXR0ZWRSZWFkYWJsZT0hMSksVD09PTAmJngubmVlZFJlYWRhYmxlJiYoKHguaGlnaFdhdGVyTWFyayE9PTA/eC5sZW5ndGg+PXguaGlnaFdhdGVyTWFyazp4Lmxlbmd0aD4wKXx8eC5lbmRlZCkpcmV0dXJuIG4oInJlYWQ6IGVtaXRSZWFkYWJsZSIseC5sZW5ndGgseC5lbmRlZCkseC5sZW5ndGg9PT0wJiZ4LmVuZGVkP1godGhpcyk6cCh0aGlzKSxudWxsO2lmKChUPXYoVCx4KSk9PT0wJiZ4LmVuZGVkKXJldHVybiB4Lmxlbmd0aD09PTAmJlgodGhpcyksbnVsbDt2YXIgSCxaPXgubmVlZFJlYWRhYmxlO3JldHVybiBuKCJuZWVkIHJlYWRhYmxlIixaKSwoeC5sZW5ndGg9PT0wfHx4Lmxlbmd0aC1UPHguaGlnaFdhdGVyTWFyaykmJm4oImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixaPSEwKSx4LmVuZGVkfHx4LnJlYWRpbmc/bigicmVhZGluZyBvciBlbmRlZCIsWj0hMSk6WiYmKG4oImRvIHJlYWQiKSx4LnJlYWRpbmc9ITAseC5zeW5jPSEwLHgubGVuZ3RoPT09MCYmKHgubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHguaGlnaFdhdGVyTWFyaykseC5zeW5jPSExLHgucmVhZGluZ3x8KFQ9dihJLHgpKSksKEg9VD4wPyQoVCx4KTpudWxsKT09PW51bGw/KHgubmVlZFJlYWRhYmxlPXgubGVuZ3RoPD14LmhpZ2hXYXRlck1hcmssVD0wKTooeC5sZW5ndGgtPVQseC5hd2FpdERyYWluPTApLHgubGVuZ3RoPT09MCYmKHguZW5kZWR8fCh4Lm5lZWRSZWFkYWJsZT0hMCksSSE9PVQmJnguZW5kZWQmJlgodGhpcykpLEghPT1udWxsJiZ0aGlzLmVtaXQoImRhdGEiLEgpLEh9LEIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKFQpe0QodGhpcyxuZXcgTCgiX3JlYWQoKSIpKX0sQi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihULHgpe3ZhciBJPXRoaXMsSD10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChILnBpcGVzQ291bnQpe2Nhc2UgMDpILnBpcGVzPVQ7YnJlYWs7Y2FzZSAxOkgucGlwZXM9W0gucGlwZXMsVF07YnJlYWs7ZGVmYXVsdDpILnBpcGVzLnB1c2goVCl9SC5waXBlc0NvdW50Kz0xLG4oInBpcGUgY291bnQ9JWQgb3B0cz0laiIsSC5waXBlc0NvdW50LHgpO3ZhciBaPSgheHx8eC5lbmQhPT0hMSkmJlQhPT1tLnN0ZG91dCYmVCE9PW0uc3RkZXJyP0s6c3Q7ZnVuY3Rpb24gVihvdCxodCl7bigib251bnBpcGUiKSxvdD09PUkmJmh0JiZodC5oYXNVbnBpcGVkPT09ITEmJihodC5oYXNVbnBpcGVkPSEwLG4oImNsZWFudXAiKSxULnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsUSksVC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixydCksVC5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLFkpLFQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixHKSxULnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLFYpLEkucmVtb3ZlTGlzdGVuZXIoImVuZCIsSyksSS5yZW1vdmVMaXN0ZW5lcigiZW5kIixzdCksSS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIscSksSj0hMCwhSC5hd2FpdERyYWlufHxULl93cml0YWJsZVN0YXRlJiYhVC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fFkoKSl9ZnVuY3Rpb24gSygpe24oIm9uZW5kIiksVC5lbmQoKX1ILmVuZEVtaXR0ZWQ/bS5uZXh0VGljayhaKTpJLm9uY2UoImVuZCIsWiksVC5vbigidW5waXBlIixWKTt2YXIgWT1mdW5jdGlvbihvdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGh0PW90Ll9yZWFkYWJsZVN0YXRlO24oInBpcGVPbkRyYWluIixodC5hd2FpdERyYWluKSxodC5hd2FpdERyYWluJiZodC5hd2FpdERyYWluLS0saHQuYXdhaXREcmFpbj09PTAmJnIob3QsImRhdGEiKSYmKGh0LmZsb3dpbmc9ITAseihvdCkpfX0oSSk7VC5vbigiZHJhaW4iLFkpO3ZhciBKPSExO2Z1bmN0aW9uIHEob3Qpe24oIm9uZGF0YSIpO3ZhciBodD1ULndyaXRlKG90KTtuKCJkZXN0LndyaXRlIixodCksaHQ9PT0hMSYmKChILnBpcGVzQ291bnQ9PT0xJiZILnBpcGVzPT09VHx8SC5waXBlc0NvdW50PjEmJlcoSC5waXBlcyxUKSE9PS0xKSYmIUomJihuKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLEguYXdhaXREcmFpbiksSC5hd2FpdERyYWluKyspLEkucGF1c2UoKSl9ZnVuY3Rpb24gRyhvdCl7bigib25lcnJvciIsb3QpLHN0KCksVC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEcpLHIoVCwiZXJyb3IiKT09PTAmJkQoVCxvdCl9ZnVuY3Rpb24gUSgpe1QucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIscnQpLHN0KCl9ZnVuY3Rpb24gcnQoKXtuKCJvbmZpbmlzaCIpLFQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixRKSxzdCgpfWZ1bmN0aW9uIHN0KCl7bigidW5waXBlIiksSS51bnBpcGUoVCl9cmV0dXJuIEkub24oImRhdGEiLHEpLGZ1bmN0aW9uKG90LGh0LGR0KXtpZih0eXBlb2Ygb3QucHJlcGVuZExpc3RlbmVyPT0iZnVuY3Rpb24iKXJldHVybiBvdC5wcmVwZW5kTGlzdGVuZXIoaHQsZHQpO290Ll9ldmVudHMmJm90Ll9ldmVudHNbaHRdP0FycmF5LmlzQXJyYXkob3QuX2V2ZW50c1todF0pP290Ll9ldmVudHNbaHRdLnVuc2hpZnQoZHQpOm90Ll9ldmVudHNbaHRdPVtkdCxvdC5fZXZlbnRzW2h0XV06b3Qub24oaHQsZHQpfShULCJlcnJvciIsRyksVC5vbmNlKCJjbG9zZSIsUSksVC5vbmNlKCJmaW5pc2giLHJ0KSxULmVtaXQoInBpcGUiLEkpLEguZmxvd2luZ3x8KG4oInBpcGUgcmVzdW1lIiksSS5yZXN1bWUoKSksVH0sQi5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKFQpe3ZhciB4PXRoaXMuX3JlYWRhYmxlU3RhdGUsST17aGFzVW5waXBlZDohMX07aWYoeC5waXBlc0NvdW50PT09MClyZXR1cm4gdGhpcztpZih4LnBpcGVzQ291bnQ9PT0xKXJldHVybiBUJiZUIT09eC5waXBlc3x8KFR8fChUPXgucGlwZXMpLHgucGlwZXM9bnVsbCx4LnBpcGVzQ291bnQ9MCx4LmZsb3dpbmc9ITEsVCYmVC5lbWl0KCJ1bnBpcGUiLHRoaXMsSSkpLHRoaXM7aWYoIVQpe3ZhciBIPXgucGlwZXMsWj14LnBpcGVzQ291bnQ7eC5waXBlcz1udWxsLHgucGlwZXNDb3VudD0wLHguZmxvd2luZz0hMTtmb3IodmFyIFY9MDtWPFo7VisrKUhbVl0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIEs9Vyh4LnBpcGVzLFQpO3JldHVybiBLPT09LTF8fCh4LnBpcGVzLnNwbGljZShLLDEpLHgucGlwZXNDb3VudC09MSx4LnBpcGVzQ291bnQ9PT0xJiYoeC5waXBlcz14LnBpcGVzWzBdKSxULmVtaXQoInVucGlwZSIsdGhpcyxJKSksdGhpc30sQi5wcm90b3R5cGUub249ZnVuY3Rpb24oVCx4KXt2YXIgST10LnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsVCx4KSxIPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIFQ9PT0iZGF0YSI/KEgucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsSC5mbG93aW5nIT09ITEmJnRoaXMucmVzdW1lKCkpOlQ9PT0icmVhZGFibGUiJiYoSC5lbmRFbWl0dGVkfHxILnJlYWRhYmxlTGlzdGVuaW5nfHwoSC5yZWFkYWJsZUxpc3RlbmluZz1ILm5lZWRSZWFkYWJsZT0hMCxILmZsb3dpbmc9ITEsSC5lbWl0dGVkUmVhZGFibGU9ITEsbigib24gcmVhZGFibGUiLEgubGVuZ3RoLEgucmVhZGluZyksSC5sZW5ndGg/cCh0aGlzKTpILnJlYWRpbmd8fG0ubmV4dFRpY2soTyx0aGlzKSkpLEl9LEIucHJvdG90eXBlLmFkZExpc3RlbmVyPUIucHJvdG90eXBlLm9uLEIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKFQseCl7dmFyIEk9dC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLFQseCk7cmV0dXJuIFQ9PT0icmVhZGFibGUiJiZtLm5leHRUaWNrKE0sdGhpcyksSX0sQi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKFQpe3ZhciB4PXQucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIFQhPT0icmVhZGFibGUiJiZUIT09dm9pZCAwfHxtLm5leHRUaWNrKE0sdGhpcykseH0sQi5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIFQ9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gVC5mbG93aW5nfHwobigicmVzdW1lIiksVC5mbG93aW5nPSFULnJlYWRhYmxlTGlzdGVuaW5nLGZ1bmN0aW9uKHgsSSl7SS5yZXN1bWVTY2hlZHVsZWR8fChJLnJlc3VtZVNjaGVkdWxlZD0hMCxtLm5leHRUaWNrKFIseCxJKSl9KHRoaXMsVCkpLFQucGF1c2VkPSExLHRoaXN9LEIucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIG4oImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmchPT0hMSYmKG4oInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpcy5fcmVhZGFibGVTdGF0ZS5wYXVzZWQ9ITAsdGhpc30sQi5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihUKXt2YXIgeD10aGlzLEk9dGhpcy5fcmVhZGFibGVTdGF0ZSxIPSExO2Zvcih2YXIgWiBpbiBULm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYobigid3JhcHBlZCBlbmQiKSxJLmRlY29kZXImJiFJLmVuZGVkKXt2YXIgSz1JLmRlY29kZXIuZW5kKCk7SyYmSy5sZW5ndGgmJngucHVzaChLKX14LnB1c2gobnVsbCl9KSxULm9uKCJkYXRhIixmdW5jdGlvbihLKXtuKCJ3cmFwcGVkIGRhdGEiKSxJLmRlY29kZXImJihLPUkuZGVjb2Rlci53cml0ZShLKSksSS5vYmplY3RNb2RlJiZLPT1udWxsfHwoSS5vYmplY3RNb2RlfHxLJiZLLmxlbmd0aCkmJih4LnB1c2goSyl8fChIPSEwLFQucGF1c2UoKSkpfSksVCl0aGlzW1pdPT09dm9pZCAwJiZ0eXBlb2YgVFtaXT09ImZ1bmN0aW9uIiYmKHRoaXNbWl09ZnVuY3Rpb24oSyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFRbS10uYXBwbHkoVCxhcmd1bWVudHMpfX0oWikpO2Zvcih2YXIgVj0wO1Y8Ri5sZW5ndGg7VisrKVQub24oRltWXSx0aGlzLmVtaXQuYmluZCh0aGlzLEZbVl0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihLKXtuKCJ3cmFwcGVkIF9yZWFkIixLKSxIJiYoSD0hMSxULnJlc3VtZSgpKX0sdGhpc30sdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmKEIucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiBjPT09dm9pZCAwJiYoYz1hKCIuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IiKSksYyh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKFQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9VCl9fSksQi5fZnJvbUxpc3Q9JCxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmKEIuZnJvbT1mdW5jdGlvbihULHgpe3JldHVybiB1PT09dm9pZCAwJiYodT1hKCIuL2ludGVybmFsL3N0cmVhbXMvZnJvbSIpKSx1KEIsVCx4KX0pfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJfcHJvY2VzcyIpLHR5cGVvZiBKdDwidSI/SnQ6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0seyIuLi9lcnJvcnMiOjQ3NywiLi9fc3RyZWFtX2R1cGxleCI6NDc4LCIuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3IiOjQ4MywiLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0Ijo0ODQsIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95Ijo0ODUsIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tIjo0ODcsIi4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZSI6NDg5LCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIjo0OTAsX3Byb2Nlc3M6NDY3LGJ1ZmZlcjoyMjAsZXZlbnRzOjQyMixpbmhlcml0czo0NDAsInN0cmluZ19kZWNvZGVyLyI6NTIyLHV0aWw6MTg4fV0sNDgxOltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPW47dmFyIG09YSgiLi4vZXJyb3JzIikuY29kZXMscz1tLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELG89bS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0sscj1tLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsdD1tLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxlPWEoIi4vX3N0cmVhbV9kdXBsZXgiKTtmdW5jdGlvbiBsKGMsdSl7dmFyIGQ9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ZC50cmFuc2Zvcm1pbmc9ITE7dmFyIGg9ZC53cml0ZWNiO2lmKGg9PT1udWxsKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgbyk7ZC53cml0ZWNodW5rPW51bGwsZC53cml0ZWNiPW51bGwsdSE9bnVsbCYmdGhpcy5wdXNoKHUpLGgoYyk7dmFyIHc9dGhpcy5fcmVhZGFibGVTdGF0ZTt3LnJlYWRpbmc9ITEsKHcubmVlZFJlYWRhYmxlfHx3Lmxlbmd0aDx3LmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKHcuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gbihjKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4oYyk7ZS5jYWxsKHRoaXMsYyksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmwuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGMmJih0eXBlb2YgYy50cmFuc2Zvcm09PSJmdW5jdGlvbiImJih0aGlzLl90cmFuc2Zvcm09Yy50cmFuc2Zvcm0pLHR5cGVvZiBjLmZsdXNoPT0iZnVuY3Rpb24iJiYodGhpcy5fZmx1c2g9Yy5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsaSl9ZnVuY3Rpb24gaSgpe3ZhciBjPXRoaXM7dHlwZW9mIHRoaXMuX2ZsdXNoIT0iZnVuY3Rpb24ifHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9mKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbih1LGQpe2YoYyx1LGQpfSl9ZnVuY3Rpb24gZihjLHUsZCl7aWYodSlyZXR1cm4gYy5lbWl0KCJlcnJvciIsdSk7aWYoZCE9bnVsbCYmYy5wdXNoKGQpLGMuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB0O2lmKGMuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgcjtyZXR1cm4gYy5wdXNoKG51bGwpfWEoImluaGVyaXRzIikobixlKSxuLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGMsdSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsZS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsYyx1KX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihjLHUsZCl7ZChuZXcgcygiX3RyYW5zZm9ybSgpIikpfSxuLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oYyx1LGQpe3ZhciBoPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKGgud3JpdGVjYj1kLGgud3JpdGVjaHVuaz1jLGgud3JpdGVlbmNvZGluZz11LCFoLnRyYW5zZm9ybWluZyl7dmFyIHc9dGhpcy5fcmVhZGFibGVTdGF0ZTsoaC5uZWVkVHJhbnNmb3JtfHx3Lm5lZWRSZWFkYWJsZXx8dy5sZW5ndGg8dy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZCh3LmhpZ2hXYXRlck1hcmspfX0sbi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oYyl7dmFyIHU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7dS53cml0ZWNodW5rPT09bnVsbHx8dS50cmFuc2Zvcm1pbmc/dS5uZWVkVHJhbnNmb3JtPSEwOih1LnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0odS53cml0ZWNodW5rLHUud3JpdGVlbmNvZGluZyx1LmFmdGVyVHJhbnNmb3JtKSl9LG4ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGMsdSl7ZS5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLGMsZnVuY3Rpb24oZCl7dShkKX0pfX0seyIuLi9lcnJvcnMiOjQ3NywiLi9fc3RyZWFtX2R1cGxleCI6NDc4LGluaGVyaXRzOjQ0MH1dLDQ4MjpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe2Z1bmN0aW9uIG8oeSl7dmFyIE09dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXsoZnVuY3Rpb24oTyxSLHope3ZhciAkPU8uZW50cnk7Zm9yKE8uZW50cnk9bnVsbDskOyl7dmFyIFg9JC5jYWxsYmFjaztSLnBlbmRpbmdjYi0tLFgoeiksJD0kLm5leHR9Ui5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1PfSkoTSx5KX19dmFyIHI7RS5leHBvcnRzPUIsQi5Xcml0YWJsZVN0YXRlPVU7dmFyIHQ9e2RlcHJlY2F0ZTphKCJ1dGlsLWRlcHJlY2F0ZSIpfSxlPWEoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxsPWEoImJ1ZmZlciIpLkJ1ZmZlcixuPShzIT09dm9pZCAwP3M6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30saSxmPWEoIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IiksYz1hKCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiKS5nZXRIaWdoV2F0ZXJNYXJrLHU9YSgiLi4vZXJyb3JzIikuY29kZXMsZD11LkVSUl9JTlZBTElEX0FSR19UWVBFLGg9dS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCx3PXUuRVJSX01VTFRJUExFX0NBTExCQUNLLF89dS5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLEE9dS5FUlJfU1RSRUFNX0RFU1RST1lFRCxQPXUuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxMPXUuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsTj11LkVSUl9VTktOT1dOX0VOQ09ESU5HLEQ9Zi5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBGKCl7fWZ1bmN0aW9uIFUoeSxNLE8pe3I9cnx8YSgiLi9fc3RyZWFtX2R1cGxleCIpLHk9eXx8e30sdHlwZW9mIE8hPSJib29sZWFuIiYmKE89TSBpbnN0YW5jZW9mIHIpLHRoaXMub2JqZWN0TW9kZT0hIXkub2JqZWN0TW9kZSxPJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF5LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPWModGhpcyx5LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLE8pLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBSPXkuZGVjb2RlU3RyaW5ncz09PSExO3RoaXMuZGVjb2RlU3RyaW5ncz0hUix0aGlzLmRlZmF1bHRFbmNvZGluZz15LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oeil7KGZ1bmN0aW9uKCQsWCl7dmFyIGo9JC5fd3JpdGFibGVTdGF0ZSxXPWouc3luYyxUPWoud3JpdGVjYjtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgdztpZihmdW5jdGlvbihJKXtJLndyaXRpbmc9ITEsSS53cml0ZWNiPW51bGwsSS5sZW5ndGgtPUkud3JpdGVsZW4sSS53cml0ZWxlbj0wfShqKSxYKShmdW5jdGlvbihJLEgsWixWLEspey0tSC5wZW5kaW5nY2IsWj8obS5uZXh0VGljayhLLFYpLG0ubmV4dFRpY2soZyxJLEgpLEkuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEQoSSxWKSk6KEsoViksSS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRChJLFYpLGcoSSxIKSl9KSgkLGosVyxYLFQpO2Vsc2V7dmFyIHg9cChqKXx8JC5kZXN0cm95ZWQ7eHx8ai5jb3JrZWR8fGouYnVmZmVyUHJvY2Vzc2luZ3x8IWouYnVmZmVyZWRSZXF1ZXN0fHx2KCQsaiksVz9tLm5leHRUaWNrKEMsJCxqLHgsVCk6QygkLGoseCxUKX19KShNLHopfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9eS5lbWl0Q2xvc2UhPT0hMSx0aGlzLmF1dG9EZXN0cm95PSEheS5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IG8odGhpcyl9ZnVuY3Rpb24gQih5KXt2YXIgTT10aGlzIGluc3RhbmNlb2Yocj1yfHxhKCIuL19zdHJlYW1fZHVwbGV4IikpO2lmKCFNJiYhaS5jYWxsKEIsdGhpcykpcmV0dXJuIG5ldyBCKHkpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IFUoeSx0aGlzLE0pLHRoaXMud3JpdGFibGU9ITAseSYmKHR5cGVvZiB5LndyaXRlPT0iZnVuY3Rpb24iJiYodGhpcy5fd3JpdGU9eS53cml0ZSksdHlwZW9mIHkud3JpdGV2PT0iZnVuY3Rpb24iJiYodGhpcy5fd3JpdGV2PXkud3JpdGV2KSx0eXBlb2YgeS5kZXN0cm95PT0iZnVuY3Rpb24iJiYodGhpcy5fZGVzdHJveT15LmRlc3Ryb3kpLHR5cGVvZiB5LmZpbmFsPT0iZnVuY3Rpb24iJiYodGhpcy5fZmluYWw9eS5maW5hbCkpLGUuY2FsbCh0aGlzKX1mdW5jdGlvbiBTKHksTSxPLFIseiwkLFgpe00ud3JpdGVsZW49UixNLndyaXRlY2I9WCxNLndyaXRpbmc9ITAsTS5zeW5jPSEwLE0uZGVzdHJveWVkP00ub253cml0ZShuZXcgQSgid3JpdGUiKSk6Tz95Ll93cml0ZXYoeixNLm9ud3JpdGUpOnkuX3dyaXRlKHosJCxNLm9ud3JpdGUpLE0uc3luYz0hMX1mdW5jdGlvbiBDKHksTSxPLFIpe098fGZ1bmN0aW9uKHosJCl7JC5sZW5ndGg9PT0wJiYkLm5lZWREcmFpbiYmKCQubmVlZERyYWluPSExLHouZW1pdCgiZHJhaW4iKSl9KHksTSksTS5wZW5kaW5nY2ItLSxSKCksZyh5LE0pfWZ1bmN0aW9uIHYoeSxNKXtNLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIE89TS5idWZmZXJlZFJlcXVlc3Q7aWYoeS5fd3JpdGV2JiZPJiZPLm5leHQpe3ZhciBSPU0uYnVmZmVyZWRSZXF1ZXN0Q291bnQsej1uZXcgQXJyYXkoUiksJD1NLmNvcmtlZFJlcXVlc3RzRnJlZTskLmVudHJ5PU87Zm9yKHZhciBYPTAsaj0hMDtPOyl6W1hdPU8sTy5pc0J1Znx8KGo9ITEpLE89Ty5uZXh0LFgrPTE7ei5hbGxCdWZmZXJzPWosUyh5LE0sITAsTS5sZW5ndGgseiwiIiwkLmZpbmlzaCksTS5wZW5kaW5nY2IrKyxNLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCwkLm5leHQ/KE0uY29ya2VkUmVxdWVzdHNGcmVlPSQubmV4dCwkLm5leHQ9bnVsbCk6TS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IG8oTSksTS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtPOyl7dmFyIFc9Ty5jaHVuayxUPU8uZW5jb2RpbmcseD1PLmNhbGxiYWNrO2lmKFMoeSxNLCExLE0ub2JqZWN0TW9kZT8xOlcubGVuZ3RoLFcsVCx4KSxPPU8ubmV4dCxNLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sTS53cml0aW5nKWJyZWFrfU89PT1udWxsJiYoTS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfU0uYnVmZmVyZWRSZXF1ZXN0PU8sTS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHAoeSl7cmV0dXJuIHkuZW5kaW5nJiZ5Lmxlbmd0aD09PTAmJnkuYnVmZmVyZWRSZXF1ZXN0PT09bnVsbCYmIXkuZmluaXNoZWQmJiF5LndyaXRpbmd9ZnVuY3Rpb24gYih5LE0pe3kuX2ZpbmFsKGZ1bmN0aW9uKE8pe00ucGVuZGluZ2NiLS0sTyYmRCh5LE8pLE0ucHJlZmluaXNoZWQ9ITAseS5lbWl0KCJwcmVmaW5pc2giKSxnKHksTSl9KX1mdW5jdGlvbiBnKHksTSl7dmFyIE89cChNKTtpZihPJiYoZnVuY3Rpb24oeiwkKXskLnByZWZpbmlzaGVkfHwkLmZpbmFsQ2FsbGVkfHwodHlwZW9mIHouX2ZpbmFsIT0iZnVuY3Rpb24ifHwkLmRlc3Ryb3llZD8oJC5wcmVmaW5pc2hlZD0hMCx6LmVtaXQoInByZWZpbmlzaCIpKTooJC5wZW5kaW5nY2IrKywkLmZpbmFsQ2FsbGVkPSEwLG0ubmV4dFRpY2soYix6LCQpKSl9KHksTSksTS5wZW5kaW5nY2I9PT0wJiYoTS5maW5pc2hlZD0hMCx5LmVtaXQoImZpbmlzaCIpLE0uYXV0b0Rlc3Ryb3kpKSl7dmFyIFI9eS5fcmVhZGFibGVTdGF0ZTsoIVJ8fFIuYXV0b0Rlc3Ryb3kmJlIuZW5kRW1pdHRlZCkmJnkuZGVzdHJveSgpfXJldHVybiBPfWEoImluaGVyaXRzIikoQixlKSxVLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHk9dGhpcy5idWZmZXJlZFJlcXVlc3QsTT1bXTt5OylNLnB1c2goeSkseT15Lm5leHQ7cmV0dXJuIE19LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShVLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OnQuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLmhhc0luc3RhbmNlJiZ0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV09PSJmdW5jdGlvbiI/KGk9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbih5KXtyZXR1cm4hIWkuY2FsbCh0aGlzLHkpfHx0aGlzPT09QiYmeSYmeS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFV9fSkpOmk9ZnVuY3Rpb24oeSl7cmV0dXJuIHkgaW5zdGFuY2VvZiB0aGlzfSxCLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7RCh0aGlzLG5ldyBfKX0sQi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeSxNLE8pe3ZhciBSLHo9dGhpcy5fd3JpdGFibGVTdGF0ZSwkPSExLFg9IXoub2JqZWN0TW9kZSYmKFI9eSxsLmlzQnVmZmVyKFIpfHxSIGluc3RhbmNlb2Ygbik7cmV0dXJuIFgmJiFsLmlzQnVmZmVyKHkpJiYoeT1mdW5jdGlvbihqKXtyZXR1cm4gbC5mcm9tKGopfSh5KSksdHlwZW9mIE09PSJmdW5jdGlvbiImJihPPU0sTT1udWxsKSxYP009ImJ1ZmZlciI6TXx8KE09ei5kZWZhdWx0RW5jb2RpbmcpLHR5cGVvZiBPIT0iZnVuY3Rpb24iJiYoTz1GKSx6LmVuZGluZz9mdW5jdGlvbihqLFcpe3ZhciBUPW5ldyBMO0QoaixUKSxtLm5leHRUaWNrKFcsVCl9KHRoaXMsTyk6KFh8fGZ1bmN0aW9uKGosVyxULHgpe3ZhciBJO3JldHVybiBUPT09bnVsbD9JPW5ldyBQOnR5cGVvZiBUPT0ic3RyaW5nInx8Vy5vYmplY3RNb2RlfHwoST1uZXcgZCgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sVCkpLCFJfHwoRChqLEkpLG0ubmV4dFRpY2soeCxJKSwhMSl9KHRoaXMseix5LE8pKSYmKHoucGVuZGluZ2NiKyssJD1mdW5jdGlvbihqLFcsVCx4LEksSCl7aWYoIVQpe3ZhciBaPWZ1bmN0aW9uKEoscSxHKXtyZXR1cm4gSi5vYmplY3RNb2RlfHxKLmRlY29kZVN0cmluZ3M9PT0hMXx8dHlwZW9mIHEhPSJzdHJpbmcifHwocT1sLmZyb20ocSxHKSkscX0oVyx4LEkpO3ghPT1aJiYoVD0hMCxJPSJidWZmZXIiLHg9Wil9dmFyIFY9Vy5vYmplY3RNb2RlPzE6eC5sZW5ndGg7Vy5sZW5ndGgrPVY7dmFyIEs9Vy5sZW5ndGg8Vy5oaWdoV2F0ZXJNYXJrO2lmKEt8fChXLm5lZWREcmFpbj0hMCksVy53cml0aW5nfHxXLmNvcmtlZCl7dmFyIFk9Vy5sYXN0QnVmZmVyZWRSZXF1ZXN0O1cubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6eCxlbmNvZGluZzpJLGlzQnVmOlQsY2FsbGJhY2s6SCxuZXh0Om51bGx9LFk/WS5uZXh0PVcubGFzdEJ1ZmZlcmVkUmVxdWVzdDpXLmJ1ZmZlcmVkUmVxdWVzdD1XLmxhc3RCdWZmZXJlZFJlcXVlc3QsVy5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIFMoaixXLCExLFYseCxJLEgpO3JldHVybiBLfSh0aGlzLHosWCx5LE0sTykpLCR9LEIucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxCLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgeT10aGlzLl93cml0YWJsZVN0YXRlO3kuY29ya2VkJiYoeS5jb3JrZWQtLSx5LndyaXRpbmd8fHkuY29ya2VkfHx5LmJ1ZmZlclByb2Nlc3Npbmd8fCF5LmJ1ZmZlcmVkUmVxdWVzdHx8dih0aGlzLHkpKX0sQi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHkpe2lmKHR5cGVvZiB5PT0ic3RyaW5nIiYmKHk9eS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh5KyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IE4oeSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksQi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHksTSxPKXtPKG5ldyBoKCJfd3JpdGUoKSIpKX0sQi5wcm90b3R5cGUuX3dyaXRldj1udWxsLEIucHJvdG90eXBlLmVuZD1mdW5jdGlvbih5LE0sTyl7dmFyIFI9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4gdHlwZW9mIHk9PSJmdW5jdGlvbiI/KE89eSx5PW51bGwsTT1udWxsKTp0eXBlb2YgTT09ImZ1bmN0aW9uIiYmKE89TSxNPW51bGwpLHkhPW51bGwmJnRoaXMud3JpdGUoeSxNKSxSLmNvcmtlZCYmKFIuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksUi5lbmRpbmd8fGZ1bmN0aW9uKHosJCxYKXskLmVuZGluZz0hMCxnKHosJCksWCYmKCQuZmluaXNoZWQ/bS5uZXh0VGljayhYKTp6Lm9uY2UoImZpbmlzaCIsWCkpLCQuZW5kZWQ9ITAsei53cml0YWJsZT0hMX0odGhpcyxSLE8pLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUhPT12b2lkIDAmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oeSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXkpfX0pLEIucHJvdG90eXBlLmRlc3Ryb3k9Zi5kZXN0cm95LEIucHJvdG90eXBlLl91bmRlc3Ryb3k9Zi51bmRlc3Ryb3ksQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oeSxNKXtNKHkpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiX3Byb2Nlc3MiKSx0eXBlb2YgSnQ8InUiP0p0OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHsiLi4vZXJyb3JzIjo0NzcsIi4vX3N0cmVhbV9kdXBsZXgiOjQ3OCwiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiOjQ4NSwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIjo0ODksIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iOjQ5MCxfcHJvY2Vzczo0NjcsYnVmZmVyOjIyMCxpbmhlcml0czo0NDAsInV0aWwtZGVwcmVjYXRlIjo1MjR9XSw0ODM6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIHM7ZnVuY3Rpb24gbyhBLFAsTCl7cmV0dXJuKFA9ZnVuY3Rpb24oTil7dmFyIEQ9ZnVuY3Rpb24oRixVKXtpZih0eXBlb2YgRiE9Im9iamVjdCJ8fEY9PT1udWxsKXJldHVybiBGO3ZhciBCPUZbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihCIT09dm9pZCAwKXt2YXIgUz1CLmNhbGwoRixVKTtpZih0eXBlb2YgUyE9Im9iamVjdCIpcmV0dXJuIFM7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oVT09PSJzdHJpbmciP1N0cmluZzpOdW1iZXIpKEYpfShOLCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIEQ9PSJzeW1ib2wiP0Q6U3RyaW5nKEQpfShQKSlpbiBBP09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLFAse3ZhbHVlOkwsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpBW1BdPUwsQX12YXIgcj1hKCIuL2VuZC1vZi1zdHJlYW0iKSx0PVN5bWJvbCgibGFzdFJlc29sdmUiKSxlPVN5bWJvbCgibGFzdFJlamVjdCIpLGw9U3ltYm9sKCJlcnJvciIpLG49U3ltYm9sKCJlbmRlZCIpLGk9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLGY9U3ltYm9sKCJoYW5kbGVQcm9taXNlIiksYz1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIHUoQSxQKXtyZXR1cm57dmFsdWU6QSxkb25lOlB9fWZ1bmN0aW9uIGQoQSl7dmFyIFA9QVt0XTtpZihQIT09bnVsbCl7dmFyIEw9QVtjXS5yZWFkKCk7TCE9PW51bGwmJihBW2ldPW51bGwsQVt0XT1udWxsLEFbZV09bnVsbCxQKHUoTCwhMSkpKX19ZnVuY3Rpb24gaChBKXttLm5leHRUaWNrKGQsQSl9dmFyIHc9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksXz1PYmplY3Quc2V0UHJvdG90eXBlT2YoKG8ocz17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2NdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIEE9dGhpcyxQPXRoaXNbbF07aWYoUCE9PW51bGwpcmV0dXJuIFByb21pc2UucmVqZWN0KFApO2lmKHRoaXNbbl0pcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1KHZvaWQgMCwhMCkpO2lmKHRoaXNbY10uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihGLFUpe20ubmV4dFRpY2soZnVuY3Rpb24oKXtBW2xdP1UoQVtsXSk6Rih1KHZvaWQgMCwhMCkpfSl9KTt2YXIgTCxOPXRoaXNbaV07aWYoTilMPW5ldyBQcm9taXNlKGZ1bmN0aW9uKEYsVSl7cmV0dXJuIGZ1bmN0aW9uKEIsUyl7Ri50aGVuKGZ1bmN0aW9uKCl7VVtuXT9CKHUodm9pZCAwLCEwKSk6VVtmXShCLFMpfSxTKX19KE4sdGhpcykpO2Vsc2V7dmFyIEQ9dGhpc1tjXS5yZWFkKCk7aWYoRCE9PW51bGwpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1KEQsITEpKTtMPW5ldyBQcm9taXNlKHRoaXNbZl0pfXJldHVybiB0aGlzW2ldPUwsTH19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvKHMsInJldHVybiIsZnVuY3Rpb24oKXt2YXIgQT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihQLEwpe0FbY10uZGVzdHJveShudWxsLGZ1bmN0aW9uKE4pe04/TChOKTpQKHUodm9pZCAwLCEwKSl9KX0pfSkscyksdyk7RS5leHBvcnRzPWZ1bmN0aW9uKEEpe3ZhciBQLEw9T2JqZWN0LmNyZWF0ZShfLChvKFA9e30sYyx7dmFsdWU6QSx3cml0YWJsZTohMH0pLG8oUCx0LHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksbyhQLGUse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxvKFAsbCx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLG8oUCxuLHt2YWx1ZTpBLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxvKFAsZix7dmFsdWU6ZnVuY3Rpb24oTixEKXt2YXIgRj1MW2NdLnJlYWQoKTtGPyhMW2ldPW51bGwsTFt0XT1udWxsLExbZV09bnVsbCxOKHUoRiwhMSkpKTooTFt0XT1OLExbZV09RCl9LHdyaXRhYmxlOiEwfSksUCkpO3JldHVybiBMW2ldPW51bGwscihBLGZ1bmN0aW9uKE4pe2lmKE4mJk4uY29kZSE9PSJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIpe3ZhciBEPUxbZV07cmV0dXJuIEQhPT1udWxsJiYoTFtpXT1udWxsLExbdF09bnVsbCxMW2VdPW51bGwsRChOKSksdm9pZChMW2xdPU4pfXZhciBGPUxbdF07RiE9PW51bGwmJihMW2ldPW51bGwsTFt0XT1udWxsLExbZV09bnVsbCxGKHUodm9pZCAwLCEwKSkpLExbbl09ITB9KSxBLm9uKCJyZWFkYWJsZSIsaC5iaW5kKG51bGwsTCkpLEx9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJfcHJvY2VzcyIpKX0seyIuL2VuZC1vZi1zdHJlYW0iOjQ4NixfcHJvY2Vzczo0Njd9XSw0ODQ6W2Z1bmN0aW9uKGEsRSxrKXtmdW5jdGlvbiBtKGksZil7dmFyIGM9T2JqZWN0LmtleXMoaSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhpKTtmJiYodT11LmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLGQpLmVudW1lcmFibGV9KSksYy5wdXNoLmFwcGx5KGMsdSl9cmV0dXJuIGN9ZnVuY3Rpb24gcyhpKXtmb3IodmFyIGY9MTtmPGFyZ3VtZW50cy5sZW5ndGg7ZisrKXt2YXIgYz1hcmd1bWVudHNbZl0hPW51bGw/YXJndW1lbnRzW2ZdOnt9O2YlMj9tKE9iamVjdChjKSwhMCkuZm9yRWFjaChmdW5jdGlvbih1KXtvKGksdSxjW3VdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYykpOm0oT2JqZWN0KGMpKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLHUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLHUpKX0pfXJldHVybiBpfWZ1bmN0aW9uIG8oaSxmLGMpe3JldHVybihmPXQoZikpaW4gaT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaSxmLHt2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6aVtmXT1jLGl9ZnVuY3Rpb24gcihpLGYpe2Zvcih2YXIgYz0wO2M8Zi5sZW5ndGg7YysrKXt2YXIgdT1mW2NdO3UuZW51bWVyYWJsZT11LmVudW1lcmFibGV8fCExLHUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiB1JiYodS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksdCh1LmtleSksdSl9fWZ1bmN0aW9uIHQoaSl7dmFyIGY9ZnVuY3Rpb24oYyx1KXtpZih0eXBlb2YgYyE9Im9iamVjdCJ8fGM9PT1udWxsKXJldHVybiBjO3ZhciBkPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihkIT09dm9pZCAwKXt2YXIgaD1kLmNhbGwoYyx1KTtpZih0eXBlb2YgaCE9Im9iamVjdCIpcmV0dXJuIGg7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4odT09PSJzdHJpbmciP1N0cmluZzpOdW1iZXIpKGMpfShpLCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIGY9PSJzeW1ib2wiP2Y6U3RyaW5nKGYpfXZhciBlPWEoImJ1ZmZlciIpLkJ1ZmZlcixsPWEoInV0aWwiKS5pbnNwZWN0LG49bCYmbC5jdXN0b218fCJpbnNwZWN0IjtFLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7KGZ1bmN0aW9uKHUsZCl7aWYoISh1IGluc3RhbmNlb2YgZCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLGkpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGYsYztyZXR1cm4gZj1pLChjPVt7a2V5OiJwdXNoIix2YWx1ZTpmdW5jdGlvbih1KXt2YXIgZD17ZGF0YTp1LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1kOnRoaXMuaGVhZD1kLHRoaXMudGFpbD1kLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbih1KXt2YXIgZD17ZGF0YTp1LG5leHQ6dGhpcy5oZWFkfTt0aGlzLmxlbmd0aD09PTAmJih0aGlzLnRhaWw9ZCksdGhpcy5oZWFkPWQsKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubGVuZ3RoIT09MCl7dmFyIHU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMubGVuZ3RoPT09MT90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsdX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKHUpe2lmKHRoaXMubGVuZ3RoPT09MClyZXR1cm4iIjtmb3IodmFyIGQ9dGhpcy5oZWFkLGg9IiIrZC5kYXRhO2Q9ZC5uZXh0OyloKz11K2QuZGF0YTtyZXR1cm4gaH19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24odSl7aWYodGhpcy5sZW5ndGg9PT0wKXJldHVybiBlLmFsbG9jKDApO2Zvcih2YXIgZCxoLHcsXz1lLmFsbG9jVW5zYWZlKHU+Pj4wKSxBPXRoaXMuaGVhZCxQPTA7QTspZD1BLmRhdGEsaD1fLHc9UCxlLnByb3RvdHlwZS5jb3B5LmNhbGwoZCxoLHcpLFArPUEuZGF0YS5sZW5ndGgsQT1BLm5leHQ7cmV0dXJuIF99fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbih1LGQpe3ZhciBoO3JldHVybiB1PHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8oaD10aGlzLmhlYWQuZGF0YS5zbGljZSgwLHUpLHRoaXMuaGVhZC5kYXRhPXRoaXMuaGVhZC5kYXRhLnNsaWNlKHUpKTpoPXU9PT10aGlzLmhlYWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOmQ/dGhpcy5fZ2V0U3RyaW5nKHUpOnRoaXMuX2dldEJ1ZmZlcih1KSxofX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24odSl7dmFyIGQ9dGhpcy5oZWFkLGg9MSx3PWQuZGF0YTtmb3IodS09dy5sZW5ndGg7ZD1kLm5leHQ7KXt2YXIgXz1kLmRhdGEsQT11Pl8ubGVuZ3RoP18ubGVuZ3RoOnU7aWYoQT09PV8ubGVuZ3RoP3crPV86dys9Xy5zbGljZSgwLHUpLCh1LT1BKT09MCl7QT09PV8ubGVuZ3RoPygrK2gsZC5uZXh0P3RoaXMuaGVhZD1kLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPWQsZC5kYXRhPV8uc2xpY2UoQSkpO2JyZWFrfSsraH1yZXR1cm4gdGhpcy5sZW5ndGgtPWgsd319LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHUpe3ZhciBkPWUuYWxsb2NVbnNhZmUodSksaD10aGlzLmhlYWQsdz0xO2ZvcihoLmRhdGEuY29weShkKSx1LT1oLmRhdGEubGVuZ3RoO2g9aC5uZXh0Oyl7dmFyIF89aC5kYXRhLEE9dT5fLmxlbmd0aD9fLmxlbmd0aDp1O2lmKF8uY29weShkLGQubGVuZ3RoLXUsMCxBKSwodS09QSk9PTApe0E9PT1fLmxlbmd0aD8oKyt3LGgubmV4dD90aGlzLmhlYWQ9aC5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1oLGguZGF0YT1fLnNsaWNlKEEpKTticmVha30rK3d9cmV0dXJuIHRoaXMubGVuZ3RoLT13LGR9fSx7a2V5Om4sdmFsdWU6ZnVuY3Rpb24odSxkKXtyZXR1cm4gbCh0aGlzLHMocyh7fSxkKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSYmcihmLnByb3RvdHlwZSxjKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxpfSgpfSx7YnVmZmVyOjIyMCx1dGlsOjE4OH1dLDQ4NTpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXtmdW5jdGlvbiBzKHQsZSl7cih0LGUpLG8odCl9ZnVuY3Rpb24gbyh0KXt0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHQuX3JlYWRhYmxlU3RhdGUmJiF0Ll9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8dC5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIHIodCxlKXt0LmVtaXQoImVycm9yIixlKX1FLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24odCxlKXt2YXIgbD10aGlzLG49dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsaT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtyZXR1cm4gbnx8aT8oZT9lKHQpOnQmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5uZXh0VGljayhyLHRoaXMsdCkpOm0ubmV4dFRpY2socix0aGlzLHQpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kodHx8bnVsbCxmdW5jdGlvbihmKXshZSYmZj9sLl93cml0YWJsZVN0YXRlP2wuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP20ubmV4dFRpY2sobyxsKToobC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5uZXh0VGljayhzLGwsZikpOm0ubmV4dFRpY2socyxsLGYpOmU/KG0ubmV4dFRpY2sobyxsKSxlKGYpKTptLm5leHRUaWNrKG8sbCl9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbih0LGUpe3ZhciBsPXQuX3JlYWRhYmxlU3RhdGUsbj10Ll93cml0YWJsZVN0YXRlO2wmJmwuYXV0b0Rlc3Ryb3l8fG4mJm4uYXV0b0Rlc3Ryb3k/dC5kZXN0cm95KGUpOnQuZW1pdCgiZXJyb3IiLGUpfX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NDY3fV0sNDg2OltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gcygpe31FLmV4cG9ydHM9ZnVuY3Rpb24gbyhyLHQsZSl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIG8ocixudWxsLHQpO3R8fCh0PXt9KSxlPWZ1bmN0aW9uKEEpe3ZhciBQPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFQKXtQPSEwO2Zvcih2YXIgTD1hcmd1bWVudHMubGVuZ3RoLE49bmV3IEFycmF5KEwpLEQ9MDtEPEw7RCsrKU5bRF09YXJndW1lbnRzW0RdO0EuYXBwbHkodGhpcyxOKX19fShlfHxzKTt2YXIgbD10LnJlYWRhYmxlfHx0LnJlYWRhYmxlIT09ITEmJnIucmVhZGFibGUsbj10LndyaXRhYmxlfHx0LndyaXRhYmxlIT09ITEmJnIud3JpdGFibGUsaT1mdW5jdGlvbigpe3Iud3JpdGFibGV8fGMoKX0sZj1yLl93cml0YWJsZVN0YXRlJiZyLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLGM9ZnVuY3Rpb24oKXtuPSExLGY9ITAsbHx8ZS5jYWxsKHIpfSx1PXIuX3JlYWRhYmxlU3RhdGUmJnIuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxkPWZ1bmN0aW9uKCl7bD0hMSx1PSEwLG58fGUuY2FsbChyKX0saD1mdW5jdGlvbihBKXtlLmNhbGwocixBKX0sdz1mdW5jdGlvbigpe3ZhciBBO3JldHVybiBsJiYhdT8oci5fcmVhZGFibGVTdGF0ZSYmci5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KEE9bmV3IG0pLGUuY2FsbChyLEEpKTpuJiYhZj8oci5fd3JpdGFibGVTdGF0ZSYmci5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KEE9bmV3IG0pLGUuY2FsbChyLEEpKTp2b2lkIDB9LF89ZnVuY3Rpb24oKXtyLnJlcS5vbigiZmluaXNoIixjKX07cmV0dXJuIGZ1bmN0aW9uKEEpe3JldHVybiBBLnNldEhlYWRlciYmdHlwZW9mIEEuYWJvcnQ9PSJmdW5jdGlvbiJ9KHIpPyhyLm9uKCJjb21wbGV0ZSIsYyksci5vbigiYWJvcnQiLHcpLHIucmVxP18oKTpyLm9uKCJyZXF1ZXN0IixfKSk6biYmIXIuX3dyaXRhYmxlU3RhdGUmJihyLm9uKCJlbmQiLGkpLHIub24oImNsb3NlIixpKSksci5vbigiZW5kIixkKSxyLm9uKCJmaW5pc2giLGMpLHQuZXJyb3IhPT0hMSYmci5vbigiZXJyb3IiLGgpLHIub24oImNsb3NlIix3KSxmdW5jdGlvbigpe3IucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixjKSxyLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsdyksci5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsXyksci5yZXEmJnIucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGMpLHIucmVtb3ZlTGlzdGVuZXIoImVuZCIsaSksci5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGkpLHIucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsYyksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixkKSxyLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsaCksci5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHcpfX19LHsiLi4vLi4vLi4vZXJyb3JzIjo0Nzd9XSw0ODc6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0se31dLDQ4ODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtLHM9YSgiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMsbz1zLkVSUl9NSVNTSU5HX0FSR1Mscj1zLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIHQoZil7aWYoZil0aHJvdyBmfWZ1bmN0aW9uIGUoZixjLHUsZCl7ZD1mdW5jdGlvbihfKXt2YXIgQT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtBfHwoQT0hMCxfLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KGQpO3ZhciBoPSExO2Yub24oImNsb3NlIixmdW5jdGlvbigpe2g9ITB9KSxtPT09dm9pZCAwJiYobT1hKCIuL2VuZC1vZi1zdHJlYW0iKSksbShmLHtyZWFkYWJsZTpjLHdyaXRhYmxlOnV9LGZ1bmN0aW9uKF8pe2lmKF8pcmV0dXJuIGQoXyk7aD0hMCxkKCl9KTt2YXIgdz0hMTtyZXR1cm4gZnVuY3Rpb24oXyl7aWYoIWgmJiF3KXJldHVybiB3PSEwLGZ1bmN0aW9uKEEpe3JldHVybiBBLnNldEhlYWRlciYmdHlwZW9mIEEuYWJvcnQ9PSJmdW5jdGlvbiJ9KGYpP2YuYWJvcnQoKTp0eXBlb2YgZi5kZXN0cm95PT0iZnVuY3Rpb24iP2YuZGVzdHJveSgpOnZvaWQgZChffHxuZXcgcigicGlwZSIpKX19ZnVuY3Rpb24gbChmKXtmKCl9ZnVuY3Rpb24gbihmLGMpe3JldHVybiBmLnBpcGUoYyl9ZnVuY3Rpb24gaShmKXtyZXR1cm4gZi5sZW5ndGg/dHlwZW9mIGZbZi5sZW5ndGgtMV0hPSJmdW5jdGlvbiI/dDpmLnBvcCgpOnR9RS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsYz1uZXcgQXJyYXkoZiksdT0wO3U8Zjt1KyspY1t1XT1hcmd1bWVudHNbdV07dmFyIGQsaD1pKGMpO2lmKEFycmF5LmlzQXJyYXkoY1swXSkmJihjPWNbMF0pLGMubGVuZ3RoPDIpdGhyb3cgbmV3IG8oInN0cmVhbXMiKTt2YXIgdz1jLm1hcChmdW5jdGlvbihfLEEpe3ZhciBQPUE8Yy5sZW5ndGgtMTtyZXR1cm4gZShfLFAsQT4wLGZ1bmN0aW9uKEwpe2R8fChkPUwpLEwmJncuZm9yRWFjaChsKSxQfHwody5mb3JFYWNoKGwpLGgoZCkpfSl9KTtyZXR1cm4gYy5yZWR1Y2Uobil9fSx7Ii4uLy4uLy4uL2Vycm9ycyI6NDc3LCIuL2VuZC1vZi1zdHJlYW0iOjQ4Nn1dLDQ4OTpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoIi4uLy4uLy4uL2Vycm9ycyIpLmNvZGVzLkVSUl9JTlZBTElEX09QVF9WQUxVRTtFLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24ocyxvLHIsdCl7dmFyIGU9ZnVuY3Rpb24obCxuLGkpe3JldHVybiBsLmhpZ2hXYXRlck1hcmshPW51bGw/bC5oaWdoV2F0ZXJNYXJrOm4/bFtpXTpudWxsfShvLHQscik7aWYoZSE9bnVsbCl7aWYoIWlzRmluaXRlKGUpfHxNYXRoLmZsb29yKGUpIT09ZXx8ZTwwKXRocm93IG5ldyBtKHQ/cjoiaGlnaFdhdGVyTWFyayIsZSk7cmV0dXJuIE1hdGguZmxvb3IoZSl9cmV0dXJuIHMub2JqZWN0TW9kZT8xNjoxNjM4NH19fSx7Ii4uLy4uLy4uL2Vycm9ycyI6NDc3fV0sNDkwOltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWEoImV2ZW50cyIpLkV2ZW50RW1pdHRlcn0se2V2ZW50czo0MjJ9XSw0OTE6W2Z1bmN0aW9uKGEsRSxrKXsoaz1FLmV4cG9ydHM9YSgiLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qcyIpKS5TdHJlYW09ayxrLlJlYWRhYmxlPWssay5Xcml0YWJsZT1hKCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIiksay5EdXBsZXg9YSgiLi9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxrLlRyYW5zZm9ybT1hKCIuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qcyIpLGsuUGFzc1Rocm91Z2g9YSgiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyIpLGsuZmluaXNoZWQ9YSgiLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksay5waXBlbGluZT1hKCIuL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lLmpzIil9LHsiLi9saWIvX3N0cmVhbV9kdXBsZXguanMiOjQ3OCwiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qcyI6NDc5LCIuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIjo0ODAsIi4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIjo0ODEsIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanMiOjQ4MiwiLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIjo0ODYsIi4vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiOjQ4OH1dLDQ5MjpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWZ1bmN0aW9uKHMpe3ZhciBvPU9iamVjdC5wcm90b3R5cGUscj1vLmhhc093blByb3BlcnR5LHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihnLHksTSl7Z1t5XT1NLnZhbHVlfSxlPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiI/U3ltYm9sOnt9LGw9ZS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLG49ZS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixpPWUudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBmKGcseSxNKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGcseSx7dmFsdWU6TSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGdbeV19dHJ5e2Yoe30sIiIpfWNhdGNoe2Y9ZnVuY3Rpb24oeSxNLE8pe3JldHVybiB5W01dPU99fWZ1bmN0aW9uIGMoZyx5LE0sTyl7dmFyIFI9eSYmeS5wcm90b3R5cGUgaW5zdGFuY2VvZiBoP3k6aCx6PU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUpLCQ9bmV3IHYoT3x8W10pO3JldHVybiB0KHosIl9pbnZva2UiLHt2YWx1ZTpVKGcsTSwkKX0pLHp9ZnVuY3Rpb24gdShnLHksTSl7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzpnLmNhbGwoeSxNKX19Y2F0Y2goTyl7cmV0dXJue3R5cGU6InRocm93Iixhcmc6T319fXMud3JhcD1jO3ZhciBkPXt9O2Z1bmN0aW9uIGgoKXt9ZnVuY3Rpb24gdygpe31mdW5jdGlvbiBfKCl7fXZhciBBPXt9O2YoQSxsLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KTt2YXIgUD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsTD1QJiZQKFAocChbXSkpKTtMJiZMIT09byYmci5jYWxsKEwsbCkmJihBPUwpO3ZhciBOPV8ucHJvdG90eXBlPWgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQSk7ZnVuY3Rpb24gRChnKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goZnVuY3Rpb24oeSl7ZihnLHksZnVuY3Rpb24oTSl7cmV0dXJuIHRoaXMuX2ludm9rZSh5LE0pfSl9KX1mdW5jdGlvbiBGKGcseSl7dmFyIE07dCh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24oTyxSKXtmdW5jdGlvbiB6KCl7cmV0dXJuIG5ldyB5KGZ1bmN0aW9uKCQsWCl7KGZ1bmN0aW9uIGooVyxULHgsSSl7dmFyIEg9dShnW1ddLGcsVCk7aWYoSC50eXBlIT09InRocm93Iil7dmFyIFo9SC5hcmcsVj1aLnZhbHVlO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJnIuY2FsbChWLCJfX2F3YWl0Iik/eS5yZXNvbHZlKFYuX19hd2FpdCkudGhlbihmdW5jdGlvbihLKXtqKCJuZXh0IixLLHgsSSl9LGZ1bmN0aW9uKEspe2ooInRocm93IixLLHgsSSl9KTp5LnJlc29sdmUoVikudGhlbihmdW5jdGlvbihLKXtaLnZhbHVlPUsseChaKX0sZnVuY3Rpb24oSyl7cmV0dXJuIGooInRocm93IixLLHgsSSl9KX1JKEguYXJnKX0pKE8sUiwkLFgpfSl9cmV0dXJuIE09TT9NLnRoZW4oeix6KTp6KCl9fSl9ZnVuY3Rpb24gVShnLHksTSl7dmFyIE89InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oUix6KXtpZihPPT09ImV4ZWN1dGluZyIpdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoTz09PSJjb21wbGV0ZWQiKXtpZihSPT09InRocm93Iil0aHJvdyB6O3JldHVybiBiKCl9Zm9yKE0ubWV0aG9kPVIsTS5hcmc9ejs7KXt2YXIgJD1NLmRlbGVnYXRlO2lmKCQpe3ZhciBYPUIoJCxNKTtpZihYKXtpZihYPT09ZCljb250aW51ZTtyZXR1cm4gWH19aWYoTS5tZXRob2Q9PT0ibmV4dCIpTS5zZW50PU0uX3NlbnQ9TS5hcmc7ZWxzZSBpZihNLm1ldGhvZD09PSJ0aHJvdyIpe2lmKE89PT0ic3VzcGVuZGVkU3RhcnQiKXRocm93IE89ImNvbXBsZXRlZCIsTS5hcmc7TS5kaXNwYXRjaEV4Y2VwdGlvbihNLmFyZyl9ZWxzZSBNLm1ldGhvZD09PSJyZXR1cm4iJiZNLmFicnVwdCgicmV0dXJuIixNLmFyZyk7Tz0iZXhlY3V0aW5nIjt2YXIgaj11KGcseSxNKTtpZihqLnR5cGU9PT0ibm9ybWFsIil7aWYoTz1NLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixqLmFyZz09PWQpY29udGludWU7cmV0dXJue3ZhbHVlOmouYXJnLGRvbmU6TS5kb25lfX1qLnR5cGU9PT0idGhyb3ciJiYoTz0iY29tcGxldGVkIixNLm1ldGhvZD0idGhyb3ciLE0uYXJnPWouYXJnKX19fWZ1bmN0aW9uIEIoZyx5KXt2YXIgTT15Lm1ldGhvZCxPPWcuaXRlcmF0b3JbTV07aWYoTz09PXZvaWQgMClyZXR1cm4geS5kZWxlZ2F0ZT1udWxsLE09PT0idGhyb3ciJiZnLml0ZXJhdG9yLnJldHVybiYmKHkubWV0aG9kPSJyZXR1cm4iLHkuYXJnPXZvaWQgMCxCKGcseSkseS5tZXRob2Q9PT0idGhyb3ciKXx8TSE9PSJyZXR1cm4iJiYoeS5tZXRob2Q9InRocm93Iix5LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICciK00rIicgbWV0aG9kIikpLGQ7dmFyIFI9dShPLGcuaXRlcmF0b3IseS5hcmcpO2lmKFIudHlwZT09PSJ0aHJvdyIpcmV0dXJuIHkubWV0aG9kPSJ0aHJvdyIseS5hcmc9Ui5hcmcseS5kZWxlZ2F0ZT1udWxsLGQ7dmFyIHo9Ui5hcmc7cmV0dXJuIHo/ei5kb25lPyh5W2cucmVzdWx0TmFtZV09ei52YWx1ZSx5Lm5leHQ9Zy5uZXh0TG9jLHkubWV0aG9kIT09InJldHVybiImJih5Lm1ldGhvZD0ibmV4dCIseS5hcmc9dm9pZCAwKSx5LmRlbGVnYXRlPW51bGwsZCk6ejooeS5tZXRob2Q9InRocm93Iix5LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHkuZGVsZWdhdGU9bnVsbCxkKX1mdW5jdGlvbiBTKGcpe3ZhciB5PXt0cnlMb2M6Z1swXX07MSBpbiBnJiYoeS5jYXRjaExvYz1nWzFdKSwyIGluIGcmJih5LmZpbmFsbHlMb2M9Z1syXSx5LmFmdGVyTG9jPWdbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHkpfWZ1bmN0aW9uIEMoZyl7dmFyIHk9Zy5jb21wbGV0aW9ufHx7fTt5LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHkuYXJnLGcuY29tcGxldGlvbj15fWZ1bmN0aW9uIHYoZyl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGcuZm9yRWFjaChTLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIHAoZyl7aWYoZyl7dmFyIHk9Z1tsXTtpZih5KXJldHVybiB5LmNhbGwoZyk7aWYodHlwZW9mIGcubmV4dD09ImZ1bmN0aW9uIilyZXR1cm4gZztpZighaXNOYU4oZy5sZW5ndGgpKXt2YXIgTT0tMSxPPWZ1bmN0aW9uIFIoKXtmb3IoOysrTTxnLmxlbmd0aDspaWYoci5jYWxsKGcsTSkpcmV0dXJuIFIudmFsdWU9Z1tNXSxSLmRvbmU9ITEsUjtyZXR1cm4gUi52YWx1ZT12b2lkIDAsUi5kb25lPSEwLFJ9O3JldHVybiBPLm5leHQ9T319cmV0dXJue25leHQ6Yn19ZnVuY3Rpb24gYigpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19cmV0dXJuIHcucHJvdG90eXBlPV8sdChOLCJjb25zdHJ1Y3RvciIse3ZhbHVlOl8sY29uZmlndXJhYmxlOiEwfSksdChfLCJjb25zdHJ1Y3RvciIse3ZhbHVlOncsY29uZmlndXJhYmxlOiEwfSksdy5kaXNwbGF5TmFtZT1mKF8saSwiR2VuZXJhdG9yRnVuY3Rpb24iKSxzLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZyl7dmFyIHk9dHlwZW9mIGc9PSJmdW5jdGlvbiImJmcuY29uc3RydWN0b3I7cmV0dXJuISF5JiYoeT09PXd8fCh5LmRpc3BsYXlOYW1lfHx5Lm5hbWUpPT09IkdlbmVyYXRvckZ1bmN0aW9uIil9LHMubWFyaz1mdW5jdGlvbihnKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihnLF8pOihnLl9fcHJvdG9fXz1fLGYoZyxpLCJHZW5lcmF0b3JGdW5jdGlvbiIpKSxnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE4pLGd9LHMuYXdyYXA9ZnVuY3Rpb24oZyl7cmV0dXJue19fYXdhaXQ6Z319LEQoRi5wcm90b3R5cGUpLGYoRi5wcm90b3R5cGUsbixmdW5jdGlvbigpe3JldHVybiB0aGlzfSkscy5Bc3luY0l0ZXJhdG9yPUYscy5hc3luYz1mdW5jdGlvbihnLHksTSxPLFIpe1I9PT12b2lkIDAmJihSPVByb21pc2UpO3ZhciB6PW5ldyBGKGMoZyx5LE0sTyksUik7cmV0dXJuIHMuaXNHZW5lcmF0b3JGdW5jdGlvbih5KT96OnoubmV4dCgpLnRoZW4oZnVuY3Rpb24oJCl7cmV0dXJuICQuZG9uZT8kLnZhbHVlOnoubmV4dCgpfSl9LEQoTiksZihOLGksIkdlbmVyYXRvciIpLGYoTixsLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxmKE4sInRvU3RyaW5nIixmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0ifSkscy5rZXlzPWZ1bmN0aW9uKGcpe3ZhciB5PU9iamVjdChnKSxNPVtdO2Zvcih2YXIgTyBpbiB5KU0ucHVzaChPKTtyZXR1cm4gTS5yZXZlcnNlKCksZnVuY3Rpb24gUigpe2Zvcig7TS5sZW5ndGg7KXt2YXIgej1NLnBvcCgpO2lmKHogaW4geSlyZXR1cm4gUi52YWx1ZT16LFIuZG9uZT0hMSxSfXJldHVybiBSLmRvbmU9ITAsUn19LHMudmFsdWVzPXAsdi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnYscmVzZXQ6ZnVuY3Rpb24oZyl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChDKSwhZylmb3IodmFyIHkgaW4gdGhpcyl5LmNoYXJBdCgwKT09PSJ0IiYmci5jYWxsKHRoaXMseSkmJiFpc05hTigreS5zbGljZSgxKSkmJih0aGlzW3ldPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGc9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoZy50eXBlPT09InRocm93Iil0aHJvdyBnLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihnKXtpZih0aGlzLmRvbmUpdGhyb3cgZzt2YXIgeT10aGlzO2Z1bmN0aW9uIE0oaixXKXtyZXR1cm4gei50eXBlPSJ0aHJvdyIsei5hcmc9Zyx5Lm5leHQ9aixXJiYoeS5tZXRob2Q9Im5leHQiLHkuYXJnPXZvaWQgMCksISFXfWZvcih2YXIgTz10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7Tz49MDstLU8pe3ZhciBSPXRoaXMudHJ5RW50cmllc1tPXSx6PVIuY29tcGxldGlvbjtpZihSLnRyeUxvYz09PSJyb290IilyZXR1cm4gTSgiZW5kIik7aWYoUi50cnlMb2M8PXRoaXMucHJldil7dmFyICQ9ci5jYWxsKFIsImNhdGNoTG9jIiksWD1yLmNhbGwoUiwiZmluYWxseUxvYyIpO2lmKCQmJlgpe2lmKHRoaXMucHJldjxSLmNhdGNoTG9jKXJldHVybiBNKFIuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxSLmZpbmFsbHlMb2MpcmV0dXJuIE0oUi5maW5hbGx5TG9jKX1lbHNlIGlmKCQpe2lmKHRoaXMucHJldjxSLmNhdGNoTG9jKXJldHVybiBNKFIuY2F0Y2hMb2MsITApfWVsc2V7aWYoIVgpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxSLmZpbmFsbHlMb2MpcmV0dXJuIE0oUi5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGcseSl7Zm9yKHZhciBNPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtNPj0wOy0tTSl7dmFyIE89dGhpcy50cnlFbnRyaWVzW01dO2lmKE8udHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChPLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxPLmZpbmFsbHlMb2Mpe3ZhciBSPU87YnJlYWt9fVImJihnPT09ImJyZWFrInx8Zz09PSJjb250aW51ZSIpJiZSLnRyeUxvYzw9eSYmeTw9Ui5maW5hbGx5TG9jJiYoUj1udWxsKTt2YXIgej1SP1IuY29tcGxldGlvbjp7fTtyZXR1cm4gei50eXBlPWcsei5hcmc9eSxSPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PVIuZmluYWxseUxvYyxkKTp0aGlzLmNvbXBsZXRlKHopfSxjb21wbGV0ZTpmdW5jdGlvbihnLHkpe2lmKGcudHlwZT09PSJ0aHJvdyIpdGhyb3cgZy5hcmc7cmV0dXJuIGcudHlwZT09PSJicmVhayJ8fGcudHlwZT09PSJjb250aW51ZSI/dGhpcy5uZXh0PWcuYXJnOmcudHlwZT09PSJyZXR1cm4iPyh0aGlzLnJ2YWw9dGhpcy5hcmc9Zy5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKTpnLnR5cGU9PT0ibm9ybWFsIiYmeSYmKHRoaXMubmV4dD15KSxkfSxmaW5pc2g6ZnVuY3Rpb24oZyl7Zm9yKHZhciB5PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt5Pj0wOy0teSl7dmFyIE09dGhpcy50cnlFbnRyaWVzW3ldO2lmKE0uZmluYWxseUxvYz09PWcpcmV0dXJuIHRoaXMuY29tcGxldGUoTS5jb21wbGV0aW9uLE0uYWZ0ZXJMb2MpLEMoTSksZH19LGNhdGNoOmZ1bmN0aW9uKGcpe2Zvcih2YXIgeT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7eT49MDstLXkpe3ZhciBNPXRoaXMudHJ5RW50cmllc1t5XTtpZihNLnRyeUxvYz09PWcpe3ZhciBPPU0uY29tcGxldGlvbjtpZihPLnR5cGU9PT0idGhyb3ciKXt2YXIgUj1PLmFyZztDKE0pfXJldHVybiBSfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGcseSxNKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6cChnKSxyZXN1bHROYW1lOnksbmV4dExvYzpNfSx0aGlzLm1ldGhvZD09PSJuZXh0IiYmKHRoaXMuYXJnPXZvaWQgMCksZH19LHN9KHR5cGVvZiBFPT0ib2JqZWN0Ij9FLmV4cG9ydHM6e30pO3RyeXtyZWdlbmVyYXRvclJ1bnRpbWU9bX1jYXRjaHt0eXBlb2YgZ2xvYmFsVGhpcz09Im9iamVjdCI/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9bTpGdW5jdGlvbigiciIsInJlZ2VuZXJhdG9yUnVudGltZSA9IHIiKShtKX19LHt9XSw0OTM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJidWZmZXIiKS5CdWZmZXIscz1hKCJpbmhlcml0cyIpLG89YSgiaGFzaC1iYXNlIikscj1uZXcgQXJyYXkoMTYpLHQ9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sZT1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxsPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxuPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSxpPVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLGY9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07ZnVuY3Rpb24gYygpe28uY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gdShQLEwpe3JldHVybiBQPDxMfFA+Pj4zMi1MfWZ1bmN0aW9uIGQoUCxMLE4sRCxGLFUsQixTKXtyZXR1cm4gdShQKyhMXk5eRCkrVStCfDAsUykrRnwwfWZ1bmN0aW9uIGgoUCxMLE4sRCxGLFUsQixTKXtyZXR1cm4gdShQKyhMJk58fkwmRCkrVStCfDAsUykrRnwwfWZ1bmN0aW9uIHcoUCxMLE4sRCxGLFUsQixTKXtyZXR1cm4gdShQKygoTHx+TileRCkrVStCfDAsUykrRnwwfWZ1bmN0aW9uIF8oUCxMLE4sRCxGLFUsQixTKXtyZXR1cm4gdShQKyhMJkR8TiZ+RCkrVStCfDAsUykrRnwwfWZ1bmN0aW9uIEEoUCxMLE4sRCxGLFUsQixTKXtyZXR1cm4gdShQKyhMXihOfH5EKSkrVStCfDAsUykrRnwwfXMoYyxvKSxjLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBQPXIsTD0wO0w8MTY7KytMKVBbTF09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpMKTtmb3IodmFyIE49MHx0aGlzLl9hLEQ9MHx0aGlzLl9iLEY9MHx0aGlzLl9jLFU9MHx0aGlzLl9kLEI9MHx0aGlzLl9lLFM9MHx0aGlzLl9hLEM9MHx0aGlzLl9iLHY9MHx0aGlzLl9jLHA9MHx0aGlzLl9kLGI9MHx0aGlzLl9lLGc9MDtnPDgwO2crPTEpe3ZhciB5LE07ZzwxNj8oeT1kKE4sRCxGLFUsQixQW3RbZ11dLGlbMF0sbFtnXSksTT1BKFMsQyx2LHAsYixQW2VbZ11dLGZbMF0sbltnXSkpOmc8MzI/KHk9aChOLEQsRixVLEIsUFt0W2ddXSxpWzFdLGxbZ10pLE09XyhTLEMsdixwLGIsUFtlW2ddXSxmWzFdLG5bZ10pKTpnPDQ4Pyh5PXcoTixELEYsVSxCLFBbdFtnXV0saVsyXSxsW2ddKSxNPXcoUyxDLHYscCxiLFBbZVtnXV0sZlsyXSxuW2ddKSk6Zzw2ND8oeT1fKE4sRCxGLFUsQixQW3RbZ11dLGlbM10sbFtnXSksTT1oKFMsQyx2LHAsYixQW2VbZ11dLGZbM10sbltnXSkpOih5PUEoTixELEYsVSxCLFBbdFtnXV0saVs0XSxsW2ddKSxNPWQoUyxDLHYscCxiLFBbZVtnXV0sZls0XSxuW2ddKSksTj1CLEI9VSxVPXUoRiwxMCksRj1ELEQ9eSxTPWIsYj1wLHA9dSh2LDEwKSx2PUMsQz1NfXZhciBPPXRoaXMuX2IrRitwfDA7dGhpcy5fYj10aGlzLl9jK1UrYnwwLHRoaXMuX2M9dGhpcy5fZCtCK1N8MCx0aGlzLl9kPXRoaXMuX2UrTitDfDAsdGhpcy5fZT10aGlzLl9hK0QrdnwwLHRoaXMuX2E9T30sYy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBQPW0uYWxsb2M/bS5hbGxvYygyMCk6bmV3IG0oMjApO3JldHVybiBQLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLFAud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksUC53cml0ZUludDMyTEUodGhpcy5fYyw4KSxQLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxQLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxQfSxFLmV4cG9ydHM9Y30se2J1ZmZlcjoyMjAsImhhc2gtYmFzZSI6NDI1LGluaGVyaXRzOjQ0MH1dLDQ5NDpbZnVuY3Rpb24oYSxFLGspey8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL3ZhciBtPWEoImJ1ZmZlciIpLHM9bS5CdWZmZXI7ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgbCBpbiB0KWVbbF09dFtsXX1mdW5jdGlvbiByKHQsZSxsKXtyZXR1cm4gcyh0LGUsbCl9cy5mcm9tJiZzLmFsbG9jJiZzLmFsbG9jVW5zYWZlJiZzLmFsbG9jVW5zYWZlU2xvdz9FLmV4cG9ydHM9bToobyhtLGspLGsuQnVmZmVyPXIpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocy5wcm90b3R5cGUpLG8ocyxyKSxyLmZyb209ZnVuY3Rpb24odCxlLGwpe2lmKHR5cGVvZiB0PT0ibnVtYmVyIil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBzKHQsZSxsKX0sci5hbGxvYz1mdW5jdGlvbih0LGUsbCl7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgbj1zKHQpO3JldHVybiBlIT09dm9pZCAwP3R5cGVvZiBsPT0ic3RyaW5nIj9uLmZpbGwoZSxsKTpuLmZpbGwoZSk6bi5maWxsKDApLG59LHIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gcyh0KX0sci5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbS5TbG93QnVmZmVyKHQpfX0se2J1ZmZlcjoyMjB9XSw0OTU6W2Z1bmN0aW9uKGEsRSxrKXsoZnVuY3Rpb24obSl7KGZ1bmN0aW9uKCl7dmFyIHMsbz1hKCJidWZmZXIiKSxyPW8uQnVmZmVyLHQ9e307Zm9yKHMgaW4gbylvLmhhc093blByb3BlcnR5KHMpJiZzIT09IlNsb3dCdWZmZXIiJiZzIT09IkJ1ZmZlciImJih0W3NdPW9bc10pO3ZhciBlPXQuQnVmZmVyPXt9O2ZvcihzIGluIHIpci5oYXNPd25Qcm9wZXJ0eShzKSYmcyE9PSJhbGxvY1Vuc2FmZSImJnMhPT0iYWxsb2NVbnNhZmVTbG93IiYmKGVbc109cltzXSk7aWYodC5CdWZmZXIucHJvdG90eXBlPXIucHJvdG90eXBlLGUuZnJvbSYmZS5mcm9tIT09VWludDhBcnJheS5mcm9tfHwoZS5mcm9tPWZ1bmN0aW9uKGwsbixpKXtpZih0eXBlb2YgbD09Im51bWJlciIpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbCk7aWYobCYmbC5sZW5ndGg9PT12b2lkIDApdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgbCk7cmV0dXJuIHIobCxuLGkpfSksZS5hbGxvY3x8KGUuYWxsb2M9ZnVuY3Rpb24obCxuLGkpe2lmKHR5cGVvZiBsIT0ibnVtYmVyIil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbCk7aWYobDwwfHxsPj0yKigxPDwzMCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytsKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgZj1yKGwpO3JldHVybiBuJiZuLmxlbmd0aCE9PTA/dHlwZW9mIGk9PSJzdHJpbmciP2YuZmlsbChuLGkpOmYuZmlsbChuKTpmLmZpbGwoMCksZn0pLCF0LmtTdHJpbmdNYXhMZW5ndGgpdHJ5e3Qua1N0cmluZ01heExlbmd0aD1tLmJpbmRpbmcoImJ1ZmZlciIpLmtTdHJpbmdNYXhMZW5ndGh9Y2F0Y2h7fXQuY29uc3RhbnRzfHwodC5jb25zdGFudHM9e01BWF9MRU5HVEg6dC5rTWF4TGVuZ3RofSx0LmtTdHJpbmdNYXhMZW5ndGgmJih0LmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSD10LmtTdHJpbmdNYXhMZW5ndGgpKSxFLmV4cG9ydHM9dH0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo0NjcsYnVmZmVyOjIyMH1dLDQ5NjpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBtPWEoInhtbGNoYXJzL3htbC8xLjAvZWQ1Iikscz1hKCJ4bWxjaGFycy94bWwvMS4xL2VkMiIpLG89YSgieG1sY2hhcnMveG1sbnMvMS4wL2VkMyIpO3ZhciByPW0uaXNTLHQ9bS5pc0NoYXIsZT1tLmlzTmFtZVN0YXJ0Q2hhcixsPW0uaXNOYW1lQ2hhcixuPW0uU19MSVNULGk9bS5OQU1FX1JFLGY9cy5pc0NoYXIsYz1vLmlzTkNOYW1lU3RhcnRDaGFyLHU9by5pc05DTmFtZUNoYXIsZD1vLk5DX05BTUVfUkU7Y29uc3QgaD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix3PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsXz17X19wcm90b19fOm51bGwseG1sOmgseG1sbnM6d30sQT17X19wcm90b19fOm51bGwsYW1wOiImIixndDoiPiIsbHQ6IjwiLHF1b3Q6JyInLGFwb3M6IicifSxQPXA9PnA9PT0zNHx8cD09PTM5LEw9WzM0LDM5XSxOPVsuLi5MLDkxLDYyXSxEPVsuLi5MLDYwLDkzXSxGPVs2MSw2MywuLi5uXSxVPVsuLi5uLDYyLDM4LDYwXTtmdW5jdGlvbiBCKHAsYixnKXtzd2l0Y2goYil7Y2FzZSJ4bWwiOmchPT1oJiZwLmZhaWwoYHhtbCBwcmVmaXggbXVzdCBiZSBib3VuZCB0byAke2h9LmApO2JyZWFrO2Nhc2UieG1sbnMiOmchPT13JiZwLmZhaWwoYHhtbG5zIHByZWZpeCBtdXN0IGJlIGJvdW5kIHRvICR7d30uYCl9c3dpdGNoKGcpe2Nhc2UgdzpwLmZhaWwoYj09PSIiP2B0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbWF5IG5vdCBiZSBzZXQgdG8gJHtnfS5gOmBtYXkgbm90IGFzc2lnbiBhIHByZWZpeCAoZXZlbiAieG1sbnMiKSB0byB0aGUgVVJJICR7d30uYCk7YnJlYWs7Y2FzZSBoOnN3aXRjaChiKXtjYXNlInhtbCI6YnJlYWs7Y2FzZSIiOnAuZmFpbChgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG1heSBub3QgYmUgc2V0IHRvICR7Z30uYCk7YnJlYWs7ZGVmYXVsdDpwLmZhaWwoIm1heSBub3QgYXNzaWduIHRoZSB4bWwgbmFtZXNwYWNlIHRvIGFub3RoZXIgcHJlZml4LiIpfX19Y29uc3QgUz1wPT5kLnRlc3QocCksQz1wPT5pLnRlc3QocCk7ay5FVkVOVFM9WyJ4bWxkZWNsIiwidGV4dCIsInByb2Nlc3NpbmdpbnN0cnVjdGlvbiIsImRvY3R5cGUiLCJjb21tZW50Iiwib3BlbnRhZ3N0YXJ0IiwiYXR0cmlidXRlIiwib3BlbnRhZyIsImNsb3NldGFnIiwiY2RhdGEiLCJlcnJvciIsImVuZCIsInJlYWR5Il07Y29uc3Qgdj17eG1sZGVjbDoieG1sZGVjbEhhbmRsZXIiLHRleHQ6InRleHRIYW5kbGVyIixwcm9jZXNzaW5naW5zdHJ1Y3Rpb246InBpSGFuZGxlciIsZG9jdHlwZToiZG9jdHlwZUhhbmRsZXIiLGNvbW1lbnQ6ImNvbW1lbnRIYW5kbGVyIixvcGVudGFnc3RhcnQ6Im9wZW5UYWdTdGFydEhhbmRsZXIiLGF0dHJpYnV0ZToiYXR0cmlidXRlSGFuZGxlciIsb3BlbnRhZzoib3BlblRhZ0hhbmRsZXIiLGNsb3NldGFnOiJjbG9zZVRhZ0hhbmRsZXIiLGNkYXRhOiJjZGF0YUhhbmRsZXIiLGVycm9yOiJlcnJvckhhbmRsZXIiLGVuZDoiZW5kSGFuZGxlciIscmVhZHk6InJlYWR5SGFuZGxlciJ9O2suU2F4ZXNQYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3IocCl7dGhpcy5vcHQ9cD8/e30sdGhpcy5mcmFnbWVudE9wdD0hIXRoaXMub3B0LmZyYWdtZW50O2NvbnN0IGI9dGhpcy54bWxuc09wdD0hIXRoaXMub3B0LnhtbG5zO2lmKHRoaXMudHJhY2tQb3NpdGlvbj10aGlzLm9wdC5wb3NpdGlvbiE9PSExLHRoaXMuZmlsZU5hbWU9dGhpcy5vcHQuZmlsZU5hbWUsYil7dGhpcy5uYW1lU3RhcnRDaGVjaz1jLHRoaXMubmFtZUNoZWNrPXUsdGhpcy5pc05hbWU9Uyx0aGlzLnByb2Nlc3NBdHRyaWJzPXRoaXMucHJvY2Vzc0F0dHJpYnNOUyx0aGlzLnB1c2hBdHRyaWI9dGhpcy5wdXNoQXR0cmliTlMsdGhpcy5ucz1PYmplY3QuYXNzaWduKHtfX3Byb3RvX186bnVsbH0sXyk7Y29uc3QgZz10aGlzLm9wdC5hZGRpdGlvbmFsTmFtZXNwYWNlcztnIT1udWxsJiYoZnVuY3Rpb24oeSxNKXtmb3IoY29uc3QgTyBvZiBPYmplY3Qua2V5cyhNKSlCKHksTyxNW09dKX0odGhpcyxnKSxPYmplY3QuYXNzaWduKHRoaXMubnMsZykpfWVsc2UgdGhpcy5uYW1lU3RhcnRDaGVjaz1lLHRoaXMubmFtZUNoZWNrPWwsdGhpcy5pc05hbWU9Qyx0aGlzLnByb2Nlc3NBdHRyaWJzPXRoaXMucHJvY2Vzc0F0dHJpYnNQbGFpbix0aGlzLnB1c2hBdHRyaWI9dGhpcy5wdXNoQXR0cmliUGxhaW47dGhpcy5zdGF0ZVRhYmxlPVt0aGlzLnNCZWdpbix0aGlzLnNCZWdpbldoaXRlc3BhY2UsdGhpcy5zRG9jdHlwZSx0aGlzLnNEb2N0eXBlUXVvdGUsdGhpcy5zRFRELHRoaXMuc0RURFF1b3RlZCx0aGlzLnNEVERPcGVuV2FrYSx0aGlzLnNEVERPcGVuV2FrYUJhbmcsdGhpcy5zRFREQ29tbWVudCx0aGlzLnNEVERDb21tZW50RW5kaW5nLHRoaXMuc0RURENvbW1lbnRFbmRlZCx0aGlzLnNEVERQSSx0aGlzLnNEVERQSUVuZGluZyx0aGlzLnNUZXh0LHRoaXMuc0VudGl0eSx0aGlzLnNPcGVuV2FrYSx0aGlzLnNPcGVuV2FrYUJhbmcsdGhpcy5zQ29tbWVudCx0aGlzLnNDb21tZW50RW5kaW5nLHRoaXMuc0NvbW1lbnRFbmRlZCx0aGlzLnNDRGF0YSx0aGlzLnNDRGF0YUVuZGluZyx0aGlzLnNDRGF0YUVuZGluZzIsdGhpcy5zUElGaXJzdENoYXIsdGhpcy5zUElSZXN0LHRoaXMuc1BJQm9keSx0aGlzLnNQSUVuZGluZyx0aGlzLnNYTUxEZWNsTmFtZVN0YXJ0LHRoaXMuc1hNTERlY2xOYW1lLHRoaXMuc1hNTERlY2xFcSx0aGlzLnNYTUxEZWNsVmFsdWVTdGFydCx0aGlzLnNYTUxEZWNsVmFsdWUsdGhpcy5zWE1MRGVjbFNlcGFyYXRvcix0aGlzLnNYTUxEZWNsRW5kaW5nLHRoaXMuc09wZW5UYWcsdGhpcy5zT3BlblRhZ1NsYXNoLHRoaXMuc0F0dHJpYix0aGlzLnNBdHRyaWJOYW1lLHRoaXMuc0F0dHJpYk5hbWVTYXdXaGl0ZSx0aGlzLnNBdHRyaWJWYWx1ZSx0aGlzLnNBdHRyaWJWYWx1ZVF1b3RlZCx0aGlzLnNBdHRyaWJWYWx1ZUNsb3NlZCx0aGlzLnNBdHRyaWJWYWx1ZVVucXVvdGVkLHRoaXMuc0Nsb3NlVGFnLHRoaXMuc0Nsb3NlVGFnU2F3V2hpdGVdLHRoaXMuX2luaXQoKX1nZXQgY2xvc2VkKCl7cmV0dXJuIHRoaXMuX2Nsb3NlZH1faW5pdCgpe3ZhciBwO3RoaXMub3Blbldha2FCYW5nPSIiLHRoaXMudGV4dD0iIix0aGlzLm5hbWU9IiIsdGhpcy5waVRhcmdldD0iIix0aGlzLmVudGl0eT0iIix0aGlzLnE9bnVsbCx0aGlzLnRhZ3M9W10sdGhpcy50YWc9bnVsbCx0aGlzLnRvcE5TPW51bGwsdGhpcy5jaHVuaz0iIix0aGlzLmNodW5rUG9zaXRpb249MCx0aGlzLmk9MCx0aGlzLnByZXZJPTAsdGhpcy5jYXJyaWVkRnJvbVByZXZpb3VzPXZvaWQgMCx0aGlzLmZvcmJpZGRlblN0YXRlPTAsdGhpcy5hdHRyaWJMaXN0PVtdO2NvbnN0e2ZyYWdtZW50T3B0OmJ9PXRoaXM7dGhpcy5zdGF0ZT1iPzEzOjAsdGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290PXRoaXMucmVwb3J0ZWRUZXh0QWZ0ZXJSb290PXRoaXMuY2xvc2VkUm9vdD10aGlzLnNhd1Jvb3Q9Yix0aGlzLnhtbERlY2xQb3NzaWJsZT0hYix0aGlzLnhtbERlY2xFeHBlY3RzPVsidmVyc2lvbiJdLHRoaXMuZW50aXR5UmV0dXJuU3RhdGU9dm9pZCAwO2xldHtkZWZhdWx0WE1MVmVyc2lvbjpnfT10aGlzLm9wdDtpZihnPT09dm9pZCAwKXtpZih0aGlzLm9wdC5mb3JjZVhNTFZlcnNpb249PT0hMCl0aHJvdyBuZXcgRXJyb3IoImZvcmNlWE1MVmVyc2lvbiBzZXQgYnV0IGRlZmF1bHRYTUxWZXJzaW9uIGlzIG5vdCBzZXQiKTtnPSIxLjAifXRoaXMuc2V0WE1MVmVyc2lvbihnKSx0aGlzLnBvc2l0aW9uQXROZXdMaW5lPTAsdGhpcy5kb2N0eXBlPSExLHRoaXMuX2Nsb3NlZD0hMSx0aGlzLnhtbERlY2w9e3ZlcnNpb246dm9pZCAwLGVuY29kaW5nOnZvaWQgMCxzdGFuZGFsb25lOnZvaWQgMH0sdGhpcy5saW5lPTEsdGhpcy5jb2x1bW49MCx0aGlzLkVOVElUSUVTPU9iamVjdC5jcmVhdGUoQSksKHA9dGhpcy5yZWFkeUhhbmRsZXIpPT09bnVsbHx8cD09PXZvaWQgMHx8cC5jYWxsKHRoaXMpfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLmNodW5rUG9zaXRpb24rdGhpcy5pfWdldCBjb2x1bW5JbmRleCgpe3JldHVybiB0aGlzLnBvc2l0aW9uLXRoaXMucG9zaXRpb25BdE5ld0xpbmV9b24ocCxiKXt0aGlzW3ZbcF1dPWJ9b2ZmKHApe3RoaXNbdltwXV09dm9pZCAwfW1ha2VFcnJvcihwKXt2YXIgYjtsZXQgZz0oYj10aGlzLmZpbGVOYW1lKSE9PW51bGwmJmIhPT12b2lkIDA/YjoiIjtyZXR1cm4gdGhpcy50cmFja1Bvc2l0aW9uJiYoZy5sZW5ndGg+MCYmKGcrPSI6IiksZys9YCR7dGhpcy5saW5lfToke3RoaXMuY29sdW1ufWApLGcubGVuZ3RoPjAmJihnKz0iOiAiKSxuZXcgRXJyb3IoZytwKX1mYWlsKHApe2NvbnN0IGI9dGhpcy5tYWtlRXJyb3IocCksZz10aGlzLmVycm9ySGFuZGxlcjtpZihnPT09dm9pZCAwKXRocm93IGI7cmV0dXJuIGcoYiksdGhpc313cml0ZShwKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpcy5mYWlsKCJjYW5ub3Qgd3JpdGUgYWZ0ZXIgY2xvc2U7IGFzc2lnbiBhbiBvbnJlYWR5IGhhbmRsZXIuIik7bGV0IGI9ITE7cD09PW51bGw/KGI9ITAscD0iIik6dHlwZW9mIHA9PSJvYmplY3QiJiYocD1wLnRvU3RyaW5nKCkpLHRoaXMuY2FycmllZEZyb21QcmV2aW91cyE9PXZvaWQgMCYmKHA9YCR7dGhpcy5jYXJyaWVkRnJvbVByZXZpb3VzfSR7cH1gLHRoaXMuY2FycmllZEZyb21QcmV2aW91cz12b2lkIDApO2xldCBnPXAubGVuZ3RoO2NvbnN0IHk9cC5jaGFyQ29kZUF0KGctMSk7IWImJih5PT09MTN8fHk+PTU1Mjk2JiZ5PD01NjMxOSkmJih0aGlzLmNhcnJpZWRGcm9tUHJldmlvdXM9cFtnLTFdLGctLSxwPXAuc2xpY2UoMCxnKSk7Y29uc3R7c3RhdGVUYWJsZTpNfT10aGlzO2Zvcih0aGlzLmNodW5rPXAsdGhpcy5pPTA7dGhpcy5pPGc7KU1bdGhpcy5zdGF0ZV0uY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5jaHVua1Bvc2l0aW9uKz1nLGI/dGhpcy5lbmQoKTp0aGlzfWNsb3NlKCl7cmV0dXJuIHRoaXMud3JpdGUobnVsbCl9Z2V0Q29kZTEwKCl7Y29uc3R7Y2h1bms6cCxpOmJ9PXRoaXM7aWYodGhpcy5wcmV2ST1iLHRoaXMuaT1iKzEsYj49cC5sZW5ndGgpcmV0dXJuLTE7Y29uc3QgZz1wLmNoYXJDb2RlQXQoYik7aWYodGhpcy5jb2x1bW4rKyxnPDU1Mjk2KXtpZihnPj0zMnx8Zz09PTkpcmV0dXJuIGc7c3dpdGNoKGcpe2Nhc2UgMTA6cmV0dXJuIHRoaXMubGluZSsrLHRoaXMuY29sdW1uPTAsdGhpcy5wb3NpdGlvbkF0TmV3TGluZT10aGlzLnBvc2l0aW9uLDEwO2Nhc2UgMTM6cmV0dXJuIHAuY2hhckNvZGVBdChiKzEpPT09MTAmJih0aGlzLmk9YisyKSx0aGlzLmxpbmUrKyx0aGlzLmNvbHVtbj0wLHRoaXMucG9zaXRpb25BdE5ld0xpbmU9dGhpcy5wb3NpdGlvbiwtMjtkZWZhdWx0OnJldHVybiB0aGlzLmZhaWwoImRpc2FsbG93ZWQgY2hhcmFjdGVyLiIpLGd9fWlmKGc+NTYzMTkpcmV0dXJuIGc+PTU3MzQ0JiZnPD02NTUzM3x8dGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3Rlci4iKSxnO2NvbnN0IHk9NjU1MzYrMTAyNCooZy01NTI5NikrKHAuY2hhckNvZGVBdChiKzEpLTU2MzIwKTtyZXR1cm4gdGhpcy5pPWIrMix5PjExMTQxMTEmJnRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuIikseX1nZXRDb2RlMTEoKXtjb25zdHtjaHVuazpwLGk6Yn09dGhpcztpZih0aGlzLnByZXZJPWIsdGhpcy5pPWIrMSxiPj1wLmxlbmd0aClyZXR1cm4tMTtjb25zdCBnPXAuY2hhckNvZGVBdChiKTtpZih0aGlzLmNvbHVtbisrLGc8NTUyOTYpe2lmKGc+MzEmJmc8MTI3fHxnPjE1OSYmZyE9PTgyMzJ8fGc9PT05KXJldHVybiBnO3N3aXRjaChnKXtjYXNlIDEwOnJldHVybiB0aGlzLmxpbmUrKyx0aGlzLmNvbHVtbj0wLHRoaXMucG9zaXRpb25BdE5ld0xpbmU9dGhpcy5wb3NpdGlvbiwxMDtjYXNlIDEzOntjb25zdCBNPXAuY2hhckNvZGVBdChiKzEpO00hPT0xMCYmTSE9PTEzM3x8KHRoaXMuaT1iKzIpfWNhc2UgMTMzOmNhc2UgODIzMjpyZXR1cm4gdGhpcy5saW5lKyssdGhpcy5jb2x1bW49MCx0aGlzLnBvc2l0aW9uQXROZXdMaW5lPXRoaXMucG9zaXRpb24sLTI7ZGVmYXVsdDpyZXR1cm4gdGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3Rlci4iKSxnfX1pZihnPjU2MzE5KXJldHVybiBnPj01NzM0NCYmZzw9NjU1MzN8fHRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuIiksZztjb25zdCB5PTY1NTM2KzEwMjQqKGctNTUyOTYpKyhwLmNoYXJDb2RlQXQoYisxKS01NjMyMCk7cmV0dXJuIHRoaXMuaT1iKzIseT4xMTE0MTExJiZ0aGlzLmZhaWwoImRpc2FsbG93ZWQgY2hhcmFjdGVyLiIpLHl9Z2V0Q29kZU5vcm0oKXtjb25zdCBwPXRoaXMuZ2V0Q29kZSgpO3JldHVybiBwPT09LTI/MTA6cH11bmdldCgpe3RoaXMuaT10aGlzLnByZXZJLHRoaXMuY29sdW1uLS19Y2FwdHVyZVRvKHApe2xldHtpOmJ9PXRoaXM7Y29uc3R7Y2h1bms6Z309dGhpcztmb3IoOzspe2NvbnN0IHk9dGhpcy5nZXRDb2RlKCksTT15PT09LTIsTz1NPzEwOnk7aWYoTz09PS0xfHxwLmluY2x1ZGVzKE8pKXJldHVybiB0aGlzLnRleHQrPWcuc2xpY2UoYix0aGlzLnByZXZJKSxPO00mJih0aGlzLnRleHQrPWcuc2xpY2UoYix0aGlzLnByZXZJKStgCmAsYj10aGlzLmkpfX1jYXB0dXJlVG9DaGFyKHApe2xldHtpOmJ9PXRoaXM7Y29uc3R7Y2h1bms6Z309dGhpcztmb3IoOzspe2xldCB5PXRoaXMuZ2V0Q29kZSgpO3N3aXRjaCh5KXtjYXNlLTI6dGhpcy50ZXh0Kz1nLnNsaWNlKGIsdGhpcy5wcmV2SSkrYApgLGI9dGhpcy5pLHk9MTA7YnJlYWs7Y2FzZS0xOnJldHVybiB0aGlzLnRleHQrPWcuc2xpY2UoYiksITF9aWYoeT09PXApcmV0dXJuIHRoaXMudGV4dCs9Zy5zbGljZShiLHRoaXMucHJldkkpLCEwfX1jYXB0dXJlTmFtZUNoYXJzKCl7Y29uc3R7Y2h1bms6cCxpOmJ9PXRoaXM7Zm9yKDs7KXtjb25zdCBnPXRoaXMuZ2V0Q29kZSgpO2lmKGc9PT0tMSlyZXR1cm4gdGhpcy5uYW1lKz1wLnNsaWNlKGIpLC0xO2lmKCFsKGcpKXJldHVybiB0aGlzLm5hbWUrPXAuc2xpY2UoYix0aGlzLnByZXZJKSxnPT09LTI/MTA6Z319c2tpcFNwYWNlcygpe2Zvcig7Oyl7Y29uc3QgcD10aGlzLmdldENvZGVOb3JtKCk7aWYocD09PS0xfHwhcihwKSlyZXR1cm4gcH19c2V0WE1MVmVyc2lvbihwKXt0aGlzLmN1cnJlbnRYTUxWZXJzaW9uPXAscD09PSIxLjAiPyh0aGlzLmlzQ2hhcj10LHRoaXMuZ2V0Q29kZT10aGlzLmdldENvZGUxMCk6KHRoaXMuaXNDaGFyPWYsdGhpcy5nZXRDb2RlPXRoaXMuZ2V0Q29kZTExKX1zQmVnaW4oKXt0aGlzLmNodW5rLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKHRoaXMuaSsrLHRoaXMuY29sdW1uKyspLHRoaXMuc3RhdGU9MX1zQmVnaW5XaGl0ZXNwYWNlKCl7Y29uc3QgcD10aGlzLmksYj10aGlzLnNraXBTcGFjZXMoKTtzd2l0Y2godGhpcy5wcmV2SSE9PXAmJih0aGlzLnhtbERlY2xQb3NzaWJsZT0hMSksYil7Y2FzZSA2MDppZih0aGlzLnN0YXRlPTE1LHRoaXMudGV4dC5sZW5ndGghPT0wKXRocm93IG5ldyBFcnJvcigibm8tZW1wdHkgdGV4dCBhdCBzdGFydCIpO2JyZWFrO2Nhc2UtMTpicmVhaztkZWZhdWx0OnRoaXMudW5nZXQoKSx0aGlzLnN0YXRlPTEzLHRoaXMueG1sRGVjbFBvc3NpYmxlPSExfX1zRG9jdHlwZSgpe3ZhciBwO2NvbnN0IGI9dGhpcy5jYXB0dXJlVG8oTik7c3dpdGNoKGIpe2Nhc2UgNjI6KHA9dGhpcy5kb2N0eXBlSGFuZGxlcik9PT1udWxsfHxwPT09dm9pZCAwfHxwLmNhbGwodGhpcyx0aGlzLnRleHQpLHRoaXMudGV4dD0iIix0aGlzLnN0YXRlPTEzLHRoaXMuZG9jdHlwZT0hMDticmVhaztjYXNlLTE6YnJlYWs7ZGVmYXVsdDp0aGlzLnRleHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KGIpLGI9PT05MT90aGlzLnN0YXRlPTQ6UChiKSYmKHRoaXMuc3RhdGU9Myx0aGlzLnE9Yil9fXNEb2N0eXBlUXVvdGUoKXtjb25zdCBwPXRoaXMucTt0aGlzLmNhcHR1cmVUb0NoYXIocCkmJih0aGlzLnRleHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KHApLHRoaXMucT1udWxsLHRoaXMuc3RhdGU9Mil9c0RURCgpe2NvbnN0IHA9dGhpcy5jYXB0dXJlVG8oRCk7cCE9PS0xJiYodGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChwKSxwPT09OTM/dGhpcy5zdGF0ZT0yOnA9PT02MD90aGlzLnN0YXRlPTY6UChwKSYmKHRoaXMuc3RhdGU9NSx0aGlzLnE9cCkpfXNEVERRdW90ZWQoKXtjb25zdCBwPXRoaXMucTt0aGlzLmNhcHR1cmVUb0NoYXIocCkmJih0aGlzLnRleHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KHApLHRoaXMuc3RhdGU9NCx0aGlzLnE9bnVsbCl9c0RURE9wZW5XYWthKCl7Y29uc3QgcD10aGlzLmdldENvZGVOb3JtKCk7c3dpdGNoKHRoaXMudGV4dCs9U3RyaW5nLmZyb21Db2RlUG9pbnQocCkscCl7Y2FzZSAzMzp0aGlzLnN0YXRlPTcsdGhpcy5vcGVuV2FrYUJhbmc9IiI7YnJlYWs7Y2FzZSA2Mzp0aGlzLnN0YXRlPTExO2JyZWFrO2RlZmF1bHQ6dGhpcy5zdGF0ZT00fX1zRFRET3Blbldha2FCYW5nKCl7Y29uc3QgcD1TdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmdldENvZGVOb3JtKCkpLGI9dGhpcy5vcGVuV2FrYUJhbmcrPXA7dGhpcy50ZXh0Kz1wLGIhPT0iLSImJih0aGlzLnN0YXRlPWI9PT0iLS0iPzg6NCx0aGlzLm9wZW5XYWthQmFuZz0iIil9c0RURENvbW1lbnQoKXt0aGlzLmNhcHR1cmVUb0NoYXIoNDUpJiYodGhpcy50ZXh0Kz0iLSIsdGhpcy5zdGF0ZT05KX1zRFREQ29tbWVudEVuZGluZygpe2NvbnN0IHA9dGhpcy5nZXRDb2RlTm9ybSgpO3RoaXMudGV4dCs9U3RyaW5nLmZyb21Db2RlUG9pbnQocCksdGhpcy5zdGF0ZT1wPT09NDU/MTA6OH1zRFREQ29tbWVudEVuZGVkKCl7Y29uc3QgcD10aGlzLmdldENvZGVOb3JtKCk7dGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChwKSxwPT09NjI/dGhpcy5zdGF0ZT00Oih0aGlzLmZhaWwoIm1hbGZvcm1lZCBjb21tZW50LiIpLHRoaXMuc3RhdGU9OCl9c0RURFBJKCl7dGhpcy5jYXB0dXJlVG9DaGFyKDYzKSYmKHRoaXMudGV4dCs9Ij8iLHRoaXMuc3RhdGU9MTIpfXNEVERQSUVuZGluZygpe2NvbnN0IHA9dGhpcy5nZXRDb2RlTm9ybSgpO3RoaXMudGV4dCs9U3RyaW5nLmZyb21Db2RlUG9pbnQocCkscD09PTYyJiYodGhpcy5zdGF0ZT00KX1zVGV4dCgpe3RoaXMudGFncy5sZW5ndGghPT0wP3RoaXMuaGFuZGxlVGV4dEluUm9vdCgpOnRoaXMuaGFuZGxlVGV4dE91dHNpZGVSb290KCl9c0VudGl0eSgpe2xldHtpOnB9PXRoaXM7Y29uc3R7Y2h1bms6Yn09dGhpczt0OmZvcig7Oylzd2l0Y2godGhpcy5nZXRDb2RlKCkpe2Nhc2UtMjp0aGlzLmVudGl0eSs9Yi5zbGljZShwLHRoaXMucHJldkkpK2AKYCxwPXRoaXMuaTticmVhaztjYXNlIDU5Ontjb25zdHtlbnRpdHlSZXR1cm5TdGF0ZTpnfT10aGlzLHk9dGhpcy5lbnRpdHkrYi5zbGljZShwLHRoaXMucHJldkkpO2xldCBNO3RoaXMuc3RhdGU9Zyx5PT09IiI/KHRoaXMuZmFpbCgiZW1wdHkgZW50aXR5IG5hbWUuIiksTT0iJjsiKTooTT10aGlzLnBhcnNlRW50aXR5KHkpLHRoaXMuZW50aXR5PSIiKSxnPT09MTMmJnRoaXMudGV4dEhhbmRsZXI9PT12b2lkIDB8fCh0aGlzLnRleHQrPU0pO2JyZWFrIHR9Y2FzZS0xOnRoaXMuZW50aXR5Kz1iLnNsaWNlKHApO2JyZWFrIHR9fXNPcGVuV2FrYSgpe2NvbnN0IHA9dGhpcy5nZXRDb2RlKCk7aWYoZShwKSl0aGlzLnN0YXRlPTM0LHRoaXMudW5nZXQoKSx0aGlzLnhtbERlY2xQb3NzaWJsZT0hMTtlbHNlIHN3aXRjaChwKXtjYXNlIDQ3OnRoaXMuc3RhdGU9NDMsdGhpcy54bWxEZWNsUG9zc2libGU9ITE7YnJlYWs7Y2FzZSAzMzp0aGlzLnN0YXRlPTE2LHRoaXMub3Blbldha2FCYW5nPSIiLHRoaXMueG1sRGVjbFBvc3NpYmxlPSExO2JyZWFrO2Nhc2UgNjM6dGhpcy5zdGF0ZT0yMzticmVhaztkZWZhdWx0OnRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWUiKSx0aGlzLnN0YXRlPTEzLHRoaXMueG1sRGVjbFBvc3NpYmxlPSExfX1zT3Blbldha2FCYW5nKCl7c3dpdGNoKHRoaXMub3Blbldha2FCYW5nKz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmdldENvZGVOb3JtKCkpLHRoaXMub3Blbldha2FCYW5nKXtjYXNlIltDREFUQVsiOnRoaXMuc2F3Um9vdHx8dGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290fHwodGhpcy5mYWlsKCJ0ZXh0IGRhdGEgb3V0c2lkZSBvZiByb290IG5vZGUuIiksdGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290PSEwKSx0aGlzLmNsb3NlZFJvb3QmJiF0aGlzLnJlcG9ydGVkVGV4dEFmdGVyUm9vdCYmKHRoaXMuZmFpbCgidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLiIpLHRoaXMucmVwb3J0ZWRUZXh0QWZ0ZXJSb290PSEwKSx0aGlzLnN0YXRlPTIwLHRoaXMub3Blbldha2FCYW5nPSIiO2JyZWFrO2Nhc2UiLS0iOnRoaXMuc3RhdGU9MTcsdGhpcy5vcGVuV2FrYUJhbmc9IiI7YnJlYWs7Y2FzZSJET0NUWVBFIjp0aGlzLnN0YXRlPTIsKHRoaXMuZG9jdHlwZXx8dGhpcy5zYXdSb290KSYmdGhpcy5mYWlsKCJpbmFwcHJvcHJpYXRlbHkgbG9jYXRlZCBkb2N0eXBlIGRlY2xhcmF0aW9uLiIpLHRoaXMub3Blbldha2FCYW5nPSIiO2JyZWFrO2RlZmF1bHQ6dGhpcy5vcGVuV2FrYUJhbmcubGVuZ3RoPj03JiZ0aGlzLmZhaWwoImluY29ycmVjdCBzeW50YXguIil9fXNDb21tZW50KCl7dGhpcy5jYXB0dXJlVG9DaGFyKDQ1KSYmKHRoaXMuc3RhdGU9MTgpfXNDb21tZW50RW5kaW5nKCl7dmFyIHA7Y29uc3QgYj10aGlzLmdldENvZGVOb3JtKCk7Yj09PTQ1Pyh0aGlzLnN0YXRlPTE5LChwPXRoaXMuY29tbWVudEhhbmRsZXIpPT09bnVsbHx8cD09PXZvaWQgMHx8cC5jYWxsKHRoaXMsdGhpcy50ZXh0KSx0aGlzLnRleHQ9IiIpOih0aGlzLnRleHQrPSItIitTdHJpbmcuZnJvbUNvZGVQb2ludChiKSx0aGlzLnN0YXRlPTE3KX1zQ29tbWVudEVuZGVkKCl7Y29uc3QgcD10aGlzLmdldENvZGVOb3JtKCk7cCE9PTYyPyh0aGlzLmZhaWwoIm1hbGZvcm1lZCBjb21tZW50LiIpLHRoaXMudGV4dCs9Ii0tIitTdHJpbmcuZnJvbUNvZGVQb2ludChwKSx0aGlzLnN0YXRlPTE3KTp0aGlzLnN0YXRlPTEzfXNDRGF0YSgpe3RoaXMuY2FwdHVyZVRvQ2hhcig5MykmJih0aGlzLnN0YXRlPTIxKX1zQ0RhdGFFbmRpbmcoKXtjb25zdCBwPXRoaXMuZ2V0Q29kZU5vcm0oKTtwPT09OTM/dGhpcy5zdGF0ZT0yMjoodGhpcy50ZXh0Kz0iXSIrU3RyaW5nLmZyb21Db2RlUG9pbnQocCksdGhpcy5zdGF0ZT0yMCl9c0NEYXRhRW5kaW5nMigpe3ZhciBwO2NvbnN0IGI9dGhpcy5nZXRDb2RlTm9ybSgpO3N3aXRjaChiKXtjYXNlIDYyOihwPXRoaXMuY2RhdGFIYW5kbGVyKT09PW51bGx8fHA9PT12b2lkIDB8fHAuY2FsbCh0aGlzLHRoaXMudGV4dCksdGhpcy50ZXh0PSIiLHRoaXMuc3RhdGU9MTM7YnJlYWs7Y2FzZSA5Mzp0aGlzLnRleHQrPSJdIjticmVhaztkZWZhdWx0OnRoaXMudGV4dCs9Il1dIitTdHJpbmcuZnJvbUNvZGVQb2ludChiKSx0aGlzLnN0YXRlPTIwfX1zUElGaXJzdENoYXIoKXtjb25zdCBwPXRoaXMuZ2V0Q29kZU5vcm0oKTt0aGlzLm5hbWVTdGFydENoZWNrKHApPyh0aGlzLnBpVGFyZ2V0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChwKSx0aGlzLnN0YXRlPTI0KTpwPT09NjN8fHIocCk/KHRoaXMuZmFpbCgicHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB3aXRob3V0IGEgdGFyZ2V0LiIpLHRoaXMuc3RhdGU9cD09PTYzPzI2OjI1KToodGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5hbWUuIiksdGhpcy5waVRhcmdldCs9U3RyaW5nLmZyb21Db2RlUG9pbnQocCksdGhpcy5zdGF0ZT0yNCl9c1BJUmVzdCgpe2NvbnN0e2NodW5rOnAsaTpifT10aGlzO2Zvcig7Oyl7Y29uc3QgZz10aGlzLmdldENvZGVOb3JtKCk7aWYoZz09PS0xKXJldHVybiB2b2lkKHRoaXMucGlUYXJnZXQrPXAuc2xpY2UoYikpO2lmKCF0aGlzLm5hbWVDaGVjayhnKSl7dGhpcy5waVRhcmdldCs9cC5zbGljZShiLHRoaXMucHJldkkpO2NvbnN0IHk9Zz09PTYzO3l8fHIoZyk/dGhpcy5waVRhcmdldD09PSJ4bWwiPyh0aGlzLnhtbERlY2xQb3NzaWJsZXx8dGhpcy5mYWlsKCJhbiBYTUwgZGVjbGFyYXRpb24gbXVzdCBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LiIpLHRoaXMuc3RhdGU9eT8zMzoyNyk6dGhpcy5zdGF0ZT15PzI2OjI1Oih0aGlzLmZhaWwoImRpc2FsbG93ZWQgY2hhcmFjdGVyIGluIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbmFtZS4iKSx0aGlzLnBpVGFyZ2V0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChnKSk7YnJlYWt9fX1zUElCb2R5KCl7aWYodGhpcy50ZXh0Lmxlbmd0aD09PTApe2NvbnN0IHA9dGhpcy5nZXRDb2RlTm9ybSgpO3A9PT02Mz90aGlzLnN0YXRlPTI2OnIocCl8fCh0aGlzLnRleHQ9U3RyaW5nLmZyb21Db2RlUG9pbnQocCkpfWVsc2UgdGhpcy5jYXB0dXJlVG9DaGFyKDYzKSYmKHRoaXMuc3RhdGU9MjYpfXNQSUVuZGluZygpe3ZhciBwO2NvbnN0IGI9dGhpcy5nZXRDb2RlTm9ybSgpO2lmKGI9PT02Mil7Y29uc3R7cGlUYXJnZXQ6Z309dGhpcztnLnRvTG93ZXJDYXNlKCk9PT0ieG1sIiYmdGhpcy5mYWlsKCJ0aGUgWE1MIGRlY2xhcmF0aW9uIG11c3QgYXBwZWFyIGF0IHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuIiksKHA9dGhpcy5waUhhbmRsZXIpPT09bnVsbHx8cD09PXZvaWQgMHx8cC5jYWxsKHRoaXMse3RhcmdldDpnLGJvZHk6dGhpcy50ZXh0fSksdGhpcy5waVRhcmdldD10aGlzLnRleHQ9IiIsdGhpcy5zdGF0ZT0xM31lbHNlIGI9PT02Mz90aGlzLnRleHQrPSI/IjoodGhpcy50ZXh0Kz0iPyIrU3RyaW5nLmZyb21Db2RlUG9pbnQoYiksdGhpcy5zdGF0ZT0yNSk7dGhpcy54bWxEZWNsUG9zc2libGU9ITF9c1hNTERlY2xOYW1lU3RhcnQoKXtjb25zdCBwPXRoaXMuc2tpcFNwYWNlcygpO3AhPT02Mz9wIT09LTEmJih0aGlzLnN0YXRlPTI4LHRoaXMubmFtZT1TdHJpbmcuZnJvbUNvZGVQb2ludChwKSk6dGhpcy5zdGF0ZT0zM31zWE1MRGVjbE5hbWUoKXtjb25zdCBwPXRoaXMuY2FwdHVyZVRvKEYpO2lmKHA9PT02MylyZXR1cm4gdGhpcy5zdGF0ZT0zMyx0aGlzLm5hbWUrPXRoaXMudGV4dCx0aGlzLnRleHQ9IiIsdm9pZCB0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvbXBsZXRlLiIpO2lmKHIocCl8fHA9PT02MSl7aWYodGhpcy5uYW1lKz10aGlzLnRleHQsdGhpcy50ZXh0PSIiLCF0aGlzLnhtbERlY2xFeHBlY3RzLmluY2x1ZGVzKHRoaXMubmFtZSkpc3dpdGNoKHRoaXMubmFtZS5sZW5ndGgpe2Nhc2UgMDp0aGlzLmZhaWwoImRpZCBub3QgZXhwZWN0IGFueSBtb3JlIG5hbWUvdmFsdWUgcGFpcnMuIik7YnJlYWs7Y2FzZSAxOnRoaXMuZmFpbChgZXhwZWN0ZWQgdGhlIG5hbWUgJHt0aGlzLnhtbERlY2xFeHBlY3RzWzBdfS5gKTticmVhaztkZWZhdWx0OnRoaXMuZmFpbCgiZXhwZWN0ZWQgb25lIG9mICIrdGhpcy54bWxEZWNsRXhwZWN0cy5qb2luKCIsICIpKX10aGlzLnN0YXRlPXA9PT02MT8zMDoyOX19c1hNTERlY2xFcSgpe2NvbnN0IHA9dGhpcy5nZXRDb2RlTm9ybSgpO2lmKHA9PT02MylyZXR1cm4gdGhpcy5zdGF0ZT0zMyx2b2lkIHRoaXMuZmFpbCgiWE1MIGRlY2xhcmF0aW9uIGlzIGluY29tcGxldGUuIik7cihwKXx8KHAhPT02MSYmdGhpcy5mYWlsKCJ2YWx1ZSByZXF1aXJlZC4iKSx0aGlzLnN0YXRlPTMwKX1zWE1MRGVjbFZhbHVlU3RhcnQoKXtjb25zdCBwPXRoaXMuZ2V0Q29kZU5vcm0oKTtpZihwPT09NjMpcmV0dXJuIHRoaXMuc3RhdGU9MzMsdm9pZCB0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvbXBsZXRlLiIpO3IocCl8fChQKHApP3RoaXMucT1wOih0aGlzLmZhaWwoInZhbHVlIG11c3QgYmUgcXVvdGVkLiIpLHRoaXMucT0zMiksdGhpcy5zdGF0ZT0zMSl9c1hNTERlY2xWYWx1ZSgpe2NvbnN0IHA9dGhpcy5jYXB0dXJlVG8oW3RoaXMucSw2M10pO2lmKHA9PT02MylyZXR1cm4gdGhpcy5zdGF0ZT0zMyx0aGlzLnRleHQ9IiIsdm9pZCB0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvbXBsZXRlLiIpO2lmKHA9PT0tMSlyZXR1cm47Y29uc3QgYj10aGlzLnRleHQ7c3dpdGNoKHRoaXMudGV4dD0iIix0aGlzLm5hbWUpe2Nhc2UidmVyc2lvbiI6e3RoaXMueG1sRGVjbEV4cGVjdHM9WyJlbmNvZGluZyIsInN0YW5kYWxvbmUiXTtjb25zdCBnPWI7dGhpcy54bWxEZWNsLnZlcnNpb249ZywvXjFcLlswLTldKyQvLnRlc3QoZyk/dGhpcy5vcHQuZm9yY2VYTUxWZXJzaW9ufHx0aGlzLnNldFhNTFZlcnNpb24oZyk6dGhpcy5mYWlsKCJ2ZXJzaW9uIG51bWJlciBtdXN0IG1hdGNoIC9eMVxcLlswLTldKyQvLiIpO2JyZWFrfWNhc2UiZW5jb2RpbmciOi9eW0EtWmEtel1bQS1aYS16MC05Ll8tXSokLy50ZXN0KGIpfHx0aGlzLmZhaWwoImVuY29kaW5nIHZhbHVlIG11c3QgbWF0Y2ggL15bQS1aYS16MC05XVtBLVphLXowLTkuXy1dKiQvLiIpLHRoaXMueG1sRGVjbEV4cGVjdHM9WyJzdGFuZGFsb25lIl0sdGhpcy54bWxEZWNsLmVuY29kaW5nPWI7YnJlYWs7Y2FzZSJzdGFuZGFsb25lIjpiIT09InllcyImJmIhPT0ibm8iJiZ0aGlzLmZhaWwoJ3N0YW5kYWxvbmUgdmFsdWUgbXVzdCBtYXRjaCAieWVzIiBvciAibm8iLicpLHRoaXMueG1sRGVjbEV4cGVjdHM9W10sdGhpcy54bWxEZWNsLnN0YW5kYWxvbmU9Yn10aGlzLm5hbWU9IiIsdGhpcy5zdGF0ZT0zMn1zWE1MRGVjbFNlcGFyYXRvcigpe2NvbnN0IHA9dGhpcy5nZXRDb2RlTm9ybSgpO3AhPT02Mz8ocihwKXx8KHRoaXMuZmFpbCgid2hpdGVzcGFjZSByZXF1aXJlZC4iKSx0aGlzLnVuZ2V0KCkpLHRoaXMuc3RhdGU9MjcpOnRoaXMuc3RhdGU9MzN9c1hNTERlY2xFbmRpbmcoKXt2YXIgcDt0aGlzLmdldENvZGVOb3JtKCk9PT02Mj8odGhpcy5waVRhcmdldCE9PSJ4bWwiP3RoaXMuZmFpbCgicHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGJlZm9yZSByb290LiIpOnRoaXMubmFtZSE9PSJ2ZXJzaW9uIiYmdGhpcy54bWxEZWNsRXhwZWN0cy5pbmNsdWRlcygidmVyc2lvbiIpJiZ0aGlzLmZhaWwoIlhNTCBkZWNsYXJhdGlvbiBtdXN0IGNvbnRhaW4gYSB2ZXJzaW9uLiIpLChwPXRoaXMueG1sZGVjbEhhbmRsZXIpPT09bnVsbHx8cD09PXZvaWQgMHx8cC5jYWxsKHRoaXMsdGhpcy54bWxEZWNsKSx0aGlzLm5hbWU9IiIsdGhpcy5waVRhcmdldD10aGlzLnRleHQ9IiIsdGhpcy5zdGF0ZT0xMyk6dGhpcy5mYWlsKCJUaGUgY2hhcmFjdGVyID8gaXMgZGlzYWxsb3dlZCBhbnl3aGVyZSBpbiBYTUwgZGVjbGFyYXRpb25zLiIpLHRoaXMueG1sRGVjbFBvc3NpYmxlPSExfXNPcGVuVGFnKCl7dmFyIHA7Y29uc3QgYj10aGlzLmNhcHR1cmVOYW1lQ2hhcnMoKTtpZihiPT09LTEpcmV0dXJuO2NvbnN0IGc9dGhpcy50YWc9e25hbWU6dGhpcy5uYW1lLGF0dHJpYnV0ZXM6T2JqZWN0LmNyZWF0ZShudWxsKX07c3dpdGNoKHRoaXMubmFtZT0iIix0aGlzLnhtbG5zT3B0JiYodGhpcy50b3BOUz1nLm5zPU9iamVjdC5jcmVhdGUobnVsbCkpLChwPXRoaXMub3BlblRhZ1N0YXJ0SGFuZGxlcik9PT1udWxsfHxwPT09dm9pZCAwfHxwLmNhbGwodGhpcyxnKSx0aGlzLnNhd1Jvb3Q9ITAsIXRoaXMuZnJhZ21lbnRPcHQmJnRoaXMuY2xvc2VkUm9vdCYmdGhpcy5mYWlsKCJkb2N1bWVudHMgbWF5IGNvbnRhaW4gb25seSBvbmUgcm9vdC4iKSxiKXtjYXNlIDYyOnRoaXMub3BlblRhZygpO2JyZWFrO2Nhc2UgNDc6dGhpcy5zdGF0ZT0zNTticmVhaztkZWZhdWx0OnIoYil8fHRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWUuIiksdGhpcy5zdGF0ZT0zNn19c09wZW5UYWdTbGFzaCgpe3RoaXMuZ2V0Q29kZSgpPT09NjI/dGhpcy5vcGVuU2VsZkNsb3NpbmdUYWcoKToodGhpcy5mYWlsKCJmb3J3YXJkLXNsYXNoIGluIG9wZW5pbmcgdGFnIG5vdCBmb2xsb3dlZCBieSA+LiIpLHRoaXMuc3RhdGU9MzYpfXNBdHRyaWIoKXtjb25zdCBwPXRoaXMuc2tpcFNwYWNlcygpO3AhPT0tMSYmKGUocCk/KHRoaXMudW5nZXQoKSx0aGlzLnN0YXRlPTM3KTpwPT09NjI/dGhpcy5vcGVuVGFnKCk6cD09PTQ3P3RoaXMuc3RhdGU9MzU6dGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBhdHRyaWJ1dGUgbmFtZS4iKSl9c0F0dHJpYk5hbWUoKXtjb25zdCBwPXRoaXMuY2FwdHVyZU5hbWVDaGFycygpO3A9PT02MT90aGlzLnN0YXRlPTM5OnIocCk/dGhpcy5zdGF0ZT0zODpwPT09NjI/KHRoaXMuZmFpbCgiYXR0cmlidXRlIHdpdGhvdXQgdmFsdWUuIiksdGhpcy5wdXNoQXR0cmliKHRoaXMubmFtZSx0aGlzLm5hbWUpLHRoaXMubmFtZT10aGlzLnRleHQ9IiIsdGhpcy5vcGVuVGFnKCkpOnAhPT0tMSYmdGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBhdHRyaWJ1dGUgbmFtZS4iKX1zQXR0cmliTmFtZVNhd1doaXRlKCl7Y29uc3QgcD10aGlzLnNraXBTcGFjZXMoKTtzd2l0Y2gocCl7Y2FzZS0xOnJldHVybjtjYXNlIDYxOnRoaXMuc3RhdGU9Mzk7YnJlYWs7ZGVmYXVsdDp0aGlzLmZhaWwoImF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlLiIpLHRoaXMudGV4dD0iIix0aGlzLm5hbWU9IiIscD09PTYyP3RoaXMub3BlblRhZygpOmUocCk/KHRoaXMudW5nZXQoKSx0aGlzLnN0YXRlPTM3KToodGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBhdHRyaWJ1dGUgbmFtZS4iKSx0aGlzLnN0YXRlPTM2KX19c0F0dHJpYlZhbHVlKCl7Y29uc3QgcD10aGlzLmdldENvZGVOb3JtKCk7UChwKT8odGhpcy5xPXAsdGhpcy5zdGF0ZT00MCk6cihwKXx8KHRoaXMuZmFpbCgidW5xdW90ZWQgYXR0cmlidXRlIHZhbHVlLiIpLHRoaXMuc3RhdGU9NDIsdGhpcy51bmdldCgpKX1zQXR0cmliVmFsdWVRdW90ZWQoKXtjb25zdHtxOnAsY2h1bms6Yn09dGhpcztsZXR7aTpnfT10aGlzO2Zvcig7Oylzd2l0Y2godGhpcy5nZXRDb2RlKCkpe2Nhc2UgcDpyZXR1cm4gdGhpcy5wdXNoQXR0cmliKHRoaXMubmFtZSx0aGlzLnRleHQrYi5zbGljZShnLHRoaXMucHJldkkpKSx0aGlzLm5hbWU9dGhpcy50ZXh0PSIiLHRoaXMucT1udWxsLHZvaWQodGhpcy5zdGF0ZT00MSk7Y2FzZSAzODpyZXR1cm4gdGhpcy50ZXh0Kz1iLnNsaWNlKGcsdGhpcy5wcmV2SSksdGhpcy5zdGF0ZT0xNCx2b2lkKHRoaXMuZW50aXR5UmV0dXJuU3RhdGU9NDApO2Nhc2UgMTA6Y2FzZS0yOmNhc2UgOTp0aGlzLnRleHQrPWIuc2xpY2UoZyx0aGlzLnByZXZJKSsiICIsZz10aGlzLmk7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gdGhpcy50ZXh0Kz1iLnNsaWNlKGcsdGhpcy5wcmV2SSksdm9pZCB0aGlzLmZhaWwoImRpc2FsbG93ZWQgY2hhcmFjdGVyLiIpO2Nhc2UtMTpyZXR1cm4gdm9pZCh0aGlzLnRleHQrPWIuc2xpY2UoZykpfX1zQXR0cmliVmFsdWVDbG9zZWQoKXtjb25zdCBwPXRoaXMuZ2V0Q29kZU5vcm0oKTtyKHApP3RoaXMuc3RhdGU9MzY6cD09PTYyP3RoaXMub3BlblRhZygpOnA9PT00Nz90aGlzLnN0YXRlPTM1OmUocCk/KHRoaXMuZmFpbCgibm8gd2hpdGVzcGFjZSBiZXR3ZWVuIGF0dHJpYnV0ZXMuIiksdGhpcy51bmdldCgpLHRoaXMuc3RhdGU9MzcpOnRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gYXR0cmlidXRlIG5hbWUuIil9c0F0dHJpYlZhbHVlVW5xdW90ZWQoKXtjb25zdCBwPXRoaXMuY2FwdHVyZVRvKFUpO3N3aXRjaChwKXtjYXNlIDM4OnRoaXMuc3RhdGU9MTQsdGhpcy5lbnRpdHlSZXR1cm5TdGF0ZT00MjticmVhaztjYXNlIDYwOnRoaXMuZmFpbCgiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuIik7YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy50ZXh0LmluY2x1ZGVzKCJdXT4iKSYmdGhpcy5mYWlsKCd0aGUgc3RyaW5nICJdXT4iIGlzIGRpc2FsbG93ZWQgaW4gY2hhciBkYXRhLicpLHRoaXMucHVzaEF0dHJpYih0aGlzLm5hbWUsdGhpcy50ZXh0KSx0aGlzLm5hbWU9dGhpcy50ZXh0PSIiLHA9PT02Mj90aGlzLm9wZW5UYWcoKTp0aGlzLnN0YXRlPTM2fX1zQ2xvc2VUYWcoKXtjb25zdCBwPXRoaXMuY2FwdHVyZU5hbWVDaGFycygpO3A9PT02Mj90aGlzLmNsb3NlVGFnKCk6cihwKT90aGlzLnN0YXRlPTQ0OnAhPT0tMSYmdGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBjbG9zaW5nIHRhZy4iKX1zQ2xvc2VUYWdTYXdXaGl0ZSgpe3N3aXRjaCh0aGlzLnNraXBTcGFjZXMoKSl7Y2FzZSA2Mjp0aGlzLmNsb3NlVGFnKCk7YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy5mYWlsKCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBjbG9zaW5nIHRhZy4iKX19aGFuZGxlVGV4dEluUm9vdCgpe2xldHtpOnAsZm9yYmlkZGVuU3RhdGU6Yn09dGhpcztjb25zdHtjaHVuazpnLHRleHRIYW5kbGVyOnl9PXRoaXM7dDpmb3IoOzspc3dpdGNoKHRoaXMuZ2V0Q29kZSgpKXtjYXNlIDYwOmlmKHRoaXMuc3RhdGU9MTUseSE9PXZvaWQgMCl7Y29uc3R7dGV4dDpNfT10aGlzLE89Zy5zbGljZShwLHRoaXMucHJldkkpO00ubGVuZ3RoIT09MD8oeShNK08pLHRoaXMudGV4dD0iIik6Ty5sZW5ndGghPT0wJiZ5KE8pfWI9MDticmVhayB0O2Nhc2UgMzg6dGhpcy5zdGF0ZT0xNCx0aGlzLmVudGl0eVJldHVyblN0YXRlPTEzLHkhPT12b2lkIDAmJih0aGlzLnRleHQrPWcuc2xpY2UocCx0aGlzLnByZXZJKSksYj0wO2JyZWFrIHQ7Y2FzZSA5Mzpzd2l0Y2goYil7Y2FzZSAwOmI9MTticmVhaztjYXNlIDE6Yj0yO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW1wb3NzaWJsZSBzdGF0ZSIpfWJyZWFrO2Nhc2UgNjI6Yj09PTImJnRoaXMuZmFpbCgndGhlIHN0cmluZyAiXV0+IiBpcyBkaXNhbGxvd2VkIGluIGNoYXIgZGF0YS4nKSxiPTA7YnJlYWs7Y2FzZS0yOnkhPT12b2lkIDAmJih0aGlzLnRleHQrPWcuc2xpY2UocCx0aGlzLnByZXZJKStgCmApLHA9dGhpcy5pLGI9MDticmVhaztjYXNlLTE6eSE9PXZvaWQgMCYmKHRoaXMudGV4dCs9Zy5zbGljZShwKSk7YnJlYWsgdDtkZWZhdWx0OmI9MH10aGlzLmZvcmJpZGRlblN0YXRlPWJ9aGFuZGxlVGV4dE91dHNpZGVSb290KCl7bGV0e2k6cH09dGhpcztjb25zdHtjaHVuazpiLHRleHRIYW5kbGVyOmd9PXRoaXM7bGV0IHk9ITE7dDpmb3IoOzspe2NvbnN0IE09dGhpcy5nZXRDb2RlKCk7c3dpdGNoKE0pe2Nhc2UgNjA6aWYodGhpcy5zdGF0ZT0xNSxnIT09dm9pZCAwKXtjb25zdHt0ZXh0Ok99PXRoaXMsUj1iLnNsaWNlKHAsdGhpcy5wcmV2SSk7Ty5sZW5ndGghPT0wPyhnKE8rUiksdGhpcy50ZXh0PSIiKTpSLmxlbmd0aCE9PTAmJmcoUil9YnJlYWsgdDtjYXNlIDM4OnRoaXMuc3RhdGU9MTQsdGhpcy5lbnRpdHlSZXR1cm5TdGF0ZT0xMyxnIT09dm9pZCAwJiYodGhpcy50ZXh0Kz1iLnNsaWNlKHAsdGhpcy5wcmV2SSkpLHk9ITA7YnJlYWsgdDtjYXNlLTI6ZyE9PXZvaWQgMCYmKHRoaXMudGV4dCs9Yi5zbGljZShwLHRoaXMucHJldkkpK2AKYCkscD10aGlzLmk7YnJlYWs7Y2FzZS0xOmchPT12b2lkIDAmJih0aGlzLnRleHQrPWIuc2xpY2UocCkpO2JyZWFrIHQ7ZGVmYXVsdDpyKE0pfHwoeT0hMCl9fXkmJih0aGlzLnNhd1Jvb3R8fHRoaXMucmVwb3J0ZWRUZXh0QmVmb3JlUm9vdHx8KHRoaXMuZmFpbCgidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLiIpLHRoaXMucmVwb3J0ZWRUZXh0QmVmb3JlUm9vdD0hMCksdGhpcy5jbG9zZWRSb290JiYhdGhpcy5yZXBvcnRlZFRleHRBZnRlclJvb3QmJih0aGlzLmZhaWwoInRleHQgZGF0YSBvdXRzaWRlIG9mIHJvb3Qgbm9kZS4iKSx0aGlzLnJlcG9ydGVkVGV4dEFmdGVyUm9vdD0hMCkpfXB1c2hBdHRyaWJOUyhwLGIpe3ZhciBnO2NvbnN0e3ByZWZpeDp5LGxvY2FsOk19PXRoaXMucW5hbWUocCksTz17bmFtZTpwLHByZWZpeDp5LGxvY2FsOk0sdmFsdWU6Yn07aWYodGhpcy5hdHRyaWJMaXN0LnB1c2goTyksKGc9dGhpcy5hdHRyaWJ1dGVIYW5kbGVyKT09PW51bGx8fGc9PT12b2lkIDB8fGcuY2FsbCh0aGlzLE8pLHk9PT0ieG1sbnMiKXtjb25zdCBSPWIudHJpbSgpO3RoaXMuY3VycmVudFhNTFZlcnNpb249PT0iMS4wIiYmUj09PSIiJiZ0aGlzLmZhaWwoImludmFsaWQgYXR0ZW1wdCB0byB1bmRlZmluZSBwcmVmaXggaW4gWE1MIDEuMCIpLHRoaXMudG9wTlNbTV09UixCKHRoaXMsTSxSKX1lbHNlIGlmKHA9PT0ieG1sbnMiKXtjb25zdCBSPWIudHJpbSgpO3RoaXMudG9wTlNbIiJdPVIsQih0aGlzLCIiLFIpfX1wdXNoQXR0cmliUGxhaW4ocCxiKXt2YXIgZztjb25zdCB5PXtuYW1lOnAsdmFsdWU6Yn07dGhpcy5hdHRyaWJMaXN0LnB1c2goeSksKGc9dGhpcy5hdHRyaWJ1dGVIYW5kbGVyKT09PW51bGx8fGc9PT12b2lkIDB8fGcuY2FsbCh0aGlzLHkpfWVuZCgpe3ZhciBwLGI7dGhpcy5zYXdSb290fHx0aGlzLmZhaWwoImRvY3VtZW50IG11c3QgY29udGFpbiBhIHJvb3QgZWxlbWVudC4iKTtjb25zdHt0YWdzOmd9PXRoaXM7Zm9yKDtnLmxlbmd0aD4wOyl7Y29uc3QgTT1nLnBvcCgpO3RoaXMuZmFpbCgidW5jbG9zZWQgdGFnOiAiK00ubmFtZSl9dGhpcy5zdGF0ZSE9PTAmJnRoaXMuc3RhdGUhPT0xMyYmdGhpcy5mYWlsKCJ1bmV4cGVjdGVkIGVuZC4iKTtjb25zdHt0ZXh0Onl9PXRoaXM7cmV0dXJuIHkubGVuZ3RoIT09MCYmKChwPXRoaXMudGV4dEhhbmRsZXIpPT09bnVsbHx8cD09PXZvaWQgMHx8cC5jYWxsKHRoaXMseSksdGhpcy50ZXh0PSIiKSx0aGlzLl9jbG9zZWQ9ITAsKGI9dGhpcy5lbmRIYW5kbGVyKT09PW51bGx8fGI9PT12b2lkIDB8fGIuY2FsbCh0aGlzKSx0aGlzLl9pbml0KCksdGhpc31yZXNvbHZlKHApe3ZhciBiLGc7bGV0IHk9dGhpcy50b3BOU1twXTtpZih5IT09dm9pZCAwKXJldHVybiB5O2NvbnN0e3RhZ3M6TX09dGhpcztmb3IobGV0IE89TS5sZW5ndGgtMTtPPj0wO08tLSlpZih5PU1bT10ubnNbcF0seSE9PXZvaWQgMClyZXR1cm4geTtyZXR1cm4geT10aGlzLm5zW3BdLHkhPT12b2lkIDA/eTooZz0oYj10aGlzLm9wdCkucmVzb2x2ZVByZWZpeCk9PT1udWxsfHxnPT09dm9pZCAwP3ZvaWQgMDpnLmNhbGwoYixwKX1xbmFtZShwKXtjb25zdCBiPXAuaW5kZXhPZigiOiIpO2lmKGI9PT0tMSlyZXR1cm57cHJlZml4OiIiLGxvY2FsOnB9O2NvbnN0IGc9cC5zbGljZShiKzEpLHk9cC5zbGljZSgwLGIpO3JldHVybih5PT09IiJ8fGc9PT0iInx8Zy5pbmNsdWRlcygiOiIpKSYmdGhpcy5mYWlsKGBtYWxmb3JtZWQgbmFtZTogJHtwfS5gKSx7cHJlZml4OnksbG9jYWw6Z319cHJvY2Vzc0F0dHJpYnNOUygpe3ZhciBwO2NvbnN0e2F0dHJpYkxpc3Q6Yn09dGhpcyxnPXRoaXMudGFnO3tjb25zdHtwcmVmaXg6Tyxsb2NhbDpSfT10aGlzLnFuYW1lKGcubmFtZSk7Zy5wcmVmaXg9TyxnLmxvY2FsPVI7Y29uc3Qgej1nLnVyaT0ocD10aGlzLnJlc29sdmUoTykpIT09bnVsbCYmcCE9PXZvaWQgMD9wOiIiO08hPT0iIiYmKE89PT0ieG1sbnMiJiZ0aGlzLmZhaWwoJ3RhZ3MgbWF5IG5vdCBoYXZlICJ4bWxucyIgYXMgcHJlZml4LicpLHo9PT0iIiYmKHRoaXMuZmFpbChgdW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiAke0pTT04uc3RyaW5naWZ5KE8pfS5gKSxnLnVyaT1PKSl9aWYoYi5sZW5ndGg9PT0wKXJldHVybjtjb25zdHthdHRyaWJ1dGVzOnl9PWcsTT1uZXcgU2V0O2Zvcihjb25zdCBPIG9mIGIpe2NvbnN0e25hbWU6UixwcmVmaXg6eixsb2NhbDokfT1PO2xldCBYLGo7ej09PSIiPyhYPVI9PT0ieG1sbnMiP3c6IiIsaj1SKTooWD10aGlzLnJlc29sdmUoeiksWD09PXZvaWQgMCYmKHRoaXMuZmFpbChgdW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiAke0pTT04uc3RyaW5naWZ5KHopfS5gKSxYPXopLGo9YHske1h9fSR7JH1gKSxNLmhhcyhqKSYmdGhpcy5mYWlsKGBkdXBsaWNhdGUgYXR0cmlidXRlOiAke2p9LmApLE0uYWRkKGopLE8udXJpPVgseVtSXT1PfXRoaXMuYXR0cmliTGlzdD1bXX1wcm9jZXNzQXR0cmlic1BsYWluKCl7Y29uc3R7YXR0cmliTGlzdDpwfT10aGlzLGI9dGhpcy50YWcuYXR0cmlidXRlcztmb3IoY29uc3R7bmFtZTpnLHZhbHVlOnl9b2YgcCliW2ddIT09dm9pZCAwJiZ0aGlzLmZhaWwoYGR1cGxpY2F0ZSBhdHRyaWJ1dGU6ICR7Z30uYCksYltnXT15O3RoaXMuYXR0cmliTGlzdD1bXX1vcGVuVGFnKCl7dmFyIHA7dGhpcy5wcm9jZXNzQXR0cmlicygpO2NvbnN0e3RhZ3M6Yn09dGhpcyxnPXRoaXMudGFnO2cuaXNTZWxmQ2xvc2luZz0hMSwocD10aGlzLm9wZW5UYWdIYW5kbGVyKT09PW51bGx8fHA9PT12b2lkIDB8fHAuY2FsbCh0aGlzLGcpLGIucHVzaChnKSx0aGlzLnN0YXRlPTEzLHRoaXMubmFtZT0iIn1vcGVuU2VsZkNsb3NpbmdUYWcoKXt2YXIgcCxiLGc7dGhpcy5wcm9jZXNzQXR0cmlicygpO2NvbnN0e3RhZ3M6eX09dGhpcyxNPXRoaXMudGFnO00uaXNTZWxmQ2xvc2luZz0hMCwocD10aGlzLm9wZW5UYWdIYW5kbGVyKT09PW51bGx8fHA9PT12b2lkIDB8fHAuY2FsbCh0aGlzLE0pLChiPXRoaXMuY2xvc2VUYWdIYW5kbGVyKT09PW51bGx8fGI9PT12b2lkIDB8fGIuY2FsbCh0aGlzLE0pLCh0aGlzLnRhZz0oZz15W3kubGVuZ3RoLTFdKSE9PW51bGwmJmchPT12b2lkIDA/ZzpudWxsKT09PW51bGwmJih0aGlzLmNsb3NlZFJvb3Q9ITApLHRoaXMuc3RhdGU9MTMsdGhpcy5uYW1lPSIifWNsb3NlVGFnKCl7Y29uc3R7dGFnczpwLG5hbWU6Yn09dGhpcztpZih0aGlzLnN0YXRlPTEzLHRoaXMubmFtZT0iIixiPT09IiIpcmV0dXJuIHRoaXMuZmFpbCgid2VpcmQgZW1wdHkgY2xvc2UgdGFnLiIpLHZvaWQodGhpcy50ZXh0Kz0iPC8+Iik7Y29uc3QgZz10aGlzLmNsb3NlVGFnSGFuZGxlcjtsZXQgeT1wLmxlbmd0aDtmb3IoO3ktLSA+MDspe2NvbnN0IE09dGhpcy50YWc9cC5wb3AoKTtpZih0aGlzLnRvcE5TPU0ubnMsZz8uKE0pLE0ubmFtZT09PWIpYnJlYWs7dGhpcy5mYWlsKCJ1bmV4cGVjdGVkIGNsb3NlIHRhZy4iKX15PT09MD90aGlzLmNsb3NlZFJvb3Q9ITA6eTwwJiYodGhpcy5mYWlsKGB1bm1hdGNoZWQgY2xvc2luZyB0YWc6ICR7Yn0uYCksdGhpcy50ZXh0Kz1gPC8ke2J9PmApfXBhcnNlRW50aXR5KHApe2lmKHBbMF0hPT0iIyIpe2NvbnN0IGc9dGhpcy5FTlRJVElFU1twXTtyZXR1cm4gZyE9PXZvaWQgMD9nOih0aGlzLmZhaWwodGhpcy5pc05hbWUocCk/InVuZGVmaW5lZCBlbnRpdHkuIjoiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gZW50aXR5IG5hbWUuIiksYCYke3B9O2ApfWxldCBiPU5hTjtyZXR1cm4gcFsxXT09PSJ4IiYmL14jeFswLTlhLWZdKyQvaS50ZXN0KHApP2I9cGFyc2VJbnQocC5zbGljZSgyKSwxNik6L14jWzAtOV0rJC8udGVzdChwKSYmKGI9cGFyc2VJbnQocC5zbGljZSgxKSwxMCkpLHRoaXMuaXNDaGFyKGIpP1N0cmluZy5mcm9tQ29kZVBvaW50KGIpOih0aGlzLmZhaWwoIm1hbGZvcm1lZCBjaGFyYWN0ZXIgZW50aXR5LiIpLGAmJHtwfTtgKX19fSx7InhtbGNoYXJzL3htbC8xLjAvZWQ1Ijo1NDMsInhtbGNoYXJzL3htbC8xLjEvZWQyIjo1NDQsInhtbGNoYXJzL3htbG5zLzEuMC9lZDMiOjU0NX1dLDQ5NzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyO2Z1bmN0aW9uIHMobyxyKXt0aGlzLl9ibG9jaz1tLmFsbG9jKG8pLHRoaXMuX2ZpbmFsU2l6ZT1yLHRoaXMuX2Jsb2NrU2l6ZT1vLHRoaXMuX2xlbj0wfXMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihvLHIpe3R5cGVvZiBvPT0ic3RyaW5nIiYmKHI9cnx8InV0ZjgiLG89bS5mcm9tKG8scikpO2Zvcih2YXIgdD10aGlzLl9ibG9jayxlPXRoaXMuX2Jsb2NrU2l6ZSxsPW8ubGVuZ3RoLG49dGhpcy5fbGVuLGk9MDtpPGw7KXtmb3IodmFyIGY9biVlLGM9TWF0aC5taW4obC1pLGUtZiksdT0wO3U8Yzt1KyspdFtmK3VdPW9baSt1XTtpKz1jLChuKz1jKSVlPT0wJiZ0aGlzLl91cGRhdGUodCl9cmV0dXJuIHRoaXMuX2xlbis9bCx0aGlzfSxzLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24obyl7dmFyIHI9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tyXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLHIrMSkscj49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgdD04KnRoaXMuX2xlbjtpZih0PD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUodCx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgZT0oNDI5NDk2NzI5NSZ0KT4+PjAsbD0odC1lKS80Mjk0OTY3Mjk2O3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUobCx0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShlLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBuPXRoaXMuX2hhc2goKTtyZXR1cm4gbz9uLnRvU3RyaW5nKG8pOm59LHMucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSxFLmV4cG9ydHM9c30seyJzYWZlLWJ1ZmZlciI6NDk0fV0sNDk4OltmdW5jdGlvbihhLEUsayl7dmFyIG09RS5leHBvcnRzPWZ1bmN0aW9uKHMpe3M9cy50b0xvd2VyQ2FzZSgpO3ZhciBvPW1bc107aWYoIW8pdGhyb3cgbmV3IEVycm9yKHMrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IG99O20uc2hhPWEoIi4vc2hhIiksbS5zaGExPWEoIi4vc2hhMSIpLG0uc2hhMjI0PWEoIi4vc2hhMjI0IiksbS5zaGEyNTY9YSgiLi9zaGEyNTYiKSxtLnNoYTM4ND1hKCIuL3NoYTM4NCIpLG0uc2hhNTEyPWEoIi4vc2hhNTEyIil9LHsiLi9zaGEiOjQ5OSwiLi9zaGExIjo1MDAsIi4vc2hhMjI0Ijo1MDEsIi4vc2hhMjU2Ijo1MDIsIi4vc2hhMzg0Ijo1MDMsIi4vc2hhNTEyIjo1MDR9XSw0OTk6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJpbmhlcml0cyIpLHM9YSgiLi9oYXNoIiksbz1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixyPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdD1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIGUoKXt0aGlzLmluaXQoKSx0aGlzLl93PXQscy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGwoaSl7cmV0dXJuIGk8PDMwfGk+Pj4yfWZ1bmN0aW9uIG4oaSxmLGMsdSl7cmV0dXJuIGk9PT0wP2YmY3x+ZiZ1Omk9PT0yP2YmY3xmJnV8YyZ1OmZeY151fW0oZSxzKSxlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGkpe2Zvcih2YXIgZixjPXRoaXMuX3csdT0wfHRoaXMuX2EsZD0wfHRoaXMuX2IsaD0wfHRoaXMuX2Msdz0wfHRoaXMuX2QsXz0wfHRoaXMuX2UsQT0wO0E8MTY7KytBKWNbQV09aS5yZWFkSW50MzJCRSg0KkEpO2Zvcig7QTw4MDsrK0EpY1tBXT1jW0EtM11eY1tBLThdXmNbQS0xNF1eY1tBLTE2XTtmb3IodmFyIFA9MDtQPDgwOysrUCl7dmFyIEw9fn4oUC8yMCksTj0wfCgoZj11KTw8NXxmPj4+MjcpK24oTCxkLGgsdykrXytjW1BdK3JbTF07Xz13LHc9aCxoPWwoZCksZD11LHU9Tn10aGlzLl9hPXUrdGhpcy5fYXwwLHRoaXMuX2I9ZCt0aGlzLl9ifDAsdGhpcy5fYz1oK3RoaXMuX2N8MCx0aGlzLl9kPXcrdGhpcy5fZHwwLHRoaXMuX2U9Xyt0aGlzLl9lfDB9LGUucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGk9by5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIGkud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxpLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksaS53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLGkud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksaS53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxpfSxFLmV4cG9ydHM9ZX0seyIuL2hhc2giOjQ5Nyxpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSw1MDA6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJpbmhlcml0cyIpLHM9YSgiLi9oYXNoIiksbz1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixyPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdD1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIGUoKXt0aGlzLmluaXQoKSx0aGlzLl93PXQscy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGwoZil7cmV0dXJuIGY8PDV8Zj4+PjI3fWZ1bmN0aW9uIG4oZil7cmV0dXJuIGY8PDMwfGY+Pj4yfWZ1bmN0aW9uIGkoZixjLHUsZCl7cmV0dXJuIGY9PT0wP2MmdXx+YyZkOmY9PT0yP2MmdXxjJmR8dSZkOmNedV5kfW0oZSxzKSxlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGYpe2Zvcih2YXIgYyx1PXRoaXMuX3csZD0wfHRoaXMuX2EsaD0wfHRoaXMuX2Isdz0wfHRoaXMuX2MsXz0wfHRoaXMuX2QsQT0wfHRoaXMuX2UsUD0wO1A8MTY7KytQKXVbUF09Zi5yZWFkSW50MzJCRSg0KlApO2Zvcig7UDw4MDsrK1ApdVtQXT0oYz11W1AtM11edVtQLThdXnVbUC0xNF1edVtQLTE2XSk8PDF8Yz4+PjMxO2Zvcih2YXIgTD0wO0w8ODA7KytMKXt2YXIgTj1+fihMLzIwKSxEPWwoZCkraShOLGgsdyxfKStBK3VbTF0rcltOXXwwO0E9XyxfPXcsdz1uKGgpLGg9ZCxkPUR9dGhpcy5fYT1kK3RoaXMuX2F8MCx0aGlzLl9iPWgrdGhpcy5fYnwwLHRoaXMuX2M9dyt0aGlzLl9jfDAsdGhpcy5fZD1fK3RoaXMuX2R8MCx0aGlzLl9lPUErdGhpcy5fZXwwfSxlLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBmPW8uYWxsb2NVbnNhZmUoMjApO3JldHVybiBmLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksZi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLGYud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxmLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLGYud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksZn0sRS5leHBvcnRzPWV9LHsiLi9oYXNoIjo0OTcsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNTAxOltmdW5jdGlvbihhLEUsayl7dmFyIG09YSgiaW5oZXJpdHMiKSxzPWEoIi4vc2hhMjU2Iiksbz1hKCIuL2hhc2giKSxyPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLHQ9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBlKCl7dGhpcy5pbml0KCksdGhpcy5fdz10LG8uY2FsbCh0aGlzLDY0LDU2KX1tKGUscyksZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxlLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBsPXIuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBsLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLGwud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksbC53cml0ZUludDMyQkUodGhpcy5fYyw4KSxsLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxsLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxsLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxsLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxsfSxFLmV4cG9ydHM9ZX0seyIuL2hhc2giOjQ5NywiLi9zaGEyNTYiOjUwMixpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSw1MDI6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJpbmhlcml0cyIpLHM9YSgiLi9oYXNoIiksbz1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixyPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLHQ9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBlKCl7dGhpcy5pbml0KCksdGhpcy5fdz10LHMuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBsKHUsZCxoKXtyZXR1cm4gaF51JihkXmgpfWZ1bmN0aW9uIG4odSxkLGgpe3JldHVybiB1JmR8aCYodXxkKX1mdW5jdGlvbiBpKHUpe3JldHVybih1Pj4+Mnx1PDwzMCleKHU+Pj4xM3x1PDwxOSleKHU+Pj4yMnx1PDwxMCl9ZnVuY3Rpb24gZih1KXtyZXR1cm4odT4+PjZ8dTw8MjYpXih1Pj4+MTF8dTw8MjEpXih1Pj4+MjV8dTw8Nyl9ZnVuY3Rpb24gYyh1KXtyZXR1cm4odT4+Pjd8dTw8MjUpXih1Pj4+MTh8dTw8MTQpXnU+Pj4zfW0oZSxzKSxlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHUpe2Zvcih2YXIgZCxoPXRoaXMuX3csdz0wfHRoaXMuX2EsXz0wfHRoaXMuX2IsQT0wfHRoaXMuX2MsUD0wfHRoaXMuX2QsTD0wfHRoaXMuX2UsTj0wfHRoaXMuX2YsRD0wfHRoaXMuX2csRj0wfHRoaXMuX2gsVT0wO1U8MTY7KytVKWhbVV09dS5yZWFkSW50MzJCRSg0KlUpO2Zvcig7VTw2NDsrK1UpaFtVXT0wfCgoKGQ9aFtVLTJdKT4+PjE3fGQ8PDE1KV4oZD4+PjE5fGQ8PDEzKV5kPj4+MTApK2hbVS03XStjKGhbVS0xNV0pK2hbVS0xNl07Zm9yKHZhciBCPTA7Qjw2NDsrK0Ipe3ZhciBTPUYrZihMKStsKEwsTixEKStyW0JdK2hbQl18MCxDPWkodykrbih3LF8sQSl8MDtGPUQsRD1OLE49TCxMPVArU3wwLFA9QSxBPV8sXz13LHc9UytDfDB9dGhpcy5fYT13K3RoaXMuX2F8MCx0aGlzLl9iPV8rdGhpcy5fYnwwLHRoaXMuX2M9QSt0aGlzLl9jfDAsdGhpcy5fZD1QK3RoaXMuX2R8MCx0aGlzLl9lPUwrdGhpcy5fZXwwLHRoaXMuX2Y9Tit0aGlzLl9mfDAsdGhpcy5fZz1EK3RoaXMuX2d8MCx0aGlzLl9oPUYrdGhpcy5faHwwfSxlLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB1PW8uYWxsb2NVbnNhZmUoMzIpO3JldHVybiB1LndyaXRlSW50MzJCRSh0aGlzLl9hLDApLHUud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksdS53cml0ZUludDMyQkUodGhpcy5fYyw4KSx1LndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSx1LndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSx1LndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSx1LndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSx1LndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSx1fSxFLmV4cG9ydHM9ZX0seyIuL2hhc2giOjQ5Nyxpbmhlcml0czo0NDAsInNhZmUtYnVmZmVyIjo0OTR9XSw1MDM6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJpbmhlcml0cyIpLHM9YSgiLi9zaGE1MTIiKSxvPWEoIi4vaGFzaCIpLHI9YSgic2FmZS1idWZmZXIiKS5CdWZmZXIsdD1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBlKCl7dGhpcy5pbml0KCksdGhpcy5fdz10LG8uY2FsbCh0aGlzLDEyOCwxMTIpfW0oZSxzKSxlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sZS5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgbD1yLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBuKGksZixjKXtsLndyaXRlSW50MzJCRShpLGMpLGwud3JpdGVJbnQzMkJFKGYsYys0KX1yZXR1cm4gbih0aGlzLl9haCx0aGlzLl9hbCwwKSxuKHRoaXMuX2JoLHRoaXMuX2JsLDgpLG4odGhpcy5fY2gsdGhpcy5fY2wsMTYpLG4odGhpcy5fZGgsdGhpcy5fZGwsMjQpLG4odGhpcy5fZWgsdGhpcy5fZWwsMzIpLG4odGhpcy5fZmgsdGhpcy5fZmwsNDApLGx9LEUuZXhwb3J0cz1lfSx7Ii4vaGFzaCI6NDk3LCIuL3NoYTUxMiI6NTA0LGluaGVyaXRzOjQ0MCwic2FmZS1idWZmZXIiOjQ5NH1dLDUwNDpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoImluaGVyaXRzIikscz1hKCIuL2hhc2giKSxvPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLHI9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSx0PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIGUoKXt0aGlzLmluaXQoKSx0aGlzLl93PXQscy5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gbChfLEEsUCl7cmV0dXJuIFBeXyYoQV5QKX1mdW5jdGlvbiBuKF8sQSxQKXtyZXR1cm4gXyZBfFAmKF98QSl9ZnVuY3Rpb24gaShfLEEpe3JldHVybihfPj4+Mjh8QTw8NCleKEE+Pj4yfF88PDMwKV4oQT4+Pjd8Xzw8MjUpfWZ1bmN0aW9uIGYoXyxBKXtyZXR1cm4oXz4+PjE0fEE8PDE4KV4oXz4+PjE4fEE8PDE0KV4oQT4+Pjl8Xzw8MjMpfWZ1bmN0aW9uIGMoXyxBKXtyZXR1cm4oXz4+PjF8QTw8MzEpXihfPj4+OHxBPDwyNCleXz4+Pjd9ZnVuY3Rpb24gdShfLEEpe3JldHVybihfPj4+MXxBPDwzMSleKF8+Pj44fEE8PDI0KV4oXz4+Pjd8QTw8MjUpfWZ1bmN0aW9uIGQoXyxBKXtyZXR1cm4oXz4+PjE5fEE8PDEzKV4oQT4+PjI5fF88PDMpXl8+Pj42fWZ1bmN0aW9uIGgoXyxBKXtyZXR1cm4oXz4+PjE5fEE8PDEzKV4oQT4+PjI5fF88PDMpXihfPj4+NnxBPDwyNil9ZnVuY3Rpb24gdyhfLEEpe3JldHVybiBfPj4+MDxBPj4+MD8xOjB9bShlLHMpLGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKF8pe2Zvcih2YXIgQT10aGlzLl93LFA9MHx0aGlzLl9haCxMPTB8dGhpcy5fYmgsTj0wfHRoaXMuX2NoLEQ9MHx0aGlzLl9kaCxGPTB8dGhpcy5fZWgsVT0wfHRoaXMuX2ZoLEI9MHx0aGlzLl9naCxTPTB8dGhpcy5faGgsQz0wfHRoaXMuX2FsLHY9MHx0aGlzLl9ibCxwPTB8dGhpcy5fY2wsYj0wfHRoaXMuX2RsLGc9MHx0aGlzLl9lbCx5PTB8dGhpcy5fZmwsTT0wfHRoaXMuX2dsLE89MHx0aGlzLl9obCxSPTA7UjwzMjtSKz0yKUFbUl09Xy5yZWFkSW50MzJCRSg0KlIpLEFbUisxXT1fLnJlYWRJbnQzMkJFKDQqUis0KTtmb3IoO1I8MTYwO1IrPTIpe3ZhciB6PUFbUi0zMF0sJD1BW1ItMzArMV0sWD1jKHosJCksaj11KCQseiksVz1kKHo9QVtSLTRdLCQ9QVtSLTQrMV0pLFQ9aCgkLHopLHg9QVtSLTE0XSxJPUFbUi0xNCsxXSxIPUFbUi0zMl0sWj1BW1ItMzIrMV0sVj1qK0l8MCxLPVgreCt3KFYsail8MDtLPShLPUsrVyt3KFY9VitUfDAsVCl8MCkrSCt3KFY9VitafDAsWil8MCxBW1JdPUssQVtSKzFdPVZ9Zm9yKHZhciBZPTA7WTwxNjA7WSs9Mil7Sz1BW1ldLFY9QVtZKzFdO3ZhciBKPW4oUCxMLE4pLHE9bihDLHYscCksRz1pKFAsQyksUT1pKEMsUCkscnQ9ZihGLGcpLHN0PWYoZyxGKSxvdD1yW1ldLGh0PXJbWSsxXSxkdD1sKEYsVSxCKSxtdD1sKGcseSxNKSxNdD1PK3N0fDAsQ3Q9UytydCt3KE10LE8pfDA7Q3Q9KEN0PShDdD1DdCtkdCt3KE10PU10K210fDAsbXQpfDApK290K3coTXQ9TXQraHR8MCxodCl8MCkrSyt3KE10PU10K1Z8MCxWKXwwO3ZhciBfdD1RK3F8MCx5dD1HK0ordyhfdCxRKXwwO1M9QixPPU0sQj1VLE09eSxVPUYseT1nLEY9RCtDdCt3KGc9YitNdHwwLGIpfDAsRD1OLGI9cCxOPUwscD12LEw9UCx2PUMsUD1DdCt5dCt3KEM9TXQrX3R8MCxNdCl8MH10aGlzLl9hbD10aGlzLl9hbCtDfDAsdGhpcy5fYmw9dGhpcy5fYmwrdnwwLHRoaXMuX2NsPXRoaXMuX2NsK3B8MCx0aGlzLl9kbD10aGlzLl9kbCtifDAsdGhpcy5fZWw9dGhpcy5fZWwrZ3wwLHRoaXMuX2ZsPXRoaXMuX2ZsK3l8MCx0aGlzLl9nbD10aGlzLl9nbCtNfDAsdGhpcy5faGw9dGhpcy5faGwrT3wwLHRoaXMuX2FoPXRoaXMuX2FoK1Ardyh0aGlzLl9hbCxDKXwwLHRoaXMuX2JoPXRoaXMuX2JoK0wrdyh0aGlzLl9ibCx2KXwwLHRoaXMuX2NoPXRoaXMuX2NoK04rdyh0aGlzLl9jbCxwKXwwLHRoaXMuX2RoPXRoaXMuX2RoK0Qrdyh0aGlzLl9kbCxiKXwwLHRoaXMuX2VoPXRoaXMuX2VoK0Yrdyh0aGlzLl9lbCxnKXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK1Urdyh0aGlzLl9mbCx5KXwwLHRoaXMuX2doPXRoaXMuX2doK0Irdyh0aGlzLl9nbCxNKXwwLHRoaXMuX2hoPXRoaXMuX2hoK1Mrdyh0aGlzLl9obCxPKXwwfSxlLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBfPW8uYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIEEoUCxMLE4pe18ud3JpdGVJbnQzMkJFKFAsTiksXy53cml0ZUludDMyQkUoTCxOKzQpfXJldHVybiBBKHRoaXMuX2FoLHRoaXMuX2FsLDApLEEodGhpcy5fYmgsdGhpcy5fYmwsOCksQSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksQSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksQSh0aGlzLl9laCx0aGlzLl9lbCwzMiksQSh0aGlzLl9maCx0aGlzLl9mbCw0MCksQSh0aGlzLl9naCx0aGlzLl9nbCw0OCksQSh0aGlzLl9oaCx0aGlzLl9obCw1NiksX30sRS5leHBvcnRzPWV9LHsiLi9oYXNoIjo0OTcsaW5oZXJpdHM6NDQwLCJzYWZlLWJ1ZmZlciI6NDk0fV0sNTA1OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPXM7dmFyIG09YSgiZXZlbnRzIikuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIHMoKXttLmNhbGwodGhpcyl9YSgiaW5oZXJpdHMiKShzLG0pLHMuUmVhZGFibGU9YSgicmVhZGFibGUtc3RyZWFtL3JlYWRhYmxlLmpzIikscy5Xcml0YWJsZT1hKCJyZWFkYWJsZS1zdHJlYW0vd3JpdGFibGUuanMiKSxzLkR1cGxleD1hKCJyZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzIikscy5UcmFuc2Zvcm09YSgicmVhZGFibGUtc3RyZWFtL3RyYW5zZm9ybS5qcyIpLHMuUGFzc1Rocm91Z2g9YSgicmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzIikscy5TdHJlYW09cyxzLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKG8scil7dmFyIHQ9dGhpcztmdW5jdGlvbiBlKGQpe28ud3JpdGFibGUmJm8ud3JpdGUoZCk9PT0hMSYmdC5wYXVzZSYmdC5wYXVzZSgpfWZ1bmN0aW9uIGwoKXt0LnJlYWRhYmxlJiZ0LnJlc3VtZSYmdC5yZXN1bWUoKX10Lm9uKCJkYXRhIixlKSxvLm9uKCJkcmFpbiIsbCksby5faXNTdGRpb3x8ciYmci5lbmQ9PT0hMXx8KHQub24oImVuZCIsaSksdC5vbigiY2xvc2UiLGYpKTt2YXIgbj0hMTtmdW5jdGlvbiBpKCl7bnx8KG49ITAsby5lbmQoKSl9ZnVuY3Rpb24gZigpe258fChuPSEwLHR5cGVvZiBvLmRlc3Ryb3k9PSJmdW5jdGlvbiImJm8uZGVzdHJveSgpKX1mdW5jdGlvbiBjKGQpe2lmKHUoKSxtLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKT09PTApdGhyb3cgZH1mdW5jdGlvbiB1KCl7dC5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsZSksby5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLGwpLHQucmVtb3ZlTGlzdGVuZXIoImVuZCIsaSksdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGYpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixjKSxvLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsYyksdC5yZW1vdmVMaXN0ZW5lcigiZW5kIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdSksby5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHUpfXJldHVybiB0Lm9uKCJlcnJvciIsYyksby5vbigiZXJyb3IiLGMpLHQub24oImVuZCIsdSksdC5vbigiY2xvc2UiLHUpLG8ub24oImNsb3NlIix1KSxvLmVtaXQoInBpcGUiLHQpLG99fSx7ZXZlbnRzOjQyMixpbmhlcml0czo0NDAsInJlYWRhYmxlLXN0cmVhbS9kdXBsZXguanMiOjUwNywicmVhZGFibGUtc3RyZWFtL3Bhc3N0aHJvdWdoLmpzIjo1MTYsInJlYWRhYmxlLXN0cmVhbS9yZWFkYWJsZS5qcyI6NTE3LCJyZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtLmpzIjo1MTgsInJlYWRhYmxlLXN0cmVhbS93cml0YWJsZS5qcyI6NTE5fV0sNTA2OltmdW5jdGlvbihhLEUsayl7dmFyIG09e30udG9TdHJpbmc7RS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHMpe3JldHVybiBtLmNhbGwocyk9PSJbb2JqZWN0IEFycmF5XSJ9fSx7fV0sNTA3OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWEoIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzIil9LHsiLi9saWIvX3N0cmVhbV9kdXBsZXguanMiOjUwOH1dLDUwODpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoInByb2Nlc3MtbmV4dGljay1hcmdzIikscz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odSl7dmFyIGQ9W107Zm9yKHZhciBoIGluIHUpZC5wdXNoKGgpO3JldHVybiBkfTtFLmV4cG9ydHM9aTt2YXIgbz1PYmplY3QuY3JlYXRlKGEoImNvcmUtdXRpbC1pcyIpKTtvLmluaGVyaXRzPWEoImluaGVyaXRzIik7dmFyIHI9YSgiLi9fc3RyZWFtX3JlYWRhYmxlIiksdD1hKCIuL19zdHJlYW1fd3JpdGFibGUiKTtvLmluaGVyaXRzKGkscik7Zm9yKHZhciBlPXModC5wcm90b3R5cGUpLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIG49ZVtsXTtpLnByb3RvdHlwZVtuXXx8KGkucHJvdG90eXBlW25dPXQucHJvdG90eXBlW25dKX1mdW5jdGlvbiBpKHUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGkpKXJldHVybiBuZXcgaSh1KTtyLmNhbGwodGhpcyx1KSx0LmNhbGwodGhpcyx1KSx1JiZ1LnJlYWRhYmxlPT09ITEmJih0aGlzLnJlYWRhYmxlPSExKSx1JiZ1LndyaXRhYmxlPT09ITEmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsdSYmdS5hbGxvd0hhbGZPcGVuPT09ITEmJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZSgiZW5kIixmKX1mdW5jdGlvbiBmKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxtLm5leHRUaWNrKGMsdGhpcyl9ZnVuY3Rpb24gYyh1KXt1LmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUhPT12b2lkIDAmJnRoaXMuX3dyaXRhYmxlU3RhdGUhPT12b2lkIDAmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHUpe3RoaXMuX3JlYWRhYmxlU3RhdGUhPT12b2lkIDAmJnRoaXMuX3dyaXRhYmxlU3RhdGUhPT12b2lkIDAmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD11LHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXUpfX0pLGkucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHUsZCl7dGhpcy5wdXNoKG51bGwpLHRoaXMuZW5kKCksbS5uZXh0VGljayhkLHUpfX0seyIuL19zdHJlYW1fcmVhZGFibGUiOjUxMCwiLi9fc3RyZWFtX3dyaXRhYmxlIjo1MTIsImNvcmUtdXRpbC1pcyI6MzgzLGluaGVyaXRzOjQ0MCwicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOjQ2Nn1dLDUwOTpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz1vO3ZhciBtPWEoIi4vX3N0cmVhbV90cmFuc2Zvcm0iKSxzPU9iamVjdC5jcmVhdGUoYSgiY29yZS11dGlsLWlzIikpO2Z1bmN0aW9uIG8ocil7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKHIpO20uY2FsbCh0aGlzLHIpfXMuaW5oZXJpdHM9YSgiaW5oZXJpdHMiKSxzLmluaGVyaXRzKG8sbSksby5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihyLHQsZSl7ZShudWxsLHIpfX0seyIuL19zdHJlYW1fdHJhbnNmb3JtIjo1MTEsImNvcmUtdXRpbC1pcyI6MzgzLGluaGVyaXRzOjQ0MH1dLDUxMDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe3ZhciBvPWEoInByb2Nlc3MtbmV4dGljay1hcmdzIik7RS5leHBvcnRzPVA7dmFyIHIsdD1hKCJpc2FycmF5Iik7UC5SZWFkYWJsZVN0YXRlPUEsYSgiZXZlbnRzIikuRXZlbnRFbWl0dGVyO3ZhciBlPWZ1bmN0aW9uKE8sUil7cmV0dXJuIE8ubGlzdGVuZXJzKFIpLmxlbmd0aH0sbD1hKCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIiksbj1hKCJzYWZlLWJ1ZmZlciIpLkJ1ZmZlcixpPShzIT09dm9pZCAwP3M6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sZj1PYmplY3QuY3JlYXRlKGEoImNvcmUtdXRpbC1pcyIpKTtmLmluaGVyaXRzPWEoImluaGVyaXRzIik7dmFyIGM9YSgidXRpbCIpLHU9dm9pZCAwO3U9YyYmYy5kZWJ1Z2xvZz9jLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGQsaD1hKCIuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCIpLHc9YSgiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3kiKTtmLmluaGVyaXRzKFAsbCk7dmFyIF89WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gQShPLFIpe089T3x8e307dmFyIHo9UiBpbnN0YW5jZW9mKHI9cnx8YSgiLi9fc3RyZWFtX2R1cGxleCIpKTt0aGlzLm9iamVjdE1vZGU9ISFPLm9iamVjdE1vZGUseiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhTy5yZWFkYWJsZU9iamVjdE1vZGUpO3ZhciAkPU8uaGlnaFdhdGVyTWFyayxYPU8ucmVhZGFibGVIaWdoV2F0ZXJNYXJrLGo9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz0kfHwkPT09MD8kOnomJihYfHxYPT09MCk/WDpqLHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVyTWFyayksdGhpcy5idWZmZXI9bmV3IGgsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPU8uZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsTy5lbmNvZGluZyYmKGR8fChkPWEoInN0cmluZ19kZWNvZGVyLyIpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgZChPLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPU8uZW5jb2RpbmcpfWZ1bmN0aW9uIFAoTyl7aWYocj1yfHxhKCIuL19zdHJlYW1fZHVwbGV4IiksISh0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5ldyBQKE8pO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IEEoTyx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLE8mJih0eXBlb2YgTy5yZWFkPT0iZnVuY3Rpb24iJiYodGhpcy5fcmVhZD1PLnJlYWQpLHR5cGVvZiBPLmRlc3Ryb3k9PSJmdW5jdGlvbiImJih0aGlzLl9kZXN0cm95PU8uZGVzdHJveSkpLGwuY2FsbCh0aGlzKX1mdW5jdGlvbiBMKE8sUix6LCQsWCl7dmFyIGosVz1PLl9yZWFkYWJsZVN0YXRlO3JldHVybiBSPT09bnVsbD8oVy5yZWFkaW5nPSExLGZ1bmN0aW9uKFQseCl7aWYoIXguZW5kZWQpe2lmKHguZGVjb2Rlcil7dmFyIEk9eC5kZWNvZGVyLmVuZCgpO0kmJkkubGVuZ3RoJiYoeC5idWZmZXIucHVzaChJKSx4Lmxlbmd0aCs9eC5vYmplY3RNb2RlPzE6SS5sZW5ndGgpfXguZW5kZWQ9ITAsRihUKX19KE8sVykpOihYfHwoaj1mdW5jdGlvbihULHgpe3ZhciBJO0g9eCxuLmlzQnVmZmVyKEgpfHxIIGluc3RhbmNlb2YgaXx8dHlwZW9mIHg9PSJzdHJpbmcifHx4PT09dm9pZCAwfHxULm9iamVjdE1vZGV8fChJPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSk7dmFyIEg7cmV0dXJuIEl9KFcsUikpLGo/Ty5lbWl0KCJlcnJvciIsaik6Vy5vYmplY3RNb2RlfHxSJiZSLmxlbmd0aD4wPyh0eXBlb2YgUj09InN0cmluZyJ8fFcub2JqZWN0TW9kZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKFIpPT09bi5wcm90b3R5cGV8fChSPWZ1bmN0aW9uKFQpe3JldHVybiBuLmZyb20oVCl9KFIpKSwkP1cuZW5kRW1pdHRlZD9PLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOk4oTyxXLFIsITApOlcuZW5kZWQ/Ty5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpKTooVy5yZWFkaW5nPSExLFcuZGVjb2RlciYmIXo/KFI9Vy5kZWNvZGVyLndyaXRlKFIpLFcub2JqZWN0TW9kZXx8Ui5sZW5ndGghPT0wP04oTyxXLFIsITEpOkIoTyxXKSk6TihPLFcsUiwhMSkpKTokfHwoVy5yZWFkaW5nPSExKSksZnVuY3Rpb24oVCl7cmV0dXJuIVQuZW5kZWQmJihULm5lZWRSZWFkYWJsZXx8VC5sZW5ndGg8VC5oaWdoV2F0ZXJNYXJrfHxULmxlbmd0aD09PTApfShXKX1mdW5jdGlvbiBOKE8sUix6LCQpe1IuZmxvd2luZyYmUi5sZW5ndGg9PT0wJiYhUi5zeW5jPyhPLmVtaXQoImRhdGEiLHopLE8ucmVhZCgwKSk6KFIubGVuZ3RoKz1SLm9iamVjdE1vZGU/MTp6Lmxlbmd0aCwkP1IuYnVmZmVyLnVuc2hpZnQoeik6Ui5idWZmZXIucHVzaCh6KSxSLm5lZWRSZWFkYWJsZSYmRihPKSksQihPLFIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShQLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUhPT12b2lkIDAmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oTyl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPU8pfX0pLFAucHJvdG90eXBlLmRlc3Ryb3k9dy5kZXN0cm95LFAucHJvdG90eXBlLl91bmRlc3Ryb3k9dy51bmRlc3Ryb3ksUC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTyxSKXt0aGlzLnB1c2gobnVsbCksUihPKX0sUC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihPLFIpe3ZhciB6LCQ9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gJC5vYmplY3RNb2RlP3o9ITA6dHlwZW9mIE89PSJzdHJpbmciJiYoKFI9Unx8JC5kZWZhdWx0RW5jb2RpbmcpIT09JC5lbmNvZGluZyYmKE89bi5mcm9tKE8sUiksUj0iIiksej0hMCksTCh0aGlzLE8sUiwhMSx6KX0sUC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihPKXtyZXR1cm4gTCh0aGlzLE8sbnVsbCwhMCwhMSl9LFAucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz09PSExfSxQLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihPKXtyZXR1cm4gZHx8KGQ9YSgic3RyaW5nX2RlY29kZXIvIikuU3RyaW5nRGVjb2RlciksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBkKE8pLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9Tyx0aGlzfTtmdW5jdGlvbiBEKE8sUil7cmV0dXJuIE88PTB8fFIubGVuZ3RoPT09MCYmUi5lbmRlZD8wOlIub2JqZWN0TW9kZT8xOk8hPU8/Ui5mbG93aW5nJiZSLmxlbmd0aD9SLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOlIubGVuZ3RoOihPPlIuaGlnaFdhdGVyTWFyayYmKFIuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbih6KXtyZXR1cm4gej49ODM4ODYwOD96PTgzODg2MDg6KHotLSx6fD16Pj4+MSx6fD16Pj4+Mix6fD16Pj4+NCx6fD16Pj4+OCx6fD16Pj4+MTYseisrKSx6fShPKSksTzw9Ui5sZW5ndGg/TzpSLmVuZGVkP1IubGVuZ3RoOihSLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gRihPKXt2YXIgUj1PLl9yZWFkYWJsZVN0YXRlO1IubmVlZFJlYWRhYmxlPSExLFIuZW1pdHRlZFJlYWRhYmxlfHwodSgiZW1pdFJlYWRhYmxlIixSLmZsb3dpbmcpLFIuZW1pdHRlZFJlYWRhYmxlPSEwLFIuc3luYz9vLm5leHRUaWNrKFUsTyk6VShPKSl9ZnVuY3Rpb24gVShPKXt1KCJlbWl0IHJlYWRhYmxlIiksTy5lbWl0KCJyZWFkYWJsZSIpLHAoTyl9ZnVuY3Rpb24gQihPLFIpe1IucmVhZGluZ01vcmV8fChSLnJlYWRpbmdNb3JlPSEwLG8ubmV4dFRpY2soUyxPLFIpKX1mdW5jdGlvbiBTKE8sUil7Zm9yKHZhciB6PVIubGVuZ3RoOyFSLnJlYWRpbmcmJiFSLmZsb3dpbmcmJiFSLmVuZGVkJiZSLmxlbmd0aDxSLmhpZ2hXYXRlck1hcmsmJih1KCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLE8ucmVhZCgwKSx6IT09Ui5sZW5ndGgpOyl6PVIubGVuZ3RoO1IucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gQyhPKXt1KCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxPLnJlYWQoMCl9ZnVuY3Rpb24gdihPLFIpe1IucmVhZGluZ3x8KHUoInJlc3VtZSByZWFkIDAiKSxPLnJlYWQoMCkpLFIucmVzdW1lU2NoZWR1bGVkPSExLFIuYXdhaXREcmFpbj0wLE8uZW1pdCgicmVzdW1lIikscChPKSxSLmZsb3dpbmcmJiFSLnJlYWRpbmcmJk8ucmVhZCgwKX1mdW5jdGlvbiBwKE8pe3ZhciBSPU8uX3JlYWRhYmxlU3RhdGU7Zm9yKHUoImZsb3ciLFIuZmxvd2luZyk7Ui5mbG93aW5nJiZPLnJlYWQoKSE9PW51bGw7KTt9ZnVuY3Rpb24gYihPLFIpe3JldHVybiBSLmxlbmd0aD09PTA/bnVsbDooUi5vYmplY3RNb2RlP3o9Ui5idWZmZXIuc2hpZnQoKTohT3x8Tz49Ui5sZW5ndGg/KHo9Ui5kZWNvZGVyP1IuYnVmZmVyLmpvaW4oIiIpOlIuYnVmZmVyLmxlbmd0aD09PTE/Ui5idWZmZXIuaGVhZC5kYXRhOlIuYnVmZmVyLmNvbmNhdChSLmxlbmd0aCksUi5idWZmZXIuY2xlYXIoKSk6ej1mdW5jdGlvbigkLFgsail7dmFyIFc7cmV0dXJuICQ8WC5oZWFkLmRhdGEubGVuZ3RoPyhXPVguaGVhZC5kYXRhLnNsaWNlKDAsJCksWC5oZWFkLmRhdGE9WC5oZWFkLmRhdGEuc2xpY2UoJCkpOlc9JD09PVguaGVhZC5kYXRhLmxlbmd0aD9YLnNoaWZ0KCk6aj9mdW5jdGlvbihULHgpe3ZhciBJPXguaGVhZCxIPTEsWj1JLmRhdGE7Zm9yKFQtPVoubGVuZ3RoO0k9SS5uZXh0Oyl7dmFyIFY9SS5kYXRhLEs9VD5WLmxlbmd0aD9WLmxlbmd0aDpUO2lmKEs9PT1WLmxlbmd0aD9aKz1WOlorPVYuc2xpY2UoMCxUKSwoVC09Syk9PT0wKXtLPT09Vi5sZW5ndGg/KCsrSCxJLm5leHQ/eC5oZWFkPUkubmV4dDp4LmhlYWQ9eC50YWlsPW51bGwpOih4LmhlYWQ9SSxJLmRhdGE9Vi5zbGljZShLKSk7YnJlYWt9KytIfXJldHVybiB4Lmxlbmd0aC09SCxafSgkLFgpOmZ1bmN0aW9uKFQseCl7dmFyIEk9bi5hbGxvY1Vuc2FmZShUKSxIPXguaGVhZCxaPTE7Zm9yKEguZGF0YS5jb3B5KEkpLFQtPUguZGF0YS5sZW5ndGg7SD1ILm5leHQ7KXt2YXIgVj1ILmRhdGEsSz1UPlYubGVuZ3RoP1YubGVuZ3RoOlQ7aWYoVi5jb3B5KEksSS5sZW5ndGgtVCwwLEspLChULT1LKT09PTApe0s9PT1WLmxlbmd0aD8oKytaLEgubmV4dD94LmhlYWQ9SC5uZXh0OnguaGVhZD14LnRhaWw9bnVsbCk6KHguaGVhZD1ILEguZGF0YT1WLnNsaWNlKEspKTticmVha30rK1p9cmV0dXJuIHgubGVuZ3RoLT1aLEl9KCQsWCksV30oTyxSLmJ1ZmZlcixSLmRlY29kZXIpLHopO3ZhciB6fWZ1bmN0aW9uIGcoTyl7dmFyIFI9Ty5fcmVhZGFibGVTdGF0ZTtpZihSLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignImVuZFJlYWRhYmxlKCkiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7Ui5lbmRFbWl0dGVkfHwoUi5lbmRlZD0hMCxvLm5leHRUaWNrKHksUixPKSl9ZnVuY3Rpb24geShPLFIpe08uZW5kRW1pdHRlZHx8Ty5sZW5ndGghPT0wfHwoTy5lbmRFbWl0dGVkPSEwLFIucmVhZGFibGU9ITEsUi5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24gTShPLFIpe2Zvcih2YXIgej0wLCQ9Ty5sZW5ndGg7ejwkO3orKylpZihPW3pdPT09UilyZXR1cm4gejtyZXR1cm4tMX1QLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKE8pe3UoInJlYWQiLE8pLE89cGFyc2VJbnQoTywxMCk7dmFyIFI9dGhpcy5fcmVhZGFibGVTdGF0ZSx6PU87aWYoTyE9PTAmJihSLmVtaXR0ZWRSZWFkYWJsZT0hMSksTz09PTAmJlIubmVlZFJlYWRhYmxlJiYoUi5sZW5ndGg+PVIuaGlnaFdhdGVyTWFya3x8Ui5lbmRlZCkpcmV0dXJuIHUoInJlYWQ6IGVtaXRSZWFkYWJsZSIsUi5sZW5ndGgsUi5lbmRlZCksUi5sZW5ndGg9PT0wJiZSLmVuZGVkP2codGhpcyk6Rih0aGlzKSxudWxsO2lmKChPPUQoTyxSKSk9PT0wJiZSLmVuZGVkKXJldHVybiBSLmxlbmd0aD09PTAmJmcodGhpcyksbnVsbDt2YXIgJCxYPVIubmVlZFJlYWRhYmxlO3JldHVybiB1KCJuZWVkIHJlYWRhYmxlIixYKSwoUi5sZW5ndGg9PT0wfHxSLmxlbmd0aC1PPFIuaGlnaFdhdGVyTWFyaykmJnUoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixYPSEwKSxSLmVuZGVkfHxSLnJlYWRpbmc/dSgicmVhZGluZyBvciBlbmRlZCIsWD0hMSk6WCYmKHUoImRvIHJlYWQiKSxSLnJlYWRpbmc9ITAsUi5zeW5jPSEwLFIubGVuZ3RoPT09MCYmKFIubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKFIuaGlnaFdhdGVyTWFyayksUi5zeW5jPSExLFIucmVhZGluZ3x8KE89RCh6LFIpKSksKCQ9Tz4wP2IoTyxSKTpudWxsKT09PW51bGw/KFIubmVlZFJlYWRhYmxlPSEwLE89MCk6Ui5sZW5ndGgtPU8sUi5sZW5ndGg9PT0wJiYoUi5lbmRlZHx8KFIubmVlZFJlYWRhYmxlPSEwKSx6IT09TyYmUi5lbmRlZCYmZyh0aGlzKSksJCE9PW51bGwmJnRoaXMuZW1pdCgiZGF0YSIsJCksJH0sUC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oTyl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sUC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihPLFIpe3ZhciB6PXRoaXMsJD10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaCgkLnBpcGVzQ291bnQpe2Nhc2UgMDokLnBpcGVzPU87YnJlYWs7Y2FzZSAxOiQucGlwZXM9WyQucGlwZXMsT107YnJlYWs7ZGVmYXVsdDokLnBpcGVzLnB1c2goTyl9JC5waXBlc0NvdW50Kz0xLHUoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsJC5waXBlc0NvdW50LFIpO3ZhciBYPSghUnx8Ui5lbmQhPT0hMSkmJk8hPT1tLnN0ZG91dCYmTyE9PW0uc3RkZXJyP1c6WTtmdW5jdGlvbiBqKEoscSl7dSgib251bnBpcGUiKSxKPT09eiYmcSYmcS5oYXNVbnBpcGVkPT09ITEmJihxLmhhc1VucGlwZWQ9ITAsdSgiY2xlYW51cCIpLE8ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixWKSxPLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLEspLE8ucmVtb3ZlTGlzdGVuZXIoImRyYWluIixUKSxPLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWiksTy5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixqKSx6LnJlbW92ZUxpc3RlbmVyKCJlbmQiLFcpLHoucmVtb3ZlTGlzdGVuZXIoImVuZCIsWSksei5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsSCkseD0hMCwhJC5hd2FpdERyYWlufHxPLl93cml0YWJsZVN0YXRlJiYhTy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fFQoKSl9ZnVuY3Rpb24gVygpe3UoIm9uZW5kIiksTy5lbmQoKX0kLmVuZEVtaXR0ZWQ/by5uZXh0VGljayhYKTp6Lm9uY2UoImVuZCIsWCksTy5vbigidW5waXBlIixqKTt2YXIgVD1mdW5jdGlvbihKKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcT1KLl9yZWFkYWJsZVN0YXRlO3UoInBpcGVPbkRyYWluIixxLmF3YWl0RHJhaW4pLHEuYXdhaXREcmFpbiYmcS5hd2FpdERyYWluLS0scS5hd2FpdERyYWluPT09MCYmZShKLCJkYXRhIikmJihxLmZsb3dpbmc9ITAscChKKSl9fSh6KTtPLm9uKCJkcmFpbiIsVCk7dmFyIHg9ITEsST0hMTtmdW5jdGlvbiBIKEope3UoIm9uZGF0YSIpLEk9ITEsTy53cml0ZShKKSE9PSExfHxJfHwoKCQucGlwZXNDb3VudD09PTEmJiQucGlwZXM9PT1PfHwkLnBpcGVzQ291bnQ+MSYmTSgkLnBpcGVzLE8pIT09LTEpJiYheCYmKHUoImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsJC5hd2FpdERyYWluKSwkLmF3YWl0RHJhaW4rKyxJPSEwKSx6LnBhdXNlKCkpfWZ1bmN0aW9uIFooSil7dSgib25lcnJvciIsSiksWSgpLE8ucmVtb3ZlTGlzdGVuZXIoImVycm9yIixaKSxlKE8sImVycm9yIik9PT0wJiZPLmVtaXQoImVycm9yIixKKX1mdW5jdGlvbiBWKCl7Ty5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixLKSxZKCl9ZnVuY3Rpb24gSygpe3UoIm9uZmluaXNoIiksTy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFYpLFkoKX1mdW5jdGlvbiBZKCl7dSgidW5waXBlIiksei51bnBpcGUoTyl9cmV0dXJuIHoub24oImRhdGEiLEgpLGZ1bmN0aW9uKEoscSxHKXtpZih0eXBlb2YgSi5wcmVwZW5kTGlzdGVuZXI9PSJmdW5jdGlvbiIpcmV0dXJuIEoucHJlcGVuZExpc3RlbmVyKHEsRyk7Si5fZXZlbnRzJiZKLl9ldmVudHNbcV0/dChKLl9ldmVudHNbcV0pP0ouX2V2ZW50c1txXS51bnNoaWZ0KEcpOkouX2V2ZW50c1txXT1bRyxKLl9ldmVudHNbcV1dOkoub24ocSxHKX0oTywiZXJyb3IiLFopLE8ub25jZSgiY2xvc2UiLFYpLE8ub25jZSgiZmluaXNoIixLKSxPLmVtaXQoInBpcGUiLHopLCQuZmxvd2luZ3x8KHUoInBpcGUgcmVzdW1lIiksei5yZXN1bWUoKSksT30sUC5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKE8pe3ZhciBSPXRoaXMuX3JlYWRhYmxlU3RhdGUsej17aGFzVW5waXBlZDohMX07aWYoUi5waXBlc0NvdW50PT09MClyZXR1cm4gdGhpcztpZihSLnBpcGVzQ291bnQ9PT0xKXJldHVybiBPJiZPIT09Ui5waXBlc3x8KE98fChPPVIucGlwZXMpLFIucGlwZXM9bnVsbCxSLnBpcGVzQ291bnQ9MCxSLmZsb3dpbmc9ITEsTyYmTy5lbWl0KCJ1bnBpcGUiLHRoaXMseikpLHRoaXM7aWYoIU8pe3ZhciAkPVIucGlwZXMsWD1SLnBpcGVzQ291bnQ7Ui5waXBlcz1udWxsLFIucGlwZXNDb3VudD0wLFIuZmxvd2luZz0hMTtmb3IodmFyIGo9MDtqPFg7aisrKSRbal0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIFc9TShSLnBpcGVzLE8pO3JldHVybiBXPT09LTF8fChSLnBpcGVzLnNwbGljZShXLDEpLFIucGlwZXNDb3VudC09MSxSLnBpcGVzQ291bnQ9PT0xJiYoUi5waXBlcz1SLnBpcGVzWzBdKSxPLmVtaXQoInVucGlwZSIsdGhpcyx6KSksdGhpc30sUC5wcm90b3R5cGUub249ZnVuY3Rpb24oTyxSKXt2YXIgej1sLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsTyxSKTtpZihPPT09ImRhdGEiKXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyE9PSExJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoTz09PSJyZWFkYWJsZSIpe3ZhciAkPXRoaXMuX3JlYWRhYmxlU3RhdGU7JC5lbmRFbWl0dGVkfHwkLnJlYWRhYmxlTGlzdGVuaW5nfHwoJC5yZWFkYWJsZUxpc3RlbmluZz0kLm5lZWRSZWFkYWJsZT0hMCwkLmVtaXR0ZWRSZWFkYWJsZT0hMSwkLnJlYWRpbmc/JC5sZW5ndGgmJkYodGhpcyk6by5uZXh0VGljayhDLHRoaXMpKX1yZXR1cm4gen0sUC5wcm90b3R5cGUuYWRkTGlzdGVuZXI9UC5wcm90b3R5cGUub24sUC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIE89dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gTy5mbG93aW5nfHwodSgicmVzdW1lIiksTy5mbG93aW5nPSEwLGZ1bmN0aW9uKFIseil7ei5yZXN1bWVTY2hlZHVsZWR8fCh6LnJlc3VtZVNjaGVkdWxlZD0hMCxvLm5leHRUaWNrKHYsUix6KSl9KHRoaXMsTykpLHRoaXN9LFAucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHUoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmchPT0hMSYmKHUoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30sUC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihPKXt2YXIgUj10aGlzLHo9dGhpcy5fcmVhZGFibGVTdGF0ZSwkPSExO2Zvcih2YXIgWCBpbiBPLm9uKCJlbmQiLGZ1bmN0aW9uKCl7aWYodSgid3JhcHBlZCBlbmQiKSx6LmRlY29kZXImJiF6LmVuZGVkKXt2YXIgVz16LmRlY29kZXIuZW5kKCk7VyYmVy5sZW5ndGgmJlIucHVzaChXKX1SLnB1c2gobnVsbCl9KSxPLm9uKCJkYXRhIixmdW5jdGlvbihXKXt1KCJ3cmFwcGVkIGRhdGEiKSx6LmRlY29kZXImJihXPXouZGVjb2Rlci53cml0ZShXKSksei5vYmplY3RNb2RlJiZXPT1udWxsfHwoei5vYmplY3RNb2RlfHxXJiZXLmxlbmd0aCkmJihSLnB1c2goVyl8fCgkPSEwLE8ucGF1c2UoKSkpfSksTyl0aGlzW1hdPT09dm9pZCAwJiZ0eXBlb2YgT1tYXT09ImZ1bmN0aW9uIiYmKHRoaXNbWF09ZnVuY3Rpb24oVyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE9bV10uYXBwbHkoTyxhcmd1bWVudHMpfX0oWCkpO2Zvcih2YXIgaj0wO2o8Xy5sZW5ndGg7aisrKU8ub24oX1tqXSx0aGlzLmVtaXQuYmluZCh0aGlzLF9bal0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihXKXt1KCJ3cmFwcGVkIF9yZWFkIixXKSwkJiYoJD0hMSxPLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFAucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksUC5fZnJvbUxpc3Q9Yn0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsYSgiX3Byb2Nlc3MiKSx0eXBlb2YgSnQ8InUiP0p0OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHsiLi9fc3RyZWFtX2R1cGxleCI6NTA4LCIuL2ludGVybmFsL3N0cmVhbXMvQnVmZmVyTGlzdCI6NTEzLCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NTE0LCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIjo1MTUsX3Byb2Nlc3M6NDY3LCJjb3JlLXV0aWwtaXMiOjM4MyxldmVudHM6NDIyLGluaGVyaXRzOjQ0MCxpc2FycmF5OjUwNiwicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOjQ2Niwic2FmZS1idWZmZXIiOjUyMCwic3RyaW5nX2RlY29kZXIvIjo1MjEsdXRpbDoxODh9XSw1MTE6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9cjt2YXIgbT1hKCIuL19zdHJlYW1fZHVwbGV4Iikscz1PYmplY3QuY3JlYXRlKGEoImNvcmUtdXRpbC1pcyIpKTtmdW5jdGlvbiBvKGwsbil7dmFyIGk9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aS50cmFuc2Zvcm1pbmc9ITE7dmFyIGY9aS53cml0ZWNiO2lmKCFmKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTtpLndyaXRlY2h1bms9bnVsbCxpLndyaXRlY2I9bnVsbCxuIT1udWxsJiZ0aGlzLnB1c2gobiksZihsKTt2YXIgYz10aGlzLl9yZWFkYWJsZVN0YXRlO2MucmVhZGluZz0hMSwoYy5uZWVkUmVhZGFibGV8fGMubGVuZ3RoPGMuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoYy5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiByKGwpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHIpKXJldHVybiBuZXcgcihsKTttLmNhbGwodGhpcyxsKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06by5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsbCYmKHR5cGVvZiBsLnRyYW5zZm9ybT09ImZ1bmN0aW9uIiYmKHRoaXMuX3RyYW5zZm9ybT1sLnRyYW5zZm9ybSksdHlwZW9mIGwuZmx1c2g9PSJmdW5jdGlvbiImJih0aGlzLl9mbHVzaD1sLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix0KX1mdW5jdGlvbiB0KCl7dmFyIGw9dGhpczt0eXBlb2YgdGhpcy5fZmx1c2g9PSJmdW5jdGlvbiI/dGhpcy5fZmx1c2goZnVuY3Rpb24obixpKXtlKGwsbixpKX0pOmUodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIGUobCxuLGkpe2lmKG4pcmV0dXJuIGwuZW1pdCgiZXJyb3IiLG4pO2lmKGkhPW51bGwmJmwucHVzaChpKSxsLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMCIpO2lmKGwuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gbC5wdXNoKG51bGwpfXMuaW5oZXJpdHM9YSgiaW5oZXJpdHMiKSxzLmluaGVyaXRzKHIsbSksci5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihsLG4pe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLG0ucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLGwsbil9LHIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24obCxuLGkpe3Rocm93IG5ldyBFcnJvcigiX3RyYW5zZm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxyLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24obCxuLGkpe3ZhciBmPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKGYud3JpdGVjYj1pLGYud3JpdGVjaHVuaz1sLGYud3JpdGVlbmNvZGluZz1uLCFmLnRyYW5zZm9ybWluZyl7dmFyIGM9dGhpcy5fcmVhZGFibGVTdGF0ZTsoZi5uZWVkVHJhbnNmb3JtfHxjLm5lZWRSZWFkYWJsZXx8Yy5sZW5ndGg8Yy5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChjLmhpZ2hXYXRlck1hcmspfX0sci5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24obCl7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7bi53cml0ZWNodW5rIT09bnVsbCYmbi53cml0ZWNiJiYhbi50cmFuc2Zvcm1pbmc/KG4udHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShuLndyaXRlY2h1bmssbi53cml0ZWVuY29kaW5nLG4uYWZ0ZXJUcmFuc2Zvcm0pKTpuLm5lZWRUcmFuc2Zvcm09ITB9LHIucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGwsbil7dmFyIGk9dGhpczttLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsbCxmdW5jdGlvbihmKXtuKGYpLGkuZW1pdCgiY2xvc2UiKX0pfX0seyIuL19zdHJlYW1fZHVwbGV4Ijo1MDgsImNvcmUtdXRpbC1pcyI6MzgzLGluaGVyaXRzOjQ0MH1dLDUxMjpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMsbyl7KGZ1bmN0aW9uKCl7dmFyIHI9YSgicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiKTtmdW5jdGlvbiB0KEIpe3ZhciBTPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7KGZ1bmN0aW9uKEMsdixwKXt2YXIgYj1DLmVudHJ5O2ZvcihDLmVudHJ5PW51bGw7Yjspe3ZhciBnPWIuY2FsbGJhY2s7di5wZW5kaW5nY2ItLSxnKHApLGI9Yi5uZXh0fXYuY29ya2VkUmVxdWVzdHNGcmVlLm5leHQ9Q30pKFMsQil9fUUuZXhwb3J0cz1BO3ZhciBlLGw9IW0uYnJvd3NlciYmWyJ2MC4xMCIsInYwLjkuIl0uaW5kZXhPZihtLnZlcnNpb24uc2xpY2UoMCw1KSk+LTE/bzpyLm5leHRUaWNrO0EuV3JpdGFibGVTdGF0ZT1fO3ZhciBuPU9iamVjdC5jcmVhdGUoYSgiY29yZS11dGlsLWlzIikpO24uaW5oZXJpdHM9YSgiaW5oZXJpdHMiKTt2YXIgaT17ZGVwcmVjYXRlOmEoInV0aWwtZGVwcmVjYXRlIil9LGY9YSgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSIpLGM9YSgic2FmZS1idWZmZXIiKS5CdWZmZXIsdT0ocyE9PXZvaWQgMD9zOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LGQsaD1hKCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpO2Z1bmN0aW9uIHcoKXt9ZnVuY3Rpb24gXyhCLFMpe2U9ZXx8YSgiLi9fc3RyZWFtX2R1cGxleCIpLEI9Qnx8e307dmFyIEM9UyBpbnN0YW5jZW9mIGU7dGhpcy5vYmplY3RNb2RlPSEhQi5vYmplY3RNb2RlLEMmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUIud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgdj1CLmhpZ2hXYXRlck1hcmsscD1CLndyaXRhYmxlSGlnaFdhdGVyTWFyayxiPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9dnx8dj09PTA/djpDJiYocHx8cD09PTApP3A6Yix0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBnPUIuZGVjb2RlU3RyaW5ncz09PSExO3RoaXMuZGVjb2RlU3RyaW5ncz0hZyx0aGlzLmRlZmF1bHRFbmNvZGluZz1CLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oeSl7KGZ1bmN0aW9uKE0sTyl7dmFyIFI9TS5fd3JpdGFibGVTdGF0ZSx6PVIuc3luYywkPVIud3JpdGVjYjtpZihmdW5jdGlvbihqKXtqLndyaXRpbmc9ITEsai53cml0ZWNiPW51bGwsai5sZW5ndGgtPWoud3JpdGVsZW4sai53cml0ZWxlbj0wfShSKSxPKShmdW5jdGlvbihqLFcsVCx4LEkpey0tVy5wZW5kaW5nY2IsVD8oci5uZXh0VGljayhJLHgpLHIubmV4dFRpY2soVSxqLFcpLGouX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLGouZW1pdCgiZXJyb3IiLHgpKTooSSh4KSxqLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxqLmVtaXQoImVycm9yIix4KSxVKGosVykpfSkoTSxSLHosTywkKTtlbHNle3ZhciBYPUQoUik7WHx8Ui5jb3JrZWR8fFIuYnVmZmVyUHJvY2Vzc2luZ3x8IVIuYnVmZmVyZWRSZXF1ZXN0fHxOKE0sUiksej9sKEwsTSxSLFgsJCk6TChNLFIsWCwkKX19KShTLHkpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyB0KHRoaXMpfWZ1bmN0aW9uIEEoQil7aWYoZT1lfHxhKCIuL19zdHJlYW1fZHVwbGV4IiksIShkLmNhbGwoQSx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIGUpKXJldHVybiBuZXcgQShCKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBfKEIsdGhpcyksdGhpcy53cml0YWJsZT0hMCxCJiYodHlwZW9mIEIud3JpdGU9PSJmdW5jdGlvbiImJih0aGlzLl93cml0ZT1CLndyaXRlKSx0eXBlb2YgQi53cml0ZXY9PSJmdW5jdGlvbiImJih0aGlzLl93cml0ZXY9Qi53cml0ZXYpLHR5cGVvZiBCLmRlc3Ryb3k9PSJmdW5jdGlvbiImJih0aGlzLl9kZXN0cm95PUIuZGVzdHJveSksdHlwZW9mIEIuZmluYWw9PSJmdW5jdGlvbiImJih0aGlzLl9maW5hbD1CLmZpbmFsKSksZi5jYWxsKHRoaXMpfWZ1bmN0aW9uIFAoQixTLEMsdixwLGIsZyl7Uy53cml0ZWxlbj12LFMud3JpdGVjYj1nLFMud3JpdGluZz0hMCxTLnN5bmM9ITAsQz9CLl93cml0ZXYocCxTLm9ud3JpdGUpOkIuX3dyaXRlKHAsYixTLm9ud3JpdGUpLFMuc3luYz0hMX1mdW5jdGlvbiBMKEIsUyxDLHYpe0N8fGZ1bmN0aW9uKHAsYil7Yi5sZW5ndGg9PT0wJiZiLm5lZWREcmFpbiYmKGIubmVlZERyYWluPSExLHAuZW1pdCgiZHJhaW4iKSl9KEIsUyksUy5wZW5kaW5nY2ItLSx2KCksVShCLFMpfWZ1bmN0aW9uIE4oQixTKXtTLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIEM9Uy5idWZmZXJlZFJlcXVlc3Q7aWYoQi5fd3JpdGV2JiZDJiZDLm5leHQpe3ZhciB2PVMuYnVmZmVyZWRSZXF1ZXN0Q291bnQscD1uZXcgQXJyYXkodiksYj1TLmNvcmtlZFJlcXVlc3RzRnJlZTtiLmVudHJ5PUM7Zm9yKHZhciBnPTAseT0hMDtDOylwW2ddPUMsQy5pc0J1Znx8KHk9ITEpLEM9Qy5uZXh0LGcrPTE7cC5hbGxCdWZmZXJzPXksUChCLFMsITAsUy5sZW5ndGgscCwiIixiLmZpbmlzaCksUy5wZW5kaW5nY2IrKyxTLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxiLm5leHQ/KFMuY29ya2VkUmVxdWVzdHNGcmVlPWIubmV4dCxiLm5leHQ9bnVsbCk6Uy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHQoUyksUy5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtDOyl7dmFyIE09Qy5jaHVuayxPPUMuZW5jb2RpbmcsUj1DLmNhbGxiYWNrO2lmKFAoQixTLCExLFMub2JqZWN0TW9kZT8xOk0ubGVuZ3RoLE0sTyxSKSxDPUMubmV4dCxTLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sUy53cml0aW5nKWJyZWFrfUM9PT1udWxsJiYoUy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfVMuYnVmZmVyZWRSZXF1ZXN0PUMsUy5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIEQoQil7cmV0dXJuIEIuZW5kaW5nJiZCLmxlbmd0aD09PTAmJkIuYnVmZmVyZWRSZXF1ZXN0PT09bnVsbCYmIUIuZmluaXNoZWQmJiFCLndyaXRpbmd9ZnVuY3Rpb24gRihCLFMpe0IuX2ZpbmFsKGZ1bmN0aW9uKEMpe1MucGVuZGluZ2NiLS0sQyYmQi5lbWl0KCJlcnJvciIsQyksUy5wcmVmaW5pc2hlZD0hMCxCLmVtaXQoInByZWZpbmlzaCIpLFUoQixTKX0pfWZ1bmN0aW9uIFUoQixTKXt2YXIgQz1EKFMpO3JldHVybiBDJiYoZnVuY3Rpb24odixwKXtwLnByZWZpbmlzaGVkfHxwLmZpbmFsQ2FsbGVkfHwodHlwZW9mIHYuX2ZpbmFsPT0iZnVuY3Rpb24iPyhwLnBlbmRpbmdjYisrLHAuZmluYWxDYWxsZWQ9ITAsci5uZXh0VGljayhGLHYscCkpOihwLnByZWZpbmlzaGVkPSEwLHYuZW1pdCgicHJlZmluaXNoIikpKX0oQixTKSxTLnBlbmRpbmdjYj09PTAmJihTLmZpbmlzaGVkPSEwLEIuZW1pdCgiZmluaXNoIikpKSxDfW4uaW5oZXJpdHMoQSxmKSxfLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIEI9dGhpcy5idWZmZXJlZFJlcXVlc3QsUz1bXTtCOylTLnB1c2goQiksQj1CLm5leHQ7cmV0dXJuIFN9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OmkuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksdHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmU3ltYm9sLmhhc0luc3RhbmNlJiZ0eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV09PSJmdW5jdGlvbiI/KGQ9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihCKXtyZXR1cm4hIWQuY2FsbCh0aGlzLEIpfHx0aGlzPT09QSYmQiYmQi5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIF99fSkpOmQ9ZnVuY3Rpb24oQil7cmV0dXJuIEIgaW5zdGFuY2VvZiB0aGlzfSxBLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikpfSxBLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihCLFMsQyl7dmFyIHYscD10aGlzLl93cml0YWJsZVN0YXRlLGI9ITEsZz0hcC5vYmplY3RNb2RlJiYodj1CLGMuaXNCdWZmZXIodil8fHYgaW5zdGFuY2VvZiB1KTtyZXR1cm4gZyYmIWMuaXNCdWZmZXIoQikmJihCPWZ1bmN0aW9uKHkpe3JldHVybiBjLmZyb20oeSl9KEIpKSx0eXBlb2YgUz09ImZ1bmN0aW9uIiYmKEM9UyxTPW51bGwpLGc/Uz0iYnVmZmVyIjpTfHwoUz1wLmRlZmF1bHRFbmNvZGluZyksdHlwZW9mIEMhPSJmdW5jdGlvbiImJihDPXcpLHAuZW5kZWQ/ZnVuY3Rpb24oeSxNKXt2YXIgTz1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO3kuZW1pdCgiZXJyb3IiLE8pLHIubmV4dFRpY2soTSxPKX0odGhpcyxDKTooZ3x8ZnVuY3Rpb24oeSxNLE8sUil7dmFyIHo9ITAsJD0hMTtyZXR1cm4gTz09PW51bGw/JD1uZXcgVHlwZUVycm9yKCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIpOnR5cGVvZiBPPT0ic3RyaW5nInx8Tz09PXZvaWQgMHx8TS5vYmplY3RNb2RlfHwoJD1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLCQmJih5LmVtaXQoImVycm9yIiwkKSxyLm5leHRUaWNrKFIsJCksej0hMSksen0odGhpcyxwLEIsQykpJiYocC5wZW5kaW5nY2IrKyxiPWZ1bmN0aW9uKHksTSxPLFIseiwkKXtpZighTyl7dmFyIFg9ZnVuY3Rpb24oeCxJLEgpe3JldHVybiB4Lm9iamVjdE1vZGV8fHguZGVjb2RlU3RyaW5ncz09PSExfHx0eXBlb2YgSSE9InN0cmluZyJ8fChJPWMuZnJvbShJLEgpKSxJfShNLFIseik7UiE9PVgmJihPPSEwLHo9ImJ1ZmZlciIsUj1YKX12YXIgaj1NLm9iamVjdE1vZGU/MTpSLmxlbmd0aDtNLmxlbmd0aCs9ajt2YXIgVz1NLmxlbmd0aDxNLmhpZ2hXYXRlck1hcms7aWYoV3x8KE0ubmVlZERyYWluPSEwKSxNLndyaXRpbmd8fE0uY29ya2VkKXt2YXIgVD1NLmxhc3RCdWZmZXJlZFJlcXVlc3Q7TS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpSLGVuY29kaW5nOnosaXNCdWY6TyxjYWxsYmFjazokLG5leHQ6bnVsbH0sVD9ULm5leHQ9TS5sYXN0QnVmZmVyZWRSZXF1ZXN0Ok0uYnVmZmVyZWRSZXF1ZXN0PU0ubGFzdEJ1ZmZlcmVkUmVxdWVzdCxNLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgUCh5LE0sITEsaixSLHosJCk7cmV0dXJuIFd9KHRoaXMscCxnLEIsUyxDKSksYn0sQS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEEucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBCPXRoaXMuX3dyaXRhYmxlU3RhdGU7Qi5jb3JrZWQmJihCLmNvcmtlZC0tLEIud3JpdGluZ3x8Qi5jb3JrZWR8fEIuYnVmZmVyUHJvY2Vzc2luZ3x8IUIuYnVmZmVyZWRSZXF1ZXN0fHxOKHRoaXMsQikpfSxBLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oQil7aWYodHlwZW9mIEI9PSJzdHJpbmciJiYoQj1CLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJdLmluZGV4T2YoKEIrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0IpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1CLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihCLFMsQyl7QyhuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sQS5wcm90b3R5cGUuX3dyaXRldj1udWxsLEEucHJvdG90eXBlLmVuZD1mdW5jdGlvbihCLFMsQyl7dmFyIHY9dGhpcy5fd3JpdGFibGVTdGF0ZTt0eXBlb2YgQj09ImZ1bmN0aW9uIj8oQz1CLEI9bnVsbCxTPW51bGwpOnR5cGVvZiBTPT0iZnVuY3Rpb24iJiYoQz1TLFM9bnVsbCksQiE9bnVsbCYmdGhpcy53cml0ZShCLFMpLHYuY29ya2VkJiYodi5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSx2LmVuZGluZ3x8ZnVuY3Rpb24ocCxiLGcpe2IuZW5kaW5nPSEwLFUocCxiKSxnJiYoYi5maW5pc2hlZD9yLm5leHRUaWNrKGcpOnAub25jZSgiZmluaXNoIixnKSksYi5lbmRlZD0hMCxwLndyaXRhYmxlPSExfSh0aGlzLHYsQyl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUhPT12b2lkIDAmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oQil7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUIpfX0pLEEucHJvdG90eXBlLmRlc3Ryb3k9aC5kZXN0cm95LEEucHJvdG90eXBlLl91bmRlc3Ryb3k9aC51bmRlc3Ryb3ksQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oQixTKXt0aGlzLmVuZCgpLFMoQil9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxhKCJfcHJvY2VzcyIpLHR5cGVvZiBKdDwidSI/SnQ6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9LGEoInRpbWVycyIpLnNldEltbWVkaWF0ZSl9LHsiLi9fc3RyZWFtX2R1cGxleCI6NTA4LCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NTE0LCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIjo1MTUsX3Byb2Nlc3M6NDY3LCJjb3JlLXV0aWwtaXMiOjM4Myxpbmhlcml0czo0NDAsInByb2Nlc3MtbmV4dGljay1hcmdzIjo0NjYsInNhZmUtYnVmZmVyIjo1MjAsdGltZXJzOjUyMywidXRpbC1kZXByZWNhdGUiOjUyNH1dLDUxMzpbZnVuY3Rpb24oYSxFLGspe3ZhciBtPWEoInNhZmUtYnVmZmVyIikuQnVmZmVyLHM9YSgidXRpbCIpO0UuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIG8oKXsoZnVuY3Rpb24ocix0KXtpZighKHIgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsbyksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gby5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihyKXt2YXIgdD17ZGF0YTpyLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD10OnRoaXMuaGVhZD10LHRoaXMudGFpbD10LCsrdGhpcy5sZW5ndGh9LG8ucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24ocil7dmFyIHQ9e2RhdGE6cixuZXh0OnRoaXMuaGVhZH07dGhpcy5sZW5ndGg9PT0wJiYodGhpcy50YWlsPXQpLHRoaXMuaGVhZD10LCsrdGhpcy5sZW5ndGh9LG8ucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYodGhpcy5sZW5ndGghPT0wKXt2YXIgcj10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5sZW5ndGg9PT0xP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxyfX0sby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sby5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihyKXtpZih0aGlzLmxlbmd0aD09PTApcmV0dXJuIiI7Zm9yKHZhciB0PXRoaXMuaGVhZCxlPSIiK3QuZGF0YTt0PXQubmV4dDspZSs9cit0LmRhdGE7cmV0dXJuIGV9LG8ucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihyKXtpZih0aGlzLmxlbmd0aD09PTApcmV0dXJuIG0uYWxsb2MoMCk7Zm9yKHZhciB0LGUsbCxuPW0uYWxsb2NVbnNhZmUocj4+PjApLGk9dGhpcy5oZWFkLGY9MDtpOyl0PWkuZGF0YSxlPW4sbD1mLHQuY29weShlLGwpLGYrPWkuZGF0YS5sZW5ndGgsaT1pLm5leHQ7cmV0dXJuIG59LG99KCkscyYmcy5pbnNwZWN0JiZzLmluc3BlY3QuY3VzdG9tJiYoRS5leHBvcnRzLnByb3RvdHlwZVtzLmluc3BlY3QuY3VzdG9tXT1mdW5jdGlvbigpe3ZhciBvPXMuaW5zcGVjdCh7bGVuZ3RoOnRoaXMubGVuZ3RofSk7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZSsiICIrb30pfSx7InNhZmUtYnVmZmVyIjo1MjAsdXRpbDoxODh9XSw1MTQ6W2Z1bmN0aW9uKGEsRSxrKXt2YXIgbT1hKCJwcm9jZXNzLW5leHRpY2stYXJncyIpO2Z1bmN0aW9uIHMobyxyKXtvLmVtaXQoImVycm9yIixyKX1FLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24obyxyKXt2YXIgdD10aGlzLGU9dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsbD10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtyZXR1cm4gZXx8bD8ocj9yKG8pOm8mJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5uZXh0VGljayhzLHRoaXMsbykpOm0ubmV4dFRpY2socyx0aGlzLG8pKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3kob3x8bnVsbCxmdW5jdGlvbihuKXshciYmbj90Ll93cml0YWJsZVN0YXRlP3QuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5uZXh0VGljayhzLHQsbikpOm0ubmV4dFRpY2socyx0LG4pOnImJnIobil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LHsicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOjQ2Nn1dLDUxNTpbZnVuY3Rpb24oYSxFLGspe2FyZ3VtZW50c1s0XVs0OTBdWzBdLmFwcGx5KGssYXJndW1lbnRzKX0se2R1cDo0OTAsZXZlbnRzOjQyMn1dLDUxNjpbZnVuY3Rpb24oYSxFLGspe0UuZXhwb3J0cz1hKCIuL3JlYWRhYmxlIikuUGFzc1Rocm91Z2h9LHsiLi9yZWFkYWJsZSI6NTE3fV0sNTE3OltmdW5jdGlvbihhLEUsayl7KGs9RS5leHBvcnRzPWEoIi4vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSkuU3RyZWFtPWssay5SZWFkYWJsZT1rLGsuV3JpdGFibGU9YSgiLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpLGsuRHVwbGV4PWEoIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzIiksay5UcmFuc2Zvcm09YSgiLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiKSxrLlBhc3NUaHJvdWdoPWEoIi4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiKX0seyIuL2xpYi9fc3RyZWFtX2R1cGxleC5qcyI6NTA4LCIuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzIjo1MDksIi4vbGliL19zdHJlYW1fcmVhZGFibGUuanMiOjUxMCwiLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiOjUxMSwiLi9saWIvX3N0cmVhbV93cml0YWJsZS5qcyI6NTEyfV0sNTE4OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWEoIi4vcmVhZGFibGUiKS5UcmFuc2Zvcm19LHsiLi9yZWFkYWJsZSI6NTE3fV0sNTE5OltmdW5jdGlvbihhLEUsayl7RS5leHBvcnRzPWEoIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanMiKX0seyIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIjo1MTJ9XSw1MjA6W2Z1bmN0aW9uKGEsRSxrKXthcmd1bWVudHNbNF1bMjE3XVswXS5hcHBseShrLGFyZ3VtZW50cyl9LHtidWZmZXI6MjIwLGR1cDoyMTd9XSw1MjE6W2Z1bmN0aW9uKGEsRSxrKXthcmd1bWVudHNbNF1bMjE4XVswXS5hcHBseShrLGFyZ3VtZW50cyl9LHtkdXA6MjE4LCJzYWZlLWJ1ZmZlciI6NTIwfV0sNTIyOltmdW5jdGlvbihhLEUsayl7YXJndW1lbnRzWzRdWzIxOF1bMF0uYXBwbHkoayxhcmd1bWVudHMpfSx7ZHVwOjIxOCwic2FmZS1idWZmZXIiOjQ5NH1dLDUyMzpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe3ZhciBvPWEoInByb2Nlc3MvYnJvd3Nlci5qcyIpLm5leHRUaWNrLHI9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLGU9e30sbD0wO2Z1bmN0aW9uIG4oaSxmKXt0aGlzLl9pZD1pLHRoaXMuX2NsZWFyRm49Zn1rLnNldFRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oci5jYWxsKHNldFRpbWVvdXQsd2luZG93LGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KX0say5zZXRJbnRlcnZhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgbihyLmNhbGwoc2V0SW50ZXJ2YWwsd2luZG93LGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LGsuY2xlYXJUaW1lb3V0PWsuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbihpKXtpLmNsb3NlKCl9LG4ucHJvdG90eXBlLnVucmVmPW4ucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LHRoaXMuX2lkKX0say5lbnJvbGw9ZnVuY3Rpb24oaSxmKXtjbGVhclRpbWVvdXQoaS5faWRsZVRpbWVvdXRJZCksaS5faWRsZVRpbWVvdXQ9Zn0say51bmVucm9sbD1mdW5jdGlvbihpKXtjbGVhclRpbWVvdXQoaS5faWRsZVRpbWVvdXRJZCksaS5faWRsZVRpbWVvdXQ9LTF9LGsuX3VucmVmQWN0aXZlPWsuYWN0aXZlPWZ1bmN0aW9uKGkpe2NsZWFyVGltZW91dChpLl9pZGxlVGltZW91dElkKTt2YXIgZj1pLl9pZGxlVGltZW91dDtmPj0wJiYoaS5faWRsZVRpbWVvdXRJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5fb25UaW1lb3V0JiZpLl9vblRpbWVvdXQoKX0sZikpfSxrLnNldEltbWVkaWF0ZT10eXBlb2YgbT09ImZ1bmN0aW9uIj9tOmZ1bmN0aW9uKGkpe3ZhciBmPWwrKyxjPSEoYXJndW1lbnRzLmxlbmd0aDwyKSYmdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZVtmXT0hMCxvKGZ1bmN0aW9uKCl7ZVtmXSYmKGM/aS5hcHBseShudWxsLGMpOmkuY2FsbChudWxsKSxrLmNsZWFySW1tZWRpYXRlKGYpKX0pLGZ9LGsuY2xlYXJJbW1lZGlhdGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpmdW5jdGlvbihpKXtkZWxldGUgZVtpXX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoInRpbWVycyIpLnNldEltbWVkaWF0ZSxhKCJ0aW1lcnMiKS5jbGVhckltbWVkaWF0ZSl9LHsicHJvY2Vzcy9icm93c2VyLmpzIjo0NjcsdGltZXJzOjUyM31dLDUyNDpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtKXsoZnVuY3Rpb24oKXtmdW5jdGlvbiBzKG8pe3RyeXtpZighbS5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIHI9bS5sb2NhbFN0b3JhZ2Vbb107cmV0dXJuIHIhPW51bGwmJlN0cmluZyhyKS50b0xvd2VyQ2FzZSgpPT09InRydWUifUUuZXhwb3J0cz1mdW5jdGlvbihvLHIpe2lmKHMoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gbzt2YXIgdD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighdCl7aWYocygidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihyKTtzKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShyKTpjb25zb2xlLndhcm4ociksdD0hMH1yZXR1cm4gby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTI1OltmdW5jdGlvbihhLEUsayl7dHlwZW9mIE9iamVjdC5jcmVhdGU9PSJmdW5jdGlvbiI/RS5leHBvcnRzPWZ1bmN0aW9uKG0scyl7bS5zdXBlcl89cyxtLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHMucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6bSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06RS5leHBvcnRzPWZ1bmN0aW9uKG0scyl7bS5zdXBlcl89czt2YXIgbz1mdW5jdGlvbigpe307by5wcm90b3R5cGU9cy5wcm90b3R5cGUsbS5wcm90b3R5cGU9bmV3IG8sbS5wcm90b3R5cGUuY29uc3RydWN0b3I9bX19LHt9XSw1MjY6W2Z1bmN0aW9uKGEsRSxrKXtFLmV4cG9ydHM9ZnVuY3Rpb24obSl7cmV0dXJuIG0mJnR5cGVvZiBtPT0ib2JqZWN0IiYmdHlwZW9mIG0uY29weT09ImZ1bmN0aW9uIiYmdHlwZW9mIG0uZmlsbD09ImZ1bmN0aW9uIiYmdHlwZW9mIG0ucmVhZFVJbnQ4PT0iZnVuY3Rpb24ifX0se31dLDUyNzpbZnVuY3Rpb24oYSxFLGspeyhmdW5jdGlvbihtLHMpeyhmdW5jdGlvbigpe3ZhciBvPS8lW3NkaiVdL2c7ay5mb3JtYXQ9ZnVuY3Rpb24ocCl7aWYoIV8ocCkpe2Zvcih2YXIgYj1bXSxnPTA7Zzxhcmd1bWVudHMubGVuZ3RoO2crKyliLnB1c2goZShhcmd1bWVudHNbZ10pKTtyZXR1cm4gYi5qb2luKCIgIil9Zz0xO2Zvcih2YXIgeT1hcmd1bWVudHMsTT15Lmxlbmd0aCxPPVN0cmluZyhwKS5yZXBsYWNlKG8sZnVuY3Rpb24oeil7aWYoej09PSIlJSIpcmV0dXJuIiUiO2lmKGc+PU0pcmV0dXJuIHo7c3dpdGNoKHope2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoeVtnKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKHlbZysrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh5W2crK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiB6fX0pLFI9eVtnXTtnPE07Uj15WysrZ10paChSKXx8IUwoUik/Tys9IiAiK1I6Tys9IiAiK2UoUik7cmV0dXJuIE99LGsuZGVwcmVjYXRlPWZ1bmN0aW9uKHAsYil7aWYoQShzLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBrLmRlcHJlY2F0ZShwLGIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYobS5ub0RlcHJlY2F0aW9uPT09ITApcmV0dXJuIHA7dmFyIGc9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWcpe2lmKG0udGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IoYik7bS50cmFjZURlcHJlY2F0aW9uP2NvbnNvbGUudHJhY2UoYik6Y29uc29sZS5lcnJvcihiKSxnPSEwfXJldHVybiBwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciByLHQ9e307ZnVuY3Rpb24gZShwLGIpe3ZhciBnPXtzZWVuOltdLHN0eWxpemU6bn07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihnLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKGcuY29sb3JzPWFyZ3VtZW50c1szXSksZChiKT9nLnNob3dIaWRkZW49YjpiJiZrLl9leHRlbmQoZyxiKSxBKGcuc2hvd0hpZGRlbikmJihnLnNob3dIaWRkZW49ITEpLEEoZy5kZXB0aCkmJihnLmRlcHRoPTIpLEEoZy5jb2xvcnMpJiYoZy5jb2xvcnM9ITEpLEEoZy5jdXN0b21JbnNwZWN0KSYmKGcuY3VzdG9tSW5zcGVjdD0hMCksZy5jb2xvcnMmJihnLnN0eWxpemU9bCksaShnLHAsZy5kZXB0aCl9ZnVuY3Rpb24gbChwLGIpe3ZhciBnPWUuc3R5bGVzW2JdO3JldHVybiBnPyJceDFCWyIrZS5jb2xvcnNbZ11bMF0rIm0iK3ArIlx4MUJbIitlLmNvbG9yc1tnXVsxXSsibSI6cH1mdW5jdGlvbiBuKHAsYil7cmV0dXJuIHB9ZnVuY3Rpb24gaShwLGIsZyl7aWYocC5jdXN0b21JbnNwZWN0JiZiJiZGKGIuaW5zcGVjdCkmJmIuaW5zcGVjdCE9PWsuaW5zcGVjdCYmKCFiLmNvbnN0cnVjdG9yfHxiLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PWIpKXt2YXIgeT1iLmluc3BlY3QoZyxwKTtyZXR1cm4gXyh5KXx8KHk9aShwLHksZykpLHl9dmFyIE09ZnVuY3Rpb24oVCx4KXtpZihBKHgpKXJldHVybiBULnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKF8oeCkpe3ZhciBJPSInIitKU09OLnN0cmluZ2lmeSh4KS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBULnN0eWxpemUoSSwic3RyaW5nIil9aWYodyh4KSlyZXR1cm4gVC5zdHlsaXplKCIiK3gsIm51bWJlciIpO2lmKGQoeCkpcmV0dXJuIFQuc3R5bGl6ZSgiIit4LCJib29sZWFuIik7aWYoaCh4KSlyZXR1cm4gVC5zdHlsaXplKCJudWxsIiwibnVsbCIpfShwLGIpO2lmKE0pcmV0dXJuIE07dmFyIE89T2JqZWN0LmtleXMoYiksUj1mdW5jdGlvbihUKXt2YXIgeD17fTtyZXR1cm4gVC5mb3JFYWNoKGZ1bmN0aW9uKEksSCl7eFtJXT0hMH0pLHh9KE8pO2lmKHAuc2hvd0hpZGRlbiYmKE89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYikpLEQoYikmJihPLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8Ty5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gZihiKTtpZihPLmxlbmd0aD09PTApe2lmKEYoYikpe3ZhciB6PWIubmFtZT8iOiAiK2IubmFtZToiIjtyZXR1cm4gcC5zdHlsaXplKCJbRnVuY3Rpb24iK3orIl0iLCJzcGVjaWFsIil9aWYoUChiKSlyZXR1cm4gcC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChiKSwicmVnZXhwIik7aWYoTihiKSlyZXR1cm4gcC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYiksImRhdGUiKTtpZihEKGIpKXJldHVybiBmKGIpfXZhciAkLFg9IiIsaj0hMSxXPVsieyIsIn0iXTtyZXR1cm4gdShiKSYmKGo9ITAsVz1bIlsiLCJdIl0pLEYoYikmJihYPSIgW0Z1bmN0aW9uIisoYi5uYW1lPyI6ICIrYi5uYW1lOiIiKSsiXSIpLFAoYikmJihYPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYikpLE4oYikmJihYPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKGIpKSxEKGIpJiYoWD0iICIrZihiKSksTy5sZW5ndGghPT0wfHxqJiZiLmxlbmd0aCE9MD9nPDA/UChiKT9wLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGIpLCJyZWdleHAiKTpwLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihwLnNlZW4ucHVzaChiKSwkPWo/ZnVuY3Rpb24oVCx4LEksSCxaKXtmb3IodmFyIFY9W10sSz0wLFk9eC5sZW5ndGg7SzxZOysrSyl2KHgsU3RyaW5nKEspKT9WLnB1c2goYyhULHgsSSxILFN0cmluZyhLKSwhMCkpOlYucHVzaCgiIik7cmV0dXJuIFouZm9yRWFjaChmdW5jdGlvbihKKXtKLm1hdGNoKC9eXGQrJC8pfHxWLnB1c2goYyhULHgsSSxILEosITApKX0pLFZ9KHAsYixnLFIsTyk6Ty5tYXAoZnVuY3Rpb24oVCl7cmV0dXJuIGMocCxiLGcsUixULGopfSkscC5zZWVuLnBvcCgpLGZ1bmN0aW9uKFQseCxJKXtyZXR1cm4gVC5yZWR1Y2UoZnVuY3Rpb24oSCxaKXtyZXR1cm4gWi5pbmRleE9mKGAKYCk+PTAsSCtaLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKT42MD9JWzBdKyh4PT09IiI/IiI6eCtgCiBgKSsiICIrVC5qb2luKGAsCiAgYCkrIiAiK0lbMV06SVswXSt4KyIgIitULmpvaW4oIiwgIikrIiAiK0lbMV19KCQsWCxXKSk6V1swXStYK1dbMV19ZnVuY3Rpb24gZihwKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocCkrIl0ifWZ1bmN0aW9uIGMocCxiLGcseSxNLE8pe3ZhciBSLHosJDtpZigoJD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGIsTSl8fHt2YWx1ZTpiW01dfSkuZ2V0P3o9JC5zZXQ/cC5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6cC5zdHlsaXplKCJbR2V0dGVyXSIsInNwZWNpYWwiKTokLnNldCYmKHo9cC5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksdih5LE0pfHwoUj0iWyIrTSsiXSIpLHp8fChwLnNlZW4uaW5kZXhPZigkLnZhbHVlKTwwPyh6PWgoZyk/aShwLCQudmFsdWUsbnVsbCk6aShwLCQudmFsdWUsZy0xKSkuaW5kZXhPZihgCmApPi0xJiYoej1PP3ouc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIiAgIitYfSkuam9pbihgCmApLnN1YnN0cigyKTpgCmArei5zcGxpdChgCmApLm1hcChmdW5jdGlvbihYKXtyZXR1cm4iICAgIitYfSkuam9pbihgCmApKTp6PXAuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksQShSKSl7aWYoTyYmTS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gejsoUj1KU09OLnN0cmluZ2lmeSgiIitNKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8oUj1SLnN1YnN0cigxLFIubGVuZ3RoLTIpLFI9cC5zdHlsaXplKFIsIm5hbWUiKSk6KFI9Ui5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksUj1wLnN0eWxpemUoUiwic3RyaW5nIikpfXJldHVybiBSKyI6ICIren1mdW5jdGlvbiB1KHApe3JldHVybiBBcnJheS5pc0FycmF5KHApfWZ1bmN0aW9uIGQocCl7cmV0dXJuIHR5cGVvZiBwPT0iYm9vbGVhbiJ9ZnVuY3Rpb24gaChwKXtyZXR1cm4gcD09PW51bGx9ZnVuY3Rpb24gdyhwKXtyZXR1cm4gdHlwZW9mIHA9PSJudW1iZXIifWZ1bmN0aW9uIF8ocCl7cmV0dXJuIHR5cGVvZiBwPT0ic3RyaW5nIn1mdW5jdGlvbiBBKHApe3JldHVybiBwPT09dm9pZCAwfWZ1bmN0aW9uIFAocCl7cmV0dXJuIEwocCkmJlUocCk9PT0iW29iamVjdCBSZWdFeHBdIn1mdW5jdGlvbiBMKHApe3JldHVybiB0eXBlb2YgcD09Im9iamVjdCImJnAhPT1udWxsfWZ1bmN0aW9uIE4ocCl7cmV0dXJuIEwocCkmJlUocCk9PT0iW29iamVjdCBEYXRlXSJ9ZnVuY3Rpb24gRChwKXtyZXR1cm4gTChwKSYmKFUocCk9PT0iW29iamVjdCBFcnJvcl0ifHxwIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIEYocCl7cmV0dXJuIHR5cGVvZiBwPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIFUocCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwKX1mdW5jdGlvbiBCKHApe3JldHVybiBwPDEwPyIwIitwLnRvU3RyaW5nKDEwKTpwLnRvU3RyaW5nKDEwKX1rLmRlYnVnbG9nPWZ1bmN0aW9uKHApe2lmKEEocikmJihyPW0uZW52Lk5PREVfREVCVUd8fCIiKSxwPXAudG9VcHBlckNhc2UoKSwhdFtwXSlpZihuZXcgUmVnRXhwKCJcXGIiK3ArIlxcYiIsImkiKS50ZXN0KHIpKXt2YXIgYj1tLnBpZDt0W3BdPWZ1bmN0aW9uKCl7dmFyIGc9ay5mb3JtYXQuYXBwbHkoayxhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoIiVzICVkOiAlcyIscCxiLGcpfX1lbHNlIHRbcF09ZnVuY3Rpb24oKXt9O3JldHVybiB0W3BdfSxrLmluc3BlY3Q9ZSxlLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0sZS5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxrLmlzQXJyYXk9dSxrLmlzQm9vbGVhbj1kLGsuaXNOdWxsPWgsay5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihwKXtyZXR1cm4gcD09bnVsbH0say5pc051bWJlcj13LGsuaXNTdHJpbmc9XyxrLmlzU3ltYm9sPWZ1bmN0aW9uKHApe3JldHVybiB0eXBlb2YgcD09InN5bWJvbCJ9LGsuaXNVbmRlZmluZWQ9QSxrLmlzUmVnRXhwPVAsay5pc09iamVjdD1MLGsuaXNEYXRlPU4say5pc0Vycm9yPUQsay5pc0Z1bmN0aW9uPUYsay5pc1ByaW1pdGl2ZT1mdW5jdGlvbihwKXtyZXR1cm4gcD09PW51bGx8fHR5cGVvZiBwPT0iYm9vbGVhbiJ8fHR5cGVvZiBwPT0ibnVtYmVyInx8dHlwZW9mIHA9PSJzdHJpbmcifHx0eXBlb2YgcD09InN5bWJvbCJ8fHA9PT12b2lkIDB9LGsuaXNCdWZmZXI9YSgiLi9zdXBwb3J0L2lzQnVmZmVyIik7dmFyIFM9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBDKCl7dmFyIHA9bmV3IERhdGUsYj1bQihwLmdldEhvdXJzKCkpLEIocC5nZXRNaW51dGVzKCkpLEIocC5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3AuZ2V0RGF0ZSgpLFNbcC5nZXRNb250aCgpXSxiXS5qb2luKCIgIil9ZnVuY3Rpb24gdihwLGIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocCxiKX1rLmxvZz1mdW5jdGlvbigpe2NvbnNvbGUubG9nKCIlcyAtICVzIixDKCksay5mb3JtYXQuYXBwbHkoayxhcmd1bWVudHMpKX0say5pbmhlcml0cz1hKCJpbmhlcml0cyIpLGsuX2V4dGVuZD1mdW5jdGlvbihwLGIpe2lmKCFifHwhTChiKSlyZXR1cm4gcDtmb3IodmFyIGc9T2JqZWN0LmtleXMoYikseT1nLmxlbmd0aDt5LS07KXBbZ1t5XV09YltnW3ldXTtyZXR1cm4gcH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGEoIl9wcm9jZXNzIiksdHlwZW9mIEp0PCJ1Ij9KdDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6NTI2LF9wcm9jZXNzOjQ2Nyxpbmhlcml0czo1MjV9XSw1Mjg6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssInYxIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJ2MyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHMuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaywidjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssInY1Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJOSUwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0LmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssInZlcnNpb24iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssInZhbGlkYXRlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJzdHJpbmdpZnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGssInBhcnNlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kZWZhdWx0fX0pO3ZhciBtPWYoYSgiLi92MS5qcyIpKSxzPWYoYSgiLi92My5qcyIpKSxvPWYoYSgiLi92NC5qcyIpKSxyPWYoYSgiLi92NS5qcyIpKSx0PWYoYSgiLi9uaWwuanMiKSksZT1mKGEoIi4vdmVyc2lvbi5qcyIpKSxsPWYoYSgiLi92YWxpZGF0ZS5qcyIpKSxuPWYoYSgiLi9zdHJpbmdpZnkuanMiKSksaT1mKGEoIi4vcGFyc2UuanMiKSk7ZnVuY3Rpb24gZihjKXtyZXR1cm4gYyYmYy5fX2VzTW9kdWxlP2M6e2RlZmF1bHQ6Y319fSx7Ii4vbmlsLmpzIjo1MzAsIi4vcGFyc2UuanMiOjUzMSwiLi9zdHJpbmdpZnkuanMiOjUzNSwiLi92MS5qcyI6NTM2LCIuL3YzLmpzIjo1MzcsIi4vdjQuanMiOjUzOSwiLi92NS5qcyI6NTQwLCIuL3ZhbGlkYXRlLmpzIjo1NDEsIi4vdmVyc2lvbi5qcyI6NTQyfV0sNTI5OltmdW5jdGlvbihhLEUsayl7ZnVuY3Rpb24gbShpKXtyZXR1cm4gMTQrKGkrNjQ+Pj45PDw0KSsxfWZ1bmN0aW9uIHMoaSxmKXtjb25zdCBjPSg2NTUzNSZpKSsoNjU1MzUmZik7cmV0dXJuKGk+PjE2KSsoZj4+MTYpKyhjPj4xNik8PDE2fDY1NTM1JmN9ZnVuY3Rpb24gbyhpLGYsYyx1LGQsaCl7cmV0dXJuIHMoKHc9cyhzKGYsaSkscyh1LGgpKSk8PChfPWQpfHc+Pj4zMi1fLGMpO3ZhciB3LF99ZnVuY3Rpb24gcihpLGYsYyx1LGQsaCx3KXtyZXR1cm4gbyhmJmN8fmYmdSxpLGYsZCxoLHcpfWZ1bmN0aW9uIHQoaSxmLGMsdSxkLGgsdyl7cmV0dXJuIG8oZiZ1fGMmfnUsaSxmLGQsaCx3KX1mdW5jdGlvbiBlKGksZixjLHUsZCxoLHcpe3JldHVybiBvKGZeY151LGksZixkLGgsdyl9ZnVuY3Rpb24gbChpLGYsYyx1LGQsaCx3KXtyZXR1cm4gbyhjXihmfH51KSxpLGYsZCxoLHcpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLmRlZmF1bHQ9dm9pZCAwO3ZhciBuPWZ1bmN0aW9uKGkpe2lmKHR5cGVvZiBpPT0ic3RyaW5nIil7Y29uc3QgZj11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoaSkpO2k9bmV3IFVpbnQ4QXJyYXkoZi5sZW5ndGgpO2ZvcihsZXQgYz0wO2M8Zi5sZW5ndGg7KytjKWlbY109Zi5jaGFyQ29kZUF0KGMpfXJldHVybiBmdW5jdGlvbihmKXtjb25zdCBjPVtdLHU9MzIqZi5sZW5ndGg7Zm9yKGxldCBkPTA7ZDx1O2QrPTgpe2NvbnN0IGg9ZltkPj41XT4+PmQlMzImMjU1LHc9cGFyc2VJbnQoIjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdChoPj4+NCYxNSkrIjAxMjM0NTY3ODlhYmNkZWYiLmNoYXJBdCgxNSZoKSwxNik7Yy5wdXNoKHcpfXJldHVybiBjfShmdW5jdGlvbihmLGMpe2ZbYz4+NV18PTEyODw8YyUzMixmW20oYyktMV09YztsZXQgdT0xNzMyNTg0MTkzLGQ9LTI3MTczMzg3OSxoPS0xNzMyNTg0MTk0LHc9MjcxNzMzODc4O2ZvcihsZXQgXz0wO188Zi5sZW5ndGg7Xys9MTYpe2NvbnN0IEE9dSxQPWQsTD1oLE49dzt1PXIodSxkLGgsdyxmW19dLDcsLTY4MDg3NjkzNiksdz1yKHcsdSxkLGgsZltfKzFdLDEyLC0zODk1NjQ1ODYpLGg9cihoLHcsdSxkLGZbXysyXSwxNyw2MDYxMDU4MTkpLGQ9cihkLGgsdyx1LGZbXyszXSwyMiwtMTA0NDUyNTMzMCksdT1yKHUsZCxoLHcsZltfKzRdLDcsLTE3NjQxODg5Nyksdz1yKHcsdSxkLGgsZltfKzVdLDEyLDEyMDAwODA0MjYpLGg9cihoLHcsdSxkLGZbXys2XSwxNywtMTQ3MzIzMTM0MSksZD1yKGQsaCx3LHUsZltfKzddLDIyLC00NTcwNTk4MyksdT1yKHUsZCxoLHcsZltfKzhdLDcsMTc3MDAzNTQxNiksdz1yKHcsdSxkLGgsZltfKzldLDEyLC0xOTU4NDE0NDE3KSxoPXIoaCx3LHUsZCxmW18rMTBdLDE3LC00MjA2MyksZD1yKGQsaCx3LHUsZltfKzExXSwyMiwtMTk5MDQwNDE2MiksdT1yKHUsZCxoLHcsZltfKzEyXSw3LDE4MDQ2MDM2ODIpLHc9cih3LHUsZCxoLGZbXysxM10sMTIsLTQwMzQxMTAxKSxoPXIoaCx3LHUsZCxmW18rMTRdLDE3LC0xNTAyMDAyMjkwKSxkPXIoZCxoLHcsdSxmW18rMTVdLDIyLDEyMzY1MzUzMjkpLHU9dCh1LGQsaCx3LGZbXysxXSw1LC0xNjU3OTY1MTApLHc9dCh3LHUsZCxoLGZbXys2XSw5LC0xMDY5NTAxNjMyKSxoPXQoaCx3LHUsZCxmW18rMTFdLDE0LDY0MzcxNzcxMyksZD10KGQsaCx3LHUsZltfXSwyMCwtMzczODk3MzAyKSx1PXQodSxkLGgsdyxmW18rNV0sNSwtNzAxNTU4NjkxKSx3PXQodyx1LGQsaCxmW18rMTBdLDksMzgwMTYwODMpLGg9dChoLHcsdSxkLGZbXysxNV0sMTQsLTY2MDQ3ODMzNSksZD10KGQsaCx3LHUsZltfKzRdLDIwLC00MDU1Mzc4NDgpLHU9dCh1LGQsaCx3LGZbXys5XSw1LDU2ODQ0NjQzOCksdz10KHcsdSxkLGgsZltfKzE0XSw5LC0xMDE5ODAzNjkwKSxoPXQoaCx3LHUsZCxmW18rM10sMTQsLTE4NzM2Mzk2MSksZD10KGQsaCx3LHUsZltfKzhdLDIwLDExNjM1MzE1MDEpLHU9dCh1LGQsaCx3LGZbXysxM10sNSwtMTQ0NDY4MTQ2Nyksdz10KHcsdSxkLGgsZltfKzJdLDksLTUxNDAzNzg0KSxoPXQoaCx3LHUsZCxmW18rN10sMTQsMTczNTMyODQ3MyksZD10KGQsaCx3LHUsZltfKzEyXSwyMCwtMTkyNjYwNzczNCksdT1lKHUsZCxoLHcsZltfKzVdLDQsLTM3ODU1OCksdz1lKHcsdSxkLGgsZltfKzhdLDExLC0yMDIyNTc0NDYzKSxoPWUoaCx3LHUsZCxmW18rMTFdLDE2LDE4MzkwMzA1NjIpLGQ9ZShkLGgsdyx1LGZbXysxNF0sMjMsLTM1MzA5NTU2KSx1PWUodSxkLGgsdyxmW18rMV0sNCwtMTUzMDk5MjA2MCksdz1lKHcsdSxkLGgsZltfKzRdLDExLDEyNzI4OTMzNTMpLGg9ZShoLHcsdSxkLGZbXys3XSwxNiwtMTU1NDk3NjMyKSxkPWUoZCxoLHcsdSxmW18rMTBdLDIzLC0xMDk0NzMwNjQwKSx1PWUodSxkLGgsdyxmW18rMTNdLDQsNjgxMjc5MTc0KSx3PWUodyx1LGQsaCxmW19dLDExLC0zNTg1MzcyMjIpLGg9ZShoLHcsdSxkLGZbXyszXSwxNiwtNzIyNTIxOTc5KSxkPWUoZCxoLHcsdSxmW18rNl0sMjMsNzYwMjkxODkpLHU9ZSh1LGQsaCx3LGZbXys5XSw0LC02NDAzNjQ0ODcpLHc9ZSh3LHUsZCxoLGZbXysxMl0sMTEsLTQyMTgxNTgzNSksaD1lKGgsdyx1LGQsZltfKzE1XSwxNiw1MzA3NDI1MjApLGQ9ZShkLGgsdyx1LGZbXysyXSwyMywtOTk1MzM4NjUxKSx1PWwodSxkLGgsdyxmW19dLDYsLTE5ODYzMDg0NCksdz1sKHcsdSxkLGgsZltfKzddLDEwLDExMjY4OTE0MTUpLGg9bChoLHcsdSxkLGZbXysxNF0sMTUsLTE0MTYzNTQ5MDUpLGQ9bChkLGgsdyx1LGZbXys1XSwyMSwtNTc0MzQwNTUpLHU9bCh1LGQsaCx3LGZbXysxMl0sNiwxNzAwNDg1NTcxKSx3PWwodyx1LGQsaCxmW18rM10sMTAsLTE4OTQ5ODY2MDYpLGg9bChoLHcsdSxkLGZbXysxMF0sMTUsLTEwNTE1MjMpLGQ9bChkLGgsdyx1LGZbXysxXSwyMSwtMjA1NDkyMjc5OSksdT1sKHUsZCxoLHcsZltfKzhdLDYsMTg3MzMxMzM1OSksdz1sKHcsdSxkLGgsZltfKzE1XSwxMCwtMzA2MTE3NDQpLGg9bChoLHcsdSxkLGZbXys2XSwxNSwtMTU2MDE5ODM4MCksZD1sKGQsaCx3LHUsZltfKzEzXSwyMSwxMzA5MTUxNjQ5KSx1PWwodSxkLGgsdyxmW18rNF0sNiwtMTQ1NTIzMDcwKSx3PWwodyx1LGQsaCxmW18rMTFdLDEwLC0xMTIwMjEwMzc5KSxoPWwoaCx3LHUsZCxmW18rMl0sMTUsNzE4Nzg3MjU5KSxkPWwoZCxoLHcsdSxmW18rOV0sMjEsLTM0MzQ4NTU1MSksdT1zKHUsQSksZD1zKGQsUCksaD1zKGgsTCksdz1zKHcsTil9cmV0dXJuW3UsZCxoLHddfShmdW5jdGlvbihmKXtpZihmLmxlbmd0aD09PTApcmV0dXJuW107Y29uc3QgYz04KmYubGVuZ3RoLHU9bmV3IFVpbnQzMkFycmF5KG0oYykpO2ZvcihsZXQgZD0wO2Q8YztkKz04KXVbZD4+NV18PSgyNTUmZltkLzhdKTw8ZCUzMjtyZXR1cm4gdX0oaSksOCppLmxlbmd0aCkpfTtrLmRlZmF1bHQ9bn0se31dLDUzMDpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLmRlZmF1bHQ9dm9pZCAwLGsuZGVmYXVsdD0iMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwIn0se31dLDUzMTpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLmRlZmF1bHQ9dm9pZCAwO3ZhciBtLHM9KG09YSgiLi92YWxpZGF0ZS5qcyIpKSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX0sbz1mdW5jdGlvbihyKXtpZighKDAscy5kZWZhdWx0KShyKSl0aHJvdyBUeXBlRXJyb3IoIkludmFsaWQgVVVJRCIpO2xldCB0O2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoMTYpO3JldHVybiBlWzBdPSh0PXBhcnNlSW50KHIuc2xpY2UoMCw4KSwxNikpPj4+MjQsZVsxXT10Pj4+MTYmMjU1LGVbMl09dD4+PjgmMjU1LGVbM109MjU1JnQsZVs0XT0odD1wYXJzZUludChyLnNsaWNlKDksMTMpLDE2KSk+Pj44LGVbNV09MjU1JnQsZVs2XT0odD1wYXJzZUludChyLnNsaWNlKDE0LDE4KSwxNikpPj4+OCxlWzddPTI1NSZ0LGVbOF09KHQ9cGFyc2VJbnQoci5zbGljZSgxOSwyMyksMTYpKT4+PjgsZVs5XT0yNTUmdCxlWzEwXT0odD1wYXJzZUludChyLnNsaWNlKDI0LDM2KSwxNikpLzEwOTk1MTE2Mjc3NzYmMjU1LGVbMTFdPXQvNDI5NDk2NzI5NiYyNTUsZVsxMl09dD4+PjI0JjI1NSxlWzEzXT10Pj4+MTYmMjU1LGVbMTRdPXQ+Pj44JjI1NSxlWzE1XT0yNTUmdCxlfTtrLmRlZmF1bHQ9b30seyIuL3ZhbGlkYXRlLmpzIjo1NDF9XSw1MzI6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5kZWZhdWx0PXZvaWQgMCxrLmRlZmF1bHQ9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pfSx7fV0sNTMzOltmdW5jdGlvbihhLEUsayl7bGV0IG07T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuZGVmYXVsdD1mdW5jdGlvbigpe2lmKCFtJiYobT10eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fHR5cGVvZiBtc0NyeXB0bzwidSImJnR5cGVvZiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM9PSJmdW5jdGlvbiImJm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSwhbSkpdGhyb3cgbmV3IEVycm9yKCJjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCIpO3JldHVybiBtKHMpfTtjb25zdCBzPW5ldyBVaW50OEFycmF5KDE2KX0se31dLDUzNDpbZnVuY3Rpb24oYSxFLGspe2Z1bmN0aW9uIG0ocix0LGUsbCl7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gdCZlXn50Jmw7Y2FzZSAxOnJldHVybiB0XmVebDtjYXNlIDI6cmV0dXJuIHQmZV50JmxeZSZsO2Nhc2UgMzpyZXR1cm4gdF5lXmx9fWZ1bmN0aW9uIHMocix0KXtyZXR1cm4gcjw8dHxyPj4+MzItdH1PYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5kZWZhdWx0PXZvaWQgMDt2YXIgbz1mdW5jdGlvbihyKXtjb25zdCB0PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXSxlPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF07aWYodHlwZW9mIHI9PSJzdHJpbmciKXtjb25zdCBmPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChyKSk7cj1bXTtmb3IobGV0IGM9MDtjPGYubGVuZ3RoOysrYylyLnB1c2goZi5jaGFyQ29kZUF0KGMpKX1lbHNlIEFycmF5LmlzQXJyYXkocil8fChyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpKTtyLnB1c2goMTI4KTtjb25zdCBsPXIubGVuZ3RoLzQrMixuPU1hdGguY2VpbChsLzE2KSxpPW5ldyBBcnJheShuKTtmb3IobGV0IGY9MDtmPG47KytmKXtjb25zdCBjPW5ldyBVaW50MzJBcnJheSgxNik7Zm9yKGxldCB1PTA7dTwxNjsrK3UpY1t1XT1yWzY0KmYrNCp1XTw8MjR8cls2NCpmKzQqdSsxXTw8MTZ8cls2NCpmKzQqdSsyXTw8OHxyWzY0KmYrNCp1KzNdO2lbZl09Y31pW24tMV1bMTRdPTgqKHIubGVuZ3RoLTEpL01hdGgucG93KDIsMzIpLGlbbi0xXVsxNF09TWF0aC5mbG9vcihpW24tMV1bMTRdKSxpW24tMV1bMTVdPTgqKHIubGVuZ3RoLTEpJjQyOTQ5NjcyOTU7Zm9yKGxldCBmPTA7ZjxuOysrZil7Y29uc3QgYz1uZXcgVWludDMyQXJyYXkoODApO2ZvcihsZXQgQT0wO0E8MTY7KytBKWNbQV09aVtmXVtBXTtmb3IobGV0IEE9MTY7QTw4MDsrK0EpY1tBXT1zKGNbQS0zXV5jW0EtOF1eY1tBLTE0XV5jW0EtMTZdLDEpO2xldCB1PWVbMF0sZD1lWzFdLGg9ZVsyXSx3PWVbM10sXz1lWzRdO2ZvcihsZXQgQT0wO0E8ODA7KytBKXtjb25zdCBQPU1hdGguZmxvb3IoQS8yMCksTD1zKHUsNSkrbShQLGQsaCx3KStfK3RbUF0rY1tBXT4+PjA7Xz13LHc9aCxoPXMoZCwzMCk+Pj4wLGQ9dSx1PUx9ZVswXT1lWzBdK3U+Pj4wLGVbMV09ZVsxXStkPj4+MCxlWzJdPWVbMl0raD4+PjAsZVszXT1lWzNdK3c+Pj4wLGVbNF09ZVs0XStfPj4+MH1yZXR1cm5bZVswXT4+MjQmMjU1LGVbMF0+PjE2JjI1NSxlWzBdPj44JjI1NSwyNTUmZVswXSxlWzFdPj4yNCYyNTUsZVsxXT4+MTYmMjU1LGVbMV0+PjgmMjU1LDI1NSZlWzFdLGVbMl0+PjI0JjI1NSxlWzJdPj4xNiYyNTUsZVsyXT4+OCYyNTUsMjU1JmVbMl0sZVszXT4+MjQmMjU1LGVbM10+PjE2JjI1NSxlWzNdPj44JjI1NSwyNTUmZVszXSxlWzRdPj4yNCYyNTUsZVs0XT4+MTYmMjU1LGVbNF0+PjgmMjU1LDI1NSZlWzRdXX07ay5kZWZhdWx0PW99LHt9XSw1MzU6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5kZWZhdWx0PXZvaWQgMDt2YXIgbSxzPShtPWEoIi4vdmFsaWRhdGUuanMiKSkmJm0uX19lc01vZHVsZT9tOntkZWZhdWx0Om19O2NvbnN0IG89W107Zm9yKGxldCB0PTA7dDwyNTY7Kyt0KW8ucHVzaCgodCsyNTYpLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkpO3ZhciByPWZ1bmN0aW9uKHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO2NvbnN0IGw9KG9bdFtlKzBdXStvW3RbZSsxXV0rb1t0W2UrMl1dK29bdFtlKzNdXSsiLSIrb1t0W2UrNF1dK29bdFtlKzVdXSsiLSIrb1t0W2UrNl1dK29bdFtlKzddXSsiLSIrb1t0W2UrOF1dK29bdFtlKzldXSsiLSIrb1t0W2UrMTBdXStvW3RbZSsxMV1dK29bdFtlKzEyXV0rb1t0W2UrMTNdXStvW3RbZSsxNF1dK29bdFtlKzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoISgwLHMuZGVmYXVsdCkobCkpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbH07ay5kZWZhdWx0PXJ9LHsiLi92YWxpZGF0ZS5qcyI6NTQxfV0sNTM2OltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuZGVmYXVsdD12b2lkIDA7dmFyIG09byhhKCIuL3JuZy5qcyIpKSxzPW8oYSgiLi9zdHJpbmdpZnkuanMiKSk7ZnVuY3Rpb24gbyhpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19bGV0IHIsdCxlPTAsbD0wO3ZhciBuPWZ1bmN0aW9uKGksZixjKXtsZXQgdT1mJiZjfHwwO2NvbnN0IGQ9Znx8bmV3IEFycmF5KDE2KTtsZXQgaD0oaT1pfHx7fSkubm9kZXx8cix3PWkuY2xvY2tzZXEhPT12b2lkIDA/aS5jbG9ja3NlcTp0O2lmKGg9PW51bGx8fHc9PW51bGwpe2NvbnN0IEQ9aS5yYW5kb218fChpLnJuZ3x8bS5kZWZhdWx0KSgpO2g9PW51bGwmJihoPXI9WzF8RFswXSxEWzFdLERbMl0sRFszXSxEWzRdLERbNV1dKSx3PT1udWxsJiYodz10PTE2MzgzJihEWzZdPDw4fERbN10pKX1sZXQgXz1pLm1zZWNzIT09dm9pZCAwP2kubXNlY3M6RGF0ZS5ub3coKSxBPWkubnNlY3MhPT12b2lkIDA/aS5uc2VjczpsKzE7Y29uc3QgUD1fLWUrKEEtbCkvMWU0O2lmKFA8MCYmaS5jbG9ja3NlcT09PXZvaWQgMCYmKHc9dysxJjE2MzgzKSwoUDwwfHxfPmUpJiZpLm5zZWNzPT09dm9pZCAwJiYoQT0wKSxBPj0xZTQpdGhyb3cgbmV3IEVycm9yKCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYyIpO2U9XyxsPUEsdD13LF8rPTEyMjE5MjkyOGU1O2NvbnN0IEw9KDFlNCooMjY4NDM1NDU1Jl8pK0EpJTQyOTQ5NjcyOTY7ZFt1KytdPUw+Pj4yNCYyNTUsZFt1KytdPUw+Pj4xNiYyNTUsZFt1KytdPUw+Pj44JjI1NSxkW3UrK109MjU1Jkw7Y29uc3QgTj1fLzQyOTQ5NjcyOTYqMWU0JjI2ODQzNTQ1NTtkW3UrK109Tj4+PjgmMjU1LGRbdSsrXT0yNTUmTixkW3UrK109Tj4+PjI0JjE1fDE2LGRbdSsrXT1OPj4+MTYmMjU1LGRbdSsrXT13Pj4+OHwxMjgsZFt1KytdPTI1NSZ3O2ZvcihsZXQgRD0wO0Q8NjsrK0QpZFt1K0RdPWhbRF07cmV0dXJuIGZ8fCgwLHMuZGVmYXVsdCkoZCl9O2suZGVmYXVsdD1ufSx7Ii4vcm5nLmpzIjo1MzMsIi4vc3RyaW5naWZ5LmpzIjo1MzV9XSw1Mzc6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5kZWZhdWx0PXZvaWQgMDt2YXIgbT1vKGEoIi4vdjM1LmpzIikpLHM9byhhKCIuL21kNS5qcyIpKTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX12YXIgcj0oMCxtLmRlZmF1bHQpKCJ2MyIsNDgscy5kZWZhdWx0KTtrLmRlZmF1bHQ9cn0seyIuL21kNS5qcyI6NTI5LCIuL3YzNS5qcyI6NTM4fV0sNTM4OltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuZGVmYXVsdD1mdW5jdGlvbihlLGwsbil7ZnVuY3Rpb24gaShmLGMsdSxkKXtpZih0eXBlb2YgZj09InN0cmluZyImJihmPWZ1bmN0aW9uKHcpe3c9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHcpKTtjb25zdCBfPVtdO2ZvcihsZXQgQT0wO0E8dy5sZW5ndGg7KytBKV8ucHVzaCh3LmNoYXJDb2RlQXQoQSkpO3JldHVybiBffShmKSksdHlwZW9mIGM9PSJzdHJpbmciJiYoYz0oMCxzLmRlZmF1bHQpKGMpKSxjLmxlbmd0aCE9PTE2KXRocm93IFR5cGVFcnJvcigiTmFtZXNwYWNlIG11c3QgYmUgYXJyYXktbGlrZSAoMTYgaXRlcmFibGUgaW50ZWdlciB2YWx1ZXMsIDAtMjU1KSIpO2xldCBoPW5ldyBVaW50OEFycmF5KDE2K2YubGVuZ3RoKTtpZihoLnNldChjKSxoLnNldChmLGMubGVuZ3RoKSxoPW4oaCksaFs2XT0xNSZoWzZdfGwsaFs4XT02MyZoWzhdfDEyOCx1KXtkPWR8fDA7Zm9yKGxldCB3PTA7dzwxNjsrK3cpdVtkK3ddPWhbd107cmV0dXJuIHV9cmV0dXJuKDAsbS5kZWZhdWx0KShoKX10cnl7aS5uYW1lPWV9Y2F0Y2h7fXJldHVybiBpLkROUz1yLGkuVVJMPXQsaX0say5VUkw9ay5ETlM9dm9pZCAwO3ZhciBtPW8oYSgiLi9zdHJpbmdpZnkuanMiKSkscz1vKGEoIi4vcGFyc2UuanMiKSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19Y29uc3Qgcj0iNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4IjtrLkROUz1yO2NvbnN0IHQ9IjZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCI7ay5VUkw9dH0seyIuL3BhcnNlLmpzIjo1MzEsIi4vc3RyaW5naWZ5LmpzIjo1MzV9XSw1Mzk6W2Z1bmN0aW9uKGEsRSxrKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5kZWZhdWx0PXZvaWQgMDt2YXIgbT1vKGEoIi4vcm5nLmpzIikpLHM9byhhKCIuL3N0cmluZ2lmeS5qcyIpKTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX12YXIgcj1mdW5jdGlvbih0LGUsbCl7Y29uc3Qgbj0odD10fHx7fSkucmFuZG9tfHwodC5ybmd8fG0uZGVmYXVsdCkoKTtpZihuWzZdPTE1Jm5bNl18NjQsbls4XT02MyZuWzhdfDEyOCxlKXtsPWx8fDA7Zm9yKGxldCBpPTA7aTwxNjsrK2kpZVtsK2ldPW5baV07cmV0dXJuIGV9cmV0dXJuKDAscy5kZWZhdWx0KShuKX07ay5kZWZhdWx0PXJ9LHsiLi9ybmcuanMiOjUzMywiLi9zdHJpbmdpZnkuanMiOjUzNX1dLDU0MDpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLmRlZmF1bHQ9dm9pZCAwO3ZhciBtPW8oYSgiLi92MzUuanMiKSkscz1vKGEoIi4vc2hhMS5qcyIpKTtmdW5jdGlvbiBvKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX12YXIgcj0oMCxtLmRlZmF1bHQpKCJ2NSIsODAscy5kZWZhdWx0KTtrLmRlZmF1bHQ9cn0seyIuL3NoYTEuanMiOjUzNCwiLi92MzUuanMiOjUzOH1dLDU0MTpbZnVuY3Rpb24oYSxFLGspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLmRlZmF1bHQ9dm9pZCAwO3ZhciBtLHM9KG09YSgiLi9yZWdleC5qcyIpKSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX0sbz1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI9PSJzdHJpbmciJiZzLmRlZmF1bHQudGVzdChyKX07ay5kZWZhdWx0PW99LHsiLi9yZWdleC5qcyI6NTMyfV0sNTQyOltmdW5jdGlvbihhLEUsayl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGssIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGsuZGVmYXVsdD12b2lkIDA7dmFyIG0scz0obT1hKCIuL3ZhbGlkYXRlLmpzIikpJiZtLl9fZXNNb2R1bGU/bTp7ZGVmYXVsdDptfSxvPWZ1bmN0aW9uKHIpe2lmKCEoMCxzLmRlZmF1bHQpKHIpKXRocm93IFR5cGVFcnJvcigiSW52YWxpZCBVVUlEIik7cmV0dXJuIHBhcnNlSW50KHIuc3Vic3RyKDE0LDEpLDE2KX07ay5kZWZhdWx0PW99LHsiLi92YWxpZGF0ZS5qcyI6NTQxfV0sNTQzOltmdW5jdGlvbihhLEUsayl7LyoqCiogQ2hhcmFjdGVyIGNsYXNzZXMgYW5kIGFzc29jaWF0ZWQgdXRpbGl0aWVzIGZvciB0aGUgNXRoIGVkaXRpb24gb2YgWE1MIDEuMC4KKgoqIEBhdXRob3IgTG91aXMtRG9taW5pcXVlIER1YmVhdQoqIEBsaWNlbnNlIE1JVAoqIEBjb3B5cmlnaHQgTG91aXMtRG9taW5pcXVlIER1YmVhdQoqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxrLkNIQVI9YAkKXHIgLe2fv+6AgC3vv73wkICALfSPv79gLGsuUz1gIAlccgpgLGsuTkFNRV9TVEFSVF9DSEFSPSI6QS1aX2EtesOALcOWw5gtw7bDuC3Lv82wLc29zb8t4b+/4oCM4oCN4oGwLeKGj+KwgC3iv6/jgIEt7Z+/76SALe+3j++3sC3vv73wkICALfOvv78iLGsuTkFNRV9DSEFSPSItIitrLk5BTUVfU1RBUlRfQ0hBUisiLjAtOcK3zIAtza/igL8t4oGAIixrLkNIQVJfUkU9bmV3IFJlZ0V4cCgiXlsiK2suQ0hBUisiXSQiLCJ1Iiksay5TX1JFPW5ldyBSZWdFeHAoIl5bIitrLlMrIl0rJCIsInUiKSxrLk5BTUVfU1RBUlRfQ0hBUl9SRT1uZXcgUmVnRXhwKCJeWyIray5OQU1FX1NUQVJUX0NIQVIrIl0kIiwidSIpLGsuTkFNRV9DSEFSX1JFPW5ldyBSZWdFeHAoIl5bIitrLk5BTUVfQ0hBUisiXSQiLCJ1Iiksay5OQU1FX1JFPW5ldyBSZWdFeHAoIl5bIitrLk5BTUVfU1RBUlRfQ0hBUisiXVsiK2suTkFNRV9DSEFSKyJdKiQiLCJ1Iiksay5OTVRPS0VOX1JFPW5ldyBSZWdFeHAoIl5bIitrLk5BTUVfQ0hBUisiXSskIiwidSIpO2Z1bmN0aW9uIG0ocyl7cmV0dXJuIHM+PTY1JiZzPD05MHx8cz49OTcmJnM8PTEyMnx8cz09PTU4fHxzPT09OTV8fHM9PT04MjA0fHxzPT09ODIwNXx8cz49MTkyJiZzPD0yMTR8fHM+PTIxNiYmczw9MjQ2fHxzPj0yNDgmJnM8PTc2N3x8cz49ODgwJiZzPD04OTN8fHM+PTg5NSYmczw9ODE5MXx8cz49ODMwNCYmczw9ODU5MXx8cz49MTEyNjQmJnM8PTEyMjcxfHxzPj0xMjI4OSYmczw9NTUyOTV8fHM+PTYzNzQ0JiZzPD02NDk3NXx8cz49NjUwMDgmJnM8PTY1NTMzfHxzPj02NTUzNiYmczw9OTgzMDM5fWsuU19MSVNUPVszMiwxMCwxMyw5XSxrLmlzQ2hhcj1mdW5jdGlvbihzKXtyZXR1cm4gcz49MzImJnM8PTU1Mjk1fHxzPT09MTB8fHM9PT0xM3x8cz09PTl8fHM+PTU3MzQ0JiZzPD02NTUzM3x8cz49NjU1MzYmJnM8PTExMTQxMTF9LGsuaXNTPWZ1bmN0aW9uKHMpe3JldHVybiBzPT09MzJ8fHM9PT0xMHx8cz09PTEzfHxzPT09OX0say5pc05hbWVTdGFydENoYXI9bSxrLmlzTmFtZUNoYXI9ZnVuY3Rpb24ocyl7cmV0dXJuIG0ocyl8fHM+PTQ4JiZzPD01N3x8cz09PTQ1fHxzPT09NDZ8fHM9PT0xODN8fHM+PTc2OCYmczw9ODc5fHxzPj04MjU1JiZzPD04MjU2fX0se31dLDU0NDpbZnVuY3Rpb24oYSxFLGspey8qKgoqIENoYXJhY3RlciBjbGFzc2VzIGFuZCBhc3NvY2lhdGVkIHV0aWxpdGllcyBmb3IgdGhlIDJuZCBlZGl0aW9uIG9mIFhNTCAxLjEuCioKKiBAYXV0aG9yIExvdWlzLURvbWluaXF1ZSBEdWJlYXUKKiBAbGljZW5zZSBNSVQKKiBAY29weXJpZ2h0IExvdWlzLURvbWluaXF1ZSBEdWJlYXUKKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5DSEFSPSIBLe2fv+6AgC3vv73wkICALfSPv78iLGsuUkVTVFJJQ1RFRF9DSEFSPSIBLVxiXHZcZg4tH38twoTChi3CnyIsay5TPWAgCVxyCmAsay5OQU1FX1NUQVJUX0NIQVI9IjpBLVpfYS16w4Atw5bDmC3DtsO4Lcu/zbAtzb3Nvy3hv7/igIzigI3igbAt4oaP4rCALeK/r+OAgS3tn7/vpIAt77eP77ewLe+/vfCQgIAt86+/vyIsay5OQU1FX0NIQVI9Ii0iK2suTkFNRV9TVEFSVF9DSEFSKyIuMC05wrfMgC3Nr+KAvy3igYAiLGsuQ0hBUl9SRT1uZXcgUmVnRXhwKCJeWyIray5DSEFSKyJdJCIsInUiKSxrLlJFU1RSSUNURURfQ0hBUl9SRT1uZXcgUmVnRXhwKCJeWyIray5SRVNUUklDVEVEX0NIQVIrIl0kIiwidSIpLGsuU19SRT1uZXcgUmVnRXhwKCJeWyIray5TKyJdKyQiLCJ1Iiksay5OQU1FX1NUQVJUX0NIQVJfUkU9bmV3IFJlZ0V4cCgiXlsiK2suTkFNRV9TVEFSVF9DSEFSKyJdJCIsInUiKSxrLk5BTUVfQ0hBUl9SRT1uZXcgUmVnRXhwKCJeWyIray5OQU1FX0NIQVIrIl0kIiwidSIpLGsuTkFNRV9SRT1uZXcgUmVnRXhwKCJeWyIray5OQU1FX1NUQVJUX0NIQVIrIl1bIitrLk5BTUVfQ0hBUisiXSokIiwidSIpLGsuTk1UT0tFTl9SRT1uZXcgUmVnRXhwKCJeWyIray5OQU1FX0NIQVIrIl0rJCIsInUiKTtmdW5jdGlvbiBtKHMpe3JldHVybiBzPj02NSYmczw9OTB8fHM+PTk3JiZzPD0xMjJ8fHM9PT01OHx8cz09PTk1fHxzPT09ODIwNHx8cz09PTgyMDV8fHM+PTE5MiYmczw9MjE0fHxzPj0yMTYmJnM8PTI0Nnx8cz49MjQ4JiZzPD03Njd8fHM+PTg4MCYmczw9ODkzfHxzPj04OTUmJnM8PTgxOTF8fHM+PTgzMDQmJnM8PTg1OTF8fHM+PTExMjY0JiZzPD0xMjI3MXx8cz49MTIyODkmJnM8PTU1Mjk1fHxzPj02Mzc0NCYmczw9NjQ5NzV8fHM+PTY1MDA4JiZzPD02NTUzM3x8cz49NjU1MzYmJnM8PTk4MzAzOX1rLlNfTElTVD1bMzIsMTAsMTMsOV0say5pc0NoYXI9ZnVuY3Rpb24ocyl7cmV0dXJuIHM+PTEmJnM8PTU1Mjk1fHxzPj01NzM0NCYmczw9NjU1MzN8fHM+PTY1NTM2JiZzPD0xMTE0MTExfSxrLmlzUmVzdHJpY3RlZENoYXI9ZnVuY3Rpb24ocyl7cmV0dXJuIHM+PTEmJnM8PTh8fHM9PT0xMXx8cz09PTEyfHxzPj0xNCYmczw9MzF8fHM+PTEyNyYmczw9MTMyfHxzPj0xMzQmJnM8PTE1OX0say5pc0NoYXJBbmROb3RSZXN0cmljdGVkPWZ1bmN0aW9uKHMpe3JldHVybiBzPT09OXx8cz09PTEwfHxzPT09MTN8fHM+MzEmJnM8MTI3fHxzPT09MTMzfHxzPjE1OSYmczw9NTUyOTV8fHM+PTU3MzQ0JiZzPD02NTUzM3x8cz49NjU1MzYmJnM8PTExMTQxMTF9LGsuaXNTPWZ1bmN0aW9uKHMpe3JldHVybiBzPT09MzJ8fHM9PT0xMHx8cz09PTEzfHxzPT09OX0say5pc05hbWVTdGFydENoYXI9bSxrLmlzTmFtZUNoYXI9ZnVuY3Rpb24ocyl7cmV0dXJuIG0ocyl8fHM+PTQ4JiZzPD01N3x8cz09PTQ1fHxzPT09NDZ8fHM9PT0xODN8fHM+PTc2OCYmczw9ODc5fHxzPj04MjU1JiZzPD04MjU2fX0se31dLDU0NTpbZnVuY3Rpb24oYSxFLGspey8qKgoqIENoYXJhY3RlciBjbGFzcyB1dGlsaXRpZXMgZm9yIFhNTCBOUyAxLjAgZWRpdGlvbiAzLgoqCiogQGF1dGhvciBMb3Vpcy1Eb21pbmlxdWUgRHViZWF1CiogQGxpY2Vuc2UgTUlUCiogQGNvcHlyaWdodCBMb3Vpcy1Eb21pbmlxdWUgRHViZWF1CiovZnVuY3Rpb24gbShzKXtyZXR1cm4gcz49NjUmJnM8PTkwfHxzPT09OTV8fHM+PTk3JiZzPD0xMjJ8fHM+PTE5MiYmczw9MjE0fHxzPj0yMTYmJnM8PTI0Nnx8cz49MjQ4JiZzPD03Njd8fHM+PTg4MCYmczw9ODkzfHxzPj04OTUmJnM8PTgxOTF8fHM+PTgyMDQmJnM8PTgyMDV8fHM+PTgzMDQmJnM8PTg1OTF8fHM+PTExMjY0JiZzPD0xMjI3MXx8cz49MTIyODkmJnM8PTU1Mjk1fHxzPj02Mzc0NCYmczw9NjQ5NzV8fHM+PTY1MDA4JiZzPD02NTUzM3x8cz49NjU1MzYmJnM8PTk4MzAzOX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksay5OQ19OQU1FX1NUQVJUX0NIQVI9IkEtWl9hLXrDgC3DlsOYLcO2w7gty7/NsC3Nvc2/LeG/v+KAjC3igI3igbAt4oaP4rCALeK/r+OAgS3tn7/vpIAt77eP77ewLe+/vfCQgIAt86+/vyIsay5OQ19OQU1FX0NIQVI9Ii0iK2suTkNfTkFNRV9TVEFSVF9DSEFSKyIuMC05wrfMgC3Nr+KAvy3igYAiLGsuTkNfTkFNRV9TVEFSVF9DSEFSX1JFPW5ldyBSZWdFeHAoIl5bIitrLk5DX05BTUVfU1RBUlRfQ0hBUisiXSQiLCJ1Iiksay5OQ19OQU1FX0NIQVJfUkU9bmV3IFJlZ0V4cCgiXlsiK2suTkNfTkFNRV9DSEFSKyJdJCIsInUiKSxrLk5DX05BTUVfUkU9bmV3IFJlZ0V4cCgiXlsiK2suTkNfTkFNRV9TVEFSVF9DSEFSKyJdWyIray5OQ19OQU1FX0NIQVIrIl0qJCIsInUiKSxrLmlzTkNOYW1lU3RhcnRDaGFyPW0say5pc05DTmFtZUNoYXI9ZnVuY3Rpb24ocyl7cmV0dXJuIG0ocyl8fHM9PT00NXx8cz09PTQ2fHxzPj00OCYmczw9NTd8fHM9PT0xODN8fHM+PTc2OCYmczw9ODc5fHxzPj04MjU1JiZzPD04MjU2fX0se31dfSx7fSxbMTVdKSgxNSl9KX0pKEhlKTt2YXIgUWU9SGUuZXhwb3J0cyxPZT1KZShRZSksVmU9e2V4cG9ydHM6e319OyhmdW5jdGlvbihPdCl7dmFyIG5lPXt9LGE9ZnVuY3Rpb24oayl7ay52ZXJzaW9uPSIwLjExLjIiO2Z1bmN0aW9uIG0oeCl7Zm9yKHZhciBJPSIiLEg9eC5sZW5ndGgtMTtIPj0wOylJKz14LmNoYXJBdChILS0pO3JldHVybiBJfWZ1bmN0aW9uIHMoeCxJKXtmb3IodmFyIEg9IiI7SC5sZW5ndGg8STspSCs9eDtyZXR1cm4gSH1mdW5jdGlvbiBvKHgsSSl7dmFyIEg9IiIreDtyZXR1cm4gSC5sZW5ndGg+PUk/SDpzKCIwIixJLUgubGVuZ3RoKStIfWZ1bmN0aW9uIHIoeCxJKXt2YXIgSD0iIit4O3JldHVybiBILmxlbmd0aD49ST9IOnMoIiAiLEktSC5sZW5ndGgpK0h9ZnVuY3Rpb24gdCh4LEkpe3ZhciBIPSIiK3g7cmV0dXJuIEgubGVuZ3RoPj1JP0g6SCtzKCIgIixJLUgubGVuZ3RoKX1mdW5jdGlvbiBlKHgsSSl7dmFyIEg9IiIrTWF0aC5yb3VuZCh4KTtyZXR1cm4gSC5sZW5ndGg+PUk/SDpzKCIwIixJLUgubGVuZ3RoKStIfWZ1bmN0aW9uIGwoeCxJKXt2YXIgSD0iIit4O3JldHVybiBILmxlbmd0aD49ST9IOnMoIjAiLEktSC5sZW5ndGgpK0h9dmFyIG49TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gaSh4LEkpe2lmKHg+bnx8eDwtbilyZXR1cm4gZSh4LEkpO3ZhciBIPU1hdGgucm91bmQoeCk7cmV0dXJuIGwoSCxJKX1mdW5jdGlvbiBmKHgsSSl7cmV0dXJuIEk9SXx8MCx4Lmxlbmd0aD49NytJJiYoeC5jaGFyQ29kZUF0KEkpfDMyKT09PTEwMyYmKHguY2hhckNvZGVBdChJKzEpfDMyKT09PTEwMSYmKHguY2hhckNvZGVBdChJKzIpfDMyKT09PTExMCYmKHguY2hhckNvZGVBdChJKzMpfDMyKT09PTEwMSYmKHguY2hhckNvZGVBdChJKzQpfDMyKT09PTExNCYmKHguY2hhckNvZGVBdChJKzUpfDMyKT09PTk3JiYoeC5jaGFyQ29kZUF0KEkrNil8MzIpPT09MTA4fXZhciBjPVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVyZGF5Il1dLHU9W1siSiIsIkphbiIsIkphbnVhcnkiXSxbIkYiLCJGZWIiLCJGZWJydWFyeSJdLFsiTSIsIk1hciIsIk1hcmNoIl0sWyJBIiwiQXByIiwiQXByaWwiXSxbIk0iLCJNYXkiLCJNYXkiXSxbIkoiLCJKdW4iLCJKdW5lIl0sWyJKIiwiSnVsIiwiSnVseSJdLFsiQSIsIkF1ZyIsIkF1Z3VzdCJdLFsiUyIsIlNlcCIsIlNlcHRlbWJlciJdLFsiTyIsIk9jdCIsIk9jdG9iZXIiXSxbIk4iLCJOb3YiLCJOb3ZlbWJlciJdLFsiRCIsIkRlYyIsIkRlY2VtYmVyIl1dO2Z1bmN0aW9uIGQoeCl7eFswXT0iR2VuZXJhbCIseFsxXT0iMCIseFsyXT0iMC4wMCIseFszXT0iIywjIzAiLHhbNF09IiMsIyMwLjAwIix4WzldPSIwJSIseFsxMF09IjAuMDAlIix4WzExXT0iMC4wMEUrMDAiLHhbMTJdPSIjID8vPyIseFsxM109IiMgPz8vPz8iLHhbMTRdPSJtL2QveXkiLHhbMTVdPSJkLW1tbS15eSIseFsxNl09ImQtbW1tIix4WzE3XT0ibW1tLXl5Iix4WzE4XT0iaDptbSBBTS9QTSIseFsxOV09Img6bW06c3MgQU0vUE0iLHhbMjBdPSJoOm1tIix4WzIxXT0iaDptbTpzcyIseFsyMl09Im0vZC95eSBoOm1tIix4WzM3XT0iIywjIzAgOygjLCMjMCkiLHhbMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIix4WzM5XT0iIywjIzAuMDA7KCMsIyMwLjAwKSIseFs0MF09IiMsIyMwLjAwO1tSZWRdKCMsIyMwLjAwKSIseFs0NV09Im1tOnNzIix4WzQ2XT0iW2hdOm1tOnNzIix4WzQ3XT0ibW1zcy4wIix4WzQ4XT0iIyMwLjBFKzAiLHhbNDldPSJAIix4WzU2XT0nIuS4iuWNiC/kuIvljYggImhoIuaZgiJtbSLliIYic3Mi56eSICInfXZhciBoPXt9O2QoaCk7dmFyIHc9W10sXz0wO2ZvcihfPTU7Xzw9ODsrK18pd1tfXT0zMitfO2ZvcihfPTIzO188PTI2OysrXyl3W19dPTA7Zm9yKF89Mjc7Xzw9MzE7KytfKXdbX109MTQ7Zm9yKF89NTA7Xzw9NTg7KytfKXdbX109MTQ7Zm9yKF89NTk7Xzw9NjI7KytfKXdbX109Xy01ODtmb3IoXz02NztfPD02ODsrK18pd1tfXT1fLTU4O2ZvcihfPTcyO188PTc1OysrXyl3W19dPV8tNTg7Zm9yKF89Njc7Xzw9Njg7KytfKXdbX109Xy01Nztmb3IoXz03NjtfPD03ODsrK18pd1tfXT1fLTU2O2ZvcihfPTc5O188PTgxOysrXyl3W19dPV8tMzQ7dmFyIEE9W107QVs1XT1BWzYzXT0nIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsQVs2XT1BWzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxBWzddPUFbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxBWzhdPUFbNjZdPSciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEFbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxBWzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsQVs0M109J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsQVs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKSc7ZnVuY3Rpb24gUCh4LEksSCl7Zm9yKHZhciBaPXg8MD8tMToxLFY9eCpaLEs9MCxZPTEsSj0wLHE9MSxHPTAsUT0wLHJ0PU1hdGguZmxvb3IoVik7RzxJJiYocnQ9TWF0aC5mbG9vcihWKSxKPXJ0KlkrSyxRPXJ0KkcrcSwhKFYtcnQ8NWUtOCkpOylWPTEvKFYtcnQpLEs9WSxZPUoscT1HLEc9UTtpZihRPkkmJihHPkk/KFE9cSxKPUspOihRPUcsSj1ZKSksIUgpcmV0dXJuWzAsWipKLFFdO3ZhciBzdD1NYXRoLmZsb29yKFoqSi9RKTtyZXR1cm5bc3QsWipKLXN0KlEsUV19ZnVuY3Rpb24gTCh4LEksSCl7aWYoeD4yOTU4NDY1fHx4PDApcmV0dXJuIG51bGw7dmFyIFo9eHwwLFY9TWF0aC5mbG9vcig4NjQwMCooeC1aKSksSz0wLFk9W10sSj17RDpaLFQ6Vix1Ojg2NDAwKih4LVopLVYseTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhKLnUpPDFlLTYmJihKLnU9MCksSSYmSS5kYXRlMTkwNCYmKForPTE0NjIpLEoudT4uOTk5OSYmKEoudT0wLCsrVj09ODY0MDAmJihKLlQ9Vj0wLCsrWiwrK0ouRCkpLFo9PT02MClZPUg/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLEs9MztlbHNlIGlmKFo9PT0wKVk9SD9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLEs9NjtlbHNle1o+NjAmJi0tWjt2YXIgcT1uZXcgRGF0ZSgxOTAwLDAsMSk7cS5zZXREYXRlKHEuZ2V0RGF0ZSgpK1otMSksWT1bcS5nZXRGdWxsWWVhcigpLHEuZ2V0TW9udGgoKSsxLHEuZ2V0RGF0ZSgpXSxLPXEuZ2V0RGF5KCksWjw2MCYmKEs9KEsrNiklNyksSCYmKEs9dihxLFkpKX1yZXR1cm4gSi55PVlbMF0sSi5tPVlbMV0sSi5kPVlbMl0sSi5TPVYlNjAsVj1NYXRoLmZsb29yKFYvNjApLEouTT1WJTYwLFY9TWF0aC5mbG9vcihWLzYwKSxKLkg9VixKLnE9SyxKfWsucGFyc2VfZGF0ZV9jb2RlPUw7dmFyIE49bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksRD1OLmdldFRpbWUoKSxGPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBVKHgsSSl7dmFyIEg9eC5nZXRUaW1lKCk7cmV0dXJuIEk/SC09MTI2MjMwNGU1Ong+PUYmJihIKz04NjRlNSksKEgtKEQrKHguZ2V0VGltZXpvbmVPZmZzZXQoKS1OLmdldFRpbWV6b25lT2Zmc2V0KCkpKjZlNCkpLzg2NGU1fWZ1bmN0aW9uIEIoeCl7cmV0dXJuIHgudG9TdHJpbmcoMTApfWsuX2dlbmVyYWxfaW50PUI7dmFyIFM9ZnVuY3Rpb24oKXt2YXIgST0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBIKEcpe3JldHVybiBHLmluZGV4T2YoIi4iKT09LTE/RzpHLnJlcGxhY2UoSSwiJDEiKX12YXIgWj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxWPS8oRVsrLV0pKFxkKSQvO2Z1bmN0aW9uIEsoRyl7cmV0dXJuIEcuaW5kZXhPZigiRSIpPT0tMT9HOkcucmVwbGFjZShaLCIkMUUiKS5yZXBsYWNlKFYsIiQxMCQyIil9ZnVuY3Rpb24gWShHKXt2YXIgUT1HPDA/MTI6MTEscnQ9SChHLnRvRml4ZWQoMTIpKTtyZXR1cm4gcnQubGVuZ3RoPD1RfHwocnQ9Ry50b1ByZWNpc2lvbigxMCkscnQubGVuZ3RoPD1RKT9ydDpHLnRvRXhwb25lbnRpYWwoNSl9ZnVuY3Rpb24gSihHKXt2YXIgUT1IKEcudG9GaXhlZCgxMSkpO3JldHVybiBRLmxlbmd0aD4oRzwwPzEyOjExKXx8UT09PSIwInx8UT09PSItMCI/Ry50b1ByZWNpc2lvbig2KTpRfWZ1bmN0aW9uIHEoRyl7dmFyIFE9TWF0aC5mbG9vcihNYXRoLmxvZyhNYXRoLmFicyhHKSkqTWF0aC5MT0cxMEUpLHJ0O3JldHVybiBRPj0tNCYmUTw9LTE/cnQ9Ry50b1ByZWNpc2lvbigxMCtRKTpNYXRoLmFicyhRKTw9OT9ydD1ZKEcpOlE9PT0xMD9ydD1HLnRvRml4ZWQoMTApLnN1YnN0cigwLDEyKTpydD1KKEcpLEgoSyhydC50b1VwcGVyQ2FzZSgpKSl9cmV0dXJuIHF9KCk7ay5fZ2VuZXJhbF9udW09UztmdW5jdGlvbiBDKHgsSSl7c3dpdGNoKHR5cGVvZiB4KXtjYXNlInN0cmluZyI6cmV0dXJuIHg7Y2FzZSJib29sZWFuIjpyZXR1cm4geD8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJlciI6cmV0dXJuKHh8MCk9PT14P3gudG9TdHJpbmcoMTApOlMoeCk7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZih4PT1udWxsKXJldHVybiIiO2lmKHggaW5zdGFuY2VvZiBEYXRlKXJldHVybiBXKDE0LFUoeCxJJiZJLmRhdGUxOTA0KSxJKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK3gpfWsuX2dlbmVyYWw9QztmdW5jdGlvbiB2KHgsSSl7SVswXS09NTgxO3ZhciBIPXguZ2V0RGF5KCk7cmV0dXJuIHg8NjAmJihIPShIKzYpJTcpLEh9ZnVuY3Rpb24gcCh4LEksSCxaKXt2YXIgVj0iIixLPTAsWT0wLEo9SC55LHEsRz0wO3N3aXRjaCh4KXtjYXNlIDk4Oko9SC55KzU0MztjYXNlIDEyMTpzd2l0Y2goSS5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6cT1KJTEwMCxHPTI7YnJlYWs7ZGVmYXVsdDpxPUolMWU0LEc9NDticmVha31icmVhaztjYXNlIDEwOTpzd2l0Y2goSS5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6cT1ILm0sRz1JLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIHVbSC5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gdVtILm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gdVtILm0tMV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKEkubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnE9SC5kLEc9SS5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBjW0gucV1bMF07ZGVmYXVsdDpyZXR1cm4gY1tILnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChJLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpxPTErKEguSCsxMSklMTIsRz1JLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitJfWJyZWFrO2Nhc2UgNzI6c3dpdGNoKEkubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOnE9SC5ILEc9SS5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrSX1icmVhaztjYXNlIDc3OnN3aXRjaChJLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpxPUguTSxHPUkubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrSX1icmVhaztjYXNlIDExNTppZihJIT0icyImJkkhPSJzcyImJkkhPSIuMCImJkkhPSIuMDAiJiZJIT0iLjAwMCIpdGhyb3ciYmFkIHNlY29uZCBmb3JtYXQ6ICIrSTtyZXR1cm4gSC51PT09MCYmKEk9PSJzInx8ST09InNzIik/byhILlMsSS5sZW5ndGgpOihaPj0yP1k9Wj09PTM/MWUzOjEwMDpZPVo9PT0xPzEwOjEsSz1NYXRoLnJvdW5kKFkqKEguUytILnUpKSxLPj02MCpZJiYoSz0wKSxJPT09InMiP0s9PT0wPyIwIjoiIitLL1k6KFY9byhLLDIrWiksST09PSJzcyI/Vi5zdWJzdHIoMCwyKToiLiIrVi5zdWJzdHIoMixJLmxlbmd0aC0xKSkpO2Nhc2UgOTA6c3dpdGNoKEkpe2Nhc2UiW2hdIjpjYXNlIltoaF0iOnE9SC5EKjI0K0guSDticmVhaztjYXNlIlttXSI6Y2FzZSJbbW1dIjpxPShILkQqMjQrSC5IKSo2MCtILk07YnJlYWs7Y2FzZSJbc10iOmNhc2UiW3NzXSI6cT0oKEguRCoyNCtILkgpKjYwK0guTSkqNjArTWF0aC5yb3VuZChILlMrSC51KTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhYnN0aW1lIGZvcm1hdDogIitJfUc9SS5sZW5ndGg9PT0zPzE6MjticmVhaztjYXNlIDEwMTpxPUosRz0xO2JyZWFrfXZhciBRPUc+MD9vKHEsRyk6IiI7cmV0dXJuIFF9ZnVuY3Rpb24gYih4KXt2YXIgST0zO2lmKHgubGVuZ3RoPD1JKXJldHVybiB4O2Zvcih2YXIgSD14Lmxlbmd0aCVJLFo9eC5zdWJzdHIoMCxIKTtIIT14Lmxlbmd0aDtIKz1JKVorPShaLmxlbmd0aD4wPyIsIjoiIikreC5zdWJzdHIoSCxJKTtyZXR1cm4gWn12YXIgZz1mdW5jdGlvbigpe3ZhciBJPS8lL2c7ZnVuY3Rpb24gSChjdCxldCxpdCl7dmFyIHB0PWV0LnJlcGxhY2UoSSwiIiksYXQ9ZXQubGVuZ3RoLXB0Lmxlbmd0aDtyZXR1cm4gZyhjdCxwdCxpdCpNYXRoLnBvdygxMCwyKmF0KSkrcygiJSIsYXQpfWZ1bmN0aW9uIFooY3QsZXQsaXQpe2Zvcih2YXIgcHQ9ZXQubGVuZ3RoLTE7ZXQuY2hhckNvZGVBdChwdC0xKT09PTQ0OyktLXB0O3JldHVybiBnKGN0LGV0LnN1YnN0cigwLHB0KSxpdC9NYXRoLnBvdygxMCwzKihldC5sZW5ndGgtcHQpKSl9ZnVuY3Rpb24gVihjdCxldCl7dmFyIGl0LHB0PWN0LmluZGV4T2YoIkUiKS1jdC5pbmRleE9mKCIuIiktMTtpZihjdC5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoZXQ9PTApcmV0dXJuIjAuMEUrMCI7aWYoZXQ8MClyZXR1cm4iLSIrVihjdCwtZXQpO3ZhciBhdD1jdC5pbmRleE9mKCIuIik7YXQ9PT0tMSYmKGF0PWN0LmluZGV4T2YoIkUiKSk7dmFyIGx0PU1hdGguZmxvb3IoTWF0aC5sb2coZXQpKk1hdGguTE9HMTBFKSVhdDtpZihsdDwwJiYobHQrPWF0KSxpdD0oZXQvTWF0aC5wb3coMTAsbHQpKS50b1ByZWNpc2lvbihwdCsxKyhhdCtsdCklYXQpLGl0LmluZGV4T2YoImUiKT09PS0xKXt2YXIgd3Q9TWF0aC5mbG9vcihNYXRoLmxvZyhldCkqTWF0aC5MT0cxMEUpO2ZvcihpdC5pbmRleE9mKCIuIik9PT0tMT9pdD1pdC5jaGFyQXQoMCkrIi4iK2l0LnN1YnN0cigxKSsiRSsiKyh3dC1pdC5sZW5ndGgrbHQpOml0Kz0iRSsiKyh3dC1sdCk7aXQuc3Vic3RyKDAsMik9PT0iMC4iOylpdD1pdC5jaGFyQXQoMCkraXQuc3Vic3RyKDIsYXQpKyIuIitpdC5zdWJzdHIoMithdCksaXQ9aXQucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO2l0PWl0LnJlcGxhY2UoL1wrLS8sIi0iKX1pdD1pdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKHh0LGp0LE50LGt0KXtyZXR1cm4ganQrTnQra3Quc3Vic3RyKDAsKGF0K2x0KSVhdCkrIi4iK2t0LnN1YnN0cihsdCkrIkUifSl9ZWxzZSBpdD1ldC50b0V4cG9uZW50aWFsKHB0KTtyZXR1cm4gY3QubWF0Y2goL0VcKzAwJC8pJiZpdC5tYXRjaCgvZVsrLV1cZCQvKSYmKGl0PWl0LnN1YnN0cigwLGl0Lmxlbmd0aC0xKSsiMCIraXQuY2hhckF0KGl0Lmxlbmd0aC0xKSksY3QubWF0Y2goL0VcLS8pJiZpdC5tYXRjaCgvZVwrLykmJihpdD1pdC5yZXBsYWNlKC9lXCsvLCJlIikpLGl0LnJlcGxhY2UoImUiLCJFIil9dmFyIEs9LyMgKFw/KykoID8pXC8oID8pKFxkKykvO2Z1bmN0aW9uIFkoY3QsZXQsaXQpe3ZhciBwdD1wYXJzZUludChjdFs0XSwxMCksYXQ9TWF0aC5yb3VuZChldCpwdCksbHQ9TWF0aC5mbG9vcihhdC9wdCksd3Q9YXQtbHQqcHQseHQ9cHQ7cmV0dXJuIGl0KyhsdD09PTA/IiI6IiIrbHQpKyIgIisod3Q9PT0wP3MoIiAiLGN0WzFdLmxlbmd0aCsxK2N0WzRdLmxlbmd0aCk6cih3dCxjdFsxXS5sZW5ndGgpK2N0WzJdKyIvIitjdFszXStvKHh0LGN0WzRdLmxlbmd0aCkpfWZ1bmN0aW9uIEooY3QsZXQsaXQpe3JldHVybiBpdCsoZXQ9PT0wPyIiOiIiK2V0KStzKCIgIixjdFsxXS5sZW5ndGgrMitjdFs0XS5sZW5ndGgpfXZhciBxPS9eIyowKlwuKFswI10rKS8sRz0vXCkuKlswI10vLFE9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIHJ0KGN0KXtmb3IodmFyIGV0PSIiLGl0LHB0PTA7cHQhPWN0Lmxlbmd0aDsrK3B0KXN3aXRjaChpdD1jdC5jaGFyQ29kZUF0KHB0KSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOmV0Kz0iICI7YnJlYWs7Y2FzZSA0ODpldCs9IjAiO2JyZWFrO2RlZmF1bHQ6ZXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaXQpfXJldHVybiBldH1mdW5jdGlvbiBzdChjdCxldCl7dmFyIGl0PU1hdGgucG93KDEwLGV0KTtyZXR1cm4iIitNYXRoLnJvdW5kKGN0Kml0KS9pdH1mdW5jdGlvbiBvdChjdCxldCl7dmFyIGl0PWN0LU1hdGguZmxvb3IoY3QpLHB0PU1hdGgucG93KDEwLGV0KTtyZXR1cm4gZXQ8KCIiK01hdGgucm91bmQoaXQqcHQpKS5sZW5ndGg/MDpNYXRoLnJvdW5kKGl0KnB0KX1mdW5jdGlvbiBodChjdCxldCl7cmV0dXJuIGV0PCgiIitNYXRoLnJvdW5kKChjdC1NYXRoLmZsb29yKGN0KSkqTWF0aC5wb3coMTAsZXQpKSkubGVuZ3RoPzE6MH1mdW5jdGlvbiBkdChjdCl7cmV0dXJuIGN0PDIxNDc0ODM2NDcmJmN0Pi0yMTQ3NDgzNjQ4PyIiKyhjdD49MD9jdHwwOmN0LTF8MCk6IiIrTWF0aC5mbG9vcihjdCl9ZnVuY3Rpb24gbXQoY3QsZXQsaXQpe2lmKGN0LmNoYXJDb2RlQXQoMCk9PT00MCYmIWV0Lm1hdGNoKEcpKXt2YXIgcHQ9ZXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIGl0Pj0wP210KCJuIixwdCxpdCk6IigiK210KCJuIixwdCwtaXQpKyIpIn1pZihldC5jaGFyQ29kZUF0KGV0Lmxlbmd0aC0xKT09PTQ0KXJldHVybiBaKGN0LGV0LGl0KTtpZihldC5pbmRleE9mKCIlIikhPT0tMSlyZXR1cm4gSChjdCxldCxpdCk7aWYoZXQuaW5kZXhPZigiRSIpIT09LTEpcmV0dXJuIFYoZXQsaXQpO2lmKGV0LmNoYXJDb2RlQXQoMCk9PT0zNilyZXR1cm4iJCIrbXQoY3QsZXQuc3Vic3RyKGV0LmNoYXJBdCgxKT09IiAiPzI6MSksaXQpO3ZhciBhdCxsdCx3dCx4dCxqdD1NYXRoLmFicyhpdCksTnQ9aXQ8MD8iLSI6IiI7aWYoZXQubWF0Y2goL14wMCskLykpcmV0dXJuIE50K2koanQsZXQubGVuZ3RoKTtpZihldC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiBhdD1pKGl0LDApLGF0PT09IjAiJiYoYXQ9IiIpLGF0Lmxlbmd0aD5ldC5sZW5ndGg/YXQ6cnQoZXQuc3Vic3RyKDAsZXQubGVuZ3RoLWF0Lmxlbmd0aCkpK2F0O2lmKGx0PWV0Lm1hdGNoKEspKXJldHVybiBZKGx0LGp0LE50KTtpZihldC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIE50K2koanQsZXQubGVuZ3RoLWV0LmluZGV4T2YoIjAiKSk7aWYobHQ9ZXQubWF0Y2gocSkpcmV0dXJuIGF0PXN0KGl0LGx0WzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrcnQobHRbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitydChsdFsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihxdCxHdCl7cmV0dXJuIi4iK0d0K3MoIjAiLHJ0KGx0WzFdKS5sZW5ndGgtR3QubGVuZ3RoKX0pLGV0LmluZGV4T2YoIjAuIikhPT0tMT9hdDphdC5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKGV0PWV0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbHQ9ZXQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBOdCtzdChqdCxsdFsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLGx0WzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobHQ9ZXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIE50K2IoaShqdCwwKSk7aWYobHQ9ZXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIGl0PDA/Ii0iK210KGN0LGV0LC1pdCk6YigiIisoTWF0aC5mbG9vcihpdCkraHQoaXQsbHRbMV0ubGVuZ3RoKSkpKyIuIitvKG90KGl0LGx0WzFdLmxlbmd0aCksbHRbMV0ubGVuZ3RoKTtpZihsdD1ldC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gbXQoY3QsZXQucmVwbGFjZSgvXiMsIyosLywiIiksaXQpO2lmKGx0PWV0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiBhdD1tKG10KGN0LGV0LnJlcGxhY2UoL1tcXC1dL2csIiIpLGl0KSksd3Q9MCxtKG0oZXQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihxdCl7cmV0dXJuIHd0PGF0Lmxlbmd0aD9hdC5jaGFyQXQod3QrKyk6cXQ9PT0iMCI/IjAiOiIifSkpO2lmKGV0Lm1hdGNoKFEpKXJldHVybiBhdD1tdChjdCwiIyMjIyMjIyMjIyIsaXQpLCIoIithdC5zdWJzdHIoMCwzKSsiKSAiK2F0LnN1YnN0cigzLDMpKyItIithdC5zdWJzdHIoNik7dmFyIGt0PSIiO2lmKGx0PWV0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gd3Q9TWF0aC5taW4obHRbNF0ubGVuZ3RoLDcpLHh0PVAoanQsTWF0aC5wb3coMTAsd3QpLTEsITEpLGF0PSIiK050LGt0PWcoIm4iLGx0WzFdLHh0WzFdKSxrdC5jaGFyQXQoa3QubGVuZ3RoLTEpPT0iICImJihrdD1rdC5zdWJzdHIoMCxrdC5sZW5ndGgtMSkrIjAiKSxhdCs9a3QrbHRbMl0rIi8iK2x0WzNdLGt0PXQoeHRbMl0sd3QpLGt0Lmxlbmd0aDxsdFs0XS5sZW5ndGgmJihrdD1ydChsdFs0XS5zdWJzdHIobHRbNF0ubGVuZ3RoLWt0Lmxlbmd0aCkpK2t0KSxhdCs9a3QsYXQ7aWYobHQ9ZXQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHd0PU1hdGgubWluKE1hdGgubWF4KGx0WzFdLmxlbmd0aCxsdFs0XS5sZW5ndGgpLDcpLHh0PVAoanQsTWF0aC5wb3coMTAsd3QpLTEsITApLE50Kyh4dFswXXx8KHh0WzFdPyIiOiIwIikpKyIgIisoeHRbMV0/cih4dFsxXSx3dCkrbHRbMl0rIi8iK2x0WzNdK3QoeHRbMl0sd3QpOnMoIiAiLDIqd3QrMStsdFsyXS5sZW5ndGgrbHRbM10ubGVuZ3RoKSk7aWYobHQ9ZXQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIGF0PWkoaXQsMCksZXQubGVuZ3RoPD1hdC5sZW5ndGg/YXQ6cnQoZXQuc3Vic3RyKDAsZXQubGVuZ3RoLWF0Lmxlbmd0aCkpK2F0O2lmKGx0PWV0Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe2F0PSIiK2l0LnRvRml4ZWQoTWF0aC5taW4obHRbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSx3dD1hdC5pbmRleE9mKCIuIik7dmFyIEt0PWV0LmluZGV4T2YoIi4iKS13dCxXdD1ldC5sZW5ndGgtYXQubGVuZ3RoLUt0O3JldHVybiBydChldC5zdWJzdHIoMCxLdCkrYXQrZXQuc3Vic3RyKGV0Lmxlbmd0aC1XdCkpfWlmKGx0PWV0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gd3Q9b3QoaXQsbHRbMV0ubGVuZ3RoKSxpdDwwPyItIittdChjdCxldCwtaXQpOmIoZHQoaXQpKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKHF0KXtyZXR1cm4iMDAsIisocXQubGVuZ3RoPDM/bygwLDMtcXQubGVuZ3RoKToiIikrcXR9KSsiLiIrbyh3dCxsdFsxXS5sZW5ndGgpO3N3aXRjaChldCl7Y2FzZSIjIyMsIyMwLjAwIjpyZXR1cm4gbXQoY3QsIiMsIyMwLjAwIixpdCk7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIFB0PWIoaShqdCwwKSk7cmV0dXJuIFB0IT09IjAiP050K1B0OiIiO2Nhc2UiIyMjLCMjIy4wMCI6cmV0dXJuIG10KGN0LCIjIyMsIyMwLjAwIixpdCkucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gbXQoY3QsIiMsIyMwLjAwIixpdCkucmVwbGFjZSgvXjBcLi8sIi4iKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitldCsifCIpfWZ1bmN0aW9uIE10KGN0LGV0LGl0KXtmb3IodmFyIHB0PWV0Lmxlbmd0aC0xO2V0LmNoYXJDb2RlQXQocHQtMSk9PT00NDspLS1wdDtyZXR1cm4gZyhjdCxldC5zdWJzdHIoMCxwdCksaXQvTWF0aC5wb3coMTAsMyooZXQubGVuZ3RoLXB0KSkpfWZ1bmN0aW9uIEN0KGN0LGV0LGl0KXt2YXIgcHQ9ZXQucmVwbGFjZShJLCIiKSxhdD1ldC5sZW5ndGgtcHQubGVuZ3RoO3JldHVybiBnKGN0LHB0LGl0Kk1hdGgucG93KDEwLDIqYXQpKStzKCIlIixhdCl9ZnVuY3Rpb24gX3QoY3QsZXQpe3ZhciBpdCxwdD1jdC5pbmRleE9mKCJFIiktY3QuaW5kZXhPZigiLiIpLTE7aWYoY3QubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKGV0PT0wKXJldHVybiIwLjBFKzAiO2lmKGV0PDApcmV0dXJuIi0iK190KGN0LC1ldCk7dmFyIGF0PWN0LmluZGV4T2YoIi4iKTthdD09PS0xJiYoYXQ9Y3QuaW5kZXhPZigiRSIpKTt2YXIgbHQ9TWF0aC5mbG9vcihNYXRoLmxvZyhldCkqTWF0aC5MT0cxMEUpJWF0O2lmKGx0PDAmJihsdCs9YXQpLGl0PShldC9NYXRoLnBvdygxMCxsdCkpLnRvUHJlY2lzaW9uKHB0KzErKGF0K2x0KSVhdCksIWl0Lm1hdGNoKC9bRWVdLykpe3ZhciB3dD1NYXRoLmZsb29yKE1hdGgubG9nKGV0KSpNYXRoLkxPRzEwRSk7aXQuaW5kZXhPZigiLiIpPT09LTE/aXQ9aXQuY2hhckF0KDApKyIuIitpdC5zdWJzdHIoMSkrIkUrIisod3QtaXQubGVuZ3RoK2x0KTppdCs9IkUrIisod3QtbHQpLGl0PWl0LnJlcGxhY2UoL1wrLS8sIi0iKX1pdD1pdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKHh0LGp0LE50LGt0KXtyZXR1cm4ganQrTnQra3Quc3Vic3RyKDAsKGF0K2x0KSVhdCkrIi4iK2t0LnN1YnN0cihsdCkrIkUifSl9ZWxzZSBpdD1ldC50b0V4cG9uZW50aWFsKHB0KTtyZXR1cm4gY3QubWF0Y2goL0VcKzAwJC8pJiZpdC5tYXRjaCgvZVsrLV1cZCQvKSYmKGl0PWl0LnN1YnN0cigwLGl0Lmxlbmd0aC0xKSsiMCIraXQuY2hhckF0KGl0Lmxlbmd0aC0xKSksY3QubWF0Y2goL0VcLS8pJiZpdC5tYXRjaCgvZVwrLykmJihpdD1pdC5yZXBsYWNlKC9lXCsvLCJlIikpLGl0LnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24geXQoY3QsZXQsaXQpe2lmKGN0LmNoYXJDb2RlQXQoMCk9PT00MCYmIWV0Lm1hdGNoKEcpKXt2YXIgcHQ9ZXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIGl0Pj0wP3l0KCJuIixwdCxpdCk6IigiK3l0KCJuIixwdCwtaXQpKyIpIn1pZihldC5jaGFyQ29kZUF0KGV0Lmxlbmd0aC0xKT09PTQ0KXJldHVybiBNdChjdCxldCxpdCk7aWYoZXQuaW5kZXhPZigiJSIpIT09LTEpcmV0dXJuIEN0KGN0LGV0LGl0KTtpZihldC5pbmRleE9mKCJFIikhPT0tMSlyZXR1cm4gX3QoZXQsaXQpO2lmKGV0LmNoYXJDb2RlQXQoMCk9PT0zNilyZXR1cm4iJCIreXQoY3QsZXQuc3Vic3RyKGV0LmNoYXJBdCgxKT09IiAiPzI6MSksaXQpO3ZhciBhdCxsdCx3dCx4dCxqdD1NYXRoLmFicyhpdCksTnQ9aXQ8MD8iLSI6IiI7aWYoZXQubWF0Y2goL14wMCskLykpcmV0dXJuIE50K28oanQsZXQubGVuZ3RoKTtpZihldC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiBhdD0iIitpdCxpdD09PTAmJihhdD0iIiksYXQubGVuZ3RoPmV0Lmxlbmd0aD9hdDpydChldC5zdWJzdHIoMCxldC5sZW5ndGgtYXQubGVuZ3RoKSkrYXQ7aWYobHQ9ZXQubWF0Y2goSykpcmV0dXJuIEoobHQsanQsTnQpO2lmKGV0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gTnQrbyhqdCxldC5sZW5ndGgtZXQuaW5kZXhPZigiMCIpKTtpZihsdD1ldC5tYXRjaChxKSlyZXR1cm4gYXQ9KCIiK2l0KS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitydChsdFsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK3J0KGx0WzFdKSksYXQ9YXQucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKHF0LEd0KXtyZXR1cm4iLiIrR3QrcygiMCIscnQobHRbMV0pLmxlbmd0aC1HdC5sZW5ndGgpfSksZXQuaW5kZXhPZigiMC4iKSE9PS0xP2F0OmF0LnJlcGxhY2UoL14wXC4vLCIuIik7aWYoZXQ9ZXQucmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSxsdD1ldC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIE50KygiIitqdCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8sbHRbMV0ubGVuZ3RoPyIwLiI6Ii4iKTtpZihsdD1ldC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gTnQrYigiIitqdCk7aWYobHQ9ZXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIGl0PDA/Ii0iK3l0KGN0LGV0LC1pdCk6YigiIitpdCkrIi4iK3MoIjAiLGx0WzFdLmxlbmd0aCk7aWYobHQ9ZXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIHl0KGN0LGV0LnJlcGxhY2UoL14jLCMqLC8sIiIpLGl0KTtpZihsdD1ldC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gYXQ9bSh5dChjdCxldC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxpdCkpLHd0PTAsbShtKGV0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24ocXQpe3JldHVybiB3dDxhdC5sZW5ndGg/YXQuY2hhckF0KHd0KyspOnF0PT09IjAiPyIwIjoiIn0pKTtpZihldC5tYXRjaChRKSlyZXR1cm4gYXQ9eXQoY3QsIiMjIyMjIyMjIyMiLGl0KSwiKCIrYXQuc3Vic3RyKDAsMykrIikgIithdC5zdWJzdHIoMywzKSsiLSIrYXQuc3Vic3RyKDYpO3ZhciBrdD0iIjtpZihsdD1ldC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHd0PU1hdGgubWluKGx0WzRdLmxlbmd0aCw3KSx4dD1QKGp0LE1hdGgucG93KDEwLHd0KS0xLCExKSxhdD0iIitOdCxrdD1nKCJuIixsdFsxXSx4dFsxXSksa3QuY2hhckF0KGt0Lmxlbmd0aC0xKT09IiAiJiYoa3Q9a3Quc3Vic3RyKDAsa3QubGVuZ3RoLTEpKyIwIiksYXQrPWt0K2x0WzJdKyIvIitsdFszXSxrdD10KHh0WzJdLHd0KSxrdC5sZW5ndGg8bHRbNF0ubGVuZ3RoJiYoa3Q9cnQobHRbNF0uc3Vic3RyKGx0WzRdLmxlbmd0aC1rdC5sZW5ndGgpKStrdCksYXQrPWt0LGF0O2lmKGx0PWV0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiB3dD1NYXRoLm1pbihNYXRoLm1heChsdFsxXS5sZW5ndGgsbHRbNF0ubGVuZ3RoKSw3KSx4dD1QKGp0LE1hdGgucG93KDEwLHd0KS0xLCEwKSxOdCsoeHRbMF18fCh4dFsxXT8iIjoiMCIpKSsiICIrKHh0WzFdP3IoeHRbMV0sd3QpK2x0WzJdKyIvIitsdFszXSt0KHh0WzJdLHd0KTpzKCIgIiwyKnd0KzErbHRbMl0ubGVuZ3RoK2x0WzNdLmxlbmd0aCkpO2lmKGx0PWV0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBhdD0iIitpdCxldC5sZW5ndGg8PWF0Lmxlbmd0aD9hdDpydChldC5zdWJzdHIoMCxldC5sZW5ndGgtYXQubGVuZ3RoKSkrYXQ7aWYobHQ9ZXQubWF0Y2goL14oWyMwXSspXC4oWyMwXSspJC8pKXthdD0iIitpdC50b0ZpeGVkKE1hdGgubWluKGx0WzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksd3Q9YXQuaW5kZXhPZigiLiIpO3ZhciBLdD1ldC5pbmRleE9mKCIuIiktd3QsV3Q9ZXQubGVuZ3RoLWF0Lmxlbmd0aC1LdDtyZXR1cm4gcnQoZXQuc3Vic3RyKDAsS3QpK2F0K2V0LnN1YnN0cihldC5sZW5ndGgtV3QpKX1pZihsdD1ldC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIGl0PDA/Ii0iK3l0KGN0LGV0LC1pdCk6YigiIitpdCkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihxdCl7cmV0dXJuIjAwLCIrKHF0Lmxlbmd0aDwzP28oMCwzLXF0Lmxlbmd0aCk6IiIpK3F0fSkrIi4iK28oMCxsdFsxXS5sZW5ndGgpO3N3aXRjaChldCl7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIFB0PWIoIiIranQpO3JldHVybiBQdCE9PSIwIj9OdCtQdDoiIjtkZWZhdWx0OmlmKGV0Lm1hdGNoKC9cLlswIz9dKiQvKSlyZXR1cm4geXQoY3QsZXQuc2xpY2UoMCxldC5sYXN0SW5kZXhPZigiLiIpKSxpdCkrcnQoZXQuc2xpY2UoZXQubGFzdEluZGV4T2YoIi4iKSkpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK2V0KyJ8Iil9cmV0dXJuIGZ1bmN0aW9uKGV0LGl0LHB0KXtyZXR1cm4ocHR8MCk9PT1wdD95dChldCxpdCxwdCk6bXQoZXQsaXQscHQpfX0oKTtmdW5jdGlvbiB5KHgpe2Zvcih2YXIgST1bXSxIPSExLFo9MCxWPTA7Wjx4Lmxlbmd0aDsrK1opc3dpdGNoKHguY2hhckNvZGVBdChaKSl7Y2FzZSAzNDpIPSFIO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrWjticmVhaztjYXNlIDU5OklbSS5sZW5ndGhdPXguc3Vic3RyKFYsWi1WKSxWPVorMX1pZihJW0kubGVuZ3RoXT14LnN1YnN0cihWKSxIPT09ITApdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIreCsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBJfWsuX3NwbGl0PXk7dmFyIE09L1xbW0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIE8oeCl7Zm9yKHZhciBJPTAsSD0iIixaPSIiO0k8eC5sZW5ndGg7KXN3aXRjaChIPXguY2hhckF0KEkpKXtjYXNlIkciOmYoeCxJKSYmKEkrPTYpLEkrKzticmVhaztjYXNlJyInOmZvcig7eC5jaGFyQ29kZUF0KCsrSSkhPT0zNCYmSTx4Lmxlbmd0aDspOysrSTticmVhaztjYXNlIlxcIjpJKz0yO2JyZWFrO2Nhc2UiXyI6SSs9MjticmVhaztjYXNlIkAiOisrSTticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoeC5jaGFyQXQoSSsxKT09PSIxInx8eC5jaGFyQXQoSSsxKT09PSIyIilyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIuS4iiI6aWYoeC5zdWJzdHIoSSwzKS50b1VwcGVyQ2FzZSgpPT09IkEvUCJ8fHguc3Vic3RyKEksNSkudG9VcHBlckNhc2UoKT09PSJBTS9QTSJ8fHguc3Vic3RyKEksNSkudG9VcHBlckNhc2UoKT09PSLkuIrljYgv5LiL5Y2IIilyZXR1cm4hMDsrK0k7YnJlYWs7Y2FzZSJbIjpmb3IoWj1IO3guY2hhckF0KEkrKykhPT0iXSImJkk8eC5sZW5ndGg7KVorPXguY2hhckF0KEkpO2lmKFoubWF0Y2goTSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtJPHgubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihIPXguY2hhckF0KCsrSSkpPi0xfHxIPT0iXFwiJiZ4LmNoYXJBdChJKzEpPT0iLSImJiIwIyIuaW5kZXhPZih4LmNoYXJBdChJKzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7eC5jaGFyQXQoKytJKT09PUg7KTticmVhaztjYXNlIioiOisrSSwoeC5jaGFyQXQoSSk9PSIgInx8eC5jaGFyQXQoSSk9PSIqIikmJisrSTticmVhaztjYXNlIigiOmNhc2UiKSI6KytJO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7STx4Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoeC5jaGFyQXQoKytJKSk+LTE7KTticmVhaztjYXNlIiAiOisrSTticmVhaztkZWZhdWx0OisrSTticmVha31yZXR1cm4hMX1rLmlzX2RhdGU9TztmdW5jdGlvbiBSKHgsSSxILFope2Zvcih2YXIgVj1bXSxLPSIiLFk9MCxKPSIiLHE9InQiLEcsUSxydCxzdD0iSCI7WTx4Lmxlbmd0aDspc3dpdGNoKEo9eC5jaGFyQXQoWSkpe2Nhc2UiRyI6aWYoIWYoeCxZKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitKKyIgaW4gIit4KTtWW1YubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LFkrPTc7YnJlYWs7Y2FzZSciJzpmb3IoSz0iIjsocnQ9eC5jaGFyQ29kZUF0KCsrWSkpIT09MzQmJlk8eC5sZW5ndGg7KUsrPVN0cmluZy5mcm9tQ2hhckNvZGUocnQpO1ZbVi5sZW5ndGhdPXt0OiJ0Iix2Okt9LCsrWTticmVhaztjYXNlIlxcIjp2YXIgb3Q9eC5jaGFyQXQoKytZKSxodD1vdD09PSIoInx8b3Q9PT0iKSI/b3Q6InQiO1ZbVi5sZW5ndGhdPXt0Omh0LHY6b3R9LCsrWTticmVhaztjYXNlIl8iOlZbVi5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0sWSs9MjticmVhaztjYXNlIkAiOlZbVi5sZW5ndGhdPXt0OiJUIix2Okl9LCsrWTticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoeC5jaGFyQXQoWSsxKT09PSIxInx8eC5jaGFyQXQoWSsxKT09PSIyIil7aWYoRz09bnVsbCYmKEc9TChJLEgseC5jaGFyQXQoWSsxKT09PSIyIiksRz09bnVsbCkpcmV0dXJuIiI7VltWLmxlbmd0aF09e3Q6IlgiLHY6eC5zdWJzdHIoWSwyKX0scT1KLFkrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Sj1KLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjppZihJPDB8fEc9PW51bGwmJihHPUwoSSxIKSxHPT1udWxsKSlyZXR1cm4iIjtmb3IoSz1KOysrWTx4Lmxlbmd0aCYmeC5jaGFyQXQoWSkudG9Mb3dlckNhc2UoKT09PUo7KUsrPUo7Sj09PSJtIiYmcS50b0xvd2VyQ2FzZSgpPT09ImgiJiYoSj0iTSIpLEo9PT0iaCImJihKPXN0KSxWW1YubGVuZ3RoXT17dDpKLHY6S30scT1KO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIuS4iiI6dmFyIGR0PXt0OkosdjpKfTtpZihHPT1udWxsJiYoRz1MKEksSCkpLHguc3Vic3RyKFksMykudG9VcHBlckNhc2UoKT09PSJBL1AiPyhHIT1udWxsJiYoZHQudj1HLkg+PTEyPyJQIjoiQSIpLGR0LnQ9IlQiLHN0PSJoIixZKz0zKTp4LnN1YnN0cihZLDUpLnRvVXBwZXJDYXNlKCk9PT0iQU0vUE0iPyhHIT1udWxsJiYoZHQudj1HLkg+PTEyPyJQTSI6IkFNIiksZHQudD0iVCIsWSs9NSxzdD0iaCIpOnguc3Vic3RyKFksNSkudG9VcHBlckNhc2UoKT09PSLkuIrljYgv5LiL5Y2IIj8oRyE9bnVsbCYmKGR0LnY9Ry5IPj0xMj8i5LiL5Y2IIjoi5LiK5Y2IIiksZHQudD0iVCIsWSs9NSxzdD0iaCIpOihkdC50PSJ0IiwrK1kpLEc9PW51bGwmJmR0LnQ9PT0iVCIpcmV0dXJuIiI7VltWLmxlbmd0aF09ZHQscT1KO2JyZWFrO2Nhc2UiWyI6Zm9yKEs9Sjt4LmNoYXJBdChZKyspIT09Il0iJiZZPHgubGVuZ3RoOylLKz14LmNoYXJBdChZKTtpZihLLnNsaWNlKC0xKSE9PSJdIil0aHJvdyd1bnRlcm1pbmF0ZWQgIlsiIGJsb2NrOiB8JytLKyJ8IjtpZihLLm1hdGNoKE0pKXtpZihHPT1udWxsJiYoRz1MKEksSCksRz09bnVsbCkpcmV0dXJuIiI7VltWLmxlbmd0aF09e3Q6IloiLHY6Sy50b0xvd2VyQ2FzZSgpfSxxPUsuY2hhckF0KDEpfWVsc2UgSy5pbmRleE9mKCIkIik+LTEmJihLPShLLm1hdGNoKC9cJChbXi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLE8oeCl8fChWW1YubGVuZ3RoXT17dDoidCIsdjpLfSkpO2JyZWFrO2Nhc2UiLiI6aWYoRyE9bnVsbCl7Zm9yKEs9SjsrK1k8eC5sZW5ndGgmJihKPXguY2hhckF0KFkpKT09PSIwIjspSys9SjtWW1YubGVuZ3RoXT17dDoicyIsdjpLfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKEs9SjsrK1k8eC5sZW5ndGgmJiIwIz8uLEUrLSUiLmluZGV4T2YoSj14LmNoYXJBdChZKSk+LTE7KUsrPUo7VltWLmxlbmd0aF09e3Q6Im4iLHY6S307YnJlYWs7Y2FzZSI/Ijpmb3IoSz1KO3guY2hhckF0KCsrWSk9PT1KOylLKz1KO1ZbVi5sZW5ndGhdPXt0OkosdjpLfSxxPUo7YnJlYWs7Y2FzZSIqIjorK1ksKHguY2hhckF0KFkpPT0iICJ8fHguY2hhckF0KFkpPT0iKiIpJiYrK1k7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOlZbVi5sZW5ndGhdPXt0Olo9PT0xPyJ0IjpKLHY6Sn0sKytZO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihLPUo7WTx4Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoeC5jaGFyQXQoKytZKSk+LTE7KUsrPXguY2hhckF0KFkpO1ZbVi5sZW5ndGhdPXt0OiJEIix2Okt9O2JyZWFrO2Nhc2UiICI6VltWLmxlbmd0aF09e3Q6Six2Okp9LCsrWTticmVhaztjYXNlIiQiOlZbVi5sZW5ndGhdPXt0OiJ0Iix2OiIkIn0sKytZO2JyZWFrO2RlZmF1bHQ6aWYoIiwkLSsvKCk6IV4mJ357fTw+PeKCrGFjZmlqa2xvcHFydHV2d3h6UCIuaW5kZXhPZihKKT09PS0xKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK0orIiBpbiAiK3gpO1ZbVi5sZW5ndGhdPXt0OiJ0Iix2Okp9LCsrWTticmVha312YXIgbXQ9MCxNdD0wLEN0O2ZvcihZPVYubGVuZ3RoLTEscT0idCI7WT49MDstLVkpc3dpdGNoKFZbWV0udCl7Y2FzZSJoIjpjYXNlIkgiOlZbWV0udD1zdCxxPSJoIixtdDwxJiYobXQ9MSk7YnJlYWs7Y2FzZSJzIjooQ3Q9VltZXS52Lm1hdGNoKC9cLjArJC8pKSYmKE10PU1hdGgubWF4KE10LEN0WzBdLmxlbmd0aC0xKSksbXQ8MyYmKG10PTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6cT1WW1ldLnQ7YnJlYWs7Y2FzZSJtIjpxPT09InMiJiYoVltZXS50PSJNIixtdDwyJiYobXQ9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjptdDwxJiZWW1ldLnYubWF0Y2goL1tIaF0vKSYmKG10PTEpLG10PDImJlZbWV0udi5tYXRjaCgvW01tXS8pJiYobXQ9MiksbXQ8MyYmVltZXS52Lm1hdGNoKC9bU3NdLykmJihtdD0zKX1zd2l0Y2gobXQpe2Nhc2UgMDpicmVhaztjYXNlIDE6Ry51Pj0uNSYmKEcudT0wLCsrRy5TKSxHLlM+PTYwJiYoRy5TPTAsKytHLk0pLEcuTT49NjAmJihHLk09MCwrK0cuSCk7YnJlYWs7Y2FzZSAyOkcudT49LjUmJihHLnU9MCwrK0cuUyksRy5TPj02MCYmKEcuUz0wLCsrRy5NKTticmVha312YXIgX3Q9IiIseXQ7Zm9yKFk9MDtZPFYubGVuZ3RoOysrWSlzd2l0Y2goVltZXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6VltZXS52PSIiLFZbWV0udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpWW1ldLnY9cChWW1ldLnQuY2hhckNvZGVBdCgwKSxWW1ldLnYsRyxNdCksVltZXS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKHl0PVkrMTtWW3l0XSE9bnVsbCYmKChKPVZbeXRdLnQpPT09Ij8ifHxKPT09IkQifHwoSj09PSIgInx8Sj09PSJ0IikmJlZbeXQrMV0hPW51bGwmJihWW3l0KzFdLnQ9PT0iPyJ8fFZbeXQrMV0udD09PSJ0IiYmVlt5dCsxXS52PT09Ii8iKXx8VltZXS50PT09IigiJiYoSj09PSIgInx8Sj09PSJuInx8Sj09PSIpIil8fEo9PT0idCImJihWW3l0XS52PT09Ii8ifHxWW3l0XS52PT09IiAiJiZWW3l0KzFdIT1udWxsJiZWW3l0KzFdLnQ9PSI/IikpOylWW1ldLnYrPVZbeXRdLnYsVlt5dF09e3Y6IiIsdDoiOyJ9LCsreXQ7X3QrPVZbWV0udixZPXl0LTE7YnJlYWs7Y2FzZSJHIjpWW1ldLnQ9InQiLFZbWV0udj1DKEksSCk7YnJlYWt9dmFyIGN0PSIiLGV0LGl0O2lmKF90Lmxlbmd0aD4wKXtfdC5jaGFyQ29kZUF0KDApPT00MD8oZXQ9STwwJiZfdC5jaGFyQ29kZUF0KDApPT09NDU/LUk6SSxpdD1nKCJuIixfdCxldCkpOihldD1JPDAmJlo+MT8tSTpJLGl0PWcoIm4iLF90LGV0KSxldDwwJiZWWzBdJiZWWzBdLnQ9PSJ0IiYmKGl0PWl0LnN1YnN0cigxKSxWWzBdLnY9Ii0iK1ZbMF0udikpLHl0PWl0Lmxlbmd0aC0xO3ZhciBwdD1WLmxlbmd0aDtmb3IoWT0wO1k8Vi5sZW5ndGg7KytZKWlmKFZbWV0hPW51bGwmJlZbWV0udCE9InQiJiZWW1ldLnYuaW5kZXhPZigiLiIpPi0xKXtwdD1ZO2JyZWFrfXZhciBhdD1WLmxlbmd0aDtpZihwdD09PVYubGVuZ3RoJiZpdC5pbmRleE9mKCJFIik9PT0tMSl7Zm9yKFk9Vi5sZW5ndGgtMTtZPj0wOy0tWSlWW1ldPT1udWxsfHwibj8iLmluZGV4T2YoVltZXS50KT09PS0xfHwoeXQ+PVZbWV0udi5sZW5ndGgtMT8oeXQtPVZbWV0udi5sZW5ndGgsVltZXS52PWl0LnN1YnN0cih5dCsxLFZbWV0udi5sZW5ndGgpKTp5dDwwP1ZbWV0udj0iIjooVltZXS52PWl0LnN1YnN0cigwLHl0KzEpLHl0PS0xKSxWW1ldLnQ9InQiLGF0PVkpO3l0Pj0wJiZhdDxWLmxlbmd0aCYmKFZbYXRdLnY9aXQuc3Vic3RyKDAseXQrMSkrVlthdF0udil9ZWxzZSBpZihwdCE9PVYubGVuZ3RoJiZpdC5pbmRleE9mKCJFIik9PT0tMSl7Zm9yKHl0PWl0LmluZGV4T2YoIi4iKS0xLFk9cHQ7WT49MDstLVkpaWYoIShWW1ldPT1udWxsfHwibj8iLmluZGV4T2YoVltZXS50KT09PS0xKSl7Zm9yKFE9VltZXS52LmluZGV4T2YoIi4iKT4tMSYmWT09PXB0P1ZbWV0udi5pbmRleE9mKCIuIiktMTpWW1ldLnYubGVuZ3RoLTEsY3Q9VltZXS52LnN1YnN0cihRKzEpO1E+PTA7LS1RKXl0Pj0wJiYoVltZXS52LmNoYXJBdChRKT09PSIwInx8VltZXS52LmNoYXJBdChRKT09PSIjIikmJihjdD1pdC5jaGFyQXQoeXQtLSkrY3QpO1ZbWV0udj1jdCxWW1ldLnQ9InQiLGF0PVl9Zm9yKHl0Pj0wJiZhdDxWLmxlbmd0aCYmKFZbYXRdLnY9aXQuc3Vic3RyKDAseXQrMSkrVlthdF0udikseXQ9aXQuaW5kZXhPZigiLiIpKzEsWT1wdDtZPFYubGVuZ3RoOysrWSlpZighKFZbWV09PW51bGx8fCJuPygiLmluZGV4T2YoVltZXS50KT09PS0xJiZZIT09cHQpKXtmb3IoUT1WW1ldLnYuaW5kZXhPZigiLiIpPi0xJiZZPT09cHQ/VltZXS52LmluZGV4T2YoIi4iKSsxOjAsY3Q9VltZXS52LnN1YnN0cigwLFEpO1E8VltZXS52Lmxlbmd0aDsrK1EpeXQ8aXQubGVuZ3RoJiYoY3QrPWl0LmNoYXJBdCh5dCsrKSk7VltZXS52PWN0LFZbWV0udD0idCIsYXQ9WX19fWZvcihZPTA7WTxWLmxlbmd0aDsrK1kpVltZXSE9bnVsbCYmIm4/Ii5pbmRleE9mKFZbWV0udCk+LTEmJihldD1aPjEmJkk8MCYmWT4wJiZWW1ktMV0udj09PSItIj8tSTpJLFZbWV0udj1nKFZbWV0udCxWW1ldLnYsZXQpLFZbWV0udD0idCIpO3ZhciBsdD0iIjtmb3IoWT0wO1khPT1WLmxlbmd0aDsrK1kpVltZXSE9bnVsbCYmKGx0Kz1WW1ldLnYpO3JldHVybiBsdH1rLl9ldmFsPVI7dmFyIHo9L1xbWz08Pl0vLCQ9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIFgoeCxJKXtpZihJPT1udWxsKXJldHVybiExO3ZhciBIPXBhcnNlRmxvYXQoSVsyXSk7c3dpdGNoKElbMV0pe2Nhc2UiPSI6aWYoeD09SClyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKHg+SClyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKHg8SClyZXR1cm4hMDticmVhaztjYXNlIjw+IjppZih4IT1IKXJldHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKHg+PUgpcmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYoeDw9SClyZXR1cm4hMDticmVha31yZXR1cm4hMX1mdW5jdGlvbiBqKHgsSSl7dmFyIEg9eSh4KSxaPUgubGVuZ3RoLFY9SFtaLTFdLmluZGV4T2YoIkAiKTtpZihaPDQmJlY+LTEmJi0tWixILmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IitILmpvaW4oInwiKSsifCIpO2lmKHR5cGVvZiBJIT0ibnVtYmVyIilyZXR1cm5bNCxILmxlbmd0aD09PTR8fFY+LTE/SFtILmxlbmd0aC0xXToiQCJdO3N3aXRjaChILmxlbmd0aCl7Y2FzZSAxOkg9Vj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsSFswXV06W0hbMF0sSFswXSxIWzBdLCJAIl07YnJlYWs7Y2FzZSAyOkg9Vj4tMT9bSFswXSxIWzBdLEhbMF0sSFsxXV06W0hbMF0sSFsxXSxIWzBdLCJAIl07YnJlYWs7Y2FzZSAzOkg9Vj4tMT9bSFswXSxIWzFdLEhbMF0sSFsyXV06W0hbMF0sSFsxXSxIWzJdLCJAIl07YnJlYWt9dmFyIEs9ST4wP0hbMF06STwwP0hbMV06SFsyXTtpZihIWzBdLmluZGV4T2YoIlsiKT09PS0xJiZIWzFdLmluZGV4T2YoIlsiKT09PS0xKXJldHVybltaLEtdO2lmKEhbMF0ubWF0Y2goeikhPW51bGx8fEhbMV0ubWF0Y2goeikhPW51bGwpe3ZhciBZPUhbMF0ubWF0Y2goJCksSj1IWzFdLm1hdGNoKCQpO3JldHVybiBYKEksWSk/W1osSFswXV06WChJLEopP1taLEhbMV1dOltaLEhbWSE9bnVsbCYmSiE9bnVsbD8yOjFdXX1yZXR1cm5bWixLXX1mdW5jdGlvbiBXKHgsSSxIKXtIPT1udWxsJiYoSD17fSk7dmFyIFo9IiI7c3dpdGNoKHR5cGVvZiB4KXtjYXNlInN0cmluZyI6eD09Im0vZC95eSImJkguZGF0ZU5GP1o9SC5kYXRlTkY6Wj14O2JyZWFrO2Nhc2UibnVtYmVyIjp4PT0xNCYmSC5kYXRlTkY/Wj1ILmRhdGVORjpaPShILnRhYmxlIT1udWxsP0gudGFibGU6aClbeF0sWj09bnVsbCYmKFo9SC50YWJsZSYmSC50YWJsZVt3W3hdXXx8aFt3W3hdXSksWj09bnVsbCYmKFo9QVt4XXx8IkdlbmVyYWwiKTticmVha31pZihmKFosMCkpcmV0dXJuIEMoSSxIKTtJIGluc3RhbmNlb2YgRGF0ZSYmKEk9VShJLEguZGF0ZTE5MDQpKTt2YXIgVj1qKFosSSk7aWYoZihWWzFdKSlyZXR1cm4gQyhJLEgpO2lmKEk9PT0hMClJPSJUUlVFIjtlbHNlIGlmKEk9PT0hMSlJPSJGQUxTRSI7ZWxzZSBpZihJPT09IiJ8fEk9PW51bGwpcmV0dXJuIiI7cmV0dXJuIFIoVlsxXSxJLEgsVlswXSl9ZnVuY3Rpb24gVCh4LEkpe2lmKHR5cGVvZiBJIT0ibnVtYmVyIil7ST0rSXx8LTE7Zm9yKHZhciBIPTA7SDwzOTI7KytIKXtpZihoW0hdPT1udWxsKXtJPDAmJihJPUgpO2NvbnRpbnVlfWlmKGhbSF09PXgpe0k9SDticmVha319STwwJiYoST0zOTEpfXJldHVybiBoW0ldPXgsSX1rLmxvYWQ9VCxrLl90YWJsZT1oLGsuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGh9LGsubG9hZF90YWJsZT1mdW5jdGlvbihJKXtmb3IodmFyIEg9MDtIIT0zOTI7KytIKUlbSF0hPT12b2lkIDAmJlQoSVtIXSxIKX0say5pbml0X3RhYmxlPWQsay5mb3JtYXQ9V307YShuZSksdHlwZW9mIERPX05PVF9FWFBPUlRfU1NGPiJ1IiYmKE90LmV4cG9ydHM9bmUpfSkoVmUpO3ZhciB0cj1WZS5leHBvcnRzO2NvbnN0IGVyPTFlNSxycj0xZTUsbnI9MWU0O2Z1bmN0aW9uIFdlKE90KXtyZXR1cm4gT3QmJi9eKD86W1xkYS1mXXsyfSk/W1xkYS1mXXs2fSQvaS50ZXN0KE90KT9gIyR7T3Quc2xpY2UoLTYpfWA6dm9pZCAwfWZ1bmN0aW9uIHFlKE90LG5lLGEpe2lmKE90PT1udWxsKXJldHVybiIiO2lmKHR5cGVvZiBPdD09Im9iamVjdCImJiJlcnJvciJpbiBPdClyZXR1cm4gT3QuZXJyb3I7aWYodHlwZW9mIE90PT0ib2JqZWN0IiYmInJpY2hUZXh0ImluIE90KXJldHVybiBPdC5yaWNoVGV4dC5tYXAoRT0+RS50ZXh0KS5qb2luKCIiKTtpZih0eXBlb2YgT3Q9PSJvYmplY3QiJiYiaHlwZXJsaW5rImluIE90KXJldHVybiBxZShPdC50ZXh0LG5lLGEpO2lmKHR5cGVvZiBPdD09ImJvb2xlYW4iKXJldHVybiBPdD8iVFJVRSI6IkZBTFNFIjtpZih0eXBlb2YgT3Q9PSJudW1iZXIifHxPdCBpbnN0YW5jZW9mIERhdGUpe2NvbnN0IEU9T3QgaW5zdGFuY2VvZiBEYXRlPzI1NTY5K090LmdldFRpbWUoKS84NjRlNS0oYT8xNDYyOjApOk90O3RyeXtyZXR1cm4gdHIuZm9ybWF0KG5lfHwoT3QgaW5zdGFuY2VvZiBEYXRlPyJ5eXl5LW1tLWRkIjoiR2VuZXJhbCIpLEUse2RhdGUxOTA0OmF9KX1jYXRjaHtyZXR1cm4gT3QgaW5zdGFuY2VvZiBEYXRlP090LnRvSVNPU3RyaW5nKCk6U3RyaW5nKE90KX19cmV0dXJuIHR5cGVvZiBPdD09InN0cmluZyI/T3Q6IiJ9ZnVuY3Rpb24gWGUoT3QsbmUpe2NvbnN0IGE9T3QuZm9ybXVsYSxFPU90LnR5cGU9PT1PZS5WYWx1ZVR5cGUuRm9ybXVsYT9PdC5yZXN1bHQ6T3QudmFsdWUsaz1PdC5hbGlnbm1lbnQ/Lmhvcml6b250YWwsbT1PdC5maWxsLHM9V2UoT3QuZm9udD8uY29sb3I/LmFyZ2IpLG89bT8udHlwZT09PSJwYXR0ZXJuIiYmbS5wYXR0ZXJuPT09InNvbGlkIj9XZShtLmZnQ29sb3I/LmFyZ2IpOnZvaWQgMCxyPSFzJiYhIW98fG0mJiEobS50eXBlPT09InBhdHRlcm4iJiZtLnBhdHRlcm49PT0ibm9uZSIpJiYhbztyZXR1cm57dGV4dDpxZShFLE90Lm51bUZtdCxuZSksLi4uYT97Zm9ybXVsYTphLHVuY2FsY3VsYXRlZDpFPT1udWxsfTp7fSxzdHlsZTp7Zm9udFdlaWdodDpPdC5mb250Py5ib2xkPyJib2xkIjp2b2lkIDAsZm9udFN0eWxlOk90LmZvbnQ/Lml0YWxpYz8iaXRhbGljIjp2b2lkIDAsY29sb3I6cj92b2lkIDA6cyxiYWNrZ3JvdW5kQ29sb3I6cj92b2lkIDA6byx0ZXh0QWxpZ246az09PSJsZWZ0Inx8az09PSJjZW50ZXIifHxrPT09InJpZ2h0Inx8az09PSJqdXN0aWZ5Ij9rOnZvaWQgMH19fWZ1bmN0aW9uIFplKE90KXtjb25zdCBuZT0vXlwkPyhbQS1aXSspXCQ/KFsxLTldXGQqKSQvaS5leGVjKE90KTtpZighbmUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1lcmdlZCBjZWxsIGFkZHJlc3MuIik7bGV0IGE9MDtmb3IoY29uc3QgayBvZiBuZVsxXS50b1VwcGVyQ2FzZSgpKWE9YSoyNitrLmNoYXJDb2RlQXQoMCktNjQ7Y29uc3QgRT1OdW1iZXIobmVbMl0pO2lmKEU+MTA0ODU3Nnx8YT4xNjM4NCl0aHJvdyBuZXcgRXJyb3IoIk1lcmdlZCBjZWxsIGFkZHJlc3MgaXMgb3V0c2lkZSB0aGUgd29ya3NoZWV0LiIpO3JldHVybntyb3c6RS0xLGNvbHVtbjphLTF9fWNvbnN0IFVlPW5ldyBXZWFrTWFwO2xldCBZZT0hMTtmdW5jdGlvbiBpcigpe2lmKFllKXJldHVybjtjb25zdCBPdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IE9lLldvcmtib29rKCkuYWRkV29ya3NoZWV0KCJndWFyZCIpKSxuZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE90LCJtb2RlbCIpLGE9bmUuc2V0O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPdCwibW9kZWwiLHsuLi5uZSxzZXQoRSl7Y29uc3Qgaz1VZS5nZXQodGhpcy53b3JrYm9vayk7aWYoayl7Zm9yKGNvbnN0IHMgb2YgRS5jb2xzPz9bXSlpZighTnVtYmVyLmlzSW50ZWdlcihzLm1pbil8fCFOdW1iZXIuaXNJbnRlZ2VyKHMubWF4KXx8cy5taW48MXx8cy5tYXg8cy5taW58fHMubWF4PjE2Mzg0KXRocm93IG5ldyBSYW5nZUVycm9yKCJDb2x1bW4gZGVmaW5pdGlvbnMgYXJlIG91dHNpZGUgdGhlIHdvcmtzaGVldC4iKTtjb25zdCBtPUUubWVyZ2VDZWxscz8/W107aWYoay5jb3VudCs9bS5sZW5ndGgsay5jb3VudD5ucil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVG9vIG1hbnkgbWVyZ2VkIHJhbmdlcyB0byBwcmV2aWV3LiIpO2Zvcihjb25zdCBzIG9mIG0pe2NvbnN0IG89cy5zcGxpdCgiOiIpO2lmKG8ubGVuZ3RoPjIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1lcmdlZCByYW5nZS4iKTtjb25zdCByPVplKG9bMF0pLHQ9WmUob1sxXT8/b1swXSk7aWYoay5jZWxscys9KE1hdGguYWJzKHQucm93LXIucm93KSsxKSooTWF0aC5hYnModC5jb2x1bW4tci5jb2x1bW4pKzEpLGsuY2VsbHM+cnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1lcmdlZCByYW5nZXMgYXJlIHRvbyBsYXJnZSB0byBwcmV2aWV3LiIpfX1hLmNhbGwodGhpcyxFKX19KSxZZT0hMH1hc3luYyBmdW5jdGlvbiBzcihPdCl7aXIoKTtjb25zdCBuZT1uZXcgT2UuV29ya2Jvb2s7VWUuc2V0KG5lLHtjZWxsczowLGNvdW50OjB9KTt0cnl7cmV0dXJuIGF3YWl0IG5lLnhsc3gubG9hZChPdCl9ZmluYWxseXtVZS5kZWxldGUobmUpfX1mdW5jdGlvbiBhcihPdCl7cmV0dXJue3NoZWV0TmFtZXM6T3Qud29ya3NoZWV0cy5tYXAobmU9Pm5lLm5hbWUpfX1mdW5jdGlvbiBvcihPdCxuZSl7aWYoIU51bWJlci5pc0ludGVnZXIobmUpfHxuZTwwfHxuZT49T3Qud29ya3NoZWV0cy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIldvcmtzaGVldCBpbmRleCBpcyBvdXRzaWRlIHRoZSBwcmV2aWV3IHJhbmdlLiIpO2NvbnN0IGE9T3Qud29ya3NoZWV0c1tuZV07bGV0IEU9MCxrPTA7Zm9yKGNvbnN0IHMgb2YgT2JqZWN0LnZhbHVlcyhhLl9yb3dzKSlpZihzKWZvcihjb25zdCBvIG9mIE9iamVjdC52YWx1ZXMocy5fY2VsbHMpKSFvfHxvLnR5cGU9PT1PZS5WYWx1ZVR5cGUuTnVsbHx8KGs9TWF0aC5tYXgoayxzLm51bWJlciksRT1NYXRoLm1heChFLE51bWJlcihvLmNvbCkpKTtjb25zdCBtPUU9PT0wPzA6TWF0aC5taW4oayxNYXRoLmZsb29yKGVyL0UpKTtyZXR1cm57bmFtZTphLm5hbWUsY29sdW1uczpFLHRydW5jYXRlZDpFPjAmJms+bSxyb3dzOkFycmF5LmZyb20oe2xlbmd0aDptfSwocyxvKT0+QXJyYXkuZnJvbSh7bGVuZ3RoOkV9LChyLHQpPT57Y29uc3QgZT1hLmZpbmRSb3cobysxKT8uZmluZENlbGwodCsxKTtyZXR1cm4gZSYmZS50eXBlIT09T2UuVmFsdWVUeXBlLk51bGwmJiFlLmlzTWVyZ2VkfHxlPy5pc01lcmdlZCYmZS5tYXN0ZXIuYWRkcmVzcz09PWUuYWRkcmVzcz9YZShlLE90LnByb3BlcnRpZXMuZGF0ZTE5MDQpOm51bGx9KSksbWVyZ2VzOk9iamVjdC52YWx1ZXMoYS5fbWVyZ2VzKS5tYXAocz0+KHt0b3A6cy50b3AtMSxsZWZ0OnMubGVmdC0xLGJvdHRvbTpzLmJvdHRvbS0xLHJpZ2h0OnMucmlnaHQtMX0pKS5maWx0ZXIocz0+cy50b3A8bSYmcy5sZWZ0PEUpfX1sZXQgUmU7c2VsZi5vbm1lc3NhZ2U9YXN5bmMgT3Q9PntsZXQgbmU7dHJ5e2lmKE90LmRhdGEudHlwZT09PSJsb2FkIilSZT12b2lkIDAsUmU9YXdhaXQgc3IoT3QuZGF0YS5kYXRhKSxuZT17dHlwZToibG9hZGVkIix3b3JrYm9vazphcihSZSl9O2Vsc2V7aWYoIVJlKXRocm93IG5ldyBFcnJvcigiV29ya2Jvb2sgaXMgbm90IGxvYWRlZC4iKTtuZT17dHlwZToic2hlZXQiLGluZGV4Ok90LmRhdGEuaW5kZXgsc2hlZXQ6b3IoUmUsT3QuZGF0YS5pbmRleCl9fX1jYXRjaHtuZT17dHlwZToiZXJyb3IifX1zZWxmLnBvc3RNZXNzYWdlKG5lKX19KSgpOwo=", iZ = (l) => Uint8Array.from(atob(l), (b) => b.charCodeAt(0)), A = typeof self < "u" && self.Blob && new Blob([iZ(q)], { type: "text/javascript;charset=utf-8" });
|
|
7
7
|
function LZ(l) {
|
|
8
8
|
let b;
|