@takodotid/circuit 0.43.1 → 1.0.0-rc.2
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/README.md +115 -37
- package/package.json +21 -58
- package/src/checks/across.ts +402 -0
- package/src/checks/built-in.ts +256 -0
- package/src/checks/device.ts +436 -0
- package/src/checks/index.ts +53 -0
- package/src/cli/advisories.ts +108 -0
- package/src/cli/app.ts +71 -0
- package/src/cli/editor-types.generated.ts +30 -0
- package/src/cli/editor-types.ts +69 -0
- package/src/cli/format.ts +124 -0
- package/src/cli/git-hooks.ts +79 -0
- package/src/cli/index.ts +350 -1170
- package/src/cli/migrate.ts +554 -0
- package/src/cli/project-commands.ts +656 -0
- package/src/cli/releases.ts +374 -0
- package/src/cli/remember.ts +339 -0
- package/src/cli/rename.ts +27 -33
- package/src/cli/secrets-password.ts +60 -0
- package/src/cli/secrets.ts +258 -0
- package/src/cli/setup.ts +300 -0
- package/src/cli/signing.ts +23 -0
- package/src/cli/text-editor.ts +268 -0
- package/src/cli/ui.ts +298 -0
- package/src/cli/version.ts +2 -0
- package/src/cli/versions.ts +158 -0
- package/src/config/address.ts +102 -0
- package/src/config/circuit.d.ts +30 -0
- package/src/config/common.ts +65 -0
- package/src/config/communities.ts +479 -0
- package/src/config/define.ts +684 -0
- package/src/config/device.ts +164 -0
- package/src/config/firewall.ts +150 -0
- package/src/config/index.ts +22 -0
- package/src/{schema → config}/interfaces.ts +121 -85
- package/src/config/keys.ts +434 -0
- package/src/config/management.ts +61 -0
- package/src/config/merge.ts +335 -0
- package/src/config/models.ts +70 -0
- package/src/config/monitoring.ts +64 -0
- package/src/config/network.ts +180 -0
- package/src/config/presets.ts +149 -0
- package/src/config/routing.ts +401 -0
- package/src/config/services.ts +51 -0
- package/src/config/switching.ts +84 -0
- package/src/config/system.ts +103 -0
- package/src/{schema → config}/time-zones.ts +1 -1
- package/src/core/address.ts +1 -1
- package/src/core/cabling.ts +8 -43
- package/src/core/graph.ts +40 -0
- package/src/{integrations → core}/registries.ts +5 -3
- package/src/core/secrets-file.ts +539 -0
- package/src/core/secrets.ts +83 -64
- package/src/core/topology.ts +103 -146
- package/src/core/utils.ts +12 -1
- package/src/model.ts +83 -0
- package/src/platforms/derive.ts +64 -37
- package/src/platforms/finding.ts +9 -0
- package/src/platforms/fortios/firewall.ts +76 -64
- package/src/platforms/fortios/index.ts +189 -125
- package/src/platforms/fortios/names.ts +51 -18
- package/src/platforms/fortios/render.ts +69 -62
- package/src/platforms/fortios/routing.ts +89 -58
- package/src/platforms/fortios/vdoms.ts +47 -16
- package/src/platforms/junos/TRAPS.md +2 -2
- package/src/platforms/junos/bgp.ts +63 -42
- package/src/platforms/junos/index.ts +122 -89
- package/src/platforms/junos/render.ts +139 -104
- package/src/platforms/platform.ts +10 -8
- package/src/platforms/raisecom-ros/TRAPS.md +1 -1
- package/src/platforms/raisecom-ros/index.ts +89 -70
- package/src/platforms/raisecom-ros/render.ts +49 -45
- package/src/platforms/routeros/TRAPS.md +3 -3
- package/src/platforms/routeros/index.ts +121 -60
- package/src/platforms/routeros/render.ts +214 -195
- package/src/platforms/vrp/TRAPS.md +1 -1
- package/src/platforms/vrp/index.ts +74 -50
- package/src/platforms/vrp/render.ts +67 -56
- package/src/project/project.ts +725 -0
- package/src/studio/app/env.d.ts +9 -0
- package/src/studio/app/index.html +18 -0
- package/src/studio/app/src/App.vue +95 -0
- package/src/studio/app/src/components/AddressesView.vue +38 -0
- package/src/studio/app/src/components/CablesView.vue +29 -0
- package/src/studio/app/src/components/CompareView.vue +160 -0
- package/src/studio/app/src/components/DataTable.vue +49 -0
- package/src/studio/app/src/components/DeviceView.vue +237 -0
- package/src/studio/app/src/components/DevicesView.vue +32 -0
- package/src/studio/app/src/components/Faceplate.vue +75 -0
- package/src/studio/app/src/components/GraphView.vue +282 -0
- package/src/studio/app/src/components/LineDiff.vue +24 -0
- package/src/studio/app/src/components/ProblemsView.vue +42 -0
- package/src/studio/app/src/components/SearchView.vue +72 -0
- package/src/studio/app/src/components/SecretsView.vue +112 -0
- package/src/studio/app/src/components/SessionsView.vue +35 -0
- package/src/studio/app/src/components/Settings.vue +95 -0
- package/src/studio/app/src/components/ToolsView.vue +118 -0
- package/src/studio/app/src/components/VlansView.vue +50 -0
- package/src/studio/app/src/lib/csv.ts +19 -0
- package/src/studio/{public/diff.js → app/src/lib/diff.ts} +40 -35
- package/src/studio/app/src/lib/format.ts +38 -0
- package/src/studio/app/src/lib/net.ts +68 -0
- package/src/studio/app/src/lib/secrets-crypto.ts +35 -0
- package/src/studio/app/src/lib/store.ts +71 -0
- package/src/studio/app/src/lib/tools.ts +217 -0
- package/src/studio/app/src/main.ts +9 -0
- package/src/studio/{public → app/src}/style.css +14 -4
- package/src/studio/app/tsconfig.json +17 -0
- package/src/studio/app/vite.config.ts +16 -0
- package/src/studio/assets.generated.ts +3 -0
- package/src/studio/data.ts +96 -188
- package/src/studio/git.ts +27 -43
- package/src/studio/server.ts +196 -107
- package/src/studio/types.ts +141 -0
- package/src/transport/console.ts +3 -3
- package/src/transport/ssh.ts +1 -1
- package/dist/chunks/index-3b343xva.js +0 -177
- package/dist/chunks/index-6wb41q67.js +0 -62
- package/dist/chunks/index-n7w3tg5y.js +0 -149
- package/dist/chunks/index-yzw86rc8.js +0 -921
- package/dist/chunks/new-w3zys5y4.js +0 -172
- package/dist/chunks/server-cxr9ynxc.js +0 -259
- package/dist/cli/index.js +0 -12922
- package/dist/helpers/index.js +0 -881
- package/dist/index.js +0 -28
- package/dist/types/core/address-space.d.ts +0 -62
- package/dist/types/core/address.d.ts +0 -44
- package/dist/types/core/cabling.d.ts +0 -41
- package/dist/types/core/cross-checks.d.ts +0 -28
- package/dist/types/core/define.d.ts +0 -79
- package/dist/types/core/project-files.d.ts +0 -12
- package/dist/types/core/schema-docs.d.ts +0 -25
- package/dist/types/core/secrets.d.ts +0 -62
- package/dist/types/core/topology.d.ts +0 -96
- package/dist/types/core/utils.d.ts +0 -10
- package/dist/types/core/validator.d.ts +0 -23
- package/dist/types/helpers/bgp.d.ts +0 -195
- package/dist/types/helpers/cables.d.ts +0 -69
- package/dist/types/helpers/checks.d.ts +0 -36
- package/dist/types/helpers/exchange.d.ts +0 -55
- package/dist/types/helpers/filters.d.ts +0 -51
- package/dist/types/helpers/index.d.ts +0 -14
- package/dist/types/helpers/route-server.d.ts +0 -52
- package/dist/types/helpers/upstreams.d.ts +0 -192
- package/dist/types/index.d.ts +0 -10
- package/dist/types/integrations/librenms.d.ts +0 -60
- package/dist/types/integrations/netbox.d.ts +0 -89
- package/dist/types/integrations/peeringdb.d.ts +0 -24
- package/dist/types/integrations/prometheus.d.ts +0 -24
- package/dist/types/integrations/registries.d.ts +0 -8
- package/dist/types/platforms/bgp-wait.d.ts +0 -24
- package/dist/types/platforms/catalog.d.ts +0 -109
- package/dist/types/platforms/derive.d.ts +0 -17
- package/dist/types/platforms/fortios/firewall.d.ts +0 -47
- package/dist/types/platforms/fortios/index.d.ts +0 -140
- package/dist/types/platforms/fortios/models.d.ts +0 -14
- package/dist/types/platforms/fortios/names.d.ts +0 -52
- package/dist/types/platforms/fortios/plan.d.ts +0 -114
- package/dist/types/platforms/fortios/render.d.ts +0 -77
- package/dist/types/platforms/fortios/routing.d.ts +0 -56
- package/dist/types/platforms/fortios/tree.d.ts +0 -37
- package/dist/types/platforms/fortios/vdoms.d.ts +0 -50
- package/dist/types/platforms/index.d.ts +0 -13
- package/dist/types/platforms/junos/bgp.d.ts +0 -44
- package/dist/types/platforms/junos/index.d.ts +0 -114
- package/dist/types/platforms/junos/models.d.ts +0 -14
- package/dist/types/platforms/junos/render.d.ts +0 -154
- package/dist/types/platforms/line-diff.d.ts +0 -67
- package/dist/types/platforms/platform.d.ts +0 -135
- package/dist/types/platforms/raisecom-ros/index.d.ts +0 -71
- package/dist/types/platforms/raisecom-ros/models.d.ts +0 -14
- package/dist/types/platforms/raisecom-ros/render.d.ts +0 -41
- package/dist/types/platforms/routeros/export.d.ts +0 -59
- package/dist/types/platforms/routeros/index.d.ts +0 -116
- package/dist/types/platforms/routeros/models.d.ts +0 -18
- package/dist/types/platforms/routeros/plan.d.ts +0 -58
- package/dist/types/platforms/routeros/render.d.ts +0 -250
- package/dist/types/platforms/vrp/index.d.ts +0 -83
- package/dist/types/platforms/vrp/models.d.ts +0 -12
- package/dist/types/platforms/vrp/render.d.ts +0 -96
- package/dist/types/schema/common.d.ts +0 -30
- package/dist/types/schema/device.d.ts +0 -126
- package/dist/types/schema/firewall.d.ts +0 -131
- package/dist/types/schema/index.d.ts +0 -8
- package/dist/types/schema/interfaces.d.ts +0 -205
- package/dist/types/schema/policy.d.ts +0 -107
- package/dist/types/schema/routing.d.ts +0 -161
- package/dist/types/schema/system.d.ts +0 -198
- package/dist/types/schema/time-zones.d.ts +0 -2
- package/dist/types/transport/console.d.ts +0 -115
- package/dist/types/transport/path-check.d.ts +0 -32
- package/dist/types/transport/ssh.d.ts +0 -27
- package/src/cli/graph-format.ts +0 -91
- package/src/cli/new.ts +0 -234
- package/src/core/address-space.ts +0 -320
- package/src/core/cross-checks.ts +0 -369
- package/src/core/define.ts +0 -124
- package/src/core/project-files.ts +0 -35
- package/src/core/schema-docs.ts +0 -174
- package/src/core/validator.ts +0 -508
- package/src/helpers/bgp.ts +0 -473
- package/src/helpers/cables.ts +0 -74
- package/src/helpers/checks.ts +0 -201
- package/src/helpers/exchange.ts +0 -123
- package/src/helpers/filters.ts +0 -107
- package/src/helpers/index.ts +0 -25
- package/src/helpers/route-server.ts +0 -212
- package/src/helpers/upstreams.ts +0 -369
- package/src/index.ts +0 -13
- package/src/integrations/librenms.ts +0 -291
- package/src/integrations/netbox.ts +0 -620
- package/src/integrations/peeringdb.ts +0 -173
- package/src/integrations/prometheus.ts +0 -90
- package/src/schema/common.ts +0 -41
- package/src/schema/device.ts +0 -145
- package/src/schema/firewall.ts +0 -140
- package/src/schema/index.ts +0 -8
- package/src/schema/policy.ts +0 -115
- package/src/schema/routing.ts +0 -173
- package/src/schema/system.ts +0 -203
- package/src/studio/public/app.js +0 -186
- package/src/studio/public/compare.js +0 -250
- package/src/studio/public/dom.js +0 -138
- package/src/studio/public/evaluate.js +0 -687
- package/src/studio/public/export.js +0 -130
- package/src/studio/public/graph.js +0 -1541
- package/src/studio/public/index.html +0 -83
- package/src/studio/public/net.js +0 -134
- package/src/studio/public/tables.js +0 -1289
- package/src/studio/public/tools.js +0 -610
- package/templates/colocation/checks.ts +0 -53
- package/templates/colocation/circuit.config.ts +0 -9
- package/templates/colocation/edge-01.ts +0 -133
- package/templates/colocation/routing.ts +0 -13
- package/templates/colocation/tenancy.ts +0 -76
- package/templates/colocation/tenants/acme.ts +0 -19
- package/templates/colocation/tenants/index.ts +0 -6
- package/templates/colocation/tor-01.ts +0 -33
- package/templates/edge-router/checks.ts +0 -20
- package/templates/edge-router/circuit.config.ts +0 -8
- package/templates/edge-router/edge-01.ts +0 -110
- package/templates/edge-router/routing.ts +0 -13
- package/templates/project/AGENTS.md +0 -51
- package/templates/project/CLAUDE.md +0 -1
- package/templates/project/README.md +0 -16
- package/templates/project/gitignore +0 -5
- package/templates/project/tsconfig.json +0 -13
- package/templates/single-site/checks.ts +0 -26
- package/templates/single-site/circuit.config.ts +0 -8
- package/templates/single-site/router.ts +0 -86
- package/templates/single-site/site.ts +0 -18
- package/templates/single-site/switch.ts +0 -34
- /package/src/studio/{public → app/public}/favicon.svg +0 -0
- /package/src/studio/{public → app/public}/special-gothic-latin-ext.woff2 +0 -0
- /package/src/studio/{public → app/public}/special-gothic-latin.woff2 +0 -0
- /package/src/studio/{public → app/public}/special-gothic-license.txt +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Written by scripts/studio.ts from Studio's page, built by Vite: do not edit.
|
|
2
|
+
|
|
3
|
+
export const STUDIO_ASSETS: Record<string, { type: string; body: string }> = {"assets/index-BMSCx2o5.css":{"type":"text/css; charset=utf-8","body":"LmNhbnZhc1tkYXRhLXYtMTA5YzMyZGJde2ZsZXg6MTttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OlNwZWNpYWwgR290aGljO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMCA3MDA7Zm9udC1zdHJldGNoOjc1JSAxMjUlO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoL3NwZWNpYWwtZ290aGljLWxhdGluLWV4dC53b2ZmMilmb3JtYXQoIndvZmYyIik7dW5pY29kZS1yYW5nZTpVKzEwMC0yQkEsVSsyQkQtMkM1LFUrMkM3LTJDQyxVKzJDRS0yRDcsVSsyREQtMkZGLFUrMzA0LFUrMzA4LFUrMzI5LFUrMUQwMC0xREJGLFUrMUUwMC0xRTlGLFUrMUVGMi0xRUZGLFUrMjAyMCxVKzIwQTAtMjBBQixVKzIwQUQtMjBDNCxVKzIxMTMsVSsyQzYwLTJDN0YsVStBNzIwLUE3RkZ9QGZvbnQtZmFjZXtmb250LWZhbWlseTpTcGVjaWFsIEdvdGhpYztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDAgNzAwO2ZvbnQtc3RyZXRjaDo3NSUgMTI1JTtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKC9zcGVjaWFsLWdvdGhpYy1sYXRpbi53b2ZmMilmb3JtYXQoIndvZmYyIik7dW5pY29kZS1yYW5nZTpVKz8/LFUrMTMxLFUrMTUyLTE1MyxVKzJCQi0yQkMsVSsyQzYsVSsyREEsVSsyREMsVSszMDQsVSszMDgsVSszMjksVSsyMDAwLTIwNkYsVSsyMEFDLFUrMjEyMixVKzIxOTEsVSsyMTkzLFUrMjIxMixVKzIyMTUsVStGRUZGLFUrRkZGRH06cm9vdHstLWNvYmFsdDojMGE0N2I4Oy0tY29iYWx0LWRlZXA6IzA4MzM3ZjstLW5hdnk6IzBhMWEzNjstLXllbGxvdzojZjhlMzQ3Oy0teWVsbG93LWRlZXA6I2U4Y2QxYzstLW9uLWNvYmFsdDojZmZmOy0tb24tY29iYWx0LXNvZnQ6I2M5ZDdmNTstLWJnOiNlZmYyZjk7LS1zdXJmYWNlOiNmZmY7LS1zdXJmYWNlLXJhaXNlZDojZjRmNmZiOy0tbGluZTojZDNkOWU3Oy0taGVhZDojZTFlN2YzOy0taG92ZXI6IzBhNDdiODBiOy0tdGV4dDojMTExNDFiOy0tbXV0ZWQ6IzQ5NTM2YTstLWVkZ2U6IzdiODZhMDstLWFjY2VudDojMGE0N2I4Oy0tYWNjZW50LXN0cm9uZzojZjhlMzQ3Oy0tb24tYWNjZW50OiMxMTE0MWI7LS1zZWxlY3RlZDojZmZmN2MyOy0tZXJyb3I6I2MwMjYyYzstLWVycm9yLXN0cm9uZzojYzAyNjJjOy0td2FybmluZzojYjM1YTAwOy0td2FybmluZy1zdHJvbmc6I2YwYTAzMDstLW9rOiMxMTczM2I7LS1zZWdtZW50OiNmOGUzNDc1MjstLWRvdHM6IzBhNDdiODI0Oy0taGVhZGluZy1kb3RzOnZhcigtLWNvYmFsdCk7LS1mb250OiJTcGVjaWFsIEdvdGhpYyIsICJTZWdvZSBVSSIsIHN5c3RlbS11aSwgc2Fucy1zZXJpZiwgIkFwcGxlIENvbG9yIEVtb2ppIiwgIlNlZ29lIFVJIEVtb2ppIiwgIlNlZ29lIFVJIFN5bWJvbCIsICJOb3RvIENvbG9yIEVtb2ppIjstLWRpc3BsYXk6IlNwZWNpYWwgR290aGljIiwgIlNlZ29lIFVJIiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOy0tbW9ubzp1aS1tb25vc3BhY2UsICJDYXNjYWRpYSBDb2RlIiwgIlNGTW9uby1SZWd1bGFyIiwgTWVubG8sIENvbnNvbGFzLCBtb25vc3BhY2V9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6cm9vdHstLWJnOiMwYjExMjI7LS1zdXJmYWNlOiMxMjFhMzA7LS1zdXJmYWNlLXJhaXNlZDojMTgyMjQxOy0tbGluZTojMjYzMTRkOy0taGVhZDojMjYzMjVhOy0taG92ZXI6IzljYjlmZjBkOy0tdGV4dDojZjFmNGZiOy0tbXV0ZWQ6I2E5YjRjYzstLWVkZ2U6IzdjODlhODstLWFjY2VudDojOWNiOWZmOy0tb24tYWNjZW50OiMxMTE0MWI7LS1zZWxlY3RlZDojM2EzNTEwOy0tZXJyb3I6I2ZmODA4NjstLWVycm9yLXN0cm9uZzojYzAyNjJjOy0td2FybmluZzojZmZhZDRmOy0td2FybmluZy1zdHJvbmc6I2UwOGExZTstLW9rOiM1ZmQzOGY7LS1zZWdtZW50OiNmOGUzNDcyOTstLWRvdHM6IzljYjlmZjFmfX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1odG1sLGJvZHl7YmFja2dyb3VuZDp2YXIoLS1iZyk7aGVpZ2h0OjEwMCU7Y29sb3I6dmFyKC0tdGV4dCk7Zm9udDoxNXB4LzEuNSB2YXIoLS1mb250KTtzY3JvbGxiYXItY29sb3I6dmFyKC0tZWRnZSkgdHJhbnNwYXJlbnQ7bWFyZ2luOjB9Ym9keXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZGlzcGxheTpmbGV4fSNhcHB7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MTttaW4taGVpZ2h0OjA7ZGlzcGxheTpmbGV4fTo6c2VsZWN0aW9ue2NvbG9yOiMxMTE0MWI7YmFja2dyb3VuZDp2YXIoLS15ZWxsb3cpfTpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkIHZhcigtLWFjY2VudCk7b3V0bGluZS1vZmZzZXQ6MnB4fWhlYWRlciA6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lLWNvbG9yOnZhcigtLXllbGxvdyl9YnV0dG9ue2JvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1lZGdlKTtiYWNrZ3JvdW5kOnZhcigtLXN1cmZhY2UpO21pbi1oZWlnaHQ6MzZweDtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjZweCAxMnB4O2ZvbnQtd2VpZ2h0OjYwMH1idXR0b246aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50KX1idXR0b25bYXJpYS1wcmVzc2VkPXRydWVde2JvcmRlci1jb2xvcjp2YXIoLS1jb2JhbHQpO2JhY2tncm91bmQ6dmFyKC0tY29iYWx0KTtjb2xvcjojZmZmfWlucHV0LHNlbGVjdCxidXR0b257Ym94LXNpemluZzpib3JkZXItYm94fWNvZGV7Zm9udC1mYW1pbHk6dmFyKC0tbW9ubyk7Zm9udC1zaXplOi45MmVtfWF7Y29sb3I6dmFyKC0tYWNjZW50KTt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6M3B4O2N1cnNvcjpwb2ludGVyO2ZvbnQtd2VpZ2h0OjYwMDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbi10aGlja25lc3M6MS41cHh9YTpob3Zlcnt0ZXh0LWRlY29yYXRpb24tc3R5bGU6c29saWR9Lm11dGVke2NvbG9yOnZhcigtLW11dGVkKX1oZWFkZXJ7YmFja2dyb3VuZDp2YXIoLS1jb2JhbHQpO2NvbG9yOnZhcigtLW9uLWNvYmFsdCk7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6c3RyZXRjaDtnYXA6MDtwYWRkaW5nOjA7ZGlzcGxheTpmbGV4fWhlYWRlciAuYnJhbmR7Y29sb3I6aW5oZXJpdDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7cGFkZGluZzowIDE4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTpmbGV4fWhlYWRlciAuYnJhbmQ6aG92ZXIgLndvcmRtYXJre2NvbG9yOnZhcigtLXllbGxvdyl9aGVhZGVyIC53b3JkbWFya3tmb250LWZhbWlseTp2YXIoLS1kaXNwbGF5KTtsZXR0ZXItc3BhY2luZzouMDRlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC1zaXplOjIxcHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc3RyZXRjaDoxMjUlfWhlYWRlciAucHJvZHVjdHtiYWNrZ3JvdW5kOnZhcigtLXllbGxvdyk7Y29sb3I6IzBhMWEzNjtsZXR0ZXItc3BhY2luZzouMWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjJweCA3cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc3RyZXRjaDoxMTglfW5hdiwuYWN0aW9uc3tmbGV4LXdyYXA6d3JhcDtnYXA6NnB4O2Rpc3BsYXk6ZmxleH1oZWFkZXI+bmF2e2dhcDowO3BhZGRpbmctaW5saW5lOjZweH1oZWFkZXI+bmF2IGJ1dHRvbnttaW4taGVpZ2h0OjUycHg7Y29sb3I6dmFyKC0tb24tY29iYWx0LXNvZnQpO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7cGFkZGluZzowIDExcHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Zm9udC1zdHJldGNoOjExMiU7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyPm5hdiBidXR0b246aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmZmZmZmYxNH1oZWFkZXI+bmF2IGJ1dHRvblthcmlhLXByZXNzZWQ9dHJ1ZV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOjAgMH1oZWFkZXI+bmF2IGJ1dHRvblthcmlhLXByZXNzZWQ9dHJ1ZV06YWZ0ZXJ7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnZhcigtLXllbGxvdyk7aGVpZ2h0OjRweDthbmltYXRpb246LjI4cyBjdWJpYy1iZXppZXIoLjE2LDEsLjMsMSkgYmFyO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6OXB4O3JpZ2h0OjlweH1Aa2V5ZnJhbWVzIGJhcnswJXt0cmFuc2Zvcm06c2NhbGVYKDApfX0uY291bnR7YmFja2dyb3VuZDp2YXIoLS15ZWxsb3cpO2NvbG9yOiMwYTFhMzY7bGV0dGVyLXNwYWNpbmc6MDtib3JkZXItcmFkaXVzOjJweDttYXJnaW4tbGVmdDo2cHg7cGFkZGluZzowIDVweDtmb250LXNpemU6MTFweH0uY291bnQ6ZW1wdHl7ZGlzcGxheTpub25lfWhlYWRlciBpbnB1dFt0eXBlPXNlYXJjaF17Y29sb3I6I2ZmZjt3aWR0aDoyMzBweDttYXgtd2lkdGg6MTAwJTttaW4taGVpZ2h0OjM2cHg7Zm9udDppbmhlcml0O2JhY2tncm91bmQ6IzA4MWM0MDU5O2JvcmRlcjoxLjVweCBzb2xpZCAjYzlkN2Y1YjM7Ym9yZGVyLXJhZGl1czoycHg7bWFyZ2luOjhweCAxNnB4IDhweCBhdXRvO3BhZGRpbmc6NHB4IDEycHh9aGVhZGVyIGlucHV0W3R5cGU9c2VhcmNoXTo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tb24tY29iYWx0LXNvZnQpfWhlYWRlciBpbnB1dFt0eXBlPXNlYXJjaF06Zm9jdXN7b3V0bGluZTozcHggc29saWQgdmFyKC0teWVsbG93KTtvdXRsaW5lLW9mZnNldDoxcHg7Ym9yZGVyLWNvbG9yOiNmZmZ9LnN0YXR1cy1yYWlse2JhY2tncm91bmQ6dmFyKC0tc3VyZmFjZSk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSk7bWluLWhlaWdodDozOHB4O2NvbG9yOnZhcigtLXRleHQpO2ZsZXg6MSAwIDEwMCU7b3JkZXI6MTA7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MCAxOHB4O2Rpc3BsYXk6ZmxleH0uc3RhdHVzLXJhaWwgLnN1bW1hcnl7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6MTNweDtkaXNwbGF5OmZsZXh9LnN1bW1hcnktaXRlbXtib3JkZXItbGVmdDoxcHggc29saWQgdmFyKC0tbGluZSk7bWluLWhlaWdodDoyNHB4O2NvbG9yOnZhcigtLXRleHQpO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMTJweDtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo3MDA7ZGlzcGxheTppbmxpbmUtZmxleH0uc3VtbWFyeS1pdGVtOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0OjA7cGFkZGluZy1sZWZ0OjB9LnN1bW1hcnktaXRlbTpiZWZvcmV7Y29udGVudDoiIjtib3JkZXI6MS41cHggc29saWQ7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6OHB4O2hlaWdodDo4cHg7bWFyZ2luLXJpZ2h0OjdweH0uc3VtbWFyeS1pdGVtLmVycm9ye2NvbG9yOnZhcigtLWVycm9yKX0uc3VtbWFyeS1pdGVtLndhcm5pbmcsLnN1bW1hcnktaXRlbS5jaGFuZ2Vke2NvbG9yOnZhcigtLXdhcm5pbmcpfS5zdW1tYXJ5LWl0ZW0uZXJyb3I6YmVmb3JlLC5zdW1tYXJ5LWl0ZW0ud2FybmluZzpiZWZvcmUsLnN1bW1hcnktaXRlbS5jaGFuZ2VkOmJlZm9yZXtiYWNrZ3JvdW5kOmN1cnJlbnRDb2xvcn0uc3VtbWFyeS1pdGVtLmNoYW5nZWQ6YmVmb3Jle2JvcmRlci1yYWRpdXM6MXB4fS5zdW1tYXJ5LWl0ZW0ucXVpZXR7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtd2VpZ2h0OjYwMH0uc3RhdHVzLXJhaWwgLmxpdmV7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOnZhcigtLXRleHQpO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1sZWZ0OmF1dG87Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2Rpc3BsYXk6aW5saW5lLWZsZXh9LnN0YXR1cy1yYWlsIC5saXZlOmJlZm9yZXtjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0td2FybmluZyk7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6OHB4O2hlaWdodDo4cHg7bWFyZ2luLXJpZ2h0OjdweDtkaXNwbGF5OmlubGluZS1ibG9ja30uc3RhdHVzLXJhaWwgLmxpdmUub246YmVmb3Jle2JhY2tncm91bmQ6dmFyKC0tb2spfS5zdGF0dXMtcmFpbCAubGl2ZS5iZWF0OmJlZm9yZXthbmltYXRpb246LjdzIGN1YmljLWJlemllciguMTYsMSwuMywxKSBiZWF0fUBrZXlmcmFtZXMgYmVhdHszMCV7YmFja2dyb3VuZDp2YXIoLS15ZWxsb3cpO3RyYW5zZm9ybTpzY2FsZSgxLjkpfX0uYmFubmVye2JhY2tncm91bmQ6dmFyKC0tZXJyb3Itc3Ryb25nKTtjb2xvcjojZmZmO3doaXRlLXNwYWNlOnByZS13cmFwO2ZvbnQ6MTJweC8xLjQ1IHZhcigtLW1vbm8pO21heC1oZWlnaHQ6MzB2aDttYXJnaW46MDtwYWRkaW5nOjEwcHggMThweDtvdmVyZmxvdzphdXRvfW1haW4sLnZpZXd7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MTttaW4taGVpZ2h0OjA7ZGlzcGxheTpmbGV4fS52aWV3W2hpZGRlbl17ZGlzcGxheTpub25lfS50b29sYmFye2JhY2tncm91bmQ6dmFyKC0tc3VyZmFjZSk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHggMTZweDttaW4taGVpZ2h0OjUycHg7cGFkZGluZzo4cHggMThweDtkaXNwbGF5OmZsZXh9LnRvb2xiYXIgbmF2e2JvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS10ZXh0KTtib3JkZXItcmFkaXVzOjJweDtnYXA6MH0udG9vbGJhciBuYXYgYnV0dG9ue2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDttaW4taGVpZ2h0OjMycHg7cGFkZGluZzo0cHggMTJweDtmb250LXNpemU6MTNweH0udG9vbGJhciBuYXYgYnV0dG9uK2J1dHRvbntib3JkZXItbGVmdDoxLjVweCBzb2xpZCB2YXIoLS1saW5lKX0udG9vbGJhciBuYXYgYnV0dG9uW2FyaWEtcHJlc3NlZD10cnVlXXtiYWNrZ3JvdW5kOnZhcigtLWNvYmFsdCk7Y29sb3I6I2ZmZn0udG9vbGJhciBuYXYgYnV0dG9uIC5jb3VudCwudG9vbGJhciBuYXYgYnV0dG9uIHNtYWxse2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNztiYWNrZ3JvdW5kOjAgMH0udG9vbGJhciAuYWN0aW9uc3thbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH0udG9vbGJhciAuYWN0aW9ucyBidXR0b24sLm1lbnUgc3VtbWFyeXttaW4taGVpZ2h0OjM0cHg7cGFkZGluZzo0cHggMTJweDtmb250LXNpemU6MTNweH0ubWVudXtwb3NpdGlvbjpyZWxhdGl2ZX0ubWVudSBzdW1tYXJ5e2JvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1lZGdlKTtiYWNrZ3JvdW5kOnZhcigtLXN1cmZhY2UpO2N1cnNvcjpwb2ludGVyO2JvcmRlci1yYWRpdXM6MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OHB4O2ZvbnQtd2VpZ2h0OjYwMDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4fS5tZW51IHN1bW1hcnk6Oi13ZWJraXQtZGV0YWlscy1tYXJrZXJ7ZGlzcGxheTpub25lfS5tZW51IHN1bW1hcnk6YWZ0ZXJ7Y29udGVudDoiIjtib3JkZXItYm90dG9tOjEuNXB4IHNvbGlkO2JvcmRlci1yaWdodDoxLjVweCBzb2xpZDt3aWR0aDo3cHg7aGVpZ2h0OjdweDttYXJnaW4tdG9wOi00cHg7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1lbnUgc3VtbWFyeTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQpfS5tZW51LWl0ZW1ze3otaW5kZXg6NTtib3JkZXI6MS41cHggc29saWQgdmFyKC0tdGV4dCk7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlKTtib3JkZXItcmFkaXVzOjJweDttaW4td2lkdGg6MTIwcHg7cGFkZGluZzo0cHg7ZGlzcGxheTpncmlkO3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDEwMCUgKyA0cHgpO3JpZ2h0OjA7Ym94LXNoYWRvdzowIDhweCAyMHB4ICMwYTFhMzYyZX0ubWVudS1pdGVtcyBidXR0b257dGV4dC1hbGlnbjpsZWZ0O2JvcmRlcjowO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5zdGFnZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJnKTtiYWNrZ3JvdW5kLWltYWdlOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHZhcigtLWRvdHMpIDEuMnB4LCB0cmFuc3BhcmVudCAxLjZweCk7YmFja2dyb3VuZC1zaXplOjI0cHggMjRweDtmbGV4OjE7bWluLWhlaWdodDowO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59c3ZnLmNhbnZhc3tjdXJzb3I6Z3JhYjt0b3VjaC1hY3Rpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtmbGV4OjE7bWluLXdpZHRoOjA7aGVpZ2h0OjEwMCV9c3ZnLmNhbnZhcy5wYW5uaW5ne2N1cnNvcjpncmFiYmluZ30uZWRnZSBwYXRoe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0tZWRnZSk7c3Ryb2tlLXdpZHRoOjJweDt0cmFuc2l0aW9uOnN0cm9rZSAuMnMsc3Ryb2tlLXdpZHRoIC4yc30uZWRnZSwubm9kZXt0cmFuc2l0aW9uOm9wYWNpdHkgLjI1cyBlYXNlLW91dH0uZWRnZSAuc2lnbmFse2ZpbGw6dmFyKC0tYWNjZW50KTtwb2ludGVyLWV2ZW50czpub25lfS5lZGdlLmxpdCAuc2lnbmFsLC5lZGdlLnNlbGVjdGVkIC5zaWduYWx7cjo0LjVweDtmaWxsOnZhcigtLXllbGxvdyk7c3Ryb2tlOnZhcigtLW5hdnkpO3N0cm9rZS13aWR0aDoxLjVweH0uZWRnZS5hZGRlZCAuc2lnbmFse2ZpbGw6dmFyKC0tb2spfS5lZGdlIHRleHR7ZmlsbDp2YXIoLS1tdXRlZCk7cGFpbnQtb3JkZXI6c3Ryb2tlO3N0cm9rZTp2YXIoLS1iZyk7c3Ryb2tlLXdpZHRoOjVweDtzdHJva2UtbGluZWpvaW46cm91bmQ7Zm9udC1zaXplOjEyLjVweH0uZWRnZSAuaGl0e3N0cm9rZTojMDAwMDtzdHJva2Utd2lkdGg6MTJweDtjdXJzb3I6cG9pbnRlcn0uZWRnZS5vbmUtc2lkZWQgcGF0aDpub3QoLmhpdCl7c3Ryb2tlOnZhcigtLXdhcm5pbmcpO3N0cm9rZS13aWR0aDozcHg7c3Ryb2tlLWRhc2hhcnJheTo0IDR9LmVkZ2Uuc2VsZWN0ZWQgcGF0aDpub3QoLmhpdCksLmVkZ2UubGl0IHBhdGg6bm90KC5oaXQpe3N0cm9rZTp2YXIoLS1hY2NlbnQpO3N0cm9rZS13aWR0aDo0cHh9LmVkZ2Uuc2VsZWN0ZWQgdGV4dCwuZWRnZS5saXQgdGV4dHtmaWxsOnZhcigtLXRleHQpfS5lZGdlLmFkZGVkIHBhdGg6bm90KC5oaXQpe3N0cm9rZTp2YXIoLS1vayk7c3Ryb2tlLXdpZHRoOjRweH0uZWRnZS5nb25lIHBhdGg6bm90KC5oaXQpe3N0cm9rZTp2YXIoLS1lcnJvcik7c3Ryb2tlLXdpZHRoOjRweDtzdHJva2UtZGFzaGFycmF5OjEwIDV9Lm5vZGV7Y3Vyc29yOnBvaW50ZXJ9Lm5vZGU+cmVjdHtmaWxsOnZhcigtLXN1cmZhY2UpO3N0cm9rZTp2YXIoLS10ZXh0KTtzdHJva2Utd2lkdGg6MnB4fS5ub2RlLnNlZ21lbnQ+cmVjdHtmaWxsOnZhcigtLXNlZ21lbnQpO3N0cm9rZTp2YXIoLS15ZWxsb3ctZGVlcCl9Lm5vZGUub3V0c2lkZT5yZWN0e2ZpbGw6dmFyKC0tYmcpO3N0cm9rZTp2YXIoLS1lZGdlKTtzdHJva2UtZGFzaGFycmF5OjIgNH0ubm9kZS5lcnJvcj5yZWN0e3N0cm9rZTp2YXIoLS1lcnJvcik7c3Ryb2tlLXdpZHRoOjRweH0ubm9kZS53YXJuaW5nPnJlY3R7c3Ryb2tlOnZhcigtLXdhcm5pbmcpO3N0cm9rZS13aWR0aDo0cHg7c3Ryb2tlLWRhc2hhcnJheToxMCAzfS5ub2RlLnNlbGVjdGVkPnJlY3R7ZmlsbDp2YXIoLS1zZWxlY3RlZCk7c3Ryb2tlOnZhcigtLWNvYmFsdCk7c3Ryb2tlLXdpZHRoOjRweH0ubm9kZSAuY2hhc3Npcz5yZWN0OmZpcnN0LWNoaWxke2ZpbGw6dmFyKC0tY29iYWx0KTtzdHJva2U6bm9uZX0ubm9kZSAuY2hhc3NpcyAuc29ja2V0e2ZpbGw6I2ZmZjtzdHJva2U6bm9uZX0ubm9kZS5zZWxlY3RlZCAuY2hhc3NpcyAuc29ja2V0e2ZpbGw6dmFyKC0teWVsbG93KX0ubm9kZSAuYmVhY29ue2Rpc3BsYXk6bm9uZX0ubm9kZS50b3VyaW5nIC5iZWFjb257ZGlzcGxheTppbmxpbmV9Lm5vZGUgLmJlYWNvbiByZWN0e2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0teWVsbG93LWRlZXApO3N0cm9rZS13aWR0aDozcHh9Lm5vZGUudG91cmluZz5yZWN0e2ZpbGw6dmFyKC0teWVsbG93KX0ubm9kZS50b3VyaW5nOm5vdCguZXJyb3IpOm5vdCgud2FybmluZyk+cmVjdHtzdHJva2U6IzBhMWEzNjtzdHJva2Utd2lkdGg6NHB4fS5ub2RlLnRvdXJpbmcgdGV4dC5uYW1le2ZpbGw6IzExMTQxYn0ubm9kZS50b3VyaW5nIHRleHQuc3Vie2ZpbGw6IzJhMzU1MH0ubm9kZS50b3VyaW5nIC5jaGFzc2lzPnJlY3Q6Zmlyc3QtY2hpbGR7ZmlsbDojMGExYTM2fS5ub2RlLnRvdXJpbmcgLmNoYXNzaXMgLnNvY2tldHtmaWxsOnZhcigtLXllbGxvdyl9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOm5vLXByZWZlcmVuY2Upey5ub2RlLnRvdXJpbmcgLmJlYWNvbiByZWN0e3RyYW5zZm9ybS1ib3g6ZmlsbC1ib3g7dHJhbnNmb3JtLW9yaWdpbjo1MCU7YW5pbWF0aW9uOjEuOHMgY3ViaWMtYmV6aWVyKC4xNiwxLC4zLDEpIGluZmluaXRlIGJlYWNvbn19QGtleWZyYW1lcyBiZWFjb257MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSguOTYpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMS4xOCl9fS5ub2RlIHRleHR7ZmlsbDp2YXIoLS10ZXh0KTt0ZXh0LWFuY2hvcjptaWRkbGU7ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDtwb2ludGVyLWV2ZW50czpub25lO2ZvbnQtc2l6ZToxNHB4fS5ub2RlLmRldmljZSB0ZXh0e3RleHQtYW5jaG9yOnN0YXJ0fS5ub2RlIHRleHQubmFtZXtmb250LXNpemU6MThweDtmb250LXdlaWdodDo3MDB9Lm5vZGUgdGV4dC5zdWJ7ZmlsbDp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjEzcHh9Lm5vZGUuc2VnbWVudCB0ZXh0LC5ub2RlLm91dHNpZGUgdGV4dHtmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTJweH0uZGlte29wYWNpdHk6LjE4fXN2Zy5mYXIgLmVkZ2UgdGV4dCwucHJlc2VudGluZyAjcGFuZWx7ZGlzcGxheTpub25lfS5wcmVzZW50aW5nIC5lZGdlIHBhdGg6bm90KC5oaXQpe3N0cm9rZS13aWR0aDozcHh9LnByZXNlbnRpbmcgLmVkZ2UubGl0IHBhdGg6bm90KC5oaXQpe3N0cm9rZS13aWR0aDo1cHh9LnByZXNlbnRpbmcgLmVkZ2UgLnNpZ25hbHtyOjQuNXB4fS5wcmVzZW50aW5nIC5lZGdlLmxpdCAuc2lnbmFse3I6NnB4fS5wcmVzZW50LWNhcHRpb257Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS10ZXh0KTtiYWNrZ3JvdW5kOnZhcigtLXN1cmZhY2UpO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czoycHg7Z2FwOjJweDttYXJnaW46MDtwYWRkaW5nOjEycHggMThweCAxNHB4O2Rpc3BsYXk6Z3JpZDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MjJweDtsZWZ0OjIycHh9LnByZXNlbnQtY2FwdGlvbltoaWRkZW5de2Rpc3BsYXk6bm9uZX0ucHJlc2VudC1jYXB0aW9uIHN0cm9uZ3tsZXR0ZXItc3BhY2luZzotLjAxNWVtO2ZvbnQtc2l6ZToyNnB4O2xpbmUtaGVpZ2h0OjEuMTV9LnByZXNlbnQtY2FwdGlvbiBzcGFue2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTRweH1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246bm8tcHJlZmVyZW5jZSl7LnByZXNlbnRpbmcgc3ZnLmNhbnZhc3thbmltYXRpb246NDhzIGVhc2UtaW4tb3V0IGluZmluaXRlIGFsdGVybmF0ZSBkcmlmdH0ucHJlc2VudGluZyBzdmcuY2FudmFzOmhvdmVyLC5wcmVzZW50aW5nIHN2Zy5jYW52YXMucGFubmluZ3thbmltYXRpb24tcGxheS1zdGF0ZTpwYXVzZWR9fUBrZXlmcmFtZXMgZHJpZnR7MCV7dHJhbnNmb3JtOnNjYWxlKDEpdHJhbnNsYXRlKC0xJSwtLjYlKX10b3t0cmFuc2Zvcm06c2NhbGUoMS4wNSl0cmFuc2xhdGUoMSUsLjYlKX19YXNpZGV7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlKTtib3JkZXItbGVmdDoxcHggc29saWQgdmFyKC0tbGluZSk7d2lkdGg6MzkwcHg7cGFkZGluZzoyMHB4IDIycHggMzJweDtvdmVyZmxvdzphdXRvfWFzaWRlIGgye2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2xldHRlci1zcGFjaW5nOi0uMDE1ZW07b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtiYWNrZ3JvdW5kOnJhZGlhbC1ncmFkaWVudChjaXJjbGUsIHZhcigtLWhlYWRpbmctZG90cykgNDglLCB0cmFuc3BhcmVudCA1MiUpIGxlZnQgYm90dG9tIC8gMTRweCA3cHggc3BhY2Ugbm8tcmVwZWF0O21hcmdpbjowIDAgOHB4O3BhZGRpbmctYm90dG9tOjEycHg7Zm9udC1zaXplOjI2cHg7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMTU7ZGlzcGxheTp0YWJsZX1hc2lkZSBoMywudGFibGVzIGgze2NvbG9yOnZhcigtLXRleHQpO2xldHRlci1zcGFjaW5nOi4xZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO21hcmdpbjoyNnB4IDAgOHB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjcwMDtmb250LXN0cmV0Y2g6MTE1JX1hc2lkZSB1bHttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfWFzaWRlIGxpe292ZXJmbG93LXdyYXA6YW55d2hlcmU7cGFkZGluZzozcHggMH1hc2lkZSAua2luZHtjb2xvcjp2YXIoLS1tdXRlZCk7Zm9udC1zaXplOjEycHh9YXNpZGUgcHJle2JhY2tncm91bmQ6dmFyKC0tbmF2eSk7Y29sb3I6I2U2ZWNmYTtmb250OjEycHgvMS41IHZhcigtLW1vbm8pO3doaXRlLXNwYWNlOnByZS13cmFwO292ZXJmbG93LXdyYXA6YW55d2hlcmU7Ym9yZGVyLXJhZGl1czoycHg7bWFyZ2luOjA7cGFkZGluZzoxMHB4fS5sZWdlbmQgbGl7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4O2Rpc3BsYXk6ZmxleH0ubGVnZW5kIHN2Z3tmbGV4Om5vbmV9LmJhZGdle2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2xldHRlci1zcGFjaW5nOi4wNmVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtib3JkZXItcmFkaXVzOjJweDttYXJnaW4tcmlnaHQ6NnB4O3BhZGRpbmc6MXB4IDZweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Zm9udC1zdHJldGNoOjExMiU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmJhZGdlLmVycm9ye2JhY2tncm91bmQ6dmFyKC0tZXJyb3Itc3Ryb25nKTtjb2xvcjojZmZmfS5iYWRnZS53YXJuaW5ne2JhY2tncm91bmQ6dmFyKC0td2FybmluZy1zdHJvbmcpO2NvbG9yOiMxMTE0MWJ9LmNoaXBze2ZsZXgtd3JhcDp3cmFwO2dhcDo2cHg7ZGlzcGxheTpmbGV4fS5jaGlwcyBidXR0b257bWluLWhlaWdodDoyOHB4O3BhZGRpbmc6MnB4IDlweDtmb250LXNpemU6MTJweH0udGFibGVze2ZsZXg6MTtwYWRkaW5nOjI4cHggY2xhbXAoMTZweCw0dncsNTZweCkgNjRweDtvdmVyZmxvdzphdXRvfS50YWJsZXMgaDJ7Zm9udC1mYW1pbHk6dmFyKC0tZGlzcGxheSk7bGV0dGVyLXNwYWNpbmc6LS4wM2VtO2JhY2tncm91bmQ6cmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgdmFyKC0taGVhZGluZy1kb3RzKSA0OCUsIHRyYW5zcGFyZW50IDUyJSkgbGVmdCBib3R0b20gLyAxOHB4IDlweCBzcGFjZSBuby1yZXBlYXQ7bWFyZ2luOjZweCAwIDE4cHg7cGFkZGluZy1ib3R0b206MTRweDtmb250LXNpemU6Y2xhbXAoMzBweCwzLjJ2dyw0NHB4KTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4yO2Rpc3BsYXk6dGFibGV9LnRhYmxlcyBoMiAuYmFkZ2V7dmVydGljYWwtYWxpZ246bWlkZGxlO2xldHRlci1zcGFjaW5nOi4wNmVtO21hcmdpbi1sZWZ0OjEwcHh9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6cm9vdHstLWhlYWRpbmctZG90czp2YXIoLS1hY2NlbnQpfX0udGFibGVzIGg0e2ZvbnQtZmFtaWx5OnZhcigtLW1vbm8pO21hcmdpbjoxNnB4IDAgNnB4O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMH0udGFibGVzIHB7bWFyZ2luOjRweCAwIDhweH0udGFibGVzIC5jcnVtYnN7bWFyZ2luOjA7Zm9udC1zaXplOjEzcHh9LnRhYmxlcyAuZmluZGluZ3N7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0udGFibGVzIC5maW5kaW5ncyBsaXtwYWRkaW5nOjNweCAwfS50YWJsZXMgLnRhYnN7Ym9yZGVyLWJvdHRvbToxLjVweCBzb2xpZCB2YXIoLS1saW5lKTtmbGV4LXdyYXA6d3JhcDtnYXA6MDttYXJnaW46MThweCAwIDE0cHg7ZGlzcGxheTpmbGV4fS50YWJzIGJ1dHRvbnttaW4taGVpZ2h0OjQwcHg7Y29sb3I6dmFyKC0tbXV0ZWQpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtwYWRkaW5nOjhweCAxMnB4IDEwcHg7Zm9udC1zaXplOjE0cHg7cG9zaXRpb246cmVsYXRpdmV9LnRhYnMgYnV0dG9uOmhvdmVye2NvbG9yOnZhcigtLXRleHQpO2JhY2tncm91bmQ6dmFyKC0tc3VyZmFjZS1yYWlzZWQpfS50YWJzIGJ1dHRvblthcmlhLXByZXNzZWQ9dHJ1ZV17Y29sb3I6dmFyKC0tdGV4dCk7YmFja2dyb3VuZDowIDB9LnRhYnMgYnV0dG9uW2FyaWEtcHJlc3NlZD10cnVlXTphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tY29iYWx0KTtoZWlnaHQ6NHB4O2FuaW1hdGlvbjouMjhzIGN1YmljLWJlemllciguMTYsMSwuMywxKSBiYXI7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0xLjVweDtsZWZ0OjhweDtyaWdodDo4cHh9LnRhYmxlLWJsb2Nre21heC13aWR0aDoxMDAlO292ZXJmbG93LXg6YXV0b310YWJsZS5kYXRhIHRib2R5IHRoLHRhYmxlLmRhdGEgdGQ6Zmlyc3QtY2hpbGR7d2hpdGUtc3BhY2U6bm93cmFwfS50YWJsZS1hY3Rpb25ze3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luOjAgMCA2cHg7Zm9udC1zaXplOjEzcHh9dGFibGUuZGF0YXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlKTtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXM7Ym9yZGVyOjA7d2lkdGg6MTAwJTtmb250LXNpemU6MTMuNXB4fXRhYmxlLmRhdGEgdGgsdGFibGUuZGF0YSB0ZHtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1saW5lKTtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOnRvcDtwYWRkaW5nOjhweCAxMnB4fXRhYmxlLmRhdGEgdGhlYWQgdGh7YmFja2dyb3VuZDp2YXIoLS1oZWFkKTtjb2xvcjp2YXIoLS10ZXh0KTtsZXR0ZXItc3BhY2luZzouMDhlbTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1ib3R0b206MDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDA7Zm9udC1zdHJldGNoOjExMiV9dGFibGUuZGF0YSB0aFt0aXRsZV17Y3Vyc29yOmhlbHA7dGV4dC11bmRlcmxpbmUtb2Zmc2V0OjNweDstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTppcyh0YWJsZS5kYXRhIHRib2R5IHRyOmhvdmVyOm5vdCg6aGFzKHRyOmhvdmVyKSk+dGQsdGFibGUuZGF0YSB0Ym9keSB0cjpob3Zlcjpub3QoOmhhcyh0cjpob3ZlcikpPnRoKXtiYWNrZ3JvdW5kOnZhcigtLWhvdmVyKX10YWJsZS5kYXRhIHRyLm11dGVkIHRke2NvbG9yOnZhcigtLW11dGVkKX10YWJsZS5zZXR0aW5nc3t3aWR0aDphdXRvO21pbi13aWR0aDptaW4oNTYwcHgsMTAwJSl9dGFibGUuc2V0dGluZ3M+dGJvZHk+dHI+dGh7d2lkdGg6MSU7Y29sb3I6dmFyKC0tbXV0ZWQpO3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXdlaWdodDo2MDB9dGFibGUuZGF0YSB0YWJsZS5kYXRhe21hcmdpbjowfXRyLmZsYXNoIHRke3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHM7YmFja2dyb3VuZDp2YXIoLS1zZWxlY3RlZCkhaW1wb3J0YW50fXByZS5jb2Rle2JhY2tncm91bmQ6dmFyKC0tbmF2eSk7Y29sb3I6I2U2ZWNmYTtmb250OjEyLjVweC8xLjU1IHZhcigtLW1vbm8pO3doaXRlLXNwYWNlOnByZTtib3JkZXItcmFkaXVzOjJweDttYXJnaW46MDtwYWRkaW5nOjE0cHg7b3ZlcmZsb3c6YXV0b30uZmFjZXBsYXRle2JvcmRlcjoycHggc29saWQgdmFyKC0tdGV4dCk7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlKTtib3JkZXItcmFkaXVzOjJweDtmbGV4LXdyYXA6d3JhcDtnYXA6MTZweCAyOHB4O21heC13aWR0aDoxMDAlO21hcmdpbjo4cHggMDtwYWRkaW5nOjE4cHg7ZGlzcGxheTpmbGV4O292ZXJmbG93LXg6YXV0b30uZmFjZXBsYXRlIC5zcGVlZHthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7bWluLXdpZHRoOm1heC1jb250ZW50O2Rpc3BsYXk6ZmxleH0uZmFjZXBsYXRlIC5zcGVlZC1uYW1le21pbi13aWR0aDozNnB4O2NvbG9yOnZhcigtLW11dGVkKTtmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTJweH0uZmFjZXBsYXRlIC5wb3J0c3tncmlkLXRlbXBsYXRlLXJvd3M6cmVwZWF0KDIsYXV0byk7Z3JpZC1hdXRvLWZsb3c6Y29sdW1uO2dhcDo0cHg7ZGlzcGxheTpncmlkfS5wb3J0e2JvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1lZGdlKTtiYWNrZ3JvdW5kOnZhcigtLXN1cmZhY2UpO3dpZHRoOjI4cHg7aGVpZ2h0OjI0cHg7Y29sb3I6dmFyKC0tdGV4dCk7Zm9udDo2MDAgMTFweCB2YXIoLS1mb250KTtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnBvcnQuc2h1dHtjb2xvcjp2YXIoLS1tdXRlZCk7YmFja2dyb3VuZDpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tc3VyZmFjZSkgMCAzcHgsIHZhcigtLWxpbmUpIDNweCA1cHgpfS5wb3J0LmFjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLXN1cmZhY2UpO2JvcmRlcjoycHggc29saWQgdmFyKC0tY29iYWx0KX0ucG9ydC50cnVua3tiYWNrZ3JvdW5kOnZhcigtLXllbGxvdyk7Ym9yZGVyOjJweCBzb2xpZCB2YXIoLS10ZXh0KTtjb2xvcjojMTExNDFifS5wb3J0LnJvdXRlZHtiYWNrZ3JvdW5kOnZhcigtLXN1cmZhY2UpO2JvcmRlcjozcHggZG91YmxlIHZhcigtLXRleHQpfS5wb3J0LmxhZ3tib3JkZXI6MnB4IGRhc2hlZCB2YXIoLS1jb2JhbHQpfS5wb3J0LmxpbmtlZDphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQ6dmFyKC0tb2spO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjVweDtoZWlnaHQ6NXB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoycHg7cmlnaHQ6MnB4fS5mYWNlcGxhdGUtbGVnZW5ke2NvbG9yOnZhcigtLW11dGVkKTtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4IDE2cHg7bWFyZ2luOjAgMCAxMnB4O3BhZGRpbmc6MDtmb250LXNpemU6MTJweDtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxheTpmbGV4fS5mYWNlcGxhdGUtbGVnZW5kIGxpe2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NnB4O2Rpc3BsYXk6ZmxleH0uZmFjZXBsYXRlLWxlZ2VuZCAucG9ydHt3aWR0aDoxOHB4O2hlaWdodDoxNHB4fXByZS5kaWZmIC5yZW1vdmVkLHAgLnJlbW92ZWR7Y29sb3I6dmFyKC0tZXJyb3IpfXByZS5kaWZmIC5hZGRlZCxwIC5hZGRlZHtjb2xvcjp2YXIoLS1vayl9cHJlLmNvZGUuZGlmZiAucmVtb3ZlZHtjb2xvcjojZmY5Y2EwfXByZS5jb2RlLmRpZmYgLmFkZGVke2NvbG9yOiM3ZmUwYTZ9cHJlLmRpZmYgLmZvbGR7Y29sb3I6dmFyKC0tbXV0ZWQpO21hcmdpbjo0cHggMDtmb250LXN0eWxlOml0YWxpYztkaXNwbGF5OmJsb2NrfXByZS5jb2RlLmRpZmYgLmZvbGR7Y29sb3I6IzlkYjNlMH0uYWRkZWR7Y29sb3I6dmFyKC0tb2spfS5yZW1vdmVke2NvbG9yOnZhcigtLWVycm9yKX1kZXRhaWxzLmNoYW5nZXttYXJnaW46NnB4IDB9ZGV0YWlscy5jaGFuZ2Ugc3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjRweCAwO2ZvbnQtd2VpZ2h0OjYwMH0udG9vbC1mb3Jte2JvcmRlcjoycHggc29saWQgdmFyKC0tdGV4dCk7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlKTtib3JkZXItcmFkaXVzOjJweDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2dhcDoxMnB4IDE2cHg7bWFyZ2luOjEycHggMCAxOHB4O3BhZGRpbmc6MTZweDtkaXNwbGF5OmZsZXh9LnRvb2wtZm9ybT5idXR0b257bWFyZ2luLXRvcDoyNHB4fS5maWVsZHtjb2xvcjp2YXIoLS1tdXRlZCk7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjAwO2Rpc3BsYXk6ZmxleH0uZmllbGQgaW5wdXRbdHlwZT10ZXh0XSwuZmllbGQgc2VsZWN0LC5maWVsZCBpbnB1dHtib3JkZXI6MS41cHggc29saWQgdmFyKC0tZWRnZSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7bWluLXdpZHRoOjE1MHB4O21pbi1oZWlnaHQ6MzZweDtjb2xvcjp2YXIoLS10ZXh0KTtmb250OmluaGVyaXQ7Ym9yZGVyLXJhZGl1czoycHg7cGFkZGluZzo1cHggOXB4O2ZvbnQtd2VpZ2h0OjQwMH0uZmllbGQgaW5wdXRbdHlwZT10ZXh0XTpmb2N1cywuZmllbGQgc2VsZWN0OmZvY3VzLC5maWVsZCBpbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tY29iYWx0KX0uZmllbGQgc21hbGx7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5mbGFnc3tjb2xvcjp2YXIoLS10ZXh0KTtmbGV4LXdyYXA6d3JhcDtnYXA6NHB4IDEycHg7ZGlzcGxheTpmbGV4fS5mbGFne2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NHB4O2Rpc3BsYXk6ZmxleH1idXR0b24ucHJpbWFyeXtib3JkZXItY29sb3I6dmFyKC0tdGV4dCk7YmFja2dyb3VuZDp2YXIoLS15ZWxsb3cpO2NvbG9yOiMxMTE0MWJ9YnV0dG9uLnByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS15ZWxsb3ctZGVlcCk7Y29sb3I6IzExMTQxYn0udmVyZGljdHtmb250LXdlaWdodDo3MDB9LnZlcmRpY3QuYWNjZXB0e2NvbG9yOnZhcigtLW9rKX0udmVyZGljdC5kcm9wLC52ZXJkaWN0LnJlamVjdHtjb2xvcjp2YXIoLS1lcnJvcil9LnZlcmRpY3QudW5rbm93bntjb2xvcjp2YXIoLS13YXJuaW5nKX1AbWVkaWEgKHdpZHRoPD0xMTgwcHgpe2hlYWRlciBpbnB1dFt0eXBlPXNlYXJjaF17b3JkZXI6NTt3aWR0aDpjYWxjKDEwMCUgLSAzNnB4KTttYXJnaW46MCAxOHB4IDEwcHh9fUBtZWRpYSAod2lkdGg8PTc2MHB4KXtoZWFkZXIgLmJyYW5ke3dpZHRoOjEwMCU7bWluLWhlaWdodDo1MnB4fWhlYWRlcj5uYXZ7ZmxleC13cmFwOm5vd3JhcDt3aWR0aDoxMDAlO292ZXJmbG93LXg6YXV0b31oZWFkZXI+bmF2IGJ1dHRvbntmbGV4Om5vbmV9LnN0YXR1cy1yYWlse2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7Z2FwOjhweDtwYWRkaW5nLWJsb2NrOjhweH0uc3VtbWFyeS1pdGVtLC5zdW1tYXJ5LWl0ZW06Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6MDttaW4taGVpZ2h0OjI4cHg7cGFkZGluZzowIDE0cHggMCAwfS50b29sYmFyIG5hdntmbGV4LXdyYXA6bm93cmFwO21heC13aWR0aDoxMDAlO292ZXJmbG93LXg6YXV0b30udG9vbGJhciBuYXYgYnV0dG9ue2ZsZXg6bm9uZX0uc3RhZ2V7ZmxleC1kaXJlY3Rpb246Y29sdW1ufXN2Zy5jYW52YXN7ZmxleDphdXRvO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMjBweH1hc2lkZXtib3JkZXItdG9wOjJweCBzb2xpZCB2YXIoLS10ZXh0KTtib3JkZXItbGVmdDowO3dpZHRoOmF1dG87aGVpZ2h0OjQyJX0udGFibGVze3BhZGRpbmc6MjBweCAxNnB4IDQwcHh9LnBvcnR7d2lkdGg6NDRweDtoZWlnaHQ6NDBweDtmb250LXNpemU6MTNweH0uZmFjZXBsYXRlLWxlZ2VuZCAucG9ydHt3aWR0aDoyNHB4O2hlaWdodDoxOHB4fX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsqLDpiZWZvcmUsOmFmdGVye3Njcm9sbC1iZWhhdmlvcjphdXRvIWltcG9ydGFudDt0cmFuc2l0aW9uLWR1cmF0aW9uOi4wMW1zIWltcG9ydGFudDthbmltYXRpb24tZHVyYXRpb246LjAxbXMhaW1wb3J0YW50O2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6MSFpbXBvcnRhbnR9fQo="},"assets/index-DccCuKRj.js":{"type":"text/javascript; charset=utf-8","body":"KGZ1bmN0aW9uKCl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgbGlua2ApLnJlbExpc3Q7aWYoZSYmZS5zdXBwb3J0cyYmZS5zdXBwb3J0cyhgbW9kdWxlcHJlbG9hZGApKXJldHVybjtmb3IobGV0IGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXWApKW4oZSk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e2ZvcihsZXQgdCBvZiBlKWlmKHQudHlwZT09PWBjaGlsZExpc3RgKWZvcihsZXQgZSBvZiB0LmFkZGVkTm9kZXMpZS50YWdOYW1lPT09YExJTktgJiZlLnJlbD09PWBtb2R1bGVwcmVsb2FkYCYmbihlKX0pLm9ic2VydmUoZG9jdW1lbnQse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSk7ZnVuY3Rpb24gdChlKXtsZXQgdD17fTtyZXR1cm4gZS5pbnRlZ3JpdHkmJih0LmludGVncml0eT1lLmludGVncml0eSksZS5yZWZlcnJlclBvbGljeSYmKHQucmVmZXJyZXJQb2xpY3k9ZS5yZWZlcnJlclBvbGljeSksdC5jcmVkZW50aWFscz1lLmNyb3NzT3JpZ2luPT09YHVzZS1jcmVkZW50aWFsc2A/YGluY2x1ZGVgOmUuY3Jvc3NPcmlnaW49PT1gYW5vbnltb3VzYD9gb21pdGA6YHNhbWUtb3JpZ2luYCx0fWZ1bmN0aW9uIG4oZSl7aWYoZS5lcClyZXR1cm47ZS5lcD0hMDtsZXQgbj10KGUpO2ZldGNoKGUuaHJlZixuKX19KSgpO2Z1bmN0aW9uIGUoZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IG4gb2YgZS5zcGxpdChgLGApKXRbbl09MTtyZXR1cm4gZT0+ZSBpbiB0fXZhciB0PXt9LG49W10scj0oKT0+e30saT0oKT0+ITEsYT1lPT5lLmNoYXJDb2RlQXQoMCk9PT0xMTEmJmUuY2hhckNvZGVBdCgxKT09PTExMCYmKGUuY2hhckNvZGVBdCgyKT4xMjJ8fGUuY2hhckNvZGVBdCgyKTw5Nyksbz1lPT5lLnN0YXJ0c1dpdGgoYG9uVXBkYXRlOmApLHM9T2JqZWN0LmFzc2lnbixjPShlLHQpPT57bGV0IG49ZS5pbmRleE9mKHQpO24+LTEmJmUuc3BsaWNlKG4sMSl9LGw9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx1PShlLHQpPT5sLmNhbGwoZSx0KSxkPUFycmF5LmlzQXJyYXksZj1lPT54KGUpPT09YFtvYmplY3QgTWFwXWAscD1lPT54KGUpPT09YFtvYmplY3QgU2V0XWAsbT1lPT54KGUpPT09YFtvYmplY3QgRGF0ZV1gLGg9ZT0+dHlwZW9mIGU9PWBmdW5jdGlvbmAsZz1lPT50eXBlb2YgZT09YHN0cmluZ2AsXz1lPT50eXBlb2YgZT09YHN5bWJvbGAsdj1lPT50eXBlb2YgZT09YG9iamVjdGAmJiEhZSx5PWU9Pih2KGUpfHxoKGUpKSYmaChlLnRoZW4pJiZoKGUuY2F0Y2gpLGI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyx4PWU9PmIuY2FsbChlKSxTPWU9PngoZSkuc2xpY2UoOCwtMSksQz1lPT54KGUpPT09YFtvYmplY3QgT2JqZWN0XWAsdz1lPT5nKGUpJiZlIT09YE5hTmAmJmVbMF0hPT1gLWAmJmBgK3BhcnNlSW50KGUsMTApPT09ZSxUPWUoYCxrZXkscmVmLHJlZl9mb3IscmVmX2tleSxvblZub2RlQmVmb3JlTW91bnQsb25Wbm9kZU1vdW50ZWQsb25Wbm9kZUJlZm9yZVVwZGF0ZSxvblZub2RlVXBkYXRlZCxvblZub2RlQmVmb3JlVW5tb3VudCxvblZub2RlVW5tb3VudGVkYCksRT1lPT57bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4obj0+dFtuXXx8KHRbbl09ZShuKSkpfSxEPS8tXHcvZyxPPUUoZT0+ZS5yZXBsYWNlKEQsZT0+ZS5zbGljZSgxKS50b1VwcGVyQ2FzZSgpKSksaz0vXEIoW0EtWl0pL2csQT1FKGU9PmUucmVwbGFjZShrLGAtJDFgKS50b0xvd2VyQ2FzZSgpKSxqPUUoZT0+ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKSxNPUUoZT0+ZT9gb24ke2ooZSl9YDpgYCksTj0oZSx0KT0+IU9iamVjdC5pcyhlLHQpLFA9KGUsLi4udCk9Pntmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyllW25dKC4uLnQpfSxGPShlLHQsbixyPSExKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOnIsdmFsdWU6bn0pfSxJPWU9PntsZXQgdD1wYXJzZUZsb2F0KGUpO3JldHVybiBpc05hTih0KT9lOnR9LEwsUj0oKT0+THx8PXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPGB1YD9zZWxmOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6e307ZnVuY3Rpb24geihlKXtpZihkKGUpKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXSxpPWcocik/VShyKTp6KHIpO2lmKGkpZm9yKGxldCBlIGluIGkpdFtlXT1pW2VdfXJldHVybiB0fWlmKGcoZSl8fHYoZSkpcmV0dXJuIGV9dmFyIEI9LzsoPyFbXihdKlwpKS9nLFY9LzooW15dKykvLEg9LyIoPzpbXiJcXF18XFxbXl0pKiJ8Jyg/OlteJ1xcXXxcXFteXSkqJ3xcXFteXXxcL1wqW15dKj9cKlwvL2c7ZnVuY3Rpb24gVShlKXtsZXQgdD17fTtyZXR1cm4gZS5yZXBsYWNlKEgsZT0+ZS5zdGFydHNXaXRoKGAvKmApP2BgOmUpLnNwbGl0KEIpLmZvckVhY2goZT0+e2lmKGUpe2xldCBuPWUuc3BsaXQoVik7bi5sZW5ndGg+MSYmKHRbblswXS50cmltKCldPW5bMV0udHJpbSgpKX19KSx0fWZ1bmN0aW9uIFcoZSl7bGV0IHQ9YGA7aWYoZyhlKSl0PWU7ZWxzZSBpZihkKGUpKWZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1XKGVbbl0pO3ImJih0Kz1yK2AgYCl9ZWxzZSBpZih2KGUpKWZvcihsZXQgbiBpbiBlKWVbbl0mJih0Kz1uK2AgYCk7cmV0dXJuIHQudHJpbSgpfXZhciBlZT1lKGBpdGVtc2NvcGUsYWxsb3dmdWxsc2NyZWVuLGZvcm1ub3ZhbGlkYXRlLGlzbWFwLG5vbW9kdWxlLG5vdmFsaWRhdGUscGxheXNpbmxpbmUscmVhZG9ubHlgKTtmdW5jdGlvbiBHKGUpe3JldHVybiEhZXx8ZT09PWBgfWZ1bmN0aW9uIHRlKGUsdCxuKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2xldCByPSEwO2ZvcihsZXQgaT0wO3ImJmk8ZS5sZW5ndGg7aSsrKXI9YWUoZVtpXSx0W2ldLG4pO3JldHVybiByfWZ1bmN0aW9uIG5lKGUsdCxuKXtpZihlLnNpemUhPT10LnNpemUpcmV0dXJuITE7bGV0IHI9QXJyYXkuZnJvbSh0KSxpPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKTtmb3IobGV0IHQgb2YgZSl7bGV0IGU9LTE7Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspaWYoIWlbYV0mJmFlKHQsclthXSxuKSl7ZT1hO2JyZWFrfWlmKGU8MClyZXR1cm4hMTtpW2VdPTF9cmV0dXJuITB9ZnVuY3Rpb24gcmUoZSx0LG4pe2xldCByPWYoZSksaT1mKHQpO2lmKHJ8fGl8fChyPXAoZSksaT1wKHQpLHJ8fGkpKXJldHVybiByJiZpP25lKGUsdCxuKTohMTtpZihPYmplY3Qua2V5cyhlKS5sZW5ndGghPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCByIGluIGUpe2xldCBpPWUuaGFzT3duUHJvcGVydHkociksYT10Lmhhc093blByb3BlcnR5KHIpO2lmKGkmJiFhfHwhaSYmYXx8IWFlKGVbcl0sdFtyXSxuKSlyZXR1cm4hMX1yZXR1cm4gU3RyaW5nKGUpPT09U3RyaW5nKHQpfWZ1bmN0aW9uIGllKGUsdCxuLHIpe258fD1bbmV3IE1hcCxuZXcgTWFwXTtsZXRbaSxhXT1uO2lmKGkuaGFzKGUpfHxhLmhhcyh0KSlyZXR1cm4gaS5nZXQoZSk9PT10JiZhLmdldCh0KT09PWU7aS5zZXQoZSx0KSxhLnNldCh0LGUpO2xldCBvPXIoZSx0LG4pO3JldHVybiBpLmRlbGV0ZShlKSxhLmRlbGV0ZSh0KSxvfWZ1bmN0aW9uIGFlKGUsdCxuKXtpZihlPT09dClyZXR1cm4hMDtsZXQgcj1tKGUpLGk9bSh0KTtyZXR1cm4gcnx8aT9yJiZpP2UuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk6ITE6KHI9XyhlKSxpPV8odCkscnx8aT9lPT09dDoocj1kKGUpLGk9ZCh0KSxyfHxpP3ImJmk/aWUoZSx0LG4sdGUpOiExOihyPXYoZSksaT12KHQpLHJ8fGk/IXJ8fCFpPyExOmllKGUsdCxuLHJlKTpTdHJpbmcoZSk9PT1TdHJpbmcodCkpKSl9ZnVuY3Rpb24gb2UoZSx0KXtyZXR1cm4gZS5maW5kSW5kZXgoZT0+YWUoZSx0KSl9dmFyIHNlPWU9PiEhKGUmJmUuX192X2lzUmVmPT09ITApLEs9ZT0+ZyhlKT9lOmU9PW51bGw/YGA6ZChlKXx8dihlKSYmKGUudG9TdHJpbmc9PT1ifHwhaChlLnRvU3RyaW5nKSk/c2UoZSk/SyhlLnZhbHVlKTpKU09OLnN0cmluZ2lmeShlLGNlLDIpOlN0cmluZyhlKSxjZT0oZSx0KT0+c2UodCk/Y2UoZSx0LnZhbHVlKTpmKHQpP3tbYE1hcCgke3Quc2l6ZX0pYF06Wy4uLnQuZW50cmllcygpXS5yZWR1Y2UoKGUsW3Qsbl0scik9PihlW2xlKHQscikrYCA9PmBdPW4sZSkse30pfTpwKHQpP3tbYFNldCgke3Quc2l6ZX0pYF06Wy4uLnQudmFsdWVzKCldLm1hcChlPT5sZShlKSl9Ol8odCk/bGUodCk6dih0KSYmIWQodCkmJiFDKHQpP1N0cmluZyh0KTp0LGxlPShlLHQ9YGApPT5fKGUpP2BTeW1ib2woJHtlLmRlc2NyaXB0aW9uPz90fSlgOmUsdWUsZGU9Y2xhc3N7Y29uc3RydWN0b3IoZT0hMSl7dGhpcy5kZXRhY2hlZD1lLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9vbj0wLHRoaXMuZWZmZWN0cz1bXSx0aGlzLmNsZWFudXBzPVtdLHRoaXMuX2lzUGF1c2VkPSExLHRoaXMuX3dhcm5PblJ1bj0hMCx0aGlzLl9fdl9za2lwPSEwLCFlJiZ1ZSYmKHVlLmFjdGl2ZT8odGhpcy5wYXJlbnQ9dWUsdGhpcy5pbmRleD0odWUuc2NvcGVzfHwodWUuc2NvcGVzPVtdKSkucHVzaCh0aGlzKS0xKToodGhpcy5fYWN0aXZlPSExLHRoaXMuX3dhcm5PblJ1bj0hMSkpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfXBhdXNlKCl7aWYodGhpcy5fYWN0aXZlKXt0aGlzLl9pc1BhdXNlZD0hMDtsZXQgZSx0O2lmKHRoaXMuc2NvcGVzKXtsZXQgbj10aGlzLnNjb3Blcy5zbGljZSgpO2ZvcihlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0ucGF1c2UoKX1mb3IoZT0wLHQ9dGhpcy5lZmZlY3RzLmxlbmd0aDtlPHQ7ZSsrKXRoaXMuZWZmZWN0c1tlXS5wYXVzZSgpfX1yZXN1bWUoKXtpZih0aGlzLl9hY3RpdmUmJnRoaXMuX2lzUGF1c2VkKXt0aGlzLl9pc1BhdXNlZD0hMTtsZXQgZSx0O2lmKHRoaXMuc2NvcGVzKXtsZXQgbj10aGlzLnNjb3Blcy5zbGljZSgpO2ZvcihlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV0ucmVzdW1lKCl9bGV0IG49dGhpcy5lZmZlY3RzLnNsaWNlKCk7Zm9yKGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspbltlXS5yZXN1bWUoKX19cnVuKGUpe2lmKHRoaXMuX2FjdGl2ZSl7bGV0IHQ9dWU7dHJ5e3JldHVybiB1ZT10aGlzLGUoKX1maW5hbGx5e3VlPXR9fX1vbigpeysrdGhpcy5fb249PT0xJiYodGhpcy5wcmV2U2NvcGU9dWUsdWU9dGhpcyl9b2ZmKCl7aWYodGhpcy5fb24+MCYmLS10aGlzLl9vbj09PTApe2lmKHVlPT09dGhpcyl1ZT10aGlzLnByZXZTY29wZTtlbHNle2xldCBlPXVlO2Zvcig7ZTspe2lmKGUucHJldlNjb3BlPT09dGhpcyl7ZS5wcmV2U2NvcGU9dGhpcy5wcmV2U2NvcGU7YnJlYWt9ZT1lLnByZXZTY29wZX19dGhpcy5wcmV2U2NvcGU9dm9pZCAwfX1zdG9wKGUpe2lmKHRoaXMuX2FjdGl2ZSl7dGhpcy5fYWN0aXZlPSExO2xldCB0LG47Zm9yKHQ9MCxuPXRoaXMuZWZmZWN0cy5sZW5ndGg7dDxuO3QrKyl0aGlzLmVmZmVjdHNbdF0uc3RvcCgpO2Zvcih0aGlzLmVmZmVjdHMubGVuZ3RoPTAsdD0wLG49dGhpcy5jbGVhbnVwcy5sZW5ndGg7dDxuO3QrKyl0aGlzLmNsZWFudXBzW3RdKCk7aWYodGhpcy5jbGVhbnVwcy5sZW5ndGg9MCx0aGlzLnNjb3Blcyl7bGV0IGU9dGhpcy5zY29wZXMuc2xpY2UoKTtmb3IodD0wLG49ZS5sZW5ndGg7dDxuO3QrKyllW3RdLnN0b3AoITApO3RoaXMuc2NvcGVzLmxlbmd0aD0wfWlmKCF0aGlzLmRldGFjaGVkJiZ0aGlzLnBhcmVudCYmIWUpe2xldCBlPXRoaXMucGFyZW50LnNjb3Blcy5wb3AoKTtlJiZlIT09dGhpcyYmKHRoaXMucGFyZW50LnNjb3Blc1t0aGlzLmluZGV4XT1lLGUuaW5kZXg9dGhpcy5pbmRleCl9dGhpcy5wYXJlbnQ9dm9pZCAwfX19O2Z1bmN0aW9uIGZlKCl7cmV0dXJuIHVlfXZhciBwZSxtZT1uZXcgV2Vha1NldCxoZT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZuPWUsdGhpcy5kZXBzPXZvaWQgMCx0aGlzLmRlcHNUYWlsPXZvaWQgMCx0aGlzLmZsYWdzPTUsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmNsZWFudXA9dm9pZCAwLHRoaXMuc2NoZWR1bGVyPXZvaWQgMCx1ZSYmKHVlLmFjdGl2ZT91ZS5lZmZlY3RzLnB1c2godGhpcyk6dGhpcy5mbGFncyY9LTIpfXBhdXNlKCl7dGhpcy5mbGFnc3w9NjR9cmVzdW1lKCl7dGhpcy5mbGFncyY2NCYmKHRoaXMuZmxhZ3MmPS02NSxtZS5oYXModGhpcykmJihtZS5kZWxldGUodGhpcyksdGhpcy50cmlnZ2VyKCkpKX1ub3RpZnkoKXt0aGlzLmZsYWdzJjImJiEodGhpcy5mbGFncyYzMil8fHRoaXMuZmxhZ3MmOHx8eWUodGhpcyl9cnVuKCl7aWYoISh0aGlzLmZsYWdzJjEpKXJldHVybiB0aGlzLmZuKCk7dGhpcy5mbGFnc3w9MixNZSh0aGlzKSxTZSh0aGlzKTtsZXQgZT1wZSx0PU9lO3BlPXRoaXMsT2U9ITA7dHJ5e3JldHVybiB0aGlzLmZuKCl9ZmluYWxseXtDZSh0aGlzKSxwZT1lLE9lPXQsdGhpcy5mbGFncyY9LTN9fXN0b3AoKXtpZih0aGlzLmZsYWdzJjEpe2ZvcihsZXQgZT10aGlzLmRlcHM7ZTtlPWUubmV4dERlcClFZShlKTt0aGlzLmRlcHM9dGhpcy5kZXBzVGFpbD12b2lkIDAsTWUodGhpcyksdGhpcy5vblN0b3AmJnRoaXMub25TdG9wKCksdGhpcy5mbGFncyY9LTJ9fXRyaWdnZXIoKXt0aGlzLmZsYWdzJjY0P21lLmFkZCh0aGlzKTp0aGlzLnNjaGVkdWxlcj90aGlzLnNjaGVkdWxlcigpOnRoaXMucnVuSWZEaXJ0eSgpfXJ1bklmRGlydHkoKXt3ZSh0aGlzKSYmdGhpcy5ydW4oKX1nZXQgZGlydHkoKXtyZXR1cm4gd2UodGhpcyl9fSxnZT0wLF9lLHZlO2Z1bmN0aW9uIHllKGUsdD0hMSl7ZS5mbGFnc3w9OCx0PyhlLm5leHQ9dmUsdmU9ZSk6KGUubmV4dD1fZSxfZT1lKX1mdW5jdGlvbiBiZSgpe2dlKyt9ZnVuY3Rpb24geGUoKXtpZigtLWdlPjApcmV0dXJuO2lmKHZlKXtsZXQgZT12ZTtmb3IodmU9dm9pZCAwO2U7KXtsZXQgdD1lLm5leHQ7ZS5uZXh0PXZvaWQgMCxlLmZsYWdzJj0tOSxlPXR9fWxldCBlO2Zvcig7X2U7KXtsZXQgdD1fZTtmb3IoX2U9dm9pZCAwO3Q7KXtsZXQgbj10Lm5leHQ7aWYodC5uZXh0PXZvaWQgMCx0LmZsYWdzJj0tOSx0LmZsYWdzJjEpdHJ5e3QudHJpZ2dlcigpfWNhdGNoKHQpe2V8fD10fXQ9bn19aWYoZSl0aHJvdyBlfWZ1bmN0aW9uIFNlKGUpe2ZvcihsZXQgdD1lLmRlcHM7dDt0PXQubmV4dERlcCl0LnZlcnNpb249LTEsdC5wcmV2QWN0aXZlTGluaz10LmRlcC5hY3RpdmVMaW5rLHQuZGVwLmFjdGl2ZUxpbms9dH1mdW5jdGlvbiBDZShlKXtsZXQgdCxuPWUuZGVwc1RhaWwscj1uO2Zvcig7cjspe2xldCBlPXIucHJldkRlcDtyLnZlcnNpb249PT0tMT8ocj09PW4mJihuPWUpLEVlKHIpLERlKHIpKTp0PXIsci5kZXAuYWN0aXZlTGluaz1yLnByZXZBY3RpdmVMaW5rLHIucHJldkFjdGl2ZUxpbms9dm9pZCAwLHI9ZX1lLmRlcHM9dCxlLmRlcHNUYWlsPW59ZnVuY3Rpb24gd2UoZSl7Zm9yKGxldCB0PWUuZGVwczt0O3Q9dC5uZXh0RGVwKWlmKHQuZGVwLnZlcnNpb24hPT10LnZlcnNpb258fHQuZGVwLmNvbXB1dGVkJiYoVGUodC5kZXAuY29tcHV0ZWQpfHx0LmRlcC52ZXJzaW9uIT09dC52ZXJzaW9uKSlyZXR1cm4hMDtyZXR1cm4hIWUuX2RpcnR5fWZ1bmN0aW9uIFRlKGUpe2lmKGUuZmxhZ3MmNCYmIShlLmZsYWdzJjE2KXx8KGUuZmxhZ3MmPS0xNyxlLmdsb2JhbFZlcnNpb249PT1OZSl8fChlLmdsb2JhbFZlcnNpb249TmUsIWUuaXNTU1ImJmUuZmxhZ3MmMTI4JiYoIWUuZGVwcyYmIWUuX2RpcnR5fHwhd2UoZSkpKSlyZXR1cm47ZS5mbGFnc3w9MjtsZXQgdD1lLmRlcCxuPXBlLHI9T2U7cGU9ZSxPZT0hMDt0cnl7U2UoZSk7bGV0IG49ZS5mbihlLl92YWx1ZSk7KHQudmVyc2lvbj09PTB8fE4obixlLl92YWx1ZSkpJiYoZS5mbGFnc3w9MTI4LGUuX3ZhbHVlPW4sdC52ZXJzaW9uKyspfWNhdGNoKGUpe3Rocm93IHQudmVyc2lvbisrLGV9ZmluYWxseXtwZT1uLE9lPXIsQ2UoZSksZS5mbGFncyY9LTN9fWZ1bmN0aW9uIEVlKGUsdD0hMSl7bGV0e2RlcDpuLHByZXZTdWI6cixuZXh0U3ViOml9PWU7aWYociYmKHIubmV4dFN1Yj1pLGUucHJldlN1Yj12b2lkIDApLGkmJihpLnByZXZTdWI9cixlLm5leHRTdWI9dm9pZCAwKSxuLnN1YnM9PT1lJiYobi5zdWJzPXIsIXImJm4uY29tcHV0ZWQpKXtuLmNvbXB1dGVkLmZsYWdzJj0tNTtmb3IobGV0IGU9bi5jb21wdXRlZC5kZXBzO2U7ZT1lLm5leHREZXApRWUoZSwhMCl9IXQmJiEtLW4uc2MmJm4ubWFwJiZuLm1hcC5kZWxldGUobi5rZXkpfWZ1bmN0aW9uIERlKGUpe2xldHtwcmV2RGVwOnQsbmV4dERlcDpufT1lO3QmJih0Lm5leHREZXA9bixlLnByZXZEZXA9dm9pZCAwKSxuJiYobi5wcmV2RGVwPXQsZS5uZXh0RGVwPXZvaWQgMCl9dmFyIE9lPSEwLGtlPVtdO2Z1bmN0aW9uIEFlKCl7a2UucHVzaChPZSksT2U9ITF9ZnVuY3Rpb24gamUoKXtsZXQgZT1rZS5wb3AoKTtPZT1lPT09dm9pZCAwfHxlfWZ1bmN0aW9uIE1lKGUpe2xldHtjbGVhbnVwOnR9PWU7aWYoZS5jbGVhbnVwPXZvaWQgMCx0KXtsZXQgZT1wZTtwZT12b2lkIDA7dHJ5e3QoKX1maW5hbGx5e3BlPWV9fX12YXIgTmU9MCxQZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuc3ViPWUsdGhpcy5kZXA9dCx0aGlzLnZlcnNpb249dC52ZXJzaW9uLHRoaXMubmV4dERlcD10aGlzLnByZXZEZXA9dGhpcy5uZXh0U3ViPXRoaXMucHJldlN1Yj10aGlzLnByZXZBY3RpdmVMaW5rPXZvaWQgMH19LEZlPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuY29tcHV0ZWQ9ZSx0aGlzLnZlcnNpb249MCx0aGlzLmFjdGl2ZUxpbms9dm9pZCAwLHRoaXMuc3Vicz12b2lkIDAsdGhpcy5tYXA9dm9pZCAwLHRoaXMua2V5PXZvaWQgMCx0aGlzLnNjPTAsdGhpcy5fX3Zfc2tpcD0hMH10cmFjayhlKXtpZighcGV8fCFPZXx8cGU9PT10aGlzLmNvbXB1dGVkKXJldHVybjtsZXQgdD10aGlzLmFjdGl2ZUxpbms7aWYodD09PXZvaWQgMHx8dC5zdWIhPT1wZSl0PXRoaXMuYWN0aXZlTGluaz1uZXcgUGUocGUsdGhpcykscGUuZGVwcz8odC5wcmV2RGVwPXBlLmRlcHNUYWlsLHBlLmRlcHNUYWlsLm5leHREZXA9dCxwZS5kZXBzVGFpbD10KTpwZS5kZXBzPXBlLmRlcHNUYWlsPXQsSWUodCk7ZWxzZSBpZih0LnZlcnNpb249PT0tMSYmKHQudmVyc2lvbj10aGlzLnZlcnNpb24sdC5uZXh0RGVwKSl7bGV0IGU9dC5uZXh0RGVwO2UucHJldkRlcD10LnByZXZEZXAsdC5wcmV2RGVwJiYodC5wcmV2RGVwLm5leHREZXA9ZSksdC5wcmV2RGVwPXBlLmRlcHNUYWlsLHQubmV4dERlcD12b2lkIDAscGUuZGVwc1RhaWwubmV4dERlcD10LHBlLmRlcHNUYWlsPXQscGUuZGVwcz09PXQmJihwZS5kZXBzPWUpfXJldHVybiB0fXRyaWdnZXIoZSl7dGhpcy52ZXJzaW9uKyssTmUrKyx0aGlzLm5vdGlmeShlKX1ub3RpZnkoZSl7YmUoKTt0cnl7Zm9yKGxldCBlPXRoaXMuc3VicztlO2U9ZS5wcmV2U3ViKWUuc3ViLm5vdGlmeSgpJiZlLnN1Yi5kZXAubm90aWZ5KCl9ZmluYWxseXt4ZSgpfX19O2Z1bmN0aW9uIEllKGUpe2lmKGUuZGVwLnNjKyssZS5zdWIuZmxhZ3MmNCl7bGV0IHQ9ZS5kZXAuY29tcHV0ZWQ7aWYodCYmIWUuZGVwLnN1YnMpe3QuZmxhZ3N8PTIwO2ZvcihsZXQgZT10LmRlcHM7ZTtlPWUubmV4dERlcClJZShlKX1sZXQgbj1lLmRlcC5zdWJzO24hPT1lJiYoZS5wcmV2U3ViPW4sbiYmKG4ubmV4dFN1Yj1lKSksZS5kZXAuc3Vicz1lfX12YXIgTGU9bmV3IFdlYWtNYXAsUmU9U3ltYm9sKGBgKSx6ZT1TeW1ib2woYGApLEJlPVN5bWJvbChgYCk7ZnVuY3Rpb24gVmUoZSx0LG4pe2lmKE9lJiZwZSl7bGV0IHQ9TGUuZ2V0KGUpO3R8fExlLnNldChlLHQ9bmV3IE1hcCk7bGV0IHI9dC5nZXQobik7cnx8KHQuc2V0KG4scj1uZXcgRmUpLHIubWFwPXQsci5rZXk9biksci50cmFjaygpfX1mdW5jdGlvbiBIZShlLHQsbixyLGksYSl7bGV0IG89TGUuZ2V0KGUpO2lmKCFvKXtOZSsrO3JldHVybn1sZXQgcz1lPT57ZSYmZS50cmlnZ2VyKCl9O2lmKGJlKCksdD09PWBjbGVhcmApby5mb3JFYWNoKHMpO2Vsc2V7bGV0IGk9ZChlKSxhPWkmJncobik7aWYoaSYmbj09PWBsZW5ndGhgKXtsZXQgZT1OdW1iZXIocik7by5mb3JFYWNoKCh0LG4pPT57KG49PT1gbGVuZ3RoYHx8bj09PUJlfHwhXyhuKSYmbj49ZSkmJnModCl9KX1lbHNlIHN3aXRjaCgobiE9PXZvaWQgMHx8by5oYXModm9pZCAwKSkmJnMoby5nZXQobikpLGEmJnMoby5nZXQoQmUpKSx0KXtjYXNlYGFkZGA6aT9hJiZzKG8uZ2V0KGBsZW5ndGhgKSk6KHMoby5nZXQoUmUpKSxmKGUpJiZzKG8uZ2V0KHplKSkpO2JyZWFrO2Nhc2VgZGVsZXRlYDppfHwocyhvLmdldChSZSkpLGYoZSkmJnMoby5nZXQoemUpKSk7YnJlYWs7Y2FzZWBzZXRgOmYoZSkmJnMoby5nZXQoUmUpKX19eGUoKX1mdW5jdGlvbiBVZShlKXtsZXQgdD1qdChlKTtyZXR1cm4gdD09PWV8fChWZSh0LGBpdGVyYXRlYCxCZSksa3QoZSkpP3Q6T3QoZSk/RHQoZSk/dC5tYXAoZT0+UHQoTnQoZSkpKTp0Lm1hcChQdCk6dC5tYXAoTnQpfWZ1bmN0aW9uIFdlKGUpe3JldHVybiBWZShlPWp0KGUpLGBpdGVyYXRlYCxCZSksZX1mdW5jdGlvbiBHZShlLHQpe3JldHVybiBPdChlKT9QdChEdChlKT9OdCh0KTp0KTpOdCh0KX12YXIgS2U9e19fcHJvdG9fXzpudWxsLFtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHFlKHRoaXMsU3ltYm9sLml0ZXJhdG9yLGU9PkdlKHRoaXMsZSkpfSxjb25jYXQoLi4uZSl7cmV0dXJuIFVlKHRoaXMpLmNvbmNhdCguLi5lLm1hcChlPT5kKGUpP1VlKGUpOmUpKX0sZW50cmllcygpe3JldHVybiBxZSh0aGlzLGBlbnRyaWVzYCxlPT4oZVsxXT1HZSh0aGlzLGVbMV0pLGUpKX0sZXZlcnkoZSx0KXtyZXR1cm4gWGUodGhpcyxgZXZlcnlgLGUsdCx2b2lkIDAsYXJndW1lbnRzKX0sZmlsdGVyKGUsdCl7cmV0dXJuIFhlKHRoaXMsYGZpbHRlcmAsZSx0LGU9PmUubWFwKGU9PkdlKHRoaXMsZSkpLGFyZ3VtZW50cyl9LGZpbmQoZSx0KXtyZXR1cm4gWGUodGhpcyxgZmluZGAsZSx0LGU9PkdlKHRoaXMsZSksYXJndW1lbnRzKX0sZmluZEluZGV4KGUsdCl7cmV0dXJuIFhlKHRoaXMsYGZpbmRJbmRleGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxmaW5kTGFzdChlLHQpe3JldHVybiBYZSh0aGlzLGBmaW5kTGFzdGAsZSx0LGU9PkdlKHRoaXMsZSksYXJndW1lbnRzKX0sZmluZExhc3RJbmRleChlLHQpe3JldHVybiBYZSh0aGlzLGBmaW5kTGFzdEluZGV4YCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LGZvckVhY2goZSx0KXtyZXR1cm4gWGUodGhpcyxgZm9yRWFjaGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxpbmNsdWRlcyguLi5lKXtyZXR1cm4gUWUodGhpcyxgaW5jbHVkZXNgLGUpfSxpbmRleE9mKC4uLmUpe3JldHVybiBRZSh0aGlzLGBpbmRleE9mYCxlKX0sam9pbihlKXtyZXR1cm4gVWUodGhpcykuam9pbihlKX0sbGFzdEluZGV4T2YoLi4uZSl7cmV0dXJuIFFlKHRoaXMsYGxhc3RJbmRleE9mYCxlKX0sbWFwKGUsdCl7cmV0dXJuIFhlKHRoaXMsYG1hcGAsZSx0LHZvaWQgMCxhcmd1bWVudHMpfSxwb3AoKXtyZXR1cm4gJGUodGhpcyxgcG9wYCl9LHB1c2goLi4uZSl7cmV0dXJuICRlKHRoaXMsYHB1c2hgLGUpfSxyZWR1Y2UoZSwuLi50KXtyZXR1cm4gWmUodGhpcyxgcmVkdWNlYCxlLHQpfSxyZWR1Y2VSaWdodChlLC4uLnQpe3JldHVybiBaZSh0aGlzLGByZWR1Y2VSaWdodGAsZSx0KX0sc2hpZnQoKXtyZXR1cm4gJGUodGhpcyxgc2hpZnRgKX0sc29tZShlLHQpe3JldHVybiBYZSh0aGlzLGBzb21lYCxlLHQsdm9pZCAwLGFyZ3VtZW50cyl9LHNwbGljZSguLi5lKXtyZXR1cm4gJGUodGhpcyxgc3BsaWNlYCxlKX0sdG9SZXZlcnNlZCgpe3JldHVybiBVZSh0aGlzKS50b1JldmVyc2VkKCl9LHRvU29ydGVkKGUpe3JldHVybiBVZSh0aGlzKS50b1NvcnRlZChlKX0sdG9TcGxpY2VkKC4uLmUpe3JldHVybiBVZSh0aGlzKS50b1NwbGljZWQoLi4uZSl9LHVuc2hpZnQoLi4uZSl7cmV0dXJuICRlKHRoaXMsYHVuc2hpZnRgLGUpfSx2YWx1ZXMoKXtyZXR1cm4gcWUodGhpcyxgdmFsdWVzYCxlPT5HZSh0aGlzLGUpKX19O2Z1bmN0aW9uIHFlKGUsdCxuKXtsZXQgcj1XZShlKSxpPXJbdF0sYT1pLmNhbGwocik7aWYociE9PWUmJiFrdChlKSl7aWYoYVtTeW1ib2wudG9TdHJpbmdUYWddPT09YEFycmF5IEl0ZXJhdG9yYCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpO3JldHVybiBlLm5leHQ9KCk9PkplKGEubmV4dCgpLG4pLGkhPT1ZZVt0XSYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSx7cmV0dXJuOntnZXQoKXtsZXQgZT1hLnJldHVybjtyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZS5iaW5kKGEpOmV9fSx0aHJvdzp7Z2V0KCl7bGV0IGU9YS50aHJvdztyZXR1cm4gdHlwZW9mIGU9PWBmdW5jdGlvbmA/ZS5iaW5kKGEpOmV9fX0pLGV9YS5fbmV4dD1hLm5leHQsYS5uZXh0PSgpPT5KZShhLl9uZXh0KCksbil9cmV0dXJuIGF9ZnVuY3Rpb24gSmUoZSx0KXtyZXR1cm4gZS5kb25lfHwoZS52YWx1ZT10KGUudmFsdWUpKSxlfXZhciBZZT1BcnJheS5wcm90b3R5cGU7ZnVuY3Rpb24gWGUoZSx0LG4scixpLGEpe2xldCBvPVdlKGUpLHM9byE9PWUmJiFrdChlKSxjPW9bdF07aWYoYyE9PVllW3RdKXtsZXQgdD1jLmFwcGx5KGUsYSk7cmV0dXJuIHM/TnQodCk6dH1sZXQgbD1uO28hPT1lJiYocz9sPWZ1bmN0aW9uKHQscil7cmV0dXJuIG4uY2FsbCh0aGlzLEdlKGUsdCkscixlKX06bi5sZW5ndGg+MiYmKGw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCxyLGUpfSkpO2xldCB1PWMuY2FsbChvLGwscik7cmV0dXJuIHMmJmk/aSh1KTp1fWZ1bmN0aW9uIFplKGUsdCxuLHIpe2xldCBpPVdlKGUpLGE9aSE9PWUmJiFrdChlKSxvPW4scz0hMTtpIT09ZSYmKGE/KHM9ci5sZW5ndGg9PT0wLG89ZnVuY3Rpb24odCxyLGkpe3JldHVybiBzJiYocz0hMSx0PUdlKGUsdCkpLG4uY2FsbCh0aGlzLHQsR2UoZSxyKSxpLGUpfSk6bi5sZW5ndGg+MyYmKG89ZnVuY3Rpb24odCxyLGkpe3JldHVybiBuLmNhbGwodGhpcyx0LHIsaSxlKX0pKTtsZXQgYz1pW3RdKG8sLi4ucik7cmV0dXJuIHM/R2UoZSxjKTpjfWZ1bmN0aW9uIFFlKGUsdCxuKXtsZXQgcj1qdChlKTtWZShyLGBpdGVyYXRlYCxCZSk7bGV0IGk9clt0XSguLi5uKTtyZXR1cm4oaT09PS0xfHxpPT09ITEpJiZBdChuWzBdKT8oblswXT1qdChuWzBdKSxyW3RdKC4uLm4pKTppfWZ1bmN0aW9uICRlKGUsdCxuPVtdKXtBZSgpLGJlKCk7bGV0IHI9anQoZSlbdF0uYXBwbHkoZSxuKTtyZXR1cm4geGUoKSxqZSgpLHJ9dmFyIGV0PWUoYF9fcHJvdG9fXyxfX3ZfaXNSZWYsX19pc1Z1ZWApLHR0PW5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3ltYm9sKS5maWx0ZXIoZT0+ZSE9PWBhcmd1bWVudHNgJiZlIT09YGNhbGxlcmApLm1hcChlPT5TeW1ib2xbZV0pLmZpbHRlcihfKSk7ZnVuY3Rpb24gbnQoZSl7XyhlKXx8KGU9U3RyaW5nKGUpKTtsZXQgdD1qdCh0aGlzKTtyZXR1cm4gVmUodCxgaGFzYCxlKSx0Lmhhc093blByb3BlcnR5KGUpfXZhciBydD1jbGFzc3tjb25zdHJ1Y3RvcihlPSExLHQ9ITEpe3RoaXMuX2lzUmVhZG9ubHk9ZSx0aGlzLl9pc1NoYWxsb3c9dH1nZXQoZSx0LG4pe2lmKHQ9PT1gX192X3NraXBgKXJldHVybiBlLl9fdl9za2lwO2xldCByPXRoaXMuX2lzUmVhZG9ubHksaT10aGlzLl9pc1NoYWxsb3c7aWYodD09PWBfX3ZfaXNSZWFjdGl2ZWApcmV0dXJuIXI7aWYodD09PWBfX3ZfaXNSZWFkb25seWApcmV0dXJuIHI7aWYodD09PWBfX3ZfaXNTaGFsbG93YClyZXR1cm4gaTtpZih0PT09YF9fdl9yYXdgKXJldHVybiBuPT09KHI/aT94dDpidDppP3l0OnZ0KS5nZXQoZSl8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PU9iamVjdC5nZXRQcm90b3R5cGVPZihuKT9lOnZvaWQgMDtsZXQgYT1kKGUpO2lmKCFyKXtsZXQgZTtpZihhJiYoZT1LZVt0XSkpcmV0dXJuIGU7aWYodD09PWBoYXNPd25Qcm9wZXJ0eWApcmV0dXJuIG50fWxldCBvPVJlZmxlY3QuZ2V0KGUsdCxGdChlKT9lOm4pO2lmKChfKHQpP3R0Lmhhcyh0KTpldCh0KSl8fChyfHxWZShlLGBnZXRgLHQpLGkpKXJldHVybiBvO2lmKEZ0KG8pKXtsZXQgZT1hJiZ3KHQpP286by52YWx1ZTtyZXR1cm4gciYmdihlKT9UdChlKTplfXJldHVybiB2KG8pP3I/VHQobyk6Q3Qobyk6b319LGl0PWNsYXNzIGV4dGVuZHMgcnR7Y29uc3RydWN0b3IoZT0hMSl7c3VwZXIoITEsZSl9c2V0KGUsdCxuLHIpe2xldCBpPWVbdF0sYT1kKGUpJiZ3KHQpO2lmKCF0aGlzLl9pc1NoYWxsb3cpe2xldCBlPU90KGkpO2lmKCFrdChuKSYmIU90KG4pJiYoaT1qdChpKSxuPWp0KG4pKSwhYSYmRnQoaSkmJiFGdChuKSlyZXR1cm4gZXx8KGkudmFsdWU9biksITB9bGV0IG89YT9OdW1iZXIodCk8ZS5sZW5ndGg6dShlLHQpLHM9UmVmbGVjdC5zZXQoZSx0LG4sRnQoZSk/ZTpyKTtyZXR1cm4gZT09PWp0KHIpJiZzJiYobz9OKG4saSkmJkhlKGUsYHNldGAsdCxuLGkpOkhlKGUsYGFkZGAsdCxuKSksc31kZWxldGVQcm9wZXJ0eShlLHQpe2xldCBuPXUoZSx0KSxyPWVbdF0saT1SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGUsdCk7cmV0dXJuIGkmJm4mJkhlKGUsYGRlbGV0ZWAsdCx2b2lkIDAsciksaX1oYXMoZSx0KXtsZXQgbj1SZWZsZWN0LmhhcyhlLHQpO3JldHVybiBfKHQpJiZ0dC5oYXModCl8fFZlKGUsYGhhc2AsdCksbn1vd25LZXlzKGUpe3JldHVybiBWZShlLGBpdGVyYXRlYCxkKGUpP2BsZW5ndGhgOlJlKSxSZWZsZWN0Lm93bktleXMoZSl9fSxhdD1jbGFzcyBleHRlbmRzIHJ0e2NvbnN0cnVjdG9yKGU9ITEpe3N1cGVyKCEwLGUpfXNldChlLHQpe3JldHVybiEwfWRlbGV0ZVByb3BlcnR5KGUsdCl7cmV0dXJuITB9fSxvdD1uZXcgaXQsc3Q9bmV3IGF0LGN0PW5ldyBpdCghMCksbHQ9ZT0+ZSx1dD1lPT5SZWZsZWN0LmdldFByb3RvdHlwZU9mKGUpO2Z1bmN0aW9uIGR0KGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oLi4ucil7bGV0IGk9dGhpcy5fX3ZfcmF3LGE9anQoaSksbz1mKGEpLGM9ZT09PWBlbnRyaWVzYHx8ZT09PVN5bWJvbC5pdGVyYXRvciYmbyxsPWU9PT1ga2V5c2AmJm8sdT1pW2VdKC4uLnIpLGQ9bj9sdDp0P1B0Ok50O3JldHVybiF0JiZWZShhLGBpdGVyYXRlYCxsP3plOlJlKSxzKE9iamVjdC5jcmVhdGUodSkse25leHQoKXtsZXR7dmFsdWU6ZSxkb25lOnR9PXUubmV4dCgpO3JldHVybiB0P3t2YWx1ZTplLGRvbmU6dH06e3ZhbHVlOmM/W2QoZVswXSksZChlWzFdKV06ZChlKSxkb25lOnR9fX0pfX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZnVuY3Rpb24oLi4udCl7cmV0dXJuIGU9PT1gZGVsZXRlYD8hMTplPT09YGNsZWFyYD92b2lkIDA6dGhpc319ZnVuY3Rpb24gcHQoZSx0KXtsZXQgbj17Z2V0KG4pe2xldCByPXRoaXMuX192X3JhdyxpPWp0KHIpLGE9anQobik7ZXx8KE4obixhKSYmVmUoaSxgZ2V0YCxuKSxWZShpLGBnZXRgLGEpKTtsZXR7aGFzOm99PXV0KGkpLHM9dD9sdDplP1B0Ok50O2lmKG8uY2FsbChpLG4pKXJldHVybiBzKHIuZ2V0KG4pKTtpZihvLmNhbGwoaSxhKSlyZXR1cm4gcyhyLmdldChhKSk7ciE9PWkmJnIuZ2V0KG4pfSxnZXQgc2l6ZSgpe2xldCB0PXRoaXMuX192X3JhdztyZXR1cm4hZSYmVmUoanQodCksYGl0ZXJhdGVgLFJlKSx0LnNpemV9LGhhcyh0KXtsZXQgbj10aGlzLl9fdl9yYXcscj1qdChuKSxpPWp0KHQpO3JldHVybiBlfHwoTih0LGkpJiZWZShyLGBoYXNgLHQpLFZlKHIsYGhhc2AsaSkpLHQ9PT1pP24uaGFzKHQpOm4uaGFzKHQpfHxuLmhhcyhpKX0sZm9yRWFjaChuLHIpe2xldCBpPXRoaXMsYT1pLl9fdl9yYXcsbz1qdChhKSxzPXQ/bHQ6ZT9QdDpOdDtyZXR1cm4hZSYmVmUobyxgaXRlcmF0ZWAsUmUpLGEuZm9yRWFjaCgoZSx0KT0+bi5jYWxsKHIscyhlKSxzKHQpLGkpKX19O3JldHVybiBzKG4sZT97YWRkOmZ0KGBhZGRgKSxzZXQ6ZnQoYHNldGApLGRlbGV0ZTpmdChgZGVsZXRlYCksY2xlYXI6ZnQoYGNsZWFyYCl9OnthZGQoZSl7bGV0IG49anQodGhpcykscj11dChuKSxpPWp0KGUpLGE9IXQmJiFrdChlKSYmIU90KGUpP2k6ZTtyZXR1cm4gci5oYXMuY2FsbChuLGEpfHxOKGUsYSkmJnIuaGFzLmNhbGwobixlKXx8TihpLGEpJiZyLmhhcy5jYWxsKG4saSl8fChuLmFkZChhKSxIZShuLGBhZGRgLGEsYSkpLHRoaXN9LHNldChlLG4pe3R8fGt0KG4pfHxPdChuKXx8KG49anQobikpO2xldCByPWp0KHRoaXMpLHtoYXM6aSxnZXQ6YX09dXQociksbz1pLmNhbGwocixlKTtvfHw9KGU9anQoZSksaS5jYWxsKHIsZSkpO2xldCBzPWEuY2FsbChyLGUpO3JldHVybiByLnNldChlLG4pLG8/TihuLHMpJiZIZShyLGBzZXRgLGUsbixzKTpIZShyLGBhZGRgLGUsbiksdGhpc30sZGVsZXRlKGUpe2xldCB0PWp0KHRoaXMpLHtoYXM6bixnZXQ6cn09dXQodCksaT1uLmNhbGwodCxlKTtpfHw9KGU9anQoZSksbi5jYWxsKHQsZSkpO2xldCBhPXI/ci5jYWxsKHQsZSk6dm9pZCAwLG89dC5kZWxldGUoZSk7cmV0dXJuIGkmJkhlKHQsYGRlbGV0ZWAsZSx2b2lkIDAsYSksb30sY2xlYXIoKXtsZXQgZT1qdCh0aGlzKSx0PWUuc2l6ZSE9PTAsbj1lLmNsZWFyKCk7cmV0dXJuIHQmJkhlKGUsYGNsZWFyYCx2b2lkIDAsdm9pZCAwLHZvaWQgMCksbn19KSxbYGtleXNgLGB2YWx1ZXNgLGBlbnRyaWVzYCxTeW1ib2wuaXRlcmF0b3JdLmZvckVhY2gocj0+e25bcl09ZHQocixlLHQpfSksbn1mdW5jdGlvbiBtdChlLHQpe2xldCBuPXB0KGUsdCk7cmV0dXJuKHIsaSxhKT0+aT09PWBfX3ZfaXNSZWFjdGl2ZWA/IWU6aT09PWBfX3ZfaXNSZWFkb25seWA/ZTppPT09YF9fdl9pc1NoYWxsb3dgP3Q6aT09PWBfX3ZfcmF3YD9yOlJlZmxlY3QuZ2V0KHUobixpKSYmaSBpbiByP246cixpLGEpfXZhciBodD17Z2V0Om10KCExLCExKX0sZ3Q9e2dldDptdCghMSwhMCl9LF90PXtnZXQ6bXQoITAsITEpfSx2dD1uZXcgV2Vha01hcCx5dD1uZXcgV2Vha01hcCxidD1uZXcgV2Vha01hcCx4dD1uZXcgV2Vha01hcDtmdW5jdGlvbiBTdChlKXtzd2l0Y2goZSl7Y2FzZWBPYmplY3RgOmNhc2VgQXJyYXlgOnJldHVybiAxO2Nhc2VgTWFwYDpjYXNlYFNldGA6Y2FzZWBXZWFrTWFwYDpjYXNlYFdlYWtTZXRgOnJldHVybiAyO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIEN0KGUpe3JldHVybiBPdChlKT9lOkV0KGUsITEsb3QsaHQsdnQpfWZ1bmN0aW9uIHd0KGUpe3JldHVybiBFdChlLCExLGN0LGd0LHl0KX1mdW5jdGlvbiBUdChlKXtyZXR1cm4gRXQoZSwhMCxzdCxfdCxidCl9ZnVuY3Rpb24gRXQoZSx0LG4scixpKXtpZighdihlKXx8ZS5fX3ZfcmF3JiYhKHQmJmUuX192X2lzUmVhY3RpdmUpfHxlLl9fdl9za2lwfHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShlKSlyZXR1cm4gZTtsZXQgYT1pLmdldChlKTtpZihhKXJldHVybiBhO2xldCBvPVN0KFMoZSkpO2lmKG89PT0wKXJldHVybiBlO2xldCBzPW5ldyBQcm94eShlLG89PT0yP3I6bik7cmV0dXJuIGkuc2V0KGUscyksc31mdW5jdGlvbiBEdChlKXtyZXR1cm4gT3QoZSk/RHQoZS5fX3ZfcmF3KTohIShlJiZlLl9fdl9pc1JlYWN0aXZlKX1mdW5jdGlvbiBPdChlKXtyZXR1cm4hIShlJiZlLl9fdl9pc1JlYWRvbmx5KX1mdW5jdGlvbiBrdChlKXtyZXR1cm4hIShlJiZlLl9fdl9pc1NoYWxsb3cpfWZ1bmN0aW9uIEF0KGUpe3JldHVybiBlPyEhZS5fX3ZfcmF3OiExfWZ1bmN0aW9uIGp0KGUpe2xldCB0PWUmJmUuX192X3JhdztyZXR1cm4gdD9qdCh0KTplfWZ1bmN0aW9uIE10KGUpe3JldHVybiF1KGUsYF9fdl9za2lwYCkmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJkYoZSxgX192X3NraXBgLCEwKSxlfXZhciBOdD1lPT52KGUpP0N0KGUpOmUsUHQ9ZT0+dihlKT9UdChlKTplO2Z1bmN0aW9uIEZ0KGUpe3JldHVybiBlP2UuX192X2lzUmVmPT09ITA6ITF9ZnVuY3Rpb24gSXQoZSl7cmV0dXJuIEx0KGUsITEpfWZ1bmN0aW9uIEx0KGUsdCl7cmV0dXJuIEZ0KGUpP2U6bmV3IFJ0KGUsdCl9dmFyIFJ0PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kZXA9bmV3IEZlLHRoaXMuX192X2lzUmVmPSEwLHRoaXMuX192X2lzU2hhbGxvdz0hMSx0aGlzLl9yYXdWYWx1ZT10P2U6anQoZSksdGhpcy5fdmFsdWU9dD9lOk50KGUpLHRoaXMuX192X2lzU2hhbGxvdz10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmRlcC50cmFjaygpLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXtsZXQgdD10aGlzLl9yYXdWYWx1ZSxuPXRoaXMuX192X2lzU2hhbGxvd3x8a3QoZSl8fE90KGUpO2U9bj9lOmp0KGUpLE4oZSx0KSYmKHRoaXMuX3Jhd1ZhbHVlPWUsdGhpcy5fdmFsdWU9bj9lOk50KGUpLHRoaXMuZGVwLnRyaWdnZXIoKSl9fTtmdW5jdGlvbiB6dChlKXtyZXR1cm4gRnQoZSk/ZS52YWx1ZTplfXZhciBCdD17Z2V0OihlLHQsbik9PnQ9PT1gX192X3Jhd2A/ZTp6dChSZWZsZWN0LmdldChlLHQsbikpLHNldDooZSx0LG4scik9PntsZXQgaT1lW3RdO3JldHVybiBGdChpKSYmIUZ0KG4pPyhpLnZhbHVlPW4sITApOlJlZmxlY3Quc2V0KGUsdCxuLHIpfX07ZnVuY3Rpb24gVnQoZSl7cmV0dXJuIER0KGUpP2U6bmV3IFByb3h5KGUsQnQpfXZhciBIdD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5mbj1lLHRoaXMuc2V0dGVyPXQsdGhpcy5fdmFsdWU9dm9pZCAwLHRoaXMuZGVwPW5ldyBGZSh0aGlzKSx0aGlzLl9fdl9pc1JlZj0hMCx0aGlzLmRlcHM9dm9pZCAwLHRoaXMuZGVwc1RhaWw9dm9pZCAwLHRoaXMuZmxhZ3M9MTYsdGhpcy5nbG9iYWxWZXJzaW9uPU5lLTEsdGhpcy5uZXh0PXZvaWQgMCx0aGlzLmVmZmVjdD10aGlzLHRoaXMuX192X2lzUmVhZG9ubHk9IXQsdGhpcy5pc1NTUj1ufW5vdGlmeSgpe2lmKHRoaXMuZmxhZ3N8PTE2LCEodGhpcy5mbGFncyY4KSYmcGUhPT10aGlzKXJldHVybiB5ZSh0aGlzLCEwKSwhMH1nZXQgdmFsdWUoKXtsZXQgZT10aGlzLmRlcC50cmFjaygpO3JldHVybiBUZSh0aGlzKSxlJiYoZS52ZXJzaW9uPXRoaXMuZGVwLnZlcnNpb24pLHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXt0aGlzLnNldHRlciYmdGhpcy5zZXR0ZXIoZSl9fTtmdW5jdGlvbiBVdChlLHQsbj0hMSl7bGV0IHIsaTtyZXR1cm4gaChlKT9yPWU6KHI9ZS5nZXQsaT1lLnNldCksbmV3IEh0KHIsaSxuKX12YXIgV3Q9e30sR3Q9bmV3IFdlYWtNYXAsS3Q9dm9pZCAwO2Z1bmN0aW9uIHF0KGUsdD0hMSxuPUt0KXtpZihuKXtsZXQgdD1HdC5nZXQobik7dHx8R3Quc2V0KG4sdD1bXSksdC5wdXNoKGUpfX1mdW5jdGlvbiBKdChlLG4saT10KXtsZXR7aW1tZWRpYXRlOmEsZGVlcDpvLG9uY2U6cyxzY2hlZHVsZXI6bCxhdWdtZW50Sm9iOnUsY2FsbDpmfT1pLHA9ZT0+bz9lOmt0KGUpfHxvPT09ITF8fG89PT0wP1l0KGUsMSk6WXQoZSksbSxnLF8sdix5PSExLGI9ITE7aWYoRnQoZSk/KGc9KCk9PmUudmFsdWUseT1rdChlKSk6RHQoZSk/KGc9KCk9PnAoZSkseT0hMCk6ZChlKT8oYj0hMCx5PWUuc29tZShlPT5EdChlKXx8a3QoZSkpLGc9KCk9PmUubWFwKGU9PntpZihGdChlKSlyZXR1cm4gZS52YWx1ZTtpZihEdChlKSlyZXR1cm4gcChlKTtpZihoKGUpKXJldHVybiBmP2YoZSwyKTplKCl9KSk6Zz1oKGUpP24/Zj8oKT0+ZihlLDIpOmU6KCk9PntpZihfKXtBZSgpO3RyeXtfKCl9ZmluYWxseXtqZSgpfX1sZXQgdD1LdDtLdD1tO3RyeXtyZXR1cm4gZj9mKGUsMyxbdl0pOmUodil9ZmluYWxseXtLdD10fX06cixuJiZvKXtsZXQgZT1nLHQ9bz09PSEwPzEvMDpvO2c9KCk9Pll0KGUoKSx0KX1sZXQgeD1mZSgpLFM9KCk9PnttLnN0b3AoKSx4JiZ4LmFjdGl2ZSYmYyh4LmVmZmVjdHMsbSl9O2lmKHMmJm4pe2xldCBlPW47bj0oLi4udCk9Pnt0cnl7cmV0dXJuIGUoLi4udCl9ZmluYWxseXtTKCl9fX1sZXQgQz1iP0FycmF5KGUubGVuZ3RoKS5maWxsKFd0KTpXdCx3PWU9PntpZihtLmZsYWdzJjEmJihtLmRpcnR5fHxlKSl7aWYobil7bGV0IHQ9bS5ydW4oKTtpZihlfHxvfHx5fHwoYj90LnNvbWUoKGUsdCk9Pk4oZSxDW3RdKSk6Tih0LEMpKSl7bGV0IGU9S3Q7QWUoKTt0cnl7XyYmXygpLEt0PW07bGV0IGU9W3QsQz09PVd0P3ZvaWQgMDpiJiZDWzBdPT09V3Q/W106Qyx2XTtDPXQsZj9mKG4sMyxlKTpuKC4uLmUpfWZpbmFsbHl7S3Q9ZSxqZSgpfX19ZWxzZSBtLnJ1bigpfX07cmV0dXJuIHUmJnUodyksbT1uZXcgaGUoZyksbS5zY2hlZHVsZXI9bD8oKT0+bCh3LCExKTp3LHY9ZT0+cXQoZSwhMSxtKSxfPW0ub25TdG9wPSgpPT57bGV0IGU9R3QuZ2V0KG0pO2lmKGUpe2lmKGYpZihlLDQpO2Vsc2UgZm9yKGxldCB0IG9mIGUpdCgpO0d0LmRlbGV0ZShtKX19LG4/YT93KCEwKTpDPW0ucnVuKCk6bD9sKHcuYmluZChudWxsLCEwKSwhMCk6bS5ydW4oKSxTLnBhdXNlPW0ucGF1c2UuYmluZChtKSxTLnJlc3VtZT1tLnJlc3VtZS5iaW5kKG0pLFMuc3RvcD1TLFN9ZnVuY3Rpb24gWXQoZSx0PTEvMCxuKXtpZih0PD0wfHwhdihlKXx8ZS5fX3Zfc2tpcHx8KG58fD1uZXcgTWFwLChuLmdldChlKXx8MCk+PXQpKXJldHVybiBlO2lmKG4uc2V0KGUsdCksdC0tLEZ0KGUpKVl0KGUudmFsdWUsdCxuKTtlbHNlIGlmKGQoZSkpZm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspWXQoZVtyXSx0LG4pO2Vsc2UgaWYocChlKXx8ZihlKSllLmZvckVhY2goZT0+e1l0KGUsdCxuKX0pO2Vsc2UgaWYoQyhlKSl7Zm9yKGxldCByIGluIGUpWXQoZVtyXSx0LG4pO2ZvcihsZXQgciBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpKU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChlLHIpJiZZdChlW3JdLHQsbil9cmV0dXJuIGV9ZnVuY3Rpb24gWHQoZSx0LG4scil7dHJ5e3JldHVybiByP2UoLi4ucik6ZSgpfWNhdGNoKGUpe1F0KGUsdCxuKX19ZnVuY3Rpb24gWnQoZSx0LG4scil7aWYoaChlKSl7bGV0IGk9WHQoZSx0LG4scik7cmV0dXJuIGkmJnkoaSkmJmkuY2F0Y2goZT0+e1F0KGUsdCxuKX0pLGl9aWYoZChlKSl7bGV0IGk9W107Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspaS5wdXNoKFp0KGVbYV0sdCxuLHIpKTtyZXR1cm4gaX19ZnVuY3Rpb24gUXQoZSxuLHIsaT0hMCl7bGV0IGE9bj9uLnZub2RlOm51bGwse2Vycm9ySGFuZGxlcjpvLHRocm93VW5oYW5kbGVkRXJyb3JJblByb2R1Y3Rpb246c309biYmbi5hcHBDb250ZXh0LmNvbmZpZ3x8dDtpZihuKXtsZXQgdD1uLnBhcmVudCxpPW4ucHJveHksYT1gaHR0cHM6Ly92dWVqcy5vcmcvZXJyb3ItcmVmZXJlbmNlLyNydW50aW1lLSR7cn1gO2Zvcig7dDspe2xldCBuPXQuZWM7aWYobil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoblt0XShlLGksYSk9PT0hMSlyZXR1cm59dD10LnBhcmVudH1pZihvKXtBZSgpLFh0KG8sbnVsbCwxMCxbZSxpLGFdKSxqZSgpO3JldHVybn19JHQoZSxyLGEsaSxzKX1mdW5jdGlvbiAkdChlLHQsbixyPSEwLGk9ITEpe2lmKGkpdGhyb3cgZTtjb25zb2xlLmVycm9yKGUpfXZhciBlbj1bXSx0bj0tMSxubj1bXSxybj1udWxsLGFuPTAsb249UHJvbWlzZS5yZXNvbHZlKCksc249bnVsbDtmdW5jdGlvbiBjbihlKXtsZXQgdD1zbnx8b247cmV0dXJuIGU/dC50aGVuKHRoaXM/ZS5iaW5kKHRoaXMpOmUpOnR9ZnVuY3Rpb24gbG4oZSl7bGV0IHQ9dG4rMSxuPWVuLmxlbmd0aDtmb3IoO3Q8bjspe2xldCByPXQrbj4+PjEsaT1lbltyXSxhPV9uKGkpO2E8ZXx8YT09PWUmJmkuZmxhZ3MmMj90PXIrMTpuPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gdW4oZSl7aWYoIShlLmZsYWdzJjEpKXtsZXQgdD1fbihlKSxuPWVuW2VuLmxlbmd0aC0xXTshbnx8IShlLmZsYWdzJjIpJiZ0Pj1fbihuKT9lbi5wdXNoKGUpOmVuLnNwbGljZShsbih0KSwwLGUpLGUuZmxhZ3N8PTEsZG4oKX19ZnVuY3Rpb24gZG4oKXtzbnx8PW9uLnRoZW4odm4pfWZ1bmN0aW9uIGZuKGUpe2lmKCFkKGUpKXJuJiZlLmlkPT09LTE/cm4uc3BsaWNlKGFuKzEsMCxlKTplLmZsYWdzJjF8fChubi5wdXNoKGUpLGUuZmxhZ3N8PTEpO2Vsc2UgZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspbm4ucHVzaChlW3RdKTtkbigpfWZ1bmN0aW9uIHBuKGUsdCxuLHI9dG4rMSl7Zm9yKDtyPGVuLmxlbmd0aDtyKyspe2xldCBuPWVuW3JdO2lmKG4mJm4uZmxhZ3MmMil7aWYoZSYmbi5pZCE9PWUudWlkfHx0IT09dm9pZCAwJiYhKG4uaWQ+PXQpKWNvbnRpbnVlO2VuLnNwbGljZShyLDEpLHI9ZT9yLTE6dG4sbi5mbGFncyY0JiYobi5mbGFncyY9LTIpLG4oKSxuLmZsYWdzJjR8fChuLmZsYWdzJj0tMil9fX1mdW5jdGlvbiBtbihlLHQsbj0wKXtpZihubi5sZW5ndGgpe2xldCBlPW5uLHI9MDtpZih0KXtlPVtdO2ZvcihsZXQgaT0wO2k8bm4ubGVuZ3RoO2krKyl7bGV0IGE9bm5baV07KGEuaT09PXZvaWQgMD90LmhhcyhhKTohYS5pfHxhLmkudWlkPG4pP25uW3IrK109YTplLnB1c2goYSl9fWxldCBpPVsuLi5uZXcgU2V0KGUpXS5zb3J0KChlLHQpPT5fbihlKS1fbih0KSk7aWYobm4ubGVuZ3RoPXIscm4pe2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKXJuLnB1c2goaVtlXSk7cmV0dXJufWZvcihybj1pLGFuPTA7YW48cm4ubGVuZ3RoO2FuKyspe2xldCBlPXJuW2FuXTtlLmZsYWdzJjQmJihlLmZsYWdzJj0tMiksZS5mbGFncyY4fHxlKCksZS5mbGFncyY9LTJ9cm49bnVsbCxhbj0wfX12YXIgaG49ITE7ZnVuY3Rpb24gZ24oZSx0KXtpZihobil7ZSgpO3JldHVybn1sZXQgbj10PT09dm9pZCAwP3ZvaWQgMDpuZXcgU2V0KG5uKTtlKCksaG49ITA7dHJ5e3BuKHZvaWQgMCx0KSxtbih2b2lkIDAsbix0KX1maW5hbGx5e2huPSExfX12YXIgX249ZT0+ZS5pZD09bnVsbD9lLmZsYWdzJjI/LTE6MS8wOmUuaWQ7ZnVuY3Rpb24gdm4oZSl7dHJ5e2Zvcih0bj0wO3RuPGVuLmxlbmd0aDt0bisrKXtsZXQgZT1lblt0bl07ZSYmIShlLmZsYWdzJjgpJiYoZS5mbGFncyY0JiYoZS5mbGFncyY9LTIpLFh0KGUsZS5pLGUuaT8xNToxNCksZS5mbGFncyY0fHwoZS5mbGFncyY9LTIpKX19ZmluYWxseXtmb3IoO3RuPGVuLmxlbmd0aDt0bisrKXtsZXQgZT1lblt0bl07ZSYmKGUuZmxhZ3MmPS0yKX10bj0tMSxlbi5sZW5ndGg9MCxtbihlKSxzbj1udWxsLChlbi5sZW5ndGh8fG5uLmxlbmd0aCkmJnZuKGUpfX12YXIgeW49bnVsbCxibj1udWxsO2Z1bmN0aW9uIHhuKGUpe2xldCB0PXluO3JldHVybiB5bj1lLGJuPWUmJmUudHlwZS5fX3Njb3BlSWR8fG51bGwsdH1mdW5jdGlvbiBTbihlLHQ9eW4sbil7aWYoIXR8fGUuX24pcmV0dXJuIGU7bGV0IHI9KC4uLm4pPT57ci5fZCYmTGkoLTEpO2xldCBpPXhuKHQpLGE9TmkubGVuZ3RoLG87dHJ5e289ZSguLi5uKX1maW5hbGx5e2ZvcihsZXQgZT1OaS5sZW5ndGg7ZT5hO2UtLSlGaSgpO3huKGkpLHIuX2QmJkxpKDEpfXJldHVybiBvfTtyZXR1cm4gci5fbj0hMCxyLl9jPSEwLHIuX2Q9ITAscn1mdW5jdGlvbiBDbihlLG4pe2lmKHluPT09bnVsbClyZXR1cm4gZTtsZXQgcj15YSh5biksaT1lLmRpcnN8fD1bXTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0W2EsbyxzLGM9dF09bltlXTthJiYoaChhKSYmKGE9e21vdW50ZWQ6YSx1cGRhdGVkOmF9KSxhLmRlZXAmJll0KG8pLGkucHVzaCh7ZGlyOmEsaW5zdGFuY2U6cix2YWx1ZTpvLG9sZFZhbHVlOnZvaWQgMCxhcmc6cyxtb2RpZmllcnM6Y30pKX1yZXR1cm4gZX1mdW5jdGlvbiB3bihlLHQsbixyKXtsZXQgaT1lLmRpcnMsYT10JiZ0LmRpcnM7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBzPWlbb107YSYmKHMub2xkVmFsdWU9YVtvXS52YWx1ZSk7bGV0IGM9cy5kaXJbcl07YyYmKEFlKCksWnQoYyxuLDgsW2UuZWwscyxlLHRdKSxqZSgpKX19ZnVuY3Rpb24gVG4oZSx0KXtpZihhYSl7bGV0IG49YWEucHJvdmlkZXMscj1hYS5wYXJlbnQmJmFhLnBhcmVudC5wcm92aWRlcztyPT09biYmKG49YWEucHJvdmlkZXM9T2JqZWN0LmNyZWF0ZShyKSksbltlXT10fX1mdW5jdGlvbiBFbihlLHQsbj0hMSl7bGV0IHI9b2EoKTtpZihyfHx6cil7bGV0IGk9enI/enIuX2NvbnRleHQucHJvdmlkZXM6cj9yLnBhcmVudD09bnVsbHx8ci5jZT9yLnZub2RlLmFwcENvbnRleHQmJnIudm5vZGUuYXBwQ29udGV4dC5wcm92aWRlczpyLnBhcmVudC5wcm92aWRlczp2b2lkIDA7aWYoaSYmZSBpbiBpKXJldHVybiBpW2VdO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gbiYmaCh0KT90LmNhbGwociYmci5wcm94eSk6dH19dmFyIERuPVN5bWJvbC5mb3IoYHYtc2N4YCksT249KCk9PkVuKERuKTtmdW5jdGlvbiBrbihlLHQsbil7cmV0dXJuIEFuKGUsdCxuKX1mdW5jdGlvbiBBbihlLG4saT10KXtsZXR7aW1tZWRpYXRlOmEsZGVlcDpvLGZsdXNoOmMsb25jZTpsfT1pLHU9cyh7fSxpKSxkPW4mJmF8fCFuJiZjIT09YHBvc3RgLGY7aWYoZmEpe2lmKGM9PT1gc3luY2Ape2xldCBlPU9uKCk7Zj1lLl9fd2F0Y2hlckhhbmRsZXN8fD1bXX1lbHNlIGlmKCFkKXtsZXQgZT0oKT0+e307cmV0dXJuIGUuc3RvcD1yLGUucmVzdW1lPXIsZS5wYXVzZT1yLGV9fWxldCBwPWFhO3UuY2FsbD0oZSx0LG4pPT5adChlLHAsdCxuKTtsZXQgbT0hMTtjPT09YHBvc3RgP3Uuc2NoZWR1bGVyPWU9PntlLmk9cCxfaShlLHAmJnAuc3VzcGVuc2UpfTpjIT09YHN5bmNgJiYobT0hMCx1LnNjaGVkdWxlcj0oZSx0KT0+e3Q/ZSgpOnVuKGUpfSksdS5hdWdtZW50Sm9iPWU9PntuJiYoZS5mbGFnc3w9NCksbSYmKGUuZmxhZ3N8PTIscCYmKGUuaWQ9cC51aWQsZS5pPXApKX07bGV0IGg9SnQoZSxuLHUpO3JldHVybiBmYSYmKGY/Zi5wdXNoKGgpOmQmJmgoKSksaH1mdW5jdGlvbiBqbihlLHQsbil7bGV0IHI9dGhpcy5wcm94eSxpPWcoZSk/ZS5pbmNsdWRlcyhgLmApP01uKHIsZSk6KCk9PnJbZV06ZS5iaW5kKHIsciksYTtoKHQpP2E9dDooYT10LmhhbmRsZXIsbj10KTtsZXQgbz1sYSh0aGlzKSxzPUFuKGksYS5iaW5kKHIpLG4pO3JldHVybiBvKCksc31mdW5jdGlvbiBNbihlLHQpe2xldCBuPXQuc3BsaXQoYC5gKTtyZXR1cm4oKT0+e2xldCB0PWU7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aCYmdDtlKyspdD10W25bZV1dO3JldHVybiB0fX12YXIgTm49U3ltYm9sKGBfdnRlYCksUG49ZT0+ZS5fX2lzVGVsZXBvcnQsRm49U3ltYm9sKGBfbGVhdmVDYmApO2Z1bmN0aW9uIEluKGUpe2xldCB0PWVbMF07aWYoZS5sZW5ndGg+MSl7Zm9yKGxldCBuIG9mIGUpaWYobi50eXBlIT09amkpe3Q9bjticmVha319cmV0dXJuIHR9ZnVuY3Rpb24gTG4oZSl7aWYoIXFuKGUpKXJldHVybiBQbihlLnR5cGUpJiZlLmNoaWxkcmVuP0luKGUuY2hpbGRyZW4pOmU7aWYoZS5jb21wb25lbnQpcmV0dXJuIGUuY29tcG9uZW50LnN1YlRyZWU7bGV0e3NoYXBlRmxhZzp0LGNoaWxkcmVuOm59PWU7aWYobil7aWYodCYxNilyZXR1cm4gblswXTtpZih0JjMyJiZoKG4uZGVmYXVsdCkpcmV0dXJuIG4uZGVmYXVsdCgpfX1mdW5jdGlvbiBSbihlLHQpe2lmKGUuc2hhcGVGbGFnJjYmJmUuY29tcG9uZW50KXtlLnRyYW5zaXRpb249dDtsZXQgbj1lLmNvbXBvbmVudC5zdWJUcmVlO1JuKFBuKG4udHlwZSkmJkxuKG4pfHxuLHQpfWVsc2UgaWYoZS5zaGFwZUZsYWcmMTI4KWUuc3NDb250ZW50LnRyYW5zaXRpb249dC5jbG9uZShlLnNzQ29udGVudCksZS5zc0ZhbGxiYWNrLnRyYW5zaXRpb249dC5jbG9uZShlLnNzRmFsbGJhY2spO2Vsc2UgaWYoZS50cmFuc2l0aW9uPXQsZS50eXBlPT09cSYmZChlLmNoaWxkcmVuKSl7bGV0IG49S3IoZS5jaGlsZHJlbiwhMSk7biYmUm4obix0KX19ZnVuY3Rpb24gem4oZSl7aWYoZS5jb21wb25lbnQpcmV0dXJuIHpuKGUuY29tcG9uZW50LnN1YlRyZWUpO2lmKGUudHlwZT09PXEpe2xldCB0PWQoZS5jaGlsZHJlbikmJktyKGUuY2hpbGRyZW4sITEpO3JldHVybiB0P3puKHQpOnZvaWQgMH1pZihlLnR5cGUhPT1qaSlyZXR1cm4gZX1mdW5jdGlvbiBCbihlLHQpe3JldHVybiBoKGUpP3Moe25hbWU6ZS5uYW1lfSx0LHtzZXR1cDplfSk6ZX1mdW5jdGlvbiBWbihlKXtlLmlkcz1bZS5pZHNbMF0rZS5pZHNbMl0rKytgLWAsMCwwXX1mdW5jdGlvbiBIbihlLHQpe2xldCBuO3JldHVybiEhKChuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KSkmJiFuLmNvbmZpZ3VyYWJsZSl9dmFyIFVuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFduKGUsbixyLGEsbz0hMSl7aWYoZChlKSl7ZS5mb3JFYWNoKChlLHQpPT5XbihlLG4mJihkKG4pP25bdF06bikscixhLG8pKTtyZXR1cm59aWYoS24oYSkmJiFvKXthLnNoYXBlRmxhZyY1MTImJmEudHlwZS5fX2FzeW5jUmVzb2x2ZWQmJmEuY29tcG9uZW50LnN1YlRyZWUuY29tcG9uZW50JiZXbihlLG4scixhLmNvbXBvbmVudC5zdWJUcmVlKTtyZXR1cm59bGV0IHM9YS5zaGFwZUZsYWcmND95YShhLmNvbXBvbmVudCk6YS5lbCxsPW8/bnVsbDpzLHtpOmYscjpwfT1lLG09biYmbi5yLF89Zi5yZWZzPT09dD9mLnJlZnM9e306Zi5yZWZzLHY9Zi5zZXR1cFN0YXRlLHk9anQodiksYj12PT09dD9pOmU9PiFIbihfLGUpJiZ1KHksZSkseD0oZSx0KT0+ISh0JiZIbihfLHQpKTtpZihtIT1udWxsJiZtIT09cCl7aWYoR24obiksZyhtKSlfW21dPW51bGwsYihtKSYmKHZbbV09bnVsbCk7ZWxzZSBpZihGdChtKSl7bGV0IGU9bjt4KG0sZS5rKSYmKG0udmFsdWU9bnVsbCksZS5rJiYoX1tlLmtdPW51bGwpfX1pZihoKHApKVh0KHAsZiwxMixbbCxfXSk7ZWxzZXtsZXQgdD1nKHApLG49RnQocCk7aWYodHx8bil7bGV0IGk9KCk9PntpZihlLmYpe2xldCBuPXQ/YihwKT92W3BdOl9bcF06eChwKXx8IWUuaz9wLnZhbHVlOl9bZS5rXTtpZihvKWQobikmJmMobixzKTtlbHNlIGlmKGQobikpbi5pbmNsdWRlcyhzKXx8bi5wdXNoKHMpO2Vsc2UgaWYodClfW3BdPVtzXSxiKHApJiYodltwXT1fW3BdKTtlbHNle2xldCB0PVtzXTt4KHAsZS5rKSYmKHAudmFsdWU9dCksZS5rJiYoX1tlLmtdPXQpfX1lbHNlIHQ/KF9bcF09bCxiKHApJiYodltwXT1sKSk6biYmKHgocCxlLmspJiYocC52YWx1ZT1sKSxlLmsmJihfW2Uua109bCkpfTtpZihsKXtsZXQgdD0oKT0+e2koKSxVbi5kZWxldGUoZSl9O3QuaWQ9LTEsVW4uc2V0KGUsdCksX2kodCxyKX1lbHNlIEduKGUpLGkoKX19fWZ1bmN0aW9uIEduKGUpe2xldCB0PVVuLmdldChlKTt0JiYodC5mbGFnc3w9OCxVbi5kZWxldGUoZSkpfVIoKS5yZXF1ZXN0SWRsZUNhbGxiYWNrLFIoKS5jYW5jZWxJZGxlQ2FsbGJhY2s7dmFyIEtuPWU9PiEhZS50eXBlLl9fYXN5bmNMb2FkZXIscW49ZT0+ZS50eXBlLl9faXNLZWVwQWxpdmU7ZnVuY3Rpb24gSm4oZSx0KXtYbihlLGBhYCx0KX1mdW5jdGlvbiBZbihlLHQpe1huKGUsYGRhYCx0KX1mdW5jdGlvbiBYbihlLHQsbj1hYSl7bGV0IHI9ZS5fX3dkY3x8PSgpPT57bGV0IHQ9bjtmb3IoO3Q7KXtpZih0LmlzRGVhY3RpdmF0ZWQpcmV0dXJuO3Q9dC5wYXJlbnR9cmV0dXJuIGUoKX07aWYoUW4odCxyLG4pLG4pe2xldCBlPW4ucGFyZW50O2Zvcig7ZSYmZS5wYXJlbnQ7KXFuKGUucGFyZW50LnZub2RlKSYmWm4ocix0LG4sZSksZT1lLnBhcmVudH19ZnVuY3Rpb24gWm4oZSx0LG4scil7bGV0IGk9UW4odCxlLHIsITApO2FyKCgpPT57YyhyW3RdLGkpfSxuKX1mdW5jdGlvbiBRbihlLHQsbj1hYSxyPSExKXtpZihuKXtsZXQgaT1uW2VdfHwobltlXT1bXSksYT10Ll9fd2VofHw9KC4uLnIpPT57QWUoKTtsZXQgaT1sYShuKSxhPVp0KHQsbixlLHIpO3JldHVybiBpKCksamUoKSxhfTtyZXR1cm4gcj9pLnVuc2hpZnQoYSk6aS5wdXNoKGEpLGF9fXZhciAkbj1lPT4odCxuPWFhKT0+e2ZhJiZlIT09YHNwYHx8UW4oZSwoLi4uZSk9PnQoLi4uZSksbil9LGVyPSRuKGBibWApLHRyPSRuKGBtYCksbnI9JG4oYGJ1YCkscnI9JG4oYHVgKSxpcj0kbihgYnVtYCksYXI9JG4oYHVtYCksb3I9JG4oYHNwYCksc3I9JG4oYHJ0Z2ApLGNyPSRuKGBydGNgKTtmdW5jdGlvbiBscihlLHQ9YWEpe1FuKGBlY2AsZSx0KX12YXIgdXI9YGNvbXBvbmVudHNgO2Z1bmN0aW9uIGRyKGUsdCl7cmV0dXJuIHByKHVyLGUsITAsdCl8fGV9dmFyIGZyPVN5bWJvbC5mb3IoYHYtbmRjYCk7ZnVuY3Rpb24gcHIoZSx0LG49ITAscj0hMSl7bGV0IGk9eW58fGFhO2lmKGkpe2xldCBuPWkudHlwZTtpZihlPT09dXIpe2xldCBlPWJhKG4sITEpO2lmKGUmJihlPT09dHx8ZT09PU8odCl8fGU9PT1qKE8odCkpKSlyZXR1cm4gbn1sZXQgYT1tcihpW2VdfHxuW2VdLHQpfHxtcihpLmFwcENvbnRleHRbZV0sdCk7cmV0dXJuIWEmJnI/bjphfX1mdW5jdGlvbiBtcihlLHQpe3JldHVybiBlJiYoZVt0XXx8ZVtPKHQpXXx8ZVtqKE8odCkpXSl9ZnVuY3Rpb24gaHIoZSx0LG4scil7bGV0IGksYT1uJiZuW3JdLG89ZChlKTtpZihvfHxnKGUpKXtsZXQgbj1vJiZEdChlKSxyPSExLHM9ITE7biYmKHI9IWt0KGUpLHM9T3QoZSksZT1XZShlKSksaT1BcnJheShlLmxlbmd0aCk7Zm9yKGxldCBuPTAsbz1lLmxlbmd0aDtuPG87bisrKWlbbl09dChyP3M/UHQoTnQoZVtuXSkpOk50KGVbbl0pOmVbbl0sbix2b2lkIDAsYSYmYVtuXSl9ZWxzZSBpZih0eXBlb2YgZT09YG51bWJlcmApe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpfHxlPDApaT1bXTtlbHNle2k9QXJyYXkoZSk7Zm9yKGxldCBuPTA7bjxlO24rKylpW25dPXQobisxLG4sdm9pZCAwLGEmJmFbbl0pfX1lbHNlIGlmKHYoZSkpe2lmKGVbU3ltYm9sLml0ZXJhdG9yXSlpPUFycmF5LmZyb20oZSwoZSxuKT0+dChlLG4sdm9pZCAwLGEmJmFbbl0pKTtlbHNle2xldCBuPU9iamVjdC5rZXlzKGUpO2k9QXJyYXkobi5sZW5ndGgpO2ZvcihsZXQgcj0wLG89bi5sZW5ndGg7cjxvO3IrKyl7bGV0IG89bltyXTtpW3JdPXQoZVtvXSxvLHIsYSYmYVtyXSl9fX1lbHNlIGk9W107cmV0dXJuIG4mJihuW3JdPWkpLGl9dmFyIGdyPWU9PmU/ZGEoZSk/eWEoZSk6Z3IoZS5wYXJlbnQpOm51bGwsX3I9cyhPYmplY3QuY3JlYXRlKG51bGwpLHskOmU9PmUsJGVsOmU9PmUudm5vZGUuZWwsJGRhdGE6ZT0+ZS5kYXRhLCRwcm9wczplPT5lLnByb3BzLCRhdHRyczplPT5lLmF0dHJzLCRzbG90czplPT5lLnNsb3RzLCRyZWZzOmU9PmUucmVmcywkcGFyZW50OmU9PmdyKGUucGFyZW50KSwkcm9vdDplPT5ncihlLnJvb3QpLCRob3N0OmU9PmUuY2UsJGVtaXQ6ZT0+ZS5lbWl0LCRvcHRpb25zOmU9PkVyKGUpLCRmb3JjZVVwZGF0ZTplPT5lLmZ8fD0oKT0+e3VuKGUudXBkYXRlKX0sJG5leHRUaWNrOmU9PmUubnx8PWNuLmJpbmQoZS5wcm94eSksJHdhdGNoOmU9PmpuLmJpbmQoZSl9KSx2cj0oZSxuKT0+ZSE9PXQmJiFlLl9faXNTY3JpcHRTZXR1cCYmdShlLG4pLHlyPXtnZXQoe186ZX0sbil7aWYobj09PWBfX3Zfc2tpcGApcmV0dXJuITA7bGV0e2N0eDpyLHNldHVwU3RhdGU6aSxkYXRhOmEscHJvcHM6byxhY2Nlc3NDYWNoZTpzLHR5cGU6YyxhcHBDb250ZXh0Omx9PWU7aWYoblswXSE9PWAkYCl7bGV0IGU9c1tuXTtpZihlIT09dm9pZCAwKXN3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGlbbl07Y2FzZSAyOnJldHVybiBhW25dO2Nhc2UgNDpyZXR1cm4gcltuXTtjYXNlIDM6cmV0dXJuIG9bbl19ZWxzZSBpZih2cihpLG4pKXJldHVybiBzW25dPTEsaVtuXTtlbHNlIGlmKGEhPT10JiZ1KGEsbikpcmV0dXJuIHNbbl09MixhW25dO2Vsc2UgaWYodShvLG4pKXJldHVybiBzW25dPTMsb1tuXTtlbHNlIGlmKHIhPT10JiZ1KHIsbikpcmV0dXJuIHNbbl09NCxyW25dO2Vsc2UgeHImJihzW25dPTApfWxldCBkPV9yW25dLGYscDtpZihkKXJldHVybiBuPT09YCRhdHRyc2AmJlZlKGUuYXR0cnMsYGdldGAsYGApLGQoZSk7aWYoKGY9Yy5fX2Nzc01vZHVsZXMpJiYoZj1mW25dKSlyZXR1cm4gZjtpZihyIT09dCYmdShyLG4pKXJldHVybiBzW25dPTQscltuXTtpZihwPWwuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsdShwLG4pKXJldHVybiBwW25dfSxzZXQoe186ZX0sbixyKXtsZXR7ZGF0YTppLHNldHVwU3RhdGU6YSxjdHg6b309ZTtyZXR1cm4gdnIoYSxuKT8oYVtuXT1yLCEwKTppIT09dCYmdShpLG4pPyhpW25dPXIsITApOnUoZS5wcm9wcyxuKXx8blswXT09PWAkYCYmbi5zbGljZSgxKWluIGU/ITE6KG9bbl09ciwhMCl9LGhhcyh7Xzp7ZGF0YTplLHNldHVwU3RhdGU6bixhY2Nlc3NDYWNoZTpyLGN0eDppLGFwcENvbnRleHQ6YSxwcm9wczpvLHR5cGU6c319LGMpe2xldCBsO3JldHVybiEhKHJbY118fGUhPT10JiZjWzBdIT09YCRgJiZ1KGUsYyl8fHZyKG4sYyl8fHUobyxjKXx8dShpLGMpfHx1KF9yLGMpfHx1KGEuY29uZmlnLmdsb2JhbFByb3BlcnRpZXMsYyl8fChsPXMuX19jc3NNb2R1bGVzKSYmbFtjXSl9LGRlZmluZVByb3BlcnR5KGUsdCxuKXtyZXR1cm4gbi5nZXQ9PW51bGw/dShuLGB2YWx1ZWApJiZ0aGlzLnNldChlLHQsbi52YWx1ZSxudWxsKTplLl8uYWNjZXNzQ2FjaGVbdF09MCxSZWZsZWN0LmRlZmluZVByb3BlcnR5KGUsdCxuKX19O2Z1bmN0aW9uIGJyKGUpe3JldHVybiBkKGUpP2UucmVkdWNlKChlLHQpPT4oZVt0XT1udWxsLGUpLHt9KTplfXZhciB4cj0hMDtmdW5jdGlvbiBTcihlKXtsZXQgdD1FcihlKSxuPWUucHJveHksaT1lLmN0eDt4cj0hMSx0LmJlZm9yZUNyZWF0ZSYmd3IodC5iZWZvcmVDcmVhdGUsZSxgYmNgKTtsZXR7ZGF0YTphLGNvbXB1dGVkOm8sbWV0aG9kczpzLHdhdGNoOmMscHJvdmlkZTpsLGluamVjdDp1LGNyZWF0ZWQ6ZixiZWZvcmVNb3VudDpwLG1vdW50ZWQ6bSxiZWZvcmVVcGRhdGU6Zyx1cGRhdGVkOl8sYWN0aXZhdGVkOnksZGVhY3RpdmF0ZWQ6YixiZWZvcmVEZXN0cm95OngsYmVmb3JlVW5tb3VudDpTLGRlc3Ryb3llZDpDLHVubW91bnRlZDp3LHJlbmRlcjpULHJlbmRlclRyYWNrZWQ6RSxyZW5kZXJUcmlnZ2VyZWQ6RCxlcnJvckNhcHR1cmVkOk8sc2VydmVyUHJlZmV0Y2g6ayxleHBvc2U6QSxpbmhlcml0QXR0cnM6aixjb21wb25lbnRzOk0sZGlyZWN0aXZlczpOLGZpbHRlcnM6UH09dDtpZih1JiZDcih1LGksbnVsbCkscylmb3IobGV0IGUgaW4gcyl7bGV0IHQ9c1tlXTtoKHQpJiYoaVtlXT10LmJpbmQobikpfWlmKGEpe2xldCB0PWEuY2FsbChuLG4pO3YodCkmJihlLmRhdGE9Q3QodCkpfWlmKHhyPSEwLG8pZm9yKGxldCBlIGluIG8pe2xldCB0PW9bZV0sYT1TYSh7Z2V0OmgodCk/dC5iaW5kKG4sbik6aCh0LmdldCk/dC5nZXQuYmluZChuLG4pOnIsc2V0OiFoKHQpJiZoKHQuc2V0KT90LnNldC5iaW5kKG4pOnJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmEudmFsdWUsc2V0OmU9PmEudmFsdWU9ZX0pfWlmKGMpZm9yKGxldCBlIGluIGMpVHIoY1tlXSxpLG4sZSk7aWYobCl7bGV0IGU9aChsKT9sLmNhbGwobik6bDtSZWZsZWN0Lm93bktleXMoZSkuZm9yRWFjaCh0PT57VG4odCxlW3RdKX0pfWYmJndyKGYsZSxgY2ApO2Z1bmN0aW9uIEYoZSx0KXtkKHQpP3QuZm9yRWFjaCh0PT5lKHQuYmluZChuKSkpOnQmJmUodC5iaW5kKG4pKX1pZihGKGVyLHApLEYodHIsbSksRihucixnKSxGKHJyLF8pLEYoSm4seSksRihZbixiKSxGKGxyLE8pLEYoY3IsRSksRihzcixEKSxGKGlyLFMpLEYoYXIsdyksRihvcixrKSxkKEEpKXtpZihBLmxlbmd0aCl7bGV0IHQ9ZS5leHBvc2VkfHw9e307QS5mb3JFYWNoKGU9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6KCk9Pm5bZV0sc2V0OnQ9Pm5bZV09dCxlbnVtZXJhYmxlOiEwfSl9KX1lbHNlIGUuZXhwb3NlZHx8PXt9fVQmJmUucmVuZGVyPT09ciYmKGUucmVuZGVyPVQpLGohPW51bGwmJihlLmluaGVyaXRBdHRycz1qKSxNJiYoZS5jb21wb25lbnRzPU0pLE4mJihlLmRpcmVjdGl2ZXM9TiksayYmVm4oZSl9ZnVuY3Rpb24gQ3IoZSx0LG49cil7ZChlKSYmKGU9anIoZSkpO2ZvcihsZXQgbiBpbiBlKXtsZXQgcj1lW25dLGk7aT12KHIpP2BkZWZhdWx0YGluIHI/RW4oci5mcm9tfHxuLHIuZGVmYXVsdCwhMCk6RW4oci5mcm9tfHxuKTpFbihyKSxGdChpKT9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6KCk9PmkudmFsdWUsc2V0OmU9PmkudmFsdWU9ZX0pOnRbbl09aX19ZnVuY3Rpb24gd3IoZSx0LG4pe1p0KGQoZSk/ZS5tYXAoZT0+ZS5iaW5kKHQucHJveHkpKTplLmJpbmQodC5wcm94eSksdCxuKX1mdW5jdGlvbiBUcihlLHQsbixyKXtsZXQgaT1yLmluY2x1ZGVzKGAuYCk/TW4obixyKTooKT0+bltyXTtpZihnKGUpKXtsZXQgbj10W2VdO2gobikmJmtuKGksbil9ZWxzZSBpZihoKGUpKWtuKGksZS5iaW5kKG4pKTtlbHNlIGlmKHYoZSkpe2lmKGQoZSkpZS5mb3JFYWNoKGU9PlRyKGUsdCxuLHIpKTtlbHNle2xldCByPWgoZS5oYW5kbGVyKT9lLmhhbmRsZXIuYmluZChuKTp0W2UuaGFuZGxlcl07aChyKSYma24oaSxyLGUpfX19ZnVuY3Rpb24gRXIoZSl7bGV0IHQ9ZS50eXBlLHttaXhpbnM6bixleHRlbmRzOnJ9PXQse21peGluczppLG9wdGlvbnNDYWNoZTphLGNvbmZpZzp7b3B0aW9uTWVyZ2VTdHJhdGVnaWVzOm99fT1lLmFwcENvbnRleHQscz1hLmdldCh0KSxjO3JldHVybiBzP2M9czohaS5sZW5ndGgmJiFuJiYhcj9jPXQ6KGM9e30saS5sZW5ndGgmJmkuZm9yRWFjaChlPT5EcihjLGUsbywhMCkpLERyKGMsdCxvKSksdih0KSYmYS5zZXQodCxjKSxjfWZ1bmN0aW9uIERyKGUsdCxuLHI9ITEpe2xldHttaXhpbnM6aSxleHRlbmRzOmF9PXQ7YSYmRHIoZSxhLG4sITApLGkmJmkuZm9yRWFjaCh0PT5EcihlLHQsbiwhMCkpO2ZvcihsZXQgaSBpbiB0KWlmKCEociYmaT09PWBleHBvc2VgKSl7bGV0IHI9T3JbaV18fG4mJm5baV07ZVtpXT1yP3IoZVtpXSx0W2ldKTp0W2ldfXJldHVybiBlfXZhciBPcj17ZGF0YTprcixwcm9wczpQcixlbWl0czpQcixtZXRob2RzOk5yLGNvbXB1dGVkOk5yLGJlZm9yZUNyZWF0ZTpNcixjcmVhdGVkOk1yLGJlZm9yZU1vdW50Ok1yLG1vdW50ZWQ6TXIsYmVmb3JlVXBkYXRlOk1yLHVwZGF0ZWQ6TXIsYmVmb3JlRGVzdHJveTpNcixiZWZvcmVVbm1vdW50Ok1yLGRlc3Ryb3llZDpNcix1bm1vdW50ZWQ6TXIsYWN0aXZhdGVkOk1yLGRlYWN0aXZhdGVkOk1yLGVycm9yQ2FwdHVyZWQ6TXIsc2VydmVyUHJlZmV0Y2g6TXIsY29tcG9uZW50czpOcixkaXJlY3RpdmVzOk5yLHdhdGNoOkZyLHByb3ZpZGU6a3IsaW5qZWN0OkFyfTtmdW5jdGlvbiBrcihlLHQpe3JldHVybiB0P2U/ZnVuY3Rpb24oKXtyZXR1cm4gcyhoKGUpP2UuY2FsbCh0aGlzLHRoaXMpOmUsaCh0KT90LmNhbGwodGhpcyx0aGlzKTp0KX06dDplfWZ1bmN0aW9uIEFyKGUsdCl7cmV0dXJuIE5yKGpyKGUpLGpyKHQpKX1mdW5jdGlvbiBqcihlKXtpZihkKGUpKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0W2Vbbl1dPWVbbl07cmV0dXJuIHR9cmV0dXJuIGV9ZnVuY3Rpb24gTXIoZSx0KXtyZXR1cm4gZT9bLi4ubmV3IFNldChbXS5jb25jYXQoZSx0KSldOnR9ZnVuY3Rpb24gTnIoZSx0KXtyZXR1cm4gZT9zKE9iamVjdC5jcmVhdGUobnVsbCksZSx0KTp0fWZ1bmN0aW9uIFByKGUsdCl7cmV0dXJuIGU/ZChlKSYmZCh0KT9bLi4ubmV3IFNldChbLi4uZSwuLi50XSldOnMoT2JqZWN0LmNyZWF0ZShudWxsKSxicihlKSxicih0Pz97fSkpOnR9ZnVuY3Rpb24gRnIoZSx0KXtpZighZSlyZXR1cm4gdDtpZighdClyZXR1cm4gZTtsZXQgbj1zKE9iamVjdC5jcmVhdGUobnVsbCksZSk7Zm9yKGxldCByIGluIHQpbltyXT1NcihlW3JdLHRbcl0pO3JldHVybiBufWZ1bmN0aW9uIElyKCl7cmV0dXJue2FwcDpudWxsLGNvbmZpZzp7aXNOYXRpdmVUYWc6aSxwZXJmb3JtYW5jZTohMSxnbG9iYWxQcm9wZXJ0aWVzOnt9LG9wdGlvbk1lcmdlU3RyYXRlZ2llczp7fSxlcnJvckhhbmRsZXI6dm9pZCAwLHdhcm5IYW5kbGVyOnZvaWQgMCxjb21waWxlck9wdGlvbnM6e319LG1peGluczpbXSxjb21wb25lbnRzOnt9LGRpcmVjdGl2ZXM6e30scHJvdmlkZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxvcHRpb25zQ2FjaGU6bmV3IFdlYWtNYXAscHJvcHNDYWNoZTpuZXcgV2Vha01hcCxlbWl0c0NhY2hlOm5ldyBXZWFrTWFwfX12YXIgTHI9MDtmdW5jdGlvbiBScihlLHQpe3JldHVybiBmdW5jdGlvbihuLHI9bnVsbCl7aChuKXx8KG49cyh7fSxuKSksciE9bnVsbCYmIXYocikmJihyPW51bGwpO2xldCBpPUlyKCksYT1uZXcgV2Vha1NldCxvPVtdLGM9ITEsbD1pLmFwcD17X3VpZDpMcisrLF9jb21wb25lbnQ6bixfcHJvcHM6cixfY29udGFpbmVyOm51bGwsX2NvbnRleHQ6aSxfaW5zdGFuY2U6bnVsbCx2ZXJzaW9uOkNhLGdldCBjb25maWcoKXtyZXR1cm4gaS5jb25maWd9LHNldCBjb25maWcoZSl7fSx1c2UoZSwuLi50KXtyZXR1cm4gYS5oYXMoZSl8fChlJiZoKGUuaW5zdGFsbCk/KGEuYWRkKGUpLGUuaW5zdGFsbChsLC4uLnQpKTpoKGUpJiYoYS5hZGQoZSksZShsLC4uLnQpKSksbH0sbWl4aW4oZSl7cmV0dXJuIGkubWl4aW5zLmluY2x1ZGVzKGUpfHxpLm1peGlucy5wdXNoKGUpLGx9LGNvbXBvbmVudChlLHQpe3JldHVybiB0PyhpLmNvbXBvbmVudHNbZV09dCxsKTppLmNvbXBvbmVudHNbZV19LGRpcmVjdGl2ZShlLHQpe3JldHVybiB0PyhpLmRpcmVjdGl2ZXNbZV09dCxsKTppLmRpcmVjdGl2ZXNbZV19LG1vdW50KGEsbyxzKXtpZighYyl7bGV0IHU9bC5fY2VWTm9kZXx8V2kobixyKTtyZXR1cm4gdS5hcHBDb250ZXh0PWkscz09PSEwP3M9YHN2Z2A6cz09PSExJiYocz12b2lkIDApLG8mJnQ/dCh1LGEpOmUodSxhLHMpLGM9ITAsbC5fY29udGFpbmVyPWEsYS5fX3Z1ZV9hcHBfXz1sLHlhKHUuY29tcG9uZW50KX19LG9uVW5tb3VudChlKXtvLnB1c2goZSl9LHVubW91bnQoKXtjJiYoWnQobyxsLl9pbnN0YW5jZSwxNiksZShudWxsLGwuX2NvbnRhaW5lciksZGVsZXRlIGwuX2NvbnRhaW5lci5fX3Z1ZV9hcHBfXyl9LHByb3ZpZGUoZSx0KXtyZXR1cm4gaS5wcm92aWRlc1tlXT10LGx9LHJ1bldpdGhDb250ZXh0KGUpe2xldCB0PXpyO3pyPWw7dHJ5e3JldHVybiBlKCl9ZmluYWxseXt6cj10fX19O3JldHVybiBsfX12YXIgenI9bnVsbCxCcj0oZSx0KT0+dD09PWBtb2RlbFZhbHVlYHx8dD09PWBtb2RlbC12YWx1ZWA/ZS5tb2RlbE1vZGlmaWVyczplW2Ake3R9TW9kaWZpZXJzYF18fGVbYCR7Tyh0KX1Nb2RpZmllcnNgXXx8ZVtgJHtBKHQpfU1vZGlmaWVyc2BdO2Z1bmN0aW9uIFZyKGUsbiwuLi5yKXtpZihlLmlzVW5tb3VudGVkKXJldHVybjtsZXQgaT1lLnZub2RlLnByb3BzfHx0LGE9cixvPW4uc3RhcnRzV2l0aChgdXBkYXRlOmApLHM9byYmQnIoaSxuLnNsaWNlKDcpKTtzJiYocy50cmltJiYoYT1yLm1hcChlPT5nKGUpP2UudHJpbSgpOmUpKSxzLm51bWJlciYmKGE9YS5tYXAoSSkpKTtsZXQgYyxsPWlbYz1NKG4pXXx8aVtjPU0oTyhuKSldOyFsJiZvJiYobD1pW2M9TShBKG4pKV0pLGwmJlp0KGwsZSw2LGEpO2xldCB1PWlbYytgT25jZWBdO2lmKHUpe2lmKCFlLmVtaXR0ZWQpZS5lbWl0dGVkPXt9O2Vsc2UgaWYoZS5lbWl0dGVkW2NdKXJldHVybjtlLmVtaXR0ZWRbY109ITAsWnQodSxlLDYsYSl9fXZhciBIcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBVcihlLHQsbj0hMSl7bGV0IHI9bj9Icjp0LmVtaXRzQ2FjaGUsaT1yLmdldChlKTtpZihpIT09dm9pZCAwKXJldHVybiBpO2xldCBhPWUuZW1pdHMsbz17fSxjPSExO2lmKCFoKGUpKXtsZXQgcj1lPT57bGV0IG49VXIoZSx0LCEwKTtuJiYoYz0hMCxzKG8sbikpfTshbiYmdC5taXhpbnMubGVuZ3RoJiZ0Lm1peGlucy5mb3JFYWNoKHIpLGUuZXh0ZW5kcyYmcihlLmV4dGVuZHMpLGUubWl4aW5zJiZlLm1peGlucy5mb3JFYWNoKHIpfXJldHVybiFhJiYhYz8odihlKSYmci5zZXQoZSxudWxsKSxudWxsKTooZChhKT9hLmZvckVhY2goZT0+b1tlXT1udWxsKTpzKG8sYSksdihlKSYmci5zZXQoZSxvKSxvKX1mdW5jdGlvbiBXcihlLHQpe3JldHVybiFlfHwhYSh0KT8hMToodD10LnNsaWNlKDIpLHQ9dD09PWBPbmNlYD90OnQucmVwbGFjZSgvT25jZSQvLGBgKSx1KGUsdFswXS50b0xvd2VyQ2FzZSgpK3Quc2xpY2UoMSkpfHx1KGUsQSh0KSl8fHUoZSx0KSl9ZnVuY3Rpb24gR3IoZSl7bGV0e3R5cGU6dCx2bm9kZTpuLHByb3h5OnIsd2l0aFByb3h5OmkscHJvcHNPcHRpb25zOlthXSxzbG90czpzLGF0dHJzOmMsZW1pdDpsLHJlbmRlcjp1LHJlbmRlckNhY2hlOmQscHJvcHM6ZixkYXRhOnAsc2V0dXBTdGF0ZTptLGN0eDpoLGluaGVyaXRBdHRyczpnfT1lLF89eG4oZSksdix5O3RyeXtpZihuLnNoYXBlRmxhZyY0KXtsZXQgZT1pfHxyLHQ9ZTt2PVhpKHUuY2FsbCh0LGUsZCxmLG0scCxoKSkseT1jfWVsc2V7bGV0IGU9dDt2PVhpKGUubGVuZ3RoPjE/ZShmLHthdHRyczpjLHNsb3RzOnMsZW1pdDpsfSk6ZShmLG51bGwpKSx5PXQucHJvcHM/YzpxcihjKX19Y2F0Y2godCl7TmkubGVuZ3RoPTAsUXQodCxlLDEpLHY9V2koamkpfWxldCBiPXY7aWYoeSYmZyE9PSExKXtsZXQgZT1PYmplY3Qua2V5cyh5KSx7c2hhcGVGbGFnOnR9PWI7ZS5sZW5ndGgmJnQmNyYmKGEmJmUuc29tZShvKSYmKHk9SnIoeSxhKSksYj1xaShiLHksITEsITApKX1yZXR1cm4gbi5kaXJzJiYoYj1xaShiLG51bGwsITEsITApLGIuZGlycz1iLmRpcnM/Yi5kaXJzLmNvbmNhdChuLmRpcnMpOm4uZGlycyksbi50cmFuc2l0aW9uJiZSbihQbihiLnR5cGUpJiZMbihiKXx8YixuLnRyYW5zaXRpb24pLHY9Yix4bihfKSx2fWZ1bmN0aW9uIEtyKGUsdD0hMCl7bGV0IG47Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07aWYoQmkocikpe2lmKHIudHlwZSE9PWppfHxyLmNoaWxkcmVuPT09YHYtaWZgKXtpZihuKXJldHVybjtuPXJ9fWVsc2UgcmV0dXJufXJldHVybiBufXZhciBxcj1lPT57bGV0IHQ7Zm9yKGxldCBuIGluIGUpKG49PT1gY2xhc3NgfHxuPT09YHN0eWxlYHx8YShuKSkmJigodHx8PXt9KVtuXT1lW25dKTtyZXR1cm4gdH0sSnI9KGUsdCk9PntsZXQgbj17fTtmb3IobGV0IHIgaW4gZSlvKHIpJiZyLnNsaWNlKDkpaW4gdHx8KG5bcl09ZVtyXSk7cmV0dXJuIG59O2Z1bmN0aW9uIFlyKGUsdCxuKXtsZXR7cHJvcHM6cixjaGlsZHJlbjppLGNvbXBvbmVudDphfT1lLHtwcm9wczpvLGNoaWxkcmVuOnMscGF0Y2hGbGFnOmN9PXQsbD1hLmVtaXRzT3B0aW9ucztpZih0LmRpcnN8fHQudHJhbnNpdGlvbilyZXR1cm4hMDtpZihuJiZjPj0wKXtpZihjJjEwMjQpcmV0dXJuITA7aWYoYyYxNilyZXR1cm4gcj9YcihyLG8sbCk6ISFvO2lmKGMmOCl7bGV0IGU9dC5keW5hbWljUHJvcHM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPWVbdF07aWYoWnIobyxyLG4pJiYhV3IobCxuKSlyZXR1cm4hMH19fWVsc2UgcmV0dXJuKGl8fHMpJiYoIXN8fCFzLiRzdGFibGUpPyEwOnI9PT1vPyExOnI/IW98fFhyKHIsbyxsKTohIW87cmV0dXJuITF9ZnVuY3Rpb24gWHIoZSx0LG4pe2xldCByPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtsZXQgYT1yW2ldO2lmKCF1KGUsYSl8fFpyKHQsZSxhKSYmIVdyKG4sYSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWnIoZSx0LG4pe2xldCByPWVbbl0saT10W25dO3JldHVybiBuPT09YHN0eWxlYCYmdihyKSYmdihpKT8hYWUocixpKTpyIT09aX1mdW5jdGlvbiBRcih7dm5vZGU6ZSxwYXJlbnQ6dCxzdXNwZW5zZTpufSxyKXtmb3IoO3Q7KXtsZXQgbj10LnN1YlRyZWU7aWYobi5zdXNwZW5zZSYmbi5zdXNwZW5zZS5hY3RpdmVCcmFuY2g9PT1lJiYobi5zdXNwZW5zZS52bm9kZS5lbD1uLmVsPXIsZT1uKSxuPT09ZSkoZT10LnZub2RlKS5lbD1yLHQ9dC5wYXJlbnQ7ZWxzZSBicmVha31uJiZuLmFjdGl2ZUJyYW5jaD09PWUmJihuLnZub2RlLmVsPXIpfXZhciAkcj17fSxlaT0oKT0+T2JqZWN0LmNyZWF0ZSgkciksdGk9ZT0+T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09JHI7ZnVuY3Rpb24gbmkoZSx0LG4scj0hMSl7bGV0IGk9e30sYT1laSgpO2UucHJvcHNEZWZhdWx0cz1PYmplY3QuY3JlYXRlKG51bGwpLGlpKGUsdCxpLGEpO2ZvcihsZXQgdCBpbiBlLnByb3BzT3B0aW9uc1swXSl0IGluIGl8fChpW3RdPXZvaWQgMCk7ZS5wcm9wcz1uP3I/aTp3dChpKTplLnR5cGUucHJvcHM/aTphLGUuYXR0cnM9YX1mdW5jdGlvbiByaShlLHQsbixyKXtsZXR7cHJvcHM6aSxhdHRyczphLHZub2RlOntwYXRjaEZsYWc6b319PWUscz1qdChpKSxbY109ZS5wcm9wc09wdGlvbnMsbD0hMTtpZigocnx8bz4wKSYmIShvJjE2KSl7aWYobyY4KXtsZXQgbj1lLnZub2RlLmR5bmFtaWNQcm9wcztmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKyl7bGV0IG89bltyXTtpZihXcihlLmVtaXRzT3B0aW9ucyxvKSljb250aW51ZTtsZXQgZD10W29dO2lmKGMpe2lmKHUoYSxvKSlkIT09YVtvXSYmKGFbb109ZCxsPSEwKTtlbHNle2xldCB0PU8obyk7aVt0XT1haShjLHMsdCxkLGUsITEpfX1lbHNlIGQhPT1hW29dJiYoYVtvXT1kLGw9ITApfX19ZWxzZXtpaShlLHQsaSxhKSYmKGw9ITApO2xldCByO2ZvcihsZXQgYSBpbiBzKXQmJih1KHQsYSl8fChyPUEoYSkpIT09YSYmdSh0LHIpKXx8KGM/biYmKG5bYV0hPT12b2lkIDB8fG5bcl0hPT12b2lkIDApJiYoaVthXT1haShjLHMsYSx2b2lkIDAsZSwhMCkpOmRlbGV0ZSBpW2FdKTtpZihhIT09cylmb3IobGV0IGUgaW4gYSl0JiZ1KHQsZSl8fChkZWxldGUgYVtlXSxsPSEwKX1sJiZIZShlLmF0dHJzLGBzZXRgLGBgKX1mdW5jdGlvbiBpaShlLG4scixpKXtsZXRbYSxvXT1lLnByb3BzT3B0aW9ucyxzPSExLGM7aWYobilmb3IobGV0IHQgaW4gbil7aWYoVCh0KSljb250aW51ZTtsZXQgbD1uW3RdLGQ7YSYmdShhLGQ9Tyh0KSk/IW98fCFvLmluY2x1ZGVzKGQpP3JbZF09bDooY3x8PXt9KVtkXT1sOldyKGUuZW1pdHNPcHRpb25zLHQpfHx0IGluIGkmJmw9PT1pW3RdfHwoaVt0XT1sLHM9ITApfWlmKG8pe2xldCBuPWp0KHIpLGk9Y3x8dDtmb3IobGV0IHQ9MDt0PG8ubGVuZ3RoO3QrKyl7bGV0IHM9b1t0XTtyW3NdPWFpKGEsbixzLGlbc10sZSwhdShpLHMpKX19cmV0dXJuIHN9ZnVuY3Rpb24gYWkoZSx0LG4scixpLGEpe2xldCBvPWVbbl07aWYobyE9bnVsbCl7bGV0IGU9dShvLGBkZWZhdWx0YCk7aWYoZSYmcj09PXZvaWQgMCl7bGV0IGU9by5kZWZhdWx0O2lmKG8udHlwZSE9PUZ1bmN0aW9uJiYhby5za2lwRmFjdG9yeSYmaChlKSl7bGV0e3Byb3BzRGVmYXVsdHM6YX09aTtpZihuIGluIGEpcj1hW25dO2Vsc2V7bGV0IG89bGEoaSk7cj1hW25dPWUuY2FsbChudWxsLHQpLG8oKX19ZWxzZSByPWU7aS5jZSYmaS5jZS5fc2V0UHJvcChuLHIpfW9bMF0mJihhJiYhZT9yPSExOm9bMV0mJihyPT09YGB8fHI9PT1BKG4pKSYmKHI9ITApKX1yZXR1cm4gcn12YXIgb2k9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gc2koZSxyLGk9ITEpe2xldCBhPWk/b2k6ci5wcm9wc0NhY2hlLG89YS5nZXQoZSk7aWYobylyZXR1cm4gbztsZXQgYz1lLnByb3BzLGw9e30sZj1bXSxwPSExO2lmKCFoKGUpKXtsZXQgdD1lPT57cD0hMDtsZXRbdCxuXT1zaShlLHIsITApO3MobCx0KSxuJiZmLnB1c2goLi4ubil9OyFpJiZyLm1peGlucy5sZW5ndGgmJnIubWl4aW5zLmZvckVhY2godCksZS5leHRlbmRzJiZ0KGUuZXh0ZW5kcyksZS5taXhpbnMmJmUubWl4aW5zLmZvckVhY2godCl9aWYoIWMmJiFwKXJldHVybiB2KGUpJiZhLnNldChlLG4pLG47aWYoZChjKSlmb3IobGV0IGU9MDtlPGMubGVuZ3RoO2UrKyl7bGV0IG49TyhjW2VdKTtjaShuKSYmKGxbbl09dCl9ZWxzZSBpZihjKWZvcihsZXQgZSBpbiBjKXtsZXQgdD1PKGUpO2lmKGNpKHQpKXtsZXQgbj1jW2VdLHI9bFt0XT1kKG4pfHxoKG4pP3t0eXBlOm59OnMoe30sbiksaT1yLnR5cGUsYT0hMSxvPSEwO2lmKGQoaSkpZm9yKGxldCBlPTA7ZTxpLmxlbmd0aDsrK2Upe2xldCB0PWlbZV0sbj1oKHQpJiZ0Lm5hbWU7aWYobj09PWBCb29sZWFuYCl7YT0hMDticmVha31uPT09YFN0cmluZ2AmJihvPSExKX1lbHNlIGE9aChpKSYmaS5uYW1lPT09YEJvb2xlYW5gO3JbMF09YSxyWzFdPW8sKGF8fHUocixgZGVmYXVsdGApKSYmZi5wdXNoKHQpfX1sZXQgbT1bbCxmXTtyZXR1cm4gdihlKSYmYS5zZXQoZSxtKSxtfWZ1bmN0aW9uIGNpKGUpe3JldHVybiBlWzBdIT09YCRgJiYhVChlKX12YXIgbGk9ZT0+ZT09PWBfYHx8ZT09PWBfY3R4YHx8ZT09PWAkc3RhYmxlYCx1aT1lPT5kKGUpP2UubWFwKFhpKTpbWGkoZSldLGRpPShlLHQsbik9PntpZih0Ll9uKXJldHVybiB0O2xldCByPVNuKCguLi5lKT0+dWkodCguLi5lKSksbik7cmV0dXJuIHIuX2M9ITEscn0sZmk9KGUsdCxuKT0+e2xldCByPWUuX2N0eDtmb3IobGV0IG4gaW4gZSl7aWYobGkobikpY29udGludWU7bGV0IGk9ZVtuXTtpZihoKGkpKXRbbl09ZGkobixpLHIpO2Vsc2UgaWYoaSE9bnVsbCl7bGV0IGU9dWkoaSk7dFtuXT0oKT0+ZX19fSxwaT0oZSx0KT0+e2xldCBuPXVpKHQpO2Uuc2xvdHMuZGVmYXVsdD0oKT0+bn0sbWk9KGUsdCxuKT0+e2ZvcihsZXQgciBpbiB0KShufHwhbGkocikpJiYoZVtyXT10W3JdKX0saGk9KGUsdCxuKT0+e2xldCByPWUuc2xvdHM9ZWkoKTtpZihlLnZub2RlLnNoYXBlRmxhZyYzMil7bGV0IGU9dC5fO2U/KG1pKHIsdCxuKSxuJiZGKHIsYF9gLGUsITApKTpmaSh0LHIpfWVsc2UgdCYmcGkoZSx0KX0sZ2k9KGUsbixyKT0+e2xldHt2bm9kZTppLHNsb3RzOmF9PWUsbz0hMCxzPXQ7aWYoaS5zaGFwZUZsYWcmMzIpe2xldCBlPW4uXztlP3ImJmU9PT0xP289ITE6bWkoYSxuLHIpOihvPSFuLiRzdGFibGUsZmkobixhKSkscz1ufWVsc2UgbiYmKHBpKGUsbikscz17ZGVmYXVsdDoxfSk7aWYobylmb3IobGV0IGUgaW4gYSkhbGkoZSkmJnNbZV09PW51bGwmJmRlbGV0ZSBhW2VdfSxfaT1raTtmdW5jdGlvbiB2aShlKXtyZXR1cm4geWkoZSl9ZnVuY3Rpb24geWkoZSxpKXtsZXQgYT1SKCk7YS5fX1ZVRV9fPSEwO2xldHtpbnNlcnQ6byxyZW1vdmU6cyxwYXRjaFByb3A6YyxjcmVhdGVFbGVtZW50OmwsY3JlYXRlVGV4dDp1LGNyZWF0ZUNvbW1lbnQ6ZCxzZXRUZXh0OmYsc2V0RWxlbWVudFRleHQ6cCxwYXJlbnROb2RlOm0sbmV4dFNpYmxpbmc6aCxzZXRTY29wZUlkOmc9cixpbnNlcnRTdGF0aWNDb250ZW50Ol99PWUsdj0oZSx0LHIsaT1udWxsLGE9bnVsbCxvPW51bGwscz12b2lkIDAsYz1udWxsLGw9ISF0LmR5bmFtaWNDaGlsZHJlbik9PntpZihlPT09dClyZXR1cm47ZSYmIVZpKGUsdCkmJihpPXJlKGUpLFcoZSxhLG8sITApLGU9bnVsbCksdC5wYXRjaEZsYWc9PT0tMiYmKGw9ITEsdC5keW5hbWljQ2hpbGRyZW49bnVsbCksdC5keW5hbWljQ2hpbGRyZW4mJmUmJmUuZHluYW1pY0NoaWxkcmVuJiZlLmR5bmFtaWNDaGlsZHJlbi5oYXNPbmNlJiYodC5keW5hbWljQ2hpbGRyZW49PT1uJiYodC5keW5hbWljQ2hpbGRyZW49W10pLHQuZHluYW1pY0NoaWxkcmVuLmhhc09uY2U9ITApO2xldHt0eXBlOnUscmVmOmQsc2hhcGVGbGFnOmZ9PXQ7c3dpdGNoKHUpe2Nhc2UgQWk6eShlLHQscixpKTticmVhaztjYXNlIGppOmIoZSx0LHIsaSk7YnJlYWs7Y2FzZSBNaTplPz94KHQscixpLHMpO2JyZWFrO2Nhc2UgcTpNKGUsdCxyLGksYSxvLHMsYyxsKTticmVhaztkZWZhdWx0OmYmMT93KGUsdCxyLGksYSxvLHMsYyxsKTpmJjY/TihlLHQscixpLGEsbyxzLGMsbCk6KGYmNjR8fGYmMTI4KSYmdS5wcm9jZXNzKGUsdCxyLGksYSxvLHMsYyxsLGFlKX1kIT1udWxsJiZhP1duKGQsZSYmZS5yZWYsbyx0fHxlLCF0KTpkPT1udWxsJiZlJiZlLnJlZiE9bnVsbCYmV24oZS5yZWYsbnVsbCxvLGUsITApfSx5PShlLHQsbixyKT0+e2lmKGU9PW51bGwpbyh0LmVsPXUodC5jaGlsZHJlbiksbixyKTtlbHNle2xldCBuPXQuZWw9ZS5lbDt0LmNoaWxkcmVuIT09ZS5jaGlsZHJlbiYmZihuLHQuY2hpbGRyZW4pfX0sYj0oZSx0LG4scik9PntlPT1udWxsP28odC5lbD1kKHQuY2hpbGRyZW58fGBgKSxuLHIpOnQuZWw9ZS5lbH0seD0oZSx0LG4scik9PntbZS5lbCxlLmFuY2hvcl09XyhlLmNoaWxkcmVuLHQsbixyLGUuZWwsZS5hbmNob3IpfSxTPSh7ZWw6ZSxhbmNob3I6dH0sbixyKT0+e2xldCBpO2Zvcig7ZSYmZSE9PXQ7KWk9aChlKSxvKGUsbixyKSxlPWk7byh0LG4scil9LEM9KHtlbDplLGFuY2hvcjp0fSk9PntsZXQgbjtmb3IoO2UmJmUhPT10OyluPWgoZSkscyhlKSxlPW47cyh0KX0sdz0oZSx0LG4scixpLGEsbyxzLGMpPT57aWYodC50eXBlPT09YHN2Z2A/bz1gc3ZnYDp0LnR5cGU9PT1gbWF0aGAmJihvPWBtYXRobWxgKSxlPT1udWxsKUUodCxuLHIsaSxhLG8scyxjKTtlbHNle2xldCBuPWUuZWwmJmUuZWwuX2lzVnVlQ0U/ZS5lbDpudWxsO3RyeXtuJiZuLl9iZWdpblBhdGNoKCksayhlLHQsaSxhLG8scyxjKX1maW5hbGx5e24mJm4uX2VuZFBhdGNoKCl9fX0sRT0oZSx0LG4scixpLGEscyx1KT0+e2xldCBkLGYse3Byb3BzOm0sc2hhcGVGbGFnOmgsdHJhbnNpdGlvbjpnLGRpcnM6X309ZTtpZihkPWUuZWw9bChlLnR5cGUsYSxtJiZtLmlzLG0pLGgmOD9wKGQsZS5jaGlsZHJlbik6aCYxNiYmTyhlLmNoaWxkcmVuLGQsbnVsbCxyLGksYmkoZSxhKSxzLHUpLF8mJnduKGUsbnVsbCxyLGBjcmVhdGVkYCksRChkLGUsZS5zY29wZUlkLHMsciksbSl7Zm9yKGxldCBlIGluIG0pZSE9PWB2YWx1ZWAmJiFUKGUpJiZjKGQsZSxudWxsLG1bZV0sYSxyKTtgdmFsdWVgaW4gbSYmYyhkLGB2YWx1ZWAsbnVsbCxtLnZhbHVlLGEpLChmPW0ub25Wbm9kZUJlZm9yZU1vdW50KSYmZWEoZixyLGUpfV8mJnduKGUsbnVsbCxyLGBiZWZvcmVNb3VudGApO2xldCB2PVNpKGksZyk7diYmZy5iZWZvcmVFbnRlcihkKSxvKGQsdCxuKSwoKGY9bSYmbS5vblZub2RlTW91bnRlZCl8fHZ8fF8pJiZfaSgoKT0+e3RyeXtmJiZlYShmLHIsZSksdiYmZy5lbnRlcihkKSxfJiZ3bihlLG51bGwscixgbW91bnRlZGApfWZpbmFsbHl7fX0saSl9LEQ9KGUsdCxuLHIsaSk9PntpZihuJiZnKGUsbikscilmb3IobGV0IHQ9MDt0PHIubGVuZ3RoO3QrKylnKGUsclt0XSk7aWYoaSl7bGV0IG49aS5zdWJUcmVlO2lmKHQ9PT1ufHxPaShuLnR5cGUpJiYobi5zc0NvbnRlbnQ9PT10fHxuLnNzRmFsbGJhY2s9PT10KSl7bGV0IHQ9aS52bm9kZTtEKGUsdCx0LnNjb3BlSWQsdC5zbG90U2NvcGVJZHMsaS5wYXJlbnQpfX19LE89KGUsdCxuLHIsaSxhLG8scyxjPTApPT57Zm9yKGxldCBsPWM7bDxlLmxlbmd0aDtsKyspe2xldCBjPWVbbF09cz9aaShlW2xdKTpYaShlW2xdKTt2KG51bGwsYyx0LG4scixpLGEsbyxzKX19LGs9KGUsbixyLGksYSxvLHMpPT57bGV0IGw9bi5lbD1lLmVsLHtwYXRjaEZsYWc6dSxkeW5hbWljQ2hpbGRyZW46ZCxkaXJzOmZ9PW47dXw9ZS5wYXRjaEZsYWcmMTY7bGV0IG09ZS5wcm9wc3x8dCxoPW4ucHJvcHN8fHQsZztpZihyJiZ4aShyLCExKSwoZz1oLm9uVm5vZGVCZWZvcmVVcGRhdGUpJiZlYShnLHIsbixlKSxmJiZ3bihuLGUscixgYmVmb3JlVXBkYXRlYCksciYmeGkociwhMCksZCYmKCFlLmR5bmFtaWNDaGlsZHJlbnx8ZS5keW5hbWljQ2hpbGRyZW4ubGVuZ3RoIT09ZC5sZW5ndGgpJiYodT0wLHM9ITEsZD1udWxsKSwobS5pbm5lckhUTUwmJmguaW5uZXJIVE1MPT1udWxsfHxtLnRleHRDb250ZW50JiZoLnRleHRDb250ZW50PT1udWxsKSYmcChsLGBgKSxkP0EoZS5keW5hbWljQ2hpbGRyZW4sZCxsLHIsaSxiaShuLGEpLG8pOnN8fEIoZSxuLGwsbnVsbCxyLGksYmkobixhKSxvLCExKSx1PjApe2lmKHUmMTYpaihsLG0saCxyLGEpO2Vsc2UgaWYodSYyJiZtLmNsYXNzIT09aC5jbGFzcyYmYyhsLGBjbGFzc2AsbnVsbCxoLmNsYXNzLGEpLHUmNCYmYyhsLGBzdHlsZWAsbS5zdHlsZSxoLnN0eWxlLGEpLHUmOCl7bGV0IGU9bi5keW5hbWljUHJvcHM7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCBuPWVbdF0saT1tW25dLG89aFtuXTsobyE9PWl8fG49PT1gdmFsdWVgKSYmYyhsLG4saSxvLGEscil9fXUmMSYmZS5jaGlsZHJlbiE9PW4uY2hpbGRyZW4mJnAobCxuLmNoaWxkcmVuKX1lbHNlIXMmJmQ9PW51bGwmJmoobCxtLGgscixhKTsoKGc9aC5vblZub2RlVXBkYXRlZCl8fGYpJiZfaSgoKT0+e2cmJmVhKGcscixuLGUpLGYmJnduKG4sZSxyLGB1cGRhdGVkYCl9LGkpfSxBPShlLHQsbixyLGksYSxvKT0+e2ZvcihsZXQgcz0wO3M8dC5sZW5ndGg7cysrKXtsZXQgYz1lW3NdLGw9dFtzXSx1PWMuZWx8fERpKGMpLGQ9dSYmKGMudHlwZT09PXF8fCFWaShjLGwpfHxjLnNoYXBlRmxhZyYxOTgpP20odSk6bjt2KGMsbCxkLG51bGwscixpLGEsbywhMCl9fSxqPShlLG4scixpLGEpPT57aWYobiE9PXIpe2lmKG4hPT10KWZvcihsZXQgdCBpbiBuKSFUKHQpJiYhKHQgaW4gcikmJmMoZSx0LG5bdF0sbnVsbCxhLGkpO2ZvcihsZXQgdCBpbiByKXtpZihUKHQpKWNvbnRpbnVlO2xldCBvPXJbdF0scz1uW3RdO28hPT1zJiZ0IT09YHZhbHVlYCYmYyhlLHQscyxvLGEsaSl9YHZhbHVlYGluIHImJmMoZSxgdmFsdWVgLG4udmFsdWUsci52YWx1ZSxhKX19LE09KGUsdCxuLHIsaSxhLHMsYyxsKT0+e2xldCBkPXQuZWw9ZT9lLmVsOnUoYGApLGY9dC5hbmNob3I9ZT9lLmFuY2hvcjp1KGBgKSx7cGF0Y2hGbGFnOnAsZHluYW1pY0NoaWxkcmVuOm0sc2xvdFNjb3BlSWRzOmh9PXQ7aCYmKGM9Yz9jLmNvbmNhdChoKTpoKSxlPT1udWxsPyhvKGQsbixyKSxvKGYsbixyKSxPKHQuY2hpbGRyZW58fFtdLG4sZixpLGEscyxjLGwpKTpwPjAmJnAmNjQmJm0mJmUuZHluYW1pY0NoaWxkcmVuJiZlLmR5bmFtaWNDaGlsZHJlbi5sZW5ndGg9PT1tLmxlbmd0aD8oQShlLmR5bmFtaWNDaGlsZHJlbixtLG4saSxhLHMsYyksKHQua2V5IT1udWxsfHxpJiZ0PT09aS5zdWJUcmVlKSYmQ2koZSx0LCEwKSk6QihlLHQsbixmLGksYSxzLGMsbCl9LE49KGUsdCxuLHIsaSxhLG8scyxjKT0+e3Quc2xvdFNjb3BlSWRzPXMsZT09bnVsbD90LnNoYXBlRmxhZyY1MTI/aS5jdHguYWN0aXZhdGUodCxuLHIsbyxjKTpGKHQsbixyLGksYSxvLGMpOkkoZSx0LGMpfSxGPShlLHQsbixyLGksYSxvKT0+e2xldCBzPWUuY29tcG9uZW50PWlhKGUscixpKTtpZihxbihlKSYmKHMuY3R4LnJlbmRlcmVyPWFlKSxwYShzLCExLG8pLHMuYXN5bmNEZXApe2lmKGkmJmkucmVnaXN0ZXJEZXAocyxMLG8sYSksIWUuZWwpe2xldCByPXMuc3ViVHJlZT1XaShqaSk7YihudWxsLHIsdCxuKSxlLnBsYWNlaG9sZGVyPXIuZWx9fWVsc2UgTChzLGUsdCxuLGksYSxvKX0sST0oZSx0LG4pPT57bGV0IHI9dC5jb21wb25lbnQ9ZS5jb21wb25lbnQ7aWYoWXIoZSx0LG4pKXtpZihyLmFzeW5jRGVwJiYhci5hc3luY1Jlc29sdmVkKXt0LmVsPWUuZWwsdC5wbGFjZWhvbGRlcj1lLnBsYWNlaG9sZGVyLHoocix0LG4pO3JldHVybn1yLm5leHQ9dCxyLnVwZGF0ZSgpfWVsc2UgdC5lbD1lLmVsLHQucGxhY2Vob2xkZXI9ZS5wbGFjZWhvbGRlcixyLnZub2RlPXR9LEw9KGUsdCxuLHIsaSxhLG8pPT57bGV0IHM9KCk9PntpZihlLmlzTW91bnRlZCl7bGV0e25leHQ6dCxidTpuLHU6cixwYXJlbnQ6cyx2bm9kZTpjfT1lO3tsZXQgbj1UaShlKTtpZihuKXt0JiYodC5lbD1jLmVsLHooZSx0LG8pKSxuLmFzeW5jRGVwLnRoZW4oKCk9PntfaSgoKT0+e2UuaXNVbm1vdW50ZWR8fGwoKX0saSl9KTtyZXR1cm59fWxldCB1PXQsZDt4aShlLCExKSx0Pyh0LmVsPWMuZWwseihlLHQsbykpOnQ9YyxuJiZQKG4pLChkPXQucHJvcHMmJnQucHJvcHMub25Wbm9kZUJlZm9yZVVwZGF0ZSkmJmVhKGQscyx0LGMpLHhpKGUsITApO2xldCBmPUdyKGUpLHA9ZS5zdWJUcmVlO2Uuc3ViVHJlZT1mLHYocCxmLG0ocC5lbCkscmUocCksZSxpLGEpLHQuZWw9Zi5lbCx1PT09bnVsbCYmUXIoZSxmLmVsKSxyJiZfaShyLGkpLChkPXQucHJvcHMmJnQucHJvcHMub25Wbm9kZVVwZGF0ZWQpJiZfaSgoKT0+ZWEoZCxzLHQsYyksaSl9ZWxzZXtsZXQgbyx7ZWw6cyxwcm9wczpjfT10LHtibTpsLG06dSxwYXJlbnQ6ZCxyb290OmYsdHlwZTpwfT1lLG09S24odCk7aWYoeGkoZSwhMSksbCYmUChsKSwhbSYmKG89YyYmYy5vblZub2RlQmVmb3JlTW91bnQpJiZlYShvLGQsdCkseGkoZSwhMCkscyYmc2Upe2xldCB0PSgpPT57ZS5zdWJUcmVlPUdyKGUpLHNlKHMsZS5zdWJUcmVlLGUsaSxudWxsKX07bSYmcC5fX2FzeW5jSHlkcmF0ZT9wLl9fYXN5bmNIeWRyYXRlKHMsZSx0KTp0KCl9ZWxzZXtmLmNlJiZmLmNlLl9oYXNTaGFkb3dSb290KCkmJmYuY2UuX2luamVjdENoaWxkU3R5bGUocCxlLnBhcmVudD9lLnBhcmVudC50eXBlOnZvaWQgMCk7bGV0IG89ZS5zdWJUcmVlPUdyKGUpO3YobnVsbCxvLG4scixlLGksYSksdC5lbD1vLmVsfWlmKHUmJl9pKHUsaSksIW0mJihvPWMmJmMub25Wbm9kZU1vdW50ZWQpKXtsZXQgZT10O19pKCgpPT5lYShvLGQsZSksaSl9KHQuc2hhcGVGbGFnJjI1Nnx8ZCYmS24oZC52bm9kZSkmJmQudm5vZGUuc2hhcGVGbGFnJjI1NikmJmUuYSYmX2koZS5hLGkpLGUuaXNNb3VudGVkPSEwLHQ9bj1yPW51bGx9fTtlLnNjb3BlLm9uKCk7bGV0IGM9ZS5lZmZlY3Q9bmV3IGhlKHMpO2Uuc2NvcGUub2ZmKCk7bGV0IGw9ZS51cGRhdGU9Yy5ydW4uYmluZChjKSx1PWUuam9iPWMucnVuSWZEaXJ0eS5iaW5kKGMpO3UuaT1lLHUuaWQ9ZS51aWQsYy5zY2hlZHVsZXI9KCk9PnVuKHUpLHhpKGUsITApLGwoKX0sej0oZSx0LG4pPT57dC5jb21wb25lbnQ9ZTtsZXQgcj1lLnZub2RlLnByb3BzO2Uudm5vZGU9dCxlLm5leHQ9bnVsbCxyaShlLHQucHJvcHMscixuKSxnaShlLHQuY2hpbGRyZW4sbiksQWUoKSxwbihlKSxqZSgpfSxCPShlLHQsbixyLGksYSxvLHMsYz0hMSk9PntsZXQgbD1lJiZlLmNoaWxkcmVuLHU9ZT9lLnNoYXBlRmxhZzowLGQ9dC5jaGlsZHJlbix7cGF0Y2hGbGFnOmYsc2hhcGVGbGFnOm19PXQ7aWYoZj4wKXtpZihmJjEyOCl7SChsLGQsbixyLGksYSxvLHMsYyk7cmV0dXJufWlmKGYmMjU2KXtWKGwsZCxuLHIsaSxhLG8scyxjKTtyZXR1cm59fW0mOD8odSYxNiYmbmUobCxpLGEpLGQhPT1sJiZwKG4sZCkpOnUmMTY/bSYxNj9IKGwsZCxuLHIsaSxhLG8scyxjKTpuZShsLGksYSwhMCk6KHUmOCYmcChuLGBgKSxtJjE2JiZPKGQsbixyLGksYSxvLHMsYykpfSxWPShlLHQscixpLGEsbyxzLGMsbCk9PntlfHw9bix0fHw9bjtsZXQgdT1lLmxlbmd0aCxkPXQubGVuZ3RoLGY9TWF0aC5taW4odSxkKSxwPTA7Zm9yKDtwPGY7cCsrKXtsZXQgbj10W3BdPWw/WmkodFtwXSk6WGkodFtwXSk7dihlW3BdLG4scixudWxsLGEsbyxzLGMsbCl9dT5kP25lKGUsYSxvLCEwLCExLGYpOk8odCxyLGksYSxvLHMsYyxsLGYpfSxIPShlLHQscixpLGEsbyxzLGMsbCk9PntsZXQgdT0wLGQ9dC5sZW5ndGgsZj1lLmxlbmd0aC0xLHA9ZC0xO2Zvcig7dTw9ZiYmdTw9cDspe2xldCBuPWVbdV0saT10W3VdPWw/WmkodFt1XSk6WGkodFt1XSk7aWYoVmkobixpKSl2KG4saSxyLG51bGwsYSxvLHMsYyxsKTtlbHNlIGJyZWFrO3UrK31mb3IoO3U8PWYmJnU8PXA7KXtsZXQgbj1lW2ZdLGk9dFtwXT1sP1ppKHRbcF0pOlhpKHRbcF0pO2lmKFZpKG4saSkpdihuLGkscixudWxsLGEsbyxzLGMsbCk7ZWxzZSBicmVhaztmLS0scC0tfWlmKHU+Zil7aWYodTw9cCl7bGV0IGU9cCsxLG49ZTxkP3RbZV0uZWw6aTtmb3IoO3U8PXA7KXYobnVsbCx0W3VdPWw/WmkodFt1XSk6WGkodFt1XSkscixuLGEsbyxzLGMsbCksdSsrfX1lbHNlIGlmKHU+cClmb3IoO3U8PWY7KVcoZVt1XSxhLG8sITApLHUrKztlbHNle2xldCBtPXUsaD11LGc9bmV3IE1hcDtmb3IodT1oO3U8PXA7dSsrKXtsZXQgZT10W3VdPWw/WmkodFt1XSk6WGkodFt1XSk7ZS5rZXkhPW51bGwmJmcuc2V0KGUua2V5LHUpfWxldCBfLHk9MCxiPXAtaCsxLHg9ITEsUz0wLEM9QXJyYXkoYik7Zm9yKHU9MDt1PGI7dSsrKUNbdV09MDtmb3IodT1tO3U8PWY7dSsrKXtsZXQgbj1lW3VdO2lmKHk+PWIpe1cobixhLG8sITApO2NvbnRpbnVlfWxldCBpO2lmKG4ua2V5IT1udWxsKWk9Zy5nZXQobi5rZXkpO2Vsc2UgZm9yKF89aDtfPD1wO18rKylpZihDW18taF09PT0wJiZWaShuLHRbX10pKXtpPV87YnJlYWt9aT09PXZvaWQgMD9XKG4sYSxvLCEwKTooQ1tpLWhdPXUrMSxpPj1TP1M9aTp4PSEwLHYobix0W2ldLHIsbnVsbCxhLG8scyxjLGwpLHkrKyl9bGV0IHc9eD93aShDKTpuO2ZvcihfPXcubGVuZ3RoLTEsdT1iLTE7dT49MDt1LS0pe2xldCBlPWgrdSxuPXRbZV0sZj10W2UrMV0scD1lKzE8ZD9mLmVsfHxEaShmKTppO0NbdV09PT0wP3YobnVsbCxuLHIscCxhLG8scyxjLGwpOngmJihfPDB8fHUhPT13W19dP1UobixyLHAsMik6Xy0tKX19fSxVPShlLHQsbixyLGk9bnVsbCk9PntsZXR7ZWw6YSx0eXBlOmMsdHJhbnNpdGlvbjpsLGNoaWxkcmVuOnUsc2hhcGVGbGFnOmR9PWU7aWYoZCY2KVUoZS5jb21wb25lbnQuc3ViVHJlZSx0LG4scik7ZWxzZSBpZihkJjEyOCllLnN1c3BlbnNlLm1vdmUodCxuLHIpO2Vsc2UgaWYoZCY2NCljLm1vdmUoZSx0LG4sYWUpO2Vsc2UgaWYoYz09PXEpe28oYSx0LG4pO2ZvcihsZXQgZT0wO2U8dS5sZW5ndGg7ZSsrKVUodVtlXSx0LG4scik7byhlLmFuY2hvcix0LG4pfWVsc2UgaWYoYz09PU1pKVMoZSx0LG4pO2Vsc2UgaWYociE9PTImJmQmMSYmbCl7aWYocj09PTApbC5wZXJzaXN0ZWQmJiFhW0ZuXT9vKGEsdCxuKToobC5iZWZvcmVFbnRlcihhKSxvKGEsdCxuKSxfaSgoKT0+bC5lbnRlcihhKSxpKSk7ZWxzZXtsZXR7bGVhdmU6cixkZWxheUxlYXZlOmksYWZ0ZXJMZWF2ZTpjfT1sLHU9KCk9PntlLmN0eC5pc1VubW91bnRlZD9zKGEpOm8oYSx0LG4pfSxkPSgpPT57bGV0IGU9YS5faXNMZWF2aW5nfHwhIWFbRm5dO2EuX2lzTGVhdmluZyYmYVtGbl0oITApLGwucGVyc2lzdGVkJiYhZT91KCk6cihhLCgpPT57dSgpLGMmJmMoKX0pfTtpP2koYSx1LGQpOmQoKX19ZWxzZSBvKGEsdCxuKX0sVz0oZSx0LG4scj0hMSxpPSExKT0+e2xldHt0eXBlOmEscHJvcHM6byxyZWY6cyxjaGlsZHJlbjpjLGR5bmFtaWNDaGlsZHJlbjpsLHNoYXBlRmxhZzp1LHBhdGNoRmxhZzpkLGRpcnM6ZixjYWNoZUluZGV4OnAsbWVtbzptfT1lO2lmKChkPT09LTJ8fGwmJmwuaGFzT25jZSkmJihpPSExKSxzIT1udWxsJiYoQWUoKSxXbihzLG51bGwsbixlLCEwKSxqZSgpKSxwPT1udWxsfHxlLmN0eCYmZS5jdHghPT10fHwodC5yZW5kZXJDYWNoZVtwXT12b2lkIDApLHUmMjU2KXt0LmN0eC5kZWFjdGl2YXRlKGUpO3JldHVybn1sZXQgaD11JjEmJmYsZz0hS24oZSksXztpZihnJiYoXz1vJiZvLm9uVm5vZGVCZWZvcmVVbm1vdW50KSYmZWEoXyx0LGUpLHUmNil0ZShlLmNvbXBvbmVudCxuLHIpO2Vsc2V7aWYodSYxMjgpe2Uuc3VzcGVuc2UudW5tb3VudChuLHIpO3JldHVybn1oJiZ3bihlLG51bGwsdCxgYmVmb3JlVW5tb3VudGApLHUmNjQ/ZS50eXBlLnJlbW92ZShlLHQsbixhZSxyKTpsJiYhbC5oYXNPbmNlJiYoYSE9PXF8fGQ+MCYmZCY2NCk/bmUobCx0LG4sITEsITApOihhPT09cSYmZCYzODR8fCFpJiZ1JjE2KSYmbmUoYyx0LG4pLHImJmVlKGUpfWxldCB2PW0hPW51bGwmJnA9PW51bGw7KGcmJihfPW8mJm8ub25Wbm9kZVVubW91bnRlZCl8fGh8fHYpJiZfaSgoKT0+e18mJmVhKF8sdCxlKSxoJiZ3bihlLG51bGwsdCxgdW5tb3VudGVkYCksdiYmKGUuZWw9bnVsbCl9LG4pfSxlZT1lPT57bGV0e3R5cGU6dCxlbDpuLGFuY2hvcjpyLHRyYW5zaXRpb246aX09ZSxhPXQ9PT1xO2lmKGEmJiFpKXtHKG4scik7cmV0dXJufWlmKHQ9PT1NaSl7QyhlKSxpJiYhaS5wZXJzaXN0ZWQmJmkuYWZ0ZXJMZWF2ZSYmaS5hZnRlckxlYXZlKCk7cmV0dXJufWxldCBvPWE/em4oZSk6ZSxjPSgpPT57YT9tKG4pJiZHKG4scik6cyhuKSxpJiYhaS5wZXJzaXN0ZWQmJmkuYWZ0ZXJMZWF2ZSYmaS5hZnRlckxlYXZlKCl9O2lmKG8mJm8uc2hhcGVGbGFnJjEmJmkmJiFpLnBlcnNpc3RlZCl7bGV0e2xlYXZlOmUsZGVsYXlMZWF2ZTp0fT1pLG49by5lbCxyPSgpPT5lKG4sYyk7dD90KG4sYyxyKTpyKCl9ZWxzZSBjKCl9LEc9KGUsdCk9PntsZXQgbjtmb3IoO2UhPT10OyluPWgoZSkscyhlKSxlPW47cyh0KX0sdGU9KGUsdCxuKT0+e2xldHtidW06cixzY29wZTppLGpvYjphLHN1YlRyZWU6byx1bTpzLG06YyxhOmx9PWU7RWkoYyksRWkobCksciYmUChyKSxpLnN0b3AoKSxhPyhhLmZsYWdzfD04LFcobyxlLHQsbikpOmUudm5vZGUuZWwmJm8mJihvLnRyYW5zaXRpb249ZS52bm9kZS50cmFuc2l0aW9uLFcobyxlLHQsbikpLHMmJl9pKHMsdCksX2koKCk9PntlLmlzVW5tb3VudGVkPSEwfSx0KX0sbmU9KGUsdCxuLHI9ITEsaT0hMSxhPTApPT57Zm9yKGxldCBvPWE7bzxlLmxlbmd0aDtvKyspVyhlW29dLHQsbixyLGkpfSxyZT1lPT57aWYoZS5zaGFwZUZsYWcmNilyZXR1cm4gcmUoZS5jb21wb25lbnQuc3ViVHJlZSk7aWYoZS5zaGFwZUZsYWcmMTI4KXJldHVybiBlLnN1c3BlbnNlLm5leHQoKTtsZXQgdD1oKGUuYW5jaG9yfHxlLmVsKSxuPXQmJnRbTm5dO3JldHVybiBuP2gobik6dH0saWU9KGUsdCxuKT0+e2duKCgpPT57ZT09bnVsbD90Ll92bm9kZSYmVyh0Ll92bm9kZSxudWxsLG51bGwsITApOnYodC5fdm5vZGV8fG51bGwsZSx0LG51bGwsbnVsbCxudWxsLG4pLHQuX3Zub2RlPWV9LGUmJnQuX3Zub2RlP3ZvaWQgMDplJiZlLmNvbXBvbmVudD9lLmNvbXBvbmVudC51aWQ6cmEoKSl9LGFlPXtwOnYsdW06VyxtOlUscjplZSxtdDpGLG1jOk8scGM6QixwYmM6QSxuOnJlLG86ZX0sb2Usc2U7cmV0dXJuIGkmJihbb2Usc2VdPWkoYWUpKSx7cmVuZGVyOmllLGh5ZHJhdGU6b2UsY3JlYXRlQXBwOlJyKGllLG9lKX19ZnVuY3Rpb24gYmkoe3R5cGU6ZSxwcm9wczp0fSxuKXtyZXR1cm4gbj09PWBzdmdgJiZlPT09YGZvcmVpZ25PYmplY3RgfHxuPT09YG1hdGhtbGAmJmU9PT1gYW5ub3RhdGlvbi14bWxgJiZ0JiZ0LmVuY29kaW5nJiZ0LmVuY29kaW5nLmluY2x1ZGVzKGBodG1sYCk/dm9pZCAwOm59ZnVuY3Rpb24geGkoe2VmZmVjdDplLGpvYjp0fSxuKXtuPyhlLmZsYWdzfD0zMix0LmZsYWdzfD00KTooZS5mbGFncyY9LTMzLHQuZmxhZ3MmPS01KX1mdW5jdGlvbiBTaShlLHQpe3JldHVybighZXx8ZSYmIWUucGVuZGluZ0JyYW5jaCkmJnQmJiF0LnBlcnNpc3RlZH1mdW5jdGlvbiBDaShlLHQsbj0hMSl7bGV0IHI9ZS5jaGlsZHJlbixpPXQuY2hpbGRyZW47aWYoZChyKSYmZChpKSlmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrKyl7bGV0IHQ9cltlXSxhPWlbZV07YS5zaGFwZUZsYWcmMSYmIWEuZHluYW1pY0NoaWxkcmVuJiYoKGEucGF0Y2hGbGFnPD0wfHxhLnBhdGNoRmxhZz09PTMyKSYmKGE9aVtlXT1aaShpW2VdKSxhLmVsPXQuZWwpLCFuJiZhLnBhdGNoRmxhZyE9PS0yJiZDaSh0LGEpKSxhLnR5cGU9PT1BaSYmKGEucGF0Y2hGbGFnPT09LTEmJihhPWlbZV09WmkoYSkpLGEuZWw9dC5lbCksYS50eXBlPT09amkmJiFhLmVsJiYoYS5lbD10LmVsKX19ZnVuY3Rpb24gd2koZSl7bGV0IHQ9ZS5zbGljZSgpLG49WzBdLHIsaSxhLG8scyxjPWUubGVuZ3RoO2ZvcihyPTA7cjxjO3IrKyl7bGV0IGM9ZVtyXTtpZihjIT09MCl7aWYoaT1uW24ubGVuZ3RoLTFdLGVbaV08Yyl7dFtyXT1pLG4ucHVzaChyKTtjb250aW51ZX1mb3IoYT0wLG89bi5sZW5ndGgtMTthPG87KXM9YStvPj4xLGVbbltzXV08Yz9hPXMrMTpvPXM7YzxlW25bYV1dJiYoYT4wJiYodFtyXT1uW2EtMV0pLG5bYV09cil9fWZvcihhPW4ubGVuZ3RoLG89blthLTFdO2EtLT4wOyluW2FdPW8sbz10W29dO3JldHVybiBufWZ1bmN0aW9uIFRpKGUpe2xldCB0PWUuc3ViVHJlZS5jb21wb25lbnQ7aWYodClyZXR1cm4gdC5hc3luY0RlcCYmIXQuYXN5bmNSZXNvbHZlZD90OlRpKHQpfWZ1bmN0aW9uIEVpKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5mbGFnc3w9OH1mdW5jdGlvbiBEaShlKXtpZihlLnBsYWNlaG9sZGVyKXJldHVybiBlLnBsYWNlaG9sZGVyO2xldCB0PWUuY29tcG9uZW50O3JldHVybiB0P0RpKHQuc3ViVHJlZSk6bnVsbH12YXIgT2k9ZT0+ZS5fX2lzU3VzcGVuc2U7ZnVuY3Rpb24ga2koZSx0KXt0JiZ0LnBlbmRpbmdCcmFuY2g/ZChlKT90LmVmZmVjdHMucHVzaCguLi5lKTp0LmVmZmVjdHMucHVzaChlKTpmbihlKX12YXIgcT1TeW1ib2wuZm9yKGB2LWZndGApLEFpPVN5bWJvbC5mb3IoYHYtdHh0YCksamk9U3ltYm9sLmZvcihgdi1jbXRgKSxNaT1TeW1ib2wuZm9yKGB2LXN0Y2ApLE5pPVtdLFBpPW51bGw7ZnVuY3Rpb24gSihlPSExKXtOaS5wdXNoKFBpPWU/bnVsbDpbXSl9ZnVuY3Rpb24gRmkoKXtOaS5wb3AoKSxQaT1OaVtOaS5sZW5ndGgtMV18fG51bGx9dmFyIElpPTE7ZnVuY3Rpb24gTGkoZSx0PSExKXtJaSs9ZSxlPDAmJlBpJiZ0JiYoUGkuaGFzT25jZT0hMCl9ZnVuY3Rpb24gUmkoZSl7cmV0dXJuIGUuZHluYW1pY0NoaWxkcmVuPUlpPjA/UGl8fG46bnVsbCxGaSgpLElpPjAmJlBpJiZQaS5wdXNoKGUpLGV9ZnVuY3Rpb24gWShlLHQsbixyLGksYSl7cmV0dXJuIFJpKFgoZSx0LG4scixpLGEsITApKX1mdW5jdGlvbiB6aShlLHQsbixyLGkpe3JldHVybiBSaShXaShlLHQsbixyLGksITApKX1mdW5jdGlvbiBCaShlKXtyZXR1cm4gZT9lLl9fdl9pc1ZOb2RlPT09ITA6ITF9ZnVuY3Rpb24gVmkoZSx0KXtyZXR1cm4gZS50eXBlPT09dC50eXBlJiZlLmtleT09PXQua2V5fXZhciBIaT0oe2tleTplfSk9PmU/P251bGwsVWk9KHtyZWY6ZSxyZWZfa2V5OnQscmVmX2ZvcjpufSk9Pih0eXBlb2YgZT09YG51bWJlcmAmJihlPWBgK2UpLGU9PW51bGw/bnVsbDpnKGUpfHxGdChlKXx8aChlKT97aTp5bixyOmUsazp0LGY6ISFufTplKTtmdW5jdGlvbiBYKGUsdD1udWxsLG49bnVsbCxyPTAsaT1udWxsLGE9ZT09PXE/MDoxLG89ITEscz0hMSl7bGV0IGM9e19fdl9pc1ZOb2RlOiEwLF9fdl9za2lwOiEwLHR5cGU6ZSxwcm9wczp0LGtleTp0JiZIaSh0KSxyZWY6dCYmVWkodCksc2NvcGVJZDpibixzbG90U2NvcGVJZHM6bnVsbCxjaGlsZHJlbjpuLGNvbXBvbmVudDpudWxsLHN1c3BlbnNlOm51bGwsc3NDb250ZW50Om51bGwsc3NGYWxsYmFjazpudWxsLGRpcnM6bnVsbCx0cmFuc2l0aW9uOm51bGwsZWw6bnVsbCxhbmNob3I6bnVsbCx0YXJnZXQ6bnVsbCx0YXJnZXRTdGFydDpudWxsLHRhcmdldEFuY2hvcjpudWxsLHN0YXRpY0NvdW50OjAsc2hhcGVGbGFnOmEscGF0Y2hGbGFnOnIsZHluYW1pY1Byb3BzOmksZHluYW1pY0NoaWxkcmVuOm51bGwsYXBwQ29udGV4dDpudWxsLGN0eDp5bn07cmV0dXJuIHM/KFFpKGMsbiksYSYxMjgmJmUubm9ybWFsaXplKGMpKTpuJiYoYy5zaGFwZUZsYWd8PWcobik/ODoxNiksSWk+MCYmIW8mJlBpJiYoYy5wYXRjaEZsYWc+MHx8YSY2KSYmYy5wYXRjaEZsYWchPT0zMiYmUGkucHVzaChjKSxjfXZhciBXaT1HaTtmdW5jdGlvbiBHaShlLHQ9bnVsbCxuPW51bGwscj0wLGk9bnVsbCxhPSExKXtpZihlJiZlIT09ZnJ8fChlPWppKSxCaShlKSl7bGV0IHI9cWkoZSx0LCEwKTtyZXR1cm4gbiYmUWkocixuKSxJaT4wJiYhYSYmUGkmJihyLnNoYXBlRmxhZyY2P1BpW1BpLmluZGV4T2YoZSldPXI6UGkucHVzaChyKSksci5wYXRjaEZsYWc9LTIscn1pZih4YShlKSYmKGU9ZS5fX3ZjY09wdHMpLHQpe3Q9S2kodCk7bGV0e2NsYXNzOmUsc3R5bGU6bn09dDtlJiYhZyhlKSYmKHQuY2xhc3M9VyhlKSksdihuKSYmKEF0KG4pJiYhZChuKSYmKG49cyh7fSxuKSksdC5zdHlsZT16KG4pKX1sZXQgbz1nKGUpPzE6T2koZSk/MTI4OlBuKGUpPzY0OnYoZSk/NDpoKGUpPzI6MDtyZXR1cm4gWChlLHQsbixyLGksbyxhLCEwKX1mdW5jdGlvbiBLaShlKXtyZXR1cm4gZT9BdChlKXx8dGkoZSk/cyh7fSxlKTplOm51bGx9ZnVuY3Rpb24gcWkoZSx0LG49ITEscj0hMSl7bGV0e3Byb3BzOmkscmVmOmEscGF0Y2hGbGFnOm8sY2hpbGRyZW46cyx0cmFuc2l0aW9uOmN9PWUsbD10PyRpKGl8fHt9LHQpOmksdT17X192X2lzVk5vZGU6ITAsX192X3NraXA6ITAsdHlwZTplLnR5cGUscHJvcHM6bCxrZXk6bCYmSGkobCkscmVmOnQmJnQucmVmP24mJmE/ZChhKT9hLmNvbmNhdChVaSh0KSk6W2EsVWkodCldOlVpKHQpOmEsc2NvcGVJZDplLnNjb3BlSWQsc2xvdFNjb3BlSWRzOmUuc2xvdFNjb3BlSWRzLGNoaWxkcmVuOnMsdGFyZ2V0OmUudGFyZ2V0LHRhcmdldFN0YXJ0OmUudGFyZ2V0U3RhcnQsdGFyZ2V0QW5jaG9yOmUudGFyZ2V0QW5jaG9yLHN0YXRpY0NvdW50OmUuc3RhdGljQ291bnQsc2hhcGVGbGFnOmUuc2hhcGVGbGFnLHBhdGNoRmxhZzp0JiZlLnR5cGUhPT1xP289PT0tMT8xNjpvfDE2Om8sZHluYW1pY1Byb3BzOmUuZHluYW1pY1Byb3BzLGR5bmFtaWNDaGlsZHJlbjplLmR5bmFtaWNDaGlsZHJlbixhcHBDb250ZXh0OmUuYXBwQ29udGV4dCxkaXJzOmUuZGlycyx0cmFuc2l0aW9uOmMsY29tcG9uZW50OmUuY29tcG9uZW50LHN1c3BlbnNlOmUuc3VzcGVuc2Usc3NDb250ZW50OmUuc3NDb250ZW50JiZxaShlLnNzQ29udGVudCksc3NGYWxsYmFjazplLnNzRmFsbGJhY2smJnFpKGUuc3NGYWxsYmFjaykscGxhY2Vob2xkZXI6ZS5wbGFjZWhvbGRlcixlbDplLmVsLGFuY2hvcjplLmFuY2hvcixjdHg6ZS5jdHgsY2U6ZS5jZSxjYWNoZUluZGV4OmUuY2FjaGVJbmRleH07cmV0dXJuIGMmJnImJlJuKHUsYy5jbG9uZSh1KSksdX1mdW5jdGlvbiBKaShlPWAgYCx0PTApe3JldHVybiBXaShBaSxudWxsLGUsdCl9ZnVuY3Rpb24gWWkoZT1gYCx0PSExKXtyZXR1cm4gdD8oSigpLHppKGppLG51bGwsZSkpOldpKGppLG51bGwsZSl9ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIGU9PW51bGx8fHR5cGVvZiBlPT1gYm9vbGVhbmA/V2koamkpOmQoZSk/V2kocSxudWxsLGUuc2xpY2UoKSk6QmkoZSk/WmkoZSk6V2koQWksbnVsbCxTdHJpbmcoZSkpfWZ1bmN0aW9uIFppKGUpe3JldHVybiBlLmVsPT09bnVsbCYmZS5wYXRjaEZsYWchPT0tMXx8ZS5tZW1vP2U6cWkoZSl9ZnVuY3Rpb24gUWkoZSx0KXtsZXQgbj0wLHtzaGFwZUZsYWc6cn09ZTtpZih0PT1udWxsKXQ9bnVsbDtlbHNlIGlmKGQodCkpbj0xNjtlbHNlIGlmKHR5cGVvZiB0PT1gb2JqZWN0YCl7aWYociY2NSl7bGV0IG49dC5kZWZhdWx0O24mJihuLl9jJiYobi5fZD0hMSksUWkoZSxuKCkpLG4uX2MmJihuLl9kPSEwKSk7cmV0dXJufXtuPTMyO2xldCByPXQuXzshciYmIXRpKHQpP3QuX2N0eD15bjpyPT09MyYmeW4mJih5bi5zbG90cy5fPT09MT90Ll89MToodC5fPTIsZS5wYXRjaEZsYWd8PTEwMjQpKX19ZWxzZSBpZihoKHQpKXtpZihyJjY1KXtRaShlLHtkZWZhdWx0OnR9KTtyZXR1cm59dD17ZGVmYXVsdDp0LF9jdHg6eW59LG49MzJ9ZWxzZSB0PVN0cmluZyh0KSxyJjY0PyhuPTE2LHQ9W0ppKHQpXSk6bj04O2UuY2hpbGRyZW49dCxlLnNoYXBlRmxhZ3w9bn1mdW5jdGlvbiAkaSguLi5lKXtsZXQgdD17fTtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXTtmb3IobGV0IGUgaW4gcilpZihlPT09YGNsYXNzYCl0LmNsYXNzIT09ci5jbGFzcyYmKHQuY2xhc3M9VyhbdC5jbGFzcyxyLmNsYXNzXSkpO2Vsc2UgaWYoZT09PWBzdHlsZWApdC5zdHlsZT16KFt0LnN0eWxlLHIuc3R5bGVdKTtlbHNlIGlmKGEoZSkpe2xldCBuPXRbZV0saT1yW2VdO2kmJm4hPT1pJiYhKGQobikmJm4uaW5jbHVkZXMoaSkpP3RbZV09bj9bXS5jb25jYXQobixpKTppOmk9PW51bGwmJm49PW51bGwmJiFvKGUpJiYodFtlXT1pKX1lbHNlIGUhPT1gYCYmKHRbZV09cltlXSl9cmV0dXJuIHR9ZnVuY3Rpb24gZWEoZSx0LG4scj1udWxsKXtadChlLHQsNyxbbixyXSl9dmFyIHRhPUlyKCksbmE9MDtmdW5jdGlvbiByYSgpe3JldHVybiBuYX1mdW5jdGlvbiBpYShlLG4scil7bGV0IGk9ZS50eXBlLGE9KG4/bi5hcHBDb250ZXh0OmUuYXBwQ29udGV4dCl8fHRhLG89e3VpZDpuYSsrLHZub2RlOmUsdHlwZTppLHBhcmVudDpuLGFwcENvbnRleHQ6YSxyb290Om51bGwsbmV4dDpudWxsLHN1YlRyZWU6bnVsbCxlZmZlY3Q6bnVsbCx1cGRhdGU6bnVsbCxqb2I6bnVsbCxzY29wZTpuZXcgZGUoITApLHJlbmRlcjpudWxsLHByb3h5Om51bGwsZXhwb3NlZDpudWxsLGV4cG9zZVByb3h5Om51bGwsd2l0aFByb3h5Om51bGwscHJvdmlkZXM6bj9uLnByb3ZpZGVzOk9iamVjdC5jcmVhdGUoYS5wcm92aWRlcyksaWRzOm4/bi5pZHM6W2BgLDAsMF0sYWNjZXNzQ2FjaGU6bnVsbCxyZW5kZXJDYWNoZTpbXSxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlczpudWxsLHByb3BzT3B0aW9uczpzaShpLGEpLGVtaXRzT3B0aW9uczpVcihpLGEpLGVtaXQ6bnVsbCxlbWl0dGVkOm51bGwscHJvcHNEZWZhdWx0czp0LGluaGVyaXRBdHRyczppLmluaGVyaXRBdHRycyxjdHg6dCxkYXRhOnQscHJvcHM6dCxhdHRyczp0LHNsb3RzOnQscmVmczp0LHNldHVwU3RhdGU6dCxzZXR1cENvbnRleHQ6bnVsbCxzdXNwZW5zZTpyLHN1c3BlbnNlSWQ6cj9yLnBlbmRpbmdJZDowLGFzeW5jRGVwOm51bGwsYXN5bmNSZXNvbHZlZDohMSxpc01vdW50ZWQ6ITEsaXNVbm1vdW50ZWQ6ITEsaXNEZWFjdGl2YXRlZDohMSxiYzpudWxsLGM6bnVsbCxibTpudWxsLG06bnVsbCxidTpudWxsLHU6bnVsbCx1bTpudWxsLGJ1bTpudWxsLGRhOm51bGwsYTpudWxsLHJ0ZzpudWxsLHJ0YzpudWxsLGVjOm51bGwsc3A6bnVsbH07cmV0dXJuIG8uY3R4PXtfOm99LG8ucm9vdD1uP24ucm9vdDpvLG8uZW1pdD1Wci5iaW5kKG51bGwsbyksZS5jZSYmZS5jZShvKSxvfXZhciBhYT1udWxsLG9hPSgpPT5hYXx8eW4sc2EsY2E7e2xldCBlPVIoKSx0PSh0LG4pPT57bGV0IHI7cmV0dXJuKHI9ZVt0XSl8fChyPWVbdF09W10pLHIucHVzaChuKSxlPT57ci5sZW5ndGg+MT9yLmZvckVhY2godD0+dChlKSk6clswXShlKX19O3NhPXQoYF9fVlVFX0lOU1RBTkNFX1NFVFRFUlNfX2AsZT0+YWE9ZSksY2E9dChgX19WVUVfU1NSX1NFVFRFUlNfX2AsZT0+ZmE9ZSl9dmFyIGxhPWU9PntsZXQgdD1hYTtyZXR1cm4gc2EoZSksZS5zY29wZS5vbigpLCgpPT57ZS5zY29wZS5vZmYoKSxzYSh0KX19LHVhPSgpPT57YWEmJmFhLnNjb3BlLm9mZigpLHNhKG51bGwpfTtmdW5jdGlvbiBkYShlKXtyZXR1cm4gZS52bm9kZS5zaGFwZUZsYWcmNH12YXIgZmE9ITE7ZnVuY3Rpb24gcGEoZSx0PSExLG49ITEpe3QmJmNhKHQpO2xldHtwcm9wczpyLGNoaWxkcmVuOml9PWUudm5vZGUsYT1kYShlKTtuaShlLHIsYSx0KSxoaShlLGksbnx8dCk7bGV0IG89YT9tYShlLHQpOnZvaWQgMDtyZXR1cm4gdCYmY2EoITEpLG99ZnVuY3Rpb24gbWEoZSx0KXtsZXQgbj1lLnR5cGU7ZS5hY2Nlc3NDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLGUucHJveHk9bmV3IFByb3h5KGUuY3R4LHlyKTtsZXR7c2V0dXA6cn09bjtpZihyKXtBZSgpO2xldCBuPWUuc2V0dXBDb250ZXh0PXIubGVuZ3RoPjE/dmEoZSk6bnVsbCxpPWxhKGUpLGE9WHQocixlLDAsW2UucHJvcHMsbl0pLG89eShhKTtpZihqZSgpLGkoKSwob3x8ZS5zcCkmJiFLbihlKSYmVm4oZSksbyl7aWYoYS50aGVuKHVhLHVhKSx0KXJldHVybiBhLnRoZW4obj0+e2NhKCEwKTt0cnl7aGEoZSxuLHQpfWZpbmFsbHl7Y2EoITEpfX0pLmNhdGNoKHQ9PntRdCh0LGUsMCl9KTtlLmFzeW5jRGVwPWF9ZWxzZSBoYShlLGEsdCl9ZWxzZSBnYShlLHQpfWZ1bmN0aW9uIGhhKGUsdCxuKXtoKHQpP2UudHlwZS5fX3NzcklubGluZVJlbmRlcj9lLnNzclJlbmRlcj10OmUucmVuZGVyPXQ6dih0KSYmKGUuc2V0dXBTdGF0ZT1WdCh0KSksZ2EoZSxuKX1mdW5jdGlvbiBnYShlLHQsbil7bGV0IGk9ZS50eXBlO2UucmVuZGVyfHw9aS5yZW5kZXJ8fHI7e2xldCB0PWxhKGUpO0FlKCk7dHJ5e1NyKGUpfWZpbmFsbHl7amUoKSx0KCl9fX12YXIgX2E9e2dldChlLHQpe3JldHVybiBWZShlLGBnZXRgLGBgKSxlW3RdfX07ZnVuY3Rpb24gdmEoZSl7cmV0dXJue2F0dHJzOm5ldyBQcm94eShlLmF0dHJzLF9hKSxzbG90czplLnNsb3RzLGVtaXQ6ZS5lbWl0LGV4cG9zZTp0PT57ZS5leHBvc2VkPXR8fHt9fX19ZnVuY3Rpb24geWEoZSl7cmV0dXJuIGUuZXhwb3NlZD9lLmV4cG9zZVByb3h5fHw9bmV3IFByb3h5KFZ0KE10KGUuZXhwb3NlZCkpLHtnZXQodCxuKXtpZihuIGluIHQpcmV0dXJuIHRbbl07aWYobiBpbiBfcilyZXR1cm4gX3Jbbl0oZSl9LGhhcyhlLHQpe3JldHVybiB0IGluIGV8fHQgaW4gX3J9fSk6ZS5wcm94eX1mdW5jdGlvbiBiYShlLHQ9ITApe3JldHVybiBoKGUpP2UuZGlzcGxheU5hbWV8fGUubmFtZTplLm5hbWV8fHQmJmUuX19uYW1lfWZ1bmN0aW9uIHhhKGUpe3JldHVybiBoKGUpJiZgX192Y2NPcHRzYGluIGV9dmFyIFNhPShlLHQpPT5VdChlLHQsZmEpLENhPWAzLjUuNDRgLHdhPXZvaWQgMCxUYT10eXBlb2Ygd2luZG93PGB1YCYmd2luZG93LnRydXN0ZWRUeXBlcztpZihUYSl0cnl7d2E9VGEuY3JlYXRlUG9saWN5KGB2dWVgLHtjcmVhdGVIVE1MOmU9PmV9KX1jYXRjaHt9dmFyIEVhPXdhP2U9PndhLmNyZWF0ZUhUTUwoZSk6ZT0+ZSxEYT1gaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdgLE9hPWBodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MYCxrYT10eXBlb2YgZG9jdW1lbnQ8YHVgP2RvY3VtZW50Om51bGwsQWE9a2EmJmthLmNyZWF0ZUVsZW1lbnQoYHRlbXBsYXRlYCksamE9e2luc2VydDooZSx0LG4pPT57dC5pbnNlcnRCZWZvcmUoZSxufHxudWxsKX0scmVtb3ZlOmU9PntsZXQgdD1lLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZChlKX0sY3JlYXRlRWxlbWVudDooZSx0LG4scik9PntsZXQgaT10PT09YHN2Z2A/a2EuY3JlYXRlRWxlbWVudE5TKERhLGUpOnQ9PT1gbWF0aG1sYD9rYS5jcmVhdGVFbGVtZW50TlMoT2EsZSk6bj9rYS5jcmVhdGVFbGVtZW50KGUse2lzOm59KTprYS5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBlPT09YHNlbGVjdGAmJnImJnIubXVsdGlwbGUhPW51bGwmJmkuc2V0QXR0cmlidXRlKGBtdWx0aXBsZWAsci5tdWx0aXBsZSksaX0sY3JlYXRlVGV4dDplPT5rYS5jcmVhdGVUZXh0Tm9kZShlKSxjcmVhdGVDb21tZW50OmU9PmthLmNyZWF0ZUNvbW1lbnQoZSksc2V0VGV4dDooZSx0KT0+e2Uubm9kZVZhbHVlPXR9LHNldEVsZW1lbnRUZXh0OihlLHQpPT57ZS50ZXh0Q29udGVudD10fSxwYXJlbnROb2RlOmU9PmUucGFyZW50Tm9kZSxuZXh0U2libGluZzplPT5lLm5leHRTaWJsaW5nLHF1ZXJ5U2VsZWN0b3I6ZT0+a2EucXVlcnlTZWxlY3RvcihlKSxzZXRTY29wZUlkKGUsdCl7ZS5zZXRBdHRyaWJ1dGUodCxgYCl9LGluc2VydFN0YXRpY0NvbnRlbnQoZSx0LG4scixpLGEpe2xldCBvPW4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGQ7aWYoaSYmKGk9PT1hfHxpLm5leHRTaWJsaW5nKSlmb3IoO3QuaW5zZXJ0QmVmb3JlKGkuY2xvbmVOb2RlKCEwKSxuKSxpIT09YSYmKGk9aS5uZXh0U2libGluZyk7KTtlbHNle0FhLmlubmVySFRNTD1FYShyPT09YHN2Z2A/YDxzdmc+JHtlfTwvc3ZnPmA6cj09PWBtYXRobWxgP2A8bWF0aD4ke2V9PC9tYXRoPmA6ZSk7bGV0IGk9QWEuY29udGVudDtpZihyPT09YHN2Z2B8fHI9PT1gbWF0aG1sYCl7bGV0IGU9aS5maXJzdENoaWxkO2Zvcig7ZS5maXJzdENoaWxkOylpLmFwcGVuZENoaWxkKGUuZmlyc3RDaGlsZCk7aS5yZW1vdmVDaGlsZChlKX10Lmluc2VydEJlZm9yZShpLG4pfXJldHVybltvP28ubmV4dFNpYmxpbmc6dC5maXJzdENoaWxkLG4/bi5wcmV2aW91c1NpYmxpbmc6dC5sYXN0Q2hpbGRdfX0sTWE9U3ltYm9sKGBfdnRjYCk7ZnVuY3Rpb24gTmEoZSx0LG4pe2xldCByPWVbTWFdO3ImJih0PSh0P1t0LC4uLnJdOlsuLi5yXSkuam9pbihgIGApKSx0PT1udWxsP2UucmVtb3ZlQXR0cmlidXRlKGBjbGFzc2ApOm4/ZS5zZXRBdHRyaWJ1dGUoYGNsYXNzYCx0KTplLmNsYXNzTmFtZT10fXZhciBQYT1TeW1ib2woYF92b2RgKSxGYT1TeW1ib2woYF92c2hgKSxJYT1TeW1ib2woYGApLExhPS8oPzpefDspXHMqZGlzcGxheVxzKjovO2Z1bmN0aW9uIFJhKGUsdCxuKXtsZXQgcj1lLnN0eWxlLGk9ZyhuKSxhPSExO2lmKG4mJiFpKXtpZih0KXtpZihnKHQpKWZvcihsZXQgZSBvZiB0LnNwbGl0KGA7YCkpe2xldCB0PWUuc2xpY2UoMCxlLmluZGV4T2YoYDpgKSkudHJpbSgpO25bdF0/P0JhKHIsdCxgYCl9ZWxzZSBmb3IobGV0IGUgaW4gdCluW2VdPz9CYShyLGUsYGApfWZvcihsZXQgaSBpbiBuKXtpPT09YGRpc3BsYXlgJiYoYT0hMCk7bGV0IG89bltpXTtvPT1udWxsP0JhKHIsaSxgYCk6V2EoZSxpLCFnKHQpJiZ0P3RbaV06dm9pZCAwLG8pfHxCYShyLGksbyl9fWVsc2UgaWYoaSl7aWYodCE9PW4pe2xldCBlPXJbSWFdO2UmJihuKz1gO2ArZSksci5jc3NUZXh0PW4sYT1MYS50ZXN0KG4pfX1lbHNlIHQmJmUucmVtb3ZlQXR0cmlidXRlKGBzdHlsZWApO1BhIGluIGUmJihpJiZ0PT09bnx8KGVbUGFdPWE/ci5kaXNwbGF5OmBgKSxlW0ZhXSYmKHIuZGlzcGxheT1gbm9uZWApKX12YXIgemE9L1xzKiFpbXBvcnRhbnQkLztmdW5jdGlvbiBCYShlLHQsbil7aWYoZChuKSluLmZvckVhY2gobj0+QmEoZSx0LG4pKTtlbHNlIGlmKG4/Pz1gYCx0LnN0YXJ0c1dpdGgoYC0tYCkpemEudGVzdChuKT9lLnNldFByb3BlcnR5KHQsbi5yZXBsYWNlKHphLGBgKSxgaW1wb3J0YW50YCk6ZS5zZXRQcm9wZXJ0eSh0LG4pO2Vsc2V7bGV0IHI9VWEoZSx0KTt6YS50ZXN0KG4pP2Uuc2V0UHJvcGVydHkoQShyKSxuLnJlcGxhY2UoemEsYGApLGBpbXBvcnRhbnRgKTplW3JdPW59fXZhciBWYT1bYFdlYmtpdGAsYE1vemAsYG1zYF0sSGE9e307ZnVuY3Rpb24gVWEoZSx0KXtsZXQgbj1IYVt0XTtpZihuKXJldHVybiBuO2xldCByPU8odCk7aWYociE9PWBmaWx0ZXJgJiZyIGluIGUpcmV0dXJuIEhhW3RdPXI7cj1qKHIpO2ZvcihsZXQgbj0wO248VmEubGVuZ3RoO24rKyl7bGV0IGk9VmFbbl0rcjtpZihpIGluIGUpcmV0dXJuIEhhW3RdPWl9cmV0dXJuIHR9ZnVuY3Rpb24gV2EoZSx0LG4scil7cmV0dXJuIGUudGFnTmFtZT09PWBURVhUQVJFQWAmJih0PT09YHdpZHRoYHx8dD09PWBoZWlnaHRgKSYmZyhyKSYmbj09PXJ9dmFyIEdhPWBodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rYDtmdW5jdGlvbiBLYShlLHQsbixyLGksYT1lZSh0KSl7ciYmdC5zdGFydHNXaXRoKGB4bGluazpgKT9uPT1udWxsP2UucmVtb3ZlQXR0cmlidXRlTlMoR2EsdC5zbGljZSg2LHQubGVuZ3RoKSk6ZS5zZXRBdHRyaWJ1dGVOUyhHYSx0LG4pOm49PW51bGx8fGEmJiFHKG4pP2UucmVtb3ZlQXR0cmlidXRlKHQpOmUuc2V0QXR0cmlidXRlKHQsYT9gYDpfKG4pP1N0cmluZyhuKTpuKX1mdW5jdGlvbiBxYShlLHQsbixyLGkpe2lmKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGApe24hPW51bGwmJihlW3RdPXQ9PT1gaW5uZXJIVE1MYD9FYShuKTpuKTtyZXR1cm59bGV0IGE9ZS50YWdOYW1lO2lmKHQ9PT1gdmFsdWVgJiZhIT09YFBST0dSRVNTYCYmIWEuaW5jbHVkZXMoYC1gKSl7bGV0IHI9YT09PWBPUFRJT05gP2UuZ2V0QXR0cmlidXRlKGB2YWx1ZWApfHxgYDplLnZhbHVlLGk9bj09bnVsbD9lLnR5cGU9PT1gY2hlY2tib3hgP2BvbmA6YGA6U3RyaW5nKG4pO3I9PT1pJiZgX3ZhbHVlYGluIGV8fChlLnZhbHVlPWkpLG4/P2UucmVtb3ZlQXR0cmlidXRlKHQpLGUuX3ZhbHVlPW47cmV0dXJufWxldCBvPSExO2lmKG49PT1gYHx8bj09bnVsbCl7bGV0IHI9dHlwZW9mIGVbdF07cj09PWBib29sZWFuYD9uPUcobik6bj09bnVsbCYmcj09PWBzdHJpbmdgPyhuPWBgLG89ITApOnI9PT1gbnVtYmVyYCYmKG49MCxvPSEwKX10cnl7ZVt0XT1ufWNhdGNoe31vJiZlLnJlbW92ZUF0dHJpYnV0ZShpfHx0KX1mdW5jdGlvbiBKYShlLHQsbixyKXtlLmFkZEV2ZW50TGlzdGVuZXIodCxuLHIpfWZ1bmN0aW9uIFlhKGUsdCxuLHIpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4scil9dmFyIFhhPVN5bWJvbChgX3ZlaWApO2Z1bmN0aW9uIFphKGUsdCxuLHIsaT1udWxsKXtsZXQgYT1lW1hhXXx8KGVbWGFdPXt9KSxvPWFbdF07aWYociYmbylvLnZhbHVlPXI7ZWxzZXtsZXRbbixzXT1lbyh0KTtyP0phKGUsbixhW3RdPWlvKHIsaSkscyk6byYmKFlhKGUsbixvLHMpLGFbdF09dm9pZCAwKX19dmFyIFFhPS8oT25jZXxQYXNzaXZlfENhcHR1cmUpJC8sJGE9L15vbjo/KD86T25jZXxQYXNzaXZlfENhcHR1cmUpJC87ZnVuY3Rpb24gZW8oZSl7bGV0IHQsbjtmb3IoOyhuPWUubWF0Y2goUWEpKSYmISRhLnRlc3QoZSk7KXR8fD17fSxlPWUuc2xpY2UoMCxlLmxlbmd0aC1uWzFdLmxlbmd0aCksdFtuWzFdLnRvTG93ZXJDYXNlKCldPSEwO3JldHVybltlWzJdPT09YDpgP2Uuc2xpY2UoMyk6QShlLnNsaWNlKDIpKSx0XX12YXIgdG89MCxubz1Qcm9taXNlLnJlc29sdmUoKSxybz0oKT0+dG98fD0obm8udGhlbigoKT0+dG89MCksRGF0ZS5ub3coKSk7ZnVuY3Rpb24gaW8oZSx0KXtsZXQgbj1lPT57aWYoIWUuX3Z0cyllLl92dHM9RGF0ZS5ub3coKTtlbHNlIGlmKGUuX3Z0czw9bi5hdHRhY2hlZClyZXR1cm47bGV0IHI9bi52YWx1ZTtpZihkKHIpKXtsZXQgbj1lLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj0oKT0+e24uY2FsbChlKSxlLl9zdG9wcGVkPSEwfTtsZXQgaT1yLnNsaWNlKCksYT1bZV07Zm9yKGxldCBuPTA7bjxpLmxlbmd0aCYmIWUuX3N0b3BwZWQ7bisrKXtsZXQgZT1pW25dO2UmJlp0KGUsdCw1LGEpfX1lbHNlIFp0KHIsdCw1LFtlXSl9O3JldHVybiBuLnZhbHVlPWUsbi5hdHRhY2hlZD1ybygpLG59dmFyIGFvPWU9PmUuY2hhckNvZGVBdCgwKT09PTExMSYmZS5jaGFyQ29kZUF0KDEpPT09MTEwJiZlLmNoYXJDb2RlQXQoMik+OTYmJmUuY2hhckNvZGVBdCgyKTwxMjMsb289KGUsdCxuLHIsaSxzKT0+e2xldCBjPWk9PT1gc3ZnYDt0PT09YGNsYXNzYD9OYShlLHIsYyk6dD09PWBzdHlsZWA/UmEoZSxuLHIpOmEodCk/byh0KXx8WmEoZSx0LG4scixzKToodFswXT09PWAuYD8odD10LnNsaWNlKDEpLDEpOnRbMF09PT1gXmA/KHQ9dC5zbGljZSgxKSwwKTpzbyhlLHQscixjKSk/KHFhKGUsdCxyKSxlLnRhZ05hbWUuaW5jbHVkZXMoYC1gKXx8dCE9PWB2YWx1ZWAmJnQhPT1gY2hlY2tlZGAmJnQhPT1gc2VsZWN0ZWRgfHxLYShlLHQscixjLHMsdCE9PWB2YWx1ZWApKTplLl9pc1Z1ZUNFJiYoY28oZSx0KXx8ZS5fZGVmLl9fYXN5bmNMb2FkZXImJigvW0EtWl0vLnRlc3QodCl8fCFnKHIpKSk/cWEoZSxPKHQpLHIscyx0KToodD09PWB0cnVlLXZhbHVlYD9lLl90cnVlVmFsdWU9cjp0PT09YGZhbHNlLXZhbHVlYCYmKGUuX2ZhbHNlVmFsdWU9ciksS2EoZSx0LHIsYykpfTtmdW5jdGlvbiBzbyhlLHQsbixyKXtpZihyKXJldHVybiEhKHQ9PT1gaW5uZXJIVE1MYHx8dD09PWB0ZXh0Q29udGVudGB8fHQgaW4gZSYmYW8odCkmJmgobikpO2lmKHQ9PT1gc3BlbGxjaGVja2B8fHQ9PT1gZHJhZ2dhYmxlYHx8dD09PWB0cmFuc2xhdGVgfHx0PT09YGF1dG9jb3JyZWN0YHx8dD09PWBzYW5kYm94YCYmZS50YWdOYW1lPT09YElGUkFNRWB8fHQ9PT1gZm9ybWB8fHQ9PT1gbGlzdGAmJmUudGFnTmFtZT09PWBJTlBVVGB8fHQ9PT1gdHlwZWAmJmUudGFnTmFtZT09PWBURVhUQVJFQWApcmV0dXJuITE7aWYodD09PWB3aWR0aGB8fHQ9PT1gaGVpZ2h0YCl7bGV0IHQ9ZS50YWdOYW1lO2lmKHQ9PT1gSU1HYHx8dD09PWBWSURFT2B8fHQ9PT1gQ0FOVkFTYHx8dD09PWBTT1VSQ0VgKXJldHVybiExfXJldHVybiBhbyh0KSYmZyhuKT8hMTp0IGluIGV9ZnVuY3Rpb24gY28oZSx0KXtsZXQgbj1lLl9kZWYucHJvcHM7aWYoIW4pcmV0dXJuITE7bGV0IHI9Tyh0KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uLnNvbWUoZT0+TyhlKT09PXIpOk9iamVjdC5rZXlzKG4pLnNvbWUoZT0+TyhlKT09PXIpfXZhciBsbz1lPT57bGV0IHQ9ZS5wcm9wc1tgb25VcGRhdGU6bW9kZWxWYWx1ZWBdfHwhMTtyZXR1cm4gZCh0KT9lPT5QKHQsZSk6dH07ZnVuY3Rpb24gdW8oZSl7ZS50YXJnZXQuY29tcG9zaW5nPSEwfWZ1bmN0aW9uIGZvKGUpe2xldCB0PWUudGFyZ2V0O3QuY29tcG9zaW5nJiYodC5jb21wb3Npbmc9ITEsdC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChgaW5wdXRgKSkpfXZhciBwbz1TeW1ib2woYF9hc3NpZ25gKSxtbz1TeW1ib2woYF9pbml0aWFsVmFsdWVgKTtmdW5jdGlvbiBobyhlLHQsbil7cmV0dXJuIHQmJihlPWUudHJpbSgpKSxuJiYoZT1JKGUpKSxlfXZhciBnbz17Y3JlYXRlZChlLHttb2RpZmllcnM6e2xhenk6dCx0cmltOm4sbnVtYmVyOnJ9fSxpKXtlLnBhcmVudE5vZGUmJihlLnR5cGU9PT1gdGV4dGA/ZVttb109ZS5kZWZhdWx0VmFsdWUucmVwbGFjZSgvW1xyXG5dL2csYGApOmUudHlwZT09PWB0ZXh0YXJlYWAmJihlW21vXT1lLmRlZmF1bHRWYWx1ZS5yZXBsYWNlKC9cclxuPy9nLGAKYCkpKSxlW3BvXT1sbyhpKTtsZXQgYT1yfHxpLnByb3BzJiZpLnByb3BzLnR5cGU9PT1gbnVtYmVyYDtKYShlLHQ/YGNoYW5nZWA6YGlucHV0YCx0PT57dC50YXJnZXQuY29tcG9zaW5nfHxlW3BvXShobyhlLnZhbHVlLG4sYSkpfSksKG58fGEpJiZKYShlLGBjaGFuZ2VgLCgpPT57ZS52YWx1ZT1obyhlLnZhbHVlLG4sYSl9KSx0fHwoSmEoZSxgY29tcG9zaXRpb25zdGFydGAsdW8pLEphKGUsYGNvbXBvc2l0aW9uZW5kYCxmbyksSmEoZSxgY2hhbmdlYCxmbykpfSxtb3VudGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOnt0cmltOm4sbnVtYmVyOnJ9fSl7bGV0IGk9dD8/YGAsYT1lW21vXTtkZWxldGUgZVttb10sYSE9PXZvaWQgMCYmKGUudHlwZT09PWB0ZXh0YHx8ZS50eXBlPT09YHRleHRhcmVhYCkmJmUudmFsdWUhPT1hP2VbcG9dKGhvKGUudmFsdWUsbixyKSk6ZS52YWx1ZT1pfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dCxvbGRWYWx1ZTpuLG1vZGlmaWVyczp7bGF6eTpyLHRyaW06aSxudW1iZXI6YX19LG8pe2lmKGVbcG9dPWxvKG8pLGUuY29tcG9zaW5nKXJldHVybjtsZXQgcz0oYXx8ZS50eXBlPT09YG51bWJlcmApJiYhL14wXGQvLnRlc3QoZS52YWx1ZSk/SShlLnZhbHVlKTplLnZhbHVlLGM9dD8/YGA7aWYocz09PWMpcmV0dXJuO2xldCBsPWUuZ2V0Um9vdE5vZGUoKTsobCBpbnN0YW5jZW9mIERvY3VtZW50fHxsIGluc3RhbmNlb2YgU2hhZG93Um9vdCkmJmwuYWN0aXZlRWxlbWVudD09PWUmJmUudHlwZSE9PWByYW5nZWAmJihyJiZ0PT09bnx8aSYmZS52YWx1ZS50cmltKCk9PT1jKXx8KGUudmFsdWU9Yyl9fSxfbz17ZGVlcDohMCxjcmVhdGVkKGUse3ZhbHVlOnQsbW9kaWZpZXJzOntudW1iZXI6bn19LHIpe2UuX21vZGVsVmFsdWU9dCxKYShlLGBjaGFuZ2VgLCgpPT57bGV0IHQ9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUub3B0aW9ucyxlPT5lLnNlbGVjdGVkKS5tYXAoZT0+bj9JKGJvKGUpKTpibyhlKSkscj1lLm11bHRpcGxlLGk9cj9wKGUuX21vZGVsVmFsdWUpP25ldyBTZXQodCk6dDp0WzBdLGE9ZS5fcGVuZGluZ1ZhbHVlPVtyLHI/ZChpKT90LnNsaWNlKCk6dDppXTt0cnl7ZVtwb10oaSl9ZmluYWxseXtjbigoKT0+e2UuX3BlbmRpbmdWYWx1ZT09PWEmJihlLl9wZW5kaW5nVmFsdWU9dm9pZCAwKX0pfX0pLGVbcG9dPWxvKHIpfSxtb3VudGVkKGUse3ZhbHVlOnR9KXt5byhlLHQpfSxiZWZvcmVVcGRhdGUoZSx7dmFsdWU6dH0sbil7ZS5fbW9kZWxWYWx1ZT10LGVbcG9dPWxvKG4pfSx1cGRhdGVkKGUse3ZhbHVlOnR9KXtsZXQgbj1lLl9wZW5kaW5nVmFsdWU7ZS5fcGVuZGluZ1ZhbHVlPXZvaWQgMCxuJiZuWzBdPT09ZS5tdWx0aXBsZSYmdm8odCxuWzFdLG5bMF0pfHx5byhlLHQpfX07ZnVuY3Rpb24gdm8oZSx0LG4pe2lmKCFufHxkKGUpKXJldHVybiBhZShlLHQpO2lmKHAoZSkpe2lmKGUuc2l6ZSE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbiBvZiB0KWlmKCFlLmhhcyhuKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB5byhlLHQpe2xldCBuPWUubXVsdGlwbGUscj1kKHQpO2lmKCFufHxyfHxwKHQpKXtmb3IobGV0IGk9MCxhPWUub3B0aW9ucy5sZW5ndGg7aTxhO2krKyl7bGV0IGE9ZS5vcHRpb25zW2ldLG89Ym8oYSk7aWYobil7aWYocil7bGV0IGU9dHlwZW9mIG87YS5zZWxlY3RlZD1lPT09YHN0cmluZ2B8fGU9PT1gbnVtYmVyYD90LnNvbWUoZT0+U3RyaW5nKGUpPT09U3RyaW5nKG8pKTpvZSh0LG8pPi0xfWVsc2UgYS5zZWxlY3RlZD10LmhhcyhvKX1lbHNlIGlmKGFlKGJvKGEpLHQpKXtlLnNlbGVjdGVkSW5kZXghPT1pJiYoZS5zZWxlY3RlZEluZGV4PWkpO3JldHVybn19IW4mJmUuc2VsZWN0ZWRJbmRleCE9PS0xJiYoZS5zZWxlY3RlZEluZGV4PS0xKX19ZnVuY3Rpb24gYm8oZSl7cmV0dXJuYF92YWx1ZWBpbiBlP2UuX3ZhbHVlOmUudmFsdWV9dmFyIHhvPVtgY3RybGAsYHNoaWZ0YCxgYWx0YCxgbWV0YWBdLFNvPXtzdG9wOmU9PmUuc3RvcFByb3BhZ2F0aW9uKCkscHJldmVudDplPT5lLnByZXZlbnREZWZhdWx0KCksc2VsZjplPT5lLnRhcmdldCE9PWUuY3VycmVudFRhcmdldCxjdHJsOmU9PiFlLmN0cmxLZXksc2hpZnQ6ZT0+IWUuc2hpZnRLZXksYWx0OmU9PiFlLmFsdEtleSxtZXRhOmU9PiFlLm1ldGFLZXksbGVmdDplPT5gYnV0dG9uYGluIGUmJmUuYnV0dG9uIT09MCxtaWRkbGU6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTEscmlnaHQ6ZT0+YGJ1dHRvbmBpbiBlJiZlLmJ1dHRvbiE9PTIsZXhhY3Q6KGUsdCk9PnhvLnNvbWUobj0+ZVtgJHtufUtleWBdJiYhdC5pbmNsdWRlcyhuKSl9LENvPShlLHQpPT57aWYoIWUpcmV0dXJuIGU7bGV0IG49ZS5fd2l0aE1vZHN8fD17fSxyPXQuam9pbihgLmApO3JldHVybiBuW3JdfHwobltyXT0oKG4sLi4ucik9Pntmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IHI9U29bdFtlXV07aWYociYmcihuLHQpKXJldHVybn1yZXR1cm4gZShuLC4uLnIpfSkpfSx3bz1zKHtwYXRjaFByb3A6b299LGphKSxUbztmdW5jdGlvbiBFbygpe3JldHVybiBUb3x8PXZpKHdvKX12YXIgRG89KCguLi5lKT0+e2xldCB0PUVvKCkuY3JlYXRlQXBwKC4uLmUpLHttb3VudDpufT10O3JldHVybiB0Lm1vdW50PWU9PntsZXQgcj1rbyhlKTtpZighcilyZXR1cm47bGV0IGk9dC5fY29tcG9uZW50O2goaSl8fGkucmVuZGVyfHxpLnRlbXBsYXRlfHwoaS50ZW1wbGF0ZT1yLmlubmVySFRNTCksci5ub2RlVHlwZT09PTEmJihyLnRleHRDb250ZW50PWBgKTtsZXQgYT1uKHIsITEsT28ocikpO3JldHVybiByIGluc3RhbmNlb2YgRWxlbWVudCYmKHIucmVtb3ZlQXR0cmlidXRlKGB2LWNsb2FrYCksci5zZXRBdHRyaWJ1dGUoYGRhdGEtdi1hcHBgLGBgKSksYX0sdH0pO2Z1bmN0aW9uIE9vKGUpe2lmKGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KXJldHVybmBzdmdgO2lmKHR5cGVvZiBNYXRoTUxFbGVtZW50PT1gZnVuY3Rpb25gJiZlIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudClyZXR1cm5gbWF0aG1sYH1mdW5jdGlvbiBrbyhlKXtyZXR1cm4gZyhlKT9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpOmV9dmFyIEFvPWNsYXNzIGV7c3RhdGljIGlzT2JqZWN0KGUpe3JldHVybiB0eXBlb2YgZT09YG9iamVjdGAmJiEhZSYmIUFycmF5LmlzQXJyYXkoZSl9c3RhdGljIGlzU2VjcmV0KHQpe3JldHVybiBlLmlzT2JqZWN0KHQpJiZPYmplY3Qua2V5cyh0KS5sZW5ndGg9PT0xJiYodHlwZW9mIHQuc2VjcmV0PT1gc3RyaW5nYHx8dHlwZW9mIHQuc2VjcmV0X2ZpbGU9PWBzdHJpbmdgKX1zdGF0aWMgY29tcGFjdCh0KXtyZXR1cm4gdD09bnVsbD9gYDplLmlzU2VjcmV0KHQpP2BzZWNyZXRgaW4gdD9gc2VjcmV0KCIke3Quc2VjcmV0fSIpYDpgc2VjcmV0RmlsZSgiJHt0LnNlY3JldF9maWxlfSIpYDpBcnJheS5pc0FycmF5KHQpP3QubWFwKGUuY29tcGFjdCkuam9pbih0LmV2ZXJ5KHQ9PiFlLmlzT2JqZWN0KHQpKT9gLCBgOmAgLyBgKTplLmlzT2JqZWN0KHQpJiYhT2JqZWN0LmtleXModCkubGVuZ3RoP2BvbmA6ZS5pc09iamVjdCh0KT9PYmplY3QuZW50cmllcyh0KS5tYXAoKFt0LG5dKT0+bj09PSEwP3Q6YCR7dH0gJHtlLmNvbXBhY3Qobil9YCkuam9pbihgLCBgKTpTdHJpbmcodCl9c3RhdGljIGNvdW50KGUsdCxuPWAke3R9c2Ape3JldHVybmAke2V9ICR7ZT09PTE/dDpufWB9fTtmdW5jdGlvbiBqbygpe2xldCBlPWxvY2F0aW9uLmhhc2guc2xpY2UoMSkuc3BsaXQoYC9gKS5tYXAoZGVjb2RlVVJJQ29tcG9uZW50KS5maWx0ZXIoQm9vbGVhbik7cmV0dXJue3ZpZXc6ZVswXT8/YGdyYXBoYCxwYXJ0czplLnNsaWNlKDEpfX12YXIgTW89Q3Qoe2RhdGE6dm9pZCAwLGVycm9yOmBgLGxpdmU6YGNvbm5lY3RpbmdgLGJlYXQ6ITEscm91dGU6am8oKX0pO2Z1bmN0aW9uIE5vKGUpe2xvY2F0aW9uLmhhc2g9ZS5zcGxpdChgL2ApLm1hcChlPT5lbmNvZGVVUklDb21wb25lbnQoZSkpLmpvaW4oYC9gKX1hZGRFdmVudExpc3RlbmVyKGBoYXNoY2hhbmdlYCwoKT0+e01vLnJvdXRlPWpvKCl9KTthc3luYyBmdW5jdGlvbiBQbyhlLHQ9ITEpe2xldCBuPWF3YWl0IGZldGNoKGUsdD97bWV0aG9kOmBQT1NUYCxoZWFkZXJzOnsieC1jaXJjdWl0LXN0dWRpbyI6YDFgfX06e30pO2lmKCFuLm9rKXRocm93IEVycm9yKGB0aGUgc2VydmVyIGFuc3dlcmVkICR7bi5zdGF0dXN9YCk7bGV0IHI9YXdhaXQgbi5qc29uKCk7aWYociYmdHlwZW9mIHI9PWBvYmplY3RgJiZgZXJyb3JgaW4gciYmdHlwZW9mIHIuZXJyb3I9PWBzdHJpbmdgKXRocm93IEVycm9yKHIuZXJyb3IpO3JldHVybiByfWFzeW5jIGZ1bmN0aW9uIEZvKCl7dHJ5e2xldCBlPWF3YWl0KGF3YWl0IGZldGNoKGAvYXBpL2RhdGFgKSkuanNvbigpO2lmKGBlcnJvcmBpbiBlKXtNby5lcnJvcj1lLmVycm9yO3JldHVybn1Nby5kYXRhPWUsTW8uZXJyb3I9YGB9Y2F0Y2goZSl7TW8uZXJyb3I9ZS5tZXNzYWdlfX1mdW5jdGlvbiBJbygpe0ZvKCk7bGV0IGU9bmV3IEV2ZW50U291cmNlKGAvYXBpL2V2ZW50c2ApO2Uub25vcGVuPSgpPT5Nby5saXZlPWBsaXZlYCxlLm9uZXJyb3I9KCk9Pk1vLmxpdmU9YG9mZmxpbmVgLGUub25tZXNzYWdlPWFzeW5jKCk9Pnthd2FpdCBGbygpLE1vLmJlYXQ9ITAsc2V0VGltZW91dCgoKT0+TW8uYmVhdD0hMSwxMjAwKX19dmFyIExvPWNsYXNzIGV7c3RhdGljIGJpdHMoZSl7cmV0dXJuIGU9PT1gaXB2NGA/MzI6MTI4fXN0YXRpYyBwYXJzZUFkZHJlc3MoZSl7aWYoIWUuaW5jbHVkZXMoYDpgKSl7bGV0IHQ9ZS5zcGxpdChgLmApO3JldHVybiB0Lmxlbmd0aCE9PTR8fCF0LmV2ZXJ5KGU9Pi9eXGR7MSwzfSQvLnRlc3QoZSkmJk51bWJlcihlKTw9MjU1KT92b2lkIDA6e2ZhbWlseTpgaXB2NGAsdmFsdWU6dC5yZWR1Y2UoKGUsdCk9PmU8PDhufEJpZ0ludCh0KSwwbil9fWxldFt0LG4scl09ZS5zcGxpdChgOjpgKTtpZihyIT09dm9pZCAwfHx0PT09dm9pZCAwKXJldHVybjtsZXQgaT1lPT5lP2Uuc3BsaXQoYDpgKTpbXSxhPWkodCksbz1pKG4pLHM9bj09PXZvaWQgMD8wOjgtYS5sZW5ndGgtby5sZW5ndGg7aWYoczwwKXJldHVybjtsZXQgYz1bLi4uYSwuLi5BcnJheShzKS5maWxsKGAwYCksLi4ub107aWYoYy5sZW5ndGg9PT04JiZjLmV2ZXJ5KGU9Pi9eWzAtOWEtZkEtRl17MSw0fSQvLnRlc3QoZSkpKXJldHVybntmYW1pbHk6YGlwdjZgLHZhbHVlOmMucmVkdWNlKChlLHQpPT5lPDwxNm58QmlnSW50KHBhcnNlSW50KHQsMTYpKSwwbil9fXN0YXRpYyBwYXJzZVJhbmdlKHQpe2xldFtuLHJdPXQuc3BsaXQoYC9gKSxpPWUucGFyc2VBZGRyZXNzKG4/P2BgKTtpZighaSlyZXR1cm47bGV0IGE9ZS5iaXRzKGkuZmFtaWx5KSxvPXI9PT12b2lkIDA/YTpOdW1iZXIocik7aWYoIU51bWJlci5pc0ludGVnZXIobyl8fG88MHx8bz5hKXJldHVybjtsZXQgcz0oMW48PEJpZ0ludChhLW8pKS0xbixjPWkudmFsdWUmfnMmKDFuPDxCaWdJbnQoYSkpLTFuO3JldHVybntmYW1pbHk6aS5mYW1pbHksZmlyc3Q6YyxsYXN0OmN8cyxsZW5ndGg6b319c3RhdGljIGNvdmVycyh0LG4pe2xldCByPWUucGFyc2VSYW5nZSh0KSxpPWUucGFyc2VSYW5nZShuKTtyZXR1cm4hIShyJiZpJiZyLmZhbWlseT09PWkuZmFtaWx5JiZyLmZpcnN0PD1pLmZpcnN0JiZpLmxhc3Q8PXIubGFzdCl9c3RhdGljIHNhbWVBZGRyZXNzKHQsbil7bGV0IHI9ZS5wYXJzZUFkZHJlc3ModC5zcGxpdChgL2ApWzBdPz9gYCksaT1lLnBhcnNlQWRkcmVzcyhuLnNwbGl0KGAvYClbMF0/P2BgKTtyZXR1cm4hIShyJiZpJiZyLmZhbWlseT09PWkuZmFtaWx5JiZyLnZhbHVlPT09aS52YWx1ZSl9c3RhdGljIGxlbmd0aE9mKHQpe3JldHVybiBlLnBhcnNlUmFuZ2UodCk/Lmxlbmd0aD8/MH19LFJvPWNsYXNze3N0YXRpYyBjc3YoZSx0KXtsZXQgbj1lPT4vWyIsXG5dLy50ZXN0KGUpP2AiJHtlLnJlcGxhY2VBbGwoYCJgLGAiImApfSJgOmU7cmV0dXJuW2UsLi4udF0ubWFwKGU9PmUubWFwKG4pLmpvaW4oYCxgKSkuam9pbihgCmApK2AKYH1zdGF0aWMgc2F2ZShlLHQpe2xldCBuPVVSTC5jcmVhdGVPYmplY3RVUkwodCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBhYCk7ci5ocmVmPW4sci5kb3dubG9hZD1lLHIuY2xpY2soKSxzZXRUaW1lb3V0KCgpPT5VUkwucmV2b2tlT2JqZWN0VVJMKG4pLDFlMyl9fSx6bz17a2V5OjAsY2xhc3M6YG11dGVkYH0sQm89e2tleToxLGNsYXNzOmB0YWJsZS1ibG9ja2B9LFZvPXtrZXk6MCxjbGFzczpgdGFibGUtYWN0aW9uc2B9LEhvPXtjbGFzczpgZGF0YWB9LFVvPVtgdGl0bGVgXSxXbz17a2V5OjB9LEdvPVtgaWRgXSxLbz1bYG9uQ2xpY2tgXSxxbz1Cbih7X19uYW1lOmBEYXRhVGFibGVgLHByb3BzOntoZWFkOnt9LHJvd3M6e30sY3N2Ont9fSxzZXR1cChlKXtsZXQgdD1lLG49ZT0+dHlwZW9mIGU9PWBzdHJpbmdgP2U6ZS5sYWJlbCxyPWU9PmU9PT12b2lkIDA/YGA6dHlwZW9mIGU9PWBvYmplY3RgP2BkZXZpY2VgaW4gZT9lLmxhYmVsPz9lLmRldmljZTplLmxhYmVsOlN0cmluZyhlKSxpPWU9PnR5cGVvZiBlPT1gb2JqZWN0YCYmZT9gZGV2aWNlYGluIGU/YGRldmljZXMvJHtlLmRldmljZX1gOmUubGluazp2b2lkIDA7ZnVuY3Rpb24gYSgpe2xldCBlPVJvLmNzdih0LmhlYWQubWFwKG4pLHQucm93cy5tYXAoZT0+ZS5jZWxscy5tYXAocikpKTtSby5zYXZlKGAke3QuY3N2fS5jc3ZgLG5ldyBCbG9iKFtlXSx7dHlwZTpgdGV4dC9jc3ZgfSkpfXJldHVybih0LG8pPT5lLnJvd3MubGVuZ3RoPyhKKCksWShgZGl2YCxCbyxbZS5jc3Y/KEooKSxZKGBwYCxWbyxbWChgYWAse29uQ2xpY2s6YX0sYFNhdmUgYXMgQ1NWYCldKSk6WWkoYGAsITApLFgoYHRhYmxlYCxIbyxbWChgdGhlYWRgLG51bGwsW1goYHRyYCxudWxsLFsoSighMCksWShxLG51bGwsaHIoZS5oZWFkLGU9PihKKCksWShgdGhgLHtrZXk6bihlKSx0aXRsZTp0eXBlb2YgZT09YHN0cmluZ2A/dm9pZCAwOmUudGl0bGV9LFt0eXBlb2YgZSE9YHN0cmluZ2AmJmUuZmllbGQ/KEooKSxZKGBjb2RlYCxXbyxLKGUubGFiZWwpLDEpKTooSigpLFkocSx7a2V5OjF9LFtKaShLKG4oZSkpLDEpXSw2NCkpXSw4LFVvKSkpLDEyOCkpXSldKSxYKGB0Ym9keWAsbnVsbCxbKEooITApLFkocSxudWxsLGhyKGUucm93cywoZSx0KT0+KEooKSxZKGB0cmAse2lkOmUuaWQsa2V5OnQsY2xhc3M6Vyh7bXV0ZWQ6ZS5tdXRlZH0pfSxbKEooITApLFkocSxudWxsLGhyKGUuY2VsbHMsKGUsdCk9PihKKCksWShgdGRgLHtrZXk6dH0sW2koZSk/KEooKSxZKGBhYCx7a2V5OjAsb25DbGljazp0PT56dChObykoaShlKSl9LEsocihlKSksOSxLbykpOihKKCksWShxLHtrZXk6MX0sW0ppKEsocihlKSksMSldLDY0KSldKSkpLDEyOCkpXSwxMCxHbykpKSwxMjgpKV0pXSldKSk6KEooKSxZKGBwYCx6byxgTm9uZS5gKSl9fSksSm89e2NsYXNzOmB0YWJzYH0sWW89W2BhcmlhLXByZXNzZWRgLGBvbkNsaWNrYF0sWG89Qm4oe19fbmFtZTpgQWRkcmVzc2VzVmlld2AscHJvcHM6e2RhdGE6e319LHNldHVwKGUpe2xldCB0PWUsbj1JdChgYWxsYCkscj1TYSgoKT0+e2xldCBlPXQuZGF0YS5hZGRyZXNzZXMuZmlsdGVyKGU9Pm4udmFsdWU9PT1gYWxsYHx8ZS5mYW1pbHk9PT1uLnZhbHVlKSxyPWU9PnQuZGF0YS5hZGRyZXNzZXMuZmlsdGVyKHQ9PnQudnJmPT09ZS52cmYmJkxvLnNhbWVBZGRyZXNzKHQuYWRkcmVzcyxlLmFkZHJlc3MpKS5sZW5ndGg+MTtyZXR1cm5bLi4uZV0uc29ydCgoZSx0KT0+e2xldCBuPUxvLnBhcnNlUmFuZ2UoZS5hZGRyZXNzKSxyPUxvLnBhcnNlUmFuZ2UodC5hZGRyZXNzKTtyZXR1cm4hbnx8IXJ8fG4uZmFtaWx5IT09ci5mYW1pbHk/ZS5mYW1pbHkubG9jYWxlQ29tcGFyZSh0LmZhbWlseSk6bi5maXJzdDxyLmZpcnN0Py0xOisobi5maXJzdD5yLmZpcnN0KX0pLm1hcChlPT4oe2NlbGxzOltlLnByZWZpeCxlLmFkZHJlc3Mse2RldmljZTplLmRldmljZX0sZS5ob2xkZXIsZS52cmY/P2BgLGUucGVlcj8/YGAscihlKT9gaGVsZCB0d2ljZWA6YGBdfSkpfSk7cmV0dXJuKGUsdCk9PihKKCksWShxLG51bGwsW3RbMF18fD1YKGBoMmAsbnVsbCxgQWRkcmVzc2VzYCwtMSksWChgZGl2YCxKbyxbKEooKSxZKHEsbnVsbCxocihbYGFsbGAsYGlwdjRgLGBpcHY2YF0sZT0+WChgYnV0dG9uYCx7a2V5OmUsImFyaWEtcHJlc3NlZCI6bi52YWx1ZT09PWUsb25DbGljazp0PT5uLnZhbHVlPWV9LEsoZT09PWBhbGxgP2BCb3RoYDplPT09YGlwdjRgP2BJUHY0YDpgSVB2NmApLDksWW8pKSw2NCkpXSksV2kocW8se2hlYWQ6W2BQcmVmaXhgLGBBZGRyZXNzYCxgRGV2aWNlYCxgT25gLGBWUkZgLGBGYXIgZW5kYCxgTm90ZWBdLHJvd3M6ci52YWx1ZSxjc3Y6YGFkZHJlc3Nlc2B9LG51bGwsOCxbYHJvd3NgXSldLDY0KSl9fSksWm89Qm4oe19fbmFtZTpgQ2FibGVzVmlld2AscHJvcHM6e2RhdGE6e319LHNldHVwKGUpe2xldCB0PWUsbj1TYSgoKT0+bmV3IFNldCh0LmRhdGEuZGV2aWNlcy5tYXAoZT0+ZS5uYW1lKSkpLHI9U2EoKCk9PnQuZGF0YS5jYWJsZXMubWFwKGU9Pih7Y2VsbHM6W3tkZXZpY2U6ZS5kZXZpY2V9LGUucG9ydCsoZS5sYWc/YCAoJHtlLmxhZ30pYDpgYCksbi52YWx1ZS5oYXMoZS5mYXJEZXZpY2UpP3tkZXZpY2U6ZS5mYXJEZXZpY2V9OmUuZmFyRGV2aWNlLGUuZmFyUG9ydCsoZS5mYXJMYWc/YCAoJHtlLmZhckxhZ30pYDpgYCksZS50aHJvdWdoLGUudmxhbnMuam9pbihgLCBgKSxlLmRlc2NyaXB0aW9uLGUub25lU2lkZWQ/YHRoZSBmYXIgZW5kIGRvZXMgbm90IGxpbmsgYmFja2A6YGBdfSkpKTtyZXR1cm4oZSx0KT0+KEooKSxZKHEsbnVsbCxbdFswXXx8PVgoYGgyYCxudWxsLGBDYWJsZXNgLC0xKSxXaShxbyx7aGVhZDpbYERldmljZWAsYFBvcnRgLGBGYXIgZGV2aWNlYCxgRmFyIHBvcnRgLGBUaHJvdWdoYCxgVkxBTnNgLGBEZXNjcmlwdGlvbmAsYE5vdGVgXSxyb3dzOnIudmFsdWUsY3N2OmBjYWJsZXNgfSxudWxsLDgsW2Byb3dzYF0pXSw2NCkpfX0pLFFvPWNsYXNzIGV7c3RhdGljIE1PU1RfRElGRkVSRU5DRVM9NGUzO3N0YXRpYyBsaW5lcyh0LG4pe2xldCByPXQubGVuZ3RoLGk9bi5sZW5ndGgsYT1NYXRoLm1pbihyK2ksZS5NT1NUX0RJRkZFUkVOQ0VTKSxvPWErMSxzPW5ldyBJbnQzMkFycmF5KDIqbysxKSxjPVtdLGw9KGUsdCk9PmNbZV1bdCtlXT8/MDtmb3IobGV0IHU9MDt1PD1hO3UrKyl7Zm9yKGxldCBhPS11O2E8PXU7YSs9Mil7bGV0IGQ9YT09PS11fHxhIT09dSYmKHNbYS0xK29dPz8wKTwoc1thKzErb10/PzApP3NbYSsxK29dPz8wOihzW2EtMStvXT8/MCkrMSxmPWQtYTtmb3IoO2Q8ciYmZjxpJiZ0W2RdPT09bltmXTspZCsrLGYrKztpZihzW2Erb109ZCxkPj1yJiZmPj1pKXJldHVybiBjLnB1c2gocy5zbGljZShvLXUsbyt1KzEpKSxlLndhbGtCYWNrKHQsbixjLGwpfWMucHVzaChzLnNsaWNlKG8tdSxvK3UrMSkpfX1zdGF0aWMgd2Fsa0JhY2soZSx0LG4scil7bGV0IGk9W10sYT1lLmxlbmd0aCxvPXQubGVuZ3RoO2ZvcihsZXQgcz1uLmxlbmd0aC0xO3M+MDtzLS0pe2xldCBuPWEtbyxjPW49PT0tc3x8biE9PXMmJnIocy0xLG4tMSk8cihzLTEsbisxKSxsPWM/bisxOm4tMSx1PXIocy0xLGwpLGQ9dS1sO2Zvcig7YT51JiZvPmQ7KWkucHVzaCh7a2luZDpgc2FtZWAsdGV4dDplWy0tYV0/P2BgfSksby0tO2M/aS5wdXNoKHtraW5kOmBhZGRlZGAsdGV4dDp0Wy0tb10/P2BgfSk6aS5wdXNoKHtraW5kOmByZW1vdmVkYCx0ZXh0OmVbLS1hXT8/YGB9KX1mb3IoO2E+MCYmbz4wOylpLnB1c2goe2tpbmQ6YHNhbWVgLHRleHQ6ZVstLWFdPz9gYH0pLG8tLTtyZXR1cm4gaS5yZXZlcnNlKCl9c3RhdGljIHNob3duKGUsdD0zKXtsZXQgbj1lLm1hcCgobixyKT0+ZS5zbGljZShNYXRoLm1heCgwLHItdCkscit0KzEpLnNvbWUoZT0+ZS5raW5kIT09YHNhbWVgKSkscj1bXSxpPTA7Zm9yKGxldFt0LGFdb2YgZS5lbnRyaWVzKCkpblt0XT8oaSYmci5wdXNoKHtraW5kOmBmb2xkYCxjb3VudDppfSksaT0wLHIucHVzaChhKSk6aSsrO3JldHVybiBpJiZyLnB1c2goe2tpbmQ6YGZvbGRgLGNvdW50Oml9KSxyfX0sJG89e2tleTowLGNsYXNzOmBtdXRlZGB9LGVzPXtrZXk6MSxjbGFzczpgbXV0ZWRgfSx0cz17a2V5OjJ9LG5zPXtjbGFzczpgbXV0ZWRgfSxycz17Y2xhc3M6YGNvZGUgZGlmZmB9LGlzPXtrZXk6MCxjbGFzczpgZm9sZGB9LGFzPUJuKHtfX25hbWU6YExpbmVEaWZmYCxwcm9wczp7YmVmb3JlOnt9LGFmdGVyOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49U2EoKCk9PlFvLmxpbmVzKHQuYmVmb3JlLnRyaW1FbmQoKS5zcGxpdChgCmApLHQuYWZ0ZXIudHJpbUVuZCgpLnNwbGl0KGAKYCkpKSxyPVNhKCgpPT5uLnZhbHVlPy5maWx0ZXIoZT0+ZS5raW5kIT09YHNhbWVgKS5sZW5ndGg/PzApLGk9U2EoKCk9Pm4udmFsdWU/UW8uc2hvd24obi52YWx1ZSk6W10pLGE9ZT0+ZT09PWBhZGRlZGA/YCsgYDplPT09YHJlbW92ZWRgP2AtIGA6YCAgYDtyZXR1cm4oZSx0KT0+bi52YWx1ZT9yLnZhbHVlPyhKKCksWShgZGl2YCx0cyxbWChgcGAsbnMsSyh6dChBbykuY291bnQoci52YWx1ZSxgbGluZSBkaWZmZXJzYCxgbGluZXMgZGlmZmVyYCkpK2AuYCwxKSxYKGBwcmVgLHJzLFsoSighMCksWShxLG51bGwsaHIoaS52YWx1ZSwoZSx0KT0+KEooKSxZKHEse2tleTp0fSxbZS5raW5kPT09YGZvbGRgPyhKKCksWShgc3BhbmAsaXMsSyh6dChBbykuY291bnQoZS5jb3VudCxgbGluZWApKStgIHRoZSBzYW1lYCtLKGAKYCksMSkpOihKKCksWShgc3BhbmAse2tleToxLGNsYXNzOlcoZS5raW5kKX0sSyhhKGUua2luZCkpK0soZS50ZXh0KStLKGAKYCksMykpXSw2NCkpKSwxMjgpKV0pXSkpOihKKCksWShgcGAsZXMsYFRoZXkgYXJlIHRoZSBzYW1lLCBsaW5lIGZvciBsaW5lLmApKTooSigpLFkoYHBgLCRvLGBUaGV5IGRpZmZlciBpbiB0b28gbWFueSBsaW5lcyB0byBjb21wYXJlIG9uZSBieSBvbmUuYCkpfX0pLG9zPXtrZXk6MCxjbGFzczpgdmVyZGljdCByZWplY3RgfSxzcz17Y2xhc3M6YGZpZWxkYH0sY3M9e2lkOmByZWZzYH0sbHM9W2B2YWx1ZWBdLHVzPVtgdmFsdWVgXSxkcz17a2V5OjEsY2xhc3M6YG11dGVkYH0sZnM9e2tleToyLGNsYXNzOmBiYW5uZXJgfSxwcz17a2V5OjAsY2xhc3M6YG11dGVkYH0sbXM9e2NsYXNzOmBmaW5kaW5nc2B9LGhzPVtgb25DbGlja2BdLGdzPXtrZXk6MSxjbGFzczpgbXV0ZWRgfSxfcz17Y2xhc3M6YGZpbmRpbmdzYH0sdnM9e2tleToyLGNsYXNzOmBtdXRlZGB9LHlzPXtrZXk6MyxjbGFzczpgbXV0ZWRgfSxicz17Y2xhc3M6YGZpbmRpbmdzYH0seHM9Qm4oe19fbmFtZTpgQ29tcGFyZVZpZXdgLHByb3BzOntkYXRhOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49SXQoKSxyPUl0KGBgKSxpPUl0KE1vLnJvdXRlLnBhcnRzWzBdPz9gYCksYT1JdCgpLG89SXQoYGApLHM9SXQoITEpO3RyKGFzeW5jKCk9Pnt0cnl7bi52YWx1ZT1hd2FpdCBQbyhgL2FwaS9yZWZzYCl9Y2F0Y2goZSl7ci52YWx1ZT1lLm1lc3NhZ2V9fSksa24oKCk9Pk1vLnJvdXRlLnBhcnRzWzBdLGFzeW5jIGU9PntpZihhLnZhbHVlPXZvaWQgMCxvLnZhbHVlPWBgLGUpe3MudmFsdWU9ITA7dHJ5e2xldCB0PWF3YWl0IFBvKGAvYXBpL2NvbXBhcmU/cmVmPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGUpfWApO2lmKGBlcnJvcmBpbiB0Lm5ldHdvcmspdGhyb3cgRXJyb3IoYFRoZSBwcm9qZWN0IGF0ICR7ZX0gY2Fubm90IGJlIHJlYWQ6XG4ke3QubmV0d29yay5lcnJvcn1gKTthLnZhbHVlPXtjb21taXQ6dC5jb21taXQsbmV0d29yazp0Lm5ldHdvcmt9fWNhdGNoKGUpe28udmFsdWU9ZS5tZXNzYWdlfWZpbmFsbHl7cy52YWx1ZT0hMX19fSx7aW1tZWRpYXRlOiEwfSk7bGV0IGM9U2EoKCk9PntsZXQgZT1hLnZhbHVlPy5uZXR3b3JrO2lmKCFlKXJldHVybjtsZXQgbj1uZXcgTWFwKGUuZGV2aWNlcy5tYXAodD0+W3QubmFtZSxlLnJlbmRlcmVkW3QubmFtZV0/P2BgXSkpLHI9bmV3IE1hcCh0LmRhdGEuZGV2aWNlcy5tYXAoZT0+W2UubmFtZSx0LmRhdGEucmVuZGVyZWRbZS5uYW1lXT8/YGBdKSk7cmV0dXJue2FkZGVkOlsuLi5yLmtleXMoKV0uZmlsdGVyKGU9PiFuLmhhcyhlKSkscmVtb3ZlZDpbLi4ubi5rZXlzKCldLmZpbHRlcihlPT4hci5oYXMoZSkpLGNoYW5nZWQ6Wy4uLnIua2V5cygpXS5maWx0ZXIoZT0+bi5oYXMoZSkmJm4uZ2V0KGUpIT09ci5nZXQoZSkpLm1hcChlPT4oe25hbWU6ZSxiZWZvcmU6bi5nZXQoZSksYWZ0ZXI6ci5nZXQoZSl9KSl9fSksbD1lPT5gJHtlLmxheWVyfXwke1tlLmZyb20sZS50b10uc29ydCgpLmpvaW4oYHxgKX18JHtlLmxhYmVsfWAsdT1TYSgoKT0+e2xldCBlPWEudmFsdWU/Lm5ldHdvcms7aWYoIWUpcmV0dXJuO2xldCBuPW5ldyBTZXQoZS5ncmFwaC5lZGdlcy5tYXAobCkpLHI9bmV3IFNldCh0LmRhdGEuZ3JhcGguZWRnZXMubWFwKGwpKSxpPWU9PmAke2UubGF5ZXJ9OiAke2UuZnJvbS5yZXBsYWNlKC9eXHcrOi8sYGApfSB0byAke2UudG8ucmVwbGFjZSgvXlx3KzovLGBgKX0sICR7ZS5sYWJlbH1gO3JldHVybnthZGRlZDp0LmRhdGEuZ3JhcGguZWRnZXMuZmlsdGVyKGU9PiFuLmhhcyhsKGUpKSkubWFwKGkpLGdvbmU6ZS5ncmFwaC5lZGdlcy5maWx0ZXIoZT0+IXIuaGFzKGwoZSkpKS5tYXAoaSl9fSksZD1lPT5gJHtlLmxldmVsfXwke2UuZGV2aWNlPz9gYH18JHtlLm1lc3NhZ2V9YCxmPVNhKCgpPT57bGV0IGU9YS52YWx1ZT8ubmV0d29yaztpZighZSlyZXR1cm47bGV0IG49bmV3IFNldChlLmZpbmRpbmdzLm1hcChkKSkscj1uZXcgU2V0KHQuZGF0YS5maW5kaW5ncy5tYXAoZCkpO3JldHVybnthZGRlZDp0LmRhdGEuZmluZGluZ3MuZmlsdGVyKGU9PiFuLmhhcyhkKGUpKSksZ29uZTplLmZpbmRpbmdzLmZpbHRlcihlPT4hci5oYXMoZChlKSkpfX0pO3JldHVybihlLHQpPT4oSigpLFkocSxudWxsLFt0WzEzXXx8PVgoYGgyYCxudWxsLGBDb21wYXJlYCwtMSksdFsxNF18fD1YKGBwYCx7Y2xhc3M6YG11dGVkYH0sW0ppKGAgVGhlIHByb2plY3Qgbm93IGFnYWluc3QgYSBicmFuY2gsIHRhZyBvciBjb21taXQsIHJlYWQgYnkgdGhlIENpcmN1aXQgcnVubmluZyBub3c6IHNvIGl0IHNob3dzIGNoYW5nZXMgdG8geW91ciBmaWxlcywgbm90IHRvIENpcmN1aXQuIEJlZm9yZSB5b3UgbWVyZ2UgYSBwdWxsIHJlcXVlc3QsIGNvbXBhcmUgaXRzIGJyYW5jaCB3aXRoIGApLFgoYGNvZGVgLG51bGwsYG1haW5gKSxKaShgLiBgKV0sLTEpLHIudmFsdWU/KEooKSxZKGBwYCxvcyxLKHIudmFsdWUpLDEpKTpZaShgYCwhMCksWChgZm9ybWAse2NsYXNzOmB0b29sLWZvcm1gLG9uU3VibWl0OnRbMV18fD1DbyhlPT5pLnZhbHVlLnRyaW0oKSYmenQoTm8pKGBjb21wYXJlLyR7aS52YWx1ZS50cmltKCl9YCksW2BwcmV2ZW50YF0pfSxbWChgbGFiZWxgLHNzLFt0WzJdfHw9SmkoYEJyYW5jaCwgdGFnIG9yIGNvbW1pdCBgLC0xKSxDbihYKGBpbnB1dGAseyJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzBdfHw9ZT0+aS52YWx1ZT1lLGxpc3Q6YHJlZnNgLHBsYWNlaG9sZGVyOmBtYWluLCBIRUFEfjNgfSxudWxsLDUxMiksW1tnbyxpLnZhbHVlXV0pLFgoYGRhdGFsaXN0YCxjcyxbKEooITApLFkocSxudWxsLGhyKG4udmFsdWU/Lm5hbWVzPz9bXSxlPT4oSigpLFkoYG9wdGlvbmAse2tleTplLHZhbHVlOmV9LG51bGwsOCxscykpKSwxMjgpKSwoSighMCksWShxLG51bGwsaHIobi52YWx1ZT8uY29tbWl0cz8/W10sZT0+KEooKSxZKGBvcHRpb25gLHtrZXk6ZS5jb21taXQsdmFsdWU6ZS5zaG9ydH0sSyhlLnN1YmplY3QpLDksdXMpKSksMTI4KSldKV0pLHRbM118fD1YKGBidXR0b25gLHtjbGFzczpgcHJpbWFyeWAsdHlwZTpgc3VibWl0YH0sYENvbXBhcmVgLC0xKV0sMzIpLHMudmFsdWU/KEooKSxZKGBwYCxkcyxgUmVhZGluZyB0aGUgcHJvamVjdCBhdCBgK0soenQoTW8pLnJvdXRlLnBhcnRzWzBdKStg4oCmYCwxKSk6WWkoYGAsITApLG8udmFsdWU/KEooKSxZKGBwcmVgLGZzLEsoby52YWx1ZSksMSkpOllpKGBgLCEwKSxhLnZhbHVlJiZjLnZhbHVlJiZ1LnZhbHVlJiZmLnZhbHVlPyhKKCksWShxLHtrZXk6M30sW1goYHBgLG51bGwsW3RbNF18fD1KaShgIEFnYWluc3QgYCwtMSksWChgc3Ryb25nYCxudWxsLEsoYS52YWx1ZS5jb21taXQuc2hvcnQpLDEpLEppKGAsIGArSyhhLnZhbHVlLmNvbW1pdC5zdWJqZWN0KStgLCBieSBgK0soYS52YWx1ZS5jb21taXQuYXV0aG9yKStgLCBgK0sobmV3IERhdGUoYS52YWx1ZS5jb21taXQuZGF0ZSkudG9Mb2NhbGVTdHJpbmcoKSkrYC4gYCwxKV0pLHRbMTBdfHw9WChgaDNgLG51bGwsYERldmljZXNgLC0xKSwhYy52YWx1ZS5hZGRlZC5sZW5ndGgmJiFjLnZhbHVlLnJlbW92ZWQubGVuZ3RoJiYhYy52YWx1ZS5jaGFuZ2VkLmxlbmd0aD8oSigpLFkoYHBgLHBzLGBObyBkZXZpY2UncyBjb25maWcgY2hhbmdlcy5gKSk6WWkoYGAsITApLFgoYHVsYCxtcyxbKEooITApLFkocSxudWxsLGhyKGMudmFsdWUuYWRkZWQsZT0+KEooKSxZKGBsaWAse2tleTpgYWRkZWQgJHtlfWB9LFt0WzVdfHw9WChgc3BhbmAse2NsYXNzOmBiYWRnZWB9LGBhZGRlZGAsLTEpLFgoYGFgLHtvbkNsaWNrOnQ9Pnp0KE5vKShgZGV2aWNlcy8ke2V9YCl9LEsoZSksOSxocyldKSkpLDEyOCkpLChKKCEwKSxZKHEsbnVsbCxocihjLnZhbHVlLnJlbW92ZWQsZT0+KEooKSxZKGBsaWAse2tleTpgcmVtb3ZlZCAke2V9YH0sW3RbNl18fD1YKGBzcGFuYCx7Y2xhc3M6YGJhZGdlIGVycm9yYH0sYHJlbW92ZWRgLC0xKSxKaShLKGUpLDEpXSkpKSwxMjgpKV0pLChKKCEwKSxZKHEsbnVsbCxocihjLnZhbHVlLmNoYW5nZWQsZT0+KEooKSxZKGBkZXRhaWxzYCx7a2V5OmUubmFtZSxjbGFzczpgY2hhbmdlYH0sW1goYHN1bW1hcnlgLG51bGwsSyhlLm5hbWUpK2A6IGl0cyBjb25maWcgY2hhbmdlc2AsMSksV2koYXMse2JlZm9yZTplLmJlZm9yZSxhZnRlcjplLmFmdGVyfSxudWxsLDgsW2BiZWZvcmVgLGBhZnRlcmBdKV0pKSksMTI4KSksdFsxMV18fD1YKGBoM2AsbnVsbCxgVGhlIGdyYXBoYCwtMSksIXUudmFsdWUuYWRkZWQubGVuZ3RoJiYhdS52YWx1ZS5nb25lLmxlbmd0aD8oSigpLFkoYHBgLGdzLGBObyBsaW5lIG9mIHRoZSBncmFwaCBjaGFuZ2VzLmApKTpZaShgYCwhMCksWChgdWxgLF9zLFsoSighMCksWShxLG51bGwsaHIodS52YWx1ZS5hZGRlZCxlPT4oSigpLFkoYGxpYCx7a2V5OmArJHtlfWB9LFt0WzddfHw9WChgc3BhbmAse2NsYXNzOmBhZGRlZGB9LGArYCwtMSksSmkoYCBgK0soZSksMSldKSkpLDEyOCkpLChKKCEwKSxZKHEsbnVsbCxocih1LnZhbHVlLmdvbmUsZT0+KEooKSxZKGBsaWAse2tleTpgLSR7ZX1gfSxbdFs4XXx8PVgoYHNwYW5gLHtjbGFzczpgcmVtb3ZlZGB9LGDiiJJgLC0xKSxKaShgIGArSyhlKSwxKV0pKSksMTI4KSldKSx0WzEyXXx8PVgoYGgzYCxudWxsLFtKaShgRm91bmQgYnkgYCksWChgY29kZWAsbnVsbCxgY2lyY3VpdCB2YWxpZGF0ZWApXSwtMSksIWYudmFsdWUuYWRkZWQubGVuZ3RoJiYhZi52YWx1ZS5nb25lLmxlbmd0aD8oSigpLFkoYHBgLHZzLGBOb3RoaW5nIG5ldywgYW5kIG5vdGhpbmcgZ29uZS5gKSk6KEooKSxZKGBwYCx5cyxLKHp0KEFvKS5jb3VudChmLnZhbHVlLmFkZGVkLmxlbmd0aCxgbmV3IGZpbmRpbmdgKSkrYCwgYCtLKHp0KEFvKS5jb3VudChmLnZhbHVlLmdvbmUubGVuZ3RoLGBmaW5kaW5nYCkpK2Agbm8gbG9uZ2VyLiBgLDEpKSxYKGB1bGAsYnMsWyhKKCEwKSxZKHEsbnVsbCxocihmLnZhbHVlLmFkZGVkLChlLHQpPT4oSigpLFkoYGxpYCx7a2V5OmBuZXcgJHt0fWB9LFtYKGBzcGFuYCx7Y2xhc3M6VyhbYGJhZGdlYCxlLmxldmVsXSl9LGBuZXcgYCtLKGUubGV2ZWwpLDMpLEppKEsoZS5kZXZpY2U/YCR7ZS5kZXZpY2V9OiBgOmBgKStLKGUubWVzc2FnZSksMSldKSkpLDEyOCkpLChKKCEwKSxZKHEsbnVsbCxocihmLnZhbHVlLmdvbmUsKGUsbik9PihKKCksWShgbGlgLHtrZXk6YGdvbmUgJHtufWB9LFt0WzldfHw9WChgc3BhbmAse2NsYXNzOmBiYWRnZWB9LGBubyBsb25nZXJgLC0xKSxKaShLKGUuZGV2aWNlP2Ake2UuZGV2aWNlfTogYDpgYCkrSyhlLm1lc3NhZ2UpLDEpXSkpKSwxMjgpKV0pXSw2NCkpOllpKGBgLCEwKV0sNjQpKX19KSxTcz17a2V5OjB9LENzPVtgYXJpYS1sYWJlbGBdLHdzPXtjbGFzczpgc3BlZWQtbmFtZWB9LFRzPXtjbGFzczpgcG9ydHNgfSxFcz1bYHRpdGxlYCxgYXJpYS1sYWJlbGAsYG9uQ2xpY2tgXSxEcz17Y2xhc3M6YGZhY2VwbGF0ZS1sZWdlbmRgfSxPcz1Cbih7X19uYW1lOmBGYWNlcGxhdGVgLHByb3BzOntkZXZpY2U6e30scG9ydHM6e319LHNldHVwKGUpe2xldCB0PWUsbj17c2h1dDpgc2h1dCBkb3duYCxsYWc6YGluIGEgTEFHYCxhY2Nlc3M6YGFjY2Vzc2AsdHJ1bms6YHRydW5rYCxyb3V0ZWQ6YHJvdXRlZGAscGxhaW46YHVwLCBub3RoaW5nIG9uIGl0YH0scj1lPT5lP2UuaW5fbGFnP2BsYWdgOmUuYWNjZXNzX3ZsYW4/YGFjY2Vzc2A6ZS50cnVua192bGFucz9gdHJ1bmtgOmUuYWRkcmVzc2VzP2Byb3V0ZWRgOmBwbGFpbmA6YHNodXRgLGk9U2EoKCk9PntsZXQgZT1uZXcgTWFwO2ZvcihsZXQgaSBvZiB0LnBvcnRzKXtsZXQgYT10LmRldmljZS5pbnRlcmZhY2VzPy5ldGhlcm5ldD8uW2ldLG89cihhKSxzPWE/LmxpbmssYz1baSxuW29dLGE/LmRlc2NyaXB0aW9uLHM/YHRvICR7cy5kZXZpY2V9ICR7cy5wb3J0fWA6YGBdLmZpbHRlcihCb29sZWFuKS5qb2luKGAsIGApLGw9aS5zcGxpdChgLWApWzBdPz9pO2Uuc2V0KGwsWy4uLmUuZ2V0KGwpPz9bXSx7bmFtZTppLHVzZTpvLGxpbmtlZDohIXMsbGFiZWw6Y31dKX1yZXR1cm5bLi4uZV19KTtmdW5jdGlvbiBhKGUpe2xldCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBwb3J0LSR7ZX1gKTt0Py5zY3JvbGxJbnRvVmlldyh7YmxvY2s6YGNlbnRlcmAsYmVoYXZpb3I6YHNtb290aGB9KSx0Py5jbGFzc0xpc3QuYWRkKGBmbGFzaGApLHNldFRpbWVvdXQoKCk9PnQ/LmNsYXNzTGlzdC5yZW1vdmUoYGZsYXNoYCksMTYwMCl9cmV0dXJuKHQscik9PmUucG9ydHMubGVuZ3RoPyhKKCksWShgZGl2YCxTcyxbWChgZGl2YCx7Y2xhc3M6YGZhY2VwbGF0ZWAscm9sZTpgZ3JvdXBgLCJhcmlhLWxhYmVsIjpgJHtlLmRldmljZS5uYW1lfSdzIHBvcnRzYH0sWyhKKCEwKSxZKHEsbnVsbCxocihpLnZhbHVlLChbZSx0XSk9PihKKCksWShgZGl2YCx7a2V5OmUsY2xhc3M6YHNwZWVkYH0sW1goYHNwYW5gLHdzLEsoZSksMSksWChgZGl2YCxUcyxbKEooITApLFkocSxudWxsLGhyKHQsZT0+KEooKSxZKGBidXR0b25gLHtrZXk6ZS5uYW1lLGNsYXNzOlcoW2Bwb3J0YCxlLnVzZSx7bGlua2VkOmUubGlua2VkfV0pLHRpdGxlOmUubGFiZWwsImFyaWEtbGFiZWwiOmUubGFiZWwsb25DbGljazp0PT5hKGUubmFtZSl9LEsoZS5uYW1lLnNwbGl0KGAtYClbMV0/P2UubmFtZSksMTEsRXMpKSksMTI4KSldKV0pKSksMTI4KSldLDgsQ3MpLFgoYHVsYCxEcyxbKEooKSxZKHEsbnVsbCxocihuLChlLHQpPT5YKGBsaWAse2tleTp0fSxbWChgc3BhbmAse2NsYXNzOlcoW2Bwb3J0YCx0XSl9LG51bGwsMiksSmkoSyhlKSwxKV0pKSw2NCkpLHJbMF18fD1YKGBsaWAsbnVsbCxbWChgc3BhbmAse2NsYXNzOmBwb3J0IHBsYWluIGxpbmtlZGB9KSxKaShgbGlua2VkIHRvIGFub3RoZXIgZGV2aWNlYCldLC0xKV0pXSkpOllpKGBgLCEwKX19KSxrcz17a2V5OjAsY2xhc3M6YG11dGVkYH0sQXM9e2tleToxLGNsYXNzOmBkYXRhIHNldHRpbmdzYH0sanM9e2tleToyLGNsYXNzOmBkYXRhYH0sTXM9e2tleTozLGNsYXNzOmBkYXRhYH0sTnM9Qm4oe19fbmFtZTpgU2V0dGluZ3NgLHByb3BzOnt2YWx1ZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPWU9PlsuLi5uZXcgU2V0KGUuZmxhdE1hcChlPT5PYmplY3Qua2V5cyhlKSkpXTtmdW5jdGlvbiByKGUpe2lmKEFvLmlzT2JqZWN0KGUpJiZPYmplY3Qua2V5cyhlKS5sZW5ndGgmJiFBby5pc1NlY3JldChlKSl7bGV0IHQ9T2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbLGVdKT0+ZSE9PXZvaWQgMCk7aWYoIXQuZXZlcnkoKFssZV0pPT5Bby5pc09iamVjdChlKSYmIUFvLmlzU2VjcmV0KGUpKSlyZXR1cm57a2luZDpgc2V0dGluZ3NgLHZhbHVlOmV9O2xldCByPXQubWFwKChbLGVdKT0+ZSksaT1uKHIpO3JldHVybntraW5kOmByZWNvcmRgLGhlYWQ6aSxyb3dzOnQubWFwKChbZV0sdCk9Pih7bmFtZTplLGNlbGxzOmkubWFwKGU9PnJbdF1bZV0pfSkpfX1pZihBcnJheS5pc0FycmF5KGUpJiZlLnNvbWUoZT0+QW8uaXNPYmplY3QoZSkmJiFBby5pc1NlY3JldChlKSkpe2xldCB0PWUubWFwKGU9PkFvLmlzT2JqZWN0KGUpP2U6e3ZhbHVlOmV9KSxyPW4odCk7cmV0dXJue2tpbmQ6YGxpc3RgLGhlYWQ6cixyb3dzOnQubWFwKGU9PnIubWFwKHQ9PmVbdF0pKX19cmV0dXJue2tpbmQ6YHRleHRgLHRleHQ6QW8uY29tcGFjdChlKX19bGV0IGk9U2EoKCk9PkFvLmlzT2JqZWN0KHQudmFsdWUpP09iamVjdC5lbnRyaWVzKHQudmFsdWUpLmZpbHRlcigoWyxlXSk9PmUhPT12b2lkIDApLm1hcCgoW2UsdF0pPT4oe2tleTplLGl0ZW06cih0KX0pKTpbXSk7cmV0dXJuKGUsdCk9PntsZXQgbj1kcihgU2V0dGluZ3NgLCEwKTtyZXR1cm4gaS52YWx1ZS5sZW5ndGg/KEooKSxZKGB0YWJsZWAsQXMsW1goYHRib2R5YCxudWxsLFsoSighMCksWShxLG51bGwsaHIoaS52YWx1ZSwoe2tleTplLGl0ZW06cn0pPT4oSigpLFkoYHRyYCx7a2V5OmV9LFtYKGB0aGAsbnVsbCxbWChgY29kZWAsbnVsbCxLKGUpLDEpXSksWChgdGRgLG51bGwsW3Iua2luZD09PWB0ZXh0YD8oSigpLFkocSx7a2V5OjB9LFtKaShLKHIudGV4dCksMSldLDY0KSk6ci5raW5kPT09YHNldHRpbmdzYD8oSigpLHppKG4se2tleToxLHZhbHVlOnIudmFsdWV9LG51bGwsOCxbYHZhbHVlYF0pKTpyLmtpbmQ9PT1gcmVjb3JkYD8oSigpLFkoYHRhYmxlYCxqcyxbWChgdGhlYWRgLG51bGwsW1goYHRyYCxudWxsLFt0WzBdfHw9WChgdGhgLG51bGwsYE5hbWVgLC0xKSwoSighMCksWShxLG51bGwsaHIoci5oZWFkLGU9PihKKCksWShgdGhgLHtrZXk6ZX0sW1goYGNvZGVgLG51bGwsSyhlKSwxKV0pKSksMTI4KSldKV0pLFgoYHRib2R5YCxudWxsLFsoSighMCksWShxLG51bGwsaHIoci5yb3dzLGU9PihKKCksWShgdHJgLHtrZXk6ZS5uYW1lfSxbWChgdGRgLG51bGwsW1goYHN0cm9uZ2AsbnVsbCxLKGUubmFtZSksMSldKSwoSighMCksWShxLG51bGwsaHIoZS5jZWxscywoZSx0KT0+KEooKSxZKGB0ZGAse2tleTp0fSxLKHp0KEFvKS5jb21wYWN0KGUpKSwxKSkpLDEyOCkpXSkpKSwxMjgpKV0pXSkpOihKKCksWShgdGFibGVgLE1zLFtYKGB0aGVhZGAsbnVsbCxbWChgdHJgLG51bGwsW3RbMV18fD1YKGB0aGAsbnVsbCxgI2AsLTEpLChKKCEwKSxZKHEsbnVsbCxocihyLmhlYWQsZT0+KEooKSxZKGB0aGAse2tleTplfSxbWChgY29kZWAsbnVsbCxLKGUpLDEpXSkpKSwxMjgpKV0pXSksWChgdGJvZHlgLG51bGwsWyhKKCEwKSxZKHEsbnVsbCxocihyLnJvd3MsKGUsdCk9PihKKCksWShgdHJgLHtrZXk6dH0sW1goYHRkYCxudWxsLEsodCsxKSwxKSwoSighMCksWShxLG51bGwsaHIoZSwoZSx0KT0+KEooKSxZKGB0ZGAse2tleTp0fSxLKHp0KEFvKS5jb21wYWN0KGUpKSwxKSkpLDEyOCkpXSkpKSwxMjgpKV0pXSkpXSldKSkpLDEyOCkpXSldKSk6KEooKSxZKGBwYCxrcyxgTm9uZS5gKSl9fX0pLFBzPXtjbGFzczpgdGFibGVzYH0sRnM9e2NsYXNzOmBjcnVtYnNgfSxJcz17a2V5OjAsY2xhc3M6YG11dGVkYH0sTHM9e2tleTowLGNsYXNzOmBiYWRnZSBlcnJvcmB9LFJzPXtrZXk6MSxjbGFzczpgYmFkZ2Ugd2FybmluZ2B9LHpzPXtjbGFzczpgbXV0ZWRgfSxCcz17Y2xhc3M6YHRhYnNgfSxWcz1bYGFyaWEtcHJlc3NlZGAsYG9uQ2xpY2tgXSxIcz17Y2xhc3M6YGZpbmRpbmdzYH0sVXM9e2NsYXNzOmBtdXRlZGB9LFdzPXtjbGFzczpgY29kZWB9LEdzPVtgZGlzYWJsZWRgXSxLcz17a2V5OjAsY2xhc3M6YHZlcmRpY3QgcmVqZWN0YH0scXM9e2NsYXNzOmBtdXRlZGB9LEpzPXtrZXk6MCxjbGFzczpgdmVyZGljdCBhY2NlcHRgfSxZcz17Y2xhc3M6YGNvZGVgfSxYcz17a2V5OjEsY2xhc3M6YGZpbmRpbmdzYH0sWnM9e2tleTowLGNsYXNzOmBtdXRlZGB9LFFzPXtrZXk6MSxjbGFzczpgbXV0ZWRgfSwkcz17a2V5OjIsY2xhc3M6YG11dGVkYH0sZWM9Qm4oe19fbmFtZTpgRGV2aWNlVmlld2AscHJvcHM6e2RhdGE6e30sbmFtZTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVNhKCgpPT50LmRhdGEuZGV2aWNlcy5maW5kKGU9PmUubmFtZT09PXQubmFtZSkpLHI9U2EoKCk9PnQuZGF0YS5maW5kaW5ncy5maWx0ZXIoZT0+ZS5kZXZpY2U9PT10Lm5hbWUpKSxpPVNhKCgpPT5yLnZhbHVlLmZpbHRlcihlPT5lLmxldmVsPT09YGVycm9yYCkubGVuZ3RoKSxhPVt7aWQ6YG92ZXJ2aWV3YCx0aXRsZTpgT3ZlcnZpZXdgLGhhczooKT0+ITB9LHtpZDpgcG9ydHNgLHRpdGxlOmBQb3J0c2AsaGFzOigpPT4hMH0se2lkOmBpbnRlcmZhY2VzYCx0aXRsZTpgSW50ZXJmYWNlc2AsaGFzOmU9Pk9iamVjdC5rZXlzKGUuaW50ZXJmYWNlcz8/e30pLnNvbWUoZT0+ZSE9PWBldGhlcm5ldGApfSx7aWQ6YHN3aXRjaGluZ2AsdGl0bGU6YFN3aXRjaGluZ2AsaGFzOmU9PiEhZS5zd2l0Y2hpbmd9LHtpZDpgcm91dGluZ2AsdGl0bGU6YFJvdXRpbmdgLGhhczplPT4hIWUucm91dGluZ30se2lkOmBmaXJld2FsbGAsdGl0bGU6YEZpcmV3YWxsYCxoYXM6ZT0+ISFlLmZpcmV3YWxsfSx7aWQ6YG1hbmFnZW1lbnRgLHRpdGxlOmBNYW5hZ2VtZW50YCxoYXM6ZT0+ISFlLm1hbmFnZW1lbnR9LHtpZDpgc3lzdGVtYCx0aXRsZTpgU3lzdGVtYCxoYXM6ZT0+ISFlLnN5c3RlbX0se2lkOmBtb25pdG9yaW5nYCx0aXRsZTpgTW9uaXRvcmluZ2AsaGFzOmU9PiEhZS5tb25pdG9yaW5nfSx7aWQ6YHNlcnZpY2VzYCx0aXRsZTpgU2VydmljZXNgLGhhczplPT4hIWUuc2VydmljZXN9LHtpZDpgY29uZmlnYCx0aXRsZTpgQ29uZmlnYCxoYXM6KCk9PiEwfSx7aWQ6YG5vd2AsdGl0bGU6YE9uIHRoZSBkZXZpY2Ugbm93YCxoYXM6KCk9PiEwfSx7aWQ6YGhpc3RvcnlgLHRpdGxlOmBIaXN0b3J5YCxoYXM6KCk9PiEwfV0sbz1TYSgoKT0+bi52YWx1ZT9hLmZpbHRlcihlPT5lLmhhcyhuLnZhbHVlKSk6W10pLHM9U2EoKCk9Pk1vLnJvdXRlLnBhcnRzWzFdPz9gb3ZlcnZpZXdgKSxjPVNhKCgpPT57bGV0IGU9bi52YWx1ZTtpZighZSlyZXR1cm5bXTtsZXQgcj1PYmplY3QuZW50cmllcyhlLmludGVyZmFjZXM/LmV0aGVybmV0Pz97fSk7cmV0dXJuKHQuZGF0YS5wb3J0c1tlLm5hbWVdPy5sZW5ndGg/dC5kYXRhLnBvcnRzW2UubmFtZV06ci5tYXAoKFtlXSk9PmUpKS5tYXAodD0+e2xldCBuPWUuaW50ZXJmYWNlcz8uZXRoZXJuZXQ/Llt0XTtpZighbilyZXR1cm57aWQ6YHBvcnQtJHt0fWAsbXV0ZWQ6ITAsY2VsbHM6W3QsYHNodXQgZG93bmAsYGAsYGAsYGAsYGBdfTtsZXQgcj0obi5pbl9sYWc/ZS5pbnRlcmZhY2VzPy5sYWc/LltuLmluX2xhZ106dm9pZCAwKT8/bixpPXIuYWNjZXNzX3ZsYW4/YGFjY2VzcyAke3IuYWNjZXNzX3ZsYW59YDpyLnRydW5rX3ZsYW5zP2B0cnVuayAke3IudHJ1bmtfdmxhbnMuam9pbihgLCBgKX0ke3IubmF0aXZlX3ZsYW4/YCwgbmF0aXZlICR7ci5uYXRpdmVfdmxhbn1gOmBgfWA6YGAse2Rlc2NyaXB0aW9uOmEsYWRkcmVzc2VzOm8sbGluazpzLGluX2xhZzpjLGFjY2Vzc192bGFuOmwsdHJ1bmtfdmxhbnM6dSxuYXRpdmVfdmxhbjpkLC4uLmZ9PW47cmV0dXJue2lkOmBwb3J0LSR7dH1gLGNlbGxzOlt0LGE/P2BgLFtpLGM/YGluIExBRyAke2N9YDpgYF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oYCwgYCksQW8uY29tcGFjdChvKSxzP3tkZXZpY2U6cy5kZXZpY2UsbGFiZWw6YCR7cy5kZXZpY2V9ICR7cy5wb3J0fSR7cy50aHJvdWdoP2AsIHRocm91Z2ggJHtzLnRocm91Z2h9YDpgYH1gfTpgYCxBby5jb21wYWN0KGYpXX19KX0pLGw9U2EoKCk9PntsZXR7ZXRoZXJuZXQ6ZSwuLi50fT1uLnZhbHVlPy5pbnRlcmZhY2VzPz97fTtyZXR1cm4gdH0pLHU9SXQoKSxkPUl0KCExKSxmPUl0KGBgKTthc3luYyBmdW5jdGlvbiBwKCl7ZC52YWx1ZT0hMCxmLnZhbHVlPWBgO3RyeXt1LnZhbHVlPWF3YWl0IFBvKGAvYXBpL3JlYWQ/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHQubmFtZSl9YCwhMCl9Y2F0Y2goZSl7Zi52YWx1ZT1lLm1lc3NhZ2V9ZmluYWxseXtkLnZhbHVlPSExfX1sZXQgbT1TYSgoKT0+dS52YWx1ZT8uc3RlcHMucmVkdWNlKChlLHQpPT5lK3Quc2hvdy5sZW5ndGgsMCk/PzApLGg9SXQoKSxnPUl0KGBgKTtyZXR1cm4ga24ocyxhc3luYyBlPT57aWYoIShlIT09YGhpc3RvcnlgfHxoLnZhbHVlKSl0cnl7aC52YWx1ZT1hd2FpdCBQbyhgL2FwaS9oaXN0b3J5P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudCh0Lm5hbWUpfWApfWNhdGNoKGUpe2cudmFsdWU9ZS5tZXNzYWdlfX0se2ltbWVkaWF0ZTohMH0pLCh0LGEpPT4oSigpLFkoYGRpdmAsUHMsW1goYHBgLEZzLFtYKGBhYCx7b25DbGljazphWzBdfHw9ZT0+enQoTm8pKGBkZXZpY2VzYCl9LGBEZXZpY2VzYCksYVsxXXx8PUppKGAgL2AsLTEpXSksbi52YWx1ZT8oSigpLFkocSx7a2V5OjF9LFtYKGBoMmAsbnVsbCxbSmkoSyhuLnZhbHVlLm5hbWUpK2AgYCwxKSxpLnZhbHVlPyhKKCksWShgc3BhbmAsTHMsSyh6dChBbykuY291bnQoaS52YWx1ZSxgZXJyb3JgKSksMSkpOllpKGBgLCEwKSxyLnZhbHVlLmxlbmd0aC1pLnZhbHVlPyhKKCksWShgc3BhbmAsUnMsSyh6dChBbykuY291bnQoci52YWx1ZS5sZW5ndGgtaS52YWx1ZSxgd2FybmluZ2ApKSwxKSk6WWkoYGAsITApXSksWChgcGAsenMsW0ppKEsobi52YWx1ZS5wbGF0Zm9ybSkrYCBgK0sobi52YWx1ZS5tb2RlbCkrYCBhdCBgK0sobi52YWx1ZS5zaXRlKStgIMK3IGAsMSksWChgY29kZWAsbnVsbCxLKGUuZGF0YS5maWxlc1tuLnZhbHVlLm5hbWVdKSwxKV0pLFgoYGRpdmAsQnMsWyhKKCEwKSxZKHEsbnVsbCxocihvLnZhbHVlLGU9PihKKCksWShgYnV0dG9uYCx7a2V5OmUuaWQsImFyaWEtcHJlc3NlZCI6cy52YWx1ZT09PWUuaWQsb25DbGljazp0PT56dChObykoYGRldmljZXMvJHtuLnZhbHVlLm5hbWV9LyR7ZS5pZH1gKX0sSyhlLnRpdGxlKSw5LFZzKSkpLDEyOCkpXSkscy52YWx1ZT09PWBvdmVydmlld2A/KEooKSxZKHEse2tleTowfSxbci52YWx1ZS5sZW5ndGg/KEooKSxZKHEse2tleTowfSxbYVsyXXx8PVgoYGgzYCxudWxsLFtKaShgRm91bmQgYnkgYCksWChgY29kZWAsbnVsbCxgY2lyY3VpdCB2YWxpZGF0ZWApXSwtMSksWChgdWxgLEhzLFsoSighMCksWShxLG51bGwsaHIoci52YWx1ZSwoZSx0KT0+KEooKSxZKGBsaWAse2tleTp0fSxbWChgc3BhbmAse2NsYXNzOlcoW2BiYWRnZWAsZS5sZXZlbF0pfSxLKGUubGV2ZWwpLDMpLEppKEsoZS5tZXNzYWdlKSwxKV0pKSksMTI4KSldKV0sNjQpKTpZaShgYCwhMCksYVszXXx8PVgoYGgzYCxudWxsLGBEZXZpY2VgLC0xKSxXaShOcyx7dmFsdWU6e25hbWU6bi52YWx1ZS5uYW1lLHNpdGU6bi52YWx1ZS5zaXRlLHJvbGU6bi52YWx1ZS5yb2xlLHBsYXRmb3JtOm4udmFsdWUucGxhdGZvcm0sbW9kZWw6bi52YWx1ZS5tb2RlbCxjb25uZWN0aW9uOm4udmFsdWUuY29ubmVjdGlvbn19LG51bGwsOCxbYHZhbHVlYF0pXSw2NCkpOnMudmFsdWU9PT1gcG9ydHNgPyhKKCksWShxLHtrZXk6MX0sW1dpKE9zLHtkZXZpY2U6bi52YWx1ZSxwb3J0czplLmRhdGEucG9ydHNbbi52YWx1ZS5uYW1lXT8/W119LG51bGwsOCxbYGRldmljZWAsYHBvcnRzYF0pLFdpKHFvLHtoZWFkOltgUG9ydGAsYERlc2NyaXB0aW9uYCxgU3dpdGNoaW5nYCxgQWRkcmVzc2VzYCxgTGlua2AsYE90aGVyIHNldHRpbmdzYF0scm93czpjLnZhbHVlLGNzdjpgJHtuLnZhbHVlLm5hbWV9LXBvcnRzYH0sbnVsbCw4LFtgcm93c2AsYGNzdmBdKV0sNjQpKTpzLnZhbHVlPT09YGludGVyZmFjZXNgPyhKKCksemkoTnMse2tleToyLHZhbHVlOmwudmFsdWV9LG51bGwsOCxbYHZhbHVlYF0pKTpzLnZhbHVlPT09YHN3aXRjaGluZ2A/KEooKSx6aShOcyx7a2V5OjMsdmFsdWU6bi52YWx1ZS5zd2l0Y2hpbmd9LG51bGwsOCxbYHZhbHVlYF0pKTpzLnZhbHVlPT09YHJvdXRpbmdgPyhKKCksemkoTnMse2tleTo0LHZhbHVlOm4udmFsdWUucm91dGluZ30sbnVsbCw4LFtgdmFsdWVgXSkpOnMudmFsdWU9PT1gZmlyZXdhbGxgPyhKKCksemkoTnMse2tleTo1LHZhbHVlOm4udmFsdWUuZmlyZXdhbGx9LG51bGwsOCxbYHZhbHVlYF0pKTpzLnZhbHVlPT09YG1hbmFnZW1lbnRgPyhKKCksemkoTnMse2tleTo2LHZhbHVlOm4udmFsdWUubWFuYWdlbWVudH0sbnVsbCw4LFtgdmFsdWVgXSkpOnMudmFsdWU9PT1gc3lzdGVtYD8oSigpLHppKE5zLHtrZXk6Nyx2YWx1ZTpuLnZhbHVlLnN5c3RlbX0sbnVsbCw4LFtgdmFsdWVgXSkpOnMudmFsdWU9PT1gbW9uaXRvcmluZ2A/KEooKSx6aShOcyx7a2V5OjgsdmFsdWU6bi52YWx1ZS5tb25pdG9yaW5nfSxudWxsLDgsW2B2YWx1ZWBdKSk6cy52YWx1ZT09PWBzZXJ2aWNlc2A/KEooKSx6aShOcyx7a2V5OjksdmFsdWU6bi52YWx1ZS5zZXJ2aWNlc30sbnVsbCw4LFtgdmFsdWVgXSkpOnMudmFsdWU9PT1gY29uZmlnYD8oSigpLFkocSx7a2V5OjEwfSxbWChgcGAsVXMsYCBXaGF0IHRoZSBkZXZpY2Ugc2hvdWxkIHJ1biwgYXMgQ2lyY3VpdCB3cml0ZXMgaXQgZm9yIGArSyhuLnZhbHVlLnBsYXRmb3JtKStgLiBBIHNlY3JldCBzaG93cyBhcyBpdHMgbmFtZSwgbmV2ZXIgaXRzIHZhbHVlLiBgLDEpLFgoYHByZWAsV3MsSyhlLmRhdGEucmVuZGVyZWRbbi52YWx1ZS5uYW1lXSksMSldLDY0KSk6cy52YWx1ZT09PWBub3dgPyhKKCksWShxLHtrZXk6MTF9LFthWzddfHw9WChgcGAse2NsYXNzOmBtdXRlZGB9LFtKaShgIENpcmN1aXQgcmVhZHMgdGhlIGRldmljZSBub3csIHRoZSBzYW1lIHdheSBgKSxYKGBjb2RlYCxudWxsLGBjaXJjdWl0IGRpZmZgKSxKaShgIGRvZXMsIGFuZCBzaG93cyB3aGF0IGApLFgoYGNvZGVgLG51bGwsYGNpcmN1aXQgYXBwbHlgKSxKaShgIHdvdWxkIHNlbmQuIE5vdGhpbmcgaXMga2VwdDogcmVhZCBpdCBhZ2FpbiB0byBzZWUgaXQgYWdhaW4uIGApXSwtMSksWChgcGAsbnVsbCxbWChgYnV0dG9uYCx7Y2xhc3M6YHByaW1hcnlgLGRpc2FibGVkOmQudmFsdWUsb25DbGljazpwfSxLKGQudmFsdWU/YFJlYWRpbmcgdGhlIGRldmljZeKApmA6YFJlYWQgZnJvbSB0aGUgZGV2aWNlIG5vd2ApLDksR3MpXSksZi52YWx1ZT8oSigpLFkoYHBgLEtzLEsoZi52YWx1ZSksMSkpOllpKGBgLCEwKSx1LnZhbHVlPyhKKCksWShxLHtrZXk6MX0sW1goYHBgLHFzLGBSZWFkIGF0IGArSyhuZXcgRGF0ZSh1LnZhbHVlLnJlYWRBdCkudG9Mb2NhbGVTdHJpbmcoKSkrYC5gLDEpLGFbNV18fD1YKGBoM2AsbnVsbCxgV2hhdCBhcHBseSB3b3VsZCBzZW5kYCwtMSksIW0udmFsdWUmJiF1LnZhbHVlLnByb2JsZW1zLmxlbmd0aD8oSigpLFkoYHBgLEpzLGAgVGhlIGRldmljZSBhbHJlYWR5IHJ1bnMgaXRzIGNvbmZpZy4gTm90aGluZyB0byBjaGFuZ2UuIGApKTpZaShgYCwhMCksKEooITApLFkocSxudWxsLGhyKHUudmFsdWUuc3RlcHMsZT0+KEooKSxZKHEse2tleTplLnRpdGxlfSxbWChgaDRgLG51bGwsSyhlLnRpdGxlKSwxKSxYKGBwcmVgLFlzLEsoZS5zaG93LmpvaW4oYApgKSksMSldLDY0KSkpLDEyOCkpLHUudmFsdWUucHJvYmxlbXMubGVuZ3RoPyhKKCksWShgdWxgLFhzLFsoSighMCksWShxLG51bGwsaHIodS52YWx1ZS5wcm9ibGVtcyxlPT4oSigpLFkoYGxpYCx7a2V5OmV9LFthWzRdfHw9WChgc3BhbmAse2NsYXNzOmBiYWRnZSBlcnJvcmB9LGBwcm9ibGVtYCwtMSksSmkoSyhlKSwxKV0pKSksMTI4KSldKSk6WWkoYGAsITApLGFbNl18fD1YKGBoM2AsbnVsbCxgV2hhdCBpdCBydW5zLCBhZ2FpbnN0IHRoZSBwcm9qZWN0YCwtMSksV2koYXMse2JlZm9yZTp1LnZhbHVlLnJ1bm5pbmcsYWZ0ZXI6dS52YWx1ZS5yZW5kZXJlZH0sbnVsbCw4LFtgYmVmb3JlYCxgYWZ0ZXJgXSldLDY0KSk6WWkoYGAsITApXSw2NCkpOnMudmFsdWU9PT1gaGlzdG9yeWA/KEooKSxZKHEse2tleToxMn0sW2cudmFsdWU/KEooKSxZKGBwYCxacyxLKGcudmFsdWUpLDEpKTpoLnZhbHVlP2gudmFsdWUubGVuZ3RoPyhKKCksemkocW8se2tleTozLGhlYWQ6W2BDb21taXRgLGBXaGVuYCxgV2hvYCxgV2hhdGAsYGBdLHJvd3M6aC52YWx1ZS5tYXAoZT0+KHtjZWxsczpbZS5zaG9ydCxuZXcgRGF0ZShlLmRhdGUpLnRvTG9jYWxlU3RyaW5nKCksZS5hdXRob3IsZS5zdWJqZWN0LHtsaW5rOmBjb21wYXJlLyR7ZS5jb21taXR9YCxsYWJlbDpgY29tcGFyZSB3aXRoIG5vd2B9XX0pKX0sbnVsbCw4LFtgcm93c2BdKSk6KEooKSxZKGBwYCwkcyxgTm8gY29tbWl0IGNoYW5nZWQgYCtLKGUuZGF0YS5maWxlc1tuLnZhbHVlLm5hbWVdKStgIHlldC5gLDEpKTooSigpLFkoYHBgLFFzLGBSZWFkaW5nIHRoZSBoaXN0b3J54oCmYCkpXSw2NCkpOllpKGBgLCEwKV0sNjQpKTooSigpLFkoYHBgLElzLGBObyBkZXZpY2UgYCtLKGUubmFtZSkrYCBpbiB0aGUgcHJvamVjdC5gLDEpKV0pKX19KSx0Yz1Cbih7X19uYW1lOmBEZXZpY2VzVmlld2AscHJvcHM6e2RhdGE6e319LHNldHVwKGUpe2xldCB0PWUsbj1TYSgoKT0+dC5kYXRhLmRldmljZXMubWFwKGU9PntsZXQgbj10LmRhdGEuZmluZGluZ3MuZmlsdGVyKHQ9PnQuZGV2aWNlPT09ZS5uYW1lKSxyPW4uZmlsdGVyKGU9PmUubGV2ZWw9PT1gZXJyb3JgKS5sZW5ndGg7cmV0dXJue2NlbGxzOlt7ZGV2aWNlOmUubmFtZX0sZS5zaXRlLGUucGxhdGZvcm0sZS5tb2RlbCxlLmNvbm5lY3Rpb24uaG9zdD8/YGNvbnNvbGUgb25seWAscnx8YGAsbi5sZW5ndGgtcnx8YGAsdC5kYXRhLmZpbGVzW2UubmFtZV1dfX0pKTtyZXR1cm4oZSx0KT0+KEooKSxZKHEsbnVsbCxbdFswXXx8PVgoYGgyYCxudWxsLGBEZXZpY2VzYCwtMSksV2kocW8se2hlYWQ6W2BEZXZpY2VgLGBTaXRlYCxgUGxhdGZvcm1gLGBNb2RlbGAsYFJlYWNoZWQgYXRgLGBFcnJvcnNgLGBXYXJuaW5nc2AsYEZpbGVgXSxyb3dzOm4udmFsdWUsY3N2OmBkZXZpY2VzYH0sbnVsbCw4LFtgcm93c2BdKV0sNjQpKX19KTtmdW5jdGlvbiBuYyhlLHQpeyh0PT1udWxsfHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9QXJyYXkodCk7bjx0O24rKylyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gcmMoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX1mdW5jdGlvbiBpYyhlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBuYyhlKX1mdW5jdGlvbiBhYyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IFR5cGVFcnJvcihgQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uYCl9ZnVuY3Rpb24gb2MoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxgdmFsdWVgaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLF9jKHIua2V5KSxyKX19ZnVuY3Rpb24gc2MoZSx0LG4pe3JldHVybiB0JiZvYyhlLnByb3RvdHlwZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlfWZ1bmN0aW9uIGNjKGUsdCl7dmFyIG49dHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtgQEBpdGVyYXRvcmBdO2lmKCFuKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj15YyhlKSl8fHQpe24mJihlPW4pO3ZhciByPTAsaT1mdW5jdGlvbigpe307cmV0dXJue3M6aSxuOmZ1bmN0aW9uKCl7cmV0dXJuIHI+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW3IrK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6aX19dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbChlKX0sbjpmdW5jdGlvbigpe3ZhciBlPW4ubmV4dCgpO3JldHVybiBvPWUuZG9uZSxlfSxlOmZ1bmN0aW9uKGUpe3M9ITAsYT1lfSxmOmZ1bmN0aW9uKCl7dHJ5e298fG4ucmV0dXJuPT1udWxsfHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGxjKGUsdCxuKXtyZXR1cm4odD1fYyh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPW4sZX1mdW5jdGlvbiB1YyhlKXtpZih0eXBlb2YgU3ltYm9sPGB1YCYmZVtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHxlW2BAQGl0ZXJhdG9yYF0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gZGMoZSx0KXt2YXIgbj1lPT1udWxsP251bGw6dHlwZW9mIFN5bWJvbDxgdWAmJmVbU3ltYm9sLml0ZXJhdG9yXXx8ZVtgQEBpdGVyYXRvcmBdO2lmKG4hPW51bGwpe3ZhciByLGksYSxvLHM9W10sYz0hMCxsPSExO3RyeXtpZihhPShuPW4uY2FsbChlKSkubmV4dCx0PT09MCl7aWYoT2JqZWN0KG4pIT09bilyZXR1cm47Yz0hMX1lbHNlIGZvcig7IShjPShyPWEuY2FsbChuKSkuZG9uZSkmJihzLnB1c2goci52YWx1ZSkscy5sZW5ndGghPT10KTtjPSEwKTt9Y2F0Y2goZSl7bD0hMCxpPWV9ZmluYWxseXt0cnl7aWYoIWMmJm4ucmV0dXJuIT1udWxsJiYobz1uLnJldHVybigpLE9iamVjdChvKSE9PW8pKXJldHVybn1maW5hbGx5e2lmKGwpdGhyb3cgaX19cmV0dXJuIHN9fWZ1bmN0aW9uIGZjKCl7dGhyb3cgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gcGMoKXt0aHJvdyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gbWMoZSx0KXtyZXR1cm4gcmMoZSl8fGRjKGUsdCl8fHljKGUsdCl8fGZjKCl9ZnVuY3Rpb24gaGMoZSl7cmV0dXJuIGljKGUpfHx1YyhlKXx8eWMoZSl8fHBjKCl9ZnVuY3Rpb24gZ2MoZSx0KXtpZih0eXBlb2YgZSE9YG9iamVjdGB8fCFlKXJldHVybiBlO3ZhciBuPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwoZSx0KTtpZih0eXBlb2YgciE9YG9iamVjdGApcmV0dXJuIHI7dGhyb3cgVHlwZUVycm9yKGBAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLmApfXJldHVybiBTdHJpbmcoZSl9ZnVuY3Rpb24gX2MoZSl7dmFyIHQ9Z2MoZSxgc3RyaW5nYCk7cmV0dXJuIHR5cGVvZiB0PT1gc3ltYm9sYD90OnQrYGB9ZnVuY3Rpb24gdmMoZSl7IkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjtyZXR1cm4gdmM9dHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmdHlwZW9mIFN5bWJvbC5pdGVyYXRvcj09YHN5bWJvbGA/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdHlwZW9mIFN5bWJvbD09YGZ1bmN0aW9uYCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/YHN5bWJvbGA6dHlwZW9mIGV9LHZjKGUpfWZ1bmN0aW9uIHljKGUsdCl7aWYoZSl7aWYodHlwZW9mIGU9PWBzdHJpbmdgKXJldHVybiBuYyhlLHQpO3ZhciBuPXt9LnRvU3RyaW5nLmNhbGwoZSkuc2xpY2UoOCwtMSk7cmV0dXJuIG49PT1gT2JqZWN0YCYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSxuPT09YE1hcGB8fG49PT1gU2V0YD9BcnJheS5mcm9tKGUpOm49PT1gQXJndW1lbnRzYHx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/bmMoZSx0KTp2b2lkIDB9fXZhciBiYz10eXBlb2Ygd2luZG93PmB1YD9udWxsOndpbmRvdyx4Yz1iYz9iYy5uYXZpZ2F0b3I6bnVsbDtiYyYmYmMuZG9jdW1lbnQ7dmFyIFNjPXZjKGBgKSxDYz12Yyh7fSksd2M9dmMoZnVuY3Rpb24oKXt9KSxUYz10eXBlb2YgSFRNTEVsZW1lbnQ+YHVgP2B1bmRlZmluZWRgOnZjKEhUTUxFbGVtZW50KSxFYz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbnN0YW5jZVN0cmluZyYmRGMoZS5pbnN0YW5jZVN0cmluZyk/ZS5pbnN0YW5jZVN0cmluZygpOm51bGx9LFo9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnZjKGUpPT1TY30sRGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGwmJnZjKGUpPT09d2N9LE9jPWZ1bmN0aW9uKGUpe3JldHVybiFOYyhlKSYmKEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShlKTplIT1udWxsJiZlIGluc3RhbmNlb2YgQXJyYXkpfSxrYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdmMoZSk9PT1DYyYmIU9jKGUpJiZlLmNvbnN0cnVjdG9yPT09T2JqZWN0fSxBYz1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdmMoZSk9PT1DY30sUT1mdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmdmMoZSk9PT12YygxKSYmIWlzTmFOKGUpfSxqYz1mdW5jdGlvbihlKXtyZXR1cm4gUShlKSYmTWF0aC5mbG9vcihlKT09PWV9LE1jPWZ1bmN0aW9uKGUpe2lmKFRjIT09YHVuZGVmaW5lZGApcmV0dXJuIGUhPW51bGwmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sTmM9ZnVuY3Rpb24oZSl7cmV0dXJuIFBjKGUpfHxGYyhlKX0sUGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEVjKGUpPT09YGNvbGxlY3Rpb25gJiZlLl9wcml2YXRlLnNpbmdsZX0sRmM9ZnVuY3Rpb24oZSl7cmV0dXJuIEVjKGUpPT09YGNvbGxlY3Rpb25gJiYhZS5fcHJpdmF0ZS5zaW5nbGV9LEljPWZ1bmN0aW9uKGUpe3JldHVybiBFYyhlKT09PWBjb3JlYH0sTGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEVjKGUpPT09YHN0eWxlc2hlZXRgfSxSYz1mdW5jdGlvbihlKXtyZXR1cm4gRWMoZSk9PT1gZXZlbnRgfSx6Yz1mdW5jdGlvbihlKXtyZXR1cm4hIShlPT1udWxsfHxlPT09YGB8fGUubWF0Y2goL15ccyskLykpfSxCYz1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIEhUTUxFbGVtZW50PmB1YD8hMTplIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR9LFZjPWZ1bmN0aW9uKGUpe3JldHVybiBrYyhlKSYmUShlLngxKSYmUShlLngyKSYmUShlLnkxKSYmUShlLnkyKX0sSGM9ZnVuY3Rpb24oZSl7cmV0dXJuIEFjKGUpJiZEYyhlLnRoZW4pfSxVYz1mdW5jdGlvbigpe3JldHVybiB4YyYmeGMudXNlckFnZW50Lm1hdGNoKC9tc2llfHRyaWRlbnR8ZWRnZS9pKX0sV2M9ZnVuY3Rpb24oZSx0KXt0fHw9ZnVuY3Rpb24oKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MSlyZXR1cm4gYXJndW1lbnRzWzBdO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybmB1bmRlZmluZWRgO2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtyZXR1cm4gZS5qb2luKGAkYCl9O3ZhciBuPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxpPWFyZ3VtZW50cyxhLG89dC5hcHBseShyLGkpLHM9bi5jYWNoZTtyZXR1cm4oYT1zW29dKXx8KGE9c1tvXT1lLmFwcGx5KHIsaSkpLGF9O3JldHVybiBuLmNhY2hlPXt9LG59LEdjPVdjKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXSkvZyxmdW5jdGlvbihlKXtyZXR1cm5gLWArZS50b0xvd2VyQ2FzZSgpfSl9KSxLYz1XYyhmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8oLVx3KS9nLGZ1bmN0aW9uKGUpe3JldHVybiBlWzFdLnRvVXBwZXJDYXNlKCl9KX0pLHFjPVdjKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdFswXS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyaW5nKDEpfSxmdW5jdGlvbihlLHQpe3JldHVybiBlK2AkYCt0fSksSmM9ZnVuY3Rpb24oZSl7cmV0dXJuIHpjKGUpP2U6ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cmluZygxKX0sWWM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zbGljZSgtMSp0Lmxlbmd0aCk9PT10fSxYYz1gKD86Wy0rXT8oPzooPzpcXGQrfFxcZCpcXC5cXGQrKSg/OltFZV1bKy1dP1xcZCspPykpYCxaYz1gcmdiW2FdP1xcKChgK1hjK2BbJV0/KVxccyosXFxzKihgK1hjK2BbJV0/KVxccyosXFxzKihgK1hjK2BbJV0/KSg/OlxccyosXFxzKihgK1hjK2ApKT9cXClgLFFjPWByZ2JbYV0/XFwoKD86YCtYYytgWyVdPylcXHMqLFxccyooPzpgK1hjK2BbJV0/KVxccyosXFxzKig/OmArWGMrYFslXT8pKD86XFxzKixcXHMqKD86YCtYYytgKSk/XFwpYCwkYz1gaHNsW2FdP1xcKChgK1hjK2ApXFxzKixcXHMqKGArWGMrYFslXSlcXHMqLFxccyooYCtYYytgWyVdKSg/OlxccyosXFxzKihgK1hjK2ApKT9cXClgLGVsPWBoc2xbYV0/XFwoKD86YCtYYytgKVxccyosXFxzKig/OmArWGMrYFslXSlcXHMqLFxccyooPzpgK1hjK2BbJV0pKD86XFxzKixcXHMqKD86YCtYYytgKSk/XFwpYCx0bD1gXFwjWzAtOWEtZkEtRl17M31gLG5sPWBcXCNbMC05YS1mQS1GXXs2fWAscmw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTx0Py0xOisoZT50KX0saWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4tMSpybChlLHQpfSxhbD1PYmplY3QuYXNzaWduPT1udWxsP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMsbj0xO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKHIhPW51bGwpZm9yKHZhciBpPU9iamVjdC5rZXlzKHIpLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtlW29dPXJbb119fXJldHVybiBlfTpPYmplY3QuYXNzaWduLmJpbmQoT2JqZWN0KSxvbD1mdW5jdGlvbihlKXtpZighKGUubGVuZ3RoIT09NCYmZS5sZW5ndGghPT03fHxlWzBdIT09YCNgKSl7dmFyIHQ9ZS5sZW5ndGg9PT00LG4scixpLGE9MTY7cmV0dXJuIHQ/KG49cGFyc2VJbnQoZVsxXStlWzFdLGEpLHI9cGFyc2VJbnQoZVsyXStlWzJdLGEpLGk9cGFyc2VJbnQoZVszXStlWzNdLGEpKToobj1wYXJzZUludChlWzFdK2VbMl0sYSkscj1wYXJzZUludChlWzNdK2VbNF0sYSksaT1wYXJzZUludChlWzVdK2VbNl0sYSkpLFtuLHIsaV19fSxzbD1mdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxhLG8scyxjO2Z1bmN0aW9uIGwoZSx0LG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJi0tbixuPDEvNj9lKyh0LWUpKjYqbjpuPDEvMj90Om48Mi8zP2UrKHQtZSkqKDIvMy1uKSo2OmV9dmFyIHU9UmVnRXhwKGBeYCskYytgJGApLmV4ZWMoZSk7aWYodSl7aWYobj1wYXJzZUludCh1WzFdKSxuPDA/bj0oMzYwLSAtMSpuJTM2MCklMzYwOm4+MzYwJiYobiU9MzYwKSxuLz0zNjAscj1wYXJzZUZsb2F0KHVbMl0pLHI8MHx8cj4xMDB8fChyLz0xMDAsaT1wYXJzZUZsb2F0KHVbM10pLGk8MHx8aT4xMDApfHwoaS89MTAwLGE9dVs0XSxhIT09dm9pZCAwJiYoYT1wYXJzZUZsb2F0KGEpLGE8MHx8YT4xKSkpcmV0dXJuO2lmKHI9PT0wKW89cz1jPU1hdGgucm91bmQoaSoyNTUpO2Vsc2V7dmFyIGQ9aTwuNT9pKigxK3IpOmkrci1pKnIsZj0yKmktZDtvPU1hdGgucm91bmQoMjU1KmwoZixkLG4rMS8zKSkscz1NYXRoLnJvdW5kKDI1NSpsKGYsZCxuKSksYz1NYXRoLnJvdW5kKDI1NSpsKGYsZCxuLTEvMykpfXQ9W28scyxjLGFdfXJldHVybiB0fSxjbD1mdW5jdGlvbihlKXt2YXIgdCxuPVJlZ0V4cChgXmArWmMrYCRgKS5leGVjKGUpO2lmKG4pe3Q9W107Zm9yKHZhciByPVtdLGk9MTtpPD0zO2krKyl7dmFyIGE9bltpXTtpZihhW2EubGVuZ3RoLTFdPT09YCVgJiYocltpXT0hMCksYT1wYXJzZUZsb2F0KGEpLHJbaV0mJihhPWEvMTAwKjI1NSksYTwwfHxhPjI1NSlyZXR1cm47dC5wdXNoKE1hdGguZmxvb3IoYSkpfXZhciBvPXJbMV18fHJbMl18fHJbM10scz1yWzFdJiZyWzJdJiZyWzNdO2lmKG8mJiFzKXJldHVybjt2YXIgYz1uWzRdO2lmKGMhPT12b2lkIDApe2lmKGM9cGFyc2VGbG9hdChjKSxjPDB8fGM+MSlyZXR1cm47dC5wdXNoKGMpfX1yZXR1cm4gdH0sbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGRsW2UudG9Mb3dlckNhc2UoKV19LHVsPWZ1bmN0aW9uKGUpe3JldHVybihPYyhlKT9lOm51bGwpfHxsbChlKXx8b2woZSl8fGNsKGUpfHxzbChlKX0sZGw9e3RyYW5zcGFyZW50OlswLDAsMCwwXSxhbGljZWJsdWU6WzI0MCwyNDgsMjU1XSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1XSxhcXVhOlswLDI1NSwyNTVdLGFxdWFtYXJpbmU6WzEyNywyNTUsMjEyXSxhenVyZTpbMjQwLDI1NSwyNTVdLGJlaWdlOlsyNDUsMjQ1LDIyMF0sYmlzcXVlOlsyNTUsMjI4LDE5Nl0sYmxhY2s6WzAsMCwwXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDVdLGJsdWU6WzAsMCwyNTVdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjZdLGJyb3duOlsxNjUsNDIsNDJdLGJ1cmx5d29vZDpbMjIyLDE4NCwxMzVdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MF0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwXSxjaG9jb2xhdGU6WzIxMCwxMDUsMzBdLGNvcmFsOlsyNTUsMTI3LDgwXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzddLGNvcm5zaWxrOlsyNTUsMjQ4LDIyMF0sY3JpbXNvbjpbMjIwLDIwLDYwXSxjeWFuOlswLDI1NSwyNTVdLGRhcmtibHVlOlswLDAsMTM5XSxkYXJrY3lhbjpbMCwxMzksMTM5XSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExXSxkYXJrZ3JheTpbMTY5LDE2OSwxNjldLGRhcmtncmVlbjpbMCwxMDAsMF0sZGFya2dyZXk6WzE2OSwxNjksMTY5XSxkYXJra2hha2k6WzE4OSwxODMsMTA3XSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5XSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3XSxkYXJrb3JhbmdlOlsyNTUsMTQwLDBdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDRdLGRhcmtyZWQ6WzEzOSwwLDBdLGRhcmtzYWxtb246WzIzMywxNTAsMTIyXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzldLGRhcmtzbGF0ZWdyYXk6WzQ3LDc5LDc5XSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5XSxkYXJrdmlvbGV0OlsxNDgsMCwyMTFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3XSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1XSxkaW1ncmF5OlsxMDUsMTA1LDEwNV0sZGltZ3JleTpbMTA1LDEwNSwxMDVdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTVdLGZpcmVicmljazpbMTc4LDM0LDM0XSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDBdLGZvcmVzdGdyZWVuOlszNCwxMzksMzRdLGZ1Y2hzaWE6WzI1NSwwLDI1NV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMF0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTVdLGdvbGQ6WzI1NSwyMTUsMF0sZ29sZGVucm9kOlsyMTgsMTY1LDMyXSxncmF5OlsxMjgsMTI4LDEyOF0sZ3JleTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10saG9uZXlkZXc6WzI0MCwyNTUsMjQwXSxob3RwaW5rOlsyNTUsMTA1LDE4MF0saW5kaWFucmVkOlsyMDUsOTIsOTJdLGluZGlnbzpbNzUsMCwxMzBdLGl2b3J5OlsyNTUsMjU1LDI0MF0sa2hha2k6WzI0MCwyMzAsMTQwXSxsYXZlbmRlcjpbMjMwLDIzMCwyNTBdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1XSxsYXduZ3JlZW46WzEyNCwyNTIsMF0sbGVtb25jaGlmZm9uOlsyNTUsMjUwLDIwNV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMF0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjhdLGxpZ2h0Y3lhbjpbMjI0LDI1NSwyNTVdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMF0sbGlnaHRncmF5OlsyMTEsMjExLDIxMV0sbGlnaHRncmVlbjpbMTQ0LDIzOCwxNDRdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTNdLGxpZ2h0c2FsbW9uOlsyNTUsMTYwLDEyMl0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MF0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MF0sbGlnaHRzbGF0ZWdyYXk6WzExOSwxMzYsMTUzXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTNdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMl0sbGlnaHR5ZWxsb3c6WzI1NSwyNTUsMjI0XSxsaW1lOlswLDI1NSwwXSxsaW1lZ3JlZW46WzUwLDIwNSw1MF0sbGluZW46WzI1MCwyNDAsMjMwXSxtYWdlbnRhOlsyNTUsMCwyNTVdLG1hcm9vbjpbMTI4LDAsMF0sbWVkaXVtYXF1YW1hcmluZTpbMTAyLDIwNSwxNzBdLG1lZGl1bWJsdWU6WzAsMCwyMDVdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMV0sbWVkaXVtcHVycGxlOlsxNDcsMTEyLDIxOV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTNdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzhdLG1lZGl1bXNwcmluZ2dyZWVuOlswLDI1MCwxNTRdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNF0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzXSxtaWRuaWdodGJsdWU6WzI1LDI1LDExMl0sbWludGNyZWFtOlsyNDUsMjU1LDI1MF0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNV0sbW9jY2FzaW46WzI1NSwyMjgsMTgxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzNdLG5hdnk6WzAsMCwxMjhdLG9sZGxhY2U6WzI1MywyNDUsMjMwXSxvbGl2ZTpbMTI4LDEyOCwwXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzVdLG9yYW5nZTpbMjU1LDE2NSwwXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwXSxvcmNoaWQ6WzIxOCwxMTIsMjE0XSxwYWxlZ29sZGVucm9kOlsyMzgsMjMyLDE3MF0scGFsZWdyZWVuOlsxNTIsMjUxLDE1Ml0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzhdLHBhbGV2aW9sZXRyZWQ6WzIxOSwxMTIsMTQ3XSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxM10scGVhY2hwdWZmOlsyNTUsMjE4LDE4NV0scGVydTpbMjA1LDEzMyw2M10scGluazpbMjU1LDE5MiwyMDNdLHBsdW06WzIyMSwxNjAsMjIxXSxwb3dkZXJibHVlOlsxNzYsMjI0LDIzMF0scHVycGxlOlsxMjgsMCwxMjhdLHJlZDpbMjU1LDAsMF0scm9zeWJyb3duOlsxODgsMTQzLDE0M10scm95YWxibHVlOls2NSwxMDUsMjI1XSxzYWRkbGVicm93bjpbMTM5LDY5LDE5XSxzYWxtb246WzI1MCwxMjgsMTE0XSxzYW5keWJyb3duOlsyNDQsMTY0LDk2XSxzZWFncmVlbjpbNDYsMTM5LDg3XSxzZWFzaGVsbDpbMjU1LDI0NSwyMzhdLHNpZW5uYTpbMTYwLDgyLDQ1XSxzaWx2ZXI6WzE5MiwxOTIsMTkyXSxza3libHVlOlsxMzUsMjA2LDIzNV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1XSxzbGF0ZWdyYXk6WzExMiwxMjgsMTQ0XSxzbGF0ZWdyZXk6WzExMiwxMjgsMTQ0XSxzbm93OlsyNTUsMjUwLDI1MF0sc3ByaW5nZ3JlZW46WzAsMjU1LDEyN10sc3RlZWxibHVlOls3MCwxMzAsMTgwXSx0YW46WzIxMCwxODAsMTQwXSx0ZWFsOlswLDEyOCwxMjhdLHRoaXN0bGU6WzIxNiwxOTEsMjE2XSx0b21hdG86WzI1NSw5OSw3MV0sdHVycXVvaXNlOls2NCwyMjQsMjA4XSx2aW9sZXQ6WzIzOCwxMzAsMjM4XSx3aGVhdDpbMjQ1LDIyMiwxNzldLHdoaXRlOlsyNTUsMjU1LDI1NV0sd2hpdGVzbW9rZTpbMjQ1LDI0NSwyNDVdLHllbGxvdzpbMjU1LDI1NSwwXSx5ZWxsb3dncmVlbjpbMTU0LDIwNSw1MF19LGZsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLm1hcCxuPWUua2V5cyxyPW4ubGVuZ3RoLGk9MDtpPHI7aSsrKXt2YXIgYT1uW2ldO2lmKGtjKGEpKXRocm93IEVycm9yKGBUcmllZCB0byBzZXQgbWFwIHdpdGggb2JqZWN0IGtleWApO2k8bi5sZW5ndGgtMT8odFthXT8/KHRbYV09e30pLHQ9dFthXSk6dFthXT1lLnZhbHVlfX0scGw9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubWFwLG49ZS5rZXlzLHI9bi5sZW5ndGgsaT0wO2k8cjtpKyspe3ZhciBhPW5baV07aWYoa2MoYSkpdGhyb3cgRXJyb3IoYFRyaWVkIHRvIGdldCBtYXAgd2l0aCBvYmplY3Qga2V5YCk7aWYodD10W2FdLHQ9PW51bGwpcmV0dXJuIHR9cmV0dXJuIHR9LG1sPXR5cGVvZiBnbG9iYWxUaGlzPGB1YD9nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8YHVgP3dpbmRvdzp0eXBlb2YgZ2xvYmFsPGB1YD9nbG9iYWw6dHlwZW9mIHNlbGY8YHVgP3NlbGY6e307ZnVuY3Rpb24gaGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsYGRlZmF1bHRgKT9lLmRlZmF1bHQ6ZX12YXIgZ2wsX2w7ZnVuY3Rpb24gdmwoKXtpZihfbClyZXR1cm4gZ2w7X2w9MTtmdW5jdGlvbiBlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBlIT1udWxsJiYodD09YG9iamVjdGB8fHQ9PWBmdW5jdGlvbmApfXJldHVybiBnbD1lLGdsfXZhciB5bCxibDtmdW5jdGlvbiB4bCgpe3JldHVybiBibHx8KGJsPTEseWw9dHlwZW9mIG1sPT1gb2JqZWN0YCYmbWwmJm1sLk9iamVjdD09PU9iamVjdCYmbWwpLHlsfXZhciBTbCxDbDtmdW5jdGlvbiB3bCgpe2lmKENsKXJldHVybiBTbDtDbD0xO3ZhciBlPXhsKCksdD10eXBlb2Ygc2VsZj09YG9iamVjdGAmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO3JldHVybiBTbD1lfHx0fHxGdW5jdGlvbihgcmV0dXJuIHRoaXNgKSgpLFNsfXZhciBUbCxFbDtmdW5jdGlvbiBEbCgpe2lmKEVsKXJldHVybiBUbDtFbD0xO3ZhciBlPXdsKCk7cmV0dXJuIFRsPWZ1bmN0aW9uKCl7cmV0dXJuIGUuRGF0ZS5ub3coKX0sVGx9dmFyIE9sLGtsO2Z1bmN0aW9uIEFsKCl7aWYoa2wpcmV0dXJuIE9sO2tsPTE7dmFyIGU9L1xzLztmdW5jdGlvbiB0KHQpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS0mJmUudGVzdCh0LmNoYXJBdChuKSk7KTtyZXR1cm4gbn1yZXR1cm4gT2w9dCxPbH12YXIgamwsTWw7ZnVuY3Rpb24gTmwoKXtpZihNbClyZXR1cm4gamw7TWw9MTt2YXIgZT1BbCgpLHQ9L15ccysvO2Z1bmN0aW9uIG4obil7cmV0dXJuIG4mJm4uc2xpY2UoMCxlKG4pKzEpLnJlcGxhY2UodCxgYCl9cmV0dXJuIGpsPW4samx9dmFyIFBsLEZsO2Z1bmN0aW9uIElsKCl7cmV0dXJuIEZsfHwoRmw9MSxQbD13bCgpLlN5bWJvbCksUGx9dmFyIExsLFJsO2Z1bmN0aW9uIHpsKCl7aWYoUmwpcmV0dXJuIExsO1JsPTE7dmFyIGU9SWwoKSx0PU9iamVjdC5wcm90b3R5cGUsbj10Lmhhc093blByb3BlcnR5LHI9dC50b1N0cmluZyxpPWU/ZS50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gYShlKXt2YXIgdD1uLmNhbGwoZSxpKSxhPWVbaV07dHJ5e2VbaV09dm9pZCAwO3ZhciBvPSEwfWNhdGNoe312YXIgcz1yLmNhbGwoZSk7cmV0dXJuIG8mJih0P2VbaV09YTpkZWxldGUgZVtpXSksc31yZXR1cm4gTGw9YSxMbH12YXIgQmwsVmw7ZnVuY3Rpb24gSGwoKXtpZihWbClyZXR1cm4gQmw7Vmw9MTt2YXIgZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUuY2FsbCh0KX1yZXR1cm4gQmw9dCxCbH12YXIgVWwsV2w7ZnVuY3Rpb24gR2woKXtpZihXbClyZXR1cm4gVWw7V2w9MTt2YXIgZT1JbCgpLHQ9emwoKSxuPUhsKCkscj1gW29iamVjdCBOdWxsXWAsaT1gW29iamVjdCBVbmRlZmluZWRdYCxhPWU/ZS50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZT09bnVsbD9lPT09dm9pZCAwP2k6cjphJiZhIGluIE9iamVjdChlKT90KGUpOm4oZSl9cmV0dXJuIFVsPW8sVWx9dmFyIEtsLHFsO2Z1bmN0aW9uIEpsKCl7aWYocWwpcmV0dXJuIEtsO3FsPTE7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdHlwZW9mIGU9PWBvYmplY3RgJiYhIWV9cmV0dXJuIEtsPWUsS2x9dmFyIFlsLFhsO2Z1bmN0aW9uIFpsKCl7aWYoWGwpcmV0dXJuIFlsO1hsPTE7dmFyIGU9R2woKSx0PUpsKCksbj1gW29iamVjdCBTeW1ib2xdYDtmdW5jdGlvbiByKHIpe3JldHVybiB0eXBlb2Ygcj09YHN5bWJvbGB8fHQocikmJmUocik9PW59cmV0dXJuIFlsPXIsWWx9dmFyIFFsLCRsO2Z1bmN0aW9uIGV1KCl7aWYoJGwpcmV0dXJuIFFsOyRsPTE7dmFyIGU9TmwoKSx0PXZsKCksbj1abCgpLHI9TmFOLGk9L15bLStdMHhbMC05YS1mXSskL2ksYT0vXjBiWzAxXSskL2ksbz0vXjBvWzAtN10rJC9pLHM9cGFyc2VJbnQ7ZnVuY3Rpb24gYyhjKXtpZih0eXBlb2YgYz09YG51bWJlcmApcmV0dXJuIGM7aWYobihjKSlyZXR1cm4gcjtpZih0KGMpKXt2YXIgbD10eXBlb2YgYy52YWx1ZU9mPT1gZnVuY3Rpb25gP2MudmFsdWVPZigpOmM7Yz10KGwpP2wrYGA6bH1pZih0eXBlb2YgYyE9YHN0cmluZ2ApcmV0dXJuIGM9PT0wP2M6K2M7Yz1lKGMpO3ZhciB1PWEudGVzdChjKTtyZXR1cm4gdXx8by50ZXN0KGMpP3MoYy5zbGljZSgyKSx1PzI6OCk6aS50ZXN0KGMpP3I6K2N9cmV0dXJuIFFsPWMsUWx9dmFyIHR1LG51O2Z1bmN0aW9uIHJ1KCl7aWYobnUpcmV0dXJuIHR1O251PTE7dmFyIGU9dmwoKSx0PURsKCksbj1ldSgpLHI9YEV4cGVjdGVkIGEgZnVuY3Rpb25gLGk9TWF0aC5tYXgsYT1NYXRoLm1pbjtmdW5jdGlvbiBvKG8scyxjKXt2YXIgbCx1LGQsZixwLG0saD0wLGc9ITEsXz0hMSx2PSEwO2lmKHR5cGVvZiBvIT1gZnVuY3Rpb25gKXRocm93IFR5cGVFcnJvcihyKTtzPW4ocyl8fDAsZShjKSYmKGc9ISFjLmxlYWRpbmcsXz1gbWF4V2FpdGBpbiBjLGQ9Xz9pKG4oYy5tYXhXYWl0KXx8MCxzKTpkLHY9YHRyYWlsaW5nYGluIGM/ISFjLnRyYWlsaW5nOnYpO2Z1bmN0aW9uIHkoZSl7dmFyIHQ9bCxuPXU7cmV0dXJuIGw9dT12b2lkIDAsaD1lLGY9by5hcHBseShuLHQpLGZ9ZnVuY3Rpb24gYihlKXtyZXR1cm4gaD1lLHA9c2V0VGltZW91dChDLHMpLGc/eShlKTpmfWZ1bmN0aW9uIHgoZSl7dmFyIHQ9ZS1tLG49ZS1oLHI9cy10O3JldHVybiBfP2EocixkLW4pOnJ9ZnVuY3Rpb24gUyhlKXt2YXIgdD1lLW0sbj1lLWg7cmV0dXJuIG09PT12b2lkIDB8fHQ+PXN8fHQ8MHx8XyYmbj49ZH1mdW5jdGlvbiBDKCl7dmFyIGU9dCgpO2lmKFMoZSkpcmV0dXJuIHcoZSk7cD1zZXRUaW1lb3V0KEMseChlKSl9ZnVuY3Rpb24gdyhlKXtyZXR1cm4gcD12b2lkIDAsdiYmbD95KGUpOihsPXU9dm9pZCAwLGYpfWZ1bmN0aW9uIFQoKXtwIT09dm9pZCAwJiZjbGVhclRpbWVvdXQocCksaD0wLGw9bT11PXA9dm9pZCAwfWZ1bmN0aW9uIEUoKXtyZXR1cm4gcD09PXZvaWQgMD9mOncodCgpKX1mdW5jdGlvbiBEKCl7dmFyIGU9dCgpLG49UyhlKTtpZihsPWFyZ3VtZW50cyx1PXRoaXMsbT1lLG4pe2lmKHA9PT12b2lkIDApcmV0dXJuIGIobSk7aWYoXylyZXR1cm4gY2xlYXJUaW1lb3V0KHApLHA9c2V0VGltZW91dChDLHMpLHkobSl9cmV0dXJuIHA9PT12b2lkIDAmJihwPXNldFRpbWVvdXQoQyxzKSksZn1yZXR1cm4gRC5jYW5jZWw9VCxELmZsdXNoPUUsRH1yZXR1cm4gdHU9byx0dX12YXIgaXU9aGwocnUoKSksYXU9YmM/YmMucGVyZm9ybWFuY2U6bnVsbCxvdT1hdSYmYXUubm93P2Z1bmN0aW9uKCl7cmV0dXJuIGF1Lm5vdygpfTpmdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfSxzdT1mdW5jdGlvbigpe2lmKGJjKXtpZihiYy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpcmV0dXJuIGZ1bmN0aW9uKGUpe2JjLnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX07aWYoYmMubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lKXJldHVybiBmdW5jdGlvbihlKXtiYy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9O2lmKGJjLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oZSl7YmMud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpfTtpZihiYy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSlyZXR1cm4gZnVuY3Rpb24oZSl7YmMubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9fXJldHVybiBmdW5jdGlvbihlKXtlJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShvdSgpKX0sMWUzLzYwKX19KCksY3U9ZnVuY3Rpb24oZSl7cmV0dXJuIHN1KGUpfSxsdT1vdSx1dT05MjYxLGR1PTY1NTk5LGZ1PTUzODEscHU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp1dSxuO249ZS5uZXh0KCksIW4uZG9uZTspdD10KmR1K24udmFsdWV8MDtyZXR1cm4gdH0sbXU9ZnVuY3Rpb24oZSl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp1dSkqZHUrZXwwfSxodT1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZnU7cmV0dXJuKHQ8PDUpK3QrZXwwfSxndT1mdW5jdGlvbihlLHQpe3JldHVybiBlKjIwOTcxNTIrdH0sX3U9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0qMjA5NzE1MitlWzFdfSx2dT1mdW5jdGlvbihlLHQpe3JldHVyblttdShlWzBdLHRbMF0pLGh1KGVbMV0sdFsxXSldfSx5dT1mdW5jdGlvbihlLHQpe3ZhciBuPXt2YWx1ZTowLGRvbmU6ITF9LHI9MCxpPWUubGVuZ3RoO3JldHVybiBwdSh7bmV4dDpmdW5jdGlvbigpe3JldHVybiByPGk/bi52YWx1ZT1lW3IrK106bi5kb25lPSEwLG59fSx0KX0sYnU9ZnVuY3Rpb24oZSx0KXt2YXIgbj17dmFsdWU6MCxkb25lOiExfSxyPTAsaT1lLmxlbmd0aDtyZXR1cm4gcHUoe25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gcjxpP24udmFsdWU9ZS5jaGFyQ29kZUF0KHIrKyk6bi5kb25lPSEwLG59fSx0KX0seHU9ZnVuY3Rpb24oKXtyZXR1cm4gU3UoYXJndW1lbnRzKX0sU3U9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTt0PW49PT0wP2J1KHIpOmJ1KHIsdCl9cmV0dXJuIHR9O2Z1bmN0aW9uIEN1KGUsdCxuLHIsaSl7dmFyIGE9aSpNYXRoLlBJLzE4MDtyZXR1cm57eDpNYXRoLmNvcyhhKSooZS1uKS1NYXRoLnNpbihhKSoodC1yKStuLHk6TWF0aC5zaW4oYSkqKGUtbikrTWF0aC5jb3MoYSkqKHQtcikrcn19dmFyIHd1PWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXtyZXR1cm57eDooZS1uKSppK24seToodC1yKSphK3J9fTtmdW5jdGlvbiBUdShlLHQsbil7aWYobj09PTApcmV0dXJuIGU7dmFyIHI9KHQueDErdC54MikvMixpPSh0LnkxK3QueTIpLzIsYT10LncvdC5oLG89MS9hLHM9Q3UoZS54LGUueSxyLGksbiksYz13dShzLngscy55LHIsaSxhLG8pO3JldHVybnt4OmMueCx5OmMueX19dmFyIEV1PSEwLER1PWNvbnNvbGUud2FybiE9bnVsbCxPdT1jb25zb2xlLnRyYWNlIT1udWxsLGt1PTIqKjUzLTF8fDkwMDcxOTkyNTQ3NDA5OTEsQXU9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sanU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sTXU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sTnU9ZnVuY3Rpb24oKXt9LFB1PWZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKGUpfSxGdT1mdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKUV1PSEhZTtlbHNlIHJldHVybiBFdX0sSXU9ZnVuY3Rpb24oZSl7RnUoKSYmKER1P2NvbnNvbGUud2FybihlKTooY29uc29sZS5sb2coZSksT3UmJmNvbnNvbGUudHJhY2UoKSkpfSxMdT1mdW5jdGlvbihlKXtyZXR1cm4gYWwoe30sZSl9LFJ1PWZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP2U6T2MoZSk/ZS5zbGljZSgpOmtjKGUpP0x1KGUpOmV9LHp1PWZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9LEJ1PWZ1bmN0aW9uKGUsdCl7Zm9yKHQ9ZT1gYDtlKys8MzY7dCs9ZSo1MSY1Mj8oZV4xNT84Xk1hdGgucmFuZG9tKCkqKGVeMjA/MTY6NCk6NCkudG9TdHJpbmcoMTYpOmAtYCk7cmV0dXJuIHR9LFZ1PXt9LEh1PWZ1bmN0aW9uKCl7cmV0dXJuIFZ1fSxVdT1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3Qua2V5cyhlKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKHZhciByPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXSxvPW4/LlthXTtyW2FdPW89PT12b2lkIDA/ZVthXTpvfXJldHVybiByfX0sV3U9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1lLmxlbmd0aC0xO3I+PTA7ci0tKWVbcl09PT10JiZlLnNwbGljZShyLDEpfSxHdT1mdW5jdGlvbihlKXtlLnNwbGljZSgwLGUubGVuZ3RoKX0sS3U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtlLnB1c2gocil9fSxxdT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG4mJih0PXFjKG4sdCkpLGVbdF19LEp1PWZ1bmN0aW9uKGUsdCxuLHIpe24mJih0PXFjKG4sdCkpLGVbdF09cn0sWXU9dHlwZW9mIE1hcDxgdWA/TWFwOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2FjKHRoaXMsZSksdGhpcy5fb2JqPXt9fXJldHVybiBzYyhlLFt7a2V5OmBzZXRgLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX29ialtlXT10LHRoaXN9fSx7a2V5OmBkZWxldGVgLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vYmpbZV09dm9pZCAwLHRoaXN9fSx7a2V5OmBjbGVhcmAsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9e319fSx7a2V5OmBoYXNgLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vYmpbZV0hPT12b2lkIDB9fSx7a2V5OmBnZXRgLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vYmpbZV19fV0pfSgpLFh1PWB1bmRlZmluZWRgLFp1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZihhYyh0aGlzLGUpLHRoaXMuX29iaj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc2l6ZT0wLHQhPW51bGwpZm9yKHZhciBuPXQuaW5zdGFuY2VTdHJpbmchPW51bGwmJnQuaW5zdGFuY2VTdHJpbmcoKT09PXRoaXMuaW5zdGFuY2VTdHJpbmcoKT90LnRvQXJyYXkoKTp0LHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzLmFkZChuW3JdKX1yZXR1cm4gc2MoZSxbe2tleTpgaW5zdGFuY2VTdHJpbmdgLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuYHNldGB9fSx7a2V5OmBhZGRgLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX29iajt0W2VdIT09MSYmKHRbZV09MSx0aGlzLnNpemUrKyl9fSx7a2V5OmBkZWxldGVgLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX29iajt0W2VdPT09MSYmKHRbZV09MCx0aGlzLnNpemUtLSl9fSx7a2V5OmBjbGVhcmAsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmo9T2JqZWN0LmNyZWF0ZShudWxsKX19LHtrZXk6YGhhc2AsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX29ialtlXT09PTF9fSx7a2V5OmB0b0FycmF5YCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX29iaikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBlLmhhcyh0KX0pfX0se2tleTpgZm9yRWFjaGAsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50b0FycmF5KCkuZm9yRWFjaChlLHQpfX1dKX0oKSxRdT0odHlwZW9mIFNldD5gdWA/YHVuZGVmaW5lZGA6dmMoU2V0KSk9PT1YdT9adTpTZXQsJHU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITA7aWYoZT09PXZvaWQgMHx8dD09PXZvaWQgMHx8IUljKGUpKVB1KGBBbiBlbGVtZW50IG11c3QgaGF2ZSBhIGNvcmUgcmVmZXJlbmNlIGFuZCBwYXJhbWV0ZXJzIHNldGApO2Vsc2V7dmFyIHI9dC5ncm91cDtpZihyPz89dC5kYXRhJiZ0LmRhdGEuc291cmNlIT1udWxsJiZ0LmRhdGEudGFyZ2V0IT1udWxsP2BlZGdlc2A6YG5vZGVzYCxyIT09YG5vZGVzYCYmciE9PWBlZGdlc2ApUHUoIkFuIGVsZW1lbnQgbXVzdCBiZSBvZiB0eXBlIGBub2Rlc2Agb3IgYGVkZ2VzYDsgeW91IHNwZWNpZmllZCBgIityKyJgIik7ZWxzZXt0aGlzLmxlbmd0aD0xLHRoaXNbMF09dGhpczt2YXIgaT10aGlzLl9wcml2YXRlPXtjeTplLHNpbmdsZTohMCxkYXRhOnQuZGF0YXx8e30scG9zaXRpb246dC5wb3NpdGlvbnx8e3g6MCx5OjB9LGF1dG9XaWR0aDp2b2lkIDAsYXV0b0hlaWdodDp2b2lkIDAsYXV0b1BhZGRpbmc6dm9pZCAwLGNvbXBvdW5kQm91bmRzQ2xlYW46ITEsbGlzdGVuZXJzOltdLGdyb3VwOnIsc3R5bGU6e30scnN0eWxlOnt9LHN0eWxlQ3h0czpbXSxzdHlsZUtleXM6e30scmVtb3ZlZDohMCxzZWxlY3RlZDohIXQuc2VsZWN0ZWQsc2VsZWN0YWJsZTp0LnNlbGVjdGFibGU9PT12b2lkIDB8fCEhdC5zZWxlY3RhYmxlLGxvY2tlZDohIXQubG9ja2VkLGdyYWJiZWQ6ITEsZ3JhYmJhYmxlOnQuZ3JhYmJhYmxlPT09dm9pZCAwfHwhIXQuZ3JhYmJhYmxlLHBhbm5hYmxlOnQucGFubmFibGU9PT12b2lkIDA/cj09PWBlZGdlc2A6ISF0LnBhbm5hYmxlLGFjdGl2ZTohMSxjbGFzc2VzOm5ldyBRdSxhbmltYXRpb246e2N1cnJlbnQ6W10scXVldWU6W119LHJzY3JhdGNoOnt9LHNjcmF0Y2g6dC5zY3JhdGNofHx7fSxlZGdlczpbXSxjaGlsZHJlbjpbXSxwYXJlbnQ6dC5wYXJlbnQmJnQucGFyZW50LmlzTm9kZSgpP3QucGFyZW50Om51bGwsdHJhdmVyc2FsQ2FjaGU6e30sYmFja2dyb3VuZGluZzohMSxiYkNhY2hlOm51bGwsYmJDYWNoZVNoaWZ0Ont4OjAseTowfSxib2R5Qm91bmRzOm51bGwsb3ZlcmxheUJvdW5kczpudWxsLGxhYmVsQm91bmRzOnthbGw6bnVsbCxzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCxtYWluOm51bGx9LGFycm93Qm91bmRzOntzb3VyY2U6bnVsbCx0YXJnZXQ6bnVsbCwibWlkLXNvdXJjZSI6bnVsbCwibWlkLXRhcmdldCI6bnVsbH19O2lmKGkucG9zaXRpb24ueD8/KGkucG9zaXRpb24ueD0wKSxpLnBvc2l0aW9uLnk/PyhpLnBvc2l0aW9uLnk9MCksdC5yZW5kZXJlZFBvc2l0aW9uKXt2YXIgYT10LnJlbmRlcmVkUG9zaXRpb24sbz1lLnBhbigpLHM9ZS56b29tKCk7aS5wb3NpdGlvbj17eDooYS54LW8ueCkvcyx5OihhLnktby55KS9zfX12YXIgYz1bXTtPYyh0LmNsYXNzZXMpP2M9dC5jbGFzc2VzOloodC5jbGFzc2VzKSYmKGM9dC5jbGFzc2VzLnNwbGl0KC9ccysvKSk7Zm9yKHZhciBsPTAsdT1jLmxlbmd0aDtsPHU7bCsrKXt2YXIgZD1jW2xdO2QmJmQhPT1gYCYmaS5jbGFzc2VzLmFkZChkKX10aGlzLmNyZWF0ZUVtaXR0ZXIoKSwobj09PXZvaWQgMHx8bikmJnRoaXMucmVzdG9yZSgpO3ZhciBmPXQuc3R5bGV8fHQuY3NzO2YmJihJdSgiU2V0dGluZyBhIGBzdHlsZWAgYnlwYXNzIGF0IGVsZW1lbnQgY3JlYXRpb24gc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5LiAgVHJ5IHRvIHVzZSB0aGUgc3R5bGVzaGVldCBpbnN0ZWFkLiIpLHRoaXMuc3R5bGUoZikpfX19LGVkPWZ1bmN0aW9uKGUpe3JldHVybiBlPXtiZnM6ZS5iZnN8fCFlLmRmcyxkZnM6ZS5kZnN8fCFlLmJmc30sZnVuY3Rpb24odCxuLHIpe3ZhciBpO2tjKHQpJiYhTmModCkmJihpPXQsdD1pLnJvb3RzfHxpLnJvb3Qsbj1pLnZpc2l0LHI9aS5kaXJlY3RlZCkscj1hcmd1bWVudHMubGVuZ3RoPT09MiYmIURjKG4pP246cixuPURjKG4pP246ZnVuY3Rpb24oKXt9O2Zvcih2YXIgYT10aGlzLl9wcml2YXRlLmN5LG89dD1aKHQpP3RoaXMuZmlsdGVyKHQpOnQscz1bXSxjPVtdLGw9e30sdT17fSxkPXt9LGY9MCxwLG09dGhpcy5ieUdyb3VwKCksaD1tLm5vZGVzLGc9bS5lZGdlcyxfPTA7XzxvLmxlbmd0aDtfKyspe3ZhciB2PW9bX10seT12LmlkKCk7di5pc05vZGUoKSYmKHMudW5zaGlmdCh2KSxlLmJmcyYmKGRbeV09ITAsYy5wdXNoKHYpKSx1W3ldPTApfWZvcih2YXIgYj1mdW5jdGlvbigpe3ZhciB0PWUuYmZzP3Muc2hpZnQoKTpzLnBvcCgpLGk9dC5pZCgpO2lmKGUuZGZzKXtpZihkW2ldKXJldHVybiAwO2RbaV09ITAsYy5wdXNoKHQpfXZhciBhPXVbaV0sbz1sW2ldLG09bz09bnVsbD9udWxsOm8uc291cmNlKCksXz1vPT1udWxsP251bGw6by50YXJnZXQoKSx2PW89PW51bGw/dm9pZCAwOnQuc2FtZShtKT9fWzBdOm1bMF0seT1uKHQsbyx2LGYrKyxhKTtpZih5PT09ITApcmV0dXJuIHA9dCwxO2lmKHk9PT0hMSlyZXR1cm4gMTtmb3IodmFyIGI9dC5jb25uZWN0ZWRFZGdlcygpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4oIXJ8fGUuc291cmNlKCkuc2FtZSh0KSkmJmcuaGFzKGUpfSkseD0wO3g8Yi5sZW5ndGg7eCsrKXt2YXIgUz1iW3hdLEM9Uy5jb25uZWN0ZWROb2RlcygpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hZS5zYW1lKHQpJiZoLmhhcyhlKX0pLHc9Qy5pZCgpO0MubGVuZ3RoIT09MCYmIWRbd10mJihDPUNbMF0scy5wdXNoKEMpLGUuYmZzJiYoZFt3XT0hMCxjLnB1c2goQykpLGxbd109Uyx1W3ddPXVbaV0rMSl9fSx4O3MubGVuZ3RoIT09MCYmKHg9YigpLHg9PT0wfHx4IT09MSk7KTtmb3IodmFyIFM9YS5jb2xsZWN0aW9uKCksQz0wO0M8Yy5sZW5ndGg7QysrKXt2YXIgdz1jW0NdLFQ9bFt3LmlkKCldO1QhPW51bGwmJlMucHVzaChUKSxTLnB1c2godyl9cmV0dXJue3BhdGg6YS5jb2xsZWN0aW9uKFMpLGZvdW5kOmEuY29sbGVjdGlvbihwKX19fSx0ZD17YnJlYWR0aEZpcnN0U2VhcmNoOmVkKHtiZnM6ITB9KSxkZXB0aEZpcnN0U2VhcmNoOmVkKHtkZnM6ITB9KX07dGQuYmZzPXRkLmJyZWFkdGhGaXJzdFNlYXJjaCx0ZC5kZnM9dGQuZGVwdGhGaXJzdFNlYXJjaDt2YXIgbmQ9e2V4cG9ydHM6e319LHJkPW5kLmV4cG9ydHMsaWQ7ZnVuY3Rpb24gYWQoKXtyZXR1cm4gaWR8fChpZD0xLChmdW5jdGlvbihlLHQpeyhmdW5jdGlvbigpe3ZhciB0LG4scj1NYXRoLmZsb29yLGksYSxvLHMsYyxsLHU9TWF0aC5taW4sZCxmLHAsbSxoO249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTx0Py0xOisoZT50KX0sbD1mdW5jdGlvbihlLHQsaSxhLG8pe3ZhciBzO2lmKGk/Pz0wLG8/Pz1uLGk8MCl0aHJvdyBFcnJvcihgbG8gbXVzdCBiZSBub24tbmVnYXRpdmVgKTtmb3IoYT8/PWUubGVuZ3RoO2k8YTspcz1yKChpK2EpLzIpLG8odCxlW3NdKTwwP2E9czppPXMrMTtyZXR1cm5bXS5zcGxpY2UuYXBwbHkoZSxbaSxpLWldLmNvbmNhdCh0KSksdH0sbz1mdW5jdGlvbihlLHQscil7cmV0dXJuIHI/Pz1uLGUucHVzaCh0KSxtKGUsMCxlLmxlbmd0aC0xLHIpfSxhPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaTtyZXR1cm4gdD8/PW4scj1lLnBvcCgpLGUubGVuZ3RoPyhpPWVbMF0sZVswXT1yLGgoZSwwLHQpKTppPXIsaX0sYz1mdW5jdGlvbihlLHQscil7dmFyIGk7cmV0dXJuIHI/Pz1uLGk9ZVswXSxlWzBdPXQsaChlLDAsciksaX0scz1mdW5jdGlvbihlLHQscil7dmFyIGk7cmV0dXJuIHI/Pz1uLGUubGVuZ3RoJiZyKGVbMF0sdCk8MCYmKGk9W2VbMF0sdF0sdD1pWzBdLGVbMF09aVsxXSxoKGUsMCxyKSksdH0saT1mdW5jdGlvbihlLHQpe3ZhciBpLGEsbyxzLGMsbDtmb3IodD8/PW4scz0oZnVuY3Rpb24oKXtsPVtdO2Zvcih2YXIgdD0wLG49cihlLmxlbmd0aC8yKTswPD1uP3Q8bjp0Pm47MDw9bj90Kys6dC0tKWwucHVzaCh0KTtyZXR1cm4gbH0pLmFwcGx5KHRoaXMpLnJldmVyc2UoKSxjPVtdLGE9MCxvPXMubGVuZ3RoO2E8bzthKyspaT1zW2FdLGMucHVzaChoKGUsaSx0KSk7cmV0dXJuIGN9LHA9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpO2lmKHI/Pz1uLGk9ZS5pbmRleE9mKHQpLGkhPT0tMSlyZXR1cm4gbShlLDAsaSxyKSxoKGUsaSxyKX0sZD1mdW5jdGlvbihlLHQscil7dmFyIGEsbyxjLGwsdTtpZihyPz89bixvPWUuc2xpY2UoMCx0KSwhby5sZW5ndGgpcmV0dXJuIG87Zm9yKGkobyxyKSx1PWUuc2xpY2UodCksYz0wLGw9dS5sZW5ndGg7YzxsO2MrKylhPXVbY10scyhvLGEscik7cmV0dXJuIG8uc29ydChyKS5yZXZlcnNlKCl9LGY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBvLHMsYyxkLGYscCxtLGgsZztpZihyPz89bix0KjEwPD1lLmxlbmd0aCl7aWYoYz1lLnNsaWNlKDAsdCkuc29ydChyKSwhYy5sZW5ndGgpcmV0dXJuIGM7Zm9yKHM9Y1tjLmxlbmd0aC0xXSxtPWUuc2xpY2UodCksZD0wLHA9bS5sZW5ndGg7ZDxwO2QrKylvPW1bZF0scihvLHMpPDAmJihsKGMsbywwLG51bGwsciksYy5wb3AoKSxzPWNbYy5sZW5ndGgtMV0pO3JldHVybiBjfWZvcihpKGUsciksZz1bXSxmPTAsaD11KHQsZS5sZW5ndGgpOzA8PWg/ZjxoOmY+aDswPD1oPysrZjotLWYpZy5wdXNoKGEoZSxyKSk7cmV0dXJuIGd9LG09ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIGEsbyxzO2ZvcihpPz89bixhPWVbcl07cj50JiYocz1yLTE+PjEsbz1lW3NdLGkoYSxvKTwwKTspZVtyXT1vLHI9cztyZXR1cm4gZVtyXT1hfSxoPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxhLG8scyxjO2ZvcihyPz89bixhPWUubGVuZ3RoLGM9dCxvPWVbdF0saT0yKnQrMTtpPGE7KXM9aSsxLHM8YSYmIShyKGVbaV0sZVtzXSk8MCkmJihpPXMpLGVbdF09ZVtpXSx0PWksaT0yKnQrMTtyZXR1cm4gZVt0XT1vLG0oZSxjLHQscil9LHQ9KGZ1bmN0aW9uKCl7ZS5wdXNoPW8sZS5wb3A9YSxlLnJlcGxhY2U9YyxlLnB1c2hwb3A9cyxlLmhlYXBpZnk9aSxlLnVwZGF0ZUl0ZW09cCxlLm5sYXJnZXN0PWQsZS5uc21hbGxlc3Q9ZjtmdW5jdGlvbiBlKGUpe3RoaXMuY21wPWU/P24sdGhpcy5ub2Rlcz1bXX1yZXR1cm4gZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlKXtyZXR1cm4gbyh0aGlzLm5vZGVzLGUsdGhpcy5jbXApfSxlLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLm5vZGVzLHRoaXMuY21wKX0sZS5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzWzBdfSxlLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ub2Rlcy5pbmRleE9mKGUpIT09LTF9LGUucHJvdG90eXBlLnJlcGxhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGModGhpcy5ub2RlcyxlLHRoaXMuY21wKX0sZS5wcm90b3R5cGUucHVzaHBvcD1mdW5jdGlvbihlKXtyZXR1cm4gcyh0aGlzLm5vZGVzLGUsdGhpcy5jbXApfSxlLnByb3RvdHlwZS5oZWFwaWZ5PWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5ub2Rlcyx0aGlzLmNtcCl9LGUucHJvdG90eXBlLnVwZGF0ZUl0ZW09ZnVuY3Rpb24oZSl7cmV0dXJuIHAodGhpcy5ub2RlcyxlLHRoaXMuY21wKX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcz1bXX0sZS5wcm90b3R5cGUuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGg9PT0wfSxlLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXMubGVuZ3RofSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBlO3JldHVybiB0Lm5vZGVzPXRoaXMubm9kZXMuc2xpY2UoMCksdH0sZS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVzLnNsaWNlKDApfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZS5wcm90b3R5cGUucHVzaCxlLnByb3RvdHlwZS50b3A9ZS5wcm90b3R5cGUucGVlayxlLnByb3RvdHlwZS5mcm9udD1lLnByb3RvdHlwZS5wZWVrLGUucHJvdG90eXBlLmhhcz1lLnByb3RvdHlwZS5jb250YWlucyxlLnByb3RvdHlwZS5jb3B5PWUucHJvdG90eXBlLmNsb25lLGV9KSgpLChmdW5jdGlvbih0LG4pe3JldHVybiBlLmV4cG9ydHM9bigpfSkodGhpcyxmdW5jdGlvbigpe3JldHVybiB0fSl9KS5jYWxsKHJkKX0pKG5kKSksbmQuZXhwb3J0c312YXIgb2Qsc2Q7ZnVuY3Rpb24gY2QoKXtyZXR1cm4gc2R8fChzZD0xLG9kPWFkKCkpLG9kfXZhciBsZD1obChjZCgpKSx1ZD1VdSh7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITF9KSxkZD17ZGlqa3N0cmE6ZnVuY3Rpb24oZSl7aWYoIWtjKGUpKXt2YXIgdD1hcmd1bWVudHM7ZT17cm9vdDp0WzBdLHdlaWdodDp0WzFdLGRpcmVjdGVkOnRbMl19fXZhciBuPXVkKGUpLHI9bi5yb290LGk9bi53ZWlnaHQsYT1uLmRpcmVjdGVkLG89dGhpcyxzPWksYz1aKHIpP3RoaXMuZmlsdGVyKHIpWzBdOnJbMF0sbD17fSx1PXt9LGQ9e30sZj10aGlzLmJ5R3JvdXAoKSxwPWYubm9kZXMsbT1mLmVkZ2VzO20udW5tZXJnZUJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTG9vcCgpfSk7Zm9yKHZhciBoPWZ1bmN0aW9uKGUpe3JldHVybiBsW2UuaWQoKV19LGc9ZnVuY3Rpb24oZSx0KXtsW2UuaWQoKV09dCxfLnVwZGF0ZUl0ZW0oZSl9LF89bmV3IGxkKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGgoZSktaCh0KX0pLHY9MDt2PHAubGVuZ3RoO3YrKyl7dmFyIHk9cFt2XTtsW3kuaWQoKV09eS5zYW1lKGMpPzA6MS8wLF8ucHVzaCh5KX1mb3IodmFyIGI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49KGE/ZS5lZGdlc1RvKHQpOmUuZWRnZXNXaXRoKHQpKS5pbnRlcnNlY3QobSkscj0xLzAsaSxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBjPW5bb10sbD1zKGMpOyhsPHJ8fCFpKSYmKHI9bCxpPWMpfXJldHVybntlZGdlOmksZGlzdDpyfX07Xy5zaXplKCk+MDspe3ZhciB4PV8ucG9wKCksUz1oKHgpLEM9eC5pZCgpO2lmKGRbQ109UyxTIT09MS8wKWZvcih2YXIgdz14Lm5laWdoYm9yaG9vZCgpLmludGVyc2VjdChwKSxUPTA7VDx3Lmxlbmd0aDtUKyspe3ZhciBFPXdbVF0sRD1FLmlkKCksTz1iKHgsRSksaz1TK08uZGlzdDtrPGgoRSkmJihnKEUsayksdVtEXT17bm9kZTp4LGVkZ2U6Ty5lZGdlfSl9fXJldHVybntkaXN0YW5jZVRvOmZ1bmN0aW9uKGUpe3JldHVybiBkWyhaKGUpP3AuZmlsdGVyKGUpWzBdOmVbMF0pLmlkKCldfSxwYXRoVG86ZnVuY3Rpb24oZSl7dmFyIHQ9WihlKT9wLmZpbHRlcihlKVswXTplWzBdLG49W10scj10LGk9ci5pZCgpO2lmKHQubGVuZ3RoPjApZm9yKG4udW5zaGlmdCh0KTt1W2ldOyl7dmFyIGE9dVtpXTtuLnVuc2hpZnQoYS5lZGdlKSxuLnVuc2hpZnQoYS5ub2RlKSxyPWEubm9kZSxpPXIuaWQoKX1yZXR1cm4gby5zcGF3bihuKX19fX0sZmQ9e2tydXNrYWw6ZnVuY3Rpb24oZSl7ZXx8PWZ1bmN0aW9uKGUpe3JldHVybiAxfTtmb3IodmFyIHQ9dGhpcy5ieUdyb3VwKCksbj10Lm5vZGVzLHI9dC5lZGdlcyxpPW4ubGVuZ3RoLGE9QXJyYXkoaSksbz1uLHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxhLmxlbmd0aDt0KyspaWYoYVt0XS5oYXMoZSkpcmV0dXJuIHR9LGM9MDtjPGk7YysrKWFbY109dGhpcy5zcGF3bihuW2NdKTtmb3IodmFyIGw9ci5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodCktZShuKX0pLHU9MDt1PGwubGVuZ3RoO3UrKyl7dmFyIGQ9bFt1XSxmPWQuc291cmNlKClbMF0scD1kLnRhcmdldCgpWzBdLG09cyhmKSxoPXMocCksZz1hW21dLF89YVtoXTttIT09aCYmKG8ubWVyZ2UoZCksZy5tZXJnZShfKSxhLnNwbGljZShoLDEpKX1yZXR1cm4gb319LHBkPVV1KHtyb290Om51bGwsZ29hbDpudWxsLHdlaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gMX0saGV1cmlzdGljOmZ1bmN0aW9uKGUpe3JldHVybiAwfSxkaXJlY3RlZDohMX0pLG1kPXthU3RhcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmN5KCksbj1wZChlKSxyPW4ucm9vdCxpPW4uZ29hbCxhPW4uaGV1cmlzdGljLG89bi5kaXJlY3RlZCxzPW4ud2VpZ2h0O3I9dC5jb2xsZWN0aW9uKHIpWzBdLGk9dC5jb2xsZWN0aW9uKGkpWzBdO3ZhciBjPXIuaWQoKSxsPWkuaWQoKSx1PXt9LGQ9e30sZj17fSxwPW5ldyBsZChmdW5jdGlvbihlLHQpe3JldHVybiBkW2UuaWQoKV0tZFt0LmlkKCldfSksbT1uZXcgUXUsaD17fSxnPXt9LF89ZnVuY3Rpb24oZSx0KXtwLnB1c2goZSksbS5hZGQodCl9LHYseSxiPWZ1bmN0aW9uKCl7dj1wLnBvcCgpLHk9di5pZCgpLG0uZGVsZXRlKHkpfSx4PWZ1bmN0aW9uKGUpe3JldHVybiBtLmhhcyhlKX07XyhyLGMpLHVbY109MCxkW2NdPWEocik7Zm9yKHZhciBTPTA7cC5zaXplKCk+MDspe2lmKGIoKSxTKysseT09PWwpe2Zvcih2YXIgQz1bXSx3PWksVD1sLEU9Z1tUXTtDLnVuc2hpZnQodyksRSE9bnVsbCYmQy51bnNoaWZ0KEUpLHc9aFtUXSx3IT1udWxsOylUPXcuaWQoKSxFPWdbVF07cmV0dXJue2ZvdW5kOiEwLGRpc3RhbmNlOnVbeV0scGF0aDp0aGlzLnNwYXduKEMpLHN0ZXBzOlN9fWZbeV09ITA7Zm9yKHZhciBEPXYuX3ByaXZhdGUuZWRnZXMsTz0wO088RC5sZW5ndGg7TysrKXt2YXIgaz1EW09dO2lmKHRoaXMuaGFzRWxlbWVudFdpdGhJZChrLmlkKCkpJiYhKG8mJmsuZGF0YShgc291cmNlYCkhPT15KSl7dmFyIEE9ay5zb3VyY2UoKSxqPWsudGFyZ2V0KCksTT1BLmlkKCk9PT15P2o6QSxOPU0uaWQoKTtpZih0aGlzLmhhc0VsZW1lbnRXaXRoSWQoTikmJiFmW05dKXt2YXIgUD11W3ldK3Moayk7eChOKT9QPHVbTl0mJih1W05dPVAsZFtOXT1QK2EoTSkscC51cGRhdGVJdGVtKE0pLGhbTl09dixnW05dPWspOih1W05dPVAsZFtOXT1QK2EoTSksXyhNLE4pLGhbTl09dixnW05dPWspfX19fXJldHVybntmb3VuZDohMSxkaXN0YW5jZTp2b2lkIDAscGF0aDp2b2lkIDAsc3RlcHM6U319fSxoZD1VdSh7d2VpZ2h0OmZ1bmN0aW9uKGUpe3JldHVybiAxfSxkaXJlY3RlZDohMX0pLGdkPXtmbG95ZFdhcnNoYWxsOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmN5KCksbj1oZChlKSxyPW4ud2VpZ2h0LGk9bi5kaXJlY3RlZCxhPXIsbz10aGlzLmJ5R3JvdXAoKSxzPW8ubm9kZXMsYz1vLmVkZ2VzLGw9cy5sZW5ndGgsdT1sKmwsZD1mdW5jdGlvbihlKXtyZXR1cm4gcy5pbmRleE9mKGUpfSxmPWZ1bmN0aW9uKGUpe3JldHVybiBzW2VdfSxwPUFycmF5KHUpLG09MDttPHU7bSsrKXt2YXIgaD1tJWw7KG0taCkvbD09PWg/cFttXT0wOnBbbV09MS8wfWZvcih2YXIgZz1BcnJheSh1KSxfPUFycmF5KHUpLHY9MDt2PGMubGVuZ3RoO3YrKyl7dmFyIHk9Y1t2XSxiPXkuc291cmNlKClbMF0seD15LnRhcmdldCgpWzBdO2lmKGIhPT14KXt2YXIgUz1kKGIpLEM9ZCh4KSx3PVMqbCtDLFQ9YSh5KTtpZihwW3ddPlQmJihwW3ddPVQsZ1t3XT1DLF9bd109eSksIWkpe3ZhciBFPUMqbCtTOyFpJiZwW0VdPlQmJihwW0VdPVQsZ1tFXT1TLF9bRV09eSl9fX1mb3IodmFyIEQ9MDtEPGw7RCsrKWZvcih2YXIgTz0wO088bDtPKyspZm9yKHZhciBrPU8qbCtELEE9MDtBPGw7QSsrKXt2YXIgaj1PKmwrQSxNPUQqbCtBO3Bba10rcFtNXTxwW2pdJiYocFtqXT1wW2tdK3BbTV0sZ1tqXT1nW2tdKX12YXIgTj1mdW5jdGlvbihlKXtyZXR1cm4oWihlKT90LmZpbHRlcihlKTplKVswXX0sUD1mdW5jdGlvbihlKXtyZXR1cm4gZChOKGUpKX07cmV0dXJue2Rpc3RhbmNlOmZ1bmN0aW9uKGUsdCl7dmFyIG49UChlKSxyPVAodCk7cmV0dXJuIHBbbipsK3JdfSxwYXRoOmZ1bmN0aW9uKGUsbil7dmFyIHI9UChlKSxpPVAobiksYT1mKHIpO2lmKHI9PT1pKXJldHVybiBhLmNvbGxlY3Rpb24oKTtpZihnW3IqbCtpXT09bnVsbClyZXR1cm4gdC5jb2xsZWN0aW9uKCk7dmFyIG89dC5jb2xsZWN0aW9uKCkscz1yLGM7Zm9yKG8ubWVyZ2UoYSk7ciE9PWk7KXM9cixyPWdbcipsK2ldLGM9X1tzKmwrcl0sby5tZXJnZShjKSxvLm1lcmdlKGYocikpO3JldHVybiBvfX19fSxfZD1VdSh7d2VpZ2h0OmZ1bmN0aW9uKGUpe3JldHVybiAxfSxkaXJlY3RlZDohMSxyb290Om51bGx9KSx2ZD17YmVsbG1hbkZvcmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPV9kKGUpLHI9bi53ZWlnaHQsaT1uLmRpcmVjdGVkLGE9bi5yb290LG89cixzPXRoaXMsYz10aGlzLmN5KCksbD10aGlzLmJ5R3JvdXAoKSx1PWwuZWRnZXMsZD1sLm5vZGVzLGY9ZC5sZW5ndGgscD1uZXcgWXUsbT0hMSxoPVtdO2E9Yy5jb2xsZWN0aW9uKGEpWzBdLHUudW5tZXJnZUJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTG9vcCgpfSk7Zm9yKHZhciBnPXUubGVuZ3RoLF89ZnVuY3Rpb24oZSl7dmFyIHQ9cC5nZXQoZS5pZCgpKTtyZXR1cm4gdHx8KHQ9e30scC5zZXQoZS5pZCgpLHQpKSx0fSx2PWZ1bmN0aW9uKGUpe3JldHVybihaKGUpP2MuJChlKTplKVswXX0seT1mdW5jdGlvbihlKXtyZXR1cm4gXyh2KGUpKS5kaXN0fSxiPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06YSxyPXYoZSksaT1bXSxvPXI7Oyl7aWYobz09bnVsbClyZXR1cm4gdC5zcGF3bigpO3ZhciBjPV8obyksbD1jLmVkZ2UsdT1jLnByZWQ7aWYoaS51bnNoaWZ0KG9bMF0pLG8uc2FtZShuKSYmaS5sZW5ndGg+MClicmVhaztsIT1udWxsJiZpLnVuc2hpZnQobCksbz11fXJldHVybiBzLnNwYXduKGkpfSx4PTA7eDxmO3grKyl7dmFyIFM9ZFt4XSxDPV8oUyk7Qy5kaXN0PVMuc2FtZShhKT8wOjEvMCxDLnByZWQ9bnVsbCxDLmVkZ2U9bnVsbH1mb3IodmFyIHc9ITEsVD1mdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIG89ci5kaXN0K2E7bzxpLmRpc3QmJiFuLnNhbWUoci5lZGdlKSYmKGkuZGlzdD1vLGkucHJlZD1lLGkuZWRnZT1uLHc9ITApfSxFPTE7RTxmO0UrKyl7dz0hMTtmb3IodmFyIEQ9MDtEPGc7RCsrKXt2YXIgTz11W0RdLGs9Ty5zb3VyY2UoKSxBPU8udGFyZ2V0KCksaj1vKE8pLE09XyhrKSxOPV8oQSk7VChrLEEsTyxNLE4saiksaXx8VChBLGssTyxOLE0sail9aWYoIXcpYnJlYWt9aWYodylmb3IodmFyIFA9W10sRj0wO0Y8ZztGKyspe3ZhciBJPXVbRl0sTD1JLnNvdXJjZSgpLFI9SS50YXJnZXQoKSx6PW8oSSksQj1fKEwpLmRpc3QsVj1fKFIpLmRpc3Q7aWYoQit6PFZ8fCFpJiZWK3o8Qil7aWYobXx8PShJdShgR3JhcGggY29udGFpbnMgYSBuZWdhdGl2ZSB3ZWlnaHQgY3ljbGUgZm9yIEJlbGxtYW4tRm9yZGApLCEwKSxlLmZpbmROZWdhdGl2ZVdlaWdodEN5Y2xlcyE9PSExKXt2YXIgSD1bXTtCK3o8ViYmSC5wdXNoKEwpLCFpJiZWK3o8QiYmSC5wdXNoKFIpO2Zvcih2YXIgVT1ILmxlbmd0aCxXPTA7VzxVO1crKyl7dmFyIGVlPUhbV10sRz1bZWVdO0cucHVzaChfKGVlKS5lZGdlKTtmb3IodmFyIHRlPV8oZWUpLnByZWQ7Ry5pbmRleE9mKHRlKT09PS0xOylHLnB1c2godGUpLEcucHVzaChfKHRlKS5lZGdlKSx0ZT1fKHRlKS5wcmVkO0c9Ry5zbGljZShHLmluZGV4T2YodGUpKTtmb3IodmFyIG5lPUdbMF0uaWQoKSxyZT0wLGllPTI7aWU8Ry5sZW5ndGg7aWUrPTIpR1tpZV0uaWQoKTxuZSYmKG5lPUdbaWVdLmlkKCkscmU9aWUpO0c9Ry5zbGljZShyZSkuY29uY2F0KEcuc2xpY2UoMCxyZSkpLEcucHVzaChHWzBdKTt2YXIgYWU9Ry5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQoKX0pLmpvaW4oYCxgKTtQLmluZGV4T2YoYWUpPT09LTEmJihoLnB1c2gocy5zcGF3bihHKSksUC5wdXNoKGFlKSl9fWVsc2UgYnJlYWt9fXJldHVybntkaXN0YW5jZVRvOnkscGF0aFRvOmIsaGFzTmVnYXRpdmVXZWlnaHRDeWNsZTptLG5lZ2F0aXZlV2VpZ2h0Q3ljbGVzOmh9fX0seWQ9TWF0aC5zcXJ0KDIpLGJkPWZ1bmN0aW9uKGUsdCxuKXtuLmxlbmd0aD09PTAmJlB1KGBLYXJnZXItU3RlaW4gbXVzdCBiZSBydW4gb24gYSBjb25uZWN0ZWQgKHN1YilncmFwaGApO2Zvcih2YXIgcj1uW2VdLGk9clsxXSxhPXJbMl0sbz10W2ldLHM9dFthXSxjPW4sbD1jLmxlbmd0aC0xO2w+PTA7bC0tKXt2YXIgdT1jW2xdLGQ9dVsxXSxmPXVbMl07KHRbZF09PT1vJiZ0W2ZdPT09c3x8dFtkXT09PXMmJnRbZl09PT1vKSYmYy5zcGxpY2UobCwxKX1mb3IodmFyIHA9MDtwPGMubGVuZ3RoO3ArKyl7dmFyIG09Y1twXTttWzFdPT09cz8oY1twXT1tLnNsaWNlKCksY1twXVsxXT1vKTptWzJdPT09cyYmKGNbcF09bS5zbGljZSgpLGNbcF1bMl09byl9Zm9yKHZhciBoPTA7aDx0Lmxlbmd0aDtoKyspdFtoXT09PXMmJih0W2hdPW8pO3JldHVybiBjfSx4ZD1mdW5jdGlvbihlLHQsbixyKXtmb3IoO24+cjspdD1iZChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdC5sZW5ndGgpLGUsdCksbi0tO3JldHVybiB0fSxTZD17a2FyZ2VyU3RlaW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5ieUdyb3VwKCksbj10Lm5vZGVzLHI9dC5lZGdlcztyLnVubWVyZ2VCeShmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0xvb3AoKX0pO3ZhciBpPW4ubGVuZ3RoLGE9ci5sZW5ndGgsbz1NYXRoLmNlaWwoKE1hdGgubG9nKGkpL01hdGguTE4yKSoqMikscz1NYXRoLmZsb29yKGkveWQpO2lmKGk8MilQdShgQXQgbGVhc3QgMiBub2RlcyBhcmUgcmVxdWlyZWQgZm9yIEthcmdlci1TdGVpbiBhbGdvcml0aG1gKTtlbHNle2Zvcih2YXIgYz1bXSxsPTA7bDxhO2wrKyl7dmFyIHU9cltsXTtjLnB1c2goW2wsbi5pbmRleE9mKHUuc291cmNlKCkpLG4uaW5kZXhPZih1LnRhcmdldCgpKV0pfWZvcih2YXIgZD0xLzAsZj1bXSxwPUFycmF5KGkpLG09QXJyYXkoaSksaD1BcnJheShpKSxnPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjxpO24rKyl0W25dPWVbbl19LF89MDtfPD1vO18rKyl7Zm9yKHZhciB2PTA7djxpO3YrKyltW3ZdPXY7dmFyIHk9eGQobSxjLnNsaWNlKCksaSxzKSxiPXkuc2xpY2UoKTtnKG0saCk7dmFyIHg9eGQobSx5LHMsMiksUz14ZChoLGIscywyKTt4Lmxlbmd0aDw9Uy5sZW5ndGgmJngubGVuZ3RoPGQ/KGQ9eC5sZW5ndGgsZj14LGcobSxwKSk6Uy5sZW5ndGg8PXgubGVuZ3RoJiZTLmxlbmd0aDxkJiYoZD1TLmxlbmd0aCxmPVMsZyhoLHApKX1mb3IodmFyIEM9dGhpcy5zcGF3bihmLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gcltlWzBdXX0pKSx3PXRoaXMuc3Bhd24oKSxUPXRoaXMuc3Bhd24oKSxFPXBbMF0sRD0wO0Q8cC5sZW5ndGg7RCsrKXt2YXIgTz1wW0RdLGs9bltEXTtPPT09RT93Lm1lcmdlKGspOlQubWVyZ2Uoayl9dmFyIEE9ZnVuY3Rpb24odCl7dmFyIG49ZS5zcGF3bigpO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCl7bi5tZXJnZSh0KSx0LmNvbm5lY3RlZEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbih0KXtlLmNvbnRhaW5zKHQpJiYhQy5jb250YWlucyh0KSYmbi5tZXJnZSh0KX0pfSksbn07cmV0dXJue2N1dDpDLGNvbXBvbmVudHM6W0EodyksQShUKV0scGFydGl0aW9uMTp3LHBhcnRpdGlvbjI6VH19fX0sQ2Q9ZnVuY3Rpb24oZSl7cmV0dXJue3g6ZS54LHk6ZS55fX0sd2Q9ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt4OmUueCp0K24ueCx5OmUueSp0K24ueX19LFRkPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57eDooZS54LW4ueCkvdCx5OihlLnktbi55KS90fX0sRWQ9ZnVuY3Rpb24oZSl7cmV0dXJue3g6ZVswXSx5OmVbMV19fSxEZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgscj0xLzAsaT10O2k8bjtpKyspe3ZhciBhPWVbaV07aXNGaW5pdGUoYSkmJihyPU1hdGgubWluKGEscikpfXJldHVybiByfSxPZD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgscj0tMS8wLGk9dDtpPG47aSsrKXt2YXIgYT1lW2ldO2lzRmluaXRlKGEpJiYocj1NYXRoLm1heChhLHIpKX1yZXR1cm4gcn0sa2Q9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowLG49YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOmUubGVuZ3RoLHI9MCxpPTAsYT10O2E8bjthKyspe3ZhciBvPWVbYV07aXNGaW5pdGUobykmJihyKz1vLGkrKyl9cmV0dXJuIHIvaX0sQWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOjAsbj1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ZS5sZW5ndGgscj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITAsaT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITAsYT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06ITA7cj9lPWUuc2xpY2UodCxuKToobjxlLmxlbmd0aCYmZS5zcGxpY2UobixlLmxlbmd0aC1uKSx0PjAmJmUuc3BsaWNlKDAsdCkpO2Zvcih2YXIgbz0wLHM9ZS5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIGM9ZVtzXTthP2lzRmluaXRlKGMpfHwoZVtzXT0tMS8wLG8rKyk6ZS5zcGxpY2UocywxKX1pJiZlLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSk7dmFyIGw9ZS5sZW5ndGgsdT1NYXRoLmZsb29yKGwvMik7cmV0dXJuIGwlMj09MD8oZVt1LTErb10rZVt1K29dKS8yOmVbdSsxK29dfSxqZD1mdW5jdGlvbihlLHQpe3JldHVybiB0PT09MD9lOmpkKHQsZSV0KX0sTWQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWVbMF0sbj0wO248ZS5sZW5ndGg7bisrKWlmKGpjKGVbbl0pKW4+MCYmKHQ9amQodCxlW25dKSk7ZWxzZSByZXR1cm4gMDtyZXR1cm4gdH0sTmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguUEkqZS8xODB9LFBkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguYXRhbjIodCxlKS1NYXRoLlBJLzJ9LEZkPU1hdGgubG9nMnx8ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpL01hdGgubG9nKDIpfSxJZD1mdW5jdGlvbihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9LExkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGguc3FydChSZChlLHQpKX0sUmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LngtZS54LHI9dC55LWUueTtyZXR1cm4gbipuK3Iqcn0semQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49MCxyPTA7cjx0O3IrKyluKz1lW3JdO2Zvcih2YXIgaT0wO2k8dDtpKyspZVtpXT1lW2ldL247cmV0dXJuIGV9LEJkPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybigxLXIpKigxLXIpKmUrMiooMS1yKSpyKnQrcipyKm59LFZkPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybnt4OkJkKGUueCx0Lngsbi54LHIpLHk6QmQoZS55LHQueSxuLnkscil9fSxIZD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT17eDp0LngtZS54LHk6dC55LWUueX0sYT1MZChlLHQpLG89e3g6aS54L2EseTppLnkvYX07cmV0dXJuIG4/Pz0wLHI/Pz1uKmEse3g6ZS54K28ueCpyLHk6ZS55K28ueSpyfX0sVWQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKG4sdCkpfSxXZD1mdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybnt4MToxLzAseTE6MS8wLHgyOi0xLzAseTI6LTEvMCx3OjAsaDowfTtpZihlLngxIT1udWxsJiZlLnkxIT1udWxsKXtpZihlLngyIT1udWxsJiZlLnkyIT1udWxsJiZlLngyPj1lLngxJiZlLnkyPj1lLnkxKXJldHVybnt4MTplLngxLHkxOmUueTEseDI6ZS54Mix5MjplLnkyLHc6ZS54Mi1lLngxLGg6ZS55Mi1lLnkxfTtpZihlLnchPW51bGwmJmUuaCE9bnVsbCYmZS53Pj0wJiZlLmg+PTApcmV0dXJue3gxOmUueDEseTE6ZS55MSx4MjplLngxK2Uudyx5MjplLnkxK2UuaCx3OmUudyxoOmUuaH19fSxHZD1mdW5jdGlvbihlKXtyZXR1cm57eDE6ZS54MSx4MjplLngyLHc6ZS53LHkxOmUueTEseTI6ZS55MixoOmUuaH19LEtkPWZ1bmN0aW9uKGUpe2UueDE9MS8wLGUueTE9MS8wLGUueDI9LTEvMCxlLnkyPS0xLzAsZS53PTAsZS5oPTB9LHFkPWZ1bmN0aW9uKGUsdCl7ZS54MT1NYXRoLm1pbihlLngxLHQueDEpLGUueDI9TWF0aC5tYXgoZS54Mix0LngyKSxlLnc9ZS54Mi1lLngxLGUueTE9TWF0aC5taW4oZS55MSx0LnkxKSxlLnkyPU1hdGgubWF4KGUueTIsdC55MiksZS5oPWUueTItZS55MX0sSmQ9ZnVuY3Rpb24oZSx0LG4pe2UueDE9TWF0aC5taW4oZS54MSx0KSxlLngyPU1hdGgubWF4KGUueDIsdCksZS53PWUueDItZS54MSxlLnkxPU1hdGgubWluKGUueTEsbiksZS55Mj1NYXRoLm1heChlLnkyLG4pLGUuaD1lLnkyLWUueTF9LFlkPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTowO3JldHVybiBlLngxLT10LGUueDIrPXQsZS55MS09dCxlLnkyKz10LGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MSxlfSxYZD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06WzBdLG4scixpLGE7aWYodC5sZW5ndGg9PT0xKW49cj1pPWE9dFswXTtlbHNlIGlmKHQubGVuZ3RoPT09MiluPWk9dFswXSxhPXI9dFsxXTtlbHNlIGlmKHQubGVuZ3RoPT09NCl7dmFyIG89bWModCw0KTtuPW9bMF0scj1vWzFdLGk9b1syXSxhPW9bM119cmV0dXJuIGUueDEtPWEsZS54Mis9cixlLnkxLT1uLGUueTIrPWksZS53PWUueDItZS54MSxlLmg9ZS55Mi1lLnkxLGV9LFpkPWZ1bmN0aW9uKGUsdCl7ZS54MT10LngxLGUueTE9dC55MSxlLngyPXQueDIsZS55Mj10LnkyLGUudz1lLngyLWUueDEsZS5oPWUueTItZS55MX0sUWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKGUueDE+dC54Mnx8dC54MT5lLngyfHxlLngyPHQueDF8fHQueDI8ZS54MXx8ZS55Mjx0LnkxfHx0LnkyPGUueTF8fGUueTE+dC55Mnx8dC55MT5lLnkyKX0sJGQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLngxPD10JiZ0PD1lLngyJiZlLnkxPD1uJiZuPD1lLnkyfSxlZj1mdW5jdGlvbihlLHQpe3JldHVybiAkZChlLHQueCx0LnkpfSx0Zj1mdW5jdGlvbihlLHQpe3JldHVybiAkZChlLHQueDEsdC55MSkmJiRkKGUsdC54Mix0LnkyKX0sbmY9TWF0aC5oeXBvdD8/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5zcXJ0KGUqZSt0KnQpfTtmdW5jdGlvbiByZihlLHQpe2lmKGUubGVuZ3RoPDMpdGhyb3cgRXJyb3IoYE5lZWQgYXQgbGVhc3QgMyB2ZXJ0aWNlc2ApO3ZhciBuPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6ZS54K3QueCx5OmUueSt0Lnl9fSxyPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6ZS54LXQueCx5OmUueS10Lnl9fSxpPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3g6ZS54KnQseTplLnkqdH19LGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS54KnQueS1lLnkqdC54fSxvPWZ1bmN0aW9uKGUpe3ZhciB0PW5mKGUueCxlLnkpO3JldHVybiB0PT09MD97eDowLHk6MH06e3g6ZS54L3QseTplLnkvdH19LHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dLGk9ZVsobisxKSVlLmxlbmd0aF07dCs9ci54KmkueS1pLngqci55fXJldHVybiB0LzJ9LGM9ZnVuY3Rpb24oZSx0LG8scyl7dmFyIGM9cih0LGUpLGw9cihzLG8pLHU9YShjLGwpO3JldHVybiBNYXRoLmFicyh1KTwxZS05P24oZSxpKGMsLjUpKTpuKGUsaShjLGEocihvLGUpLGwpL3UpKX0sbD1lLm1hcChmdW5jdGlvbihlKXtyZXR1cm57eDplLngseTplLnl9fSk7cyhsKTwwJiZsLnJldmVyc2UoKTtmb3IodmFyIHU9bC5sZW5ndGgsZD1bXSxmPTA7Zjx1O2YrKyl7dmFyIHA9bFtmXSxtPWxbKGYrMSkldV0saD1yKG0scCksZz1vKHt4OmgueSx5Oi1oLnh9KTtkLnB1c2goZyl9Zm9yKHZhciBfPWQubWFwKGZ1bmN0aW9uKGUscil7cmV0dXJue3AxOm4obFtyXSxpKGUsdCkpLHAyOm4obFsocisxKSV1XSxpKGUsdCkpfX0pLHY9W10seT0wO3k8dTt5Kyspe3ZhciBiPV9bKHktMSt1KSV1XSx4PV9beV0sUz1jKGIucDEsYi5wMix4LnAxLHgucDIpO3YucHVzaChTKX1yZXR1cm4gdn1mdW5jdGlvbiBhZihlLHQsbixyLGksYSl7dmFyIG89cmYoQ2YoZSx0LG4scixpKSxhKSxzPVdkKCk7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gSmQocyxlLngsZS55KX0pLHN9dmFyIG9mPWZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8pe3ZhciBzPWFyZ3VtZW50cy5sZW5ndGg+NyYmYXJndW1lbnRzWzddIT09dm9pZCAwP2FyZ3VtZW50c1s3XTpgYXV0b2AsYz1zPT09YGF1dG9gP0FmKGksYSk6cyxsPWkvMix1PWEvMjtjPU1hdGgubWluKGMsbCx1KTt2YXIgZD1jIT09bCxmPWMhPT11LHA7aWYoZCl7dmFyIG09bi1sK2MtbyxoPXItdS1vO2lmKHA9U2YoZSx0LG4scixtLGgsbitsLWMrbyxoLCExKSxwLmxlbmd0aD4wKXJldHVybiBwfWlmKGYpe3ZhciBnPW4rbCtvO2lmKHA9U2YoZSx0LG4scixnLHItdStjLW8sZyxyK3UtYytvLCExKSxwLmxlbmd0aD4wKXJldHVybiBwfWlmKGQpe3ZhciBfPW4tbCtjLW8sdj1yK3UrbztpZihwPVNmKGUsdCxuLHIsXyx2LG4rbC1jK28sdiwhMSkscC5sZW5ndGg+MClyZXR1cm4gcH1pZihmKXt2YXIgeT1uLWwtbztpZihwPVNmKGUsdCxuLHIseSxyLXUrYy1vLHkscit1LWMrbywhMSkscC5sZW5ndGg+MClyZXR1cm4gcH12YXIgYix4PW4tbCtjLFM9ci11K2M7aWYoYj1iZihlLHQsbixyLHgsUyxjK28pLGIubGVuZ3RoPjAmJmJbMF08PXgmJmJbMV08PVMpcmV0dXJuW2JbMF0sYlsxXV07dmFyIEM9bitsLWMsdz1yLXUrYztpZihiPWJmKGUsdCxuLHIsQyx3LGMrbyksYi5sZW5ndGg+MCYmYlswXT49QyYmYlsxXTw9dylyZXR1cm5bYlswXSxiWzFdXTt2YXIgVD1uK2wtYyxFPXIrdS1jO2lmKGI9YmYoZSx0LG4scixULEUsYytvKSxiLmxlbmd0aD4wJiZiWzBdPj1UJiZiWzFdPj1FKXJldHVybltiWzBdLGJbMV1dO3ZhciBEPW4tbCtjLE89cit1LWM7cmV0dXJuIGI9YmYoZSx0LG4scixELE8sYytvKSxiLmxlbmd0aD4wJiZiWzBdPD1EJiZiWzFdPj1PP1tiWzBdLGJbMV1dOltdfSxzZj1mdW5jdGlvbihlLHQsbixyLGksYSxvKXt2YXIgcz1vLGM9TWF0aC5taW4obixpKSxsPU1hdGgubWF4KG4saSksdT1NYXRoLm1pbihyLGEpLGQ9TWF0aC5tYXgocixhKTtyZXR1cm4gYy1zPD1lJiZlPD1sK3MmJnUtczw9dCYmdDw9ZCtzfSxjZj1mdW5jdGlvbihlLHQsbixyLGksYSxvLHMsYyl7dmFyIGw9e3gxOk1hdGgubWluKG4sbyxpKS1jLHgyOk1hdGgubWF4KG4sbyxpKStjLHkxOk1hdGgubWluKHIscyxhKS1jLHkyOk1hdGgubWF4KHIscyxhKStjfTtyZXR1cm4hKGU8bC54MXx8ZT5sLngyfHx0PGwueTF8fHQ+bC55Mil9LGxmPWZ1bmN0aW9uKGUsdCxuLHIpe24tPXI7dmFyIGk9dCp0LTQqZSpuO2lmKGk8MClyZXR1cm5bXTt2YXIgYT1NYXRoLnNxcnQoaSksbz0yKmU7cmV0dXJuWygtdCthKS9vLCgtdC1hKS9vXX0sdWY9ZnVuY3Rpb24oZSx0LG4scixpKXtlPT09MCYmKGU9MWUtNSksdC89ZSxuLz1lLHIvPWU7dmFyIGEsbz0oMypuLXQqdCkvOSxzPS0oMjcqcikrdCooOSpuLXQqdCoyKSxjLGwsdSxkLGY7cy89NTQsYT1vKm8qbytzKnMsaVsxXT0wLGQ9dC8zLGE+MD8obD1zK01hdGguc3FydChhKSxsPWw8MD8tKCgtbCkqKigxLzMpKTpsKiooMS8zKSx1PXMtTWF0aC5zcXJ0KGEpLHU9dTwwPy0oKC11KSoqKDEvMykpOnUqKigxLzMpLGlbMF09LWQrbCt1LGQrPShsK3UpLzIsaVs0XT1pWzJdPS1kLGQ9TWF0aC5zcXJ0KDMpKigtdStsKS8yLGlbM109ZCxpWzVdPS1kKTooaVs1XT1pWzNdPTAsYT09PTA/KGY9czwwPy0oKC1zKSoqKDEvMykpOnMqKigxLzMpLGlbMF09LWQrMipmLGlbNF09aVsyXT0tKGYrZCkpOihvPS1vLGM9bypvKm8sYz1NYXRoLmFjb3Mocy9NYXRoLnNxcnQoYykpLGY9MipNYXRoLnNxcnQobyksaVswXT0tZCtmKk1hdGguY29zKGMvMyksaVsyXT0tZCtmKk1hdGguY29zKChjKzIqTWF0aC5QSSkvMyksaVs0XT0tZCtmKk1hdGguY29zKChjKzQqTWF0aC5QSSkvMykpKX0sZGY9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzKXt2YXIgYz0xKm4qbi00Km4qaSsyKm4qbys0KmkqaS00KmkqbytvKm8rcipyLTQqciphKzIqcipzKzQqYSphLTQqYSpzK3MqcyxsPTkqbippLTMqbipuLTMqbipvLTYqaSppKzMqaSpvKzkqciphLTMqcipyLTMqcipzLTYqYSphKzMqYSpzLHU9MypuKm4tNipuKmkrbipvLW4qZSsyKmkqaSsyKmkqZS1vKmUrMypyKnItNipyKmErcipzLXIqdCsyKmEqYSsyKmEqdC1zKnQsZD0xKm4qaS1uKm4rbiplLWkqZStyKmEtcipyK3IqdC1hKnQsZj1bXTt1ZihjLGwsdSxkLGYpO2Zvcih2YXIgcD0xZS03LG09W10saD0wO2g8NjtoKz0yKU1hdGguYWJzKGZbaCsxXSk8cCYmZltoXT49MCYmZltoXTw9MSYmbS5wdXNoKGZbaF0pO20ucHVzaCgxKSxtLnB1c2goMCk7Zm9yKHZhciBnPS0xLF8sdix5LGI9MDtiPG0ubGVuZ3RoO2IrKylfPSgxLW1bYl0pKioyKm4rMiooMS1tW2JdKSptW2JdKmkrbVtiXSptW2JdKm8sdj0oMS1tW2JdKSoqMipyKzIqKDEtbVtiXSkqbVtiXSphK21bYl0qbVtiXSpzLHk9KF8tZSkqKjIrKHYtdCkqKjIsZz49MD95PGcmJihnPXkpOmc9eTtyZXR1cm4gZ30sZmY9ZnVuY3Rpb24oZSx0LG4scixpLGEpe3ZhciBvPVtlLW4sdC1yXSxzPVtpLW4sYS1yXSxjPXNbMF0qc1swXStzWzFdKnNbMV0sbD1vWzBdKm9bMF0rb1sxXSpvWzFdLHU9b1swXSpzWzBdK29bMV0qc1sxXSxkPXUqdS9jO3JldHVybiB1PDA/bDpkPmM/KGUtaSkqKGUtaSkrKHQtYSkqKHQtYSk6bC1kfSxwZj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGksYSxvLHMsYz0wLGw9MDtsPG4ubGVuZ3RoLzI7bCsrKWlmKHI9bltsKjJdLGk9bltsKjIrMV0sbCsxPG4ubGVuZ3RoLzI/KGE9blsobCsxKSoyXSxvPW5bKGwrMSkqMisxXSk6KGE9blsobCsxLW4ubGVuZ3RoLzIpKjJdLG89blsobCsxLW4ubGVuZ3RoLzIpKjIrMV0pLHIhPWV8fGEhPWUpe2lmKHI+PWUmJmU+PWF8fHI8PWUmJmU8PWEpcz0oZS1yKS8oYS1yKSooby1pKStpLHM+dCYmYysrO2Vsc2UgY29udGludWV9cmV0dXJuIGMlMiE9MH0sbWY9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzLGMpe3ZhciBsPUFycmF5KG4ubGVuZ3RoKSx1O3NbMF09PW51bGw/dT1zOih1PU1hdGguYXRhbihzWzFdL3NbMF0pLHNbMF08MD91Kz1NYXRoLlBJLzI6dT0tdS1NYXRoLlBJLzIpO2Zvcih2YXIgZD1NYXRoLmNvcygtdSksZj1NYXRoLnNpbigtdSkscD0wO3A8bC5sZW5ndGgvMjtwKyspbFtwKjJdPWEvMioobltwKjJdKmQtbltwKjIrMV0qZiksbFtwKjIrMV09by8yKihuW3AqMisxXSpkK25bcCoyXSpmKSxsW3AqMl0rPXIsbFtwKjIrMV0rPWk7cmV0dXJuIHBmKGUsdCxjPjA/Z2YoX2YobCwtYykpOmwpfSxoZj1mdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe2Zvcih2YXIgYz1BcnJheShuLmxlbmd0aCoyKSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF07aWYoY1tsKjQrMF09dS5zdGFydFgsY1tsKjQrMV09dS5zdGFydFksY1tsKjQrMl09dS5zdG9wWCxjW2wqNCszXT11LnN0b3BZLCh1LmN4LWUpKioyKyh1LmN5LXQpKioyPD11LnJhZGl1cyoqMilyZXR1cm4hMH1yZXR1cm4gcGYoZSx0LGMpfSxnZj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9QXJyYXkoZS5sZW5ndGgvMiksbixyLGksYSxvLHMsYyxsLHU9MDt1PGUubGVuZ3RoLzQ7dSsrKXtuPWVbdSo0XSxyPWVbdSo0KzFdLGk9ZVt1KjQrMl0sYT1lW3UqNCszXSx1PGUubGVuZ3RoLzQtMT8obz1lWyh1KzEpKjRdLHM9ZVsodSsxKSo0KzFdLGM9ZVsodSsxKSo0KzJdLGw9ZVsodSsxKSo0KzNdKToobz1lWzBdLHM9ZVsxXSxjPWVbMl0sbD1lWzNdKTt2YXIgZD1TZihuLHIsaSxhLG8scyxjLGwsITApO3RbdSoyXT1kWzBdLHRbdSoyKzFdPWRbMV19cmV0dXJuIHR9LF9mPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPUFycmF5KGUubGVuZ3RoKjIpLHIsaSxhLG8scz0wO3M8ZS5sZW5ndGgvMjtzKyspe3I9ZVtzKjJdLGk9ZVtzKjIrMV0sczxlLmxlbmd0aC8yLTE/KGE9ZVsocysxKSoyXSxvPWVbKHMrMSkqMisxXSk6KGE9ZVswXSxvPWVbMV0pO3ZhciBjPW8taSxsPS0oYS1yKSx1PU1hdGguc3FydChjKmMrbCpsKSxkPWMvdSxmPWwvdTtuW3MqNF09citkKnQsbltzKjQrMV09aStmKnQsbltzKjQrMl09YStkKnQsbltzKjQrM109bytmKnR9cmV0dXJuIG59LHZmPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbz1uLWUscz1yLXQ7by89aSxzLz1hO3ZhciBjPU1hdGguc3FydChvKm8rcypzKSxsPWMtMTtpZihsPDApcmV0dXJuW107dmFyIHU9bC9jO3JldHVyblsobi1lKSp1K2UsKHItdCkqdSt0XX0seWY9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyl7cmV0dXJuIGUtPWksdC09YSxlLz1uLzIrbyx0Lz1yLzIrbyxlKmUrdCp0PD0xfSxiZj1mdW5jdGlvbihlLHQsbixyLGksYSxvKXt2YXIgcz1bbi1lLHItdF0sYz1bZS1pLHQtYV0sbD1zWzBdKnNbMF0rc1sxXSpzWzFdLHU9MiooY1swXSpzWzBdK2NbMV0qc1sxXSksZD1jWzBdKmNbMF0rY1sxXSpjWzFdLW8qbyxmPXUqdS00KmwqZDtpZihmPDApcmV0dXJuW107dmFyIHA9KC11K01hdGguc3FydChmKSkvKDIqbCksbT0oLXUtTWF0aC5zcXJ0KGYpKS8oMipsKSxoPU1hdGgubWluKHAsbSksZz1NYXRoLm1heChwLG0pLF89W107aWYoaD49MCYmaDw9MSYmXy5wdXNoKGgpLGc+PTAmJmc8PTEmJl8ucHVzaChnKSxfLmxlbmd0aD09PTApcmV0dXJuW107dmFyIHY9X1swXSpzWzBdK2UseT1fWzBdKnNbMV0rdDtyZXR1cm4gXy5sZW5ndGg+MT9fWzBdPT1fWzFdP1t2LHldOlt2LHksX1sxXSpzWzBdK2UsX1sxXSpzWzFdK3RdOlt2LHldfSx4Zj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ8PWUmJmU8PW58fG48PWUmJmU8PXQ/ZTplPD10JiZ0PD1ufHxuPD10JiZ0PD1lP3Q6bn0sU2Y9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzLGMpe3ZhciBsPWUtaSx1PW4tZSxkPW8taSxmPXQtYSxwPXItdCxtPXMtYSxoPWQqZi1tKmwsZz11KmYtcCpsLF89bSp1LWQqcDtpZihfIT09MCl7dmFyIHY9aC9fLHk9Zy9fLGI9LjAwMSx4PTAtYixTPTErYjtyZXR1cm4geDw9diYmdjw9UyYmeDw9eSYmeTw9U3x8Yz9bZSt2KnUsdCt2KnBdOltdfXJldHVybiBoPT09MHx8Zz09PTA/eGYoZSxuLG8pPT09bz9bbyxzXTp4ZihlLG4saSk9PT1pP1tpLGFdOnhmKGksbyxuKT09PW4/W24scl06W106W119LENmPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGE9W10sbz1yLzIscz1pLzIsYz10LGw9bjthLnB1c2goe3g6YytvKmVbMF0seTpsK3MqZVsxXX0pO2Zvcih2YXIgdT0xO3U8ZS5sZW5ndGgvMjt1KyspYS5wdXNoKHt4OmMrbyplW3UqMl0seTpsK3MqZVt1KjIrMV19KTtyZXR1cm4gYX0sd2Y9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzKXt2YXIgYz1bXSxsLHU9QXJyYXkobi5sZW5ndGgpLGQ9ITA7YT8/KGQ9ITEpO3ZhciBmO2lmKGQpe2Zvcih2YXIgcD0wO3A8dS5sZW5ndGgvMjtwKyspdVtwKjJdPW5bcCoyXSphK3IsdVtwKjIrMV09bltwKjIrMV0qbytpO2Y9cz4wP2dmKF9mKHUsLXMpKTp1fWVsc2UgZj1uO2Zvcih2YXIgbSxoLGcsXyx2PTA7djxmLmxlbmd0aC8yO3YrKyltPWZbdioyXSxoPWZbdioyKzFdLHY8Zi5sZW5ndGgvMi0xPyhnPWZbKHYrMSkqMl0sXz1mWyh2KzEpKjIrMV0pOihnPWZbMF0sXz1mWzFdKSxsPVNmKGUsdCxyLGksbSxoLGcsXyksbC5sZW5ndGghPT0wJiZjLnB1c2gobFswXSxsWzFdKTtyZXR1cm4gY30sVGY9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzLGMpe3ZhciBsPVtdLHUsZD1BcnJheShuLmxlbmd0aCoyKTtjLmZvckVhY2goZnVuY3Rpb24obixhKXthPT09MD8oZFtkLmxlbmd0aC0yXT1uLnN0YXJ0WCxkW2QubGVuZ3RoLTFdPW4uc3RhcnRZKTooZFthKjQtMl09bi5zdGFydFgsZFthKjQtMV09bi5zdGFydFkpLGRbYSo0XT1uLnN0b3BYLGRbYSo0KzFdPW4uc3RvcFksdT1iZihlLHQscixpLG4uY3gsbi5jeSxuLnJhZGl1cyksdS5sZW5ndGghPT0wJiZsLnB1c2godVswXSx1WzFdKX0pO2Zvcih2YXIgZj0wO2Y8ZC5sZW5ndGgvNDtmKyspdT1TZihlLHQscixpLGRbZio0XSxkW2YqNCsxXSxkW2YqNCsyXSxkW2YqNCszXSwhMSksdS5sZW5ndGghPT0wJiZsLnB1c2godVswXSx1WzFdKTtpZihsLmxlbmd0aD4yKXtmb3IodmFyIHA9W2xbMF0sbFsxXV0sbT0ocFswXS1lKSoqMisocFsxXS10KSoqMixoPTE7aDxsLmxlbmd0aC8yO2grKyl7dmFyIGc9KGxbaCoyXS1lKSoqMisobFtoKjIrMV0tdCkqKjI7Zzw9bSYmKHBbMF09bFtoKjJdLHBbMV09bFtoKjIrMV0sbT1nKX1yZXR1cm4gcH1yZXR1cm4gbH0sRWY9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtlWzBdLXRbMF0sZVsxXS10WzFdXSxpPU1hdGguc3FydChyWzBdKnJbMF0rclsxXSpyWzFdKSxhPShpLW4pL2k7cmV0dXJuIGE8MCYmKGE9MWUtNSksW3RbMF0rYSpyWzBdLHRbMV0rYSpyWzFdXX0sRGY9ZnVuY3Rpb24oZSx0KXt2YXIgbj1rZihlLHQpO3JldHVybiBuPU9mKG4pLG59LE9mPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9ZS5sZW5ndGgvMixpPTEvMCxhPTEvMCxvPS0xLzAscz0tMS8wLGM9MDtjPHI7YysrKXQ9ZVsyKmNdLG49ZVsyKmMrMV0saT1NYXRoLm1pbihpLHQpLG89TWF0aC5tYXgobyx0KSxhPU1hdGgubWluKGEsbikscz1NYXRoLm1heChzLG4pO2Zvcih2YXIgbD0yLyhvLWkpLHU9Mi8ocy1hKSxkPTA7ZDxyO2QrKyl0PWVbMipkXT1lWzIqZF0qbCxuPWVbMipkKzFdPWVbMipkKzFdKnUsaT1NYXRoLm1pbihpLHQpLG89TWF0aC5tYXgobyx0KSxhPU1hdGgubWluKGEsbikscz1NYXRoLm1heChzLG4pO2lmKGE8LTEpZm9yKHZhciBmPTA7ZjxyO2YrKyluPWVbMipmKzFdPWVbMipmKzFdKygtMS1hKTtyZXR1cm4gZX0sa2Y9ZnVuY3Rpb24oZSx0KXt2YXIgbj0xL2UqMipNYXRoLlBJLHI9ZSUyPT0wP01hdGguUEkvMituLzI6TWF0aC5QSS8yO3IrPXQ7Zm9yKHZhciBpPUFycmF5KGUqMiksYSxvPTA7bzxlO28rKylhPW8qbityLGlbMipvXT1NYXRoLmNvcyhhKSxpWzIqbysxXT1NYXRoLnNpbigtYSk7cmV0dXJuIGl9LEFmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWluKGUvNCx0LzQsOCl9LGpmPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1hdGgubWluKGUvMTAsdC8xMCw4KX0sTWY9ZnVuY3Rpb24oKXtyZXR1cm4gOH0sTmY9ZnVuY3Rpb24oZSx0LG4pe3JldHVybltlLTIqdCtuLDIqKHQtZSksZV19LFBmPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2hlaWdodE9mZnNldDpNYXRoLm1pbigxNSwuMDUqdCksd2lkdGhPZmZzZXQ6TWF0aC5taW4oMTAwLC4yNSplKSxjdHJsUHRPZmZzZXRQY3Q6LjA1fX07ZnVuY3Rpb24gRmYoZSx0KXtmdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0saT1lWyhuKzEpJWUubGVuZ3RoXSxhPXt4OmkueC1yLngseTppLnktci55fSxvPXt4Oi1hLnkseTphLnh9LHM9TWF0aC5zcXJ0KG8ueCpvLngrby55Km8ueSk7dC5wdXNoKHt4Om8ueC9zLHk6by55L3N9KX1yZXR1cm4gdH1mdW5jdGlvbiByKGUsdCl7dmFyIG49MS8wLHI9LTEvMCxpPWNjKGUpLGE7dHJ5e2ZvcihpLnMoKTshKGE9aS5uKCkpLmRvbmU7KXt2YXIgbz1hLnZhbHVlLHM9by54KnQueCtvLnkqdC55O249TWF0aC5taW4obixzKSxyPU1hdGgubWF4KHIscyl9fWNhdGNoKGUpe2kuZShlKX1maW5hbGx5e2kuZigpfXJldHVybnttaW46bixtYXg6cn19ZnVuY3Rpb24gaShlLHQpe3JldHVybiEoZS5tYXg8dC5taW58fHQubWF4PGUubWluKX12YXIgYT1jYyhbXS5jb25jYXQoaGMobihlKSksaGMobih0KSkpKSxvO3RyeXtmb3IoYS5zKCk7IShvPWEubigpKS5kb25lOyl7dmFyIHM9by52YWx1ZTtpZighaShyKGUscykscih0LHMpKSlyZXR1cm4hMX19Y2F0Y2goZSl7YS5lKGUpfWZpbmFsbHl7YS5mKCl9cmV0dXJuITB9dmFyIElmPVV1KHtkYW1waW5nRmFjdG9yOi44LHByZWNpc2lvbjoxZS02LGl0ZXJhdGlvbnM6MjAwLHdlaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gMX19KSxMZj17cGFnZVJhbms6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUlmKGUpLG49dC5kYW1waW5nRmFjdG9yLHI9dC5wcmVjaXNpb24saT10Lml0ZXJhdGlvbnMsYT10LndlaWdodCxvPXRoaXMuX3ByaXZhdGUuY3kscz10aGlzLmJ5R3JvdXAoKSxjPXMubm9kZXMsbD1zLmVkZ2VzLHU9Yy5sZW5ndGgsZD11KnUsZj1sLmxlbmd0aCxwPUFycmF5KGQpLG09QXJyYXkodSksaD0oMS1uKS91LGc9MDtnPHU7ZysrKXtmb3IodmFyIF89MDtfPHU7XysrKXt2YXIgdj1nKnUrXztwW3ZdPTB9bVtnXT0wfWZvcih2YXIgeT0wO3k8Zjt5Kyspe3ZhciBiPWxbeV0seD1iLmRhdGEoYHNvdXJjZWApLFM9Yi5kYXRhKGB0YXJnZXRgKTtpZih4IT09Uyl7dmFyIEM9Yy5pbmRleE9mSWQoeCksdz1jLmluZGV4T2ZJZChTKSxUPWEoYiksRT13KnUrQztwW0VdKz1ULG1bQ10rPVR9fWZvcih2YXIgRD0xL3UraCxPPTA7Tzx1O08rKylpZihtW09dPT09MClmb3IodmFyIGs9MDtrPHU7aysrKXt2YXIgQT1rKnUrTztwW0FdPUR9ZWxzZSBmb3IodmFyIGo9MDtqPHU7aisrKXt2YXIgTT1qKnUrTztwW01dPXBbTV0vbVtPXStofWZvcih2YXIgTj1BcnJheSh1KSxQPUFycmF5KHUpLEYsST0wO0k8dTtJKyspTltJXT0xO2Zvcih2YXIgTD0wO0w8aTtMKyspe2Zvcih2YXIgUj0wO1I8dTtSKyspUFtSXT0wO2Zvcih2YXIgej0wO3o8dTt6KyspZm9yKHZhciBCPTA7Qjx1O0IrKyl7dmFyIFY9eip1K0I7UFt6XSs9cFtWXSpOW0JdfXpkKFApLEY9TixOPVAsUD1GO2Zvcih2YXIgSD0wLFU9MDtVPHU7VSsrKXt2YXIgVz1GW1VdLU5bVV07SCs9VypXfWlmKEg8cilicmVha31yZXR1cm57cmFuazpmdW5jdGlvbihlKXtyZXR1cm4gZT1vLmNvbGxlY3Rpb24oZSlbMF0sTltjLmluZGV4T2YoZSldfX19fSxSZj1VdSh7cm9vdDpudWxsLHdlaWdodDpmdW5jdGlvbihlKXtyZXR1cm4gMX0sZGlyZWN0ZWQ6ITEsYWxwaGE6MH0pLHpmPXtkZWdyZWVDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihlKXtlPVJmKGUpO3ZhciB0PXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxyPW4ubGVuZ3RoO2lmKGUuZGlyZWN0ZWQpe2Zvcih2YXIgaT17fSxhPXt9LG89MCxzPTAsYz0wO2M8cjtjKyspe3ZhciBsPW5bY10sdT1sLmlkKCk7ZS5yb290PWw7dmFyIGQ9dGhpcy5kZWdyZWVDZW50cmFsaXR5KGUpO288ZC5pbmRlZ3JlZSYmKG89ZC5pbmRlZ3JlZSksczxkLm91dGRlZ3JlZSYmKHM9ZC5vdXRkZWdyZWUpLGlbdV09ZC5pbmRlZ3JlZSxhW3VdPWQub3V0ZGVncmVlfXJldHVybntpbmRlZ3JlZTpmdW5jdGlvbihlKXtyZXR1cm4gbz09MD8wOihaKGUpJiYoZT10LmZpbHRlcihlKSksaVtlLmlkKCldL28pfSxvdXRkZWdyZWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHM9PT0wPzA6KFooZSkmJihlPXQuZmlsdGVyKGUpKSxhW2UuaWQoKV0vcyl9fX1mb3IodmFyIGY9e30scD0wLG09MDttPHI7bSsrKXt2YXIgaD1uW21dO2Uucm9vdD1oO3ZhciBnPXRoaXMuZGVncmVlQ2VudHJhbGl0eShlKTtwPGcuZGVncmVlJiYocD1nLmRlZ3JlZSksZltoLmlkKCldPWcuZGVncmVlfXJldHVybntkZWdyZWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHA9PT0wPzA6KFooZSkmJihlPXQuZmlsdGVyKGUpKSxmW2UuaWQoKV0vcCl9fX0sZGVncmVlQ2VudHJhbGl0eTpmdW5jdGlvbihlKXtlPVJmKGUpO3ZhciB0PXRoaXMuY3koKSxuPXRoaXMscj1lLGk9ci5yb290LGE9ci53ZWlnaHQsbz1yLmRpcmVjdGVkLHM9ci5hbHBoYTtpZihpPXQuY29sbGVjdGlvbihpKVswXSxvKXtmb3IodmFyIGM9aS5jb25uZWN0ZWRFZGdlcygpLGw9Yy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0KCkuc2FtZShpKSYmbi5oYXMoZSl9KSx1PWMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNvdXJjZSgpLnNhbWUoaSkmJm4uaGFzKGUpfSksZD1sLmxlbmd0aCxmPXUubGVuZ3RoLHA9MCxtPTAsaD0wO2g8bC5sZW5ndGg7aCsrKXArPWEobFtoXSk7Zm9yKHZhciBnPTA7Zzx1Lmxlbmd0aDtnKyspbSs9YSh1W2ddKTtyZXR1cm57aW5kZWdyZWU6ZCoqKDEtcykqcCoqK3Msb3V0ZGVncmVlOmYqKigxLXMpKm0qKitzfX1mb3IodmFyIF89aS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihuKSx2PV8ubGVuZ3RoLHk9MCxiPTA7YjxfLmxlbmd0aDtiKyspeSs9YShfW2JdKTtyZXR1cm57ZGVncmVlOnYqKigxLXMpKnkqKitzfX19O3pmLmRjPXpmLmRlZ3JlZUNlbnRyYWxpdHksemYuZGNuPXpmLmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpc2VkPXpmLmRlZ3JlZUNlbnRyYWxpdHlOb3JtYWxpemVkO3ZhciBCZj1VdSh7aGFybW9uaWM6ITAsd2VpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIDF9LGRpcmVjdGVkOiExLHJvb3Q6bnVsbH0pLFZmPXtjbG9zZW5lc3NDZW50cmFsaXR5Tm9ybWFsaXplZDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9QmYoZSksbj10Lmhhcm1vbmljLHI9dC53ZWlnaHQsaT10LmRpcmVjdGVkLGE9dGhpcy5jeSgpLG89e30scz0wLGM9dGhpcy5ub2RlcygpLGw9dGhpcy5mbG95ZFdhcnNoYWxsKHt3ZWlnaHQ6cixkaXJlY3RlZDppfSksdT0wO3U8Yy5sZW5ndGg7dSsrKXtmb3IodmFyIGQ9MCxmPWNbdV0scD0wO3A8Yy5sZW5ndGg7cCsrKWlmKHUhPT1wKXt2YXIgbT1sLmRpc3RhbmNlKGYsY1twXSk7ZCs9bj8xL206bX1ufHwoZD0xL2QpLHM8ZCYmKHM9ZCksb1tmLmlkKCldPWR9cmV0dXJue2Nsb3NlbmVzczpmdW5jdGlvbihlKXtyZXR1cm4gcz09MD8wOihlPVooZSk/YS5maWx0ZXIoZSlbMF0uaWQoKTplLmlkKCksb1tlXS9zKX19fSxjbG9zZW5lc3NDZW50cmFsaXR5OmZ1bmN0aW9uKGUpe3ZhciB0PUJmKGUpLG49dC5yb290LHI9dC53ZWlnaHQsaT10LmRpcmVjdGVkLGE9dC5oYXJtb25pYztuPXRoaXMuZmlsdGVyKG4pWzBdO2Zvcih2YXIgbz10aGlzLmRpamtzdHJhKHtyb290Om4sd2VpZ2h0OnIsZGlyZWN0ZWQ6aX0pLHM9MCxjPXRoaXMubm9kZXMoKSxsPTA7bDxjLmxlbmd0aDtsKyspe3ZhciB1PWNbbF07aWYoIXUuc2FtZShuKSl7dmFyIGQ9by5kaXN0YW5jZVRvKHUpO3MrPWE/MS9kOmR9fXJldHVybiBhP3M6MS9zfX07VmYuY2M9VmYuY2xvc2VuZXNzQ2VudHJhbGl0eSxWZi5jY249VmYuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGlzZWQ9VmYuY2xvc2VuZXNzQ2VudHJhbGl0eU5vcm1hbGl6ZWQ7dmFyIEhmPVV1KHt3ZWlnaHQ6bnVsbCxkaXJlY3RlZDohMX0pLFVmPXtiZXR3ZWVubmVzc0NlbnRyYWxpdHk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUhmKGUpLG49dC5kaXJlY3RlZCxyPXQud2VpZ2h0LGk9ciE9bnVsbCxhPXRoaXMuY3koKSxvPXRoaXMubm9kZXMoKSxzPXt9LGM9e30sbD0wLHU9e3NldDpmdW5jdGlvbihlLHQpe2NbZV09dCx0PmwmJihsPXQpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGNbZV19fSxkPTA7ZDxvLmxlbmd0aDtkKyspe3ZhciBmPW9bZF0scD1mLmlkKCk7c1twXT1uP2Yub3V0Z29lcnMoKS5ub2RlcygpOmYub3Blbk5laWdoYm9yaG9vZCgpLm5vZGVzKCksdS5zZXQocCwwKX1mb3IodmFyIG09ZnVuY3Rpb24oKXtmb3IodmFyIGU9b1toXS5pZCgpLHQ9W10sbj17fSxjPXt9LGw9e30sZD1uZXcgbGQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbFtlXS1sW3RdfSksZj0wO2Y8by5sZW5ndGg7ZisrKXt2YXIgcD1vW2ZdLmlkKCk7bltwXT1bXSxjW3BdPTAsbFtwXT0xLzB9Zm9yKGNbZV09MSxsW2VdPTAsZC5wdXNoKGUpOyFkLmVtcHR5KCk7KXt2YXIgbT1kLnBvcCgpO2lmKHQucHVzaChtKSxpKWZvcih2YXIgZz0wO2c8c1ttXS5sZW5ndGg7ZysrKXt2YXIgXz1zW21dW2ddLHY9YS5nZXRFbGVtZW50QnlJZChtKSx5PXZvaWQgMDt5PXYuZWRnZXNUbyhfKS5sZW5ndGg+MD92LmVkZ2VzVG8oXylbMF06Xy5lZGdlc1RvKHYpWzBdO3ZhciBiPXIoeSk7Xz1fLmlkKCksbFtfXT5sW21dK2ImJihsW19dPWxbbV0rYixkLm5vZGVzLmluZGV4T2YoXyk8MD9kLnB1c2goXyk6ZC51cGRhdGVJdGVtKF8pLGNbX109MCxuW19dPVtdKSxsW19dPT1sW21dK2ImJihjW19dPWNbX10rY1ttXSxuW19dLnB1c2gobSkpfWVsc2UgZm9yKHZhciB4PTA7eDxzW21dLmxlbmd0aDt4Kyspe3ZhciBTPXNbbV1beF0uaWQoKTtsW1NdPT0xLzAmJihkLnB1c2goUyksbFtTXT1sW21dKzEpLGxbU109PWxbbV0rMSYmKGNbU109Y1tTXStjW21dLG5bU10ucHVzaChtKSl9fWZvcih2YXIgQz17fSx3PTA7dzxvLmxlbmd0aDt3KyspQ1tvW3ddLmlkKCldPTA7Zm9yKDt0Lmxlbmd0aD4wOyl7Zm9yKHZhciBUPXQucG9wKCksRT0wO0U8bltUXS5sZW5ndGg7RSsrKXt2YXIgRD1uW1RdW0VdO0NbRF09Q1tEXStjW0RdL2NbVF0qKDErQ1tUXSl9VCE9b1toXS5pZCgpJiZ1LnNldChULHUuZ2V0KFQpK0NbVF0pfX0saD0wO2g8by5sZW5ndGg7aCsrKW0oKTt2YXIgZz17YmV0d2Vlbm5lc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9YS5jb2xsZWN0aW9uKGUpLmlkKCk7cmV0dXJuIHUuZ2V0KHQpfSxiZXR3ZWVubmVzc05vcm1hbGl6ZWQ6ZnVuY3Rpb24oZSl7aWYobD09MClyZXR1cm4gMDt2YXIgdD1hLmNvbGxlY3Rpb24oZSkuaWQoKTtyZXR1cm4gdS5nZXQodCkvbH19O3JldHVybiBnLmJldHdlZW5uZXNzTm9ybWFsaXNlZD1nLmJldHdlZW5uZXNzTm9ybWFsaXplZCxnfX07VWYuYmM9VWYuYmV0d2Vlbm5lc3NDZW50cmFsaXR5O3ZhciBXZj1VdSh7ZXhwYW5kRmFjdG9yOjIsaW5mbGF0ZUZhY3RvcjoyLG11bHRGYWN0b3I6MSxtYXhJdGVyYXRpb25zOjIwLGF0dHJpYnV0ZXM6W2Z1bmN0aW9uKGUpe3JldHVybiAxfV19KSxHZj1mdW5jdGlvbihlKXtyZXR1cm4gV2YoZSl9LEtmPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj0wO3I8dC5sZW5ndGg7cisrKW4rPXRbcl0oZSk7cmV0dXJuIG59LHFmPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MDtyPHQ7cisrKWVbcip0K3JdPW59LEpmPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHI9MDtyPHQ7cisrKXtuPTA7Zm9yKHZhciBpPTA7aTx0O2krKyluKz1lW2kqdCtyXTtmb3IodmFyIGE9MDthPHQ7YSsrKWVbYSp0K3JdPWVbYSp0K3JdL259fSxZZj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPUFycmF5KG4qbiksaT0wO2k8bjtpKyspe2Zvcih2YXIgYT0wO2E8bjthKyspcltpKm4rYV09MDtmb3IodmFyIG89MDtvPG47bysrKWZvcih2YXIgcz0wO3M8bjtzKyspcltpKm4rc10rPWVbaSpuK29dKnRbbypuK3NdfXJldHVybiByfSxYZj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPWUuc2xpY2UoMCksaT0xO2k8bjtpKyspZT1ZZihlLHIsdCk7cmV0dXJuIGV9LFpmPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9QXJyYXkodCp0KSxpPTA7aTx0KnQ7aSsrKXJbaV09ZVtpXSoqK247cmV0dXJuIEpmKHIsdCkscn0sUWY9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPTA7aTxuO2krKylpZihNYXRoLnJvdW5kKGVbaV0qMTAqKnIpLzEwKipyIT1NYXRoLnJvdW5kKHRbaV0qMTAqKnIpLzEwKipyKXJldHVybiExO3JldHVybiEwfSwkZj1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9W10sYT0wO2E8dDthKyspe2Zvcih2YXIgbz1bXSxzPTA7czx0O3MrKylNYXRoLnJvdW5kKGVbYSp0K3NdKjFlMykvMWUzPjAmJm8ucHVzaChuW3NdKTtvLmxlbmd0aCE9PTAmJmkucHVzaChyLmNvbGxlY3Rpb24obykpfXJldHVybiBpfSxlcD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKCF0W25dfHxlW25dLmlkKCkhPT10W25dLmlkKCkpcmV0dXJuITE7cmV0dXJuITB9LHRwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXQhPW4mJmVwKGVbdF0sZVtuXSkmJmUuc3BsaWNlKG4sMSk7cmV0dXJuIGV9LG5wPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLm5vZGVzKCksbj10aGlzLmVkZ2VzKCkscj10aGlzLmN5KCksaT1HZihlKSxhPXt9LG89MDtvPHQubGVuZ3RoO28rKylhW3Rbb10uaWQoKV09bztmb3IodmFyIHM9dC5sZW5ndGgsYz1zKnMsbD1BcnJheShjKSx1LGQ9MDtkPGM7ZCsrKWxbZF09MDtmb3IodmFyIGY9MDtmPG4ubGVuZ3RoO2YrKyl7dmFyIHA9bltmXSxtPWFbcC5zb3VyY2UoKS5pZCgpXSxoPWFbcC50YXJnZXQoKS5pZCgpXSxnPUtmKHAsaS5hdHRyaWJ1dGVzKTtsW20qcytoXSs9ZyxsW2gqcyttXSs9Z31xZihsLHMsaS5tdWx0RmFjdG9yKSxKZihsLHMpO2Zvcih2YXIgXz0hMCx2PTA7XyYmdjxpLm1heEl0ZXJhdGlvbnM7KV89ITEsdT1YZihsLHMsaS5leHBhbmRGYWN0b3IpLGw9WmYodSxzLGkuaW5mbGF0ZUZhY3RvciksUWYobCx1LGMsNCl8fChfPSEwKSx2Kys7dmFyIHk9JGYobCxzLHQscik7cmV0dXJuIHk9dHAoeSkseX0scnA9e21hcmtvdkNsdXN0ZXJpbmc6bnAsbWNsOm5wfSxpcD1mdW5jdGlvbihlKXtyZXR1cm4gZX0sYXA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5hYnModC1lKX0sb3A9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlK2FwKHQsbil9LHNwPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsobi10KSoqMn0sY3A9ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc3FydChlKX0sbHA9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1heChlLGFwKHQsbikpfSx1cD1mdW5jdGlvbihlLHQsbixyLGkpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06aXAsbz1yLHMsYyxsPTA7bDxlO2wrKylzPXQobCksYz1uKGwpLG89aShvLHMsYyk7cmV0dXJuIGEobyl9LGRwPXtldWNsaWRlYW46ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPj0yP3VwKGUsdCxuLDAsc3AsY3ApOnVwKGUsdCxuLDAsb3ApfSxzcXVhcmVkRXVjbGlkZWFuOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdXAoZSx0LG4sMCxzcCl9LG1hbmhhdHRhbjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHVwKGUsdCxuLDAsb3ApfSxtYXg6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB1cChlLHQsbiwtMS8wLGxwKX19O2RwW2BzcXVhcmVkLWV1Y2xpZGVhbmBdPWRwLnNxdWFyZWRFdWNsaWRlYW4sZHAuc3F1YXJlZGV1Y2xpZGVhbj1kcC5zcXVhcmVkRXVjbGlkZWFuO2Z1bmN0aW9uIGZwKGUsdCxuLHIsaSxhKXt2YXIgbz1EYyhlKT9lOmRwW2VdfHxkcC5ldWNsaWRlYW47cmV0dXJuIHQ9PT0wJiZEYyhlKT9vKGksYSk6byh0LG4scixpLGEpfXZhciBwcD1VdSh7azoyLG06MixzZW5zaXRpdml0eVRocmVzaG9sZDoxZS00LGRpc3RhbmNlOmBldWNsaWRlYW5gLG1heEl0ZXJhdGlvbnM6MTAsYXR0cmlidXRlczpbXSx0ZXN0TW9kZTohMSx0ZXN0Q2VudHJvaWRzOm51bGx9KSxtcD1mdW5jdGlvbihlKXtyZXR1cm4gcHAoZSl9LGhwPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGE9aT09PWBrTWVkb2lkc2A/ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV0obil9OmZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSxvPWZ1bmN0aW9uKGUpe3JldHVybiByW2VdKHQpfSxzPW4sYz10O3JldHVybiBmcChlLHIubGVuZ3RoLGEsbyxzLGMpfSxncD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4ubGVuZ3RoLGk9QXJyYXkociksYT1BcnJheShyKSxvPUFycmF5KHQpLHM9bnVsbCxjPTA7YzxyO2MrKylpW2NdPWUubWluKG5bY10pLnZhbHVlLGFbY109ZS5tYXgobltjXSkudmFsdWU7Zm9yKHZhciBsPTA7bDx0O2wrKyl7cz1bXTtmb3IodmFyIHU9MDt1PHI7dSsrKXNbdV09TWF0aC5yYW5kb20oKSooYVt1XS1pW3VdKStpW3VdO29bbF09c31yZXR1cm4gb30sX3A9ZnVuY3Rpb24oZSx0LG4scixpKXtmb3IodmFyIGE9MS8wLG89MCxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBjPWhwKG4sZSx0W3NdLHIsaSk7YzxhJiYoYT1jLG89cyl9cmV0dXJuIG99LHZwPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT1udWxsLGE9MDthPHQubGVuZ3RoO2ErKylpPXRbYV0sbltpLmlkKCldPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSx5cD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIE1hdGguYWJzKHQtZSk8PW59LGJwPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylmb3IodmFyIGk9MDtpPGVbcl0ubGVuZ3RoO2krKylpZihNYXRoLmFicyhlW3JdW2ldLXRbcl1baV0pPm4pcmV0dXJuITE7cmV0dXJuITB9LHhwPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MDtyPG47cisrKWlmKGU9PT10W3JdKXJldHVybiEwO3JldHVybiExfSxTcD1mdW5jdGlvbihlLHQpe3ZhciBuPUFycmF5KHQpO2lmKGUubGVuZ3RoPDUwKWZvcih2YXIgcj0wO3I8dDtyKyspe2Zvcih2YXIgaT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO3hwKGksbixyKTspaT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO25bcl09aX1lbHNlIGZvcih2YXIgYT0wO2E8dDthKyspblthXT1lW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSplLmxlbmd0aCldO3JldHVybiBufSxDcD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT0wO2k8dC5sZW5ndGg7aSsrKXIrPWhwKGBtYW5oYXR0YW5gLHRbaV0sZSxuLGBrTWVkb2lkc2ApO3JldHVybiByfSx3cD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmN5KCksbj10aGlzLm5vZGVzKCkscj1udWxsLGk9bXAoZSksYT1BcnJheShpLmspLG89e30scztpLnRlc3RNb2RlP3R5cGVvZiBpLnRlc3RDZW50cm9pZHM9PWBudW1iZXJgPyhpLnRlc3RDZW50cm9pZHMscz1ncChuLGkuayxpLmF0dHJpYnV0ZXMpKTpzPXZjKGkudGVzdENlbnRyb2lkcyk9PT1gb2JqZWN0YD9pLnRlc3RDZW50cm9pZHM6Z3AobixpLmssaS5hdHRyaWJ1dGVzKTpzPWdwKG4saS5rLGkuYXR0cmlidXRlcyk7Zm9yKHZhciBjPSEwLGw9MDtjJiZsPGkubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgdT0wO3U8bi5sZW5ndGg7dSsrKXI9blt1XSxvW3IuaWQoKV09X3AocixzLGkuZGlzdGFuY2UsaS5hdHRyaWJ1dGVzLGBrTWVhbnNgKTtjPSExO2Zvcih2YXIgZD0wO2Q8aS5rO2QrKyl7dmFyIGY9dnAoZCxuLG8pO2lmKGYubGVuZ3RoIT09MCl7Zm9yKHZhciBwPWkuYXR0cmlidXRlcy5sZW5ndGgsbT1zW2RdLGg9QXJyYXkocCksZz1BcnJheShwKSxfPTA7XzxwO18rKyl7Z1tfXT0wO2Zvcih2YXIgdj0wO3Y8Zi5sZW5ndGg7disrKXI9Zlt2XSxnW19dKz1pLmF0dHJpYnV0ZXNbX10ocik7aFtfXT1nW19dL2YubGVuZ3RoLHlwKGhbX10sbVtfXSxpLnNlbnNpdGl2aXR5VGhyZXNob2xkKXx8KGM9ITApfXNbZF09aCxhW2RdPXQuY29sbGVjdGlvbihmKX19bCsrfXJldHVybiBhfSxUcD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmN5KCksbj10aGlzLm5vZGVzKCkscj1udWxsLGk9bXAoZSksYT1BcnJheShpLmspLG8scz17fSxjLGw9QXJyYXkoaS5rKTtpLnRlc3RNb2RlP3R5cGVvZiBpLnRlc3RDZW50cm9pZHM9PWBudW1iZXJgfHwobz12YyhpLnRlc3RDZW50cm9pZHMpPT09YG9iamVjdGA/aS50ZXN0Q2VudHJvaWRzOlNwKG4saS5rKSk6bz1TcChuLGkuayk7Zm9yKHZhciB1PSEwLGQ9MDt1JiZkPGkubWF4SXRlcmF0aW9uczspe2Zvcih2YXIgZj0wO2Y8bi5sZW5ndGg7ZisrKXI9bltmXSxzW3IuaWQoKV09X3AocixvLGkuZGlzdGFuY2UsaS5hdHRyaWJ1dGVzLGBrTWVkb2lkc2ApO3U9ITE7Zm9yKHZhciBwPTA7cDxvLmxlbmd0aDtwKyspe3ZhciBtPXZwKHAsbixzKTtpZihtLmxlbmd0aCE9PTApe2xbcF09Q3Aob1twXSxtLGkuYXR0cmlidXRlcyk7Zm9yKHZhciBoPTA7aDxtLmxlbmd0aDtoKyspYz1DcChtW2hdLG0saS5hdHRyaWJ1dGVzKSxjPGxbcF0mJihsW3BdPWMsb1twXT1tW2hdLHU9ITApO2FbcF09dC5jb2xsZWN0aW9uKG0pfX1kKyt9cmV0dXJuIGF9LEVwPWZ1bmN0aW9uKGUsdCxuLHIsaSl7Zm9yKHZhciBhLG8scz0wO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgYz0wO2M8ZS5sZW5ndGg7YysrKXJbc11bY109bltzXVtjXSoqK2kubTtmb3IodmFyIGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIHU9MDt1PGkuYXR0cmlidXRlcy5sZW5ndGg7dSsrKXthPTAsbz0wO2Zvcih2YXIgZD0wO2Q8dC5sZW5ndGg7ZCsrKWErPXJbZF1bbF0qaS5hdHRyaWJ1dGVzW3VdKHRbZF0pLG8rPXJbZF1bbF07ZVtsXVt1XT1hL299fSxEcD1mdW5jdGlvbihlLHQsbixyLGkpe2Zvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKXRbYV09ZVthXS5zbGljZSgpO2Zvcih2YXIgbyxzLGMsbD0yLyhpLm0tMSksdT0wO3U8bi5sZW5ndGg7dSsrKWZvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXtvPTA7Zm9yKHZhciBmPTA7ZjxuLmxlbmd0aDtmKyspcz1ocChpLmRpc3RhbmNlLHJbZF0sblt1XSxpLmF0dHJpYnV0ZXMsYGNtZWFuc2ApLGM9aHAoaS5kaXN0YW5jZSxyW2RdLG5bZl0saS5hdHRyaWJ1dGVzLGBjbWVhbnNgKSxvKz0ocy9jKSoqK2w7ZVtkXVt1XT0xL299fSxPcD1mdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9QXJyYXkobi5rKSxhPTA7YTxpLmxlbmd0aDthKyspaVthXT1bXTtmb3IodmFyIG8scyxjPTA7Yzx0Lmxlbmd0aDtjKyspe289LTEvMCxzPS0xO2Zvcih2YXIgbD0wO2w8dFswXS5sZW5ndGg7bCsrKXRbY11bbF0+byYmKG89dFtjXVtsXSxzPWwpO2lbc10ucHVzaChlW2NdKX1mb3IodmFyIHU9MDt1PGkubGVuZ3RoO3UrKylpW3VdPXIuY29sbGVjdGlvbihpW3VdKTtyZXR1cm4gaX0sa3A9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxyPW1wKGUpLGksYSxvLHM9QXJyYXkobi5sZW5ndGgpLGMsbD0wO2w8bi5sZW5ndGg7bCsrKXNbbF09QXJyYXkoci5rKTtvPUFycmF5KG4ubGVuZ3RoKTtmb3IodmFyIHU9MDt1PG4ubGVuZ3RoO3UrKylvW3VdPUFycmF5KHIuayk7Zm9yKHZhciBkPTA7ZDxuLmxlbmd0aDtkKyspe2Zvcih2YXIgZj0wLHA9MDtwPHIuaztwKyspb1tkXVtwXT1NYXRoLnJhbmRvbSgpLGYrPW9bZF1bcF07Zm9yKHZhciBtPTA7bTxyLms7bSsrKW9bZF1bbV09b1tkXVttXS9mfWE9QXJyYXkoci5rKTtmb3IodmFyIGg9MDtoPHIuaztoKyspYVtoXT1BcnJheShyLmF0dHJpYnV0ZXMubGVuZ3RoKTtjPUFycmF5KG4ubGVuZ3RoKTtmb3IodmFyIGc9MDtnPG4ubGVuZ3RoO2crKyljW2ddPUFycmF5KHIuayk7Zm9yKHZhciBfPSEwLHY9MDtfJiZ2PHIubWF4SXRlcmF0aW9uczspXz0hMSxFcChhLG4sbyxjLHIpLERwKG8scyxhLG4sciksYnAobyxzLHIuc2Vuc2l0aXZpdHlUaHJlc2hvbGQpfHwoXz0hMCksdisrO3JldHVybiBpPU9wKG4sbyxyLHQpLHtjbHVzdGVyczppLGRlZ3JlZU9mTWVtYmVyc2hpcDpvfX0sQXA9e2tNZWFuczp3cCxrTWVkb2lkczpUcCxmdXp6eUNNZWFuczprcCxmY206a3B9LGpwPVV1KHtkaXN0YW5jZTpgZXVjbGlkZWFuYCxsaW5rYWdlOmBtaW5gLG1vZGU6YHRocmVzaG9sZGAsdGhyZXNob2xkOjEvMCxhZGREZW5kcm9ncmFtOiExLGRlbmRyb2dyYW1EZXB0aDowLGF0dHJpYnV0ZXM6W119KSxNcD17c2luZ2xlOmBtaW5gLGNvbXBsZXRlOmBtYXhgfSxOcD1mdW5jdGlvbihlKXt2YXIgdD1qcChlKSxuPU1wW3QubGlua2FnZV07cmV0dXJuIG4hPW51bGwmJih0LmxpbmthZ2U9biksdH0sUHA9ZnVuY3Rpb24oZSx0LG4scixpKXtmb3IodmFyIGE9MCxvPTEvMCxzLGM9aS5hdHRyaWJ1dGVzLGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnAoaS5kaXN0YW5jZSxjLmxlbmd0aCxmdW5jdGlvbih0KXtyZXR1cm4gY1t0XShlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGNbZV0odCl9LGUsdCl9LHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGQ9ZVt1XS5rZXksZj1uW2RdW3JbZF1dO2Y8byYmKGE9ZCxvPWYpfWlmKGkubW9kZT09PWB0aHJlc2hvbGRgJiZvPj1pLnRocmVzaG9sZHx8aS5tb2RlPT09YGRlbmRyb2dyYW1gJiZlLmxlbmd0aD09PTEpcmV0dXJuITE7dmFyIHA9dFthXSxtPXRbclthXV0saD1pLm1vZGU9PT1gZGVuZHJvZ3JhbWA/e2xlZnQ6cCxyaWdodDptLGtleTpwLmtleX06e3ZhbHVlOnAudmFsdWUuY29uY2F0KG0udmFsdWUpLGtleTpwLmtleX07ZVtwLmluZGV4XT1oLGUuc3BsaWNlKG0uaW5kZXgsMSksdFtwLmtleV09aDtmb3IodmFyIGc9MDtnPGUubGVuZ3RoO2crKyl7dmFyIF89ZVtnXTtwLmtleT09PV8ua2V5P3M9MS8wOmkubGlua2FnZT09PWBtaW5gPyhzPW5bcC5rZXldW18ua2V5XSxuW3Aua2V5XVtfLmtleV0+blttLmtleV1bXy5rZXldJiYocz1uW20ua2V5XVtfLmtleV0pKTppLmxpbmthZ2U9PT1gbWF4YD8ocz1uW3Aua2V5XVtfLmtleV0sbltwLmtleV1bXy5rZXldPG5bbS5rZXldW18ua2V5XSYmKHM9blttLmtleV1bXy5rZXldKSk6cz1pLmxpbmthZ2U9PT1gbWVhbmA/KG5bcC5rZXldW18ua2V5XSpwLnNpemUrblttLmtleV1bXy5rZXldKm0uc2l6ZSkvKHAuc2l6ZSttLnNpemUpOmkubW9kZT09PWBkZW5kcm9ncmFtYD9sKF8udmFsdWUscC52YWx1ZSk6bChfLnZhbHVlWzBdLHAudmFsdWVbMF0pLG5bcC5rZXldW18ua2V5XT1uW18ua2V5XVtwLmtleV09c31mb3IodmFyIHY9MDt2PGUubGVuZ3RoO3YrKyl7dmFyIHk9ZVt2XS5rZXk7aWYoclt5XT09PXAua2V5fHxyW3ldPT09bS5rZXkpe2Zvcih2YXIgYj15LHg9MDt4PGUubGVuZ3RoO3grKyl7dmFyIFM9ZVt4XS5rZXk7blt5XVtTXTxuW3ldW2JdJiYoYj1TKX1yW3ldPWJ9ZVt2XS5pbmRleD12fXJldHVybiBwLmtleT1tLmtleT1wLmluZGV4PW0uaW5kZXg9bnVsbCwhMH0sRnA9ZnVuY3Rpb24oZSx0LG4pe2UmJihlLnZhbHVlP3QucHVzaChlLnZhbHVlKTooZS5sZWZ0JiZGcChlLmxlZnQsdCksZS5yaWdodCYmRnAoZS5yaWdodCx0KSkpfSxJcD1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybmBgO2lmKGUubGVmdCYmZS5yaWdodCl7dmFyIG49SXAoZS5sZWZ0LHQpLHI9SXAoZS5yaWdodCx0KSxpPXQuYWRkKHtncm91cDpgbm9kZXNgLGRhdGE6e2lkOm4rYCxgK3J9fSk7cmV0dXJuIHQuYWRkKHtncm91cDpgZWRnZXNgLGRhdGE6e3NvdXJjZTpuLHRhcmdldDppLmlkKCl9fSksdC5hZGQoe2dyb3VwOmBlZGdlc2AsZGF0YTp7c291cmNlOnIsdGFyZ2V0OmkuaWQoKX19KSxpLmlkKCl9aWYoZS52YWx1ZSlyZXR1cm4gZS52YWx1ZS5pZCgpfSxMcD1mdW5jdGlvbihlLHQsbil7aWYoIWUpcmV0dXJuW107dmFyIHI9W10saT1bXSxhPVtdO3JldHVybiB0PT09MD8oZS5sZWZ0JiZGcChlLmxlZnQsciksZS5yaWdodCYmRnAoZS5yaWdodCxpKSxhPXIuY29uY2F0KGkpLFtuLmNvbGxlY3Rpb24oYSldKTp0PT09MT9lLnZhbHVlP1tuLmNvbGxlY3Rpb24oZS52YWx1ZSldOihlLmxlZnQmJkZwKGUubGVmdCxyKSxlLnJpZ2h0JiZGcChlLnJpZ2h0LGkpLFtuLmNvbGxlY3Rpb24ociksbi5jb2xsZWN0aW9uKGkpXSk6ZS52YWx1ZT9bbi5jb2xsZWN0aW9uKGUudmFsdWUpXTooZS5sZWZ0JiYocj1McChlLmxlZnQsdC0xLG4pKSxlLnJpZ2h0JiYoaT1McChlLnJpZ2h0LHQtMSxuKSksci5jb25jYXQoaSkpfSxScD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5jeSgpLG49dGhpcy5ub2RlcygpLHI9TnAoZSksaT1yLmF0dHJpYnV0ZXMsYT1mdW5jdGlvbihlLHQpe3JldHVybiBmcChyLmRpc3RhbmNlLGkubGVuZ3RoLGZ1bmN0aW9uKHQpe3JldHVybiBpW3RdKGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gaVtlXSh0KX0sZSx0KX0sbz1bXSxzPVtdLGM9W10sbD1bXSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBkPXt2YWx1ZTpyLm1vZGU9PT1gZGVuZHJvZ3JhbWA/blt1XTpbblt1XV0sa2V5OnUsaW5kZXg6dX07b1t1XT1kLGxbdV09ZCxzW3VdPVtdLGNbdV09MH1mb3IodmFyIGY9MDtmPG8ubGVuZ3RoO2YrKylmb3IodmFyIHA9MDtwPD1mO3ArKyl7dmFyIG09dm9pZCAwO209ci5tb2RlPT09YGRlbmRyb2dyYW1gP2Y9PT1wPzEvMDphKG9bZl0udmFsdWUsb1twXS52YWx1ZSk6Zj09PXA/MS8wOmEob1tmXS52YWx1ZVswXSxvW3BdLnZhbHVlWzBdKSxzW2ZdW3BdPW0sc1twXVtmXT1tLG08c1tmXVtjW2ZdXSYmKGNbZl09cCl9Zm9yKHZhciBoPVBwKG8sbCxzLGMscik7aDspaD1QcChvLGwscyxjLHIpO3ZhciBnO3JldHVybiByLm1vZGU9PT1gZGVuZHJvZ3JhbWA/KGc9THAob1swXSxyLmRlbmRyb2dyYW1EZXB0aCx0KSxyLmFkZERlbmRyb2dyYW0mJklwKG9bMF0sdCkpOihnPUFycmF5KG8ubGVuZ3RoKSxvLmZvckVhY2goZnVuY3Rpb24oZSxuKXtlLmtleT1lLmluZGV4PW51bGwsZ1tuXT10LmNvbGxlY3Rpb24oZS52YWx1ZSl9KSksZ30senA9e2hpZXJhcmNoaWNhbENsdXN0ZXJpbmc6UnAsaGNhOlJwfSxCcD1VdSh7ZGlzdGFuY2U6YGV1Y2xpZGVhbmAscHJlZmVyZW5jZTpgbWVkaWFuYCxkYW1waW5nOi44LG1heEl0ZXJhdGlvbnM6MWUzLG1pbkl0ZXJhdGlvbnM6MTAwLGF0dHJpYnV0ZXM6W119KSxWcD1mdW5jdGlvbihlKXt2YXIgdD1lLmRhbXBpbmcsbj1lLnByZWZlcmVuY2U7LjU8PXQmJnQ8MXx8UHUoYERhbXBpbmcgbXVzdCByYW5nZSBvbiBbMC41LCAxKS4gIEdvdDogJHt0fWApO3ZhciByPVtgbWVkaWFuYCxgbWVhbmAsYG1pbmAsYG1heGBdO3JldHVybiByLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1ufSl8fFEobil8fFB1KGBQcmVmZXJlbmNlIG11c3QgYmUgb25lIG9mIFske3IubWFwKGZ1bmN0aW9uKGUpe3JldHVybmAnJHtlfSdgfSkuam9pbihgLCBgKX1dIG9yIGEgbnVtYmVyLiAgR290OiAke259YCksQnAoZSl9LEhwPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHJbdF0oZSl9O3JldHVybi1mcChlLHIubGVuZ3RoLGZ1bmN0aW9uKGUpe3JldHVybiBpKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBpKG4sZSl9LHQsbil9LFVwPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbDtyZXR1cm4gbj10PT09YG1lZGlhbmA/QWQoZSk6dD09PWBtZWFuYD9rZChlKTp0PT09YG1pbmA/RGQoZSk6dD09PWBtYXhgP09kKGUpOnQsbn0sV3A9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTA7aTxlO2krKyl0W2kqZStpXStuW2kqZStpXT4wJiZyLnB1c2goaSk7cmV0dXJuIHJ9LEdwPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wO2k8ZTtpKyspe2Zvcih2YXIgYT0tMSxvPS0xLzAscz0wO3M8bi5sZW5ndGg7cysrKXt2YXIgYz1uW3NdO3RbaSplK2NdPm8mJihhPWMsbz10W2kqZStjXSl9YT4wJiZyLnB1c2goYSl9Zm9yKHZhciBsPTA7bDxuLmxlbmd0aDtsKyspcltuW2xdXT1uW2xdO3JldHVybiByfSxLcD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPUdwKGUsdCxuKSxpPTA7aTxuLmxlbmd0aDtpKyspe2Zvcih2YXIgYT1bXSxvPTA7bzxyLmxlbmd0aDtvKyspcltvXT09PW5baV0mJmEucHVzaChvKTtmb3IodmFyIHM9LTEsYz0tMS8wLGw9MDtsPGEubGVuZ3RoO2wrKyl7Zm9yKHZhciB1PTAsZD0wO2Q8YS5sZW5ndGg7ZCsrKXUrPXRbYVtkXSplK2FbbF1dO3U+YyYmKHM9bCxjPXUpfW5baV09YVtzXX1yZXR1cm4gcj1HcChlLHQsbikscn0scXA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY3koKSxuPXRoaXMubm9kZXMoKSxyPVZwKGUpLGk9e30sYT0wO2E8bi5sZW5ndGg7YSsrKWlbblthXS5pZCgpXT1hO2Zvcih2YXIgbz1uLmxlbmd0aCxzPW8qbyxjPUFycmF5KHMpLGwsdSxkLGY9MDtmPHM7ZisrKWNbZl09LTEvMDtmb3IodmFyIHA9MDtwPG87cCsrKWZvcih2YXIgbT0wO208bzttKyspcCE9PW0mJihjW3AqbyttXT1IcChyLmRpc3RhbmNlLG5bcF0sblttXSxyLmF0dHJpYnV0ZXMpKTtsPVVwKGMsci5wcmVmZXJlbmNlKTtmb3IodmFyIGg9MDtoPG87aCsrKWNbaCpvK2hdPWw7dT1BcnJheShzKTtmb3IodmFyIGc9MDtnPHM7ZysrKXVbZ109MDtkPUFycmF5KHMpO2Zvcih2YXIgXz0wO188cztfKyspZFtfXT0wO2Zvcih2YXIgdj1BcnJheShvKSx5PUFycmF5KG8pLGI9QXJyYXkobykseD0wO3g8bzt4Kyspdlt4XT0wLHlbeF09MCxiW3hdPTA7Zm9yKHZhciBTPUFycmF5KG8qci5taW5JdGVyYXRpb25zKSxDPTA7QzxTLmxlbmd0aDtDKyspU1tDXT0wO2Zvcih2YXIgdz0wO3c8ci5tYXhJdGVyYXRpb25zO3crKyl7Zm9yKHZhciBUPTA7VDxvO1QrKyl7Zm9yKHZhciBFPS0xLzAsRD0tMS8wLE89LTEsaz0wLEE9MDtBPG87QSsrKXZbQV09dVtUKm8rQV0saz1kW1QqbytBXStjW1QqbytBXSxrPj1FPyhEPUUsRT1rLE89QSk6az5EJiYoRD1rKTtmb3IodmFyIGo9MDtqPG87aisrKXVbVCpvK2pdPSgxLXIuZGFtcGluZykqKGNbVCpvK2pdLUUpK3IuZGFtcGluZyp2W2pdO3VbVCpvK09dPSgxLXIuZGFtcGluZykqKGNbVCpvK09dLUQpK3IuZGFtcGluZyp2W09dfWZvcih2YXIgTT0wO008bztNKyspe2Zvcih2YXIgTj0wLFA9MDtQPG87UCsrKXZbUF09ZFtQKm8rTV0seVtQXT1NYXRoLm1heCgwLHVbUCpvK01dKSxOKz15W1BdO04tPXlbTV0seVtNXT11W00qbytNXSxOKz15W01dO2Zvcih2YXIgRj0wO0Y8bztGKyspZFtGKm8rTV09KDEtci5kYW1waW5nKSpNYXRoLm1pbigwLE4teVtGXSkrci5kYW1waW5nKnZbRl07ZFtNKm8rTV09KDEtci5kYW1waW5nKSooTi15W01dKStyLmRhbXBpbmcqdltNXX1mb3IodmFyIEk9MCxMPTA7TDxvO0wrKyl7dmFyIFI9KyhkW0wqbytMXSt1W0wqbytMXT4wKTtTW3clci5taW5JdGVyYXRpb25zKm8rTF09UixJKz1SfWlmKEk+MCYmKHc+PXIubWluSXRlcmF0aW9ucy0xfHx3PT1yLm1heEl0ZXJhdGlvbnMtMSkpe2Zvcih2YXIgej0wLEI9MDtCPG87QisrKXtiW0JdPTA7Zm9yKHZhciBWPTA7VjxyLm1pbkl0ZXJhdGlvbnM7VisrKWJbQl0rPVNbVipvK0JdOyhiW0JdPT09MHx8YltCXT09PXIubWluSXRlcmF0aW9ucykmJnorK31pZih6PT09bylicmVha319Zm9yKHZhciBIPVdwKG8sdSxkKSxVPUtwKG8sYyxIKSxXPXt9LGVlPTA7ZWU8SC5sZW5ndGg7ZWUrKylXW0hbZWVdXT1bXTtmb3IodmFyIEc9MDtHPG4ubGVuZ3RoO0crKyl7dmFyIHRlPVVbaVtuW0ddLmlkKCldXTt0ZSE9bnVsbCYmV1t0ZV0ucHVzaChuW0ddKX1mb3IodmFyIG5lPUFycmF5KEgubGVuZ3RoKSxyZT0wO3JlPEgubGVuZ3RoO3JlKyspbmVbcmVdPXQuY29sbGVjdGlvbihXW0hbcmVdXSk7cmV0dXJuIG5lfSxKcD17YWZmaW5pdHlQcm9wYWdhdGlvbjpxcCxhcDpxcH0sWXA9VXUoe3Jvb3Q6dm9pZCAwLGRpcmVjdGVkOiExfSksWHA9e2hpZXJob2x6ZXI6ZnVuY3Rpb24oZSl7aWYoIWtjKGUpKXt2YXIgdD1hcmd1bWVudHM7ZT17cm9vdDp0WzBdLGRpcmVjdGVkOnRbMV19fXZhciBuPVlwKGUpLHI9bi5yb290LGk9bi5kaXJlY3RlZCxhPXRoaXMsbz0hMSxzLGMsbDtyJiYobD1aKHIpP3RoaXMuZmlsdGVyKHIpWzBdLmlkKCk6clswXS5pZCgpKTt2YXIgdT17fSxkPXt9LGY9YS5lZGdlcygpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXMoZS5zb3VyY2UoKSkmJmEuaGFzKGUudGFyZ2V0KCkpfSk7aT9hLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZCgpO2lmKGUuaXNOb2RlKCkpe3ZhciBuPWUuaW5jb21lcnMoKS5lZGdlcygpLmludGVyc2VjdGlvbihmKSxyPWUub3V0Z29lcnMoKS5lZGdlcygpLmludGVyc2VjdGlvbihmKSxpPW4ubGVuZ3RoLGE9ci5sZW5ndGgsbD1pLWEscD1hLWk7bD09MT9zP289ITA6cz10OnA9PTE/Yz9vPSEwOmM9dDoocD4xfHxsPjEpJiYobz0hMCksdVt0XT1bXSxyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHVbdF0ucHVzaChlLmlkKCkpfSl9ZWxzZSBkW3RdPVt2b2lkIDAsZS50YXJnZXQoKS5pZCgpXX0pOmEuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLmlkKCk7aWYoZS5pc05vZGUoKSl7dmFyIG49ZS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihmKTsobi5sZW5ndGgrbi5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNMb29wKCl9KS5sZW5ndGgpJTImJihzP2M/bz0hMDpjPXQ6cz10KSx1W3RdPVtdLG4uZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdVt0XS5wdXNoKGUuaWQoKSl9KX1lbHNlIGRbdF09W2Uuc291cmNlKCkuaWQoKSxlLnRhcmdldCgpLmlkKCldfSk7dmFyIHA9e2ZvdW5kOiExLHRyYWlsOnZvaWQgMH07aWYobylyZXR1cm4gcDtpZihjJiZzKXtpZihpKXtpZihsJiZjIT1sKXJldHVybiBwO2w9Y31lbHNlIGlmKGwmJmMhPWwmJnMhPWwpcmV0dXJuIHA7ZWxzZSBsfHw9Y31lbHNlIGx8fD1hWzBdLmlkKCk7dmFyIG09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUsbj1bZV0scixhLG87dVt0XS5sZW5ndGg7KXI9dVt0XS5zaGlmdCgpLGE9ZFtyXVswXSxvPWRbcl1bMV0sdD09bz8haSYmdCE9YSYmKHVbYV09dVthXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPXJ9KSx0PWEpOih1W29dPXVbb10uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT1yfSksdD1vKSxuLnVuc2hpZnQociksbi51bnNoaWZ0KHQpO3JldHVybiBufSxoPVtdLGc9W107Zm9yKGc9bShsKTtnLmxlbmd0aCE9MTspdVtnWzBdXS5sZW5ndGg9PTA/KGgudW5zaGlmdChhLmdldEVsZW1lbnRCeUlkKGcuc2hpZnQoKSkpLGgudW5zaGlmdChhLmdldEVsZW1lbnRCeUlkKGcuc2hpZnQoKSkpKTpnPW0oZy5zaGlmdCgpKS5jb25jYXQoZyk7Zm9yKHZhciBfIGluIGgudW5zaGlmdChhLmdldEVsZW1lbnRCeUlkKGcuc2hpZnQoKSkpLHUpaWYodVtfXS5sZW5ndGgpcmV0dXJuIHA7cmV0dXJuIHAuZm91bmQ9ITAscC50cmFpbD10aGlzLnNwYXduKGgsITApLHB9fSxacD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD17fSxuPTAscj0wLGk9W10sYT1bXSxvPXt9LHM9ZnVuY3Rpb24obixyKXtmb3IodmFyIG89YS5sZW5ndGgtMSxzPVtdLGM9ZS5zcGF3bigpO2Fbb10ueCE9bnx8YVtvXS55IT1yOylzLnB1c2goYS5wb3AoKS5lZGdlKSxvLS07cy5wdXNoKGEucG9wKCkuZWRnZSkscy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4uY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZSk7Yy5tZXJnZShuKSxyLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9bi5pZCgpLGk9bi5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKTtjLm1lcmdlKG4pLHRbcl0uY3V0VmVydGV4P2MubWVyZ2UoaS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNMb29wKCl9KSk6Yy5tZXJnZShpKX0pfSksaS5wdXNoKGMpfSxjPWZ1bmN0aW9uKGwsdSxkKXtsPT09ZCYmKHIrPTEpLHRbdV09e2lkOm4sbG93Om4rKyxjdXRWZXJ0ZXg6ITF9O3ZhciBmPWUuZ2V0RWxlbWVudEJ5SWQodSkuY29ubmVjdGVkRWRnZXMoKS5pbnRlcnNlY3Rpb24oZSk7aWYoZi5zaXplKCk9PT0wKWkucHVzaChlLnNwYXduKGUuZ2V0RWxlbWVudEJ5SWQodSkpKTtlbHNle3ZhciBwLG0saCxnO2YuZm9yRWFjaChmdW5jdGlvbihlKXtwPWUuc291cmNlKCkuaWQoKSxtPWUudGFyZ2V0KCkuaWQoKSxoPXA9PT11P206cCxoIT09ZCYmKGc9ZS5pZCgpLG9bZ118fChvW2ddPSEwLGEucHVzaCh7eDp1LHk6aCxlZGdlOmV9KSksaCBpbiB0P3RbdV0ubG93PU1hdGgubWluKHRbdV0ubG93LHRbaF0uaWQpOihjKGwsaCx1KSx0W3VdLmxvdz1NYXRoLm1pbih0W3VdLmxvdyx0W2hdLmxvdyksdFt1XS5pZDw9dFtoXS5sb3cmJih0W3VdLmN1dFZlcnRleD0hMCxzKHUsaCkpKSl9KX19O2UuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmlzTm9kZSgpKXt2YXIgbj1lLmlkKCk7biBpbiB0fHwocj0wLGMobixuKSx0W25dLmN1dFZlcnRleD1yPjEpfX0pO3ZhciBsPU9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdFtlXS5jdXRWZXJ0ZXh9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0RWxlbWVudEJ5SWQodCl9KTtyZXR1cm57Y3V0OmUuc3Bhd24obCksY29tcG9uZW50czppfX0sUXA9e2hvcGNyb2Z0VGFyamFuQmljb25uZWN0ZWQ6WnAsaHRiYzpacCxodGI6WnAsaG9wY3JvZnRUYXJqYW5CaWNvbm5lY3RlZENvbXBvbmVudHM6WnB9LCRwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXt9LG49MCxyPVtdLGk9W10sYT1lLnNwYXduKGUpLG89ZnVuY3Rpb24ocyl7aWYoaS5wdXNoKHMpLHRbc109e2luZGV4Om4sbG93Om4rKyxleHBsb3JlZDohMX0sZS5nZXRFbGVtZW50QnlJZChzKS5jb25uZWN0ZWRFZGdlcygpLmludGVyc2VjdGlvbihlKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0KCkuaWQoKTtuIT09cyYmKG4gaW4gdHx8byhuKSx0W25dLmV4cGxvcmVkfHwodFtzXS5sb3c9TWF0aC5taW4odFtzXS5sb3csdFtuXS5sb3cpKSl9KSx0W3NdLmluZGV4PT09dFtzXS5sb3cpe2Zvcih2YXIgYz1lLnNwYXduKCk7Oyl7dmFyIGw9aS5wb3AoKTtpZihjLm1lcmdlKGUuZ2V0RWxlbWVudEJ5SWQobCkpLHRbbF0ubG93PXRbc10uaW5kZXgsdFtsXS5leHBsb3JlZD0hMCxsPT09cylicmVha312YXIgdT1jLmVkZ2VzV2l0aChjKSxkPWMubWVyZ2UodSk7ci5wdXNoKGQpLGE9YS5kaWZmZXJlbmNlKGQpfX07cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmlzTm9kZSgpKXt2YXIgbj1lLmlkKCk7biBpbiB0fHxvKG4pfX0pLHtjdXQ6YSxjb21wb25lbnRzOnJ9fSxlbT17dGFyamFuU3Ryb25nbHlDb25uZWN0ZWQ6JHAsdHNjOiRwLHRzY2M6JHAsdGFyamFuU3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzOiRwfSx0bT17fTtbdGQsZGQsZmQsbWQsZ2QsdmQsU2QsTGYsemYsVmYsVWYscnAsQXAsenAsSnAsWHAsUXAsZW1dLmZvckVhY2goZnVuY3Rpb24oZSl7YWwodG0sZSl9KTt2YXIgbm09MCxybT0xLGltPTIsYW09ZnVuY3Rpb24oZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYW0pKXJldHVybiBuZXcgYW0oZSk7dGhpcy5pZD1gVGhlbmFibGUvMS4wLjdgLHRoaXMuc3RhdGU9bm0sdGhpcy5mdWxmaWxsVmFsdWU9dm9pZCAwLHRoaXMucmVqZWN0UmVhc29uPXZvaWQgMCx0aGlzLm9uRnVsZmlsbGVkPVtdLHRoaXMub25SZWplY3RlZD1bXSx0aGlzLnByb3h5PXt0aGVuOnRoaXMudGhlbi5iaW5kKHRoaXMpfSx0eXBlb2YgZT09YGZ1bmN0aW9uYCYmZS5jYWxsKHRoaXMsdGhpcy5mdWxmaWxsLmJpbmQodGhpcyksdGhpcy5yZWplY3QuYmluZCh0aGlzKSl9O2FtLnByb3RvdHlwZT17ZnVsZmlsbDpmdW5jdGlvbihlKXtyZXR1cm4gb20odGhpcyxybSxgZnVsZmlsbFZhbHVlYCxlKX0scmVqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiBvbSh0aGlzLGltLGByZWplY3RSZWFzb25gLGUpfSx0aGVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW5ldyBhbTtyZXR1cm4gbi5vbkZ1bGZpbGxlZC5wdXNoKGxtKGUscixgZnVsZmlsbGApKSxuLm9uUmVqZWN0ZWQucHVzaChsbSh0LHIsYHJlamVjdGApKSxzbShuKSxyLnByb3h5fX07dmFyIG9tPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLnN0YXRlPT09bm0mJihlLnN0YXRlPXQsZVtuXT1yLHNtKGUpKSxlfSxzbT1mdW5jdGlvbihlKXtlLnN0YXRlPT09cm0/Y20oZSxgb25GdWxmaWxsZWRgLGUuZnVsZmlsbFZhbHVlKTplLnN0YXRlPT09aW0mJmNtKGUsYG9uUmVqZWN0ZWRgLGUucmVqZWN0UmVhc29uKX0sY209ZnVuY3Rpb24oZSx0LG4pe2lmKGVbdF0ubGVuZ3RoIT09MCl7dmFyIHI9ZVt0XTtlW3RdPVtdO3ZhciBpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXShuKX07dHlwZW9mIHNldEltbWVkaWF0ZT09YGZ1bmN0aW9uYD9zZXRJbW1lZGlhdGUoaSk6c2V0VGltZW91dChpLDApfX0sbG09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXtpZih0eXBlb2YgZSE9YGZ1bmN0aW9uYCl0W25dLmNhbGwodCxyKTtlbHNle3ZhciBpO3RyeXtpPWUocil9Y2F0Y2goZSl7dC5yZWplY3QoZSk7cmV0dXJufXVtKHQsaSl9fX0sdW09ZnVuY3Rpb24oZSx0KXtpZihlPT09dHx8ZS5wcm94eT09PXQpZS5yZWplY3QoVHlwZUVycm9yKGBjYW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmYCkpO2Vsc2V7dmFyIG47aWYodmModCk9PT1gb2JqZWN0YCYmdCE9PW51bGx8fHR5cGVvZiB0PT1gZnVuY3Rpb25gKXRyeXtuPXQudGhlbn1jYXRjaCh0KXtlLnJlamVjdCh0KTtyZXR1cm59aWYodHlwZW9mIG49PWBmdW5jdGlvbmApe3ZhciByPSExO3RyeXtuLmNhbGwodCxmdW5jdGlvbihuKXtyfHwocj0hMCxuPT09dD9lLnJlamVjdChUeXBlRXJyb3IoYGNpcmN1bGFyIHRoZW5hYmxlIGNoYWluYCkpOnVtKGUsbikpfSxmdW5jdGlvbih0KXtyfHwocj0hMCxlLnJlamVjdCh0KSl9KX1jYXRjaCh0KXtyfHxlLnJlamVjdCh0KX19ZWxzZSBlLmZ1bGZpbGwodCl9fTthbS5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhbShmdW5jdGlvbih0LG4pe2Zvcih2YXIgcj1BcnJheShlLmxlbmd0aCksaT0wLGE9ZnVuY3Rpb24obixhKXtyW25dPWEsaSsrLGk9PT1lLmxlbmd0aCYmdChyKX0sbz0wO288ZS5sZW5ndGg7bysrKShmdW5jdGlvbih0KXt2YXIgcj1lW3RdO3IhPW51bGwmJnIudGhlbiE9bnVsbD9yLnRoZW4oZnVuY3Rpb24oZSl7YSh0LGUpfSxmdW5jdGlvbihlKXtuKGUpfSk6YSh0LHIpfSkobyl9KX0sYW0ucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGFtKGZ1bmN0aW9uKHQsbil7dChlKX0pfSxhbS5yZWplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhbShmdW5jdGlvbih0LG4pe24oZSl9KX07dmFyIGRtPXR5cGVvZiBQcm9taXNlPGB1YD9Qcm9taXNlOmFtLGZtPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1JYyhlKSxpPSFyLGE9dGhpcy5fcHJpdmF0ZT1hbCh7ZHVyYXRpb246MWUzfSx0LG4pO2lmKGEudGFyZ2V0PWUsYS5zdHlsZT1hLnN0eWxlfHxhLmNzcyxhLnN0YXJ0ZWQ9ITEsYS5wbGF5aW5nPSExLGEuaG9va2VkPSExLGEuYXBwbHlpbmc9ITEsYS5wcm9ncmVzcz0wLGEuY29tcGxldGVzPVtdLGEuZnJhbWVzPVtdLGEuY29tcGxldGUmJkRjKGEuY29tcGxldGUpJiZhLmNvbXBsZXRlcy5wdXNoKGEuY29tcGxldGUpLGkpe3ZhciBvPWUucG9zaXRpb24oKTthLnN0YXJ0UG9zaXRpb249YS5zdGFydFBvc2l0aW9ufHx7eDpvLngseTpvLnl9LGEuc3RhcnRTdHlsZT1hLnN0YXJ0U3R5bGV8fGUuY3koKS5zdHlsZSgpLmdldEFuaW1hdGlvblN0YXJ0U3R5bGUoZSxhLnN0eWxlKX1pZihyKXt2YXIgcz1lLnBhbigpO2Euc3RhcnRQYW49e3g6cy54LHk6cy55fSxhLnN0YXJ0Wm9vbT1lLnpvb20oKX10aGlzLmxlbmd0aD0xLHRoaXNbMF09dGhpc30scG09Zm0ucHJvdG90eXBlO2FsKHBtLHtpbnN0YW5jZVN0cmluZzpmdW5jdGlvbigpe3JldHVybmBhbmltYXRpb25gfSxob29rOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtpZighZS5ob29rZWQpe3ZhciB0LG49ZS50YXJnZXQuX3ByaXZhdGUuYW5pbWF0aW9uO3Q9ZS5xdWV1ZT9uLnF1ZXVlOm4uY3VycmVudCx0LnB1c2godGhpcyksTmMoZS50YXJnZXQpJiZlLnRhcmdldC5jeSgpLmFkZFRvQW5pbWF0aW9uUG9vbChlLnRhcmdldCksZS5ob29rZWQ9ITB9cmV0dXJuIHRoaXN9LHBsYXk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO3JldHVybiBlLnByb2dyZXNzPT09MSYmKGUucHJvZ3Jlc3M9MCksZS5wbGF5aW5nPSEwLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITEsdGhpcy5ob29rKCksdGhpc30scGxheWluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLnBsYXlpbmd9LGFwcGx5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5hcHBseWluZz0hMCxlLnN0YXJ0ZWQ9ITEsZS5zdG9wcGVkPSExLHRoaXMuaG9vaygpLHRoaXN9LGFwcGx5aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuYXBwbHlpbmd9LHBhdXNlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSx0aGlzfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZS5wbGF5aW5nPSExLGUuc3RhcnRlZD0hMSxlLnN0b3BwZWQ9ITAsdGhpc30scmV3aW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMCl9LGZhc3Rmb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJvZ3Jlc3MoMSl9LHRpbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJpdmF0ZTtyZXR1cm4gZT09PXZvaWQgMD90LnByb2dyZXNzKnQuZHVyYXRpb246dGhpcy5wcm9ncmVzcyhlL3QuZHVyYXRpb24pfSxwcm9ncmVzczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcml2YXRlLG49dC5wbGF5aW5nO3JldHVybiBlPT09dm9pZCAwP3QucHJvZ3Jlc3M6KG4mJnRoaXMucGF1c2UoKSx0LnByb2dyZXNzPWUsdC5zdGFydGVkPSExLG4mJnRoaXMucGxheSgpLHRoaXMpfSxjb21wbGV0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5wcm9ncmVzcz09PTF9LHJldmVyc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLHQ9ZS5wbGF5aW5nO3QmJnRoaXMucGF1c2UoKSxlLnByb2dyZXNzPTEtZS5wcm9ncmVzcyxlLnN0YXJ0ZWQ9ITE7dmFyIG49ZnVuY3Rpb24odCxuKXt2YXIgcj1lW3RdO3IhPW51bGwmJihlW3RdPWVbbl0sZVtuXT1yKX07aWYobihgem9vbWAsYHN0YXJ0Wm9vbWApLG4oYHBhbmAsYHN0YXJ0UGFuYCksbihgcG9zaXRpb25gLGBzdGFydFBvc2l0aW9uYCksZS5zdHlsZSlmb3IodmFyIHI9MDtyPGUuc3R5bGUubGVuZ3RoO3IrKyl7dmFyIGk9ZS5zdHlsZVtyXSxhPWkubmFtZSxvPWUuc3RhcnRTdHlsZVthXTtlLnN0YXJ0U3R5bGVbYV09aSxlLnN0eWxlW3JdPW99cmV0dXJuIHQmJnRoaXMucGxheSgpLHRoaXN9LHByb21pc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJpdmF0ZSxuO3N3aXRjaChlKXtjYXNlYGZyYW1lYDpuPXQuZnJhbWVzO2JyZWFrO2RlZmF1bHQ6Y2FzZWBjb21wbGV0ZWA6Y2FzZWBjb21wbGV0ZWRgOm49dC5jb21wbGV0ZXN9cmV0dXJuIG5ldyBkbShmdW5jdGlvbihlLHQpe24ucHVzaChmdW5jdGlvbigpe2UoKX0pfSl9fSkscG0uY29tcGxldGU9cG0uY29tcGxldGVkLHBtLnJ1bj1wbS5wbGF5LHBtLnJ1bm5pbmc9cG0ucGxheWluZzt2YXIgbW09e2FuaW1hdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUubGVuZ3RoPT09dm9pZCAwP1tlXTplO2lmKCEodGhpcy5fcHJpdmF0ZS5jeXx8dGhpcykuc3R5bGVFbmFibGVkKCkpcmV0dXJuITE7dmFyIG49dFswXTtpZihuKXJldHVybiBuLl9wcml2YXRlLmFuaW1hdGlvbi5jdXJyZW50Lmxlbmd0aD4wfX0sY2xlYXJRdWV1ZTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmxlbmd0aD09PXZvaWQgMD9bZV06ZTtpZighKHRoaXMuX3ByaXZhdGUuY3l8fHRoaXMpLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuX3ByaXZhdGUuYW5pbWF0aW9uLnF1ZXVlPVtdfXJldHVybiB0aGlzfX0sZGVsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4odGhpcy5fcHJpdmF0ZS5jeXx8dGhpcykuc3R5bGVFbmFibGVkKCk/dGhpcy5hbmltYXRlKHtkZWxheTplLGR1cmF0aW9uOmUsY29tcGxldGU6dH0pOnRoaXN9fSxkZWxheUFuaW1hdGlvbjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybih0aGlzLl9wcml2YXRlLmN5fHx0aGlzKS5zdHlsZUVuYWJsZWQoKT90aGlzLmFuaW1hdGlvbih7ZGVsYXk6ZSxkdXJhdGlvbjplLGNvbXBsZXRlOnR9KTp0aGlzfX0sYW5pbWF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4ubGVuZ3RoIT09dm9pZCAwLGk9cj9uOltuXSxhPXRoaXMuX3ByaXZhdGUuY3l8fHRoaXMsbz0hcixzPSFvO2lmKCFhLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBjPWEuc3R5bGUoKTtpZihlPWFsKHt9LGUsdCksT2JqZWN0LmtleXMoZSkubGVuZ3RoPT09MClyZXR1cm4gbmV3IGZtKGlbMF0sZSk7c3dpdGNoKGUuZHVyYXRpb249PT12b2lkIDAmJihlLmR1cmF0aW9uPTQwMCksZS5kdXJhdGlvbil7Y2FzZWBzbG93YDplLmR1cmF0aW9uPTYwMDticmVhaztjYXNlYGZhc3RgOmUuZHVyYXRpb249MjAwfWlmKHMmJihlLnN0eWxlPWMuZ2V0UHJvcHNMaXN0KGUuc3R5bGV8fGUuY3NzKSxlLmNzcz12b2lkIDApLHMmJmUucmVuZGVyZWRQb3NpdGlvbiE9bnVsbCl7dmFyIGw9ZS5yZW5kZXJlZFBvc2l0aW9uLHU9YS5wYW4oKSxkPWEuem9vbSgpO2UucG9zaXRpb249VGQobCxkLHUpfWlmKG8mJmUucGFuQnkhPW51bGwpe3ZhciBmPWUucGFuQnkscD1hLnBhbigpO2UucGFuPXt4OnAueCtmLngseTpwLnkrZi55fX12YXIgbT1lLmNlbnRlcnx8ZS5jZW50cmU7aWYobyYmbSE9bnVsbCl7dmFyIGg9YS5nZXRDZW50ZXJQYW4obS5lbGVzLGUuem9vbSk7aCE9bnVsbCYmKGUucGFuPWgpfWlmKG8mJmUuZml0IT1udWxsKXt2YXIgZz1lLmZpdCxfPWEuZ2V0Rml0Vmlld3BvcnQoZy5lbGVzfHxnLmJvdW5kaW5nQm94LGcucGFkZGluZyk7XyE9bnVsbCYmKGUucGFuPV8ucGFuLGUuem9vbT1fLnpvb20pfWlmKG8mJmtjKGUuem9vbSkpe3ZhciB2PWEuZ2V0Wm9vbWVkVmlld3BvcnQoZS56b29tKTt2PT1udWxsP2Uuem9vbT1udWxsOih2Lnpvb21lZCYmKGUuem9vbT12Lnpvb20pLHYucGFubmVkJiYoZS5wYW49di5wYW4pKX1yZXR1cm4gbmV3IGZtKGlbMF0sZSl9fSxhbmltYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4ubGVuZ3RoPT09dm9pZCAwP1tuXTpuO2lmKCEodGhpcy5fcHJpdmF0ZS5jeXx8dGhpcykuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dCYmKGU9YWwoe30sZSx0KSk7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1hLmFuaW1hdGVkKCkmJihlLnF1ZXVlPT09dm9pZCAwfHxlLnF1ZXVlKTthLmFuaW1hdGlvbihlLG8/e3F1ZXVlOiEwfTp2b2lkIDApLnBsYXkoKX1yZXR1cm4gdGhpc319LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5sZW5ndGg9PT12b2lkIDA/W25dOm4saT10aGlzLl9wcml2YXRlLmN5fHx0aGlzO2lmKCFpLnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXtmb3IodmFyIG89clthXS5fcHJpdmF0ZSxzPW8uYW5pbWF0aW9uLmN1cnJlbnQsYz0wO2M8cy5sZW5ndGg7YysrKXt2YXIgbD1zW2NdLl9wcml2YXRlO3QmJihsLmR1cmF0aW9uPTApfWUmJihvLmFuaW1hdGlvbi5xdWV1ZT1bXSksdHx8KG8uYW5pbWF0aW9uLmN1cnJlbnQ9W10pfXJldHVybiBpLm5vdGlmeShgZHJhd2ApLHRoaXN9fX0saG0sZ207ZnVuY3Rpb24gX20oKXtyZXR1cm4gZ218fChnbT0xLGhtPUFycmF5LmlzQXJyYXkpLGhtfXZhciB2bSx5bTtmdW5jdGlvbiBibSgpe2lmKHltKXJldHVybiB2bTt5bT0xO3ZhciBlPV9tKCksdD1abCgpLG49L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8scj0vXlx3KiQvO2Z1bmN0aW9uIGkoaSxhKXtpZihlKGkpKXJldHVybiExO3ZhciBvPXR5cGVvZiBpO3JldHVybiBvPT1gbnVtYmVyYHx8bz09YHN5bWJvbGB8fG89PWBib29sZWFuYHx8aT09bnVsbHx8dChpKT8hMDpyLnRlc3QoaSl8fCFuLnRlc3QoaSl8fGEhPW51bGwmJmkgaW4gT2JqZWN0KGEpfXJldHVybiB2bT1pLHZtfXZhciB4bSxTbTtmdW5jdGlvbiBDbSgpe2lmKFNtKXJldHVybiB4bTtTbT0xO3ZhciBlPUdsKCksdD12bCgpLG49YFtvYmplY3QgQXN5bmNGdW5jdGlvbl1gLHI9YFtvYmplY3QgRnVuY3Rpb25dYCxpPWBbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXWAsYT1gW29iamVjdCBQcm94eV1gO2Z1bmN0aW9uIG8obyl7aWYoIXQobykpcmV0dXJuITE7dmFyIHM9ZShvKTtyZXR1cm4gcz09cnx8cz09aXx8cz09bnx8cz09YX1yZXR1cm4geG09byx4bX12YXIgd20sVG07ZnVuY3Rpb24gRW0oKXtyZXR1cm4gVG18fChUbT0xLHdtPXdsKClbYF9fY29yZS1qc19zaGFyZWRfX2BdKSx3bX12YXIgRG0sT207ZnVuY3Rpb24ga20oKXtpZihPbSlyZXR1cm4gRG07T209MTt2YXIgZT1FbSgpLHQ9ZnVuY3Rpb24oKXt2YXIgdD0vW14uXSskLy5leGVjKGUmJmUua2V5cyYmZS5rZXlzLklFX1BST1RPfHxgYCk7cmV0dXJuIHQ/YFN5bWJvbChzcmMpXzEuYCt0OmBgfSgpO2Z1bmN0aW9uIG4oZSl7cmV0dXJuISF0JiZ0IGluIGV9cmV0dXJuIERtPW4sRG19dmFyIEFtLGptO2Z1bmN0aW9uIE1tKCl7aWYoam0pcmV0dXJuIEFtO2ptPTE7dmFyIGU9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHQodCl7aWYodCE9bnVsbCl7dHJ5e3JldHVybiBlLmNhbGwodCl9Y2F0Y2h7fXRyeXtyZXR1cm4gdCtgYH1jYXRjaHt9fXJldHVybmBgfXJldHVybiBBbT10LEFtfXZhciBObSxQbTtmdW5jdGlvbiBGbSgpe2lmKFBtKXJldHVybiBObTtQbT0xO3ZhciBlPUNtKCksdD1rbSgpLG49dmwoKSxyPU1tKCksaT0vW1xcXiQuKis/KClbXF17fXxdL2csYT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxvPUZ1bmN0aW9uLnByb3RvdHlwZSxzPU9iamVjdC5wcm90b3R5cGUsYz1vLnRvU3RyaW5nLGw9cy5oYXNPd25Qcm9wZXJ0eSx1PVJlZ0V4cChgXmArYy5jYWxsKGwpLnJlcGxhY2UoaSxgXFwkJmApLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csYCQxLio/YCkrYCRgKTtmdW5jdGlvbiBkKGkpe3JldHVybiFuKGkpfHx0KGkpPyExOihlKGkpP3U6YSkudGVzdChyKGkpKX1yZXR1cm4gTm09ZCxObX12YXIgSW0sTG07ZnVuY3Rpb24gUm0oKXtpZihMbSlyZXR1cm4gSW07TG09MTtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIGU/Llt0XX1yZXR1cm4gSW09ZSxJbX12YXIgem0sQm07ZnVuY3Rpb24gVm0oKXtpZihCbSlyZXR1cm4gem07Qm09MTt2YXIgZT1GbSgpLHQ9Um0oKTtmdW5jdGlvbiBuKG4scil7dmFyIGk9dChuLHIpO3JldHVybiBlKGkpP2k6dm9pZCAwfXJldHVybiB6bT1uLHptfXZhciBIbSxVbTtmdW5jdGlvbiBXbSgpe3JldHVybiBVbXx8KFVtPTEsSG09Vm0oKShPYmplY3QsYGNyZWF0ZWApKSxIbX12YXIgR20sS207ZnVuY3Rpb24gcW0oKXtpZihLbSlyZXR1cm4gR207S209MTt2YXIgZT1XbSgpO2Z1bmN0aW9uIHQoKXt0aGlzLl9fZGF0YV9fPWU/ZShudWxsKTp7fSx0aGlzLnNpemU9MH1yZXR1cm4gR209dCxHbX12YXIgSm0sWW07ZnVuY3Rpb24gWG0oKXtpZihZbSlyZXR1cm4gSm07WW09MTtmdW5jdGlvbiBlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT0rISF0LHR9cmV0dXJuIEptPWUsSm19dmFyIFptLFFtO2Z1bmN0aW9uICRtKCl7aWYoUW0pcmV0dXJuIFptO1FtPTE7dmFyIGU9V20oKSx0PWBfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fYCxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcihyKXt2YXIgaT10aGlzLl9fZGF0YV9fO2lmKGUpe3ZhciBhPWlbcl07cmV0dXJuIGE9PT10P3ZvaWQgMDphfXJldHVybiBuLmNhbGwoaSxyKT9pW3JdOnZvaWQgMH1yZXR1cm4gWm09cixabX12YXIgZWgsdGg7ZnVuY3Rpb24gbmgoKXtpZih0aClyZXR1cm4gZWg7dGg9MTt2YXIgZT1XbSgpLHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBuKG4pe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIGU/cltuXSE9PXZvaWQgMDp0LmNhbGwocixuKX1yZXR1cm4gZWg9bixlaH12YXIgcmgsaWg7ZnVuY3Rpb24gYWgoKXtpZihpaClyZXR1cm4gcmg7aWg9MTt2YXIgZT1XbSgpLHQ9YF9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19gO2Z1bmN0aW9uIG4obixyKXt2YXIgaT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPSshdGhpcy5oYXMobiksaVtuXT1lJiZyPT09dm9pZCAwP3Q6cix0aGlzfXJldHVybiByaD1uLHJofXZhciBvaCxzaDtmdW5jdGlvbiBjaCgpe2lmKHNoKXJldHVybiBvaDtzaD0xO3ZhciBlPXFtKCksdD1YbSgpLG49JG0oKSxyPW5oKCksaT1haCgpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19cmV0dXJuIGEucHJvdG90eXBlLmNsZWFyPWUsYS5wcm90b3R5cGUuZGVsZXRlPXQsYS5wcm90b3R5cGUuZ2V0PW4sYS5wcm90b3R5cGUuaGFzPXIsYS5wcm90b3R5cGUuc2V0PWksb2g9YSxvaH12YXIgbGgsdWg7ZnVuY3Rpb24gZGgoKXtpZih1aClyZXR1cm4gbGg7dWg9MTtmdW5jdGlvbiBlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH1yZXR1cm4gbGg9ZSxsaH12YXIgZmgscGg7ZnVuY3Rpb24gbWgoKXtpZihwaClyZXR1cm4gZmg7cGg9MTtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9cmV0dXJuIGZoPWUsZmh9dmFyIGhoLGdoO2Z1bmN0aW9uIF9oKCl7aWYoZ2gpcmV0dXJuIGhoO2doPTE7dmFyIGU9bWgoKTtmdW5jdGlvbiB0KHQsbil7Zm9yKHZhciByPXQubGVuZ3RoO3ItLTspaWYoZSh0W3JdWzBdLG4pKXJldHVybiByO3JldHVybi0xfXJldHVybiBoaD10LGhofXZhciB2aCx5aDtmdW5jdGlvbiBiaCgpe2lmKHloKXJldHVybiB2aDt5aD0xO3ZhciBlPV9oKCksdD1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIG4obil7dmFyIHI9dGhpcy5fX2RhdGFfXyxpPWUocixuKTtyZXR1cm4gaTwwPyExOihpPT1yLmxlbmd0aC0xP3IucG9wKCk6dC5jYWxsKHIsaSwxKSwtLXRoaXMuc2l6ZSwhMCl9cmV0dXJuIHZoPW4sdmh9dmFyIHhoLFNoO2Z1bmN0aW9uIENoKCl7aWYoU2gpcmV0dXJuIHhoO1NoPTE7dmFyIGU9X2goKTtmdW5jdGlvbiB0KHQpe3ZhciBuPXRoaXMuX19kYXRhX18scj1lKG4sdCk7cmV0dXJuIHI8MD92b2lkIDA6bltyXVsxXX1yZXR1cm4geGg9dCx4aH12YXIgd2gsVGg7ZnVuY3Rpb24gRWgoKXtpZihUaClyZXR1cm4gd2g7VGg9MTt2YXIgZT1faCgpO2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUodGhpcy5fX2RhdGFfXyx0KT4tMX1yZXR1cm4gd2g9dCx3aH12YXIgRGgsT2g7ZnVuY3Rpb24ga2goKXtpZihPaClyZXR1cm4gRGg7T2g9MTt2YXIgZT1faCgpO2Z1bmN0aW9uIHQodCxuKXt2YXIgcj10aGlzLl9fZGF0YV9fLGk9ZShyLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLHIucHVzaChbdCxuXSkpOnJbaV1bMV09bix0aGlzfXJldHVybiBEaD10LERofXZhciBBaCxqaDtmdW5jdGlvbiBNaCgpe2lmKGpoKXJldHVybiBBaDtqaD0xO3ZhciBlPWRoKCksdD1iaCgpLG49Q2goKSxyPUVoKCksaT1raCgpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19cmV0dXJuIGEucHJvdG90eXBlLmNsZWFyPWUsYS5wcm90b3R5cGUuZGVsZXRlPXQsYS5wcm90b3R5cGUuZ2V0PW4sYS5wcm90b3R5cGUuaGFzPXIsYS5wcm90b3R5cGUuc2V0PWksQWg9YSxBaH12YXIgTmgsUGg7ZnVuY3Rpb24gRmgoKXtyZXR1cm4gUGh8fChQaD0xLE5oPVZtKCkod2woKSxgTWFwYCkpLE5ofXZhciBJaCxMaDtmdW5jdGlvbiBSaCgpe2lmKExoKXJldHVybiBJaDtMaD0xO3ZhciBlPWNoKCksdD1NaCgpLG49RmgoKTtmdW5jdGlvbiByKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgZSxtYXA6bmV3KG58fHQpLHN0cmluZzpuZXcgZX19cmV0dXJuIEloPXIsSWh9dmFyIHpoLEJoO2Z1bmN0aW9uIFZoKCl7aWYoQmgpcmV0dXJuIHpoO0JoPTE7ZnVuY3Rpb24gZShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gdD09YHN0cmluZ2B8fHQ9PWBudW1iZXJgfHx0PT1gc3ltYm9sYHx8dD09YGJvb2xlYW5gP2UhPT1gX19wcm90b19fYDplPT09bnVsbH1yZXR1cm4gemg9ZSx6aH12YXIgSGgsVWg7ZnVuY3Rpb24gV2goKXtpZihVaClyZXR1cm4gSGg7VWg9MTt2YXIgZT1WaCgpO2Z1bmN0aW9uIHQodCxuKXt2YXIgcj10Ll9fZGF0YV9fO3JldHVybiBlKG4pP3JbdHlwZW9mIG49PWBzdHJpbmdgP2BzdHJpbmdgOmBoYXNoYF06ci5tYXB9cmV0dXJuIEhoPXQsSGh9dmFyIEdoLEtoO2Z1bmN0aW9uIHFoKCl7aWYoS2gpcmV0dXJuIEdoO0toPTE7dmFyIGU9V2goKTtmdW5jdGlvbiB0KHQpe3ZhciBuPWUodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09KyEhbixufXJldHVybiBHaD10LEdofXZhciBKaCxZaDtmdW5jdGlvbiBYaCgpe2lmKFloKXJldHVybiBKaDtZaD0xO3ZhciBlPVdoKCk7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gZSh0aGlzLHQpLmdldCh0KX1yZXR1cm4gSmg9dCxKaH12YXIgWmgsUWg7ZnVuY3Rpb24gJGgoKXtpZihRaClyZXR1cm4gWmg7UWg9MTt2YXIgZT1XaCgpO2Z1bmN0aW9uIHQodCl7cmV0dXJuIGUodGhpcyx0KS5oYXModCl9cmV0dXJuIFpoPXQsWmh9dmFyIGVnLHRnO2Z1bmN0aW9uIG5nKCl7aWYodGcpcmV0dXJuIGVnO3RnPTE7dmFyIGU9V2goKTtmdW5jdGlvbiB0KHQsbil7dmFyIHI9ZSh0aGlzLHQpLGk9ci5zaXplO3JldHVybiByLnNldCh0LG4pLHRoaXMuc2l6ZSs9ci5zaXplPT1pPzA6MSx0aGlzfXJldHVybiBlZz10LGVnfXZhciByZyxpZztmdW5jdGlvbiBhZygpe2lmKGlnKXJldHVybiByZztpZz0xO3ZhciBlPVJoKCksdD1xaCgpLG49WGgoKSxyPSRoKCksaT1uZygpO2Z1bmN0aW9uIGEoZSl7dmFyIHQ9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8bjspe3ZhciByPWVbdF07dGhpcy5zZXQoclswXSxyWzFdKX19cmV0dXJuIGEucHJvdG90eXBlLmNsZWFyPWUsYS5wcm90b3R5cGUuZGVsZXRlPXQsYS5wcm90b3R5cGUuZ2V0PW4sYS5wcm90b3R5cGUuaGFzPXIsYS5wcm90b3R5cGUuc2V0PWkscmc9YSxyZ312YXIgb2csc2c7ZnVuY3Rpb24gY2coKXtpZihzZylyZXR1cm4gb2c7c2c9MTt2YXIgZT1hZygpLHQ9YEV4cGVjdGVkIGEgZnVuY3Rpb25gO2Z1bmN0aW9uIG4ocixpKXtpZih0eXBlb2YgciE9YGZ1bmN0aW9uYHx8aSE9bnVsbCYmdHlwZW9mIGkhPWBmdW5jdGlvbmApdGhyb3cgVHlwZUVycm9yKHQpO3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLHQ9aT9pLmFwcGx5KHRoaXMsZSk6ZVswXSxuPWEuY2FjaGU7aWYobi5oYXModCkpcmV0dXJuIG4uZ2V0KHQpO3ZhciBvPXIuYXBwbHkodGhpcyxlKTtyZXR1cm4gYS5jYWNoZT1uLnNldCh0LG8pfHxuLG99O3JldHVybiBhLmNhY2hlPW5ldyhuLkNhY2hlfHxlKSxhfXJldHVybiBuLkNhY2hlPWUsb2c9bixvZ312YXIgbGcsdWc7ZnVuY3Rpb24gZGcoKXtpZih1ZylyZXR1cm4gbGc7dWc9MTt2YXIgZT1jZygpLHQ9NTAwO2Z1bmN0aW9uIG4obil7dmFyIHI9ZShuLGZ1bmN0aW9uKGUpe3JldHVybiBpLnNpemU9PT10JiZpLmNsZWFyKCksZX0pLGk9ci5jYWNoZTtyZXR1cm4gcn1yZXR1cm4gbGc9bixsZ312YXIgZmcscGc7ZnVuY3Rpb24gbWcoKXtpZihwZylyZXR1cm4gZmc7cGc9MTt2YXIgZT1kZygpLHQ9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csbj0vXFwoXFwpPy9nO3JldHVybiBmZz1lKGZ1bmN0aW9uKGUpe3ZhciByPVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmci5wdXNoKGBgKSxlLnJlcGxhY2UodCxmdW5jdGlvbihlLHQsaSxhKXtyLnB1c2goaT9hLnJlcGxhY2UobixgJDFgKTp0fHxlKX0pLHJ9KSxmZ312YXIgaGcsZ2c7ZnVuY3Rpb24gX2coKXtpZihnZylyZXR1cm4gaGc7Z2c9MTtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkocik7KytuPHI7KWlbbl09dChlW25dLG4sZSk7cmV0dXJuIGl9cmV0dXJuIGhnPWUsaGd9dmFyIHZnLHlnO2Z1bmN0aW9uIGJnKCl7aWYoeWcpcmV0dXJuIHZnO3lnPTE7dmFyIGU9SWwoKSx0PV9nKCksbj1fbSgpLHI9WmwoKSxpPWU/ZS5wcm90b3R5cGU6dm9pZCAwLGE9aT9pLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBvKGUpe2lmKHR5cGVvZiBlPT1gc3RyaW5nYClyZXR1cm4gZTtpZihuKGUpKXJldHVybiB0KGUsbykrYGA7aWYocihlKSlyZXR1cm4gYT9hLmNhbGwoZSk6YGA7dmFyIGk9ZStgYDtyZXR1cm4gaT09YDBgJiYxL2U9PS0xLzA/YC0wYDppfXJldHVybiB2Zz1vLHZnfXZhciB4ZyxTZztmdW5jdGlvbiBDZygpe2lmKFNnKXJldHVybiB4ZztTZz0xO3ZhciBlPWJnKCk7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gdD09bnVsbD9gYDplKHQpfXJldHVybiB4Zz10LHhnfXZhciB3ZyxUZztmdW5jdGlvbiBFZygpe2lmKFRnKXJldHVybiB3ZztUZz0xO3ZhciBlPV9tKCksdD1ibSgpLG49bWcoKSxyPUNnKCk7ZnVuY3Rpb24gaShpLGEpe3JldHVybiBlKGkpP2k6dChpLGEpP1tpXTpuKHIoaSkpfXJldHVybiB3Zz1pLHdnfXZhciBEZyxPZztmdW5jdGlvbiBrZygpe2lmKE9nKXJldHVybiBEZztPZz0xO3ZhciBlPVpsKCk7ZnVuY3Rpb24gdCh0KXtpZih0eXBlb2YgdD09YHN0cmluZ2B8fGUodCkpcmV0dXJuIHQ7dmFyIG49dCtgYDtyZXR1cm4gbj09YDBgJiYxL3Q9PS0xLzA/YC0wYDpufXJldHVybiBEZz10LERnfXZhciBBZyxqZztmdW5jdGlvbiBNZygpe2lmKGpnKXJldHVybiBBZztqZz0xO3ZhciBlPUVnKCksdD1rZygpO2Z1bmN0aW9uIG4obixyKXtyPWUocixuKTtmb3IodmFyIGk9MCxhPXIubGVuZ3RoO24hPW51bGwmJmk8YTspbj1uW3QocltpKytdKV07cmV0dXJuIGkmJmk9PWE/bjp2b2lkIDB9cmV0dXJuIEFnPW4sQWd9dmFyIE5nLFBnO2Z1bmN0aW9uIEZnKCl7aWYoUGcpcmV0dXJuIE5nO1BnPTE7dmFyIGU9TWcoKTtmdW5jdGlvbiB0KHQsbixyKXt2YXIgaT10PT1udWxsP3ZvaWQgMDplKHQsbik7cmV0dXJuIGk9PT12b2lkIDA/cjppfXJldHVybiBOZz10LE5nfXZhciBJZz1obChGZygpKSxMZyxSZztmdW5jdGlvbiB6Zygpe2lmKFJnKXJldHVybiBMZztSZz0xO3ZhciBlPVZtKCk7cmV0dXJuIExnPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWUoT2JqZWN0LGBkZWZpbmVQcm9wZXJ0eWApO3JldHVybiB0KHt9LGBgLHt9KSx0fWNhdGNoe319KCksTGd9dmFyIEJnLFZnO2Z1bmN0aW9uIEhnKCl7aWYoVmcpcmV0dXJuIEJnO1ZnPTE7dmFyIGU9emcoKTtmdW5jdGlvbiB0KHQsbixyKXtuPT1gX19wcm90b19fYCYmZT9lKHQsbix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cix3cml0YWJsZTohMH0pOnRbbl09cn1yZXR1cm4gQmc9dCxCZ312YXIgVWcsV2c7ZnVuY3Rpb24gR2coKXtpZihXZylyZXR1cm4gVWc7V2c9MTt2YXIgZT1IZygpLHQ9bWgoKSxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcihyLGksYSl7dmFyIG89cltpXTsoIShuLmNhbGwocixpKSYmdChvLGEpKXx8YT09PXZvaWQgMCYmIShpIGluIHIpKSYmZShyLGksYSl9cmV0dXJuIFVnPXIsVWd9dmFyIEtnLHFnO2Z1bmN0aW9uIEpnKCl7aWYocWcpcmV0dXJuIEtnO3FnPTE7dmFyIGU9OTAwNzE5OTI1NDc0MDk5MSx0PS9eKD86MHxbMS05XVxkKikkLztmdW5jdGlvbiBuKG4scil7dmFyIGk9dHlwZW9mIG47cmV0dXJuIHI/Pz1lLCEhciYmKGk9PWBudW1iZXJgfHxpIT1gc3ltYm9sYCYmdC50ZXN0KG4pKSYmbj4tMSYmbiUxPT0wJiZuPHJ9cmV0dXJuIEtnPW4sS2d9dmFyIFlnLFhnO2Z1bmN0aW9uIFpnKCl7aWYoWGcpcmV0dXJuIFlnO1hnPTE7dmFyIGU9R2coKSx0PUVnKCksbj1KZygpLHI9dmwoKSxpPWtnKCk7ZnVuY3Rpb24gYShhLG8scyxjKXtpZighcihhKSlyZXR1cm4gYTtvPXQobyxhKTtmb3IodmFyIGw9LTEsdT1vLmxlbmd0aCxkPXUtMSxmPWE7ZiE9bnVsbCYmKytsPHU7KXt2YXIgcD1pKG9bbF0pLG09cztpZihwPT09YF9fcHJvdG9fX2B8fHA9PT1gY29uc3RydWN0b3JgfHxwPT09YHByb3RvdHlwZWApcmV0dXJuIGE7aWYobCE9ZCl7dmFyIGg9ZltwXTttPWM/YyhoLHAsZik6dm9pZCAwLG09PT12b2lkIDAmJihtPXIoaCk/aDpuKG9bbCsxXSk/W106e30pfWUoZixwLG0pLGY9ZltwXX1yZXR1cm4gYX1yZXR1cm4gWWc9YSxZZ312YXIgUWcsJGc7ZnVuY3Rpb24gZV8oKXtpZigkZylyZXR1cm4gUWc7JGc9MTt2YXIgZT1aZygpO2Z1bmN0aW9uIHQodCxuLHIpe3JldHVybiB0PT1udWxsP3Q6ZSh0LG4scil9cmV0dXJuIFFnPXQsUWd9dmFyIHRfPWhsKGVfKCkpLG5fLHJfO2Z1bmN0aW9uIGlfKCl7aWYocl8pcmV0dXJuIG5fO3JfPTE7ZnVuY3Rpb24gZShlLHQpe3ZhciBuPS0xLHI9ZS5sZW5ndGg7Zm9yKHR8fD1BcnJheShyKTsrK248cjspdFtuXT1lW25dO3JldHVybiB0fXJldHVybiBuXz1lLG5ffXZhciBhXyxvXztmdW5jdGlvbiBzXygpe2lmKG9fKXJldHVybiBhXztvXz0xO3ZhciBlPV9nKCksdD1pXygpLG49X20oKSxyPVpsKCksaT1tZygpLGE9a2coKSxvPUNnKCk7ZnVuY3Rpb24gcyhzKXtyZXR1cm4gbihzKT9lKHMsYSk6cihzKT9bc106dChpKG8ocykpKX1yZXR1cm4gYV89cyxhX312YXIgY189aGwoc18oKSksbF89e2RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9YWwoe30se2ZpZWxkOmBkYXRhYCxiaW5kaW5nRXZlbnQ6YGRhdGFgLGFsbG93QmluZGluZzohMSxhbGxvd1NldHRpbmc6ITEsYWxsb3dHZXR0aW5nOiExLHNldHRpbmdFdmVudDpgZGF0YWAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITEsdHJpZ2dlckZuTmFtZTpgdHJpZ2dlcmAsaW1tdXRhYmxlS2V5czp7fSx1cGRhdGVTdHlsZTohMSxiZWZvcmVHZXQ6ZnVuY3Rpb24oZSl7fSxiZWZvcmVTZXQ6ZnVuY3Rpb24oZSx0KXt9LG9uU2V0OmZ1bmN0aW9uKGUpe30sY2FuU2V0OmZ1bmN0aW9uKGUpe3JldHVybiEwfX0sZSksZnVuY3Rpb24odCxuKXt2YXIgcj1lLGk9dGhpcyxhPWkubGVuZ3RoIT09dm9pZCAwLG89YT9pOltpXSxzPWE/aVswXTppO2lmKFoodCkpe3ZhciBjPXQuaW5kZXhPZihgLmApIT09LTEmJmNfKHQpO2lmKHIuYWxsb3dHZXR0aW5nJiZuPT09dm9pZCAwKXt2YXIgbDtyZXR1cm4gcyYmKHIuYmVmb3JlR2V0KHMpLGw9YyYmcy5fcHJpdmF0ZVtyLmZpZWxkXVt0XT09PXZvaWQgMD9JZyhzLl9wcml2YXRlW3IuZmllbGRdLGMpOnMuX3ByaXZhdGVbci5maWVsZF1bdF0pLGx9aWYoci5hbGxvd1NldHRpbmcmJm4hPT12b2lkIDAmJiFyLmltbXV0YWJsZUtleXNbdF0pe3ZhciB1PWxjKHt9LHQsbik7ci5iZWZvcmVTZXQoaSx1KTtmb3IodmFyIGQ9MCxmPW8ubGVuZ3RoO2Q8ZjtkKyspe3ZhciBwPW9bZF07ci5jYW5TZXQocCkmJihjJiZzLl9wcml2YXRlW3IuZmllbGRdW3RdPT09dm9pZCAwP3RfKHAuX3ByaXZhdGVbci5maWVsZF0sYyxuKTpwLl9wcml2YXRlW3IuZmllbGRdW3RdPW4pfXIudXBkYXRlU3R5bGUmJmkudXBkYXRlU3R5bGUoKSxyLm9uU2V0KGkpLHIuc2V0dGluZ1RyaWdnZXJzRXZlbnQmJmlbci50cmlnZ2VyRm5OYW1lXShyLnNldHRpbmdFdmVudCl9fWVsc2UgaWYoci5hbGxvd1NldHRpbmcmJmtjKHQpKXt2YXIgbT10LGgsZyxfPU9iamVjdC5rZXlzKG0pO3IuYmVmb3JlU2V0KGksbSk7Zm9yKHZhciB2PTA7djxfLmxlbmd0aDt2KyspaWYoaD1fW3ZdLGc9bVtoXSwhci5pbW11dGFibGVLZXlzW2hdKWZvcih2YXIgeT0wO3k8by5sZW5ndGg7eSsrKXt2YXIgYj1vW3ldO3IuY2FuU2V0KGIpJiYoYi5fcHJpdmF0ZVtyLmZpZWxkXVtoXT1nKX1yLnVwZGF0ZVN0eWxlJiZpLnVwZGF0ZVN0eWxlKCksci5vblNldChpKSxyLnNldHRpbmdUcmlnZ2Vyc0V2ZW50JiZpW3IudHJpZ2dlckZuTmFtZV0oci5zZXR0aW5nRXZlbnQpfWVsc2UgaWYoci5hbGxvd0JpbmRpbmcmJkRjKHQpKXt2YXIgeD10O2kub24oci5iaW5kaW5nRXZlbnQseCl9ZWxzZSBpZihyLmFsbG93R2V0dGluZyYmdD09PXZvaWQgMCl7dmFyIFM7cmV0dXJuIHMmJihyLmJlZm9yZUdldChzKSxTPXMuX3ByaXZhdGVbci5maWVsZF0pLFN9cmV0dXJuIGl9fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBlPWFsKHt9LHtmaWVsZDpgZGF0YWAsZXZlbnQ6YGRhdGFgLHRyaWdnZXJGbk5hbWU6YHRyaWdnZXJgLHRyaWdnZXJFdmVudDohMSxpbW11dGFibGVLZXlzOnt9fSxlKSxmdW5jdGlvbih0KXt2YXIgbj1lLHI9dGhpcyxpPXIubGVuZ3RoPT09dm9pZCAwP1tyXTpyO2lmKFoodCkpe2Zvcih2YXIgYT10LnNwbGl0KC9ccysvKSxvPWEubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgYz1hW3NdO2lmKCF6YyhjKSYmIW4uaW1tdXRhYmxlS2V5c1tjXSlmb3IodmFyIGw9MCx1PWkubGVuZ3RoO2w8dTtsKyspaVtsXS5fcHJpdmF0ZVtuLmZpZWxkXVtjXT12b2lkIDB9bi50cmlnZ2VyRXZlbnQmJnJbbi50cmlnZ2VyRm5OYW1lXShuLmV2ZW50KX1lbHNlIGlmKHQ9PT12b2lkIDApe2Zvcih2YXIgZD0wLGY9aS5sZW5ndGg7ZDxmO2QrKylmb3IodmFyIHA9aVtkXS5fcHJpdmF0ZVtuLmZpZWxkXSxtPU9iamVjdC5rZXlzKHApLGg9MDtoPG0ubGVuZ3RoO2grKyl7dmFyIGc9bVtoXTtuLmltbXV0YWJsZUtleXNbZ118fChwW2ddPXZvaWQgMCl9bi50cmlnZ2VyRXZlbnQmJnJbbi50cmlnZ2VyRm5OYW1lXShuLmV2ZW50KX1yZXR1cm4gcn19fSx1Xz17ZXZlbnRBbGlhc2VzT246ZnVuY3Rpb24oZSl7dmFyIHQ9ZTt0LmFkZExpc3RlbmVyPXQubGlzdGVuPXQuYmluZD10Lm9uLHQudW5saXN0ZW49dC51bmJpbmQ9dC5vZmY9dC5yZW1vdmVMaXN0ZW5lcix0LnRyaWdnZXI9dC5lbWl0LHQucG9uPXQucHJvbWlzZU9uPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gbmV3IGRtKGZ1bmN0aW9uKGUsdCl7dmFyIGk9ci5jb25jYXQoW2Z1bmN0aW9uKHQpe24ub2ZmLmFwcGx5KG4sYSksZSh0KX1dKSxhPWkuY29uY2F0KFtdKTtuLm9uLmFwcGx5KG4saSl9KX19fSxkXz17fTtbbW0sbF8sdV9dLmZvckVhY2goZnVuY3Rpb24oZSl7YWwoZF8sZSl9KTt2YXIgZl89e2FuaW1hdGU6ZF8uYW5pbWF0ZSgpLGFuaW1hdGlvbjpkXy5hbmltYXRpb24oKSxhbmltYXRlZDpkXy5hbmltYXRlZCgpLGNsZWFyUXVldWU6ZF8uY2xlYXJRdWV1ZSgpLGRlbGF5OmRfLmRlbGF5KCksZGVsYXlBbmltYXRpb246ZF8uZGVsYXlBbmltYXRpb24oKSxzdG9wOmRfLnN0b3AoKX0scF89e2NsYXNzZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihlPT09dm9pZCAwKXt2YXIgbj1bXTtyZXR1cm4gdFswXS5fcHJpdmF0ZS5jbGFzc2VzLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIG4ucHVzaChlKX0pLG59T2MoZSl8fChlPShlfHxgYCkubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgcj1bXSxpPW5ldyBRdShlKSxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9by5fcHJpdmF0ZSxjPXMuY2xhc3NlcyxsPSExLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGQ9ZVt1XTtpZighYy5oYXMoZCkpe2w9ITA7YnJlYWt9fWx8fD1jLnNpemUhPT1lLmxlbmd0aCxsJiYocy5jbGFzc2VzPWksci5wdXNoKG8pKX1yZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5zcGF3bihyKS51cGRhdGVTdHlsZSgpLmVtaXQoYGNsYXNzYCksdH0sYWRkQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudG9nZ2xlQ2xhc3MoZSwhMCl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF07cmV0dXJuIHQhPW51bGwmJnQuX3ByaXZhdGUuY2xhc3Nlcy5oYXMoZSl9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7T2MoZSl8fChlPWUubWF0Y2goL1xTKy9nKXx8W10pO2Zvcih2YXIgbj10aGlzLHI9dD09PXZvaWQgMCxpPVtdLGE9MCxvPW4ubGVuZ3RoO2E8bzthKyspZm9yKHZhciBzPW5bYV0sYz1zLl9wcml2YXRlLmNsYXNzZXMsbD0hMSx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBkPWVbdV0sZj1jLmhhcyhkKSxwPSExO3R8fHImJiFmPyhjLmFkZChkKSxwPSEwKTooIXR8fHImJmYpJiYoYy5kZWxldGUoZCkscD0hMCksIWwmJnAmJihpLnB1c2gocyksbD0hMCl9cmV0dXJuIGkubGVuZ3RoPjAmJnRoaXMuc3Bhd24oaSkudXBkYXRlU3R5bGUoKS5lbWl0KGBjbGFzc2ApLG59LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZUNsYXNzKGUsITEpfSxmbGFzaENsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztpZih0PT1udWxsKXQ9MjUwO2Vsc2UgaWYodD09PTApcmV0dXJuIG47cmV0dXJuIG4uYWRkQ2xhc3MoZSksc2V0VGltZW91dChmdW5jdGlvbigpe24ucmVtb3ZlQ2xhc3MoZSl9LHQpLG59fTtwXy5jbGFzc05hbWU9cF8uY2xhc3NOYW1lcz1wXy5jbGFzc2VzO3ZhciBtXz17bWV0YUNoYXI6YFtcXCFcXCJcXCNcXCRcXCVcXCZcXCdcXChcXClcXCpcXCtcXCxcXC5cXC9cXDpcXDtcXDxcXD1cXD5cXD9cXEBcXFtcXF1cXF5cXFxgXFx7XFx8XFx9XFx+XWAsY29tcGFyYXRvck9wOmA9fFxcIT18Pnw+PXw8fDw9fFxcJD18XFxePXxcXCo9YCxib29sT3A6YFxcP3xcXCF8XFxeYCxzdHJpbmc6YCIoPzpcXFxcInxbXiJdKSoifCcoPzpcXFxcJ3xbXiddKSonYCxudW1iZXI6WGMsbWV0YTpgZGVncmVlfGluZGVncmVlfG91dGRlZ3JlZWAsc2VwYXJhdG9yOmBcXHMqLFxccypgLGRlc2NlbmRhbnQ6YFxccytgLGNoaWxkOmBcXHMrPlxccytgLHN1YmplY3Q6YFxcJGAsZ3JvdXA6YG5vZGV8ZWRnZXxcXCpgLGRpcmVjdGVkRWRnZTpgXFxzKy0+XFxzK2AsdW5kaXJlY3RlZEVkZ2U6YFxccys8LT5cXHMrYH07bV8udmFyaWFibGU9YCg/OltcXHctLl18KD86XFxcXGArbV8ubWV0YUNoYXIrYCkpK2AsbV8uY2xhc3NOYW1lPWAoPzpbXFx3LV18KD86XFxcXGArbV8ubWV0YUNoYXIrYCkpK2AsbV8udmFsdWU9bV8uc3RyaW5nK2B8YCttXy5udW1iZXIsbV8uaWQ9bV8udmFyaWFibGUsKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW1fLmNvbXBhcmF0b3JPcC5zcGxpdChgfGApLHQsbj0wO248ZS5sZW5ndGg7bisrKXQ9ZVtuXSxtXy5jb21wYXJhdG9yT3ArPWB8QGArdDtmb3IoZT1tXy5jb21wYXJhdG9yT3Auc3BsaXQoYHxgKSxuPTA7bjxlLmxlbmd0aDtuKyspdD1lW25dLHQuaW5kZXhPZihgIWApPj0wfHx0IT09YD1gJiYobV8uY29tcGFyYXRvck9wKz1gfFxcIWArdCl9KSgpO3ZhciBoXz1mdW5jdGlvbigpe3JldHVybntjaGVja3M6W119fSwkPXtHUk9VUDowLENPTExFQ1RJT046MSxGSUxURVI6MixEQVRBX0NPTVBBUkU6MyxEQVRBX0VYSVNUOjQsREFUQV9CT09MOjUsTUVUQV9DT01QQVJFOjYsU1RBVEU6NyxJRDo4LENMQVNTOjksVU5ESVJFQ1RFRF9FREdFOjEwLERJUkVDVEVEX0VER0U6MTEsTk9ERV9TT1VSQ0U6MTIsTk9ERV9UQVJHRVQ6MTMsTk9ERV9ORUlHSEJPUjoxNCxDSElMRDoxNSxERVNDRU5EQU5UOjE2LFBBUkVOVDoxNyxBTkNFU1RPUjoxOCxDT01QT1VORF9TUExJVDoxOSxUUlVFOjIwfSxnXz1be3NlbGVjdG9yOmA6c2VsZWN0ZWRgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0ZWQoKX19LHtzZWxlY3RvcjpgOnVuc2VsZWN0ZWRgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuc2VsZWN0ZWQoKX19LHtzZWxlY3RvcjpgOnNlbGVjdGFibGVgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0YWJsZSgpfX0se3NlbGVjdG9yOmA6dW5zZWxlY3RhYmxlYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiFlLnNlbGVjdGFibGUoKX19LHtzZWxlY3RvcjpgOmxvY2tlZGAsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4gZS5sb2NrZWQoKX19LHtzZWxlY3RvcjpgOnVubG9ja2VkYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiFlLmxvY2tlZCgpfX0se3NlbGVjdG9yOmA6dmlzaWJsZWAsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlKCl9fSx7c2VsZWN0b3I6YDpoaWRkZW5gLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIWUudmlzaWJsZSgpfX0se3NlbGVjdG9yOmA6dHJhbnNwYXJlbnRgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJhbnNwYXJlbnQoKX19LHtzZWxlY3RvcjpgOmdyYWJiZWRgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJlZCgpfX0se3NlbGVjdG9yOmA6ZnJlZWAsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4hZS5ncmFiYmVkKCl9fSx7c2VsZWN0b3I6YDpyZW1vdmVkYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbW92ZWQoKX19LHtzZWxlY3RvcjpgOmluc2lkZWAsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4hZS5yZW1vdmVkKCl9fSx7c2VsZWN0b3I6YDpncmFiYmFibGVgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ3JhYmJhYmxlKCl9fSx7c2VsZWN0b3I6YDp1bmdyYWJiYWJsZWAsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4hZS5ncmFiYmFibGUoKX19LHtzZWxlY3RvcjpgOmFuaW1hdGVkYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFuaW1hdGVkKCl9fSx7c2VsZWN0b3I6YDp1bmFuaW1hdGVkYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiFlLmFuaW1hdGVkKCl9fSx7c2VsZWN0b3I6YDpwYXJlbnRgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNQYXJlbnQoKX19LHtzZWxlY3RvcjpgOmNoaWxkbGVzc2AsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkbGVzcygpfX0se3NlbGVjdG9yOmA6Y2hpbGRgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfX0se3NlbGVjdG9yOmA6b3JwaGFuYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzT3JwaGFuKCl9fSx7c2VsZWN0b3I6YDpub25vcnBoYW5gLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfX0se3NlbGVjdG9yOmA6Y29tcG91bmRgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNOb2RlKCk/ZS5pc1BhcmVudCgpOmUuc291cmNlKCkuaXNQYXJlbnQoKXx8ZS50YXJnZXQoKS5pc1BhcmVudCgpfX0se3NlbGVjdG9yOmA6bG9vcGAsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0xvb3AoKX19LHtzZWxlY3RvcjpgOnNpbXBsZWAsbWF0Y2hlczpmdW5jdGlvbihlKXtyZXR1cm4gZS5pc1NpbXBsZSgpfX0se3NlbGVjdG9yOmA6YWN0aXZlYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmFjdGl2ZSgpfX0se3NlbGVjdG9yOmA6aW5hY3RpdmVgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuYWN0aXZlKCl9fSx7c2VsZWN0b3I6YDpiYWNrZ3JvdW5kaW5nYCxtYXRjaGVzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJhY2tncm91bmRpbmcoKX19LHtzZWxlY3RvcjpgOm5vbmJhY2tncm91bmRpbmdgLG1hdGNoZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuYmFja2dyb3VuZGluZygpfX1dLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaWwoZS5zZWxlY3Rvcix0LnNlbGVjdG9yKX0pLF9fPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXt9LHQsbj0wO248Z18ubGVuZ3RoO24rKyl0PWdfW25dLGVbdC5zZWxlY3Rvcl09dC5tYXRjaGVzO3JldHVybiBlfSgpLHZfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIF9fW2VdKHQpfSx5Xz1gKGArZ18ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnNlbGVjdG9yfSkuam9pbihgfGApK2ApYCxiXz1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKFJlZ0V4cChgXFxcXChgK21fLm1ldGFDaGFyK2ApYCxgZ2ApLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9KX0seF89ZnVuY3Rpb24oZSx0LG4pe2VbZS5sZW5ndGgtMV09bn0sU189W3tuYW1lOmBncm91cGAscXVlcnk6ITAscmVnZXg6YChgK21fLmdyb3VwK2ApYCxwb3B1bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bWMobiwxKVswXTt0LmNoZWNrcy5wdXNoKHt0eXBlOiQuR1JPVVAsdmFsdWU6cj09PWAqYD9yOnIrYHNgfSl9fSx7bmFtZTpgc3RhdGVgLHF1ZXJ5OiEwLHJlZ2V4OnlfLHBvcHVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1tYyhuLDEpWzBdO3QuY2hlY2tzLnB1c2goe3R5cGU6JC5TVEFURSx2YWx1ZTpyfSl9fSx7bmFtZTpgaWRgLHF1ZXJ5OiEwLHJlZ2V4OmBcXCMoYCttXy5pZCtgKWAscG9wdWxhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW1jKG4sMSlbMF07dC5jaGVja3MucHVzaCh7dHlwZTokLklELHZhbHVlOmJfKHIpfSl9fSx7bmFtZTpgY2xhc3NOYW1lYCxxdWVyeTohMCxyZWdleDpgXFwuKGArbV8uY2xhc3NOYW1lK2ApYCxwb3B1bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bWMobiwxKVswXTt0LmNoZWNrcy5wdXNoKHt0eXBlOiQuQ0xBU1MsdmFsdWU6Yl8ocil9KX19LHtuYW1lOmBkYXRhRXhpc3RzYCxxdWVyeTohMCxyZWdleDpgXFxbXFxzKihgK21fLnZhcmlhYmxlK2ApXFxzKlxcXWAscG9wdWxhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW1jKG4sMSlbMF07dC5jaGVja3MucHVzaCh7dHlwZTokLkRBVEFfRVhJU1QsZmllbGQ6Yl8ocil9KX19LHtuYW1lOmBkYXRhQ29tcGFyZWAscXVlcnk6ITAscmVnZXg6YFxcW1xccyooYCttXy52YXJpYWJsZStgKVxccyooYCttXy5jb21wYXJhdG9yT3ArYClcXHMqKGArbV8udmFsdWUrYClcXHMqXFxdYCxwb3B1bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bWMobiwzKSxpPXJbMF0sYT1yWzFdLG89clsyXTtvPVJlZ0V4cChgXmArbV8uc3RyaW5nK2AkYCkuZXhlYyhvKT09bnVsbD9wYXJzZUZsb2F0KG8pOm8uc3Vic3RyaW5nKDEsby5sZW5ndGgtMSksdC5jaGVja3MucHVzaCh7dHlwZTokLkRBVEFfQ09NUEFSRSxmaWVsZDpiXyhpKSxvcGVyYXRvcjphLHZhbHVlOm99KX19LHtuYW1lOmBkYXRhQm9vbGAscXVlcnk6ITAscmVnZXg6YFxcW1xccyooYCttXy5ib29sT3ArYClcXHMqKGArbV8udmFyaWFibGUrYClcXHMqXFxdYCxwb3B1bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bWMobiwyKSxpPXJbMF0sYT1yWzFdO3QuY2hlY2tzLnB1c2goe3R5cGU6JC5EQVRBX0JPT0wsZmllbGQ6Yl8oYSksb3BlcmF0b3I6aX0pfX0se25hbWU6YG1ldGFDb21wYXJlYCxxdWVyeTohMCxyZWdleDpgXFxbXFxbXFxzKihgK21fLm1ldGErYClcXHMqKGArbV8uY29tcGFyYXRvck9wK2ApXFxzKihgK21fLm51bWJlcitgKVxccypcXF1cXF1gLHBvcHVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1tYyhuLDMpLGk9clswXSxhPXJbMV0sbz1yWzJdO3QuY2hlY2tzLnB1c2goe3R5cGU6JC5NRVRBX0NPTVBBUkUsZmllbGQ6Yl8oaSksb3BlcmF0b3I6YSx2YWx1ZTpwYXJzZUZsb2F0KG8pfSl9fSx7bmFtZTpgbmV4dFF1ZXJ5YCxzZXBhcmF0b3I6ITAscmVnZXg6bV8uc2VwYXJhdG9yLHBvcHVsYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5jdXJyZW50U3ViamVjdCxyPWUuZWRnZUNvdW50LGk9ZS5jb21wb3VuZENvdW50LGE9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbiE9bnVsbCYmKGEuc3ViamVjdD1uLGUuY3VycmVudFN1YmplY3Q9bnVsbCksYS5lZGdlQ291bnQ9cixhLmNvbXBvdW5kQ291bnQ9aSxlLmVkZ2VDb3VudD0wLGUuY29tcG91bmRDb3VudD0wLGVbZS5sZW5ndGgrK109aF8oKX19LHtuYW1lOmBkaXJlY3RlZEVkZ2VgLHNlcGFyYXRvcjohMCxyZWdleDptXy5kaXJlY3RlZEVkZ2UscG9wdWxhdGU6ZnVuY3Rpb24oZSx0KXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1oXygpLHI9dCxpPWhfKCk7cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JC5ESVJFQ1RFRF9FREdFLHNvdXJjZTpyLHRhcmdldDppfSkseF8oZSx0LG4pLGUuZWRnZUNvdW50KyssaX12YXIgYT1oXygpLG89dCxzPWhfKCk7cmV0dXJuIGEuY2hlY2tzLnB1c2goe3R5cGU6JC5OT0RFX1NPVVJDRSxzb3VyY2U6byx0YXJnZXQ6c30pLHhfKGUsdCxhKSxlLmVkZ2VDb3VudCsrLHN9fSx7bmFtZTpgdW5kaXJlY3RlZEVkZ2VgLHNlcGFyYXRvcjohMCxyZWdleDptXy51bmRpcmVjdGVkRWRnZSxwb3B1bGF0ZTpmdW5jdGlvbihlLHQpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPWhfKCkscj10LGk9aF8oKTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokLlVORElSRUNURURfRURHRSxub2RlczpbcixpXX0pLHhfKGUsdCxuKSxlLmVkZ2VDb3VudCsrLGl9dmFyIGE9aF8oKSxvPXQscz1oXygpO3JldHVybiBhLmNoZWNrcy5wdXNoKHt0eXBlOiQuTk9ERV9ORUlHSEJPUixub2RlOm8sbmVpZ2hib3I6c30pLHhfKGUsdCxhKSxzfX0se25hbWU6YGNoaWxkYCxzZXBhcmF0b3I6ITAscmVnZXg6bV8uY2hpbGQscG9wdWxhdGU6ZnVuY3Rpb24oZSx0KXtpZihlLmN1cnJlbnRTdWJqZWN0PT1udWxsKXt2YXIgbj1oXygpLHI9aF8oKSxpPWVbZS5sZW5ndGgtMV07cmV0dXJuIG4uY2hlY2tzLnB1c2goe3R5cGU6JC5DSElMRCxwYXJlbnQ6aSxjaGlsZDpyfSkseF8oZSx0LG4pLGUuY29tcG91bmRDb3VudCsrLHJ9aWYoZS5jdXJyZW50U3ViamVjdD09PXQpe3ZhciBhPWhfKCksbz1lW2UubGVuZ3RoLTFdLHM9aF8oKSxjPWhfKCksbD1oXygpLHU9aF8oKTtyZXR1cm4gYS5jaGVja3MucHVzaCh7dHlwZTokLkNPTVBPVU5EX1NQTElULGxlZnQ6byxyaWdodDpzLHN1YmplY3Q6Y30pLGMuY2hlY2tzPXQuY2hlY2tzLHQuY2hlY2tzPVt7dHlwZTokLlRSVUV9XSx1LmNoZWNrcy5wdXNoKHt0eXBlOiQuVFJVRX0pLHMuY2hlY2tzLnB1c2goe3R5cGU6JC5QQVJFTlQscGFyZW50OnUsY2hpbGQ6bH0pLHhfKGUsbyxhKSxlLmN1cnJlbnRTdWJqZWN0PWMsZS5jb21wb3VuZENvdW50KyssbH12YXIgZD1oXygpLGY9aF8oKSxwPVt7dHlwZTokLlBBUkVOVCxwYXJlbnQ6ZCxjaGlsZDpmfV07cmV0dXJuIGQuY2hlY2tzPXQuY2hlY2tzLHQuY2hlY2tzPXAsZS5jb21wb3VuZENvdW50KyssZn19LHtuYW1lOmBkZXNjZW5kYW50YCxzZXBhcmF0b3I6ITAscmVnZXg6bV8uZGVzY2VuZGFudCxwb3B1bGF0ZTpmdW5jdGlvbihlLHQpe2lmKGUuY3VycmVudFN1YmplY3Q9PW51bGwpe3ZhciBuPWhfKCkscj1oXygpLGk9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gbi5jaGVja3MucHVzaCh7dHlwZTokLkRFU0NFTkRBTlQsYW5jZXN0b3I6aSxkZXNjZW5kYW50OnJ9KSx4XyhlLHQsbiksZS5jb21wb3VuZENvdW50Kysscn1pZihlLmN1cnJlbnRTdWJqZWN0PT09dCl7dmFyIGE9aF8oKSxvPWVbZS5sZW5ndGgtMV0scz1oXygpLGM9aF8oKSxsPWhfKCksdT1oXygpO3JldHVybiBhLmNoZWNrcy5wdXNoKHt0eXBlOiQuQ09NUE9VTkRfU1BMSVQsbGVmdDpvLHJpZ2h0OnMsc3ViamVjdDpjfSksYy5jaGVja3M9dC5jaGVja3MsdC5jaGVja3M9W3t0eXBlOiQuVFJVRX1dLHUuY2hlY2tzLnB1c2goe3R5cGU6JC5UUlVFfSkscy5jaGVja3MucHVzaCh7dHlwZTokLkFOQ0VTVE9SLGFuY2VzdG9yOnUsZGVzY2VuZGFudDpsfSkseF8oZSxvLGEpLGUuY3VycmVudFN1YmplY3Q9YyxlLmNvbXBvdW5kQ291bnQrKyxsfXZhciBkPWhfKCksZj1oXygpLHA9W3t0eXBlOiQuQU5DRVNUT1IsYW5jZXN0b3I6ZCxkZXNjZW5kYW50OmZ9XTtyZXR1cm4gZC5jaGVja3M9dC5jaGVja3MsdC5jaGVja3M9cCxlLmNvbXBvdW5kQ291bnQrKyxmfX0se25hbWU6YHN1YmplY3RgLG1vZGlmaWVyOiEwLHJlZ2V4Om1fLnN1YmplY3QscG9wdWxhdGU6ZnVuY3Rpb24oZSx0KXtpZihlLmN1cnJlbnRTdWJqZWN0IT1udWxsJiZlLmN1cnJlbnRTdWJqZWN0IT09dClyZXR1cm4gSXUoIlJlZGVmaW5pdGlvbiBvZiBzdWJqZWN0IGluIHNlbGVjdG9yIGAiK2UudG9TdHJpbmcoKSsiYCIpLCExO2UuY3VycmVudFN1YmplY3Q9dDt2YXIgbj1lW2UubGVuZ3RoLTFdLmNoZWNrc1swXSxyPW49PW51bGw/bnVsbDpuLnR5cGU7cj09PSQuRElSRUNURURfRURHRT9uLnR5cGU9JC5OT0RFX1RBUkdFVDpyPT09JC5VTkRJUkVDVEVEX0VER0UmJihuLnR5cGU9JC5OT0RFX05FSUdIQk9SLG4ubm9kZT1uLm5vZGVzWzFdLG4ubmVpZ2hib3I9bi5ub2Rlc1swXSxuLm5vZGVzPW51bGwpfX1dO1NfLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVnZXhPYmo9UmVnRXhwKGBeYCtlLnJlZ2V4KX0pO3ZhciBDXz1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9MDtpPFNfLmxlbmd0aDtpKyspe3ZhciBhPVNfW2ldLG89YS5uYW1lLHM9ZS5tYXRjaChhLnJlZ2V4T2JqKTtpZihzIT1udWxsKXtuPXMsdD1hLHI9bzt2YXIgYz1zWzBdO2U9ZS5zdWJzdHJpbmcoYy5sZW5ndGgpO2JyZWFrfX1yZXR1cm57ZXhwcjp0LG1hdGNoOm4sbmFtZTpyLHJlbWFpbmluZzplfX0sd189ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvXlxzKy8pO2lmKHQpe3ZhciBuPXRbMF07ZT1lLnN1YnN0cmluZyhuLmxlbmd0aCl9cmV0dXJuIGV9LFRfPXtwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5pbnB1dFRleHQ9ZSxyPXRbMF09aF8oKTtmb3IodC5sZW5ndGg9MSxuPXdfKG4pOzspe3ZhciBpPUNfKG4pO2lmKGkuZXhwcj09bnVsbClyZXR1cm4gSXUoIlRoZSBzZWxlY3RvciBgIitlKyJgaXMgaW52YWxpZCIpLCExO3ZhciBhPWkubWF0Y2guc2xpY2UoMSksbz1pLmV4cHIucG9wdWxhdGUodCxyLGEpO2lmKG89PT0hMSlyZXR1cm4hMTtpZihvIT1udWxsJiYocj1vKSxuPWkucmVtYWluaW5nLG4ubWF0Y2goL15ccyokLykpYnJlYWt9dmFyIHM9dFt0Lmxlbmd0aC0xXTt0LmN1cnJlbnRTdWJqZWN0IT1udWxsJiYocy5zdWJqZWN0PXQuY3VycmVudFN1YmplY3QpLHMuZWRnZUNvdW50PXQuZWRnZUNvdW50LHMuY29tcG91bmRDb3VudD10LmNvbXBvdW5kQ291bnQ7Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciBsPXRbY107aWYobC5jb21wb3VuZENvdW50PjAmJmwuZWRnZUNvdW50PjApcmV0dXJuIEl1KCJUaGUgc2VsZWN0b3IgYCIrZSsiYCBpcyBpbnZhbGlkIGJlY2F1c2UgaXQgdXNlcyBib3RoIGEgY29tcG91bmQgc2VsZWN0b3IgYW5kIGFuIGVkZ2Ugc2VsZWN0b3IiKSwhMTtpZihsLmVkZ2VDb3VudD4xKXJldHVybiBJdSgiVGhlIHNlbGVjdG9yIGAiK2UrImAgaXMgaW52YWxpZCBiZWNhdXNlIGl0IHVzZXMgbXVsdGlwbGUgZWRnZSBzZWxlY3RvcnMiKSwhMTtsLmVkZ2VDb3VudD09PTEmJkl1KCJUaGUgc2VsZWN0b3IgYCIrZSsiYCBpcyBkZXByZWNhdGVkLiAgRWRnZSBzZWxlY3RvcnMgZG8gbm90IHRha2UgZWZmZWN0IG9uIGNoYW5nZXMgdG8gc291cmNlIGFuZCB0YXJnZXQgbm9kZXMgYWZ0ZXIgYW4gZWRnZSBpcyBhZGRlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICBVc2UgYSBjbGFzcyBvciBkYXRhIHNlbGVjdG9yIG9uIGVkZ2VzIGluc3RlYWQsIHVwZGF0aW5nIHRoZSBjbGFzcyBvciBkYXRhIG9mIGFuIGVkZ2Ugd2hlbiB5b3VyIGFwcCBkZXRlY3RzIGEgY2hhbmdlIGluIHNvdXJjZSBvciB0YXJnZXQgbm9kZXMuIil9cmV0dXJuITB9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7aWYodGhpcy50b1N0cmluZ0NhY2hlIT1udWxsKXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU7Zm9yKHZhciBlPWZ1bmN0aW9uKGUpe3JldHVybiBlPz9gYH0sdD1mdW5jdGlvbih0KXtyZXR1cm4gWih0KT9gImArdCtgImA6ZSh0KX0sbj1mdW5jdGlvbihlKXtyZXR1cm5gIGArZStgIGB9LHI9ZnVuY3Rpb24ocixhKXt2YXIgbz1yLnR5cGUscz1yLnZhbHVlO3N3aXRjaChvKXtjYXNlICQuR1JPVVA6dmFyIGM9ZShzKTtyZXR1cm4gYy5zdWJzdHJpbmcoMCxjLmxlbmd0aC0xKTtjYXNlICQuREFUQV9DT01QQVJFOnZhciBsPXIuZmllbGQsdT1yLm9wZXJhdG9yO3JldHVybmBbYCtsK24oZSh1KSkrdChzKStgXWA7Y2FzZSAkLkRBVEFfQk9PTDp2YXIgZD1yLm9wZXJhdG9yLGY9ci5maWVsZDtyZXR1cm5gW2ArZShkKStmK2BdYDtjYXNlICQuREFUQV9FWElTVDpyZXR1cm5gW2Arci5maWVsZCtgXWA7Y2FzZSAkLk1FVEFfQ09NUEFSRTp2YXIgcD1yLm9wZXJhdG9yO3JldHVybmBbW2Arci5maWVsZCtuKGUocCkpK3QocykrYF1dYDtjYXNlICQuU1RBVEU6cmV0dXJuIHM7Y2FzZSAkLklEOnJldHVybmAjYCtzO2Nhc2UgJC5DTEFTUzpyZXR1cm5gLmArcztjYXNlICQuUEFSRU5UOmNhc2UgJC5DSElMRDpyZXR1cm4gaShyLnBhcmVudCxhKStuKGA+YCkraShyLmNoaWxkLGEpO2Nhc2UgJC5BTkNFU1RPUjpjYXNlICQuREVTQ0VOREFOVDpyZXR1cm4gaShyLmFuY2VzdG9yLGEpK2AgYCtpKHIuZGVzY2VuZGFudCxhKTtjYXNlICQuQ09NUE9VTkRfU1BMSVQ6dmFyIG09aShyLmxlZnQsYSksaD1pKHIuc3ViamVjdCxhKSxnPWkoci5yaWdodCxhKTtyZXR1cm4gbSsobS5sZW5ndGg+MD9gIGA6YGApK2grZztjYXNlICQuVFJVRTpyZXR1cm5gYH19LGk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGVja3MucmVkdWNlKGZ1bmN0aW9uKG4saSxhKXtyZXR1cm4gbisodD09PWUmJmE9PT0wP2AkYDpgYCkrcihpLHQpfSxgYCl9LGE9YGAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzW29dO2ErPWkocyxzLnN1YmplY3QpLHRoaXMubGVuZ3RoPjEmJm88dGhpcy5sZW5ndGgtMSYmKGErPWAsIGApfXJldHVybiB0aGlzLnRvU3RyaW5nQ2FjaGU9YSxhfX0sRV89ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9WihlKSxhPVEoZSksbz1aKG4pLHMsYyxsPSExLHU9ITEsZD0hMTtzd2l0Y2godC5pbmRleE9mKGAhYCk+PTAmJih0PXQucmVwbGFjZShgIWAsYGApLHU9ITApLHQuaW5kZXhPZihgQGApPj0wJiYodD10LnJlcGxhY2UoYEBgLGBgKSxsPSEwKSwoaXx8b3x8bCkmJihzPSFpJiYhYT9gYDpgYCtlLGM9YGArbiksbCYmKGU9cz1zLnRvTG93ZXJDYXNlKCksbj1jPWMudG9Mb3dlckNhc2UoKSksdCl7Y2FzZWAqPWA6cj1zLmluZGV4T2YoYyk+PTA7YnJlYWs7Y2FzZWAkPWA6cj1zLmluZGV4T2YoYyxzLmxlbmd0aC1jLmxlbmd0aCk+PTA7YnJlYWs7Y2FzZWBePWA6cj1zLmluZGV4T2YoYyk9PT0wO2JyZWFrO2Nhc2VgPWA6cj1lPT09bjticmVhaztjYXNlYD5gOmQ9ITAscj1lPm47YnJlYWs7Y2FzZWA+PWA6ZD0hMCxyPWU+PW47YnJlYWs7Y2FzZWA8YDpkPSEwLHI9ZTxuO2JyZWFrO2Nhc2VgPD1gOmQ9ITAscj1lPD1uO2JyZWFrO2RlZmF1bHQ6cj0hMX1yZXR1cm4gdSYmKGUhPW51bGx8fCFkKSYmKHI9IXIpLHJ9LERfPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2VgP2A6cmV0dXJuISFlO2Nhc2VgIWA6cmV0dXJuIWU7Y2FzZWBeYDpyZXR1cm4gZT09PXZvaWQgMH19LE9fPWZ1bmN0aW9uKGUpe3JldHVybiBlIT09dm9pZCAwfSxrXz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmRhdGEodCl9LEFfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF0oKX0sal89W10sTV89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGVja3MuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGpfW2UudHlwZV0oZSx0KX0pfTtqX1skLkdST1VQXT1mdW5jdGlvbihlLHQpe3ZhciBuPWUudmFsdWU7cmV0dXJuIG49PT1gKmB8fG49PT10Lmdyb3VwKCl9LGpfWyQuU1RBVEVdPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gdl8obix0KX0sal9bJC5JRF09ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnZhbHVlO3JldHVybiB0LmlkKCk9PT1ufSxqX1skLkNMQVNTXT1mdW5jdGlvbihlLHQpe3ZhciBuPWUudmFsdWU7cmV0dXJuIHQuaGFzQ2xhc3Mobil9LGpfWyQuTUVUQV9DT01QQVJFXT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuZmllbGQscj1lLm9wZXJhdG9yLGk9ZS52YWx1ZTtyZXR1cm4gRV8oQV8odCxuKSxyLGkpfSxqX1skLkRBVEFfQ09NUEFSRV09ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmZpZWxkLHI9ZS5vcGVyYXRvcixpPWUudmFsdWU7cmV0dXJuIEVfKGtfKHQsbikscixpKX0sal9bJC5EQVRBX0JPT0xdPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5maWVsZCxyPWUub3BlcmF0b3I7cmV0dXJuIERfKGtfKHQsbikscil9LGpfWyQuREFUQV9FWElTVF09ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmZpZWxkO3JldHVybiBlLm9wZXJhdG9yLE9fKGtfKHQsbikpfSxqX1skLlVORElSRUNURURfRURHRV09ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm5vZGVzWzBdLHI9ZS5ub2Rlc1sxXSxpPXQuc291cmNlKCksYT10LnRhcmdldCgpO3JldHVybiBNXyhuLGkpJiZNXyhyLGEpfHxNXyhyLGkpJiZNXyhuLGEpfSxqX1skLk5PREVfTkVJR0hCT1JdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1fKGUubm9kZSx0KSYmdC5uZWlnaGJvcmhvb2QoKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzTm9kZSgpJiZNXyhlLm5laWdoYm9yLHQpfSl9LGpfWyQuRElSRUNURURfRURHRV09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTV8oZS5zb3VyY2UsdC5zb3VyY2UoKSkmJk1fKGUudGFyZ2V0LHQudGFyZ2V0KCkpfSxqX1skLk5PREVfU09VUkNFXT1mdW5jdGlvbihlLHQpe3JldHVybiBNXyhlLnNvdXJjZSx0KSYmdC5vdXRnb2VycygpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNOb2RlKCkmJk1fKGUudGFyZ2V0LHQpfSl9LGpfWyQuTk9ERV9UQVJHRVRdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1fKGUudGFyZ2V0LHQpJiZ0LmluY29tZXJzKCkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5pc05vZGUoKSYmTV8oZS5zb3VyY2UsdCl9KX0sal9bJC5DSElMRF09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gTV8oZS5jaGlsZCx0KSYmTV8oZS5wYXJlbnQsdC5wYXJlbnQoKSl9LGpfWyQuUEFSRU5UXT1mdW5jdGlvbihlLHQpe3JldHVybiBNXyhlLnBhcmVudCx0KSYmdC5jaGlsZHJlbigpLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIE1fKGUuY2hpbGQsdCl9KX0sal9bJC5ERVNDRU5EQU5UXT1mdW5jdGlvbihlLHQpe3JldHVybiBNXyhlLmRlc2NlbmRhbnQsdCkmJnQuYW5jZXN0b3JzKCkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gTV8oZS5hbmNlc3Rvcix0KX0pfSxqX1skLkFOQ0VTVE9SXT1mdW5jdGlvbihlLHQpe3JldHVybiBNXyhlLmFuY2VzdG9yLHQpJiZ0LmRlc2NlbmRhbnRzKCkuc29tZShmdW5jdGlvbih0KXtyZXR1cm4gTV8oZS5kZXNjZW5kYW50LHQpfSl9LGpfWyQuQ09NUE9VTkRfU1BMSVRdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE1fKGUuc3ViamVjdCx0KSYmTV8oZS5sZWZ0LHQpJiZNXyhlLnJpZ2h0LHQpfSxqX1skLlRSVUVdPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpfWyQuQ09MTEVDVElPTl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52YWx1ZS5oYXModCl9LGpfWyQuRklMVEVSXT1mdW5jdGlvbihlLHQpe3ZhciBuPWUudmFsdWU7cmV0dXJuIG4odCl9O3ZhciBOXz17bWF0Y2hlczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07aWYoTV8ocixlKSlyZXR1cm4hMH1yZXR1cm4hMX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodC5sZW5ndGg9PT0xJiZ0WzBdLmNoZWNrcy5sZW5ndGg9PT0xJiZ0WzBdLmNoZWNrc1swXS50eXBlPT09JC5JRClyZXR1cm4gZS5nZXRFbGVtZW50QnlJZCh0WzBdLmNoZWNrc1swXS52YWx1ZSkuY29sbGVjdGlvbigpO3ZhciBuPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKE1fKHIsZSkpcmV0dXJuITB9cmV0dXJuITF9O3JldHVybiB0LnRleHQoKT8/KG49ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLGUuZmlsdGVyKG4pfX0sUF89ZnVuY3Rpb24oZSl7dGhpcy5pbnB1dFRleHQ9ZSx0aGlzLmN1cnJlbnRTdWJqZWN0PW51bGwsdGhpcy5jb21wb3VuZENvdW50PTAsdGhpcy5lZGdlQ291bnQ9MCx0aGlzLmxlbmd0aD0wLGU9PW51bGx8fFooZSkmJmUubWF0Y2goL15ccyokLyl8fChOYyhlKT90aGlzLmFkZFF1ZXJ5KHtjaGVja3M6W3t0eXBlOiQuQ09MTEVDVElPTix2YWx1ZTplLmNvbGxlY3Rpb24oKX1dfSk6RGMoZSk/dGhpcy5hZGRRdWVyeSh7Y2hlY2tzOlt7dHlwZTokLkZJTFRFUix2YWx1ZTplfV19KTpaKGUpP3RoaXMucGFyc2UoZSl8fCh0aGlzLmludmFsaWQ9ITApOlB1KGBBIHNlbGVjdG9yIG11c3QgYmUgY3JlYXRlZCBmcm9tIGEgc3RyaW5nOyBmb3VuZCBgKSl9LEZfPVBfLnByb3RvdHlwZTtbVF8sTl9dLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGFsKEZfLGUpfSksRl8udGV4dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0VGV4dH0sRl8uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sRl8uZXE9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZV19LEZfLnNhbWVUZXh0PWZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLmludmFsaWQmJiFlLmludmFsaWQmJnRoaXMudGV4dCgpPT09ZS50ZXh0KCl9LEZfLmFkZFF1ZXJ5PWZ1bmN0aW9uKGUpe3RoaXNbdGhpcy5sZW5ndGgrK109ZX0sRl8uc2VsZWN0b3I9Rl8udG9TdHJpbmc7dmFyIElfPXthbGxBcmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFBfKGUpO3JldHVybiB0aGlzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiB0Lm1hdGNoZXMoZSl9KX0saXM6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFBfKGUpO3JldHVybiB0aGlzLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIHQubWF0Y2hlcyhlKX0pfSxzb21lOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspaWYodD9lLmFwcGx5KHQsW3RoaXNbbl0sbix0aGlzXSk6ZSh0aGlzW25dLG4sdGhpcykpcmV0dXJuITA7cmV0dXJuITF9LGV2ZXJ5OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspaWYoISh0P2UuYXBwbHkodCxbdGhpc1tuXSxuLHRoaXNdKTplKHRoaXNbbl0sbix0aGlzKSkpcmV0dXJuITE7cmV0dXJuITB9LHNhbWU6ZnVuY3Rpb24oZSl7aWYodGhpcz09PWUpcmV0dXJuITA7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgdD10aGlzLmxlbmd0aDtyZXR1cm4gdD09PWUubGVuZ3RoP3Q9PT0xP3RoaXNbMF09PT1lWzBdOnRoaXMuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFzRWxlbWVudFdpdGhJZCh0LmlkKCkpfSk6ITF9LGFueVNhbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5jeSgpLmNvbGxlY3Rpb24oZSksdGhpcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiBlLmhhc0VsZW1lbnRXaXRoSWQodC5pZCgpKX0pfSxhbGxBcmVOZWlnaGJvcnM6ZnVuY3Rpb24oZSl7ZT10aGlzLmN5KCkuY29sbGVjdGlvbihlKTt2YXIgdD10aGlzLm5laWdoYm9yaG9vZCgpO3JldHVybiBlLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiB0Lmhhc0VsZW1lbnRXaXRoSWQoZS5pZCgpKX0pfSxjb250YWluczpmdW5jdGlvbihlKXtlPXRoaXMuY3koKS5jb2xsZWN0aW9uKGUpO3ZhciB0PXRoaXM7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFzRWxlbWVudFdpdGhJZChlLmlkKCkpfSl9fTtJXy5hbGxBcmVOZWlnaGJvdXJzPUlfLmFsbEFyZU5laWdoYm9ycyxJXy5oYXM9SV8uY29udGFpbnMsSV8uZXF1YWw9SV8uZXF1YWxzPUlfLnNhbWU7dmFyIExfPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scixpLGEpe3ZhciBvPW4scz10aGlzLGM7aWYobz09bnVsbD9jPWBgOk5jKG8pJiZvLmxlbmd0aD09PTEmJihjPW8uaWQoKSkscy5sZW5ndGg9PT0xJiZjKXt2YXIgbD1zWzBdLl9wcml2YXRlLHU9bC50cmF2ZXJzYWxDYWNoZT1sLnRyYXZlcnNhbENhY2hlfHx7fSxkPXVbdF09dVt0XXx8W10sZj1idShjKTtyZXR1cm4gZFtmXXx8KGRbZl09ZS5jYWxsKHMsbixyLGksYSkpfXJldHVybiBlLmNhbGwocyxuLHIsaSxhKX19LFJfPXtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9W107aWYodGhpcy5sZW5ndGg9PT0xKXt2YXIgbj10aGlzWzBdLl9wcml2YXRlLnBhcmVudDtpZihuKXJldHVybiBufWZvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT10aGlzW3JdLl9wcml2YXRlLnBhcmVudDtpJiZ0LnB1c2goaSl9cmV0dXJuIHRoaXMuc3Bhd24odCwhMCkuZmlsdGVyKGUpfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPXRoaXMucGFyZW50KCk7bi5ub25lbXB0eSgpOyl7Zm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07dC5wdXNoKGkpfW49bi5wYXJlbnQoKX1yZXR1cm4gdGhpcy5zcGF3bih0LCEwKS5maWx0ZXIoZSl9LGNvbW1vbkFuY2VzdG9yczpmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgcj10aGlzW25dLnBhcmVudHMoKTt0fHw9cix0PXQuaW50ZXJzZWN0KHIpfXJldHVybiB0LmZpbHRlcihlKX0sb3JwaGFuczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNPcnBoYW4oKX0pLmZpbHRlcihlKX0sbm9ub3JwaGFuczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdGRGaWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNDaGlsZCgpfSkuZmlsdGVyKGUpfSxjaGlsZHJlbjpMXyhmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248dGhpcy5sZW5ndGg7bisrKWZvcih2YXIgcj10aGlzW25dLl9wcml2YXRlLmNoaWxkcmVuLGk9MDtpPHIubGVuZ3RoO2krKyl0LnB1c2gocltpXSk7cmV0dXJuIHRoaXMuc3Bhd24odCwhMCkuZmlsdGVyKGUpfSxgY2hpbGRyZW5gKSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpLm5vdCh0aGlzKS5maWx0ZXIoZSl9LGlzUGFyZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLmlzTm9kZSgpJiZlLl9wcml2YXRlLmNoaWxkcmVuLmxlbmd0aCE9PTB9LGlzQ2hpbGRsZXNzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLmlzTm9kZSgpJiZlLl9wcml2YXRlLmNoaWxkcmVuLmxlbmd0aD09PTB9LGlzQ2hpbGQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuaXNOb2RlKCkmJmUuX3ByaXZhdGUucGFyZW50IT1udWxsfSxpc09ycGhhbjpmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4gZS5pc05vZGUoKSYmZS5fcHJpdmF0ZS5wYXJlbnQ9PW51bGx9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPWVbcl07dC5wdXNoKGkpLGkuY2hpbGRyZW4oKS5ub25lbXB0eSgpJiZuKGkuY2hpbGRyZW4oKSl9fXJldHVybiBuKHRoaXMuY2hpbGRyZW4oKSksdGhpcy5zcGF3bih0LCEwKS5maWx0ZXIoZSl9fTtmdW5jdGlvbiB6XyhlLHQsbixyKXtmb3IodmFyIGk9W10sYT1uZXcgUXUsbz1lLmN5KCkuaGFzQ29tcG91bmROb2RlcygpLHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGM9ZVtzXTtuP2kucHVzaChjKTpvJiZyKGksYSxjKX1mb3IoO2kubGVuZ3RoPjA7KXt2YXIgbD1pLnNoaWZ0KCk7dChsKSxhLmFkZChsLmlkKCkpLG8mJnIoaSxhLGwpfXJldHVybiBlfWZ1bmN0aW9uIEJfKGUsdCxuKXtpZihuLmlzUGFyZW50KCkpZm9yKHZhciByPW4uX3ByaXZhdGUuY2hpbGRyZW4saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO3QuaGFzKGEuaWQoKSl8fGUucHVzaChhKX19Ul8uZm9yRWFjaERvd249ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiB6Xyh0aGlzLGUsdCxCXyl9O2Z1bmN0aW9uIFZfKGUsdCxuKXtpZihuLmlzQ2hpbGQoKSl7dmFyIHI9bi5fcHJpdmF0ZS5wYXJlbnQ7dC5oYXMoci5pZCgpKXx8ZS5wdXNoKHIpfX1SXy5mb3JFYWNoVXA9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiB6Xyh0aGlzLGUsdCxWXyl9O2Z1bmN0aW9uIEhfKGUsdCxuKXtWXyhlLHQsbiksQl8oZSx0LG4pfVJfLmZvckVhY2hVcEFuZERvd249ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO3JldHVybiB6Xyh0aGlzLGUsdCxIXyl9LFJfLmFuY2VzdG9ycz1SXy5wYXJlbnRzO3ZhciBVXz1XXz17ZGF0YTpkXy5kYXRhKHtmaWVsZDpgZGF0YWAsYmluZGluZ0V2ZW50OmBkYXRhYCxhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDpgZGF0YWAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZTpgdHJpZ2dlcmAsYWxsb3dHZXR0aW5nOiEwLGltbXV0YWJsZUtleXM6e2lkOiEwLHNvdXJjZTohMCx0YXJnZXQ6ITAscGFyZW50OiEwfSx1cGRhdGVTdHlsZTohMH0pLHJlbW92ZURhdGE6ZF8ucmVtb3ZlRGF0YSh7ZmllbGQ6YGRhdGFgLGV2ZW50OmBkYXRhYCx0cmlnZ2VyRm5OYW1lOmB0cmlnZ2VyYCx0cmlnZ2VyRXZlbnQ6ITAsaW1tdXRhYmxlS2V5czp7aWQ6ITAsc291cmNlOiEwLHRhcmdldDohMCxwYXJlbnQ6ITB9LHVwZGF0ZVN0eWxlOiEwfSksc2NyYXRjaDpkXy5kYXRhKHtmaWVsZDpgc2NyYXRjaGAsYmluZGluZ0V2ZW50OmBzY3JhdGNoYCxhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDpgc2NyYXRjaGAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZTpgdHJpZ2dlcmAsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlU2NyYXRjaDpkXy5yZW1vdmVEYXRhKHtmaWVsZDpgc2NyYXRjaGAsZXZlbnQ6YHNjcmF0Y2hgLHRyaWdnZXJGbk5hbWU6YHRyaWdnZXJgLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pLHJzY3JhdGNoOmRfLmRhdGEoe2ZpZWxkOmByc2NyYXRjaGAsYWxsb3dCaW5kaW5nOiExLGFsbG93U2V0dGluZzohMCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMSxhbGxvd0dldHRpbmc6ITB9KSxyZW1vdmVSc2NyYXRjaDpkXy5yZW1vdmVEYXRhKHtmaWVsZDpgcnNjcmF0Y2hgLHRyaWdnZXJFdmVudDohMX0pLGlkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXJldHVybiBlLl9wcml2YXRlLmRhdGEuaWR9fSxXXztVXy5hdHRyPVVfLmRhdGEsVV8ucmVtb3ZlQXR0cj1VXy5yZW1vdmVEYXRhO3ZhciBHXz1XXyxLXz17fTtmdW5jdGlvbiBxXyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dGhpcztpZih0PT09dm9pZCAwJiYodD0hMCksbi5sZW5ndGghPT0wJiZuLmlzTm9kZSgpJiYhbi5yZW1vdmVkKCkpe2Zvcih2YXIgcj0wLGk9blswXSxhPWkuX3ByaXZhdGUuZWRnZXMsbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dOyh0fHwhcy5pc0xvb3AoKSkmJihyKz1lKGkscykpfXJldHVybiByfX19YWwoS18se2RlZ3JlZTpxXyhmdW5jdGlvbihlLHQpe3JldHVybiB0LnNvdXJjZSgpLnNhbWUodC50YXJnZXQoKSk/MjoxfSksaW5kZWdyZWU6cV8oZnVuY3Rpb24oZSx0KXtyZXR1cm4rISF0LnRhcmdldCgpLnNhbWUoZSl9KSxvdXRkZWdyZWU6cV8oZnVuY3Rpb24oZSx0KXtyZXR1cm4rISF0LnNvdXJjZSgpLnNhbWUoZSl9KX0pO2Z1bmN0aW9uIEpfKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgcixpPXRoaXMubm9kZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV1bZV0obik7byE9PXZvaWQgMCYmKHI9PT12b2lkIDB8fHQobyxyKSkmJihyPW8pfXJldHVybiByfX1hbChLXyx7bWluRGVncmVlOkpfKGBkZWdyZWVgLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dH0pLG1heERlZ3JlZTpKXyhgZGVncmVlYCxmdW5jdGlvbihlLHQpe3JldHVybiBlPnR9KSxtaW5JbmRlZ3JlZTpKXyhgaW5kZWdyZWVgLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dH0pLG1heEluZGVncmVlOkpfKGBpbmRlZ3JlZWAsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT50fSksbWluT3V0ZGVncmVlOkpfKGBvdXRkZWdyZWVgLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8dH0pLG1heE91dGRlZ3JlZTpKXyhgb3V0ZGVncmVlYCxmdW5jdGlvbihlLHQpe3JldHVybiBlPnR9KX0pLGFsKEtfLHt0b3RhbERlZ3JlZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPXRoaXMubm9kZXMoKSxyPTA7cjxuLmxlbmd0aDtyKyspdCs9bltyXS5kZWdyZWUoZSk7cmV0dXJuIHR9fSk7dmFyIFlfLFhfLFpfPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXTtpZighaS5sb2NrZWQoKSl7dmFyIGE9aS5fcHJpdmF0ZS5wb3NpdGlvbixvPXt4OnQueD09bnVsbD8wOnQueC1hLngseTp0Lnk9PW51bGw/MDp0LnktYS55fTtpLmlzUGFyZW50KCkmJihvLnghPT0wfHxvLnkhPT0wKSYmaS5jaGlsZHJlbigpLnNoaWZ0KG8sbiksaS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX19fSxRXz17ZmllbGQ6YHBvc2l0aW9uYCxiaW5kaW5nRXZlbnQ6YHBvc2l0aW9uYCxhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDpgcG9zaXRpb25gLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiEwLHRyaWdnZXJGbk5hbWU6YGVtaXRBbmROb3RpZnlgLGFsbG93R2V0dGluZzohMCx2YWxpZEtleXM6W2B4YCxgeWBdLGJlZm9yZUdldDpmdW5jdGlvbihlKXtlLnVwZGF0ZUNvbXBvdW5kQm91bmRzKCl9LGJlZm9yZVNldDpmdW5jdGlvbihlLHQpe1pfKGUsdCwhMSl9LG9uU2V0OmZ1bmN0aW9uKGUpe2UuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCl9LGNhblNldDpmdW5jdGlvbihlKXtyZXR1cm4hZS5sb2NrZWQoKX19O1lfPVhfPXtwb3NpdGlvbjpkXy5kYXRhKFFfKSxzaWxlbnRQb3NpdGlvbjpkXy5kYXRhKGFsKHt9LFFfLHthbGxvd0JpbmRpbmc6ITEsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdUcmlnZ2Vyc0V2ZW50OiExLGFsbG93R2V0dGluZzohMSxiZWZvcmVTZXQ6ZnVuY3Rpb24oZSx0KXtaXyhlLHQsITApfSxvblNldDpmdW5jdGlvbihlKXtlLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpfX0pKSxwb3NpdGlvbnM6ZnVuY3Rpb24oZSx0KXtpZihrYyhlKSl0P3RoaXMuc2lsZW50UG9zaXRpb24oZSk6dGhpcy5wb3NpdGlvbihlKTtlbHNlIGlmKERjKGUpKXt2YXIgbj1lLHI9dGhpcy5jeSgpO3Iuc3RhcnRCYXRjaCgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgYT10aGlzW2ldLG89dm9pZCAwOyhvPW4oYSxpKSkmJih0P2Euc2lsZW50UG9zaXRpb24obyk6YS5wb3NpdGlvbihvKSl9ci5lbmRCYXRjaCgpfXJldHVybiB0aGlzfSxzaWxlbnRQb3NpdGlvbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucG9zaXRpb25zKGUsITApfSxzaGlmdDpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoa2MoZSk/KHI9e3g6UShlLngpP2UueDowLHk6UShlLnkpP2UueTowfSxuPXQpOlooZSkmJlEodCkmJihyPXt4OjAseTowfSxyW2VdPXQpLHIhPW51bGwpe3ZhciBpPXRoaXMuY3koKTtpLnN0YXJ0QmF0Y2goKTtmb3IodmFyIGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIG89dGhpc1thXTtpZighKGkuaGFzQ29tcG91bmROb2RlcygpJiZvLmlzQ2hpbGQoKSYmby5hbmNlc3RvcnMoKS5hbnlTYW1lKHRoaXMpKSl7dmFyIHM9by5wb3NpdGlvbigpLGM9e3g6cy54K3IueCx5OnMueStyLnl9O24/by5zaWxlbnRQb3NpdGlvbihjKTpvLnBvc2l0aW9uKGMpfX1pLmVuZEJhdGNoKCl9cmV0dXJuIHRoaXN9LHNpbGVudFNoaWZ0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGtjKGUpP3RoaXMuc2hpZnQoZSwhMCk6WihlKSYmUSh0KSYmdGhpcy5zaGlmdChlLHQsITApLHRoaXN9LHJlbmRlcmVkUG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdLHI9dGhpcy5jeSgpLGk9ci56b29tKCksYT1yLnBhbigpLG89a2MoZSk/ZTp2b2lkIDAscz1vIT09dm9pZCAwfHx0IT09dm9pZCAwJiZaKGUpO2lmKG4mJm4uaXNOb2RlKCkpe2lmKHMpZm9yKHZhciBjPTA7Yzx0aGlzLmxlbmd0aDtjKyspe3ZhciBsPXRoaXNbY107dD09PXZvaWQgMD9vIT09dm9pZCAwJiZsLnBvc2l0aW9uKFRkKG8saSxhKSk6bC5wb3NpdGlvbihlLCh0LWFbZV0pL2kpfWVsc2UgcmV0dXJuIG89d2Qobi5wb3NpdGlvbigpLGksYSksZT09PXZvaWQgMD9vOm9bZV19ZWxzZSBpZighcylyZXR1cm47cmV0dXJuIHRoaXN9LHJlbGF0aXZlUG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdLHI9dGhpcy5jeSgpLGk9a2MoZSk/ZTp2b2lkIDAsYT1pIT09dm9pZCAwfHx0IT09dm9pZCAwJiZaKGUpLG89ci5oYXNDb21wb3VuZE5vZGVzKCk7aWYobiYmbi5pc05vZGUoKSl7aWYoYSlmb3IodmFyIHM9MDtzPHRoaXMubGVuZ3RoO3MrKyl7dmFyIGM9dGhpc1tzXSxsPW8/Yy5wYXJlbnQoKTpudWxsLHU9bCYmbC5sZW5ndGg+MCxkPXU7dSYmKGw9bFswXSk7dmFyIGY9ZD9sLnBvc2l0aW9uKCk6e3g6MCx5OjB9O3Q9PT12b2lkIDA/aSE9PXZvaWQgMCYmYy5wb3NpdGlvbih7eDppLngrZi54LHk6aS55K2YueX0pOmMucG9zaXRpb24oZSx0K2ZbZV0pfWVsc2V7dmFyIHA9bi5wb3NpdGlvbigpLG09bz9uLnBhcmVudCgpOm51bGwsaD1tJiZtLmxlbmd0aD4wLGc9aDtoJiYobT1tWzBdKTt2YXIgXz1nP20ucG9zaXRpb24oKTp7eDowLHk6MH07cmV0dXJuIGk9e3g6cC54LV8ueCx5OnAueS1fLnl9LGU9PT12b2lkIDA/aTppW2VdfX1lbHNlIGlmKCFhKXJldHVybjtyZXR1cm4gdGhpc319LFlfLm1vZGVsUG9zaXRpb249WV8ucG9pbnQ9WV8ucG9zaXRpb24sWV8ubW9kZWxQb3NpdGlvbnM9WV8ucG9pbnRzPVlfLnBvc2l0aW9ucyxZXy5yZW5kZXJlZFBvaW50PVlfLnJlbmRlcmVkUG9zaXRpb24sWV8ucmVsYXRpdmVQb2ludD1ZXy5yZWxhdGl2ZVBvc2l0aW9uO3ZhciAkXz1YXyxldj1mdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZWBsZWZ0YDpjYXNlYHJpZ2h0LWluc2lkZWA6cmV0dXJuYGxlZnRgO2Nhc2VgcmlnaHRgOmNhc2VgbGVmdC1pbnNpZGVgOnJldHVybmByaWdodGA7ZGVmYXVsdDpyZXR1cm5gY2VudGVyYH19LHR2PWZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlYHRvcGA6Y2FzZWBib3R0b20taW5zaWRlYDpyZXR1cm5gdG9wYDtjYXNlYGJvdHRvbWA6Y2FzZWB0b3AtaW5zaWRlYDpyZXR1cm5gYm90dG9tYDtkZWZhdWx0OnJldHVybmBjZW50ZXJgfX0sbnY9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2VgbGVmdGA6cmV0dXJuYHJpZ2h0YDtjYXNlYHJpZ2h0YDpyZXR1cm5gbGVmdGA7Y2FzZWBsZWZ0LWluc2lkZWA6cmV0dXJuYGxlZnRgO2Nhc2VgcmlnaHQtaW5zaWRlYDpyZXR1cm5gcmlnaHRgO2RlZmF1bHQ6cmV0dXJuYGNlbnRlcmB9fSxydj1pdj17fSxpdjtpdi5yZW5kZXJlZEJvdW5kaW5nQm94PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYm91bmRpbmdCb3goZSksbj10aGlzLmN5KCkscj1uLnpvb20oKSxpPW4ucGFuKCksYT10LngxKnIraS54LG89dC54MipyK2kueCxzPXQueTEqcitpLnksYz10LnkyKnIraS55O3JldHVybnt4MTphLHgyOm8seTE6cyx5MjpjLHc6by1hLGg6Yy1zfX0saXYuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDAmJmFyZ3VtZW50c1swXSx0PXRoaXMuY3koKTtyZXR1cm4hdC5zdHlsZUVuYWJsZWQoKXx8IXQuaGFzQ29tcG91bmROb2RlcygpfHx0aGlzLmZvckVhY2hVcChmdW5jdGlvbih0KXtpZih0LmlzUGFyZW50KCkpe3ZhciBuPXQuX3ByaXZhdGU7bi5jb21wb3VuZEJvdW5kc0NsZWFuPSExLG4uYmJDYWNoZT1udWxsLGV8fHQuZW1pdEFuZE5vdGlmeShgYm91bmRzYCl9fSksdGhpc30saXYudXBkYXRlQ29tcG91bmRCb3VuZHM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMCYmYXJndW1lbnRzWzBdLHQ9dGhpcy5jeSgpO2lmKCF0LnN0eWxlRW5hYmxlZCgpfHwhdC5oYXNDb21wb3VuZE5vZGVzKCl8fCFlJiZ0LmJhdGNoaW5nKCkpcmV0dXJuIHRoaXM7ZnVuY3Rpb24gbihlKXtpZighZS5pc1BhcmVudCgpKXJldHVybjt2YXIgdD1lLl9wcml2YXRlLG49ZS5jaGlsZHJlbigpLHI9ZS5wc3R5bGUoYGNvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzYCkudmFsdWU9PT1gaW5jbHVkZWAsaT17d2lkdGg6e3ZhbDplLnBzdHlsZShgbWluLXdpZHRoYCkucGZWYWx1ZSxsZWZ0OmUucHN0eWxlKGBtaW4td2lkdGgtYmlhcy1sZWZ0YCkscmlnaHQ6ZS5wc3R5bGUoYG1pbi13aWR0aC1iaWFzLXJpZ2h0YCl9LGhlaWdodDp7dmFsOmUucHN0eWxlKGBtaW4taGVpZ2h0YCkucGZWYWx1ZSx0b3A6ZS5wc3R5bGUoYG1pbi1oZWlnaHQtYmlhcy10b3BgKSxib3R0b206ZS5wc3R5bGUoYG1pbi1oZWlnaHQtYmlhcy1ib3R0b21gKX19LGE9bi5ib3VuZGluZ0JveCh7aW5jbHVkZUxhYmVsczpyLGluY2x1ZGVPdmVybGF5czohMSx1c2VDYWNoZTohMX0pLG89dC5wb3NpdGlvbjsoYS53PT09MHx8YS5oPT09MCkmJihhPXt3OmUucHN0eWxlKGB3aWR0aGApLnBmVmFsdWUsaDplLnBzdHlsZShgaGVpZ2h0YCkucGZWYWx1ZX0sYS54MT1vLngtYS53LzIsYS54Mj1vLngrYS53LzIsYS55MT1vLnktYS5oLzIsYS55Mj1vLnkrYS5oLzIpO2Z1bmN0aW9uIHMoZSx0LG4pe3ZhciByPTAsaT0wLGE9dCtuO3JldHVybiBlPjAmJmE+MCYmKHI9dC9hKmUsaT1uL2EqZSkse2JpYXNEaWZmOnIsYmlhc0NvbXBsZW1lbnREaWZmOml9fWZ1bmN0aW9uIGMoZSx0LG4scil7aWYobi51bml0cz09PWAlYClzd2l0Y2gocil7Y2FzZWB3aWR0aGA6cmV0dXJuIGU+MD9uLnBmVmFsdWUqZTowO2Nhc2VgaGVpZ2h0YDpyZXR1cm4gdD4wP24ucGZWYWx1ZSp0OjA7Y2FzZWBhdmVyYWdlYDpyZXR1cm4gZT4wJiZ0PjA/bi5wZlZhbHVlKihlK3QpLzI6MDtjYXNlYG1pbmA6cmV0dXJuIGU+MCYmdD4wP2U+dD9uLnBmVmFsdWUqdDpuLnBmVmFsdWUqZTowO2Nhc2VgbWF4YDpyZXR1cm4gZT4wJiZ0PjA/ZT50P24ucGZWYWx1ZSplOm4ucGZWYWx1ZSp0OjA7ZGVmYXVsdDpyZXR1cm4gMH1lbHNlIGlmKG4udW5pdHM9PT1gcHhgKXJldHVybiBuLnBmVmFsdWU7ZWxzZSByZXR1cm4gMH12YXIgbD1pLndpZHRoLmxlZnQudmFsdWU7aS53aWR0aC5sZWZ0LnVuaXRzPT09YHB4YCYmaS53aWR0aC52YWw+MCYmKGw9bCoxMDAvaS53aWR0aC52YWwpO3ZhciB1PWkud2lkdGgucmlnaHQudmFsdWU7aS53aWR0aC5yaWdodC51bml0cz09PWBweGAmJmkud2lkdGgudmFsPjAmJih1PXUqMTAwL2kud2lkdGgudmFsKTt2YXIgZD1pLmhlaWdodC50b3AudmFsdWU7aS5oZWlnaHQudG9wLnVuaXRzPT09YHB4YCYmaS5oZWlnaHQudmFsPjAmJihkPWQqMTAwL2kuaGVpZ2h0LnZhbCk7dmFyIGY9aS5oZWlnaHQuYm90dG9tLnZhbHVlO2kuaGVpZ2h0LmJvdHRvbS51bml0cz09PWBweGAmJmkuaGVpZ2h0LnZhbD4wJiYoZj1mKjEwMC9pLmhlaWdodC52YWwpO3ZhciBwPXMoaS53aWR0aC52YWwtYS53LGwsdSksbT1wLmJpYXNEaWZmLGg9cC5iaWFzQ29tcGxlbWVudERpZmYsZz1zKGkuaGVpZ2h0LnZhbC1hLmgsZCxmKSxfPWcuYmlhc0RpZmYsdj1nLmJpYXNDb21wbGVtZW50RGlmZjt0LmF1dG9QYWRkaW5nPWMoYS53LGEuaCxlLnBzdHlsZShgcGFkZGluZ2ApLGUucHN0eWxlKGBwYWRkaW5nLXJlbGF0aXZlLXRvYCkudmFsdWUpLHQuYXV0b1dpZHRoPU1hdGgubWF4KGEudyxpLndpZHRoLnZhbCksby54PSgtbSthLngxK2EueDIraCkvMix0LmF1dG9IZWlnaHQ9TWF0aC5tYXgoYS5oLGkuaGVpZ2h0LnZhbCksby55PSgtXythLnkxK2EueTIrdikvMn1mb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9dGhpc1tyXSxhPWkuX3ByaXZhdGU7KCFhLmNvbXBvdW5kQm91bmRzQ2xlYW58fGUpJiYobihpKSx0LmJhdGNoaW5nKCl8fChhLmNvbXBvdW5kQm91bmRzQ2xlYW49ITApKX1yZXR1cm4gdGhpc307dmFyIGF2PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09MS8wfHxlPT09LTEvMD8wOmV9LG92PWZ1bmN0aW9uKGUsdCxuLHIsaSl7ci10IT09MCYmaS1uIT09MCYmdCE9bnVsbCYmbiE9bnVsbCYmciE9bnVsbCYmaSE9bnVsbCYmKGUueDE9dDxlLngxP3Q6ZS54MSxlLngyPXI+ZS54Mj9yOmUueDIsZS55MT1uPGUueTE/bjplLnkxLGUueTI9aT5lLnkyP2k6ZS55MixlLnc9ZS54Mi1lLngxLGUuaD1lLnkyLWUueTEpfSxzdj1mdW5jdGlvbihlLHQpe3JldHVybiB0PT1udWxsP2U6b3YoZSx0LngxLHQueTEsdC54Mix0LnkyKX0sY3Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxdShlLHQsbil9LGx2PWZ1bmN0aW9uKGUsdCxuKXtpZighdC5jeSgpLmhlYWRsZXNzKCkpe3ZhciByPXQuX3ByaXZhdGUsaT1yLnJzdHlsZSxhPWkuYXJyb3dXaWR0aC8yLG89dC5wc3R5bGUobitgLWFycm93LXNoYXBlYCkudmFsdWUscyxjO2lmKG8hPT1gbm9uZWApe249PT1gc291cmNlYD8ocz1pLnNyY1gsYz1pLnNyY1kpOm49PT1gdGFyZ2V0YD8ocz1pLnRndFgsYz1pLnRndFkpOihzPWkubWlkWCxjPWkubWlkWSk7dmFyIGw9ci5hcnJvd0JvdW5kcz1yLmFycm93Qm91bmRzfHx7fSx1PWxbbl09bFtuXXx8e307dS54MT1zLWEsdS55MT1jLWEsdS54Mj1zK2EsdS55Mj1jK2EsdS53PXUueDItdS54MSx1Lmg9dS55Mi11LnkxLFlkKHUsMSksb3YoZSx1LngxLHUueTEsdS54Mix1LnkyKX19fSx1dj1mdW5jdGlvbihlLHQsbil7aWYoIXQuY3koKS5oZWFkbGVzcygpKXt2YXIgcj1uP24rYC1gOmBgLGk9dC5fcHJpdmF0ZSxhPWkucnN0eWxlO2lmKHQucHN0eWxlKHIrYGxhYmVsYCkuc3RyVmFsdWUpe3ZhciBvPXQucHN0eWxlKGB0ZXh0LWhhbGlnbmApLHM9dC5wc3R5bGUoYHRleHQtdmFsaWduYCksYz1jdihhLGBsYWJlbFdpZHRoYCxuKSxsPWN2KGEsYGxhYmVsSGVpZ2h0YCxuKSx1PWN2KGEsYGxhYmVsWGAsbiksZD1jdihhLGBsYWJlbFlgLG4pLGY9dC5wc3R5bGUocitgdGV4dC1tYXJnaW4teGApLnBmVmFsdWUscD10LnBzdHlsZShyK2B0ZXh0LW1hcmdpbi15YCkucGZWYWx1ZSxtPXQuaXNFZGdlKCksaD10LnBzdHlsZShyK2B0ZXh0LXJvdGF0aW9uYCksZz10LnBzdHlsZShgdGV4dC1vdXRsaW5lLXdpZHRoYCkucGZWYWx1ZSxfPXQucHN0eWxlKGB0ZXh0LWJvcmRlci13aWR0aGApLnBmVmFsdWUvMix2PXQucHN0eWxlKGB0ZXh0LWJhY2tncm91bmQtcGFkZGluZ2ApLnBmVmFsdWUseT0yLGI9bCx4PWMsUz14LzIsQz1iLzIsdyxULEUsRDtpZihtKXc9dS1TLFQ9dStTLEU9ZC1DLEQ9ZCtDO2Vsc2V7c3dpdGNoKGV2KG8udmFsdWUpKXtjYXNlYGxlZnRgOnc9dS14LFQ9dTticmVhaztjYXNlYGNlbnRlcmA6dz11LVMsVD11K1M7YnJlYWs7Y2FzZWByaWdodGA6dz11LFQ9dSt4fXN3aXRjaCh0dihzLnZhbHVlKSl7Y2FzZWB0b3BgOkU9ZC1iLEQ9ZDticmVhaztjYXNlYGNlbnRlcmA6RT1kLUMsRD1kK0M7YnJlYWs7Y2FzZWBib3R0b21gOkU9ZCxEPWQrYn19dmFyIE89Zi1NYXRoLm1heChnLF8pLXYteSxrPWYrTWF0aC5tYXgoZyxfKSt2K3ksQT1wLU1hdGgubWF4KGcsXyktdi15LGo9cCtNYXRoLm1heChnLF8pK3YreTt3Kz1PLFQrPWssRSs9QSxEKz1qO3ZhciBNPW58fGBtYWluYCxOPWkubGFiZWxCb3VuZHMsUD1OW01dPU5bTV18fHt9O1AueDE9dyxQLnkxPUUsUC54Mj1ULFAueTI9RCxQLnc9VC13LFAuaD1ELUUsUC5sZWZ0UGFkPU8sUC5yaWdodFBhZD1rLFAudG9wUGFkPUEsUC5ib3RQYWQ9ajt2YXIgRj1tJiZoLnN0clZhbHVlPT09YGF1dG9yb3RhdGVgLEk9aC5wZlZhbHVlIT1udWxsJiZoLnBmVmFsdWUhPT0wO2lmKEZ8fEkpe3ZhciBMPUY/Y3YoaS5yc3R5bGUsYGxhYmVsQW5nbGVgLG4pOmgucGZWYWx1ZSxSPU1hdGguY29zKEwpLHo9TWF0aC5zaW4oTCksQj0odytUKS8yLFY9KEUrRCkvMjtpZighbSl7c3dpdGNoKGV2KG8udmFsdWUpKXtjYXNlYGxlZnRgOkI9VDticmVhaztjYXNlYHJpZ2h0YDpCPXd9c3dpdGNoKHR2KHMudmFsdWUpKXtjYXNlYHRvcGA6Vj1EO2JyZWFrO2Nhc2VgYm90dG9tYDpWPUV9fXZhciBIPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtPUIsdC09Vix7eDplKlItdCp6K0IseTplKnordCpSK1Z9fSxVPUgodyxFKSxXPUgodyxEKSxlZT1IKFQsRSksRz1IKFQsRCk7dz1NYXRoLm1pbihVLngsVy54LGVlLngsRy54KSxUPU1hdGgubWF4KFUueCxXLngsZWUueCxHLngpLEU9TWF0aC5taW4oVS55LFcueSxlZS55LEcueSksRD1NYXRoLm1heChVLnksVy55LGVlLnksRy55KX12YXIgdGU9TStgUm90YCxuZT1OW3RlXT1OW3RlXXx8e307bmUueDE9dyxuZS55MT1FLG5lLngyPVQsbmUueTI9RCxuZS53PVQtdyxuZS5oPUQtRSxvdihlLHcsRSxULEQpLG92KGkubGFiZWxCb3VuZHMuYWxsLHcsRSxULEQpfXJldHVybiBlfX0sZHY9ZnVuY3Rpb24oZSx0KXtpZighdC5jeSgpLmhlYWRsZXNzKCkpe3ZhciBuPXQucHN0eWxlKGBvdXRsaW5lLW9wYWNpdHlgKS52YWx1ZSxyPXQucHN0eWxlKGBvdXRsaW5lLXdpZHRoYCkudmFsdWUrdC5wc3R5bGUoYG91dGxpbmUtb2Zmc2V0YCkudmFsdWU7ZnYoZSx0LG4scixgb3V0c2lkZWAsci8yKX19LGZ2PWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXtpZighKG49PT0wfHxyPD0wfHxpPT09YGluc2lkZWApKXt2YXIgbz10LmN5KCkucmVuZGVyZXIoKSxzPW8ubm9kZVNoYXBlc1tvLmdldE5vZGVTaGFwZSh0KV07aWYocyl7dmFyIGM9dC5wb3NpdGlvbigpLGw9Yy54LHU9Yy55LGQ9dC53aWR0aCgpLGY9dC5oZWlnaHQoKTtzLmhhc01pdGVyQm91bmRzPyhpPT09YGNlbnRlcmAmJihyLz0yKSxzdihlLHMubWl0ZXJCb3VuZHMobCx1LGQsZixyKSkpOmEhPW51bGwmJmE+MCYmWGQoZSxbYSxhLGEsYV0pfX19LHB2PWZ1bmN0aW9uKGUsdCl7aWYoIXQuY3koKS5oZWFkbGVzcygpKXt2YXIgbj10LnBzdHlsZShgYm9yZGVyLW9wYWNpdHlgKS52YWx1ZSxyPXQucHN0eWxlKGBib3JkZXItd2lkdGhgKS5wZlZhbHVlLGk9dC5wc3R5bGUoYGJvcmRlci1wb3NpdGlvbmApLnZhbHVlO2Z2KGUsdCxuLHIsaSl9fSxtdj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX3ByaXZhdGUuY3kscj1uLnN0eWxlRW5hYmxlZCgpLGk9bi5oZWFkbGVzcygpLGE9V2QoKSxvPWUuX3ByaXZhdGUscz1lLmlzTm9kZSgpLGM9ZS5pc0VkZ2UoKSxsLHUsZCxmLHAsbSxoPW8ucnN0eWxlLGc9cyYmcj9lLnBzdHlsZShgYm91bmRzLWV4cGFuc2lvbmApLnBmVmFsdWU6WzBdLF89ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHN0eWxlKGBkaXNwbGF5YCkudmFsdWUhPT1gbm9uZWB9LHY9IXJ8fF8oZSkmJighY3x8XyhlLnNvdXJjZSgpKSYmXyhlLnRhcmdldCgpKSk7aWYodil7dmFyIHk9MCxiPTA7ciYmdC5pbmNsdWRlT3ZlcmxheXMmJih5PWUucHN0eWxlKGBvdmVybGF5LW9wYWNpdHlgKS52YWx1ZSx5IT09MCYmKGI9ZS5wc3R5bGUoYG92ZXJsYXktcGFkZGluZ2ApLnZhbHVlKSk7dmFyIHg9MCxTPTA7ciYmdC5pbmNsdWRlVW5kZXJsYXlzJiYoeD1lLnBzdHlsZShgdW5kZXJsYXktb3BhY2l0eWApLnZhbHVlLHghPT0wJiYoUz1lLnBzdHlsZShgdW5kZXJsYXktcGFkZGluZ2ApLnZhbHVlKSk7dmFyIEM9TWF0aC5tYXgoYixTKSx3PTAsVD0wO2lmKHImJih3PWUucHN0eWxlKGB3aWR0aGApLnBmVmFsdWUsVD13LzIpLHMmJnQuaW5jbHVkZU5vZGVzKXt2YXIgRT1lLnBvc2l0aW9uKCk7cD1FLngsbT1FLnk7dmFyIEQ9ZS5vdXRlcldpZHRoKCkvMixPPWUub3V0ZXJIZWlnaHQoKS8yO2w9cC1ELHU9cCtELGQ9bS1PLGY9bStPLG92KGEsbCxkLHUsZiksciYmZHYoYSxlKSxyJiZ0LmluY2x1ZGVPdXRsaW5lcyYmIWkmJmR2KGEsZSksciYmcHYoYSxlKX1lbHNlIGlmKGMmJnQuaW5jbHVkZUVkZ2VzKXtpZihyJiYhaSl7dmFyIGs9ZS5wc3R5bGUoYGN1cnZlLXN0eWxlYCkuc3RyVmFsdWU7aWYobD1NYXRoLm1pbihoLnNyY1gsaC5taWRYLGgudGd0WCksdT1NYXRoLm1heChoLnNyY1gsaC5taWRYLGgudGd0WCksZD1NYXRoLm1pbihoLnNyY1ksaC5taWRZLGgudGd0WSksZj1NYXRoLm1heChoLnNyY1ksaC5taWRZLGgudGd0WSksbC09VCx1Kz1ULGQtPVQsZis9VCxvdihhLGwsZCx1LGYpLGs9PT1gaGF5c3RhY2tgKXt2YXIgQT1oLmhheXN0YWNrUHRzO2lmKEEmJkEubGVuZ3RoPT09Mil7aWYobD1BWzBdLngsZD1BWzBdLnksdT1BWzFdLngsZj1BWzFdLnksbD51KXt2YXIgaj1sO2w9dSx1PWp9aWYoZD5mKXt2YXIgTT1kO2Q9ZixmPU19b3YoYSxsLVQsZC1ULHUrVCxmK1QpfX1lbHNlIGlmKGs9PT1gYmV6aWVyYHx8az09PWB1bmJ1bmRsZWQtYmV6aWVyYHx8WWMoayxgc2VnbWVudHNgKXx8WWMoayxgdGF4aWApKXt2YXIgTjtzd2l0Y2goayl7Y2FzZWBiZXppZXJgOmNhc2VgdW5idW5kbGVkLWJlemllcmA6Tj1oLmJlemllclB0czticmVhaztjYXNlYHNlZ21lbnRzYDpjYXNlYHRheGlgOmNhc2Vgcm91bmQtc2VnbWVudHNgOmNhc2Vgcm91bmQtdGF4aWA6Tj1oLmxpbmVQdHN9aWYoTiE9bnVsbClmb3IodmFyIFA9MDtQPE4ubGVuZ3RoO1ArKyl7dmFyIEY9TltQXTtsPUYueC1ULHU9Ri54K1QsZD1GLnktVCxmPUYueStULG92KGEsbCxkLHUsZil9fX1lbHNle3ZhciBJPWUuc291cmNlKCkucG9zaXRpb24oKSxMPWUudGFyZ2V0KCkucG9zaXRpb24oKTtpZihsPUkueCx1PUwueCxkPUkueSxmPUwueSxsPnUpe3ZhciBSPWw7bD11LHU9Un1pZihkPmYpe3ZhciB6PWQ7ZD1mLGY9en1sLT1ULHUrPVQsZC09VCxmKz1ULG92KGEsbCxkLHUsZil9fWlmKHImJnQuaW5jbHVkZUVkZ2VzJiZjJiYobHYoYSxlLGBtaWQtc291cmNlYCksbHYoYSxlLGBtaWQtdGFyZ2V0YCksbHYoYSxlLGBzb3VyY2VgKSxsdihhLGUsYHRhcmdldGApKSxyJiZlLnBzdHlsZShgZ2hvc3RgKS52YWx1ZT09PWB5ZXNgKXt2YXIgQj1lLnBzdHlsZShgZ2hvc3Qtb2Zmc2V0LXhgKS5wZlZhbHVlLFY9ZS5wc3R5bGUoYGdob3N0LW9mZnNldC15YCkucGZWYWx1ZTtvdihhLGEueDErQixhLnkxK1YsYS54MitCLGEueTIrVil9dmFyIEg9by5ib2R5Qm91bmRzPW8uYm9keUJvdW5kc3x8e307WmQoSCxhKSxYZChILGcpLFlkKEgsMSksciYmKGw9YS54MSx1PWEueDIsZD1hLnkxLGY9YS55MixvdihhLGwtQyxkLUMsdStDLGYrQykpO3ZhciBVPW8ub3ZlcmxheUJvdW5kcz1vLm92ZXJsYXlCb3VuZHN8fHt9O1pkKFUsYSksWGQoVSxnKSxZZChVLDEpO3ZhciBXPW8ubGFiZWxCb3VuZHM9by5sYWJlbEJvdW5kc3x8e307Vy5hbGw9PW51bGw/Vy5hbGw9V2QoKTpLZChXLmFsbCksciYmdC5pbmNsdWRlTGFiZWxzJiYodC5pbmNsdWRlTWFpbkxhYmVscyYmdXYoYSxlLG51bGwpLGMmJih0LmluY2x1ZGVTb3VyY2VMYWJlbHMmJnV2KGEsZSxgc291cmNlYCksdC5pbmNsdWRlVGFyZ2V0TGFiZWxzJiZ1dihhLGUsYHRhcmdldGApKSl9cmV0dXJuIGEueDE9YXYoYS54MSksYS55MT1hdihhLnkxKSxhLngyPWF2KGEueDIpLGEueTI9YXYoYS55MiksYS53PWF2KGEueDItYS54MSksYS5oPWF2KGEueTItYS55MSksYS53PjAmJmEuaD4wJiZ2JiYoWGQoYSxnKSxZZChhLDEpKSxhfSxodj1mdW5jdGlvbihlKXt2YXIgdD0wLG49ZnVuY3Rpb24oZSl7cmV0dXJuKyEhZTw8dCsrfSxyPTA7cmV0dXJuIHIrPW4oZS5pbmN1ZGVOb2Rlcykscis9bihlLmluY2x1ZGVFZGdlcykscis9bihlLmluY2x1ZGVMYWJlbHMpLHIrPW4oZS5pbmNsdWRlTWFpbkxhYmVscykscis9bihlLmluY2x1ZGVTb3VyY2VMYWJlbHMpLHIrPW4oZS5pbmNsdWRlVGFyZ2V0TGFiZWxzKSxyKz1uKGUuaW5jbHVkZU92ZXJsYXlzKSxyKz1uKGUuaW5jbHVkZU91dGxpbmVzKSxyfSxndj1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKX07aWYoZS5pc0VkZ2UoKSl7dmFyIG49ZS5zb3VyY2UoKS5wb3NpdGlvbigpLHI9ZS50YXJnZXQoKS5wb3NpdGlvbigpO3JldHVybiB5dShbdChuLngpLHQobi55KSx0KHIueCksdChyLnkpXSl9dmFyIGk9ZS5wb3NpdGlvbigpO3JldHVybiB5dShbdChpLngpLHQoaS55KV0pfSxfdj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX3ByaXZhdGUscixpPWUuaXNFZGdlKCksYT0odD09bnVsbD95djpodih0KSk9PT15djtpZihuLmJiQ2FjaGU9PW51bGw/KHI9bXYoZSx2diksbi5iYkNhY2hlPXIsbi5iYkNhY2hlUG9zS2V5PWd2KGUpKTpyPW4uYmJDYWNoZSwhYSl7dmFyIG89ZS5pc05vZGUoKTtyPVdkKCksKHQuaW5jbHVkZU5vZGVzJiZvfHx0LmluY2x1ZGVFZGdlcyYmIW8pJiYodC5pbmNsdWRlT3ZlcmxheXM/c3YocixuLm92ZXJsYXlCb3VuZHMpOnN2KHIsbi5ib2R5Qm91bmRzKSksdC5pbmNsdWRlTGFiZWxzJiYodC5pbmNsdWRlTWFpbkxhYmVscyYmKCFpfHx0LmluY2x1ZGVTb3VyY2VMYWJlbHMmJnQuaW5jbHVkZVRhcmdldExhYmVscyk/c3YocixuLmxhYmVsQm91bmRzLmFsbCk6KHQuaW5jbHVkZU1haW5MYWJlbHMmJnN2KHIsbi5sYWJlbEJvdW5kcy5tYWluUm90KSx0LmluY2x1ZGVTb3VyY2VMYWJlbHMmJnN2KHIsbi5sYWJlbEJvdW5kcy5zb3VyY2VSb3QpLHQuaW5jbHVkZVRhcmdldExhYmVscyYmc3YocixuLmxhYmVsQm91bmRzLnRhcmdldFJvdCkpKSxyLnc9ci54Mi1yLngxLHIuaD1yLnkyLXIueTF9cmV0dXJuIHJ9LHZ2PXtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiEwLGluY2x1ZGVMYWJlbHM6ITAsaW5jbHVkZU1haW5MYWJlbHM6ITAsaW5jbHVkZVNvdXJjZUxhYmVsczohMCxpbmNsdWRlVGFyZ2V0TGFiZWxzOiEwLGluY2x1ZGVPdmVybGF5czohMCxpbmNsdWRlVW5kZXJsYXlzOiEwLGluY2x1ZGVPdXRsaW5lczohMCx1c2VDYWNoZTohMH0seXY9aHYodnYpLGJ2PVV1KHZ2KTtpdi5ib3VuZGluZ0JveD1mdW5jdGlvbihlKXt2YXIgdCxuPWU9PT12b2lkIDB8fGUudXNlQ2FjaGU9PT12b2lkIDB8fGUudXNlQ2FjaGU9PT0hMCxyPVdjKGZ1bmN0aW9uKGUpe3ZhciB0PWUuX3ByaXZhdGU7cmV0dXJuIHQuYmJDYWNoZT09bnVsbHx8dC5zdHlsZURpcnR5fHx0LmJiQ2FjaGVQb3NLZXkhPT1ndihlKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQoKX0pO2lmKG4mJnRoaXMubGVuZ3RoPT09MSYmIXIodGhpc1swXSkpZT1lPT09dm9pZCAwP3Z2OmJ2KGUpLHQ9X3YodGhpc1swXSxlKTtlbHNle3Q9V2QoKSxlfHw9dnY7dmFyIGk9YnYoZSksYT10aGlzLG89YS5jeSgpLnN0eWxlRW5hYmxlZCgpO3RoaXMuZWRnZXMoKS5mb3JFYWNoKHIpLHRoaXMubm9kZXMoKS5mb3JFYWNoKHIpLG8mJnRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKG4pLHRoaXMudXBkYXRlQ29tcG91bmRCb3VuZHMoIW4pO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO3IoYykmJmMuZGlydHlCb3VuZGluZ0JveENhY2hlKCksc3YodCxfdihjLGkpKX19cmV0dXJuIHQueDE9YXYodC54MSksdC55MT1hdih0LnkxKSx0LngyPWF2KHQueDIpLHQueTI9YXYodC55MiksdC53PWF2KHQueDItdC54MSksdC5oPWF2KHQueTItdC55MSksdH0saXYuZGlydHlCb3VuZGluZ0JveENhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciB0PXRoaXNbZV0uX3ByaXZhdGU7dC5iYkNhY2hlPW51bGwsdC5iYkNhY2hlUG9zS2V5PW51bGwsdC5ib2R5Qm91bmRzPW51bGwsdC5vdmVybGF5Qm91bmRzPW51bGwsdC5sYWJlbEJvdW5kcy5hbGw9bnVsbCx0LmxhYmVsQm91bmRzLnNvdXJjZT1udWxsLHQubGFiZWxCb3VuZHMudGFyZ2V0PW51bGwsdC5sYWJlbEJvdW5kcy5tYWluPW51bGwsdC5sYWJlbEJvdW5kcy5zb3VyY2VSb3Q9bnVsbCx0LmxhYmVsQm91bmRzLnRhcmdldFJvdD1udWxsLHQubGFiZWxCb3VuZHMubWFpblJvdD1udWxsLHQuYXJyb3dCb3VuZHMuc291cmNlPW51bGwsdC5hcnJvd0JvdW5kcy50YXJnZXQ9bnVsbCx0LmFycm93Qm91bmRzW2BtaWQtc291cmNlYF09bnVsbCx0LmFycm93Qm91bmRzW2BtaWQtdGFyZ2V0YF09bnVsbH1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KGBib3VuZHNgKSx0aGlzfSxpdi5ib3VuZGluZ0JveEF0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubm9kZXMoKSxuPXRoaXMuY3koKSxyPW4uaGFzQ29tcG91bmROb2RlcygpLGk9bi5jb2xsZWN0aW9uKCk7aWYociYmKGk9dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNQYXJlbnQoKX0pLHQ9dC5ub3QoaSkpLGtjKGUpKXt2YXIgYT1lO2U9ZnVuY3Rpb24oKXtyZXR1cm4gYX19dmFyIG89ZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5fcHJpdmF0ZS5iYkF0T2xkUG9zPWUodCxuKX0scz1mdW5jdGlvbihlKXtyZXR1cm4gZS5fcHJpdmF0ZS5iYkF0T2xkUG9zfTtuLnN0YXJ0QmF0Y2goKSx0LmZvckVhY2gobykuc2lsZW50UG9zaXRpb25zKGUpLHImJihpLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLGkuZGlydHlCb3VuZGluZ0JveENhY2hlKCksaS51cGRhdGVDb21wb3VuZEJvdW5kcyghMCkpO3ZhciBjPUdkKHRoaXMuYm91bmRpbmdCb3goe3VzZUNhY2hlOiExfSkpO3JldHVybiB0LnNpbGVudFBvc2l0aW9ucyhzKSxyJiYoaS5kaXJ0eUNvbXBvdW5kQm91bmRzQ2FjaGUoKSxpLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpLGkudXBkYXRlQ29tcG91bmRCb3VuZHMoITApKSxuLmVuZEJhdGNoKCksY30scnYuYm91bmRpbmdib3g9cnYuYmI9cnYuYm91bmRpbmdCb3gscnYucmVuZGVyZWRCb3VuZGluZ2JveD1ydi5yZW5kZXJlZEJvdW5kaW5nQm94O3ZhciB4dj1pdixTdj1Ddj17fSxDdix3dj1mdW5jdGlvbihlKXtlLnVwcGVyY2FzZU5hbWU9SmMoZS5uYW1lKSxlLmF1dG9OYW1lPWBhdXRvYCtlLnVwcGVyY2FzZU5hbWUsZS5sYWJlbE5hbWU9YGxhYmVsYCtlLnVwcGVyY2FzZU5hbWUsZS5vdXRlck5hbWU9YG91dGVyYCtlLnVwcGVyY2FzZU5hbWUsZS51cHBlcmNhc2VPdXRlck5hbWU9SmMoZS5vdXRlck5hbWUpLFN2W2UubmFtZV09ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdLG49dC5fcHJpdmF0ZSxyPW4uY3kuX3ByaXZhdGUuc3R5bGVFbmFibGVkO2lmKHQpe2lmKHIpe2lmKHQuaXNQYXJlbnQoKSlyZXR1cm4gdC51cGRhdGVDb21wb3VuZEJvdW5kcygpLG5bZS5hdXRvTmFtZV18fDA7dmFyIGk9dC5wc3R5bGUoZS5uYW1lKTtzd2l0Y2goaS5zdHJWYWx1ZSl7Y2FzZWBsYWJlbGA6cmV0dXJuIHQucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKCksbi5yc3R5bGVbZS5sYWJlbE5hbWVdfHwwO2RlZmF1bHQ6cmV0dXJuIGkucGZWYWx1ZX19ZWxzZSByZXR1cm4gMX19LFN2W2BvdXRlcmArZS51cHBlcmNhc2VOYW1lXT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF0sbj10Ll9wcml2YXRlLmN5Ll9wcml2YXRlLnN0eWxlRW5hYmxlZDtpZih0KXtpZihuKXt2YXIgcj10W2UubmFtZV0oKSxpPXQucHN0eWxlKGBib3JkZXItcG9zaXRpb25gKS52YWx1ZSxhPWk9PT1gY2VudGVyYD90LnBzdHlsZShgYm9yZGVyLXdpZHRoYCkucGZWYWx1ZTppPT09YG91dHNpZGVgPzIqdC5wc3R5bGUoYGJvcmRlci13aWR0aGApLnBmVmFsdWU6MCxvPTIqdC5wYWRkaW5nKCk7cmV0dXJuIHIrYStvfXJldHVybiAxfX0sU3ZbYHJlbmRlcmVkYCtlLnVwcGVyY2FzZU5hbWVdPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpc1swXTtpZih0KXJldHVybiB0W2UubmFtZV0oKSp0aGlzLmN5KCkuem9vbSgpfSxTdltgcmVuZGVyZWRgK2UudXBwZXJjYXNlT3V0ZXJOYW1lXT1mdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4gdFtlLm91dGVyTmFtZV0oKSp0aGlzLmN5KCkuem9vbSgpfX07d3Yoe25hbWU6YHdpZHRoYH0pLHd2KHtuYW1lOmBoZWlnaHRgfSksQ3YucGFkZGluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXNbMF0sdD1lLl9wcml2YXRlO3JldHVybiBlLmlzUGFyZW50KCk/KGUudXBkYXRlQ29tcG91bmRCb3VuZHMoKSx0LmF1dG9QYWRkaW5nPT09dm9pZCAwP2UucHN0eWxlKGBwYWRkaW5nYCkucGZWYWx1ZTp0LmF1dG9QYWRkaW5nKTplLnBzdHlsZShgcGFkZGluZ2ApLnBmVmFsdWV9LEN2LnBhZGRlZEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07cmV0dXJuIGUuaGVpZ2h0KCkrMiplLnBhZGRpbmcoKX0sQ3YucGFkZGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO3JldHVybiBlLndpZHRoKCkrMiplLnBhZGRpbmcoKX07dmFyIFR2PUN2LEV2PWZ1bmN0aW9uKGUsdCl7aWYoZS5pc0VkZ2UoKSYmZS50YWtlc1VwU3BhY2UoKSlyZXR1cm4gdChlKX0sRHY9ZnVuY3Rpb24oZSx0KXtpZihlLmlzRWRnZSgpJiZlLnRha2VzVXBTcGFjZSgpKXt2YXIgbj1lLmN5KCk7cmV0dXJuIHdkKHQoZSksbi56b29tKCksbi5wYW4oKSl9fSxPdj1mdW5jdGlvbihlLHQpe2lmKGUuaXNFZGdlKCkmJmUudGFrZXNVcFNwYWNlKCkpe3ZhciBuPWUuY3koKSxyPW4ucGFuKCksaT1uLnpvb20oKTtyZXR1cm4gdChlKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHdkKGUsaSxyKX0pfX0sa3Y9e2NvbnRyb2xQb2ludHM6e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldENvbnRyb2xQb2ludHMoZSl9LG11bHQ6ITB9LHNlZ21lbnRQb2ludHM6e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZW5kZXJlcigpLmdldFNlZ21lbnRQb2ludHMoZSl9LG11bHQ6ITB9LHNvdXJjZUVuZHBvaW50OntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRTb3VyY2VFbmRwb2ludChlKX19LHRhcmdldEVuZHBvaW50OntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRUYXJnZXRFbmRwb2ludChlKX19LG1pZHBvaW50OntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIoKS5nZXRFZGdlTWlkcG9pbnQoZSl9fX0sQXY9ZnVuY3Rpb24oZSl7cmV0dXJuYHJlbmRlcmVkYCtlWzBdLnRvVXBwZXJDYXNlKCkrZS5zdWJzdHIoMSl9LGp2PWFsKHt9LCRfLHh2LFR2LE9iamVjdC5rZXlzKGt2KS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXt2YXIgbj1rdlt0XSxyPUF2KHQpO3JldHVybiBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIEV2KHRoaXMsbi5nZXQpfSxlW3JdPW4ubXVsdD9mdW5jdGlvbigpe3JldHVybiBPdih0aGlzLG4uZ2V0KX06ZnVuY3Rpb24oKXtyZXR1cm4gRHYodGhpcyxuLmdldCl9LGV9LHt9KSksTXY9ZnVuY3Rpb24oZSx0KXt0aGlzLnJlY3ljbGUoZSx0KX07ZnVuY3Rpb24gTnYoKXtyZXR1cm4hMX1mdW5jdGlvbiBQdigpe3JldHVybiEwfU12LnByb3RvdHlwZT17aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5gZXZlbnRgfSxyZWN5Y2xlOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXRoaXMuaXNEZWZhdWx0UHJldmVudGVkPU52LGUhPW51bGwmJmUucHJldmVudERlZmF1bHQ/KHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkP1B2Ok52KTplIT1udWxsJiZlLnR5cGU/dD1lOnRoaXMudHlwZT1lLHQhPW51bGwmJih0aGlzLm9yaWdpbmFsRXZlbnQ9dC5vcmlnaW5hbEV2ZW50LHRoaXMudHlwZT10LnR5cGU9PW51bGw/dGhpcy50eXBlOnQudHlwZSx0aGlzLmN5PXQuY3ksdGhpcy50YXJnZXQ9dC50YXJnZXQsdGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uLHRoaXMucmVuZGVyZWRQb3NpdGlvbj10LnJlbmRlcmVkUG9zaXRpb24sdGhpcy5uYW1lc3BhY2U9dC5uYW1lc3BhY2UsdGhpcy5sYXlvdXQ9dC5sYXlvdXQpLHRoaXMuY3khPW51bGwmJnRoaXMucG9zaXRpb24hPW51bGwmJnRoaXMucmVuZGVyZWRQb3NpdGlvbj09bnVsbCl7dmFyIG49dGhpcy5wb3NpdGlvbixyPXRoaXMuY3kuem9vbSgpLGk9dGhpcy5jeS5wYW4oKTt0aGlzLnJlbmRlcmVkUG9zaXRpb249e3g6bi54KnIraS54LHk6bi55KnIraS55fX10aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0scHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1Qdjt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7ZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVB2O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtlJiZlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1Qdix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6TnYsaXNQcm9wYWdhdGlvblN0b3BwZWQ6TnYsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6TnZ9O3ZhciBGdj0vXihbXi5dKykoXC4oPzpbXi5dKykpPyQvLEl2PWAuKmAsTHY9e3F1YWxpZmllckNvbXBhcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR9LGV2ZW50TWF0Y2hlczpmdW5jdGlvbigpe3JldHVybiEwfSxhZGRFdmVudEZpZWxkczpmdW5jdGlvbigpe30sY2FsbGJhY2tDb250ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxiZWZvcmVFbWl0OmZ1bmN0aW9uKCl7fSxhZnRlckVtaXQ6ZnVuY3Rpb24oKXt9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiExfSxwYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sY29udGV4dDpudWxsfSxSdj1PYmplY3Qua2V5cyhMdiksenY9e307ZnVuY3Rpb24gQnYoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnp2LHQ9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbj0wO248UnYubGVuZ3RoO24rKyl7dmFyIHI9UnZbbl07dGhpc1tyXT1lW3JdfHxMdltyXX10aGlzLmNvbnRleHQ9dHx8dGhpcy5jb250ZXh0LHRoaXMubGlzdGVuZXJzPVtdLHRoaXMuZW1pdHRpbmc9MH12YXIgVnY9QnYucHJvdG90eXBlLEh2PWZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8pe0RjKHIpJiYoaT1yLHI9bnVsbCksbyYmKGE9YT09bnVsbD9vOmFsKHt9LGEsbykpO2Zvcih2YXIgcz1PYyhuKT9uOm4uc3BsaXQoL1xzKy8pLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGw9c1tjXTtpZighemMobCkpe3ZhciB1PWwubWF0Y2goRnYpO2lmKHUpe3ZhciBkPXVbMV07aWYodChlLGwsZCx1WzJdP3VbMl06bnVsbCxyLGksYSk9PT0hMSlicmVha319fX0sVXY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5hZGRFdmVudEZpZWxkcyhlLmNvbnRleHQsdCksbmV3IE12KHQudHlwZSx0KX0sV3Y9ZnVuY3Rpb24oZSx0LG4pe2lmKFJjKG4pKXQoZSxuKTtlbHNlIGlmKGtjKG4pKXQoZSxVdihlLG4pKTtlbHNlIGZvcih2YXIgcj1PYyhuKT9uOm4uc3BsaXQoL1xzKy8pLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXTtpZighemMoYSkpe3ZhciBvPWEubWF0Y2goRnYpO2lmKG8pe3ZhciBzPW9bMV07dChlLFV2KGUse3R5cGU6cyxuYW1lc3BhY2U6b1syXT9vWzJdOm51bGwsdGFyZ2V0OmUuY29udGV4dH0pKX19fX07VnYub249VnYuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0LG4scixpKXtyZXR1cm4gSHYodGhpcyxmdW5jdGlvbihlLHQsbixyLGksYSxvKXtEYyhhKSYmZS5saXN0ZW5lcnMucHVzaCh7ZXZlbnQ6dCxjYWxsYmFjazphLHR5cGU6bixuYW1lc3BhY2U6cixxdWFsaWZpZXI6aSxjb25mOm99KX0sZSx0LG4scixpKSx0aGlzfSxWdi5vbmU9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0LG4scix7b25lOiEwfSl9LFZ2LnJlbW92ZUxpc3RlbmVyPVZ2Lm9mZj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO3RoaXMuZW1pdHRpbmchPT0wJiYodGhpcy5saXN0ZW5lcnM9enUodGhpcy5saXN0ZW5lcnMpKTtmb3IodmFyIGE9dGhpcy5saXN0ZW5lcnMsbz1mdW5jdGlvbihvKXt2YXIgcz1hW29dO0h2KGksZnVuY3Rpb24odCxuLHIsaSxjLGwpe2lmKChzLnR5cGU9PT1yfHxlPT09YCpgKSYmKCFpJiZzLm5hbWVzcGFjZSE9PWAuKmB8fHMubmFtZXNwYWNlPT09aSkmJighY3x8dC5xdWFsaWZpZXJDb21wYXJlKHMucXVhbGlmaWVyLGMpKSYmKCFsfHxzLmNhbGxiYWNrPT09bCkpcmV0dXJuIGEuc3BsaWNlKG8sMSksITF9LGUsdCxuLHIpfSxzPWEubGVuZ3RoLTE7cz49MDtzLS0pbyhzKTtyZXR1cm4gdGhpc30sVnYucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlTGlzdGVuZXIoYCpgKX0sVnYuZW1pdD1Wdi50cmlnZ2VyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmxpc3RlbmVycyxpPXIubGVuZ3RoO3JldHVybiB0aGlzLmVtaXR0aW5nKyssT2ModCl8fCh0PVt0XSksV3YodGhpcyxmdW5jdGlvbihlLGEpe24hPW51bGwmJihyPVt7ZXZlbnQ6YS5ldmVudCx0eXBlOmEudHlwZSxuYW1lc3BhY2U6YS5uYW1lc3BhY2UsY2FsbGJhY2s6bn1dLGk9ci5sZW5ndGgpO2Zvcih2YXIgbz1mdW5jdGlvbigpe3ZhciBuPXJbc107aWYobi50eXBlPT09YS50eXBlJiYoIW4ubmFtZXNwYWNlfHxuLm5hbWVzcGFjZT09PWEubmFtZXNwYWNlfHxuLm5hbWVzcGFjZT09PUl2KSYmZS5ldmVudE1hdGNoZXMoZS5jb250ZXh0LG4sYSkpe3ZhciBpPVthXTt0IT1udWxsJiZLdShpLHQpLGUuYmVmb3JlRW1pdChlLmNvbnRleHQsbixhKSxuLmNvbmYmJm4uY29uZi5vbmUmJihlLmxpc3RlbmVycz1lLmxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1ufSkpO3ZhciBvPWUuY2FsbGJhY2tDb250ZXh0KGUuY29udGV4dCxuLGEpLGM9bi5jYWxsYmFjay5hcHBseShvLGkpO2UuYWZ0ZXJFbWl0KGUuY29udGV4dCxuLGEpLGM9PT0hMSYmKGEuc3RvcFByb3BhZ2F0aW9uKCksYS5wcmV2ZW50RGVmYXVsdCgpKX19LHM9MDtzPGk7cysrKW8oKTtlLmJ1YmJsZShlLmNvbnRleHQpJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZlLnBhcmVudChlLmNvbnRleHQpLmVtaXQoYSx0KX0sZSksdGhpcy5lbWl0dGluZy0tLHRoaXN9O3ZhciBHdj17cXVhbGlmaWVyQ29tcGFyZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsfHx0PT1udWxsP2U9PW51bGwmJnQ9PW51bGw6ZS5zYW1lVGV4dCh0KX0sZXZlbnRNYXRjaGVzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10LnF1YWxpZmllcjtyZXR1cm4gcj09bnVsbHx8ZSE9PW4udGFyZ2V0JiZQYyhuLnRhcmdldCkmJnIubWF0Y2hlcyhuLnRhcmdldCl9LGFkZEV2ZW50RmllbGRzOmZ1bmN0aW9uKGUsdCl7dC5jeT1lLmN5KCksdC50YXJnZXQ9ZX0sY2FsbGJhY2tDb250ZXh0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC5xdWFsaWZpZXI9PW51bGw/ZTpuLnRhcmdldH0sYmVmb3JlRW1pdDpmdW5jdGlvbihlLHQpe3QuY29uZiYmdC5jb25mLm9uY2UmJnQuY29uZi5vbmNlQ29sbGVjdGlvbi5yZW1vdmVMaXN0ZW5lcih0LmV2ZW50LHQucXVhbGlmaWVyLHQuY2FsbGJhY2spfSxidWJibGU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQ2hpbGQoKT9lLnBhcmVudCgpOmUuY3koKX19LEt2PWZ1bmN0aW9uKGUpe3JldHVybiBaKGUpP25ldyBQXyhlKTplfSxxdj17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgdD10aGlzW2VdLG49dC5fcHJpdmF0ZTtuLmVtaXR0ZXJ8fD1uZXcgQnYoR3YsdCl9cmV0dXJuIHRoaXN9LGVtaXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbWl0dGVyfSxvbjpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPUt2KHQpLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzW2ldLmVtaXR0ZXIoKS5vbihlLHIsbik7cmV0dXJuIHRoaXN9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9S3YodCksaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXNbaV0uZW1pdHRlcigpLnJlbW92ZUxpc3RlbmVyKGUscixuKTtyZXR1cm4gdGhpc30scmVtb3ZlQWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdGhpc1tlXS5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCk7cmV0dXJuIHRoaXN9LG9uZTpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPUt2KHQpLGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzW2ldLmVtaXR0ZXIoKS5vbmUoZSxyLG4pO3JldHVybiB0aGlzfSxvbmNlOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9S3YodCksaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXNbaV0uZW1pdHRlcigpLm9uKGUscixuLHtvbmNlOiEwLG9uY2VDb2xsZWN0aW9uOnRoaXN9KX0sZW1pdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXRoaXNbbl0uZW1pdHRlcigpLmVtaXQoZSx0KTtyZXR1cm4gdGhpc30sZW1pdEFuZE5vdGlmeTpmdW5jdGlvbihlLHQpe2lmKHRoaXMubGVuZ3RoIT09MClyZXR1cm4gdGhpcy5jeSgpLm5vdGlmeShlLHRoaXMpLHRoaXMuZW1pdChlLHQpLHRoaXN9fTtkXy5ldmVudEFsaWFzZXNPbihxdik7dmFyIEp2PXtub2RlczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNOb2RlKCl9KS5maWx0ZXIoZSl9LGVkZ2VzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0VkZ2UoKX0pLmZpbHRlcihlKX0sYnlHcm91cDpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnNwYXduKCksdD10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgcj10aGlzW25dO3IuaXNOb2RlKCk/ZS5wdXNoKHIpOnQucHVzaChyKX1yZXR1cm57bm9kZXM6ZSxlZGdlczp0fX0sZmlsdGVyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PXZvaWQgMClyZXR1cm4gdGhpcztpZihaKGUpfHxOYyhlKSlyZXR1cm4gbmV3IFBfKGUpLmZpbHRlcih0aGlzKTtpZihEYyhlKSl7Zm9yKHZhciBuPXRoaXMuc3Bhd24oKSxyPXRoaXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldOyh0P2UuYXBwbHkodCxbYSxpLHJdKTplKGEsaSxyKSkmJm4ucHVzaChhKX1yZXR1cm4gbn1yZXR1cm4gdGhpcy5zcGF3bigpfSxub3Q6ZnVuY3Rpb24oZSl7aWYoZSl7WihlKSYmKGU9dGhpcy5maWx0ZXIoZSkpO2Zvcih2YXIgdD10aGlzLnNwYXduKCksbj0wO248dGhpcy5sZW5ndGg7bisrKXt2YXIgcj10aGlzW25dO2UuaGFzKHIpfHx0LnB1c2gocil9cmV0dXJuIHR9cmV0dXJuIHRoaXN9LGFic29sdXRlQ29tcGxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN5KCkubXV0YWJsZUVsZW1lbnRzKCkubm90KHRoaXMpfSxpbnRlcnNlY3Q6ZnVuY3Rpb24oZSl7aWYoWihlKSl7dmFyIHQ9ZTtyZXR1cm4gdGhpcy5maWx0ZXIodCl9Zm9yKHZhciBuPXRoaXMuc3Bhd24oKSxyPXRoaXMsaT1lLGE9dGhpcy5sZW5ndGg8ZS5sZW5ndGgsbz1hP3I6aSxzPWE/aTpyLGM9MDtjPG8ubGVuZ3RoO2MrKyl7dmFyIGw9b1tjXTtzLmhhcyhsKSYmbi5wdXNoKGwpfXJldHVybiBufSx4b3I6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeTtaKGUpJiYoZT10LiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxyPXRoaXMsaT1lLGE9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXSxhPWkuX3ByaXZhdGUuZGF0YS5pZDt0Lmhhc0VsZW1lbnRXaXRoSWQoYSl8fG4ucHVzaChpKX19O3JldHVybiBhKHIsaSksYShpLHIpLG59LGRpZmY6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeTtaKGUpJiYoZT10LiQoZSkpO3ZhciBuPXRoaXMuc3Bhd24oKSxyPXRoaXMuc3Bhd24oKSxpPXRoaXMuc3Bhd24oKSxhPXRoaXMsbz1lLHM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgYT1lW3JdLG89YS5fcHJpdmF0ZS5kYXRhLmlkO3QuaGFzRWxlbWVudFdpdGhJZChvKT9pLm1lcmdlKGEpOm4ucHVzaChhKX19O3JldHVybiBzKGEsbyxuKSxzKG8sYSxyKSx7bGVmdDpuLHJpZ2h0OnIsYm90aDppfX0sYWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGUuY3k7aWYoIWUpcmV0dXJuIHRoaXM7aWYoWihlKSl7dmFyIG49ZTtlPXQubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWZvcih2YXIgcj10aGlzLnNwYXduU2VsZigpLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTt0aGlzLmhhcyhhKXx8ci5wdXNoKGEpfXJldHVybiByfSxtZXJnZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcml2YXRlLG49dC5jeTtpZighZSlyZXR1cm4gdGhpcztpZihlJiZaKGUpKXt2YXIgcj1lO2U9bi5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIocil9Zm9yKHZhciBpPXQubWFwLGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXSxzPW8uX3ByaXZhdGUuZGF0YS5pZDtpZighaS5oYXMocykpe3ZhciBjPXRoaXMubGVuZ3RoKys7dGhpc1tjXT1vLGkuc2V0KHMse2VsZTpvLGluZGV4OmN9KX19cmV0dXJuIHRoaXN9LHVubWVyZ2VBdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzW2VdLmlkKCksbj10aGlzLl9wcml2YXRlLm1hcDt0aGlzW2VdPXZvaWQgMCxuLmRlbGV0ZSh0KTt2YXIgcj1lPT09dGhpcy5sZW5ndGgtMTtpZih0aGlzLmxlbmd0aD4xJiYhcil7dmFyIGk9dGhpcy5sZW5ndGgtMSxhPXRoaXNbaV0sbz1hLl9wcml2YXRlLmRhdGEuaWQ7dGhpc1tpXT12b2lkIDAsdGhpc1tlXT1hLG4uc2V0KG8se2VsZTphLGluZGV4OmV9KX1yZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzfSx1bm1lcmdlT25lOmZ1bmN0aW9uKGUpe2U9ZVswXTt2YXIgdD10aGlzLl9wcml2YXRlLG49ZS5fcHJpdmF0ZS5kYXRhLmlkLHI9dC5tYXAuZ2V0KG4pO2lmKCFyKXJldHVybiB0aGlzO3ZhciBpPXIuaW5kZXg7cmV0dXJuIHRoaXMudW5tZXJnZUF0KGkpLHRoaXN9LHVubWVyZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeTtpZighZSlyZXR1cm4gdGhpcztpZihlJiZaKGUpKXt2YXIgbj1lO2U9dC5tdXRhYmxlRWxlbWVudHMoKS5maWx0ZXIobil9Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy51bm1lcmdlT25lKGVbcl0pO3JldHVybiB0aGlzfSx1bm1lcmdlQnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMubGVuZ3RoLTE7dD49MDt0LS0pe3ZhciBuPXRoaXNbdF07ZShuKSYmdGhpcy51bm1lcmdlQXQodCl9cmV0dXJuIHRoaXN9LG1hcDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxyPXRoaXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dD9lLmFwcGx5KHQsW2EsaSxyXSk6ZShhLGkscik7bi5wdXNoKG8pfXJldHVybiBufSxyZWR1Y2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dCxyPXRoaXMsaT0wO2k8ci5sZW5ndGg7aSsrKW49ZShuLHJbaV0saSxyKTtyZXR1cm4gbn0sbWF4OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPS0xLzAscixpPXRoaXMsYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9dD9lLmFwcGx5KHQsW28sYSxpXSk6ZShvLGEsaSk7cz5uJiYobj1zLHI9byl9cmV0dXJue3ZhbHVlOm4sZWxlOnJ9fSxtaW46ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MS8wLHIsaT10aGlzLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPXQ/ZS5hcHBseSh0LFtvLGEsaV0pOmUobyxhLGkpO3M8biYmKG49cyxyPW8pfXJldHVybnt2YWx1ZTpuLGVsZTpyfX19LFl2PUp2O1l2LnU9WXZbYHxgXT1ZdltgK2BdPVl2LnVuaW9uPVl2Lm9yPVl2LmFkZCxZdltgXFxgXT1ZdltgIWBdPVl2W2AtYF09WXYuZGlmZmVyZW5jZT1Zdi5yZWxhdGl2ZUNvbXBsZW1lbnQ9WXYuc3VidHJhY3Q9WXYubm90LFl2Lm49WXZbYCZgXT1ZdltgLmBdPVl2LmFuZD1Zdi5pbnRlcnNlY3Rpb249WXYuaW50ZXJzZWN0LFl2W2BeYF09WXZbYCgrKWBdPVl2W2AoLSlgXT1Zdi5zeW1tZXRyaWNEaWZmZXJlbmNlPVl2LnN5bWRpZmY9WXYueG9yLFl2LmZuRmlsdGVyPVl2LmZpbHRlckZuPVl2LnN0ZEZpbHRlcj1Zdi5maWx0ZXIsWXYuY29tcGxlbWVudD1Zdi5hYnNjb21wPVl2LmFic29sdXRlQ29tcGxlbWVudDt2YXIgWHY9e2lzTm9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdyb3VwKCk9PT1gbm9kZXNgfSxpc0VkZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ncm91cCgpPT09YGVkZ2VzYH0saXNMb29wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNFZGdlKCkmJnRoaXMuc291cmNlKClbMF09PT10aGlzLnRhcmdldCgpWzBdfSxpc1NpbXBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzRWRnZSgpJiZ0aGlzLnNvdXJjZSgpWzBdIT09dGhpcy50YXJnZXQoKVswXX0sZ3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuX3ByaXZhdGUuZ3JvdXB9fSxadj1mdW5jdGlvbihlLHQpe3ZhciBuPWUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCk7ZnVuY3Rpb24gcihlKXt2YXIgdD1lLnBzdHlsZShgei1jb21wb3VuZC1kZXB0aGApO3JldHVybiB0LnZhbHVlPT09YGF1dG9gP24/ZS56RGVwdGgoKTowOnQudmFsdWU9PT1gYm90dG9tYD8tMTp0LnZhbHVlPT09YHRvcGA/a3U6MH12YXIgaT1yKGUpLXIodCk7aWYoaSE9PTApcmV0dXJuIGk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5wc3R5bGUoYHotaW5kZXgtY29tcGFyZWApLnZhbHVlPT09YGF1dG9gPyshIWUuaXNOb2RlKCk6MH12YXIgbz1hKGUpLWEodCk7aWYobyE9PTApcmV0dXJuIG87dmFyIHM9ZS5wc3R5bGUoYHotaW5kZXhgKS52YWx1ZS10LnBzdHlsZShgei1pbmRleGApLnZhbHVlO3JldHVybiBzPT09MD9lLnBvb2xJbmRleCgpLXQucG9vbEluZGV4KCk6c30sUXY9e2ZvckVhY2g6ZnVuY3Rpb24oZSx0KXtpZihEYyhlKSlmb3IodmFyIG49dGhpcy5sZW5ndGgscj0wO3I8bjtyKyspe3ZhciBpPXRoaXNbcl07aWYoKHQ/ZS5hcHBseSh0LFtpLHIsdGhpc10pOmUoaSxyLHRoaXMpKT09PSExKWJyZWFrfXJldHVybiB0aGlzfSx0b0FycmF5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyllLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LHNsaWNlOmZ1bmN0aW9uKGUsdCl7dmFyIG49W10scj10aGlzLmxlbmd0aDt0Pz89cixlPz89MCxlPDAmJihlPXIrZSksdDwwJiYodD1yK3QpO2Zvcih2YXIgaT1lO2k+PTAmJmk8dCYmaTxyO2krKyluLnB1c2godGhpc1tpXSk7cmV0dXJuIHRoaXMuc3Bhd24obil9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LGVxOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfHx0aGlzLnNwYXduKCl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF18fHRoaXMuc3Bhd24oKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3RoaXMubGVuZ3RoLTFdfHx0aGlzLnNwYXduKCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RoPT09MH0sbm9uZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5lbXB0eSgpfSxzb3J0OmZ1bmN0aW9uKGUpe2lmKCFEYyhlKSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLnRvQXJyYXkoKS5zb3J0KGUpO3JldHVybiB0aGlzLnNwYXduKHQpfSxzb3J0QnlaSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zb3J0KFp2KX0sekRlcHRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpc1swXTtpZihlKXt2YXIgdD1lLl9wcml2YXRlO2lmKHQuZ3JvdXA9PT1gbm9kZXNgKXt2YXIgbj10LmRhdGEucGFyZW50P2UucGFyZW50cygpLnNpemUoKTowO3JldHVybiBlLmlzUGFyZW50KCk/bjprdS0xfXZhciByPXQuc291cmNlLGk9dC50YXJnZXQsYT1yLnpEZXB0aCgpLG89aS56RGVwdGgoKTtyZXR1cm4gTWF0aC5tYXgoYSxvLDApfX19O1F2LmVhY2g9UXYuZm9yRWFjaCwoZnVuY3Rpb24oKXt2YXIgZT1gdW5kZWZpbmVkYDsodHlwZW9mIFN5bWJvbD5gdWA/YHVuZGVmaW5lZGA6dmMoU3ltYm9sKSkhPWUmJnZjKFN5bWJvbC5pdGVyYXRvcikhPWUmJihRdltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXt2YWx1ZTp2b2lkIDAsZG9uZTohMX0sbj0wLHI9dGhpcy5sZW5ndGg7cmV0dXJuIGxjKHtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG48cj90LnZhbHVlPWVbbisrXToodC52YWx1ZT12b2lkIDAsdC5kb25lPSEwKSx0fX0sU3ltYm9sLml0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KX0pfSkoKTt2YXIgJHY9VXUoe25vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMX0pLGV5PXtsYXlvdXREaW1lbnNpb25zOmZ1bmN0aW9uKGUpe2U9JHYoZSk7dmFyIHQ7aWYoIXRoaXMudGFrZXNVcFNwYWNlKCkpdD17dzowLGg6MH07ZWxzZSBpZihlLm5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVscyl7dmFyIG49dGhpcy5ib3VuZGluZ0JveCgpO3Q9e3c6bi53LGg6bi5ofX1lbHNlIHQ9e3c6dGhpcy5vdXRlcldpZHRoKCksaDp0aGlzLm91dGVySGVpZ2h0KCl9O3JldHVybih0Lnc9PT0wfHx0Lmg9PT0wKSYmKHQudz10Lmg9MSksdH0sbGF5b3V0UG9zaXRpb25zOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiFlLmlzUGFyZW50KCl9KSxpPXRoaXMuY3koKSxhPXQuZWxlcyxvPWZ1bmN0aW9uKGUpe3JldHVybiBlLmlkKCl9LHM9V2MobixvKTtlLmVtaXQoe3R5cGU6YGxheW91dHN0YXJ0YCxsYXlvdXQ6ZX0pLGUuYW5pbWF0aW9ucz1bXTt2YXIgYz1mdW5jdGlvbihlLHQsbil7dmFyIHI9e3g6dC54MSt0LncvMix5OnQueTErdC5oLzJ9LGk9e3g6KG4ueC1yLngpKmUseToobi55LXIueSkqZX07cmV0dXJue3g6ci54K2kueCx5OnIueStpLnl9fSxsPXQuc3BhY2luZ0ZhY3RvciYmdC5zcGFjaW5nRmFjdG9yIT09MSx1PWZ1bmN0aW9uKCl7aWYoIWwpcmV0dXJuIG51bGw7Zm9yKHZhciBlPVdkKCksdD0wO3Q8ci5sZW5ndGg7dCsrKXt2YXIgbj1yW3RdLGk9cyhuLHQpO0pkKGUsaS54LGkueSl9cmV0dXJuIGV9KCksZD1XYyhmdW5jdGlvbihlLG4pe3ZhciByPXMoZSxuKTtyZXR1cm4gbCYmKHI9YyhNYXRoLmFicyh0LnNwYWNpbmdGYWN0b3IpLHUscikpLHQudHJhbnNmb3JtIT1udWxsJiYocj10LnRyYW5zZm9ybShlLHIpKSxyfSxvKTtpZih0LmFuaW1hdGUpe2Zvcih2YXIgZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgcD1yW2ZdLG09ZChwLGYpO2lmKHQuYW5pbWF0ZUZpbHRlcj09bnVsbHx8dC5hbmltYXRlRmlsdGVyKHAsZikpe3ZhciBoPXAuYW5pbWF0aW9uKHtwb3NpdGlvbjptLGR1cmF0aW9uOnQuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnQuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goaCl9ZWxzZSBwLnBvc2l0aW9uKG0pfWlmKHQuZml0KXt2YXIgZz1pLmFuaW1hdGlvbih7Zml0Ontib3VuZGluZ0JveDphLmJvdW5kaW5nQm94QXQoZCkscGFkZGluZzp0LnBhZGRpbmd9LGR1cmF0aW9uOnQuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnQuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goZyl9ZWxzZSBpZih0Lnpvb20hPT12b2lkIDAmJnQucGFuIT09dm9pZCAwKXt2YXIgXz1pLmFuaW1hdGlvbih7em9vbTp0Lnpvb20scGFuOnQucGFuLGR1cmF0aW9uOnQuYW5pbWF0aW9uRHVyYXRpb24sZWFzaW5nOnQuYW5pbWF0aW9uRWFzaW5nfSk7ZS5hbmltYXRpb25zLnB1c2goXyl9ZS5hbmltYXRpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIGUucGxheSgpfSksZS5vbmUoYGxheW91dHJlYWR5YCx0LnJlYWR5KSxlLmVtaXQoe3R5cGU6YGxheW91dHJlYWR5YCxsYXlvdXQ6ZX0pLGRtLmFsbChlLmFuaW1hdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnByb21pc2UoKX0pKS50aGVuKGZ1bmN0aW9uKCl7ZS5vbmUoYGxheW91dHN0b3BgLHQuc3RvcCksZS5lbWl0KHt0eXBlOmBsYXlvdXRzdG9wYCxsYXlvdXQ6ZX0pfSl9ZWxzZSByLnBvc2l0aW9ucyhkKSx0LmZpdCYmaS5maXQodC5lbGVzLHQucGFkZGluZyksdC56b29tIT1udWxsJiZpLnpvb20odC56b29tKSx0LnBhbiYmaS5wYW4odC5wYW4pLGUub25lKGBsYXlvdXRyZWFkeWAsdC5yZWFkeSksZS5lbWl0KHt0eXBlOmBsYXlvdXRyZWFkeWAsbGF5b3V0OmV9KSxlLm9uZShgbGF5b3V0c3RvcGAsdC5zdG9wKSxlLmVtaXQoe3R5cGU6YGxheW91dHN0b3BgLGxheW91dDplfSk7cmV0dXJuIHRoaXN9LGxheW91dDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jeSgpLm1ha2VMYXlvdXQoYWwoe30sZSx7ZWxlczp0aGlzfSkpfX07ZXkuY3JlYXRlTGF5b3V0PWV5Lm1ha2VMYXlvdXQ9ZXkubGF5b3V0O2Z1bmN0aW9uIHR5KGUsdCxuKXt2YXIgcj1uLl9wcml2YXRlLGk9ci5zdHlsZUNhY2hlPXIuc3R5bGVDYWNoZXx8W10sYTtyZXR1cm4oYT1pW2VdKT8/KGE9aVtlXT10KG4pKSxhfWZ1bmN0aW9uIG55KGUsdCl7cmV0dXJuIGU9YnUoZSksZnVuY3Rpb24obil7cmV0dXJuIHR5KGUsdCxuKX19ZnVuY3Rpb24gcnkoZSx0KXtlPWJ1KGUpO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwoZSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXNbMF07aWYodClyZXR1cm4gdHkoZSxuLHQpfX12YXIgaXk9e3JlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmN5KCksbj10LnJlbmRlcmVyKCkscj10LnN0eWxlRW5hYmxlZCgpO3JldHVybiBuJiZyJiZuLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0aGlzLGUpLHRoaXN9LGRpcnR5U3R5bGVDYWNoZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKSx0PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9wcml2YXRlLnN0eWxlQ2FjaGU9bnVsbH07aWYoZS5oYXNDb21wb3VuZE5vZGVzKCkpe3ZhciBuPXRoaXMuc3Bhd25TZWxmKCkubWVyZ2UodGhpcy5kZXNjZW5kYW50cygpKS5tZXJnZSh0aGlzLnBhcmVudHMoKSk7bi5tZXJnZShuLmNvbm5lY3RlZEVkZ2VzKCkpLG4uZm9yRWFjaCh0KX1lbHNlIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlKXt0KGUpLGUuY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHQpfSk7cmV0dXJuIHRoaXN9LHVwZGF0ZVN0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGUuY3k7aWYoIXQuc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7aWYodC5iYXRjaGluZygpKXJldHVybiB0Ll9wcml2YXRlLmJhdGNoU3R5bGVFbGVzLm1lcmdlKHRoaXMpLHRoaXM7dmFyIG49dC5oYXNDb21wb3VuZE5vZGVzKCkscj10aGlzO2U9ISEoZXx8ZT09PXZvaWQgMCksbiYmKHI9dGhpcy5zcGF3blNlbGYoKS5tZXJnZSh0aGlzLmRlc2NlbmRhbnRzKCkpLm1lcmdlKHRoaXMucGFyZW50cygpKSk7dmFyIGk9cjtyZXR1cm4gZT9pLmVtaXRBbmROb3RpZnkoYHN0eWxlYCk6aS5lbWl0KGBzdHlsZWApLHIuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5fcHJpdmF0ZS5zdHlsZURpcnR5PSEwfSksdGhpc30sY2xlYW5TdHlsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZihlLnN0eWxlRW5hYmxlZCgpKWZvcih2YXIgdD0wO3Q8dGhpcy5sZW5ndGg7dCsrKXt2YXIgbj10aGlzW3RdO24uX3ByaXZhdGUuc3R5bGVEaXJ0eSYmKG4uX3ByaXZhdGUuc3R5bGVEaXJ0eT0hMSxlLnN0eWxlKCkuYXBwbHkobikpfX0scGFyc2VkU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwLG49dGhpc1swXSxyPW4uY3koKTtpZihyLnN0eWxlRW5hYmxlZCgpJiZuKXJldHVybiBuLl9wcml2YXRlLnN0eWxlRGlydHkmJihuLl9wcml2YXRlLnN0eWxlRGlydHk9ITEsci5zdHlsZSgpLmFwcGx5KG4pKSxuLl9wcml2YXRlLnN0eWxlW2VdPz8odD9yLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KGUpOm51bGwpfSxudW1lcmljU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXTtpZih0LmN5KCkuc3R5bGVFbmFibGVkKCkmJnQpe3ZhciBuPXQucHN0eWxlKGUpO3JldHVybiBuLnBmVmFsdWU9PT12b2lkIDA/bi52YWx1ZTpuLnBmVmFsdWV9fSxudW1lcmljU3R5bGVVbml0czpmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdO2lmKHQuY3koKS5zdHlsZUVuYWJsZWQoKSYmdClyZXR1cm4gdC5wc3R5bGUoZSkudW5pdHN9LHJlbmRlcmVkU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jeSgpO2lmKCF0LnN0eWxlRW5hYmxlZCgpKXJldHVybiB0aGlzO3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gdC5zdHlsZSgpLmdldFJlbmRlcmVkU3R5bGUobixlKX0sc3R5bGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmN5KCk7aWYoIW4uc3R5bGVFbmFibGVkKCkpcmV0dXJuIHRoaXM7dmFyIHI9ITEsaT1uLnN0eWxlKCk7aWYoa2MoZSkpe3ZhciBhPWU7aS5hcHBseUJ5cGFzcyh0aGlzLGEsciksdGhpcy5lbWl0QW5kTm90aWZ5KGBzdHlsZWApfWVsc2UgaWYoWihlKSl7aWYodD09PXZvaWQgMCl7dmFyIG89dGhpc1swXTtyZXR1cm4gbz9pLmdldFN0eWxlUHJvcGVydHlWYWx1ZShvLGUpOnZvaWQgMH1pLmFwcGx5QnlwYXNzKHRoaXMsZSx0LHIpLHRoaXMuZW1pdEFuZE5vdGlmeShgc3R5bGVgKX1lbHNlIGlmKGU9PT12b2lkIDApe3ZhciBzPXRoaXNbMF07cmV0dXJuIHM/aS5nZXRSYXdTdHlsZShzKTp2b2lkIDB9cmV0dXJuIHRoaXN9LHJlbW92ZVN0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3koKTtpZighdC5zdHlsZUVuYWJsZWQoKSlyZXR1cm4gdGhpczt2YXIgbj0hMSxyPXQuc3R5bGUoKSxpPXRoaXM7aWYoZT09PXZvaWQgMClmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtyLnJlbW92ZUFsbEJ5cGFzc2VzKG8sbil9ZWxzZXtlPWUuc3BsaXQoL1xzKy8pO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgYz1pW3NdO3IucmVtb3ZlQnlwYXNzZXMoYyxlLG4pfX1yZXR1cm4gdGhpcy5lbWl0QW5kTm90aWZ5KGBzdHlsZWApLHRoaXN9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jc3MoYGRpc3BsYXlgLGBlbGVtZW50YCksdGhpc30saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNzcyhgZGlzcGxheWAsYG5vbmVgKSx0aGlzfSxlZmZlY3RpdmVPcGFjaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jeSgpO2lmKCFlLnN0eWxlRW5hYmxlZCgpKXJldHVybiAxO3ZhciB0PWUuaGFzQ29tcG91bmROb2RlcygpLG49dGhpc1swXTtpZihuKXt2YXIgcj1uLl9wcml2YXRlLGk9bi5wc3R5bGUoYG9wYWNpdHlgKS52YWx1ZTtpZighdClyZXR1cm4gaTt2YXIgYT1yLmRhdGEucGFyZW50P24ucGFyZW50cygpOm51bGw7aWYoYSlmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpPWFbb10ucHN0eWxlKGBvcGFjaXR5YCkudmFsdWUqaTtyZXR1cm4gaX19LHRyYW5zcGFyZW50OmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3koKS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMTt2YXIgZT10aGlzWzBdLHQ9ZS5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKTtpZihlKXJldHVybiB0P2UuZWZmZWN0aXZlT3BhY2l0eSgpPT09MDplLnBzdHlsZShgb3BhY2l0eWApLnZhbHVlPT09MH0sYmFja2dyb3VuZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN5KCkuc3R5bGVFbmFibGVkKCk/ISF0aGlzWzBdLl9wcml2YXRlLmJhY2tncm91bmRpbmc6ITF9fTtmdW5jdGlvbiBheShlLHQpe3ZhciBuPWUuX3ByaXZhdGUuZGF0YS5wYXJlbnQ/ZS5wYXJlbnRzKCk6bnVsbDtpZihuKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2lmKCF0KGkpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIG95KGUpe3ZhciB0PWUub2ssbj1lLmVkZ2VPa1ZpYU5vZGV8fGUub2sscj1lLnBhcmVudE9rfHxlLm9rO3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3koKTtpZighZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm4hMDt2YXIgaT10aGlzWzBdLGE9ZS5oYXNDb21wb3VuZE5vZGVzKCk7aWYoaSl7dmFyIG89aS5fcHJpdmF0ZTtpZighdChpKSlyZXR1cm4hMTtpZihpLmlzTm9kZSgpKXJldHVybiFhfHxheShpLHIpO3ZhciBzPW8uc291cmNlLGM9by50YXJnZXQ7cmV0dXJuIG4ocykmJighYXx8YXkocyxuKSkmJihzPT09Y3x8bihjKSYmKCFhfHxheShjLG4pKSl9fX12YXIgc3k9bnkoYGVsZVRha2VzVXBTcGFjZWAsZnVuY3Rpb24oZSl7cmV0dXJuIGUucHN0eWxlKGBkaXNwbGF5YCkudmFsdWU9PT1gZWxlbWVudGAmJmUud2lkdGgoKSE9PTAmJighZS5pc05vZGUoKXx8ZS5oZWlnaHQoKSE9PTApfSk7aXkudGFrZXNVcFNwYWNlPXJ5KGB0YWtlc1VwU3BhY2VgLG95KHtvazpzeX0pKSxpeS5pbnRlcmFjdGl2ZT1yeShgaW50ZXJhY3RpdmVgLG95KHtvazpueShgZWxlSW50ZXJhY3RpdmVgLGZ1bmN0aW9uKGUpe3JldHVybiBlLnBzdHlsZShgZXZlbnRzYCkudmFsdWU9PT1geWVzYCYmZS5wc3R5bGUoYHZpc2liaWxpdHlgKS52YWx1ZT09PWB2aXNpYmxlYCYmc3koZSl9KSxwYXJlbnRPazpueShgcGFyZW50SW50ZXJhY3RpdmVgLGZ1bmN0aW9uKGUpe3JldHVybiBlLnBzdHlsZShgdmlzaWJpbGl0eWApLnZhbHVlPT09YHZpc2libGVgJiZzeShlKX0pLGVkZ2VPa1ZpYU5vZGU6c3l9KSksaXkubm9uaW50ZXJhY3RpdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIWUuaW50ZXJhY3RpdmUoKX0saXkudmlzaWJsZT1yeShgdmlzaWJsZWAsb3koe29rOm55KGBlbGVWaXNpYmxlYCxmdW5jdGlvbihlKXtyZXR1cm4gZS5wc3R5bGUoYHZpc2liaWxpdHlgKS52YWx1ZT09PWB2aXNpYmxlYCYmZS5wc3R5bGUoYG9wYWNpdHlgKS5wZlZhbHVlIT09MCYmc3koZSl9KSxlZGdlT2tWaWFOb2RlOnN5fSkpLGl5LmhpZGRlbj1mdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07aWYoZSlyZXR1cm4hZS52aXNpYmxlKCl9LGl5LmlzQnVuZGxlZEJlemllcj1yeShgaXNCdW5kbGVkQmV6aWVyYCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmN5KCkuc3R5bGVFbmFibGVkKCk/IXRoaXMucmVtb3ZlZCgpJiZ0aGlzLnBzdHlsZShgY3VydmUtc3R5bGVgKS52YWx1ZT09PWBiZXppZXJgJiZ0aGlzLnRha2VzVXBTcGFjZSgpOiExfSksaXkuYnlwYXNzPWl5LmNzcz1peS5zdHlsZSxpeS5yZW5kZXJlZENzcz1peS5yZW5kZXJlZFN0eWxlLGl5LnJlbW92ZUJ5cGFzcz1peS5yZW1vdmVDc3M9aXkucmVtb3ZlU3R5bGUsaXkucHN0eWxlPWl5LnBhcnNlZFN0eWxlO3ZhciBjeT17fTtmdW5jdGlvbiBseShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMsbj1bXTtpZih0Lmxlbmd0aD09PTIpe3ZhciByPXRbMF0saT10WzFdO3RoaXMub24oZS5ldmVudCxyLGkpfWVsc2UgaWYodC5sZW5ndGg9PT0xJiZEYyh0WzBdKSl7dmFyIGE9dFswXTt0aGlzLm9uKGUuZXZlbnQsYSl9ZWxzZSBpZih0Lmxlbmd0aD09PTB8fHQubGVuZ3RoPT09MSYmT2ModFswXSkpe2Zvcih2YXIgbz10Lmxlbmd0aD09PTE/dFswXTpudWxsLHM9MDtzPHRoaXMubGVuZ3RoO3MrKyl7dmFyIGM9dGhpc1tzXSxsPSFlLmFibGVGaWVsZHx8Yy5fcHJpdmF0ZVtlLmFibGVGaWVsZF0sdT1jLl9wcml2YXRlW2UuZmllbGRdIT1lLnZhbHVlO2lmKGUub3ZlcnJpZGVBYmxlKXt2YXIgZD1lLm92ZXJyaWRlQWJsZShjKTtpZihkIT09dm9pZCAwJiYobD1kLCFkKSlyZXR1cm4gdGhpc31sJiYoYy5fcHJpdmF0ZVtlLmZpZWxkXT1lLnZhbHVlLHUmJm4ucHVzaChjKSl9dmFyIGY9dGhpcy5zcGF3bihuKTtmLnVwZGF0ZVN0eWxlKCksZi5lbWl0KGUuZXZlbnQpLG8mJmYuZW1pdChvKX1yZXR1cm4gdGhpc319ZnVuY3Rpb24gdXkoZSl7Y3lbZS5maWVsZF09ZnVuY3Rpb24oKXt2YXIgdD10aGlzWzBdO2lmKHQpe2lmKGUub3ZlcnJpZGVGaWVsZCl7dmFyIG49ZS5vdmVycmlkZUZpZWxkKHQpO2lmKG4hPT12b2lkIDApcmV0dXJuIG59cmV0dXJuIHQuX3ByaXZhdGVbZS5maWVsZF19fSxjeVtlLm9uXT1seSh7ZXZlbnQ6ZS5vbixmaWVsZDplLmZpZWxkLGFibGVGaWVsZDplLmFibGVGaWVsZCxvdmVycmlkZUFibGU6ZS5vdmVycmlkZUFibGUsdmFsdWU6ITB9KSxjeVtlLm9mZl09bHkoe2V2ZW50OmUub2ZmLGZpZWxkOmUuZmllbGQsYWJsZUZpZWxkOmUuYWJsZUZpZWxkLG92ZXJyaWRlQWJsZTplLm92ZXJyaWRlQWJsZSx2YWx1ZTohMX0pfXV5KHtmaWVsZDpgbG9ja2VkYCxvdmVycmlkZUZpZWxkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmN5KCkuYXV0b2xvY2soKT8hMDp2b2lkIDB9LG9uOmBsb2NrYCxvZmY6YHVubG9ja2B9KSx1eSh7ZmllbGQ6YGdyYWJiYWJsZWAsb3ZlcnJpZGVGaWVsZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jeSgpLmF1dG91bmdyYWJpZnkoKXx8ZS5wYW5uYWJsZSgpPyExOnZvaWQgMH0sb246YGdyYWJpZnlgLG9mZjpgdW5ncmFiaWZ5YH0pLHV5KHtmaWVsZDpgc2VsZWN0ZWRgLGFibGVGaWVsZDpgc2VsZWN0YWJsZWAsb3ZlcnJpZGVBYmxlOmZ1bmN0aW9uKGUpe3JldHVybiFlLmN5KCkuYXV0b3Vuc2VsZWN0aWZ5KCkmJnZvaWQgMH0sb246YHNlbGVjdGAsb2ZmOmB1bnNlbGVjdGB9KSx1eSh7ZmllbGQ6YHNlbGVjdGFibGVgLG92ZXJyaWRlRmllbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWUuY3koKS5hdXRvdW5zZWxlY3RpZnkoKSYmdm9pZCAwfSxvbjpgc2VsZWN0aWZ5YCxvZmY6YHVuc2VsZWN0aWZ5YH0pLGN5LmRlc2VsZWN0PWN5LnVuc2VsZWN0LGN5LmdyYWJiZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIGUuX3ByaXZhdGUuZ3JhYmJlZH0sdXkoe2ZpZWxkOmBhY3RpdmVgLG9uOmBhY3RpdmF0ZWAsb2ZmOmB1bmFjdGl2YXRlYH0pLHV5KHtmaWVsZDpgcGFubmFibGVgLG9uOmBwYW5pZnlgLG9mZjpgdW5wYW5pZnlgfSksY3kuaW5hY3RpdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO2lmKGUpcmV0dXJuIWUuX3ByaXZhdGUuYWN0aXZlfTt2YXIgZHk9e30sZnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLHI9W10saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldO2lmKGEuaXNOb2RlKCkpe2Zvcih2YXIgbz0hMSxzPWEuY29ubmVjdGVkRWRnZXMoKSxjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBsPXNbY10sdT1sLnNvdXJjZSgpLGQ9bC50YXJnZXQoKTtpZihlLm5vSW5jb21pbmdFZGdlcyYmZD09PWEmJnUhPT1hfHxlLm5vT3V0Z29pbmdFZGdlcyYmdT09PWEmJmQhPT1hKXtvPSEwO2JyZWFrfX1vfHxyLnB1c2goYSl9fXJldHVybiB0aGlzLnNwYXduKHIsITApLmZpbHRlcih0KX19LHB5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcyxyPVtdLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIGE9bltpXTtpZihhLmlzTm9kZSgpKWZvcih2YXIgbz1hLmNvbm5lY3RlZEVkZ2VzKCkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgYz1vW3NdLGw9Yy5zb3VyY2UoKSx1PWMudGFyZ2V0KCk7ZS5vdXRnb2luZyYmbD09PWE/KHIucHVzaChjKSxyLnB1c2godSkpOmUuaW5jb21pbmcmJnU9PT1hJiYoci5wdXNoKGMpLHIucHVzaChsKSl9fXJldHVybiB0aGlzLnNwYXduKHIsITApLmZpbHRlcih0KX19LG15PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIG49dGhpcyxyPVtdLGk9e307Oyl7dmFyIGE9ZS5vdXRnb2luZz9uLm91dGdvZXJzKCk6bi5pbmNvbWVycygpO2lmKGEubGVuZ3RoPT09MClicmVhaztmb3IodmFyIG89ITEscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdLGw9Yy5pZCgpO2lbbF18fChpW2xdPSEwLHIucHVzaChjKSxvPSEwKX1pZighbylicmVhaztuPWF9cmV0dXJuIHRoaXMuc3Bhd24ociwhMCkuZmlsdGVyKHQpfX07ZHkuY2xlYXJUcmF2ZXJzYWxDYWNoZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXRoaXNbZV0uX3ByaXZhdGUudHJhdmVyc2FsQ2FjaGU9bnVsbH0sYWwoZHkse3Jvb3RzOmZ5KHtub0luY29taW5nRWRnZXM6ITB9KSxsZWF2ZXM6Znkoe25vT3V0Z29pbmdFZGdlczohMH0pLG91dGdvZXJzOkxfKHB5KHtvdXRnb2luZzohMH0pLGBvdXRnb2Vyc2ApLHN1Y2Nlc3NvcnM6bXkoe291dGdvaW5nOiEwfSksaW5jb21lcnM6TF8ocHkoe2luY29taW5nOiEwfSksYGluY29tZXJzYCkscHJlZGVjZXNzb3JzOm15KHt9KX0pLGFsKGR5LHtuZWlnaGJvcmhvb2Q6TF8oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49dGhpcy5ub2RlcygpLHI9MDtyPG4ubGVuZ3RoO3IrKylmb3IodmFyIGk9bltyXSxhPWkuY29ubmVjdGVkRWRnZXMoKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sYz1zLnNvdXJjZSgpLGw9cy50YXJnZXQoKSx1PWk9PT1jP2w6Yzt1Lmxlbmd0aD4wJiZ0LnB1c2godVswXSksdC5wdXNoKHNbMF0pfXJldHVybiB0aGlzLnNwYXduKHQsITApLmZpbHRlcihlKX0sYG5laWdoYm9yaG9vZGApLGNsb3NlZE5laWdoYm9yaG9vZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uZWlnaGJvcmhvb2QoKS5hZGQodGhpcykuZmlsdGVyKGUpfSxvcGVuTmVpZ2hib3Job29kOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5laWdoYm9yaG9vZChlKX19KSxkeS5uZWlnaGJvdXJob29kPWR5Lm5laWdoYm9yaG9vZCxkeS5jbG9zZWROZWlnaGJvdXJob29kPWR5LmNsb3NlZE5laWdoYm9yaG9vZCxkeS5vcGVuTmVpZ2hib3VyaG9vZD1keS5vcGVuTmVpZ2hib3Job29kLGFsKGR5LHtzb3VyY2U6TF8oZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXSxuO3JldHVybiB0JiYobj10Ll9wcml2YXRlLnNvdXJjZXx8dC5jeSgpLmNvbGxlY3Rpb24oKSksbiYmZT9uLmZpbHRlcihlKTpufSxgc291cmNlYCksdGFyZ2V0OkxfKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF0sbjtyZXR1cm4gdCYmKG49dC5fcHJpdmF0ZS50YXJnZXR8fHQuY3koKS5jb2xsZWN0aW9uKCkpLG4mJmU/bi5maWx0ZXIoZSk6bn0sYHRhcmdldGApLHNvdXJjZXM6aHkoe2F0dHI6YHNvdXJjZWB9KSx0YXJnZXRzOmh5KHthdHRyOmB0YXJnZXRgfSl9KTtmdW5jdGlvbiBoeShlKXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBuPVtdLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9dGhpc1tyXS5fcHJpdmF0ZVtlLmF0dHJdO2kmJm4ucHVzaChpKX1yZXR1cm4gdGhpcy5zcGF3bihuLCEwKS5maWx0ZXIodCl9fWFsKGR5LHtlZGdlc1dpdGg6TF8oZ3koKSxgZWRnZXNXaXRoYCksZWRnZXNUbzpMXyhneSh7dGhpc0lzU3JjOiEwfSksYGVkZ2VzVG9gKX0pO2Z1bmN0aW9uIGd5KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj1bXSxyPXRoaXMuX3ByaXZhdGUuY3ksaT1lfHx7fTtaKHQpJiYodD1yLiQodCkpO2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz10W2FdLl9wcml2YXRlLmVkZ2VzLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGM9b1tzXSxsPWMuX3ByaXZhdGUuZGF0YSx1PXRoaXMuaGFzRWxlbWVudFdpdGhJZChsLnNvdXJjZSkmJnQuaGFzRWxlbWVudFdpdGhJZChsLnRhcmdldCksZD10Lmhhc0VsZW1lbnRXaXRoSWQobC5zb3VyY2UpJiZ0aGlzLmhhc0VsZW1lbnRXaXRoSWQobC50YXJnZXQpOyh1fHxkKSYmKChpLnRoaXNJc1NyY3x8aS50aGlzSXNUZ3QpJiYoaS50aGlzSXNTcmMmJiF1fHxpLnRoaXNJc1RndCYmIWQpfHxuLnB1c2goYykpfXJldHVybiB0aGlzLnNwYXduKG4sITApfX1hbChkeSx7Y29ubmVjdGVkRWRnZXM6TF8oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49dGhpcyxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07aWYoaS5pc05vZGUoKSlmb3IodmFyIGE9aS5fcHJpdmF0ZS5lZGdlcyxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107dC5wdXNoKHMpfX1yZXR1cm4gdGhpcy5zcGF3bih0LCEwKS5maWx0ZXIoZSl9LGBjb25uZWN0ZWRFZGdlc2ApLGNvbm5lY3RlZE5vZGVzOkxfKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPXRoaXMscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO2kuaXNFZGdlKCkmJih0LnB1c2goaS5zb3VyY2UoKVswXSksdC5wdXNoKGkudGFyZ2V0KClbMF0pKX1yZXR1cm4gdGhpcy5zcGF3bih0LCEwKS5maWx0ZXIoZSl9LGBjb25uZWN0ZWROb2Rlc2ApLHBhcmFsbGVsRWRnZXM6TF8oX3koKSxgcGFyYWxsZWxFZGdlc2ApLGNvZGlyZWN0ZWRFZGdlczpMXyhfeSh7Y29kaXJlY3RlZDohMH0pLGBjb2RpcmVjdGVkRWRnZXNgKX0pO2Z1bmN0aW9uIF95KGUpe3JldHVybiBlPWFsKHt9LHtjb2RpcmVjdGVkOiExfSxlKSxmdW5jdGlvbih0KXtmb3IodmFyIG49W10scj10aGlzLmVkZ2VzKCksaT1lLGE9MDthPHIubGVuZ3RoO2ErKylmb3IodmFyIG89clthXS5fcHJpdmF0ZSxzPW8uc291cmNlLGM9cy5fcHJpdmF0ZS5kYXRhLmlkLGw9by5kYXRhLnRhcmdldCx1PXMuX3ByaXZhdGUuZWRnZXMsZD0wO2Q8dS5sZW5ndGg7ZCsrKXt2YXIgZj11W2RdLHA9Zi5fcHJpdmF0ZS5kYXRhLG09cC50YXJnZXQsaD1wLnNvdXJjZSxnPW09PT1sJiZoPT09YyxfPWM9PT1tJiZsPT09aDsoaS5jb2RpcmVjdGVkJiZnfHwhaS5jb2RpcmVjdGVkJiYoZ3x8XykpJiZuLnB1c2goZil9cmV0dXJuIHRoaXMuc3Bhd24obiwhMCkuZmlsdGVyKHQpfX1hbChkeSx7Y29tcG9uZW50czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jeSgpLHI9bi5jb2xsZWN0aW9uKCksaT1lPT1udWxsP3Qubm9kZXMoKTplLm5vZGVzKCksYT1bXTtlIT1udWxsJiZpLmVtcHR5KCkmJihpPWUuc291cmNlcygpKTt2YXIgbz1mdW5jdGlvbihlLHQpe3IubWVyZ2UoZSksaS51bm1lcmdlKGUpLHQubWVyZ2UoZSl9O2lmKGkuZW1wdHkoKSlyZXR1cm4gdC5zcGF3bigpO3ZhciBzPWZ1bmN0aW9uKCl7dmFyIGU9bi5jb2xsZWN0aW9uKCk7YS5wdXNoKGUpO3ZhciByPWlbMF07byhyLGUpLHQuYmZzKHtkaXJlY3RlZDohMSxyb290czpyLHZpc2l0OmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsZSl9fSksZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKG4pJiZlLmhhcyhuLnNvdXJjZSgpKSYmZS5oYXMobi50YXJnZXQoKSkmJmUubWVyZ2Uobil9KX0pfTtkbyBzKCk7d2hpbGUoaS5sZW5ndGg+MCk7cmV0dXJuIGF9LGNvbXBvbmVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07cmV0dXJuIGUuY3koKS5tdXRhYmxlRWxlbWVudHMoKS5jb21wb25lbnRzKGUpWzBdfX0pLGR5LmNvbXBvbmVudHNPZj1keS5jb21wb25lbnRzO3ZhciB2eT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwJiZhcmd1bWVudHNbMl0scj1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMCYmYXJndW1lbnRzWzNdO2lmKGU9PT12b2lkIDApUHUoYEEgY29sbGVjdGlvbiBtdXN0IGhhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGNvcmVgKTtlbHNle3ZhciBpPW5ldyBZdSxhPSExO2lmKCF0KXQ9W107ZWxzZSBpZih0Lmxlbmd0aD4wJiZrYyh0WzBdKSYmIVBjKHRbMF0pKXthPSEwO2Zvcih2YXIgbz1bXSxzPW5ldyBRdSxjPTAsbD10Lmxlbmd0aDtjPGw7YysrKXt2YXIgdT10W2NdO3UuZGF0YT8/PXt9O3ZhciBkPXUuZGF0YTtpZihkLmlkPT1udWxsKWQuaWQ9QnUoKTtlbHNlIGlmKGUuaGFzRWxlbWVudFdpdGhJZChkLmlkKXx8cy5oYXMoZC5pZCkpY29udGludWU7dmFyIGY9bmV3ICR1KGUsdSwhMSk7by5wdXNoKGYpLHMuYWRkKGQuaWQpfXQ9b310aGlzLmxlbmd0aD0wO2Zvcih2YXIgcD0wLG09dC5sZW5ndGg7cDxtO3ArKyl7dmFyIGg9dFtwXVswXTtpZihoIT1udWxsKXt2YXIgZz1oLl9wcml2YXRlLmRhdGEuaWQ7biYmaS5oYXMoZyl8fChuJiZpLnNldChnLHtpbmRleDp0aGlzLmxlbmd0aCxlbGU6aH0pLHRoaXNbdGhpcy5sZW5ndGhdPWgsdGhpcy5sZW5ndGgrKyl9fXRoaXMuX3ByaXZhdGU9e2VsZXM6dGhpcyxjeTplLGdldCBtYXAoKXtyZXR1cm4gdGhpcy5sYXp5TWFwPz90aGlzLnJlYnVpbGRNYXAoKSx0aGlzLmxhenlNYXB9LHNldCBtYXAoZSl7dGhpcy5sYXp5TWFwPWV9LHJlYnVpbGRNYXA6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5sYXp5TWFwPW5ldyBZdSx0PXRoaXMuZWxlcyxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ZS5zZXQoci5pZCgpLHtpbmRleDpuLGVsZTpyfSl9fX0sbiYmKHRoaXMuX3ByaXZhdGUubWFwPWkpLGEmJiFyJiZ0aGlzLnJlc3RvcmUoKX19LHl5PSR1LnByb3RvdHlwZT12eS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShBcnJheS5wcm90b3R5cGUpO3l5Lmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYGNvbGxlY3Rpb25gfSx5eS5zcGF3bj1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdnkodGhpcy5jeSgpLGUsdCl9LHl5LnNwYXduU2VsZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNwYXduKHRoaXMpfSx5eS5jeT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5fSx5eS5yZW5kZXJlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmN5LnJlbmRlcmVyKCl9LHl5LmVsZW1lbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXX0seXkuY29sbGVjdGlvbj1mdW5jdGlvbigpe3JldHVybiBGYyh0aGlzKT90aGlzOm5ldyB2eSh0aGlzLl9wcml2YXRlLmN5LFt0aGlzXSl9LHl5LnVuaXF1ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgdnkodGhpcy5fcHJpdmF0ZS5jeSx0aGlzLCEwKX0seXkuaGFzRWxlbWVudFdpdGhJZD1mdW5jdGlvbihlKXtyZXR1cm4gZT1gYCtlLHRoaXMuX3ByaXZhdGUubWFwLmhhcyhlKX0seXkuZ2V0RWxlbWVudEJ5SWQ9ZnVuY3Rpb24oZSl7ZT1gYCtlO3ZhciB0PXRoaXMuX3ByaXZhdGUuY3ksbj10aGlzLl9wcml2YXRlLm1hcC5nZXQoZSk7cmV0dXJuIG4/bi5lbGU6bmV3IHZ5KHQpfSx5eS4kaWQ9eXkuZ2V0RWxlbWVudEJ5SWQseXkucG9vbEluZGV4PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZS5jeS5fcHJpdmF0ZS5lbGVtZW50cyx0PXRoaXNbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gZS5fcHJpdmF0ZS5tYXAuZ2V0KHQpLmluZGV4fSx5eS5pbmRleE9mPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0uX3ByaXZhdGUuZGF0YS5pZDtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5tYXAuZ2V0KHQpLmluZGV4fSx5eS5pbmRleE9mSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9YGArZSx0aGlzLl9wcml2YXRlLm1hcC5nZXQoZSkuaW5kZXh9LHl5Lmpzb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbGVtZW50KCksbj10aGlzLmN5KCk7aWYodD09bnVsbCYmZSlyZXR1cm4gdGhpcztpZih0IT1udWxsKXt2YXIgcj10Ll9wcml2YXRlO2lmKGtjKGUpKXtpZihuLnN0YXJ0QmF0Y2goKSxlLmRhdGEpe3QuZGF0YShlLmRhdGEpO3ZhciBpPXIuZGF0YTtpZih0LmlzRWRnZSgpKXt2YXIgYT0hMSxvPXt9LHM9ZS5kYXRhLnNvdXJjZSxjPWUuZGF0YS50YXJnZXQ7cyE9bnVsbCYmcyE9aS5zb3VyY2UmJihvLnNvdXJjZT1gYCtzLGE9ITApLGMhPW51bGwmJmMhPWkudGFyZ2V0JiYoby50YXJnZXQ9YGArYyxhPSEwKSxhJiYodD10Lm1vdmUobykpfWVsc2V7dmFyIGw9YHBhcmVudGBpbiBlLmRhdGEsdT1lLmRhdGEucGFyZW50O2wmJih1IT1udWxsfHxpLnBhcmVudCE9bnVsbCkmJnUhPWkucGFyZW50JiYodT09PXZvaWQgMCYmKHU9bnVsbCksdSE9bnVsbCYmKHU9YGArdSksdD10Lm1vdmUoe3BhcmVudDp1fSkpfX1lLnBvc2l0aW9uJiZ0LnBvc2l0aW9uKGUucG9zaXRpb24pO3ZhciBkPWZ1bmN0aW9uKG4saSxhKXt2YXIgbz1lW25dO28hPW51bGwmJm8hPT1yW25dJiYobz90W2ldKCk6dFthXSgpKX07cmV0dXJuIGQoYHJlbW92ZWRgLGByZW1vdmVgLGByZXN0b3JlYCksZChgc2VsZWN0ZWRgLGBzZWxlY3RgLGB1bnNlbGVjdGApLGQoYHNlbGVjdGFibGVgLGBzZWxlY3RpZnlgLGB1bnNlbGVjdGlmeWApLGQoYGxvY2tlZGAsYGxvY2tgLGB1bmxvY2tgKSxkKGBncmFiYmFibGVgLGBncmFiaWZ5YCxgdW5ncmFiaWZ5YCksZChgcGFubmFibGVgLGBwYW5pZnlgLGB1bnBhbmlmeWApLGUuY2xhc3NlcyE9bnVsbCYmdC5jbGFzc2VzKGUuY2xhc3Nlcyksbi5lbmRCYXRjaCgpLHRoaXN9aWYoZT09PXZvaWQgMCl7dmFyIGY9e2RhdGE6UnUoci5kYXRhKSxwb3NpdGlvbjpSdShyLnBvc2l0aW9uKSxncm91cDpyLmdyb3VwLHJlbW92ZWQ6ci5yZW1vdmVkLHNlbGVjdGVkOnIuc2VsZWN0ZWQsc2VsZWN0YWJsZTpyLnNlbGVjdGFibGUsbG9ja2VkOnIubG9ja2VkLGdyYWJiYWJsZTpyLmdyYWJiYWJsZSxwYW5uYWJsZTpyLnBhbm5hYmxlLGNsYXNzZXM6bnVsbH07Zi5jbGFzc2VzPWBgO3ZhciBwPTA7cmV0dXJuIHIuY2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBmLmNsYXNzZXMrPXArKz09PTA/ZTpgIGArZX0pLGZ9fX0seXkuanNvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8dGhpcy5sZW5ndGg7dCsrKXt2YXIgbj10aGlzW3RdLmpzb24oKTtlLnB1c2gobil9cmV0dXJuIGV9LHl5LmNsb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuY3koKSx0PVtdLG49MDtuPHRoaXMubGVuZ3RoO24rKyl7dmFyIHI9bmV3ICR1KGUsdGhpc1tuXS5qc29uKCksITEpO3QucHVzaChyKX1yZXR1cm4gbmV3IHZ5KGUsdCl9LHl5LmNvcHk9eXkuY2xvbmUseXkucmVzdG9yZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ITAsdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsbj10aGlzLHI9bi5jeSgpLGk9ci5fcHJpdmF0ZSxhPVtdLG89W10scyxjPTAsbD1uLmxlbmd0aDtjPGw7YysrKXt2YXIgdT1uW2NdOyghdHx8dS5yZW1vdmVkKCkpJiYodS5pc05vZGUoKT9hLnB1c2godSk6by5wdXNoKHUpKX1zPWEuY29uY2F0KG8pO3ZhciBkLGY9ZnVuY3Rpb24oKXtzLnNwbGljZShkLDEpLGQtLX07Zm9yKGQ9MDtkPHMubGVuZ3RoO2QrKyl7dmFyIHA9c1tkXSxtPXAuX3ByaXZhdGUsaD1tLmRhdGE7aWYocC5jbGVhclRyYXZlcnNhbENhY2hlKCksdHx8bS5yZW1vdmVkKXtpZihoLmlkPT09dm9pZCAwKWguaWQ9QnUoKTtlbHNlIGlmKFEoaC5pZCkpaC5pZD1gYCtoLmlkO2Vsc2UgaWYoemMoaC5pZCl8fCFaKGguaWQpKXtQdSgiQ2FuIG5vdCBjcmVhdGUgZWxlbWVudCB3aXRoIGludmFsaWQgc3RyaW5nIElEIGAiK2guaWQrImAiKSxmKCk7Y29udGludWV9ZWxzZSBpZihyLmhhc0VsZW1lbnRXaXRoSWQoaC5pZCkpe1B1KCJDYW4gbm90IGNyZWF0ZSBzZWNvbmQgZWxlbWVudCB3aXRoIElEIGAiK2guaWQrImAiKSxmKCk7Y29udGludWV9fXZhciBnPWguaWQ7aWYocC5pc05vZGUoKSl7dmFyIF89bS5wb3NpdGlvbjtfLng/Pz0wLF8ueT8/PTB9aWYocC5pc0VkZ2UoKSl7Zm9yKHZhciB2PXAseT1bYHNvdXJjZWAsYHRhcmdldGBdLGI9eS5sZW5ndGgseD0hMSxTPTA7UzxiO1MrKyl7dmFyIEM9eVtTXSx3PWhbQ107USh3KSYmKHc9aFtDXT1gYCtoW0NdKSx3PT1udWxsfHx3PT09YGA/KFB1KCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK2crImAgd2l0aCB1bnNwZWNpZmllZCAiK0MpLHg9ITApOnIuaGFzRWxlbWVudFdpdGhJZCh3KXx8KFB1KCJDYW4gbm90IGNyZWF0ZSBlZGdlIGAiK2crImAgd2l0aCBub25leGlzdGVudCAiK0MrIiBgIit3KyJgIikseD0hMCl9aWYoeCl7ZigpO2NvbnRpbnVlfXZhciBUPXIuZ2V0RWxlbWVudEJ5SWQoaC5zb3VyY2UpLEU9ci5nZXRFbGVtZW50QnlJZChoLnRhcmdldCk7VC5zYW1lKEUpP1QuX3ByaXZhdGUuZWRnZXMucHVzaCh2KTooVC5fcHJpdmF0ZS5lZGdlcy5wdXNoKHYpLEUuX3ByaXZhdGUuZWRnZXMucHVzaCh2KSksdi5fcHJpdmF0ZS5zb3VyY2U9VCx2Ll9wcml2YXRlLnRhcmdldD1FfW0ubWFwPW5ldyBZdSxtLm1hcC5zZXQoZyx7ZWxlOnAsaW5kZXg6MH0pLG0ucmVtb3ZlZD0hMSx0JiZyLmFkZFRvUG9vbChwKX1mb3IodmFyIEQ9MDtEPGEubGVuZ3RoO0QrKyl7dmFyIE89YVtEXSxrPU8uX3ByaXZhdGUuZGF0YTtRKGsucGFyZW50KSYmKGsucGFyZW50PWBgK2sucGFyZW50KTt2YXIgQT1rLnBhcmVudDtpZihBIT1udWxsfHxPLl9wcml2YXRlLnBhcmVudCl7dmFyIGo9Ty5fcHJpdmF0ZS5wYXJlbnQ/ci5jb2xsZWN0aW9uKCkubWVyZ2UoTy5fcHJpdmF0ZS5wYXJlbnQpOnIuZ2V0RWxlbWVudEJ5SWQoQSk7aWYoai5lbXB0eSgpKWsucGFyZW50PXZvaWQgMDtlbHNlIGlmKGpbMF0ucmVtb3ZlZCgpKUl1KGBOb2RlIGFkZGVkIHdpdGggbWlzc2luZyBwYXJlbnQsIHJlZmVyZW5jZSB0byBwYXJlbnQgcmVtb3ZlZGApLGsucGFyZW50PXZvaWQgMCxPLl9wcml2YXRlLnBhcmVudD1udWxsO2Vsc2V7Zm9yKHZhciBNPSExLE49ajshTi5lbXB0eSgpOyl7aWYoTy5zYW1lKE4pKXtNPSEwLGsucGFyZW50PXZvaWQgMDticmVha31OPU4ucGFyZW50KCl9TXx8KGpbMF0uX3ByaXZhdGUuY2hpbGRyZW4ucHVzaChPKSxPLl9wcml2YXRlLnBhcmVudD1qWzBdLGkuaGFzQ29tcG91bmROb2Rlcz0hMCl9fX1pZihzLmxlbmd0aD4wKXtmb3IodmFyIFA9cy5sZW5ndGg9PT1uLmxlbmd0aD9uOm5ldyB2eShyLHMpLEY9MDtGPFAubGVuZ3RoO0YrKyl7dmFyIEk9UFtGXTtJLmlzTm9kZSgpfHwoSS5wYXJhbGxlbEVkZ2VzKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLEkuc291cmNlKCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpLEkudGFyZ2V0KCkuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpKX0oaS5oYXNDb21wb3VuZE5vZGVzP3IuY29sbGVjdGlvbigpLm1lcmdlKFApLm1lcmdlKFAuY29ubmVjdGVkTm9kZXMoKSkubWVyZ2UoUC5wYXJlbnQoKSk6UCkuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCkuZGlydHlCb3VuZGluZ0JveENhY2hlKCkudXBkYXRlU3R5bGUoZSksZT9QLmVtaXRBbmROb3RpZnkoYGFkZGApOnQmJlAuZW1pdChgYWRkYCl9cmV0dXJuIG59LHl5LnJlbW92ZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzWzBdO3JldHVybiBlJiZlLl9wcml2YXRlLnJlbW92ZWR9LHl5Lmluc2lkZT1mdW5jdGlvbigpe3ZhciBlPXRoaXNbMF07cmV0dXJuIGUmJiFlLl9wcml2YXRlLnJlbW92ZWR9LHl5LnJlbW92ZT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTohMCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMCxuPXRoaXMscj1bXSxpPXt9LGE9bi5fcHJpdmF0ZS5jeTtmdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD1lLl9wcml2YXRlLmVkZ2VzLG49MDtuPHQubGVuZ3RoO24rKyljKHRbbl0pfWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0PWUuX3ByaXZhdGUuY2hpbGRyZW4sbj0wO248dC5sZW5ndGg7bisrKWModFtuXSl9ZnVuY3Rpb24gYyhlKXt2YXIgbj1pW2UuaWQoKV07dCYmZS5yZW1vdmVkKCl8fG58fChpW2UuaWQoKV09ITAsZS5pc05vZGUoKT8oci5wdXNoKGUpLG8oZSkscyhlKSk6ci51bnNoaWZ0KGUpKX1mb3IodmFyIGw9MCx1PW4ubGVuZ3RoO2w8dTtsKyspe3ZhciBkPW5bbF07YyhkKX1mdW5jdGlvbiBmKGUsdCl7dmFyIG49ZS5fcHJpdmF0ZS5lZGdlcztXdShuLHQpLGUuY2xlYXJUcmF2ZXJzYWxDYWNoZSgpfWZ1bmN0aW9uIHAoZSl7ZS5jbGVhclRyYXZlcnNhbENhY2hlKCl9dmFyIG09W107bS5pZHM9e307ZnVuY3Rpb24gaChlLHQpe3Q9dFswXSxlPWVbMF07dmFyIG49ZS5fcHJpdmF0ZS5jaGlsZHJlbixyPWUuaWQoKTtXdShuLHQpLHQuX3ByaXZhdGUucGFyZW50PW51bGwsbS5pZHNbcl18fChtLmlkc1tyXT0hMCxtLnB1c2goZSkpfW4uZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksdCYmYS5yZW1vdmVGcm9tUG9vbChyKTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKyl7dmFyIF89cltnXTtpZihfLmlzRWRnZSgpKXt2YXIgdj1fLnNvdXJjZSgpWzBdLHk9Xy50YXJnZXQoKVswXTtmKHYsXyksZih5LF8pO2Zvcih2YXIgYj1fLnBhcmFsbGVsRWRnZXMoKSx4PTA7eDxiLmxlbmd0aDt4Kyspe3ZhciBTPWJbeF07cChTKSxTLmlzQnVuZGxlZEJlemllcigpJiZTLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfX1lbHNle3ZhciBDPV8ucGFyZW50KCk7Qy5sZW5ndGghPT0wJiZoKEMsXyl9dCYmKF8uX3ByaXZhdGUucmVtb3ZlZD0hMCl9dmFyIHc9YS5fcHJpdmF0ZS5lbGVtZW50czthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITE7Zm9yKHZhciBUPTA7VDx3Lmxlbmd0aDtUKyspaWYod1tUXS5pc1BhcmVudCgpKXthLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXM9ITA7YnJlYWt9dmFyIEU9bmV3IHZ5KHRoaXMuY3koKSxyKTtFLnNpemUoKT4wJiYoZT9FLmVtaXRBbmROb3RpZnkoYHJlbW92ZWApOnQmJkUuZW1pdChgcmVtb3ZlYCkpO2Zvcih2YXIgRD0wO0Q8bS5sZW5ndGg7RCsrKXt2YXIgTz1tW0RdO3QmJk8ucmVtb3ZlZCgpfHxPLnVwZGF0ZVN0eWxlKCl9cmV0dXJuIEV9LHl5Lm1vdmU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJpdmF0ZS5jeSxuPXRoaXMscj0hMSxpPSExLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/ZTpgYCtlfTtpZihlLnNvdXJjZSE9PXZvaWQgMHx8ZS50YXJnZXQhPT12b2lkIDApe3ZhciBvPWEoZS5zb3VyY2UpLHM9YShlLnRhcmdldCksYz1vIT1udWxsJiZ0Lmhhc0VsZW1lbnRXaXRoSWQobyksbD1zIT1udWxsJiZ0Lmhhc0VsZW1lbnRXaXRoSWQocyk7KGN8fGwpJiYodC5iYXRjaChmdW5jdGlvbigpe24ucmVtb3ZlKHIsaSksbi5lbWl0QW5kTm90aWZ5KGBtb3Zlb3V0YCk7Zm9yKHZhciBlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciB0PW5bZV0sYT10Ll9wcml2YXRlLmRhdGE7dC5pc0VkZ2UoKSYmKGMmJihhLnNvdXJjZT1vKSxsJiYoYS50YXJnZXQ9cykpfW4ucmVzdG9yZShyLGkpfSksbi5lbWl0QW5kTm90aWZ5KGBtb3ZlYCkpfWVsc2UgaWYoZS5wYXJlbnQhPT12b2lkIDApe3ZhciB1PWEoZS5wYXJlbnQpO2lmKHU9PT1udWxsfHx0Lmhhc0VsZW1lbnRXaXRoSWQodSkpe3ZhciBkPXU9PT1udWxsP3ZvaWQgMDp1O3QuYmF0Y2goZnVuY3Rpb24oKXt2YXIgZT1uLnJlbW92ZShyLGkpO2UuZW1pdEFuZE5vdGlmeShgbW92ZW91dGApO2Zvcih2YXIgdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgYT1uW3RdLG89YS5fcHJpdmF0ZS5kYXRhO2EuaXNOb2RlKCkmJihvLnBhcmVudD1kKX1lLnJlc3RvcmUocixpKX0pLG4uZW1pdEFuZE5vdGlmeShgbW92ZWApfX1yZXR1cm4gdGhpc30sW3RtLGZfLHBfLElfLFJfLEdfLEtfLGp2LHF2LEp2LFh2LFF2LGV5LGl5LGN5LGR5XS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FsKHl5LGUpfSk7dmFyIGJ5PXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzO2lmKE5jKGUpKXt2YXIgcj1lO2lmKHIuX3ByaXZhdGUuY3k9PT1uKXQ9ci5yZXN0b3JlKCk7ZWxzZXtmb3IodmFyIGk9W10sYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgbz1yW2FdO2kucHVzaChvLmpzb24oKSl9dD1uZXcgdnkobixpKX19ZWxzZSBpZihPYyhlKSl0PW5ldyB2eShuLGUpO2Vsc2UgaWYoa2MoZSkmJihPYyhlLm5vZGVzKXx8T2MoZS5lZGdlcykpKXtmb3IodmFyIHM9ZSxjPVtdLGw9W2Bub2Rlc2AsYGVkZ2VzYF0sdT0wLGQ9bC5sZW5ndGg7dTxkO3UrKyl7dmFyIGY9bFt1XSxwPXNbZl07aWYoT2MocCkpZm9yKHZhciBtPTAsaD1wLmxlbmd0aDttPGg7bSsrKXt2YXIgZz1hbCh7Z3JvdXA6Zn0scFttXSk7Yy5wdXNoKGcpfX10PW5ldyB2eShuLGMpfWVsc2UgdD1uZXcgJHUobixlKS5jb2xsZWN0aW9uKCk7cmV0dXJuIHR9LHJlbW92ZTpmdW5jdGlvbihlKXtpZighTmMoZSkmJlooZSkpe3ZhciB0PWU7ZT10aGlzLiQodCl9cmV0dXJuIGUucmVtb3ZlKCl9fTtmdW5jdGlvbiB4eShlLHQsbixyKXt2YXIgaT0xMSxhPTEvKGktMSksbz10eXBlb2YgRmxvYXQzMkFycmF5PGB1YDtpZihhcmd1bWVudHMubGVuZ3RoIT09NClyZXR1cm4hMTtmb3IodmFyIHM9MDtzPDQ7KytzKWlmKHR5cGVvZiBhcmd1bWVudHNbc10hPWBudW1iZXJgfHxpc05hTihhcmd1bWVudHNbc10pfHwhaXNGaW5pdGUoYXJndW1lbnRzW3NdKSlyZXR1cm4hMTtlPU1hdGgubWluKGUsMSksbj1NYXRoLm1pbihuLDEpLGU9TWF0aC5tYXgoZSwwKSxuPU1hdGgubWF4KG4sMCk7dmFyIGM9bz9uZXcgRmxvYXQzMkFycmF5KGkpOkFycmF5KGkpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gMS0zKnQrMyplfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gMyp0LTYqZX1mdW5jdGlvbiBkKGUpe3JldHVybiAzKmV9ZnVuY3Rpb24gZihlLHQsbil7cmV0dXJuKChsKHQsbikqZSt1KHQsbikpKmUrZCh0KSkqZX1mdW5jdGlvbiBwKGUsdCxuKXtyZXR1cm4gMypsKHQsbikqZSplKzIqdSh0LG4pKmUrZCh0KX1mdW5jdGlvbiBtKHQscil7Zm9yKHZhciBpPTA7aTw0OysraSl7dmFyIGE9cChyLGUsbik7aWYoYT09PTApcmV0dXJuIHI7dmFyIG89ZihyLGUsbiktdDtyLT1vL2F9cmV0dXJuIHJ9ZnVuY3Rpb24gaCgpe2Zvcih2YXIgdD0wO3Q8aTsrK3QpY1t0XT1mKHQqYSxlLG4pfWZ1bmN0aW9uIGcodCxyLGkpe3ZhciBhLG8scz0wO2RvIG89cisoaS1yKS8yLGE9ZihvLGUsbiktdCxhPjA/aT1vOnI9bzt3aGlsZShNYXRoLmFicyhhKT4xZS03JiYrK3M8MTApO3JldHVybiBvfWZ1bmN0aW9uIF8odCl7Zm9yKHZhciByPTAsbz0xLHM9aS0xO28hPT1zJiZjW29dPD10OysrbylyKz1hOy0tbzt2YXIgbD0odC1jW29dKS8oY1tvKzFdLWNbb10pLHU9citsKmEsZD1wKHUsZSxuKTtyZXR1cm4gZD49LjAwMT9tKHQsdSk6ZD09PTA/dTpnKHQscixyK2EpfXZhciB2PSExO2Z1bmN0aW9uIHkoKXt2PSEwLChlIT09dHx8biE9PXIpJiZoKCl9dmFyIGI9ZnVuY3Rpb24oaSl7cmV0dXJuIHZ8fHkoKSxlPT09dCYmbj09PXI/aTppPT09MD8wOmk9PT0xPzE6ZihfKGkpLHQscil9O2IuZ2V0Q29udHJvbFBvaW50cz1mdW5jdGlvbigpe3JldHVyblt7eDplLHk6dH0se3g6bix5OnJ9XX07dmFyIHg9YGdlbmVyYXRlQmV6aWVyKGArW2UsdCxuLHJdK2ApYDtyZXR1cm4gYi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB4fSxifXZhciBTeT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuLWUudGVuc2lvbiplLngtZS5mcmljdGlvbiplLnZ9ZnVuY3Rpb24gdCh0LG4scil7dmFyIGk9e3g6dC54K3IuZHgqbix2OnQudityLmR2Km4sdGVuc2lvbjp0LnRlbnNpb24sZnJpY3Rpb246dC5mcmljdGlvbn07cmV0dXJue2R4OmkudixkdjplKGkpfX1mdW5jdGlvbiBuKG4scil7dmFyIGk9e2R4Om4udixkdjplKG4pfSxhPXQobixyKi41LGkpLG89dChuLHIqLjUsYSkscz10KG4scixvKSxjPTEvNiooaS5keCsyKihhLmR4K28uZHgpK3MuZHgpLGw9MS82KihpLmR2KzIqKGEuZHYrby5kdikrcy5kdik7cmV0dXJuIG4ueCs9YypyLG4udis9bCpyLG59cmV0dXJuIGZ1bmN0aW9uIGUodCxyLGkpe3ZhciBhPXt4Oi0xLHY6MCx0ZW5zaW9uOm51bGwsZnJpY3Rpb246bnVsbH0sbz1bMF0scz0wLGM9MS8xZTQsbD0xNi8xZTMsdSxkLGY7Zm9yKHQ9cGFyc2VGbG9hdCh0KXx8NTAwLHI9cGFyc2VGbG9hdChyKXx8MjAsaXx8PW51bGwsYS50ZW5zaW9uPXQsYS5mcmljdGlvbj1yLHU9aSE9PW51bGwsdT8ocz1lKHQsciksZD1zL2kqbCk6ZD1sO2Y9bihmfHxhLGQpLG8ucHVzaCgxK2YueCkscys9MTYsTWF0aC5hYnMoZi54KT5jJiZNYXRoLmFicyhmLnYpPmM7KTtyZXR1cm4gdT9mdW5jdGlvbihlKXtyZXR1cm4gb1tlKihvLmxlbmd0aC0xKXwwXX06c319KCksQ3k9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eHkoZSx0LG4scik7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZSsodC1lKSppKG4pfX0sd3k9e2xpbmVhcjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKHQtZSkqbn0sZWFzZTpDeSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjpDeSguNDIsMCwxLDEpLCJlYXNlLW91dCI6Q3koMCwwLC41OCwxKSwiZWFzZS1pbi1vdXQiOkN5KC40MiwwLC41OCwxKSwiZWFzZS1pbi1zaW5lIjpDeSguNDcsMCwuNzQ1LC43MTUpLCJlYXNlLW91dC1zaW5lIjpDeSguMzksLjU3NSwuNTY1LDEpLCJlYXNlLWluLW91dC1zaW5lIjpDeSguNDQ1LC4wNSwuNTUsLjk1KSwiZWFzZS1pbi1xdWFkIjpDeSguNTUsLjA4NSwuNjgsLjUzKSwiZWFzZS1vdXQtcXVhZCI6Q3koLjI1LC40NiwuNDUsLjk0KSwiZWFzZS1pbi1vdXQtcXVhZCI6Q3koLjQ1NSwuMDMsLjUxNSwuOTU1KSwiZWFzZS1pbi1jdWJpYyI6Q3koLjU1LC4wNTUsLjY3NSwuMTkpLCJlYXNlLW91dC1jdWJpYyI6Q3koLjIxNSwuNjEsLjM1NSwxKSwiZWFzZS1pbi1vdXQtY3ViaWMiOkN5KC42NDUsLjA0NSwuMzU1LDEpLCJlYXNlLWluLXF1YXJ0IjpDeSguODk1LC4wMywuNjg1LC4yMiksImVhc2Utb3V0LXF1YXJ0IjpDeSguMTY1LC44NCwuNDQsMSksImVhc2UtaW4tb3V0LXF1YXJ0IjpDeSguNzcsMCwuMTc1LDEpLCJlYXNlLWluLXF1aW50IjpDeSguNzU1LC4wNSwuODU1LC4wNiksImVhc2Utb3V0LXF1aW50IjpDeSguMjMsMSwuMzIsMSksImVhc2UtaW4tb3V0LXF1aW50IjpDeSguODYsMCwuMDcsMSksImVhc2UtaW4tZXhwbyI6Q3koLjk1LC4wNSwuNzk1LC4wMzUpLCJlYXNlLW91dC1leHBvIjpDeSguMTksMSwuMjIsMSksImVhc2UtaW4tb3V0LWV4cG8iOkN5KDEsMCwwLDEpLCJlYXNlLWluLWNpcmMiOkN5KC42LC4wNCwuOTgsLjMzNSksImVhc2Utb3V0LWNpcmMiOkN5KC4wNzUsLjgyLC4xNjUsMSksImVhc2UtaW4tb3V0LWNpcmMiOkN5KC43ODUsLjEzNSwuMTUsLjg2KSxzcHJpbmc6ZnVuY3Rpb24oZSx0LG4pe2lmKG49PT0wKXJldHVybiB3eS5saW5lYXI7dmFyIHI9U3koZSx0LG4pO3JldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUrKHQtZSkqcihuKX19LCJjdWJpYy1iZXppZXIiOkN5fTtmdW5jdGlvbiBUeShlLHQsbixyLGkpe2lmKHI9PT0xfHx0PT09bilyZXR1cm4gbjt2YXIgYT1pKHQsbixyKTtyZXR1cm4gZT09bnVsbHx8KChlLnJvdW5kVmFsdWV8fGUuY29sb3IpJiYoYT1NYXRoLnJvdW5kKGEpKSxlLm1pbiE9PXZvaWQgMCYmKGE9TWF0aC5tYXgoYSxlLm1pbikpLGUubWF4IT09dm9pZCAwJiYoYT1NYXRoLm1pbihhLGUubWF4KSkpLGF9ZnVuY3Rpb24gRXkoZSx0KXtyZXR1cm4gZS5wZlZhbHVlIT1udWxsfHxlLnZhbHVlIT1udWxsP2UucGZWYWx1ZSE9bnVsbCYmKHQ9PW51bGx8fHQudHlwZS51bml0cyE9PWAlYCk/ZS5wZlZhbHVlOmUudmFsdWU6ZX1mdW5jdGlvbiBEeShlLHQsbixyLGkpe3ZhciBhPWk9PW51bGw/bnVsbDppLnR5cGU7bjwwP249MDpuPjEmJihuPTEpO3ZhciBvPUV5KGUsaSkscz1FeSh0LGkpO2lmKFEobykmJlEocykpcmV0dXJuIFR5KGEsbyxzLG4scik7aWYoT2MobykmJk9jKHMpKXtmb3IodmFyIGM9W10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgdT1vW2xdLGQ9c1tsXTtpZih1IT1udWxsJiZkIT1udWxsKXt2YXIgZj1UeShhLHUsZCxuLHIpO2MucHVzaChmKX1lbHNlIGMucHVzaChkKX1yZXR1cm4gY319ZnVuY3Rpb24gT3koZSx0LG4scil7dmFyIGk9IXIsYT1lLl9wcml2YXRlLG89dC5fcHJpdmF0ZSxzPW8uZWFzaW5nLGM9by5zdGFydFRpbWUsbD0ocj9lOmUuY3koKSkuc3R5bGUoKTtpZighby5lYXNpbmdJbXBsKXtpZihzPT1udWxsKW8uZWFzaW5nSW1wbD13eS5saW5lYXI7ZWxzZXt2YXIgdT1aKHMpP2wucGFyc2UoYHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uYCxzKS52YWx1ZTpzLGQsZjtaKHUpPyhkPXUsZj1bXSk6KGQ9dVsxXSxmPXUuc2xpY2UoMikubWFwKGZ1bmN0aW9uKGUpe3JldHVybitlfSkpLGYubGVuZ3RoPjA/KGQ9PT1gc3ByaW5nYCYmZi5wdXNoKG8uZHVyYXRpb24pLG8uZWFzaW5nSW1wbD13eVtkXS5hcHBseShudWxsLGYpKTpvLmVhc2luZ0ltcGw9d3lbZF19fXZhciBwPW8uZWFzaW5nSW1wbCxtPW8uZHVyYXRpb249PT0wPzE6KG4tYykvby5kdXJhdGlvbjtpZihvLmFwcGx5aW5nJiYobT1vLnByb2dyZXNzKSxtPDA/bT0wOm0+MSYmKG09MSksby5kZWxheT09bnVsbCl7dmFyIGg9by5zdGFydFBvc2l0aW9uLGc9by5wb3NpdGlvbjtpZihnJiZpJiYhZS5sb2NrZWQoKSl7dmFyIF89e307a3koaC54LGcueCkmJihfLng9RHkoaC54LGcueCxtLHApKSxreShoLnksZy55KSYmKF8ueT1EeShoLnksZy55LG0scCkpLGUucG9zaXRpb24oXyl9dmFyIHY9by5zdGFydFBhbix5PW8ucGFuLGI9YS5wYW4seD15IT1udWxsJiZyO3gmJihreSh2LngseS54KSYmKGIueD1EeSh2LngseS54LG0scCkpLGt5KHYueSx5LnkpJiYoYi55PUR5KHYueSx5LnksbSxwKSksZS5lbWl0KGBwYW5gKSk7dmFyIFM9by5zdGFydFpvb20sQz1vLnpvb20sdz1DIT1udWxsJiZyO3cmJihreShTLEMpJiYoYS56b29tPVVkKGEubWluWm9vbSxEeShTLEMsbSxwKSxhLm1heFpvb20pKSxlLmVtaXQoYHpvb21gKSksKHh8fHcpJiZlLmVtaXQoYHZpZXdwb3J0YCk7dmFyIFQ9by5zdHlsZTtpZihUJiZULmxlbmd0aD4wJiZpKXtmb3IodmFyIEU9MDtFPFQubGVuZ3RoO0UrKyl7dmFyIEQ9VFtFXSxPPUQubmFtZSxrPUQsQT1vLnN0YXJ0U3R5bGVbT10saj1sLnByb3BlcnRpZXNbQS5uYW1lXSxNPUR5KEEsayxtLHAsaik7bC5vdmVycmlkZUJ5cGFzcyhlLE8sTSl9ZS5lbWl0KGBzdHlsZWApfX1yZXR1cm4gby5wcm9ncmVzcz1tLG19ZnVuY3Rpb24ga3koZSx0KXtyZXR1cm4gZT09bnVsbHx8dD09bnVsbD8hMTohIShRKGUpJiZRKHQpfHxlJiZ0KX1mdW5jdGlvbiBBeShlLHQsbixyKXt2YXIgaT10Ll9wcml2YXRlO2kuc3RhcnRlZD0hMCxpLnN0YXJ0VGltZT1uLWkucHJvZ3Jlc3MqaS5kdXJhdGlvbn1mdW5jdGlvbiBqeShlLHQpe3ZhciBuPXQuX3ByaXZhdGUuYW5pRWxlcyxyPVtdO2Z1bmN0aW9uIGkodCxuKXt2YXIgaT10Ll9wcml2YXRlLGE9aS5hbmltYXRpb24uY3VycmVudCxvPWkuYW5pbWF0aW9uLnF1ZXVlLHM9ITE7aWYoYS5sZW5ndGg9PT0wKXt2YXIgYz1vLnNoaWZ0KCk7YyYmYS5wdXNoKGMpfWZvcih2YXIgbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgtMTt0Pj0wO3QtLSl7dmFyIG49ZVt0XTtuKCl9ZS5zcGxpY2UoMCxlLmxlbmd0aCl9LHU9YS5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGQ9YVt1XSxmPWQuX3ByaXZhdGU7Zi5zdG9wcGVkPyhhLnNwbGljZSh1LDEpLGYuaG9va2VkPSExLGYucGxheWluZz0hMSxmLnN0YXJ0ZWQ9ITEsbChmLmZyYW1lcykpOihmLnBsYXlpbmd8fGYuYXBwbHlpbmcpJiYoZi5wbGF5aW5nJiZmLmFwcGx5aW5nJiYoZi5hcHBseWluZz0hMSksZi5zdGFydGVkfHxBeSh0LGQsZSksT3kodCxkLGUsbiksZi5hcHBseWluZyYmPSExLGwoZi5mcmFtZXMpLGYuc3RlcCE9bnVsbCYmZi5zdGVwKGUpLGQuY29tcGxldGVkKCkmJihhLnNwbGljZSh1LDEpLGYuaG9va2VkPSExLGYucGxheWluZz0hMSxmLnN0YXJ0ZWQ9ITEsbChmLmNvbXBsZXRlcykpLHM9ITApfXJldHVybiFuJiZhLmxlbmd0aD09PTAmJm8ubGVuZ3RoPT09MCYmci5wdXNoKHQpLHN9Zm9yKHZhciBhPSExLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9bltvXSxjPWkocyk7YXx8PWN9dmFyIGw9aSh0LCEwKTsoYXx8bCkmJihuLmxlbmd0aD4wP3Qubm90aWZ5KGBkcmF3YCxuKTp0Lm5vdGlmeShgZHJhd2ApKSxuLnVubWVyZ2UociksdC5lbWl0KGBzdGVwYCl9dmFyIE15PXthbmltYXRlOmRfLmFuaW1hdGUoKSxhbmltYXRpb246ZF8uYW5pbWF0aW9uKCksYW5pbWF0ZWQ6ZF8uYW5pbWF0ZWQoKSxjbGVhclF1ZXVlOmRfLmNsZWFyUXVldWUoKSxkZWxheTpkXy5kZWxheSgpLGRlbGF5QW5pbWF0aW9uOmRfLmRlbGF5QW5pbWF0aW9uKCksc3RvcDpkXy5zdG9wKCksYWRkVG9BbmltYXRpb25Qb29sOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5zdHlsZUVuYWJsZWQoKSYmdC5fcHJpdmF0ZS5hbmlFbGVzLm1lcmdlKGUpfSxzdG9wQW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmc9ITF9LHN0YXJ0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoZS5fcHJpdmF0ZS5hbmltYXRpb25zUnVubmluZz0hMCwhZS5zdHlsZUVuYWJsZWQoKSlyZXR1cm47ZnVuY3Rpb24gdCgpe2UuX3ByaXZhdGUuYW5pbWF0aW9uc1J1bm5pbmcmJmN1KGZ1bmN0aW9uKG4pe2p5KG4sZSksdCgpfSl9dmFyIG49ZS5yZW5kZXJlcigpO24mJm4uYmVmb3JlUmVuZGVyP24uYmVmb3JlUmVuZGVyKGZ1bmN0aW9uKHQsbil7ankobixlKX0sbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmFuaW1hdGlvbnMpOnQoKX19LE55PXtxdWFsaWZpZXJDb21wYXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGx8fHQ9PW51bGw/ZT09bnVsbCYmdD09bnVsbDplLnNhbWVUZXh0KHQpfSxldmVudE1hdGNoZXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQucXVhbGlmaWVyO3JldHVybiByPT1udWxsfHxlIT09bi50YXJnZXQmJlBjKG4udGFyZ2V0KSYmci5tYXRjaGVzKG4udGFyZ2V0KX0sYWRkRXZlbnRGaWVsZHM6ZnVuY3Rpb24oZSx0KXt0LmN5PWUsdC50YXJnZXQ9ZX0sY2FsbGJhY2tDb250ZXh0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdC5xdWFsaWZpZXI9PW51bGw/ZTpuLnRhcmdldH19LFB5PWZ1bmN0aW9uKGUpe3JldHVybiBaKGUpP25ldyBQXyhlKTplfSxGeT17Y3JlYXRlRW1pdHRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUuZW1pdHRlcnx8PW5ldyBCdihOeSx0aGlzKSx0aGlzfSxlbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sb246ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbihlLFB5KHQpLG4pLHRoaXN9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlTGlzdGVuZXIoZSxQeSh0KSxuKSx0aGlzfSxyZW1vdmVBbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpc30sb25lOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGUsUHkodCksbiksdGhpc30sb25jZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuZW1pdHRlcigpLm9uZShlLFB5KHQpLG4pLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkuZW1pdChlLHQpLHRoaXN9LGVtaXRBbmROb3RpZnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbWl0KGUpLHRoaXMubm90aWZ5KGUsdCksdGhpc319O2RfLmV2ZW50QWxpYXNlc09uKEZ5KTt2YXIgSXk9e3BuZzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBlfHw9e30sdC5wbmcoZSl9LGpwZzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcml2YXRlLnJlbmRlcmVyO3JldHVybiBlfHw9e30sZS5iZz1lLmJnfHxgI2ZmZmAsdC5qcGcoZSl9fTtJeS5qcGVnPUl5LmpwZzt2YXIgTHk9e2xheW91dDpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGU9PW51bGwpUHUoYExheW91dCBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHRvIG1ha2UgYSBsYXlvdXRgKTtlbHNlIGlmKGUubmFtZT09bnVsbClQdSgiQSBgbmFtZWAgbXVzdCBiZSBzcGVjaWZpZWQgdG8gbWFrZSBhIGxheW91dCIpO2Vsc2V7dmFyIG49ZS5uYW1lLHI9dC5leHRlbnNpb24oYGxheW91dGAsbik7aWYocj09bnVsbClQdSgiTm8gc3VjaCBsYXlvdXQgYCIrbisiYCBmb3VuZC4gIERpZCB5b3UgZm9yZ2V0IHRvIGltcG9ydCBpdCBhbmQgYGN5dG9zY2FwZS51c2UoKWAgaXQ/Iik7ZWxzZSByZXR1cm4gbmV3IHIoYWwoe30sZSx7Y3k6dCxlbGVzOlooZS5lbGVzKT90LiQoZS5lbGVzKTplLmVsZXM9PW51bGw/dC4kKCk6ZS5lbGVzfSkpfX19O0x5LmNyZWF0ZUxheW91dD1MeS5tYWtlTGF5b3V0PUx5LmxheW91dDt2YXIgUnk9e25vdGlmeTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3ByaXZhdGU7aWYodGhpcy5iYXRjaGluZygpKXtuLmJhdGNoTm90aWZpY2F0aW9ucz1uLmJhdGNoTm90aWZpY2F0aW9uc3x8e307dmFyIHI9bi5iYXRjaE5vdGlmaWNhdGlvbnNbZV09bi5iYXRjaE5vdGlmaWNhdGlvbnNbZV18fHRoaXMuY29sbGVjdGlvbigpO3QhPW51bGwmJnIubWVyZ2UodCl9ZWxzZSBpZihuLm5vdGlmaWNhdGlvbnNFbmFibGVkKXt2YXIgaT10aGlzLnJlbmRlcmVyKCk7IXRoaXMuZGVzdHJveWVkKCkmJmkmJmkubm90aWZ5KGUsdCl9fSxub3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGU7cmV0dXJuIGU9PT12b2lkIDA/dC5ub3RpZmljYXRpb25zRW5hYmxlZDoodC5ub3RpZmljYXRpb25zRW5hYmxlZD0hIWUsdGhpcyl9LG5vTm90aWZpY2F0aW9uczpmdW5jdGlvbihlKXt0aGlzLm5vdGlmaWNhdGlvbnMoITEpLGUoKSx0aGlzLm5vdGlmaWNhdGlvbnMoITApfSxiYXRjaGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmJhdGNoQ291bnQ+MH0sc3RhcnRCYXRjaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGU7cmV0dXJuIGUuYmF0Y2hDb3VudD8/PTAsZS5iYXRjaENvdW50PT09MCYmKGUuYmF0Y2hTdHlsZUVsZXM9dGhpcy5jb2xsZWN0aW9uKCksZS5iYXRjaE5vdGlmaWNhdGlvbnM9e30pLGUuYmF0Y2hDb3VudCsrLHRoaXN9LGVuZEJhdGNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcHJpdmF0ZTtpZihlLmJhdGNoQ291bnQ9PT0wKXJldHVybiB0aGlzO2lmKGUuYmF0Y2hDb3VudC0tLGUuYmF0Y2hDb3VudD09PTApe2UuYmF0Y2hTdHlsZUVsZXMudXBkYXRlU3R5bGUoKTt2YXIgdD10aGlzLnJlbmRlcmVyKCk7T2JqZWN0LmtleXMoZS5iYXRjaE5vdGlmaWNhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHI9ZS5iYXRjaE5vdGlmaWNhdGlvbnNbbl07ci5lbXB0eSgpP3Qubm90aWZ5KG4pOnQubm90aWZ5KG4scil9KX1yZXR1cm4gdGhpc30sYmF0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RhcnRCYXRjaCgpLGUoKSx0aGlzLmVuZEJhdGNoKCksdGhpc30sYmF0Y2hEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuYmF0Y2goZnVuY3Rpb24oKXtmb3IodmFyIG49T2JqZWN0LmtleXMoZSkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdLGE9ZVtpXTt0LmdldEVsZW1lbnRCeUlkKGkpLmRhdGEoYSl9fSl9fSx6eT1VdSh7aGlkZUVkZ2VzT25WaWV3cG9ydDohMSx0ZXh0dXJlT25WaWV3cG9ydDohMSxtb3Rpb25CbHVyOiExLG1vdGlvbkJsdXJPcGFjaXR5Oi4wNSxwaXhlbFJhdGlvOnZvaWQgMCxkZXNrdG9wVGFwVGhyZXNob2xkOjQsdG91Y2hUYXBUaHJlc2hvbGQ6OCx3aGVlbFNlbnNpdGl2aXR5OjEsZGVidWc6ITEsc2hvd0ZwczohMSx3ZWJnbDohMSx3ZWJnbERlYnVnOiExLHdlYmdsRGVidWdTaG93QXRsYXNlczohMSx3ZWJnbFRleFNpemU6MjA0OCx3ZWJnbFRleFJvd3M6MzYsd2ViZ2xUZXhSb3dzTm9kZXM6MTgsd2ViZ2xCYXRjaFNpemU6MjA0OCx3ZWJnbFRleFBlckJhdGNoOjE0LHdlYmdsQmdDb2xvcjpbMjU1LDI1NSwyNTVdfSksQnk9e3JlbmRlclRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLl9wcml2YXRlLnJlbmRlcmVyLnJlbmRlclRvKGUsdCxuLHIpLHRoaXN9LHJlbmRlcmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXJ9LGZvcmNlUmVuZGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90aWZ5KGBkcmF3YCksdGhpc30scmVzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW52YWxpZGF0ZVNpemUoKSx0aGlzLmVtaXRBbmROb3RpZnkoYHJlc2l6ZWApLHRoaXN9LGluaXRSZW5kZXJlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5leHRlbnNpb24oYHJlbmRlcmVyYCxlLm5hbWUpO2lmKG49PW51bGwpUHUoYENhbiBub3QgaW5pdGlhbGlzZTogTm8gc3VjaCByZW5kZXJlciBcYCR7ZS5uYW1lfVxgIGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBpbXBvcnQgaXQgYW5kIFxgY3l0b3NjYXBlLnVzZSgpXGAgaXQ/YCk7ZWxzZXtlLndoZWVsU2Vuc2l0aXZpdHkhPT12b2lkIDAmJkl1KGBZb3UgaGF2ZSBzZXQgYSBjdXN0b20gd2hlZWwgc2Vuc2l0aXZpdHkuICBUaGlzIHdpbGwgbWFrZSB5b3VyIGFwcCB6b29tIHVubmF0dXJhbGx5IHdoZW4gdXNpbmcgbWFpbnN0cmVhbSBtaWNlLiAgWW91IHNob3VsZCBjaGFuZ2UgdGhpcyB2YWx1ZSBmcm9tIHRoZSBkZWZhdWx0IG9ubHkgaWYgeW91IGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgeW91ciB1c2VycyB3aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBhbmQgT1MgY29uZmlndXJhdGlvbiBhcyB5b3VyIGN1cnJlbnQgbWFjaGluZS5gKTt2YXIgcj16eShlKTtyLmN5PXQsdC5fcHJpdmF0ZS5yZW5kZXJlcj1uZXcgbihyKSx0aGlzLm5vdGlmeShgaW5pdGApfX0sZGVzdHJveVJlbmRlcmVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLm5vdGlmeShgZGVzdHJveWApO3ZhciB0PWUuY29udGFpbmVyKCk7aWYodClmb3IodC5fY3lyZWc9bnVsbDt0LmNoaWxkTm9kZXMubGVuZ3RoPjA7KXQucmVtb3ZlQ2hpbGQodC5jaGlsZE5vZGVzWzBdKTtlLl9wcml2YXRlLnJlbmRlcmVyPW51bGwsZS5tdXRhYmxlRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuX3ByaXZhdGU7dC5yc2NyYXRjaD17fSx0LnJzdHlsZT17fSx0LmFuaW1hdGlvbi5jdXJyZW50PVtdLHQuYW5pbWF0aW9uLnF1ZXVlPVtdfSl9LG9uUmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKGByZW5kZXJgLGUpfSxvZmZSZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub2ZmKGByZW5kZXJgLGUpfX07QnkuaW52YWxpZGF0ZURpbWVuc2lvbnM9QnkucmVzaXplO3ZhciBWeT17Y29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiBaKGUpP3RoaXMuJChlKTpOYyhlKT9lLmNvbGxlY3Rpb24oKTpPYyhlKT8odHx8PXt9LG5ldyB2eSh0aGlzLGUsdC51bmlxdWUsdC5yZW1vdmVkKSk6bmV3IHZ5KHRoaXMpfSxub2RlczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNOb2RlKCl9KTtyZXR1cm4gZT90LmZpbHRlcihlKTp0fSxlZGdlczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNFZGdlKCl9KTtyZXR1cm4gZT90LmZpbHRlcihlKTp0fSwkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGUuZWxlbWVudHM7cmV0dXJuIGU/dC5maWx0ZXIoZSk6dC5zcGF3blNlbGYoKX0sbXV0YWJsZUVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZWxlbWVudHN9fTtWeS5lbGVtZW50cz1WeS5maWx0ZXI9VnkuJDt2YXIgSHk9e30sVXk9YHRgLFd5PWBmYDtIeS5hcHBseT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPXQuX3ByaXZhdGUuY3kuY29sbGVjdGlvbigpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXSxhPXQuZ2V0Q29udGV4dE1ldGEoaSk7aWYoIWEuZW1wdHkpe3ZhciBvPXQuZ2V0Q29udGV4dFN0eWxlKGEpLHM9dC5hcHBseUNvbnRleHRTdHlsZShhLG8saSk7aS5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlP3QudXBkYXRlVHJhbnNpdGlvbnMoaSxzLmRpZmZQcm9wcyk6aS5fcHJpdmF0ZS5hcHBsaWVkSW5pdFN0eWxlPSEwLHQudXBkYXRlU3R5bGVIaW50cyhpKSYmbi5wdXNoKGkpfX1yZXR1cm4gbn0sSHkuZ2V0UHJvcGVydGllc0RpZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9bi5fcHJpdmF0ZS5wcm9wRGlmZnM9bi5fcHJpdmF0ZS5wcm9wRGlmZnN8fHt9LGk9ZStgLWArdCxhPXJbaV07aWYoYSlyZXR1cm4gYTtmb3IodmFyIG89W10scz17fSxjPTA7YzxuLmxlbmd0aDtjKyspe3ZhciBsPW5bY10sdT1lW2NdPT09VXksZD10W2NdPT09VXksZj11IT09ZCxwPWwubWFwcGVkUHJvcGVydGllcy5sZW5ndGg+MDtpZihmfHxkJiZwKXt2YXIgbT12b2lkIDA7ZiYmcHx8Zj9tPWwucHJvcGVydGllczpwJiYobT1sLm1hcHBlZFByb3BlcnRpZXMpO2Zvcih2YXIgaD0wO2g8bS5sZW5ndGg7aCsrKXtmb3IodmFyIGc9bVtoXSxfPWcubmFtZSx2PSExLHk9YysxO3k8bi5sZW5ndGg7eSsrKXt2YXIgYj1uW3ldO2lmKHRbeV09PT1VeSYmKHY9Yi5wcm9wZXJ0aWVzW2cubmFtZV0hPW51bGwsdikpYnJlYWt9IXNbX10mJiF2JiYoc1tfXT0hMCxvLnB1c2goXykpfX19cmV0dXJuIHJbaV09byxvfSxIeS5nZXRDb250ZXh0TWV0YT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPWBgLHIsaT1lLl9wcml2YXRlLnN0eWxlQ3h0S2V5fHxgYCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV07by5zZWxlY3RvciYmby5zZWxlY3Rvci5tYXRjaGVzKGUpP24rPVV5Om4rPVd5fXJldHVybiByPXQuZ2V0UHJvcGVydGllc0RpZmYoaSxuKSxlLl9wcml2YXRlLnN0eWxlQ3h0S2V5PW4se2tleTpuLGRpZmZQcm9wTmFtZXM6cixlbXB0eTpyLmxlbmd0aD09PTB9fSxIeS5nZXRDb250ZXh0U3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXksbj10aGlzLHI9dGhpcy5fcHJpdmF0ZS5jb250ZXh0U3R5bGVzPXRoaXMuX3ByaXZhdGUuY29udGV4dFN0eWxlc3x8e307aWYoclt0XSlyZXR1cm4gclt0XTtmb3IodmFyIGk9e19wcml2YXRlOntrZXk6dH19LGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTtpZih0W2FdPT09VXkpZm9yKHZhciBzPTA7czxvLnByb3BlcnRpZXMubGVuZ3RoO3MrKyl7dmFyIGM9by5wcm9wZXJ0aWVzW3NdO2lbYy5uYW1lXT1jfX1yZXR1cm4gclt0XT1pLGl9LEh5LmFwcGx5Q29udGV4dFN0eWxlPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9dGhpcyxpPWUuZGlmZlByb3BOYW1lcyxhPXt9LG89ci50eXBlcyxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBjPWlbc10sbD10W2NdLHU9bi5wc3R5bGUoYyk7aWYoIWwpe2lmKHUpbD11LmJ5cGFzcz97bmFtZTpjLGRlbGV0ZUJ5cGFzc2VkOiEwfTp7bmFtZTpjLGRlbGV0ZTohMH07ZWxzZSBjb250aW51ZX1pZih1IT09bCl7aWYobC5tYXBwZWQ9PT1vLmZuJiZ1IT1udWxsJiZ1Lm1hcHBpbmchPW51bGwmJnUubWFwcGluZy52YWx1ZT09PWwudmFsdWUpe3ZhciBkPXUubWFwcGluZztpZigoZC5mblZhbHVlPWwudmFsdWUobikpPT09ZC5wcmV2Rm5WYWx1ZSljb250aW51ZX12YXIgZj1hW2NdPXtwcmV2OnV9O3IuYXBwbHlQYXJzZWRQcm9wZXJ0eShuLGwpLGYubmV4dD1uLnBzdHlsZShjKSxmLm5leHQmJmYubmV4dC5ieXBhc3MmJihmLm5leHQ9Zi5uZXh0LmJ5cGFzc2VkKX19cmV0dXJue2RpZmZQcm9wczphfX0sSHkudXBkYXRlU3R5bGVIaW50cz1mdW5jdGlvbihlKXt2YXIgdD1lLl9wcml2YXRlLG49dGhpcyxyPW4ucHJvcGVydHlHcm91cE5hbWVzLGk9bi5wcm9wZXJ0eUdyb3VwS2V5cyxhPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbi5nZXRQcm9wZXJ0aWVzSGFzaChlLHQscil9LG89dC5zdHlsZUtleTtpZihlLnJlbW92ZWQoKSlyZXR1cm4hMTt2YXIgcz10Lmdyb3VwPT09YG5vZGVzYCxjPWUuX3ByaXZhdGUuc3R5bGU7cj1PYmplY3Qua2V5cyhjKTtmb3IodmFyIGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIHU9aVtsXTt0LnN0eWxlS2V5c1t1XT1bdXUsZnVdfWZvcih2YXIgZD1mdW5jdGlvbihlLG4pe3JldHVybiB0LnN0eWxlS2V5c1tuXVswXT1tdShlLHQuc3R5bGVLZXlzW25dWzBdKX0sZj1mdW5jdGlvbihlLG4pe3JldHVybiB0LnN0eWxlS2V5c1tuXVsxXT1odShlLHQuc3R5bGVLZXlzW25dWzFdKX0scD1mdW5jdGlvbihlLHQpe2QoZSx0KSxmKGUsdCl9LG09ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZS5jaGFyQ29kZUF0KG4pO2Qocix0KSxmKHIsdCl9fSxoPTJlOSxnPWZ1bmN0aW9uKGUpe3JldHVybi0xMjg8ZSYmZTwxMjgmJk1hdGguZmxvb3IoZSkhPT1lP2gtKGUqMTAyNHwwKTplfSxfPTA7XzxyLmxlbmd0aDtfKyspe3ZhciB2PXJbX10seT1jW3ZdO2lmKHkhPW51bGwpe3ZhciBiPXRoaXMucHJvcGVydGllc1t2XSx4PWIudHlwZSxTPWIuZ3JvdXBLZXksQz12b2lkIDA7Yi5oYXNoT3ZlcnJpZGU9PW51bGw/eS5wZlZhbHVlIT1udWxsJiYoQz15LnBmVmFsdWUpOkM9Yi5oYXNoT3ZlcnJpZGUoZSx5KTt2YXIgdz1iLmVudW1zPT1udWxsP3kudmFsdWU6bnVsbCxUPUMhPW51bGwsRT1UfHx3IT1udWxsLEQ9eS51bml0czt4Lm51bWJlciYmRSYmIXgubXVsdGlwbGU/KHAoZyhUP0M6dyksUyksIVQmJkQhPW51bGwmJm0oRCxTKSk6bSh5LnN0clZhbHVlLFMpfX1mb3IodmFyIE89W3V1LGZ1XSxrPTA7azxpLmxlbmd0aDtrKyspe3ZhciBBPWlba10saj10LnN0eWxlS2V5c1tBXTtPWzBdPW11KGpbMF0sT1swXSksT1sxXT1odShqWzFdLE9bMV0pfXQuc3R5bGVLZXk9Z3UoT1swXSxPWzFdKTt2YXIgTT10LnN0eWxlS2V5czt0LmxhYmVsRGltc0tleT1fdShNLmxhYmVsRGltZW5zaW9ucyk7dmFyIE49YShlLFtgbGFiZWxgXSxNLmxhYmVsRGltZW5zaW9ucyk7aWYodC5sYWJlbEtleT1fdShOKSx0LmxhYmVsU3R5bGVLZXk9X3UodnUoTS5jb21tb25MYWJlbCxOKSksIXMpe3ZhciBQPWEoZSxbYHNvdXJjZS1sYWJlbGBdLE0ubGFiZWxEaW1lbnNpb25zKTt0LnNvdXJjZUxhYmVsS2V5PV91KFApLHQuc291cmNlTGFiZWxTdHlsZUtleT1fdSh2dShNLmNvbW1vbkxhYmVsLFApKTt2YXIgRj1hKGUsW2B0YXJnZXQtbGFiZWxgXSxNLmxhYmVsRGltZW5zaW9ucyk7dC50YXJnZXRMYWJlbEtleT1fdShGKSx0LnRhcmdldExhYmVsU3R5bGVLZXk9X3UodnUoTS5jb21tb25MYWJlbCxGKSl9aWYocyl7dmFyIEk9dC5zdHlsZUtleXMsTD1JLm5vZGVCb2R5LFI9SS5ub2RlQm9yZGVyLHo9SS5ub2RlT3V0bGluZSxCPUkuYmFja2dyb3VuZEltYWdlLFY9SS5jb21wb3VuZCxIPUkucGllLFU9SS5zdHJpcGU7dC5ub2RlS2V5PV91KFtMLFIseixCLFYsSCxVXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9KS5yZWR1Y2UodnUsW3V1LGZ1XSkpLHQuaGFzUGllPUghPW51bGwmJkhbMF0hPT11dSYmSFsxXSE9PWZ1LHQuaGFzU3RyaXBlPVUhPW51bGwmJlVbMF0hPT11dSYmVVsxXSE9PWZ1fXJldHVybiBvIT09dC5zdHlsZUtleX0sSHkuY2xlYXJTdHlsZUhpbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX3ByaXZhdGU7dC5zdHlsZUN4dEtleT1gYCx0LnN0eWxlS2V5cz17fSx0LnN0eWxlS2V5PW51bGwsdC5sYWJlbEtleT1udWxsLHQubGFiZWxTdHlsZUtleT1udWxsLHQuc291cmNlTGFiZWxLZXk9bnVsbCx0LnNvdXJjZUxhYmVsU3R5bGVLZXk9bnVsbCx0LnRhcmdldExhYmVsS2V5PW51bGwsdC50YXJnZXRMYWJlbFN0eWxlS2V5PW51bGwsdC5ub2RlS2V5PW51bGwsdC5oYXNQaWU9bnVsbCx0Lmhhc1N0cmlwZT1udWxsfSxIeS5hcHBseVBhcnNlZFByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPXQsaT1lLl9wcml2YXRlLnN0eWxlLGEsbz1uLnR5cGVzLHM9bi5wcm9wZXJ0aWVzW3IubmFtZV0udHlwZSxjPXIuYnlwYXNzLGw9aVtyLm5hbWVdLHU9bCYmbC5ieXBhc3MsZD1lLl9wcml2YXRlLGY9YG1hcHBpbmdgLHA9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDplLnBmVmFsdWU9PW51bGw/ZS52YWx1ZTplLnBmVmFsdWV9LG09ZnVuY3Rpb24oKXt2YXIgdD1wKGwpLGk9cChyKTtuLmNoZWNrVHJpZ2dlcnMoZSxyLm5hbWUsdCxpKX07aWYodC5uYW1lPT09YGN1cnZlLXN0eWxlYCYmZS5pc0VkZ2UoKSYmKHQudmFsdWUhPT1gYmV6aWVyYCYmZS5pc0xvb3AoKXx8dC52YWx1ZT09PWBoYXlzdGFja2AmJihlLnNvdXJjZSgpLmlzUGFyZW50KCl8fGUudGFyZ2V0KCkuaXNQYXJlbnQoKSkpJiYocj10PXRoaXMucGFyc2UodC5uYW1lLGBiZXppZXJgLGMpKSxyLmRlbGV0ZSlyZXR1cm4gaVtyLm5hbWVdPXZvaWQgMCxtKCksITA7aWYoci5kZWxldGVCeXBhc3NlZClyZXR1cm4gbD9sLmJ5cGFzcz8obC5ieXBhc3NlZD12b2lkIDAsbSgpLCEwKTohMToobSgpLCEwKTtpZihyLmRlbGV0ZUJ5cGFzcylyZXR1cm4gbD9sLmJ5cGFzcz8oaVtyLm5hbWVdPWwuYnlwYXNzZWQsbSgpLCEwKTohMToobSgpLCEwKTt2YXIgaD1mdW5jdGlvbigpe0l1KCJEbyBub3QgYXNzaWduIG1hcHBpbmdzIHRvIGVsZW1lbnRzIHdpdGhvdXQgY29ycmVzcG9uZGluZyBkYXRhIChpLmUuIGVsZSBgIitlLmlkKCkrImAgaGFzIG5vIG1hcHBpbmcgZm9yIHByb3BlcnR5IGAiK3IubmFtZSsiYCB3aXRoIGRhdGEgZmllbGQgYCIrci5maWVsZCsiYCk7IHRyeSBhIGBbIityLmZpZWxkKyJdYCBzZWxlY3RvciB0byBsaW1pdCBzY29wZSB0byBlbGVtZW50cyB3aXRoIGAiK3IuZmllbGQrImAgZGVmaW5lZCIpfTtzd2l0Y2goci5tYXBwZWQpe2Nhc2Ugby5tYXBEYXRhOmZvcih2YXIgZz1yLmZpZWxkLnNwbGl0KGAuYCksXz1kLmRhdGEsdj0wO3Y8Zy5sZW5ndGgmJl87disrKXt2YXIgeT1nW3ZdO189X1t5XX1pZihfPT1udWxsKXJldHVybiBoKCksITE7dmFyIGI7aWYoUShfKSl7dmFyIHg9ci5maWVsZE1heC1yLmZpZWxkTWluO2I9eD09PTA/MDooXy1yLmZpZWxkTWluKS94fWVsc2UgcmV0dXJuIEl1KCJEbyBub3QgdXNlIGNvbnRpbnVvdXMgbWFwcGVycyB3aXRob3V0IHNwZWNpZnlpbmcgbnVtZXJpYyBkYXRhIChpLmUuIGAiK3IuZmllbGQrYDogYCtfKyJgIGZvciBgIitlLmlkKCkrImAgaXMgbm9uLW51bWVyaWMpIiksITE7aWYoYjwwP2I9MDpiPjEmJihiPTEpLHMuY29sb3Ipe3ZhciBTPXIudmFsdWVNaW5bMF0sQz1yLnZhbHVlTWF4WzBdLHc9ci52YWx1ZU1pblsxXSxUPXIudmFsdWVNYXhbMV0sRT1yLnZhbHVlTWluWzJdLEQ9ci52YWx1ZU1heFsyXSxPPXIudmFsdWVNaW5bM109PW51bGw/MTpyLnZhbHVlTWluWzNdLGs9ci52YWx1ZU1heFszXT09bnVsbD8xOnIudmFsdWVNYXhbM10sQT1bTWF0aC5yb3VuZChTKyhDLVMpKmIpLE1hdGgucm91bmQodysoVC13KSpiKSxNYXRoLnJvdW5kKEUrKEQtRSkqYiksTWF0aC5yb3VuZChPKyhrLU8pKmIpXTthPXtieXBhc3M6ci5ieXBhc3MsbmFtZTpyLm5hbWUsdmFsdWU6QSxzdHJWYWx1ZTpgcmdiKGArQVswXStgLCBgK0FbMV0rYCwgYCtBWzJdK2ApYH19ZWxzZSBpZihzLm51bWJlcil7dmFyIGo9ci52YWx1ZU1pbisoci52YWx1ZU1heC1yLnZhbHVlTWluKSpiO2E9dGhpcy5wYXJzZShyLm5hbWUsaixyLmJ5cGFzcyxmKX1lbHNlIHJldHVybiExO2lmKCFhKXJldHVybiBoKCksITE7YS5tYXBwaW5nPXIscj1hO2JyZWFrO2Nhc2Ugby5kYXRhOmZvcih2YXIgTT1yLmZpZWxkLnNwbGl0KGAuYCksTj1kLmRhdGEsUD0wO1A8TS5sZW5ndGgmJk47UCsrKXt2YXIgRj1NW1BdO049TltGXX1pZihOIT1udWxsJiYoYT10aGlzLnBhcnNlKHIubmFtZSxOLHIuYnlwYXNzLGYpKSwhYSlyZXR1cm4gaCgpLCExO2EubWFwcGluZz1yLHI9YTticmVhaztjYXNlIG8uZm46dmFyIEk9ci52YWx1ZSxMPXIuZm5WYWx1ZT09bnVsbD9JKGUpOnIuZm5WYWx1ZTtpZihyLnByZXZGblZhbHVlPUwsTD09bnVsbClyZXR1cm4gSXUoIkN1c3RvbSBmdW5jdGlvbiBtYXBwZXJzIG1heSBub3QgcmV0dXJuIG51bGwgKGkuZS4gYCIrci5uYW1lKyJgIGZvciBlbGUgYCIrZS5pZCgpKyJgIGlzIG51bGwpIiksITE7aWYoYT10aGlzLnBhcnNlKHIubmFtZSxMLHIuYnlwYXNzLGYpLCFhKXJldHVybiBJdSgiQ3VzdG9tIGZ1bmN0aW9uIG1hcHBlcnMgbWF5IG5vdCByZXR1cm4gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0eSB0eXBlIChpLmUuIGAiK3IubmFtZSsiYCBmb3IgZWxlIGAiK2UuaWQoKSsiYCBpcyBpbnZhbGlkKSIpLCExO2EubWFwcGluZz1SdShyKSxyPWE7YnJlYWs7Y2FzZSB2b2lkIDA6YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1yZXR1cm4gYz8odT9yLmJ5cGFzc2VkPWwuYnlwYXNzZWQ6ci5ieXBhc3NlZD1sLGlbci5uYW1lXT1yKTp1P2wuYnlwYXNzZWQ9cjppW3IubmFtZV09cixtKCksITB9LEh5LmNsZWFuRWxlbWVudHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtpZih0aGlzLmNsZWFyU3R5bGVIaW50cyhyKSxyLmRpcnR5Q29tcG91bmRCb3VuZHNDYWNoZSgpLHIuZGlydHlCb3VuZGluZ0JveENhY2hlKCksIXQpci5fcHJpdmF0ZS5zdHlsZT17fTtlbHNlIGZvcih2YXIgaT1yLl9wcml2YXRlLnN0eWxlLGE9T2JqZWN0LmtleXMoaSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGM9aVtzXTtjIT1udWxsJiYoYy5ieXBhc3M/Yy5ieXBhc3NlZD1udWxsOmlbc109bnVsbCl9fX0sSHkudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fcHJpdmF0ZS5jeS5tdXRhYmxlRWxlbWVudHMoKS51cGRhdGVTdHlsZSgpfSxIeS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1lLl9wcml2YXRlLGk9ZS5wc3R5bGUoYHRyYW5zaXRpb24tcHJvcGVydHlgKS52YWx1ZSxhPWUucHN0eWxlKGB0cmFuc2l0aW9uLWR1cmF0aW9uYCkucGZWYWx1ZSxvPWUucHN0eWxlKGB0cmFuc2l0aW9uLWRlbGF5YCkucGZWYWx1ZTtpZihpLmxlbmd0aD4wJiZhPjApe2Zvcih2YXIgcz17fSxjPSExLGw9MDtsPGkubGVuZ3RoO2wrKyl7dmFyIHU9aVtsXSxkPWUucHN0eWxlKHUpLGY9dFt1XTtpZihmKXt2YXIgcD1mLnByZXYsbT1mLm5leHQ9PW51bGw/ZDpmLm5leHQsaD0hMSxnPXZvaWQgMCxfPTFlLTY7cCYmKFEocC5wZlZhbHVlKSYmUShtLnBmVmFsdWUpPyhoPW0ucGZWYWx1ZS1wLnBmVmFsdWUsZz1wLnBmVmFsdWUrXypoKTpRKHAudmFsdWUpJiZRKG0udmFsdWUpPyhoPW0udmFsdWUtcC52YWx1ZSxnPXAudmFsdWUrXypoKTpPYyhwLnZhbHVlKSYmT2MobS52YWx1ZSkmJihoPXAudmFsdWVbMF0hPT1tLnZhbHVlWzBdfHxwLnZhbHVlWzFdIT09bS52YWx1ZVsxXXx8cC52YWx1ZVsyXSE9PW0udmFsdWVbMl0sZz1wLnN0clZhbHVlKSxoJiYoc1t1XT1tLnN0clZhbHVlLHRoaXMuYXBwbHlCeXBhc3MoZSx1LGcpLGM9ITApKX19aWYoIWMpcmV0dXJuO3IudHJhbnNpdGlvbmluZz0hMCxuZXcgZG0oZnVuY3Rpb24odCl7bz4wP2UuZGVsYXlBbmltYXRpb24obykucGxheSgpLnByb21pc2UoKS50aGVuKHQpOnQoKX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZS5hbmltYXRpb24oe3N0eWxlOnMsZHVyYXRpb246YSxlYXNpbmc6ZS5wc3R5bGUoYHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uYCkudmFsdWUscXVldWU6ITF9KS5wbGF5KCkucHJvbWlzZSgpfSkudGhlbihmdW5jdGlvbigpe24ucmVtb3ZlQnlwYXNzZXMoZSxpKSxlLmVtaXRBbmROb3RpZnkoYHN0eWxlYCksci50cmFuc2l0aW9uaW5nPSExfSl9ZWxzZSByLnRyYW5zaXRpb25pbmcmJj0odGhpcy5yZW1vdmVCeXBhc3NlcyhlLGkpLGUuZW1pdEFuZE5vdGlmeShgc3R5bGVgKSwhMSl9LEh5LmNoZWNrVHJpZ2dlcj1mdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIG89dGhpcy5wcm9wZXJ0aWVzW3RdLHM9aShvKTtlLnJlbW92ZWQoKXx8cyE9bnVsbCYmcyhuLHIsZSkmJmEobyl9LEh5LmNoZWNrWk9yZGVyVHJpZ2dlcj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzO3RoaXMuY2hlY2tUcmlnZ2VyKGUsdCxuLHIsZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpZ2dlcnNaT3JkZXJ9LGZ1bmN0aW9uKCl7aS5fcHJpdmF0ZS5jeS5ub3RpZnkoYHpvcmRlcmAsZSl9KX0sSHkuY2hlY2tCb3VuZHNUcmlnZ2VyPWZ1bmN0aW9uKGUsdCxuLHIpe3RoaXMuY2hlY2tUcmlnZ2VyKGUsdCxuLHIsZnVuY3Rpb24oZSl7cmV0dXJuIGUudHJpZ2dlcnNCb3VuZHN9LGZ1bmN0aW9uKHQpe2UuZGlydHlDb21wb3VuZEJvdW5kc0NhY2hlKCksZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pfSxIeS5jaGVja0Nvbm5lY3RlZEVkZ2VzQm91bmRzVHJpZ2dlcj1mdW5jdGlvbihlLHQsbixyKXt0aGlzLmNoZWNrVHJpZ2dlcihlLHQsbixyLGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaWdnZXJzQm91bmRzT2ZDb25uZWN0ZWRFZGdlc30sZnVuY3Rpb24odCl7ZS5jb25uZWN0ZWRFZGdlcygpLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5kaXJ0eUJvdW5kaW5nQm94Q2FjaGUoKX0pfSl9LEh5LmNoZWNrUGFyYWxsZWxFZGdlc0JvdW5kc1RyaWdnZXI9ZnVuY3Rpb24oZSx0LG4scil7dGhpcy5jaGVja1RyaWdnZXIoZSx0LG4scixmdW5jdGlvbihlKXtyZXR1cm4gZS50cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxFZGdlc30sZnVuY3Rpb24odCl7ZS5wYXJhbGxlbEVkZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmRpcnR5Qm91bmRpbmdCb3hDYWNoZSgpfSl9KX0sSHkuY2hlY2tUcmlnZ2Vycz1mdW5jdGlvbihlLHQsbixyKXtlLmRpcnR5U3R5bGVDYWNoZSgpLHRoaXMuY2hlY2taT3JkZXJUcmlnZ2VyKGUsdCxuLHIpLHRoaXMuY2hlY2tCb3VuZHNUcmlnZ2VyKGUsdCxuLHIpLHRoaXMuY2hlY2tDb25uZWN0ZWRFZGdlc0JvdW5kc1RyaWdnZXIoZSx0LG4sciksdGhpcy5jaGVja1BhcmFsbGVsRWRnZXNCb3VuZHNUcmlnZ2VyKGUsdCxuLHIpfTt2YXIgR3k9e307R3kuYXBwbHlCeXBhc3M9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcyxhPVtdLG89ITA7aWYodD09PWAqYHx8dD09PWAqKmApe2lmKG4hPT12b2lkIDApZm9yKHZhciBzPTA7czxpLnByb3BlcnRpZXMubGVuZ3RoO3MrKyl7dmFyIGM9aS5wcm9wZXJ0aWVzW3NdLm5hbWUsbD10aGlzLnBhcnNlKGMsbiwhMCk7bCYmYS5wdXNoKGwpfX1lbHNlIGlmKFoodCkpe3ZhciB1PXRoaXMucGFyc2UodCxuLCEwKTt1JiZhLnB1c2godSl9ZWxzZSBpZihrYyh0KSl7dmFyIGQ9dDtyPW47Zm9yKHZhciBmPU9iamVjdC5rZXlzKGQpLHA9MDtwPGYubGVuZ3RoO3ArKyl7dmFyIG09ZltwXSxoPWRbbV07aWYoaD09PXZvaWQgMCYmKGg9ZFtLYyhtKV0pLGghPT12b2lkIDApe3ZhciBnPXRoaXMucGFyc2UobSxoLCEwKTtnJiZhLnB1c2goZyl9fX1lbHNlIHJldHVybiExO2lmKGEubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIF89ITEsdj0wO3Y8ZS5sZW5ndGg7disrKXtmb3IodmFyIHk9ZVt2XSxiPXt9LHg9dm9pZCAwLFM9MDtTPGEubGVuZ3RoO1MrKyl7dmFyIEM9YVtTXTtpZihyKXt2YXIgdz15LnBzdHlsZShDLm5hbWUpO3g9YltDLm5hbWVdPXtwcmV2Ond9fV89dGhpcy5hcHBseVBhcnNlZFByb3BlcnR5KHksUnUoQykpfHxfLHImJih4Lm5leHQ9eS5wc3R5bGUoQy5uYW1lKSl9XyYmdGhpcy51cGRhdGVTdHlsZUhpbnRzKHkpLHImJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoeSxiLG8pfXJldHVybiBffSxHeS5vdmVycmlkZUJ5cGFzcz1mdW5jdGlvbihlLHQsbil7dD1HYyh0KTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXSxhPWkuX3ByaXZhdGUuc3R5bGVbdF0sbz10aGlzLnByb3BlcnRpZXNbdF0udHlwZSxzPW8uY29sb3IsYz1vLm11dGlwbGUsbD1hP2EucGZWYWx1ZT09bnVsbD9hLnZhbHVlOmEucGZWYWx1ZTpudWxsOyFhfHwhYS5ieXBhc3M/dGhpcy5hcHBseUJ5cGFzcyhpLHQsbik6KGEudmFsdWU9bixhLnBmVmFsdWUhPW51bGwmJihhLnBmVmFsdWU9biksYS5zdHJWYWx1ZT1zP2ByZ2IoYCtuLmpvaW4oYCxgKStgKWA6Yz9uLmpvaW4oYCBgKTpgYCtuLHRoaXMudXBkYXRlU3R5bGVIaW50cyhpKSksdGhpcy5jaGVja1RyaWdnZXJzKGksdCxsLG4pfX0sR3kucmVtb3ZlQWxsQnlwYXNzZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZW1vdmVCeXBhc3NlcyhlLHRoaXMucHJvcGVydHlOYW1lcyx0KX0sR3kucmVtb3ZlQnlwYXNzZXM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0hMCxpPTA7aTxlLmxlbmd0aDtpKyspe2Zvcih2YXIgYT1lW2ldLG89e30scz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgYz10W3NdLGw9dGhpcy5wcm9wZXJ0aWVzW2NdLHU9YS5wc3R5bGUobC5uYW1lKTtpZih1JiZ1LmJ5cGFzcyl7dmFyIGQ9dGhpcy5wYXJzZShjLGBgLCEwKSxmPW9bbC5uYW1lXT17cHJldjp1fTt0aGlzLmFwcGx5UGFyc2VkUHJvcGVydHkoYSxkKSxmLm5leHQ9YS5wc3R5bGUobC5uYW1lKX19dGhpcy51cGRhdGVTdHlsZUhpbnRzKGEpLG4mJnRoaXMudXBkYXRlVHJhbnNpdGlvbnMoYSxvLHIpfX07dmFyIEt5PXt9O0t5LmdldEVtU2l6ZUluUGl4ZWxzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250YWluZXJDc3MoYGZvbnQtc2l6ZWApO3JldHVybiBlPT1udWxsPzE6cGFyc2VGbG9hdChlKX0sS3kuY29udGFpbmVyQ3NzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGUuY3ksbj10LmNvbnRhaW5lcigpLHI9dC53aW5kb3coKTtpZihyJiZuJiZyLmdldENvbXB1dGVkU3R5bGUpcmV0dXJuIHIuZ2V0Q29tcHV0ZWRTdHlsZShuKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfTt2YXIgcXk9e307cXkuZ2V0UmVuZGVyZWRTdHlsZT1mdW5jdGlvbihlLHQpe3JldHVybiB0P3RoaXMuZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKGUsdCwhMCk6dGhpcy5nZXRSYXdTdHlsZShlLCEwKX0scXkuZ2V0UmF3U3R5bGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKGU9ZVswXSxlKXtmb3IodmFyIHI9e30saT0wO2k8bi5wcm9wZXJ0aWVzLmxlbmd0aDtpKyspe3ZhciBhPW4ucHJvcGVydGllc1tpXSxvPW4uZ2V0U3R5bGVQcm9wZXJ0eVZhbHVlKGUsYS5uYW1lLHQpO28hPW51bGwmJihyW2EubmFtZV09byxyW0tjKGEubmFtZSldPW8pfXJldHVybiByfX0scXkuZ2V0SW5kZXhlZFN0eWxlPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlLnBzdHlsZSh0KVtuXVtyXT8/ZS5jeSgpLnN0eWxlKCkuZ2V0RGVmYXVsdFByb3BlcnR5KHQpW25dWzBdfSxxeS5nZXRTdHlsZVByb3BlcnR5VmFsdWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7aWYoZT1lWzBdLGUpe3ZhciBpPXIucHJvcGVydGllc1t0XTtpLmFsaWFzJiYoaT1pLnBvaW50c1RvKTt2YXIgYT1pLnR5cGUsbz1lLnBzdHlsZShpLm5hbWUpO2lmKG8pe3ZhciBzPW8udmFsdWUsYz1vLnVuaXRzLGw9by5zdHJWYWx1ZTtpZihuJiZhLm51bWJlciYmcyE9bnVsbCYmUShzKSl7dmFyIHU9ZS5jeSgpLnpvb20oKSxkPWZ1bmN0aW9uKGUpe3JldHVybiBlKnV9LGY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZChlKSt0fSxwPU9jKHMpO3JldHVybihwP2MuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9KTpjIT1udWxsKT9wP3MubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGYoZSxjW3RdKX0pLmpvaW4oYCBgKTpmKHMsYyk6cD9zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gWihlKT9lOmBgK2QoZSl9KS5qb2luKGAgYCk6YGArZChzKX1pZihsIT1udWxsKXJldHVybiBsfXJldHVybiBudWxsfX0scXkuZ2V0QW5pbWF0aW9uU3RhcnRTdHlsZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj17fSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl0ubmFtZSxhPWUucHN0eWxlKGkpO2EhPT12b2lkIDAmJihhPWtjKGEpP3RoaXMucGFyc2UoaSxhLnN0clZhbHVlKTp0aGlzLnBhcnNlKGksYSkpLGEmJihuW2ldPWEpfXJldHVybiBufSxxeS5nZXRQcm9wc0xpc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPVtdLHI9ZSxpPXQucHJvcGVydGllcztpZihyKWZvcih2YXIgYT1PYmplY3Qua2V5cyhyKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb10sYz1yW3NdLGw9aVtzXXx8aVtHYyhzKV0sdT10aGlzLnBhcnNlKGwubmFtZSxjKTt1JiZuLnB1c2godSl9cmV0dXJuIG59LHF5LmdldE5vbkRlZmF1bHRQcm9wZXJ0aWVzSGFzaD1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW4uc2xpY2UoKSxpLGEsbyxzLGM9MCxsO2M8dC5sZW5ndGg7YysrKWlmKGk9dFtjXSxhPWUucHN0eWxlKGksITEpLGEhPW51bGwpe2lmKGEucGZWYWx1ZSE9bnVsbClyWzBdPW11KHMsclswXSksclsxXT1odShzLHJbMV0pO2Vsc2UgZm9yKG89YS5zdHJWYWx1ZSxsPTA7bDxvLmxlbmd0aDtsKyspcz1vLmNoYXJDb2RlQXQobCksclswXT1tdShzLHJbMF0pLHJbMV09aHUocyxyWzFdKX1yZXR1cm4gcn0scXkuZ2V0UHJvcGVydGllc0hhc2g9cXkuZ2V0Tm9uRGVmYXVsdFByb3BlcnRpZXNIYXNoO3ZhciBKeT17fTtKeS5hcHBlbmRGcm9tSnNvbj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0saT1yLnNlbGVjdG9yLGE9ci5zdHlsZXx8ci5jc3Msbz1PYmplY3Qua2V5cyhhKTt0LnNlbGVjdG9yKGkpO2Zvcih2YXIgcz0wO3M8by5sZW5ndGg7cysrKXt2YXIgYz1vW3NdLGw9YVtjXTt0LmNzcyhjLGwpfX1yZXR1cm4gdH0sSnkuZnJvbUpzb249ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gdC5yZXNldFRvRGVmYXVsdCgpLHQuYXBwZW5kRnJvbUpzb24oZSksdH0sSnkuanNvbj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuZGVmYXVsdExlbmd0aDt0PHRoaXMubGVuZ3RoO3QrKyl7Zm9yKHZhciBuPXRoaXNbdF0scj1uLnNlbGVjdG9yLGk9bi5wcm9wZXJ0aWVzLGE9e30sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dO2Fbcy5uYW1lXT1zLnN0clZhbHVlfWUucHVzaCh7c2VsZWN0b3I6cj9yLnRvU3RyaW5nKCk6YGNvcmVgLHN0eWxlOmF9KX1yZXR1cm4gZX07dmFyIFl5PXt9O1l5LmFwcGVuZEZyb21TdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMscj1gYCtlLGksYSxvO3I9ci5yZXBsYWNlKC9bL11bKl0oXHN8LikrP1sqXVsvXS9nLGBgKTtmdW5jdGlvbiBzKCl7cj1yLmxlbmd0aD5pLmxlbmd0aD9yLnN1YnN0cihpLmxlbmd0aCk6YGB9ZnVuY3Rpb24gYygpe2E9YS5sZW5ndGg+by5sZW5ndGg/YS5zdWJzdHIoby5sZW5ndGgpOmBgfWZvcig7IXIubWF0Y2goL15ccyokLyk7KXt2YXIgbD1yLm1hdGNoKC9eXHMqKCg/Oi58XHMpKz8pXHMqXHsoKD86LnxccykrPylcfS8pO2lmKCFsKXtJdShgSGFsdGluZyBzdHlsZXNoZWV0IHBhcnNpbmc6IFN0cmluZyBzdHlsZXNoZWV0IGNvbnRhaW5zIG1vcmUgdG8gcGFyc2UgYnV0IG5vIHNlbGVjdG9yIGFuZCBibG9jayBmb3VuZCBpbjogYCtyKTticmVha31pPWxbMF07dmFyIHU9bFsxXTtpZih1IT09YGNvcmVgJiZuZXcgUF8odSkuaW52YWxpZClJdShgU2tpcHBpbmcgcGFyc2luZyBvZiBibG9jazogSW52YWxpZCBzZWxlY3RvciBmb3VuZCBpbiBzdHJpbmcgc3R5bGVzaGVldDogYCt1KSxzKCk7ZWxzZXt2YXIgZD1sWzJdLGY9ITE7YT1kO2Zvcih2YXIgcD1bXTshYS5tYXRjaCgvXlxzKiQvKTspe3ZhciBtPWEubWF0Y2goL15ccyooLis/KVxzKjpccyooLis/KSg/OlxzKjt8XHMqJCkvKTtpZighbSl7SXUoYFNraXBwaW5nIHBhcnNpbmcgb2YgYmxvY2s6IEludmFsaWQgZm9ybWF0dGluZyBvZiBzdHlsZSBwcm9wZXJ0eSBhbmQgdmFsdWUgZGVmaW5pdGlvbnMgZm91bmQgaW46YCtkKSxmPSEwO2JyZWFrfW89bVswXTt2YXIgaD1tWzFdLGc9bVsyXTt0LnByb3BlcnRpZXNbaF0/bi5wYXJzZShoLGcpPyhwLnB1c2goe25hbWU6aCx2YWw6Z30pLGMoKSk6KEl1KGBTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBkZWZpbml0aW9uIGluOiBgK28pLGMoKSk6KEl1KGBTa2lwcGluZyBwcm9wZXJ0eTogSW52YWxpZCBwcm9wZXJ0eSBuYW1lIGluOiBgK28pLGMoKSl9aWYoZil7cygpO2JyZWFrfW4uc2VsZWN0b3IodSk7Zm9yKHZhciBfPTA7XzxwLmxlbmd0aDtfKyspe3ZhciB2PXBbX107bi5jc3Modi5uYW1lLHYudmFsKX1zKCl9fXJldHVybiBufSxZeS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHQucmVzZXRUb0RlZmF1bHQoKSx0LmFwcGVuZEZyb21TdHJpbmcoZSksdH07dmFyIFh5PXt9OyhmdW5jdGlvbigpe3ZhciBlPVhjLHQ9UWMsbj1lbCxyPXRsLGk9bmwsYT1mdW5jdGlvbihlKXtyZXR1cm5gXmArZStgXFxzKlxcKFxccyooW1xcd1xcLl0rKVxccypcXCkkYH0sbz1mdW5jdGlvbihhKXt2YXIgbz1lK2B8XFx3K3xgK3QrYHxgK24rYHxgK3IrYHxgK2k7cmV0dXJuYF5gK2ErYFxccypcXCgoW1xcd1xcLl0rKVxccypcXCxcXHMqKGArZStgKVxccypcXCxcXHMqKGArZStgKVxccyosXFxzKihgK28rYClcXHMqXFwsXFxzKihgK28rYClcXCkkYH0scz1bYF51cmxcXHMqXFwoXFxzKlsnIl0/KC4rPylbJyJdP1xccypcXCkkYCxgXihub25lKSRgLGBeKC4rKSRgXTtYeS50eXBlcz17dGltZTp7bnVtYmVyOiEwLG1pbjowLHVuaXRzOmBzfG1zYCxpbXBsaWNpdFVuaXRzOmBtc2B9LHBlcmNlbnQ6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOmAlYCxpbXBsaWNpdFVuaXRzOmAlYH0scGVyY2VudGFnZXM6e251bWJlcjohMCxtaW46MCxtYXg6MTAwLHVuaXRzOmAlYCxpbXBsaWNpdFVuaXRzOmAlYCxtdWx0aXBsZTohMH0semVyb09uZU51bWJlcjp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwfSx6ZXJvT25lTnVtYmVyczp7bnVtYmVyOiEwLG1pbjowLG1heDoxLHVuaXRsZXNzOiEwLG11bHRpcGxlOiEwfSxuT25lT25lTnVtYmVyOntudW1iZXI6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxub25OZWdhdGl2ZUludDp7bnVtYmVyOiEwLG1pbjowLGludGVnZXI6ITAsdW5pdGxlc3M6ITB9LG5vbk5lZ2F0aXZlTnVtYmVyOntudW1iZXI6ITAsbWluOjAsdW5pdGxlc3M6ITB9LHBvc2l0aW9uOntlbnVtczpbYHBhcmVudGAsYG9yaWdpbmBdfSxub2RlU2l6ZTp7bnVtYmVyOiEwLG1pbjowLGVudW1zOltgbGFiZWxgXX0sbnVtYmVyOntudW1iZXI6ITAsdW5pdGxlc3M6ITB9LG51bWJlcnM6e251bWJlcjohMCx1bml0bGVzczohMCxtdWx0aXBsZTohMH0scG9zaXRpdmVOdW1iZXI6e251bWJlcjohMCx1bml0bGVzczohMCxtaW46MCxzdHJpY3RNaW46ITB9LHNpemU6e251bWJlcjohMCxtaW46MH0sYmlkaXJlY3Rpb25hbFNpemU6e251bWJlcjohMH0sYmlkaXJlY3Rpb25hbFNpemVNYXliZVBlcmNlbnQ6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITB9LGJpZGlyZWN0aW9uYWxTaXplczp7bnVtYmVyOiEwLG11bHRpcGxlOiEwfSxzaXplTWF5YmVQZXJjZW50OntudW1iZXI6ITAsbWluOjAsYWxsb3dQZXJjZW50OiEwfSxheGlzRGlyZWN0aW9uOntlbnVtczpbYGhvcml6b250YWxgLGBsZWZ0d2FyZGAsYHJpZ2h0d2FyZGAsYHZlcnRpY2FsYCxgdXB3YXJkYCxgZG93bndhcmRgLGBhdXRvYF19LGF4aXNEaXJlY3Rpb25FeHBsaWNpdDp7ZW51bXM6W2BsZWZ0d2FyZGAsYHJpZ2h0d2FyZGAsYHVwd2FyZGAsYGRvd253YXJkYF19LGF4aXNEaXJlY3Rpb25QcmltYXJ5OntlbnVtczpbYGhvcml6b250YWxgLGB2ZXJ0aWNhbGBdfSxwYWRkaW5nUmVsYXRpdmVUbzp7ZW51bXM6W2B3aWR0aGAsYGhlaWdodGAsYGF2ZXJhZ2VgLGBtaW5gLGBtYXhgXX0sYmdXSDp7bnVtYmVyOiEwLG1pbjowLGFsbG93UGVyY2VudDohMCxlbnVtczpbYGF1dG9gXSxtdWx0aXBsZTohMH0sYmdQb3M6e251bWJlcjohMCxhbGxvd1BlcmNlbnQ6ITAsbXVsdGlwbGU6ITB9LGJnUmVsYXRpdmVUbzp7ZW51bXM6W2Bpbm5lcmAsYGluY2x1ZGUtcGFkZGluZ2BdLG11bHRpcGxlOiEwfSxiZ1JlcGVhdDp7ZW51bXM6W2ByZXBlYXRgLGByZXBlYXQteGAsYHJlcGVhdC15YCxgbm8tcmVwZWF0YF0sbXVsdGlwbGU6ITB9LGJnRml0OntlbnVtczpbYG5vbmVgLGBjb250YWluYCxgY292ZXJgXSxtdWx0aXBsZTohMH0sYmdDcm9zc09yaWdpbjp7ZW51bXM6W2Bhbm9ueW1vdXNgLGB1c2UtY3JlZGVudGlhbHNgLGBudWxsYF0sbXVsdGlwbGU6ITB9LGJnQ2xpcDp7ZW51bXM6W2Bub25lYCxgbm9kZWBdLG11bHRpcGxlOiEwfSxiZ0NvbnRhaW5tZW50OntlbnVtczpbYGluc2lkZWAsYG92ZXJgXSxtdWx0aXBsZTohMH0sYm94U2VsZWN0aW9uOntlbnVtczpbYGNvbnRhaW5gLGBvdmVybGFwYCxgbm9uZWBdfSxjb2xvcjp7Y29sb3I6ITB9LGNvbG9yczp7Y29sb3I6ITAsbXVsdGlwbGU6ITB9LGZpbGw6e2VudW1zOltgc29saWRgLGBsaW5lYXItZ3JhZGllbnRgLGByYWRpYWwtZ3JhZGllbnRgXX0sYm9vbDp7ZW51bXM6W2B5ZXNgLGBub2BdfSxib29sczp7ZW51bXM6W2B5ZXNgLGBub2BdLG11bHRpcGxlOiEwfSxsaW5lU3R5bGU6e2VudW1zOltgc29saWRgLGBkb3R0ZWRgLGBkYXNoZWRgXX0sbGluZUNhcDp7ZW51bXM6W2BidXR0YCxgcm91bmRgLGBzcXVhcmVgXX0sbGluZVBvc2l0aW9uOntlbnVtczpbYGNlbnRlcmAsYGluc2lkZWAsYG91dHNpZGVgXX0sbGluZUpvaW46e2VudW1zOltgcm91bmRgLGBiZXZlbGAsYG1pdGVyYF19LGJvcmRlclN0eWxlOntlbnVtczpbYHNvbGlkYCxgZG90dGVkYCxgZGFzaGVkYCxgZG91YmxlYF19LGN1cnZlU3R5bGU6e2VudW1zOltgYmV6aWVyYCxgdW5idW5kbGVkLWJlemllcmAsYGhheXN0YWNrYCxgc2VnbWVudHNgLGBzdHJhaWdodGAsYHN0cmFpZ2h0LXRyaWFuZ2xlYCxgdGF4aWAsYHJvdW5kLXNlZ21lbnRzYCxgcm91bmQtdGF4aWBdfSxyYWRpdXNUeXBlOntlbnVtczpbYGFyYy1yYWRpdXNgLGBpbmZsdWVuY2UtcmFkaXVzYF0sbXVsdGlwbGU6ITB9LGZvbnRGYW1pbHk6e3JlZ2V4OmBeKFtcXHctIFxcIl0rKD86XFxzKixcXHMqW1xcdy0gXFwiXSspKikkYH0sZm9udFN0eWxlOntlbnVtczpbYGl0YWxpY2AsYG5vcm1hbGAsYG9ibGlxdWVgXX0sZm9udFdlaWdodDp7ZW51bXM6W2Bub3JtYWxgLGBib2xkYCxgYm9sZGVyYCxgbGlnaHRlcmAsYDEwMGAsYDIwMGAsYDMwMGAsYDQwMGAsYDUwMGAsYDYwMGAsYDgwMGAsYDkwMGAsMTAwLDIwMCwzMDAsNDAwLDUwMCw2MDAsNzAwLDgwMCw5MDBdfSx0ZXh0RGVjb3JhdGlvbjp7ZW51bXM6W2Bub25lYCxgdW5kZXJsaW5lYCxgb3ZlcmxpbmVgLGBsaW5lLXRocm91Z2hgXX0sdGV4dFRyYW5zZm9ybTp7ZW51bXM6W2Bub25lYCxgdXBwZXJjYXNlYCxgbG93ZXJjYXNlYF19LHRleHRXcmFwOntlbnVtczpbYG5vbmVgLGB3cmFwYCxgZWxsaXBzaXNgXX0sdGV4dE92ZXJmbG93V3JhcDp7ZW51bXM6W2B3aGl0ZXNwYWNlYCxgYW55d2hlcmVgXX0sdGV4dEJhY2tncm91bmRTaGFwZTp7ZW51bXM6W2ByZWN0YW5nbGVgLGByb3VuZHJlY3RhbmdsZWAsYHJvdW5kLXJlY3RhbmdsZWAsYGNpcmNsZWBdfSxub2RlU2hhcGU6e2VudW1zOmByZWN0YW5nbGUucm91bmRyZWN0YW5nbGUucm91bmQtcmVjdGFuZ2xlLmN1dHJlY3RhbmdsZS5jdXQtcmVjdGFuZ2xlLmJvdHRvbXJvdW5kcmVjdGFuZ2xlLmJvdHRvbS1yb3VuZC1yZWN0YW5nbGUuYmFycmVsLmVsbGlwc2UudHJpYW5nbGUucm91bmQtdHJpYW5nbGUuc3F1YXJlLnBlbnRhZ29uLnJvdW5kLXBlbnRhZ29uLmhleGFnb24ucm91bmQtaGV4YWdvbi5jb25jYXZlaGV4YWdvbi5jb25jYXZlLWhleGFnb24uaGVwdGFnb24ucm91bmQtaGVwdGFnb24ub2N0YWdvbi5yb3VuZC1vY3RhZ29uLnRhZy5yb3VuZC10YWcuc3Rhci5kaWFtb25kLnJvdW5kLWRpYW1vbmQudmVlLnJob21ib2lkLnJpZ2h0LXJob21ib2lkLnBvbHlnb25gLnNwbGl0KGAuYCl9LG92ZXJsYXlTaGFwZTp7ZW51bXM6W2Byb3VuZHJlY3RhbmdsZWAsYHJvdW5kLXJlY3RhbmdsZWAsYGVsbGlwc2VgXX0sY29ybmVyUmFkaXVzOntudW1iZXI6ITAsbWluOjAsdW5pdHM6YHB4fGVtYCxpbXBsaWNpdFVuaXRzOmBweGAsZW51bXM6W2BhdXRvYF19LGNvbXBvdW5kSW5jbHVkZUxhYmVsczp7ZW51bXM6W2BpbmNsdWRlYCxgZXhjbHVkZWBdfSxhcnJvd1NoYXBlOntlbnVtczpbYHRlZWAsYHRyaWFuZ2xlYCxgdHJpYW5nbGUtdGVlYCxgY2lyY2xlLXRyaWFuZ2xlYCxgdHJpYW5nbGUtY3Jvc3NgLGB0cmlhbmdsZS1iYWNrY3VydmVgLGB2ZWVgLGBzcXVhcmVgLGBjaXJjbGVgLGBkaWFtb25kYCxgY2hldnJvbmAsYG5vbmVgXX0sYXJyb3dGaWxsOntlbnVtczpbYGZpbGxlZGAsYGhvbGxvd2BdfSxhcnJvd1dpZHRoOntudW1iZXI6ITAsdW5pdHM6YCV8cHh8ZW1gLGltcGxpY2l0VW5pdHM6YHB4YCxlbnVtczpbYG1hdGNoLWxpbmVgXX0sZGlzcGxheTp7ZW51bXM6W2BlbGVtZW50YCxgbm9uZWBdfSx2aXNpYmlsaXR5OntlbnVtczpbYGhpZGRlbmAsYHZpc2libGVgXX0sekNvbXBvdW5kRGVwdGg6e2VudW1zOltgYm90dG9tYCxgb3JwaGFuYCxgYXV0b2AsYHRvcGBdfSx6SW5kZXhDb21wYXJlOntlbnVtczpbYGF1dG9gLGBtYW51YWxgXX0sdmFsaWduOntlbnVtczpbYHRvcGAsYHRvcC1pbnNpZGVgLGBjZW50ZXJgLGBib3R0b21gLGBib3R0b20taW5zaWRlYF19LGhhbGlnbjp7ZW51bXM6W2BsZWZ0YCxgbGVmdC1pbnNpZGVgLGBjZW50ZXJgLGByaWdodGAsYHJpZ2h0LWluc2lkZWBdfSxqdXN0aWZpY2F0aW9uOntlbnVtczpbYGxlZnRgLGBjZW50ZXJgLGByaWdodGAsYGF1dG9gXX0sdGV4dE1ldHJpY3M6e2VudW1zOltgZm9udGAsYGdseXBoYF19LHRleHQ6e3N0cmluZzohMH0sZGF0YTp7bWFwcGluZzohMCxyZWdleDphKGBkYXRhYCl9LGxheW91dERhdGE6e21hcHBpbmc6ITAscmVnZXg6YShgbGF5b3V0RGF0YWApfSxzY3JhdGNoOnttYXBwaW5nOiEwLHJlZ2V4OmEoYHNjcmF0Y2hgKX0sbWFwRGF0YTp7bWFwcGluZzohMCxyZWdleDpvKGBtYXBEYXRhYCl9LG1hcExheW91dERhdGE6e21hcHBpbmc6ITAscmVnZXg6byhgbWFwTGF5b3V0RGF0YWApfSxtYXBTY3JhdGNoOnttYXBwaW5nOiEwLHJlZ2V4Om8oYG1hcFNjcmF0Y2hgKX0sZm46e21hcHBpbmc6ITAsZm46ITB9LHVybDp7cmVnZXhlczpzLHNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZTohMH0sdXJsczp7cmVnZXhlczpzLHNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZTohMCxtdWx0aXBsZTohMH0scHJvcExpc3Q6e3Byb3BMaXN0OiEwfSxhbmdsZTp7bnVtYmVyOiEwLHVuaXRzOmBkZWd8cmFkYCxpbXBsaWNpdFVuaXRzOmByYWRgfSx0ZXh0Um90YXRpb246e251bWJlcjohMCx1bml0czpgZGVnfHJhZGAsaW1wbGljaXRVbml0czpgcmFkYCxlbnVtczpbYG5vbmVgLGBhdXRvcm90YXRlYF19LHBvbHlnb25Qb2ludExpc3Q6e251bWJlcjohMCxtdWx0aXBsZTohMCxldmVuTXVsdGlwbGU6ITAsbWluOi0xLG1heDoxLHVuaXRsZXNzOiEwfSxlZGdlRGlzdGFuY2VzOntlbnVtczpbYGludGVyc2VjdGlvbmAsYG5vZGUtcG9zaXRpb25gLGBlbmRwb2ludHNgXX0sZWRnZUVuZHBvaW50OntudW1iZXI6ITAsbXVsdGlwbGU6ITAsdW5pdHM6YCV8cHh8ZW18ZGVnfHJhZGAsaW1wbGljaXRVbml0czpgcHhgLGVudW1zOltgaW5zaWRlLXRvLW5vZGVgLGBvdXRzaWRlLXRvLW5vZGVgLGBvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWxgLGBvdXRzaWRlLXRvLWxpbmVgLGBvdXRzaWRlLXRvLWxpbmUtb3ItbGFiZWxgXSxzaW5nbGVFbnVtOiEwLHZhbGlkYXRlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIHRbMF0hPT1gZGVnYCYmdFswXSE9PWByYWRgJiZ0WzFdIT09YGRlZ2AmJnRbMV0hPT1gcmFkYDtjYXNlIDE6cmV0dXJuIFooZVswXSl8fHRbMF09PT1gZGVnYHx8dFswXT09PWByYWRgO2RlZmF1bHQ6cmV0dXJuITF9fX0sZWFzaW5nOntyZWdleGVzOltgXihzcHJpbmcpXFxzKlxcKFxccyooYCtlK2ApXFxzKixcXHMqKGArZStgKVxccypcXCkkYCxgXihjdWJpYy1iZXppZXIpXFxzKlxcKFxccyooYCtlK2ApXFxzKixcXHMqKGArZStgKVxccyosXFxzKihgK2UrYClcXHMqLFxccyooYCtlK2ApXFxzKlxcKSRgXSxlbnVtczpgbGluZWFyLmVhc2UuZWFzZS1pbi5lYXNlLW91dC5lYXNlLWluLW91dC5lYXNlLWluLXNpbmUuZWFzZS1vdXQtc2luZS5lYXNlLWluLW91dC1zaW5lLmVhc2UtaW4tcXVhZC5lYXNlLW91dC1xdWFkLmVhc2UtaW4tb3V0LXF1YWQuZWFzZS1pbi1jdWJpYy5lYXNlLW91dC1jdWJpYy5lYXNlLWluLW91dC1jdWJpYy5lYXNlLWluLXF1YXJ0LmVhc2Utb3V0LXF1YXJ0LmVhc2UtaW4tb3V0LXF1YXJ0LmVhc2UtaW4tcXVpbnQuZWFzZS1vdXQtcXVpbnQuZWFzZS1pbi1vdXQtcXVpbnQuZWFzZS1pbi1leHBvLmVhc2Utb3V0LWV4cG8uZWFzZS1pbi1vdXQtZXhwby5lYXNlLWluLWNpcmMuZWFzZS1vdXQtY2lyYy5lYXNlLWluLW91dC1jaXJjYC5zcGxpdChgLmApfSxncmFkaWVudERpcmVjdGlvbjp7ZW51bXM6W2B0by1ib3R0b21gLGB0by10b3BgLGB0by1sZWZ0YCxgdG8tcmlnaHRgLGB0by1ib3R0b20tcmlnaHRgLGB0by1ib3R0b20tbGVmdGAsYHRvLXRvcC1yaWdodGAsYHRvLXRvcC1sZWZ0YCxgdG8tcmlnaHQtYm90dG9tYCxgdG8tbGVmdC1ib3R0b21gLGB0by1yaWdodC10b3BgLGB0by1sZWZ0LXRvcGBdfSxib3VuZHNFeHBhbnNpb246e251bWJlcjohMCxtdWx0aXBsZTohMCxtaW46MCx2YWxpZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gdD09PTF8fHQ9PT0yfHx0PT09NH19fTt2YXIgYz17emVyb05vblplcm86ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT09bnVsbHx8dD09bnVsbCkmJmUhPT10fHxlPT0wJiZ0IT0wfHxlIT0wJiZ0PT0wfSxhbnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSE9dH0sZW1wdHlOb25FbXB0eTpmdW5jdGlvbihlLHQpe3ZhciBuPXpjKGUpLHI9emModCk7cmV0dXJuIG4mJiFyfHwhbiYmcn19LGw9WHkudHlwZXMsdT1be25hbWU6YGxhYmVsYCx0eXBlOmwudGV4dCx0cmlnZ2Vyc0JvdW5kczpjLmFueSx0cmlnZ2Vyc1pPcmRlcjpjLmVtcHR5Tm9uRW1wdHl9LHtuYW1lOmB0ZXh0LXJvdGF0aW9uYCx0eXBlOmwudGV4dFJvdGF0aW9uLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGV4dC1tYXJnaW4teGAsdHlwZTpsLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGV4dC1tYXJnaW4teWAsdHlwZTpsLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fV0sZD1be25hbWU6YHNvdXJjZS1sYWJlbGAsdHlwZTpsLnRleHQsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBzb3VyY2UtdGV4dC1yb3RhdGlvbmAsdHlwZTpsLnRleHRSb3RhdGlvbix0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YHNvdXJjZS10ZXh0LW1hcmdpbi14YCx0eXBlOmwuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBzb3VyY2UtdGV4dC1tYXJnaW4teWAsdHlwZTpsLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgc291cmNlLXRleHQtb2Zmc2V0YCx0eXBlOmwuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX1dLGY9W3tuYW1lOmB0YXJnZXQtbGFiZWxgLHR5cGU6bC50ZXh0LHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGFyZ2V0LXRleHQtcm90YXRpb25gLHR5cGU6bC50ZXh0Um90YXRpb24sdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0YXJnZXQtdGV4dC1tYXJnaW4teGAsdHlwZTpsLmJpZGlyZWN0aW9uYWxTaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGFyZ2V0LXRleHQtbWFyZ2luLXlgLHR5cGU6bC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YHRhcmdldC10ZXh0LW9mZnNldGAsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9XSxwPVt7bmFtZTpgZm9udC1mYW1pbHlgLHR5cGU6bC5mb250RmFtaWx5LHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgZm9udC1zdHlsZWAsdHlwZTpsLmZvbnRTdHlsZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YGZvbnQtd2VpZ2h0YCx0eXBlOmwuZm9udFdlaWdodCx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YGZvbnQtc2l6ZWAsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0ZXh0LXRyYW5zZm9ybWAsdHlwZTpsLnRleHRUcmFuc2Zvcm0sdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0ZXh0LXdyYXBgLHR5cGU6bC50ZXh0V3JhcCx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YHRleHQtb3ZlcmZsb3ctd3JhcGAsdHlwZTpsLnRleHRPdmVyZmxvd1dyYXAsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0ZXh0LW1heC13aWR0aGAsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0ZXh0LW91dGxpbmUtd2lkdGhgLHR5cGU6bC5zaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgbGluZS1oZWlnaHRgLHR5cGU6bC5wb3NpdGl2ZU51bWJlcix0cmlnZ2Vyc0JvdW5kczpjLmFueX1dLG09W3tuYW1lOmB0ZXh0LXZhbGlnbmAsdHlwZTpsLnZhbGlnbix0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YHRleHQtaGFsaWduYCx0eXBlOmwuaGFsaWduLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgY29sb3JgLHR5cGU6bC5jb2xvcn0se25hbWU6YHRleHQtb3V0bGluZS1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgdGV4dC1vdXRsaW5lLW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyfSx7bmFtZTpgdGV4dC1iYWNrZ3JvdW5kLWNvbG9yYCx0eXBlOmwuY29sb3J9LHtuYW1lOmB0ZXh0LWJhY2tncm91bmQtb3BhY2l0eWAsdHlwZTpsLnplcm9PbmVOdW1iZXJ9LHtuYW1lOmB0ZXh0LWJhY2tncm91bmQtcGFkZGluZ2AsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0ZXh0LWJvcmRlci1vcGFjaXR5YCx0eXBlOmwuemVyb09uZU51bWJlcn0se25hbWU6YHRleHQtYm9yZGVyLWNvbG9yYCx0eXBlOmwuY29sb3J9LHtuYW1lOmB0ZXh0LWJvcmRlci13aWR0aGAsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0ZXh0LWJvcmRlci1zdHlsZWAsdHlwZTpsLmJvcmRlclN0eWxlLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGV4dC1iYWNrZ3JvdW5kLXNoYXBlYCx0eXBlOmwudGV4dEJhY2tncm91bmRTaGFwZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YHRleHQtanVzdGlmaWNhdGlvbmAsdHlwZTpsLmp1c3RpZmljYXRpb259LHtuYW1lOmB0ZXh0LW1ldHJpY3NgLHR5cGU6bC50ZXh0TWV0cmljc30se25hbWU6YGJveC1zZWxlY3QtbGFiZWxzYCx0eXBlOmwuYm9vbCx0cmlnZ2Vyc0JvdW5kczpjLmFueX1dLGg9W3tuYW1lOmBldmVudHNgLHR5cGU6bC5ib29sLHRyaWdnZXJzWk9yZGVyOmMuYW55fSx7bmFtZTpgdGV4dC1ldmVudHNgLHR5cGU6bC5ib29sLHRyaWdnZXJzWk9yZGVyOmMuYW55fSx7bmFtZTpgYm94LXNlbGVjdGlvbmAsdHlwZTpsLmJveFNlbGVjdGlvbix0cmlnZ2Vyc1pPcmRlcjpjLmFueX1dLGc9W3tuYW1lOmBkaXNwbGF5YCx0eXBlOmwuZGlzcGxheSx0cmlnZ2Vyc1pPcmRlcjpjLmFueSx0cmlnZ2Vyc0JvdW5kczpjLmFueSx0cmlnZ2Vyc0JvdW5kc09mQ29ubmVjdGVkRWRnZXM6Yy5hbnksdHJpZ2dlcnNCb3VuZHNPZlBhcmFsbGVsRWRnZXM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlIT09dCYmbi5wc3R5bGUoYGN1cnZlLXN0eWxlYCkudmFsdWU9PT1gYmV6aWVyYH19LHtuYW1lOmB2aXNpYmlsaXR5YCx0eXBlOmwudmlzaWJpbGl0eSx0cmlnZ2Vyc1pPcmRlcjpjLmFueX0se25hbWU6YG9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzWk9yZGVyOmMuemVyb05vblplcm99LHtuYW1lOmB0ZXh0LW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyfSx7bmFtZTpgbWluLXpvb21lZC1mb250LXNpemVgLHR5cGU6bC5zaXplfSx7bmFtZTpgei1jb21wb3VuZC1kZXB0aGAsdHlwZTpsLnpDb21wb3VuZERlcHRoLHRyaWdnZXJzWk9yZGVyOmMuYW55fSx7bmFtZTpgei1pbmRleC1jb21wYXJlYCx0eXBlOmwuekluZGV4Q29tcGFyZSx0cmlnZ2Vyc1pPcmRlcjpjLmFueX0se25hbWU6YHotaW5kZXhgLHR5cGU6bC5udW1iZXIsdHJpZ2dlcnNaT3JkZXI6Yy5hbnl9XSxfPVt7bmFtZTpgb3ZlcmxheS1wYWRkaW5nYCx0eXBlOmwuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YG92ZXJsYXktY29sb3JgLHR5cGU6bC5jb2xvcn0se25hbWU6YG92ZXJsYXktb3BhY2l0eWAsdHlwZTpsLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6Yy56ZXJvTm9uWmVyb30se25hbWU6YG92ZXJsYXktc2hhcGVgLHR5cGU6bC5vdmVybGF5U2hhcGUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBvdmVybGF5LWNvcm5lci1yYWRpdXNgLHR5cGU6bC5jb3JuZXJSYWRpdXN9XSx2PVt7bmFtZTpgdW5kZXJsYXktcGFkZGluZ2AsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB1bmRlcmxheS1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgdW5kZXJsYXktb3BhY2l0eWAsdHlwZTpsLnplcm9PbmVOdW1iZXIsdHJpZ2dlcnNCb3VuZHM6Yy56ZXJvTm9uWmVyb30se25hbWU6YHVuZGVybGF5LXNoYXBlYCx0eXBlOmwub3ZlcmxheVNoYXBlLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdW5kZXJsYXktY29ybmVyLXJhZGl1c2AsdHlwZTpsLmNvcm5lclJhZGl1c31dLHk9W3tuYW1lOmB0cmFuc2l0aW9uLXByb3BlcnR5YCx0eXBlOmwucHJvcExpc3R9LHtuYW1lOmB0cmFuc2l0aW9uLWR1cmF0aW9uYCx0eXBlOmwudGltZX0se25hbWU6YHRyYW5zaXRpb24tZGVsYXlgLHR5cGU6bC50aW1lfSx7bmFtZTpgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25gLHR5cGU6bC5lYXNpbmd9XSxiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudmFsdWU9PT1gbGFiZWxgPy1lLnBvb2xJbmRleCgpOnQucGZWYWx1ZX0seD1be25hbWU6YGhlaWdodGAsdHlwZTpsLm5vZGVTaXplLHRyaWdnZXJzQm91bmRzOmMuYW55LGhhc2hPdmVycmlkZTpifSx7bmFtZTpgd2lkdGhgLHR5cGU6bC5ub2RlU2l6ZSx0cmlnZ2Vyc0JvdW5kczpjLmFueSxoYXNoT3ZlcnJpZGU6Yn0se25hbWU6YHNoYXBlYCx0eXBlOmwubm9kZVNoYXBlLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgc2hhcGUtcG9seWdvbi1wb2ludHNgLHR5cGU6bC5wb2x5Z29uUG9pbnRMaXN0LHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgY29ybmVyLXJhZGl1c2AsdHlwZTpsLmNvcm5lclJhZGl1c30se25hbWU6YGJhY2tncm91bmQtY29sb3JgLHR5cGU6bC5jb2xvcn0se25hbWU6YGJhY2tncm91bmQtZmlsbGAsdHlwZTpsLmZpbGx9LHtuYW1lOmBiYWNrZ3JvdW5kLW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyfSx7bmFtZTpgYmFja2dyb3VuZC1ibGFja2VuYCx0eXBlOmwubk9uZU9uZU51bWJlcn0se25hbWU6YGJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1jb2xvcnNgLHR5cGU6bC5jb2xvcnN9LHtuYW1lOmBiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zYCx0eXBlOmwucGVyY2VudGFnZXN9LHtuYW1lOmBiYWNrZ3JvdW5kLWdyYWRpZW50LWRpcmVjdGlvbmAsdHlwZTpsLmdyYWRpZW50RGlyZWN0aW9ufSx7bmFtZTpgcGFkZGluZ2AsdHlwZTpsLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBwYWRkaW5nLXJlbGF0aXZlLXRvYCx0eXBlOmwucGFkZGluZ1JlbGF0aXZlVG8sdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBib3VuZHMtZXhwYW5zaW9uYCx0eXBlOmwuYm91bmRzRXhwYW5zaW9uLHRyaWdnZXJzQm91bmRzOmMuYW55fV0sUz1be25hbWU6YGJvcmRlci1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgYm9yZGVyLW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyfSx7bmFtZTpgYm9yZGVyLXdpZHRoYCx0eXBlOmwuc2l6ZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YGJvcmRlci1zdHlsZWAsdHlwZTpsLmJvcmRlclN0eWxlfSx7bmFtZTpgYm9yZGVyLWNhcGAsdHlwZTpsLmxpbmVDYXB9LHtuYW1lOmBib3JkZXItam9pbmAsdHlwZTpsLmxpbmVKb2lufSx7bmFtZTpgYm9yZGVyLWRhc2gtcGF0dGVybmAsdHlwZTpsLm51bWJlcnN9LHtuYW1lOmBib3JkZXItZGFzaC1vZmZzZXRgLHR5cGU6bC5udW1iZXJ9LHtuYW1lOmBib3JkZXItcG9zaXRpb25gLHR5cGU6bC5saW5lUG9zaXRpb259XSxDPVt7bmFtZTpgb3V0bGluZS1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgb3V0bGluZS1vcGFjaXR5YCx0eXBlOmwuemVyb09uZU51bWJlcn0se25hbWU6YG91dGxpbmUtd2lkdGhgLHR5cGU6bC5zaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgb3V0bGluZS1zdHlsZWAsdHlwZTpsLmJvcmRlclN0eWxlfSx7bmFtZTpgb3V0bGluZS1vZmZzZXRgLHR5cGU6bC5zaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fV0sdz1be25hbWU6YGJhY2tncm91bmQtaW1hZ2VgLHR5cGU6bC51cmxzfSx7bmFtZTpgYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbmAsdHlwZTpsLmJnQ3Jvc3NPcmlnaW59LHtuYW1lOmBiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyc30se25hbWU6YGJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnRgLHR5cGU6bC5iZ0NvbnRhaW5tZW50fSx7bmFtZTpgYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmdgLHR5cGU6bC5ib29sc30se25hbWU6YGJhY2tncm91bmQtcG9zaXRpb24teGAsdHlwZTpsLmJnUG9zfSx7bmFtZTpgYmFja2dyb3VuZC1wb3NpdGlvbi15YCx0eXBlOmwuYmdQb3N9LHtuYW1lOmBiYWNrZ3JvdW5kLXdpZHRoLXJlbGF0aXZlLXRvYCx0eXBlOmwuYmdSZWxhdGl2ZVRvfSx7bmFtZTpgYmFja2dyb3VuZC1oZWlnaHQtcmVsYXRpdmUtdG9gLHR5cGU6bC5iZ1JlbGF0aXZlVG99LHtuYW1lOmBiYWNrZ3JvdW5kLXJlcGVhdGAsdHlwZTpsLmJnUmVwZWF0fSx7bmFtZTpgYmFja2dyb3VuZC1maXRgLHR5cGU6bC5iZ0ZpdH0se25hbWU6YGJhY2tncm91bmQtY2xpcGAsdHlwZTpsLmJnQ2xpcH0se25hbWU6YGJhY2tncm91bmQtd2lkdGhgLHR5cGU6bC5iZ1dIfSx7bmFtZTpgYmFja2dyb3VuZC1oZWlnaHRgLHR5cGU6bC5iZ1dIfSx7bmFtZTpgYmFja2dyb3VuZC1vZmZzZXQteGAsdHlwZTpsLmJnUG9zfSx7bmFtZTpgYmFja2dyb3VuZC1vZmZzZXQteWAsdHlwZTpsLmJnUG9zfV0sVD1be25hbWU6YHBvc2l0aW9uYCx0eXBlOmwucG9zaXRpb24sdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBjb21wb3VuZC1zaXppbmctd3J0LWxhYmVsc2AsdHlwZTpsLmNvbXBvdW5kSW5jbHVkZUxhYmVscyx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YG1pbi13aWR0aGAsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBtaW4td2lkdGgtYmlhcy1sZWZ0YCx0eXBlOmwuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YG1pbi13aWR0aC1iaWFzLXJpZ2h0YCx0eXBlOmwuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YG1pbi1oZWlnaHRgLHR5cGU6bC5zaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgbWluLWhlaWdodC1iaWFzLXRvcGAsdHlwZTpsLnNpemVNYXliZVBlcmNlbnQsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBtaW4taGVpZ2h0LWJpYXMtYm90dG9tYCx0eXBlOmwuc2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpjLmFueX1dLEU9W3tuYW1lOmBsaW5lLXN0eWxlYCx0eXBlOmwubGluZVN0eWxlfSx7bmFtZTpgbGluZS1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgbGluZS1maWxsYCx0eXBlOmwuZmlsbH0se25hbWU6YGxpbmUtY2FwYCx0eXBlOmwubGluZUNhcH0se25hbWU6YGxpbmUtb3BhY2l0eWAsdHlwZTpsLnplcm9PbmVOdW1iZXJ9LHtuYW1lOmBsaW5lLWRhc2gtcGF0dGVybmAsdHlwZTpsLm51bWJlcnN9LHtuYW1lOmBsaW5lLWRhc2gtb2Zmc2V0YCx0eXBlOmwubnVtYmVyfSx7bmFtZTpgbGluZS1vdXRsaW5lLXdpZHRoYCx0eXBlOmwuc2l6ZX0se25hbWU6YGxpbmUtb3V0bGluZS1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgbGluZS1ncmFkaWVudC1zdG9wLWNvbG9yc2AsdHlwZTpsLmNvbG9yc30se25hbWU6YGxpbmUtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnNgLHR5cGU6bC5wZXJjZW50YWdlc30se25hbWU6YGN1cnZlLXN0eWxlYCx0eXBlOmwuY3VydmVTdHlsZSx0cmlnZ2Vyc0JvdW5kczpjLmFueSx0cmlnZ2Vyc0JvdW5kc09mUGFyYWxsZWxFZGdlczpmdW5jdGlvbihlLHQpe3JldHVybiBlPT09dD8hMTplPT09YGJlemllcmB8fHQ9PT1gYmV6aWVyYH19LHtuYW1lOmBoYXlzdGFjay1yYWRpdXNgLHR5cGU6bC56ZXJvT25lTnVtYmVyLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgc291cmNlLWVuZHBvaW50YCx0eXBlOmwuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGFyZ2V0LWVuZHBvaW50YCx0eXBlOmwuZWRnZUVuZHBvaW50LHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgY29udHJvbC1wb2ludC1zdGVwLXNpemVgLHR5cGU6bC5zaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgY29udHJvbC1wb2ludC1kaXN0YW5jZXNgLHR5cGU6bC5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBjb250cm9sLXBvaW50LXdlaWdodHNgLHR5cGU6bC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgc2VnbWVudC1kaXN0YW5jZXNgLHR5cGU6bC5iaWRpcmVjdGlvbmFsU2l6ZXMsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBzZWdtZW50LXdlaWdodHNgLHR5cGU6bC5udW1iZXJzLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgc2VnbWVudC1yYWRpaWAsdHlwZTpsLm51bWJlcnMsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmByYWRpdXMtdHlwZWAsdHlwZTpsLnJhZGl1c1R5cGUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmB0YXhpLXR1cm5gLHR5cGU6bC5iaWRpcmVjdGlvbmFsU2l6ZU1heWJlUGVyY2VudCx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YHRheGktdHVybi1taW4tZGlzdGFuY2VgLHR5cGU6bC5zaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGF4aS1kaXJlY3Rpb25gLHR5cGU6bC5heGlzRGlyZWN0aW9uLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGF4aS1yYWRpdXNgLHR5cGU6bC5udW1iZXIsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBlZGdlLWRpc3RhbmNlc2AsdHlwZTpsLmVkZ2VEaXN0YW5jZXMsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBhcnJvdy1zY2FsZWAsdHlwZTpsLnBvc2l0aXZlTnVtYmVyLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgbG9vcC1kaXJlY3Rpb25gLHR5cGU6bC5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YGxvb3Atc3dlZXBgLHR5cGU6bC5hbmdsZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YHNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGVgLHR5cGU6bC5zaXplLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgdGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZWAsdHlwZTpsLnNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9XSxEPVt7bmFtZTpgZ2hvc3RgLHR5cGU6bC5ib29sLHRyaWdnZXJzQm91bmRzOmMuYW55fSx7bmFtZTpgZ2hvc3Qtb2Zmc2V0LXhgLHR5cGU6bC5iaWRpcmVjdGlvbmFsU2l6ZSx0cmlnZ2Vyc0JvdW5kczpjLmFueX0se25hbWU6YGdob3N0LW9mZnNldC15YCx0eXBlOmwuYmlkaXJlY3Rpb25hbFNpemUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBnaG9zdC1vcGFjaXR5YCx0eXBlOmwuemVyb09uZU51bWJlcn1dLE89W3tuYW1lOmBzZWxlY3Rpb24tYm94LWNvbG9yYCx0eXBlOmwuY29sb3J9LHtuYW1lOmBzZWxlY3Rpb24tYm94LW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyfSx7bmFtZTpgc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3JgLHR5cGU6bC5jb2xvcn0se25hbWU6YHNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoYCx0eXBlOmwuc2l6ZX0se25hbWU6YGFjdGl2ZS1iZy1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgYWN0aXZlLWJnLW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyfSx7bmFtZTpgYWN0aXZlLWJnLXNpemVgLHR5cGU6bC5zaXplfSx7bmFtZTpgb3V0c2lkZS10ZXh0dXJlLWJnLWNvbG9yYCx0eXBlOmwuY29sb3J9LHtuYW1lOmBvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eWAsdHlwZTpsLnplcm9PbmVOdW1iZXJ9XSxrPVtdO1h5LnBpZUJhY2tncm91bmROPTE2LGsucHVzaCh7bmFtZTpgcGllLXNpemVgLHR5cGU6bC5zaXplTWF5YmVQZXJjZW50fSksay5wdXNoKHtuYW1lOmBwaWUtaG9sZWAsdHlwZTpsLnNpemVNYXliZVBlcmNlbnR9KSxrLnB1c2goe25hbWU6YHBpZS1zdGFydC1hbmdsZWAsdHlwZTpsLmFuZ2xlfSk7Zm9yKHZhciBBPTE7QTw9WHkucGllQmFja2dyb3VuZE47QSsrKWsucHVzaCh7bmFtZTpgcGllLWArQStgLWJhY2tncm91bmQtY29sb3JgLHR5cGU6bC5jb2xvcn0pLGsucHVzaCh7bmFtZTpgcGllLWArQStgLWJhY2tncm91bmQtc2l6ZWAsdHlwZTpsLnBlcmNlbnR9KSxrLnB1c2goe25hbWU6YHBpZS1gK0ErYC1iYWNrZ3JvdW5kLW9wYWNpdHlgLHR5cGU6bC56ZXJvT25lTnVtYmVyfSk7dmFyIGo9W107WHkuc3RyaXBlQmFja2dyb3VuZE49MTYsai5wdXNoKHtuYW1lOmBzdHJpcGUtc2l6ZWAsdHlwZTpsLnNpemVNYXliZVBlcmNlbnR9KSxqLnB1c2goe25hbWU6YHN0cmlwZS1kaXJlY3Rpb25gLHR5cGU6bC5heGlzRGlyZWN0aW9uUHJpbWFyeX0pO2Zvcih2YXIgTT0xO008PVh5LnN0cmlwZUJhY2tncm91bmROO00rKylqLnB1c2goe25hbWU6YHN0cmlwZS1gK00rYC1iYWNrZ3JvdW5kLWNvbG9yYCx0eXBlOmwuY29sb3J9KSxqLnB1c2goe25hbWU6YHN0cmlwZS1gK00rYC1iYWNrZ3JvdW5kLXNpemVgLHR5cGU6bC5wZXJjZW50fSksai5wdXNoKHtuYW1lOmBzdHJpcGUtYCtNK2AtYmFja2dyb3VuZC1vcGFjaXR5YCx0eXBlOmwuemVyb09uZU51bWJlcn0pO3ZhciBOPVtdLFA9WHkuYXJyb3dQcmVmaXhlcz1bYHNvdXJjZWAsYG1pZC1zb3VyY2VgLGB0YXJnZXRgLGBtaWQtdGFyZ2V0YF07W3tuYW1lOmBhcnJvdy1zaGFwZWAsdHlwZTpsLmFycm93U2hhcGUsdHJpZ2dlcnNCb3VuZHM6Yy5hbnl9LHtuYW1lOmBhcnJvdy1jb2xvcmAsdHlwZTpsLmNvbG9yfSx7bmFtZTpgYXJyb3ctZmlsbGAsdHlwZTpsLmFycm93RmlsbH0se25hbWU6YGFycm93LXdpZHRoYCx0eXBlOmwuYXJyb3dXaWR0aH1dLmZvckVhY2goZnVuY3Rpb24oZSl7UC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXQrYC1gK2UubmFtZSxyPWUudHlwZSxpPWUudHJpZ2dlcnNCb3VuZHM7Ti5wdXNoKHtuYW1lOm4sdHlwZTpyLHRyaWdnZXJzQm91bmRzOml9KX0pfSx7fSk7dmFyIEY9WHkucHJvcGVydGllcz1bXS5jb25jYXQoaCx5LGcsXyx2LEQsbSxwLHUsZCxmLHgsUyxDLHcsayxqLFQsRSxOLE8pLEk9WHkucHJvcGVydHlHcm91cHM9e2JlaGF2aW9yOmgsdHJhbnNpdGlvbjp5LHZpc2liaWxpdHk6ZyxvdmVybGF5Ol8sdW5kZXJsYXk6dixnaG9zdDpELGNvbW1vbkxhYmVsOm0sbGFiZWxEaW1lbnNpb25zOnAsbWFpbkxhYmVsOnUsc291cmNlTGFiZWw6ZCx0YXJnZXRMYWJlbDpmLG5vZGVCb2R5Ongsbm9kZUJvcmRlcjpTLG5vZGVPdXRsaW5lOkMsYmFja2dyb3VuZEltYWdlOncscGllOmssc3RyaXBlOmosY29tcG91bmQ6VCxlZGdlTGluZTpFLGVkZ2VBcnJvdzpOLGNvcmU6T30sTD1YeS5wcm9wZXJ0eUdyb3VwTmFtZXM9e307KFh5LnByb3BlcnR5R3JvdXBLZXlzPU9iamVjdC5rZXlzKEkpKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0xbZV09SVtlXS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pLElbZV0uZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5ncm91cEtleT1lfSl9KTt2YXIgUj1YeS5hbGlhc2VzPVt7bmFtZTpgY29udGVudGAscG9pbnRzVG86YGxhYmVsYH0se25hbWU6YGNvbnRyb2wtcG9pbnQtZGlzdGFuY2VgLHBvaW50c1RvOmBjb250cm9sLXBvaW50LWRpc3RhbmNlc2B9LHtuYW1lOmBjb250cm9sLXBvaW50LXdlaWdodGAscG9pbnRzVG86YGNvbnRyb2wtcG9pbnQtd2VpZ2h0c2B9LHtuYW1lOmBzZWdtZW50LWRpc3RhbmNlYCxwb2ludHNUbzpgc2VnbWVudC1kaXN0YW5jZXNgfSx7bmFtZTpgc2VnbWVudC13ZWlnaHRgLHBvaW50c1RvOmBzZWdtZW50LXdlaWdodHNgfSx7bmFtZTpgc2VnbWVudC1yYWRpdXNgLHBvaW50c1RvOmBzZWdtZW50LXJhZGlpYH0se25hbWU6YGVkZ2UtdGV4dC1yb3RhdGlvbmAscG9pbnRzVG86YHRleHQtcm90YXRpb25gfSx7bmFtZTpgcGFkZGluZy1sZWZ0YCxwb2ludHNUbzpgcGFkZGluZ2B9LHtuYW1lOmBwYWRkaW5nLXJpZ2h0YCxwb2ludHNUbzpgcGFkZGluZ2B9LHtuYW1lOmBwYWRkaW5nLXRvcGAscG9pbnRzVG86YHBhZGRpbmdgfSx7bmFtZTpgcGFkZGluZy1ib3R0b21gLHBvaW50c1RvOmBwYWRkaW5nYH1dO1h5LnByb3BlcnR5TmFtZXM9Ri5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZX0pO2Zvcih2YXIgej0wO3o8Ri5sZW5ndGg7eisrKXt2YXIgQj1GW3pdO0ZbQi5uYW1lXT1CfWZvcih2YXIgVj0wO1Y8Ui5sZW5ndGg7VisrKXt2YXIgSD1SW1ZdLFU9RltILnBvaW50c1RvXSxXPXtuYW1lOkgubmFtZSxhbGlhczohMCxwb2ludHNUbzpVfTtGLnB1c2goVyksRltILm5hbWVdPVd9fSkoKSxYeS5nZXREZWZhdWx0UHJvcGVydHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoKVtlXX0sWHkuZ2V0RGVmYXVsdFByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlO2lmKGUuZGVmYXVsdFByb3BlcnRpZXMhPW51bGwpcmV0dXJuIGUuZGVmYXVsdFByb3BlcnRpZXM7Zm9yKHZhciB0PWFsKHsic2VsZWN0aW9uLWJveC1jb2xvciI6YCNkZGRgLCJzZWxlY3Rpb24tYm94LW9wYWNpdHkiOi42NSwic2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3IiOmAjYWFhYCwic2VsZWN0aW9uLWJveC1ib3JkZXItd2lkdGgiOjEsImFjdGl2ZS1iZy1jb2xvciI6YGJsYWNrYCwiYWN0aXZlLWJnLW9wYWNpdHkiOi4xNSwiYWN0aXZlLWJnLXNpemUiOjMwLCJvdXRzaWRlLXRleHR1cmUtYmctY29sb3IiOmAjMDAwYCwib3V0c2lkZS10ZXh0dXJlLWJnLW9wYWNpdHkiOi4xMjUsZXZlbnRzOmB5ZXNgLCJ0ZXh0LWV2ZW50cyI6YG5vYCwidGV4dC12YWxpZ24iOmB0b3BgLCJ0ZXh0LWhhbGlnbiI6YGNlbnRlcmAsInRleHQtanVzdGlmaWNhdGlvbiI6YGF1dG9gLCJsaW5lLWhlaWdodCI6MSxjb2xvcjpgIzAwMGAsImJveC1zZWxlY3Rpb24iOmBjb250YWluYCwidGV4dC1vdXRsaW5lLWNvbG9yIjpgIzAwMGAsInRleHQtb3V0bGluZS13aWR0aCI6MCwidGV4dC1vdXRsaW5lLW9wYWNpdHkiOjEsInRleHQtb3BhY2l0eSI6MSwidGV4dC1kZWNvcmF0aW9uIjpgbm9uZWAsInRleHQtdHJhbnNmb3JtIjpgbm9uZWAsInRleHQtd3JhcCI6YG5vbmVgLCJ0ZXh0LW92ZXJmbG93LXdyYXAiOmB3aGl0ZXNwYWNlYCwidGV4dC1tYXgtd2lkdGgiOjk5OTksInRleHQtYmFja2dyb3VuZC1jb2xvciI6YCMwMDBgLCJ0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSI6MCwidGV4dC1iYWNrZ3JvdW5kLXNoYXBlIjpgcmVjdGFuZ2xlYCwidGV4dC1iYWNrZ3JvdW5kLXBhZGRpbmciOjAsInRleHQtYm9yZGVyLW9wYWNpdHkiOjAsInRleHQtYm9yZGVyLXdpZHRoIjowLCJ0ZXh0LWJvcmRlci1zdHlsZSI6YHNvbGlkYCwidGV4dC1ib3JkZXItY29sb3IiOmAjMDAwYCwiZm9udC1mYW1pbHkiOmBIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmYCwiZm9udC1zdHlsZSI6YG5vcm1hbGAsImZvbnQtd2VpZ2h0Ijpgbm9ybWFsYCwiZm9udC1zaXplIjoxNiwibWluLXpvb21lZC1mb250LXNpemUiOjAsInRleHQtcm90YXRpb24iOmBub25lYCwic291cmNlLXRleHQtcm90YXRpb24iOmBub25lYCwidGFyZ2V0LXRleHQtcm90YXRpb24iOmBub25lYCx2aXNpYmlsaXR5OmB2aXNpYmxlYCxkaXNwbGF5OmBlbGVtZW50YCxvcGFjaXR5OjEsInotY29tcG91bmQtZGVwdGgiOmBhdXRvYCwiei1pbmRleC1jb21wYXJlIjpgYXV0b2AsInotaW5kZXgiOjAsbGFiZWw6YGAsInRleHQtbWFyZ2luLXgiOjAsInRleHQtbWFyZ2luLXkiOjAsInNvdXJjZS1sYWJlbCI6YGAsInNvdXJjZS10ZXh0LW9mZnNldCI6MCwic291cmNlLXRleHQtbWFyZ2luLXgiOjAsInNvdXJjZS10ZXh0LW1hcmdpbi15IjowLCJ0YXJnZXQtbGFiZWwiOmBgLCJ0YXJnZXQtdGV4dC1vZmZzZXQiOjAsInRhcmdldC10ZXh0LW1hcmdpbi14IjowLCJ0YXJnZXQtdGV4dC1tYXJnaW4teSI6MCwib3ZlcmxheS1vcGFjaXR5IjowLCJvdmVybGF5LWNvbG9yIjpgIzAwMGAsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktc2hhcGUiOmByb3VuZC1yZWN0YW5nbGVgLCJvdmVybGF5LWNvcm5lci1yYWRpdXMiOmBhdXRvYCwidW5kZXJsYXktb3BhY2l0eSI6MCwidW5kZXJsYXktY29sb3IiOmAjMDAwYCwidW5kZXJsYXktcGFkZGluZyI6MTAsInVuZGVybGF5LXNoYXBlIjpgcm91bmQtcmVjdGFuZ2xlYCwidW5kZXJsYXktY29ybmVyLXJhZGl1cyI6YGF1dG9gLCJ0ZXh0LW1ldHJpY3MiOmBmb250YCwidHJhbnNpdGlvbi1wcm9wZXJ0eSI6YG5vbmVgLCJ0cmFuc2l0aW9uLWR1cmF0aW9uIjowLCJ0cmFuc2l0aW9uLWRlbGF5IjowLCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiI6YGxpbmVhcmAsImJveC1zZWxlY3QtbGFiZWxzIjpgbm9gLCJiYWNrZ3JvdW5kLWJsYWNrZW4iOjAsImJhY2tncm91bmQtY29sb3IiOmAjOTk5YCwiYmFja2dyb3VuZC1maWxsIjpgc29saWRgLCJiYWNrZ3JvdW5kLW9wYWNpdHkiOjEsImJhY2tncm91bmQtaW1hZ2UiOmBub25lYCwiYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbiI6YGFub255bW91c2AsImJhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSI6MSwiYmFja2dyb3VuZC1pbWFnZS1jb250YWlubWVudCI6YGluc2lkZWAsImJhY2tncm91bmQtaW1hZ2Utc21vb3RoaW5nIjpgeWVzYCwiYmFja2dyb3VuZC1wb3NpdGlvbi14IjpgNTAlYCwiYmFja2dyb3VuZC1wb3NpdGlvbi15IjpgNTAlYCwiYmFja2dyb3VuZC1vZmZzZXQteCI6MCwiYmFja2dyb3VuZC1vZmZzZXQteSI6MCwiYmFja2dyb3VuZC13aWR0aC1yZWxhdGl2ZS10byI6YGluY2x1ZGUtcGFkZGluZ2AsImJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvIjpgaW5jbHVkZS1wYWRkaW5nYCwiYmFja2dyb3VuZC1yZXBlYXQiOmBuby1yZXBlYXRgLCJiYWNrZ3JvdW5kLWZpdCI6YG5vbmVgLCJiYWNrZ3JvdW5kLWNsaXAiOmBub2RlYCwiYmFja2dyb3VuZC13aWR0aCI6YGF1dG9gLCJiYWNrZ3JvdW5kLWhlaWdodCI6YGF1dG9gLCJib3JkZXItY29sb3IiOmAjMDAwYCwiYm9yZGVyLW9wYWNpdHkiOjEsImJvcmRlci13aWR0aCI6MCwiYm9yZGVyLXN0eWxlIjpgc29saWRgLCJib3JkZXItZGFzaC1wYXR0ZXJuIjpbNCwyXSwiYm9yZGVyLWRhc2gtb2Zmc2V0IjowLCJib3JkZXItY2FwIjpgYnV0dGAsImJvcmRlci1qb2luIjpgbWl0ZXJgLCJib3JkZXItcG9zaXRpb24iOmBjZW50ZXJgLCJvdXRsaW5lLWNvbG9yIjpgIzk5OWAsIm91dGxpbmUtb3BhY2l0eSI6MSwib3V0bGluZS13aWR0aCI6MCwib3V0bGluZS1vZmZzZXQiOjAsIm91dGxpbmUtc3R5bGUiOmBzb2xpZGAsaGVpZ2h0OjMwLHdpZHRoOjMwLHNoYXBlOmBlbGxpcHNlYCwic2hhcGUtcG9seWdvbi1wb2ludHMiOmAtMSwgLTEsICAgMSwgLTEsICAgMSwgMSwgICAtMSwgMWAsImNvcm5lci1yYWRpdXMiOmBhdXRvYCwiYm91bmRzLWV4cGFuc2lvbiI6MCwiYmFja2dyb3VuZC1ncmFkaWVudC1kaXJlY3Rpb24iOmB0by1ib3R0b21gLCJiYWNrZ3JvdW5kLWdyYWRpZW50LXN0b3AtY29sb3JzIjpgIzk5OWAsImJhY2tncm91bmQtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnMiOmAwJWAsZ2hvc3Q6YG5vYCwiZ2hvc3Qtb2Zmc2V0LXkiOjAsImdob3N0LW9mZnNldC14IjowLCJnaG9zdC1vcGFjaXR5IjowLHBhZGRpbmc6MCwicGFkZGluZy1yZWxhdGl2ZS10byI6YHdpZHRoYCxwb3NpdGlvbjpgb3JpZ2luYCwiY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMiOmBpbmNsdWRlYCwibWluLXdpZHRoIjowLCJtaW4td2lkdGgtYmlhcy1sZWZ0IjowLCJtaW4td2lkdGgtYmlhcy1yaWdodCI6MCwibWluLWhlaWdodCI6MCwibWluLWhlaWdodC1iaWFzLXRvcCI6MCwibWluLWhlaWdodC1iaWFzLWJvdHRvbSI6MH0seyJwaWUtc2l6ZSI6YDEwMCVgLCJwaWUtaG9sZSI6MCwicGllLXN0YXJ0LWFuZ2xlIjpgMGRlZ2B9LFt7bmFtZTpgcGllLXt7aX19LWJhY2tncm91bmQtY29sb3JgLHZhbHVlOmBibGFja2B9LHtuYW1lOmBwaWUte3tpfX0tYmFja2dyb3VuZC1zaXplYCx2YWx1ZTpgMCVgfSx7bmFtZTpgcGllLXt7aX19LWJhY2tncm91bmQtb3BhY2l0eWAsdmFsdWU6MX1dLnJlZHVjZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248PVh5LnBpZUJhY2tncm91bmROO24rKyl7dmFyIHI9dC5uYW1lLnJlcGxhY2UoYHt7aX19YCxuKTtlW3JdPXQudmFsdWV9cmV0dXJuIGV9LHt9KSx7InN0cmlwZS1zaXplIjpgMTAwJWAsInN0cmlwZS1kaXJlY3Rpb24iOmBob3Jpem9udGFsYH0sW3tuYW1lOmBzdHJpcGUte3tpfX0tYmFja2dyb3VuZC1jb2xvcmAsdmFsdWU6YGJsYWNrYH0se25hbWU6YHN0cmlwZS17e2l9fS1iYWNrZ3JvdW5kLXNpemVgLHZhbHVlOmAwJWB9LHtuYW1lOmBzdHJpcGUte3tpfX0tYmFja2dyb3VuZC1vcGFjaXR5YCx2YWx1ZToxfV0ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjw9WHkuc3RyaXBlQmFja2dyb3VuZE47bisrKXt2YXIgcj10Lm5hbWUucmVwbGFjZShge3tpfX1gLG4pO2Vbcl09dC52YWx1ZX1yZXR1cm4gZX0se30pLHsibGluZS1zdHlsZSI6YHNvbGlkYCwibGluZS1jb2xvciI6YCM5OTlgLCJsaW5lLWZpbGwiOmBzb2xpZGAsImxpbmUtY2FwIjpgYnV0dGAsImxpbmUtb3BhY2l0eSI6MSwibGluZS1vdXRsaW5lLXdpZHRoIjowLCJsaW5lLW91dGxpbmUtY29sb3IiOmAjMDAwYCwibGluZS1ncmFkaWVudC1zdG9wLWNvbG9ycyI6YCM5OTlgLCJsaW5lLWdyYWRpZW50LXN0b3AtcG9zaXRpb25zIjpgMCVgLCJjb250cm9sLXBvaW50LXN0ZXAtc2l6ZSI6NDAsImNvbnRyb2wtcG9pbnQtd2VpZ2h0cyI6LjUsInNlZ21lbnQtd2VpZ2h0cyI6LjUsInNlZ21lbnQtZGlzdGFuY2VzIjoyMCwic2VnbWVudC1yYWRpaSI6MTUsInJhZGl1cy10eXBlIjpgYXJjLXJhZGl1c2AsInRheGktdHVybiI6YDUwJWAsInRheGktcmFkaXVzIjoxNSwidGF4aS10dXJuLW1pbi1kaXN0YW5jZSI6MTAsInRheGktZGlyZWN0aW9uIjpgYXV0b2AsImVkZ2UtZGlzdGFuY2VzIjpgaW50ZXJzZWN0aW9uYCwiY3VydmUtc3R5bGUiOmBoYXlzdGFja2AsImhheXN0YWNrLXJhZGl1cyI6MCwiYXJyb3ctc2NhbGUiOjEsImxvb3AtZGlyZWN0aW9uIjpgLTQ1ZGVnYCwibG9vcC1zd2VlcCI6YC05MGRlZ2AsInNvdXJjZS1kaXN0YW5jZS1mcm9tLW5vZGUiOjAsInRhcmdldC1kaXN0YW5jZS1mcm9tLW5vZGUiOjAsInNvdXJjZS1lbmRwb2ludCI6YG91dHNpZGUtdG8tbm9kZWAsInRhcmdldC1lbmRwb2ludCI6YG91dHNpZGUtdG8tbm9kZWAsImxpbmUtZGFzaC1wYXR0ZXJuIjpbNiwzXSwibGluZS1kYXNoLW9mZnNldCI6MH0sW3tuYW1lOmBhcnJvdy1zaGFwZWAsdmFsdWU6YG5vbmVgfSx7bmFtZTpgYXJyb3ctY29sb3JgLHZhbHVlOmAjOTk5YH0se25hbWU6YGFycm93LWZpbGxgLHZhbHVlOmBmaWxsZWRgfSx7bmFtZTpgYXJyb3ctd2lkdGhgLHZhbHVlOjF9XS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gWHkuYXJyb3dQcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciByPW4rYC1gK3QubmFtZTtlW3JdPXQudmFsdWV9KSxlfSx7fSkpLG49e30scj0wO3I8dGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDtyKyspe3ZhciBpPXRoaXMucHJvcGVydGllc1tyXTtpZighaS5wb2ludHNUbyl7dmFyIGE9aS5uYW1lLG89dFthXTtuW2FdPXRoaXMucGFyc2UoYSxvKX19cmV0dXJuIGUuZGVmYXVsdFByb3BlcnRpZXM9bixlLmRlZmF1bHRQcm9wZXJ0aWVzfSxYeS5hZGREZWZhdWx0U3R5bGVzaGVldD1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IoYDpwYXJlbnRgKS5jc3Moe3NoYXBlOmByZWN0YW5nbGVgLHBhZGRpbmc6MTAsImJhY2tncm91bmQtY29sb3IiOmAjZWVlYCwiYm9yZGVyLWNvbG9yIjpgI2NjY2AsImJvcmRlci13aWR0aCI6MX0pLnNlbGVjdG9yKGBlZGdlYCkuY3NzKHt3aWR0aDozfSkuc2VsZWN0b3IoYDpsb29wYCkuY3NzKHsiY3VydmUtc3R5bGUiOmBiZXppZXJgfSkuc2VsZWN0b3IoYGVkZ2U6Y29tcG91bmRgKS5jc3MoeyJjdXJ2ZS1zdHlsZSI6YGJlemllcmAsInNvdXJjZS1lbmRwb2ludCI6YG91dHNpZGUtdG8tbGluZWAsInRhcmdldC1lbmRwb2ludCI6YG91dHNpZGUtdG8tbGluZWB9KS5zZWxlY3RvcihgOnNlbGVjdGVkYCkuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6YCMwMTY5RDlgLCJsaW5lLWNvbG9yIjpgIzAxNjlEOWAsInNvdXJjZS1hcnJvdy1jb2xvciI6YCMwMTY5RDlgLCJ0YXJnZXQtYXJyb3ctY29sb3IiOmAjMDE2OUQ5YCwibWlkLXNvdXJjZS1hcnJvdy1jb2xvciI6YCMwMTY5RDlgLCJtaWQtdGFyZ2V0LWFycm93LWNvbG9yIjpgIzAxNjlEOWB9KS5zZWxlY3RvcihgOnBhcmVudDpzZWxlY3RlZGApLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOmAjQ0NFMUY5YCwiYm9yZGVyLWNvbG9yIjpgI2FlYzhlNWB9KS5zZWxlY3RvcihgOmFjdGl2ZWApLmNzcyh7Im92ZXJsYXktY29sb3IiOmBibGFja2AsIm92ZXJsYXktcGFkZGluZyI6MTAsIm92ZXJsYXktb3BhY2l0eSI6LjI1fSksdGhpcy5kZWZhdWx0TGVuZ3RoPXRoaXMubGVuZ3RofTt2YXIgWnk9e307WnkucGFyc2U9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztpZihEYyh0KSlyZXR1cm4gaS5wYXJzZUltcGxXYXJuKGUsdCxuLHIpO3ZhciBhPXI9PT1gbWFwcGluZ2B8fHI9PT0hMHx8cj09PSExfHxyPT1udWxsP2Bkb250Y2FyZWA6cixvPW4/YHRgOmBmYCxzPXh1KGUsYGArdCxvLGEpLGM9aS5wcm9wQ2FjaGU9aS5wcm9wQ2FjaGV8fFtdLGw7cmV0dXJuKGw9Y1tzXSl8fChsPWNbc109aS5wYXJzZUltcGxXYXJuKGUsdCxuLHIpKSwobnx8cj09PWBtYXBwaW5nYCkmJihsPVJ1KGwpLGwmJihsLnZhbHVlPVJ1KGwudmFsdWUpKSksbH0sWnkucGFyc2VJbXBsV2Fybj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLnBhcnNlSW1wbChlLHQsbixyKTtyZXR1cm4haSYmdCE9bnVsbCYmSXUoYFRoZSBzdHlsZSBwcm9wZXJ0eSBcYCR7ZX06ICR7dH1cYCBpcyBpbnZhbGlkYCksaSYmKGkubmFtZT09PWB3aWR0aGB8fGkubmFtZT09PWBoZWlnaHRgKSYmdD09PWBsYWJlbGAmJkl1KCJUaGUgc3R5bGUgdmFsdWUgb2YgYGxhYmVsYCBpcyBkZXByZWNhdGVkIGZvciBgIitpLm5hbWUrImAiKSxpfSxaeS5wYXJzZUltcGw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcztlPUdjKGUpO3ZhciBhPWkucHJvcGVydGllc1tlXSxvPXQscz1pLnR5cGVzO2lmKCFhfHx0PT09dm9pZCAwKXJldHVybiBudWxsO2EuYWxpYXMmJihhPWEucG9pbnRzVG8sZT1hLm5hbWUpO3ZhciBjPVoodCk7YyYmKHQ9dC50cmltKCkpO3ZhciBsPWEudHlwZTtpZighbClyZXR1cm4gbnVsbDtpZihuJiYodD09PWBgfHx0PT09bnVsbCkpcmV0dXJue25hbWU6ZSx2YWx1ZTp0LGJ5cGFzczohMCxkZWxldGVCeXBhc3M6ITB9O2lmKERjKHQpKXJldHVybntuYW1lOmUsdmFsdWU6dCxzdHJWYWx1ZTpgZm5gLG1hcHBlZDpzLmZuLGJ5cGFzczpufTt2YXIgdSxkO2lmKCEoIWN8fHJ8fHQubGVuZ3RoPDd8fHRbMV0hPT1gYWApKXtpZih0Lmxlbmd0aD49NyYmdFswXT09PWBkYCYmKHU9bmV3IFJlZ0V4cChzLmRhdGEucmVnZXgpLmV4ZWModCkpKXtpZihuKXJldHVybiExO3ZhciBmPXMuZGF0YTtyZXR1cm57bmFtZTplLHZhbHVlOnUsc3RyVmFsdWU6YGArdCxtYXBwZWQ6ZixmaWVsZDp1WzFdLGJ5cGFzczpufX1pZih0Lmxlbmd0aD49MTAmJnRbMF09PT1gbWAmJihkPW5ldyBSZWdFeHAocy5tYXBEYXRhLnJlZ2V4KS5leGVjKHQpKSl7aWYobnx8bC5tdWx0aXBsZSlyZXR1cm4hMTt2YXIgcD1zLm1hcERhdGE7aWYoIShsLmNvbG9yfHxsLm51bWJlcikpcmV0dXJuITE7dmFyIG09dGhpcy5wYXJzZShlLGRbNF0pO2lmKCFtfHxtLm1hcHBlZClyZXR1cm4hMTt2YXIgaD10aGlzLnBhcnNlKGUsZFs1XSk7aWYoIWh8fGgubWFwcGVkKXJldHVybiExO2lmKG0ucGZWYWx1ZT09PWgucGZWYWx1ZXx8bS5zdHJWYWx1ZT09PWguc3RyVmFsdWUpcmV0dXJuIEl1KCJgIitlK2A6IGArdCsiYCBpcyBub3QgYSB2YWxpZCBtYXBwZXIgYmVjYXVzZSB0aGUgb3V0cHV0IHJhbmdlIGlzIHplcm87IGNvbnZlcnRpbmcgdG8gYCIrZStgOiBgK20uc3RyVmFsdWUrImAiKSx0aGlzLnBhcnNlKGUsbS5zdHJWYWx1ZSk7aWYobC5jb2xvcil7dmFyIGc9bS52YWx1ZSxfPWgudmFsdWU7aWYoZ1swXT09PV9bMF0mJmdbMV09PT1fWzFdJiZnWzJdPT09X1syXSYmKGdbM109PT1fWzNdfHwoZ1szXT09bnVsbHx8Z1szXT09PTEpJiYoX1szXT09bnVsbHx8X1szXT09PTEpKSlyZXR1cm4hMX1yZXR1cm57bmFtZTplLHZhbHVlOmQsc3RyVmFsdWU6YGArdCxtYXBwZWQ6cCxmaWVsZDpkWzFdLGZpZWxkTWluOnBhcnNlRmxvYXQoZFsyXSksZmllbGRNYXg6cGFyc2VGbG9hdChkWzNdKSx2YWx1ZU1pbjptLnZhbHVlLHZhbHVlTWF4OmgudmFsdWUsYnlwYXNzOm59fX1pZihsLm11bHRpcGxlJiZyIT09YG11bHRpcGxlYCl7dmFyIHY9Yz90LnNwbGl0KC9ccysvKTpPYyh0KT90Olt0XTtpZihsLmV2ZW5NdWx0aXBsZSYmdi5sZW5ndGglMiE9MClyZXR1cm4gbnVsbDtmb3IodmFyIHk9W10sYj1bXSx4PVtdLFM9YGAsQz0hMSx3PTA7dzx2Lmxlbmd0aDt3Kyspe3ZhciBUPWkucGFyc2UoZSx2W3ddLG4sYG11bHRpcGxlYCk7Q3x8PVooVC52YWx1ZSkseS5wdXNoKFQudmFsdWUpLHgucHVzaChULnBmVmFsdWU9PW51bGw/VC52YWx1ZTpULnBmVmFsdWUpLGIucHVzaChULnVuaXRzKSxTKz0odz4wP2AgYDpgYCkrVC5zdHJWYWx1ZX1yZXR1cm4gbC52YWxpZGF0ZSYmIWwudmFsaWRhdGUoeSxiKT9udWxsOmwuc2luZ2xlRW51bSYmQz95Lmxlbmd0aD09PTEmJlooeVswXSk/e25hbWU6ZSx2YWx1ZTp5WzBdLHN0clZhbHVlOnlbMF0sYnlwYXNzOm59Om51bGw6e25hbWU6ZSx2YWx1ZTp5LHBmVmFsdWU6eCxzdHJWYWx1ZTpTLGJ5cGFzczpuLHVuaXRzOmJ9fXZhciBFPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjxsLmVudW1zLmxlbmd0aDtyKyspaWYobC5lbnVtc1tyXT09PXQpcmV0dXJue25hbWU6ZSx2YWx1ZTp0LHN0clZhbHVlOmBgK3QsYnlwYXNzOm59O3JldHVybiBudWxsfTtpZihsLm51bWJlcil7dmFyIEQsTz1gcHhgO2lmKGwudW5pdHMmJihEPWwudW5pdHMpLGwuaW1wbGljaXRVbml0cyYmKE89bC5pbXBsaWNpdFVuaXRzKSwhbC51bml0bGVzcyl7aWYoYyl7dmFyIGs9YHB4fGVtYCsobC5hbGxvd1BlcmNlbnQ/YHxcXCVgOmBgKTtEJiYoaz1EKTt2YXIgQT10Lm1hdGNoKGBeKGArWGMrYCkoYCtrK2ApPyRgKTtBJiYodD1BWzFdLEQ9QVsyXXx8Tyl9ZWxzZSghRHx8bC5pbXBsaWNpdFVuaXRzKSYmKEQ9Tyl9aWYodD1wYXJzZUZsb2F0KHQpLGlzTmFOKHQpJiZsLmVudW1zPT09dm9pZCAwKXJldHVybiBudWxsO2lmKGlzTmFOKHQpJiZsLmVudW1zIT09dm9pZCAwKXJldHVybiB0PW8sRSgpO2lmKGwuaW50ZWdlciYmIWpjKHQpfHxsLm1pbiE9PXZvaWQgMCYmKHQ8bC5taW58fGwuc3RyaWN0TWluJiZ0PT09bC5taW4pfHxsLm1heCE9PXZvaWQgMCYmKHQ+bC5tYXh8fGwuc3RyaWN0TWF4JiZ0PT09bC5tYXgpKXJldHVybiBudWxsO3ZhciBqPXtuYW1lOmUsdmFsdWU6dCxzdHJWYWx1ZTpgYCt0KyhEfHxgYCksdW5pdHM6RCxieXBhc3M6bn07cmV0dXJuIGoucGZWYWx1ZT1sLnVuaXRsZXNzfHxEIT09YHB4YCYmRCE9PWBlbWB8fEQ9PT1gcHhgfHwhRD90OnRoaXMuZ2V0RW1TaXplSW5QaXhlbHMoKSp0LChEPT09YG1zYHx8RD09PWBzYCkmJihqLnBmVmFsdWU9RD09PWBtc2A/dDoxZTMqdCksKEQ9PT1gZGVnYHx8RD09PWByYWRgKSYmKGoucGZWYWx1ZT1EPT09YHJhZGA/dDpOZCh0KSksRD09PWAlYCYmKGoucGZWYWx1ZT10LzEwMCksan1pZihsLnByb3BMaXN0KXt2YXIgTT1bXSxOPWBgK3Q7aWYoTiE9PWBub25lYCl7Zm9yKHZhciBQPU4uc3BsaXQoL1xzKixccyp8XHMrLyksRj0wO0Y8UC5sZW5ndGg7RisrKXt2YXIgST1QW0ZdLnRyaW0oKTtpLnByb3BlcnRpZXNbSV0/TS5wdXNoKEkpOkl1KCJgIitJKyJgIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG5hbWUiKX1pZihNLmxlbmd0aD09PTApcmV0dXJuIG51bGx9cmV0dXJue25hbWU6ZSx2YWx1ZTpNLHN0clZhbHVlOk0ubGVuZ3RoPT09MD9gbm9uZWA6TS5qb2luKGAgYCksYnlwYXNzOm59fWlmKGwuY29sb3Ipe3ZhciBMPXVsKHQpO3JldHVybiBMP3tuYW1lOmUsdmFsdWU6TCxwZlZhbHVlOkwsc3RyVmFsdWU6YHJnYihgK0xbMF0rYCxgK0xbMV0rYCxgK0xbMl0rYClgLGJ5cGFzczpufTpudWxsfWlmKGwucmVnZXh8fGwucmVnZXhlcyl7aWYobC5lbnVtcyl7dmFyIFI9RSgpO2lmKFIpcmV0dXJuIFJ9Zm9yKHZhciB6PWwucmVnZXhlcz9sLnJlZ2V4ZXM6W2wucmVnZXhdLEI9MDtCPHoubGVuZ3RoO0IrKyl7dmFyIFY9bmV3IFJlZ0V4cCh6W0JdKS5leGVjKHQpO2lmKFYpcmV0dXJue25hbWU6ZSx2YWx1ZTpsLnNpbmdsZVJlZ2V4TWF0Y2hWYWx1ZT9WWzFdOlYsc3RyVmFsdWU6YGArdCxieXBhc3M6bn19cmV0dXJuIG51bGx9cmV0dXJuIGwuc3RyaW5nP3tuYW1lOmUsdmFsdWU6YGArdCxzdHJWYWx1ZTpgYCt0LGJ5cGFzczpufTpsLmVudW1zP0UoKTpudWxsfTt2YXIgUXk9ZnVuY3Rpb24oZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgUXkpKXJldHVybiBuZXcgUXkoZSk7SWMoZSk/KHRoaXMuX3ByaXZhdGU9e2N5OmUsY29yZVN0eWxlOnt9fSx0aGlzLmxlbmd0aD0wLHRoaXMucmVzZXRUb0RlZmF1bHQoKSk6UHUoYEEgc3R5bGUgbXVzdCBoYXZlIGEgY29yZSByZWZlcmVuY2VgKX0sJHk9UXkucHJvdG90eXBlOyR5Lmluc3RhbmNlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYHN0eWxlYH0sJHkuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fcHJpdmF0ZSx0PWUuY3kuZWxlbWVudHMoKSxuPTA7bjx0aGlzLmxlbmd0aDtuKyspdGhpc1tuXT12b2lkIDA7cmV0dXJuIHRoaXMubGVuZ3RoPTAsZS5jb250ZXh0U3R5bGVzPXt9LGUucHJvcERpZmZzPXt9LHRoaXMuY2xlYW5FbGVtZW50cyh0LCEwKSx0LmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS5fcHJpdmF0ZTt0LnN0eWxlRGlydHk9ITAsdC5hcHBsaWVkSW5pdFN0eWxlPSExfSksdGhpc30sJHkucmVzZXRUb0RlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMuYWRkRGVmYXVsdFN0eWxlc2hlZXQoKSx0aGlzfSwkeS5jb3JlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVtlXXx8dGhpcy5nZXREZWZhdWx0UHJvcGVydHkoZSl9LCR5LnNlbGVjdG9yPWZ1bmN0aW9uKGUpe3ZhciB0PWU9PT1gY29yZWA/bnVsbDpuZXcgUF8oZSksbj10aGlzLmxlbmd0aCsrO3JldHVybiB0aGlzW25dPXtzZWxlY3Rvcjp0LHByb3BlcnRpZXM6W10sbWFwcGVkUHJvcGVydGllczpbXSxpbmRleDpufSx0aGlzfSwkeS5jc3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzO2lmKHQubGVuZ3RoPT09MSlmb3IodmFyIG49dFswXSxyPTA7cjxlLnByb3BlcnRpZXMubGVuZ3RoO3IrKyl7dmFyIGk9ZS5wcm9wZXJ0aWVzW3JdLGE9bltpLm5hbWVdO2E9PT12b2lkIDAmJihhPW5bS2MoaS5uYW1lKV0pLGEhPT12b2lkIDAmJnRoaXMuY3NzUnVsZShpLm5hbWUsYSl9ZWxzZSB0Lmxlbmd0aD09PTImJnRoaXMuY3NzUnVsZSh0WzBdLHRbMV0pO3JldHVybiB0aGlzfSwkeS5zdHlsZT0keS5jc3MsJHkuY3NzUnVsZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMucGFyc2UoZSx0KTtpZihuKXt2YXIgcj10aGlzLmxlbmd0aC0xO3RoaXNbcl0ucHJvcGVydGllcy5wdXNoKG4pLHRoaXNbcl0ucHJvcGVydGllc1tuLm5hbWVdPW4sbi5uYW1lLm1hdGNoKC9waWUtKFxkKyktYmFja2dyb3VuZC1zaXplLykmJm4udmFsdWUmJih0aGlzLl9wcml2YXRlLmhhc1BpZT0hMCksbi5uYW1lLm1hdGNoKC9zdHJpcGUtKFxkKyktYmFja2dyb3VuZC1zaXplLykmJm4udmFsdWUmJih0aGlzLl9wcml2YXRlLmhhc1N0cmlwZT0hMCksbi5tYXBwZWQmJnRoaXNbcl0ubWFwcGVkUHJvcGVydGllcy5wdXNoKG4pLHRoaXNbcl0uc2VsZWN0b3J8fCh0aGlzLl9wcml2YXRlLmNvcmVTdHlsZVtuLm5hbWVdPW4pfXJldHVybiB0aGlzfSwkeS5hcHBlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIExjKGUpP2UuYXBwZW5kVG9TdHlsZSh0aGlzKTpPYyhlKT90aGlzLmFwcGVuZEZyb21Kc29uKGUpOlooZSkmJnRoaXMuYXBwZW5kRnJvbVN0cmluZyhlKSx0aGlzfSxReS5mcm9tSnNvbj1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBReShlKTtyZXR1cm4gbi5mcm9tSnNvbih0KSxufSxReS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBReShlKS5mcm9tU3RyaW5nKHQpfSxbSHksR3ksS3kscXksSnksWXksWHksWnldLmZvckVhY2goZnVuY3Rpb24oZSl7YWwoJHksZSl9KSxReS50eXBlcz0keS50eXBlcyxReS5wcm9wZXJ0aWVzPSR5LnByb3BlcnRpZXMsUXkucHJvcGVydHlHcm91cHM9JHkucHJvcGVydHlHcm91cHMsUXkucHJvcGVydHlHcm91cE5hbWVzPSR5LnByb3BlcnR5R3JvdXBOYW1lcyxReS5wcm9wZXJ0eUdyb3VwS2V5cz0keS5wcm9wZXJ0eUdyb3VwS2V5czt2YXIgZWI9e3N0eWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZ0aGlzLnNldFN0eWxlKGUpLnVwZGF0ZSgpLHRoaXMuX3ByaXZhdGUuc3R5bGV9LHNldFN0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGU7cmV0dXJuIHQuc3R5bGU9TGMoZSk/ZS5nZW5lcmF0ZVN0eWxlKHRoaXMpOk9jKGUpP1F5LmZyb21Kc29uKHRoaXMsZSk6WihlKT9ReS5mcm9tU3RyaW5nKHRoaXMsZSk6UXkodGhpcyksdC5zdHlsZX0sdXBkYXRlU3R5bGU6ZnVuY3Rpb24oKXt0aGlzLm11dGFibGVFbGVtZW50cygpLnVwZGF0ZVN0eWxlKCl9fSx0Yj1gc2luZ2xlYCxuYj17YXV0b2xvY2s6ZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLmF1dG9sb2NrPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG9sb2NrO3JldHVybiB0aGlzfSxhdXRvdW5ncmFiaWZ5OmZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5hdXRvdW5ncmFiaWZ5PSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bmdyYWJpZnk7cmV0dXJuIHRoaXN9LGF1dG91bnNlbGVjdGlmeTpmdW5jdGlvbihlKXtpZihlIT09dm9pZCAwKXRoaXMuX3ByaXZhdGUuYXV0b3Vuc2VsZWN0aWZ5PSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmF1dG91bnNlbGVjdGlmeTtyZXR1cm4gdGhpc30sc2VsZWN0aW9uVHlwZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcml2YXRlO2lmKHQuc2VsZWN0aW9uVHlwZT8/PXRiLGUhPT12b2lkIDApKGU9PT1gYWRkaXRpdmVgfHxlPT09YHNpbmdsZWApJiYodC5zZWxlY3Rpb25UeXBlPWUpO2Vsc2UgcmV0dXJuIHQuc2VsZWN0aW9uVHlwZTtyZXR1cm4gdGhpc30scGFubmluZ0VuYWJsZWQ6ZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkO3JldHVybiB0aGlzfSx1c2VyUGFubmluZ0VuYWJsZWQ6ZnVuY3Rpb24oZSl7aWYoZSE9PXZvaWQgMCl0aGlzLl9wcml2YXRlLnVzZXJQYW5uaW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS51c2VyUGFubmluZ0VuYWJsZWQ7cmV0dXJuIHRoaXN9LHpvb21pbmdFbmFibGVkOmZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZD0hIWU7ZWxzZSByZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZDtyZXR1cm4gdGhpc30sdXNlclpvb21pbmdFbmFibGVkOmZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS51c2VyWm9vbWluZ0VuYWJsZWQ9ISFlO2Vsc2UgcmV0dXJuIHRoaXMuX3ByaXZhdGUudXNlclpvb21pbmdFbmFibGVkO3JldHVybiB0aGlzfSxib3hTZWxlY3Rpb25FbmFibGVkOmZ1bmN0aW9uKGUpe2lmKGUhPT12b2lkIDApdGhpcy5fcHJpdmF0ZS5ib3hTZWxlY3Rpb25FbmFibGVkPSEhZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLmJveFNlbGVjdGlvbkVuYWJsZWQ7cmV0dXJuIHRoaXN9LHBhbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cyx0PXRoaXMuX3ByaXZhdGUucGFuLG4scixpLGEsbztzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gdDtjYXNlIDE6aWYoWihlWzBdKSlyZXR1cm4gbj1lWzBdLHRbbl07aWYoa2MoZVswXSkpe2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO2k9ZVswXSxhPWkueCxvPWkueSxRKGEpJiYodC54PWEpLFEobykmJih0Lnk9byksdGhpcy5lbWl0KGBwYW4gdmlld3BvcnRgKX1icmVhaztjYXNlIDI6aWYoIXRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQpcmV0dXJuIHRoaXM7bj1lWzBdLHI9ZVsxXSwobj09PWB4YHx8bj09PWB5YCkmJlEocikmJih0W25dPXIpLHRoaXMuZW1pdChgcGFuIHZpZXdwb3J0YCl9cmV0dXJuIHRoaXMubm90aWZ5KGB2aWV3cG9ydGApLHRoaXN9LHBhbkJ5OmZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLHI9dGhpcy5fcHJpdmF0ZS5wYW4saSxhLG8scyxjO2lmKCF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkKXJldHVybiB0aGlzO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOmtjKGUpJiYobz1uWzBdLHM9by54LGM9by55LFEocykmJihyLngrPXMpLFEoYykmJihyLnkrPWMpLHRoaXMuZW1pdChgcGFuIHZpZXdwb3J0YCkpO2JyZWFrO2Nhc2UgMjppPWUsYT10LChpPT09YHhgfHxpPT09YHlgKSYmUShhKSYmKHJbaV0rPWEpLHRoaXMuZW1pdChgcGFuIHZpZXdwb3J0YCl9cmV0dXJuIHRoaXMubm90aWZ5KGB2aWV3cG9ydGApLHRoaXN9LGdjOmZ1bmN0aW9uKCl7dGhpcy5ub3RpZnkoYGdjYCl9LGZpdDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0Rml0Vmlld3BvcnQoZSx0KTtpZihuKXt2YXIgcj10aGlzLl9wcml2YXRlO3Iuem9vbT1uLnpvb20sci5wYW49bi5wYW4sdGhpcy5lbWl0KGBwYW4gem9vbSB2aWV3cG9ydGApLHRoaXMubm90aWZ5KGB2aWV3cG9ydGApfXJldHVybiB0aGlzfSxnZXRGaXRWaWV3cG9ydDpmdW5jdGlvbihlLHQpe2lmKFEoZSkmJnQ9PT12b2lkIDAmJih0PWUsZT12b2lkIDApLHRoaXMuX3ByaXZhdGUucGFubmluZ0VuYWJsZWQmJnRoaXMuX3ByaXZhdGUuem9vbWluZ0VuYWJsZWQpe3ZhciBuO2lmKFooZSkpe3ZhciByPWU7ZT10aGlzLiQocil9ZWxzZSBpZihWYyhlKSl7dmFyIGk9ZTtuPXt4MTppLngxLHkxOmkueTEseDI6aS54Mix5MjppLnkyfSxuLnc9bi54Mi1uLngxLG4uaD1uLnkyLW4ueTF9ZWxzZSBOYyhlKXx8KGU9dGhpcy5tdXRhYmxlRWxlbWVudHMoKSk7aWYoIShOYyhlKSYmZS5lbXB0eSgpKSl7bnx8PWUuYm91bmRpbmdCb3goKTt2YXIgYT10aGlzLndpZHRoKCksbz10aGlzLmhlaWdodCgpLHM7aWYodD1RKHQpP3Q6MCwhaXNOYU4oYSkmJiFpc05hTihvKSYmYT4wJiZvPjAmJiFpc05hTihuLncpJiYhaXNOYU4obi5oKSYmbi53PjAmJm4uaD4wKXtzPU1hdGgubWluKChhLTIqdCkvbi53LChvLTIqdCkvbi5oKSxzPXM+dGhpcy5fcHJpdmF0ZS5tYXhab29tP3RoaXMuX3ByaXZhdGUubWF4Wm9vbTpzLHM9czx0aGlzLl9wcml2YXRlLm1pblpvb20/dGhpcy5fcHJpdmF0ZS5taW5ab29tOnM7dmFyIGM9e3g6KGEtcyoobi54MStuLngyKSkvMix5OihvLXMqKG4ueTErbi55MikpLzJ9O3JldHVybnt6b29tOnMscGFuOmN9fX19fSx6b29tUmFuZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9wcml2YXRlO2lmKHQ9PW51bGwpe3ZhciByPWU7ZT1yLm1pbix0PXIubWF4fXJldHVybiBRKGUpJiZRKHQpJiZlPD10PyhuLm1pblpvb209ZSxuLm1heFpvb209dCk6UShlKSYmdD09PXZvaWQgMCYmZTw9bi5tYXhab29tP24ubWluWm9vbT1lOlEodCkmJmU9PT12b2lkIDAmJnQ+PW4ubWluWm9vbSYmKG4ubWF4Wm9vbT10KSx0aGlzfSxtaW5ab29tOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwP3RoaXMuX3ByaXZhdGUubWluWm9vbTp0aGlzLnpvb21SYW5nZSh7bWluOmV9KX0sbWF4Wm9vbTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMD90aGlzLl9wcml2YXRlLm1heFpvb206dGhpcy56b29tUmFuZ2Uoe21heDplfSl9LGdldFpvb21lZFZpZXdwb3J0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGUsbj10LnBhbixyPXQuem9vbSxpLGEsbz0hMTtpZih0Lnpvb21pbmdFbmFibGVkfHwobz0hMCksUShlKT9hPWU6a2MoZSkmJihhPWUubGV2ZWwsZS5wb3NpdGlvbj09bnVsbD9lLnJlbmRlcmVkUG9zaXRpb24hPW51bGwmJihpPWUucmVuZGVyZWRQb3NpdGlvbik6aT13ZChlLnBvc2l0aW9uLHIsbiksaSE9bnVsbCYmIXQucGFubmluZ0VuYWJsZWQmJihvPSEwKSksYT1hPnQubWF4Wm9vbT90Lm1heFpvb206YSxhPWE8dC5taW5ab29tP3QubWluWm9vbTphLG98fCFRKGEpfHxhPT09cnx8aSE9bnVsbCYmKCFRKGkueCl8fCFRKGkueSkpKXJldHVybiBudWxsO2lmKGkhPW51bGwpe3ZhciBzPW4sYz1yLGw9YTtyZXR1cm57em9vbWVkOiEwLHBhbm5lZDohMCx6b29tOmwscGFuOnt4Oi1sL2MqKGkueC1zLngpK2kueCx5Oi1sL2MqKGkueS1zLnkpK2kueX19fXJldHVybnt6b29tZWQ6ITAscGFubmVkOiExLHpvb206YSxwYW46bn19LHpvb206ZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMClyZXR1cm4gdGhpcy5fcHJpdmF0ZS56b29tO3ZhciB0PXRoaXMuZ2V0Wm9vbWVkVmlld3BvcnQoZSksbj10aGlzLl9wcml2YXRlO3JldHVybiB0PT1udWxsfHwhdC56b29tZWR8fChuLnpvb209dC56b29tLHQucGFubmVkJiYobi5wYW4ueD10LnBhbi54LG4ucGFuLnk9dC5wYW4ueSksdGhpcy5lbWl0KGB6b29tYCsodC5wYW5uZWQ/YCBwYW5gOmBgKStgIHZpZXdwb3J0YCksdGhpcy5ub3RpZnkoYHZpZXdwb3J0YCkpLHRoaXN9LHZpZXdwb3J0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ByaXZhdGUsbj0hMCxyPSEwLGk9W10sYT0hMSxvPSExO2lmKCFlfHwoUShlLnpvb20pfHwobj0hMSksa2MoZS5wYW4pfHwocj0hMSksIW4mJiFyKSlyZXR1cm4gdGhpcztpZihuKXt2YXIgcz1lLnpvb207czx0Lm1pblpvb218fHM+dC5tYXhab29tfHwhdC56b29taW5nRW5hYmxlZD9hPSEwOih0Lnpvb209cyxpLnB1c2goYHpvb21gKSl9aWYociYmKCFhfHwhZS5jYW5jZWxPbkZhaWxlZFpvb20pJiZ0LnBhbm5pbmdFbmFibGVkKXt2YXIgYz1lLnBhbjtRKGMueCkmJih0LnBhbi54PWMueCxvPSExKSxRKGMueSkmJih0LnBhbi55PWMueSxvPSExKSxvfHxpLnB1c2goYHBhbmApfXJldHVybiBpLmxlbmd0aD4wJiYoaS5wdXNoKGB2aWV3cG9ydGApLHRoaXMuZW1pdChpLmpvaW4oYCBgKSksdGhpcy5ub3RpZnkoYHZpZXdwb3J0YCkpLHRoaXN9LGNlbnRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldENlbnRlclBhbihlKTtyZXR1cm4gdCYmKHRoaXMuX3ByaXZhdGUucGFuPXQsdGhpcy5lbWl0KGBwYW4gdmlld3BvcnRgKSx0aGlzLm5vdGlmeShgdmlld3BvcnRgKSksdGhpc30sZ2V0Q2VudGVyUGFuOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5fcHJpdmF0ZS5wYW5uaW5nRW5hYmxlZCl7aWYoWihlKSl7dmFyIG49ZTtlPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkuZmlsdGVyKG4pfWVsc2UgTmMoZSl8fChlPXRoaXMubXV0YWJsZUVsZW1lbnRzKCkpO2lmKGUubGVuZ3RoIT09MCl7dmFyIHI9ZS5ib3VuZGluZ0JveCgpLGk9dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdD10PT09dm9pZCAwP3RoaXMuX3ByaXZhdGUuem9vbTp0LHt4OihpLXQqKHIueDErci54MikpLzIseTooYS10KihyLnkxK3IueTIpKS8yfX19fSxyZXNldDpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9wcml2YXRlLnBhbm5pbmdFbmFibGVkfHwhdGhpcy5fcHJpdmF0ZS56b29taW5nRW5hYmxlZHx8dGhpcy52aWV3cG9ydCh7cGFuOnt4OjAseTowfSx6b29tOjF9KSx0aGlzfSxpbnZhbGlkYXRlU2l6ZTpmdW5jdGlvbigpe3RoaXMuX3ByaXZhdGUuc2l6ZUNhY2hlPW51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcml2YXRlLHQ9ZS5jb250YWluZXIsbj10aGlzO3JldHVybiBlLnNpemVDYWNoZT1lLnNpemVDYWNoZXx8KHQ/ZnVuY3Rpb24oKXt2YXIgZT1uLndpbmRvdygpLmdldENvbXB1dGVkU3R5bGUodCkscj1mdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdChlLmdldFByb3BlcnR5VmFsdWUodCkpfTtyZXR1cm57d2lkdGg6dC5jbGllbnRXaWR0aC1yKGBwYWRkaW5nLWxlZnRgKS1yKGBwYWRkaW5nLXJpZ2h0YCksaGVpZ2h0OnQuY2xpZW50SGVpZ2h0LXIoYHBhZGRpbmctdG9wYCktcihgcGFkZGluZy1ib3R0b21gKX19KCk6e3dpZHRoOjEsaGVpZ2h0OjF9KX0sd2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplKCkud2lkdGh9LGhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemUoKS5oZWlnaHR9LGV4dGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByaXZhdGUucGFuLHQ9dGhpcy5fcHJpdmF0ZS56b29tLG49dGhpcy5yZW5kZXJlZEV4dGVudCgpLHI9e3gxOihuLngxLWUueCkvdCx4Mjoobi54Mi1lLngpL3QseTE6KG4ueTEtZS55KS90LHkyOihuLnkyLWUueSkvdH07cmV0dXJuIHIudz1yLngyLXIueDEsci5oPXIueTItci55MSxyfSxyZW5kZXJlZEV4dGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMud2lkdGgoKSx0PXRoaXMuaGVpZ2h0KCk7cmV0dXJue3gxOjAseTE6MCx4MjplLHkyOnQsdzplLGg6dH19LG11bHRpQ2xpY2tEZWJvdW5jZVRpbWU6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU9ZTtlbHNlIHJldHVybiB0aGlzLl9wcml2YXRlLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWU7cmV0dXJuIHRoaXN9fTtuYi5jZW50cmU9bmIuY2VudGVyLG5iLmF1dG9sb2NrTm9kZXM9bmIuYXV0b2xvY2ssbmIuYXV0b3VuZ3JhYmlmeU5vZGVzPW5iLmF1dG91bmdyYWJpZnk7dmFyIHJiPXtkYXRhOmRfLmRhdGEoe2ZpZWxkOmBkYXRhYCxiaW5kaW5nRXZlbnQ6YGRhdGFgLGFsbG93QmluZGluZzohMCxhbGxvd1NldHRpbmc6ITAsc2V0dGluZ0V2ZW50OmBkYXRhYCxzZXR0aW5nVHJpZ2dlcnNFdmVudDohMCx0cmlnZ2VyRm5OYW1lOmB0cmlnZ2VyYCxhbGxvd0dldHRpbmc6ITAsdXBkYXRlU3R5bGU6ITB9KSxyZW1vdmVEYXRhOmRfLnJlbW92ZURhdGEoe2ZpZWxkOmBkYXRhYCxldmVudDpgZGF0YWAsdHJpZ2dlckZuTmFtZTpgdHJpZ2dlcmAsdHJpZ2dlckV2ZW50OiEwLHVwZGF0ZVN0eWxlOiEwfSksc2NyYXRjaDpkXy5kYXRhKHtmaWVsZDpgc2NyYXRjaGAsYmluZGluZ0V2ZW50OmBzY3JhdGNoYCxhbGxvd0JpbmRpbmc6ITAsYWxsb3dTZXR0aW5nOiEwLHNldHRpbmdFdmVudDpgc2NyYXRjaGAsc2V0dGluZ1RyaWdnZXJzRXZlbnQ6ITAsdHJpZ2dlckZuTmFtZTpgdHJpZ2dlcmAsYWxsb3dHZXR0aW5nOiEwLHVwZGF0ZVN0eWxlOiEwfSkscmVtb3ZlU2NyYXRjaDpkXy5yZW1vdmVEYXRhKHtmaWVsZDpgc2NyYXRjaGAsZXZlbnQ6YHNjcmF0Y2hgLHRyaWdnZXJGbk5hbWU6YHRyaWdnZXJgLHRyaWdnZXJFdmVudDohMCx1cGRhdGVTdHlsZTohMH0pfTtyYi5hdHRyPXJiLmRhdGEscmIucmVtb3ZlQXR0cj1yYi5yZW1vdmVEYXRhO3ZhciBpYj1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2U9YWwoe30sZSk7dmFyIG49ZS5jb250YWluZXI7biYmIU1jKG4pJiZNYyhuWzBdKSYmKG49blswXSk7dmFyIHI9bj9uLl9jeXJlZzpudWxsO3J8fD17fSxyJiZyLmN5JiYoci5jeS5kZXN0cm95KCkscj17fSk7dmFyIGk9ci5yZWFkaWVzPXIucmVhZGllc3x8W107biYmKG4uX2N5cmVnPXIpLHIuY3k9dDt2YXIgYT1iYyE9PXZvaWQgMCYmbiE9PXZvaWQgMCYmIWUuaGVhZGxlc3Msbz1lO28ubGF5b3V0PWFsKHtuYW1lOmE/YGdyaWRgOmBudWxsYH0sby5sYXlvdXQpLG8ucmVuZGVyZXI9YWwoe25hbWU6YT9gY2FudmFzYDpgbnVsbGB9LG8ucmVuZGVyZXIpO3ZhciBzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD09PXZvaWQgMD9uPT09dm9pZCAwP2U6bjp0fSxjPXRoaXMuX3ByaXZhdGU9e2NvbnRhaW5lcjpuLHJlYWR5OiExLG9wdGlvbnM6byxlbGVtZW50czpuZXcgdnkodGhpcyksbGlzdGVuZXJzOltdLGFuaUVsZXM6bmV3IHZ5KHRoaXMpLGRhdGE6by5kYXRhfHx7fSxzY3JhdGNoOnt9LGxheW91dDpudWxsLHJlbmRlcmVyOm51bGwsZGVzdHJveWVkOiExLG5vdGlmaWNhdGlvbnNFbmFibGVkOiEwLG1pblpvb206MWUtNTAsbWF4Wm9vbToxZTUwLHpvb21pbmdFbmFibGVkOnMoITAsby56b29taW5nRW5hYmxlZCksdXNlclpvb21pbmdFbmFibGVkOnMoITAsby51c2VyWm9vbWluZ0VuYWJsZWQpLHBhbm5pbmdFbmFibGVkOnMoITAsby5wYW5uaW5nRW5hYmxlZCksdXNlclBhbm5pbmdFbmFibGVkOnMoITAsby51c2VyUGFubmluZ0VuYWJsZWQpLGJveFNlbGVjdGlvbkVuYWJsZWQ6cyghMCxvLmJveFNlbGVjdGlvbkVuYWJsZWQpLGF1dG9sb2NrOnMoITEsby5hdXRvbG9jayxvLmF1dG9sb2NrTm9kZXMpLGF1dG91bmdyYWJpZnk6cyghMSxvLmF1dG91bmdyYWJpZnksby5hdXRvdW5ncmFiaWZ5Tm9kZXMpLGF1dG91bnNlbGVjdGlmeTpzKCExLG8uYXV0b3Vuc2VsZWN0aWZ5KSxzdHlsZUVuYWJsZWQ6by5zdHlsZUVuYWJsZWQ9PT12b2lkIDA/YTpvLnN0eWxlRW5hYmxlZCx6b29tOlEoby56b29tKT9vLnpvb206MSxwYW46e3g6a2Moby5wYW4pJiZRKG8ucGFuLngpP28ucGFuLng6MCx5OmtjKG8ucGFuKSYmUShvLnBhbi55KT9vLnBhbi55OjB9LGFuaW1hdGlvbjp7Y3VycmVudDpbXSxxdWV1ZTpbXX0saGFzQ29tcG91bmROb2RlczohMSxtdWx0aUNsaWNrRGVib3VuY2VUaW1lOnMoMjUwLG8ubXVsdGlDbGlja0RlYm91bmNlVGltZSl9O3RoaXMuY3JlYXRlRW1pdHRlcigpLHRoaXMuc2VsZWN0aW9uVHlwZShvLnNlbGVjdGlvblR5cGUpLHRoaXMuem9vbVJhbmdlKHttaW46by5taW5ab29tLG1heDpvLm1heFpvb219KTt2YXIgbD1mdW5jdGlvbihlLHQpe2lmKGUuc29tZShIYykpcmV0dXJuIGRtLmFsbChlKS50aGVuKHQpO3QoZSl9O2Muc3R5bGVFbmFibGVkJiZ0LnNldFN0eWxlKFtdKTt2YXIgdT1hbCh7fSxvLG8ucmVuZGVyZXIpO3QuaW5pdFJlbmRlcmVyKHUpO3ZhciBkPWZ1bmN0aW9uKGUsbixyKXt0Lm5vdGlmaWNhdGlvbnMoITEpO3ZhciBpPXQubXV0YWJsZUVsZW1lbnRzKCk7aS5sZW5ndGg+MCYmaS5yZW1vdmUoKSxlIT1udWxsJiYoa2MoZSl8fE9jKGUpKSYmdC5hZGQoZSksdC5vbmUoYGxheW91dHJlYWR5YCxmdW5jdGlvbihlKXt0Lm5vdGlmaWNhdGlvbnMoITApLHQuZW1pdChlKSx0Lm9uZShgbG9hZGAsbiksdC5lbWl0QW5kTm90aWZ5KGBsb2FkYCl9KS5vbmUoYGxheW91dHN0b3BgLGZ1bmN0aW9uKCl7dC5vbmUoYGRvbmVgLHIpLHQuZW1pdChgZG9uZWApfSk7dmFyIGE9YWwoe30sdC5fcHJpdmF0ZS5vcHRpb25zLmxheW91dCk7YS5lbGVzPXQuZWxlbWVudHMoKSx0LmxheW91dChhKS5ydW4oKX07bChbby5zdHlsZSxvLmVsZW1lbnRzXSxmdW5jdGlvbihlKXt2YXIgbj1lWzBdLGE9ZVsxXTtjLnN0eWxlRW5hYmxlZCYmdC5zdHlsZSgpLmFwcGVuZChuKSxkKGEsZnVuY3Rpb24oKXt0LnN0YXJ0QW5pbWF0aW9uTG9vcCgpLGMucmVhZHk9ITAsRGMoby5yZWFkeSkmJnQub24oYHJlYWR5YCxvLnJlYWR5KTtmb3IodmFyIGU9MDtlPGkubGVuZ3RoO2UrKyl7dmFyIG49aVtlXTt0Lm9uKGByZWFkeWAsbil9ciYmKHIucmVhZGllcz1bXSksdC5lbWl0KGByZWFkeWApfSxvLmRvbmUpfSl9LGFiPWliLnByb3RvdHlwZTthbChhYix7aW5zdGFuY2VTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5gY29yZWB9LGlzUmVhZHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5yZWFkeX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZGVzdHJveWVkfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pc1JlYWR5KCk/dGhpcy5lbWl0dGVyKCkuZW1pdChgcmVhZHlgLFtdLGUpOnRoaXMub24oYHJlYWR5YCxlKSx0aGlzfSxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighZS5kZXN0cm95ZWQoKSlyZXR1cm4gZS5zdG9wQW5pbWF0aW9uTG9vcCgpLGUuZGVzdHJveVJlbmRlcmVyKCksdGhpcy5lbWl0KGBkZXN0cm95YCksZS5fcHJpdmF0ZS5kZXN0cm95ZWQ9ITAsZX0saGFzRWxlbWVudFdpdGhJZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5oYXNFbGVtZW50V2l0aElkKGUpfSxnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5nZXRFbGVtZW50QnlJZChlKX0saGFzQ29tcG91bmROb2RlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmhhc0NvbXBvdW5kTm9kZXN9LGhlYWRsZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUucmVuZGVyZXIuaXNIZWFkbGVzcygpfSxzdHlsZUVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5zdHlsZUVuYWJsZWR9LGFkZFRvUG9vbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy5tZXJnZShlKSx0aGlzfSxyZW1vdmVGcm9tUG9vbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcHJpdmF0ZS5lbGVtZW50cy51bm1lcmdlKGUpLHRoaXN9LGNvbnRhaW5lcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2YXRlLmNvbnRhaW5lcnx8bnVsbH0sd2luZG93OmZ1bmN0aW9uKCl7aWYodGhpcy5fcHJpdmF0ZS5jb250YWluZXI9PW51bGwpcmV0dXJuIGJjO3ZhciBlPXRoaXMuX3ByaXZhdGUuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7cmV0dXJuIGU9PT12b2lkIDB8fGU9PW51bGw/YmM6ZS5kZWZhdWx0Vmlld3x8YmN9LG1vdW50OmZ1bmN0aW9uKGUpe2lmKGUhPW51bGwpe3ZhciB0PXRoaXMsbj10Ll9wcml2YXRlLHI9bi5vcHRpb25zO3JldHVybiFNYyhlKSYmTWMoZVswXSkmJihlPWVbMF0pLHQuc3RvcEFuaW1hdGlvbkxvb3AoKSx0LmRlc3Ryb3lSZW5kZXJlcigpLG4uY29udGFpbmVyPWUsbi5zdHlsZUVuYWJsZWQ9ITAsdC5pbnZhbGlkYXRlU2l6ZSgpLHQuaW5pdFJlbmRlcmVyKGFsKHt9LHIsci5yZW5kZXJlcix7bmFtZTpyLnJlbmRlcmVyLm5hbWU9PT1gbnVsbGA/YGNhbnZhc2A6ci5yZW5kZXJlci5uYW1lfSkpLHQuc3RhcnRBbmltYXRpb25Mb29wKCksdC5zdHlsZShyLnN0eWxlKSx0LmVtaXQoYG1vdW50YCksdH19LHVubW91bnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBlLnN0b3BBbmltYXRpb25Mb29wKCksZS5kZXN0cm95UmVuZGVyZXIoKSxlLmluaXRSZW5kZXJlcih7bmFtZTpgbnVsbGB9KSxlLmVtaXQoYHVubW91bnRgKSxlfSxvcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIFJ1KHRoaXMuX3ByaXZhdGUub3B0aW9ucyl9LGpzb246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuX3ByaXZhdGUscj10Lm11dGFibGVFbGVtZW50cygpLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0RWxlbWVudEJ5SWQoZS5pZCgpKX07aWYoa2MoZSkpe2lmKHQuc3RhcnRCYXRjaCgpLGUuZWxlbWVudHMpe3ZhciBhPXt9LG89ZnVuY3Rpb24oZSxuKXtmb3IodmFyIHI9W10saT1bXSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPWVbb107aWYoIXMuZGF0YS5pZClJdShgY3kuanNvbigpIGNhbm5vdCBoYW5kbGUgZWxlbWVudHMgd2l0aG91dCBhbiBJRCBhdHRyaWJ1dGVgKTtlbHNle3ZhciBjPWBgK3MuZGF0YS5pZCxsPXQuZ2V0RWxlbWVudEJ5SWQoYyk7YVtjXT0hMCxsLmxlbmd0aD09PTA/KG4mJihzLmdyb3VwPW4pLHIucHVzaChzKSk6aS5wdXNoKHtlbGU6bCxqc29uOnN9KX19dC5hZGQocik7Zm9yKHZhciB1PTA7dTxpLmxlbmd0aDt1Kyspe3ZhciBkPWlbdV0sZj1kLmVsZSxwPWQuanNvbjtmLmpzb24ocCl9fTtpZihPYyhlLmVsZW1lbnRzKSlvKGUuZWxlbWVudHMpO2Vsc2UgZm9yKHZhciBzPVtgbm9kZXNgLGBlZGdlc2BdLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGw9c1tjXSx1PWUuZWxlbWVudHNbbF07T2ModSkmJm8odSxsKX12YXIgZD10LmNvbGxlY3Rpb24oKTtyLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hYVtlLmlkKCldfSkuZm9yRWFjaChmdW5jdGlvbihlKXtlLmlzUGFyZW50KCk/ZC5tZXJnZShlKTplLnJlbW92ZSgpfSksZC5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNoaWxkcmVuKCkubW92ZSh7cGFyZW50Om51bGx9KX0pLGQuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gaShlKS5yZW1vdmUoKX0pfWUuc3R5bGUmJnQuc3R5bGUoZS5zdHlsZSksZS56b29tIT1udWxsJiZlLnpvb20hPT1uLnpvb20mJnQuem9vbShlLnpvb20pLGUucGFuJiYoZS5wYW4ueCE9PW4ucGFuLnh8fGUucGFuLnkhPT1uLnBhbi55KSYmdC5wYW4oZS5wYW4pLGUuZGF0YSYmdC5kYXRhKGUuZGF0YSk7Zm9yKHZhciBmPVtgbWluWm9vbWAsYG1heFpvb21gLGB6b29taW5nRW5hYmxlZGAsYHVzZXJab29taW5nRW5hYmxlZGAsYHBhbm5pbmdFbmFibGVkYCxgdXNlclBhbm5pbmdFbmFibGVkYCxgYm94U2VsZWN0aW9uRW5hYmxlZGAsYGF1dG9sb2NrYCxgYXV0b3VuZ3JhYmlmeWAsYGF1dG91bnNlbGVjdGlmeWAsYG11bHRpQ2xpY2tEZWJvdW5jZVRpbWVgXSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBtPWZbcF07ZVttXSE9bnVsbCYmdFttXShlW21dKX1yZXR1cm4gdC5lbmRCYXRjaCgpLHRoaXN9dmFyIGg9ISFlLGc9e307aD9nLmVsZW1lbnRzPXRoaXMuZWxlbWVudHMoKS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuanNvbigpfSk6KGcuZWxlbWVudHM9e30sci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ3JvdXAoKTtnLmVsZW1lbnRzW3RdfHwoZy5lbGVtZW50c1t0XT1bXSksZy5lbGVtZW50c1t0XS5wdXNoKGUuanNvbigpKX0pKSx0aGlzLl9wcml2YXRlLnN0eWxlRW5hYmxlZCYmKGcuc3R5bGU9dC5zdHlsZSgpLmpzb24oKSksZy5kYXRhPVJ1KHQuZGF0YSgpKTt2YXIgXz1uLm9wdGlvbnM7cmV0dXJuIGcuem9vbWluZ0VuYWJsZWQ9bi56b29taW5nRW5hYmxlZCxnLnVzZXJab29taW5nRW5hYmxlZD1uLnVzZXJab29taW5nRW5hYmxlZCxnLnpvb209bi56b29tLGcubWluWm9vbT1uLm1pblpvb20sZy5tYXhab29tPW4ubWF4Wm9vbSxnLnBhbm5pbmdFbmFibGVkPW4ucGFubmluZ0VuYWJsZWQsZy51c2VyUGFubmluZ0VuYWJsZWQ9bi51c2VyUGFubmluZ0VuYWJsZWQsZy5wYW49UnUobi5wYW4pLGcuYm94U2VsZWN0aW9uRW5hYmxlZD1uLmJveFNlbGVjdGlvbkVuYWJsZWQsZy5yZW5kZXJlcj1SdShfLnJlbmRlcmVyKSxnLmhpZGVFZGdlc09uVmlld3BvcnQ9Xy5oaWRlRWRnZXNPblZpZXdwb3J0LGcudGV4dHVyZU9uVmlld3BvcnQ9Xy50ZXh0dXJlT25WaWV3cG9ydCxnLndoZWVsU2Vuc2l0aXZpdHk9Xy53aGVlbFNlbnNpdGl2aXR5LGcubW90aW9uQmx1cj1fLm1vdGlvbkJsdXIsZy5tdWx0aUNsaWNrRGVib3VuY2VUaW1lPV8ubXVsdGlDbGlja0RlYm91bmNlVGltZSxnfX0pLGFiLiRpZD1hYi5nZXRFbGVtZW50QnlJZCxbYnksTXksRnksSXksTHksUnksQnksVnksZWIsbmIscmJdLmZvckVhY2goZnVuY3Rpb24oZSl7YWwoYWIsZSl9KTt2YXIgb2I9e2ZpdDohMCxkaXJlY3RlZDohMSxkaXJlY3Rpb246YGRvd253YXJkYCxwYWRkaW5nOjMwLGNpcmNsZTohMSxncmlkOiExLHNwYWNpbmdGYWN0b3I6MS43NSxib3VuZGluZ0JveDp2b2lkIDAsYXZvaWRPdmVybGFwOiEwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyb290czp2b2lkIDAsZGVwdGhTb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe3JldHVybiB0fX0sc2I9e21heGltYWw6ITEsYWN5Y2xpYzohMX0sY2I9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2NyYXRjaChgYnJlYWR0aGZpcnN0YCl9LGxiPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2NyYXRjaChgYnJlYWR0aGZpcnN0YCx0KX07ZnVuY3Rpb24gdWIoZSl7dGhpcy5vcHRpb25zPWFsKHt9LG9iLHNiLGUpfXViLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsdD1lLmN5LG49ZS5lbGVzLHI9bi5ub2RlcygpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pc0NoaWxkbGVzcygpfSksaT1uLGE9ZS5kaXJlY3RlZCxvPWUuYWN5Y2xpY3x8ZS5tYXhpbWFsfHxlLm1heGltYWxBZGp1c3RtZW50cz4wLHM9ISFlLmJvdW5kaW5nQm94LGM9V2Qocz9lLmJvdW5kaW5nQm94OnN0cnVjdHVyZWRDbG9uZSh0LmV4dGVudCgpKSksbDtpZihOYyhlLnJvb3RzKSlsPWUucm9vdHM7ZWxzZSBpZihPYyhlLnJvb3RzKSl7Zm9yKHZhciB1PVtdLGQ9MDtkPGUucm9vdHMubGVuZ3RoO2QrKyl7dmFyIGY9ZS5yb290c1tkXSxwPXQuZ2V0RWxlbWVudEJ5SWQoZik7dS5wdXNoKHApfWw9dC5jb2xsZWN0aW9uKHUpfWVsc2UgaWYoWihlLnJvb3RzKSlsPXQuJChlLnJvb3RzKTtlbHNlIGlmKGEpbD1yLnJvb3RzKCk7ZWxzZXt2YXIgbT1uLmNvbXBvbmVudHMoKTtsPXQuY29sbGVjdGlvbigpO2Zvcih2YXIgaD1mdW5jdGlvbigpe3ZhciBlPW1bZ10sdD1lLm1heERlZ3JlZSghMSksbj1lLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5kZWdyZWUoITEpPT09dH0pO2w9bC5hZGQobil9LGc9MDtnPG0ubGVuZ3RoO2crKyloKCl9dmFyIF89W10sdj17fSx5PWZ1bmN0aW9uKGUsdCl7X1t0XT8/KF9bdF09W10pO3ZhciBuPV9bdF0ubGVuZ3RoO19bdF0ucHVzaChlKSxsYihlLHtpbmRleDpuLGRlcHRoOnR9KX0sYj1mdW5jdGlvbihlLHQpe3ZhciBuPWNiKGUpLHI9bi5kZXB0aCxpPW4uaW5kZXg7X1tyXVtpXT1udWxsLGUuaXNDaGlsZGxlc3MoKSYmeShlLHQpfTtpLmJmcyh7cm9vdHM6bCxkaXJlY3RlZDplLmRpcmVjdGVkLHZpc2l0OmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGE9ZVswXSxvPWEuaWQoKTthLmlzQ2hpbGRsZXNzKCkmJnkoYSxpKSx2W29dPSEwfX0pO2Zvcih2YXIgeD1bXSxTPTA7UzxyLmxlbmd0aDtTKyspe3ZhciBDPXJbU107dltDLmlkKCldfHx4LnB1c2goQyl9dmFyIHc9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PV9bZV0sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3I9PW51bGw/KHQuc3BsaWNlKG4sMSksbi0tKTpsYihyLHtkZXB0aDplLGluZGV4Om59KX19LFQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9Y2IodCksYT10LmluY29tZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTm9kZSgpJiZuLmhhcyhlKX0pLG89LTEscz10LmlkKCksYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgbD1hW2NdLHU9Y2IobCk7bz1NYXRoLm1heChvLHUuZGVwdGgpfWlmKGkuZGVwdGg8PW8pe2lmKCFlLmFjeWNsaWMmJnJbc10pcmV0dXJuIG51bGw7dmFyIGQ9bysxO3JldHVybiBiKHQsZCkscltzXT1kLCEwfXJldHVybiExfTtpZihhJiZvKXt2YXIgRT1bXSxEPXt9LE89ZnVuY3Rpb24oZSl7cmV0dXJuIEUucHVzaChlKX0saz1mdW5jdGlvbigpe3JldHVybiBFLnNoaWZ0KCl9O2ZvcihyLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIEUucHVzaChlKX0pO0UubGVuZ3RoPjA7KXt2YXIgQT1rKCksaj1UKEEsRCk7aWYoailBLm91dGdvZXJzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzTm9kZSgpJiZuLmhhcyhlKX0pLmZvckVhY2goTyk7ZWxzZSBpZihqPT09bnVsbCl7SXUoIkRldGVjdGVkIGRvdWJsZSBtYXhpbWFsIHNoaWZ0IGZvciBub2RlIGAiK0EuaWQoKSsiYC4gIEJhaWxpbmcgbWF4aW1hbCBhZGp1c3RtZW50IGR1ZSB0byBjeWNsZS4gIFVzZSBgb3B0aW9ucy5tYXhpbWFsOiB0cnVlYCBvbmx5IG9uIERBR3MuIik7YnJlYWt9fX12YXIgTT0wO2lmKGUuYXZvaWRPdmVybGFwKWZvcih2YXIgTj0wO048ci5sZW5ndGg7TisrKXt2YXIgUD1yW05dLmxheW91dERpbWVuc2lvbnMoZSksRj1QLncsST1QLmg7TT1NYXRoLm1heChNLEYsSSl9dmFyIEw9e30sUj1mdW5jdGlvbihlKXtpZihMW2UuaWQoKV0pcmV0dXJuIExbZS5pZCgpXTtmb3IodmFyIHQ9Y2IoZSkuZGVwdGgsbj1lLm5laWdoYm9yaG9vZCgpLGk9MCxhPTAsbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dO2lmKCEocy5pc0VkZ2UoKXx8cy5pc1BhcmVudCgpfHwhci5oYXMocykpKXt2YXIgYz1jYihzKTtpZihjIT1udWxsKXt2YXIgbD1jLmluZGV4LHU9Yy5kZXB0aDtpZihsIT1udWxsJiZ1IT1udWxsKXt2YXIgZD1fW3VdLmxlbmd0aDt1PHQmJihpKz1sL2QsYSsrKX19fX1yZXR1cm4gYT1NYXRoLm1heCgxLGEpLGkvPWEsYT09PTAmJihpPTApLExbZS5pZCgpXT1pLGl9LHo9ZnVuY3Rpb24oZSx0KXt2YXIgbj1SKGUpLVIodCk7cmV0dXJuIG49PT0wP3JsKGUuaWQoKSx0LmlkKCkpOm59O2UuZGVwdGhTb3J0IT09dm9pZCAwJiYoej1lLmRlcHRoU29ydCk7Zm9yKHZhciBCPV8ubGVuZ3RoLFY9MDtWPEI7VisrKV9bVl0uc29ydCh6KSx3KFYpO2Zvcih2YXIgSD1bXSxVPTA7VTx4Lmxlbmd0aDtVKyspSC5wdXNoKHhbVV0pO0gubGVuZ3RoJiYoXy51bnNoaWZ0KEgpLEI9Xy5sZW5ndGgsZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPEI7ZSsrKXcoZSl9KCkpO2Zvcih2YXIgVz0wLGVlPTA7ZWU8QjtlZSsrKVc9TWF0aC5tYXgoX1tlZV0ubGVuZ3RoLFcpO3ZhciBHPXt4OmMueDErYy53LzIseTpjLnkxK2MuaC8yfSx0ZT1yLnJlZHVjZShmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm57dzp0Lnc9PT0tMT9lLnc6KHQudytlLncpLzIsaDp0Lmg9PT0tMT9lLmg6KHQuaCtlLmgpLzJ9fShuLmJvdW5kaW5nQm94KHtpbmNsdWRlTGFiZWxzOmUubm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzfSkpfSx7dzotMSxoOi0xfSksbmU9TWF0aC5tYXgoQj09PTE/MDpzPyhjLmgtZS5wYWRkaW5nKjItdGUuaCkvKEItMSk6KGMuaC1lLnBhZGRpbmcqMi10ZS5oKS8oQisxKSxNKSxyZT1fLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBNYXRoLm1heChlLHQubGVuZ3RoKX0sMCksaWU9ZnVuY3Rpb24odCl7dmFyIG49Y2IodCkscj1uLmRlcHRoLGk9bi5pbmRleDtpZihlLmNpcmNsZSl7dmFyIGE9TWF0aC5taW4oYy53LzIvQixjLmgvMi9CKTthPU1hdGgubWF4KGEsTSk7dmFyIG89YSpyK2EtKEI+MCYmX1swXS5sZW5ndGg8PTM/YS8yOjApLGw9MipNYXRoLlBJL19bcl0ubGVuZ3RoKmk7cmV0dXJuIHI9PT0wJiZfWzBdLmxlbmd0aD09PTEmJihvPTEpLHt4OkcueCtvKk1hdGguY29zKGwpLHk6Ry55K28qTWF0aC5zaW4obCl9fXZhciB1PV9bcl0ubGVuZ3RoLGQ9TWF0aC5tYXgodT09PTE/MDpzPyhjLnctZS5wYWRkaW5nKjItdGUudykvKChlLmdyaWQ/cmU6dSktMSk6KGMudy1lLnBhZGRpbmcqMi10ZS53KS8oKGUuZ3JpZD9yZTp1KSsxKSxNKTtyZXR1cm57eDpHLngrKGkrMS0odSsxKS8yKSpkLHk6Ry55KyhyKzEtKEIrMSkvMikqbmV9fSxhZT17ZG93bndhcmQ6MCxsZWZ0d2FyZDo5MCx1cHdhcmQ6MTgwLHJpZ2h0d2FyZDotOTB9O3JldHVybiBPYmplY3Qua2V5cyhhZSkuaW5kZXhPZihlLmRpcmVjdGlvbik9PT0tMSYmUHUoYEludmFsaWQgZGlyZWN0aW9uICcke2UuZGlyZWN0aW9ufScgc3BlY2lmaWVkIGZvciBicmVhZHRoZmlyc3QgbGF5b3V0LiBWYWxpZCB2YWx1ZXMgYXJlOiAke09iamVjdC5rZXlzKGFlKS5qb2luKGAsIGApfWApLG4ubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyxlLGZ1bmN0aW9uKHQpe3JldHVybiBUdShpZSh0KSxjLGFlW2UuZGlyZWN0aW9uXSl9KSx0aGlzfTt2YXIgZGI9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiExLHNwYWNpbmdGYWN0b3I6dm9pZCAwLHJhZGl1czp2b2lkIDAsc3RhcnRBbmdsZTozLzIqTWF0aC5QSSxzd2VlcDp2b2lkIDAsY2xvY2t3aXNlOiEwLHNvcnQ6dm9pZCAwLGFuaW1hdGU6ITEsYW5pbWF0aW9uRHVyYXRpb246NTAwLGFuaW1hdGlvbkVhc2luZzp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiEwfSxyZWFkeTp2b2lkIDAsc3RvcDp2b2lkIDAsdHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBmYihlKXt0aGlzLm9wdGlvbnM9YWwoe30sZGIsZSl9ZmIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyx0PWUsbj1lLmN5LHI9dC5lbGVzLGk9dC5jb3VudGVyY2xvY2t3aXNlPT09dm9pZCAwP3QuY2xvY2t3aXNlOiF0LmNvdW50ZXJjbG9ja3dpc2UsYT1yLm5vZGVzKCkubm90KGA6cGFyZW50YCk7dC5zb3J0JiYoYT1hLnNvcnQodC5zb3J0KSk7Zm9yKHZhciBvPVdkKHQuYm91bmRpbmdCb3g/dC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6bi53aWR0aCgpLGg6bi5oZWlnaHQoKX0pLHM9e3g6by54MStvLncvMix5Om8ueTErby5oLzJ9LGM9KHQuc3dlZXA9PT12b2lkIDA/MipNYXRoLlBJLTIqTWF0aC5QSS9hLmxlbmd0aDp0LnN3ZWVwKS9NYXRoLm1heCgxLGEubGVuZ3RoLTEpLGwsdT0wLGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGY9YVtkXS5sYXlvdXREaW1lbnNpb25zKHQpLHA9Zi53LG09Zi5oO3U9TWF0aC5tYXgodSxwLG0pfWlmKGw9USh0LnJhZGl1cyk/dC5yYWRpdXM6YS5sZW5ndGg8PTE/MDpNYXRoLm1pbihvLmgsby53KS8yLXUsYS5sZW5ndGg+MSYmdC5hdm9pZE92ZXJsYXApe3UqPTEuNzU7dmFyIGg9TWF0aC5jb3MoYyktTWF0aC5jb3MoMCksZz1NYXRoLnNpbihjKS1NYXRoLnNpbigwKSxfPU1hdGguc3FydCh1KnUvKGgqaCtnKmcpKTtsPU1hdGgubWF4KF8sbCl9cmV0dXJuIHIubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGZ1bmN0aW9uKGUsbil7dmFyIHI9dC5zdGFydEFuZ2xlK24qYyooaT8xOi0xKSxhPWwqTWF0aC5jb3Mociksbz1sKk1hdGguc2luKHIpO3JldHVybnt4OnMueCthLHk6cy55K299fSksdGhpc307dmFyIHBiPXtmaXQ6ITAscGFkZGluZzozMCxzdGFydEFuZ2xlOjMvMipNYXRoLlBJLHN3ZWVwOnZvaWQgMCxjbG9ja3dpc2U6ITAsZXF1aWRpc3RhbnQ6ITEsbWluTm9kZVNwYWNpbmc6MTAsYm91bmRpbmdCb3g6dm9pZCAwLGF2b2lkT3ZlcmxhcDohMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsaGVpZ2h0OnZvaWQgMCx3aWR0aDp2b2lkIDAsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uY2VudHJpYzpmdW5jdGlvbihlKXtyZXR1cm4gZS5kZWdyZWUoKX0sbGV2ZWxXaWR0aDpmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXhEZWdyZWUoKS80fSxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe3JldHVybiB0fX07ZnVuY3Rpb24gbWIoZSl7dGhpcy5vcHRpb25zPWFsKHt9LHBiLGUpfW1iLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5vcHRpb25zLHQ9ZSxuPXQuY291bnRlcmNsb2Nrd2lzZT09PXZvaWQgMD90LmNsb2Nrd2lzZTohdC5jb3VudGVyY2xvY2t3aXNlLHI9ZS5jeSxpPXQuZWxlcyxhPWkubm9kZXMoKS5ub3QoYDpwYXJlbnRgKSxvPVdkKHQuYm91bmRpbmdCb3g/dC5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ci53aWR0aCgpLGg6ci5oZWlnaHQoKX0pLHM9e3g6by54MStvLncvMix5Om8ueTErby5oLzJ9LGM9W10sbD0wLHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGQ9YVt1XSxmPXZvaWQgMDtmPXQuY29uY2VudHJpYyhkKSxjLnB1c2goe3ZhbHVlOmYsbm9kZTpkfSksZC5fcHJpdmF0ZS5zY3JhdGNoLmNvbmNlbnRyaWM9Zn1hLnVwZGF0ZVN0eWxlKCk7Zm9yKHZhciBwPTA7cDxhLmxlbmd0aDtwKyspe3ZhciBtPWFbcF0ubGF5b3V0RGltZW5zaW9ucyh0KTtsPU1hdGgubWF4KGwsbS53LG0uaCl9Yy5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudmFsdWUtZS52YWx1ZX0pO2Zvcih2YXIgaD10LmxldmVsV2lkdGgoYSksZz1bW11dLF89Z1swXSx2PTA7djxjLmxlbmd0aDt2Kyspe3ZhciB5PWNbdl07Xy5sZW5ndGg+MCYmTWF0aC5hYnMoX1swXS52YWx1ZS15LnZhbHVlKT49aCYmKF89W10sZy5wdXNoKF8pKSxfLnB1c2goeSl9dmFyIGI9bCt0Lm1pbk5vZGVTcGFjaW5nO2lmKCF0LmF2b2lkT3ZlcmxhcCl7dmFyIHg9Zy5sZW5ndGg+MCYmZ1swXS5sZW5ndGg+MSxTPShNYXRoLm1pbihvLncsby5oKS8yLWIpLyhnLmxlbmd0aCt4PzE6MCk7Yj1NYXRoLm1pbihiLFMpfWZvcih2YXIgQz0wLHc9MDt3PGcubGVuZ3RoO3crKyl7dmFyIFQ9Z1t3XSxFPVQuZFRoZXRhPSh0LnN3ZWVwPT09dm9pZCAwPzIqTWF0aC5QSS0yKk1hdGguUEkvVC5sZW5ndGg6dC5zd2VlcCkvTWF0aC5tYXgoMSxULmxlbmd0aC0xKTtpZihULmxlbmd0aD4xJiZ0LmF2b2lkT3ZlcmxhcCl7dmFyIEQ9TWF0aC5jb3MoRSktTWF0aC5jb3MoMCksTz1NYXRoLnNpbihFKS1NYXRoLnNpbigwKSxrPU1hdGguc3FydChiKmIvKEQqRCtPKk8pKTtDPU1hdGgubWF4KGssQyl9VC5yPUMsQys9Yn1pZih0LmVxdWlkaXN0YW50KXtmb3IodmFyIEE9MCxqPTAsTT0wO008Zy5sZW5ndGg7TSsrKXt2YXIgTj1nW01dLnItajtBPU1hdGgubWF4KEEsTil9aj0wO2Zvcih2YXIgUD0wO1A8Zy5sZW5ndGg7UCsrKXt2YXIgRj1nW1BdO1A9PT0wJiYoaj1GLnIpLEYucj1qLGorPUF9fWZvcih2YXIgST17fSxMPTA7TDxnLmxlbmd0aDtMKyspZm9yKHZhciBSPWdbTF0sej1SLmRUaGV0YSxCPVIucixWPTA7VjxSLmxlbmd0aDtWKyspe3ZhciBIPVJbVl0sVT10LnN0YXJ0QW5nbGUrKG4/MTotMSkqeipWLFc9e3g6cy54K0IqTWF0aC5jb3MoVSkseTpzLnkrQipNYXRoLnNpbihVKX07SVtILm5vZGUuaWQoKV09V31yZXR1cm4gaS5ub2RlcygpLmxheW91dFBvc2l0aW9ucyh0aGlzLHQsZnVuY3Rpb24oZSl7cmV0dXJuIElbZS5pZCgpXX0pLHRoaXN9O3ZhciBoYixnYj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LGFuaW1hdGU6ITAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRpb25EdXJhdGlvbjp2b2lkIDAsYW5pbWF0ZUZpbHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiEwfSxhbmltYXRpb25UaHJlc2hvbGQ6MjUwLHJlZnJlc2g6MjAsZml0OiEwLHBhZGRpbmc6MzAsYm91bmRpbmdCb3g6dm9pZCAwLG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczohMSxyYW5kb21pemU6ITEsY29tcG9uZW50U3BhY2luZzo0MCxub2RlUmVwdWxzaW9uOmZ1bmN0aW9uKGUpe3JldHVybiAyMDQ4fSxub2RlT3ZlcmxhcDo0LGlkZWFsRWRnZUxlbmd0aDpmdW5jdGlvbihlKXtyZXR1cm4gMzJ9LGVkZ2VFbGFzdGljaXR5OmZ1bmN0aW9uKGUpe3JldHVybiAzMn0sbmVzdGluZ0ZhY3RvcjoxLjIsZ3Jhdml0eToxLG51bUl0ZXI6MWUzLGluaXRpYWxUZW1wOjFlMyxjb29saW5nRmFjdG9yOi45OSxtaW5UZW1wOjF9O2Z1bmN0aW9uIF9iKGUpe3RoaXMub3B0aW9ucz1hbCh7fSxnYixlKSx0aGlzLm9wdGlvbnMubGF5b3V0PXRoaXM7dmFyIHQ9dGhpcy5vcHRpb25zLmVsZXMubm9kZXMoKSxuPXRoaXMub3B0aW9ucy5lbGVzLmVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3ZhciBuPWUuc291cmNlKCkuZGF0YShgaWRgKSxyPWUudGFyZ2V0KCkuZGF0YShgaWRgKSxpPXQuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gZS5kYXRhKGBpZGApPT09bn0pLGE9dC5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRhdGEoYGlkYCk9PT1yfSk7cmV0dXJuIWl8fCFhfSk7dGhpcy5vcHRpb25zLmVsZXM9dGhpcy5vcHRpb25zLmVsZXMubm90KG4pfV9iLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsdD1lLmN5LG49dGhpcztuLnN0b3BwZWQ9ITEsKGUuYW5pbWF0ZT09PSEwfHxlLmFuaW1hdGU9PT0hMSkmJm4uZW1pdCh7dHlwZTpgbGF5b3V0c3RhcnRgLGxheW91dDpufSksaGI9ITA9PT1lLmRlYnVnO3ZhciByPXZiKHQsbixlKTtoYiYmeGIociksZS5yYW5kb21pemUmJlNiKHIpO3ZhciBpPWx1KCksYT1mdW5jdGlvbigpe3diKHIsdCxlKSwhMD09PWUuZml0JiZ0LmZpdChlLnBhZGRpbmcpfSxvPWZ1bmN0aW9uKHQpe3JldHVybiEobi5zdG9wcGVkfHx0Pj1lLm51bUl0ZXJ8fChUYihyLGUpLHIudGVtcGVyYXR1cmUqPWUuY29vbGluZ0ZhY3RvcixyLnRlbXBlcmF0dXJlPGUubWluVGVtcCkpfSxzPWZ1bmN0aW9uKCl7aWYoZS5hbmltYXRlPT09ITB8fGUuYW5pbWF0ZT09PSExKWEoKSxuLm9uZShgbGF5b3V0c3RvcGAsZS5zdG9wKSxuLmVtaXQoe3R5cGU6YGxheW91dHN0b3BgLGxheW91dDpufSk7ZWxzZXt2YXIgdD1lLmVsZXMubm9kZXMoKSxpPUNiKHIsZSx0KTt0LmxheW91dFBvc2l0aW9ucyhuLGUsaSl9fSxjPTAsbD0hMDtpZihlLmFuaW1hdGU9PT0hMCl7dmFyIHU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDtsJiZ0PGUucmVmcmVzaDspbD1vKGMpLGMrKyx0Kys7bD8obHUoKS1pPj1lLmFuaW1hdGlvblRocmVzaG9sZCYmYSgpLGN1KHUpKTooTGIocixlKSxzKCkpfTt1KCl9ZWxzZXtmb3IoO2w7KWw9byhjKSxjKys7TGIocixlKSxzKCl9cmV0dXJuIHRoaXN9LF9iLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcHBlZD0hMCx0aGlzLnRocmVhZCYmdGhpcy50aHJlYWQuc3RvcCgpLHRoaXMuZW1pdChgbGF5b3V0c3RvcGApLHRoaXN9LF9iLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGhyZWFkJiZ0aGlzLnRocmVhZC5zdG9wKCksdGhpc307dmFyIHZiPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bi5lbGVzLmVkZ2VzKCksaT1uLmVsZXMubm9kZXMoKSxhPVdkKG4uYm91bmRpbmdCb3g/bi5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6ZS53aWR0aCgpLGg6ZS5oZWlnaHQoKX0pLG89e2lzQ29tcG91bmQ6ZS5oYXNDb21wb3VuZE5vZGVzKCksbGF5b3V0Tm9kZXM6W10saWRUb0luZGV4Ont9LG5vZGVTaXplOmkuc2l6ZSgpLGdyYXBoU2V0OltdLGluZGV4VG9HcmFwaDpbXSxsYXlvdXRFZGdlczpbXSxlZGdlU2l6ZTpyLnNpemUoKSx0ZW1wZXJhdHVyZTpuLmluaXRpYWxUZW1wLGNsaWVudFdpZHRoOmEudyxjbGllbnRIZWlnaHQ6YS5oLGJvdW5kaW5nQm94OmF9LHM9bi5lbGVzLmNvbXBvbmVudHMoKSxjPXt9LGw9MDtsPHMubGVuZ3RoO2wrKylmb3IodmFyIHU9c1tsXSxkPTA7ZDx1Lmxlbmd0aDtkKyspe3ZhciBmPXVbZF07Y1tmLmlkKCldPWx9Zm9yKHZhciBsPTA7bDxvLm5vZGVTaXplO2wrKyl7dmFyIHA9aVtsXSxtPXAubGF5b3V0RGltZW5zaW9ucyhuKSxoPXt9O2guaXNMb2NrZWQ9cC5sb2NrZWQoKSxoLmlkPXAuZGF0YShgaWRgKSxoLnBhcmVudElkPXAuZGF0YShgcGFyZW50YCksaC5jbXB0SWQ9Y1twLmlkKCldLGguY2hpbGRyZW49W10saC5wb3NpdGlvblg9cC5wb3NpdGlvbihgeGApLGgucG9zaXRpb25ZPXAucG9zaXRpb24oYHlgKSxoLm9mZnNldFg9MCxoLm9mZnNldFk9MCxoLmhlaWdodD1tLncsaC53aWR0aD1tLmgsaC5tYXhYPWgucG9zaXRpb25YK2gud2lkdGgvMixoLm1pblg9aC5wb3NpdGlvblgtaC53aWR0aC8yLGgubWF4WT1oLnBvc2l0aW9uWStoLmhlaWdodC8yLGgubWluWT1oLnBvc2l0aW9uWS1oLmhlaWdodC8yLGgucGFkTGVmdD1wYXJzZUZsb2F0KHAuc3R5bGUoYHBhZGRpbmdgKSksaC5wYWRSaWdodD1wYXJzZUZsb2F0KHAuc3R5bGUoYHBhZGRpbmdgKSksaC5wYWRUb3A9cGFyc2VGbG9hdChwLnN0eWxlKGBwYWRkaW5nYCkpLGgucGFkQm90dG9tPXBhcnNlRmxvYXQocC5zdHlsZShgcGFkZGluZ2ApKSxoLm5vZGVSZXB1bHNpb249RGMobi5ub2RlUmVwdWxzaW9uKT9uLm5vZGVSZXB1bHNpb24ocCk6bi5ub2RlUmVwdWxzaW9uLG8ubGF5b3V0Tm9kZXMucHVzaChoKSxvLmlkVG9JbmRleFtoLmlkXT1sfWZvcih2YXIgZz1bXSxfPTAsdj0tMSx5PVtdLGw9MDtsPG8ubm9kZVNpemU7bCsrKXt2YXIgcD1vLmxheW91dE5vZGVzW2xdLGI9cC5wYXJlbnRJZDtiPT1udWxsPyhnWysrdl09cC5pZCx5LnB1c2gocC5pZCkpOm8ubGF5b3V0Tm9kZXNbby5pZFRvSW5kZXhbYl1dLmNoaWxkcmVuLnB1c2gocC5pZCl9Zm9yKG8uZ3JhcGhTZXQucHVzaCh5KTtfPD12Oyl7dmFyIHg9Z1tfKytdLFM9by5pZFRvSW5kZXhbeF0sZj1vLmxheW91dE5vZGVzW1NdLEM9Zi5jaGlsZHJlbjtpZihDLmxlbmd0aD4wKXtvLmdyYXBoU2V0LnB1c2goQyk7Zm9yKHZhciBsPTA7bDxDLmxlbmd0aDtsKyspZ1srK3ZdPUNbbF19fWZvcih2YXIgbD0wO2w8by5ncmFwaFNldC5sZW5ndGg7bCsrKWZvcih2YXIgdz1vLmdyYXBoU2V0W2xdLGQ9MDtkPHcubGVuZ3RoO2QrKyl7dmFyIFQ9by5pZFRvSW5kZXhbd1tkXV07by5pbmRleFRvR3JhcGhbVF09bH1mb3IodmFyIGw9MDtsPG8uZWRnZVNpemU7bCsrKXt2YXIgRT1yW2xdLEQ9e307RC5pZD1FLmRhdGEoYGlkYCksRC5zb3VyY2VJZD1FLmRhdGEoYHNvdXJjZWApLEQudGFyZ2V0SWQ9RS5kYXRhKGB0YXJnZXRgKTt2YXIgTz1EYyhuLmlkZWFsRWRnZUxlbmd0aCk/bi5pZGVhbEVkZ2VMZW5ndGgoRSk6bi5pZGVhbEVkZ2VMZW5ndGgsaz1EYyhuLmVkZ2VFbGFzdGljaXR5KT9uLmVkZ2VFbGFzdGljaXR5KEUpOm4uZWRnZUVsYXN0aWNpdHksQT1vLmlkVG9JbmRleFtELnNvdXJjZUlkXSxqPW8uaWRUb0luZGV4W0QudGFyZ2V0SWRdO2lmKG8uaW5kZXhUb0dyYXBoW0FdIT1vLmluZGV4VG9HcmFwaFtqXSl7Zm9yKHZhciBNPXliKEQuc291cmNlSWQsRC50YXJnZXRJZCxvKSxOPW8uZ3JhcGhTZXRbTV0sUD0wLGg9by5sYXlvdXROb2Rlc1tBXTtOLmluZGV4T2YoaC5pZCk9PT0tMTspaD1vLmxheW91dE5vZGVzW28uaWRUb0luZGV4W2gucGFyZW50SWRdXSxQKys7Zm9yKGg9by5sYXlvdXROb2Rlc1tqXTtOLmluZGV4T2YoaC5pZCk9PT0tMTspaD1vLmxheW91dE5vZGVzW28uaWRUb0luZGV4W2gucGFyZW50SWRdXSxQKys7Tyo9UCpuLm5lc3RpbmdGYWN0b3J9RC5pZGVhbExlbmd0aD1PLEQuZWxhc3RpY2l0eT1rLG8ubGF5b3V0RWRnZXMucHVzaChEKX1yZXR1cm4gb30seWI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWJiKGUsdCwwLG4pO3JldHVybiAyPnIuY291bnQ/MDpyLmdyYXBofSxiYj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1yLmdyYXBoU2V0W25dO2lmKC0xPGkuaW5kZXhPZihlKSYmLTE8aS5pbmRleE9mKHQpKXJldHVybntjb3VudDoyLGdyYXBoOm59O2Zvcih2YXIgYT0wLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPXIuaWRUb0luZGV4W3NdLGw9ci5sYXlvdXROb2Rlc1tjXS5jaGlsZHJlbjtpZihsLmxlbmd0aCE9PTApe3ZhciB1PXIuaW5kZXhUb0dyYXBoW3IuaWRUb0luZGV4W2xbMF1dXSxkPWJiKGUsdCx1LHIpO2lmKGQuY291bnQhPT0wKXtpZihkLmNvdW50PT09MSl7aWYoYSsrLGE9PT0yKWJyZWFrfWVsc2UgcmV0dXJuIGR9fX1yZXR1cm57Y291bnQ6YSxncmFwaDpufX0seGIsU2I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0LGk9MDtpPGUubm9kZVNpemU7aSsrKXt2YXIgYT1lLmxheW91dE5vZGVzW2ldO2EuY2hpbGRyZW4ubGVuZ3RoPT09MCYmIWEuaXNMb2NrZWQmJihhLnBvc2l0aW9uWD1NYXRoLnJhbmRvbSgpKm4sYS5wb3NpdGlvblk9TWF0aC5yYW5kb20oKSpyKX19LENiPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmJvdW5kaW5nQm94LGk9e3gxOjEvMCx4MjotMS8wLHkxOjEvMCx5MjotMS8wfTtyZXR1cm4gdC5ib3VuZGluZ0JveCYmKG4uZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W3QuZGF0YShgaWRgKV1dO2kueDE9TWF0aC5taW4oaS54MSxuLnBvc2l0aW9uWCksaS54Mj1NYXRoLm1heChpLngyLG4ucG9zaXRpb25YKSxpLnkxPU1hdGgubWluKGkueTEsbi5wb3NpdGlvblkpLGkueTI9TWF0aC5tYXgoaS55MixuLnBvc2l0aW9uWSl9KSxpLnc9aS54Mi1pLngxLGkuaD1pLnkyLWkueTEpLGZ1bmN0aW9uKG4sYSl7dmFyIG89ZS5sYXlvdXROb2Rlc1tlLmlkVG9JbmRleFtuLmRhdGEoYGlkYCldXTtpZih0LmJvdW5kaW5nQm94KXt2YXIgcz1pLnc9PT0wPy41OihvLnBvc2l0aW9uWC1pLngxKS9pLncsYz1pLmg9PT0wPy41OihvLnBvc2l0aW9uWS1pLnkxKS9pLmg7cmV0dXJue3g6ci54MStzKnIudyx5OnIueTErYypyLmh9fXJldHVybnt4Om8ucG9zaXRpb25YLHk6by5wb3NpdGlvbll9fX0sd2I9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4ubGF5b3V0LGk9bi5lbGVzLm5vZGVzKCksYT1DYihlLG4saSk7aS5wb3NpdGlvbnMoYSksITAhPT1lLnJlYWR5JiYoZS5yZWFkeT0hMCxyLm9uZShgbGF5b3V0cmVhZHlgLG4ucmVhZHkpLHIuZW1pdCh7dHlwZTpgbGF5b3V0cmVhZHlgLGxheW91dDp0aGlzfSkpfSxUYj1mdW5jdGlvbihlLHQsbil7RWIoZSx0KSxqYihlKSxNYihlLHQpLE5iKGUpLFBiKGUpfSxFYj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5ncmFwaFNldC5sZW5ndGg7bisrKWZvcih2YXIgcj1lLmdyYXBoU2V0W25dLGk9ci5sZW5ndGgsYT0wO2E8aTthKyspZm9yKHZhciBvPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbclthXV1dLHM9YSsxO3M8aTtzKyspe3ZhciBjPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbcltzXV1dO09iKG8sYyxlLHQpfX0sRGI9ZnVuY3Rpb24oZSl7cmV0dXJuLWUrMiplKk1hdGgucmFuZG9tKCl9LE9iPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUuY21wdElkPT09dC5jbXB0SWR8fG4uaXNDb21wb3VuZCl7dmFyIGk9dC5wb3NpdGlvblgtZS5wb3NpdGlvblgsYT10LnBvc2l0aW9uWS1lLnBvc2l0aW9uWSxvPTE7aT09PTAmJmE9PT0wJiYoaT1EYihvKSxhPURiKG8pKTt2YXIgcz1rYihlLHQsaSxhKTtpZihzPjApdmFyIGM9ci5ub2RlT3ZlcmxhcCpzLGw9TWF0aC5zcXJ0KGkqaSthKmEpLHU9YyppL2wsZD1jKmEvbDtlbHNlIHZhciBmPUFiKGUsaSxhKSxwPUFiKHQsLTEqaSwtMSphKSxtPXAueC1mLngsaD1wLnktZi55LGc9bSptK2gqaCxsPU1hdGguc3FydChnKSxjPShlLm5vZGVSZXB1bHNpb24rdC5ub2RlUmVwdWxzaW9uKS9nLHU9YyptL2wsZD1jKmgvbDtlLmlzTG9ja2VkfHwoZS5vZmZzZXRYLT11LGUub2Zmc2V0WS09ZCksdC5pc0xvY2tlZHx8KHQub2Zmc2V0WCs9dSx0Lm9mZnNldFkrPWQpfX0sa2I9ZnVuY3Rpb24oZSx0LG4scil7aWYobj4wKXZhciBpPWUubWF4WC10Lm1pblg7ZWxzZSB2YXIgaT10Lm1heFgtZS5taW5YO2lmKHI+MCl2YXIgYT1lLm1heFktdC5taW5ZO2Vsc2UgdmFyIGE9dC5tYXhZLWUubWluWTtyZXR1cm4gaT49MCYmYT49MD9NYXRoLnNxcnQoaSppK2EqYSk6MH0sQWI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUucG9zaXRpb25YLGk9ZS5wb3NpdGlvblksYT1lLmhlaWdodHx8MSxvPWUud2lkdGh8fDEscz1uL3QsYz1hL28sbD17fTtyZXR1cm4gdD09PTAmJjA8bnx8dD09PTAmJjA+bj8obC54PXIsbC55PWkrYS8yLGwpOjA8dCYmLTEqYzw9cyYmczw9Yz8obC54PXIrby8yLGwueT1pK28qbi8yL3QsbCk6MD50JiYtMSpjPD1zJiZzPD1jPyhsLng9ci1vLzIsbC55PWktbypuLzIvdCxsKTowPG4mJihzPD0tMSpjfHxzPj1jKT8obC54PXIrYSp0LzIvbixsLnk9aSthLzIsbCk6KDA+biYmKHM8PS0xKmN8fHM+PWMpJiYobC54PXItYSp0LzIvbixsLnk9aS1hLzIpLGwpfSxqYj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248ZS5lZGdlU2l6ZTtuKyspe3ZhciByPWUubGF5b3V0RWRnZXNbbl0saT1lLmlkVG9JbmRleFtyLnNvdXJjZUlkXSxhPWUubGF5b3V0Tm9kZXNbaV0sbz1lLmlkVG9JbmRleFtyLnRhcmdldElkXSxzPWUubGF5b3V0Tm9kZXNbb10sYz1zLnBvc2l0aW9uWC1hLnBvc2l0aW9uWCxsPXMucG9zaXRpb25ZLWEucG9zaXRpb25ZO2lmKGMhPT0wfHxsIT09MCl7dmFyIHU9QWIoYSxjLGwpLGQ9QWIocywtMSpjLC0xKmwpLGY9ZC54LXUueCxwPWQueS11LnksbT1NYXRoLnNxcnQoZipmK3AqcCksaD0oci5pZGVhbExlbmd0aC1tKSoqMi9yLmVsYXN0aWNpdHk7aWYobSE9PTApdmFyIGc9aCpmL20sXz1oKnAvbTtlbHNlIHZhciBnPTAsXz0wO2EuaXNMb2NrZWR8fChhLm9mZnNldFgrPWcsYS5vZmZzZXRZKz1fKSxzLmlzTG9ja2VkfHwocy5vZmZzZXRYLT1nLHMub2Zmc2V0WS09Xyl9fX0sTWI9ZnVuY3Rpb24oZSx0KXtpZih0LmdyYXZpdHkhPT0wKWZvcih2YXIgbj0xLHI9MDtyPGUuZ3JhcGhTZXQubGVuZ3RoO3IrKyl7dmFyIGk9ZS5ncmFwaFNldFtyXSxhPWkubGVuZ3RoO2lmKHI9PT0wKXZhciBvPWUuY2xpZW50SGVpZ2h0LzIscz1lLmNsaWVudFdpZHRoLzI7ZWxzZSB2YXIgYz1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbMF1dXSxsPWUubGF5b3V0Tm9kZXNbZS5pZFRvSW5kZXhbYy5wYXJlbnRJZF1dLG89bC5wb3NpdGlvblgscz1sLnBvc2l0aW9uWTtmb3IodmFyIHU9MDt1PGE7dSsrKXt2YXIgZD1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2lbdV1dXTtpZighZC5pc0xvY2tlZCl7dmFyIGY9by1kLnBvc2l0aW9uWCxwPXMtZC5wb3NpdGlvblksbT1NYXRoLnNxcnQoZipmK3AqcCk7aWYobT5uKXt2YXIgaD10LmdyYXZpdHkqZi9tLGc9dC5ncmF2aXR5KnAvbTtkLm9mZnNldFgrPWgsZC5vZmZzZXRZKz1nfX19fX0sTmI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPTAsaT0tMTtmb3Iobi5wdXNoLmFwcGx5KG4sZS5ncmFwaFNldFswXSksaSs9ZS5ncmFwaFNldFswXS5sZW5ndGg7cjw9aTspe3ZhciBhPW5bcisrXSxvPWUuaWRUb0luZGV4W2FdLHM9ZS5sYXlvdXROb2Rlc1tvXSxjPXMuY2hpbGRyZW47aWYoMDxjLmxlbmd0aCYmIXMuaXNMb2NrZWQpe2Zvcih2YXIgbD1zLm9mZnNldFgsdT1zLm9mZnNldFksZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgZj1lLmxheW91dE5vZGVzW2UuaWRUb0luZGV4W2NbZF1dXTtmLm9mZnNldFgrPWwsZi5vZmZzZXRZKz11LG5bKytpXT1jW2RdfXMub2Zmc2V0WD0wLHMub2Zmc2V0WT0wfX19LFBiPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjxlLm5vZGVTaXplO24rKyl7dmFyIHI9ZS5sYXlvdXROb2Rlc1tuXTswPHIuY2hpbGRyZW4ubGVuZ3RoJiYoci5tYXhYPXZvaWQgMCxyLm1pblg9dm9pZCAwLHIubWF4WT12b2lkIDAsci5taW5ZPXZvaWQgMCl9Zm9yKHZhciBuPTA7bjxlLm5vZGVTaXplO24rKyl7dmFyIHI9ZS5sYXlvdXROb2Rlc1tuXTtpZighKDA8ci5jaGlsZHJlbi5sZW5ndGh8fHIuaXNMb2NrZWQpKXt2YXIgaT1GYihyLm9mZnNldFgsci5vZmZzZXRZLGUudGVtcGVyYXR1cmUpO3IucG9zaXRpb25YKz1pLngsci5wb3NpdGlvblkrPWkueSxyLm9mZnNldFg9MCxyLm9mZnNldFk9MCxyLm1pblg9ci5wb3NpdGlvblgtci53aWR0aCxyLm1heFg9ci5wb3NpdGlvblgrci53aWR0aCxyLm1pblk9ci5wb3NpdGlvblktci5oZWlnaHQsci5tYXhZPXIucG9zaXRpb25ZK3IuaGVpZ2h0LEliKHIsZSl9fWZvcih2YXIgbj0wO248ZS5ub2RlU2l6ZTtuKyspe3ZhciByPWUubGF5b3V0Tm9kZXNbbl07MDxyLmNoaWxkcmVuLmxlbmd0aCYmIXIuaXNMb2NrZWQmJihyLnBvc2l0aW9uWD0oci5tYXhYK3IubWluWCkvMixyLnBvc2l0aW9uWT0oci5tYXhZK3IubWluWSkvMixyLndpZHRoPXIubWF4WC1yLm1pblgsci5oZWlnaHQ9ci5tYXhZLXIubWluWSl9fSxGYj1mdW5jdGlvbihlLHQsbil7dmFyIHI9TWF0aC5zcXJ0KGUqZSt0KnQpO2lmKHI+bil2YXIgaT17eDpuKmUvcix5Om4qdC9yfTtlbHNlIHZhciBpPXt4OmUseTp0fTtyZXR1cm4gaX0sSWI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnBhcmVudElkO2lmKG4hPW51bGwpe3ZhciByPXQubGF5b3V0Tm9kZXNbdC5pZFRvSW5kZXhbbl1dLGk9ITE7aWYoKHIubWF4WD09bnVsbHx8ZS5tYXhYK3IucGFkUmlnaHQ+ci5tYXhYKSYmKHIubWF4WD1lLm1heFgrci5wYWRSaWdodCxpPSEwKSwoci5taW5YPT1udWxsfHxlLm1pblgtci5wYWRMZWZ0PHIubWluWCkmJihyLm1pblg9ZS5taW5YLXIucGFkTGVmdCxpPSEwKSwoci5tYXhZPT1udWxsfHxlLm1heFkrci5wYWRCb3R0b20+ci5tYXhZKSYmKHIubWF4WT1lLm1heFkrci5wYWRCb3R0b20saT0hMCksKHIubWluWT09bnVsbHx8ZS5taW5ZLXIucGFkVG9wPHIubWluWSkmJihyLm1pblk9ZS5taW5ZLXIucGFkVG9wLGk9ITApLGkpcmV0dXJuIEliKHIsdCl9fSxMYj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxheW91dE5vZGVzLHI9W10saT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgYT1uW2ldLG89YS5jbXB0SWQ7KHJbb109cltvXXx8W10pLnB1c2goYSl9Zm9yKHZhciBzPTAsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYz1yW2ldO2lmKGMpe2MueDE9MS8wLGMueDI9LTEvMCxjLnkxPTEvMCxjLnkyPS0xLzA7Zm9yKHZhciBsPTA7bDxjLmxlbmd0aDtsKyspe3ZhciB1PWNbbF07Yy54MT1NYXRoLm1pbihjLngxLHUucG9zaXRpb25YLXUud2lkdGgvMiksYy54Mj1NYXRoLm1heChjLngyLHUucG9zaXRpb25YK3Uud2lkdGgvMiksYy55MT1NYXRoLm1pbihjLnkxLHUucG9zaXRpb25ZLXUuaGVpZ2h0LzIpLGMueTI9TWF0aC5tYXgoYy55Mix1LnBvc2l0aW9uWSt1LmhlaWdodC8yKX1jLnc9Yy54Mi1jLngxLGMuaD1jLnkyLWMueTEscys9Yy53KmMuaH19ci5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudyp0LmgtZS53KmUuaH0pO2Zvcih2YXIgZD0wLGY9MCxwPTAsbT0wLGg9TWF0aC5zcXJ0KHMpKmUuY2xpZW50V2lkdGgvZS5jbGllbnRIZWlnaHQsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYz1yW2ldO2lmKGMpe2Zvcih2YXIgbD0wO2w8Yy5sZW5ndGg7bCsrKXt2YXIgdT1jW2xdO3UuaXNMb2NrZWR8fCh1LnBvc2l0aW9uWCs9ZC1jLngxLHUucG9zaXRpb25ZKz1mLWMueTEpfWQrPWMudyt0LmNvbXBvbmVudFNwYWNpbmcscCs9Yy53K3QuY29tcG9uZW50U3BhY2luZyxtPU1hdGgubWF4KG0sYy5oKSxwPmgmJihmKz1tK3QuY29tcG9uZW50U3BhY2luZyxkPTAscD0wLG09MCl9fX0sUmI9e2ZpdDohMCxwYWRkaW5nOjMwLGJvdW5kaW5nQm94OnZvaWQgMCxhdm9pZE92ZXJsYXA6ITAsYXZvaWRPdmVybGFwUGFkZGluZzoxMCxub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6ITEsc3BhY2luZ0ZhY3Rvcjp2b2lkIDAsY29uZGVuc2U6ITEscm93czp2b2lkIDAsY29sczp2b2lkIDAscG9zaXRpb246ZnVuY3Rpb24oZSl7fSxzb3J0OnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe3JldHVybiB0fX07ZnVuY3Rpb24gemIoZSl7dGhpcy5vcHRpb25zPWFsKHt9LFJiLGUpfXpiLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsdD1lLG49ZS5jeSxyPXQuZWxlcyxpPXIubm9kZXMoKS5ub3QoYDpwYXJlbnRgKTt0LnNvcnQmJihpPWkuc29ydCh0LnNvcnQpKTt2YXIgYT1XZCh0LmJvdW5kaW5nQm94P3QuYm91bmRpbmdCb3g6e3gxOjAseTE6MCx3Om4ud2lkdGgoKSxoOm4uaGVpZ2h0KCl9KTtpZihhLmg9PT0wfHxhLnc9PT0wKXIubm9kZXMoKS5sYXlvdXRQb3NpdGlvbnModGhpcyx0LGZ1bmN0aW9uKGUpe3JldHVybnt4OmEueDEseTphLnkxfX0pO2Vsc2V7dmFyIG89aS5zaXplKCkscz1NYXRoLnNxcnQobyphLmgvYS53KSxjPU1hdGgucm91bmQocyksbD1NYXRoLnJvdW5kKGEudy9hLmgqcyksdT1mdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybiBNYXRoLm1pbihjLGwpO01hdGgubWluKGMsbCk9PWM/Yz1lOmw9ZX0sZD1mdW5jdGlvbihlKXtpZihlPT1udWxsKXJldHVybiBNYXRoLm1heChjLGwpO01hdGgubWF4KGMsbCk9PWM/Yz1lOmw9ZX0sZj10LnJvd3MscD10LmNvbHM9PW51bGw/dC5jb2x1bW5zOnQuY29scztpZihmIT1udWxsJiZwIT1udWxsKWM9ZixsPXA7ZWxzZSBpZihmIT1udWxsJiZwPT1udWxsKWM9ZixsPU1hdGguY2VpbChvL2MpO2Vsc2UgaWYoZj09bnVsbCYmcCE9bnVsbClsPXAsYz1NYXRoLmNlaWwoby9sKTtlbHNlIGlmKGwqYz5vKXt2YXIgbT11KCksaD1kKCk7KG0tMSkqaD49bz91KG0tMSk6KGgtMSkqbT49byYmZChoLTEpfWVsc2UgZm9yKDtsKmM8bzspe3ZhciBnPXUoKSxfPWQoKTsoXysxKSpnPj1vP2QoXysxKTp1KGcrMSl9dmFyIHY9YS53L2wseT1hLmgvYztpZih0LmNvbmRlbnNlJiYodj0wLHk9MCksdC5hdm9pZE92ZXJsYXApZm9yKHZhciBiPTA7YjxpLmxlbmd0aDtiKyspe3ZhciB4PWlbYl0sUz14Ll9wcml2YXRlLnBvc2l0aW9uOyhTLng9PW51bGx8fFMueT09bnVsbCkmJihTLng9MCxTLnk9MCk7dmFyIEM9eC5sYXlvdXREaW1lbnNpb25zKHQpLHc9dC5hdm9pZE92ZXJsYXBQYWRkaW5nLFQ9Qy53K3csRT1DLmgrdzt2PU1hdGgubWF4KHYsVCkseT1NYXRoLm1heCh5LEUpfWZvcih2YXIgRD17fSxPPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISFEW2BjLWArZStgLWArdF19LGs9ZnVuY3Rpb24oZSx0KXtEW2BjLWArZStgLWArdF09ITB9LEE9MCxqPTAsTT1mdW5jdGlvbigpe2orKyxqPj1sJiYoaj0wLEErKyl9LE49e30sUD0wO1A8aS5sZW5ndGg7UCsrKXt2YXIgRj1pW1BdLEk9dC5wb3NpdGlvbihGKTtpZihJJiYoSS5yb3chPT12b2lkIDB8fEkuY29sIT09dm9pZCAwKSl7dmFyIEw9e3JvdzpJLnJvdyxjb2w6SS5jb2x9O2lmKEwuY29sPT09dm9pZCAwKWZvcihMLmNvbD0wO08oTC5yb3csTC5jb2wpOylMLmNvbCsrO2Vsc2UgaWYoTC5yb3c9PT12b2lkIDApZm9yKEwucm93PTA7TyhMLnJvdyxMLmNvbCk7KUwucm93Kys7TltGLmlkKCldPUwsayhMLnJvdyxMLmNvbCl9fWkubGF5b3V0UG9zaXRpb25zKHRoaXMsdCxmdW5jdGlvbihlLHQpe3ZhciBuLHI7aWYoZS5sb2NrZWQoKXx8ZS5pc1BhcmVudCgpKXJldHVybiExO3ZhciBpPU5bZS5pZCgpXTtpZihpKW49aS5jb2wqdit2LzIrYS54MSxyPWkucm93KnkreS8yK2EueTE7ZWxzZXtmb3IoO08oQSxqKTspTSgpO249aip2K3YvMithLngxLHI9QSp5K3kvMithLnkxLGsoQSxqKSxNKCl9cmV0dXJue3g6bix5OnJ9fSl9cmV0dXJuIHRoaXN9O3ZhciBCYj17cmVhZHk6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBWYihlKXt0aGlzLm9wdGlvbnM9YWwoe30sQmIsZSl9VmIucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyx0PWUuZWxlcyxuPXRoaXM7cmV0dXJuIGUuY3ksbi5lbWl0KGBsYXlvdXRzdGFydGApLHQubm9kZXMoKS5wb3NpdGlvbnMoZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MH19KSxuLm9uZShgbGF5b3V0cmVhZHlgLGUucmVhZHkpLG4uZW1pdChgbGF5b3V0cmVhZHlgKSxuLm9uZShgbGF5b3V0c3RvcGAsZS5zdG9wKSxuLmVtaXQoYGxheW91dHN0b3BgKSx0aGlzfSxWYi5wcm90b3R5cGUuc3RvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgSGI9e3Bvc2l0aW9uczp2b2lkIDAsem9vbTp2b2lkIDAscGFuOnZvaWQgMCxmaXQ6ITAscGFkZGluZzozMCxzcGFjaW5nRmFjdG9yOnZvaWQgMCxhbmltYXRlOiExLGFuaW1hdGlvbkR1cmF0aW9uOjUwMCxhbmltYXRpb25FYXNpbmc6dm9pZCAwLGFuaW1hdGVGaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMH0scmVhZHk6dm9pZCAwLHN0b3A6dm9pZCAwLHRyYW5zZm9ybTpmdW5jdGlvbihlLHQpe3JldHVybiB0fX07ZnVuY3Rpb24gVWIoZSl7dGhpcy5vcHRpb25zPWFsKHt9LEhiLGUpfVViLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsdD1lLmVsZXMubm9kZXMoKSxuPURjKGUucG9zaXRpb25zKTtmdW5jdGlvbiByKHQpe3JldHVybiBlLnBvc2l0aW9ucz09bnVsbD9DZCh0LnBvc2l0aW9uKCkpOm4/ZS5wb3NpdGlvbnModCk6ZS5wb3NpdGlvbnNbdC5fcHJpdmF0ZS5kYXRhLmlkXT8/bnVsbH1yZXR1cm4gdC5sYXlvdXRQb3NpdGlvbnModGhpcyxlLGZ1bmN0aW9uKGUsdCl7dmFyIG49cihlKTtyZXR1cm4gZS5sb2NrZWQoKXx8bj09bnVsbD8hMTpufSksdGhpc307dmFyIFdiPXtmaXQ6ITAscGFkZGluZzozMCxib3VuZGluZ0JveDp2b2lkIDAsYW5pbWF0ZTohMSxhbmltYXRpb25EdXJhdGlvbjo1MDAsYW5pbWF0aW9uRWFzaW5nOnZvaWQgMCxhbmltYXRlRmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuITB9LHJlYWR5OnZvaWQgMCxzdG9wOnZvaWQgMCx0cmFuc2Zvcm06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH19O2Z1bmN0aW9uIEdiKGUpe3RoaXMub3B0aW9ucz1hbCh7fSxXYixlKX1HYi5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLHQ9ZS5jeSxuPWUuZWxlcyxyPVdkKGUuYm91bmRpbmdCb3g/ZS5ib3VuZGluZ0JveDp7eDE6MCx5MTowLHc6dC53aWR0aCgpLGg6dC5oZWlnaHQoKX0pO3JldHVybiBuLm5vZGVzKCkubGF5b3V0UG9zaXRpb25zKHRoaXMsZSxmdW5jdGlvbihlLHQpe3JldHVybnt4OnIueDErTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKnIudykseTpyLnkxK01hdGgucm91bmQoTWF0aC5yYW5kb20oKSpyLmgpfX0pLHRoaXN9O3ZhciBLYj1be25hbWU6YGJyZWFkdGhmaXJzdGAsaW1wbDp1Yn0se25hbWU6YGNpcmNsZWAsaW1wbDpmYn0se25hbWU6YGNvbmNlbnRyaWNgLGltcGw6bWJ9LHtuYW1lOmBjb3NlYCxpbXBsOl9ifSx7bmFtZTpgZ3JpZGAsaW1wbDp6Yn0se25hbWU6YG51bGxgLGltcGw6VmJ9LHtuYW1lOmBwcmVzZXRgLGltcGw6VWJ9LHtuYW1lOmByYW5kb21gLGltcGw6R2J9XTtmdW5jdGlvbiBxYihlKXt0aGlzLm9wdGlvbnM9ZSx0aGlzLm5vdGlmaWNhdGlvbnM9MH12YXIgSmI9ZnVuY3Rpb24oKXt9LFliPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoYEEgaGVhZGxlc3MgaW5zdGFuY2UgY2FuIG5vdCByZW5kZXIgaW1hZ2VzYCl9O3FiLnByb3RvdHlwZT17cmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlOkpiLG5vdGlmeTpmdW5jdGlvbigpe3RoaXMubm90aWZpY2F0aW9ucysrfSxpbml0OkpiLGlzSGVhZGxlc3M6ZnVuY3Rpb24oKXtyZXR1cm4hMH0scG5nOlliLGpwZzpZYn07dmFyIFhiPXt9O1hiLmFycm93U2hhcGVXaWR0aD0uMyxYYi5yZWdpc3RlckFycm93U2hhcGVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hcnJvd1NoYXBlcz17fSx0PXRoaXMsbj1mdW5jdGlvbihlLHQsbixyLGksYSxvKXt2YXIgcz1pLngtbi8yLW8sYz1pLngrbi8yK28sbD1pLnktbi8yLW8sdT1pLnkrbi8yK287cmV0dXJuIHM8PWUmJmU8PWMmJmw8PXQmJnQ8PXV9LHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT1lKk1hdGguY29zKHIpLXQqTWF0aC5zaW4ociksbz1lKk1hdGguc2luKHIpK3QqTWF0aC5jb3Mocikscz1hKm4sYz1vKm47cmV0dXJue3g6cytpLngseTpjK2kueX19LGk9ZnVuY3Rpb24oZSx0LG4saSl7Zm9yKHZhciBhPVtdLG89MDtvPGUubGVuZ3RoO28rPTIpe3ZhciBzPWVbb10sYz1lW28rMV07YS5wdXNoKHIocyxjLHQsbixpKSl9cmV0dXJuIGF9LGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTt0LnB1c2goci54LHIueSl9cmV0dXJuIHR9LG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHN0eWxlKGB3aWR0aGApLnBmVmFsdWUqZS5wc3R5bGUoYGFycm93LXNjYWxlYCkucGZWYWx1ZSoyfSxzPWZ1bmN0aW9uKHIscyl7WihzKSYmKHM9ZVtzXSksZVtyXT1hbCh7bmFtZTpyLHBvaW50czpbLS4xNSwtLjMsLjE1LC0uMywuMTUsLjMsLS4xNSwuM10sY29sbGlkZTpmdW5jdGlvbihlLHQsbixyLG8scyl7cmV0dXJuIHBmKGUsdCxhKGkodGhpcy5wb2ludHMsbisyKnMscixvKSkpfSxyb3VnaENvbGxpZGU6bixkcmF3OmZ1bmN0aW9uKGUsbixyLGEpe3ZhciBvPWkodGhpcy5wb2ludHMsbixyLGEpO3QuYXJyb3dTaGFwZUltcGwoYHBvbHlnb25gKShlLG8pfSxzcGFjaW5nOmZ1bmN0aW9uKGUpe3JldHVybiAwfSxnYXA6b30scyl9O3MoYG5vbmVgLHtjb2xsaWRlOmp1LHJvdWdoQ29sbGlkZTpqdSxkcmF3Ok51LHNwYWNpbmc6TXUsZ2FwOk11fSkscyhgdHJpYW5nbGVgLHtwb2ludHM6Wy0uMTUsLS4zLDAsMCwuMTUsLS4zXX0pLHMoYGFycm93YCxgdHJpYW5nbGVgKSxzKGB0cmlhbmdsZS1iYWNrY3VydmVgLHtwb2ludHM6ZS50cmlhbmdsZS5wb2ludHMsY29udHJvbFBvaW50OlswLC0uMTVdLHJvdWdoQ29sbGlkZTpuLGRyYXc6ZnVuY3Rpb24oZSxuLGEsbyxzKXt2YXIgYz1pKHRoaXMucG9pbnRzLG4sYSxvKSxsPXRoaXMuY29udHJvbFBvaW50LHU9cihsWzBdLGxbMV0sbixhLG8pO3QuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShlLGMsdSl9LGdhcDpmdW5jdGlvbihlKXtyZXR1cm4gbyhlKSouOH19KSxzKGB0cmlhbmdsZS10ZWVgLHtwb2ludHM6WzAsMCwuMTUsLS4zLC0uMTUsLS4zLDAsMF0scG9pbnRzVGVlOlstLjE1LC0uNCwtLjE1LC0uNSwuMTUsLS41LC4xNSwtLjRdLGNvbGxpZGU6ZnVuY3Rpb24oZSx0LG4scixvLHMsYyl7dmFyIGw9YShpKHRoaXMucG9pbnRzLG4rMipjLHIsbykpLHU9YShpKHRoaXMucG9pbnRzVGVlLG4rMipjLHIsbykpO3JldHVybiBwZihlLHQsbCl8fHBmKGUsdCx1KX0sZHJhdzpmdW5jdGlvbihlLG4scixhLG8pe3ZhciBzPWkodGhpcy5wb2ludHMsbixyLGEpLGM9aSh0aGlzLnBvaW50c1RlZSxuLHIsYSk7dC5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGUscyxjKX19KSxzKGBjaXJjbGUtdHJpYW5nbGVgLHtyYWRpdXM6LjE1LHBvaW50c1RyOlswLC0uMTUsLjE1LC0uNDUsLS4xNSwtLjQ1LDAsLS4xNV0sY29sbGlkZTpmdW5jdGlvbihlLHQsbixyLG8scyxjKXt2YXIgbD1vLHU9KGwueC1lKSoqMisobC55LXQpKioyPD0oKG4rMipjKSp0aGlzLnJhZGl1cykqKjI7cmV0dXJuIHBmKGUsdCxhKGkodGhpcy5wb2ludHMsbisyKmMscixvKSkpfHx1fSxkcmF3OmZ1bmN0aW9uKGUsbixyLGEsbyl7dmFyIHM9aSh0aGlzLnBvaW50c1RyLG4scixhKTt0LmFycm93U2hhcGVJbXBsKHRoaXMubmFtZSkoZSxzLGEueCxhLnksdGhpcy5yYWRpdXMqbil9LHNwYWNpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0QXJyb3dXaWR0aChlLnBzdHlsZShgd2lkdGhgKS5wZlZhbHVlLGUucHN0eWxlKGBhcnJvdy1zY2FsZWApLnZhbHVlKSp0aGlzLnJhZGl1c319KSxzKGB0cmlhbmdsZS1jcm9zc2Ase3BvaW50czpbMCwwLC4xNSwtLjMsLS4xNSwtLjMsMCwwXSxiYXNlQ3Jvc3NMaW5lUHRzOlstLjE1LC0uNCwtLjE1LC0uNCwuMTUsLS40LC4xNSwtLjRdLGNyb3NzTGluZVB0czpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYmFzZUNyb3NzTGluZVB0cy5zbGljZSgpLHI9dC9lLGk9MyxhPTU7cmV0dXJuIG5baV09bltpXS1yLG5bYV09blthXS1yLG59LGNvbGxpZGU6ZnVuY3Rpb24oZSx0LG4scixvLHMsYyl7dmFyIGw9YShpKHRoaXMucG9pbnRzLG4rMipjLHIsbykpLHU9YShpKHRoaXMuY3Jvc3NMaW5lUHRzKG4scyksbisyKmMscixvKSk7cmV0dXJuIHBmKGUsdCxsKXx8cGYoZSx0LHUpfSxkcmF3OmZ1bmN0aW9uKGUsbixyLGEsbyl7dmFyIHM9aSh0aGlzLnBvaW50cyxuLHIsYSksYz1pKHRoaXMuY3Jvc3NMaW5lUHRzKG4sbyksbixyLGEpO3QuYXJyb3dTaGFwZUltcGwodGhpcy5uYW1lKShlLHMsYyl9fSkscyhgdmVlYCx7cG9pbnRzOlstLjE1LC0uMywwLDAsLjE1LC0uMywwLC0uMTVdLGdhcDpmdW5jdGlvbihlKXtyZXR1cm4gbyhlKSouNTI1fX0pLHMoYGNpcmNsZWAse3JhZGl1czouMTUsY29sbGlkZTpmdW5jdGlvbihlLHQsbixyLGksYSxvKXt2YXIgcz1pO3JldHVybihzLngtZSkqKjIrKHMueS10KSoqMjw9KChuKzIqbykqdGhpcy5yYWRpdXMpKioyfSxkcmF3OmZ1bmN0aW9uKGUsbixyLGksYSl7dC5hcnJvd1NoYXBlSW1wbCh0aGlzLm5hbWUpKGUsaS54LGkueSx0aGlzLnJhZGl1cypuKX0sc3BhY2luZzpmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRBcnJvd1dpZHRoKGUucHN0eWxlKGB3aWR0aGApLnBmVmFsdWUsZS5wc3R5bGUoYGFycm93LXNjYWxlYCkudmFsdWUpKnRoaXMucmFkaXVzfX0pLHMoYHRlZWAse3BvaW50czpbLS4xNSwwLC0uMTUsLS4xLC4xNSwtLjEsLjE1LDBdLHNwYWNpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIDF9LGdhcDpmdW5jdGlvbihlKXtyZXR1cm4gMX19KSxzKGBzcXVhcmVgLHtwb2ludHM6Wy0uMTUsMCwuMTUsMCwuMTUsLS4zLC0uMTUsLS4zXX0pLHMoYGRpYW1vbmRgLHtwb2ludHM6Wy0uMTUsLS4xNSwwLC0uMywuMTUsLS4xNSwwLDBdLGdhcDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wc3R5bGUoYHdpZHRoYCkucGZWYWx1ZSplLnBzdHlsZShgYXJyb3ctc2NhbGVgKS52YWx1ZX19KSxzKGBjaGV2cm9uYCx7cG9pbnRzOlswLDAsLS4xNSwtLjE1LC0uMSwtLjIsMCwtLjEsLjEsLS4yLC4xNSwtLjE1XSxnYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIC45NSplLnBzdHlsZShgd2lkdGhgKS5wZlZhbHVlKmUucHN0eWxlKGBhcnJvdy1zY2FsZWApLnZhbHVlfX0pfTt2YXIgWmI9e307WmIucHJvamVjdEludG9WaWV3cG9ydD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3kscj10aGlzLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKSxpPXJbMF0sYT1yWzFdLG89cls0XSxzPW4ucGFuKCksYz1uLnpvb20oKTtyZXR1cm5bKChlLWkpL28tcy54KS9jLCgodC1hKS9vLXMueSkvY119LFpiLmZpbmRDb250YWluZXJDbGllbnRDb29yZHM9ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lckJCKXJldHVybiB0aGlzLmNvbnRhaW5lckJCO3ZhciBlPXRoaXMuY29udGFpbmVyLHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuY3kud2luZG93KCkuZ2V0Q29tcHV0ZWRTdHlsZShlKSxyPWZ1bmN0aW9uKGUpe3JldHVybiBwYXJzZUZsb2F0KG4uZ2V0UHJvcGVydHlWYWx1ZShlKSl9LGk9e2xlZnQ6cihgcGFkZGluZy1sZWZ0YCkscmlnaHQ6cihgcGFkZGluZy1yaWdodGApLHRvcDpyKGBwYWRkaW5nLXRvcGApLGJvdHRvbTpyKGBwYWRkaW5nLWJvdHRvbWApfSxhPXtsZWZ0OnIoYGJvcmRlci1sZWZ0LXdpZHRoYCkscmlnaHQ6cihgYm9yZGVyLXJpZ2h0LXdpZHRoYCksdG9wOnIoYGJvcmRlci10b3Atd2lkdGhgKSxib3R0b206cihgYm9yZGVyLWJvdHRvbS13aWR0aGApfSxvPWUuY2xpZW50V2lkdGgscz1lLmNsaWVudEhlaWdodCxjPWkubGVmdCtpLnJpZ2h0LGw9aS50b3AraS5ib3R0b20sdT1hLmxlZnQrYS5yaWdodCxkPXQud2lkdGgvKG8rdSksZj1vLWMscD1zLWwsbT10LmxlZnQraS5sZWZ0K2EubGVmdCxoPXQudG9wK2kudG9wK2EudG9wO3JldHVybiB0aGlzLmNvbnRhaW5lckJCPVttLGgsZixwLGRdfSxaYi5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lckJCPW51bGx9LFpiLmZpbmROZWFyZXN0RWxlbWVudD1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maW5kTmVhcmVzdEVsZW1lbnRzKGUsdCxuLHIpWzBdfSxaYi5maW5kTmVhcmVzdEVsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsYT10aGlzLG89YS5nZXRDYWNoZWRaU29ydGVkRWxlcygpLHM9W10sYz1hLmN5Lnpvb20oKSxsPWEuY3kuaGFzQ29tcG91bmROb2RlcygpLHU9KHI/MjQ6OCkvYyxkPShyPzg6MikvYyxmPShyPzg6MikvYyxwPTEvMCxtLGg7biYmKG89by5pbnRlcmFjdGl2ZSk7ZnVuY3Rpb24gZyhlLHQpe2lmKGUuaXNOb2RlKCkpe2lmKGgpcmV0dXJuO2g9ZSxzLnB1c2goZSl9aWYoZS5pc0VkZ2UoKSYmKHQ9PW51bGx8fHQ8cCkpe2lmKG0pe2lmKG0ucHN0eWxlKGB6LWNvbXBvdW5kLWRlcHRoYCkudmFsdWU9PT1lLnBzdHlsZShgei1jb21wb3VuZC1kZXB0aGApLnZhbHVlJiZtLnBzdHlsZShgei1jb21wb3VuZC1kZXB0aGApLnZhbHVlPT09ZS5wc3R5bGUoYHotY29tcG91bmQtZGVwdGhgKS52YWx1ZSl7Zm9yKHZhciBuPTA7bjxzLmxlbmd0aDtuKyspaWYoc1tuXS5pc0VkZ2UoKSl7c1tuXT1lLG09ZSxwPXQ/P3A7YnJlYWt9fX1lbHNlIHMucHVzaChlKSxtPWUscD10Pz9wfX1mdW5jdGlvbiBfKG4pe3ZhciByPW4ub3V0ZXJXaWR0aCgpKzIqZCxvPW4ub3V0ZXJIZWlnaHQoKSsyKmQscz1yLzIsYz1vLzIsbD1uLnBvc2l0aW9uKCksdT1uLnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnZhbHVlPT09YGF1dG9gP2BhdXRvYDpuLnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnBmVmFsdWUsZj1uLl9wcml2YXRlLnJzY3JhdGNoO2lmKGwueC1zPD1lJiZlPD1sLngrcyYmbC55LWM8PXQmJnQ8PWwueStjJiZhLm5vZGVTaGFwZXNbaS5nZXROb2RlU2hhcGUobildLmNoZWNrUG9pbnQoZSx0LDAscixvLGwueCxsLnksdSxmKSlyZXR1cm4gZyhuLDApLCEwfWZ1bmN0aW9uIHYobil7dmFyIHI9bi5fcHJpdmF0ZSxvPXIucnNjcmF0Y2gsYz1uLnBzdHlsZShgd2lkdGhgKS5wZlZhbHVlLGQ9bi5wc3R5bGUoYGFycm93LXNjYWxlYCkudmFsdWUsZj1jLzIrdSxwPWYqZixtPWYqMixoPXIuc291cmNlLHY9ci50YXJnZXQseTtpZihvLmVkZ2VUeXBlPT09YHNlZ21lbnRzYHx8by5lZGdlVHlwZT09PWBzdHJhaWdodGB8fG8uZWRnZVR5cGU9PT1gaGF5c3RhY2tgKXtmb3IodmFyIGI9by5hbGxwdHMseD0wO3grMzxiLmxlbmd0aDt4Kz0yKWlmKHNmKGUsdCxiW3hdLGJbeCsxXSxiW3grMl0sYlt4KzNdLG0pJiZwPih5PWZmKGUsdCxiW3hdLGJbeCsxXSxiW3grMl0sYlt4KzNdKSkpcmV0dXJuIGcobix5KSwhMH1lbHNlIGlmKG8uZWRnZVR5cGU9PT1gYmV6aWVyYHx8by5lZGdlVHlwZT09PWBtdWx0aWJlemllcmB8fG8uZWRnZVR5cGU9PT1gc2VsZmB8fG8uZWRnZVR5cGU9PT1gY29tcG91bmRgKXtmb3IodmFyIGI9by5hbGxwdHMseD0wO3grNTxvLmFsbHB0cy5sZW5ndGg7eCs9NClpZihjZihlLHQsYlt4XSxiW3grMV0sYlt4KzJdLGJbeCszXSxiW3grNF0sYlt4KzVdLG0pJiZwPih5PWRmKGUsdCxiW3hdLGJbeCsxXSxiW3grMl0sYlt4KzNdLGJbeCs0XSxiW3grNV0pKSlyZXR1cm4gZyhuLHkpLCEwfWZvcih2YXIgaD1ofHxyLnNvdXJjZSx2PXZ8fHIudGFyZ2V0LFM9aS5nZXRBcnJvd1dpZHRoKGMsZCksQz1be25hbWU6YHNvdXJjZWAseDpvLmFycm93U3RhcnRYLHk6by5hcnJvd1N0YXJ0WSxhbmdsZTpvLnNyY0Fycm93QW5nbGV9LHtuYW1lOmB0YXJnZXRgLHg6by5hcnJvd0VuZFgseTpvLmFycm93RW5kWSxhbmdsZTpvLnRndEFycm93QW5nbGV9LHtuYW1lOmBtaWQtc291cmNlYCx4Om8ubWlkWCx5Om8ubWlkWSxhbmdsZTpvLm1pZHNyY0Fycm93QW5nbGV9LHtuYW1lOmBtaWQtdGFyZ2V0YCx4Om8ubWlkWCx5Om8ubWlkWSxhbmdsZTpvLm1pZHRndEFycm93QW5nbGV9XSx4PTA7eDxDLmxlbmd0aDt4Kyspe3ZhciB3PUNbeF0sVD1hLmFycm93U2hhcGVzW24ucHN0eWxlKHcubmFtZStgLWFycm93LXNoYXBlYCkudmFsdWVdLEU9bi5wc3R5bGUoYHdpZHRoYCkucGZWYWx1ZTtpZihULnJvdWdoQ29sbGlkZShlLHQsUyx3LmFuZ2xlLHt4OncueCx5OncueX0sRSx1KSYmVC5jb2xsaWRlKGUsdCxTLHcuYW5nbGUse3g6dy54LHk6dy55fSxFLHUpKXJldHVybiBnKG4pLCEwfWwmJnMubGVuZ3RoPjAmJihfKGgpLF8odikpfWZ1bmN0aW9uIHkoZSx0LG4pe3JldHVybiBxdShlLHQsbil9ZnVuY3Rpb24gYihuLHIpe3ZhciBpPW4uX3ByaXZhdGUsYT1mLG89cj9yK2AtYDpgYDtuLmJvdW5kaW5nQm94KCk7dmFyIHM9aS5sYWJlbEJvdW5kc1tyfHxgbWFpbmBdLGM9bi5wc3R5bGUobytgbGFiZWxgKS52YWx1ZTtpZihuLnBzdHlsZShgdGV4dC1ldmVudHNgKS5zdHJWYWx1ZT09PWB5ZXNgJiZjKXt2YXIgbD15KGkucnNjcmF0Y2gsYGxhYmVsWGAsciksdT15KGkucnNjcmF0Y2gsYGxhYmVsWWAsciksZD15KGkucnNjcmF0Y2gsYGxhYmVsQW5nbGVgLHIpLHA9bi5wc3R5bGUobytgdGV4dC1tYXJnaW4teGApLnBmVmFsdWUsbT1uLnBzdHlsZShvK2B0ZXh0LW1hcmdpbi15YCkucGZWYWx1ZSxoPXMueDEtYS1wLF89cy54MithLXAsdj1zLnkxLWEtbSxiPXMueTIrYS1tO2lmKGQpe3ZhciB4PU1hdGguY29zKGQpLFM9TWF0aC5zaW4oZCksQz1mdW5jdGlvbihlLHQpe3JldHVybiBlLT1sLHQtPXUse3g6ZSp4LXQqUytsLHk6ZSpTK3QqeCt1fX0sdz1DKGgsdiksVD1DKGgsYiksRT1DKF8sdiksRD1DKF8sYik7aWYocGYoZSx0LFt3LngrcCx3LnkrbSxFLngrcCxFLnkrbSxELngrcCxELnkrbSxULngrcCxULnkrbV0pKXJldHVybiBnKG4pLCEwfWVsc2UgaWYoJGQocyxlLHQpKXJldHVybiBnKG4pLCEwfX1mb3IodmFyIHg9by5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIFM9b1t4XTtTLmlzTm9kZSgpP18oUyl8fGIoUyk6dihTKXx8YihTKXx8YihTLGBzb3VyY2VgKXx8YihTLGB0YXJnZXRgKX1yZXR1cm4gc30sWmIuZ2V0QWxsSW5Cb3g9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dGhpcy5nZXRDYWNoZWRaU29ydGVkRWxlcygpLmludGVyYWN0aXZlLGE9Mi90aGlzLmN5Lnpvb20oKSxvPVtdLHM9TWF0aC5taW4oZSxuKSxjPU1hdGgubWF4KGUsbiksbD1NYXRoLm1pbih0LHIpLHU9TWF0aC5tYXgodCxyKTtlPXMsbj1jLHQ9bCxyPXU7dmFyIGQ9V2Qoe3gxOmUseTE6dCx4MjpuLHkyOnJ9KSxmPVt7eDpkLngxLHk6ZC55MX0se3g6ZC54Mix5OmQueTF9LHt4OmQueDIseTpkLnkyfSx7eDpkLngxLHk6ZC55Mn1dLHA9W1tmWzBdLGZbMV1dLFtmWzFdLGZbMl1dLFtmWzJdLGZbM11dLFtmWzNdLGZbMF1dXTtmdW5jdGlvbiBtKGUsdCxuKXtyZXR1cm4gcXUoZSx0LG4pfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbj1lLl9wcml2YXRlLHI9YSxpPWBgO2UuYm91bmRpbmdCb3goKTt2YXIgbz1uLmxhYmVsQm91bmRzLm1haW47aWYoIW8pcmV0dXJuIG51bGw7dmFyIHM9bShuLnJzY3JhdGNoLGBsYWJlbFhgLHQpLGM9bShuLnJzY3JhdGNoLGBsYWJlbFlgLHQpLGw9bShuLnJzY3JhdGNoLGBsYWJlbEFuZ2xlYCx0KSx1PWUucHN0eWxlKGkrYHRleHQtbWFyZ2luLXhgKS5wZlZhbHVlLGQ9ZS5wc3R5bGUoaStgdGV4dC1tYXJnaW4teWApLnBmVmFsdWUsZj1vLngxLXItdSxwPW8ueDIrci11LGg9by55MS1yLWQsZz1vLnkyK3ItZDtpZihsKXt2YXIgXz1NYXRoLmNvcyhsKSx2PU1hdGguc2luKGwpLHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS09cyx0LT1jLHt4OmUqXy10KnYrcyx5OmUqdit0Kl8rY319O3JldHVyblt5KGYsaCkseShwLGgpLHkocCxnKSx5KGYsZyldfXJldHVyblt7eDpmLHk6aH0se3g6cCx5Omh9LHt4OnAseTpnfSx7eDpmLHk6Z31dfWZ1bmN0aW9uIGcoZSx0LG4scil7ZnVuY3Rpb24gaShlLHQsbil7cmV0dXJuKG4ueS1lLnkpKih0LngtZS54KT4odC55LWUueSkqKG4ueC1lLngpfXJldHVybiBpKGUsbixyKSE9PWkodCxuLHIpJiZpKGUsdCxuKSE9PWkoZSx0LHIpfWZvcih2YXIgXz0wO188aS5sZW5ndGg7XysrKXt2YXIgdj1pW19dO2lmKHYuaXNOb2RlKCkpe3ZhciB5PXYsYj15LnBzdHlsZShgdGV4dC1ldmVudHNgKS5zdHJWYWx1ZT09PWB5ZXNgLHg9eS5wc3R5bGUoYGJveC1zZWxlY3Rpb25gKS5zdHJWYWx1ZSxTPXkucHN0eWxlKGBib3gtc2VsZWN0LWxhYmVsc2ApLnN0clZhbHVlPT09YHllc2A7aWYoeD09PWBub25lYCljb250aW51ZTt2YXIgQz0oeD09PWBvdmVybGFwYHx8UykmJmIsdz15LmJvdW5kaW5nQm94KHtpbmNsdWRlTm9kZXM6ITAsaW5jbHVkZUVkZ2VzOiExLGluY2x1ZGVMYWJlbHM6Q30pO2lmKHg9PT1gY29udGFpbmApe3ZhciBUPSExO2lmKFMmJmIpe3ZhciBFPWgoeSk7RSYmRmYoRSxmKSYmKG8ucHVzaCh5KSxUPSEwKX0hVCYmdGYoZCx3KSYmby5wdXNoKHkpfWVsc2UgaWYoeD09PWBvdmVybGFwYCYmUWQoZCx3KSl7dmFyIEQ9eS5ib3VuZGluZ0JveCh7aW5jbHVkZU5vZGVzOiEwLGluY2x1ZGVFZGdlczohMCxpbmNsdWRlTGFiZWxzOiExLGluY2x1ZGVNYWluTGFiZWxzOiExLGluY2x1ZGVTb3VyY2VMYWJlbHM6ITEsaW5jbHVkZVRhcmdldExhYmVsczohMX0pO2lmKEZmKFt7eDpELngxLHk6RC55MX0se3g6RC54Mix5OkQueTF9LHt4OkQueDIseTpELnkyfSx7eDpELngxLHk6RC55Mn1dLGYpKW8ucHVzaCh5KTtlbHNle3ZhciBPPWgoeSk7TyYmRmYoTyxmKSYmby5wdXNoKHkpfX19ZWxzZXt2YXIgaz12LEE9ay5fcHJpdmF0ZSxqPUEucnNjcmF0Y2gsTT1rLnBzdHlsZShgYm94LXNlbGVjdGlvbmApLnN0clZhbHVlO2lmKE09PT1gbm9uZWApY29udGludWU7aWYoTT09PWBjb250YWluYCl7aWYoai5zdGFydFghPW51bGwmJmouc3RhcnRZIT1udWxsJiYhJGQoZCxqLnN0YXJ0WCxqLnN0YXJ0WSl8fGouZW5kWCE9bnVsbCYmai5lbmRZIT1udWxsJiYhJGQoZCxqLmVuZFgsai5lbmRZKSljb250aW51ZTtpZihqLmVkZ2VUeXBlPT09YGJlemllcmB8fGouZWRnZVR5cGU9PT1gbXVsdGliZXppZXJgfHxqLmVkZ2VUeXBlPT09YHNlbGZgfHxqLmVkZ2VUeXBlPT09YGNvbXBvdW5kYHx8ai5lZGdlVHlwZT09PWBzZWdtZW50c2B8fGouZWRnZVR5cGU9PT1gaGF5c3RhY2tgKXtmb3IodmFyIE49QS5yc3R5bGUuYmV6aWVyUHRzfHxBLnJzdHlsZS5saW5lUHRzfHxBLnJzdHlsZS5oYXlzdGFja1B0cyxQPSEwLEY9MDtGPE4ubGVuZ3RoO0YrKylpZighZWYoZCxOW0ZdKSl7UD0hMTticmVha31QJiZvLnB1c2goayl9ZWxzZSBqLmVkZ2VUeXBlPT09YHN0cmFpZ2h0YCYmby5wdXNoKGspfWVsc2UgaWYoTT09PWBvdmVybGFwYCl7dmFyIEk9ITE7aWYoai5zdGFydFghPW51bGwmJmouc3RhcnRZIT1udWxsJiZqLmVuZFghPW51bGwmJmouZW5kWSE9bnVsbCYmKCRkKGQsai5zdGFydFgsai5zdGFydFkpfHwkZChkLGouZW5kWCxqLmVuZFkpKSlvLnB1c2goayksST0hMDtlbHNlIGlmKCFJJiZqLmVkZ2VUeXBlPT09YGhheXN0YWNrYCl7Zm9yKHZhciBMPUEucnN0eWxlLmhheXN0YWNrUHRzLFI9MDtSPEwubGVuZ3RoO1IrKylpZihlZihkLExbUl0pKXtvLnB1c2goayksST0hMDticmVha319aWYoIUkpe3ZhciB6PUEucnN0eWxlLmJlemllclB0c3x8QS5yc3R5bGUubGluZVB0c3x8QS5yc3R5bGUuaGF5c3RhY2tQdHM7aWYoKCF6fHx6Lmxlbmd0aDwyKSYmai5lZGdlVHlwZT09PWBzdHJhaWdodGAmJmouc3RhcnRYIT1udWxsJiZqLnN0YXJ0WSE9bnVsbCYmai5lbmRYIT1udWxsJiZqLmVuZFkhPW51bGwmJih6PVt7eDpqLnN0YXJ0WCx5Omouc3RhcnRZfSx7eDpqLmVuZFgseTpqLmVuZFl9XSksIXp8fHoubGVuZ3RoPDIpY29udGludWU7Zm9yKHZhciBCPTA7Qjx6Lmxlbmd0aC0xO0IrKyl7Zm9yKHZhciBWPXpbQl0sSD16W0IrMV0sVT0wO1U8cC5sZW5ndGg7VSsrKXt2YXIgVz1tYyhwW1VdLDIpLGVlPVdbMF0sRz1XWzFdO2lmKGcoVixILGVlLEcpKXtvLnB1c2goayksST0hMDticmVha319aWYoSSlicmVha319fX19cmV0dXJuIG99O3ZhciBRYj17fTtRYi5jYWxjdWxhdGVBcnJvd0FuZ2xlcz1mdW5jdGlvbihlKXt2YXIgdD1lLl9wcml2YXRlLnJzY3JhdGNoLG49dC5lZGdlVHlwZT09PWBoYXlzdGFja2Ascj10LmVkZ2VUeXBlPT09YGJlemllcmAsaT10LmVkZ2VUeXBlPT09YG11bHRpYmV6aWVyYCxhPXQuZWRnZVR5cGU9PT1gc2VnbWVudHNgLG89dC5lZGdlVHlwZT09PWBjb21wb3VuZGAscz10LmVkZ2VUeXBlPT09YHNlbGZgLGMsbCx1LGQsZixwLG0saDtpZihuPyh1PXQuaGF5c3RhY2tQdHNbMF0sZD10LmhheXN0YWNrUHRzWzFdLGY9dC5oYXlzdGFja1B0c1syXSxwPXQuaGF5c3RhY2tQdHNbM10pOih1PXQuYXJyb3dTdGFydFgsZD10LmFycm93U3RhcnRZLGY9dC5hcnJvd0VuZFgscD10LmFycm93RW5kWSksbT10Lm1pZFgsaD10Lm1pZFksYSljPXUtdC5zZWdwdHNbMF0sbD1kLXQuc2VncHRzWzFdO2Vsc2UgaWYoaXx8b3x8c3x8cil7dmFyIGc9dC5hbGxwdHMsXz1CZChnWzBdLGdbMl0sZ1s0XSwuMSksdj1CZChnWzFdLGdbM10sZ1s1XSwuMSk7Yz11LV8sbD1kLXZ9ZWxzZSBjPXUtbSxsPWQtaDt0LnNyY0Fycm93QW5nbGU9UGQoYyxsKTt2YXIgbT10Lm1pZFgsaD10Lm1pZFk7aWYobiYmKG09KHUrZikvMixoPShkK3ApLzIpLGM9Zi11LGw9cC1kLGEpe3ZhciBnPXQuYWxscHRzO2lmKGcubGVuZ3RoLzIlMj09MCl7dmFyIHk9Zy5sZW5ndGgvMixiPXktMjtjPWdbeV0tZ1tiXSxsPWdbeSsxXS1nW2IrMV19ZWxzZSBpZih0LmlzUm91bmQpYz10Lm1pZFZlY3RvclsxXSxsPS10Lm1pZFZlY3RvclswXTtlbHNle3ZhciB5PWcubGVuZ3RoLzItMSxiPXktMjtjPWdbeV0tZ1tiXSxsPWdbeSsxXS1nW2IrMV19fWVsc2UgaWYoaXx8b3x8cyl7dmFyIGc9dC5hbGxwdHMseD10LmN0cmxwdHMsUyxDLHcsVDtpZih4Lmxlbmd0aC8yJTI9PTApe3ZhciBFPWcubGVuZ3RoLzItMSxEPUUrMixPPUQrMjtTPUJkKGdbRV0sZ1tEXSxnW09dLDApLEM9QmQoZ1tFKzFdLGdbRCsxXSxnW08rMV0sMCksdz1CZChnW0VdLGdbRF0sZ1tPXSwxZS00KSxUPUJkKGdbRSsxXSxnW0QrMV0sZ1tPKzFdLDFlLTQpfWVsc2V7dmFyIEQ9Zy5sZW5ndGgvMi0xLEU9RC0yLE89RCsyO1M9QmQoZ1tFXSxnW0RdLGdbT10sLjQ5OTkpLEM9QmQoZ1tFKzFdLGdbRCsxXSxnW08rMV0sLjQ5OTkpLHc9QmQoZ1tFXSxnW0RdLGdbT10sLjUpLFQ9QmQoZ1tFKzFdLGdbRCsxXSxnW08rMV0sLjUpfWM9dy1TLGw9VC1DfWlmKHQubWlkdGd0QXJyb3dBbmdsZT1QZChjLGwpLHQubWlkRGlzcFg9Yyx0Lm1pZERpc3BZPWwsYyo9LTEsbCo9LTEsYSl7dmFyIGc9dC5hbGxwdHM7aWYoZy5sZW5ndGgvMiUyIT0wJiYhdC5pc1JvdW5kKXt2YXIgeT1nLmxlbmd0aC8yLTEsaz15KzI7Yz0tKGdba10tZ1t5XSksbD0tKGdbaysxXS1nW3krMV0pfX1pZih0Lm1pZHNyY0Fycm93QW5nbGU9UGQoYyxsKSxhKWM9Zi10LnNlZ3B0c1t0LnNlZ3B0cy5sZW5ndGgtMl0sbD1wLXQuc2VncHRzW3Quc2VncHRzLmxlbmd0aC0xXTtlbHNlIGlmKGl8fG98fHN8fHIpe3ZhciBnPXQuYWxscHRzLEE9Zy5sZW5ndGgsXz1CZChnW0EtNl0sZ1tBLTRdLGdbQS0yXSwuOSksdj1CZChnW0EtNV0sZ1tBLTNdLGdbQS0xXSwuOSk7Yz1mLV8sbD1wLXZ9ZWxzZSBjPWYtbSxsPXAtaDt0LnRndEFycm93QW5nbGU9UGQoYyxsKX0sUWIuZ2V0QXJyb3dXaWR0aD1RYi5nZXRBcnJvd0hlaWdodD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYXJyb3dXaWR0aENhY2hlPXRoaXMuYXJyb3dXaWR0aENhY2hlfHx7fSxyPW5bZStgLCBgK3RdO3JldHVybiByfHwocj1NYXRoLm1heCgoZSoxMy4zNykqKi45LDI5KSp0LG5bZStgLCBgK3RdPXIscil9O3ZhciAkYixleCx0eD17fSxueD17fSxyeCxpeCxheCxveCxzeCxjeCxseCx1eCxkeCxmeCxweCxteCxoeCxneCxfeCx2eD1mdW5jdGlvbihlLHQsbil7bi54PXQueC1lLngsbi55PXQueS1lLnksbi5sZW49TWF0aC5zcXJ0KG4ueCpuLngrbi55Km4ueSksbi5ueD1uLngvbi5sZW4sbi5ueT1uLnkvbi5sZW4sbi5hbmc9TWF0aC5hdGFuMihuLm55LG4ubngpfSx5eD1mdW5jdGlvbihlLHQpe3QueD1lLngqLTEsdC55PWUueSotMSx0Lm54PWUubngqLTEsdC5ueT1lLm55Ki0xLHQuYW5nPWUuYW5nPjA/LShNYXRoLlBJLWUuYW5nKTpNYXRoLlBJK2UuYW5nfSxieD1mdW5jdGlvbihlLHQsbixyLGkpe2U9PT1feD95eChueCx0eCk6dngodCxlLHR4KSx2eCh0LG4sbngpLHJ4PXR4Lm54Km54Lm55LXR4Lm55Km54Lm54LGl4PXR4Lm54Km54Lm54LXR4Lm55Ki1ueC5ueSxzeD1NYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSxyeCkpKSxNYXRoLmFicyhzeCk8MWUtNj8oJGI9dC54LGV4PXQueSxseD1keD0wKTooYXg9MSxveD0hMSxpeDwwP3N4PDA/c3g9TWF0aC5QSStzeDooc3g9TWF0aC5QSS1zeCxheD0tMSxveD0hMCk6c3g+MCYmKGF4PS0xLG94PSEwKSxkeD10LnJhZGl1cz09PXZvaWQgMD9yOnQucmFkaXVzLGN4PXN4LzIsZng9TWF0aC5taW4odHgubGVuLzIsbngubGVuLzIpLGk/KHV4PU1hdGguYWJzKE1hdGguY29zKGN4KSpkeC9NYXRoLnNpbihjeCkpLHV4PmZ4Pyh1eD1meCxseD1NYXRoLmFicyh1eCpNYXRoLnNpbihjeCkvTWF0aC5jb3MoY3gpKSk6bHg9ZHgpOih1eD1NYXRoLm1pbihmeCxkeCksbHg9TWF0aC5hYnModXgqTWF0aC5zaW4oY3gpL01hdGguY29zKGN4KSkpLGh4PXQueCtueC5ueCp1eCxneD10LnkrbngubnkqdXgsJGI9aHgtbngubnkqbHgqYXgsZXg9Z3grbngubngqbHgqYXgscHg9dC54K3R4Lm54KnV4LG14PXQueSt0eC5ueSp1eCxfeD10KX07ZnVuY3Rpb24geHgoZSx0KXt0LnJhZGl1cz09PTA/ZS5saW5lVG8odC5jeCx0LmN5KTplLmFyYyh0LmN4LHQuY3ksdC5yYWRpdXMsdC5zdGFydEFuZ2xlLHQuZW5kQW5nbGUsdC5jb3VudGVyQ2xvY2t3aXNlKX1mdW5jdGlvbiBTeChlLHQsbixyKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjQmJmFyZ3VtZW50c1s0XSE9PXZvaWQgMD9hcmd1bWVudHNbNF06ITA7cmV0dXJuIHI9PT0wfHx0LnJhZGl1cz09PTA/e2N4OnQueCxjeTp0LnkscmFkaXVzOjAsc3RhcnRYOnQueCxzdGFydFk6dC55LHN0b3BYOnQueCxzdG9wWTp0Lnksc3RhcnRBbmdsZTp2b2lkIDAsZW5kQW5nbGU6dm9pZCAwLGNvdW50ZXJDbG9ja3dpc2U6dm9pZCAwfTooYngoZSx0LG4scixpKSx7Y3g6JGIsY3k6ZXgscmFkaXVzOmx4LHN0YXJ0WDpweCxzdGFydFk6bXgsc3RvcFg6aHgsc3RvcFk6Z3gsc3RhcnRBbmdsZTp0eC5hbmcrTWF0aC5QSS8yKmF4LGVuZEFuZ2xlOm54LmFuZy1NYXRoLlBJLzIqYXgsY291bnRlckNsb2Nrd2lzZTpveH0pfXZhciBDeD0uMDEsd3g9TWF0aC5zcXJ0KDIqQ3gpLFR4PXt9O1R4LmZpbmRNaWRwdFB0c0V0Yz1mdW5jdGlvbihlLHQpe3ZhciBuPXQucG9zUHRzLHI9dC5pbnRlcnNlY3Rpb25QdHMsaT10LnZlY3Rvck5vcm1JbnZlcnNlLGEsbz1lLnBzdHlsZShgc291cmNlLWVuZHBvaW50YCkscz1lLnBzdHlsZShgdGFyZ2V0LWVuZHBvaW50YCksYz1vLnVuaXRzIT1udWxsJiZzLnVuaXRzIT1udWxsLGw9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ci10LGE9bi1lLG89TWF0aC5zcXJ0KGEqYStpKmkpO3JldHVybnt4Oi1pL28seTphL299fTtzd2l0Y2goZS5wc3R5bGUoYGVkZ2UtZGlzdGFuY2VzYCkudmFsdWUpe2Nhc2Vgbm9kZS1wb3NpdGlvbmA6YT1uO2JyZWFrO2Nhc2VgaW50ZXJzZWN0aW9uYDphPXI7YnJlYWs7Y2FzZWBlbmRwb2ludHNgOmlmKGMpe3ZhciB1PW1jKHRoaXMubWFudWFsRW5kcHRUb1B4KGUuc291cmNlKClbMF0sbyksMiksZD11WzBdLGY9dVsxXSxwPW1jKHRoaXMubWFudWFsRW5kcHRUb1B4KGUudGFyZ2V0KClbMF0scyksMiksbT1wWzBdLGg9cFsxXSxnPXt4MTpkLHkxOmYseDI6bSx5MjpofTtpPWwoZCxmLG0saCksYT1nfWVsc2UgSXUoYEVkZ2UgJHtlLmlkKCl9IGhhcyBlZGdlLWRpc3RhbmNlczplbmRwb2ludHMgc3BlY2lmaWVkIHdpdGhvdXQgbWFudWFsIGVuZHBvaW50cyBzcGVjaWZpZWQgdmlhIHNvdXJjZS1lbmRwb2ludCBhbmQgdGFyZ2V0LWVuZHBvaW50LiAgRmFsbGluZyBiYWNrIG9uIGVkZ2UtZGlzdGFuY2VzOmludGVyc2VjdGlvbiAoZGVmYXVsdCkuYCksYT1yfXJldHVybnttaWRwdFB0czphLHZlY3Rvck5vcm1JbnZlcnNlOml9fSxUeC5maW5kSGF5c3RhY2tQb2ludHM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF0scj1uLl9wcml2YXRlLGk9ci5yc2NyYXRjaDtpZighaS5oYXlzdGFjayl7dmFyIGE9TWF0aC5yYW5kb20oKSoyKk1hdGguUEk7aS5zb3VyY2U9e3g6TWF0aC5jb3MoYSkseTpNYXRoLnNpbihhKX0sYT1NYXRoLnJhbmRvbSgpKjIqTWF0aC5QSSxpLnRhcmdldD17eDpNYXRoLmNvcyhhKSx5Ok1hdGguc2luKGEpfX12YXIgbz1yLnNvdXJjZSxzPXIudGFyZ2V0LGM9by5wb3NpdGlvbigpLGw9cy5wb3NpdGlvbigpLHU9by53aWR0aCgpLGQ9cy53aWR0aCgpLGY9by5oZWlnaHQoKSxwPXMuaGVpZ2h0KCksbT1uLnBzdHlsZShgaGF5c3RhY2stcmFkaXVzYCkudmFsdWUvMjtpLmhheXN0YWNrUHRzPWkuYWxscHRzPVtpLnNvdXJjZS54KnUqbStjLngsaS5zb3VyY2UueSpmKm0rYy55LGkudGFyZ2V0LngqZCptK2wueCxpLnRhcmdldC55KnAqbStsLnldLGkubWlkWD0oaS5hbGxwdHNbMF0raS5hbGxwdHNbMl0pLzIsaS5taWRZPShpLmFsbHB0c1sxXStpLmFsbHB0c1szXSkvMixpLmVkZ2VUeXBlPWBoYXlzdGFja2AsaS5oYXlzdGFjaz0hMCx0aGlzLnN0b3JlRWRnZVByb2plY3Rpb25zKG4pLHRoaXMuY2FsY3VsYXRlQXJyb3dBbmdsZXMobiksdGhpcy5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zKG4pLHRoaXMuY2FsY3VsYXRlTGFiZWxBbmdsZXMobil9fSxUeC5maW5kU2VnbWVudHNQb2ludHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9wcml2YXRlLnJzY3JhdGNoLHI9ZS5wc3R5bGUoYHNlZ21lbnQtd2VpZ2h0c2ApLGk9ZS5wc3R5bGUoYHNlZ21lbnQtZGlzdGFuY2VzYCksYT1lLnBzdHlsZShgc2VnbWVudC1yYWRpaWApLG89ZS5wc3R5bGUoYHJhZGl1cy10eXBlYCkscz1NYXRoLm1pbihyLnBmVmFsdWUubGVuZ3RoLGkucGZWYWx1ZS5sZW5ndGgpLGM9YS5wZlZhbHVlW2EucGZWYWx1ZS5sZW5ndGgtMV0sbD1vLnBmVmFsdWVbby5wZlZhbHVlLmxlbmd0aC0xXTtuLmVkZ2VUeXBlPWBzZWdtZW50c2Asbi5zZWdwdHM9W10sbi5yYWRpaT1bXSxuLmlzQXJjUmFkaXVzPVtdO2Zvcih2YXIgdT0wO3U8czt1Kyspe3ZhciBkPXIucGZWYWx1ZVt1XSxmPWkucGZWYWx1ZVt1XSxwPTEtZCxtPWQsaD10aGlzLmZpbmRNaWRwdFB0c0V0YyhlLHQpLGc9aC5taWRwdFB0cyxfPWgudmVjdG9yTm9ybUludmVyc2Usdj17eDpnLngxKnArZy54MiptLHk6Zy55MSpwK2cueTIqbX07bi5zZWdwdHMucHVzaCh2LngrXy54KmYsdi55K18ueSpmKSxuLnJhZGlpLnB1c2goYS5wZlZhbHVlW3VdPT09dm9pZCAwP2M6YS5wZlZhbHVlW3VdKSxuLmlzQXJjUmFkaXVzLnB1c2goKG8ucGZWYWx1ZVt1XT09PXZvaWQgMD9sOm8ucGZWYWx1ZVt1XSk9PT1gYXJjLXJhZGl1c2ApfX0sVHguZmluZExvb3BQb2ludHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5fcHJpdmF0ZS5yc2NyYXRjaCxhPXQuZGlyQ291bnRzLG89dC5zcmNQb3Mscz1lLnBzdHlsZShgY29udHJvbC1wb2ludC1kaXN0YW5jZXNgKSxjPXM/cy5wZlZhbHVlWzBdOnZvaWQgMCxsPWUucHN0eWxlKGBsb29wLWRpcmVjdGlvbmApLnBmVmFsdWUsdT1lLnBzdHlsZShgbG9vcC1zd2VlcGApLnBmVmFsdWUsZD1lLnBzdHlsZShgY29udHJvbC1wb2ludC1zdGVwLXNpemVgKS5wZlZhbHVlO2kuZWRnZVR5cGU9YHNlbGZgO3ZhciBmPW4scD1kO3ImJihmPTAscD1jKTt2YXIgbT1sLU1hdGguUEkvMixoPW0tdS8yLGc9bSt1LzIsXz1TdHJpbmcobCtgX2ArdSk7Zj1hW19dPT09dm9pZCAwP2FbX109MDorK2FbX10saS5jdHJscHRzPVtvLngrTWF0aC5jb3MoaCkqMS40KnAqKGYvMysxKSxvLnkrTWF0aC5zaW4oaCkqMS40KnAqKGYvMysxKSxvLngrTWF0aC5jb3MoZykqMS40KnAqKGYvMysxKSxvLnkrTWF0aC5zaW4oZykqMS40KnAqKGYvMysxKV19LFR4LmZpbmRDb21wb3VuZExvb3BQb2ludHM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5fcHJpdmF0ZS5yc2NyYXRjaDtpLmVkZ2VUeXBlPWBjb21wb3VuZGA7dmFyIGE9dC5zcmNQb3Msbz10LnRndFBvcyxzPXQuc3JjVyxjPXQuc3JjSCxsPXQudGd0Vyx1PXQudGd0SCxkPWUucHN0eWxlKGBjb250cm9sLXBvaW50LXN0ZXAtc2l6ZWApLnBmVmFsdWUsZj1lLnBzdHlsZShgY29udHJvbC1wb2ludC1kaXN0YW5jZXNgKSxwPWY/Zi5wZlZhbHVlWzBdOnZvaWQgMCxtPW4saD1kO3ImJihtPTAsaD1wKTt2YXIgZz01MCxfPXt4OmEueC1zLzIseTphLnktYy8yfSx2PXt4Om8ueC1sLzIseTpvLnktdS8yfSx5PXt4Ok1hdGgubWluKF8ueCx2LngpLHk6TWF0aC5taW4oXy55LHYueSl9LGI9LjUseD1NYXRoLm1heChiLE1hdGgubG9nKHMqQ3gpKSxTPU1hdGgubWF4KGIsTWF0aC5sb2cobCpDeCkpO2kuY3RybHB0cz1beS54LHkueS0oMStnKioxLjEyLzEwMCkqaCoobS8zKzEpKngseS54LSgxK2cqKjEuMTIvMTAwKSpoKihtLzMrMSkqUyx5LnldfSxUeC5maW5kU3RyYWlnaHRFZGdlUG9pbnRzPWZ1bmN0aW9uKGUpe2UuX3ByaXZhdGUucnNjcmF0Y2guZWRnZVR5cGU9YHN0cmFpZ2h0YH0sVHguZmluZEJlemllclBvaW50cz1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhPWUuX3ByaXZhdGUucnNjcmF0Y2gsbz1lLnBzdHlsZShgY29udHJvbC1wb2ludC1zdGVwLXNpemVgKS5wZlZhbHVlLHM9ZS5wc3R5bGUoYGNvbnRyb2wtcG9pbnQtZGlzdGFuY2VzYCksYz1lLnBzdHlsZShgY29udHJvbC1wb2ludC13ZWlnaHRzYCksbD1zJiZjP01hdGgubWluKHMudmFsdWUubGVuZ3RoLGMudmFsdWUubGVuZ3RoKToxLHU9cz9zLnBmVmFsdWVbMF06dm9pZCAwLGQ9Yy52YWx1ZVswXSxmPXI7YS5lZGdlVHlwZT1mP2BtdWx0aWJlemllcmA6YGJlemllcmAsYS5jdHJscHRzPVtdO2Zvcih2YXIgcD0wO3A8bDtwKyspe3ZhciBtPSguNS10LmVsZXMubGVuZ3RoLzIrbikqbyooaT8tMToxKSxoPXZvaWQgMCxnPUlkKG0pO2YmJih1PXM/cy5wZlZhbHVlW3BdOm8sZD1jLnZhbHVlW3BdKSxoPXI/dTp1PT09dm9pZCAwP3ZvaWQgMDpnKnU7dmFyIF89aD09PXZvaWQgMD9tOmgsdj0xLWQseT1kLGI9dGhpcy5maW5kTWlkcHRQdHNFdGMoZSx0KSx4PWIubWlkcHRQdHMsUz1iLnZlY3Rvck5vcm1JbnZlcnNlLEM9e3g6eC54MSp2K3gueDIqeSx5OngueTEqdit4LnkyKnl9O2EuY3RybHB0cy5wdXNoKEMueCtTLngqXyxDLnkrUy55Kl8pfX0sVHguZmluZFRheGlQb2ludHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9wcml2YXRlLnJzY3JhdGNoO24uZWRnZVR5cGU9YHNlZ21lbnRzYDt2YXIgcj1gdmVydGljYWxgLGk9YGhvcml6b250YWxgLGE9YGxlZnR3YXJkYCxvPWByaWdodHdhcmRgLHM9YGRvd253YXJkYCxjPWB1cHdhcmRgLGw9YGF1dG9gLHU9dC5wb3NQdHMsZD10LnNyY1csZj10LnNyY0gscD10LnRndFcsbT10LnRndEgsaD1lLnBzdHlsZShgZWRnZS1kaXN0YW5jZXNgKS52YWx1ZSE9PWBub2RlLXBvc2l0aW9uYCxnPWUucHN0eWxlKGB0YXhpLWRpcmVjdGlvbmApLnZhbHVlLF89Zyx2PWUucHN0eWxlKGB0YXhpLXR1cm5gKSx5PXYudW5pdHM9PT1gJWAsYj12LnBmVmFsdWUseD1iPDAsUz1lLnBzdHlsZShgdGF4aS10dXJuLW1pbi1kaXN0YW5jZWApLnBmVmFsdWUsQz1oPyhkK3ApLzI6MCx3PWg/KGYrbSkvMjowLFQ9dS54Mi11LngxLEU9dS55Mi11LnkxLEQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4wP01hdGgubWF4KGUtdCwwKTpNYXRoLm1pbihlK3QsMCl9LE89RChULEMpLGs9RChFLHcpLEE9ITE7Xz09PWw/Zz1NYXRoLmFicyhPKT5NYXRoLmFicyhrKT9pOnI6Xz09PWN8fF89PT1zPyhnPXIsQT0hMCk6KF89PT1hfHxfPT09bykmJihnPWksQT0hMCk7dmFyIGo9Zz09PXIsTT1qP2s6TyxOPWo/RTpULFA9SWQoTiksRj0hMTshKEEmJih5fHx4KSkmJihfPT09cyYmTjwwfHxfPT09YyYmTj4wfHxfPT09YSYmTj4wfHxfPT09byYmTjwwKSYmKFAqPS0xLE09UCpNYXRoLmFicyhNKSxGPSEwKTt2YXIgST15PyhiPDA/MStiOmIpKk06KGI8MD9NOjApK2IqUCxMPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhlKTxTfHxNYXRoLmFicyhlKT49TWF0aC5hYnMoTSl9LFI9TChJKSx6PUwoTWF0aC5hYnMoTSktTWF0aC5hYnMoSSkpO2lmKChSfHx6KSYmIUYpe2lmKGope3ZhciBCPU1hdGguYWJzKE4pPD1mLzIsVj1NYXRoLmFicyhUKTw9cC8yO2lmKEIpe3ZhciBIPSh1LngxK3UueDIpLzI7bi5zZWdwdHM9W0gsdS55MSxILHUueTJdfWVsc2UgaWYoVil7dmFyIFU9KHUueTErdS55MikvMjtuLnNlZ3B0cz1bdS54MSxVLHUueDIsVV19ZWxzZSBuLnNlZ3B0cz1bdS54MSx1LnkyXX1lbHNle3ZhciBXPU1hdGguYWJzKE4pPD1kLzIsZWU9TWF0aC5hYnMoRSk8PW0vMjtpZihXKXt2YXIgRz0odS55MSt1LnkyKS8yO24uc2VncHRzPVt1LngxLEcsdS54MixHXX1lbHNlIGlmKGVlKXt2YXIgdGU9KHUueDErdS54MikvMjtuLnNlZ3B0cz1bdGUsdS55MSx0ZSx1LnkyXX1lbHNlIG4uc2VncHRzPVt1LngyLHUueTFdfX1lbHNlIGlmKGope3ZhciBuZT11LnkxK0krKGg/Zi8yKlA6MCk7bi5zZWdwdHM9W3UueDEsbmUsdS54MixuZV19ZWxzZXt2YXIgcmU9dS54MStJKyhoP2QvMipQOjApO24uc2VncHRzPVtyZSx1LnkxLHJlLHUueTJdfWlmKG4uaXNSb3VuZCl7dmFyIGllPWUucHN0eWxlKGB0YXhpLXJhZGl1c2ApLnZhbHVlLGFlPWUucHN0eWxlKGByYWRpdXMtdHlwZWApLnZhbHVlWzBdPT09YGFyYy1yYWRpdXNgO24ucmFkaWk9QXJyYXkobi5zZWdwdHMubGVuZ3RoLzIpLmZpbGwoaWUpLG4uaXNBcmNSYWRpdXM9QXJyYXkobi5zZWdwdHMubGVuZ3RoLzIpLmZpbGwoYWUpfX0sVHgudHJ5VG9Db3JyZWN0SW52YWxpZFBvaW50cz1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX3ByaXZhdGUucnNjcmF0Y2g7aWYobi5lZGdlVHlwZT09PWBiZXppZXJgKXt2YXIgcj10LnNyY1BvcyxpPXQudGd0UG9zLGE9dC5zcmNXLG89dC5zcmNILHM9dC50Z3RXLGM9dC50Z3RILGw9dC5zcmNTaGFwZSx1PXQudGd0U2hhcGUsZD10LnNyY0Nvcm5lclJhZGl1cyxmPXQudGd0Q29ybmVyUmFkaXVzLHA9dC5zcmNScyxtPXQudGd0UnMsaD0hUShuLnN0YXJ0WCl8fCFRKG4uc3RhcnRZKSxnPSFRKG4uYXJyb3dTdGFydFgpfHwhUShuLmFycm93U3RhcnRZKSxfPSFRKG4uZW5kWCl8fCFRKG4uZW5kWSksdj0hUShuLmFycm93RW5kWCl8fCFRKG4uYXJyb3dFbmRZKSx5PTMqKHRoaXMuZ2V0QXJyb3dXaWR0aChlLnBzdHlsZShgd2lkdGhgKS5wZlZhbHVlLGUucHN0eWxlKGBhcnJvdy1zY2FsZWApLnZhbHVlKSp0aGlzLmFycm93U2hhcGVXaWR0aCksYj1MZCh7eDpuLmN0cmxwdHNbMF0seTpuLmN0cmxwdHNbMV19LHt4Om4uc3RhcnRYLHk6bi5zdGFydFl9KSx4PWI8eSxTPUxkKHt4Om4uY3RybHB0c1swXSx5Om4uY3RybHB0c1sxXX0se3g6bi5lbmRYLHk6bi5lbmRZfSksQz1TPHksdz0hMTtpZihofHxnfHx4KXt3PSEwO3ZhciBUPXt4Om4uY3RybHB0c1swXS1yLngseTpuLmN0cmxwdHNbMV0tci55fSxFPU1hdGguc3FydChULngqVC54K1QueSpULnkpLEQ9e3g6VC54L0UseTpULnkvRX0sTz1NYXRoLm1heChhLG8pLGs9e3g6bi5jdHJscHRzWzBdK0QueCoyKk8seTpuLmN0cmxwdHNbMV0rRC55KjIqT30sQT1sLmludGVyc2VjdExpbmUoci54LHIueSxhLG8say54LGsueSwwLGQscCk7eD8obi5jdHJscHRzWzBdPW4uY3RybHB0c1swXStELngqKHktYiksbi5jdHJscHRzWzFdPW4uY3RybHB0c1sxXStELnkqKHktYikpOihuLmN0cmxwdHNbMF09QVswXStELngqeSxuLmN0cmxwdHNbMV09QVsxXStELnkqeSl9aWYoX3x8dnx8Qyl7dz0hMDt2YXIgaj17eDpuLmN0cmxwdHNbMF0taS54LHk6bi5jdHJscHRzWzFdLWkueX0sTT1NYXRoLnNxcnQoai54KmoueCtqLnkqai55KSxOPXt4OmoueC9NLHk6ai55L019LFA9TWF0aC5tYXgoYSxvKSxGPXt4Om4uY3RybHB0c1swXStOLngqMipQLHk6bi5jdHJscHRzWzFdK04ueSoyKlB9LEk9dS5pbnRlcnNlY3RMaW5lKGkueCxpLnkscyxjLEYueCxGLnksMCxmLG0pO0M/KG4uY3RybHB0c1swXT1uLmN0cmxwdHNbMF0rTi54Kih5LVMpLG4uY3RybHB0c1sxXT1uLmN0cmxwdHNbMV0rTi55Kih5LVMpKToobi5jdHJscHRzWzBdPUlbMF0rTi54Knksbi5jdHJscHRzWzFdPUlbMV0rTi55KnkpfXcmJnRoaXMuZmluZEVuZHBvaW50cyhlKX19LFR4LnN0b3JlQWxscHRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX3ByaXZhdGUucnNjcmF0Y2g7aWYodC5lZGdlVHlwZT09PWBtdWx0aWJlemllcmB8fHQuZWRnZVR5cGU9PT1gYmV6aWVyYHx8dC5lZGdlVHlwZT09PWBzZWxmYHx8dC5lZGdlVHlwZT09PWBjb21wb3VuZGApe3QuYWxscHRzPVtdLHQuYWxscHRzLnB1c2godC5zdGFydFgsdC5zdGFydFkpO2Zvcih2YXIgbj0wO24rMTx0LmN0cmxwdHMubGVuZ3RoO24rPTIpdC5hbGxwdHMucHVzaCh0LmN0cmxwdHNbbl0sdC5jdHJscHRzW24rMV0pLG4rMzx0LmN0cmxwdHMubGVuZ3RoJiZ0LmFsbHB0cy5wdXNoKCh0LmN0cmxwdHNbbl0rdC5jdHJscHRzW24rMl0pLzIsKHQuY3RybHB0c1tuKzFdK3QuY3RybHB0c1tuKzNdKS8yKTt0LmFsbHB0cy5wdXNoKHQuZW5kWCx0LmVuZFkpO3ZhciByLGk7dC5jdHJscHRzLmxlbmd0aC8yJTI9PTA/KHI9dC5hbGxwdHMubGVuZ3RoLzItMSx0Lm1pZFg9dC5hbGxwdHNbcl0sdC5taWRZPXQuYWxscHRzW3IrMV0pOihyPXQuYWxscHRzLmxlbmd0aC8yLTMsaT0uNSx0Lm1pZFg9QmQodC5hbGxwdHNbcl0sdC5hbGxwdHNbcisyXSx0LmFsbHB0c1tyKzRdLGkpLHQubWlkWT1CZCh0LmFsbHB0c1tyKzFdLHQuYWxscHRzW3IrM10sdC5hbGxwdHNbcis1XSxpKSl9ZWxzZSBpZih0LmVkZ2VUeXBlPT09YHN0cmFpZ2h0YCl0LmFsbHB0cz1bdC5zdGFydFgsdC5zdGFydFksdC5lbmRYLHQuZW5kWV0sdC5taWRYPSh0LnN0YXJ0WCt0LmVuZFgrdC5hcnJvd1N0YXJ0WCt0LmFycm93RW5kWCkvNCx0Lm1pZFk9KHQuc3RhcnRZK3QuZW5kWSt0LmFycm93U3RhcnRZK3QuYXJyb3dFbmRZKS80O2Vsc2UgaWYodC5lZGdlVHlwZT09PWBzZWdtZW50c2Ape2lmKHQuYWxscHRzPVtdLHQuYWxscHRzLnB1c2godC5zdGFydFgsdC5zdGFydFkpLHQuYWxscHRzLnB1c2guYXBwbHkodC5hbGxwdHMsdC5zZWdwdHMpLHQuYWxscHRzLnB1c2godC5lbmRYLHQuZW5kWSksdC5pc1JvdW5kKXt0LnJvdW5kQ29ybmVycz1bXTtmb3IodmFyIGE9MjthKzM8dC5hbGxwdHMubGVuZ3RoO2ErPTIpe3ZhciBvPXQucmFkaWlbYS8yLTFdLHM9dC5pc0FyY1JhZGl1c1thLzItMV07dC5yb3VuZENvcm5lcnMucHVzaChTeCh7eDp0LmFsbHB0c1thLTJdLHk6dC5hbGxwdHNbYS0xXX0se3g6dC5hbGxwdHNbYV0seTp0LmFsbHB0c1thKzFdLHJhZGl1czpvfSx7eDp0LmFsbHB0c1thKzJdLHk6dC5hbGxwdHNbYSszXX0sbyxzKSl9fWlmKHQuc2VncHRzLmxlbmd0aCU0PT0wKXt2YXIgYz10LnNlZ3B0cy5sZW5ndGgvMixsPWMtMjt0Lm1pZFg9KHQuc2VncHRzW2xdK3Quc2VncHRzW2NdKS8yLHQubWlkWT0odC5zZWdwdHNbbCsxXSt0LnNlZ3B0c1tjKzFdKS8yfWVsc2V7dmFyIHU9dC5zZWdwdHMubGVuZ3RoLzItMTtpZighdC5pc1JvdW5kKXQubWlkWD10LnNlZ3B0c1t1XSx0Lm1pZFk9dC5zZWdwdHNbdSsxXTtlbHNle3ZhciBkPXt4OnQuc2VncHRzW3VdLHk6dC5zZWdwdHNbdSsxXX0sZj10LnJvdW5kQ29ybmVyc1t1LzJdO2lmKGYucmFkaXVzPT09MCl7dmFyIHA9e3g6dC5zZWdwdHNbdSsyXSx5OnQuc2VncHRzW3UrM119O3QubWlkWD1kLngsdC5taWRZPWQueSx0Lm1pZFZlY3Rvcj1bZC55LXAueSxwLngtZC54XX1lbHNle3ZhciBtPVtkLngtZi5jeCxkLnktZi5jeV0saD1mLnJhZGl1cy9NYXRoLnNxcnQobVswXSoqMittWzFdKioyKTttPW0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKmh9KSx0Lm1pZFg9Zi5jeCttWzBdLHQubWlkWT1mLmN5K21bMV0sdC5taWRWZWN0b3I9bX19fX19LFR4LmNoZWNrRm9ySW52YWxpZEVkZ2VXYXJuaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7dC5ub2Rlc092ZXJsYXB8fFEodC5zdGFydFgpJiZRKHQuc3RhcnRZKSYmUSh0LmVuZFgpJiZRKHQuZW5kWSk/dC5sb2dnZWRFcnI9ITE6dC5sb2dnZWRFcnJ8fCh0LmxvZ2dlZEVycj0hMCxJdSgiRWRnZSBgIitlLmlkKCkrImAgaGFzIGludmFsaWQgZW5kcG9pbnRzIGFuZCBzbyBpdCBpcyBpbXBvc3NpYmxlIHRvIGRyYXcuICBBZGp1c3QgeW91ciBlZGdlIHN0eWxlIChlLmcuIGNvbnRyb2wgcG9pbnRzKSBhY2NvcmRpbmdseSBvciB1c2UgYW4gYWx0ZXJuYXRpdmUgZWRnZSB0eXBlLiAgVGhpcyBpcyBleHBlY3RlZCBiZWhhdmlvdXIgd2hlbiB0aGUgc291cmNlIG5vZGUgYW5kIHRoZSB0YXJnZXQgbm9kZSBvdmVybGFwLiIpKX0sVHguZmluZEVkZ2VDb250cm9sUG9pbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoZSYmZS5sZW5ndGghPT0wKXtmb3IodmFyIG49dGhpcyxyPW4uY3kuaGFzQ29tcG91bmROb2RlcygpLGk9bmV3IFl1LGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bXS5jb25jYXQoaGMoZSksWyshIXRdKS5qb2luKGAtYCl9LG89W10scz1bXSxjPTA7YzxlLmxlbmd0aDtjKyspe3ZhciBsPWVbY10sdT1sLl9wcml2YXRlLGQ9bC5wc3R5bGUoYGN1cnZlLXN0eWxlYCkudmFsdWU7aWYoIWwucmVtb3ZlZCgpJiZsLnRha2VzVXBTcGFjZSgpKXtpZihkPT09YGhheXN0YWNrYClzLnB1c2gobCk7ZWxzZXt2YXIgZj1kPT09YHVuYnVuZGxlZC1iZXppZXJgfHxZYyhkLGBzZWdtZW50c2ApfHxkPT09YHN0cmFpZ2h0YHx8ZD09PWBzdHJhaWdodC10cmlhbmdsZWB8fFljKGQsYHRheGlgKSxwPWQ9PT1gdW5idW5kbGVkLWJlemllcmB8fGQ9PT1gYmV6aWVyYCxtPXUuc291cmNlLGg9dS50YXJnZXQsZz1bbS5wb29sSW5kZXgoKSxoLnBvb2xJbmRleCgpXS5zb3J0KCksXz1hKGcsZiksdj1pLmdldChfKTt2Pz8odj17ZWxlczpbXX0sby5wdXNoKHtwYWlySWQ6ZyxlZGdlSXNVbmJ1bmRsZWQ6Zn0pLGkuc2V0KF8sdikpLHYuZWxlcy5wdXNoKGwpLGYmJih2Lmhhc1VuYnVuZGxlZD0hMCkscCYmKHYuaGFzQmV6aWVyPSEwKX19fWZvcih2YXIgeT1mdW5jdGlvbigpe3ZhciBlPW9bYl0scz1lLnBhaXJJZCxjPWUuZWRnZUlzVW5idW5kbGVkLGw9YShzLGMpLHU9aS5nZXQobCksZDtpZighdS5oYXNVbmJ1bmRsZWQpe3ZhciBmPXUuZWxlc1swXS5wYXJhbGxlbEVkZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlzQnVuZGxlZEJlemllcigpfSk7R3UodS5lbGVzKSxmLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHUuZWxlcy5wdXNoKGUpfSksdS5lbGVzLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5wb29sSW5kZXgoKS10LnBvb2xJbmRleCgpfSl9dmFyIHA9dS5lbGVzWzBdLG09cC5zb3VyY2UoKSxoPXAudGFyZ2V0KCk7aWYobS5wb29sSW5kZXgoKT5oLnBvb2xJbmRleCgpKXt2YXIgZz1tO209aCxoPWd9dmFyIF89dS5zcmNQb3M9bS5wb3NpdGlvbigpLHY9dS50Z3RQb3M9aC5wb3NpdGlvbigpLHk9dS5zcmNXPW0ub3V0ZXJXaWR0aCgpLHg9dS5zcmNIPW0ub3V0ZXJIZWlnaHQoKSxTPXUudGd0Vz1oLm91dGVyV2lkdGgoKSxDPXUudGd0SD1oLm91dGVySGVpZ2h0KCksdz11LnNyY1NoYXBlPW4ubm9kZVNoYXBlc1t0LmdldE5vZGVTaGFwZShtKV0sVD11LnRndFNoYXBlPW4ubm9kZVNoYXBlc1t0LmdldE5vZGVTaGFwZShoKV0sRT11LnNyY0Nvcm5lclJhZGl1cz1tLnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnZhbHVlPT09YGF1dG9gP2BhdXRvYDptLnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnBmVmFsdWUsRD11LnRndENvcm5lclJhZGl1cz1oLnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnZhbHVlPT09YGF1dG9gP2BhdXRvYDpoLnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnBmVmFsdWUsTz11LnRndFJzPWguX3ByaXZhdGUucnNjcmF0Y2gsaz11LnNyY1JzPW0uX3ByaXZhdGUucnNjcmF0Y2g7dS5kaXJDb3VudHM9e25vcnRoOjAsd2VzdDowLHNvdXRoOjAsZWFzdDowLG5vcnRod2VzdDowLHNvdXRod2VzdDowLG5vcnRoZWFzdDowLHNvdXRoZWFzdDowfTtmb3IodmFyIEE9MDtBPHUuZWxlcy5sZW5ndGg7QSsrKXt2YXIgaj11LmVsZXNbQV0sTT1qWzBdLl9wcml2YXRlLnJzY3JhdGNoLE49ai5wc3R5bGUoYGN1cnZlLXN0eWxlYCkudmFsdWUsUD1OPT09YHVuYnVuZGxlZC1iZXppZXJgfHxZYyhOLGBzZWdtZW50c2ApfHxZYyhOLGB0YXhpYCksRj0hbS5zYW1lKGouc291cmNlKCkpO2lmKCF1LmNhbGN1bGF0ZWRJbnRlcnNlY3Rpb24mJm0hPT1oJiYodS5oYXNCZXppZXJ8fHUuaGFzVW5idW5kbGVkKSl7dS5jYWxjdWxhdGVkSW50ZXJzZWN0aW9uPSEwO3ZhciBJPXcuaW50ZXJzZWN0TGluZShfLngsXy55LHkseCx2Lngsdi55LDAsRSxrKSxMPXUuc3JjSW50bj1JLFI9VC5pbnRlcnNlY3RMaW5lKHYueCx2LnksUyxDLF8ueCxfLnksMCxELE8pLHo9dS50Z3RJbnRuPVIsQj11LmludGVyc2VjdGlvblB0cz17eDE6SVswXSx4MjpSWzBdLHkxOklbMV0seTI6UlsxXX0sVj11LnBvc1B0cz17eDE6Xy54LHgyOnYueCx5MTpfLnkseTI6di55fSxIPVJbMV0tSVsxXSxVPVJbMF0tSVswXSxXPU1hdGguc3FydChVKlUrSCpIKTtRKFcpJiZXPj13eHx8KFc9TWF0aC5zcXJ0KE1hdGgubWF4KFUqVSxDeCkrTWF0aC5tYXgoSCpILEN4KSkpO3ZhciBlZT11LnZlY3Rvcj17eDpVLHk6SH0sRz11LnZlY3Rvck5vcm09e3g6ZWUueC9XLHk6ZWUueS9XfSx0ZT17eDotRy55LHk6Ry54fTt1Lm5vZGVzT3ZlcmxhcD0hUShXKXx8VC5jaGVja1BvaW50KElbMF0sSVsxXSwwLFMsQyx2Lngsdi55LEQsTyl8fHcuY2hlY2tQb2ludChSWzBdLFJbMV0sMCx5LHgsXy54LF8ueSxFLGspLHUudmVjdG9yTm9ybUludmVyc2U9dGUsZD17bm9kZXNPdmVybGFwOnUubm9kZXNPdmVybGFwLGRpckNvdW50czp1LmRpckNvdW50cyxjYWxjdWxhdGVkSW50ZXJzZWN0aW9uOiEwLGhhc0Jlemllcjp1Lmhhc0JlemllcixoYXNVbmJ1bmRsZWQ6dS5oYXNVbmJ1bmRsZWQsZWxlczp1LmVsZXMsc3JjUG9zOnYsc3JjUnM6Tyx0Z3RQb3M6Xyx0Z3RSczprLHNyY1c6UyxzcmNIOkMsdGd0Vzp5LHRndEg6eCxzcmNJbnRuOnosdGd0SW50bjpMLHNyY1NoYXBlOlQsdGd0U2hhcGU6dyxwb3NQdHM6e3gxOlYueDIseTE6Vi55Mix4MjpWLngxLHkyOlYueTF9LGludGVyc2VjdGlvblB0czp7eDE6Qi54Mix5MTpCLnkyLHgyOkIueDEseTI6Qi55MX0sdmVjdG9yOnt4Oi1lZS54LHk6LWVlLnl9LHZlY3Rvck5vcm06e3g6LUcueCx5Oi1HLnl9LHZlY3Rvck5vcm1JbnZlcnNlOnt4Oi10ZS54LHk6LXRlLnl9fX12YXIgbmU9Rj9kOnU7TS5ub2Rlc092ZXJsYXA9bmUubm9kZXNPdmVybGFwLE0uc3JjSW50bj1uZS5zcmNJbnRuLE0udGd0SW50bj1uZS50Z3RJbnRuLE0uaXNSb3VuZD1OLnN0YXJ0c1dpdGgoYHJvdW5kYCksciYmKG0uaXNQYXJlbnQoKXx8bS5pc0NoaWxkKCl8fGguaXNQYXJlbnQoKXx8aC5pc0NoaWxkKCkpJiYobS5wYXJlbnRzKCkuYW55U2FtZShoKXx8aC5wYXJlbnRzKCkuYW55U2FtZShtKXx8bS5zYW1lKGgpJiZtLmlzUGFyZW50KCkpP3QuZmluZENvbXBvdW5kTG9vcFBvaW50cyhqLG5lLEEsUCk6bT09PWg/dC5maW5kTG9vcFBvaW50cyhqLG5lLEEsUCk6Ti5lbmRzV2l0aChgc2VnbWVudHNgKT90LmZpbmRTZWdtZW50c1BvaW50cyhqLG5lKTpOLmVuZHNXaXRoKGB0YXhpYCk/dC5maW5kVGF4aVBvaW50cyhqLG5lKTpOPT09YHN0cmFpZ2h0YHx8IVAmJnUuZWxlcy5sZW5ndGglMj09MSYmQT09PU1hdGguZmxvb3IodS5lbGVzLmxlbmd0aC8yKT90LmZpbmRTdHJhaWdodEVkZ2VQb2ludHMoaik6dC5maW5kQmV6aWVyUG9pbnRzKGosbmUsQSxQLEYpLHQuZmluZEVuZHBvaW50cyhqKSx0LnRyeVRvQ29ycmVjdEludmFsaWRQb2ludHMoaixuZSksdC5jaGVja0ZvckludmFsaWRFZGdlV2FybmluZyhqKSx0LnN0b3JlQWxscHRzKGopLHQuc3RvcmVFZGdlUHJvamVjdGlvbnMoaiksdC5jYWxjdWxhdGVBcnJvd0FuZ2xlcyhqKSx0LnJlY2FsY3VsYXRlRWRnZUxhYmVsUHJvamVjdGlvbnMoaiksdC5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhqKX19LGI9MDtiPG8ubGVuZ3RoO2IrKyl5KCk7dGhpcy5maW5kSGF5c3RhY2tQb2ludHMocyl9fTtmdW5jdGlvbiBFeChlKXt2YXIgdD1bXTtpZihlIT1udWxsKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rPTIpe3ZhciByPWVbbl0saT1lW24rMV07dC5wdXNoKHt4OnIseTppfSl9cmV0dXJuIHR9fVR4LmdldFNlZ21lbnRQb2ludHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtpZih0aGlzLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZShlKSx0LmVkZ2VUeXBlPT09YHNlZ21lbnRzYClyZXR1cm4gRXgodC5zZWdwdHMpfSxUeC5nZXRDb250cm9sUG9pbnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7dGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZSk7dmFyIG49dC5lZGdlVHlwZTtpZihuPT09YGJlemllcmB8fG49PT1gbXVsdGliZXppZXJgfHxuPT09YHNlbGZgfHxuPT09YGNvbXBvdW5kYClyZXR1cm4gRXgodC5jdHJscHRzKX0sVHguZ2V0RWRnZU1pZHBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7cmV0dXJuIHRoaXMucmVjYWxjdWxhdGVSZW5kZXJlZFN0eWxlKGUpLHt4OnQubWlkWCx5OnQubWlkWX19O3ZhciBEeD17fTtEeC5tYW51YWxFbmRwdFRvUHg9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ZS5wb3NpdGlvbigpLGk9ZS5vdXRlcldpZHRoKCksYT1lLm91dGVySGVpZ2h0KCksbz1lLl9wcml2YXRlLnJzY3JhdGNoO2lmKHQudmFsdWUubGVuZ3RoPT09Mil7dmFyIHM9W3QucGZWYWx1ZVswXSx0LnBmVmFsdWVbMV1dO3JldHVybiB0LnVuaXRzWzBdPT09YCVgJiYoc1swXSo9aSksdC51bml0c1sxXT09PWAlYCYmKHNbMV0qPWEpLHNbMF0rPXIueCxzWzFdKz1yLnksc312YXIgYz10LnBmVmFsdWVbMF07Yz0tTWF0aC5QSS8yK2M7dmFyIGw9MipNYXRoLm1heChpLGEpLHU9W3IueCtNYXRoLmNvcyhjKSpsLHIueStNYXRoLnNpbihjKSpsXTtyZXR1cm4gbi5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKGUpXS5pbnRlcnNlY3RMaW5lKHIueCxyLnksaSxhLHVbMF0sdVsxXSwwLGUucHN0eWxlKGBjb3JuZXItcmFkaXVzYCkudmFsdWU9PT1gYXV0b2A/YGF1dG9gOmUucHN0eWxlKGBjb3JuZXItcmFkaXVzYCkucGZWYWx1ZSxvKX0sRHguZmluZEVuZHBvaW50cz1mdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcyxpLGE9ZS5zb3VyY2UoKVswXSxvPWUudGFyZ2V0KClbMF0scz1hLnBvc2l0aW9uKCksYz1vLnBvc2l0aW9uKCksbD1lLnBzdHlsZShgdGFyZ2V0LWFycm93LXNoYXBlYCkudmFsdWUsdT1lLnBzdHlsZShgc291cmNlLWFycm93LXNoYXBlYCkudmFsdWUsZD1lLnBzdHlsZShgdGFyZ2V0LWRpc3RhbmNlLWZyb20tbm9kZWApLnBmVmFsdWUsZj1lLnBzdHlsZShgc291cmNlLWRpc3RhbmNlLWZyb20tbm9kZWApLnBmVmFsdWUscD1hLl9wcml2YXRlLnJzY3JhdGNoLG09by5fcHJpdmF0ZS5yc2NyYXRjaCxoPWUucHN0eWxlKGBjdXJ2ZS1zdHlsZWApLnZhbHVlLGc9ZS5fcHJpdmF0ZS5yc2NyYXRjaCxfPWcuZWRnZVR5cGUsdj1ZYyhoLGB0YXhpYCkseT1fPT09YHNlbGZgfHxfPT09YGNvbXBvdW5kYCxiPV89PT1gYmV6aWVyYHx8Xz09PWBtdWx0aWJlemllcmB8fHkseD1fIT09YGJlemllcmAsUz1fPT09YHN0cmFpZ2h0YHx8Xz09PWBzZWdtZW50c2AsQz1fPT09YHNlZ21lbnRzYCx3PWJ8fHh8fFMsVD15fHx2LEU9ZS5wc3R5bGUoYHNvdXJjZS1lbmRwb2ludGApLEQ9VD9gb3V0c2lkZS10by1ub2RlYDpFLnZhbHVlLE89YS5wc3R5bGUoYGNvcm5lci1yYWRpdXNgKS52YWx1ZT09PWBhdXRvYD9gYXV0b2A6YS5wc3R5bGUoYGNvcm5lci1yYWRpdXNgKS5wZlZhbHVlLGs9ZS5wc3R5bGUoYHRhcmdldC1lbmRwb2ludGApLEE9VD9gb3V0c2lkZS10by1ub2RlYDprLnZhbHVlLGo9by5wc3R5bGUoYGNvcm5lci1yYWRpdXNgKS52YWx1ZT09PWBhdXRvYD9gYXV0b2A6by5wc3R5bGUoYGNvcm5lci1yYWRpdXNgKS5wZlZhbHVlO2cuc3JjTWFuRW5kcHQ9RSxnLnRndE1hbkVuZHB0PWs7dmFyIE0sTixQLEYsST0oKGs9PW51bGx8fCh0PWsucGZWYWx1ZSk9PW51bGw/dm9pZCAwOnQubGVuZ3RoKT09PTI/ay5wZlZhbHVlOm51bGwpPz9bMCwwXSxMPSgoRT09bnVsbHx8KG49RS5wZlZhbHVlKT09bnVsbD92b2lkIDA6bi5sZW5ndGgpPT09Mj9FLnBmVmFsdWU6bnVsbCk/P1swLDBdO2lmKGIpe3ZhciBSPVtnLmN0cmxwdHNbMF0sZy5jdHJscHRzWzFdXTtNPXg/W2cuY3RybHB0c1tnLmN0cmxwdHMubGVuZ3RoLTJdLGcuY3RybHB0c1tnLmN0cmxwdHMubGVuZ3RoLTFdXTpSLE49Un1lbHNlIGlmKFMpe3ZhciB6PUM/Zy5zZWdwdHMuc2xpY2UoMCwyKTpbYy54K0lbMF0sYy55K0lbMV1dO009Qz9nLnNlZ3B0cy5zbGljZShnLnNlZ3B0cy5sZW5ndGgtMik6W3MueCtMWzBdLHMueStMWzFdXSxOPXp9aWYoQT09PWBpbnNpZGUtdG8tbm9kZWApaT1bYy54LGMueV07ZWxzZSBpZihrLnVuaXRzKWk9dGhpcy5tYW51YWxFbmRwdFRvUHgobyxrKTtlbHNlIGlmKEE9PT1gb3V0c2lkZS10by1saW5lYClpPWcudGd0SW50bjtlbHNlIGlmKEE9PT1gb3V0c2lkZS10by1ub2RlYHx8QT09PWBvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWxgP1A9TTooQT09PWBvdXRzaWRlLXRvLWxpbmVgfHxBPT09YG91dHNpZGUtdG8tbGluZS1vci1sYWJlbGApJiYoUD1bcy54LHMueV0pLGk9ci5ub2RlU2hhcGVzW3RoaXMuZ2V0Tm9kZVNoYXBlKG8pXS5pbnRlcnNlY3RMaW5lKGMueCxjLnksby5vdXRlcldpZHRoKCksby5vdXRlckhlaWdodCgpLFBbMF0sUFsxXSwwLGosbSksQT09PWBvdXRzaWRlLXRvLW5vZGUtb3ItbGFiZWxgfHxBPT09YG91dHNpZGUtdG8tbGluZS1vci1sYWJlbGApe3ZhciBCPW8uX3ByaXZhdGUucnNjcmF0Y2gsVj1CLmxhYmVsV2lkdGgsSD1CLmxhYmVsSGVpZ2h0LFU9Qi5sYWJlbFgsVz1CLmxhYmVsWSxlZT1WLzIsRz1ILzIsdGU9by5wc3R5bGUoYHRleHQtdmFsaWduYCkudmFsdWU7dGU9dHYodGUpLHRlPT09YHRvcGA/Vy09Rzp0ZT09PWBib3R0b21gJiYoVys9Ryk7dmFyIG5lPW8ucHN0eWxlKGB0ZXh0LWhhbGlnbmApLnZhbHVlO25lPWV2KG5lKSxuZT09PWBsZWZ0YD9VLT1lZTpuZT09PWByaWdodGAmJihVKz1lZSk7dmFyIHJlPXdmKFBbMF0sUFsxXSxbVS1lZSxXLUcsVStlZSxXLUcsVStlZSxXK0csVS1lZSxXK0ddLGMueCxjLnkpO2lmKHJlLmxlbmd0aD4wKXt2YXIgaWU9cyxhZT1SZChpZSxFZChpKSksb2U9UmQoaWUsRWQocmUpKSxzZT1hZTtvZTxhZSYmKGk9cmUsc2U9b2UpLHJlLmxlbmd0aD4yJiZSZChpZSx7eDpyZVsyXSx5OnJlWzNdfSk8c2UmJihpPVtyZVsyXSxyZVszXV0pfX12YXIgSz1FZihpLE0sci5hcnJvd1NoYXBlc1tsXS5zcGFjaW5nKGUpK2QpLGNlPUVmKGksTSxyLmFycm93U2hhcGVzW2xdLmdhcChlKStkKTtpZihnLmVuZFg9Y2VbMF0sZy5lbmRZPWNlWzFdLGcuYXJyb3dFbmRYPUtbMF0sZy5hcnJvd0VuZFk9S1sxXSxEPT09YGluc2lkZS10by1ub2RlYClpPVtzLngscy55XTtlbHNlIGlmKEUudW5pdHMpaT10aGlzLm1hbnVhbEVuZHB0VG9QeChhLEUpO2Vsc2UgaWYoRD09PWBvdXRzaWRlLXRvLWxpbmVgKWk9Zy5zcmNJbnRuO2Vsc2UgaWYoRD09PWBvdXRzaWRlLXRvLW5vZGVgfHxEPT09YG91dHNpZGUtdG8tbm9kZS1vci1sYWJlbGA/Rj1OOihEPT09YG91dHNpZGUtdG8tbGluZWB8fEQ9PT1gb3V0c2lkZS10by1saW5lLW9yLWxhYmVsYCkmJihGPVtjLngsYy55XSksaT1yLm5vZGVTaGFwZXNbdGhpcy5nZXROb2RlU2hhcGUoYSldLmludGVyc2VjdExpbmUocy54LHMueSxhLm91dGVyV2lkdGgoKSxhLm91dGVySGVpZ2h0KCksRlswXSxGWzFdLDAsTyxwKSxEPT09YG91dHNpZGUtdG8tbm9kZS1vci1sYWJlbGB8fEQ9PT1gb3V0c2lkZS10by1saW5lLW9yLWxhYmVsYCl7dmFyIGxlPWEuX3ByaXZhdGUucnNjcmF0Y2gsdWU9bGUubGFiZWxXaWR0aCxkZT1sZS5sYWJlbEhlaWdodCxmZT1sZS5sYWJlbFgscGU9bGUubGFiZWxZLG1lPXVlLzIsaGU9ZGUvMixnZT1hLnBzdHlsZShgdGV4dC12YWxpZ25gKS52YWx1ZTtnZT10dihnZSksZ2U9PT1gdG9wYD9wZS09aGU6Z2U9PT1gYm90dG9tYCYmKHBlKz1oZSk7dmFyIF9lPWEucHN0eWxlKGB0ZXh0LWhhbGlnbmApLnZhbHVlO19lPWV2KF9lKSxfZT09PWBsZWZ0YD9mZS09bWU6X2U9PT1gcmlnaHRgJiYoZmUrPW1lKTt2YXIgdmU9d2YoRlswXSxGWzFdLFtmZS1tZSxwZS1oZSxmZSttZSxwZS1oZSxmZSttZSxwZStoZSxmZS1tZSxwZStoZV0scy54LHMueSk7aWYodmUubGVuZ3RoPjApe3ZhciB5ZT1jLGJlPVJkKHllLEVkKGkpKSx4ZT1SZCh5ZSxFZCh2ZSkpLFNlPWJlO3hlPGJlJiYoaT1bdmVbMF0sdmVbMV1dLFNlPXhlKSx2ZS5sZW5ndGg+MiYmUmQoeWUse3g6dmVbMl0seTp2ZVszXX0pPFNlJiYoaT1bdmVbMl0sdmVbM11dKX19dmFyIENlPUVmKGksTixyLmFycm93U2hhcGVzW3VdLnNwYWNpbmcoZSkrZiksd2U9RWYoaSxOLHIuYXJyb3dTaGFwZXNbdV0uZ2FwKGUpK2YpO2cuc3RhcnRYPXdlWzBdLGcuc3RhcnRZPXdlWzFdLGcuYXJyb3dTdGFydFg9Q2VbMF0sZy5hcnJvd1N0YXJ0WT1DZVsxXSx3JiYoZy5iYWRMaW5lPSFRKGcuc3RhcnRYKXx8IVEoZy5zdGFydFkpfHwhUShnLmVuZFgpfHwhUShnLmVuZFkpKX0sRHguZ2V0U291cmNlRW5kcG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtzd2l0Y2godGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZSksdC5lZGdlVHlwZSl7Y2FzZWBoYXlzdGFja2A6cmV0dXJue3g6dC5oYXlzdGFja1B0c1swXSx5OnQuaGF5c3RhY2tQdHNbMV19O2RlZmF1bHQ6cmV0dXJue3g6dC5hcnJvd1N0YXJ0WCx5OnQuYXJyb3dTdGFydFl9fX0sRHguZ2V0VGFyZ2V0RW5kcG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS5fcHJpdmF0ZS5yc2NyYXRjaDtzd2l0Y2godGhpcy5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGUoZSksdC5lZGdlVHlwZSl7Y2FzZWBoYXlzdGFja2A6cmV0dXJue3g6dC5oYXlzdGFja1B0c1syXSx5OnQuaGF5c3RhY2tQdHNbM119O2RlZmF1bHQ6cmV0dXJue3g6dC5hcnJvd0VuZFgseTp0LmFycm93RW5kWX19fTt2YXIgT3g9e307ZnVuY3Rpb24ga3goZSx0LG4pe2Zvcih2YXIgcj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQmQoZSx0LG4scil9LGk9dC5fcHJpdmF0ZS5yc3R5bGUuYmV6aWVyUHRzLGE9MDthPGUuYmV6aWVyUHJvalBjdHMubGVuZ3RoO2ErKyl7dmFyIG89ZS5iZXppZXJQcm9qUGN0c1thXTtpLnB1c2goe3g6cihuWzBdLG5bMl0sbls0XSxvKSx5OnIoblsxXSxuWzNdLG5bNV0sbyl9KX19T3guc3RvcmVFZGdlUHJvamVjdGlvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fcHJpdmF0ZSxuPXQucnNjcmF0Y2gscj1uLmVkZ2VUeXBlO2lmKHQucnN0eWxlLmJlemllclB0cz1udWxsLHQucnN0eWxlLmxpbmVQdHM9bnVsbCx0LnJzdHlsZS5oYXlzdGFja1B0cz1udWxsLHI9PT1gbXVsdGliZXppZXJgfHxyPT09YGJlemllcmB8fHI9PT1gc2VsZmB8fHI9PT1gY29tcG91bmRgKXt0LnJzdHlsZS5iZXppZXJQdHM9W107Zm9yKHZhciBpPTA7aSs1PG4uYWxscHRzLmxlbmd0aDtpKz00KWt4KHRoaXMsZSxuLmFsbHB0cy5zbGljZShpLGkrNikpfWVsc2UgaWYocj09PWBzZWdtZW50c2ApZm9yKHZhciBhPXQucnN0eWxlLmxpbmVQdHM9W10saT0wO2krMTxuLmFsbHB0cy5sZW5ndGg7aSs9MilhLnB1c2goe3g6bi5hbGxwdHNbaV0seTpuLmFsbHB0c1tpKzFdfSk7ZWxzZSBpZihyPT09YGhheXN0YWNrYCl7dmFyIG89bi5oYXlzdGFja1B0czt0LnJzdHlsZS5oYXlzdGFja1B0cz1be3g6b1swXSx5Om9bMV19LHt4Om9bMl0seTpvWzNdfV19dC5yc3R5bGUuYXJyb3dXaWR0aD10aGlzLmdldEFycm93V2lkdGgoZS5wc3R5bGUoYHdpZHRoYCkucGZWYWx1ZSxlLnBzdHlsZShgYXJyb3ctc2NhbGVgKS52YWx1ZSkqdGhpcy5hcnJvd1NoYXBlV2lkdGh9LE94LnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zPWZ1bmN0aW9uKGUpe3RoaXMuZmluZEVkZ2VDb250cm9sUG9pbnRzKGUpfTt2YXIgQXg9e307QXgucmVjYWxjdWxhdGVOb2RlTGFiZWxQcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUucHN0eWxlKGBsYWJlbGApLnN0clZhbHVlO2lmKCF6Yyh0KSl7dmFyIG4scixpPWUuX3ByaXZhdGUsYT1lLndpZHRoKCksbz1lLmhlaWdodCgpLHM9ZS5wYWRkaW5nKCksYz1lLnBvc2l0aW9uKCksbD1lLnBzdHlsZShgdGV4dC1oYWxpZ25gKS5zdHJWYWx1ZSx1PWUucHN0eWxlKGB0ZXh0LXZhbGlnbmApLnN0clZhbHVlLGQ9aS5yc2NyYXRjaCxmPWkucnN0eWxlO3N3aXRjaChsKXtjYXNlYGxlZnRgOm49Yy54LWEvMi1zO2JyZWFrO2Nhc2VgbGVmdC1pbnNpZGVgOm49Yy54LWEvMitzO2JyZWFrO2Nhc2VgcmlnaHRgOm49Yy54K2EvMitzO2JyZWFrO2Nhc2VgcmlnaHQtaW5zaWRlYDpuPWMueCthLzItczticmVhaztkZWZhdWx0Om49Yy54fXN3aXRjaCh1KXtjYXNlYHRvcGA6cj1jLnktby8yLXM7YnJlYWs7Y2FzZWB0b3AtaW5zaWRlYDpyPWMueS1vLzIrczticmVhaztjYXNlYGJvdHRvbWA6cj1jLnkrby8yK3M7YnJlYWs7Y2FzZWBib3R0b20taW5zaWRlYDpyPWMueStvLzItczticmVhaztkZWZhdWx0OnI9Yy55fWQubGFiZWxYPW4sZC5sYWJlbFk9cixmLmxhYmVsWD1uLGYubGFiZWxZPXIsdGhpcy5jYWxjdWxhdGVMYWJlbEFuZ2xlcyhlKSx0aGlzLmFwcGx5TGFiZWxEaW1lbnNpb25zKGUpfX07dmFyIGp4PWZ1bmN0aW9uKGUsdCl7dmFyIG49TWF0aC5hdGFuKHQvZSk7cmV0dXJuIGU9PT0wJiZuPDAmJihuKj0tMSksbn0sTXg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gangodC54LWUueCx0LnktZS55KX0sTng9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9VWQoMCxyLS4wMDEsMSksYT1VZCgwLHIrLjAwMSwxKTtyZXR1cm4gTXgoVmQoZSx0LG4saSksVmQoZSx0LG4sYSkpfTtBeC5yZWNhbGN1bGF0ZUVkZ2VMYWJlbFByb2plY3Rpb25zPWZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5fcHJpdmF0ZSxyPW4ucnNjcmF0Y2gsaT10aGlzLGE9e21pZDplLnBzdHlsZShgbGFiZWxgKS5zdHJWYWx1ZSxzb3VyY2U6ZS5wc3R5bGUoYHNvdXJjZS1sYWJlbGApLnN0clZhbHVlLHRhcmdldDplLnBzdHlsZShgdGFyZ2V0LWxhYmVsYCkuc3RyVmFsdWV9O2lmKGEubWlkfHxhLnNvdXJjZXx8YS50YXJnZXQpe3Q9e3g6ci5taWRYLHk6ci5taWRZfTt2YXIgbz1mdW5jdGlvbihlLHQscil7SnUobi5yc2NyYXRjaCxlLHQsciksSnUobi5yc3R5bGUsZSx0LHIpfTtvKGBsYWJlbFhgLG51bGwsdC54KSxvKGBsYWJlbFlgLG51bGwsdC55KSxvKGBsYWJlbEF1dG9BbmdsZWAsbnVsbCxqeChyLm1pZERpc3BYLHIubWlkRGlzcFkpKTt2YXIgcz1mdW5jdGlvbigpe2lmKHMuY2FjaGUpcmV0dXJuIHMuY2FjaGU7Zm9yKHZhciBlPVtdLHQ9MDt0KzU8ci5hbGxwdHMubGVuZ3RoO3QrPTQpe3ZhciBhPXt4OnIuYWxscHRzW3RdLHk6ci5hbGxwdHNbdCsxXX0sbz17eDpyLmFsbHB0c1t0KzJdLHk6ci5hbGxwdHNbdCszXX0sYz17eDpyLmFsbHB0c1t0KzRdLHk6ci5hbGxwdHNbdCs1XX07ZS5wdXNoKHtwMDphLHAxOm8scDI6YyxzdGFydERpc3Q6MCxsZW5ndGg6MCxzZWdtZW50czpbXX0pfXZhciBsPW4ucnN0eWxlLmJlemllclB0cyx1PWkuYmV6aWVyUHJvalBjdHMubGVuZ3RoO2Z1bmN0aW9uIGQoZSx0LG4scixpKXt2YXIgYT1MZCh0LG4pLG89ZS5zZWdtZW50c1tlLnNlZ21lbnRzLmxlbmd0aC0xXSxzPXtwMDp0LHAxOm4sdDA6cix0MTppLHN0YXJ0RGlzdDpvP28uc3RhcnREaXN0K28ubGVuZ3RoOjAsbGVuZ3RoOmF9O2Uuc2VnbWVudHMucHVzaChzKSxlLmxlbmd0aCs9YX1mb3IodmFyIGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIHA9ZVtmXSxtPWVbZi0xXTttJiYocC5zdGFydERpc3Q9bS5zdGFydERpc3QrbS5sZW5ndGgpLGQocCxwLnAwLGxbZip1XSwwLGkuYmV6aWVyUHJvalBjdHNbMF0pO2Zvcih2YXIgaD0wO2g8dS0xO2grKylkKHAsbFtmKnUraF0sbFtmKnUraCsxXSxpLmJlemllclByb2pQY3RzW2hdLGkuYmV6aWVyUHJvalBjdHNbaCsxXSk7ZChwLGxbZip1K3UtMV0scC5wMixpLmJlemllclByb2pQY3RzW3UtMV0sMSl9cmV0dXJuIHMuY2FjaGU9ZX0sYz1mdW5jdGlvbihuKXt2YXIgaSxjPW49PT1gc291cmNlYDtpZihhW25dKXt2YXIgbD1lLnBzdHlsZShuK2AtdGV4dC1vZmZzZXRgKS5wZlZhbHVlO3N3aXRjaChyLmVkZ2VUeXBlKXtjYXNlYHNlbGZgOmNhc2VgY29tcG91bmRgOmNhc2VgYmV6aWVyYDpjYXNlYG11bHRpYmV6aWVyYDpmb3IodmFyIHU9cygpLGQsZj0wLHA9MCxtPTA7bTx1Lmxlbmd0aDttKyspe2Zvcih2YXIgaD11W2M/bTp1Lmxlbmd0aC0xLW1dLGc9MDtnPGguc2VnbWVudHMubGVuZ3RoO2crKyl7dmFyIF89aC5zZWdtZW50c1tjP2c6aC5zZWdtZW50cy5sZW5ndGgtMS1nXSx2PW09PT11Lmxlbmd0aC0xJiZnPT09aC5zZWdtZW50cy5sZW5ndGgtMTtpZihmPXAscCs9Xy5sZW5ndGgscD49bHx8dil7ZD17Y3A6aCxzZWdtZW50Ol99O2JyZWFrfX1pZihkKWJyZWFrfXZhciB5PWQuY3AsYj1kLnNlZ21lbnQseD0obC1mKS9iLmxlbmd0aCxTPWIudDEtYi50MCxDPWM/Yi50MCtTKng6Yi50MS1TKng7Qz1VZCgwLEMsMSksdD1WZCh5LnAwLHkucDEseS5wMixDKSxpPU54KHkucDAseS5wMSx5LnAyLEMpO2JyZWFrO2Nhc2Vgc3RyYWlnaHRgOmNhc2Vgc2VnbWVudHNgOmNhc2VgaGF5c3RhY2tgOmZvcih2YXIgdz0wLFQsRSxELE8saz1yLmFsbHB0cy5sZW5ndGgsQT0wO0ErMzxrJiYoYz8oRD17eDpyLmFsbHB0c1tBXSx5OnIuYWxscHRzW0ErMV19LE89e3g6ci5hbGxwdHNbQSsyXSx5OnIuYWxscHRzW0ErM119KTooRD17eDpyLmFsbHB0c1trLTItQV0seTpyLmFsbHB0c1trLTEtQV19LE89e3g6ci5hbGxwdHNbay00LUFdLHk6ci5hbGxwdHNbay0zLUFdfSksVD1MZChELE8pLEU9dyx3Kz1ULCEodz49bCkpO0ErPTIpO3ZhciBqPShsLUUpL1Q7aj1VZCgwLGosMSksdD1IZChELE8saiksaT1NeChELE8pfW8oYGxhYmVsWGAsbix0LngpLG8oYGxhYmVsWWAsbix0LnkpLG8oYGxhYmVsQXV0b0FuZ2xlYCxuLGkpfX07Yyhgc291cmNlYCksYyhgdGFyZ2V0YCksdGhpcy5hcHBseUxhYmVsRGltZW5zaW9ucyhlKX19LEF4LmFwcGx5TGFiZWxEaW1lbnNpb25zPWZ1bmN0aW9uKGUpe3RoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlKSxlLmlzRWRnZSgpJiYodGhpcy5hcHBseVByZWZpeGVkTGFiZWxEaW1lbnNpb25zKGUsYHNvdXJjZWApLHRoaXMuYXBwbHlQcmVmaXhlZExhYmVsRGltZW5zaW9ucyhlLGB0YXJnZXRgKSl9LEF4LmFwcGx5UHJlZml4ZWRMYWJlbERpbWVuc2lvbnM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9wcml2YXRlLHI9dGhpcy5nZXRMYWJlbFRleHQoZSx0KSxpPWJ1KHIsZS5fcHJpdmF0ZS5sYWJlbERpbXNLZXkpO2lmKHF1KG4ucnNjcmF0Y2gsYHByZWZpeGVkTGFiZWxEaW1zS2V5YCx0KSE9PWkpe0p1KG4ucnNjcmF0Y2gsYHByZWZpeGVkTGFiZWxEaW1zS2V5YCx0LGkpO3ZhciBhPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGUsciksbz1lLnBzdHlsZShgbGluZS1oZWlnaHRgKS5wZlZhbHVlLHM9ZS5wc3R5bGUoYGZvbnQtc2l6ZWApLnBmVmFsdWUsYz1lLnBzdHlsZShgdGV4dC13cmFwYCkuc3RyVmFsdWUsbD1xdShuLnJzY3JhdGNoLGBsYWJlbFdyYXBDYWNoZWRMaW5lc2AsdCl8fFtdLHU9Yz09PWB3cmFwYD9NYXRoLm1heChsLmxlbmd0aCwxKToxLGQ9cypvLGY9YS53aWR0aCxwPWEuaGVpZ2h0Kyh1LTEpKihvLTEpKnM7SnUobi5yc3R5bGUsYGxhYmVsV2lkdGhgLHQsZiksSnUobi5yc2NyYXRjaCxgbGFiZWxXaWR0aGAsdCxmKSxKdShuLnJzdHlsZSxgbGFiZWxIZWlnaHRgLHQscCksSnUobi5yc2NyYXRjaCxgbGFiZWxIZWlnaHRgLHQscCksSnUobi5yc2NyYXRjaCxgbGFiZWxMaW5lSGVpZ2h0YCx0LGQpLEp1KG4ucnNjcmF0Y2gsYGxhYmVsQWN0dWFsRGVzY2VudGAsdCxhLmxhYmVsQWN0dWFsRGVzY2VudCl9fSxBeC5nZXRMYWJlbFRleHQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLl9wcml2YXRlLHI9dD90K2AtYDpgYCxpPWUucHN0eWxlKHIrYGxhYmVsYCkuc3RyVmFsdWUsYT1lLnBzdHlsZShgdGV4dC10cmFuc2Zvcm1gKS52YWx1ZSxvPWZ1bmN0aW9uKGUscil7cmV0dXJuIHI/KEp1KG4ucnNjcmF0Y2gsZSx0LHIpLHIpOnF1KG4ucnNjcmF0Y2gsZSx0KX07aWYoIWkpcmV0dXJuYGA7YT09YG5vbmVgfHwoYT09YHVwcGVyY2FzZWA/aT1pLnRvVXBwZXJDYXNlKCk6YT09YGxvd2VyY2FzZWAmJihpPWkudG9Mb3dlckNhc2UoKSkpO3ZhciBzPWUucHN0eWxlKGB0ZXh0LXdyYXBgKS52YWx1ZTtpZihzPT09YHdyYXBgKXt2YXIgYz1vKGBsYWJlbEtleWApO2lmKGMhPW51bGwmJm8oYGxhYmVsV3JhcEtleWApPT09YylyZXR1cm4gbyhgbGFiZWxXcmFwQ2FjaGVkVGV4dGApO2Zvcih2YXIgbD1g4oCLYCx1PWkuc3BsaXQoYApgKSxkPWUucHN0eWxlKGB0ZXh0LW1heC13aWR0aGApLnBmVmFsdWUsZj1lLnBzdHlsZShgdGV4dC1vdmVyZmxvdy13cmFwYCkudmFsdWU9PT1gYW55d2hlcmVgLHA9W10sbT0vW1xzXHUyMDBiXSt8JC9nLGg9MDtoPHUubGVuZ3RoO2grKyl7dmFyIGc9dVtoXSxfPXRoaXMuY2FsY3VsYXRlTGFiZWxEaW1lbnNpb25zKGUsZykud2lkdGg7aWYoZiYmKGc9Zy5zcGxpdChgYCkuam9pbihsKSksXz5kKXt2YXIgdj1nLm1hdGNoQWxsKG0pLHk9YGAsYj0wLHg9Y2ModiksUzt0cnl7Zm9yKHgucygpOyEoUz14Lm4oKSkuZG9uZTspe3ZhciBDPVMudmFsdWUsdz1DWzBdLFQ9Zy5zdWJzdHJpbmcoYixDLmluZGV4KTtiPUMuaW5kZXgrdy5sZW5ndGg7dmFyIEU9eS5sZW5ndGg9PT0wP1Q6eStUK3c7dGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoZSxFKS53aWR0aDw9ZD95Kz1UK3c6KHkmJnAucHVzaCh5KSx5PVQrdyl9fWNhdGNoKGUpe3guZShlKX1maW5hbGx5e3guZigpfXkubWF0Y2goL15bXHNcdTIwMGJdKyQvKXx8cC5wdXNoKHkpfWVsc2UgcC5wdXNoKGcpfW8oYGxhYmVsV3JhcENhY2hlZExpbmVzYCxwKSxpPW8oYGxhYmVsV3JhcENhY2hlZFRleHRgLHAuam9pbihgCmApKSxvKGBsYWJlbFdyYXBLZXlgLGMpfWVsc2UgaWYocz09PWBlbGxpcHNpc2Ape3ZhciBEPWUucHN0eWxlKGB0ZXh0LW1heC13aWR0aGApLnBmVmFsdWUsTz1gYCxrPWDigKZgLEE9ITE7aWYodGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoZSxpKS53aWR0aDxEKXJldHVybiBpO2Zvcih2YXIgaj0wO2o8aS5sZW5ndGgmJiEodGhpcy5jYWxjdWxhdGVMYWJlbERpbWVuc2lvbnMoZSxPK2lbal0raykud2lkdGg+RCk7aisrKU8rPWlbal0saj09PWkubGVuZ3RoLTEmJihBPSEwKTtyZXR1cm4gQXx8KE8rPWspLE99cmV0dXJuIGl9LEF4LmdldExhYmVsSnVzdGlmaWNhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLnBzdHlsZShgdGV4dC1qdXN0aWZpY2F0aW9uYCkuc3RyVmFsdWUsbj1lLnBzdHlsZShgdGV4dC1oYWxpZ25gKS5zdHJWYWx1ZTtyZXR1cm4gdD09PWBhdXRvYD9lLmlzTm9kZSgpP252KG4pOmBjZW50ZXJgOnR9LEF4LmNhbGN1bGF0ZUxhYmVsRGltZW5zaW9ucz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3kud2luZG93KCkuZG9jdW1lbnQscj0wLGk9ZS5wc3R5bGUoYGZvbnQtc3R5bGVgKS5zdHJWYWx1ZSxhPWUucHN0eWxlKGBmb250LXNpemVgKS5wZlZhbHVlLG89ZS5wc3R5bGUoYGZvbnQtZmFtaWx5YCkuc3RyVmFsdWUscz1lLnBzdHlsZShgZm9udC13ZWlnaHRgKS5zdHJWYWx1ZSxjPWUucHN0eWxlKGB0ZXh0LW1ldHJpY3NgKS5zdHJWYWx1ZXx8YGZvbnRgLGw9dGhpcy5sYWJlbENhbGNDYW52YXMsdT10aGlzLmxhYmVsQ2FsY0NhbnZhc0NvbnRleHQ7aWYoIWwpe2w9dGhpcy5sYWJlbENhbGNDYW52YXM9bi5jcmVhdGVFbGVtZW50KGBjYW52YXNgKSx1PXRoaXMubGFiZWxDYWxjQ2FudmFzQ29udGV4dD1sLmdldENvbnRleHQoYDJkYCk7dmFyIGQ9bC5zdHlsZTtkLnBvc2l0aW9uPWBhYnNvbHV0ZWAsZC5sZWZ0PWAtOTk5OXB4YCxkLnRvcD1gLTk5OTlweGAsZC56SW5kZXg9YC0xYCxkLnZpc2liaWxpdHk9YGhpZGRlbmAsZC5wb2ludGVyRXZlbnRzPWBub25lYH11LmZvbnQ9YCR7aX0gJHtzfSAke2F9cHggJHtvfWA7Zm9yKHZhciBmPTAscD0wLG09dC5zcGxpdChgCmApLGg9bS5sZW5ndGgsZz0wLF89MCx2PTA7djxoO3YrKyl7dmFyIHk9bVt2XSxiPXUubWVhc3VyZVRleHQoeSkseD1NYXRoLmNlaWwoYi53aWR0aCksUz1hO2M9PT1gZ2x5cGhgJiYodj09PTAmJihfPWIuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQpLHY9PT1oLTEmJihnPWIuYWN0dWFsQm91bmRpbmdCb3hEZXNjZW50KSksZj1NYXRoLm1heCh4LGYpLHArPVN9cmV0dXJuIGM9PT1gZ2x5cGhgJiYocC09YS1fLWcpLGYrPXIscCs9cix7d2lkdGg6ZixoZWlnaHQ6cCxsYWJlbEFjdHVhbEFzY2VudDpfLGxhYmVsQWN0dWFsRGVzY2VudDpnfX0sQXguY2FsY3VsYXRlTGFiZWxBbmdsZT1mdW5jdGlvbihlLHQpe3ZhciBuPWUuX3ByaXZhdGUucnNjcmF0Y2gscj1lLmlzRWRnZSgpLGk9dD90K2AtYDpgYCxhPWUucHN0eWxlKGkrYHRleHQtcm90YXRpb25gKSxvPWEuc3RyVmFsdWU7cmV0dXJuIG89PT1gbm9uZWA/MDpyJiZvPT09YGF1dG9yb3RhdGVgP24ubGFiZWxBdXRvQW5nbGU6bz09PWBhdXRvcm90YXRlYD8wOmEucGZWYWx1ZX0sQXguY2FsY3VsYXRlTGFiZWxBbmdsZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUuaXNFZGdlKCkscj1lLl9wcml2YXRlLnJzY3JhdGNoO3IubGFiZWxBbmdsZT10LmNhbGN1bGF0ZUxhYmVsQW5nbGUoZSksbiYmKHIuc291cmNlTGFiZWxBbmdsZT10LmNhbGN1bGF0ZUxhYmVsQW5nbGUoZSxgc291cmNlYCksci50YXJnZXRMYWJlbEFuZ2xlPXQuY2FsY3VsYXRlTGFiZWxBbmdsZShlLGB0YXJnZXRgKSl9O3ZhciBQeD17fSxGeD0yOCxJeD0hMTtQeC5nZXROb2RlU2hhcGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUucHN0eWxlKGBzaGFwZWApLnZhbHVlO2lmKG49PT1gY3V0cmVjdGFuZ2xlYCYmKGUud2lkdGgoKTxGeHx8ZS5oZWlnaHQoKTxGeCkpcmV0dXJuIEl4fHw9KEl1KCJUaGUgYGN1dHJlY3RhbmdsZWAgbm9kZSBzaGFwZSBjYW4gbm90IGJlIHVzZWQgYXQgc21hbGwgc2l6ZXMgc28gYHJlY3RhbmdsZWAgaXMgdXNlZCBpbnN0ZWFkIiksITApLGByZWN0YW5nbGVgO2lmKGUuaXNQYXJlbnQoKSlyZXR1cm4gbj09PWByZWN0YW5nbGVgfHxuPT09YHJvdW5kcmVjdGFuZ2xlYHx8bj09PWByb3VuZC1yZWN0YW5nbGVgfHxuPT09YGN1dHJlY3RhbmdsZWB8fG49PT1gY3V0LXJlY3RhbmdsZWB8fG49PT1gYmFycmVsYD9uOmByZWN0YW5nbGVgO2lmKG49PT1gcG9seWdvbmApe3ZhciByPWUucHN0eWxlKGBzaGFwZS1wb2x5Z29uLXBvaW50c2ApLnZhbHVlO3JldHVybiB0Lm5vZGVTaGFwZXMubWFrZVBvbHlnb24ocikubmFtZX1yZXR1cm4gbn07dmFyIEx4PXt9O0x4LnJlZ2lzdGVyQ2FsY3VsYXRpb25MaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN5LHQ9ZS5jb2xsZWN0aW9uKCksbj10aGlzLHI9ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiEwO2lmKHQubWVyZ2UoZSksbilmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGk9ZVtyXS5fcHJpdmF0ZS5yc3R5bGU7aS5jbGVhbj0hMSxpLmNsZWFuQ29ubmVjdGVkPSExfX07bi5iaW5kZXIoZSkub24oYGJvdW5kcy4qIGRpcnR5LipgLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O3IodCl9KS5vbihgc3R5bGUuKiBiYWNrZ3JvdW5kLipgLGZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O3IodCwhMSl9KTt2YXIgaT1mdW5jdGlvbihpKXtpZihpKXt2YXIgYT1uLm9uVXBkYXRlRWxlQ2FsY3NGbnM7dC5jbGVhblN0eWxlKCk7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb10sYz1zLl9wcml2YXRlLnJzdHlsZTtzLmlzTm9kZSgpJiYhYy5jbGVhbkNvbm5lY3RlZCYmKHIocy5jb25uZWN0ZWRFZGdlcygpKSxjLmNsZWFuQ29ubmVjdGVkPSEwKX1pZihhKWZvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgdT1hW2xdO3UoaSx0KX1uLnJlY2FsY3VsYXRlUmVuZGVyZWRTdHlsZSh0KSx0PWUuY29sbGVjdGlvbigpfX07bi5mbHVzaFJlbmRlcmVkU3R5bGVRdWV1ZT1mdW5jdGlvbigpe2koITApfSxuLmJlZm9yZVJlbmRlcihpLG4uYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5lbGVDYWxjcyl9LEx4Lm9uVXBkYXRlRWxlQ2FsY3M9ZnVuY3Rpb24oZSl7KHRoaXMub25VcGRhdGVFbGVDYWxjc0Zucz10aGlzLm9uVXBkYXRlRWxlQ2FsY3NGbnN8fFtdKS5wdXNoKGUpfSxMeC5yZWNhbGN1bGF0ZVJlbmRlcmVkU3R5bGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5fcHJpdmF0ZS5yc3R5bGUuY2xlYW5Db25uZWN0ZWR9O2lmKGUubGVuZ3RoIT09MCl7dmFyIHI9W10saT1bXTtpZighdGhpcy5kZXN0cm95ZWQpe3Q9PT12b2lkIDAmJih0PSEwKTtmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXSxzPW8uX3ByaXZhdGUsYz1zLnJzdHlsZTshby5pc0VkZ2UoKXx8bihvLnNvdXJjZSgpKSYmbihvLnRhcmdldCgpKXx8KGMuY2xlYW49ITEpLG8uaXNFZGdlKCkmJm8uaXNCdW5kbGVkQmV6aWVyKCkmJm8ucGFyYWxsZWxFZGdlcygpLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIWUuX3ByaXZhdGUucnN0eWxlLmNsZWFuJiZlLmlzQnVuZGxlZEJlemllcigpfSkmJihjLmNsZWFuPSExKSx0JiZjLmNsZWFufHxvLnJlbW92ZWQoKXx8by5wc3R5bGUoYGRpc3BsYXlgKS52YWx1ZSE9PWBub25lYCYmKHMuZ3JvdXA9PT1gbm9kZXNgP2kucHVzaChvKTpyLnB1c2gobyksYy5jbGVhbj0hMCl9Zm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciB1PWlbbF0sZD11Ll9wcml2YXRlLnJzdHlsZSxmPXUucG9zaXRpb24oKTt0aGlzLnJlY2FsY3VsYXRlTm9kZUxhYmVsUHJvamVjdGlvbih1KSxkLm5vZGVYPWYueCxkLm5vZGVZPWYueSxkLm5vZGVXPXUucHN0eWxlKGB3aWR0aGApLnBmVmFsdWUsZC5ub2RlSD11LnBzdHlsZShgaGVpZ2h0YCkucGZWYWx1ZX10aGlzLnJlY2FsY3VsYXRlRWRnZVByb2plY3Rpb25zKHIpO2Zvcih2YXIgcD0wO3A8ci5sZW5ndGg7cCsrKXt2YXIgbT1yW3BdLl9wcml2YXRlLGg9bS5yc3R5bGUsZz1tLnJzY3JhdGNoO2guc3JjWD1nLmFycm93U3RhcnRYLGguc3JjWT1nLmFycm93U3RhcnRZLGgudGd0WD1nLmFycm93RW5kWCxoLnRndFk9Zy5hcnJvd0VuZFksaC5taWRYPWcubWlkWCxoLm1pZFk9Zy5taWRZLGgubGFiZWxBbmdsZT1nLmxhYmVsQW5nbGUsaC5zb3VyY2VMYWJlbEFuZ2xlPWcuc291cmNlTGFiZWxBbmdsZSxoLnRhcmdldExhYmVsQW5nbGU9Zy50YXJnZXRMYWJlbEFuZ2xlfX19fTt2YXIgUng9e307UngudXBkYXRlQ2FjaGVkR3JhYmJlZEVsZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO2lmKGUpe2UuZHJhZz1bXSxlLm5vbmRyYWc9W107Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXSxpPXIuX3ByaXZhdGUucnNjcmF0Y2g7ci5ncmFiYmVkKCkmJiFyLmlzUGFyZW50KCk/dC5wdXNoKHIpOmkuaW5EcmFnTGF5ZXI/ZS5kcmFnLnB1c2gocik6ZS5ub25kcmFnLnB1c2gocil9Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ZS5kcmFnLnB1c2gocil9fX0sUnguaW52YWxpZGF0ZUNhY2hlZFpTb3J0ZWRFbGVzPWZ1bmN0aW9uKCl7dGhpcy5jYWNoZWRaU29ydGVkRWxlcz1udWxsfSxSeC5nZXRDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbihlKXtpZihlfHwhdGhpcy5jYWNoZWRaU29ydGVkRWxlcyl7dmFyIHQ9dGhpcy5jeS5tdXRhYmxlRWxlbWVudHMoKS50b0FycmF5KCk7dC5zb3J0KFp2KSx0LmludGVyYWN0aXZlPXQuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLmludGVyYWN0aXZlKCl9KSx0aGlzLmNhY2hlZFpTb3J0ZWRFbGVzPXQsdGhpcy51cGRhdGVDYWNoZWRHcmFiYmVkRWxlcygpfWVsc2UgdD10aGlzLmNhY2hlZFpTb3J0ZWRFbGVzO3JldHVybiB0fTt2YXIgeng9e307W1piLFFiLFR4LER4LE94LEF4LFB4LEx4LFJ4XS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2FsKHp4LGUpfSk7dmFyIEJ4PXt9O0J4LmdldENhY2hlZEltYWdlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLGk9ci5pbWFnZUNhY2hlPXIuaW1hZ2VDYWNoZXx8e30sYT1pW2VdO2lmKGEpcmV0dXJuIGEuaW1hZ2UuY29tcGxldGV8fGEuaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcihgbG9hZGAsbiksYS5pbWFnZTthPWlbZV09aVtlXXx8e307dmFyIG89YS5pbWFnZT1uZXcgSW1hZ2U7by5hZGRFdmVudExpc3RlbmVyKGBsb2FkYCxuKSxvLmFkZEV2ZW50TGlzdGVuZXIoYGVycm9yYCxmdW5jdGlvbigpe28uZXJyb3I9ITB9KTt2YXIgcz1gZGF0YTpgO3JldHVybiBlLnN1YnN0cmluZygwLHMubGVuZ3RoKS50b0xvd2VyQ2FzZSgpIT09cyYmKHQ9dD09PWBudWxsYD9udWxsOnQsby5jcm9zc09yaWdpbj10KSxvLnNyYz1lLG99O3ZhciBWeD1mdW5jdGlvbihlLHQpe3ZhciBuPWVbMF07biYmbi5fcHJpdmF0ZS5ncmFiYmVkIT09dCYmKG4uX3ByaXZhdGUuZ3JhYmJlZD10LGUudXBkYXRlU3R5bGUoITEpKX0sSHg9ZnVuY3Rpb24oZSl7VngoZSwhMCl9LFV4PWZ1bmN0aW9uKGUpe1Z4KGUsITEpfSxXeD17fTtXeC5yZWdpc3RlckJpbmRpbmc9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cyxbMV0pO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgYT1bXSxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBzPWVbb107aWYocyE9PXZvaWQgMCl7dmFyIGM9dGhpcy5iaW5kZXIocyk7YS5wdXNoKGMub24uYXBwbHkoYyxpKSl9fXJldHVybiBhfXZhciBjPXRoaXMuYmluZGVyKGUpO3JldHVybiBjLm9uLmFwcGx5KGMsaSl9LFd4LmJpbmRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5jeS53aW5kb3coKSxyPWU9PT1ufHxlPT09bi5kb2N1bWVudHx8ZT09PW4uZG9jdW1lbnQuYm9keXx8QmMoZSk7aWYodC5zdXBwb3J0c1Bhc3NpdmVFdmVudHM9PW51bGwpe3ZhciBpPSExO3RyeXt2YXIgYT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaT0hMCwhMH19KTtuLmFkZEV2ZW50TGlzdGVuZXIoYHRlc3RgLG51bGwsYSl9Y2F0Y2h7fXQuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPWl9dmFyIG89ZnVuY3Rpb24obixpLGEpe3ZhciBvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHImJnQuc3VwcG9ydHNQYXNzaXZlRXZlbnRzJiYob1syXT17Y2FwdHVyZTphPz8hMSxwYXNzaXZlOiExLG9uY2U6ITF9KSx0LmJpbmRpbmdzLnB1c2goe3RhcmdldDplLGFyZ3M6b30pLChlLmFkZEV2ZW50TGlzdGVuZXJ8fGUub24pLmFwcGx5KGUsbyksdGhpc307cmV0dXJue29uOm8sYWRkRXZlbnRMaXN0ZW5lcjpvLGFkZExpc3RlbmVyOm8sYmluZDpvfX0sV3gubm9kZUlzRHJhZ2dhYmxlPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLmlzTm9kZSgpJiYhZS5sb2NrZWQoKSYmZS5ncmFiYmFibGUoKX0sV3gubm9kZUlzR3JhYmJhYmxlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5vZGVJc0RyYWdnYWJsZShlKSYmZS5pbnRlcmFjdGl2ZSgpfSxXeC5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY3kud2luZG93KCksbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RlZCgpfSxyPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0Um9vdE5vZGUoKTtpZih0JiZ0Lm5vZGVUeXBlPT09MTEmJnQuaG9zdCE9PXZvaWQgMClyZXR1cm4gdH0saT1mdW5jdGlvbih0LG4scixpKXt0Pz89ZS5jeTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXTt0LmVtaXQoe29yaWdpbmFsRXZlbnQ6cix0eXBlOm8scG9zaXRpb246aX0pfX0sYT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zaGlmdEtleXx8ZS5tZXRhS2V5fHxlLmN0cmxLZXl9LG89ZnVuY3Rpb24odCxuKXt2YXIgcj0hMDtpZihlLmN5Lmhhc0NvbXBvdW5kTm9kZXMoKSYmdCYmdC5wYW5uYWJsZSgpKWZvcih2YXIgaT0wO24mJmk8bi5sZW5ndGg7aSsrKXt2YXIgdD1uW2ldO2lmKHQuaXNOb2RlKCkmJnQuaXNQYXJlbnQoKSYmIXQucGFubmFibGUoKSl7cj0hMTticmVha319ZWxzZSByPSEwO3JldHVybiByfSxzPWZ1bmN0aW9uKGUpe2VbMF0uX3ByaXZhdGUucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITB9LGM9ZnVuY3Rpb24oZSl7ZVswXS5fcHJpdmF0ZS5yc2NyYXRjaC5pbkRyYWdMYXllcj0hMX0sbD1mdW5jdGlvbihlKXtlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMH0sdT1mdW5jdGlvbihlKXtlWzBdLl9wcml2YXRlLnJzY3JhdGNoLmlzR3JhYlRhcmdldD0hMX0sZD1mdW5jdGlvbihlLHQpe3ZhciBuPXQuYWRkVG9MaXN0OyFuLmhhcyhlKSYmZS5ncmFiYmFibGUoKSYmIWUubG9ja2VkKCkmJihuLm1lcmdlKGUpLEh4KGUpKX0sZj1mdW5jdGlvbihlLHQpe2lmKGUuY3koKS5oYXNDb21wb3VuZE5vZGVzKCkmJih0LmluRHJhZ0xheWVyIT1udWxsfHx0LmFkZFRvTGlzdCE9bnVsbCkpe3ZhciBuPWUuZGVzY2VuZGFudHMoKTt0LmluRHJhZ0xheWVyJiYobi5mb3JFYWNoKHMpLG4uY29ubmVjdGVkRWRnZXMoKS5mb3JFYWNoKHMpKSx0LmFkZFRvTGlzdCYmZChuLHQpfX0scD1mdW5jdGlvbih0LG4pe258fD17fTt2YXIgcj10LmN5KCkuaGFzQ29tcG91bmROb2RlcygpO24uaW5EcmFnTGF5ZXImJih0LmZvckVhY2gocyksdC5uZWlnaGJvcmhvb2QoKS5zdGRGaWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXJ8fGUuaXNFZGdlKCl9KS5mb3JFYWNoKHMpKSxuLmFkZFRvTGlzdCYmdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2QoZSxuKX0pLGYodCxuKSxnKHQse2luRHJhZ0xheWVyOm4uaW5EcmFnTGF5ZXJ9KSxlLnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCl9LG09cCxoPWZ1bmN0aW9uKHQpe3QmJihlLmdldENhY2hlZFpTb3J0ZWRFbGVzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtVeChlKSxjKGUpLHUoZSl9KSxlLnVwZGF0ZUNhY2hlZEdyYWJiZWRFbGVzKCkpfSxnPWZ1bmN0aW9uKGUsdCl7aWYoKHQuaW5EcmFnTGF5ZXIhPW51bGx8fHQuYWRkVG9MaXN0IT1udWxsKSYmZS5jeSgpLmhhc0NvbXBvdW5kTm9kZXMoKSl7dmFyIG49ZS5hbmNlc3RvcnMoKS5vcnBoYW5zKCk7aWYoIW4uc2FtZShlKSl7dmFyIHI9bi5kZXNjZW5kYW50cygpLnNwYXduU2VsZigpLm1lcmdlKG4pLnVubWVyZ2UoZSkudW5tZXJnZShlLmRlc2NlbmRhbnRzKCkpLGk9ci5jb25uZWN0ZWRFZGdlcygpO3QuaW5EcmFnTGF5ZXImJihpLmZvckVhY2gocyksci5mb3JFYWNoKHMpKSx0LmFkZFRvTGlzdCYmci5mb3JFYWNoKGZ1bmN0aW9uKGUpe2QoZSx0KX0pfX19LF89ZnVuY3Rpb24oKXtkb2N1bWVudC5hY3RpdmVFbGVtZW50IT1udWxsJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIhPW51bGwmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpfSx2PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyPGB1YCx5PXR5cGVvZiBSZXNpemVPYnNlcnZlcjxgdWA7dj8oZS5yZW1vdmVPYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbih0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXS5yZW1vdmVkTm9kZXM7aWYocil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspaWYocltpXT09PWUuY29udGFpbmVyKXtlLmRlc3Ryb3koKTticmVha319fX0pLGUuY29udGFpbmVyLnBhcmVudE5vZGUmJmUucmVtb3ZlT2JzZXJ2ZXIub2JzZXJ2ZShlLmNvbnRhaW5lci5wYXJlbnROb2RlLHtjaGlsZExpc3Q6ITB9KSk6ZS5yZWdpc3RlckJpbmRpbmcoZS5jb250YWluZXIsYERPTU5vZGVSZW1vdmVkYCxmdW5jdGlvbih0KXtlLmRlc3Ryb3koKX0pO3ZhciBiPWl1KGZ1bmN0aW9uKCl7ZS5jeS5yZXNpemUoKX0sMTAwKTt2JiYoZS5zdHlsZU9ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKGIpLGUuc3R5bGVPYnNlcnZlci5vYnNlcnZlKGUuY29udGFpbmVyLHthdHRyaWJ1dGVzOiEwfSkpLGUucmVnaXN0ZXJCaW5kaW5nKHQsYHJlc2l6ZWAsYikseSYmKGUucmVzaXplT2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKGIpLGUucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlLmNvbnRhaW5lcikpO3ZhciB4PWZ1bmN0aW9uKGUsdCl7Zm9yKDtlIT1udWxsOyl0KGUpLGU9ZS5wYXJlbnROb2RlfSxTPWZ1bmN0aW9uKCl7ZS5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKX07eChlLmNvbnRhaW5lcixmdW5jdGlvbih0KXtlLnJlZ2lzdGVyQmluZGluZyh0LGB0cmFuc2l0aW9uZW5kYCxTKSxlLnJlZ2lzdGVyQmluZGluZyh0LGBhbmltYXRpb25lbmRgLFMpLGUucmVnaXN0ZXJCaW5kaW5nKHQsYHNjcm9sbGAsUyl9KSxlLnJlZ2lzdGVyQmluZGluZyhlLmNvbnRhaW5lcixgY29udGV4dG1lbnVgLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0pO3ZhciBDPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2VsZWN0aW9uWzRdIT09MH0sdz1mdW5jdGlvbih0KXtmb3IodmFyIG49ZS5maW5kQ29udGFpbmVyQ2xpZW50Q29vcmRzKCkscj1uWzBdLGk9blsxXSxhPW5bMl0sbz1uWzNdLHM9dC50b3VjaGVzP3QudG91Y2hlczpbdF0sYz0hMSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciB1PXNbbF07aWYocjw9dS5jbGllbnRYJiZ1LmNsaWVudFg8PXIrYSYmaTw9dS5jbGllbnRZJiZ1LmNsaWVudFk8PWkrbyl7Yz0hMDticmVha319aWYoIWMpcmV0dXJuITE7Zm9yKHZhciBkPWUuY29udGFpbmVyLGY9dC50YXJnZXQucGFyZW50Tm9kZSxwPSExO2Y7KXtpZihmPT09ZCl7cD0hMDticmVha31mPWYucGFyZW50Tm9kZX1yZXR1cm4hIXB9O2UucmVnaXN0ZXJCaW5kaW5nKGUuY29udGFpbmVyLGBtb3VzZWRvd25gLGZ1bmN0aW9uKHQpe2lmKHcodCkmJihlLmhvdmVyRGF0YS53aGljaCE9PTF8fHQud2hpY2g9PT0xKSl7dC5wcmV2ZW50RGVmYXVsdCgpLF8oKSxlLmhvdmVyRGF0YS5jYXB0dXJlPSEwLGUuaG92ZXJEYXRhLndoaWNoPXQud2hpY2g7dmFyIG49ZS5jeSxyPVt0LmNsaWVudFgsdC5jbGllbnRZXSxhPWUucHJvamVjdEludG9WaWV3cG9ydChyWzBdLHJbMV0pLG89ZS5zZWxlY3Rpb24scz1lLmZpbmROZWFyZXN0RWxlbWVudHMoYVswXSxhWzFdLCEwLCExKSxjPXNbMF0sdT1lLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzO2UuaG92ZXJEYXRhLm1kb3duUG9zPWEsZS5ob3ZlckRhdGEubWRvd25HUG9zPXI7dmFyIGQ9ZnVuY3Rpb24oZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6dCx0eXBlOmUscG9zaXRpb246e3g6YVswXSx5OmFbMV19fX0sZj1mdW5jdGlvbigpe2UuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQ9ITEsY2xlYXJUaW1lb3V0KGUuaG92ZXJEYXRhLnRhcGhvbGRUaW1lb3V0KSxlLmhvdmVyRGF0YS50YXBob2xkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoIWUuaG92ZXJEYXRhLnRhcGhvbGRDYW5jZWxsZWQpe3ZhciB0PWUuaG92ZXJEYXRhLmRvd247dD90LmVtaXQoZChgdGFwaG9sZGApKTpuLmVtaXQoZChgdGFwaG9sZGApKX19LGUudGFwaG9sZER1cmF0aW9uKX07aWYodC53aGljaD09Myl7ZS5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMDt2YXIgaD17b3JpZ2luYWxFdmVudDp0LHR5cGU6YGN4dHRhcHN0YXJ0YCxwb3NpdGlvbjp7eDphWzBdLHk6YVsxXX19O2M/KGMuYWN0aXZhdGUoKSxjLmVtaXQoaCksZS5ob3ZlckRhdGEuZG93bj1jKTpuLmVtaXQoaCksZS5ob3ZlckRhdGEuZG93blRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCksZS5ob3ZlckRhdGEuY3h0RHJhZ2dlZD0hMX1lbHNlIGlmKHQud2hpY2g9PTEpe2lmKGMmJmMuYWN0aXZhdGUoKSxjIT1udWxsJiZlLm5vZGVJc0dyYWJiYWJsZShjKSl7dmFyIGc9ZnVuY3Rpb24oZSl7ZS5lbWl0KGQoYGdyYWJgKSl9O2lmKGwoYyksIWMuc2VsZWN0ZWQoKSl1PWUuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHM9bi5jb2xsZWN0aW9uKCksbShjLHthZGRUb0xpc3Q6dX0pLGMuZW1pdChkKGBncmFib25gKSkuZW1pdChkKGBncmFiYCkpO2Vsc2V7dT1lLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzPW4uY29sbGVjdGlvbigpO3ZhciB2PW4uJChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc05vZGUoKSYmdC5zZWxlY3RlZCgpJiZlLm5vZGVJc0dyYWJiYWJsZSh0KX0pO3Aodix7YWRkVG9MaXN0OnV9KSxjLmVtaXQoZChgZ3JhYm9uYCkpLHYuZm9yRWFjaChnKX1lLnJlZHJhd0hpbnQoYGVsZXNgLCEwKSxlLnJlZHJhd0hpbnQoYGRyYWdgLCEwKX1lLmhvdmVyRGF0YS5kb3duPWMsZS5ob3ZlckRhdGEuZG93bnM9cyxlLmhvdmVyRGF0YS5kb3duVGltZT1uZXcgRGF0ZSgpLmdldFRpbWUoKSxpKGMsW2Btb3VzZWRvd25gLGB0YXBzdGFydGAsYHZtb3VzZWRvd25gXSx0LHt4OmFbMF0seTphWzFdfSksYz09bnVsbD8ob1s0XT0xLGUuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj17eDphWzBdLHk6YVsxXX0sZS5yZWRyYXdIaW50KGBzZWxlY3RgLCEwKSxlLnJlZHJhdygpKTpjLnBhbm5hYmxlKCkmJihvWzRdPTEpLGYoKX1vWzBdPW9bMl09YVswXSxvWzFdPW9bM109YVsxXX19LCExKTt2YXIgVD1yKGUuY29udGFpbmVyKTtlLnJlZ2lzdGVyQmluZGluZyhbdCxUXSxgbW91c2Vtb3ZlYCxmdW5jdGlvbih0KXtpZihlLmhvdmVyRGF0YS5jYXB0dXJlfHx3KHQpKXt2YXIgbj0hMSxyPWUuY3kscz1yLnpvb20oKSxjPVt0LmNsaWVudFgsdC5jbGllbnRZXSxsPWUucHJvamVjdEludG9WaWV3cG9ydChjWzBdLGNbMV0pLHU9ZS5ob3ZlckRhdGEubWRvd25Qb3MsZD1lLmhvdmVyRGF0YS5tZG93bkdQb3MsZj1lLnNlbGVjdGlvbixtPW51bGw7ZS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzfHxlLmhvdmVyRGF0YS5kcmFnZ2luZ3x8ZS5ob3ZlckRhdGEuc2VsZWN0aW5nfHwobT1lLmZpbmROZWFyZXN0RWxlbWVudChsWzBdLGxbMV0sITAsITEpKTt2YXIgZz1lLmhvdmVyRGF0YS5sYXN0LF89ZS5ob3ZlckRhdGEuZG93bix2PVtsWzBdLWZbMl0sbFsxXS1mWzNdXSx5PWUuZHJhZ0RhdGEucG9zc2libGVEcmFnRWxlbWVudHMsYjtpZihkKXt2YXIgeD1jWzBdLWRbMF0sUz14KngsQz1jWzFdLWRbMV0sVD1TK0MqQztlLmhvdmVyRGF0YS5pc092ZXJUaHJlc2hvbGREcmFnPWI9VD49ZS5kZXNrdG9wVGFwVGhyZXNob2xkMn12YXIgRT1hKHQpO2ImJihlLmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwKTt2YXIgRD1mdW5jdGlvbigpe3ZhciB0PWUuaG92ZXJEYXRhLmRyYWdEZWx0YT1lLmhvdmVyRGF0YS5kcmFnRGVsdGF8fFtdO3QubGVuZ3RoPT09MD8odC5wdXNoKHZbMF0pLHQucHVzaCh2WzFdKSk6KHRbMF0rPXZbMF0sdFsxXSs9dlsxXSl9O249ITAsaShtLFtgbW91c2Vtb3ZlYCxgdm1vdXNlbW92ZWAsYHRhcGRyYWdgXSx0LHt4OmxbMF0seTpsWzFdfSk7dmFyIE89ZnVuY3Rpb24oZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6dCx0eXBlOmUscG9zaXRpb246e3g6bFswXSx5OmxbMV19fX0saz1mdW5jdGlvbigpe2UuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsZS5ob3ZlckRhdGEuc2VsZWN0aW5nfHxyLmVtaXQoTyhgYm94c3RhcnRgKSksZls0XT0xLGUuaG92ZXJEYXRhLnNlbGVjdGluZz0hMCxlLnJlZHJhd0hpbnQoYHNlbGVjdGAsITApLGUucmVkcmF3KCl9O2lmKGUuaG92ZXJEYXRhLndoaWNoPT09Myl7aWYoYil7dmFyIEE9TyhgY3h0ZHJhZ2ApO18/Xy5lbWl0KEEpOnIuZW1pdChBKSxlLmhvdmVyRGF0YS5jeHREcmFnZ2VkPSEwLGUuaG92ZXJEYXRhLmN4dE92ZXImJm09PT1lLmhvdmVyRGF0YS5jeHRPdmVyfHwoZS5ob3ZlckRhdGEuY3h0T3ZlciYmZS5ob3ZlckRhdGEuY3h0T3Zlci5lbWl0KE8oYGN4dGRyYWdvdXRgKSksZS5ob3ZlckRhdGEuY3h0T3Zlcj1tLG0mJm0uZW1pdChPKGBjeHRkcmFnb3ZlcmApKSl9fWVsc2UgaWYoZS5ob3ZlckRhdGEuZHJhZ2dpbmcpe2lmKG49ITAsci5wYW5uaW5nRW5hYmxlZCgpJiZyLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXt2YXIgajtpZihlLmhvdmVyRGF0YS5qdXN0U3RhcnRlZFBhbil7dmFyIE09ZS5ob3ZlckRhdGEubWRvd25Qb3M7aj17eDoobFswXS1NWzBdKSpzLHk6KGxbMV0tTVsxXSkqc30sZS5ob3ZlckRhdGEuanVzdFN0YXJ0ZWRQYW49ITF9ZWxzZSBqPXt4OnZbMF0qcyx5OnZbMV0qc307ci5wYW5CeShqKSxyLmVtaXQoTyhgZHJhZ3BhbmApKSxlLmhvdmVyRGF0YS5kcmFnZ2VkPSEwfWw9ZS5wcm9qZWN0SW50b1ZpZXdwb3J0KHQuY2xpZW50WCx0LmNsaWVudFkpfWVsc2UgaWYoZls0XT09MSYmKF89PW51bGx8fF8ucGFubmFibGUoKSkpYiYmKCFlLmhvdmVyRGF0YS5kcmFnZ2luZyYmci5ib3hTZWxlY3Rpb25FbmFibGVkKCkmJihFfHwhci5wYW5uaW5nRW5hYmxlZCgpfHwhci51c2VyUGFubmluZ0VuYWJsZWQoKSk/aygpOiFlLmhvdmVyRGF0YS5zZWxlY3RpbmcmJnIucGFubmluZ0VuYWJsZWQoKSYmci51c2VyUGFubmluZ0VuYWJsZWQoKSYmbyhfLGUuaG92ZXJEYXRhLmRvd25zKSYmKGUuaG92ZXJEYXRhLmRyYWdnaW5nPSEwLGUuaG92ZXJEYXRhLmp1c3RTdGFydGVkUGFuPSEwLGZbNF09MCxlLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249RWQodSksZS5yZWRyYXdIaW50KGBzZWxlY3RgLCEwKSxlLnJlZHJhdygpKSxfJiZfLnBhbm5hYmxlKCkmJl8uYWN0aXZlKCkmJl8udW5hY3RpdmF0ZSgpKTtlbHNle2lmKF8mJl8ucGFubmFibGUoKSYmXy5hY3RpdmUoKSYmXy51bmFjdGl2YXRlKCksXyYmXy5ncmFiYmVkKCl8fG09PWd8fChnJiZpKGcsW2Btb3VzZW91dGAsYHRhcGRyYWdvdXRgXSx0LHt4OmxbMF0seTpsWzFdfSksbSYmaShtLFtgbW91c2VvdmVyYCxgdGFwZHJhZ292ZXJgXSx0LHt4OmxbMF0seTpsWzFdfSksZS5ob3ZlckRhdGEubGFzdD1tKSxfKXtpZihiKXtpZihyLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmRSlfJiZfLmdyYWJiZWQoKSYmKGgoeSksXy5lbWl0KE8oYGZyZWVvbmApKSx5LmVtaXQoTyhgZnJlZWApKSxlLmRyYWdEYXRhLmRpZERyYWcmJihfLmVtaXQoTyhgZHJhZ2ZyZWVvbmApKSx5LmVtaXQoTyhgZHJhZ2ZyZWVgKSkpKSxrKCk7ZWxzZSBpZihfJiZfLmdyYWJiZWQoKSYmZS5ub2RlSXNEcmFnZ2FibGUoXykpe3ZhciBOPSFlLmRyYWdEYXRhLmRpZERyYWc7TiYmZS5yZWRyYXdIaW50KGBlbGVzYCwhMCksZS5kcmFnRGF0YS5kaWREcmFnPSEwLGUuaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8cCh5LHtpbkRyYWdMYXllcjohMH0pO3ZhciBQPXt4OjAseTowfTtpZihRKHZbMF0pJiZRKHZbMV0pJiYoUC54Kz12WzBdLFAueSs9dlsxXSxOKSl7dmFyIEY9ZS5ob3ZlckRhdGEuZHJhZ0RlbHRhO0YmJlEoRlswXSkmJlEoRlsxXSkmJihQLngrPUZbMF0sUC55Kz1GWzFdKX1lLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITAseS5zaWxlbnRTaGlmdChQKS5lbWl0KE8oYHBvc2l0aW9uYCkpLmVtaXQoTyhgZHJhZ2ApKSxlLnJlZHJhd0hpbnQoYGRyYWdgLCEwKSxlLnJlZHJhdygpfX1lbHNlIEQoKX1uPSEwfWlmKGZbMl09bFswXSxmWzNdPWxbMV0sbilyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCYmdC5wcmV2ZW50RGVmYXVsdCgpLCExfX0sITEpO3ZhciBFLEQsTztlLnJlZ2lzdGVyQmluZGluZyh0LGBtb3VzZXVwYCxmdW5jdGlvbih0KXtpZighKGUuaG92ZXJEYXRhLndoaWNoPT09MSYmdC53aGljaCE9PTEmJmUuaG92ZXJEYXRhLmNhcHR1cmUpJiZlLmhvdmVyRGF0YS5jYXB0dXJlKXtlLmhvdmVyRGF0YS5jYXB0dXJlPSExO3ZhciByPWUuY3ksbz1lLnByb2plY3RJbnRvVmlld3BvcnQodC5jbGllbnRYLHQuY2xpZW50WSkscz1lLnNlbGVjdGlvbixjPWUuZmluZE5lYXJlc3RFbGVtZW50KG9bMF0sb1sxXSwhMCwhMSksbD1lLmRyYWdEYXRhLnBvc3NpYmxlRHJhZ0VsZW1lbnRzLHU9ZS5ob3ZlckRhdGEuZG93bixkPWEodCk7ZS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uJiYoZS5yZWRyYXdIaW50KGBzZWxlY3RgLCEwKSxlLnJlZHJhdygpKSxlLmhvdmVyRGF0YS50YXBob2xkQ2FuY2VsbGVkPSEwLGUuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsdSYmdS51bmFjdGl2YXRlKCk7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6dCx0eXBlOmUscG9zaXRpb246e3g6b1swXSx5Om9bMV19fX07aWYoZS5ob3ZlckRhdGEud2hpY2g9PT0zKXt2YXIgcD1mKGBjeHR0YXBlbmRgKTtpZih1P3UuZW1pdChwKTpyLmVtaXQocCksIWUuaG92ZXJEYXRhLmN4dERyYWdnZWQpe3ZhciBtPWYoYGN4dHRhcGApO3U/dS5lbWl0KG0pOnIuZW1pdChtKX1lLmhvdmVyRGF0YS5jeHREcmFnZ2VkPSExLGUuaG92ZXJEYXRhLndoaWNoPW51bGx9ZWxzZSBpZihlLmhvdmVyRGF0YS53aGljaD09PTEpe2lmKGkoYyxbYG1vdXNldXBgLGB0YXBlbmRgLGB2bW91c2V1cGBdLHQse3g6b1swXSx5Om9bMV19KSxlLmRyYWdEYXRhLmRpZERyYWd8fGUuaG92ZXJEYXRhLmRyYWdnZWR8fGUuaG92ZXJEYXRhLnNlbGVjdGluZ3x8ZS5ob3ZlckRhdGEuaXNPdmVyVGhyZXNob2xkRHJhZ3x8KGkodSxbYGNsaWNrYCxgdGFwYCxgdmNsaWNrYF0sdCx7eDpvWzBdLHk6b1sxXX0pLEQ9ITEsdC50aW1lU3RhbXAtTzw9ci5tdWx0aUNsaWNrRGVib3VuY2VUaW1lKCk/KEUmJmNsZWFyVGltZW91dChFKSxEPSEwLE89bnVsbCxpKHUsW2BkYmxjbGlja2AsYGRibHRhcGAsYHZkYmxjbGlja2BdLHQse3g6b1swXSx5Om9bMV19KSk6KEU9c2V0VGltZW91dChmdW5jdGlvbigpe0R8fGkodSxbYG9uZWNsaWNrYCxgb25ldGFwYCxgdm9uZWNsaWNrYF0sdCx7eDpvWzBdLHk6b1sxXX0pfSxyLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKSksTz10LnRpbWVTdGFtcCkpLHUhPW51bGx8fGUuZHJhZ0RhdGEuZGlkRHJhZ3x8ZS5ob3ZlckRhdGEuc2VsZWN0aW5nfHxlLmhvdmVyRGF0YS5kcmFnZ2VkfHxhKHQpfHwoci4kKG4pLnVuc2VsZWN0KFtgdGFwdW5zZWxlY3RgXSksbC5sZW5ndGg+MCYmZS5yZWRyYXdIaW50KGBlbGVzYCwhMCksZS5kcmFnRGF0YS5wb3NzaWJsZURyYWdFbGVtZW50cz1sPXIuY29sbGVjdGlvbigpKSxjPT11JiYhZS5kcmFnRGF0YS5kaWREcmFnJiYhZS5ob3ZlckRhdGEuc2VsZWN0aW5nJiZjIT1udWxsJiZjLl9wcml2YXRlLnNlbGVjdGFibGUmJihlLmhvdmVyRGF0YS5kcmFnZ2luZ3x8KHIuc2VsZWN0aW9uVHlwZSgpPT09YGFkZGl0aXZlYHx8ZD9jLnNlbGVjdGVkKCk/Yy51bnNlbGVjdChbYHRhcHVuc2VsZWN0YF0pOmMuc2VsZWN0KFtgdGFwc2VsZWN0YF0pOmR8fChyLiQobikudW5tZXJnZShjKS51bnNlbGVjdChbYHRhcHVuc2VsZWN0YF0pLGMuc2VsZWN0KFtgdGFwc2VsZWN0YF0pKSksZS5yZWRyYXdIaW50KGBlbGVzYCwhMCkpLGUuaG92ZXJEYXRhLnNlbGVjdGluZyl7dmFyIGc9ci5jb2xsZWN0aW9uKGUuZ2V0QWxsSW5Cb3goc1swXSxzWzFdLHNbMl0sc1szXSkpO2UucmVkcmF3SGludChgc2VsZWN0YCwhMCksZy5sZW5ndGg+MCYmZS5yZWRyYXdIaW50KGBlbGVzYCwhMCksci5lbWl0KGYoYGJveGVuZGApKSxyLnNlbGVjdGlvblR5cGUoKT09PWBhZGRpdGl2ZWB8fGR8fHIuJChuKS51bm1lcmdlKGcpLnVuc2VsZWN0KCksZy5lbWl0KGYoYGJveGApKS5zdGRGaWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2VsZWN0YWJsZSgpJiYhZS5zZWxlY3RlZCgpfSkuc2VsZWN0KCkuZW1pdChmKGBib3hzZWxlY3RgKSksZS5yZWRyYXcoKX1pZihlLmhvdmVyRGF0YS5kcmFnZ2luZyYmKGUuaG92ZXJEYXRhLmRyYWdnaW5nPSExLGUucmVkcmF3SGludChgc2VsZWN0YCwhMCksZS5yZWRyYXdIaW50KGBlbGVzYCwhMCksZS5yZWRyYXcoKSksIXNbNF0pe2UucmVkcmF3SGludChgZHJhZ2AsITApLGUucmVkcmF3SGludChgZWxlc2AsITApO3ZhciBfPXUmJnUuZ3JhYmJlZCgpO2gobCksXyYmKHUuZW1pdChmKGBmcmVlb25gKSksbC5lbWl0KGYoYGZyZWVgKSksZS5kcmFnRGF0YS5kaWREcmFnJiYodS5lbWl0KGYoYGRyYWdmcmVlb25gKSksbC5lbWl0KGYoYGRyYWdmcmVlYCkpKSl9fXNbNF09MCxlLmhvdmVyRGF0YS5kb3duPW51bGwsZS5ob3ZlckRhdGEuY3h0U3RhcnRlZD0hMSxlLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITEsZS5ob3ZlckRhdGEuc2VsZWN0aW5nPSExLGUuaG92ZXJEYXRhLmlzT3ZlclRocmVzaG9sZERyYWc9ITEsZS5kcmFnRGF0YS5kaWREcmFnPSExLGUuaG92ZXJEYXRhLmRyYWdnZWQ9ITEsZS5ob3ZlckRhdGEuZHJhZ0RlbHRhPVtdLGUuaG92ZXJEYXRhLm1kb3duUG9zPW51bGwsZS5ob3ZlckRhdGEubWRvd25HUG9zPW51bGwsZS5ob3ZlckRhdGEud2hpY2g9bnVsbH19LCExKTt2YXIgaz1bXSxBPTQsaixNPTFlNSxOPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1NYXRoLmFicyhlWzBdKSxuPTE7bjxlLmxlbmd0aDtuKyspaWYoTWF0aC5hYnMoZVtuXSkhPT10KXJldHVybiExO3JldHVybiEwfSxQPWZ1bmN0aW9uKHQpe3ZhciBuPSExLHI9dC5kZWx0YVk7aWYocj8/KHQud2hlZWxEZWx0YVk9PW51bGw/dC53aGVlbERlbHRhIT1udWxsJiYocj10LndoZWVsRGVsdGEvNCk6cj10LndoZWVsRGVsdGFZLzQpLHIhPT0wKXtpZihqPT1udWxsKXtpZihrLmxlbmd0aD49QSl7aj0hMTt2YXIgaT1rO2lmKGlbMF0+PTUpe3ZhciBhPU4oaSk/aVswXTpNZChpKTthPjEmJihqPSEwLE09YSl9fWVsc2Ugay5wdXNoKE1hdGguYWJzKHIpKSxuPSEwfWVsc2UgaiYmKE09TWF0aC5taW4oTWF0aC5hYnMociksTSkpO2lmKCFlLnNjcm9sbGluZ1BhZ2Upe3ZhciBvPWUuY3kscz1vLnpvb20oKSxjPW8ucGFuKCksbD1lLnByb2plY3RJbnRvVmlld3BvcnQodC5jbGllbnRYLHQuY2xpZW50WSksdT1bbFswXSpzK2MueCxsWzFdKnMrYy55XTtpZihlLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXN8fGUuaG92ZXJEYXRhLmRyYWdnaW5nfHxlLmhvdmVyRGF0YS5jeHRTdGFydGVkfHxDKCkpdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoby5wYW5uaW5nRW5hYmxlZCgpJiZvLnVzZXJQYW5uaW5nRW5hYmxlZCgpJiZvLnpvb21pbmdFbmFibGVkKCkmJm8udXNlclpvb21pbmdFbmFibGVkKCkpe3QucHJldmVudERlZmF1bHQoKSxlLmRhdGEud2hlZWxab29taW5nPSEwLGNsZWFyVGltZW91dChlLmRhdGEud2hlZWxUaW1lb3V0KSxlLmRhdGEud2hlZWxUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmRhdGEud2hlZWxab29taW5nPSExLGUucmVkcmF3SGludChgZWxlc2AsITApLGUucmVkcmF3KCl9LDE1MCk7dmFyIGQ7biYmTWF0aC5hYnMocik+NSYmKHI9SWQocikqNSksZD1yLy0yNTAsaiYmKGQvPU0sZCo9MyksZCo9ZS53aGVlbFNlbnNpdGl2aXR5LHQuZGVsdGFNb2RlPT09MSYmKGQqPTMzKTt2YXIgZj1vLnpvb20oKSoxMCoqZDt0LnR5cGU9PT1gZ2VzdHVyZWNoYW5nZWAmJihmPWUuZ2VzdHVyZVN0YXJ0Wm9vbSp0LnNjYWxlKSxvLnpvb20oe2xldmVsOmYscmVuZGVyZWRQb3NpdGlvbjp7eDp1WzBdLHk6dVsxXX19KSxvLmVtaXQoe3R5cGU6dC50eXBlPT09YGdlc3R1cmVjaGFuZ2VgP2BwaW5jaHpvb21gOmBzY3JvbGx6b29tYCxvcmlnaW5hbEV2ZW50OnQscG9zaXRpb246e3g6bFswXSx5OmxbMV19fSl9fX19O2UucmVnaXN0ZXJCaW5kaW5nKGUuY29udGFpbmVyLGB3aGVlbGAsUCwhMCksZS5yZWdpc3RlckJpbmRpbmcodCxgc2Nyb2xsYCxmdW5jdGlvbih0KXtlLnNjcm9sbGluZ1BhZ2U9ITAsY2xlYXJUaW1lb3V0KGUuc2Nyb2xsaW5nUGFnZVRpbWVvdXQpLGUuc2Nyb2xsaW5nUGFnZVRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2Uuc2Nyb2xsaW5nUGFnZT0hMX0sMjUwKX0sITApLGUucmVnaXN0ZXJCaW5kaW5nKGUuY29udGFpbmVyLGBnZXN0dXJlc3RhcnRgLGZ1bmN0aW9uKHQpe2UuZ2VzdHVyZVN0YXJ0Wm9vbT1lLmN5Lnpvb20oKSxlLmhhc1RvdWNoU3RhcnRlZHx8dC5wcmV2ZW50RGVmYXVsdCgpfSwhMCksZS5yZWdpc3RlckJpbmRpbmcoZS5jb250YWluZXIsYGdlc3R1cmVjaGFuZ2VgLGZ1bmN0aW9uKHQpe2UuaGFzVG91Y2hTdGFydGVkfHxQKHQpfSwhMCksZS5yZWdpc3RlckJpbmRpbmcoZS5jb250YWluZXIsYG1vdXNlb3V0YCxmdW5jdGlvbih0KXt2YXIgbj1lLnByb2plY3RJbnRvVmlld3BvcnQodC5jbGllbnRYLHQuY2xpZW50WSk7ZS5jeS5lbWl0KHtvcmlnaW5hbEV2ZW50OnQsdHlwZTpgbW91c2VvdXRgLHBvc2l0aW9uOnt4Om5bMF0seTpuWzFdfX0pfSwhMSksZS5yZWdpc3RlckJpbmRpbmcoZS5jb250YWluZXIsYG1vdXNlb3ZlcmAsZnVuY3Rpb24odCl7dmFyIG49ZS5wcm9qZWN0SW50b1ZpZXdwb3J0KHQuY2xpZW50WCx0LmNsaWVudFkpO2UuY3kuZW1pdCh7b3JpZ2luYWxFdmVudDp0LHR5cGU6YG1vdXNlb3ZlcmAscG9zaXRpb246e3g6blswXSx5Om5bMV19fSl9LCExKTt2YXIgRixJLEwsUix6LEIsVixILFUsVyxlZSxHLHRlLG5lPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBNYXRoLnNxcnQoKG4tZSkqKG4tZSkrKHItdCkqKHItdCkpfSxyZT1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4obi1lKSoobi1lKSsoci10KSooci10KX0saWU7ZS5yZWdpc3RlckJpbmRpbmcoZS5jb250YWluZXIsYHRvdWNoc3RhcnRgLGllPWZ1bmN0aW9uKHQpe2lmKGUuaGFzVG91Y2hTdGFydGVkPSEwLHcodCkpe18oKSxlLnRvdWNoRGF0YS5jYXB0dXJlPSEwLGUuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDA7dmFyIG49ZS5jeSxyPWUudG91Y2hEYXRhLm5vdyxhPWUudG91Y2hEYXRhLmVhcmxpZXI7aWYodC50b3VjaGVzWzBdKXt2YXIgbz1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFkpO3JbMF09b1swXSxyWzFdPW9bMV19aWYodC50b3VjaGVzWzFdKXt2YXIgbz1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzFdLmNsaWVudFgsdC50b3VjaGVzWzFdLmNsaWVudFkpO3JbMl09b1swXSxyWzNdPW9bMV19aWYodC50b3VjaGVzWzJdKXt2YXIgbz1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzJdLmNsaWVudFgsdC50b3VjaGVzWzJdLmNsaWVudFkpO3JbNF09b1swXSxyWzVdPW9bMV19dmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6dCx0eXBlOmUscG9zaXRpb246e3g6clswXSx5OnJbMV19fX07aWYodC50b3VjaGVzWzFdKXtlLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwLGgoZS5kcmFnRGF0YS50b3VjaERyYWdFbGVzKTt2YXIgYz1lLmZpbmRDb250YWluZXJDbGllbnRDb29yZHMoKTtVPWNbMF0sVz1jWzFdLGVlPWNbMl0sRz1jWzNdLEY9dC50b3VjaGVzWzBdLmNsaWVudFgtVSxJPXQudG91Y2hlc1swXS5jbGllbnRZLVcsTD10LnRvdWNoZXNbMV0uY2xpZW50WC1VLFI9dC50b3VjaGVzWzFdLmNsaWVudFktVyx0ZT0wPD1GJiZGPD1lZSYmMDw9TCYmTDw9ZWUmJjA8PUkmJkk8PUcmJjA8PVImJlI8PUc7dmFyIHU9bi5wYW4oKSxkPW4uem9vbSgpO3o9bmUoRixJLEwsUiksQj1yZShGLEksTCxSKSxWPVsoRitMKS8yLChJK1IpLzJdLEg9WyhWWzBdLXUueCkvZCwoVlsxXS11LnkpL2RdO3ZhciBmPTIwMCxnPWYqZjtpZihCPGcmJiF0LnRvdWNoZXNbMl0pe3ZhciB2PWUuZmluZE5lYXJlc3RFbGVtZW50KHJbMF0sclsxXSwhMCwhMCkseT1lLmZpbmROZWFyZXN0RWxlbWVudChyWzJdLHJbM10sITAsITApO3YmJnYuaXNOb2RlKCk/KHYuYWN0aXZhdGUoKS5lbWl0KHMoYGN4dHRhcHN0YXJ0YCkpLGUudG91Y2hEYXRhLnN0YXJ0PXYpOnkmJnkuaXNOb2RlKCk/KHkuYWN0aXZhdGUoKS5lbWl0KHMoYGN4dHRhcHN0YXJ0YCkpLGUudG91Y2hEYXRhLnN0YXJ0PXkpOm4uZW1pdChzKGBjeHR0YXBzdGFydGApKSxlLnRvdWNoRGF0YS5zdGFydCYmKGUudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLGUudG91Y2hEYXRhLmN4dD0hMCxlLnRvdWNoRGF0YS5jeHREcmFnZ2VkPSExLGUuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsZS5yZWRyYXcoKTtyZXR1cm59fWlmKHQudG91Y2hlc1syXSluLmJveFNlbGVjdGlvbkVuYWJsZWQoKSYmdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgaWYoIXQudG91Y2hlc1sxXSYmdC50b3VjaGVzWzBdKXt2YXIgYj1lLmZpbmROZWFyZXN0RWxlbWVudHMoclswXSxyWzFdLCEwLCEwKSx4PWJbMF07aWYoeCE9bnVsbCYmKHguYWN0aXZhdGUoKSxlLnRvdWNoRGF0YS5zdGFydD14LGUudG91Y2hEYXRhLnN0YXJ0cz1iLGUubm9kZUlzR3JhYmJhYmxlKHgpKSl7dmFyIFM9ZS5kcmFnRGF0YS50b3VjaERyYWdFbGVzPW4uY29sbGVjdGlvbigpLEM9bnVsbDtlLnJlZHJhd0hpbnQoYGVsZXNgLCEwKSxlLnJlZHJhd0hpbnQoYGRyYWdgLCEwKSx4LnNlbGVjdGVkKCk/KEM9bi4kKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdGVkKCkmJmUubm9kZUlzR3JhYmJhYmxlKHQpfSkscChDLHthZGRUb0xpc3Q6U30pKTptKHgse2FkZFRvTGlzdDpTfSksbCh4KSx4LmVtaXQocyhgZ3JhYm9uYCkpLEM/Qy5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuZW1pdChzKGBncmFiYCkpfSk6eC5lbWl0KHMoYGdyYWJgKSl9aSh4LFtgdG91Y2hzdGFydGAsYHRhcHN0YXJ0YCxgdm1vdXNlZG93bmBdLHQse3g6clswXSx5OnJbMV19KSx4Pz8oZS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXt4Om9bMF0seTpvWzFdfSxlLnJlZHJhd0hpbnQoYHNlbGVjdGAsITApLGUucmVkcmF3KCkpLGUudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9ITEsZS50b3VjaERhdGEuc2luZ2xlVG91Y2hTdGFydFRpbWU9K25ldyBEYXRlLGNsZWFyVGltZW91dChlLnRvdWNoRGF0YS50YXBob2xkVGltZW91dCksZS50b3VjaERhdGEudGFwaG9sZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UudG91Y2hEYXRhLnNpbmdsZVRvdWNoTW92ZWQ9PT0hMSYmIWUucGluY2hpbmcmJiFlLnRvdWNoRGF0YS5zZWxlY3RpbmcmJmkoZS50b3VjaERhdGEuc3RhcnQsW2B0YXBob2xkYF0sdCx7eDpyWzBdLHk6clsxXX0pfSxlLnRhcGhvbGREdXJhdGlvbil9aWYodC50b3VjaGVzLmxlbmd0aD49MSl7Zm9yKHZhciBUPWUudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb249W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxFPTA7RTxyLmxlbmd0aDtFKyspVFtFXT1hW0VdPXJbRV07dmFyIEQ9dC50b3VjaGVzWzBdO2UudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVtELmNsaWVudFgsRC5jbGllbnRZXX19fSwhMSk7dmFyIGFlO2UucmVnaXN0ZXJCaW5kaW5nKHQsYHRvdWNobW92ZWAsYWU9ZnVuY3Rpb24odCl7dmFyIG49ZS50b3VjaERhdGEuY2FwdHVyZTtpZihufHx3KHQpKXt2YXIgcj1lLnNlbGVjdGlvbixhPWUuY3kscz1lLnRvdWNoRGF0YS5ub3csYz1lLnRvdWNoRGF0YS5lYXJsaWVyLGw9YS56b29tKCk7aWYodC50b3VjaGVzWzBdKXt2YXIgdT1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFkpO3NbMF09dVswXSxzWzFdPXVbMV19aWYodC50b3VjaGVzWzFdKXt2YXIgdT1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzFdLmNsaWVudFgsdC50b3VjaGVzWzFdLmNsaWVudFkpO3NbMl09dVswXSxzWzNdPXVbMV19aWYodC50b3VjaGVzWzJdKXt2YXIgdT1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzJdLmNsaWVudFgsdC50b3VjaGVzWzJdLmNsaWVudFkpO3NbNF09dVswXSxzWzVdPXVbMV19dmFyIGQ9ZnVuY3Rpb24oZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6dCx0eXBlOmUscG9zaXRpb246e3g6c1swXSx5OnNbMV19fX0sZj1lLnRvdWNoRGF0YS5zdGFydEdQb3NpdGlvbixtO2lmKG4mJnQudG91Y2hlc1swXSYmZil7Zm9yKHZhciBnPVtdLF89MDtfPHMubGVuZ3RoO18rKylnW19dPXNbX10tY1tfXTt2YXIgdj10LnRvdWNoZXNbMF0uY2xpZW50WC1mWzBdLHk9dip2LGI9dC50b3VjaGVzWzBdLmNsaWVudFktZlsxXTttPXkrYipiPj1lLnRvdWNoVGFwVGhyZXNob2xkMn1pZihuJiZlLnRvdWNoRGF0YS5jeHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgeD10LnRvdWNoZXNbMF0uY2xpZW50WC1VLFM9dC50b3VjaGVzWzBdLmNsaWVudFktVyxDPXQudG91Y2hlc1sxXS5jbGllbnRYLVUsVD10LnRvdWNoZXNbMV0uY2xpZW50WS1XLEU9cmUoeCxTLEMsVCksRD1FL0IsTz0xNTAsaz1PKk8sQT0xLjU7aWYoRD49QSpBfHxFPj1rKXtlLnRvdWNoRGF0YS5jeHQ9ITEsZS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCxlLnJlZHJhd0hpbnQoYHNlbGVjdGAsITApO3ZhciBqPWQoYGN4dHRhcGVuZGApO2UudG91Y2hEYXRhLnN0YXJ0PyhlLnRvdWNoRGF0YS5zdGFydC51bmFjdGl2YXRlKCkuZW1pdChqKSxlLnRvdWNoRGF0YS5zdGFydD1udWxsKTphLmVtaXQoail9fWlmKG4mJmUudG91Y2hEYXRhLmN4dCl7dmFyIGo9ZChgY3h0ZHJhZ2ApO2UuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsZS5yZWRyYXdIaW50KGBzZWxlY3RgLCEwKSxlLnRvdWNoRGF0YS5zdGFydD9lLnRvdWNoRGF0YS5zdGFydC5lbWl0KGopOmEuZW1pdChqKSxlLnRvdWNoRGF0YS5zdGFydCYmKGUudG91Y2hEYXRhLnN0YXJ0Ll9wcml2YXRlLmdyYWJiZWQ9ITEpLGUudG91Y2hEYXRhLmN4dERyYWdnZWQ9ITA7dmFyIE09ZS5maW5kTmVhcmVzdEVsZW1lbnQoc1swXSxzWzFdLCEwLCEwKTtlLnRvdWNoRGF0YS5jeHRPdmVyJiZNPT09ZS50b3VjaERhdGEuY3h0T3Zlcnx8KGUudG91Y2hEYXRhLmN4dE92ZXImJmUudG91Y2hEYXRhLmN4dE92ZXIuZW1pdChkKGBjeHRkcmFnb3V0YCkpLGUudG91Y2hEYXRhLmN4dE92ZXI9TSxNJiZNLmVtaXQoZChgY3h0ZHJhZ292ZXJgKSkpfWVsc2UgaWYobiYmdC50b3VjaGVzWzJdJiZhLmJveFNlbGVjdGlvbkVuYWJsZWQoKSl0LnByZXZlbnREZWZhdWx0KCksZS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPXZvaWQgMCx0aGlzLmxhc3RUaHJlZVRvdWNoPStuZXcgRGF0ZSxlLnRvdWNoRGF0YS5zZWxlY3Rpbmd8fGEuZW1pdChkKGBib3hzdGFydGApKSxlLnRvdWNoRGF0YS5zZWxlY3Rpbmc9ITAsZS50b3VjaERhdGEuZGlkU2VsZWN0PSEwLHJbNF09MSwhcnx8ci5sZW5ndGg9PT0wfHxyWzBdPT09dm9pZCAwPyhyWzBdPShzWzBdK3NbMl0rc1s0XSkvMyxyWzFdPShzWzFdK3NbM10rc1s1XSkvMyxyWzJdPShzWzBdK3NbMl0rc1s0XSkvMysxLHJbM109KHNbMV0rc1szXStzWzVdKS8zKzEpOihyWzJdPShzWzBdK3NbMl0rc1s0XSkvMyxyWzNdPShzWzFdK3NbM10rc1s1XSkvMyksZS5yZWRyYXdIaW50KGBzZWxlY3RgLCEwKSxlLnJlZHJhdygpO2Vsc2UgaWYobiYmdC50b3VjaGVzWzFdJiYhZS50b3VjaERhdGEuZGlkU2VsZWN0JiZhLnpvb21pbmdFbmFibGVkKCkmJmEucGFubmluZ0VuYWJsZWQoKSYmYS51c2VyWm9vbWluZ0VuYWJsZWQoKSYmYS51c2VyUGFubmluZ0VuYWJsZWQoKSl7dC5wcmV2ZW50RGVmYXVsdCgpLGUuZGF0YS5iZ0FjdGl2ZVBvc2lzdGlvbj12b2lkIDAsZS5yZWRyYXdIaW50KGBzZWxlY3RgLCEwKTt2YXIgTj1lLmRyYWdEYXRhLnRvdWNoRHJhZ0VsZXM7aWYoTil7ZS5yZWRyYXdIaW50KGBkcmFnYCwhMCk7Zm9yKHZhciBQPTA7UDxOLmxlbmd0aDtQKyspe3ZhciBWPU5bUF0uX3ByaXZhdGU7Vi5ncmFiYmVkPSExLFYucnNjcmF0Y2guaW5EcmFnTGF5ZXI9ITF9fXZhciBlZT1lLnRvdWNoRGF0YS5zdGFydCx4PXQudG91Y2hlc1swXS5jbGllbnRYLVUsUz10LnRvdWNoZXNbMF0uY2xpZW50WS1XLEM9dC50b3VjaGVzWzFdLmNsaWVudFgtVSxUPXQudG91Y2hlc1sxXS5jbGllbnRZLVcsRz1uZSh4LFMsQyxUKSxpZT1HL3o7aWYodGUpe3ZhciBhZT14LUYsb2U9Uy1JLHNlPUMtTCxLPVQtUixjZT0oYWUrc2UpLzIsbGU9KG9lK0spLzIsdWU9YS56b29tKCksZGU9dWUqaWUsZmU9YS5wYW4oKSxwZT1IWzBdKnVlK2ZlLngsbWU9SFsxXSp1ZStmZS55LGhlPXt4Oi1kZS91ZSoocGUtZmUueC1jZSkrcGUseTotZGUvdWUqKG1lLWZlLnktbGUpK21lfTtpZihlZSYmZWUuYWN0aXZlKCkpe3ZhciBOPWUuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcztoKE4pLGUucmVkcmF3SGludChgZHJhZ2AsITApLGUucmVkcmF3SGludChgZWxlc2AsITApLGVlLnVuYWN0aXZhdGUoKS5lbWl0KGQoYGZyZWVvbmApKSxOJiZOLmVtaXQoZChgZnJlZWApKSxlLmRyYWdEYXRhLmRpZERyYWcmJihlZS5lbWl0KGQoYGRyYWdmcmVlb25gKSksTiYmTi5lbWl0KGQoYGRyYWdmcmVlYCkpKX1hLnZpZXdwb3J0KHt6b29tOmRlLHBhbjpoZSxjYW5jZWxPbkZhaWxlZFpvb206ITB9KSxhLmVtaXQoZChgcGluY2h6b29tYCkpLHo9RyxGPXgsST1TLEw9QyxSPVQsZS5waW5jaGluZz0hMH1pZih0LnRvdWNoZXNbMF0pe3ZhciB1PWUucHJvamVjdEludG9WaWV3cG9ydCh0LnRvdWNoZXNbMF0uY2xpZW50WCx0LnRvdWNoZXNbMF0uY2xpZW50WSk7c1swXT11WzBdLHNbMV09dVsxXX1pZih0LnRvdWNoZXNbMV0pe3ZhciB1PWUucHJvamVjdEludG9WaWV3cG9ydCh0LnRvdWNoZXNbMV0uY2xpZW50WCx0LnRvdWNoZXNbMV0uY2xpZW50WSk7c1syXT11WzBdLHNbM109dVsxXX1pZih0LnRvdWNoZXNbMl0pe3ZhciB1PWUucHJvamVjdEludG9WaWV3cG9ydCh0LnRvdWNoZXNbMl0uY2xpZW50WCx0LnRvdWNoZXNbMl0uY2xpZW50WSk7c1s0XT11WzBdLHNbNV09dVsxXX19ZWxzZSBpZih0LnRvdWNoZXNbMF0mJiFlLnRvdWNoRGF0YS5kaWRTZWxlY3Qpe3ZhciBnZT1lLnRvdWNoRGF0YS5zdGFydCxfZT1lLnRvdWNoRGF0YS5sYXN0LE07aWYoIWUuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIWUuc3dpcGVQYW5uaW5nJiYoTT1lLmZpbmROZWFyZXN0RWxlbWVudChzWzBdLHNbMV0sITAsITApKSxuJiZnZSE9bnVsbCYmdC5wcmV2ZW50RGVmYXVsdCgpLG4mJmdlIT1udWxsJiZlLm5vZGVJc0RyYWdnYWJsZShnZSkpe2lmKG0pe3ZhciBOPWUuZHJhZ0RhdGEudG91Y2hEcmFnRWxlcyx2ZT0hZS5kcmFnRGF0YS5kaWREcmFnO3ZlJiZwKE4se2luRHJhZ0xheWVyOiEwfSksZS5kcmFnRGF0YS5kaWREcmFnPSEwO3ZhciB5ZT17eDowLHk6MH07aWYoUShnWzBdKSYmUShnWzFdKSYmKHllLngrPWdbMF0seWUueSs9Z1sxXSx2ZSkpe2UucmVkcmF3SGludChgZWxlc2AsITApO3ZhciBiZT1lLnRvdWNoRGF0YS5kcmFnRGVsdGE7YmUmJlEoYmVbMF0pJiZRKGJlWzFdKSYmKHllLngrPWJlWzBdLHllLnkrPWJlWzFdKX1lLmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXM9ITAsTi5zaWxlbnRTaGlmdCh5ZSkuZW1pdChkKGBwb3NpdGlvbmApKS5lbWl0KGQoYGRyYWdgKSksZS5yZWRyYXdIaW50KGBkcmFnYCwhMCksZS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblswXT09Y1swXSYmZS50b3VjaERhdGEuc3RhcnRQb3NpdGlvblsxXT09Y1sxXSYmZS5yZWRyYXdIaW50KGBlbGVzYCwhMCksZS5yZWRyYXcoKX1lbHNle3ZhciBiZT1lLnRvdWNoRGF0YS5kcmFnRGVsdGE9ZS50b3VjaERhdGEuZHJhZ0RlbHRhfHxbXTtiZS5sZW5ndGg9PT0wPyhiZS5wdXNoKGdbMF0pLGJlLnB1c2goZ1sxXSkpOihiZVswXSs9Z1swXSxiZVsxXSs9Z1sxXSl9fWlmKGkoZ2V8fE0sW2B0b3VjaG1vdmVgLGB0YXBkcmFnYCxgdm1vdXNlbW92ZWBdLHQse3g6c1swXSx5OnNbMV19KSxnZSYmZ2UuZ3JhYmJlZCgpfHxNPT1fZXx8KF9lJiZfZS5lbWl0KGQoYHRhcGRyYWdvdXRgKSksTSYmTS5lbWl0KGQoYHRhcGRyYWdvdmVyYCkpKSxlLnRvdWNoRGF0YS5sYXN0PU0sbilmb3IodmFyIFA9MDtQPHMubGVuZ3RoO1ArKylzW1BdJiZlLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uW1BdJiZtJiYoZS50b3VjaERhdGEuc2luZ2xlVG91Y2hNb3ZlZD0hMCk7aWYobiYmKGdlPT1udWxsfHxnZS5wYW5uYWJsZSgpKSYmYS5wYW5uaW5nRW5hYmxlZCgpJiZhLnVzZXJQYW5uaW5nRW5hYmxlZCgpKXtvKGdlLGUudG91Y2hEYXRhLnN0YXJ0cykmJih0LnByZXZlbnREZWZhdWx0KCksZS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9ufHwoZS5kYXRhLmJnQWN0aXZlUG9zaXN0aW9uPUVkKGUudG91Y2hEYXRhLnN0YXJ0UG9zaXRpb24pKSxlLnN3aXBlUGFubmluZz8oYS5wYW5CeSh7eDpnWzBdKmwseTpnWzFdKmx9KSxhLmVtaXQoZChgZHJhZ3BhbmApKSk6bSYmKGUuc3dpcGVQYW5uaW5nPSEwLGEucGFuQnkoe3g6dipsLHk6YipsfSksYS5lbWl0KGQoYGRyYWdwYW5gKSksZ2UmJihnZS51bmFjdGl2YXRlKCksZS5yZWRyYXdIaW50KGBzZWxlY3RgLCEwKSxlLnRvdWNoRGF0YS5zdGFydD1udWxsKSkpO3ZhciB1PWUucHJvamVjdEludG9WaWV3cG9ydCh0LnRvdWNoZXNbMF0uY2xpZW50WCx0LnRvdWNoZXNbMF0uY2xpZW50WSk7c1swXT11WzBdLHNbMV09dVsxXX19Zm9yKHZhciBfPTA7XzxzLmxlbmd0aDtfKyspY1tfXT1zW19dO24mJnQudG91Y2hlcy5sZW5ndGg+MCYmIWUuaG92ZXJEYXRhLmRyYWdnaW5nRWxlcyYmIWUuc3dpcGVQYW5uaW5nJiZlLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb24hPW51bGwmJihlLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLGUucmVkcmF3SGludChgc2VsZWN0YCwhMCksZS5yZWRyYXcoKSl9fSwhMSk7dmFyIG9lO2UucmVnaXN0ZXJCaW5kaW5nKHQsYHRvdWNoY2FuY2VsYCxvZT1mdW5jdGlvbih0KXt2YXIgbj1lLnRvdWNoRGF0YS5zdGFydDtlLnRvdWNoRGF0YS5jYXB0dXJlPSExLG4mJm4udW5hY3RpdmF0ZSgpfSk7dmFyIHNlLEssY2UsbGU7aWYoZS5yZWdpc3RlckJpbmRpbmcodCxgdG91Y2hlbmRgLHNlPWZ1bmN0aW9uKHQpe3ZhciByPWUudG91Y2hEYXRhLnN0YXJ0O2lmKGUudG91Y2hEYXRhLmNhcHR1cmUpdC50b3VjaGVzLmxlbmd0aD09PTAmJihlLnRvdWNoRGF0YS5jYXB0dXJlPSExKSx0LnByZXZlbnREZWZhdWx0KCk7ZWxzZSByZXR1cm47dmFyIGE9ZS5zZWxlY3Rpb247ZS5zd2lwZVBhbm5pbmc9ITEsZS5ob3ZlckRhdGEuZHJhZ2dpbmdFbGVzPSExO3ZhciBvPWUuY3kscz1vLnpvb20oKSxjPWUudG91Y2hEYXRhLm5vdyxsPWUudG91Y2hEYXRhLmVhcmxpZXI7aWYodC50b3VjaGVzWzBdKXt2YXIgdT1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzBdLmNsaWVudFgsdC50b3VjaGVzWzBdLmNsaWVudFkpO2NbMF09dVswXSxjWzFdPXVbMV19aWYodC50b3VjaGVzWzFdKXt2YXIgdT1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzFdLmNsaWVudFgsdC50b3VjaGVzWzFdLmNsaWVudFkpO2NbMl09dVswXSxjWzNdPXVbMV19aWYodC50b3VjaGVzWzJdKXt2YXIgdT1lLnByb2plY3RJbnRvVmlld3BvcnQodC50b3VjaGVzWzJdLmNsaWVudFgsdC50b3VjaGVzWzJdLmNsaWVudFkpO2NbNF09dVswXSxjWzVdPXVbMV19dmFyIGQ9ZnVuY3Rpb24oZSl7cmV0dXJue29yaWdpbmFsRXZlbnQ6dCx0eXBlOmUscG9zaXRpb246e3g6Y1swXSx5OmNbMV19fX07ciYmci51bmFjdGl2YXRlKCk7dmFyIGY7aWYoZS50b3VjaERhdGEuY3h0KXtpZihmPWQoYGN4dHRhcGVuZGApLHI/ci5lbWl0KGYpOm8uZW1pdChmKSwhZS50b3VjaERhdGEuY3h0RHJhZ2dlZCl7dmFyIHA9ZChgY3h0dGFwYCk7cj9yLmVtaXQocCk6by5lbWl0KHApfWUudG91Y2hEYXRhLnN0YXJ0JiYoZS50b3VjaERhdGEuc3RhcnQuX3ByaXZhdGUuZ3JhYmJlZD0hMSksZS50b3VjaERhdGEuY3h0PSExLGUudG91Y2hEYXRhLnN0YXJ0PW51bGwsZS5yZWRyYXcoKX1lbHNle2lmKCF0LnRvdWNoZXNbMl0mJm8uYm94U2VsZWN0aW9uRW5hYmxlZCgpJiZlLnRvdWNoRGF0YS5zZWxlY3Rpbmcpe2UudG91Y2hEYXRhLnNlbGVjdGluZz0hMTt2YXIgbT1vLmNvbGxlY3Rpb24oZS5nZXRBbGxJbkJveChhWzBdLGFbMV0sYVsyXSxhWzNdKSk7YVswXT12b2lkIDAsYVsxXT12b2lkIDAsYVsyXT12b2lkIDAsYVszXT12b2lkIDAsYVs0XT0wLGUucmVkcmF3SGludChgc2VsZWN0YCwhMCksby5lbWl0KGQoYGJveGVuZGApKSxtLmVtaXQoZChgYm94YCkpLnN0ZEZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5zZWxlY3RhYmxlKCkmJiFlLnNlbGVjdGVkKCl9KS5zZWxlY3QoKS5lbWl0KGQoYGJveHNlbGVjdGApKSxtLm5vbmVtcHR5KCkmJmUucmVkcmF3SGludChgZWxlc2AsITApLGUucmVkcmF3KCl9aWYocj8udW5hY3RpdmF0ZSgpLHQudG91Y2hlc1syXSllLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLGUucmVkcmF3SGludChgc2VsZWN0YCwhMCk7ZWxzZSBpZighdC50b3VjaGVzWzFdJiYhdC50b3VjaGVzWzBdJiYhdC50b3VjaGVzWzBdKXtlLmRhdGEuYmdBY3RpdmVQb3Npc3Rpb249dm9pZCAwLGUucmVkcmF3SGludChgc2VsZWN0YCwhMCk7dmFyIGc9ZS5kcmFnRGF0YS50b3VjaERyYWdFbGVzO2lmKHIhPW51bGwpe3ZhciBfPXIuX3ByaXZhdGUuZ3JhYmJlZDtoKGcpLGUucmVkcmF3SGludChgZHJhZ2AsITApLGUucmVkcmF3SGludChgZWxlc2AsITApLF8mJihyLmVtaXQoZChgZnJlZW9uYCkpLGcuZW1pdChkKGBmcmVlYCkpLGUuZHJhZ0RhdGEuZGlkRHJhZyYmKHIuZW1pdChkKGBkcmFnZnJlZW9uYCkpLGcuZW1pdChkKGBkcmFnZnJlZWApKSkpLGkocixbYHRvdWNoZW5kYCxgdGFwZW5kYCxgdm1vdXNldXBgLGB0YXBkcmFnb3V0YF0sdCx7eDpjWzBdLHk6Y1sxXX0pLHIudW5hY3RpdmF0ZSgpLGUudG91Y2hEYXRhLnN0YXJ0PW51bGx9ZWxzZSBpKGUuZmluZE5lYXJlc3RFbGVtZW50KGNbMF0sY1sxXSwhMCwhMCksW2B0b3VjaGVuZGAsYHRhcGVuZGAsYHZtb3VzZXVwYCxgdGFwZHJhZ291dGBdLHQse3g6Y1swXSx5OmNbMV19KTt2YXIgdj1lLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzBdLWNbMF0seT12KnYsYj1lLnRvdWNoRGF0YS5zdGFydFBvc2l0aW9uWzFdLWNbMV0seD0oeStiKmIpKnMqcztlLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkfHwocnx8by4kKGA6c2VsZWN0ZWRgKS51bnNlbGVjdChbYHRhcHVuc2VsZWN0YF0pLGkocixbYHRhcGAsYHZjbGlja2BdLHQse3g6Y1swXSx5OmNbMV19KSxLPSExLHQudGltZVN0YW1wLWxlPD1vLm11bHRpQ2xpY2tEZWJvdW5jZVRpbWUoKT8oY2UmJmNsZWFyVGltZW91dChjZSksSz0hMCxsZT1udWxsLGkocixbYGRibHRhcGAsYHZkYmxjbGlja2BdLHQse3g6Y1swXSx5OmNbMV19KSk6KGNlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtLfHxpKHIsW2BvbmV0YXBgLGB2b25lY2xpY2tgXSx0LHt4OmNbMF0seTpjWzFdfSl9LG8ubXVsdGlDbGlja0RlYm91bmNlVGltZSgpKSxsZT10LnRpbWVTdGFtcCkpLHIhPW51bGwmJiFlLmRyYWdEYXRhLmRpZERyYWcmJnIuX3ByaXZhdGUuc2VsZWN0YWJsZSYmeDxlLnRvdWNoVGFwVGhyZXNob2xkMiYmIWUucGluY2hpbmcmJihvLnNlbGVjdGlvblR5cGUoKT09PWBzaW5nbGVgPyhvLiQobikudW5tZXJnZShyKS51bnNlbGVjdChbYHRhcHVuc2VsZWN0YF0pLHIuc2VsZWN0KFtgdGFwc2VsZWN0YF0pKTpyLnNlbGVjdGVkKCk/ci51bnNlbGVjdChbYHRhcHVuc2VsZWN0YF0pOnIuc2VsZWN0KFtgdGFwc2VsZWN0YF0pLGUucmVkcmF3SGludChgZWxlc2AsITApKSxlLnRvdWNoRGF0YS5zaW5nbGVUb3VjaE1vdmVkPSEwfWZvcih2YXIgUz0wO1M8Yy5sZW5ndGg7UysrKWxbU109Y1tTXTtlLmRyYWdEYXRhLmRpZERyYWc9ITEsdC50b3VjaGVzLmxlbmd0aD09PTAmJihlLnRvdWNoRGF0YS5kcmFnRGVsdGE9W10sZS50b3VjaERhdGEuc3RhcnRQb3NpdGlvbj1bbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGUudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPW51bGwsZS50b3VjaERhdGEuZGlkU2VsZWN0PSExKSx0LnRvdWNoZXMubGVuZ3RoPDImJih0LnRvdWNoZXMubGVuZ3RoPT09MSYmKGUudG91Y2hEYXRhLnN0YXJ0R1Bvc2l0aW9uPVt0LnRvdWNoZXNbMF0uY2xpZW50WCx0LnRvdWNoZXNbMF0uY2xpZW50WV0pLGUucGluY2hpbmc9ITEsZS5yZWRyYXdIaW50KGBlbGVzYCwhMCksZS5yZWRyYXcoKSl9fSwhMSksdHlwZW9mIFRvdWNoRXZlbnQ+YHVgKXt2YXIgdWU9W10sZGU9ZnVuY3Rpb24oZSl7cmV0dXJue2NsaWVudFg6ZS5jbGllbnRYLGNsaWVudFk6ZS5jbGllbnRZLGZvcmNlOjEsaWRlbnRpZmllcjplLnBvaW50ZXJJZCxwYWdlWDplLnBhZ2VYLHBhZ2VZOmUucGFnZVkscmFkaXVzWDplLndpZHRoLzIscmFkaXVzWTplLmhlaWdodC8yLHNjcmVlblg6ZS5zY3JlZW5YLHNjcmVlblk6ZS5zY3JlZW5ZLHRhcmdldDplLnRhcmdldH19LGZlPWZ1bmN0aW9uKGUpe3JldHVybntldmVudDplLHRvdWNoOmRlKGUpfX0scGU9ZnVuY3Rpb24oZSl7dWUucHVzaChmZShlKSl9LG1lPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8dWUubGVuZ3RoO3QrKylpZih1ZVt0XS5ldmVudC5wb2ludGVySWQ9PT1lLnBvaW50ZXJJZCl7dWUuc3BsaWNlKHQsMSk7cmV0dXJufX0saGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dWUuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmV2ZW50LnBvaW50ZXJJZD09PWUucG9pbnRlcklkfSlbMF07dC5ldmVudD1lLHQudG91Y2g9ZGUoZSl9LGdlPWZ1bmN0aW9uKGUpe2UudG91Y2hlcz11ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUudG91Y2h9KX0sX2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucG9pbnRlclR5cGU9PT1gbW91c2VgfHxlLnBvaW50ZXJUeXBlPT09NH07ZS5yZWdpc3RlckJpbmRpbmcoZS5jb250YWluZXIsYHBvaW50ZXJkb3duYCxmdW5jdGlvbihlKXtfZShlKXx8KGUucHJldmVudERlZmF1bHQoKSxwZShlKSxnZShlKSxpZShlKSl9KSxlLnJlZ2lzdGVyQmluZGluZyhlLmNvbnRhaW5lcixgcG9pbnRlcnVwYCxmdW5jdGlvbihlKXtfZShlKXx8KG1lKGUpLGdlKGUpLHNlKGUpKX0pLGUucmVnaXN0ZXJCaW5kaW5nKGUuY29udGFpbmVyLGBwb2ludGVyY2FuY2VsYCxmdW5jdGlvbihlKXtfZShlKXx8KG1lKGUpLGdlKGUpLG9lKGUpKX0pLGUucmVnaXN0ZXJCaW5kaW5nKGUuY29udGFpbmVyLGBwb2ludGVybW92ZWAsZnVuY3Rpb24oZSl7X2UoZSl8fChlLnByZXZlbnREZWZhdWx0KCksaGUoZSksZ2UoZSksYWUoZSkpfSl9fTt2YXIgR3g9e307R3guZ2VuZXJhdGVQb2x5Z29uPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlc1tlXT17cmVuZGVyZXI6dGhpcyxuYW1lOmUscG9pbnRzOnQsZHJhdzpmdW5jdGlvbihlLHQsbixyLGksYSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKGBwb2x5Z29uYCxlLHQsbixyLGksdGhpcy5wb2ludHMpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyl7cmV0dXJuIHdmKGksYSx0aGlzLnBvaW50cyxlLHQsbi8yLHIvMixvKX0sY2hlY2tQb2ludDpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe3JldHVybiBtZihlLHQsdGhpcy5wb2ludHMsYSxvLHIsaSxbMCwtMV0sbil9LGhhc01pdGVyQm91bmRzOmUhPT1gcmVjdGFuZ2xlYCxtaXRlckJvdW5kczpmdW5jdGlvbihlLHQsbixyLGksYSl7cmV0dXJuIGFmKHRoaXMucG9pbnRzLGUsdCxuLHIsaSl9fX0sR3guZ2VuZXJhdGVFbGxpcHNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVNoYXBlcy5lbGxpcHNlPXtyZW5kZXJlcjp0aGlzLG5hbWU6YGVsbGlwc2VgLGRyYXc6ZnVuY3Rpb24oZSx0LG4scixpLGEpe3RoaXMucmVuZGVyZXIubm9kZVNoYXBlSW1wbCh0aGlzLm5hbWUsZSx0LG4scixpKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe3JldHVybiB2ZihpLGEsZSx0LG4vMitvLHIvMitvKX0sY2hlY2tQb2ludDpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe3JldHVybiB5ZihlLHQscixpLGEsbyxuKX19fSxHeC5nZW5lcmF0ZVJvdW5kUG9seWdvbj1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbZV09e3JlbmRlcmVyOnRoaXMsbmFtZTplLHBvaW50czp0LGdldE9yQ3JlYXRlQ29ybmVyczpmdW5jdGlvbihlLG4scixpLGEsbyxzKXtpZihvW3NdIT09dm9pZCAwJiZvW3MrYC1jeGBdPT09ZSYmb1tzK2AtY3lgXT09PW4mJm9bcytgLXdgXT09PXImJm9bcytgLWhgXT09PWkmJm9bcytgLWNvcm5lci1yYWRpdXNgXT09PWEpcmV0dXJuIG9bc107b1tzXT1BcnJheSh0Lmxlbmd0aC8yKSxvW3MrYC1jeGBdPWUsb1tzK2AtY3lgXT1uLG9bcytgLXdgXT1yLG9bcytgLWhgXT1pLG9bcytgLWNvcm5lci1yYWRpdXNgXT1hO3ZhciBjPXIvMixsPWkvMjthPWE9PT1gYXV0b2A/amYocixpKTphO2Zvcih2YXIgdT1BcnJheSh0Lmxlbmd0aC8yKSxkPTA7ZDx0Lmxlbmd0aC8yO2QrKyl1W2RdPXt4OmUrYyp0W2QqMl0seTpuK2wqdFtkKjIrMV19O3ZhciBmLHAsbSxoLGc9dS5sZW5ndGg7Zm9yKHA9dVtnLTFdLGY9MDtmPGc7ZisrKW09dVtmJWddLGg9dVsoZisxKSVnXSxvW3NdW2ZdPVN4KHAsbSxoLGEpLHA9bSxtPWg7cmV0dXJuIG9bc119LGRyYXc6ZnVuY3Rpb24oZSx0LG4scixpLGEsbyl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKGByb3VuZC1wb2x5Z29uYCxlLHQsbixyLGksdGhpcy5wb2ludHMsdGhpcy5nZXRPckNyZWF0ZUNvcm5lcnModCxuLHIsaSxhLG8sYGRyYXdDb3JuZXJzYCkpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyxjKXtyZXR1cm4gVGYoaSxhLHRoaXMucG9pbnRzLGUsdCxuLHIsbyx0aGlzLmdldE9yQ3JlYXRlQ29ybmVycyhlLHQsbixyLHMsYyxgY29ybmVyc2ApKX0sY2hlY2tQb2ludDpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMsYyl7cmV0dXJuIGhmKGUsdCx0aGlzLnBvaW50cyxhLG8scixpLHRoaXMuZ2V0T3JDcmVhdGVDb3JuZXJzKGEsbyxyLGkscyxjLGBjb3JuZXJzYCkpfX19LEd4LmdlbmVyYXRlUm91bmRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW2Byb3VuZC1yZWN0YW5nbGVgXT10aGlzLm5vZGVTaGFwZXMucm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZTpgcm91bmQtcmVjdGFuZ2xlYCxwb2ludHM6RGYoNCwwKSxkcmF3OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUsdCxuLHIsaSx0aGlzLnBvaW50cyxhKX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe3JldHVybiBvZihpLGEsZSx0LG4scixvLHMpfSxjaGVja1BvaW50OmZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyl7dmFyIGM9ci8yLGw9aS8yO3M9cz09PWBhdXRvYD9BZihyLGkpOnMscz1NYXRoLm1pbihjLGwscyk7dmFyIHU9cyoyO3JldHVybiEhKG1mKGUsdCx0aGlzLnBvaW50cyxhLG8scixpLXUsWzAsLTFdLG4pfHxtZihlLHQsdGhpcy5wb2ludHMsYSxvLHItdSxpLFswLC0xXSxuKXx8eWYoZSx0LHUsdSxhLWMrcyxvLWwrcyxuKXx8eWYoZSx0LHUsdSxhK2MtcyxvLWwrcyxuKXx8eWYoZSx0LHUsdSxhK2MtcyxvK2wtcyxuKXx8eWYoZSx0LHUsdSxhLWMrcyxvK2wtcyxuKSl9fX0sR3guZ2VuZXJhdGVDdXRSZWN0YW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlU2hhcGVzW2BjdXQtcmVjdGFuZ2xlYF09dGhpcy5ub2RlU2hhcGVzLmN1dHJlY3RhbmdsZT17cmVuZGVyZXI6dGhpcyxuYW1lOmBjdXQtcmVjdGFuZ2xlYCxjb3JuZXJMZW5ndGg6TWYoKSxwb2ludHM6RGYoNCwwKSxkcmF3OmZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt0aGlzLnJlbmRlcmVyLm5vZGVTaGFwZUltcGwodGhpcy5uYW1lLGUsdCxuLHIsaSxudWxsLGEpfSxnZW5lcmF0ZUN1dFRyaWFuZ2xlUHRzOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGE9aT09PWBhdXRvYD90aGlzLmNvcm5lckxlbmd0aDppLG89dC8yLHM9ZS8yLGM9bi1zLGw9bitzLHU9ci1vLGQ9citvO3JldHVybnt0b3BMZWZ0OltjLHUrYSxjK2EsdSxjK2EsdSthXSx0b3BSaWdodDpbbC1hLHUsbCx1K2EsbC1hLHUrYV0sYm90dG9tUmlnaHQ6W2wsZC1hLGwtYSxkLGwtYSxkLWFdLGJvdHRvbUxlZnQ6W2MrYSxkLGMsZC1hLGMrYSxkLWFdfX0saW50ZXJzZWN0TGluZTpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe3ZhciBjPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhuKzIqbyxyKzIqbyxlLHQscyk7cmV0dXJuIHdmKGksYSxbXS5jb25jYXQuYXBwbHkoW10sW2MudG9wTGVmdC5zcGxpY2UoMCw0KSxjLnRvcFJpZ2h0LnNwbGljZSgwLDQpLGMuYm90dG9tUmlnaHQuc3BsaWNlKDAsNCksYy5ib3R0b21MZWZ0LnNwbGljZSgwLDQpXSksZSx0KX0sY2hlY2tQb2ludDpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe3ZhciBjPXM9PT1gYXV0b2A/dGhpcy5jb3JuZXJMZW5ndGg6cztpZihtZihlLHQsdGhpcy5wb2ludHMsYSxvLHIsaS0yKmMsWzAsLTFdLG4pfHxtZihlLHQsdGhpcy5wb2ludHMsYSxvLHItMipjLGksWzAsLTFdLG4pKXJldHVybiEwO3ZhciBsPXRoaXMuZ2VuZXJhdGVDdXRUcmlhbmdsZVB0cyhyLGksYSxvKTtyZXR1cm4gcGYoZSx0LGwudG9wTGVmdCl8fHBmKGUsdCxsLnRvcFJpZ2h0KXx8cGYoZSx0LGwuYm90dG9tUmlnaHQpfHxwZihlLHQsbC5ib3R0b21MZWZ0KX19fSxHeC5nZW5lcmF0ZUJhcnJlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXMuYmFycmVsPXtyZW5kZXJlcjp0aGlzLG5hbWU6YGJhcnJlbGAscG9pbnRzOkRmKDQsMCksZHJhdzpmdW5jdGlvbihlLHQsbixyLGksYSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHQsbixyLGkpfSxpbnRlcnNlY3RMaW5lOmZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyl7dmFyIGM9dGhpcy5nZW5lcmF0ZUJhcnJlbEJlemllclB0cyhuKzIqbyxyKzIqbyxlLHQpLGw9ZnVuY3Rpb24oZSl7dmFyIHQ9VmQoe3g6ZVswXSx5OmVbMV19LHt4OmVbMl0seTplWzNdfSx7eDplWzRdLHk6ZVs1XX0sLjE1KSxuPVZkKHt4OmVbMF0seTplWzFdfSx7eDplWzJdLHk6ZVszXX0se3g6ZVs0XSx5OmVbNV19LC41KSxyPVZkKHt4OmVbMF0seTplWzFdfSx7eDplWzJdLHk6ZVszXX0se3g6ZVs0XSx5OmVbNV19LC44NSk7cmV0dXJuW2VbMF0sZVsxXSx0LngsdC55LG4ueCxuLnksci54LHIueSxlWzRdLGVbNV1dfTtyZXR1cm4gd2YoaSxhLFtdLmNvbmNhdChsKGMudG9wTGVmdCksbChjLnRvcFJpZ2h0KSxsKGMuYm90dG9tUmlnaHQpLGwoYy5ib3R0b21MZWZ0KSksZSx0KX0sZ2VuZXJhdGVCYXJyZWxCZXppZXJQdHM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9dC8yLGE9ZS8yLG89bi1hLHM9bithLGM9ci1pLGw9citpLHU9UGYoZSx0KSxkPXUuaGVpZ2h0T2Zmc2V0LGY9dS53aWR0aE9mZnNldCxwPXUuY3RybFB0T2Zmc2V0UGN0KmUsbT17dG9wTGVmdDpbbyxjK2QsbytwLGMsbytmLGNdLHRvcFJpZ2h0OltzLWYsYyxzLXAsYyxzLGMrZF0sYm90dG9tUmlnaHQ6W3MsbC1kLHMtcCxsLHMtZixsXSxib3R0b21MZWZ0OltvK2YsbCxvK3AsbCxvLGwtZF19O3JldHVybiBtLnRvcExlZnQuaXNUb3A9ITAsbS50b3BSaWdodC5pc1RvcD0hMCxtLmJvdHRvbUxlZnQuaXNCb3R0b209ITAsbS5ib3R0b21SaWdodC5pc0JvdHRvbT0hMCxtfSxjaGVja1BvaW50OmZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyl7dmFyIGM9UGYocixpKSxsPWMuaGVpZ2h0T2Zmc2V0LHU9Yy53aWR0aE9mZnNldDtpZihtZihlLHQsdGhpcy5wb2ludHMsYSxvLHIsaS0yKmwsWzAsLTFdLG4pfHxtZihlLHQsdGhpcy5wb2ludHMsYSxvLHItMip1LGksWzAsLTFdLG4pKXJldHVybiEwO2Zvcih2YXIgZD10aGlzLmdlbmVyYXRlQmFycmVsQmV6aWVyUHRzKHIsaSxhLG8pLGY9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW5bNF0saT1uWzJdLGE9blswXSxvPW5bNV0scz1uWzFdO2lmKE1hdGgubWluKHIsYSk8PWUmJmU8PU1hdGgubWF4KHIsYSkmJk1hdGgubWluKG8scyk8PXQmJnQ8PU1hdGgubWF4KG8scykpe3ZhciBjPU5mKHIsaSxhKSxsPWxmKGNbMF0sY1sxXSxjWzJdLGUpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZSYmZTw9MX0pO2lmKGwubGVuZ3RoPjApcmV0dXJuIGxbMF19cmV0dXJuIG51bGx9LHA9T2JqZWN0LmtleXMoZCksbT0wO208cC5sZW5ndGg7bSsrKXt2YXIgaD1kW3BbbV1dLGc9ZihlLHQsaCk7aWYoZyE9bnVsbCl7dmFyIF89aFs1XSx2PWhbM10seT1oWzFdLGI9QmQoXyx2LHksZyk7aWYoaC5pc1RvcCYmYjw9dHx8aC5pc0JvdHRvbSYmdDw9YilyZXR1cm4hMH19cmV0dXJuITF9fX0sR3guZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVTaGFwZXNbYGJvdHRvbS1yb3VuZC1yZWN0YW5nbGVgXT10aGlzLm5vZGVTaGFwZXMuYm90dG9tcm91bmRyZWN0YW5nbGU9e3JlbmRlcmVyOnRoaXMsbmFtZTpgYm90dG9tLXJvdW5kLXJlY3RhbmdsZWAscG9pbnRzOkRmKDQsMCksZHJhdzpmdW5jdGlvbihlLHQsbixyLGksYSl7dGhpcy5yZW5kZXJlci5ub2RlU2hhcGVJbXBsKHRoaXMubmFtZSxlLHQsbixyLGksdGhpcy5wb2ludHMsYSl9LGludGVyc2VjdExpbmU6ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzKXt2YXIgYz1lLShuLzIrbyksbD10LShyLzIrbyksdT1sLGQ9U2YoaSxhLGUsdCxjLGwsZSsobi8yK28pLHUsITEpO3JldHVybiBkLmxlbmd0aD4wP2Q6b2YoaSxhLGUsdCxuLHIsbyxzKX0sY2hlY2tQb2ludDpmdW5jdGlvbihlLHQsbixyLGksYSxvLHMpe3M9cz09PWBhdXRvYD9BZihyLGkpOnM7dmFyIGM9MipzO2lmKG1mKGUsdCx0aGlzLnBvaW50cyxhLG8scixpLWMsWzAsLTFdLG4pfHxtZihlLHQsdGhpcy5wb2ludHMsYSxvLHItYyxpLFswLC0xXSxuKSlyZXR1cm4hMDt2YXIgbD1yLzIrMipuLHU9aS8yKzIqbjtyZXR1cm4hIShwZihlLHQsW2EtbCxvLXUsYS1sLG8sYStsLG8sYStsLG8tdV0pfHx5ZihlLHQsYyxjLGErci8yLXMsbytpLzItcyxuKXx8eWYoZSx0LGMsYyxhLXIvMitzLG8raS8yLXMsbikpfX19LEd4LnJlZ2lzdGVyTm9kZVNoYXBlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMubm9kZVNoYXBlcz17fSx0PXRoaXM7dGhpcy5nZW5lcmF0ZUVsbGlwc2UoKSx0aGlzLmdlbmVyYXRlUG9seWdvbihgdHJpYW5nbGVgLERmKDMsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oYHJvdW5kLXRyaWFuZ2xlYCxEZigzLDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbihgcmVjdGFuZ2xlYCxEZig0LDApKSxlLnNxdWFyZT1lLnJlY3RhbmdsZSx0aGlzLmdlbmVyYXRlUm91bmRSZWN0YW5nbGUoKSx0aGlzLmdlbmVyYXRlQ3V0UmVjdGFuZ2xlKCksdGhpcy5nZW5lcmF0ZUJhcnJlbCgpLHRoaXMuZ2VuZXJhdGVCb3R0b21Sb3VuZHJlY3RhbmdsZSgpO3ZhciBuPVswLDEsMSwwLDAsLTEsLTEsMF07dGhpcy5nZW5lcmF0ZVBvbHlnb24oYGRpYW1vbmRgLG4pLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oYHJvdW5kLWRpYW1vbmRgLG4pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKGBwZW50YWdvbmAsRGYoNSwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbihgcm91bmQtcGVudGFnb25gLERmKDUsMCkpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKGBoZXhhZ29uYCxEZig2LDApKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKGByb3VuZC1oZXhhZ29uYCxEZig2LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbihgaGVwdGFnb25gLERmKDcsMCkpLHRoaXMuZ2VuZXJhdGVSb3VuZFBvbHlnb24oYHJvdW5kLWhlcHRhZ29uYCxEZig3LDApKSx0aGlzLmdlbmVyYXRlUG9seWdvbihgb2N0YWdvbmAsRGYoOCwwKSksdGhpcy5nZW5lcmF0ZVJvdW5kUG9seWdvbihgcm91bmQtb2N0YWdvbmAsRGYoOCwwKSk7dmFyIHI9QXJyYXkoMjApLGk9a2YoNSwwKSxhPWtmKDUsTWF0aC5QSS81KSxvPS41KigzLU1hdGguc3FydCg1KSk7byo9MS41Nztmb3IodmFyIHM9MDtzPGEubGVuZ3RoLzI7cysrKWFbcyoyXSo9byxhW3MqMisxXSo9bztmb3IodmFyIHM9MDtzPDU7cysrKXJbcyo0XT1pW3MqMl0scltzKjQrMV09aVtzKjIrMV0scltzKjQrMl09YVtzKjJdLHJbcyo0KzNdPWFbcyoyKzFdO3I9T2YociksdGhpcy5nZW5lcmF0ZVBvbHlnb24oYHN0YXJgLHIpLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKGB2ZWVgLFstMSwtMSwwLC0uMzMzLDEsLTEsMCwxXSksdGhpcy5nZW5lcmF0ZVBvbHlnb24oYHJob21ib2lkYCxbLTEsLTEsLjMzMywtMSwxLDEsLS4zMzMsMV0pLHRoaXMuZ2VuZXJhdGVQb2x5Z29uKGByaWdodC1yaG9tYm9pZGAsWy0uMzMzLC0xLDEsLTEsLjMzMywxLC0xLDFdKSx0aGlzLm5vZGVTaGFwZXMuY29uY2F2ZWhleGFnb249dGhpcy5nZW5lcmF0ZVBvbHlnb24oYGNvbmNhdmUtaGV4YWdvbmAsWy0xLC0uOTUsLS43NSwwLC0xLC45NSwxLC45NSwuNzUsMCwxLC0uOTVdKTt2YXIgYz1bLTEsLTEsLjI1LC0xLDEsMCwuMjUsMSwtMSwxXTt0aGlzLmdlbmVyYXRlUG9seWdvbihgdGFnYCxjKSx0aGlzLmdlbmVyYXRlUm91bmRQb2x5Z29uKGByb3VuZC10YWdgLGMpLGUubWFrZVBvbHlnb249ZnVuY3Rpb24oZSl7dmFyIG49YHBvbHlnb24tYCtlLmpvaW4oYCRgKSxyO3JldHVybihyPXRoaXNbbl0pP3I6dC5nZW5lcmF0ZVBvbHlnb24obixlKX19O3ZhciBLeD17fTtLeC50aW1lVG9SZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWRyYXdUb3RhbFRpbWUvdGhpcy5yZWRyYXdDb3VudH0sS3gucmVkcmF3PWZ1bmN0aW9uKGUpe2V8fD1IdSgpO3ZhciB0PXRoaXM7dC5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKHQuYXZlcmFnZVJlZHJhd1RpbWU9MCksdC5sYXN0UmVkcmF3VGltZT09PXZvaWQgMCYmKHQubGFzdFJlZHJhd1RpbWU9MCksdC5sYXN0RHJhd1RpbWU9PT12b2lkIDAmJih0Lmxhc3REcmF3VGltZT0wKSx0LnJlcXVlc3RlZEZyYW1lPSEwLHQucmVuZGVyT3B0aW9ucz1lfSxLeC5iZWZvcmVSZW5kZXI9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5kZXN0cm95ZWQpe3Q/P1B1KGBQcmlvcml0eSBpcyBub3Qgb3B0aW9uYWwgZm9yIGJlZm9yZVJlbmRlcmApO3ZhciBuPXRoaXMuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzO24ucHVzaCh7Zm46ZSxwcmlvcml0eTp0fSksbi5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pfX07dmFyIHF4PWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9ZS5iZWZvcmVSZW5kZXJDYWxsYmFja3MsaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0uZm4odCxuKX07S3guc3RhcnRSZW5kZXJMb29wPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY3k7aWYoIWUucmVuZGVyTG9vcFN0YXJ0ZWQpe2UucmVuZGVyTG9vcFN0YXJ0ZWQ9ITA7dmFyIG49ZnVuY3Rpb24ocil7aWYoIWUuZGVzdHJveWVkKXtpZighdC5iYXRjaGluZygpKXtpZihlLnJlcXVlc3RlZEZyYW1lJiYhZS5za2lwRnJhbWUpe3F4KGUsITAscik7dmFyIGk9bHUoKTtlLnJlbmRlcihlLnJlbmRlck9wdGlvbnMpO3ZhciBhPWUubGFzdERyYXdUaW1lPWx1KCk7ZS5hdmVyYWdlUmVkcmF3VGltZT09PXZvaWQgMCYmKGUuYXZlcmFnZVJlZHJhd1RpbWU9YS1pKSxlLnJlZHJhd0NvdW50PT09dm9pZCAwJiYoZS5yZWRyYXdDb3VudD0wKSxlLnJlZHJhd0NvdW50KyssZS5yZWRyYXdUb3RhbFRpbWU9PT12b2lkIDAmJihlLnJlZHJhd1RvdGFsVGltZT0wKTt2YXIgbz1hLWk7ZS5yZWRyYXdUb3RhbFRpbWUrPW8sZS5sYXN0UmVkcmF3VGltZT1vLGUuYXZlcmFnZVJlZHJhd1RpbWU9ZS5hdmVyYWdlUmVkcmF3VGltZS8yK28vMixlLnJlcXVlc3RlZEZyYW1lPSExfWVsc2UgcXgoZSwhMSxyKX1lLnNraXBGcmFtZT0hMSxjdShuKX19O2N1KG4pfX07dmFyIEp4PWZ1bmN0aW9uKGUpe3RoaXMuaW5pdChlKX0sWXg9SngucHJvdG90eXBlO1l4LmNsaWVudEZ1bmN0aW9ucz1bYHJlZHJhd0hpbnRgLGByZW5kZXJgLGByZW5kZXJUb2AsYG1hdGNoQ2FudmFzU2l6ZWAsYG5vZGVTaGFwZUltcGxgLGBhcnJvd1NoYXBlSW1wbGBdLFl4LmluaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0Lm9wdGlvbnM9ZSx0LmN5PWUuY3k7dmFyIG49dC5jb250YWluZXI9ZS5jeS5jb250YWluZXIoKSxyPXQuY3kud2luZG93KCk7aWYocil7dmFyIGk9ci5kb2N1bWVudCxhPWkuaGVhZCxvPWBfX19fX19fX19fY3l0b3NjYXBlX3N0eWxlc2hlZXRgLHM9YF9fX19fX19fX19jeXRvc2NhcGVfY29udGFpbmVyYCxjPWkuZ2V0RWxlbWVudEJ5SWQobykhPW51bGw7aWYobi5jbGFzc05hbWUuaW5kZXhPZihzKTwwJiYobi5jbGFzc05hbWU9KG4uY2xhc3NOYW1lfHxgYCkrYCBgK3MpLCFjKXt2YXIgbD1pLmNyZWF0ZUVsZW1lbnQoYHN0eWxlYCk7bC5pZD1vLGwudGV4dENvbnRlbnQ9YC5gK3MrYCB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfWAsYS5pbnNlcnRCZWZvcmUobCxhLmNoaWxkcmVuWzBdKX1yLmdldENvbXB1dGVkU3R5bGUobikuZ2V0UHJvcGVydHlWYWx1ZShgcG9zaXRpb25gKT09PWBzdGF0aWNgJiZJdShgQSBDeXRvc2NhcGUgY29udGFpbmVyIGhhcyBzdHlsZSBwb3NpdGlvbjpzdGF0aWMgYW5kIHNvIGNhbiBub3QgdXNlIFVJIGV4dGVuc2lvbnMgcHJvcGVybHlgKX10LnNlbGVjdGlvbj1bdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLDBdLHQuYmV6aWVyUHJvalBjdHM9Wy4wNSwuMjI1LC40LC41LC42LC43NzUsLjk1XSx0LmhvdmVyRGF0YT17ZG93bjpudWxsLGxhc3Q6bnVsbCxkb3duVGltZTpudWxsLHRyaWdnZXJNb2RlOm51bGwsZHJhZ2dpbmc6ITEsaW5pdGlhbFBhbjpbbnVsbCxudWxsXSxjYXB0dXJlOiExfSx0LmRyYWdEYXRhPXtwb3NzaWJsZURyYWdFbGVtZW50czpbXX0sdC50b3VjaERhdGE9e3N0YXJ0Om51bGwsY2FwdHVyZTohMSxzdGFydFBvc2l0aW9uOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sc2luZ2xlVG91Y2hTdGFydFRpbWU6bnVsbCxzaW5nbGVUb3VjaE1vdmVkOiEwLG5vdzpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGVhcmxpZXI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sdC5yZWRyYXdzPTAsdC5zaG93RnBzPWUuc2hvd0Zwcyx0LmRlYnVnPWUuZGVidWcsdC53ZWJnbD1lLndlYmdsLHQuaGlkZUVkZ2VzT25WaWV3cG9ydD1lLmhpZGVFZGdlc09uVmlld3BvcnQsdC50ZXh0dXJlT25WaWV3cG9ydD1lLnRleHR1cmVPblZpZXdwb3J0LHQud2hlZWxTZW5zaXRpdml0eT1lLndoZWVsU2Vuc2l0aXZpdHksdC5tb3Rpb25CbHVyRW5hYmxlZD1lLm1vdGlvbkJsdXIsdC5mb3JjZWRQaXhlbFJhdGlvPVEoZS5waXhlbFJhdGlvKT9lLnBpeGVsUmF0aW86bnVsbCx0Lm1vdGlvbkJsdXI9ZS5tb3Rpb25CbHVyLHQubW90aW9uQmx1ck9wYWNpdHk9ZS5tb3Rpb25CbHVyT3BhY2l0eSx0Lm1vdGlvbkJsdXJUcmFuc3BhcmVuY3k9MS10Lm1vdGlvbkJsdXJPcGFjaXR5LHQubW90aW9uQmx1clB4UmF0aW89MSx0Lm1iUHhSQmx1cnJ5PTEsdC5taW5NYkxvd1F1YWxGcmFtZXM9NCx0LmZ1bGxRdWFsaXR5TWI9ITEsdC5jbGVhcmVkRm9yTW90aW9uQmx1cj1bXSx0LmRlc2t0b3BUYXBUaHJlc2hvbGQ9ZS5kZXNrdG9wVGFwVGhyZXNob2xkLHQuZGVza3RvcFRhcFRocmVzaG9sZDI9ZS5kZXNrdG9wVGFwVGhyZXNob2xkKmUuZGVza3RvcFRhcFRocmVzaG9sZCx0LnRvdWNoVGFwVGhyZXNob2xkPWUudG91Y2hUYXBUaHJlc2hvbGQsdC50b3VjaFRhcFRocmVzaG9sZDI9ZS50b3VjaFRhcFRocmVzaG9sZCplLnRvdWNoVGFwVGhyZXNob2xkLHQudGFwaG9sZER1cmF0aW9uPTUwMCx0LmJpbmRpbmdzPVtdLHQuYmVmb3JlUmVuZGVyQ2FsbGJhY2tzPVtdLHQuYmVmb3JlUmVuZGVyUHJpb3JpdGllcz17YW5pbWF0aW9uczo0MDAsZWxlQ2FsY3M6MzAwLGVsZVR4ckRlcToyMDAsbHlyVHhyRGVxOjE1MCxseXJUeHJTa2lwOjEwMH0sdC5yZWdpc3Rlck5vZGVTaGFwZXMoKSx0LnJlZ2lzdGVyQXJyb3dTaGFwZXMoKSx0LnJlZ2lzdGVyQ2FsY3VsYXRpb25MaXN0ZW5lcnMoKX0sWXgubm90aWZ5PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY3k7dGhpcy5kZXN0cm95ZWR8fChlPT09YGluaXRgP24ubG9hZCgpOmU9PT1gZGVzdHJveWA/bi5kZXN0cm95KCk6KChlPT09YGFkZGB8fGU9PT1gcmVtb3ZlYHx8ZT09PWBtb3ZlYCYmci5oYXNDb21wb3VuZE5vZGVzKCl8fGU9PT1gbG9hZGB8fGU9PT1gem9yZGVyYHx8ZT09PWBtb3VudGApJiZuLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcygpLGU9PT1gdmlld3BvcnRgJiZuLnJlZHJhd0hpbnQoYHNlbGVjdGAsITApLGU9PT1gZ2NgJiZuLnJlZHJhd0hpbnQoYGdjYCwhMCksKGU9PT1gbG9hZGB8fGU9PT1gcmVzaXplYHx8ZT09PWBtb3VudGApJiYobi5pbnZhbGlkYXRlQ29udGFpbmVyQ2xpZW50Q29vcmRzQ2FjaGUoKSxuLm1hdGNoQ2FudmFzU2l6ZShuLmNvbnRhaW5lcikpLG4ucmVkcmF3SGludChgZWxlc2AsITApLG4ucmVkcmF3SGludChgZHJhZ2AsITApLHRoaXMuc3RhcnRSZW5kZXJMb29wKCksdGhpcy5yZWRyYXcoKSkpfSxZeC5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztlLmRlc3Ryb3llZD0hMCxlLmN5LnN0b3BBbmltYXRpb25Mb29wKCk7Zm9yKHZhciB0PTA7dDxlLmJpbmRpbmdzLmxlbmd0aDt0Kyspe3ZhciBuPWUuYmluZGluZ3NbdF0scj1uLnRhcmdldDsoci5vZmZ8fHIucmVtb3ZlRXZlbnRMaXN0ZW5lcikuYXBwbHkocixuLmFyZ3MpfWlmKGUuYmluZGluZ3M9W10sZS5iZWZvcmVSZW5kZXJDYWxsYmFja3M9W10sZS5vblVwZGF0ZUVsZUNhbGNzRm5zPVtdLGUucmVtb3ZlT2JzZXJ2ZXImJmUucmVtb3ZlT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLGUuc3R5bGVPYnNlcnZlciYmZS5zdHlsZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSxlLnJlc2l6ZU9ic2VydmVyJiZlLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSxlLmxhYmVsQ2FsY0Rpdil0cnl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlLmxhYmVsQ2FsY0Rpdil9Y2F0Y2h7fX0sWXguaXNIZWFkbGVzcz1mdW5jdGlvbigpe3JldHVybiExfSxbWGIsengsQngsV3gsR3gsS3hdLmZvckVhY2goZnVuY3Rpb24oZSl7YWwoWXgsZSl9KTt2YXIgWHg9MWUzLzYwLFp4PXtzZXR1cERlcXVldWVpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPXRoaXMucmVuZGVyZXI7aWYoIXQuZGVxdWV1ZWluZ1NldHVwKXt0LmRlcXVldWVpbmdTZXR1cD0hMDt2YXIgcj1pdShmdW5jdGlvbigpe24ucmVkcmF3SGludChgZWxlc2AsITApLG4ucmVkcmF3SGludChgZHJhZ2AsITApLG4ucmVkcmF3KCl9LGUuZGVxUmVkcmF3VGhyZXNob2xkKSxpPWZ1bmN0aW9uKGksYSl7dmFyIG89bHUoKSxzPW4uYXZlcmFnZVJlZHJhd1RpbWUsYz1uLmxhc3RSZWRyYXdUaW1lLGw9W10sdT1uLmN5LmV4dGVudCgpLGQ9bi5nZXRQaXhlbFJhdGlvKCk7Zm9yKGl8fG4uZmx1c2hSZW5kZXJlZFN0eWxlUXVldWUoKTs7KXt2YXIgZj1sdSgpLHA9Zi1vLG09Zi1hO2lmKGM8WHgpe3ZhciBoPVh4LShpP3M6MCk7aWYobT49ZS5kZXFGYXN0Q29zdCpoKWJyZWFrfWVsc2UgaWYoaSl7aWYocD49ZS5kZXFDb3N0KmN8fHA+PWUuZGVxQXZnQ29zdCpzKWJyZWFrfWVsc2UgaWYobT49ZS5kZXFOb0RyYXdDb3N0Klh4KWJyZWFrO3ZhciBnPWUuZGVxKHQsZCx1KTtpZihnLmxlbmd0aD4wKWZvcih2YXIgXz0wO188Zy5sZW5ndGg7XysrKWwucHVzaChnW19dKTtlbHNlIGJyZWFrfWwubGVuZ3RoPjAmJihlLm9uRGVxZCh0LGwpLCFpJiZlLnNob3VsZFJlZHJhdyh0LGwsZCx1KSYmcigpKX0sYT1lLnByaW9yaXR5fHxOdTtuLmJlZm9yZVJlbmRlcihpLGEodCkpfX19fSxReD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmp1O2FjKHRoaXMsZSksdGhpcy5pZHNCeUtleT1uZXcgWXUsdGhpcy5rZXlGb3JJZD1uZXcgWXUsdGhpcy5jYWNoZXNCeUx2bD1uZXcgWXUsdGhpcy5sdmxzPVtdLHRoaXMuZ2V0S2V5PXQsdGhpcy5kb2VzRWxlSW52YWxpZGF0ZUtleT1ufXJldHVybiBzYyhlLFt7a2V5OmBnZXRJZHNGb3JgLHZhbHVlOmZ1bmN0aW9uKGUpe2U/P1B1KGBDYW4gbm90IGdldCBpZCBsaXN0IGZvciBudWxsIGtleWApO3ZhciB0PXRoaXMuaWRzQnlLZXksbj10aGlzLmlkc0J5S2V5LmdldChlKTtyZXR1cm4gbnx8KG49bmV3IFF1LHQuc2V0KGUsbikpLG59fSx7a2V5OmBhZGRJZEZvcktleWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlIT1udWxsJiZ0aGlzLmdldElkc0ZvcihlKS5hZGQodCl9fSx7a2V5OmBkZWxldGVJZEZvcktleWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXtlIT1udWxsJiZ0aGlzLmdldElkc0ZvcihlKS5kZWxldGUodCl9fSx7a2V5OmBnZXROdW1iZXJPZklkc0ZvcktleWAsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/MDp0aGlzLmdldElkc0ZvcihlKS5zaXplfX0se2tleTpgdXBkYXRlS2V5TWFwcGluZ0ZvcmAsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pZCgpLG49dGhpcy5rZXlGb3JJZC5nZXQodCkscj10aGlzLmdldEtleShlKTt0aGlzLmRlbGV0ZUlkRm9yS2V5KG4sdCksdGhpcy5hZGRJZEZvcktleShyLHQpLHRoaXMua2V5Rm9ySWQuc2V0KHQscil9fSx7a2V5OmBkZWxldGVLZXlNYXBwaW5nRm9yYCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmlkKCksbj10aGlzLmtleUZvcklkLmdldCh0KTt0aGlzLmRlbGV0ZUlkRm9yS2V5KG4sdCksdGhpcy5rZXlGb3JJZC5kZWxldGUodCl9fSx7a2V5OmBrZXlIYXNDaGFuZ2VkRm9yYCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmlkKCk7cmV0dXJuIHRoaXMua2V5Rm9ySWQuZ2V0KHQpIT09dGhpcy5nZXRLZXkoZSl9fSx7a2V5OmBpc0ludmFsaWRgLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmtleUhhc0NoYW5nZWRGb3IoZSl8fHRoaXMuZG9lc0VsZUludmFsaWRhdGVLZXkoZSl9fSx7a2V5OmBnZXRDYWNoZXNBdGAsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jYWNoZXNCeUx2bCxuPXRoaXMubHZscyxyPXQuZ2V0KGUpO3JldHVybiByfHwocj1uZXcgWXUsdC5zZXQoZSxyKSxuLnB1c2goZSkpLHJ9fSx7a2V5OmBnZXRDYWNoZWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZXRDYWNoZXNBdCh0KS5nZXQoZSl9fSx7a2V5OmBnZXRgLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRLZXkoZSkscj10aGlzLmdldENhY2hlKG4sdCk7cmV0dXJuIHIhPW51bGwmJnRoaXMudXBkYXRlS2V5TWFwcGluZ0ZvcihlKSxyfX0se2tleTpgZ2V0Rm9yQ2FjaGVkS2V5YCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMua2V5Rm9ySWQuZ2V0KGUuaWQoKSk7cmV0dXJuIHRoaXMuZ2V0Q2FjaGUobix0KX19LHtrZXk6YGhhc0NhY2hlYCx2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdldENhY2hlc0F0KHQpLmhhcyhlKX19LHtrZXk6YGhhc2AsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldEtleShlKTtyZXR1cm4gdGhpcy5oYXNDYWNoZShuLHQpfX0se2tleTpgc2V0Q2FjaGVgLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtuLmtleT1lLHRoaXMuZ2V0Q2FjaGVzQXQodCkuc2V0KGUsbil9fSx7a2V5OmBzZXRgLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmdldEtleShlKTt0aGlzLnNldENhY2hlKHIsdCxuKSx0aGlzLnVwZGF0ZUtleU1hcHBpbmdGb3IoZSl9fSx7a2V5OmBkZWxldGVDYWNoZWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmdldENhY2hlc0F0KHQpLmRlbGV0ZShlKX19LHtrZXk6YGRlbGV0ZWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldEtleShlKTt0aGlzLmRlbGV0ZUNhY2hlKG4sdCl9fSx7a2V5OmBpbnZhbGlkYXRlS2V5YCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMubHZscy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiB0LmRlbGV0ZUNhY2hlKGUsbil9KX19LHtrZXk6YGludmFsaWRhdGVgLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQoKSxuPXRoaXMua2V5Rm9ySWQuZ2V0KHQpO3RoaXMuZGVsZXRlS2V5TWFwcGluZ0ZvcihlKTt2YXIgcj10aGlzLmRvZXNFbGVJbnZhbGlkYXRlS2V5KGUpO3JldHVybiByJiZ0aGlzLmludmFsaWRhdGVLZXkobikscnx8dGhpcy5nZXROdW1iZXJPZklkc0ZvcktleShuKT09PTB9fV0pfSgpLCR4PTI1LGVTPTUwLHRTPS00LG5TPTMsclM9Ny45OSxpUz04LGFTPTEwMjQsb1M9MTAyNCxzUz0xMDI0LGNTPS4yLGxTPS44LHVTPTEwLGRTPS4xNSxmUz0uMSxwUz0uOSxtUz0uOSxoUz0xMDAsZ1M9MSxfUz17ZGVxdWV1ZTpgZGVxdWV1ZWAsZG93bnNjYWxlOmBkb3duc2NhbGVgLGhpZ2hRdWFsaXR5OmBoaWdoUXVhbGl0eWB9LHZTPVV1KHtnZXRLZXk6bnVsbCxkb2VzRWxlSW52YWxpZGF0ZUtleTpqdSxkcmF3RWxlbWVudDpudWxsLGdldEJvdW5kaW5nQm94Om51bGwsZ2V0Um90YXRpb25Qb2ludDpudWxsLGdldFJvdGF0aW9uT2Zmc2V0Om51bGwsaXNWaXNpYmxlOkF1LGFsbG93RWRnZVR4ckNhY2hpbmc6ITAsYWxsb3dQYXJlbnRUeHJDYWNoaW5nOiEwfSkseVM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO24ucmVuZGVyZXI9ZSxuLm9uRGVxdWV1ZXM9W107dmFyIHI9dlModCk7YWwobixyKSxuLmxvb2t1cD1uZXcgUXgoci5nZXRLZXksci5kb2VzRWxlSW52YWxpZGF0ZUtleSksbi5zZXR1cERlcXVldWVpbmcoKX0sYlM9eVMucHJvdG90eXBlO2JTLnJlYXNvbnM9X1MsYlMuZ2V0VGV4dHVyZVF1ZXVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHQuZWxlSW1nQ2FjaGVzPXQuZWxlSW1nQ2FjaGVzfHx7fSx0LmVsZUltZ0NhY2hlc1tlXT10LmVsZUltZ0NhY2hlc1tlXXx8W119LGJTLmdldFJldGlyZWRUZXh0dXJlUXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuZWxlSW1nQ2FjaGVzLnJldGlyZWQ9dC5lbGVJbWdDYWNoZXMucmV0aXJlZHx8e307cmV0dXJuIG5bZV09bltlXXx8W119LGJTLmdldEVsZW1lbnRRdWV1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIGUuZWxlQ2FjaGVRdWV1ZT1lLmVsZUNhY2hlUXVldWV8fG5ldyBsZChmdW5jdGlvbihlLHQpe3JldHVybiB0LnJlcXMtZS5yZXFzfSl9LGJTLmdldEVsZW1lbnRLZXlUb1F1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gZS5lbGVLZXlUb0NhY2hlUXVldWU9ZS5lbGVLZXlUb0NhY2hlUXVldWV8fHt9fSxiUy5nZXRFbGVtZW50PWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGE9dGhpcyxvPXRoaXMucmVuZGVyZXIscz1vLmN5Lnpvb20oKSxjPXRoaXMubG9va3VwO2lmKCF0fHx0Lnc9PT0wfHx0Lmg9PT0wfHxpc05hTih0LncpfHxpc05hTih0LmgpfHwhZS52aXNpYmxlKCl8fGUucmVtb3ZlZCgpfHwhYS5hbGxvd0VkZ2VUeHJDYWNoaW5nJiZlLmlzRWRnZSgpfHwhYS5hbGxvd1BhcmVudFR4ckNhY2hpbmcmJmUuaXNQYXJlbnQoKSlyZXR1cm4gbnVsbDtpZihyPz89TWF0aC5jZWlsKEZkKHMqbikpLHI8dFMpcj10UztlbHNlIGlmKHM+PXJTfHxyPm5TKXJldHVybiBudWxsO3ZhciBsPTIqKnIsdT10LmgqbCxkPXQudypsLGY9by5lbGVUZXh0QmlnZ2VyVGhhbk1pbihlLGwpO2lmKCF0aGlzLmlzVmlzaWJsZShlLGYpKXJldHVybiBudWxsO3ZhciBwPWMuZ2V0KGUscik7aWYocCYmcC5pbnZhbGlkYXRlZCYmKHAuaW52YWxpZGF0ZWQ9ITEscC50ZXh0dXJlLmludmFsaWRhdGVkV2lkdGgtPXAud2lkdGgpLHApcmV0dXJuIHA7dmFyIG09dTw9JHg/JHg6dTw9ZVM/ZVM6TWF0aC5jZWlsKHUvZVMpKmVTO2lmKHU+c1N8fGQ+b1MpcmV0dXJuIG51bGw7dmFyIGg9YS5nZXRUZXh0dXJlUXVldWUobSksZz1oW2gubGVuZ3RoLTJdLF89ZnVuY3Rpb24oKXtyZXR1cm4gYS5yZWN5Y2xlVGV4dHVyZShtLGQpfHxhLmFkZFRleHR1cmUobSxkKX07Z3x8PWhbaC5sZW5ndGgtMV0sZ3x8PV8oKSxnLndpZHRoLWcudXNlZFdpZHRoPGQmJihnPV8oKSk7Zm9yKHZhciB2PWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLnNjYWxlZExhYmVsU2hvd249PT1mfSx5PWkmJmk9PT1fUy5kZXF1ZXVlLGI9aSYmaT09PV9TLmhpZ2hRdWFsaXR5LHg9aSYmaT09PV9TLmRvd25zY2FsZSxTLEM9cisxO0M8PW5TO0MrKyl7dmFyIHc9Yy5nZXQoZSxDKTtpZih3KXtTPXc7YnJlYWt9fXZhciBUPVMmJlMubGV2ZWw9PT1yKzE/UzpudWxsLEU9ZnVuY3Rpb24oKXtnLmNvbnRleHQuZHJhd0ltYWdlKFQudGV4dHVyZS5jYW52YXMsVC54LDAsVC53aWR0aCxULmhlaWdodCxnLnVzZWRXaWR0aCwwLGQsdSl9O2lmKGcuY29udGV4dC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGcuY29udGV4dC5jbGVhclJlY3QoZy51c2VkV2lkdGgsMCxkLG0pLHYoVCkpRSgpO2Vsc2UgaWYodihTKSl7aWYoYil7Zm9yKHZhciBEPVMubGV2ZWw7RD5yO0QtLSlUPWEuZ2V0RWxlbWVudChlLHQsbixELF9TLmRvd25zY2FsZSk7RSgpfWVsc2UgcmV0dXJuIGEucXVldWVFbGVtZW50KGUsUy5sZXZlbC0xKSxTfWVsc2V7dmFyIE87aWYoIXkmJiFiJiYheClmb3IodmFyIGs9ci0xO2s+PXRTO2stLSl7dmFyIEE9Yy5nZXQoZSxrKTtpZihBKXtPPUE7YnJlYWt9fWlmKHYoTykpcmV0dXJuIGEucXVldWVFbGVtZW50KGUsciksTztnLmNvbnRleHQudHJhbnNsYXRlKGcudXNlZFdpZHRoLDApLGcuY29udGV4dC5zY2FsZShsLGwpLHRoaXMuZHJhd0VsZW1lbnQoZy5jb250ZXh0LGUsdCxmLCExKSxnLmNvbnRleHQuc2NhbGUoMS9sLDEvbCksZy5jb250ZXh0LnRyYW5zbGF0ZSgtZy51c2VkV2lkdGgsMCl9cmV0dXJuIHA9e3g6Zy51c2VkV2lkdGgsdGV4dHVyZTpnLGxldmVsOnIsc2NhbGU6bCx3aWR0aDpkLGhlaWdodDp1LHNjYWxlZExhYmVsU2hvd246Zn0sZy51c2VkV2lkdGgrPU1hdGguY2VpbChkK2lTKSxnLmVsZUNhY2hlcy5wdXNoKHApLGMuc2V0KGUscixwKSxhLmNoZWNrVGV4dHVyZUZ1bGxuZXNzKGcpLHB9LGJTLmludmFsaWRhdGVFbGVtZW50cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLmludmFsaWRhdGVFbGVtZW50KGVbdF0pfSxiUy5pbnZhbGlkYXRlRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5sb29rdXAscj1bXTtpZihuLmlzSW52YWxpZChlKSl7Zm9yKHZhciBpPXRTO2k8PW5TO2krKyl7dmFyIGE9bi5nZXRGb3JDYWNoZWRLZXkoZSxpKTthJiZyLnB1c2goYSl9aWYobi5pbnZhbGlkYXRlKGUpKWZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgcz1yW29dLGM9cy50ZXh0dXJlO2MuaW52YWxpZGF0ZWRXaWR0aCs9cy53aWR0aCxzLmludmFsaWRhdGVkPSEwLHQuY2hlY2tUZXh0dXJlVXRpbGl0eShjKX10LnJlbW92ZUZyb21RdWV1ZShlKX19LGJTLmNoZWNrVGV4dHVyZVV0aWxpdHk9ZnVuY3Rpb24oZSl7ZS5pbnZhbGlkYXRlZFdpZHRoPj1jUyplLndpZHRoJiZ0aGlzLnJldGlyZVRleHR1cmUoZSl9LGJTLmNoZWNrVGV4dHVyZUZ1bGxuZXNzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0VGV4dHVyZVF1ZXVlKGUuaGVpZ2h0KTtlLnVzZWRXaWR0aC9lLndpZHRoPmxTJiZlLmZ1bGxuZXNzQ2hlY2tzPj11Uz9XdSh0LGUpOmUuZnVsbG5lc3NDaGVja3MrK30sYlMucmV0aXJlVGV4dHVyZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49ZS5oZWlnaHQscj10LmdldFRleHR1cmVRdWV1ZShuKSxpPXRoaXMubG9va3VwO1d1KHIsZSksZS5yZXRpcmVkPSEwO2Zvcih2YXIgYT1lLmVsZUNhY2hlcyxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aS5kZWxldGVDYWNoZShzLmtleSxzLmxldmVsKX1HdShhKSx0LmdldFJldGlyZWRUZXh0dXJlUXVldWUobikucHVzaChlKX0sYlMuYWRkVGV4dHVyZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmdldFRleHR1cmVRdWV1ZShlKSxpPXt9O3JldHVybiByLnB1c2goaSksaS5lbGVDYWNoZXM9W10saS5oZWlnaHQ9ZSxpLndpZHRoPU1hdGgubWF4KGFTLHQpLGkudXNlZFdpZHRoPTAsaS5pbnZhbGlkYXRlZFdpZHRoPTAsaS5mdWxsbmVzc0NoZWNrcz0wLGkuY2FudmFzPW4ucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhpLndpZHRoLGkuaGVpZ2h0KSxpLmNvbnRleHQ9aS5jYW52YXMuZ2V0Q29udGV4dChgMmRgKSxpfSxiUy5yZWN5Y2xlVGV4dHVyZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLHI9bi5nZXRUZXh0dXJlUXVldWUoZSksaT1uLmdldFJldGlyZWRUZXh0dXJlUXVldWUoZSksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO2lmKG8ud2lkdGg+PXQpcmV0dXJuIG8ucmV0aXJlZD0hMSxvLnVzZWRXaWR0aD0wLG8uaW52YWxpZGF0ZWRXaWR0aD0wLG8uZnVsbG5lc3NDaGVja3M9MCxHdShvLmVsZUNhY2hlcyksby5jb250ZXh0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksby5jb250ZXh0LmNsZWFyUmVjdCgwLDAsby53aWR0aCxvLmhlaWdodCksV3UoaSxvKSxyLnB1c2gobyksb319LGJTLnF1ZXVlRWxlbWVudD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj1uLmdldEVsZW1lbnRRdWV1ZSgpLGk9bi5nZXRFbGVtZW50S2V5VG9RdWV1ZSgpLGE9dGhpcy5nZXRLZXkoZSksbz1pW2FdO2lmKG8pby5sZXZlbD1NYXRoLm1heChvLmxldmVsLHQpLG8uZWxlcy5tZXJnZShlKSxvLnJlcXMrKyxyLnVwZGF0ZUl0ZW0obyk7ZWxzZXt2YXIgcz17ZWxlczplLnNwYXduKCkubWVyZ2UoZSksbGV2ZWw6dCxyZXFzOjEsa2V5OmF9O3IucHVzaChzKSxpW2FdPXN9fSxiUy5kZXF1ZXVlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLG49dC5nZXRFbGVtZW50UXVldWUoKSxyPXQuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxpPVtdLGE9dC5sb29rdXAsbz0wO288Z1MmJm4uc2l6ZSgpPjA7bysrKXt2YXIgcz1uLnBvcCgpLGM9cy5rZXksbD1zLmVsZXNbMF0sdT1hLmhhc0NhY2hlKGwscy5sZXZlbCk7aWYocltjXT1udWxsLCF1KXtpLnB1c2gocyk7dmFyIGQ9dC5nZXRCb3VuZGluZ0JveChsKTt0LmdldEVsZW1lbnQobCxkLGUscy5sZXZlbCxfUy5kZXF1ZXVlKX19cmV0dXJuIGl9LGJTLnJlbW92ZUZyb21RdWV1ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5nZXRFbGVtZW50UXVldWUoKSxyPXQuZ2V0RWxlbWVudEtleVRvUXVldWUoKSxpPXRoaXMuZ2V0S2V5KGUpLGE9cltpXTthIT1udWxsJiYoYS5lbGVzLmxlbmd0aD09PTE/KGEucmVxcz1rdSxuLnVwZGF0ZUl0ZW0oYSksbi5wb3AoKSxyW2ldPW51bGwpOmEuZWxlcy51bm1lcmdlKGUpKX0sYlMub25EZXF1ZXVlPWZ1bmN0aW9uKGUpe3RoaXMub25EZXF1ZXVlcy5wdXNoKGUpfSxiUy5vZmZEZXF1ZXVlPWZ1bmN0aW9uKGUpe1d1KHRoaXMub25EZXF1ZXVlcyxlKX0sYlMuc2V0dXBEZXF1ZXVlaW5nPVp4LnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOmhTLGRlcUNvc3Q6ZFMsZGVxQXZnQ29zdDpmUyxkZXFOb0RyYXdDb3N0OnBTLGRlcUZhc3RDb3N0Om1TLGRlcTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuZGVxdWV1ZSh0LG4pfSxvbkRlcWQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPGUub25EZXF1ZXVlcy5sZW5ndGg7bisrKXt2YXIgcj1lLm9uRGVxdWV1ZXNbbl07cih0KX19LHNob3VsZFJlZHJhdzpmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylmb3IodmFyIGE9dFtpXS5lbGVzLG89MDtvPGEubGVuZ3RoO28rKylpZihRZChhW29dLmJvdW5kaW5nQm94KCkscikpcmV0dXJuITA7cmV0dXJuITF9LHByaW9yaXR5OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlbmRlcmVyLmJlZm9yZVJlbmRlclByaW9yaXRpZXMuZWxlVHhyRGVxfX0pO3ZhciB4Uz0xLFNTPS00LENTPTIsd1M9My45OSxUUz01MCxFUz01MCxEUz0uMTUsT1M9LjEsa1M9LjksQVM9LjksalM9MSxNUz0yNTAsTlM9MTZlNixQUz0zMjc2NyxGUz0hMCxJUz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dC5yZW5kZXJlcj1lLHI9bi5jeTt0LmxheWVyc0J5TGV2ZWw9e30sdC5maXJzdEdldD0hMCx0Lmxhc3RJbnZhbGlkYXRpb25UaW1lPWx1KCktMipNUyx0LnNraXBwaW5nPSExLHQuZWxlVHhyRGVxcz1yLmNvbGxlY3Rpb24oKSx0LnNjaGVkdWxlRWxlbWVudFJlZmluZW1lbnQ9aXUoZnVuY3Rpb24oKXt0LnJlZmluZUVsZW1lbnRUZXh0dXJlcyh0LmVsZVR4ckRlcXMpLHQuZWxlVHhyRGVxcy51bm1lcmdlKHQuZWxlVHhyRGVxcyl9LEVTKSxuLmJlZm9yZVJlbmRlcihmdW5jdGlvbihlLG4pe3Quc2tpcHBpbmc9bi10Lmxhc3RJbnZhbGlkYXRpb25UaW1lPD1NU30sbi5iZWZvcmVSZW5kZXJQcmlvcml0aWVzLmx5clR4clNraXApLHQubGF5ZXJzUXVldWU9bmV3IGxkKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucmVxcy1lLnJlcXN9KSx0LnNldHVwRGVxdWV1ZWluZygpfSxMUz1JUy5wcm90b3R5cGUsUlM9MCx6Uz0yKio1My0xO0xTLm1ha2VMYXllcj1mdW5jdGlvbihlLHQpe3ZhciBuPTIqKnQscj1NYXRoLmNlaWwoZS53Km4pLGk9TWF0aC5jZWlsKGUuaCpuKSxhPXRoaXMucmVuZGVyZXIubWFrZU9mZnNjcmVlbkNhbnZhcyhyLGkpLG89e2lkOlJTPSsrUlMlelMsYmI6ZSxsZXZlbDp0LHdpZHRoOnIsaGVpZ2h0OmksY2FudmFzOmEsY29udGV4dDphLmdldENvbnRleHQoYDJkYCksZWxlczpbXSxlbGVzUXVldWU6W10scmVxczowfSxzPW8uY29udGV4dCxjPS1vLmJiLngxLGw9LW8uYmIueTE7cmV0dXJuIHMuc2NhbGUobixuKSxzLnRyYW5zbGF0ZShjLGwpLG99LExTLmdldExheWVycz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxpPXIucmVuZGVyZXIuY3kuem9vbSgpLGE9ci5maXJzdEdldDtpZihyLmZpcnN0R2V0PSExLG49PW51bGwpe2lmKG49TWF0aC5jZWlsKEZkKGkqdCkpLG48U1Mpbj1TUztlbHNlIGlmKGk+PXdTfHxuPkNTKXJldHVybiBudWxsfXIudmFsaWRhdGVMYXllcnNFbGVzT3JkZXJpbmcobixlKTt2YXIgbz1yLmxheWVyc0J5TGV2ZWwscz0yKipuLGM9b1tuXT1vW25dfHxbXSxsLHU9ci5sZXZlbElzQ29tcGxldGUobixlKSxkLGY9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0KXtpZihyLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nKHQsZSksci5sZXZlbElzQ29tcGxldGUodCxlKSlyZXR1cm4gZD1vW3RdLCEwfSxpPWZ1bmN0aW9uKGUpe2lmKCFkKWZvcih2YXIgcj1uK2U7U1M8PXImJnI8PUNTJiYhdChyKTtyKz1lKTt9O2koMSksaSgtMSk7Zm9yKHZhciBhPWMubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBzPWNbYV07cy5pbnZhbGlkJiZXdShjLHMpfX07aWYoIXUpZigpO2Vsc2UgcmV0dXJuIGM7dmFyIHA9ZnVuY3Rpb24oKXtpZighbCl7bD1XZCgpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXFkKGwsZVt0XS5ib3VuZGluZ0JveCgpKX1yZXR1cm4gbH0sbT1mdW5jdGlvbihlKXtlfHw9e307dmFyIHQ9ZS5hZnRlcjtwKCk7dmFyIGk9TWF0aC5jZWlsKGwudypzKSxhPU1hdGguY2VpbChsLmgqcyk7aWYoaT5QU3x8YT5QU3x8aSphPk5TKXJldHVybiBudWxsO3ZhciBvPXIubWFrZUxheWVyKGwsbik7aWYodCE9bnVsbCl7dmFyIHU9Yy5pbmRleE9mKHQpKzE7Yy5zcGxpY2UodSwwLG8pfWVsc2UoZS5pbnNlcnQ9PT12b2lkIDB8fGUuaW5zZXJ0KSYmYy51bnNoaWZ0KG8pO3JldHVybiBvfTtpZihyLnNraXBwaW5nJiYhYSlyZXR1cm4gbnVsbDtmb3IodmFyIGg9bnVsbCxnPWUubGVuZ3RoL3hTLF89IWEsdj0wO3Y8ZS5sZW5ndGg7disrKXt2YXIgeT1lW3ZdLGI9eS5fcHJpdmF0ZS5yc2NyYXRjaCx4PWIuaW1nTGF5ZXJDYWNoZXM9Yi5pbWdMYXllckNhY2hlc3x8e30sUz14W25dO2lmKFMpaD1TO2Vsc2V7aWYoKCFofHxoLmVsZXMubGVuZ3RoPj1nfHwhdGYoaC5iYix5LmJvdW5kaW5nQm94KCkpKSYmKGg9bSh7aW5zZXJ0OiEwLGFmdGVyOmh9KSwhaCkpcmV0dXJuIG51bGw7ZHx8Xz9yLnF1ZXVlTGF5ZXIoaCx5KTpyLmRyYXdFbGVJbkxheWVyKGgseSxuLHQpLGguZWxlcy5wdXNoKHkpLHhbbl09aH19cmV0dXJuIGR8fChfP251bGw6Yyl9LExTLmdldEVsZUxldmVsRm9yTGF5ZXJMZXZlbD1mdW5jdGlvbihlLHQpe3JldHVybiBlfSxMUy5kcmF3RWxlSW5MYXllcj1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLGE9dGhpcy5yZW5kZXJlcixvPWUuY29udGV4dCxzPXQuYm91bmRpbmdCb3goKTtzLnchPT0wJiZzLmghPT0wJiZ0LnZpc2libGUoKSYmKG49aS5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwobixyKSxhLnNldEltZ1Ntb290aGluZyhvLCExKSxhLmRyYXdDYWNoZWRFbGVtZW50KG8sdCxudWxsLG51bGwsbixGUyksYS5zZXRJbWdTbW9vdGhpbmcobywhMCkpfSxMUy5sZXZlbElzQ29tcGxldGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmxheWVyc0J5TGV2ZWxbZV07aWYoIW58fG4ubGVuZ3RoPT09MClyZXR1cm4hMTtmb3IodmFyIHI9MCxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5yZXFzPjB8fGEuaW52YWxpZClyZXR1cm4hMTtyKz1hLmVsZXMubGVuZ3RofXJldHVybiByPT09dC5sZW5ndGh9LExTLnZhbGlkYXRlTGF5ZXJzRWxlc09yZGVyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sYXllcnNCeUxldmVsW2VdO2lmKG4pZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspe2Zvcih2YXIgaT1uW3JdLGE9LTEsbz0wO288dC5sZW5ndGg7bysrKWlmKGkuZWxlc1swXT09PXRbb10pe2E9bzticmVha31pZihhPDApdGhpcy5pbnZhbGlkYXRlTGF5ZXIoaSk7ZWxzZSBmb3IodmFyIHM9YSxvPTA7bzxpLmVsZXMubGVuZ3RoO28rKylpZihpLmVsZXNbb10hPT10W3Mrb10pe3RoaXMuaW52YWxpZGF0ZUxheWVyKGkpO2JyZWFrfX19LExTLnVwZGF0ZUVsZW1lbnRzSW5MYXllcnM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcyxyPVBjKGVbMF0pLGk9MDtpPGUubGVuZ3RoO2krKylmb3IodmFyIGE9cj9udWxsOmVbaV0sbz1yP2VbaV06ZVtpXS5lbGUscz1vLl9wcml2YXRlLnJzY3JhdGNoLGM9cy5pbWdMYXllckNhY2hlcz1zLmltZ0xheWVyQ2FjaGVzfHx7fSxsPVNTO2w8PUNTO2wrKyl7dmFyIHU9Y1tsXTt1JiYoYSYmbi5nZXRFbGVMZXZlbEZvckxheWVyTGV2ZWwodS5sZXZlbCkhPT1hLmxldmVsfHx0KHUsbyxhKSl9fSxMUy5oYXZlTGF5ZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD0hMSxuPVNTO248PUNTO24rKyl7dmFyIHI9ZS5sYXllcnNCeUxldmVsW25dO2lmKHImJnIubGVuZ3RoPjApe3Q9ITA7YnJlYWt9fXJldHVybiB0fSxMUy5pbnZhbGlkYXRlRWxlbWVudHM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlLmxlbmd0aCE9PTAmJih0Lmxhc3RJbnZhbGlkYXRpb25UaW1lPWx1KCksZS5sZW5ndGghPT0wJiZ0LmhhdmVMYXllcnMoKSYmdC51cGRhdGVFbGVtZW50c0luTGF5ZXJzKGUsZnVuY3Rpb24oZSxuLHIpe3QuaW52YWxpZGF0ZUxheWVyKGUpfSkpfSxMUy5pbnZhbGlkYXRlTGF5ZXI9ZnVuY3Rpb24oZSl7aWYodGhpcy5sYXN0SW52YWxpZGF0aW9uVGltZT1sdSgpLCFlLmludmFsaWQpe3ZhciB0PWUubGV2ZWwsbj1lLmVsZXMscj10aGlzLmxheWVyc0J5TGV2ZWxbdF07V3UocixlKSxlLmVsZXNRdWV1ZT1bXSxlLmludmFsaWQ9ITAsZS5yZXBsYWNlbWVudCYmKGUucmVwbGFjZW1lbnQuaW52YWxpZD0hMCk7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV0uX3ByaXZhdGUucnNjcmF0Y2guaW1nTGF5ZXJDYWNoZXM7YSYmKGFbdF09bnVsbCl9fX0sTFMucmVmaW5lRWxlbWVudFRleHR1cmVzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC51cGRhdGVFbGVtZW50c0luTGF5ZXJzKGUsZnVuY3Rpb24oZSxuLHIpe3ZhciBpPWUucmVwbGFjZW1lbnQ7aWYoaXx8KGk9ZS5yZXBsYWNlbWVudD10Lm1ha2VMYXllcihlLmJiLGUubGV2ZWwpLGkucmVwbGFjZXM9ZSxpLmVsZXM9ZS5lbGVzKSwhaS5yZXFzKWZvcih2YXIgYT0wO2E8aS5lbGVzLmxlbmd0aDthKyspdC5xdWV1ZUxheWVyKGksaS5lbGVzW2FdKX0pfSxMUy5lbnF1ZXVlRWxlbWVudFJlZmluZW1lbnQ9ZnVuY3Rpb24oZSl7dGhpcy5lbGVUeHJEZXFzLm1lcmdlKGUpLHRoaXMuc2NoZWR1bGVFbGVtZW50UmVmaW5lbWVudCgpfSxMUy5xdWV1ZUxheWVyPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sYXllcnNRdWV1ZSxyPWUuZWxlc1F1ZXVlLGk9ci5oYXNJZD1yLmhhc0lkfHx7fTtpZighZS5yZXBsYWNlbWVudCl7aWYodCl7aWYoaVt0LmlkKCldKXJldHVybjtyLnB1c2godCksaVt0LmlkKCldPSEwfWUucmVxcz8oZS5yZXFzKyssbi51cGRhdGVJdGVtKGUpKTooZS5yZXFzPTEsbi5wdXNoKGUpKX19LExTLmRlcXVldWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMsbj10LmxheWVyc1F1ZXVlLHI9W10saT0wO2k8alMmJm4uc2l6ZSgpIT09MDspe3ZhciBhPW4ucGVlaygpO2lmKGEucmVwbGFjZW1lbnQpbi5wb3AoKTtlbHNlIGlmKGEucmVwbGFjZXMmJmEhPT1hLnJlcGxhY2VzLnJlcGxhY2VtZW50KW4ucG9wKCk7ZWxzZSBpZihhLmludmFsaWQpbi5wb3AoKTtlbHNle3ZhciBvPWEuZWxlc1F1ZXVlLnNoaWZ0KCk7byYmKHQuZHJhd0VsZUluTGF5ZXIoYSxvLGEubGV2ZWwsZSksaSsrKSxyLmxlbmd0aD09PTAmJnIucHVzaCghMCksYS5lbGVzUXVldWUubGVuZ3RoPT09MCYmKG4ucG9wKCksYS5yZXFzPTAsYS5yZXBsYWNlcyYmdC5hcHBseUxheWVyUmVwbGFjZW1lbnQoYSksdC5yZXF1ZXN0UmVkcmF3KCkpfX1yZXR1cm4gcn0sTFMuYXBwbHlMYXllclJlcGxhY2VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10LmxheWVyc0J5TGV2ZWxbZS5sZXZlbF0scj1lLnJlcGxhY2VzLGk9bi5pbmRleE9mKHIpO2lmKCEoaTwwfHxyLmludmFsaWQpKXtuW2ldPWU7Zm9yKHZhciBhPTA7YTxlLmVsZXMubGVuZ3RoO2ErKyl7dmFyIG89ZS5lbGVzW2FdLl9wcml2YXRlLHM9by5pbWdMYXllckNhY2hlcz1vLmltZ0xheWVyQ2FjaGVzfHx7fTtzJiYoc1tlLmxldmVsXT1lKX10LnJlcXVlc3RSZWRyYXcoKX19LExTLnJlcXVlc3RSZWRyYXc9aXUoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlbmRlcmVyO2UucmVkcmF3SGludChgZWxlc2AsITApLGUucmVkcmF3SGludChgZHJhZ2AsITApLGUucmVkcmF3KCl9LDEwMCksTFMuc2V0dXBEZXF1ZXVlaW5nPVp4LnNldHVwRGVxdWV1ZWluZyh7ZGVxUmVkcmF3VGhyZXNob2xkOlRTLGRlcUNvc3Q6RFMsZGVxQXZnQ29zdDpPUyxkZXFOb0RyYXdDb3N0OmtTLGRlcUZhc3RDb3N0OkFTLGRlcTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmRlcXVldWUodCl9LG9uRGVxZDpOdSxzaG91bGRSZWRyYXc6QXUscHJpb3JpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVuZGVyZXIuYmVmb3JlUmVuZGVyUHJpb3JpdGllcy5seXJUeHJEZXF9fSk7dmFyIEJTPXt9LFZTO2Z1bmN0aW9uIEhTKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ZS5saW5lVG8oci54LHIueSl9fWZ1bmN0aW9uIFVTKGUsdCxuKXtmb3IodmFyIHIsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO2k9PT0wJiYocj1hKSxlLmxpbmVUbyhhLngsYS55KX1lLnF1YWRyYXRpY0N1cnZlVG8obi54LG4ueSxyLngsci55KX1mdW5jdGlvbiBXUyhlLHQsbil7ZS5iZWdpblBhdGgmJmUuYmVnaW5QYXRoKCk7Zm9yKHZhciByPXQsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2UubGluZVRvKGEueCxhLnkpfXZhciBvPW4scz1uWzBdO2UubW92ZVRvKHMueCxzLnkpO2Zvcih2YXIgaT0xO2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldO2UubGluZVRvKGEueCxhLnkpfWUuY2xvc2VQYXRoJiZlLmNsb3NlUGF0aCgpfWZ1bmN0aW9uIEdTKGUsdCxuLHIsaSl7ZS5iZWdpblBhdGgmJmUuYmVnaW5QYXRoKCksZS5hcmMobixyLGksMCxNYXRoLlBJKjIsITEpO3ZhciBhPXQsbz1hWzBdO2UubW92ZVRvKG8ueCxvLnkpO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgYz1hW3NdO2UubGluZVRvKGMueCxjLnkpfWUuY2xvc2VQYXRoJiZlLmNsb3NlUGF0aCgpfWZ1bmN0aW9uIEtTKGUsdCxuLHIpe2UuYXJjKHQsbixyLDAsTWF0aC5QSSoyLCExKX1CUy5hcnJvd1NoYXBlSW1wbD1mdW5jdGlvbihlKXtyZXR1cm4oVlN8fD17cG9seWdvbjpIUywidHJpYW5nbGUtYmFja2N1cnZlIjpVUywidHJpYW5nbGUtdGVlIjpXUywiY2lyY2xlLXRyaWFuZ2xlIjpHUywidHJpYW5nbGUtY3Jvc3MiOldTLGNpcmNsZTpLU30pW2VdfTt2YXIgcVM9e307cVMuZHJhd0VsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4scixpLGEpe3ZhciBvPXRoaXM7dC5pc05vZGUoKT9vLmRyYXdOb2RlKGUsdCxuLHIsaSxhKTpvLmRyYXdFZGdlKGUsdCxuLHIsaSxhKX0scVMuZHJhd0VsZW1lbnRPdmVybGF5PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0LmlzTm9kZSgpP24uZHJhd05vZGVPdmVybGF5KGUsdCk6bi5kcmF3RWRnZU92ZXJsYXkoZSx0KX0scVMuZHJhd0VsZW1lbnRVbmRlcmxheT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dC5pc05vZGUoKT9uLmRyYXdOb2RlVW5kZXJsYXkoZSx0KTpuLmRyYXdFZGdlVW5kZXJsYXkoZSx0KX0scVMuZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uPWZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyl7dmFyIGM9dGhpcyxsPW4uZ2V0Qm91bmRpbmdCb3godCk7aWYobC53IT09MCYmbC5oIT09MCl7dmFyIHU9bi5nZXRFbGVtZW50KHQsbCxyLGksYSk7aWYodSE9bnVsbCl7dmFyIGQ9cyhjLHQpO2lmKGQ9PT0wKXJldHVybjt2YXIgZj1vKGMsdCkscD1sLngxLG09bC55MSxoPWwudyxnPWwuaCxfLHYseSxiLHg7aWYoZiE9PTApe3ZhciBTPW4uZ2V0Um90YXRpb25Qb2ludCh0KTt5PVMueCxiPVMueSxlLnRyYW5zbGF0ZSh5LGIpLGUucm90YXRlKGYpLHg9Yy5nZXRJbWdTbW9vdGhpbmcoZSkseHx8Yy5zZXRJbWdTbW9vdGhpbmcoZSwhMCk7dmFyIEM9bi5nZXRSb3RhdGlvbk9mZnNldCh0KTtfPUMueCx2PUMueX1lbHNlIF89cCx2PW07dmFyIHc7ZCE9PTEmJih3PWUuZ2xvYmFsQWxwaGEsZS5nbG9iYWxBbHBoYT13KmQpLGUuZHJhd0ltYWdlKHUudGV4dHVyZS5jYW52YXMsdS54LDAsdS53aWR0aCx1LmhlaWdodCxfLHYsaCxnKSxkIT09MSYmKGUuZ2xvYmFsQWxwaGE9dyksZiE9PTAmJihlLnJvdGF0ZSgtZiksZS50cmFuc2xhdGUoLXksLWIpLHh8fGMuc2V0SW1nU21vb3RoaW5nKGUsITEpKX1lbHNlIG4uZHJhd0VsZW1lbnQoZSx0KX19O3ZhciBKUz1mdW5jdGlvbigpe3JldHVybiAwfSxZUz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmdldFRleHRBbmdsZSh0LG51bGwpfSxYUz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmdldFRleHRBbmdsZSh0LGBzb3VyY2VgKX0sWlM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5nZXRUZXh0QW5nbGUodCxgdGFyZ2V0YCl9LFFTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZWZmZWN0aXZlT3BhY2l0eSgpfSwkUz1mdW5jdGlvbihlLHQpe3JldHVybiB0LnBzdHlsZShgdGV4dC1vcGFjaXR5YCkucGZWYWx1ZSp0LmVmZmVjdGl2ZU9wYWNpdHkoKX07cVMuZHJhd0NhY2hlZEVsZW1lbnQ9ZnVuY3Rpb24oZSx0LG4scixpLGEpe3ZhciBvPXRoaXMscz1vLmRhdGEsYz1zLmVsZVR4ckNhY2hlLGw9cy5sYmxUeHJDYWNoZSx1PXMuc2xiVHhyQ2FjaGUsZD1zLnRsYlR4ckNhY2hlLGY9dC5ib3VuZGluZ0JveCgpLHA9YT09PSEwP2MucmVhc29ucy5oaWdoUXVhbGl0eTpudWxsO2lmKGYudyE9PTAmJmYuaCE9PTAmJnQudmlzaWJsZSgpJiYoIXJ8fFFkKGYscikpKXt2YXIgbT10LmlzRWRnZSgpLGg9dC5lbGVtZW50KCkuX3ByaXZhdGUucnNjcmF0Y2guYmFkTGluZTtvLmRyYXdFbGVtZW50VW5kZXJsYXkoZSx0KSxvLmRyYXdDYWNoZWRFbGVtZW50UG9ydGlvbihlLHQsYyxuLGkscCxKUyxRUyksbSYmaHx8by5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oZSx0LGwsbixpLHAsWVMsJFMpLG0mJiFoJiYoby5kcmF3Q2FjaGVkRWxlbWVudFBvcnRpb24oZSx0LHUsbixpLHAsWFMsJFMpLG8uZHJhd0NhY2hlZEVsZW1lbnRQb3J0aW9uKGUsdCxkLG4saSxwLFpTLCRTKSksby5kcmF3RWxlbWVudE92ZXJsYXkoZSx0KX19LHFTLmRyYXdFbGVtZW50cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtuLmRyYXdFbGVtZW50KGUsaSl9fSxxUy5kcmF3Q2FjaGVkRWxlbWVudHM9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPXRoaXMsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO2kuZHJhd0NhY2hlZEVsZW1lbnQoZSxvLG4scil9fSxxUy5kcmF3Q2FjaGVkTm9kZXM9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPXRoaXMsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz10W2FdO28uaXNOb2RlKCkmJmkuZHJhd0NhY2hlZEVsZW1lbnQoZSxvLG4scil9fSxxUy5kcmF3TGF5ZXJlZEVsZW1lbnRzPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMsYT1pLmRhdGEubHlyVHhyQ2FjaGUuZ2V0TGF5ZXJzKHQsbik7aWYoYSlmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxjPXMuYmI7Yy53IT09MCYmYy5oIT09MCYmZS5kcmF3SW1hZ2Uocy5jYW52YXMsYy54MSxjLnkxLGMudyxjLmgpfWVsc2UgaS5kcmF3Q2FjaGVkRWxlbWVudHMoZSx0LG4scil9O3ZhciBlQz17fTtlQy5kcmF3RWRnZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLG89dGhpcyxzPXQuX3ByaXZhdGUucnNjcmF0Y2g7aWYoKCFhfHx0LnZpc2libGUoKSkmJiEocy5iYWRMaW5lfHxzLmFsbHB0cz09bnVsbHx8aXNOYU4ocy5hbGxwdHNbMF0pKSl7dmFyIGM7biYmKGM9bixlLnRyYW5zbGF0ZSgtYy54MSwtYy55MSkpO3ZhciBsPWE/dC5wc3R5bGUoYG9wYWNpdHlgKS52YWx1ZToxLHU9YT90LnBzdHlsZShgbGluZS1vcGFjaXR5YCkudmFsdWU6MSxkPXQucHN0eWxlKGBjdXJ2ZS1zdHlsZWApLnZhbHVlLGY9dC5wc3R5bGUoYGxpbmUtc3R5bGVgKS52YWx1ZSxwPXQucHN0eWxlKGB3aWR0aGApLnBmVmFsdWUsbT10LnBzdHlsZShgbGluZS1jYXBgKS52YWx1ZSxoPXQucHN0eWxlKGBsaW5lLW91dGxpbmUtd2lkdGhgKS52YWx1ZSxnPXQucHN0eWxlKGBsaW5lLW91dGxpbmUtY29sb3JgKS52YWx1ZSxfPWwqdSx2PWwqdSx5PWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOl87ZD09PWBzdHJhaWdodC10cmlhbmdsZWA/KG8uZWxlU3Ryb2tlU3R5bGUoZSx0LG4pLG8uZHJhd0VkZ2VUcmlhbmdsZVBhdGgodCxlLHMuYWxscHRzKSk6KGUubGluZVdpZHRoPXAsZS5saW5lQ2FwPW0sby5lbGVTdHJva2VTdHlsZShlLHQsbiksby5kcmF3RWRnZVBhdGgodCxlLHMuYWxscHRzLGYpLGUubGluZUNhcD1gYnV0dGApfSxiPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOl87aWYoZS5saW5lV2lkdGg9cCtoLGUubGluZUNhcD1tLGg+MClvLmNvbG9yU3Ryb2tlU3R5bGUoZSxnWzBdLGdbMV0sZ1syXSxuKTtlbHNle2UubGluZUNhcD1gYnV0dGA7cmV0dXJufWQ9PT1gc3RyYWlnaHQtdHJpYW5nbGVgP28uZHJhd0VkZ2VUcmlhbmdsZVBhdGgodCxlLHMuYWxscHRzKTooby5kcmF3RWRnZVBhdGgodCxlLHMuYWxscHRzLGYpLGUubGluZUNhcD1gYnV0dGApfSx4PWZ1bmN0aW9uKCl7aSYmby5kcmF3RWRnZU92ZXJsYXkoZSx0KX0sUz1mdW5jdGlvbigpe2kmJm8uZHJhd0VkZ2VVbmRlcmxheShlLHQpfSxDPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOnY7by5kcmF3QXJyb3doZWFkcyhlLHQsbil9LHc9ZnVuY3Rpb24oKXtvLmRyYXdFbGVtZW50VGV4dChlLHQsbnVsbCxyKX07aWYoZS5saW5lSm9pbj1gcm91bmRgLHQucHN0eWxlKGBnaG9zdGApLnZhbHVlPT09YHllc2Ape3ZhciBUPXQucHN0eWxlKGBnaG9zdC1vZmZzZXQteGApLnBmVmFsdWUsRT10LnBzdHlsZShgZ2hvc3Qtb2Zmc2V0LXlgKS5wZlZhbHVlLEQ9Xyp0LnBzdHlsZShgZ2hvc3Qtb3BhY2l0eWApLnZhbHVlO2UudHJhbnNsYXRlKFQsRSkseShEKSxDKEQpLGUudHJhbnNsYXRlKC1ULC1FKX1lbHNlIGIoKTtTKCkseSgpLEMoKSx4KCksdygpLG4mJmUudHJhbnNsYXRlKGMueDEsYy55MSl9fTt2YXIgdEM9ZnVuY3Rpb24oZSl7aWYoIVtgb3ZlcmxheWAsYHVuZGVybGF5YF0uaW5jbHVkZXMoZSkpdGhyb3cgRXJyb3IoYEludmFsaWQgc3RhdGVgKTtyZXR1cm4gZnVuY3Rpb24odCxuKXtpZihuLnZpc2libGUoKSl7dmFyIHI9bi5wc3R5bGUoYCR7ZX0tb3BhY2l0eWApLnZhbHVlO2lmKHIhPT0wKXt2YXIgaT10aGlzLGE9aS51c2VQYXRocygpLG89bi5fcHJpdmF0ZS5yc2NyYXRjaCxzPTIqbi5wc3R5bGUoYCR7ZX0tcGFkZGluZ2ApLnBmVmFsdWUsYz1uLnBzdHlsZShgJHtlfS1jb2xvcmApLnZhbHVlO3QubGluZVdpZHRoPXMsdC5saW5lQ2FwPW8uZWRnZVR5cGU9PT1gc2VsZmAmJiFhP2BidXR0YDpgcm91bmRgLGkuY29sb3JTdHJva2VTdHlsZSh0LGNbMF0sY1sxXSxjWzJdLHIpLGkuZHJhd0VkZ2VQYXRoKG4sdCxvLmFsbHB0cyxgc29saWRgKX19fX07ZUMuZHJhd0VkZ2VPdmVybGF5PXRDKGBvdmVybGF5YCksZUMuZHJhd0VkZ2VVbmRlcmxheT10QyhgdW5kZXJsYXlgKSxlQy5kcmF3RWRnZVBhdGg9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS5fcHJpdmF0ZS5yc2NyYXRjaCxhPXQsbyxzPSExLGM9dGhpcy51c2VQYXRocygpLGw9ZS5wc3R5bGUoYGxpbmUtZGFzaC1wYXR0ZXJuYCkucGZWYWx1ZSx1PWUucHN0eWxlKGBsaW5lLWRhc2gtb2Zmc2V0YCkucGZWYWx1ZTtpZihjKXt2YXIgZD1uLmpvaW4oYCRgKTtpLnBhdGhDYWNoZUtleSYmaS5wYXRoQ2FjaGVLZXk9PT1kPyhvPXQ9aS5wYXRoQ2FjaGUscz0hMCk6KG89dD1uZXcgUGF0aDJELGkucGF0aENhY2hlS2V5PWQsaS5wYXRoQ2FjaGU9byl9aWYoYS5zZXRMaW5lRGFzaClzd2l0Y2gocil7Y2FzZWBkb3R0ZWRgOmEuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2VgZGFzaGVkYDphLnNldExpbmVEYXNoKGwpLGEubGluZURhc2hPZmZzZXQ9dTticmVhaztjYXNlYHNvbGlkYDphLnNldExpbmVEYXNoKFtdKX1pZighcyYmIWkuYmFkTGluZSlzd2l0Y2godC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdC5tb3ZlVG8oblswXSxuWzFdKSxpLmVkZ2VUeXBlKXtjYXNlYGJlemllcmA6Y2FzZWBzZWxmYDpjYXNlYGNvbXBvdW5kYDpjYXNlYG11bHRpYmV6aWVyYDpmb3IodmFyIGY9MjtmKzM8bi5sZW5ndGg7Zis9NCl0LnF1YWRyYXRpY0N1cnZlVG8obltmXSxuW2YrMV0sbltmKzJdLG5bZiszXSk7YnJlYWs7Y2FzZWBzdHJhaWdodGA6Y2FzZWBoYXlzdGFja2A6Zm9yKHZhciBwPTI7cCsxPG4ubGVuZ3RoO3ArPTIpdC5saW5lVG8obltwXSxuW3ArMV0pO2JyZWFrO2Nhc2Vgc2VnbWVudHNgOmlmKGkuaXNSb3VuZCl7dmFyIG09Y2MoaS5yb3VuZENvcm5lcnMpLGg7dHJ5e2ZvcihtLnMoKTshKGg9bS5uKCkpLmRvbmU7KXt2YXIgZz1oLnZhbHVlO3h4KHQsZyl9fWNhdGNoKGUpe20uZShlKX1maW5hbGx5e20uZigpfXQubGluZVRvKG5bbi5sZW5ndGgtMl0sbltuLmxlbmd0aC0xXSl9ZWxzZSBmb3IodmFyIF89MjtfKzE8bi5sZW5ndGg7Xys9Mil0LmxpbmVUbyhuW19dLG5bXysxXSl9dD1hLGM/dC5zdHJva2Uobyk6dC5zdHJva2UoKSx0LnNldExpbmVEYXNoJiZ0LnNldExpbmVEYXNoKFtdKX0sZUMuZHJhd0VkZ2VUcmlhbmdsZVBhdGg9ZnVuY3Rpb24oZSx0LG4pe3QuZmlsbFN0eWxlPXQuc3Ryb2tlU3R5bGU7Zm9yKHZhciByPWUucHN0eWxlKGB3aWR0aGApLnBmVmFsdWUsaT0wO2krMTxuLmxlbmd0aDtpKz0yKXt2YXIgYT1bbltpKzJdLW5baV0sbltpKzNdLW5baSsxXV0sbz1NYXRoLnNxcnQoYVswXSphWzBdK2FbMV0qYVsxXSkscz1bYVsxXS9vLC1hWzBdL29dLGM9W3NbMF0qci8yLHNbMV0qci8yXTt0LmJlZ2luUGF0aCgpLHQubW92ZVRvKG5baV0tY1swXSxuW2krMV0tY1sxXSksdC5saW5lVG8obltpXStjWzBdLG5baSsxXStjWzFdKSx0LmxpbmVUbyhuW2krMl0sbltpKzNdKSx0LmNsb3NlUGF0aCgpLHQuZmlsbCgpfX0sZUMuZHJhd0Fycm93aGVhZHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQuX3ByaXZhdGUucnNjcmF0Y2gsaT1yLmVkZ2VUeXBlPT09YGhheXN0YWNrYDtpfHx0aGlzLmRyYXdBcnJvd2hlYWQoZSx0LGBzb3VyY2VgLHIuYXJyb3dTdGFydFgsci5hcnJvd1N0YXJ0WSxyLnNyY0Fycm93QW5nbGUsbiksdGhpcy5kcmF3QXJyb3doZWFkKGUsdCxgbWlkLXRhcmdldGAsci5taWRYLHIubWlkWSxyLm1pZHRndEFycm93QW5nbGUsbiksdGhpcy5kcmF3QXJyb3doZWFkKGUsdCxgbWlkLXNvdXJjZWAsci5taWRYLHIubWlkWSxyLm1pZHNyY0Fycm93QW5nbGUsbiksaXx8dGhpcy5kcmF3QXJyb3doZWFkKGUsdCxgdGFyZ2V0YCxyLmFycm93RW5kWCxyLmFycm93RW5kWSxyLnRndEFycm93QW5nbGUsbil9LGVDLmRyYXdBcnJvd2hlYWQ9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyl7aWYoIShpc05hTihyKXx8cj09bnVsbHx8aXNOYU4oaSl8fGk9PW51bGx8fGlzTmFOKGEpfHxhPT1udWxsKSl7dmFyIHM9dGhpcyxjPXQucHN0eWxlKG4rYC1hcnJvdy1zaGFwZWApLnZhbHVlO2lmKGMhPT1gbm9uZWApe3ZhciBsPXQucHN0eWxlKG4rYC1hcnJvdy1maWxsYCkudmFsdWU9PT1gaG9sbG93YD9gYm90aGA6YGZpbGxlZGAsdT10LnBzdHlsZShuK2AtYXJyb3ctZmlsbGApLnZhbHVlLGQ9dC5wc3R5bGUoYHdpZHRoYCkucGZWYWx1ZSxmPXQucHN0eWxlKG4rYC1hcnJvdy13aWR0aGApLHA9Zi52YWx1ZT09PWBtYXRjaC1saW5lYD9kOmYucGZWYWx1ZTtmLnVuaXRzPT09YCVgJiYocCo9ZCk7dmFyIG09dC5wc3R5bGUoYG9wYWNpdHlgKS52YWx1ZTtvPT09dm9pZCAwJiYobz1tKTt2YXIgaD1lLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjsobyE9PTF8fHU9PT1gaG9sbG93YCkmJihlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1gZGVzdGluYXRpb24tb3V0YCxzLmNvbG9yRmlsbFN0eWxlKGUsMjU1LDI1NSwyNTUsMSkscy5jb2xvclN0cm9rZVN0eWxlKGUsMjU1LDI1NSwyNTUsMSkscy5kcmF3QXJyb3dTaGFwZSh0LGUsbCxkLGMscCxyLGksYSksZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249aCk7dmFyIGc9dC5wc3R5bGUobitgLWFycm93LWNvbG9yYCkudmFsdWU7cy5jb2xvckZpbGxTdHlsZShlLGdbMF0sZ1sxXSxnWzJdLG8pLHMuY29sb3JTdHJva2VTdHlsZShlLGdbMF0sZ1sxXSxnWzJdLG8pLHMuZHJhd0Fycm93U2hhcGUodCxlLHUsZCxjLHAscixpLGEpfX19LGVDLmRyYXdBcnJvd1NoYXBlPWZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyxjKXt2YXIgbD10aGlzLHU9dGhpcy51c2VQYXRocygpJiZpIT09YHRyaWFuZ2xlLWNyb3NzYCxkPSExLGYscD10LG09e3g6byx5OnN9LGg9ZS5wc3R5bGUoYGFycm93LXNjYWxlYCkudmFsdWUsZz10aGlzLmdldEFycm93V2lkdGgocixoKSxfPWwuYXJyb3dTaGFwZXNbaV07aWYodSl7dmFyIHY9bC5hcnJvd1BhdGhDYWNoZT1sLmFycm93UGF0aENhY2hlfHxbXSx5PWJ1KGkpLGI9dlt5XTtiPT1udWxsPyhmPXQ9bmV3IFBhdGgyRCx2W3ldPWYpOihmPXQ9YixkPSEwKX1kfHwodC5iZWdpblBhdGgmJnQuYmVnaW5QYXRoKCksdT9fLmRyYXcodCwxLDAse3g6MCx5OjB9LDEpOl8uZHJhdyh0LGcsYyxtLHIpLHQuY2xvc2VQYXRoJiZ0LmNsb3NlUGF0aCgpKSx0PXAsdSYmKHQudHJhbnNsYXRlKG8scyksdC5yb3RhdGUoYyksdC5zY2FsZShnLGcpKSwobj09PWBmaWxsZWRgfHxuPT09YGJvdGhgKSYmKHU/dC5maWxsKGYpOnQuZmlsbCgpKSwobj09PWBob2xsb3dgfHxuPT09YGJvdGhgKSYmKHQubGluZVdpZHRoPWEvKHU/ZzoxKSx0LmxpbmVKb2luPWBtaXRlcmAsdT90LnN0cm9rZShmKTp0LnN0cm9rZSgpKSx1JiYodC5zY2FsZSgxL2csMS9nKSx0LnJvdGF0ZSgtYyksdC50cmFuc2xhdGUoLW8sLXMpKX07dmFyIG5DPXt9O25DLnNhZmVEcmF3SW1hZ2U9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyxzLGMsbCl7aWYoIShpPD0wfHxhPD0wfHxjPD0wfHxsPD0wKSl0cnl7ZS5kcmF3SW1hZ2UodCxuLHIsaSxhLG8scyxjLGwpfWNhdGNoKGUpe0l1KGUpfX0sbkMuZHJhd0luc2NyaWJlZEltYWdlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGE9dGhpcyxvPW4ucG9zaXRpb24oKSxzPW8ueCxjPW8ueSxsPW4uY3koKS5zdHlsZSgpLHU9bC5nZXRJbmRleGVkU3R5bGUuYmluZChsKSxkPXUobixgYmFja2dyb3VuZC1maXRgLGB2YWx1ZWAsciksZj11KG4sYGJhY2tncm91bmQtcmVwZWF0YCxgdmFsdWVgLHIpLHA9bi53aWR0aCgpLG09bi5oZWlnaHQoKSxoPW4ucGFkZGluZygpKjIsZz1wKyh1KG4sYGJhY2tncm91bmQtd2lkdGgtcmVsYXRpdmUtdG9gLGB2YWx1ZWAscik9PT1gaW5uZXJgPzA6aCksXz1tKyh1KG4sYGJhY2tncm91bmQtaGVpZ2h0LXJlbGF0aXZlLXRvYCxgdmFsdWVgLHIpPT09YGlubmVyYD8wOmgpLHY9bi5fcHJpdmF0ZS5yc2NyYXRjaCx5PXUobixgYmFja2dyb3VuZC1jbGlwYCxgdmFsdWVgLHIpPT09YG5vZGVgLGI9dShuLGBiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHlgLGB2YWx1ZWAscikqaSx4PXUobixgYmFja2dyb3VuZC1pbWFnZS1zbW9vdGhpbmdgLGB2YWx1ZWAsciksUz1uLnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnZhbHVlO1MhPT1gYXV0b2AmJihTPW4ucHN0eWxlKGBjb3JuZXItcmFkaXVzYCkucGZWYWx1ZSk7dmFyIEM9dC53aWR0aHx8dC5jYWNoZWRXLHc9dC5oZWlnaHR8fHQuY2FjaGVkSDsoQz09bnVsbHx8dz09bnVsbCkmJihkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLEM9dC5jYWNoZWRXPXQud2lkdGh8fHQub2Zmc2V0V2lkdGgsdz10LmNhY2hlZEg9dC5oZWlnaHR8fHQub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkpO3ZhciBUPUMsRT13O2lmKHUobixgYmFja2dyb3VuZC13aWR0aGAsYHZhbHVlYCxyKSE9PWBhdXRvYCYmKFQ9dShuLGBiYWNrZ3JvdW5kLXdpZHRoYCxgdW5pdHNgLHIpPT09YCVgP3UobixgYmFja2dyb3VuZC13aWR0aGAsYHBmVmFsdWVgLHIpKmc6dShuLGBiYWNrZ3JvdW5kLXdpZHRoYCxgcGZWYWx1ZWAscikpLHUobixgYmFja2dyb3VuZC1oZWlnaHRgLGB2YWx1ZWAscikhPT1gYXV0b2AmJihFPXUobixgYmFja2dyb3VuZC1oZWlnaHRgLGB1bml0c2Ascik9PT1gJWA/dShuLGBiYWNrZ3JvdW5kLWhlaWdodGAsYHBmVmFsdWVgLHIpKl86dShuLGBiYWNrZ3JvdW5kLWhlaWdodGAsYHBmVmFsdWVgLHIpKSxUIT09MCYmRSE9PTApe2lmKGQ9PT1gY29udGFpbmApe3ZhciBEPU1hdGgubWluKGcvVCxfL0UpO1QqPUQsRSo9RH1lbHNlIGlmKGQ9PT1gY292ZXJgKXt2YXIgRD1NYXRoLm1heChnL1QsXy9FKTtUKj1ELEUqPUR9dmFyIE89cy1nLzIsaz11KG4sYGJhY2tncm91bmQtcG9zaXRpb24teGAsYHVuaXRzYCxyKSxBPXUobixgYmFja2dyb3VuZC1wb3NpdGlvbi14YCxgcGZWYWx1ZWAscik7Tys9az09PWAlYD8oZy1UKSpBOkE7dmFyIGo9dShuLGBiYWNrZ3JvdW5kLW9mZnNldC14YCxgdW5pdHNgLHIpLE09dShuLGBiYWNrZ3JvdW5kLW9mZnNldC14YCxgcGZWYWx1ZWAscik7Tys9aj09PWAlYD8oZy1UKSpNOk07dmFyIE49Yy1fLzIsUD11KG4sYGJhY2tncm91bmQtcG9zaXRpb24teWAsYHVuaXRzYCxyKSxGPXUobixgYmFja2dyb3VuZC1wb3NpdGlvbi15YCxgcGZWYWx1ZWAscik7Tis9UD09PWAlYD8oXy1FKSpGOkY7dmFyIEk9dShuLGBiYWNrZ3JvdW5kLW9mZnNldC15YCxgdW5pdHNgLHIpLEw9dShuLGBiYWNrZ3JvdW5kLW9mZnNldC15YCxgcGZWYWx1ZWAscik7Tis9ST09PWAlYD8oXy1FKSpMOkwsdi5wYXRoQ2FjaGUmJihPLT1zLE4tPWMscz0wLGM9MCk7dmFyIFI9ZS5nbG9iYWxBbHBoYTtlLmdsb2JhbEFscGhhPWI7dmFyIHo9YS5nZXRJbWdTbW9vdGhpbmcoZSksQj0hMTt4PT09YG5vYCYmej8oYS5zZXRJbWdTbW9vdGhpbmcoZSwhMSksQj0hMCk6eD09PWB5ZXNgJiYheiYmKGEuc2V0SW1nU21vb3RoaW5nKGUsITApLEI9ITApLGY9PT1gbm8tcmVwZWF0YD8oeSYmKGUuc2F2ZSgpLHYucGF0aENhY2hlP2UuY2xpcCh2LnBhdGhDYWNoZSk6KGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShuKV0uZHJhdyhlLHMsYyxnLF8sUyx2KSxlLmNsaXAoKSkpLGEuc2FmZURyYXdJbWFnZShlLHQsMCwwLEMsdyxPLE4sVCxFKSx5JiZlLnJlc3RvcmUoKSk6KGUuZmlsbFN0eWxlPWUuY3JlYXRlUGF0dGVybih0LGYpLGEubm9kZVNoYXBlc1thLmdldE5vZGVTaGFwZShuKV0uZHJhdyhlLHMsYyxnLF8sUyx2KSxlLnRyYW5zbGF0ZShPLE4pLGUuZmlsbCgpLGUudHJhbnNsYXRlKC1PLC1OKSksZS5nbG9iYWxBbHBoYT1SLEImJmEuc2V0SW1nU21vb3RoaW5nKGUseil9fTt2YXIgckM9e307ckMuZWxlVGV4dEJpZ2dlclRoYW5NaW49ZnVuY3Rpb24oZSx0KXtpZighdCl7dmFyIG49ZS5jeSgpLnpvb20oKSxyPXRoaXMuZ2V0UGl4ZWxSYXRpbygpO3Q9MioqTWF0aC5jZWlsKEZkKG4qcikpfXJldHVybiEoZS5wc3R5bGUoYGZvbnQtc2l6ZWApLnBmVmFsdWUqdDxlLnBzdHlsZShgbWluLXpvb21lZC1mb250LXNpemVgKS5wZlZhbHVlKX0sckMuZHJhd0VsZW1lbnRUZXh0PWZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aD41JiZhcmd1bWVudHNbNV0hPT12b2lkIDA/YXJndW1lbnRzWzVdOiEwLG89dGhpcztpZihyPT1udWxsKXtpZihhJiYhby5lbGVUZXh0QmlnZ2VyVGhhbk1pbih0KSlyZXR1cm59ZWxzZSBpZihyPT09ITEpcmV0dXJuO2lmKHQuaXNOb2RlKCkpe3ZhciBzPXQucHN0eWxlKGBsYWJlbGApO2lmKCFzfHwhcy52YWx1ZSlyZXR1cm47dmFyIGM9by5nZXRMYWJlbEp1c3RpZmljYXRpb24odCksbD10LnBzdHlsZShgdGV4dC1tZXRyaWNzYCkuc3RyVmFsdWU9PT1gZ2x5cGhgO2UudGV4dEFsaWduPWMsZS50ZXh0QmFzZWxpbmU9bD9gYWxwaGFiZXRpY2A6YGJvdHRvbWB9ZWxzZXt2YXIgdT10LmVsZW1lbnQoKS5fcHJpdmF0ZS5yc2NyYXRjaC5iYWRMaW5lLGQ9dC5wc3R5bGUoYGxhYmVsYCksZj10LnBzdHlsZShgc291cmNlLWxhYmVsYCkscD10LnBzdHlsZShgdGFyZ2V0LWxhYmVsYCk7aWYodXx8KCFkfHwhZC52YWx1ZSkmJighZnx8IWYudmFsdWUpJiYoIXB8fCFwLnZhbHVlKSlyZXR1cm47ZS50ZXh0QWxpZ249YGNlbnRlcmAsZS50ZXh0QmFzZWxpbmU9YGJvdHRvbWB9dmFyIG09IW4saDtuJiYoaD1uLGUudHJhbnNsYXRlKC1oLngxLC1oLnkxKSksaT09bnVsbD8oby5kcmF3VGV4dChlLHQsbnVsbCxtLGEpLHQuaXNFZGdlKCkmJihvLmRyYXdUZXh0KGUsdCxgc291cmNlYCxtLGEpLG8uZHJhd1RleHQoZSx0LGB0YXJnZXRgLG0sYSkpKTpvLmRyYXdUZXh0KGUsdCxpLG0sYSksbiYmZS50cmFuc2xhdGUoaC54MSxoLnkxKX0sckMuZ2V0Rm9udENhY2hlPWZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuZm9udENhY2hlcz10aGlzLmZvbnRDYWNoZXN8fFtdO2Zvcih2YXIgbj0wO248dGhpcy5mb250Q2FjaGVzLmxlbmd0aDtuKyspaWYodD10aGlzLmZvbnRDYWNoZXNbbl0sdC5jb250ZXh0PT09ZSlyZXR1cm4gdDtyZXR1cm4gdD17Y29udGV4dDplfSx0aGlzLmZvbnRDYWNoZXMucHVzaCh0KSx0fSxyQy5zZXR1cFRleHRTdHlsZT1mdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdIT09dm9pZCAwP2FyZ3VtZW50c1syXTohMCxyPXQucHN0eWxlKGBmb250LXN0eWxlYCkuc3RyVmFsdWUsaT10LnBzdHlsZShgZm9udC1zaXplYCkucGZWYWx1ZStgcHhgLGE9dC5wc3R5bGUoYGZvbnQtZmFtaWx5YCkuc3RyVmFsdWUsbz10LnBzdHlsZShgZm9udC13ZWlnaHRgKS5zdHJWYWx1ZSxzPW4/dC5lZmZlY3RpdmVPcGFjaXR5KCkqdC5wc3R5bGUoYHRleHQtb3BhY2l0eWApLnZhbHVlOjEsYz10LnBzdHlsZShgdGV4dC1vdXRsaW5lLW9wYWNpdHlgKS52YWx1ZSpzLGw9dC5wc3R5bGUoYGNvbG9yYCkudmFsdWUsdT10LnBzdHlsZShgdGV4dC1vdXRsaW5lLWNvbG9yYCkudmFsdWU7ZS5mb250PXIrYCBgK28rYCBgK2krYCBgK2EsZS5saW5lSm9pbj1gcm91bmRgLHRoaXMuY29sb3JGaWxsU3R5bGUoZSxsWzBdLGxbMV0sbFsyXSxzKSx0aGlzLmNvbG9yU3Ryb2tlU3R5bGUoZSx1WzBdLHVbMV0sdVsyXSxjKX07ZnVuY3Rpb24gaUMoZSx0LG4scixpKXt2YXIgYT1NYXRoLm1pbihyLGkpLzIsbz10K3IvMixzPW4raS8yO2UuYmVnaW5QYXRoKCksZS5hcmMobyxzLGEsMCxNYXRoLlBJKjIpLGUuY2xvc2VQYXRoKCl9ZnVuY3Rpb24gYUMoZSx0LG4scixpKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjUmJmFyZ3VtZW50c1s1XSE9PXZvaWQgMD9hcmd1bWVudHNbNV06NSxvPU1hdGgubWluKGEsci8yLGkvMik7ZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0K28sbiksZS5saW5lVG8odCtyLW8sbiksZS5xdWFkcmF0aWNDdXJ2ZVRvKHQrcixuLHQrcixuK28pLGUubGluZVRvKHQrcixuK2ktbyksZS5xdWFkcmF0aWNDdXJ2ZVRvKHQrcixuK2ksdCtyLW8sbitpKSxlLmxpbmVUbyh0K28sbitpKSxlLnF1YWRyYXRpY0N1cnZlVG8odCxuK2ksdCxuK2ktbyksZS5saW5lVG8odCxuK28pLGUucXVhZHJhdGljQ3VydmVUbyh0LG4sdCtvLG4pLGUuY2xvc2VQYXRoKCl9ckMuZ2V0VGV4dEFuZ2xlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lLl9wcml2YXRlLnJzY3JhdGNoLGk9dD90K2AtYDpgYCxhPWUucHN0eWxlKGkrYHRleHQtcm90YXRpb25gKTtpZihhLnN0clZhbHVlPT09YGF1dG9yb3RhdGVgKXt2YXIgbz1xdShyLGBsYWJlbEFuZ2xlYCx0KTtuPWUuaXNFZGdlKCk/bzowfWVsc2Ugbj1hLnN0clZhbHVlPT09YG5vbmVgPzA6YS5wZlZhbHVlO3JldHVybiBufSxyQy5kcmF3VGV4dD1mdW5jdGlvbihlLHQsbil7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiEwLGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9dC5fcHJpdmF0ZS5yc2NyYXRjaCxvPWk/dC5lZmZlY3RpdmVPcGFjaXR5KCk6MTtpZighaXx8byE9PTAmJnQucHN0eWxlKGB0ZXh0LW9wYWNpdHlgKS52YWx1ZSE9PTApe249PT1gbWFpbmAmJihuPW51bGwpO3ZhciBzPXF1KGEsYGxhYmVsWGAsbiksYz1xdShhLGBsYWJlbFlgLG4pLGwsdSxkPXRoaXMuZ2V0TGFiZWxUZXh0KHQsbik7aWYoZCE9bnVsbCYmZCE9PWBgJiYhaXNOYU4ocykmJiFpc05hTihjKSl7dGhpcy5zZXR1cFRleHRTdHlsZShlLHQsaSk7dmFyIGY9bj9uK2AtYDpgYCxwPXF1KGEsYGxhYmVsV2lkdGhgLG4pLG09cXUoYSxgbGFiZWxIZWlnaHRgLG4pLGg9cXUoYSxgbGFiZWxBY3R1YWxEZXNjZW50YCxuKSxnPXQucHN0eWxlKGYrYHRleHQtbWFyZ2luLXhgKS5wZlZhbHVlLF89dC5wc3R5bGUoZitgdGV4dC1tYXJnaW4teWApLnBmVmFsdWUsdj10LmlzRWRnZSgpLHk9dC5wc3R5bGUoYHRleHQtaGFsaWduYCkudmFsdWUsYj10LnBzdHlsZShgdGV4dC12YWxpZ25gKS52YWx1ZTt2JiYoeT1gY2VudGVyYCxiPWBjZW50ZXJgKSxzKz1nLGMrPV87dmFyIHg9cj90aGlzLmdldFRleHRBbmdsZSh0LG4pOjA7eCE9PTAmJihsPXMsdT1jLGUudHJhbnNsYXRlKGwsdSksZS5yb3RhdGUoeCkscz0wLGM9MCk7dmFyIFM9ZXYoeSksQz10dihiKTtzd2l0Y2goQyl7Y2FzZWB0b3BgOmJyZWFrO2Nhc2VgY2VudGVyYDpjKz1tLzI7YnJlYWs7Y2FzZWBib3R0b21gOmMrPW19dmFyIHc9dC5wc3R5bGUoYHRleHQtYmFja2dyb3VuZC1vcGFjaXR5YCkudmFsdWUsVD10LnBzdHlsZShgdGV4dC1ib3JkZXItb3BhY2l0eWApLnZhbHVlLEU9dC5wc3R5bGUoYHRleHQtYm9yZGVyLXdpZHRoYCkucGZWYWx1ZSxEPXQucHN0eWxlKGB0ZXh0LWJhY2tncm91bmQtcGFkZGluZ2ApLnBmVmFsdWUsTz10LnBzdHlsZShgdGV4dC1iYWNrZ3JvdW5kLXNoYXBlYCkuc3RyVmFsdWUsaz1PPT09YHJvdW5kLXJlY3RhbmdsZWB8fE89PT1gcm91bmRyZWN0YW5nbGVgLEE9Tz09PWBjaXJjbGVgLGo9MjtpZih3PjB8fEU+MCYmVD4wKXt2YXIgTT1lLmZpbGxTdHlsZSxOPWUuc3Ryb2tlU3R5bGUsUD1lLmxpbmVXaWR0aCxGPXQucHN0eWxlKGB0ZXh0LWJhY2tncm91bmQtY29sb3JgKS52YWx1ZSxJPXQucHN0eWxlKGB0ZXh0LWJvcmRlci1jb2xvcmApLnZhbHVlLEw9dC5wc3R5bGUoYHRleHQtYm9yZGVyLXN0eWxlYCkudmFsdWUsUj13PjAsej1FPjAmJlQ+MCxCPXMtRDtzd2l0Y2goUyl7Y2FzZWBsZWZ0YDpCLT1wO2JyZWFrO2Nhc2VgY2VudGVyYDpCLT1wLzJ9dmFyIFY9Yy1tLUQsSD1wKzIqRCxVPW0rMipEO2lmKFImJihlLmZpbGxTdHlsZT1gcmdiYSgke0ZbMF19LCR7RlsxXX0sJHtGWzJdfSwke3cqb30pYCkseiYmKGUuc3Ryb2tlU3R5bGU9YHJnYmEoJHtJWzBdfSwke0lbMV19LCR7SVsyXX0sJHtUKm99KWAsZS5saW5lV2lkdGg9RSxlLnNldExpbmVEYXNoKSlzd2l0Y2goTCl7Y2FzZWBkb3R0ZWRgOmUuc2V0TGluZURhc2goWzEsMV0pO2JyZWFrO2Nhc2VgZGFzaGVkYDplLnNldExpbmVEYXNoKFs0LDJdKTticmVhaztjYXNlYGRvdWJsZWA6ZS5saW5lV2lkdGg9RS80LGUuc2V0TGluZURhc2goW10pO2JyZWFrO2RlZmF1bHQ6ZS5zZXRMaW5lRGFzaChbXSl9aWYoaz8oZS5iZWdpblBhdGgoKSxhQyhlLEIsVixILFUsaikpOkE/KGUuYmVnaW5QYXRoKCksaUMoZSxCLFYsSCxVKSk6KGUuYmVnaW5QYXRoKCksZS5yZWN0KEIsVixILFUpKSxSJiZlLmZpbGwoKSx6JiZlLnN0cm9rZSgpLHomJkw9PT1gZG91YmxlYCl7dmFyIFc9RS8yO2UuYmVnaW5QYXRoKCksaz9hQyhlLEIrVyxWK1csSC0yKlcsVS0yKlcsaik6ZS5yZWN0KEIrVyxWK1csSC0yKlcsVS0yKlcpLGUuc3Ryb2tlKCl9ZS5maWxsU3R5bGU9TSxlLnN0cm9rZVN0eWxlPU4sZS5saW5lV2lkdGg9UCxlLnNldExpbmVEYXNoJiZlLnNldExpbmVEYXNoKFtdKX12YXIgZWU9Mip0LnBzdHlsZShgdGV4dC1vdXRsaW5lLXdpZHRoYCkucGZWYWx1ZTtpZihlZT4wJiYoZS5saW5lV2lkdGg9ZWUpLGMtPWgsdC5wc3R5bGUoYHRleHQtd3JhcGApLnZhbHVlPT09YHdyYXBgKXt2YXIgRz1xdShhLGBsYWJlbFdyYXBDYWNoZWRMaW5lc2AsbiksdGU9cXUoYSxgbGFiZWxMaW5lSGVpZ2h0YCxuKSxuZT1wLzIscmU9dGhpcy5nZXRMYWJlbEp1c3RpZmljYXRpb24odCk7c3dpdGNoKHJlPT09YGF1dG9gfHwoUz09PWBsZWZ0YD9yZT09PWBsZWZ0YD9zKz0tcDpyZT09PWBjZW50ZXJgJiYocys9LW5lKTpTPT09YGNlbnRlcmA/cmU9PT1gbGVmdGA/cys9LW5lOnJlPT09YHJpZ2h0YCYmKHMrPW5lKTpTPT09YHJpZ2h0YCYmKHJlPT09YGNlbnRlcmA/cys9bmU6cmU9PT1gcmlnaHRgJiYocys9cCkpKSxDKXtjYXNlYHRvcGA6Yy09KEcubGVuZ3RoLTEpKnRlO2JyZWFrO2Nhc2VgY2VudGVyYDpjYXNlYGJvdHRvbWA6Yy09KEcubGVuZ3RoLTEpKnRlfWZvcih2YXIgaWU9MDtpZTxHLmxlbmd0aDtpZSsrKWVlPjAmJmUuc3Ryb2tlVGV4dChHW2llXSxzLGMpLGUuZmlsbFRleHQoR1tpZV0scyxjKSxjKz10ZX1lbHNlIGVlPjAmJmUuc3Ryb2tlVGV4dChkLHMsYyksZS5maWxsVGV4dChkLHMsYyk7eCE9PTAmJihlLnJvdGF0ZSgteCksZS50cmFuc2xhdGUoLWwsLXUpKX19fTt2YXIgb0M9e307b0MuZHJhd05vZGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMCxpPWFyZ3VtZW50cy5sZW5ndGg+NCYmYXJndW1lbnRzWzRdIT09dm9pZCAwP2FyZ3VtZW50c1s0XTohMCxhPWFyZ3VtZW50cy5sZW5ndGg+NSYmYXJndW1lbnRzWzVdIT09dm9pZCAwP2FyZ3VtZW50c1s1XTohMCxvPXRoaXMscyxjLGw9dC5fcHJpdmF0ZSx1PWwucnNjcmF0Y2gsZD10LnBvc2l0aW9uKCk7aWYoUShkLngpJiZRKGQueSkmJighYXx8dC52aXNpYmxlKCkpKXt2YXIgZj1hP3QuZWZmZWN0aXZlT3BhY2l0eSgpOjEscD1vLnVzZVBhdGhzKCksbSxoPSExLGc9dC5wYWRkaW5nKCk7cz10LndpZHRoKCkrMipnLGM9dC5oZWlnaHQoKSsyKmc7dmFyIF87biYmKF89bixlLnRyYW5zbGF0ZSgtXy54MSwtXy55MSkpO2Zvcih2YXIgdj10LnBzdHlsZShgYmFja2dyb3VuZC1pbWFnZWApLnZhbHVlLHk9QXJyYXkodi5sZW5ndGgpLGI9QXJyYXkodi5sZW5ndGgpLHg9MCxTPTA7Uzx2Lmxlbmd0aDtTKyspe3ZhciBDPXZbU107aWYoeVtTXT1DIT1udWxsJiZDIT09YG5vbmVgKXt2YXIgdz10LmN5KCkuc3R5bGUoKS5nZXRJbmRleGVkU3R5bGUodCxgYmFja2dyb3VuZC1pbWFnZS1jcm9zc29yaWdpbmAsYHZhbHVlYCxTKTt4KyssYltTXT1vLmdldENhY2hlZEltYWdlKEMsdyxmdW5jdGlvbigpe2wuYmFja2dyb3VuZFRpbWVzdGFtcD1EYXRlLm5vdygpLHQuZW1pdEFuZE5vdGlmeShgYmFja2dyb3VuZGApfSl9fXZhciBUPXQucHN0eWxlKGBiYWNrZ3JvdW5kLWJsYWNrZW5gKS52YWx1ZSxFPXQucHN0eWxlKGBib3JkZXItd2lkdGhgKS5wZlZhbHVlLEQ9dC5wc3R5bGUoYGJhY2tncm91bmQtb3BhY2l0eWApLnZhbHVlKmYsTz10LnBzdHlsZShgYm9yZGVyLWNvbG9yYCkudmFsdWUsaz10LnBzdHlsZShgYm9yZGVyLXN0eWxlYCkudmFsdWUsQT10LnBzdHlsZShgYm9yZGVyLWpvaW5gKS52YWx1ZSxqPXQucHN0eWxlKGBib3JkZXItY2FwYCkudmFsdWUsTT10LnBzdHlsZShgYm9yZGVyLXBvc2l0aW9uYCkudmFsdWUsTj10LnBzdHlsZShgYm9yZGVyLWRhc2gtcGF0dGVybmApLnBmVmFsdWUsUD10LnBzdHlsZShgYm9yZGVyLWRhc2gtb2Zmc2V0YCkucGZWYWx1ZSxGPXQucHN0eWxlKGBib3JkZXItb3BhY2l0eWApLnZhbHVlKmYsST10LnBzdHlsZShgb3V0bGluZS13aWR0aGApLnBmVmFsdWUsTD10LnBzdHlsZShgb3V0bGluZS1jb2xvcmApLnZhbHVlLFI9dC5wc3R5bGUoYG91dGxpbmUtc3R5bGVgKS52YWx1ZSx6PXQucHN0eWxlKGBvdXRsaW5lLW9wYWNpdHlgKS52YWx1ZSpmLEI9dC5wc3R5bGUoYG91dGxpbmUtb2Zmc2V0YCkudmFsdWUsVj10LnBzdHlsZShgY29ybmVyLXJhZGl1c2ApLnZhbHVlO1YhPT1gYXV0b2AmJihWPXQucHN0eWxlKGBjb3JuZXItcmFkaXVzYCkucGZWYWx1ZSk7dmFyIEg9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06RDtvLmVsZUZpbGxTdHlsZShlLHQsbil9LFU9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06RjtvLmNvbG9yU3Ryb2tlU3R5bGUoZSxPWzBdLE9bMV0sT1syXSx0KX0sVz1mdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTp6O28uY29sb3JTdHJva2VTdHlsZShlLExbMF0sTFsxXSxMWzJdLHQpfSxlZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaT1vLm5vZGVQYXRoQ2FjaGU9by5ub2RlUGF0aENhY2hlfHxbXSxhPXh1KG49PT1gcG9seWdvbmA/bitgLGArci5qb2luKGAsYCk6bixgYCt0LGBgK2UsYGArVikscz1pW2FdLGMsbD0hMTtyZXR1cm4gcz09bnVsbD8oYz1uZXcgUGF0aDJELGlbYV09dS5wYXRoQ2FjaGU9Yyk6KGM9cyxsPSEwLHUucGF0aENhY2hlPWMpLHtwYXRoOmMsY2FjaGVIaXQ6bH19LEc9dC5wc3R5bGUoYHNoYXBlYCkuc3RyVmFsdWUsdGU9dC5wc3R5bGUoYHNoYXBlLXBvbHlnb24tcG9pbnRzYCkucGZWYWx1ZTtpZihwKXtlLnRyYW5zbGF0ZShkLngsZC55KTt2YXIgbmU9ZWUocyxjLEcsdGUpO209bmUucGF0aCxoPW5lLmNhY2hlSGl0fXZhciByZT1mdW5jdGlvbigpe2lmKCFoKXt2YXIgbj1kO3AmJihuPXt4OjAseTowfSksby5ub2RlU2hhcGVzW28uZ2V0Tm9kZVNoYXBlKHQpXS5kcmF3KG18fGUsbi54LG4ueSxzLGMsVix1KX1wP2UuZmlsbChtKTplLmZpbGwoKX0saWU9ZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aD4wJiZhcmd1bWVudHNbMF0hPT12b2lkIDA/YXJndW1lbnRzWzBdOmYscj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITAsaT1sLmJhY2tncm91bmRpbmcsYT0wLHM9MDtzPGIubGVuZ3RoO3MrKyl7dmFyIGM9dC5jeSgpLnN0eWxlKCkuZ2V0SW5kZXhlZFN0eWxlKHQsYGJhY2tncm91bmQtaW1hZ2UtY29udGFpbm1lbnRgLGB2YWx1ZWAscyk7ciYmYz09PWBvdmVyYHx8IXImJmM9PT1gaW5zaWRlYD9hKys6eVtzXSYmYltzXS5jb21wbGV0ZSYmIWJbc10uZXJyb3ImJihhKyssby5kcmF3SW5zY3JpYmVkSW1hZ2UoZSxiW3NdLHQscyxuKSl9bC5iYWNrZ3JvdW5kaW5nPWEhPT14LGkhPT1sLmJhY2tncm91bmRpbmcmJnQudXBkYXRlU3R5bGUoITEpfSxhZT1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwJiZhcmd1bWVudHNbMF0scj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ZjtvLmhhc1BpZSh0KSYmKG8uZHJhd1BpZShlLHQsciksbiYmKHB8fG8ubm9kZVNoYXBlc1tvLmdldE5vZGVTaGFwZSh0KV0uZHJhdyhlLGQueCxkLnkscyxjLFYsdSkpKX0sb2U9ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMCYmYXJndW1lbnRzWzBdLHI9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOmY7by5oYXNTdHJpcGUodCkmJihlLnNhdmUoKSxwP2UuY2xpcCh1LnBhdGhDYWNoZSk6KG8ubm9kZVNoYXBlc1tvLmdldE5vZGVTaGFwZSh0KV0uZHJhdyhlLGQueCxkLnkscyxjLFYsdSksZS5jbGlwKCkpLG8uZHJhd1N0cmlwZShlLHQsciksZS5yZXN0b3JlKCksbiYmKHB8fG8ubm9kZVNoYXBlc1tvLmdldE5vZGVTaGFwZSh0KV0uZHJhdyhlLGQueCxkLnkscyxjLFYsdSkpKX0sc2U9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06ZixuPShUPjA/VDotVCkqdCxyPVQ+MD8wOjI1NTtUIT09MCYmKG8uY29sb3JGaWxsU3R5bGUoZSxyLHIscixuKSxwP2UuZmlsbChtKTplLmZpbGwoKSl9LEs9ZnVuY3Rpb24oKXtpZihFPjApe2lmKGUubGluZVdpZHRoPUUsZS5saW5lQ2FwPWosZS5saW5lSm9pbj1BLGUuc2V0TGluZURhc2gpc3dpdGNoKGspe2Nhc2VgZG90dGVkYDplLnNldExpbmVEYXNoKFsxLDFdKTticmVhaztjYXNlYGRhc2hlZGA6ZS5zZXRMaW5lRGFzaChOKSxlLmxpbmVEYXNoT2Zmc2V0PVA7YnJlYWs7Y2FzZWBzb2xpZGA6Y2FzZWBkb3VibGVgOmUuc2V0TGluZURhc2goW10pfWlmKE0hPT1gY2VudGVyYCl7aWYoZS5zYXZlKCksZS5saW5lV2lkdGgqPTIsTT09PWBpbnNpZGVgKXA/ZS5jbGlwKG0pOmUuY2xpcCgpO2Vsc2V7dmFyIHQ9bmV3IFBhdGgyRDt0LnJlY3QoLXMvMi1FLC1jLzItRSxzKzIqRSxjKzIqRSksdC5hZGRQYXRoKG0pLGUuY2xpcCh0LGBldmVub2RkYCl9cD9lLnN0cm9rZShtKTplLnN0cm9rZSgpLGUucmVzdG9yZSgpfWVsc2UgcD9lLnN0cm9rZShtKTplLnN0cm9rZSgpO2lmKGs9PT1gZG91YmxlYCl7ZS5saW5lV2lkdGg9RS8zO3ZhciBuPWUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO2UuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWBkZXN0aW5hdGlvbi1vdXRgLHA/ZS5zdHJva2UobSk6ZS5zdHJva2UoKSxlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1ufWUuc2V0TGluZURhc2gmJmUuc2V0TGluZURhc2goW10pfX0sY2U9ZnVuY3Rpb24oKXtpZihJPjApe2lmKGUubGluZVdpZHRoPUksZS5saW5lQ2FwPWBidXR0YCxlLnNldExpbmVEYXNoKXN3aXRjaChSKXtjYXNlYGRvdHRlZGA6ZS5zZXRMaW5lRGFzaChbMSwxXSk7YnJlYWs7Y2FzZWBkYXNoZWRgOmUuc2V0TGluZURhc2goWzQsMl0pO2JyZWFrO2Nhc2Vgc29saWRgOmNhc2VgZG91YmxlYDplLnNldExpbmVEYXNoKFtdKX12YXIgbj1kO3AmJihuPXt4OjAseTowfSk7dmFyIHI9by5nZXROb2RlU2hhcGUodCksaT1FO009PT1gaW5zaWRlYCYmKGk9MCksTT09PWBvdXRzaWRlYCYmKGkqPTIpO3ZhciBhPShzK2krKEkrQikpL3MsbD0oYytpKyhJK0IpKS9jLHU9cyphLGY9YypsLG09by5ub2RlU2hhcGVzW3JdLnBvaW50cyxoO2lmKHAmJihoPWVlKHUsZixyLG0pLnBhdGgpLHI9PT1gZWxsaXBzZWApby5kcmF3RWxsaXBzZVBhdGgoaHx8ZSxuLngsbi55LHUsZik7ZWxzZSBpZihbYHJvdW5kLWRpYW1vbmRgLGByb3VuZC1oZXB0YWdvbmAsYHJvdW5kLWhleGFnb25gLGByb3VuZC1vY3RhZ29uYCxgcm91bmQtcGVudGFnb25gLGByb3VuZC1wb2x5Z29uYCxgcm91bmQtdHJpYW5nbGVgLGByb3VuZC10YWdgXS5pbmNsdWRlcyhyKSl7dmFyIGc9MCxfPTAsdj0wO3I9PT1gcm91bmQtZGlhbW9uZGA/Zz0oaStCK0kpKjEuNDpyPT09YHJvdW5kLWhlcHRhZ29uYD8oZz0oaStCK0kpKjEuMDc1LHY9LShpLzIrQitJKS8zNSk6cj09PWByb3VuZC1oZXhhZ29uYD9nPShpK0IrSSkqMS4xMjpyPT09YHJvdW5kLXBlbnRhZ29uYD8oZz0oaStCK0kpKjEuMTMsdj0tKGkvMitCK0kpLzE1KTpyPT09YHJvdW5kLXRhZ2A/KGc9KGkrQitJKSoxLjEyLF89KGkvMitJK0IpKi4wNyk6cj09PWByb3VuZC10cmlhbmdsZWAmJihnPShpK0IrSSkqKE1hdGguUEkvMiksdj0tKGkrQi8yK0kpL01hdGguUEkpLGchPT0wJiYoYT0ocytnKS9zLHU9cyphLFtgcm91bmQtaGV4YWdvbmAsYHJvdW5kLXRhZ2BdLmluY2x1ZGVzKHIpfHwobD0oYytnKS9jLGY9YypsKSksVj1WPT09YGF1dG9gP2pmKHUsZik6Vjtmb3IodmFyIHk9dS8yLGI9Zi8yLHg9VisoaStJK0IpLzIsUz1BcnJheShtLmxlbmd0aC8yKSxDPUFycmF5KG0ubGVuZ3RoLzIpLHc9MDt3PG0ubGVuZ3RoLzI7dysrKVNbd109e3g6bi54K18reSptW3cqMl0seTpuLnkrditiKm1bdyoyKzFdfTt2YXIgVCxELE8sayxBPVMubGVuZ3RoO2ZvcihEPVNbQS0xXSxUPTA7VDxBO1QrKylPPVNbVCVBXSxrPVNbKFQrMSklQV0sQ1tUXT1TeChELE8sayx4KSxEPU8sTz1rO28uZHJhd1JvdW5kUG9seWdvblBhdGgoaHx8ZSxuLngrXyxuLnkrdixzKmEsYypsLG0sQyl9ZWxzZSBpZihbYHJvdW5kcmVjdGFuZ2xlYCxgcm91bmQtcmVjdGFuZ2xlYF0uaW5jbHVkZXMocikpVj1WPT09YGF1dG9gP0FmKHUsZik6VixvLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoaHx8ZSxuLngsbi55LHUsZixWKyhpK0krQikvMik7ZWxzZSBpZihbYGN1dHJlY3RhbmdsZWAsYGN1dC1yZWN0YW5nbGVgXS5pbmNsdWRlcyhyKSlWPVY9PT1gYXV0b2A/TWYoKTpWLG8uZHJhd0N1dFJlY3RhbmdsZVBhdGgoaHx8ZSxuLngsbi55LHUsZixudWxsLFYrKGkrSStCKS80KTtlbHNlIGlmKFtgYm90dG9tcm91bmRyZWN0YW5nbGVgLGBib3R0b20tcm91bmQtcmVjdGFuZ2xlYF0uaW5jbHVkZXMocikpVj1WPT09YGF1dG9gP0FmKHUsZik6VixvLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZVBhdGgoaHx8ZSxuLngsbi55LHUsZixWKyhpK0krQikvMik7ZWxzZSBpZihyPT09YGJhcnJlbGApby5kcmF3QmFycmVsUGF0aChofHxlLG4ueCxuLnksdSxmKTtlbHNlIGlmKHIuc3RhcnRzV2l0aChgcG9seWdvbmApfHxbYHJob21ib2lkYCxgcmlnaHQtcmhvbWJvaWRgLGByb3VuZC10YWdgLGB0YWdgLGB2ZWVgXS5pbmNsdWRlcyhyKSl7dmFyIGo9KGkrSStCKS9zO209Z2YoX2YobSxqKSksby5kcmF3UG9seWdvblBhdGgoaHx8ZSxuLngsbi55LHMsYyxtKX1lbHNle3ZhciBOPShpK0krQikvczttPWdmKF9mKG0sLU4pKSxvLmRyYXdQb2x5Z29uUGF0aChofHxlLG4ueCxuLnkscyxjLG0pfWlmKHA/ZS5zdHJva2UoaCk6ZS5zdHJva2UoKSxSPT09YGRvdWJsZWApe2UubGluZVdpZHRoPWkvMzt2YXIgUD1lLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1gZGVzdGluYXRpb24tb3V0YCxwP2Uuc3Ryb2tlKGgpOmUuc3Ryb2tlKCksZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249UH1lLnNldExpbmVEYXNoJiZlLnNldExpbmVEYXNoKFtdKX19LGxlPWZ1bmN0aW9uKCl7aSYmby5kcmF3Tm9kZU92ZXJsYXkoZSx0LGQscyxjKX0sdWU9ZnVuY3Rpb24oKXtpJiZvLmRyYXdOb2RlVW5kZXJsYXkoZSx0LGQscyxjKX0sZGU9ZnVuY3Rpb24oKXtvLmRyYXdFbGVtZW50VGV4dChlLHQsbnVsbCxyKX07aWYodC5wc3R5bGUoYGdob3N0YCkudmFsdWU9PT1geWVzYCl7dmFyIGZlPXQucHN0eWxlKGBnaG9zdC1vZmZzZXQteGApLnBmVmFsdWUscGU9dC5wc3R5bGUoYGdob3N0LW9mZnNldC15YCkucGZWYWx1ZSxtZT10LnBzdHlsZShgZ2hvc3Qtb3BhY2l0eWApLnZhbHVlLGhlPW1lKmY7ZS50cmFuc2xhdGUoZmUscGUpLFcoKSxjZSgpLEgobWUqRCkscmUoKSxpZShoZSwhMCksVShtZSpGKSxLKCksYWUoVCE9PTB8fEUhPT0wKSxvZShUIT09MHx8RSE9PTApLGllKGhlLCExKSxzZShoZSksZS50cmFuc2xhdGUoLWZlLC1wZSl9cCYmZS50cmFuc2xhdGUoLWQueCwtZC55KSx1ZSgpLHAmJmUudHJhbnNsYXRlKGQueCxkLnkpLFcoKSxjZSgpLEgoKSxyZSgpLGllKGYsITApLFUoKSxLKCksYWUoVCE9PTB8fEUhPT0wKSxvZShUIT09MHx8RSE9PTApLGllKGYsITEpLHNlKCkscCYmZS50cmFuc2xhdGUoLWQueCwtZC55KSxkZSgpLGxlKCksbiYmZS50cmFuc2xhdGUoXy54MSxfLnkxKX19O3ZhciBzQz1mdW5jdGlvbihlKXtpZighW2BvdmVybGF5YCxgdW5kZXJsYXlgXS5pbmNsdWRlcyhlKSl0aHJvdyBFcnJvcihgSW52YWxpZCBzdGF0ZWApO3JldHVybiBmdW5jdGlvbih0LG4scixpLGEpe3ZhciBvPXRoaXM7aWYobi52aXNpYmxlKCkpe3ZhciBzPW4ucHN0eWxlKGAke2V9LXBhZGRpbmdgKS5wZlZhbHVlLGM9bi5wc3R5bGUoYCR7ZX0tb3BhY2l0eWApLnZhbHVlLGw9bi5wc3R5bGUoYCR7ZX0tY29sb3JgKS52YWx1ZSx1PW4ucHN0eWxlKGAke2V9LXNoYXBlYCkudmFsdWUsZD1uLnBzdHlsZShgJHtlfS1jb3JuZXItcmFkaXVzYCkudmFsdWU7aWYoYz4wKXtpZihyfHw9bi5wb3NpdGlvbigpLGk9PW51bGx8fGE9PW51bGwpe3ZhciBmPW4ucGFkZGluZygpO2k9bi53aWR0aCgpKzIqZixhPW4uaGVpZ2h0KCkrMipmfW8uY29sb3JGaWxsU3R5bGUodCxsWzBdLGxbMV0sbFsyXSxjKSxvLm5vZGVTaGFwZXNbdV0uZHJhdyh0LHIueCxyLnksaStzKjIsYStzKjIsZCksdC5maWxsKCl9fX19O29DLmRyYXdOb2RlT3ZlcmxheT1zQyhgb3ZlcmxheWApLG9DLmRyYXdOb2RlVW5kZXJsYXk9c0MoYHVuZGVybGF5YCksb0MuaGFzUGllPWZ1bmN0aW9uKGUpe3JldHVybiBlPWVbMF0sZS5fcHJpdmF0ZS5oYXNQaWV9LG9DLmhhc1N0cmlwZT1mdW5jdGlvbihlKXtyZXR1cm4gZT1lWzBdLGUuX3ByaXZhdGUuaGFzU3RyaXBlfSxvQy5kcmF3UGllPWZ1bmN0aW9uKGUsdCxuLHIpe3Q9dFswXSxyfHw9dC5wb3NpdGlvbigpO3ZhciBpPXQuY3koKS5zdHlsZSgpLGE9dC5wc3R5bGUoYHBpZS1zaXplYCksbz10LnBzdHlsZShgcGllLWhvbGVgKSxzPXQucHN0eWxlKGBwaWUtc3RhcnQtYW5nbGVgKS5wZlZhbHVlLGM9ci54LGw9ci55LHU9dC53aWR0aCgpLGQ9dC5oZWlnaHQoKSxmPU1hdGgubWluKHUsZCkvMixwLG09MDtpZih0aGlzLnVzZVBhdGhzKCkmJihjPTAsbD0wKSxhLnVuaXRzPT09YCVgP2YqPWEucGZWYWx1ZTphLnBmVmFsdWUhPT12b2lkIDAmJihmPWEucGZWYWx1ZS8yKSxvLnVuaXRzPT09YCVgP3A9ZipvLnBmVmFsdWU6by5wZlZhbHVlIT09dm9pZCAwJiYocD1vLnBmVmFsdWUvMiksIShwPj1mKSlmb3IodmFyIGg9MTtoPD1pLnBpZUJhY2tncm91bmROO2grKyl7dmFyIGc9dC5wc3R5bGUoYHBpZS1gK2grYC1iYWNrZ3JvdW5kLXNpemVgKS52YWx1ZSxfPXQucHN0eWxlKGBwaWUtYCtoK2AtYmFja2dyb3VuZC1jb2xvcmApLnZhbHVlLHY9dC5wc3R5bGUoYHBpZS1gK2grYC1iYWNrZ3JvdW5kLW9wYWNpdHlgKS52YWx1ZSpuLHk9Zy8xMDA7eSttPjEmJih5PTEtbSk7dmFyIGI9MS41Kk1hdGguUEkrMipNYXRoLlBJKm07Yis9czt2YXIgeD0yKk1hdGguUEkqeSxTPWIreDtnPT09MHx8bT49MXx8bSt5PjF8fChwPT09MD8oZS5iZWdpblBhdGgoKSxlLm1vdmVUbyhjLGwpLGUuYXJjKGMsbCxmLGIsUyksZS5jbG9zZVBhdGgoKSk6KGUuYmVnaW5QYXRoKCksZS5hcmMoYyxsLGYsYixTKSxlLmFyYyhjLGwscCxTLGIsITApLGUuY2xvc2VQYXRoKCkpLHRoaXMuY29sb3JGaWxsU3R5bGUoZSxfWzBdLF9bMV0sX1syXSx2KSxlLmZpbGwoKSxtKz15KX19LG9DLmRyYXdTdHJpcGU9ZnVuY3Rpb24oZSx0LG4scil7dD10WzBdLHJ8fD10LnBvc2l0aW9uKCk7dmFyIGk9dC5jeSgpLnN0eWxlKCksYT1yLngsbz1yLnkscz10LndpZHRoKCksYz10LmhlaWdodCgpLGw9MCx1PXRoaXMudXNlUGF0aHMoKTtlLnNhdmUoKTt2YXIgZD10LnBzdHlsZShgc3RyaXBlLWRpcmVjdGlvbmApLnZhbHVlLGY9dC5wc3R5bGUoYHN0cmlwZS1zaXplYCk7c3dpdGNoKGQpe2Nhc2VgdmVydGljYWxgOmJyZWFrO2Nhc2VgcmlnaHdhcmRgOmUucm90YXRlKC1NYXRoLlBJLzIpfXZhciBwPXMsbT1jO2YudW5pdHM9PT1gJWA/KHAqPWYucGZWYWx1ZSxtKj1mLnBmVmFsdWUpOmYucGZWYWx1ZSE9PXZvaWQgMCYmKHA9Zi5wZlZhbHVlLG09Zi5wZlZhbHVlKSx1JiYoYT0wLG89MCksby09cC8yLGEtPW0vMjtmb3IodmFyIGg9MTtoPD1pLnN0cmlwZUJhY2tncm91bmROO2grKyl7dmFyIGc9dC5wc3R5bGUoYHN0cmlwZS1gK2grYC1iYWNrZ3JvdW5kLXNpemVgKS52YWx1ZSxfPXQucHN0eWxlKGBzdHJpcGUtYCtoK2AtYmFja2dyb3VuZC1jb2xvcmApLnZhbHVlLHY9dC5wc3R5bGUoYHN0cmlwZS1gK2grYC1iYWNrZ3JvdW5kLW9wYWNpdHlgKS52YWx1ZSpuLHk9Zy8xMDA7eStsPjEmJih5PTEtbCksZz09PTB8fGw+PTF8fGwreT4xfHwoZS5iZWdpblBhdGgoKSxlLnJlY3QoYSxvK20qbCxwLG0qeSksZS5jbG9zZVBhdGgoKSx0aGlzLmNvbG9yRmlsbFN0eWxlKGUsX1swXSxfWzFdLF9bMl0sdiksZS5maWxsKCksbCs9eSl9ZS5yZXN0b3JlKCl9O3ZhciBjQz17fSxsQz0xMDA7Y0MuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YS5jb250ZXh0c1swXTtpZih0aGlzLmZvcmNlZFBpeGVsUmF0aW8hPW51bGwpcmV0dXJuIHRoaXMuZm9yY2VkUGl4ZWxSYXRpbzt2YXIgdD10aGlzLmN5LndpbmRvdygpLG49ZS5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHxlLndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW98fGUubW96QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8ZS5tc0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fGUub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW98fGUuYmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8MTtyZXR1cm4odC5kZXZpY2VQaXhlbFJhdGlvfHwxKS9ufSxjQy5wYWludENhY2hlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnBhaW50Q2FjaGVzPXRoaXMucGFpbnRDYWNoZXN8fFtdLG49ITAscixpPTA7aTx0Lmxlbmd0aDtpKyspaWYocj10W2ldLHIuY29udGV4dD09PWUpe249ITE7YnJlYWt9cmV0dXJuIG4mJihyPXtjb250ZXh0OmV9LHQucHVzaChyKSkscn0sY0MuY3JlYXRlR3JhZGllbnRTdHlsZUZvcj1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhLG89dGhpcy51c2VQYXRocygpLHM9bi5wc3R5bGUodCtgLWdyYWRpZW50LXN0b3AtY29sb3JzYCkudmFsdWUsYz1uLnBzdHlsZSh0K2AtZ3JhZGllbnQtc3RvcC1wb3NpdGlvbnNgKS5wZlZhbHVlO2lmKHI9PT1gcmFkaWFsLWdyYWRpZW50YCl7aWYobi5pc0VkZ2UoKSl7dmFyIGw9bi5zb3VyY2VFbmRwb2ludCgpLHU9bi50YXJnZXRFbmRwb2ludCgpLGQ9bi5taWRwb2ludCgpLGY9TGQobCxkKSxwPUxkKHUsZCk7YT1lLmNyZWF0ZVJhZGlhbEdyYWRpZW50KGQueCxkLnksMCxkLngsZC55LE1hdGgubWF4KGYscCkpfWVsc2V7dmFyIG09bz97eDowLHk6MH06bi5wb3NpdGlvbigpLGg9bi5wYWRkZWRXaWR0aCgpLGc9bi5wYWRkZWRIZWlnaHQoKTthPWUuY3JlYXRlUmFkaWFsR3JhZGllbnQobS54LG0ueSwwLG0ueCxtLnksTWF0aC5tYXgoaCxnKSl9fWVsc2UgaWYobi5pc0VkZ2UoKSl7dmFyIF89bi5zb3VyY2VFbmRwb2ludCgpLHY9bi50YXJnZXRFbmRwb2ludCgpO2E9ZS5jcmVhdGVMaW5lYXJHcmFkaWVudChfLngsXy55LHYueCx2LnkpfWVsc2V7dmFyIHk9bz97eDowLHk6MH06bi5wb3NpdGlvbigpLGI9bi5wYWRkZWRXaWR0aCgpLHg9bi5wYWRkZWRIZWlnaHQoKSxTPWIvMixDPXgvMjtzd2l0Y2gobi5wc3R5bGUoYGJhY2tncm91bmQtZ3JhZGllbnQtZGlyZWN0aW9uYCkudmFsdWUpe2Nhc2VgdG8tYm90dG9tYDphPWUuY3JlYXRlTGluZWFyR3JhZGllbnQoeS54LHkueS1DLHkueCx5LnkrQyk7YnJlYWs7Y2FzZWB0by10b3BgOmE9ZS5jcmVhdGVMaW5lYXJHcmFkaWVudCh5LngseS55K0MseS54LHkueS1DKTticmVhaztjYXNlYHRvLWxlZnRgOmE9ZS5jcmVhdGVMaW5lYXJHcmFkaWVudCh5LngrUyx5LnkseS54LVMseS55KTticmVhaztjYXNlYHRvLXJpZ2h0YDphPWUuY3JlYXRlTGluZWFyR3JhZGllbnQoeS54LVMseS55LHkueCtTLHkueSk7YnJlYWs7Y2FzZWB0by1ib3R0b20tcmlnaHRgOmNhc2VgdG8tcmlnaHQtYm90dG9tYDphPWUuY3JlYXRlTGluZWFyR3JhZGllbnQoeS54LVMseS55LUMseS54K1MseS55K0MpO2JyZWFrO2Nhc2VgdG8tdG9wLXJpZ2h0YDpjYXNlYHRvLXJpZ2h0LXRvcGA6YT1lLmNyZWF0ZUxpbmVhckdyYWRpZW50KHkueC1TLHkueStDLHkueCtTLHkueS1DKTticmVhaztjYXNlYHRvLWJvdHRvbS1sZWZ0YDpjYXNlYHRvLWxlZnQtYm90dG9tYDphPWUuY3JlYXRlTGluZWFyR3JhZGllbnQoeS54K1MseS55LUMseS54LVMseS55K0MpO2JyZWFrO2Nhc2VgdG8tdG9wLWxlZnRgOmNhc2VgdG8tbGVmdC10b3BgOmE9ZS5jcmVhdGVMaW5lYXJHcmFkaWVudCh5LngrUyx5LnkrQyx5LngtUyx5LnktQyl9fWlmKCFhKXJldHVybiBudWxsO2Zvcih2YXIgdz1jLmxlbmd0aD09PXMubGVuZ3RoLFQ9cy5sZW5ndGgsRT0wO0U8VDtFKyspYS5hZGRDb2xvclN0b3Aodz9jW0VdOkUvKFQtMSksYHJnYmEoYCtzW0VdWzBdK2AsYCtzW0VdWzFdK2AsYCtzW0VdWzJdK2AsYCtpK2ApYCk7cmV0dXJuIGF9LGNDLmdyYWRpZW50RmlsbFN0eWxlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcihlLGBiYWNrZ3JvdW5kYCx0LG4scik7aWYoIWkpcmV0dXJuIG51bGw7ZS5maWxsU3R5bGU9aX0sY0MuY29sb3JGaWxsU3R5bGU9ZnVuY3Rpb24oZSx0LG4scixpKXtlLmZpbGxTdHlsZT1gcmdiYShgK3QrYCxgK24rYCxgK3IrYCxgK2krYClgfSxjQy5lbGVGaWxsU3R5bGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXQucHN0eWxlKGBiYWNrZ3JvdW5kLWZpbGxgKS52YWx1ZTtpZihyPT09YGxpbmVhci1ncmFkaWVudGB8fHI9PT1gcmFkaWFsLWdyYWRpZW50YCl0aGlzLmdyYWRpZW50RmlsbFN0eWxlKGUsdCxyLG4pO2Vsc2V7dmFyIGk9dC5wc3R5bGUoYGJhY2tncm91bmQtY29sb3JgKS52YWx1ZTt0aGlzLmNvbG9yRmlsbFN0eWxlKGUsaVswXSxpWzFdLGlbMl0sbil9fSxjQy5ncmFkaWVudFN0cm9rZVN0eWxlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuY3JlYXRlR3JhZGllbnRTdHlsZUZvcihlLGBsaW5lYCx0LG4scik7aWYoIWkpcmV0dXJuIG51bGw7ZS5zdHJva2VTdHlsZT1pfSxjQy5jb2xvclN0cm9rZVN0eWxlPWZ1bmN0aW9uKGUsdCxuLHIsaSl7ZS5zdHJva2VTdHlsZT1gcmdiYShgK3QrYCxgK24rYCxgK3IrYCxgK2krYClgfSxjQy5lbGVTdHJva2VTdHlsZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dC5wc3R5bGUoYGxpbmUtZmlsbGApLnZhbHVlO2lmKHI9PT1gbGluZWFyLWdyYWRpZW50YHx8cj09PWByYWRpYWwtZ3JhZGllbnRgKXRoaXMuZ3JhZGllbnRTdHJva2VTdHlsZShlLHQscixuKTtlbHNle3ZhciBpPXQucHN0eWxlKGBsaW5lLWNvbG9yYCkudmFsdWU7dGhpcy5jb2xvclN0cm9rZVN0eWxlKGUsaVswXSxpWzFdLGlbMl0sbil9fSxjQy5tYXRjaENhbnZhc1NpemU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuZGF0YSxyPXQuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGk9clsyXSxhPXJbM10sbz10LmdldFBpeGVsUmF0aW8oKSxzPXQubW90aW9uQmx1clB4UmF0aW87KGU9PT10LmRhdGEuYnVmZmVyQ2FudmFzZXNbdC5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8ZT09PXQuZGF0YS5idWZmZXJDYW52YXNlc1t0Lk1PVElPTkJMVVJfQlVGRkVSX0RSQUddKSYmKG89cyk7dmFyIGM9aSpvLGw9YSpvLHU7aWYoYyE9PXQuY2FudmFzV2lkdGh8fGwhPT10LmNhbnZhc0hlaWdodCl7dC5mb250Q2FjaGVzPW51bGw7dmFyIGQ9bi5jYW52YXNDb250YWluZXI7ZC5zdHlsZS53aWR0aD1pK2BweGAsZC5zdHlsZS5oZWlnaHQ9YStgcHhgO2Zvcih2YXIgZj0wO2Y8dC5DQU5WQVNfTEFZRVJTO2YrKyl1PW4uY2FudmFzZXNbZl0sdS53aWR0aD1jLHUuaGVpZ2h0PWwsdS5zdHlsZS53aWR0aD1pK2BweGAsdS5zdHlsZS5oZWlnaHQ9YStgcHhgO2Zvcih2YXIgZj0wO2Y8dC5CVUZGRVJfQ09VTlQ7ZisrKXU9bi5idWZmZXJDYW52YXNlc1tmXSx1LndpZHRoPWMsdS5oZWlnaHQ9bCx1LnN0eWxlLndpZHRoPWkrYHB4YCx1LnN0eWxlLmhlaWdodD1hK2BweGA7dC50ZXh0dXJlTXVsdD0xLG88PTEmJih1PW4uYnVmZmVyQ2FudmFzZXNbdC5URVhUVVJFX0JVRkZFUl0sdC50ZXh0dXJlTXVsdD0yLHUud2lkdGg9Yyp0LnRleHR1cmVNdWx0LHUuaGVpZ2h0PWwqdC50ZXh0dXJlTXVsdCksdC5jYW52YXNXaWR0aD1jLHQuY2FudmFzSGVpZ2h0PWwsdC5waXhlbFJhdGlvPW99fSxjQy5yZW5kZXJUbz1mdW5jdGlvbihlLHQsbixyKXt0aGlzLnJlbmRlcih7Zm9yY2VkQ29udGV4dDplLGZvcmNlZFpvb206dCxmb3JjZWRQYW46bixkcmF3QWxsTGF5ZXJzOiEwLGZvcmNlZFB4UmF0aW86cn0pfSxjQy5jbGVhckNhbnZhcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmRhdGE7ZnVuY3Rpb24gbih0KXt0LmNsZWFyUmVjdCgwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCl9bih0LmNvbnRleHRzW2UuTk9ERV0pLG4odC5jb250ZXh0c1tlLkRSQUddKX0sY0MucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZXx8PUh1KCk7dmFyIG49dC5jeSxyPWUuZm9yY2VkQ29udGV4dCxpPWUuZHJhd0FsbExheWVycyxhPWUuZHJhd09ubHlOb2RlTGF5ZXIsbz1lLmZvcmNlZFpvb20scz1lLmZvcmNlZFBhbixjPWUuZm9yY2VkUHhSYXRpbz09PXZvaWQgMD90aGlzLmdldFBpeGVsUmF0aW8oKTplLmZvcmNlZFB4UmF0aW8sbD10LmRhdGEsdT1sLmNhbnZhc05lZWRzUmVkcmF3LGQ9dC50ZXh0dXJlT25WaWV3cG9ydCYmIXImJih0LnBpbmNoaW5nfHx0LmhvdmVyRGF0YS5kcmFnZ2luZ3x8dC5zd2lwZVBhbm5pbmd8fHQuZGF0YS53aGVlbFpvb21pbmcpLGY9ZS5tb3Rpb25CbHVyPT09dm9pZCAwP3QubW90aW9uQmx1cjplLm1vdGlvbkJsdXIscD10Lm1vdGlvbkJsdXJQeFJhdGlvLG09bi5oYXNDb21wb3VuZE5vZGVzKCksaD10LmhvdmVyRGF0YS5kcmFnZ2luZ0VsZXMsZz0hISh0LmhvdmVyRGF0YS5zZWxlY3Rpbmd8fHQudG91Y2hEYXRhLnNlbGVjdGluZyk7Zj1mJiYhciYmdC5tb3Rpb25CbHVyRW5hYmxlZCYmIWc7dmFyIF89ZjtyfHwodC5wcmV2UHhSYXRpbyE9PWMmJih0LmludmFsaWRhdGVDb250YWluZXJDbGllbnRDb29yZHNDYWNoZSgpLHQubWF0Y2hDYW52YXNTaXplKHQuY29udGFpbmVyKSx0LnJlZHJhd0hpbnQoYGVsZXNgLCEwKSx0LnJlZHJhd0hpbnQoYGRyYWdgLCEwKSksdC5wcmV2UHhSYXRpbz1jKSwhciYmdC5tb3Rpb25CbHVyVGltZW91dCYmY2xlYXJUaW1lb3V0KHQubW90aW9uQmx1clRpbWVvdXQpLGYmJih0Lm1iRnJhbWVzPz89MCx0Lm1iRnJhbWVzKyssdC5tYkZyYW1lczwzJiYoXz0hMSksdC5tYkZyYW1lcz50Lm1pbk1iTG93UXVhbEZyYW1lcyYmKHQubW90aW9uQmx1clB4UmF0aW89dC5tYlB4UkJsdXJyeSkpLHQuY2xlYXJpbmdNb3Rpb25CbHVyJiYodC5tb3Rpb25CbHVyUHhSYXRpbz0xKSx0LnRleHR1cmVEcmF3TGFzdEZyYW1lJiYhZCYmKHVbdC5OT0RFXT0hMCx1W3QuU0VMRUNUX0JPWF09ITApO3ZhciB2PW4uc3R5bGUoKSx5PW4uem9vbSgpLGI9bz09PXZvaWQgMD95Om8seD1uLnBhbigpLFM9e3g6eC54LHk6eC55fSxDPXt6b29tOnkscGFuOnt4OngueCx5OngueX19LHc9dC5wcmV2Vmlld3BvcnQ7dyE9PXZvaWQgMCYmQy56b29tPT09dy56b29tJiZDLnBhbi54PT09dy5wYW4ueCYmQy5wYW4ueT09PXcucGFuLnkmJighaHx8bSkmJih0Lm1vdGlvbkJsdXJQeFJhdGlvPTEpLHMmJihTPXMpLGIqPWMsUy54Kj1jLFMueSo9Yzt2YXIgVD10LmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7ZnVuY3Rpb24gRShlLG4scixpLGEpe3ZhciBvPWUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO2UuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWBkZXN0aW5hdGlvbi1vdXRgLHQuY29sb3JGaWxsU3R5bGUoZSwyNTUsMjU1LDI1NSx0Lm1vdGlvbkJsdXJUcmFuc3BhcmVuY3kpLGUuZmlsbFJlY3QobixyLGksYSksZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249b31mdW5jdGlvbiBEKGUsbil7dmFyIGEsYyx1LGQ7IXQuY2xlYXJpbmdNb3Rpb25CbHVyJiYoZT09PWwuYnVmZmVyQ29udGV4dHNbdC5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXXx8ZT09PWwuYnVmZmVyQ29udGV4dHNbdC5NT1RJT05CTFVSX0JVRkZFUl9EUkFHXSk/KGE9e3g6eC54KnAseTp4LnkqcH0sYz15KnAsdT10LmNhbnZhc1dpZHRoKnAsZD10LmNhbnZhc0hlaWdodCpwKTooYT1TLGM9Yix1PXQuY2FudmFzV2lkdGgsZD10LmNhbnZhc0hlaWdodCksZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLG49PT1gbW90aW9uQmx1cmA/RShlLDAsMCx1LGQpOiFyJiYobj09PXZvaWQgMHx8bikmJmUuY2xlYXJSZWN0KDAsMCx1LGQpLGl8fChlLnRyYW5zbGF0ZShhLngsYS55KSxlLnNjYWxlKGMsYykpLHMmJmUudHJhbnNsYXRlKHMueCxzLnkpLG8mJmUuc2NhbGUobyxvKX1pZihkfHwodC50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMSksZCl7aWYodC50ZXh0dXJlRHJhd0xhc3RGcmFtZT0hMCwhdC50ZXh0dXJlQ2FjaGUpe3QudGV4dHVyZUNhY2hlPXt9LHQudGV4dHVyZUNhY2hlLmJiPW4ubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSx0LnRleHR1cmVDYWNoZS50ZXh0dXJlPXQuZGF0YS5idWZmZXJDYW52YXNlc1t0LlRFWFRVUkVfQlVGRkVSXTt2YXIgTz10LmRhdGEuYnVmZmVyQ29udGV4dHNbdC5URVhUVVJFX0JVRkZFUl07Ty5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLE8uY2xlYXJSZWN0KDAsMCx0LmNhbnZhc1dpZHRoKnQudGV4dHVyZU11bHQsdC5jYW52YXNIZWlnaHQqdC50ZXh0dXJlTXVsdCksdC5yZW5kZXIoe2ZvcmNlZENvbnRleHQ6TyxkcmF3T25seU5vZGVMYXllcjohMCxmb3JjZWRQeFJhdGlvOmMqdC50ZXh0dXJlTXVsdH0pO3ZhciBDPXQudGV4dHVyZUNhY2hlLnZpZXdwb3J0PXt6b29tOm4uem9vbSgpLHBhbjpuLnBhbigpLHdpZHRoOnQuY2FudmFzV2lkdGgsaGVpZ2h0OnQuY2FudmFzSGVpZ2h0fTtDLm1wYW49e3g6KDAtQy5wYW4ueCkvQy56b29tLHk6KDAtQy5wYW4ueSkvQy56b29tfX11W3QuRFJBR109ITEsdVt0Lk5PREVdPSExO3ZhciBrPWwuY29udGV4dHNbdC5OT0RFXSxBPXQudGV4dHVyZUNhY2hlLnRleHR1cmUsQz10LnRleHR1cmVDYWNoZS52aWV3cG9ydDtrLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZj9FKGssMCwwLEMud2lkdGgsQy5oZWlnaHQpOmsuY2xlYXJSZWN0KDAsMCxDLndpZHRoLEMuaGVpZ2h0KTt2YXIgaj12LmNvcmUoYG91dHNpZGUtdGV4dHVyZS1iZy1jb2xvcmApLnZhbHVlLE09di5jb3JlKGBvdXRzaWRlLXRleHR1cmUtYmctb3BhY2l0eWApLnZhbHVlO3QuY29sb3JGaWxsU3R5bGUoayxqWzBdLGpbMV0salsyXSxNKSxrLmZpbGxSZWN0KDAsMCxDLndpZHRoLEMuaGVpZ2h0KTt2YXIgeT1uLnpvb20oKTtEKGssITEpLGsuY2xlYXJSZWN0KEMubXBhbi54LEMubXBhbi55LEMud2lkdGgvQy56b29tL2MsQy5oZWlnaHQvQy56b29tL2MpLGsuZHJhd0ltYWdlKEEsQy5tcGFuLngsQy5tcGFuLnksQy53aWR0aC9DLnpvb20vYyxDLmhlaWdodC9DLnpvb20vYyl9ZWxzZSB0LnRleHR1cmVPblZpZXdwb3J0JiYhciYmKHQudGV4dHVyZUNhY2hlPW51bGwpO3ZhciBOPW4uZXh0ZW50KCksUD10LnBpbmNoaW5nfHx0LmhvdmVyRGF0YS5kcmFnZ2luZ3x8dC5zd2lwZVBhbm5pbmd8fHQuZGF0YS53aGVlbFpvb21pbmd8fHQuaG92ZXJEYXRhLmRyYWdnaW5nRWxlc3x8dC5jeS5hbmltYXRlZCgpLEY9dC5oaWRlRWRnZXNPblZpZXdwb3J0JiZQLEk9W107aWYoSVt0Lk5PREVdPSF1W3QuTk9ERV0mJmYmJiF0LmNsZWFyZWRGb3JNb3Rpb25CbHVyW3QuTk9ERV18fHQuY2xlYXJpbmdNb3Rpb25CbHVyLElbdC5OT0RFXSYmKHQuY2xlYXJlZEZvck1vdGlvbkJsdXJbdC5OT0RFXT0hMCksSVt0LkRSQUddPSF1W3QuRFJBR10mJmYmJiF0LmNsZWFyZWRGb3JNb3Rpb25CbHVyW3QuRFJBR118fHQuY2xlYXJpbmdNb3Rpb25CbHVyLElbdC5EUkFHXSYmKHQuY2xlYXJlZEZvck1vdGlvbkJsdXJbdC5EUkFHXT0hMCksdVt0Lk5PREVdfHxpfHxhfHxJW3QuTk9ERV0pe3ZhciBMPWYmJiFJW3QuTk9ERV0mJnAhPT0xLGs9cnx8KEw/dC5kYXRhLmJ1ZmZlckNvbnRleHRzW3QuTU9USU9OQkxVUl9CVUZGRVJfTk9ERV06bC5jb250ZXh0c1t0Lk5PREVdKTtEKGssZiYmIUw/YG1vdGlvbkJsdXJgOnZvaWQgMCksRj90LmRyYXdDYWNoZWROb2RlcyhrLFQubm9uZHJhZyxjLE4pOnQuZHJhd0xheWVyZWRFbGVtZW50cyhrLFQubm9uZHJhZyxjLE4pLHQuZGVidWcmJnQuZHJhd0RlYnVnUG9pbnRzKGssVC5ub25kcmFnKSwhaSYmIWYmJih1W3QuTk9ERV09ITEpfWlmKCFhJiYodVt0LkRSQUddfHxpfHxJW3QuRFJBR10pKXt2YXIgTD1mJiYhSVt0LkRSQUddJiZwIT09MSxrPXJ8fChMP3QuZGF0YS5idWZmZXJDb250ZXh0c1t0Lk1PVElPTkJMVVJfQlVGRkVSX0RSQUddOmwuY29udGV4dHNbdC5EUkFHXSk7RChrLGYmJiFMP2Btb3Rpb25CbHVyYDp2b2lkIDApLEY/dC5kcmF3Q2FjaGVkTm9kZXMoayxULmRyYWcsYyxOKTp0LmRyYXdDYWNoZWRFbGVtZW50cyhrLFQuZHJhZyxjLE4pLHQuZGVidWcmJnQuZHJhd0RlYnVnUG9pbnRzKGssVC5kcmFnKSwhaSYmIWYmJih1W3QuRFJBR109ITEpfWlmKHRoaXMuZHJhd1NlbGVjdGlvblJlY3RhbmdsZShlLEQpLGYmJnAhPT0xKXt2YXIgUj1sLmNvbnRleHRzW3QuTk9ERV0sej10LmRhdGEuYnVmZmVyQ2FudmFzZXNbdC5NT1RJT05CTFVSX0JVRkZFUl9OT0RFXSxCPWwuY29udGV4dHNbdC5EUkFHXSxWPXQuZGF0YS5idWZmZXJDYW52YXNlc1t0Lk1PVElPTkJMVVJfQlVGRkVSX0RSQUddLEg9ZnVuY3Rpb24oZSxuLHIpe2Uuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxyfHwhXz9lLmNsZWFyUmVjdCgwLDAsdC5jYW52YXNXaWR0aCx0LmNhbnZhc0hlaWdodCk6RShlLDAsMCx0LmNhbnZhc1dpZHRoLHQuY2FudmFzSGVpZ2h0KTt2YXIgaT1wO2UuZHJhd0ltYWdlKG4sMCwwLHQuY2FudmFzV2lkdGgqaSx0LmNhbnZhc0hlaWdodCppLDAsMCx0LmNhbnZhc1dpZHRoLHQuY2FudmFzSGVpZ2h0KX07KHVbdC5OT0RFXXx8SVt0Lk5PREVdKSYmKEgoUix6LElbdC5OT0RFXSksdVt0Lk5PREVdPSExKSwodVt0LkRSQUddfHxJW3QuRFJBR10pJiYoSChCLFYsSVt0LkRSQUddKSx1W3QuRFJBR109ITEpfXQucHJldlZpZXdwb3J0PUMsdC5jbGVhcmluZ01vdGlvbkJsdXImJih0LmNsZWFyaW5nTW90aW9uQmx1cj0hMSx0Lm1vdGlvbkJsdXJDbGVhcmVkPSEwLHQubW90aW9uQmx1cj0hMCksZiYmKHQubW90aW9uQmx1clRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QubW90aW9uQmx1clRpbWVvdXQ9bnVsbCx0LmNsZWFyZWRGb3JNb3Rpb25CbHVyW3QuTk9ERV09ITEsdC5jbGVhcmVkRm9yTW90aW9uQmx1clt0LkRSQUddPSExLHQubW90aW9uQmx1cj0hMSx0LmNsZWFyaW5nTW90aW9uQmx1cj0hZCx0Lm1iRnJhbWVzPTAsdVt0Lk5PREVdPSEwLHVbdC5EUkFHXT0hMCx0LnJlZHJhdygpfSxsQykpLHJ8fG4uZW1pdChgcmVuZGVyYCl9O3ZhciB1QztjQy5kcmF3U2VsZWN0aW9uUmVjdGFuZ2xlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uY3ksaT1uLmRhdGEsYT1yLnN0eWxlKCksbz1lLmRyYXdPbmx5Tm9kZUxheWVyLHM9ZS5kcmF3QWxsTGF5ZXJzLGM9aS5jYW52YXNOZWVkc1JlZHJhdyxsPWUuZm9yY2VkQ29udGV4dDtpZihuLnNob3dGcHN8fCFvJiZjW24uU0VMRUNUX0JPWF0mJiFzKXt2YXIgdT1sfHxpLmNvbnRleHRzW24uU0VMRUNUX0JPWF07aWYodCh1KSxuLnNlbGVjdGlvbls0XT09MSYmKG4uaG92ZXJEYXRhLnNlbGVjdGluZ3x8bi50b3VjaERhdGEuc2VsZWN0aW5nKSl7dmFyIGQ9bi5jeS56b29tKCksZj1hLmNvcmUoYHNlbGVjdGlvbi1ib3gtYm9yZGVyLXdpZHRoYCkudmFsdWUvZDt1LmxpbmVXaWR0aD1mLHUuZmlsbFN0eWxlPWByZ2JhKGArYS5jb3JlKGBzZWxlY3Rpb24tYm94LWNvbG9yYCkudmFsdWVbMF0rYCxgK2EuY29yZShgc2VsZWN0aW9uLWJveC1jb2xvcmApLnZhbHVlWzFdK2AsYCthLmNvcmUoYHNlbGVjdGlvbi1ib3gtY29sb3JgKS52YWx1ZVsyXStgLGArYS5jb3JlKGBzZWxlY3Rpb24tYm94LW9wYWNpdHlgKS52YWx1ZStgKWAsdS5maWxsUmVjdChuLnNlbGVjdGlvblswXSxuLnNlbGVjdGlvblsxXSxuLnNlbGVjdGlvblsyXS1uLnNlbGVjdGlvblswXSxuLnNlbGVjdGlvblszXS1uLnNlbGVjdGlvblsxXSksZj4wJiYodS5zdHJva2VTdHlsZT1gcmdiYShgK2EuY29yZShgc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3JgKS52YWx1ZVswXStgLGArYS5jb3JlKGBzZWxlY3Rpb24tYm94LWJvcmRlci1jb2xvcmApLnZhbHVlWzFdK2AsYCthLmNvcmUoYHNlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yYCkudmFsdWVbMl0rYCxgK2EuY29yZShgc2VsZWN0aW9uLWJveC1vcGFjaXR5YCkudmFsdWUrYClgLHUuc3Ryb2tlUmVjdChuLnNlbGVjdGlvblswXSxuLnNlbGVjdGlvblsxXSxuLnNlbGVjdGlvblsyXS1uLnNlbGVjdGlvblswXSxuLnNlbGVjdGlvblszXS1uLnNlbGVjdGlvblsxXSkpfWlmKGkuYmdBY3RpdmVQb3Npc3Rpb24mJiFuLmhvdmVyRGF0YS5zZWxlY3Rpbmcpe3ZhciBkPW4uY3kuem9vbSgpLHA9aS5iZ0FjdGl2ZVBvc2lzdGlvbjt1LmZpbGxTdHlsZT1gcmdiYShgK2EuY29yZShgYWN0aXZlLWJnLWNvbG9yYCkudmFsdWVbMF0rYCxgK2EuY29yZShgYWN0aXZlLWJnLWNvbG9yYCkudmFsdWVbMV0rYCxgK2EuY29yZShgYWN0aXZlLWJnLWNvbG9yYCkudmFsdWVbMl0rYCxgK2EuY29yZShgYWN0aXZlLWJnLW9wYWNpdHlgKS52YWx1ZStgKWAsdS5iZWdpblBhdGgoKSx1LmFyYyhwLngscC55LGEuY29yZShgYWN0aXZlLWJnLXNpemVgKS5wZlZhbHVlL2QsMCwyKk1hdGguUEkpLHUuZmlsbCgpfXZhciBtPW4ubGFzdFJlZHJhd1RpbWU7aWYobi5zaG93RnBzJiZtKXttPU1hdGgucm91bmQobSk7dmFyIGg9TWF0aC5yb3VuZCgxZTMvbSksZz1gMSBmcmFtZSA9IGArbStgIG1zID0gYCtoK2AgZnBzYDt1LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdS5maWxsU3R5bGU9YHJnYmEoMjU1LCAwLCAwLCAwLjc1KWAsdS5zdHJva2VTdHlsZT1gcmdiYSgyNTUsIDAsIDAsIDAuNzUpYCx1LmZvbnQ9YDMwcHggQXJpYWxgLHVDfHw9dS5tZWFzdXJlVGV4dChnKS5hY3R1YWxCb3VuZGluZ0JveEFzY2VudCx1LmZpbGxUZXh0KGcsMCx1QyksdS5zdHJva2VSZWN0KDAsdUMrMTAsMjUwLDIwKSx1LmZpbGxSZWN0KDAsdUMrMTAsMjUwKk1hdGgubWluKGgvNjAsMSksMjApfXN8fChjW24uU0VMRUNUX0JPWF09ITEpfX07ZnVuY3Rpb24gZEMoZSx0LG4pe3ZhciByPWUuY3JlYXRlU2hhZGVyKHQpO2lmKGUuc2hhZGVyU291cmNlKHIsbiksZS5jb21waWxlU2hhZGVyKHIpLCFlLmdldFNoYWRlclBhcmFtZXRlcihyLGUuQ09NUElMRV9TVEFUVVMpKXRocm93IEVycm9yKGUuZ2V0U2hhZGVySW5mb0xvZyhyKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZkMoZSx0LG4pe3ZhciByPWRDKGUsZS5WRVJURVhfU0hBREVSLHQpLGk9ZEMoZSxlLkZSQUdNRU5UX1NIQURFUixuKSxhPWUuY3JlYXRlUHJvZ3JhbSgpO2lmKGUuYXR0YWNoU2hhZGVyKGEsciksZS5hdHRhY2hTaGFkZXIoYSxpKSxlLmxpbmtQcm9ncmFtKGEpLCFlLmdldFByb2dyYW1QYXJhbWV0ZXIoYSxlLkxJTktfU1RBVFVTKSl0aHJvdyBFcnJvcihgQ291bGQgbm90IGluaXRpYWxpemUgc2hhZGVyc2ApO3JldHVybiBhfWZ1bmN0aW9uIHBDKGUsdCxuKXtuPT09dm9pZCAwJiYobj10KTt2YXIgcj1lLm1ha2VPZmZzY3JlZW5DYW52YXModCxuKSxpPXIuY29udGV4dD1yLmdldENvbnRleHQoYDJkYCk7cmV0dXJuIHIuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5jbGVhclJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpfSxyLmNsZWFyKCkscn1mdW5jdGlvbiBtQyhlKXt2YXIgdD1lLnBpeGVsUmF0aW8sbj1lLmN5Lnpvb20oKSxyPWUuY3kucGFuKCk7cmV0dXJue3pvb206bip0LHBhbjp7eDpyLngqdCx5OnIueSp0fX19ZnVuY3Rpb24gaEMoZSl7dmFyIHQ9ZS5waXhlbFJhdGlvO3JldHVybiBlLmN5Lnpvb20oKSp0fWZ1bmN0aW9uIGdDKGUsdCxuLHIsaSl7dmFyIGE9cipuK3QueCxvPWkqbit0Lnk7cmV0dXJuIG89TWF0aC5yb3VuZChlLmNhbnZhc0hlaWdodC1vKSxbYSxvXX1mdW5jdGlvbiBfQyhlLHQpe3JldHVybiB0LnBpY2tpbmc/ITA6ZS5wc3R5bGUoYGJhY2tncm91bmQtZmlsbGApLnZhbHVlIT09YHNvbGlkYHx8ZS5wc3R5bGUoYGJhY2tncm91bmQtaW1hZ2VgKS5zdHJWYWx1ZSE9PWBub25lYD8hMTplLnBzdHlsZShgYm9yZGVyLXdpZHRoYCkudmFsdWU9PT0wfHxlLnBzdHlsZShgYm9yZGVyLW9wYWNpdHlgKS52YWx1ZT09PTB8fGUucHN0eWxlKGBib3JkZXItc3R5bGVgKS52YWx1ZT09PWBzb2xpZGB9ZnVuY3Rpb24gdkMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHlDKGUsdCxuKXt2YXIgcj1lWzBdLzI1NSxpPWVbMV0vMjU1LGE9ZVsyXS8yNTUsbz10LHM9bnx8WywsLCxdO3JldHVybiBzWzBdPXIqbyxzWzFdPWkqbyxzWzJdPWEqbyxzWzNdPW8sc31mdW5jdGlvbiBiQyhlLHQpe3ZhciBuPXR8fFssLCwsXTtyZXR1cm4gblswXT0oKGV8MCkmMjU1KS8yNTUsblsxXT0oZT4+OCYyNTUpLzI1NSxuWzJdPShlPj4xNiYyNTUpLzI1NSxuWzNdPShlPj4yNCYyNTUpLzI1NSxufWZ1bmN0aW9uIHhDKGUpe3JldHVybiBlWzBdKyhlWzFdPDw4KSsoZVsyXTw8MTYpKyhlWzNdPDwyNCl9ZnVuY3Rpb24gU0MoZSx0KXt2YXIgbj1lLmNyZWF0ZVRleHR1cmUoKTtyZXR1cm4gbi5idWZmZXI9ZnVuY3Rpb24odCl7ZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsbiksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9TLGUuQ0xBTVBfVE9fRURHRSksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfV1JBUF9ULGUuQ0xBTVBfVE9fRURHRSksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUixlLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksZS5waXhlbFN0b3JlaShlLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCwhMCksZS50ZXhJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLGUuUkdCQSxlLlJHQkEsZS5VTlNJR05FRF9CWVRFLHQpLGUuZ2VuZXJhdGVNaXBtYXAoZS5URVhUVVJFXzJEKSxlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCxudWxsKX0sbi5kZWxldGVUZXh0dXJlPWZ1bmN0aW9uKCl7ZS5kZWxldGVUZXh0dXJlKG4pfSxufWZ1bmN0aW9uIENDKGUsdCl7c3dpdGNoKHQpe2Nhc2VgZmxvYXRgOnJldHVyblsxLGUuRkxPQVQsNF07Y2FzZWB2ZWMyYDpyZXR1cm5bMixlLkZMT0FULDRdO2Nhc2VgdmVjM2A6cmV0dXJuWzMsZS5GTE9BVCw0XTtjYXNlYHZlYzRgOnJldHVybls0LGUuRkxPQVQsNF07Y2FzZWBpbnRgOnJldHVyblsxLGUuSU5ULDRdO2Nhc2VgaXZlYzJgOnJldHVyblsyLGUuSU5ULDRdfX1mdW5jdGlvbiB3QyhlLHQsbil7c3dpdGNoKHQpe2Nhc2UgZS5GTE9BVDpyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShuKTtjYXNlIGUuSU5UOnJldHVybiBuZXcgSW50MzJBcnJheShuKX19ZnVuY3Rpb24gVEMoZSx0LG4scixpLGEpe3N3aXRjaCh0KXtjYXNlIGUuRkxPQVQ6cmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkobi5idWZmZXIsYSpyLGkpO2Nhc2UgZS5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KG4uYnVmZmVyLGEqcixpKX19ZnVuY3Rpb24gRUMoZSx0LG4scil7dmFyIGk9bWMoQ0MoZSx0KSwyKSxhPWlbMF0sbz1pWzFdLHM9d0MoZSxvLHIpLGM9ZS5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLGMpLGUuYnVmZmVyRGF0YShlLkFSUkFZX0JVRkZFUixzLGUuU1RBVElDX0RSQVcpLG89PT1lLkZMT0FUP2UudmVydGV4QXR0cmliUG9pbnRlcihuLGEsbywhMSwwLDApOm89PT1lLklOVCYmZS52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihuLGEsbywwLDApLGUuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobiksZS5iaW5kQnVmZmVyKGUuQVJSQVlfQlVGRkVSLG51bGwpLGN9ZnVuY3Rpb24gREMoZSx0LG4scil7dmFyIGk9bWMoQ0MoZSxuKSwzKSxhPWlbMF0sbz1pWzFdLHM9aVsyXSxjPXdDKGUsbyx0KmEpLGw9YSpzLHU9ZS5jcmVhdGVCdWZmZXIoKTtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdSksZS5idWZmZXJEYXRhKGUuQVJSQVlfQlVGRkVSLHQqbCxlLkRZTkFNSUNfRFJBVyksZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShyKSxvPT09ZS5GTE9BVD9lLnZlcnRleEF0dHJpYlBvaW50ZXIocixhLG8sITEsbCwwKTpvPT09ZS5JTlQmJmUudmVydGV4QXR0cmliSVBvaW50ZXIocixhLG8sbCwwKSxlLnZlcnRleEF0dHJpYkRpdmlzb3IociwxKSxlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsbnVsbCk7Zm9yKHZhciBkPUFycmF5KHQpLGY9MDtmPHQ7ZisrKWRbZl09VEMoZSxvLGMsbCxhLGYpO3JldHVybiB1LmRhdGFBcnJheT1jLHUuc3RyaWRlPWwsdS5zaXplPWEsdS5nZXRWaWV3PWZ1bmN0aW9uKGUpe3JldHVybiBkW2VdfSx1LnNldFBvaW50PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1kW2VdO3JbMF09dCxyWzFdPW59LHUuYnVmZmVyU3ViRGF0YT1mdW5jdGlvbih0KXtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdSksdD9lLmJ1ZmZlclN1YkRhdGEoZS5BUlJBWV9CVUZGRVIsMCxjLDAsdCphKTplLmJ1ZmZlclN1YkRhdGEoZS5BUlJBWV9CVUZGRVIsMCxjKX0sdX1mdW5jdGlvbiBPQyhlLHQsbil7Zm9yKHZhciByPTksaT1uZXcgRmxvYXQzMkFycmF5KHQqciksYT1BcnJheSh0KSxvPTA7bzx0O28rKyl7dmFyIHM9bypyKjQ7YVtvXT1uZXcgRmxvYXQzMkFycmF5KGkuYnVmZmVyLHMscil9dmFyIGM9ZS5jcmVhdGVCdWZmZXIoKTtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsYyksZS5idWZmZXJEYXRhKGUuQVJSQVlfQlVGRkVSLGkuYnl0ZUxlbmd0aCxlLkRZTkFNSUNfRFJBVyk7Zm9yKHZhciBsPTA7bDwzO2wrKyl7dmFyIHU9bitsO2UuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodSksZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKHUsMyxlLkZMT0FULCExLDM2LGwqMTIpLGUudmVydGV4QXR0cmliRGl2aXNvcih1LDEpfXJldHVybiBlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsbnVsbCksYy5nZXRNYXRyaXhWaWV3PWZ1bmN0aW9uKGUpe3JldHVybiBhW2VdfSxjLnNldERhdGE9ZnVuY3Rpb24oZSx0KXthW3RdLnNldChlLDApfSxjLmJ1ZmZlclN1YkRhdGE9ZnVuY3Rpb24oKXtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsYyksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsaSl9LGN9ZnVuY3Rpb24ga0MoZSl7dmFyIHQ9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpO2UuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsdCk7dmFyIG49ZS5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELG4pLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsZS5MSU5FQVIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLkNMQU1QX1RPX0VER0UpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfVCxlLkNMQU1QX1RPX0VER0UpLGUuZnJhbWVidWZmZXJUZXh0dXJlMkQoZS5GUkFNRUJVRkZFUixlLkNPTE9SX0FUVEFDSE1FTlQwLGUuVEVYVFVSRV8yRCxuLDApLGUuYmluZEZyYW1lYnVmZmVyKGUuRlJBTUVCVUZGRVIsbnVsbCksdC5zZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRTaXplcz1mdW5jdGlvbih0LHIpe2UuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELG4pLGUudGV4SW1hZ2UyRChlLlRFWFRVUkVfMkQsMCxlLlJHQkEsdCxyLDAsZS5SR0JBLGUuVU5TSUdORURfQllURSxudWxsKX0sdH12YXIgQUM9dHlwZW9mIEZsb2F0MzJBcnJheTxgdWA/RmxvYXQzMkFycmF5OkFycmF5O01hdGguaHlwb3R8fChNYXRoLmh5cG90PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoO3QtLTspZSs9YXJndW1lbnRzW3RdKmFyZ3VtZW50c1t0XTtyZXR1cm4gTWF0aC5zcXJ0KGUpfSk7ZnVuY3Rpb24gakMoKXt2YXIgZT1uZXcgQUMoOSk7cmV0dXJuIEFDIT1GbG9hdDMyQXJyYXkmJihlWzFdPTAsZVsyXT0wLGVbM109MCxlWzVdPTAsZVs2XT0wLGVbN109MCksZVswXT0xLGVbNF09MSxlWzhdPTEsZX1mdW5jdGlvbiBNQyhlKXtyZXR1cm4gZVswXT0xLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MSxlWzVdPTAsZVs2XT0wLGVbN109MCxlWzhdPTEsZX1mdW5jdGlvbiBOQyhlLHQsbil7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXSxzPXRbNF0sYz10WzVdLGw9dFs2XSx1PXRbN10sZD10WzhdLGY9blswXSxwPW5bMV0sbT1uWzJdLGg9blszXSxnPW5bNF0sXz1uWzVdLHY9bls2XSx5PW5bN10sYj1uWzhdO3JldHVybiBlWzBdPWYqcitwKm8rbSpsLGVbMV09ZippK3AqcyttKnUsZVsyXT1mKmErcCpjK20qZCxlWzNdPWgqcitnKm8rXypsLGVbNF09aCppK2cqcytfKnUsZVs1XT1oKmErZypjK18qZCxlWzZdPXYqcit5Km8rYipsLGVbN109dippK3kqcytiKnUsZVs4XT12KmEreSpjK2IqZCxlfWZ1bmN0aW9uIFBDKGUsdCxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdLHM9dFs0XSxjPXRbNV0sbD10WzZdLHU9dFs3XSxkPXRbOF0sZj1uWzBdLHA9blsxXTtyZXR1cm4gZVswXT1yLGVbMV09aSxlWzJdPWEsZVszXT1vLGVbNF09cyxlWzVdPWMsZVs2XT1mKnIrcCpvK2wsZVs3XT1mKmkrcCpzK3UsZVs4XT1mKmErcCpjK2QsZX1mdW5jdGlvbiBGQyhlLHQsbil7dmFyIHI9dFswXSxpPXRbMV0sYT10WzJdLG89dFszXSxzPXRbNF0sYz10WzVdLGw9dFs2XSx1PXRbN10sZD10WzhdLGY9TWF0aC5zaW4obikscD1NYXRoLmNvcyhuKTtyZXR1cm4gZVswXT1wKnIrZipvLGVbMV09cCppK2YqcyxlWzJdPXAqYStmKmMsZVszXT1wKm8tZipyLGVbNF09cCpzLWYqaSxlWzVdPXAqYy1mKmEsZVs2XT1sLGVbN109dSxlWzhdPWQsZX1mdW5jdGlvbiBJQyhlLHQsbil7dmFyIHI9blswXSxpPW5bMV07cmV0dXJuIGVbMF09cip0WzBdLGVbMV09cip0WzFdLGVbMl09cip0WzJdLGVbM109aSp0WzNdLGVbNF09aSp0WzRdLGVbNV09aSp0WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGV9ZnVuY3Rpb24gTEMoZSx0LG4pe3JldHVybiBlWzBdPTIvdCxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPS0yL24sZVs1XT0wLGVbNl09LTEsZVs3XT0xLGVbOF09MSxlfXZhciBSQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuLHIsaSl7YWModGhpcyxlKSx0aGlzLmRlYnVnSUQ9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjFlNCksdGhpcy5yPXQsdGhpcy50ZXhTaXplPW4sdGhpcy50ZXhSb3dzPXIsdGhpcy50ZXhIZWlnaHQ9TWF0aC5mbG9vcihuL3IpLHRoaXMuZW5hYmxlV3JhcHBpbmc9ITAsdGhpcy5sb2NrZWQ9ITEsdGhpcy50ZXh0dXJlPW51bGwsdGhpcy5uZWVkc0J1ZmZlcj0hMCx0aGlzLmZyZWVQb2ludGVyPXt4OjAscm93OjB9LHRoaXMua2V5VG9Mb2NhdGlvbj1uZXcgTWFwLHRoaXMuY2FudmFzPWkodCxuLG4pLHRoaXMuc2NyYXRjaD1pKHQsbix0aGlzLnRleEhlaWdodCxgc2NyYXRjaGApfXJldHVybiBzYyhlLFt7a2V5OmBsb2NrYCx2YWx1ZTpmdW5jdGlvbigpe3RoaXMubG9ja2VkPSEwfX0se2tleTpgZ2V0S2V5c2AsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNldCh0aGlzLmtleVRvTG9jYXRpb24ua2V5cygpKX19LHtrZXk6YGdldFNjYWxlYCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLncsbj1lLmgscj10aGlzLnRleEhlaWdodCxpPXRoaXMudGV4U2l6ZSxhPXIvbixvPXQqYSxzPW4qYTtyZXR1cm4gbz5pJiYoYT1pL3Qsbz10KmEscz1uKmEpLHtzY2FsZTphLHRleFc6byx0ZXhIOnN9fX0se2tleTpgZHJhd2AsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7aWYodGhpcy5sb2NrZWQpdGhyb3cgRXJyb3IoYGNhbid0IGRyYXcsIGF0bGFzIGlzIGxvY2tlZGApO3ZhciBpPXRoaXMudGV4U2l6ZSxhPXRoaXMudGV4Um93cyxvPXRoaXMudGV4SGVpZ2h0LHM9dGhpcy5nZXRTY2FsZSh0KSxjPXMuc2NhbGUsbD1zLnRleFcsdT1zLnRleEgsZD1mdW5jdGlvbihlLHIpe2lmKG4mJnIpe3ZhciBpPXIuY29udGV4dCxhPWUueCxzPWUucm93LGw9YSx1PW8qcztpLnNhdmUoKSxpLnRyYW5zbGF0ZShsLHUpLGkuc2NhbGUoYyxjKSxuKGksdCksaS5yZXN0b3JlKCl9fSxmPVtudWxsLG51bGxdLHA9ZnVuY3Rpb24oKXtkKHIuZnJlZVBvaW50ZXIsci5jYW52YXMpLGZbMF09e3g6ci5mcmVlUG9pbnRlci54LHk6ci5mcmVlUG9pbnRlci5yb3cqbyx3OmwsaDp1fSxmWzFdPXt4OnIuZnJlZVBvaW50ZXIueCtsLHk6ci5mcmVlUG9pbnRlci5yb3cqbyx3OjAsaDp1fSxyLmZyZWVQb2ludGVyLngrPWwsci5mcmVlUG9pbnRlci54PT1pJiYoci5mcmVlUG9pbnRlci54PTAsci5mcmVlUG9pbnRlci5yb3crKyl9LG09ZnVuY3Rpb24oKXt2YXIgZT1yLnNjcmF0Y2gsdD1yLmNhbnZhcztlLmNsZWFyKCksZCh7eDowLHJvdzowfSxlKTt2YXIgbj1pLXIuZnJlZVBvaW50ZXIueCxhPWwtbixzPW8sYz1yLmZyZWVQb2ludGVyLngscD1yLmZyZWVQb2ludGVyLnJvdypvLG09bjt0LmNvbnRleHQuZHJhd0ltYWdlKGUsMCwwLG0scyxjLHAsbSxzKSxmWzBdPXt4OmMseTpwLHc6bSxoOnV9O3ZhciBoPW4sZz0oci5mcmVlUG9pbnRlci5yb3crMSkqbyxfPWE7dCYmdC5jb250ZXh0LmRyYXdJbWFnZShlLGgsMCxfLHMsMCxnLF8scyksZlsxXT17eDowLHk6Zyx3Ol8saDp1fSxyLmZyZWVQb2ludGVyLng9YSxyLmZyZWVQb2ludGVyLnJvdysrfSxoPWZ1bmN0aW9uKCl7ci5mcmVlUG9pbnRlci54PTAsci5mcmVlUG9pbnRlci5yb3crK307aWYodGhpcy5mcmVlUG9pbnRlci54K2w8PWkpcCgpO2Vsc2UgaWYodGhpcy5mcmVlUG9pbnRlci5yb3c+PWEtMSlyZXR1cm4hMTtlbHNlIHRoaXMuZnJlZVBvaW50ZXIueD09PWk/KGgoKSxwKCkpOnRoaXMuZW5hYmxlV3JhcHBpbmc/bSgpOihoKCkscCgpKTtyZXR1cm4gdGhpcy5rZXlUb0xvY2F0aW9uLnNldChlLGYpLHRoaXMubmVlZHNCdWZmZXI9ITAsZn19LHtrZXk6YGdldE9mZnNldHNgLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmtleVRvTG9jYXRpb24uZ2V0KGUpfX0se2tleTpgaXNFbXB0eWAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mcmVlUG9pbnRlci54PT09MCYmdGhpcy5mcmVlUG9pbnRlci5yb3c9PT0wfX0se2tleTpgY2FuRml0YCx2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmxvY2tlZClyZXR1cm4hMTt2YXIgdD10aGlzLnRleFNpemUsbj10aGlzLnRleFJvd3Mscj10aGlzLmdldFNjYWxlKGUpLnRleFc7cmV0dXJuIHRoaXMuZnJlZVBvaW50ZXIueCtyPnQ/dGhpcy5mcmVlUG9pbnRlci5yb3c8bi0xOiEwfX0se2tleTpgYnVmZmVySWZOZWVkZWRgLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMudGV4dHVyZXx8PVNDKGUsdGhpcy5kZWJ1Z0lEKSx0aGlzLm5lZWRzQnVmZmVyJiYodGhpcy50ZXh0dXJlLmJ1ZmZlcih0aGlzLmNhbnZhcyksdGhpcy5uZWVkc0J1ZmZlcj0hMSx0aGlzLmxvY2tlZCYmKHRoaXMuY2FudmFzPW51bGwsdGhpcy5zY3JhdGNoPW51bGwpKX19LHtrZXk6YGRpc3Bvc2VgLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlJiY9KHRoaXMudGV4dHVyZS5kZWxldGVUZXh0dXJlKCksbnVsbCksdGhpcy5jYW52YXM9bnVsbCx0aGlzLnNjcmF0Y2g9bnVsbCx0aGlzLmxvY2tlZD0hMH19XSl9KCksekM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbixyLGkpe2FjKHRoaXMsZSksdGhpcy5yPXQsdGhpcy50ZXhTaXplPW4sdGhpcy50ZXhSb3dzPXIsdGhpcy5jcmVhdGVUZXh0dXJlQ2FudmFzPWksdGhpcy5hdGxhc2VzPVtdLHRoaXMuc3R5bGVLZXlUb0F0bGFzPW5ldyBNYXAsdGhpcy5tYXJrZWRLZXlzPW5ldyBTZXR9cmV0dXJuIHNjKGUsW3trZXk6YGdldEtleXNgLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5zdHlsZUtleVRvQXRsYXMua2V5cygpKX19LHtrZXk6YF9jcmVhdGVBdGxhc2AsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnIsdD10aGlzLnRleFNpemUsbj10aGlzLnRleFJvd3Mscj10aGlzLmNyZWF0ZVRleHR1cmVDYW52YXM7cmV0dXJuIG5ldyBSQyhlLHQsbixyKX19LHtrZXk6YF9nZXRTY3JhdGNoQ2FudmFzYCx2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnNjcmF0Y2gpe3ZhciBlPXRoaXMucix0PXRoaXMudGV4U2l6ZSxuPXRoaXMudGV4Um93cyxyPXRoaXMuY3JlYXRlVGV4dHVyZUNhbnZhcyxpPU1hdGguZmxvb3IodC9uKTt0aGlzLnNjcmF0Y2g9cihlLHQsaSxgc2NyYXRjaGApfXJldHVybiB0aGlzLnNjcmF0Y2h9fSx7a2V5OmBkcmF3YCx2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5zdHlsZUtleVRvQXRsYXMuZ2V0KGUpO3JldHVybiByfHwocj10aGlzLmF0bGFzZXNbdGhpcy5hdGxhc2VzLmxlbmd0aC0xXSxyJiZyLmNhbkZpdCh0KXx8KHImJnIubG9jaygpLHI9dGhpcy5fY3JlYXRlQXRsYXMoKSx0aGlzLmF0bGFzZXMucHVzaChyKSksci5kcmF3KGUsdCxuKSx0aGlzLnN0eWxlS2V5VG9BdGxhcy5zZXQoZSxyKSkscn19LHtrZXk6YGdldEF0bGFzYCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zdHlsZUtleVRvQXRsYXMuZ2V0KGUpfX0se2tleTpgaGFzQXRsYXNgLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0eWxlS2V5VG9BdGxhcy5oYXMoZSl9fSx7a2V5OmBtYXJrS2V5Rm9yR0NgLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubWFya2VkS2V5cy5hZGQoZSl9fSx7a2V5OmBnY2AsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5tYXJrZWRLZXlzO2lmKHQuc2l6ZT09PTApY29uc29sZS5sb2coYG5vdGhpbmcgdG8gZ2FyYmFnZSBjb2xsZWN0YCk7ZWxzZXt2YXIgbj1bXSxyPW5ldyBNYXAsaT1udWxsLGE9Y2ModGhpcy5hdGxhc2VzKSxvO3RyeXt2YXIgcz1mdW5jdGlvbigpe3ZhciBhPW8udmFsdWUscz1hLmdldEtleXMoKSxjPUJDKHQscyk7aWYoYy5zaXplPT09MClyZXR1cm4gbi5wdXNoKGEpLHMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gci5zZXQoZSxhKX0pLDE7aXx8KGk9ZS5fY3JlYXRlQXRsYXMoKSxuLnB1c2goaSkpO3ZhciBsPWNjKHMpLHU7dHJ5e2ZvcihsLnMoKTshKHU9bC5uKCkpLmRvbmU7KXt2YXIgZD11LnZhbHVlO2lmKCFjLmhhcyhkKSl7dmFyIGY9bWMoYS5nZXRPZmZzZXRzKGQpLDIpLHA9ZlswXSxtPWZbMV07aS5jYW5GaXQoe3c6cC53K20udyxoOnAuaH0pfHwoaS5sb2NrKCksaT1lLl9jcmVhdGVBdGxhcygpLG4ucHVzaChpKSksYS5jYW52YXMmJihlLl9jb3B5VGV4dHVyZVRvTmV3QXRsYXMoZCxhLGkpLHIuc2V0KGQsaSkpfX19Y2F0Y2goZSl7bC5lKGUpfWZpbmFsbHl7bC5mKCl9YS5kaXNwb3NlKCl9O2ZvcihhLnMoKTshKG89YS5uKCkpLmRvbmU7KWlmKHMoKSljb250aW51ZX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX10aGlzLmF0bGFzZXM9bix0aGlzLnN0eWxlS2V5VG9BdGxhcz1yLHRoaXMubWFya2VkS2V5cz1uZXcgU2V0fX19LHtrZXk6YF9jb3B5VGV4dHVyZVRvTmV3QXRsYXNgLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1tYyh0LmdldE9mZnNldHMoZSksMiksaT1yWzBdLGE9clsxXTtpZihhLnc9PT0wKW4uZHJhdyhlLGksZnVuY3Rpb24oZSl7ZS5kcmF3SW1hZ2UodC5jYW52YXMsaS54LGkueSxpLncsaS5oLDAsMCxpLncsaS5oKX0pO2Vsc2V7dmFyIG89dGhpcy5fZ2V0U2NyYXRjaENhbnZhcygpO28uY2xlYXIoKSxvLmNvbnRleHQuZHJhd0ltYWdlKHQuY2FudmFzLGkueCxpLnksaS53LGkuaCwwLDAsaS53LGkuaCksby5jb250ZXh0LmRyYXdJbWFnZSh0LmNhbnZhcyxhLngsYS55LGEudyxhLmgsaS53LDAsYS53LGEuaCk7dmFyIHM9aS53K2EudyxjPWkuaDtuLmRyYXcoZSx7dzpzLGg6Y30sZnVuY3Rpb24oZSl7ZS5kcmF3SW1hZ2UobywwLDAscyxjLDAsMCxzLGMpfSl9fX0se2tleTpgZ2V0Q291bnRzYCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntrZXlDb3VudDp0aGlzLnN0eWxlS2V5VG9BdGxhcy5zaXplLGF0bGFzQ291bnQ6bmV3IFNldCh0aGlzLnN0eWxlS2V5VG9BdGxhcy52YWx1ZXMoKSkuc2l6ZX19fV0pfSgpO2Z1bmN0aW9uIEJDKGUsdCl7cmV0dXJuIGUuaW50ZXJzZWN0aW9uP2UuaW50ZXJzZWN0aW9uKHQpOm5ldyBTZXQoaGMoZSkuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0LmhhcyhlKX0pKX12YXIgVkM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7YWModGhpcyxlKSx0aGlzLnI9dCx0aGlzLmdsb2JhbE9wdGlvbnM9bix0aGlzLmF0bGFzU2l6ZT1uLndlYmdsVGV4U2l6ZSx0aGlzLm1heEF0bGFzZXNQZXJCYXRjaD1uLndlYmdsVGV4UGVyQmF0Y2gsdGhpcy5yZW5kZXJUeXBlcz1uZXcgTWFwLHRoaXMuY29sbGVjdGlvbnM9bmV3IE1hcCx0aGlzLnR5cGVBbmRJZFRvS2V5PW5ldyBNYXB9cmV0dXJuIHNjKGUsW3trZXk6YGdldEF0bGFzU2l6ZWAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdGxhc1NpemV9fSx7a2V5OmBhZGRBdGxhc0NvbGxlY3Rpb25gLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nbG9iYWxPcHRpb25zLHI9bi53ZWJnbFRleFNpemUsaT1uLmNyZWF0ZVRleHR1cmVDYW52YXMsYT10LnRleFJvd3Msbz10aGlzLl9jYWNoZVNjcmF0Y2hDYW52YXMoaSkscz1uZXcgekModGhpcy5yLHIsYSxvKTt0aGlzLmNvbGxlY3Rpb25zLnNldChlLHMpfX0se2tleTpgYWRkUmVuZGVyVHlwZWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmNvbGxlY3Rpb247aWYoIXRoaXMuY29sbGVjdGlvbnMuaGFzKG4pKXRocm93IEVycm9yKGBpbnZhbGlkIGF0bGFzIGNvbGxlY3Rpb24gbmFtZSAnJHtufSdgKTt2YXIgcj1hbCh7dHlwZTplLGF0bGFzQ29sbGVjdGlvbjp0aGlzLmNvbGxlY3Rpb25zLmdldChuKX0sdCk7dGhpcy5yZW5kZXJUeXBlcy5zZXQoZSxyKX19LHtrZXk6YGdldFJlbmRlclR5cGVPcHRzYCx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZW5kZXJUeXBlcy5nZXQoZSl9fSx7a2V5OmBnZXRBdGxhc0NvbGxlY3Rpb25gLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbGxlY3Rpb25zLmdldChlKX19LHtrZXk6YF9jYWNoZVNjcmF0Y2hDYW52YXNgLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PS0xLG49LTEscj1udWxsO3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXtyZXR1cm4gcz8ociYmYT09dCYmbz09bnx8KHQ9YSxuPW8scj1lKGksYSxvKSkscik6ZShpLGEsbyl9fX0se2tleTpgX2tleWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm5gJHtlfS0ke3R9YH19LHtrZXk6YGludmFsaWRhdGVgLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06e30scj1uLmZvcmNlUmVkcmF3LGk9ciE9PXZvaWQgMCYmcixhPW4uZmlsdGVyRWxlLG89YT09PXZvaWQgMD9mdW5jdGlvbigpe3JldHVybiEwfTphLHM9bi5maWx0ZXJUeXBlLGM9cz09PXZvaWQgMD9mdW5jdGlvbigpe3JldHVybiEwfTpzLGw9ITEsdT0hMSxkPWNjKGUpLGY7dHJ5e2ZvcihkLnMoKTshKGY9ZC5uKCkpLmRvbmU7KXt2YXIgcD1mLnZhbHVlO2lmKG8ocCkpe3ZhciBtPWNjKHRoaXMucmVuZGVyVHlwZXMudmFsdWVzKCkpLGg7dHJ5e3ZhciBnPWZ1bmN0aW9uKCl7dmFyIGU9aC52YWx1ZSxuPWUudHlwZTtpZihjKG4pKXt2YXIgcj10LmNvbGxlY3Rpb25zLmdldChlLmNvbGxlY3Rpb24pLGE9ZS5nZXRLZXkocCksbz1BcnJheS5pc0FycmF5KGEpP2E6W2FdO2lmKGkpby5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiByLm1hcmtLZXlGb3JHQyhlKX0pLHU9ITA7ZWxzZXt2YXIgcz1lLmdldElEP2UuZ2V0SUQocCk6cC5pZCgpLGQ9dC5fa2V5KG4scyksZj10LnR5cGVBbmRJZFRvS2V5LmdldChkKTtmIT09dm9pZCAwJiYhdkMobyxmKSYmKGw9ITAsdC50eXBlQW5kSWRUb0tleS5kZWxldGUoZCksZi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiByLm1hcmtLZXlGb3JHQyhlKX0pKX19fTtmb3IobS5zKCk7IShoPW0ubigpKS5kb25lOylnKCl9Y2F0Y2goZSl7bS5lKGUpfWZpbmFsbHl7bS5mKCl9fX19Y2F0Y2goZSl7ZC5lKGUpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuIHUmJih0aGlzLmdjKCksbD0hMSksbH19LHtrZXk6YGdjYCx2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWNjKHRoaXMuY29sbGVjdGlvbnMudmFsdWVzKCkpLHQ7dHJ5e2ZvcihlLnMoKTshKHQ9ZS5uKCkpLmRvbmU7KXQudmFsdWUuZ2MoKX1jYXRjaCh0KXtlLmUodCl9ZmluYWxseXtlLmYoKX19fSx7a2V5OmBnZXRPckNyZWF0ZUF0bGFzYCx2YWx1ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLnJlbmRlclR5cGVzLmdldCh0KSxhPXRoaXMuY29sbGVjdGlvbnMuZ2V0KGkuY29sbGVjdGlvbiksbz0hMSxzPWEuZHJhdyhyLG4sZnVuY3Rpb24odCl7aS5kcmF3Q2xpcHBlZD8odC5zYXZlKCksdC5iZWdpblBhdGgoKSx0LnJlY3QoMCwwLG4udyxuLmgpLHQuY2xpcCgpLGkuZHJhd0VsZW1lbnQodCxlLG4sITAsITApLHQucmVzdG9yZSgpKTppLmRyYXdFbGVtZW50KHQsZSxuLCEwLCEwKSxvPSEwfSk7aWYobyl7dmFyIGM9aS5nZXRJRD9pLmdldElEKGUpOmUuaWQoKSxsPXRoaXMuX2tleSh0LGMpO3RoaXMudHlwZUFuZElkVG9LZXkuaGFzKGwpP3RoaXMudHlwZUFuZElkVG9LZXkuZ2V0KGwpLnB1c2gocik6dGhpcy50eXBlQW5kSWRUb0tleS5zZXQobCxbcl0pfXJldHVybiBzfX0se2tleTpgZ2V0QXRsYXNJbmZvYCx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMscj10aGlzLnJlbmRlclR5cGVzLmdldCh0KSxpPXIuZ2V0S2V5KGUpO3JldHVybihBcnJheS5pc0FycmF5KGkpP2k6W2ldKS5tYXAoZnVuY3Rpb24oaSl7dmFyIGE9ci5nZXRCb3VuZGluZ0JveChlLGkpLG89bi5nZXRPckNyZWF0ZUF0bGFzKGUsdCxhLGkpLHM9bWMoby5nZXRPZmZzZXRzKGkpLDIpLGM9c1swXTtyZXR1cm57YXRsYXM6byx0ZXg6Yyx0ZXgxOmMsdGV4MjpzWzFdLGJiOmF9fSl9fSx7a2V5OmBnZXREZWJ1Z0luZm9gLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD1jYyh0aGlzLmNvbGxlY3Rpb25zKSxuO3RyeXtmb3IodC5zKCk7IShuPXQubigpKS5kb25lOyl7dmFyIHI9bWMobi52YWx1ZSwyKSxpPXJbMF0sYT1yWzFdLmdldENvdW50cygpLG89YS5rZXlDb3VudCxzPWEuYXRsYXNDb3VudDtlLnB1c2goe3R5cGU6aSxrZXlDb3VudDpvLGF0bGFzQ291bnQ6c30pfX1jYXRjaChlKXt0LmUoZSl9ZmluYWxseXt0LmYoKX1yZXR1cm4gZX19XSl9KCksSEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2FjKHRoaXMsZSksdGhpcy5nbG9iYWxPcHRpb25zPXQsdGhpcy5hdGxhc1NpemU9dC53ZWJnbFRleFNpemUsdGhpcy5tYXhBdGxhc2VzUGVyQmF0Y2g9dC53ZWJnbFRleFBlckJhdGNoLHRoaXMuYmF0Y2hBdGxhc2VzPVtdfXJldHVybiBzYyhlLFt7a2V5OmBnZXRNYXhBdGxhc2VzUGVyQmF0Y2hgLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4QXRsYXNlc1BlckJhdGNofX0se2tleTpgZ2V0QXRsYXNTaXplYCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0bGFzU2l6ZX19LHtrZXk6YGdldEluZGV4QXJyYXlgLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDp0aGlzLm1heEF0bGFzZXNQZXJCYXRjaH0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdH0pfX0se2tleTpgc3RhcnRCYXRjaGAsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJhdGNoQXRsYXNlcz1bXX19LHtrZXk6YGdldEF0bGFzQ291bnRgLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmF0Y2hBdGxhc2VzLmxlbmd0aH19LHtrZXk6YGdldEF0bGFzZXNgLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmF0Y2hBdGxhc2VzfX0se2tleTpgY2FuQWRkVG9DdXJyZW50QmF0Y2hgLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGghPT10aGlzLm1heEF0bGFzZXNQZXJCYXRjaHx8dGhpcy5iYXRjaEF0bGFzZXMuaW5jbHVkZXMoZSl9fSx7a2V5OmBnZXRBdGxhc0luZGV4Rm9yQmF0Y2hgLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYmF0Y2hBdGxhc2VzLmluZGV4T2YoZSk7aWYodDwwKXtpZih0aGlzLmJhdGNoQXRsYXNlcy5sZW5ndGg9PT10aGlzLm1heEF0bGFzZXNQZXJCYXRjaCl0aHJvdyBFcnJvcihgY2Fubm90IGFkZCBtb3JlIGF0bGFzZXMgdG8gYmF0Y2hgKTt0aGlzLmJhdGNoQXRsYXNlcy5wdXNoKGUpLHQ9dGhpcy5iYXRjaEF0bGFzZXMubGVuZ3RoLTF9cmV0dXJuIHR9fV0pfSgpLFVDPWAKICBmbG9hdCBjaXJjbGVTRCh2ZWMyIHAsIGZsb2F0IHIpIHsKICAgIHJldHVybiBkaXN0YW5jZSh2ZWMyKDApLCBwKSAtIHI7IC8vIHNpZ25lZCBkaXN0YW5jZQogIH0KYCxXQz1gCiAgZmxvYXQgcmVjdGFuZ2xlU0QodmVjMiBwLCB2ZWMyIGIpIHsKICAgIHZlYzIgZCA9IGFicyhwKS1iOwogICAgcmV0dXJuIGRpc3RhbmNlKHZlYzIoMCksbWF4KGQsMC4wKSkgKyBtaW4obWF4KGQueCxkLnkpLDAuMCk7CiAgfQpgLEdDPWAKICBmbG9hdCByb3VuZFJlY3RhbmdsZVNEKHZlYzIgcCwgdmVjMiBiLCB2ZWM0IGNyKSB7CiAgICBjci54eSA9IChwLnggPiAwLjApID8gY3IueHkgOiBjci56dzsKICAgIGNyLnggID0gKHAueSA+IDAuMCkgPyBjci54ICA6IGNyLnk7CiAgICB2ZWMyIHEgPSBhYnMocCkgLSBiICsgY3IueDsKICAgIHJldHVybiBtaW4obWF4KHEueCwgcS55KSwgMC4wKSArIGRpc3RhbmNlKHZlYzIoMCksIG1heChxLCAwLjApKSAtIGNyLng7CiAgfQpgLEtDPWAKICBmbG9hdCBlbGxpcHNlU0QodmVjMiBwLCB2ZWMyIGFiKSB7CiAgICBwID0gYWJzKCBwICk7IC8vIHN5bW1ldHJ5CgogICAgLy8gZmluZCByb290IHdpdGggTmV3dG9uIHNvbHZlcgogICAgdmVjMiBxID0gYWIqKHAtYWIpOwogICAgZmxvYXQgdyA9IChxLng8cS55KT8gMS41NzA3OTYzMjcgOiAwLjA7CiAgICBmb3IoIGludCBpPTA7IGk8NTsgaSsrICkgewogICAgICB2ZWMyIGNzID0gdmVjMihjb3Modyksc2luKHcpKTsKICAgICAgdmVjMiB1ID0gYWIqdmVjMiggY3MueCxjcy55KTsKICAgICAgdmVjMiB2ID0gYWIqdmVjMigtY3MueSxjcy54KTsKICAgICAgdyA9IHcgKyBkb3QocC11LHYpLyhkb3QocC11LHUpK2RvdCh2LHYpKTsKICAgIH0KICAgIAogICAgLy8gY29tcHV0ZSBmaW5hbCBwb2ludCBhbmQgZGlzdGFuY2UKICAgIGZsb2F0IGQgPSBsZW5ndGgocC1hYip2ZWMyKGNvcyh3KSxzaW4odykpKTsKICAgIAogICAgLy8gcmV0dXJuIHNpZ25lZCBkaXN0YW5jZQogICAgcmV0dXJuIChkb3QocC9hYixwL2FiKT4xLjApID8gZCA6IC1kOwogIH0KYCxxQz17U0NSRUVOOntuYW1lOmBzY3JlZW5gLHNjcmVlbjohMH0sUElDS0lORzp7bmFtZTpgcGlja2luZ2AscGlja2luZzohMH19LEpDPXtJR05PUkU6MSxVU0VfQkI6Mn0sWUM9MCxYQz0xLFpDPTIsUUM9MywkQz00LGV3PTUsdHc9Nixudz03LHJ3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4scil7YWModGhpcyxlKSx0aGlzLnI9dCx0aGlzLmdsPW4sdGhpcy5tYXhJbnN0YW5jZXM9ci53ZWJnbEJhdGNoU2l6ZSx0aGlzLmF0bGFzU2l6ZT1yLndlYmdsVGV4U2l6ZSx0aGlzLmJnQ29sb3I9ci5iZ0NvbG9yLHRoaXMuZGVidWc9ci53ZWJnbERlYnVnLHRoaXMuYmF0Y2hEZWJ1Z0luZm89W10sci5lbmFibGVXcmFwcGluZz0hMCxyLmNyZWF0ZVRleHR1cmVDYW52YXM9cEMsdGhpcy5hdGxhc01hbmFnZXI9bmV3IFZDKHQsciksdGhpcy5iYXRjaE1hbmFnZXI9bmV3IEhDKHIpLHRoaXMuc2ltcGxlU2hhcGVPcHRpb25zPW5ldyBNYXAsdGhpcy5wcm9ncmFtPXRoaXMuX2NyZWF0ZVNoYWRlclByb2dyYW0ocUMuU0NSRUVOKSx0aGlzLnBpY2tpbmdQcm9ncmFtPXRoaXMuX2NyZWF0ZVNoYWRlclByb2dyYW0ocUMuUElDS0lORyksdGhpcy52YW89dGhpcy5fY3JlYXRlVkFPKCl9cmV0dXJuIHNjKGUsW3trZXk6YGFkZEF0bGFzQ29sbGVjdGlvbmAsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLmF0bGFzTWFuYWdlci5hZGRBdGxhc0NvbGxlY3Rpb24oZSx0KX19LHtrZXk6YGFkZFRleHR1cmVBdGxhc1JlbmRlclR5cGVgLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5hdGxhc01hbmFnZXIuYWRkUmVuZGVyVHlwZShlLHQpfX0se2tleTpgYWRkU2ltcGxlU2hhcGVSZW5kZXJUeXBlYCx2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuc2ltcGxlU2hhcGVPcHRpb25zLnNldChlLHQpfX0se2tleTpgaW52YWxpZGF0ZWAsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9KGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTp7fSkudHlwZSxuPXRoaXMuYXRsYXNNYW5hZ2VyO3JldHVybiB0P24uaW52YWxpZGF0ZShlLHtmaWx0ZXJUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sZm9yY2VSZWRyYXc6ITB9KTpuLmludmFsaWRhdGUoZSl9fSx7a2V5OmBnY2AsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmF0bGFzTWFuYWdlci5nYygpfX0se2tleTpgX2NyZWF0ZVNoYWRlclByb2dyYW1gLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2wsbj1gI3ZlcnNpb24gMzAwIGVzCiAgICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKCiAgICAgIHVuaWZvcm0gbWF0MyB1UGFuWm9vbU1hdHJpeDsKICAgICAgdW5pZm9ybSBpbnQgIHVBdGxhc1NpemU7CiAgICAgIAogICAgICAvLyBpbnN0YW5jZWQKICAgICAgaW4gdmVjMiBhUG9zaXRpb247IC8vIGEgdmVydGV4IGZyb20gdGhlIHVuaXQgc3F1YXJlCiAgICAgIAogICAgICBpbiBtYXQzIGFUcmFuc2Zvcm07IC8vIHVzZWQgdG8gdHJhbnNmb3JtIHZlcnRpY2llcywgZWcgaW50byBhIGJvdW5kaW5nIGJveAogICAgICBpbiBpbnQgYVZlcnRUeXBlOyAvLyB0aGUgdHlwZSBvZiB0aGluZyB3ZSBhcmUgcmVuZGVyaW5nCgogICAgICAvLyB0aGUgei1pbmRleCB0aGF0IGlzIG91dHB1dCB3aGVuIHVzaW5nIHBpY2tpbmcgbW9kZQogICAgICBpbiB2ZWM0IGFJbmRleDsKICAgICAgCiAgICAgIC8vIEZvciB0ZXh0dXJlcwogICAgICBpbiBpbnQgYUF0bGFzSWQ7IC8vIHdoaWNoIHNoYWRlciB1bml0L2F0bGFzIHRvIHVzZQogICAgICBpbiB2ZWM0IGFUZXg7IC8vIHgveS93L2ggb2YgdGV4dHVyZSBpbiBhdGxhcwoKICAgICAgLy8gZm9yIGVkZ2VzCiAgICAgIGluIHZlYzQgYVBvaW50QVBvaW50QjsKICAgICAgaW4gdmVjNCBhUG9pbnRDUG9pbnREOwogICAgICBpbiB2ZWMyIGFMaW5lV2lkdGg7IC8vIGFsc28gdXNlZCBmb3Igbm9kZSBib3JkZXIgd2lkdGgKCiAgICAgIC8vIHNpbXBsZSBzaGFwZXMKICAgICAgaW4gdmVjNCBhQ29ybmVyUmFkaXVzOyAvLyBmb3Igcm91bmQtcmVjdGFuZ2xlIFt0b3AtcmlnaHQsIGJvdHRvbS1yaWdodCwgdG9wLWxlZnQsIGJvdHRvbS1sZWZ0XQogICAgICBpbiB2ZWM0IGFDb2xvcjsgLy8gYWxzbyB1c2VkIGZvciBlZGdlcwogICAgICBpbiB2ZWM0IGFCb3JkZXJDb2xvcjsgLy8gYUxpbmVXaWR0aCBpcyB1c2VkIGZvciBib3JkZXIgd2lkdGgKCiAgICAgIC8vIG91dHB1dCB2YWx1ZXMgcGFzc2VkIHRvIHRoZSBmcmFnbWVudCBzaGFkZXIKICAgICAgb3V0IHZlYzIgdlRleENvb3JkOwogICAgICBvdXQgdmVjNCB2Q29sb3I7CiAgICAgIG91dCB2ZWMyIHZQb3NpdGlvbjsKICAgICAgLy8gZmxhdCB2YWx1ZXMgYXJlIG5vdCBpbnRlcnBvbGF0ZWQKICAgICAgZmxhdCBvdXQgaW50IHZBdGxhc0lkOyAKICAgICAgZmxhdCBvdXQgaW50IHZWZXJ0VHlwZTsKICAgICAgZmxhdCBvdXQgdmVjMiB2VG9wUmlnaHQ7CiAgICAgIGZsYXQgb3V0IHZlYzIgdkJvdExlZnQ7CiAgICAgIGZsYXQgb3V0IHZlYzQgdkNvcm5lclJhZGl1czsKICAgICAgZmxhdCBvdXQgdmVjNCB2Qm9yZGVyQ29sb3I7CiAgICAgIGZsYXQgb3V0IHZlYzIgdkJvcmRlcldpZHRoOwogICAgICBmbGF0IG91dCB2ZWM0IHZJbmRleDsKICAgICAgCiAgICAgIHZvaWQgbWFpbih2b2lkKSB7CiAgICAgICAgaW50IHZpZCA9IGdsX1ZlcnRleElEOwogICAgICAgIHZlYzIgcG9zaXRpb24gPSBhUG9zaXRpb247IC8vIFRPRE8gbWFrZSB0aGlzIGEgdmVjMywgc2ltcGxpZmllcyBzb21lIGNvZGUgYmVsb3cKCiAgICAgICAgaWYoYVZlcnRUeXBlID09ICR7WUN9KSB7CiAgICAgICAgICBmbG9hdCB0ZXhYID0gYVRleC54OyAvLyB0ZXh0dXJlIGNvb3JkaW5hdGVzCiAgICAgICAgICBmbG9hdCB0ZXhZID0gYVRleC55OwogICAgICAgICAgZmxvYXQgdGV4VyA9IGFUZXguejsKICAgICAgICAgIGZsb2F0IHRleEggPSBhVGV4Lnc7CgogICAgICAgICAgaWYodmlkID09IDEgfHwgdmlkID09IDIgfHwgdmlkID09IDQpIHsKICAgICAgICAgICAgdGV4WCArPSB0ZXhXOwogICAgICAgICAgfQogICAgICAgICAgaWYodmlkID09IDIgfHwgdmlkID09IDQgfHwgdmlkID09IDUpIHsKICAgICAgICAgICAgdGV4WSArPSB0ZXhIOwogICAgICAgICAgfQoKICAgICAgICAgIGZsb2F0IGQgPSBmbG9hdCh1QXRsYXNTaXplKTsKICAgICAgICAgIHZUZXhDb29yZCA9IHZlYzIodGV4WCAvIGQsIHRleFkgLyBkKTsgLy8gdGV4IGNvb3JkcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMQoKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIGFUcmFuc2Zvcm0gKiB2ZWMzKHBvc2l0aW9uLCAxLjApLCAxLjApOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKGFWZXJ0VHlwZSA9PSAkeyRDfSB8fCBhVmVydFR5cGUgPT0gJHtud30gCiAgICAgICAgICAgICB8fCBhVmVydFR5cGUgPT0gJHtld30gfHwgYVZlcnRUeXBlID09ICR7dHd9KSB7IC8vIHNpbXBsZSBzaGFwZXMKCiAgICAgICAgICAvLyB0aGUgYm91bmRpbmcgYm94IGlzIG5lZWRlZCBieSB0aGUgZnJhZ21lbnQgc2hhZGVyCiAgICAgICAgICB2Qm90TGVmdCAgPSAoYVRyYW5zZm9ybSAqIHZlYzMoMCwgMCwgMSkpLnh5OyAvLyBmbGF0CiAgICAgICAgICB2VG9wUmlnaHQgPSAoYVRyYW5zZm9ybSAqIHZlYzMoMSwgMSwgMSkpLnh5OyAvLyBmbGF0CiAgICAgICAgICB2UG9zaXRpb24gPSAoYVRyYW5zZm9ybSAqIHZlYzMocG9zaXRpb24sIDEpKS54eTsgLy8gd2lsbCBiZSBpbnRlcnBvbGF0ZWQKCiAgICAgICAgICAvLyBjYWxjdWxhdGlvbnMgYXJlIGRvbmUgaW4gdGhlIGZyYWdtZW50IHNoYWRlciwganVzdCBwYXNzIHRoZXNlIGFsb25nCiAgICAgICAgICB2Q29sb3IgPSBhQ29sb3I7CiAgICAgICAgICB2Q29ybmVyUmFkaXVzID0gYUNvcm5lclJhZGl1czsKICAgICAgICAgIHZCb3JkZXJDb2xvciA9IGFCb3JkZXJDb2xvcjsKICAgICAgICAgIHZCb3JkZXJXaWR0aCA9IGFMaW5lV2lkdGg7CgogICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHVQYW5ab29tTWF0cml4ICogYVRyYW5zZm9ybSAqIHZlYzMocG9zaXRpb24sIDEuMCksIDEuMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09ICR7WEN9KSB7CiAgICAgICAgICB2ZWMyIHNvdXJjZSA9IGFQb2ludEFQb2ludEIueHk7CiAgICAgICAgICB2ZWMyIHRhcmdldCA9IGFQb2ludEFQb2ludEIuenc7CgogICAgICAgICAgLy8gYWRqdXN0IHRoZSBnZW9tZXRyeSBzbyB0aGF0IHRoZSBsaW5lIGlzIGNlbnRlcmVkIG9uIHRoZSBlZGdlCiAgICAgICAgICBwb3NpdGlvbi55ID0gcG9zaXRpb24ueSAtIDAuNTsKCiAgICAgICAgICAvLyBzdHJldGNoIHRoZSB1bml0IHNxdWFyZSBpbnRvIGEgbG9uZyBza2lubnkgcmVjdGFuZ2xlCiAgICAgICAgICB2ZWMyIHhCYXNpcyA9IHRhcmdldCAtIHNvdXJjZTsKICAgICAgICAgIHZlYzIgeUJhc2lzID0gbm9ybWFsaXplKHZlYzIoLXhCYXNpcy55LCB4QmFzaXMueCkpOwogICAgICAgICAgdmVjMiBwb2ludCA9IHNvdXJjZSArIHhCYXNpcyAqIHBvc2l0aW9uLnggKyB5QmFzaXMgKiBhTGluZVdpZHRoWzBdICogcG9zaXRpb24ueTsKCiAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQodVBhblpvb21NYXRyaXggKiB2ZWMzKHBvaW50LCAxLjApLCAxLjApOwogICAgICAgICAgdkNvbG9yID0gYUNvbG9yOwogICAgICAgIH0gCiAgICAgICAgZWxzZSBpZihhVmVydFR5cGUgPT0gJHtaQ30pIHsKICAgICAgICAgIHZlYzIgcG9pbnRBID0gYVBvaW50QVBvaW50Qi54eTsKICAgICAgICAgIHZlYzIgcG9pbnRCID0gYVBvaW50QVBvaW50Qi56dzsKICAgICAgICAgIHZlYzIgcG9pbnRDID0gYVBvaW50Q1BvaW50RC54eTsKICAgICAgICAgIHZlYzIgcG9pbnREID0gYVBvaW50Q1BvaW50RC56dzsKCiAgICAgICAgICAvLyBhZGp1c3QgdGhlIGdlb21ldHJ5IHNvIHRoYXQgdGhlIGxpbmUgaXMgY2VudGVyZWQgb24gdGhlIGVkZ2UKICAgICAgICAgIHBvc2l0aW9uLnkgPSBwb3NpdGlvbi55IC0gMC41OwoKICAgICAgICAgIHZlYzIgcDAsIHAxLCBwMiwgcG9zOwogICAgICAgICAgaWYocG9zaXRpb24ueCA9PSAwLjApIHsgLy8gVGhlIGxlZnQgc2lkZSBvZiB0aGUgdW5pdCBzcXVhcmUKICAgICAgICAgICAgcDAgPSBwb2ludEE7CiAgICAgICAgICAgIHAxID0gcG9pbnRCOwogICAgICAgICAgICBwMiA9IHBvaW50QzsKICAgICAgICAgICAgcG9zID0gcG9zaXRpb247CiAgICAgICAgICB9IGVsc2UgeyAvLyBUaGUgcmlnaHQgc2lkZSBvZiB0aGUgdW5pdCBzcXVhcmUsIHVzZSBzYW1lIGFwcHJvYWNoIGJ1dCBmbGlwIHRoZSBnZW9tZXRyeSB1cHNpZGUgZG93bgogICAgICAgICAgICBwMCA9IHBvaW50RDsKICAgICAgICAgICAgcDEgPSBwb2ludEM7CiAgICAgICAgICAgIHAyID0gcG9pbnRCOwogICAgICAgICAgICBwb3MgPSB2ZWMyKDAuMCwgLXBvc2l0aW9uLnkpOwogICAgICAgICAgfQoKICAgICAgICAgIHZlYzIgcDAxID0gcDEgLSBwMDsKICAgICAgICAgIHZlYzIgcDEyID0gcDIgLSBwMTsKICAgICAgICAgIHZlYzIgcDIxID0gcDEgLSBwMjsKCiAgICAgICAgICAvLyBGaW5kIHRoZSBub3JtYWwgdmVjdG9yLgogICAgICAgICAgdmVjMiB0YW5nZW50ID0gbm9ybWFsaXplKG5vcm1hbGl6ZShwMTIpICsgbm9ybWFsaXplKHAwMSkpOwogICAgICAgICAgdmVjMiBub3JtYWwgPSB2ZWMyKC10YW5nZW50LnksIHRhbmdlbnQueCk7CgogICAgICAgICAgLy8gRmluZCB0aGUgdmVjdG9yIHBlcnBlbmRpY3VsYXIgdG8gcDAgLT4gcDEuCiAgICAgICAgICB2ZWMyIHAwMU5vcm0gPSBub3JtYWxpemUodmVjMigtcDAxLnksIHAwMS54KSk7CgogICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBiZW5kIGRpcmVjdGlvbi4KICAgICAgICAgIGZsb2F0IHNpZ21hID0gc2lnbihkb3QocDAxICsgcDIxLCBub3JtYWwpKTsKICAgICAgICAgIGZsb2F0IHdpZHRoID0gYUxpbmVXaWR0aFswXTsKCiAgICAgICAgICBpZihzaWduKHBvcy55KSA9PSAtc2lnbWEpIHsKICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnRlcnNlY3RpbmcgdmVydGV4LiBBZGp1c3QgdGhlIHBvc2l0aW9uIHNvIHRoYXQgdGhlcmUncyBubyBvdmVybGFwLgogICAgICAgICAgICB2ZWMyIHBvaW50ID0gMC41ICogd2lkdGggKiBub3JtYWwgKiAtc2lnbWEgLyBkb3Qobm9ybWFsLCBwMDFOb3JtKTsKICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHVQYW5ab29tTWF0cml4ICogdmVjMyhwMSArIHBvaW50LCAxLjApLCAxLjApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vbi1pbnRlcnNlY3RpbmcgdmVydGV4LiBUcmVhdCBpdCBsaWtlIGEgbWl0cmUgam9pbi4KICAgICAgICAgICAgdmVjMiBwb2ludCA9IDAuNSAqIHdpZHRoICogbm9ybWFsICogc2lnbWEgKiBkb3Qobm9ybWFsLCBwMDFOb3JtKTsKICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHVQYW5ab29tTWF0cml4ICogdmVjMyhwMSArIHBvaW50LCAxLjApLCAxLjApOwogICAgICAgICAgfQoKICAgICAgICAgIHZDb2xvciA9IGFDb2xvcjsKICAgICAgICB9IAogICAgICAgIGVsc2UgaWYoYVZlcnRUeXBlID09ICR7UUN9ICYmIHZpZCA8IDMpIHsKICAgICAgICAgIC8vIG1hc3NhZ2UgdGhlIGZpcnN0IHRyaWFuZ2xlIGludG8gYW4gZWRnZSBhcnJvdwogICAgICAgICAgaWYodmlkID09IDApCiAgICAgICAgICAgIHBvc2l0aW9uID0gdmVjMigtMC4xNSwgLTAuMyk7CiAgICAgICAgICBpZih2aWQgPT0gMSkKICAgICAgICAgICAgcG9zaXRpb24gPSB2ZWMyKCAgMC4wLCAgMC4wKTsKICAgICAgICAgIGlmKHZpZCA9PSAyKQogICAgICAgICAgICBwb3NpdGlvbiA9IHZlYzIoIDAuMTUsIC0wLjMpOwoKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh1UGFuWm9vbU1hdHJpeCAqIGFUcmFuc2Zvcm0gKiB2ZWMzKHBvc2l0aW9uLCAxLjApLCAxLjApOwogICAgICAgICAgdkNvbG9yID0gYUNvbG9yOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgyLjAsIDAuMCwgMC4wLCAxLjApOyAvLyBkaXNjYXJkIHZlcnRleCBieSBwdXR0aW5nIGl0IG91dHNpZGUgd2ViZ2wgY2xpcCBzcGFjZQogICAgICAgIH0KCiAgICAgICAgdkF0bGFzSWQgPSBhQXRsYXNJZDsKICAgICAgICB2VmVydFR5cGUgPSBhVmVydFR5cGU7CiAgICAgICAgdkluZGV4ID0gYUluZGV4OwogICAgICB9CiAgICBgLHI9dGhpcy5iYXRjaE1hbmFnZXIuZ2V0SW5kZXhBcnJheSgpLGk9ZkModCxuLGAjdmVyc2lvbiAzMDAgZXMKICAgICAgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwoKICAgICAgLy8gZGVjbGFyZSB0ZXh0dXJlIHVuaXQgZm9yIGVhY2ggdGV4dHVyZSBhdGxhcyBpbiB0aGUgYmF0Y2gKICAgICAgJHtyLm1hcChmdW5jdGlvbihlKXtyZXR1cm5gdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmUke2V9O2B9KS5qb2luKGAKCWApfQoKICAgICAgdW5pZm9ybSB2ZWM0IHVCR0NvbG9yOwogICAgICB1bmlmb3JtIGZsb2F0IHVab29tOwoKICAgICAgaW4gdmVjMiB2VGV4Q29vcmQ7CiAgICAgIGluIHZlYzQgdkNvbG9yOwogICAgICBpbiB2ZWMyIHZQb3NpdGlvbjsgLy8gbW9kZWwgY29vcmRpbmF0ZXMKCiAgICAgIGZsYXQgaW4gaW50IHZBdGxhc0lkOwogICAgICBmbGF0IGluIHZlYzQgdkluZGV4OwogICAgICBmbGF0IGluIGludCB2VmVydFR5cGU7CiAgICAgIGZsYXQgaW4gdmVjMiB2VG9wUmlnaHQ7CiAgICAgIGZsYXQgaW4gdmVjMiB2Qm90TGVmdDsKICAgICAgZmxhdCBpbiB2ZWM0IHZDb3JuZXJSYWRpdXM7CiAgICAgIGZsYXQgaW4gdmVjNCB2Qm9yZGVyQ29sb3I7CiAgICAgIGZsYXQgaW4gdmVjMiB2Qm9yZGVyV2lkdGg7CgogICAgICBvdXQgdmVjNCBvdXRDb2xvcjsKCiAgICAgICR7VUN9CiAgICAgICR7V0N9CiAgICAgICR7R0N9CiAgICAgICR7S0N9CgogICAgICB2ZWM0IGJsZW5kKHZlYzQgdG9wLCB2ZWM0IGJvdCkgeyAvLyBibGVuZCBjb2xvcnMgd2l0aCBwcmVtdWx0aXBsaWVkIGFscGhhCiAgICAgICAgcmV0dXJuIHZlYzQoIAogICAgICAgICAgdG9wLnJnYiArIChib3QucmdiICogKDEuMCAtIHRvcC5hKSksCiAgICAgICAgICB0b3AuYSAgICsgKGJvdC5hICAgKiAoMS4wIC0gdG9wLmEpKSAKICAgICAgICApOwogICAgICB9CgogICAgICB2ZWM0IGRpc3RJbnRlcnAodmVjNCBjQSwgdmVjNCBjQiwgZmxvYXQgZCkgeyAvLyBpbnRlcnBvbGF0ZSBjb2xvciB1c2luZyBTaWduZWQgRGlzdGFuY2UKICAgICAgICAvLyBzY2FsZSB0byB0aGUgem9vbSBsZXZlbCBzbyB0aGF0IGJvcmRlcnMgZG9uJ3QgbG9vayBibHVycnkgd2hlbiB6b29tZWQgaW4KICAgICAgICAvLyBub3RlIDEuNSBpcyBhbiBhcmliaXRyYXJ5IHZhbHVlIGNob3NlbiBiZWNhdXNlIGl0IGxvb2tzIGdvb2QKICAgICAgICByZXR1cm4gbWl4KGNBLCBjQiwgMS4wIC0gc21vb3Roc3RlcCgwLjAsIDEuNSAvIHVab29tLCBhYnMoZCkpKTsgCiAgICAgIH0KCiAgICAgIHZvaWQgbWFpbih2b2lkKSB7CiAgICAgICAgaWYodlZlcnRUeXBlID09ICR7WUN9KSB7CiAgICAgICAgICAvLyBsb29rIHVwIHRoZSB0ZXhlbCBmcm9tIHRoZSB0ZXh0dXJlIHVuaXQKICAgICAgICAgICR7ci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuYGlmKHZBdGxhc0lkID09ICR7ZX0pIG91dENvbG9yID0gdGV4dHVyZSh1VGV4dHVyZSR7ZX0sIHZUZXhDb29yZCk7YH0pLmpvaW4oYAoJZWxzZSBgKX0KICAgICAgICB9IAogICAgICAgIGVsc2UgaWYodlZlcnRUeXBlID09ICR7UUN9KSB7CiAgICAgICAgICAvLyBtaW1pY3MgaG93IGNhbnZhcyByZW5kZXJlciB1c2VzIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLW91dCc7CiAgICAgICAgICBvdXRDb2xvciA9IGJsZW5kKHZDb2xvciwgdUJHQ29sb3IpOwogICAgICAgICAgb3V0Q29sb3IuYSA9IDEuMDsgLy8gbWFrZSBvcGFxdWUsIG1hc2tzIG91dCBsaW5lIHVuZGVyIGFycm93CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYodlZlcnRUeXBlID09ICR7JEN9ICYmIHZCb3JkZXJXaWR0aCA9PSB2ZWMyKDAuMCkpIHsgLy8gc2ltcGxlIHJlY3RhbmdsZSB3aXRoIG5vIGJvcmRlcgogICAgICAgICAgb3V0Q29sb3IgPSB2Q29sb3I7IC8vIHVuaXQgc3F1YXJlIGlzIGFscmVhZHkgdHJhbnNmb3JtZWQgdG8gdGhlIHJlY3RhbmdsZSwgbm90aGluZyBlbHNlIG5lZWRzIHRvIGJlIGRvbmUKICAgICAgICB9CiAgICAgICAgZWxzZSBpZih2VmVydFR5cGUgPT0gJHskQ30gfHwgdlZlcnRUeXBlID09ICR7bnd9IAogICAgICAgICAgfHwgdlZlcnRUeXBlID09ICR7ZXd9IHx8IHZWZXJ0VHlwZSA9PSAke3R3fSkgeyAvLyB1c2UgU0RGCgogICAgICAgICAgZmxvYXQgb3V0ZXJCb3JkZXIgPSB2Qm9yZGVyV2lkdGhbMF07CiAgICAgICAgICBmbG9hdCBpbm5lckJvcmRlciA9IHZCb3JkZXJXaWR0aFsxXTsKICAgICAgICAgIGZsb2F0IGJvcmRlclBhZGRpbmcgPSBvdXRlckJvcmRlciAqIDIuMDsKICAgICAgICAgIGZsb2F0IHcgPSB2VG9wUmlnaHQueCAtIHZCb3RMZWZ0LnggLSBib3JkZXJQYWRkaW5nOwogICAgICAgICAgZmxvYXQgaCA9IHZUb3BSaWdodC55IC0gdkJvdExlZnQueSAtIGJvcmRlclBhZGRpbmc7CiAgICAgICAgICB2ZWMyIGIgPSB2ZWMyKHcvMi4wLCBoLzIuMCk7IC8vIGhhbGYgd2lkdGgsIGhhbGYgaGVpZ2h0CiAgICAgICAgICB2ZWMyIHAgPSB2UG9zaXRpb24gLSB2ZWMyKHZUb3BSaWdodC54IC0gYlswXSAtIG91dGVyQm9yZGVyLCB2VG9wUmlnaHQueSAtIGJbMV0gLSBvdXRlckJvcmRlcik7IC8vIHRyYW5zbGF0ZSB0byBjZW50ZXIKCiAgICAgICAgICBmbG9hdCBkOyAvLyBzaWduZWQgZGlzdGFuY2UKICAgICAgICAgIGlmKHZWZXJ0VHlwZSA9PSAkeyRDfSkgewogICAgICAgICAgICBkID0gcmVjdGFuZ2xlU0QocCwgYik7CiAgICAgICAgICB9IGVsc2UgaWYodlZlcnRUeXBlID09ICR7bnd9ICYmIHcgPT0gaCkgewogICAgICAgICAgICBkID0gY2lyY2xlU0QocCwgYi54KTsgLy8gZmFzdGVyIHRoYW4gZWxsaXBzZQogICAgICAgICAgfSBlbHNlIGlmKHZWZXJ0VHlwZSA9PSAke253fSkgewogICAgICAgICAgICBkID0gZWxsaXBzZVNEKHAsIGIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZCA9IHJvdW5kUmVjdGFuZ2xlU0QocCwgYiwgdkNvcm5lclJhZGl1cy53enl4KTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyB1c2UgdGhlIGRpc3RhbmNlIHRvIGludGVycG9sYXRlIGEgY29sb3IgdG8gc21vb3RoIHRoZSBlZGdlcyBvZiB0aGUgc2hhcGUsIGRvZXNuJ3QgbmVlZCBtdWx0aXNhbXBsaW5nCiAgICAgICAgICAvLyB3ZSBtdXN0IHNtb290aCBjb2xvcnMgaW53YXJkcywgYmVjYXVzZSB3ZSBjYW4ndCBjaGFuZ2UgcGl4ZWxzIG91dHNpZGUgdGhlIHNoYXBlJ3MgYm91bmRpbmcgYm94CiAgICAgICAgICBpZihkID4gMC4wKSB7CiAgICAgICAgICAgIGlmKGQgPiBvdXRlckJvcmRlcikgewogICAgICAgICAgICAgIGRpc2NhcmQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb3V0Q29sb3IgPSBkaXN0SW50ZXJwKHZCb3JkZXJDb2xvciwgdmVjNCgwKSwgZCAtIG91dGVyQm9yZGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYoZCA+IGlubmVyQm9yZGVyKSB7CiAgICAgICAgICAgICAgdmVjNCBvdXRlckNvbG9yID0gb3V0ZXJCb3JkZXIgPT0gMC4wID8gdmVjNCgwKSA6IHZCb3JkZXJDb2xvcjsKICAgICAgICAgICAgICB2ZWM0IGlubmVyQm9yZGVyQ29sb3IgPSBibGVuZCh2Qm9yZGVyQ29sb3IsIHZDb2xvcik7CiAgICAgICAgICAgICAgb3V0Q29sb3IgPSBkaXN0SW50ZXJwKGlubmVyQm9yZGVyQ29sb3IsIG91dGVyQ29sb3IsIGQpOwogICAgICAgICAgICB9IAogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICB2ZWM0IG91dGVyQ29sb3I7CiAgICAgICAgICAgICAgaWYoaW5uZXJCb3JkZXIgPT0gMC4wICYmIG91dGVyQm9yZGVyID09IDAuMCkgewogICAgICAgICAgICAgICAgb3V0ZXJDb2xvciA9IHZlYzQoMCk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmKGlubmVyQm9yZGVyID09IDAuMCkgewogICAgICAgICAgICAgICAgb3V0ZXJDb2xvciA9IHZCb3JkZXJDb2xvcjsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb3V0ZXJDb2xvciA9IGJsZW5kKHZCb3JkZXJDb2xvciwgdkNvbG9yKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgb3V0Q29sb3IgPSBkaXN0SW50ZXJwKHZDb2xvciwgb3V0ZXJDb2xvciwgZCAtIGlubmVyQm9yZGVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIG91dENvbG9yID0gdkNvbG9yOwogICAgICAgIH0KCiAgICAgICAgJHtlLnBpY2tpbmc/YGlmKG91dENvbG9yLmEgPT0gMC4wKSBkaXNjYXJkOwogICAgICAgICAgICAgZWxzZSBvdXRDb2xvciA9IHZJbmRleDtgOmBgfQogICAgICB9CiAgICBgKTtpLmFQb3NpdGlvbj10LmdldEF0dHJpYkxvY2F0aW9uKGksYGFQb3NpdGlvbmApLGkuYUluZGV4PXQuZ2V0QXR0cmliTG9jYXRpb24oaSxgYUluZGV4YCksaS5hVmVydFR5cGU9dC5nZXRBdHRyaWJMb2NhdGlvbihpLGBhVmVydFR5cGVgKSxpLmFUcmFuc2Zvcm09dC5nZXRBdHRyaWJMb2NhdGlvbihpLGBhVHJhbnNmb3JtYCksaS5hQXRsYXNJZD10LmdldEF0dHJpYkxvY2F0aW9uKGksYGFBdGxhc0lkYCksaS5hVGV4PXQuZ2V0QXR0cmliTG9jYXRpb24oaSxgYVRleGApLGkuYVBvaW50QVBvaW50Qj10LmdldEF0dHJpYkxvY2F0aW9uKGksYGFQb2ludEFQb2ludEJgKSxpLmFQb2ludENQb2ludEQ9dC5nZXRBdHRyaWJMb2NhdGlvbihpLGBhUG9pbnRDUG9pbnREYCksaS5hTGluZVdpZHRoPXQuZ2V0QXR0cmliTG9jYXRpb24oaSxgYUxpbmVXaWR0aGApLGkuYUNvbG9yPXQuZ2V0QXR0cmliTG9jYXRpb24oaSxgYUNvbG9yYCksaS5hQ29ybmVyUmFkaXVzPXQuZ2V0QXR0cmliTG9jYXRpb24oaSxgYUNvcm5lclJhZGl1c2ApLGkuYUJvcmRlckNvbG9yPXQuZ2V0QXR0cmliTG9jYXRpb24oaSxgYUJvcmRlckNvbG9yYCksaS51UGFuWm9vbU1hdHJpeD10LmdldFVuaWZvcm1Mb2NhdGlvbihpLGB1UGFuWm9vbU1hdHJpeGApLGkudUF0bGFzU2l6ZT10LmdldFVuaWZvcm1Mb2NhdGlvbihpLGB1QXRsYXNTaXplYCksaS51QkdDb2xvcj10LmdldFVuaWZvcm1Mb2NhdGlvbihpLGB1QkdDb2xvcmApLGkudVpvb209dC5nZXRVbmlmb3JtTG9jYXRpb24oaSxgdVpvb21gKSxpLnVUZXh0dXJlcz1bXTtmb3IodmFyIGE9MDthPHRoaXMuYmF0Y2hNYW5hZ2VyLmdldE1heEF0bGFzZXNQZXJCYXRjaCgpO2ErKylpLnVUZXh0dXJlcy5wdXNoKHQuZ2V0VW5pZm9ybUxvY2F0aW9uKGksYHVUZXh0dXJlJHthfWApKTtyZXR1cm4gaX19LHtrZXk6YF9jcmVhdGVWQU9gLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9WzAsMCwxLDAsMSwxLDAsMCwxLDEsMCwxXTt0aGlzLnZlcnRleENvdW50PWUubGVuZ3RoLzI7dmFyIHQ9dGhpcy5tYXhJbnN0YW5jZXMsbj10aGlzLmdsLHI9dGhpcy5wcm9ncmFtLGk9bi5jcmVhdGVWZXJ0ZXhBcnJheSgpO3JldHVybiBuLmJpbmRWZXJ0ZXhBcnJheShpKSxFQyhuLGB2ZWMyYCxyLmFQb3NpdGlvbixlKSx0aGlzLnRyYW5zZm9ybUJ1ZmZlcj1PQyhuLHQsci5hVHJhbnNmb3JtKSx0aGlzLmluZGV4QnVmZmVyPURDKG4sdCxgdmVjNGAsci5hSW5kZXgpLHRoaXMudmVydFR5cGVCdWZmZXI9REMobix0LGBpbnRgLHIuYVZlcnRUeXBlKSx0aGlzLmF0bGFzSWRCdWZmZXI9REMobix0LGBpbnRgLHIuYUF0bGFzSWQpLHRoaXMudGV4QnVmZmVyPURDKG4sdCxgdmVjNGAsci5hVGV4KSx0aGlzLnBvaW50QVBvaW50QkJ1ZmZlcj1EQyhuLHQsYHZlYzRgLHIuYVBvaW50QVBvaW50QiksdGhpcy5wb2ludENQb2ludERCdWZmZXI9REMobix0LGB2ZWM0YCxyLmFQb2ludENQb2ludEQpLHRoaXMubGluZVdpZHRoQnVmZmVyPURDKG4sdCxgdmVjMmAsci5hTGluZVdpZHRoKSx0aGlzLmNvbG9yQnVmZmVyPURDKG4sdCxgdmVjNGAsci5hQ29sb3IpLHRoaXMuY29ybmVyUmFkaXVzQnVmZmVyPURDKG4sdCxgdmVjNGAsci5hQ29ybmVyUmFkaXVzKSx0aGlzLmJvcmRlckNvbG9yQnVmZmVyPURDKG4sdCxgdmVjNGAsci5hQm9yZGVyQ29sb3IpLG4uYmluZFZlcnRleEFycmF5KG51bGwpLGl9fSx7a2V5OmBidWZmZXJzYCxnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl9idWZmZXJzfHw9T2JqZWN0LmtleXModGhpcykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBZYyhlLGBCdWZmZXJgKX0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLHRoaXMuX2J1ZmZlcnN9fSx7a2V5OmBzdGFydEZyYW1lYCx2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06cUMuU0NSRUVOO3RoaXMucGFuWm9vbU1hdHJpeD1lLHRoaXMucmVuZGVyVGFyZ2V0PXQsdGhpcy5iYXRjaERlYnVnSW5mbz1bXSx0aGlzLndyYXBwZWRDb3VudD0wLHRoaXMuc2ltcGxlQ291bnQ9MCx0aGlzLnN0YXJ0QmF0Y2goKX19LHtrZXk6YHN0YXJ0QmF0Y2hgLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZUNvdW50PTAsdGhpcy5iYXRjaE1hbmFnZXIuc3RhcnRCYXRjaCgpfX0se2tleTpgZW5kRnJhbWVgLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5lbmRCYXRjaCgpfX0se2tleTpgX2lzVmlzaWJsZWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS52aXNpYmxlKCk/dCYmdC5pc1Zpc2libGU/dC5pc1Zpc2libGUoZSk6ITA6ITF9fSx7a2V5OmBkcmF3VGV4dHVyZWAsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuYXRsYXNNYW5hZ2VyLGk9dGhpcy5iYXRjaE1hbmFnZXIsYT1yLmdldFJlbmRlclR5cGVPcHRzKG4pO2lmKHRoaXMuX2lzVmlzaWJsZShlLGEpJiYoIWUuaXNFZGdlKCl8fHRoaXMuX2lzVmFsaWRFZGdlKGUpKSl7aWYodGhpcy5yZW5kZXJUYXJnZXQucGlja2luZyYmYS5nZXRUZXhQaWNraW5nTW9kZSl7dmFyIG89YS5nZXRUZXhQaWNraW5nTW9kZShlKTtpZihvPT09SkMuSUdOT1JFKXJldHVybjtpZihvPT1KQy5VU0VfQkIpe3RoaXMuZHJhd1BpY2tpbmdSZWN0YW5nbGUoZSx0LG4pO3JldHVybn19dmFyIHM9Y2Moci5nZXRBdGxhc0luZm8oZSxuKSksYzt0cnl7Zm9yKHMucygpOyEoYz1zLm4oKSkuZG9uZTspe3ZhciBsPWMudmFsdWUsdT1sLmF0bGFzLGQ9bC50ZXgxLGY9bC50ZXgyO2kuY2FuQWRkVG9DdXJyZW50QmF0Y2godSl8fHRoaXMuZW5kQmF0Y2goKTtmb3IodmFyIHA9aS5nZXRBdGxhc0luZGV4Rm9yQmF0Y2godSksbT0wLGg9W1tkLCEwXSxbZiwhMV1dO208aC5sZW5ndGg7bSsrKXt2YXIgZz1tYyhoW21dLDIpLF89Z1swXSx2PWdbMV07aWYoXy53IT0wKXt2YXIgeT10aGlzLmluc3RhbmNlQ291bnQ7dGhpcy52ZXJ0VHlwZUJ1ZmZlci5nZXRWaWV3KHkpWzBdPVlDLGJDKHQsdGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KHkpKTt2YXIgYj10aGlzLmF0bGFzSWRCdWZmZXIuZ2V0Vmlldyh5KTtiWzBdPXA7dmFyIHg9dGhpcy50ZXhCdWZmZXIuZ2V0Vmlldyh5KTt4WzBdPV8ueCx4WzFdPV8ueSx4WzJdPV8udyx4WzNdPV8uaDt2YXIgUz10aGlzLnRyYW5zZm9ybUJ1ZmZlci5nZXRNYXRyaXhWaWV3KHkpO3RoaXMuc2V0VHJhbnNmb3JtTWF0cml4KGUsUyxhLGwsdiksdGhpcy5pbnN0YW5jZUNvdW50Kyssdnx8dGhpcy53cmFwcGVkQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9fX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9fX19LHtrZXk6YHNldFRyYW5zZm9ybU1hdHJpeGAsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9YXJndW1lbnRzLmxlbmd0aD40JiZhcmd1bWVudHNbNF0hPT12b2lkIDA/YXJndW1lbnRzWzRdOiEwLGE9MDtpZihuLnNoYXBlUHJvcHMmJm4uc2hhcGVQcm9wcy5wYWRkaW5nJiYoYT1lLnBzdHlsZShuLnNoYXBlUHJvcHMucGFkZGluZykucGZWYWx1ZSkscil7dmFyIG89ci5iYixzPXIudGV4MSxjPXIudGV4MixsPXMudy8ocy53K2Mudyk7aXx8KGw9MS1sKTt2YXIgdT10aGlzLl9nZXRBZGp1c3RlZEJCKG8sYSxpLGwpO3RoaXMuX2FwcGx5VHJhbnNmb3JtTWF0cml4KHQsdSxuLGUpfWVsc2V7dmFyIGQ9bi5nZXRCb3VuZGluZ0JveChlKSxmPXRoaXMuX2dldEFkanVzdGVkQkIoZCxhLCEwLDEpO3RoaXMuX2FwcGx5VHJhbnNmb3JtTWF0cml4KHQsZixuLGUpfX19LHtrZXk6YF9hcHBseVRyYW5zZm9ybU1hdHJpeGAsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksYTtNQyhlKTt2YXIgbz1uLmdldFJvdGF0aW9uP24uZ2V0Um90YXRpb24ocik6MDtpZihvIT09MCl7dmFyIHM9bi5nZXRSb3RhdGlvblBvaW50KHIpLGM9cy54LGw9cy55O1BDKGUsZSxbYyxsXSksRkMoZSxlLG8pO3ZhciB1PW4uZ2V0Um90YXRpb25PZmZzZXQocik7aT11LngrKHQueE9mZnNldHx8MCksYT11LnkrKHQueU9mZnNldHx8MCl9ZWxzZSBpPXQueDEsYT10LnkxO1BDKGUsZSxbaSxhXSksSUMoZSxlLFt0LncsdC5oXSl9fSx7a2V5OmBfZ2V0QWRqdXN0ZWRCQmAsdmFsdWU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9ZS54MSxhPWUueTEsbz1lLncscz1lLmgsYz1lLnlPZmZzZXQ7dCYmKGktPXQsYS09dCxvKz0yKnQscys9Mip0KTt2YXIgbD0wLHU9bypyO3JldHVybiBuJiZyPDE/bz11OiFuJiZyPDEmJihsPW8tdSxpKz1sLG89dSkse3gxOmkseTE6YSx3Om8saDpzLHhPZmZzZXQ6bCx5T2Zmc2V0OmN9fX0se2tleTpgZHJhd1BpY2tpbmdSZWN0YW5nbGVgLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLmF0bGFzTWFuYWdlci5nZXRSZW5kZXJUeXBlT3B0cyhuKSxpPXRoaXMuaW5zdGFuY2VDb3VudDt0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcoaSlbMF09JEMsYkModCx0aGlzLmluZGV4QnVmZmVyLmdldFZpZXcoaSkpLHlDKFswLDAsMF0sMSx0aGlzLmNvbG9yQnVmZmVyLmdldFZpZXcoaSkpO3ZhciBhPXRoaXMudHJhbnNmb3JtQnVmZmVyLmdldE1hdHJpeFZpZXcoaSk7dGhpcy5zZXRUcmFuc2Zvcm1NYXRyaXgoZSxhLHIpLHRoaXMuc2ltcGxlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9fSx7a2V5OmBkcmF3Tm9kZWAsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuc2ltcGxlU2hhcGVPcHRpb25zLmdldChuKTtpZih0aGlzLl9pc1Zpc2libGUoZSxyKSl7dmFyIGk9ci5zaGFwZVByb3BzLGE9dGhpcy5fZ2V0VmVydFR5cGVGb3JTaGFwZShlLGkuc2hhcGUpO2lmKGE9PT12b2lkIDB8fHIuaXNTaW1wbGUmJiFyLmlzU2ltcGxlKGUsdGhpcy5yZW5kZXJUYXJnZXQpKXRoaXMuZHJhd1RleHR1cmUoZSx0LG4pO2Vsc2V7dmFyIG89dGhpcy5pbnN0YW5jZUNvdW50O2lmKHRoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhvKVswXT1hLGE9PT1ld3x8YT09PXR3KXt2YXIgcz1yLmdldEJvdW5kaW5nQm94KGUpLGM9dGhpcy5fZ2V0Q29ybmVyUmFkaXVzKGUsaS5yYWRpdXMscyksbD10aGlzLmNvcm5lclJhZGl1c0J1ZmZlci5nZXRWaWV3KG8pO2xbMF09YyxsWzFdPWMsbFsyXT1jLGxbM109YyxhPT09dHcmJihsWzBdPTAsbFsyXT0wKX1iQyh0LHRoaXMuaW5kZXhCdWZmZXIuZ2V0VmlldyhvKSk7dmFyIHU9dGhpcy5yZW5kZXJUYXJnZXQucGlja2luZz8xOm49PT1gbm9kZS1ib2R5YD9lLmVmZmVjdGl2ZU9wYWNpdHkoKToxLGQ9dGhpcy5yZW5kZXJUYXJnZXQucGlja2luZz8xOmUucHN0eWxlKGkub3BhY2l0eSkudmFsdWUqdSxmPWUucHN0eWxlKGkuY29sb3IpLnZhbHVlO3lDKGYsZCx0aGlzLmNvbG9yQnVmZmVyLmdldFZpZXcobykpO3ZhciBwPXRoaXMubGluZVdpZHRoQnVmZmVyLmdldFZpZXcobyk7aWYocFswXT0wLHBbMV09MCxpLmJvcmRlcil7dmFyIG09ZS5wc3R5bGUoYGJvcmRlci13aWR0aGApLnZhbHVlO2lmKG0+MCl7dmFyIGg9ZS5wc3R5bGUoYGJvcmRlci1jb2xvcmApLnZhbHVlO3lDKGgsdSplLnBzdHlsZShgYm9yZGVyLW9wYWNpdHlgKS52YWx1ZSx0aGlzLmJvcmRlckNvbG9yQnVmZmVyLmdldFZpZXcobykpO3ZhciBnPWUucHN0eWxlKGBib3JkZXItcG9zaXRpb25gKS52YWx1ZTtpZihnPT09YGluc2lkZWApcFswXT0wLHBbMV09LW07ZWxzZSBpZihnPT09YG91dHNpZGVgKXBbMF09bSxwWzFdPTA7ZWxzZXt2YXIgXz1tLzI7cFswXT1fLHBbMV09LV99fX12YXIgdj10aGlzLnRyYW5zZm9ybUJ1ZmZlci5nZXRNYXRyaXhWaWV3KG8pO3RoaXMuc2V0VHJhbnNmb3JtTWF0cml4KGUsdixyKSx0aGlzLnNpbXBsZUNvdW50KyssdGhpcy5pbnN0YW5jZUNvdW50KyssdGhpcy5pbnN0YW5jZUNvdW50Pj10aGlzLm1heEluc3RhbmNlcyYmdGhpcy5lbmRCYXRjaCgpfX19fSx7a2V5OmBfZ2V0VmVydFR5cGVGb3JTaGFwZWAsdmFsdWU6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS5wc3R5bGUodCkudmFsdWUpe2Nhc2VgcmVjdGFuZ2xlYDpyZXR1cm4gJEM7Y2FzZWBlbGxpcHNlYDpyZXR1cm4gbnc7Y2FzZWByb3VuZHJlY3RhbmdsZWA6Y2FzZWByb3VuZC1yZWN0YW5nbGVgOnJldHVybiBldztjYXNlYGJvdHRvbS1yb3VuZC1yZWN0YW5nbGVgOnJldHVybiB0dztkZWZhdWx0OnJldHVybn19fSx7a2V5OmBfZ2V0Q29ybmVyUmFkaXVzYCx2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9bi53LGk9bi5oO2lmKGUucHN0eWxlKHQpLnZhbHVlPT09YGF1dG9gKXJldHVybiBBZihyLGkpO3ZhciBhPWUucHN0eWxlKHQpLnBmVmFsdWUsbz1yLzIscz1pLzI7cmV0dXJuIE1hdGgubWluKGEscyxvKX19LHtrZXk6YGRyYXdFZGdlQXJyb3dgLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtpZihlLnZpc2libGUoKSl7dmFyIHI9ZS5fcHJpdmF0ZS5yc2NyYXRjaCxpLGEsbztpZihuPT09YHNvdXJjZWA/KGk9ci5hcnJvd1N0YXJ0WCxhPXIuYXJyb3dTdGFydFksbz1yLnNyY0Fycm93QW5nbGUpOihpPXIuYXJyb3dFbmRYLGE9ci5hcnJvd0VuZFksbz1yLnRndEFycm93QW5nbGUpLCEoaXNOYU4oaSl8fGk9PW51bGx8fGlzTmFOKGEpfHxhPT1udWxsfHxpc05hTihvKXx8bz09bnVsbCkmJmUucHN0eWxlKG4rYC1hcnJvdy1zaGFwZWApLnZhbHVlIT09YG5vbmVgKXt2YXIgcz1lLnBzdHlsZShuK2AtYXJyb3ctY29sb3JgKS52YWx1ZSxjPWUucHN0eWxlKGBvcGFjaXR5YCkudmFsdWUqZS5wc3R5bGUoYGxpbmUtb3BhY2l0eWApLnZhbHVlLGw9ZS5wc3R5bGUoYHdpZHRoYCkucGZWYWx1ZSx1PWUucHN0eWxlKGBhcnJvdy1zY2FsZWApLnZhbHVlLGQ9dGhpcy5yLmdldEFycm93V2lkdGgobCx1KSxmPXRoaXMuaW5zdGFuY2VDb3VudCxwPXRoaXMudHJhbnNmb3JtQnVmZmVyLmdldE1hdHJpeFZpZXcoZik7TUMocCksUEMocCxwLFtpLGFdKSxJQyhwLHAsW2QsZF0pLEZDKHAscCxvKSx0aGlzLnZlcnRUeXBlQnVmZmVyLmdldFZpZXcoZilbMF09UUMsYkModCx0aGlzLmluZGV4QnVmZmVyLmdldFZpZXcoZikpLHlDKHMsYyx0aGlzLmNvbG9yQnVmZmVyLmdldFZpZXcoZikpLHRoaXMuaW5zdGFuY2VDb3VudCsrLHRoaXMuaW5zdGFuY2VDb3VudD49dGhpcy5tYXhJbnN0YW5jZXMmJnRoaXMuZW5kQmF0Y2goKX19fX0se2tleTpgZHJhd0VkZ2VMaW5lYCx2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGUudmlzaWJsZSgpKXt2YXIgbj10aGlzLl9nZXRFZGdlUG9pbnRzKGUpO2lmKG4pe3ZhciByPWUucHN0eWxlKGBvcGFjaXR5YCkudmFsdWUsaT1lLnBzdHlsZShgbGluZS1vcGFjaXR5YCkudmFsdWUsYT1lLnBzdHlsZShgd2lkdGhgKS5wZlZhbHVlLG89ZS5wc3R5bGUoYGxpbmUtY29sb3JgKS52YWx1ZSxzPXIqaTtpZihuLmxlbmd0aC8yK3RoaXMuaW5zdGFuY2VDb3VudD50aGlzLm1heEluc3RhbmNlcyYmdGhpcy5lbmRCYXRjaCgpLG4ubGVuZ3RoPT00KXt2YXIgYz10aGlzLmluc3RhbmNlQ291bnQ7dGhpcy52ZXJ0VHlwZUJ1ZmZlci5nZXRWaWV3KGMpWzBdPVhDLGJDKHQsdGhpcy5pbmRleEJ1ZmZlci5nZXRWaWV3KGMpKSx5QyhvLHMsdGhpcy5jb2xvckJ1ZmZlci5nZXRWaWV3KGMpKTt2YXIgbD10aGlzLmxpbmVXaWR0aEJ1ZmZlci5nZXRWaWV3KGMpO2xbMF09YTt2YXIgdT10aGlzLnBvaW50QVBvaW50QkJ1ZmZlci5nZXRWaWV3KGMpO3VbMF09blswXSx1WzFdPW5bMV0sdVsyXT1uWzJdLHVbM109blszXSx0aGlzLmluc3RhbmNlQ291bnQrKyx0aGlzLmluc3RhbmNlQ291bnQ+PXRoaXMubWF4SW5zdGFuY2VzJiZ0aGlzLmVuZEJhdGNoKCl9ZWxzZSBmb3IodmFyIGQ9MDtkPG4ubGVuZ3RoLTI7ZCs9Mil7dmFyIGY9dGhpcy5pbnN0YW5jZUNvdW50O3RoaXMudmVydFR5cGVCdWZmZXIuZ2V0VmlldyhmKVswXT1aQyxiQyh0LHRoaXMuaW5kZXhCdWZmZXIuZ2V0VmlldyhmKSkseUMobyxzLHRoaXMuY29sb3JCdWZmZXIuZ2V0VmlldyhmKSk7dmFyIHA9dGhpcy5saW5lV2lkdGhCdWZmZXIuZ2V0VmlldyhmKTtwWzBdPWE7dmFyIG09bltkLTJdLGg9bltkLTFdLGc9bltkXSxfPW5bZCsxXSx2PW5bZCsyXSx5PW5bZCszXSxiPW5bZCs0XSx4PW5bZCs1XTtkPT0wJiYobT0yKmctdisuMDAxLGg9MipfLXkrLjAwMSksZD09bi5sZW5ndGgtNCYmKGI9Mip2LWcrLjAwMSx4PTIqeS1fKy4wMDEpO3ZhciBTPXRoaXMucG9pbnRBUG9pbnRCQnVmZmVyLmdldFZpZXcoZik7U1swXT1tLFNbMV09aCxTWzJdPWcsU1szXT1fO3ZhciBDPXRoaXMucG9pbnRDUG9pbnREQnVmZmVyLmdldFZpZXcoZik7Q1swXT12LENbMV09eSxDWzJdPWIsQ1szXT14LHRoaXMuaW5zdGFuY2VDb3VudCsrLHRoaXMuaW5zdGFuY2VDb3VudD49dGhpcy5tYXhJbnN0YW5jZXMmJnRoaXMuZW5kQmF0Y2goKX19fX19LHtrZXk6YF9pc1ZhbGlkRWRnZWAsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fcHJpdmF0ZS5yc2NyYXRjaDtyZXR1cm4hKHQuYmFkTGluZXx8dC5hbGxwdHM9PW51bGx8fGlzTmFOKHQuYWxscHRzWzBdKSl9fSx7a2V5OmBfZ2V0RWRnZVBvaW50c2AsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fcHJpdmF0ZS5yc2NyYXRjaDtpZih0aGlzLl9pc1ZhbGlkRWRnZShlKSl7dmFyIG49dC5hbGxwdHM7aWYobi5sZW5ndGg9PTQpcmV0dXJuIG47dmFyIHI9dGhpcy5fZ2V0TnVtU2VnbWVudHMoZSk7cmV0dXJuIHRoaXMuX2dldEN1cnZlU2VnbWVudFBvaW50cyhuLHIpfX19LHtrZXk6YF9nZXROdW1TZWdtZW50c2AsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKDE1LHRoaXMubWF4SW5zdGFuY2VzKX19LHtrZXk6YF9nZXRDdXJ2ZVNlZ21lbnRQb2ludHNgLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg9PTQpcmV0dXJuIGU7Zm9yKHZhciBuPUFycmF5KCh0KzEpKjIpLHI9MDtyPD10O3IrKylpZihyPT0wKW5bMF09ZVswXSxuWzFdPWVbMV07ZWxzZSBpZihyPT10KW5bcioyXT1lW2UubGVuZ3RoLTJdLG5bcioyKzFdPWVbZS5sZW5ndGgtMV07ZWxzZXt2YXIgaT1yL3Q7dGhpcy5fc2V0Q3VydmVQb2ludChlLGksbixyKjIpfXJldHVybiBufX0se2tleTpgX3NldEN1cnZlUG9pbnRgLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUubGVuZ3RoPD0yKW5bcl09ZVswXSxuW3IrMV09ZVsxXTtlbHNle2Zvcih2YXIgaT1BcnJheShlLmxlbmd0aC0yKSxhPTA7YTxpLmxlbmd0aDthKz0yKXt2YXIgbz0oMS10KSplW2FdK3QqZVthKzJdLHM9KDEtdCkqZVthKzFdK3QqZVthKzNdO2lbYV09byxpW2ErMV09c31yZXR1cm4gdGhpcy5fc2V0Q3VydmVQb2ludChpLHQsbixyKX19fSx7a2V5OmBlbmRCYXRjaGAsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdsLHQ9dGhpcy52YW8sbj10aGlzLnZlcnRleENvdW50LHI9dGhpcy5pbnN0YW5jZUNvdW50O2lmKHIhPT0wKXt2YXIgaT10aGlzLnJlbmRlclRhcmdldC5waWNraW5nP3RoaXMucGlja2luZ1Byb2dyYW06dGhpcy5wcm9ncmFtO2UudXNlUHJvZ3JhbShpKSxlLmJpbmRWZXJ0ZXhBcnJheSh0KTt2YXIgYT1jYyh0aGlzLmJ1ZmZlcnMpLG87dHJ5e2ZvcihhLnMoKTshKG89YS5uKCkpLmRvbmU7KW8udmFsdWUuYnVmZmVyU3ViRGF0YShyKX1jYXRjaChlKXthLmUoZSl9ZmluYWxseXthLmYoKX1mb3IodmFyIHM9dGhpcy5iYXRjaE1hbmFnZXIuZ2V0QXRsYXNlcygpLGM9MDtjPHMubGVuZ3RoO2MrKylzW2NdLmJ1ZmZlcklmTmVlZGVkKGUpO2Zvcih2YXIgbD0wO2w8cy5sZW5ndGg7bCsrKWUuYWN0aXZlVGV4dHVyZShlLlRFWFRVUkUwK2wpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHNbbF0udGV4dHVyZSksZS51bmlmb3JtMWkoaS51VGV4dHVyZXNbbF0sbCk7ZS51bmlmb3JtMWYoaS51Wm9vbSxoQyh0aGlzLnIpKSxlLnVuaWZvcm1NYXRyaXgzZnYoaS51UGFuWm9vbU1hdHJpeCwhMSx0aGlzLnBhblpvb21NYXRyaXgpLGUudW5pZm9ybTFpKGkudUF0bGFzU2l6ZSx0aGlzLmJhdGNoTWFuYWdlci5nZXRBdGxhc1NpemUoKSk7dmFyIHU9eUModGhpcy5iZ0NvbG9yLDEpO2UudW5pZm9ybTRmdihpLnVCR0NvbG9yLHUpLGUuZHJhd0FycmF5c0luc3RhbmNlZChlLlRSSUFOR0xFUywwLG4sciksZS5iaW5kVmVydGV4QXJyYXkobnVsbCksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsbnVsbCksdGhpcy5kZWJ1ZyYmdGhpcy5iYXRjaERlYnVnSW5mby5wdXNoKHtjb3VudDpyLGF0bGFzQ291bnQ6cy5sZW5ndGh9KSx0aGlzLnN0YXJ0QmF0Y2goKX19fSx7a2V5OmBnZXREZWJ1Z0luZm9gLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5hdGxhc01hbmFnZXIuZ2V0RGVidWdJbmZvKCksdD1lLnJlZHVjZShmdW5jdGlvbihlLHQpe3JldHVybiBlK3QuYXRsYXNDb3VudH0sMCksbj10aGlzLmJhdGNoRGVidWdJbmZvLHI9bi5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0LmNvdW50fSwwKTtyZXR1cm57YXRsYXNJbmZvOmUsdG90YWxBdGxhc2VzOnQsd3JhcHBlZENvdW50OnRoaXMud3JhcHBlZENvdW50LHNpbXBsZUNvdW50OnRoaXMuc2ltcGxlQ291bnQsYmF0Y2hDb3VudDpuLmxlbmd0aCxiYXRjaEluZm86bix0b3RhbEluc3RhbmNlczpyfX19XSl9KCksaXc9e307aXcuaW5pdFdlYmdsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPW4uZGF0YS5jb250ZXh0c1tuLldFQkdMXTtlLmJnQ29sb3I9YXcobiksZS53ZWJnbFRleFNpemU9TWF0aC5taW4oZS53ZWJnbFRleFNpemUsci5nZXRQYXJhbWV0ZXIoci5NQVhfVEVYVFVSRV9TSVpFKSksZS53ZWJnbFRleFJvd3M9TWF0aC5taW4oZS53ZWJnbFRleFJvd3MsNTQpLGUud2ViZ2xUZXhSb3dzTm9kZXM9TWF0aC5taW4oZS53ZWJnbFRleFJvd3NOb2Rlcyw1NCksZS53ZWJnbEJhdGNoU2l6ZT1NYXRoLm1pbihlLndlYmdsQmF0Y2hTaXplLDE2Mzg0KSxlLndlYmdsVGV4UGVyQmF0Y2g9TWF0aC5taW4oZS53ZWJnbFRleFBlckJhdGNoLHIuZ2V0UGFyYW1ldGVyKHIuTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpKSxuLndlYmdsRGVidWc9ZS53ZWJnbERlYnVnLG4ud2ViZ2xEZWJ1Z1Nob3dBdGxhc2VzPWUud2ViZ2xEZWJ1Z1Nob3dBdGxhc2VzLG4ucGlja2luZ0ZyYW1lQnVmZmVyPWtDKHIpLG4ucGlja2luZ0ZyYW1lQnVmZmVyLm5lZWRzRHJhdz0hMCxuLmRyYXdpbmc9bmV3IHJ3KG4scixlKTt2YXIgaT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG4uZ2V0VGV4dEFuZ2xlKHQsZSl9fSxhPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10LnBzdHlsZShlKTtyZXR1cm4gbiYmbi52YWx1ZX19LG89ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnBzdHlsZShgJHtlfS1vcGFjaXR5YCkudmFsdWU+MH19LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucHN0eWxlKGB0ZXh0LWV2ZW50c2ApLnN0clZhbHVlPT09YHllc2A/SkMuVVNFX0JCOkpDLklHTk9SRX0sYz1mdW5jdGlvbihlKXt2YXIgdD1lLnBvc2l0aW9uKCksbj10Lngscj10LnksaT1lLm91dGVyV2lkdGgoKSxhPWUub3V0ZXJIZWlnaHQoKTtyZXR1cm57dzppLGg6YSx4MTpuLWkvMix5MTpyLWEvMn19O24uZHJhd2luZy5hZGRBdGxhc0NvbGxlY3Rpb24oYG5vZGVgLHt0ZXhSb3dzOmUud2ViZ2xUZXhSb3dzTm9kZXN9KSxuLmRyYXdpbmcuYWRkQXRsYXNDb2xsZWN0aW9uKGBsYWJlbGAse3RleFJvd3M6ZS53ZWJnbFRleFJvd3N9KSxuLmRyYXdpbmcuYWRkVGV4dHVyZUF0bGFzUmVuZGVyVHlwZShgbm9kZS1ib2R5YCx7Y29sbGVjdGlvbjpgbm9kZWAsZ2V0S2V5OnQuZ2V0U3R5bGVLZXksZ2V0Qm91bmRpbmdCb3g6dC5nZXRFbGVtZW50Qm94LGRyYXdFbGVtZW50OnQuZHJhd0VsZW1lbnR9KSxuLmRyYXdpbmcuYWRkU2ltcGxlU2hhcGVSZW5kZXJUeXBlKGBub2RlLWJvZHlgLHtnZXRCb3VuZGluZ0JveDpjLGlzU2ltcGxlOl9DLHNoYXBlUHJvcHM6e3NoYXBlOmBzaGFwZWAsY29sb3I6YGJhY2tncm91bmQtY29sb3JgLG9wYWNpdHk6YGJhY2tncm91bmQtb3BhY2l0eWAscmFkaXVzOmBjb3JuZXItcmFkaXVzYCxib3JkZXI6ITB9fSksbi5kcmF3aW5nLmFkZFNpbXBsZVNoYXBlUmVuZGVyVHlwZShgbm9kZS1vdmVybGF5YCx7Z2V0Qm91bmRpbmdCb3g6Yyxpc1Zpc2libGU6byhgb3ZlcmxheWApLHNoYXBlUHJvcHM6e3NoYXBlOmBvdmVybGF5LXNoYXBlYCxjb2xvcjpgb3ZlcmxheS1jb2xvcmAsb3BhY2l0eTpgb3ZlcmxheS1vcGFjaXR5YCxwYWRkaW5nOmBvdmVybGF5LXBhZGRpbmdgLHJhZGl1czpgb3ZlcmxheS1jb3JuZXItcmFkaXVzYH19KSxuLmRyYXdpbmcuYWRkU2ltcGxlU2hhcGVSZW5kZXJUeXBlKGBub2RlLXVuZGVybGF5YCx7Z2V0Qm91bmRpbmdCb3g6Yyxpc1Zpc2libGU6byhgdW5kZXJsYXlgKSxzaGFwZVByb3BzOntzaGFwZTpgdW5kZXJsYXktc2hhcGVgLGNvbG9yOmB1bmRlcmxheS1jb2xvcmAsb3BhY2l0eTpgdW5kZXJsYXktb3BhY2l0eWAscGFkZGluZzpgdW5kZXJsYXktcGFkZGluZ2AscmFkaXVzOmB1bmRlcmxheS1jb3JuZXItcmFkaXVzYH19KSxuLmRyYXdpbmcuYWRkVGV4dHVyZUF0bGFzUmVuZGVyVHlwZShgbGFiZWxgLHtjb2xsZWN0aW9uOmBsYWJlbGAsZ2V0VGV4UGlja2luZ01vZGU6cyxnZXRLZXk6c3codC5nZXRMYWJlbEtleSxudWxsKSxnZXRCb3VuZGluZ0JveDpjdyh0LmdldExhYmVsQm94LG51bGwpLGRyYXdDbGlwcGVkOiEwLGRyYXdFbGVtZW50OnQuZHJhd0xhYmVsLGdldFJvdGF0aW9uOmkobnVsbCksZ2V0Um90YXRpb25Qb2ludDp0LmdldExhYmVsUm90YXRpb25Qb2ludCxnZXRSb3RhdGlvbk9mZnNldDp0LmdldExhYmVsUm90YXRpb25PZmZzZXQsaXNWaXNpYmxlOmEoYGxhYmVsYCl9KSxuLmRyYXdpbmcuYWRkVGV4dHVyZUF0bGFzUmVuZGVyVHlwZShgZWRnZS1zb3VyY2UtbGFiZWxgLHtjb2xsZWN0aW9uOmBsYWJlbGAsZ2V0VGV4UGlja2luZ01vZGU6cyxnZXRLZXk6c3codC5nZXRTb3VyY2VMYWJlbEtleSxgc291cmNlYCksZ2V0Qm91bmRpbmdCb3g6Y3codC5nZXRTb3VyY2VMYWJlbEJveCxgc291cmNlYCksZHJhd0NsaXBwZWQ6ITAsZHJhd0VsZW1lbnQ6dC5kcmF3U291cmNlTGFiZWwsZ2V0Um90YXRpb246aShgc291cmNlYCksZ2V0Um90YXRpb25Qb2ludDp0LmdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludCxnZXRSb3RhdGlvbk9mZnNldDp0LmdldFNvdXJjZUxhYmVsUm90YXRpb25PZmZzZXQsaXNWaXNpYmxlOmEoYHNvdXJjZS1sYWJlbGApfSksbi5kcmF3aW5nLmFkZFRleHR1cmVBdGxhc1JlbmRlclR5cGUoYGVkZ2UtdGFyZ2V0LWxhYmVsYCx7Y29sbGVjdGlvbjpgbGFiZWxgLGdldFRleFBpY2tpbmdNb2RlOnMsZ2V0S2V5OnN3KHQuZ2V0VGFyZ2V0TGFiZWxLZXksYHRhcmdldGApLGdldEJvdW5kaW5nQm94OmN3KHQuZ2V0VGFyZ2V0TGFiZWxCb3gsYHRhcmdldGApLGRyYXdDbGlwcGVkOiEwLGRyYXdFbGVtZW50OnQuZHJhd1RhcmdldExhYmVsLGdldFJvdGF0aW9uOmkoYHRhcmdldGApLGdldFJvdGF0aW9uUG9pbnQ6dC5nZXRUYXJnZXRMYWJlbFJvdGF0aW9uUG9pbnQsZ2V0Um90YXRpb25PZmZzZXQ6dC5nZXRUYXJnZXRMYWJlbFJvdGF0aW9uT2Zmc2V0LGlzVmlzaWJsZTphKGB0YXJnZXQtbGFiZWxgKX0pO3ZhciBsPWl1KGZ1bmN0aW9uKCl7Y29uc29sZS5sb2coYGdhcmJhZ2UgY29sbGVjdCBmbGFnIHNldGApLG4uZGF0YS5nYz0hMH0sMWU0KTtuLm9uVXBkYXRlRWxlQ2FsY3MoZnVuY3Rpb24oZSx0KXt2YXIgcj0hMTt0JiZ0Lmxlbmd0aD4wJiYocnw9bi5kcmF3aW5nLmludmFsaWRhdGUodCkpLHImJmwoKX0pLGx3KG4pfTtmdW5jdGlvbiBhdyhlKXt2YXIgdD1lLmN5LmNvbnRhaW5lcigpO3JldHVybiB1bCh0JiZ0LnN0eWxlJiZ0LnN0eWxlLmJhY2tncm91bmRDb2xvcnx8YHdoaXRlYCl9ZnVuY3Rpb24gb3coZSx0KXt2YXIgbj1lLl9wcml2YXRlLnJzY3JhdGNoO3JldHVybiBxdShuLGBsYWJlbFdyYXBDYWNoZWRMaW5lc2AsdCl8fFtdfXZhciBzdz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1lKG4pLGk9b3cobix0KTtyZXR1cm4gaS5sZW5ndGg+MT9pLm1hcChmdW5jdGlvbihlLHQpe3JldHVybmAke3J9XyR7dH1gfSk6cn19LGN3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7dmFyIGk9ZShuKTtpZih0eXBlb2Ygcj09YHN0cmluZ2Ape3ZhciBhPXIuaW5kZXhPZihgX2ApO2lmKGE+MCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyaW5nKGErMSkpLHM9b3cobix0KSxjPWkuaC9zLmxlbmd0aCxsPWMqbyx1PWkueTErbDtyZXR1cm57eDE6aS54MSx3Omkudyx5MTp1LGg6Yyx5T2Zmc2V0Omx9fX1yZXR1cm4gaX19O2Z1bmN0aW9uIGx3KGUpe3ZhciB0PWUucmVuZGVyO2UucmVuZGVyPWZ1bmN0aW9uKG4pe258fD17fTt2YXIgcj1lLmN5O2Uud2ViZ2wmJihyLnpvb20oKT5yUz8odXcoZSksdC5jYWxsKGUsbikpOihkdyhlKSxidyhlLG4scUMuU0NSRUVOKSkpfTt2YXIgbj1lLm1hdGNoQ2FudmFzU2l6ZTtlLm1hdGNoQ2FudmFzU2l6ZT1mdW5jdGlvbih0KXtuLmNhbGwoZSx0KSxlLnBpY2tpbmdGcmFtZUJ1ZmZlci5zZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRTaXplcyhlLmNhbnZhc1dpZHRoLGUuY2FudmFzSGVpZ2h0KSxlLnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXc9ITB9LGUuZmluZE5lYXJlc3RFbGVtZW50cz1mdW5jdGlvbih0LG4scixpKXtyZXR1cm4gdncoZSx0LG4pfTt2YXIgcj1lLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcztlLmludmFsaWRhdGVDYWNoZWRaU29ydGVkRWxlcz1mdW5jdGlvbigpe3IuY2FsbChlKSxlLnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXc9ITB9O3ZhciBpPWUubm90aWZ5O2Uubm90aWZ5PWZ1bmN0aW9uKHQsbil7aS5jYWxsKGUsdCxuKSx0PT09YHZpZXdwb3J0YHx8dD09PWBib3VuZHNgP2UucGlja2luZ0ZyYW1lQnVmZmVyLm5lZWRzRHJhdz0hMDp0PT09YGJhY2tncm91bmRgJiZlLmRyYXdpbmcuaW52YWxpZGF0ZShuLHt0eXBlOmBub2RlLWJvZHlgfSl9fWZ1bmN0aW9uIHV3KGUpe3ZhciB0PWUuZGF0YS5jb250ZXh0c1tlLldFQkdMXTt0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpfWZ1bmN0aW9uIGR3KGUpe3ZhciB0PWZ1bmN0aW9uKHQpe3Quc2F2ZSgpLHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LmNsZWFyUmVjdCgwLDAsZS5jYW52YXNXaWR0aCxlLmNhbnZhc0hlaWdodCksdC5yZXN0b3JlKCl9O3QoZS5kYXRhLmNvbnRleHRzW2UuTk9ERV0pLHQoZS5kYXRhLmNvbnRleHRzW2UuRFJBR10pfWZ1bmN0aW9uIGZ3KGUpe3ZhciB0PWUuY2FudmFzV2lkdGgsbj1lLmNhbnZhc0hlaWdodCxyPW1DKGUpLGk9ci5wYW4sYT1yLnpvb20sbz1qQygpO1BDKG8sbyxbaS54LGkueV0pLElDKG8sbyxbYSxhXSk7dmFyIHM9akMoKTtMQyhzLHQsbik7dmFyIGM9akMoKTtyZXR1cm4gTkMoYyxzLG8pLGN9ZnVuY3Rpb24gcHcoZSx0KXt2YXIgbj1lLmNhbnZhc1dpZHRoLHI9ZS5jYW52YXNIZWlnaHQsaT1tQyhlKSxhPWkucGFuLG89aS56b29tO3Quc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSx0LmNsZWFyUmVjdCgwLDAsbixyKSx0LnRyYW5zbGF0ZShhLngsYS55KSx0LnNjYWxlKG8sbyl9ZnVuY3Rpb24gbXcoZSx0KXtlLmRyYXdTZWxlY3Rpb25SZWN0YW5nbGUodCxmdW5jdGlvbih0KXtyZXR1cm4gcHcoZSx0KX0pfWZ1bmN0aW9uIGh3KGUpe3ZhciB0PWUuZGF0YS5jb250ZXh0c1tlLk5PREVdO3Quc2F2ZSgpLHB3KGUsdCksdC5zdHJva2VTdHlsZT1gcmdiYSgwLCAwLCAwLCAwLjMpYCx0LmJlZ2luUGF0aCgpLHQubW92ZVRvKC0xZTMsMCksdC5saW5lVG8oMWUzLDApLHQuc3Ryb2tlKCksdC5iZWdpblBhdGgoKSx0Lm1vdmVUbygwLC0xZTMpLHQubGluZVRvKDAsMWUzKSx0LnN0cm9rZSgpLHQucmVzdG9yZSgpfWZ1bmN0aW9uIGd3KGUpe3ZhciB0PWZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9dC5hdGxhc01hbmFnZXIuZ2V0QXRsYXNDb2xsZWN0aW9uKG4pLGE9ZS5kYXRhLmNvbnRleHRzW2UuTk9ERV0sbz1pLmF0bGFzZXMscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgYz1vW3NdLmNhbnZhcztpZihjKXt2YXIgbD1jLndpZHRoLHU9Yy5oZWlnaHQsZD1sKnMsZj1jLmhlaWdodCpyLHA9LjQ7YS5zYXZlKCksYS5zY2FsZShwLHApLGEuZHJhd0ltYWdlKGMsZCxmKSxhLnN0cm9rZVN0eWxlPWBibGFja2AsYS5yZWN0KGQsZixsLHUpLGEuc3Ryb2tlKCksYS5yZXN0b3JlKCl9fX0sbj0wO3QoZS5kcmF3aW5nLGBub2RlYCxuKyspLHQoZS5kcmF3aW5nLGBsYWJlbGAsbisrKX1mdW5jdGlvbiBfdyhlLHQsbixyLGkpe3ZhciBhLG8scyxjLGw9bUMoZSksdT1sLnBhbixkPWwuem9vbSxmPW1jKGdDKGUsdSxkLHQsbiksMikscD1mWzBdLG09ZlsxXSxoPTY7aWYoYT1wLWgvMixvPW0taC8yLHM9aCxjPWgscz09PTB8fGM9PT0wKXJldHVybltdO3ZhciBnPWUuZGF0YS5jb250ZXh0c1tlLldFQkdMXTtnLmJpbmRGcmFtZWJ1ZmZlcihnLkZSQU1FQlVGRkVSLGUucGlja2luZ0ZyYW1lQnVmZmVyKSxlLnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXcmJihnLnZpZXdwb3J0KDAsMCxnLmNhbnZhcy53aWR0aCxnLmNhbnZhcy5oZWlnaHQpLGJ3KGUsbnVsbCxxQy5QSUNLSU5HKSxlLnBpY2tpbmdGcmFtZUJ1ZmZlci5uZWVkc0RyYXc9ITEpO3ZhciBfPXMqYyx2PW5ldyBVaW50OEFycmF5KF8qNCk7Zy5yZWFkUGl4ZWxzKGEsbyxzLGMsZy5SR0JBLGcuVU5TSUdORURfQllURSx2KSxnLmJpbmRGcmFtZWJ1ZmZlcihnLkZSQU1FQlVGRkVSLG51bGwpO2Zvcih2YXIgeT1uZXcgU2V0LGI9MDtiPF87YisrKXt2YXIgeD14Qyh2LnNsaWNlKGIqNCxiKjQrNCkpLTE7eD49MCYmeS5hZGQoeCl9cmV0dXJuIHl9ZnVuY3Rpb24gdncoZSx0LG4pe3ZhciByPV93KGUsdCxuKSxpPWUuZ2V0Q2FjaGVkWlNvcnRlZEVsZXMoKSxhLG8scz1jYyhyKSxjO3RyeXtmb3Iocy5zKCk7IShjPXMubigpKS5kb25lOyl7dmFyIGw9aVtjLnZhbHVlXTtpZighYSYmbC5pc05vZGUoKSYmKGE9bCksIW8mJmwuaXNFZGdlKCkmJihvPWwpLGEmJm8pYnJlYWt9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXJldHVyblthLG9dLmZpbHRlcihCb29sZWFuKX1mdW5jdGlvbiB5dyhlLHQsbil7dmFyIHI9ZS5kcmF3aW5nO3QrPTEsbi5pc05vZGUoKT8oci5kcmF3Tm9kZShuLHQsYG5vZGUtdW5kZXJsYXlgKSxyLmRyYXdOb2RlKG4sdCxgbm9kZS1ib2R5YCksci5kcmF3VGV4dHVyZShuLHQsYGxhYmVsYCksci5kcmF3Tm9kZShuLHQsYG5vZGUtb3ZlcmxheWApKTooci5kcmF3RWRnZUxpbmUobix0KSxyLmRyYXdFZGdlQXJyb3cobix0LGBzb3VyY2VgKSxyLmRyYXdFZGdlQXJyb3cobix0LGB0YXJnZXRgKSxyLmRyYXdUZXh0dXJlKG4sdCxgbGFiZWxgKSxyLmRyYXdUZXh0dXJlKG4sdCxgZWRnZS1zb3VyY2UtbGFiZWxgKSxyLmRyYXdUZXh0dXJlKG4sdCxgZWRnZS10YXJnZXQtbGFiZWxgKSl9ZnVuY3Rpb24gYncoZSx0LG4pe3ZhciByO2Uud2ViZ2xEZWJ1ZyYmKHI9cGVyZm9ybWFuY2Uubm93KCkpO3ZhciBpPWUuZHJhd2luZyxhPTA7aWYobi5zY3JlZW4mJmUuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tlLlNFTEVDVF9CT1hdJiZtdyhlLHQpLGUuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tlLk5PREVdfHxuLnBpY2tpbmcpe3ZhciBvPWUuZGF0YS5jb250ZXh0c1tlLldFQkdMXTtuLnNjcmVlbj8oby5jbGVhckNvbG9yKDAsMCwwLDApLG8uZW5hYmxlKG8uQkxFTkQpLG8uYmxlbmRGdW5jKG8uT05FLG8uT05FX01JTlVTX1NSQ19BTFBIQSkpOm8uZGlzYWJsZShvLkJMRU5EKSxvLmNsZWFyKG8uQ09MT1JfQlVGRkVSX0JJVHxvLkRFUFRIX0JVRkZFUl9CSVQpLG8udmlld3BvcnQoMCwwLG8uY2FudmFzLndpZHRoLG8uY2FudmFzLmhlaWdodCk7dmFyIHM9ZncoZSksYz1lLmdldENhY2hlZFpTb3J0ZWRFbGVzKCk7aWYoYT1jLmxlbmd0aCxpLnN0YXJ0RnJhbWUocyxuKSxuLnNjcmVlbil7Zm9yKHZhciBsPTA7bDxjLm5vbmRyYWcubGVuZ3RoO2wrKyl5dyhlLGwsYy5ub25kcmFnW2xdKTtmb3IodmFyIHU9MDt1PGMuZHJhZy5sZW5ndGg7dSsrKXl3KGUsdSxjLmRyYWdbdV0pfWVsc2UgaWYobi5waWNraW5nKWZvcih2YXIgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXl3KGUsZCxjW2RdKTtpLmVuZEZyYW1lKCksbi5zY3JlZW4mJmUud2ViZ2xEZWJ1Z1Nob3dBdGxhc2VzJiYoaHcoZSksZ3coZSkpLGUuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tlLk5PREVdPSExLGUuZGF0YS5jYW52YXNOZWVkc1JlZHJhd1tlLkRSQUddPSExfWlmKGUud2ViZ2xEZWJ1Zyl7dmFyIGY9cGVyZm9ybWFuY2Uubm93KCkscD1NYXRoLmNlaWwoZi1yKSxtPWkuZ2V0RGVidWdJbmZvKCksaD1bYCR7YX0gZWxlbWVudHNgLGAke20udG90YWxJbnN0YW5jZXN9IGluc3RhbmNlc2AsYCR7bS5iYXRjaENvdW50fSBiYXRjaGVzYCxgJHttLnRvdGFsQXRsYXNlc30gYXRsYXNlc2AsYCR7bS53cmFwcGVkQ291bnR9IHdyYXBwZWQgdGV4dHVyZXNgLGAke20uc2ltcGxlQ291bnR9IHNpbXBsZSBzaGFwZXNgXS5qb2luKGAsIGApO2NvbnNvbGUubG9nKGBXZWJHTCAoJHtuLm5hbWV9KSAtIGZyYW1lIHRpbWUgJHtwfW1zYCksY29uc29sZS5sb2coYFRvdGFsczpgKSxjb25zb2xlLmxvZyhgICAke2h9YCksY29uc29sZS5sb2coYFRleHR1cmUgQXRsYXNlcyBVc2VkOmApO3ZhciBnPW0uYXRsYXNJbmZvLF89Y2MoZyksdjt0cnl7Zm9yKF8ucygpOyEodj1fLm4oKSkuZG9uZTspe3ZhciB5PXYudmFsdWU7Y29uc29sZS5sb2coYCAgJHt5LnR5cGV9OiAke3kua2V5Q291bnR9IGtleXMsICR7eS5hdGxhc0NvdW50fSBhdGxhc2VzYCl9fWNhdGNoKGUpe18uZShlKX1maW5hbGx5e18uZigpfWNvbnNvbGUubG9nKGBgKX1lLmRhdGEuZ2MmJihjb25zb2xlLmxvZyhgR2FyYmFnZSBDb2xsZWN0IWApLGUuZGF0YS5nYz0hMSxpLmdjKCkpfXZhciB4dz17fTt4dy5kcmF3UG9seWdvblBhdGg9ZnVuY3Rpb24oZSx0LG4scixpLGEpe3ZhciBvPXIvMixzPWkvMjtlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0K28qYVswXSxuK3MqYVsxXSk7Zm9yKHZhciBjPTE7YzxhLmxlbmd0aC8yO2MrKyllLmxpbmVUbyh0K28qYVtjKjJdLG4rcyphW2MqMisxXSk7ZS5jbG9zZVBhdGgoKX0seHcuZHJhd1JvdW5kUG9seWdvblBhdGg9ZnVuY3Rpb24oZSx0LG4scixpLGEsbyl7by5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB4eChlLHQpfSksZS5jbG9zZVBhdGgoKX0seHcuZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aD1mdW5jdGlvbihlLHQsbixyLGksYSl7dmFyIG89ci8yLHM9aS8yLGM9YT09PWBhdXRvYD9BZihyLGkpOk1hdGgubWluKGEscyxvKTtlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0LG4tcyksZS5hcmNUbyh0K28sbi1zLHQrbyxuLGMpLGUuYXJjVG8odCtvLG4rcyx0LG4rcyxjKSxlLmFyY1RvKHQtbyxuK3MsdC1vLG4sYyksZS5hcmNUbyh0LW8sbi1zLHQsbi1zLGMpLGUubGluZVRvKHQsbi1zKSxlLmNsb3NlUGF0aCgpfSx4dy5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKGUsdCxuLHIsaSxhKXt2YXIgbz1yLzIscz1pLzIsYz1hPT09YGF1dG9gP0FmKHIsaSk6YTtlLmJlZ2luUGF0aCYmZS5iZWdpblBhdGgoKSxlLm1vdmVUbyh0LG4tcyksZS5saW5lVG8odCtvLG4tcyksZS5saW5lVG8odCtvLG4pLGUuYXJjVG8odCtvLG4rcyx0LG4rcyxjKSxlLmFyY1RvKHQtbyxuK3MsdC1vLG4sYyksZS5saW5lVG8odC1vLG4tcyksZS5saW5lVG8odCxuLXMpLGUuY2xvc2VQYXRoKCl9LHh3LmRyYXdDdXRSZWN0YW5nbGVQYXRoPWZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8pe3ZhciBzPXIvMixjPWkvMixsPW89PT1gYXV0b2A/TWYoKTpvO2UuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHQtcytsLG4tYyksZS5saW5lVG8odCtzLWwsbi1jKSxlLmxpbmVUbyh0K3Msbi1jK2wpLGUubGluZVRvKHQrcyxuK2MtbCksZS5saW5lVG8odCtzLWwsbitjKSxlLmxpbmVUbyh0LXMrbCxuK2MpLGUubGluZVRvKHQtcyxuK2MtbCksZS5saW5lVG8odC1zLG4tYytsKSxlLmNsb3NlUGF0aCgpfSx4dy5kcmF3QmFycmVsUGF0aD1mdW5jdGlvbihlLHQsbixyLGkpe3ZhciBhPXIvMixvPWkvMixzPXQtYSxjPXQrYSxsPW4tbyx1PW4rbyxkPVBmKHIsaSksZj1kLndpZHRoT2Zmc2V0LHA9ZC5oZWlnaHRPZmZzZXQsbT1kLmN0cmxQdE9mZnNldFBjdCpmO2UuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGUubW92ZVRvKHMsbCtwKSxlLmxpbmVUbyhzLHUtcCksZS5xdWFkcmF0aWNDdXJ2ZVRvKHMrbSx1LHMrZix1KSxlLmxpbmVUbyhjLWYsdSksZS5xdWFkcmF0aWNDdXJ2ZVRvKGMtbSx1LGMsdS1wKSxlLmxpbmVUbyhjLGwrcCksZS5xdWFkcmF0aWNDdXJ2ZVRvKGMtbSxsLGMtZixsKSxlLmxpbmVUbyhzK2YsbCksZS5xdWFkcmF0aWNDdXJ2ZVRvKHMrbSxsLHMsbCtwKSxlLmNsb3NlUGF0aCgpfTtmb3IodmFyIFN3PU1hdGguc2luKDApLEN3PU1hdGguY29zKDApLHd3PXt9LFR3PXt9LEV3PU1hdGguUEkvNDAsRHc9MCpNYXRoLlBJO0R3PDIqTWF0aC5QSTtEdys9RXcpd3dbRHddPU1hdGguc2luKER3KSxUd1tEd109TWF0aC5jb3MoRHcpO3h3LmRyYXdFbGxpcHNlUGF0aD1mdW5jdGlvbihlLHQsbixyLGkpe2lmKGUuYmVnaW5QYXRoJiZlLmJlZ2luUGF0aCgpLGUuZWxsaXBzZSllLmVsbGlwc2UodCxuLHIvMixpLzIsMCwwLDIqTWF0aC5QSSk7ZWxzZSBmb3IodmFyIGEsbyxzPXIvMixjPWkvMixsPTAqTWF0aC5QSTtsPDIqTWF0aC5QSTtsKz1FdylhPXQtcyp3d1tsXSpTdytzKlR3W2xdKkN3LG89bitjKlR3W2xdKlN3K2Mqd3dbbF0qQ3csbD09PTA/ZS5tb3ZlVG8oYSxvKTplLmxpbmVUbyhhLG8pO2UuY2xvc2VQYXRoKCl9O3ZhciBPdz17fTtPdy5jcmVhdGVCdWZmZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGBjYW52YXNgKTtyZXR1cm4gbi53aWR0aD1lLG4uaGVpZ2h0PXQsW24sbi5nZXRDb250ZXh0KGAyZGApXX0sT3cuYnVmZmVyQ2FudmFzSW1hZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jeSxuPXQubXV0YWJsZUVsZW1lbnRzKCkuYm91bmRpbmdCb3goKSxyPXRoaXMuZmluZENvbnRhaW5lckNsaWVudENvb3JkcygpLGk9ZS5mdWxsP01hdGguY2VpbChuLncpOnJbMl0sYT1lLmZ1bGw/TWF0aC5jZWlsKG4uaCk6clszXSxvPVEoZS5tYXhXaWR0aCl8fFEoZS5tYXhIZWlnaHQpLHM9dGhpcy5nZXRQaXhlbFJhdGlvKCksYz0xO2lmKGUuc2NhbGUhPT12b2lkIDApaSo9ZS5zY2FsZSxhKj1lLnNjYWxlLGM9ZS5zY2FsZTtlbHNlIGlmKG8pe3ZhciBsPTEvMCx1PTEvMDtRKGUubWF4V2lkdGgpJiYobD1jKmUubWF4V2lkdGgvaSksUShlLm1heEhlaWdodCkmJih1PWMqZS5tYXhIZWlnaHQvYSksYz1NYXRoLm1pbihsLHUpLGkqPWMsYSo9Y31vfHwoaSo9cyxhKj1zLGMqPXMpO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYGNhbnZhc2ApO2Qud2lkdGg9aSxkLmhlaWdodD1hLGQuc3R5bGUud2lkdGg9aStgcHhgLGQuc3R5bGUuaGVpZ2h0PWErYHB4YDt2YXIgZj1kLmdldENvbnRleHQoYDJkYCk7aWYoaT4wJiZhPjApe2YuY2xlYXJSZWN0KDAsMCxpLGEpLGYuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWBzb3VyY2Utb3ZlcmA7dmFyIHA9dGhpcy5nZXRDYWNoZWRaU29ydGVkRWxlcygpO2lmKGUuZnVsbClmLnRyYW5zbGF0ZSgtbi54MSpjLC1uLnkxKmMpLGYuc2NhbGUoYyxjKSx0aGlzLmRyYXdFbGVtZW50cyhmLHApO2Vsc2V7dmFyIG09dC5wYW4oKSxoPXt4Om0ueCpjLHk6bS55KmN9O2MqPXQuem9vbSgpLGYudHJhbnNsYXRlKGgueCxoLnkpLGYuc2NhbGUoYyxjKSx0aGlzLmRyYXdFbGVtZW50cyhmLHApfWYuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxlLmJnJiYoZi5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249YGRlc3RpbmF0aW9uLW92ZXJgLGYuZmlsbFN0eWxlPWUuYmcsZi5maWxsUmVjdCgwLDAsaSxhKSl9cmV0dXJuIGR9O2Z1bmN0aW9uIGt3KGUsdCl7Zm9yKHZhciBuPWF0b2IoZSkscj1uZXcgQXJyYXlCdWZmZXIobi5sZW5ndGgpLGk9bmV3IFVpbnQ4QXJyYXkociksYT0wO2E8bi5sZW5ndGg7YSsrKWlbYV09bi5jaGFyQ29kZUF0KGEpO3JldHVybiBuZXcgQmxvYihbcl0se3R5cGU6dH0pfWZ1bmN0aW9uIEF3KGUpe3ZhciB0PWUuaW5kZXhPZihgLGApO3JldHVybiBlLnN1YnN0cih0KzEpfWZ1bmN0aW9uIGp3KGUsdCxuKXt2YXIgcj1mdW5jdGlvbigpe3JldHVybiB0LnRvRGF0YVVSTChuLGUucXVhbGl0eSl9O3N3aXRjaChlLm91dHB1dCl7Y2FzZWBibG9iLXByb21pc2VgOnJldHVybiBuZXcgZG0oZnVuY3Rpb24ocixpKXt0cnl7dC50b0Jsb2IoZnVuY3Rpb24oZSl7ZT09bnVsbD9pKEVycm9yKCJgY2FudmFzLnRvQmxvYigpYCBzZW50IGEgbnVsbCB2YWx1ZSBpbiBpdHMgY2FsbGJhY2siKSk6cihlKX0sbixlLnF1YWxpdHkpfWNhdGNoKGUpe2koZSl9fSk7Y2FzZWBibG9iYDpyZXR1cm4ga3coQXcocigpKSxuKTtjYXNlYGJhc2U2NGA6cmV0dXJuIEF3KHIoKSk7ZGVmYXVsdDpyZXR1cm4gcigpfX1Pdy5wbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGp3KGUsdGhpcy5idWZmZXJDYW52YXNJbWFnZShlKSxgaW1hZ2UvcG5nYCl9LE93LmpwZz1mdW5jdGlvbihlKXtyZXR1cm4gancoZSx0aGlzLmJ1ZmZlckNhbnZhc0ltYWdlKGUpLGBpbWFnZS9qcGVnYCl9O3ZhciBNdz17fTtNdy5ub2RlU2hhcGVJbXBsPWZ1bmN0aW9uKGUsdCxuLHIsaSxhLG8scyl7c3dpdGNoKGUpe2Nhc2VgZWxsaXBzZWA6cmV0dXJuIHRoaXMuZHJhd0VsbGlwc2VQYXRoKHQsbixyLGksYSk7Y2FzZWBwb2x5Z29uYDpyZXR1cm4gdGhpcy5kcmF3UG9seWdvblBhdGgodCxuLHIsaSxhLG8pO2Nhc2Vgcm91bmQtcG9seWdvbmA6cmV0dXJuIHRoaXMuZHJhd1JvdW5kUG9seWdvblBhdGgodCxuLHIsaSxhLG8scyk7Y2FzZWByb3VuZHJlY3RhbmdsZWA6Y2FzZWByb3VuZC1yZWN0YW5nbGVgOnJldHVybiB0aGlzLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgodCxuLHIsaSxhLHMpO2Nhc2VgY3V0cmVjdGFuZ2xlYDpjYXNlYGN1dC1yZWN0YW5nbGVgOnJldHVybiB0aGlzLmRyYXdDdXRSZWN0YW5nbGVQYXRoKHQsbixyLGksYSxvLHMpO2Nhc2VgYm90dG9tcm91bmRyZWN0YW5nbGVgOmNhc2VgYm90dG9tLXJvdW5kLXJlY3RhbmdsZWA6cmV0dXJuIHRoaXMuZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlUGF0aCh0LG4scixpLGEscyk7Y2FzZWBiYXJyZWxgOnJldHVybiB0aGlzLmRyYXdCYXJyZWxQYXRoKHQsbixyLGksYSl9fTt2YXIgTnc9RncsUHc9RncucHJvdG90eXBlO1B3LkNBTlZBU19MQVlFUlM9MyxQdy5TRUxFQ1RfQk9YPTAsUHcuRFJBRz0xLFB3Lk5PREU9MixQdy5XRUJHTD0zLFB3LkNBTlZBU19UWVBFUz1bYDJkYCxgMmRgLGAyZGAsYHdlYmdsMmBdLFB3LkJVRkZFUl9DT1VOVD0zLFB3LlRFWFRVUkVfQlVGRkVSPTAsUHcuTU9USU9OQkxVUl9CVUZGRVJfTk9ERT0xLFB3Lk1PVElPTkJMVVJfQlVGRkVSX0RSQUc9MjtmdW5jdGlvbiBGdyhlKXt2YXIgdD10aGlzLG49dC5jeS53aW5kb3coKS5kb2N1bWVudDtlLndlYmdsJiYoUHcuQ0FOVkFTX0xBWUVSUz10LkNBTlZBU19MQVlFUlM9NCxjb25zb2xlLmxvZyhgd2ViZ2wgcmVuZGVyaW5nIGVuYWJsZWRgKSksdC5kYXRhPXtjYW52YXNlczpBcnJheShQdy5DQU5WQVNfTEFZRVJTKSxjb250ZXh0czpBcnJheShQdy5DQU5WQVNfTEFZRVJTKSxjYW52YXNOZWVkc1JlZHJhdzpBcnJheShQdy5DQU5WQVNfTEFZRVJTKSxidWZmZXJDYW52YXNlczpBcnJheShQdy5CVUZGRVJfQ09VTlQpLGJ1ZmZlckNvbnRleHRzOkFycmF5KFB3LkNBTlZBU19MQVlFUlMpfTt2YXIgcj1gLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yYCxpPWByZ2JhKDAsMCwwLDApYDt0LmRhdGEuY2FudmFzQ29udGFpbmVyPW4uY3JlYXRlRWxlbWVudChgZGl2YCk7dmFyIGE9dC5kYXRhLmNhbnZhc0NvbnRhaW5lci5zdHlsZTt0LmRhdGEuY2FudmFzQ29udGFpbmVyLnN0eWxlW3JdPWksYS5wb3NpdGlvbj1gcmVsYXRpdmVgLGEuekluZGV4PWAwYCxhLm92ZXJmbG93PWBoaWRkZW5gO3ZhciBvPWUuY3kuY29udGFpbmVyKCk7by5hcHBlbmRDaGlsZCh0LmRhdGEuY2FudmFzQ29udGFpbmVyKSxvLnN0eWxlW3JdPWk7dmFyIHM9eyItd2Via2l0LXVzZXItc2VsZWN0Ijpgbm9uZWAsIi1tb3otdXNlci1zZWxlY3QiOmAtbW96LW5vbmVgLCJ1c2VyLXNlbGVjdCI6YG5vbmVgLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOmByZ2JhKDAsMCwwLDApYCwib3V0bGluZS1zdHlsZSI6YG5vbmVgfTtVYygpJiYoc1tgLW1zLXRvdWNoLWFjdGlvbmBdPWBub25lYCxzW2B0b3VjaC1hY3Rpb25gXT1gbm9uZWApO2Zvcih2YXIgYz0wO2M8UHcuQ0FOVkFTX0xBWUVSUztjKyspe3ZhciBsPXQuZGF0YS5jYW52YXNlc1tjXT1uLmNyZWF0ZUVsZW1lbnQoYGNhbnZhc2ApLHU9UHcuQ0FOVkFTX1RZUEVTW2NdO3QuZGF0YS5jb250ZXh0c1tjXT1sLmdldENvbnRleHQodSksdC5kYXRhLmNvbnRleHRzW2NdfHxQdShgQ291bGQgbm90IGNyZWF0ZSBjYW52YXMgb2YgdHlwZSBgK3UpLE9iamVjdC5rZXlzKHMpLmZvckVhY2goZnVuY3Rpb24oZSl7bC5zdHlsZVtlXT1zW2VdfSksbC5zdHlsZS5wb3NpdGlvbj1gYWJzb2x1dGVgLGwuc2V0QXR0cmlidXRlKGBkYXRhLWlkYCxgbGF5ZXJgK2MpLGwuc3R5bGUuekluZGV4PVN0cmluZyhQdy5DQU5WQVNfTEFZRVJTLWMpLHQuZGF0YS5jYW52YXNDb250YWluZXIuYXBwZW5kQ2hpbGQobCksdC5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W2NdPSExfXQuZGF0YS50b3BDYW52YXM9dC5kYXRhLmNhbnZhc2VzWzBdLHQuZGF0YS5jYW52YXNlc1tQdy5OT0RFXS5zZXRBdHRyaWJ1dGUoYGRhdGEtaWRgLGBsYXllcmArUHcuTk9ERStgLW5vZGVgKSx0LmRhdGEuY2FudmFzZXNbUHcuU0VMRUNUX0JPWF0uc2V0QXR0cmlidXRlKGBkYXRhLWlkYCxgbGF5ZXJgK1B3LlNFTEVDVF9CT1grYC1zZWxlY3Rib3hgKSx0LmRhdGEuY2FudmFzZXNbUHcuRFJBR10uc2V0QXR0cmlidXRlKGBkYXRhLWlkYCxgbGF5ZXJgK1B3LkRSQUcrYC1kcmFnYCksdC5kYXRhLmNhbnZhc2VzW1B3LldFQkdMXSYmdC5kYXRhLmNhbnZhc2VzW1B3LldFQkdMXS5zZXRBdHRyaWJ1dGUoYGRhdGEtaWRgLGBsYXllcmArUHcuV0VCR0wrYC13ZWJnbGApO2Zvcih2YXIgYz0wO2M8UHcuQlVGRkVSX0NPVU5UO2MrKyl0LmRhdGEuYnVmZmVyQ2FudmFzZXNbY109bi5jcmVhdGVFbGVtZW50KGBjYW52YXNgKSx0LmRhdGEuYnVmZmVyQ29udGV4dHNbY109dC5kYXRhLmJ1ZmZlckNhbnZhc2VzW2NdLmdldENvbnRleHQoYDJkYCksdC5kYXRhLmJ1ZmZlckNhbnZhc2VzW2NdLnN0eWxlLnBvc2l0aW9uPWBhYnNvbHV0ZWAsdC5kYXRhLmJ1ZmZlckNhbnZhc2VzW2NdLnNldEF0dHJpYnV0ZShgZGF0YS1pZGAsYGJ1ZmZlcmArYyksdC5kYXRhLmJ1ZmZlckNhbnZhc2VzW2NdLnN0eWxlLnpJbmRleD1TdHJpbmcoLWMtMSksdC5kYXRhLmJ1ZmZlckNhbnZhc2VzW2NdLnN0eWxlLnZpc2liaWxpdHk9YGhpZGRlbmA7dC5wYXRoc0VuYWJsZWQ9ITA7dmFyIGQ9V2QoKSxmPWZ1bmN0aW9uKGUpe3JldHVybnt4OihlLngxK2UueDIpLzIseTooZS55MStlLnkyKS8yfX0scD1mdW5jdGlvbihlKXtyZXR1cm57eDotZS53LzIseTotZS5oLzJ9fSxtPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0uX3ByaXZhdGU7cmV0dXJuIHQub2xkQmFja2dyb3VuZFRpbWVzdGFtcCE9PXQuYmFja2dyb3VuZFRpbWVzdGFtcH0saD1mdW5jdGlvbihlKXtyZXR1cm4gZVswXS5fcHJpdmF0ZS5ub2RlS2V5fSxnPWZ1bmN0aW9uKGUpe3JldHVybiBlWzBdLl9wcml2YXRlLmxhYmVsU3R5bGVLZXl9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF0uX3ByaXZhdGUuc291cmNlTGFiZWxTdHlsZUtleX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gZVswXS5fcHJpdmF0ZS50YXJnZXRMYWJlbFN0eWxlS2V5fSx5PWZ1bmN0aW9uKGUsbixyLGksYSl7cmV0dXJuIHQuZHJhd0VsZW1lbnQoZSxuLHIsITEsITEsYSl9LGI9ZnVuY3Rpb24oZSxuLHIsaSxhKXtyZXR1cm4gdC5kcmF3RWxlbWVudFRleHQoZSxuLHIsaSxgbWFpbmAsYSl9LHg9ZnVuY3Rpb24oZSxuLHIsaSxhKXtyZXR1cm4gdC5kcmF3RWxlbWVudFRleHQoZSxuLHIsaSxgc291cmNlYCxhKX0sUz1mdW5jdGlvbihlLG4scixpLGEpe3JldHVybiB0LmRyYXdFbGVtZW50VGV4dChlLG4scixpLGB0YXJnZXRgLGEpfSxDPWZ1bmN0aW9uKGUpe3JldHVybiBlLmJvdW5kaW5nQm94KCksZVswXS5fcHJpdmF0ZS5ib2R5Qm91bmRzfSx3PWZ1bmN0aW9uKGUpe3JldHVybiBlLmJvdW5kaW5nQm94KCksZVswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5tYWlufHxkfSxUPWZ1bmN0aW9uKGUpe3JldHVybiBlLmJvdW5kaW5nQm94KCksZVswXS5fcHJpdmF0ZS5sYWJlbEJvdW5kcy5zb3VyY2V8fGR9LEU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYm91bmRpbmdCb3goKSxlWzBdLl9wcml2YXRlLmxhYmVsQm91bmRzLnRhcmdldHx8ZH0sRD1mdW5jdGlvbihlLHQpe3JldHVybiB0fSxPPWZ1bmN0aW9uKGUpe3JldHVybiBmKEMoZSkpfSxrPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lP2UrYC1gOmBgO3JldHVybnt4OnQueCtuLnBzdHlsZShyK2B0ZXh0LW1hcmdpbi14YCkucGZWYWx1ZSx5OnQueStuLnBzdHlsZShyK2B0ZXh0LW1hcmdpbi15YCkucGZWYWx1ZX19LEE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWVbMF0uX3ByaXZhdGUucnNjcmF0Y2g7cmV0dXJue3g6clt0XSx5OnJbbl19fSxqPWZ1bmN0aW9uKGUpe3JldHVybiBrKGBgLEEoZSxgbGFiZWxYYCxgbGFiZWxZYCksZSl9LE09ZnVuY3Rpb24oZSl7cmV0dXJuIGsoYHNvdXJjZWAsQShlLGBzb3VyY2VMYWJlbFhgLGBzb3VyY2VMYWJlbFlgKSxlKX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gayhgdGFyZ2V0YCxBKGUsYHRhcmdldExhYmVsWGAsYHRhcmdldExhYmVsWWApLGUpfSxQPWZ1bmN0aW9uKGUpe3JldHVybiBwKEMoZSkpfSxGPWZ1bmN0aW9uKGUpe3JldHVybiBwKFQoZSkpfSxJPWZ1bmN0aW9uKGUpe3JldHVybiBwKEUoZSkpfSxMPWZ1bmN0aW9uKGUpe3ZhciB0PXcoZSksbj1wKHcoZSkpO2lmKGUuaXNOb2RlKCkpe3N3aXRjaChldihlLnBzdHlsZShgdGV4dC1oYWxpZ25gKS52YWx1ZSkpe2Nhc2VgbGVmdGA6bi54PS10LnctKHQubGVmdFBhZHx8MCk7YnJlYWs7Y2FzZWByaWdodGA6bi54PS0odC5yaWdodFBhZHx8MCl9c3dpdGNoKHR2KGUucHN0eWxlKGB0ZXh0LXZhbGlnbmApLnZhbHVlKSl7Y2FzZWB0b3BgOm4ueT0tdC5oLSh0LnRvcFBhZHx8MCk7YnJlYWs7Y2FzZWBib3R0b21gOm4ueT0tKHQuYm90UGFkfHwwKX19cmV0dXJuIG59LFI9dC5kYXRhLmVsZVR4ckNhY2hlPW5ldyB5Uyh0LHtnZXRLZXk6aCxkb2VzRWxlSW52YWxpZGF0ZUtleTptLGRyYXdFbGVtZW50OnksZ2V0Qm91bmRpbmdCb3g6QyxnZXRSb3RhdGlvblBvaW50Ok8sZ2V0Um90YXRpb25PZmZzZXQ6UCxhbGxvd0VkZ2VUeHJDYWNoaW5nOiExLGFsbG93UGFyZW50VHhyQ2FjaGluZzohMX0pLHo9dC5kYXRhLmxibFR4ckNhY2hlPW5ldyB5Uyh0LHtnZXRLZXk6ZyxkcmF3RWxlbWVudDpiLGdldEJvdW5kaW5nQm94OncsZ2V0Um90YXRpb25Qb2ludDpqLGdldFJvdGF0aW9uT2Zmc2V0OkwsaXNWaXNpYmxlOkR9KSxCPXQuZGF0YS5zbGJUeHJDYWNoZT1uZXcgeVModCx7Z2V0S2V5Ol8sZHJhd0VsZW1lbnQ6eCxnZXRCb3VuZGluZ0JveDpULGdldFJvdGF0aW9uUG9pbnQ6TSxnZXRSb3RhdGlvbk9mZnNldDpGLGlzVmlzaWJsZTpEfSksVj10LmRhdGEudGxiVHhyQ2FjaGU9bmV3IHlTKHQse2dldEtleTp2LGRyYXdFbGVtZW50OlMsZ2V0Qm91bmRpbmdCb3g6RSxnZXRSb3RhdGlvblBvaW50Ok4sZ2V0Um90YXRpb25PZmZzZXQ6SSxpc1Zpc2libGU6RH0pLEg9dC5kYXRhLmx5clR4ckNhY2hlPW5ldyBJUyh0KTt0Lm9uVXBkYXRlRWxlQ2FsY3MoZnVuY3Rpb24oZSx0KXtSLmludmFsaWRhdGVFbGVtZW50cyh0KSx6LmludmFsaWRhdGVFbGVtZW50cyh0KSxCLmludmFsaWRhdGVFbGVtZW50cyh0KSxWLmludmFsaWRhdGVFbGVtZW50cyh0KSxILmludmFsaWRhdGVFbGVtZW50cyh0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXS5fcHJpdmF0ZTtyLm9sZEJhY2tncm91bmRUaW1lc3RhbXA9ci5iYWNrZ3JvdW5kVGltZXN0YW1wfX0pO3ZhciBVPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKUguZW5xdWV1ZUVsZW1lbnRSZWZpbmVtZW50KGVbdF0uZWxlKX07Ui5vbkRlcXVldWUoVSksei5vbkRlcXVldWUoVSksQi5vbkRlcXVldWUoVSksVi5vbkRlcXVldWUoVSksZS53ZWJnbCYmdC5pbml0V2ViZ2woZSx7Z2V0U3R5bGVLZXk6aCxnZXRMYWJlbEtleTpnLGdldFNvdXJjZUxhYmVsS2V5Ol8sZ2V0VGFyZ2V0TGFiZWxLZXk6dixkcmF3RWxlbWVudDp5LGRyYXdMYWJlbDpiLGRyYXdTb3VyY2VMYWJlbDp4LGRyYXdUYXJnZXRMYWJlbDpTLGdldEVsZW1lbnRCb3g6QyxnZXRMYWJlbEJveDp3LGdldFNvdXJjZUxhYmVsQm94OlQsZ2V0VGFyZ2V0TGFiZWxCb3g6RSxnZXRFbGVtZW50Um90YXRpb25Qb2ludDpPLGdldEVsZW1lbnRSb3RhdGlvbk9mZnNldDpQLGdldExhYmVsUm90YXRpb25Qb2ludDpqLGdldFNvdXJjZUxhYmVsUm90YXRpb25Qb2ludDpNLGdldFRhcmdldExhYmVsUm90YXRpb25Qb2ludDpOLGdldExhYmVsUm90YXRpb25PZmZzZXQ6TCxnZXRTb3VyY2VMYWJlbFJvdGF0aW9uT2Zmc2V0OkYsZ2V0VGFyZ2V0TGFiZWxSb3RhdGlvbk9mZnNldDpJfSl9UHcucmVkcmF3SGludD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7c3dpdGNoKGUpe2Nhc2VgZWxlc2A6bi5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W1B3Lk5PREVdPXQ7YnJlYWs7Y2FzZWBkcmFnYDpuLmRhdGEuY2FudmFzTmVlZHNSZWRyYXdbUHcuRFJBR109dDticmVhaztjYXNlYHNlbGVjdGA6bi5kYXRhLmNhbnZhc05lZWRzUmVkcmF3W1B3LlNFTEVDVF9CT1hdPXQ7YnJlYWs7Y2FzZWBnY2A6bi5kYXRhLmdjPSEwfX07dmFyIEl3PXR5cGVvZiBQYXRoMkQ8YHVgO1B3LnBhdGgyZEVuYWJsZWQ9ZnVuY3Rpb24oZSl7aWYoZT09PXZvaWQgMClyZXR1cm4gdGhpcy5wYXRoc0VuYWJsZWQ7dGhpcy5wYXRoc0VuYWJsZWQ9ISFlfSxQdy51c2VQYXRocz1mdW5jdGlvbigpe3JldHVybiBJdyYmdGhpcy5wYXRoc0VuYWJsZWR9LFB3LnNldEltZ1Ntb290aGluZz1mdW5jdGlvbihlLHQpe2UuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPT1udWxsPyhlLndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZD10LGUubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPXQsZS5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZD10KTplLmltYWdlU21vb3RoaW5nRW5hYmxlZD10fSxQdy5nZXRJbWdTbW9vdGhpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW1hZ2VTbW9vdGhpbmdFbmFibGVkPT1udWxsP2Uud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkfHxlLm1vekltYWdlU21vb3RoaW5nRW5hYmxlZHx8ZS5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZDplLmltYWdlU21vb3RoaW5nRW5hYmxlZH0sUHcubWFrZU9mZnNjcmVlbkNhbnZhcz1mdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybih0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPmB1YD9gdW5kZWZpbmVkYDp2YyhPZmZzY3JlZW5DYW52YXMpKT09PWB1bmRlZmluZWRgPyhuPXRoaXMuY3kud2luZG93KCkuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChgY2FudmFzYCksbi53aWR0aD1lLG4uaGVpZ2h0PXQpOm49bmV3IE9mZnNjcmVlbkNhbnZhcyhlLHQpLG59LFtCUyxxUyxlQyxuQyxyQyxvQyxjQyxpdyx4dyxPdyxNd10uZm9yRWFjaChmdW5jdGlvbihlKXthbChQdyxlKX0pO3ZhciBMdz1be3R5cGU6YGxheW91dGAsZXh0ZW5zaW9uczpLYn0se3R5cGU6YHJlbmRlcmVyYCxleHRlbnNpb25zOlt7bmFtZTpgbnVsbGAsaW1wbDpxYn0se25hbWU6YGJhc2VgLGltcGw6Snh9LHtuYW1lOmBjYW52YXNgLGltcGw6Tnd9XX1dLFJ3PXt9LHp3PXt9O2Z1bmN0aW9uIEJ3KGUsdCxuKXt2YXIgcj1uLGk9ZnVuY3Rpb24obil7SXUoIkNhbiBub3QgcmVnaXN0ZXIgYCIrdCsiYCBmb3IgYCIrZSsiYCBzaW5jZSBgIituKyJgIGFscmVhZHkgZXhpc3RzIGluIHRoZSBwcm90b3R5cGUgYW5kIGNhbiBub3QgYmUgb3ZlcnJpZGRlbiIpfTtpZihlPT09YGNvcmVgKXtpZihpYi5wcm90b3R5cGVbdF0pcmV0dXJuIGkodCk7aWIucHJvdG90eXBlW3RdPW59ZWxzZSBpZihlPT09YGNvbGxlY3Rpb25gKXtpZih2eS5wcm90b3R5cGVbdF0pcmV0dXJuIGkodCk7dnkucHJvdG90eXBlW3RdPW59ZWxzZSBpZihlPT09YGxheW91dGApe2Zvcih2YXIgYT1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnM9ZSxuLmNhbGwodGhpcyxlKSxrYyh0aGlzLl9wcml2YXRlKXx8KHRoaXMuX3ByaXZhdGU9e30pLHRoaXMuX3ByaXZhdGUuY3k9ZS5jeSx0aGlzLl9wcml2YXRlLmxpc3RlbmVycz1bXSx0aGlzLmNyZWF0ZUVtaXR0ZXIoKX0sbz1hLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxzPVtdLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGw9c1tjXTtvW2xdPW9bbF18fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fW8uc3RhcnQmJiFvLnJ1bj9vLnJ1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0KCksdGhpc306IW8uc3RhcnQmJm8ucnVuJiYoby5zdGFydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJ1bigpLHRoaXN9KTt2YXIgdT1uLnByb3RvdHlwZS5zdG9wO28uc3RvcD1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztpZihlJiZlLmFuaW1hdGUpe3ZhciB0PXRoaXMuYW5pbWF0aW9ucztpZih0KWZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl0uc3RvcCgpfXJldHVybiB1P3UuY2FsbCh0aGlzKTp0aGlzLmVtaXQoYGxheW91dHN0b3BgKSx0aGlzfSxvLmRlc3Ryb3l8fD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvLmN5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuY3l9O3ZhciBkPWZ1bmN0aW9uKGUpe3JldHVybiBlLl9wcml2YXRlLmN5fSxmPXthZGRFdmVudEZpZWxkczpmdW5jdGlvbihlLHQpe3QubGF5b3V0PWUsdC5jeT1kKGUpLHQudGFyZ2V0PWV9LGJ1YmJsZTpmdW5jdGlvbigpe3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGQoZSl9fTthbChvLHtjcmVhdGVFbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcj1uZXcgQnYoZix0aGlzKSx0aGlzfSxlbWl0dGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZhdGUuZW1pdHRlcn0sb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub24oZSx0KSx0aGlzfSxvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbWl0dGVyKCkub25lKGUsdCksdGhpc30sb25jZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5vbmUoZSx0KSx0aGlzfSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVMaXN0ZW5lcihlLHQpLHRoaXN9LHJlbW92ZUFsbExpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXR0ZXIoKS5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW1pdHRlcigpLmVtaXQoZSx0KSx0aGlzfX0pLGRfLmV2ZW50QWxpYXNlc09uKG8pLHI9YX1lbHNlIGlmKGU9PT1gcmVuZGVyZXJgJiZ0IT09YG51bGxgJiZ0IT09YGJhc2VgKXt2YXIgcD1WdyhgcmVuZGVyZXJgLGBiYXNlYCksbT1wLnByb3RvdHlwZSxoPW4sZz1uLnByb3RvdHlwZSxfPWZ1bmN0aW9uKCl7cC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHY9Xy5wcm90b3R5cGU7Zm9yKHZhciB5IGluIG0pe3ZhciBiPW1beV07aWYoZ1t5XSE9bnVsbClyZXR1cm4gaSh5KTt2W3ldPWJ9Zm9yKHZhciB4IGluIGcpdlt4XT1nW3hdO20uY2xpZW50RnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oZSl7dltlXT12W2VdfHxmdW5jdGlvbigpe1B1KCJSZW5kZXJlciBkb2VzIG5vdCBpbXBsZW1lbnQgYHJlbmRlcmVyLiIrZSsiKClgIG9uIGl0cyBwcm90b3R5cGUiKX19KSxyPV99ZWxzZSBpZihlPT09YF9fcHJvdG9fX2B8fGU9PT1gY29uc3RydWN0b3JgfHxlPT09YHByb3RvdHlwZWApcmV0dXJuIFB1KGUrYCBpcyBhbiBpbGxlZ2FsIHR5cGUgdG8gYmUgcmVnaXN0ZXJlZCwgcG9zc2libHkgbGVhZCB0byBwcm90b3R5cGUgcG9sbHV0aW9uc2ApO3JldHVybiBmbCh7bWFwOlJ3LGtleXM6W2UsdF0sdmFsdWU6cn0pfWZ1bmN0aW9uIFZ3KGUsdCl7cmV0dXJuIHBsKHttYXA6Uncsa2V5czpbZSx0XX0pfWZ1bmN0aW9uIEh3KGUsdCxuLHIsaSl7cmV0dXJuIGZsKHttYXA6encsa2V5czpbZSx0LG4scl0sdmFsdWU6aX0pfWZ1bmN0aW9uIFV3KGUsdCxuLHIpe3JldHVybiBwbCh7bWFwOnp3LGtleXM6W2UsdCxuLHJdfSl9dmFyIFd3PWZ1bmN0aW9uKCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTIpcmV0dXJuIFZ3LmFwcGx5KG51bGwsYXJndW1lbnRzKTtpZihhcmd1bWVudHMubGVuZ3RoPT09MylyZXR1cm4gQncuYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT00KXJldHVybiBVdy5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTUpcmV0dXJuIEh3LmFwcGx5KG51bGwsYXJndW1lbnRzKTtQdShgSW52YWxpZCBleHRlbnNpb24gYWNjZXNzIHN5bnRheGApfTtpYi5wcm90b3R5cGUuZXh0ZW5zaW9uPVd3LEx3LmZvckVhY2goZnVuY3Rpb24oZSl7ZS5leHRlbnNpb25zLmZvckVhY2goZnVuY3Rpb24odCl7QncoZS50eXBlLHQubmFtZSx0LmltcGwpfSl9KTt2YXIgR3c9ZnVuY3Rpb24oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBHdykpcmV0dXJuIG5ldyBHdzt0aGlzLmxlbmd0aD0wfSxLdz1Hdy5wcm90b3R5cGU7S3cuaW5zdGFuY2VTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gc3R5bGVzaGVldGB9LEt3LnNlbGVjdG9yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoKys7cmV0dXJuIHRoaXNbdF09e3NlbGVjdG9yOmUscHJvcGVydGllczpbXX0sdGhpc30sS3cuY3NzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5sZW5ndGgtMTtpZihaKGUpKXRoaXNbbl0ucHJvcGVydGllcy5wdXNoKHtuYW1lOmUsdmFsdWU6dH0pO2Vsc2UgaWYoa2MoZSkpZm9yKHZhciByPWUsaT1PYmplY3Qua2V5cyhyKSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1yW29dO2lmKHMhPW51bGwpe3ZhciBjPVF5LnByb3BlcnRpZXNbb118fFF5LnByb3BlcnRpZXNbS2MobyldO2lmKGMhPW51bGwpe3ZhciBsPWMubmFtZSx1PXM7dGhpc1tuXS5wcm9wZXJ0aWVzLnB1c2goe25hbWU6bCx2YWx1ZTp1fSl9fX1yZXR1cm4gdGhpc30sS3cuc3R5bGU9S3cuY3NzLEt3LmdlbmVyYXRlU3R5bGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFF5KGUpO3JldHVybiB0aGlzLmFwcGVuZFRvU3R5bGUodCl9LEt3LmFwcGVuZFRvU3R5bGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciBuPXRoaXNbdF0scj1uLnNlbGVjdG9yLGk9bi5wcm9wZXJ0aWVzO2Uuc2VsZWN0b3Iocik7Zm9yKHZhciBhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07ZS5jc3Moby5uYW1lLG8udmFsdWUpfX1yZXR1cm4gZX07dmFyIHF3PWAzLjM0LjRgLEp3PWZ1bmN0aW9uKGUpe2lmKGU9PT12b2lkIDAmJihlPXt9KSxrYyhlKSlyZXR1cm4gbmV3IGliKGUpO2lmKFooZSkpcmV0dXJuIFd3LmFwcGx5KFd3LGFyZ3VtZW50cyl9O0p3LnVzZT1mdW5jdGlvbihlKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHQudW5zaGlmdChKdyksZS5hcHBseShudWxsLHQpLHRoaXN9LEp3Lndhcm5pbmdzPWZ1bmN0aW9uKGUpe3JldHVybiBGdShlKX0sSncudmVyc2lvbj1xdyxKdy5zdHlsZXNoZWV0PUp3LlN0eWxlc2hlZXQ9R3c7dmFyIFl3PXtjbGFzczpgdmlld2B9LFh3PXtjbGFzczpgdG9vbGJhcmB9LFp3PXsiYXJpYS1sYWJlbCI6YExheWVyc2B9LFF3PVtgYXJpYS1wcmVzc2VkYCxgb25DbGlja2BdLCR3PXtjbGFzczpgc3RhZ2VgfSxlVD17Y2xhc3M6YGtpbmQgbXV0ZWRgfSx0VD17a2V5OjAsY2xhc3M6YGZpbmRpbmdzYH0sblQ9e2tleToxfSxyVD17a2V5OjAsY2xhc3M6YGJhZGdlIHdhcm5pbmdgfSxpVD17Y2xhc3M6YG11dGVkYH0sYVQ9KChlLHQpPT57bGV0IG49ZS5fX3ZjY09wdHN8fGU7Zm9yKGxldFtlLHJdb2YgdCluW2VdPXI7cmV0dXJuIG59KShCbih7X19uYW1lOmBHcmFwaFZpZXdgLHByb3BzOntkYXRhOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49W3tpZDpgbDFgLGxhYmVsOmBDYWJsZXNgLGxlZ2VuZDpgRWFjaCBjYWJsZSBhIHBvcnQncyBsaW5rIG5hbWVzLiBBIExBRydzIGNhYmxlcyBhcmUgb25lIGxpbmUuYH0se2lkOmBsMmAsbGFiZWw6YFZMQU5zYCxsZWdlbmQ6YFRoZSBWTEFOcyBlYWNoIGNhYmxlIGNhcnJpZXMsIGZyb20gaXRzIHBvcnQgb3IgTEFHLmB9LHtpZDpgbDNgLGxhYmVsOmBBZGRyZXNzZXNgLGxlZ2VuZDpgUHJlZml4ZXMgdHdvIGRldmljZXMgaG9sZCBhZGRyZXNzZXMgaW4uIFRocmVlIG9yIG1vcmUgc2hhcmUgYSBzZWdtZW50LCBkcmF3biBhcyBpdHMgb3duIGJveC5gfSx7aWQ6YGJncGAsbGFiZWw6YEJHUGAsbGVnZW5kOmBTZXNzaW9ucyBiZXR3ZWVuIG91ciBkZXZpY2VzLCBtYXRjaGVkIGJ5IGFkZHJlc3MsIGFuZCB0byBlYWNoIEFTIG91dHNpZGUuYH0se2lkOmBvc3BmYCxsYWJlbDpgT1NQRmAsbGVnZW5kOmBJbnRlcmZhY2VzIGluIG9uZSBhcmVhIGFuZCBvbmUgcHJlZml4LCBuZWl0aGVyIHBhc3NpdmUuYH0se2lkOmB0dW5uZWxzYCxsYWJlbDpgVHVubmVsc2AsbGVnZW5kOmBHUkUgYW5kIFZYTEFOIHR1bm5lbHMgbWF0Y2hlZCBieSB0aGVpciBlbmRwb2ludHMsIGFuZCBXaXJlR3VhcmQgcGVlcnMuYH1dLHI9U2EoKCk9Pm4uc29tZShlPT5lLmlkPT09TW8ucm91dGUucGFydHNbMF0pP01vLnJvdXRlLnBhcnRzWzBdOmBsMWApLGk9U2EoKCk9Pk9iamVjdC5mcm9tRW50cmllcyhuLm1hcChlPT5bZS5pZCx0LmRhdGEuZ3JhcGguZWRnZXMuZmlsdGVyKHQ9PnQubGF5ZXI9PT1lLmlkKS5sZW5ndGhdKSkpLGE9SXQoKSxvPUl0KHt9KSxzLGM9bmV3IE1hcCxsPWU9PmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKGUpLnRyaW0oKTtmdW5jdGlvbiB1KCl7bGV0IGU9dC5kYXRhLmdyYXBoLmVkZ2VzLmZpbHRlcihlPT5lLmxheWVyPT09ci52YWx1ZSksbj1uZXcgU2V0KGUuZmxhdE1hcChlPT5bZS5mcm9tLGUudG9dKSksaT1lPT57bGV0IG49dC5kYXRhLmZpbmRpbmdzLmZpbHRlcih0PT5gZGV2aWNlOiR7dC5kZXZpY2V9YD09PWUuaWQpO3JldHVybiBuLnNvbWUoZT0+ZS5sZXZlbD09PWBlcnJvcmApP2BlcnJvcmA6bi5sZW5ndGg/YHdhcm5pbmdgOmBgfTtyZXR1cm5bLi4udC5kYXRhLmdyYXBoLm5vZGVzLmZpbHRlcihlPT5lLmtpbmQ9PT1gZGV2aWNlYHx8bi5oYXMoZS5pZCkpLm1hcChlPT4oe2dyb3VwOmBub2Rlc2AsZGF0YTp7aWQ6ZS5pZCxsYWJlbDplLmxhYmVsLGtpbmQ6ZS5raW5kLGxldmVsOmkoZSksd2lkdGg6ZS5sYWJlbC5sZW5ndGgqOC41KzI4fX0pKSwuLi5lLm1hcCgoZSx0KT0+KHtncm91cDpgZWRnZXNgLGRhdGE6e2lkOmBlZGdlLSR7dH1gLHNvdXJjZTplLmZyb20sdGFyZ2V0OmUudG8sbGFiZWw6ZS5sYWJlbCxvbmVTaWRlZDplLm9uZVNpZGVkP2B5ZXNgOmBub2AsaW5kZXg6dH19KSldfWZ1bmN0aW9uIGQoKXtpZighcylyZXR1cm47bGV0IGU9Yy5nZXQoci52YWx1ZSk7cy5lbGVtZW50cygpLnJlbW92ZSgpLHMuYWRkKHUoKSksby52YWx1ZT17fSxlJiZzLm5vZGVzKCkuZXZlcnkodD0+ZVt0LmlkKCldIT09dm9pZCAwKT8ocy5ub2RlcygpLmZvckVhY2godD0+e3QucG9zaXRpb24oZVt0LmlkKCldKX0pLGYoKSk6cCgpfWZ1bmN0aW9uIGYoKXtzJiYocy5maXQodm9pZCAwLDYwKSxzLnpvb20oKT4xLjImJihzLnpvb20oMS4yKSxzLmNlbnRlcigpKSl9ZnVuY3Rpb24gcCgpe3M/LmxheW91dCh7bmFtZTpgY2lyY2xlYCxhbmltYXRlOiExLGZpdDohMX0pLnJ1bigpLHM/LmxheW91dCh7bmFtZTpgY29zZWAsYW5pbWF0ZTohMSxmaXQ6ITEscmFuZG9taXplOiExLG5vZGVSZXB1bHNpb246KCk9PjE2ZTQsbm9kZU92ZXJsYXA6NDAsbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiEwLGlkZWFsRWRnZUxlbmd0aDooKT0+NTUsZWRnZUVsYXN0aWNpdHk6KCk9PjIwMCxncmF2aXR5OjIuNSxudW1JdGVyOjNlMyxjb21wb25lbnRTcGFjaW5nOjE0MH0pLnJ1bigpLGYoKSxtKCl9ZnVuY3Rpb24gbSgpe3MmJmMuc2V0KHIudmFsdWUsT2JqZWN0LmZyb21FbnRyaWVzKHMubm9kZXMoKS5tYXAoZT0+W2UuaWQoKSx7Li4uZS5wb3NpdGlvbigpfV0pKSl9ZnVuY3Rpb24gaCgpe2lmKCFzKXJldHVybjtsZXQgZT1zLnBuZyh7b3V0cHV0OmBibG9iYCxmdWxsOiEwLHNjYWxlOjIsYmc6bChgLS1iZ2ApfSk7Um8uc2F2ZShgJHt0LmRhdGEucHJvamVjdH0tJHtyLnZhbHVlfS5wbmdgLGUpfXRyKCgpPT57cz1Kdyh7Y29udGFpbmVyOmEudmFsdWUsbWluWm9vbTouMixtYXhab29tOjMsc3R5bGU6W3tzZWxlY3Rvcjpgbm9kZWAsc3R5bGU6e3NoYXBlOmByb3VuZC1yZWN0YW5nbGVgLHdpZHRoOmBkYXRhKHdpZHRoKWAsaGVpZ2h0OjM0LCJiYWNrZ3JvdW5kLWNvbG9yIjpsKGAtLXN1cmZhY2VgKSwiYm9yZGVyLXdpZHRoIjoyLCJib3JkZXItY29sb3IiOmwoYC0tdGV4dGApLGxhYmVsOmBkYXRhKGxhYmVsKWAsY29sb3I6bChgLS10ZXh0YCksImZvbnQtZmFtaWx5IjpsKGAtLWZvbnRgKSwiZm9udC1zaXplIjoxMywiZm9udC13ZWlnaHQiOjcwMCwidGV4dC12YWxpZ24iOmBjZW50ZXJgLCJ0ZXh0LWhhbGlnbiI6YGNlbnRlcmB9fSx7c2VsZWN0b3I6YG5vZGVba2luZCA9ICJzZWdtZW50Il1gLHN0eWxlOnsiYmFja2dyb3VuZC1jb2xvciI6bChgLS15ZWxsb3dgKSwiYm9yZGVyLWNvbG9yIjpsKGAtLW5hdnlgKSxjb2xvcjpgIzExMTQxYmB9fSx7c2VsZWN0b3I6YG5vZGVba2luZCA9ICJvdXRzaWRlIl1gLHN0eWxlOnsiYm9yZGVyLXN0eWxlIjpgZGFzaGVkYCwiYm9yZGVyLWNvbG9yIjpsKGAtLWVkZ2VgKSxjb2xvcjpsKGAtLW11dGVkYCl9fSx7c2VsZWN0b3I6YG5vZGVbbGV2ZWwgPSAid2FybmluZyJdYCxzdHlsZTp7ImJvcmRlci1jb2xvciI6bChgLS13YXJuaW5nYCksImJvcmRlci13aWR0aCI6M319LHtzZWxlY3Rvcjpgbm9kZVtsZXZlbCA9ICJlcnJvciJdYCxzdHlsZTp7ImJvcmRlci1jb2xvciI6bChgLS1lcnJvcmApLCJib3JkZXItd2lkdGgiOjN9fSx7c2VsZWN0b3I6YGVkZ2VgLHN0eWxlOnt3aWR0aDoyLCJsaW5lLWNvbG9yIjpsKGAtLWVkZ2VgKSwiY3VydmUtc3R5bGUiOmBiZXppZXJgLGxhYmVsOmBkYXRhKGxhYmVsKWAsImZvbnQtc2l6ZSI6MTEsY29sb3I6bChgLS1tdXRlZGApLCJ0ZXh0LWJhY2tncm91bmQtY29sb3IiOmwoYC0tYmdgKSwidGV4dC1iYWNrZ3JvdW5kLW9wYWNpdHkiOjEsInRleHQtYmFja2dyb3VuZC1wYWRkaW5nIjpgMnB4YCwiZm9udC1mYW1pbHkiOmwoYC0tZm9udGApfX0se3NlbGVjdG9yOmBlZGdlW29uZVNpZGVkID0gInllcyJdYCxzdHlsZTp7ImxpbmUtc3R5bGUiOmBkYXNoZWRgLCJsaW5lLWNvbG9yIjpsKGAtLXdhcm5pbmdgKX19LHtzZWxlY3RvcjpgOnNlbGVjdGVkYCxzdHlsZTp7ImJvcmRlci1jb2xvciI6bChgLS1jb2JhbHRgKSwibGluZS1jb2xvciI6bChgLS1jb2JhbHRgKSwiYm9yZGVyLXdpZHRoIjo0LHdpZHRoOjR9fV19KSxzLm9uKGB0YXBgLGBub2RlYCxlPT57by52YWx1ZT17bm9kZTp0LmRhdGEuZ3JhcGgubm9kZXMuZmluZCh0PT50LmlkPT09ZS50YXJnZXQuaWQoKSl9fSkscy5vbihgdGFwYCxgZWRnZWAsZT0+e2xldCBuPWUudGFyZ2V0LmRhdGEoYGluZGV4YCk7by52YWx1ZT17ZWRnZTp0LmRhdGEuZ3JhcGguZWRnZXMuZmlsdGVyKGU9PmUubGF5ZXI9PT1yLnZhbHVlKVtuXX19KSxzLm9uKGB0YXBgLGU9PntlLnRhcmdldD09PXMmJihvLnZhbHVlPXt9KX0pLHMub24oYGRibHRhcGAsYG5vZGVba2luZCA9ICJkZXZpY2UiXWAsZT0+Tm8oYGRldmljZXMvJHtlLnRhcmdldC5kYXRhKGBsYWJlbGApfWApKSxzLm9uKGBkcmFnZnJlZWAsYG5vZGVgLG0pLGQoKX0pLGlyKCgpPT5zPy5kZXN0cm95KCkpLGtuKFtyLCgpPT50LmRhdGFdLGQpO2xldCBnPVNhKCgpPT50LmRhdGEuZmluZGluZ3MuZmlsdGVyKGU9Pm8udmFsdWUubm9kZSYmYGRldmljZToke2UuZGV2aWNlfWA9PT1vLnZhbHVlLm5vZGUuaWQpKTtyZXR1cm4oZSx0KT0+KEooKSxZKGBzZWN0aW9uYCxZdyxbWChgZGl2YCxYdyxbWChgbmF2YCxadyxbKEooKSxZKHEsbnVsbCxocihuLGU9PlgoYGJ1dHRvbmAse2tleTplLmlkLCJhcmlhLXByZXNzZWQiOnIudmFsdWU9PT1lLmlkLG9uQ2xpY2s6dD0+enQoTm8pKGBncmFwaC8ke2UuaWR9YCl9LFtKaShLKGUubGFiZWwpK2AgYCwxKSxYKGBzbWFsbGAsbnVsbCxLKGkudmFsdWVbZS5pZF0pLDEpXSw4LFF3KSksNjQpKV0pLFgoYGRpdmAse2NsYXNzOmBhY3Rpb25zYH0sW1goYGJ1dHRvbmAse3RpdGxlOmBGaXQgdGhlIGRyYXdpbmcgdG8gdGhlIHdpbmRvd2Asb25DbGljazpmfSxgRml0YCksWChgYnV0dG9uYCx7dGl0bGU6YEZvcmdldCB3aGVyZSBub2RlcyB3ZXJlIG1vdmVkIG9uIHRoaXMgbGF5ZXIsIGFuZCBsYXkgaXQgb3V0IGFnYWluYCxvbkNsaWNrOnB9LGBMYXkgb3V0IGFnYWluYCksWChgYnV0dG9uYCx7dGl0bGU6YFNhdmUgdGhpcyBsYXllciBhcyBhIFBORyBpbWFnZWAsb25DbGljazpofSxgU2F2ZSBpbWFnZWApXSldKSxYKGBkaXZgLCR3LFtYKGBkaXZgLHtyZWZfa2V5OmBjb250YWluZXJgLHJlZjphLGNsYXNzOmBjYW52YXNgLHJvbGU6YGltZ2AsImFyaWEtbGFiZWwiOmBUaGUgbmV0d29ya2B9LG51bGwsNTEyKSxYKGBhc2lkZWAsbnVsbCxbby52YWx1ZS5ub2RlPyhKKCksWShxLHtrZXk6MH0sW1goYGgyYCxudWxsLEsoby52YWx1ZS5ub2RlLmxhYmVsKSwxKSxYKGBwYCxlVCxLKG8udmFsdWUubm9kZS5raW5kPT09YGRldmljZWA/YGEgZGV2aWNlYDpvLnZhbHVlLm5vZGUua2luZD09PWBzZWdtZW50YD9gYSBzaGFyZWQgc2VnbWVudGA6YG91dHNpZGUgdGhlIG5ldHdvcmtgKSwxKSxYKGB1bGAsbnVsbCxbKEooITApLFkocSxudWxsLGhyKG8udmFsdWUubm9kZS5kZXRhaWwsZT0+KEooKSxZKGBsaWAse2tleTplfSxLKGUpLDEpKSksMTI4KSldKSxnLnZhbHVlLmxlbmd0aD8oSigpLFkoYHVsYCx0VCxbKEooITApLFkocSxudWxsLGhyKGcudmFsdWUsKGUsdCk9PihKKCksWShgbGlgLHtrZXk6dH0sW1goYHNwYW5gLHtjbGFzczpXKFtgYmFkZ2VgLGUubGV2ZWxdKX0sSyhlLmxldmVsKSwzKSxKaShLKGUubWVzc2FnZSksMSldKSkpLDEyOCkpXSkpOllpKGBgLCEwKSxvLnZhbHVlLm5vZGUua2luZD09PWBkZXZpY2VgPyhKKCksWShgcGAsblQsW1goYGFgLHtvbkNsaWNrOnRbMF18fD1lPT56dChObykoYGRldmljZXMvJHtvLnZhbHVlLm5vZGUubGFiZWx9YCl9LGBPcGVuIGArSyhvLnZhbHVlLm5vZGUubGFiZWwpLDEpXSkpOllpKGBgLCEwKV0sNjQpKTpvLnZhbHVlLmVkZ2U/KEooKSxZKHEse2tleToxfSxbWChgaDJgLG51bGwsSyhvLnZhbHVlLmVkZ2UubGFiZWwpLDEpLG8udmFsdWUuZWRnZS5vbmVTaWRlZD8oSigpLFkoYHBgLHJULGBkZWNsYXJlZCBhdCBvbmUgZW5kIG9ubHlgKSk6WWkoYGAsITApLFgoYHVsYCxudWxsLFsoSighMCksWShxLG51bGwsaHIoby52YWx1ZS5lZGdlLmRldGFpbCxlPT4oSigpLFkoYGxpYCx7a2V5OmV9LEsoZSksMSkpKSwxMjgpKV0pXSw2NCkpOihKKCksWShxLHtrZXk6Mn0sW1goYGgyYCxudWxsLEsobi5maW5kKGU9PmUuaWQ9PT1yLnZhbHVlKT8ubGFiZWwpLDEpLFgoYHBgLGlULEsobi5maW5kKGU9PmUuaWQ9PT1yLnZhbHVlKT8ubGVnZW5kKSwxKSx0WzFdfHw9WChgdWxgLHtjbGFzczpgbGVnZW5kYH0sW1goYGxpYCxudWxsLGBBIGRhc2hlZCBsaW5lIGlzIGRlY2xhcmVkIGF0IG9uZSBlbmQgb25seS5gKSxYKGBsaWAsbnVsbCxgQSBkYXNoZWQgYm94IGlzIG91dHNpZGUgdGhlIG5ldHdvcmsuYCksWChgbGlgLG51bGwsYEEgYm94IGZyYW1lZCBpbiBvcmFuZ2Ugb3IgcmVkIGhhcyB3YXJuaW5ncyBvciBlcnJvcnMuYCksWChgbGlgLG51bGwsYFBpY2sgYSBib3ggb3IgYSBsaW5lIHRvIHNlZSB3aGF0IGl0IGlzLiBEb3VibGUtY2xpY2sgYSBkZXZpY2UgdG8gb3BlbiBpdC5gKV0sLTEpXSw2NCkpXSldKV0pKX19KSxbW2BfX3Njb3BlSWRgLGBkYXRhLXYtMTA5YzMyZGJgXV0pLG9UPXtrZXk6MCxjbGFzczpgbXV0ZWRgfSxzVD17a2V5OjEsY2xhc3M6YGZpbmRpbmdzYH0sY1Q9W2BvbkNsaWNrYF0sbFQ9e2tleToyLGNsYXNzOmBtdXRlZGB9LHVUPXtrZXk6MyxjbGFzczpgZmluZGluZ3NgfSxkVD1bYG9uQ2xpY2tgXSxmVD1bYG9uQ2xpY2tgXSxwVD1Cbih7X19uYW1lOmBQcm9ibGVtc1ZpZXdgLHByb3BzOntkYXRhOnt9fSxzZXR1cChlKXtsZXQgdD1lLG49U2EoKCk9PlsuLi50LmRhdGEuZmluZGluZ3NdLnNvcnQoKGUsdCk9PmUubGV2ZWw9PT10LmxldmVsPzA6ZS5sZXZlbD09PWBlcnJvcmA/LTE6MSkpLHI9U2EoKCk9PnQuZGF0YS5jYWJsZXMuZmlsdGVyKGU9PmUub25lU2lkZWQpKSxpPVNhKCgpPT50LmRhdGEuc2Vzc2lvbnMuZmlsdGVyKGU9PmUub25lU2lkZWQpKTtyZXR1cm4oZSx0KT0+KEooKSxZKHEsbnVsbCxbdFsyXXx8PVgoYGgyYCxudWxsLGBQcm9ibGVtc2AsLTEpLHRbM118fD1YKGBoM2AsbnVsbCxbSmkoYEZvdW5kIGJ5IGApLFgoYGNvZGVgLG51bGwsYGNpcmN1aXQgdmFsaWRhdGVgKV0sLTEpLG4udmFsdWUubGVuZ3RoPyhKKCksWShgdWxgLHNULFsoSighMCksWShxLG51bGwsaHIobi52YWx1ZSwoZSx0KT0+KEooKSxZKGBsaWAse2tleTp0fSxbWChgc3BhbmAse2NsYXNzOlcoW2BiYWRnZWAsZS5sZXZlbF0pfSxLKGUubGV2ZWwpLDMpLGUuZGV2aWNlPyhKKCksWShgYWAse2tleTowLG9uQ2xpY2s6dD0+enQoTm8pKGBkZXZpY2VzLyR7ZS5kZXZpY2V9YCl9LEsoZS5kZXZpY2UpLDksY1QpKTpZaShgYCwhMCksZS5kZXZpY2U/KEooKSxZKHEse2tleToxfSxbSmkoYDogYCldLDY0KSk6WWkoYGAsITApLEppKEsoZS5tZXNzYWdlKSwxKV0pKSksMTI4KSldKSk6KEooKSxZKGBwYCxvVCxgTm90aGluZzogZXZlcnkgZGV2aWNlIHZhbGlkYXRlcy5gKSksdFs0XXx8PVgoYGgzYCxudWxsLGBEZWNsYXJlZCBhdCBvbmUgZW5kIG9ubHlgLC0xKSwhci52YWx1ZS5sZW5ndGgmJiFpLnZhbHVlLmxlbmd0aD8oSigpLFkoYHBgLGxULGAgRXZlcnkgY2FibGUgYW5kIEJHUCBzZXNzaW9uIGJldHdlZW4gZGV2aWNlcyBpcyBkZWNsYXJlZCBhdCBib3RoIGVuZHMuIGApKTooSigpLFkoYHVsYCx1VCxbKEooITApLFkocSxudWxsLGhyKHIudmFsdWUsZT0+KEooKSxZKGBsaWAse2tleTpgJHtlLmRldmljZX0gJHtlLnBvcnR9YH0sW3RbMF18fD1YKGBzcGFuYCx7Y2xhc3M6YGJhZGdlIHdhcm5pbmdgfSxgY2FibGVgLC0xKSxYKGBhYCx7b25DbGljazp0PT56dChObykoYGRldmljZXMvJHtlLmRldmljZX1gKX0sSyhlLmRldmljZSksOSxkVCksSmkoYCBgK0soZS5wb3J0KStgIGxpbmtzIHRvIGArSyhlLmZhckRldmljZSkrYCBgK0soZS5mYXJQb3J0KStgLCB3aGljaCBkb2VzIG5vdCBsaW5rIGJhY2sgYCwxKV0pKSksMTI4KSksKEooITApLFkocSxudWxsLGhyKGkudmFsdWUsZT0+KEooKSxZKGBsaWAse2tleTpgJHtlLmRldmljZX0gJHtlLm5hbWV9YH0sW3RbMV18fD1YKGBzcGFuYCx7Y2xhc3M6YGJhZGdlIHdhcm5pbmdgfSxgQkdQYCwtMSksWChgYWAse29uQ2xpY2s6dD0+enQoTm8pKGBkZXZpY2VzLyR7ZS5kZXZpY2V9YCl9LEsoZS5kZXZpY2UpLDksZlQpLEppKGAgYCtLKGUubmFtZSkrYCByZWFjaGVzIGArSyhlLmZhcikrYCwgd2hpY2ggaGFzIG5vIHNlc3Npb24gYmFjayBgLDEpXSkpKSwxMjgpKV0pKV0sNjQpKX19KSxtVD1Cbih7X19uYW1lOmBTZWFyY2hWaWV3YCxwcm9wczp7ZGF0YTp7fSxxdWVyeTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVNhKCgpPT57bGV0IGU9dC5xdWVyeS50b0xvd2VyQ2FzZSgpO2lmKCFlKXJldHVybltdO2xldCBuPXQ9PnR5cGVvZiB0PT1gc3RyaW5nYCYmdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGUpLHI9W107Zm9yKGxldCBlIG9mIHQuZGF0YS5kZXZpY2VzKXsobihlLm5hbWUpfHxuKGUuc2l0ZSl8fG4oZS5tb2RlbCkpJiZyLnB1c2goe2NlbGxzOlt7ZGV2aWNlOmUubmFtZX0sYGRldmljZWAsYCR7ZS5wbGF0Zm9ybX0gJHtlLm1vZGVsfSBhdCAke2Uuc2l0ZX1gXX0pO2ZvcihsZXRbdCxpXW9mIE9iamVjdC5lbnRyaWVzKGUuaW50ZXJmYWNlcz8/e30pKWZvcihsZXRbYSxvXW9mIE9iamVjdC5lbnRyaWVzKGk/P3t9KSkobihhKXx8bihvPy5kZXNjcmlwdGlvbikpJiZyLnB1c2goe2NlbGxzOlt7ZGV2aWNlOmUubmFtZX0sdD09PWBldGhlcm5ldGA/YHBvcnRgOnQucmVwbGFjZShgX2AsYCBgKSxgJHthfSR7bz8uZGVzY3JpcHRpb24/YDogJHtvLmRlc2NyaXB0aW9ufWA6YGB9YF19KTtmb3IobGV0W3QsaV1vZiBPYmplY3QuZW50cmllcyhlLnN3aXRjaGluZz8udmxhbnM/P3t9KSkobih0KXx8bihpPy5kZXNjcmlwdGlvbil8fG4oU3RyaW5nKGk/LmlkKSkpJiZyLnB1c2goe2NlbGxzOlt7ZGV2aWNlOmUubmFtZX0sYFZMQU5gLGAke3R9LCBJRCAke2k/LmlkfWBdfSk7Zm9yKGxldFt0LGldb2YgT2JqZWN0LmVudHJpZXMoZS5yb3V0aW5nPy5iZ3A/Lm5laWdoYm9ycz8/e30pKShuKHQpfHxuKGk/LmRlc2NyaXB0aW9uKXx8bihpPy5hZGRyZXNzKSkmJnIucHVzaCh7Y2VsbHM6W3tkZXZpY2U6ZS5uYW1lfSxgQkdQIG5laWdoYm9yYCxgJHt0fSwgJHtpPy5hZGRyZXNzfWBdfSk7bGV0IGk9KHQuZGF0YS5yZW5kZXJlZFtlLm5hbWVdPz9gYCkuc3BsaXQoYApgKS5maWx0ZXIobik7aS5sZW5ndGgmJnIucHVzaCh7Y2VsbHM6W3tsaW5rOmBkZXZpY2VzLyR7ZS5uYW1lfS9jb25maWdgLGxhYmVsOmUubmFtZX0sYGNvbmZpZ2AsYCR7QW8uY291bnQoaS5sZW5ndGgsYGxpbmVgKX06ICR7aS5zbGljZSgwLDMpLm1hcChlPT5lLnRyaW0oKSkuam9pbihgIMK3IGApfSR7aS5sZW5ndGg+Mz9gIOKApmA6YGB9YF19KX1mb3IobGV0IGUgb2YgdC5kYXRhLmFkZHJlc3NlcyluKGUuYWRkcmVzcykmJnIucHVzaCh7Y2VsbHM6W3tkZXZpY2U6ZS5kZXZpY2V9LGBhZGRyZXNzYCxgJHtlLmFkZHJlc3N9IG9uICR7ZS5ob2xkZXJ9YF19KTtyZXR1cm4gcn0pO3JldHVybih0LHIpPT4oSigpLFkocSxudWxsLFtYKGBoMmAsbnVsbCxgU2VhcmNoOiBgK0soZS5xdWVyeSksMSksV2kocW8se2hlYWQ6W2BEZXZpY2VgLGBXaGF0YCxgRm91bmRgXSxyb3dzOm4udmFsdWV9LG51bGwsOCxbYHJvd3NgXSldLDY0KSl9fSk7ZnVuY3Rpb24gaFQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJmUuY29uc3RydWN0b3IubmFtZT09PWBVaW50OEFycmF5YH1mdW5jdGlvbiBnVChlKXtpZih0eXBlb2YgZSE9YGJvb2xlYW5gKXRocm93IEVycm9yKGBib29sZWFuIGV4cGVjdGVkLCBub3QgJHtlfWApfWZ1bmN0aW9uIF9UKGUsLi4udCl7aWYoIWhUKGUpKXRocm93IEVycm9yKGBVaW50OEFycmF5IGV4cGVjdGVkYCk7aWYodC5sZW5ndGg+MCYmIXQuaW5jbHVkZXMoZS5sZW5ndGgpKXRocm93IEVycm9yKGBVaW50OEFycmF5IGV4cGVjdGVkIG9mIGxlbmd0aCBgK3QrYCwgZ290IGxlbmd0aD1gK2UubGVuZ3RoKX1mdW5jdGlvbiB2VChlLHQ9ITApe2lmKGUuZGVzdHJveWVkKXRocm93IEVycm9yKGBIYXNoIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApO2lmKHQmJmUuZmluaXNoZWQpdGhyb3cgRXJyb3IoYEhhc2gjZGlnZXN0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWRgKX1mdW5jdGlvbiB5VChlLHQpe19UKGUpO2xldCBuPXQub3V0cHV0TGVuO2lmKGUubGVuZ3RoPG4pdGhyb3cgRXJyb3IoYGRpZ2VzdEludG8oKSBleHBlY3RzIG91dHB1dCBidWZmZXIgb2YgbGVuZ3RoIGF0IGxlYXN0IGArbil9ZnVuY3Rpb24gYlQoZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfWZ1bmN0aW9uIHhUKGUpe3JldHVybiBuZXcgVWludDMyQXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LE1hdGguZmxvb3IoZS5ieXRlTGVuZ3RoLzQpKX1mdW5jdGlvbiBTVCguLi5lKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmZpbGwoMCl9ZnVuY3Rpb24gQ1QoZSl7cmV0dXJuIG5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX12YXIgd1Q9bmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQzMkFycmF5KFsyODc0NTQwMjBdKS5idWZmZXIpWzBdPT09Njg7ZnVuY3Rpb24gVFQoZSl7aWYodHlwZW9mIGUhPWBzdHJpbmdgKXRocm93IEVycm9yKGBzdHJpbmcgZXhwZWN0ZWRgKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKGUpKX1mdW5jdGlvbiBFVChlKXtpZih0eXBlb2YgZT09YHN0cmluZ2ApZT1UVChlKTtlbHNlIGlmKGhUKGUpKWU9TlQoZSk7ZWxzZSB0aHJvdyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCwgZ290IGArdHlwZW9mIGUpO3JldHVybiBlfWZ1bmN0aW9uIERUKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtsZXQgbj0wO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKW58PWVbcl1edFtyXTtyZXR1cm4gbj09PTB9dmFyIE9UPShlLHQpPT57ZnVuY3Rpb24gbihuLC4uLnIpe2lmKF9UKG4pLCF3VCl0aHJvdyBFcnJvcihgTm9uIGxpdHRsZS1lbmRpYW4gaGFyZHdhcmUgaXMgbm90IHlldCBzdXBwb3J0ZWRgKTtpZihlLm5vbmNlTGVuZ3RoIT09dm9pZCAwKXtsZXQgdD1yWzBdO2lmKCF0KXRocm93IEVycm9yKGBub25jZSAvIGl2IHJlcXVpcmVkYCk7ZS52YXJTaXplTm9uY2U/X1QodCk6X1QodCxlLm5vbmNlTGVuZ3RoKX1sZXQgaT1lLnRhZ0xlbmd0aDtpJiZyWzFdIT09dm9pZCAwJiZfVChyWzFdKTtsZXQgYT10KG4sLi4uciksbz0oZSx0KT0+e2lmKHQhPT12b2lkIDApe2lmKGUhPT0yKXRocm93IEVycm9yKGBjaXBoZXIgb3V0cHV0IG5vdCBzdXBwb3J0ZWRgKTtfVCh0KX19LHM9ITE7cmV0dXJue2VuY3J5cHQoZSx0KXtpZihzKXRocm93IEVycm9yKGBjYW5ub3QgZW5jcnlwdCgpIHR3aWNlIHdpdGggc2FtZSBrZXkgKyBub25jZWApO3JldHVybiBzPSEwLF9UKGUpLG8oYS5lbmNyeXB0Lmxlbmd0aCx0KSxhLmVuY3J5cHQoZSx0KX0sZGVjcnlwdChlLHQpe2lmKF9UKGUpLGkmJmUubGVuZ3RoPGkpdGhyb3cgRXJyb3IoYGludmFsaWQgY2lwaGVydGV4dCBsZW5ndGg6IHNtYWxsZXIgdGhhbiB0YWdMZW5ndGg9YCtpKTtyZXR1cm4gbyhhLmRlY3J5cHQubGVuZ3RoLHQpLGEuZGVjcnlwdChlLHQpfX19cmV0dXJuIE9iamVjdC5hc3NpZ24obixlKSxufTtmdW5jdGlvbiBrVChlLHQsbj0hMCl7aWYodD09PXZvaWQgMClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSk7aWYodC5sZW5ndGghPT1lKXRocm93IEVycm9yKGBpbnZhbGlkIG91dHB1dCBsZW5ndGgsIGV4cGVjdGVkIGArZStgLCBnb3Q6IGArdC5sZW5ndGgpO2lmKG4mJiFNVCh0KSl0aHJvdyBFcnJvcihgaW52YWxpZCBvdXRwdXQsIG11c3QgYmUgYWxpZ25lZGApO3JldHVybiB0fWZ1bmN0aW9uIEFUKGUsdCxuLHIpe2lmKHR5cGVvZiBlLnNldEJpZ1VpbnQ2ND09YGZ1bmN0aW9uYClyZXR1cm4gZS5zZXRCaWdVaW50NjQodCxuLHIpO2xldCBpPUJpZ0ludCgzMiksYT1CaWdJbnQoNDI5NDk2NzI5NSksbz1OdW1iZXIobj4+aSZhKSxzPU51bWJlcihuJmEpLGM9cj80OjAsbD1yPzA6NDtlLnNldFVpbnQzMih0K2MsbyxyKSxlLnNldFVpbnQzMih0K2wscyxyKX1mdW5jdGlvbiBqVChlLHQsbil7Z1Qobik7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoMTYpLGk9Q1Qocik7cmV0dXJuIEFUKGksMCxCaWdJbnQodCksbiksQVQoaSw4LEJpZ0ludChlKSxuKSxyfWZ1bmN0aW9uIE1UKGUpe3JldHVybiBlLmJ5dGVPZmZzZXQlND09MH1mdW5jdGlvbiBOVChlKXtyZXR1cm4gVWludDhBcnJheS5mcm9tKGUpfXZhciBQVD0xNixGVD1uZXcgVWludDhBcnJheSgxNiksSVQ9eFQoRlQpLExUPTIyNSxSVD0oZSx0LG4scik9PntsZXQgaT1yJjE7cmV0dXJue3MzOm48PDMxfHI+Pj4xLHMyOnQ8PDMxfG4+Pj4xLHMxOmU8PDMxfHQ+Pj4xLHMwOmU+Pj4xXkxUPDwyNCYtKGkmMSl9fSx6VD1lPT4oZT4+PjAmMjU1KTw8MjR8KGU+Pj44JjI1NSk8PDE2fChlPj4+MTYmMjU1KTw8OHxlPj4+MjQmMjU1O2Z1bmN0aW9uIEJUKGUpe2UucmV2ZXJzZSgpO2xldCB0PWVbMTVdJjEsbj0wO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO2VbdF09cj4+PjF8bixuPShyJjEpPDw3fXJldHVybiBlWzBdXj0tdCYyMjUsZX12YXIgVlQ9ZT0+ZT42NTUzNj84OmU+MTAyND80OjIsSFQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmJsb2NrTGVuPVBULHRoaXMub3V0cHV0TGVuPVBULHRoaXMuczA9MCx0aGlzLnMxPTAsdGhpcy5zMj0wLHRoaXMuczM9MCx0aGlzLmZpbmlzaGVkPSExLGU9RVQoZSksX1QoZSwxNik7bGV0IG49Q1QoZSkscj1uLmdldFVpbnQzMigwLCExKSxpPW4uZ2V0VWludDMyKDQsITEpLGE9bi5nZXRVaW50MzIoOCwhMSksbz1uLmdldFVpbnQzMigxMiwhMSkscz1bXTtmb3IobGV0IGU9MDtlPDEyODtlKyspcy5wdXNoKHtzMDp6VChyKSxzMTp6VChpKSxzMjp6VChhKSxzMzp6VChvKX0pLHtzMDpyLHMxOmksczI6YSxzMzpvfT1SVChyLGksYSxvKTtsZXQgYz1WVCh0fHwxMDI0KTtpZighWzEsMiw0LDhdLmluY2x1ZGVzKGMpKXRocm93IEVycm9yKGBnaGFzaDogaW52YWxpZCB3aW5kb3cgc2l6ZSwgZXhwZWN0ZWQgMiwgNCBvciA4YCk7dGhpcy5XPWM7bGV0IGw9MTI4L2MsdT10aGlzLndpbmRvd1NpemU9MioqYyxkPVtdO2ZvcihsZXQgZT0wO2U8bDtlKyspZm9yKGxldCB0PTA7dDx1O3QrKyl7bGV0IG49MCxyPTAsaT0wLGE9MDtmb3IobGV0IG89MDtvPGM7bysrKXtpZighKHQ+Pj5jLW8tMSYxKSljb250aW51ZTtsZXR7czA6bCxzMTp1LHMyOmQsczM6Zn09c1tjKmUrb107bl49bCxyXj11LGlePWQsYV49Zn1kLnB1c2goe3MwOm4sczE6cixzMjppLHMzOmF9KX10aGlzLnQ9ZH1fdXBkYXRlQmxvY2soZSx0LG4scil7ZV49dGhpcy5zMCx0Xj10aGlzLnMxLG5ePXRoaXMuczIscl49dGhpcy5zMztsZXR7VzppLHQ6YSx3aW5kb3dTaXplOm99PXRoaXMscz0wLGM9MCxsPTAsdT0wLGQ9KDE8PGkpLTEsZj0wO2ZvcihsZXQgcCBvZltlLHQsbixyXSlmb3IobGV0IGU9MDtlPDQ7ZSsrKXtsZXQgdD1wPj4+OCplJjI1NTtmb3IobGV0IGU9OC9pLTE7ZT49MDtlLS0pe2xldCBuPXQ+Pj5pKmUmZCx7czA6cixzMTpwLHMyOm0sczM6aH09YVtmKm8rbl07c149cixjXj1wLGxePW0sdV49aCxmKz0xfX10aGlzLnMwPXMsdGhpcy5zMT1jLHRoaXMuczI9bCx0aGlzLnMzPXV9dXBkYXRlKGUpe3ZUKHRoaXMpLGU9RVQoZSksX1QoZSk7bGV0IHQ9eFQoZSksbj1NYXRoLmZsb29yKGUubGVuZ3RoL1BUKSxyPWUubGVuZ3RoJVBUO2ZvcihsZXQgZT0wO2U8bjtlKyspdGhpcy5fdXBkYXRlQmxvY2sodFtlKjQrMF0sdFtlKjQrMV0sdFtlKjQrMl0sdFtlKjQrM10pO3JldHVybiByJiYoRlQuc2V0KGUuc3ViYXJyYXkobipQVCkpLHRoaXMuX3VwZGF0ZUJsb2NrKElUWzBdLElUWzFdLElUWzJdLElUWzNdKSxTVChJVCkpLHRoaXN9ZGVzdHJveSgpe2xldHt0OmV9PXRoaXM7Zm9yKGxldCB0IG9mIGUpdC5zMD0wLHQuczE9MCx0LnMyPTAsdC5zMz0wfWRpZ2VzdEludG8oZSl7dlQodGhpcykseVQoZSx0aGlzKSx0aGlzLmZpbmlzaGVkPSEwO2xldHtzMDp0LHMxOm4sczI6cixzMzppfT10aGlzLGE9eFQoZSk7cmV0dXJuIGFbMF09dCxhWzFdPW4sYVsyXT1yLGFbM109aSxlfWRpZ2VzdCgpe2xldCBlPW5ldyBVaW50OEFycmF5KFBUKTtyZXR1cm4gdGhpcy5kaWdlc3RJbnRvKGUpLHRoaXMuZGVzdHJveSgpLGV9fSxVVD1jbGFzcyBleHRlbmRzIEhUe2NvbnN0cnVjdG9yKGUsdCl7ZT1FVChlKSxfVChlKTtsZXQgbj1CVChOVChlKSk7c3VwZXIobix0KSxTVChuKX11cGRhdGUoZSl7ZT1FVChlKSx2VCh0aGlzKTtsZXQgdD14VChlKSxuPWUubGVuZ3RoJVBULHI9TWF0aC5mbG9vcihlLmxlbmd0aC9QVCk7Zm9yKGxldCBlPTA7ZTxyO2UrKyl0aGlzLl91cGRhdGVCbG9jayh6VCh0W2UqNCszXSkselQodFtlKjQrMl0pLHpUKHRbZSo0KzFdKSx6VCh0W2UqNCswXSkpO3JldHVybiBuJiYoRlQuc2V0KGUuc3ViYXJyYXkocipQVCkpLHRoaXMuX3VwZGF0ZUJsb2NrKHpUKElUWzNdKSx6VChJVFsyXSkselQoSVRbMV0pLHpUKElUWzBdKSksU1QoSVQpKSx0aGlzfWRpZ2VzdEludG8oZSl7dlQodGhpcykseVQoZSx0aGlzKSx0aGlzLmZpbmlzaGVkPSEwO2xldHtzMDp0LHMxOm4sczI6cixzMzppfT10aGlzLGE9eFQoZSk7cmV0dXJuIGFbMF09dCxhWzFdPW4sYVsyXT1yLGFbM109aSxlLnJldmVyc2UoKX19O2Z1bmN0aW9uIFdUKGUpe2xldCB0PSh0LG4pPT5lKG4sdC5sZW5ndGgpLnVwZGF0ZShFVCh0KSkuZGlnZXN0KCksbj1lKG5ldyBVaW50OEFycmF5KDE2KSwwKTtyZXR1cm4gdC5vdXRwdXRMZW49bi5vdXRwdXRMZW4sdC5ibG9ja0xlbj1uLmJsb2NrTGVuLHQuY3JlYXRlPSh0LG4pPT5lKHQsbiksdH12YXIgR1Q9V1QoKGUsdCk9Pm5ldyBIVChlLHQpKTtXVCgoZSx0KT0+bmV3IFVUKGUsdCkpO3ZhciBLVD0xNixxVD00LEpUPW5ldyBVaW50OEFycmF5KEtUKSxZVD0yODM7ZnVuY3Rpb24gWFQoZSl7cmV0dXJuIGU8PDFeWVQmLShlPj43KX1mdW5jdGlvbiBaVChlLHQpe2xldCBuPTA7Zm9yKDt0PjA7dD4+PTEpbl49ZSYtKHQmMSksZT1YVChlKTtyZXR1cm4gbn12YXIgUVQ9KCgpPT57bGV0IGU9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IHQ9MCxuPTE7dDwyNTY7dCsrLG5ePVhUKG4pKWVbdF09bjtsZXQgdD1uZXcgVWludDhBcnJheSgyNTYpO3RbMF09OTk7Zm9yKGxldCBuPTA7bjwyNTU7bisrKXtsZXQgcj1lWzI1NS1uXTtyfD1yPDw4LHRbZVtuXV09KHJecj4+NF5yPj41XnI+PjZecj4+N145OSkmMjU1fXJldHVybiBTVChlKSx0fSkoKSwkVD1lPT5lPDwyNHxlPj4+OCxlRT1lPT5lPDw4fGU+Pj4yNDtmdW5jdGlvbiB0RShlLHQpe2lmKGUubGVuZ3RoIT09MjU2KXRocm93IEVycm9yKGBXcm9uZyBzYm94IGxlbmd0aGApO2xldCBuPW5ldyBVaW50MzJBcnJheSgyNTYpLm1hcCgobixyKT0+dChlW3JdKSkscj1uLm1hcChlRSksaT1yLm1hcChlRSksYT1pLm1hcChlRSksbz1uZXcgVWludDMyQXJyYXkoNjU1MzYpLHM9bmV3IFVpbnQzMkFycmF5KDY1NTM2KSxjPW5ldyBVaW50MTZBcnJheSg2NTUzNik7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKWZvcihsZXQgbD0wO2w8MjU2O2wrKyl7bGV0IHU9dCoyNTYrbDtvW3VdPW5bdF1ecltsXSxzW3VdPWlbdF1eYVtsXSxjW3VdPWVbdF08PDh8ZVtsXX1yZXR1cm57c2JveDplLHNib3gyOmMsVDA6bixUMTpyLFQyOmksVDM6YSxUMDE6byxUMjM6c319dmFyIG5FPXRFKFFULGU9PlpUKGUsMyk8PDI0fGU8PDE2fGU8PDh8WlQoZSwyKSksckU9KCgpPT57bGV0IGU9bmV3IFVpbnQ4QXJyYXkoMTYpO2ZvcihsZXQgdD0wLG49MTt0PDE2O3QrKyxuPVhUKG4pKWVbdF09bjtyZXR1cm4gZX0pKCk7ZnVuY3Rpb24gaUUoZSl7X1QoZSk7bGV0IHQ9ZS5sZW5ndGg7aWYoIVsxNiwyNCwzMl0uaW5jbHVkZXModCkpdGhyb3cgRXJyb3IoYGFlczogaW52YWxpZCBrZXkgc2l6ZSwgc2hvdWxkIGJlIDE2LCAyNCBvciAzMiwgZ290IGArdCk7bGV0e3Nib3gyOm59PW5FLHI9W107TVQoZSl8fHIucHVzaChlPU5UKGUpKTtsZXQgaT14VChlKSxhPWkubGVuZ3RoLG89ZT0+b0UobixlLGUsZSxlKSxzPW5ldyBVaW50MzJBcnJheSh0KzI4KTtzLnNldChpKTtmb3IobGV0IGU9YTtlPHMubGVuZ3RoO2UrKyl7bGV0IHQ9c1tlLTFdO2UlYT09PTA/dD1vKCRUKHQpKV5yRVtlL2EtMV06YT42JiZlJWE9PT00JiYodD1vKHQpKSxzW2VdPXNbZS1hXV50fXJldHVybiBTVCguLi5yKSxzfWZ1bmN0aW9uIGFFKGUsdCxuLHIsaSxhKXtyZXR1cm4gZVtuPDw4JjY1MjgwfHI+Pj44JjI1NV1edFtpPj4+OCY2NTI4MHxhPj4+MjQmMjU1XX1mdW5jdGlvbiBvRShlLHQsbixyLGkpe3JldHVybiBlW3QmMjU1fG4mNjUyODBdfGVbcj4+PjE2JjI1NXxpPj4+MTYmNjUyODBdPDwxNn1mdW5jdGlvbiBzRShlLHQsbixyLGkpe2xldHtzYm94MjphLFQwMTpvLFQyMzpzfT1uRSxjPTA7dF49ZVtjKytdLG5ePWVbYysrXSxyXj1lW2MrK10saV49ZVtjKytdO2xldCBsPWUubGVuZ3RoLzQtMjtmb3IobGV0IGE9MDthPGw7YSsrKXtsZXQgYT1lW2MrK11eYUUobyxzLHQsbixyLGkpLGw9ZVtjKytdXmFFKG8scyxuLHIsaSx0KSx1PWVbYysrXV5hRShvLHMscixpLHQsbiksZD1lW2MrK11eYUUobyxzLGksdCxuLHIpO3Q9YSxuPWwscj11LGk9ZH1yZXR1cm57czA6ZVtjKytdXm9FKGEsdCxuLHIsaSksczE6ZVtjKytdXm9FKGEsbixyLGksdCksczI6ZVtjKytdXm9FKGEscixpLHQsbiksczM6ZVtjKytdXm9FKGEsaSx0LG4scil9fWZ1bmN0aW9uIGNFKGUsdCxuLHIsaSl7X1QobixLVCksX1QociksaT1rVChyLmxlbmd0aCxpKTtsZXQgYT1uLG89eFQoYSkscz1DVChhKSxjPXhUKHIpLGw9eFQoaSksdT10PzA6MTIsZD1yLmxlbmd0aCxmPXMuZ2V0VWludDMyKHUsdCkse3MwOnAsczE6bSxzMjpoLHMzOmd9PXNFKGUsb1swXSxvWzFdLG9bMl0sb1szXSk7Zm9yKGxldCBuPTA7bis0PD1jLmxlbmd0aDtuKz00KWxbbiswXT1jW24rMF1ecCxsW24rMV09Y1tuKzFdXm0sbFtuKzJdPWNbbisyXV5oLGxbbiszXT1jW24rM11eZyxmPWYrMT4+PjAscy5zZXRVaW50MzIodSxmLHQpLHtzMDpwLHMxOm0sczI6aCxzMzpnfT1zRShlLG9bMF0sb1sxXSxvWzJdLG9bM10pO2xldCBfPUtUKk1hdGguZmxvb3IoYy5sZW5ndGgvcVQpO2lmKF88ZCl7bGV0IGU9bmV3IFVpbnQzMkFycmF5KFtwLG0saCxnXSksdD1iVChlKTtmb3IobGV0IGU9XyxuPTA7ZTxkO2UrKyxuKyspaVtlXT1yW2VdXnRbbl07U1QoZSl9cmV0dXJuIGl9ZnVuY3Rpb24gbEUoZSx0LG4scixpKXtsZXQgYT1pP2kubGVuZ3RoOjAsbz1lLmNyZWF0ZShuLHIubGVuZ3RoK2EpO2kmJm8udXBkYXRlKGkpO2xldCBzPWpUKDgqci5sZW5ndGgsOCphLHQpO28udXBkYXRlKHIpLG8udXBkYXRlKHMpO2xldCBjPW8uZGlnZXN0KCk7cmV0dXJuIFNUKHMpLGN9dmFyIHVFPU9UKHtibG9ja1NpemU6MTYsbm9uY2VMZW5ndGg6MTIsdGFnTGVuZ3RoOjE2LHZhclNpemVOb25jZTohMH0sZnVuY3Rpb24oZSx0LG4pe2lmKHQubGVuZ3RoPDgpdGhyb3cgRXJyb3IoYGFlcy9nY206IGludmFsaWQgbm9uY2UgbGVuZ3RoYCk7ZnVuY3Rpb24gcihlLHQscil7bGV0IGk9bEUoR1QsITEsZSxyLG4pO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWlbZV1ePXRbZV07cmV0dXJuIGl9ZnVuY3Rpb24gaSgpe2xldCBuPWlFKGUpLHI9SlQuc2xpY2UoKSxpPUpULnNsaWNlKCk7aWYoY0UobiwhMSxpLGksciksdC5sZW5ndGg9PT0xMilpLnNldCh0KTtlbHNle2xldCBlPUpULnNsaWNlKCk7QVQoQ1QoZSksOCxCaWdJbnQodC5sZW5ndGgqOCksITEpO2xldCBuPUdULmNyZWF0ZShyKS51cGRhdGUodCkudXBkYXRlKGUpO24uZGlnZXN0SW50byhpKSxuLmRlc3Ryb3koKX1yZXR1cm57eGs6bixhdXRoS2V5OnIsY291bnRlcjppLHRhZ01hc2s6Y0UobiwhMSxpLEpUKX19cmV0dXJue2VuY3J5cHQoZSl7bGV0e3hrOnQsYXV0aEtleTpuLGNvdW50ZXI6YSx0YWdNYXNrOm99PWkoKSxzPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzE2KSxjPVt0LG4sYSxvXTtNVChlKXx8Yy5wdXNoKGU9TlQoZSkpLGNFKHQsITEsYSxlLHMuc3ViYXJyYXkoMCxlLmxlbmd0aCkpO2xldCBsPXIobixvLHMuc3ViYXJyYXkoMCxzLmxlbmd0aC0xNikpO3JldHVybiBjLnB1c2gobCkscy5zZXQobCxlLmxlbmd0aCksU1QoLi4uYyksc30sZGVjcnlwdChlKXtsZXR7eGs6dCxhdXRoS2V5Om4sY291bnRlcjphLHRhZ01hc2s6b309aSgpLHM9W3QsbixvLGFdO01UKGUpfHxzLnB1c2goZT1OVChlKSk7bGV0IGM9ZS5zdWJhcnJheSgwLC0xNiksbD1lLnN1YmFycmF5KC0xNiksdT1yKG4sbyxjKTtpZihzLnB1c2godSksIURUKHUsbCkpdGhyb3cgRXJyb3IoYGFlcy9nY206IGludmFsaWQgZ2hhc2ggdGFnYCk7bGV0IGQ9Y0UodCwhMSxhLGMpO3JldHVybiBTVCguLi5zKSxkfX19KTtmdW5jdGlvbiBkRShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEFycmF5QnVmZmVyLmlzVmlldyhlKSYmZS5jb25zdHJ1Y3Rvci5uYW1lPT09YFVpbnQ4QXJyYXlgfWZ1bmN0aW9uIGZFKGUpe2lmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihlKXx8ZTwwKXRocm93IEVycm9yKGBwb3NpdGl2ZSBpbnRlZ2VyIGV4cGVjdGVkLCBnb3QgYCtlKX1mdW5jdGlvbiBwRShlLC4uLnQpe2lmKCFkRShlKSl0aHJvdyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZGApO2lmKHQubGVuZ3RoPjAmJiF0LmluY2x1ZGVzKGUubGVuZ3RoKSl0aHJvdyBFcnJvcihgVWludDhBcnJheSBleHBlY3RlZCBvZiBsZW5ndGggYCt0K2AsIGdvdCBsZW5ndGg9YCtlLmxlbmd0aCl9ZnVuY3Rpb24gbUUoZSl7aWYodHlwZW9mIGUhPWBmdW5jdGlvbmB8fHR5cGVvZiBlLmNyZWF0ZSE9YGZ1bmN0aW9uYCl0aHJvdyBFcnJvcihgSGFzaCBzaG91bGQgYmUgd3JhcHBlZCBieSB1dGlscy5jcmVhdGVIYXNoZXJgKTtmRShlLm91dHB1dExlbiksZkUoZS5ibG9ja0xlbil9ZnVuY3Rpb24gaEUoZSx0PSEwKXtpZihlLmRlc3Ryb3llZCl0aHJvdyBFcnJvcihgSGFzaCBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKTtpZih0JiZlLmZpbmlzaGVkKXRocm93IEVycm9yKGBIYXNoI2RpZ2VzdCgpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkYCl9ZnVuY3Rpb24gZ0UoZSx0KXtwRShlKTtsZXQgbj10Lm91dHB1dExlbjtpZihlLmxlbmd0aDxuKXRocm93IEVycm9yKGBkaWdlc3RJbnRvKCkgZXhwZWN0cyBvdXRwdXQgYnVmZmVyIG9mIGxlbmd0aCBhdCBsZWFzdCBgK24pfWZ1bmN0aW9uIF9FKGUpe3JldHVybiBuZXcgVWludDMyQXJyYXkoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LE1hdGguZmxvb3IoZS5ieXRlTGVuZ3RoLzQpKX1mdW5jdGlvbiB2RSguLi5lKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmZpbGwoMCl9ZnVuY3Rpb24geUUoZSl7cmV0dXJuIG5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBiRShlLHQpe3JldHVybiBlPDwzMi10fGU+Pj50fWZ1bmN0aW9uIHhFKGUsdCl7cmV0dXJuIGU8PHR8ZT4+PjMyLXQ+Pj4wfXZhciBTRT1uZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoWzI4NzQ1NDAyMF0pLmJ1ZmZlcilbMF09PT02ODtmdW5jdGlvbiBDRShlKXtyZXR1cm4gZTw8MjQmNDI3ODE5MDA4MHxlPDw4JjE2NzExNjgwfGU+Pj44JjY1MjgwfGU+Pj4yNCYyNTV9ZnVuY3Rpb24gd0UoZSl7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XT1DRShlW3RdKTtyZXR1cm4gZX12YXIgVEU9U0U/ZT0+ZTp3RSxFRT1hc3luYygpPT57fTthc3luYyBmdW5jdGlvbiBERShlLHQsbil7bGV0IHI9RGF0ZS5ub3coKTtmb3IobGV0IGk9MDtpPGU7aSsrKXtuKGkpO2xldCBlPURhdGUubm93KCktcjtlPj0wJiZlPHR8fChhd2FpdCBFRSgpLHIrPWUpfX1mdW5jdGlvbiBPRShlKXtpZih0eXBlb2YgZSE9YHN0cmluZ2ApdGhyb3cgRXJyb3IoYHN0cmluZyBleHBlY3RlZGApO3JldHVybiBuZXcgVWludDhBcnJheShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZSkpfWZ1bmN0aW9uIGtFKGUpe3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2AmJihlPU9FKGUpKSxwRShlKSxlfWZ1bmN0aW9uIEFFKGUpe3JldHVybiB0eXBlb2YgZT09YHN0cmluZ2AmJihlPU9FKGUpKSxwRShlKSxlfWZ1bmN0aW9uIGpFKGUsdCl7aWYodCE9PXZvaWQgMCYme30udG9TdHJpbmcuY2FsbCh0KSE9PWBbb2JqZWN0IE9iamVjdF1gKXRocm93IEVycm9yKGBvcHRpb25zIHNob3VsZCBiZSBvYmplY3Qgb3IgdW5kZWZpbmVkYCk7cmV0dXJuIE9iamVjdC5hc3NpZ24oZSx0KX12YXIgTUU9Y2xhc3N7fTtmdW5jdGlvbiBORShlKXtsZXQgdD10PT5lKCkudXBkYXRlKGtFKHQpKS5kaWdlc3QoKSxuPWUoKTtyZXR1cm4gdC5vdXRwdXRMZW49bi5vdXRwdXRMZW4sdC5ibG9ja0xlbj1uLmJsb2NrTGVuLHQuY3JlYXRlPSgpPT5lKCksdH12YXIgUEU9Y2xhc3MgZXh0ZW5kcyBNRXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSxtRShlKTtsZXQgbj1rRSh0KTtpZih0aGlzLmlIYXNoPWUuY3JlYXRlKCksdHlwZW9mIHRoaXMuaUhhc2gudXBkYXRlIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKGBFeHBlY3RlZCBpbnN0YW5jZSBvZiBjbGFzcyB3aGljaCBleHRlbmRzIHV0aWxzLkhhc2hgKTt0aGlzLmJsb2NrTGVuPXRoaXMuaUhhc2guYmxvY2tMZW4sdGhpcy5vdXRwdXRMZW49dGhpcy5pSGFzaC5vdXRwdXRMZW47bGV0IHI9dGhpcy5ibG9ja0xlbixpPW5ldyBVaW50OEFycmF5KHIpO2kuc2V0KG4ubGVuZ3RoPnI/ZS5jcmVhdGUoKS51cGRhdGUobikuZGlnZXN0KCk6bik7Zm9yKGxldCBlPTA7ZTxpLmxlbmd0aDtlKyspaVtlXV49NTQ7dGhpcy5pSGFzaC51cGRhdGUoaSksdGhpcy5vSGFzaD1lLmNyZWF0ZSgpO2ZvcihsZXQgZT0wO2U8aS5sZW5ndGg7ZSsrKWlbZV1ePTEwNjt0aGlzLm9IYXNoLnVwZGF0ZShpKSx2RShpKX11cGRhdGUoZSl7cmV0dXJuIGhFKHRoaXMpLHRoaXMuaUhhc2gudXBkYXRlKGUpLHRoaXN9ZGlnZXN0SW50byhlKXtoRSh0aGlzKSxwRShlLHRoaXMub3V0cHV0TGVuKSx0aGlzLmZpbmlzaGVkPSEwLHRoaXMuaUhhc2guZGlnZXN0SW50byhlKSx0aGlzLm9IYXNoLnVwZGF0ZShlKSx0aGlzLm9IYXNoLmRpZ2VzdEludG8oZSksdGhpcy5kZXN0cm95KCl9ZGlnZXN0KCl7bGV0IGU9bmV3IFVpbnQ4QXJyYXkodGhpcy5vSGFzaC5vdXRwdXRMZW4pO3JldHVybiB0aGlzLmRpZ2VzdEludG8oZSksZX1fY2xvbmVJbnRvKGUpe2V8fD1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7fSk7bGV0e29IYXNoOnQsaUhhc2g6bixmaW5pc2hlZDpyLGRlc3Ryb3llZDppLGJsb2NrTGVuOmEsb3V0cHV0TGVuOm99PXRoaXM7cmV0dXJuIGU9ZSxlLmZpbmlzaGVkPXIsZS5kZXN0cm95ZWQ9aSxlLmJsb2NrTGVuPWEsZS5vdXRwdXRMZW49byxlLm9IYXNoPXQuX2Nsb25lSW50byhlLm9IYXNoKSxlLmlIYXNoPW4uX2Nsb25lSW50byhlLmlIYXNoKSxlfWNsb25lKCl7cmV0dXJuIHRoaXMuX2Nsb25lSW50bygpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLm9IYXNoLmRlc3Ryb3koKSx0aGlzLmlIYXNoLmRlc3Ryb3koKX19LEZFPShlLHQsbik9Pm5ldyBQRShlLHQpLnVwZGF0ZShuKS5kaWdlc3QoKTtGRS5jcmVhdGU9KGUsdCk9Pm5ldyBQRShlLHQpO2Z1bmN0aW9uIElFKGUsdCxuLHIpe21FKGUpO2xldHtjOmksZGtMZW46YSxhc3luY1RpY2s6b309akUoe2RrTGVuOjMyLGFzeW5jVGljazoxMH0scik7aWYoZkUoaSksZkUoYSksZkUobyksaTwxKXRocm93IEVycm9yKGBpdGVyYXRpb25zIChjKSBzaG91bGQgYmUgPj0gMWApO2xldCBzPUFFKHQpLGM9QUUobiksbD1uZXcgVWludDhBcnJheShhKSx1PUZFLmNyZWF0ZShlLHMpO3JldHVybntjOmksZGtMZW46YSxhc3luY1RpY2s6byxESzpsLFBSRjp1LFBSRlNhbHQ6dS5fY2xvbmVJbnRvKCkudXBkYXRlKGMpfX1mdW5jdGlvbiBMRShlLHQsbixyLGkpe3JldHVybiBlLmRlc3Ryb3koKSx0LmRlc3Ryb3koKSxyJiZyLmRlc3Ryb3koKSx2RShpKSxufWZ1bmN0aW9uIFJFKGUsdCxuLHIpe2xldHtjOmksZGtMZW46YSxESzpvLFBSRjpzLFBSRlNhbHQ6Y309SUUoZSx0LG4sciksbCx1PW5ldyBVaW50OEFycmF5KDQpLGQ9eUUodSksZj1uZXcgVWludDhBcnJheShzLm91dHB1dExlbik7Zm9yKGxldCBlPTEsdD0wO3Q8YTtlKyssdCs9cy5vdXRwdXRMZW4pe2xldCBuPW8uc3ViYXJyYXkodCx0K3Mub3V0cHV0TGVuKTtkLnNldEludDMyKDAsZSwhMSksKGw9Yy5fY2xvbmVJbnRvKGwpKS51cGRhdGUodSkuZGlnZXN0SW50byhmKSxuLnNldChmLnN1YmFycmF5KDAsbi5sZW5ndGgpKTtmb3IobGV0IGU9MTtlPGk7ZSsrKXtzLl9jbG9uZUludG8obCkudXBkYXRlKGYpLmRpZ2VzdEludG8oZik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXV49ZltlXX19cmV0dXJuIExFKHMsYyxvLGwsZil9ZnVuY3Rpb24gekUoZSx0LG4scil7aWYodHlwZW9mIGUuc2V0QmlnVWludDY0PT1gZnVuY3Rpb25gKXJldHVybiBlLnNldEJpZ1VpbnQ2NCh0LG4scik7bGV0IGk9QmlnSW50KDMyKSxhPUJpZ0ludCg0Mjk0OTY3Mjk1KSxvPU51bWJlcihuPj5pJmEpLHM9TnVtYmVyKG4mYSksYz1yPzQ6MCxsPXI/MDo0O2Uuc2V0VWludDMyKHQrYyxvLHIpLGUuc2V0VWludDMyKHQrbCxzLHIpfWZ1bmN0aW9uIEJFKGUsdCxuKXtyZXR1cm4gZSZ0Xn5lJm59ZnVuY3Rpb24gVkUoZSx0LG4pe3JldHVybiBlJnReZSZuXnQmbn12YXIgSEU9Y2xhc3MgZXh0ZW5kcyBNRXtjb25zdHJ1Y3RvcihlLHQsbixyKXtzdXBlcigpLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5sZW5ndGg9MCx0aGlzLnBvcz0wLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuYmxvY2tMZW49ZSx0aGlzLm91dHB1dExlbj10LHRoaXMucGFkT2Zmc2V0PW4sdGhpcy5pc0xFPXIsdGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoZSksdGhpcy52aWV3PXlFKHRoaXMuYnVmZmVyKX11cGRhdGUoZSl7aEUodGhpcyksZT1rRShlKSxwRShlKTtsZXR7dmlldzp0LGJ1ZmZlcjpuLGJsb2NrTGVuOnJ9PXRoaXMsaT1lLmxlbmd0aDtmb3IobGV0IGE9MDthPGk7KXtsZXQgbz1NYXRoLm1pbihyLXRoaXMucG9zLGktYSk7aWYobz09PXIpe2xldCB0PXlFKGUpO2Zvcig7cjw9aS1hO2ErPXIpdGhpcy5wcm9jZXNzKHQsYSl9ZWxzZSBuLnNldChlLnN1YmFycmF5KGEsYStvKSx0aGlzLnBvcyksdGhpcy5wb3MrPW8sYSs9byx0aGlzLnBvcz09PXImJih0aGlzLnByb2Nlc3ModCwwKSx0aGlzLnBvcz0wKX1yZXR1cm4gdGhpcy5sZW5ndGgrPWUubGVuZ3RoLHRoaXMucm91bmRDbGVhbigpLHRoaXN9ZGlnZXN0SW50byhlKXtoRSh0aGlzKSxnRShlLHRoaXMpLHRoaXMuZmluaXNoZWQ9ITA7bGV0e2J1ZmZlcjp0LHZpZXc6bixibG9ja0xlbjpyLGlzTEU6aX09dGhpcyx7cG9zOmF9PXRoaXM7dFthKytdPTEyOCx2RSh0aGlzLmJ1ZmZlci5zdWJhcnJheShhKSksdGhpcy5wYWRPZmZzZXQ+ci1hJiYodGhpcy5wcm9jZXNzKG4sMCksYT0wKTtmb3IobGV0IGU9YTtlPHI7ZSsrKXRbZV09MDt6RShuLHItOCxCaWdJbnQodGhpcy5sZW5ndGgqOCksaSksdGhpcy5wcm9jZXNzKG4sMCk7bGV0IG89eUUoZSkscz10aGlzLm91dHB1dExlbjtpZihzJTQpdGhyb3cgRXJyb3IoYF9zaGEyOiBvdXRwdXRMZW4gc2hvdWxkIGJlIGFsaWduZWQgdG8gMzJiaXRgKTtsZXQgYz1zLzQsbD10aGlzLmdldCgpO2lmKGM+bC5sZW5ndGgpdGhyb3cgRXJyb3IoYF9zaGEyOiBvdXRwdXRMZW4gYmlnZ2VyIHRoYW4gc3RhdGVgKTtmb3IobGV0IGU9MDtlPGM7ZSsrKW8uc2V0VWludDMyKDQqZSxsW2VdLGkpfWRpZ2VzdCgpe2xldHtidWZmZXI6ZSxvdXRwdXRMZW46dH09dGhpczt0aGlzLmRpZ2VzdEludG8oZSk7bGV0IG49ZS5zbGljZSgwLHQpO3JldHVybiB0aGlzLmRlc3Ryb3koKSxufV9jbG9uZUludG8oZSl7ZXx8PW5ldyB0aGlzLmNvbnN0cnVjdG9yLGUuc2V0KC4uLnRoaXMuZ2V0KCkpO2xldHtibG9ja0xlbjp0LGJ1ZmZlcjpuLGxlbmd0aDpyLGZpbmlzaGVkOmksZGVzdHJveWVkOmEscG9zOm99PXRoaXM7cmV0dXJuIGUuZGVzdHJveWVkPWEsZS5maW5pc2hlZD1pLGUubGVuZ3RoPXIsZS5wb3M9byxyJXQmJmUuYnVmZmVyLnNldChuKSxlfWNsb25lKCl7cmV0dXJuIHRoaXMuX2Nsb25lSW50bygpfX0sVUU9VWludDMyQXJyYXkuZnJvbShbMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdKSxXRT1VaW50MzJBcnJheS5mcm9tKFsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdKSxHRT1uZXcgVWludDMyQXJyYXkoNjQpLEtFPWNsYXNzIGV4dGVuZHMgSEV7Y29uc3RydWN0b3IoZT0zMil7c3VwZXIoNjQsZSw4LCExKSx0aGlzLkE9VUVbMF18MCx0aGlzLkI9VUVbMV18MCx0aGlzLkM9VUVbMl18MCx0aGlzLkQ9VUVbM118MCx0aGlzLkU9VUVbNF18MCx0aGlzLkY9VUVbNV18MCx0aGlzLkc9VUVbNl18MCx0aGlzLkg9VUVbN118MH1nZXQoKXtsZXR7QTplLEI6dCxDOm4sRDpyLEU6aSxGOmEsRzpvLEg6c309dGhpcztyZXR1cm5bZSx0LG4scixpLGEsbyxzXX1zZXQoZSx0LG4scixpLGEsbyxzKXt0aGlzLkE9ZXwwLHRoaXMuQj10fDAsdGhpcy5DPW58MCx0aGlzLkQ9cnwwLHRoaXMuRT1pfDAsdGhpcy5GPWF8MCx0aGlzLkc9b3wwLHRoaXMuSD1zfDB9cHJvY2VzcyhlLHQpe2ZvcihsZXQgbj0wO248MTY7bisrLHQrPTQpR0Vbbl09ZS5nZXRVaW50MzIodCwhMSk7Zm9yKGxldCBlPTE2O2U8NjQ7ZSsrKXtsZXQgdD1HRVtlLTE1XSxuPUdFW2UtMl0scj1iRSh0LDcpXmJFKHQsMTgpXnQ+Pj4zLGk9YkUobiwxNyleYkUobiwxOSlebj4+PjEwO0dFW2VdPWkrR0VbZS03XStyK0dFW2UtMTZdfDB9bGV0e0E6bixCOnIsQzppLEQ6YSxFOm8sRjpzLEc6YyxIOmx9PXRoaXM7Zm9yKGxldCBlPTA7ZTw2NDtlKyspe2xldCB0PWJFKG8sNileYkUobywxMSleYkUobywyNSksdT1sK3QrQkUobyxzLGMpK1dFW2VdK0dFW2VdfDAsZD0oYkUobiwyKV5iRShuLDEzKV5iRShuLDIyKSkrVkUobixyLGkpfDA7bD1jLGM9cyxzPW8sbz1hK3V8MCxhPWksaT1yLHI9bixuPXUrZHwwfW49bit0aGlzLkF8MCxyPXIrdGhpcy5CfDAsaT1pK3RoaXMuQ3wwLGE9YSt0aGlzLkR8MCxvPW8rdGhpcy5FfDAscz1zK3RoaXMuRnwwLGM9Yyt0aGlzLkd8MCxsPWwrdGhpcy5IfDAsdGhpcy5zZXQobixyLGksYSxvLHMsYyxsKX1yb3VuZENsZWFuKCl7dkUoR0UpfWRlc3Ryb3koKXt0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDApLHZFKHRoaXMuYnVmZmVyKX19LHFFPU5FKCgpPT5uZXcgS0UpO2Z1bmN0aW9uIEpFKGUsdCxuLHIsaSxhKXtsZXQgbz1lW3QrK11ebltyKytdLHM9ZVt0KytdXm5bcisrXSxjPWVbdCsrXV5uW3IrK10sbD1lW3QrK11ebltyKytdLHU9ZVt0KytdXm5bcisrXSxkPWVbdCsrXV5uW3IrK10sZj1lW3QrK11ebltyKytdLHA9ZVt0KytdXm5bcisrXSxtPWVbdCsrXV5uW3IrK10saD1lW3QrK11ebltyKytdLGc9ZVt0KytdXm5bcisrXSxfPWVbdCsrXV5uW3IrK10sdj1lW3QrK11ebltyKytdLHk9ZVt0KytdXm5bcisrXSxiPWVbdCsrXV5uW3IrK10seD1lW3QrK11ebltyKytdLFM9byxDPXMsdz1jLFQ9bCxFPXUsRD1kLE89ZixrPXAsQT1tLGo9aCxNPWcsTj1fLFA9dixGPXksST1iLEw9eDtmb3IobGV0IGU9MDtlPDg7ZSs9MilFXj14RShTK1B8MCw3KSxBXj14RShFK1N8MCw5KSxQXj14RShBK0V8MCwxMyksU149eEUoUCtBfDAsMTgpLGpePXhFKEQrQ3wwLDcpLEZePXhFKGorRHwwLDkpLENePXhFKEYranwwLDEzKSxEXj14RShDK0Z8MCwxOCksSV49eEUoTStPfDAsNyksd149eEUoSStNfDAsOSksT149eEUodytJfDAsMTMpLE1ePXhFKE8rd3wwLDE4KSxUXj14RShMK058MCw3KSxrXj14RShUK0x8MCw5KSxOXj14RShrK1R8MCwxMyksTF49eEUoTitrfDAsMTgpLENePXhFKFMrVHwwLDcpLHdePXhFKEMrU3wwLDkpLFRePXhFKHcrQ3wwLDEzKSxTXj14RShUK3d8MCwxOCksT149eEUoRCtFfDAsNyksa149eEUoTytEfDAsOSksRV49eEUoaytPfDAsMTMpLERePXhFKEUra3wwLDE4KSxOXj14RShNK2p8MCw3KSxBXj14RShOK018MCw5KSxqXj14RShBK058MCwxMyksTV49eEUoaitBfDAsMTgpLFBePXhFKEwrSXwwLDcpLEZePXhFKFArTHwwLDkpLElePXhFKEYrUHwwLDEzKSxMXj14RShJK0Z8MCwxOCk7aVthKytdPW8rU3wwLGlbYSsrXT1zK0N8MCxpW2ErK109Yyt3fDAsaVthKytdPWwrVHwwLGlbYSsrXT11K0V8MCxpW2ErK109ZCtEfDAsaVthKytdPWYrT3wwLGlbYSsrXT1wK2t8MCxpW2ErK109bStBfDAsaVthKytdPWgranwwLGlbYSsrXT1nK018MCxpW2ErK109XytOfDAsaVthKytdPXYrUHwwLGlbYSsrXT15K0Z8MCxpW2ErK109YitJfDAsaVthKytdPXgrTHwwfWZ1bmN0aW9uIFlFKGUsdCxuLHIsaSl7bGV0IGE9ciswLG89cisxNippO2ZvcihsZXQgcj0wO3I8MTY7cisrKW5bbytyXT1lW3QrKDIqaS0xKSoxNityXTtmb3IobGV0IHI9MDtyPGk7cisrLGErPTE2LHQrPTE2KUpFKG4sbyxlLHQsbixhKSxyPjAmJihvKz0xNiksSkUobixhLGUsdCs9MTYsbixvKX1mdW5jdGlvbiBYRShlLHQsbil7bGV0e046cixyOmkscDphLGRrTGVuOm8sYXN5bmNUaWNrOnMsbWF4bWVtOmMsb25Qcm9ncmVzczpsfT1qRSh7ZGtMZW46MzIsYXN5bmNUaWNrOjEwLG1heG1lbToxMDI0KiozKzEwMjR9LG4pO2lmKGZFKHIpLGZFKGkpLGZFKGEpLGZFKG8pLGZFKHMpLGZFKGMpLGwhPT12b2lkIDAmJnR5cGVvZiBsIT1gZnVuY3Rpb25gKXRocm93IEVycm9yKGBwcm9ncmVzc0NiIHNob3VsZCBiZSBmdW5jdGlvbmApO2xldCB1PTEyOCppLGQ9dS80LGY9MioqMzI7aWYocjw9MXx8ciZyLTF8fHI+Zil0aHJvdyBFcnJvcihgU2NyeXB0OiBOIG11c3QgYmUgbGFyZ2VyIHRoYW4gMSwgYSBwb3dlciBvZiAyLCBhbmQgbGVzcyB0aGFuIDJeMzJgKTtpZihhPDB8fGE+KGYtMSkqMzIvdSl0aHJvdyBFcnJvcihgU2NyeXB0OiBwIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiBvciBlcXVhbCB0byAoKDJeMzIgLSAxKSAqIDMyKSAvICgxMjggKiByKWApO2lmKG88MHx8bz4oZi0xKSozMil0aHJvdyBFcnJvcihgU2NyeXB0OiBka0xlbiBzaG91bGQgYmUgcG9zaXRpdmUgaW50ZWdlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gKDJeMzIgLSAxKSAqIDMyYCk7aWYodSoocithKT5jKXRocm93IEVycm9yKGBTY3J5cHQ6IG1lbXVzZWQgaXMgYmlnZ2VyIHRoYW4gbWF4TWVtLiBFeHBlY3RlZCAxMjggKiByICogKE4gKyBwKSA+IG1heG1lbSBvZiBgK2MpO2xldCBwPVJFKHFFLGUsdCx7YzoxLGRrTGVuOnUqYX0pLG09X0UocCksaD1fRShuZXcgVWludDhBcnJheSh1KnIpKSxnPV9FKG5ldyBVaW50OEFycmF5KHUpKSxfPSgpPT57fTtpZihsKXtsZXQgZT0yKnIqYSx0PU1hdGgubWF4KE1hdGguZmxvb3IoZS8xZTQpLDEpLG49MDtfPSgpPT57bisrLGwmJighKG4ldCl8fG49PT1lKSYmbChuL2UpfX1yZXR1cm57TjpyLHI6aSxwOmEsZGtMZW46byxibG9ja1NpemUzMjpkLFY6aCxCMzI6bSxCOnAsdG1wOmcsYmxvY2tNaXhDYjpfLGFzeW5jVGljazpzfX1mdW5jdGlvbiBaRShlLHQsbixyLGkpe2xldCBhPVJFKHFFLGUsbix7YzoxLGRrTGVuOnR9KTtyZXR1cm4gdkUobixyLGkpLGF9YXN5bmMgZnVuY3Rpb24gUUUoZSx0LG4pe2xldHtOOnIscjppLHA6YSxka0xlbjpvLGJsb2NrU2l6ZTMyOnMsVjpjLEIzMjpsLEI6dSx0bXA6ZCxibG9ja01peENiOmYsYXN5bmNUaWNrOnB9PVhFKGUsdCxuKTtURShsKTtmb3IobGV0IGU9MDtlPGE7ZSsrKXtsZXQgdD1zKmU7Zm9yKGxldCBlPTA7ZTxzO2UrKyljW2VdPWxbdCtlXTtsZXQgbj0wO2F3YWl0IERFKHItMSxwLCgpPT57WUUoYyxuLGMsbis9cyxpKSxmKCl9KSxZRShjLChyLTEpKnMsbCx0LGkpLGYoKSxhd2FpdCBERShyLHAsKCk9PntsZXQgZT1sW3Qrcy0xNl0lcjtmb3IobGV0IG49MDtuPHM7bisrKWRbbl09bFt0K25dXmNbZSpzK25dO1lFKGQsMCxsLHQsaSksZigpfSl9cmV0dXJuIFRFKGwpLFpFKGUsbyx1LGMsZCl9dmFyICRFPWNsYXNzIGV7cGFzc3dvcmQ7c3RhdGljIFBSRUZJWD1gZW5jcnlwdGVkOmA7a2V5cz1uZXcgTWFwO2NvbnN0cnVjdG9yKGUpe3RoaXMucGFzc3dvcmQ9ZX1zdGF0aWMgcGFydHNPZih0KXtsZXQgbj1VaW50OEFycmF5LmZyb20oYXRvYih0LnNsaWNlKGUuUFJFRklYLmxlbmd0aCkpLGU9PmUuY2hhckNvZGVBdCgwKSk7aWYoblswXSE9PTF8fG4ubGVuZ3RoPDQ1KXRocm93IEVycm9yKGBub3QgYSB2YWx1ZSBDaXJjdWl0IGVuY3J5cHRlZGApO3JldHVybntzYWx0Om4uc3ViYXJyYXkoMSwxNyksaXY6bi5zdWJhcnJheSgxNywyOSksc2VhbGVkOm4uc3ViYXJyYXkoMjkpfX1rZXkoZSl7bGV0IHQ9Wy4uLmVdLmpvaW4oYCxgKSxuPXRoaXMua2V5cy5nZXQodCk7cmV0dXJuIG58fHRoaXMua2V5cy5zZXQodCxuPVFFKHRoaXMucGFzc3dvcmQsZSx7TjoyKioxNyxyOjgscDoxLGRrTGVuOjMyfSkpLG59YXN5bmMgZGVjcnlwdCh0LG4pe2lmKCFuLnN0YXJ0c1dpdGgoZS5QUkVGSVgpKXJldHVybiBuO2xldHtzYWx0OnIsaXY6aSxzZWFsZWQ6YX09ZS5wYXJ0c09mKG4pLG89dUUoYXdhaXQgdGhpcy5rZXkociksaSxuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodCkpLmRlY3J5cHQoYSk7cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShvKX19LGVEPXtrZXk6MCxjbGFzczpgdmVyZGljdCByZWplY3RgfSx0RD17Y2xhc3M6YG11dGVkYH0sbkQ9W2BvblN1Ym1pdGBdLHJEPXtjbGFzczpgZmllbGRgfSxpRD1bYG9uVXBkYXRlOm1vZGVsVmFsdWVgXSxhRD1bYGRpc2FibGVkYF0sb0Q9W2BvbkNsaWNrYF0sc0Q9e2tleToxLGNsYXNzOmB2ZXJkaWN0IHJlamVjdGB9LGNEPXtrZXk6MixjbGFzczpgbXV0ZWRgfSxsRD17a2V5OjMsY2xhc3M6YGRhdGFgfSx1RD17a2V5OjAsY2xhc3M6YGJhZGdlIGVycm9yYH0sZEQ9e2tleToxfSxmRD17a2V5OjIsY2xhc3M6YG11dGVkYH0scEQ9Qm4oe19fbmFtZTpgU2VjcmV0c1ZpZXdgLHNldHVwKGUpe2xldCB0PUl0KCksbj1JdChgYCkscj1DdCh7fSksaT1DdCh7fSksYT1DdCh7fSksbz1DdCh7fSk7dHIoYXN5bmMoKT0+e3RyeXt0LnZhbHVlPWF3YWl0IFBvKGAvYXBpL3NlY3JldHNgKX1jYXRjaChlKXtuLnZhbHVlPWUubWVzc2FnZX19KTtsZXQgcz1lPT5lLmVudHJpZXMuZmlsdGVyKGU9PmUua2luZD09PWBlbmNyeXB0ZWRgKTthc3luYyBmdW5jdGlvbiBjKGUpe2lbZS5maWxlXT1gYDtsZXQgdD1uZXcgJEUocltlLmZpbGVdPz9gYCk7cltlLmZpbGVdPWBgLGFbZS5maWxlXT0hMDt0cnl7bGV0IG49e307Zm9yKGxldCByIG9mIHMoZSkpbltyLm5hbWVdPWF3YWl0IHQuZGVjcnlwdChyLm5hbWUsci5jaXBoZXJ0ZXh0KTtvW2UuZmlsZV09bn1jYXRjaHtpW2UuZmlsZV09YFRoYXQgcGFzc3dvcmQgZG9lcyBub3Qgb3BlbiAke2UuZmlsZX0uYH1maW5hbGx5e2FbZS5maWxlXT0hMX19bGV0IGw9e2VuY3J5cHRlZDpgZW5jcnlwdGVkYCwiMXBhc3N3b3JkIjpga2VwdCBpbiAxUGFzc3dvcmRgLGVtcHR5OmBlbXB0eWAsIm5vdCBlbmNyeXB0ZWQiOmBOT1QgRU5DUllQVEVEOiBydW4gY2lyY3VpdCBzZWNyZXRzIGVuY3J5cHRgLG1pc3Npbmc6YG1pc3Npbmc6IHRoZSBwcm9qZWN0IG5lZWRzIGl0YH07cmV0dXJuKGUsdSk9PihKKCksWShxLG51bGwsW3VbMl18fD1YKGBoMmAsbnVsbCxgU2VjcmV0c2AsLTEpLHVbM118fD1YKGBwYCx7Y2xhc3M6YG11dGVkYH0sW0ppKGAgRWFjaCBzZWNyZXQsIGFuZCBob3cgaXQgaXMga2VwdC4gQWRkIG9yIGNoYW5nZSBvbmUgd2l0aCBgKSxYKGBjb2RlYCxudWxsLGBjaXJjdWl0IHNlY3JldHNgKSxKaShgLiBBIHZhbHVlIGlzIG5ldmVyIHNlbnQgdG8gdGhpcyBwYWdlIGluIHBsYWluIHRleHQuIGApXSwtMSksbi52YWx1ZT8oSigpLFkoYHBgLGVELEsobi52YWx1ZSksMSkpOllpKGBgLCEwKSwoSighMCksWShxLG51bGwsaHIodC52YWx1ZT8uZmlsZXM/P1tdLGU9PihKKCksWShgc2VjdGlvbmAse2tleTplLmZpbGV9LFtYKGBoM2AsbnVsbCxbWChgY29kZWAsbnVsbCxLKGUuZmlsZSksMSldKSxYKGBwYCx0RCxLKGUubmV0d29ya3MubGVuZ3RoPjE/YE5ldHdvcmtzYDpgTmV0d29ya2ApK2AgYCtLKGUubmV0d29ya3Muam9pbihgLCBgKSkrYC4gSXRzIHBhc3N3b3JkOiBgK0soZS5wYXNzd29yZExvY2F0aW9uPz9gdHlwZWQgd2hlbiBDaXJjdWl0IGFza3NgKStgLiBgLDEpLHMoZSkubGVuZ3RoPyhKKCksWShgZm9ybWAse2tleTowLGNsYXNzOmB0b29sLWZvcm1gLGF1dG9jb21wbGV0ZTpgb2ZmYCxvblN1Ym1pdDpDbyh0PT5jKGUpLFtgcHJldmVudGBdKX0sW1goYGxhYmVsYCxyRCxbSmkoYFRoZSBwYXNzd29yZCBvZiBgK0soZS5maWxlKStgIGAsMSksQ24oWChgaW5wdXRgLHsib25VcGRhdGU6bW9kZWxWYWx1ZSI6dD0+cltlLmZpbGVdPXQsdHlwZTpgcGFzc3dvcmRgLGF1dG9jb21wbGV0ZTpgb2ZmYCxzcGVsbGNoZWNrOmBmYWxzZWB9LG51bGwsOCxpRCksW1tnbyxyW2UuZmlsZV1dXSksdVswXXx8PVgoYHNtYWxsYCxudWxsLGBVc2VkIGhlcmUgaW4gdGhlIGJyb3dzZXIgdG8gZGVjcnlwdCwgdGhlbiBmb3Jnb3R0ZW4uIEl0IGlzIG5ldmVyIHNlbnQgYW55d2hlcmUgb3Iga2VwdC5gLC0xKV0pLFgoYGJ1dHRvbmAse2NsYXNzOmBwcmltYXJ5YCx0eXBlOmBzdWJtaXRgLGRpc2FibGVkOmFbZS5maWxlXX0sSyhhW2UuZmlsZV0/YE9wZW5pbmfigKZgOmBTaG93IHRoZSB2YWx1ZXNgKSw5LGFEKSxvW2UuZmlsZV0/KEooKSxZKGBidXR0b25gLHtrZXk6MCx0eXBlOmBidXR0b25gLG9uQ2xpY2s6dD0+ZGVsZXRlIG9bZS5maWxlXX0sYEhpZGUgdGhlbWAsOCxvRCkpOllpKGBgLCEwKV0sNDAsbkQpKTpZaShgYCwhMCksaVtlLmZpbGVdPyhKKCksWShgcGAsc0QsSyhpW2UuZmlsZV0pLDEpKTpZaShgYCwhMCksZS5lbnRyaWVzLmxlbmd0aD8oSigpLFkoYHRhYmxlYCxsRCxbdVsxXXx8PVgoYHRoZWFkYCxudWxsLFtYKGB0cmAsbnVsbCxbWChgdGhgLG51bGwsYE5hbWVgKSxYKGB0aGAsbnVsbCxgS2VwdGApLFgoYHRoYCxudWxsLGBWYWx1ZWApXSldLC0xKSxYKGB0Ym9keWAsbnVsbCxbKEooITApLFkocSxudWxsLGhyKGUuZW50cmllcyx0PT4oSigpLFkoYHRyYCx7a2V5OnQubmFtZX0sW1goYHRkYCxudWxsLFtYKGBjb2RlYCxudWxsLEsodC5uYW1lKSwxKV0pLFgoYHRkYCxudWxsLFt0LmtpbmQ9PT1gbm90IGVuY3J5cHRlZGB8fHQua2luZD09PWBtaXNzaW5nYD8oSigpLFkoYHNwYW5gLHVELEsobFt0LmtpbmRdKSwxKSk6KEooKSxZKHEse2tleToxfSxbSmkoSyhsW3Qua2luZF0pLDEpXSw2NCkpXSksWChgdGRgLG51bGwsW3Qub25lUGFzc3dvcmQ/KEooKSxZKHEse2tleTowfSxbSmkoYHZhdWx0IGArSyh0Lm9uZVBhc3N3b3JkLnZhdWx0KStgLCBpdGVtIGArSyh0Lm9uZVBhc3N3b3JkLml0ZW0pLDEpXSw2NCkpOm9bZS5maWxlXT8uW3QubmFtZV09PT12b2lkIDA/KEooKSxZKGBzcGFuYCxmRCxLKHQua2luZD09PWBlbmNyeXB0ZWRgP2BoaWRkZW5gOmBgKSwxKSk6KEooKSxZKGBjb2RlYCxkRCxLKG9bZS5maWxlXVt0Lm5hbWVdKSwxKSldKV0pKSksMTI4KSldKV0pKTooSigpLFkoYHBgLGNELGBObyBzZWNyZXRzIHlldC5gKSldKSkpLDEyOCkpXSw2NCkpfX0pLG1EPUJuKHtfX25hbWU6YFNlc3Npb25zVmlld2AscHJvcHM6e2RhdGE6e319LHNldHVwKGUpe2xldCB0PWUsbj1TYSgoKT0+bmV3IFNldCh0LmRhdGEuZGV2aWNlcy5tYXAoZT0+ZS5uYW1lKSkpLHI9U2EoKCk9PnQuZGF0YS5zZXNzaW9ucy5tYXAoZT0+KHtjZWxsczpbe2RldmljZTplLmRldmljZX0sZS5uYW1lLGUuYWRkcmVzcyxlLnJlbW90ZUFzP2BBUyR7ZS5yZW1vdGVBc31gOmBgLGUucm9sZSxlLmdyb3VwLGUuaW1wb3J0LGUuZXhwb3J0LGUuZmFyJiZuLnZhbHVlLmhhcyhlLmZhcik/e2RldmljZTplLmZhcn06ZS5mYXIsZS5vbmVTaWRlZD9gbm8gc2Vzc2lvbiBiYWNrYDpgYF19KSkpO3JldHVybihlLHQpPT4oSigpLFkocSxudWxsLFt0WzBdfHw9WChgaDJgLG51bGwsYEJHUCBzZXNzaW9uc2AsLTEpLFdpKHFvLHtoZWFkOltgRGV2aWNlYCxgTmVpZ2hib3JgLGBBZGRyZXNzYCxgUmVtb3RlIEFTYCxgUm9sZWAsYEdyb3VwYCxgSW1wb3J0YCxgRXhwb3J0YCxgRmFyIGVuZGAsYE5vdGVgXSxyb3dzOnIudmFsdWUsY3N2OmBiZ3Atc2Vzc2lvbnNgfSxudWxsLDgsW2Byb3dzYF0pXSw2NCkpfX0pLGhEPWNsYXNzIGV7c3RhdGljIGFkZHJlc3Nlc09mKGUpe3JldHVybiBPYmplY3QudmFsdWVzKGUuaW50ZXJmYWNlcz8/e30pLmZsYXRNYXAoZT0+T2JqZWN0LmVudHJpZXMoZT8/e30pLmZsYXRNYXAoKFtlLHRdKT0+KHQ/LmFkZHJlc3Nlcz8/W10pLm1hcChuPT50eXBlb2Ygbj09YHN0cmluZ2A/e2hvbGRlcjplLGFkZHJlc3M6biwuLi50Py52cmY/e3ZyZjp0LnZyZn06e319Ontob2xkZXI6ZSxhZGRyZXNzOm4uYWRkcmVzcyxwZWVyOm4ucGVlcl9hZGRyZXNzLC4uLnQ/LnZyZj97dnJmOnQudnJmfTp7fX0pKSl9c3RhdGljIHRyYWNlKHQsbil7bGV0IHI9TG8ucGFyc2VSYW5nZShuLnRyaW0oKSk7aWYoIXJ8fHIuZmlyc3QhPT1yLmxhc3QpcmV0dXJuO2xldCBpPW4udHJpbSgpLGE9dC5kZXZpY2VzLmZsYXRNYXAodD0+ZS5hZGRyZXNzZXNPZih0KS5maWx0ZXIoZT0+TG8uc2FtZUFkZHJlc3MoZS5hZGRyZXNzLGkpKS5tYXAoZT0+KHtkZXZpY2U6dC5uYW1lLGhvbGRlcjplLmhvbGRlcixhZGRyZXNzOmUuYWRkcmVzc30pKSksbz1bXTtmb3IobGV0IG4gb2YgdC5kZXZpY2VzKXtsZXQgdD1uZXcgTWFwLHI9ZT0+e2xldCBuPXQuZ2V0KGUudGFibGUpOyghbnx8ZS5sZW5ndGg+bi5sZW5ndGh8fGUubGVuZ3RoPT09bi5sZW5ndGgmJmUucmFuazxuLnJhbmspJiZ0LnNldChlLnRhYmxlLGUpfTtmb3IobGV0IHQgb2YgZS5hZGRyZXNzZXNPZihuKSl7bGV0IGU9dC52cmY/YFZSRiAke3QudnJmfWA6YG1haW5gO0xvLnNhbWVBZGRyZXNzKHQuYWRkcmVzcyxpKT9yKHtkZXZpY2U6bi5uYW1lLHRhYmxlOmUsa2luZDpgbG9jYWxgLHByZWZpeDp0LmFkZHJlc3MsdGhyb3VnaDp0LmhvbGRlcixsZW5ndGg6MTI5LHJhbms6MH0pOnQucGVlciYmTG8uc2FtZUFkZHJlc3ModC5wZWVyLGkpP3Ioe2RldmljZTpuLm5hbWUsdGFibGU6ZSxraW5kOmBjb25uZWN0ZWRgLHByZWZpeDpgJHt0LnBlZXJ9LCB0aGUgZmFyIGVuZCBvZiAke3QuYWRkcmVzc31gLHRocm91Z2g6dC5ob2xkZXIsbGVuZ3RoOjEyOCxyYW5rOjF9KTohdC5wZWVyJiZMby5jb3ZlcnModC5hZGRyZXNzLGkpJiZyKHtkZXZpY2U6bi5uYW1lLHRhYmxlOmUsa2luZDpgY29ubmVjdGVkYCxwcmVmaXg6dC5hZGRyZXNzLHRocm91Z2g6dC5ob2xkZXIsbGVuZ3RoOkxvLmxlbmd0aE9mKHQuYWRkcmVzcykscmFuazoxfSl9Zm9yKGxldCBlIG9mIG4ucm91dGluZz8uc3RhdGljX3JvdXRlcz8/W10pe2lmKCFMby5jb3ZlcnMoZS5wcmVmaXgsaSkpY29udGludWU7bGV0IHQ9ZS52cmY/YFZSRiAke2UudnJmfWA6ZS5yb3V0aW5nX3RhYmxlPz9gbWFpbmA7cih7ZGV2aWNlOm4ubmFtZSx0YWJsZTp0LGtpbmQ6YHN0YXRpY2AscHJlZml4OmUucHJlZml4LC4uLmUubmV4dF9ob3A/e3ZpYTplLm5leHRfaG9wfTp7fSwuLi5lLmludGVyZmFjZT97dGhyb3VnaDplLmludGVyZmFjZX06e30sLi4uZS5ibGFja2hvbGU/e25vdGU6YGRyb3BwZWQ6IGEgYmxhY2tob2xlIHJvdXRlYH06ZS5kZXNjcmlwdGlvbj97bm90ZTplLmRlc2NyaXB0aW9ufTp7fSxsZW5ndGg6TG8ubGVuZ3RoT2YoZS5wcmVmaXgpLHJhbms6MisoZS5kaXN0YW5jZT8/MSl9KX10LnNpemV8fG8ucHVzaCh7ZGV2aWNlOm4ubmFtZSx0YWJsZTpgbWFpbmAsa2luZDpgbm9uZWB9KTtmb3IobGV0e2xlbmd0aDplLHJhbms6biwuLi5yfW9mIHQudmFsdWVzKCkpby5wdXNoKHIpfWxldCBzPVtdO2ZvcihsZXQgZSBvZiB0LmRldmljZXMpe2xldCB0PWUuZmlyZXdhbGw/LmFkZHJlc3Nfc2V0cz8/e30sbj1lPT50eXBlb2YgZT09YHN0cmluZ2AmJih0W2VdPz9bXSkuc29tZShlPT5Mby5jb3ZlcnMoZSxpKSkscj1lPT4oQXJyYXkuaXNBcnJheShlKT9lOltlXSkuc29tZShlPT50eXBlb2YgZT09YHN0cmluZ2AmJkxvLmNvdmVycyhlLGkpKSxhPSh0LGkpPT57Zm9yKGxldFthLG9db2YoaT8/W10pLmVudHJpZXMoKSl7bGV0IGk9by5pZj8/e30sYz1bcihpLnNyYyl8fG4oaS5zcmNfYWRkcmVzc19zZXQpP2Bzb3VyY2VgOmBgLHIoaS5kc3QpfHxuKGkuZHN0X2FkZHJlc3Nfc2V0KT9gZGVzdGluYXRpb25gOmBgXS5maWx0ZXIoQm9vbGVhbik7Yy5sZW5ndGgmJnMucHVzaCh7ZGV2aWNlOmUubmFtZSx3aGVyZTp0LHJ1bGU6YSsxLHRoZW46by50aGVuLHNpZGU6Yy5qb2luKGAgYW5kIGApLC4uLm8uZGVzY3JpcHRpb24/e2Rlc2NyaXB0aW9uOm8uZGVzY3JpcHRpb259Ont9fSl9fTtmb3IobGV0IHQgb2ZbYGlucHV0YCxgZm9yd2FyZGAsYG91dHB1dGBdKWEoYGZpbHRlciAke3R9YCxlLmZpcmV3YWxsPy5maWx0ZXI/Llt0XT8ucnVsZXMpO2EoYE5BVCBzb3VyY2VgLGUuZmlyZXdhbGw/Lm5hdD8uc291cmNlKSxhKGBOQVQgZGVzdGluYXRpb25gLGUuZmlyZXdhbGw/Lm5hdD8uZGVzdGluYXRpb24pO2ZvcihsZXRbdCxuXW9mIE9iamVjdC5lbnRyaWVzKGUuc3dpdGNoaW5nPy5hY2xzPz97fSkpYShgQUNMICR7dH1gLG4pfXJldHVybntoZWxkOmEscm91dGVzOm8scnVsZXM6c319c3RhdGljIGNhcnJpZXMoZSx0LG4pe2xldCByPWU/LmludGVyZmFjZXM/LmV0aGVybmV0Py5bdF07aWYoIXJ8fCFlKXJldHVybiExO2xldCBpPXIuaW5fbGFnP2UuaW50ZXJmYWNlcz8ubGFnPy5bci5pbl9sYWddOnI7cmV0dXJuIGk/LmFjY2Vzc192bGFuPT09bnx8aT8ubmF0aXZlX3ZsYW49PT1ufHwhIWk/LnRydW5rX3ZsYW5zPy5pbmNsdWRlcyhuKX1zdGF0aWMgdmxhblBhdGgodCxuLHIsaSl7bGV0IGE9bmV3IE1hcCh0LmRldmljZXMubWFwKGU9PltlLm5hbWUsZV0pKSxvPXQuY2FibGVzLmZpbHRlcih0PT5lLmNhcnJpZXMoYS5nZXQodC5kZXZpY2UpLHQucG9ydCxuKSYmZS5jYXJyaWVzKGEuZ2V0KHQuZmFyRGV2aWNlKSx0LmZhclBvcnQsbikpLmZsYXRNYXAoZT0+W2Use2RldmljZTplLmZhckRldmljZSxwb3J0OmUuZmFyUG9ydCxmYXJEZXZpY2U6ZS5kZXZpY2UsZmFyUG9ydDplLnBvcnR9XSkscz1uZXcgTWFwKFtbcixudWxsXV0pLGM9W3JdO2Zvcig7Yy5sZW5ndGg7KXtsZXQgZT1jLnNoaWZ0KCk7aWYoZT09PWkpYnJlYWs7Zm9yKGxldCB0IG9mIG8uZmlsdGVyKHQ9PnQuZGV2aWNlPT09ZSkpcy5oYXModC5mYXJEZXZpY2UpfHwocy5zZXQodC5mYXJEZXZpY2UsdCksYy5wdXNoKHQuZmFyRGV2aWNlKSl9aWYoIXMuaGFzKGkpKXJldHVybjtsZXQgbD1bXTtmb3IobGV0IGU9cy5nZXQoaSk7ZTtlPXMuZ2V0KGUuZGV2aWNlKSlsLnVuc2hpZnQoe2RldmljZTplLmRldmljZSxwb3J0OmUucG9ydCxmYXJEZXZpY2U6ZS5mYXJEZXZpY2UsZmFyUG9ydDplLmZhclBvcnR9KTtyZXR1cm4gbH19LGdEPXtjbGFzczpgdGFic2B9LF9EPVtgYXJpYS1wcmVzc2VkYF0sdkQ9W2BhcmlhLXByZXNzZWRgXSx5RD17Y2xhc3M6YGZpZWxkYH0sYkQ9e2tleTowLGNsYXNzOmB2ZXJkaWN0IHJlamVjdGB9LHhEPXtjbGFzczpgZmllbGRgfSxTRD17Y2xhc3M6YGZpZWxkYH0sQ0Q9e2NsYXNzOmBmaWVsZGB9LHdEPXtrZXk6MCxjbGFzczpgdmVyZGljdCByZWplY3RgfSxURD17a2V5OjEsY2xhc3M6YG11dGVkYH0sRUQ9Qm4oe19fbmFtZTpgVG9vbHNWaWV3YCxwcm9wczp7ZGF0YTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVNhKCgpPT5Nby5yb3V0ZS5wYXJ0c1swXT09PWB2bGFuYD9gdmxhbmA6YHRyYWNlYCkscj1JdChNby5yb3V0ZS5wYXJ0c1swXT09PWB0cmFjZWA/TW8ucm91dGUucGFydHNbMV0/P2BgOmBgKSxpPVNhKCgpPT5uLnZhbHVlPT09YHRyYWNlYCYmTW8ucm91dGUucGFydHNbMV0/aEQudHJhY2UodC5kYXRhLE1vLnJvdXRlLnBhcnRzWzFdKTp2b2lkIDApLGE9U2EoKCk9Pm4udmFsdWU9PT1gdHJhY2VgJiYhIU1vLnJvdXRlLnBhcnRzWzFdJiYhaS52YWx1ZSksbz1TYSgoKT0+Wy4uLm5ldyBTZXQodC5kYXRhLmRldmljZXMuZmxhdE1hcChlPT5PYmplY3Qua2V5cyhlLnN3aXRjaGluZz8udmxhbnM/P3t9KSkpXS5zb3J0KCkpLHM9U2EoKCk9PnQuZGF0YS5kZXZpY2VzLm1hcChlPT5lLm5hbWUpKSxjPUl0KGBgKSxsPUl0KGBgKSx1PUl0KGBgKSxkPUl0KCExKSxmPVNhKCgpPT5kLnZhbHVlJiZjLnZhbHVlJiZsLnZhbHVlJiZ1LnZhbHVlP2hELnZsYW5QYXRoKHQuZGF0YSxjLnZhbHVlLGwudmFsdWUsdS52YWx1ZSk6dm9pZCAwKTtyZXR1cm4oZSx0KT0+KEooKSxZKHEsbnVsbCxbdFsyMl18fD1YKGBoMmAsbnVsbCxgVG9vbHNgLC0xKSxYKGBkaXZgLGdELFtYKGBidXR0b25gLHsiYXJpYS1wcmVzc2VkIjpuLnZhbHVlPT09YHRyYWNlYCxvbkNsaWNrOnRbMF18fD1lPT56dChObykoYHRvb2xzL3RyYWNlYCl9LGBUcmFjZSBhbiBhZGRyZXNzYCw4LF9EKSxYKGBidXR0b25gLHsiYXJpYS1wcmVzc2VkIjpuLnZhbHVlPT09YHZsYW5gLG9uQ2xpY2s6dFsxXXx8PWU9Pnp0KE5vKShgdG9vbHMvdmxhbmApfSxgVkxBTiBwYXRoYCw4LHZEKV0pLG4udmFsdWU9PT1gdHJhY2VgPyhKKCksWShxLHtrZXk6MH0sW3RbMTZdfHw9WChgcGAse2NsYXNzOmBtdXRlZGB9LGAgV2hpY2ggZGV2aWNlIGhvbGRzIGFuIGFkZHJlc3MsIGhvdyBlYWNoIGRldmljZSB3b3VsZCByZWFjaCBpdCBmcm9tIHdoYXQgdGhlIHByb2plY3Qgc2F5cywgYW5kIGV2ZXJ5IHJ1bGUgdGhhdCBuYW1lcyBpdC4gQSByb3V0ZSBsZWFybmVkIGZyb20gQkdQIG9yIE9TUEYgaXMgbm90IGluIHRoZSBwcm9qZWN0LCBzbyBhIGRldmljZSB3aXRoIG5vIHJvdXRlIGhlcmUgbWF5IHN0aWxsIHJlYWNoIGl0LiBgLC0xKSxYKGBmb3JtYCx7Y2xhc3M6YHRvb2wtZm9ybWAsb25TdWJtaXQ6dFszXXx8PUNvKGU9Pnp0KE5vKShgdG9vbHMvdHJhY2UvJHtyLnZhbHVlLnRyaW0oKX1gKSxbYHByZXZlbnRgXSl9LFtYKGBsYWJlbGAseUQsW3RbMTFdfHw9SmkoYEFkZHJlc3MgYCwtMSksQ24oWChgaW5wdXRgLHsib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFsyXXx8PWU9PnIudmFsdWU9ZSxwbGFjZWhvbGRlcjpgMTkyLjAuMi41YH0sbnVsbCw1MTIpLFtbZ28sci52YWx1ZV1dKV0pLHRbMTJdfHw9WChgYnV0dG9uYCx7Y2xhc3M6YHByaW1hcnlgLHR5cGU6YHN1Ym1pdGB9LGBUcmFjZWAsLTEpXSwzMiksYS52YWx1ZT8oSigpLFkoYHBgLGJELGBUaGF0IGlzIG5vdCBvbmUgYWRkcmVzcywgc3VjaCBhcyAxOTIuMC4yLjUgb3IgMjAwMTpkYjg6OjUuYCkpOllpKGBgLCEwKSxpLnZhbHVlPyhKKCksWShxLHtrZXk6MX0sW3RbMTNdfHw9WChgaDNgLG51bGwsYEhlbGQgYnlgLC0xKSxXaShxbyx7aGVhZDpbYERldmljZWAsYE9uYCxgQWRkcmVzc2BdLHJvd3M6aS52YWx1ZS5oZWxkLm1hcChlPT4oe2NlbGxzOlt7ZGV2aWNlOmUuZGV2aWNlfSxlLmhvbGRlcixlLmFkZHJlc3NdfSkpfSxudWxsLDgsW2Byb3dzYF0pLHRbMTRdfHw9WChgaDNgLG51bGwsYEhvdyBlYWNoIGRldmljZSByZWFjaGVzIGl0YCwtMSksV2kocW8se2hlYWQ6W2BEZXZpY2VgLGBUYWJsZWAsYEhvd2AsYFByZWZpeGAsYFZpYWAsYFRocm91Z2hgLGBOb3RlYF0scm93czppLnZhbHVlLnJvdXRlcy5tYXAoZT0+KHttdXRlZDplLmtpbmQ9PT1gbm9uZWAsY2VsbHM6W3tkZXZpY2U6ZS5kZXZpY2V9LGUudGFibGUsZS5raW5kPT09YG5vbmVgP2BubyByb3V0ZSBpbiB0aGUgcHJvamVjdGA6ZS5raW5kLGUucHJlZml4LGUudmlhLGUudGhyb3VnaCxlLm5vdGVdfSkpLGNzdjpgdHJhY2VgfSxudWxsLDgsW2Byb3dzYF0pLHRbMTVdfHw9WChgaDNgLG51bGwsYFJ1bGVzIHRoYXQgbmFtZSBpdGAsLTEpLFdpKHFvLHtoZWFkOltgRGV2aWNlYCxgV2hlcmVgLGBSdWxlYCxgTWF0Y2hlcyBpdHNgLGBUaGVuYCxgRGVzY3JpcHRpb25gXSxyb3dzOmkudmFsdWUucnVsZXMubWFwKGU9Pih7Y2VsbHM6W3tkZXZpY2U6ZS5kZXZpY2V9LGUud2hlcmUsZS5ydWxlLGUuc2lkZSxlLnRoZW4sZS5kZXNjcmlwdGlvbl19KSl9LG51bGwsOCxbYHJvd3NgXSldLDY0KSk6WWkoYGAsITApXSw2NCkpOihKKCksWShxLHtrZXk6MX0sW3RbMjFdfHw9WChgcGAse2NsYXNzOmBtdXRlZGB9LGAgVGhlIGZld2VzdCBjYWJsZXMgdGhhdCBjYXJyeSBhIFZMQU4gZnJvbSBvbmUgZGV2aWNlIHRvIGFub3RoZXIsIGJ5IGVhY2ggcG9ydCdzIFZMQU5zIGFuZCBsaW5rcywgYXQgYm90aCBlbmRzIG9mIGVhY2ggY2FibGUuIGAsLTEpLFgoYGZvcm1gLHtjbGFzczpgdG9vbC1mb3JtYCxvblN1Ym1pdDp0WzEwXXx8PUNvKGU9PmQudmFsdWU9ITAsW2BwcmV2ZW50YF0pfSxbWChgbGFiZWxgLHhELFt0WzE3XXx8PUppKGBWTEFOIGAsLTEpLENuKFgoYHNlbGVjdGAseyJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzRdfHw9ZT0+Yy52YWx1ZT1lLG9uQ2hhbmdlOnRbNV18fD1lPT5kLnZhbHVlPSExfSxbKEooITApLFkocSxudWxsLGhyKG8udmFsdWUsZT0+KEooKSxZKGBvcHRpb25gLHtrZXk6ZX0sSyhlKSwxKSkpLDEyOCkpXSw1NDQpLFtbX28sYy52YWx1ZV1dKV0pLFgoYGxhYmVsYCxTRCxbdFsxOF18fD1KaShgRnJvbSBgLC0xKSxDbihYKGBzZWxlY3RgLHsib25VcGRhdGU6bW9kZWxWYWx1ZSI6dFs2XXx8PWU9PmwudmFsdWU9ZSxvbkNoYW5nZTp0WzddfHw9ZT0+ZC52YWx1ZT0hMX0sWyhKKCEwKSxZKHEsbnVsbCxocihzLnZhbHVlLGU9PihKKCksWShgb3B0aW9uYCx7a2V5OmV9LEsoZSksMSkpKSwxMjgpKV0sNTQ0KSxbW19vLGwudmFsdWVdXSldKSxYKGBsYWJlbGAsQ0QsW3RbMTldfHw9SmkoYFRvIGAsLTEpLENuKFgoYHNlbGVjdGAseyJvblVwZGF0ZTptb2RlbFZhbHVlIjp0WzhdfHw9ZT0+dS52YWx1ZT1lLG9uQ2hhbmdlOnRbOV18fD1lPT5kLnZhbHVlPSExfSxbKEooITApLFkocSxudWxsLGhyKHMudmFsdWUsZT0+KEooKSxZKGBvcHRpb25gLHtrZXk6ZX0sSyhlKSwxKSkpLDEyOCkpXSw1NDQpLFtbX28sdS52YWx1ZV1dKV0pLHRbMjBdfHw9WChgYnV0dG9uYCx7Y2xhc3M6YHByaW1hcnlgLHR5cGU6YHN1Ym1pdGB9LGBGaW5kIHRoZSBwYXRoYCwtMSldLDMyKSxkLnZhbHVlJiZjLnZhbHVlJiZsLnZhbHVlJiZ1LnZhbHVlPyhKKCksWShxLHtrZXk6MH0sW2YudmFsdWU/Zi52YWx1ZS5sZW5ndGg/KEooKSx6aShxbyx7a2V5OjIsaGVhZDpbYEZyb21gLGBQb3J0YCxgVG9gLGBQb3J0YF0scm93czpmLnZhbHVlLm1hcChlPT4oe2NlbGxzOlt7ZGV2aWNlOmUuZGV2aWNlfSxlLnBvcnQse2RldmljZTplLmZhckRldmljZX0sZS5mYXJQb3J0XX0pKX0sbnVsbCw4LFtgcm93c2BdKSk6KEooKSxZKGBwYCxURCxLKGwudmFsdWUpK2AgYW5kIGArSyh1LnZhbHVlKStgIGFyZSBvbmUgZGV2aWNlLmAsMSkpOihKKCksWShgcGAsd0QsYE5vIHBhdGggb2YgY2FibGVzIGNhcnJpZXMgYCtLKGMudmFsdWUpK2AgZnJvbSBgK0sobC52YWx1ZSkrYCB0byBgK0sodS52YWx1ZSkrYC5gLDEpKV0sNjQpKTpZaShgYCwhMCldLDY0KSldLDY0KSl9fSksREQ9Qm4oe19fbmFtZTpgVmxhbnNWaWV3YCxwcm9wczp7ZGF0YTp7fX0sc2V0dXAoZSl7bGV0IHQ9ZSxuPVNhKCgpPT57bGV0IGU9bmV3IE1hcDtmb3IobGV0IG4gb2YgdC5kYXRhLmRldmljZXMpe2ZvcihsZXRbdCxyXW9mIE9iamVjdC5lbnRyaWVzKG4uc3dpdGNoaW5nPy52bGFucz8/e30pKXtpZighciljb250aW51ZTtsZXQgaT1lLmdldCh0KT8/e2lkczpuZXcgU2V0LGRlc2NyaXB0aW9uczpuZXcgU2V0LGRldmljZXM6W10scG9ydHM6W119O2kuaWRzLmFkZChyLmlkKSxyLmRlc2NyaXB0aW9uJiZpLmRlc2NyaXB0aW9ucy5hZGQoci5kZXNjcmlwdGlvbiksaS5kZXZpY2VzLnB1c2gobi5uYW1lKSxlLnNldCh0LGkpfWxldCB0PVsuLi5PYmplY3QuZW50cmllcyhuLmludGVyZmFjZXM/LmV0aGVybmV0Pz97fSkuZmlsdGVyKChbLGVdKT0+ZSYmIWUuaW5fbGFnKSwuLi5PYmplY3QuZW50cmllcyhuLmludGVyZmFjZXM/LmxhZz8/e30pXTtmb3IobGV0W3IsaV1vZiB0KXtsZXQgdD1baT8uYWNjZXNzX3ZsYW4saT8ubmF0aXZlX3ZsYW4sLi4uaT8udHJ1bmtfdmxhbnM/P1tdXTtmb3IobGV0IGkgb2YgbmV3IFNldCh0KSlpJiZlLmdldChpKT8ucG9ydHMucHVzaChgJHtuLm5hbWV9ICR7cn1gKX19cmV0dXJuWy4uLmVdLnNvcnQoKFssZV0sWyx0XSk9Pk1hdGgubWluKC4uLmUuaWRzKS1NYXRoLm1pbiguLi50LmlkcykpLm1hcCgoW2UsdF0pPT4oe2NlbGxzOltlLFsuLi50Lmlkc10uam9pbihgLCBgKSsodC5pZHMuc2l6ZT4xP2AgKGRpZmZlcnMgYnkgZGV2aWNlKWA6YGApLFsuLi50LmRlc2NyaXB0aW9uc10uam9pbihgIC8gYCksdC5kZXZpY2VzLmpvaW4oYCwgYCksdC5wb3J0cy5sZW5ndGhdfSkpfSk7cmV0dXJuKGUsdCk9PihKKCksWShxLG51bGwsW3RbMF18fD1YKGBoMmAsbnVsbCxgVkxBTnNgLC0xKSxXaShxbyx7aGVhZDpbYFZMQU5gLGBJRGAsYERlc2NyaXB0aW9uYCxgRGV2aWNlc2AsYFBvcnRzIGFuZCBMQUdzIGNhcnJ5aW5nIGl0YF0scm93czpuLnZhbHVlLGNzdjpgdmxhbnNgfSxudWxsLDgsW2Byb3dzYF0pXSw2NCkpfX0pLE9EPXsiYXJpYS1sYWJlbCI6YFZpZXdzYH0sa0Q9W2BhcmlhLXByZXNzZWRgLGBvbkNsaWNrYF0sQUQ9e2tleTowLGNsYXNzOmBjb3VudGB9LGpEPXtjbGFzczpgc3RhdHVzLXJhaWxgLCJhcmlhLWxhYmVsIjpgTmV0d29yayBzdGF0dXNgfSxNRD17Y2xhc3M6YHN1bW1hcnlgfSxORD17a2V5OjAsY2xhc3M6YGJhbm5lcmB9LFBEPXtrZXk6MX0sRkQ9e2tleToyLGNsYXNzOmB0YWJsZXNgfSxJRD17a2V5OjEwLGNsYXNzOmBtdXRlZGB9LExEPXtrZXk6MixjbGFzczpgdGFibGVzYH07RG8oQm4oe19fbmFtZTpgQXBwYCxzZXR1cChlKXtsZXQgdD1be2lkOmBncmFwaGAsbGFiZWw6YEdyYXBoYH0se2lkOmBkZXZpY2VzYCxsYWJlbDpgRGV2aWNlc2B9LHtpZDpgdmxhbnNgLGxhYmVsOmBWTEFOc2B9LHtpZDpgYWRkcmVzc2VzYCxsYWJlbDpgQWRkcmVzc2VzYH0se2lkOmBzZXNzaW9uc2AsbGFiZWw6YEJHUGB9LHtpZDpgY2FibGVzYCxsYWJlbDpgQ2FibGVzYH0se2lkOmB0b29sc2AsbGFiZWw6YFRvb2xzYH0se2lkOmBjb21wYXJlYCxsYWJlbDpgQ29tcGFyZWB9LHtpZDpgc2VjcmV0c2AsbGFiZWw6YFNlY3JldHNgfSx7aWQ6YHByb2JsZW1zYCxsYWJlbDpgUHJvYmxlbXNgfV0sbj1TYSgoKT0+TW8ucm91dGUudmlldz09PWBkZXZpY2VgP2BkZXZpY2VzYDpNby5yb3V0ZS52aWV3KSxyPVNhKCgpPT5uLnZhbHVlPT09YGRldmljZXNgP01vLnJvdXRlLnBhcnRzWzBdOnZvaWQgMCksaT1TYSgoKT0+TW8uZGF0YT8uZmluZGluZ3MuZmlsdGVyKGU9PmUubGV2ZWw9PT1gZXJyb3JgKS5sZW5ndGg/PzApLGE9U2EoKCk9PihNby5kYXRhPy5maW5kaW5ncy5sZW5ndGg/PzApLWkudmFsdWUpLG89U2EoKCk9Plt7dGV4dDpBby5jb3VudChNby5kYXRhPy5kZXZpY2VzLmxlbmd0aD8/MCxgZGV2aWNlYCksc3RhdGU6YG5ldXRyYWxgfSx7dGV4dDpBby5jb3VudChpLnZhbHVlLGBlcnJvcmApLHN0YXRlOmkudmFsdWU/YGVycm9yYDpgcXVpZXRgfSx7dGV4dDpBby5jb3VudChhLnZhbHVlLGB3YXJuaW5nYCksc3RhdGU6YS52YWx1ZT9gd2FybmluZ2A6YHF1aWV0YH1dKSxzPUl0KG4udmFsdWU9PT1gc2VhcmNoYD9Nby5yb3V0ZS5wYXJ0c1swXT8/YGA6YGApLGM7cmV0dXJuIGtuKHMsZT0+e2NsZWFyVGltZW91dChjKSxjPXNldFRpbWVvdXQoKCk9Pk5vKGUudHJpbSgpP2BzZWFyY2gvJHtlLnRyaW0oKX1gOmBncmFwaGApLDI1MCl9KSwoZSxpKT0+KEooKSxZKHEsbnVsbCxbWChgaGVhZGVyYCxudWxsLFtpWzJdfHw9WChgYWAse2NsYXNzOmBicmFuZGAsaHJlZjpgI2dyYXBoYCwiYXJpYS1sYWJlbCI6YENpcmN1aXQgU3R1ZGlvLCBiYWNrIHRvIHRoZSBncmFwaGB9LFtYKGBzcGFuYCx7Y2xhc3M6YHdvcmRtYXJrYH0sYENpcmN1aXRgKSxYKGBzcGFuYCx7Y2xhc3M6YHByb2R1Y3RgfSxgU3R1ZGlvYCldLC0xKSxYKGBuYXZgLE9ELFsoSigpLFkocSxudWxsLGhyKHQsZT0+WChgYnV0dG9uYCx7a2V5OmUuaWQsImFyaWEtcHJlc3NlZCI6bi52YWx1ZT09PWUuaWQsb25DbGljazp0PT56dChObykoZS5pZCl9LFtKaShLKGUubGFiZWwpLDEpLGUuaWQ9PT1gcHJvYmxlbXNgPyhKKCksWShgc3BhbmAsQUQsSyh6dChNbykuZGF0YT8uZmluZGluZ3MubGVuZ3RofHxgYCksMSkpOllpKGBgLCEwKV0sOCxrRCkpLDY0KSldKSxDbihYKGBpbnB1dGAseyJvblVwZGF0ZTptb2RlbFZhbHVlIjppWzBdfHw9ZT0+cy52YWx1ZT1lLHR5cGU6YHNlYXJjaGAscGxhY2Vob2xkZXI6YFNlYXJjaCB0aGUgcHJvamVjdGAsImFyaWEtbGFiZWwiOmBTZWFyY2ggdGhlIHByb2plY3RgfSxudWxsLDUxMiksW1tnbyxzLnZhbHVlXV0pLFgoYGRpdmAsakQsW1goYHNwYW5gLE1ELFsoSighMCksWShxLG51bGwsaHIoby52YWx1ZSxlPT4oSigpLFkoYHNwYW5gLHtrZXk6ZS50ZXh0LGNsYXNzOlcoW2BzdW1tYXJ5LWl0ZW1gLGUuc3RhdGVdKX0sSyhlLnRleHQpLDMpKSksMTI4KSldKSxYKGBzcGFuYCx7Y2xhc3M6VyhbYGxpdmVgLHtvbjp6dChNbykubGl2ZT09PWBsaXZlYCxiZWF0Onp0KE1vKS5iZWF0fV0pfSxLKHp0KE1vKS5saXZlPT09YGxpdmVgP2Ake3p0KE1vKS5kYXRhPy5wcm9qZWN0Pz9gYH0gwrcgbGl2ZWA6enQoTW8pLmxpdmUpLDMpXSldKSx6dChNbykuZXJyb3I/KEooKSxZKGBwcmVgLE5ELEsoenQoTW8pLmVycm9yKSwxKSk6WWkoYGAsITApLHp0KE1vKS5kYXRhPyhKKCksWShgbWFpbmAsUEQsW24udmFsdWU9PT1gZ3JhcGhgPyhKKCksemkoYVQse2tleTowLGRhdGE6enQoTW8pLmRhdGF9LG51bGwsOCxbYGRhdGFgXSkpOnIudmFsdWU/KEooKSx6aShlYyx7a2V5OnIudmFsdWUsZGF0YTp6dChNbykuZGF0YSxuYW1lOnIudmFsdWV9LG51bGwsOCxbYGRhdGFgLGBuYW1lYF0pKTooSigpLFkoYGRpdmAsRkQsW24udmFsdWU9PT1gZGV2aWNlc2A/KEooKSx6aSh0Yyx7a2V5OjAsZGF0YTp6dChNbykuZGF0YX0sbnVsbCw4LFtgZGF0YWBdKSk6bi52YWx1ZT09PWB2bGFuc2A/KEooKSx6aShERCx7a2V5OjEsZGF0YTp6dChNbykuZGF0YX0sbnVsbCw4LFtgZGF0YWBdKSk6bi52YWx1ZT09PWBhZGRyZXNzZXNgPyhKKCksemkoWG8se2tleToyLGRhdGE6enQoTW8pLmRhdGF9LG51bGwsOCxbYGRhdGFgXSkpOm4udmFsdWU9PT1gc2Vzc2lvbnNgPyhKKCksemkobUQse2tleTozLGRhdGE6enQoTW8pLmRhdGF9LG51bGwsOCxbYGRhdGFgXSkpOm4udmFsdWU9PT1gY2FibGVzYD8oSigpLHppKFpvLHtrZXk6NCxkYXRhOnp0KE1vKS5kYXRhfSxudWxsLDgsW2BkYXRhYF0pKTpuLnZhbHVlPT09YHRvb2xzYD8oSigpLHppKEVELHtrZXk6NSxkYXRhOnp0KE1vKS5kYXRhfSxudWxsLDgsW2BkYXRhYF0pKTpuLnZhbHVlPT09YGNvbXBhcmVgPyhKKCksemkoeHMse2tleTo2LGRhdGE6enQoTW8pLmRhdGF9LG51bGwsOCxbYGRhdGFgXSkpOm4udmFsdWU9PT1gc2VjcmV0c2A/KEooKSx6aShwRCx7a2V5Ojd9KSk6bi52YWx1ZT09PWBwcm9ibGVtc2A/KEooKSx6aShwVCx7a2V5OjgsZGF0YTp6dChNbykuZGF0YX0sbnVsbCw4LFtgZGF0YWBdKSk6bi52YWx1ZT09PWBzZWFyY2hgPyhKKCksemkobVQse2tleTo5LGRhdGE6enQoTW8pLmRhdGEscXVlcnk6enQoTW8pLnJvdXRlLnBhcnRzWzBdPz9gYH0sbnVsbCw4LFtgZGF0YWAsYHF1ZXJ5YF0pKTooSigpLFkoYHBgLElELFtpWzNdfHw9SmkoYE5vdGhpbmcgaGVyZS4gYCwtMSksWChgYWAse29uQ2xpY2s6aVsxXXx8PWU9Pnp0KE5vKShgZ3JhcGhgKX0sYEJhY2sgdG8gdGhlIGdyYXBoYCksaVs0XXx8PUppKGAuYCwtMSldKSldKSldKSk6enQoTW8pLmVycm9yP1lpKGBgLCEwKTooSigpLFkoYG1haW5gLExELFsuLi5pWzVdfHw9W1goYHBgLHtjbGFzczpgbXV0ZWRgfSxgUmVhZGluZyB0aGUgcHJvamVjdOKApmAsLTEpXV0pKV0sNjQpKX19KSkubW91bnQoYCNhcHBgKSxJbygpOw=="},"favicon.svg":{"type":"image/svg+xml","body":"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+CiAgICA8cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI2IiBmaWxsPSIjZjhlMzQ3IiAvPgogICAgPHJlY3QgeD0iNCIgeT0iOCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjE2IiByeD0iMyIgZmlsbD0iIzBhNDdiOCIgLz4KICAgIDxnIGZpbGw9IiNmZmZmZmYiPgogICAgICAgIDxyZWN0IHg9IjcuNSIgeT0iMTEuNSIgd2lkdGg9IjQiIGhlaWdodD0iMy41IiByeD0iMC42IiAvPgogICAgICAgIDxyZWN0IHg9IjE0IiB5PSIxMS41IiB3aWR0aD0iNCIgaGVpZ2h0PSIzLjUiIHJ4PSIwLjYiIC8+CiAgICAgICAgPHJlY3QgeD0iMjAuNSIgeT0iMTEuNSIgd2lkdGg9IjQiIGhlaWdodD0iMy41IiByeD0iMC42IiAvPgogICAgICAgIDxyZWN0IHg9IjcuNSIgeT0iMTciIHdpZHRoPSI0IiBoZWlnaHQ9IjMuNSIgcng9IjAuNiIgLz4KICAgICAgICA8cmVjdCB4PSIxNCIgeT0iMTciIHdpZHRoPSI0IiBoZWlnaHQ9IjMuNSIgcng9IjAuNiIgLz4KICAgIDwvZz4KICAgIDxyZWN0IHg9IjIwLjUiIHk9IjE3IiB3aWR0aD0iNCIgaGVpZ2h0PSIzLjUiIHJ4PSIwLjYiIGZpbGw9IiNmOGUzNDciIC8+Cjwvc3ZnPgo="},"index.html":{"type":"text/html; charset=utf-8","body":"PCFkb2N0eXBlIGh0bWw+CjwhLS0gQ2lyY3VpdCBTdHVkaW8uIFRoZSBhcHAgZmlsbHMgdGhlIHBhZ2UgZnJvbSAvYXBpL2RhdGEsIGFuZCBkcmF3cyBhZ2FpbiB3aGVuIHRoZSBzZXJ2ZXIgc2F5cyB0aGUgcHJvamVjdCBjaGFuZ2VkLiAtLT4KPGh0bWwgbGFuZz0iZW4iPgogICAgPGhlYWQ+CiAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiIC8+CiAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgICAgIDx0aXRsZT5DaXJjdWl0IFN0dWRpbzwvdGl0bGU+CiAgICAgICAgPCEtLSBTdHVkaW8gc2hvd3Mgb25lIHRlYW0ncyBuZXR3b3JrLCBzbyBzZWFyY2ggZW5naW5lcyBhcmUgYXNrZWQgdG8gbGVhdmUgaXQgb3V0LiAtLT4KICAgICAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9Im5vaW5kZXgsIG5vZm9sbG93LCBub2FyY2hpdmUiIC8+CiAgICAgICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS9zdmcreG1sIiBocmVmPSIvZmF2aWNvbi5zdmciIC8+CiAgICAgICAgPCEtLSBTcGVjaWFsIEdvdGhpYyBpcyBzaGFyZWQgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbiBzaXRlLCBhbmQgc2VydmVkIGZyb20gYmVzaWRlIHRoaXMgcGFnZSBzbyBTdHVkaW8gd29ya3Mgb2ZmbGluZS4gLS0+CiAgICAgICAgPGxpbmsgcmVsPSJwcmVsb2FkIiBocmVmPSIvc3BlY2lhbC1nb3RoaWMtbGF0aW4ud29mZjIiIGFzPSJmb250IiB0eXBlPSJmb250L3dvZmYyIiBjcm9zc29yaWdpbiAvPgogICAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4gc3JjPSIvYXNzZXRzL2luZGV4LURjY0N1S1JqLmpzIj48L3NjcmlwdD4KICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYXNzZXRzL2luZGV4LUJNU0N4Mm81LmNzcyI+CiAgICA8L2hlYWQ+CiAgICA8Ym9keT4KICAgICAgICA8ZGl2IGlkPSJhcHAiPjwvZGl2PgogICAgPC9ib2R5Pgo8L2h0bWw+Cg=="},"special-gothic-latin-ext.woff2":{"type":"font/woff2","body":"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"},"special-gothic-latin.woff2":{"type":"font/woff2","body":"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"},"special-gothic-license.txt":{"type":"text/plain; charset=utf-8","body":"Q29weXJpZ2h0IDIwMjMgVGhlIFNwZWNpYWwgR290aGljIFByb2plY3QgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL0FsaXN0YWlyTWNDcmVhZHkvU3BlY2lhbC1Hb3RoaWMvKQoKVGhpcyBGb250IFNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBTSUwgT3BlbiBGb250IExpY2Vuc2UsIFZlcnNpb24gMS4xLgpUaGlzIGxpY2Vuc2UgaXMgY29waWVkIGJlbG93LCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgd2l0aCBhIEZBUSBhdDoKaHR0cHM6Ly9vcGVuZm9udGxpY2Vuc2Uub3JnCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU0lMIE9QRU4gRk9OVCBMSUNFTlNFIFZlcnNpb24gMS4xIC0gMjYgRmVicnVhcnkgMjAwNwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKUFJFQU1CTEUKVGhlIGdvYWxzIG9mIHRoZSBPcGVuIEZvbnQgTGljZW5zZSAoT0ZMKSBhcmUgdG8gc3RpbXVsYXRlIHdvcmxkd2lkZQpkZXZlbG9wbWVudCBvZiBjb2xsYWJvcmF0aXZlIGZvbnQgcHJvamVjdHMsIHRvIHN1cHBvcnQgdGhlIGZvbnQgY3JlYXRpb24KZWZmb3J0cyBvZiBhY2FkZW1pYyBhbmQgbGluZ3Vpc3RpYyBjb21tdW5pdGllcywgYW5kIHRvIHByb3ZpZGUgYSBmcmVlIGFuZApvcGVuIGZyYW1ld29yayBpbiB3aGljaCBmb250cyBtYXkgYmUgc2hhcmVkIGFuZCBpbXByb3ZlZCBpbiBwYXJ0bmVyc2hpcAp3aXRoIG90aGVycy4KClRoZSBPRkwgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQKcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUKZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCAKcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSBwcm92aWRlZCB0aGF0IGFueSByZXNlcnZlZApuYW1lcyBhcmUgbm90IHVzZWQgYnkgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywKaG93ZXZlciwgY2Fubm90IGJlIHJlbGVhc2VkIHVuZGVyIGFueSBvdGhlciB0eXBlIG9mIGxpY2Vuc2UuIFRoZQpyZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseQp0byBhbnkgZG9jdW1lbnQgY3JlYXRlZCB1c2luZyB0aGUgZm9udHMgb3IgdGhlaXIgZGVyaXZhdGl2ZXMuCgpERUZJTklUSU9OUwoiRm9udCBTb2Z0d2FyZSIgcmVmZXJzIHRvIHRoZSBzZXQgb2YgZmlsZXMgcmVsZWFzZWQgYnkgdGhlIENvcHlyaWdodApIb2xkZXIocykgdW5kZXIgdGhpcyBsaWNlbnNlIGFuZCBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBUaGlzIG1heQppbmNsdWRlIHNvdXJjZSBmaWxlcywgYnVpbGQgc2NyaXB0cyBhbmQgZG9jdW1lbnRhdGlvbi4KCiJSZXNlcnZlZCBGb250IE5hbWUiIHJlZmVycyB0byBhbnkgbmFtZXMgc3BlY2lmaWVkIGFzIHN1Y2ggYWZ0ZXIgdGhlCmNvcHlyaWdodCBzdGF0ZW1lbnQocykuCgoiT3JpZ2luYWwgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUgY29tcG9uZW50cyBhcwpkaXN0cmlidXRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKS4KCiJNb2RpZmllZCBWZXJzaW9uIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLApvciBzdWJzdGl0dXRpbmcgLS0gaW4gcGFydCBvciBpbiB3aG9sZSAtLSBhbnkgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlCk9yaWdpbmFsIFZlcnNpb24sIGJ5IGNoYW5naW5nIGZvcm1hdHMgb3IgYnkgcG9ydGluZyB0aGUgRm9udCBTb2Z0d2FyZSB0byBhCm5ldyBlbnZpcm9ubWVudC4KCiJBdXRob3IiIHJlZmVycyB0byBhbnkgZGVzaWduZXIsIGVuZ2luZWVyLCBwcm9ncmFtbWVyLCB0ZWNobmljYWwKd3JpdGVyIG9yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuCgpQRVJNSVNTSU9OICYgQ09ORElUSU9OUwpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKYSBjb3B5IG9mIHRoZSBGb250IFNvZnR3YXJlLCB0byB1c2UsIHN0dWR5LCBjb3B5LCBtZXJnZSwgZW1iZWQsIG1vZGlmeSwKcmVkaXN0cmlidXRlLCBhbmQgc2VsbCBtb2RpZmllZCBhbmQgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIEZvbnQKU29mdHdhcmUsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKMSkgTmVpdGhlciB0aGUgRm9udCBTb2Z0d2FyZSBub3IgYW55IG9mIGl0cyBpbmRpdmlkdWFsIGNvbXBvbmVudHMsCmluIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuCgoyKSBPcmlnaW5hbCBvciBNb2RpZmllZCBWZXJzaW9ucyBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgYnVuZGxlZCwKcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCBlYWNoIGNvcHkKY29udGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbGljZW5zZS4gVGhlc2UgY2FuIGJlCmluY2x1ZGVkIGVpdGhlciBhcyBzdGFuZC1hbG9uZSB0ZXh0IGZpbGVzLCBodW1hbi1yZWFkYWJsZSBoZWFkZXJzIG9yCmluIHRoZSBhcHByb3ByaWF0ZSBtYWNoaW5lLXJlYWRhYmxlIG1ldGFkYXRhIGZpZWxkcyB3aXRoaW4gdGV4dCBvcgpiaW5hcnkgZmlsZXMgYXMgbG9uZyBhcyB0aG9zZSBmaWVsZHMgY2FuIGJlIGVhc2lseSB2aWV3ZWQgYnkgdGhlIHVzZXIuCgozKSBObyBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSB1c2UgdGhlIFJlc2VydmVkIEZvbnQKTmFtZShzKSB1bmxlc3MgZXhwbGljaXQgd3JpdHRlbiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKQ29weXJpZ2h0IEhvbGRlci4gVGhpcyByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIHByaW1hcnkgZm9udCBuYW1lIGFzCnByZXNlbnRlZCB0byB0aGUgdXNlcnMuCgo0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250ClNvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueQpNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUKQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4KcGVybWlzc2lvbi4KCjUpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLAptdXN0IGJlIGRpc3RyaWJ1dGVkIGVudGlyZWx5IHVuZGVyIHRoaXMgbGljZW5zZSwgYW5kIG11c3Qgbm90IGJlCmRpc3RyaWJ1dGVkIHVuZGVyIGFueSBvdGhlciBsaWNlbnNlLiBUaGUgcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvCnJlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gYW55IGRvY3VtZW50IGNyZWF0ZWQKdXNpbmcgdGhlIEZvbnQgU29mdHdhcmUuCgpURVJNSU5BVElPTgpUaGlzIGxpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIGlmIGFueSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUKbm90IG1ldC4KCkRJU0NMQUlNRVIKVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCk1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVApPRiBDT1BZUklHSFQsIFBBVEVOVCwgVFJBREVNQVJLLCBPUiBPVEhFUiBSSUdIVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkNPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLApJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCkRBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwpGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIFNPRlRXQVJFIE9SIEZST00KT1RIRVIgREVBTElOR1MgSU4gVEhFIEZPTlQgU09GVFdBUkUuCg=="}};
|